@aztec/bb-prover 0.75.0-commit.c03ba01a2a4122e43e90d5133ba017e54b90e9d2 → 0.76.0

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.
Files changed (71) hide show
  1. package/dest/avm_proving_tests/avm_proving_tester.d.ts +25 -0
  2. package/dest/avm_proving_tests/avm_proving_tester.d.ts.map +1 -0
  3. package/dest/avm_proving_tests/avm_proving_tester.js +16 -14
  4. package/dest/bb/cli.d.ts +12 -0
  5. package/dest/bb/cli.d.ts.map +1 -0
  6. package/dest/bb/cli.js +9 -4
  7. package/dest/bb/execute.d.ts +170 -0
  8. package/dest/bb/execute.d.ts.map +1 -0
  9. package/dest/bb/execute.js +267 -395
  10. package/dest/bb/index.d.ts +3 -0
  11. package/dest/bb/index.d.ts.map +1 -0
  12. package/dest/bb/index.js +6 -4
  13. package/dest/config.d.ts +13 -0
  14. package/dest/config.d.ts.map +1 -0
  15. package/dest/config.js +2 -1
  16. package/dest/honk.d.ts +13 -0
  17. package/dest/honk.d.ts.map +1 -0
  18. package/dest/honk.js +5 -8
  19. package/dest/index.d.ts +8 -0
  20. package/dest/index.d.ts.map +1 -0
  21. package/dest/index.js +1 -0
  22. package/dest/instrumentation.d.ts +47 -0
  23. package/dest/instrumentation.d.ts.map +1 -0
  24. package/dest/instrumentation.js +41 -44
  25. package/dest/prover/bb_native_private_kernel_prover.d.ts +25 -0
  26. package/dest/prover/bb_native_private_kernel_prover.d.ts.map +1 -0
  27. package/dest/prover/bb_native_private_kernel_prover.js +19 -19
  28. package/dest/prover/bb_private_kernel_prover.d.ts +31 -0
  29. package/dest/prover/bb_private_kernel_prover.d.ts.map +1 -0
  30. package/dest/prover/bb_private_kernel_prover.js +11 -11
  31. package/dest/prover/bb_prover.d.ts +123 -0
  32. package/dest/prover/bb_prover.d.ts.map +1 -0
  33. package/dest/prover/bb_prover.js +445 -431
  34. package/dest/prover/client_ivc_proof_utils.d.ts +25 -0
  35. package/dest/prover/client_ivc_proof_utils.d.ts.map +1 -0
  36. package/dest/prover/client_ivc_proof_utils.js +9 -15
  37. package/dest/prover/index.d.ts +4 -0
  38. package/dest/prover/index.d.ts.map +1 -0
  39. package/dest/prover/index.js +1 -0
  40. package/dest/stats.d.ts +5 -0
  41. package/dest/stats.d.ts.map +1 -0
  42. package/dest/stats.js +14 -15
  43. package/dest/test/index.d.ts +3 -0
  44. package/dest/test/index.d.ts.map +1 -0
  45. package/dest/test/index.js +1 -0
  46. package/dest/test/test_circuit_prover.d.ts +72 -0
  47. package/dest/test/test_circuit_prover.d.ts.map +1 -0
  48. package/dest/test/test_circuit_prover.js +160 -156
  49. package/dest/test/test_verifier.d.ts +5 -0
  50. package/dest/test/test_verifier.d.ts.map +1 -0
  51. package/dest/test/test_verifier.js +1 -0
  52. package/dest/verification_key/verification_key_data.d.ts +9 -0
  53. package/dest/verification_key/verification_key_data.d.ts.map +1 -0
  54. package/dest/verification_key/verification_key_data.js +8 -10
  55. package/dest/verifier/bb_verifier.d.ts +15 -0
  56. package/dest/verifier/bb_verifier.d.ts.map +1 -0
  57. package/dest/verifier/bb_verifier.js +13 -13
  58. package/dest/verifier/index.d.ts +2 -0
  59. package/dest/verifier/index.d.ts.map +1 -0
  60. package/dest/verifier/index.js +1 -0
  61. package/dest/wasm/bb_wasm_private_kernel_prover.d.ts +16 -0
  62. package/dest/wasm/bb_wasm_private_kernel_prover.d.ts.map +1 -0
  63. package/dest/wasm/bb_wasm_private_kernel_prover.js +10 -11
  64. package/dest/wasm/bundle.d.ts +6 -0
  65. package/dest/wasm/bundle.d.ts.map +1 -0
  66. package/dest/wasm/bundle.js +2 -1
  67. package/dest/wasm/lazy.d.ts +6 -0
  68. package/dest/wasm/lazy.d.ts.map +1 -0
  69. package/dest/wasm/lazy.js +2 -1
  70. package/package.json +10 -10
  71. package/src/avm_proving_tests/avm_proving_tester.ts +15 -3
@@ -0,0 +1,25 @@
1
+ import { ClientIvcProof } from '@aztec/circuits.js';
2
+ export declare const CLIENT_IVC_VK_FILE_NAME = "client_ivc_vk";
3
+ export declare const CLIENT_IVC_PROOF_FILE_NAME = "client_ivc_proof";
4
+ /**
5
+ * TODO(#7371): eventually remove client_ivc_prove_output_all_msgpack and properly handle these accumulators and VKs
6
+ * Create a ClientIvcProof from the result of client_ivc_prove_output_all or client_ivc_prove_output_all_msgpack
7
+ * @param directory the directory of results
8
+ * @returns the encapsulated client ivc proof
9
+ */
10
+ export declare function readFromOutputDirectory(directory: string): Promise<ClientIvcProof>;
11
+ /**
12
+ * TODO(#7371): eventually remove client_ivc_prove_output_all_msgpack and properly handle these accumulators and VKs
13
+ * Serialize a ClientIvcProof to the files expected by prove_tube
14
+ *
15
+ * Example usage:
16
+ * await runInDirectory(bbWorkingDirectory, async (dir: string) => {
17
+ * await privateTx.clientIvcProof!.writeToOutputDirectory(bbWorkingDirectory);
18
+ * const result = await generateTubeProof(bbPath, dir, logger.info)
19
+ * expect(result.status).toBe(BB_RESULT.SUCCESS)
20
+ * });
21
+ * @param proof the ClientIvcProof from readFromOutputDirectory
22
+ * @param directory the directory of results
23
+ */
24
+ export declare function writeToOutputDirectory(clientIvcProof: ClientIvcProof, directory: string): Promise<void>;
25
+ //# sourceMappingURL=client_ivc_proof_utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client_ivc_proof_utils.d.ts","sourceRoot":"","sources":["../../src/prover/client_ivc_proof_utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAKpD,eAAO,MAAM,uBAAuB,kBAAkB,CAAC;AACvD,eAAO,MAAM,0BAA0B,qBAAqB,CAAC;AAE7D;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAAC,SAAS,EAAE,MAAM,2BAK9D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,sBAAsB,CAAC,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,iBAO7F"}
@@ -8,11 +8,9 @@ export const CLIENT_IVC_PROOF_FILE_NAME = 'client_ivc_proof';
8
8
  * Create a ClientIvcProof from the result of client_ivc_prove_output_all or client_ivc_prove_output_all_msgpack
9
9
  * @param directory the directory of results
10
10
  * @returns the encapsulated client ivc proof
