diff --git a/ens/abis.py b/ens/abis.py index cfc4e35bb7..d994209c4c 100644 --- a/ens/abis.py +++ b/ens/abis.py @@ -3,754 +3,398 @@ ENS = [ { "constant": True, - "inputs": [ - { - "name": "node", - "type": "bytes32" - } - ], + "inputs": [{"name": "node", "type": "bytes32"}], "name": "resolver", - "outputs": [ - { - "name": "", - "type": "address" - } - ], + "outputs": [{"name": "", "type": "address"}], "payable": False, - "type": "function" + "type": "function", }, { "constant": True, - "inputs": [ - { - "name": "node", - "type": "bytes32" - } - ], + "inputs": [{"name": "node", "type": "bytes32"}], "name": "owner", - "outputs": [ - { - "name": "", - "type": "address" - } - ], + "outputs": [{"name": "", "type": "address"}], "payable": False, - "type": "function" + "type": "function", }, { "constant": False, "inputs": [ - { - "name": "node", - "type": "bytes32" - }, - { - "name": "label", - "type": "bytes32" - }, - { - "name": "owner", - "type": "address" - } + {"name": "node", "type": "bytes32"}, + {"name": "label", "type": "bytes32"}, + {"name": "owner", "type": "address"}, ], "name": "setSubnodeOwner", "outputs": [], "payable": False, - "type": "function" + "type": "function", }, { "constant": False, "inputs": [ - { - "name": "node", - "type": "bytes32" - }, - { - "name": "ttl", - "type": "uint64" - } + {"name": "node", "type": "bytes32"}, + {"name": "ttl", "type": "uint64"}, ], "name": "setTTL", "outputs": [], "payable": False, - "type": "function" + "type": "function", }, { "constant": True, - "inputs": [ - { - "name": "node", - "type": "bytes32" - } - ], + "inputs": [{"name": "node", "type": "bytes32"}], "name": "ttl", - "outputs": [ - { - "name": "", - "type": "uint64" - } - ], + "outputs": [{"name": "", "type": "uint64"}], "payable": False, - "type": "function" + "type": "function", }, { "constant": False, "inputs": [ - { - "name": "node", - "type": "bytes32" - }, - { - "name": "resolver", - "type": "address" - } + {"name": "node", "type": "bytes32"}, + {"name": "resolver", "type": "address"}, ], "name": "setResolver", "outputs": [], "payable": False, - "type": "function" + "type": "function", }, { "constant": False, "inputs": [ - { - "name": "node", - "type": "bytes32" - }, - { - "name": "owner", - "type": "address" - } + {"name": "node", "type": "bytes32"}, + {"name": "owner", "type": "address"}, ], "name": "setOwner", "outputs": [], "payable": False, - "type": "function" + "type": "function", }, { "anonymous": False, "inputs": [ - { - "indexed": True, - "name": "node", - "type": "bytes32" - }, - { - "indexed": False, - "name": "owner", - "type": "address" - } + {"indexed": True, "name": "node", "type": "bytes32"}, + {"indexed": False, "name": "owner", "type": "address"}, ], "name": "Transfer", - "type": "event" + "type": "event", }, { "anonymous": False, "inputs": [ - { - "indexed": True, - "name": "node", - "type": "bytes32" - }, - { - "indexed": True, - "name": "label", - "type": "bytes32" - }, - { - "indexed": False, - "name": "owner", - "type": "address" - } + {"indexed": True, "name": "node", "type": "bytes32"}, + {"indexed": True, "name": "label", "type": "bytes32"}, + {"indexed": False, "name": "owner", "type": "address"}, ], "name": "NewOwner", - "type": "event" + "type": "event", }, { "anonymous": False, "inputs": [ - { - "indexed": True, - "name": "node", - "type": "bytes32" - }, - { - "indexed": False, - "name": "resolver", - "type": "address" - } + {"indexed": True, "name": "node", "type": "bytes32"}, + {"indexed": False, "name": "resolver", "type": "address"}, ], "name": "NewResolver", - "type": "event" + "type": "event", }, { "anonymous": False, "inputs": [ - { - "indexed": True, - "name": "node", - "type": "bytes32" - }, - { - "indexed": False, - "name": "ttl", - "type": "uint64" - } + {"indexed": True, "name": "node", "type": "bytes32"}, + {"indexed": False, "name": "ttl", "type": "uint64"}, ], "name": "NewTTL", - "type": "event" - } + "type": "event", + }, ] AUCTION_REGISTRAR = [ { "constant": False, - "inputs": [ - { - "name": "_hash", - "type": "bytes32" - } - ], + "inputs": [{"name": "_hash", "type": "bytes32"}], "name": "releaseDeed", "outputs": [], "payable": False, - "type": "function" + "type": "function", }, { "constant": True, - "inputs": [ - { - "name": "_hash", - "type": "bytes32" - } - ], + "inputs": [{"name": "_hash", "type": "bytes32"}], "name": "getAllowedTime", - "outputs": [ - { - "name": "timestamp", - "type": "uint256" - } - ], + "outputs": [{"name": "timestamp", "type": "uint256"}], "payable": False, - "type": "function" + "type": "function", }, { "constant": False, - "inputs": [ - { - "name": "unhashedName", - "type": "string" - } - ], + "inputs": [{"name": "unhashedName", "type": "string"}], "name": "invalidateName", "outputs": [], "payable": False, - "type": "function" + "type": "function", }, { "constant": True, "inputs": [ - { - "name": "hash", - "type": "bytes32" - }, - { - "name": "owner", - "type": "address" - }, - { - "name": "value", - "type": "uint256" - }, - { - "name": "salt", - "type": "bytes32" - } + {"name": "hash", "type": "bytes32"}, + {"name": "owner", "type": "address"}, + {"name": "value", "type": "uint256"}, + {"name": "salt", "type": "bytes32"}, ], "name": "shaBid", - "outputs": [ - { - "name": "sealedBid", - "type": "bytes32" - } - ], + "outputs": [{"name": "sealedBid", "type": "bytes32"}], "payable": False, - "type": "function" + "type": "function", }, { "constant": False, "inputs": [ - { - "name": "bidder", - "type": "address" - }, - { - "name": "seal", - "type": "bytes32" - } + {"name": "bidder", "type": "address"}, + {"name": "seal", "type": "bytes32"}, ], "name": "cancelBid", "outputs": [], "payable": False, - "type": "function" + "type": "function", }, { "constant": True, - "inputs": [ - { - "name": "_hash", - "type": "bytes32" - } - ], + "inputs": [{"name": "_hash", "type": "bytes32"}], "name": "entries", "outputs": [ - { - "name": "", - "type": "uint8" - }, - { - "name": "", - "type": "address" - }, - { - "name": "", - "type": "uint256" - }, - { - "name": "", - "type": "uint256" - }, - { - "name": "", - "type": "uint256" - } + {"name": "", "type": "uint8"}, + {"name": "", "type": "address"}, + {"name": "", "type": "uint256"}, + {"name": "", "type": "uint256"}, + {"name": "", "type": "uint256"}, ], "payable": False, - "type": "function" + "type": "function", }, { "constant": True, "inputs": [], "name": "ens", - "outputs": [ - { - "name": "", - "type": "address" - } - ], + "outputs": [{"name": "", "type": "address"}], "payable": False, - "type": "function" + "type": "function", }, { "constant": False, "inputs": [ - { - "name": "_hash", - "type": "bytes32" - }, - { - "name": "_value", - "type": "uint256" - }, - { - "name": "_salt", - "type": "bytes32" - } + {"name": "_hash", "type": "bytes32"}, + {"name": "_value", "type": "uint256"}, + {"name": "_salt", "type": "bytes32"}, ], "name": "unsealBid", "outputs": [], "payable": False, - "type": "function" + "type": "function", }, { "constant": False, - "inputs": [ - { - "name": "_hash", - "type": "bytes32" - } - ], + "inputs": [{"name": "_hash", "type": "bytes32"}], "name": "transferRegistrars", "outputs": [], "payable": False, - "type": "function" + "type": "function", }, { "constant": True, - "inputs": [ - { - "name": "", - "type": "address" - }, - { - "name": "", - "type": "bytes32" - } - ], + "inputs": [{"name": "", "type": "address"}, {"name": "", "type": "bytes32"}], "name": "sealedBids", - "outputs": [ - { - "name": "", - "type": "address" - } - ], + "outputs": [{"name": "", "type": "address"}], "payable": False, - "type": "function" + "type": "function", }, { "constant": True, - "inputs": [ - { - "name": "_hash", - "type": "bytes32" - } - ], + "inputs": [{"name": "_hash", "type": "bytes32"}], "name": "state", - "outputs": [ - { - "name": "", - "type": "uint8" - } - ], + "outputs": [{"name": "", "type": "uint8"}], "payable": False, - "type": "function" + "type": "function", }, { "constant": False, "inputs": [ - { - "name": "_hash", - "type": "bytes32" - }, - { - "name": "newOwner", - "type": "address" - } + {"name": "_hash", "type": "bytes32"}, + {"name": "newOwner", "type": "address"}, ], "name": "transfer", "outputs": [], "payable": False, - "type": "function" + "type": "function", }, { "constant": True, "inputs": [ - { - "name": "_hash", - "type": "bytes32" - }, - { - "name": "_timestamp", - "type": "uint256" - } + {"name": "_hash", "type": "bytes32"}, + {"name": "_timestamp", "type": "uint256"}, ], "name": "isAllowed", - "outputs": [ - { - "name": "allowed", - "type": "bool" - } - ], + "outputs": [{"name": "allowed", "type": "bool"}], "payable": False, - "type": "function" + "type": "function", }, { "constant": False, - "inputs": [ - { - "name": "_hash", - "type": "bytes32" - } - ], + "inputs": [{"name": "_hash", "type": "bytes32"}], "name": "finalizeAuction", "outputs": [], "payable": False, - "type": "function" + "type": "function", }, { "constant": True, "inputs": [], "name": "registryStarted", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], + "outputs": [{"name": "", "type": "uint256"}], "payable": False, - "type": "function" + "type": "function", }, { "constant": True, "inputs": [], "name": "launchLength", - "outputs": [ - { - "name": "", - "type": "uint32" - } - ], + "outputs": [{"name": "", "type": "uint32"}], "payable": False, - "type": "function" + "type": "function", }, { "constant": False, - "inputs": [ - { - "name": "sealedBid", - "type": "bytes32" - } - ], + "inputs": [{"name": "sealedBid", "type": "bytes32"}], "name": "newBid", "outputs": [], "payable": True, - "type": "function" + "type": "function", }, { "constant": False, - "inputs": [ - { - "name": "labels", - "type": "bytes32[]" - } - ], + "inputs": [{"name": "labels", "type": "bytes32[]"}], "name": "eraseNode", "outputs": [], "payable": False, - "type": "function" + "type": "function", }, { "constant": False, - "inputs": [ - { - "name": "_hashes", - "type": "bytes32[]" - } - ], + "inputs": [{"name": "_hashes", "type": "bytes32[]"}], "name": "startAuctions", "outputs": [], "payable": False, - "type": "function" + "type": "function", }, { "constant": False, "inputs": [ - { - "name": "hash", - "type": "bytes32" - }, - { - "name": "deed", - "type": "address" - }, - { - "name": "registrationDate", - "type": "uint256" - } + {"name": "hash", "type": "bytes32"}, + {"name": "deed", "type": "address"}, + {"name": "registrationDate", "type": "uint256"}, ], "name": "acceptRegistrarTransfer", "outputs": [], "payable": False, - "type": "function" + "type": "function", }, { "constant": False, - "inputs": [ - { - "name": "_hash", - "type": "bytes32" - } - ], + "inputs": [{"name": "_hash", "type": "bytes32"}], "name": "startAuction", "outputs": [], "payable": False, - "type": "function" + "type": "function", }, { "constant": True, "inputs": [], "name": "rootNode", - "outputs": [ - { - "name": "", - "type": "bytes32" - } - ], + "outputs": [{"name": "", "type": "bytes32"}], "payable": False, - "type": "function" + "type": "function", }, { "constant": False, "inputs": [ - { - "name": "hashes", - "type": "bytes32[]" - }, - { - "name": "sealedBid", - "type": "bytes32" - } + {"name": "hashes", "type": "bytes32[]"}, + {"name": "sealedBid", "type": "bytes32"}, ], "name": "startAuctionsAndBid", "outputs": [], "payable": True, - "type": "function" + "type": "function", }, { "inputs": [ - { - "name": "_ens", - "type": "address" - }, - { - "name": "_rootNode", - "type": "bytes32" - }, - { - "name": "_startDate", - "type": "uint256" - } + {"name": "_ens", "type": "address"}, + {"name": "_rootNode", "type": "bytes32"}, + {"name": "_startDate", "type": "uint256"}, ], "payable": False, - "type": "constructor" + "type": "constructor", }, { "anonymous": False, "inputs": [ - { - "indexed": True, - "name": "hash", - "type": "bytes32" - }, - { - "indexed": False, - "name": "registrationDate", - "type": "uint256" - } + {"indexed": True, "name": "hash", "type": "bytes32"}, + {"indexed": False, "name": "registrationDate", "type": "uint256"}, ], "name": "AuctionStarted", - "type": "event" + "type": "event", }, { "anonymous": False, "inputs": [ - { - "indexed": True, - "name": "hash", - "type": "bytes32" - }, - { - "indexed": True, - "name": "bidder", - "type": "address" - }, - { - "indexed": False, - "name": "deposit", - "type": "uint256" - } + {"indexed": True, "name": "hash", "type": "bytes32"}, + {"indexed": True, "name": "bidder", "type": "address"}, + {"indexed": False, "name": "deposit", "type": "uint256"}, ], "name": "NewBid", - "type": "event" + "type": "event", }, { "anonymous": False, "inputs": [ - { - "indexed": True, - "name": "hash", - "type": "bytes32" - }, - { - "indexed": True, - "name": "owner", - "type": "address" - }, - { - "indexed": False, - "name": "value", - "type": "uint256" - }, - { - "indexed": False, - "name": "status", - "type": "uint8" - } + {"indexed": True, "name": "hash", "type": "bytes32"}, + {"indexed": True, "name": "owner", "type": "address"}, + {"indexed": False, "name": "value", "type": "uint256"}, + {"indexed": False, "name": "status", "type": "uint8"}, ], "name": "BidRevealed", - "type": "event" + "type": "event", }, { "anonymous": False, "inputs": [ - { - "indexed": True, - "name": "hash", - "type": "bytes32" - }, - { - "indexed": True, - "name": "owner", - "type": "address" - }, - { - "indexed": False, - "name": "value", - "type": "uint256" - }, - { - "indexed": False, - "name": "registrationDate", - "type": "uint256" - } + {"indexed": True, "name": "hash", "type": "bytes32"}, + {"indexed": True, "name": "owner", "type": "address"}, + {"indexed": False, "name": "value", "type": "uint256"}, + {"indexed": False, "name": "registrationDate", "type": "uint256"}, ], "name": "HashRegistered", - "type": "event" + "type": "event", }, { "anonymous": False, "inputs": [ - { - "indexed": True, - "name": "hash", - "type": "bytes32" - }, - { - "indexed": False, - "name": "value", - "type": "uint256" - } + {"indexed": True, "name": "hash", "type": "bytes32"}, + {"indexed": False, "name": "value", "type": "uint256"}, ], "name": "HashReleased", - "type": "event" + "type": "event", }, { "anonymous": False, "inputs": [ - { - "indexed": True, - "name": "hash", - "type": "bytes32" - }, - { - "indexed": True, - "name": "name", - "type": "string" - }, - { - "indexed": False, - "name": "value", - "type": "uint256" - }, - { - "indexed": False, - "name": "registrationDate", - "type": "uint256" - } + {"indexed": True, "name": "hash", "type": "bytes32"}, + {"indexed": True, "name": "name", "type": "string"}, + {"indexed": False, "name": "value", "type": "uint256"}, + {"indexed": False, "name": "registrationDate", "type": "uint256"}, ], "name": "HashInvalidated", - "type": "event" - } + "type": "event", + }, ] DEED = [ @@ -758,14 +402,9 @@ "constant": True, "inputs": [], "name": "creationDate", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], + "outputs": [{"name": "", "type": "uint256"}], "payable": False, - "type": "function" + "type": "function", }, { "constant": False, @@ -773,112 +412,65 @@ "name": "destroyDeed", "outputs": [], "payable": False, - "type": "function" + "type": "function", }, { "constant": False, - "inputs": [ - { - "name": "newOwner", - "type": "address" - } - ], + "inputs": [{"name": "newOwner", "type": "address"}], "name": "setOwner", "outputs": [], "payable": False, - "type": "function" + "type": "function", }, { "constant": True, "inputs": [], "name": "registrar", - "outputs": [ - { - "name": "", - "type": "address" - } - ], + "outputs": [{"name": "", "type": "address"}], "payable": False, - "type": "function" + "type": "function", }, { "constant": True, "inputs": [], "name": "owner", - "outputs": [ - { - "name": "", - "type": "address" - } - ], + "outputs": [{"name": "", "type": "address"}], "payable": False, - "type": "function" + "type": "function", }, { "constant": False, - "inputs": [ - { - "name": "refundRatio", - "type": "uint256" - } - ], + "inputs": [{"name": "refundRatio", "type": "uint256"}], "name": "closeDeed", "outputs": [], "payable": False, - "type": "function" + "type": "function", }, { "constant": False, - "inputs": [ - { - "name": "newRegistrar", - "type": "address" - } - ], + "inputs": [{"name": "newRegistrar", "type": "address"}], "name": "setRegistrar", "outputs": [], "payable": False, - "type": "function" + "type": "function", }, { "constant": False, - "inputs": [ - { - "name": "newValue", - "type": "uint256" - } - ], + "inputs": [{"name": "newValue", "type": "uint256"}], "name": "setBalance", "outputs": [], "payable": True, - "type": "function" - }, - { - "inputs": [], - "type": "constructor" - }, - { - "payable": True, - "type": "fallback" + "type": "function", }, + {"inputs": [], "type": "constructor"}, + {"payable": True, "type": "fallback"}, { "anonymous": False, - "inputs": [ - { - "indexed": False, - "name": "newOwner", - "type": "address" - } - ], + "inputs": [{"indexed": False, "name": "newOwner", "type": "address"}], "name": "OwnerChanged", - "type": "event" + "type": "event", }, - { - "anonymous": False, - "inputs": [], - "name": "DeedClosed", - "type": "event" - } + {"anonymous": False, "inputs": [], "name": "DeedClosed", "type": "event"}, ] FIFS_REGISTRAR = [ @@ -886,699 +478,377 @@ "constant": True, "inputs": [], "name": "ens", - "outputs": [ - { - "name": "", - "type": "address" - } - ], + "outputs": [{"name": "", "type": "address"}], "payable": False, - "type": "function" + "type": "function", }, { "constant": True, - "inputs": [ - { - "name": "", - "type": "bytes32" - } - ], + "inputs": [{"name": "", "type": "bytes32"}], "name": "expiryTimes", - "outputs": [ - { - "name": "", - "type": "uint256" - } - ], + "outputs": [{"name": "", "type": "uint256"}], "payable": False, - "type": "function" + "type": "function", }, { "constant": False, "inputs": [ - { - "name": "subnode", - "type": "bytes32" - }, - { - "name": "owner", - "type": "address" - } + {"name": "subnode", "type": "bytes32"}, + {"name": "owner", "type": "address"}, ], "name": "register", "outputs": [], "payable": False, - "type": "function" + "type": "function", }, { "constant": True, "inputs": [], "name": "rootNode", - "outputs": [ - { - "name": "", - "type": "bytes32" - } - ], + "outputs": [{"name": "", "type": "bytes32"}], "payable": False, - "type": "function" + "type": "function", }, { "inputs": [ - { - "name": "ensAddr", - "type": "address" - }, - { - "name": "node", - "type": "bytes32" - } + {"name": "ensAddr", "type": "address"}, + {"name": "node", "type": "bytes32"}, ], - "type": "constructor" - } + "type": "constructor", + }, ] RESOLVER = [ { "constant": True, - "inputs": [ - { - "name": "interfaceID", - "type": "bytes4" - } - ], + "inputs": [{"name": "interfaceID", "type": "bytes4"}], "name": "supportsInterface", - "outputs": [ - { - "name": "", - "type": "bool" - } - ], + "outputs": [{"name": "", "type": "bool"}], "payable": False, "stateMutability": "view", - "type": "function" + "type": "function", }, { "constant": False, "inputs": [ - { - "name": "node", - "type": "bytes32" - }, - { - "name": "key", - "type": "string" - }, - { - "name": "value", - "type": "string" - } + {"name": "node", "type": "bytes32"}, + {"name": "key", "type": "string"}, + {"name": "value", "type": "string"}, ], "name": "setText", "outputs": [], "payable": False, "stateMutability": "nonpayable", - "type": "function" + "type": "function", }, { "constant": True, "inputs": [ - { - "name": "node", - "type": "bytes32" - }, - { - "name": "contentTypes", - "type": "uint256" - } + {"name": "node", "type": "bytes32"}, + {"name": "contentTypes", "type": "uint256"}, ], "name": "ABI", "outputs": [ - { - "name": "contentType", - "type": "uint256" - }, - { - "name": "data", - "type": "bytes" - } + {"name": "contentType", "type": "uint256"}, + {"name": "data", "type": "bytes"}, ], "payable": False, "stateMutability": "view", - "type": "function" + "type": "function", }, { "constant": False, "inputs": [ - { - "name": "node", - "type": "bytes32" - }, - { - "name": "x", - "type": "bytes32" - }, - { - "name": "y", - "type": "bytes32" - } + {"name": "node", "type": "bytes32"}, + {"name": "x", "type": "bytes32"}, + {"name": "y", "type": "bytes32"}, ], "name": "setPubkey", "outputs": [], "payable": False, "stateMutability": "nonpayable", - "type": "function" + "type": "function", }, { "constant": True, - "inputs": [ - { - "name": "node", - "type": "bytes32" - } - ], + "inputs": [{"name": "node", "type": "bytes32"}], "name": "content", - "outputs": [ - { - "name": "ret", - "type": "bytes32" - } - ], + "outputs": [{"name": "ret", "type": "bytes32"}], "payable": False, "stateMutability": "view", - "type": "function" + "type": "function", }, { "constant": True, - "inputs": [ - { - "name": "node", - "type": "bytes32" - } - ], + "inputs": [{"name": "node", "type": "bytes32"}], "name": "addr", - "outputs": [ - { - "name": "ret", - "type": "address" - } - ], + "outputs": [{"name": "ret", "type": "address"}], "payable": False, "stateMutability": "view", - "type": "function" + "type": "function", }, { "constant": True, "inputs": [ - { - "name": "node", - "type": "bytes32" - }, - { - "name": "key", - "type": "string" - } + {"name": "node", "type": "bytes32"}, + {"name": "key", "type": "string"}, ], "name": "text", - "outputs": [ - { - "name": "ret", - "type": "string" - } - ], + "outputs": [{"name": "ret", "type": "string"}], "payable": False, "stateMutability": "view", - "type": "function" + "type": "function", }, { "constant": False, "inputs": [ - { - "name": "node", - "type": "bytes32" - }, - { - "name": "contentType", - "type": "uint256" - }, - { - "name": "data", - "type": "bytes" - } + {"name": "node", "type": "bytes32"}, + {"name": "contentType", "type": "uint256"}, + {"name": "data", "type": "bytes"}, ], "name": "setABI", "outputs": [], "payable": False, "stateMutability": "nonpayable", - "type": "function" + "type": "function", }, { "constant": True, - "inputs": [ - { - "name": "node", - "type": "bytes32" - } - ], + "inputs": [{"name": "node", "type": "bytes32"}], "name": "name", - "outputs": [ - { - "name": "ret", - "type": "string" - } - ], + "outputs": [{"name": "ret", "type": "string"}], "payable": False, "stateMutability": "view", - "type": "function" + "type": "function", }, { "constant": False, "inputs": [ - { - "name": "node", - "type": "bytes32" - }, - { - "name": "name", - "type": "string" - } + {"name": "node", "type": "bytes32"}, + {"name": "name", "type": "string"}, ], "name": "setName", "outputs": [], "payable": False, "stateMutability": "nonpayable", - "type": "function" + "type": "function", }, { "constant": False, "inputs": [ - { - "name": "node", - "type": "bytes32" - }, - { - "name": "hash", - "type": "bytes32" - } + {"name": "node", "type": "bytes32"}, + {"name": "hash", "type": "bytes32"}, ], "name": "setContent", "outputs": [], "payable": False, "stateMutability": "nonpayable", - "type": "function" + "type": "function", }, { "constant": True, - "inputs": [ - { - "name": "node", - "type": "bytes32" - } - ], + "inputs": [{"name": "node", "type": "bytes32"}], "name": "pubkey", - "outputs": [ - { - "name": "x", - "type": "bytes32" - }, - { - "name": "y", - "type": "bytes32" - } - ], + "outputs": [{"name": "x", "type": "bytes32"}, {"name": "y", "type": "bytes32"}], "payable": False, "stateMutability": "view", - "type": "function" + "type": "function", }, { "constant": False, "inputs": [ - { - "name": "node", - "type": "bytes32" - }, - { - "name": "addr", - "type": "address" - } + {"name": "node", "type": "bytes32"}, + {"name": "addr", "type": "address"}, ], "name": "setAddr", "outputs": [], "payable": False, "stateMutability": "nonpayable", - "type": "function" + "type": "function", }, -{ + { "constant": False, "inputs": [ - { - "internalType": "bytes", - "name": "name", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } + {"internalType": "bytes", "name": "name", "type": "bytes"}, + {"internalType": "bytes", "name": "data", "type": "bytes"}, ], "name": "resolve", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], + "outputs": [{"internalType": "bytes", "name": "", "type": "bytes"}], "stateMutability": "view", - "type": "function" + "type": "function", }, { "constant": False, "inputs": [ - { - "internalType": "bytes", - "name": "response", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "extraData", - "type": "bytes" - } + {"internalType": "bytes", "name": "response", "type": "bytes"}, + {"internalType": "bytes", "name": "extraData", "type": "bytes"}, ], "name": "resolveWithProof", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], + "outputs": [{"internalType": "bytes", "name": "", "type": "bytes"}], "stateMutability": "view", - "type": "function" + "type": "function", }, { - "inputs": [ - { - "name": "ensAddr", - "type": "address" - } - ], + "inputs": [{"name": "ensAddr", "type": "address"}], "payable": False, "stateMutability": "nonpayable", - "type": "constructor" + "type": "constructor", }, { "anonymous": False, "inputs": [ - { - "indexed": True, - "name": "node", - "type": "bytes32" - }, - { - "indexed": False, - "name": "a", - "type": "address" - } + {"indexed": True, "name": "node", "type": "bytes32"}, + {"indexed": False, "name": "a", "type": "address"}, ], "name": "AddrChanged", - "type": "event" + "type": "event", }, { "anonymous": False, "inputs": [ - { - "indexed": True, - "name": "node", - "type": "bytes32" - }, - { - "indexed": False, - "name": "hash", - "type": "bytes32" - } + {"indexed": True, "name": "node", "type": "bytes32"}, + {"indexed": False, "name": "hash", "type": "bytes32"}, ], "name": "ContentChanged", - "type": "event" + "type": "event", }, { "anonymous": False, "inputs": [ - { - "indexed": True, - "name": "node", - "type": "bytes32" - }, - { - "indexed": False, - "name": "name", - "type": "string" - } + {"indexed": True, "name": "node", "type": "bytes32"}, + {"indexed": False, "name": "name", "type": "string"}, ], "name": "NameChanged", - "type": "event" + "type": "event", }, { "anonymous": False, "inputs": [ - { - "indexed": True, - "name": "node", - "type": "bytes32" - }, - { - "indexed": True, - "name": "contentType", - "type": "uint256" - } + {"indexed": True, "name": "node", "type": "bytes32"}, + {"indexed": True, "name": "contentType", "type": "uint256"}, ], "name": "ABIChanged", - "type": "event" + "type": "event", }, { "anonymous": False, "inputs": [ - { - "indexed": True, - "name": "node", - "type": "bytes32" - }, - { - "indexed": False, - "name": "x", - "type": "bytes32" - }, - { - "indexed": False, - "name": "y", - "type": "bytes32" - } + {"indexed": True, "name": "node", "type": "bytes32"}, + {"indexed": False, "name": "x", "type": "bytes32"}, + {"indexed": False, "name": "y", "type": "bytes32"}, ], "name": "PubkeyChanged", - "type": "event" + "type": "event", }, { "anonymous": False, "inputs": [ - { - "indexed": True, - "name": "node", - "type": "bytes32" - }, - { - "indexed": True, - "name": "indexedKey", - "type": "string" - }, - { - "indexed": False, - "name": "key", - "type": "string" - } + {"indexed": True, "name": "node", "type": "bytes32"}, + {"indexed": True, "name": "indexedKey", "type": "string"}, + {"indexed": False, "name": "key", "type": "string"}, ], "name": "TextChanged", - "type": "event" - } + "type": "event", + }, ] REVERSE_RESOLVER = [ { - 'constant': True, - 'inputs': [], - 'name': 'ens', - 'outputs': [ - { - 'name': '', - 'type': 'address'} - ], - 'payable': False, - 'stateMutability': 'view', - 'type': 'function' + "constant": True, + "inputs": [], + "name": "ens", + "outputs": [{"name": "", "type": "address"}], + "payable": False, + "stateMutability": "view", + "type": "function", }, { - 'constant': True, - 'inputs': [ - { - 'name': '', - 'type': 'bytes32'} - ], - 'name': 'name', - 'outputs': [ - { - 'name': '', - 'type': 'string' - } - ], - 'payable': False, - 'stateMutability': 'view', - 'type': 'function' - }, - { - 'constant': False, - 'inputs': [ - { - 'name': 'node', - 'type': 'bytes32' - }, - { - 'name': '_name', 'type': 'string' - } - ], - 'name': 'setName', - 'outputs': [], - 'payable': False, - 'stateMutability': 'nonpayable', - 'type': 'function'}, - { - 'inputs': [ - { - 'name': 'ensAddr', - 'type': 'address' - } + "constant": True, + "inputs": [{"name": "", "type": "bytes32"}], + "name": "name", + "outputs": [{"name": "", "type": "string"}], + "payable": False, + "stateMutability": "view", + "type": "function", + }, + { + "constant": False, + "inputs": [ + {"name": "node", "type": "bytes32"}, + {"name": "_name", "type": "string"}, ], - 'payable': False, - 'stateMutability': 'nonpayable', - 'type': 'constructor' - } + "name": "setName", + "outputs": [], + "payable": False, + "stateMutability": "nonpayable", + "type": "function", + }, + { + "inputs": [{"name": "ensAddr", "type": "address"}], + "payable": False, + "stateMutability": "nonpayable", + "type": "constructor", + }, ] REVERSE_REGISTRAR = [ { "constant": False, "inputs": [ - { - "name": "owner", - "type": "address" - }, - { - "name": "resolver", - "type": "address" - } + {"name": "owner", "type": "address"}, + {"name": "resolver", "type": "address"}, ], "name": "claimWithResolver", - "outputs": [ - { - "name": "node", - "type": "bytes32" - } - ], + "outputs": [{"name": "node", "type": "bytes32"}], "payable": False, - "type": "function" + "type": "function", }, { "constant": False, - "inputs": [ - { - "name": "owner", - "type": "address" - } - ], + "inputs": [{"name": "owner", "type": "address"}], "name": "claim", - "outputs": [ - { - "name": "node", - "type": "bytes32" - } - ], + "outputs": [{"name": "node", "type": "bytes32"}], "payable": False, - "type": "function" + "type": "function", }, { "constant": True, "inputs": [], "name": "ens", - "outputs": [ - { - "name": "", - "type": "address" - } - ], + "outputs": [{"name": "", "type": "address"}], "payable": False, - "type": "function" + "type": "function", }, { "constant": True, "inputs": [], "name": "defaultResolver", - "outputs": [ - { - "name": "", - "type": "address" - } - ], + "outputs": [{"name": "", "type": "address"}], "payable": False, - "type": "function" + "type": "function", }, { "constant": True, - "inputs": [ - { - "name": "addr", - "type": "address" - } - ], + "inputs": [{"name": "addr", "type": "address"}], "name": "node", - "outputs": [ - { - "name": "ret", - "type": "bytes32" - } - ], + "outputs": [{"name": "ret", "type": "bytes32"}], "payable": False, - "type": "function" + "type": "function", }, { "constant": False, - "inputs": [ - { - "name": "name", - "type": "string" - } - ], + "inputs": [{"name": "name", "type": "string"}], "name": "setName", - "outputs": [ - { - "name": "node", - "type": "bytes32" - } - ], + "outputs": [{"name": "node", "type": "bytes32"}], "payable": False, - "type": "function" + "type": "function", }, { "inputs": [ - { - "name": "ensAddr", - "type": "address" - }, - { - "name": "resolverAddr", - "type": "address" - } + {"name": "ensAddr", "type": "address"}, + {"name": "resolverAddr", "type": "address"}, ], "payable": False, - "type": "constructor" - } + "type": "constructor", + }, ] diff --git a/ens/constants.py b/ens/constants.py index eb8ce5b461..50f812a3be 100644 --- a/ens/constants.py +++ b/ens/constants.py @@ -12,15 +12,17 @@ AUCTION_START_GAS_CONSTANT = 25000 AUCTION_START_GAS_MARGINAL = 39000 -EMPTY_SHA3_BYTES = HexBytes(b'\0' * 32) -EMPTY_ADDR_HEX = HexAddress(HexStr('0x' + '00' * 20)) +EMPTY_SHA3_BYTES = HexBytes(b"\0" * 32) +EMPTY_ADDR_HEX = HexAddress(HexStr("0x" + "00" * 20)) -REVERSE_REGISTRAR_DOMAIN = 'addr.reverse' +REVERSE_REGISTRAR_DOMAIN = "addr.reverse" -ENS_MAINNET_ADDR = ChecksumAddress(HexAddress(HexStr('0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e'))) +ENS_MAINNET_ADDR = ChecksumAddress( + HexAddress(HexStr("0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e")) +) # --- interface ids --- # GET_TEXT_INTERFACE_ID = HexStr("0x59d1d43c") -EXTENDED_RESOLVER_INTERFACE_ID = HexStr('0x9061b923') # ENSIP-10 +EXTENDED_RESOLVER_INTERFACE_ID = HexStr("0x9061b923") # ENSIP-10 diff --git a/ens/contract_data.py b/ens/contract_data.py index 596393a389..a0a525562b 100644 --- a/ens/contract_data.py +++ b/ens/contract_data.py @@ -2,38 +2,50 @@ import json # ENS Default Registrar -registrar_abi = json.loads('[{"inputs":[{"internalType":"contract ENS","name":"_ens","type":"address"},{"internalType":"bytes32","name":"_baseNode","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"controller","type":"address"}],"name":"ControllerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"controller","type":"address"}],"name":"ControllerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"expires","type":"uint256"}],"name":"NameMigrated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"expires","type":"uint256"}],"name":"NameRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"expires","type":"uint256"}],"name":"NameRenewed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":true,"inputs":[],"name":"GRACE_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"controller","type":"address"}],"name":"addController","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"available","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"baseNode","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"controllers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ens","outputs":[{"internalType":"contract ENS","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"nameExpires","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"reclaim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"duration","type":"uint256"}],"name":"register","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"duration","type":"uint256"}],"name":"registerOnly","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"controller","type":"address"}],"name":"removeController","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"}],"name":"renew","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"resolver","type":"address"}],"name":"setResolver","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]') -registrar_bytecode = '60806040523480156200001157600080fd5b5060405160408062002e71833981018060405260408110156200003357600080fd5b8101908080519060200190929190805190602001909291905050506200008b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002620001d6640100000000026401000000009004565b33600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3620001866380ac58cd7c010000000000000000000000000000000000000000000000000000000002620001d6640100000000026401000000009004565b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600381905550505062000294565b63ffffffff7c010000000000000000000000000000000000000000000000000000000002817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916141515156200022857600080fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612bcd80620002a46000396000f3fe60806040526004361061015f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806301ffc9a714610164578063081812fc146101d6578063095ea7b3146102515780630e297b45146102ac57806323b872dd1461032557806328ed4f6c146103a05780633f15457f146103fb57806342842e0e146104525780634e543b26146104cd5780636352211e1461051e57806370a0823114610599578063715018a6146105fe5780638da5cb5b146106155780638f32d59b1461066c57806396e494e81461069b578063a22cb465146106ee578063a7fc7a071461074b578063b88d4fde1461079c578063c1a287e2146108ae578063c475abff146108d9578063d6e4fa8614610932578063da8c229e14610981578063ddf7fcb0146109ea578063e985e9c514610a15578063f2fde38b14610a9e578063f6a74ed714610aef578063fca247ac14610b40575b600080fd5b34801561017057600080fd5b506101bc6004803603602081101561018757600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610bb9565b604051808215151515815260200191505060405180910390f35b3480156101e257600080fd5b5061020f600480360360208110156101f957600080fd5b8101908080359060200190929190505050610f82565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561025d57600080fd5b506102aa6004803603604081101561027457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fd3565b005b3480156102b857600080fd5b5061030f600480360360608110156102cf57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611118565b6040518082815260200191505060405180910390f35b34801561033157600080fd5b5061039e6004803603606081101561034857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611130565b005b3480156103ac57600080fd5b506103f9600480360360408110156103c357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611155565b005b34801561040757600080fd5b50610410611381565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561045e57600080fd5b506104cb6004803603606081101561047557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113a7565b005b3480156104d957600080fd5b5061051c600480360360208110156104f057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113c8565b005b34801561052a57600080fd5b506105576004803603602081101561054157600080fd5b81019080803590602001909291905050506114bd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105a557600080fd5b506105e8600480360360208110156105bc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114f0565b6040518082815260200191505060405180910390f35b34801561060a57600080fd5b50610613611574565b005b34801561062157600080fd5b5061062a611648565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561067857600080fd5b50610681611672565b604051808215151515815260200191505060405180910390f35b3480156106a757600080fd5b506106d4600480360360208110156106be57600080fd5b81019080803590602001909291905050506116ca565b604051808215151515815260200191505060405180910390f35b3480156106fa57600080fd5b506107496004803603604081101561071157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506116ee565b005b34801561075757600080fd5b5061079a6004803603602081101561076e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061182a565b005b3480156107a857600080fd5b506108ac600480360360808110156107bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561082657600080fd5b82018360208201111561083857600080fd5b8035906020019184600183028401116401000000008311171561085a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506118db565b005b3480156108ba57600080fd5b506108c3611903565b6040518082815260200191505060405180910390f35b3480156108e557600080fd5b5061091c600480360360408110156108fc57600080fd5b81019080803590602001909291908035906020019092919050505061190a565b6040518082815260200191505060405180910390f35b34801561093e57600080fd5b5061096b6004803603602081101561095557600080fd5b8101908080359060200190929190505050611b45565b6040518082815260200191505060405180910390f35b34801561098d57600080fd5b506109d0600480360360208110156109a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b62565b604051808215151515815260200191505060405180910390f35b3480156109f657600080fd5b506109ff611b82565b6040518082815260200191505060405180910390f35b348015610a2157600080fd5b50610a8460048036036040811015610a3857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b88565b604051808215151515815260200191505060405180910390f35b348015610aaa57600080fd5b50610aed60048036036020811015610ac157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c1c565b005b348015610afb57600080fd5b50610b3e60048036036020811015610b1257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c3b565b005b348015610b4c57600080fd5b50610ba360048036036060811015610b6357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611cec565b6040518082815260200191505060405180910390f35b600060405180807f737570706f727473496e74657266616365286279746573342900000000000000815250601901905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610efe575060405180807f736166655472616e7366657246726f6d28616464726573732c6164647265737381526020017f2c75696e743235362c6279746573290000000000000000000000000000000000815250602f019050604051809103902060405180807f736166655472616e7366657246726f6d28616464726573732c6164647265737381526020017f2c75696e743235362900000000000000000000000000000000000000000000008152506029019050604051809103902060405180807f7472616e7366657246726f6d28616464726573732c616464726573732c75696e81526020017f74323536290000000000000000000000000000000000000000000000000000008152506025019050604051809103902060405180807f6973417070726f766564466f72416c6c28616464726573732c6164647265737381526020017f29000000000000000000000000000000000000000000000000000000000000008152506021019050604051809103902060405180807f736574417070726f76616c466f72416c6c28616464726573732c626f6f6c2900815250601f019050604051809103902060405180807f676574417070726f7665642875696e74323536290000000000000000000000008152506014019050604051809103902060405180807f617070726f766528616464726573732c75696e743235362900000000000000008152506018019050604051809103902060405180807f6f776e65724f662875696e7432353629000000000000000000000000000000008152506010019050604051809103902060405180807f62616c616e63654f6628616464726573732900000000000000000000000000008152506012019050604051809103902018181818181818187bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610f7b575060405180807f7265636c61696d2875696e743235362c61646472657373290000000000000000815250601801905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6000610f8d82611d04565b1515610f9857600080fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610fde826114bd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561101b57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061105b575061105a8133611b88565b5b151561106657600080fd5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006111278484846000611d76565b90509392505050565b61113a33826120b2565b151561114557600080fd5b611150838383612147565b505050565b3073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be36003546040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b1580156111fd57600080fd5b505afa158015611211573d6000803e3d6000fd5b505050506040513d602081101561122757600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614151561125a57600080fd5b61126433836120b2565b151561126f57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab592360035484600102846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b15801561134157600080fd5b505af1158015611355573d6000803e3d6000fd5b505050506040513d602081101561136b57600080fd5b8101908080519060200190929190505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6113c383838360206040519081016040528060008152506118db565b505050565b6113d0611672565b15156113db57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631896f70a600354836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b1580156114a257600080fd5b505af11580156114b6573d6000803e3d6000fd5b5050505050565b60004260096000848152602001908152602001600020541115156114e057600080fd5b6114e9826123ac565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561152d57600080fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61157c611672565b151561158757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b6000426276a700600960008581526020019081526020016000205401109050919050565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561172957600080fd5b80600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b611832611672565b151561183d57600080fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f0a8bb31534c0ed46f380cb867bd5c803a189ced9a764e30b3a4991a9901d747460405160405180910390a250565b6118e6848484611130565b6118f28484848461242a565b15156118fd57600080fd5b50505050565b6276a70081565b60003073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be36003546040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b1580156119b457600080fd5b505afa1580156119c8573d6000803e3d6000fd5b505050506040513d60208110156119de57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16141515611a1157600080fd5b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515611a6957600080fd5b426276a70060096000868152602001908152602001600020540110151515611a9057600080fd5b6276a70082016276a7008360096000878152602001908152602001600020540101111515611abd57600080fd5b816009600085815260200190815260200160002060008282540192505081905550827f9b87a00e30f1ac65d898f070f8a3488fe60517182d0a2098e1b4b93a54aa9bd660096000868152602001908152602001600020546040518082815260200191505060405180910390a26009600084815260200190815260200160002054905092915050565b600060096000838152602001908152602001600020549050919050565b60046020528060005260406000206000915054906101000a900460ff1681565b60035481565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c24611672565b1515611c2f57600080fd5b611c388161264d565b50565b611c43611672565b1515611c4e57600080fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f33d83959be2573f5453b12eb9d43b3499bc57d96bd2f067ba44803c859e8111360405160405180910390a250565b6000611cfb8484846001611d76565b90509392505050565b6000806005600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b60003073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be36003546040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b158015611e2057600080fd5b505afa158015611e34573d6000803e3d6000fd5b505050506040513d6020811015611e4a57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16141515611e7d57600080fd5b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515611ed557600080fd5b611ede856116ca565b1515611ee957600080fd5b6276a70042016276a70084420101111515611f0357600080fd5b8242016009600087815260200190815260200160002081905550611f2685611d04565b15611f3557611f3485612749565b5b611f3f848661275e565b811561205457600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab592360035487600102876040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b15801561201757600080fd5b505af115801561202b573d6000803e3d6000fd5b505050506040513d602081101561204157600080fd5b8101908080519060200190929190505050505b8373ffffffffffffffffffffffffffffffffffffffff16857fb3d987963d01b2f68493b4bdb130988f157ea43070d4ad840fee0466ed9370d98542016040518082815260200191505060405180910390a38242019050949350505050565b6000806120be836114bd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061212d57508373ffffffffffffffffffffffffffffffffffffffff1661211584610f82565b73ffffffffffffffffffffffffffffffffffffffff16145b8061213e575061213d8185611b88565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612167826114bd565b73ffffffffffffffffffffffffffffffffffffffff1614151561218957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156121c557600080fd5b6121ce816128f7565b6122216001600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129b790919063ffffffff16565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506122b76001600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d990919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000806005600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561242157600080fd5b80915050919050565b600061244b8473ffffffffffffffffffffffffffffffffffffffff166129fa565b151561245a5760019050612645565b60008473ffffffffffffffffffffffffffffffffffffffff1663150b7a02338887876040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612551578082015181840152602081019050612536565b50505050905090810190601f16801561257e5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1580156125a057600080fd5b505af11580156125b4573d6000803e3d6000fd5b505050506040513d60208110156125ca57600080fd5b8101908080519060200190929190505050905063150b7a027c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561268957600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61275b612755826114bd565b82612a0d565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561279a57600080fd5b6127a381611d04565b1515156127af57600080fd5b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506128546001600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d990919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600073ffffffffffffffffffffffffffffffffffffffff166006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156129b45760006006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b60008282111515156129c857600080fd5b600082840390508091505092915050565b60008082840190508381101515156129f057600080fd5b8091505092915050565b600080823b905060008111915050919050565b8173ffffffffffffffffffffffffffffffffffffffff16612a2d826114bd565b73ffffffffffffffffffffffffffffffffffffffff16141515612a4f57600080fd5b612a58816128f7565b612aab6001600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129b790919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505056fea165627a7a72305820af9388697026a32fc11fae5e11a7544e431f49880e9dccb1eb61220f2ec18abc0029' -registrar_bytecode_runtime = '60806040526004361061015f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806301ffc9a714610164578063081812fc146101d6578063095ea7b3146102515780630e297b45146102ac57806323b872dd1461032557806328ed4f6c146103a05780633f15457f146103fb57806342842e0e146104525780634e543b26146104cd5780636352211e1461051e57806370a0823114610599578063715018a6146105fe5780638da5cb5b146106155780638f32d59b1461066c57806396e494e81461069b578063a22cb465146106ee578063a7fc7a071461074b578063b88d4fde1461079c578063c1a287e2146108ae578063c475abff146108d9578063d6e4fa8614610932578063da8c229e14610981578063ddf7fcb0146109ea578063e985e9c514610a15578063f2fde38b14610a9e578063f6a74ed714610aef578063fca247ac14610b40575b600080fd5b34801561017057600080fd5b506101bc6004803603602081101561018757600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610bb9565b604051808215151515815260200191505060405180910390f35b3480156101e257600080fd5b5061020f600480360360208110156101f957600080fd5b8101908080359060200190929190505050610f82565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561025d57600080fd5b506102aa6004803603604081101561027457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fd3565b005b3480156102b857600080fd5b5061030f600480360360608110156102cf57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611118565b6040518082815260200191505060405180910390f35b34801561033157600080fd5b5061039e6004803603606081101561034857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611130565b005b3480156103ac57600080fd5b506103f9600480360360408110156103c357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611155565b005b34801561040757600080fd5b50610410611381565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561045e57600080fd5b506104cb6004803603606081101561047557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113a7565b005b3480156104d957600080fd5b5061051c600480360360208110156104f057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113c8565b005b34801561052a57600080fd5b506105576004803603602081101561054157600080fd5b81019080803590602001909291905050506114bd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105a557600080fd5b506105e8600480360360208110156105bc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114f0565b6040518082815260200191505060405180910390f35b34801561060a57600080fd5b50610613611574565b005b34801561062157600080fd5b5061062a611648565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561067857600080fd5b50610681611672565b604051808215151515815260200191505060405180910390f35b3480156106a757600080fd5b506106d4600480360360208110156106be57600080fd5b81019080803590602001909291905050506116ca565b604051808215151515815260200191505060405180910390f35b3480156106fa57600080fd5b506107496004803603604081101561071157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506116ee565b005b34801561075757600080fd5b5061079a6004803603602081101561076e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061182a565b005b3480156107a857600080fd5b506108ac600480360360808110156107bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561082657600080fd5b82018360208201111561083857600080fd5b8035906020019184600183028401116401000000008311171561085a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506118db565b005b3480156108ba57600080fd5b506108c3611903565b6040518082815260200191505060405180910390f35b3480156108e557600080fd5b5061091c600480360360408110156108fc57600080fd5b81019080803590602001909291908035906020019092919050505061190a565b6040518082815260200191505060405180910390f35b34801561093e57600080fd5b5061096b6004803603602081101561095557600080fd5b8101908080359060200190929190505050611b45565b6040518082815260200191505060405180910390f35b34801561098d57600080fd5b506109d0600480360360208110156109a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b62565b604051808215151515815260200191505060405180910390f35b3480156109f657600080fd5b506109ff611b82565b6040518082815260200191505060405180910390f35b348015610a2157600080fd5b50610a8460048036036040811015610a3857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b88565b604051808215151515815260200191505060405180910390f35b348015610aaa57600080fd5b50610aed60048036036020811015610ac157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c1c565b005b348015610afb57600080fd5b50610b3e60048036036020811015610b1257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c3b565b005b348015610b4c57600080fd5b50610ba360048036036060811015610b6357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611cec565b6040518082815260200191505060405180910390f35b600060405180807f737570706f727473496e74657266616365286279746573342900000000000000815250601901905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610efe575060405180807f736166655472616e7366657246726f6d28616464726573732c6164647265737381526020017f2c75696e743235362c6279746573290000000000000000000000000000000000815250602f019050604051809103902060405180807f736166655472616e7366657246726f6d28616464726573732c6164647265737381526020017f2c75696e743235362900000000000000000000000000000000000000000000008152506029019050604051809103902060405180807f7472616e7366657246726f6d28616464726573732c616464726573732c75696e81526020017f74323536290000000000000000000000000000000000000000000000000000008152506025019050604051809103902060405180807f6973417070726f766564466f72416c6c28616464726573732c6164647265737381526020017f29000000000000000000000000000000000000000000000000000000000000008152506021019050604051809103902060405180807f736574417070726f76616c466f72416c6c28616464726573732c626f6f6c2900815250601f019050604051809103902060405180807f676574417070726f7665642875696e74323536290000000000000000000000008152506014019050604051809103902060405180807f617070726f766528616464726573732c75696e743235362900000000000000008152506018019050604051809103902060405180807f6f776e65724f662875696e7432353629000000000000000000000000000000008152506010019050604051809103902060405180807f62616c616e63654f6628616464726573732900000000000000000000000000008152506012019050604051809103902018181818181818187bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610f7b575060405180807f7265636c61696d2875696e743235362c61646472657373290000000000000000815250601801905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6000610f8d82611d04565b1515610f9857600080fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610fde826114bd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561101b57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061105b575061105a8133611b88565b5b151561106657600080fd5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006111278484846000611d76565b90509392505050565b61113a33826120b2565b151561114557600080fd5b611150838383612147565b505050565b3073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be36003546040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b1580156111fd57600080fd5b505afa158015611211573d6000803e3d6000fd5b505050506040513d602081101561122757600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614151561125a57600080fd5b61126433836120b2565b151561126f57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab592360035484600102846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b15801561134157600080fd5b505af1158015611355573d6000803e3d6000fd5b505050506040513d602081101561136b57600080fd5b8101908080519060200190929190505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6113c383838360206040519081016040528060008152506118db565b505050565b6113d0611672565b15156113db57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631896f70a600354836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b1580156114a257600080fd5b505af11580156114b6573d6000803e3d6000fd5b5050505050565b60004260096000848152602001908152602001600020541115156114e057600080fd5b6114e9826123ac565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561152d57600080fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61157c611672565b151561158757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b6000426276a700600960008581526020019081526020016000205401109050919050565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561172957600080fd5b80600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b611832611672565b151561183d57600080fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f0a8bb31534c0ed46f380cb867bd5c803a189ced9a764e30b3a4991a9901d747460405160405180910390a250565b6118e6848484611130565b6118f28484848461242a565b15156118fd57600080fd5b50505050565b6276a70081565b60003073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be36003546040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b1580156119b457600080fd5b505afa1580156119c8573d6000803e3d6000fd5b505050506040513d60208110156119de57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16141515611a1157600080fd5b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515611a6957600080fd5b426276a70060096000868152602001908152602001600020540110151515611a9057600080fd5b6276a70082016276a7008360096000878152602001908152602001600020540101111515611abd57600080fd5b816009600085815260200190815260200160002060008282540192505081905550827f9b87a00e30f1ac65d898f070f8a3488fe60517182d0a2098e1b4b93a54aa9bd660096000868152602001908152602001600020546040518082815260200191505060405180910390a26009600084815260200190815260200160002054905092915050565b600060096000838152602001908152602001600020549050919050565b60046020528060005260406000206000915054906101000a900460ff1681565b60035481565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c24611672565b1515611c2f57600080fd5b611c388161264d565b50565b611c43611672565b1515611c4e57600080fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f33d83959be2573f5453b12eb9d43b3499bc57d96bd2f067ba44803c859e8111360405160405180910390a250565b6000611cfb8484846001611d76565b90509392505050565b6000806005600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b60003073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be36003546040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b158015611e2057600080fd5b505afa158015611e34573d6000803e3d6000fd5b505050506040513d6020811015611e4a57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16141515611e7d57600080fd5b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515611ed557600080fd5b611ede856116ca565b1515611ee957600080fd5b6276a70042016276a70084420101111515611f0357600080fd5b8242016009600087815260200190815260200160002081905550611f2685611d04565b15611f3557611f3485612749565b5b611f3f848661275e565b811561205457600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab592360035487600102876040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b15801561201757600080fd5b505af115801561202b573d6000803e3d6000fd5b505050506040513d602081101561204157600080fd5b8101908080519060200190929190505050505b8373ffffffffffffffffffffffffffffffffffffffff16857fb3d987963d01b2f68493b4bdb130988f157ea43070d4ad840fee0466ed9370d98542016040518082815260200191505060405180910390a38242019050949350505050565b6000806120be836114bd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061212d57508373ffffffffffffffffffffffffffffffffffffffff1661211584610f82565b73ffffffffffffffffffffffffffffffffffffffff16145b8061213e575061213d8185611b88565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612167826114bd565b73ffffffffffffffffffffffffffffffffffffffff1614151561218957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156121c557600080fd5b6121ce816128f7565b6122216001600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129b790919063ffffffff16565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506122b76001600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d990919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000806005600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561242157600080fd5b80915050919050565b600061244b8473ffffffffffffffffffffffffffffffffffffffff166129fa565b151561245a5760019050612645565b60008473ffffffffffffffffffffffffffffffffffffffff1663150b7a02338887876040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612551578082015181840152602081019050612536565b50505050905090810190601f16801561257e5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1580156125a057600080fd5b505af11580156125b4573d6000803e3d6000fd5b505050506040513d60208110156125ca57600080fd5b8101908080519060200190929190505050905063150b7a027c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561268957600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61275b612755826114bd565b82612a0d565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561279a57600080fd5b6127a381611d04565b1515156127af57600080fd5b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506128546001600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d990919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600073ffffffffffffffffffffffffffffffffffffffff166006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156129b45760006006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b60008282111515156129c857600080fd5b600082840390508091505092915050565b60008082840190508381101515156129f057600080fd5b8091505092915050565b600080823b905060008111915050919050565b8173ffffffffffffffffffffffffffffffffffffffff16612a2d826114bd565b73ffffffffffffffffffffffffffffffffffffffff16141515612a4f57600080fd5b612a58816128f7565b612aab6001600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129b790919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505056fea165627a7a72305820af9388697026a32fc11fae5e11a7544e431f49880e9dccb1eb61220f2ec18abc0029' +registrar_abi = json.loads( + '[{"inputs":[{"internalType":"contract ENS","name":"_ens","type":"address"},{"internalType":"bytes32","name":"_baseNode","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"controller","type":"address"}],"name":"ControllerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"controller","type":"address"}],"name":"ControllerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"expires","type":"uint256"}],"name":"NameMigrated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"expires","type":"uint256"}],"name":"NameRegistered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"expires","type":"uint256"}],"name":"NameRenewed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":true,"inputs":[],"name":"GRACE_PERIOD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"controller","type":"address"}],"name":"addController","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"available","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"baseNode","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"controllers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ens","outputs":[{"internalType":"contract ENS","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"nameExpires","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"reclaim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"duration","type":"uint256"}],"name":"register","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"duration","type":"uint256"}],"name":"registerOnly","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"controller","type":"address"}],"name":"removeController","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"}],"name":"renew","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"resolver","type":"address"}],"name":"setResolver","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]' +) +registrar_bytecode = "60806040523480156200001157600080fd5b5060405160408062002e71833981018060405260408110156200003357600080fd5b8101908080519060200190929190805190602001909291905050506200008b6301ffc9a77c010000000000000000000000000000000000000000000000000000000002620001d6640100000000026401000000009004565b33600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3620001866380ac58cd7c010000000000000000000000000000000000000000000000000000000002620001d6640100000000026401000000009004565b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600381905550505062000294565b63ffffffff7c010000000000000000000000000000000000000000000000000000000002817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916141515156200022857600080fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612bcd80620002a46000396000f3fe60806040526004361061015f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806301ffc9a714610164578063081812fc146101d6578063095ea7b3146102515780630e297b45146102ac57806323b872dd1461032557806328ed4f6c146103a05780633f15457f146103fb57806342842e0e146104525780634e543b26146104cd5780636352211e1461051e57806370a0823114610599578063715018a6146105fe5780638da5cb5b146106155780638f32d59b1461066c57806396e494e81461069b578063a22cb465146106ee578063a7fc7a071461074b578063b88d4fde1461079c578063c1a287e2146108ae578063c475abff146108d9578063d6e4fa8614610932578063da8c229e14610981578063ddf7fcb0146109ea578063e985e9c514610a15578063f2fde38b14610a9e578063f6a74ed714610aef578063fca247ac14610b40575b600080fd5b34801561017057600080fd5b506101bc6004803603602081101561018757600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610bb9565b604051808215151515815260200191505060405180910390f35b3480156101e257600080fd5b5061020f600480360360208110156101f957600080fd5b8101908080359060200190929190505050610f82565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561025d57600080fd5b506102aa6004803603604081101561027457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fd3565b005b3480156102b857600080fd5b5061030f600480360360608110156102cf57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611118565b6040518082815260200191505060405180910390f35b34801561033157600080fd5b5061039e6004803603606081101561034857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611130565b005b3480156103ac57600080fd5b506103f9600480360360408110156103c357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611155565b005b34801561040757600080fd5b50610410611381565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561045e57600080fd5b506104cb6004803603606081101561047557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113a7565b005b3480156104d957600080fd5b5061051c600480360360208110156104f057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113c8565b005b34801561052a57600080fd5b506105576004803603602081101561054157600080fd5b81019080803590602001909291905050506114bd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105a557600080fd5b506105e8600480360360208110156105bc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114f0565b6040518082815260200191505060405180910390f35b34801561060a57600080fd5b50610613611574565b005b34801561062157600080fd5b5061062a611648565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561067857600080fd5b50610681611672565b604051808215151515815260200191505060405180910390f35b3480156106a757600080fd5b506106d4600480360360208110156106be57600080fd5b81019080803590602001909291905050506116ca565b604051808215151515815260200191505060405180910390f35b3480156106fa57600080fd5b506107496004803603604081101561071157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506116ee565b005b34801561075757600080fd5b5061079a6004803603602081101561076e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061182a565b005b3480156107a857600080fd5b506108ac600480360360808110156107bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561082657600080fd5b82018360208201111561083857600080fd5b8035906020019184600183028401116401000000008311171561085a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506118db565b005b3480156108ba57600080fd5b506108c3611903565b6040518082815260200191505060405180910390f35b3480156108e557600080fd5b5061091c600480360360408110156108fc57600080fd5b81019080803590602001909291908035906020019092919050505061190a565b6040518082815260200191505060405180910390f35b34801561093e57600080fd5b5061096b6004803603602081101561095557600080fd5b8101908080359060200190929190505050611b45565b6040518082815260200191505060405180910390f35b34801561098d57600080fd5b506109d0600480360360208110156109a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b62565b604051808215151515815260200191505060405180910390f35b3480156109f657600080fd5b506109ff611b82565b6040518082815260200191505060405180910390f35b348015610a2157600080fd5b50610a8460048036036040811015610a3857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b88565b604051808215151515815260200191505060405180910390f35b348015610aaa57600080fd5b50610aed60048036036020811015610ac157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c1c565b005b348015610afb57600080fd5b50610b3e60048036036020811015610b1257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c3b565b005b348015610b4c57600080fd5b50610ba360048036036060811015610b6357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611cec565b6040518082815260200191505060405180910390f35b600060405180807f737570706f727473496e74657266616365286279746573342900000000000000815250601901905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610efe575060405180807f736166655472616e7366657246726f6d28616464726573732c6164647265737381526020017f2c75696e743235362c6279746573290000000000000000000000000000000000815250602f019050604051809103902060405180807f736166655472616e7366657246726f6d28616464726573732c6164647265737381526020017f2c75696e743235362900000000000000000000000000000000000000000000008152506029019050604051809103902060405180807f7472616e7366657246726f6d28616464726573732c616464726573732c75696e81526020017f74323536290000000000000000000000000000000000000000000000000000008152506025019050604051809103902060405180807f6973417070726f766564466f72416c6c28616464726573732c6164647265737381526020017f29000000000000000000000000000000000000000000000000000000000000008152506021019050604051809103902060405180807f736574417070726f76616c466f72416c6c28616464726573732c626f6f6c2900815250601f019050604051809103902060405180807f676574417070726f7665642875696e74323536290000000000000000000000008152506014019050604051809103902060405180807f617070726f766528616464726573732c75696e743235362900000000000000008152506018019050604051809103902060405180807f6f776e65724f662875696e7432353629000000000000000000000000000000008152506010019050604051809103902060405180807f62616c616e63654f6628616464726573732900000000000000000000000000008152506012019050604051809103902018181818181818187bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610f7b575060405180807f7265636c61696d2875696e743235362c61646472657373290000000000000000815250601801905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6000610f8d82611d04565b1515610f9857600080fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610fde826114bd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561101b57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061105b575061105a8133611b88565b5b151561106657600080fd5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006111278484846000611d76565b90509392505050565b61113a33826120b2565b151561114557600080fd5b611150838383612147565b505050565b3073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be36003546040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b1580156111fd57600080fd5b505afa158015611211573d6000803e3d6000fd5b505050506040513d602081101561122757600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614151561125a57600080fd5b61126433836120b2565b151561126f57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab592360035484600102846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b15801561134157600080fd5b505af1158015611355573d6000803e3d6000fd5b505050506040513d602081101561136b57600080fd5b8101908080519060200190929190505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6113c383838360206040519081016040528060008152506118db565b505050565b6113d0611672565b15156113db57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631896f70a600354836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b1580156114a257600080fd5b505af11580156114b6573d6000803e3d6000fd5b5050505050565b60004260096000848152602001908152602001600020541115156114e057600080fd5b6114e9826123ac565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561152d57600080fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61157c611672565b151561158757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b6000426276a700600960008581526020019081526020016000205401109050919050565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561172957600080fd5b80600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b611832611672565b151561183d57600080fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f0a8bb31534c0ed46f380cb867bd5c803a189ced9a764e30b3a4991a9901d747460405160405180910390a250565b6118e6848484611130565b6118f28484848461242a565b15156118fd57600080fd5b50505050565b6276a70081565b60003073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be36003546040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b1580156119b457600080fd5b505afa1580156119c8573d6000803e3d6000fd5b505050506040513d60208110156119de57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16141515611a1157600080fd5b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515611a6957600080fd5b426276a70060096000868152602001908152602001600020540110151515611a9057600080fd5b6276a70082016276a7008360096000878152602001908152602001600020540101111515611abd57600080fd5b816009600085815260200190815260200160002060008282540192505081905550827f9b87a00e30f1ac65d898f070f8a3488fe60517182d0a2098e1b4b93a54aa9bd660096000868152602001908152602001600020546040518082815260200191505060405180910390a26009600084815260200190815260200160002054905092915050565b600060096000838152602001908152602001600020549050919050565b60046020528060005260406000206000915054906101000a900460ff1681565b60035481565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c24611672565b1515611c2f57600080fd5b611c388161264d565b50565b611c43611672565b1515611c4e57600080fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f33d83959be2573f5453b12eb9d43b3499bc57d96bd2f067ba44803c859e8111360405160405180910390a250565b6000611cfb8484846001611d76565b90509392505050565b6000806005600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b60003073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be36003546040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b158015611e2057600080fd5b505afa158015611e34573d6000803e3d6000fd5b505050506040513d6020811015611e4a57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16141515611e7d57600080fd5b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515611ed557600080fd5b611ede856116ca565b1515611ee957600080fd5b6276a70042016276a70084420101111515611f0357600080fd5b8242016009600087815260200190815260200160002081905550611f2685611d04565b15611f3557611f3485612749565b5b611f3f848661275e565b811561205457600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab592360035487600102876040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b15801561201757600080fd5b505af115801561202b573d6000803e3d6000fd5b505050506040513d602081101561204157600080fd5b8101908080519060200190929190505050505b8373ffffffffffffffffffffffffffffffffffffffff16857fb3d987963d01b2f68493b4bdb130988f157ea43070d4ad840fee0466ed9370d98542016040518082815260200191505060405180910390a38242019050949350505050565b6000806120be836114bd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061212d57508373ffffffffffffffffffffffffffffffffffffffff1661211584610f82565b73ffffffffffffffffffffffffffffffffffffffff16145b8061213e575061213d8185611b88565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612167826114bd565b73ffffffffffffffffffffffffffffffffffffffff1614151561218957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156121c557600080fd5b6121ce816128f7565b6122216001600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129b790919063ffffffff16565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506122b76001600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d990919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000806005600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561242157600080fd5b80915050919050565b600061244b8473ffffffffffffffffffffffffffffffffffffffff166129fa565b151561245a5760019050612645565b60008473ffffffffffffffffffffffffffffffffffffffff1663150b7a02338887876040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612551578082015181840152602081019050612536565b50505050905090810190601f16801561257e5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1580156125a057600080fd5b505af11580156125b4573d6000803e3d6000fd5b505050506040513d60208110156125ca57600080fd5b8101908080519060200190929190505050905063150b7a027c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561268957600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61275b612755826114bd565b82612a0d565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561279a57600080fd5b6127a381611d04565b1515156127af57600080fd5b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506128546001600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d990919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600073ffffffffffffffffffffffffffffffffffffffff166006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156129b45760006006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b60008282111515156129c857600080fd5b600082840390508091505092915050565b60008082840190508381101515156129f057600080fd5b8091505092915050565b600080823b905060008111915050919050565b8173ffffffffffffffffffffffffffffffffffffffff16612a2d826114bd565b73ffffffffffffffffffffffffffffffffffffffff16141515612a4f57600080fd5b612a58816128f7565b612aab6001600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129b790919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505056fea165627a7a72305820af9388697026a32fc11fae5e11a7544e431f49880e9dccb1eb61220f2ec18abc0029" +registrar_bytecode_runtime = "60806040526004361061015f576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806301ffc9a714610164578063081812fc146101d6578063095ea7b3146102515780630e297b45146102ac57806323b872dd1461032557806328ed4f6c146103a05780633f15457f146103fb57806342842e0e146104525780634e543b26146104cd5780636352211e1461051e57806370a0823114610599578063715018a6146105fe5780638da5cb5b146106155780638f32d59b1461066c57806396e494e81461069b578063a22cb465146106ee578063a7fc7a071461074b578063b88d4fde1461079c578063c1a287e2146108ae578063c475abff146108d9578063d6e4fa8614610932578063da8c229e14610981578063ddf7fcb0146109ea578063e985e9c514610a15578063f2fde38b14610a9e578063f6a74ed714610aef578063fca247ac14610b40575b600080fd5b34801561017057600080fd5b506101bc6004803603602081101561018757600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610bb9565b604051808215151515815260200191505060405180910390f35b3480156101e257600080fd5b5061020f600480360360208110156101f957600080fd5b8101908080359060200190929190505050610f82565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561025d57600080fd5b506102aa6004803603604081101561027457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610fd3565b005b3480156102b857600080fd5b5061030f600480360360608110156102cf57600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611118565b6040518082815260200191505060405180910390f35b34801561033157600080fd5b5061039e6004803603606081101561034857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611130565b005b3480156103ac57600080fd5b506103f9600480360360408110156103c357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611155565b005b34801561040757600080fd5b50610410611381565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561045e57600080fd5b506104cb6004803603606081101561047557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113a7565b005b3480156104d957600080fd5b5061051c600480360360208110156104f057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506113c8565b005b34801561052a57600080fd5b506105576004803603602081101561054157600080fd5b81019080803590602001909291905050506114bd565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156105a557600080fd5b506105e8600480360360208110156105bc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114f0565b6040518082815260200191505060405180910390f35b34801561060a57600080fd5b50610613611574565b005b34801561062157600080fd5b5061062a611648565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561067857600080fd5b50610681611672565b604051808215151515815260200191505060405180910390f35b3480156106a757600080fd5b506106d4600480360360208110156106be57600080fd5b81019080803590602001909291905050506116ca565b604051808215151515815260200191505060405180910390f35b3480156106fa57600080fd5b506107496004803603604081101561071157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506116ee565b005b34801561075757600080fd5b5061079a6004803603602081101561076e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061182a565b005b3480156107a857600080fd5b506108ac600480360360808110156107bf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561082657600080fd5b82018360208201111561083857600080fd5b8035906020019184600183028401116401000000008311171561085a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506118db565b005b3480156108ba57600080fd5b506108c3611903565b6040518082815260200191505060405180910390f35b3480156108e557600080fd5b5061091c600480360360408110156108fc57600080fd5b81019080803590602001909291908035906020019092919050505061190a565b6040518082815260200191505060405180910390f35b34801561093e57600080fd5b5061096b6004803603602081101561095557600080fd5b8101908080359060200190929190505050611b45565b6040518082815260200191505060405180910390f35b34801561098d57600080fd5b506109d0600480360360208110156109a457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b62565b604051808215151515815260200191505060405180910390f35b3480156109f657600080fd5b506109ff611b82565b6040518082815260200191505060405180910390f35b348015610a2157600080fd5b50610a8460048036036040811015610a3857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b88565b604051808215151515815260200191505060405180910390f35b348015610aaa57600080fd5b50610aed60048036036020811015610ac157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c1c565b005b348015610afb57600080fd5b50610b3e60048036036020811015610b1257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c3b565b005b348015610b4c57600080fd5b50610ba360048036036060811015610b6357600080fd5b8101908080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611cec565b6040518082815260200191505060405180910390f35b600060405180807f737570706f727473496e74657266616365286279746573342900000000000000815250601901905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610efe575060405180807f736166655472616e7366657246726f6d28616464726573732c6164647265737381526020017f2c75696e743235362c6279746573290000000000000000000000000000000000815250602f019050604051809103902060405180807f736166655472616e7366657246726f6d28616464726573732c6164647265737381526020017f2c75696e743235362900000000000000000000000000000000000000000000008152506029019050604051809103902060405180807f7472616e7366657246726f6d28616464726573732c616464726573732c75696e81526020017f74323536290000000000000000000000000000000000000000000000000000008152506025019050604051809103902060405180807f6973417070726f766564466f72416c6c28616464726573732c6164647265737381526020017f29000000000000000000000000000000000000000000000000000000000000008152506021019050604051809103902060405180807f736574417070726f76616c466f72416c6c28616464726573732c626f6f6c2900815250601f019050604051809103902060405180807f676574417070726f7665642875696e74323536290000000000000000000000008152506014019050604051809103902060405180807f617070726f766528616464726573732c75696e743235362900000000000000008152506018019050604051809103902060405180807f6f776e65724f662875696e7432353629000000000000000000000000000000008152506010019050604051809103902060405180807f62616c616e63654f6628616464726573732900000000000000000000000000008152506012019050604051809103902018181818181818187bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610f7b575060405180807f7265636c61696d2875696e743235362c61646472657373290000000000000000815250601801905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6000610f8d82611d04565b1515610f9857600080fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610fde826114bd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561101b57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061105b575061105a8133611b88565b5b151561106657600080fd5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006111278484846000611d76565b90509392505050565b61113a33826120b2565b151561114557600080fd5b611150838383612147565b505050565b3073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be36003546040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b1580156111fd57600080fd5b505afa158015611211573d6000803e3d6000fd5b505050506040513d602081101561122757600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1614151561125a57600080fd5b61126433836120b2565b151561126f57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab592360035484600102846040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b15801561134157600080fd5b505af1158015611355573d6000803e3d6000fd5b505050506040513d602081101561136b57600080fd5b8101908080519060200190929190505050505050565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6113c383838360206040519081016040528060008152506118db565b505050565b6113d0611672565b15156113db57600080fd5b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631896f70a600354836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b1580156114a257600080fd5b505af11580156114b6573d6000803e3d6000fd5b5050505050565b60004260096000848152602001908152602001600020541115156114e057600080fd5b6114e9826123ac565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561152d57600080fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61157c611672565b151561158757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b6000426276a700600960008581526020019081526020016000205401109050919050565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561172957600080fd5b80600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b611832611672565b151561183d57600080fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f0a8bb31534c0ed46f380cb867bd5c803a189ced9a764e30b3a4991a9901d747460405160405180910390a250565b6118e6848484611130565b6118f28484848461242a565b15156118fd57600080fd5b50505050565b6276a70081565b60003073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be36003546040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b1580156119b457600080fd5b505afa1580156119c8573d6000803e3d6000fd5b505050506040513d60208110156119de57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16141515611a1157600080fd5b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515611a6957600080fd5b426276a70060096000868152602001908152602001600020540110151515611a9057600080fd5b6276a70082016276a7008360096000878152602001908152602001600020540101111515611abd57600080fd5b816009600085815260200190815260200160002060008282540192505081905550827f9b87a00e30f1ac65d898f070f8a3488fe60517182d0a2098e1b4b93a54aa9bd660096000868152602001908152602001600020546040518082815260200191505060405180910390a26009600084815260200190815260200160002054905092915050565b600060096000838152602001908152602001600020549050919050565b60046020528060005260406000206000915054906101000a900460ff1681565b60035481565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c24611672565b1515611c2f57600080fd5b611c388161264d565b50565b611c43611672565b1515611c4e57600080fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f33d83959be2573f5453b12eb9d43b3499bc57d96bd2f067ba44803c859e8111360405160405180910390a250565b6000611cfb8484846001611d76565b90509392505050565b6000806005600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b60003073ffffffffffffffffffffffffffffffffffffffff16600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be36003546040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b158015611e2057600080fd5b505afa158015611e34573d6000803e3d6000fd5b505050506040513d6020811015611e4a57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16141515611e7d57600080fd5b600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515611ed557600080fd5b611ede856116ca565b1515611ee957600080fd5b6276a70042016276a70084420101111515611f0357600080fd5b8242016009600087815260200190815260200160002081905550611f2685611d04565b15611f3557611f3485612749565b5b611f3f848661275e565b811561205457600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab592360035487600102876040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050602060405180830381600087803b15801561201757600080fd5b505af115801561202b573d6000803e3d6000fd5b505050506040513d602081101561204157600080fd5b8101908080519060200190929190505050505b8373ffffffffffffffffffffffffffffffffffffffff16857fb3d987963d01b2f68493b4bdb130988f157ea43070d4ad840fee0466ed9370d98542016040518082815260200191505060405180910390a38242019050949350505050565b6000806120be836114bd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061212d57508373ffffffffffffffffffffffffffffffffffffffff1661211584610f82565b73ffffffffffffffffffffffffffffffffffffffff16145b8061213e575061213d8185611b88565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612167826114bd565b73ffffffffffffffffffffffffffffffffffffffff1614151561218957600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141515156121c557600080fd5b6121ce816128f7565b6122216001600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129b790919063ffffffff16565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506122b76001600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d990919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000806005600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561242157600080fd5b80915050919050565b600061244b8473ffffffffffffffffffffffffffffffffffffffff166129fa565b151561245a5760019050612645565b60008473ffffffffffffffffffffffffffffffffffffffff1663150b7a02338887876040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612551578082015181840152602081019050612536565b50505050905090810190601f16801561257e5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b1580156125a057600080fd5b505af11580156125b4573d6000803e3d6000fd5b505050506040513d60208110156125ca57600080fd5b8101908080519060200190929190505050905063150b7a027c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561268957600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61275b612755826114bd565b82612a0d565b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561279a57600080fd5b6127a381611d04565b1515156127af57600080fd5b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506128546001600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d990919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600073ffffffffffffffffffffffffffffffffffffffff166006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156129b45760006006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b60008282111515156129c857600080fd5b600082840390508091505092915050565b60008082840190508381101515156129f057600080fd5b8091505092915050565b600080823b905060008111915050919050565b8173ffffffffffffffffffffffffffffffffffffffff16612a2d826114bd565b73ffffffffffffffffffffffffffffffffffffffff16141515612a4f57600080fd5b612a58816128f7565b612aab6001600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129b790919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505056fea165627a7a72305820af9388697026a32fc11fae5e11a7544e431f49880e9dccb1eb61220f2ec18abc0029" # ENS Public Resolver 2 -resolver_abi = json.loads('[{"inputs":[{"internalType":"contract ENS","name":"_ens","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"contentType","type":"uint256"}],"name":"ABIChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"address","name":"a","type":"address"}],"name":"AddrChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"coinType","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"newAddress","type":"bytes"}],"name":"AddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"bool","name":"isAuthorised","type":"bool"}],"name":"AuthorisationChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"hash","type":"bytes"}],"name":"ContenthashChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"name","type":"bytes"},{"indexed":false,"internalType":"uint16","name":"resource","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"record","type":"bytes"}],"name":"DNSRecordChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"name","type":"bytes"},{"indexed":false,"internalType":"uint16","name":"resource","type":"uint16"}],"name":"DNSRecordDeleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"DNSZoneCleared","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"bytes4","name":"interfaceID","type":"bytes4"},{"indexed":false,"internalType":"address","name":"implementer","type":"address"}],"name":"InterfaceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"string","name":"name","type":"string"}],"name":"NameChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"x","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"y","type":"bytes32"}],"name":"PubkeyChanged","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"}],"name":"TextChanged","type":"event"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"contentTypes","type":"uint256"}],"name":"ABI","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"addr","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"coinType","type":"uint256"}],"name":"addr","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"authorisations","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"clearDNSZone","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"contenthash","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes32","name":"name","type":"bytes32"},{"internalType":"uint16","name":"resource","type":"uint16"}],"name":"dnsRecord","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes32","name":"name","type":"bytes32"}],"name":"hasDNSRecords","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"interfaceImplementer","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"pubkey","outputs":[{"internalType":"bytes32","name":"x","type":"bytes32"},{"internalType":"bytes32","name":"y","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"contentType","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"setABI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"coinType","type":"uint256"},{"internalType":"bytes","name":"a","type":"bytes"}],"name":"setAddr","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"address","name":"a","type":"address"}],"name":"setAddr","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"isAuthorised","type":"bool"}],"name":"setAuthorisation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes","name":"hash","type":"bytes"}],"name":"setContenthash","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"setDNSRecords","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes4","name":"interfaceID","type":"bytes4"},{"internalType":"address","name":"implementer","type":"address"}],"name":"setInterface","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"name","type":"string"}],"name":"setName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes32","name":"x","type":"bytes32"},{"internalType":"bytes32","name":"y","type":"bytes32"}],"name":"setPubkey","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"key","type":"string"},{"internalType":"string","name":"value","type":"string"}],"name":"setText","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"key","type":"string"}],"name":"text","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"}]') -resolver_bytecode = '60806040523480156200001157600080fd5b506040516020806200399f833981018060405262000033919081019062000091565b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000105565b6000620000898251620000f1565b905092915050565b600060208284031215620000a457600080fd5b6000620000b4848285016200007b565b91505092915050565b6000620000ca82620000d1565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000fe82620000bd565b9050919050565b61388a80620001156000396000f3fe608060405260043610610133576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806301ffc9a7146101385780630af179d71461017557806310f13a8c1461019e578063124a319c146101c75780632203ab561461020457806329cd62ea14610242578063304e6ade1461026b5780633b3b57de146102945780633e9ce794146102d15780634cbf6ba4146102fa57806359d1d43c14610337578063623195b014610374578063691f34311461039d57806377372213146103da5780638b95dd7114610403578063a8fa56821461042c578063ad5780af14610469578063bc1c58d114610492578063c8690233146104cf578063d5fa2b001461050d578063e59d895d14610536578063f1cb7e061461055f578063f86bc8791461059c575b600080fd5b34801561014457600080fd5b5061015f600480360361015a9190810190613148565b6105d9565b60405161016c91906132df565b60405180910390f35b34801561018157600080fd5b5061019c60048036036101979190810190612f00565b610656565b005b3480156101aa57600080fd5b506101c560048036036101c09190810190612fb0565b6108d5565b005b3480156101d357600080fd5b506101ee60048036036101e99190810190612e75565b610979565b6040516101fb91906132a9565b60405180910390f35b34801561021057600080fd5b5061022b60048036036102269190810190613039565b610ede565b60405161023992919061361e565b60405180910390f35b34801561024e57600080fd5b5061026960048036036102649190810190612dd7565b611033565b005b34801561027757600080fd5b50610292600480360361028d9190810190612f00565b6110c8565b005b3480156102a057600080fd5b506102bb60048036036102b69190810190612c98565b611141565b6040516102c891906132c4565b60405180910390f35b3480156102dd57600080fd5b506102f860048036036102f39190810190612d4c565b611178565b005b34801561030657600080fd5b50610321600480360361031c9190810190612d9b565b61125f565b60405161032e91906132df565b60405180910390f35b34801561034357600080fd5b5061035e60048036036103599190810190612f58565b6112c7565b60405161036b91906135fc565b60405180910390f35b34801561038057600080fd5b5061039b60048036036103969190810190613075565b6113a3565b005b3480156103a957600080fd5b506103c460048036036103bf9190810190612c98565b61143f565b6040516103d191906135fc565b60405180910390f35b3480156103e657600080fd5b5061040160048036036103fc9190810190612f58565b6114f4565b005b34801561040f57600080fd5b5061042a600480360361042591908101906130e1565b61156d565b005b34801561043857600080fd5b50610453600480360361044e9190810190612e26565b611647565b60405161046091906135da565b60405180910390f35b34801561047557600080fd5b50610490600480360361048b9190810190612c98565b61174c565b005b34801561049e57600080fd5b506104b960048036036104b49190810190612c98565b6117bf565b6040516104c691906135da565b60405180910390f35b3480156104db57600080fd5b506104f660048036036104f19190810190612c98565b611874565b604051610504929190613383565b60405180910390f35b34801561051957600080fd5b50610534600480360361052f9190810190612cc1565b6118ae565b005b34801561054257600080fd5b5061055d60048036036105589190810190612eb1565b6118dc565b005b34801561056b57600080fd5b5061058660048036036105819190810190613039565b6119d3565b60405161059391906135da565b60405180910390f35b3480156105a857600080fd5b506105c360048036036105be9190810190612cfd565b611a9a565b6040516105d091906132df565b60405180910390f35b60006359d1d43c7c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061064f575061064e82611ad6565b5b9050919050565b8261066081611b53565b151561066b57600080fd5b6000809050600080905060608060006106826128bc565b6106da60008a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611cf890919063ffffffff16565b90505b6106e681611d22565b15156108625760008661ffff161415610791578060400151955061070981611d38565b9350836040516020018082805190602001908083835b602083101515610744578051825260208201915060208101905060208303925061071f565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120915061078a81611d6f565b9250610854565b606061079c82611d38565b9050816040015161ffff168761ffff161415806107c957506107c78186611d9f90919063ffffffff16565b155b156108525761082b8b86898d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8b88602001510360008b5114611dc6565b81604001519650816020015195508094508480519060200120925061084f82611d6f565b93505b505b61085d816120fa565b6106dd565b506000835111156108ca576108c98984878b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505088898e8e9050036000895114611dc6565b5b505050505050505050565b846108df81611b53565b15156108ea57600080fd5b828260096000898152602001908152602001600020878760405180838380828437808301925050509250505090815260200160405180910390209190610931929190612908565b507fd8c9334b1a9c2f9da342a0a2b32629c1a229b6445dad78947f674b44444a7550868686888860405161096995949392919061350f565b60405180910390a1505050505050565b600080600660008581526020019081526020016000206000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515610a405780915050610ed8565b6000610a4b85611141565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a8d57600092505050610ed8565b600060608273ffffffffffffffffffffffffffffffffffffffff166301ffc9a77c010000000000000000000000000000000000000000000000000000000002604051602401610adc91906135bf565b6040516020818303038152906040527f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083101515610b8e5780518252602082019150602081019050602083039250610b69565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114610bee576040519150601f19603f3d011682016040523d82523d6000602084013e610bf3565b606091505b5091509150811580610c06575060208151105b80610cae575060007f01000000000000000000000000000000000000000000000000000000000000000281601f815181101515610c3f57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b15610cc0576000945050505050610ed8565b8273ffffffffffffffffffffffffffffffffffffffff1686604051602401610ce891906135bf565b6040516020818303038152906040527f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083101515610d9a5780518252602082019150602081019050602083039250610d75565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114610dfa576040519150601f19603f3d011682016040523d82523d6000602084013e610dff565b606091505b508092508193505050811580610e16575060208151105b80610ebe575060007f01000000000000000000000000000000000000000000000000000000000000000281601f815181101515610e4f57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b15610ed0576000945050505050610ed8565b829450505050505b92915050565b60006060600080600086815260200190815260200160002090506000600190505b848111151561100f57600085821614158015610f4157506000826000838152602001908152602001600020805460018160011615610100020316600290049050115b156110005780826000838152602001908152602001600020808054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610fee5780601f10610fc357610100808354040283529160200191610fee565b820191906000526020600020905b815481529060010190602001808311610fd157829003601f168201915b5050505050905093509350505061102c565b6001819060020a029050610eff565b506000602060405190810160405280600081525081915092509250505b9250929050565b8261103d81611b53565b151561104857600080fd5b6040805190810160405280848152602001838152506008600086815260200190815260200160002060008201518160000155602082015181600101559050507f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e468484846040516110ba939291906133ac565b60405180910390a150505050565b826110d281611b53565b15156110dd57600080fd5b82826002600087815260200190815260200160002091906110ff929190612988565b507fe379c1624ed7e714cc0937528a32359d69d5281337765313dba4e081b72d75788484846040516111339392919061341a565b60405180910390a150505050565b6000606061115083603c6119d3565b9050600081511415611166576000915050611173565b61116f81612210565b9150505b919050565b80600b600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fe1c5610a6e0cbe10764ecd182adcef1ec338dc4e199c99c32ce98f38e12791df83338484604051611252949392919061333e565b60405180910390a1505050565b60008060056000858152602001908152602001600020600060036000878152602001908152602001600020548152602001908152602001600020600084815260200190815260200160002060009054906101000a900461ffff1661ffff161415905092915050565b606060096000858152602001908152602001600020838360405180838380828437808301925050509250505090815260200160405180910390208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113955780601f1061136a57610100808354040283529160200191611395565b820191906000526020600020905b81548152906001019060200180831161137857829003601f168201915b505050505090509392505050565b836113ad81611b53565b15156113b857600080fd5b60008460018603161415156113cc57600080fd5b8282600080888152602001908152602001600020600087815260200190815260200160002091906113fe929190612988565b507faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe38585604051611430929190613558565b60405180910390a15050505050565b6060600760008381526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114e85780601f106114bd576101008083540402835291602001916114e8565b820191906000526020600020905b8154815290600101906020018083116114cb57829003601f168201915b50505050509050919050565b826114fe81611b53565b151561150957600080fd5b828260076000878152602001908152602001600020919061152b929190612908565b507fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f784848460405161155f939291906134dd565b60405180910390a150505050565b8261157781611b53565b151561158257600080fd5b7f65412581168e88a1e60c6459d7f44ae83ad0832e670826c05a4e2476b57af7528484846040516115b593929190613581565b60405180910390a1603c831415611608577f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd2846115f184612210565b6040516115ff929190613315565b60405180910390a15b816001600086815260200190815260200160002060008581526020019081526020016000209080519060200190611640929190612a08565b5050505050565b606060046000858152602001908152602001600020600060036000878152602001908152602001600020548152602001908152602001600020600084815260200190815260200160002060008361ffff1661ffff1681526020019081526020016000208054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561173e5780601f106117135761010080835404028352916020019161173e565b820191906000526020600020905b81548152906001019060200180831161172157829003601f168201915b505050505090509392505050565b8061175681611b53565b151561176157600080fd5b60036000838152602001908152602001600020600081548092919060010191905055507fb757169b8492ca2f1c6619d9d76ce22803035c3b1d5f6930dffe7b127c1a1983826040516117b391906132fa565b60405180910390a15050565b6060600260008381526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118685780601f1061183d57610100808354040283529160200191611868565b820191906000526020600020905b81548152906001019060200180831161184b57829003601f168201915b50505050509050919050565b6000806008600084815260200190815260200160002060000154600860008581526020019081526020016000206001015491509150915091565b816118b881611b53565b15156118c357600080fd5b6118d783603c6118d285612235565b61156d565b505050565b826118e681611b53565b15156118f157600080fd5b81600660008681526020019081526020016000206000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f7c69f06bea0bdef565b709e93a147836b0063ba2dd89f02d0b7e8d931e6a6daa8484846040516119c5939291906133e3565b60405180910390a150505050565b60606001600084815260200190815260200160002060008381526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a8d5780601f10611a6257610100808354040283529160200191611a8d565b820191906000526020600020905b815481529060010190602001808311611a7057829003601f168201915b5050505050905092915050565b600b602052826000526040600020602052816000526040600020602052806000526040600020600092509250509054906101000a900460ff1681565b600063c86902337c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611b4c5750611b4b82612280565b5b9050919050565b600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611bcd91906132fa565b60206040518083038186803b158015611be557600080fd5b505afa158015611bf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c1d9190810190612c6f565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480611cf05750600b600084815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b915050919050565b611d006128bc565b828160000181905250818160c0018181525050611d1c816120fa565b92915050565b6000816000015151826020015110159050919050565b6060611d688260200151611d54846000015185602001516122fd565b846000015161235a9092919063ffffffff16565b9050919050565b6060611d988260a001518360a001518460c0015103846000015161235a9092919063ffffffff16565b9050919050565b600081518351148015611dbe5750611dbd83600084600087516123cf565b5b905092915050565b6000600360008981526020019081526020016000205490506000878051906020012090506060611e0186868961235a9092919063ffffffff16565b90508315611f79576000600460008c81526020019081526020016000206000858152602001908152602001600020600084815260200190815260200160002060008a61ffff1661ffff168152602001908152602001600020805460018160011615610100020316600290049050141515611edf57600560008b815260200190815260200160002060008481526020019081526020016000206000838152602001908152602001600020600081819054906101000a900461ffff16809291906001900391906101000a81548161ffff021916908361ffff160217905550505b600460008b81526020019081526020016000206000848152602001908152602001600020600083815260200190815260200160002060008961ffff1661ffff1681526020019081526020016000206000611f399190612a88565b7f03528ed0c2a3ebc993b12ce3c16bb382f9c7d88ef7d8a1bf290eaf35955a12078a8a8a604051611f6c9392919061344c565b60405180910390a16120ee565b6000600460008c81526020019081526020016000206000858152602001908152602001600020600084815260200190815260200160002060008a61ffff1661ffff168152602001908152602001600020805460018160011615610100020316600290049050141561204d57600560008b815260200190815260200160002060008481526020019081526020016000206000838152602001908152602001600020600081819054906101000a900461ffff168092919060010191906101000a81548161ffff021916908361ffff160217905550505b80600460008c81526020019081526020016000206000858152602001908152602001600020600084815260200190815260200160002060008a61ffff1661ffff16815260200190815260200160002090805190602001906120af929190612a08565b507f52a608b3303a48862d07a73d82fa221318c0027fbbcfb1b2329bface3f19ff2b8a8a8a846040516120e5949392919061348a565b60405180910390a15b50505050505050505050565b8060c00151816020018181525050806000015151816020015110151561211f5761220d565b6000612133826000015183602001516122fd565b82602001510190506121528183600001516123f390919063ffffffff16565b826040019061ffff16908161ffff16815250506002810190506121828183600001516123f390919063ffffffff16565b826060019061ffff16908161ffff16815250506002810190506121b281836000015161241b90919063ffffffff16565b826080019063ffffffff16908163ffffffff168152505060048101905060006121e88284600001516123f390919063ffffffff16565b61ffff169050600282019150818360a00181815250508082018360c001818152505050505b50565b60006014825114151561222257600080fd5b600c6101000a6020830151049050919050565b606060146040519080825280601f01601f19166020018201604052801561226b5781602001600182028038833980820191505090505b509050600c6101000a82026020820152919050565b600063691f34317c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806122f657506122f582612445565b5b9050919050565b6000808290505b60011561234e5783518110151561231757fe5b600061232c82866124fa90919063ffffffff16565b60ff16905060018101820191506000811415612348575061234e565b50612304565b82810391505092915050565b606083518284011115151561236e57600080fd5b6060826040519080825280601f01601f1916602001820160405280156123a35781602001600182028038833980820191505090505b50905060008060208301915085602088010190506123c2828287612580565b8293505050509392505050565b60006123dc8484846125cb565b6123e78787856125cb565b14905095945050505050565b60008251600283011115151561240857600080fd5b61ffff8260028501015116905092915050565b60008251600483011115151561243057600080fd5b63ffffffff8260048501015116905092915050565b600060405180807f696e74657266616365496d706c656d656e74657228627974657333322c62797481526020017f6573342900000000000000000000000000000000000000000000000000000000815250602401905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806124f357506124f2826125f0565b5b9050919050565b6000828281518110151561250a57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004905092915050565b5b6020811015156125a65781518352602083019250602082019150602081039050612581565b60006001826020036101000a0390508019835116818551168181178652505050505050565b60008351828401111515156125df57600080fd5b818360208601012090509392505050565b600063a8fa56827c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061266657506126658261266d565b5b9050919050565b600063bc1c58d17c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806126e357506126e2826126ea565b5b9050919050565b6000633b3b57de7c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806127bb575063f1cb7e067c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806127cb57506127ca826127d2565b5b9050919050565b6000632203ab567c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061284857506128478261284f565b5b9050919050565b60006301ffc9a77c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60e0604051908101604052806060815260200160008152602001600061ffff168152602001600061ffff168152602001600063ffffffff16815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061294957803560ff1916838001178555612977565b82800160010185558215612977579182015b8281111561297657823582559160200191906001019061295b565b5b5090506129849190612ad0565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106129c957803560ff19168380011785556129f7565b828001600101855582156129f7579182015b828111156129f65782358255916020019190600101906129db565b5b509050612a049190612ad0565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612a4957805160ff1916838001178555612a77565b82800160010185558215612a77579182015b82811115612a76578251825591602001919060010190612a5b565b5b509050612a849190612ad0565b5090565b50805460018160011615610100020316600290046000825580601f10612aae5750612acd565b601f016020900490600052602060002090810190612acc9190612ad0565b5b50565b612af291905b80821115612aee576000816000905550600101612ad6565b5090565b90565b6000612b01823561375b565b905092915050565b6000612b15825161375b565b905092915050565b6000612b29823561376d565b905092915050565b6000612b3d8235613779565b905092915050565b6000612b518235613783565b905092915050565b60008083601f8401121515612b6d57600080fd5b8235905067ffffffffffffffff811115612b8657600080fd5b602083019150836001820283011115612b9e57600080fd5b9250929050565b600082601f8301121515612bb857600080fd5b8135612bcb612bc68261367b565b61364e565b91508082526020830160208301858383011115612be757600080fd5b612bf28382846137fd565b50505092915050565b60008083601f8401121515612c0f57600080fd5b8235905067ffffffffffffffff811115612c2857600080fd5b602083019150836001820283011115612c4057600080fd5b9250929050565b6000612c5382356137af565b905092915050565b6000612c6782356137bd565b905092915050565b600060208284031215612c8157600080fd5b6000612c8f84828501612b09565b91505092915050565b600060208284031215612caa57600080fd5b6000612cb884828501612b31565b91505092915050565b60008060408385031215612cd457600080fd5b6000612ce285828601612b31565b9250506020612cf385828601612af5565b9150509250929050565b600080600060608486031215612d1257600080fd5b6000612d2086828701612b31565b9350506020612d3186828701612af5565b9250506040612d4286828701612af5565b9150509250925092565b600080600060608486031215612d6157600080fd5b6000612d6f86828701612b31565b9350506020612d8086828701612af5565b9250506040612d9186828701612b1d565b9150509250925092565b60008060408385031215612dae57600080fd5b6000612dbc85828601612b31565b9250506020612dcd85828601612b31565b9150509250929050565b600080600060608486031215612dec57600080fd5b6000612dfa86828701612b31565b9350506020612e0b86828701612b31565b9250506040612e1c86828701612b31565b9150509250925092565b600080600060608486031215612e3b57600080fd5b6000612e4986828701612b31565b9350506020612e5a86828701612b31565b9250506040612e6b86828701612c47565b9150509250925092565b60008060408385031215612e8857600080fd5b6000612e9685828601612b31565b9250506020612ea785828601612b45565b9150509250929050565b600080600060608486031215612ec657600080fd5b6000612ed486828701612b31565b9350506020612ee586828701612b45565b9250506040612ef686828701612af5565b9150509250925092565b600080600060408486031215612f1557600080fd5b6000612f2386828701612b31565b935050602084013567ffffffffffffffff811115612f4057600080fd5b612f4c86828701612b59565b92509250509250925092565b600080600060408486031215612f6d57600080fd5b6000612f7b86828701612b31565b935050602084013567ffffffffffffffff811115612f9857600080fd5b612fa486828701612bfb565b92509250509250925092565b600080600080600060608688031215612fc857600080fd5b6000612fd688828901612b31565b955050602086013567ffffffffffffffff811115612ff357600080fd5b612fff88828901612bfb565b9450945050604086013567ffffffffffffffff81111561301e57600080fd5b61302a88828901612bfb565b92509250509295509295909350565b6000806040838503121561304c57600080fd5b600061305a85828601612b31565b925050602061306b85828601612c5b565b9150509250929050565b6000806000806060858703121561308b57600080fd5b600061309987828801612b31565b94505060206130aa87828801612c5b565b935050604085013567ffffffffffffffff8111156130c757600080fd5b6130d387828801612b59565b925092505092959194509250565b6000806000606084860312156130f657600080fd5b600061310486828701612b31565b935050602061311586828701612c5b565b925050604084013567ffffffffffffffff81111561313257600080fd5b61313e86828701612ba5565b9150509250925092565b60006020828403121561315a57600080fd5b600061316884828501612b45565b91505092915050565b61317a816137c7565b82525050565b613189816136cf565b82525050565b613198816136bd565b82525050565b6131a7816136e1565b82525050565b6131b6816136ed565b82525050565b6131c5816136f7565b82525050565b60008284526020840193506131e18385846137fd565b6131ea8361383f565b840190509392505050565b6000613200826136a7565b80845261321481602086016020860161380c565b61321d8161383f565b602085010191505092915050565b60008284526020840193506132418385846137fd565b61324a8361383f565b840190509392505050565b6000613260826136b2565b80845261327481602086016020860161380c565b61327d8161383f565b602085010191505092915050565b61329481613723565b82525050565b6132a381613751565b82525050565b60006020820190506132be600083018461318f565b92915050565b60006020820190506132d96000830184613180565b92915050565b60006020820190506132f4600083018461319e565b92915050565b600060208201905061330f60008301846131ad565b92915050565b600060408201905061332a60008301856131ad565b6133376020830184613171565b9392505050565b600060808201905061335360008301876131ad565b6133606020830186613171565b61336d604083018561318f565b61337a606083018461319e565b95945050505050565b600060408201905061339860008301856131ad565b6133a560208301846131ad565b9392505050565b60006060820190506133c160008301866131ad565b6133ce60208301856131ad565b6133db60408301846131ad565b949350505050565b60006060820190506133f860008301866131ad565b61340560208301856131bc565b613412604083018461318f565b949350505050565b600060408201905061342f60008301866131ad565b81810360208301526134428184866131cb565b9050949350505050565b600060608201905061346160008301866131ad565b818103602083015261347381856131f5565b9050613482604083018461328b565b949350505050565b600060808201905061349f60008301876131ad565b81810360208301526134b181866131f5565b90506134c0604083018561328b565b81810360608301526134d281846131f5565b905095945050505050565b60006040820190506134f260008301866131ad565b818103602083015261350581848661322b565b9050949350505050565b600060608201905061352460008301886131ad565b818103602083015261353781868861322b565b9050818103604083015261354c81848661322b565b90509695505050505050565b600060408201905061356d60008301856131ad565b61357a602083018461329a565b9392505050565b600060608201905061359660008301866131ad565b6135a3602083018561329a565b81810360408301526135b581846131f5565b9050949350505050565b60006020820190506135d460008301846131bc565b92915050565b600060208201905081810360008301526135f481846131f5565b905092915050565b600060208201905081810360008301526136168184613255565b905092915050565b6000604082019050613633600083018561329a565b818103602083015261364581846131f5565b90509392505050565b6000604051905081810181811067ffffffffffffffff8211171561367157600080fd5b8060405250919050565b600067ffffffffffffffff82111561369257600080fd5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b60006136c882613731565b9050919050565b60006136da82613731565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061376682613731565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b6000819050919050565b60006137d2826137d9565b9050919050565b60006137e4826137eb565b9050919050565b60006137f682613731565b9050919050565b82818337600083830152505050565b60005b8381101561382a57808201518184015260208101905061380f565b83811115613839576000848401525b50505050565b6000601f19601f830116905091905056fea265627a7a72305820668668127482cd23a9f375761bf0b8d29fdbff7c261f4d2755ca9c73637d86bf6c6578706572696d656e74616cf50037' -resolver_bytecode_runtime = '608060405260043610610133576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806301ffc9a7146101385780630af179d71461017557806310f13a8c1461019e578063124a319c146101c75780632203ab561461020457806329cd62ea14610242578063304e6ade1461026b5780633b3b57de146102945780633e9ce794146102d15780634cbf6ba4146102fa57806359d1d43c14610337578063623195b014610374578063691f34311461039d57806377372213146103da5780638b95dd7114610403578063a8fa56821461042c578063ad5780af14610469578063bc1c58d114610492578063c8690233146104cf578063d5fa2b001461050d578063e59d895d14610536578063f1cb7e061461055f578063f86bc8791461059c575b600080fd5b34801561014457600080fd5b5061015f600480360361015a9190810190613148565b6105d9565b60405161016c91906132df565b60405180910390f35b34801561018157600080fd5b5061019c60048036036101979190810190612f00565b610656565b005b3480156101aa57600080fd5b506101c560048036036101c09190810190612fb0565b6108d5565b005b3480156101d357600080fd5b506101ee60048036036101e99190810190612e75565b610979565b6040516101fb91906132a9565b60405180910390f35b34801561021057600080fd5b5061022b60048036036102269190810190613039565b610ede565b60405161023992919061361e565b60405180910390f35b34801561024e57600080fd5b5061026960048036036102649190810190612dd7565b611033565b005b34801561027757600080fd5b50610292600480360361028d9190810190612f00565b6110c8565b005b3480156102a057600080fd5b506102bb60048036036102b69190810190612c98565b611141565b6040516102c891906132c4565b60405180910390f35b3480156102dd57600080fd5b506102f860048036036102f39190810190612d4c565b611178565b005b34801561030657600080fd5b50610321600480360361031c9190810190612d9b565b61125f565b60405161032e91906132df565b60405180910390f35b34801561034357600080fd5b5061035e60048036036103599190810190612f58565b6112c7565b60405161036b91906135fc565b60405180910390f35b34801561038057600080fd5b5061039b60048036036103969190810190613075565b6113a3565b005b3480156103a957600080fd5b506103c460048036036103bf9190810190612c98565b61143f565b6040516103d191906135fc565b60405180910390f35b3480156103e657600080fd5b5061040160048036036103fc9190810190612f58565b6114f4565b005b34801561040f57600080fd5b5061042a600480360361042591908101906130e1565b61156d565b005b34801561043857600080fd5b50610453600480360361044e9190810190612e26565b611647565b60405161046091906135da565b60405180910390f35b34801561047557600080fd5b50610490600480360361048b9190810190612c98565b61174c565b005b34801561049e57600080fd5b506104b960048036036104b49190810190612c98565b6117bf565b6040516104c691906135da565b60405180910390f35b3480156104db57600080fd5b506104f660048036036104f19190810190612c98565b611874565b604051610504929190613383565b60405180910390f35b34801561051957600080fd5b50610534600480360361052f9190810190612cc1565b6118ae565b005b34801561054257600080fd5b5061055d60048036036105589190810190612eb1565b6118dc565b005b34801561056b57600080fd5b5061058660048036036105819190810190613039565b6119d3565b60405161059391906135da565b60405180910390f35b3480156105a857600080fd5b506105c360048036036105be9190810190612cfd565b611a9a565b6040516105d091906132df565b60405180910390f35b60006359d1d43c7c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061064f575061064e82611ad6565b5b9050919050565b8261066081611b53565b151561066b57600080fd5b6000809050600080905060608060006106826128bc565b6106da60008a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611cf890919063ffffffff16565b90505b6106e681611d22565b15156108625760008661ffff161415610791578060400151955061070981611d38565b9350836040516020018082805190602001908083835b602083101515610744578051825260208201915060208101905060208303925061071f565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120915061078a81611d6f565b9250610854565b606061079c82611d38565b9050816040015161ffff168761ffff161415806107c957506107c78186611d9f90919063ffffffff16565b155b156108525761082b8b86898d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8b88602001510360008b5114611dc6565b81604001519650816020015195508094508480519060200120925061084f82611d6f565b93505b505b61085d816120fa565b6106dd565b506000835111156108ca576108c98984878b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505088898e8e9050036000895114611dc6565b5b505050505050505050565b846108df81611b53565b15156108ea57600080fd5b828260096000898152602001908152602001600020878760405180838380828437808301925050509250505090815260200160405180910390209190610931929190612908565b507fd8c9334b1a9c2f9da342a0a2b32629c1a229b6445dad78947f674b44444a7550868686888860405161096995949392919061350f565b60405180910390a1505050505050565b600080600660008581526020019081526020016000206000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515610a405780915050610ed8565b6000610a4b85611141565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a8d57600092505050610ed8565b600060608273ffffffffffffffffffffffffffffffffffffffff166301ffc9a77c010000000000000000000000000000000000000000000000000000000002604051602401610adc91906135bf565b6040516020818303038152906040527f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083101515610b8e5780518252602082019150602081019050602083039250610b69565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114610bee576040519150601f19603f3d011682016040523d82523d6000602084013e610bf3565b606091505b5091509150811580610c06575060208151105b80610cae575060007f01000000000000000000000000000000000000000000000000000000000000000281601f815181101515610c3f57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b15610cc0576000945050505050610ed8565b8273ffffffffffffffffffffffffffffffffffffffff1686604051602401610ce891906135bf565b6040516020818303038152906040527f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083101515610d9a5780518252602082019150602081019050602083039250610d75565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114610dfa576040519150601f19603f3d011682016040523d82523d6000602084013e610dff565b606091505b508092508193505050811580610e16575060208151105b80610ebe575060007f01000000000000000000000000000000000000000000000000000000000000000281601f815181101515610e4f57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b15610ed0576000945050505050610ed8565b829450505050505b92915050565b60006060600080600086815260200190815260200160002090506000600190505b848111151561100f57600085821614158015610f4157506000826000838152602001908152602001600020805460018160011615610100020316600290049050115b156110005780826000838152602001908152602001600020808054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610fee5780601f10610fc357610100808354040283529160200191610fee565b820191906000526020600020905b815481529060010190602001808311610fd157829003601f168201915b5050505050905093509350505061102c565b6001819060020a029050610eff565b506000602060405190810160405280600081525081915092509250505b9250929050565b8261103d81611b53565b151561104857600080fd5b6040805190810160405280848152602001838152506008600086815260200190815260200160002060008201518160000155602082015181600101559050507f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e468484846040516110ba939291906133ac565b60405180910390a150505050565b826110d281611b53565b15156110dd57600080fd5b82826002600087815260200190815260200160002091906110ff929190612988565b507fe379c1624ed7e714cc0937528a32359d69d5281337765313dba4e081b72d75788484846040516111339392919061341a565b60405180910390a150505050565b6000606061115083603c6119d3565b9050600081511415611166576000915050611173565b61116f81612210565b9150505b919050565b80600b600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fe1c5610a6e0cbe10764ecd182adcef1ec338dc4e199c99c32ce98f38e12791df83338484604051611252949392919061333e565b60405180910390a1505050565b60008060056000858152602001908152602001600020600060036000878152602001908152602001600020548152602001908152602001600020600084815260200190815260200160002060009054906101000a900461ffff1661ffff161415905092915050565b606060096000858152602001908152602001600020838360405180838380828437808301925050509250505090815260200160405180910390208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113955780601f1061136a57610100808354040283529160200191611395565b820191906000526020600020905b81548152906001019060200180831161137857829003601f168201915b505050505090509392505050565b836113ad81611b53565b15156113b857600080fd5b60008460018603161415156113cc57600080fd5b8282600080888152602001908152602001600020600087815260200190815260200160002091906113fe929190612988565b507faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe38585604051611430929190613558565b60405180910390a15050505050565b6060600760008381526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114e85780601f106114bd576101008083540402835291602001916114e8565b820191906000526020600020905b8154815290600101906020018083116114cb57829003601f168201915b50505050509050919050565b826114fe81611b53565b151561150957600080fd5b828260076000878152602001908152602001600020919061152b929190612908565b507fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f784848460405161155f939291906134dd565b60405180910390a150505050565b8261157781611b53565b151561158257600080fd5b7f65412581168e88a1e60c6459d7f44ae83ad0832e670826c05a4e2476b57af7528484846040516115b593929190613581565b60405180910390a1603c831415611608577f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd2846115f184612210565b6040516115ff929190613315565b60405180910390a15b816001600086815260200190815260200160002060008581526020019081526020016000209080519060200190611640929190612a08565b5050505050565b606060046000858152602001908152602001600020600060036000878152602001908152602001600020548152602001908152602001600020600084815260200190815260200160002060008361ffff1661ffff1681526020019081526020016000208054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561173e5780601f106117135761010080835404028352916020019161173e565b820191906000526020600020905b81548152906001019060200180831161172157829003601f168201915b505050505090509392505050565b8061175681611b53565b151561176157600080fd5b60036000838152602001908152602001600020600081548092919060010191905055507fb757169b8492ca2f1c6619d9d76ce22803035c3b1d5f6930dffe7b127c1a1983826040516117b391906132fa565b60405180910390a15050565b6060600260008381526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118685780601f1061183d57610100808354040283529160200191611868565b820191906000526020600020905b81548152906001019060200180831161184b57829003601f168201915b50505050509050919050565b6000806008600084815260200190815260200160002060000154600860008581526020019081526020016000206001015491509150915091565b816118b881611b53565b15156118c357600080fd5b6118d783603c6118d285612235565b61156d565b505050565b826118e681611b53565b15156118f157600080fd5b81600660008681526020019081526020016000206000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f7c69f06bea0bdef565b709e93a147836b0063ba2dd89f02d0b7e8d931e6a6daa8484846040516119c5939291906133e3565b60405180910390a150505050565b60606001600084815260200190815260200160002060008381526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a8d5780601f10611a6257610100808354040283529160200191611a8d565b820191906000526020600020905b815481529060010190602001808311611a7057829003601f168201915b5050505050905092915050565b600b602052826000526040600020602052816000526040600020602052806000526040600020600092509250509054906101000a900460ff1681565b600063c86902337c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611b4c5750611b4b82612280565b5b9050919050565b600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611bcd91906132fa565b60206040518083038186803b158015611be557600080fd5b505afa158015611bf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c1d9190810190612c6f565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480611cf05750600b600084815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b915050919050565b611d006128bc565b828160000181905250818160c0018181525050611d1c816120fa565b92915050565b6000816000015151826020015110159050919050565b6060611d688260200151611d54846000015185602001516122fd565b846000015161235a9092919063ffffffff16565b9050919050565b6060611d988260a001518360a001518460c0015103846000015161235a9092919063ffffffff16565b9050919050565b600081518351148015611dbe5750611dbd83600084600087516123cf565b5b905092915050565b6000600360008981526020019081526020016000205490506000878051906020012090506060611e0186868961235a9092919063ffffffff16565b90508315611f79576000600460008c81526020019081526020016000206000858152602001908152602001600020600084815260200190815260200160002060008a61ffff1661ffff168152602001908152602001600020805460018160011615610100020316600290049050141515611edf57600560008b815260200190815260200160002060008481526020019081526020016000206000838152602001908152602001600020600081819054906101000a900461ffff16809291906001900391906101000a81548161ffff021916908361ffff160217905550505b600460008b81526020019081526020016000206000848152602001908152602001600020600083815260200190815260200160002060008961ffff1661ffff1681526020019081526020016000206000611f399190612a88565b7f03528ed0c2a3ebc993b12ce3c16bb382f9c7d88ef7d8a1bf290eaf35955a12078a8a8a604051611f6c9392919061344c565b60405180910390a16120ee565b6000600460008c81526020019081526020016000206000858152602001908152602001600020600084815260200190815260200160002060008a61ffff1661ffff168152602001908152602001600020805460018160011615610100020316600290049050141561204d57600560008b815260200190815260200160002060008481526020019081526020016000206000838152602001908152602001600020600081819054906101000a900461ffff168092919060010191906101000a81548161ffff021916908361ffff160217905550505b80600460008c81526020019081526020016000206000858152602001908152602001600020600084815260200190815260200160002060008a61ffff1661ffff16815260200190815260200160002090805190602001906120af929190612a08565b507f52a608b3303a48862d07a73d82fa221318c0027fbbcfb1b2329bface3f19ff2b8a8a8a846040516120e5949392919061348a565b60405180910390a15b50505050505050505050565b8060c00151816020018181525050806000015151816020015110151561211f5761220d565b6000612133826000015183602001516122fd565b82602001510190506121528183600001516123f390919063ffffffff16565b826040019061ffff16908161ffff16815250506002810190506121828183600001516123f390919063ffffffff16565b826060019061ffff16908161ffff16815250506002810190506121b281836000015161241b90919063ffffffff16565b826080019063ffffffff16908163ffffffff168152505060048101905060006121e88284600001516123f390919063ffffffff16565b61ffff169050600282019150818360a00181815250508082018360c001818152505050505b50565b60006014825114151561222257600080fd5b600c6101000a6020830151049050919050565b606060146040519080825280601f01601f19166020018201604052801561226b5781602001600182028038833980820191505090505b509050600c6101000a82026020820152919050565b600063691f34317c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806122f657506122f582612445565b5b9050919050565b6000808290505b60011561234e5783518110151561231757fe5b600061232c82866124fa90919063ffffffff16565b60ff16905060018101820191506000811415612348575061234e565b50612304565b82810391505092915050565b606083518284011115151561236e57600080fd5b6060826040519080825280601f01601f1916602001820160405280156123a35781602001600182028038833980820191505090505b50905060008060208301915085602088010190506123c2828287612580565b8293505050509392505050565b60006123dc8484846125cb565b6123e78787856125cb565b14905095945050505050565b60008251600283011115151561240857600080fd5b61ffff8260028501015116905092915050565b60008251600483011115151561243057600080fd5b63ffffffff8260048501015116905092915050565b600060405180807f696e74657266616365496d706c656d656e74657228627974657333322c62797481526020017f6573342900000000000000000000000000000000000000000000000000000000815250602401905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806124f357506124f2826125f0565b5b9050919050565b6000828281518110151561250a57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004905092915050565b5b6020811015156125a65781518352602083019250602082019150602081039050612581565b60006001826020036101000a0390508019835116818551168181178652505050505050565b60008351828401111515156125df57600080fd5b818360208601012090509392505050565b600063a8fa56827c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061266657506126658261266d565b5b9050919050565b600063bc1c58d17c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806126e357506126e2826126ea565b5b9050919050565b6000633b3b57de7c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806127bb575063f1cb7e067c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806127cb57506127ca826127d2565b5b9050919050565b6000632203ab567c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061284857506128478261284f565b5b9050919050565b60006301ffc9a77c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60e0604051908101604052806060815260200160008152602001600061ffff168152602001600061ffff168152602001600063ffffffff16815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061294957803560ff1916838001178555612977565b82800160010185558215612977579182015b8281111561297657823582559160200191906001019061295b565b5b5090506129849190612ad0565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106129c957803560ff19168380011785556129f7565b828001600101855582156129f7579182015b828111156129f65782358255916020019190600101906129db565b5b509050612a049190612ad0565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612a4957805160ff1916838001178555612a77565b82800160010185558215612a77579182015b82811115612a76578251825591602001919060010190612a5b565b5b509050612a849190612ad0565b5090565b50805460018160011615610100020316600290046000825580601f10612aae5750612acd565b601f016020900490600052602060002090810190612acc9190612ad0565b5b50565b612af291905b80821115612aee576000816000905550600101612ad6565b5090565b90565b6000612b01823561375b565b905092915050565b6000612b15825161375b565b905092915050565b6000612b29823561376d565b905092915050565b6000612b3d8235613779565b905092915050565b6000612b518235613783565b905092915050565b60008083601f8401121515612b6d57600080fd5b8235905067ffffffffffffffff811115612b8657600080fd5b602083019150836001820283011115612b9e57600080fd5b9250929050565b600082601f8301121515612bb857600080fd5b8135612bcb612bc68261367b565b61364e565b91508082526020830160208301858383011115612be757600080fd5b612bf28382846137fd565b50505092915050565b60008083601f8401121515612c0f57600080fd5b8235905067ffffffffffffffff811115612c2857600080fd5b602083019150836001820283011115612c4057600080fd5b9250929050565b6000612c5382356137af565b905092915050565b6000612c6782356137bd565b905092915050565b600060208284031215612c8157600080fd5b6000612c8f84828501612b09565b91505092915050565b600060208284031215612caa57600080fd5b6000612cb884828501612b31565b91505092915050565b60008060408385031215612cd457600080fd5b6000612ce285828601612b31565b9250506020612cf385828601612af5565b9150509250929050565b600080600060608486031215612d1257600080fd5b6000612d2086828701612b31565b9350506020612d3186828701612af5565b9250506040612d4286828701612af5565b9150509250925092565b600080600060608486031215612d6157600080fd5b6000612d6f86828701612b31565b9350506020612d8086828701612af5565b9250506040612d9186828701612b1d565b9150509250925092565b60008060408385031215612dae57600080fd5b6000612dbc85828601612b31565b9250506020612dcd85828601612b31565b9150509250929050565b600080600060608486031215612dec57600080fd5b6000612dfa86828701612b31565b9350506020612e0b86828701612b31565b9250506040612e1c86828701612b31565b9150509250925092565b600080600060608486031215612e3b57600080fd5b6000612e4986828701612b31565b9350506020612e5a86828701612b31565b9250506040612e6b86828701612c47565b9150509250925092565b60008060408385031215612e8857600080fd5b6000612e9685828601612b31565b9250506020612ea785828601612b45565b9150509250929050565b600080600060608486031215612ec657600080fd5b6000612ed486828701612b31565b9350506020612ee586828701612b45565b9250506040612ef686828701612af5565b9150509250925092565b600080600060408486031215612f1557600080fd5b6000612f2386828701612b31565b935050602084013567ffffffffffffffff811115612f4057600080fd5b612f4c86828701612b59565b92509250509250925092565b600080600060408486031215612f6d57600080fd5b6000612f7b86828701612b31565b935050602084013567ffffffffffffffff811115612f9857600080fd5b612fa486828701612bfb565b92509250509250925092565b600080600080600060608688031215612fc857600080fd5b6000612fd688828901612b31565b955050602086013567ffffffffffffffff811115612ff357600080fd5b612fff88828901612bfb565b9450945050604086013567ffffffffffffffff81111561301e57600080fd5b61302a88828901612bfb565b92509250509295509295909350565b6000806040838503121561304c57600080fd5b600061305a85828601612b31565b925050602061306b85828601612c5b565b9150509250929050565b6000806000806060858703121561308b57600080fd5b600061309987828801612b31565b94505060206130aa87828801612c5b565b935050604085013567ffffffffffffffff8111156130c757600080fd5b6130d387828801612b59565b925092505092959194509250565b6000806000606084860312156130f657600080fd5b600061310486828701612b31565b935050602061311586828701612c5b565b925050604084013567ffffffffffffffff81111561313257600080fd5b61313e86828701612ba5565b9150509250925092565b60006020828403121561315a57600080fd5b600061316884828501612b45565b91505092915050565b61317a816137c7565b82525050565b613189816136cf565b82525050565b613198816136bd565b82525050565b6131a7816136e1565b82525050565b6131b6816136ed565b82525050565b6131c5816136f7565b82525050565b60008284526020840193506131e18385846137fd565b6131ea8361383f565b840190509392505050565b6000613200826136a7565b80845261321481602086016020860161380c565b61321d8161383f565b602085010191505092915050565b60008284526020840193506132418385846137fd565b61324a8361383f565b840190509392505050565b6000613260826136b2565b80845261327481602086016020860161380c565b61327d8161383f565b602085010191505092915050565b61329481613723565b82525050565b6132a381613751565b82525050565b60006020820190506132be600083018461318f565b92915050565b60006020820190506132d96000830184613180565b92915050565b60006020820190506132f4600083018461319e565b92915050565b600060208201905061330f60008301846131ad565b92915050565b600060408201905061332a60008301856131ad565b6133376020830184613171565b9392505050565b600060808201905061335360008301876131ad565b6133606020830186613171565b61336d604083018561318f565b61337a606083018461319e565b95945050505050565b600060408201905061339860008301856131ad565b6133a560208301846131ad565b9392505050565b60006060820190506133c160008301866131ad565b6133ce60208301856131ad565b6133db60408301846131ad565b949350505050565b60006060820190506133f860008301866131ad565b61340560208301856131bc565b613412604083018461318f565b949350505050565b600060408201905061342f60008301866131ad565b81810360208301526134428184866131cb565b9050949350505050565b600060608201905061346160008301866131ad565b818103602083015261347381856131f5565b9050613482604083018461328b565b949350505050565b600060808201905061349f60008301876131ad565b81810360208301526134b181866131f5565b90506134c0604083018561328b565b81810360608301526134d281846131f5565b905095945050505050565b60006040820190506134f260008301866131ad565b818103602083015261350581848661322b565b9050949350505050565b600060608201905061352460008301886131ad565b818103602083015261353781868861322b565b9050818103604083015261354c81848661322b565b90509695505050505050565b600060408201905061356d60008301856131ad565b61357a602083018461329a565b9392505050565b600060608201905061359660008301866131ad565b6135a3602083018561329a565b81810360408301526135b581846131f5565b9050949350505050565b60006020820190506135d460008301846131bc565b92915050565b600060208201905081810360008301526135f481846131f5565b905092915050565b600060208201905081810360008301526136168184613255565b905092915050565b6000604082019050613633600083018561329a565b818103602083015261364581846131f5565b90509392505050565b6000604051905081810181811067ffffffffffffffff8211171561367157600080fd5b8060405250919050565b600067ffffffffffffffff82111561369257600080fd5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b60006136c882613731565b9050919050565b60006136da82613731565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061376682613731565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b6000819050919050565b60006137d2826137d9565b9050919050565b60006137e4826137eb565b9050919050565b60006137f682613731565b9050919050565b82818337600083830152505050565b60005b8381101561382a57808201518184015260208101905061380f565b83811115613839576000848401525b50505050565b6000601f19601f830116905091905056fea265627a7a72305820668668127482cd23a9f375761bf0b8d29fdbff7c261f4d2755ca9c73637d86bf6c6578706572696d656e74616cf50037' +resolver_abi = json.loads( + '[{"inputs":[{"internalType":"contract ENS","name":"_ens","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"uint256","name":"contentType","type":"uint256"}],"name":"ABIChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"address","name":"a","type":"address"}],"name":"AddrChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"coinType","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"newAddress","type":"bytes"}],"name":"AddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"bool","name":"isAuthorised","type":"bool"}],"name":"AuthorisationChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"hash","type":"bytes"}],"name":"ContenthashChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"name","type":"bytes"},{"indexed":false,"internalType":"uint16","name":"resource","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"record","type":"bytes"}],"name":"DNSRecordChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes","name":"name","type":"bytes"},{"indexed":false,"internalType":"uint16","name":"resource","type":"uint16"}],"name":"DNSRecordDeleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"DNSZoneCleared","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":true,"internalType":"bytes4","name":"interfaceID","type":"bytes4"},{"indexed":false,"internalType":"address","name":"implementer","type":"address"}],"name":"InterfaceChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"string","name":"name","type":"string"}],"name":"NameChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"node","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"x","type":"bytes32"},{"indexed":false,"internalType":"bytes32","name":"y","type":"bytes32"}],"name":"PubkeyChanged","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"}],"name":"TextChanged","type":"event"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"contentTypes","type":"uint256"}],"name":"ABI","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"addr","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"coinType","type":"uint256"}],"name":"addr","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"},{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"authorisations","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"clearDNSZone","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"contenthash","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes32","name":"name","type":"bytes32"},{"internalType":"uint16","name":"resource","type":"uint16"}],"name":"dnsRecord","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes32","name":"name","type":"bytes32"}],"name":"hasDNSRecords","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"interfaceImplementer","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"}],"name":"pubkey","outputs":[{"internalType":"bytes32","name":"x","type":"bytes32"},{"internalType":"bytes32","name":"y","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"contentType","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"setABI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"uint256","name":"coinType","type":"uint256"},{"internalType":"bytes","name":"a","type":"bytes"}],"name":"setAddr","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"address","name":"a","type":"address"}],"name":"setAddr","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"isAuthorised","type":"bool"}],"name":"setAuthorisation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes","name":"hash","type":"bytes"}],"name":"setContenthash","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"setDNSRecords","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes4","name":"interfaceID","type":"bytes4"},{"internalType":"address","name":"implementer","type":"address"}],"name":"setInterface","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"name","type":"string"}],"name":"setName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"bytes32","name":"x","type":"bytes32"},{"internalType":"bytes32","name":"y","type":"bytes32"}],"name":"setPubkey","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"key","type":"string"},{"internalType":"string","name":"value","type":"string"}],"name":"setText","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"key","type":"string"}],"name":"text","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"}]' +) +resolver_bytecode = "60806040523480156200001157600080fd5b506040516020806200399f833981018060405262000033919081019062000091565b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000105565b6000620000898251620000f1565b905092915050565b600060208284031215620000a457600080fd5b6000620000b4848285016200007b565b91505092915050565b6000620000ca82620000d1565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000fe82620000bd565b9050919050565b61388a80620001156000396000f3fe608060405260043610610133576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806301ffc9a7146101385780630af179d71461017557806310f13a8c1461019e578063124a319c146101c75780632203ab561461020457806329cd62ea14610242578063304e6ade1461026b5780633b3b57de146102945780633e9ce794146102d15780634cbf6ba4146102fa57806359d1d43c14610337578063623195b014610374578063691f34311461039d57806377372213146103da5780638b95dd7114610403578063a8fa56821461042c578063ad5780af14610469578063bc1c58d114610492578063c8690233146104cf578063d5fa2b001461050d578063e59d895d14610536578063f1cb7e061461055f578063f86bc8791461059c575b600080fd5b34801561014457600080fd5b5061015f600480360361015a9190810190613148565b6105d9565b60405161016c91906132df565b60405180910390f35b34801561018157600080fd5b5061019c60048036036101979190810190612f00565b610656565b005b3480156101aa57600080fd5b506101c560048036036101c09190810190612fb0565b6108d5565b005b3480156101d357600080fd5b506101ee60048036036101e99190810190612e75565b610979565b6040516101fb91906132a9565b60405180910390f35b34801561021057600080fd5b5061022b60048036036102269190810190613039565b610ede565b60405161023992919061361e565b60405180910390f35b34801561024e57600080fd5b5061026960048036036102649190810190612dd7565b611033565b005b34801561027757600080fd5b50610292600480360361028d9190810190612f00565b6110c8565b005b3480156102a057600080fd5b506102bb60048036036102b69190810190612c98565b611141565b6040516102c891906132c4565b60405180910390f35b3480156102dd57600080fd5b506102f860048036036102f39190810190612d4c565b611178565b005b34801561030657600080fd5b50610321600480360361031c9190810190612d9b565b61125f565b60405161032e91906132df565b60405180910390f35b34801561034357600080fd5b5061035e60048036036103599190810190612f58565b6112c7565b60405161036b91906135fc565b60405180910390f35b34801561038057600080fd5b5061039b60048036036103969190810190613075565b6113a3565b005b3480156103a957600080fd5b506103c460048036036103bf9190810190612c98565b61143f565b6040516103d191906135fc565b60405180910390f35b3480156103e657600080fd5b5061040160048036036103fc9190810190612f58565b6114f4565b005b34801561040f57600080fd5b5061042a600480360361042591908101906130e1565b61156d565b005b34801561043857600080fd5b50610453600480360361044e9190810190612e26565b611647565b60405161046091906135da565b60405180910390f35b34801561047557600080fd5b50610490600480360361048b9190810190612c98565b61174c565b005b34801561049e57600080fd5b506104b960048036036104b49190810190612c98565b6117bf565b6040516104c691906135da565b60405180910390f35b3480156104db57600080fd5b506104f660048036036104f19190810190612c98565b611874565b604051610504929190613383565b60405180910390f35b34801561051957600080fd5b50610534600480360361052f9190810190612cc1565b6118ae565b005b34801561054257600080fd5b5061055d60048036036105589190810190612eb1565b6118dc565b005b34801561056b57600080fd5b5061058660048036036105819190810190613039565b6119d3565b60405161059391906135da565b60405180910390f35b3480156105a857600080fd5b506105c360048036036105be9190810190612cfd565b611a9a565b6040516105d091906132df565b60405180910390f35b60006359d1d43c7c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061064f575061064e82611ad6565b5b9050919050565b8261066081611b53565b151561066b57600080fd5b6000809050600080905060608060006106826128bc565b6106da60008a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611cf890919063ffffffff16565b90505b6106e681611d22565b15156108625760008661ffff161415610791578060400151955061070981611d38565b9350836040516020018082805190602001908083835b602083101515610744578051825260208201915060208101905060208303925061071f565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120915061078a81611d6f565b9250610854565b606061079c82611d38565b9050816040015161ffff168761ffff161415806107c957506107c78186611d9f90919063ffffffff16565b155b156108525761082b8b86898d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8b88602001510360008b5114611dc6565b81604001519650816020015195508094508480519060200120925061084f82611d6f565b93505b505b61085d816120fa565b6106dd565b506000835111156108ca576108c98984878b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505088898e8e9050036000895114611dc6565b5b505050505050505050565b846108df81611b53565b15156108ea57600080fd5b828260096000898152602001908152602001600020878760405180838380828437808301925050509250505090815260200160405180910390209190610931929190612908565b507fd8c9334b1a9c2f9da342a0a2b32629c1a229b6445dad78947f674b44444a7550868686888860405161096995949392919061350f565b60405180910390a1505050505050565b600080600660008581526020019081526020016000206000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515610a405780915050610ed8565b6000610a4b85611141565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a8d57600092505050610ed8565b600060608273ffffffffffffffffffffffffffffffffffffffff166301ffc9a77c010000000000000000000000000000000000000000000000000000000002604051602401610adc91906135bf565b6040516020818303038152906040527f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083101515610b8e5780518252602082019150602081019050602083039250610b69565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114610bee576040519150601f19603f3d011682016040523d82523d6000602084013e610bf3565b606091505b5091509150811580610c06575060208151105b80610cae575060007f01000000000000000000000000000000000000000000000000000000000000000281601f815181101515610c3f57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b15610cc0576000945050505050610ed8565b8273ffffffffffffffffffffffffffffffffffffffff1686604051602401610ce891906135bf565b6040516020818303038152906040527f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083101515610d9a5780518252602082019150602081019050602083039250610d75565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114610dfa576040519150601f19603f3d011682016040523d82523d6000602084013e610dff565b606091505b508092508193505050811580610e16575060208151105b80610ebe575060007f01000000000000000000000000000000000000000000000000000000000000000281601f815181101515610e4f57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b15610ed0576000945050505050610ed8565b829450505050505b92915050565b60006060600080600086815260200190815260200160002090506000600190505b848111151561100f57600085821614158015610f4157506000826000838152602001908152602001600020805460018160011615610100020316600290049050115b156110005780826000838152602001908152602001600020808054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610fee5780601f10610fc357610100808354040283529160200191610fee565b820191906000526020600020905b815481529060010190602001808311610fd157829003601f168201915b5050505050905093509350505061102c565b6001819060020a029050610eff565b506000602060405190810160405280600081525081915092509250505b9250929050565b8261103d81611b53565b151561104857600080fd5b6040805190810160405280848152602001838152506008600086815260200190815260200160002060008201518160000155602082015181600101559050507f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e468484846040516110ba939291906133ac565b60405180910390a150505050565b826110d281611b53565b15156110dd57600080fd5b82826002600087815260200190815260200160002091906110ff929190612988565b507fe379c1624ed7e714cc0937528a32359d69d5281337765313dba4e081b72d75788484846040516111339392919061341a565b60405180910390a150505050565b6000606061115083603c6119d3565b9050600081511415611166576000915050611173565b61116f81612210565b9150505b919050565b80600b600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fe1c5610a6e0cbe10764ecd182adcef1ec338dc4e199c99c32ce98f38e12791df83338484604051611252949392919061333e565b60405180910390a1505050565b60008060056000858152602001908152602001600020600060036000878152602001908152602001600020548152602001908152602001600020600084815260200190815260200160002060009054906101000a900461ffff1661ffff161415905092915050565b606060096000858152602001908152602001600020838360405180838380828437808301925050509250505090815260200160405180910390208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113955780601f1061136a57610100808354040283529160200191611395565b820191906000526020600020905b81548152906001019060200180831161137857829003601f168201915b505050505090509392505050565b836113ad81611b53565b15156113b857600080fd5b60008460018603161415156113cc57600080fd5b8282600080888152602001908152602001600020600087815260200190815260200160002091906113fe929190612988565b507faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe38585604051611430929190613558565b60405180910390a15050505050565b6060600760008381526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114e85780601f106114bd576101008083540402835291602001916114e8565b820191906000526020600020905b8154815290600101906020018083116114cb57829003601f168201915b50505050509050919050565b826114fe81611b53565b151561150957600080fd5b828260076000878152602001908152602001600020919061152b929190612908565b507fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f784848460405161155f939291906134dd565b60405180910390a150505050565b8261157781611b53565b151561158257600080fd5b7f65412581168e88a1e60c6459d7f44ae83ad0832e670826c05a4e2476b57af7528484846040516115b593929190613581565b60405180910390a1603c831415611608577f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd2846115f184612210565b6040516115ff929190613315565b60405180910390a15b816001600086815260200190815260200160002060008581526020019081526020016000209080519060200190611640929190612a08565b5050505050565b606060046000858152602001908152602001600020600060036000878152602001908152602001600020548152602001908152602001600020600084815260200190815260200160002060008361ffff1661ffff1681526020019081526020016000208054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561173e5780601f106117135761010080835404028352916020019161173e565b820191906000526020600020905b81548152906001019060200180831161172157829003601f168201915b505050505090509392505050565b8061175681611b53565b151561176157600080fd5b60036000838152602001908152602001600020600081548092919060010191905055507fb757169b8492ca2f1c6619d9d76ce22803035c3b1d5f6930dffe7b127c1a1983826040516117b391906132fa565b60405180910390a15050565b6060600260008381526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118685780601f1061183d57610100808354040283529160200191611868565b820191906000526020600020905b81548152906001019060200180831161184b57829003601f168201915b50505050509050919050565b6000806008600084815260200190815260200160002060000154600860008581526020019081526020016000206001015491509150915091565b816118b881611b53565b15156118c357600080fd5b6118d783603c6118d285612235565b61156d565b505050565b826118e681611b53565b15156118f157600080fd5b81600660008681526020019081526020016000206000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f7c69f06bea0bdef565b709e93a147836b0063ba2dd89f02d0b7e8d931e6a6daa8484846040516119c5939291906133e3565b60405180910390a150505050565b60606001600084815260200190815260200160002060008381526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a8d5780601f10611a6257610100808354040283529160200191611a8d565b820191906000526020600020905b815481529060010190602001808311611a7057829003601f168201915b5050505050905092915050565b600b602052826000526040600020602052816000526040600020602052806000526040600020600092509250509054906101000a900460ff1681565b600063c86902337c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611b4c5750611b4b82612280565b5b9050919050565b600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611bcd91906132fa565b60206040518083038186803b158015611be557600080fd5b505afa158015611bf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c1d9190810190612c6f565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480611cf05750600b600084815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b915050919050565b611d006128bc565b828160000181905250818160c0018181525050611d1c816120fa565b92915050565b6000816000015151826020015110159050919050565b6060611d688260200151611d54846000015185602001516122fd565b846000015161235a9092919063ffffffff16565b9050919050565b6060611d988260a001518360a001518460c0015103846000015161235a9092919063ffffffff16565b9050919050565b600081518351148015611dbe5750611dbd83600084600087516123cf565b5b905092915050565b6000600360008981526020019081526020016000205490506000878051906020012090506060611e0186868961235a9092919063ffffffff16565b90508315611f79576000600460008c81526020019081526020016000206000858152602001908152602001600020600084815260200190815260200160002060008a61ffff1661ffff168152602001908152602001600020805460018160011615610100020316600290049050141515611edf57600560008b815260200190815260200160002060008481526020019081526020016000206000838152602001908152602001600020600081819054906101000a900461ffff16809291906001900391906101000a81548161ffff021916908361ffff160217905550505b600460008b81526020019081526020016000206000848152602001908152602001600020600083815260200190815260200160002060008961ffff1661ffff1681526020019081526020016000206000611f399190612a88565b7f03528ed0c2a3ebc993b12ce3c16bb382f9c7d88ef7d8a1bf290eaf35955a12078a8a8a604051611f6c9392919061344c565b60405180910390a16120ee565b6000600460008c81526020019081526020016000206000858152602001908152602001600020600084815260200190815260200160002060008a61ffff1661ffff168152602001908152602001600020805460018160011615610100020316600290049050141561204d57600560008b815260200190815260200160002060008481526020019081526020016000206000838152602001908152602001600020600081819054906101000a900461ffff168092919060010191906101000a81548161ffff021916908361ffff160217905550505b80600460008c81526020019081526020016000206000858152602001908152602001600020600084815260200190815260200160002060008a61ffff1661ffff16815260200190815260200160002090805190602001906120af929190612a08565b507f52a608b3303a48862d07a73d82fa221318c0027fbbcfb1b2329bface3f19ff2b8a8a8a846040516120e5949392919061348a565b60405180910390a15b50505050505050505050565b8060c00151816020018181525050806000015151816020015110151561211f5761220d565b6000612133826000015183602001516122fd565b82602001510190506121528183600001516123f390919063ffffffff16565b826040019061ffff16908161ffff16815250506002810190506121828183600001516123f390919063ffffffff16565b826060019061ffff16908161ffff16815250506002810190506121b281836000015161241b90919063ffffffff16565b826080019063ffffffff16908163ffffffff168152505060048101905060006121e88284600001516123f390919063ffffffff16565b61ffff169050600282019150818360a00181815250508082018360c001818152505050505b50565b60006014825114151561222257600080fd5b600c6101000a6020830151049050919050565b606060146040519080825280601f01601f19166020018201604052801561226b5781602001600182028038833980820191505090505b509050600c6101000a82026020820152919050565b600063691f34317c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806122f657506122f582612445565b5b9050919050565b6000808290505b60011561234e5783518110151561231757fe5b600061232c82866124fa90919063ffffffff16565b60ff16905060018101820191506000811415612348575061234e565b50612304565b82810391505092915050565b606083518284011115151561236e57600080fd5b6060826040519080825280601f01601f1916602001820160405280156123a35781602001600182028038833980820191505090505b50905060008060208301915085602088010190506123c2828287612580565b8293505050509392505050565b60006123dc8484846125cb565b6123e78787856125cb565b14905095945050505050565b60008251600283011115151561240857600080fd5b61ffff8260028501015116905092915050565b60008251600483011115151561243057600080fd5b63ffffffff8260048501015116905092915050565b600060405180807f696e74657266616365496d706c656d656e74657228627974657333322c62797481526020017f6573342900000000000000000000000000000000000000000000000000000000815250602401905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806124f357506124f2826125f0565b5b9050919050565b6000828281518110151561250a57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004905092915050565b5b6020811015156125a65781518352602083019250602082019150602081039050612581565b60006001826020036101000a0390508019835116818551168181178652505050505050565b60008351828401111515156125df57600080fd5b818360208601012090509392505050565b600063a8fa56827c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061266657506126658261266d565b5b9050919050565b600063bc1c58d17c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806126e357506126e2826126ea565b5b9050919050565b6000633b3b57de7c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806127bb575063f1cb7e067c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806127cb57506127ca826127d2565b5b9050919050565b6000632203ab567c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061284857506128478261284f565b5b9050919050565b60006301ffc9a77c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60e0604051908101604052806060815260200160008152602001600061ffff168152602001600061ffff168152602001600063ffffffff16815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061294957803560ff1916838001178555612977565b82800160010185558215612977579182015b8281111561297657823582559160200191906001019061295b565b5b5090506129849190612ad0565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106129c957803560ff19168380011785556129f7565b828001600101855582156129f7579182015b828111156129f65782358255916020019190600101906129db565b5b509050612a049190612ad0565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612a4957805160ff1916838001178555612a77565b82800160010185558215612a77579182015b82811115612a76578251825591602001919060010190612a5b565b5b509050612a849190612ad0565b5090565b50805460018160011615610100020316600290046000825580601f10612aae5750612acd565b601f016020900490600052602060002090810190612acc9190612ad0565b5b50565b612af291905b80821115612aee576000816000905550600101612ad6565b5090565b90565b6000612b01823561375b565b905092915050565b6000612b15825161375b565b905092915050565b6000612b29823561376d565b905092915050565b6000612b3d8235613779565b905092915050565b6000612b518235613783565b905092915050565b60008083601f8401121515612b6d57600080fd5b8235905067ffffffffffffffff811115612b8657600080fd5b602083019150836001820283011115612b9e57600080fd5b9250929050565b600082601f8301121515612bb857600080fd5b8135612bcb612bc68261367b565b61364e565b91508082526020830160208301858383011115612be757600080fd5b612bf28382846137fd565b50505092915050565b60008083601f8401121515612c0f57600080fd5b8235905067ffffffffffffffff811115612c2857600080fd5b602083019150836001820283011115612c4057600080fd5b9250929050565b6000612c5382356137af565b905092915050565b6000612c6782356137bd565b905092915050565b600060208284031215612c8157600080fd5b6000612c8f84828501612b09565b91505092915050565b600060208284031215612caa57600080fd5b6000612cb884828501612b31565b91505092915050565b60008060408385031215612cd457600080fd5b6000612ce285828601612b31565b9250506020612cf385828601612af5565b9150509250929050565b600080600060608486031215612d1257600080fd5b6000612d2086828701612b31565b9350506020612d3186828701612af5565b9250506040612d4286828701612af5565b9150509250925092565b600080600060608486031215612d6157600080fd5b6000612d6f86828701612b31565b9350506020612d8086828701612af5565b9250506040612d9186828701612b1d565b9150509250925092565b60008060408385031215612dae57600080fd5b6000612dbc85828601612b31565b9250506020612dcd85828601612b31565b9150509250929050565b600080600060608486031215612dec57600080fd5b6000612dfa86828701612b31565b9350506020612e0b86828701612b31565b9250506040612e1c86828701612b31565b9150509250925092565b600080600060608486031215612e3b57600080fd5b6000612e4986828701612b31565b9350506020612e5a86828701612b31565b9250506040612e6b86828701612c47565b9150509250925092565b60008060408385031215612e8857600080fd5b6000612e9685828601612b31565b9250506020612ea785828601612b45565b9150509250929050565b600080600060608486031215612ec657600080fd5b6000612ed486828701612b31565b9350506020612ee586828701612b45565b9250506040612ef686828701612af5565b9150509250925092565b600080600060408486031215612f1557600080fd5b6000612f2386828701612b31565b935050602084013567ffffffffffffffff811115612f4057600080fd5b612f4c86828701612b59565b92509250509250925092565b600080600060408486031215612f6d57600080fd5b6000612f7b86828701612b31565b935050602084013567ffffffffffffffff811115612f9857600080fd5b612fa486828701612bfb565b92509250509250925092565b600080600080600060608688031215612fc857600080fd5b6000612fd688828901612b31565b955050602086013567ffffffffffffffff811115612ff357600080fd5b612fff88828901612bfb565b9450945050604086013567ffffffffffffffff81111561301e57600080fd5b61302a88828901612bfb565b92509250509295509295909350565b6000806040838503121561304c57600080fd5b600061305a85828601612b31565b925050602061306b85828601612c5b565b9150509250929050565b6000806000806060858703121561308b57600080fd5b600061309987828801612b31565b94505060206130aa87828801612c5b565b935050604085013567ffffffffffffffff8111156130c757600080fd5b6130d387828801612b59565b925092505092959194509250565b6000806000606084860312156130f657600080fd5b600061310486828701612b31565b935050602061311586828701612c5b565b925050604084013567ffffffffffffffff81111561313257600080fd5b61313e86828701612ba5565b9150509250925092565b60006020828403121561315a57600080fd5b600061316884828501612b45565b91505092915050565b61317a816137c7565b82525050565b613189816136cf565b82525050565b613198816136bd565b82525050565b6131a7816136e1565b82525050565b6131b6816136ed565b82525050565b6131c5816136f7565b82525050565b60008284526020840193506131e18385846137fd565b6131ea8361383f565b840190509392505050565b6000613200826136a7565b80845261321481602086016020860161380c565b61321d8161383f565b602085010191505092915050565b60008284526020840193506132418385846137fd565b61324a8361383f565b840190509392505050565b6000613260826136b2565b80845261327481602086016020860161380c565b61327d8161383f565b602085010191505092915050565b61329481613723565b82525050565b6132a381613751565b82525050565b60006020820190506132be600083018461318f565b92915050565b60006020820190506132d96000830184613180565b92915050565b60006020820190506132f4600083018461319e565b92915050565b600060208201905061330f60008301846131ad565b92915050565b600060408201905061332a60008301856131ad565b6133376020830184613171565b9392505050565b600060808201905061335360008301876131ad565b6133606020830186613171565b61336d604083018561318f565b61337a606083018461319e565b95945050505050565b600060408201905061339860008301856131ad565b6133a560208301846131ad565b9392505050565b60006060820190506133c160008301866131ad565b6133ce60208301856131ad565b6133db60408301846131ad565b949350505050565b60006060820190506133f860008301866131ad565b61340560208301856131bc565b613412604083018461318f565b949350505050565b600060408201905061342f60008301866131ad565b81810360208301526134428184866131cb565b9050949350505050565b600060608201905061346160008301866131ad565b818103602083015261347381856131f5565b9050613482604083018461328b565b949350505050565b600060808201905061349f60008301876131ad565b81810360208301526134b181866131f5565b90506134c0604083018561328b565b81810360608301526134d281846131f5565b905095945050505050565b60006040820190506134f260008301866131ad565b818103602083015261350581848661322b565b9050949350505050565b600060608201905061352460008301886131ad565b818103602083015261353781868861322b565b9050818103604083015261354c81848661322b565b90509695505050505050565b600060408201905061356d60008301856131ad565b61357a602083018461329a565b9392505050565b600060608201905061359660008301866131ad565b6135a3602083018561329a565b81810360408301526135b581846131f5565b9050949350505050565b60006020820190506135d460008301846131bc565b92915050565b600060208201905081810360008301526135f481846131f5565b905092915050565b600060208201905081810360008301526136168184613255565b905092915050565b6000604082019050613633600083018561329a565b818103602083015261364581846131f5565b90509392505050565b6000604051905081810181811067ffffffffffffffff8211171561367157600080fd5b8060405250919050565b600067ffffffffffffffff82111561369257600080fd5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b60006136c882613731565b9050919050565b60006136da82613731565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061376682613731565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b6000819050919050565b60006137d2826137d9565b9050919050565b60006137e4826137eb565b9050919050565b60006137f682613731565b9050919050565b82818337600083830152505050565b60005b8381101561382a57808201518184015260208101905061380f565b83811115613839576000848401525b50505050565b6000601f19601f830116905091905056fea265627a7a72305820668668127482cd23a9f375761bf0b8d29fdbff7c261f4d2755ca9c73637d86bf6c6578706572696d656e74616cf50037" +resolver_bytecode_runtime = "608060405260043610610133576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806301ffc9a7146101385780630af179d71461017557806310f13a8c1461019e578063124a319c146101c75780632203ab561461020457806329cd62ea14610242578063304e6ade1461026b5780633b3b57de146102945780633e9ce794146102d15780634cbf6ba4146102fa57806359d1d43c14610337578063623195b014610374578063691f34311461039d57806377372213146103da5780638b95dd7114610403578063a8fa56821461042c578063ad5780af14610469578063bc1c58d114610492578063c8690233146104cf578063d5fa2b001461050d578063e59d895d14610536578063f1cb7e061461055f578063f86bc8791461059c575b600080fd5b34801561014457600080fd5b5061015f600480360361015a9190810190613148565b6105d9565b60405161016c91906132df565b60405180910390f35b34801561018157600080fd5b5061019c60048036036101979190810190612f00565b610656565b005b3480156101aa57600080fd5b506101c560048036036101c09190810190612fb0565b6108d5565b005b3480156101d357600080fd5b506101ee60048036036101e99190810190612e75565b610979565b6040516101fb91906132a9565b60405180910390f35b34801561021057600080fd5b5061022b60048036036102269190810190613039565b610ede565b60405161023992919061361e565b60405180910390f35b34801561024e57600080fd5b5061026960048036036102649190810190612dd7565b611033565b005b34801561027757600080fd5b50610292600480360361028d9190810190612f00565b6110c8565b005b3480156102a057600080fd5b506102bb60048036036102b69190810190612c98565b611141565b6040516102c891906132c4565b60405180910390f35b3480156102dd57600080fd5b506102f860048036036102f39190810190612d4c565b611178565b005b34801561030657600080fd5b50610321600480360361031c9190810190612d9b565b61125f565b60405161032e91906132df565b60405180910390f35b34801561034357600080fd5b5061035e60048036036103599190810190612f58565b6112c7565b60405161036b91906135fc565b60405180910390f35b34801561038057600080fd5b5061039b60048036036103969190810190613075565b6113a3565b005b3480156103a957600080fd5b506103c460048036036103bf9190810190612c98565b61143f565b6040516103d191906135fc565b60405180910390f35b3480156103e657600080fd5b5061040160048036036103fc9190810190612f58565b6114f4565b005b34801561040f57600080fd5b5061042a600480360361042591908101906130e1565b61156d565b005b34801561043857600080fd5b50610453600480360361044e9190810190612e26565b611647565b60405161046091906135da565b60405180910390f35b34801561047557600080fd5b50610490600480360361048b9190810190612c98565b61174c565b005b34801561049e57600080fd5b506104b960048036036104b49190810190612c98565b6117bf565b6040516104c691906135da565b60405180910390f35b3480156104db57600080fd5b506104f660048036036104f19190810190612c98565b611874565b604051610504929190613383565b60405180910390f35b34801561051957600080fd5b50610534600480360361052f9190810190612cc1565b6118ae565b005b34801561054257600080fd5b5061055d60048036036105589190810190612eb1565b6118dc565b005b34801561056b57600080fd5b5061058660048036036105819190810190613039565b6119d3565b60405161059391906135da565b60405180910390f35b3480156105a857600080fd5b506105c360048036036105be9190810190612cfd565b611a9a565b6040516105d091906132df565b60405180910390f35b60006359d1d43c7c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061064f575061064e82611ad6565b5b9050919050565b8261066081611b53565b151561066b57600080fd5b6000809050600080905060608060006106826128bc565b6106da60008a8a8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050611cf890919063ffffffff16565b90505b6106e681611d22565b15156108625760008661ffff161415610791578060400151955061070981611d38565b9350836040516020018082805190602001908083835b602083101515610744578051825260208201915060208101905060208303925061071f565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120915061078a81611d6f565b9250610854565b606061079c82611d38565b9050816040015161ffff168761ffff161415806107c957506107c78186611d9f90919063ffffffff16565b155b156108525761082b8b86898d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508a8b88602001510360008b5114611dc6565b81604001519650816020015195508094508480519060200120925061084f82611d6f565b93505b505b61085d816120fa565b6106dd565b506000835111156108ca576108c98984878b8b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505088898e8e9050036000895114611dc6565b5b505050505050505050565b846108df81611b53565b15156108ea57600080fd5b828260096000898152602001908152602001600020878760405180838380828437808301925050509250505090815260200160405180910390209190610931929190612908565b507fd8c9334b1a9c2f9da342a0a2b32629c1a229b6445dad78947f674b44444a7550868686888860405161096995949392919061350f565b60405180910390a1505050505050565b600080600660008581526020019081526020016000206000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515610a405780915050610ed8565b6000610a4b85611141565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a8d57600092505050610ed8565b600060608273ffffffffffffffffffffffffffffffffffffffff166301ffc9a77c010000000000000000000000000000000000000000000000000000000002604051602401610adc91906135bf565b6040516020818303038152906040527f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083101515610b8e5780518252602082019150602081019050602083039250610b69565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114610bee576040519150601f19603f3d011682016040523d82523d6000602084013e610bf3565b606091505b5091509150811580610c06575060208151105b80610cae575060007f01000000000000000000000000000000000000000000000000000000000000000281601f815181101515610c3f57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b15610cc0576000945050505050610ed8565b8273ffffffffffffffffffffffffffffffffffffffff1686604051602401610ce891906135bf565b6040516020818303038152906040527f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b602083101515610d9a5780518252602082019150602081019050602083039250610d75565b6001836020036101000a038019825116818451168082178552505050505050905001915050600060405180830381855afa9150503d8060008114610dfa576040519150601f19603f3d011682016040523d82523d6000602084013e610dff565b606091505b508092508193505050811580610e16575060208151105b80610ebe575060007f01000000000000000000000000000000000000000000000000000000000000000281601f815181101515610e4f57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b15610ed0576000945050505050610ed8565b829450505050505b92915050565b60006060600080600086815260200190815260200160002090506000600190505b848111151561100f57600085821614158015610f4157506000826000838152602001908152602001600020805460018160011615610100020316600290049050115b156110005780826000838152602001908152602001600020808054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610fee5780601f10610fc357610100808354040283529160200191610fee565b820191906000526020600020905b815481529060010190602001808311610fd157829003601f168201915b5050505050905093509350505061102c565b6001819060020a029050610eff565b506000602060405190810160405280600081525081915092509250505b9250929050565b8261103d81611b53565b151561104857600080fd5b6040805190810160405280848152602001838152506008600086815260200190815260200160002060008201518160000155602082015181600101559050507f1d6f5e03d3f63eb58751986629a5439baee5079ff04f345becb66e23eb154e468484846040516110ba939291906133ac565b60405180910390a150505050565b826110d281611b53565b15156110dd57600080fd5b82826002600087815260200190815260200160002091906110ff929190612988565b507fe379c1624ed7e714cc0937528a32359d69d5281337765313dba4e081b72d75788484846040516111339392919061341a565b60405180910390a150505050565b6000606061115083603c6119d3565b9050600081511415611166576000915050611173565b61116f81612210565b9150505b919050565b80600b600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fe1c5610a6e0cbe10764ecd182adcef1ec338dc4e199c99c32ce98f38e12791df83338484604051611252949392919061333e565b60405180910390a1505050565b60008060056000858152602001908152602001600020600060036000878152602001908152602001600020548152602001908152602001600020600084815260200190815260200160002060009054906101000a900461ffff1661ffff161415905092915050565b606060096000858152602001908152602001600020838360405180838380828437808301925050509250505090815260200160405180910390208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156113955780601f1061136a57610100808354040283529160200191611395565b820191906000526020600020905b81548152906001019060200180831161137857829003601f168201915b505050505090509392505050565b836113ad81611b53565b15156113b857600080fd5b60008460018603161415156113cc57600080fd5b8282600080888152602001908152602001600020600087815260200190815260200160002091906113fe929190612988565b507faa121bbeef5f32f5961a2a28966e769023910fc9479059ee3495d4c1a696efe38585604051611430929190613558565b60405180910390a15050505050565b6060600760008381526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156114e85780601f106114bd576101008083540402835291602001916114e8565b820191906000526020600020905b8154815290600101906020018083116114cb57829003601f168201915b50505050509050919050565b826114fe81611b53565b151561150957600080fd5b828260076000878152602001908152602001600020919061152b929190612908565b507fb7d29e911041e8d9b843369e890bcb72c9388692ba48b65ac54e7214c4c348f784848460405161155f939291906134dd565b60405180910390a150505050565b8261157781611b53565b151561158257600080fd5b7f65412581168e88a1e60c6459d7f44ae83ad0832e670826c05a4e2476b57af7528484846040516115b593929190613581565b60405180910390a1603c831415611608577f52d7d861f09ab3d26239d492e8968629f95e9e318cf0b73bfddc441522a15fd2846115f184612210565b6040516115ff929190613315565b60405180910390a15b816001600086815260200190815260200160002060008581526020019081526020016000209080519060200190611640929190612a08565b5050505050565b606060046000858152602001908152602001600020600060036000878152602001908152602001600020548152602001908152602001600020600084815260200190815260200160002060008361ffff1661ffff1681526020019081526020016000208054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561173e5780601f106117135761010080835404028352916020019161173e565b820191906000526020600020905b81548152906001019060200180831161172157829003601f168201915b505050505090509392505050565b8061175681611b53565b151561176157600080fd5b60036000838152602001908152602001600020600081548092919060010191905055507fb757169b8492ca2f1c6619d9d76ce22803035c3b1d5f6930dffe7b127c1a1983826040516117b391906132fa565b60405180910390a15050565b6060600260008381526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118685780601f1061183d57610100808354040283529160200191611868565b820191906000526020600020905b81548152906001019060200180831161184b57829003601f168201915b50505050509050919050565b6000806008600084815260200190815260200160002060000154600860008581526020019081526020016000206001015491509150915091565b816118b881611b53565b15156118c357600080fd5b6118d783603c6118d285612235565b61156d565b505050565b826118e681611b53565b15156118f157600080fd5b81600660008681526020019081526020016000206000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f7c69f06bea0bdef565b709e93a147836b0063ba2dd89f02d0b7e8d931e6a6daa8484846040516119c5939291906133e3565b60405180910390a150505050565b60606001600084815260200190815260200160002060008381526020019081526020016000208054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a8d5780601f10611a6257610100808354040283529160200191611a8d565b820191906000526020600020905b815481529060010190602001808311611a7057829003601f168201915b5050505050905092915050565b600b602052826000526040600020602052816000526040600020602052806000526040600020600092509250509054906101000a900460ff1681565b600063c86902337c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611b4c5750611b4b82612280565b5b9050919050565b600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3846040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401611bcd91906132fa565b60206040518083038186803b158015611be557600080fd5b505afa158015611bf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c1d9190810190612c6f565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480611cf05750600b600084815260200190815260200160002060008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b915050919050565b611d006128bc565b828160000181905250818160c0018181525050611d1c816120fa565b92915050565b6000816000015151826020015110159050919050565b6060611d688260200151611d54846000015185602001516122fd565b846000015161235a9092919063ffffffff16565b9050919050565b6060611d988260a001518360a001518460c0015103846000015161235a9092919063ffffffff16565b9050919050565b600081518351148015611dbe5750611dbd83600084600087516123cf565b5b905092915050565b6000600360008981526020019081526020016000205490506000878051906020012090506060611e0186868961235a9092919063ffffffff16565b90508315611f79576000600460008c81526020019081526020016000206000858152602001908152602001600020600084815260200190815260200160002060008a61ffff1661ffff168152602001908152602001600020805460018160011615610100020316600290049050141515611edf57600560008b815260200190815260200160002060008481526020019081526020016000206000838152602001908152602001600020600081819054906101000a900461ffff16809291906001900391906101000a81548161ffff021916908361ffff160217905550505b600460008b81526020019081526020016000206000848152602001908152602001600020600083815260200190815260200160002060008961ffff1661ffff1681526020019081526020016000206000611f399190612a88565b7f03528ed0c2a3ebc993b12ce3c16bb382f9c7d88ef7d8a1bf290eaf35955a12078a8a8a604051611f6c9392919061344c565b60405180910390a16120ee565b6000600460008c81526020019081526020016000206000858152602001908152602001600020600084815260200190815260200160002060008a61ffff1661ffff168152602001908152602001600020805460018160011615610100020316600290049050141561204d57600560008b815260200190815260200160002060008481526020019081526020016000206000838152602001908152602001600020600081819054906101000a900461ffff168092919060010191906101000a81548161ffff021916908361ffff160217905550505b80600460008c81526020019081526020016000206000858152602001908152602001600020600084815260200190815260200160002060008a61ffff1661ffff16815260200190815260200160002090805190602001906120af929190612a08565b507f52a608b3303a48862d07a73d82fa221318c0027fbbcfb1b2329bface3f19ff2b8a8a8a846040516120e5949392919061348a565b60405180910390a15b50505050505050505050565b8060c00151816020018181525050806000015151816020015110151561211f5761220d565b6000612133826000015183602001516122fd565b82602001510190506121528183600001516123f390919063ffffffff16565b826040019061ffff16908161ffff16815250506002810190506121828183600001516123f390919063ffffffff16565b826060019061ffff16908161ffff16815250506002810190506121b281836000015161241b90919063ffffffff16565b826080019063ffffffff16908163ffffffff168152505060048101905060006121e88284600001516123f390919063ffffffff16565b61ffff169050600282019150818360a00181815250508082018360c001818152505050505b50565b60006014825114151561222257600080fd5b600c6101000a6020830151049050919050565b606060146040519080825280601f01601f19166020018201604052801561226b5781602001600182028038833980820191505090505b509050600c6101000a82026020820152919050565b600063691f34317c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806122f657506122f582612445565b5b9050919050565b6000808290505b60011561234e5783518110151561231757fe5b600061232c82866124fa90919063ffffffff16565b60ff16905060018101820191506000811415612348575061234e565b50612304565b82810391505092915050565b606083518284011115151561236e57600080fd5b6060826040519080825280601f01601f1916602001820160405280156123a35781602001600182028038833980820191505090505b50905060008060208301915085602088010190506123c2828287612580565b8293505050509392505050565b60006123dc8484846125cb565b6123e78787856125cb565b14905095945050505050565b60008251600283011115151561240857600080fd5b61ffff8260028501015116905092915050565b60008251600483011115151561243057600080fd5b63ffffffff8260048501015116905092915050565b600060405180807f696e74657266616365496d706c656d656e74657228627974657333322c62797481526020017f6573342900000000000000000000000000000000000000000000000000000000815250602401905060405180910390207bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806124f357506124f2826125f0565b5b9050919050565b6000828281518110151561250a57fe5b9060200101517f010000000000000000000000000000000000000000000000000000000000000090047f0100000000000000000000000000000000000000000000000000000000000000027f01000000000000000000000000000000000000000000000000000000000000009004905092915050565b5b6020811015156125a65781518352602083019250602082019150602081039050612581565b60006001826020036101000a0390508019835116818551168181178652505050505050565b60008351828401111515156125df57600080fd5b818360208601012090509392505050565b600063a8fa56827c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061266657506126658261266d565b5b9050919050565b600063bc1c58d17c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806126e357506126e2826126ea565b5b9050919050565b6000633b3b57de7c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806127bb575063f1cb7e067c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806127cb57506127ca826127d2565b5b9050919050565b6000632203ab567c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061284857506128478261284f565b5b9050919050565b60006301ffc9a77c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60e0604051908101604052806060815260200160008152602001600061ffff168152602001600061ffff168152602001600063ffffffff16815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061294957803560ff1916838001178555612977565b82800160010185558215612977579182015b8281111561297657823582559160200191906001019061295b565b5b5090506129849190612ad0565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106129c957803560ff19168380011785556129f7565b828001600101855582156129f7579182015b828111156129f65782358255916020019190600101906129db565b5b509050612a049190612ad0565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612a4957805160ff1916838001178555612a77565b82800160010185558215612a77579182015b82811115612a76578251825591602001919060010190612a5b565b5b509050612a849190612ad0565b5090565b50805460018160011615610100020316600290046000825580601f10612aae5750612acd565b601f016020900490600052602060002090810190612acc9190612ad0565b5b50565b612af291905b80821115612aee576000816000905550600101612ad6565b5090565b90565b6000612b01823561375b565b905092915050565b6000612b15825161375b565b905092915050565b6000612b29823561376d565b905092915050565b6000612b3d8235613779565b905092915050565b6000612b518235613783565b905092915050565b60008083601f8401121515612b6d57600080fd5b8235905067ffffffffffffffff811115612b8657600080fd5b602083019150836001820283011115612b9e57600080fd5b9250929050565b600082601f8301121515612bb857600080fd5b8135612bcb612bc68261367b565b61364e565b91508082526020830160208301858383011115612be757600080fd5b612bf28382846137fd565b50505092915050565b60008083601f8401121515612c0f57600080fd5b8235905067ffffffffffffffff811115612c2857600080fd5b602083019150836001820283011115612c4057600080fd5b9250929050565b6000612c5382356137af565b905092915050565b6000612c6782356137bd565b905092915050565b600060208284031215612c8157600080fd5b6000612c8f84828501612b09565b91505092915050565b600060208284031215612caa57600080fd5b6000612cb884828501612b31565b91505092915050565b60008060408385031215612cd457600080fd5b6000612ce285828601612b31565b9250506020612cf385828601612af5565b9150509250929050565b600080600060608486031215612d1257600080fd5b6000612d2086828701612b31565b9350506020612d3186828701612af5565b9250506040612d4286828701612af5565b9150509250925092565b600080600060608486031215612d6157600080fd5b6000612d6f86828701612b31565b9350506020612d8086828701612af5565b9250506040612d9186828701612b1d565b9150509250925092565b60008060408385031215612dae57600080fd5b6000612dbc85828601612b31565b9250506020612dcd85828601612b31565b9150509250929050565b600080600060608486031215612dec57600080fd5b6000612dfa86828701612b31565b9350506020612e0b86828701612b31565b9250506040612e1c86828701612b31565b9150509250925092565b600080600060608486031215612e3b57600080fd5b6000612e4986828701612b31565b9350506020612e5a86828701612b31565b9250506040612e6b86828701612c47565b9150509250925092565b60008060408385031215612e8857600080fd5b6000612e9685828601612b31565b9250506020612ea785828601612b45565b9150509250929050565b600080600060608486031215612ec657600080fd5b6000612ed486828701612b31565b9350506020612ee586828701612b45565b9250506040612ef686828701612af5565b9150509250925092565b600080600060408486031215612f1557600080fd5b6000612f2386828701612b31565b935050602084013567ffffffffffffffff811115612f4057600080fd5b612f4c86828701612b59565b92509250509250925092565b600080600060408486031215612f6d57600080fd5b6000612f7b86828701612b31565b935050602084013567ffffffffffffffff811115612f9857600080fd5b612fa486828701612bfb565b92509250509250925092565b600080600080600060608688031215612fc857600080fd5b6000612fd688828901612b31565b955050602086013567ffffffffffffffff811115612ff357600080fd5b612fff88828901612bfb565b9450945050604086013567ffffffffffffffff81111561301e57600080fd5b61302a88828901612bfb565b92509250509295509295909350565b6000806040838503121561304c57600080fd5b600061305a85828601612b31565b925050602061306b85828601612c5b565b9150509250929050565b6000806000806060858703121561308b57600080fd5b600061309987828801612b31565b94505060206130aa87828801612c5b565b935050604085013567ffffffffffffffff8111156130c757600080fd5b6130d387828801612b59565b925092505092959194509250565b6000806000606084860312156130f657600080fd5b600061310486828701612b31565b935050602061311586828701612c5b565b925050604084013567ffffffffffffffff81111561313257600080fd5b61313e86828701612ba5565b9150509250925092565b60006020828403121561315a57600080fd5b600061316884828501612b45565b91505092915050565b61317a816137c7565b82525050565b613189816136cf565b82525050565b613198816136bd565b82525050565b6131a7816136e1565b82525050565b6131b6816136ed565b82525050565b6131c5816136f7565b82525050565b60008284526020840193506131e18385846137fd565b6131ea8361383f565b840190509392505050565b6000613200826136a7565b80845261321481602086016020860161380c565b61321d8161383f565b602085010191505092915050565b60008284526020840193506132418385846137fd565b61324a8361383f565b840190509392505050565b6000613260826136b2565b80845261327481602086016020860161380c565b61327d8161383f565b602085010191505092915050565b61329481613723565b82525050565b6132a381613751565b82525050565b60006020820190506132be600083018461318f565b92915050565b60006020820190506132d96000830184613180565b92915050565b60006020820190506132f4600083018461319e565b92915050565b600060208201905061330f60008301846131ad565b92915050565b600060408201905061332a60008301856131ad565b6133376020830184613171565b9392505050565b600060808201905061335360008301876131ad565b6133606020830186613171565b61336d604083018561318f565b61337a606083018461319e565b95945050505050565b600060408201905061339860008301856131ad565b6133a560208301846131ad565b9392505050565b60006060820190506133c160008301866131ad565b6133ce60208301856131ad565b6133db60408301846131ad565b949350505050565b60006060820190506133f860008301866131ad565b61340560208301856131bc565b613412604083018461318f565b949350505050565b600060408201905061342f60008301866131ad565b81810360208301526134428184866131cb565b9050949350505050565b600060608201905061346160008301866131ad565b818103602083015261347381856131f5565b9050613482604083018461328b565b949350505050565b600060808201905061349f60008301876131ad565b81810360208301526134b181866131f5565b90506134c0604083018561328b565b81810360608301526134d281846131f5565b905095945050505050565b60006040820190506134f260008301866131ad565b818103602083015261350581848661322b565b9050949350505050565b600060608201905061352460008301886131ad565b818103602083015261353781868861322b565b9050818103604083015261354c81848661322b565b90509695505050505050565b600060408201905061356d60008301856131ad565b61357a602083018461329a565b9392505050565b600060608201905061359660008301866131ad565b6135a3602083018561329a565b81810360408301526135b581846131f5565b9050949350505050565b60006020820190506135d460008301846131bc565b92915050565b600060208201905081810360008301526135f481846131f5565b905092915050565b600060208201905081810360008301526136168184613255565b905092915050565b6000604082019050613633600083018561329a565b818103602083015261364581846131f5565b90509392505050565b6000604051905081810181811067ffffffffffffffff8211171561367157600080fd5b8060405250919050565b600067ffffffffffffffff82111561369257600080fd5b601f19601f8301169050602081019050919050565b600081519050919050565b600081519050919050565b60006136c882613731565b9050919050565b60006136da82613731565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600061376682613731565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b6000819050919050565b60006137d2826137d9565b9050919050565b60006137e4826137eb565b9050919050565b60006137f682613731565b9050919050565b82818337600083830152505050565b60005b8381101561382a57808201518184015260208101905061380f565b83811115613839576000848401525b50505050565b6000601f19601f830116905091905056fea265627a7a72305820668668127482cd23a9f375761bf0b8d29fdbff7c261f4d2755ca9c73637d86bf6c6578706572696d656e74616cf50037" -reverse_registrar_abi = json.loads('[{"constant":false,"inputs":[{"name":"owner","type":"address"},{"name":"resolver","type":"address"}],"name":"claimWithResolver","outputs":[{"name":"node","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"owner","type":"address"}],"name":"claim","outputs":[{"name":"node","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ens","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"defaultResolver","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"addr","type":"address"}],"name":"node","outputs":[{"name":"ret","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"}],"name":"setName","outputs":[{"name":"node","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"ensAddr","type":"address"},{"name":"resolverAddr","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]') +reverse_registrar_abi = json.loads( + '[{"constant":false,"inputs":[{"name":"owner","type":"address"},{"name":"resolver","type":"address"}],"name":"claimWithResolver","outputs":[{"name":"node","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"owner","type":"address"}],"name":"claim","outputs":[{"name":"node","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ens","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"defaultResolver","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"addr","type":"address"}],"name":"node","outputs":[{"name":"ret","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"name","type":"string"}],"name":"setName","outputs":[{"name":"node","type":"bytes32"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"ensAddr","type":"address"},{"name":"resolverAddr","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"}]' +) reverse_registrar_bytecode = "6060604052341561000f57600080fd5b604051604080610d96833981016040528080519060200190919080519060200190919050506000826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be37f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e26001026000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b151561017a57600080fd5b6102c65a03f1151561018b57600080fd5b50505060405180519050905060008173ffffffffffffffffffffffffffffffffffffffff16141515610277578073ffffffffffffffffffffffffffffffffffffffff16631e83409a336000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b151561025a57600080fd5b6102c65a03f1151561026b57600080fd5b50505060405180519050505b505050610b0d806102896000396000f300606060405260043610610078576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630f5a54661461007d5780631e83409a146100f15780633f15457f14610146578063828eab0e1461019b578063bffbe61c146101f0578063c47f002714610245575b600080fd5b341561008857600080fd5b6100d3600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506102be565b60405180826000191660001916815260200191505060405180910390f35b34156100fc57600080fd5b610128600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061086e565b60405180826000191660001916815260200191505060405180910390f35b341561015157600080fd5b610159610882565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156101a657600080fd5b6101ae6108a7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156101fb57600080fd5b610227600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506108cd565b60405180826000191660001916815260200191505060405180910390f35b341561025057600080fd5b6102a0600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190505061092f565b60405180826000191660001916815260200191505060405180910390f35b60008060006102cc33610a80565b91507f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260010282604051808360001916600019168152602001826000191660001916815260200192505050604051809103902092506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3846000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15156103c157600080fd5b6102c65a03f115156103d257600080fd5b50505060405180519050905060008473ffffffffffffffffffffffffffffffffffffffff16141580156104eb57506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630178b8bf846000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15156104a057600080fd5b6102c65a03f115156104b157600080fd5b5050506040518051905073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561071b573073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561063b576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab59237f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260010284306040518463ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180846000191660001916815260200183600019166000191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b151561062357600080fd5b6102c65a03f1151561063457600080fd5b5050503090505b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631896f70a84866040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600019166000191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b151561070657600080fd5b6102c65a03f1151561071757600080fd5b5050505b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515610863576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab59237f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260010284886040518463ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180846000191660001916815260200183600019166000191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b151561084e57600080fd5b6102c65a03f1151561085f57600080fd5b5050505b829250505092915050565b600061087b8260006102be565b9050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e26001026108fc83610a80565b60405180836000191660001916815260200182600019166000191681526020019250505060405180910390209050919050565b600061095d30600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166102be565b9050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637737221382846040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610a185780820151818401526020810190506109fd565b50505050905090810190601f168015610a455780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b1515610a6457600080fd5b6102c65a03f11515610a7557600080fd5b505050809050919050565b60007f303132333435363738396162636465660000000000000000000000000000000060285b60018103905081600f85161a815360108404935060018103905081600f85161a815360108404935080610aa6576028600020925050509190505600a165627a7a72305820a8513240f040cd9ded89ca4d0c5bda58536850e642e1d933ad64158ef4c820660029" reverse_registrar_bytecode_runtime = "606060405260043610610078576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630f5a54661461007d5780631e83409a146100f15780633f15457f14610146578063828eab0e1461019b578063bffbe61c146101f0578063c47f002714610245575b600080fd5b341561008857600080fd5b6100d3600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506102be565b60405180826000191660001916815260200191505060405180910390f35b34156100fc57600080fd5b610128600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061086e565b60405180826000191660001916815260200191505060405180910390f35b341561015157600080fd5b610159610882565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156101a657600080fd5b6101ae6108a7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156101fb57600080fd5b610227600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506108cd565b60405180826000191660001916815260200191505060405180910390f35b341561025057600080fd5b6102a0600480803590602001908201803590602001908080601f0160208091040260200160405190810160405280939291908181526020018383808284378201915050505050509190505061092f565b60405180826000191660001916815260200191505060405180910390f35b60008060006102cc33610a80565b91507f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260010282604051808360001916600019168152602001826000191660001916815260200192505050604051809103902092506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3846000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15156103c157600080fd5b6102c65a03f115156103d257600080fd5b50505060405180519050905060008473ffffffffffffffffffffffffffffffffffffffff16141580156104eb57506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630178b8bf846000604051602001526040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808260001916600019168152602001915050602060405180830381600087803b15156104a057600080fd5b6102c65a03f115156104b157600080fd5b5050506040518051905073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561071b573073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561063b576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab59237f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260010284306040518463ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180846000191660001916815260200183600019166000191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b151561062357600080fd5b6102c65a03f1151561063457600080fd5b5050503090505b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631896f70a84866040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600019166000191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200192505050600060405180830381600087803b151561070657600080fd5b6102c65a03f1151561071757600080fd5b5050505b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515610863576000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166306ab59237f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e260010284886040518463ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180846000191660001916815260200183600019166000191681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019350505050600060405180830381600087803b151561084e57600080fd5b6102c65a03f1151561085f57600080fd5b5050505b829250505092915050565b600061087b8260006102be565b9050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e26001026108fc83610a80565b60405180836000191660001916815260200182600019166000191681526020019250505060405180910390209050919050565b600061095d30600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166102be565b9050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637737221382846040518363ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180836000191660001916815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610a185780820151818401526020810190506109fd565b50505050905090810190601f168015610a455780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b1515610a6457600080fd5b6102c65a03f11515610a7557600080fd5b505050809050919050565b60007f303132333435363738396162636465660000000000000000000000000000000060285b60018103905081600f85161a815360108404935060018103905081600f85161a815360108404935080610aa6576028600020925050509190505600a165627a7a72305820a8513240f040cd9ded89ca4d0c5bda58536850e642e1d933ad64158ef4c820660029" # ENS Default Reverse Resolver -reverse_resolver_abi = json.loads('[{"inputs":[{"internalType":"contract ENS","name":"ensAddr","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"constant":true,"inputs":[],"name":"ens","outputs":[{"internalType":"contract ENS","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"_name","type":"string"}],"name":"setName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]') -reverse_resolver_bytecode = '608060405234801561001057600080fd5b5060405160208061079f8339810180604052602081101561003057600080fd5b8101908080519060200190929190505050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be37f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e26001026040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561013457600080fd5b505afa158015610148573d6000803e3d6000fd5b505050506040513d602081101561015e57600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561027f578073ffffffffffffffffffffffffffffffffffffffff16631e83409a336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561024257600080fd5b505af1158015610256573d6000803e3d6000fd5b505050506040513d602081101561026c57600080fd5b8101908080519060200190929190505050505b505061050f806102906000396000f3fe608060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633f15457f1461005c578063691f3431146100b35780637737221314610167575b600080fd5b34801561006857600080fd5b50610071610239565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156100bf57600080fd5b506100ec600480360360208110156100d657600080fd5b810190808035906020019092919050505061025e565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561012c578082015181840152602081019050610111565b50505050905090810190601f1680156101595780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561017357600080fd5b506102376004803603604081101561018a57600080fd5b8101908080359060200190929190803590602001906401000000008111156101b157600080fd5b8201836020820111156101c357600080fd5b803590602001918460018302840111640100000000831117156101e557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061030e565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016020528060005260406000206000915090508054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156103065780601f106102db57610100808354040283529160200191610306565b820191906000526020600020905b8154815290600101906020018083116102e957829003601f168201915b505050505081565b816000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3826040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561039d57600080fd5b505afa1580156103b1573d6000803e3d6000fd5b505050506040513d60208110156103c757600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561041157600080fd5b8160016000858152602001908152602001600020908051906020019061043892919061043e565b50505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061047f57805160ff19168380011785556104ad565b828001600101855582156104ad579182015b828111156104ac578251825591602001919060010190610491565b5b5090506104ba91906104be565b5090565b6104e091905b808211156104dc5760008160009055506001016104c4565b5090565b9056fea165627a7a72305820f326fd97e1fac0bcd89f007846301e41c2ad494c12d70b2b50dd61e62ffc906a0029' -reverse_resolver_bytecode_runtime = '608060405234801561001057600080fd5b506004361061004c5760003560e01c806301ffc9a7146100515780633e9ce794146100815780639061b9231461009d578063f86bc879146100cd575b600080fd5b61006b6004803603810190610066919061051e565b6100fd565b6040516100789190610566565b60405180910390f35b61009b60048036038101906100969190610641565b61015e565b005b6100b760048036038101906100b291906106f9565b610245565b6040516100c49190610813565b60405180910390f35b6100e760048036038101906100e29190610835565b61042f565b6040516100f49190610566565b60405180910390f35b6000639061b92360e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061015757506101568261046b565b5b9050919050565b806001600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fe1c5610a6e0cbe10764ecd182adcef1ec338dc4e199c99c32ce98f38e12791df8333848460405161023894939291906108a6565b60405180910390a1505050565b60606040518060400160405280601781526020017f11657874656e6465642d7265736f6c766572036574680000000000000000000081525080519060200120858560405161029492919061092a565b60405180910390201480156102ad575060248383905010155b15610328577ff0a378cc2afe91730d0105e67d6bb037cc5b8b6bfec5b5962d9b637ff6497e5560001b83836004906024926102ea9392919061094d565b906102f591906109a0565b146102ff57600080fd5b61beef60405160200161031291906109ff565b6040516020818303038152906040529050610427565b60008585600081811061033e5761033d610a1a565b5b9050013560f81c60f81b60f81c60ff1690506040518060400160405280601781526020017f11657874656e6465642d7265736f6c766572036574680000000000000000000081525080519060200120868683600161039c9190610a82565b9080926103ab9392919061094d565b6040516103b9929190610ad8565b604051809103902014610401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f890610b28565b60405180910390fd5b61dead60405160200161041491906109ff565b6040516020818303038152906040529150505b949350505050565b6001602052826000526040600020602052816000526040600020602052806000526040600020600092509250509054906101000a900460ff1681565b60006301ffc9a760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6104fb816104c6565b811461050657600080fd5b50565b600081359050610518816104f2565b92915050565b600060208284031215610534576105336104bc565b5b600061054284828501610509565b91505092915050565b60008115159050919050565b6105608161054b565b82525050565b600060208201905061057b6000830184610557565b92915050565b6000819050919050565b61059481610581565b811461059f57600080fd5b50565b6000813590506105b18161058b565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006105e2826105b7565b9050919050565b6105f2816105d7565b81146105fd57600080fd5b50565b60008135905061060f816105e9565b92915050565b61061e8161054b565b811461062957600080fd5b50565b60008135905061063b81610615565b92915050565b60008060006060848603121561065a576106596104bc565b5b6000610668868287016105a2565b935050602061067986828701610600565b925050604061068a8682870161062c565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126106b9576106b8610694565b5b8235905067ffffffffffffffff8111156106d6576106d5610699565b5b6020830191508360018202830111156106f2576106f161069e565b5b9250929050565b60008060008060408587031215610713576107126104bc565b5b600085013567ffffffffffffffff811115610731576107306104c1565b5b61073d878288016106a3565b9450945050602085013567ffffffffffffffff8111156107605761075f6104c1565b5b61076c878288016106a3565b925092505092959194509250565b600081519050919050565b600082825260208201905092915050565b60005b838110156107b4578082015181840152602081019050610799565b838111156107c3576000848401525b50505050565b6000601f19601f8301169050919050565b60006107e58261077a565b6107ef8185610785565b93506107ff818560208601610796565b610808816107c9565b840191505092915050565b6000602082019050818103600083015261082d81846107da565b905092915050565b60008060006060848603121561084e5761084d6104bc565b5b600061085c868287016105a2565b935050602061086d86828701610600565b925050604061087e86828701610600565b9150509250925092565b61089181610581565b82525050565b6108a0816105d7565b82525050565b60006080820190506108bb6000830187610888565b6108c86020830186610897565b6108d56040830185610897565b6108e26060830184610557565b95945050505050565b600081905092915050565b82818337600083830152505050565b600061091183856108eb565b935061091e8385846108f6565b82840190509392505050565b6000610937828486610905565b91508190509392505050565b600080fd5b600080fd5b6000808585111561096157610960610943565b5b8386111561097257610971610948565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b60006109ac8383610988565b826109b78135610581565b925060208210156109f7576109f27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802610993565b831692505b505092915050565b6000602082019050610a146000830184610897565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610a8d82610a49565b9150610a9883610a49565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610acd57610acc610a53565b5b828201905092915050565b6000610ae5828486610905565b91508190509392505050565b600082825260208201905092915050565b50565b6000610b12600083610af1565b9150610b1d82610b02565b600082019050919050565b60006020820190508181036000830152610b4181610b05565b905091905056fea264697066735822122053f3072486d953b17f72555d93bae38d3607f573e572c03ca3b10c082471640064736f6c634300080d0033' +reverse_resolver_abi = json.loads( + '[{"inputs":[{"internalType":"contract ENS","name":"ensAddr","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"constant":true,"inputs":[],"name":"ens","outputs":[{"internalType":"contract ENS","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bytes32","name":"node","type":"bytes32"},{"internalType":"string","name":"_name","type":"string"}],"name":"setName","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]' +) +reverse_resolver_bytecode = "608060405234801561001057600080fd5b5060405160208061079f8339810180604052602081101561003057600080fd5b8101908080519060200190929190505050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be37f91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e26001026040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561013457600080fd5b505afa158015610148573d6000803e3d6000fd5b505050506040513d602081101561015e57600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151561027f578073ffffffffffffffffffffffffffffffffffffffff16631e83409a336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561024257600080fd5b505af1158015610256573d6000803e3d6000fd5b505050506040513d602081101561026c57600080fd5b8101908080519060200190929190505050505b505061050f806102906000396000f3fe608060405260043610610057576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680633f15457f1461005c578063691f3431146100b35780637737221314610167575b600080fd5b34801561006857600080fd5b50610071610239565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156100bf57600080fd5b506100ec600480360360208110156100d657600080fd5b810190808035906020019092919050505061025e565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561012c578082015181840152602081019050610111565b50505050905090810190601f1680156101595780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561017357600080fd5b506102376004803603604081101561018a57600080fd5b8101908080359060200190929190803590602001906401000000008111156101b157600080fd5b8201836020820111156101c357600080fd5b803590602001918460018302840111640100000000831117156101e557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929050505061030e565b005b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60016020528060005260406000206000915090508054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156103065780601f106102db57610100808354040283529160200191610306565b820191906000526020600020905b8154815290600101906020018083116102e957829003601f168201915b505050505081565b816000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166302571be3826040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060206040518083038186803b15801561039d57600080fd5b505afa1580156103b1573d6000803e3d6000fd5b505050506040513d60208110156103c757600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561041157600080fd5b8160016000858152602001908152602001600020908051906020019061043892919061043e565b50505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061047f57805160ff19168380011785556104ad565b828001600101855582156104ad579182015b828111156104ac578251825591602001919060010190610491565b5b5090506104ba91906104be565b5090565b6104e091905b808211156104dc5760008160009055506001016104c4565b5090565b9056fea165627a7a72305820f326fd97e1fac0bcd89f007846301e41c2ad494c12d70b2b50dd61e62ffc906a0029" +reverse_resolver_bytecode_runtime = "608060405234801561001057600080fd5b506004361061004c5760003560e01c806301ffc9a7146100515780633e9ce794146100815780639061b9231461009d578063f86bc879146100cd575b600080fd5b61006b6004803603810190610066919061051e565b6100fd565b6040516100789190610566565b60405180910390f35b61009b60048036038101906100969190610641565b61015e565b005b6100b760048036038101906100b291906106f9565b610245565b6040516100c49190610813565b60405180910390f35b6100e760048036038101906100e29190610835565b61042f565b6040516100f49190610566565b60405180910390f35b6000639061b92360e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061015757506101568261046b565b5b9050919050565b806001600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fe1c5610a6e0cbe10764ecd182adcef1ec338dc4e199c99c32ce98f38e12791df8333848460405161023894939291906108a6565b60405180910390a1505050565b60606040518060400160405280601781526020017f11657874656e6465642d7265736f6c766572036574680000000000000000000081525080519060200120858560405161029492919061092a565b60405180910390201480156102ad575060248383905010155b15610328577ff0a378cc2afe91730d0105e67d6bb037cc5b8b6bfec5b5962d9b637ff6497e5560001b83836004906024926102ea9392919061094d565b906102f591906109a0565b146102ff57600080fd5b61beef60405160200161031291906109ff565b6040516020818303038152906040529050610427565b60008585600081811061033e5761033d610a1a565b5b9050013560f81c60f81b60f81c60ff1690506040518060400160405280601781526020017f11657874656e6465642d7265736f6c766572036574680000000000000000000081525080519060200120868683600161039c9190610a82565b9080926103ab9392919061094d565b6040516103b9929190610ad8565b604051809103902014610401576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103f890610b28565b60405180910390fd5b61dead60405160200161041491906109ff565b6040516020818303038152906040529150505b949350505050565b6001602052826000526040600020602052816000526040600020602052806000526040600020600092509250509054906101000a900460ff1681565b60006301ffc9a760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6104fb816104c6565b811461050657600080fd5b50565b600081359050610518816104f2565b92915050565b600060208284031215610534576105336104bc565b5b600061054284828501610509565b91505092915050565b60008115159050919050565b6105608161054b565b82525050565b600060208201905061057b6000830184610557565b92915050565b6000819050919050565b61059481610581565b811461059f57600080fd5b50565b6000813590506105b18161058b565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006105e2826105b7565b9050919050565b6105f2816105d7565b81146105fd57600080fd5b50565b60008135905061060f816105e9565b92915050565b61061e8161054b565b811461062957600080fd5b50565b60008135905061063b81610615565b92915050565b60008060006060848603121561065a576106596104bc565b5b6000610668868287016105a2565b935050602061067986828701610600565b925050604061068a8682870161062c565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126106b9576106b8610694565b5b8235905067ffffffffffffffff8111156106d6576106d5610699565b5b6020830191508360018202830111156106f2576106f161069e565b5b9250929050565b60008060008060408587031215610713576107126104bc565b5b600085013567ffffffffffffffff811115610731576107306104c1565b5b61073d878288016106a3565b9450945050602085013567ffffffffffffffff8111156107605761075f6104c1565b5b61076c878288016106a3565b925092505092959194509250565b600081519050919050565b600082825260208201905092915050565b60005b838110156107b4578082015181840152602081019050610799565b838111156107c3576000848401525b50505050565b6000601f19601f8301169050919050565b60006107e58261077a565b6107ef8185610785565b93506107ff818560208601610796565b610808816107c9565b840191505092915050565b6000602082019050818103600083015261082d81846107da565b905092915050565b60008060006060848603121561084e5761084d6104bc565b5b600061085c868287016105a2565b935050602061086d86828701610600565b925050604061087e86828701610600565b9150509250925092565b61089181610581565b82525050565b6108a0816105d7565b82525050565b60006080820190506108bb6000830187610888565b6108c86020830186610897565b6108d56040830185610897565b6108e26060830184610557565b95945050505050565b600081905092915050565b82818337600083830152505050565b600061091183856108eb565b935061091e8385846108f6565b82840190509392505050565b6000610937828486610905565b91508190509392505050565b600080fd5b600080fd5b6000808585111561096157610960610943565b5b8386111561097257610971610948565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b60006109ac8383610988565b826109b78135610581565b925060208210156109f7576109f27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802610993565b831692505b505092915050565b6000602082019050610a146000830184610897565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610a8d82610a49565b9150610a9883610a49565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610acd57610acc610a53565b5b828201905092915050565b6000610ae5828486610905565b91508190509392505050565b600082825260208201905092915050565b50565b6000610b12600083610af1565b9150610b1d82610b02565b600082019050919050565b60006020820190508181036000830152610b4181610b05565b905091905056fea264697066735822122053f3072486d953b17f72555d93bae38d3607f573e572c03ca3b10c082471640064736f6c634300080d0033" # ENSIP-10 - Extended Resolver for Wildcard Resolution # compiled from `web3/_utils/contract_sources/ExtendedResolver.sol` extended_resolver_abi = '[{"inputs": [{"internalType": "contract ENS","name": "_ens","type": "address"}],"stateMutability": "nonpayable","type": "constructor"},{"anonymous": false,"inputs": [{"indexed": false,"internalType": "bytes32","name": "node","type": "bytes32"},{"indexed": false,"internalType": "address","name": "owner","type": "address"},{"indexed": false,"internalType": "address","name": "target","type": "address"},{"indexed": false,"internalType": "bool","name": "isAuthorised","type": "bool"}],"name": "AuthorisationChanged","type": "event"},{"inputs": [{"internalType": "bytes32", "name": "", "type": "bytes32"},{"internalType": "address", "name": "", "type": "address"},{"internalType": "address", "name": "", "type": "address"}],"name": "authorisations","outputs": [{"internalType": "bool", "name": "", "type": "bool"}],"stateMutability": "view","type": "function"},{"inputs": [{"internalType": "bytes", "name": "dnsName", "type": "bytes"},{"internalType": "bytes", "name": "data", "type": "bytes"}],"name": "resolve","outputs": [{"internalType": "bytes", "name": "", "type": "bytes"}],"stateMutability": "view","type": "function"},{"inputs": [{"internalType": "bytes32", "name": "node", "type": "bytes32"},{"internalType": "address", "name": "target", "type": "address"},{"internalType": "bool", "name": "isAuthorised", "type": "bool"}],"name": "setAuthorisation","outputs": [],"stateMutability": "nonpayable","type": "function"},{"inputs": [{"internalType": "bytes4","name": "interfaceID","type": "bytes4"}],"name": "supportsInterface","outputs": [{"internalType": "bool", "name": "", "type": "bool"}],"stateMutability": "pure","type": "function"}]' -extended_resolver_bytecode = '608060405234801561001057600080fd5b50604051610dbb380380610dbb833981810160405281019061003291906100ed565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505061011a565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100a88261007d565b9050919050565b60006100ba8261009d565b9050919050565b6100ca816100af565b81146100d557600080fd5b50565b6000815190506100e7816100c1565b92915050565b60006020828403121561010357610102610078565b5b6000610111848285016100d8565b91505092915050565b610c92806101296000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301ffc9a7146100515780633e9ce794146100815780639061b9231461009d578063f86bc879146100cd575b600080fd5b61006b60048036038101906100669190610554565b6100fd565b604051610078919061059c565b60405180910390f35b61009b60048036038101906100969190610677565b61015e565b005b6100b760048036038101906100b2919061072f565b610245565b6040516100c49190610849565b60405180910390f35b6100e760048036038101906100e2919061086b565b610465565b6040516100f4919061059c565b60405180910390f35b6000639061b92360e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806101575750610156826104a1565b5b9050919050565b806001600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fe1c5610a6e0cbe10764ecd182adcef1ec338dc4e199c99c32ce98f38e12791df8333848460405161023894939291906108dc565b60405180910390a1505050565b60606040518060400160405280601781526020017f11657874656e6465642d7265736f6c7665720365746800000000000000000000815250805190602001208585604051610294929190610960565b60405180910390201480156102ad575060248383905010155b1561035e577ff0a378cc2afe91730d0105e67d6bb037cc5b8b6bfec5b5962d9b637ff6497e5560001b83836004906024926102ea93929190610983565b906102f591906109d6565b14610335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032c90610ab8565b60405180910390fd5b61beef6040516020016103489190610ad8565b604051602081830303815290604052905061045d565b60008585600081811061037457610373610af3565b5b9050013560f81c60f81b60f81c60ff1690506040518060400160405280601781526020017f11657874656e6465642d7265736f6c76657203657468000000000000000000008152508051906020012086868360016103d29190610b5b565b9080926103e193929190610983565b6040516103ef929190610bb1565b604051809103902014610437576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042e90610c3c565b60405180910390fd5b61dead60405160200161044a9190610ad8565b6040516020818303038152906040529150505b949350505050565b6001602052826000526040600020602052816000526040600020602052806000526040600020600092509250509054906101000a900460ff1681565b60006301ffc9a760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b610531816104fc565b811461053c57600080fd5b50565b60008135905061054e81610528565b92915050565b60006020828403121561056a576105696104f2565b5b60006105788482850161053f565b91505092915050565b60008115159050919050565b61059681610581565b82525050565b60006020820190506105b1600083018461058d565b92915050565b6000819050919050565b6105ca816105b7565b81146105d557600080fd5b50565b6000813590506105e7816105c1565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610618826105ed565b9050919050565b6106288161060d565b811461063357600080fd5b50565b6000813590506106458161061f565b92915050565b61065481610581565b811461065f57600080fd5b50565b6000813590506106718161064b565b92915050565b6000806000606084860312156106905761068f6104f2565b5b600061069e868287016105d8565b93505060206106af86828701610636565b92505060406106c086828701610662565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126106ef576106ee6106ca565b5b8235905067ffffffffffffffff81111561070c5761070b6106cf565b5b602083019150836001820283011115610728576107276106d4565b5b9250929050565b60008060008060408587031215610749576107486104f2565b5b600085013567ffffffffffffffff811115610767576107666104f7565b5b610773878288016106d9565b9450945050602085013567ffffffffffffffff811115610796576107956104f7565b5b6107a2878288016106d9565b925092505092959194509250565b600081519050919050565b600082825260208201905092915050565b60005b838110156107ea5780820151818401526020810190506107cf565b838111156107f9576000848401525b50505050565b6000601f19601f8301169050919050565b600061081b826107b0565b61082581856107bb565b93506108358185602086016107cc565b61083e816107ff565b840191505092915050565b600060208201905081810360008301526108638184610810565b905092915050565b600080600060608486031215610884576108836104f2565b5b6000610892868287016105d8565b93505060206108a386828701610636565b92505060406108b486828701610636565b9150509250925092565b6108c7816105b7565b82525050565b6108d68161060d565b82525050565b60006080820190506108f160008301876108be565b6108fe60208301866108cd565b61090b60408301856108cd565b610918606083018461058d565b95945050505050565b600081905092915050565b82818337600083830152505050565b60006109478385610921565b935061095483858461092c565b82840190509392505050565b600061096d82848661093b565b91508190509392505050565b600080fd5b600080fd5b6000808585111561099757610996610979565b5b838611156109a8576109a761097e565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b60006109e283836109be565b826109ed81356105b7565b92506020821015610a2d57610a287fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026109c9565b831692505b505092915050565b600082825260208201905092915050565b7f706172656e7420646f6d61696e206e6f742076616c696461746564206170707260008201527f6f7072696174656c790000000000000000000000000000000000000000000000602082015250565b6000610aa2602983610a35565b9150610aad82610a46565b604082019050919050565b60006020820190508181036000830152610ad181610a95565b9050919050565b6000602082019050610aed60008301846108cd565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610b6682610b22565b9150610b7183610b22565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610ba657610ba5610b2c565b5b828201905092915050565b6000610bbe82848661093b565b91508190509392505050565b7f737562646f6d61696e206e6f742076616c69646174656420617070726f70726960008201527f6174656c79000000000000000000000000000000000000000000000000000000602082015250565b6000610c26602583610a35565b9150610c3182610bca565b604082019050919050565b60006020820190508181036000830152610c5581610c19565b905091905056fea26469706673582212209fff87be19ed85e754d5e2791de6ed052e7e653185e1d47fa94515f851becd2f64736f6c634300080d0033' -extended_resolver_bytecode_runtime = '608060405234801561001057600080fd5b506004361061004c5760003560e01c806301ffc9a7146100515780633e9ce794146100815780639061b9231461009d578063f86bc879146100cd575b600080fd5b61006b60048036038101906100669190610554565b6100fd565b604051610078919061059c565b60405180910390f35b61009b60048036038101906100969190610677565b61015e565b005b6100b760048036038101906100b2919061072f565b610245565b6040516100c49190610849565b60405180910390f35b6100e760048036038101906100e2919061086b565b610465565b6040516100f4919061059c565b60405180910390f35b6000639061b92360e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806101575750610156826104a1565b5b9050919050565b806001600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fe1c5610a6e0cbe10764ecd182adcef1ec338dc4e199c99c32ce98f38e12791df8333848460405161023894939291906108dc565b60405180910390a1505050565b60606040518060400160405280601781526020017f11657874656e6465642d7265736f6c7665720365746800000000000000000000815250805190602001208585604051610294929190610960565b60405180910390201480156102ad575060248383905010155b1561035e577ff0a378cc2afe91730d0105e67d6bb037cc5b8b6bfec5b5962d9b637ff6497e5560001b83836004906024926102ea93929190610983565b906102f591906109d6565b14610335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032c90610ab8565b60405180910390fd5b61beef6040516020016103489190610ad8565b604051602081830303815290604052905061045d565b60008585600081811061037457610373610af3565b5b9050013560f81c60f81b60f81c60ff1690506040518060400160405280601781526020017f11657874656e6465642d7265736f6c76657203657468000000000000000000008152508051906020012086868360016103d29190610b5b565b9080926103e193929190610983565b6040516103ef929190610bb1565b604051809103902014610437576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042e90610c3c565b60405180910390fd5b61dead60405160200161044a9190610ad8565b6040516020818303038152906040529150505b949350505050565b6001602052826000526040600020602052816000526040600020602052806000526040600020600092509250509054906101000a900460ff1681565b60006301ffc9a760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b610531816104fc565b811461053c57600080fd5b50565b60008135905061054e81610528565b92915050565b60006020828403121561056a576105696104f2565b5b60006105788482850161053f565b91505092915050565b60008115159050919050565b61059681610581565b82525050565b60006020820190506105b1600083018461058d565b92915050565b6000819050919050565b6105ca816105b7565b81146105d557600080fd5b50565b6000813590506105e7816105c1565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610618826105ed565b9050919050565b6106288161060d565b811461063357600080fd5b50565b6000813590506106458161061f565b92915050565b61065481610581565b811461065f57600080fd5b50565b6000813590506106718161064b565b92915050565b6000806000606084860312156106905761068f6104f2565b5b600061069e868287016105d8565b93505060206106af86828701610636565b92505060406106c086828701610662565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126106ef576106ee6106ca565b5b8235905067ffffffffffffffff81111561070c5761070b6106cf565b5b602083019150836001820283011115610728576107276106d4565b5b9250929050565b60008060008060408587031215610749576107486104f2565b5b600085013567ffffffffffffffff811115610767576107666104f7565b5b610773878288016106d9565b9450945050602085013567ffffffffffffffff811115610796576107956104f7565b5b6107a2878288016106d9565b925092505092959194509250565b600081519050919050565b600082825260208201905092915050565b60005b838110156107ea5780820151818401526020810190506107cf565b838111156107f9576000848401525b50505050565b6000601f19601f8301169050919050565b600061081b826107b0565b61082581856107bb565b93506108358185602086016107cc565b61083e816107ff565b840191505092915050565b600060208201905081810360008301526108638184610810565b905092915050565b600080600060608486031215610884576108836104f2565b5b6000610892868287016105d8565b93505060206108a386828701610636565b92505060406108b486828701610636565b9150509250925092565b6108c7816105b7565b82525050565b6108d68161060d565b82525050565b60006080820190506108f160008301876108be565b6108fe60208301866108cd565b61090b60408301856108cd565b610918606083018461058d565b95945050505050565b600081905092915050565b82818337600083830152505050565b60006109478385610921565b935061095483858461092c565b82840190509392505050565b600061096d82848661093b565b91508190509392505050565b600080fd5b600080fd5b6000808585111561099757610996610979565b5b838611156109a8576109a761097e565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b60006109e283836109be565b826109ed81356105b7565b92506020821015610a2d57610a287fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026109c9565b831692505b505092915050565b600082825260208201905092915050565b7f706172656e7420646f6d61696e206e6f742076616c696461746564206170707260008201527f6f7072696174656c790000000000000000000000000000000000000000000000602082015250565b6000610aa2602983610a35565b9150610aad82610a46565b604082019050919050565b60006020820190508181036000830152610ad181610a95565b9050919050565b6000602082019050610aed60008301846108cd565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610b6682610b22565b9150610b7183610b22565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610ba657610ba5610b2c565b5b828201905092915050565b6000610bbe82848661093b565b91508190509392505050565b7f737562646f6d61696e206e6f742076616c69646174656420617070726f70726960008201527f6174656c79000000000000000000000000000000000000000000000000000000602082015250565b6000610c26602583610a35565b9150610c3182610bca565b604082019050919050565b60006020820190508181036000830152610c5581610c19565b905091905056fea26469706673582212209fff87be19ed85e754d5e2791de6ed052e7e653185e1d47fa94515f851becd2f64736f6c634300080d0033' +extended_resolver_bytecode = "608060405234801561001057600080fd5b50604051610dbb380380610dbb833981810160405281019061003291906100ed565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505061011a565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006100a88261007d565b9050919050565b60006100ba8261009d565b9050919050565b6100ca816100af565b81146100d557600080fd5b50565b6000815190506100e7816100c1565b92915050565b60006020828403121561010357610102610078565b5b6000610111848285016100d8565b91505092915050565b610c92806101296000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806301ffc9a7146100515780633e9ce794146100815780639061b9231461009d578063f86bc879146100cd575b600080fd5b61006b60048036038101906100669190610554565b6100fd565b604051610078919061059c565b60405180910390f35b61009b60048036038101906100969190610677565b61015e565b005b6100b760048036038101906100b2919061072f565b610245565b6040516100c49190610849565b60405180910390f35b6100e760048036038101906100e2919061086b565b610465565b6040516100f4919061059c565b60405180910390f35b6000639061b92360e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806101575750610156826104a1565b5b9050919050565b806001600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fe1c5610a6e0cbe10764ecd182adcef1ec338dc4e199c99c32ce98f38e12791df8333848460405161023894939291906108dc565b60405180910390a1505050565b60606040518060400160405280601781526020017f11657874656e6465642d7265736f6c7665720365746800000000000000000000815250805190602001208585604051610294929190610960565b60405180910390201480156102ad575060248383905010155b1561035e577ff0a378cc2afe91730d0105e67d6bb037cc5b8b6bfec5b5962d9b637ff6497e5560001b83836004906024926102ea93929190610983565b906102f591906109d6565b14610335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032c90610ab8565b60405180910390fd5b61beef6040516020016103489190610ad8565b604051602081830303815290604052905061045d565b60008585600081811061037457610373610af3565b5b9050013560f81c60f81b60f81c60ff1690506040518060400160405280601781526020017f11657874656e6465642d7265736f6c76657203657468000000000000000000008152508051906020012086868360016103d29190610b5b565b9080926103e193929190610983565b6040516103ef929190610bb1565b604051809103902014610437576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042e90610c3c565b60405180910390fd5b61dead60405160200161044a9190610ad8565b6040516020818303038152906040529150505b949350505050565b6001602052826000526040600020602052816000526040600020602052806000526040600020600092509250509054906101000a900460ff1681565b60006301ffc9a760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b610531816104fc565b811461053c57600080fd5b50565b60008135905061054e81610528565b92915050565b60006020828403121561056a576105696104f2565b5b60006105788482850161053f565b91505092915050565b60008115159050919050565b61059681610581565b82525050565b60006020820190506105b1600083018461058d565b92915050565b6000819050919050565b6105ca816105b7565b81146105d557600080fd5b50565b6000813590506105e7816105c1565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610618826105ed565b9050919050565b6106288161060d565b811461063357600080fd5b50565b6000813590506106458161061f565b92915050565b61065481610581565b811461065f57600080fd5b50565b6000813590506106718161064b565b92915050565b6000806000606084860312156106905761068f6104f2565b5b600061069e868287016105d8565b93505060206106af86828701610636565b92505060406106c086828701610662565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126106ef576106ee6106ca565b5b8235905067ffffffffffffffff81111561070c5761070b6106cf565b5b602083019150836001820283011115610728576107276106d4565b5b9250929050565b60008060008060408587031215610749576107486104f2565b5b600085013567ffffffffffffffff811115610767576107666104f7565b5b610773878288016106d9565b9450945050602085013567ffffffffffffffff811115610796576107956104f7565b5b6107a2878288016106d9565b925092505092959194509250565b600081519050919050565b600082825260208201905092915050565b60005b838110156107ea5780820151818401526020810190506107cf565b838111156107f9576000848401525b50505050565b6000601f19601f8301169050919050565b600061081b826107b0565b61082581856107bb565b93506108358185602086016107cc565b61083e816107ff565b840191505092915050565b600060208201905081810360008301526108638184610810565b905092915050565b600080600060608486031215610884576108836104f2565b5b6000610892868287016105d8565b93505060206108a386828701610636565b92505060406108b486828701610636565b9150509250925092565b6108c7816105b7565b82525050565b6108d68161060d565b82525050565b60006080820190506108f160008301876108be565b6108fe60208301866108cd565b61090b60408301856108cd565b610918606083018461058d565b95945050505050565b600081905092915050565b82818337600083830152505050565b60006109478385610921565b935061095483858461092c565b82840190509392505050565b600061096d82848661093b565b91508190509392505050565b600080fd5b600080fd5b6000808585111561099757610996610979565b5b838611156109a8576109a761097e565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b60006109e283836109be565b826109ed81356105b7565b92506020821015610a2d57610a287fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026109c9565b831692505b505092915050565b600082825260208201905092915050565b7f706172656e7420646f6d61696e206e6f742076616c696461746564206170707260008201527f6f7072696174656c790000000000000000000000000000000000000000000000602082015250565b6000610aa2602983610a35565b9150610aad82610a46565b604082019050919050565b60006020820190508181036000830152610ad181610a95565b9050919050565b6000602082019050610aed60008301846108cd565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610b6682610b22565b9150610b7183610b22565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610ba657610ba5610b2c565b5b828201905092915050565b6000610bbe82848661093b565b91508190509392505050565b7f737562646f6d61696e206e6f742076616c69646174656420617070726f70726960008201527f6174656c79000000000000000000000000000000000000000000000000000000602082015250565b6000610c26602583610a35565b9150610c3182610bca565b604082019050919050565b60006020820190508181036000830152610c5581610c19565b905091905056fea26469706673582212209fff87be19ed85e754d5e2791de6ed052e7e653185e1d47fa94515f851becd2f64736f6c634300080d0033" +extended_resolver_bytecode_runtime = "608060405234801561001057600080fd5b506004361061004c5760003560e01c806301ffc9a7146100515780633e9ce794146100815780639061b9231461009d578063f86bc879146100cd575b600080fd5b61006b60048036038101906100669190610554565b6100fd565b604051610078919061059c565b60405180910390f35b61009b60048036038101906100969190610677565b61015e565b005b6100b760048036038101906100b2919061072f565b610245565b6040516100c49190610849565b60405180910390f35b6100e760048036038101906100e2919061086b565b610465565b6040516100f4919061059c565b60405180910390f35b6000639061b92360e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806101575750610156826104a1565b5b9050919050565b806001600085815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fe1c5610a6e0cbe10764ecd182adcef1ec338dc4e199c99c32ce98f38e12791df8333848460405161023894939291906108dc565b60405180910390a1505050565b60606040518060400160405280601781526020017f11657874656e6465642d7265736f6c7665720365746800000000000000000000815250805190602001208585604051610294929190610960565b60405180910390201480156102ad575060248383905010155b1561035e577ff0a378cc2afe91730d0105e67d6bb037cc5b8b6bfec5b5962d9b637ff6497e5560001b83836004906024926102ea93929190610983565b906102f591906109d6565b14610335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032c90610ab8565b60405180910390fd5b61beef6040516020016103489190610ad8565b604051602081830303815290604052905061045d565b60008585600081811061037457610373610af3565b5b9050013560f81c60f81b60f81c60ff1690506040518060400160405280601781526020017f11657874656e6465642d7265736f6c76657203657468000000000000000000008152508051906020012086868360016103d29190610b5b565b9080926103e193929190610983565b6040516103ef929190610bb1565b604051809103902014610437576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042e90610c3c565b60405180910390fd5b61dead60405160200161044a9190610ad8565b6040516020818303038152906040529150505b949350505050565b6001602052826000526040600020602052816000526040600020602052806000526040600020600092509250509054906101000a900460ff1681565b60006301ffc9a760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b610531816104fc565b811461053c57600080fd5b50565b60008135905061054e81610528565b92915050565b60006020828403121561056a576105696104f2565b5b60006105788482850161053f565b91505092915050565b60008115159050919050565b61059681610581565b82525050565b60006020820190506105b1600083018461058d565b92915050565b6000819050919050565b6105ca816105b7565b81146105d557600080fd5b50565b6000813590506105e7816105c1565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610618826105ed565b9050919050565b6106288161060d565b811461063357600080fd5b50565b6000813590506106458161061f565b92915050565b61065481610581565b811461065f57600080fd5b50565b6000813590506106718161064b565b92915050565b6000806000606084860312156106905761068f6104f2565b5b600061069e868287016105d8565b93505060206106af86828701610636565b92505060406106c086828701610662565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126106ef576106ee6106ca565b5b8235905067ffffffffffffffff81111561070c5761070b6106cf565b5b602083019150836001820283011115610728576107276106d4565b5b9250929050565b60008060008060408587031215610749576107486104f2565b5b600085013567ffffffffffffffff811115610767576107666104f7565b5b610773878288016106d9565b9450945050602085013567ffffffffffffffff811115610796576107956104f7565b5b6107a2878288016106d9565b925092505092959194509250565b600081519050919050565b600082825260208201905092915050565b60005b838110156107ea5780820151818401526020810190506107cf565b838111156107f9576000848401525b50505050565b6000601f19601f8301169050919050565b600061081b826107b0565b61082581856107bb565b93506108358185602086016107cc565b61083e816107ff565b840191505092915050565b600060208201905081810360008301526108638184610810565b905092915050565b600080600060608486031215610884576108836104f2565b5b6000610892868287016105d8565b93505060206108a386828701610636565b92505060406108b486828701610636565b9150509250925092565b6108c7816105b7565b82525050565b6108d68161060d565b82525050565b60006080820190506108f160008301876108be565b6108fe60208301866108cd565b61090b60408301856108cd565b610918606083018461058d565b95945050505050565b600081905092915050565b82818337600083830152505050565b60006109478385610921565b935061095483858461092c565b82840190509392505050565b600061096d82848661093b565b91508190509392505050565b600080fd5b600080fd5b6000808585111561099757610996610979565b5b838611156109a8576109a761097e565b5b6001850283019150848603905094509492505050565b600082905092915050565b600082821b905092915050565b60006109e283836109be565b826109ed81356105b7565b92506020821015610a2d57610a287fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008026109c9565b831692505b505092915050565b600082825260208201905092915050565b7f706172656e7420646f6d61696e206e6f742076616c696461746564206170707260008201527f6f7072696174656c790000000000000000000000000000000000000000000000602082015250565b6000610aa2602983610a35565b9150610aad82610a46565b604082019050919050565b60006020820190508181036000830152610ad181610a95565b9050919050565b6000602082019050610aed60008301846108cd565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610b6682610b22565b9150610b7183610b22565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610ba657610ba5610b2c565b5b828201905092915050565b6000610bbe82848661093b565b91508190509392505050565b7f737562646f6d61696e206e6f742076616c69646174656420617070726f70726960008201527f6174656c79000000000000000000000000000000000000000000000000000000602082015250565b6000610c26602583610a35565b9150610c3182610bca565b604082019050919050565b60006020820190508181036000830152610c5581610c19565b905091905056fea26469706673582212209fff87be19ed85e754d5e2791de6ed052e7e653185e1d47fa94515f851becd2f64736f6c634300080d0033" # Simple resolver with no support for interfaces like getText(), etc # compiled from `web3/_utils/contract_sources/SimpleResolver.sol` -simple_resolver_abi = json.loads('[{"inputs":[{"internalType":"bytes32","name":"nodeID","type":"bytes32"}],"name":"addr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]') -simple_resolver_bytecode = '608060405234801561001057600080fd5b5061028c806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806301ffc9a71461003b5780633b3b57de1461006b575b600080fd5b61005560048036038101906100509190610134565b61009b565b604051610062919061017c565b60405180910390f35b610085600480360381019061008091906101cd565b6100cd565b604051610092919061023b565b60405180910390f35b6000633b3b57de60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000309050919050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b610111816100dc565b811461011c57600080fd5b50565b60008135905061012e81610108565b92915050565b60006020828403121561014a576101496100d7565b5b60006101588482850161011f565b91505092915050565b60008115159050919050565b61017681610161565b82525050565b6000602082019050610191600083018461016d565b92915050565b6000819050919050565b6101aa81610197565b81146101b557600080fd5b50565b6000813590506101c7816101a1565b92915050565b6000602082840312156101e3576101e26100d7565b5b60006101f1848285016101b8565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610225826101fa565b9050919050565b6102358161021a565b82525050565b6000602082019050610250600083018461022c565b9291505056fea2646970667358221220e9d34e70193fa6e99d9be00bd7b1e4b63dc6fd9c84934a35350d8b2c4215974964736f6c634300080d0033' -simple_resolver_bytecode_runtime = '608060405234801561001057600080fd5b50600436106100365760003560e01c806301ffc9a71461003b5780633b3b57de1461006b575b600080fd5b61005560048036038101906100509190610134565b61009b565b604051610062919061017c565b60405180910390f35b610085600480360381019061008091906101cd565b6100cd565b604051610092919061023b565b60405180910390f35b6000633b3b57de60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000309050919050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b610111816100dc565b811461011c57600080fd5b50565b60008135905061012e81610108565b92915050565b60006020828403121561014a576101496100d7565b5b60006101588482850161011f565b91505092915050565b60008115159050919050565b61017681610161565b82525050565b6000602082019050610191600083018461016d565b92915050565b6000819050919050565b6101aa81610197565b81146101b557600080fd5b50565b6000813590506101c7816101a1565b92915050565b6000602082840312156101e3576101e26100d7565b5b60006101f1848285016101b8565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610225826101fa565b9050919050565b6102358161021a565b82525050565b6000602082019050610250600083018461022c565b9291505056fea2646970667358221220e9d34e70193fa6e99d9be00bd7b1e4b63dc6fd9c84934a35350d8b2c4215974964736f6c634300080d0033' +simple_resolver_abi = json.loads( + '[{"inputs":[{"internalType":"bytes32","name":"nodeID","type":"bytes32"}],"name":"addr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]' +) +simple_resolver_bytecode = "608060405234801561001057600080fd5b5061028c806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806301ffc9a71461003b5780633b3b57de1461006b575b600080fd5b61005560048036038101906100509190610134565b61009b565b604051610062919061017c565b60405180910390f35b610085600480360381019061008091906101cd565b6100cd565b604051610092919061023b565b60405180910390f35b6000633b3b57de60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000309050919050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b610111816100dc565b811461011c57600080fd5b50565b60008135905061012e81610108565b92915050565b60006020828403121561014a576101496100d7565b5b60006101588482850161011f565b91505092915050565b60008115159050919050565b61017681610161565b82525050565b6000602082019050610191600083018461016d565b92915050565b6000819050919050565b6101aa81610197565b81146101b557600080fd5b50565b6000813590506101c7816101a1565b92915050565b6000602082840312156101e3576101e26100d7565b5b60006101f1848285016101b8565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610225826101fa565b9050919050565b6102358161021a565b82525050565b6000602082019050610250600083018461022c565b9291505056fea2646970667358221220e9d34e70193fa6e99d9be00bd7b1e4b63dc6fd9c84934a35350d8b2c4215974964736f6c634300080d0033" +simple_resolver_bytecode_runtime = "608060405234801561001057600080fd5b50600436106100365760003560e01c806301ffc9a71461003b5780633b3b57de1461006b575b600080fd5b61005560048036038101906100509190610134565b61009b565b604051610062919061017c565b60405180910390f35b610085600480360381019061008091906101cd565b6100cd565b604051610092919061023b565b60405180910390f35b6000633b3b57de60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000309050919050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b610111816100dc565b811461011c57600080fd5b50565b60008135905061012e81610108565b92915050565b60006020828403121561014a576101496100d7565b5b60006101588482850161011f565b91505092915050565b60008115159050919050565b61017681610161565b82525050565b6000602082019050610191600083018461016d565b92915050565b6000819050919050565b6101aa81610197565b81146101b557600080fd5b50565b6000813590506101c7816101a1565b92915050565b6000602082840312156101e3576101e26100d7565b5b60006101f1848285016101b8565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610225826101fa565b9050919050565b6102358161021a565b82525050565b6000602082019050610250600083018461022c565b9291505056fea2646970667358221220e9d34e70193fa6e99d9be00bd7b1e4b63dc6fd9c84934a35350d8b2c4215974964736f6c634300080d0033" # Offchain Resolver for offchain resolution w/ CCIP Read as described in EIP-3668 # compiled from `web3/_utils/contract_sources/OffchainResolver.sol` -offchain_resolver_abi = json.loads('[{"inputs":[{"internalType":"string[]","name":"_urls","type":"string[]"},{"internalType":"address[]","name":"_signers","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"string[]","name":"urls","type":"string[]"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"bytes4","name":"callbackFunction","type":"bytes4"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"name":"OffchainLookup","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"signers","type":"address[]"}],"name":"NewSigners","type":"event"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint64","name":"expires","type":"uint64"},{"internalType":"bytes","name":"request","type":"bytes"},{"internalType":"bytes","name":"result","type":"bytes"}],"name":"makeSignatureHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes","name":"name","type":"bytes"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"resolve","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"response","type":"bytes"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"name":"resolveWithProof","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"signers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"url","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]') +offchain_resolver_abi = json.loads( + '[{"inputs":[{"internalType":"string[]","name":"_urls","type":"string[]"},{"internalType":"address[]","name":"_signers","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"string[]","name":"urls","type":"string[]"},{"internalType":"bytes","name":"callData","type":"bytes"},{"internalType":"bytes4","name":"callbackFunction","type":"bytes4"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"name":"OffchainLookup","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"signers","type":"address[]"}],"name":"NewSigners","type":"event"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"uint64","name":"expires","type":"uint64"},{"internalType":"bytes","name":"request","type":"bytes"},{"internalType":"bytes","name":"result","type":"bytes"}],"name":"makeSignatureHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bytes","name":"name","type":"bytes"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"resolve","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"response","type":"bytes"},{"internalType":"bytes","name":"extraData","type":"bytes"}],"name":"resolveWithProof","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"signers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"url","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]' +) offchain_resolver_bytecode = "60806040523480156200001157600080fd5b506040516200219038038062002190833981810160405281019062000037919062000511565b81600090805190602001906200004f929190620001a4565b5060005b81518110156200010b5760018060008484815181106200009c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080620001029062000813565b91505062000053565b5060018060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507fab0b9cc3a46b568cb08d985497cde8ab7e18892d01f58db7dc7f0d2af859b2d78160405162000194919062000619565b60405180910390a1505062000919565b828054828255906000526020600020908101928215620001f8579160200282015b82811115620001f7578251829080519060200190620001e69291906200020b565b5091602001919060010190620001c5565b5b5090506200020791906200029c565b5090565b8280546200021990620007a7565b90600052602060002090601f0160209004810192826200023d576000855562000289565b82601f106200025857805160ff191683800117855562000289565b8280016001018555821562000289579182015b82811115620002885782518255916020019190600101906200026b565b5b509050620002989190620002c4565b5090565b5b80821115620002c05760008181620002b69190620002e3565b506001016200029d565b5090565b5b80821115620002df576000816000905550600101620002c5565b5090565b508054620002f190620007a7565b6000825580601f1062000305575062000326565b601f016020900490600052602060002090810190620003259190620002c4565b5b50565b6000620003406200033a8462000666565b6200063d565b905080838252602082019050828560208602820111156200036057600080fd5b60005b8581101562000394578162000379888262000473565b84526020840193506020830192505060018101905062000363565b5050509392505050565b6000620003b5620003af8462000695565b6200063d565b90508083825260208201905082856020860282011115620003d557600080fd5b60005b858110156200042457815167ffffffffffffffff811115620003f957600080fd5b808601620004088982620004e4565b85526020850194506020840193505050600181019050620003d8565b5050509392505050565b6000620004456200043f84620006c4565b6200063d565b9050828152602081018484840111156200045e57600080fd5b6200046b84828562000771565b509392505050565b6000815190506200048481620008ff565b92915050565b600082601f8301126200049c57600080fd5b8151620004ae84826020860162000329565b91505092915050565b600082601f830112620004c957600080fd5b8151620004db8482602086016200039e565b91505092915050565b600082601f830112620004f657600080fd5b8151620005088482602086016200042e565b91505092915050565b600080604083850312156200052557600080fd5b600083015167ffffffffffffffff8111156200054057600080fd5b6200054e85828601620004b7565b925050602083015167ffffffffffffffff8111156200056c57600080fd5b6200057a858286016200048a565b9150509250929050565b60006200059283836200059e565b60208301905092915050565b620005a98162000733565b82525050565b6000620005bc826200070a565b620005c8818562000722565b9350620005d583620006fa565b8060005b838110156200060c578151620005f0888262000584565b9750620005fd8362000715565b925050600181019050620005d9565b5085935050505092915050565b60006020820190508181036000830152620006358184620005af565b905092915050565b6000620006496200065c565b9050620006578282620007dd565b919050565b6000604051905090565b600067ffffffffffffffff821115620006845762000683620008bf565b5b602082029050602081019050919050565b600067ffffffffffffffff821115620006b357620006b2620008bf565b5b602082029050602081019050919050565b600067ffffffffffffffff821115620006e257620006e1620008bf565b5b620006ed82620008ee565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b6000620007408262000747565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200079157808201518184015260208101905062000774565b83811115620007a1576000848401525b50505050565b60006002820490506001821680620007c057607f821691505b60208210811415620007d757620007d662000890565b5b50919050565b620007e882620008ee565b810181811067ffffffffffffffff821117156200080a5762000809620008bf565b5b80604052505050565b6000620008208262000767565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562000856576200085562000861565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b6200090a8162000733565b81146200091657600080fd5b50565b61186780620009296000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806301ffc9a7146100675780631dcfea0914610097578063736c0d5b146100c7578063796676be146100f75780639061b92314610127578063f4d4d2f814610157575b600080fd5b610081600480360381019061007c9190610cb9565b610187565b60405161008e91906111c9565b60405180910390f35b6100b160048036038101906100ac9190610c26565b610201565b6040516100be91906111e4565b60405180910390f35b6100e160048036038101906100dc9190610bfd565b610219565b6040516100ee91906111c9565b60405180910390f35b610111600480360381019061010c9190610dd6565b610239565b60405161011e91906112a1565b60405180910390f35b610141600480360381019061013c9190610ce2565b6102e5565b60405161014e919061127f565b60405180910390f35b610171600480360381019061016c9190610ce2565b6103b4565b60405161017e919061127f565b60405180910390f35b60007f9061b923000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806101fa57506101f982610462565b5b9050919050565b600061020f858585856104cc565b9050949350505050565b60016020528060005260406000206000915054906101000a900460ff1681565b6000818154811061024957600080fd5b90600052602060002001600091509050805461026490611541565b80601f016020809104026020016040519081016040528092919081815260200182805461029090611541565b80156102dd5780601f106102b2576101008083540402835291602001916102dd565b820191906000526020600020905b8154815290600101906020018083116102c057829003601f168201915b505050505081565b60606000639061b92360e01b868686866040516024016103089493929190611244565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090503060008263f4d4d2f860e01b846040517f556f18300000000000000000000000000000000000000000000000000000000081526004016103ab959493929190611161565b60405180910390fd5b60606000806103c585858989610513565b91509150600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044c90611323565b60405180910390fd5b8092505050949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008484848051906020012084805190602001206040516020016104f39493929190611108565b604051602081830303815290604052805190602001209050949350505050565b600060606000806000868681019061052b9190610d57565b925092509250600061058c61058630858d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050886104cc565b836105a1565b90508084955095505050505094509492505050565b60008060006105b085856105c8565b915091506105bd8161064b565b819250505092915050565b60008060418351141561060a5760008060006020860151925060408601519150606086015160001a90506105fe8782858561099c565b94509450505050610644565b60408351141561063b576000806020850151915060408501519050610630868383610aa9565b935093505050610644565b60006002915091505b9250929050565b60006004811115610685577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160048111156106be577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156106c957610999565b60016004811115610703577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81600481111561073c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b141561077d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610774906112c3565b60405180910390fd5b600260048111156107b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160048111156107f0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415610831576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610828906112e3565b60405180910390fd5b6003600481111561086b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160048111156108a4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156108e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108dc90611303565b60405180910390fd5b60048081111561091e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115610957577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415610998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098f90611343565b60405180910390fd5b5b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156109d7576000600391509150610aa0565b601b8560ff16141580156109ef5750601c8560ff1614155b15610a01576000600491509150610aa0565b600060018787878760405160008152602001604052604051610a2694939291906111ff565b6020604051602081039080840390855afa158015610a48573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a9757600060019250925050610aa0565b80600092509250505b94509492505050565b6000806000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85169150601b8560ff1c019050610ae98782888561099c565b935093505050935093915050565b6000610b0a610b0584611388565b611363565b905082815260208101848484011115610b2257600080fd5b610b2d8482856114ff565b509392505050565b600081359050610b44816117d5565b92915050565b600081359050610b59816117ec565b92915050565b60008083601f840112610b7157600080fd5b8235905067ffffffffffffffff811115610b8a57600080fd5b602083019150836001820283011115610ba257600080fd5b9250929050565b600082601f830112610bba57600080fd5b8135610bca848260208601610af7565b91505092915050565b600081359050610be281611803565b92915050565b600081359050610bf78161181a565b92915050565b600060208284031215610c0f57600080fd5b6000610c1d84828501610b35565b91505092915050565b60008060008060808587031215610c3c57600080fd5b6000610c4a87828801610b35565b9450506020610c5b87828801610be8565b935050604085013567ffffffffffffffff811115610c7857600080fd5b610c8487828801610ba9565b925050606085013567ffffffffffffffff811115610ca157600080fd5b610cad87828801610ba9565b91505092959194509250565b600060208284031215610ccb57600080fd5b6000610cd984828501610b4a565b91505092915050565b60008060008060408587031215610cf857600080fd5b600085013567ffffffffffffffff811115610d1257600080fd5b610d1e87828801610b5f565b9450945050602085013567ffffffffffffffff811115610d3d57600080fd5b610d4987828801610b5f565b925092505092959194509250565b600080600060608486031215610d6c57600080fd5b600084013567ffffffffffffffff811115610d8657600080fd5b610d9286828701610ba9565b9350506020610da386828701610be8565b925050604084013567ffffffffffffffff811115610dc057600080fd5b610dcc86828701610ba9565b9150509250925092565b600060208284031215610de857600080fd5b6000610df684828501610bd3565b91505092915050565b6000610e0b8383610f90565b905092915050565b610e1c81611460565b82525050565b610e33610e2e82611460565b6115a4565b82525050565b6000610e44826113e3565b610e4e8185611411565b935083602082028501610e60856113b9565b8060005b85811015610e9b57848403895281610e7c8582610dff565b9450610e8783611404565b925060208a01995050600181019050610e64565b50829750879550505050505092915050565b610eb681611472565b82525050565b610ec58161147e565b82525050565b610edc610ed78261147e565b6115b6565b82525050565b610eeb81611488565b82525050565b6000610efd8385611422565b9350610f0a8385846114ff565b610f1383611642565b840190509392505050565b6000610f29826113ee565b610f338185611422565b9350610f4381856020860161150e565b610f4c81611642565b840191505092915050565b6000610f62826113f9565b610f6c8185611444565b9350610f7c81856020860161150e565b610f8581611642565b840191505092915050565b60008154610f9d81611541565b610fa78186611433565b94506001821660008114610fc25760018114610fd457611007565b60ff1983168652602086019350611007565b610fdd856113ce565b60005b83811015610fff57815481890152600182019150602081019050610fe0565b808801955050505b50505092915050565b600061101d601883611444565b91506110288261166d565b602082019050919050565b6000611040601f83611444565b915061104b82611696565b602082019050919050565b6000611063602283611444565b915061106e826116bf565b604082019050919050565b6000611086602483611444565b91506110918261170e565b604082019050919050565b60006110a9600283611455565b91506110b48261175d565b600282019050919050565b60006110cc602283611444565b91506110d782611786565b604082019050919050565b6110f36110ee826114de565b6115d2565b82525050565b611102816114f2565b82525050565b60006111138261109c565b915061111f8287610e22565b60148201915061112f82866110e2565b60088201915061113f8285610ecb565b60208201915061114f8284610ecb565b60208201915081905095945050505050565b600060a0820190506111766000830188610e13565b81810360208301526111888187610e39565b9050818103604083015261119c8186610f1e565b90506111ab6060830185610ee2565b81810360808301526111bd8184610f1e565b90509695505050505050565b60006020820190506111de6000830184610ead565b92915050565b60006020820190506111f96000830184610ebc565b92915050565b60006080820190506112146000830187610ebc565b61122160208301866110f9565b61122e6040830185610ebc565b61123b6060830184610ebc565b95945050505050565b6000604082019050818103600083015261125f818688610ef1565b90508181036020830152611274818486610ef1565b905095945050505050565b600060208201905081810360008301526112998184610f1e565b905092915050565b600060208201905081810360008301526112bb8184610f57565b905092915050565b600060208201905081810360008301526112dc81611010565b9050919050565b600060208201905081810360008301526112fc81611033565b9050919050565b6000602082019050818103600083015261131c81611056565b9050919050565b6000602082019050818103600083015261133c81611079565b9050919050565b6000602082019050818103600083015261135c816110bf565b9050919050565b600061136d61137e565b90506113798282611573565b919050565b6000604051905090565b600067ffffffffffffffff8211156113a3576113a2611613565b5b6113ac82611642565b9050602081019050919050565b60008190508160005260206000209050919050565b60008190508160005260206000209050919050565b600081549050919050565b600081519050919050565b600081519050919050565b6000600182019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061146b826114b4565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561152c578082015181840152602081019050611511565b8381111561153b576000848401525b50505050565b6000600282049050600182168061155957607f821691505b6020821081141561156d5761156c6115e4565b5b50919050565b61157c82611642565b810181811067ffffffffffffffff8211171561159b5761159a611613565b5b80604052505050565b60006115af826115c0565b9050919050565b6000819050919050565b60006115cb82611660565b9050919050565b60006115dd82611653565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160c01b9050919050565b60008160601b9050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f5369676e617475726556657269666965723a20496e76616c6964207369676e6160008201527f7475726500000000000000000000000000000000000000000000000000000000602082015250565b7f1900000000000000000000000000000000000000000000000000000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6117de81611460565b81146117e957600080fd5b50565b6117f581611488565b811461180057600080fd5b50565b61180c816114d4565b811461181757600080fd5b50565b611823816114de565b811461182e57600080fd5b5056fea2646970667358221220e5f1e91619d2bc52c11e1bd99d0dabfdbeca91f7eac25e3122f6117fc623900b64736f6c63430008040033" offchain_resolver_bytecode_runtime = "608060405234801561001057600080fd5b50600436106100625760003560e01c806301ffc9a7146100675780631dcfea0914610097578063736c0d5b146100c7578063796676be146100f75780639061b92314610127578063f4d4d2f814610157575b600080fd5b610081600480360381019061007c9190610cb9565b610187565b60405161008e91906111c9565b60405180910390f35b6100b160048036038101906100ac9190610c26565b610201565b6040516100be91906111e4565b60405180910390f35b6100e160048036038101906100dc9190610bfd565b610219565b6040516100ee91906111c9565b60405180910390f35b610111600480360381019061010c9190610dd6565b610239565b60405161011e91906112a1565b60405180910390f35b610141600480360381019061013c9190610ce2565b6102e5565b60405161014e919061127f565b60405180910390f35b610171600480360381019061016c9190610ce2565b6103b4565b60405161017e919061127f565b60405180910390f35b60007f9061b923000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806101fa57506101f982610462565b5b9050919050565b600061020f858585856104cc565b9050949350505050565b60016020528060005260406000206000915054906101000a900460ff1681565b6000818154811061024957600080fd5b90600052602060002001600091509050805461026490611541565b80601f016020809104026020016040519081016040528092919081815260200182805461029090611541565b80156102dd5780601f106102b2576101008083540402835291602001916102dd565b820191906000526020600020905b8154815290600101906020018083116102c057829003601f168201915b505050505081565b60606000639061b92360e01b868686866040516024016103089493929190611244565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090503060008263f4d4d2f860e01b846040517f556f18300000000000000000000000000000000000000000000000000000000081526004016103ab959493929190611161565b60405180910390fd5b60606000806103c585858989610513565b91509150600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161044c90611323565b60405180910390fd5b8092505050949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008484848051906020012084805190602001206040516020016104f39493929190611108565b604051602081830303815290604052805190602001209050949350505050565b600060606000806000868681019061052b9190610d57565b925092509250600061058c61058630858d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050886104cc565b836105a1565b90508084955095505050505094509492505050565b60008060006105b085856105c8565b915091506105bd8161064b565b819250505092915050565b60008060418351141561060a5760008060006020860151925060408601519150606086015160001a90506105fe8782858561099c565b94509450505050610644565b60408351141561063b576000806020850151915060408501519050610630868383610aa9565b935093505050610644565b60006002915091505b9250929050565b60006004811115610685577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160048111156106be577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156106c957610999565b60016004811115610703577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81600481111561073c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b141561077d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610774906112c3565b60405180910390fd5b600260048111156107b7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160048111156107f0577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415610831576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610828906112e3565b60405180910390fd5b6003600481111561086b577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160048111156108a4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156108e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108dc90611303565b60405180910390fd5b60048081111561091e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115610957577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415610998576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098f90611343565b60405180910390fd5b5b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156109d7576000600391509150610aa0565b601b8560ff16141580156109ef5750601c8560ff1614155b15610a01576000600491509150610aa0565b600060018787878760405160008152602001604052604051610a2694939291906111ff565b6020604051602081039080840390855afa158015610a48573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a9757600060019250925050610aa0565b80600092509250505b94509492505050565b6000806000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85169150601b8560ff1c019050610ae98782888561099c565b935093505050935093915050565b6000610b0a610b0584611388565b611363565b905082815260208101848484011115610b2257600080fd5b610b2d8482856114ff565b509392505050565b600081359050610b44816117d5565b92915050565b600081359050610b59816117ec565b92915050565b60008083601f840112610b7157600080fd5b8235905067ffffffffffffffff811115610b8a57600080fd5b602083019150836001820283011115610ba257600080fd5b9250929050565b600082601f830112610bba57600080fd5b8135610bca848260208601610af7565b91505092915050565b600081359050610be281611803565b92915050565b600081359050610bf78161181a565b92915050565b600060208284031215610c0f57600080fd5b6000610c1d84828501610b35565b91505092915050565b60008060008060808587031215610c3c57600080fd5b6000610c4a87828801610b35565b9450506020610c5b87828801610be8565b935050604085013567ffffffffffffffff811115610c7857600080fd5b610c8487828801610ba9565b925050606085013567ffffffffffffffff811115610ca157600080fd5b610cad87828801610ba9565b91505092959194509250565b600060208284031215610ccb57600080fd5b6000610cd984828501610b4a565b91505092915050565b60008060008060408587031215610cf857600080fd5b600085013567ffffffffffffffff811115610d1257600080fd5b610d1e87828801610b5f565b9450945050602085013567ffffffffffffffff811115610d3d57600080fd5b610d4987828801610b5f565b925092505092959194509250565b600080600060608486031215610d6c57600080fd5b600084013567ffffffffffffffff811115610d8657600080fd5b610d9286828701610ba9565b9350506020610da386828701610be8565b925050604084013567ffffffffffffffff811115610dc057600080fd5b610dcc86828701610ba9565b9150509250925092565b600060208284031215610de857600080fd5b6000610df684828501610bd3565b91505092915050565b6000610e0b8383610f90565b905092915050565b610e1c81611460565b82525050565b610e33610e2e82611460565b6115a4565b82525050565b6000610e44826113e3565b610e4e8185611411565b935083602082028501610e60856113b9565b8060005b85811015610e9b57848403895281610e7c8582610dff565b9450610e8783611404565b925060208a01995050600181019050610e64565b50829750879550505050505092915050565b610eb681611472565b82525050565b610ec58161147e565b82525050565b610edc610ed78261147e565b6115b6565b82525050565b610eeb81611488565b82525050565b6000610efd8385611422565b9350610f0a8385846114ff565b610f1383611642565b840190509392505050565b6000610f29826113ee565b610f338185611422565b9350610f4381856020860161150e565b610f4c81611642565b840191505092915050565b6000610f62826113f9565b610f6c8185611444565b9350610f7c81856020860161150e565b610f8581611642565b840191505092915050565b60008154610f9d81611541565b610fa78186611433565b94506001821660008114610fc25760018114610fd457611007565b60ff1983168652602086019350611007565b610fdd856113ce565b60005b83811015610fff57815481890152600182019150602081019050610fe0565b808801955050505b50505092915050565b600061101d601883611444565b91506110288261166d565b602082019050919050565b6000611040601f83611444565b915061104b82611696565b602082019050919050565b6000611063602283611444565b915061106e826116bf565b604082019050919050565b6000611086602483611444565b91506110918261170e565b604082019050919050565b60006110a9600283611455565b91506110b48261175d565b600282019050919050565b60006110cc602283611444565b91506110d782611786565b604082019050919050565b6110f36110ee826114de565b6115d2565b82525050565b611102816114f2565b82525050565b60006111138261109c565b915061111f8287610e22565b60148201915061112f82866110e2565b60088201915061113f8285610ecb565b60208201915061114f8284610ecb565b60208201915081905095945050505050565b600060a0820190506111766000830188610e13565b81810360208301526111888187610e39565b9050818103604083015261119c8186610f1e565b90506111ab6060830185610ee2565b81810360808301526111bd8184610f1e565b90509695505050505050565b60006020820190506111de6000830184610ead565b92915050565b60006020820190506111f96000830184610ebc565b92915050565b60006080820190506112146000830187610ebc565b61122160208301866110f9565b61122e6040830185610ebc565b61123b6060830184610ebc565b95945050505050565b6000604082019050818103600083015261125f818688610ef1565b90508181036020830152611274818486610ef1565b905095945050505050565b600060208201905081810360008301526112998184610f1e565b905092915050565b600060208201905081810360008301526112bb8184610f57565b905092915050565b600060208201905081810360008301526112dc81611010565b9050919050565b600060208201905081810360008301526112fc81611033565b9050919050565b6000602082019050818103600083015261131c81611056565b9050919050565b6000602082019050818103600083015261133c81611079565b9050919050565b6000602082019050818103600083015261135c816110bf565b9050919050565b600061136d61137e565b90506113798282611573565b919050565b6000604051905090565b600067ffffffffffffffff8211156113a3576113a2611613565b5b6113ac82611642565b9050602081019050919050565b60008190508160005260206000209050919050565b60008190508160005260206000209050919050565b600081549050919050565b600081519050919050565b600081519050919050565b6000600182019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061146b826114b4565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561152c578082015181840152602081019050611511565b8381111561153b576000848401525b50505050565b6000600282049050600182168061155957607f821691505b6020821081141561156d5761156c6115e4565b5b50919050565b61157c82611642565b810181811067ffffffffffffffff8211171561159b5761159a611613565b5b80604052505050565b60006115af826115c0565b9050919050565b6000819050919050565b60006115cb82611660565b9050919050565b60006115dd82611653565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160c01b9050919050565b60008160601b9050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f5369676e617475726556657269666965723a20496e76616c6964207369676e6160008201527f7475726500000000000000000000000000000000000000000000000000000000602082015250565b7f1900000000000000000000000000000000000000000000000000000000000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6117de81611460565b81146117e957600080fd5b50565b6117f581611488565b811461180057600080fd5b50565b61180c816114d4565b811461181757600080fd5b50565b611823816114de565b811461182e57600080fd5b5056fea2646970667358221220e5f1e91619d2bc52c11e1bd99d0dabfdbeca91f7eac25e3122f6117fc623900b64736f6c63430008040033" diff --git a/ens/exceptions.py b/ens/exceptions.py index 3e254cffde..aebe4f461a 100644 --- a/ens/exceptions.py +++ b/ens/exceptions.py @@ -7,6 +7,7 @@ class AddressMismatch(ValueError): point to the address. This exception is raised if the name does not currently point to the address. """ + pass @@ -18,6 +19,7 @@ class InvalidName(idna.IDNAError): For example: names may not start with a dot, or include a space. """ + pass @@ -27,6 +29,7 @@ class UnauthorizedError(Exception): you are trying to modify. Make sure to set ``from`` in the ``transact`` keyword argument to the owner of the name. """ + pass @@ -37,6 +40,7 @@ class UnownedName(Exception): If working on a subdomain, make sure the subdomain gets created first with :meth:`~ens.main.ENS.setup_address`. """ + pass @@ -44,6 +48,7 @@ class ResolverNotFound(Exception): """ Raised if no resolver was found for the name you are trying to resolve. """ + pass @@ -51,6 +56,7 @@ class UnsupportedFunction(Exception): """ Raised if a resolver does not support a particular method. """ + pass @@ -58,6 +64,7 @@ class BidTooLow(ValueError): """ Raised if you bid less than the minimum amount """ + pass @@ -65,6 +72,7 @@ class InvalidBidHash(ValueError): """ Raised if you supply incorrect data to generate the bid hash. """ + pass @@ -72,6 +80,7 @@ class InvalidLabel(ValueError): """ Raised if you supply an invalid label """ + pass @@ -82,6 +91,7 @@ class OversizeTransaction(ValueError): For example: when you try to start too many auctions at once. """ + pass @@ -90,4 +100,5 @@ class UnderfundedBid(ValueError): Raised if you send less wei with your bid than you declared as your intent to bid. """ + pass diff --git a/ens/main.py b/ens/main.py index 146448df3a..3c9ae0b359 100644 --- a/ens/main.py +++ b/ens/main.py @@ -116,9 +116,9 @@ def reverse_domain(address: ChecksumAddress) -> str: def __init__( self, - provider: 'BaseProvider' = cast('BaseProvider', default), + provider: "BaseProvider" = cast("BaseProvider", default), addr: ChecksumAddress = None, - middlewares: Optional[Sequence[Tuple['Middleware', str]]] = None, + middlewares: Optional[Sequence[Tuple["Middleware", str]]] = None, ) -> None: """ :param provider: a single provider used to connect to Ethereum @@ -131,10 +131,12 @@ def __init__( ens_addr = addr if addr else ENS_MAINNET_ADDR self.ens = self.w3.eth.contract(abi=abis.ENS, address=ens_addr) self._resolver_contract = self.w3.eth.contract(abi=abis.RESOLVER) - self._reverse_resolver_contract = self.w3.eth.contract(abi=abis.REVERSE_RESOLVER) + self._reverse_resolver_contract = self.w3.eth.contract( + abi=abis.REVERSE_RESOLVER + ) @classmethod - def fromWeb3(cls, w3: 'Web3', addr: ChecksumAddress = None) -> 'ENS': + def fromWeb3(cls, w3: "Web3", addr: ChecksumAddress = None) -> "ENS": """ Generate an ENS instance with web3 @@ -153,7 +155,7 @@ def address(self, name: str) -> Optional[ChecksumAddress]: :param str name: an ENS name to look up :raises InvalidName: if `name` has invalid syntax """ - return cast(ChecksumAddress, self._resolve(name, 'addr')) + return cast(ChecksumAddress, self._resolve(name, "addr")) def name(self, address: ChecksumAddress) -> Optional[str]: """ @@ -164,7 +166,7 @@ def name(self, address: ChecksumAddress) -> Optional[str]: :type address: hex-string """ reversed_domain = address_to_reverse_domain(address) - name = self._resolve(reversed_domain, fn_name='name') + name = self._resolve(reversed_domain, fn_name="name") # To be absolutely certain of the name, via reverse resolution, the address must match in # the forward resolution @@ -187,16 +189,18 @@ def parent(name: str) -> str: :rtype: str """ if not name: - return '' + return "" - labels = name.split('.') - return '' if len(labels) == 1 else '.'.join(labels[1:]) + labels = name.split(".") + return "" if len(labels) == 1 else ".".join(labels[1:]) def setup_address( self, name: str, - address: Union[Address, ChecksumAddress, HexAddress] = cast(ChecksumAddress, default), - transact: Optional["TxParams"] = None + address: Union[Address, ChecksumAddress, HexAddress] = cast( + ChecksumAddress, default + ), + transact: Optional["TxParams"] = None, ) -> Optional[HexBytes]: """ Set up the name to point to the supplied address. @@ -232,15 +236,19 @@ def setup_address( return None if address is None: address = EMPTY_ADDR_HEX - transact['from'] = owner - resolver: Union['Contract', 'AsyncContract'] = self._set_resolver(name, transact=transact) - return resolver.functions.setAddr(raw_name_to_hash(name), address).transact(transact) + transact["from"] = owner + resolver: Union["Contract", "AsyncContract"] = self._set_resolver( + name, transact=transact + ) + return resolver.functions.setAddr(raw_name_to_hash(name), address).transact( + transact + ) def setup_name( self, name: str, address: Optional[ChecksumAddress] = None, - transact: Optional["TxParams"] = None + transact: Optional["TxParams"] = None, ) -> HexBytes: """ Set up the address for reverse lookup, aka "caller ID". @@ -260,7 +268,7 @@ def setup_name( transact = {} transact = deepcopy(transact) if not name: - self._assert_control(address, 'the reverse record') + self._assert_control(address, "the reverse record") return self._setup_reverse(None, address, transact=transact) else: resolved = self.address(name) @@ -286,7 +294,7 @@ def setup_name( self.setup_address(name, address, transact=transact) return self._setup_reverse(name, address, transact=transact) - def resolver(self, name: str) -> Optional[Union['Contract', 'AsyncContract']]: + def resolver(self, name: str) -> Optional[Union["Contract", "AsyncContract"]]: """ Get the resolver for an ENS name. @@ -295,8 +303,9 @@ def resolver(self, name: str) -> Optional[Union['Contract', 'AsyncContract']]: normal_name = normalize_name(name) return self._get_resolver(normal_name)[0] - def reverser(self, - target_address: ChecksumAddress) -> Optional[Union['Contract', 'AsyncContract']]: + def reverser( + self, target_address: ChecksumAddress + ) -> Optional[Union["Contract", "AsyncContract"]]: reversed_domain = address_to_reverse_domain(target_address) return self.resolver(reversed_domain) @@ -343,11 +352,7 @@ def get_text(self, name: str, key: str) -> str: ) def set_text( - self, - name: str, - key: str, - value: str, - transact: "TxParams" = None + self, name: str, key: str, value: str, transact: "TxParams" = None ) -> HexBytes: """ Set the value of a text record of an ENS name. @@ -369,7 +374,7 @@ def set_text( node = raw_name_to_hash(name) normal_name = normalize_name(name) - transaction_dict = merge({'from': owner}, transact) + transaction_dict = merge({"from": owner}, transact) r = self.resolver(normal_name) if r: @@ -389,7 +394,7 @@ def setup_owner( self, name: str, new_owner: ChecksumAddress = cast(ChecksumAddress, default), - transact: Optional["TxParams"] = None + transact: Optional["TxParams"] = None, ) -> Optional[ChecksumAddress]: """ Set the owner of the supplied name to `new_owner`. @@ -431,10 +436,14 @@ def setup_owner( return current_owner else: self._assert_control(super_owner, name, owned) - self._claim_ownership(new_owner, unowned, owned, super_owner, transact=transact) + self._claim_ownership( + new_owner, unowned, owned, super_owner, transact=transact + ) return new_owner - def _resolve(self, name: str, fn_name: str = 'addr') -> Optional[Union[ChecksumAddress, str]]: + def _resolve( + self, name: str, fn_name: str = "addr" + ) -> Optional[Union[ChecksumAddress, str]]: normal_name = normalize_name(name) resolver, current_name = self._get_resolver(normal_name, fn_name) @@ -463,15 +472,18 @@ def _resolve(self, name: str, fn_name: str = 'addr') -> Optional[Union[ChecksumA return to_checksum_address(result) if is_address(result) else result return None - def _assert_control(self, account: ChecksumAddress, name: str, - parent_owned: Optional[str] = None) -> None: + def _assert_control( + self, account: ChecksumAddress, name: str, parent_owned: Optional[str] = None + ) -> None: if not address_in(account, self.w3.eth.accounts): raise UnauthorizedError( f"in order to modify {name!r}, you must control account" f" {account!r}, which owns {parent_owned or name!r}" ) - def _first_owner(self, name: str) -> Tuple[Optional[ChecksumAddress], Sequence[str], str]: + def _first_owner( + self, name: str + ) -> Tuple[Optional[ChecksumAddress], Sequence[str], str]: """ Takes a name, and returns the owner of the deepest subdomain that has an owner @@ -479,9 +491,9 @@ def _first_owner(self, name: str) -> Tuple[Optional[ChecksumAddress], Sequence[s """ owner = None unowned = [] - pieces = normalize_name(name).split('.') + pieces = normalize_name(name).split(".") while pieces and is_none_or_zero_address(owner): - name = '.'.join(pieces) + name = ".".join(pieces) owner = self.owner(name) if is_none_or_zero_address(owner): unowned.append(pieces.pop(0)) @@ -493,17 +505,15 @@ def _claim_ownership( unowned: Sequence[str], owned: str, old_owner: Optional[ChecksumAddress] = None, - transact: Optional["TxParams"] = None + transact: Optional["TxParams"] = None, ) -> None: if not transact: transact = {} transact = deepcopy(transact) - transact['from'] = old_owner or owner + transact["from"] = old_owner or owner for label in reversed(unowned): self.ens.functions.setSubnodeOwner( - raw_name_to_hash(owned), - label_to_hash(label), - owner + raw_name_to_hash(owned), label_to_hash(label), owner ).transact(transact) owned = f"{label}.{owned}" @@ -511,26 +521,21 @@ def _set_resolver( self, name: str, resolver_addr: Optional[ChecksumAddress] = None, - transact: Optional["TxParams"] = None - ) -> Union['Contract', 'AsyncContract']: + transact: Optional["TxParams"] = None, + ) -> Union["Contract", "AsyncContract"]: if not transact: transact = {} transact = deepcopy(transact) if is_none_or_zero_address(resolver_addr): - resolver_addr = self.address('resolver.eth') + resolver_addr = self.address("resolver.eth") namehash = raw_name_to_hash(name) if self.ens.caller.resolver(namehash) != resolver_addr: - self.ens.functions.setResolver( - namehash, - resolver_addr - ).transact(transact) + self.ens.functions.setResolver(namehash, resolver_addr).transact(transact) return self._resolver_contract(address=resolver_addr) def _get_resolver( - self, - normal_name: str, - fn_name: str = 'addr' - ) -> Tuple[Optional[Union['Contract', 'AsyncContract']], str]: + self, normal_name: str, fn_name: str = "addr" + ) -> Tuple[Optional[Union["Contract", "AsyncContract"]], str]: current_name = normal_name # look for a resolver, starting at the full name and taking the parent each time that no @@ -550,8 +555,10 @@ def _get_resolver( current_name = self.parent(current_name) def _decode_ensip10_resolve_data( - self, contract_call_result: bytes, - extended_resolver: Union['Contract', 'AsyncContract'], fn_name: str, + self, + contract_call_result: bytes, + extended_resolver: Union["Contract", "AsyncContract"], + fn_name: str, ) -> Any: func = extended_resolver.get_function_by_name(fn_name) output_types = get_abi_output_types(func.abi) @@ -563,28 +570,30 @@ def _decode_ensip10_resolve_data( def _setup_reverse( self, name: str, address: ChecksumAddress, transact: Optional["TxParams"] = None ) -> HexBytes: - name = normalize_name(name) if name else '' + name = normalize_name(name) if name else "" if not transact: transact = {} transact = deepcopy(transact) - transact['from'] = address + transact["from"] = address return self._reverse_registrar().functions.setName(name).transact(transact) - def _type_aware_resolver(self, - address: ChecksumAddress, - func: str) -> Union['Contract', 'AsyncContract']: + def _type_aware_resolver( + self, address: ChecksumAddress, func: str + ) -> Union["Contract", "AsyncContract"]: return ( - self._reverse_resolver_contract(address=address) if func == 'name' else - self._resolver_contract(address=address) + self._reverse_resolver_contract(address=address) + if func == "name" + else self._resolver_contract(address=address) ) - def _reverse_registrar(self) -> Union['Contract', 'AsyncContract']: + def _reverse_registrar(self) -> Union["Contract", "AsyncContract"]: addr = self.ens.caller.owner(normal_name_to_hash(REVERSE_REGISTRAR_DOMAIN)) return self.w3.eth.contract(address=addr, abi=abis.REVERSE_REGISTRAR) -def _resolver_supports_interface(resolver: Union['Contract', 'AsyncContract'], - interface_id: HexStr) -> bool: - if not any('supportsInterface' in repr(func) for func in resolver.all_functions()): +def _resolver_supports_interface( + resolver: Union["Contract", "AsyncContract"], interface_id: HexStr +) -> bool: + if not any("supportsInterface" in repr(func) for func in resolver.all_functions()): return False return resolver.caller.supportsInterface(interface_id) diff --git a/ens/utils.py b/ens/utils.py index e56ef75d7c..2aae261c32 100644 --- a/ens/utils.py +++ b/ens/utils.py @@ -63,15 +63,16 @@ ) -def Web3() -> Type['_Web3']: +def Web3() -> Type["_Web3"]: from web3 import Web3 as Web3Main + return Web3Main def init_web3( - provider: 'BaseProvider' = cast('BaseProvider', default), - middlewares: Optional[Sequence[Tuple['Middleware', str]]] = None, -) -> '_Web3': + provider: "BaseProvider" = cast("BaseProvider", default), + middlewares: Optional[Sequence[Tuple["Middleware", str]]] = None, +) -> "_Web3": from web3 import Web3 as Web3Main if provider is default: @@ -82,16 +83,15 @@ def init_web3( return customize_web3(w3) -def customize_web3(w3: '_Web3') -> '_Web3': +def customize_web3(w3: "_Web3") -> "_Web3": from web3.middleware import make_stalecheck_middleware - if w3.middleware_onion.get('name_to_address'): - w3.middleware_onion.remove('name_to_address') + if w3.middleware_onion.get("name_to_address"): + w3.middleware_onion.remove("name_to_address") - if not w3.middleware_onion.get('stalecheck'): + if not w3.middleware_onion.get("stalecheck"): w3.middleware_onion.add( - make_stalecheck_middleware(ACCEPTABLE_STALE_HOURS * 3600), - name='stalecheck' + make_stalecheck_middleware(ACCEPTABLE_STALE_HOURS * 3600), name="stalecheck" ) return w3 @@ -110,7 +110,7 @@ def normalize_name(name: str) -> str: if not name: return name elif isinstance(name, (bytes, bytearray)): - name = name.decode('utf-8') + name = name.decode("utf-8") try: return idna.uts46_remap(name, std3_rules=True, transitional=False) @@ -129,11 +129,11 @@ def ens_encode_name(name: str) -> bytes: - Return a single 0-octet, b'\x00', if empty name. """ if is_empty_name(name): - return b'\x00' + return b"\x00" normalized_name = normalize_name(name) - labels = normalized_name.split('.') + labels = normalized_name.split(".") labels_as_bytes = [to_bytes(text=label) for label in labels] # raises if len(label) > 255: @@ -145,7 +145,7 @@ def ens_encode_name(name: str) -> bytes: dns_prepped_labels = [to_bytes(len(label)) + label for label in labels_as_bytes] # return the joined prepped labels in order and append the zero byte at the end: - return b''.join(dns_prepped_labels) + b'\x00' + return b"".join(dns_prepped_labels) + b"\x00" def is_valid_name(name: str) -> bool: @@ -171,13 +171,13 @@ def to_utc_datetime(timestamp: float) -> Optional[datetime]: def sha3_text(val: Union[str, bytes]) -> HexBytes: if isinstance(val, str): - val = val.encode('utf-8') + val = val.encode("utf-8") return Web3().keccak(val) def label_to_hash(label: str) -> HexBytes: label = normalize_name(label) - if '.' in label: + if "." in label: raise ValueError(f"Cannot generate hash for label {label!r} with a '.'") return Web3().keccak(text=label) @@ -214,13 +214,15 @@ def raw_name_to_hash(name: str) -> HexBytes: return normal_name_to_hash(normalized_name) -def address_in(address: ChecksumAddress, addresses: Collection[ChecksumAddress]) -> bool: +def address_in( + address: ChecksumAddress, addresses: Collection[ChecksumAddress] +) -> bool: return any(is_same_address(address, item) for item in addresses) def address_to_reverse_domain(address: ChecksumAddress) -> str: lower_unprefixed_address = remove_0x_prefix(HexStr(to_normalized_address(address))) - return lower_unprefixed_address + '.' + REVERSE_REGISTRAR_DOMAIN + return lower_unprefixed_address + "." + REVERSE_REGISTRAR_DOMAIN def estimate_auction_start_gas(labels: Collection[str]) -> int: @@ -232,10 +234,10 @@ def assert_signer_in_modifier_kwargs(modifier_kwargs: Any) -> ChecksumAddress: assert len(modifier_kwargs) == 1, ERR_MSG _modifier_type, modifier_dict = dict(modifier_kwargs).popitem() - if 'from' not in modifier_dict: + if "from" not in modifier_dict: raise TypeError(ERR_MSG) - return modifier_dict['from'] + return modifier_dict["from"] def is_none_or_zero_address(addr: Union[Address, ChecksumAddress, HexAddress]) -> bool: @@ -243,11 +245,11 @@ def is_none_or_zero_address(addr: Union[Address, ChecksumAddress, HexAddress]) - def is_empty_name(name: str) -> bool: - return name in {None, '.', ''} + return name in {None, ".", ""} def is_valid_ens_name(ens_name: str) -> bool: - split_domain = ens_name.split('.') + split_domain = ens_name.split(".") if len(split_domain) == 1: return False for name in split_domain: @@ -257,8 +259,9 @@ def is_valid_ens_name(ens_name: str) -> bool: # borrowed from similar method at `web3._utils.abi` due to circular dependency -def get_abi_output_types(abi: 'ABIFunction') -> List[str]: +def get_abi_output_types(abi: "ABIFunction") -> List[str]: return ( - [] if abi['type'] == 'fallback' - else [collapse_if_tuple(cast(Dict[str, Any], arg)) for arg in abi['outputs']] + [] + if abi["type"] == "fallback" + else [collapse_if_tuple(cast(Dict[str, Any], arg)) for arg in abi["outputs"]] ) diff --git a/ethpm/_utils/backend.py b/ethpm/_utils/backend.py index ae9fdbdd4f..ec9f44d8a2 100644 --- a/ethpm/_utils/backend.py +++ b/ethpm/_utils/backend.py @@ -43,7 +43,7 @@ @to_tuple def get_translatable_backends_for_uri( - uri: URI + uri: URI, ) -> Generator[Type[BaseURIBackend], None, None]: # type ignored because of conflict with instantiating BaseURIBackend for backend in ALL_URI_BACKENDS: @@ -56,7 +56,7 @@ def get_translatable_backends_for_uri( @to_tuple def get_resolvable_backends_for_uri( - uri: URI + uri: URI, ) -> Generator[Type[BaseURIBackend], None, None]: # special case the default IPFS backend to the first slot. default_ipfs = get_ipfs_backend_class() diff --git a/ethpm/_utils/cache.py b/ethpm/_utils/cache.py index 2f322b89df..699908b9de 100644 --- a/ethpm/_utils/cache.py +++ b/ethpm/_utils/cache.py @@ -16,7 +16,7 @@ class cached_property: def __init__(self, func: Callable[..., Any], name: str = None) -> None: self.wrapped_func = func self.name = name - self.__doc__ = getattr(func, '__doc__') + self.__doc__ = getattr(func, "__doc__") def __get__(self, instance: Any, cls: Any = None) -> Any: """ diff --git a/ethpm/_utils/chains.py b/ethpm/_utils/chains.py index 3928a6b529..e4529627a1 100644 --- a/ethpm/_utils/chains.py +++ b/ethpm/_utils/chains.py @@ -57,7 +57,11 @@ def parse_BIP122_uri(blockchain_uri: URI) -> Tuple[HexStr, str, HexStr]: if match is None: raise ValueError(f"Invalid URI format: '{blockchain_uri}'") chain_id, resource_type, resource_hash = match.groups() - return (add_0x_prefix(HexStr(chain_id)), resource_type, add_0x_prefix(HexStr(resource_hash))) + return ( + add_0x_prefix(HexStr(chain_id)), + resource_type, + add_0x_prefix(HexStr(resource_hash)), + ) def is_BIP122_block_uri(value: URI) -> bool: diff --git a/ethpm/backends/registry.py b/ethpm/backends/registry.py index fe9e8828d8..5a316adcc8 100644 --- a/ethpm/backends/registry.py +++ b/ethpm/backends/registry.py @@ -34,8 +34,7 @@ # TODO: Update registry ABI once ERC is finalized. REGISTRY_ABI = fetch_standard_registry_abi() RegistryURI = namedtuple( - "RegistryURI", - ["address", "chain_id", "name", "version", "namespaced_asset", "ens"] + "RegistryURI", ["address", "chain_id", "name", "version", "namespaced_asset", "ens"] ) @@ -48,6 +47,7 @@ class RegistryURIBackend(BaseURIBackend): def __init__(self) -> None: from web3.auto.infura import w3 + self.w3 = w3 def can_translate_uri(self, uri: str) -> bool: @@ -61,11 +61,9 @@ def fetch_uri_contents(self, uri: str) -> URI: Return content-addressed URI stored at registry URI. """ address, chain_id, pkg_name, pkg_version, _, _ = parse_registry_uri(uri) - if chain_id != '1': + if chain_id != "1": # todo: support all testnets - raise CannotHandleURI( - "Currently only mainnet registry uris are supported." - ) + raise CannotHandleURI("Currently only mainnet registry uris are supported.") self.w3.enable_unstable_package_management_api() self.w3.pm.set_registry(address) _, _, manifest_uri = self.w3.pm.get_release_data(pkg_name, pkg_version) @@ -90,6 +88,7 @@ def parse_registry_uri(uri: str) -> RegistryURI: Validate and return (authority, chain_id, pkg_name, version) from a valid registry URI. """ from web3.auto.infura import w3 + validate_registry_uri(uri) parsed_uri = parse.urlparse(uri) if ":" in parsed_uri.netloc: @@ -104,14 +103,14 @@ def parse_registry_uri(uri: str) -> RegistryURI: address = ns.address(address_or_ens) ens = address_or_ens else: - raise CannotHandleURI( - f"Invalid address or ENS domain found in uri: {uri}." - ) + raise CannotHandleURI(f"Invalid address or ENS domain found in uri: {uri}.") pkg_name, pkg_version, namespaced_asset = _process_pkg_path(parsed_uri.path) return RegistryURI(address, chain_id, pkg_name, pkg_version, namespaced_asset, ens) -def _process_pkg_path(raw_pkg_path: str) -> Tuple[Optional[str], Optional[str], Optional[str]]: +def _process_pkg_path( + raw_pkg_path: str, +) -> Tuple[Optional[str], Optional[str], Optional[str]]: pkg_path = raw_pkg_path.strip("/") if not pkg_path: return None, None, None diff --git a/ethpm/contract.py b/ethpm/contract.py index e56d6670c9..977fef068d 100644 --- a/ethpm/contract.py +++ b/ethpm/contract.py @@ -59,9 +59,7 @@ def __init__(self, address: bytes, **kwargs: Any) -> None: super().__init__(address=address, **kwargs) # type: ignore @classmethod - def factory( - cls, w3: "Web3", class_name: str = None, **kwargs: Any - ) -> Contract: + def factory(cls, w3: "Web3", class_name: str = None, **kwargs: Any) -> Contract: dep_link_refs = kwargs.get("unlinked_references") bytecode = kwargs.get("bytecode") needs_bytecode_linking = False @@ -97,9 +95,7 @@ def link_bytecode(cls, attr_dict: Dict[str, str]) -> Type["LinkableContract"]: runtime = apply_all_link_refs( cls.bytecode_runtime, cls.linked_references, attr_dict ) - linked_class = cls.factory( - cls.w3, bytecode_runtime=runtime, bytecode=bytecode - ) + linked_class = cls.factory(cls.w3, bytecode_runtime=runtime, bytecode=bytecode) if linked_class.needs_bytecode_linking: raise BytecodeLinkingError( "Expected class to be fully linked, but class still needs bytecode linking." @@ -176,6 +172,8 @@ def apply_link_ref(offset: int, length: int, value: bytes, bytecode: bytes) -> b address = value if is_canonical_address(value) else to_canonical_address(value) new_bytes = ( # Ignore linting error b/c conflict b/w black & flake8 - bytecode[:offset] + address + bytecode[offset + length:] # noqa: E201, E203 + bytecode[:offset] + + address + + bytecode[offset + length :] # noqa: E201, E203 ) return new_bytes diff --git a/ethpm/package.py b/ethpm/package.py index f7c8346ff9..37a16cf9b5 100644 --- a/ethpm/package.py +++ b/ethpm/package.py @@ -195,8 +195,8 @@ def contract_types(self) -> List[str]: """ All contract types included in this package. """ - if 'contractTypes' in self.manifest: - return sorted(self.manifest['contractTypes'].keys()) + if "contractTypes" in self.manifest: + return sorted(self.manifest["contractTypes"].keys()) else: raise ValueError("No contract types found in manifest; {self.__repr__()}.") @@ -306,9 +306,7 @@ def get_contract_instance(self, name: ContractName, address: Address) -> Contrac contract_kwargs = generate_contract_factory_kwargs( self.manifest["contractTypes"][name] ) - contract_instance = self.w3.eth.contract( - address=address, **contract_kwargs - ) + contract_instance = self.w3.eth.contract(address=address, **contract_kwargs) # TODO: type ignore may be able to be removed after more of AsyncContract is finished return contract_instance # type: ignore @@ -372,9 +370,7 @@ def deployments(self) -> Union["Deployments", Dict[None, None]]: linked_deployments = get_linked_deployments(deployments) if linked_deployments: for deployment_data in linked_deployments.values(): - on_chain_bytecode = self.w3.eth.get_code( - deployment_data["address"] - ) + on_chain_bytecode = self.w3.eth.get_code(deployment_data["address"]) unresolved_linked_refs = normalize_linked_references( deployment_data["runtimeBytecode"]["linkDependencies"] ) @@ -392,15 +388,15 @@ def _get_all_contract_instances( self, deployments: Dict[str, DeploymentData] ) -> Iterable[Tuple[str, Contract]]: for deployment_name, deployment_data in deployments.items(): - if deployment_data['contractType'] not in self.contract_types: + if deployment_data["contractType"] not in self.contract_types: raise EthPMValidationError( f"Contract type: {deployment_data['contractType']} for alias: " f"{deployment_name} not found. Available contract types include: " f"{self.contract_types}." ) contract_instance = self.get_contract_instance( - ContractName(deployment_data['contractType']), - deployment_data['address'], + ContractName(deployment_data["contractType"]), + deployment_data["address"], ) yield deployment_name, contract_instance diff --git a/ethpm/tools/__init__.py b/ethpm/tools/__init__.py index c92e448589..4ed335746a 100644 --- a/ethpm/tools/__init__.py +++ b/ethpm/tools/__init__.py @@ -1 +1,4 @@ -from .get_manifest import get_ethpm_local_manifest, get_ethpm_spec_manifest # noqa: F401 +from .get_manifest import ( # noqa: F401 + get_ethpm_local_manifest, + get_ethpm_spec_manifest, +) diff --git a/ethpm/tools/builder.py b/ethpm/tools/builder.py index 6f38968402..d94d5953c9 100644 --- a/ethpm/tools/builder.py +++ b/ethpm/tools/builder.py @@ -408,7 +408,7 @@ def _contract_type( contract_type_data = all_type_data if "compiler" in contract_type_data: - compiler_info = contract_type_data.pop('compiler') + compiler_info = contract_type_data.pop("compiler") contract_type_ref = alias if alias else name manifest_with_compilers = add_compilers_to_manifest( compiler_info, contract_type_ref, manifest @@ -422,7 +422,9 @@ def _contract_type( ["contractTypes", alias], assoc(contract_type_data, "contractType", name), ) - return assoc_in(manifest_with_compilers, ["contractTypes", name], contract_type_data) + return assoc_in( + manifest_with_compilers, ["contractTypes", name], contract_type_data + ) def add_compilers_to_manifest( @@ -432,7 +434,7 @@ def add_compilers_to_manifest( Adds a compiler information object to a manifest's top-level `compilers`. """ if "compilers" not in manifest: - compiler_info['contractTypes'] = [contract_type] + compiler_info["contractTypes"] = [contract_type] return assoc_in(manifest, ["compilers"], [compiler_info]) updated_compiler_info = update_compilers_object( @@ -443,7 +445,9 @@ def add_compilers_to_manifest( @to_list def update_compilers_object( - new_compiler: Dict[str, Any], contract_type: str, previous_compilers: List[Dict[str, Any]] + new_compiler: Dict[str, Any], + contract_type: str, + previous_compilers: List[Dict[str, Any]], ) -> Iterable[Dict[str, Any]]: """ Updates a manifest's top-level `compilers` with a new compiler information object. @@ -528,9 +532,9 @@ def normalize_contract_type( contract_type_data["evm"]["deployedBytecode"] ) if "devdoc" in contract_type_data: - yield "devdoc", contract_type_data['devdoc'] + yield "devdoc", contract_type_data["devdoc"] if "userdoc" in contract_type_data: - yield "userdoc", contract_type_data['userdoc'] + yield "userdoc", contract_type_data["userdoc"] # make sure metadata isn't an empty string in solc output if "metadata" in contract_type_data and contract_type_data["metadata"]: yield "compiler", normalize_compiler_object( diff --git a/ethpm/tools/get_manifest.py b/ethpm/tools/get_manifest.py index 4633f486d1..38a50ba6e7 100644 --- a/ethpm/tools/get_manifest.py +++ b/ethpm/tools/get_manifest.py @@ -12,7 +12,7 @@ def get_ethpm_spec_manifest(use_case: str, filename: str) -> Dict[str, Any]: ethpm_spec_dir = get_ethpm_spec_dir() - return json.loads((ethpm_spec_dir / 'examples' / use_case / filename).read_text()) + return json.loads((ethpm_spec_dir / "examples" / use_case / filename).read_text()) def get_ethpm_local_manifest(use_case: str, filename: str) -> Dict[str, Any]: diff --git a/ethpm/uri.py b/ethpm/uri.py index 45de062618..753c31f9e1 100644 --- a/ethpm/uri.py +++ b/ethpm/uri.py @@ -109,7 +109,9 @@ def create_latest_block_uri(w3: "Web3", from_blocks_ago: int = 3) -> URI: """ chain_id = to_hex(get_genesis_block_hash(w3)) latest_block_tx_receipt = w3.eth.get_block("latest") - target_block_number = BlockNumber(latest_block_tx_receipt["number"] - from_blocks_ago) + target_block_number = BlockNumber( + latest_block_tx_receipt["number"] - from_blocks_ago + ) if target_block_number < 0: raise Exception( f"Only {latest_block_tx_receipt['number']} blocks avaible on provided w3, " diff --git a/ethpm/validation/manifest.py b/ethpm/validation/manifest.py index eb94f86523..4dfa0d4fbc 100644 --- a/ethpm/validation/manifest.py +++ b/ethpm/validation/manifest.py @@ -112,9 +112,7 @@ def validate_manifest_deployments(manifest: Dict[str, Any]) -> None: all_contract_types = manifest["contractTypes"].keys() all_deployments = manifest["deployments"].values() all_deployment_names = extract_contract_types_from_deployments(all_deployments) - missing_contract_types = all_deployment_names.difference( - all_contract_types - ) + missing_contract_types = all_deployment_names.difference(all_contract_types) if missing_contract_types: raise EthPMValidationError( f"Manifest missing references to contracts: {missing_contract_types}." diff --git a/ethpm/validation/uri.py b/ethpm/validation/uri.py index 4c739e9dbf..6d9a4df988 100644 --- a/ethpm/validation/uri.py +++ b/ethpm/validation/uri.py @@ -72,7 +72,9 @@ def validate_registry_uri(uri: str) -> None: if pkg_name: validate_package_name(pkg_name) if not pkg_name and pkg_version: - raise EthPMValidationError("Registry URIs cannot provide a version without a package name.") + raise EthPMValidationError( + "Registry URIs cannot provide a version without a package name." + ) if pkg_version: validate_escaped_string(pkg_version) @@ -88,9 +90,9 @@ def validate_registry_uri_authority(auth: str) -> None: f"{auth} is not a valid registry URI authority. " "Please try again with a valid registry URI." ) - address, chain_id = auth.split(':') + address, chain_id = auth.split(":") else: - address, chain_id = auth, '1' + address, chain_id = auth, "1" if is_ens_domain(address) is False and not is_checksum_address(address): raise EthPMValidationError( diff --git a/newsfragments/2509.misc.rst b/newsfragments/2509.misc.rst new file mode 100644 index 0000000000..81d14f13ab --- /dev/null +++ b/newsfragments/2509.misc.rst @@ -0,0 +1 @@ +Add black linting to ENS module diff --git a/pyproject.toml b/pyproject.toml index 2f5e3368a6..ca235487ff 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,3 +35,10 @@ showcontent=true directory = "misc" name="Misc" showcontent=false + +[tool.isort] +profile = "black" + +[flake8] +max-line-length=88 +extend-ignore="E203" diff --git a/setup.py b/setup.py index 73e5b2f9dd..093c087a47 100644 --- a/setup.py +++ b/setup.py @@ -10,6 +10,7 @@ "py-geth>=3.8.0,<4", ], 'linter': [ + "black>=22.1.0,<23.0", "flake8==3.8.3", "isort>=4.2.15,<4.3.5", "mypy==0.910", diff --git a/tox.ini b/tox.ini index e4d2e40465..b541c2b171 100644 --- a/tox.ini +++ b/tox.ini @@ -62,8 +62,11 @@ basepython = [testenv:lint] basepython=python extras=linter +whitelist_externals= + /bin/black commands= flake8 {toxinidir}/web3 {toxinidir}/ens {toxinidir}/ethpm {toxinidir}/tests --exclude {toxinidir}/ethpm/ethpm-spec + black {toxinidir}/ethpm {toxinidir}/ethpm --exclude {toxinidir}/ethpm/ethpm-spec --check isort --recursive --check-only --diff {toxinidir}/web3/ {toxinidir}/ens/ {toxinidir}/ethpm/ {toxinidir}/tests/ mypy -p web3 -p ethpm -p ens --config-file {toxinidir}/mypy.ini