diff --git a/abis/Passkey.json b/abis/Passkey.json
new file mode 100644
index 0000000..5eb4731
--- /dev/null
+++ b/abis/Passkey.json
@@ -0,0 +1,4208 @@
+{
+ "abi": [
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "user",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "keyId",
+ "type": "bytes32"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "x",
+ "type": "uint256"
+ },
+ {
+ "indexed": false,
+ "internalType": "uint256",
+ "name": "y",
+ "type": "uint256"
+ }
+ ],
+ "name": "PasskeyRegistered",
+ "type": "event"
+ },
+ {
+ "anonymous": false,
+ "inputs": [
+ {
+ "indexed": true,
+ "internalType": "address",
+ "name": "user",
+ "type": "address"
+ },
+ {
+ "indexed": true,
+ "internalType": "bytes32",
+ "name": "keyId",
+ "type": "bytes32"
+ }
+ ],
+ "name": "PasskeyRemoved",
+ "type": "event"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "nonce",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "initCode",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes",
+ "name": "callData",
+ "type": "bytes"
+ },
+ {
+ "internalType": "uint256",
+ "name": "callGasLimit",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "verificationGasLimit",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "preVerificationGas",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "maxFeePerGas",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "maxPriorityFeePerGas",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "paymasterAndData",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes",
+ "name": "signature",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct UserOperation",
+ "name": "",
+ "type": "tuple"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "name": "callback",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "user",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "keyId",
+ "type": "bytes32"
+ }
+ ],
+ "name": "getPublicKey",
+ "outputs": [
+ {
+ "components": [
+ {
+ "internalType": "uint256",
+ "name": "x",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "y",
+ "type": "uint256"
+ }
+ ],
+ "internalType": "struct PasskeyModule.PublicKey",
+ "name": "",
+ "type": "tuple"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "digest",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes",
+ "name": "signature",
+ "type": "bytes"
+ }
+ ],
+ "name": "isValidSignature",
+ "outputs": [
+ {
+ "internalType": "bytes4",
+ "name": "magicValue",
+ "type": "bytes4"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "keyId",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256",
+ "name": "x",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "y",
+ "type": "uint256"
+ }
+ ],
+ "name": "registerPublicKey",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "keyId",
+ "type": "bytes32"
+ }
+ ],
+ "name": "removePublicKey",
+ "outputs": [],
+ "stateMutability": "nonpayable",
+ "type": "function"
+ },
+ {
+ "inputs": [
+ {
+ "components": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "nonce",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "initCode",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes",
+ "name": "callData",
+ "type": "bytes"
+ },
+ {
+ "internalType": "uint256",
+ "name": "callGasLimit",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "verificationGasLimit",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "preVerificationGas",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "maxFeePerGas",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "maxPriorityFeePerGas",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "paymasterAndData",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes",
+ "name": "signature",
+ "type": "bytes"
+ }
+ ],
+ "internalType": "struct UserOperation",
+ "name": "userOp",
+ "type": "tuple"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "digest",
+ "type": "bytes32"
+ }
+ ],
+ "name": "validateUserOp",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "validationData",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function"
+ }
+ ],
+ "bytecode": {
+ "object": "0x608060405234801561001057600080fd5b50611c66806100206000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c80631626ba7e146100675780633082ab5b146100985780637cefdd5d146100ad5780638f3285f5146100db578063dee30c97146100ee578063fff35b7214610100575b600080fd5b61007a610075366004611683565b610121565b6040516001600160e01b031990911681526020015b60405180910390f35b6100ab6100a63660046116ff565b61014c565b005b6100c06100bb36600461172b565b6101c0565b6040805182518152602092830151928101929092520161008f565b6100ab6100e9366004611763565b61020b565b6100ab6100fc36600461177c565b5050565b61011361010e36600461177c565b610257565b60405190815260200161008f565b600061012e848484610286565b156101415750630b135d3f60e11b610145565b5060005b9392505050565b60408051808201825283815260208082018481523360008181528084528581208982528452859020935184559051600190930192909255825185815290810184905285927fe6813de69096f2d13f196130a730ba346707680ee5fabe9a6001c48b2e2a395a910160405180910390a3505050565b604080518082018252600080825260209182018190526001600160a01b0385168152808252828120848252825282902082518084019093528054835260010154908201525b92915050565b33600081815260208181526040808320858452909152808220828155600101829055518392917f2d7aa68d7c6e29815818dcd0deea0f49ceac033240ac3b69b6a6734c23e5843d91a350565b60006102708261026b6101408601866117b9565b610286565b1561027d57506000610205565b50600192915050565b6000806102966014828587611807565b61029f91611831565b60601c90503081146102b5576000915050610145565b6000806102c58560148189611807565b8101906102d291906118fe565b33600090815260208181526040808320858452825291829020825180840190935280548084526001909101549183019190915292945090925090158061031a57506020810151155b1561032c576000945050505050610145565b60008280602001905181019061034291906119f1565b905061037b8960405160200161035a91815260200190565b60405160208183030381529060405260008385600001518660200151610388565b9998505050505050505050565b60006103a36002600080516020611bd1833981519152611ac3565b8460a0015111156103d15760a08401516103cb90600080516020611bd1833981519152611ae5565b60a08501525b60608401516000906103f4906103e8816015611af8565b60208801519190610708565b90507fff1a2a9176d650e4a99dedb58f1793003935130579fe17b5a3f698ac5b00e63481805190602001201461042e5760009150506106ff565b60006104398861076e565b6040516020016104499190611b0b565b604051602081830303815290604052905060006104818760400151835189604001516104759190611af8565b60208a01519190610708565b905081805190602001208180519060200120146104a457600093505050506106ff565b86518051600160f81b91829160209081106104c1576104c1611b4c565b0160200151166001600160f81b031916146104e257600093505050506106ff565b87801561051a575086518051600160fa1b918291602090811061050757610507611b4c565b0160200151166001600160f81b03191614155b1561052b57600093505050506106ff565b6000600288602001516040516105419190611b62565b602060405180830381855afa15801561055e573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906105819190611b7e565b90506000600289600001518360405160200161059e929190611b97565b60408051601f19818403018152908290526105b891611b62565b602060405180830381855afa1580156105d5573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906105f89190611b7e565b6080808b015160a0808d015160408051602081018790529081019390935260608301529181018b905290810189905290915060009060c00160405160208183030381529060405290506000806101006001600160a01b03168360405161065e9190611b62565b600060405180830381855afa9150503d8060008114610699576040519150601f19603f3d011682016040523d82523d6000602084013e61069e565b606091505b508051919350915015158280156106b25750805b156106de57818060200190518101906106cb9190611b7e565b60011499505050505050505050506106ff565b6106f3858e608001518f60a001518f8f610794565b99505050505050505050505b95945050505050565b60608351828111610717578092505b838111610722578093505b5081831015610145575060405182820380825293830193601f19601f820181165b86810151848201528101806107435750600083830160200152603f9091011681016040529392505050565b606061020582604051806060016040528060408152602001611bf1604091396000610877565b60008415806107b15750600080516020611bd18339815191528510155b806107ba575083155b806107d35750600080516020611bd18339815191528410155b156107e0575060006106ff565b6107ea83836109f7565b6107f6575060006106ff565b600061080185610af2565b90506000600080516020611bd183398151915282890990506000600080516020611bd18339815191528389099050600061083d87878585610b64565b9050600080516020611bd18339815191526108668a600080516020611bd1833981519152611ae5565b8208159a9950505050505050505050565b606083516000036108975750604080516020810190915260008152610145565b6000826108c8576003855160046108ae9190611bb9565b6108b9906002611af8565b6108c39190611ac3565b6108ed565b6003855160026108d89190611af8565b6108e29190611ac3565b6108ed906004611bb9565b905060008167ffffffffffffffff81111561090a5761090a611866565b6040519080825280601f01601f191660200182016040528015610934576020820181803683370190505b50905060018501602082018788518901602081018051600082525b828410156109aa576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f811687015186535060018501945061094f565b9052505085156109eb576003885106600181146109ce57600281146109e1576109e9565b603d6001830353603d60028303536109e9565b603d60018303535b505b50909695505050505050565b6000600160601b63ffffffff60c01b031983101580610a245750600160601b63ffffffff60c01b03198210155b80610a36575082158015610a36575081155b15610a4357506000610205565b6000600160601b63ffffffff60c01b031983840990506000600160601b63ffffffff60c01b0319807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc8709600160601b63ffffffff60c01b031987600160601b63ffffffff60c01b0319898a0909089050600160601b63ffffffff60c01b03197f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b820891909114949350505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f6080820152600080516020611bd183398151915260a082015260208160c0836005600019fa610b5d57600080fd5b5192915050565b600080808060ff818088158015610b79575087155b15610b8d5760009650505050505050611245565b610bd97f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d61124d565b909250905081158015610bea575080155b15610c3757600080516020611bd183398151915288600080516020611bd1833981519152038a0898506000975088158015610c23575087155b15610c375760009650505050505050611245565b600189841c16600189851c1660011b015b80610c6a5760018403935060018a851c1660018a861c1660011b019050610c48565b50600189841c16600189851c1660011b01955060018603610ccc577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b60028603610cdb578a96508993505b60038603610cea578196508093505b60018303925060019550600194505b8260001911156111ce57600160601b63ffffffff60c01b031984600209600160601b63ffffffff60c01b0319818209600160601b63ffffffff60c01b0319818a09600160601b63ffffffff60c01b03198284099250600160601b63ffffffff60c01b031980600160601b63ffffffff60c01b03198b8d08600160601b63ffffffff60c01b03198c600160601b63ffffffff60c01b0319038e0809600309600160601b63ffffffff60c01b03198985099850600160601b63ffffffff60c01b03198a84099950600160601b63ffffffff60c01b031980836002600160601b0363ffffffff60c01b031909600160601b63ffffffff60c01b0319838409089a50600160601b63ffffffff60c01b03198083600160601b63ffffffff60c01b0319038d0882099250600160601b63ffffffff60c01b031983600160601b63ffffffff60c01b03198a870908975060018d881c1660018d891c1660011b01905080610e765787600160601b63ffffffff60c01b0319039750505050506111c3565b60018103610ec5577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103610ed4578e93508d92505b60038103610ee3578593508492505b89610efc57509198506001975087965094506111c39050565b600160601b63ffffffff60c01b031988600160601b63ffffffff60c01b03198b860908600160601b63ffffffff60c01b03198c600160601b63ffffffff60c01b031903600160601b63ffffffff60c01b03198d8809089350806110b557836110b557600160601b63ffffffff60c01b0319896002600160601b0363ffffffff60c01b0319099450600160601b63ffffffff60c01b03198586099350600160601b63ffffffff60c01b0319848d099250600160601b63ffffffff60c01b03198486099450600160601b63ffffffff60c01b0319808c600160601b63ffffffff60c01b0319038e08600160601b63ffffffff60c01b03198d8f08099050600160601b63ffffffff60c01b0319816003099150600160601b63ffffffff60c01b03198a86099950600160601b63ffffffff60c01b03198b85099a50600160601b63ffffffff60c01b031980846002600160601b0363ffffffff60c01b031909600160601b63ffffffff60c01b0319848509089b50600160601b63ffffffff60c01b0319808d600160601b63ffffffff60c01b031903850883099350600160601b63ffffffff60c01b0319808a87098508985050505050506111c3565b600160601b63ffffffff60c01b03198485099150600160601b63ffffffff60c01b0319848309600160601b63ffffffff60c01b0319838d099b50600160601b63ffffffff60c01b0319818c099a50600160601b63ffffffff60c01b0319838e09600160601b63ffffffff60c01b031980826002600160601b0363ffffffff60c01b031909600160601b63ffffffff60c01b031984600160601b63ffffffff60c01b031903600160601b63ffffffff60c01b031987880908089350600160601b63ffffffff60c01b031980838d09600160601b63ffffffff60c01b031985600160601b63ffffffff60c01b031988600160601b63ffffffff60c01b031903860809089a50505050809a50505050505b600183039250610cf9565b60405186606082015260208152602080820152602060408201526002600160601b0363ffffffff60c01b03196080820152600160601b63ffffffff60c01b031960a082015260208160c0836005600019fa61122857600080fd5b600160601b63ffffffff60c01b0319815189099750505050505050505b949350505050565b6000808080866112645785859350935050506112d2565b846112765787879350935050506112d2565b858814801561128457508487145b156112a55761129688886001806112db565b929a50909850925090506112bf565b6112b488886001808a8a611436565b929a50909850925090505b6112cb888884846115ba565b9350935050505b94509492505050565b600080600080600160601b63ffffffff60c01b0319876002099350600160601b63ffffffff60c01b03198485099150600160601b63ffffffff60c01b03198289099050600160601b63ffffffff60c01b03198285099250600160601b63ffffffff60c01b03198683099150600160601b63ffffffff60c01b031980600160601b63ffffffff60c01b0319888b08600160601b63ffffffff60c01b031989600160601b63ffffffff60c01b0319038c08096003099550600160601b63ffffffff60c01b031980826002600160601b0363ffffffff60c01b031909600160601b63ffffffff60c01b0319888909089350600160601b63ffffffff60c01b03198085600160601b63ffffffff60c01b031903830887099750600160601b63ffffffff60c01b03198584099050600160601b63ffffffff60c01b031980888509600160601b63ffffffff60c01b03190389089250945094509450949050565b60008060008088600003611455575084925083915060019050806115ad565b600160601b63ffffffff60c01b0319988903988981898809089450600160601b63ffffffff60c01b03198a600160601b63ffffffff60c01b031903600160601b63ffffffff60c01b03198a8909089550600160601b63ffffffff60c01b03198687099350600160601b63ffffffff60c01b03198685099250600160601b63ffffffff60c01b03198489099150600160601b63ffffffff60c01b03198388099050600160601b63ffffffff60c01b0319848b099750600160601b63ffffffff60c01b031980896002600160601b0363ffffffff60c01b031909600160601b63ffffffff60c01b031985600160601b63ffffffff60c01b031903600160601b63ffffffff60c01b0319898a0908089350600160601b63ffffffff60c01b031980848b09600160601b63ffffffff60c01b031987600160601b63ffffffff60c01b031988600160601b63ffffffff60c01b0319038d08090892505b9650965096509692505050565b60008060006115c884611627565b9050600160601b63ffffffff60c01b031981870991506000600160601b63ffffffff60c01b03198287099050600160601b63ffffffff60c01b03198182099150600160601b63ffffffff60c01b03198289099350505094509492505050565b600060405160208152602080820152602060408201528260608201526002600160601b0363ffffffff60c01b03196080820152600160601b63ffffffff60c01b031960a082015260208160c0836005600019fa610b5d57600080fd5b60008060006040848603121561169857600080fd5b83359250602084013567ffffffffffffffff808211156116b757600080fd5b818601915086601f8301126116cb57600080fd5b8135818111156116da57600080fd5b8760208285010111156116ec57600080fd5b6020830194508093505050509250925092565b60008060006060848603121561171457600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561173e57600080fd5b82356001600160a01b038116811461175557600080fd5b946020939093013593505050565b60006020828403121561177557600080fd5b5035919050565b6000806040838503121561178f57600080fd5b823567ffffffffffffffff8111156117a657600080fd5b8301610160818603121561175557600080fd5b6000808335601e198436030181126117d057600080fd5b83018035915067ffffffffffffffff8211156117eb57600080fd5b60200191503681900382131561180057600080fd5b9250929050565b6000808585111561181757600080fd5b8386111561182457600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff19813581811691601485101561185e5780818660140360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff8111828210171561189f5761189f611866565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156118ce576118ce611866565b604052919050565b600067ffffffffffffffff8211156118f0576118f0611866565b50601f01601f191660200190565b6000806040838503121561191157600080fd5b82359150602083013567ffffffffffffffff81111561192f57600080fd5b8301601f8101851361194057600080fd5b803561195361194e826118d6565b6118a5565b81815286602083850101111561196857600080fd5b816020840160208301376000602083830101528093505050509250929050565b60005b838110156119a357818101518382015260200161198b565b50506000910152565b600082601f8301126119bd57600080fd5b81516119cb61194e826118d6565b8181528460208386010111156119e057600080fd5b611245826020830160208701611988565b600060208284031215611a0357600080fd5b815167ffffffffffffffff80821115611a1b57600080fd5b9083019060c08286031215611a2f57600080fd5b611a3761187c565b825182811115611a4657600080fd5b611a52878286016119ac565b825250602083015182811115611a6757600080fd5b611a73878286016119ac565b60208301525060408301516040820152606083015160608201526080830151608082015260a083015160a082015280935050505092915050565b634e487b7160e01b600052601160045260246000fd5b600082611ae057634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561020557610205611aad565b8082018082111561020557610205611aad565b6c1131b430b63632b733b2911d1160991b81528151600090611b3481600d850160208701611988565b601160f91b600d939091019283015250600e01919050565b634e487b7160e01b600052603260045260246000fd5b60008251611b74818460208701611988565b9190910192915050565b600060208284031215611b9057600080fd5b5051919050565b60008351611ba9818460208801611988565b9190910191825250602001919050565b808202811582820484141761020557610205611aad56feffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325514142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa26469706673582212207483adfc32a79d055abcaff26da17006e562c6abeb4fa5437e7bbda43dab394264736f6c63430008130033",
+ "sourceMap": "265:2342:84:-:0;;;;;;;;;;;;;;;;;;;",
+ "linkReferences": {}
+ },
+ "deployedBytecode": {
+ "object": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c80631626ba7e146100675780633082ab5b146100985780637cefdd5d146100ad5780638f3285f5146100db578063dee30c97146100ee578063fff35b7214610100575b600080fd5b61007a610075366004611683565b610121565b6040516001600160e01b031990911681526020015b60405180910390f35b6100ab6100a63660046116ff565b61014c565b005b6100c06100bb36600461172b565b6101c0565b6040805182518152602092830151928101929092520161008f565b6100ab6100e9366004611763565b61020b565b6100ab6100fc36600461177c565b5050565b61011361010e36600461177c565b610257565b60405190815260200161008f565b600061012e848484610286565b156101415750630b135d3f60e11b610145565b5060005b9392505050565b60408051808201825283815260208082018481523360008181528084528581208982528452859020935184559051600190930192909255825185815290810184905285927fe6813de69096f2d13f196130a730ba346707680ee5fabe9a6001c48b2e2a395a910160405180910390a3505050565b604080518082018252600080825260209182018190526001600160a01b0385168152808252828120848252825282902082518084019093528054835260010154908201525b92915050565b33600081815260208181526040808320858452909152808220828155600101829055518392917f2d7aa68d7c6e29815818dcd0deea0f49ceac033240ac3b69b6a6734c23e5843d91a350565b60006102708261026b6101408601866117b9565b610286565b1561027d57506000610205565b50600192915050565b6000806102966014828587611807565b61029f91611831565b60601c90503081146102b5576000915050610145565b6000806102c58560148189611807565b8101906102d291906118fe565b33600090815260208181526040808320858452825291829020825180840190935280548084526001909101549183019190915292945090925090158061031a57506020810151155b1561032c576000945050505050610145565b60008280602001905181019061034291906119f1565b905061037b8960405160200161035a91815260200190565b60405160208183030381529060405260008385600001518660200151610388565b9998505050505050505050565b60006103a36002600080516020611bd1833981519152611ac3565b8460a0015111156103d15760a08401516103cb90600080516020611bd1833981519152611ae5565b60a08501525b60608401516000906103f4906103e8816015611af8565b60208801519190610708565b90507fff1a2a9176d650e4a99dedb58f1793003935130579fe17b5a3f698ac5b00e63481805190602001201461042e5760009150506106ff565b60006104398861076e565b6040516020016104499190611b0b565b604051602081830303815290604052905060006104818760400151835189604001516104759190611af8565b60208a01519190610708565b905081805190602001208180519060200120146104a457600093505050506106ff565b86518051600160f81b91829160209081106104c1576104c1611b4c565b0160200151166001600160f81b031916146104e257600093505050506106ff565b87801561051a575086518051600160fa1b918291602090811061050757610507611b4c565b0160200151166001600160f81b03191614155b1561052b57600093505050506106ff565b6000600288602001516040516105419190611b62565b602060405180830381855afa15801561055e573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906105819190611b7e565b90506000600289600001518360405160200161059e929190611b97565b60408051601f19818403018152908290526105b891611b62565b602060405180830381855afa1580156105d5573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906105f89190611b7e565b6080808b015160a0808d015160408051602081018790529081019390935260608301529181018b905290810189905290915060009060c00160405160208183030381529060405290506000806101006001600160a01b03168360405161065e9190611b62565b600060405180830381855afa9150503d8060008114610699576040519150601f19603f3d011682016040523d82523d6000602084013e61069e565b606091505b508051919350915015158280156106b25750805b156106de57818060200190518101906106cb9190611b7e565b60011499505050505050505050506106ff565b6106f3858e608001518f60a001518f8f610794565b99505050505050505050505b95945050505050565b60608351828111610717578092505b838111610722578093505b5081831015610145575060405182820380825293830193601f19601f820181165b86810151848201528101806107435750600083830160200152603f9091011681016040529392505050565b606061020582604051806060016040528060408152602001611bf1604091396000610877565b60008415806107b15750600080516020611bd18339815191528510155b806107ba575083155b806107d35750600080516020611bd18339815191528410155b156107e0575060006106ff565b6107ea83836109f7565b6107f6575060006106ff565b600061080185610af2565b90506000600080516020611bd183398151915282890990506000600080516020611bd18339815191528389099050600061083d87878585610b64565b9050600080516020611bd18339815191526108668a600080516020611bd1833981519152611ae5565b8208159a9950505050505050505050565b606083516000036108975750604080516020810190915260008152610145565b6000826108c8576003855160046108ae9190611bb9565b6108b9906002611af8565b6108c39190611ac3565b6108ed565b6003855160026108d89190611af8565b6108e29190611ac3565b6108ed906004611bb9565b905060008167ffffffffffffffff81111561090a5761090a611866565b6040519080825280601f01601f191660200182016040528015610934576020820181803683370190505b50905060018501602082018788518901602081018051600082525b828410156109aa576003840193508351603f8160121c168701518653600186019550603f81600c1c168701518653600186019550603f8160061c168701518653600186019550603f811687015186535060018501945061094f565b9052505085156109eb576003885106600181146109ce57600281146109e1576109e9565b603d6001830353603d60028303536109e9565b603d60018303535b505b50909695505050505050565b6000600160601b63ffffffff60c01b031983101580610a245750600160601b63ffffffff60c01b03198210155b80610a36575082158015610a36575081155b15610a4357506000610205565b6000600160601b63ffffffff60c01b031983840990506000600160601b63ffffffff60c01b0319807fffffffff00000001000000000000000000000000fffffffffffffffffffffffc8709600160601b63ffffffff60c01b031987600160601b63ffffffff60c01b0319898a0909089050600160601b63ffffffff60c01b03197f5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b820891909114949350505050565b600060405160208152602080820152602060408201528260608201527fffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f6080820152600080516020611bd183398151915260a082015260208160c0836005600019fa610b5d57600080fd5b5192915050565b600080808060ff818088158015610b79575087155b15610b8d5760009650505050505050611245565b610bd97f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2967f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f58d8d61124d565b909250905081158015610bea575080155b15610c3757600080516020611bd183398151915288600080516020611bd1833981519152038a0898506000975088158015610c23575087155b15610c375760009650505050505050611245565b600189841c16600189851c1660011b015b80610c6a5760018403935060018a851c1660018a861c1660011b019050610c48565b50600189841c16600189851c1660011b01955060018603610ccc577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29696507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f593505b60028603610cdb578a96508993505b60038603610cea578196508093505b60018303925060019550600194505b8260001911156111ce57600160601b63ffffffff60c01b031984600209600160601b63ffffffff60c01b0319818209600160601b63ffffffff60c01b0319818a09600160601b63ffffffff60c01b03198284099250600160601b63ffffffff60c01b031980600160601b63ffffffff60c01b03198b8d08600160601b63ffffffff60c01b03198c600160601b63ffffffff60c01b0319038e0809600309600160601b63ffffffff60c01b03198985099850600160601b63ffffffff60c01b03198a84099950600160601b63ffffffff60c01b031980836002600160601b0363ffffffff60c01b031909600160601b63ffffffff60c01b0319838409089a50600160601b63ffffffff60c01b03198083600160601b63ffffffff60c01b0319038d0882099250600160601b63ffffffff60c01b031983600160601b63ffffffff60c01b03198a870908975060018d881c1660018d891c1660011b01905080610e765787600160601b63ffffffff60c01b0319039750505050506111c3565b60018103610ec5577f6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29693507f4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f592505b60028103610ed4578e93508d92505b60038103610ee3578593508492505b89610efc57509198506001975087965094506111c39050565b600160601b63ffffffff60c01b031988600160601b63ffffffff60c01b03198b860908600160601b63ffffffff60c01b03198c600160601b63ffffffff60c01b031903600160601b63ffffffff60c01b03198d8809089350806110b557836110b557600160601b63ffffffff60c01b0319896002600160601b0363ffffffff60c01b0319099450600160601b63ffffffff60c01b03198586099350600160601b63ffffffff60c01b0319848d099250600160601b63ffffffff60c01b03198486099450600160601b63ffffffff60c01b0319808c600160601b63ffffffff60c01b0319038e08600160601b63ffffffff60c01b03198d8f08099050600160601b63ffffffff60c01b0319816003099150600160601b63ffffffff60c01b03198a86099950600160601b63ffffffff60c01b03198b85099a50600160601b63ffffffff60c01b031980846002600160601b0363ffffffff60c01b031909600160601b63ffffffff60c01b0319848509089b50600160601b63ffffffff60c01b0319808d600160601b63ffffffff60c01b031903850883099350600160601b63ffffffff60c01b0319808a87098508985050505050506111c3565b600160601b63ffffffff60c01b03198485099150600160601b63ffffffff60c01b0319848309600160601b63ffffffff60c01b0319838d099b50600160601b63ffffffff60c01b0319818c099a50600160601b63ffffffff60c01b0319838e09600160601b63ffffffff60c01b031980826002600160601b0363ffffffff60c01b031909600160601b63ffffffff60c01b031984600160601b63ffffffff60c01b031903600160601b63ffffffff60c01b031987880908089350600160601b63ffffffff60c01b031980838d09600160601b63ffffffff60c01b031985600160601b63ffffffff60c01b031988600160601b63ffffffff60c01b031903860809089a50505050809a50505050505b600183039250610cf9565b60405186606082015260208152602080820152602060408201526002600160601b0363ffffffff60c01b03196080820152600160601b63ffffffff60c01b031960a082015260208160c0836005600019fa61122857600080fd5b600160601b63ffffffff60c01b0319815189099750505050505050505b949350505050565b6000808080866112645785859350935050506112d2565b846112765787879350935050506112d2565b858814801561128457508487145b156112a55761129688886001806112db565b929a50909850925090506112bf565b6112b488886001808a8a611436565b929a50909850925090505b6112cb888884846115ba565b9350935050505b94509492505050565b600080600080600160601b63ffffffff60c01b0319876002099350600160601b63ffffffff60c01b03198485099150600160601b63ffffffff60c01b03198289099050600160601b63ffffffff60c01b03198285099250600160601b63ffffffff60c01b03198683099150600160601b63ffffffff60c01b031980600160601b63ffffffff60c01b0319888b08600160601b63ffffffff60c01b031989600160601b63ffffffff60c01b0319038c08096003099550600160601b63ffffffff60c01b031980826002600160601b0363ffffffff60c01b031909600160601b63ffffffff60c01b0319888909089350600160601b63ffffffff60c01b03198085600160601b63ffffffff60c01b031903830887099750600160601b63ffffffff60c01b03198584099050600160601b63ffffffff60c01b031980888509600160601b63ffffffff60c01b03190389089250945094509450949050565b60008060008088600003611455575084925083915060019050806115ad565b600160601b63ffffffff60c01b0319988903988981898809089450600160601b63ffffffff60c01b03198a600160601b63ffffffff60c01b031903600160601b63ffffffff60c01b03198a8909089550600160601b63ffffffff60c01b03198687099350600160601b63ffffffff60c01b03198685099250600160601b63ffffffff60c01b03198489099150600160601b63ffffffff60c01b03198388099050600160601b63ffffffff60c01b0319848b099750600160601b63ffffffff60c01b031980896002600160601b0363ffffffff60c01b031909600160601b63ffffffff60c01b031985600160601b63ffffffff60c01b031903600160601b63ffffffff60c01b0319898a0908089350600160601b63ffffffff60c01b031980848b09600160601b63ffffffff60c01b031987600160601b63ffffffff60c01b031988600160601b63ffffffff60c01b0319038d08090892505b9650965096509692505050565b60008060006115c884611627565b9050600160601b63ffffffff60c01b031981870991506000600160601b63ffffffff60c01b03198287099050600160601b63ffffffff60c01b03198182099150600160601b63ffffffff60c01b03198289099350505094509492505050565b600060405160208152602080820152602060408201528260608201526002600160601b0363ffffffff60c01b03196080820152600160601b63ffffffff60c01b031960a082015260208160c0836005600019fa610b5d57600080fd5b60008060006040848603121561169857600080fd5b83359250602084013567ffffffffffffffff808211156116b757600080fd5b818601915086601f8301126116cb57600080fd5b8135818111156116da57600080fd5b8760208285010111156116ec57600080fd5b6020830194508093505050509250925092565b60008060006060848603121561171457600080fd5b505081359360208301359350604090920135919050565b6000806040838503121561173e57600080fd5b82356001600160a01b038116811461175557600080fd5b946020939093013593505050565b60006020828403121561177557600080fd5b5035919050565b6000806040838503121561178f57600080fd5b823567ffffffffffffffff8111156117a657600080fd5b8301610160818603121561175557600080fd5b6000808335601e198436030181126117d057600080fd5b83018035915067ffffffffffffffff8211156117eb57600080fd5b60200191503681900382131561180057600080fd5b9250929050565b6000808585111561181757600080fd5b8386111561182457600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff19813581811691601485101561185e5780818660140360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405160c0810167ffffffffffffffff8111828210171561189f5761189f611866565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156118ce576118ce611866565b604052919050565b600067ffffffffffffffff8211156118f0576118f0611866565b50601f01601f191660200190565b6000806040838503121561191157600080fd5b82359150602083013567ffffffffffffffff81111561192f57600080fd5b8301601f8101851361194057600080fd5b803561195361194e826118d6565b6118a5565b81815286602083850101111561196857600080fd5b816020840160208301376000602083830101528093505050509250929050565b60005b838110156119a357818101518382015260200161198b565b50506000910152565b600082601f8301126119bd57600080fd5b81516119cb61194e826118d6565b8181528460208386010111156119e057600080fd5b611245826020830160208701611988565b600060208284031215611a0357600080fd5b815167ffffffffffffffff80821115611a1b57600080fd5b9083019060c08286031215611a2f57600080fd5b611a3761187c565b825182811115611a4657600080fd5b611a52878286016119ac565b825250602083015182811115611a6757600080fd5b611a73878286016119ac565b60208301525060408301516040820152606083015160608201526080830151608082015260a083015160a082015280935050505092915050565b634e487b7160e01b600052601160045260246000fd5b600082611ae057634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561020557610205611aad565b8082018082111561020557610205611aad565b6c1131b430b63632b733b2911d1160991b81528151600090611b3481600d850160208701611988565b601160f91b600d939091019283015250600e01919050565b634e487b7160e01b600052603260045260246000fd5b60008251611b74818460208701611988565b9190910192915050565b600060208284031215611b9057600080fd5b5051919050565b60008351611ba9818460208801611988565b9190910191825250602001919050565b808202811582820484141761020557610205611aad56feffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325514142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392d5fa26469706673582212207483adfc32a79d055abcaff26da17006e562c6abeb4fa5437e7bbda43dab394264736f6c63430008130033",
+ "sourceMap": "265:2342:84:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2134:325;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;;840:33:89;;;822:52;;810:2;795:18;2134:325:84;;;;;;;;617:196;;;;;;:::i;:::-;;:::i;:::-;;2465:140;;;;;;:::i;:::-;;:::i;:::-;;;;1785:13:89;;1767:32;;1855:4;1843:17;;;1837:24;1815:20;;;1808:54;;;;1740:18;2465:140:84;1565:303:89;819:152:84;;;;;;:::i;:::-;;:::i;2057:71::-;;;;;;:::i;:::-;;;;1763:288;;;;;;:::i;:::-;;:::i;:::-;;;2670:25:89;;;2658:2;2643:18;1763:288:84;2524:177:89;2134:325:84;2264:17;2301:44;2327:6;2335:9;;2301:25;:44::i;:::-;2297:156;;;-1:-1:-1;;;;2361:37:84;;2297:156;-1:-1:-1;2436:6:84;2297:156;2134:325;;;;;:::o;617:196::-;733:15;;;;;;;;;;;;;;;;;;712:10;-1:-1:-1;700:23:84;;;;;;;;;:30;;;;;;;;:48;;;;;;;;;;;;;;764:42;;2880:25:89;;;2921:18;;;2914:34;;;700:30:84;;764:42;;2853:18:89;764:42:84;;;;;;;617:196;;;:::o;2465:140::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;2574:17:84;;;;;;;;;;:24;;;;;;;;2567:31;;;;;;;;;;;;;;;;;;;2465:140;;;;;:::o;819:152::-;897:10;885:11;:23;;;;;;;;;;;:30;;;;;;;;;878:37;;;;;;;;931:33;909:5;;897:10;931:33;;;819:152;:::o;1763:288::-;1898:22;1940:51;1966:6;1974:16;;;;:6;:16;:::i;:::-;1940:25;:51::i;:::-;1936:90;;;-1:-1:-1;2014:1:84;2007:8;;1936:90;-1:-1:-1;2043:1:84;1763:288;;;;:::o;977:780::-;1101:4;;1154:14;1165:2;1101:4;1154:9;;:14;:::i;:::-;1146:23;;;:::i;:::-;1138:32;;;-1:-1:-1;1202:4:84;1184:23;;1180:66;;1230:5;1223:12;;;;;1180:66;1257:13;;1316:14;:9;1326:2;1316:9;;:14;:::i;:::-;1305:44;;;;;;;:::i;:::-;1400:10;1359:26;1388:23;;;;;;;;;;;:30;;;;;;;;;1359:59;;;;;;;;;;;;;;;;;;;;;;;;;1256:93;;-1:-1:-1;1256:93:84;;-1:-1:-1;1359:59:84;1441:16;;:36;;-1:-1:-1;1461:11:84;;;;:16;1441:36;1437:79;;;1500:5;1493:12;;;;;;;;1437:79;1526:33;1573:16;1562:53;;;;;;;;;;;;:::i;:::-;1526:89;;1632:118;1671:6;1660:18;;;;;;2670:25:89;;2658:2;2643:18;;2524:177;1660:18:84;;;;;;;;;;;;;1691:5;1712:4;1721:9;:11;;;1737:9;:11;;;1632:15;:118::i;:::-;1625:125;977:780;-1:-1:-1;;;;;;;;;977:780:84:o;6637:2983:83:-;6796:4;2058:21;2078:1;-1:-1:-1;;;;;;;;;;;2058:21:83;:::i;:::-;6820:12;:14;;;:30;6816:164;;;6955:14;;;;6935:34;;-1:-1:-1;;;;;;;;;;;6935:34:83;:::i;:::-;6918:14;;;:51;6816:164;7177:22;;;;7121:19;;7143:86;;7201:27;7177:22;7226:2;7201:27;:::i;:::-;7143;;;;;:86;:33;:86::i;:::-;7121:108;;2569:34;7259:5;7243:23;;;;;;:46;7239:89;;7312:5;7305:12;;;;;7239:89;7442:30;7512:27;7529:9;7512:16;:27::i;:::-;7481:64;;;;;;;;:::i;:::-;;;;;;;;;;;;;7442:104;;7556:29;7588:140;7635:12;:27;;;7694:17;:24;7664:12;:27;;;:54;;;;:::i;:::-;7588:27;;;;;:140;:33;:140::i;:::-;7556:172;;7789:17;7779:28;;;;;;7758:15;7742:33;;;;;;:65;7738:108;;7830:5;7823:12;;;;;;;7738:108;7962:30;;:34;;-1:-1:-1;;;8022:19:83;;;7993:2;;7962:34;;;;;;:::i;:::-;;;;;:56;-1:-1:-1;;;;;;7962:56:83;:79;7958:122;;8064:5;8057:12;;;;;;;7958:122;8244:9;:94;;;;-1:-1:-1;8258:30:83;;:34;;-1:-1:-1;;;8319:19:83;;;8289:2;;8258:34;;;;;;:::i;:::-;;;;;:56;-1:-1:-1;;;;;;8258:56:83;8257:81;;8244:94;8240:137;;;8361:5;8354:12;;;;;;;8240:137;8496:26;8525:42;8538:12;:27;;;8525:42;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8496:71;;8724:19;8746:76;8770:12;:30;;;8802:18;8753:68;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;8753:68:83;;;;;;;;;;8746:76;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8876:14;;;;;8892;;;;;8852:61;;;;;;10287:25:89;;;10328:18;;;10321:34;;;;-1:-1:-1;10371:18:89;;10364:34;10414:18;;;10407:34;;;10457:19;;;10450:35;;;8724:98:83;;-1:-1:-1;8832:17:83;;10259:19:89;;8852:61:83;;;;;;;;;;;;8832:81;;8971:12;8985:16;2330:5;-1:-1:-1;;;;;9005:20:83;9026:4;9005:26;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9438:10:83;;8970:61;;-1:-1:-1;8970:61:83;-1:-1:-1;9438:14:83;;8970:61;9466:16;;;;;9477:5;9466:16;9462:60;;;9502:3;9491:26;;;;;;;;;;;;:::i;:::-;9521:1;9491:31;9484:38;;;;;;;;;;;;;9462:60;9540:73;9563:11;9576:12;:14;;;9592:12;:14;;;9608:1;9611;9540:22;:73::i;:::-;9533:80;;;;;;;;;;;6637:2983;;;;;;;;:::o;33730:1279:81:-;33819:20;33944:7;33938:14;33993:3;33978:13;33975:22;33965:58;;34008:13;34001:20;;33965:58;34064:5;34049:13;34046:24;34036:62;;34083:13;34074:22;;34036:62;;34124:3;34117:5;34114:14;34111:882;;;-1:-1:-1;34163:4:81;34157:11;34205:15;;;34237:28;;;34293:19;;;;-1:-1:-1;;34342:4:81;34452:23;;34448:31;;34433:237;34538:15;;;34532:22;34516:14;;;34509:46;34581:9;;34630:22;34433:237;34630:22;-1:-1:-1;34786:1:81;34748:36;;;34764:4;34748:36;34741:47;34968:4;34950:23;;;34946:31;34934:44;;34928:4;34921:58;33730:1279;;;;;:::o;882:132:74:-;943:13;975:32;983:4;989:10;;;;;;;;;;;;;;;;;1001:5;975:7;:32::i;1554:693:79:-;1662:4;1682:6;;;:32;;;-1:-1:-1;;;;;;;;;;;1692:1:79;:22;;1682:32;:42;;;-1:-1:-1;1718:6:79;;1682:42;:68;;;;-1:-1:-1;;;;;;;;;;;1728:1:79;:22;;1682:68;1678:111;;;-1:-1:-1;1773:5:79;1766:12;;1678:111;1804:39;1836:2;1840;1804:31;:39::i;:::-;1799:83;;-1:-1:-1;1866:5:79;1859:12;;1799:83;1892:12;1907:30;1935:1;1907:27;:30::i;:::-;1892:45;-1:-1:-1;1948:16:79;-1:-1:-1;;;;;;;;;;;1992:4:79;1982:7;1967:49;1948:68;-1:-1:-1;2026:16:79;-1:-1:-1;;;;;;;;;;;2055:4:79;2052:1;2045:34;2026:53;;2089:10;2115:64;2152:2;2156;2160:8;2170;2115:36;:64::i;:::-;2110:69;-1:-1:-1;;;;;;;;;;;;2206:5:79;2210:1;-1:-1:-1;;;;;;;;;;;2206:5:79;:::i;:::-;2202:2;2195:20;2233:7;;1554:693;-1:-1:-1;;;;;;;;;;1554:693:79:o;1083:3768:74:-;1180:13;1412:4;:11;1427:1;1412:16;1408:31;;-1:-1:-1;1430:9:74;;;;;;;;;-1:-1:-1;1430:9:74;;;;1408:31;2160:20;2183:11;:69;;2251:1;2232:4;:11;2228:1;:15;;;;:::i;:::-;:19;;2246:1;2228:19;:::i;:::-;2227:25;;;;:::i;:::-;2183:69;;;2222:1;2203:4;:11;2217:1;2203:15;;;;:::i;:::-;2202:21;;;;:::i;:::-;2197:27;;:1;:27;:::i;:::-;2160:92;;2263:20;2297:12;2286:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2286:24:74;;2263:47;;2485:1;2478:5;2474:13;2586:4;2578:6;2574:17;2619:4;2666;2660:11;2654:4;2650:22;2914:4;2906:6;2902:17;2956:8;2950:15;2995:4;2985:8;2978:22;3067:1231;3086:6;3077:7;3074:19;3067:1231;;;3174:1;3165:7;3161:15;3150:26;;3212:7;3206:14;3799:4;3791:5;3787:2;3783:14;3779:25;3769:8;3765:40;3759:47;3748:9;3740:67;3852:1;3841:9;3837:17;3824:30;;3942:4;3934:5;3930:2;3926:14;3922:25;3912:8;3908:40;3902:47;3891:9;3883:67;3995:1;3984:9;3980:17;3967:30;;4084:4;4076:5;4073:1;4069:13;4065:24;4055:8;4051:39;4045:46;4034:9;4026:66;4137:1;4126:9;4122:17;4109:30;;4218:4;4211:5;4207:16;4197:8;4193:31;4187:38;4176:9;4168:58;;4271:1;4260:9;4256:17;4243:30;;3067:1231;;;4359:28;;-1:-1:-1;;4401:410:74;;;;4586:1;4579:4;4573:11;4569:19;4610:1;4605:132;;;;4759:1;4754:43;;;;4562:235;;4605:132;4661:4;4657:1;4646:9;4642:17;4634:32;4714:4;4710:1;4699:9;4695:17;4687:32;4605:132;;4754:43;4790:4;4786:1;4775:9;4771:17;4763:32;4562:235;;4401:410;-1:-1:-1;4838:6:74;;1083:3768;-1:-1:-1;;;;;;1083:3768:74:o;13133:438:80:-;13203:4;-1:-1:-1;;;;;;;;13223:1:80;:6;;:16;;;;-1:-1:-1;;;;;;;;13233:1:80;:6;;13223:16;:42;;;-1:-1:-1;13245:6:80;;13244:20;;;;-1:-1:-1;13257:6:80;;13244:20;13219:85;;;-1:-1:-1;13288:5:80;13281:12;;13219:85;13337:11;-1:-1:-1;;;;;;;;13361:1:80;13358;13351:15;13337:29;-1:-1:-1;13387:11:80;-1:-1:-1;;;;;;;;1530:66:80;1665;13446:1;13439:15;-1:-1:-1;;;;;;;;13432:1:80;-1:-1:-1;;;;;;;;13425:1:80;13422;13415:15;13408:29;13401:57;13387:71;-1:-1:-1;;;;;;;;;1801:66:80;13495:3;13488:17;13544:10;;;;;13133:438;-1:-1:-1;;;;13133:438:80:o;3159:734::-;3214:14;3284:4;3278:11;3395:4;3386:7;3379:21;3440:4;3433;3424:7;3420:18;3413:32;3485:4;3478;3469:7;3465:18;3458:32;3589:1;3582:4;3573:7;3569:18;3562:29;3631:11;3624:4;3615:7;3611:18;3604:39;-1:-1:-1;;;;;;;;;;;3676:4:80;3667:7;3663:18;3656:29;3817:4;3808:7;3802:4;3793:7;3787:4;3783:1;3779:6;3768:54;3758:82;;3836:1;3833;3826:12;3758:82;3863:14;;3159:734;-1:-1:-1;;3159:734:80:o;14334:6618::-;14516:9;;;;14613:3;14516:9;;14695:13;;:30;;;;-1:-1:-1;14712:13:80;;14695:30;14691:44;;;14734:1;14727:8;;;;;;;;;;14691:44;14761:25;1937:66;2031;14779:2;14783;14761:9;:25::i;:::-;14750:36;;-1:-1:-1;14750:36:80;-1:-1:-1;14822:7:80;;14821:22;;;;-1:-1:-1;14835:7:80;;14821:22;14800:243;;;-1:-1:-1;;;;;;;;;;;14924:8:80;-1:-1:-1;;;;;;;;;;;14920:12:80;14910:8;14903:33;14892:44;-1:-1:-1;14965:1:80;;-1:-1:-1;14988:13:80;;:30;;;;-1:-1:-1;15005:13:80;;14988:30;14984:44;;;15027:1;15020:8;;;;;;;;;;14984:44;15167:1;15156:8;15149:5;15145:20;15141:28;15136:1;15125:8;15118:5;15114:20;15110:28;15107:1;15103:36;15099:71;15083:263;15176:2;15083:263;;15225:1;15218:5;15214:13;15205:22;;15322:1;15311:8;15304:5;15300:20;15296:28;15291:1;15280:8;15273:5;15269:20;15265:28;15262:1;15258:36;15254:71;15248:77;;15083:263;;;15087:85;15437:1;15426:8;15419:5;15415:20;15411:28;15406:1;15395:8;15388:5;15384:20;15380:28;15377:1;15373:36;15369:71;15363:77;;15468:1;15464:2;15461:9;15458:88;;15498:2;15493:7;;15526:2;15521:7;;15458:88;15573:1;15569:2;15566:9;15563:88;;15603:2;15598:7;;15631:2;15626:7;;15563:88;15678:1;15674:2;15671:9;15668:88;;15708:2;15703:7;;15736:2;15731:7;;15668:88;15794:1;15787:5;15783:13;15774:22;;15819:1;15813:7;;15844:1;15837:8;;15863:4025;15882:5;-1:-1:-1;;15870:18:80;15863:4025;;;-1:-1:-1;;;;;;;;15998:1:80;15995;15988:15;-1:-1:-1;;;;;;;;16064:2:80;16060;16053:17;-1:-1:-1;;;;;;;;16120:2:80;16117:1;16110:16;-1:-1:-1;;;;;;;;16176:2:80;16172;16165:17;16159:23;;-1:-1:-1;;;;;;;;16282:1:80;-1:-1:-1;;;;;;;;16274:2:80;16271:1;16264:16;-1:-1:-1;;;;;;;;16255:2:80;-1:-1:-1;;;;;;;;16248:10:80;16245:1;16238:24;16231:53;16228:1;16221:67;-1:-1:-1;;;;;;;;16351:3:80;16347:2;16340:18;16333:25;;-1:-1:-1;;;;;;;;16410:2:80;16406;16399:17;16393:23;;-1:-1:-1;;;;;;;;16509:1:80;16505:2;-1:-1:-1;;;;;;;;;;16489:22:80;-1:-1:-1;;;;;;;;16481:2:80;16477;16470:17;16463:52;16458:57;;-1:-1:-1;;;;;;;;16587:1:80;16582:2;-1:-1:-1;;;;;;;;16575:10:80;16572:1;16565:24;16561:2;16554:39;16548:45;;-1:-1:-1;;;;;;;;16663:2:80;-1:-1:-1;;;;;;;;16656:1:80;16652:2;16645:16;16638:31;16633:36;;16896:1;16885:8;16878:5;16874:20;16870:28;16865:1;16854:8;16847:5;16843:20;16839:28;16836:1;16832:36;16828:71;16822:77;;16935:2;16925:148;;16981:1;-1:-1:-1;;;;;;;;16974:9:80;16969:14;;17039:8;;;;;;16925:148;17121:1;17117:2;17114:9;17111:114;;17160:2;17154:8;;17197:2;17191:8;;17111:114;17260:1;17256:2;17253:9;17250:114;;17299:2;17293:8;;17336:2;17330:8;;17250:114;17399:1;17395:2;17392:9;17389:114;;17438:2;17432:8;;17475:2;17469:8;;17389:114;17538:2;17528:223;;-1:-1:-1;17577:2:80;;-1:-1:-1;17650:1:80;;-1:-1:-1;17650:1:80;;-1:-1:-1;17613:2:80;-1:-1:-1;17717:8:80;;-1:-1:-1;17717:8:80;17528:223;-1:-1:-1;;;;;;;;17931:1:80;-1:-1:-1;;;;;;;;17922:3:80;17918:2;17911:18;17904:32;-1:-1:-1;;;;;;;;18004:1:80;-1:-1:-1;;;;;;;;17997:9:80;-1:-1:-1;;;;;;;;17989:2:80;17985;17978:17;17971:39;17965:45;;18235:2;18225:1043;;18279:2;18269:973;;-1:-1:-1;;;;;;;;18339:1:80;-1:-1:-1;;;;;;;;;;18323:21:80;18317:27;;-1:-1:-1;;;;;;;;18413:2:80;18409;18402:17;18396:23;;-1:-1:-1;;;;;;;;18477:2:80;18474:1;18467:16;18461:22;;-1:-1:-1;;;;;;;;18546:2:80;18542;18535:17;18529:23;;-1:-1:-1;;;;;;;;18646:1:80;18641:2;-1:-1:-1;;;;;;;;18634:10:80;18631:1;18624:24;-1:-1:-1;;;;;;;;18616:2:80;18613:1;18606:16;18599:53;18593:59;;-1:-1:-1;;;;;;;;18716:2:80;18713:1;18706:16;18700:22;;-1:-1:-1;;;;;;;;18793:3:80;18789:2;18782:18;18775:25;;-1:-1:-1;;;;;;;;18864:2:80;18860;18853:17;18847:23;;-1:-1:-1;;;;;;;;18975:1:80;18971:2;-1:-1:-1;;;;;;;;;;18955:22:80;-1:-1:-1;;;;;;;;18947:2:80;18943;18936:17;18929:52;18924:57;;-1:-1:-1;;;;;;;;19065:1:80;19061;-1:-1:-1;;;;;;;;19054:9:80;19050:2;19043:24;19039:2;19032:39;19026:45;;-1:-1:-1;;;;;;;;19145:1:80;19142;19138:2;19131:16;19127:2;19120:31;19115:36;;19204:8;;;;;;;18269:973;-1:-1:-1;;;;;;;;19311:2:80;19307;19300:17;19294:23;;-1:-1:-1;;;;;;;;19369:2:80;19365;19358:17;-1:-1:-1;;;;;;;;19485:2:80;19481;19474:17;19468:23;;-1:-1:-1;;;;;;;;19535:3:80;19530;19523:19;19516:26;;-1:-1:-1;;;;;;;;19600:2:80;19597:1;19590:16;-1:-1:-1;;;;;;;;19708:1:80;19703:3;-1:-1:-1;;;;;;;;;;19687:23:80;-1:-1:-1;;;;;;;;19677:3:80;-1:-1:-1;;;;;;;;19670:11:80;-1:-1:-1;;;;;;;;19662:2:80;19658;19651:17;19644:41;19637:77;19631:83;;-1:-1:-1;;;;;;;;19809:1:80;19804:3;19801:1;19794:17;-1:-1:-1;;;;;;;;19786:2:80;-1:-1:-1;;;;;;;;19777:2:80;-1:-1:-1;;;;;;;;19770:10:80;19765:3;19758:26;19751:41;19744:71;19739:76;;;;;19846:2;19841:7;;16755:3115;;;;15863:4025;15911:1;15904:5;15900:13;15891:22;;15863:4025;;;19931:4;19925:11;19974:2;19967:4;19964:1;19960:12;19953:24;20239:4;20236:1;20229:15;20282:4;20275;20272:1;20268:12;20261:26;20325:4;20318;20315:1;20311:12;20304:26;-1:-1:-1;;;;;;;;;;20472:4:80;20469:1;20465:12;20458:29;-1:-1:-1;;;;;;;;20518:4:80;20515:1;20511:12;20504:23;20655:4;20652:1;20646:4;20643:1;20637:4;20633:1;20629:6;20618:42;20608:70;;20674:1;20671;20664:12;20608:70;-1:-1:-1;;;;;;;;20859:1:80;20853:8;20850:1;20843:22;20838:27;;;20937:8;;;;;;14334:6618;;;;;;;:::o;13673:501::-;13763:7;;;;12984:6;13835:41;;13869:2;13873;13861:15;;;;;;;;13835:41;12984:6;13886:41;;13920:2;13924;13912:15;;;;;;;;13886:41;13948:2;13942;:8;13941:24;;;;;13962:2;13956;:8;13941:24;13937:183;;;14003:22;14012:2;14016;14020:1;14023;14003:8;:22::i;:::-;13981:44;;-1:-1:-1;13981:44:80;;-1:-1:-1;13981:44:80;-1:-1:-1;13981:44:80;-1:-1:-1;13937:183:80;;;14078:31;14088:2;14092;14096:1;14099;14102:2;14106;14078:9;:31::i;:::-;14056:53;;-1:-1:-1;14056:53:80;;-1:-1:-1;14056:53:80;-1:-1:-1;14056:53:80;-1:-1:-1;13937:183:80;14137:30;14149:2;14153;14157:3;14162:4;14137:11;:30::i;:::-;14130:37;;;;;;13673:501;;;;;;;;:::o;9863:928::-;9975:10;9987;9999;10011;-1:-1:-1;;;;;;;;10104:1:80;10101;10094:15;10088:21;;-1:-1:-1;;;;;;;;10154:2:80;10150;10143:17;10137:23;;-1:-1:-1;;;;;;;;10202:2:80;10199:1;10192:16;10186:22;;-1:-1:-1;;;;;;;;10254:2:80;10250;10243:17;10237:23;;-1:-1:-1;;;;;;;;10302:2:80;10298;10291:17;10285:23;;-1:-1:-1;;;;;;;;10404:1:80;-1:-1:-1;;;;;;;;10396:2:80;10393:1;10386:16;-1:-1:-1;;;;;;;;10377:2:80;-1:-1:-1;;;;;;;;10370:10:80;10367:1;10360:24;10353:53;10350:1;10343:67;10337:73;;-1:-1:-1;;;;;;;;10503:1:80;10499:2;-1:-1:-1;;;;;;;;;;10483:22:80;-1:-1:-1;;;;;;;;10475:2:80;10471;10464:17;10457:52;10451:58;;-1:-1:-1;;;;;;;;10577:1:80;10572:2;-1:-1:-1;;;;;;;;10565:10:80;10561:2;10554:25;10550:2;10543:40;10538:45;;-1:-1:-1;;;;;;;;10627:3:80;10623:2;10616:18;10610:24;;-1:-1:-1;;;;;;;;10702:1:80;10699;10695:2;10688:16;-1:-1:-1;;;;;;;;10681:24:80;10678:1;10671:38;10665:44;;9863:928;;;;;;;;;:::o;11008:1073::-;11149:10;11161;11173;11185;11239:2;11245:1;11239:7;11235:67;;-1:-1:-1;11274:2:80;;-1:-1:-1;11278:2:80;;-1:-1:-1;11282:1:80;;-1:-1:-1;11282:1:80;11266:21;;11235:67;-1:-1:-1;;;;;;;;11349:10:80;;;;;11353:1;11400:4;11396:2;11389:19;11382:34;11376:40;;-1:-1:-1;;;;;;;;11473:2:80;-1:-1:-1;;;;;;;;11466:10:80;-1:-1:-1;;;;;;;;11457:3:80;11453:2;11446:18;11439:41;11433:47;;-1:-1:-1;;;;;;;;11514:2:80;11510;11503:17;11497:23;;-1:-1:-1;;;;;;;;11565:2:80;11561;11554:17;11548:23;;-1:-1:-1;;;;;;;;11619:2:80;11614:3;11607:18;11601:24;;-1:-1:-1;;;;;;;;11678:2:80;11672:4;11665:19;11659:25;;-1:-1:-1;;;;;;;;11739:2:80;11735;11728:17;11721:24;;-1:-1:-1;;;;;;;;11850:1:80;11845:3;-1:-1:-1;;;;;;;;;;11829:23:80;-1:-1:-1;;;;;;;;11820:2:80;-1:-1:-1;;;;;;;;11813:10:80;-1:-1:-1;;;;;;;;11805:2:80;11801;11794:17;11787:40;11780:76;11774:82;;-1:-1:-1;;;;;;;;11958:1:80;11954:2;11950;11943:17;-1:-1:-1;;;;;;;;11935:2:80;-1:-1:-1;;;;;;;;11926:2:80;-1:-1:-1;;;;;;;;11919:10:80;11914:3;11907:26;11900:41;11893:71;11887:77;;11008:1073;;;;;;;;;;;;:::o;9375:379::-;9490:10;9502;9528:14;9545:16;9557:3;9545:11;:16::i;:::-;9528:33;-1:-1:-1;;;;;;;;;9594:6:80;9591:1;9584:20;9579:25;-1:-1:-1;9622:10:80;-1:-1:-1;;;;;;;;9646:6:80;9642:2;9635:21;9622:34;-1:-1:-1;;;;;;;;;9692:2:80;9688;9681:17;9672:26;-1:-1:-1;;;;;;;;;9730:6:80;9727:1;9720:20;9715:25;;9518:236;;9375:379;;;;;;;:::o;4005:730::-;4060:14;4130:4;4124:11;4241:4;4232:7;4225:21;4286:4;4279;4270:7;4266:18;4259:32;4331:4;4324;4315:7;4311:18;4304:32;4435:1;4428:4;4419:7;4415:18;4408:29;-1:-1:-1;;;;;;;;;;4470:4:80;4461:7;4457:18;4450:35;-1:-1:-1;;;;;;;;4518:4:80;4509:7;4505:18;4498:29;4659:4;4650:7;4644:4;4635:7;4629:4;4625:1;4621:6;4610:54;4600:82;;4678:1;4675;4668:12;14:659:89;93:6;101;109;162:2;150:9;141:7;137:23;133:32;130:52;;;178:1;175;168:12;130:52;214:9;201:23;191:33;;275:2;264:9;260:18;247:32;298:18;339:2;331:6;328:14;325:34;;;355:1;352;345:12;325:34;393:6;382:9;378:22;368:32;;438:7;431:4;427:2;423:13;419:27;409:55;;460:1;457;450:12;409:55;500:2;487:16;526:2;518:6;515:14;512:34;;;542:1;539;532:12;512:34;587:7;582:2;573:6;569:2;565:15;561:24;558:37;555:57;;;608:1;605;598:12;555:57;639:2;635;631:11;621:21;;661:6;651:16;;;;;14:659;;;;;:::o;885:316::-;962:6;970;978;1031:2;1019:9;1010:7;1006:23;1002:32;999:52;;;1047:1;1044;1037:12;999:52;-1:-1:-1;;1070:23:89;;;1140:2;1125:18;;1112:32;;-1:-1:-1;1191:2:89;1176:18;;;1163:32;;885:316;-1:-1:-1;885:316:89:o;1206:354::-;1274:6;1282;1335:2;1323:9;1314:7;1310:23;1306:32;1303:52;;;1351:1;1348;1341:12;1303:52;1377:23;;-1:-1:-1;;;;;1429:31:89;;1419:42;;1409:70;;1475:1;1472;1465:12;1409:70;1498:5;1550:2;1535:18;;;;1522:32;;-1:-1:-1;;;1206:354:89:o;1873:180::-;1932:6;1985:2;1973:9;1964:7;1960:23;1956:32;1953:52;;;2001:1;1998;1991:12;1953:52;-1:-1:-1;2024:23:89;;1873:180;-1:-1:-1;1873:180:89:o;2058:461::-;2159:6;2167;2220:2;2208:9;2199:7;2195:23;2191:32;2188:52;;;2236:1;2233;2226:12;2188:52;2276:9;2263:23;2309:18;2301:6;2298:30;2295:50;;;2341:1;2338;2331:12;2295:50;2364:22;;2420:3;2402:16;;;2398:26;2395:46;;;2437:1;2434;2427:12;2959:521;3036:4;3042:6;3102:11;3089:25;3196:2;3192:7;3181:8;3165:14;3161:29;3157:43;3137:18;3133:68;3123:96;;3215:1;3212;3205:12;3123:96;3242:33;;3294:20;;;-1:-1:-1;3337:18:89;3326:30;;3323:50;;;3369:1;3366;3359:12;3323:50;3402:4;3390:17;;-1:-1:-1;3433:14:89;3429:27;;;3419:38;;3416:58;;;3470:1;3467;3460:12;3416:58;2959:521;;;;;:::o;3485:331::-;3590:9;3601;3643:8;3631:10;3628:24;3625:44;;;3665:1;3662;3655:12;3625:44;3694:6;3684:8;3681:20;3678:40;;;3714:1;3711;3704:12;3678:40;-1:-1:-1;;3740:23:89;;;3785:25;;;;;-1:-1:-1;3485:331:89:o;3821:337::-;-1:-1:-1;;3942:19:89;;4029:11;;;;4060:2;4052:11;;4049:103;;;4139:2;4133;4126:3;4122:2;4118:12;4115:1;4111:20;4107:29;4103:2;4099:38;4095:47;4086:56;;4049:103;;;3821:337;;;;:::o;4163:127::-;4224:10;4219:3;4215:20;4212:1;4205:31;4255:4;4252:1;4245:15;4279:4;4276:1;4269:15;4295:253;4367:2;4361:9;4409:4;4397:17;;4444:18;4429:34;;4465:22;;;4426:62;4423:88;;;4491:18;;:::i;:::-;4527:2;4520:22;4295:253;:::o;4553:275::-;4624:2;4618:9;4689:2;4670:13;;-1:-1:-1;;4666:27:89;4654:40;;4724:18;4709:34;;4745:22;;;4706:62;4703:88;;;4771:18;;:::i;:::-;4807:2;4800:22;4553:275;;-1:-1:-1;4553:275:89:o;4833:186::-;4881:4;4914:18;4906:6;4903:30;4900:56;;;4936:18;;:::i;:::-;-1:-1:-1;5002:2:89;4981:15;-1:-1:-1;;4977:29:89;5008:4;4973:40;;4833:186::o;5024:739::-;5101:6;5109;5162:2;5150:9;5141:7;5137:23;5133:32;5130:52;;;5178:1;5175;5168:12;5130:52;5214:9;5201:23;5191:33;;5275:2;5264:9;5260:18;5247:32;5302:18;5294:6;5291:30;5288:50;;;5334:1;5331;5324:12;5288:50;5357:22;;5410:4;5402:13;;5398:27;-1:-1:-1;5388:55:89;;5439:1;5436;5429:12;5388:55;5475:2;5462:16;5500:48;5516:31;5544:2;5516:31;:::i;:::-;5500:48;:::i;:::-;5571:2;5564:5;5557:17;5611:7;5606:2;5601;5597;5593:11;5589:20;5586:33;5583:53;;;5632:1;5629;5622:12;5583:53;5687:2;5682;5678;5674:11;5669:2;5662:5;5658:14;5645:45;5731:1;5726:2;5721;5714:5;5710:14;5706:23;5699:34;5752:5;5742:15;;;;;5024:739;;;;;:::o;5768:250::-;5853:1;5863:113;5877:6;5874:1;5871:13;5863:113;;;5953:11;;;5947:18;5934:11;;;5927:39;5899:2;5892:10;5863:113;;;-1:-1:-1;;6010:1:89;5992:16;;5985:27;5768:250::o;6023:441::-;6076:5;6129:3;6122:4;6114:6;6110:17;6106:27;6096:55;;6147:1;6144;6137:12;6096:55;6176:6;6170:13;6207:48;6223:31;6251:2;6223:31;:::i;6207:48::-;6280:2;6271:7;6264:19;6326:3;6319:4;6314:2;6306:6;6302:15;6298:26;6295:35;6292:55;;;6343:1;6340;6333:12;6292:55;6356:77;6430:2;6423:4;6414:7;6410:18;6403:4;6395:6;6391:17;6356:77;:::i;6469:1006::-;6570:6;6623:2;6611:9;6602:7;6598:23;6594:32;6591:52;;;6639:1;6636;6629:12;6591:52;6672:9;6666:16;6701:18;6742:2;6734:6;6731:14;6728:34;;;6758:1;6755;6748:12;6728:34;6781:22;;;;6837:4;6819:16;;;6815:27;6812:47;;;6855:1;6852;6845:12;6812:47;6881:22;;:::i;:::-;6934:2;6928:9;6962:2;6952:8;6949:16;6946:36;;;6978:1;6975;6968:12;6946:36;7005:55;7052:7;7041:8;7037:2;7033:17;7005:55;:::i;:::-;6998:5;6991:70;;7100:2;7096;7092:11;7086:18;7129:2;7119:8;7116:16;7113:36;;;7145:1;7142;7135:12;7113:36;7181:55;7228:7;7217:8;7213:2;7209:17;7181:55;:::i;:::-;7176:2;7169:5;7165:14;7158:79;;7283:2;7279;7275:11;7269:18;7264:2;7257:5;7253:14;7246:42;7334:2;7330;7326:11;7320:18;7315:2;7308:5;7304:14;7297:42;7386:3;7382:2;7378:12;7372:19;7366:3;7359:5;7355:15;7348:44;7439:3;7435:2;7431:12;7425:19;7419:3;7412:5;7408:15;7401:44;7464:5;7454:15;;;;;6469:1006;;;;:::o;7794:127::-;7855:10;7850:3;7846:20;7843:1;7836:31;7886:4;7883:1;7876:15;7910:4;7907:1;7900:15;7926:217;7966:1;7992;7982:132;;8036:10;8031:3;8027:20;8024:1;8017:31;8071:4;8068:1;8061:15;8099:4;8096:1;8089:15;7982:132;-1:-1:-1;8128:9:89;;7926:217::o;8148:128::-;8215:9;;;8236:11;;;8233:37;;;8250:18;;:::i;8281:125::-;8346:9;;;8367:10;;;8364:36;;;8380:18;;:::i;8411:611::-;-1:-1:-1;;;8741:51:89;;8815:13;;8723:3;;8837:75;8815:13;8900:2;8891:12;;8884:4;8872:17;;8837:75;:::i;:::-;-1:-1:-1;;;8971:2:89;8931:16;;;;8963:11;;;8956:33;-1:-1:-1;9013:2:89;9005:11;;8411:611;-1:-1:-1;8411:611:89:o;9027:127::-;9088:10;9083:3;9079:20;9076:1;9069:31;9119:4;9116:1;9109:15;9143:4;9140:1;9133:15;9159:287;9288:3;9326:6;9320:13;9342:66;9401:6;9396:3;9389:4;9381:6;9377:17;9342:66;:::i;:::-;9424:16;;;;;9159:287;-1:-1:-1;;9159:287:89:o;9451:184::-;9521:6;9574:2;9562:9;9553:7;9549:23;9545:32;9542:52;;;9590:1;9587;9580:12;9542:52;-1:-1:-1;9613:16:89;;9451:184;-1:-1:-1;9451:184:89:o;9640:383::-;9797:3;9835:6;9829:13;9851:66;9910:6;9905:3;9898:4;9890:6;9886:17;9851:66;:::i;:::-;9939:16;;;;9964:21;;;-1:-1:-1;10012:4:89;10001:16;;9640:383;-1:-1:-1;9640:383:89:o;10685:168::-;10758:9;;;10789;;10806:15;;;10800:22;;10786:37;10776:71;;10827:18;;:::i",
+ "linkReferences": {}
+ },
+ "methodIdentifiers": {
+ "callback((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32)": "dee30c97",
+ "getPublicKey(address,bytes32)": "7cefdd5d",
+ "isValidSignature(bytes32,bytes)": "1626ba7e",
+ "registerPublicKey(bytes32,uint256,uint256)": "3082ab5b",
+ "removePublicKey(bytes32)": "8f3285f5",
+ "validateUserOp((address,uint256,bytes,bytes,uint256,uint256,uint256,uint256,uint256,bytes,bytes),bytes32)": "fff35b72"
+ },
+ "rawMetadata": "{\"compiler\":{\"version\":\"0.8.19+commit.7dd6d404\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"keyId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"name\":\"PasskeyRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"keyId\",\"type\":\"bytes32\"}],\"name\":\"PasskeyRemoved\",\"type\":\"event\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"callGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"verificationGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct UserOperation\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"callback\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"keyId\",\"type\":\"bytes32\"}],\"name\":\"getPublicKey\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"internalType\":\"struct PasskeyModule.PublicKey\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"name\":\"isValidSignature\",\"outputs\":[{\"internalType\":\"bytes4\",\"name\":\"magicValue\",\"type\":\"bytes4\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"keyId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"x\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"y\",\"type\":\"uint256\"}],\"name\":\"registerPublicKey\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"keyId\",\"type\":\"bytes32\"}],\"name\":\"removePublicKey\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"callData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"callGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"verificationGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"preVerificationGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxPriorityFeePerGas\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"paymasterAndData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"}],\"internalType\":\"struct UserOperation\",\"name\":\"userOp\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"digest\",\"type\":\"bytes32\"}],\"name\":\"validateUserOp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"validationData\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/modules/Passkey.sol\":\"PasskeyModule\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":account-abstraction/=lib/account-abstraction/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":openzeppelin/=lib/openzeppelin-contracts/contracts/\",\":webauthn-sol/=lib/webauthn-sol/src/\"]},\"sources\":{\"lib/account-abstraction/contracts/core/BaseAccount.sol\":{\"keccak256\":\"0x5eb3253b32fd8ba8ae7b9d83da8e9924254a4d3d17a8772b41280e8572974b3c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://b2d23d1276f85300e2ad0c7219614a072796b4f5581fd552b0bcaa47904400d3\",\"dweb:/ipfs/QmVWK5WZ3VskNTfCBxLqY4xBP7WGm3cRM9Qhdy56f5TfAk\"]},\"lib/account-abstraction/contracts/core/Helpers.sol\":{\"keccak256\":\"0x591c87519f7155d1909210276b77925ab2722a99b7b5d5649aecc36ebbdb045a\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://69643e83f68e6a13d5075c7565bfce326673b0bd98c432033c4603ea84835746\",\"dweb:/ipfs/QmSwSzjYyV7qudi5vvsmzHMG2Z4YJZxX51RRXXVCLaNcEU\"]},\"lib/account-abstraction/contracts/interfaces/IAccount.sol\":{\"keccak256\":\"0x556a0e5980de18e90b115553ed502408155ba35f58642823010d9288047bc418\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://a0f420134b79596db8737173c7b933ae0a33059e107b6327c43aa40d4744a9e4\",\"dweb:/ipfs/QmRo8s1AhXmEMV7uPYnbpYwU19e9Bk6jmYBJTiPx3Fo85W\"]},\"lib/account-abstraction/contracts/interfaces/IAggregator.sol\":{\"keccak256\":\"0x060e9ddb0152250c269ba0640dc5753834ac44cf182a2837d508c0c529cae26a\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://20ed837bc5909c89ff1910246bf245a5dad6840aa939382e1694964eb7dbd37b\",\"dweb:/ipfs/QmTMybRq5yyghPDDs1ZCNAVB9sSJ4WHe6Q9mejuKPTAdNP\"]},\"lib/account-abstraction/contracts/interfaces/IEntryPoint.sol\":{\"keccak256\":\"0x3a90bf308819ed125fa4202f880999caff8a8686633b8ddb79a30ca240d5b8f8\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://d2d21cc92c2fdab2b58d21bc25d4cd0e8c284b922528a186b087b818d54bc6cf\",\"dweb:/ipfs/QmT1qrfuBjsv2rmRCDn8mgPXHp94hARJwzbcDuBLDTbFWd\"]},\"lib/account-abstraction/contracts/interfaces/INonceManager.sol\":{\"keccak256\":\"0x509871e6c63663cdcc3eba19920fe84e991f38b289b1377ac3c3a6d9f22d7e12\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://00fe21b4349b24c50df60e1a705179293982bd9e7a32b78d4bac9620f89e7fe2\",\"dweb:/ipfs/QmSFFYGfUwQbVa6hASjU7YxTvgi2HkfrPr4X5oPHscHg8b\"]},\"lib/account-abstraction/contracts/interfaces/IStakeManager.sol\":{\"keccak256\":\"0xd227b02888cd4ac68daebcdfd992ec00f9fff66fa3b3bb16f656cd582fa3480f\",\"license\":\"GPL-3.0-only\",\"urls\":[\"bzz-raw://b389da4714a138be63704a576a482505eab2855e263b38a93706395d8d42e7c3\",\"dweb:/ipfs/QmeeAZpdHwUXxqP8pxA7GNtoCGBmmH4FaqLLwScVKGxtxZ\"]},\"lib/account-abstraction/contracts/interfaces/UserOperation.sol\":{\"keccak256\":\"0x61374003361059087fdcf17967a7bba052badeaf5c7f0ae689166f8aafd3a45c\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://6ff83c59432e733bf6304dda27cd4b0f34401917dd535e2669cc842d2d26568c\",\"dweb:/ipfs/QmPJbHU5TAjHqUTZzAcicEeG2nknmwCN43L4EW9LHbknTN\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC1271.sol\":{\"keccak256\":\"0x0705a4b1b86d7b0bd8432118f226ba139c44b9dcaba0a6eafba2dd7d0639c544\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c45b821ef9e882e57c256697a152e108f0f2ad6997609af8904cae99c9bd422e\",\"dweb:/ipfs/QmRKCJW6jjzR5UYZcLpGnhEJ75UVbH6EHkEa49sWx2SKng\"]},\"lib/openzeppelin-contracts/contracts/utils/Create2.sol\":{\"keccak256\":\"0x6e00f269073ffc4350e56b7e8153c9092d5f70bfba423299990514183101ef89\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8dc5ff5c204604be7594ce2fa9100a0638f22b5aada6ebec1e165b0f50a48447\",\"dweb:/ipfs/QmfH7uWphPrq8jqwGvyh4pFnLEgEPmLwyGV2Bvx1Acjggh\"]},\"src/interfaces/IModule.sol\":{\"keccak256\":\"0x1de63b5efcf162b4486e094fd0fbb74afc320fdc8b52e2f10bfd4ed121c26d43\",\"license\":\"Apache\",\"urls\":[\"bzz-raw://c50fdd7a1d76e7f0c066abcb36d92842c5174463b2841080ef196102c52df964\",\"dweb:/ipfs/QmdcJdq3A9tgVWKQ5FrCuBjHmM3vyrxhApueVwRiJXYAsN\"]},\"src/interfaces/IWallet.sol\":{\"keccak256\":\"0xbb9abebf75ef11e45750a4652f1ab7448c39f28425b2b08cf273a80575f9e3be\",\"license\":\"Apache\",\"urls\":[\"bzz-raw://361727344a05d34a09d643e11d39001fe9b013e499a52fe5e35906fd681df4f5\",\"dweb:/ipfs/QmUC8AxxjupBdaS4c5bGPXp2Y7YcUkD2fX1UWYh6qnpyaq\"]},\"src/libraries/Base64.sol\":{\"keccak256\":\"0x0d721af3814ddfbb2e21b718aa1ccebae60770e4e101c8901bf40cdc2e61127c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a9a9be2e63d9b06e4ea596853c28b4d07c49804f3d14bbb752624813942290d0\",\"dweb:/ipfs/QmfZRpbZ1hrNrwdWhUpFZ4XwE7Cg7Z5cZeCz2agTrPQwYr\"]},\"src/libraries/Base64Url.sol\":{\"keccak256\":\"0x6e409772dd9811bbc06212a4d76e0c49872b3fcccf6deded83d5cc45fe70d838\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c938bc1c269b33c9cc65e3d6351e07635a1ef177653bbebde80bad22a3c688d9\",\"dweb:/ipfs/QmZ4V7Y7cXUHFwJxvhpBYXzUKwBdnLMhq6X1LupTCEgMRN\"]},\"src/libraries/FCL_ecdsa.sol\":{\"keccak256\":\"0xbf7cdea8f1d4b285764c60698899a91b3091fd9e38f7762979a6af4f6a38effd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b2ace910c8f9c33673b0b3c69658abd5043f3b189b348e69b0198d8f87661af7\",\"dweb:/ipfs/QmcLhDNEV5qHy8UfGKLM5yaj3U4Tvjyq4FcZFzRRapZwnz\"]},\"src/libraries/FCL_elliptic.sol\":{\"keccak256\":\"0x87b36af497eb28dbcf8efcc9f35cdb961427cd44341e62328d585c8f5b1d4de6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c82c4d5b527936f48d1bb1c8cc424ca9318fcf38c2739fe09759ea9f518b5fc3\",\"dweb:/ipfs/QmVxXHGUyAtZZxRzkfoq5u7Tp1A8MPTQ5Lcd6qrZJg6xDk\"]},\"src/libraries/LibString.sol\":{\"keccak256\":\"0xff57c212b054277cc248b58a2f687a2e33e6eb18fe417682ba101dce6dd85029\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://36b4fcc9d8f1eec0d9da4c0ab770875aa9a9a82ff06c4849a987a6acf2e7c0e0\",\"dweb:/ipfs/QmSp9YiVtBSm6RGnWD2arKirRj855J7mRqbHaB6gF8ikqj\"]},\"src/libraries/WebAuthn.sol\":{\"keccak256\":\"0x27cf9ccfc9bf0b34b442804834174bc847aa815fa8ed20c4eb6f544f0403ac86\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cf63d38ba0684048b263e736fdd3c6eba7d0493ccbad3470f6c3084a8c8fdcd7\",\"dweb:/ipfs/QmTBPQg2M7tvdoKWgQ91KsJQe7WCJCPWuEKEDSDGdETCzJ\"]},\"src/modules/Passkey.sol\":{\"keccak256\":\"0x76af48fb4013306b5a1f6a236ee8046387f6ba1b3c0d194797636afa7e317ca9\",\"license\":\"Apache\",\"urls\":[\"bzz-raw://73ea00fe1b7d9a29eb905bac437fc0d7119ba55a59e7c44d9443aebac14362ef\",\"dweb:/ipfs/Qma2PEo7LsEfiv8HWFZJn5XSnfNUjHgaZaWD4mNVYRMGRL\"]}},\"version\":1}",
+ "metadata": {
+ "compiler": {
+ "version": "0.8.19+commit.7dd6d404"
+ },
+ "language": "Solidity",
+ "output": {
+ "abi": [
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "user",
+ "type": "address",
+ "indexed": true
+ },
+ {
+ "internalType": "bytes32",
+ "name": "keyId",
+ "type": "bytes32",
+ "indexed": true
+ },
+ {
+ "internalType": "uint256",
+ "name": "x",
+ "type": "uint256",
+ "indexed": false
+ },
+ {
+ "internalType": "uint256",
+ "name": "y",
+ "type": "uint256",
+ "indexed": false
+ }
+ ],
+ "type": "event",
+ "name": "PasskeyRegistered",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "user",
+ "type": "address",
+ "indexed": true
+ },
+ {
+ "internalType": "bytes32",
+ "name": "keyId",
+ "type": "bytes32",
+ "indexed": true
+ }
+ ],
+ "type": "event",
+ "name": "PasskeyRemoved",
+ "anonymous": false
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "struct UserOperation",
+ "name": "",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "nonce",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "initCode",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes",
+ "name": "callData",
+ "type": "bytes"
+ },
+ {
+ "internalType": "uint256",
+ "name": "callGasLimit",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "verificationGasLimit",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "preVerificationGas",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "maxFeePerGas",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "maxPriorityFeePerGas",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "paymasterAndData",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes",
+ "name": "signature",
+ "type": "bytes"
+ }
+ ]
+ },
+ {
+ "internalType": "bytes32",
+ "name": "",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "callback"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "address",
+ "name": "user",
+ "type": "address"
+ },
+ {
+ "internalType": "bytes32",
+ "name": "keyId",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "getPublicKey",
+ "outputs": [
+ {
+ "internalType": "struct PasskeyModule.PublicKey",
+ "name": "",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "uint256",
+ "name": "x",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "y",
+ "type": "uint256"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "digest",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "bytes",
+ "name": "signature",
+ "type": "bytes"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "isValidSignature",
+ "outputs": [
+ {
+ "internalType": "bytes4",
+ "name": "magicValue",
+ "type": "bytes4"
+ }
+ ]
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "keyId",
+ "type": "bytes32"
+ },
+ {
+ "internalType": "uint256",
+ "name": "x",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "y",
+ "type": "uint256"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "registerPublicKey"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "bytes32",
+ "name": "keyId",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "nonpayable",
+ "type": "function",
+ "name": "removePublicKey"
+ },
+ {
+ "inputs": [
+ {
+ "internalType": "struct UserOperation",
+ "name": "userOp",
+ "type": "tuple",
+ "components": [
+ {
+ "internalType": "address",
+ "name": "sender",
+ "type": "address"
+ },
+ {
+ "internalType": "uint256",
+ "name": "nonce",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "initCode",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes",
+ "name": "callData",
+ "type": "bytes"
+ },
+ {
+ "internalType": "uint256",
+ "name": "callGasLimit",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "verificationGasLimit",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "preVerificationGas",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "maxFeePerGas",
+ "type": "uint256"
+ },
+ {
+ "internalType": "uint256",
+ "name": "maxPriorityFeePerGas",
+ "type": "uint256"
+ },
+ {
+ "internalType": "bytes",
+ "name": "paymasterAndData",
+ "type": "bytes"
+ },
+ {
+ "internalType": "bytes",
+ "name": "signature",
+ "type": "bytes"
+ }
+ ]
+ },
+ {
+ "internalType": "bytes32",
+ "name": "digest",
+ "type": "bytes32"
+ }
+ ],
+ "stateMutability": "view",
+ "type": "function",
+ "name": "validateUserOp",
+ "outputs": [
+ {
+ "internalType": "uint256",
+ "name": "validationData",
+ "type": "uint256"
+ }
+ ]
+ }
+ ],
+ "devdoc": {
+ "kind": "dev",
+ "methods": {},
+ "version": 1
+ },
+ "userdoc": {
+ "kind": "user",
+ "methods": {},
+ "version": 1
+ }
+ },
+ "settings": {
+ "remappings": [
+ ":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
+ ":account-abstraction/=lib/account-abstraction/contracts/",
+ ":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/",
+ ":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/",
+ ":forge-std/=lib/forge-std/src/",
+ ":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
+ ":openzeppelin-contracts/=lib/openzeppelin-contracts/",
+ ":openzeppelin-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
+ ":openzeppelin/=lib/openzeppelin-contracts/contracts/",
+ ":webauthn-sol/=lib/webauthn-sol/src/"
+ ],
+ "optimizer": {
+ "enabled": true,
+ "runs": 200
+ },
+ "metadata": {
+ "bytecodeHash": "ipfs"
+ },
+ "compilationTarget": {
+ "src/modules/Passkey.sol": "PasskeyModule"
+ },
+ "libraries": {}
+ },
+ "sources": {
+ "lib/account-abstraction/contracts/core/BaseAccount.sol": {
+ "keccak256": "0x5eb3253b32fd8ba8ae7b9d83da8e9924254a4d3d17a8772b41280e8572974b3c",
+ "urls": [
+ "bzz-raw://b2d23d1276f85300e2ad0c7219614a072796b4f5581fd552b0bcaa47904400d3",
+ "dweb:/ipfs/QmVWK5WZ3VskNTfCBxLqY4xBP7WGm3cRM9Qhdy56f5TfAk"
+ ],
+ "license": "GPL-3.0"
+ },
+ "lib/account-abstraction/contracts/core/Helpers.sol": {
+ "keccak256": "0x591c87519f7155d1909210276b77925ab2722a99b7b5d5649aecc36ebbdb045a",
+ "urls": [
+ "bzz-raw://69643e83f68e6a13d5075c7565bfce326673b0bd98c432033c4603ea84835746",
+ "dweb:/ipfs/QmSwSzjYyV7qudi5vvsmzHMG2Z4YJZxX51RRXXVCLaNcEU"
+ ],
+ "license": "GPL-3.0"
+ },
+ "lib/account-abstraction/contracts/interfaces/IAccount.sol": {
+ "keccak256": "0x556a0e5980de18e90b115553ed502408155ba35f58642823010d9288047bc418",
+ "urls": [
+ "bzz-raw://a0f420134b79596db8737173c7b933ae0a33059e107b6327c43aa40d4744a9e4",
+ "dweb:/ipfs/QmRo8s1AhXmEMV7uPYnbpYwU19e9Bk6jmYBJTiPx3Fo85W"
+ ],
+ "license": "GPL-3.0"
+ },
+ "lib/account-abstraction/contracts/interfaces/IAggregator.sol": {
+ "keccak256": "0x060e9ddb0152250c269ba0640dc5753834ac44cf182a2837d508c0c529cae26a",
+ "urls": [
+ "bzz-raw://20ed837bc5909c89ff1910246bf245a5dad6840aa939382e1694964eb7dbd37b",
+ "dweb:/ipfs/QmTMybRq5yyghPDDs1ZCNAVB9sSJ4WHe6Q9mejuKPTAdNP"
+ ],
+ "license": "GPL-3.0"
+ },
+ "lib/account-abstraction/contracts/interfaces/IEntryPoint.sol": {
+ "keccak256": "0x3a90bf308819ed125fa4202f880999caff8a8686633b8ddb79a30ca240d5b8f8",
+ "urls": [
+ "bzz-raw://d2d21cc92c2fdab2b58d21bc25d4cd0e8c284b922528a186b087b818d54bc6cf",
+ "dweb:/ipfs/QmT1qrfuBjsv2rmRCDn8mgPXHp94hARJwzbcDuBLDTbFWd"
+ ],
+ "license": "GPL-3.0"
+ },
+ "lib/account-abstraction/contracts/interfaces/INonceManager.sol": {
+ "keccak256": "0x509871e6c63663cdcc3eba19920fe84e991f38b289b1377ac3c3a6d9f22d7e12",
+ "urls": [
+ "bzz-raw://00fe21b4349b24c50df60e1a705179293982bd9e7a32b78d4bac9620f89e7fe2",
+ "dweb:/ipfs/QmSFFYGfUwQbVa6hASjU7YxTvgi2HkfrPr4X5oPHscHg8b"
+ ],
+ "license": "GPL-3.0"
+ },
+ "lib/account-abstraction/contracts/interfaces/IStakeManager.sol": {
+ "keccak256": "0xd227b02888cd4ac68daebcdfd992ec00f9fff66fa3b3bb16f656cd582fa3480f",
+ "urls": [
+ "bzz-raw://b389da4714a138be63704a576a482505eab2855e263b38a93706395d8d42e7c3",
+ "dweb:/ipfs/QmeeAZpdHwUXxqP8pxA7GNtoCGBmmH4FaqLLwScVKGxtxZ"
+ ],
+ "license": "GPL-3.0-only"
+ },
+ "lib/account-abstraction/contracts/interfaces/UserOperation.sol": {
+ "keccak256": "0x61374003361059087fdcf17967a7bba052badeaf5c7f0ae689166f8aafd3a45c",
+ "urls": [
+ "bzz-raw://6ff83c59432e733bf6304dda27cd4b0f34401917dd535e2669cc842d2d26568c",
+ "dweb:/ipfs/QmPJbHU5TAjHqUTZzAcicEeG2nknmwCN43L4EW9LHbknTN"
+ ],
+ "license": "GPL-3.0"
+ },
+ "lib/openzeppelin-contracts/contracts/interfaces/IERC1271.sol": {
+ "keccak256": "0x0705a4b1b86d7b0bd8432118f226ba139c44b9dcaba0a6eafba2dd7d0639c544",
+ "urls": [
+ "bzz-raw://c45b821ef9e882e57c256697a152e108f0f2ad6997609af8904cae99c9bd422e",
+ "dweb:/ipfs/QmRKCJW6jjzR5UYZcLpGnhEJ75UVbH6EHkEa49sWx2SKng"
+ ],
+ "license": "MIT"
+ },
+ "lib/openzeppelin-contracts/contracts/utils/Create2.sol": {
+ "keccak256": "0x6e00f269073ffc4350e56b7e8153c9092d5f70bfba423299990514183101ef89",
+ "urls": [
+ "bzz-raw://8dc5ff5c204604be7594ce2fa9100a0638f22b5aada6ebec1e165b0f50a48447",
+ "dweb:/ipfs/QmfH7uWphPrq8jqwGvyh4pFnLEgEPmLwyGV2Bvx1Acjggh"
+ ],
+ "license": "MIT"
+ },
+ "src/interfaces/IModule.sol": {
+ "keccak256": "0x1de63b5efcf162b4486e094fd0fbb74afc320fdc8b52e2f10bfd4ed121c26d43",
+ "urls": [
+ "bzz-raw://c50fdd7a1d76e7f0c066abcb36d92842c5174463b2841080ef196102c52df964",
+ "dweb:/ipfs/QmdcJdq3A9tgVWKQ5FrCuBjHmM3vyrxhApueVwRiJXYAsN"
+ ],
+ "license": "Apache"
+ },
+ "src/interfaces/IWallet.sol": {
+ "keccak256": "0xbb9abebf75ef11e45750a4652f1ab7448c39f28425b2b08cf273a80575f9e3be",
+ "urls": [
+ "bzz-raw://361727344a05d34a09d643e11d39001fe9b013e499a52fe5e35906fd681df4f5",
+ "dweb:/ipfs/QmUC8AxxjupBdaS4c5bGPXp2Y7YcUkD2fX1UWYh6qnpyaq"
+ ],
+ "license": "Apache"
+ },
+ "src/libraries/Base64.sol": {
+ "keccak256": "0x0d721af3814ddfbb2e21b718aa1ccebae60770e4e101c8901bf40cdc2e61127c",
+ "urls": [
+ "bzz-raw://a9a9be2e63d9b06e4ea596853c28b4d07c49804f3d14bbb752624813942290d0",
+ "dweb:/ipfs/QmfZRpbZ1hrNrwdWhUpFZ4XwE7Cg7Z5cZeCz2agTrPQwYr"
+ ],
+ "license": "MIT"
+ },
+ "src/libraries/Base64Url.sol": {
+ "keccak256": "0x6e409772dd9811bbc06212a4d76e0c49872b3fcccf6deded83d5cc45fe70d838",
+ "urls": [
+ "bzz-raw://c938bc1c269b33c9cc65e3d6351e07635a1ef177653bbebde80bad22a3c688d9",
+ "dweb:/ipfs/QmZ4V7Y7cXUHFwJxvhpBYXzUKwBdnLMhq6X1LupTCEgMRN"
+ ],
+ "license": "Apache-2.0"
+ },
+ "src/libraries/FCL_ecdsa.sol": {
+ "keccak256": "0xbf7cdea8f1d4b285764c60698899a91b3091fd9e38f7762979a6af4f6a38effd",
+ "urls": [
+ "bzz-raw://b2ace910c8f9c33673b0b3c69658abd5043f3b189b348e69b0198d8f87661af7",
+ "dweb:/ipfs/QmcLhDNEV5qHy8UfGKLM5yaj3U4Tvjyq4FcZFzRRapZwnz"
+ ],
+ "license": "MIT"
+ },
+ "src/libraries/FCL_elliptic.sol": {
+ "keccak256": "0x87b36af497eb28dbcf8efcc9f35cdb961427cd44341e62328d585c8f5b1d4de6",
+ "urls": [
+ "bzz-raw://c82c4d5b527936f48d1bb1c8cc424ca9318fcf38c2739fe09759ea9f518b5fc3",
+ "dweb:/ipfs/QmVxXHGUyAtZZxRzkfoq5u7Tp1A8MPTQ5Lcd6qrZJg6xDk"
+ ],
+ "license": "MIT"
+ },
+ "src/libraries/LibString.sol": {
+ "keccak256": "0xff57c212b054277cc248b58a2f687a2e33e6eb18fe417682ba101dce6dd85029",
+ "urls": [
+ "bzz-raw://36b4fcc9d8f1eec0d9da4c0ab770875aa9a9a82ff06c4849a987a6acf2e7c0e0",
+ "dweb:/ipfs/QmSp9YiVtBSm6RGnWD2arKirRj855J7mRqbHaB6gF8ikqj"
+ ],
+ "license": "MIT"
+ },
+ "src/libraries/WebAuthn.sol": {
+ "keccak256": "0x27cf9ccfc9bf0b34b442804834174bc847aa815fa8ed20c4eb6f544f0403ac86",
+ "urls": [
+ "bzz-raw://cf63d38ba0684048b263e736fdd3c6eba7d0493ccbad3470f6c3084a8c8fdcd7",
+ "dweb:/ipfs/QmTBPQg2M7tvdoKWgQ91KsJQe7WCJCPWuEKEDSDGdETCzJ"
+ ],
+ "license": "MIT"
+ },
+ "src/modules/Passkey.sol": {
+ "keccak256": "0x76af48fb4013306b5a1f6a236ee8046387f6ba1b3c0d194797636afa7e317ca9",
+ "urls": [
+ "bzz-raw://73ea00fe1b7d9a29eb905bac437fc0d7119ba55a59e7c44d9443aebac14362ef",
+ "dweb:/ipfs/Qma2PEo7LsEfiv8HWFZJn5XSnfNUjHgaZaWD4mNVYRMGRL"
+ ],
+ "license": "Apache"
+ }
+ },
+ "version": 1
+ },
+ "ast": {
+ "absolutePath": "src/modules/Passkey.sol",
+ "id": 58759,
+ "exportedSymbols": {
+ "Base64Url": [
+ 55209
+ ],
+ "BaseAccount": [
+ 141
+ ],
+ "Create2": [
+ 51885
+ ],
+ "IAccount": [
+ 3182
+ ],
+ "IAggregator": [
+ 3216
+ ],
+ "IERC1271": [
+ 50642
+ ],
+ "IEntryPoint": [
+ 3420
+ ],
+ "IModule": [
+ 55004
+ ],
+ "INonceManager": [
+ 3439
+ ],
+ "IStakeManager": [
+ 3579
+ ],
+ "IWallet": [
+ 55044
+ ],
+ "PasskeyModule": [
+ 58758
+ ],
+ "UserOperation": [
+ 3606
+ ],
+ "UserOperationLib": [
+ 3776
+ ],
+ "ValidationData": [
+ 2374
+ ],
+ "WebAuthn": [
+ 58497
+ ],
+ "_intersectTimeRange": [
+ 2518
+ ],
+ "_packValidationData": [
+ 2555,
+ 2593
+ ],
+ "_parseValidationData": [
+ 2433
+ ],
+ "calldataKeccak": [
+ 2603
+ ]
+ },
+ "nodeType": "SourceUnit",
+ "src": "35:2573:84",
+ "nodes": [
+ {
+ "id": 58499,
+ "nodeType": "PragmaDirective",
+ "src": "35:23:84",
+ "nodes": [],
+ "literals": [
+ "solidity",
+ "^",
+ "0.8",
+ ".0"
+ ]
+ },
+ {
+ "id": 58500,
+ "nodeType": "ImportDirective",
+ "src": "60:40:84",
+ "nodes": [],
+ "absolutePath": "lib/openzeppelin-contracts/contracts/utils/Create2.sol",
+ "file": "openzeppelin/utils/Create2.sol",
+ "nameLocation": "-1:-1:-1",
+ "scope": 58759,
+ "sourceUnit": 51886,
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "id": 58501,
+ "nodeType": "ImportDirective",
+ "src": "102:35:84",
+ "nodes": [],
+ "absolutePath": "src/interfaces/IModule.sol",
+ "file": "../interfaces/IModule.sol",
+ "nameLocation": "-1:-1:-1",
+ "scope": 58759,
+ "sourceUnit": 55005,
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "id": 58502,
+ "nodeType": "ImportDirective",
+ "src": "138:35:84",
+ "nodes": [],
+ "absolutePath": "src/interfaces/IWallet.sol",
+ "file": "../interfaces/IWallet.sol",
+ "nameLocation": "-1:-1:-1",
+ "scope": 58759,
+ "sourceUnit": 55045,
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "id": 58503,
+ "nodeType": "ImportDirective",
+ "src": "174:36:84",
+ "nodes": [],
+ "absolutePath": "src/libraries/Base64Url.sol",
+ "file": "../libraries/Base64Url.sol",
+ "nameLocation": "-1:-1:-1",
+ "scope": 58759,
+ "sourceUnit": 55210,
+ "symbolAliases": [],
+ "unitAlias": ""
+ },
+ {
+ "id": 58505,
+ "nodeType": "ImportDirective",
+ "src": "212:51:84",
+ "nodes": [],
+ "absolutePath": "src/libraries/WebAuthn.sol",
+ "file": "../libraries/WebAuthn.sol",
+ "nameLocation": "-1:-1:-1",
+ "scope": 58759,
+ "sourceUnit": 58498,
+ "symbolAliases": [
+ {
+ "foreign": {
+ "id": 58504,
+ "name": "WebAuthn",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 58497,
+ "src": "220:8:84",
+ "typeDescriptions": {}
+ },
+ "nameLocation": "-1:-1:-1"
+ }
+ ],
+ "unitAlias": ""
+ },
+ {
+ "id": 58758,
+ "nodeType": "ContractDefinition",
+ "src": "265:2342:84",
+ "nodes": [
+ {
+ "id": 58512,
+ "nodeType": "StructDefinition",
+ "src": "305:62:84",
+ "nodes": [],
+ "canonicalName": "PasskeyModule.PublicKey",
+ "members": [
+ {
+ "constant": false,
+ "id": 58509,
+ "mutability": "mutable",
+ "name": "x",
+ "nameLocation": "340:1:84",
+ "nodeType": "VariableDeclaration",
+ "scope": 58512,
+ "src": "332:9:84",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 58508,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "332:7:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 58511,
+ "mutability": "mutable",
+ "name": "y",
+ "nameLocation": "359:1:84",
+ "nodeType": "VariableDeclaration",
+ "scope": 58512,
+ "src": "351:9:84",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 58510,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "351:7:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "name": "PublicKey",
+ "nameLocation": "312:9:84",
+ "scope": 58758,
+ "visibility": "public"
+ },
+ {
+ "id": 58519,
+ "nodeType": "VariableDeclaration",
+ "src": "373:69:84",
+ "nodes": [],
+ "constant": false,
+ "mutability": "mutable",
+ "name": "_publicKeys",
+ "nameLocation": "431:11:84",
+ "scope": 58758,
+ "stateVariable": true,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_struct$_PublicKey_$58512_storage_$_$",
+ "typeString": "mapping(address => mapping(bytes32 => struct PasskeyModule.PublicKey))"
+ },
+ "typeName": {
+ "id": 58518,
+ "keyName": "",
+ "keyNameLocation": "-1:-1:-1",
+ "keyType": {
+ "id": 58513,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "381:7:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "373:49:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_struct$_PublicKey_$58512_storage_$_$",
+ "typeString": "mapping(address => mapping(bytes32 => struct PasskeyModule.PublicKey))"
+ },
+ "valueName": "",
+ "valueNameLocation": "-1:-1:-1",
+ "valueType": {
+ "id": 58517,
+ "keyName": "",
+ "keyNameLocation": "-1:-1:-1",
+ "keyType": {
+ "id": 58514,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "400:7:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "nodeType": "Mapping",
+ "src": "392:29:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PublicKey_$58512_storage_$",
+ "typeString": "mapping(bytes32 => struct PasskeyModule.PublicKey)"
+ },
+ "valueName": "",
+ "valueNameLocation": "-1:-1:-1",
+ "valueType": {
+ "id": 58516,
+ "nodeType": "UserDefinedTypeName",
+ "pathNode": {
+ "id": 58515,
+ "name": "PublicKey",
+ "nameLocations": [
+ "411:9:84"
+ ],
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 58512,
+ "src": "411:9:84"
+ },
+ "referencedDeclaration": 58512,
+ "src": "411:9:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_PublicKey_$58512_storage_ptr",
+ "typeString": "struct PasskeyModule.PublicKey"
+ }
+ }
+ }
+ },
+ "visibility": "private"
+ },
+ {
+ "id": 58529,
+ "nodeType": "EventDefinition",
+ "src": "449:91:84",
+ "nodes": [],
+ "anonymous": false,
+ "eventSelector": "e6813de69096f2d13f196130a730ba346707680ee5fabe9a6001c48b2e2a395a",
+ "name": "PasskeyRegistered",
+ "nameLocation": "455:17:84",
+ "parameters": {
+ "id": 58528,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 58521,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "user",
+ "nameLocation": "489:4:84",
+ "nodeType": "VariableDeclaration",
+ "scope": 58529,
+ "src": "473:20:84",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 58520,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "473:7:84",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 58523,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "keyId",
+ "nameLocation": "511:5:84",
+ "nodeType": "VariableDeclaration",
+ "scope": 58529,
+ "src": "495:21:84",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 58522,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "495:7:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 58525,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "x",
+ "nameLocation": "526:1:84",
+ "nodeType": "VariableDeclaration",
+ "scope": 58529,
+ "src": "518:9:84",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 58524,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "518:7:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 58527,
+ "indexed": false,
+ "mutability": "mutable",
+ "name": "y",
+ "nameLocation": "537:1:84",
+ "nodeType": "VariableDeclaration",
+ "scope": 58529,
+ "src": "529:9:84",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 58526,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "529:7:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "472:67:84"
+ }
+ },
+ {
+ "id": 58535,
+ "nodeType": "EventDefinition",
+ "src": "545:66:84",
+ "nodes": [],
+ "anonymous": false,
+ "eventSelector": "2d7aa68d7c6e29815818dcd0deea0f49ceac033240ac3b69b6a6734c23e5843d",
+ "name": "PasskeyRemoved",
+ "nameLocation": "551:14:84",
+ "parameters": {
+ "id": 58534,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 58531,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "user",
+ "nameLocation": "582:4:84",
+ "nodeType": "VariableDeclaration",
+ "scope": 58535,
+ "src": "566:20:84",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 58530,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "566:7:84",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 58533,
+ "indexed": true,
+ "mutability": "mutable",
+ "name": "keyId",
+ "nameLocation": "604:5:84",
+ "nodeType": "VariableDeclaration",
+ "scope": 58535,
+ "src": "588:21:84",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 58532,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "588:7:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "565:45:84"
+ }
+ },
+ {
+ "id": 58565,
+ "nodeType": "FunctionDefinition",
+ "src": "617:196:84",
+ "nodes": [],
+ "body": {
+ "id": 58564,
+ "nodeType": "Block",
+ "src": "690:123:84",
+ "nodes": [],
+ "statements": [
+ {
+ "expression": {
+ "id": 58554,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftHandSide": {
+ "baseExpression": {
+ "baseExpression": {
+ "id": 58544,
+ "name": "_publicKeys",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 58519,
+ "src": "700:11:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_struct$_PublicKey_$58512_storage_$_$",
+ "typeString": "mapping(address => mapping(bytes32 => struct PasskeyModule.PublicKey storage ref))"
+ }
+ },
+ "id": 58548,
+ "indexExpression": {
+ "expression": {
+ "id": 58545,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "712:3:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 58546,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberLocation": "716:6:84",
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "src": "712:10:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "700:23:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PublicKey_$58512_storage_$",
+ "typeString": "mapping(bytes32 => struct PasskeyModule.PublicKey storage ref)"
+ }
+ },
+ "id": 58549,
+ "indexExpression": {
+ "id": 58547,
+ "name": "keyId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 58537,
+ "src": "724:5:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "700:30:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_PublicKey_$58512_storage",
+ "typeString": "struct PasskeyModule.PublicKey storage ref"
+ }
+ },
+ "nodeType": "Assignment",
+ "operator": "=",
+ "rightHandSide": {
+ "arguments": [
+ {
+ "id": 58551,
+ "name": "x",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 58539,
+ "src": "743:1:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "id": 58552,
+ "name": "y",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 58541,
+ "src": "746:1:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 58550,
+ "name": "PublicKey",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 58512,
+ "src": "733:9:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_struct$_PublicKey_$58512_storage_ptr_$",
+ "typeString": "type(struct PasskeyModule.PublicKey storage pointer)"
+ }
+ },
+ "id": 58553,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "structConstructorCall",
+ "lValueRequested": false,
+ "nameLocations": [],
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "733:15:84",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_PublicKey_$58512_memory_ptr",
+ "typeString": "struct PasskeyModule.PublicKey memory"
+ }
+ },
+ "src": "700:48:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_PublicKey_$58512_storage",
+ "typeString": "struct PasskeyModule.PublicKey storage ref"
+ }
+ },
+ "id": 58555,
+ "nodeType": "ExpressionStatement",
+ "src": "700:48:84"
+ },
+ {
+ "eventCall": {
+ "arguments": [
+ {
+ "expression": {
+ "id": 58557,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "782:3:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 58558,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberLocation": "786:6:84",
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "src": "782:10:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 58559,
+ "name": "keyId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 58537,
+ "src": "794:5:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ {
+ "id": 58560,
+ "name": "x",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 58539,
+ "src": "801:1:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "id": 58561,
+ "name": "y",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 58541,
+ "src": "804:1:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "id": 58556,
+ "name": "PasskeyRegistered",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 58529,
+ "src": "764:17:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$_t_uint256_$_t_uint256_$returns$__$",
+ "typeString": "function (address,bytes32,uint256,uint256)"
+ }
+ },
+ "id": 58562,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "nameLocations": [],
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "764:42:84",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 58563,
+ "nodeType": "EmitStatement",
+ "src": "759:47:84"
+ }
+ ]
+ },
+ "functionSelector": "3082ab5b",
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "registerPublicKey",
+ "nameLocation": "626:17:84",
+ "parameters": {
+ "id": 58542,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 58537,
+ "mutability": "mutable",
+ "name": "keyId",
+ "nameLocation": "652:5:84",
+ "nodeType": "VariableDeclaration",
+ "scope": 58565,
+ "src": "644:13:84",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 58536,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "644:7:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 58539,
+ "mutability": "mutable",
+ "name": "x",
+ "nameLocation": "667:1:84",
+ "nodeType": "VariableDeclaration",
+ "scope": 58565,
+ "src": "659:9:84",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 58538,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "659:7:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 58541,
+ "mutability": "mutable",
+ "name": "y",
+ "nameLocation": "678:1:84",
+ "nodeType": "VariableDeclaration",
+ "scope": 58565,
+ "src": "670:9:84",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 58540,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "670:7:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "643:37:84"
+ },
+ "returnParameters": {
+ "id": 58543,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "690:0:84"
+ },
+ "scope": 58758,
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "id": 58585,
+ "nodeType": "FunctionDefinition",
+ "src": "819:152:84",
+ "nodes": [],
+ "body": {
+ "id": 58584,
+ "nodeType": "Block",
+ "src": "868:103:84",
+ "nodes": [],
+ "statements": [
+ {
+ "expression": {
+ "id": 58576,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "UnaryOperation",
+ "operator": "delete",
+ "prefix": true,
+ "src": "878:37:84",
+ "subExpression": {
+ "baseExpression": {
+ "baseExpression": {
+ "id": 58570,
+ "name": "_publicKeys",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 58519,
+ "src": "885:11:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_struct$_PublicKey_$58512_storage_$_$",
+ "typeString": "mapping(address => mapping(bytes32 => struct PasskeyModule.PublicKey storage ref))"
+ }
+ },
+ "id": 58573,
+ "indexExpression": {
+ "expression": {
+ "id": 58571,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "897:3:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 58572,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberLocation": "901:6:84",
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "src": "897:10:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "885:23:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PublicKey_$58512_storage_$",
+ "typeString": "mapping(bytes32 => struct PasskeyModule.PublicKey storage ref)"
+ }
+ },
+ "id": 58575,
+ "indexExpression": {
+ "id": 58574,
+ "name": "keyId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 58567,
+ "src": "909:5:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": true,
+ "nodeType": "IndexAccess",
+ "src": "885:30:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_PublicKey_$58512_storage",
+ "typeString": "struct PasskeyModule.PublicKey storage ref"
+ }
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 58577,
+ "nodeType": "ExpressionStatement",
+ "src": "878:37:84"
+ },
+ {
+ "eventCall": {
+ "arguments": [
+ {
+ "expression": {
+ "id": 58579,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "946:3:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 58580,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberLocation": "950:6:84",
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "src": "946:10:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ {
+ "id": 58581,
+ "name": "keyId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 58567,
+ "src": "958:5:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ ],
+ "id": 58578,
+ "name": "PasskeyRemoved",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 58535,
+ "src": "931:14:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_bytes32_$returns$__$",
+ "typeString": "function (address,bytes32)"
+ }
+ },
+ "id": 58582,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "nameLocations": [],
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "931:33:84",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$__$",
+ "typeString": "tuple()"
+ }
+ },
+ "id": 58583,
+ "nodeType": "EmitStatement",
+ "src": "926:38:84"
+ }
+ ]
+ },
+ "functionSelector": "8f3285f5",
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "removePublicKey",
+ "nameLocation": "828:15:84",
+ "parameters": {
+ "id": 58568,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 58567,
+ "mutability": "mutable",
+ "name": "keyId",
+ "nameLocation": "852:5:84",
+ "nodeType": "VariableDeclaration",
+ "scope": 58585,
+ "src": "844:13:84",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 58566,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "844:7:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "843:15:84"
+ },
+ "returnParameters": {
+ "id": 58569,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "868:0:84"
+ },
+ "scope": 58758,
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "id": 58683,
+ "nodeType": "FunctionDefinition",
+ "src": "977:780:84",
+ "nodes": [],
+ "body": {
+ "id": 58682,
+ "nodeType": "Block",
+ "src": "1111:646:84",
+ "nodes": [],
+ "statements": [
+ {
+ "assignments": [
+ 58595
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 58595,
+ "mutability": "mutable",
+ "name": "module",
+ "nameLocation": "1129:6:84",
+ "nodeType": "VariableDeclaration",
+ "scope": 58682,
+ "src": "1121:14:84",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 58594,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1121:7:84",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 58605,
+ "initialValue": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "baseExpression": {
+ "id": 58600,
+ "name": "signature",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 58589,
+ "src": "1154:9:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_calldata_ptr",
+ "typeString": "bytes calldata"
+ }
+ },
+ "endExpression": {
+ "hexValue": "3230",
+ "id": 58601,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1165:2:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_20_by_1",
+ "typeString": "int_const 20"
+ },
+ "value": "20"
+ },
+ "id": 58602,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexRangeAccess",
+ "src": "1154:14:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_calldata_ptr_slice",
+ "typeString": "bytes calldata slice"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes_calldata_ptr_slice",
+ "typeString": "bytes calldata slice"
+ }
+ ],
+ "id": 58599,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "1146:7:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_bytes20_$",
+ "typeString": "type(bytes20)"
+ },
+ "typeName": {
+ "id": 58598,
+ "name": "bytes20",
+ "nodeType": "ElementaryTypeName",
+ "src": "1146:7:84",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 58603,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "nameLocations": [],
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1146:23:84",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes20",
+ "typeString": "bytes20"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes20",
+ "typeString": "bytes20"
+ }
+ ],
+ "id": 58597,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "1138:7:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 58596,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1138:7:84",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 58604,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "nameLocations": [],
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1138:32:84",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "1121:49:84"
+ },
+ {
+ "condition": {
+ "commonType": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "id": 58611,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "id": 58606,
+ "name": "module",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 58595,
+ "src": "1184:6:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "!=",
+ "rightExpression": {
+ "arguments": [
+ {
+ "id": 58609,
+ "name": "this",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -28,
+ "src": "1202:4:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_PasskeyModule_$58758",
+ "typeString": "contract PasskeyModule"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_contract$_PasskeyModule_$58758",
+ "typeString": "contract PasskeyModule"
+ }
+ ],
+ "id": 58608,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "1194:7:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_address_$",
+ "typeString": "type(address)"
+ },
+ "typeName": {
+ "id": 58607,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "1194:7:84",
+ "typeDescriptions": {}
+ }
+ },
+ "id": 58610,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "typeConversion",
+ "lValueRequested": false,
+ "nameLocations": [],
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1194:13:84",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "src": "1184:23:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 58615,
+ "nodeType": "IfStatement",
+ "src": "1180:66:84",
+ "trueBody": {
+ "id": 58614,
+ "nodeType": "Block",
+ "src": "1209:37:84",
+ "statements": [
+ {
+ "expression": {
+ "hexValue": "66616c7365",
+ "id": 58612,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "bool",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1230:5:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "value": "false"
+ },
+ "functionReturnParameters": 58593,
+ "id": 58613,
+ "nodeType": "Return",
+ "src": "1223:12:84"
+ }
+ ]
+ }
+ },
+ {
+ "assignments": [
+ 58617,
+ 58619
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 58617,
+ "mutability": "mutable",
+ "name": "keyId",
+ "nameLocation": "1265:5:84",
+ "nodeType": "VariableDeclaration",
+ "scope": 58682,
+ "src": "1257:13:84",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 58616,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "1257:7:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 58619,
+ "mutability": "mutable",
+ "name": "passkeySignature",
+ "nameLocation": "1285:16:84",
+ "nodeType": "VariableDeclaration",
+ "scope": 58682,
+ "src": "1272:29:84",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 58618,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "1272:5:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 58631,
+ "initialValue": {
+ "arguments": [
+ {
+ "baseExpression": {
+ "id": 58622,
+ "name": "signature",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 58589,
+ "src": "1316:9:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_calldata_ptr",
+ "typeString": "bytes calldata"
+ }
+ },
+ "id": 58624,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexRangeAccess",
+ "src": "1316:14:84",
+ "startExpression": {
+ "hexValue": "3230",
+ "id": 58623,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1326:2:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_20_by_1",
+ "typeString": "int_const 20"
+ },
+ "value": "20"
+ },
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_calldata_ptr_slice",
+ "typeString": "bytes calldata slice"
+ }
+ },
+ {
+ "components": [
+ {
+ "id": 58626,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "1333:7:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_bytes32_$",
+ "typeString": "type(bytes32)"
+ },
+ "typeName": {
+ "id": 58625,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "1333:7:84",
+ "typeDescriptions": {}
+ }
+ },
+ {
+ "id": 58628,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "ElementaryTypeNameExpression",
+ "src": "1342:5:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
+ "typeString": "type(bytes storage pointer)"
+ },
+ "typeName": {
+ "id": 58627,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "1342:5:84",
+ "typeDescriptions": {}
+ }
+ }
+ ],
+ "id": 58629,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "1332:16:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_type$_t_bytes32_$_$_t_type$_t_bytes_storage_ptr_$_$",
+ "typeString": "tuple(type(bytes32),type(bytes storage pointer))"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes_calldata_ptr_slice",
+ "typeString": "bytes calldata slice"
+ },
+ {
+ "typeIdentifier": "t_tuple$_t_type$_t_bytes32_$_$_t_type$_t_bytes_storage_ptr_$_$",
+ "typeString": "tuple(type(bytes32),type(bytes storage pointer))"
+ }
+ ],
+ "expression": {
+ "id": 58620,
+ "name": "abi",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -1,
+ "src": "1305:3:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_abi",
+ "typeString": "abi"
+ }
+ },
+ "id": 58621,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberLocation": "1309:6:84",
+ "memberName": "decode",
+ "nodeType": "MemberAccess",
+ "src": "1305:10:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
+ "typeString": "function () pure"
+ }
+ },
+ "id": 58630,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "nameLocations": [],
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1305:44:84",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_tuple$_t_bytes32_$_t_bytes_memory_ptr_$",
+ "typeString": "tuple(bytes32,bytes memory)"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "1256:93:84"
+ },
+ {
+ "assignments": [
+ 58634
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 58634,
+ "mutability": "mutable",
+ "name": "publicKey",
+ "nameLocation": "1376:9:84",
+ "nodeType": "VariableDeclaration",
+ "scope": 58682,
+ "src": "1359:26:84",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_PublicKey_$58512_memory_ptr",
+ "typeString": "struct PasskeyModule.PublicKey"
+ },
+ "typeName": {
+ "id": 58633,
+ "nodeType": "UserDefinedTypeName",
+ "pathNode": {
+ "id": 58632,
+ "name": "PublicKey",
+ "nameLocations": [
+ "1359:9:84"
+ ],
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 58512,
+ "src": "1359:9:84"
+ },
+ "referencedDeclaration": 58512,
+ "src": "1359:9:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_PublicKey_$58512_storage_ptr",
+ "typeString": "struct PasskeyModule.PublicKey"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 58641,
+ "initialValue": {
+ "baseExpression": {
+ "baseExpression": {
+ "id": 58635,
+ "name": "_publicKeys",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 58519,
+ "src": "1388:11:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_struct$_PublicKey_$58512_storage_$_$",
+ "typeString": "mapping(address => mapping(bytes32 => struct PasskeyModule.PublicKey storage ref))"
+ }
+ },
+ "id": 58638,
+ "indexExpression": {
+ "expression": {
+ "id": 58636,
+ "name": "msg",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -15,
+ "src": "1400:3:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_message",
+ "typeString": "msg"
+ }
+ },
+ "id": 58637,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberLocation": "1404:6:84",
+ "memberName": "sender",
+ "nodeType": "MemberAccess",
+ "src": "1400:10:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "1388:23:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PublicKey_$58512_storage_$",
+ "typeString": "mapping(bytes32 => struct PasskeyModule.PublicKey storage ref)"
+ }
+ },
+ "id": 58640,
+ "indexExpression": {
+ "id": 58639,
+ "name": "keyId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 58617,
+ "src": "1412:5:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "1388:30:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_PublicKey_$58512_storage",
+ "typeString": "struct PasskeyModule.PublicKey storage ref"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "1359:59:84"
+ },
+ {
+ "condition": {
+ "commonType": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "id": 58650,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 58645,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "expression": {
+ "id": 58642,
+ "name": "publicKey",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 58634,
+ "src": "1441:9:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_PublicKey_$58512_memory_ptr",
+ "typeString": "struct PasskeyModule.PublicKey memory"
+ }
+ },
+ "id": 58643,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberLocation": "1451:1:84",
+ "memberName": "x",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 58509,
+ "src": "1441:11:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "hexValue": "30",
+ "id": 58644,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1456:1:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "1441:16:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "||",
+ "rightExpression": {
+ "commonType": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "id": 58649,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "leftExpression": {
+ "expression": {
+ "id": 58646,
+ "name": "publicKey",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 58634,
+ "src": "1461:9:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_PublicKey_$58512_memory_ptr",
+ "typeString": "struct PasskeyModule.PublicKey memory"
+ }
+ },
+ "id": 58647,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberLocation": "1471:1:84",
+ "memberName": "y",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 58511,
+ "src": "1461:11:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "nodeType": "BinaryOperation",
+ "operator": "==",
+ "rightExpression": {
+ "hexValue": "30",
+ "id": 58648,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1476:1:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "src": "1461:16:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "src": "1441:36:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 58654,
+ "nodeType": "IfStatement",
+ "src": "1437:79:84",
+ "trueBody": {
+ "id": 58653,
+ "nodeType": "Block",
+ "src": "1479:37:84",
+ "statements": [
+ {
+ "expression": {
+ "hexValue": "66616c7365",
+ "id": 58651,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "bool",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1500:5:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "value": "false"
+ },
+ "functionReturnParameters": 58593,
+ "id": 58652,
+ "nodeType": "Return",
+ "src": "1493:12:84"
+ }
+ ]
+ }
+ },
+ {
+ "assignments": [
+ 58659
+ ],
+ "declarations": [
+ {
+ "constant": false,
+ "id": 58659,
+ "mutability": "mutable",
+ "name": "auth",
+ "nameLocation": "1555:4:84",
+ "nodeType": "VariableDeclaration",
+ "scope": 58682,
+ "src": "1526:33:84",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WebAuthnAuth_$58263_memory_ptr",
+ "typeString": "struct WebAuthn.WebAuthnAuth"
+ },
+ "typeName": {
+ "id": 58658,
+ "nodeType": "UserDefinedTypeName",
+ "pathNode": {
+ "id": 58657,
+ "name": "WebAuthn.WebAuthnAuth",
+ "nameLocations": [
+ "1526:8:84",
+ "1535:12:84"
+ ],
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 58263,
+ "src": "1526:21:84"
+ },
+ "referencedDeclaration": 58263,
+ "src": "1526:21:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WebAuthnAuth_$58263_storage_ptr",
+ "typeString": "struct WebAuthn.WebAuthnAuth"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "id": 58667,
+ "initialValue": {
+ "arguments": [
+ {
+ "id": 58662,
+ "name": "passkeySignature",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 58619,
+ "src": "1573:16:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ {
+ "components": [
+ {
+ "expression": {
+ "id": 58663,
+ "name": "WebAuthn",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 58497,
+ "src": "1592:8:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_WebAuthn_$58497_$",
+ "typeString": "type(library WebAuthn)"
+ }
+ },
+ "id": 58664,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberLocation": "1601:12:84",
+ "memberName": "WebAuthnAuth",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 58263,
+ "src": "1592:21:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_struct$_WebAuthnAuth_$58263_storage_ptr_$",
+ "typeString": "type(struct WebAuthn.WebAuthnAuth storage pointer)"
+ }
+ }
+ ],
+ "id": 58665,
+ "isConstant": false,
+ "isInlineArray": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "TupleExpression",
+ "src": "1591:23:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_struct$_WebAuthnAuth_$58263_storage_ptr_$",
+ "typeString": "type(struct WebAuthn.WebAuthnAuth storage pointer)"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ },
+ {
+ "typeIdentifier": "t_type$_t_struct$_WebAuthnAuth_$58263_storage_ptr_$",
+ "typeString": "type(struct WebAuthn.WebAuthnAuth storage pointer)"
+ }
+ ],
+ "expression": {
+ "id": 58660,
+ "name": "abi",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -1,
+ "src": "1562:3:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_abi",
+ "typeString": "abi"
+ }
+ },
+ "id": 58661,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberLocation": "1566:6:84",
+ "memberName": "decode",
+ "nodeType": "MemberAccess",
+ "src": "1562:10:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_abidecode_pure$__$returns$__$",
+ "typeString": "function () pure"
+ }
+ },
+ "id": 58666,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "nameLocations": [],
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1562:53:84",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WebAuthnAuth_$58263_memory_ptr",
+ "typeString": "struct WebAuthn.WebAuthnAuth memory"
+ }
+ },
+ "nodeType": "VariableDeclarationStatement",
+ "src": "1526:89:84"
+ },
+ {
+ "expression": {
+ "arguments": [
+ {
+ "arguments": [
+ {
+ "id": 58672,
+ "name": "digest",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 58587,
+ "src": "1671:6:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ ],
+ "expression": {
+ "id": 58670,
+ "name": "abi",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -1,
+ "src": "1660:3:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_magic_abi",
+ "typeString": "abi"
+ }
+ },
+ "id": 58671,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberLocation": "1664:6:84",
+ "memberName": "encode",
+ "nodeType": "MemberAccess",
+ "src": "1660:10:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
+ "typeString": "function () pure returns (bytes memory)"
+ }
+ },
+ "id": 58673,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "nameLocations": [],
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1660:18:84",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ }
+ },
+ {
+ "hexValue": "66616c7365",
+ "id": 58674,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "bool",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "1691:5:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "value": "false"
+ },
+ {
+ "id": 58675,
+ "name": "auth",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 58659,
+ "src": "1712:4:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_WebAuthnAuth_$58263_memory_ptr",
+ "typeString": "struct WebAuthn.WebAuthnAuth memory"
+ }
+ },
+ {
+ "expression": {
+ "id": 58676,
+ "name": "publicKey",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 58634,
+ "src": "1721:9:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_PublicKey_$58512_memory_ptr",
+ "typeString": "struct PasskeyModule.PublicKey memory"
+ }
+ },
+ "id": 58677,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberLocation": "1731:1:84",
+ "memberName": "x",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 58509,
+ "src": "1721:11:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ {
+ "expression": {
+ "id": 58678,
+ "name": "publicKey",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 58634,
+ "src": "1737:9:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_PublicKey_$58512_memory_ptr",
+ "typeString": "struct PasskeyModule.PublicKey memory"
+ }
+ },
+ "id": 58679,
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberLocation": "1747:1:84",
+ "memberName": "y",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 58511,
+ "src": "1737:11:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes_memory_ptr",
+ "typeString": "bytes memory"
+ },
+ {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ {
+ "typeIdentifier": "t_struct$_WebAuthnAuth_$58263_memory_ptr",
+ "typeString": "struct WebAuthn.WebAuthnAuth memory"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ ],
+ "expression": {
+ "id": 58668,
+ "name": "WebAuthn",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 58497,
+ "src": "1632:8:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_type$_t_contract$_WebAuthn_$58497_$",
+ "typeString": "type(library WebAuthn)"
+ }
+ },
+ "id": 58669,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberLocation": "1641:6:84",
+ "memberName": "verify",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 58496,
+ "src": "1632:15:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_bytes_memory_ptr_$_t_bool_$_t_struct$_WebAuthnAuth_$58263_memory_ptr_$_t_uint256_$_t_uint256_$returns$_t_bool_$",
+ "typeString": "function (bytes memory,bool,struct WebAuthn.WebAuthnAuth memory,uint256,uint256) view returns (bool)"
+ }
+ },
+ "id": 58680,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "nameLocations": [
+ "1649:9:84",
+ "1680:9:84",
+ "1698:12:84",
+ "1718:1:84",
+ "1734:1:84"
+ ],
+ "names": [
+ "challenge",
+ "requireUV",
+ "webAuthnAuth",
+ "x",
+ "y"
+ ],
+ "nodeType": "FunctionCall",
+ "src": "1632:118:84",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "functionReturnParameters": 58593,
+ "id": 58681,
+ "nodeType": "Return",
+ "src": "1625:125:84"
+ }
+ ]
+ },
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "_validatePasskeySignature",
+ "nameLocation": "986:25:84",
+ "parameters": {
+ "id": 58590,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 58587,
+ "mutability": "mutable",
+ "name": "digest",
+ "nameLocation": "1020:6:84",
+ "nodeType": "VariableDeclaration",
+ "scope": 58683,
+ "src": "1012:14:84",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 58586,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "1012:7:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 58589,
+ "mutability": "mutable",
+ "name": "signature",
+ "nameLocation": "1043:9:84",
+ "nodeType": "VariableDeclaration",
+ "scope": 58683,
+ "src": "1028:24:84",
+ "stateVariable": false,
+ "storageLocation": "calldata",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_calldata_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 58588,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "1028:5:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1011:42:84"
+ },
+ "returnParameters": {
+ "id": 58593,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 58592,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 58683,
+ "src": "1101:4:84",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ },
+ "typeName": {
+ "id": 58591,
+ "name": "bool",
+ "nodeType": "ElementaryTypeName",
+ "src": "1101:4:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1100:6:84"
+ },
+ "scope": 58758,
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "internal"
+ },
+ {
+ "id": 58706,
+ "nodeType": "FunctionDefinition",
+ "src": "1763:288:84",
+ "nodes": [],
+ "body": {
+ "id": 58705,
+ "nodeType": "Block",
+ "src": "1926:125:84",
+ "nodes": [],
+ "statements": [
+ {
+ "condition": {
+ "arguments": [
+ {
+ "id": 58695,
+ "name": "digest",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 58688,
+ "src": "1966:6:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ {
+ "expression": {
+ "id": 58696,
+ "name": "userOp",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 58686,
+ "src": "1974:6:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_UserOperation_$3606_calldata_ptr",
+ "typeString": "struct UserOperation calldata"
+ }
+ },
+ "id": 58697,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberLocation": "1981:9:84",
+ "memberName": "signature",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 3605,
+ "src": "1974:16:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_calldata_ptr",
+ "typeString": "bytes calldata"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ {
+ "typeIdentifier": "t_bytes_calldata_ptr",
+ "typeString": "bytes calldata"
+ }
+ ],
+ "id": 58694,
+ "name": "_validatePasskeySignature",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 58683,
+ "src": "1940:25:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes_calldata_ptr_$returns$_t_bool_$",
+ "typeString": "function (bytes32,bytes calldata) view returns (bool)"
+ }
+ },
+ "id": 58698,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "nameLocations": [],
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "1940:51:84",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "id": 58702,
+ "nodeType": "IfStatement",
+ "src": "1936:90:84",
+ "trueBody": {
+ "id": 58701,
+ "nodeType": "Block",
+ "src": "1993:33:84",
+ "statements": [
+ {
+ "expression": {
+ "hexValue": "30",
+ "id": 58699,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "2014:1:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0"
+ },
+ "functionReturnParameters": 58693,
+ "id": 58700,
+ "nodeType": "Return",
+ "src": "2007:8:84"
+ }
+ ]
+ }
+ },
+ {
+ "expression": {
+ "hexValue": "31",
+ "id": 58703,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "2043:1:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_1_by_1",
+ "typeString": "int_const 1"
+ },
+ "value": "1"
+ },
+ "functionReturnParameters": 58693,
+ "id": 58704,
+ "nodeType": "Return",
+ "src": "2036:8:84"
+ }
+ ]
+ },
+ "baseFunctions": [
+ 54995
+ ],
+ "functionSelector": "fff35b72",
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "validateUserOp",
+ "nameLocation": "1772:14:84",
+ "overrides": {
+ "id": 58690,
+ "nodeType": "OverrideSpecifier",
+ "overrides": [],
+ "src": "1872:8:84"
+ },
+ "parameters": {
+ "id": 58689,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 58686,
+ "mutability": "mutable",
+ "name": "userOp",
+ "nameLocation": "1810:6:84",
+ "nodeType": "VariableDeclaration",
+ "scope": 58706,
+ "src": "1787:29:84",
+ "stateVariable": false,
+ "storageLocation": "calldata",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_UserOperation_$3606_calldata_ptr",
+ "typeString": "struct UserOperation"
+ },
+ "typeName": {
+ "id": 58685,
+ "nodeType": "UserDefinedTypeName",
+ "pathNode": {
+ "id": 58684,
+ "name": "UserOperation",
+ "nameLocations": [
+ "1787:13:84"
+ ],
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 3606,
+ "src": "1787:13:84"
+ },
+ "referencedDeclaration": 3606,
+ "src": "1787:13:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_UserOperation_$3606_storage_ptr",
+ "typeString": "struct UserOperation"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 58688,
+ "mutability": "mutable",
+ "name": "digest",
+ "nameLocation": "1826:6:84",
+ "nodeType": "VariableDeclaration",
+ "scope": 58706,
+ "src": "1818:14:84",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 58687,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "1818:7:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1786:47:84"
+ },
+ "returnParameters": {
+ "id": 58693,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 58692,
+ "mutability": "mutable",
+ "name": "validationData",
+ "nameLocation": "1906:14:84",
+ "nodeType": "VariableDeclaration",
+ "scope": 58706,
+ "src": "1898:22:84",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ },
+ "typeName": {
+ "id": 58691,
+ "name": "uint256",
+ "nodeType": "ElementaryTypeName",
+ "src": "1898:7:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_uint256",
+ "typeString": "uint256"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "1897:24:84"
+ },
+ "scope": 58758,
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "id": 58716,
+ "nodeType": "FunctionDefinition",
+ "src": "2057:71:84",
+ "nodes": [],
+ "body": {
+ "id": 58715,
+ "nodeType": "Block",
+ "src": "2126:2:84",
+ "nodes": [],
+ "statements": []
+ },
+ "baseFunctions": [
+ 55003
+ ],
+ "functionSelector": "dee30c97",
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "callback",
+ "nameLocation": "2066:8:84",
+ "overrides": {
+ "id": 58713,
+ "nodeType": "OverrideSpecifier",
+ "overrides": [],
+ "src": "2117:8:84"
+ },
+ "parameters": {
+ "id": 58712,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 58709,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 58716,
+ "src": "2075:22:84",
+ "stateVariable": false,
+ "storageLocation": "calldata",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_UserOperation_$3606_calldata_ptr",
+ "typeString": "struct UserOperation"
+ },
+ "typeName": {
+ "id": 58708,
+ "nodeType": "UserDefinedTypeName",
+ "pathNode": {
+ "id": 58707,
+ "name": "UserOperation",
+ "nameLocations": [
+ "2075:13:84"
+ ],
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 3606,
+ "src": "2075:13:84"
+ },
+ "referencedDeclaration": 3606,
+ "src": "2075:13:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_UserOperation_$3606_storage_ptr",
+ "typeString": "struct UserOperation"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 58711,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 58716,
+ "src": "2099:7:84",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 58710,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "2099:7:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "2074:33:84"
+ },
+ "returnParameters": {
+ "id": 58714,
+ "nodeType": "ParameterList",
+ "parameters": [],
+ "src": "2126:0:84"
+ },
+ "scope": 58758,
+ "stateMutability": "nonpayable",
+ "virtual": false,
+ "visibility": "external"
+ },
+ {
+ "id": 58740,
+ "nodeType": "FunctionDefinition",
+ "src": "2134:325:84",
+ "nodes": [],
+ "body": {
+ "id": 58739,
+ "nodeType": "Block",
+ "src": "2287:172:84",
+ "nodes": [],
+ "statements": [
+ {
+ "condition": {
+ "arguments": [
+ {
+ "id": 58727,
+ "name": "digest",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 58718,
+ "src": "2327:6:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ {
+ "id": 58728,
+ "name": "signature",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 58720,
+ "src": "2335:9:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_calldata_ptr",
+ "typeString": "bytes calldata"
+ }
+ }
+ ],
+ "expression": {
+ "argumentTypes": [
+ {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ {
+ "typeIdentifier": "t_bytes_calldata_ptr",
+ "typeString": "bytes calldata"
+ }
+ ],
+ "id": 58726,
+ "name": "_validatePasskeySignature",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 58683,
+ "src": "2301:25:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes_calldata_ptr_$returns$_t_bool_$",
+ "typeString": "function (bytes32,bytes calldata) view returns (bool)"
+ }
+ },
+ "id": 58729,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "kind": "functionCall",
+ "lValueRequested": false,
+ "nameLocations": [],
+ "names": [],
+ "nodeType": "FunctionCall",
+ "src": "2301:44:84",
+ "tryCall": false,
+ "typeDescriptions": {
+ "typeIdentifier": "t_bool",
+ "typeString": "bool"
+ }
+ },
+ "falseBody": {
+ "id": 58737,
+ "nodeType": "Block",
+ "src": "2415:38:84",
+ "statements": [
+ {
+ "expression": {
+ "hexValue": "307830303030",
+ "id": 58735,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "kind": "number",
+ "lValueRequested": false,
+ "nodeType": "Literal",
+ "src": "2436:6:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_rational_0_by_1",
+ "typeString": "int_const 0"
+ },
+ "value": "0x0000"
+ },
+ "functionReturnParameters": 58725,
+ "id": 58736,
+ "nodeType": "Return",
+ "src": "2429:13:84"
+ }
+ ]
+ },
+ "id": 58738,
+ "nodeType": "IfStatement",
+ "src": "2297:156:84",
+ "trueBody": {
+ "id": 58734,
+ "nodeType": "Block",
+ "src": "2347:62:84",
+ "statements": [
+ {
+ "expression": {
+ "expression": {
+ "expression": {
+ "id": 58730,
+ "name": "this",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": -28,
+ "src": "2368:4:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_contract$_PasskeyModule_$58758",
+ "typeString": "contract PasskeyModule"
+ }
+ },
+ "id": 58731,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": false,
+ "lValueRequested": false,
+ "memberLocation": "2373:16:84",
+ "memberName": "isValidSignature",
+ "nodeType": "MemberAccess",
+ "referencedDeclaration": 58740,
+ "src": "2368:21:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_function_external_view$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bytes4_$",
+ "typeString": "function (bytes32,bytes memory) view external returns (bytes4)"
+ }
+ },
+ "id": 58732,
+ "isConstant": false,
+ "isLValue": false,
+ "isPure": true,
+ "lValueRequested": false,
+ "memberLocation": "2390:8:84",
+ "memberName": "selector",
+ "nodeType": "MemberAccess",
+ "src": "2368:30:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ }
+ },
+ "functionReturnParameters": 58725,
+ "id": 58733,
+ "nodeType": "Return",
+ "src": "2361:37:84"
+ }
+ ]
+ }
+ }
+ ]
+ },
+ "baseFunctions": [
+ 50641
+ ],
+ "functionSelector": "1626ba7e",
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "isValidSignature",
+ "nameLocation": "2143:16:84",
+ "overrides": {
+ "id": 58722,
+ "nodeType": "OverrideSpecifier",
+ "overrides": [],
+ "src": "2238:8:84"
+ },
+ "parameters": {
+ "id": 58721,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 58718,
+ "mutability": "mutable",
+ "name": "digest",
+ "nameLocation": "2168:6:84",
+ "nodeType": "VariableDeclaration",
+ "scope": 58740,
+ "src": "2160:14:84",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 58717,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "2160:7:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 58720,
+ "mutability": "mutable",
+ "name": "signature",
+ "nameLocation": "2191:9:84",
+ "nodeType": "VariableDeclaration",
+ "scope": 58740,
+ "src": "2176:24:84",
+ "stateVariable": false,
+ "storageLocation": "calldata",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_calldata_ptr",
+ "typeString": "bytes"
+ },
+ "typeName": {
+ "id": 58719,
+ "name": "bytes",
+ "nodeType": "ElementaryTypeName",
+ "src": "2176:5:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes_storage_ptr",
+ "typeString": "bytes"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "2159:42:84"
+ },
+ "returnParameters": {
+ "id": 58725,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 58724,
+ "mutability": "mutable",
+ "name": "magicValue",
+ "nameLocation": "2271:10:84",
+ "nodeType": "VariableDeclaration",
+ "scope": 58740,
+ "src": "2264:17:84",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ },
+ "typeName": {
+ "id": 58723,
+ "name": "bytes4",
+ "nodeType": "ElementaryTypeName",
+ "src": "2264:6:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes4",
+ "typeString": "bytes4"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "2263:19:84"
+ },
+ "scope": 58758,
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "public"
+ },
+ {
+ "id": 58757,
+ "nodeType": "FunctionDefinition",
+ "src": "2465:140:84",
+ "nodes": [],
+ "body": {
+ "id": 58756,
+ "nodeType": "Block",
+ "src": "2557:48:84",
+ "nodes": [],
+ "statements": [
+ {
+ "expression": {
+ "baseExpression": {
+ "baseExpression": {
+ "id": 58750,
+ "name": "_publicKeys",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 58519,
+ "src": "2574:11:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_bytes32_$_t_struct$_PublicKey_$58512_storage_$_$",
+ "typeString": "mapping(address => mapping(bytes32 => struct PasskeyModule.PublicKey storage ref))"
+ }
+ },
+ "id": 58752,
+ "indexExpression": {
+ "id": 58751,
+ "name": "user",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 58742,
+ "src": "2586:4:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "2574:17:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_PublicKey_$58512_storage_$",
+ "typeString": "mapping(bytes32 => struct PasskeyModule.PublicKey storage ref)"
+ }
+ },
+ "id": 58754,
+ "indexExpression": {
+ "id": 58753,
+ "name": "keyId",
+ "nodeType": "Identifier",
+ "overloadedDeclarations": [],
+ "referencedDeclaration": 58744,
+ "src": "2592:5:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "isConstant": false,
+ "isLValue": true,
+ "isPure": false,
+ "lValueRequested": false,
+ "nodeType": "IndexAccess",
+ "src": "2574:24:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_PublicKey_$58512_storage",
+ "typeString": "struct PasskeyModule.PublicKey storage ref"
+ }
+ },
+ "functionReturnParameters": 58749,
+ "id": 58755,
+ "nodeType": "Return",
+ "src": "2567:31:84"
+ }
+ ]
+ },
+ "functionSelector": "7cefdd5d",
+ "implemented": true,
+ "kind": "function",
+ "modifiers": [],
+ "name": "getPublicKey",
+ "nameLocation": "2474:12:84",
+ "parameters": {
+ "id": 58745,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 58742,
+ "mutability": "mutable",
+ "name": "user",
+ "nameLocation": "2495:4:84",
+ "nodeType": "VariableDeclaration",
+ "scope": 58757,
+ "src": "2487:12:84",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ },
+ "typeName": {
+ "id": 58741,
+ "name": "address",
+ "nodeType": "ElementaryTypeName",
+ "src": "2487:7:84",
+ "stateMutability": "nonpayable",
+ "typeDescriptions": {
+ "typeIdentifier": "t_address",
+ "typeString": "address"
+ }
+ },
+ "visibility": "internal"
+ },
+ {
+ "constant": false,
+ "id": 58744,
+ "mutability": "mutable",
+ "name": "keyId",
+ "nameLocation": "2509:5:84",
+ "nodeType": "VariableDeclaration",
+ "scope": 58757,
+ "src": "2501:13:84",
+ "stateVariable": false,
+ "storageLocation": "default",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ },
+ "typeName": {
+ "id": 58743,
+ "name": "bytes32",
+ "nodeType": "ElementaryTypeName",
+ "src": "2501:7:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_bytes32",
+ "typeString": "bytes32"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "2486:29:84"
+ },
+ "returnParameters": {
+ "id": 58749,
+ "nodeType": "ParameterList",
+ "parameters": [
+ {
+ "constant": false,
+ "id": 58748,
+ "mutability": "mutable",
+ "name": "",
+ "nameLocation": "-1:-1:-1",
+ "nodeType": "VariableDeclaration",
+ "scope": 58757,
+ "src": "2539:16:84",
+ "stateVariable": false,
+ "storageLocation": "memory",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_PublicKey_$58512_memory_ptr",
+ "typeString": "struct PasskeyModule.PublicKey"
+ },
+ "typeName": {
+ "id": 58747,
+ "nodeType": "UserDefinedTypeName",
+ "pathNode": {
+ "id": 58746,
+ "name": "PublicKey",
+ "nameLocations": [
+ "2539:9:84"
+ ],
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 58512,
+ "src": "2539:9:84"
+ },
+ "referencedDeclaration": 58512,
+ "src": "2539:9:84",
+ "typeDescriptions": {
+ "typeIdentifier": "t_struct$_PublicKey_$58512_storage_ptr",
+ "typeString": "struct PasskeyModule.PublicKey"
+ }
+ },
+ "visibility": "internal"
+ }
+ ],
+ "src": "2538:18:84"
+ },
+ "scope": 58758,
+ "stateMutability": "view",
+ "virtual": false,
+ "visibility": "external"
+ }
+ ],
+ "abstract": false,
+ "baseContracts": [
+ {
+ "baseName": {
+ "id": 58506,
+ "name": "IModule",
+ "nameLocations": [
+ "291:7:84"
+ ],
+ "nodeType": "IdentifierPath",
+ "referencedDeclaration": 55004,
+ "src": "291:7:84"
+ },
+ "id": 58507,
+ "nodeType": "InheritanceSpecifier",
+ "src": "291:7:84"
+ }
+ ],
+ "canonicalName": "PasskeyModule",
+ "contractDependencies": [],
+ "contractKind": "contract",
+ "fullyImplemented": true,
+ "linearizedBaseContracts": [
+ 58758,
+ 55004,
+ 50642
+ ],
+ "name": "PasskeyModule",
+ "nameLocation": "274:13:84",
+ "scope": 58759,
+ "usedErrors": []
+ }
+ ],
+ "license": "Apache"
+ },
+ "id": 84
+}
\ No newline at end of file
diff --git a/app/add-key/page.tsx b/app/add-key/page.tsx
new file mode 100644
index 0000000..7c2c794
--- /dev/null
+++ b/app/add-key/page.tsx
@@ -0,0 +1,8 @@
+import type { NextPage } from "next";
+import AddKeyPage from "@/templates/AddKeyPage";
+
+const AddKey: NextPage = () => {
+ return