@aztec/protocol-contracts 0.0.1-commit.d1f2d6c → 0.0.1-commit.e6bd8901
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/artifacts/AuthRegistry.json +25 -25
- package/artifacts/ContractClassRegistry.json +16 -16
- package/artifacts/ContractInstanceRegistry.json +20 -20
- package/artifacts/FeeJuice.json +21 -21
- package/artifacts/MultiCallEntrypoint.json +14 -14
- package/artifacts/PublicChecks.json +12 -12
- package/dest/protocol_contract_data.js +13 -13
- package/package.json +4 -4
- package/src/protocol_contract_data.ts +13 -13
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"transpiled": true,
|
|
3
|
-
"noir_version": "1.0.0-beta.18+
|
|
3
|
+
"noir_version": "1.0.0-beta.18+584cc8cf0f0244906d3c89b5b6caa1ddc35eba45",
|
|
4
4
|
"name": "ContractInstanceRegistry",
|
|
5
5
|
"functions": [
|
|
6
6
|
{
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
}
|
|
37
37
|
},
|
|
38
38
|
"bytecode": "JwACBAEoAAABBIBFJwAABEUlAAAAQScCAQQAJwICBAAfCgABAAIARCUAAABnLQIBRCcCAgREJwIDBAE7DgADAAIsAABDADBkTnLhMaApuFBFtoGBWF0oM+hIeblwkUPh9ZPwAAAAJiUAAALEHgIAAgAeAgADAB4CAAQJJwIFAQEkAgAEAAAAjSUAAALqHgIABAEKIgRDBRYKBQYcCgYHAAQqBwQGJwIEAQAKKgUEByQCAAcAAADAJwIIBAA8BggBJwIFAAAnAgcAASsCAAgAAAAAAAAAAAIAAAAAAAAAAC0IAQknAgoEBQAIAQoBJwMJBAEAIgkCCi0KCgstDgcLACILAgstDgYLACILAgstDgULACILAgstDggLLQsJBgAiBgIGLQ4GCS0IAQYnAgcEBQAIAQcBJwMGBAEAIgkCBwAiBgIIPw8ABwAIJwIHBAEAKgYHCS0LCQgKKggFBgoqBgQFJAIABQAAAW8lAAAC/B4CAAQGHgIABQAvKgAIAAUABhwKBgcEHAoHBQACKgYFBywCAAUALV4Ji4K6N7Q7maExYRj9INQvUWbJ6fE/teplqW0eCm0EKgcFBhwKBggEHAoIBwACKgYHCAQqCAUGHAoGCQEcCgkIABwKCAkBAioGCAosAgAGADAz6iRuUG6Jjpf1cMr/1wTLC7RgMT+3ILKeE55cEAABBCoKBgscCgsMBBwKDAoAAioLCgwEKgwFCxwKCwwBHAoMBQAcCgUMAQIqCwUNBCoNBgscCgsNBBwKDQYAHAoGCwUWCgwGHAoFDAUcCgYFBQQqDAsGHAoKCwUWCgkKHAoICQUcCgoIBQQqCQsKHAoHCwUMKgQLBykCAAQFAAFRgCQCAAcAAAKrIwAAApMEKgkKAgQqCAQDACoCAwQtCgQBIwAAAsMEKgwGAgQqBQQDACoCAwQtCgQBIwAAAsMmKAAABAR4RQwAAAQDJAAAAwAAAukqAQABBdrF9da0SjJtPAQCASYqAQABBU/fSorXz/DTPAQCASYqAQABBbq7IdeCMxhkPAQCASY=",
|
|
39
|
-
"debug_symbols": "tVjbbuM4DP0XP/
|
|
39
|
+
"debug_symbols": "tVjbbuM4DP0XP/dBFEld+iuLokjbdBAgSItMssCiyL8vmYiSE0CaxjPz0hwf18ckdSjJ+pre1i/HH8+b3fvHz+nxn6/pZb/Zbjc/nrcfr6vD5mMn7Nfk9A+4ND3iwwSA02PUX7kGJ8ALAaAgFYChAAIBrEAZfYrBAJdbwRlQJguIzoAxCQ2kArKfHr0+leMFeFcYr/FcgN1Cu4XGkDFkjAZ2AVyABnYBZCAXEO0VMRWQVDAoCAVkMKCCSUG+AHRkwBgwBozxxqCGkRVwAWQMyf8gKMgFsDHBG5AEUSLEKAwpE4UhGUlMIkh6KzsDykjM5JSRYSKt2BloxSgpiAWwMlmBMCxOIH0pg4JYQDRGX8pegBaK5e2smZ6BZsqkIBeAyrACZSQe1kw5KsgFsDGsjMTDOkycFQgTJB6OZEAZCYOTPaVGOjMZDRQmOGW8gnQJPoAvDMQCvDHqsSBZBPVY4NPpYbLeeT7s12ttnVkzSYt9rvbr3WF63B2324fp39X2eP6nn5+r3fn3sNrLXYl6vXuTXxF832zXik4P7WnXf9SjpnF+2mOCKgAQriSgLyHtpTY4awgOLYoIVxp+EEZEiyLlFkT0384jkq8K6Lp50EDCu1YL72bFiHSlwX+gFuEv1gIpWh7S7KlbizSQcOCjaTig1MsjD2rhYrZSgPO/mwm7/qgOJJI0ZJFI0oBVgq/zgJE5ZeamaowE2DMG4EDEIVcRJzNtr6JAo3pQLUffGr8II9VGcYTUDSOMwuAiQcBtVHhpRb3vVnTg0RisT2IMVYC+ba7EMVVnAPSc4QcSsgqZhKxDs07L+VpjMH16sOnbc0sD443CoJoxozVazGmmcZvJwBfI5grMzZo+3CiMps/QZuAwc8U9GphiC8OlZRoZ65yRQ+5rxL4GJagOTzybuvIdYWRXw8iDVIb2qqPCVw1/Yy90oxXJxbYg0UwjLWqUmctv7IV+NLC5DcpsAr2NAkdTV4ihOSzG7pqEg2EJ2eadCP0laZhK9lxTodhPZTCBMnvbJTAz9DUGHkVIrjoMkoduOUbrPAA0EfDdVQnzH9j0kPvdXc84Fxe45ULdgtBodJktDgyO+oEMRzdZTTn4vtlpNJs2l/mMzep4s76NNUIdW+dgoQbntg/kRRrouDa/bLEXasTZ2OJSjbp9mlv9Lg3gui+GEBZqJGsX9LA0jlTr4WffO3dp+JaLDwvjkP2waUgDLtWoPsXZEnWXBra+lfOMhRp1a4wEizXat5df2C/U+oWW9kvE6vXIC2s6242lvLDncv0IlHOi3NX49oob+qtlGM1jzmH77Jl7Xb5anuRy9brZX51knlRsv1m9bNfl8v24e53dPfz3aXfsJPRz//G6fjvu16o0Pw6VwxyQo0jw9KSnoXop53WA7umkr/8f"
|
|
40
40
|
},
|
|
41
41
|
{
|
|
42
42
|
"name": "publish_for_public_execution",
|
|
@@ -2027,7 +2027,7 @@
|
|
|
2027
2027
|
}
|
|
2028
2028
|
}
|
|
2029
2029
|
},
|
|
2030
|
-
"bytecode": "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",
|
|
2030
|
+
"bytecode": "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",
|
|
2031
2031
|
"debug_symbols": "tVvbbhs5DP0XP/tBFKlbfqVYFGnrXQQI0iKbFFgU/fclxxJHdiBWmXFeQo4zOqKkQ1K3+XX4dvry+s/nh6e/v/97uPv06/Dl+eHx8eGfz4/fv96/PHx/4l9/HZz8ATrcgf99PMDyFPkJ+Mnrk+MnbE/E76WzyIe7wKIc7iK/zliRX6T2Yjr/q/BvoVUjtUR5yPw2HA8ZzoLrgt/8v2bc55fn00ne66zlNvy4fz49vRzunl4fH4+Hn/ePr8tL//64f1rky/0z/9cdD6enbywZ8O+Hx5Nov49raTcuitHHWhpjQgVAmobYUXv2VAtnyloc0kV5HJePsRkfU9hQPjms5RO4TeV9K++H9RvtLxBq+eJhS/mQW/lURuXzuDyAo9YC1mPXhjxrA1BODSJQZ0WZpoEvsY0DusUxW0PitBUOoFnhYuysCLMQKWPrzVRcNxxwCQEGIXJp3VmQthjhPbSu8D6tEBivjAg3wIhGf8bSMCAFAyONMSg2YlDxHUKcbkn0LbhE7GJTmSanx6BdIcVGY+otDKahdieuLpIv+e3BinOusTN7XM3AAJcY3qBnwaL0zHGMYdATQ6MnlqQIPl4hkIHgENRVsWzDAGhhHyH4MYbBT8oaOil3GFC2NSW5bU2Ja+SKCfZj5LANo6xtKXE8LAgf26WlODWjc7drMyxvI2wQnjINPRbJSgbRZc0Gya39kdw7QFIuCpK7/J6mE1sAbEMboM+u141JFk3XHmG9DO2wQYImenQxxW0gqawek0Pa0CME0Owg3+WVqyBGBk+DBrEIHT/iJU3JCKWYCVdvwWEoJdwf0on2h3QKe0M6xf0h3cSYDOmUd8cf04zJcGxj+KwYNE4LFkXBubDORnFIUstRfGw9yv7vRo4S0IzGcSVHv0K48tdgcDRj0jktT5C7Zco7nJ6U50Rjpw/GqKRIjaQpdsmap7cXEEb4Al9Cm8gBd2kedodBUiTlKIRuVDY2pIwaEq2FipI8dYGc/PRwBF0rUShDakUjgpZ1ddDzG/2lEdFcu7fVQXapQ7jqB9ofgmPYH4Jj3BuCY9ofgk2MyRAcy+4QbJoxGYKnMYwZsYkxOSNO+LHdMTkjtpwtd87WL+evnC1FM/bp9gh1LXmDkfa7W8r73S2Vve6W3X53MzEm3S373fwyzZh0NxtjbsZjpZSivcErlDhKKXmSor5b5VzvF5ktmXR60w7MTmcJmcZ2RHNPVLdVeXt0K4YuP6nQDTDybozgcHd/WBgmw3SvP7huRX/FsBL2M8zEmGSHiTHJjj9gTLFjHiPvxrBGdrY/NrIjOCjKjggjdoDD/fSwQSb5YYNMEuRPIFMMeQdI3g9ije90n2wmSdYQApiGJAFr8wmKEs1DR5KrnL1sc41PJfSkyVOXLfFqEQhwgw2oZZ6ydz4GsHsLCuAGe1A2yOSUDGD/LtR8a4yTBRtkcmY3D2KspGyQyVkVePzgfp1cTNke7EmjAKOMPdg6fpp2Pp9u4Hw+73Y+X27gfCbIrPPd4AjKNmTWb2yQuSWRzbSQ2tiECHHMNLSCK6/5tV+pO0K6yp1oTb+LnoJDScOLLiaGd741xjsKYwyDqyGhntx0VuT3WBE1c7oyvDID5D7UCtAJjWeLtvUnZLwBhtuNgboZ7DGMuUHmoqjocQcBbsMgJMWgW2CkjRhh3SmLcSuGW+fvsL8tWzGCZikI4PZj4FYMWjEiDTGsc6g5r7WtUI+DaHiLdXozZ4WdFAKtSSGNk4J1ChWcHmCHfkv4OinYGD4oRjf7uMaI5klS0W2/SLfAKEOM6U7tjijfdGo0V5iaadn58rgxFktjZ0gZD4x1JMXcJCVZx5DNGN6NMKwsiRF0mpzzcLEcs5WfIGmCYjOGV1fAOpQKer80drfvrq+X/sEQryCez35paEiCjz0KD0nTS0hpuI0J1rEUn5G26Qf6NNzsMq3QrS7u3TC2wkxQ0a3JpVsCzd8c50mx3t+GYphhLKI4tSjVWc8wHtr8wUOLOjcN1N3YeHN/2D6amrzt9QeUsN5wcqG7ffs+lAgrSn/D/r22TF09s7J/cm2ME3bhnfcB32HH/ttrAX1ah9gPh9i6vBFIb5mHmC4h/uLH+68Pz5ffrMiHJrK49sDRi+v3vkqskqoMVcYqU5W5ynKW6KqseFjxsOJhxcOKhxUPKx5WPKx45CQQsYQqfZUo2xMsqcogq2mWsUrGk+Ui5SoZTxZuwVUJVfrz+wHrM1UZ5FiIZawyVZmrLLLbczxEVyXITIGlr5LxAr8XqcpQZZJ4xLIIN46H5KqEKr1c12GJVZIEDZZcXtJMinJmzzLJdx0s2R6Z46RylvIp0CKhSsYr3L6M8h0HS8YDxxXlIAoj5NiU1JTclCIKoxRhiVw7K/KJkdx/LfKRETBOwaZQU0JTlo+f2NiSmpKbUqrCtqgGqnnVUDVSLagWVUuqZdW0DtA6QOqQW8a8h66a1CGcguXbrbMmdch9VVi+2aLlvbQkJtGyalKHjDcsjnTWpA65LAbiTFWTOmTcQRxqSU0gLrXMYUCcCmQ/B8StqiZ1pOU9qUMuLYA4V9Wkjix44mBVkzrkIAPEyaoWVIuqSR3CKRBnq1ppmjhc1ZY6pOW01CFtI1SNVAvNKlrqEJspqZZVK00L2g5xw6p51bSOsNQhcezn/fPD/ZfHk8QsCWuvT19bCOPHl/9+tP+0D/N+PH//evr2+nyScNd9ncd/P/E2sAcJh7D+VI6e5Cf/9ifUn5guvshPtP6Ujujlp/AWfvk2j0t/4tyd8l/H87+5RzODSED+Hw==",
|
|
2032
2032
|
"verification_key": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOQAAAAAAAAAAAAAAAAAAAA19dzMwte6uxcQWicxCK54twAAAAAAAAAAAAAAAAAAAAAAB9NSTIm6NeYDcwg6hUsOwAAAAAAAAAAAAAAAAAAADkAZHPNSpU+kFFaiWliGCk0AAAAAAAAAAAAAAAAAAAAAAAMDA5GitOg6/UXdmydxNgAAAAAAAAAAAAAAAAAAAAZ3KetbHuavZQQnLZ1dXOQhwAAAAAAAAAAAAAAAAAAAAAADHsfZZWm8CurTyoqENf2AAAAAAAAAAAAAAAAAAAA1uDM3FT6FVcfddc5O5kOAKQAAAAAAAAAAAAAAAAAAAAAAB9SsBVMsp9ntl/docTVDwAAAAAAAAAAAAAAAAAAAB1xfiCYLvQAKdTvin2BMEPXAAAAAAAAAAAAAAAAAAAAAAAMUt83zOAuP7OSw20H5+cAAAAAAAAAAAAAAAAAAAC7lQT3PViz3+yUnDjXRlWdfwAAAAAAAAAAAAAAAAAAAAAALmswNRe4/wprWIqdY8bsAAAAAAAAAAAAAAAAAAAAcylBfz+Z4Lc35rO7NHzBh2MAAAAAAAAAAAAAAAAAAAAAABQ4Q0Z0SS2a1EygqRfI/wAAAAAAAAAAAAAAAAAAAIKsy463sCsLaaMKiy+WiKy5AAAAAAAAAAAAAAAAAAAAAAASzH9idEMk0hnpkdmprggAAAAAAAAAAAAAAAAAAAAnUkiFpw4NF1q1LB1/d3/fhgAAAAAAAAAAAAAAAAAAAAAAFiuVBCQTsKqP9wP79ot4AAAAAAAAAAAAAAAAAAAAcBjS+uzukqPE+8y9wQ9fYyIAAAAAAAAAAAAAAAAAAAAAABnMy+37Q8zqbqOc4hmwiQAAAAAAAAAAAAAAAAAAAK/4JPURGdoDnRRccmPgYcC1AAAAAAAAAAAAAAAAAAAAAAAqiAxtGlxERMNz2n6rPPwAAAAAAAAAAAAAAAAAAACSEBGG7O9I9747vNWPji9X7wAAAAAAAAAAAAAAAAAAAAAAA3yKnVkEpHNHm6zX8tI8AAAAAAAAAAAAAAAAAAAAJzF9LwqADNbKcfUoT8KtTa8AAAAAAAAAAAAAAAAAAAAAAA518y3hD5iLVkztpJIXywAAAAAAAAAAAAAAAAAAAB5J8PjTkTM7ZuCKjl4o1N0dAAAAAAAAAAAAAAAAAAAAAAAGAYYZQRXqMgE23QeNvXEAAAAAAAAAAAAAAAAAAACDqQDTFOp4DIDArZuFIzoM8wAAAAAAAAAAAAAAAAAAAAAACWWBWtbJb0b3DJB/sUm/AAAAAAAAAAAAAAAAAAAAzddxH9m3Wxos0sgmUx2zSUoAAAAAAAAAAAAAAAAAAAAAACslai25UE7q+UTCKPoK+AAAAAAAAAAAAAAAAAAAAGy+plsUpBVoqy//e+gn7RtDAAAAAAAAAAAAAAAAAAAAAAAWSx/9A3k+ffScMWh6JrQAAAAAAAAAAAAAAAAAAADkpOh2vOuJDtZkK2EtyR9WRQAAAAAAAAAAAAAAAAAAAAAADRWwVSa9+NrSpuwCS4jHAAAAAAAAAAAAAAAAAAAA91hTgBpQ10Zs38f0V3MnkeAAAAAAAAAAAAAAAAAAAAAAABbMb13uHJl2nontBJu5+QAAAAAAAAAAAAAAAAAAAKiqV2/8TPn0HNVpk/tKQB/GAAAAAAAAAAAAAAAAAAAAAAAtTbWBEo1JmMIm+LtV9NUAAAAAAAAAAAAAAAAAAAD7cJfBFojun47R6X2EuZW5PgAAAAAAAAAAAAAAAAAAAAAAI8tu0znOb4uzlah1W5R8AAAAAAAAAAAAAAAAAAAAcn10HuhzlS4hjQIvADTp2VUAAAAAAAAAAAAAAAAAAAAAABAt07899yFGJHGx0Mk9gQAAAAAAAAAAAAAAAAAAANoT8+7jF4uqZ56sxGi8GbMzAAAAAAAAAAAAAAAAAAAAAAAcphquBSe88xqXEvx3S+4AAAAAAAAAAAAAAAAAAABZLA31xpw6EblruIsnURjm7AAAAAAAAAAAAAAAAAAAAAAABDCrT4VtTVzbVdRhfUUgAAAAAAAAAAAAAAAAAAAAiCWdwFQm5Z605q+p1frcTqsAAAAAAAAAAAAAAAAAAAAAACv+eyoE9YaW/tJjbVvDpwAAAAAAAAAAAAAAAAAAAOf+qot9ZRdb72tz5GdYdwqbAAAAAAAAAAAAAAAAAAAAAAAZLBYRnMfClvKfQO8fHIQAAAAAAAAAAAAAAAAAAABqE5xJ0WNe6JsGDcNtiQkzYgAAAAAAAAAAAAAAAAAAAAAAFsazkUIAkI052tW0lDbSAAAAAAAAAAAAAAAAAAAAjnseZNyqyc7+/CqxUdsSOdAAAAAAAAAAAAAAAAAAAAAAAB4J4OVmwwF15c8q9UqYWwAAAAAAAAAAAAAAAAAAACURCNfhCxRchdfpLaCPZbHDAAAAAAAAAAAAAAAAAAAAAAAkmUz9TTMlx5RnQ/LR/3cAAAAAAAAAAAAAAAAAAABfcec8qf5E4tiwJxdPzrPiEAAAAAAAAAAAAAAAAAAAAAAAKBXwHcQBZCUicWu/AT3rAAAAAAAAAAAAAAAAAAAAg613rd+IegEP0SE2HC2ljRAAAAAAAAAAAAAAAAAAAAAAAA1isTZAV5Y3TzB+M2V3cwAAAAAAAAAAAAAAAAAAAIf72sPKwaK8VFeihD3Jsa9zAAAAAAAAAAAAAAAAAAAAAAAmhS4BGSXWja6VeaATdzYAAAAAAAAAAAAAAAAAAAA9ox4xFFBMx4hb6f4/opF9vAAAAAAAAAAAAAAAAAAAAAAAHeZoi6eINE7DyhvBP08oAAAAAAAAAAAAAAAAAAAA4X+ZbTWFCeZxrdfKJhNzvJYAAAAAAAAAAAAAAAAAAAAAABWWwz+1YdKqqICeQJehqQAAAAAAAAAAAAAAAAAAAJeYyVW0C4vkEHY/C+C8XspuAAAAAAAAAAAAAAAAAAAAAAAAxN036aMCi7A32x/4po4AAAAAAAAAAAAAAAAAAABXJERHTe30+UcTiILa2cPcIgAAAAAAAAAAAAAAAAAAAAAACrj8YjSl8zu/9FfPpHi8AAAAAAAAAAAAAAAAAAAAOXk/suPc64w90eeuzowmseQAAAAAAAAAAAAAAAAAAAAAAB7K3ZLnfzcw5GEHmaqxvQAAAAAAAAAAAAAAAAAAANkPOGsUMmqbMSx6j/7SL2bXAAAAAAAAAAAAAAAAAAAAAAAdQ9WLqHnFwbQMbXM/AGoAAAAAAAAAAAAAAAAAAAAMWicS6kVdMRTe/h+IPNeSywAAAAAAAAAAAAAAAAAAAAAAAZpvhPhvNzfTo4WlO9VHAAAAAAAAAAAAAAAAAAAAOmTX22590kY7bYXK5BhQpkIAAAAAAAAAAAAAAAAAAAAAAAAr7OgLIaiAfR8AXpmVfQAAAAAAAAAAAAAAAAAAAJEJetSDj4xDqzejC+ELKIkIAAAAAAAAAAAAAAAAAAAAAAAhWaeVOug67wqJO4ClP5MAAAAAAAAAAAAAAAAAAADkXDcCsk0mJnTXQAoC4lfFoQAAAAAAAAAAAAAAAAAAAAAAE4ia/lZx4oEPhXXuXO+ZAAAAAAAAAAAAAAAAAAAAYT2VvTd5ywCxie9LDvkKf4IAAAAAAAAAAAAAAAAAAAAAAANywcVNqG2M0wBlSUiyjwAAAAAAAAAAAAAAAAAAAHncvCAgAO8Mlhre1rFuYeKhAAAAAAAAAAAAAAAAAAAAAAAIx0LlbZxh6Mq/JR5/dcEAAAAAAAAAAAAAAAAAAACGtWqMH7384z6sC3+P3VQtEAAAAAAAAAAAAAAAAAAAAAAAEgPyyx1H2CfBjBqItM3iAAAAAAAAAAAAAAAAAAAAMUNGp1iAXT+y6cukUTfFl1EAAAAAAAAAAAAAAAAAAAAAABXm5A0YB4Ta/9Tly5D18AAAAAAAAAAAAAAAAAAAAJW12Le0pjsF32UrDRDvFG0mAAAAAAAAAAAAAAAAAAAAAAAJnjvVoKAKt/4YBAEFubMAAAAAAAAAAAAAAAAAAAAhKa86Y39aYioyRA+GDR4qfwAAAAAAAAAAAAAAAAAAAAAAABW40lFdduLM7Jnc0ZRZAAAAAAAAAAAAAAAAAAAAIiuIgQjcJdGqRQ4LS8ISw34AAAAAAAAAAAAAAAAAAAAAABuRdReSC609i8AclZUJKgAAAAAAAAAAAAAAAAAAAEghQcfr5CAAodWMy3Q4H20ZAAAAAAAAAAAAAAAAAAAAAAAwXomSsUju2yLm6ZIHeoQAAAAAAAAAAAAAAAAAAAB8hoR2GGgdwp2Kk2OrfEDhwwAAAAAAAAAAAAAAAAAAAAAAFkZaXMu1UM0sY71YEW/kAAAAAAAAAAAAAAAAAAAAQ5lzrBLXynltb+mMpA5sprcAAAAAAAAAAAAAAAAAAAAAAC4k1CD7+VCO0x3mkttHewAAAAAAAAAAAAAAAAAAACjt0afkbIQNnJQ/30VSHGTOAAAAAAAAAAAAAAAAAAAAAAAEPQY7Ewrfs3NCr0XQFVoAAAAAAAAAAAAAAAAAAACTMJUq50xXPRaG2ctKAHM4VAAAAAAAAAAAAAAAAAAAAAAAJhUixAiTMGRq/5ZzYZSUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHBMQn5QFsKonQpbDwCH2+ewAAAAAAAAAAAAAAAAAAAAAAI8cUcbVWTxG1uhee713UAAAAAAAAAAAAAAAAAAAA/zYD3DY7E3XCbY6y93VZufIAAAAAAAAAAAAAAAAAAAAAAC4IsUbif1f+wq2ZMkNOOwAAAAAAAAAAAAAAAAAAAGvMegX/lalrKJQkxfczZw2WAAAAAAAAAAAAAAAAAAAAAAAAxDcm91tv2g3iLODg36sAAAAAAAAAAAAAAAAAAAAdCgnXF47JO614WPluZPC0jQAAAAAAAAAAAAAAAAAAAAAAL5tuC04sAZaN5cMkgqp9AAAAAAAAAAAAAAAAAAAAFLmaKhz1vbFNGPy31tW7G0MAAAAAAAAAAAAAAAAAAAAAABibwBFKqYLGRXSxHbsAPgAAAAAAAAAAAAAAAAAAAIFYESpGMQpiuEn23VYsLIaUAAAAAAAAAAAAAAAAAAAAAAASkF6WwsjbCGXWk491oyQ="
|
|
2033
2033
|
},
|
|
@@ -2082,7 +2082,7 @@
|
|
|
2082
2082
|
}
|
|
2083
2083
|
},
|
|
2084
2084
|
"bytecode": "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",
|
|
2085
|
-
"debug_symbols": "
|
|
2085
|
+
"debug_symbols": "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"
|
|
2086
2086
|
},
|
|
2087
2087
|
{
|
|
2088
2088
|
"name": "update",
|
|
@@ -2142,7 +2142,7 @@
|
|
|
2142
2142
|
}
|
|
2143
2143
|
},
|
|
2144
2144
|
"bytecode": "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",
|
|
2145
|
-
"debug_symbols": "
|
|
2145
|
+
"debug_symbols": "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"
|
|
2146
2146
|
},
|
|
2147
2147
|
{
|
|
2148
2148
|
"name": "process_message",
|
|
@@ -2380,7 +2380,7 @@
|
|
|
2380
2380
|
}
|
|
2381
2381
|
},
|
|
2382
2382
|
"bytecode": "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",
|
|
2383
|
-
"debug_symbols": "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/5wBpDH7MVHBaZvvG9CY/ZhoYNh6YAM7GFcdcwvF7MdEARUsYAUNdLCBfWF09DmPSWOeY2IBKxhrEY0aHf3CBnYwrppjje0ABVSwgBU00MGYGDB3xHNG44UCKljAChroYAM7iK1ha9gatoatYWvYGraGrWFr2Dq2jq1j69g6to6tY+vYOraObWAb2Aa2gW1gG9gGtoFtYBvLds5ovFBABQtYQQMdbGAHsQk2wSbYBJtgE2yCTbAJNsGm2BSbYlNsik2xKTbFptgUW8FWsBVsBVvJmYd6ToS80MHoxxbYwbEwTg/mnDItZ2qcqGCkxgisoIEONrCDY2GkxoUCKojNsBk2w2bYDJthc2yOzbE5Nsfm2BybY3Nsjq1ha9gatoatYWvYGraGrWFr2Dq2jq1j69g6to6tY+vYOraObWAb2Aa2gW1gG9gGtoFtYBvLFjMwEwVUsIAVNNDBBnYQm2ATbIJNsAk2wSbYBJtgE2yKTbEpNsWm2BSbYlNsik2xFWwFW8FWsBVsBVvBVrAVbAVbxVaxVWxkSSVLKllSyZJKllSypJIllSypZEklSypZUsmSSpZUsqSSJZUsqWRJJUsqWVLJkkqWVLKkkiWVLKlkSSVLKllSyZJKllSypJIllSypZEklSypZUsmSSpZUsqSSJZUsqWRJJUsqWVLJkkqWVLKkkiWVLKlkSSVLKllSyZJKllSypJIllSypZImRJUaWGFliZImRJUaWGFliZImRJUaWGFliZImRJUaWGFliZImRJUaWGFliZImRJUaWGFliZImRJUaWGFliZImRJUaWGFliZImRJUaWGFliZImRJUaWGFliZImRJUaWGFliZImRJUaWGFliZImRJUaWGFliZImRJUaWGFliZImRJUaWGFliZImRJUaWGFliZImRJUaWGFliZImRJUaWGFliZImRJUaWGFliZImRJUaWGFliZImRJUaWGFliZImRJUaWGFliZImRJUaWGFliZImRJUaWGFliZImRJUaWGFliZImTJU6WOFniZImTJU6WOFniZImTJU6WOFniZImTJU6WOFniZImTJU6WOFniZImTJU6WOFniZImTJU6WOFniZImTJU6WOFniZImTJU6WOFniZImTJU6WOFniZImTJU6WOFniZImTJU6WOFniZImTJU6WOFniZImTJU6WOFniZImTJU6WOFniZImT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"
|
|
2383
|
+
"debug_symbols": "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"
|
|
2384
2384
|
},
|
|
2385
2385
|
{
|
|
2386
2386
|
"name": "public_dispatch",
|
|
@@ -2452,10 +2452,10 @@
|
|
|
2452
2452
|
}
|
|
2453
2453
|
},
|
|
2454
2454
|
"bytecode": "JwACBAEoAAABBIBRJwAABFElAAAAQScCAgQBJwIDBAAfCgACAAMAUC0IUAElAAAA1ScCAQRRJwICBAA7DgACAAEnAEMAAywAAEQAAAAAAA6S+filNOhY/Pd32iBuCLDGIOz53rIdE0eYE/YoAABFBQJYLAAARgAwZE5y4TGgKbhQRbaBgVhdKDPoSHm5cJFD4fWT8AAAACcARwQDJwBIBAAnAEkAACcASgEBJwBLBAEnAEwAAScATQQCJwBOACsrAABPAAAAAAAAAAABAAAAAAAAAAAmJQAADFApAgACAPqRAssKKgECAycCBAQAJwIGBAMAKgQGBS0IAQIACAEFAScDAgQBACICAgUtDgQFACIFAgUtDgQFJwIFBAMAKgIFBCcCBAEAJAIAAwAAATMjAAAFMC0IAQMnAgUEAgAIAQUBJwMDBAEAIgMCBR8wAEsASwAFLQgBBQAAAQIBLQ4DBS0IAQMAAAECAS0MSAMnAgcECC0IAAgtCgUJLQoDCgAIAAcAJQAADHYtAgAALQoJBgAiBksFLQsFAx4CAAUAHgIABgAeAgAHAQoiB0YIFgoICRwKCQoABCoKBwkKKggEByQCAAcAAAHRJwIKBAA8BgoBMyoACQAGAAckAgAHAAAB5iUAAAzLMyIAAwBDAAYkAgAGAAAB+yUAAAzdLQgBBicCBwQDAAgBBwEnAwYEAQAiBgIHLQoHCC0MTAgAIggCCC0OCQgnAggECi0IAAotCgYLLQhNDAAIAAgAJQAADO8tAgAALQoLBwoiB0kGCioGBAgkAgAIAAACXiUAABA/JwIIBAotCAAKLQoHCwAIAAgAJQAAEFEtAgAALQoLBi0IAQgAAAECAS0OBggtCAEGAAABAgEtDEgGLQgBCicCCwQEAAgBCwEnAwoEAQAiCgILLQoLDC0MSQwAIgwCDC0MSQwAIgwCDC0MSQwnAgwEDS0IAA0tCggOLQoGDy0IThAtCgoRAAgADAAlAAARAi0CAAAtCg4LJwIMBA0tCAANLQoLDgAIAAwAJQAAEfAtAgAALQoOBi0KDwgtChAKHgIACwAvKgAHAAsADCcCEQQSLQgAEi0KDBMACAARACUAABJGLQIAAC0KEwstChQNLQoVDi0KFg8tChcQHgIADAYnAhIEEy0IABMtCgsULQoNFS0KDhYtCg8XLQoQGC0KDBkACAASACUAABNBLQIAAC0KFBEAKgwREg4qDBITJAIAEwAAA6YlAAATsgwqDAoRFgoRChwKEQwAHAoKEQAEKgwGCgQqEQgGACoKBggnAgoEEy0IABMtCggULQoDFS0KEhYtCgsXLQoNGC0KDhktCg8aLQoQGwAIAAoAJQAAE8QtAgAALQoUBi0LBgoAIgoCCi0OCgYnAgsEEy0IABMtCgYULQhHFQAIAAsAJQAAFR0tAgAALQoUCicCDAQTLQgAEy0KBhQtCgoVAAgADAAlAAAYbS0CAAAtChQLJwIGBBMtCAATLQoHFC0KCxUACAAGACUAABjJLQIAABwKEgYAJwIKBAUnAgwEAwAqCgwLLQgBBwAIAQsBJwMHBAEAIgcCCy0OCgsAIgsCCy0OCgsnAgsEAwAqBwsKLQoKCy0MRAsAIgsCCy0OCQsAIgsCCy0OCAsAIgsCCy0OAwsAIgsCCy0OBgsnAgMEBQAiBwIJLQsJCS0KCQgnAgoEAwAqBwoGNw4ACAAGLQsCAwAiAwIDLQ4DAgAiAgIHLQsHBy0KBwYnAggEAwAqAggDOw4ABgADIwAABTApAgADAMB7XhkKKgEDBSQCAAUAAAVLIwAACOstCAEFJwIGBAIACAEGAScDBQQBACIFAgYfMABLAEsABi0IAQYAAAECAS0OBQYtCAEFAAABAgEtDEgFJwIIBAktCAAJLQoGCi0KBQsACAAIACUAAAx2LQIAAC0KCgcAIgdLBi0LBgUcCgUHBRwKBwYAHAoGBQUeAgAGAB4CAAcAHgIACAEKIghGCRYKCQocCgoLAAQqCwgKCioJBAgkAgAIAAAF+CcCCwQAPAYLATMqAAoABwAIJAIACAAABg0lAAAMywwiBUUHCioHBAgkAgAIAAAGJCUAABkbLQgBBycCCAQDAAgBCAEnAwcEAQAiBwIILQoICS0MTAkAIgkCCS0OCgknAgkECi0IAAotCgcLLQhNDAAIAAkAJQAADO8tAgAALQoLCAoiCEkHCioHBAkkAgAJAAAGhyUAABA/HgIABwAvKgAIAAcACScCDgQPLQgADy0KCRAACAAOACUAABJGLQIAAC0KEActChEKLQoSCy0KEwwtChQNHgIACQYnAg8EEC0IABAtCgcRLQoKEi0KCxMtCgwULQoNFS0KCRYACAAPACUAABNBLQIAAC0KEQ4MKg4FByQCAAcAAActIwAABw0CKg4FBg4qBQ4HJAIABwAAByQlAAAZLS0KBgMjAAAHOycCBgUALQoGAyMAAAc7ACoJAwYOKgkGByQCAAcAAAdSJQAAE7InAgcEDy0IAA8tCggQAAgABwAlAAAQUS0CAAAtChADLQgBBwAAAQIBLQ4DBy0IAQMAAAECAS0MSAMtCAEJJwIKBAQACAEKAScDCQQBACIJAgotCgoLLQxJCwAiCwILLQxJCwAiCwILLQxJCycCCwQPLQgADy0KBxAtCgMRLQhOEi0KCRMACAALACUAABECLQIAAC0KEAonAgsEDy0IAA8tCgoQAAgACwAlAAAR8C0CAAAtChADLQoRBy0KEgknAgsEDy0IAA8tCgMQLQoHES0KCRItCEoTLQoOFC0IShUtCgUWLQoGFwAIAAsAJQAAE8QtAgAALQoQCi0LCgMAIgMCAy0OAwonAgUECy0IAAstCgoMLQhHDQAIAAUAJQAAFR0tAgAALQoMAycCBgQLLQgACy0KCgwtCgMNAAgABgAlAAAYbS0CAAAtCgwFJwIDBAktCAAJLQoICi0KBQsACAADACUAABjJLQIAAC0LAgMAIgMCAy0OAwIAIgICBi0LBgYtCgYFJwIHBAMAKgIHAzsOAAUAAyMAAAjrKQIAAgAFVXv6CioBAgMkAgADAAAJBiMAAAqPHgIAAgAeAgADAB4CAAUJJAIABQAACSIlAAAZPx4CAAUBCiIFRgYWCgYHHAoHCAAEKggFBwoqBgQFJAIABQAACVAnAggEADwGCAEtCAEFJwIGBAMACAEGAScDBQQBACIFAgYtCgYILQxMCAAiCAIILQ4HCCcCBwQILQgACC0KBQktCE0KAAgABwAlAAAM7y0CAAAtCgkGCiIGSQUKKgUEByQCAAcAAAmzJQAAED8eAgAFBh4CAAcALyoABgAHAAgnAgwEDS0IAA0tCggOAAgADAAlAAASRi0CAAAtCg4GLQoPBy0KEAktChEKLQoSCycCDAQNLQgADS0KBg4tCgcPLQoJEC0KChEtCgsSLQoFEwAIAAwAJQAAE0EtAgAALQoOCBwKCAUAJwIHBAEnAgkEAwAqBwkILQgBBgAIAQgBJwMGBAEAIgYCCC0OBwgAIggCCC0OBwgnAggEAwAqBggHLQoHCC0OBQgAIgYCCC0LCAgtCggHJwIJBAMAKgYJBTsOAAcABSMAAAqPJwICAlUnAgMCbicCBQJrJwIGAm8nAgcCdycCCAIgJwIJAnMnAgoCZScCCwJsJwIMAmMnAg0CdCcCDgJyJwIPAnsnAhACfS0IAREnAhIEHAAIARIBJwMRBAEAIhECEi0KEhMtDgITACITAhMtDgMTACITAhMtDgUTACITAhMtDgMTACITAhMtDgYTACITAhMtDgcTACITAhMtDgMTACITAhMtDggTACITAhMtDgkTACITAhMtDgoTACITAhMtDgsTACITAhMtDgoTACITAhMtDgwTACITAhMtDg0TACITAhMtDgYTACITAhMtDg4TACITAhMtDggTACITAhMtDg8TACITAhMtDgkTACITAhMtDgoTACITAhMtDgsTACITAhMtDgoTACITAhMtDgwTACITAhMtDg0TACITAhMtDgYTACITAhMtDg4TACITAhMtDhATCiIESgIkAgACAAAMUCcCAwQeLQgBBScCBgQeAAgBBgEtCgUGKgMABgWto3LG+qaEcwAiBgIGACIRAgcnAggEGy0CBwMtAgYELQIIBSUAABlRJwIHBBsAKgYHBi0MTAYAIgYCBi0OAQYAIgYCBjwOAwUoAAAEBHhRDAAABAMkAAADAAAMdSoBAAEF2sX11rRKMm08BAIBJiUAAAxQLQsCAy0LAQQKIgNIBSQCAAUAAAyVJQAAGYMAIgRLBS0LBQMtCAEFJwIGBAIACAEGAScDBQQBACIFAgYtCgYHLQ4DBy0OBAEtDEsCLQoFASYqAQABBdUSfSnC0ujtPAQCASYqAQABBa6Sj2upjpKMPAQCASYlAAAMUBwKAgQABCIETwUtCAEEAAABAgEtCAEGJwIHBAUACAEHAScDBgQBACIGAgctCgcILQxJCAAiCAIILQxJCAAiCAIILQxJCAAiCAIILQ4FCC0OBgQGIgJHBS0ISAMjAAANVAwqAwUGJAIABgAADtQjAAANZgYiAkcFBCIFRwYCKgIGAwoiA0gFFgoFBiQCAAUAAA5uIwAADYsCKgIDBQ4qAwIHJAIABwAADaIlAAAZLS0LBAcAIgdLCS0LCQgMIgVNCSQCAAkAAA3BJQAAGYMAIgECCgAqCgULLQsLCQAqCAkKLQIHAycABAQFJQAAGZUtCAUIACIISwktDgoJLQ4IBAwoSwMHJAIABwAADgUjAAAObgAiCE0HLQsHAwAiBUsHDioFBwkkAgAJAAAOJSUAABOyDCIHTQUkAgAFAAAONyUAABmDACIBAgkAKgkHCi0LCgUAKgMFAS0CCAMnAAQEBSUAABmVLQgFAwAiA00FLQ4BBS0OAwQjAAAObgoiAkgBEioBBgIkAgACAAAOhSMAAA7CLQsEAS0LAQIAIgICAi0OAgEtCAECJwIDBAUACAEDAScDAgQBACIBAgMAIgICBT8PAAMABS0OAgQjAAAOwi0LBAEAIgFLAy0LAwItCgIBJi0LBAYAIgZLCC0LCAcEIgNHCAYiCEcKCioKAwkkAgAJAAAO/SUAABn0DCIITQkkAgAJAAAPDyUAABmDACIBAgoAKgoICy0LCwkAKgcJCi0CBgMnAAQEBSUAABmVLQgFBwAiB0sJLQ4KCQAiB00JLQsJBgAiCEsJDioICQokAgAKAAAPXSUAABOyDCIJTQokAgAKAAAPbyUAABmDACIBAgsAKgsJDC0LDAoAKgYKCS0CBwMnAAQEBSUAABmVLQgFBgAiBk0KLQ4JCgAiBkcJLQsJBwAiCE0JDioICQokAgAKAAAPvSUAABOyDCIJTQgkAgAIAAAPzyUAABmDACIBAgoAKgoJCy0LCwgAKgcICS0CBgMnAAQEBSUAABmVLQgFBwAiB0cILQ4JCC0LBwYAIgYCBi0OBgctCAEGJwIIBAUACAEIAScDBgQBACIHAggAIgYCCT8PAAgACS0OBgQAIgNLBi0KBgMjAAANVCoBAAEFursh14IzGGQ8BAIBJiUAAAxQLQgBAycCBAQEAAgBBAEnAwMEAQAiAwIELQoEBS0MSQUAIgUCBS0MSQUAIgUCBS0MSQUtCAEEAAABAgEtDgMELQhIAiMAABCeDCICRwMkAgADAAAQtSMAABCwLQsEASYcCgIDAAAqAQMFHgIAAwAvKgAFAAMABi0LBAMtAgMDJwAEBAQlAAAZlS0IBQUAIgUCBwAqBwIILQ4GCC0OBQQAIgJLAy0KAwIjAAAQniUAAAxQLQgBBgAAAQIBLQ4EBicCBAAECioDBActCEgFIwAAEScMIgVHBCQCAAQAABE+IwAAETktCwYBJi0LAQgtCwIJDCIJRwokAgAKAAARWCUAABmDACIIAgsAKgsJDC0LDAoAIglLCw4qCQsMJAIADAAAEX0lAAATsi0OCAEtDgsCJAIABwAAEbEjAAARkgoiA04IJAIACAAAEagnAgkEADwGCQEtCgoEIwAAEbotCgoEIwAAEbotCwYILQIIAycABAQEJQAAGZUtCAUJACIJAgoAKgoFCy0OBAstDgkGACIFSwQtCgQFIwAAESclAAAMUC0LAQIAIgICAi0OAgEAIgFNAy0LAwItCwEDACIDAgMtDgMBACIBRwQtCwQDACIBSwUtCwUEHAoEBQQcCgUBABwKAQQFLQoCAS0KAwItCgQDJiUAAAxQHAoBAwQcCgMCAAIqAQIDLAIAAQAtXgmLgro3tDuZoTFhGP0g1C9RZsnp8T+16mWpbR4KbQQqAwECHAoCBAQcCgQDAAIqAgMEBCoEAQIcCgIFARwKBQQAHAoEBQECKgIEBiwCAAIAMDPqJG5QbomOl/Vwyv/XBMsLtGAxP7cgsp4TnlwQAAEEKgYCBxwKBwgEHAoIBgACKgcGCAQqCAEHHAoHCAEcCggBABwKAQgBAioHAQkEKgkCBxwKBwkEHAoJAgAcCgIHBRwKAQIFBCoCBwEcCgYCBRwKBAYFBCoGAgQcCgMCBS0KBQMtCgIFLQoBAi0KCAEmJQAADFAMKgYFCCkCAAUFAAFRgCQCAAgAABOHIwAAE2EWCgMBHAoDAgUcCgEDBQQqAgQBBCoDBQIAKgECAy0KAwcjAAATrRYKAQMcCgEEBRwKAwEFBCoEAgMEKgEFAgAqAwIBLQoBByMAABOtLQoHASYqAQABBdAH6/TLxmeQPAQCASYlAAAMUBwKAwkAHAoIAwAnAggAAicCCgAgJwIMBA0tCAANLQoIDi0KCg8ACAAMACUAABoGLQIAAC0KDgsEKgMLCgAqCQoDHAoGCQAnAgYAQCcCCwQMLQgADC0KCA0tCgYOAAgACwAlAAAaBi0CAAAtCg0KBCoJCgYAKgMGCRwKBwMAJwIGAEgnAgoECy0IAAstCggMLQoGDQAIAAoAJQAAGgYtAgAALQoMBwQqAwcGACoJBgMcCgQGACcCBABoJwIJBAotCAAKLQoICy0KBAwACAAJACUAABoGLQIAAC0KCwcEKgYHBAAqAwQGHAoFAwAnAgQAcCcCBwQJLQgACS0KCAotCgQLAAgABwAlAAAaBi0CAAAtCgoFBCoDBQQAKgYEAy0IAQQnAgUEBAAIAQUBJwMEBAEAIgQCBS0KBQYtDgMGACIGAgYtDgEGACIGAgYtDgIGLQoEASYlAAAMUBwKAgQABCIETwUtCAEEAAABAgEtCAEGJwIHBAUACAEHAScDBgQBACIGAgctCgcILQxJCAAiCAIILQxJCAAiCAIILQxJCAAiCAIILQ4FCC0OBgQGIgJHBS0ISAMjAAAVggwqAwUGJAIABgAAFwIjAAAVlAYiAkcFBCIFRwYCKgIGAwoiA0gFFgoFBiQCAAUAABacIwAAFbkCKgIDBQ4qAwIHJAIABwAAFdAlAAAZLS0LBAcAIgdLCS0LCQgMIgVHCSQCAAkAABXvJQAAGYMAIgECCgAqCgULLQsLCQAqCAkKLQIHAycABAQFJQAAGZUtCAUIACIISwktDgoJLQ4IBAwoSwMHJAIABwAAFjMjAAAWnAAiCE0HLQsHAwAiBUsHDioFBwkkAgAJAAAWUyUAABOyDCIHRwUkAgAFAAAWZSUAABmDACIBAgkAKgkHCi0LCgUAKgMFAS0CCAMnAAQEBSUAABmVLQgFAwAiA00FLQ4BBS0OAwQjAAAWnAoiAkgBEioBBgIkAgACAAAWsyMAABbwLQsEAS0LAQIAIgICAi0OAgEtCAECJwIDBAUACAEDAScDAgQBACIBAgMAIgICBT8PAAMABS0OAgQjAAAW8C0LBAEAIgFLAy0LAwItCgIBJi0LBAYAIgZLCC0LCAcEIgNHCAYiCEcKCioKAwkkAgAJAAAXKyUAABn0DCIIRwkkAgAJAAAXPSUAABmDACIBAgoAKgoICy0LCwkAKgcJCi0CBgMnAAQEBSUAABmVLQgFBwAiB0sJLQ4KCQAiB00JLQsJBgAiCEsJDioICQokAgAKAAAXiyUAABOyDCIJRwokAgAKAAAXnSUAABmDACIBAgsAKgsJDC0LDAoAKgYKCS0CBwMnAAQEBSUAABmVLQgFBgAiBk0KLQ4JCgAiBkcJLQsJBwAiCE0JDioICQokAgAKAAAX6yUAABOyDCIJRwgkAgAIAAAX/SUAABmDACIBAgoAKgoJCy0LCwgAKgcICS0CBgMnAAQEBSUAABmVLQgFBwAiB0cILQ4JCC0LBwYAIgYCBi0OBgctCAEGJwIIBAUACAEIAScDBgQBACIHAggAIgYCCT8PAAgACS0OBgQAIgNLBi0KBgMjAAAVgiUAAAxQACIBSwQtCwQDACIBTQUtCwUEACIBRwYtCwYFLQgBAScCBgQFAAgBBgEnAwEEAQAiAQIGLQoGBy0OAwcAIgcCBy0OBAcAIgcCBy0OBQcAIgcCBy0OAgcmJQAADFAnAgQEBC0ISAMjAAAY3AwqAwQFJAIABQAAGO8jAAAY7iYcCgMFAAAqAQUGACICAgcAKgcDCC0LCAUwCgAFAAYAIgNLBS0KBQMjAAAY3CoBAAEFXm0/LtzNhwk8BAIBJioBAAEFG7xl0D/c6tw8BAIBJioBAAEFT99KitfP8NM8BAIBJgAAAwUHLQADCC0ABAkKAAgHCiQAAAoAABmCLQEIBi0EBgkAAAgCCAAACQIJIwAAGV4mKgEAAQXkCFBFArWMHzwEAgEmLQEDBgoABgIHJAAABwAAGasjAAAZtC0AAwUjAAAZ8y0AAQUAAAEEAQAAAwQJLQADCi0ABQsKAAoJDCQAAAwAABnuLQEKCC0ECAsAAAoCCgAACwILIwAAGconAQUEASYqAQABBQUEG5kgr2BMPAQCASYlAAAMUC0IAQQAAAECAS0MTAQnAgYEAicCBwEBLQgBBScCCAQhAAgBCAEnAwUEAQAiBQIIJwIJBCBDA6oAAgAGAAkABwAILQIIAy0CCQQlAAAa8ycCAgQhJwIGBCAtCEsDIwAAGmwMKgMCByQCAAcAABqDIwAAGn4tCwQBJi0LBAcEKgcHCAIqBgMHDioDBgkkAgAJAAAaoyUAABktDCoHBgkkAgAJAAAatSUAABmDACIFAgoAKgoHCy0LCwkcCgkHAAQqCAEJBCoHCQoCKEwHCQQqCQgHACoKBwgtDggEACIDSwctCgcDIwAAGmwnAAYEAgYABAYFLQAECCcACQQADgAFCQokAAAKAAAbRgIACAIIAAADCQstAQsGAAADCAstAQsHAAADCQstBAcLAAADCAstBAYLAAAJAgkjAAAbBiY=",
|
|
2455
|
-
"debug_symbols": "
|
|
2455
|
+
"debug_symbols": "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"
|
|
2456
2456
|
},
|
|
2457
2457
|
{
|
|
2458
|
-
"name": "
|
|
2458
|
+
"name": "sync_state",
|
|
2459
2459
|
"is_unconstrained": true,
|
|
2460
2460
|
"custom_attributes": [
|
|
2461
2461
|
"abi_utility"
|
|
@@ -2609,8 +2609,8 @@
|
|
|
2609
2609
|
}
|
|
2610
2610
|
}
|
|
2611
2611
|
},
|
|
2612
|
-
"bytecode": "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",
|
|
2613
|
-
"debug_symbols": "tb3dju3KcWb7LvvaFzN/IiPTr9JoGGq3uiFAkAzZPsCB4Xc/kx8ZMeZa+1QuVs3aN6qhtatikElGkEwGyf/67X//+X/95//9l7/87f/8/d9/++f/8V+//a9//OWvf/3L//2Xv/79X//0H3/5+9+e//pfvz2O//H22z+3f/rN+2//bM8fdv4Y5w8/f8zzx9KP+Th/lPNHPX+088cZZZ5R5hllnlHmGWWeUdYZZZ1R1hllnVHWGWWdUdYZZZ1R1hllnVHK43H9LNfPev1s189+/bTr57h++vVzXj+veOWKV6545YpXrnjlileueOWKV6545YpXrnj1ilevePWKV6949YpXr3j1ilevePWKV6947YrXrnjtiteueO2K16547RnPj59+/ZzXz3X+7M945XFACagBz5ClHfCMWfTLFjACPGAGrAvsiDwPKAE1oAX0AAsYAR4wA9YFIyKPiDyOyOuAFtADjsjHSIwR4AHPyFWwLvBHQAmoAS2gB1jACPCAiOwReUbkI23qMT5H4pzQAnqABYwAD5gB64IjkU6IyCsir4i8IvKKyCsir4i8IvK6ItfHI6AE1IAW0AMsYAQckdcBM2BdcGTZCSWgBrSAHmABIyAil4hcInKNyDUi14hcI3KNyDUi14hcI3KNyDUit4jcInKLyC0it4jcInKLyC0it4jcInKPyD0i94jcI3KPyD0i94jcI3KPyD0iW0S2iGwR2SKyRWSLyBaRLSJbRLaIPCLyiMgjIo+IPCLyiMgjIh852OoBM2BdcOTgCSWgBrSAHmABIyAie0T2iHzkYLMDSkANeEbujwN6gAWMAA+YAeuCIwdPKAE1ICKviLwi8rrqRl0eMAOuutEej4ASUANaQA+wgBHgATPgWOZnVW9HDp5QAmpAC+gBFjACPGAGROQakWtErhH5yMHeD+gBFjACPGAGrAuOHDyhBNSAiNwicovIRw52P8ADZsBxWC1POHLwhBJQA1pAD7CAEeABMyAiW0S2iGwR2SKyRWSLyBaRLSJbRLaIPCLyiMgjIo+IPCLyiMgjIo+IPCLyiMgekT0ie0T2iOwR2SOyR2SPyB6RPSLPiDwj8ozIMyLPiDwj8ozIMyLPiDwj8orIKyKviLwi8orIKyKviLwi8orI64rcH4+AElADWkAPsIAR4AEzICKXiFwiconIJSKXiFwiconIJSKXiFwico3INSLXiFwjco3INSLXiFwjco3INSK3iNwicovILSK3iNwicovILSK3iBw52CMHe+RgjxzsysF2QA+wgBHgATNgXaAcFJSAGhCRLSJbRLaIbBHZIrJF5BGRR0QeEXlE5BGRR0QeEXlE5BGRR0T2iOwR2SOyR2SPyB6RPSJ7RPaI7BF5RuQZkWdEnhF5RuQZkWdEnhF5RuQZkVdEXhF5ReQVkVdEXhF5ReQVkVdEXldkezwCSkANaAE9wAJGgAfMgIhcInKJyCUil4hcInKJyCUil4hcInKJyDUi14hcI3KNyDUi14hcI3KNyDUi14jcInKLyC0it4jcInKLyC0it4jcInKLyD0i94jcI3LkoEUOWuSgRQ5a5KBFDlrkoEUOWuSgRQ5a5KBFDlrkoEUOWuSgRQ5a5KBFDlrkoEUOWuSgRQ5a5KBFDlrkoEUOWuSgKQfnASWgBrSAHmABI8ADZsC6YEbkGZFnRJ4ReUbkGZFnRJ4ReUbkGZFXRF4ReUXkFZFXRD5ycDwOGAEeMAPWCePIwRNKQA1oAT3AAkaABxyR2wHrgiMHTygBNaAF9AALGAEeEJFLRK4RuUbkGpFrRK4RuUbkGpFrRK4RuUbkFpFbRG4RuUXkFpFbRG4RuUXkFpFbRO4RuUfkHpF7RO4RuUfkHpF7RO4RuUdki8gWkS0iW0S2iGwR2SKyRWSLyBaRR0QeEXlE5BGRR0QeEXlE5BGRR0QeEdkjskdkj8gekT0ie0T2iOwR2SOyR+QZkWdEnhF5RuQZkWdEnhF5RuQZkWdEXhF5ReQVkVdEXhF5ReQVkVdEXhF5XZH98QgoATWgBfQACxgBHjADInLkoEcOeuSgRw565KBHDnrkoEcOeuSgRw565KBHDnrkoEcOeuSgRw565KBHDnrkoEcOeuSgRw565KBHDnrkoEcOeuSgRw565KBHDnrkoEcOeuSgRw565KBHDnrkoEcOeuSgRw565KBHDnrkoEcOeuSgRw565KBHDnrkoEcOeuSgRw565KBHDnrkoEcOeuSgRw565KBHDnrkoEcOeuSgRw565KBHDnrkoCsHxwEzYF2gHBSUgBrQAnqABYyAiDwj8ozIysFyQAmoAS2gB1jACPCAGbBOmI9HQAmoAS2gB1jACPCAGRCRS0QuEblE5BKRS0QuEblE5BKRS0QuEblG5BqRa0SuEblG5BqRa0SuEblG5BqRW0RuEblF5BaRW0RuEblF5BaRW0RuEblH5B6Re0TuEblH5B6Re0TuEblH5B6RLSJbRLaIbBHZIrJFZIvIFpEtIltEHhF5ROQRkUdEHhF5ROQRkUdEHhF5RGSPyB6RPSJ7RPaI7BHZI7JHZI/IHpFnRJ4RWTnoB7SAHnBEXgeMAA+YAesC5aCgBNSAFtADIvKKyCsir4i8rsjr8QgoATWgBfQACxgBHjADInKJyCUil4hcInKJyCUil4hcInKJyCUiHznojwNKQA14RvZyQA+wgOMOXjvAA2bAcROvH7dNHwEloAa0gB5gASPAA2ZARO4RuUfkHpF7RO4RuUfkHpF7RO4RuUdki8gWkS0iW0S2iGwR2SKyRWSLyBaRR0QeEXlE5BGRR0QeEXlE5BGRR0QeEdkjskdkj8gekT0ie0T2iOwR2SOyR+QZkWdEnhF5RuQZkWdEnhF5RuQjB30csC44cvCEI/KxHx45eEIL6AEWMAI8YAasE5733h9JJakmtaSeZEkjyZNmUjpKOko6SjpKOko6SjpKOko6SjpKOmo6ajpqOmo6ajpqOmo6ajpqOmo6WjpaOlo6WjpaOlo6WjpaOlo6Wjp6Ono6ejp6Ono6ejp6Ono6ejp6Oiwdlg5Lh6XD0mHpsHRYOiwdlo6RjpGOkY6RjpGOkY6RjpGOkY6RDk+Hp8PT4enwdHg6PB2eDk+Hp2OmY6ZjpmOmY6ZjpmOmY6ZjpmOmY6VjpWOlY6VjpWOlY6VjpWOlI/O8ZJ6XzPOSeV4yz0vmeck8L5nnJfO8ZJ6XzPOSeV4yz0vmeck8L5nnJfO8ZJ6XzPOSeV4yz0vmeck8L5nnJfO8ZJ6XzPOSeV4yz0vmeck8L5nnJfO8ZJ6XzPOSeV4yz0vmeck8L5nnJfO8ZJ6XzPOSeV4yz0vmeck8L5nnJfO8ZJ6XzPOSeV4yz0vmeck8L5nnJfO8ZJ6XzPOSeV4yz0vmeck8L5nnJfO8ZJ6XzPOSeV4yz0vmeck8L5nnJfO8ZJ6XzPOSeV4yz0vmeck8L5nnJfO8ZJ6XzPOSeV4yz0vmeck8L5nnJfO8ZJ6XzPOSeV4yz0vmeck8L5nnJfO8ZJ6XzPOSeV4yz2vmec08r5nnNfO8Zp7XzPOaeV4zz2vmec08r5nnNfO8Zp7XzPOaeV4zz2vmec08r5nnNfO8Zp7XzPOaeV4zz2vmec08r5nnNfO8Zp7XzPOaeV4zz2vmec08r5nnNfO8Zp7XzPOaeV4zz2vmec08r5nnNfO8Zp7XzPOaeV4zz2vmec08r5nnNfO8Zp7XzPOaeV4zz2vmec08r5nn6hWa9aAjzy8qSTWpJfUkSxpJnjST0uHp8HR4Ojwdng5Ph6fD0+Hp8HTMdMx0zHTMdBx5PpvIkkaSJ82kFXTk+UUlqSa1pHSsdKx0rHSsdKxwqKnoopJUk1pST7KkkeRJMykdJR0lHSUdJR0lHSUdJR0lHSUdJR01HTUdNR01HTUdNR01HTUdNR01HS0dLR0tHS0dLR0tHS0dLR0tHS0dPR09HT0dPR09HT0dPR09HT0dPR2WDkuHpcPSYemwdFg6LB2WDuX52Wv8SCpJh2OKWlJPsqSR5EkzaQUpz08qSenwdHg6PB2eDk+Hp8PTMdMx0zHTMdMx0zHTMdMx0zHTMdOx0rHSsdKx0rHSsdKx0rHSsdKxwqHGpYtKUk1qST3JkkaSJ82kdJR0lHSUdJR0lHSUdJR0lHSUdJR01HTUdNR01HTUdNR01HTUdNR01HS0dLR0tHS0dLR0tHS0dLR0tHS0dPR09HT0dPR09HT0dPR09HT0dPR0WDosHZYOS4elw9Jh6bB0WDosHSMdIx2Z5z3zvGee98zznnneM8975nnPPO+Z5z3zvGee98zznnneM8975nnPPO+Z5z3zvGee98zznnneM8975nnPPO+Z5z3zvGee98zznnneM8975nnPPO+Z5z3zvGee98zznnneM88t89wyzy3z3DLPLfPcMs8t89wyzy3z3DLPLfPcMs8t89wyzy3z3DLPLfPcMs8t89wyzy3z3DLPLfPcMs8t89wyzy3z3DLPLfPcMs8t89wyzy3z3DLPLfPcMs8t89wyzy3z3DLPLfPcMs8t89wyzy3z3DLPLfPcMs8t89wyzy3z3DLPLfPcMs8t89wyzy3z3DLPLfPcMs8t89wyzy3z3DLPLfPcMs8t89wyzy3z3DLPLfPcMs8t89wyzy3z3DLPLfPcMs8t89wyzy3z3DLPLfPcMs8t89wyzy3z3DLPLfPcMs8t89wyzy3z3DLPLfPcMs8t89wyzy3z3DLPR+b5yDwfmecj83xkno/M85F5PjLPR+b5yDwfmecj83xkno/M85F5PjLPR+b5yDwfmecj83xkno/M85F5PjLPR+b5yDwfmecj83xkno/M85F5PjLPR+b5yDwfmecj83xkno/M85F5PjLPR+b5yDwfmecj83xkno/M85F5PjLPR+b5yDwfmecj83xkno/M85F5PjLPR+b5yDwfmefq3VrloCPPLypJNakl9SRLGkmeNJPS4enwdHg6PB2eDk+Hp8PT4enwdMx0zHQceb66qCX1pMMxRCPJk2bSCjry/KKSVJNaUk9Kx0rHSsdKxwqHmrwuKkk1qSX1JEsaSZ40k9JR0lHSUdJR0lHSUdJR0lHSUdJR0lHTUdNR01HTUdNR01HTUdNR01HT0dLR0tHS0dLR0tHS0dLR0tHS0dLR09HT0dPR09HT0dPR09HT0dPR02HpsHRYOiwdlg5Lh6XD0mHpsHSMdIx0jHSMdIx0jHSMdIx0jHSMdHg6PB2eDk+Hp8PToTx3kSfNpBWkPD+pJNWkltSTLCkdMx0zHTMdKx0rHSsdKx0rHSsdKx0rHSsdKxxqJLuoJNWkltSTLGkkedJMSkdJR0lHSUdJR0lHSUdJR0lHSUdJR01HTUdNR01HTUdNR01HTUdNR01HS0dLR0tHS0dLR0tHS4fyfIlm0go6H4avwgJWsIEdNHCADk5wJRo2w2bYDJthM2yGzbAZNsM2sA1sA9vANrANbAPbwDawDWyOzbE5Nsfm2BybY3Nsjs2xTWwT28Q2sU1sE9vENrFNbBPbwrawLWwL28K2sC1sC9vCttKmRrfAAlawgR00cIAOThBbwVawFWwFW8FWsBVsBVvBVrBVbBVbxVaxVWwVW8VWsVVsFVvD1rA1bA1bw9awNWwNW8PWsFFLFrVkUUsWtWRRSxa1ZFFLFrVkUUsWtWRRSxa1ZFFLFrVkUUsWtWRRSxa1ZFFLFrVkUUsWtWRRSxa1ZFFLFrVkUUsWtWRRSxa1ZFFLFrVkUUsWtWRRSxa1ZFFLFrVkUUsWtWRRSxa1ZFFLFrVkUUsWtWRRSxa1ZFFLFrVkUUsWtWRRSxa1ZFFLFrVkUUsWtWRRS1bWkvrIWlIfWUvqI2tJfWQtqY+sJfWRtaQ+spbUR9aS+shaUh8PbAVbwVawFWwFW8FWsBVsBVvBVrFVbBVbxVaxVWwVW8VWsVVsDVvD1rA1bA1bw9awNWwNW8PWsXVsHVvH1rF1bB1bx9axdWyGzbAZNsNm2AybYTNshs2wDWwD28A2sA1sA9vANrANbAObY3Nsjs2xOTbH5tgcm2NzbBPbxDaxTWwT28Q2sU1sE9vEtrAtbAvbwrawLWwL28K2sFFLCrWkUEsKtaRQSwq1pFBLCrWkUEsKtaRQSwq1pJy1xIQVbGAHDRyggxNciWctORFbxVaxnbXkITRwgA5OcCWeteTEAlawgdgatoatYWvYGraOrWPr2Dq2jq1j69g6to6tYzNshs2wGTbDZtgMm2EzbIZtYBvYBraBbWAb2Aa2gW1gG9gcm2NzbI7NsTk2x3bWEhdOcCWeteTEAlawgR00cIDYJraJTbWkKN9USy6s4GErQ9hBAwfo4ARXoPoOAwtYwQYettqFBg7QwQmuRNWSCwtYwQZiK9gKNtUSve5MnYiBK1G1pE5hASvYwA4aOEAHJ7gSG7aGrWFr2Bq2hq1ha9gatoatY+vYOraOrWPr2Dq2jq1j69gMm2EzbIbNsBk2w2bYDJthG9gGtoFtYBvYBraBbWAb2AY2x+bYHJtjc2yOzbE5Nsfm2Ca2iW1im9gmtoltYpvYJraJbWFb2Ba2hW1hW9gWtoVtYVtpU29jYAEr2MAOGjhAByeIrWAr2Aq2gk21pHWhgSNRyWCiw6sX06lv73lUFxawgg3soIEDdHCCK3FgG9gGtoFtYBvYBraBbWAb2BybY3Nsjs2xOTbH5tgcm2Ob2Ca2iW1im9gmtoltYpvYJraFbWFb2Ba2hW1hW9gWtoVtpU2dfoEFrOBh01sH1e0XaOAAHZzgYevlQO31Fxawgg3soIEDdHCC2Co2HUF7FVZQtibsoIEDdHCCK1FH0D6EBaygbFPYQQOVxlpeHUEvnOBK1BH0wgIeNtO66Qh6YQcNHKCDE1yJqiUXFhCbYVMtMQ2JasmFA9SYrQNVNawLFUEDpfpg5y8YOEAHJ7gSVR+G9j7Vhwsr2MAOGjhABye4Eie2iU31YWizqD5cKJvWWPXhwgE6OMGVqPowTFjACjawgwYO0MEJrkB1CAYWULYhbKBsLjRwgA4etuMx9apWwQtVHy4sYAUbeNi8Cg0coIMTXImqDxcWsIINxFaxqT4cT9RXNQ8GTlAjeeyT6h8MLOAAFeHYxuoDfF7ZCbU4U9jADho4wCPY1EIqpS9ciedbtk8sYAUP29RanG/bPtHAATo4wZV4vnn7xAJWENvApvSfGhKl/4UOyqZ9Uul/otL/Qtk0kkr/qdFR+q+HsIMGDtDBmahEX1pIJfqFDeyggSNRWbiUOMrCC6U4lleteuW4v1zVqxfYwA4aOBL1AmxNE6jDLtDBCa5EvQr7wgJWsIEdxFaxVWwVW8XWsOl12I8iVIQqVIQunOBK1GuwNammdrrACjawgwYq7rEB1CxXNZehbrlatGR66fWFHVQEDbVefX2hgxNciXoF9oWHrWiN9RrsC2XTyutV2BcaeMQ9XrFf1RT3nG0QVlBrPIWKoNXUi+cvHKCDiqtx0AvoT9Qr6C+UTaOj19Bf2EBsE9vENrHplfQXrtwWi6252JqLrbnYmoutqVdhaxOqC+7chGqDOzeW+uACG9hjW6gVLnCADk4wt6b64c7tpoa4wBobSy1xgR302ITqdju3m9rdAmtsQjW8nQOljrdAAwfosbHU9RaYW1N9b+fGUuNbYAWxNWwNW8PWcmuqq6wWDYmS4UIHj8WpGh0lw4lKhgsLWMEGdtDAAR42vQddLWaBK1HfabiwgBWUTQOlxLnQwAE6OMGVqMS5sIAVxDaxKXE0Caims0AHZdOuocQ5UYlzoWwadSXOhQ3s4GFrSga9Rb5pJPUeeaGazQILeMRtTXjE1UyEGs7q+WJ8pdOFA3RQtiFciUqnCwso2xQeivMt+jq+6QJPHWdVF2JqOav9/LMJrkTl24UFrGADZXOhgYdNl1xqPguc4EpUvl1YwMOmCya1oAV20MABOjjBlahj4YUFxNax6VioazJ1ogUOUDZtWB0hL1yJ+kyELtrUiVZNW0jHzQsb2EEDByjbEk5wJapUXFjACjawgwYOENvANrA5Nsfm2BybSoUu8NSJFjhA7ZNaTZWKC1eiSsWFBazgYRvabioVFxo4QAcnuBJVFIa2sYrChR00cIAOTnAFqucssIAVbGAHDRyggxPEVrAVbAVbwVawFWwFW8FWsBVsFVvFVrFVbBVbxVaxVWwVW8XWsDVsDVvD1rA1bA1bw9awNWwdW8fWsXVsHVvH1rF1bB1bx2bYDJthM2yGzbAZNsNm2AzbwDawDWwD28A2sA1sA9vANrA5Nsfm2BybY3Nsjs2xOTbHNrFNbBPbxDaxTWwT28Q2sU1sC9vCRi1Z1JJFLVnUkkUtWdSSRS1ZWUvaI2tJe2QtaY+sJe2RtaQ9spa0R9aS9jhryfkxHAdn4llAqrCAFWxgBw0coIMTXIkVW8VWsVVsFVvFVrFVbBVbxdawNWwNW8PWsDVsDVvD1rA1bB1bx9axdWwdW8fWsXVsHVvHZtgMm2EzbIbNsBk2w2bYDNvANrANbAPbwDawDWwD28A2sDk2x+bYHJtjc2yOzbE5Nsc2sU1sE9vENrFNbBPbxDaxTWwL28K2sC1sC9vCtrAtbAvbSlt5PMACVrCBHTRwgA5OEBu1pFBLCrWkUEsKtaRQS8pZS6bQwQketuOtr02NZoEFlG0JG9hBAwfo4GE7pq6bGs0uVC25UDYtr2rJhQ3soIEDPGxuwgmuRNWS48WjTY1mgRVsoOK6UBE0UKoPFxbwiDA1UKoPF3bwWN5ZhAN0cIKHbWqFVB8uLGAFFVfDp5w/pq7b+e3IE5XzF2p5pVDOX9jADho4QAdl06Aq509Uzl9YwAo2sIMGDtBBbBPbwrawLWwLm3J+asMqu6c2rLL7whV4fmPywgJWsIEdNHCADk4QW8FWsBVsBVvBVrAVbAVbwVawVWwVW8VWsVVsFVvFVrFVbBVbw9awNWwNW8PWsDVsDVvD1rB1bB1bx9axdWwdW8fWsXVsHZthM2yGzbAZNsNm2AybYTNsA9vANrANbAPbwDawDWwD28Dm2BybY3Nsjs2xOTbH5tgc28Q2sU1sE9vENrFNbBPbxDaxLWwL28K2sC1sC9vCRi2p1JJKLWnUkkYtadSSRi1p1JLzq5nHDcV2fjfzQgcnuBLPWnJiASvYwA4etuPVBK2d37M90UHZlnAlnrXkxAJWsIEdNHCADmKr2M5v3TZhASv4tLXjbl/Ti+8CDRwHaoXO79zqz87v2lZhAxXBhAYO0MEJrsSjPrTjrlFTk1xgBRvYQQMH6OAEV+LANrAN2bRHjQZ2UDbtBGOADsqmDaCv4Z6o7+FeWMDDVjTU+ipu0UjqK7hFQ63v4F44wZWor+EWDZ++h1u0FvoibtHiTMWV7agEgQYO8LBVLc5RCQJX4lEJAg9b1fIe6f/cc4WHoupzrUf6t6rFOdK/VSmWgxNcgeqBCyxgBQ/bcYukqQcucMTu2c8vVp84wdx/e3mABaxgAztoILaCrWAr2Cq2I+fb8RHjpsa3wAZqhc7fNXCADk5wJR45H1jACjYQW8OmnD9u9DQ1vgVOcCX2B1hA2VzYwA4aOEAHJ7gSVR8uLCA2w6b6cNyjamp8CxzgYevad1QfjjtXTe1wF6o+dG0W1YcLD5s+gqwmucAOGjhABye4ElUfLiwgNsfm2BybY3Nsjs2xTWwT28Q2sU1sE9vENrFNbBPbwrawLWwL28K2sC1sC9vCttKmJrnAAlawgR00cIAOytaFK7E8wALqKPIQNrCDBg7QwQmuxPoAtRYmzKO0Gt/acbO0qfEtcCWqPlxYwAo2UOPgQsa3s8adNVbOX9hAje8UGjhABycKbMbWNLamsTWNrWlsTeX8uQzK+QsdZGueOa9lOHP+xAJiI+eNnDdy3sh5I+eNnLfBvuOMpDOSzkieOa9lcEbSGUly3sh5I+eNnDdy3sh5I+dtst3OnD+RkZyM5GS7nTl/IiNJzhs5b+S8kfNGzhs5b+S8kfO22G4rR3I8HmABKyjbEnbwsNlDOEAHJ3jYjjvxTS/XCyxgBRvYQQMHKJsWUjl/oc4fhDpTUBaq1e+5vwo7aOAAcwuNOsHcQqM9wAJWsIG5hfR+vcABOjjB3PtGf4AFrKDWYggH6KBGR+Og+mBaMtWHCwtYwQZ20MABeuI5eyDxOXtwYgUb2EEDB+jgBFeiY3Nsjs2xOTbH5tgcm2NzbBPbxDaxTWwT28Q2sU1sE9vEtrAtbAvbwsac41jYFraFbWFbaTvbDS8sYAUb2EEDB+jgBLEVbAVbwVawFWwFW8FWsBVsBVvFVrFVbBVbxVaxVWwVW8VWsTVsDVvD1rA1bA1bw9awNWwNW8fWsXVsHVvH1rF1bB1bx9axGTbDZtgMm2EzbIbNsBk2w0YtcWqJU0ucWuLUEqeWOLXEqSVOLXFqiVNLnFri1BKnlji1xKklTi1xaolTS5xa4tQSp5Y4tcSpJU4tcWqJU0ucWuLUEqeWOLXEqSVOLXFqiVNLnFri1BKnlji1xKklk1oyqSWTWjKpJZNaMqklk1oyqSWTWjKpJZNaMqklk1oyqSWTWjKpJZNaMqklk1oyqSWTWjKpJZNaMqklk1oyqSWTWjKpJZNaMqklk1oyqSWTWjKpJZNaMqklk1oyqSWTWjKpJZNaMqklk1oyqSWTWjKpJZNaMqklk1oyqSWTWjKpJZNaMqklk1oyqSWTWjKpJZNaMqklk1oyqSWTWjKpJWq7bEdPZFPbZeAAHZzgStQVyoUFrGADsTk2x+bYHJtjm9gmtoltYjtrSRMetuMxv6a2y0AHJ7gSdYVyYQEPm1oA1IwZ2EHZJNYVyoUOylaEK1DNmIEF1HbrwgZ20MABOjjBvId9NmNeWEDdrXah1uL81wE6OMGVqPmHCwuoMRvCBnZQNol1hXKhg7KZcCXqCuXCAupO/BQ2sIMGDtDBCWafwtl2eWEBtRYnGjhArcUSTnAl6gpFLSFqsAw8xkyNAWqwDOzgYVOThhosAx2c4ErUDMaFBZStCRvYQQMH6KAeX9Hm1lmF7pacrZTlxAZ20MABOjhBPRaj/eF8yOnEAlZQjx2d2EEDB+jgBFfi+ZDTiQVkyy+2/GLLL7b8Ysuv2PJdTZPa3F1Nk4Gx5buaJgM7GFu+q2ky0MEJrsTyAAsYW76rfzKwgwYO0MHY8v3slDy2fD87JcuJDeyggQN0cIKx5fsjH4jqj3wgqj/ygah+dko+TuyggQN0cIIrsT/AAmp0tMbK+QsH6KC2hQlX4pnzJxZQD5Fps+ic4MIOGjhABye4Es9HGE/UNtbed2b3iQYO0MEJHmsxtafq6H9hASvYwA4aOEAHJ4htYtPRfyoZdPS/sIGyaY119L9wgLJpC+noP7UBdPSf2sY6+l9YwAo2sIOyTeEAHZzgClT3Y2ABK9jADho4QAcniK1gK9hUCY7npbu6HwM7eNiOOceu7sdABye4EnVOcOFhWyasYAM7aOAAHZzgStQ5wYXYGjbNWh6Pb3d1PwYaKJuG5KgP/bhx0tX9GLgSj/oQWMAKNrCDBo4Dq9BB2ZpwJdoDLKBsWnRrYAcNHKCDE1yJQzYXFlA2jc5oYAcNHKAUS7gS/QEWsIKHomhIjgISaOAAHZzgYSsaqKOABBawgg3soIEDdHCC2Ba2JZsyYFWwgbJp91wGDlA2bYAlmwZ1yXYMlBosAwtYwQZ2UCe9opm0gnSVcFJJqkFHBvej16OrwzGwg8fRykQjyZNm0go6n74UKWIRHsNwNJJ09Su287/PpBV03kIQlaSa1JJ6kiVJ0oQOHmNdz19YiUrDC7WYsiu1jnaWrtbDQDUqiBRAI6fMurCAFWxgjyEZOZwjh3PkcI4czpHDqUQ6B1Epcw6iUuZ48rirjzBQq6qdQilzolKmaWsqZbTSypiTWlJPsqSRdERsWhAlQNOCKAG0ktr/T7Kk4681htr5T5pJ6yK1A15UkiRpwgYeFm1uNQMGDlCLeQydGvx6U7DSwCPC+d8tBkb9fYEOTlBhj5VSf19gAWsMeDsz6cQOYqvYKraKrWJr2Bq2hq1ha9gatoatYWvYdCw88ez1EeVOrVbAwAZ20BJ1nGpaBCXThQ6qf0q0gnRue1JJqkktqSdZ0kjypHSMdHg6PB2eDh2jjpagrrfXBRqoPNDIKOEuPAaxa+SUcCcq4S4sYAUb2EHZtI+eWXeig7JpL1cynqhj1IWyaTsoRS9soDr3RJY0kjxpJq2L1J3XjzvFXe+i68fd9a6WvH7cPO9qyQuc4Eo8DkXdFOw4FgVWsIEdVBuNSLImdHCCkh3JrY68wAJK5sIGSqZVU5ZeOECdZ4lm0gpSip5UkmqSImqwlHPj/FfVvmPXUn9dYAEreCzp0Aoq6S40cIAOKsNFK0iHvZOU36Ka1JJ6kiWNJEm6cIIrUYfBC7WYGnydSl6ocyHRTFpBOqUc2jQ6pbywghoRjanS9UIddzS8StcLD5WfcQ+XpkzUJ9c196E+uX483NTVJxdYwQZ20MABOiibllfp6tqVlK66ClefXNfFsDriui571REXOEAHJ7gC1REXqGBVaOAAHZzgSlSmXqhgTag/68IJrkTl3IXPdVNO6u1uF7WknmRJI8mTZtIKOrLtonS0dLR0tHS0dLR0tHS0dLR09HT0dPR09HT0dPR09HT0dBzJZto2R7Jd1JJ6kiWNJE+aSSvoOHRelI6RjpGOkY6RjpGOkY6RjpEOT4enw9Ph6fB0eDo8HZ4OJcY6UTvPkSNqJutL+5yOWEc3dVdPlw4649yrRZb0jKR6qs6tk45996Lj9zRpoV6sQAe1IEN4rK1iHjvxRSWpJrWknmRJI8mTZlI6Wjp09na8fa6r06qv81+ff62apkari1bQsXdeVJJqUkvqSZY0ktLR09HTYemwdFg6LB2WDh0UllA75UPbQHulZknUVxXYwA4aOEAHJ7gStXteiM2xOTbtopqeUV9V4AAdnOBKnA+wgBVsILaJbWKb2I6k0PFIbVUnHSlxUUmqSS1JEU/Ukh579/lp0pNKUk16/rVS7Pw06UmWNJI8aQYVrfgQahVdaOAAtYpTOMGVqHy7sIAVbGAHDRwgtopNiXc8gdPV8BRYQFWzKmyg6pnWWIcQzfOo4cl0S0MNT4ETlE1iHUculG0JD5umV9TwZLq69/MLHhqz8wseJw7QwQmuRB1bND+gJibT/IeamExzCWpiCpzgsbya6VATU2ABK9hAxZVYyagpCDUmma6p1JgUWMEGdtDAATo4QR2mNXxKxgsLqCO1BlXJeGEHDdTRWmOmZLxwgsf4nqt5vh3/xALWAzUk59vxT+yggQN08Nia5/Dl2/H7zLfjdzUmmS7L1ZgU2MAOemLR6HRhAXVzSORJM+hIQV11qE3oopbUkyxpJHnSTFpBR+ZdpIWR7jxxO7GB2j5LOEAHj+2jyyu1BF2obLvwWA0Ngg6MJ7WknmRJI8mTZtIK0oHxpHRYOiwdlg5Lh6XD0mHpsHSMdIx0jHSMdIx0jHSMdOjAqQsqNf4ErkTlqq4G1fgTWMFjk2iuTI0/gcfW0fmXGn8CHZzgSlSuatJAjT+Bh03TA2r8MZ0hqvHHdPWvxp/AAR42nVur8SdwJR65evSldPX9XFSTWlJPsiRFPJJFbTymqQO18djRpd7VxhPYQQO1pFPo4ARXorL0wuMoL+8xKaKLRL1RzXQ+q9YeOxqUulp7Ag/XOP/qcGkd1NoTeLiGBDrW6rJYrT2Bz7i6wlvxXd++8ktXfeWXrvrKL111teWYLqvVlhNo4AAdnOBKVOaea67j5IUV7LFg+lz3SSPJz88Cd3XnXLSCTMH1i7oOu7CCWpXzdzuoVdGw6RB6oYM6CGsb5EfyOh/c7Hxws/PBzc4HNzsf3Ox8cLPzwc3OBzc7H9zsfHCz88HNzgc3Ox/c7Hxws/PBzc4HNzsf3Ox8cLPzwc3OBzc7H9zsfHCzq2PHNI2hjp3ADur66PzdAeoKSbudUvjClXh+JE+5d34k78QKNrCDBirucwcy9ebY0SBg6s2xo3nS1JsT2EEDtbxT6OAEV6IS+UItbxFWsIGHbZ1o4AAdnOBKVCpfWMAKNhBbxVaxVWwVW8XWsDVsDVvD1rA1bA1bw9awNWwdW8fWsXVsHZvmYI63Ipj6eAIdnOBKVH24ULYmrGADZdMepfpw4QAd1Lppl9Mp9ok6xb6wgIqrXU6H7aOumTp2AleiDttL+5kO2xdWUMurFdJh+0IDB3iciBwV3dSxM87dUzlftDjK+QsLeBxKj/Q3dewEdtDAATo4wZWow/aFBcS2sC1s58fsNJLnx+xOdHCCK/D8MOaFBaxgAzto4AC1bk04wZV4TkydWMAKNrCDBg5Qti6c4ErU6fuFijCEiuBCBye4EnXCflxAm7pwAivYwA4aOEAHJ7gSO7aOrWPr2Dq2jk1n8EfLiakLJ1CXIlW4EnUWf2EBK9hAXfRo1HUqf+EAHZzgStT5/IUFrGADsQ1sOqsv2prDwQnKpm3ssmkTegFl00B5A2XTQLmBA3RwgitxPsACVrCB2Ca2iW1im9gmtoVtYVvYFraFbWFb2Ba2hW2lTQ05gQWsYAM7aOAAHZwgtoKtYCvYCraCrWAr2Ao21Ydjusn0xrMLj/OHwAIete+YJ7DzY5cXdtDAATo4wZWoy4kLj7U4prxMXUHjmLAydQUFanmbcCWqPlxYwAo2sIOKK7ExvsYaK+cvbGAHj/E9ZspM7UGBDk6QrTmwDbbmYGsOtuZgaw62pnL+XAbl/IVszcHWVM6fy6Ccv7CC2Mj5Ss5Xcr6S85Wcr+S8Ooou8WQkJyM5GUnl/LkMk5GcjCQ5X8n5Ss5Xcr6S85Wcr+R8JefVhXQtw2IkFyO5GMmVI6lWpHHMy5l6kQK1bi5sYAcN1AzMGczBCa5E5fyFBaxgAzXbU4QG5g6udqVxzFqa2pUuVKJfWMDcNdSuFNhBAwfo4ARzY7X2AAtYwQZ20MAB5q6hxqRxTGtaO+f2TqygBkrjcE7vacnO+b0TB+jgBFfiOcl3YgErqNMO2VQULnRQcbU/nPN6wnNiTyt0zuydWMFjLbo2t4rChQYetq4tr6Jw4QRXoorChQWsYAM7aCA2zeTpCkX9TYGKqz1K6X9hAzto4AAd1Fpo+JT+Jyr9L5RNG0Dpf2EDZdP+oPS/cIB5caUep8C8uNKbyQILWMEGdtDAAWotjoFS71NgASuotdCfKdEvNHCAHpMZan4KXInnPewTC1jBBnbQz4lAU5vTRSvoSO3z947MvqgmHct/TOSaXjkWaOCx/Mf0rumVY4ETPEzHWak6oi4qSTWpJfUkSxpJnjST0mHpsHRYOiwdlg5Lh6XD0mHpsHSMdIx0jHSMdIx0KNOPKW5Tt1SggxqvLlyJynTTdlCmX1hBbR3tPMr0C2XT7qdMv9BB2ZZwJerwb1pe5f+FFdT0ujaq8v9CTbBrV1L+X3jYhtZC+X/hSjzyX/M76pe6qCa1pJ5kSYp4jIBeEzaOCXHTa8LG0Uhmek1YYAcN1JIuoYMTXInK8QsP29FpZnpNWGADO2jgAA/bcXvf1GwVuBJ1XL+wgBVsYAcNHCC2ik3H9WMC3tR1FVhA2TSoyn/XmCn/L5RtCgcomwZK+X/hStTR/sICVrCBHTRwgNg6to7NsBk2w2bYDJthM2yGzbAZtoFtYBvYBraBbWAb2Aa2gW1gc2yOzbE5NsemynDM3ps6uAIdnKAm1LTTnpOFJxawgg3soIED9ESdAxzNjabesDHPf+2gllc7rY72Fzo4wRWoV4oFFlBxuzDH9+w10xqfzWYnKucvLOAxvjou6jVhgR00MLfmKNjKBHNrjvoAC1jBBvZcnGrgAB1k3ZTzuvmhLrVArZsLK9jADqrZTMGU8xc6OMGVeHa1nVjACqrprAg7OHJjnR1tVTjBlXg2tZ1YcgMYG8vYWMbGMjaWEv1CB9lYJPog0QeJPkj0QaIPEn2Q6INEV7/b0D0I9bsFFlADpXFQSuu+gvrdAg0coIMTXIk62F9YQMXVrqHD+oUDdFBxtWvosH6iUvrCAurQrD8779Gf2EEDB+jgBFegeuEC23mT3dT4dpElPYP6+XueNJOO1jzdLdFbwQILeNy3N1FL6kmHRndY1CEX6OA8b/ubGuROOnL+opJUk1pST7KkkeRJ6ajpaOlo6WjpaOlo6WjpaOlo6WjpaOno6ejpOLLbdQtHnXCBHVSfg4ZWt/Qu1Ig14QRXom7p6fRRr/4KPK5/xvkLDeygbFM4QNnOCBNciTrN1+LqNP+kmtSSepIlKaL2DtdupP3MNS4ubGAHDdSepOF0Bye4EucDPGxFw3kcnwMbeJxPa2mODL9oJHnSTFpBOmc/qSTVpJaUjpWOlY6VjpWOFQ71x11UkmqSVqQIO2jgAB2c4EpUrl+oYevCCjZQtio0cICymXCCK1EJr1s56ryLfz2a9c5/nEnHH2naUt11gQWsYAM7eCyiJuPVaRfo4ARXonL5wgJWsIEdxNaxKZs19a+Gu8CVaLI1YQErKJuG3zpo4ABl05AqmzVnqz47P5otTY12gQ3s4BFXU7JqtnPNw6rbzjUVqW4711Skuu0u9AdYQLVza3GU6Rd20EDZtLxK76bFUXpr9lAtdq7pOrXYuWbN1GIX2MAOGjhABw+bZtjUYnehetLPnVNN6Reyy64OGjhAKbRCa4IrUC/U8qN90NSJF1jBBnbQwAE6OMGVWLAVbOchvQgb2EEDB+jgYdP0jXrxLlSaX1jACjawgwYO0EFsFZvqw9EaaernC6ygbCaUbQgNlE2bRfXhQtk0UKoPJ6o+XFjACjawgwYO0EFsHZthM2yGzbAZNsNm2AybYTNsA9vANrANbAPbwDawDWwD28Dm2BybY3Nsjs2xOTbH5tgc28Q2sU1sE5sKiCYE1eAXOEAH1eHehSvx7Kc/sYAVbGAHDRzgsRbH6eFQg58OoEMNfn5MPw41+AUaOEAHJ7gSVQmOptvxKDG+41FijcejODjBlaicP841h5r2AivYwJ6Kiq0O0MEJrsT2AEsuw5nzJzawg5bLoJy/0EFsDVvHljk/Hpnz45E5Px6ddeuW4s5IdkayM5LK+XMZjJE0RtKwGTbDZoykMZLGSBrrZmy3M+dPZCQHIznYbsr5CxnJgW1gG9gGI+mMpDOSzro56+ZsN2cknZF0RtIZSeX8cVU01OAXqJE0YQUb2EGtm5ZBOX+hgxNciXqk7cICVlA2LaTOHy7UDOH5CzOzUDl/9LAPtfIFFrCCuYXKo4MGDtDBCebep1a+cwOolS+wgg3soIEDdDD3B71my4/u+KFWvsAGHnGPewVDDX7uWjLVhwsdnOBKVH24sIAVbKDidqGDE1yJqgTHjMdQK19gBRuoa9ohNHCADk5wJaoSXFjACmp0ThyggxPUWviByvkLC1hBPQWitVD77oUGDtDBCa5ENfVeqNHRTqDsvtDAATo4E5XHxwzLUMudT2WAMnZq31HGXujgEWFqj1LGnqiMndoJlLEXVvBY3qktr4y90MABOjjBFaiWOz9mVYda7gIr2MAOGqgnxs5gK8ZBzXWBBVTcIWxgBw0coNbChRNciTrOX6i1kE15fGEDNadWhAYOUNNqVTjBlag8Pu4fj3pO3zWh5u80DucEnkbnnME70UDF1bqdE3bCc8buxAIqrtZNGaudS+/eCnRwJipNLzwSpyqCJt8uNPDYhFUrdD6yeuIEV+L5yOqJBaxgAzuoQT1xgitRB+ELtfLaWDoIX9jADmottAHOB1lPdHCCK1EtNRcWsIINPOKqtKl3bj40qEfyBq7EI3kDj7nJh/aoI3kDG9hBAwfo4LEWD22s84nzA9U7F1jACjawgwYO0BOL1qIKC1jBBmotmtDAATqotejClXg+kH5iASvYwA4aqG1x4kpU/8yFBaxgA3VYFFnSSPKkmbSClLZFVJJqUkvqSZakJT9qghrfpnYzNb4FNlDrLqVy98IBOjjBlZjviRjtfE/EiRVsILaBbWAb2Aa2gc2xOTbX/qLdzA0coIManSlcifMBFrCCDeyggbItoYMTXInK6KJFV0ZfWMEG9txYZ0afOEAHJ7gC1Q4XWMAKHnGPqfGhxrdAB4+4x8z3UDvcPJ5nGGqHCyxgBbUWXdhBAwcomwtlW8KVWB9gASvYwA4aOEAHsSnPq1ZTeX5hASvYwA4aOMDDdkxXD7XKTR0gz1a5E9Urd2EBK9jADho4QAexqWnumPAeZ9fchQWsYAM7aOAA1W6oza3uuQtXom6sXVjACjawg7Jp9xwDdHCCK9EfYAErqPv1op5kSSPJk2aQKkM7UUs6hQaO6+0/43yH2IUTXInnq5JOLGAFG9hBjYB2V2V711ZQtgv1DrHAAlawgR081uK47TDULhfo4ARlO3ZttcsFFrCCDeyggbI1oWxdOMGVqBpwYQEr2GJbWO2ggQN0cIIrUTXgwgL267V4Q41xgQPUWgzhBLUWiqBsv7CAWoslbGAHj7UwbQBl+4UOTnAlKttNS6Zsv7CCDeyggQP0ROW1LnbV7KZ3Ag61tU3TGitXL5ygluzIIbW1BWrJNA7K1QsbqCXTOOgIf+EAHZzgStQR/sLDpmlmtbUFNrCDBg7Qc411LNfcsr6fGVjBBiqudnsdyy8coIPzes/ksPMduweO8yW7Jxawgg3soIHH6GgGTC1wFyqPLyyg1qILG9hBA48M0J56vp3twgmuRL1j8MICVrCBGh0TOjhBrcWxc6nZLbCAWgsXNlBrMYUGDlA2LYPy+MKVqDy+sIAVbOBh06m93uMWOEAHJ7gSz7d+aoX0is/jjvVQh5teJzzG+dbeEwfo4ARXot6BfeGxLaqW93wH9okN7KBsVThABye4EvVW0AsLWMEGHnGrVlPZ7SdOcCUquy8sYAUbqG0hhbL7wgE6eKxFPXEl6th9YQEr2MAOGjhArcWRb+pwCyyg1qILG9hBrYUJB6i1GMIJrkTlvKZB1f0WWMEGdtDAAco2hRNciTp2X1jACmrMtGQ1t7x63s7tpqa3wNzyansLLGAFG5hbXr1vgQN0MLe8+t8u7A+wgBVsYAcNzC2vTrOlq1K1mgUenVW6TlSzWaDzCxNciUdmXaieq+OBnXE2XV24As+2qwsLWMEGdtDAATo4QWwFW8FWsBVsBVvBVrAVbAVbwVYVtwob2BOPLX8OlNqlAhW3CSe4EvsDLGAFG9hBAweY202NUYEFrKDidmEHFdeEijuEDk5wJY4HWMAKNrCDBmIb2Aa2gc2xOTbH5tgcm2NzbI7NsTm2iW1im9gmNjVB6txT3VBLZ5l64di1Gy321MWeqq5HnZeoMSrQwAE6OEHZDlxnFp6o7seHsIINVENlEap78tiV1ewUeETQlcQ6M8uEDeyggYrbhA5OMDNAzU6BBcRWsVVsFVsdiUo9nTmqEylwglpN/a5S78ICaqCGsIHqRnWhgQOUTQOlF41duBKVkBcWsIINlE2bUAl54QAdnOBKHGzCM/W0kEq9cwMo9S5kYw021mBjKfVOVOpdyMbyCjawgxbJsM7UO9HBCWbirDP1TixgBRs4ooipuyhw5q4xM6XXeoAFrGADO2jgAB2cYNj88XiABaxgAzto4AAdnCC2gq1gK9gKtoKtYCvYzjT1A2uMuj9qHFj9UTto4AAdnOBKbA+wgBXE1rA1bA1bw9awNWwdW8fWsXVsHVvH1qMUuzqRAie4EpXzFxZQthMbqNyU4sz5EweoLCwH6sB6ZLeruyhQhw5toRHF0R9jgA5OMLLbH5ndru6iwMhuf2R2+yOz2x+OzbE5Nsd2ZveB5Tzi9APPI86JBdRq6ne1017YQQ3UEA5QRcyFE1yJNUqxq5UmsIIN7KCBA4xS7GqlCVyJ2sEvLGAFcxOWFucPXlqUYi9tgrmxSn+ABaxgA3NjlTxz9JJnjq5WmsAoxa5WmgvtARawgg3soIEj8Xy8/SHsoIEDdHCCK1HzfRcWsILYHJtjc2yOzbE5toltYjtnBLQ1zxmBEzto4AAdnOBK1CzghQXEtrAtbAvbwrawLWwrbfXxAAtYwQZ20MABOjhBbAVbwVawFWwFW8FWsBVsBVvBVrFVbBVbxVaxVWwVW8VWsVVsDVvD1rA1bA1bw9awNWwNW8PWsXVsHVvH1rF1bB1bx9axdWyGzbAZNsNm2AybYTNshs2wDWwD28A2sA1sA9vANrANbAObY3Nsjs2xOTbH5tgcm2NzbBPbxEYtqdSSSi2p1JJKLanUkkotqdSSSi2p1JJKLanUkkotqdSSSi2p1JJKLanUkkYtadSSRi1p1JJGLWnUkkYtadSSRi1p1JJGLWnUkkYtadSSRi1p1JJGLWnUkkYtadSSRi1p1JJGLWnUkkYtadSSRi1p1JJGLWnUkkYtadSSRi1p1JJGLWnUkkYtadSSRi1p1JJGLWnUkkYtadSSRi1p1JJGLWnUkkYtadSSRi1p1JJGLWnUkkYtadSSRi1p1JJGLWnUkkYtadSSRi1p53lJEepMoQoNHKCDE1yJ53nJiQWsYAOxneclJhygg7I14Uo8z0tOlM2FFWzgYTtenOBnp9GFA3RwgitRteTCAlawgdgWtoVtYVvYVtrOTqMLC1jBBnbQwAE6OEFsBVvBVrAVbAVbwVawFWwFW8FWsVVsFVvFVrFVbBVbxVaxVWwNW8PWsDVsDVvD1rA1bA1bw9axdWwdW8fWsXVsHVvH1rF1bIbNsBk2w2bYDJthM2yGzbANbAPbwDawDWwD28A2sA1snnncz/owhAYO0MEJrsSzPpxYwAo2ENvENrFNbBPbxLawLWwL28K2sC1sC9vCtrCttJ29SRcWsIIN7KCBA3RwgtgKtoKtYCvYCraCrWAr2Aq2gq1iq9gqtoqtYqvYKraKrWKr2Bq2hq1ha9gatoatYWvYGraGrWPr2Dq2jq1j69g6to6tY+vYDJthM2yGzbAZNsNm2AybYRvYBraBbWAb2Aa2gW1gO+tDEa5EnWtcWMAKNrCDqkZdOEAHZavClahacmGPGnW2NF04QAcnuBLPUwmt23kqcWIFtehTqBvXWnTNxV84QAcnuALV6BRYwAo2sIOydeEAHZzgStS05oUFrGAeJAanEoNTCbU/raOd2tX+FDjBlahpzQsLWMEGdtBAbBVbxVaxNWwNW8PWsDVsDZtmkLVh9QKqwAG6PimkgTi/OnPxgs/vzlxcXri+cHvh/sL2wuOFX7zzxXt+VObcI9b5+1U8X/79XLbjRFx9N0/u4vLC9YXbC/cXthceL3wum4nnCy+4nN4hPr0uPr1TfHqXuOe6qA0nmXVUn83SBYj6bAIr2MAOGjhABye4ErVzqeCp+2apVKj7JrCBHZRN66eZ9AsdnOBK1Ez6hQWsoIJprM5vRx27g14ftVRI9fqopYqo10cFdtDAmaheiaV9Rbd0LlQEbW3dvFkaEt2QUUXUK6ACGyibxuFMpxMH6BlXN2Suf12Jut16YQFrrrFut17YQQNZN91uPVdIt1svzDU+O4COJkQ/O4COXio/O4AudHCCK1Hl9Wir8rPXxxVX94cuNHCADipuF65E7esXFrCCDeygbCYcoIMTXIna1y8sYAWlGEIDB+jgBFeidvALC1jBBmLr2M4PqrnQwQmuRN0qurCANUfd2FjGxjI2lvLiaN/zs1tIszNnt9CFA3RQ2a1dQzc1T9RNzQsLWMEGdlC1RLuncuhCBye4EpVDFxaw5QopcTTVo9coBc5cCyXOiUqcCwuoRddAqU/hwg5q0bVP6tzoQgZqYVtpOxuHLixgBRvYQQMH6CAKJdnxAJqfbT/Hc2B+tv0cz4H52fZz4WE7nvjys+3nQgMH6OAEV6KS7MICVhBbw9awNWzKt+P5Mj97iC5UBBN20EBFGEJPVLYcT6j52Rd0YQUbqLhTqLgaVN1YvdDBCa5E9QVVbQAl2YUVPGxVm0Wpd/0ZtoFtYBvYBjal3oWyacMqyapGUkl24RG3aiSVZBdOcCUqyS4sYAW1Fhp15duFBsqmDaAsPJdBWXjhSlQWXljACjZQCm0spV7VxlKSHTjPZqALC1jBI9jxENw8m4EuNHCADk5wJeoIeXTWz7MD6Ojun2cH0NEMP88OoAsVrAkVrAtXojL2eN3c1BuKAivYwA4aOEAHZRvClaiMvVA2F9ZcHGXshR00cIAOyqah1hHyROVx00DpCHlhBRvYQQMHqL4gbYCzL+jElXj2BWlbKOfPZVDOX9jADho4QNm0CZXzF8qmramcv7CAFWxgBw1Uz5OGTzl/4QRl09ZUzp/LoJy/sIIN7KCBA2TdnHVTJejaH1QJLixgBRvYQQNl036mStDHf//3P/3217//65/+4y9//9u//Mc//vzn3/75v/If/v23f/4f//Xbv/3pH3/+23/89s9/+8+//vWffvt//vTX/9Qv/fu//elv+vkff/rH878+t/Wf//a/nz+fAf/PX/7654P++5/468fHf1pqOS5p9Oel1tozRHmUH4KUj4P0o9YpxHMiPQN4++Hv68d/33oswvOuFAvgfn8t6tGSda3F867ch2vRPw6yYiVKYSF6u/vnz5tvjbV4Gcc6fggxNiFaLMLzDhYBpt8NMErsCs/5jwzwvNf6Q4C5GUg9ZXeOwnOi+MMQa7MS+lzVuRbjuQ98FGI3lDqyXQMxyodDWTb7ZK0tFqM+77QTw37areu722O7IoMVmY+PV2QTw/TpLcU4XlufMcaPw3mc+n28VY8Xw1xb1eqHITZ7lt5NpQjPy8SXFLXbEfSg9hnhdZP+HOHuavjHq7EbTL3k/BzM51TWRyHqptbUPiPP6/N2wochyrtDUTd7Zn0ckx/nQpQHNbfXH0O0zUIcbaXnQiz/eCF2BbPWGIn1euRoo99fkdI8V8TKhyuy2bHqjE3aHh8G2GfYGrlTlPbhFp3vF71djOf98xjO5+3xjw8g7bGt3zVT5GU0av9xk7TN3ml5QvC8HfESod3fMbrljmEvWfbzjtHa7mjsK2Ms9vCjEv8QY7McVV/zPHeu0V8Kxv1t0nqe2jzvX368TTb7Z3HOTZ5Tc8RoPx6JjkT4MMawEXt5OR4afYny43Zp8xv2jvXu3rFfFz0xe63L81Lxw3Xpu+N7cSrgXC9L8uOW6fXd/WO7l94sgdsYN7Ol2/vZ0sfbo7HbskfvYWzZo1Xs4y07d1s2d/XnRiZGtZ9OINfumJC7WF0v+2l//DgetqmlxwfO47BwLP9HMbbLsfKqoj3aZjk2e+nxcHqk3PO20IcxPrNl+odbxvrbZx22O4c7OgByQZ53/j5ekO11zlx5ofNyxP5djM2Q9PKIYe2l2tcG5N7Zi603z162h5fJ+ejDHx8eXkbZLkTsHfV5s+XjGJvd9Pi4daRLXa/btd6PoRe3nDHW60XbzzH6+we5Ye8e5HZ717N45GiUUr62l7eal/P98XHKjrm9esxz22FfjKHXQV/nx7a+GGMSY34cY1s7jlnMPJMq5eMoXt/dtvtsyfGoP1w7fSbj1oMD1CbjfDcez3sMWdSfNxnmB4fs/XJYVNL2WoB+txybfV1v+LnOgV73sB8P1767fGojD5P99YSw34/R6yPWpNfXA9zPs1/fcPk0yx+5f7WWB/x2nAR+Zf9qzRnR2j6MMfsfu389N2eP5bBNrszdienDex5l28uR5Xkx9UOMXT1uObF5fBH6Ze8ot2MMz2nJMV9OCH8XY72/h63H20enbSW1kpdg09b8sJKuTSV9nh/n+WB5Fuf1wf6x2rsXHbvqo3uNcf9iflh+1nY4PE+hjnLxUYztjj6Y/h/Wvpa0+tz0dQvhYR/GWPPtewhleyMj57LWY324FOWx20dzSm3Y6wT++inEdjQmo/EapM37QXp/jLw3NesmSHs/acuj/6FZ+7xz37IeN/v4mqU8xrsLsi3ILW9r1P5a1OvPg7qbjNJN1uu65eVc/+fZ/Mfa3iiKjfv4eA5bp+If3yfKvK3VX2dwfg5SdpXwkVEO7h9OwGyTZuS14CybpCm7eqr23WtUF2XIf75ztp2+zT1k2cuCtJ9vne1u1qw8/1j+Mh81/HZVfm6OvChtj4+rsqZpPtwyRm0v9nq2/vOA7GakWl15kPrhAujnJdnsq92Y3h8vO9rvb0g+3k+a3d2nm0mzvWtzN2l2N6DuJ82+KOoZk6sors1ETqm7na0xYfh64Kzdfwry9gzqfjl6zhs8jy6Pj5djV0cmJ3eP8vi4kNT9PL/lVIxt7p+3b9hd2/u7a/uO3bV9y+66v9dozMeMD+8ebyJ0fZb6HJDZ/OOegra9Z5ol/lla28dH8F2Q9sjS2h6v1xC/CzLf703Y3ZO62ZywC3GzO+H2mmzaE+4OaXk99/7cdska0krZnJ71/TTqrU6gsrstdfe2+H51Opc0tl2d3RwVUxlPHB+Xs32QxY5WyybIen+H392aurnD70Lc3OFvr8muH2c3pFyvzufl7xe3y6CXZfbNqdX2RMJ6HjX9tST+dOm831c59D5vsm3q6u7ewe09ZL6/h8y395Dba/LVkjjpDp0vMX43pLsbS7c74NrbQ7oLcXNIb6/Jl4f0ZS99vRT51FFG75G5ponKbrvsb0/dam4c31BQ/f2C6u8X1PENBXU/ou+eYNojL4WstE3T6u7e1PHS/phlWo9NSfbNLrbyrvTzXOjxcUXej4czHvOLY3qva7T47j4/E5HPa7z+YYz97al7e/ru9tTNPX2+3b56f002e/p2RNuajOj4Wgyr2WtkrX08orv51GVcKY/1xRh5m2wbY7+H3WpMLvP9K6n5/pXU2vb23WqrKbubU/e6grdLca/bqay+OzO902RddtOgo+QNrvF6c+q59381iH0xSM+OqeMjhpsg8+3tsl2XvC90fFD6i+vC4yGjvpTSTwbJObLjM7dfDNLyuuP45ueHQer2DtVzEicv15/8snF+bsZ/fEM76y+CrNg+z3uz64tBWnaTrdfrws8FudlZW3f3qe621tbdjaqbnejb5ZjZDbbmyw3m3y/H3SDj8dUgeaB54vhakOcMap6oPtl3YbaPCWRhW68nEp/c2SY722sefy7IWAT5OAE/cQz/8Hqo7u5WefZQun981NqfM997IGZ3p+ru5eE2yPO0Lu/eP4+zmyC7MwHPKabn5P9mbdrbZ95191TMvXOrbYi7D47dXRPfrMl2RLMfovrsX4rRSpbV50HCvxrj8XaMxgnJa+5/Lkae5rXXpx5+jrG7R3XzKuIXMW5dRezXpfecsu9jvh/ji/vY85Z7Tvv1+fG23T9pNHjooW4ectwuiGfT8fP07OPysX1o6u7GXX/wxvXCumwSd/fQVGF6qLw+Kf/JQc1zxDY3e1nfPyV+48Zw7dvmgezkftaPj69otsvRc5aqv+wevx+O3XGu5iGq1/H4+Di3fW7q3gxT/YabU/X9m1P1/ZtT9RtuTu1H9N4M0z7GvRmmurs1dTf193vHvcfWd7dz7m5Zf3/L3l6Tj2vHeLx5jrxP2ZaltHdfXzy/rZ7PoNXd+e3+jtC9O/V199TU7QfYt6szs/mwrzE3qzO+Y3X8j16dlUcYezx2q7P+yD3NuEVufWyupHzXB10qO1qGqD8Ph7/9tPR+KXLS7fVQ+ful2B5t895lL80/XIq+PYPJZ8ePs5n1tSB6c3LenXp8LYjeWhdBXiZmPzOouTLPHXYzqOsPDfEcyDxIPdk+XpX1HVtmfceWWd+wZbaZa4+8u/3DQ36fOUYMniQdpflXg+Rk2/OOe/tikN6Y/x9fXZ3WYgsPa5tT3V88RXXvGLF7jOpbjhHD8gUhw3yzOtsHqWz2zB2bL4/pjk8FudXpXnf3q8bIWzzHhyo3q7M5Xb3b6a5uuo8vzW61DmuW4M0rxO3tqputw3XtdtfbrcO/CGMta9Lz8mx+HGa3yx4fhIpt3F8f+f1pG7fH+5Oq7fH+pGp7vD2pug1x75Lk/pr4Zk3en1Tdxrg5qfqrGI+3Y9ybM2u7Z6p+uOi1r43pzcndX8S4Nbnbtl3/9+b/fhHj1iTAfl16PiPfXu/g/245/I9ejluTzPdjfDHnbk4yt93jVHcnmX+xs9/cQcofvGHuTRC33SNMdyeIf7EgtyaIW3378N/qfH+CeLscNyeIf3VyZy8nd+2Dk7u2e5Lq7hniNsjN6+/tqZ33fGLv9YVWP2/b1t8/d2j29rnDLsTNc4fba7KZqN6fLM+XZyA/Pt5+x/2l7dnyyLf8PHFtzpZ3QTwH9Ynla0HOTxRdU/fb8/bt3H1jpnl8/eR/Dk7+X44ynz35f7y8oLpt+mXW/paG/f/d0vjcuHT//33+//dBvqEqbl8MkxM9tTzml1KnUs9q2Rzx7O1HVNvuJX+3DzRW3h/S7abN+ernVm5f3eVL7ZwCtC9f7+oO3xXmOd//5TB5UnOE3GTO7u0/+Q6il5s9P78T9xcziq2+zCj2L05L8pTaY42PpiXb7gUvd+c2t0G+ZR7+7oj07xgR+44RsbdHZN8U+eh5hvZ4vPYzfq638tHGS5hNs2jZDu3tFs1dmOGZOsNfGiPHJ0LMfHvpmN2/FiLfrTSmf/gakH2n9oPPKzy+3Hiek6PPIB+3e+8feO15o3W+3s/7eYa17Z6uutkv0vz9R1Wbv/2o6jbEzdNwf/9R1f2I3usX2ce41y/SZnt/NmEf495swn4Pu9Vz0ubbH57Yhri7d9xek4+nI+a7nQC/SPu8JzL72KT97rGmu1ff6/3Hqdt6+3HqbYibG/b2mmzSfjuiN6++1zfMqu6X49Yts7befqNa37196O6l93Y57l3KtF88v3fn6nAf497VYX/094f0G/pUt8txb0h/8aKNvCCb4/X9g797W8dmT7/3QPb+Ezy3zlx6ef9Z6l7efpZ6G+JeCbu/Jv61Ab3Z6Pp4+7yll/efpP5FjHvTmG9v1tr3F2A3H8fcfl/p5oOUuxg3n6PcfqDk5pOHt2NsHjzcx7j33OH2LW73r2m3nwq899Rh+5ZHdts3PHXY2h+7Nnf31fYNz/xuP4Rzc1+9HWOzr+5j3NtXt0+n3N5X27c83Pr25U9v7z6Wuv0W1+sHW15fv/7Te2l63zX9VV59VNtHM46/CDFfPpngH4aob08V7gbjkbemnmdAczMY3/COv/4d7/hrbw/p7rb0yBcXjB/629v9CJ2PrYyPI+xOxOzB7fWX5snffV5tezJXOZmr7cMY3bYXgvc+3ND83V10//Rl5/MAwx4ff+qp776xdDNj9yFuZezuWzw3h2N7bzx7jZ744SZZb+/j6+19fH7DPj6/YR/fPvV0cx/ffkOw8hGeJ78syCdiGN0KZh/H2H+d7dH5KNrD/eNM2T05dTNT9iFuZcqYf2jh+HE45sev9N5/RpAN8/rKo999RvB2jPV+jJfW/s99zpC3gs/y8ScA+/bJqZp9ef31bUW/D7I72tfGPvYybfLJIHku2F4z95NBjCUZ6xuCvMxVfur7jCVfyD1KbV/cOCtfamWPWr8YpOWpWG/943G9/dXLOr80ItbzSGWvtyd/tzK3vwK6SZtp2yngO69w69uPnVRivH5I/vcLsmseMY+1cXt90Pen+du5+7JPpze3v3787qfP0e/uQR0ve48Yj9ePtf0UY/fcVCmPzmefHsM+XpvtvdJ8rW9tLzXg98O6DTLZNvPjnWT/RdLbn0bdRuk06LptvvjY1/arKbShvG7i9YnvmvacveivPf6f+TaqqVftTOAfv0D3mS9P5qOc9npd+KkYK88Un1lTv7hlnKvcJ88vRpmFc5JZPx6T3SPU987gtxFuncHvv9o26XV63tP66PFY292QWo98Q9gqH54n7kOUfJx8vc5gjPvbZI5M/zLdvpi5c9KfO9fmMtW2n6K6dfL9ixB3Tr6tvN2V94nh2H2g+RdRjCj1i6n7/EsnSv/4usiKvb1p9iHubRr/YzfND8Nh/uVN01+ifLEerkcev5+8Pq7v22/R3SuI+xC3KuJ+XYwTmjUemxHZ3RS6N8GzDfGc439wlBllfS2I033t3h5fDELvtbt9aX993n99aVvY1OftJ7G+6wtfNaPU1xT+/Re+7gYp9YtBeGdAtVG+FuS5Cvl+zcdsHwZp++cneLi9fPwRats9AnX3JoJtPyZx9ybC9iEo8u9Rd2vz7l2q3bzk3TXZxTDLjmn78Tuw95fDeIrKfvx66o8xrNe3j5z7ELeOnP3tV/7sByPvTttsazMY2wNNzhWNPtsmyO7KKp/AHK9f5pufWAw+3fzjC1Q+tS5m2Q1v074cJFdmPNaXg+Ts2Xj9utfP+/r207qZtbZ2MezdM5Fh756I7Nbj7s2VbYybN1ds+92mmzdXdj35bVkm/np9C8zPxwV7/6rK3r+qev9ZJ9/ers+d4zkJah8Pxu7rUTcHYx/i3mDYHzoYJSfc+g+fW//dYPj7g+HvD8Z6+9C0fXY0n6Vt6/UbIZ/5bjzP0T1jfPzFdvNveI2kjmDvnv3sHkEdvO+s2WYxvuOc1L/hnPQXH7HPNz+1189x/fz9eduWUt5i8/pJ73l/MTp3dXr9YYr7M0Fa3i5/3mlqH6/L7uNR9/K27N621Gn/7n3Wzcr092ce+rsH/O2q3D3i74PcPeTPbzjkb78+X17eY7dezk1/+vq8bd/td3d+eneP6t7k8n5dFs/Qrpdnvn9el+1c++vjvOO1O9c/E+TemzV/FeTWmzV/EeTemzV/EeTes9Zl9xBJfeQDsPV18tE/EWM17mH0l7mc9vPDLNsgfJz4uSqPLwfJ5un++p6R3wWx9/e1/ZJYHifW68Xl51aHm93P6eX2xSCDgR0vrTc/Bxnbe0zfEeSHZ8Be37vy08Dug9Tssa/1dT/5VJA2uGc+Pw5Sth2m957/HN/w8NR4/+Gp8f7DU+MbHp7aj+i95z9Hef8V/6VtX9B97+1L+yA33760DXL3EdD9ktx8+1LZPmVz++1Lvwhz99Wrvwpz8yVO+5G5+RKnfZCbL3Eq7e03Dm2z5+ZjuvsY9x7THXU7X3XnMd1R1/ZG4q3HdMf+MZd7Q7rdtPde4vSLffXuS5x+EebuS5x+FebmS5x+cVaRl7BrvE4M/HxC0N7us/5FiDtTT2N3p+obQtybvfrFuR7P/Y2Xpfh5QH91SXDrRVC/CnLrRVCjt/cvTrZBbg7rdmrh5c5K++rsxMoQ/cMQs787ETf6fH8ibuy63+9OxO2mNzrTrM8zvpebw73cjmGz5p23x+v9rk/EGJVJo/rDjYCfCpC9fSNgvxh5lBmvj+t+alVaTvY894+1WZXxh67K61cpXq5Ffr8Y8w9dDCPfXs9Wf7cY4+2nU38R4tZhYbz9dOpuDm94NqqN+fqo7k+DsZvCuzdBu41wa352Oxd5c3p2/62Se7OzY8xvmJ3dvhbw5pW/f8OVv79/5e/vX/n7N1z5b0f05pW/f8OV/24W4/aV/zbI3Sv/8g0vf9ovyd0r/93k0Ceu/Pdhbl/5/yLM3Sv/8viGK/9tkLtX/o+3X9C1zZ67V/7bGDev/Of7V/7zO6785/tX/vtNe/PKf7+v3r7y34e5feX/izA3r/y35wK3Lqj2ZxN3rqd2lf7m9dT6juup9Q3XU9uWhJotqq2ujxuatjE83/fTVvliDI6e/bGJMbdfYc2v4vzYHPFzjLffPzLffv/I/Ib3j8xveP+IP77hbHX7JGTeL3veyn9t5n7cDlFrrkv94avan4lReEy1jo+Xw8s3tFZ5+YbWqrJ7COnulwZL/ZabIdt5boL01xdn/PwGI9+tz83P0HmZb1/SeFnvXtJsQ9y7pLm/Jr5Zk+2I3voM3TbGzc/Q/SrG4+0Y9z5D5/Xu+yTta2N68zN0v4hx6zN0Xref+Ln1fs1fxLh1ubpfl3ufofPdPa7vWY5bn6G7H+OLOXfzM3S+ffrp5mfofrGz39xBxh+8Ye59hs77dibi3mfofrEgtz5D59snoG5dXvr2ttTNy0vfv3Tw3uXl/vTh1mfofPfEz93P0G2D3LzHVt9vhPK+3j932L1x5+a5wy7EzXOH22uymQ6t7zdCub3/mVP19749HVq/oxGqfkcjVP2ORqj6PY1Q9Xs6mOp3dDDV7+hgqu93MNVv6GCq73cw+fblffcONMO/4UAzxvtD+h0dTPV7Opjq93Qw1W/pYNrOEt2ax9zPM92Zx9w+6HprGfaPyt5Zhl+8RIEab/N1yu0zb2IYvM5hrPbFIDPvuNf18rT+J1/nkHfMn/jx6tjuU7J33wmxDXLvc237ELc+1/aLELc+17bdLjw2cxzLv7hxfwjSvxqkEqR9vF18vt2i8osQd3pDfD3+0BB3T923A8qDEO7zq1slz1arr69WkNcl+XKQmZfdT/xyEL7+tA2yfZnSzb7D8W5t/8Wr4Xhsp/Qvvl0up/6e+NHTbts37d0aiv27+m4daXfvP/R80vV5Tfb6YPcnYvDiwifOL8bIuZTnYfeL73KcneX46jslZ14JPcN99Z2S+breJ351PPJa6hnj4+2yfU+n5YRuNx/vx5hfe9dn57Z0f31G7nMx6K71zT62jcFrOvtsH8eYu8eonv8xP1BW/ON29Ln7hFTntZJ9LNucp++XZOaSzN2S7F6FwFc+xuP1iuETy1EfUQhnbR8/8TB3V6e+8l6dr9ev2fwuyO7Jf+MlFS+vXxvl/i4y875S373+cO6uw27vIrvX493eRX6xJPd2kd10+81dZLsct3eR+R27yPpDd5GVD3Xbo3x8hJi7p9qs5ieTrK6X0jx/irE7+Hu+gWD46wd65u11eZ7g5NHu4Y/NuvRvWBf7Y9el5HcD7Id3/nzqrdS5n1or/Wsx+H6B1f4dMeYXY+Q9kOcW8i/GyFv1z3BfHlNnTNsXY/DJgNY2bz7ffoql8ypKez3f/umpg/72i35/EeLO9e3s/oeGuHeJvB3PxjtGm3/8WZq5/RbEnZcVbpeic4nd19wsRX2/gu2emLpZwfYf+qnchan24brsYxgfSR0fj0cf+9fH3vri0DbIvVm+fYhbs3y/CHFnlm/7RatbV+n7b2LduUpvb8/Jt7fn5Pffinx9/cvj9Suen/ri5IOXHj2jbL6fue1Fuf3hym2Ym/voNsS9fXQf4s4+uv8G780vcG5jvP+d1/v7yK++W3tzH6nfs4/U9/eR+v4+Ut/eR3adE5PW7Vlfm2F/nLzVBfDHd7PyIFfHy9dS7i/FMt6D/zKYPy/FNgSvFH+8zgR9IsSsvMf79aMvP4/F3L4T717L9dw9AH+35Xp3X//1vU+vn0r63crse/t4tcEY9lE//a+C5CRdGf748PR4dwep8gK4VkrZrM6u1eg5Epn6tb1+geJR7g5s97zQ7/O13/H+jvacquzMOG62zfqG3v65vqG3/1cbmM/hPDfwR2/nm7vnHb5nLzHjDPX1fbS/G9hdI3rhu2u1bGbH9kFeHgGxtQmy3p+nW4/H2/N02+W4OU+nGxzvztOt3RtH783T7YtAoUmvHN9d+7AIrN19vjz6v7yh86fT5n3n1p3vA67HZhebeQvmtZX1526ntXte6jmZlelf7HU2ed4/7j6yDL0+S/fzNtked+kAXa8tKJ8IsTine52g/1QIp4f05eW+nwhRH3w68vH66chPhOAJhdrr15aiN0K8PH32mRD2YLqgjq+FeCnFL58B+VSIfGSsvvY4f24pRoZ47df44lJ8NUTu4PX120qfCTFoshj2tY068oShDv/iUuTXO+qYj7dX5GshGm38bc7+xRAcSB5f2qiNB0Xba7/4zyHW7r5Tn7Ssztd3CK37i5Gnoz+8xv9Ta8K59esrqj6zVcvjpRP5a9n+yCdeniG+lu2lcFStjy+uyCDE+yvyxRCFEv7ah/SpEJYXs2WsL4Z4+RLy4+0V+WoI+m3L+tqxqLJRXz839rkQD0Ksd1fkqyEqN1fqa5/tzzVn+wTTvZqzPXFcPaeelz3Wh7OCa/eOvueJWk4t2tq8XqP/kXNPz12URHk5Ufn5VNx2t1d4zPbxcYTtgN6cZt0GOWZIeU3+o30xzLLGa9RfJ2s/FaTmXasn9q8G4SWfr28L/FyQZsyCj/HFfXXmx63XtLbZV+8GeTkz/2SQmQM75/hakPuT4L8Y2ns3GH6xLHfvDvwqzM3bA2vUbxmZUd+9PbAPcev2wC9CvHl74F4/wPbVMHzzdzxea8n9afnBB9BHW18KMfNMprwe8j4TYjkf/niUr4SoD27kP3r70lLwmdDjY/BfC8G3cWf50oqU8jKDtr62FI1P6/ZH/1KInhNgz+O2fRhibV/B9PYFWGl5KvTMkK8NRs+Xg5fX11J8dTy/FqINXnzyemXeH3Y/RO5bzR/t/RD+pRDOp8/85azhUyGcpXiZYvhMiFWZYrCvjcXMDvknjrdD1K9t1JnH1TZfzrA/FSLnVtvrcehTISYr8vLEwadCDOaN1hc3aj6E/ky4Ly1FrZXLwJe7D58KwUPK1e3DEGttb4byQq7nRRSVb95fjMVl9fpSntWW9x9rW/VrIXIPf+L4WgietWzdvhiiEmK8HcK+uhR8JX48vhZiMBarvL0UP2/U//n8v3/617/841/++vd//dN//OXvf/v351/+9xHsH3/50//665+v//t//vNv//ryX//j//23+C//6x9/+etf//J//+Xf/vH3f/3z//7Pf/z5iHT8t98e1//8Dz8+geHD7H/+02/l+f/n8Z6EZyH05/9v+u92/Pcxjv9+/ME43lAy3PrxD0W/Mfz4jfU///tY5P8P"
|
|
2612
|
+
"bytecode": "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",
|
|
2613
|
+
"debug_symbols": "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"
|
|
2614
2614
|
}
|
|
2615
2615
|
],
|
|
2616
2616
|
"outputs": {
|
|
@@ -3311,12 +3311,12 @@
|
|
|
3311
3311
|
"type": {
|
|
3312
3312
|
"fields": [],
|
|
3313
3313
|
"kind": "struct",
|
|
3314
|
-
"path": "ContractInstanceRegistry::
|
|
3314
|
+
"path": "ContractInstanceRegistry::sync_state_parameters"
|
|
3315
3315
|
}
|
|
3316
3316
|
}
|
|
3317
3317
|
],
|
|
3318
3318
|
"kind": "struct",
|
|
3319
|
-
"path": "ContractInstanceRegistry::
|
|
3319
|
+
"path": "ContractInstanceRegistry::sync_state_abi"
|
|
3320
3320
|
},
|
|
3321
3321
|
{
|
|
3322
3322
|
"fields": [
|
|
@@ -3358,7 +3358,7 @@
|
|
|
3358
3358
|
},
|
|
3359
3359
|
"101": {
|
|
3360
3360
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/aztec-nr/aztec/src/macros/aztec.nr",
|
|
3361
|
-
"source": "use crate::macros::{\n calls_generation::{\n external_functions::{\n generate_external_function_calls, generate_external_function_self_calls_structs,\n },\n internal_functions::generate_call_internal_struct,\n },\n dispatch::generate_public_dispatch,\n internals_functions_generation::{create_fn_abi_exports, process_functions},\n notes::NOTES,\n storage::STORAGE_LAYOUT_NAME,\n utils::{\n get_trait_impl_method, is_fn_contract_library_method, is_fn_external, is_fn_internal,\n is_fn_test, module_has_storage,\n },\n};\n\n/// Marks a contract as an Aztec contract, generating the interfaces for its functions and notes, as well as injecting\n/// the `sync_private_state` utility function.\n/// Note: This is a module annotation, so the returned quote gets injected inside the module (contract) itself.\npub comptime fn aztec(m: Module) -> Quoted {\n // Functions that don't have #[external(...)], #[contract_library_method], or #[test] are not allowed in contracts.\n check_each_fn_macroified(m);\n\n // We generate new functions prefixed with `__aztec_nr_internals__` and we replace the original functions' bodies\n // with `static_assert(false, ...)` to prevent them from being called directly from within the contract.\n let functions = process_functions(m);\n\n // We generate structs and their implementations necessary for convenient functions calls.\n let interface = generate_contract_interface(m);\n let self_call_structs = generate_external_function_self_calls_structs(m);\n let call_internal_struct = generate_call_internal_struct(m);\n\n // We generate ABI exports for all the external functions in the contract.\n let fn_abi_exports = create_fn_abi_exports(m);\n\n // We generate `_compute_note_hash_and_nullifier`, `sync_private_state` and `process_message`\n // functions only if they are not already implemented. If they are implemented we just insert empty\n // quotes.\n let contract_library_method_compute_note_hash_and_nullifier = if !m.functions().any(|f| {\n f.name() == quote { _compute_note_hash_and_nullifier }\n }) {\n generate_contract_library_method_compute_note_hash_and_nullifier()\n } else {\n quote {}\n };\n let sync_private_state_fn_and_abi_export = if !m.functions().any(|f| {\n f.name() == quote { sync_private_state }\n }) {\n generate_sync_private_state()\n } else {\n quote {}\n };\n\n let process_message_fn_and_abi_export = if !m.functions().any(|f| {\n f.name() == quote { process_message }\n }) {\n generate_process_message()\n } else {\n quote {}\n };\n let public_dispatch = generate_public_dispatch(m);\n\n quote {\n $interface\n $self_call_structs\n $call_internal_struct\n $functions\n $fn_abi_exports\n $contract_library_method_compute_note_hash_and_nullifier\n $public_dispatch\n $sync_private_state_fn_and_abi_export\n $process_message_fn_and_abi_export\n }\n}\n\ncomptime fn generate_contract_interface(m: Module) -> Quoted {\n let calls = generate_external_function_calls(m);\n\n let module_name = m.name();\n\n let has_storage_layout = module_has_storage(m) & STORAGE_LAYOUT_NAME.get(m).is_some();\n let storage_layout_getter = if has_storage_layout {\n let storage_layout_name = STORAGE_LAYOUT_NAME.get(m).unwrap();\n quote {\n pub fn storage_layout() -> StorageLayoutFields {\n $storage_layout_name.fields\n }\n }\n } else {\n quote {}\n };\n\n let library_storage_layout_getter = if has_storage_layout {\n quote {\n #[contract_library_method]\n $storage_layout_getter\n }\n } else {\n quote {}\n };\n\n quote {\n pub struct $module_name {\n pub target_contract: dep::aztec::protocol_types::address::AztecAddress\n }\n\n impl $module_name {\n $calls\n\n pub fn at(\n addr: aztec::protocol_types::address::AztecAddress\n ) -> Self {\n Self { target_contract: addr }\n }\n\n pub fn interface() -> Self {\n Self { target_contract: aztec::protocol_types::address::AztecAddress::zero() }\n }\n\n $storage_layout_getter\n }\n\n #[contract_library_method]\n pub fn at(\n addr: aztec::protocol_types::address::AztecAddress\n ) -> $module_name {\n $module_name { target_contract: addr }\n }\n\n #[contract_library_method]\n pub fn interface() -> $module_name {\n $module_name { target_contract: aztec::protocol_types::address::AztecAddress::zero() }\n }\n\n $library_storage_layout_getter\n\n }\n}\n\n/// Generates a contract library method called `_compute_note_hash_and_nullifier` which is used for note\n/// discovery (to create the `aztec::messages::discovery::ComputeNoteHashAndNullifier` function) and to implement the\n/// `compute_note_hash_and_nullifier` unconstrained contract function.\ncomptime fn generate_contract_library_method_compute_note_hash_and_nullifier() -> Quoted {\n if NOTES.len() > 0 {\n // Contracts that do define notes produce an if-else chain where `note_type_id` is matched against the\n // `get_note_type_id()` function of each note type that we know of, in order to identify the note type. Once we\n // know it we call we correct `unpack` method from the `Packable` trait to obtain the underlying note type, and\n // compute the note hash (non-siloed) and inner nullifier (also non-siloed).\n\n let mut if_note_type_id_match_statements_list = @[];\n for i in 0..NOTES.len() {\n let typ = NOTES.get(i);\n\n let get_note_type_id = get_trait_impl_method(\n typ,\n quote { crate::note::note_interface::NoteType },\n quote { get_id },\n );\n let unpack = get_trait_impl_method(\n typ,\n quote { crate::protocol_types::traits::Packable },\n quote { unpack },\n );\n\n let compute_note_hash = get_trait_impl_method(\n typ,\n quote { crate::note::note_interface::NoteHash },\n quote { compute_note_hash },\n );\n\n let compute_nullifier_unconstrained = get_trait_impl_method(\n typ,\n quote { crate::note::note_interface::NoteHash },\n quote { compute_nullifier_unconstrained },\n );\n\n let if_or_else_if = if i == 0 {\n quote { if }\n } else {\n quote { else if }\n };\n\n if_note_type_id_match_statements_list = if_note_type_id_match_statements_list.push_back(\n quote {\n $if_or_else_if note_type_id == $get_note_type_id() {\n // As an extra safety check we make sure that the packed_note BoundedVec has the expected\n // length, since we're about to interpret its raw storage as a fixed-size array by calling the\n // unpack function on it.\n let expected_len = <$typ as $crate::protocol_types::traits::Packable>::N;\n let actual_len = packed_note.len();\n assert(\n actual_len == expected_len,\n f\"Expected packed note of length {expected_len} but got {actual_len} for note type id {note_type_id}\"\n );\n\n let note = $unpack(aztec::utils::array::subarray(packed_note.storage(), 0));\n\n let note_hash = $compute_note_hash(note, owner, storage_slot, randomness);\n \n // The message discovery process finds settled notes, that is, notes that were created in prior\n // transactions and are therefore already part of the note hash tree. We therefore compute the\n // nullification note hash by treating the note as a settled note with the provided note nonce.\n let note_hash_for_nullification = aztec::note::utils::compute_note_hash_for_nullification(\n aztec::note::HintedNote{\n note,\n contract_address,\n owner,\n randomness,\n storage_slot,\n metadata: aztec::note::note_metadata::SettledNoteMetadata::new(note_nonce).into()\n }\n );\n\n let inner_nullifier = $compute_nullifier_unconstrained(note, owner, note_hash_for_nullification);\n\n Option::some(\n aztec::messages::discovery::NoteHashAndNullifier {\n note_hash, inner_nullifier\n }\n )\n }\n },\n );\n }\n\n let if_note_type_id_match_statements = if_note_type_id_match_statements_list.join(quote {});\n\n quote {\n /// Unpacks an array into a note corresponding to `note_type_id` and then computes its note hash\n /// (non-siloed) and inner nullifier (non-siloed) assuming the note has been inserted into the note hash\n /// tree with `note_nonce`.\n ///\n /// The signature of this function notably matches the `aztec::messages::discovery::ComputeNoteHashAndNullifier` type,\n /// and so it can be used to call functions from that module such as `discover_new_messages`, \n /// `do_process_message` and `attempt_note_discovery`.\n ///\n /// This function is automatically injected by the `#[aztec]` macro.\n #[contract_library_method]\n unconstrained fn _compute_note_hash_and_nullifier(\n packed_note: BoundedVec<Field, aztec::messages::logs::note::MAX_NOTE_PACKED_LEN>,\n owner: aztec::protocol_types::address::AztecAddress,\n storage_slot: Field,\n note_type_id: Field,\n contract_address: aztec::protocol_types::address::AztecAddress,\n randomness: Field,\n note_nonce: Field,\n ) -> Option<aztec::messages::discovery::NoteHashAndNullifier> {\n $if_note_type_id_match_statements\n else {\n Option::none()\n }\n }\n }\n } else {\n // Contracts with no notes still implement this function to avoid having special-casing, the implementation\n // simply throws immediately.\n quote {\n /// This contract does not use private notes, so this function should never be called as it will\n /// unconditionally fail.\n ///\n /// This function is automatically injected by the `#[aztec]` macro.\n #[contract_library_method]\n unconstrained fn _compute_note_hash_and_nullifier(\n _packed_note: BoundedVec<Field, aztec::messages::logs::note::MAX_NOTE_PACKED_LEN>,\n _owner: aztec::protocol_types::address::AztecAddress,\n _storage_slot: Field,\n _note_type_id: Field,\n _contract_address: aztec::protocol_types::address::AztecAddress,\n _randomness: Field,\n _nonce: Field,\n ) -> Option<aztec::messages::discovery::NoteHashAndNullifier> {\n panic(f\"This contract does not use private notes\")\n }\n }\n }\n}\n\ncomptime fn generate_sync_private_state() -> Quoted {\n quote {\n pub struct sync_private_state_parameters {}\n\n #[abi(functions)]\n pub struct sync_private_state_abi {\n parameters: sync_private_state_parameters,\n }\n\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_utility]\n unconstrained fn sync_private_state() {\n let address = aztec::context::UtilityContext::new().this_address();\n \n aztec::messages::discovery::discover_new_messages(address, _compute_note_hash_and_nullifier);\n }\n }\n}\n\ncomptime fn generate_process_message() -> Quoted {\n quote {\n pub struct process_message_parameters {\n pub message_ciphertext: BoundedVec<Field, aztec::messages::encoding::MESSAGE_CIPHERTEXT_LEN>,\n pub message_context: aztec::messages::processing::MessageContext,\n }\n\n #[abi(functions)]\n pub struct process_message_abi {\n parameters: process_message_parameters,\n }\n\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_utility]\n unconstrained fn process_message(\n message_ciphertext: BoundedVec<Field, aztec::messages::encoding::MESSAGE_CIPHERTEXT_LEN>,\n message_context: aztec::messages::processing::MessageContext,\n ) {\n let address = aztec::context::UtilityContext::new().this_address();\n\n aztec::messages::discovery::process_message::process_message_ciphertext(\n address,\n _compute_note_hash_and_nullifier,\n message_ciphertext,\n message_context,\n );\n }\n }\n}\n\n/// Checks that all functions in the module have a context macro applied.\n///\n/// Non-macroified functions are not allowed in contracts. They must all be one of\n/// [external](crate::macros::functions::external), [internal](crate::macros::functions::internal) or `test`.\ncomptime fn check_each_fn_macroified(m: Module) {\n for f in m.functions() {\n let name = f.name();\n if !is_fn_external(f)\n & !is_fn_contract_library_method(f)\n & !is_fn_internal(f)\n & !is_fn_test(f) {\n // We don't suggest that #[contract_library_method] is allowed because we don't want to introduce another\n // concept\n panic(\n f\"Function {name} must be marked as either #[external(...)], #[internal(...)], or #[test]\",\n );\n }\n }\n}\n"
|
|
3361
|
+
"source": "use crate::macros::{\n calls_generation::{\n external_functions::{\n generate_external_function_calls, generate_external_function_self_calls_structs,\n },\n internal_functions::generate_call_internal_struct,\n },\n dispatch::generate_public_dispatch,\n internals_functions_generation::{create_fn_abi_exports, process_functions},\n notes::NOTES,\n storage::STORAGE_LAYOUT_NAME,\n utils::{\n get_trait_impl_method, is_fn_contract_library_method, is_fn_external, is_fn_internal,\n is_fn_test, module_has_storage,\n },\n};\n\n/// Marks a contract as an Aztec contract, generating the interfaces for its functions and notes, as well as injecting\n/// the `sync_state` utility function.\n/// Note: This is a module annotation, so the returned quote gets injected inside the module (contract) itself.\npub comptime fn aztec(m: Module) -> Quoted {\n // Functions that don't have #[external(...)], #[contract_library_method], or #[test] are not allowed in contracts.\n check_each_fn_macroified(m);\n\n // We generate new functions prefixed with `__aztec_nr_internals__` and we replace the original functions' bodies\n // with `static_assert(false, ...)` to prevent them from being called directly from within the contract.\n let functions = process_functions(m);\n\n // We generate structs and their implementations necessary for convenient functions calls.\n let interface = generate_contract_interface(m);\n let self_call_structs = generate_external_function_self_calls_structs(m);\n let call_internal_struct = generate_call_internal_struct(m);\n\n // We generate ABI exports for all the external functions in the contract.\n let fn_abi_exports = create_fn_abi_exports(m);\n\n // We generate `_compute_note_hash_and_nullifier`, `sync_state` and `process_message` functions only if they are\n // not already implemented. If they are implemented we just insert empty quotes.\n let contract_library_method_compute_note_hash_and_nullifier = if !m.functions().any(|f| {\n f.name() == quote { _compute_note_hash_and_nullifier }\n }) {\n generate_contract_library_method_compute_note_hash_and_nullifier()\n } else {\n quote {}\n };\n let sync_state_fn_and_abi_export = if !m.functions().any(|f| {\n f.name() == quote { sync_state }\n }) {\n generate_sync_state()\n } else {\n quote {}\n };\n\n let process_message_fn_and_abi_export = if !m.functions().any(|f| {\n f.name() == quote { process_message }\n }) {\n generate_process_message()\n } else {\n quote {}\n };\n let public_dispatch = generate_public_dispatch(m);\n\n quote {\n $interface\n $self_call_structs\n $call_internal_struct\n $functions\n $fn_abi_exports\n $contract_library_method_compute_note_hash_and_nullifier\n $public_dispatch\n $sync_state_fn_and_abi_export\n $process_message_fn_and_abi_export\n }\n}\n\ncomptime fn generate_contract_interface(m: Module) -> Quoted {\n let calls = generate_external_function_calls(m);\n\n let module_name = m.name();\n\n let has_storage_layout = module_has_storage(m) & STORAGE_LAYOUT_NAME.get(m).is_some();\n let storage_layout_getter = if has_storage_layout {\n let storage_layout_name = STORAGE_LAYOUT_NAME.get(m).unwrap();\n quote {\n pub fn storage_layout() -> StorageLayoutFields {\n $storage_layout_name.fields\n }\n }\n } else {\n quote {}\n };\n\n let library_storage_layout_getter = if has_storage_layout {\n quote {\n #[contract_library_method]\n $storage_layout_getter\n }\n } else {\n quote {}\n };\n\n quote {\n pub struct $module_name {\n pub target_contract: dep::aztec::protocol_types::address::AztecAddress\n }\n\n impl $module_name {\n $calls\n\n pub fn at(\n addr: aztec::protocol_types::address::AztecAddress\n ) -> Self {\n Self { target_contract: addr }\n }\n\n pub fn interface() -> Self {\n Self { target_contract: aztec::protocol_types::address::AztecAddress::zero() }\n }\n\n $storage_layout_getter\n }\n\n #[contract_library_method]\n pub fn at(\n addr: aztec::protocol_types::address::AztecAddress\n ) -> $module_name {\n $module_name { target_contract: addr }\n }\n\n #[contract_library_method]\n pub fn interface() -> $module_name {\n $module_name { target_contract: aztec::protocol_types::address::AztecAddress::zero() }\n }\n\n $library_storage_layout_getter\n\n }\n}\n\n/// Generates a contract library method called `_compute_note_hash_and_nullifier` which is used for note\n/// discovery (to create the `aztec::messages::discovery::ComputeNoteHashAndNullifier` function) and to implement the\n/// `compute_note_hash_and_nullifier` unconstrained contract function.\ncomptime fn generate_contract_library_method_compute_note_hash_and_nullifier() -> Quoted {\n if NOTES.len() > 0 {\n // Contracts that do define notes produce an if-else chain where `note_type_id` is matched against the\n // `get_note_type_id()` function of each note type that we know of, in order to identify the note type. Once we\n // know it we call we correct `unpack` method from the `Packable` trait to obtain the underlying note type, and\n // compute the note hash (non-siloed) and inner nullifier (also non-siloed).\n\n let mut if_note_type_id_match_statements_list = @[];\n for i in 0..NOTES.len() {\n let typ = NOTES.get(i);\n\n let get_note_type_id = get_trait_impl_method(\n typ,\n quote { crate::note::note_interface::NoteType },\n quote { get_id },\n );\n let unpack = get_trait_impl_method(\n typ,\n quote { crate::protocol_types::traits::Packable },\n quote { unpack },\n );\n\n let compute_note_hash = get_trait_impl_method(\n typ,\n quote { crate::note::note_interface::NoteHash },\n quote { compute_note_hash },\n );\n\n let compute_nullifier_unconstrained = get_trait_impl_method(\n typ,\n quote { crate::note::note_interface::NoteHash },\n quote { compute_nullifier_unconstrained },\n );\n\n let if_or_else_if = if i == 0 {\n quote { if }\n } else {\n quote { else if }\n };\n\n if_note_type_id_match_statements_list = if_note_type_id_match_statements_list.push_back(\n quote {\n $if_or_else_if note_type_id == $get_note_type_id() {\n // As an extra safety check we make sure that the packed_note BoundedVec has the expected\n // length, since we're about to interpret its raw storage as a fixed-size array by calling the\n // unpack function on it.\n let expected_len = <$typ as $crate::protocol_types::traits::Packable>::N;\n let actual_len = packed_note.len();\n assert(\n actual_len == expected_len,\n f\"Expected packed note of length {expected_len} but got {actual_len} for note type id {note_type_id}\"\n );\n\n let note = $unpack(aztec::utils::array::subarray(packed_note.storage(), 0));\n\n let note_hash = $compute_note_hash(note, owner, storage_slot, randomness);\n \n // The message discovery process finds settled notes, that is, notes that were created in prior\n // transactions and are therefore already part of the note hash tree. We therefore compute the\n // nullification note hash by treating the note as a settled note with the provided note nonce.\n let note_hash_for_nullification = aztec::note::utils::compute_note_hash_for_nullification(\n aztec::note::HintedNote{\n note,\n contract_address,\n owner,\n randomness,\n storage_slot,\n metadata: aztec::note::note_metadata::SettledNoteMetadata::new(note_nonce).into()\n }\n );\n\n let inner_nullifier = $compute_nullifier_unconstrained(note, owner, note_hash_for_nullification);\n\n Option::some(\n aztec::messages::discovery::NoteHashAndNullifier {\n note_hash, inner_nullifier\n }\n )\n }\n },\n );\n }\n\n let if_note_type_id_match_statements = if_note_type_id_match_statements_list.join(quote {});\n\n quote {\n /// Unpacks an array into a note corresponding to `note_type_id` and then computes its note hash\n /// (non-siloed) and inner nullifier (non-siloed) assuming the note has been inserted into the note hash\n /// tree with `note_nonce`.\n ///\n /// The signature of this function notably matches the\n /// `aztec::messages::discovery::ComputeNoteHashAndNullifier` type, and so it can be used to call functions\n /// from that module such as `do_sync_state` and `attempt_note_discovery`.\n ///\n /// This function is automatically injected by the `#[aztec]` macro.\n #[contract_library_method]\n unconstrained fn _compute_note_hash_and_nullifier(\n packed_note: BoundedVec<Field, aztec::messages::logs::note::MAX_NOTE_PACKED_LEN>,\n owner: aztec::protocol_types::address::AztecAddress,\n storage_slot: Field,\n note_type_id: Field,\n contract_address: aztec::protocol_types::address::AztecAddress,\n randomness: Field,\n note_nonce: Field,\n ) -> Option<aztec::messages::discovery::NoteHashAndNullifier> {\n $if_note_type_id_match_statements\n else {\n Option::none()\n }\n }\n }\n } else {\n // Contracts with no notes still implement this function to avoid having special-casing, the implementation\n // simply throws immediately.\n quote {\n /// This contract does not use private notes, so this function should never be called as it will\n /// unconditionally fail.\n ///\n /// This function is automatically injected by the `#[aztec]` macro.\n #[contract_library_method]\n unconstrained fn _compute_note_hash_and_nullifier(\n _packed_note: BoundedVec<Field, aztec::messages::logs::note::MAX_NOTE_PACKED_LEN>,\n _owner: aztec::protocol_types::address::AztecAddress,\n _storage_slot: Field,\n _note_type_id: Field,\n _contract_address: aztec::protocol_types::address::AztecAddress,\n _randomness: Field,\n _nonce: Field,\n ) -> Option<aztec::messages::discovery::NoteHashAndNullifier> {\n panic(f\"This contract does not use private notes\")\n }\n }\n }\n}\n\ncomptime fn generate_sync_state() -> Quoted {\n quote {\n pub struct sync_state_parameters {}\n\n #[abi(functions)]\n pub struct sync_state_abi {\n parameters: sync_state_parameters,\n }\n\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_utility]\n unconstrained fn sync_state() {\n let address = aztec::context::UtilityContext::new().this_address();\n \n aztec::messages::discovery::do_sync_state(address, _compute_note_hash_and_nullifier);\n }\n }\n}\n\ncomptime fn generate_process_message() -> Quoted {\n quote {\n pub struct process_message_parameters {\n pub message_ciphertext: BoundedVec<Field, aztec::messages::encoding::MESSAGE_CIPHERTEXT_LEN>,\n pub message_context: aztec::messages::processing::MessageContext,\n }\n\n #[abi(functions)]\n pub struct process_message_abi {\n parameters: process_message_parameters,\n }\n\n #[aztec::macros::internals_functions_generation::abi_attributes::abi_utility]\n unconstrained fn process_message(\n message_ciphertext: BoundedVec<Field, aztec::messages::encoding::MESSAGE_CIPHERTEXT_LEN>,\n message_context: aztec::messages::processing::MessageContext,\n ) {\n let address = aztec::context::UtilityContext::new().this_address();\n\n aztec::messages::discovery::process_message::process_message_ciphertext(\n address,\n _compute_note_hash_and_nullifier,\n message_ciphertext,\n message_context,\n );\n }\n }\n}\n\n/// Checks that all functions in the module have a context macro applied.\n///\n/// Non-macroified functions are not allowed in contracts. They must all be one of\n/// [external](crate::macros::functions::external), [internal](crate::macros::functions::internal) or `test`.\ncomptime fn check_each_fn_macroified(m: Module) {\n for f in m.functions() {\n let name = f.name();\n if !is_fn_external(f)\n & !is_fn_contract_library_method(f)\n & !is_fn_internal(f)\n & !is_fn_test(f) {\n // We don't suggest that #[contract_library_method] is allowed because we don't want to introduce another\n // concept\n panic(\n f\"Function {name} must be marked as either #[external(...)], #[internal(...)], or #[test]\",\n );\n }\n }\n}\n"
|
|
3362
3362
|
},
|
|
3363
3363
|
"106": {
|
|
3364
3364
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/aztec-nr/aztec/src/macros/dispatch.nr",
|
|
@@ -3374,7 +3374,7 @@
|
|
|
3374
3374
|
},
|
|
3375
3375
|
"126": {
|
|
3376
3376
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/aztec-nr/aztec/src/messages/discovery/mod.nr",
|
|
3377
|
-
"source": "use protocol_types::{address::AztecAddress, debug_log::{debug_log, debug_log_format}};\n\npub mod nonce_discovery;\npub mod partial_notes;\npub mod private_events;\npub mod private_notes;\npub mod process_message;\n\nuse crate::{\n messages::{\n discovery::process_message::process_message_ciphertext,\n logs::note::MAX_NOTE_PACKED_LEN,\n processing::{\n get_private_logs, pending_tagged_log::PendingTaggedLog,\n
|
|
3377
|
+
"source": "use protocol_types::{address::AztecAddress, debug_log::{debug_log, debug_log_format}};\n\npub mod nonce_discovery;\npub mod partial_notes;\npub mod private_events;\npub mod private_notes;\npub mod process_message;\n\nuse crate::{\n messages::{\n discovery::process_message::process_message_ciphertext,\n logs::note::MAX_NOTE_PACKED_LEN,\n processing::{\n get_private_logs, pending_tagged_log::PendingTaggedLog,\n validate_and_store_enqueued_notes_and_events,\n },\n },\n utils::array,\n};\n\npub struct NoteHashAndNullifier {\n /// The result of NoteHash::compute_note_hash\n pub note_hash: Field,\n /// The result of NoteHash::compute_nullifier_unconstrained (since all of message discovery is unconstrained)\n pub inner_nullifier: Field,\n}\n\n/// A function which takes a note's packed content, address of the emitting contract, note nonce, storage slot and note\n/// type ID and attempts to compute its note hash (not hashed by note nonce nor siloed by address) and inner nullifier\n/// (not siloed by address).\n///\n/// This function must be user-provided as its implementation requires knowledge of how note type IDs are allocated in a\n/// contract. The `#[aztec]` macro automatically creates such a contract library method called\n/// `_compute_note_hash_and_nullifier`, which looks something like this:\n///\n/// ```\n/// |packed_note, owner, storage_slot, note_type_id, contract_address, randomness, note_nonce| {\n/// if note_type_id == MyNoteType::get_id() {\n/// assert(packed_note.len() == MY_NOTE_TYPE_SERIALIZATION_LENGTH);\n///\n/// let note = MyNoteType::unpack(aztec::utils::array::subarray(packed_note.storage(), 0));\n///\n/// let note_hash = note.compute_note_hash(owner, storage_slot, randomness);\n/// let note_hash_for_nullification = aztec::note::utils::compute_note_hash_for_nullification(\n/// HintedNote{ note, contract_address, metadata: SettledNoteMetadata::new(note_nonce).into() },\n/// storage_slot\n/// );\n///\n/// let inner_nullifier = note.compute_nullifier_unconstrained(owner, note_hash_for_nullification);\n///\n/// Option::some(\n/// aztec::messages::discovery::NoteHashAndNullifier {\n/// note_hash, inner_nullifier\n/// }\n/// )\n/// } else if note_type_id == MyOtherNoteType::get_id() {\n/// ... // Similar to above but calling MyOtherNoteType::unpack_content\n/// } else {\n/// Option::none() // Unknown note type ID\n/// };\n/// }\n/// ```\npub type ComputeNoteHashAndNullifier<Env> = unconstrained fn[Env](/* packed_note */BoundedVec<Field, MAX_NOTE_PACKED_LEN>, /* owner */ AztecAddress, /* storage_slot */ Field, /* note_type_id */ Field, /* contract_address */ AztecAddress, /* randomness */ Field, /* note nonce */ Field) -> Option<NoteHashAndNullifier>;\n\n/// Performs the state synchronization process, in which private logs are downloaded and inspected to find new private\n/// notes, partial notes and events, etc., and pending partial notes are processed to search for their completion logs.\n/// This is the mechanism via which a contract updates its knowledge of its private state.\n///\n/// Note that the state is synchronized up to the latest block synchronized by PXE (referred to as \"anchor block\").\n/// That should be close to the chain tip as block synchronization is performed before contract function simulation is\n/// done.\n///\n/// Receives the address of the contract on which discovery is performed along with its\n/// `compute_note_hash_and_nullifier` function.\npub unconstrained fn do_sync_state<Env>(\n contract_address: AztecAddress,\n compute_note_hash_and_nullifier: ComputeNoteHashAndNullifier<Env>,\n) {\n debug_log(\"Performing state synchronization\");\n\n // First we process all private logs, which can contain different kinds of messages e.g. private notes, partial\n // notes, private events, etc.\n let mut logs = get_private_logs(contract_address);\n logs.for_each(|i, pending_tagged_log: PendingTaggedLog| {\n debug_log_format(\n \"Processing log with tag {0}\",\n [pending_tagged_log.log.get(0)],\n );\n\n // We remove the tag from the pending tagged log and process the message ciphertext contained in it.\n let message_ciphertext = array::subbvec(pending_tagged_log.log, 1);\n\n process_message_ciphertext(\n contract_address,\n compute_note_hash_and_nullifier,\n message_ciphertext,\n pending_tagged_log.context,\n );\n logs.remove(i);\n });\n\n // Then we process all pending partial notes, regardless of whether they were found in the current or previous\n // executions.\n partial_notes::fetch_and_process_partial_note_completion_logs(\n contract_address,\n compute_note_hash_and_nullifier,\n );\n\n // Finally we validate all notes and events that were found as part of the previous processes, resulting in them\n // being added to PXE's database and retrievable via oracles (get_notes) and our TS API (PXE::getPrivateEvents).\n validate_and_store_enqueued_notes_and_events(contract_address);\n}\n"
|
|
3378
3378
|
},
|
|
3379
3379
|
"127": {
|
|
3380
3380
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/aztec-nr/aztec/src/messages/discovery/nonce_discovery.nr",
|
|
@@ -3402,7 +3402,7 @@
|
|
|
3402
3402
|
},
|
|
3403
3403
|
"133": {
|
|
3404
3404
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/aztec-nr/aztec/src/messages/encryption/aes128.nr",
|
|
3405
|
-
"source": "use dep::protocol_types::{\n address::AztecAddress,\n constants::{DOM_SEP__SYMMETRIC_KEY, DOM_SEP__SYMMETRIC_KEY_2},\n hash::poseidon2_hash_with_separator,\n point::Point,\n public_keys::AddressPoint,\n};\n\nuse crate::{\n keys::{ecdh_shared_secret::derive_ecdh_shared_secret, ephemeral::generate_ephemeral_key_pair},\n messages::{\n encoding::{\n EPH_PK_SIGN_BYTE_SIZE_IN_BYTES, EPH_PK_X_SIZE_IN_FIELDS,\n HEADER_CIPHERTEXT_SIZE_IN_BYTES, MESSAGE_CIPHERTEXT_LEN, MESSAGE_PLAINTEXT_LEN,\n },\n encryption::message_encryption::MessageEncryption,\n logs::arithmetic_generics_utils::{\n get_arr_of_size__message_bytes__from_PT,\n get_arr_of_size__message_bytes_padding__from_PT,\n },\n },\n oracle::{\n aes128_decrypt::aes128_decrypt_oracle, random::random, shared_secret::get_shared_secret,\n },\n utils::{\n array,\n conversion::{\n bytes_to_fields::{bytes_from_fields, bytes_to_fields},\n fields_to_bytes::{fields_from_bytes, fields_to_bytes},\n },\n point::{get_sign_of_point, point_from_x_coord_and_sign},\n random::get_random_bytes,\n },\n};\n\nuse std::aes128::aes128_encrypt;\n\n/**\n * Computes N close-to-uniformly-random 256 bits from a given ECDH shared_secret.\n *\n * NEVER re-use the same iv and sym_key.\n * DO NOT call this function more than once with the same shared_secret.\n *\n * This function is only known to be safe if shared_secret is computed by combining a \n * random ephemeral key with an address point. See big comment within the body of the function.\n * See big comment within the body of the function.\n */\nfn extract_many_close_to_uniformly_random_256_bits_from_ecdh_shared_secret_using_poseidon2_unsafe<let N: u32>(\n shared_secret: Point,\n) -> [[u8; 32]; N] {\n /*\n * Unsafe because of https://eprint.iacr.org/2010/264.pdf Page 13, Lemma 2 (and the * two paragraphs below it).\n *\n * If you call this function, you need to be careful and aware of how the arg\n * `shared_secret` has been derived.\n *\n * The paper says that the way you derive aes keys and IVs should be fine with poseidon2\n * (modelled as a RO), as long as you _don't_ use Poseidon2 as a PRG to generate the * two exponents x & y which multiply to the shared secret S:\n *\n * S = [x*y]*G.\n *\n * (Otherwise, you would have to \"key\" poseidon2, i.e. generate a uniformly string K\n * which can be public and compute Hash(x) as poseidon(K,x)).\n * In that lemma, k would be 2*254=508, and m would be the number of points on the * grumpkin curve (which is close to r according to the Hasse bound).\n *\n * Our shared secret S is [esk * address_sk] * G, and the question is: * Can we compute hash(S) using poseidon2 instead of sha256?\n *\n * Well, esk is random and not generated with poseidon2, so that's good.\n * What about address_sk?\n * Well, address_sk = poseidon2(stuff) + ivsk, so there was some\n * discussion about whether address_sk is independent of poseidon2.\n * Given that ivsk is random and independent of poseidon2, the address_sk is also\n * independent of poseidon2.\n *\n * Tl;dr: we believe it's safe to hash S = [esk * address_sk] * G using poseidon2,\n * in order to derive a symmetric key.\n *\n * If you're calling this function for a differently-derived `shared_secret`, be\n * careful.\n *\n */\n\n /* The output of this function needs to be 32 random bytes.\n * A single field won't give us 32 bytes of entropy.\n * So we compute two \"random\" fields, by poseidon-hashing with two different\n * generators.\n * We then extract the last 16 (big endian) bytes of each \"random\" field.\n * Note: we use to_be_bytes because it's slightly more efficient. But we have to\n * be careful not to take bytes from the \"big end\", because the \"big\" byte is\n * not uniformly random over the byte: it only has < 6 bits of randomness, because\n * it's the big end of a 254-bit field element.\n */\n\n let mut all_bytes: [[u8; 32]; N] = std::mem::zeroed();\n // We restrict N to be < 2^8, because of how we compute the domain separator\n // from k below (where k <= N must be 8 bits). In practice, it's extremely\n // unlikely that an app will want to compute >= 256 ciphertexts.\n std::static_assert(N < 256, \"N too large\");\n for k in 0..N {\n // We augment the domain separator with the loop index, so that we can\n // generate N lots of randomness.\n let k_shift = (k as u16 << 8);\n let separator_1 = k_shift + DOM_SEP__SYMMETRIC_KEY as u16;\n let separator_2 = k_shift + DOM_SEP__SYMMETRIC_KEY_2 as u16;\n\n let rand1: Field =\n poseidon2_hash_with_separator([shared_secret.x, shared_secret.y], separator_1);\n let rand2: Field =\n poseidon2_hash_with_separator([shared_secret.x, shared_secret.y], separator_2);\n\n let rand1_bytes: [u8; 32] = rand1.to_be_bytes();\n let rand2_bytes: [u8; 32] = rand2.to_be_bytes();\n\n let mut bytes: [u8; 32] = [0; 32];\n for i in 0..16 {\n // We take bytes from the \"little end\" of the be-bytes arrays:\n let j = 32 - i - 1;\n bytes[i] = rand1_bytes[j];\n bytes[16 + i] = rand2_bytes[j];\n }\n\n all_bytes[k] = bytes;\n }\n\n all_bytes\n}\n\nfn derive_aes_symmetric_key_and_iv_from_uniformly_random_256_bits<let N: u32>(\n many_random_256_bits: [[u8; 32]; N],\n) -> [([u8; 16], [u8; 16]); N] {\n // Many (sym_key, iv) pairs:\n let mut many_pairs: [([u8; 16], [u8; 16]); N] = std::mem::zeroed();\n for k in 0..N {\n let random_256_bits = many_random_256_bits[k];\n let mut sym_key = [0; 16];\n let mut iv = [0; 16];\n for i in 0..16 {\n sym_key[i] = random_256_bits[i];\n iv[i] = random_256_bits[i + 16];\n }\n many_pairs[k] = (sym_key, iv);\n }\n\n many_pairs\n}\n\npub fn derive_aes_symmetric_key_and_iv_from_ecdh_shared_secret_using_poseidon2_unsafe<let N: u32>(\n shared_secret: Point,\n) -> [([u8; 16], [u8; 16]); N] {\n let many_random_256_bits: [[u8; 32]; N] = extract_many_close_to_uniformly_random_256_bits_from_ecdh_shared_secret_using_poseidon2_unsafe(\n shared_secret,\n );\n\n derive_aes_symmetric_key_and_iv_from_uniformly_random_256_bits(many_random_256_bits)\n}\n\npub struct AES128 {}\n\nimpl MessageEncryption for AES128 {\n fn encrypt<let PlaintextLen: u32>(\n plaintext: [Field; PlaintextLen],\n recipient: AztecAddress,\n ) -> [Field; MESSAGE_CIPHERTEXT_LEN] {\n // AES 128 operates on bytes, not fields, so we need to convert the fields to bytes.\n // (This process is then reversed when processing the message in `do_process_message`)\n let plaintext_bytes = fields_to_bytes(plaintext);\n\n // *****************************************************************************\n // Compute the shared secret\n // *****************************************************************************\n\n let (eph_sk, eph_pk) = generate_ephemeral_key_pair();\n\n let eph_pk_sign_byte: u8 = get_sign_of_point(eph_pk) as u8;\n\n // (not to be confused with the tagging shared secret)\n // TODO (#17158): Currently we unwrap the Option returned by derive_ecdh_shared_secret.\n // We need to handle the case where the ephemeral public key is invalid to prevent potential DoS vectors.\n let ciphertext_shared_secret = derive_ecdh_shared_secret(\n eph_sk,\n recipient\n .to_address_point()\n .unwrap_or(\n // Safety: if the recipient is an invalid address, then it is not possible to encrypt a message for\n // them because we cannot establish a shared secret. This is never expected to occur during normal\n // operation. However, it is technically possible for us to receive an invalid address, and we must\n // therefore handle it.\n // We could simply fail, but that'd introduce a potential security issue in which an attacker forces\n // a contract to encrypt a message for an invalid address, resulting in an impossible transaction -\n // this is sometimes called a 'king of the hill' attack.\n // We choose instead to not fail and encrypt the plaintext regardless using the shared secret that\n // results from a random valid address. The sender is free to choose this address and hence shared\n // secret, but this has no security implications as they already know not only the full plaintext\n // but also the ephemeral private key anyway.\n unsafe { random_address_point() },\n )\n .inner,\n );\n // TODO: also use this shared secret for deriving note randomness.\n\n // *****************************************************************************\n // Convert the plaintext into whatever format the encryption function expects\n // *****************************************************************************\n\n // Already done for this strategy: AES expects bytes.\n\n // *****************************************************************************\n // Encrypt the plaintext\n // *****************************************************************************\n\n // It is safe to call the `unsafe` function here, because we know the `shared_secret`\n // was derived using an AztecAddress (the recipient). See the block comment\n // at the start of this unsafe target function for more info.\n let pairs = derive_aes_symmetric_key_and_iv_from_ecdh_shared_secret_using_poseidon2_unsafe::<2>(\n ciphertext_shared_secret,\n );\n let (body_sym_key, body_iv) = pairs[0];\n let (header_sym_key, header_iv) = pairs[1];\n\n let ciphertext_bytes = aes128_encrypt(plaintext_bytes, body_iv, body_sym_key);\n\n // |full_pt| = |pt_length| + |pt|\n // |pt_aes_padding| = 16 - (|full_pt| % 16)\n // or... since a % b is the same as a - b * (a // b) (integer division), so:\n // |pt_aes_padding| = 16 - (|full_pt| - 16 * (|full_pt| // 16))\n // |ct| = |full_pt| + |pt_aes_padding|\n // = |full_pt| + 16 - (|full_pt| - 16 * (|full_pt| // 16))\n // = 16 + 16 * (|full_pt| // 16)\n // = 16 * (1 + |full_pt| // 16)\n std::static_assert(\n ciphertext_bytes.len() == 16 * (1 + (PlaintextLen * 32) / 16),\n \"unexpected ciphertext length\",\n );\n\n // *****************************************************************************\n // Compute the header ciphertext\n // *****************************************************************************\n\n // Header contains only the length of the ciphertext stored in 2 bytes.\n let mut header_plaintext: [u8; 2] = [0 as u8; 2];\n let ciphertext_bytes_length = ciphertext_bytes.len();\n header_plaintext[0] = (ciphertext_bytes_length >> 8) as u8;\n header_plaintext[1] = ciphertext_bytes_length as u8;\n\n // Note: the aes128_encrypt builtin fn automatically appends bytes to the\n // input, according to pkcs#7; hence why the output `header_ciphertext_bytes` is 16\n // bytes larger than the input in this case.\n let header_ciphertext_bytes = aes128_encrypt(header_plaintext, header_iv, header_sym_key);\n // I recall that converting a slice to an array incurs constraints, so I'll check the length this way instead:\n std::static_assert(\n header_ciphertext_bytes.len() == HEADER_CIPHERTEXT_SIZE_IN_BYTES,\n \"unexpected ciphertext header length\",\n );\n\n // *****************************************************************************\n // Prepend / append more bytes of data to the ciphertext, before converting back\n // to fields.\n // *****************************************************************************\n\n let mut message_bytes_padding_to_mult_31 =\n get_arr_of_size__message_bytes_padding__from_PT::<PlaintextLen * 32>();\n // Safety: this randomness won't be constrained to be random. It's in the\n // interest of the executor of this fn to encrypt with random bytes.\n message_bytes_padding_to_mult_31 = unsafe { get_random_bytes() };\n\n let mut message_bytes = get_arr_of_size__message_bytes__from_PT::<PlaintextLen * 32>();\n\n std::static_assert(\n message_bytes.len() % 31 == 0,\n \"Unexpected error: message_bytes.len() should be divisible by 31, by construction.\",\n );\n\n message_bytes[0] = eph_pk_sign_byte;\n let mut offset = 1;\n for i in 0..header_ciphertext_bytes.len() {\n message_bytes[offset + i] = header_ciphertext_bytes[i];\n }\n offset += header_ciphertext_bytes.len();\n\n for i in 0..ciphertext_bytes.len() {\n message_bytes[offset + i] = ciphertext_bytes[i];\n }\n offset += ciphertext_bytes.len();\n\n for i in 0..message_bytes_padding_to_mult_31.len() {\n message_bytes[offset + i] = message_bytes_padding_to_mult_31[i];\n }\n offset += message_bytes_padding_to_mult_31.len();\n\n // Ideally we would be able to have a static assert where we check that the offset would be such that we've\n // written to the entire log_bytes array, but we cannot since Noir does not treat the offset as a comptime\n // value (despite the values that it goes through being known at each stage). We instead check that the\n // computation used to obtain the offset computes the expected value (which we _can_ do in a static check), and\n // then add a cheap runtime check to also validate that the offset matches this.\n std::static_assert(\n 1\n + header_ciphertext_bytes.len()\n + ciphertext_bytes.len()\n + message_bytes_padding_to_mult_31.len()\n == message_bytes.len(),\n \"unexpected message length\",\n );\n assert(offset == message_bytes.len(), \"unexpected encrypted message length\");\n\n // *****************************************************************************\n // Convert bytes back to fields\n // *****************************************************************************\n\n // TODO(#12749): As Mike pointed out, we need to make messages produced by different encryption schemes\n // indistinguishable from each other and for this reason the output here and in the last for-loop of this function\n // should cover a full field.\n let message_bytes_as_fields = bytes_to_fields(message_bytes);\n\n // *****************************************************************************\n // Prepend / append fields, to create the final message\n // *****************************************************************************\n\n let mut ciphertext: [Field; MESSAGE_CIPHERTEXT_LEN] = [0; MESSAGE_CIPHERTEXT_LEN];\n\n ciphertext[0] = eph_pk.x;\n\n let mut offset = 1;\n for i in 0..message_bytes_as_fields.len() {\n ciphertext[offset + i] = message_bytes_as_fields[i];\n }\n offset += message_bytes_as_fields.len();\n\n for i in offset..MESSAGE_CIPHERTEXT_LEN {\n // We need to get a random value that fits in 31 bytes to not leak information about the size of the message\n // (all the \"real\" message fields contain at most 31 bytes because of the way we convert the bytes to fields).\n // TODO(#12749): Long term, this is not a good solution.\n\n // Safety: we assume that the sender wants for the message to be private - a malicious one could simply reveal its\n // contents publicly. It is therefore fine to trust the sender to provide random padding.\n let field_bytes = unsafe { get_random_bytes::<31>() };\n ciphertext[i] = Field::from_be_bytes::<31>(field_bytes);\n }\n\n ciphertext\n }\n\n unconstrained fn decrypt(\n ciphertext: BoundedVec<Field, MESSAGE_CIPHERTEXT_LEN>,\n recipient: AztecAddress,\n ) -> Option<BoundedVec<Field, MESSAGE_PLAINTEXT_LEN>> {\n let eph_pk_x = ciphertext.get(0);\n\n let ciphertext_without_eph_pk_x_fields = array::subbvec::<Field, MESSAGE_CIPHERTEXT_LEN, MESSAGE_CIPHERTEXT_LEN - EPH_PK_X_SIZE_IN_FIELDS>(\n ciphertext,\n EPH_PK_X_SIZE_IN_FIELDS,\n );\n\n // Convert the ciphertext represented as fields to a byte representation (its original format)\n let ciphertext_without_eph_pk_x = bytes_from_fields(ciphertext_without_eph_pk_x_fields);\n\n // First byte of the ciphertext represents the ephemeral public key sign\n let eph_pk_sign_bool = ciphertext_without_eph_pk_x.get(0) != 0;\n\n // With the sign and the x-coordinate of the ephemeral public key, we can reconstruct the point. This may fail\n // however, as not all x-coordinates are on the curve. In that case, we simply return `Option::none`.\n point_from_x_coord_and_sign(eph_pk_x, eph_pk_sign_bool).map(|eph_pk| {\n // Derive shared secret\n let ciphertext_shared_secret = get_shared_secret(recipient, eph_pk);\n\n // Derive symmetric keys:\n let pairs = derive_aes_symmetric_key_and_iv_from_ecdh_shared_secret_using_poseidon2_unsafe::<2>(\n ciphertext_shared_secret,\n );\n let (body_sym_key, body_iv) = pairs[0];\n let (header_sym_key, header_iv) = pairs[1];\n\n // Extract the header ciphertext\n let header_start = EPH_PK_SIGN_BYTE_SIZE_IN_BYTES; // Skip eph_pk_sign byte\n let header_ciphertext: [u8; HEADER_CIPHERTEXT_SIZE_IN_BYTES] =\n array::subarray(ciphertext_without_eph_pk_x.storage(), header_start);\n // We need to convert the array to a BoundedVec because the oracle expects a BoundedVec as it's designed to work\n // with messages with unknown length at compile time. This would not be necessary here as the header ciphertext length\n // is fixed. But we do it anyway to not have to have duplicate oracles.\n let header_ciphertext_bvec =\n BoundedVec::<u8, HEADER_CIPHERTEXT_SIZE_IN_BYTES>::from_array(header_ciphertext);\n\n // Decrypt header\n let header_plaintext =\n aes128_decrypt_oracle(header_ciphertext_bvec, header_iv, header_sym_key);\n\n // Extract ciphertext length from header (2 bytes, big-endian)\n let ciphertext_length =\n ((header_plaintext.get(0) as u32) << 8) | (header_plaintext.get(1) as u32);\n\n // Extract and decrypt main ciphertext\n let ciphertext_start = header_start + HEADER_CIPHERTEXT_SIZE_IN_BYTES;\n let ciphertext_with_padding: [u8; (MESSAGE_CIPHERTEXT_LEN - EPH_PK_X_SIZE_IN_FIELDS) * 31 - HEADER_CIPHERTEXT_SIZE_IN_BYTES - EPH_PK_SIGN_BYTE_SIZE_IN_BYTES] =\n array::subarray(ciphertext_without_eph_pk_x.storage(), ciphertext_start);\n let ciphertext: BoundedVec<u8, (MESSAGE_CIPHERTEXT_LEN - EPH_PK_X_SIZE_IN_FIELDS) * 31 - HEADER_CIPHERTEXT_SIZE_IN_BYTES - EPH_PK_SIGN_BYTE_SIZE_IN_BYTES> =\n BoundedVec::from_parts(ciphertext_with_padding, ciphertext_length);\n\n // Decrypt main ciphertext and return it\n let plaintext_bytes = aes128_decrypt_oracle(ciphertext, body_iv, body_sym_key);\n\n // Each field of the original note message was serialized to 32 bytes so we convert the bytes back to fields.\n fields_from_bytes(plaintext_bytes)\n })\n }\n}\n\n/// Produces a random valid address point, i.e. one that is on the curve. This is equivalent to calling\n/// [AztecAddress::to_address_point] on a random valid address.\nunconstrained fn random_address_point() -> AddressPoint {\n let mut result = std::mem::zeroed();\n\n loop {\n // We simply produce random x coordinates until we find one that is on the curve. About half of the x\n // coordinates fulfill this condition, so this should only take a few iterations at most.\n let x_coord = random();\n let point = point_from_x_coord_and_sign(x_coord, true);\n if point.is_some() {\n result = AddressPoint { inner: point.unwrap() };\n break;\n }\n }\n\n result\n}\n\nmod test {\n use crate::{\n keys::ecdh_shared_secret::derive_ecdh_shared_secret,\n messages::{\n encoding::MESSAGE_PLAINTEXT_LEN, encryption::message_encryption::MessageEncryption,\n },\n test::helpers::test_environment::TestEnvironment,\n };\n use super::{AES128, random_address_point};\n use protocol_types::{address::AztecAddress, traits::FromField};\n use std::{embedded_curve_ops::EmbeddedCurveScalar, test::OracleMock};\n\n #[test]\n unconstrained fn encrypt_decrypt_deterministic() {\n let env = TestEnvironment::new();\n\n // Message decryption requires oracles that are only available during private execution\n env.private_context(|_| {\n let plaintext = [1, 2, 3];\n\n let recipient = AztecAddress::from_field(\n 0x25afb798ea6d0b8c1618e50fdeafa463059415013d3b7c75d46abf5e242be70c,\n );\n\n // Mock random values for deterministic test\n let eph_sk = 0x1358d15019d4639393d62b97e1588c095957ce74a1c32d6ec7d62fe6705d9538;\n let _ = OracleMock::mock(\"utilityGetRandomField\").returns(eph_sk).times(1);\n\n let randomness = 0x0101010101010101010101010101010101010101010101010101010101010101;\n let _ = OracleMock::mock(\"utilityGetRandomField\").returns(randomness).times(1000000);\n\n let _ = OracleMock::mock(\"privateGetNextAppTagAsSender\").returns(42);\n\n // Encrypt the message\n let encrypted_message = BoundedVec::from_array(AES128::encrypt(plaintext, recipient));\n\n // Mock shared secret for deterministic test\n let shared_secret = derive_ecdh_shared_secret(\n EmbeddedCurveScalar::from_field(eph_sk),\n recipient.to_address_point().unwrap().inner,\n );\n\n let _ = OracleMock::mock(\"utilityGetSharedSecret\").returns(shared_secret);\n\n // Decrypt the message\n let decrypted = AES128::decrypt(encrypted_message, recipient).unwrap();\n\n // The decryption function spits out a BoundedVec because it's designed to work with messages with unknown length\n // at compile time. For this reason we need to convert the original input to a BoundedVec.\n let plaintext_bvec = BoundedVec::<Field, MESSAGE_PLAINTEXT_LEN>::from_array(plaintext);\n\n // Verify decryption matches original plaintext\n assert_eq(\n decrypted,\n plaintext_bvec,\n \"Decrypted bytes should match original plaintext\",\n );\n\n // The following is a workaround of \"struct is never constructed\" Noir compilation error (we only ever use\n // static methods of the struct).\n let _ = AES128 {};\n });\n }\n\n #[test]\n unconstrained fn encrypt_decrypt_random() {\n // Same as `encrypt_decrypt_deterministic`, except we don't mock any of the oracles and rely on\n // `TestEnvironment` instead.\n let mut env = TestEnvironment::new();\n\n let recipient = env.create_light_account();\n\n env.private_context(|_| {\n let plaintext = [1, 2, 3];\n let ciphertext = AES128::encrypt(plaintext, recipient);\n\n assert_eq(\n AES128::decrypt(BoundedVec::from_array(ciphertext), recipient).unwrap(),\n BoundedVec::from_array(plaintext),\n );\n });\n }\n\n #[test]\n unconstrained fn encrypt_to_invalid_address() {\n // x = 3 is a non-residue for this curve, resulting in an invalid address\n let invalid_address = AztecAddress { inner: 3 };\n\n // We just test that we produced some output and did not crash - the result is gibberish as it is encrypted\n // using a public key for which we do not know the private key.\n let _ = AES128::encrypt([1, 2, 3, 4], invalid_address);\n }\n\n #[test]\n unconstrained fn random_address_point_produces_valid_points() {\n // About half of random addresses are invalid, so testing just a couple gives us high confidence that\n // `random_address_point` is indeed producing valid addresses.\n for _ in 0..10 {\n let random_address = AztecAddress { inner: random_address_point().inner.x };\n assert(random_address.to_address_point().is_some());\n }\n }\n\n #[test]\n unconstrained fn decrypt_invalid_ephemeral_public_key() {\n let mut env = TestEnvironment::new();\n\n let recipient = env.create_light_account();\n\n env.private_context(|_| {\n let plaintext = [1, 2, 3, 4];\n let ciphertext = AES128::encrypt(plaintext, recipient);\n\n // The first field of the ciphertext is the x-coordinate of the ephemeral public key. We set it to a known\n // non-residue (3), causing `decrypt` to fail to produce a decryption shared secret.\n let mut bad_ciphertext = BoundedVec::from_array(ciphertext);\n bad_ciphertext.set(0, 3);\n\n assert(AES128::decrypt(bad_ciphertext, recipient).is_none());\n });\n }\n}\n"
|
|
3405
|
+
"source": "use dep::protocol_types::{\n address::AztecAddress,\n constants::{DOM_SEP__SYMMETRIC_KEY, DOM_SEP__SYMMETRIC_KEY_2},\n hash::poseidon2_hash_with_separator,\n point::Point,\n public_keys::AddressPoint,\n};\n\nuse crate::{\n keys::{ecdh_shared_secret::derive_ecdh_shared_secret, ephemeral::generate_ephemeral_key_pair},\n messages::{\n encoding::{\n EPH_PK_SIGN_BYTE_SIZE_IN_BYTES, EPH_PK_X_SIZE_IN_FIELDS,\n HEADER_CIPHERTEXT_SIZE_IN_BYTES, MESSAGE_CIPHERTEXT_LEN, MESSAGE_PLAINTEXT_LEN,\n },\n encryption::message_encryption::MessageEncryption,\n logs::arithmetic_generics_utils::{\n get_arr_of_size__message_bytes__from_PT,\n get_arr_of_size__message_bytes_padding__from_PT,\n },\n },\n oracle::{\n aes128_decrypt::aes128_decrypt_oracle, random::random, shared_secret::get_shared_secret,\n },\n utils::{\n array,\n conversion::{\n bytes_to_fields::{bytes_from_fields, bytes_to_fields},\n fields_to_bytes::{fields_from_bytes, fields_to_bytes},\n },\n point::{get_sign_of_point, point_from_x_coord_and_sign},\n random::get_random_bytes,\n },\n};\n\nuse std::aes128::aes128_encrypt;\n\n/**\n * Computes N close-to-uniformly-random 256 bits from a given ECDH shared_secret.\n *\n * NEVER re-use the same iv and sym_key.\n * DO NOT call this function more than once with the same shared_secret.\n *\n * This function is only known to be safe if shared_secret is computed by combining a \n * random ephemeral key with an address point. See big comment within the body of the function.\n * See big comment within the body of the function.\n */\nfn extract_many_close_to_uniformly_random_256_bits_from_ecdh_shared_secret_using_poseidon2_unsafe<let N: u32>(\n shared_secret: Point,\n) -> [[u8; 32]; N] {\n /*\n * Unsafe because of https://eprint.iacr.org/2010/264.pdf Page 13, Lemma 2 (and the * two paragraphs below it).\n *\n * If you call this function, you need to be careful and aware of how the arg\n * `shared_secret` has been derived.\n *\n * The paper says that the way you derive aes keys and IVs should be fine with poseidon2\n * (modelled as a RO), as long as you _don't_ use Poseidon2 as a PRG to generate the * two exponents x & y which multiply to the shared secret S:\n *\n * S = [x*y]*G.\n *\n * (Otherwise, you would have to \"key\" poseidon2, i.e. generate a uniformly string K\n * which can be public and compute Hash(x) as poseidon(K,x)).\n * In that lemma, k would be 2*254=508, and m would be the number of points on the * grumpkin curve (which is close to r according to the Hasse bound).\n *\n * Our shared secret S is [esk * address_sk] * G, and the question is: * Can we compute hash(S) using poseidon2 instead of sha256?\n *\n * Well, esk is random and not generated with poseidon2, so that's good.\n * What about address_sk?\n * Well, address_sk = poseidon2(stuff) + ivsk, so there was some\n * discussion about whether address_sk is independent of poseidon2.\n * Given that ivsk is random and independent of poseidon2, the address_sk is also\n * independent of poseidon2.\n *\n * Tl;dr: we believe it's safe to hash S = [esk * address_sk] * G using poseidon2,\n * in order to derive a symmetric key.\n *\n * If you're calling this function for a differently-derived `shared_secret`, be\n * careful.\n *\n */\n\n /* The output of this function needs to be 32 random bytes.\n * A single field won't give us 32 bytes of entropy.\n * So we compute two \"random\" fields, by poseidon-hashing with two different\n * generators.\n * We then extract the last 16 (big endian) bytes of each \"random\" field.\n * Note: we use to_be_bytes because it's slightly more efficient. But we have to\n * be careful not to take bytes from the \"big end\", because the \"big\" byte is\n * not uniformly random over the byte: it only has < 6 bits of randomness, because\n * it's the big end of a 254-bit field element.\n */\n\n let mut all_bytes: [[u8; 32]; N] = std::mem::zeroed();\n // We restrict N to be < 2^8, because of how we compute the domain separator\n // from k below (where k <= N must be 8 bits). In practice, it's extremely\n // unlikely that an app will want to compute >= 256 ciphertexts.\n std::static_assert(N < 256, \"N too large\");\n for k in 0..N {\n // We augment the domain separator with the loop index, so that we can\n // generate N lots of randomness.\n let k_shift = (k as u16 << 8);\n let separator_1 = k_shift + DOM_SEP__SYMMETRIC_KEY as u16;\n let separator_2 = k_shift + DOM_SEP__SYMMETRIC_KEY_2 as u16;\n\n let rand1: Field =\n poseidon2_hash_with_separator([shared_secret.x, shared_secret.y], separator_1);\n let rand2: Field =\n poseidon2_hash_with_separator([shared_secret.x, shared_secret.y], separator_2);\n\n let rand1_bytes: [u8; 32] = rand1.to_be_bytes();\n let rand2_bytes: [u8; 32] = rand2.to_be_bytes();\n\n let mut bytes: [u8; 32] = [0; 32];\n for i in 0..16 {\n // We take bytes from the \"little end\" of the be-bytes arrays:\n let j = 32 - i - 1;\n bytes[i] = rand1_bytes[j];\n bytes[16 + i] = rand2_bytes[j];\n }\n\n all_bytes[k] = bytes;\n }\n\n all_bytes\n}\n\nfn derive_aes_symmetric_key_and_iv_from_uniformly_random_256_bits<let N: u32>(\n many_random_256_bits: [[u8; 32]; N],\n) -> [([u8; 16], [u8; 16]); N] {\n // Many (sym_key, iv) pairs:\n let mut many_pairs: [([u8; 16], [u8; 16]); N] = std::mem::zeroed();\n for k in 0..N {\n let random_256_bits = many_random_256_bits[k];\n let mut sym_key = [0; 16];\n let mut iv = [0; 16];\n for i in 0..16 {\n sym_key[i] = random_256_bits[i];\n iv[i] = random_256_bits[i + 16];\n }\n many_pairs[k] = (sym_key, iv);\n }\n\n many_pairs\n}\n\npub fn derive_aes_symmetric_key_and_iv_from_ecdh_shared_secret_using_poseidon2_unsafe<let N: u32>(\n shared_secret: Point,\n) -> [([u8; 16], [u8; 16]); N] {\n let many_random_256_bits: [[u8; 32]; N] = extract_many_close_to_uniformly_random_256_bits_from_ecdh_shared_secret_using_poseidon2_unsafe(\n shared_secret,\n );\n\n derive_aes_symmetric_key_and_iv_from_uniformly_random_256_bits(many_random_256_bits)\n}\n\npub struct AES128 {}\n\nimpl MessageEncryption for AES128 {\n fn encrypt<let PlaintextLen: u32>(\n plaintext: [Field; PlaintextLen],\n recipient: AztecAddress,\n ) -> [Field; MESSAGE_CIPHERTEXT_LEN] {\n // AES 128 operates on bytes, not fields, so we need to convert the fields to bytes.\n // (This process is then reversed when processing the message in `process_message_ciphertext`)\n let plaintext_bytes = fields_to_bytes(plaintext);\n\n // *****************************************************************************\n // Compute the shared secret\n // *****************************************************************************\n\n let (eph_sk, eph_pk) = generate_ephemeral_key_pair();\n\n let eph_pk_sign_byte: u8 = get_sign_of_point(eph_pk) as u8;\n\n // (not to be confused with the tagging shared secret)\n // TODO (#17158): Currently we unwrap the Option returned by derive_ecdh_shared_secret.\n // We need to handle the case where the ephemeral public key is invalid to prevent potential DoS vectors.\n let ciphertext_shared_secret = derive_ecdh_shared_secret(\n eph_sk,\n recipient\n .to_address_point()\n .unwrap_or(\n // Safety: if the recipient is an invalid address, then it is not possible to encrypt a message for\n // them because we cannot establish a shared secret. This is never expected to occur during normal\n // operation. However, it is technically possible for us to receive an invalid address, and we must\n // therefore handle it.\n // We could simply fail, but that'd introduce a potential security issue in which an attacker forces\n // a contract to encrypt a message for an invalid address, resulting in an impossible transaction -\n // this is sometimes called a 'king of the hill' attack.\n // We choose instead to not fail and encrypt the plaintext regardless using the shared secret that\n // results from a random valid address. The sender is free to choose this address and hence shared\n // secret, but this has no security implications as they already know not only the full plaintext\n // but also the ephemeral private key anyway.\n unsafe { random_address_point() },\n )\n .inner,\n );\n // TODO: also use this shared secret for deriving note randomness.\n\n // *****************************************************************************\n // Convert the plaintext into whatever format the encryption function expects\n // *****************************************************************************\n\n // Already done for this strategy: AES expects bytes.\n\n // *****************************************************************************\n // Encrypt the plaintext\n // *****************************************************************************\n\n // It is safe to call the `unsafe` function here, because we know the `shared_secret`\n // was derived using an AztecAddress (the recipient). See the block comment\n // at the start of this unsafe target function for more info.\n let pairs = derive_aes_symmetric_key_and_iv_from_ecdh_shared_secret_using_poseidon2_unsafe::<2>(\n ciphertext_shared_secret,\n );\n let (body_sym_key, body_iv) = pairs[0];\n let (header_sym_key, header_iv) = pairs[1];\n\n let ciphertext_bytes = aes128_encrypt(plaintext_bytes, body_iv, body_sym_key);\n\n // |full_pt| = |pt_length| + |pt|\n // |pt_aes_padding| = 16 - (|full_pt| % 16)\n // or... since a % b is the same as a - b * (a // b) (integer division), so:\n // |pt_aes_padding| = 16 - (|full_pt| - 16 * (|full_pt| // 16))\n // |ct| = |full_pt| + |pt_aes_padding|\n // = |full_pt| + 16 - (|full_pt| - 16 * (|full_pt| // 16))\n // = 16 + 16 * (|full_pt| // 16)\n // = 16 * (1 + |full_pt| // 16)\n std::static_assert(\n ciphertext_bytes.len() == 16 * (1 + (PlaintextLen * 32) / 16),\n \"unexpected ciphertext length\",\n );\n\n // *****************************************************************************\n // Compute the header ciphertext\n // *****************************************************************************\n\n // Header contains only the length of the ciphertext stored in 2 bytes.\n let mut header_plaintext: [u8; 2] = [0 as u8; 2];\n let ciphertext_bytes_length = ciphertext_bytes.len();\n header_plaintext[0] = (ciphertext_bytes_length >> 8) as u8;\n header_plaintext[1] = ciphertext_bytes_length as u8;\n\n // Note: the aes128_encrypt builtin fn automatically appends bytes to the\n // input, according to pkcs#7; hence why the output `header_ciphertext_bytes` is 16\n // bytes larger than the input in this case.\n let header_ciphertext_bytes = aes128_encrypt(header_plaintext, header_iv, header_sym_key);\n // I recall that converting a slice to an array incurs constraints, so I'll check the length this way instead:\n std::static_assert(\n header_ciphertext_bytes.len() == HEADER_CIPHERTEXT_SIZE_IN_BYTES,\n \"unexpected ciphertext header length\",\n );\n\n // *****************************************************************************\n // Prepend / append more bytes of data to the ciphertext, before converting back\n // to fields.\n // *****************************************************************************\n\n let mut message_bytes_padding_to_mult_31 =\n get_arr_of_size__message_bytes_padding__from_PT::<PlaintextLen * 32>();\n // Safety: this randomness won't be constrained to be random. It's in the\n // interest of the executor of this fn to encrypt with random bytes.\n message_bytes_padding_to_mult_31 = unsafe { get_random_bytes() };\n\n let mut message_bytes = get_arr_of_size__message_bytes__from_PT::<PlaintextLen * 32>();\n\n std::static_assert(\n message_bytes.len() % 31 == 0,\n \"Unexpected error: message_bytes.len() should be divisible by 31, by construction.\",\n );\n\n message_bytes[0] = eph_pk_sign_byte;\n let mut offset = 1;\n for i in 0..header_ciphertext_bytes.len() {\n message_bytes[offset + i] = header_ciphertext_bytes[i];\n }\n offset += header_ciphertext_bytes.len();\n\n for i in 0..ciphertext_bytes.len() {\n message_bytes[offset + i] = ciphertext_bytes[i];\n }\n offset += ciphertext_bytes.len();\n\n for i in 0..message_bytes_padding_to_mult_31.len() {\n message_bytes[offset + i] = message_bytes_padding_to_mult_31[i];\n }\n offset += message_bytes_padding_to_mult_31.len();\n\n // Ideally we would be able to have a static assert where we check that the offset would be such that we've\n // written to the entire log_bytes array, but we cannot since Noir does not treat the offset as a comptime\n // value (despite the values that it goes through being known at each stage). We instead check that the\n // computation used to obtain the offset computes the expected value (which we _can_ do in a static check), and\n // then add a cheap runtime check to also validate that the offset matches this.\n std::static_assert(\n 1\n + header_ciphertext_bytes.len()\n + ciphertext_bytes.len()\n + message_bytes_padding_to_mult_31.len()\n == message_bytes.len(),\n \"unexpected message length\",\n );\n assert(offset == message_bytes.len(), \"unexpected encrypted message length\");\n\n // *****************************************************************************\n // Convert bytes back to fields\n // *****************************************************************************\n\n // TODO(#12749): As Mike pointed out, we need to make messages produced by different encryption schemes\n // indistinguishable from each other and for this reason the output here and in the last for-loop of this function\n // should cover a full field.\n let message_bytes_as_fields = bytes_to_fields(message_bytes);\n\n // *****************************************************************************\n // Prepend / append fields, to create the final message\n // *****************************************************************************\n\n let mut ciphertext: [Field; MESSAGE_CIPHERTEXT_LEN] = [0; MESSAGE_CIPHERTEXT_LEN];\n\n ciphertext[0] = eph_pk.x;\n\n let mut offset = 1;\n for i in 0..message_bytes_as_fields.len() {\n ciphertext[offset + i] = message_bytes_as_fields[i];\n }\n offset += message_bytes_as_fields.len();\n\n for i in offset..MESSAGE_CIPHERTEXT_LEN {\n // We need to get a random value that fits in 31 bytes to not leak information about the size of the message\n // (all the \"real\" message fields contain at most 31 bytes because of the way we convert the bytes to fields).\n // TODO(#12749): Long term, this is not a good solution.\n\n // Safety: we assume that the sender wants for the message to be private - a malicious one could simply reveal its\n // contents publicly. It is therefore fine to trust the sender to provide random padding.\n let field_bytes = unsafe { get_random_bytes::<31>() };\n ciphertext[i] = Field::from_be_bytes::<31>(field_bytes);\n }\n\n ciphertext\n }\n\n unconstrained fn decrypt(\n ciphertext: BoundedVec<Field, MESSAGE_CIPHERTEXT_LEN>,\n recipient: AztecAddress,\n ) -> Option<BoundedVec<Field, MESSAGE_PLAINTEXT_LEN>> {\n let eph_pk_x = ciphertext.get(0);\n\n let ciphertext_without_eph_pk_x_fields = array::subbvec::<Field, MESSAGE_CIPHERTEXT_LEN, MESSAGE_CIPHERTEXT_LEN - EPH_PK_X_SIZE_IN_FIELDS>(\n ciphertext,\n EPH_PK_X_SIZE_IN_FIELDS,\n );\n\n // Convert the ciphertext represented as fields to a byte representation (its original format)\n let ciphertext_without_eph_pk_x = bytes_from_fields(ciphertext_without_eph_pk_x_fields);\n\n // First byte of the ciphertext represents the ephemeral public key sign\n let eph_pk_sign_bool = ciphertext_without_eph_pk_x.get(0) != 0;\n\n // With the sign and the x-coordinate of the ephemeral public key, we can reconstruct the point. This may fail\n // however, as not all x-coordinates are on the curve. In that case, we simply return `Option::none`.\n point_from_x_coord_and_sign(eph_pk_x, eph_pk_sign_bool).map(|eph_pk| {\n // Derive shared secret\n let ciphertext_shared_secret = get_shared_secret(recipient, eph_pk);\n\n // Derive symmetric keys:\n let pairs = derive_aes_symmetric_key_and_iv_from_ecdh_shared_secret_using_poseidon2_unsafe::<2>(\n ciphertext_shared_secret,\n );\n let (body_sym_key, body_iv) = pairs[0];\n let (header_sym_key, header_iv) = pairs[1];\n\n // Extract the header ciphertext\n let header_start = EPH_PK_SIGN_BYTE_SIZE_IN_BYTES; // Skip eph_pk_sign byte\n let header_ciphertext: [u8; HEADER_CIPHERTEXT_SIZE_IN_BYTES] =\n array::subarray(ciphertext_without_eph_pk_x.storage(), header_start);\n // We need to convert the array to a BoundedVec because the oracle expects a BoundedVec as it's designed to work\n // with messages with unknown length at compile time. This would not be necessary here as the header ciphertext length\n // is fixed. But we do it anyway to not have to have duplicate oracles.\n let header_ciphertext_bvec =\n BoundedVec::<u8, HEADER_CIPHERTEXT_SIZE_IN_BYTES>::from_array(header_ciphertext);\n\n // Decrypt header\n let header_plaintext =\n aes128_decrypt_oracle(header_ciphertext_bvec, header_iv, header_sym_key);\n\n // Extract ciphertext length from header (2 bytes, big-endian)\n let ciphertext_length =\n ((header_plaintext.get(0) as u32) << 8) | (header_plaintext.get(1) as u32);\n\n // Extract and decrypt main ciphertext\n let ciphertext_start = header_start + HEADER_CIPHERTEXT_SIZE_IN_BYTES;\n let ciphertext_with_padding: [u8; (MESSAGE_CIPHERTEXT_LEN - EPH_PK_X_SIZE_IN_FIELDS) * 31 - HEADER_CIPHERTEXT_SIZE_IN_BYTES - EPH_PK_SIGN_BYTE_SIZE_IN_BYTES] =\n array::subarray(ciphertext_without_eph_pk_x.storage(), ciphertext_start);\n let ciphertext: BoundedVec<u8, (MESSAGE_CIPHERTEXT_LEN - EPH_PK_X_SIZE_IN_FIELDS) * 31 - HEADER_CIPHERTEXT_SIZE_IN_BYTES - EPH_PK_SIGN_BYTE_SIZE_IN_BYTES> =\n BoundedVec::from_parts(ciphertext_with_padding, ciphertext_length);\n\n // Decrypt main ciphertext and return it\n let plaintext_bytes = aes128_decrypt_oracle(ciphertext, body_iv, body_sym_key);\n\n // Each field of the original note message was serialized to 32 bytes so we convert the bytes back to fields.\n fields_from_bytes(plaintext_bytes)\n })\n }\n}\n\n/// Produces a random valid address point, i.e. one that is on the curve. This is equivalent to calling\n/// [AztecAddress::to_address_point] on a random valid address.\nunconstrained fn random_address_point() -> AddressPoint {\n let mut result = std::mem::zeroed();\n\n loop {\n // We simply produce random x coordinates until we find one that is on the curve. About half of the x\n // coordinates fulfill this condition, so this should only take a few iterations at most.\n let x_coord = random();\n let point = point_from_x_coord_and_sign(x_coord, true);\n if point.is_some() {\n result = AddressPoint { inner: point.unwrap() };\n break;\n }\n }\n\n result\n}\n\nmod test {\n use crate::{\n keys::ecdh_shared_secret::derive_ecdh_shared_secret,\n messages::{\n encoding::MESSAGE_PLAINTEXT_LEN, encryption::message_encryption::MessageEncryption,\n },\n test::helpers::test_environment::TestEnvironment,\n };\n use super::{AES128, random_address_point};\n use protocol_types::{address::AztecAddress, traits::FromField};\n use std::{embedded_curve_ops::EmbeddedCurveScalar, test::OracleMock};\n\n #[test]\n unconstrained fn encrypt_decrypt_deterministic() {\n let env = TestEnvironment::new();\n\n // Message decryption requires oracles that are only available during private execution\n env.private_context(|_| {\n let plaintext = [1, 2, 3];\n\n let recipient = AztecAddress::from_field(\n 0x25afb798ea6d0b8c1618e50fdeafa463059415013d3b7c75d46abf5e242be70c,\n );\n\n // Mock random values for deterministic test\n let eph_sk = 0x1358d15019d4639393d62b97e1588c095957ce74a1c32d6ec7d62fe6705d9538;\n let _ = OracleMock::mock(\"utilityGetRandomField\").returns(eph_sk).times(1);\n\n let randomness = 0x0101010101010101010101010101010101010101010101010101010101010101;\n let _ = OracleMock::mock(\"utilityGetRandomField\").returns(randomness).times(1000000);\n\n let _ = OracleMock::mock(\"privateGetNextAppTagAsSender\").returns(42);\n\n // Encrypt the message\n let encrypted_message = BoundedVec::from_array(AES128::encrypt(plaintext, recipient));\n\n // Mock shared secret for deterministic test\n let shared_secret = derive_ecdh_shared_secret(\n EmbeddedCurveScalar::from_field(eph_sk),\n recipient.to_address_point().unwrap().inner,\n );\n\n let _ = OracleMock::mock(\"utilityGetSharedSecret\").returns(shared_secret);\n\n // Decrypt the message\n let decrypted = AES128::decrypt(encrypted_message, recipient).unwrap();\n\n // The decryption function spits out a BoundedVec because it's designed to work with messages with unknown length\n // at compile time. For this reason we need to convert the original input to a BoundedVec.\n let plaintext_bvec = BoundedVec::<Field, MESSAGE_PLAINTEXT_LEN>::from_array(plaintext);\n\n // Verify decryption matches original plaintext\n assert_eq(\n decrypted,\n plaintext_bvec,\n \"Decrypted bytes should match original plaintext\",\n );\n\n // The following is a workaround of \"struct is never constructed\" Noir compilation error (we only ever use\n // static methods of the struct).\n let _ = AES128 {};\n });\n }\n\n #[test]\n unconstrained fn encrypt_decrypt_random() {\n // Same as `encrypt_decrypt_deterministic`, except we don't mock any of the oracles and rely on\n // `TestEnvironment` instead.\n let mut env = TestEnvironment::new();\n\n let recipient = env.create_light_account();\n\n env.private_context(|_| {\n let plaintext = [1, 2, 3];\n let ciphertext = AES128::encrypt(plaintext, recipient);\n\n assert_eq(\n AES128::decrypt(BoundedVec::from_array(ciphertext), recipient).unwrap(),\n BoundedVec::from_array(plaintext),\n );\n });\n }\n\n #[test]\n unconstrained fn encrypt_to_invalid_address() {\n // x = 3 is a non-residue for this curve, resulting in an invalid address\n let invalid_address = AztecAddress { inner: 3 };\n\n // We just test that we produced some output and did not crash - the result is gibberish as it is encrypted\n // using a public key for which we do not know the private key.\n let _ = AES128::encrypt([1, 2, 3, 4], invalid_address);\n }\n\n #[test]\n unconstrained fn random_address_point_produces_valid_points() {\n // About half of random addresses are invalid, so testing just a couple gives us high confidence that\n // `random_address_point` is indeed producing valid addresses.\n for _ in 0..10 {\n let random_address = AztecAddress { inner: random_address_point().inner.x };\n assert(random_address.to_address_point().is_some());\n }\n }\n\n #[test]\n unconstrained fn decrypt_invalid_ephemeral_public_key() {\n let mut env = TestEnvironment::new();\n\n let recipient = env.create_light_account();\n\n env.private_context(|_| {\n let plaintext = [1, 2, 3, 4];\n let ciphertext = AES128::encrypt(plaintext, recipient);\n\n // The first field of the ciphertext is the x-coordinate of the ephemeral public key. We set it to a known\n // non-residue (3), causing `decrypt` to fail to produce a decryption shared secret.\n let mut bad_ciphertext = BoundedVec::from_array(ciphertext);\n bad_ciphertext.set(0, 3);\n\n assert(AES128::decrypt(bad_ciphertext, recipient).is_none());\n });\n }\n}\n"
|
|
3406
3406
|
},
|
|
3407
3407
|
"138": {
|
|
3408
3408
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/aztec-nr/aztec/src/messages/logs/event.nr",
|
|
@@ -3418,7 +3418,7 @@
|
|
|
3418
3418
|
},
|
|
3419
3419
|
"151": {
|
|
3420
3420
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/aztec-nr/aztec/src/messages/processing/mod.nr",
|
|
3421
|
-
"source": "pub(crate) mod event_validation_request;\n\nmod message_context;\npub use message_context::MessageContext;\n\npub(crate) mod note_validation_request;\npub(crate) mod log_retrieval_request;\npub(crate) mod log_retrieval_response;\npub(crate) mod pending_tagged_log;\n\nuse crate::{\n capsules::CapsuleArray,\n event::EventSelector,\n messages::{\n discovery::partial_notes::DeliveredPendingPartialNote,\n logs::{event::MAX_EVENT_SERIALIZED_LEN, note::MAX_NOTE_PACKED_LEN},\n processing::{\n log_retrieval_request::LogRetrievalRequest,\n log_retrieval_response::LogRetrievalResponse,\n note_validation_request::NoteValidationRequest, pending_tagged_log::PendingTaggedLog,\n },\n },\n oracle,\n};\nuse event_validation_request::EventValidationRequest;\nuse protocol_types::{address::AztecAddress, hash::sha256_to_field};\n\n// Base slot for the pending tagged log array to which the fetch_tagged_logs oracle inserts found private logs.\nglobal PENDING_TAGGED_LOG_ARRAY_BASE_SLOT: Field =\n sha256_to_field(\"AZTEC_NR::PENDING_TAGGED_LOG_ARRAY_BASE_SLOT\".as_bytes());\n\nglobal NOTE_VALIDATION_REQUESTS_ARRAY_BASE_SLOT: Field = sha256_to_field(\n \"AZTEC_NR::NOTE_VALIDATION_REQUESTS_ARRAY_BASE_SLOT\".as_bytes(),\n);\n\nglobal EVENT_VALIDATION_REQUESTS_ARRAY_BASE_SLOT: Field = sha256_to_field(\n \"AZTEC_NR::EVENT_VALIDATION_REQUESTS_ARRAY_BASE_SLOT\".as_bytes(),\n);\n\nglobal LOG_RETRIEVAL_REQUESTS_ARRAY_BASE_SLOT: Field = sha256_to_field(\n \"AZTEC_NR::LOG_RETRIEVAL_REQUESTS_ARRAY_BASE_SLOT\".as_bytes(),\n);\n\nglobal LOG_RETRIEVAL_RESPONSES_ARRAY_BASE_SLOT: Field = sha256_to_field(\n \"AZTEC_NR::LOG_RETRIEVAL_RESPONSES_ARRAY_BASE_SLOT\".as_bytes(),\n);\n\n/// Searches for private logs emitted by `contract_address` that might contain messages for one of the local accounts,\n/// and stores them in a `CapsuleArray` which is then returned.\npub(crate) unconstrained fn get_private_logs(\n contract_address: AztecAddress,\n) -> CapsuleArray<PendingTaggedLog> {\n // We will eventually perform log discovery via tagging here, but for now we simply call the `fetchTaggedLogs`\n // oracle. This makes PXE synchronize tags, download logs and store the pending tagged logs in a capsule array.\n oracle::message_processing::fetch_tagged_logs(PENDING_TAGGED_LOG_ARRAY_BASE_SLOT);\n\n CapsuleArray::at(contract_address, PENDING_TAGGED_LOG_ARRAY_BASE_SLOT)\n}\n\n/// Enqueues a note for validation by PXE, so that it becomes aware of a note's existence allowing for later retrieval\n/// via `get_notes` oracle. The note will be scoped to `contract_address`, meaning other contracts will not be able to\n/// access it unless authorized.\n///\n/// In order for the note validation and insertion to occur, `
|
|
3421
|
+
"source": "pub(crate) mod event_validation_request;\n\nmod message_context;\npub use message_context::MessageContext;\n\npub(crate) mod note_validation_request;\npub(crate) mod log_retrieval_request;\npub(crate) mod log_retrieval_response;\npub(crate) mod pending_tagged_log;\n\nuse crate::{\n capsules::CapsuleArray,\n event::EventSelector,\n messages::{\n discovery::partial_notes::DeliveredPendingPartialNote,\n logs::{event::MAX_EVENT_SERIALIZED_LEN, note::MAX_NOTE_PACKED_LEN},\n processing::{\n log_retrieval_request::LogRetrievalRequest,\n log_retrieval_response::LogRetrievalResponse,\n note_validation_request::NoteValidationRequest, pending_tagged_log::PendingTaggedLog,\n },\n },\n oracle,\n};\nuse event_validation_request::EventValidationRequest;\nuse protocol_types::{address::AztecAddress, hash::sha256_to_field};\n\n// Base slot for the pending tagged log array to which the fetch_tagged_logs oracle inserts found private logs.\nglobal PENDING_TAGGED_LOG_ARRAY_BASE_SLOT: Field =\n sha256_to_field(\"AZTEC_NR::PENDING_TAGGED_LOG_ARRAY_BASE_SLOT\".as_bytes());\n\nglobal NOTE_VALIDATION_REQUESTS_ARRAY_BASE_SLOT: Field = sha256_to_field(\n \"AZTEC_NR::NOTE_VALIDATION_REQUESTS_ARRAY_BASE_SLOT\".as_bytes(),\n);\n\nglobal EVENT_VALIDATION_REQUESTS_ARRAY_BASE_SLOT: Field = sha256_to_field(\n \"AZTEC_NR::EVENT_VALIDATION_REQUESTS_ARRAY_BASE_SLOT\".as_bytes(),\n);\n\nglobal LOG_RETRIEVAL_REQUESTS_ARRAY_BASE_SLOT: Field = sha256_to_field(\n \"AZTEC_NR::LOG_RETRIEVAL_REQUESTS_ARRAY_BASE_SLOT\".as_bytes(),\n);\n\nglobal LOG_RETRIEVAL_RESPONSES_ARRAY_BASE_SLOT: Field = sha256_to_field(\n \"AZTEC_NR::LOG_RETRIEVAL_RESPONSES_ARRAY_BASE_SLOT\".as_bytes(),\n);\n\n/// Searches for private logs emitted by `contract_address` that might contain messages for one of the local accounts,\n/// and stores them in a `CapsuleArray` which is then returned.\npub(crate) unconstrained fn get_private_logs(\n contract_address: AztecAddress,\n) -> CapsuleArray<PendingTaggedLog> {\n // We will eventually perform log discovery via tagging here, but for now we simply call the `fetchTaggedLogs`\n // oracle. This makes PXE synchronize tags, download logs and store the pending tagged logs in a capsule array.\n oracle::message_processing::fetch_tagged_logs(PENDING_TAGGED_LOG_ARRAY_BASE_SLOT);\n\n CapsuleArray::at(contract_address, PENDING_TAGGED_LOG_ARRAY_BASE_SLOT)\n}\n\n/// Enqueues a note for validation by PXE, so that it becomes aware of a note's existence allowing for later retrieval\n/// via `get_notes` oracle. The note will be scoped to `contract_address`, meaning other contracts will not be able to\n/// access it unless authorized.\n///\n/// In order for the note validation and insertion to occur, `validate_and_store_enqueued_notes_and_events` must be\n/// later called. For optimal performance, accumulate as many note validation requests as possible and then validate\n/// them all at the end (which results in PXE minimizing the number of network round-trips).\n///\n/// The `packed_note` is what `getNotes` will later return. PXE indexes notes by `storage_slot`, so this value\n/// is typically used to filter notes that correspond to different state variables. `note_hash` and `nullifier` are\n/// the inner hashes, i.e. the raw hashes returned by `NoteHash::compute_note_hash` and\n/// `NoteHash::compute_nullifier`. PXE will verify that the siloed unique note hash was inserted into the tree\n/// at `tx_hash`, and will store the nullifier to later check for nullification.\n///\n/// `owner` is the address used in note hash and nullifier computation, often requiring knowledge of their\n/// nullifier secret key.\n///\n/// `recipient` is the account to which the note message was delivered (i.e. the address the message was encrypted to).\n/// This determines which PXE account can see the note - other accounts will not be able to access it (e.g. other\n/// accounts will not be able to see one another's token balance notes, even in the same PXE) unless authorized. In most\n/// cases `recipient` equals `owner`, but they can differ in scenarios like delegated discovery.\npub(crate) unconstrained fn enqueue_note_for_validation(\n contract_address: AztecAddress,\n owner: AztecAddress,\n storage_slot: Field,\n randomness: Field,\n note_nonce: Field,\n packed_note: BoundedVec<Field, MAX_NOTE_PACKED_LEN>,\n note_hash: Field,\n nullifier: Field,\n tx_hash: Field,\n recipient: AztecAddress,\n) {\n // We store requests in a `CapsuleArray`, which PXE will later read from and deserialize into its version of the\n // Noir `NoteValidationRequest`\n CapsuleArray::at(contract_address, NOTE_VALIDATION_REQUESTS_ARRAY_BASE_SLOT).push(\n NoteValidationRequest {\n contract_address,\n owner,\n storage_slot,\n randomness,\n note_nonce,\n packed_note,\n note_hash,\n nullifier,\n tx_hash,\n recipient,\n },\n )\n}\n\n/// Enqueues an event for validation by PXE, so that it can be efficiently validated and then inserted into the event\n/// store.\n///\n/// In order for the event validation and insertion to occur, `validate_and_store_enqueued_notes_and_events` must be\n/// later called. For optimal performance, accumulate as many event validation requests as possible and then validate\n/// them all at the end (which results in PXE minimizing the number of network round-trips).\npub(crate) unconstrained fn enqueue_event_for_validation(\n contract_address: AztecAddress,\n event_type_id: EventSelector,\n randomness: Field,\n serialized_event: BoundedVec<Field, MAX_EVENT_SERIALIZED_LEN>,\n event_commitment: Field,\n tx_hash: Field,\n recipient: AztecAddress,\n) {\n // We store requests in a `CapsuleArray`, which PXE will later read from and deserialize into its version of the\n // Noir `EventValidationRequest`\n CapsuleArray::at(contract_address, EVENT_VALIDATION_REQUESTS_ARRAY_BASE_SLOT).push(\n EventValidationRequest {\n contract_address,\n event_type_id,\n randomness,\n serialized_event,\n event_commitment,\n tx_hash,\n recipient,\n },\n )\n}\n\n/// Validates all note and event validation requests enqueued via `enqueue_note_for_validation` and\n/// `enqueue_event_for_validation`, inserting them into the note database and event store respectively, making them\n/// queryable via `get_notes` oracle and our TS API (PXE::getPrivateEvents).\n///\n/// This automatically clears both validation request queues, so no further work needs to be done by the caller.\npub(crate) unconstrained fn validate_and_store_enqueued_notes_and_events(\n contract_address: AztecAddress,\n) {\n oracle::message_processing::validate_and_store_enqueued_notes_and_events(\n contract_address,\n NOTE_VALIDATION_REQUESTS_ARRAY_BASE_SLOT,\n EVENT_VALIDATION_REQUESTS_ARRAY_BASE_SLOT,\n );\n}\n\n/// Efficiently queries the node for logs that result in the completion of all `DeliveredPendingPartialNote`s stored in\n/// a `CapsuleArray` by performing all node communication concurrently. Returns a second `CapsuleArray` with Options for\n/// the responses that correspond to the pending partial notes at the same index.\n///\n/// For example, given an array with pending partial notes `[ p1, p2, p3 ]`, where `p1` and `p3` have corresponding\n/// completion logs but `p2` does not, the returned `CapsuleArray` will have contents\n/// `[some(p1_log), none(), some(p3_log)]`.\npub(crate) unconstrained fn get_pending_partial_notes_completion_logs(\n contract_address: AztecAddress,\n pending_partial_notes: CapsuleArray<DeliveredPendingPartialNote>,\n) -> CapsuleArray<Option<LogRetrievalResponse>> {\n let log_retrieval_requests =\n CapsuleArray::at(contract_address, LOG_RETRIEVAL_REQUESTS_ARRAY_BASE_SLOT);\n\n // We create a LogRetrievalRequest for each PendingPartialNote in the CapsuleArray. Because we need the indices in\n // the request array to match the indices in the partial note array, we can't use CapsuleArray::for_each, as that\n // function has arbitrary iteration order. Instead, we manually iterate the array from the beginning and push into\n // the requests array, which we expect to be empty.\n let mut i = 0;\n let pending_partial_notes_count = pending_partial_notes.len();\n while i < pending_partial_notes_count {\n let pending_partial_note = pending_partial_notes.get(i);\n log_retrieval_requests.push(\n LogRetrievalRequest {\n contract_address,\n unsiloed_tag: pending_partial_note.note_completion_log_tag,\n },\n );\n i += 1;\n }\n\n oracle::message_processing::bulk_retrieve_logs(\n contract_address,\n LOG_RETRIEVAL_REQUESTS_ARRAY_BASE_SLOT,\n LOG_RETRIEVAL_RESPONSES_ARRAY_BASE_SLOT,\n );\n\n CapsuleArray::at(contract_address, LOG_RETRIEVAL_RESPONSES_ARRAY_BASE_SLOT)\n}\n"
|
|
3422
3422
|
},
|
|
3423
3423
|
"16": {
|
|
3424
3424
|
"path": "std/embedded_curve_ops.nr",
|
|
@@ -3454,7 +3454,7 @@
|
|
|
3454
3454
|
},
|
|
3455
3455
|
"187": {
|
|
3456
3456
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/aztec-nr/aztec/src/oracle/message_processing.nr",
|
|
3457
|
-
"source": "use protocol_types::address::AztecAddress;\n\n/// Finds new private logs that may have been sent to all registered accounts in PXE in the current contract and makes\n/// them available for later processing in Noir by storing them in a capsule array.\npub unconstrained fn fetch_tagged_logs(pending_tagged_log_array_base_slot: Field) {\n fetch_tagged_logs_oracle(pending_tagged_log_array_base_slot);\n}\n\n#[oracle(utilityFetchTaggedLogs)]\nunconstrained fn fetch_tagged_logs_oracle(pending_tagged_log_array_base_slot: Field) {}\n\n// This must be a single oracle and not one for notes and one for events because the entire point is to validate\n// all notes and events in one go, minimizing node round-trips.\npub(crate) unconstrained fn
|
|
3457
|
+
"source": "use protocol_types::address::AztecAddress;\n\n/// Finds new private logs that may have been sent to all registered accounts in PXE in the current contract and makes\n/// them available for later processing in Noir by storing them in a capsule array.\npub unconstrained fn fetch_tagged_logs(pending_tagged_log_array_base_slot: Field) {\n fetch_tagged_logs_oracle(pending_tagged_log_array_base_slot);\n}\n\n#[oracle(utilityFetchTaggedLogs)]\nunconstrained fn fetch_tagged_logs_oracle(pending_tagged_log_array_base_slot: Field) {}\n\n// This must be a single oracle and not one for notes and one for events because the entire point is to validate\n// all notes and events in one go, minimizing node round-trips.\npub(crate) unconstrained fn validate_and_store_enqueued_notes_and_events(\n contract_address: AztecAddress,\n note_validation_requests_array_base_slot: Field,\n event_validation_requests_array_base_slot: Field,\n) {\n validate_and_store_enqueued_notes_and_events_oracle(\n contract_address,\n note_validation_requests_array_base_slot,\n event_validation_requests_array_base_slot,\n );\n}\n\n#[oracle(utilityValidateAndStoreEnqueuedNotesAndEvents)]\nunconstrained fn validate_and_store_enqueued_notes_and_events_oracle(\n contract_address: AztecAddress,\n note_validation_requests_array_base_slot: Field,\n event_validation_requests_array_base_slot: Field,\n) {}\n\npub(crate) unconstrained fn bulk_retrieve_logs(\n contract_address: AztecAddress,\n log_retrieval_requests_array_base_slot: Field,\n log_retrieval_responses_array_base_slot: Field,\n) {\n bulk_retrieve_logs_oracle(\n contract_address,\n log_retrieval_requests_array_base_slot,\n log_retrieval_responses_array_base_slot,\n );\n}\n\n#[oracle(utilityBulkRetrieveLogs)]\nunconstrained fn bulk_retrieve_logs_oracle(\n contract_address: AztecAddress,\n log_retrieval_requests_array_base_slot: Field,\n log_retrieval_responses_array_base_slot: Field,\n) {}\n"
|
|
3458
3458
|
},
|
|
3459
3459
|
"19": {
|
|
3460
3460
|
"path": "std/hash/mod.nr",
|
|
@@ -3470,15 +3470,15 @@
|
|
|
3470
3470
|
},
|
|
3471
3471
|
"195": {
|
|
3472
3472
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/aztec-nr/aztec/src/oracle/version.nr",
|
|
3473
|
-
"source": "/// The ORACLE_VERSION constant is used to check that the oracle interface is in sync between PXE and Aztec.nr. We need\n/// to version the oracle interface to ensure that developers get a reasonable error message if they use incompatible\n/// versions of Aztec.nr and PXE. The TypeScript counterpart is in `oracle_version.ts`.\n///\n/// @dev Whenever a contract function or Noir test is run, the `utilityAssertCompatibleOracleVersion` oracle is called and\n/// if the oracle version is incompatible an error is thrown.\npub global ORACLE_VERSION: Field =
|
|
3473
|
+
"source": "/// The ORACLE_VERSION constant is used to check that the oracle interface is in sync between PXE and Aztec.nr. We need\n/// to version the oracle interface to ensure that developers get a reasonable error message if they use incompatible\n/// versions of Aztec.nr and PXE. The TypeScript counterpart is in `oracle_version.ts`.\n///\n/// @dev Whenever a contract function or Noir test is run, the `utilityAssertCompatibleOracleVersion` oracle is called and\n/// if the oracle version is incompatible an error is thrown.\npub global ORACLE_VERSION: Field = 9;\n\n/// Asserts that the version of the oracle is compatible with the version expected by the contract.\npub fn assert_compatible_oracle_version() {\n // Safety: This oracle call returns nothing: we only call it to check Aztec.nr and Oracle interface versions are\n // compatible. It is therefore always safe to call.\n unsafe {\n assert_compatible_oracle_version_wrapper();\n }\n}\n\nunconstrained fn assert_compatible_oracle_version_wrapper() {\n assert_compatible_oracle_version_oracle(ORACLE_VERSION);\n}\n\n#[oracle(utilityAssertCompatibleOracleVersion)]\nunconstrained fn assert_compatible_oracle_version_oracle(version: Field) {}\n\nmod test {\n use super::{assert_compatible_oracle_version_oracle, ORACLE_VERSION};\n\n #[test]\n unconstrained fn compatible_oracle_version() {\n assert_compatible_oracle_version_oracle(ORACLE_VERSION);\n }\n\n #[test(should_fail_with = \"Incompatible oracle version. TXE is using version\")]\n unconstrained fn incompatible_oracle_version() {\n let arbitrary_incorrect_version = 318183437;\n assert_compatible_oracle_version_oracle(arbitrary_incorrect_version);\n }\n}\n"
|
|
3474
3474
|
},
|
|
3475
3475
|
"198": {
|
|
3476
3476
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/aztec-nr/aztec/src/state_vars/delayed_public_mutable.nr",
|
|
3477
|
-
"source": "use dep::protocol_types::{\n delayed_public_mutable::{\n delayed_public_mutable_values::{unpack_delay_change, unpack_value_change},\n DelayedPublicMutableValues,\n ScheduledDelayChange,\n ScheduledValueChange,\n },\n traits::Packable,\n};\n\nuse crate::{\n context::{PrivateContext, PublicContext, UtilityContext},\n state_vars::state_variable::StateVariable,\n utils::WithHash,\n};\n\nmod test;\n\npub struct DelayedPublicMutable<T, let InitialDelay: u64, Context> {\n context: Context,\n storage_slot: Field,\n}\n\n// DelayedPublicMutable<T> stores a value of type T that is:\n// - publicly known (i.e. unencrypted)\n// - mutable in public\n// - readable in private with no contention (i.e. multiple parties can all read the same value without blocking one\n// another nor needing to coordinate)\n// This is famously a hard problem to solve. DelayedPublicMutable makes it work by introducing a delay to public mutation:\n// the value is not changed immediately but rather a value change is scheduled to happen in the future after some delay\n// measured in seconds. Reads in private are only valid as long as they are included in a block with a timestamp not\n// too far into the future, so that they can guarantee the value will not have possibly changed by then (because of the\n// delay). The delay for changing a value is initially equal to InitialDelay, but can be changed by calling\n// `schedule_delay_change`.\n//\n// This implementation requires that T implements the Packable and Eq traits, and allocates `M + 1` storage slots to\n// this state variable.\nimpl<T, let InitialDelay: u64, Context, let M: u32> StateVariable<M + 1, Context> for DelayedPublicMutable<T, InitialDelay, Context>\nwhere\n DelayedPublicMutableValues<T, InitialDelay>: Packable<N = M>,\n{\n fn new(context: Context, storage_slot: Field) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n Self { context, storage_slot }\n }\n\n fn get_storage_slot(self) -> Field {\n self.storage_slot\n }\n}\n\nimpl<T, let InitialDelay: u64> DelayedPublicMutable<T, InitialDelay, PublicContext>\nwhere\n T: Eq,\n{\n\n pub fn schedule_value_change(self, new_value: T)\n where\n T: Packable,\n {\n let _value_change = self.schedule_and_return_value_change(new_value);\n }\n\n pub fn schedule_and_return_value_change(self, new_value: T) -> ScheduledValueChange<T>\n where\n T: Packable,\n {\n let mut value_change = self.read_value_change();\n let delay_change = self.read_delay_change();\n\n let current_timestamp = self.context.timestamp();\n let current_delay = delay_change.get_current(current_timestamp);\n\n // TODO: make this configurable\n // https://github.com/AztecProtocol/aztec-packages/issues/5501\n let timestamp_of_change = current_timestamp + current_delay;\n value_change.schedule_change(\n new_value,\n current_timestamp,\n current_delay,\n timestamp_of_change,\n );\n\n self.write(value_change, delay_change);\n\n value_change\n }\n\n pub fn schedule_delay_change(self, new_delay: u64)\n where\n T: Packable,\n {\n let mut delay_change = self.read_delay_change();\n\n let current_timestamp = self.context.timestamp();\n\n delay_change.schedule_change(new_delay, current_timestamp);\n\n self.write(self.read_value_change(), delay_change);\n }\n\n pub fn get_current_value(self) -> T\n where\n T: Packable,\n {\n let current_timestamp = self.context.timestamp();\n let value_change = self.read_value_change();\n\n value_change.get_current_at(current_timestamp)\n }\n\n pub fn get_current_delay(self) -> u64\n where\n T: Packable,\n {\n let current_timestamp = self.context.timestamp();\n self.read_delay_change().get_current(current_timestamp)\n }\n\n pub fn get_scheduled_value(self) -> (T, u64)\n where\n T: Packable,\n {\n self.read_value_change().get_scheduled()\n }\n\n pub fn get_scheduled_delay(self) -> (u64, u64)\n where\n T: Packable,\n {\n self.read_delay_change().get_scheduled()\n }\n\n fn read_value_change(self) -> ScheduledValueChange<T>\n where\n T: Packable,\n {\n // We don't read ScheduledValueChange directly by having it implement Packable because ScheduledValueChange\n // and ScheduledDelayChange are packed together (sdc and svc.timestamp_of_change are stored in the same slot).\n let packed = self.context.storage_read(self.storage_slot);\n unpack_value_change::<T, <T as Packable>::N>(packed)\n }\n\n fn read_delay_change(self) -> ScheduledDelayChange<InitialDelay>\n where\n T: Packable,\n {\n // Since all ScheduledDelayChange member are packed into a single field, we can read a single storage slot\n // here and skip the ones that correspond to ScheduledValueChange members. We are abusing the fact that\n // the field containing the ScheduledDelayChange data is the first one in the storage layout - otherwise we'd\n // need to offset the storage slot to get the position where it'd land.\n // We don't read ScheduledDelayChange directly by having it implement Packable because ScheduledValueChange\n // and ScheduledDelayChange are packed together (sdc and svc.timestamp_of_change are stored in the same slot).\n let packed = self.context.storage_read(self.storage_slot);\n unpack_delay_change::<InitialDelay>(packed)\n }\n\n fn write(\n self,\n value_change: ScheduledValueChange<T>,\n delay_change: ScheduledDelayChange<InitialDelay>,\n )\n where\n T: Packable,\n {\n // Whenever we write to public storage, we write both the value change and delay change to storage at once.\n // We do so by wrapping them in a single struct (`DelayedPublicMutableValues`). Then we wrap the resulting struct in\n // `WithHash`.\n // Wrapping in `WithHash` makes for more costly writes but it also makes private proofs much simpler because\n // they only need to produce a historical proof for the hash, which results in a single inclusion proof (as\n // opposed to 4 in the best case scenario in which T is a single field). Private delayed public mutable reads are\n // assumed to be much more frequent than public writes, so this tradeoff makes sense.\n let values = WithHash::new(DelayedPublicMutableValues::new(value_change, delay_change));\n\n self.context.storage_write(self.storage_slot, values);\n }\n}\n\nimpl<T, let InitialDelay: u64> DelayedPublicMutable<T, InitialDelay, &mut PrivateContext>\nwhere\n T: Eq,\n{\n pub fn get_current_value(self) -> T\n where\n T: Packable,\n {\n // When reading the current value in private we construct a historical state proof for the public value.\n // However, since this value might change, we must constrain the maximum transaction timestamp as this proof\n // will only be valid for the time we can ensure the value will not change, which will depend on the\n // current delay and any scheduled delay changes.\n let (value_change, delay_change, anchor_timestamp) = self.anchor_read_from_public_storage();\n\n // We use the effective minimum delay as opposed to the current delay at the anchor block's timestamp as this\n // one also takes into consideration any scheduled delay changes.\n // For example, consider a scenario in which at timestamp `x` the current delay was 86400 seconds (1 day). We\n // may naively think that the earliest we could change the value would be at timestamp `x + 86400` by\n // scheduling immediately after the anchor block's timestamp, i.e. at timestamp `x + 1`. But if there was\n // a delay change scheduled for timestamp `y` to reduce the delay to 43200 seconds (12 hours), then if a value\n // change was scheduled at timestamp `y` it would go into effect at timestamp `y + 43200`, which is earlier\n // than what we'd expect if we only considered the current delay.\n let effective_minimum_delay = delay_change.get_effective_minimum_delay_at(anchor_timestamp);\n let time_horizon = value_change.get_time_horizon(anchor_timestamp, effective_minimum_delay);\n\n // We prevent this transaction from being included in any timestamp after the time horizon, ensuring that the\n // historical public value matches the current one, since it can only change after the horizon.\n self.context.set_include_by_timestamp(time_horizon);\n\n value_change.get_current_at(anchor_timestamp)\n }\n\n fn anchor_read_from_public_storage(\n self,\n ) -> (ScheduledValueChange<T>, ScheduledDelayChange<InitialDelay>, u64)\n where\n T: Packable,\n {\n let header = self.context.get_anchor_block_header();\n let address = self.context.this_address();\n\n let anchor_timestamp = header.global_variables.timestamp;\n\n let values: DelayedPublicMutableValues<T, InitialDelay> =\n WithHash::historical_public_storage_read(header, address, self.storage_slot);\n\n (values.svc, values.sdc, anchor_timestamp)\n }\n}\n\nimpl<T, let InitialDelay: u64> DelayedPublicMutable<T, InitialDelay, UtilityContext>\nwhere\n T: Eq,\n{\n pub unconstrained fn get_current_value(self) -> T\n where\n T: Packable,\n {\n let dpmv: DelayedPublicMutableValues<T, InitialDelay> =\n WithHash::utility_public_storage_read(self.context, self.storage_slot);\n\n let current_timestamp = self.context.timestamp();\n dpmv.svc.get_current_at(current_timestamp)\n }\n}\n"
|
|
3477
|
+
"source": "use dep::protocol_types::{\n delayed_public_mutable::{\n delayed_public_mutable_values::{unpack_delay_change, unpack_value_change},\n DelayedPublicMutableValues,\n ScheduledDelayChange,\n ScheduledValueChange,\n },\n traits::Packable,\n};\n\nuse crate::{\n context::{PrivateContext, PublicContext, UtilityContext},\n state_vars::StateVariable,\n utils::WithHash,\n};\n\nmod test;\n\n/// Public mutable values with private read access.\npub struct DelayedPublicMutable<T, let InitialDelay: u64, Context> {\n context: Context,\n storage_slot: Field,\n}\n\n// DelayedPublicMutable<T> stores a value of type T that is:\n// - publicly known (i.e. unencrypted)\n// - mutable in public\n// - readable in private with no contention (i.e. multiple parties can all read the same value without blocking one\n// another nor needing to coordinate)\n// This is famously a hard problem to solve. DelayedPublicMutable makes it work by introducing a delay to public mutation:\n// the value is not changed immediately but rather a value change is scheduled to happen in the future after some delay\n// measured in seconds. Reads in private are only valid as long as they are included in a block with a timestamp not\n// too far into the future, so that they can guarantee the value will not have possibly changed by then (because of the\n// delay). The delay for changing a value is initially equal to InitialDelay, but can be changed by calling\n// `schedule_delay_change`.\n//\n// This implementation requires that T implements the Packable and Eq traits, and allocates `M + 1` storage slots to\n// this state variable.\nimpl<T, let InitialDelay: u64, Context, let M: u32> StateVariable<M + 1, Context> for DelayedPublicMutable<T, InitialDelay, Context>\nwhere\n DelayedPublicMutableValues<T, InitialDelay>: Packable<N = M>,\n{\n fn new(context: Context, storage_slot: Field) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n Self { context, storage_slot }\n }\n\n fn get_storage_slot(self) -> Field {\n self.storage_slot\n }\n}\n\nimpl<T, let InitialDelay: u64> DelayedPublicMutable<T, InitialDelay, PublicContext>\nwhere\n T: Eq,\n{\n\n pub fn schedule_value_change(self, new_value: T)\n where\n T: Packable,\n {\n let _value_change = self.schedule_and_return_value_change(new_value);\n }\n\n pub fn schedule_and_return_value_change(self, new_value: T) -> ScheduledValueChange<T>\n where\n T: Packable,\n {\n let mut value_change = self.read_value_change();\n let delay_change = self.read_delay_change();\n\n let current_timestamp = self.context.timestamp();\n let current_delay = delay_change.get_current(current_timestamp);\n\n // TODO: make this configurable\n // https://github.com/AztecProtocol/aztec-packages/issues/5501\n let timestamp_of_change = current_timestamp + current_delay;\n value_change.schedule_change(\n new_value,\n current_timestamp,\n current_delay,\n timestamp_of_change,\n );\n\n self.write(value_change, delay_change);\n\n value_change\n }\n\n pub fn schedule_delay_change(self, new_delay: u64)\n where\n T: Packable,\n {\n let mut delay_change = self.read_delay_change();\n\n let current_timestamp = self.context.timestamp();\n\n delay_change.schedule_change(new_delay, current_timestamp);\n\n self.write(self.read_value_change(), delay_change);\n }\n\n pub fn get_current_value(self) -> T\n where\n T: Packable,\n {\n let current_timestamp = self.context.timestamp();\n let value_change = self.read_value_change();\n\n value_change.get_current_at(current_timestamp)\n }\n\n pub fn get_current_delay(self) -> u64\n where\n T: Packable,\n {\n let current_timestamp = self.context.timestamp();\n self.read_delay_change().get_current(current_timestamp)\n }\n\n pub fn get_scheduled_value(self) -> (T, u64)\n where\n T: Packable,\n {\n self.read_value_change().get_scheduled()\n }\n\n pub fn get_scheduled_delay(self) -> (u64, u64)\n where\n T: Packable,\n {\n self.read_delay_change().get_scheduled()\n }\n\n fn read_value_change(self) -> ScheduledValueChange<T>\n where\n T: Packable,\n {\n // We don't read ScheduledValueChange directly by having it implement Packable because ScheduledValueChange\n // and ScheduledDelayChange are packed together (sdc and svc.timestamp_of_change are stored in the same slot).\n let packed = self.context.storage_read(self.storage_slot);\n unpack_value_change::<T, <T as Packable>::N>(packed)\n }\n\n fn read_delay_change(self) -> ScheduledDelayChange<InitialDelay>\n where\n T: Packable,\n {\n // Since all ScheduledDelayChange member are packed into a single field, we can read a single storage slot\n // here and skip the ones that correspond to ScheduledValueChange members. We are abusing the fact that\n // the field containing the ScheduledDelayChange data is the first one in the storage layout - otherwise we'd\n // need to offset the storage slot to get the position where it'd land.\n // We don't read ScheduledDelayChange directly by having it implement Packable because ScheduledValueChange\n // and ScheduledDelayChange are packed together (sdc and svc.timestamp_of_change are stored in the same slot).\n let packed = self.context.storage_read(self.storage_slot);\n unpack_delay_change::<InitialDelay>(packed)\n }\n\n fn write(\n self,\n value_change: ScheduledValueChange<T>,\n delay_change: ScheduledDelayChange<InitialDelay>,\n )\n where\n T: Packable,\n {\n // Whenever we write to public storage, we write both the value change and delay change to storage at once.\n // We do so by wrapping them in a single struct (`DelayedPublicMutableValues`). Then we wrap the resulting struct in\n // `WithHash`.\n // Wrapping in `WithHash` makes for more costly writes but it also makes private proofs much simpler because\n // they only need to produce a historical proof for the hash, which results in a single inclusion proof (as\n // opposed to 4 in the best case scenario in which T is a single field). Private delayed public mutable reads are\n // assumed to be much more frequent than public writes, so this tradeoff makes sense.\n let values = WithHash::new(DelayedPublicMutableValues::new(value_change, delay_change));\n\n self.context.storage_write(self.storage_slot, values);\n }\n}\n\nimpl<T, let InitialDelay: u64> DelayedPublicMutable<T, InitialDelay, &mut PrivateContext>\nwhere\n T: Eq,\n{\n pub fn get_current_value(self) -> T\n where\n T: Packable,\n {\n // When reading the current value in private we construct a historical state proof for the public value.\n // However, since this value might change, we must constrain the maximum transaction timestamp as this proof\n // will only be valid for the time we can ensure the value will not change, which will depend on the\n // current delay and any scheduled delay changes.\n let (value_change, delay_change, anchor_timestamp) = self.anchor_read_from_public_storage();\n\n // We use the effective minimum delay as opposed to the current delay at the anchor block's timestamp as this\n // one also takes into consideration any scheduled delay changes.\n // For example, consider a scenario in which at timestamp `x` the current delay was 86400 seconds (1 day). We\n // may naively think that the earliest we could change the value would be at timestamp `x + 86400` by\n // scheduling immediately after the anchor block's timestamp, i.e. at timestamp `x + 1`. But if there was\n // a delay change scheduled for timestamp `y` to reduce the delay to 43200 seconds (12 hours), then if a value\n // change was scheduled at timestamp `y` it would go into effect at timestamp `y + 43200`, which is earlier\n // than what we'd expect if we only considered the current delay.\n let effective_minimum_delay = delay_change.get_effective_minimum_delay_at(anchor_timestamp);\n let time_horizon = value_change.get_time_horizon(anchor_timestamp, effective_minimum_delay);\n\n // We prevent this transaction from being included in any timestamp after the time horizon, ensuring that the\n // historical public value matches the current one, since it can only change after the horizon.\n self.context.set_include_by_timestamp(time_horizon);\n\n value_change.get_current_at(anchor_timestamp)\n }\n\n fn anchor_read_from_public_storage(\n self,\n ) -> (ScheduledValueChange<T>, ScheduledDelayChange<InitialDelay>, u64)\n where\n T: Packable,\n {\n let header = self.context.get_anchor_block_header();\n let address = self.context.this_address();\n\n let anchor_timestamp = header.global_variables.timestamp;\n\n let values: DelayedPublicMutableValues<T, InitialDelay> =\n WithHash::historical_public_storage_read(header, address, self.storage_slot);\n\n (values.svc, values.sdc, anchor_timestamp)\n }\n}\n\nimpl<T, let InitialDelay: u64> DelayedPublicMutable<T, InitialDelay, UtilityContext>\nwhere\n T: Eq,\n{\n pub unconstrained fn get_current_value(self) -> T\n where\n T: Packable,\n {\n let dpmv: DelayedPublicMutableValues<T, InitialDelay> =\n WithHash::utility_public_storage_read(self.context, self.storage_slot);\n\n let current_timestamp = self.context.timestamp();\n dpmv.svc.get_current_at(current_timestamp)\n }\n}\n"
|
|
3478
3478
|
},
|
|
3479
3479
|
"199": {
|
|
3480
3480
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/aztec-nr/aztec/src/state_vars/map.nr",
|
|
3481
|
-
"source": "use crate::state_vars::
|
|
3481
|
+
"source": "use crate::state_vars::StateVariable;\nuse dep::protocol_types::{storage::map::derive_storage_slot_in_map, traits::ToField};\n\n/// A key-value container for state variables.\n///\n/// A key-value storage container that maps keys to state variables, similar\n/// to Solidity mappings.\n///\n/// `Map` enables you to associate keys (like addresses or other identifiers)\n/// with state variables in your Aztec smart contract. This is conceptually\n/// similar to Solidity's `mapping(K => V)` syntax, where you can store and\n/// retrieve values by their associated keys.\n///\n/// You can declare a state variable contained within a Map in your contract's\n/// [storage](crate::macros::storage::storage) struct.\n///\n/// For example, you might use\n/// `Map<AztecAddress, PublicMutable<FieldNote, Context>, Context>` to track\n/// token balances for different users, similar to how you'd use\n/// `mapping(address => uint256)` in Solidity.\n///\n/// > Aside: the verbose `Context` in the declaration is a consequence of\n/// > leveraging Noir's regular syntax for generics to ensure that certain\n/// > state variable methods can only be called in some contexts (private,\n/// > public, utility).\n///\n/// The methods of Map are:\n/// - `at` (access state variable for a given key)\n/// (see the method's own doc comments for more info).\n///\n/// ## Generic Parameters\n/// - `K`: The key type (must implement `ToField` trait for hashing)\n/// - `V`: The value type:\n/// - any Aztec state variable (variable that implements the StateVariable trait):\n/// - `PublicMutable`\n/// - `PublicImmutable`\n/// - `DelayedPublicMutable`\n/// - `Map`\n/// - `Context`: The execution context (handles private/public function\n/// contexts)\n///\n/// ## Usage\n/// Maps are typically declared in your contract's [storage](crate::macros::storage::storage) struct and\n/// accessed\n/// using the `at(key)` method to get the state variable for a specific key.\n/// The resulting state variable can then be read from or written to using its\n/// own methods.\n///\n/// Note that maps cannot be used with owned state variables (variables that\n/// implement the OwnedStateVariable trait) - those need to be wrapped in an\n/// `Owned` state variable instead.\n///\n/// ## Advanced\n/// Internally, `Map` uses a single base storage slot to represent the\n/// mapping\n/// itself, similar to Solidity's approach. Individual key-value pairs are\n/// stored at derived storage slots computed by hashing the base storage\n/// slot\n/// with the key using Poseidon2. This ensures:\n/// - No storage slot collisions between different keys\n/// - Uniform distribution of storage slots across the storage space\n/// - Compatibility with Aztec's storage tree structure\n/// - Gas-efficient storage access patterns similar to Solidity mappings\n///\n/// The storage slot derivation uses `derive_storage_slot_in_map(base_slot,\n/// key)` which computes `poseidon2_hash([base_slot, key.to_field()])`,\n/// ensuring cryptographically secure slot separation.\n///\n/// docs:start:map\npub struct Map<K, V, Context> {\n pub context: Context,\n storage_slot: Field,\n}\n\n// Map reserves a single storage slot regardless of what it stores because\n// nothing is stored at said slot: it is only used to derive the storage slots\n// of nested state variables, which is expected to never result in collisions\n// or slots being close to one another due to these being hashes. This mirrors\n// the strategy adopted by Solidity mappings.\nimpl<K, V, Context> StateVariable<1, Context> for Map<K, V, Context> {\n fn new(context: Context, storage_slot: Field) -> Self {\n assert(storage_slot != 0, \"Storage slot 0 not allowed. Storage slots must start from 1.\");\n Map { context, storage_slot }\n }\n\n fn get_storage_slot(self) -> Field {\n self.storage_slot\n }\n}\n\nimpl<K, V, Context> Map<K, V, Context> {\n /// Returns the state variable associated with the given key.\n ///\n /// This is equivalent to accessing `mapping[key]` in Solidity. It returns\n /// the state variable instance for the specified key, which can then be\n /// used to read or write the value at that key.\n ///\n /// Unlike Solidity mappings which return the value directly, this returns\n /// the state variable wrapper (like PublicMutable, nested Map etc.)\n /// that you then call methods on to interact with the actual value.\n ///\n /// # Arguments\n ///\n /// * `key` - The key to look up in the map. Must implement the ToField\n /// trait (which most basic Noir & Aztec types do).\n ///\n /// # Returns\n ///\n /// * `V` - The state variable instance for this key. You can then call\n /// methods like `.read()`, `.write()`, `.get_note()`, etc. on this\n /// depending on the specific state variable type.\n ///\n /// # Example\n ///\n /// ```noir\n /// // Get a user's balance (assuming PrivateMutable<FieldNote>)\n /// let user_balance = self.storage.balances.at(user_address);\n /// let current_note = user_balance.get_note();\n ///\n /// // Update the balance\n /// user_balance.replace(new_note);\n /// ```\n ///\n pub fn at<let N: u32>(self, key: K) -> V\n where\n K: ToField,\n V: StateVariable<N, Context>,\n {\n V::new(\n self.context,\n derive_storage_slot_in_map(self.storage_slot, key),\n )\n }\n}\n"
|
|
3482
3482
|
},
|
|
3483
3483
|
"240": {
|
|
3484
3484
|
"path": "/home/aztec-dev/aztec-packages/noir-projects/aztec-nr/aztec/src/utils/array/append.nr",
|