diff --git a/.github/workflows/artifacts.yaml b/.github/workflows/artifacts.yaml index 7c00604..7e1c0f2 100644 --- a/.github/workflows/artifacts.yaml +++ b/.github/workflows/artifacts.yaml @@ -3,6 +3,10 @@ on: push: tags: - "*" + + branches: + - "main" + pull_request: jobs: diff --git a/artifacts/MockERC1271Attester.json b/artifacts/MockERC1271Attester.json new file mode 100644 index 0000000..8b595af --- /dev/null +++ b/artifacts/MockERC1271Attester.json @@ -0,0 +1,91 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [{ "name": "ret", "type": "bool", "internalType": "bool" }], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "isValidSignature", + "inputs": [ + { "name": "hash", "type": "bytes32", "internalType": "bytes32" }, + { "name": "signature", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [{ "name": "", "type": "bytes4", "internalType": "bytes4" }], + "stateMutability": "view" + } + ], + "bytecode": { + "object": "0x60a03461006257601f6101b538819003918201601f19168301916001600160401b0383118484101761006657808492602094604052833981010312610062575180151581036100625760805260405161013a908161007b82396080518160d10152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080600436101561000e575f80fd5b5f3560e01c631626ba7e14610021575f80fd5b346100b75760403660031901126100b75760243567ffffffffffffffff8082116100b757366023830112156100b7578160040135908082116100bb57601f8201601f19908116603f01168401908111848210176100bb5760405280835236602482840101116100b7575f92816024602094018483013701015260206100a46100cf565b6040516001600160e01b03199091168152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b7f00000000000000000000000000000000000000000000000000000000000000001561010057630b135d3f60e11b90565b5f9056fea2646970667358221220e546ad1a129b59fab18fda3173d544dac25aa344866952f4c46e2c28d8b7503e64736f6c63430008180033", + "sourceMap": "0:321:93:-:0;;;;;;;;;;;;;-1:-1:-1;;0:321:93;;;;-1:-1:-1;;;;;0:321:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;98:15;;0:321;;;;;;;;98:15;0:321;;;;;;;-1:-1:-1;0:321:93;;;;;;-1:-1:-1;0:321:93;;;;;-1:-1:-1;0:321:93", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x6080600436101561000e575f80fd5b5f3560e01c631626ba7e14610021575f80fd5b346100b75760403660031901126100b75760243567ffffffffffffffff8082116100b757366023830112156100b7578160040135908082116100bb57601f8201601f19908116603f01168401908111848210176100bb5760405280835236602482840101116100b7575f92816024602094018483013701015260206100a46100cf565b6040516001600160e01b03199091168152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b7f00000000000000000000000000000000000000000000000000000000000000001561010057630b135d3f60e11b90565b5f9056fea2646970667358221220e546ad1a129b59fab18fda3173d544dac25aa344866952f4c46e2c28d8b7503e64736f6c63430008180033", + "sourceMap": "0:321:93:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;0:321:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;0:321:93;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;;0:321:93;;;;;;;;;;;;;;;;;;;;;;126:193;233:9;;;;-1:-1:-1;;;0:321:93;244:37::o;229:83::-;303:9;296:16;:::o", + "linkReferences": {}, + "immutableReferences": { "63814": [{ "start": 209, "length": 32 }] } + }, + "methodIdentifiers": { "isValidSignature(bytes32,bytes)": "1626ba7e" }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"ret\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hash\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/mocks/MockERC1271Attester.sol\":\"MockERC1271Attester\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/=node_modules/@openzeppelin/\",\":account-abstraction-v0.6/=node_modules/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":forge-std/=node_modules/forge-std/src/\",\":solady/=node_modules/solady/src/\",\":solmate/=node_modules/solmate/src/\"],\"viaIR\":true},\"sources\":{\"test/mocks/MockERC1271Attester.sol\":{\"keccak256\":\"0x0bdfe82696ac220027ededa7f030148787f9fea7b71f9cf1cff67962f1ffef61\",\"urls\":[\"bzz-raw://d555bc8d5cd81d6cdf9bc5150fc66d1e0c9ed70b73759b4b089ea459dcff6553\",\"dweb:/ipfs/QmbLC9ST74f5nBSkvvrmcWHQJikY72yJn5ezKErwMtHCVT\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.24+commit.e11b9ed9" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [{ "internalType": "bool", "name": "ret", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "hash", "type": "bytes32" }, + { "internalType": "bytes", "name": "signature", "type": "bytes" } + ], + "stateMutability": "view", + "type": "function", + "name": "isValidSignature", + "outputs": [ + { "internalType": "bytes4", "name": "", "type": "bytes4" } + ] + } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "settings": { + "remappings": [ + "@openzeppelin/=node_modules/@openzeppelin/", + "account-abstraction-v0.6/=node_modules/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "forge-std/=node_modules/forge-std/src/", + "solady/=node_modules/solady/src/", + "solmate/=node_modules/solmate/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { + "test/mocks/MockERC1271Attester.sol": "MockERC1271Attester" + }, + "evmVersion": "cancun", + "libraries": {}, + "viaIR": true + }, + "sources": { + "test/mocks/MockERC1271Attester.sol": { + "keccak256": "0x0bdfe82696ac220027ededa7f030148787f9fea7b71f9cf1cff67962f1ffef61", + "urls": [ + "bzz-raw://d555bc8d5cd81d6cdf9bc5150fc66d1e0c9ed70b73759b4b089ea459dcff6553", + "dweb:/ipfs/QmbLC9ST74f5nBSkvvrmcWHQJikY72yJn5ezKErwMtHCVT" + ], + "license": null + } + }, + "version": 1 + }, + "id": 93 +} diff --git a/artifacts/MockResolver.json b/artifacts/MockResolver.json new file mode 100644 index 0000000..c4d1bb4 --- /dev/null +++ b/artifacts/MockResolver.json @@ -0,0 +1,684 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [{ "name": "ret", "type": "bool", "internalType": "bool" }], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "onAttestCalled", + "inputs": [], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "onModuleCalled", + "inputs": [], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "onRevokeCalled", + "inputs": [], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "reset", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "resolveAttestation", + "inputs": [ + { + "name": "attestation", + "type": "tuple", + "internalType": "struct AttestationRecord", + "components": [ + { "name": "time", "type": "uint48", "internalType": "uint48" }, + { + "name": "expirationTime", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "revocationTime", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "moduleTypes", + "type": "uint32", + "internalType": "PackedModuleTypes" + }, + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "attester", + "type": "address", + "internalType": "address" + }, + { + "name": "dataPointer", + "type": "address", + "internalType": "AttestationDataRef" + }, + { + "name": "schemaUID", + "type": "bytes32", + "internalType": "SchemaUID" + } + ] + } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "resolveAttestation", + "inputs": [ + { + "name": "attestation", + "type": "tuple[]", + "internalType": "struct AttestationRecord[]", + "components": [ + { "name": "time", "type": "uint48", "internalType": "uint48" }, + { + "name": "expirationTime", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "revocationTime", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "moduleTypes", + "type": "uint32", + "internalType": "PackedModuleTypes" + }, + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "attester", + "type": "address", + "internalType": "address" + }, + { + "name": "dataPointer", + "type": "address", + "internalType": "AttestationDataRef" + }, + { + "name": "schemaUID", + "type": "bytes32", + "internalType": "SchemaUID" + } + ] + } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "resolveModuleRegistration", + "inputs": [ + { "name": "sender", "type": "address", "internalType": "address" }, + { + "name": "moduleRecord", + "type": "address", + "internalType": "address" + }, + { + "name": "record", + "type": "tuple", + "internalType": "struct ModuleRecord", + "components": [ + { + "name": "resolverUID", + "type": "bytes32", + "internalType": "ResolverUID" + }, + { "name": "sender", "type": "address", "internalType": "address" }, + { "name": "metadata", "type": "bytes", "internalType": "bytes" } + ] + }, + { "name": "resolverContext", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "resolveRevocation", + "inputs": [ + { + "name": "attestation", + "type": "tuple", + "internalType": "struct AttestationRecord", + "components": [ + { "name": "time", "type": "uint48", "internalType": "uint48" }, + { + "name": "expirationTime", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "revocationTime", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "moduleTypes", + "type": "uint32", + "internalType": "PackedModuleTypes" + }, + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "attester", + "type": "address", + "internalType": "address" + }, + { + "name": "dataPointer", + "type": "address", + "internalType": "AttestationDataRef" + }, + { + "name": "schemaUID", + "type": "bytes32", + "internalType": "SchemaUID" + } + ] + } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "resolveRevocation", + "inputs": [ + { + "name": "attestation", + "type": "tuple[]", + "internalType": "struct AttestationRecord[]", + "components": [ + { "name": "time", "type": "uint48", "internalType": "uint48" }, + { + "name": "expirationTime", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "revocationTime", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "moduleTypes", + "type": "uint32", + "internalType": "PackedModuleTypes" + }, + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "attester", + "type": "address", + "internalType": "address" + }, + { + "name": "dataPointer", + "type": "address", + "internalType": "AttestationDataRef" + }, + { + "name": "schemaUID", + "type": "bytes32", + "internalType": "SchemaUID" + } + ] + } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "supportsInterface", + "inputs": [ + { "name": "interfaceId", "type": "bytes4", "internalType": "bytes4" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "pure" + } + ], + "bytecode": { + "object": "0x60a03461007157601f6103d238819003918201601f19168301916001600160401b03831184841017610075578084926020946040528339810103126100715751801515810361007157608052604051610348908161008a8239608051818181610118015281816101ca01526102480152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040908082526004361015610014575f80fd5b5f3560e01c90816301ffc9a71461026c5750806334c85d07146102295780638b6e59ff146102185780639e8ad8b9146101f3578063cf629cee146101ae578063d58807fe146101a5578063d826f88f14610188578063dfde9d5614610163578063e280f3d3146101415763f68f7e1c1461008c575f80fd5b60031960803682011261013d576001600160a01b036004358181160361013d576024359081160361013d5760443567ffffffffffffffff9182821161013d576060913603011261013d576064359080821161013d573660238301121561013d57816004013590811161013d573691016024011161013d576020906201000062ff0000195f5416175f55517f000000000000000000000000000000000000000000000000000000000000000015158152f35b5f80fd5b503461013d575f36600319011261013d5760209060ff5f541690519015158152f35b503461013d575f36600319011261013d5760209060ff5f5460081c1690519015158152f35b3461013d575f36600319011261013d575f805462ffffff19169055005b61013d366102a3565b6020826101ba366102a3565b50505f805460ff191660011790557f00000000000000000000000000000000000000000000000000000000000000005b90519015158152f35b503461013d575f36600319011261013d5760209060ff5f5460101c1690519015158152f35b61010036600319011261013d575f80fd5b5061010036600319011261013d575f805460ff191660011790556020907f00000000000000000000000000000000000000000000000000000000000000006101ea565b3461013d57602036600319011261013d57600435906001600160e01b03198216820361013d5761029d6020926102f0565b15158152f35b90602060031983011261013d5760043567ffffffffffffffff9283821161013d578060238301121561013d57816004013593841161013d5760248460081b8301011161013d576024019190565b5f91906001600160e01b0319166314f0f87d60e21b1461030c57565b6001915056fea26469706673582212209e4179b0194786ae039354860dfc76e6130a8ddf1d6dda058d29bb2fdd045e0364736f6c63430008180033", + "sourceMap": "110:1613:96:-:0;;;;;;;;;;;;;-1:-1:-1;;110:1613:96;;;;-1:-1:-1;;;;;110:1613:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;319:15;;110:1613;;;;;;;;319:15;110:1613;;;;;;;;;;;;;;;;;-1:-1:-1;110:1613:96;;;;;;-1:-1:-1;110:1613:96;;;;;-1:-1:-1;110:1613:96", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x60806040908082526004361015610014575f80fd5b5f3560e01c90816301ffc9a71461026c5750806334c85d07146102295780638b6e59ff146102185780639e8ad8b9146101f3578063cf629cee146101ae578063d58807fe146101a5578063d826f88f14610188578063dfde9d5614610163578063e280f3d3146101415763f68f7e1c1461008c575f80fd5b60031960803682011261013d576001600160a01b036004358181160361013d576024359081160361013d5760443567ffffffffffffffff9182821161013d576060913603011261013d576064359080821161013d573660238301121561013d57816004013590811161013d573691016024011161013d576020906201000062ff0000195f5416175f55517f000000000000000000000000000000000000000000000000000000000000000015158152f35b5f80fd5b503461013d575f36600319011261013d5760209060ff5f541690519015158152f35b503461013d575f36600319011261013d5760209060ff5f5460081c1690519015158152f35b3461013d575f36600319011261013d575f805462ffffff19169055005b61013d366102a3565b6020826101ba366102a3565b50505f805460ff191660011790557f00000000000000000000000000000000000000000000000000000000000000005b90519015158152f35b503461013d575f36600319011261013d5760209060ff5f5460101c1690519015158152f35b61010036600319011261013d575f80fd5b5061010036600319011261013d575f805460ff191660011790556020907f00000000000000000000000000000000000000000000000000000000000000006101ea565b3461013d57602036600319011261013d57600435906001600160e01b03198216820361013d5761029d6020926102f0565b15158152f35b90602060031983011261013d5760043567ffffffffffffffff9283821161013d578060238301121561013d57816004013593841161013d5760248460081b8301011161013d576024019190565b5f91906001600160e01b0319166314f0f87d60e21b1461030c57565b6001915056fea26469706673582212209e4179b0194786ae039354860dfc76e6130a8ddf1d6dda058d29bb2fdd045e0364736f6c63430008180033", + "sourceMap": "110:1613:96:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;110:1613:96;;;;;;;-1:-1:-1;;;;;110:1613:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1705:9;110:1613;;;;;;;;;;;;;;;;-1:-1:-1;;110:1613:96;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;110:1613:96;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;110:1613:96;;;;;;;-1:-1:-1;;110:1613:96;;;;;;;;:::i;:::-;;;;;;:::i;:::-;-1:-1:-1;;772:21:96;110:1613;;-1:-1:-1;;110:1613:96;789:4;110:1613;;;810:9;110:1613;;;;;;;;;;;;;;;;-1:-1:-1;;110:1613:96;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;110:1613:96;;;;;1131:8;;110:1613;-1:-1:-1;110:1613:96;;-1:-1:-1;;110:1613:96;;;;772:21;110:1613;;-1:-1:-1;;110:1613:96;789:4;110:1613;;;;;810:9;653:173;;110:1613;;;;;;-1:-1:-1;;110:1613:96;;;;;;;-1:-1:-1;;;;;;110:1613:96;;;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;110:1613:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;480:167::-;110:1613;;480:167;-1:-1:-1;;;;;;110:1613:96;-1:-1:-1;;;577:50:96;573:67;;480:167::o;573:67::-;636:4;;-1:-1:-1;629:11:96:o", + "linkReferences": {}, + "immutableReferences": { + "63894": [ + { "start": 280, "length": 32 }, + { "start": 458, "length": 32 }, + { "start": 584, "length": 32 } + ] + } + }, + "methodIdentifiers": { + "onAttestCalled()": "e280f3d3", + "onModuleCalled()": "9e8ad8b9", + "onRevokeCalled()": "dfde9d56", + "reset()": "d826f88f", + "resolveAttestation((uint48,uint48,uint48,uint32,address,address,address,bytes32))": "34c85d07", + "resolveAttestation((uint48,uint48,uint48,uint32,address,address,address,bytes32)[])": "cf629cee", + "resolveModuleRegistration(address,address,(bytes32,address,bytes),bytes)": "f68f7e1c", + "resolveRevocation((uint48,uint48,uint48,uint32,address,address,address,bytes32))": "8b6e59ff", + "resolveRevocation((uint48,uint48,uint48,uint32,address,address,address,bytes32)[])": "d58807fe", + "supportsInterface(bytes4)": "01ffc9a7" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"ret\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"onAttestCalled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"onModuleCalled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"onRevokeCalled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reset\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint48\",\"name\":\"time\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"expirationTime\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"revocationTime\",\"type\":\"uint48\"},{\"internalType\":\"PackedModuleTypes\",\"name\":\"moduleTypes\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"internalType\":\"AttestationDataRef\",\"name\":\"dataPointer\",\"type\":\"address\"},{\"internalType\":\"SchemaUID\",\"name\":\"schemaUID\",\"type\":\"bytes32\"}],\"internalType\":\"struct AttestationRecord\",\"name\":\"attestation\",\"type\":\"tuple\"}],\"name\":\"resolveAttestation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint48\",\"name\":\"time\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"expirationTime\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"revocationTime\",\"type\":\"uint48\"},{\"internalType\":\"PackedModuleTypes\",\"name\":\"moduleTypes\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"internalType\":\"AttestationDataRef\",\"name\":\"dataPointer\",\"type\":\"address\"},{\"internalType\":\"SchemaUID\",\"name\":\"schemaUID\",\"type\":\"bytes32\"}],\"internalType\":\"struct AttestationRecord[]\",\"name\":\"attestation\",\"type\":\"tuple[]\"}],\"name\":\"resolveAttestation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"moduleRecord\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"ResolverUID\",\"name\":\"resolverUID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleRecord\",\"name\":\"record\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"resolverContext\",\"type\":\"bytes\"}],\"name\":\"resolveModuleRegistration\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint48\",\"name\":\"time\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"expirationTime\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"revocationTime\",\"type\":\"uint48\"},{\"internalType\":\"PackedModuleTypes\",\"name\":\"moduleTypes\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"internalType\":\"AttestationDataRef\",\"name\":\"dataPointer\",\"type\":\"address\"},{\"internalType\":\"SchemaUID\",\"name\":\"schemaUID\",\"type\":\"bytes32\"}],\"internalType\":\"struct AttestationRecord\",\"name\":\"attestation\",\"type\":\"tuple\"}],\"name\":\"resolveRevocation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint48\",\"name\":\"time\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"expirationTime\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"revocationTime\",\"type\":\"uint48\"},{\"internalType\":\"PackedModuleTypes\",\"name\":\"moduleTypes\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"internalType\":\"AttestationDataRef\",\"name\":\"dataPointer\",\"type\":\"address\"},{\"internalType\":\"SchemaUID\",\"name\":\"schemaUID\",\"type\":\"bytes32\"}],\"internalType\":\"struct AttestationRecord[]\",\"name\":\"attestation\",\"type\":\"tuple[]\"}],\"name\":\"resolveRevocation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"resolveAttestation((uint48,uint48,uint48,uint32,address,address,address,bytes32))\":{\"details\":\"Processes an attestation and verifies whether it's valid.\",\"params\":{\"attestation\":\"The new attestation.\"},\"returns\":{\"_0\":\"Whether the attestation is valid.\"}},\"resolveRevocation((uint48,uint48,uint48,uint32,address,address,address,bytes32))\":{\"details\":\"Processes an attestation revocation and verifies if it can be revoked.\",\"params\":{\"attestation\":\"The existing attestation to be revoked.\"},\"returns\":{\"_0\":\"Whether the attestation can be revoked.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/mocks/MockResolver.sol\":\"MockResolver\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/=node_modules/@openzeppelin/\",\":account-abstraction-v0.6/=node_modules/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":forge-std/=node_modules/forge-std/src/\",\":solady/=node_modules/solady/src/\",\":solmate/=node_modules/solmate/src/\"],\"viaIR\":true},\"sources\":{\"node_modules/forge-std/src/interfaces/IERC165.sol\":{\"keccak256\":\"0x414b2861b1acbf816ccb7346d3f16cf6c1e002e9e5e40d2f1f26fa5ddc2ea600\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://698352fb240868ea8f1d1fe389993035eeab930f10d06934f80ccfb2b6ccbfbc\",\"dweb:/ipfs/QmT6WLHAgXxFhh12kWym895oTzXid1326iZiwT3pyfggoT\"]},\"src/DataTypes.sol\":{\"keccak256\":\"0x17a21d96dbda1704f888f46565731cc676d5fd4d989ea6819a87a8fb0895c47b\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://91c12e4dc5254821d3ac965369b40656242d90e098a6ecc1e721d6dcf61e64fc\",\"dweb:/ipfs/Qma78sqHvpP7AFj2gKAQe2z4Na3nxT5NRtaSuEJGezDyN8\"]},\"src/external/IExternalResolver.sol\":{\"keccak256\":\"0x258211aa342cdcde51952e0f523136b71d320a2208a7873b03d0c6c210776d5f\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://3406f08574205e786e228c0126d06d78ffb3d8724efa6344a18675eef61e9077\",\"dweb:/ipfs/QmZTZEY5eWmBq6ho6F75UGJ7VYuh2JwJiuQfUXGPrJD7JK\"]},\"src/external/IExternalSchemaValidator.sol\":{\"keccak256\":\"0xeaefb6118769085ca0de5b3048e5b4a8f860f99d4361008b4220195f603e4bd2\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://d8a12afbc6a3a453d5810b67d775d9cb24bc52d1fc2843625910576285257526\",\"dweb:/ipfs/QmXDcULeqy7VSXitbyrYcr32Bt7msuv7krG7g5u1nuCJx2\"]},\"test/mocks/MockResolver.sol\":{\"keccak256\":\"0x4bfcaaf9ab3866ace18d4275d87bdd54da7df50268ac72961727d8f009126b77\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://b5b993384b7650dfa8a06a71504441ccbbb5922c167acbafa5bde3aff3908bf9\",\"dweb:/ipfs/QmbuSvCK9vHsBYqki3kQVzEd8ATwNMUJDYzEKdftv1tQYP\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.24+commit.e11b9ed9" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [{ "internalType": "bool", "name": "ret", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "onAttestCalled", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "onModuleCalled", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "onRevokeCalled", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "reset" + }, + { + "inputs": [ + { + "internalType": "struct AttestationRecord", + "name": "attestation", + "type": "tuple", + "components": [ + { "internalType": "uint48", "name": "time", "type": "uint48" }, + { + "internalType": "uint48", + "name": "expirationTime", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "revocationTime", + "type": "uint48" + }, + { + "internalType": "PackedModuleTypes", + "name": "moduleTypes", + "type": "uint32" + }, + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "attester", + "type": "address" + }, + { + "internalType": "AttestationDataRef", + "name": "dataPointer", + "type": "address" + }, + { + "internalType": "SchemaUID", + "name": "schemaUID", + "type": "bytes32" + } + ] + } + ], + "stateMutability": "payable", + "type": "function", + "name": "resolveAttestation", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "struct AttestationRecord[]", + "name": "attestation", + "type": "tuple[]", + "components": [ + { "internalType": "uint48", "name": "time", "type": "uint48" }, + { + "internalType": "uint48", + "name": "expirationTime", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "revocationTime", + "type": "uint48" + }, + { + "internalType": "PackedModuleTypes", + "name": "moduleTypes", + "type": "uint32" + }, + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "attester", + "type": "address" + }, + { + "internalType": "AttestationDataRef", + "name": "dataPointer", + "type": "address" + }, + { + "internalType": "SchemaUID", + "name": "schemaUID", + "type": "bytes32" + } + ] + } + ], + "stateMutability": "payable", + "type": "function", + "name": "resolveAttestation", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "address", "name": "sender", "type": "address" }, + { + "internalType": "address", + "name": "moduleRecord", + "type": "address" + }, + { + "internalType": "struct ModuleRecord", + "name": "record", + "type": "tuple", + "components": [ + { + "internalType": "ResolverUID", + "name": "resolverUID", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { "internalType": "bytes", "name": "metadata", "type": "bytes" } + ] + }, + { + "internalType": "bytes", + "name": "resolverContext", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function", + "name": "resolveModuleRegistration", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "struct AttestationRecord", + "name": "attestation", + "type": "tuple", + "components": [ + { "internalType": "uint48", "name": "time", "type": "uint48" }, + { + "internalType": "uint48", + "name": "expirationTime", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "revocationTime", + "type": "uint48" + }, + { + "internalType": "PackedModuleTypes", + "name": "moduleTypes", + "type": "uint32" + }, + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "attester", + "type": "address" + }, + { + "internalType": "AttestationDataRef", + "name": "dataPointer", + "type": "address" + }, + { + "internalType": "SchemaUID", + "name": "schemaUID", + "type": "bytes32" + } + ] + } + ], + "stateMutability": "payable", + "type": "function", + "name": "resolveRevocation", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "struct AttestationRecord[]", + "name": "attestation", + "type": "tuple[]", + "components": [ + { "internalType": "uint48", "name": "time", "type": "uint48" }, + { + "internalType": "uint48", + "name": "expirationTime", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "revocationTime", + "type": "uint48" + }, + { + "internalType": "PackedModuleTypes", + "name": "moduleTypes", + "type": "uint32" + }, + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "attester", + "type": "address" + }, + { + "internalType": "AttestationDataRef", + "name": "dataPointer", + "type": "address" + }, + { + "internalType": "SchemaUID", + "name": "schemaUID", + "type": "bytes32" + } + ] + } + ], + "stateMutability": "payable", + "type": "function", + "name": "resolveRevocation", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "stateMutability": "pure", + "type": "function", + "name": "supportsInterface", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "resolveAttestation((uint48,uint48,uint48,uint32,address,address,address,bytes32))": { + "details": "Processes an attestation and verifies whether it's valid.", + "params": { "attestation": "The new attestation." }, + "returns": { "_0": "Whether the attestation is valid." } + }, + "resolveRevocation((uint48,uint48,uint48,uint32,address,address,address,bytes32))": { + "details": "Processes an attestation revocation and verifies if it can be revoked.", + "params": { + "attestation": "The existing attestation to be revoked." + }, + "returns": { "_0": "Whether the attestation can be revoked." } + } + }, + "version": 1 + }, + "userdoc": { "kind": "user", "methods": {}, "version": 1 } + }, + "settings": { + "remappings": [ + "@openzeppelin/=node_modules/@openzeppelin/", + "account-abstraction-v0.6/=node_modules/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "forge-std/=node_modules/forge-std/src/", + "solady/=node_modules/solady/src/", + "solmate/=node_modules/solmate/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { "test/mocks/MockResolver.sol": "MockResolver" }, + "evmVersion": "cancun", + "libraries": {}, + "viaIR": true + }, + "sources": { + "node_modules/forge-std/src/interfaces/IERC165.sol": { + "keccak256": "0x414b2861b1acbf816ccb7346d3f16cf6c1e002e9e5e40d2f1f26fa5ddc2ea600", + "urls": [ + "bzz-raw://698352fb240868ea8f1d1fe389993035eeab930f10d06934f80ccfb2b6ccbfbc", + "dweb:/ipfs/QmT6WLHAgXxFhh12kWym895oTzXid1326iZiwT3pyfggoT" + ], + "license": "MIT" + }, + "src/DataTypes.sol": { + "keccak256": "0x17a21d96dbda1704f888f46565731cc676d5fd4d989ea6819a87a8fb0895c47b", + "urls": [ + "bzz-raw://91c12e4dc5254821d3ac965369b40656242d90e098a6ecc1e721d6dcf61e64fc", + "dweb:/ipfs/Qma78sqHvpP7AFj2gKAQe2z4Na3nxT5NRtaSuEJGezDyN8" + ], + "license": "AGPL-3.0-only" + }, + "src/external/IExternalResolver.sol": { + "keccak256": "0x258211aa342cdcde51952e0f523136b71d320a2208a7873b03d0c6c210776d5f", + "urls": [ + "bzz-raw://3406f08574205e786e228c0126d06d78ffb3d8724efa6344a18675eef61e9077", + "dweb:/ipfs/QmZTZEY5eWmBq6ho6F75UGJ7VYuh2JwJiuQfUXGPrJD7JK" + ], + "license": "AGPL-3.0-only" + }, + "src/external/IExternalSchemaValidator.sol": { + "keccak256": "0xeaefb6118769085ca0de5b3048e5b4a8f860f99d4361008b4220195f603e4bd2", + "urls": [ + "bzz-raw://d8a12afbc6a3a453d5810b67d775d9cb24bc52d1fc2843625910576285257526", + "dweb:/ipfs/QmXDcULeqy7VSXitbyrYcr32Bt7msuv7krG7g5u1nuCJx2" + ], + "license": "AGPL-3.0-only" + }, + "test/mocks/MockResolver.sol": { + "keccak256": "0x4bfcaaf9ab3866ace18d4275d87bdd54da7df50268ac72961727d8f009126b77", + "urls": [ + "bzz-raw://b5b993384b7650dfa8a06a71504441ccbbb5922c167acbafa5bde3aff3908bf9", + "dweb:/ipfs/QmbuSvCK9vHsBYqki3kQVzEd8ATwNMUJDYzEKdftv1tQYP" + ], + "license": "UNLICENSED" + } + }, + "version": 1 + }, + "id": 96 +} diff --git a/artifacts/MockSchemaValidator.json b/artifacts/MockSchemaValidator.json new file mode 100644 index 0000000..fd4ca20 --- /dev/null +++ b/artifacts/MockSchemaValidator.json @@ -0,0 +1,347 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [{ "name": "ret", "type": "bool", "internalType": "bool" }], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "supportsInterface", + "inputs": [ + { "name": "interfaceId", "type": "bytes4", "internalType": "bytes4" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "validateSchema", + "inputs": [ + { + "name": "attestation", + "type": "tuple", + "internalType": "struct AttestationRecord", + "components": [ + { "name": "time", "type": "uint48", "internalType": "uint48" }, + { + "name": "expirationTime", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "revocationTime", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "moduleTypes", + "type": "uint32", + "internalType": "PackedModuleTypes" + }, + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "attester", + "type": "address", + "internalType": "address" + }, + { + "name": "dataPointer", + "type": "address", + "internalType": "AttestationDataRef" + }, + { + "name": "schemaUID", + "type": "bytes32", + "internalType": "SchemaUID" + } + ] + } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "validateSchema", + "inputs": [ + { + "name": "attestations", + "type": "tuple[]", + "internalType": "struct AttestationRecord[]", + "components": [ + { "name": "time", "type": "uint48", "internalType": "uint48" }, + { + "name": "expirationTime", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "revocationTime", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "moduleTypes", + "type": "uint32", + "internalType": "PackedModuleTypes" + }, + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "attester", + "type": "address", + "internalType": "address" + }, + { + "name": "dataPointer", + "type": "address", + "internalType": "AttestationDataRef" + }, + { + "name": "schemaUID", + "type": "bytes32", + "internalType": "SchemaUID" + } + ] + } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + } + ], + "bytecode": { + "object": "0x60a03461006857601f61020538819003918201601f19168301916001600160401b0383118484101761006c57808492602094604052833981010312610068575180151581036100685760805260405161018490816100818239608051818181608e015260d00152f35b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a7146100f5575080637949978f146100b75763cb6ec8261461003d575f80fd5b346100b35760203660031901126100b35767ffffffffffffffff6004358181116100b357366023820112156100b35780600401359182116100b357602490369260081b0101116100b35760206040517f000000000000000000000000000000000000000000000000000000000000000015158152f35b5f80fd5b346100b3576101003660031901126100b35760206040517f000000000000000000000000000000000000000000000000000000000000000015158152f35b346100b35760203660031901126100b357600435906001600160e01b0319821682036100b35761012660209261012c565b15158152f35b5f91906001600160e01b03191663b2275fa960e01b1461014857565b6001915056fea26469706673582212207f633ed5f5d4fa6a13c86c925a26fdc121759b380b51b382b0767acc470794b264736f6c63430008180033", + "sourceMap": "117:615:97:-:0;;;;;;;;;;;;;-1:-1:-1;;117:615:97;;;;-1:-1:-1;;;;;117:615:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;243:15;;117:615;;;;;;;;243:15;117:615;;;;;;;;;;;;-1:-1:-1;117:615:97;;;;;;-1:-1:-1;117:615:97;;;;;-1:-1:-1;117:615:97", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x6080806040526004361015610012575f80fd5b5f3560e01c90816301ffc9a7146100f5575080637949978f146100b75763cb6ec8261461003d575f80fd5b346100b35760203660031901126100b35767ffffffffffffffff6004358181116100b357366023820112156100b35780600401359182116100b357602490369260081b0101116100b35760206040517f000000000000000000000000000000000000000000000000000000000000000015158152f35b5f80fd5b346100b3576101003660031901126100b35760206040517f000000000000000000000000000000000000000000000000000000000000000015158152f35b346100b35760203660031901126100b357600435906001600160e01b0319821682036100b35761012660209261012c565b15158152f35b5f91906001600160e01b03191663b2275fa960e01b1461014857565b6001915056fea26469706673582212207f633ed5f5d4fa6a13c86c925a26fdc121759b380b51b382b0767acc470794b264736f6c63430008180033", + "sourceMap": "117:615:97:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;117:615:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;714:9;117:615;;;;;;;;;;;;;;;-1:-1:-1;;117:615:97;;;;;;;570:9;117:615;;;;;;;;;;;-1:-1:-1;;117:615:97;;;;;;;-1:-1:-1;;;;;;117:615:97;;;;;;;;;;:::i;:::-;;;;;;271:174;117:615;;271:174;-1:-1:-1;;;;;;117:615:97;-1:-1:-1;;;368:57:97;364:74;;271:174::o;364:74::-;434:4;;-1:-1:-1;427:11:97:o", + "linkReferences": {}, + "immutableReferences": { + "64046": [ + { "start": 142, "length": 32 }, + { "start": 208, "length": 32 } + ] + } + }, + "methodIdentifiers": { + "supportsInterface(bytes4)": "01ffc9a7", + "validateSchema((uint48,uint48,uint48,uint32,address,address,address,bytes32))": "7949978f", + "validateSchema((uint48,uint48,uint48,uint32,address,address,address,bytes32)[])": "cb6ec826" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"ret\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint48\",\"name\":\"time\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"expirationTime\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"revocationTime\",\"type\":\"uint48\"},{\"internalType\":\"PackedModuleTypes\",\"name\":\"moduleTypes\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"internalType\":\"AttestationDataRef\",\"name\":\"dataPointer\",\"type\":\"address\"},{\"internalType\":\"SchemaUID\",\"name\":\"schemaUID\",\"type\":\"bytes32\"}],\"internalType\":\"struct AttestationRecord\",\"name\":\"attestation\",\"type\":\"tuple\"}],\"name\":\"validateSchema\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint48\",\"name\":\"time\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"expirationTime\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"revocationTime\",\"type\":\"uint48\"},{\"internalType\":\"PackedModuleTypes\",\"name\":\"moduleTypes\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"internalType\":\"AttestationDataRef\",\"name\":\"dataPointer\",\"type\":\"address\"},{\"internalType\":\"SchemaUID\",\"name\":\"schemaUID\",\"type\":\"bytes32\"}],\"internalType\":\"struct AttestationRecord[]\",\"name\":\"attestations\",\"type\":\"tuple[]\"}],\"name\":\"validateSchema\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"validateSchema((uint48,uint48,uint48,uint32,address,address,address,bytes32))\":{\"notice\":\"Validates an attestation request.\"},\"validateSchema((uint48,uint48,uint48,uint32,address,address,address,bytes32)[])\":{\"notice\":\"Validates an array of attestation requests.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/mocks/MockSchemaValidator.sol\":\"MockSchemaValidator\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/=node_modules/@openzeppelin/\",\":account-abstraction-v0.6/=node_modules/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":forge-std/=node_modules/forge-std/src/\",\":solady/=node_modules/solady/src/\",\":solmate/=node_modules/solmate/src/\"],\"viaIR\":true},\"sources\":{\"node_modules/forge-std/src/interfaces/IERC165.sol\":{\"keccak256\":\"0x414b2861b1acbf816ccb7346d3f16cf6c1e002e9e5e40d2f1f26fa5ddc2ea600\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://698352fb240868ea8f1d1fe389993035eeab930f10d06934f80ccfb2b6ccbfbc\",\"dweb:/ipfs/QmT6WLHAgXxFhh12kWym895oTzXid1326iZiwT3pyfggoT\"]},\"src/DataTypes.sol\":{\"keccak256\":\"0x17a21d96dbda1704f888f46565731cc676d5fd4d989ea6819a87a8fb0895c47b\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://91c12e4dc5254821d3ac965369b40656242d90e098a6ecc1e721d6dcf61e64fc\",\"dweb:/ipfs/Qma78sqHvpP7AFj2gKAQe2z4Na3nxT5NRtaSuEJGezDyN8\"]},\"src/external/IExternalResolver.sol\":{\"keccak256\":\"0x258211aa342cdcde51952e0f523136b71d320a2208a7873b03d0c6c210776d5f\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://3406f08574205e786e228c0126d06d78ffb3d8724efa6344a18675eef61e9077\",\"dweb:/ipfs/QmZTZEY5eWmBq6ho6F75UGJ7VYuh2JwJiuQfUXGPrJD7JK\"]},\"src/external/IExternalSchemaValidator.sol\":{\"keccak256\":\"0xeaefb6118769085ca0de5b3048e5b4a8f860f99d4361008b4220195f603e4bd2\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://d8a12afbc6a3a453d5810b67d775d9cb24bc52d1fc2843625910576285257526\",\"dweb:/ipfs/QmXDcULeqy7VSXitbyrYcr32Bt7msuv7krG7g5u1nuCJx2\"]},\"test/mocks/MockSchemaValidator.sol\":{\"keccak256\":\"0xcd52f3bc690bca76cbf8f810d5f236f91953a18d35f1a9d902100fcfee63b01f\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://13d824cf7b33c51f6c6055a00993ec56b960201fc4abb37d6dd68041090ee88d\",\"dweb:/ipfs/QmVe4hYRgCpTSYTdqVDVo5TXGFTyLUSX3sbms8E4AK966v\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.24+commit.e11b9ed9" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [{ "internalType": "bool", "name": "ret", "type": "bool" }], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "stateMutability": "pure", + "type": "function", + "name": "supportsInterface", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "struct AttestationRecord", + "name": "attestation", + "type": "tuple", + "components": [ + { "internalType": "uint48", "name": "time", "type": "uint48" }, + { + "internalType": "uint48", + "name": "expirationTime", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "revocationTime", + "type": "uint48" + }, + { + "internalType": "PackedModuleTypes", + "name": "moduleTypes", + "type": "uint32" + }, + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "attester", + "type": "address" + }, + { + "internalType": "AttestationDataRef", + "name": "dataPointer", + "type": "address" + }, + { + "internalType": "SchemaUID", + "name": "schemaUID", + "type": "bytes32" + } + ] + } + ], + "stateMutability": "view", + "type": "function", + "name": "validateSchema", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "struct AttestationRecord[]", + "name": "attestations", + "type": "tuple[]", + "components": [ + { "internalType": "uint48", "name": "time", "type": "uint48" }, + { + "internalType": "uint48", + "name": "expirationTime", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "revocationTime", + "type": "uint48" + }, + { + "internalType": "PackedModuleTypes", + "name": "moduleTypes", + "type": "uint32" + }, + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "attester", + "type": "address" + }, + { + "internalType": "AttestationDataRef", + "name": "dataPointer", + "type": "address" + }, + { + "internalType": "SchemaUID", + "name": "schemaUID", + "type": "bytes32" + } + ] + } + ], + "stateMutability": "view", + "type": "function", + "name": "validateSchema", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + } + ], + "devdoc": { "kind": "dev", "methods": {}, "version": 1 }, + "userdoc": { + "kind": "user", + "methods": { + "validateSchema((uint48,uint48,uint48,uint32,address,address,address,bytes32))": { + "notice": "Validates an attestation request." + }, + "validateSchema((uint48,uint48,uint48,uint32,address,address,address,bytes32)[])": { + "notice": "Validates an array of attestation requests." + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=node_modules/@openzeppelin/", + "account-abstraction-v0.6/=node_modules/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "forge-std/=node_modules/forge-std/src/", + "solady/=node_modules/solady/src/", + "solmate/=node_modules/solmate/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { + "test/mocks/MockSchemaValidator.sol": "MockSchemaValidator" + }, + "evmVersion": "cancun", + "libraries": {}, + "viaIR": true + }, + "sources": { + "node_modules/forge-std/src/interfaces/IERC165.sol": { + "keccak256": "0x414b2861b1acbf816ccb7346d3f16cf6c1e002e9e5e40d2f1f26fa5ddc2ea600", + "urls": [ + "bzz-raw://698352fb240868ea8f1d1fe389993035eeab930f10d06934f80ccfb2b6ccbfbc", + "dweb:/ipfs/QmT6WLHAgXxFhh12kWym895oTzXid1326iZiwT3pyfggoT" + ], + "license": "MIT" + }, + "src/DataTypes.sol": { + "keccak256": "0x17a21d96dbda1704f888f46565731cc676d5fd4d989ea6819a87a8fb0895c47b", + "urls": [ + "bzz-raw://91c12e4dc5254821d3ac965369b40656242d90e098a6ecc1e721d6dcf61e64fc", + "dweb:/ipfs/Qma78sqHvpP7AFj2gKAQe2z4Na3nxT5NRtaSuEJGezDyN8" + ], + "license": "AGPL-3.0-only" + }, + "src/external/IExternalResolver.sol": { + "keccak256": "0x258211aa342cdcde51952e0f523136b71d320a2208a7873b03d0c6c210776d5f", + "urls": [ + "bzz-raw://3406f08574205e786e228c0126d06d78ffb3d8724efa6344a18675eef61e9077", + "dweb:/ipfs/QmZTZEY5eWmBq6ho6F75UGJ7VYuh2JwJiuQfUXGPrJD7JK" + ], + "license": "AGPL-3.0-only" + }, + "src/external/IExternalSchemaValidator.sol": { + "keccak256": "0xeaefb6118769085ca0de5b3048e5b4a8f860f99d4361008b4220195f603e4bd2", + "urls": [ + "bzz-raw://d8a12afbc6a3a453d5810b67d775d9cb24bc52d1fc2843625910576285257526", + "dweb:/ipfs/QmXDcULeqy7VSXitbyrYcr32Bt7msuv7krG7g5u1nuCJx2" + ], + "license": "AGPL-3.0-only" + }, + "test/mocks/MockSchemaValidator.sol": { + "keccak256": "0xcd52f3bc690bca76cbf8f810d5f236f91953a18d35f1a9d902100fcfee63b01f", + "urls": [ + "bzz-raw://13d824cf7b33c51f6c6055a00993ec56b960201fc4abb37d6dd68041090ee88d", + "dweb:/ipfs/QmVe4hYRgCpTSYTdqVDVo5TXGFTyLUSX3sbms8E4AK966v" + ], + "license": "UNLICENSED" + } + }, + "version": 1 + }, + "id": 97 +} diff --git a/artifacts/Registry.json b/artifacts/Registry.json new file mode 100644 index 0000000..fe52f3c --- /dev/null +++ b/artifacts/Registry.json @@ -0,0 +1,2703 @@ +{ + "abi": [ + { + "type": "function", + "name": "attest", + "inputs": [ + { "name": "schemaUID", "type": "bytes32", "internalType": "SchemaUID" }, + { "name": "attester", "type": "address", "internalType": "address" }, + { + "name": "requests", + "type": "tuple[]", + "internalType": "struct AttestationRequest[]", + "components": [ + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "expirationTime", + "type": "uint48", + "internalType": "uint48" + }, + { "name": "data", "type": "bytes", "internalType": "bytes" }, + { + "name": "moduleTypes", + "type": "uint256[]", + "internalType": "ModuleType[]" + } + ] + }, + { "name": "signature", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "attest", + "inputs": [ + { "name": "schemaUID", "type": "bytes32", "internalType": "SchemaUID" }, + { "name": "attester", "type": "address", "internalType": "address" }, + { + "name": "request", + "type": "tuple", + "internalType": "struct AttestationRequest", + "components": [ + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "expirationTime", + "type": "uint48", + "internalType": "uint48" + }, + { "name": "data", "type": "bytes", "internalType": "bytes" }, + { + "name": "moduleTypes", + "type": "uint256[]", + "internalType": "ModuleType[]" + } + ] + }, + { "name": "signature", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "attest", + "inputs": [ + { "name": "schemaUID", "type": "bytes32", "internalType": "SchemaUID" }, + { + "name": "request", + "type": "tuple", + "internalType": "struct AttestationRequest", + "components": [ + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "expirationTime", + "type": "uint48", + "internalType": "uint48" + }, + { "name": "data", "type": "bytes", "internalType": "bytes" }, + { + "name": "moduleTypes", + "type": "uint256[]", + "internalType": "ModuleType[]" + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "attest", + "inputs": [ + { "name": "schemaUID", "type": "bytes32", "internalType": "SchemaUID" }, + { + "name": "requests", + "type": "tuple[]", + "internalType": "struct AttestationRequest[]", + "components": [ + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "expirationTime", + "type": "uint48", + "internalType": "uint48" + }, + { "name": "data", "type": "bytes", "internalType": "bytes" }, + { + "name": "moduleTypes", + "type": "uint256[]", + "internalType": "ModuleType[]" + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "attesterNonce", + "inputs": [ + { "name": "attester", "type": "address", "internalType": "address" } + ], + "outputs": [ + { "name": "nonce", "type": "uint256", "internalType": "uint256" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "calcModuleAddress", + "inputs": [ + { "name": "salt", "type": "bytes32", "internalType": "bytes32" }, + { "name": "initCode", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [{ "name": "", "type": "address", "internalType": "address" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "check", + "inputs": [ + { "name": "module", "type": "address", "internalType": "address" }, + { + "name": "attesters", + "type": "address[]", + "internalType": "address[]" + }, + { "name": "threshold", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [], + "stateMutability": "view" + }, + { + "type": "function", + "name": "check", + "inputs": [ + { "name": "module", "type": "address", "internalType": "address" }, + { + "name": "moduleType", + "type": "uint256", + "internalType": "ModuleType" + }, + { + "name": "attesters", + "type": "address[]", + "internalType": "address[]" + }, + { "name": "threshold", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [], + "stateMutability": "view" + }, + { + "type": "function", + "name": "check", + "inputs": [ + { "name": "module", "type": "address", "internalType": "address" }, + { + "name": "moduleType", + "type": "uint256", + "internalType": "ModuleType" + } + ], + "outputs": [], + "stateMutability": "view" + }, + { + "type": "function", + "name": "check", + "inputs": [ + { "name": "module", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "view" + }, + { + "type": "function", + "name": "checkForAccount", + "inputs": [ + { + "name": "smartAccount", + "type": "address", + "internalType": "address" + }, + { "name": "module", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "view" + }, + { + "type": "function", + "name": "checkForAccount", + "inputs": [ + { + "name": "smartAccount", + "type": "address", + "internalType": "address" + }, + { "name": "module", "type": "address", "internalType": "address" }, + { + "name": "moduleType", + "type": "uint256", + "internalType": "ModuleType" + } + ], + "outputs": [], + "stateMutability": "view" + }, + { + "type": "function", + "name": "deployModule", + "inputs": [ + { "name": "salt", "type": "bytes32", "internalType": "bytes32" }, + { + "name": "resolverUID", + "type": "bytes32", + "internalType": "ResolverUID" + }, + { "name": "initCode", "type": "bytes", "internalType": "bytes" }, + { "name": "metadata", "type": "bytes", "internalType": "bytes" }, + { "name": "resolverContext", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [ + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "deployViaFactory", + "inputs": [ + { "name": "factory", "type": "address", "internalType": "address" }, + { "name": "callOnFactory", "type": "bytes", "internalType": "bytes" }, + { "name": "metadata", "type": "bytes", "internalType": "bytes" }, + { + "name": "resolverUID", + "type": "bytes32", + "internalType": "ResolverUID" + }, + { "name": "resolverContext", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [ + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "eip712Domain", + "inputs": [], + "outputs": [ + { "name": "fields", "type": "bytes1", "internalType": "bytes1" }, + { "name": "name", "type": "string", "internalType": "string" }, + { "name": "version", "type": "string", "internalType": "string" }, + { "name": "chainId", "type": "uint256", "internalType": "uint256" }, + { + "name": "verifyingContract", + "type": "address", + "internalType": "address" + }, + { "name": "salt", "type": "bytes32", "internalType": "bytes32" }, + { + "name": "extensions", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "findAttestation", + "inputs": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "attester", "type": "address", "internalType": "address" } + ], + "outputs": [ + { + "name": "attestation", + "type": "tuple", + "internalType": "struct AttestationRecord", + "components": [ + { "name": "time", "type": "uint48", "internalType": "uint48" }, + { + "name": "expirationTime", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "revocationTime", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "moduleTypes", + "type": "uint32", + "internalType": "PackedModuleTypes" + }, + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "attester", + "type": "address", + "internalType": "address" + }, + { + "name": "dataPointer", + "type": "address", + "internalType": "AttestationDataRef" + }, + { + "name": "schemaUID", + "type": "bytes32", + "internalType": "SchemaUID" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "findAttestations", + "inputs": [ + { "name": "module", "type": "address", "internalType": "address" }, + { + "name": "attesters", + "type": "address[]", + "internalType": "address[]" + } + ], + "outputs": [ + { + "name": "attestations", + "type": "tuple[]", + "internalType": "struct AttestationRecord[]", + "components": [ + { "name": "time", "type": "uint48", "internalType": "uint48" }, + { + "name": "expirationTime", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "revocationTime", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "moduleTypes", + "type": "uint32", + "internalType": "PackedModuleTypes" + }, + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "attester", + "type": "address", + "internalType": "address" + }, + { + "name": "dataPointer", + "type": "address", + "internalType": "AttestationDataRef" + }, + { + "name": "schemaUID", + "type": "bytes32", + "internalType": "SchemaUID" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "findModule", + "inputs": [ + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "moduleRecord", + "type": "tuple", + "internalType": "struct ModuleRecord", + "components": [ + { + "name": "resolverUID", + "type": "bytes32", + "internalType": "ResolverUID" + }, + { "name": "sender", "type": "address", "internalType": "address" }, + { "name": "metadata", "type": "bytes", "internalType": "bytes" } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "findResolver", + "inputs": [ + { "name": "uid", "type": "bytes32", "internalType": "ResolverUID" } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct ResolverRecord", + "components": [ + { + "name": "resolver", + "type": "address", + "internalType": "contract IExternalResolver" + }, + { + "name": "resolverOwner", + "type": "address", + "internalType": "address" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "findSchema", + "inputs": [ + { "name": "uid", "type": "bytes32", "internalType": "SchemaUID" } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct SchemaRecord", + "components": [ + { + "name": "registeredAt", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "validator", + "type": "address", + "internalType": "contract IExternalSchemaValidator" + }, + { "name": "schema", "type": "string", "internalType": "string" } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "findTrustedAttesters", + "inputs": [ + { "name": "smartAccount", "type": "address", "internalType": "address" } + ], + "outputs": [ + { + "name": "attesters", + "type": "address[]", + "internalType": "address[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getDigest", + "inputs": [ + { + "name": "request", + "type": "tuple", + "internalType": "struct AttestationRequest", + "components": [ + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "expirationTime", + "type": "uint48", + "internalType": "uint48" + }, + { "name": "data", "type": "bytes", "internalType": "bytes" }, + { + "name": "moduleTypes", + "type": "uint256[]", + "internalType": "ModuleType[]" + } + ] + }, + { "name": "attester", "type": "address", "internalType": "address" } + ], + "outputs": [ + { "name": "digest", "type": "bytes32", "internalType": "bytes32" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getDigest", + "inputs": [ + { + "name": "requests", + "type": "tuple[]", + "internalType": "struct RevocationRequest[]", + "components": [ + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + } + ] + }, + { "name": "attester", "type": "address", "internalType": "address" } + ], + "outputs": [ + { "name": "digest", "type": "bytes32", "internalType": "bytes32" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getDigest", + "inputs": [ + { + "name": "request", + "type": "tuple", + "internalType": "struct RevocationRequest", + "components": [ + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + } + ] + }, + { "name": "attester", "type": "address", "internalType": "address" } + ], + "outputs": [ + { "name": "digest", "type": "bytes32", "internalType": "bytes32" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getDigest", + "inputs": [ + { + "name": "requests", + "type": "tuple[]", + "internalType": "struct AttestationRequest[]", + "components": [ + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "expirationTime", + "type": "uint48", + "internalType": "uint48" + }, + { "name": "data", "type": "bytes", "internalType": "bytes" }, + { + "name": "moduleTypes", + "type": "uint256[]", + "internalType": "ModuleType[]" + } + ] + }, + { "name": "attester", "type": "address", "internalType": "address" } + ], + "outputs": [ + { "name": "digest", "type": "bytes32", "internalType": "bytes32" } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "registerModule", + "inputs": [ + { + "name": "resolverUID", + "type": "bytes32", + "internalType": "ResolverUID" + }, + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + }, + { "name": "metadata", "type": "bytes", "internalType": "bytes" }, + { "name": "resolverContext", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "registerResolver", + "inputs": [ + { + "name": "resolver", + "type": "address", + "internalType": "contract IExternalResolver" + } + ], + "outputs": [ + { "name": "uid", "type": "bytes32", "internalType": "ResolverUID" } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "registerSchema", + "inputs": [ + { "name": "schema", "type": "string", "internalType": "string" }, + { + "name": "validator", + "type": "address", + "internalType": "contract IExternalSchemaValidator" + } + ], + "outputs": [ + { "name": "uid", "type": "bytes32", "internalType": "SchemaUID" } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "revoke", + "inputs": [ + { + "name": "requests", + "type": "tuple[]", + "internalType": "struct RevocationRequest[]", + "components": [ + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "revoke", + "inputs": [ + { "name": "attester", "type": "address", "internalType": "address" }, + { + "name": "requests", + "type": "tuple[]", + "internalType": "struct RevocationRequest[]", + "components": [ + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + } + ] + }, + { "name": "signature", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "revoke", + "inputs": [ + { + "name": "request", + "type": "tuple", + "internalType": "struct RevocationRequest", + "components": [ + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "revoke", + "inputs": [ + { "name": "attester", "type": "address", "internalType": "address" }, + { + "name": "request", + "type": "tuple", + "internalType": "struct RevocationRequest", + "components": [ + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + } + ] + }, + { "name": "signature", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setResolver", + "inputs": [ + { "name": "uid", "type": "bytes32", "internalType": "ResolverUID" }, + { + "name": "resolver", + "type": "address", + "internalType": "contract IExternalResolver" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferResolverOwnership", + "inputs": [ + { "name": "uid", "type": "bytes32", "internalType": "ResolverUID" }, + { "name": "newOwner", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "trustAttesters", + "inputs": [ + { "name": "threshold", "type": "uint8", "internalType": "uint8" }, + { + "name": "attesters", + "type": "address[]", + "internalType": "address[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "Attested", + "inputs": [ + { + "name": "moduleAddress", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "attester", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "schemaUID", + "type": "bytes32", + "indexed": false, + "internalType": "SchemaUID" + }, + { + "name": "sstore2Pointer", + "type": "address", + "indexed": true, + "internalType": "AttestationDataRef" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ModuleRegistration", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewResolver", + "inputs": [ + { + "name": "uid", + "type": "bytes32", + "indexed": true, + "internalType": "ResolverUID" + }, + { + "name": "resolver", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewResolverOwner", + "inputs": [ + { + "name": "uid", + "type": "bytes32", + "indexed": true, + "internalType": "ResolverUID" + }, + { + "name": "newOwner", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewTrustedAttesters", + "inputs": [ + { + "name": "smartAccount", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ResolverRevocationError", + "inputs": [ + { + "name": "resolver", + "type": "address", + "indexed": false, + "internalType": "contract IExternalResolver" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Revoked", + "inputs": [ + { + "name": "moduleAddress", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "revoker", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "schema", + "type": "bytes32", + "indexed": false, + "internalType": "SchemaUID" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SchemaRegistered", + "inputs": [ + { + "name": "uid", + "type": "bytes32", + "indexed": true, + "internalType": "SchemaUID" + }, + { + "name": "registerer", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { "type": "error", "name": "AccessDenied", "inputs": [] }, + { "type": "error", "name": "AlreadyAttested", "inputs": [] }, + { + "type": "error", + "name": "AlreadyRegistered", + "inputs": [ + { "name": "module", "type": "address", "internalType": "address" } + ] + }, + { "type": "error", "name": "AlreadyRevoked", "inputs": [] }, + { "type": "error", "name": "AttestationNotFound", "inputs": [] }, + { "type": "error", "name": "DifferentResolvers", "inputs": [] }, + { + "type": "error", + "name": "ExternalError_ModuleRegistration", + "inputs": [] + }, + { + "type": "error", + "name": "ExternalError_ResolveAttestation", + "inputs": [] + }, + { + "type": "error", + "name": "ExternalError_ResolveRevocation", + "inputs": [] + }, + { "type": "error", "name": "ExternalError_SchemaValidation", "inputs": [] }, + { + "type": "error", + "name": "FactoryCallFailed", + "inputs": [ + { "name": "factory", "type": "address", "internalType": "address" } + ] + }, + { "type": "error", "name": "InsufficientAttestations", "inputs": [] }, + { "type": "error", "name": "InvalidAddress", "inputs": [] }, + { "type": "error", "name": "InvalidAttestation", "inputs": [] }, + { "type": "error", "name": "InvalidDeployment", "inputs": [] }, + { "type": "error", "name": "InvalidExpirationTime", "inputs": [] }, + { "type": "error", "name": "InvalidModuleType", "inputs": [] }, + { "type": "error", "name": "InvalidModuleTypes", "inputs": [] }, + { + "type": "error", + "name": "InvalidResolver", + "inputs": [ + { + "name": "resolver", + "type": "address", + "internalType": "contract IExternalResolver" + } + ] + }, + { + "type": "error", + "name": "InvalidResolverUID", + "inputs": [ + { "name": "uid", "type": "bytes32", "internalType": "ResolverUID" } + ] + }, + { "type": "error", "name": "InvalidSalt", "inputs": [] }, + { "type": "error", "name": "InvalidSchema", "inputs": [] }, + { + "type": "error", + "name": "InvalidSchemaValidator", + "inputs": [ + { + "name": "validator", + "type": "address", + "internalType": "contract IExternalSchemaValidator" + } + ] + }, + { "type": "error", "name": "InvalidSignature", "inputs": [] }, + { "type": "error", "name": "InvalidThreshold", "inputs": [] }, + { "type": "error", "name": "InvalidTrustedAttesterInput", "inputs": [] }, + { + "type": "error", + "name": "ModuleAddressIsNotContract", + "inputs": [ + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ModuleNotFoundInRegistry", + "inputs": [ + { "name": "module", "type": "address", "internalType": "address" } + ] + }, + { "type": "error", "name": "NoTrustedAttestersFound", "inputs": [] }, + { "type": "error", "name": "ResolverAlreadyExists", "inputs": [] }, + { + "type": "error", + "name": "RevokedAttestation", + "inputs": [ + { "name": "attester", "type": "address", "internalType": "address" } + ] + }, + { + "type": "error", + "name": "SchemaAlreadyExists", + "inputs": [ + { "name": "uid", "type": "bytes32", "internalType": "SchemaUID" } + ] + } + ], + "bytecode": { + "object": "0x61014060408181523462000159576001600160401b0391610146818101848111838210176200013b57829162003f09833903905ff080156200014f576080523060a0524660c052805191818301838110828211176200013b5782526012835260208301715268696e6573746f6e65526567697374727960701b815282519083820192828410908411176200013b57602060049260a0948652838152019463076312e360e41b86525190209320928060e052610100938085528351917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528382015246606082015230608082015220906101209182525190613dab92836200015e8439608051836117b5015260a051836128fb015260c0518361291e015260e0518361298e015251826129b4015251816128da0152f35b634e487b7160e01b5f52604160045260245ffd5b50513d5f823e3d90fd5b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c806303b79c841461024457806304a1f2981461023f5780630bb30abc1461023a5780631896f70a146102355780631d4d98101461023057806329757d371461022b5780632b30c899146102265780632ed94467146102215780634990a6821461021c5780634c13560c146102175780634ece78ca14610212578063529562a11461020d57806355f47dde14610208578063617734d01461020357806370d2af24146101fe57806371c61a2b146101f957806377efcab4146101f45780637cb2afd8146101ef57806384b0196e146101ea57806388dc678d146101e55780638e6ec824146101e0578063945e3641146101db57806396fb7217146101d65780639f3e1b53146101d1578063b060cb1e146101cc578063b50b706b146101c7578063b65d1012146101c2578063b6b791a1146101bd578063c23697a8146101b8578063d9048624146101b3578063dd0fd278146101ae578063e14f3d32146101a9578063f05c04e1146101a4578063f095ec1b1461019f5763f190e2b11461019a575f80fd5b6116e8565b611698565b6114b9565b611478565b611407565b6113af565b611376565b61126f565b6111f2565b6111b7565b6110b2565b610fd7565b610fad565b610f71565b610ee9565b610e47565b610da8565b610cb6565b610c93565b610c28565b610bd1565b610b6e565b610abc565b610a87565b6109ed565b6109d6565b610974565b610926565b610857565b6106f3565b6105f3565b61051c565b6104d2565b61040c565b61027a565b9181601f84011215610276578235916001600160401b038311610276576020838186019501011161027657565b5f80fd5b60a03660031901126102765760046001600160401b036024358235604435838111610276576102ac9036908601610249565b929093606435818111610276576102c69036908801610249565b929091608435908111610276576102e09036908901610249565b979095825f525f60205260405f209560018060a01b039182600189015416156103b357338260601c14158061039b575b61038a579061032d81836103278d8796369161195e565b9c613487565b9980519060200134f598169088160361037b575061035861035d959361037798959388933385612504565b61257f565b6040516001600160a01b0390911681529081906020820190565b0390f35b60405163e6c4247b60e01b8152fd5b6040516381e69d9b60e01b81528490fd5b506bffffffffffffffffffffffff1982161515610310565b60405163f184406b60e01b8152808501869052602490fd5b6001600160a01b0381160361027657565b9181601f84011215610276578235916001600160401b038311610276576020808501948460051b01011161027657565b3461027657608036600319011261027657602435610429816103cb565b6001600160401b03604435818111610276576104499036906004016103dc565b91606435908111610276576104a56104686104ac923690600401610249565b919060018060a01b0387165f52600560205261049d61049860405f2061048e815461188f565b809155888861277b565b6128d8565b92369161195e565b90856129ea565b156104c0576104be9260043590612adb565b005b604051638baa579f60e01b8152600490fd5b34610276576060366003190112610276576004356104ef816103cb565b602435906001600160401b038211610276576105126104be9236906004016103dc565b90604435926119eb565b3461027657604036600319011261027657602435610539816103cb565b6001600160a01b0381168015908115610581575b5061055e576104be90600435611af4565b60405163f9492e7560e01b81526001600160a01b03919091166004820152602490fd5b6040516301ffc9a760e01b81526314f0f87d60e21b60048201529150602090829060249082905afa9081156105ee575f916105bf575b50155f61054d565b6105e1915060203d6020116105e7575b6105d98183611923565b810190611ad1565b5f6105b7565b503d6105cf565b611ae9565b34610276576040366003190112610276576004356001600160401b03811161027657610623903690600401610249565b60243591610630836103cb565b6001600160a01b0383168015159081610688575b5061066757916106579161037793611d09565b6040519081529081906020820190565b604051630f09140760e01b81526001600160a01b0384166004820152602490fd5b6040516301ffc9a760e01b815263b2275fa960e01b60048201529150602090829060249082905afa9081156105ee575f916106c6575b50155f610644565b6106df915060203d6020116105e7576105d98183611923565b5f6106be565b908160809103126102765790565b3461027657608036600319011261027657602435610710816103cb565b6001600160401b03604435818111610276576107309036906004016106e5565b906064359081116102765761077e61074f610785923690600401610249565b919060018060a01b0386165f52600560205261049d61049860405f20610775815461188f565b80915587612ce6565b90846129ea565b156104c0576104be9160043590612dad565b60e0809165ffffffffffff808251168552806020830151166020860152604082015116604085015263ffffffff6060820151166060850152608081015160018060a01b03809116608086015260a08201511660a085015261080760c082015160c086019060018060a01b03169052565b0151910152565b60209060206040818301928281528551809452019301915f5b828110610835575050505090565b90919293826101008261084b6001948951610797565b01950193929101610827565b3461027657604080600319360112610276576004803590610877826103cb565b6024356001600160401b0381116102765791610898849336906004016103dc565b9390926108a485611e70565b946001600160a01b03909316925f5b8181106108c85760405180610377898261080e565b8061090a6109056108dc600194868b6119c5565b356108e6816103cb565b885f5286602052875f209060018060a01b03165f5260205260405f2090565b611ee0565b610914828a611ecc565b5261091f8189611ecc565b50016108b3565b3461027657608036600319011261027657600435610943816103cb565b604435906001600160401b038211610276576109666104be9236906004016103dc565b906064359260243590611f98565b34610276576020366003190112610276576004356001600160401b038111610276576109a76104be9136906004016103dc565b9033612e66565b6040906003190112610276576004356109c6816103cb565b906024356109d3816103cb565b90565b34610276576104be6109e7366109ae565b90612ee3565b3461027657606036600319011261027657600435610a0a816103cb565b6001600160401b0360243581811161027657610a2a9036906004016103dc565b91604435908111610276576104a5610a49610a79923690600401610249565b919060018060a01b0387165f52600560205261049d61049860405f20610a6f815461188f565b80915588886132ae565b156104c0576104be92612e66565b34610276576060366003190112610276576104be600435610aa7816103cb565b602435610ab3816103cb565b604435916130c8565b34610276576040366003190112610276576004356001600160401b03811161027657610aec9036906004016106e5565b602435610af8816103cb565b6001600160a01b03165f9081526005602052604090205460018101908110610b3157610498610b2991602093612ce6565b604051908152f35b61187b565b604060031982011261027657600435906001600160401b03821161027657610b60916004016103dc565b90916024356109d3816103cb565b3461027657610b7c36610b36565b6001600160a01b03165f908152600560205260409020546001810192908310610b3157602092610b2992610498926132ae565b602090600319011261027657600490565b602090602319011261027657602490565b3461027657604036600319011261027657610beb36610baf565b602435610bf7816103cb565b6001600160a01b03165f9081526005602052604090205460018101908110610b3157610498610b2991602093613386565b34610276576020366003190112610276575f6020604051610c48816118b1565b82815201526004355f525f6020526040805f208151610c66816118b1565b81546001600160a01b03908116808352600190930154811660209283019081528451938452511690820152f35b34610276576020366003190112610276576104be610cb036610baf565b3361341e565b3461027657604036600319011261027657600435602435610cd6816103cb565b5f828152602081905260409020600101546001600160a01b039081163303610d50575f8381526020818152604090912060010180546001600160a01b0319166001600160a01b0385161790557f7a2c54badf601a71ed23c3ec8c070bac418dfd4fb160e0351861983746662d7792909160405191168152a2005b604051634ca8886760e01b8152600490fd5b5f5b838110610d735750505f910152565b8181015183820152602001610d64565b90602091610d9c81518092818552858086019101610d62565b601f01601f1916010190565b34610276575f36600319011261027657610df6610dc361343b565b90604051928392600f60f81b8452610de860209360e0602087015260e0860190610d83565b908482036040860152610d83565b904660608401523060808401525f60a084015282820360c084015260206060519283815201916080915f5b828110610e3057505050500390f35b835185528695509381019392810192600101610e21565b3461027657608036600319011261027657600435602435610e67816103cb565b6001600160401b0360443581811161027657610e87903690600401610249565b9160643590811161027657610ea0903690600401610249565b939092855f525f60205260405f209260018060a01b0360018501541615610ed05790610358916104be978461242d565b60405163f184406b60e01b815260048101889052602490fd5b3461027657606036600319011261027657600435610f06816103cb565b610f0f36610bc0565b6044356001600160401b0381116102765761077e610f34610f63923690600401610249565b919060018060a01b0386165f52600560205261049d61049860405f20610f5a815461188f565b80915587613386565b156104c0576104be9161341e565b34610276576040366003190112610276576024356001600160401b03811161027657610fa46104be9136906004016106e5565b60043533612dad565b34610276576040366003190112610276576104be600435610fcd816103cb565b60243590336130c8565b3461027657602036600319011261027657600435610ff4816103cb565b6001600160a01b0381168015908115611019575b5061055e576106576103779161207c565b6040516301ffc9a760e01b81526314f0f87d60e21b60048201529150602090829060249082905afa9081156105ee575f91611057575b50155f611008565b611070915060203d6020116105e7576105d98183611923565b5f61104f565b608060406109d3936020845265ffffffffffff815116602085015260018060a01b03602082015116828501520151916060808201520190610d83565b3461027657602080600319360112610276576110cc612175565b506004355f526002815260405f2090604051906110e8826118d1565b825465ffffffffffff8116835260301c6001600160a01b031681830152604051600193840180545f95929392909161111f83611b66565b80865292600181169081156111955750600114611159575b6103778686611148818b0382611923565b604082015260405191829182611076565b5f908152838120939650925b82841061118257505050816103779461114892820101945f611137565b8054858501880152928601928101611165565b60ff191686860152505050151560051b8201019250611148816103775f611137565b34610276576020366003190112610276576004356111d4816103cb565b60018060a01b03165f526005602052602060405f2054604051908152f35b34610276576040366003190112610276576024356001600160401b038111610276576112256104be9136906004016103dc565b9060043533612adb565b90606060406109d3938051845260018060a01b0360208201511660208501520151918160408201520190610d83565b9060206109d392818152019061122f565b34610276576020806003193601126102765760043561128d816103cb565b611295612175565b5060018060a01b038091165f5260019160018152600260405f20604051936112bc856118d1565b81548552600182015416838501520190604051915f948154916112de83611b66565b80865292600181169081156113545750600114611318575b6103778686611307818b0382611923565b60408201526040519182918261125e565b5f908152838120939650925b82841061134157505050816103779461130792820101945f6112f6565b8054858501880152928601928101611324565b60ff191686860152505050151560051b8201019250611307816103775f6112f6565b34610276576020366003190112610276576104be600435611396816103cb565b33612ee3565b610100810192916113ad9190610797565b565b34610276576101006113f86109056113c6366109ae565b906113cf611e34565b5060018060a01b03165f52600460205260405f209060018060a01b03165f5260205260405f2090565b6114056040518092610797565bf35b34610276576020806003193601126102765761142d600435611428816103cb565b6121a2565b90604051918183928301818452825180915281604085019301915f5b82811061145857505050500390f35b83516001600160a01b031685528695509381019392810192600101611449565b346102765761148636610b36565b6001600160a01b03165f908152600560205260409020546001810192908310610b3157602092610b29926104989261277b565b3461027657604036600319011261027657600480359060ff821691828103610276576024356001600160401b038111610276576114f990369084016103dc565b91909261151661151261150d3686886122a1565b613be1565b1590565b61167f578215801561168e575b61167f576001600160a01b0361154161153c85876119b7565b6119d5565b161561167f57335f908152600360205260409020839095116116705750835460ff831661ffff199091161760089190911b61ff0016178355906115ae61158a61153c84846119b7565b845462010000600160b01b03191660109190911b62010000600160b01b0316178455565b6115b7826119df565b915f916001809501925b8481106115ef57337ff689fb4afceb60ac48a5ca8113a5a57cb15e51d317f0ec57e07340192d9fb4595f80a2005b8061166a61160261153c899487876119c5565b61164b61161b61153c6116148661206e565b89896119c5565b6001600160a01b039092165f90815260208990526040902033905b9060018060a01b03165f5260205260405f2090565b80546001600160a01b0319166001600160a01b03909216919091179055565b016115c1565b60405163aabd5a0960e01b8152fd5b60405163cd0ecff160e01b8152fd5b5060ff8311611523565b34610276576040366003190112610276576024356001600160401b038111610276576116d66116cd6020923690600401610249565b60043591613487565b6040516001600160a01b039091168152f35b60a03660031901126102765760048035611701816103cb565b6001600160401b03602435818111610276576117209036908501610249565b93604435838111610276576117389036908301610249565b949060643594608435908111610276576117559036908501610249565b949093611769875f525f60205260405f2090565b600181015490946001600160a01b0392909183161561185f573083831614611838579060209392916117af6040519c8d9586948594630d84daa960e31b8652850161232e565b039134907f0000000000000000000000000000000000000000000000000000000000000000165af19485156105ee57610377975f966117fb575b50859686926103589261035d9861242d565b61035d96509661182761035892939860203d602011611831575b61181f8183611923565b8101906122f9565b96509691906117e9565b503d611815565b6040516301b3a38360e21b81526001600160a01b0390921690820190815281906020010390fd5b60405163f184406b60e01b815290810189815281906020010390fd5b634e487b7160e01b5f52601160045260245ffd5b5f198114610b315760010190565b634e487b7160e01b5f52604160045260245ffd5b604081019081106001600160401b038211176118cc57604052565b61189d565b606081019081106001600160401b038211176118cc57604052565b61010081019081106001600160401b038211176118cc57604052565b608081019081106001600160401b038211176118cc57604052565b90601f801991011681019081106001600160401b038211176118cc57604052565b604051906113ad826118d1565b604051906113ad826118ec565b9291926001600160401b0382116118cc5760405191611987601f8201601f191660200184611923565b829481845281830111610276578281602093845f960137010152565b634e487b7160e01b5f52603260045260245ffd5b90156119c05790565b6119a3565b91908110156119c05760051b0190565b356109d3816103cb565b8015610b31575f190190565b92919283158015611ac9575b15611a0e576040516305a74e6160e01b8152600490fd5b828410611ab7575f915f5b858110611a32576040516339093e6560e21b8152600490fd5b611a4061153c8288856119c5565b936001600160a01b0390811690851611611a665760405163cd0ecff160e01b8152600490fd5b611a8c611a87856116368660018060a01b03165f52600460205260405f2090565b612c22565b611aa7575b8415611a9f57600101611a19565b505050505050565b93611ab1906119df565b93611a91565b6040516339093e6560e21b8152600490fd5b5082156119f7565b90816020910312610276575180151581036102765790565b6040513d5f823e3d90fd5b5f8181526020819052604090206001015490916001600160a01b039182163303610d50575f83815260208190526040902080546001600160a01b0319166001600160a01b03831617905516907f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a05f80a3565b90600182811c92168015611b94575b6020831014611b8057565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611b75565b601f8211611bab57505050565b5f5260205f20906020601f840160051c83019310611be3575b601f0160051c01905b818110611bd8575050565b5f8155600101611bcd565b9091508190611bc4565b815181546020808501516601000000000000600160d01b0360309190911b166001600160d01b031990921665ffffffffffff909316929092171782556040909201518051909392600192830192906001600160401b0383116118cc57611c5d83611c578654611b66565b86611b9e565b602091601f8411600114611c9f5750508190611c909394955f92611c94575b50508160011b915f199060031b1c19161790565b9055565b015190505f80611c7c565b95601f92919219841696611cb6865f5260205f2090565b935f915b898310611cf25750505083600195969710611cda575b505050811b019055565b01515f1960f88460031b161c191690555f8080611cd0565b838501518655948501949381019391810191611cba565b9291611d4265ffffffffffff9460405193611d23856118d1565b42871685526001600160a01b039093166020850190815292369161195e565b9081604084015251611d976048604051809360208201953360601b8752611d73815180926020603487019101610d62565b8201906001600160601b03199060601b166034820152036028810184520182611923565b51902092611dbc611db0855f52600260205260405f2090565b5465ffffffffffff1690565b16611e0457611ddc90611dd7845f52600260205260405f2090565b611bed565b33827fd16733fb8c2a502f4e1d1d63970cbab355e37ff6d6d12a215b7d0197ea5535f45f80a3565b604051635988c65560e11b815260048101849052602490fd5b6001600160401b0381116118cc5760051b60200190565b60405190611e41826118ec565b5f60e0838281528260208201528260408201528260608201528260808201528260a08201528260c08201520152565b90611e7a82611e1d565b611e876040519182611923565b8281528092611e98601f1991611e1d565b01905f5b828110611ea857505050565b602090611eb3611e34565b82828501015201611e9c565b8051156119c05760200190565b80518210156119c05760209160051b010190565b90604051611eed816118ec565b60e060048294611f5863ffffffff8254611f4565ffffffffffff611f1b8184168a9065ffffffffffff169052565b65ffffffffffff603084901c82161660208a01528260601c16604089019065ffffffffffff169052565b60901c16606086019063ffffffff169052565b60018101546001600160a01b0316608085015260028101546001600160a01b031660a085015260038101546001600160a01b031660c08501520154910152565b93929384158015612066575b15611fbb576040516305a74e6160e01b8152600490fd5b838510611ab7575f925f5b868110611fdf576040516339093e6560e21b8152600490fd5b611fed61153c8289856119c5565b946001600160a01b03908116908616116120135760405163cd0ecff160e01b8152600490fd5b61203a84612035876116368760018060a01b03165f52600460205260405f2090565b612c6e565b612056575b851561204d57600101611fc6565b50505050505050565b94612060906119df565b9461203f565b508315611fa4565b9060018201809211610b3157565b906040519161208a836118b1565b60018060a01b03928382169182825233602083015260405160208101913360601b83526001600160601b03199060601b166034820152602881526120cd816118d1565b51902093845f525f6020526120ed8160405f20541660018060a01b031690565b166121635761213c90612107855f525f60205260405f2090565b815181546001600160a01b039182166001600160a01b0319918216178355602090930151600190920180549093169116179055565b827f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a05f80a3565b604051630f5f2ba160e21b8152600490fd5b60405190612182826118d1565b60606040835f81525f60208201520152565b5f19810191908211610b3157565b6001600160a01b038082165f9081526003602052604090208054939260ff8516929083156122975761221a6121d8859495611e1d565b926121e66040519485611923565b848452601f196121f586611e1d565b01366020860137839760101c1661220b84611ebf565b6001600160a01b039091169052565b6001938401845b84811061223057505050505050565b8061229161228761227a8661163661226161225461224e8e99612194565b8c611ecc565b516001600160a01b031690565b6001600160a01b03165f90815260208990526040902090565b546001600160a01b031690565b61220b8388611ecc565b01612221565b5060609450505050565b92916122ac82611e1d565b916122ba6040519384611923565b829481845260208094019160051b810192831161027657905b8282106122e05750505050565b83809183356122ee816103cb565b8152019101906122d3565b9081602091031261027657516109d3816103cb565b908060209392818452848401375f828201840152601f01601f1916010190565b6001600160a01b0390911681526040602082018190526109d39391019161230e565b81518155602080830151600180840180546001600160a01b0319166001600160a01b039390931692909217909155939291604090600201920151938451916001600160401b0383116118cc576123aa83611c578654611b66565b602091601f84116001146123dc5750508190611c909394955f92611c945750508160011b915f199060031b1c19161790565b95601f929192198416966123f3865f5260205f2090565b935f915b8983106124165750505083600195969710611cda57505050811b019055565b8385015186559485019493810193918101916123f7565b919392909361243a612175565b506001600160a01b0383165f908152600160205260409020546124e357823b156124d15761247a9161246a611944565b9586525f6020870152369161195e565b60408401526124a28361249d8360018060a01b03165f52600160205260405f2090565b612350565b6001600160a01b03167fbc854169953f463b8509327459b9a9785beb45f6cdafdad8e75b9a33f40167685f80a2565b604051637483e90760e01b8152600490fd5b6040516345ed80e960e01b81526001600160a01b0384166004820152602490fd5b9290919493612511612175565b506001600160a01b0384165f9081526001602052604090205461255e57833b156124d15761255761247a93612544611944565b9788526001600160a01b03166020880152565b369161195e565b6040516345ed80e960e01b81526001600160a01b0385166004820152602490fd5b915490936001600160a01b0391821680151594909291856125ba575b505050505090506125a857565b604051633b0cfdad60e01b8152600490fd5b602095509561260b5f926125f998604051998a9889978896633da3df8760e21b885233600489015216602487015260806044870152608486019061122f565b8481036003190160648601529161230e565b03925af19081156105ee575f9161262a575b5015805f8080808061259b565b612643915060203d6020116105e7576105d98183611923565b5f61261d565b91908110156119c05760051b81013590607e1981360301821215610276570190565b3565ffffffffffff811681036102765790565b903590601e198136030182121561027657018035906001600160401b0382116102765760200191813603831361027657565b903590601e198136030182121561027657018035906001600160401b03821161027657602001918160051b3603831361027657565b905f5b8181106126f55750505090565b82358452602093840193909201916001016126e8565b9094939265ffffffffffff60809360a08401977fe78ff87b9693fc54b8a43c3b84702ae7bfbb7fc6235105790033913428381e1f855260018060a01b0316602085015216604083015260608201520152565b6020929190612773849282815194859201610d62565b019081520190565b906060916060925f925b8084106127f757505050506127f18160206127e39351910120926040519283916020830195866040909392919360608101947f432f54a02ff5e7b0998295a12eea6e09f826e00e15ebb49cdb5dd6914e7eadf7825260208201520152565b03601f198101835282611923565b51902090565b909192936001906128ce612881856128c28661281761153c8c838d612649565b8a6128b38d6128a761287160209861286861283d8b612837878c8b612649565b0161266b565b94612849818b8a612649565b9961285c61255760409c8d81019061267e565b8d815191012098612649565b908101906126b0565b87519a8a8c01928c9284916126e5565b0399612895601f199b8c8101835282611923565b51902086519485938a8501978861270b565b03878101835282611923565b5190209051958693840161275d565b03908101835282611923565b9401929190612785565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615612963575b6719010000000000005f52601a52603a526042601820905f603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220612946565b5f9392906001600160a01b031680612a0157505050565b90919293506040805191845f5260209283850151835282855114612aa3575b6041855114612a69575b5f606052808352630b135d3f60e11b9485825260049687830152602482019687948552815186019081604493848601925afa503d01915afa9151141690565b6060808601515f1a85528386015181526001858160805f825afa5184183d151715612a95575050612a2a565b5f9091529252509392505050565b8483015160ff81901c601b0185526001600160ff1b031660609081526001858160805f825afa5184183d151715612a95575050612a20565b92612ae581611e70565b925f945f925b808410612bc657505050505f52600260205260405f205465ffffffffffff811615612bb45760301c6001600160a01b03168015159081612b57575b50612b4557612b3f6113ad925f525f60205260405f2090565b90613898565b604051635e1d867960e01b8152600490fd5b6040516365b7641360e11b815291506020908290815f81612b7b886004830161080e565b03925af19081156105ee575f91612b95575b50155f612b26565b612bae915060203d6020116105e7576105d98183611923565b5f612b8d565b604051635f9bd90760e11b8152600490fd5b90919295612bdf612bd8888487612649565b8487613665565b9190612beb8989611ecc565b5287612c005750600190965b01929190612aeb565b80979103612c1057600190612bf7565b604051631ac80ea760e01b8152600490fd5b5463ffffffff908060301c821681831615612c67578015159081612c5d575b50612c575760601c16612c5357600190565b5f90565b50505f90565b905042115f612c41565b5050505f90565b5463ffffffff908060301c821681831615612cde578015159081612cd4575b50612c67578060601c8216612c67578215159283612cb2575b505050612c5357600190565b612ccc9350612cc09061391c565b9060901c161615151590565b5f8080612ca6565b905042115f612c8d565b505050505f90565b803590612cf2826103cb565b612d66612d3e612d046020840161266b565b6128c2612d2c612d1a612557604088018861267e565b602081519101209560608101906126b0565b604051946020860192869284916126e5565b0393612d52601f1995868101835282611923565b51902060405195869360208501988961270b565b519020906040519060208201927fe6fb0252edfa0719f65bc4b7ff11df181a55bbef752d6bacaff6f4a369160b75845260408301526060820152606081526127f181611908565b91612db9919283613665565b915f52600260205260405f205465ffffffffffff811615612bb45760301c6001600160a01b03168015159081612e09575b50612b4557612e036113ad925f525f60205260405f2090565b9061392b565b604051637949978f60e01b815291506020908290815f81612e2d886004830161139c565b03925af19081156105ee575f91612e47575b50155f612dea565b612e60915060203d6020116105e7576105d98183611923565b5f612e3f565b9091612e7181611e70565b925f925f925b808410612e9a575050505090612e97915f525f60205260405f2090613ae7565b50565b90919293612eb2612eac8684876119c5565b846139a9565b9190612ebe8789611ecc565b5285612ed35750600190945b01929190612e77565b80959103612c1057600190612eca565b6001600160a01b0381165f9081526003602052604090209092909182549360ff85169160ff8660081c169560018060a01b039060101c1691821580156130c0575b15612f3b576040516305a74e6160e01b8152600490fd5b600196808803612ff25750612f67611a87846116368560018060a01b03165f52600460205260405f2090565b612fe95792948601925f925b868410612f8c576040516339093e6560e21b8152600490fd5b6001600160a01b03165f908152602085905260409020612fb19061227a908390611636565b92612fd3611a87856116368660018060a01b03165f52600460205260405f2090565b612fdf57870192612f73565b5050505050915050565b50505050915050565b959361301b611a8785611636869795969b999b60018060a01b03165f52600460205260405f2090565b6130b0575b939085809201905b85831061303c5750505050505050611ab757565b6001600160a01b03165f9081526020829052604090206130619061227a908590611636565b91613083611a87846116368860018060a01b03165f52600460205260405f2090565b6130a0575b871561309657860191613028565b5050505050505050565b966130aa906119df565b96613088565b956130ba906119df565b95613020565b508615612f24565b6001600160a01b0381165f908152600360205260409020909391909283549460ff86169260ff8760081c169660018060a01b039060101c1691821580156132a6575b15613121576040516305a74e6160e01b8152600490fd5b6001978089036131d2575061314e84612035856116368660018060a01b03165f52600460205260405f2090565b612fdf5793958701935f925b878410613173576040516339093e6560e21b8152600490fd5b6001600160a01b03165f9081526020869052604090206131989061227a908390611636565b926131bb85612035866116368760018060a01b03165f52600460205260405f2090565b6131c75788019261315a565b505050505050915050565b95969392909197946131fc84612035846116368d60018060a01b03165f52600460205260405f2090565b613296575b9385809101915b85821061321f5750505050505050909150611ab757565b90613266856120358c61324d61227a896116368a996116369b9060018060a01b03165f5260205260405f2090565b96879160018060a01b03165f52600460205260405f2090565b613286575b871561327a5786019091613208565b50505050505050509050565b96613290906119df565b9661326b565b956132a0906119df565b95613201565b50871561310a565b906060915f915b80831061330f5750508151602092830120604080517f7d1efebd1edb795fc2fef1b96025f39b311dd4c4481a7f726342969d70b423c894810194855290810191909152606081019390935250906127f181608081016127e3565b90919260019061337d61332661153c8786886119c5565b604080517fe772c71320d83e91a3076e1414875f1affb9dbb84c39717315b34b38b9b4ef8e60208083019182526001600160a01b039490941682840152828252601f1993926128c2929091906128b3606082611923565b930191906132b5565b35613390816103cb565b604080517fe772c71320d83e91a3076e1414875f1affb9dbb84c39717315b34b38b9b4ef8e602082019081526001600160a01b03909316818301529081526133d7816118d1565b519020906040519060208201927f0c087e39c84c32f053f4f3e0086d64914296a605bd371cfe0bdca1d506aed470845260408301526060820152606081526127f181611908565b612e979161342b916139a9565b5f525f60205260405f2090613ba8565b604051613447816118b1565b60128152715268696e6573746f6e65526567697374727960701b602082015290604051613473816118b1565b6004815263076312e360e41b602082015290565b906134ab602060405183819483830196873781015f83820152038084520182611923565b5190209060405191602083019160ff60f81b83523060601b602185015260358401526055830152605582526134df82611908565b905190206001600160a01b031690565b92916134fa82611e1d565b916135086040519384611923565b829481845260208094019160051b810192831161027657905b82821061352e5750505050565b81358152908301908301613521565b8151815465ffffffffffff191665ffffffffffff919091161781559060049060e09061359f613575602083015165ffffffffffff1690565b85546bffffffffffff000000000000191660309190911b6bffffffffffff00000000000016178555565b6135d96135b5604083015165ffffffffffff1690565b855465ffffffffffff60601b191660609190911b65ffffffffffff60601b16178555565b61360d6135ed606083015163ffffffff1690565b855463ffffffff60901b191660909190911b63ffffffff60901b16178555565b60808101516001850180546001600160a01b039283166001600160a01b03199182161790915560a083015160028701805491841691831691909117905560c08301516003870180549190931691161790550151910155565b929061366f611e34565b5065ffffffffffff8061368d611db0875f52600260205260405f2090565b1615612bb45780421694602085016136b26136a78261266b565b65ffffffffffff1690565b151580613884575b613872576136c7866119d5565b926136e6856116368660018060a01b03165f52600460205260405f2090565b549080821615159182613864575b5050613852576001600160a01b0383165f9081526001602052604090205495861561383157906137ba7ff68f1df3d74509783e9300e8637b046836c091fd39cdcd33b14b0ffdf6940d62926137a761377e61377961377261376761376161375b8c8e613c38565b87613c8a565b9761266b565b9460608101906126b0565b36916134ef565b613ce8565b9161379861378a611951565b65ffffffffffff909d168d52565b65ffffffffffff1660208c0152565b5f60408b015263ffffffff1660608a0152565b6001600160a01b03841660808901526001600160a01b03851660a08901526001600160a01b03811660c08901528260e08901526138148861380f876116368860018060a01b03165f52600460205260405f2090565b61353d565b6040519283526001600160a01b03908116948116931691602090a4565b604051634eb2dcd760e01b81526001600160a01b0385166004820152602490fd5b6040516335d9080560e01b8152600490fd5b60601c161590505f806136f4565b6040516308e8b93760e01b8152600490fd5b5086836138908361266b565b1611156136ba565b90546001600160a01b03168015613918576138cd6020915f936040519485809481936367b14e7760e11b83526004830161080e565b03925af19081156105ee575f916138f9575b50156138e757565b604051635b0ae41f60e01b8152600490fd5b613912915060203d6020116105e7576105d98183611923565b5f6138df565b5050565b60ff8111610b31576001901b90565b90546001600160a01b03168015159182613948575b50506138e757565b6020919250610104613971915f60405195869485936334c85d0760e01b85526004850190610797565b5af19081156105ee575f9161398a575b50155f80613940565b6139a3915060203d6020116105e7576105d98183611923565b5f613981565b916139b2611e34565b506139dc836116366139c3856119d5565b6001600160a01b03165f90815260046020526040902090565b6139e581611ee0565b93613a0b6139f2856119d5565b6001600160a01b03165f90815260016020526040902090565b5460c08601519094906001600160a01b031615613ad55760a08601516001600160a01b0392831693908316849003610d505765ffffffffffff9182613a5960408a015165ffffffffffff1690565b16613ac357815465ffffffffffff60601b19164290931660601b65ffffffffffff60601b169290921790557feee7de70b290c411a060d8bb9b1cba152a40d74147fef0974d7c2b25ac9b718a90613aaf906119d5565b60e0870151604051908152921691602090a3565b60405163905e710760e01b8152600490fd5b60405163120a2e7760e01b8152600490fd5b90546001600160a01b0316905f90828015613b9f57613b206020915f93604051948580948193636ac403ff60e11b83526004830161080e565b03925af15f9181613b7e575b50613b6e5750506040516001600160a01b039190911681527fbab8c8262d5baeb21d73c5944504fb6c26d6eb88d29af8653bd3382ad8fe56a990602090a15f90565b90929150613b7857565b60019150565b613b9891925060203d6020116105e7576105d98183611923565b905f613b2c565b50505050600190565b90546001600160a01b0316905f90828015613b9f57613b206020915f93604051948580948193638b6e59ff60e01b83526004830161139c565b906001809280516002811015613bf657505050565b90829160051b8101906020809101925b613c11575b50505050565b828192939496505193019283511194828418860215613c335792919083613c06565b613c0b565b6040519060208201926001600160601b0319809260601b16845260601b1660348201524260488201524660688201526068815260a081018181106001600160401b038211176118cc5760405251902090565b612557613c9b91604081019061267e565b908151906001820161ffff8160401b6bfd61000080600a3d393df300179111840152600b8201601584015ff5918215613cdb57526001600160a01b031690565b63301164255f526004601cfd5b80515f905f925b818410613d0357505063ffffffff91501690565b9091613d0f8483611ecc565b5190601f82118015613d5c575b613d4a57613d329163ffffffff8093819261391c565b16911601908111610b31576001909301929190613cef565b604051631092ef5760e11b8152600490fd5b5063ffffffff613d6b8361391c565b8216161515613d1c56fea26469706673582212208081e0a7045c94dd75db551d145cface245f39bc8924861820d2bdf286b7667964736f6c63430008180033608080604052346100165761012b908161001b8239f35b5f80fdfe608060049081361015600f575f80fd5b5f3560e01c636c26d548146021575f80fd5b604036600319011260df578135916001600160a01b038084169290919083850360df5760249485359067ffffffffffffffff9283831160df573660238401121560df57828501359380851160e357601f8501601f19908116603f011682019081118282101760e35760405283815260208101903689868601011160df575f60208681978c849801863783010152519134905af1925f51931560c9576020848460405191168152f35b6040516301b3a38360e21b815291820152839150fd5b5f80fd5b88604187634e487b7160e01b5f52525ffdfea264697066735822122043c5ee3ffdfaacf0d8814f6a54f157d0ee42a3f6069f4f63772c86dbc052148d64736f6c63430008180033", + "sourceMap": "3828:53:62:-:0;;;;;;;;-1:-1:-1;;;;;3068:23:65;;;;;;;;;;;;;;;;;;;;;;;;;;;3047:44;;2157:4:53;2119:45;;2191:13;2174:30;;3828:53:62;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;3828:53:62;;;;;;;;;;;;;;;;;;;;;2119:45:53;3828:53:62;;;;;;;;-1:-1:-1;;;3828:53:62;;;2431:22:53;;2545:25;;2580:26;;;;2616:32;;;;;2786:379;;;;;;3828:53:62;2786:379:53;;;;;;;2191:13;3828:53:62;2786:379:53;;;2157:4;3047:44:65;2786:379:53;;;;3184:34;;;;;3828:53:62;;;;;;;;3047:44:65;3828:53:62;;;;;2119:45:53;3828:53:62;;;;;2174:30:53;3828:53:62;;;;;2580:26:53;3828:53:62;;;;;;;;;;;;;;;;;;;;3068:23:65;3828:53:62;;;;;3068:23:65;3828:53:62;3068:23:65;3828:53:62;;;3068:23:65;3828:53:62;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x60806040526004361015610011575f80fd5b5f3560e01c806303b79c841461024457806304a1f2981461023f5780630bb30abc1461023a5780631896f70a146102355780631d4d98101461023057806329757d371461022b5780632b30c899146102265780632ed94467146102215780634990a6821461021c5780634c13560c146102175780634ece78ca14610212578063529562a11461020d57806355f47dde14610208578063617734d01461020357806370d2af24146101fe57806371c61a2b146101f957806377efcab4146101f45780637cb2afd8146101ef57806384b0196e146101ea57806388dc678d146101e55780638e6ec824146101e0578063945e3641146101db57806396fb7217146101d65780639f3e1b53146101d1578063b060cb1e146101cc578063b50b706b146101c7578063b65d1012146101c2578063b6b791a1146101bd578063c23697a8146101b8578063d9048624146101b3578063dd0fd278146101ae578063e14f3d32146101a9578063f05c04e1146101a4578063f095ec1b1461019f5763f190e2b11461019a575f80fd5b6116e8565b611698565b6114b9565b611478565b611407565b6113af565b611376565b61126f565b6111f2565b6111b7565b6110b2565b610fd7565b610fad565b610f71565b610ee9565b610e47565b610da8565b610cb6565b610c93565b610c28565b610bd1565b610b6e565b610abc565b610a87565b6109ed565b6109d6565b610974565b610926565b610857565b6106f3565b6105f3565b61051c565b6104d2565b61040c565b61027a565b9181601f84011215610276578235916001600160401b038311610276576020838186019501011161027657565b5f80fd5b60a03660031901126102765760046001600160401b036024358235604435838111610276576102ac9036908601610249565b929093606435818111610276576102c69036908801610249565b929091608435908111610276576102e09036908901610249565b979095825f525f60205260405f209560018060a01b039182600189015416156103b357338260601c14158061039b575b61038a579061032d81836103278d8796369161195e565b9c613487565b9980519060200134f598169088160361037b575061035861035d959361037798959388933385612504565b61257f565b6040516001600160a01b0390911681529081906020820190565b0390f35b60405163e6c4247b60e01b8152fd5b6040516381e69d9b60e01b81528490fd5b506bffffffffffffffffffffffff1982161515610310565b60405163f184406b60e01b8152808501869052602490fd5b6001600160a01b0381160361027657565b9181601f84011215610276578235916001600160401b038311610276576020808501948460051b01011161027657565b3461027657608036600319011261027657602435610429816103cb565b6001600160401b03604435818111610276576104499036906004016103dc565b91606435908111610276576104a56104686104ac923690600401610249565b919060018060a01b0387165f52600560205261049d61049860405f2061048e815461188f565b809155888861277b565b6128d8565b92369161195e565b90856129ea565b156104c0576104be9260043590612adb565b005b604051638baa579f60e01b8152600490fd5b34610276576060366003190112610276576004356104ef816103cb565b602435906001600160401b038211610276576105126104be9236906004016103dc565b90604435926119eb565b3461027657604036600319011261027657602435610539816103cb565b6001600160a01b0381168015908115610581575b5061055e576104be90600435611af4565b60405163f9492e7560e01b81526001600160a01b03919091166004820152602490fd5b6040516301ffc9a760e01b81526314f0f87d60e21b60048201529150602090829060249082905afa9081156105ee575f916105bf575b50155f61054d565b6105e1915060203d6020116105e7575b6105d98183611923565b810190611ad1565b5f6105b7565b503d6105cf565b611ae9565b34610276576040366003190112610276576004356001600160401b03811161027657610623903690600401610249565b60243591610630836103cb565b6001600160a01b0383168015159081610688575b5061066757916106579161037793611d09565b6040519081529081906020820190565b604051630f09140760e01b81526001600160a01b0384166004820152602490fd5b6040516301ffc9a760e01b815263b2275fa960e01b60048201529150602090829060249082905afa9081156105ee575f916106c6575b50155f610644565b6106df915060203d6020116105e7576105d98183611923565b5f6106be565b908160809103126102765790565b3461027657608036600319011261027657602435610710816103cb565b6001600160401b03604435818111610276576107309036906004016106e5565b906064359081116102765761077e61074f610785923690600401610249565b919060018060a01b0386165f52600560205261049d61049860405f20610775815461188f565b80915587612ce6565b90846129ea565b156104c0576104be9160043590612dad565b60e0809165ffffffffffff808251168552806020830151166020860152604082015116604085015263ffffffff6060820151166060850152608081015160018060a01b03809116608086015260a08201511660a085015261080760c082015160c086019060018060a01b03169052565b0151910152565b60209060206040818301928281528551809452019301915f5b828110610835575050505090565b90919293826101008261084b6001948951610797565b01950193929101610827565b3461027657604080600319360112610276576004803590610877826103cb565b6024356001600160401b0381116102765791610898849336906004016103dc565b9390926108a485611e70565b946001600160a01b03909316925f5b8181106108c85760405180610377898261080e565b8061090a6109056108dc600194868b6119c5565b356108e6816103cb565b885f5286602052875f209060018060a01b03165f5260205260405f2090565b611ee0565b610914828a611ecc565b5261091f8189611ecc565b50016108b3565b3461027657608036600319011261027657600435610943816103cb565b604435906001600160401b038211610276576109666104be9236906004016103dc565b906064359260243590611f98565b34610276576020366003190112610276576004356001600160401b038111610276576109a76104be9136906004016103dc565b9033612e66565b6040906003190112610276576004356109c6816103cb565b906024356109d3816103cb565b90565b34610276576104be6109e7366109ae565b90612ee3565b3461027657606036600319011261027657600435610a0a816103cb565b6001600160401b0360243581811161027657610a2a9036906004016103dc565b91604435908111610276576104a5610a49610a79923690600401610249565b919060018060a01b0387165f52600560205261049d61049860405f20610a6f815461188f565b80915588886132ae565b156104c0576104be92612e66565b34610276576060366003190112610276576104be600435610aa7816103cb565b602435610ab3816103cb565b604435916130c8565b34610276576040366003190112610276576004356001600160401b03811161027657610aec9036906004016106e5565b602435610af8816103cb565b6001600160a01b03165f9081526005602052604090205460018101908110610b3157610498610b2991602093612ce6565b604051908152f35b61187b565b604060031982011261027657600435906001600160401b03821161027657610b60916004016103dc565b90916024356109d3816103cb565b3461027657610b7c36610b36565b6001600160a01b03165f908152600560205260409020546001810192908310610b3157602092610b2992610498926132ae565b602090600319011261027657600490565b602090602319011261027657602490565b3461027657604036600319011261027657610beb36610baf565b602435610bf7816103cb565b6001600160a01b03165f9081526005602052604090205460018101908110610b3157610498610b2991602093613386565b34610276576020366003190112610276575f6020604051610c48816118b1565b82815201526004355f525f6020526040805f208151610c66816118b1565b81546001600160a01b03908116808352600190930154811660209283019081528451938452511690820152f35b34610276576020366003190112610276576104be610cb036610baf565b3361341e565b3461027657604036600319011261027657600435602435610cd6816103cb565b5f828152602081905260409020600101546001600160a01b039081163303610d50575f8381526020818152604090912060010180546001600160a01b0319166001600160a01b0385161790557f7a2c54badf601a71ed23c3ec8c070bac418dfd4fb160e0351861983746662d7792909160405191168152a2005b604051634ca8886760e01b8152600490fd5b5f5b838110610d735750505f910152565b8181015183820152602001610d64565b90602091610d9c81518092818552858086019101610d62565b601f01601f1916010190565b34610276575f36600319011261027657610df6610dc361343b565b90604051928392600f60f81b8452610de860209360e0602087015260e0860190610d83565b908482036040860152610d83565b904660608401523060808401525f60a084015282820360c084015260206060519283815201916080915f5b828110610e3057505050500390f35b835185528695509381019392810192600101610e21565b3461027657608036600319011261027657600435602435610e67816103cb565b6001600160401b0360443581811161027657610e87903690600401610249565b9160643590811161027657610ea0903690600401610249565b939092855f525f60205260405f209260018060a01b0360018501541615610ed05790610358916104be978461242d565b60405163f184406b60e01b815260048101889052602490fd5b3461027657606036600319011261027657600435610f06816103cb565b610f0f36610bc0565b6044356001600160401b0381116102765761077e610f34610f63923690600401610249565b919060018060a01b0386165f52600560205261049d61049860405f20610f5a815461188f565b80915587613386565b156104c0576104be9161341e565b34610276576040366003190112610276576024356001600160401b03811161027657610fa46104be9136906004016106e5565b60043533612dad565b34610276576040366003190112610276576104be600435610fcd816103cb565b60243590336130c8565b3461027657602036600319011261027657600435610ff4816103cb565b6001600160a01b0381168015908115611019575b5061055e576106576103779161207c565b6040516301ffc9a760e01b81526314f0f87d60e21b60048201529150602090829060249082905afa9081156105ee575f91611057575b50155f611008565b611070915060203d6020116105e7576105d98183611923565b5f61104f565b608060406109d3936020845265ffffffffffff815116602085015260018060a01b03602082015116828501520151916060808201520190610d83565b3461027657602080600319360112610276576110cc612175565b506004355f526002815260405f2090604051906110e8826118d1565b825465ffffffffffff8116835260301c6001600160a01b031681830152604051600193840180545f95929392909161111f83611b66565b80865292600181169081156111955750600114611159575b6103778686611148818b0382611923565b604082015260405191829182611076565b5f908152838120939650925b82841061118257505050816103779461114892820101945f611137565b8054858501880152928601928101611165565b60ff191686860152505050151560051b8201019250611148816103775f611137565b34610276576020366003190112610276576004356111d4816103cb565b60018060a01b03165f526005602052602060405f2054604051908152f35b34610276576040366003190112610276576024356001600160401b038111610276576112256104be9136906004016103dc565b9060043533612adb565b90606060406109d3938051845260018060a01b0360208201511660208501520151918160408201520190610d83565b9060206109d392818152019061122f565b34610276576020806003193601126102765760043561128d816103cb565b611295612175565b5060018060a01b038091165f5260019160018152600260405f20604051936112bc856118d1565b81548552600182015416838501520190604051915f948154916112de83611b66565b80865292600181169081156113545750600114611318575b6103778686611307818b0382611923565b60408201526040519182918261125e565b5f908152838120939650925b82841061134157505050816103779461130792820101945f6112f6565b8054858501880152928601928101611324565b60ff191686860152505050151560051b8201019250611307816103775f6112f6565b34610276576020366003190112610276576104be600435611396816103cb565b33612ee3565b610100810192916113ad9190610797565b565b34610276576101006113f86109056113c6366109ae565b906113cf611e34565b5060018060a01b03165f52600460205260405f209060018060a01b03165f5260205260405f2090565b6114056040518092610797565bf35b34610276576020806003193601126102765761142d600435611428816103cb565b6121a2565b90604051918183928301818452825180915281604085019301915f5b82811061145857505050500390f35b83516001600160a01b031685528695509381019392810192600101611449565b346102765761148636610b36565b6001600160a01b03165f908152600560205260409020546001810192908310610b3157602092610b29926104989261277b565b3461027657604036600319011261027657600480359060ff821691828103610276576024356001600160401b038111610276576114f990369084016103dc565b91909261151661151261150d3686886122a1565b613be1565b1590565b61167f578215801561168e575b61167f576001600160a01b0361154161153c85876119b7565b6119d5565b161561167f57335f908152600360205260409020839095116116705750835460ff831661ffff199091161760089190911b61ff0016178355906115ae61158a61153c84846119b7565b845462010000600160b01b03191660109190911b62010000600160b01b0316178455565b6115b7826119df565b915f916001809501925b8481106115ef57337ff689fb4afceb60ac48a5ca8113a5a57cb15e51d317f0ec57e07340192d9fb4595f80a2005b8061166a61160261153c899487876119c5565b61164b61161b61153c6116148661206e565b89896119c5565b6001600160a01b039092165f90815260208990526040902033905b9060018060a01b03165f5260205260405f2090565b80546001600160a01b0319166001600160a01b03909216919091179055565b016115c1565b60405163aabd5a0960e01b8152fd5b60405163cd0ecff160e01b8152fd5b5060ff8311611523565b34610276576040366003190112610276576024356001600160401b038111610276576116d66116cd6020923690600401610249565b60043591613487565b6040516001600160a01b039091168152f35b60a03660031901126102765760048035611701816103cb565b6001600160401b03602435818111610276576117209036908501610249565b93604435838111610276576117389036908301610249565b949060643594608435908111610276576117559036908501610249565b949093611769875f525f60205260405f2090565b600181015490946001600160a01b0392909183161561185f573083831614611838579060209392916117af6040519c8d9586948594630d84daa960e31b8652850161232e565b039134907f0000000000000000000000000000000000000000000000000000000000000000165af19485156105ee57610377975f966117fb575b50859686926103589261035d9861242d565b61035d96509661182761035892939860203d602011611831575b61181f8183611923565b8101906122f9565b96509691906117e9565b503d611815565b6040516301b3a38360e21b81526001600160a01b0390921690820190815281906020010390fd5b60405163f184406b60e01b815290810189815281906020010390fd5b634e487b7160e01b5f52601160045260245ffd5b5f198114610b315760010190565b634e487b7160e01b5f52604160045260245ffd5b604081019081106001600160401b038211176118cc57604052565b61189d565b606081019081106001600160401b038211176118cc57604052565b61010081019081106001600160401b038211176118cc57604052565b608081019081106001600160401b038211176118cc57604052565b90601f801991011681019081106001600160401b038211176118cc57604052565b604051906113ad826118d1565b604051906113ad826118ec565b9291926001600160401b0382116118cc5760405191611987601f8201601f191660200184611923565b829481845281830111610276578281602093845f960137010152565b634e487b7160e01b5f52603260045260245ffd5b90156119c05790565b6119a3565b91908110156119c05760051b0190565b356109d3816103cb565b8015610b31575f190190565b92919283158015611ac9575b15611a0e576040516305a74e6160e01b8152600490fd5b828410611ab7575f915f5b858110611a32576040516339093e6560e21b8152600490fd5b611a4061153c8288856119c5565b936001600160a01b0390811690851611611a665760405163cd0ecff160e01b8152600490fd5b611a8c611a87856116368660018060a01b03165f52600460205260405f2090565b612c22565b611aa7575b8415611a9f57600101611a19565b505050505050565b93611ab1906119df565b93611a91565b6040516339093e6560e21b8152600490fd5b5082156119f7565b90816020910312610276575180151581036102765790565b6040513d5f823e3d90fd5b5f8181526020819052604090206001015490916001600160a01b039182163303610d50575f83815260208190526040902080546001600160a01b0319166001600160a01b03831617905516907f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a05f80a3565b90600182811c92168015611b94575b6020831014611b8057565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611b75565b601f8211611bab57505050565b5f5260205f20906020601f840160051c83019310611be3575b601f0160051c01905b818110611bd8575050565b5f8155600101611bcd565b9091508190611bc4565b815181546020808501516601000000000000600160d01b0360309190911b166001600160d01b031990921665ffffffffffff909316929092171782556040909201518051909392600192830192906001600160401b0383116118cc57611c5d83611c578654611b66565b86611b9e565b602091601f8411600114611c9f5750508190611c909394955f92611c94575b50508160011b915f199060031b1c19161790565b9055565b015190505f80611c7c565b95601f92919219841696611cb6865f5260205f2090565b935f915b898310611cf25750505083600195969710611cda575b505050811b019055565b01515f1960f88460031b161c191690555f8080611cd0565b838501518655948501949381019391810191611cba565b9291611d4265ffffffffffff9460405193611d23856118d1565b42871685526001600160a01b039093166020850190815292369161195e565b9081604084015251611d976048604051809360208201953360601b8752611d73815180926020603487019101610d62565b8201906001600160601b03199060601b166034820152036028810184520182611923565b51902092611dbc611db0855f52600260205260405f2090565b5465ffffffffffff1690565b16611e0457611ddc90611dd7845f52600260205260405f2090565b611bed565b33827fd16733fb8c2a502f4e1d1d63970cbab355e37ff6d6d12a215b7d0197ea5535f45f80a3565b604051635988c65560e11b815260048101849052602490fd5b6001600160401b0381116118cc5760051b60200190565b60405190611e41826118ec565b5f60e0838281528260208201528260408201528260608201528260808201528260a08201528260c08201520152565b90611e7a82611e1d565b611e876040519182611923565b8281528092611e98601f1991611e1d565b01905f5b828110611ea857505050565b602090611eb3611e34565b82828501015201611e9c565b8051156119c05760200190565b80518210156119c05760209160051b010190565b90604051611eed816118ec565b60e060048294611f5863ffffffff8254611f4565ffffffffffff611f1b8184168a9065ffffffffffff169052565b65ffffffffffff603084901c82161660208a01528260601c16604089019065ffffffffffff169052565b60901c16606086019063ffffffff169052565b60018101546001600160a01b0316608085015260028101546001600160a01b031660a085015260038101546001600160a01b031660c08501520154910152565b93929384158015612066575b15611fbb576040516305a74e6160e01b8152600490fd5b838510611ab7575f925f5b868110611fdf576040516339093e6560e21b8152600490fd5b611fed61153c8289856119c5565b946001600160a01b03908116908616116120135760405163cd0ecff160e01b8152600490fd5b61203a84612035876116368760018060a01b03165f52600460205260405f2090565b612c6e565b612056575b851561204d57600101611fc6565b50505050505050565b94612060906119df565b9461203f565b508315611fa4565b9060018201809211610b3157565b906040519161208a836118b1565b60018060a01b03928382169182825233602083015260405160208101913360601b83526001600160601b03199060601b166034820152602881526120cd816118d1565b51902093845f525f6020526120ed8160405f20541660018060a01b031690565b166121635761213c90612107855f525f60205260405f2090565b815181546001600160a01b039182166001600160a01b0319918216178355602090930151600190920180549093169116179055565b827f335721b01866dc23fbee8b6b2c7b1e14d6f05c28cd35a2c934239f94095602a05f80a3565b604051630f5f2ba160e21b8152600490fd5b60405190612182826118d1565b60606040835f81525f60208201520152565b5f19810191908211610b3157565b6001600160a01b038082165f9081526003602052604090208054939260ff8516929083156122975761221a6121d8859495611e1d565b926121e66040519485611923565b848452601f196121f586611e1d565b01366020860137839760101c1661220b84611ebf565b6001600160a01b039091169052565b6001938401845b84811061223057505050505050565b8061229161228761227a8661163661226161225461224e8e99612194565b8c611ecc565b516001600160a01b031690565b6001600160a01b03165f90815260208990526040902090565b546001600160a01b031690565b61220b8388611ecc565b01612221565b5060609450505050565b92916122ac82611e1d565b916122ba6040519384611923565b829481845260208094019160051b810192831161027657905b8282106122e05750505050565b83809183356122ee816103cb565b8152019101906122d3565b9081602091031261027657516109d3816103cb565b908060209392818452848401375f828201840152601f01601f1916010190565b6001600160a01b0390911681526040602082018190526109d39391019161230e565b81518155602080830151600180840180546001600160a01b0319166001600160a01b039390931692909217909155939291604090600201920151938451916001600160401b0383116118cc576123aa83611c578654611b66565b602091601f84116001146123dc5750508190611c909394955f92611c945750508160011b915f199060031b1c19161790565b95601f929192198416966123f3865f5260205f2090565b935f915b8983106124165750505083600195969710611cda57505050811b019055565b8385015186559485019493810193918101916123f7565b919392909361243a612175565b506001600160a01b0383165f908152600160205260409020546124e357823b156124d15761247a9161246a611944565b9586525f6020870152369161195e565b60408401526124a28361249d8360018060a01b03165f52600160205260405f2090565b612350565b6001600160a01b03167fbc854169953f463b8509327459b9a9785beb45f6cdafdad8e75b9a33f40167685f80a2565b604051637483e90760e01b8152600490fd5b6040516345ed80e960e01b81526001600160a01b0384166004820152602490fd5b9290919493612511612175565b506001600160a01b0384165f9081526001602052604090205461255e57833b156124d15761255761247a93612544611944565b9788526001600160a01b03166020880152565b369161195e565b6040516345ed80e960e01b81526001600160a01b0385166004820152602490fd5b915490936001600160a01b0391821680151594909291856125ba575b505050505090506125a857565b604051633b0cfdad60e01b8152600490fd5b602095509561260b5f926125f998604051998a9889978896633da3df8760e21b885233600489015216602487015260806044870152608486019061122f565b8481036003190160648601529161230e565b03925af19081156105ee575f9161262a575b5015805f8080808061259b565b612643915060203d6020116105e7576105d98183611923565b5f61261d565b91908110156119c05760051b81013590607e1981360301821215610276570190565b3565ffffffffffff811681036102765790565b903590601e198136030182121561027657018035906001600160401b0382116102765760200191813603831361027657565b903590601e198136030182121561027657018035906001600160401b03821161027657602001918160051b3603831361027657565b905f5b8181106126f55750505090565b82358452602093840193909201916001016126e8565b9094939265ffffffffffff60809360a08401977fe78ff87b9693fc54b8a43c3b84702ae7bfbb7fc6235105790033913428381e1f855260018060a01b0316602085015216604083015260608201520152565b6020929190612773849282815194859201610d62565b019081520190565b906060916060925f925b8084106127f757505050506127f18160206127e39351910120926040519283916020830195866040909392919360608101947f432f54a02ff5e7b0998295a12eea6e09f826e00e15ebb49cdb5dd6914e7eadf7825260208201520152565b03601f198101835282611923565b51902090565b909192936001906128ce612881856128c28661281761153c8c838d612649565b8a6128b38d6128a761287160209861286861283d8b612837878c8b612649565b0161266b565b94612849818b8a612649565b9961285c61255760409c8d81019061267e565b8d815191012098612649565b908101906126b0565b87519a8a8c01928c9284916126e5565b0399612895601f199b8c8101835282611923565b51902086519485938a8501978861270b565b03878101835282611923565b5190209051958693840161275d565b03908101835282611923565b9401929190612785565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615612963575b6719010000000000005f52601a52603a526042601820905f603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220612946565b5f9392906001600160a01b031680612a0157505050565b90919293506040805191845f5260209283850151835282855114612aa3575b6041855114612a69575b5f606052808352630b135d3f60e11b9485825260049687830152602482019687948552815186019081604493848601925afa503d01915afa9151141690565b6060808601515f1a85528386015181526001858160805f825afa5184183d151715612a95575050612a2a565b5f9091529252509392505050565b8483015160ff81901c601b0185526001600160ff1b031660609081526001858160805f825afa5184183d151715612a95575050612a20565b92612ae581611e70565b925f945f925b808410612bc657505050505f52600260205260405f205465ffffffffffff811615612bb45760301c6001600160a01b03168015159081612b57575b50612b4557612b3f6113ad925f525f60205260405f2090565b90613898565b604051635e1d867960e01b8152600490fd5b6040516365b7641360e11b815291506020908290815f81612b7b886004830161080e565b03925af19081156105ee575f91612b95575b50155f612b26565b612bae915060203d6020116105e7576105d98183611923565b5f612b8d565b604051635f9bd90760e11b8152600490fd5b90919295612bdf612bd8888487612649565b8487613665565b9190612beb8989611ecc565b5287612c005750600190965b01929190612aeb565b80979103612c1057600190612bf7565b604051631ac80ea760e01b8152600490fd5b5463ffffffff908060301c821681831615612c67578015159081612c5d575b50612c575760601c16612c5357600190565b5f90565b50505f90565b905042115f612c41565b5050505f90565b5463ffffffff908060301c821681831615612cde578015159081612cd4575b50612c67578060601c8216612c67578215159283612cb2575b505050612c5357600190565b612ccc9350612cc09061391c565b9060901c161615151590565b5f8080612ca6565b905042115f612c8d565b505050505f90565b803590612cf2826103cb565b612d66612d3e612d046020840161266b565b6128c2612d2c612d1a612557604088018861267e565b602081519101209560608101906126b0565b604051946020860192869284916126e5565b0393612d52601f1995868101835282611923565b51902060405195869360208501988961270b565b519020906040519060208201927fe6fb0252edfa0719f65bc4b7ff11df181a55bbef752d6bacaff6f4a369160b75845260408301526060820152606081526127f181611908565b91612db9919283613665565b915f52600260205260405f205465ffffffffffff811615612bb45760301c6001600160a01b03168015159081612e09575b50612b4557612e036113ad925f525f60205260405f2090565b9061392b565b604051637949978f60e01b815291506020908290815f81612e2d886004830161139c565b03925af19081156105ee575f91612e47575b50155f612dea565b612e60915060203d6020116105e7576105d98183611923565b5f612e3f565b9091612e7181611e70565b925f925f925b808410612e9a575050505090612e97915f525f60205260405f2090613ae7565b50565b90919293612eb2612eac8684876119c5565b846139a9565b9190612ebe8789611ecc565b5285612ed35750600190945b01929190612e77565b80959103612c1057600190612eca565b6001600160a01b0381165f9081526003602052604090209092909182549360ff85169160ff8660081c169560018060a01b039060101c1691821580156130c0575b15612f3b576040516305a74e6160e01b8152600490fd5b600196808803612ff25750612f67611a87846116368560018060a01b03165f52600460205260405f2090565b612fe95792948601925f925b868410612f8c576040516339093e6560e21b8152600490fd5b6001600160a01b03165f908152602085905260409020612fb19061227a908390611636565b92612fd3611a87856116368660018060a01b03165f52600460205260405f2090565b612fdf57870192612f73565b5050505050915050565b50505050915050565b959361301b611a8785611636869795969b999b60018060a01b03165f52600460205260405f2090565b6130b0575b939085809201905b85831061303c5750505050505050611ab757565b6001600160a01b03165f9081526020829052604090206130619061227a908590611636565b91613083611a87846116368860018060a01b03165f52600460205260405f2090565b6130a0575b871561309657860191613028565b5050505050505050565b966130aa906119df565b96613088565b956130ba906119df565b95613020565b508615612f24565b6001600160a01b0381165f908152600360205260409020909391909283549460ff86169260ff8760081c169660018060a01b039060101c1691821580156132a6575b15613121576040516305a74e6160e01b8152600490fd5b6001978089036131d2575061314e84612035856116368660018060a01b03165f52600460205260405f2090565b612fdf5793958701935f925b878410613173576040516339093e6560e21b8152600490fd5b6001600160a01b03165f9081526020869052604090206131989061227a908390611636565b926131bb85612035866116368760018060a01b03165f52600460205260405f2090565b6131c75788019261315a565b505050505050915050565b95969392909197946131fc84612035846116368d60018060a01b03165f52600460205260405f2090565b613296575b9385809101915b85821061321f5750505050505050909150611ab757565b90613266856120358c61324d61227a896116368a996116369b9060018060a01b03165f5260205260405f2090565b96879160018060a01b03165f52600460205260405f2090565b613286575b871561327a5786019091613208565b50505050505050509050565b96613290906119df565b9661326b565b956132a0906119df565b95613201565b50871561310a565b906060915f915b80831061330f5750508151602092830120604080517f7d1efebd1edb795fc2fef1b96025f39b311dd4c4481a7f726342969d70b423c894810194855290810191909152606081019390935250906127f181608081016127e3565b90919260019061337d61332661153c8786886119c5565b604080517fe772c71320d83e91a3076e1414875f1affb9dbb84c39717315b34b38b9b4ef8e60208083019182526001600160a01b039490941682840152828252601f1993926128c2929091906128b3606082611923565b930191906132b5565b35613390816103cb565b604080517fe772c71320d83e91a3076e1414875f1affb9dbb84c39717315b34b38b9b4ef8e602082019081526001600160a01b03909316818301529081526133d7816118d1565b519020906040519060208201927f0c087e39c84c32f053f4f3e0086d64914296a605bd371cfe0bdca1d506aed470845260408301526060820152606081526127f181611908565b612e979161342b916139a9565b5f525f60205260405f2090613ba8565b604051613447816118b1565b60128152715268696e6573746f6e65526567697374727960701b602082015290604051613473816118b1565b6004815263076312e360e41b602082015290565b906134ab602060405183819483830196873781015f83820152038084520182611923565b5190209060405191602083019160ff60f81b83523060601b602185015260358401526055830152605582526134df82611908565b905190206001600160a01b031690565b92916134fa82611e1d565b916135086040519384611923565b829481845260208094019160051b810192831161027657905b82821061352e5750505050565b81358152908301908301613521565b8151815465ffffffffffff191665ffffffffffff919091161781559060049060e09061359f613575602083015165ffffffffffff1690565b85546bffffffffffff000000000000191660309190911b6bffffffffffff00000000000016178555565b6135d96135b5604083015165ffffffffffff1690565b855465ffffffffffff60601b191660609190911b65ffffffffffff60601b16178555565b61360d6135ed606083015163ffffffff1690565b855463ffffffff60901b191660909190911b63ffffffff60901b16178555565b60808101516001850180546001600160a01b039283166001600160a01b03199182161790915560a083015160028701805491841691831691909117905560c08301516003870180549190931691161790550151910155565b929061366f611e34565b5065ffffffffffff8061368d611db0875f52600260205260405f2090565b1615612bb45780421694602085016136b26136a78261266b565b65ffffffffffff1690565b151580613884575b613872576136c7866119d5565b926136e6856116368660018060a01b03165f52600460205260405f2090565b549080821615159182613864575b5050613852576001600160a01b0383165f9081526001602052604090205495861561383157906137ba7ff68f1df3d74509783e9300e8637b046836c091fd39cdcd33b14b0ffdf6940d62926137a761377e61377961377261376761376161375b8c8e613c38565b87613c8a565b9761266b565b9460608101906126b0565b36916134ef565b613ce8565b9161379861378a611951565b65ffffffffffff909d168d52565b65ffffffffffff1660208c0152565b5f60408b015263ffffffff1660608a0152565b6001600160a01b03841660808901526001600160a01b03851660a08901526001600160a01b03811660c08901528260e08901526138148861380f876116368860018060a01b03165f52600460205260405f2090565b61353d565b6040519283526001600160a01b03908116948116931691602090a4565b604051634eb2dcd760e01b81526001600160a01b0385166004820152602490fd5b6040516335d9080560e01b8152600490fd5b60601c161590505f806136f4565b6040516308e8b93760e01b8152600490fd5b5086836138908361266b565b1611156136ba565b90546001600160a01b03168015613918576138cd6020915f936040519485809481936367b14e7760e11b83526004830161080e565b03925af19081156105ee575f916138f9575b50156138e757565b604051635b0ae41f60e01b8152600490fd5b613912915060203d6020116105e7576105d98183611923565b5f6138df565b5050565b60ff8111610b31576001901b90565b90546001600160a01b03168015159182613948575b50506138e757565b6020919250610104613971915f60405195869485936334c85d0760e01b85526004850190610797565b5af19081156105ee575f9161398a575b50155f80613940565b6139a3915060203d6020116105e7576105d98183611923565b5f613981565b916139b2611e34565b506139dc836116366139c3856119d5565b6001600160a01b03165f90815260046020526040902090565b6139e581611ee0565b93613a0b6139f2856119d5565b6001600160a01b03165f90815260016020526040902090565b5460c08601519094906001600160a01b031615613ad55760a08601516001600160a01b0392831693908316849003610d505765ffffffffffff9182613a5960408a015165ffffffffffff1690565b16613ac357815465ffffffffffff60601b19164290931660601b65ffffffffffff60601b169290921790557feee7de70b290c411a060d8bb9b1cba152a40d74147fef0974d7c2b25ac9b718a90613aaf906119d5565b60e0870151604051908152921691602090a3565b60405163905e710760e01b8152600490fd5b60405163120a2e7760e01b8152600490fd5b90546001600160a01b0316905f90828015613b9f57613b206020915f93604051948580948193636ac403ff60e11b83526004830161080e565b03925af15f9181613b7e575b50613b6e5750506040516001600160a01b039190911681527fbab8c8262d5baeb21d73c5944504fb6c26d6eb88d29af8653bd3382ad8fe56a990602090a15f90565b90929150613b7857565b60019150565b613b9891925060203d6020116105e7576105d98183611923565b905f613b2c565b50505050600190565b90546001600160a01b0316905f90828015613b9f57613b206020915f93604051948580948193638b6e59ff60e01b83526004830161139c565b906001809280516002811015613bf657505050565b90829160051b8101906020809101925b613c11575b50505050565b828192939496505193019283511194828418860215613c335792919083613c06565b613c0b565b6040519060208201926001600160601b0319809260601b16845260601b1660348201524260488201524660688201526068815260a081018181106001600160401b038211176118cc5760405251902090565b612557613c9b91604081019061267e565b908151906001820161ffff8160401b6bfd61000080600a3d393df300179111840152600b8201601584015ff5918215613cdb57526001600160a01b031690565b63301164255f526004601cfd5b80515f905f925b818410613d0357505063ffffffff91501690565b9091613d0f8483611ecc565b5190601f82118015613d5c575b613d4a57613d329163ffffffff8093819261391c565b16911601908111610b31576001909301929190613cef565b604051631092ef5760e11b8152600490fd5b5063ffffffff613d6b8361391c565b8216161515613d1c56fea26469706673582212208081e0a7045c94dd75db551d145cface245f39bc8924861820d2bdf286b7667964736f6c63430008180033", + "sourceMap": "3828:53:62:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;3828:53:62;;;;;;;;;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;3828:53:62;;;;;-1:-1:-1;;;;;3828:53:62;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;3828:53:62;-1:-1:-1;3828:53:62;;;-1:-1:-1;3828:53:62;;;;;;;3497:23:65;;;;;3828:53:62;;3497:39:65;3493:83;;622:10:79;3828:53:62;;;596:36:79;;595:71;;;3828:53:62;591:97:79;;3828:53:62;1052:28:79;3828:53:62;;;;;;;;;:::i;:::-;1052:28:79;;:::i;:::-;1174:538;;;;3828:53:62;1174:538:79;;;3828:53:62;;;;;1808:44:79;1804:73;;622:10;3814:118:65;4101:15;622:10:79;;3828:53:62;622:10:79;;;;;;3814:118:65;;:::i;:::-;4101:15;:::i;:::-;3828:53:62;;-1:-1:-1;;;;;3828:53:62;;;;;;;;;;;;;;;;;1804:73:79;3828:53:62;;-1:-1:-1;;;1861:16:79;;;591:97;3828:53:62;;-1:-1:-1;;;675:13:79;;3828:53:62;;675:13:79;595:71;-1:-1:-1;;;3828:53:62;;638:27:79;;595:71;;3493:83:65;3828:53:62;;-1:-1:-1;;;3545:31:65;;;;;3828:53:62;;;;;3545:31:65;3828:53:62;-1:-1:-1;;;;;3828:53:62;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;3828:53:62;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;-1:-1:-1;;3828:53:62;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3828:53:62;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;2302:68:68;3828:53:62;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;3828:53:62;2193:13:68;3828:53:62;;2243:36:68;2258:20;3828:53:62;-1:-1:-1;3828:53:62;2191:25:68;3828:53:62;;2191:25:68;:::i;:::-;3828:53:62;;;2258:20:68;;;:::i;:::-;2243:36;:::i;:::-;3828:53:62;;;;:::i;:::-;2302:68:68;;;:::i;:::-;2384:6;2380:37;;2490:8;3828:53:62;;;2490:8:68;;:::i;:::-;3828:53:62;2380:37:68;3828:53:62;;-1:-1:-1;;;2399:18:68;;3828:53:62;;2399:18:68;3828:53:62;;;;;;-1:-1:-1;;3828:53:62;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;3828:53:62;;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;;;;;;-1:-1:-1;;3828:53:62;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3828:53:62;;3281:31:66;;;:99;;;;3828:53:62;3277:162:66;;;3448:1;3828:53:62;;;3448:1:66;:::i;3277:162::-;3828:53:62;;-1:-1:-1;;;3403:25:66;;-1:-1:-1;;;;;3828:53:62;;;;;3403:25:66;;3828:53:62;;;3403:25:66;3281:99;3828:53:62;;-1:-1:-1;;;3317:63:66;;-1:-1:-1;;;3828:53:62;3317:63:66;;3828:53:62;;-1:-1:-1;3828:53:62;;;;;;;;3317:63:66;;;;;;;-1:-1:-1;3317:63:66;;;3281:99;3316:64;;3281:99;;;3317:63;;;;3828:53:62;3317:63:66;3828:53:62;3317:63:66;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;:::i;3828:53:62:-;;;;;;-1:-1:-1;;3828:53:62;;;;;;-1:-1:-1;;;;;3828:53:62;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;-1:-1:-1;;;;;3828:53:62;;1226:32:67;;;;;:108;;3828:53:62;1222:179:67;;;1469:766;;;3828:53:62;1469:766:67;;:::i;:::-;3828:53:62;;;;;;;;;;;;;1222:179:67;3828:53:62;;-1:-1:-1;;;1357:33:67;;-1:-1:-1;;;;;3828:53:62;;;1357:33:67;;3828:53:62;;;3403:25:66;1226:108:67;3828:53:62;;-1:-1:-1;;;1263:71:67;;-1:-1:-1;;;3828:53:62;1263:71:67;;3828:53:62;;-1:-1:-1;3828:53:62;;;;;;;;1263:71:67;;;;;;;-1:-1:-1;1263:71:67;;;1226:108;1262:72;;1226:108;;;1263:71;;;;3828:53:62;1263:71:67;3828:53:62;1263:71:67;;;;;;;:::i;:::-;;;;3828:53:62;;;;;;;;;;:::o;:::-;;;;;;-1:-1:-1;;3828:53:62;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3828:53:62;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;1780:68:68;3828:53:62;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;3828:53:62;1672:13:68;3828:53:62;;1722:35:68;1737:19;3828:53:62;-1:-1:-1;3828:53:62;1670:25:68;3828:53:62;;1670:25:68;:::i;:::-;3828:53:62;;;1737:19:68;;:::i;3828:53:62:-;1780:68:68;;;:::i;:::-;1862:6;1858:37;;1967:7;3828:53:62;;;1967:7:68;;:::i;3828:53:62:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;3828:53:62;;;;;;;;;;;;;:::i;:::-;4432:31:63;;;;;;:::i;:::-;4478:9;-1:-1:-1;;;;;3828:53:62;;;;-1:-1:-1;4489:10:63;;;;;;3828:53:62;;;;;;;:::i;4501:3:63:-;4562:12;3828:53:62;12531:49:64;4562:12:63;3828:53:62;4562:12:63;;;;:::i;:::-;3828:53:62;;;;:::i;:::-;;-1:-1:-1;3828:53:62;;;;;-1:-1:-1;3828:53:62;;;;;;;;;;;;;;;;;12531:49:64;3828:53:62;:::i;:::-;4520:55:63;;;;:::i;:::-;;;;;;:::i;:::-;;3828:53:62;4478:9:63;;3828:53:62;;;;;;-1:-1:-1;;3828:53:62;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;3828:53:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;3828:53:62;;;;;;-1:-1:-1;;;;;3828:53:62;;;;;3876:8:63;3828:53:62;;;;;;:::i;:::-;3864:10:63;;3876:8;:::i;3828:53:62:-;;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;:::o;:::-;;;;3146:16:69;3828:53:62;;;:::i;:::-;3146:16:69;;:::i;3828:53:62:-;;;;;;-1:-1:-1;;3828:53:62;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3828:53:62;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;3278:68:68;3828:53:62;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;3828:53:62;3169:13:68;3828:53:62;;3219:36:68;3234:20;3828:53:62;-1:-1:-1;3828:53:62;3167:25:68;3828:53:62;;3167:25:68;:::i;:::-;3828:53:62;;;3234:20:68;;;:::i;3278:68::-;3360:6;3356:37;;3444:8;;;:::i;3828:53:62:-;;;;;;-1:-1:-1;;3828:53:62;;;;3532:10:69;3828:53:62;;;;;:::i;:::-;;;;;;:::i;:::-;;;3532:10:69;;:::i;3828:53:62:-;;;;;;-1:-1:-1;;3828:53:62;;;;;;-1:-1:-1;;;;;3828:53:62;;;;;;;;;;;:::i;:::-;;;;;;:::i;:::-;-1:-1:-1;;;;;3828:53:62;-1:-1:-1;3828:53:62;;;4185:13:68;3828:53:62;;;;;;;;;;;-1:-1:-1;3828:53:62;;4172:41:68;4157:57;4172:41;3828:53:62;4172:41:68;;:::i;4157:57::-;3828:53:62;;;;;;;;:::i;:::-;;-1:-1:-1;;3828:53:62;;;;;;;;-1:-1:-1;;;;;3828:53:62;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;-1:-1:-1;;;;;3828:53:62;-1:-1:-1;3828:53:62;;;4797:13:68;3828:53:62;;;;;;;;;;;;-1:-1:-1;3828:53:62;;;4783:42:68;4768:58;4783:42;;;;:::i;3828:53:62:-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;:::o;:::-;;;;;;-1:-1:-1;;3828:53:62;;;;;;;:::i;:::-;;;;;;:::i;:::-;-1:-1:-1;;;;;3828:53:62;-1:-1:-1;3828:53:62;;;4592:13:68;3828:53:62;;;;;;;;;;;-1:-1:-1;3828:53:62;;4579:41:68;4564:57;4579:41;3828:53:62;4579:41:68;;:::i;3828:53:62:-;;;;;;-1:-1:-1;;3828:53:62;;;;-1:-1:-1;3828:53:62;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;3828:53:62;-1:-1:-1;3828:53:62;;;;-1:-1:-1;3828:53:62;;;;;;:::i;:::-;;;-1:-1:-1;;;;;3828:53:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3828:53:62;;;;3716:7:63;3828:53:62;;;:::i;:::-;3704:10:63;3716:7;:::i;3828:53:62:-;;;;;;-1:-1:-1;;3828:53:62;;;;;;;;;;;:::i;:::-;-1:-1:-1;3828:53:62;;;;;;;;;;;2989:29:66;3828:53:62;-1:-1:-1;;;;;3828:53:62;;;3022:10:66;2989:43;2985:95;;-1:-1:-1;3828:53:62;;;;;;;;;;;2989:29:66;4825;3828:53:62;;-1:-1:-1;;;;;;3828:53:62;-1:-1:-1;;;;;3828:53:62;;;;;4880:31:66;;3828:53:62;;;;;;;;4880:31:66;3828:53:62;2985:95:66;3828:53:62;;-1:-1:-1;;;3055:14:66;;3828:53:62;;3055:14:66;3828:53:62;;;;;;;;-1:-1:-1;;3828:53:62;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;3828:53:62;;;;:::o;:::-;;;;;;-1:-1:-1;;3828:53:62;;;;;7385:23:53;;:::i;:::-;3828:53:62;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;7428:13:53;;3828:53:62;;;;7479:4:53;3828:53:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3828:53:62;;;;;;;;;;;;;;;;;;-1:-1:-1;;3828:53:62;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3828:53:62;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;3828:53:62;-1:-1:-1;3828:53:62;;;-1:-1:-1;3828:53:62;;;;;;;4712:23:65;;;3828:53:62;;4712:39:65;4708:83;;4831:246;;;5285:15;4831:246;;;:::i;4708:83::-;3828:53:62;;-1:-1:-1;;;4760:31:65;;3828:53:62;4760:31:65;;3828:53:62;;;;;4760:31:65;3828:53:62;;;;;;-1:-1:-1;;3828:53:62;;;;;;;;;:::i;:::-;;;;:::i;:::-;;;-1:-1:-1;;;;;3828:53:62;;;;;;2800:68:68;3828:53:62;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;3828:53:62;2692:13:68;3828:53:62;;2742:35:68;2757:19;3828:53:62;-1:-1:-1;3828:53:62;2690:25:68;3828:53:62;;2690:25:68;:::i;:::-;3828:53:62;;;2757:19:68;;:::i;2800:68::-;2882:6;2878:37;;2965:7;;;:::i;3828:53:62:-;;;;;;-1:-1:-1;;3828:53:62;;;;;;-1:-1:-1;;;;;3828:53:62;;;;;3365:7:63;3828:53:62;;;;;;:::i;:::-;;;3342:10:63;3365:7;:::i;3828:53:62:-;;;;;;-1:-1:-1;;3828:53:62;;;;3325:10:69;3828:53:62;;;;;:::i;:::-;;;3305:10:69;;3325;:::i;3828:53:62:-;;;;;;-1:-1:-1;;3828:53:62;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3828:53:62;;3281:31:66;;;:99;;;;3828:53:62;3277:162:66;;;3507:754;3828:53:62;3507:754:66;;:::i;3281:99::-;3828:53:62;;-1:-1:-1;;;3317:63:66;;-1:-1:-1;;;3828:53:62;3317:63:66;;3828:53:62;;-1:-1:-1;3828:53:62;;;;;;;;3317:63:66;;;;;;;-1:-1:-1;3317:63:66;;;3281:99;3316:64;;3281:99;;;3317:63;;;;3828:53:62;3317:63:66;3828:53:62;3317:63:66;;;;;;;:::i;:::-;;;;3828:53:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;3828:53:62;2391:7:67;3828:53:62;;;-1:-1:-1;3828:53:62;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;3828:53:62;;;;;;;;;;;;;-1:-1:-1;;3828:53:62;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;-1:-1:-1;474:1:59;;;;;;;;-1:-1:-1;;3828:53:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3828:53:62;;;;;-1:-1:-1;;;3828:53:62;;;;;;;;-1:-1:-1;3828:53:62;;;;;;;;;;;;-1:-1:-1;;3828:53:62;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;3828:53:62;1402:63:68;3828:53:62;;;;-1:-1:-1;3828:53:62;;;;;;;;;;;;;;-1:-1:-1;;3828:53:62;;;;;;-1:-1:-1;;;;;3828:53:62;;;;;3558:8:63;3828:53:62;;;;;;:::i;:::-;;;;3535:10:63;3558:8;:::i;3828:53:62:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;-1:-1:-1;3828:53:62;8698:20:65;3828:53:62;8698:20:65;3828:53:62;;;;-1:-1:-1;3828:53:62;;;;;;;:::i;:::-;;;;;8698:20:65;3828:53:62;;;;;;;;;;;;;-1:-1:-1;3828:53:62;;;;;;;:::i;:::-;;;;;8698:20:65;3828:53:62;;;8698:20:65;;;;3828:53:62;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;-1:-1:-1;474:1:59;;;;;;;;-1:-1:-1;;3828:53:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3828:53:62;;;;;-1:-1:-1;;;3828:53:62;;;;;;;;-1:-1:-1;3828:53:62;;;;;;;;;;;;-1:-1:-1;;3828:53:62;;;;2956:16:69;3828:53:62;;;;;:::i;:::-;2936:10:69;2956:16;:::i;3828:53:62:-;;;;;;;;;;:::i;:::-;:::o;:::-;;;;;;12531:49:64;3828:53:62;;;:::i;:::-;;;;:::i;:::-;;;;;;;;-1:-1:-1;3828:53:62;;;;;-1:-1:-1;3828:53:62;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3828:53:62;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3828:53:62;;;;;-1:-1:-1;3828:53:62;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3828:53:62;-1:-1:-1;3828:53:62;;;4391:13:68;3828:53:62;;;;;;;;;;;;-1:-1:-1;3828:53:62;;;4377:42:68;4362:58;4377:42;;;;:::i;3828:53:62:-;;;;;;-1:-1:-1;;3828:53:62;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3828:53:62;;;;;;;;;;;:::i;:::-;;;;1523:34:69;16082::54;3828:53:62;;;;;:::i;:::-;16082:34:54;:::i;:::-;1523::69;;3828:53:62;1523:34:69;1519:76;;1678:20;;:57;;;;3828:53:62;1674:99:69;;-1:-1:-1;;;;;2010:12:69;;;;;:::i;:::-;;:::i;:::-;3828:53:62;2010:28:69;2006:70;;2155:10;3828:53:62;;;;2136:18:69;3828:53:62;;;;;2155:10:69;;2249:27;;2245:83;;-1:-1:-1;3828:53:62;;;;;-1:-1:-1;;3828:53:62;;;;;;;;;;;;;;;2451:40:69;2479:12;;;;;:::i;:::-;3828:53:62;;-1:-1:-1;;;;;;3828:53:62;;;;;;-1:-1:-1;;;;;3828:53:62;;;;;2451:40:69;2502:17;;;:::i;:::-;2589:9;-1:-1:-1;1787:35:69;;;2686:32;;2584:187;2600:19;;;;;;2155:10;2786:31;-1:-1:-1;2786:31:69;;3828:53:62;2621:3:69;2660:12;2686:74;2660:12;;;;;;;:::i;:::-;2686:55;2744:16;;2754:5;;;:::i;:::-;2744:16;;;:::i;:::-;-1:-1:-1;;;;;3828:53:62;;;;;;;;;;;;;;2155:10:69;;2686:43;3828:53:62;;;;;;;;;;;;;;;;2686:55:69;3828:53:62;;-1:-1:-1;;;;;;3828:53:62;-1:-1:-1;;;;;3828:53:62;;;;;;;;;;2686:74:69;3828:53:62;2589:9:69;;2245:83;3828:53:62;;-1:-1:-1;;;2299:18:69;;;2006:70;3828:53:62;;-1:-1:-1;;;2047:29:69;;;1678:57;1702:33;3828:53:62;1702:33:69;;1678:57;;3828:53:62;;;;;;-1:-1:-1;;3828:53:62;;;;;;-1:-1:-1;;;;;3828:53:62;;;;4300:26:65;3828:53:62;;;;;;;;:::i;:::-;;;4300:26:65;;:::i;:::-;3828:53:62;;-1:-1:-1;;;;;3828:53:62;;;;;;;;;-1:-1:-1;;3828:53:62;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3828:53:62;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;5692:23:65;;;;;3717:65:66;3828:53:62;3717:65:66;3828:53:62;;;3717:65:66;3828:53:62;;;5692:23:65;3828:53:62;5729:23:65;;3828:53:62;5729:23:65;;-1:-1:-1;;;;;3828:53:62;;;;;5729:39:65;5725:83;;5927:4;3828:53:62;;;5908:24:65;5904:63;;3828:53:62;6194:107:65;3828:53:62;;;6194:107:65;3828:53:62;;;;;;;;;;;;6194:107:65;;;;;:::i;:::-;;6238:9;;6194:18;;3828:53:62;6194:107:65;;;;;;;3828:53:62;6194:107:65;-1:-1:-1;6194:107:65;;;3828:53:62;6341:246:65;;;;;;;6756:15;6341:246;;:::i;6194:107::-;6756:15;6194:107;;;;6341:246;6194:107;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;5904:63;3828:53:62;;-1:-1:-1;;;5941:26:65;;-1:-1:-1;;;;;3828:53:62;;;5941:26:65;;;3828:53:62;;;;;;;3403:25:66;;;5725:83:65;3828:53:62;;-1:-1:-1;;;5777:31:65;;;;;3828:53:62;;;;;;;3403:25:66;;;3828:53:62;;;;;;;;;;;;;-1:-1:-1;;3828:53:62;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3828:53:62;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;-1:-1:-1;;;;;3828:53:62;;;;;;;:::o;:::-;;;;;;;-1:-1:-1;;;;;3828:53:62;;;;;;;:::o;:::-;881:193:77;3828:53:62;;;;;-1:-1:-1;;;;;3828:53:62;;;;;;;:::o;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;3828:53:62;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;3828:53:62;;;;;;;;;;;-1:-1:-1;;3828:53:62;;;;;:::i;:::-;;;;;;;;;;;;;;;;;-1:-1:-1;3828:53:62;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;:::i;:::-;;;;;;;;;;;;:::o;:::-;;;;;:::i;561:18:59:-;;;;;-1:-1:-1;;561:18:59;;:::o;889:834:70:-;;;;1049:20;;:38;;;;889:834;1045:198;;;3828:53:62;;-1:-1:-1;;;1110:25:70;;;;;1045:198;1156:27;;;1152:91;;1068:1;1290:9;1068:1;1301:19;;;;;;3828:53:62;;-1:-1:-1;;;1690:26:70;;;;;1322:3;1360:12;;;;;;:::i;:::-;3828:53:62;-1:-1:-1;;;;;3828:53:62;;;;;;1390:26:70;3828:53:62;;;;-1:-1:-1;;;1425:29:70;;;;;1386:112;1516:62;12531:49:64;1473:25:70;12531:39:64;;3828:53:62;;;;;;;;12531:31:64;3828:53:62;;;;;;;12531:49:64;1516:62:70;:::i;:::-;1512:112;;1386;1641:14;;1637:27;;3828:53:62;;1290:9:70;;1637:27;1657:7;;;;;;:::o;1512:112::-;1598:11;;;;:::i;:::-;1512:112;;;1152:91;3828:53:62;;-1:-1:-1;;;1206:26:70;;;;;1049:38;1073:14;;;1049:38;;3828:53:62;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;2931:166:66;2989:10;3828:53:62;;;;;;;;;;;2989:29:66;3828:53:62;2931:166:66;;-1:-1:-1;;;;;3828:53:62;;;3022:10:66;2989:43;2985:95;;2989:10;3828:53:62;;;;;;;;;;;;-1:-1:-1;;;;;;3828:53:62;-1:-1:-1;;;;;3828:53:62;;;;;;4620:35:66;;2989:10;4620:35;;2931:166::o;474:1:59:-;;;;;;;;;;;;;;;;;;;:::o;:::-;3828:53:62;;;474:1:59;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;474:1:59;;-1:-1:-1;474:1:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;474:1:59;;;;;;;;;-1:-1:-1;474:1:59;;;;;;;;;;;;;;-1:-1:-1;;;;;474:1:59;;;;;;-1:-1:-1;;;;;;474:1:59;;;3828:53:62;;;;474:1:59;;;;;;;;;;;3828:53:62;;;;;474:1:59;-1:-1:-1;474:1:59;;;;-1:-1:-1;;;;;;474:1:59;;;;;;;;;;:::i;:::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;474:1:59;;;;;;;;;3828:53:62;;;474:1:59;;;3828:53:62;474:1:59;;;;;;;;:::o;:::-;;;;-1:-1:-1;474:1:59;;;;;3828:53:62;;;;;;474:1:59;;;;;;;;;;;;;;-1:-1:-1;474:1:59;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;3828:53:62;;474:1:59;;;;;3828:53:62;474:1:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1469:766:67;;;3828:53:62;;;;;;;;;:::i;:::-;873:15:59;3828:53:62;;;;-1:-1:-1;;;;;3828:53:62;;;1712:77:67;;;3828:53:62;;;1712:77:67;3828:53:62;;;:::i;:::-;1712:77:67;;3828:53:62;1712:77:67;;3828:53:62;474:1:59;456:82:78;;3828:53:62;;456:82:78;;1712:77:67;456:82:78;;473:10;;3828:53:62;;;;399:109:77;3828:53:62;;;;1712:77:67;3828:53:62;;;399:109:77;;;:::i;:::-;;;3828:53:62;-1:-1:-1;;;;;3828:53:62;;;;;;399:109:77;;3828:53:62;456:82:78;;;;;;;;;:::i;:::-;3828:53:62;446:93:78;;2015:12:67;:25;:12;;3828:53:62;;2015:7:67;3828:53:62;;;;;;;2015:12:67;3828:53:62;;;;;2015:25:67;3828:53:62;2011:80:67;;474:1:59;2152:12:67;;;3828:53:62;;2015:7:67;3828:53:62;;;;;;;2152:12:67;474:1:59;:::i;:::-;473:10:78;2195:33:67;;-1:-1:-1;2195:33:67;;1469:766::o;2011:80::-;3828:53:62;;-1:-1:-1;;;2067:24:67;;;;;3828:53:62;;;;;3403:25:66;3828:53:62;-1:-1:-1;;;;;3828:53:62;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;-1:-1:-1;3828:53:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;3828:53:62;;;;;;;;;:::o;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3828:53:62;;;;;;;;;-1:-1:-1;;;;;3828:53:62;;;;;;;;;-1:-1:-1;;;;;3828:53:62;;;;;;;;;;:::o;1773:852:70:-;;;;1956:20;;:38;;;;1773:852;1952:198;;;3828:53:62;;-1:-1:-1;;;2017:25:70;;;;;1952:198;2063:27;;;2059:91;;1975:1;2197:9;1975:1;2208:19;;;;;;3828:53:62;;-1:-1:-1;;;2592:26:70;;;;;2229:3;2267:12;;;;;;:::i;:::-;3828:53:62;-1:-1:-1;;;;;3828:53:62;;;;;;2298:26:70;3828:53:62;;;;-1:-1:-1;;;2333:29:70;;;;;2294:112;2424:56;2381:25;12531:49:64;2381:25:70;12531:39:64;;3828:53:62;;;;;;;;12531:31:64;3828:53:62;;;;;;;12531:49:64;2424:56:70;:::i;:::-;2420:106;;2294:112;2543:14;;2539:27;;3828:53:62;;2197:9:70;;2539:27;2559:7;;;;;;;:::o;2420:106::-;2500:11;;;;:::i;:::-;2420:106;;;1956:38;1980:14;;;1956:38;;3828:53:62;;2758:1:69;3828:53:62;;;;;;;:::o;3507:754:66:-;;3828:53:62;;;;;;:::i;:::-;;;;;;;;;;;;;;3769:10:66;3717:65;;;3828:53:62;;;3717:65:66;831:47:78;;3769:10:66;;3828:53:62;;;;-1:-1:-1;;;;;3828:53:62;;;;;;;;;831:47:78;;;;;;:::i;:::-;3828:53:62;821:58:78;;3828:53:62;;-1:-1:-1;3828:53:62;-1:-1:-1;3717:65:66;3828:53:62;4005:33:66;3828:53:62;;-1:-1:-1;3828:53:62;;;;;;;;;;;4005:33:66;3828:53:62;4001:110:66;;3828:53:62;4171:15:66;;;3717:65;3828:53:62;3717:65:66;3828:53:62;;;3717:65:66;3828:53:62;;;4171:15:66;3828:53:62;;;;-1:-1:-1;;;;;3828:53:62;;;-1:-1:-1;;;;;;3828:53:62;;;;;;;;;;;-1:-1:-1;3828:53:62;;;;;;;;;;;;;;;4219:35:66;;-1:-1:-1;4219:35:66;;3507:754::o;4001:110::-;3828:53:62;;-1:-1:-1;;;4077:23:66;;;;;3828:53:62;;;;;;;:::i;:::-;;;;-1:-1:-1;3828:53:62;;-1:-1:-1;3828:53:62;;;;;;:::o;:::-;-1:-1:-1;;3828:53:62;;;;;;;;:::o;6406:685:69:-;-1:-1:-1;;;;;3828:53:62;;;-1:-1:-1;3828:53:62;;;6567:18:69;3828:53:62;;;;;;;;6406:685:69;3828:53:62;;;;;6778:10:69;;6774:32;;6859:24;3828:53:62;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;-1:-1:-1;;3828:53:62;;;:::i;:::-;;;;;;;6817:32:69;3828:53:62;;;;6859:24:69;;;:::i;:::-;-1:-1:-1;;;;;3828:53:62;;;;;;6859:24:69;6911:1;;7009:33;;6911:1;6914:9;;;;;;6406:685;;;;;;:::o;6925:3::-;7053:5;6994:80;7009:65;;7053:5;7009:51;7043:16;;7053:5;;;;:::i;:::-;7043:16;;:::i;:::-;3828:53:62;-1:-1:-1;;;;;3828:53:62;;;7043:16:69;-1:-1:-1;;;;;3828:53:62;;;;;;;;;;;;;;7009:65:69;3828:53:62;-1:-1:-1;;;;;3828:53:62;;;7009:65:69;6994:80;;;;:::i;:::-;3828:53:62;6899:13:69;;6774:32;-1:-1:-1;3828:53:62;;-1:-1:-1;;;;6790:16:69:o;3828:53:62:-;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;3828:53:62;;;;;;;;-1:-1:-1;;3828:53:62;;;;:::o;:::-;-1:-1:-1;;;;;3828:53:62;;;;;;;;;;;;;;;;;;:::i;284:27:59:-;;;3828:53:62;;284:27:59;;;;3828:53:62;284:27:59;;;;3828:53:62;;-1:-1:-1;;;;;;3828:53:62;-1:-1:-1;;;;;3828:53:62;;;;;;;;;;;284:27:59;;;;;;;;;3828:53:62;;;;284:27:59;-1:-1:-1;;;;;284:27:59;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;-1:-1:-1;284:27:59;;;;;474:1;;;3828:53:62;;;474:1:59;;;3828:53:62;474:1:59;;;;;284:27;3828:53:62;;;;;;284:27:59;;;;;474:1;;;;;;;284:27;;-1:-1:-1;284:27:59;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;7531:999:65;;;;;;3828:53:62;;:::i;:::-;-1:-1:-1;;;;;;3828:53:62;;;;;;;;;;;;;7832:139:65;;1121:16:59;;:20;8073:59:65;;3828:53:62;;;;:::i;:::-;;;;;8217:78:65;;;3828:53:62;;;;:::i;:::-;8217:78:65;;;3828:53:62;284:27:59;8196:99:65;8357:35;;3828:53:62;;;;;;;;7836:20:65;3828:53:62;;;;;;;8357:35:65;284:27:59;:::i;:::-;-1:-1:-1;;;;;3828:53:62;8470::65;3828::62;;8470::65;7531:999::o;8073:59::-;3828:53:62;;-1:-1:-1;;;8113:19:65;;;;;7832:139;3828:53:62;;-1:-1:-1;;;7928:32:65;;-1:-1:-1;;;;;3828:53:62;;7928:32:65;;;3828:53:62;;;7928:32:65;7531:999;;;;;;3828:53:62;;:::i;:::-;-1:-1:-1;;;;;;3828:53:62;;;;;;;;;;;;;7832:139:65;;1121:16:59;;:20;8073:59:65;;8217:78;3828:53:62;;;;:::i;:::-;;;;-1:-1:-1;;;;;3828:53:62;8217:78:65;;;3828:53:62;;8217:78:65;3828:53:62;;;:::i;7832:139:65:-;3828:53:62;;-1:-1:-1;;;7928:32:65;;-1:-1:-1;;;;;3828:53:62;;7928:32:65;;;3828:53:62;;;7928:32:65;7243:739:81;3828:53:62;;7243:739:81;;-1:-1:-1;;;;;3828:53:62;;;7571:41:81;;;;3828:53:62;;;7571:41:81;:318;;7243:739;7554:422;;;;;;;;;7243:739::o;7554:422::-;3828:53:62;;-1:-1:-1;;;7921:44:81;;;;;7571:318;7632:248;3828:53:62;;;;-1:-1:-1;3828:53:62;;;;;;;;;;;;;;;7632:248:81;;7705:10;7632:248;;;3828:53:62;;;;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;3828:53:62;;;;;;;:::i;:::-;7632:248:81;;;;;;;;;-1:-1:-1;7632:248:81;;;7571:318;3828:53:62;;7571:318:81;;;;;;;;7632:248;;;;;;;;;;;;;;:::i;:::-;;;;399:109:77;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;3828:53:62;;;399:109:77;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;399:109:77;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;399:109:77;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;:::o;:::-;3828:53:62;;;;399:109:77;;;;;3828:53:62;;;;399:109:77;;;;;;;;;3828:53:62;399:109:77;;;;;3828:53:62;399:109:77;3828:53:62;;;;;;;;399:109:77;;;3828:53:62;;399:109:77;;;3828:53:62;399:109:77;;;3828:53:62;399:109:77;3828:53:62;399:109:77:o;:::-;;;;;;;;3828:53:62;;;399:109:77;;;;;:::i;:::-;;3828:53:62;;;399:109:77;;:::o;4229:878::-;;3828:53:62;4346:37:77;3828:53:62;4441:9:77;3828:53:62;4436:558:77;4452:10;;;;;;3828:53:62;;;;5022:77:77;3828:53:62;4772:26:77;5022:77;3828:53:62;;;;5056:35:77;3828:53:62;4834:16:77;3828:53:62;5022:77:77;;;4772:26;5022:77;;;;881:193;;;;;;;;;3828:53:62;881:193:77;3828:53:62;;881:193:77;;;3828:53:62;881:193:77;3828:53:62;881:193:77;5022:77;;3828:53:62;;5022:77:77;;;;;;:::i;:::-;3828:53:62;5012:88:77;;4229:878;:::o;4464:3::-;4721:11;;;;3828:53:62;4721:11:77;4510:473;399:109;4721:11;4510:473;4721:11;:25;:11;;;;;:::i;:25::-;4772:26;4636:315;4772:26;4636:315;4904:23;4772:26;:11;4904;4772:26;:11;;;;;;:::i;:::-;:26;;:::i;:::-;4834:11;;;;;;:::i;:::-;:16;3828:53:62;4834:16:77;;;;;;;;:::i;3828:53:62:-;;;;;;4824:27:77;4904:11;;:::i;:::-;:23;;;;;:::i;:::-;3828:53:62;;;4887:41:77;;;;3828:53:62;;4887:41:77;;399:109;:::i;:::-;4887:41;3828:53:62;4887:41:77;3828:53:62;;4887:41:77;;;;;;;;:::i;:::-;3828:53:62;4877:52:77;;3828:53:62;;4636:315:77;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;3828:53:62;4605:364:77;;3828:53:62;;4510:473:77;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;4464:3;3828:53:62;4441:9:77;;;;;5757:885:53;6066:22;9114:11;9178:111;;9069:14;9178:111;;;;6102:73;;5757:885;6238:398;-1:-1:-1;6238:398:53;;;;;;;;;-1:-1:-1;6238:398:53;;5757:885::o;6102:73::-;8507:362;;;;;;;8383:15;8507:362;;;;8426:18;8507:362;;;;9178:111;8507:362;;;;9178:111;8507:362;;;;;6102:73;;1980:4154:56;3828:53:62;;1980:4154:56;;-1:-1:-1;;;;;2181:3947:56;;;;1980:4154;;;:::o;2181:3947::-;;;;;;;;;;;3828:53:62;2181:3947:56;;;;;;;;;;;;;;;;;;;;;;;3828:53:62;2181:3947:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1980:4154::o;2181:3947::-;;;;;;3828:53:62;2181:3947:56;;;;;;;;;;;;;3828:53:62;2181:3947:56;;;;;;;;;;;;;;;;;3828:53:62;2181:3947:56;;;;;-1:-1:-1;2181:3947:56;;-1:-1:-1;;;1980:4154:56:o;2181:3947::-;;;;;;;;;;;;;-1:-1:-1;;;;;2181:3947:56;;;;;3828:53:62;2181:3947:56;3828:53:62;2181:3947:56;3828:53:62;;2181:3947:56;;;;;;;;;;;;;;;3559:1256:64;;3753:31;;;:::i;:::-;3885:23;-1:-1:-1;3923:9:64;-1:-1:-1;3918:642:64;3934:10;;;;;;3828:53:62;;;;-1:-1:-1;3828:53:62;4693:7:64;3828:53:62;;;-1:-1:-1;3828:53:62;;;;;2332:38:81;2328:76;;3828:53:62;;-1:-1:-1;;;;;3828:53:62;2560:34:81;;;;;:91;;3918:642:64;2556:171:81;;;4782:23:64;4724:84;4782:23;3717:65:66;3828:53:62;3717:65:66;3828:53:62;;;3717:65:66;3828:53:62;;;4782:23:64;4724:84;;:::i;2556:171:81:-;3828:53:62;;-1:-1:-1;;;2674:42:81;;;;;2560:91;3828:53:62;;-1:-1:-1;;;2598:44:81;;3828:53:62;-1:-1:-1;3828:53:62;;;;;-1:-1:-1;3828:53:62;2598:44:81;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;2598:44:81;;;2560:91;3828:53:62;;2560:91:81;;;2598:44;;;;3828:53:62;2598:44:81;3828:53:62;2598:44:81;;;;;;;:::i;:::-;;;;2328:76;3828:53:62;;-1:-1:-1;;;2379:25:81;;;;;3946:3:64;4176:11;;;;4105:85;4176:11;;;;;:::i;:::-;4105:85;;;:::i;:::-;4071:119;;;;;;:::i;:::-;;4426:6;;;4434:31;3828:53:62;4434:31:64;4422:127;;3828:53:62;3923:9:64;;;;;4422:127;4207:52:60;;;;4484:65:64;;3828:53:62;4422:127:64;;;4484:65;3828:53:62;;-1:-1:-1;;;4529:20:64;;;;;3414:1729:82;4019:388;;;;;;;;;;;4466:28;4462:71;;4591:32;;;:68;;;;3414:1729;4587:111;;;4019:388;;;4757:75;;4207:52:60;3414:1729:82;:::o;4757:75::-;1068:1:70;4809:12:82;:::o;4587:111::-;4675:12;;1068:1:70;4675:12:82;:::o;4591:68::-;4627:15;;;:32;4591:68;;;4462:71;4510:12;;;1068:1:70;4510:12:82;:::o;3414:1729::-;4019:388;;;;;;;;;;;4466:28;4462:71;;4591:32;;;:68;;;;3414:1729;4587:111;;;4019:388;;;;;4757:75;;4207:52:60;;;5003:74:82;;;;3414:1729;4999:117;;;;;5132:4;3414:1729;:::o;5003:74::-;5039:38;342:34:80;;;;;:::i;:::-;4019:388:82;;;309:67:80;;308:74;3828:53:62;;;;5039:38:82;5003:74;;;;;4591:68;4627:15;;;:32;4591:68;;;4462:71;4510:12;;;;474:1:59;4510:12:82;:::o;3406:608:77:-;3828:53:62;;;;;;:::i;:::-;3643:299:77;399:109;3775:22;;;;;:::i;:::-;3643:299;3899:19;3828:53:62;3833:12:77;;;;;;:::i;3828:53:62:-;3775:22:77;3828:53:62;;;;3823:23:77;3899:19;;;;;;:::i;:::-;3833:12;3828:53:62;;3775:22:77;3882:37;;;3828:53:62;;3882:37:77;;399:109;:::i;:::-;3882:37;3828:53:62;3882:37:77;3828:53:62;;3882:37:77;;;;;;;;:::i;:::-;3828:53:62;3872:48:77;;3833:12;3828:53:62;3643:299:77;;;3775:22;3643:299;;;;;:::i;:::-;3828:53:62;3612:348:77;;3828:53:62;3833:12:77;3828:53:62;3551:446:77;3775:22;3551:446;;3828:53:62;597:189:77;3828:53:62;;3833:12:77;881:193;;3828:53:62;3899:19:77;881:193;;3828:53:62;3899:19:77;3551:446;;;;;:::i;2576:448:64:-;;2761:81;2576:448;;2761:81;;:::i;:::-;3828:53:62;-1:-1:-1;3828:53:62;2903:7:64;3828:53:62;;;-1:-1:-1;3828:53:62;;;;;1317:38:81;1313:76;;3828:53:62;;-1:-1:-1;;;;;3828:53:62;1545:34:81;;;;;:90;;2576:448:64;1541:170:81;;;2991:23:64;2934:83;2991:23;3717:65:66;3828:53:62;3717:65:66;3828:53:62;;;3717:65:66;3828:53:62;;;2991:23:64;2934:83;;:::i;1545:90:81:-;3828:53:62;;-1:-1:-1;;;1583:43:81;;3828:53:62;-1:-1:-1;3828:53:62;;;;;-1:-1:-1;3828:53:62;1583:43:81;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;1583:43:81;;;1545:90;3828:53:62;;1545:90:81;;;1583:43;;;;3828:53:62;1583:43:81;3828:53:62;1583:43:81;;;;;;;:::i;:::-;;;;9359:1077:64;;;9531:31;;;:::i;:::-;9572:23;-1:-1:-1;9921:9:64;-1:-1:-1;9916:315:64;9932:10;;;;;;3828:53:62;;;;;10350:79:64;3828:53:62;-1:-1:-1;3828:53:62;-1:-1:-1;3828:53:62;;;-1:-1:-1;3828:53:62;10350:79:64;;:::i;:::-;;9359:1077::o;9944:3::-;10067:11;;;;10040:39;10067:11;;;;;:::i;:::-;10040:39;;:::i;:::-;10006:73;;;;;;:::i;:::-;;10097:6;;;10105:31;3828:53:62;10105:31:64;10093:127;;3828:53:62;9921:9:64;;;;;10093:127;4207:52:60;;;;10155:65:64;;3828:53:62;10093:127:64;;;4018:2337:69;-1:-1:-1;;;;;3828:53:62;;;;;;2136:18:69;3828:53:62;;;;;4018:2337:69;;;3828:53:62;;;;;;;;;;;;;;;;;;;;;;;4479:24:69;;;:42;;;;4018:2337;4475:1874;;;3828:53:62;;-1:-1:-1;;;4544:25:69;;;;;4475:1874;4708:1;;4695:14;;;4708:1;;12531:39:64;4839:35:69;12531:49:64;:39;;;3828:53:62;;;;;;;;12531:31:64;3828:53:62;;;;;;;4839:35:69;4835:48;;5047:9;;5111:33;;;577:1:59;;5058:17:69;;;;;;3828:53:62;;-1:-1:-1;;;5448:26:69;;12531:31:64;;5448:26:69;5077:3;-1:-1:-1;;;;;3828:53:62;;;;;;;;;;;;5111:57:69;;;;:43;;;3828:53:62;5111:57:69;12531:39:64;5278:35:69;12531:49:64;:39;;;3828:53:62;;;;;;;;12531:31:64;3828:53:62;;;;;;;5278:35:69;5274:48;;5077:3;3828:53:62;5047:9:69;;;5274:48;5315:7;;;;;;;;:::o;4835:48::-;4876:7;;;;;;;:::o;4691:1658::-;12531:39:64;;5757:35:69;12531:49:64;:39;;;;;;;;;3828:53:62;;;;;;;;12531:31:64;3828:53:62;;;;;;;5757:35:69;5753:52;;4691:1658;5825:13;;;;5947:33;;5820:453;5840:17;;;;;;6290:13;;;;;;;6286:52;;4018:2337::o;5859:3::-;-1:-1:-1;;;;;3828:53:62;;;;;;;;;;;;5947:57:69;;;;:43;;;3828:53:62;5947:57:69;12531:39:64;6114:35:69;12531:49:64;:39;;;3828:53:62;;;;;;;;12531:31:64;3828:53:62;;;;;;;6114:35:69;6110:52;;5859:3;6236:14;;6232:27;;5859:3;3828:53:62;5825:13:69;;;6232:27;6252:7;;;;;;;;:::o;6110:52::-;6151:11;;;;:::i;:::-;6110:52;;;5753;5794:11;;;;:::i;:::-;5753:52;;;4479:42;4507:14;;;4479:42;;4018:2337;-1:-1:-1;;;;;3828:53:62;;;;;;2136:18:69;3828:53:62;;;;;4018:2337:69;;;;3828:53:62;;;;;;;;;;;;;;;;;;;;;;;4479:24:69;;;:42;;;;4018:2337;4475:1874;;;3828:53:62;;-1:-1:-1;;;4544:25:69;;;;;4475:1874;4708:1;;4695:14;;;4708:1;;12531:39:64;4839:35:69;12531:39:64;:49;:39;;;3828:53:62;;;;;;;;12531:31:64;3828:53:62;;;;;;;4839:35:69;4835:48;;5047:9;;5111:33;;;-1:-1:-1;;5058:17:69;;;;;;3828:53:62;;-1:-1:-1;;;5448:26:69;;12531:31:64;;5448:26:69;5077:3;-1:-1:-1;;;;;3828:53:62;;;;;;;;;;;;5111:57:69;;;;:43;;;3828:53:62;5111:57:69;12531:39:64;5278:35:69;12531:39:64;:49;:39;;;3828:53:62;;;;;;;;12531:31:64;3828:53:62;;;;;;;5278:35:69;5274:48;;5077:3;3828:53:62;5047:9:69;;;5274:48;5315:7;;;;;;;;;:::o;4691:1658::-;12531:39:64;;;;;;;;5757:35:69;12531:39:64;:49;:39;;;3828:53:62;;;;;;;;12531:31:64;3828:53:62;;;;;;;5757:35:69;5753:52;;4691:1658;5825:13;;;5947:33;;5820:453;5840:17;;;;;;6290:13;;;;;;;;;;6286:52;;4018:2337::o;5859:3::-;5947:43;6114:35;5947:43;12531:49:64;5947:43:69;:57;;:43;;;;12531:39:64;5947:43:69;3828:53:62;;;;;;;;;;;;;;;;5947:57:69;12531:39:64;;;3828:53:62;;;;;;;;12531:31:64;3828:53:62;;;;;;;6114:35:69;6110:52;;5859:3;6236:14;;6232:27;;5859:3;3828:53:62;5825:13:69;;;;6232:27;6252:7;;;;;;;;;;:::o;6110:52::-;6151:11;;;;:::i;:::-;6110:52;;;5753;5794:11;;;;:::i;:::-;5753:52;;;4479:42;4507:14;;;4479:42;;5772:586:77;;3828:53:62;5983:9:77;3828:53:62;5978:267:77;5994:10;;;;;;-1:-1:-1;;3828:53:62;;6157:62:77;3828:53:62;;;6307:35:77;3828:53:62;;;1520:121:77;6273:77;;;3828:53:62;;;881:193:77;;;3828:53:62;;;;881:193:77;;;3828:53:62;;;;-1:-1:-1;6273:77:77;;3828:53:62;881:193:77;;;6273:77;881:193;6006:3;6193:11;;;3828:53:62;6193:11:77;6052:182;6193:25;:11;;;;;:::i;:25::-;3828:53:62;;;1228::77;6157:62;;;;3828:53:62;;;-1:-1:-1;;;;;3828:53:62;;;;1228::77;;;3828::62;6157:62:77;;;-1:-1:-1;;;6157:62:77;6052:182;;3828:53:62;;6157:62:77;;1228:53;3828::62;6157:62:77;:::i;6052:182::-;6006:3;3828:53:62;5983:9:77;;;;5314:244;3828:53:62;;;;:::i;:::-;;;;1228::77;5483:58;;;3828:53:62;;;-1:-1:-1;;;;;3828:53:62;;;1228::77;;;3828::62;5483:58:77;;;;3828:53:62;5483:58:77;:::i;:::-;3828:53:62;5473:69:77;;3828:53:62;;;5445:105:77;5483:58;5445:105;;3828:53:62;1339:117:77;3828:53:62;;;881:193:77;;3828:53:62;1228::77;881:193;;3828:53:62;1228::77;5445:105;;;;;:::i;8809:281:64:-;9005:78;8809:281;8960:35;8809:281;8960:35;:::i;:::-;9057:10;3828:53:62;9057:10:64;3828:53:62;;;9057:10:64;3828:53:62;9005:78:64;;:::i;3833:186:68:-;3828:53:62;;;;;:::i;:::-;;;;-1:-1:-1;;;3828:53:62;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;3828:53:62;;;;3833:186:68;:::o;2656:915:79:-;;3447:26;;3828:53:62;;3447:26:79;;;;;;3828:53:62;;;;;-1:-1:-1;3828:53:62;;;;3447:26:79;;;;;;;:::i;:::-;3828:53:62;3364:110:79;;3828:53:62;;;3046:454:79;3447:26;3046:454;;3828:53:62;;;;;;3222:4:79;3828:53:62;;;;;;;;;;;;;;;3046:454:79;;;;;:::i;:::-;3828:53:62;;2967:555:79;;-1:-1:-1;;;;;3828:53:62;;2656:915:79:o;3828:53:62:-;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;474:1:59;;;;-1:-1:-1;;474:1:59;3828:53:62;;;;;474:1:59;;;3828:53:62;;;;;;474:1:59;3828:53:62;;;474:1:59;3828:53:62;;;;474:1:59;3828:53:62;;-1:-1:-1;;3828:53:62;474:1:59;;;;;;;3828:53:62;;;;;;474:1:59;3828:53:62;;;474:1:59;3828:53:62;;;;474:1:59;3828:53:62;;-1:-1:-1;;;;3828:53:62;;;;;;-1:-1:-1;;;3828:53:62;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;3828:53:62;;;;;;-1:-1:-1;;;3828:53:62;;;;;;;;;;;;;;;-1:-1:-1;;;;;3828:53:62;;;-1:-1:-1;;;;;;3828:53:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;284:27:59;3828:53:62;;;:::o;5858:2399:64:-;;;3828:53:62;;:::i;:::-;;;6166:18:64;:31;:18;;3828:53:62;;2015:7:67;3828:53:62;;;;;;;6166:31:64;3828:53:62;6166:49:64;6162:77;;873:15:59;;3828:53:62;6379:22:64;;;;:40;:22;;;:::i;:::-;3828:53:62;;;;6379:40:64;;;:77;;;5858:2399;6375:138;;6574:21;;;:::i;:::-;12531:39;:49;:39;;;3828:53:62;;;;;;;;12531:31:64;3828:53:62;;;;;;;12531:49:64;3828:53:62;;;;;6794:30:64;;:74;;;;5858:2399;6790:129;;;;-1:-1:-1;;;;;3828:53:62;;;;;;;;;;;;;4058:52:60;;;7117:103:64;;7523:28;7652:355;8141:109;7523:28;7652:355;7828:26;3828:53:62;7828:19:64;7727:22;7499:55;7523:28;;;;:::i;:::-;7499:55;;:::i;:::-;7727:22;;:::i;:::-;7828:19;;;;;;:::i;:::-;3828:53:62;;;:::i;:::-;7828:26:64;:::i;:::-;3828:53:62;7652:355:64;3828:53:62;;:::i;:::-;;;;;;;;7652:355:64;3828:53:62;;6379:22:64;7652:355;;3828:53:62;;7652:355:64;3828:53:62;7652:355:64;;;3828:53:62;;;7828:19:64;7652:355;;3828:53:62;;7652:355:64;-1:-1:-1;;;;;3828:53:62;;7652:355:64;;;3828:53:62;-1:-1:-1;;;;;3828:53:62;;7652:355:64;;;3828:53:62;-1:-1:-1;;;;;3828:53:62;;7652:355:64;;;3828:53:62;7652:355:64;;;;3828:53:62;;7643:364:64;8067:49;:39;;;3828:53:62;;;;;;;;12531:31:64;3828:53:62;;;;;;;8067:49:64;3828:53:62;:::i;:::-;7652:355:64;3828:53:62;;;;-1:-1:-1;;;;;3828:53:62;;;;;;;;;;;8141:109:64;5858:2399::o;7117:103::-;3828:53:62;;-1:-1:-1;;;7177:32:64;;-1:-1:-1;;;;;3828:53:62;;12531:31:64;7177:32;;3828:53:62;;;3403:25:66;6790:129:64;3828:53:62;;-1:-1:-1;;;6891:17:64;;12531:31;;6891:17;6794:74;3828:53:62;;;6828:40:64;;-1:-1:-1;6794:74:64;;;;6375:138;3828:53:62;;-1:-1:-1;;;6479:23:64;;;;;6379:77;6423:22;;;;;;:::i;:::-;3828:53:62;6423:33:64;;6379:77;;3943:462:81;3828:53:62;;-1:-1:-1;;;;;3828:53:62;4193:41:81;;4189:54;;4257:55;;3828:53:62;-1:-1:-1;3828:53:62;;;;;;;;;;;;4257:55:81;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;4257:55:81;;;3943:462;3828:53:62;;4253:146:81;;3943:462::o;4253:146::-;3828:53:62;;-1:-1:-1;;;4344:44:81;;4257:55;;4344:44;4257:55;;;;;;;;;;;;;;:::i;:::-;;;;4189:54;4236:7;;:::o;3828:53:62:-;;;;;;;;;;:::o;3134:405:81:-;3828:53:62;;-1:-1:-1;;;;;3828:53:62;3347:41:81;;;;;:108;;3134:405;3343:190;;;;3134:405::o;3347:108::-;3392:54;3828:53:62;;;;;;-1:-1:-1;3828:53:62;;;;;;;;;;3392:54:81;;;;;3828:53:62;;:::i;:::-;3392:54:81;;;;;;;-1:-1:-1;3392:54:81;;;3347:108;3828:53:62;;3347:108:81;;;;3392:54;;;;;;;;;;;;;;:::i;:::-;;;;10872:1286:64;;3828:53:62;;:::i;:::-;;11120:63:64;11152:21;11120:54;11152:21;;;:::i;:::-;-1:-1:-1;;;;;3828:53:62;;;;;12531:31:64;3828:53:62;;;;;;;11120:63:64;3828:53:62;;;:::i;:::-;11334:21:64;11313:43;11334:21;;;:::i;:::-;-1:-1:-1;;;;;3828:53:62;;;;;;;;;;;;;11313:43:64;3828:53:62;11465:18:64;;;3828:53:62;;;;-1:-1:-1;;;;;3828:53:62;4483:66:60;11461:102:64;;11648:15;;;3828:53:62;-1:-1:-1;;;;;3828:53:62;;;;;;;11648:26:64;;;11644:78;;3828:53:62;11814:21:64;;474:1:59;11814:21:64;;;474:1:59;3828:53:62;;;;474:1:59;3828:53:62;11810:93:64;;3828:53:62;;-1:-1:-1;;;;3828:53:62;873:15:59;3828:53:62;;;;;-1:-1:-1;;;3828:53:62;;;;;;;12058:93:64;;12083:21;;2010:12:69;:::i;12083:21:64:-;12132:16;;;284:27:59;11814:21:64;3828:53:62;;;;;;;;;12058:93:64;10872:1286::o;11810:93::-;11814:21;3828:53:62;-1:-1:-1;;;11876:16:64;;11120:31;;11876:16;11461:102;3828:53:62;;-1:-1:-1;;;11531:21:64;;11120:31;;11531:21;6050:586:81;3828:53:62;;-1:-1:-1;;;;;3828:53:62;;;;;6327:41:81;;6323:58;;6395:54;;3828:53:62;;;;;;;;;;;;;;6395:54:81;;;;;;:::i;:::-;;;;;3828:53:62;;6395:54:81;;;6050:586;-1:-1:-1;6391:239:81;;-1:-1:-1;;3828:53:62;;-1:-1:-1;;;;;3828:53:62;;;;;;6552:41:81;;3828:53:62;;6552:41:81;3828:53:62;6607:12:81;:::o;6391:239::-;6489:26;;;;;;6050:586::o;6489:26::-;6511:4;;-1:-1:-1;6504:11:81:o;6395:54::-;;;;;;;;;;;;;;;:::i;:::-;;;;;6323:58;6370:11;;;;6377:4;6370:11;:::o;4936:582::-;3828:53:62;;-1:-1:-1;;;;;3828:53:62;;;;;5210:41:81;;5206:58;;5278:53;;3828::62;;;;;;;;;;;;;;5278::81;;;;;;:::i;14688:552:54:-;;14828:406;;;;;;;;;;;14688:552;;;:::o;14828:406::-;;;;;;;;;;;;;;;;;;;14688:552;;;:::o;14828:406::-;;;;;;;;;;;;;;-1:-1:-1;14828:406:54;;;;;;;;;;;;;;;;;;3005:193:77;3828:53:62;;3124:66:77;;;;3828:53:62;-1:-1:-1;;;;;3828:53:62;;;;;;;;;;;;;;;3159:15:77;3828:53:62;;;;3176:13:77;3828:53:62;;;;;3124:66:77;;3828:53:62;;;;;;-1:-1:-1;;;;;3828:53:62;;;;;;;;3114:77:77;;3005:193;:::o;2245:451::-;2669:12;3828:53:62;2245:451:77;2669:12;;;;;:::i;3828:53:62:-;4879:1091:55;;;;;;;;;2669:12:77;4879:1091:55;;;;;;;;;;;;;;-1:-1:-1;4879:1091:55;;;;;;;-1:-1:-1;;;;;3828:53:62;;2245:451:77:o;4879:1091:55:-;;-1:-1:-1;4879:1091:55;;;;526:483:80;3828:53:62;;;721:9:80;3828:53:62;716:240:80;732:10;;;;;;3828:53:62;;;;;;526:483:80;:::o;744:3::-;789:14;;;;;;:::i;:::-;3828:53:62;822:10:80;830:2;822:10;;:35;;;;744:3;818:77;;934:10;3828:53:62;;934:10:80;;;;;:::i;:::-;3828:53:62;;;;;;;;;;909:36:80;744:3;3828:53:62;721:9:80;;;;;818:77;3828:53:62;;-1:-1:-1;;;866:29:80;;;;;822:35;497:10;3828:53:62;497:10:80;;;:::i;:::-;488:19;;;487:26;;822:35;", + "linkReferences": {}, + "immutableReferences": { + "51391": [{ "start": 10491, "length": 32 }], + "51393": [{ "start": 10526, "length": 32 }], + "51395": [{ "start": 10638, "length": 32 }], + "51397": [{ "start": 10676, "length": 32 }], + "51399": [{ "start": 10458, "length": 32 }], + "54562": [{ "start": 6069, "length": 32 }] + } + }, + "methodIdentifiers": { + "attest(bytes32,(address,uint48,bytes,uint256[]))": "945e3641", + "attest(bytes32,(address,uint48,bytes,uint256[])[])": "b65d1012", + "attest(bytes32,address,(address,uint48,bytes,uint256[]),bytes)": "29757d37", + "attest(bytes32,address,(address,uint48,bytes,uint256[])[],bytes)": "04a1f298", + "attesterNonce(address)": "b50b706b", + "calcModuleAddress(bytes32,bytes)": "f095ec1b", + "check(address)": "c23697a8", + "check(address,address[],uint256)": "0bb30abc", + "check(address,uint256)": "96fb7217", + "check(address,uint256,address[],uint256)": "2ed94467", + "checkForAccount(address,address)": "4c13560c", + "checkForAccount(address,address,uint256)": "529562a1", + "deployModule(bytes32,bytes32,bytes,bytes,bytes)": "03b79c84", + "deployViaFactory(address,bytes,bytes,bytes32,bytes)": "f190e2b1", + "eip712Domain()": "84b0196e", + "findAttestation(address,address)": "d9048624", + "findAttestations(address,address[])": "2b30c899", + "findModule(address)": "b6b791a1", + "findResolver(bytes32)": "71c61a2b", + "findSchema(bytes32)": "b060cb1e", + "findTrustedAttesters(address)": "dd0fd278", + "getDigest((address),address)": "70d2af24", + "getDigest((address)[],address)": "617734d0", + "getDigest((address,uint48,bytes,uint256[]),address)": "55f47dde", + "getDigest((address,uint48,bytes,uint256[])[],address)": "e14f3d32", + "registerModule(bytes32,address,bytes,bytes)": "88dc678d", + "registerResolver(address)": "9f3e1b53", + "registerSchema(string,address)": "1d4d9810", + "revoke((address))": "77efcab4", + "revoke((address)[])": "4990a682", + "revoke(address,(address),bytes)": "8e6ec824", + "revoke(address,(address)[],bytes)": "4ece78ca", + "setResolver(bytes32,address)": "1896f70a", + "transferResolverOwnership(bytes32,address)": "7cb2afd8", + "trustAttesters(uint8,address[])": "f05c04e1" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AccessDenied\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AlreadyAttested\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"AlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AlreadyRevoked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AttestationNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DifferentResolvers\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExternalError_ModuleRegistration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExternalError_ResolveAttestation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExternalError_ResolveRevocation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExternalError_SchemaValidation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"name\":\"FactoryCallFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientAttestations\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAttestation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidExpirationTime\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidModuleType\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidModuleTypes\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IExternalResolver\",\"name\":\"resolver\",\"type\":\"address\"}],\"name\":\"InvalidResolver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"ResolverUID\",\"name\":\"uid\",\"type\":\"bytes32\"}],\"name\":\"InvalidResolverUID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSalt\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSchema\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IExternalSchemaValidator\",\"name\":\"validator\",\"type\":\"address\"}],\"name\":\"InvalidSchemaValidator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSignature\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidThreshold\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTrustedAttesterInput\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"}],\"name\":\"ModuleAddressIsNotContract\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ModuleNotFoundInRegistry\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoTrustedAttestersFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ResolverAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"RevokedAttestation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"SchemaUID\",\"name\":\"uid\",\"type\":\"bytes32\"}],\"name\":\"SchemaAlreadyExists\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"SchemaUID\",\"name\":\"schemaUID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"AttestationDataRef\",\"name\":\"sstore2Pointer\",\"type\":\"address\"}],\"name\":\"Attested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ModuleRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"ResolverUID\",\"name\":\"uid\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"resolver\",\"type\":\"address\"}],\"name\":\"NewResolver\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"ResolverUID\",\"name\":\"uid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"NewResolverOwner\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"smartAccount\",\"type\":\"address\"}],\"name\":\"NewTrustedAttesters\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"contract IExternalResolver\",\"name\":\"resolver\",\"type\":\"address\"}],\"name\":\"ResolverRevocationError\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"revoker\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"SchemaUID\",\"name\":\"schema\",\"type\":\"bytes32\"}],\"name\":\"Revoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"SchemaUID\",\"name\":\"uid\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"registerer\",\"type\":\"address\"}],\"name\":\"SchemaRegistered\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"SchemaUID\",\"name\":\"schemaUID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"expirationTime\",\"type\":\"uint48\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"ModuleType[]\",\"name\":\"moduleTypes\",\"type\":\"uint256[]\"}],\"internalType\":\"struct AttestationRequest[]\",\"name\":\"requests\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"attest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"SchemaUID\",\"name\":\"schemaUID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"expirationTime\",\"type\":\"uint48\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"ModuleType[]\",\"name\":\"moduleTypes\",\"type\":\"uint256[]\"}],\"internalType\":\"struct AttestationRequest\",\"name\":\"request\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"attest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"SchemaUID\",\"name\":\"schemaUID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"expirationTime\",\"type\":\"uint48\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"ModuleType[]\",\"name\":\"moduleTypes\",\"type\":\"uint256[]\"}],\"internalType\":\"struct AttestationRequest\",\"name\":\"request\",\"type\":\"tuple\"}],\"name\":\"attest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"SchemaUID\",\"name\":\"schemaUID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"expirationTime\",\"type\":\"uint48\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"ModuleType[]\",\"name\":\"moduleTypes\",\"type\":\"uint256[]\"}],\"internalType\":\"struct AttestationRequest[]\",\"name\":\"requests\",\"type\":\"tuple[]\"}],\"name\":\"attest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"attesterNonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"}],\"name\":\"calcModuleAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"}],\"name\":\"check\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"ModuleType\",\"name\":\"moduleType\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"}],\"name\":\"check\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"ModuleType\",\"name\":\"moduleType\",\"type\":\"uint256\"}],\"name\":\"check\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"check\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"smartAccount\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"checkForAccount\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"smartAccount\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"ModuleType\",\"name\":\"moduleType\",\"type\":\"uint256\"}],\"name\":\"checkForAccount\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"ResolverUID\",\"name\":\"resolverUID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"resolverContext\",\"type\":\"bytes\"}],\"name\":\"deployModule\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callOnFactory\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"},{\"internalType\":\"ResolverUID\",\"name\":\"resolverUID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"resolverContext\",\"type\":\"bytes\"}],\"name\":\"deployViaFactory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"findAttestation\",\"outputs\":[{\"components\":[{\"internalType\":\"uint48\",\"name\":\"time\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"expirationTime\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"revocationTime\",\"type\":\"uint48\"},{\"internalType\":\"PackedModuleTypes\",\"name\":\"moduleTypes\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"internalType\":\"AttestationDataRef\",\"name\":\"dataPointer\",\"type\":\"address\"},{\"internalType\":\"SchemaUID\",\"name\":\"schemaUID\",\"type\":\"bytes32\"}],\"internalType\":\"struct AttestationRecord\",\"name\":\"attestation\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"}],\"name\":\"findAttestations\",\"outputs\":[{\"components\":[{\"internalType\":\"uint48\",\"name\":\"time\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"expirationTime\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"revocationTime\",\"type\":\"uint48\"},{\"internalType\":\"PackedModuleTypes\",\"name\":\"moduleTypes\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"internalType\":\"AttestationDataRef\",\"name\":\"dataPointer\",\"type\":\"address\"},{\"internalType\":\"SchemaUID\",\"name\":\"schemaUID\",\"type\":\"bytes32\"}],\"internalType\":\"struct AttestationRecord[]\",\"name\":\"attestations\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"}],\"name\":\"findModule\",\"outputs\":[{\"components\":[{\"internalType\":\"ResolverUID\",\"name\":\"resolverUID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleRecord\",\"name\":\"moduleRecord\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ResolverUID\",\"name\":\"uid\",\"type\":\"bytes32\"}],\"name\":\"findResolver\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IExternalResolver\",\"name\":\"resolver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"resolverOwner\",\"type\":\"address\"}],\"internalType\":\"struct ResolverRecord\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"SchemaUID\",\"name\":\"uid\",\"type\":\"bytes32\"}],\"name\":\"findSchema\",\"outputs\":[{\"components\":[{\"internalType\":\"uint48\",\"name\":\"registeredAt\",\"type\":\"uint48\"},{\"internalType\":\"contract IExternalSchemaValidator\",\"name\":\"validator\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"schema\",\"type\":\"string\"}],\"internalType\":\"struct SchemaRecord\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"smartAccount\",\"type\":\"address\"}],\"name\":\"findTrustedAttesters\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"expirationTime\",\"type\":\"uint48\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"ModuleType[]\",\"name\":\"moduleTypes\",\"type\":\"uint256[]\"}],\"internalType\":\"struct AttestationRequest\",\"name\":\"request\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getDigest\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"}],\"internalType\":\"struct RevocationRequest[]\",\"name\":\"requests\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getDigest\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"}],\"internalType\":\"struct RevocationRequest\",\"name\":\"request\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getDigest\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"expirationTime\",\"type\":\"uint48\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"ModuleType[]\",\"name\":\"moduleTypes\",\"type\":\"uint256[]\"}],\"internalType\":\"struct AttestationRequest[]\",\"name\":\"requests\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getDigest\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ResolverUID\",\"name\":\"resolverUID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"resolverContext\",\"type\":\"bytes\"}],\"name\":\"registerModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IExternalResolver\",\"name\":\"resolver\",\"type\":\"address\"}],\"name\":\"registerResolver\",\"outputs\":[{\"internalType\":\"ResolverUID\",\"name\":\"uid\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"schema\",\"type\":\"string\"},{\"internalType\":\"contract IExternalSchemaValidator\",\"name\":\"validator\",\"type\":\"address\"}],\"name\":\"registerSchema\",\"outputs\":[{\"internalType\":\"SchemaUID\",\"name\":\"uid\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"}],\"internalType\":\"struct RevocationRequest[]\",\"name\":\"requests\",\"type\":\"tuple[]\"}],\"name\":\"revoke\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"}],\"internalType\":\"struct RevocationRequest[]\",\"name\":\"requests\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"revoke\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"}],\"internalType\":\"struct RevocationRequest\",\"name\":\"request\",\"type\":\"tuple\"}],\"name\":\"revoke\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"}],\"internalType\":\"struct RevocationRequest\",\"name\":\"request\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"revoke\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ResolverUID\",\"name\":\"uid\",\"type\":\"bytes32\"},{\"internalType\":\"contract IExternalResolver\",\"name\":\"resolver\",\"type\":\"address\"}],\"name\":\"setResolver\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ResolverUID\",\"name\":\"uid\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferResolverOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"threshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"}],\"name\":\"trustAttesters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"rhinestone | zeroknots.eth, Konrad Kopp (@kopy-kat)\",\"kind\":\"dev\",\"methods\":{\"attest(bytes32,(address,uint48,bytes,uint256[]))\":{\"details\":\"This function will revert if the same module is attested twice by the same attester. If you want to re-attest, you have to revoke your attestation first, and then attest again.\",\"params\":{\"request\":\"a single AttestationRequest\",\"schemaUID\":\"The SchemaUID of the schema the attestation is based on.\"}},\"attest(bytes32,(address,uint48,bytes,uint256[])[])\":{\"details\":\"This function will revert if the same module is attested twice by the same attester. If you want to re-attest, you have to revoke your attestation first, and then attest again.\",\"params\":{\"requests\":\"An array of AttestationRequest\",\"schemaUID\":\"The SchemaUID of the schema the attestation is based on.\"}},\"attest(bytes32,address,(address,uint48,bytes,uint256[]),bytes)\":{\"details\":\"This function will revert if the same module is attested twice by the same attester. If you want to re-attest, you have to revoke your attestation first, and then attest again.\",\"params\":{\"attester\":\"The address of the attester\",\"request\":\"An AttestationRequest\",\"schemaUID\":\"The SchemaUID of the schema the attestation is based on.\",\"signature\":\"The signature of the attester. ECDSA or ERC1271\"}},\"attest(bytes32,address,(address,uint48,bytes,uint256[])[],bytes)\":{\"details\":\"This function will revert if the same module is attested twice by the same attester. If you want to re-attest, you have to revoke your attestation first, and then attest again.\",\"params\":{\"attester\":\"The address of the attester\",\"requests\":\"An array of AttestationRequest\",\"schemaUID\":\"The SchemaUID of the schema the attestation is based on.\",\"signature\":\"The signature of the attester. ECDSA or ERC1271\"}},\"calcModuleAddress(bytes32,bytes)\":{\"params\":{\"initCode\":\"module initcode\",\"salt\":\"CREATE2 salt\"},\"returns\":{\"_0\":\"moduleAddress counterfactual address of the module deployment\"}},\"deployModule(bytes32,bytes32,bytes,bytes,bytes)\":{\"params\":{\"initCode\":\"The initCode to be used in the `CREATE2` factory\",\"metadata\":\"The metadata to be stored on the registry. This field is optional, and might be used by the module developer to store additional information about the module or facilitate business logic with the Resolver stub\",\"resolverContext\":\"bytes that will be passed to the resolver contract\",\"resolverUID\":\"The resolverUID to be used in the `CREATE2` factory\",\"salt\":\"The salt to be used in the `CREATE2` factory. This adheres to Pr000xy/Create2Factory.sol salt formatting. The salt's first bytes20 should be the address of the sender or bytes20(0) to bypass the check (this will lose replay protection)\"}},\"deployViaFactory(address,bytes,bytes,bytes32,bytes)\":{\"details\":\"Registry can use other factories to deploy the module.Note that this function will call the external factory via the FactoryTrampoline contract. Factory MUST not assume that msg.sender == registryThis function is used to deploy and register a module using a factory contract. Since one of the parameters of this function is a unique resolverUID and any registered module address can only be registered once, using this function is of risk for a frontrun attack\"},\"eip712Domain()\":{\"details\":\"See: https://eips.ethereum.org/EIPS/eip-5267\"},\"findModule(address)\":{\"params\":{\"moduleAddress\":\"The address of the module\"}},\"findResolver(bytes32)\":{\"params\":{\"uid\":\"The UID of the resolver.\"}},\"findTrustedAttesters(address)\":{\"params\":{\"smartAccount\":\"The address of the Smart Account\"}},\"registerModule(bytes32,address,bytes,bytes)\":{\"details\":\"This function is used to deploy and register an already deployed module. Since one of the parameters of this function is a unique resolverUID and any registered module address can only be registered once, using this function is of risk for a frontrun attackthe sender address of this registration is set to address(0) since anyone can invoke this function\",\"params\":{\"metadata\":\"The metadata to be stored on the registry. This field is optional, and might be used by the module developer to store additional information about the module or facilitate business logic with the Resolver stub\",\"moduleAddress\":\"The address of the module to be registered\",\"resolverContext\":\"bytes that will be passed to the resolver contract\",\"resolverUID\":\"The resolverUID to be used for the module\"}},\"registerResolver(address)\":{\"params\":{\"resolver\":\"external resolver contract\"},\"returns\":{\"uid\":\"ResolverUID of the registered resolver\"}},\"registerSchema(string,address)\":{\"params\":{\"schema\":\"ABI schema used to encode attestations that are made with this schema\",\"validator\":\"(optional) external schema validator that will be used to validate attestations. use address(0), if you don't need an external validator\"},\"returns\":{\"uid\":\"SchemaUID of the registered schema\"}},\"revoke((address))\":{\"details\":\"this function will revert if the attestation is not foundthis function will revert if the attestation is already revoked\",\"params\":{\"request\":\"single RevocationRequest\"}},\"revoke((address)[])\":{\"details\":\"this function will revert if the attestation is not foundthis function will revert if the attestation is already revoked\",\"params\":{\"requests\":\"the RevocationRequests\"}},\"revoke(address,(address),bytes)\":{\"params\":{\"attester\":\"the signer / revoker\",\"request\":\"single RevocationRequest\",\"signature\":\"ECDSA or ERC1271 signature\"}},\"revoke(address,(address)[],bytes)\":{\"details\":\"if you want to revoke multiple attestations, but from different attesters, call this function multiple times\",\"params\":{\"attester\":\"the signer / revoker\",\"requests\":\"array of RevocationRequests\",\"signature\":\"ECDSA or ERC1271 signature\"}},\"setResolver(bytes32,address)\":{\"params\":{\"resolver\":\"The new resolver implementation address.\",\"uid\":\"The UID of the resolver.\"}},\"transferResolverOwnership(bytes32,address)\":{\"params\":{\"newOwner\":\"The address of the new owner\",\"uid\":\"The UID of the resolver to transfer ownership for\"}},\"trustAttesters(uint8,address[])\":{\"details\":\"this function reverts, if address(0), or duplicates are provided in attesters[]\",\"params\":{\"attesters\":\"The addresses of the attesters to be trusted.\",\"threshold\":\"The minimum number of attestations required for a module to be considered secure.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"attest(bytes32,(address,uint48,bytes,uint256[]))\":{\"notice\":\"Allows `msg.sender` to attest to multiple modules' security status. The `AttestationRequest.Data` provided should match the attestation schema defined by the Schema corresponding to the SchemaUID\"},\"attest(bytes32,(address,uint48,bytes,uint256[])[])\":{\"notice\":\"Allows `msg.sender` to attest to multiple modules' security status. The `AttestationRequest.Data` provided should match the attestation schema defined by the Schema corresponding to the SchemaUID\"},\"attest(bytes32,address,(address,uint48,bytes,uint256[]),bytes)\":{\"notice\":\"Allows attester to attest by signing an `AttestationRequest` (`ECDSA` or `ERC1271`) The `AttestationRequest.Data` provided should match the attestation schema defined by the Schema corresponding to the SchemaUID\"},\"attest(bytes32,address,(address,uint48,bytes,uint256[])[],bytes)\":{\"notice\":\"Allows attester to attest by signing an `AttestationRequest` (`ECDSA` or `ERC1271`) The `AttestationRequest.Data` provided should match the attestation schema defined by the Schema corresponding to the SchemaUID\"},\"calcModuleAddress(bytes32,bytes)\":{\"notice\":\"in conjunction with the deployModule() function, this function let's you predict the address of a CREATE2 module deployment\"},\"deployModule(bytes32,bytes32,bytes,bytes,bytes)\":{\"notice\":\"Module Developers can deploy their module Bytecode directly via the registry. This registry implements a `CREATE2` factory, that allows module developers to register and deploy module bytecode\"},\"deployViaFactory(address,bytes,bytes,bytes32,bytes)\":{\"notice\":\"In order to make the integration into existing business logics possible, the Registry is able to utilize external factories that can be utilized to deploy the modules.\"},\"findAttestation(address,address)\":{\"notice\":\"Getter function to get AttestationRequest made by one attester\"},\"findAttestations(address,address[])\":{\"notice\":\"Getter function to get AttestationRequest made by multiple attesters\"},\"findModule(address)\":{\"notice\":\"Getter function to get the stored ModuleRecord for a specific module address.\"},\"findResolver(bytes32)\":{\"notice\":\"Getter function to get the ResolverRecord of a registered resolver\"},\"findSchema(bytes32)\":{\"notice\":\"Getter function to retrieve SchemaRecord\"},\"findTrustedAttesters(address)\":{\"notice\":\"Get trusted attester for a specific Smart Account\"},\"registerModule(bytes32,address,bytes,bytes)\":{\"notice\":\"Already deployed module addresses can be registered on the registry\"},\"registerResolver(address)\":{\"notice\":\"Allows Marketplace Agents to register external resolvers.\"},\"registerSchema(string,address)\":{\"notice\":\"Register Schema and (optional) external `IExternalSchemaValidator` A Schema describe the structure of the data of attestations every attestation made on this registry, will reference a SchemaUID to make it possible to decode attestation data in human readable form overwriting a schema is not allowed, and will revert\"},\"revoke((address))\":{\"notice\":\"Allows `msg.sender` to revoke an attestation made by the same `msg.sender`\"},\"revoke((address)[])\":{\"notice\":\"Allows msg.sender to revoke multiple attestation made by the same msg.sender\"},\"revoke(address,(address),bytes)\":{\"notice\":\"Allows attester to revoke an attestation by signing an `RevocationRequest` (`ECDSA` or `ERC1271`)\"},\"revoke(address,(address)[],bytes)\":{\"notice\":\"Allows attester to revoke an attestation by signing an `RevocationRequest` (`ECDSA` or `ERC1271`)\"},\"setResolver(bytes32,address)\":{\"notice\":\"Entities that previously registered an external resolver, may update the implementation address.\"},\"transferResolverOwnership(bytes32,address)\":{\"notice\":\"Transfer ownership of resolverUID to a new address\"},\"trustAttesters(uint8,address[])\":{\"notice\":\"Allows Smart Accounts - the end users of the registry - to appoint one or many attesters as trusted.\"}},\"notice\":\"## Overview Account abstraction (or smart accounts) will deliver three key enhancements for the Ethereum ecosystem: improved UX, enhanced user security and greater wallet extensibility. Modular smart accounts are the next frontier for achieving these goals. However, it also opens up a number of new challenges that could drastically undermine the objective by opening up a plethora of new attack vectors and security concerns for accounts. The Registry aims to solve this concern by providing a means of verifying the legitimacy and security of independently built smart account modules for installation and use across any integrated smart account. It allows entities to attest to statements about modules and smart accounts to query these at module installation and/or execution time. The Registry is a Singleton that is free, open and permissionless. It also serves as the reference implementation for [ERC-7484](https://eips.ethereum.org/EIPS/eip-7484). ## Core Concepts ### Attestations Attestations on the Registry represent statements about Modules. An Attestation is made using a particular [Schema](./Schemas.md) that is used to encode and decode the Attestation data. The most important usecase for Attestations is to make statements about the security of a Module. An attestation consists of two primary elements: the Schema and the Attestation data. The Schema acts as a standardized structure for creating and validating Attestations, defining how the Attestation data is encoded and decoded. ### Schemas [Schemas](./docs/Schema.md) represent predefined structures utilized for the formation and verification of Attestation data. Using flexible Schemas rather than a single, fixed Schema allows Attesters to encode their data in a custom way, providing flexibility when creating Attestations. For example, the data of an Attestation about the outcome of the formal verification on a Module will have a very format than the data of an Attestation about what interfaces a Module supports. ### Resolvers Resolvers are external contracts that are tied to Modules and called when specific Registry actions are executed. These actions are: - attestation - revocation - module registration / deployment This architectural design aims to provide entities like Smart Account vendors or DAOs, with the flexibility to incorporate custom business logic while maintaining the robustness and security of the core functionalities implemented by the Registry ### Attesters Attesters are individuals or organizations responsible for creating and signing Attestations. They add the Attestation to the Registry, making it available for verification. ### Modules Modules are smart contracts that act as modular components that can be added to Smart Accounts. The registry is agnostic towards Smart Account or Module implementations. Only Module addresses and deployment metadata are stored on the registry. Modules are registered on the Registry either during, using `CREATE2`, `CREATE3` or a custom deployment factory, or after deployment. ## Architecture ![Sequence Diagram](https://raw.githubusercontent.com/rhinestonewtf/registry/main/public/docs/all.svg) Implementation of all features of the registry: - Register Schemas - Register External Resolvers - Register Modules - Make Attestations - Make Revocations - Delegate Trust to Attester(s)\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Registry.sol\":\"Registry\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/=node_modules/@openzeppelin/\",\":account-abstraction-v0.6/=node_modules/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":forge-std/=node_modules/forge-std/src/\",\":solady/=node_modules/solady/src/\",\":solmate/=node_modules/solmate/src/\"],\"viaIR\":true},\"sources\":{\"node_modules/forge-std/src/interfaces/IERC165.sol\":{\"keccak256\":\"0x414b2861b1acbf816ccb7346d3f16cf6c1e002e9e5e40d2f1f26fa5ddc2ea600\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://698352fb240868ea8f1d1fe389993035eeab930f10d06934f80ccfb2b6ccbfbc\",\"dweb:/ipfs/QmT6WLHAgXxFhh12kWym895oTzXid1326iZiwT3pyfggoT\"]},\"node_modules/solady/src/utils/EIP712.sol\":{\"keccak256\":\"0xb5c4c8ac5368c9785b4e30314f4ad6f3ae13bdc21679007735681d13da797bec\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c4456a4eaa8748f802fd1188db6405d18c452eb7c0dde84a49b49a7f94b5970d\",\"dweb:/ipfs/QmZzsFn4VwvBFy2MJVJXvntCQsDRCXbRrSKKfXxXv9jYGM\"]},\"node_modules/solady/src/utils/LibSort.sol\":{\"keccak256\":\"0xfa4028961ad53620a8e8e6e8d141c5f409c45d7ca4240aa39f2a48e3d817fbec\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://284d332203cc8f6d6bcbc48b2021fb35b4adc2ebdd5482b8ce8b89f64b8897ba\",\"dweb:/ipfs/QmRptNWkfa6CGSGhPJ5qqN83qfXBst1WiEGU51i4y4AXVy\"]},\"node_modules/solady/src/utils/SSTORE2.sol\":{\"keccak256\":\"0xc6641e3dbc885d6a3032f5c92ebc703c3c7c821c8c3c645b26c9bea298736276\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c7751ad70faf3d0a0412d4ec80397ca56edb97ffd319dd4589fa38b2549f1c2e\",\"dweb:/ipfs/QmVJztYdnsxTwFT5WWYvbjyi38aUQUZisL5qZsYW2jqDHV\"]},\"node_modules/solady/src/utils/SignatureCheckerLib.sol\":{\"keccak256\":\"0x7a7acc59723ed291f24d9a2ed019109c8be69f32701f35f8a61dc7fff6652379\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7bab15a03dfca0567d7472933ee4e776fc21f9dfb6c4dbc06934fa75eceeff5e\",\"dweb:/ipfs/QmPUuKsRwpZXz15DpsoJMMPN9DtZiRvMfwjqJScxkppNsP\"]},\"src/Common.sol\":{\"keccak256\":\"0x819a41a1fa49f93e2921aac38ed7cacc9d810dce18bbb02cc99eab7264a1f176\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://0989a6aadf4f11155f15992ba743464ca38f113ec12c80ceacced5dc3fdc6935\",\"dweb:/ipfs/QmeiCsTzGjSbWnWEqq91YTuynm9gLWFRnTN2cLw8YitvTe\"]},\"src/DataTypes.sol\":{\"keccak256\":\"0x17a21d96dbda1704f888f46565731cc676d5fd4d989ea6819a87a8fb0895c47b\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://91c12e4dc5254821d3ac965369b40656242d90e098a6ecc1e721d6dcf61e64fc\",\"dweb:/ipfs/Qma78sqHvpP7AFj2gKAQe2z4Na3nxT5NRtaSuEJGezDyN8\"]},\"src/IRegistry.sol\":{\"keccak256\":\"0xb03203d856c112b1e663615484f27b7597f0ef09b573a42eb68425683a386437\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://ff723cd22c1c4f02c1be8ed6fe69531d99791cf49be95fc9429002edcec2d0f6\",\"dweb:/ipfs/QmXBuVzbS5v1TSpNo57LUgisM35KiYwQdhrKythwLmBxFQ\"]},\"src/Registry.sol\":{\"keccak256\":\"0x04a514f7afbe44935726784e61188377c49f812373858ebae8d67983e3b9b0c6\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://cbc52031e47f3a58be6ca63e1884a032896e0e3a96056919504f7a99cb152cf9\",\"dweb:/ipfs/QmT25Kjvn7GnjHJjFj3r4y372ucMdKhqd67JH2uwsMM7KQ\"]},\"src/core/Attestation.sol\":{\"keccak256\":\"0x60184387856220ebc5df67f9fe7139d12a0f39a904d5612ad8149ad80ec0146a\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://2002908b543d03320c1b2158b632e42acd5353c63e61417ee7627de0dc9a704b\",\"dweb:/ipfs/QmdyV9ZBxJyEizhkuutWngRPQzsvcbrRzu7EKFZ77Pyf4H\"]},\"src/core/AttestationManager.sol\":{\"keccak256\":\"0xb6e5ab1c5b473550c9119d89085b7ed304cc5e0c33d66f3b22a1c3b9040eed9d\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://efb6495c8246b834beb449c0d9f48e576c1a3603a09a684cb0e1cd0b1dc62990\",\"dweb:/ipfs/Qmcj4gqXefVZFf5TVoWT6KKH6DDqYv4SrA4N1XYnLrDNci\"]},\"src/core/ModuleManager.sol\":{\"keccak256\":\"0xe95b55406347a1051a0fb636f0c520466bd54c1d0c5ad8546241fe0cfbf67169\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://52843bb46c61acfad5ae5bce80b4508f1e851352371051d027675c7bc3744332\",\"dweb:/ipfs/QmdAuWEq2ogsrALuYnXsVbNYD6nwodN6GcLt4Jcv9PDZpS\"]},\"src/core/ResolverManager.sol\":{\"keccak256\":\"0x62c56f2894817468894e66036e7e4693da1856baef1b70d7fa52723182e5de3c\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://7999eb35bc4063fce696c15ef6e56115a648c5ecf6afd395679d61365ed1f2f7\",\"dweb:/ipfs/QmaoauDC8Rmi4z5NDpyYQuLHi3JtNZWTmk6CJ2rRanwSJi\"]},\"src/core/SchemaManager.sol\":{\"keccak256\":\"0xf5f7fe4ea89cc88ea1cc68ca9ba765790fda7eb309fb05d5bf4387c13068231d\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://419dc546ad4c27f754385815c51c78baa9653897c28335df73cda13db365acd3\",\"dweb:/ipfs/QmPCiUpNv9u2DbYL3Cc27Y1Bdc1RgZzHcsNiDLYHRGB4Mh\"]},\"src/core/SignedAttestation.sol\":{\"keccak256\":\"0x1cdd47ad08862edb59a18aa6a3ef68f7e1ed5034573f26a2ad7e7406f4e49aa5\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://3b105e932f5959d8a5709ae7eaa699da694683dd88ad3f2d5026a8854c4a8cc8\",\"dweb:/ipfs/QmSEGkJhdGppzFJ2au8hKQJE5hjooFiCkYhSXscUX1e6Y7\"]},\"src/core/TrustManager.sol\":{\"keccak256\":\"0x7310e4d0cc27000c2bc9045fdd84046585c0832e4adbd88c37cfc4bd9333a001\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://d248513fab87138bba2617b3c8137aaf014bcb4b404ff0ce03fc0c4eaa4aa74e\",\"dweb:/ipfs/QmeHNtJW5BVzEGDf3R7n8B4QNTpEUypjhVD98jBQ2Qpqcq\"]},\"src/core/TrustManagerExternalAttesterList.sol\":{\"keccak256\":\"0x02234dafb9c88de12091ecf187db1f762ba16b13520118be5c0a4153b79eab18\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://f6b5f68415f31bdc8139366465199aacd0b30ca7550a2d1040e23fa89ceb2cd0\",\"dweb:/ipfs/QmVgNUkDRRMC6bLJFyymi6Wt6kwyysZDhPvZRUG3TvkHQb\"]},\"src/external/IExternalResolver.sol\":{\"keccak256\":\"0x258211aa342cdcde51952e0f523136b71d320a2208a7873b03d0c6c210776d5f\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://3406f08574205e786e228c0126d06d78ffb3d8724efa6344a18675eef61e9077\",\"dweb:/ipfs/QmZTZEY5eWmBq6ho6F75UGJ7VYuh2JwJiuQfUXGPrJD7JK\"]},\"src/external/IExternalSchemaValidator.sol\":{\"keccak256\":\"0xeaefb6118769085ca0de5b3048e5b4a8f860f99d4361008b4220195f603e4bd2\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://d8a12afbc6a3a453d5810b67d775d9cb24bc52d1fc2843625910576285257526\",\"dweb:/ipfs/QmXDcULeqy7VSXitbyrYcr32Bt7msuv7krG7g5u1nuCJx2\"]},\"src/interfaces/IERC7484.sol\":{\"keccak256\":\"0xaffbc0cff08e0bd99e1d3d338829ee7b7a1fed9cb25fc949b21c150111a9084a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7860e358c9dc537250107b07821ebc5eb7fcf4b014a67100ca15957c842fca2\",\"dweb:/ipfs/QmSWjcQewHnTJDCdDdMWYBfc6tgkcX9DmkDUwsg8xNqMCF\"]},\"src/lib/AttestationLib.sol\":{\"keccak256\":\"0x10ec6b63b3a8b0863445d3b450c68e6f49929834eee0d87687e39370c9cdf7a8\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://3d8fe6e24363c50143314048ece64704d701cfda0cdb491b82c76a45fcfe5f42\",\"dweb:/ipfs/QmNkG8P2FWe1iVHcbLBvtZmifEAMnJksRKttEtfGGm8AEE\"]},\"src/lib/Helpers.sol\":{\"keccak256\":\"0x7bd10d203db343b4e5ae416a24a1380ab9de2e729b83694c9a76a6f4c365be22\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://d5f74fa5b6c7d8cc9ec7780b143d2d4057e2c18b5bdeed17187fd35b31192bd1\",\"dweb:/ipfs/QmPJQLXB7t1KyyCB54imUXGzBhCRKV1aLubiNiD3deFXAB\"]},\"src/lib/ModuleDeploymentLib.sol\":{\"keccak256\":\"0x835b2a14e5a5afb37c44a2c28631a00c1de0e179dc76331ec0941aeb5819c2fe\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://df0eccc2feaf225f19a8e6ff47b759ccc01343f39c492675a55760580e28c1e8\",\"dweb:/ipfs/QmXv2Fa82SZfsN9qfFCYYD774Ho7Hfc6v6wtmDFfQN4U5L\"]},\"src/lib/ModuleTypeLib.sol\":{\"keccak256\":\"0x41f7165818e8316f1925a478e03745948beee02ac61b818f718987aaf7482a15\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0fd85099ae89e521e99a0ef9b55ec752021327d3041e0f3c22cb4f65e62af2fb\",\"dweb:/ipfs/QmR4tdbb17bJZceRRbrck9GkkCgzThdTeqkv5Yf7u6WLe1\"]},\"src/lib/StubLib.sol\":{\"keccak256\":\"0xf172214e19da44b42b9db3dfd70b98a5bf6e1d5c949ddcf3472bf6564dd9fdd7\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://37250139d5e0ae9f7c2f01cb751c52bf9807dd3e0b9ce104828879fcbbd40b79\",\"dweb:/ipfs/QmawFtrAQQbH7cssFigzybaMWfZ8we26TMAPFz8dtR2D7X\"]},\"src/lib/TrustLib.sol\":{\"keccak256\":\"0xb2edae3fdf48dd665c7c59b7882dd3d3269a5fd667212877e7669b721f9755d1\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://e2e8b76ff9403e7a7cdb332377eae4086d95ea0c2ac7bf6b89480c3282719b24\",\"dweb:/ipfs/QmXMNLwYuRPViaMzGRsFVhQobiJwGnm4EqXqxFM2LHMEWb\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.24+commit.e11b9ed9" }, + "language": "Solidity", + "output": { + "abi": [ + { "inputs": [], "type": "error", "name": "AccessDenied" }, + { "inputs": [], "type": "error", "name": "AlreadyAttested" }, + { + "inputs": [ + { "internalType": "address", "name": "module", "type": "address" } + ], + "type": "error", + "name": "AlreadyRegistered" + }, + { "inputs": [], "type": "error", "name": "AlreadyRevoked" }, + { "inputs": [], "type": "error", "name": "AttestationNotFound" }, + { "inputs": [], "type": "error", "name": "DifferentResolvers" }, + { + "inputs": [], + "type": "error", + "name": "ExternalError_ModuleRegistration" + }, + { + "inputs": [], + "type": "error", + "name": "ExternalError_ResolveAttestation" + }, + { + "inputs": [], + "type": "error", + "name": "ExternalError_ResolveRevocation" + }, + { + "inputs": [], + "type": "error", + "name": "ExternalError_SchemaValidation" + }, + { + "inputs": [ + { "internalType": "address", "name": "factory", "type": "address" } + ], + "type": "error", + "name": "FactoryCallFailed" + }, + { "inputs": [], "type": "error", "name": "InsufficientAttestations" }, + { "inputs": [], "type": "error", "name": "InvalidAddress" }, + { "inputs": [], "type": "error", "name": "InvalidAttestation" }, + { "inputs": [], "type": "error", "name": "InvalidDeployment" }, + { "inputs": [], "type": "error", "name": "InvalidExpirationTime" }, + { "inputs": [], "type": "error", "name": "InvalidModuleType" }, + { "inputs": [], "type": "error", "name": "InvalidModuleTypes" }, + { + "inputs": [ + { + "internalType": "contract IExternalResolver", + "name": "resolver", + "type": "address" + } + ], + "type": "error", + "name": "InvalidResolver" + }, + { + "inputs": [ + { "internalType": "ResolverUID", "name": "uid", "type": "bytes32" } + ], + "type": "error", + "name": "InvalidResolverUID" + }, + { "inputs": [], "type": "error", "name": "InvalidSalt" }, + { "inputs": [], "type": "error", "name": "InvalidSchema" }, + { + "inputs": [ + { + "internalType": "contract IExternalSchemaValidator", + "name": "validator", + "type": "address" + } + ], + "type": "error", + "name": "InvalidSchemaValidator" + }, + { "inputs": [], "type": "error", "name": "InvalidSignature" }, + { "inputs": [], "type": "error", "name": "InvalidThreshold" }, + { + "inputs": [], + "type": "error", + "name": "InvalidTrustedAttesterInput" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + } + ], + "type": "error", + "name": "ModuleAddressIsNotContract" + }, + { + "inputs": [ + { "internalType": "address", "name": "module", "type": "address" } + ], + "type": "error", + "name": "ModuleNotFoundInRegistry" + }, + { "inputs": [], "type": "error", "name": "NoTrustedAttestersFound" }, + { "inputs": [], "type": "error", "name": "ResolverAlreadyExists" }, + { + "inputs": [ + { "internalType": "address", "name": "attester", "type": "address" } + ], + "type": "error", + "name": "RevokedAttestation" + }, + { + "inputs": [ + { "internalType": "SchemaUID", "name": "uid", "type": "bytes32" } + ], + "type": "error", + "name": "SchemaAlreadyExists" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "moduleAddress", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "attester", + "type": "address", + "indexed": true + }, + { + "internalType": "SchemaUID", + "name": "schemaUID", + "type": "bytes32", + "indexed": false + }, + { + "internalType": "AttestationDataRef", + "name": "sstore2Pointer", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "Attested", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "implementation", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "ModuleRegistration", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "ResolverUID", + "name": "uid", + "type": "bytes32", + "indexed": true + }, + { + "internalType": "address", + "name": "resolver", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "NewResolver", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "ResolverUID", + "name": "uid", + "type": "bytes32", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewResolverOwner", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "smartAccount", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "NewTrustedAttesters", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "contract IExternalResolver", + "name": "resolver", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "ResolverRevocationError", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "moduleAddress", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "revoker", + "type": "address", + "indexed": true + }, + { + "internalType": "SchemaUID", + "name": "schema", + "type": "bytes32", + "indexed": false + } + ], + "type": "event", + "name": "Revoked", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "SchemaUID", + "name": "uid", + "type": "bytes32", + "indexed": true + }, + { + "internalType": "address", + "name": "registerer", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "SchemaRegistered", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "SchemaUID", + "name": "schemaUID", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "attester", + "type": "address" + }, + { + "internalType": "struct AttestationRequest[]", + "name": "requests", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + }, + { + "internalType": "uint48", + "name": "expirationTime", + "type": "uint48" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { + "internalType": "ModuleType[]", + "name": "moduleTypes", + "type": "uint256[]" + } + ] + }, + { "internalType": "bytes", "name": "signature", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "attest" + }, + { + "inputs": [ + { + "internalType": "SchemaUID", + "name": "schemaUID", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "attester", + "type": "address" + }, + { + "internalType": "struct AttestationRequest", + "name": "request", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + }, + { + "internalType": "uint48", + "name": "expirationTime", + "type": "uint48" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { + "internalType": "ModuleType[]", + "name": "moduleTypes", + "type": "uint256[]" + } + ] + }, + { "internalType": "bytes", "name": "signature", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "attest" + }, + { + "inputs": [ + { + "internalType": "SchemaUID", + "name": "schemaUID", + "type": "bytes32" + }, + { + "internalType": "struct AttestationRequest", + "name": "request", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + }, + { + "internalType": "uint48", + "name": "expirationTime", + "type": "uint48" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { + "internalType": "ModuleType[]", + "name": "moduleTypes", + "type": "uint256[]" + } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "attest" + }, + { + "inputs": [ + { + "internalType": "SchemaUID", + "name": "schemaUID", + "type": "bytes32" + }, + { + "internalType": "struct AttestationRequest[]", + "name": "requests", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + }, + { + "internalType": "uint48", + "name": "expirationTime", + "type": "uint48" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { + "internalType": "ModuleType[]", + "name": "moduleTypes", + "type": "uint256[]" + } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "attest" + }, + { + "inputs": [ + { "internalType": "address", "name": "attester", "type": "address" } + ], + "stateMutability": "view", + "type": "function", + "name": "attesterNonce", + "outputs": [ + { "internalType": "uint256", "name": "nonce", "type": "uint256" } + ] + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, + { "internalType": "bytes", "name": "initCode", "type": "bytes" } + ], + "stateMutability": "view", + "type": "function", + "name": "calcModuleAddress", + "outputs": [ + { "internalType": "address", "name": "", "type": "address" } + ] + }, + { + "inputs": [ + { "internalType": "address", "name": "module", "type": "address" }, + { + "internalType": "address[]", + "name": "attesters", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "threshold", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "check" + }, + { + "inputs": [ + { "internalType": "address", "name": "module", "type": "address" }, + { + "internalType": "ModuleType", + "name": "moduleType", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "attesters", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "threshold", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "check" + }, + { + "inputs": [ + { "internalType": "address", "name": "module", "type": "address" }, + { + "internalType": "ModuleType", + "name": "moduleType", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "check" + }, + { + "inputs": [ + { "internalType": "address", "name": "module", "type": "address" } + ], + "stateMutability": "view", + "type": "function", + "name": "check" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "smartAccount", + "type": "address" + }, + { "internalType": "address", "name": "module", "type": "address" } + ], + "stateMutability": "view", + "type": "function", + "name": "checkForAccount" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "smartAccount", + "type": "address" + }, + { "internalType": "address", "name": "module", "type": "address" }, + { + "internalType": "ModuleType", + "name": "moduleType", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "checkForAccount" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, + { + "internalType": "ResolverUID", + "name": "resolverUID", + "type": "bytes32" + }, + { "internalType": "bytes", "name": "initCode", "type": "bytes" }, + { "internalType": "bytes", "name": "metadata", "type": "bytes" }, + { + "internalType": "bytes", + "name": "resolverContext", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function", + "name": "deployModule", + "outputs": [ + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + } + ] + }, + { + "inputs": [ + { "internalType": "address", "name": "factory", "type": "address" }, + { + "internalType": "bytes", + "name": "callOnFactory", + "type": "bytes" + }, + { "internalType": "bytes", "name": "metadata", "type": "bytes" }, + { + "internalType": "ResolverUID", + "name": "resolverUID", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "resolverContext", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function", + "name": "deployViaFactory", + "outputs": [ + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "eip712Domain", + "outputs": [ + { "internalType": "bytes1", "name": "fields", "type": "bytes1" }, + { "internalType": "string", "name": "name", "type": "string" }, + { "internalType": "string", "name": "version", "type": "string" }, + { "internalType": "uint256", "name": "chainId", "type": "uint256" }, + { + "internalType": "address", + "name": "verifyingContract", + "type": "address" + }, + { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, + { + "internalType": "uint256[]", + "name": "extensions", + "type": "uint256[]" + } + ] + }, + { + "inputs": [ + { "internalType": "address", "name": "module", "type": "address" }, + { "internalType": "address", "name": "attester", "type": "address" } + ], + "stateMutability": "view", + "type": "function", + "name": "findAttestation", + "outputs": [ + { + "internalType": "struct AttestationRecord", + "name": "attestation", + "type": "tuple", + "components": [ + { "internalType": "uint48", "name": "time", "type": "uint48" }, + { + "internalType": "uint48", + "name": "expirationTime", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "revocationTime", + "type": "uint48" + }, + { + "internalType": "PackedModuleTypes", + "name": "moduleTypes", + "type": "uint32" + }, + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "attester", + "type": "address" + }, + { + "internalType": "AttestationDataRef", + "name": "dataPointer", + "type": "address" + }, + { + "internalType": "SchemaUID", + "name": "schemaUID", + "type": "bytes32" + } + ] + } + ] + }, + { + "inputs": [ + { "internalType": "address", "name": "module", "type": "address" }, + { + "internalType": "address[]", + "name": "attesters", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function", + "name": "findAttestations", + "outputs": [ + { + "internalType": "struct AttestationRecord[]", + "name": "attestations", + "type": "tuple[]", + "components": [ + { "internalType": "uint48", "name": "time", "type": "uint48" }, + { + "internalType": "uint48", + "name": "expirationTime", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "revocationTime", + "type": "uint48" + }, + { + "internalType": "PackedModuleTypes", + "name": "moduleTypes", + "type": "uint32" + }, + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "attester", + "type": "address" + }, + { + "internalType": "AttestationDataRef", + "name": "dataPointer", + "type": "address" + }, + { + "internalType": "SchemaUID", + "name": "schemaUID", + "type": "bytes32" + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "findModule", + "outputs": [ + { + "internalType": "struct ModuleRecord", + "name": "moduleRecord", + "type": "tuple", + "components": [ + { + "internalType": "ResolverUID", + "name": "resolverUID", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { "internalType": "bytes", "name": "metadata", "type": "bytes" } + ] + } + ] + }, + { + "inputs": [ + { "internalType": "ResolverUID", "name": "uid", "type": "bytes32" } + ], + "stateMutability": "view", + "type": "function", + "name": "findResolver", + "outputs": [ + { + "internalType": "struct ResolverRecord", + "name": "", + "type": "tuple", + "components": [ + { + "internalType": "contract IExternalResolver", + "name": "resolver", + "type": "address" + }, + { + "internalType": "address", + "name": "resolverOwner", + "type": "address" + } + ] + } + ] + }, + { + "inputs": [ + { "internalType": "SchemaUID", "name": "uid", "type": "bytes32" } + ], + "stateMutability": "view", + "type": "function", + "name": "findSchema", + "outputs": [ + { + "internalType": "struct SchemaRecord", + "name": "", + "type": "tuple", + "components": [ + { + "internalType": "uint48", + "name": "registeredAt", + "type": "uint48" + }, + { + "internalType": "contract IExternalSchemaValidator", + "name": "validator", + "type": "address" + }, + { "internalType": "string", "name": "schema", "type": "string" } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "smartAccount", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "findTrustedAttesters", + "outputs": [ + { + "internalType": "address[]", + "name": "attesters", + "type": "address[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "struct AttestationRequest", + "name": "request", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + }, + { + "internalType": "uint48", + "name": "expirationTime", + "type": "uint48" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { + "internalType": "ModuleType[]", + "name": "moduleTypes", + "type": "uint256[]" + } + ] + }, + { "internalType": "address", "name": "attester", "type": "address" } + ], + "stateMutability": "view", + "type": "function", + "name": "getDigest", + "outputs": [ + { "internalType": "bytes32", "name": "digest", "type": "bytes32" } + ] + }, + { + "inputs": [ + { + "internalType": "struct RevocationRequest[]", + "name": "requests", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + } + ] + }, + { "internalType": "address", "name": "attester", "type": "address" } + ], + "stateMutability": "view", + "type": "function", + "name": "getDigest", + "outputs": [ + { "internalType": "bytes32", "name": "digest", "type": "bytes32" } + ] + }, + { + "inputs": [ + { + "internalType": "struct RevocationRequest", + "name": "request", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + } + ] + }, + { "internalType": "address", "name": "attester", "type": "address" } + ], + "stateMutability": "view", + "type": "function", + "name": "getDigest", + "outputs": [ + { "internalType": "bytes32", "name": "digest", "type": "bytes32" } + ] + }, + { + "inputs": [ + { + "internalType": "struct AttestationRequest[]", + "name": "requests", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + }, + { + "internalType": "uint48", + "name": "expirationTime", + "type": "uint48" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { + "internalType": "ModuleType[]", + "name": "moduleTypes", + "type": "uint256[]" + } + ] + }, + { "internalType": "address", "name": "attester", "type": "address" } + ], + "stateMutability": "view", + "type": "function", + "name": "getDigest", + "outputs": [ + { "internalType": "bytes32", "name": "digest", "type": "bytes32" } + ] + }, + { + "inputs": [ + { + "internalType": "ResolverUID", + "name": "resolverUID", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + }, + { "internalType": "bytes", "name": "metadata", "type": "bytes" }, + { + "internalType": "bytes", + "name": "resolverContext", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "registerModule" + }, + { + "inputs": [ + { + "internalType": "contract IExternalResolver", + "name": "resolver", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "registerResolver", + "outputs": [ + { "internalType": "ResolverUID", "name": "uid", "type": "bytes32" } + ] + }, + { + "inputs": [ + { "internalType": "string", "name": "schema", "type": "string" }, + { + "internalType": "contract IExternalSchemaValidator", + "name": "validator", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "registerSchema", + "outputs": [ + { "internalType": "SchemaUID", "name": "uid", "type": "bytes32" } + ] + }, + { + "inputs": [ + { + "internalType": "struct RevocationRequest[]", + "name": "requests", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "revoke" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "attester", + "type": "address" + }, + { + "internalType": "struct RevocationRequest[]", + "name": "requests", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + } + ] + }, + { "internalType": "bytes", "name": "signature", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "revoke" + }, + { + "inputs": [ + { + "internalType": "struct RevocationRequest", + "name": "request", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "revoke" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "attester", + "type": "address" + }, + { + "internalType": "struct RevocationRequest", + "name": "request", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + } + ] + }, + { "internalType": "bytes", "name": "signature", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "revoke" + }, + { + "inputs": [ + { "internalType": "ResolverUID", "name": "uid", "type": "bytes32" }, + { + "internalType": "contract IExternalResolver", + "name": "resolver", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setResolver" + }, + { + "inputs": [ + { "internalType": "ResolverUID", "name": "uid", "type": "bytes32" }, + { "internalType": "address", "name": "newOwner", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferResolverOwnership" + }, + { + "inputs": [ + { "internalType": "uint8", "name": "threshold", "type": "uint8" }, + { + "internalType": "address[]", + "name": "attesters", + "type": "address[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "trustAttesters" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "attest(bytes32,(address,uint48,bytes,uint256[]))": { + "details": "This function will revert if the same module is attested twice by the same attester. If you want to re-attest, you have to revoke your attestation first, and then attest again.", + "params": { + "request": "a single AttestationRequest", + "schemaUID": "The SchemaUID of the schema the attestation is based on." + } + }, + "attest(bytes32,(address,uint48,bytes,uint256[])[])": { + "details": "This function will revert if the same module is attested twice by the same attester. If you want to re-attest, you have to revoke your attestation first, and then attest again.", + "params": { + "requests": "An array of AttestationRequest", + "schemaUID": "The SchemaUID of the schema the attestation is based on." + } + }, + "attest(bytes32,address,(address,uint48,bytes,uint256[]),bytes)": { + "details": "This function will revert if the same module is attested twice by the same attester. If you want to re-attest, you have to revoke your attestation first, and then attest again.", + "params": { + "attester": "The address of the attester", + "request": "An AttestationRequest", + "schemaUID": "The SchemaUID of the schema the attestation is based on.", + "signature": "The signature of the attester. ECDSA or ERC1271" + } + }, + "attest(bytes32,address,(address,uint48,bytes,uint256[])[],bytes)": { + "details": "This function will revert if the same module is attested twice by the same attester. If you want to re-attest, you have to revoke your attestation first, and then attest again.", + "params": { + "attester": "The address of the attester", + "requests": "An array of AttestationRequest", + "schemaUID": "The SchemaUID of the schema the attestation is based on.", + "signature": "The signature of the attester. ECDSA or ERC1271" + } + }, + "calcModuleAddress(bytes32,bytes)": { + "params": { "initCode": "module initcode", "salt": "CREATE2 salt" }, + "returns": { + "_0": "moduleAddress counterfactual address of the module deployment" + } + }, + "deployModule(bytes32,bytes32,bytes,bytes,bytes)": { + "params": { + "initCode": "The initCode to be used in the `CREATE2` factory", + "metadata": "The metadata to be stored on the registry. This field is optional, and might be used by the module developer to store additional information about the module or facilitate business logic with the Resolver stub", + "resolverContext": "bytes that will be passed to the resolver contract", + "resolverUID": "The resolverUID to be used in the `CREATE2` factory", + "salt": "The salt to be used in the `CREATE2` factory. This adheres to Pr000xy/Create2Factory.sol salt formatting. The salt's first bytes20 should be the address of the sender or bytes20(0) to bypass the check (this will lose replay protection)" + } + }, + "deployViaFactory(address,bytes,bytes,bytes32,bytes)": { + "details": "Registry can use other factories to deploy the module.Note that this function will call the external factory via the FactoryTrampoline contract. Factory MUST not assume that msg.sender == registryThis function is used to deploy and register a module using a factory contract. Since one of the parameters of this function is a unique resolverUID and any registered module address can only be registered once, using this function is of risk for a frontrun attack" + }, + "eip712Domain()": { + "details": "See: https://eips.ethereum.org/EIPS/eip-5267" + }, + "findModule(address)": { + "params": { "moduleAddress": "The address of the module" } + }, + "findResolver(bytes32)": { + "params": { "uid": "The UID of the resolver." } + }, + "findTrustedAttesters(address)": { + "params": { "smartAccount": "The address of the Smart Account" } + }, + "registerModule(bytes32,address,bytes,bytes)": { + "details": "This function is used to deploy and register an already deployed module. Since one of the parameters of this function is a unique resolverUID and any registered module address can only be registered once, using this function is of risk for a frontrun attackthe sender address of this registration is set to address(0) since anyone can invoke this function", + "params": { + "metadata": "The metadata to be stored on the registry. This field is optional, and might be used by the module developer to store additional information about the module or facilitate business logic with the Resolver stub", + "moduleAddress": "The address of the module to be registered", + "resolverContext": "bytes that will be passed to the resolver contract", + "resolverUID": "The resolverUID to be used for the module" + } + }, + "registerResolver(address)": { + "params": { "resolver": "external resolver contract" }, + "returns": { "uid": "ResolverUID of the registered resolver" } + }, + "registerSchema(string,address)": { + "params": { + "schema": "ABI schema used to encode attestations that are made with this schema", + "validator": "(optional) external schema validator that will be used to validate attestations. use address(0), if you don't need an external validator" + }, + "returns": { "uid": "SchemaUID of the registered schema" } + }, + "revoke((address))": { + "details": "this function will revert if the attestation is not foundthis function will revert if the attestation is already revoked", + "params": { "request": "single RevocationRequest" } + }, + "revoke((address)[])": { + "details": "this function will revert if the attestation is not foundthis function will revert if the attestation is already revoked", + "params": { "requests": "the RevocationRequests" } + }, + "revoke(address,(address),bytes)": { + "params": { + "attester": "the signer / revoker", + "request": "single RevocationRequest", + "signature": "ECDSA or ERC1271 signature" + } + }, + "revoke(address,(address)[],bytes)": { + "details": "if you want to revoke multiple attestations, but from different attesters, call this function multiple times", + "params": { + "attester": "the signer / revoker", + "requests": "array of RevocationRequests", + "signature": "ECDSA or ERC1271 signature" + } + }, + "setResolver(bytes32,address)": { + "params": { + "resolver": "The new resolver implementation address.", + "uid": "The UID of the resolver." + } + }, + "transferResolverOwnership(bytes32,address)": { + "params": { + "newOwner": "The address of the new owner", + "uid": "The UID of the resolver to transfer ownership for" + } + }, + "trustAttesters(uint8,address[])": { + "details": "this function reverts, if address(0), or duplicates are provided in attesters[]", + "params": { + "attesters": "The addresses of the attesters to be trusted.", + "threshold": "The minimum number of attestations required for a module to be considered secure." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "attest(bytes32,(address,uint48,bytes,uint256[]))": { + "notice": "Allows `msg.sender` to attest to multiple modules' security status. The `AttestationRequest.Data` provided should match the attestation schema defined by the Schema corresponding to the SchemaUID" + }, + "attest(bytes32,(address,uint48,bytes,uint256[])[])": { + "notice": "Allows `msg.sender` to attest to multiple modules' security status. The `AttestationRequest.Data` provided should match the attestation schema defined by the Schema corresponding to the SchemaUID" + }, + "attest(bytes32,address,(address,uint48,bytes,uint256[]),bytes)": { + "notice": "Allows attester to attest by signing an `AttestationRequest` (`ECDSA` or `ERC1271`) The `AttestationRequest.Data` provided should match the attestation schema defined by the Schema corresponding to the SchemaUID" + }, + "attest(bytes32,address,(address,uint48,bytes,uint256[])[],bytes)": { + "notice": "Allows attester to attest by signing an `AttestationRequest` (`ECDSA` or `ERC1271`) The `AttestationRequest.Data` provided should match the attestation schema defined by the Schema corresponding to the SchemaUID" + }, + "calcModuleAddress(bytes32,bytes)": { + "notice": "in conjunction with the deployModule() function, this function let's you predict the address of a CREATE2 module deployment" + }, + "deployModule(bytes32,bytes32,bytes,bytes,bytes)": { + "notice": "Module Developers can deploy their module Bytecode directly via the registry. This registry implements a `CREATE2` factory, that allows module developers to register and deploy module bytecode" + }, + "deployViaFactory(address,bytes,bytes,bytes32,bytes)": { + "notice": "In order to make the integration into existing business logics possible, the Registry is able to utilize external factories that can be utilized to deploy the modules." + }, + "findAttestation(address,address)": { + "notice": "Getter function to get AttestationRequest made by one attester" + }, + "findAttestations(address,address[])": { + "notice": "Getter function to get AttestationRequest made by multiple attesters" + }, + "findModule(address)": { + "notice": "Getter function to get the stored ModuleRecord for a specific module address." + }, + "findResolver(bytes32)": { + "notice": "Getter function to get the ResolverRecord of a registered resolver" + }, + "findSchema(bytes32)": { + "notice": "Getter function to retrieve SchemaRecord" + }, + "findTrustedAttesters(address)": { + "notice": "Get trusted attester for a specific Smart Account" + }, + "registerModule(bytes32,address,bytes,bytes)": { + "notice": "Already deployed module addresses can be registered on the registry" + }, + "registerResolver(address)": { + "notice": "Allows Marketplace Agents to register external resolvers." + }, + "registerSchema(string,address)": { + "notice": "Register Schema and (optional) external `IExternalSchemaValidator` A Schema describe the structure of the data of attestations every attestation made on this registry, will reference a SchemaUID to make it possible to decode attestation data in human readable form overwriting a schema is not allowed, and will revert" + }, + "revoke((address))": { + "notice": "Allows `msg.sender` to revoke an attestation made by the same `msg.sender`" + }, + "revoke((address)[])": { + "notice": "Allows msg.sender to revoke multiple attestation made by the same msg.sender" + }, + "revoke(address,(address),bytes)": { + "notice": "Allows attester to revoke an attestation by signing an `RevocationRequest` (`ECDSA` or `ERC1271`)" + }, + "revoke(address,(address)[],bytes)": { + "notice": "Allows attester to revoke an attestation by signing an `RevocationRequest` (`ECDSA` or `ERC1271`)" + }, + "setResolver(bytes32,address)": { + "notice": "Entities that previously registered an external resolver, may update the implementation address." + }, + "transferResolverOwnership(bytes32,address)": { + "notice": "Transfer ownership of resolverUID to a new address" + }, + "trustAttesters(uint8,address[])": { + "notice": "Allows Smart Accounts - the end users of the registry - to appoint one or many attesters as trusted." + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=node_modules/@openzeppelin/", + "account-abstraction-v0.6/=node_modules/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "forge-std/=node_modules/forge-std/src/", + "solady/=node_modules/solady/src/", + "solmate/=node_modules/solmate/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { "src/Registry.sol": "Registry" }, + "evmVersion": "cancun", + "libraries": {}, + "viaIR": true + }, + "sources": { + "node_modules/forge-std/src/interfaces/IERC165.sol": { + "keccak256": "0x414b2861b1acbf816ccb7346d3f16cf6c1e002e9e5e40d2f1f26fa5ddc2ea600", + "urls": [ + "bzz-raw://698352fb240868ea8f1d1fe389993035eeab930f10d06934f80ccfb2b6ccbfbc", + "dweb:/ipfs/QmT6WLHAgXxFhh12kWym895oTzXid1326iZiwT3pyfggoT" + ], + "license": "MIT" + }, + "node_modules/solady/src/utils/EIP712.sol": { + "keccak256": "0xb5c4c8ac5368c9785b4e30314f4ad6f3ae13bdc21679007735681d13da797bec", + "urls": [ + "bzz-raw://c4456a4eaa8748f802fd1188db6405d18c452eb7c0dde84a49b49a7f94b5970d", + "dweb:/ipfs/QmZzsFn4VwvBFy2MJVJXvntCQsDRCXbRrSKKfXxXv9jYGM" + ], + "license": "MIT" + }, + "node_modules/solady/src/utils/LibSort.sol": { + "keccak256": "0xfa4028961ad53620a8e8e6e8d141c5f409c45d7ca4240aa39f2a48e3d817fbec", + "urls": [ + "bzz-raw://284d332203cc8f6d6bcbc48b2021fb35b4adc2ebdd5482b8ce8b89f64b8897ba", + "dweb:/ipfs/QmRptNWkfa6CGSGhPJ5qqN83qfXBst1WiEGU51i4y4AXVy" + ], + "license": "MIT" + }, + "node_modules/solady/src/utils/SSTORE2.sol": { + "keccak256": "0xc6641e3dbc885d6a3032f5c92ebc703c3c7c821c8c3c645b26c9bea298736276", + "urls": [ + "bzz-raw://c7751ad70faf3d0a0412d4ec80397ca56edb97ffd319dd4589fa38b2549f1c2e", + "dweb:/ipfs/QmVJztYdnsxTwFT5WWYvbjyi38aUQUZisL5qZsYW2jqDHV" + ], + "license": "MIT" + }, + "node_modules/solady/src/utils/SignatureCheckerLib.sol": { + "keccak256": "0x7a7acc59723ed291f24d9a2ed019109c8be69f32701f35f8a61dc7fff6652379", + "urls": [ + "bzz-raw://7bab15a03dfca0567d7472933ee4e776fc21f9dfb6c4dbc06934fa75eceeff5e", + "dweb:/ipfs/QmPUuKsRwpZXz15DpsoJMMPN9DtZiRvMfwjqJScxkppNsP" + ], + "license": "MIT" + }, + "src/Common.sol": { + "keccak256": "0x819a41a1fa49f93e2921aac38ed7cacc9d810dce18bbb02cc99eab7264a1f176", + "urls": [ + "bzz-raw://0989a6aadf4f11155f15992ba743464ca38f113ec12c80ceacced5dc3fdc6935", + "dweb:/ipfs/QmeiCsTzGjSbWnWEqq91YTuynm9gLWFRnTN2cLw8YitvTe" + ], + "license": "AGPL-3.0-only" + }, + "src/DataTypes.sol": { + "keccak256": "0x17a21d96dbda1704f888f46565731cc676d5fd4d989ea6819a87a8fb0895c47b", + "urls": [ + "bzz-raw://91c12e4dc5254821d3ac965369b40656242d90e098a6ecc1e721d6dcf61e64fc", + "dweb:/ipfs/Qma78sqHvpP7AFj2gKAQe2z4Na3nxT5NRtaSuEJGezDyN8" + ], + "license": "AGPL-3.0-only" + }, + "src/IRegistry.sol": { + "keccak256": "0xb03203d856c112b1e663615484f27b7597f0ef09b573a42eb68425683a386437", + "urls": [ + "bzz-raw://ff723cd22c1c4f02c1be8ed6fe69531d99791cf49be95fc9429002edcec2d0f6", + "dweb:/ipfs/QmXBuVzbS5v1TSpNo57LUgisM35KiYwQdhrKythwLmBxFQ" + ], + "license": "AGPL-3.0-only" + }, + "src/Registry.sol": { + "keccak256": "0x04a514f7afbe44935726784e61188377c49f812373858ebae8d67983e3b9b0c6", + "urls": [ + "bzz-raw://cbc52031e47f3a58be6ca63e1884a032896e0e3a96056919504f7a99cb152cf9", + "dweb:/ipfs/QmT25Kjvn7GnjHJjFj3r4y372ucMdKhqd67JH2uwsMM7KQ" + ], + "license": "AGPL-3.0-only" + }, + "src/core/Attestation.sol": { + "keccak256": "0x60184387856220ebc5df67f9fe7139d12a0f39a904d5612ad8149ad80ec0146a", + "urls": [ + "bzz-raw://2002908b543d03320c1b2158b632e42acd5353c63e61417ee7627de0dc9a704b", + "dweb:/ipfs/QmdyV9ZBxJyEizhkuutWngRPQzsvcbrRzu7EKFZ77Pyf4H" + ], + "license": "AGPL-3.0-only" + }, + "src/core/AttestationManager.sol": { + "keccak256": "0xb6e5ab1c5b473550c9119d89085b7ed304cc5e0c33d66f3b22a1c3b9040eed9d", + "urls": [ + "bzz-raw://efb6495c8246b834beb449c0d9f48e576c1a3603a09a684cb0e1cd0b1dc62990", + "dweb:/ipfs/Qmcj4gqXefVZFf5TVoWT6KKH6DDqYv4SrA4N1XYnLrDNci" + ], + "license": "AGPL-3.0-only" + }, + "src/core/ModuleManager.sol": { + "keccak256": "0xe95b55406347a1051a0fb636f0c520466bd54c1d0c5ad8546241fe0cfbf67169", + "urls": [ + "bzz-raw://52843bb46c61acfad5ae5bce80b4508f1e851352371051d027675c7bc3744332", + "dweb:/ipfs/QmdAuWEq2ogsrALuYnXsVbNYD6nwodN6GcLt4Jcv9PDZpS" + ], + "license": "AGPL-3.0-only" + }, + "src/core/ResolverManager.sol": { + "keccak256": "0x62c56f2894817468894e66036e7e4693da1856baef1b70d7fa52723182e5de3c", + "urls": [ + "bzz-raw://7999eb35bc4063fce696c15ef6e56115a648c5ecf6afd395679d61365ed1f2f7", + "dweb:/ipfs/QmaoauDC8Rmi4z5NDpyYQuLHi3JtNZWTmk6CJ2rRanwSJi" + ], + "license": "AGPL-3.0-only" + }, + "src/core/SchemaManager.sol": { + "keccak256": "0xf5f7fe4ea89cc88ea1cc68ca9ba765790fda7eb309fb05d5bf4387c13068231d", + "urls": [ + "bzz-raw://419dc546ad4c27f754385815c51c78baa9653897c28335df73cda13db365acd3", + "dweb:/ipfs/QmPCiUpNv9u2DbYL3Cc27Y1Bdc1RgZzHcsNiDLYHRGB4Mh" + ], + "license": "AGPL-3.0-only" + }, + "src/core/SignedAttestation.sol": { + "keccak256": "0x1cdd47ad08862edb59a18aa6a3ef68f7e1ed5034573f26a2ad7e7406f4e49aa5", + "urls": [ + "bzz-raw://3b105e932f5959d8a5709ae7eaa699da694683dd88ad3f2d5026a8854c4a8cc8", + "dweb:/ipfs/QmSEGkJhdGppzFJ2au8hKQJE5hjooFiCkYhSXscUX1e6Y7" + ], + "license": "AGPL-3.0-only" + }, + "src/core/TrustManager.sol": { + "keccak256": "0x7310e4d0cc27000c2bc9045fdd84046585c0832e4adbd88c37cfc4bd9333a001", + "urls": [ + "bzz-raw://d248513fab87138bba2617b3c8137aaf014bcb4b404ff0ce03fc0c4eaa4aa74e", + "dweb:/ipfs/QmeHNtJW5BVzEGDf3R7n8B4QNTpEUypjhVD98jBQ2Qpqcq" + ], + "license": "AGPL-3.0-only" + }, + "src/core/TrustManagerExternalAttesterList.sol": { + "keccak256": "0x02234dafb9c88de12091ecf187db1f762ba16b13520118be5c0a4153b79eab18", + "urls": [ + "bzz-raw://f6b5f68415f31bdc8139366465199aacd0b30ca7550a2d1040e23fa89ceb2cd0", + "dweb:/ipfs/QmVgNUkDRRMC6bLJFyymi6Wt6kwyysZDhPvZRUG3TvkHQb" + ], + "license": "AGPL-3.0-only" + }, + "src/external/IExternalResolver.sol": { + "keccak256": "0x258211aa342cdcde51952e0f523136b71d320a2208a7873b03d0c6c210776d5f", + "urls": [ + "bzz-raw://3406f08574205e786e228c0126d06d78ffb3d8724efa6344a18675eef61e9077", + "dweb:/ipfs/QmZTZEY5eWmBq6ho6F75UGJ7VYuh2JwJiuQfUXGPrJD7JK" + ], + "license": "AGPL-3.0-only" + }, + "src/external/IExternalSchemaValidator.sol": { + "keccak256": "0xeaefb6118769085ca0de5b3048e5b4a8f860f99d4361008b4220195f603e4bd2", + "urls": [ + "bzz-raw://d8a12afbc6a3a453d5810b67d775d9cb24bc52d1fc2843625910576285257526", + "dweb:/ipfs/QmXDcULeqy7VSXitbyrYcr32Bt7msuv7krG7g5u1nuCJx2" + ], + "license": "AGPL-3.0-only" + }, + "src/interfaces/IERC7484.sol": { + "keccak256": "0xaffbc0cff08e0bd99e1d3d338829ee7b7a1fed9cb25fc949b21c150111a9084a", + "urls": [ + "bzz-raw://f7860e358c9dc537250107b07821ebc5eb7fcf4b014a67100ca15957c842fca2", + "dweb:/ipfs/QmSWjcQewHnTJDCdDdMWYBfc6tgkcX9DmkDUwsg8xNqMCF" + ], + "license": "MIT" + }, + "src/lib/AttestationLib.sol": { + "keccak256": "0x10ec6b63b3a8b0863445d3b450c68e6f49929834eee0d87687e39370c9cdf7a8", + "urls": [ + "bzz-raw://3d8fe6e24363c50143314048ece64704d701cfda0cdb491b82c76a45fcfe5f42", + "dweb:/ipfs/QmNkG8P2FWe1iVHcbLBvtZmifEAMnJksRKttEtfGGm8AEE" + ], + "license": "AGPL-3.0-only" + }, + "src/lib/Helpers.sol": { + "keccak256": "0x7bd10d203db343b4e5ae416a24a1380ab9de2e729b83694c9a76a6f4c365be22", + "urls": [ + "bzz-raw://d5f74fa5b6c7d8cc9ec7780b143d2d4057e2c18b5bdeed17187fd35b31192bd1", + "dweb:/ipfs/QmPJQLXB7t1KyyCB54imUXGzBhCRKV1aLubiNiD3deFXAB" + ], + "license": "AGPL-3.0-only" + }, + "src/lib/ModuleDeploymentLib.sol": { + "keccak256": "0x835b2a14e5a5afb37c44a2c28631a00c1de0e179dc76331ec0941aeb5819c2fe", + "urls": [ + "bzz-raw://df0eccc2feaf225f19a8e6ff47b759ccc01343f39c492675a55760580e28c1e8", + "dweb:/ipfs/QmXv2Fa82SZfsN9qfFCYYD774Ho7Hfc6v6wtmDFfQN4U5L" + ], + "license": "AGPL-3.0-only" + }, + "src/lib/ModuleTypeLib.sol": { + "keccak256": "0x41f7165818e8316f1925a478e03745948beee02ac61b818f718987aaf7482a15", + "urls": [ + "bzz-raw://0fd85099ae89e521e99a0ef9b55ec752021327d3041e0f3c22cb4f65e62af2fb", + "dweb:/ipfs/QmR4tdbb17bJZceRRbrck9GkkCgzThdTeqkv5Yf7u6WLe1" + ], + "license": "MIT" + }, + "src/lib/StubLib.sol": { + "keccak256": "0xf172214e19da44b42b9db3dfd70b98a5bf6e1d5c949ddcf3472bf6564dd9fdd7", + "urls": [ + "bzz-raw://37250139d5e0ae9f7c2f01cb751c52bf9807dd3e0b9ce104828879fcbbd40b79", + "dweb:/ipfs/QmawFtrAQQbH7cssFigzybaMWfZ8we26TMAPFz8dtR2D7X" + ], + "license": "AGPL-3.0-only" + }, + "src/lib/TrustLib.sol": { + "keccak256": "0xb2edae3fdf48dd665c7c59b7882dd3d3269a5fd667212877e7669b721f9755d1", + "urls": [ + "bzz-raw://e2e8b76ff9403e7a7cdb332377eae4086d95ea0c2ac7bf6b89480c3282719b24", + "dweb:/ipfs/QmXMNLwYuRPViaMzGRsFVhQobiJwGnm4EqXqxFM2LHMEWb" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "id": 62 +} diff --git a/artifacts/interfaces/IERC7484.json b/artifacts/interfaces/IERC7484.json new file mode 100644 index 0000000..0598e3d --- /dev/null +++ b/artifacts/interfaces/IERC7484.json @@ -0,0 +1,345 @@ +{ + "abi": [ + { + "type": "function", + "name": "check", + "inputs": [ + { "name": "module", "type": "address", "internalType": "address" }, + { + "name": "attesters", + "type": "address[]", + "internalType": "address[]" + }, + { "name": "threshold", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [], + "stateMutability": "view" + }, + { + "type": "function", + "name": "check", + "inputs": [ + { "name": "module", "type": "address", "internalType": "address" }, + { + "name": "moduleType", + "type": "uint256", + "internalType": "ModuleType" + }, + { + "name": "attesters", + "type": "address[]", + "internalType": "address[]" + }, + { "name": "threshold", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [], + "stateMutability": "view" + }, + { + "type": "function", + "name": "check", + "inputs": [ + { "name": "module", "type": "address", "internalType": "address" }, + { + "name": "moduleType", + "type": "uint256", + "internalType": "ModuleType" + } + ], + "outputs": [], + "stateMutability": "view" + }, + { + "type": "function", + "name": "check", + "inputs": [ + { "name": "module", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "view" + }, + { + "type": "function", + "name": "checkForAccount", + "inputs": [ + { + "name": "smartAccount", + "type": "address", + "internalType": "address" + }, + { "name": "module", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "view" + }, + { + "type": "function", + "name": "checkForAccount", + "inputs": [ + { + "name": "smartAccount", + "type": "address", + "internalType": "address" + }, + { "name": "module", "type": "address", "internalType": "address" }, + { + "name": "moduleType", + "type": "uint256", + "internalType": "ModuleType" + } + ], + "outputs": [], + "stateMutability": "view" + }, + { + "type": "function", + "name": "trustAttesters", + "inputs": [ + { "name": "threshold", "type": "uint8", "internalType": "uint8" }, + { + "name": "attesters", + "type": "address[]", + "internalType": "address[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "NewTrustedAttesters", + "inputs": [ + { + "name": "smartAccount", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + } + ], + "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "methodIdentifiers": { + "check(address)": "c23697a8", + "check(address,address[],uint256)": "0bb30abc", + "check(address,uint256)": "96fb7217", + "check(address,uint256,address[],uint256)": "2ed94467", + "checkForAccount(address,address)": "4c13560c", + "checkForAccount(address,address,uint256)": "529562a1", + "trustAttesters(uint8,address[])": "f05c04e1" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"smartAccount\",\"type\":\"address\"}],\"name\":\"NewTrustedAttesters\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"}],\"name\":\"check\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"ModuleType\",\"name\":\"moduleType\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"}],\"name\":\"check\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"ModuleType\",\"name\":\"moduleType\",\"type\":\"uint256\"}],\"name\":\"check\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"check\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"smartAccount\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"checkForAccount\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"smartAccount\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"ModuleType\",\"name\":\"moduleType\",\"type\":\"uint256\"}],\"name\":\"checkForAccount\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"threshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"}],\"name\":\"trustAttesters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"trustAttesters(uint8,address[])\":{\"details\":\"this function reverts, if address(0), or duplicates are provided in attesters[]\",\"params\":{\"attesters\":\"The addresses of the attesters to be trusted.\",\"threshold\":\"The minimum number of attestations required for a module to be considered secure.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"trustAttesters(uint8,address[])\":{\"notice\":\"Allows Smart Accounts - the end users of the registry - to appoint one or many attesters as trusted.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/interfaces/IERC7484.sol\":\"IERC7484\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/=node_modules/@openzeppelin/\",\":account-abstraction-v0.6/=node_modules/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":forge-std/=node_modules/forge-std/src/\",\":solady/=node_modules/solady/src/\",\":solmate/=node_modules/solmate/src/\"],\"viaIR\":true},\"sources\":{\"node_modules/forge-std/src/interfaces/IERC165.sol\":{\"keccak256\":\"0x414b2861b1acbf816ccb7346d3f16cf6c1e002e9e5e40d2f1f26fa5ddc2ea600\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://698352fb240868ea8f1d1fe389993035eeab930f10d06934f80ccfb2b6ccbfbc\",\"dweb:/ipfs/QmT6WLHAgXxFhh12kWym895oTzXid1326iZiwT3pyfggoT\"]},\"src/DataTypes.sol\":{\"keccak256\":\"0x17a21d96dbda1704f888f46565731cc676d5fd4d989ea6819a87a8fb0895c47b\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://91c12e4dc5254821d3ac965369b40656242d90e098a6ecc1e721d6dcf61e64fc\",\"dweb:/ipfs/Qma78sqHvpP7AFj2gKAQe2z4Na3nxT5NRtaSuEJGezDyN8\"]},\"src/external/IExternalResolver.sol\":{\"keccak256\":\"0x258211aa342cdcde51952e0f523136b71d320a2208a7873b03d0c6c210776d5f\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://3406f08574205e786e228c0126d06d78ffb3d8724efa6344a18675eef61e9077\",\"dweb:/ipfs/QmZTZEY5eWmBq6ho6F75UGJ7VYuh2JwJiuQfUXGPrJD7JK\"]},\"src/external/IExternalSchemaValidator.sol\":{\"keccak256\":\"0xeaefb6118769085ca0de5b3048e5b4a8f860f99d4361008b4220195f603e4bd2\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://d8a12afbc6a3a453d5810b67d775d9cb24bc52d1fc2843625910576285257526\",\"dweb:/ipfs/QmXDcULeqy7VSXitbyrYcr32Bt7msuv7krG7g5u1nuCJx2\"]},\"src/interfaces/IERC7484.sol\":{\"keccak256\":\"0xaffbc0cff08e0bd99e1d3d338829ee7b7a1fed9cb25fc949b21c150111a9084a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7860e358c9dc537250107b07821ebc5eb7fcf4b014a67100ca15957c842fca2\",\"dweb:/ipfs/QmSWjcQewHnTJDCdDdMWYBfc6tgkcX9DmkDUwsg8xNqMCF\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.24+commit.e11b9ed9" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "smartAccount", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "NewTrustedAttesters", + "anonymous": false + }, + { + "inputs": [ + { "internalType": "address", "name": "module", "type": "address" }, + { + "internalType": "address[]", + "name": "attesters", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "threshold", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "check" + }, + { + "inputs": [ + { "internalType": "address", "name": "module", "type": "address" }, + { + "internalType": "ModuleType", + "name": "moduleType", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "attesters", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "threshold", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "check" + }, + { + "inputs": [ + { "internalType": "address", "name": "module", "type": "address" }, + { + "internalType": "ModuleType", + "name": "moduleType", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "check" + }, + { + "inputs": [ + { "internalType": "address", "name": "module", "type": "address" } + ], + "stateMutability": "view", + "type": "function", + "name": "check" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "smartAccount", + "type": "address" + }, + { "internalType": "address", "name": "module", "type": "address" } + ], + "stateMutability": "view", + "type": "function", + "name": "checkForAccount" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "smartAccount", + "type": "address" + }, + { "internalType": "address", "name": "module", "type": "address" }, + { + "internalType": "ModuleType", + "name": "moduleType", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "checkForAccount" + }, + { + "inputs": [ + { "internalType": "uint8", "name": "threshold", "type": "uint8" }, + { + "internalType": "address[]", + "name": "attesters", + "type": "address[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "trustAttesters" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "trustAttesters(uint8,address[])": { + "details": "this function reverts, if address(0), or duplicates are provided in attesters[]", + "params": { + "attesters": "The addresses of the attesters to be trusted.", + "threshold": "The minimum number of attestations required for a module to be considered secure." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "trustAttesters(uint8,address[])": { + "notice": "Allows Smart Accounts - the end users of the registry - to appoint one or many attesters as trusted." + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=node_modules/@openzeppelin/", + "account-abstraction-v0.6/=node_modules/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "forge-std/=node_modules/forge-std/src/", + "solady/=node_modules/solady/src/", + "solmate/=node_modules/solmate/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { "src/interfaces/IERC7484.sol": "IERC7484" }, + "evmVersion": "cancun", + "libraries": {}, + "viaIR": true + }, + "sources": { + "node_modules/forge-std/src/interfaces/IERC165.sol": { + "keccak256": "0x414b2861b1acbf816ccb7346d3f16cf6c1e002e9e5e40d2f1f26fa5ddc2ea600", + "urls": [ + "bzz-raw://698352fb240868ea8f1d1fe389993035eeab930f10d06934f80ccfb2b6ccbfbc", + "dweb:/ipfs/QmT6WLHAgXxFhh12kWym895oTzXid1326iZiwT3pyfggoT" + ], + "license": "MIT" + }, + "src/DataTypes.sol": { + "keccak256": "0x17a21d96dbda1704f888f46565731cc676d5fd4d989ea6819a87a8fb0895c47b", + "urls": [ + "bzz-raw://91c12e4dc5254821d3ac965369b40656242d90e098a6ecc1e721d6dcf61e64fc", + "dweb:/ipfs/Qma78sqHvpP7AFj2gKAQe2z4Na3nxT5NRtaSuEJGezDyN8" + ], + "license": "AGPL-3.0-only" + }, + "src/external/IExternalResolver.sol": { + "keccak256": "0x258211aa342cdcde51952e0f523136b71d320a2208a7873b03d0c6c210776d5f", + "urls": [ + "bzz-raw://3406f08574205e786e228c0126d06d78ffb3d8724efa6344a18675eef61e9077", + "dweb:/ipfs/QmZTZEY5eWmBq6ho6F75UGJ7VYuh2JwJiuQfUXGPrJD7JK" + ], + "license": "AGPL-3.0-only" + }, + "src/external/IExternalSchemaValidator.sol": { + "keccak256": "0xeaefb6118769085ca0de5b3048e5b4a8f860f99d4361008b4220195f603e4bd2", + "urls": [ + "bzz-raw://d8a12afbc6a3a453d5810b67d775d9cb24bc52d1fc2843625910576285257526", + "dweb:/ipfs/QmXDcULeqy7VSXitbyrYcr32Bt7msuv7krG7g5u1nuCJx2" + ], + "license": "AGPL-3.0-only" + }, + "src/interfaces/IERC7484.sol": { + "keccak256": "0xaffbc0cff08e0bd99e1d3d338829ee7b7a1fed9cb25fc949b21c150111a9084a", + "urls": [ + "bzz-raw://f7860e358c9dc537250107b07821ebc5eb7fcf4b014a67100ca15957c842fca2", + "dweb:/ipfs/QmSWjcQewHnTJDCdDdMWYBfc6tgkcX9DmkDUwsg8xNqMCF" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "id": 76 +} diff --git a/artifacts/interfaces/IExternalResolver.json b/artifacts/interfaces/IExternalResolver.json new file mode 100644 index 0000000..2be3729 --- /dev/null +++ b/artifacts/interfaces/IExternalResolver.json @@ -0,0 +1,620 @@ +{ + "abi": [ + { + "type": "function", + "name": "resolveAttestation", + "inputs": [ + { + "name": "attestation", + "type": "tuple", + "internalType": "struct AttestationRecord", + "components": [ + { "name": "time", "type": "uint48", "internalType": "uint48" }, + { + "name": "expirationTime", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "revocationTime", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "moduleTypes", + "type": "uint32", + "internalType": "PackedModuleTypes" + }, + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "attester", + "type": "address", + "internalType": "address" + }, + { + "name": "dataPointer", + "type": "address", + "internalType": "AttestationDataRef" + }, + { + "name": "schemaUID", + "type": "bytes32", + "internalType": "SchemaUID" + } + ] + } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "resolveAttestation", + "inputs": [ + { + "name": "attestation", + "type": "tuple[]", + "internalType": "struct AttestationRecord[]", + "components": [ + { "name": "time", "type": "uint48", "internalType": "uint48" }, + { + "name": "expirationTime", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "revocationTime", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "moduleTypes", + "type": "uint32", + "internalType": "PackedModuleTypes" + }, + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "attester", + "type": "address", + "internalType": "address" + }, + { + "name": "dataPointer", + "type": "address", + "internalType": "AttestationDataRef" + }, + { + "name": "schemaUID", + "type": "bytes32", + "internalType": "SchemaUID" + } + ] + } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "resolveModuleRegistration", + "inputs": [ + { "name": "sender", "type": "address", "internalType": "address" }, + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "record", + "type": "tuple", + "internalType": "struct ModuleRecord", + "components": [ + { + "name": "resolverUID", + "type": "bytes32", + "internalType": "ResolverUID" + }, + { "name": "sender", "type": "address", "internalType": "address" }, + { "name": "metadata", "type": "bytes", "internalType": "bytes" } + ] + }, + { "name": "resolverContext", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "resolveRevocation", + "inputs": [ + { + "name": "attestation", + "type": "tuple", + "internalType": "struct AttestationRecord", + "components": [ + { "name": "time", "type": "uint48", "internalType": "uint48" }, + { + "name": "expirationTime", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "revocationTime", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "moduleTypes", + "type": "uint32", + "internalType": "PackedModuleTypes" + }, + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "attester", + "type": "address", + "internalType": "address" + }, + { + "name": "dataPointer", + "type": "address", + "internalType": "AttestationDataRef" + }, + { + "name": "schemaUID", + "type": "bytes32", + "internalType": "SchemaUID" + } + ] + } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "resolveRevocation", + "inputs": [ + { + "name": "attestation", + "type": "tuple[]", + "internalType": "struct AttestationRecord[]", + "components": [ + { "name": "time", "type": "uint48", "internalType": "uint48" }, + { + "name": "expirationTime", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "revocationTime", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "moduleTypes", + "type": "uint32", + "internalType": "PackedModuleTypes" + }, + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "attester", + "type": "address", + "internalType": "address" + }, + { + "name": "dataPointer", + "type": "address", + "internalType": "AttestationDataRef" + }, + { + "name": "schemaUID", + "type": "bytes32", + "internalType": "SchemaUID" + } + ] + } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "supportsInterface", + "inputs": [ + { "name": "interfaceID", "type": "bytes4", "internalType": "bytes4" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + } + ], + "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "methodIdentifiers": { + "resolveAttestation((uint48,uint48,uint48,uint32,address,address,address,bytes32))": "34c85d07", + "resolveAttestation((uint48,uint48,uint48,uint32,address,address,address,bytes32)[])": "cf629cee", + "resolveModuleRegistration(address,address,(bytes32,address,bytes),bytes)": "f68f7e1c", + "resolveRevocation((uint48,uint48,uint48,uint32,address,address,address,bytes32))": "8b6e59ff", + "resolveRevocation((uint48,uint48,uint48,uint32,address,address,address,bytes32)[])": "d58807fe", + "supportsInterface(bytes4)": "01ffc9a7" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"uint48\",\"name\":\"time\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"expirationTime\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"revocationTime\",\"type\":\"uint48\"},{\"internalType\":\"PackedModuleTypes\",\"name\":\"moduleTypes\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"internalType\":\"AttestationDataRef\",\"name\":\"dataPointer\",\"type\":\"address\"},{\"internalType\":\"SchemaUID\",\"name\":\"schemaUID\",\"type\":\"bytes32\"}],\"internalType\":\"struct AttestationRecord\",\"name\":\"attestation\",\"type\":\"tuple\"}],\"name\":\"resolveAttestation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint48\",\"name\":\"time\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"expirationTime\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"revocationTime\",\"type\":\"uint48\"},{\"internalType\":\"PackedModuleTypes\",\"name\":\"moduleTypes\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"internalType\":\"AttestationDataRef\",\"name\":\"dataPointer\",\"type\":\"address\"},{\"internalType\":\"SchemaUID\",\"name\":\"schemaUID\",\"type\":\"bytes32\"}],\"internalType\":\"struct AttestationRecord[]\",\"name\":\"attestation\",\"type\":\"tuple[]\"}],\"name\":\"resolveAttestation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"ResolverUID\",\"name\":\"resolverUID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleRecord\",\"name\":\"record\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"resolverContext\",\"type\":\"bytes\"}],\"name\":\"resolveModuleRegistration\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint48\",\"name\":\"time\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"expirationTime\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"revocationTime\",\"type\":\"uint48\"},{\"internalType\":\"PackedModuleTypes\",\"name\":\"moduleTypes\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"internalType\":\"AttestationDataRef\",\"name\":\"dataPointer\",\"type\":\"address\"},{\"internalType\":\"SchemaUID\",\"name\":\"schemaUID\",\"type\":\"bytes32\"}],\"internalType\":\"struct AttestationRecord\",\"name\":\"attestation\",\"type\":\"tuple\"}],\"name\":\"resolveRevocation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint48\",\"name\":\"time\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"expirationTime\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"revocationTime\",\"type\":\"uint48\"},{\"internalType\":\"PackedModuleTypes\",\"name\":\"moduleTypes\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"internalType\":\"AttestationDataRef\",\"name\":\"dataPointer\",\"type\":\"address\"},{\"internalType\":\"SchemaUID\",\"name\":\"schemaUID\",\"type\":\"bytes32\"}],\"internalType\":\"struct AttestationRecord[]\",\"name\":\"attestation\",\"type\":\"tuple[]\"}],\"name\":\"resolveRevocation\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceID\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"The resolver is responsible for validating the schema and attestation data.The resolver is also responsible for processing the attestation and revocation requests.\",\"kind\":\"dev\",\"methods\":{\"resolveAttestation((uint48,uint48,uint48,uint32,address,address,address,bytes32))\":{\"details\":\"Processes an attestation and verifies whether it's valid.\",\"params\":{\"attestation\":\"The new attestation.\"},\"returns\":{\"_0\":\"Whether the attestation is valid.\"}},\"resolveModuleRegistration(address,address,(bytes32,address,bytes),bytes)\":{\"details\":\"Processes a Module Registration\",\"params\":{\"moduleAddress\":\"address of the module\",\"record\":\"Module registration artefact\",\"sender\":\"The msg.sender of the module registration\"},\"returns\":{\"_0\":\"Whether the registration is valid\"}},\"resolveRevocation((uint48,uint48,uint48,uint32,address,address,address,bytes32))\":{\"details\":\"Processes an attestation revocation and verifies if it can be revoked.\",\"params\":{\"attestation\":\"The existing attestation to be revoked.\"},\"returns\":{\"_0\":\"Whether the attestation can be revoked.\"}},\"supportsInterface(bytes4)\":{\"details\":\"Interface identification is specified in ERC-165. This function uses less than 30,000 gas.\",\"params\":{\"interfaceID\":\"The interface identifier, as specified in ERC-165\"},\"returns\":{\"_0\":\"`true` if the contract implements `interfaceID` and `interfaceID` is not 0xffffffff, `false` otherwise\"}}},\"title\":\"The interface of an optional schema resolver.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"supportsInterface(bytes4)\":{\"notice\":\"Query if a contract implements an interface\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/external/IExternalResolver.sol\":\"IExternalResolver\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/=node_modules/@openzeppelin/\",\":account-abstraction-v0.6/=node_modules/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":forge-std/=node_modules/forge-std/src/\",\":solady/=node_modules/solady/src/\",\":solmate/=node_modules/solmate/src/\"],\"viaIR\":true},\"sources\":{\"node_modules/forge-std/src/interfaces/IERC165.sol\":{\"keccak256\":\"0x414b2861b1acbf816ccb7346d3f16cf6c1e002e9e5e40d2f1f26fa5ddc2ea600\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://698352fb240868ea8f1d1fe389993035eeab930f10d06934f80ccfb2b6ccbfbc\",\"dweb:/ipfs/QmT6WLHAgXxFhh12kWym895oTzXid1326iZiwT3pyfggoT\"]},\"src/DataTypes.sol\":{\"keccak256\":\"0x17a21d96dbda1704f888f46565731cc676d5fd4d989ea6819a87a8fb0895c47b\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://91c12e4dc5254821d3ac965369b40656242d90e098a6ecc1e721d6dcf61e64fc\",\"dweb:/ipfs/Qma78sqHvpP7AFj2gKAQe2z4Na3nxT5NRtaSuEJGezDyN8\"]},\"src/external/IExternalResolver.sol\":{\"keccak256\":\"0x258211aa342cdcde51952e0f523136b71d320a2208a7873b03d0c6c210776d5f\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://3406f08574205e786e228c0126d06d78ffb3d8724efa6344a18675eef61e9077\",\"dweb:/ipfs/QmZTZEY5eWmBq6ho6F75UGJ7VYuh2JwJiuQfUXGPrJD7JK\"]},\"src/external/IExternalSchemaValidator.sol\":{\"keccak256\":\"0xeaefb6118769085ca0de5b3048e5b4a8f860f99d4361008b4220195f603e4bd2\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://d8a12afbc6a3a453d5810b67d775d9cb24bc52d1fc2843625910576285257526\",\"dweb:/ipfs/QmXDcULeqy7VSXitbyrYcr32Bt7msuv7krG7g5u1nuCJx2\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.24+commit.e11b9ed9" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "struct AttestationRecord", + "name": "attestation", + "type": "tuple", + "components": [ + { "internalType": "uint48", "name": "time", "type": "uint48" }, + { + "internalType": "uint48", + "name": "expirationTime", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "revocationTime", + "type": "uint48" + }, + { + "internalType": "PackedModuleTypes", + "name": "moduleTypes", + "type": "uint32" + }, + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "attester", + "type": "address" + }, + { + "internalType": "AttestationDataRef", + "name": "dataPointer", + "type": "address" + }, + { + "internalType": "SchemaUID", + "name": "schemaUID", + "type": "bytes32" + } + ] + } + ], + "stateMutability": "payable", + "type": "function", + "name": "resolveAttestation", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "struct AttestationRecord[]", + "name": "attestation", + "type": "tuple[]", + "components": [ + { "internalType": "uint48", "name": "time", "type": "uint48" }, + { + "internalType": "uint48", + "name": "expirationTime", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "revocationTime", + "type": "uint48" + }, + { + "internalType": "PackedModuleTypes", + "name": "moduleTypes", + "type": "uint32" + }, + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "attester", + "type": "address" + }, + { + "internalType": "AttestationDataRef", + "name": "dataPointer", + "type": "address" + }, + { + "internalType": "SchemaUID", + "name": "schemaUID", + "type": "bytes32" + } + ] + } + ], + "stateMutability": "payable", + "type": "function", + "name": "resolveAttestation", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { "internalType": "address", "name": "sender", "type": "address" }, + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + }, + { + "internalType": "struct ModuleRecord", + "name": "record", + "type": "tuple", + "components": [ + { + "internalType": "ResolverUID", + "name": "resolverUID", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { "internalType": "bytes", "name": "metadata", "type": "bytes" } + ] + }, + { + "internalType": "bytes", + "name": "resolverContext", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function", + "name": "resolveModuleRegistration", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "struct AttestationRecord", + "name": "attestation", + "type": "tuple", + "components": [ + { "internalType": "uint48", "name": "time", "type": "uint48" }, + { + "internalType": "uint48", + "name": "expirationTime", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "revocationTime", + "type": "uint48" + }, + { + "internalType": "PackedModuleTypes", + "name": "moduleTypes", + "type": "uint32" + }, + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "attester", + "type": "address" + }, + { + "internalType": "AttestationDataRef", + "name": "dataPointer", + "type": "address" + }, + { + "internalType": "SchemaUID", + "name": "schemaUID", + "type": "bytes32" + } + ] + } + ], + "stateMutability": "payable", + "type": "function", + "name": "resolveRevocation", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "struct AttestationRecord[]", + "name": "attestation", + "type": "tuple[]", + "components": [ + { "internalType": "uint48", "name": "time", "type": "uint48" }, + { + "internalType": "uint48", + "name": "expirationTime", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "revocationTime", + "type": "uint48" + }, + { + "internalType": "PackedModuleTypes", + "name": "moduleTypes", + "type": "uint32" + }, + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "attester", + "type": "address" + }, + { + "internalType": "AttestationDataRef", + "name": "dataPointer", + "type": "address" + }, + { + "internalType": "SchemaUID", + "name": "schemaUID", + "type": "bytes32" + } + ] + } + ], + "stateMutability": "payable", + "type": "function", + "name": "resolveRevocation", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceID", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function", + "name": "supportsInterface", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "resolveAttestation((uint48,uint48,uint48,uint32,address,address,address,bytes32))": { + "details": "Processes an attestation and verifies whether it's valid.", + "params": { "attestation": "The new attestation." }, + "returns": { "_0": "Whether the attestation is valid." } + }, + "resolveModuleRegistration(address,address,(bytes32,address,bytes),bytes)": { + "details": "Processes a Module Registration", + "params": { + "moduleAddress": "address of the module", + "record": "Module registration artefact", + "sender": "The msg.sender of the module registration" + }, + "returns": { "_0": "Whether the registration is valid" } + }, + "resolveRevocation((uint48,uint48,uint48,uint32,address,address,address,bytes32))": { + "details": "Processes an attestation revocation and verifies if it can be revoked.", + "params": { + "attestation": "The existing attestation to be revoked." + }, + "returns": { "_0": "Whether the attestation can be revoked." } + }, + "supportsInterface(bytes4)": { + "details": "Interface identification is specified in ERC-165. This function uses less than 30,000 gas.", + "params": { + "interfaceID": "The interface identifier, as specified in ERC-165" + }, + "returns": { + "_0": "`true` if the contract implements `interfaceID` and `interfaceID` is not 0xffffffff, `false` otherwise" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "supportsInterface(bytes4)": { + "notice": "Query if a contract implements an interface" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=node_modules/@openzeppelin/", + "account-abstraction-v0.6/=node_modules/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "forge-std/=node_modules/forge-std/src/", + "solady/=node_modules/solady/src/", + "solmate/=node_modules/solmate/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { + "src/external/IExternalResolver.sol": "IExternalResolver" + }, + "evmVersion": "cancun", + "libraries": {}, + "viaIR": true + }, + "sources": { + "node_modules/forge-std/src/interfaces/IERC165.sol": { + "keccak256": "0x414b2861b1acbf816ccb7346d3f16cf6c1e002e9e5e40d2f1f26fa5ddc2ea600", + "urls": [ + "bzz-raw://698352fb240868ea8f1d1fe389993035eeab930f10d06934f80ccfb2b6ccbfbc", + "dweb:/ipfs/QmT6WLHAgXxFhh12kWym895oTzXid1326iZiwT3pyfggoT" + ], + "license": "MIT" + }, + "src/DataTypes.sol": { + "keccak256": "0x17a21d96dbda1704f888f46565731cc676d5fd4d989ea6819a87a8fb0895c47b", + "urls": [ + "bzz-raw://91c12e4dc5254821d3ac965369b40656242d90e098a6ecc1e721d6dcf61e64fc", + "dweb:/ipfs/Qma78sqHvpP7AFj2gKAQe2z4Na3nxT5NRtaSuEJGezDyN8" + ], + "license": "AGPL-3.0-only" + }, + "src/external/IExternalResolver.sol": { + "keccak256": "0x258211aa342cdcde51952e0f523136b71d320a2208a7873b03d0c6c210776d5f", + "urls": [ + "bzz-raw://3406f08574205e786e228c0126d06d78ffb3d8724efa6344a18675eef61e9077", + "dweb:/ipfs/QmZTZEY5eWmBq6ho6F75UGJ7VYuh2JwJiuQfUXGPrJD7JK" + ], + "license": "AGPL-3.0-only" + }, + "src/external/IExternalSchemaValidator.sol": { + "keccak256": "0xeaefb6118769085ca0de5b3048e5b4a8f860f99d4361008b4220195f603e4bd2", + "urls": [ + "bzz-raw://d8a12afbc6a3a453d5810b67d775d9cb24bc52d1fc2843625910576285257526", + "dweb:/ipfs/QmXDcULeqy7VSXitbyrYcr32Bt7msuv7krG7g5u1nuCJx2" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "id": 71 +} diff --git a/artifacts/interfaces/IExternalSchemaValidator.json b/artifacts/interfaces/IExternalSchemaValidator.json new file mode 100644 index 0000000..6edf394 --- /dev/null +++ b/artifacts/interfaces/IExternalSchemaValidator.json @@ -0,0 +1,332 @@ +{ + "abi": [ + { + "type": "function", + "name": "supportsInterface", + "inputs": [ + { "name": "interfaceID", "type": "bytes4", "internalType": "bytes4" } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "validateSchema", + "inputs": [ + { + "name": "attestation", + "type": "tuple", + "internalType": "struct AttestationRecord", + "components": [ + { "name": "time", "type": "uint48", "internalType": "uint48" }, + { + "name": "expirationTime", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "revocationTime", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "moduleTypes", + "type": "uint32", + "internalType": "PackedModuleTypes" + }, + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "attester", + "type": "address", + "internalType": "address" + }, + { + "name": "dataPointer", + "type": "address", + "internalType": "AttestationDataRef" + }, + { + "name": "schemaUID", + "type": "bytes32", + "internalType": "SchemaUID" + } + ] + } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "validateSchema", + "inputs": [ + { + "name": "attestations", + "type": "tuple[]", + "internalType": "struct AttestationRecord[]", + "components": [ + { "name": "time", "type": "uint48", "internalType": "uint48" }, + { + "name": "expirationTime", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "revocationTime", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "moduleTypes", + "type": "uint32", + "internalType": "PackedModuleTypes" + }, + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "attester", + "type": "address", + "internalType": "address" + }, + { + "name": "dataPointer", + "type": "address", + "internalType": "AttestationDataRef" + }, + { + "name": "schemaUID", + "type": "bytes32", + "internalType": "SchemaUID" + } + ] + } + ], + "outputs": [{ "name": "", "type": "bool", "internalType": "bool" }], + "stateMutability": "nonpayable" + } + ], + "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "methodIdentifiers": { + "supportsInterface(bytes4)": "01ffc9a7", + "validateSchema((uint48,uint48,uint48,uint32,address,address,address,bytes32))": "7949978f", + "validateSchema((uint48,uint48,uint48,uint32,address,address,address,bytes32)[])": "cb6ec826" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceID\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint48\",\"name\":\"time\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"expirationTime\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"revocationTime\",\"type\":\"uint48\"},{\"internalType\":\"PackedModuleTypes\",\"name\":\"moduleTypes\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"internalType\":\"AttestationDataRef\",\"name\":\"dataPointer\",\"type\":\"address\"},{\"internalType\":\"SchemaUID\",\"name\":\"schemaUID\",\"type\":\"bytes32\"}],\"internalType\":\"struct AttestationRecord\",\"name\":\"attestation\",\"type\":\"tuple\"}],\"name\":\"validateSchema\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint48\",\"name\":\"time\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"expirationTime\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"revocationTime\",\"type\":\"uint48\"},{\"internalType\":\"PackedModuleTypes\",\"name\":\"moduleTypes\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"internalType\":\"AttestationDataRef\",\"name\":\"dataPointer\",\"type\":\"address\"},{\"internalType\":\"SchemaUID\",\"name\":\"schemaUID\",\"type\":\"bytes32\"}],\"internalType\":\"struct AttestationRecord[]\",\"name\":\"attestations\",\"type\":\"tuple[]\"}],\"name\":\"validateSchema\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"Interface identification is specified in ERC-165. This function uses less than 30,000 gas.\",\"params\":{\"interfaceID\":\"The interface identifier, as specified in ERC-165\"},\"returns\":{\"_0\":\"`true` if the contract implements `interfaceID` and `interfaceID` is not 0xffffffff, `false` otherwise\"}}},\"title\":\"The interface of an optional schema resolver.\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"supportsInterface(bytes4)\":{\"notice\":\"Query if a contract implements an interface\"},\"validateSchema((uint48,uint48,uint48,uint32,address,address,address,bytes32))\":{\"notice\":\"Validates an attestation request.\"},\"validateSchema((uint48,uint48,uint48,uint32,address,address,address,bytes32)[])\":{\"notice\":\"Validates an array of attestation requests.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/external/IExternalSchemaValidator.sol\":\"IExternalSchemaValidator\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/=node_modules/@openzeppelin/\",\":account-abstraction-v0.6/=node_modules/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":forge-std/=node_modules/forge-std/src/\",\":solady/=node_modules/solady/src/\",\":solmate/=node_modules/solmate/src/\"],\"viaIR\":true},\"sources\":{\"node_modules/forge-std/src/interfaces/IERC165.sol\":{\"keccak256\":\"0x414b2861b1acbf816ccb7346d3f16cf6c1e002e9e5e40d2f1f26fa5ddc2ea600\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://698352fb240868ea8f1d1fe389993035eeab930f10d06934f80ccfb2b6ccbfbc\",\"dweb:/ipfs/QmT6WLHAgXxFhh12kWym895oTzXid1326iZiwT3pyfggoT\"]},\"src/DataTypes.sol\":{\"keccak256\":\"0x17a21d96dbda1704f888f46565731cc676d5fd4d989ea6819a87a8fb0895c47b\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://91c12e4dc5254821d3ac965369b40656242d90e098a6ecc1e721d6dcf61e64fc\",\"dweb:/ipfs/Qma78sqHvpP7AFj2gKAQe2z4Na3nxT5NRtaSuEJGezDyN8\"]},\"src/external/IExternalResolver.sol\":{\"keccak256\":\"0x258211aa342cdcde51952e0f523136b71d320a2208a7873b03d0c6c210776d5f\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://3406f08574205e786e228c0126d06d78ffb3d8724efa6344a18675eef61e9077\",\"dweb:/ipfs/QmZTZEY5eWmBq6ho6F75UGJ7VYuh2JwJiuQfUXGPrJD7JK\"]},\"src/external/IExternalSchemaValidator.sol\":{\"keccak256\":\"0xeaefb6118769085ca0de5b3048e5b4a8f860f99d4361008b4220195f603e4bd2\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://d8a12afbc6a3a453d5810b67d775d9cb24bc52d1fc2843625910576285257526\",\"dweb:/ipfs/QmXDcULeqy7VSXitbyrYcr32Bt7msuv7krG7g5u1nuCJx2\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.24+commit.e11b9ed9" }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceID", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function", + "name": "supportsInterface", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "struct AttestationRecord", + "name": "attestation", + "type": "tuple", + "components": [ + { "internalType": "uint48", "name": "time", "type": "uint48" }, + { + "internalType": "uint48", + "name": "expirationTime", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "revocationTime", + "type": "uint48" + }, + { + "internalType": "PackedModuleTypes", + "name": "moduleTypes", + "type": "uint32" + }, + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "attester", + "type": "address" + }, + { + "internalType": "AttestationDataRef", + "name": "dataPointer", + "type": "address" + }, + { + "internalType": "SchemaUID", + "name": "schemaUID", + "type": "bytes32" + } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "validateSchema", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + }, + { + "inputs": [ + { + "internalType": "struct AttestationRecord[]", + "name": "attestations", + "type": "tuple[]", + "components": [ + { "internalType": "uint48", "name": "time", "type": "uint48" }, + { + "internalType": "uint48", + "name": "expirationTime", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "revocationTime", + "type": "uint48" + }, + { + "internalType": "PackedModuleTypes", + "name": "moduleTypes", + "type": "uint32" + }, + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "attester", + "type": "address" + }, + { + "internalType": "AttestationDataRef", + "name": "dataPointer", + "type": "address" + }, + { + "internalType": "SchemaUID", + "name": "schemaUID", + "type": "bytes32" + } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "validateSchema", + "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "supportsInterface(bytes4)": { + "details": "Interface identification is specified in ERC-165. This function uses less than 30,000 gas.", + "params": { + "interfaceID": "The interface identifier, as specified in ERC-165" + }, + "returns": { + "_0": "`true` if the contract implements `interfaceID` and `interfaceID` is not 0xffffffff, `false` otherwise" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "supportsInterface(bytes4)": { + "notice": "Query if a contract implements an interface" + }, + "validateSchema((uint48,uint48,uint48,uint32,address,address,address,bytes32))": { + "notice": "Validates an attestation request." + }, + "validateSchema((uint48,uint48,uint48,uint32,address,address,address,bytes32)[])": { + "notice": "Validates an array of attestation requests." + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=node_modules/@openzeppelin/", + "account-abstraction-v0.6/=node_modules/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "forge-std/=node_modules/forge-std/src/", + "solady/=node_modules/solady/src/", + "solmate/=node_modules/solmate/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { + "src/external/IExternalSchemaValidator.sol": "IExternalSchemaValidator" + }, + "evmVersion": "cancun", + "libraries": {}, + "viaIR": true + }, + "sources": { + "node_modules/forge-std/src/interfaces/IERC165.sol": { + "keccak256": "0x414b2861b1acbf816ccb7346d3f16cf6c1e002e9e5e40d2f1f26fa5ddc2ea600", + "urls": [ + "bzz-raw://698352fb240868ea8f1d1fe389993035eeab930f10d06934f80ccfb2b6ccbfbc", + "dweb:/ipfs/QmT6WLHAgXxFhh12kWym895oTzXid1326iZiwT3pyfggoT" + ], + "license": "MIT" + }, + "src/DataTypes.sol": { + "keccak256": "0x17a21d96dbda1704f888f46565731cc676d5fd4d989ea6819a87a8fb0895c47b", + "urls": [ + "bzz-raw://91c12e4dc5254821d3ac965369b40656242d90e098a6ecc1e721d6dcf61e64fc", + "dweb:/ipfs/Qma78sqHvpP7AFj2gKAQe2z4Na3nxT5NRtaSuEJGezDyN8" + ], + "license": "AGPL-3.0-only" + }, + "src/external/IExternalResolver.sol": { + "keccak256": "0x258211aa342cdcde51952e0f523136b71d320a2208a7873b03d0c6c210776d5f", + "urls": [ + "bzz-raw://3406f08574205e786e228c0126d06d78ffb3d8724efa6344a18675eef61e9077", + "dweb:/ipfs/QmZTZEY5eWmBq6ho6F75UGJ7VYuh2JwJiuQfUXGPrJD7JK" + ], + "license": "AGPL-3.0-only" + }, + "src/external/IExternalSchemaValidator.sol": { + "keccak256": "0xeaefb6118769085ca0de5b3048e5b4a8f860f99d4361008b4220195f603e4bd2", + "urls": [ + "bzz-raw://d8a12afbc6a3a453d5810b67d775d9cb24bc52d1fc2843625910576285257526", + "dweb:/ipfs/QmXDcULeqy7VSXitbyrYcr32Bt7msuv7krG7g5u1nuCJx2" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "id": 72 +} diff --git a/artifacts/interfaces/IRegistry.json b/artifacts/interfaces/IRegistry.json new file mode 100644 index 0000000..4dc29b8 --- /dev/null +++ b/artifacts/interfaces/IRegistry.json @@ -0,0 +1,2190 @@ +{ + "abi": [ + { + "type": "function", + "name": "attest", + "inputs": [ + { "name": "schemaUID", "type": "bytes32", "internalType": "SchemaUID" }, + { "name": "attester", "type": "address", "internalType": "address" }, + { + "name": "requests", + "type": "tuple[]", + "internalType": "struct AttestationRequest[]", + "components": [ + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "expirationTime", + "type": "uint48", + "internalType": "uint48" + }, + { "name": "data", "type": "bytes", "internalType": "bytes" }, + { + "name": "moduleTypes", + "type": "uint256[]", + "internalType": "ModuleType[]" + } + ] + }, + { "name": "signature", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "attest", + "inputs": [ + { "name": "schemaUID", "type": "bytes32", "internalType": "SchemaUID" }, + { "name": "attester", "type": "address", "internalType": "address" }, + { + "name": "request", + "type": "tuple", + "internalType": "struct AttestationRequest", + "components": [ + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "expirationTime", + "type": "uint48", + "internalType": "uint48" + }, + { "name": "data", "type": "bytes", "internalType": "bytes" }, + { + "name": "moduleTypes", + "type": "uint256[]", + "internalType": "ModuleType[]" + } + ] + }, + { "name": "signature", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "attest", + "inputs": [ + { "name": "schemaUID", "type": "bytes32", "internalType": "SchemaUID" }, + { + "name": "request", + "type": "tuple", + "internalType": "struct AttestationRequest", + "components": [ + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "expirationTime", + "type": "uint48", + "internalType": "uint48" + }, + { "name": "data", "type": "bytes", "internalType": "bytes" }, + { + "name": "moduleTypes", + "type": "uint256[]", + "internalType": "ModuleType[]" + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "attest", + "inputs": [ + { "name": "schemaUID", "type": "bytes32", "internalType": "SchemaUID" }, + { + "name": "requests", + "type": "tuple[]", + "internalType": "struct AttestationRequest[]", + "components": [ + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "expirationTime", + "type": "uint48", + "internalType": "uint48" + }, + { "name": "data", "type": "bytes", "internalType": "bytes" }, + { + "name": "moduleTypes", + "type": "uint256[]", + "internalType": "ModuleType[]" + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "calcModuleAddress", + "inputs": [ + { "name": "salt", "type": "bytes32", "internalType": "bytes32" }, + { "name": "initCode", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [{ "name": "", "type": "address", "internalType": "address" }], + "stateMutability": "view" + }, + { + "type": "function", + "name": "check", + "inputs": [ + { "name": "module", "type": "address", "internalType": "address" }, + { + "name": "attesters", + "type": "address[]", + "internalType": "address[]" + }, + { "name": "threshold", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [], + "stateMutability": "view" + }, + { + "type": "function", + "name": "check", + "inputs": [ + { "name": "module", "type": "address", "internalType": "address" }, + { + "name": "moduleType", + "type": "uint256", + "internalType": "ModuleType" + }, + { + "name": "attesters", + "type": "address[]", + "internalType": "address[]" + }, + { "name": "threshold", "type": "uint256", "internalType": "uint256" } + ], + "outputs": [], + "stateMutability": "view" + }, + { + "type": "function", + "name": "check", + "inputs": [ + { "name": "module", "type": "address", "internalType": "address" }, + { + "name": "moduleType", + "type": "uint256", + "internalType": "ModuleType" + } + ], + "outputs": [], + "stateMutability": "view" + }, + { + "type": "function", + "name": "check", + "inputs": [ + { "name": "module", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "view" + }, + { + "type": "function", + "name": "checkForAccount", + "inputs": [ + { + "name": "smartAccount", + "type": "address", + "internalType": "address" + }, + { "name": "module", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "view" + }, + { + "type": "function", + "name": "checkForAccount", + "inputs": [ + { + "name": "smartAccount", + "type": "address", + "internalType": "address" + }, + { "name": "module", "type": "address", "internalType": "address" }, + { + "name": "moduleType", + "type": "uint256", + "internalType": "ModuleType" + } + ], + "outputs": [], + "stateMutability": "view" + }, + { + "type": "function", + "name": "deployModule", + "inputs": [ + { "name": "salt", "type": "bytes32", "internalType": "bytes32" }, + { + "name": "resolverUID", + "type": "bytes32", + "internalType": "ResolverUID" + }, + { "name": "initCode", "type": "bytes", "internalType": "bytes" }, + { "name": "metadata", "type": "bytes", "internalType": "bytes" }, + { "name": "resolverContext", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [ + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "deployViaFactory", + "inputs": [ + { "name": "factory", "type": "address", "internalType": "address" }, + { "name": "callOnFactory", "type": "bytes", "internalType": "bytes" }, + { "name": "metadata", "type": "bytes", "internalType": "bytes" }, + { + "name": "resolverUID", + "type": "bytes32", + "internalType": "ResolverUID" + }, + { "name": "resolverContext", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [ + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "findAttestation", + "inputs": [ + { "name": "module", "type": "address", "internalType": "address" }, + { "name": "attester", "type": "address", "internalType": "address" } + ], + "outputs": [ + { + "name": "attestation", + "type": "tuple", + "internalType": "struct AttestationRecord", + "components": [ + { "name": "time", "type": "uint48", "internalType": "uint48" }, + { + "name": "expirationTime", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "revocationTime", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "moduleTypes", + "type": "uint32", + "internalType": "PackedModuleTypes" + }, + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "attester", + "type": "address", + "internalType": "address" + }, + { + "name": "dataPointer", + "type": "address", + "internalType": "AttestationDataRef" + }, + { + "name": "schemaUID", + "type": "bytes32", + "internalType": "SchemaUID" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "findAttestations", + "inputs": [ + { "name": "module", "type": "address", "internalType": "address" }, + { + "name": "attesters", + "type": "address[]", + "internalType": "address[]" + } + ], + "outputs": [ + { + "name": "attestations", + "type": "tuple[]", + "internalType": "struct AttestationRecord[]", + "components": [ + { "name": "time", "type": "uint48", "internalType": "uint48" }, + { + "name": "expirationTime", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "revocationTime", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "moduleTypes", + "type": "uint32", + "internalType": "PackedModuleTypes" + }, + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "attester", + "type": "address", + "internalType": "address" + }, + { + "name": "dataPointer", + "type": "address", + "internalType": "AttestationDataRef" + }, + { + "name": "schemaUID", + "type": "bytes32", + "internalType": "SchemaUID" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "findModule", + "inputs": [ + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "moduleRecord", + "type": "tuple", + "internalType": "struct ModuleRecord", + "components": [ + { + "name": "resolverUID", + "type": "bytes32", + "internalType": "ResolverUID" + }, + { "name": "sender", "type": "address", "internalType": "address" }, + { "name": "metadata", "type": "bytes", "internalType": "bytes" } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "findResolver", + "inputs": [ + { "name": "uid", "type": "bytes32", "internalType": "ResolverUID" } + ], + "outputs": [ + { + "name": "record", + "type": "tuple", + "internalType": "struct ResolverRecord", + "components": [ + { + "name": "resolver", + "type": "address", + "internalType": "contract IExternalResolver" + }, + { + "name": "resolverOwner", + "type": "address", + "internalType": "address" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "findSchema", + "inputs": [ + { "name": "uid", "type": "bytes32", "internalType": "SchemaUID" } + ], + "outputs": [ + { + "name": "record", + "type": "tuple", + "internalType": "struct SchemaRecord", + "components": [ + { + "name": "registeredAt", + "type": "uint48", + "internalType": "uint48" + }, + { + "name": "validator", + "type": "address", + "internalType": "contract IExternalSchemaValidator" + }, + { "name": "schema", "type": "string", "internalType": "string" } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "findTrustedAttesters", + "inputs": [ + { "name": "smartAccount", "type": "address", "internalType": "address" } + ], + "outputs": [ + { + "name": "attesters", + "type": "address[]", + "internalType": "address[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "registerModule", + "inputs": [ + { + "name": "resolverUID", + "type": "bytes32", + "internalType": "ResolverUID" + }, + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + }, + { "name": "metadata", "type": "bytes", "internalType": "bytes" }, + { "name": "resolverContext", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "registerResolver", + "inputs": [ + { + "name": "resolver", + "type": "address", + "internalType": "contract IExternalResolver" + } + ], + "outputs": [ + { "name": "uid", "type": "bytes32", "internalType": "ResolverUID" } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "registerSchema", + "inputs": [ + { "name": "schema", "type": "string", "internalType": "string" }, + { + "name": "validator", + "type": "address", + "internalType": "contract IExternalSchemaValidator" + } + ], + "outputs": [ + { "name": "uid", "type": "bytes32", "internalType": "SchemaUID" } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "revoke", + "inputs": [ + { + "name": "requests", + "type": "tuple[]", + "internalType": "struct RevocationRequest[]", + "components": [ + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "revoke", + "inputs": [ + { "name": "attester", "type": "address", "internalType": "address" }, + { + "name": "requests", + "type": "tuple[]", + "internalType": "struct RevocationRequest[]", + "components": [ + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + } + ] + }, + { "name": "signature", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "revoke", + "inputs": [ + { + "name": "request", + "type": "tuple", + "internalType": "struct RevocationRequest", + "components": [ + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "revoke", + "inputs": [ + { "name": "attester", "type": "address", "internalType": "address" }, + { + "name": "request", + "type": "tuple", + "internalType": "struct RevocationRequest", + "components": [ + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + } + ] + }, + { "name": "signature", "type": "bytes", "internalType": "bytes" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setResolver", + "inputs": [ + { "name": "uid", "type": "bytes32", "internalType": "ResolverUID" }, + { + "name": "resolver", + "type": "address", + "internalType": "contract IExternalResolver" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferResolverOwnership", + "inputs": [ + { "name": "uid", "type": "bytes32", "internalType": "ResolverUID" }, + { "name": "newOwner", "type": "address", "internalType": "address" } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "trustAttesters", + "inputs": [ + { "name": "threshold", "type": "uint8", "internalType": "uint8" }, + { + "name": "attesters", + "type": "address[]", + "internalType": "address[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "Attested", + "inputs": [ + { + "name": "moduleAddress", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "attester", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "schemaUID", + "type": "bytes32", + "indexed": false, + "internalType": "SchemaUID" + }, + { + "name": "sstore2Pointer", + "type": "address", + "indexed": true, + "internalType": "AttestationDataRef" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ModuleRegistration", + "inputs": [ + { + "name": "implementation", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewResolver", + "inputs": [ + { + "name": "uid", + "type": "bytes32", + "indexed": true, + "internalType": "ResolverUID" + }, + { + "name": "resolver", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewResolverOwner", + "inputs": [ + { + "name": "uid", + "type": "bytes32", + "indexed": true, + "internalType": "ResolverUID" + }, + { + "name": "newOwner", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewTrustedAttesters", + "inputs": [ + { + "name": "smartAccount", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Revoked", + "inputs": [ + { + "name": "moduleAddress", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "revoker", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "schema", + "type": "bytes32", + "indexed": false, + "internalType": "SchemaUID" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SchemaRegistered", + "inputs": [ + { + "name": "uid", + "type": "bytes32", + "indexed": true, + "internalType": "SchemaUID" + }, + { + "name": "registerer", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { "type": "error", "name": "AccessDenied", "inputs": [] }, + { "type": "error", "name": "AlreadyAttested", "inputs": [] }, + { + "type": "error", + "name": "AlreadyRegistered", + "inputs": [ + { "name": "module", "type": "address", "internalType": "address" } + ] + }, + { "type": "error", "name": "AlreadyRevoked", "inputs": [] }, + { "type": "error", "name": "AttestationNotFound", "inputs": [] }, + { "type": "error", "name": "DifferentResolvers", "inputs": [] }, + { + "type": "error", + "name": "ExternalError_ModuleRegistration", + "inputs": [] + }, + { + "type": "error", + "name": "ExternalError_ResolveAttestation", + "inputs": [] + }, + { + "type": "error", + "name": "ExternalError_ResolveRevocation", + "inputs": [] + }, + { "type": "error", "name": "ExternalError_SchemaValidation", "inputs": [] }, + { + "type": "error", + "name": "FactoryCallFailed", + "inputs": [ + { "name": "factory", "type": "address", "internalType": "address" } + ] + }, + { "type": "error", "name": "InsufficientAttestations", "inputs": [] }, + { "type": "error", "name": "InvalidAttestation", "inputs": [] }, + { "type": "error", "name": "InvalidDeployment", "inputs": [] }, + { "type": "error", "name": "InvalidExpirationTime", "inputs": [] }, + { "type": "error", "name": "InvalidModuleType", "inputs": [] }, + { "type": "error", "name": "InvalidModuleTypes", "inputs": [] }, + { + "type": "error", + "name": "InvalidResolver", + "inputs": [ + { + "name": "resolver", + "type": "address", + "internalType": "contract IExternalResolver" + } + ] + }, + { + "type": "error", + "name": "InvalidResolverUID", + "inputs": [ + { "name": "uid", "type": "bytes32", "internalType": "ResolverUID" } + ] + }, + { "type": "error", "name": "InvalidSchema", "inputs": [] }, + { + "type": "error", + "name": "InvalidSchemaValidator", + "inputs": [ + { + "name": "validator", + "type": "address", + "internalType": "contract IExternalSchemaValidator" + } + ] + }, + { "type": "error", "name": "InvalidSignature", "inputs": [] }, + { "type": "error", "name": "InvalidTrustedAttesterInput", "inputs": [] }, + { + "type": "error", + "name": "ModuleAddressIsNotContract", + "inputs": [ + { + "name": "moduleAddress", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "ModuleNotFoundInRegistry", + "inputs": [ + { "name": "module", "type": "address", "internalType": "address" } + ] + }, + { "type": "error", "name": "NoTrustedAttestersFound", "inputs": [] }, + { "type": "error", "name": "ResolverAlreadyExists", "inputs": [] }, + { + "type": "error", + "name": "RevokedAttestation", + "inputs": [ + { "name": "attester", "type": "address", "internalType": "address" } + ] + }, + { + "type": "error", + "name": "SchemaAlreadyExists", + "inputs": [ + { "name": "uid", "type": "bytes32", "internalType": "SchemaUID" } + ] + } + ], + "bytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "deployedBytecode": { "object": "0x", "sourceMap": "", "linkReferences": {} }, + "methodIdentifiers": { + "attest(bytes32,(address,uint48,bytes,uint256[]))": "945e3641", + "attest(bytes32,(address,uint48,bytes,uint256[])[])": "b65d1012", + "attest(bytes32,address,(address,uint48,bytes,uint256[]),bytes)": "29757d37", + "attest(bytes32,address,(address,uint48,bytes,uint256[])[],bytes)": "04a1f298", + "calcModuleAddress(bytes32,bytes)": "f095ec1b", + "check(address)": "c23697a8", + "check(address,address[],uint256)": "0bb30abc", + "check(address,uint256)": "96fb7217", + "check(address,uint256,address[],uint256)": "2ed94467", + "checkForAccount(address,address)": "4c13560c", + "checkForAccount(address,address,uint256)": "529562a1", + "deployModule(bytes32,bytes32,bytes,bytes,bytes)": "03b79c84", + "deployViaFactory(address,bytes,bytes,bytes32,bytes)": "f190e2b1", + "findAttestation(address,address)": "d9048624", + "findAttestations(address,address[])": "2b30c899", + "findModule(address)": "b6b791a1", + "findResolver(bytes32)": "71c61a2b", + "findSchema(bytes32)": "b060cb1e", + "findTrustedAttesters(address)": "dd0fd278", + "registerModule(bytes32,address,bytes,bytes)": "88dc678d", + "registerResolver(address)": "9f3e1b53", + "registerSchema(string,address)": "1d4d9810", + "revoke((address))": "77efcab4", + "revoke((address)[])": "4990a682", + "revoke(address,(address),bytes)": "8e6ec824", + "revoke(address,(address)[],bytes)": "4ece78ca", + "setResolver(bytes32,address)": "1896f70a", + "transferResolverOwnership(bytes32,address)": "7cb2afd8", + "trustAttesters(uint8,address[])": "f05c04e1" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.24+commit.e11b9ed9\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AccessDenied\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AlreadyAttested\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"AlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AlreadyRevoked\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AttestationNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DifferentResolvers\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExternalError_ModuleRegistration\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExternalError_ResolveAttestation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExternalError_ResolveRevocation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExternalError_SchemaValidation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"name\":\"FactoryCallFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientAttestations\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidAttestation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDeployment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidExpirationTime\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidModuleType\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidModuleTypes\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IExternalResolver\",\"name\":\"resolver\",\"type\":\"address\"}],\"name\":\"InvalidResolver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"ResolverUID\",\"name\":\"uid\",\"type\":\"bytes32\"}],\"name\":\"InvalidResolverUID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSchema\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"contract IExternalSchemaValidator\",\"name\":\"validator\",\"type\":\"address\"}],\"name\":\"InvalidSchemaValidator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSignature\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTrustedAttesterInput\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"}],\"name\":\"ModuleAddressIsNotContract\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"ModuleNotFoundInRegistry\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoTrustedAttestersFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ResolverAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"RevokedAttestation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"SchemaUID\",\"name\":\"uid\",\"type\":\"bytes32\"}],\"name\":\"SchemaAlreadyExists\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"SchemaUID\",\"name\":\"schemaUID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"AttestationDataRef\",\"name\":\"sstore2Pointer\",\"type\":\"address\"}],\"name\":\"Attested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ModuleRegistration\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"ResolverUID\",\"name\":\"uid\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"resolver\",\"type\":\"address\"}],\"name\":\"NewResolver\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"ResolverUID\",\"name\":\"uid\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"NewResolverOwner\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"smartAccount\",\"type\":\"address\"}],\"name\":\"NewTrustedAttesters\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"revoker\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"SchemaUID\",\"name\":\"schema\",\"type\":\"bytes32\"}],\"name\":\"Revoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"SchemaUID\",\"name\":\"uid\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"registerer\",\"type\":\"address\"}],\"name\":\"SchemaRegistered\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"SchemaUID\",\"name\":\"schemaUID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"expirationTime\",\"type\":\"uint48\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"ModuleType[]\",\"name\":\"moduleTypes\",\"type\":\"uint256[]\"}],\"internalType\":\"struct AttestationRequest[]\",\"name\":\"requests\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"attest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"SchemaUID\",\"name\":\"schemaUID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"expirationTime\",\"type\":\"uint48\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"ModuleType[]\",\"name\":\"moduleTypes\",\"type\":\"uint256[]\"}],\"internalType\":\"struct AttestationRequest\",\"name\":\"request\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"attest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"SchemaUID\",\"name\":\"schemaUID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"expirationTime\",\"type\":\"uint48\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"ModuleType[]\",\"name\":\"moduleTypes\",\"type\":\"uint256[]\"}],\"internalType\":\"struct AttestationRequest\",\"name\":\"request\",\"type\":\"tuple\"}],\"name\":\"attest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"SchemaUID\",\"name\":\"schemaUID\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"},{\"internalType\":\"uint48\",\"name\":\"expirationTime\",\"type\":\"uint48\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"ModuleType[]\",\"name\":\"moduleTypes\",\"type\":\"uint256[]\"}],\"internalType\":\"struct AttestationRequest[]\",\"name\":\"requests\",\"type\":\"tuple[]\"}],\"name\":\"attest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"}],\"name\":\"calcModuleAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"}],\"name\":\"check\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"ModuleType\",\"name\":\"moduleType\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"}],\"name\":\"check\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"ModuleType\",\"name\":\"moduleType\",\"type\":\"uint256\"}],\"name\":\"check\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"check\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"smartAccount\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"}],\"name\":\"checkForAccount\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"smartAccount\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"ModuleType\",\"name\":\"moduleType\",\"type\":\"uint256\"}],\"name\":\"checkForAccount\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"ResolverUID\",\"name\":\"resolverUID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"resolverContext\",\"type\":\"bytes\"}],\"name\":\"deployModule\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"callOnFactory\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"},{\"internalType\":\"ResolverUID\",\"name\":\"resolverUID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"resolverContext\",\"type\":\"bytes\"}],\"name\":\"deployViaFactory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"findAttestation\",\"outputs\":[{\"components\":[{\"internalType\":\"uint48\",\"name\":\"time\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"expirationTime\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"revocationTime\",\"type\":\"uint48\"},{\"internalType\":\"PackedModuleTypes\",\"name\":\"moduleTypes\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"internalType\":\"AttestationDataRef\",\"name\":\"dataPointer\",\"type\":\"address\"},{\"internalType\":\"SchemaUID\",\"name\":\"schemaUID\",\"type\":\"bytes32\"}],\"internalType\":\"struct AttestationRecord\",\"name\":\"attestation\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"module\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"}],\"name\":\"findAttestations\",\"outputs\":[{\"components\":[{\"internalType\":\"uint48\",\"name\":\"time\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"expirationTime\",\"type\":\"uint48\"},{\"internalType\":\"uint48\",\"name\":\"revocationTime\",\"type\":\"uint48\"},{\"internalType\":\"PackedModuleTypes\",\"name\":\"moduleTypes\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"internalType\":\"AttestationDataRef\",\"name\":\"dataPointer\",\"type\":\"address\"},{\"internalType\":\"SchemaUID\",\"name\":\"schemaUID\",\"type\":\"bytes32\"}],\"internalType\":\"struct AttestationRecord[]\",\"name\":\"attestations\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"}],\"name\":\"findModule\",\"outputs\":[{\"components\":[{\"internalType\":\"ResolverUID\",\"name\":\"resolverUID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"}],\"internalType\":\"struct ModuleRecord\",\"name\":\"moduleRecord\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ResolverUID\",\"name\":\"uid\",\"type\":\"bytes32\"}],\"name\":\"findResolver\",\"outputs\":[{\"components\":[{\"internalType\":\"contract IExternalResolver\",\"name\":\"resolver\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"resolverOwner\",\"type\":\"address\"}],\"internalType\":\"struct ResolverRecord\",\"name\":\"record\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"SchemaUID\",\"name\":\"uid\",\"type\":\"bytes32\"}],\"name\":\"findSchema\",\"outputs\":[{\"components\":[{\"internalType\":\"uint48\",\"name\":\"registeredAt\",\"type\":\"uint48\"},{\"internalType\":\"contract IExternalSchemaValidator\",\"name\":\"validator\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"schema\",\"type\":\"string\"}],\"internalType\":\"struct SchemaRecord\",\"name\":\"record\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"smartAccount\",\"type\":\"address\"}],\"name\":\"findTrustedAttesters\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ResolverUID\",\"name\":\"resolverUID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"resolverContext\",\"type\":\"bytes\"}],\"name\":\"registerModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IExternalResolver\",\"name\":\"resolver\",\"type\":\"address\"}],\"name\":\"registerResolver\",\"outputs\":[{\"internalType\":\"ResolverUID\",\"name\":\"uid\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"schema\",\"type\":\"string\"},{\"internalType\":\"contract IExternalSchemaValidator\",\"name\":\"validator\",\"type\":\"address\"}],\"name\":\"registerSchema\",\"outputs\":[{\"internalType\":\"SchemaUID\",\"name\":\"uid\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"}],\"internalType\":\"struct RevocationRequest[]\",\"name\":\"requests\",\"type\":\"tuple[]\"}],\"name\":\"revoke\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"}],\"internalType\":\"struct RevocationRequest[]\",\"name\":\"requests\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"revoke\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"}],\"internalType\":\"struct RevocationRequest\",\"name\":\"request\",\"type\":\"tuple\"}],\"name\":\"revoke\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"}],\"internalType\":\"struct RevocationRequest\",\"name\":\"request\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"revoke\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ResolverUID\",\"name\":\"uid\",\"type\":\"bytes32\"},{\"internalType\":\"contract IExternalResolver\",\"name\":\"resolver\",\"type\":\"address\"}],\"name\":\"setResolver\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"ResolverUID\",\"name\":\"uid\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferResolverOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"threshold\",\"type\":\"uint8\"},{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"}],\"name\":\"trustAttesters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"rhinestone | zeroknots.eth, Konrad Kopp (@kopy-kat)\",\"kind\":\"dev\",\"methods\":{\"attest(bytes32,(address,uint48,bytes,uint256[]))\":{\"details\":\"This function will revert if the same module is attested twice by the same attester. If you want to re-attest, you have to revoke your attestation first, and then attest again.\",\"params\":{\"request\":\"a single AttestationRequest\",\"schemaUID\":\"The SchemaUID of the schema the attestation is based on.\"}},\"attest(bytes32,(address,uint48,bytes,uint256[])[])\":{\"details\":\"This function will revert if the same module is attested twice by the same attester. If you want to re-attest, you have to revoke your attestation first, and then attest again.\",\"params\":{\"requests\":\"An array of AttestationRequest\",\"schemaUID\":\"The SchemaUID of the schema the attestation is based on.\"}},\"attest(bytes32,address,(address,uint48,bytes,uint256[]),bytes)\":{\"details\":\"This function will revert if the same module is attested twice by the same attester. If you want to re-attest, you have to revoke your attestation first, and then attest again.\",\"params\":{\"attester\":\"The address of the attester\",\"request\":\"An AttestationRequest\",\"schemaUID\":\"The SchemaUID of the schema the attestation is based on.\",\"signature\":\"The signature of the attester. ECDSA or ERC1271\"}},\"attest(bytes32,address,(address,uint48,bytes,uint256[])[],bytes)\":{\"details\":\"This function will revert if the same module is attested twice by the same attester. If you want to re-attest, you have to revoke your attestation first, and then attest again.\",\"params\":{\"attester\":\"The address of the attester\",\"requests\":\"An array of AttestationRequest\",\"schemaUID\":\"The SchemaUID of the schema the attestation is based on.\",\"signature\":\"The signature of the attester. ECDSA or ERC1271\"}},\"calcModuleAddress(bytes32,bytes)\":{\"params\":{\"initCode\":\"module initcode\",\"salt\":\"CREATE2 salt\"},\"returns\":{\"_0\":\"moduleAddress counterfactual address of the module deployment\"}},\"deployModule(bytes32,bytes32,bytes,bytes,bytes)\":{\"params\":{\"initCode\":\"The initCode to be used in the `CREATE2` factory\",\"metadata\":\"The metadata to be stored on the registry. This field is optional, and might be used by the module developer to store additional information about the module or facilitate business logic with the Resolver stub\",\"resolverContext\":\"bytes that will be passed to the resolver contract\",\"resolverUID\":\"The resolverUID to be used in the `CREATE2` factory\",\"salt\":\"The salt to be used in the `CREATE2` factory. This adheres to Pr000xy/Create2Factory.sol salt formatting. The salt's first bytes20 should be the address of the sender or bytes20(0) to bypass the check (this will lose replay protection)\"}},\"deployViaFactory(address,bytes,bytes,bytes32,bytes)\":{\"details\":\"Registry can use other factories to deploy the module.Note that this function will call the external factory via the FactoryTrampoline contract. Factory MUST not assume that msg.sender == registryThis function is used to deploy and register a module using a factory contract. Since one of the parameters of this function is a unique resolverUID and any registered module address can only be registered once, using this function is of risk for a frontrun attack\"},\"findModule(address)\":{\"params\":{\"moduleAddress\":\"The address of the module\"}},\"findResolver(bytes32)\":{\"params\":{\"uid\":\"The UID of the resolver.\"}},\"findTrustedAttesters(address)\":{\"params\":{\"smartAccount\":\"The address of the Smart Account\"}},\"registerModule(bytes32,address,bytes,bytes)\":{\"details\":\"This function is used to deploy and register an already deployed module. Since one of the parameters of this function is a unique resolverUID and any registered module address can only be registered once, using this function is of risk for a frontrun attackthe sender address of this registration is set to address(0) since anyone can invoke this function\",\"params\":{\"metadata\":\"The metadata to be stored on the registry. This field is optional, and might be used by the module developer to store additional information about the module or facilitate business logic with the Resolver stub\",\"moduleAddress\":\"The address of the module to be registered\",\"resolverContext\":\"bytes that will be passed to the resolver contract\",\"resolverUID\":\"The resolverUID to be used for the module\"}},\"registerResolver(address)\":{\"params\":{\"resolver\":\"external resolver contract\"},\"returns\":{\"uid\":\"ResolverUID of the registered resolver\"}},\"registerSchema(string,address)\":{\"params\":{\"schema\":\"ABI schema used to encode attestations that are made with this schema\",\"validator\":\"(optional) external schema validator that will be used to validate attestations. use address(0), if you don't need an external validator\"},\"returns\":{\"uid\":\"SchemaUID of the registered schema\"}},\"revoke((address))\":{\"details\":\"this function will revert if the attestation is not foundthis function will revert if the attestation is already revoked\",\"params\":{\"request\":\"single RevocationRequest\"}},\"revoke((address)[])\":{\"details\":\"this function will revert if the attestation is not foundthis function will revert if the attestation is already revoked\",\"params\":{\"requests\":\"the RevocationRequests\"}},\"revoke(address,(address),bytes)\":{\"params\":{\"attester\":\"the signer / revoker\",\"request\":\"single RevocationRequest\",\"signature\":\"ECDSA or ERC1271 signature\"}},\"revoke(address,(address)[],bytes)\":{\"details\":\"if you want to revoke multiple attestations, but from different attesters, call this function multiple times\",\"params\":{\"attester\":\"the signer / revoker\",\"requests\":\"array of RevocationRequests\",\"signature\":\"ECDSA or ERC1271 signature\"}},\"setResolver(bytes32,address)\":{\"params\":{\"resolver\":\"The new resolver implementation address.\",\"uid\":\"The UID of the resolver.\"}},\"transferResolverOwnership(bytes32,address)\":{\"params\":{\"newOwner\":\"The address of the new owner\",\"uid\":\"The UID of the resolver to transfer ownership for\"}},\"trustAttesters(uint8,address[])\":{\"details\":\"this function reverts, if address(0), or duplicates are provided in attesters[]\",\"params\":{\"attesters\":\"The addresses of the attesters to be trusted.\",\"threshold\":\"The minimum number of attestations required for a module to be considered secure.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"attest(bytes32,(address,uint48,bytes,uint256[]))\":{\"notice\":\"Allows `msg.sender` to attest to multiple modules' security status. The `AttestationRequest.Data` provided should match the attestation schema defined by the Schema corresponding to the SchemaUID\"},\"attest(bytes32,(address,uint48,bytes,uint256[])[])\":{\"notice\":\"Allows `msg.sender` to attest to multiple modules' security status. The `AttestationRequest.Data` provided should match the attestation schema defined by the Schema corresponding to the SchemaUID\"},\"attest(bytes32,address,(address,uint48,bytes,uint256[]),bytes)\":{\"notice\":\"Allows attester to attest by signing an `AttestationRequest` (`ECDSA` or `ERC1271`) The `AttestationRequest.Data` provided should match the attestation schema defined by the Schema corresponding to the SchemaUID\"},\"attest(bytes32,address,(address,uint48,bytes,uint256[])[],bytes)\":{\"notice\":\"Allows attester to attest by signing an `AttestationRequest` (`ECDSA` or `ERC1271`) The `AttestationRequest.Data` provided should match the attestation schema defined by the Schema corresponding to the SchemaUID\"},\"calcModuleAddress(bytes32,bytes)\":{\"notice\":\"in conjunction with the deployModule() function, this function let's you predict the address of a CREATE2 module deployment\"},\"deployModule(bytes32,bytes32,bytes,bytes,bytes)\":{\"notice\":\"Module Developers can deploy their module Bytecode directly via the registry. This registry implements a `CREATE2` factory, that allows module developers to register and deploy module bytecode\"},\"deployViaFactory(address,bytes,bytes,bytes32,bytes)\":{\"notice\":\"In order to make the integration into existing business logics possible, the Registry is able to utilize external factories that can be utilized to deploy the modules.\"},\"findAttestation(address,address)\":{\"notice\":\"Getter function to get AttestationRequest made by one attester\"},\"findAttestations(address,address[])\":{\"notice\":\"Getter function to get AttestationRequest made by multiple attesters\"},\"findModule(address)\":{\"notice\":\"Getter function to get the stored ModuleRecord for a specific module address.\"},\"findResolver(bytes32)\":{\"notice\":\"Getter function to get the ResolverRecord of a registered resolver\"},\"findSchema(bytes32)\":{\"notice\":\"Getter function to retrieve SchemaRecord\"},\"findTrustedAttesters(address)\":{\"notice\":\"Get trusted attester for a specific Smart Account\"},\"registerModule(bytes32,address,bytes,bytes)\":{\"notice\":\"Already deployed module addresses can be registered on the registry\"},\"registerResolver(address)\":{\"notice\":\"Allows Marketplace Agents to register external resolvers.\"},\"registerSchema(string,address)\":{\"notice\":\"Register Schema and (optional) external `IExternalSchemaValidator` A Schema describe the structure of the data of attestations every attestation made on this registry, will reference a SchemaUID to make it possible to decode attestation data in human readable form overwriting a schema is not allowed, and will revert\"},\"revoke((address))\":{\"notice\":\"Allows `msg.sender` to revoke an attestation made by the same `msg.sender`\"},\"revoke((address)[])\":{\"notice\":\"Allows msg.sender to revoke multiple attestation made by the same msg.sender\"},\"revoke(address,(address),bytes)\":{\"notice\":\"Allows attester to revoke an attestation by signing an `RevocationRequest` (`ECDSA` or `ERC1271`)\"},\"revoke(address,(address)[],bytes)\":{\"notice\":\"Allows attester to revoke an attestation by signing an `RevocationRequest` (`ECDSA` or `ERC1271`)\"},\"setResolver(bytes32,address)\":{\"notice\":\"Entities that previously registered an external resolver, may update the implementation address.\"},\"transferResolverOwnership(bytes32,address)\":{\"notice\":\"Transfer ownership of resolverUID to a new address\"},\"trustAttesters(uint8,address[])\":{\"notice\":\"Allows Smart Accounts - the end users of the registry - to appoint one or many attesters as trusted.\"}},\"notice\":\"Interface definition of all features of the registry: - Register Schemas - Register External Resolvers - Register Modules - Make Attestations - Make Revocations - Delegate Trust to Attester(s)\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/IRegistry.sol\":\"IRegistry\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/=node_modules/@openzeppelin/\",\":account-abstraction-v0.6/=node_modules/account-abstraction-v0.6/contracts/\",\":account-abstraction/=node_modules/account-abstraction/contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/\",\":forge-std/=node_modules/forge-std/src/\",\":solady/=node_modules/solady/src/\",\":solmate/=node_modules/solmate/src/\"],\"viaIR\":true},\"sources\":{\"node_modules/forge-std/src/interfaces/IERC165.sol\":{\"keccak256\":\"0x414b2861b1acbf816ccb7346d3f16cf6c1e002e9e5e40d2f1f26fa5ddc2ea600\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://698352fb240868ea8f1d1fe389993035eeab930f10d06934f80ccfb2b6ccbfbc\",\"dweb:/ipfs/QmT6WLHAgXxFhh12kWym895oTzXid1326iZiwT3pyfggoT\"]},\"src/DataTypes.sol\":{\"keccak256\":\"0x17a21d96dbda1704f888f46565731cc676d5fd4d989ea6819a87a8fb0895c47b\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://91c12e4dc5254821d3ac965369b40656242d90e098a6ecc1e721d6dcf61e64fc\",\"dweb:/ipfs/Qma78sqHvpP7AFj2gKAQe2z4Na3nxT5NRtaSuEJGezDyN8\"]},\"src/IRegistry.sol\":{\"keccak256\":\"0xb03203d856c112b1e663615484f27b7597f0ef09b573a42eb68425683a386437\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://ff723cd22c1c4f02c1be8ed6fe69531d99791cf49be95fc9429002edcec2d0f6\",\"dweb:/ipfs/QmXBuVzbS5v1TSpNo57LUgisM35KiYwQdhrKythwLmBxFQ\"]},\"src/external/IExternalResolver.sol\":{\"keccak256\":\"0x258211aa342cdcde51952e0f523136b71d320a2208a7873b03d0c6c210776d5f\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://3406f08574205e786e228c0126d06d78ffb3d8724efa6344a18675eef61e9077\",\"dweb:/ipfs/QmZTZEY5eWmBq6ho6F75UGJ7VYuh2JwJiuQfUXGPrJD7JK\"]},\"src/external/IExternalSchemaValidator.sol\":{\"keccak256\":\"0xeaefb6118769085ca0de5b3048e5b4a8f860f99d4361008b4220195f603e4bd2\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://d8a12afbc6a3a453d5810b67d775d9cb24bc52d1fc2843625910576285257526\",\"dweb:/ipfs/QmXDcULeqy7VSXitbyrYcr32Bt7msuv7krG7g5u1nuCJx2\"]},\"src/interfaces/IERC7484.sol\":{\"keccak256\":\"0xaffbc0cff08e0bd99e1d3d338829ee7b7a1fed9cb25fc949b21c150111a9084a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f7860e358c9dc537250107b07821ebc5eb7fcf4b014a67100ca15957c842fca2\",\"dweb:/ipfs/QmSWjcQewHnTJDCdDdMWYBfc6tgkcX9DmkDUwsg8xNqMCF\"]}},\"version\":1}", + "metadata": { + "compiler": { "version": "0.8.24+commit.e11b9ed9" }, + "language": "Solidity", + "output": { + "abi": [ + { "inputs": [], "type": "error", "name": "AccessDenied" }, + { "inputs": [], "type": "error", "name": "AlreadyAttested" }, + { + "inputs": [ + { "internalType": "address", "name": "module", "type": "address" } + ], + "type": "error", + "name": "AlreadyRegistered" + }, + { "inputs": [], "type": "error", "name": "AlreadyRevoked" }, + { "inputs": [], "type": "error", "name": "AttestationNotFound" }, + { "inputs": [], "type": "error", "name": "DifferentResolvers" }, + { + "inputs": [], + "type": "error", + "name": "ExternalError_ModuleRegistration" + }, + { + "inputs": [], + "type": "error", + "name": "ExternalError_ResolveAttestation" + }, + { + "inputs": [], + "type": "error", + "name": "ExternalError_ResolveRevocation" + }, + { + "inputs": [], + "type": "error", + "name": "ExternalError_SchemaValidation" + }, + { + "inputs": [ + { "internalType": "address", "name": "factory", "type": "address" } + ], + "type": "error", + "name": "FactoryCallFailed" + }, + { "inputs": [], "type": "error", "name": "InsufficientAttestations" }, + { "inputs": [], "type": "error", "name": "InvalidAttestation" }, + { "inputs": [], "type": "error", "name": "InvalidDeployment" }, + { "inputs": [], "type": "error", "name": "InvalidExpirationTime" }, + { "inputs": [], "type": "error", "name": "InvalidModuleType" }, + { "inputs": [], "type": "error", "name": "InvalidModuleTypes" }, + { + "inputs": [ + { + "internalType": "contract IExternalResolver", + "name": "resolver", + "type": "address" + } + ], + "type": "error", + "name": "InvalidResolver" + }, + { + "inputs": [ + { "internalType": "ResolverUID", "name": "uid", "type": "bytes32" } + ], + "type": "error", + "name": "InvalidResolverUID" + }, + { "inputs": [], "type": "error", "name": "InvalidSchema" }, + { + "inputs": [ + { + "internalType": "contract IExternalSchemaValidator", + "name": "validator", + "type": "address" + } + ], + "type": "error", + "name": "InvalidSchemaValidator" + }, + { "inputs": [], "type": "error", "name": "InvalidSignature" }, + { + "inputs": [], + "type": "error", + "name": "InvalidTrustedAttesterInput" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + } + ], + "type": "error", + "name": "ModuleAddressIsNotContract" + }, + { + "inputs": [ + { "internalType": "address", "name": "module", "type": "address" } + ], + "type": "error", + "name": "ModuleNotFoundInRegistry" + }, + { "inputs": [], "type": "error", "name": "NoTrustedAttestersFound" }, + { "inputs": [], "type": "error", "name": "ResolverAlreadyExists" }, + { + "inputs": [ + { "internalType": "address", "name": "attester", "type": "address" } + ], + "type": "error", + "name": "RevokedAttestation" + }, + { + "inputs": [ + { "internalType": "SchemaUID", "name": "uid", "type": "bytes32" } + ], + "type": "error", + "name": "SchemaAlreadyExists" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "moduleAddress", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "attester", + "type": "address", + "indexed": true + }, + { + "internalType": "SchemaUID", + "name": "schemaUID", + "type": "bytes32", + "indexed": false + }, + { + "internalType": "AttestationDataRef", + "name": "sstore2Pointer", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "Attested", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "implementation", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "ModuleRegistration", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "ResolverUID", + "name": "uid", + "type": "bytes32", + "indexed": true + }, + { + "internalType": "address", + "name": "resolver", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "NewResolver", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "ResolverUID", + "name": "uid", + "type": "bytes32", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewResolverOwner", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "smartAccount", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "NewTrustedAttesters", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "moduleAddress", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "revoker", + "type": "address", + "indexed": true + }, + { + "internalType": "SchemaUID", + "name": "schema", + "type": "bytes32", + "indexed": false + } + ], + "type": "event", + "name": "Revoked", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "SchemaUID", + "name": "uid", + "type": "bytes32", + "indexed": true + }, + { + "internalType": "address", + "name": "registerer", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "SchemaRegistered", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "SchemaUID", + "name": "schemaUID", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "attester", + "type": "address" + }, + { + "internalType": "struct AttestationRequest[]", + "name": "requests", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + }, + { + "internalType": "uint48", + "name": "expirationTime", + "type": "uint48" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { + "internalType": "ModuleType[]", + "name": "moduleTypes", + "type": "uint256[]" + } + ] + }, + { "internalType": "bytes", "name": "signature", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "attest" + }, + { + "inputs": [ + { + "internalType": "SchemaUID", + "name": "schemaUID", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "attester", + "type": "address" + }, + { + "internalType": "struct AttestationRequest", + "name": "request", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + }, + { + "internalType": "uint48", + "name": "expirationTime", + "type": "uint48" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { + "internalType": "ModuleType[]", + "name": "moduleTypes", + "type": "uint256[]" + } + ] + }, + { "internalType": "bytes", "name": "signature", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "attest" + }, + { + "inputs": [ + { + "internalType": "SchemaUID", + "name": "schemaUID", + "type": "bytes32" + }, + { + "internalType": "struct AttestationRequest", + "name": "request", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + }, + { + "internalType": "uint48", + "name": "expirationTime", + "type": "uint48" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { + "internalType": "ModuleType[]", + "name": "moduleTypes", + "type": "uint256[]" + } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "attest" + }, + { + "inputs": [ + { + "internalType": "SchemaUID", + "name": "schemaUID", + "type": "bytes32" + }, + { + "internalType": "struct AttestationRequest[]", + "name": "requests", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + }, + { + "internalType": "uint48", + "name": "expirationTime", + "type": "uint48" + }, + { "internalType": "bytes", "name": "data", "type": "bytes" }, + { + "internalType": "ModuleType[]", + "name": "moduleTypes", + "type": "uint256[]" + } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "attest" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, + { "internalType": "bytes", "name": "initCode", "type": "bytes" } + ], + "stateMutability": "view", + "type": "function", + "name": "calcModuleAddress", + "outputs": [ + { "internalType": "address", "name": "", "type": "address" } + ] + }, + { + "inputs": [ + { "internalType": "address", "name": "module", "type": "address" }, + { + "internalType": "address[]", + "name": "attesters", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "threshold", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "check" + }, + { + "inputs": [ + { "internalType": "address", "name": "module", "type": "address" }, + { + "internalType": "ModuleType", + "name": "moduleType", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "attesters", + "type": "address[]" + }, + { + "internalType": "uint256", + "name": "threshold", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "check" + }, + { + "inputs": [ + { "internalType": "address", "name": "module", "type": "address" }, + { + "internalType": "ModuleType", + "name": "moduleType", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "check" + }, + { + "inputs": [ + { "internalType": "address", "name": "module", "type": "address" } + ], + "stateMutability": "view", + "type": "function", + "name": "check" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "smartAccount", + "type": "address" + }, + { "internalType": "address", "name": "module", "type": "address" } + ], + "stateMutability": "view", + "type": "function", + "name": "checkForAccount" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "smartAccount", + "type": "address" + }, + { "internalType": "address", "name": "module", "type": "address" }, + { + "internalType": "ModuleType", + "name": "moduleType", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "checkForAccount" + }, + { + "inputs": [ + { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, + { + "internalType": "ResolverUID", + "name": "resolverUID", + "type": "bytes32" + }, + { "internalType": "bytes", "name": "initCode", "type": "bytes" }, + { "internalType": "bytes", "name": "metadata", "type": "bytes" }, + { + "internalType": "bytes", + "name": "resolverContext", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function", + "name": "deployModule", + "outputs": [ + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + } + ] + }, + { + "inputs": [ + { "internalType": "address", "name": "factory", "type": "address" }, + { + "internalType": "bytes", + "name": "callOnFactory", + "type": "bytes" + }, + { "internalType": "bytes", "name": "metadata", "type": "bytes" }, + { + "internalType": "ResolverUID", + "name": "resolverUID", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "resolverContext", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function", + "name": "deployViaFactory", + "outputs": [ + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + } + ] + }, + { + "inputs": [ + { "internalType": "address", "name": "module", "type": "address" }, + { "internalType": "address", "name": "attester", "type": "address" } + ], + "stateMutability": "view", + "type": "function", + "name": "findAttestation", + "outputs": [ + { + "internalType": "struct AttestationRecord", + "name": "attestation", + "type": "tuple", + "components": [ + { "internalType": "uint48", "name": "time", "type": "uint48" }, + { + "internalType": "uint48", + "name": "expirationTime", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "revocationTime", + "type": "uint48" + }, + { + "internalType": "PackedModuleTypes", + "name": "moduleTypes", + "type": "uint32" + }, + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "attester", + "type": "address" + }, + { + "internalType": "AttestationDataRef", + "name": "dataPointer", + "type": "address" + }, + { + "internalType": "SchemaUID", + "name": "schemaUID", + "type": "bytes32" + } + ] + } + ] + }, + { + "inputs": [ + { "internalType": "address", "name": "module", "type": "address" }, + { + "internalType": "address[]", + "name": "attesters", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function", + "name": "findAttestations", + "outputs": [ + { + "internalType": "struct AttestationRecord[]", + "name": "attestations", + "type": "tuple[]", + "components": [ + { "internalType": "uint48", "name": "time", "type": "uint48" }, + { + "internalType": "uint48", + "name": "expirationTime", + "type": "uint48" + }, + { + "internalType": "uint48", + "name": "revocationTime", + "type": "uint48" + }, + { + "internalType": "PackedModuleTypes", + "name": "moduleTypes", + "type": "uint32" + }, + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "attester", + "type": "address" + }, + { + "internalType": "AttestationDataRef", + "name": "dataPointer", + "type": "address" + }, + { + "internalType": "SchemaUID", + "name": "schemaUID", + "type": "bytes32" + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "findModule", + "outputs": [ + { + "internalType": "struct ModuleRecord", + "name": "moduleRecord", + "type": "tuple", + "components": [ + { + "internalType": "ResolverUID", + "name": "resolverUID", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { "internalType": "bytes", "name": "metadata", "type": "bytes" } + ] + } + ] + }, + { + "inputs": [ + { "internalType": "ResolverUID", "name": "uid", "type": "bytes32" } + ], + "stateMutability": "view", + "type": "function", + "name": "findResolver", + "outputs": [ + { + "internalType": "struct ResolverRecord", + "name": "record", + "type": "tuple", + "components": [ + { + "internalType": "contract IExternalResolver", + "name": "resolver", + "type": "address" + }, + { + "internalType": "address", + "name": "resolverOwner", + "type": "address" + } + ] + } + ] + }, + { + "inputs": [ + { "internalType": "SchemaUID", "name": "uid", "type": "bytes32" } + ], + "stateMutability": "view", + "type": "function", + "name": "findSchema", + "outputs": [ + { + "internalType": "struct SchemaRecord", + "name": "record", + "type": "tuple", + "components": [ + { + "internalType": "uint48", + "name": "registeredAt", + "type": "uint48" + }, + { + "internalType": "contract IExternalSchemaValidator", + "name": "validator", + "type": "address" + }, + { "internalType": "string", "name": "schema", "type": "string" } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "smartAccount", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "findTrustedAttesters", + "outputs": [ + { + "internalType": "address[]", + "name": "attesters", + "type": "address[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "ResolverUID", + "name": "resolverUID", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + }, + { "internalType": "bytes", "name": "metadata", "type": "bytes" }, + { + "internalType": "bytes", + "name": "resolverContext", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "registerModule" + }, + { + "inputs": [ + { + "internalType": "contract IExternalResolver", + "name": "resolver", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "registerResolver", + "outputs": [ + { "internalType": "ResolverUID", "name": "uid", "type": "bytes32" } + ] + }, + { + "inputs": [ + { "internalType": "string", "name": "schema", "type": "string" }, + { + "internalType": "contract IExternalSchemaValidator", + "name": "validator", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "registerSchema", + "outputs": [ + { "internalType": "SchemaUID", "name": "uid", "type": "bytes32" } + ] + }, + { + "inputs": [ + { + "internalType": "struct RevocationRequest[]", + "name": "requests", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "revoke" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "attester", + "type": "address" + }, + { + "internalType": "struct RevocationRequest[]", + "name": "requests", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + } + ] + }, + { "internalType": "bytes", "name": "signature", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "revoke" + }, + { + "inputs": [ + { + "internalType": "struct RevocationRequest", + "name": "request", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + } + ] + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "revoke" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "attester", + "type": "address" + }, + { + "internalType": "struct RevocationRequest", + "name": "request", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + } + ] + }, + { "internalType": "bytes", "name": "signature", "type": "bytes" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "revoke" + }, + { + "inputs": [ + { "internalType": "ResolverUID", "name": "uid", "type": "bytes32" }, + { + "internalType": "contract IExternalResolver", + "name": "resolver", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setResolver" + }, + { + "inputs": [ + { "internalType": "ResolverUID", "name": "uid", "type": "bytes32" }, + { "internalType": "address", "name": "newOwner", "type": "address" } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferResolverOwnership" + }, + { + "inputs": [ + { "internalType": "uint8", "name": "threshold", "type": "uint8" }, + { + "internalType": "address[]", + "name": "attesters", + "type": "address[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "trustAttesters" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "attest(bytes32,(address,uint48,bytes,uint256[]))": { + "details": "This function will revert if the same module is attested twice by the same attester. If you want to re-attest, you have to revoke your attestation first, and then attest again.", + "params": { + "request": "a single AttestationRequest", + "schemaUID": "The SchemaUID of the schema the attestation is based on." + } + }, + "attest(bytes32,(address,uint48,bytes,uint256[])[])": { + "details": "This function will revert if the same module is attested twice by the same attester. If you want to re-attest, you have to revoke your attestation first, and then attest again.", + "params": { + "requests": "An array of AttestationRequest", + "schemaUID": "The SchemaUID of the schema the attestation is based on." + } + }, + "attest(bytes32,address,(address,uint48,bytes,uint256[]),bytes)": { + "details": "This function will revert if the same module is attested twice by the same attester. If you want to re-attest, you have to revoke your attestation first, and then attest again.", + "params": { + "attester": "The address of the attester", + "request": "An AttestationRequest", + "schemaUID": "The SchemaUID of the schema the attestation is based on.", + "signature": "The signature of the attester. ECDSA or ERC1271" + } + }, + "attest(bytes32,address,(address,uint48,bytes,uint256[])[],bytes)": { + "details": "This function will revert if the same module is attested twice by the same attester. If you want to re-attest, you have to revoke your attestation first, and then attest again.", + "params": { + "attester": "The address of the attester", + "requests": "An array of AttestationRequest", + "schemaUID": "The SchemaUID of the schema the attestation is based on.", + "signature": "The signature of the attester. ECDSA or ERC1271" + } + }, + "calcModuleAddress(bytes32,bytes)": { + "params": { "initCode": "module initcode", "salt": "CREATE2 salt" }, + "returns": { + "_0": "moduleAddress counterfactual address of the module deployment" + } + }, + "deployModule(bytes32,bytes32,bytes,bytes,bytes)": { + "params": { + "initCode": "The initCode to be used in the `CREATE2` factory", + "metadata": "The metadata to be stored on the registry. This field is optional, and might be used by the module developer to store additional information about the module or facilitate business logic with the Resolver stub", + "resolverContext": "bytes that will be passed to the resolver contract", + "resolverUID": "The resolverUID to be used in the `CREATE2` factory", + "salt": "The salt to be used in the `CREATE2` factory. This adheres to Pr000xy/Create2Factory.sol salt formatting. The salt's first bytes20 should be the address of the sender or bytes20(0) to bypass the check (this will lose replay protection)" + } + }, + "deployViaFactory(address,bytes,bytes,bytes32,bytes)": { + "details": "Registry can use other factories to deploy the module.Note that this function will call the external factory via the FactoryTrampoline contract. Factory MUST not assume that msg.sender == registryThis function is used to deploy and register a module using a factory contract. Since one of the parameters of this function is a unique resolverUID and any registered module address can only be registered once, using this function is of risk for a frontrun attack" + }, + "findModule(address)": { + "params": { "moduleAddress": "The address of the module" } + }, + "findResolver(bytes32)": { + "params": { "uid": "The UID of the resolver." } + }, + "findTrustedAttesters(address)": { + "params": { "smartAccount": "The address of the Smart Account" } + }, + "registerModule(bytes32,address,bytes,bytes)": { + "details": "This function is used to deploy and register an already deployed module. Since one of the parameters of this function is a unique resolverUID and any registered module address can only be registered once, using this function is of risk for a frontrun attackthe sender address of this registration is set to address(0) since anyone can invoke this function", + "params": { + "metadata": "The metadata to be stored on the registry. This field is optional, and might be used by the module developer to store additional information about the module or facilitate business logic with the Resolver stub", + "moduleAddress": "The address of the module to be registered", + "resolverContext": "bytes that will be passed to the resolver contract", + "resolverUID": "The resolverUID to be used for the module" + } + }, + "registerResolver(address)": { + "params": { "resolver": "external resolver contract" }, + "returns": { "uid": "ResolverUID of the registered resolver" } + }, + "registerSchema(string,address)": { + "params": { + "schema": "ABI schema used to encode attestations that are made with this schema", + "validator": "(optional) external schema validator that will be used to validate attestations. use address(0), if you don't need an external validator" + }, + "returns": { "uid": "SchemaUID of the registered schema" } + }, + "revoke((address))": { + "details": "this function will revert if the attestation is not foundthis function will revert if the attestation is already revoked", + "params": { "request": "single RevocationRequest" } + }, + "revoke((address)[])": { + "details": "this function will revert if the attestation is not foundthis function will revert if the attestation is already revoked", + "params": { "requests": "the RevocationRequests" } + }, + "revoke(address,(address),bytes)": { + "params": { + "attester": "the signer / revoker", + "request": "single RevocationRequest", + "signature": "ECDSA or ERC1271 signature" + } + }, + "revoke(address,(address)[],bytes)": { + "details": "if you want to revoke multiple attestations, but from different attesters, call this function multiple times", + "params": { + "attester": "the signer / revoker", + "requests": "array of RevocationRequests", + "signature": "ECDSA or ERC1271 signature" + } + }, + "setResolver(bytes32,address)": { + "params": { + "resolver": "The new resolver implementation address.", + "uid": "The UID of the resolver." + } + }, + "transferResolverOwnership(bytes32,address)": { + "params": { + "newOwner": "The address of the new owner", + "uid": "The UID of the resolver to transfer ownership for" + } + }, + "trustAttesters(uint8,address[])": { + "details": "this function reverts, if address(0), or duplicates are provided in attesters[]", + "params": { + "attesters": "The addresses of the attesters to be trusted.", + "threshold": "The minimum number of attestations required for a module to be considered secure." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "attest(bytes32,(address,uint48,bytes,uint256[]))": { + "notice": "Allows `msg.sender` to attest to multiple modules' security status. The `AttestationRequest.Data` provided should match the attestation schema defined by the Schema corresponding to the SchemaUID" + }, + "attest(bytes32,(address,uint48,bytes,uint256[])[])": { + "notice": "Allows `msg.sender` to attest to multiple modules' security status. The `AttestationRequest.Data` provided should match the attestation schema defined by the Schema corresponding to the SchemaUID" + }, + "attest(bytes32,address,(address,uint48,bytes,uint256[]),bytes)": { + "notice": "Allows attester to attest by signing an `AttestationRequest` (`ECDSA` or `ERC1271`) The `AttestationRequest.Data` provided should match the attestation schema defined by the Schema corresponding to the SchemaUID" + }, + "attest(bytes32,address,(address,uint48,bytes,uint256[])[],bytes)": { + "notice": "Allows attester to attest by signing an `AttestationRequest` (`ECDSA` or `ERC1271`) The `AttestationRequest.Data` provided should match the attestation schema defined by the Schema corresponding to the SchemaUID" + }, + "calcModuleAddress(bytes32,bytes)": { + "notice": "in conjunction with the deployModule() function, this function let's you predict the address of a CREATE2 module deployment" + }, + "deployModule(bytes32,bytes32,bytes,bytes,bytes)": { + "notice": "Module Developers can deploy their module Bytecode directly via the registry. This registry implements a `CREATE2` factory, that allows module developers to register and deploy module bytecode" + }, + "deployViaFactory(address,bytes,bytes,bytes32,bytes)": { + "notice": "In order to make the integration into existing business logics possible, the Registry is able to utilize external factories that can be utilized to deploy the modules." + }, + "findAttestation(address,address)": { + "notice": "Getter function to get AttestationRequest made by one attester" + }, + "findAttestations(address,address[])": { + "notice": "Getter function to get AttestationRequest made by multiple attesters" + }, + "findModule(address)": { + "notice": "Getter function to get the stored ModuleRecord for a specific module address." + }, + "findResolver(bytes32)": { + "notice": "Getter function to get the ResolverRecord of a registered resolver" + }, + "findSchema(bytes32)": { + "notice": "Getter function to retrieve SchemaRecord" + }, + "findTrustedAttesters(address)": { + "notice": "Get trusted attester for a specific Smart Account" + }, + "registerModule(bytes32,address,bytes,bytes)": { + "notice": "Already deployed module addresses can be registered on the registry" + }, + "registerResolver(address)": { + "notice": "Allows Marketplace Agents to register external resolvers." + }, + "registerSchema(string,address)": { + "notice": "Register Schema and (optional) external `IExternalSchemaValidator` A Schema describe the structure of the data of attestations every attestation made on this registry, will reference a SchemaUID to make it possible to decode attestation data in human readable form overwriting a schema is not allowed, and will revert" + }, + "revoke((address))": { + "notice": "Allows `msg.sender` to revoke an attestation made by the same `msg.sender`" + }, + "revoke((address)[])": { + "notice": "Allows msg.sender to revoke multiple attestation made by the same msg.sender" + }, + "revoke(address,(address),bytes)": { + "notice": "Allows attester to revoke an attestation by signing an `RevocationRequest` (`ECDSA` or `ERC1271`)" + }, + "revoke(address,(address)[],bytes)": { + "notice": "Allows attester to revoke an attestation by signing an `RevocationRequest` (`ECDSA` or `ERC1271`)" + }, + "setResolver(bytes32,address)": { + "notice": "Entities that previously registered an external resolver, may update the implementation address." + }, + "transferResolverOwnership(bytes32,address)": { + "notice": "Transfer ownership of resolverUID to a new address" + }, + "trustAttesters(uint8,address[])": { + "notice": "Allows Smart Accounts - the end users of the registry - to appoint one or many attesters as trusted." + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=node_modules/@openzeppelin/", + "account-abstraction-v0.6/=node_modules/account-abstraction-v0.6/contracts/", + "account-abstraction/=node_modules/account-abstraction/contracts/", + "ds-test/=node_modules/ds-test/src/", + "erc4337-validation/=node_modules/@rhinestone/erc4337-validation/src/", + "forge-std/=node_modules/forge-std/src/", + "solady/=node_modules/solady/src/", + "solmate/=node_modules/solmate/src/" + ], + "optimizer": { "enabled": true, "runs": 200 }, + "metadata": { "bytecodeHash": "ipfs" }, + "compilationTarget": { "src/IRegistry.sol": "IRegistry" }, + "evmVersion": "cancun", + "libraries": {}, + "viaIR": true + }, + "sources": { + "node_modules/forge-std/src/interfaces/IERC165.sol": { + "keccak256": "0x414b2861b1acbf816ccb7346d3f16cf6c1e002e9e5e40d2f1f26fa5ddc2ea600", + "urls": [ + "bzz-raw://698352fb240868ea8f1d1fe389993035eeab930f10d06934f80ccfb2b6ccbfbc", + "dweb:/ipfs/QmT6WLHAgXxFhh12kWym895oTzXid1326iZiwT3pyfggoT" + ], + "license": "MIT" + }, + "src/DataTypes.sol": { + "keccak256": "0x17a21d96dbda1704f888f46565731cc676d5fd4d989ea6819a87a8fb0895c47b", + "urls": [ + "bzz-raw://91c12e4dc5254821d3ac965369b40656242d90e098a6ecc1e721d6dcf61e64fc", + "dweb:/ipfs/Qma78sqHvpP7AFj2gKAQe2z4Na3nxT5NRtaSuEJGezDyN8" + ], + "license": "AGPL-3.0-only" + }, + "src/IRegistry.sol": { + "keccak256": "0xb03203d856c112b1e663615484f27b7597f0ef09b573a42eb68425683a386437", + "urls": [ + "bzz-raw://ff723cd22c1c4f02c1be8ed6fe69531d99791cf49be95fc9429002edcec2d0f6", + "dweb:/ipfs/QmXBuVzbS5v1TSpNo57LUgisM35KiYwQdhrKythwLmBxFQ" + ], + "license": "AGPL-3.0-only" + }, + "src/external/IExternalResolver.sol": { + "keccak256": "0x258211aa342cdcde51952e0f523136b71d320a2208a7873b03d0c6c210776d5f", + "urls": [ + "bzz-raw://3406f08574205e786e228c0126d06d78ffb3d8724efa6344a18675eef61e9077", + "dweb:/ipfs/QmZTZEY5eWmBq6ho6F75UGJ7VYuh2JwJiuQfUXGPrJD7JK" + ], + "license": "AGPL-3.0-only" + }, + "src/external/IExternalSchemaValidator.sol": { + "keccak256": "0xeaefb6118769085ca0de5b3048e5b4a8f860f99d4361008b4220195f603e4bd2", + "urls": [ + "bzz-raw://d8a12afbc6a3a453d5810b67d775d9cb24bc52d1fc2843625910576285257526", + "dweb:/ipfs/QmXDcULeqy7VSXitbyrYcr32Bt7msuv7krG7g5u1nuCJx2" + ], + "license": "AGPL-3.0-only" + }, + "src/interfaces/IERC7484.sol": { + "keccak256": "0xaffbc0cff08e0bd99e1d3d338829ee7b7a1fed9cb25fc949b21c150111a9084a", + "urls": [ + "bzz-raw://f7860e358c9dc537250107b07821ebc5eb7fcf4b014a67100ca15957c842fca2", + "dweb:/ipfs/QmSWjcQewHnTJDCdDdMWYBfc6tgkcX9DmkDUwsg8xNqMCF" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "id": 61 +}