11
- */ export async function readFromOutputDirectory(directory) {
12
- const [clientIvcVkBuffer, clientIvcProofBuffer] = await Promise.all([
13
- CLIENT_IVC_VK_FILE_NAME,
14
- CLIENT_IVC_PROOF_FILE_NAME
15
- ].map((fileName)=>fs.readFile(join(directory, fileName))));
11
+ */
12
+ export async function readFromOutputDirectory(directory) {
13
+ const [clientIvcVkBuffer, clientIvcProofBuffer] = await Promise.all([CLIENT_IVC_VK_FILE_NAME, CLIENT_IVC_PROOF_FILE_NAME].map(fileName => fs.readFile(join(directory, fileName))));
16
14
  return new ClientIvcProof(clientIvcProofBuffer, clientIvcVkBuffer);
17
15
  }
18
16
  /**
@@ -27,17 +25,13 @@ export const CLIENT_IVC_PROOF_FILE_NAME = 'client_ivc_proof';
27
25
  * });
28
26
  * @param proof the ClientIvcProof from readFromOutputDirectory
29
27
  * @param directory the directory of results
30
- */ export async function writeToOutputDirectory(clientIvcProof, directory) {
28
+ */
29
+ export async function writeToOutputDirectory(clientIvcProof, directory) {
31
30
  const { clientIvcProofBuffer, clientIvcVkBuffer } = clientIvcProof;
32
31
  const fileData = [
33
- [
34
- CLIENT_IVC_PROOF_FILE_NAME,
35
- clientIvcProofBuffer
36
- ],
37
- [
38
- CLIENT_IVC_VK_FILE_NAME,
39
- clientIvcVkBuffer
40
- ]
32
+ [CLIENT_IVC_PROOF_FILE_NAME, clientIvcProofBuffer],
33
+ [CLIENT_IVC_VK_FILE_NAME, clientIvcVkBuffer],
41
34
  ];
42
- await Promise.all(fileData.map(([fileName, buffer])=>fs.writeFile(join(directory, fileName), buffer)));
35
+ await Promise.all(fileData.map(([fileName, buffer]) => fs.writeFile(join(directory, fileName), buffer)));
43
36
  }
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50X2l2Y19wcm9vZl91dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm92ZXIvY2xpZW50X2l2Y19wcm9vZl91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFcEQsT0FBTyxFQUFFLFFBQVEsSUFBSSxFQUFFLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDcEMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU1QixNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxlQUFlLENBQUM7QUFDdkQsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsa0JBQWtCLENBQUM7QUFFN0Q7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLHVCQUF1QixDQUFDLFNBQWlCO0lBQzdELE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxvQkFBb0IsQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDakUsQ0FBQyx1QkFBdUIsRUFBRSwwQkFBMEIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQzlHLENBQUM7SUFDRixPQUFPLElBQUksY0FBYyxDQUFDLG9CQUFvQixFQUFFLGlCQUFpQixDQUFDLENBQUM7QUFDckUsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7R0FZRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsc0JBQXNCLENBQUMsY0FBOEIsRUFBRSxTQUFpQjtJQUM1RixNQUFNLEVBQUUsb0JBQW9CLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxjQUFjLENBQUM7SUFDbkUsTUFBTSxRQUFRLEdBQUc7UUFDZixDQUFDLDBCQUEwQixFQUFFLG9CQUFvQixDQUFDO1FBQ2xELENBQUMsdUJBQXVCLEVBQUUsaUJBQWlCLENBQUM7S0FDcEMsQ0FBQztJQUNYLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0csQ0FBQyJ9
@@ -0,0 +1,4 @@
1
+ export * from './bb_prover.js';
2
+ export * from './bb_native_private_kernel_prover.js';
3
+ export * from './client_ivc_proof_utils.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prover/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sCAAsC,CAAC;AACrD,cAAc,6BAA6B,CAAC"}
@@ -1,3 +1,4 @@
1
1
  export * from './bb_prover.js';
2
2
  export * from './bb_native_private_kernel_prover.js';
3
3
  export * from './client_ivc_proof_utils.js';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvdmVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLDZCQUE2QixDQUFDIn0=
@@ -0,0 +1,5 @@
1
+ import type { CircuitName } from '@aztec/circuit-types/stats';
2
+ import { type ProtocolArtifact } from '@aztec/noir-protocol-circuits-types/types';
3
+ export declare function mapProtocolArtifactNameToCircuitName(artifact: ProtocolArtifact): CircuitName;
4
+ export declare function isProtocolArtifactRecursive(artifact: ProtocolArtifact): boolean;
5
+ //# sourceMappingURL=stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../src/stats.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAElF,wBAAgB,oCAAoC,CAAC,QAAQ,EAAE,gBAAgB,GAAG,WAAW,CAqC5F;AAED,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAqB/E"}
package/dest/stats.js CHANGED
@@ -1,5 +1,5 @@
1
1
  export function mapProtocolArtifactNameToCircuitName(artifact) {
2
- switch(artifact){
2
+ switch (artifact) {
3
3
  case 'BaseParityArtifact':
4
4
  return 'base-parity';
5
5
  case 'RootParityArtifact':
@@ -28,17 +28,16 @@ export function mapProtocolArtifactNameToCircuitName(artifact) {
28
28
  return 'private-kernel-tail';
29
29
  case 'PrivateKernelTailToPublicArtifact':
30
30
  return 'private-kernel-tail-to-public';
31
- default:
32
- {
33
- if (artifact.startsWith('PrivateKernelReset')) {
34
- return 'private-kernel-reset';
35
- }
36
- throw new Error(`Unknown circuit type: ${artifact}`);
31
+ default: {
32
+ if (artifact.startsWith('PrivateKernelReset')) {
33
+ return 'private-kernel-reset';
37
34
  }
35
+ throw new Error(`Unknown circuit type: ${artifact}`);
36
+ }
38
37
  }
39
38
  }
40
39
  export function isProtocolArtifactRecursive(artifact) {
41
- switch(artifact){
40
+ switch (artifact) {
42
41
  case 'BaseParityArtifact':
43
42
  case 'RootParityArtifact':
44
43
  case 'PrivateBaseRollupArtifact':
@@ -50,13 +49,13 @@ export function isProtocolArtifactRecursive(artifact) {
50
49
  case 'BlockMergeRollupArtifact':
51
50
  case 'RootRollupArtifact':
52
51
  return true;
53
- default:
54
- {
55
- if (artifact.startsWith('PrivateKernel')) {
56
- // The kernel prover, where these are used, eventually calls `createClientIvcProof`, which is recursive.
57
- return true;
58
- }
59
- throw new Error(`Unknown circuit type: ${artifact}`);
52
+ default: {
53
+ if (artifact.startsWith('PrivateKernel')) {
54
+ // The kernel prover, where these are used, eventually calls `createClientIvcProof`, which is recursive.
55
+ return true;
60
56
  }
57
+ throw new Error(`Unknown circuit type: ${artifact}`);
58
+ }
61
59
  }
62
60
  }
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc3RhdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxVQUFVLG9DQUFvQyxDQUFDLFFBQTBCO0lBQzdFLFFBQVEsUUFBUSxFQUFFLENBQUM7UUFDakIsS0FBSyxvQkFBb0I7WUFDdkIsT0FBTyxhQUFhLENBQUM7UUFDdkIsS0FBSyxvQkFBb0I7WUFDdkIsT0FBTyxhQUFhLENBQUM7UUFDdkIsS0FBSywyQkFBMkI7WUFDOUIsT0FBTyxxQkFBcUIsQ0FBQztRQUMvQixLQUFLLDBCQUEwQjtZQUM3QixPQUFPLG9CQUFvQixDQUFDO1FBQzlCLEtBQUsscUJBQXFCO1lBQ3hCLE9BQU8sY0FBYyxDQUFDO1FBQ3hCLEtBQUsseUJBQXlCO1lBQzVCLE9BQU8sbUJBQW1CLENBQUM7UUFDN0IsS0FBSyxpQ0FBaUM7WUFDcEMsT0FBTyw2QkFBNkIsQ0FBQztRQUN2QyxLQUFLLDhCQUE4QjtZQUNqQyxPQUFPLHlCQUF5QixDQUFDO1FBQ25DLEtBQUssMEJBQTBCO1lBQzdCLE9BQU8sb0JBQW9CLENBQUM7UUFDOUIsS0FBSyxvQkFBb0I7WUFDdkIsT0FBTyxhQUFhLENBQUM7UUFDdkIsS0FBSywyQkFBMkI7WUFDOUIsT0FBTyxxQkFBcUIsQ0FBQztRQUMvQixLQUFLLDRCQUE0QjtZQUMvQixPQUFPLHNCQUFzQixDQUFDO1FBQ2hDLEtBQUssMkJBQTJCO1lBQzlCLE9BQU8scUJBQXFCLENBQUM7UUFDL0IsS0FBSyxtQ0FBbUM7WUFDdEMsT0FBTywrQkFBK0IsQ0FBQztRQUN6QyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ1IsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQztnQkFDOUMsT0FBTyxzQkFBc0IsQ0FBQztZQUNoQyxDQUFDO1lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN2RCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsMkJBQTJCLENBQUMsUUFBMEI7SUFDcEUsUUFBUSxRQUFRLEVBQUUsQ0FBQztRQUNqQixLQUFLLG9CQUFvQixDQUFDO1FBQzFCLEtBQUssb0JBQW9CLENBQUM7UUFDMUIsS0FBSywyQkFBMkIsQ0FBQztRQUNqQyxLQUFLLDBCQUEwQixDQUFDO1FBQ2hDLEtBQUsscUJBQXFCLENBQUM7UUFDM0IsS0FBSyx5QkFBeUIsQ0FBQztRQUMvQixLQUFLLGlDQUFpQyxDQUFDO1FBQ3ZDLEtBQUssOEJBQThCLENBQUM7UUFDcEMsS0FBSywwQkFBMEIsQ0FBQztRQUNoQyxLQUFLLG9CQUFvQjtZQUN2QixPQUFPLElBQUksQ0FBQztRQUNkLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDUixJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQztnQkFDekMsd0dBQXdHO2dCQUN4RyxPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQyJ9
@@ -0,0 +1,3 @@
1
+ export * from './test_circuit_prover.js';
2
+ export * from './test_verifier.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/test/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC"}
@@ -1,2 +1,3 @@
1
1
  export * from './test_circuit_prover.js';
2
2
  export * from './test_verifier.js';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVzdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsb0JBQW9CLENBQUMifQ==
@@ -0,0 +1,72 @@
1
+ import { type ProofAndVerificationKey, type PublicInputsAndRecursiveProof, type ServerCircuitProver } from '@aztec/circuit-types';
2
+ import { AVM_PROOF_LENGTH_IN_FIELDS, type AvmCircuitInputs, type BaseParityInputs, NESTED_RECURSIVE_PROOF_LENGTH, NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH, type ParityPublicInputs, type Proof, RECURSIVE_PROOF_LENGTH, type RootParityInputs, TUBE_PROOF_LENGTH } from '@aztec/circuits.js';
3
+ import { type BaseOrMergeRollupPublicInputs, type BlockMergeRollupInputs, type BlockRootOrBlockMergePublicInputs, type BlockRootRollupInputs, type EmptyBlockRootRollupInputs, type MergeRollupInputs, type PrivateBaseRollupInputs, type PublicBaseRollupInputs, type RootRollupInputs, type RootRollupPublicInputs, type SingleTxBlockRootRollupInputs, type TubeInputs } from '@aztec/circuits.js/rollup';
4
+ import { type ServerProtocolArtifact } from '@aztec/noir-protocol-circuits-types/server';
5
+ import { type SimulationProvider } from '@aztec/simulator/server';
6
+ import { type TelemetryClient } from '@aztec/telemetry-client';
7
+ /**
8
+ * A class for use in testing situations (e2e, unit test, etc) and temporarily for assembling a block in the sequencer.
9
+ * Simulates circuits using the most efficient method and performs no proving.
10
+ */
11
+ export declare class TestCircuitProver implements ServerCircuitProver {
12
+ private simulationProvider?;
13
+ private opts;
14
+ private wasmSimulator;
15
+ private instrumentation;
16
+ private logger;
17
+ constructor(simulationProvider?: SimulationProvider | undefined, opts?: {
18
+ proverTestDelayMs: number;
19
+ }, telemetry?: TelemetryClient);
20
+ get tracer(): import("@aztec/telemetry-client").Tracer;
21
+ /**
22
+ * Simulates the base parity circuit from its inputs.
23
+ * @param inputs - Inputs to the circuit.
24
+ * @returns The public inputs of the parity circuit.
25
+ */
26
+ getBaseParityProof(inputs: BaseParityInputs): Promise<PublicInputsAndRecursiveProof<ParityPublicInputs, typeof RECURSIVE_PROOF_LENGTH>>;
27
+ /**
28
+ * Simulates the root parity circuit from its inputs.
29
+ * @param inputs - Inputs to the circuit.
30
+ * @returns The public inputs of the parity circuit.
31
+ */
32
+ getRootParityProof(inputs: RootParityInputs): Promise<PublicInputsAndRecursiveProof<ParityPublicInputs, typeof NESTED_RECURSIVE_PROOF_LENGTH>>;
33
+ getTubeProof(_tubeInput: TubeInputs): Promise<ProofAndVerificationKey<typeof TUBE_PROOF_LENGTH>>;
34
+ getPrivateBaseRollupProof(inputs: PrivateBaseRollupInputs): Promise<PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>>;
35
+ getPublicBaseRollupProof(inputs: PublicBaseRollupInputs): Promise<PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>>;
36
+ /**
37
+ * Simulates the merge rollup circuit from its inputs.
38
+ * @param input - Inputs to the circuit.
39
+ * @returns The public inputs as outputs of the simulation.
40
+ */
41
+ getMergeRollupProof(input: MergeRollupInputs): Promise<PublicInputsAndRecursiveProof<BaseOrMergeRollupPublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>>;
42
+ /**
43
+ * Simulates the block root rollup circuit from its inputs.
44
+ * @param input - Inputs to the circuit.
45
+ * @returns The public inputs as outputs of the simulation.
46
+ */
47
+ getBlockRootRollupProof(input: BlockRootRollupInputs): Promise<PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>>;
48
+ getSingleTxBlockRootRollupProof(input: SingleTxBlockRootRollupInputs): Promise<PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>>;
49
+ /**
50
+ * Simulates the empty block root rollup circuit from its inputs.
51
+ * @param input - Inputs to the circuit.
52
+ * @returns The public inputs as outputs of the simulation.
53
+ */
54
+ getEmptyBlockRootRollupProof(input: EmptyBlockRootRollupInputs): Promise<PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>>;
55
+ /**
56
+ * Simulates the block merge rollup circuit from its inputs.
57
+ * @param input - Inputs to the circuit.
58
+ * @returns The public inputs as outputs of the simulation.
59
+ */
60
+ getBlockMergeRollupProof(input: BlockMergeRollupInputs): Promise<PublicInputsAndRecursiveProof<BlockRootOrBlockMergePublicInputs, typeof NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH>>;
61
+ /**
62
+ * Simulates the root rollup circuit from its inputs.
63
+ * @param input - Inputs to the circuit.
64
+ * @returns The public inputs as outputs of the simulation.
65
+ */
66
+ getRootRollupProof(input: RootRollupInputs): Promise<PublicInputsAndRecursiveProof<RootRollupPublicInputs>>;
67
+ getAvmProof(_inputs: AvmCircuitInputs): Promise<ProofAndVerificationKey<typeof AVM_PROOF_LENGTH_IN_FIELDS>>;
68
+ private delay;
69
+ verifyProof(_1: ServerProtocolArtifact, _2: Proof): Promise<void>;
70
+ private simulate;
71
+ }
72
+ //# sourceMappingURL=test_circuit_prover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test_circuit_prover.d.ts","sourceRoot":"","sources":["../../src/test/test_circuit_prover.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,10 @@
1
- function _ts_decorate(decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- }
7
- import { makeProofAndVerificationKey, makePublicInputsAndRecursiveProof } from '@aztec/circuit-types';
8
- import { AVM_PROOF_LENGTH_IN_FIELDS, AVM_VERIFICATION_KEY_LENGTH_IN_FIELDS, NESTED_RECURSIVE_PROOF_LENGTH, NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH, RECURSIVE_PROOF_LENGTH, TUBE_PROOF_LENGTH, VerificationKeyData, makeEmptyRecursiveProof, makeRecursiveProof } from '@aztec/circuits.js';
1
+ import { __esDecorate, __runInitializers } from "tslib";
2
+ import { makeProofAndVerificationKey, makePublicInputsAndRecursiveProof, } from '@aztec/circuit-types';
3
+ import { AVM_PROOF_LENGTH_IN_FIELDS, AVM_VERIFICATION_KEY_LENGTH_IN_FIELDS, NESTED_RECURSIVE_PROOF_LENGTH, NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH, RECURSIVE_PROOF_LENGTH, TUBE_PROOF_LENGTH, VerificationKeyData, makeEmptyRecursiveProof, makeRecursiveProof, } from '@aztec/circuits.js';
9
4
  import { createLogger } from '@aztec/foundation/log';
10
5
  import { sleep } from '@aztec/foundation/sleep';
11
6
  import { Timer } from '@aztec/foundation/timer';
12
- import { SimulatedServerCircuitArtifacts, convertBaseParityInputsToWitnessMap, convertBaseParityOutputsFromWitnessMap, convertBlockMergeRollupInputsToWitnessMap, convertBlockMergeRollupOutputsFromWitnessMap, convertEmptyBlockRootRollupInputsToWitnessMap, convertEmptyBlockRootRollupOutputsFromWitnessMap, convertMergeRollupInputsToWitnessMap, convertMergeRollupOutputsFromWitnessMap, convertRootParityInputsToWitnessMap, convertRootParityOutputsFromWitnessMap, convertRootRollupInputsToWitnessMap, convertRootRollupOutputsFromWitnessMap, convertSimulatedBlockRootRollupInputsToWitnessMap, convertSimulatedBlockRootRollupOutputsFromWitnessMap, convertSimulatedPrivateBaseRollupInputsToWitnessMap, convertSimulatedPrivateBaseRollupOutputsFromWitnessMap, convertSimulatedPublicBaseRollupInputsToWitnessMap, convertSimulatedPublicBaseRollupOutputsFromWitnessMap, convertSimulatedSingleTxBlockRootRollupInputsToWitnessMap, convertSimulatedSingleTxBlockRootRollupOutputsFromWitnessMap } from '@aztec/noir-protocol-circuits-types/server';
7
+ import { SimulatedServerCircuitArtifacts, convertBaseParityInputsToWitnessMap, convertBaseParityOutputsFromWitnessMap, convertBlockMergeRollupInputsToWitnessMap, convertBlockMergeRollupOutputsFromWitnessMap, convertEmptyBlockRootRollupInputsToWitnessMap, convertEmptyBlockRootRollupOutputsFromWitnessMap, convertMergeRollupInputsToWitnessMap, convertMergeRollupOutputsFromWitnessMap, convertRootParityInputsToWitnessMap, convertRootParityOutputsFromWitnessMap, convertRootRollupInputsToWitnessMap, convertRootRollupOutputsFromWitnessMap, convertSimulatedBlockRootRollupInputsToWitnessMap, convertSimulatedBlockRootRollupOutputsFromWitnessMap, convertSimulatedPrivateBaseRollupInputsToWitnessMap, convertSimulatedPrivateBaseRollupOutputsFromWitnessMap, convertSimulatedPublicBaseRollupInputsToWitnessMap, convertSimulatedPublicBaseRollupOutputsFromWitnessMap, convertSimulatedSingleTxBlockRootRollupInputsToWitnessMap, convertSimulatedSingleTxBlockRootRollupOutputsFromWitnessMap, } from '@aztec/noir-protocol-circuits-types/server';
13
8
  import { ProtocolCircuitVks } from '@aztec/noir-protocol-circuits-types/vks';
14
9
  import { WASMSimulatorWithBlobs, emitCircuitSimulationStats } from '@aztec/simulator/server';
15
10
  import { getTelemetryClient, trackSpan } from '@aztec/telemetry-client';
@@ -18,150 +13,159 @@ import { mapProtocolArtifactNameToCircuitName } from '../stats.js';
18
13
  /**
19
14
  * A class for use in testing situations (e2e, unit test, etc) and temporarily for assembling a block in the sequencer.
20
15
  * Simulates circuits using the most efficient method and performs no proving.
21
- */ export class TestCircuitProver {
22
- simulationProvider;
23
- opts;
24
- wasmSimulator;
25
- instrumentation;
26
- logger;
27
- constructor(simulationProvider, opts = {
28
- proverTestDelayMs: 0
29
- }, telemetry = getTelemetryClient()){
30
- this.simulationProvider = simulationProvider;
31
- this.opts = opts;
32
- this.wasmSimulator = new WASMSimulatorWithBlobs();
33
- this.logger = createLogger('bb-prover:test-prover');
34
- this.instrumentation = new ProverInstrumentation(telemetry, 'TestCircuitProver');
35
- }
36
- get tracer() {
37
- return this.instrumentation.tracer;
38
- }
39
- /**
40
- * Simulates the base parity circuit from its inputs.
41
- * @param inputs - Inputs to the circuit.
42
- * @returns The public inputs of the parity circuit.
43
- */ async getBaseParityProof(inputs) {
44
- return await this.simulate(inputs, 'BaseParityArtifact', RECURSIVE_PROOF_LENGTH, convertBaseParityInputsToWitnessMap, convertBaseParityOutputsFromWitnessMap);
45
- }
46
- /**
47
- * Simulates the root parity circuit from its inputs.
48
- * @param inputs - Inputs to the circuit.
49
- * @returns The public inputs of the parity circuit.
50
- */ async getRootParityProof(inputs) {
51
- return await this.simulate(inputs, 'RootParityArtifact', NESTED_RECURSIVE_PROOF_LENGTH, convertRootParityInputsToWitnessMap, convertRootParityOutputsFromWitnessMap);
52
- }
53
- async getTubeProof(_tubeInput) {
54
- await this.delay();
55
- return makeProofAndVerificationKey(makeEmptyRecursiveProof(TUBE_PROOF_LENGTH), VerificationKeyData.makeFakeRollupHonk());
56
- }
57
- async getPrivateBaseRollupProof(inputs) {
58
- return await this.simulate(inputs, 'PrivateBaseRollupArtifact', NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH, convertSimulatedPrivateBaseRollupInputsToWitnessMap, convertSimulatedPrivateBaseRollupOutputsFromWitnessMap);
59
- }
60
- async getPublicBaseRollupProof(inputs) {
61
- return await this.simulate(inputs, 'PublicBaseRollupArtifact', NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH, convertSimulatedPublicBaseRollupInputsToWitnessMap, convertSimulatedPublicBaseRollupOutputsFromWitnessMap);
62
- }
63
- /**
64
- * Simulates the merge rollup circuit from its inputs.
65
- * @param input - Inputs to the circuit.
66
- * @returns The public inputs as outputs of the simulation.
67
- */ async getMergeRollupProof(input) {
68
- return await this.simulate(input, 'MergeRollupArtifact', NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH, convertMergeRollupInputsToWitnessMap, convertMergeRollupOutputsFromWitnessMap);
69
- }
70
- /**
71
- * Simulates the block root rollup circuit from its inputs.
72
- * @param input - Inputs to the circuit.
73
- * @returns The public inputs as outputs of the simulation.
74
- */ async getBlockRootRollupProof(input) {
75
- return await this.simulate(input, 'BlockRootRollupArtifact', NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH, convertSimulatedBlockRootRollupInputsToWitnessMap, convertSimulatedBlockRootRollupOutputsFromWitnessMap);
76
- }
77
- async getSingleTxBlockRootRollupProof(input) {
78
- return await this.simulate(input, 'SingleTxBlockRootRollupArtifact', NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH, convertSimulatedSingleTxBlockRootRollupInputsToWitnessMap, convertSimulatedSingleTxBlockRootRollupOutputsFromWitnessMap);
79
- }
80
- /**
81
- * Simulates the empty block root rollup circuit from its inputs.
82
- * @param input - Inputs to the circuit.
83
- * @returns The public inputs as outputs of the simulation.
84
- */ async getEmptyBlockRootRollupProof(input) {
85
- return await this.simulate(input, 'EmptyBlockRootRollupArtifact', NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH, convertEmptyBlockRootRollupInputsToWitnessMap, convertEmptyBlockRootRollupOutputsFromWitnessMap);
86
- }
87
- /**
88
- * Simulates the block merge rollup circuit from its inputs.
89
- * @param input - Inputs to the circuit.
90
- * @returns The public inputs as outputs of the simulation.
91
- */ async getBlockMergeRollupProof(input) {
92
- return await this.simulate(input, 'BlockMergeRollupArtifact', NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH, convertBlockMergeRollupInputsToWitnessMap, convertBlockMergeRollupOutputsFromWitnessMap);
93
- }
94
- /**
95
- * Simulates the root rollup circuit from its inputs.
96
- * @param input - Inputs to the circuit.
97
- * @returns The public inputs as outputs of the simulation.
98
- */ async getRootRollupProof(input) {
99
- return await this.simulate(input, 'RootRollupArtifact', NESTED_RECURSIVE_PROOF_LENGTH, convertRootRollupInputsToWitnessMap, convertRootRollupOutputsFromWitnessMap);
100
- }
101
- async getAvmProof(_inputs) {
102
- // We can't simulate the AVM because we don't have enough context to do so (e.g., DBs).
103
- // We just return an empty proof and VK data.
104
- this.logger.debug('Skipping AVM simulation in TestCircuitProver.');
105
- await this.delay();
106
- return makeProofAndVerificationKey(makeEmptyRecursiveProof(AVM_PROOF_LENGTH_IN_FIELDS), VerificationKeyData.makeFake(AVM_VERIFICATION_KEY_LENGTH_IN_FIELDS));
107
- }
108
- async delay() {
109
- if (this.opts.proverTestDelayMs > 0) {
110
- await sleep(this.opts.proverTestDelayMs);
111
- }
112
- }
113
- // Not implemented for test circuits
114
- verifyProof(_1, _2) {
115
- return Promise.reject(new Error('Method not implemented.'));
116
- }
117
- async simulate(input, artifactName, proofLength, convertInput, convertOutput) {
118
- const timer = new Timer();
119
- const witnessMap = convertInput(input);
120
- const circuitName = mapProtocolArtifactNameToCircuitName(artifactName);
121
- let simulationProvider = this.simulationProvider ?? this.wasmSimulator;
122
- if ([
123
- 'BlockRootRollupArtifact',
124
- 'SingleTxBlockRootRollupArtifact'
125
- ].includes(artifactName)) {
126
- // TODO(#10323): temporarily force block root to use wasm while we simulate
127
- // the blob operations with an oracle. Appears to be no way to provide nativeACVM with a foreign call hander.
128
- simulationProvider = this.wasmSimulator;
129
- }
130
- const witness = await simulationProvider.executeProtocolCircuit(witnessMap, SimulatedServerCircuitArtifacts[artifactName]);
131
- const result = convertOutput(witness);
132
- this.instrumentation.recordDuration('simulationDuration', circuitName, timer);
133
- emitCircuitSimulationStats(circuitName, timer.ms(), input.toBuffer().length, result.toBuffer().length, this.logger);
134
- await this.delay();
135
- return makePublicInputsAndRecursiveProof(result, makeRecursiveProof(proofLength), ProtocolCircuitVks[artifactName]);
136
- }
137
- }
138
- _ts_decorate([
139
- trackSpan('TestCircuitProver.getBaseParityProof')
140
- ], TestCircuitProver.prototype, "getBaseParityProof", null);
141
- _ts_decorate([
142
- trackSpan('TestCircuitProver.getRootParityProof')
143
- ], TestCircuitProver.prototype, "getRootParityProof", null);
144
- _ts_decorate([
145
- trackSpan('TestCircuitProver.getPrivateBaseRollupProof')
146
- ], TestCircuitProver.prototype, "getPrivateBaseRollupProof", null);
147
- _ts_decorate([
148
- trackSpan('TestCircuitProver.getPublicBaseRollupProof')
149
- ], TestCircuitProver.prototype, "getPublicBaseRollupProof", null);
150
- _ts_decorate([
151
- trackSpan('TestCircuitProver.getMergeRollupProof')
152
- ], TestCircuitProver.prototype, "getMergeRollupProof", null);
153
- _ts_decorate([
154
- trackSpan('TestCircuitProver.getBlockRootRollupProof')
155
- ], TestCircuitProver.prototype, "getBlockRootRollupProof", null);
156
- _ts_decorate([
157
- trackSpan('TestCircuitProver.getSingleTxBlockRootRollupProof')
158
- ], TestCircuitProver.prototype, "getSingleTxBlockRootRollupProof", null);
159
- _ts_decorate([
160
- trackSpan('TestCircuitProver.getEmptyBlockRootRollupProof')
161
- ], TestCircuitProver.prototype, "getEmptyBlockRootRollupProof", null);
162
- _ts_decorate([
163
- trackSpan('TestCircuitProver.getBlockMergeRollupProof')
164
- ], TestCircuitProver.prototype, "getBlockMergeRollupProof", null);
165
- _ts_decorate([
166
- trackSpan('TestCircuitProver.getRootRollupProof')
167
- ], TestCircuitProver.prototype, "getRootRollupProof", null);
16
+ */
17
+ let TestCircuitProver = (() => {
18
+ var _a;
19
+ let _instanceExtraInitializers = [];
20
+ let _getBaseParityProof_decorators;
21
+ let _getRootParityProof_decorators;
22
+ let _getPrivateBaseRollupProof_decorators;
23
+ let _getPublicBaseRollupProof_decorators;
24
+ let _getMergeRollupProof_decorators;
25
+ let _getBlockRootRollupProof_decorators;
26
+ let _getSingleTxBlockRootRollupProof_decorators;
27
+ let _getEmptyBlockRootRollupProof_decorators;
28
+ let _getBlockMergeRollupProof_decorators;
29
+ let _getRootRollupProof_decorators;
30
+ return _a = class TestCircuitProver {
31
+ constructor(simulationProvider, opts = { proverTestDelayMs: 0 }, telemetry = getTelemetryClient()) {
32
+ this.simulationProvider = (__runInitializers(this, _instanceExtraInitializers), simulationProvider);
33
+ this.opts = opts;
34
+ this.wasmSimulator = new WASMSimulatorWithBlobs();
35
+ this.logger = createLogger('bb-prover:test-prover');
36
+ this.instrumentation = new ProverInstrumentation(telemetry, 'TestCircuitProver');
37
+ }
38
+ get tracer() {
39
+ return this.instrumentation.tracer;
40
+ }
41
+ /**
42
+ * Simulates the base parity circuit from its inputs.
43
+ * @param inputs - Inputs to the circuit.
44
+ * @returns The public inputs of the parity circuit.
45
+ */
46
+ async getBaseParityProof(inputs) {
47
+ return await this.simulate(inputs, 'BaseParityArtifact', RECURSIVE_PROOF_LENGTH, convertBaseParityInputsToWitnessMap, convertBaseParityOutputsFromWitnessMap);
48
+ }
49
+ /**
50
+ * Simulates the root parity circuit from its inputs.
51
+ * @param inputs - Inputs to the circuit.
52
+ * @returns The public inputs of the parity circuit.
53
+ */
54
+ async getRootParityProof(inputs) {
55
+ return await this.simulate(inputs, 'RootParityArtifact', NESTED_RECURSIVE_PROOF_LENGTH, convertRootParityInputsToWitnessMap, convertRootParityOutputsFromWitnessMap);
56
+ }
57
+ async getTubeProof(_tubeInput) {
58
+ await this.delay();
59
+ return makeProofAndVerificationKey(makeEmptyRecursiveProof(TUBE_PROOF_LENGTH), VerificationKeyData.makeFakeRollupHonk());
60
+ }
61
+ async getPrivateBaseRollupProof(inputs) {
62
+ return await this.simulate(inputs, 'PrivateBaseRollupArtifact', NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH, convertSimulatedPrivateBaseRollupInputsToWitnessMap, convertSimulatedPrivateBaseRollupOutputsFromWitnessMap);
63
+ }
64
+ async getPublicBaseRollupProof(inputs) {
65
+ return await this.simulate(inputs, 'PublicBaseRollupArtifact', NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH, convertSimulatedPublicBaseRollupInputsToWitnessMap, convertSimulatedPublicBaseRollupOutputsFromWitnessMap);
66
+ }
67
+ /**
68
+ * Simulates the merge rollup circuit from its inputs.
69
+ * @param input - Inputs to the circuit.
70
+ * @returns The public inputs as outputs of the simulation.
71
+ */
72
+ async getMergeRollupProof(input) {
73
+ return await this.simulate(input, 'MergeRollupArtifact', NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH, convertMergeRollupInputsToWitnessMap, convertMergeRollupOutputsFromWitnessMap);
74
+ }
75
+ /**
76
+ * Simulates the block root rollup circuit from its inputs.
77
+ * @param input - Inputs to the circuit.
78
+ * @returns The public inputs as outputs of the simulation.
79
+ */
80
+ async getBlockRootRollupProof(input) {
81
+ return await this.simulate(input, 'BlockRootRollupArtifact', NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH, convertSimulatedBlockRootRollupInputsToWitnessMap, convertSimulatedBlockRootRollupOutputsFromWitnessMap);
82
+ }
83
+ async getSingleTxBlockRootRollupProof(input) {
84
+ return await this.simulate(input, 'SingleTxBlockRootRollupArtifact', NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH, convertSimulatedSingleTxBlockRootRollupInputsToWitnessMap, convertSimulatedSingleTxBlockRootRollupOutputsFromWitnessMap);
85
+ }
86
+ /**
87
+ * Simulates the empty block root rollup circuit from its inputs.
88
+ * @param input - Inputs to the circuit.
89
+ * @returns The public inputs as outputs of the simulation.
90
+ */
91
+ async getEmptyBlockRootRollupProof(input) {
92
+ return await this.simulate(input, 'EmptyBlockRootRollupArtifact', NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH, convertEmptyBlockRootRollupInputsToWitnessMap, convertEmptyBlockRootRollupOutputsFromWitnessMap);
93
+ }
94
+ /**
95
+ * Simulates the block merge rollup circuit from its inputs.
96
+ * @param input - Inputs to the circuit.
97
+ * @returns The public inputs as outputs of the simulation.
98
+ */
99
+ async getBlockMergeRollupProof(input) {
100
+ return await this.simulate(input, 'BlockMergeRollupArtifact', NESTED_RECURSIVE_ROLLUP_HONK_PROOF_LENGTH, convertBlockMergeRollupInputsToWitnessMap, convertBlockMergeRollupOutputsFromWitnessMap);
101
+ }
102
+ /**
103
+ * Simulates the root rollup circuit from its inputs.
104
+ * @param input - Inputs to the circuit.
105
+ * @returns The public inputs as outputs of the simulation.
106
+ */
107
+ async getRootRollupProof(input) {
108
+ return await this.simulate(input, 'RootRollupArtifact', NESTED_RECURSIVE_PROOF_LENGTH, convertRootRollupInputsToWitnessMap, convertRootRollupOutputsFromWitnessMap);
109
+ }
110
+ async getAvmProof(_inputs) {
111
+ // We can't simulate the AVM because we don't have enough context to do so (e.g., DBs).
112
+ // We just return an empty proof and VK data.
113
+ this.logger.debug('Skipping AVM simulation in TestCircuitProver.');
114
+ await this.delay();
115
+ return makeProofAndVerificationKey(makeEmptyRecursiveProof(AVM_PROOF_LENGTH_IN_FIELDS), VerificationKeyData.makeFake(AVM_VERIFICATION_KEY_LENGTH_IN_FIELDS));
116
+ }
117
+ async delay() {
118
+ if (this.opts.proverTestDelayMs > 0) {
119
+ await sleep(this.opts.proverTestDelayMs);
120
+ }
121
+ }
122
+ // Not implemented for test circuits
123
+ verifyProof(_1, _2) {
124
+ return Promise.reject(new Error('Method not implemented.'));
125
+ }
126
+ async simulate(input, artifactName, proofLength, convertInput, convertOutput) {
127
+ const timer = new Timer();
128
+ const witnessMap = convertInput(input);
129
+ const circuitName = mapProtocolArtifactNameToCircuitName(artifactName);
130
+ let simulationProvider = this.simulationProvider ?? this.wasmSimulator;
131
+ if (['BlockRootRollupArtifact', 'SingleTxBlockRootRollupArtifact'].includes(artifactName)) {
132
+ // TODO(#10323): temporarily force block root to use wasm while we simulate
133
+ // the blob operations with an oracle. Appears to be no way to provide nativeACVM with a foreign call hander.
134
+ simulationProvider = this.wasmSimulator;
135
+ }
136
+ const witness = await simulationProvider.executeProtocolCircuit(witnessMap, SimulatedServerCircuitArtifacts[artifactName]);
137
+ const result = convertOutput(witness);
138
+ this.instrumentation.recordDuration('simulationDuration', circuitName, timer);
139
+ emitCircuitSimulationStats(circuitName, timer.ms(), input.toBuffer().length, result.toBuffer().length, this.logger);
140
+ await this.delay();
141
+ return makePublicInputsAndRecursiveProof(result, makeRecursiveProof(proofLength), ProtocolCircuitVks[artifactName]);
142
+ }
143
+ },
144
+ (() => {
145
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(null) : void 0;
146
+ _getBaseParityProof_decorators = [trackSpan('TestCircuitProver.getBaseParityProof')];
147
+ _getRootParityProof_decorators = [trackSpan('TestCircuitProver.getRootParityProof')];
148
+ _getPrivateBaseRollupProof_decorators = [trackSpan('TestCircuitProver.getPrivateBaseRollupProof')];
149
+ _getPublicBaseRollupProof_decorators = [trackSpan('TestCircuitProver.getPublicBaseRollupProof')];
150
+ _getMergeRollupProof_decorators = [trackSpan('TestCircuitProver.getMergeRollupProof')];
151
+ _getBlockRootRollupProof_decorators = [trackSpan('TestCircuitProver.getBlockRootRollupProof')];
152
+ _getSingleTxBlockRootRollupProof_decorators = [trackSpan('TestCircuitProver.getSingleTxBlockRootRollupProof')];
153
+ _getEmptyBlockRootRollupProof_decorators = [trackSpan('TestCircuitProver.getEmptyBlockRootRollupProof')];
154
+ _getBlockMergeRollupProof_decorators = [trackSpan('TestCircuitProver.getBlockMergeRollupProof')];
155
+ _getRootRollupProof_decorators = [trackSpan('TestCircuitProver.getRootRollupProof')];
156
+ __esDecorate(_a, null, _getBaseParityProof_decorators, { kind: "method", name: "getBaseParityProof", static: false, private: false, access: { has: obj => "getBaseParityProof" in obj, get: obj => obj.getBaseParityProof }, metadata: _metadata }, null, _instanceExtraInitializers);
157
+ __esDecorate(_a, null, _getRootParityProof_decorators, { kind: "method", name: "getRootParityProof", static: false, private: false, access: { has: obj => "getRootParityProof" in obj, get: obj => obj.getRootParityProof }, metadata: _metadata }, null, _instanceExtraInitializers);
158
+ __esDecorate(_a, null, _getPrivateBaseRollupProof_decorators, { kind: "method", name: "getPrivateBaseRollupProof", static: false, private: false, access: { has: obj => "getPrivateBaseRollupProof" in obj, get: obj => obj.getPrivateBaseRollupProof }, metadata: _metadata }, null, _instanceExtraInitializers);
159
+ __esDecorate(_a, null, _getPublicBaseRollupProof_decorators, { kind: "method", name: "getPublicBaseRollupProof", static: false, private: false, access: { has: obj => "getPublicBaseRollupProof" in obj, get: obj => obj.getPublicBaseRollupProof }, metadata: _metadata }, null, _instanceExtraInitializers);
160
+ __esDecorate(_a, null, _getMergeRollupProof_decorators, { kind: "method", name: "getMergeRollupProof", static: false, private: false, access: { has: obj => "getMergeRollupProof" in obj, get: obj => obj.getMergeRollupProof }, metadata: _metadata }, null, _instanceExtraInitializers);
161
+ __esDecorate(_a, null, _getBlockRootRollupProof_decorators, { kind: "method", name: "getBlockRootRollupProof", static: false, private: false, access: { has: obj => "getBlockRootRollupProof" in obj, get: obj => obj.getBlockRootRollupProof }, metadata: _metadata }, null, _instanceExtraInitializers);
162
+ __esDecorate(_a, null, _getSingleTxBlockRootRollupProof_decorators, { kind: "method", name: "getSingleTxBlockRootRollupProof", static: false, private: false, access: { has: obj => "getSingleTxBlockRootRollupProof" in obj, get: obj => obj.getSingleTxBlockRootRollupProof }, metadata: _metadata }, null, _instanceExtraInitializers);
163
+ __esDecorate(_a, null, _getEmptyBlockRootRollupProof_decorators, { kind: "method", name: "getEmptyBlockRootRollupProof", static: false, private: false, access: { has: obj => "getEmptyBlockRootRollupProof" in obj, get: obj => obj.getEmptyBlockRootRollupProof }, metadata: _metadata }, null, _instanceExtraInitializers);
164
+ __esDecorate(_a, null, _getBlockMergeRollupProof_decorators, { kind: "method", name: "getBlockMergeRollupProof", static: false, private: false, access: { has: obj => "getBlockMergeRollupProof" in obj, get: obj => obj.getBlockMergeRollupProof }, metadata: _metadata }, null, _instanceExtraInitializers);
165
+ __esDecorate(_a, null, _getRootRollupProof_decorators, { kind: "method", name: "getRootRollupProof", static: false, private: false, access: { has: obj => "getRootRollupProof" in obj, get: obj => obj.getRootRollupProof }, metadata: _metadata }, null, _instanceExtraInitializers);
166
+ if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
167
+ })(),
168
+ _a;
169
+ })();
170
+ export { TestCircuitProver };
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdF9jaXJjdWl0X3Byb3Zlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0L3Rlc3RfY2lyY3VpdF9wcm92ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFJTCwyQkFBMkIsRUFDM0IsaUNBQWlDLEdBQ2xDLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUNMLDBCQUEwQixFQUMxQixxQ0FBcUMsRUFHckMsNkJBQTZCLEVBQzdCLHlDQUF5QyxFQUd6QyxzQkFBc0IsRUFFdEIsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQix1QkFBdUIsRUFDdkIsa0JBQWtCLEdBQ25CLE1BQU0sb0JBQW9CLENBQUM7QUFlNUIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEQsT0FBTyxFQUVMLCtCQUErQixFQUMvQixtQ0FBbUMsRUFDbkMsc0NBQXNDLEVBQ3RDLHlDQUF5QyxFQUN6Qyw0Q0FBNEMsRUFDNUMsNkNBQTZDLEVBQzdDLGdEQUFnRCxFQUNoRCxvQ0FBb0MsRUFDcEMsdUNBQXVDLEVBQ3ZDLG1DQUFtQyxFQUNuQyxzQ0FBc0MsRUFDdEMsbUNBQW1DLEVBQ25DLHNDQUFzQyxFQUN0QyxpREFBaUQsRUFDakQsb0RBQW9ELEVBQ3BELG1EQUFtRCxFQUNuRCxzREFBc0QsRUFDdEQsa0RBQWtELEVBQ2xELHFEQUFxRCxFQUNyRCx5REFBeUQsRUFDekQsNERBQTRELEdBQzdELE1BQU0sNENBQTRDLENBQUM7QUFDcEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDN0UsT0FBTyxFQUEyQixzQkFBc0IsRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RILE9BQU8sRUFBd0Isa0JBQWtCLEVBQUUsU0FBUyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFJOUYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRW5FOzs7R0FHRztJQUNVLGlCQUFpQjs7Ozs7Ozs7Ozs7OztzQkFBakIsaUJBQWlCO1lBSzVCLFlBQ1Usa0JBQXVDLEVBQ3ZDLE9BQXNDLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxFQUFFLEVBQ3RFLFlBQTZCLGtCQUFrQixFQUFFO2dCQUZ6Qyx1QkFBa0IsSUFOakIsbURBQWlCLEVBTWxCLGtCQUFrQixFQUFxQjtnQkFDdkMsU0FBSSxHQUFKLElBQUksQ0FBMEQ7Z0JBTmhFLGtCQUFhLEdBQUcsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO2dCQUU3QyxXQUFNLEdBQUcsWUFBWSxDQUFDLHVCQUF1QixDQUFDLENBQUM7Z0JBT3JELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztZQUNuRixDQUFDO1lBRUQsSUFBSSxNQUFNO2dCQUNSLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUM7WUFDckMsQ0FBQztZQUVEOzs7O2VBSUc7WUFFSSxLQUFLLENBQUMsa0JBQWtCLENBQzdCLE1BQXdCO2dCQUV4QixPQUFPLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FDeEIsTUFBTSxFQUNOLG9CQUFvQixFQUNwQixzQkFBc0IsRUFDdEIsbUNBQW1DLEVBQ25DLHNDQUFzQyxDQUN2QyxDQUFDO1lBQ0osQ0FBQztZQUVEOzs7O2VBSUc7WUFFSSxLQUFLLENBQUMsa0JBQWtCLENBQzdCLE1BQXdCO2dCQUV4QixPQUFPLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FDeEIsTUFBTSxFQUNOLG9CQUFvQixFQUNwQiw2QkFBNkIsRUFDN0IsbUNBQW1DLEVBQ25DLHNDQUFzQyxDQUN2QyxDQUFDO1lBQ0osQ0FBQztZQUVNLEtBQUssQ0FBQyxZQUFZLENBQUMsVUFBc0I7Z0JBQzlDLE1BQU0sSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNuQixPQUFPLDJCQUEyQixDQUNoQyx1QkFBdUIsQ0FBQyxpQkFBaUIsQ0FBQyxFQUMxQyxtQkFBbUIsQ0FBQyxrQkFBa0IsRUFBRSxDQUN6QyxDQUFDO1lBQ0osQ0FBQztZQUdNLEtBQUssQ0FBQyx5QkFBeUIsQ0FDcEMsTUFBK0I7Z0JBSS9CLE9BQU8sTUFBTSxJQUFJLENBQUMsUUFBUSxDQUN4QixNQUFNLEVBQ04sMkJBQTJCLEVBQzNCLHlDQUF5QyxFQUN6QyxtREFBbUQsRUFDbkQsc0RBQXNELENBQ3ZELENBQUM7WUFDSixDQUFDO1lBR00sS0FBSyxDQUFDLHdCQUF3QixDQUNuQyxNQUE4QjtnQkFJOUIsT0FBTyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQ3hCLE1BQU0sRUFDTiwwQkFBMEIsRUFDMUIseUNBQXlDLEVBQ3pDLGtEQUFrRCxFQUNsRCxxREFBcUQsQ0FDdEQsQ0FBQztZQUNKLENBQUM7WUFFRDs7OztlQUlHO1lBRUksS0FBSyxDQUFDLG1CQUFtQixDQUM5QixLQUF3QjtnQkFJeEIsT0FBTyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQ3hCLEtBQUssRUFDTCxxQkFBcUIsRUFDckIseUNBQXlDLEVBQ3pDLG9DQUFvQyxFQUNwQyx1Q0FBdUMsQ0FDeEMsQ0FBQztZQUNKLENBQUM7WUFFRDs7OztlQUlHO1lBRUksS0FBSyxDQUFDLHVCQUF1QixDQUNsQyxLQUE0QjtnQkFJNUIsT0FBTyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQ3hCLEtBQUssRUFDTCx5QkFBeUIsRUFDekIseUNBQXlDLEVBQ3pDLGlEQUFpRCxFQUNqRCxvREFBb0QsQ0FDckQsQ0FBQztZQUNKLENBQUM7WUFHTSxLQUFLLENBQUMsK0JBQStCLENBQzFDLEtBQW9DO2dCQUlwQyxPQUFPLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FDeEIsS0FBSyxFQUNMLGlDQUFpQyxFQUNqQyx5Q0FBeUMsRUFDekMseURBQXlELEVBQ3pELDREQUE0RCxDQUM3RCxDQUFDO1lBQ0osQ0FBQztZQUVEOzs7O2VBSUc7WUFFSSxLQUFLLENBQUMsNEJBQTRCLENBQ3ZDLEtBQWlDO2dCQUlqQyxPQUFPLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FDeEIsS0FBSyxFQUNMLDhCQUE4QixFQUM5Qix5Q0FBeUMsRUFDekMsNkNBQTZDLEVBQzdDLGdEQUFnRCxDQUNqRCxDQUFDO1lBQ0osQ0FBQztZQUVEOzs7O2VBSUc7WUFFSSxLQUFLLENBQUMsd0JBQXdCLENBQ25DLEtBQTZCO2dCQUk3QixPQUFPLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FDeEIsS0FBSyxFQUNMLDBCQUEwQixFQUMxQix5Q0FBeUMsRUFDekMseUNBQXlDLEVBQ3pDLDRDQUE0QyxDQUM3QyxDQUFDO1lBQ0osQ0FBQztZQUVEOzs7O2VBSUc7WUFFSSxLQUFLLENBQUMsa0JBQWtCLENBQzdCLEtBQXVCO2dCQUV2QixPQUFPLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FDeEIsS0FBSyxFQUNMLG9CQUFvQixFQUNwQiw2QkFBNkIsRUFDN0IsbUNBQW1DLEVBQ25DLHNDQUFzQyxDQUN2QyxDQUFDO1lBQ0osQ0FBQztZQUVNLEtBQUssQ0FBQyxXQUFXLENBQ3RCLE9BQXlCO2dCQUV6Qix1RkFBdUY7Z0JBQ3ZGLDZDQUE2QztnQkFDN0MsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsK0NBQStDLENBQUMsQ0FBQztnQkFDbkUsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ25CLE9BQU8sMkJBQTJCLENBQ2hDLHVCQUF1QixDQUFDLDBCQUEwQixDQUFDLEVBQ25ELG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUNwRSxDQUFDO1lBQ0osQ0FBQztZQUVPLEtBQUssQ0FBQyxLQUFLO2dCQUNqQixJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3BDLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDM0MsQ0FBQztZQUNILENBQUM7WUFFRCxvQ0FBb0M7WUFDN0IsV0FBVyxDQUFDLEVBQTBCLEVBQUUsRUFBUztnQkFDdEQsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQztZQUM5RCxDQUFDO1lBRU8sS0FBSyxDQUFDLFFBQVEsQ0FLcEIsS0FBdUIsRUFDdkIsWUFBb0MsRUFDcEMsV0FBeUIsRUFDekIsWUFBcUQsRUFDckQsYUFBK0Q7Z0JBRS9ELE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQzFCLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdkMsTUFBTSxXQUFXLEdBQUcsb0NBQW9DLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBRXZFLElBQUksa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUM7Z0JBQ3ZFLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxpQ0FBaUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO29CQUMxRiwyRUFBMkU7b0JBQzNFLDZHQUE2RztvQkFDN0csa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztnQkFDMUMsQ0FBQztnQkFDRCxNQUFNLE9BQU8sR0FBRyxNQUFNLGtCQUFrQixDQUFDLHNCQUFzQixDQUM3RCxVQUFVLEVBQ1YsK0JBQStCLENBQUMsWUFBWSxDQUFDLENBQzlDLENBQUM7Z0JBRUYsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUV0QyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQzlFLDBCQUEwQixDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDcEgsTUFBTSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ25CLE9BQU8saUNBQWlDLENBQUMsTUFBTSxFQUFFLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxFQUFFLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7WUFDdEgsQ0FBQzs7Ozs4Q0E5T0EsU0FBUyxDQUFDLHNDQUFzQyxDQUFDOzhDQWtCakQsU0FBUyxDQUFDLHNDQUFzQyxDQUFDO3FEQXFCakQsU0FBUyxDQUFDLDZDQUE2QyxDQUFDO29EQWV4RCxTQUFTLENBQUMsNENBQTRDLENBQUM7K0NBb0J2RCxTQUFTLENBQUMsdUNBQXVDLENBQUM7bURBb0JsRCxTQUFTLENBQUMsMkNBQTJDLENBQUM7MkRBZXRELFNBQVMsQ0FBQyxtREFBbUQsQ0FBQzt3REFvQjlELFNBQVMsQ0FBQyxnREFBZ0QsQ0FBQztvREFvQjNELFNBQVMsQ0FBQyw0Q0FBNEMsQ0FBQzs4Q0FvQnZELFNBQVMsQ0FBQyxzQ0FBc0MsQ0FBQztZQXhLbEQsdU1BQWEsa0JBQWtCLDZEQVU5QjtZQVFELHVNQUFhLGtCQUFrQiw2REFVOUI7WUFXRCw0TkFBYSx5QkFBeUIsNkRBWXJDO1lBR0QseU5BQWEsd0JBQXdCLDZEQVlwQztZQVFELDBNQUFhLG1CQUFtQiw2REFZL0I7WUFRRCxzTkFBYSx1QkFBdUIsNkRBWW5DO1lBR0QsOE9BQWEsK0JBQStCLDZEQVkzQztZQVFELHFPQUFhLDRCQUE0Qiw2REFZeEM7WUFRRCx5TkFBYSx3QkFBd0IsNkRBWXBDO1lBUUQsdU1BQWEsa0JBQWtCLDZEQVU5Qjs7Ozs7U0ExTVUsaUJBQWlCIn0=