footprintjs 10.2.1 → 10.4.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 (131) hide show
  1. package/dist/esm/index.d.ts +3 -0
  2. package/dist/esm/index.js +1 -1
  3. package/dist/esm/lib/capture/absentEntries.d.ts +7 -0
  4. package/dist/esm/lib/capture/absentEntries.js +81 -0
  5. package/dist/esm/lib/capture/checkpointCapture.d.ts +11 -0
  6. package/dist/esm/lib/capture/checkpointCapture.js +104 -0
  7. package/dist/esm/lib/capture/historyData.d.ts +9 -0
  8. package/dist/esm/lib/capture/historyData.js +79 -0
  9. package/dist/esm/lib/capture/historyNote.d.ts +4 -0
  10. package/dist/esm/lib/capture/historyNote.js +52 -0
  11. package/dist/esm/lib/capture/historyTarget.d.ts +5 -0
  12. package/dist/esm/lib/capture/historyTarget.js +35 -0
  13. package/dist/esm/lib/capture/historyTypes.d.ts +39 -0
  14. package/dist/esm/lib/capture/historyTypes.js +4 -0
  15. package/dist/esm/lib/capture/nativeCoverage.d.ts +69 -0
  16. package/dist/esm/lib/capture/nativeCoverage.js +140 -0
  17. package/dist/esm/lib/capture/noteShape.d.ts +10 -0
  18. package/dist/esm/lib/capture/noteShape.js +93 -0
  19. package/dist/esm/lib/capture/readSources.d.ts +43 -0
  20. package/dist/esm/lib/capture/readSources.js +78 -0
  21. package/dist/esm/lib/engine/handlers/SubflowExecutor.js +5 -2
  22. package/dist/esm/lib/engine/traversal/FlowchartTraverser.d.ts +1 -0
  23. package/dist/esm/lib/engine/types.d.ts +3 -0
  24. package/dist/esm/lib/engine/types.js +1 -1
  25. package/dist/esm/lib/memory/StageContext.d.ts +13 -0
  26. package/dist/esm/lib/memory/StageContext.js +110 -14
  27. package/dist/esm/lib/memory/attention.d.ts +2 -0
  28. package/dist/esm/lib/memory/attention.js +12 -5
  29. package/dist/esm/lib/memory/runPolicy.d.ts +5 -1
  30. package/dist/esm/lib/memory/runPolicy.js +2 -1
  31. package/dist/esm/lib/pause/record.js +8 -2
  32. package/dist/esm/lib/pause/types.d.ts +2 -0
  33. package/dist/esm/lib/pause/types.js +1 -1
  34. package/dist/esm/lib/recorder/ControlDepRecorder.d.ts +12 -1
  35. package/dist/esm/lib/recorder/ControlDepRecorder.js +23 -1
  36. package/dist/esm/lib/recorder/snapshot.d.ts +1 -1
  37. package/dist/esm/lib/recorder/snapshot.js +7 -2
  38. package/dist/esm/lib/runner/ExecutionRuntime.d.ts +24 -1
  39. package/dist/esm/lib/runner/ExecutionRuntime.js +45 -4
  40. package/dist/esm/lib/runner/FlowChartExecutor.d.ts +5 -0
  41. package/dist/esm/lib/runner/FlowChartExecutor.js +74 -7
  42. package/dist/esm/lib/runner/attach.js +6 -2
  43. package/dist/esm/lib/runner/captureHistory.d.ts +8 -0
  44. package/dist/esm/lib/runner/captureHistory.js +106 -0
  45. package/dist/esm/lib/runner/checkpoint.d.ts +2 -0
  46. package/dist/esm/lib/runner/checkpoint.js +3 -1
  47. package/dist/esm/lib/runner/index.d.ts +1 -0
  48. package/dist/esm/lib/runner/index.js +1 -1
  49. package/dist/esm/lib/runner/options.d.ts +3 -0
  50. package/dist/esm/lib/runner/options.js +46 -3
  51. package/dist/esm/lib/runner/readStoredCapture.d.ts +39 -0
  52. package/dist/esm/lib/runner/readStoredCapture.js +36 -0
  53. package/dist/esm/lib/runner/recordSink.d.ts +11 -0
  54. package/dist/esm/lib/runner/recordSink.js +47 -4
  55. package/dist/esm/lib/runner/snapshot.d.ts +3 -1
  56. package/dist/esm/lib/runner/snapshot.js +35 -4
  57. package/dist/esm/lib/runner/storedCaptureAdmission.d.ts +4 -0
  58. package/dist/esm/lib/runner/storedCaptureAdmission.js +97 -0
  59. package/dist/esm/lib/scope/ScopeFacade.js +4 -2
  60. package/dist/esm/lib/scope/runtime.d.ts +2 -0
  61. package/dist/esm/lib/scope/runtime.js +9 -1
  62. package/dist/esm/lib/sinks/fileSink.d.ts +2 -1
  63. package/dist/esm/lib/sinks/fileSink.js +8 -2
  64. package/dist/esm/trace.d.ts +2 -0
  65. package/dist/esm/trace.js +2 -1
  66. package/dist/index.js +1 -1
  67. package/dist/lib/capture/absentEntries.js +86 -0
  68. package/dist/lib/capture/checkpointCapture.js +110 -0
  69. package/dist/lib/capture/historyData.js +85 -0
  70. package/dist/lib/capture/historyNote.js +56 -0
  71. package/dist/lib/capture/historyTarget.js +40 -0
  72. package/dist/lib/capture/historyTypes.js +7 -0
  73. package/dist/lib/capture/nativeCoverage.js +146 -0
  74. package/dist/lib/capture/noteShape.js +103 -0
  75. package/dist/lib/capture/readSources.js +83 -0
  76. package/dist/lib/engine/handlers/SubflowExecutor.js +5 -2
  77. package/dist/lib/engine/types.js +1 -1
  78. package/dist/lib/memory/StageContext.js +110 -14
  79. package/dist/lib/memory/attention.js +12 -5
  80. package/dist/lib/memory/runPolicy.js +2 -1
  81. package/dist/lib/pause/record.js +8 -2
  82. package/dist/lib/pause/types.js +1 -1
  83. package/dist/lib/recorder/ControlDepRecorder.js +23 -1
  84. package/dist/lib/recorder/snapshot.js +7 -2
  85. package/dist/lib/runner/ExecutionRuntime.js +44 -3
  86. package/dist/lib/runner/FlowChartExecutor.js +77 -10
  87. package/dist/lib/runner/attach.js +5 -1
  88. package/dist/lib/runner/captureHistory.js +110 -0
  89. package/dist/lib/runner/checkpoint.js +3 -1
  90. package/dist/lib/runner/index.js +1 -1
  91. package/dist/lib/runner/options.js +46 -3
  92. package/dist/lib/runner/readStoredCapture.js +40 -0
  93. package/dist/lib/runner/recordSink.js +47 -4
  94. package/dist/lib/runner/snapshot.js +35 -4
  95. package/dist/lib/runner/storedCaptureAdmission.js +101 -0
  96. package/dist/lib/scope/ScopeFacade.js +3 -1
  97. package/dist/lib/scope/runtime.js +12 -2
  98. package/dist/lib/sinks/fileSink.js +8 -2
  99. package/dist/trace.js +4 -2
  100. package/dist/types/index.d.ts +3 -0
  101. package/dist/types/lib/capture/absentEntries.d.ts +7 -0
  102. package/dist/types/lib/capture/checkpointCapture.d.ts +11 -0
  103. package/dist/types/lib/capture/historyData.d.ts +9 -0
  104. package/dist/types/lib/capture/historyNote.d.ts +4 -0
  105. package/dist/types/lib/capture/historyTarget.d.ts +5 -0
  106. package/dist/types/lib/capture/historyTypes.d.ts +39 -0
  107. package/dist/types/lib/capture/nativeCoverage.d.ts +69 -0
  108. package/dist/types/lib/capture/noteShape.d.ts +10 -0
  109. package/dist/types/lib/capture/readSources.d.ts +43 -0
  110. package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +1 -0
  111. package/dist/types/lib/engine/types.d.ts +3 -0
  112. package/dist/types/lib/memory/StageContext.d.ts +13 -0
  113. package/dist/types/lib/memory/attention.d.ts +2 -0
  114. package/dist/types/lib/memory/runPolicy.d.ts +5 -1
  115. package/dist/types/lib/pause/types.d.ts +2 -0
  116. package/dist/types/lib/recorder/ControlDepRecorder.d.ts +12 -1
  117. package/dist/types/lib/recorder/snapshot.d.ts +1 -1
  118. package/dist/types/lib/runner/ExecutionRuntime.d.ts +24 -1
  119. package/dist/types/lib/runner/FlowChartExecutor.d.ts +5 -0
  120. package/dist/types/lib/runner/captureHistory.d.ts +8 -0
  121. package/dist/types/lib/runner/checkpoint.d.ts +2 -0
  122. package/dist/types/lib/runner/index.d.ts +1 -0
  123. package/dist/types/lib/runner/options.d.ts +3 -0
  124. package/dist/types/lib/runner/readStoredCapture.d.ts +39 -0
  125. package/dist/types/lib/runner/recordSink.d.ts +11 -0
  126. package/dist/types/lib/runner/snapshot.d.ts +3 -1
  127. package/dist/types/lib/runner/storedCaptureAdmission.d.ts +4 -0
  128. package/dist/types/lib/scope/runtime.d.ts +2 -0
  129. package/dist/types/lib/sinks/fileSink.d.ts +2 -1
  130. package/dist/types/trace.d.ts +2 -0
  131. package/package.json +2 -2
@@ -202,6 +202,10 @@ class RunObservers {
202
202
  return ((ctx, stageName, readOnly, envArg) => {
203
203
  const scope = baseFactory(ctx, stageName, readOnly, envArg);
204
204
  const { target } = (0, runtime_js_1.requireScopeRuntime)(scope);
205
+ if (ctx.capture && !(0, runtime_js_1.hasNativeCaptureTarget)(target, ctx))
206
+ ctx.capture.limit('custom-scope');
207
+ if (ctx.readSources?.observing && !(0, runtime_js_1.hasNativeCaptureTarget)(target, ctx))
208
+ ctx.readSources.limit('custom-scope');
205
209
  // Always wire shared redaction state
206
210
  target.useSharedRedactedKeys?.(sharedRedactedKeys);
207
211
  // Apply optional modifiers
@@ -244,4 +248,4 @@ class RunObservers {
244
248
  }
245
249
  }
246
250
  exports.RunObservers = RunObservers;
247
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9ydW5uZXIvYXR0YWNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRzs7O0FBR0gsOENBQTBDO0FBRTFDLG1HQUE2RjtBQUk3Rix5RUFBcUg7QUFFckgsb0RBQTBEO0FBRTFELHVFQUE2RjtBQUs3RixNQUFhLFlBQVk7SUFDdkIsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLGdCQUFnQixDQUFvQztJQUNwRCxtR0FBbUc7SUFDbkcsZ0JBQWdCLENBQXdDO0lBQ3hELGFBQWEsR0FBbUIsRUFBRSxDQUFDO0lBQ25DLGNBQWMsR0FBb0IsRUFBRSxDQUFDO0lBQ3JDOzs7OztPQUtHO0lBQ0gsWUFBWSxDQUF3QjtJQUVwQyxlQUFlLENBQUMsT0FBMEM7UUFDeEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUM3QixJQUFJLE9BQU87WUFBRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDO0lBQy9DLENBQUM7SUFFRCxXQUFXLENBQUMsUUFBdUIsRUFBRSxPQUErQjtRQUNsRSx3RUFBd0U7UUFDeEUsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUUsSUFBSSxPQUFPLEVBQUUsUUFBUSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzlFLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFlBQVksRUFBRSxlQUFlLENBQUMsUUFB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QyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBeUIsQ0FBQztJQUM3QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxpQkFBaUI7UUFDZixNQUFNLFNBQVMsR0FBbUIsRUFBRSxDQUFDO1FBQ3JDLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDMUIsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBQ0QsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN0QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxDQUFDO1FBQ2xELElBQUksT0FBTztZQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckMsT0FBTyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDdEQsQ0FBQztJQUVELHNHQUFzRztJQUN0RyxtQkFBbUI7UUFDakIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQ3JHLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLGtCQUFrQixDQUFDLE9BQStCO1FBQ3hELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWTtZQUFFLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSw4Q0FBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5RSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztDQUNGO0FBbFBELG9DQWtQQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogYXR0YWNoIOKAlCB3aG8gb2JzZXJ2ZXMgYSBydW4sIGFuZCBob3cgdGhleSByZWFjaCBpdCAoRjkpLlxuICpcbiAqIGBSdW5PYnNlcnZlcnNgIGlzIHRoZSBleGVjdXRvcidzIE9ORSByZWdpc3RlciBvZiBvYnNlcnZlcnM6IHRoZSBidWlsdC1pblxuICogbmFycmF0aXZlIHJlY29yZGVyLCB0aGUgaW5saW5lIHNjb3BlIGFuZCBmbG93IGxpc3RzLCBhbmQgdGhlIGRlZmVycmVkIHRpZXJcbiAqIChSRkMtMDAxKS4gVGhlIGV4ZWN1dG9yJ3MgYGF0dGFjaCpSZWNvcmRlcmAgZmFtaWx5IGRlbGVnYXRlcyBoZXJlOyBlYWNoIGxlZ1xuICogKGBydW4oKWAgLyBgcmVzdW1lKClgKSBhc2tzIGl0IGZvciB0aGUgY29tcG9zZWQgc2NvcGUgZmFjdG9yeSBhbmQgdGhlIGZsb3dcbiAqIHJlY29yZGVyIGxpc3QgaXQgaGFuZHMgdGhlIHRyYXZlcnNlci5cbiAqXG4gKiBMYXdzIGtlcHQgaGVyZTpcbiAqICAgLSBhbiBpZCBsaXZlcyBvbiBleGFjdGx5IE9ORSBkZWxpdmVyeSB0aWVyIHBlciBsaXN0IOKAlCByZS1hdHRhY2hpbmcgdGhlXG4gKiAgICAgc2FtZSBpZCBTV0FQUyB0aWVycywgbmV2ZXIgZG91YmxlIGRlbGl2ZXJ5O1xuICogICAtIGV2ZXJ5IGF0dGFjaCBpcyBpZGVtcG90ZW50IGJ5IGBpZGAgKHJlcGxhY2UsIG5ldmVyIGR1cGxpY2F0ZSk7XG4gKiAgIC0gZW1pdCByZWNvcmRlcnMgcmlkZSB0aGUgU0NPUEUgbGlzdCAoYFNjb3BlRmFjYWRlYCBkaXNwYXRjaGVzIGBvbkVtaXRgXG4gKiAgICAgZnJvbSB0aGUgc2FtZSBwZXItc3RhZ2UgbGlzdCBhcyBgb25SZWFkYC9gb25Xcml0ZWApO1xuICogICAtIGEgZmxvdyBhdHRhY2ggdHVybnMgdGhlIG5hcnJhdGl2ZSBvbiAodGhlIGZsb3cgY2hhbm5lbCBuZWVkcyBpdCkuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBSdW5Db3JyZWxhdGlvbiB9IGZyb20gJy4uL2F0dGVtcHQvdHlwZXMuanMnO1xuaW1wb3J0IHsgaXNEZXZNb2RlIH0gZnJvbSAnLi4vZGV2TW9kZS5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXJPcHRpb25zIH0gZnJvbSAnLi4vZW5naW5lL25hcnJhdGl2ZS9Db21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyLmpzJztcbmltcG9ydCB7IENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXIgfSBmcm9tICcuLi9lbmdpbmUvbmFycmF0aXZlL0NvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBGbG93UmVjb3JkZXIgfSBmcm9tICcuLi9lbmdpbmUvbmFycmF0aXZlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgU2NvcGVGYWN0b3J5IH0gZnJvbSAnLi4vZW5naW5lL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgQ29tYmluZWRSZWNvcmRlciB9IGZyb20gJy4uL3JlY29yZGVyL0NvbWJpbmVkUmVjb3JkZXIuanMnO1xuaW1wb3J0IHsgaGFzRW1pdFJlY29yZGVyTWV0aG9kcywgaGFzRmxvd1JlY29yZGVyTWV0aG9kcywgaGFzUmVjb3JkZXJNZXRob2RzIH0gZnJvbSAnLi4vcmVjb3JkZXIvQ29tYmluZWRSZWNvcmRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IFNjb3BlUnVudGltZVRhcmdldCB9IGZyb20gJy4uL3Njb3BlL3J1bnRpbWUuanMnO1xuaW1wb3J0IHsgcmVxdWlyZVNjb3BlUnVudGltZSB9IGZyb20gJy4uL3Njb3BlL3J1bnRpbWUuanMnO1xuaW1wb3J0IHR5cGUgeyBSZWRhY3Rpb25Qb2xpY3ksIFNjb3BlUmVjb3JkZXIgfSBmcm9tICcuLi9zY29wZS90eXBlcy5qcyc7XG5pbXBvcnQgeyB0eXBlIEF0dGFjaFJlY29yZGVyT3B0aW9ucywgRGVmZXJyZWRPYnNlcnZlclRpZXIgfSBmcm9tICcuL0RlZmVycmVkT2JzZXJ2ZXJUaWVyLmpzJztcblxuLyoqIEEgc3RlcCBhcHBsaWVkIHRvIGV2ZXJ5IHN0YWdlIHNjb3BlIHJpZ2h0IGFmdGVyIHRoZSBiYXNlIGZhY3RvcnkgbWFrZXMgaXQuICovXG50eXBlIFNjb3BlTW9kaWZpZXIgPSAodGFyZ2V0OiBTY29wZVJ1bnRpbWVUYXJnZXQpID0+IHZvaWQ7XG5cbmV4cG9ydCBjbGFzcyBSdW5PYnNlcnZlcnMge1xuICBuYXJyYXRpdmVFbmFibGVkID0gZmFsc2U7XG4gIG5hcnJhdGl2ZU9wdGlvbnM/OiBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyT3B0aW9ucztcbiAgLyoqIFRoZSBidWlsdC1pbiBuYXJyYXRpdmUgcmVjb3JkZXIgb2YgdGhlIGN1cnJlbnQgbGVnIChrZXB0IGFjcm9zcyBhIHJlc3VtZSBzbyBpdCBhY2N1bXVsYXRlcykuICovXG4gIGNvbWJpbmVkUmVjb3JkZXI6IENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXIgfCB1bmRlZmluZWQ7XG4gIGZsb3dSZWNvcmRlcnM6IEZsb3dSZWNvcmRlcltdID0gW107XG4gIHNjb3BlUmVjb3JkZXJzOiBTY29wZVJlY29yZGVyW10gPSBbXTtcbiAgLyoqXG4gICAqIFJGQy0wMDEgZGVmZXJyZWQtb2JzZXJ2ZXIgd2lyaW5nIOKAlCBjcmVhdGVkIExBWklMWSBvbiB0aGUgZmlyc3RcbiAgICogYGRlbGl2ZXJ5OiAnZGVmZXJyZWQnYCBhdHRhY2guIGB1bmRlZmluZWRgIGZvciBldmVyeSBleGVjdXRvciB0aGF0IG5ldmVyXG4gICAqIG9wdHMgaW46IHplcm8gYWxsb2NhdGlvbiwgemVybyBwZXItZXZlbnQgY29zdCwgYnl0ZS1pZGVudGljYWwgYmVoYXZpb3JcbiAgICogKHRoZSBlbWl0IGZhc3QtcGF0aCBwcmVjZWRlbnQpLlxuICAgKi9cbiAgZGVmZXJyZWRUaWVyPzogRGVmZXJyZWRPYnNlcnZlclRpZXI7XG5cbiAgZW5hYmxlTmFycmF0aXZlKG9wdGlvbnM/OiBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMubmFycmF0aXZlRW5hYmxlZCA9IHRydWU7XG4gICAgaWYgKG9wdGlvbnMpIHRoaXMubmFycmF0aXZlT3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBhdHRhY2hTY29wZShyZWNvcmRlcjogU2NvcGVSZWNvcmRlciwgb3B0aW9ucz86IEF0dGFjaFJlY29yZGVyT3B0aW9ucyk6IHZvaWQge1xuICAgIC8vIFRpZXIgc3dhcCwgYm90aCBkaXJlY3Rpb25zOiBhbiBpZCBsaXZlcyBvbiBleGFjdGx5IE9ORSB0aWVyIHBlciBsaXN0LlxuICAgIHRoaXMuc2NvcGVSZWNvcmRlcnMgPSB0aGlzLnNjb3BlUmVjb3JkZXJzLmZpbHRlcigocikgPT4gci5pZCAhPT0gcmVjb3JkZXIuaWQpO1xuICAgIGlmIChvcHRpb25zPy5kZWxpdmVyeSA9PT0gJ2RlZmVycmVkJykge1xuICAgICAgdGhpcy5lbnN1cmVEZWZlcnJlZFRpZXIob3B0aW9ucykucmVnaXN0ZXIocmVjb3JkZXIsIHsgc2NvcGU6IHRydWUgfSwgb3B0aW9ucyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZGVmZXJyZWRUaWVyPy5yZW1vdmVGcm9tTGlzdHMocmVjb3JkZXIuaWQsIHsgc2NvcGU6IHRydWUgfSk7XG4gICAgdGhpcy5zY29wZVJlY29yZGVycy5wdXNoKHJlY29yZGVyKTtcbiAgfVxuXG4gIGF0dGFjaEZsb3cocmVjb3JkZXI6IEZsb3dSZWNvcmRlciwgb3B0aW9ucz86IEF0dGFjaFJlY29yZGVyT3B0aW9ucyk6IHZvaWQge1xuICAgIC8vIFRpZXIgc3dhcCwgYm90aCBkaXJlY3Rpb25zOiBhbiBpZCBsaXZlcyBvbiBleGFjdGx5IE9ORSB0aWVyIHBlciBsaXN0LlxuICAgIHRoaXMuZmxvd1JlY29yZGVycyA9IHRoaXMuZmxvd1JlY29yZGVycy5maWx0ZXIoKHIpID0+IHIuaWQgIT09IHJlY29yZGVyLmlkKTtcbiAgICB0aGlzLm5hcnJhdGl2ZUVuYWJsZWQgPSB0cnVlO1xuICAgIGlmIChvcHRpb25zPy5kZWxpdmVyeSA9PT0gJ2RlZmVycmVkJykge1xuICAgICAgdGhpcy5lbnN1cmVEZWZlcnJlZFRpZXIob3B0aW9ucykucmVnaXN0ZXIocmVjb3JkZXIsIHsgZmxvdzogdHJ1ZSB9LCBvcHRpb25zKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kZWZlcnJlZFRpZXI/LnJlbW92ZUZyb21MaXN0cyhyZWNvcmRlci5pZCwgeyBmbG93OiB0cnVlIH0pO1xuICAgIHRoaXMuZmxvd1JlY29yZGVycy5wdXNoKHJlY29yZGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSb3V0ZSBhIHJlY29yZGVyIHRvIGV2ZXJ5IGNoYW5uZWwgaXQgaGFzIE9XTiBldmVudCBtZXRob2RzIGZvciAoc2VlXG4gICAqIGBoYXNSZWNvcmRlck1ldGhvZHNgIOKAlCBwcm90b3R5cGUtY2hhaW4gbWV0aG9kcyBhcmUgaWdub3JlZCBvbiBwdXJwb3NlLFxuICAgKiBhZ2FpbnN0IGBPYmplY3QucHJvdG90eXBlYCBwb2xsdXRpb24pLiBJZGVtcG90ZW50IGJ5IGBpZGAgYWNyb3NzIEFMTFxuICAgKiBjaGFubmVsczogYSBjb21iaW5lZCBhdHRhY2ggcmVwbGFjZXMgYSBzaW5nbGUtY2hhbm5lbCByZWdpc3RyYXRpb24gb2YgdGhlXG4gICAqIHNhbWUgaWQgb24gd2hpY2hldmVyIGNoYW5uZWwocykgdGhlIHJlY29yZGVyIGhhcyBtZXRob2RzIGZvci5cbiAgICovXG4gIGF0dGFjaENvbWJpbmVkKHJlY29yZGVyOiBDb21iaW5lZFJlY29yZGVyLCBvcHRpb25zPzogQXR0YWNoUmVjb3JkZXJPcHRpb25zKTogdm9pZCB7XG4gICAgY29uc3QgaGFzRGF0YSA9IGhhc1JlY29yZGVyTWV0aG9kcyhyZWNvcmRlcik7XG4gICAgY29uc3QgaGFzRmxvdyA9IGhhc0Zsb3dSZWNvcmRlck1ldGhvZHMocmVjb3JkZXIpO1xuICAgIGNvbnN0IGhhc0VtaXQgPSBoYXNFbWl0UmVjb3JkZXJNZXRob2RzKHJlY29yZGVyKTtcblxuICAgIC8vIERlbGl2ZXJ5IHRpZXIgKFJGQy0wMDEpOiBvcHRpb25zIGJhZyBPUiB0aGUgcmVjb3JkZXIncyBvd25cbiAgICAvLyBgZGVsaXZlcnk6ICdkZWZlcnJlZCdgIGZpZWxkLiBUaGUgZmllbGQgaXMgYSBzdHJpbmcg4oCUIGNoYW5uZWwgcm91dGluZ1xuICAgIC8vIGFib3ZlIGNvdW50cyBldmVudC1NRVRIT0QgcHJvcGVydGllcyBvbmx5LCBzbyBkZWNsYXJpbmcgaXQgbmV2ZXJcbiAgICAvLyBjaGFuZ2VzIHdoaWNoIGNoYW5uZWxzIHRoZSByZWNvcmRlciBsYW5kcyBvbi5cbiAgICBjb25zdCBkZWxpdmVyeSA9IG9wdGlvbnM/LmRlbGl2ZXJ5ID8/IHJlY29yZGVyLmRlbGl2ZXJ5O1xuICAgIGNvbnN0IHRpZXJPcHRpb25zOiBBdHRhY2hSZWNvcmRlck9wdGlvbnMgfCB1bmRlZmluZWQgPSBkZWxpdmVyeSA9PT0gdW5kZWZpbmVkID8gb3B0aW9ucyA6IHsgLi4ub3B0aW9ucywgZGVsaXZlcnkgfTtcblxuICAgIC8vIEVtaXQgcmVjb3JkZXJzIGxpdmUgb24gdGhlIFNBTUUgY2hhbm5lbCBhcyBkYXRhLWZsb3cgcmVjb3JkZXJzXG4gICAgLy8gKFNjb3BlRmFjYWRlIGl0ZXJhdGVzIGBfcmVjb3JkZXJzYCBmb3Igb25FbWl0IGRpc3BhdGNoKS4gU2hvcnQtY2lyY3VpdDpcbiAgICAvLyBpZiBoYXNEYXRhIE9SIGhhc0VtaXQsIHRoZSByZWNvcmRlciBsYW5kcyBvbiB0aGUgc2NvcGUgbGlzdCBleGFjdGx5IG9uY2UuXG4gICAgaWYgKGhhc0RhdGEgfHwgaGFzRW1pdCkgdGhpcy5hdHRhY2hTY29wZShyZWNvcmRlciBhcyBTY29wZVJlY29yZGVyLCB0aWVyT3B0aW9ucyk7XG4gICAgaWYgKGhhc0Zsb3cpIHRoaXMuYXR0YWNoRmxvdyhyZWNvcmRlciBhcyBGbG93UmVjb3JkZXIsIHRpZXJPcHRpb25zKTtcblxuICAgIGlmICghaGFzRGF0YSAmJiAhaGFzRmxvdyAmJiAhaGFzRW1pdCAmJiBpc0Rldk1vZGUoKSkge1xuICAgICAgLy8gRGV2LW1vZGUgb25seTogc2lsZW50IHNraXBzIGFyZSBpbnZpc2libGUgYW5kIHByb2R1Y2UgaGFyZC10by1kZWJ1Z1xuICAgICAgLy8gXCJ3aHkgZGlkbid0IG15IHJlY29yZGVyIGZpcmVcIiByZXBvcnRzLiBQZXIgbGlicmFyeSBjb252ZW50aW9uLCBnYXRlZFxuICAgICAgLy8gb24gdGhlIGNlbnRyYWwgaXNEZXZNb2RlKCkgZmxhZyAobm90IHByb2Nlc3MuZW52KSBzbyBjb25zdW1lcnMgY2FuXG4gICAgICAvLyBjb250cm9sIGRldiB0b29saW5nIGNlbnRyYWxseSB2aWEgZW5hYmxlRGV2TW9kZSgpL2Rpc2FibGVEZXZNb2RlKCkuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW2Zvb3RwcmludGpzXSBhdHRhY2hDb21iaW5lZFJlY29yZGVyOiByZWNvcmRlciAnJHtyZWNvcmRlci5pZH0nIGhhcyBgICtcbiAgICAgICAgICAnbm8gb2JzZXJ2ZXIgZXZlbnQgbWV0aG9kcyDigJQgbm90aGluZyB0byBhdHRhY2guIERpZCB5b3UgZm9yZ2V0IHRvICcgK1xuICAgICAgICAgICdhZGQgYW4gb24qIGhhbmRsZXIgKG9uV3JpdGUsIG9uRGVjaXNpb24sIG9uU3ViZmxvd0VudHJ5LCAuLi4pPyAnICtcbiAgICAgICAgICAnTm90ZTogb25seSBPV04gcHJvcGVydGllcyBjb3VudDsgbWV0aG9kcyBvbiB0aGUgcHJvdG90eXBlIGNoYWluICcgK1xuICAgICAgICAgICdhcmUgaWdub3JlZCBvbiBwdXJwb3NlLicsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBEZXRhY2ggZXZlcnkgc2NvcGUgcmVjb3JkZXIgd2l0aCB0aGlzIGlkIOKAlCBib3RoIGRlbGl2ZXJ5IHRpZXJzLiAqL1xuICBkZXRhY2hTY29wZShpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zY29wZVJlY29yZGVycyA9IHRoaXMuc2NvcGVSZWNvcmRlcnMuZmlsdGVyKChyKSA9PiByLmlkICE9PSBpZCk7XG4gICAgdGhpcy5kZWZlcnJlZFRpZXI/LnJlbW92ZUZyb21MaXN0cyhpZCwgeyBzY29wZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIC8qKiBEZXRhY2ggZXZlcnkgZmxvdyByZWNvcmRlciB3aXRoIHRoaXMgaWQg4oCUIGJvdGggZGVsaXZlcnkgdGllcnMuICovXG4gIGRldGFjaEZsb3coaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZmxvd1JlY29yZGVycyA9IHRoaXMuZmxvd1JlY29yZGVycy5maWx0ZXIoKHIpID0+IHIuaWQgIT09IGlkKTtcbiAgICB0aGlzLmRlZmVycmVkVGllcj8ucmVtb3ZlRnJvbUxpc3RzKGlkLCB7IGZsb3c6IHRydWUgfSk7XG4gIH1cblxuICAvKiogQSBkZWZlbnNpdmUgY29weSBvZiB0aGUgc2NvcGUgbGlzdCAoYm90aCB0aWVycykuICovXG4gIHNjb3BlTGlzdCgpOiBTY29wZVJlY29yZGVyW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5zY29wZVJlY29yZGVycywgLi4uKHRoaXMuZGVmZXJyZWRUaWVyPy5zY29wZUxpc3RSZWNvcmRlcnMoKSA/PyBbXSldO1xuICB9XG5cbiAgLyoqIEEgZGVmZW5zaXZlIGNvcHkgb2YgdGhlIGZsb3cgbGlzdCAoYm90aCB0aWVycykuICovXG4gIGZsb3dMaXN0KCk6IEZsb3dSZWNvcmRlcltdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuZmxvd1JlY29yZGVycywgLi4uKHRoaXMuZGVmZXJyZWRUaWVyPy5mbG93TGlzdFJlY29yZGVycygpID8/IFtdKV07XG4gIH1cblxuICAvKipcbiAgICogQSBmcmVzaCBgcnVuKClgIGNsZWFycyBldmVyeSBhdHRhY2hlZCByZWNvcmRlciAoYGNsZWFyKClgKSwgc28gc3RhdGUgZG9lc1xuICAgKiBub3QgYWNjdW11bGF0ZSBhY3Jvc3MgcnVucy4gVGhlIG5hcnJhdGl2ZSByZWNvcmRlciBpcyBub3QgY2xlYXJlZDogZWFjaFxuICAgKiBmcmVzaCBsZWcgYnVpbGRzIGEgbmV3IG9uZSAoe0BsaW5rIHN0YXJ0TGVnfSkuXG4gICAqL1xuICBjbGVhckZvclJ1bigpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHIgb2YgdGhpcy5mbG93UmVjb3JkZXJzKSB7XG4gICAgICByLmNsZWFyPy4oKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCByIG9mIHRoaXMuc2NvcGVSZWNvcmRlcnMpIHtcbiAgICAgIHIuY2xlYXI/LigpO1xuICAgIH1cbiAgICB0aGlzLmRlZmVycmVkVGllcj8uY2xlYXJSZWNvcmRlcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVuIGEgbGVnOiBhIGZyZXNoIG5hcnJhdGl2ZSByZWNvcmRlciB3aGVuIHRoZSBuYXJyYXRpdmUgaXMgb24sIG5vbmUgd2hlblxuICAgKiBpdCBpcyBvZmYg4oCUIG9yLCBvbiBhIHJlc3VtZSAoYHByZXNlcnZlYCksIHRoZSBleGlzdGluZyBvbmUsIHNvIHRoZVxuICAgKiBuYXJyYXRpdmUgYWNjdW11bGF0ZXMgYWNyb3NzIHRoZSBwYXVzZS4gQSBmcmVzaCBleGVjdXRvciBoYXMgbm8gcmVjb3JkZXJcbiAgICogdG8gcHJlc2VydmUgYW5kIHN0YXJ0cyBvbmUgZm9yIHRoZSByZXN1bWVkIGxlZyBvbmx5LlxuICAgKiBSZXR1cm5zIHRoZSBsZWcncyBuYXJyYXRpdmUgZmxhZy5cbiAgICovXG4gIHN0YXJ0TGVnKGNoYXJ0TmFycmF0aXZlOiBib29sZWFuLCBwcmVzZXJ2ZTogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG5hcnJhdGl2ZUZsYWcgPSB0aGlzLm5hcnJhdGl2ZUVuYWJsZWQgfHwgY2hhcnROYXJyYXRpdmU7XG4gICAgaWYgKCFwcmVzZXJ2ZSB8fCAhdGhpcy5jb21iaW5lZFJlY29yZGVyKSB7XG4gICAgICB0aGlzLmNvbWJpbmVkUmVjb3JkZXIgPSBuYXJyYXRpdmVGbGFnID8gbmV3IENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXIodGhpcy5uYXJyYXRpdmVPcHRpb25zKSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIG5hcnJhdGl2ZUZsYWc7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGxlZydzIHNjb3BlIGZhY3Rvcnk6IHRoZSBiYXNlIGZhY3RvcnksIHRoZW4gZXZlcnkgc2NvcGUgbW9kaWZpZXIgaW4gT05FXG4gICAqIGZsYXQgcGFzcyDigJQgdGhlIG5hcnJhdGl2ZSByZWNvcmRlciwgdGhlIHVzZXIncyBzY29wZSByZWNvcmRlcnMsIHRoZVxuICAgKiBkZWZlcnJlZCB0aWVyJ3Mgc2NvcGUgdGFwLCB0aGUgcmVkYWN0aW9uIHBvbGljeS5cbiAgICpcbiAgICogVGhlIG1hcmtlZC1rZXlzIHNldCBpcyBBTFdBWVMgd2lyZWQgKGEgc3RhZ2UgY2FuIGNhbGxcbiAgICogYHNldFZhbHVlKGtleSwgdmFsLCB0cnVlKWAgZm9yIHBlci1jYWxsIHJlZGFjdGlvbiB3aXRob3V0IGFueSBwb2xpY3kpLlxuICAgKi9cbiAgY29tcG9zZVNjb3BlRmFjdG9yeTxUU2NvcGU+KFxuICAgIGJhc2VGYWN0b3J5OiBTY29wZUZhY3Rvcnk8VFNjb3BlPixcbiAgICByZWRhY3Rpb25Qb2xpY3k6IFJlZGFjdGlvblBvbGljeSB8IHVuZGVmaW5lZCxcbiAgICBzaGFyZWRSZWRhY3RlZEtleXM6IFNldDxzdHJpbmc+LFxuICAgIGNvcnJlbGF0aW9uPzogUnVuQ29ycmVsYXRpb24sXG4gICk6IFNjb3BlRmFjdG9yeTxUU2NvcGU+IHtcbiAgICBjb25zdCBtb2RpZmllcnM6IFNjb3BlTW9kaWZpZXJbXSA9IFtdO1xuXG4gICAgLy8gMS4gTmFycmF0aXZlIHJlY29yZGVyIChpZiBlbmFibGVkKVxuICAgIGlmICh0aGlzLmNvbWJpbmVkUmVjb3JkZXIpIHtcbiAgICAgIGNvbnN0IHJlY29yZGVyID0gdGhpcy5jb21iaW5lZFJlY29yZGVyO1xuICAgICAgbW9kaWZpZXJzLnB1c2goKHRhcmdldCkgPT4ge1xuICAgICAgICB0YXJnZXQuYXR0YWNoU2NvcGVSZWNvcmRlcj8uKHJlY29yZGVyKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIDIuIFVzZXItcHJvdmlkZWQgc2NvcGUgcmVjb3JkZXJzXG4gICAgaWYgKHRoaXMuc2NvcGVSZWNvcmRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgcmVjb3JkZXJzID0gdGhpcy5zY29wZVJlY29yZGVycztcbiAgICAgIG1vZGlmaWVycy5wdXNoKCh0YXJnZXQpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCByIG9mIHJlY29yZGVycykgdGFyZ2V0LmF0dGFjaFNjb3BlUmVjb3JkZXI/LihyKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIDJiLiBEZWZlcnJlZC1vYnNlcnZlciBzY29wZSB0YXAgKFJGQy0wMDEgQmxvY2sgNykg4oCUIGEgc3ludGhldGljXG4gICAgLy8gcmVjb3JkZXIgd2hvc2UgaG9va3MgQ0FQVFVSRSBpbnRvIHRoZSBib3VuZGVkIHF1ZXVlIGluc3RlYWQgb2YgZG9pbmdcbiAgICAvLyBvYnNlcnZlciB3b3JrLiBJdCByaWRlcyB0aGUgc2FtZSBwZXItc3RhZ2UgcmVjb3JkZXIgbGlzdCBhcyBpbmxpbmVcbiAgICAvLyByZWNvcmRlcnMsIHNvIGl0IHJlY2VpdmVzIGV4YWN0bHkgdGhlIHBvc3QtcmVkYWN0aW9uIGV2ZW50cyB0aGV5IGRvLlxuICAgIC8vIEFic2VudCAoemVybyB3b3JrLCBpZGVudGljYWwgbGlzdCkgd2hlbiBub2JvZHkgb3B0ZWQgaW50byBkZWZlcnJhbC5cbiAgICBjb25zdCBzY29wZVRhcCA9IHRoaXMuZGVmZXJyZWRUaWVyPy5idWlsZFNjb3BlVGFwKCk7XG4gICAgaWYgKHNjb3BlVGFwKSB7XG4gICAgICBtb2RpZmllcnMucHVzaCgodGFyZ2V0KSA9PiB7XG4gICAgICAgIHRhcmdldC5hdHRhY2hTY29wZVJlY29yZGVyPy4oc2NvcGVUYXApO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gMy4gUmVkYWN0aW9uIHBvbGljeSAoY29uZGl0aW9uYWwg4oCUIG9ubHkgd2hlbiBwb2xpY3kgaXMgc2V0KS4gQVxuICAgIC8vIGBTY29wZUZhY2FkZWAgYWxyZWFkeSByZWFkcyB0aGUgcnVuJ3MgcnVsZSB0aHJvdWdoIGl0cyBjb250ZXh0ICh0aGVcbiAgICAvLyBydWxlIGlzIGluc3RhbGxlZCBvbiB0aGUgcnVudGltZSByb290KTsgdGhpcyBjYWxsIHN1cHBsaWVzIGl0IHRvXG4gICAgLy8gZXhwbGljaXRseSByZWdpc3RlcmVkIGN1c3RvbSBwb3J0cywgYW5kIG9uIGEgZmFjYWRlIGl0XG4gICAgLy8gcmUtc3RhdGVzIHRoZSBleGVjdXRvcidzIHBvbGljeSBvbiB0aGUgc2hhcmVkIHJ1bGUgKGEgbm8tb3ApLlxuICAgIGlmIChyZWRhY3Rpb25Qb2xpY3kpIHtcbiAgICAgIGNvbnN0IHBvbGljeSA9IHJlZGFjdGlvblBvbGljeTtcbiAgICAgIG1vZGlmaWVycy5wdXNoKCh0YXJnZXQpID0+IHtcbiAgICAgICAgdGFyZ2V0LnVzZVJlZGFjdGlvblBvbGljeT8uKHBvbGljeSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyA0LiBUaGUgbGVnJ3MgY29ycmVsYXRpb24gKDEwLjEpIOKAlCBvbmUgZnJvemVuIG9iamVjdCBwZXIgbGVnLCBzbyBhIGZhY3RvcnkgY29tcG9zZWQgZm9yIG9uZSBsZWcgbmV2ZXJcbiAgICAvLyBzdGFtcHMgYW5vdGhlcidzLiBJbnN0YWxsZWQgZXZlbiB3aGVuIGFic2VudDogYSB0YXJnZXQgYSBjdXN0b20gZmFjdG9yeSByZS11c2VzIGFjcm9zcyBydW5zIGlzIENMRUFSRUQsXG4gICAgLy8gbmV2ZXIgbGVmdCBob2xkaW5nIGFuIGVhcmxpZXIgcnVuJ3MuIEFic2VudCDihpIgZXZlbnRzIGJ5dGUtaWRlbnRpY2FsLlxuICAgIG1vZGlmaWVycy5wdXNoKCh0YXJnZXQpID0+IHtcbiAgICAgIHRhcmdldC51c2VDb3JyZWxhdGlvbj8uKGNvcnJlbGF0aW9uKTtcbiAgICB9KTtcblxuICAgIHJldHVybiAoKGN0eDogYW55LCBzdGFnZU5hbWU6IHN0cmluZywgcmVhZE9ubHk/OiB1bmtub3duLCBlbnZBcmc/OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHNjb3BlID0gYmFzZUZhY3RvcnkoY3R4LCBzdGFnZU5hbWUsIHJlYWRPbmx5LCBlbnZBcmcpO1xuICAgICAgY29uc3QgeyB0YXJnZXQgfSA9IHJlcXVpcmVTY29wZVJ1bnRpbWUoc2NvcGUpO1xuICAgICAgLy8gQWx3YXlzIHdpcmUgc2hhcmVkIHJlZGFjdGlvbiBzdGF0ZVxuICAgICAgdGFyZ2V0LnVzZVNoYXJlZFJlZGFjdGVkS2V5cz8uKHNoYXJlZFJlZGFjdGVkS2V5cyk7XG4gICAgICAvLyBBcHBseSBvcHRpb25hbCBtb2RpZmllcnNcbiAgICAgIGZvciAoY29uc3QgbW9kIG9mIG1vZGlmaWVycykgbW9kKHRhcmdldCk7XG4gICAgICByZXR1cm4gc2NvcGU7XG4gICAgfSkgYXMgU2NvcGVGYWN0b3J5PFRTY29wZT47XG4gIH1cblxuICAvKipcbiAgICogVGhlIGxlZydzIGZsb3cgcmVjb3JkZXJzOiB0aGUgbmFycmF0aXZlIHJlY29yZGVyICh3aGVuIG9uKSwgdGhlIHVzZXInc1xuICAgKiBmbG93IHJlY29yZGVycywgdGhlbiB0aGUgZGVmZXJyZWQgdGllcidzIGZsb3cgdGFwIChSRkMtMDAxIEJsb2NrIDcpIOKAlFxuICAgKiBhcHBlbmRlZCBsaWtlIGFueSBvdGhlciBmbG93IHJlY29yZGVyLCBzbyB0aGUgZGlzcGF0Y2hlciBuZWVkcyBubyB0aWVyXG4gICAqIGxvZ2ljIG9mIGl0cyBvd24uIGB1bmRlZmluZWRgIHdoZW4gdGhlcmUgYXJlIG5vbmUuXG4gICAqL1xuICBmbG93UmVjb3JkZXJzTGlzdCgpOiBGbG93UmVjb3JkZXJbXSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgcmVjb3JkZXJzOiBGbG93UmVjb3JkZXJbXSA9IFtdO1xuICAgIGlmICh0aGlzLmNvbWJpbmVkUmVjb3JkZXIpIHtcbiAgICAgIHJlY29yZGVycy5wdXNoKHRoaXMuY29tYmluZWRSZWNvcmRlcik7XG4gICAgfVxuICAgIHJlY29yZGVycy5wdXNoKC4uLnRoaXMuZmxvd1JlY29yZGVycyk7XG4gICAgY29uc3QgZmxvd1RhcCA9IHRoaXMuZGVmZXJyZWRUaWVyPy5idWlsZEZsb3dUYXAoKTtcbiAgICBpZiAoZmxvd1RhcCkgcmVjb3JkZXJzLnB1c2goZmxvd1RhcCk7XG4gICAgcmV0dXJuIHJlY29yZGVycy5sZW5ndGggPiAwID8gcmVjb3JkZXJzIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIFRoZSBpbmxpbmUgZmxvdyBsaXN0ZW5lcnMgb2YgYW4gZXhlY3V0b3ItbWFkZSBldmVudCAoYG9uUmVzdW1lYCk6IHRoZSBuYXJyYXRpdmUgcmVjb3JkZXIgZmlyc3QuICovXG4gIGlubGluZUZsb3dMaXN0ZW5lcnMoKTogRmxvd1JlY29yZGVyW10ge1xuICAgIHJldHVybiB0aGlzLmNvbWJpbmVkUmVjb3JkZXIgPyBbdGhpcy5jb21iaW5lZFJlY29yZGVyLCAuLi50aGlzLmZsb3dSZWNvcmRlcnNdIDogdGhpcy5mbG93UmVjb3JkZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIExhemlseSBjcmVhdGUgdGhlIGV4ZWN1dG9yJ3MgT05FIGRlZmVycmVkLW9ic2VydmVyIHRpZXIgKG9uZSBtZXJnZWRcbiAgICogcXVldWUsIHRvdGFsIGV2ZW50IG9yZGVyIGFjcm9zcyBhbGwgdGhyZWUgY2hhbm5lbHMpLiBUaGUgRklSU1QgZGVmZXJyZWRcbiAgICogYXR0YWNoJ3Mgb3B0aW9ucyBjb25maWd1cmUgdGhlIGRpc3BhdGNoZXI7IGxhdGVyIGRpZmZlcmluZyBvcHRpb25zIGFyZVxuICAgKiBkZXYtd2FybmVkIGFuZCBpZ25vcmVkIChzZWUgYEF0dGFjaFJlY29yZGVyT3B0aW9uc2ApLlxuICAgKi9cbiAgcHJpdmF0ZSBlbnN1cmVEZWZlcnJlZFRpZXIob3B0aW9ucz86IEF0dGFjaFJlY29yZGVyT3B0aW9ucyk6IERlZmVycmVkT2JzZXJ2ZXJUaWVyIHtcbiAgICBpZiAoIXRoaXMuZGVmZXJyZWRUaWVyKSB0aGlzLmRlZmVycmVkVGllciA9IG5ldyBEZWZlcnJlZE9ic2VydmVyVGllcihvcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcy5kZWZlcnJlZFRpZXI7XG4gIH1cbn1cbiJdfQ==
251
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0YWNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9ydW5uZXIvYXR0YWNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRzs7O0FBR0gsOENBQTBDO0FBRTFDLG1HQUE2RjtBQUk3Rix5RUFBcUg7QUFFckgsb0RBQWtGO0FBRWxGLHVFQUE2RjtBQUs3RixNQUFhLFlBQVk7SUFDdkIsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLGdCQUFnQixDQUFvQztJQUNwRCxtR0FBbUc7SUFDbkcsZ0JBQWdCLENBQXdDO0lBQ3hELGFBQWEsR0FBbUIsRUFBRSxDQUFDO0lBQ25DLGNBQWMsR0FBb0IsRUFBRSxDQUFDO0lBQ3JDOzs7OztPQUtHO0lBQ0gsWUFBWSxDQUF3QjtJQUVwQyxlQUFlLENBQUMsT0FBMEM7UUFDeEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUM3QixJQUFJLE9BQU87WUFBRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDO0lBQy9DLENBQUM7SUFFRCxXQUFXLENBQUMsUUFBdUIsRUFBRSxPQUErQjtRQUNsRSx3RUFBd0U7UUFDeEUsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUUsSUFBSSxPQUFPLEVBQUUsUUFBUSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQzlFLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFlBQVksRUFBRSxlQUFlLENBQUMsUUFB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T0FLRztJQUNLLGtCQUFrQixDQUFDLE9BQStCO1FBQ3hELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWTtZQUFFLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSw4Q0FBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM5RSxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDM0IsQ0FBQztDQUNGO0FBcFBELG9DQW9QQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogYXR0YWNoIOKAlCB3aG8gb2JzZXJ2ZXMgYSBydW4sIGFuZCBob3cgdGhleSByZWFjaCBpdCAoRjkpLlxuICpcbiAqIGBSdW5PYnNlcnZlcnNgIGlzIHRoZSBleGVjdXRvcidzIE9ORSByZWdpc3RlciBvZiBvYnNlcnZlcnM6IHRoZSBidWlsdC1pblxuICogbmFycmF0aXZlIHJlY29yZGVyLCB0aGUgaW5saW5lIHNjb3BlIGFuZCBmbG93IGxpc3RzLCBhbmQgdGhlIGRlZmVycmVkIHRpZXJcbiAqIChSRkMtMDAxKS4gVGhlIGV4ZWN1dG9yJ3MgYGF0dGFjaCpSZWNvcmRlcmAgZmFtaWx5IGRlbGVnYXRlcyBoZXJlOyBlYWNoIGxlZ1xuICogKGBydW4oKWAgLyBgcmVzdW1lKClgKSBhc2tzIGl0IGZvciB0aGUgY29tcG9zZWQgc2NvcGUgZmFjdG9yeSBhbmQgdGhlIGZsb3dcbiAqIHJlY29yZGVyIGxpc3QgaXQgaGFuZHMgdGhlIHRyYXZlcnNlci5cbiAqXG4gKiBMYXdzIGtlcHQgaGVyZTpcbiAqICAgLSBhbiBpZCBsaXZlcyBvbiBleGFjdGx5IE9ORSBkZWxpdmVyeSB0aWVyIHBlciBsaXN0IOKAlCByZS1hdHRhY2hpbmcgdGhlXG4gKiAgICAgc2FtZSBpZCBTV0FQUyB0aWVycywgbmV2ZXIgZG91YmxlIGRlbGl2ZXJ5O1xuICogICAtIGV2ZXJ5IGF0dGFjaCBpcyBpZGVtcG90ZW50IGJ5IGBpZGAgKHJlcGxhY2UsIG5ldmVyIGR1cGxpY2F0ZSk7XG4gKiAgIC0gZW1pdCByZWNvcmRlcnMgcmlkZSB0aGUgU0NPUEUgbGlzdCAoYFNjb3BlRmFjYWRlYCBkaXNwYXRjaGVzIGBvbkVtaXRgXG4gKiAgICAgZnJvbSB0aGUgc2FtZSBwZXItc3RhZ2UgbGlzdCBhcyBgb25SZWFkYC9gb25Xcml0ZWApO1xuICogICAtIGEgZmxvdyBhdHRhY2ggdHVybnMgdGhlIG5hcnJhdGl2ZSBvbiAodGhlIGZsb3cgY2hhbm5lbCBuZWVkcyBpdCkuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBSdW5Db3JyZWxhdGlvbiB9IGZyb20gJy4uL2F0dGVtcHQvdHlwZXMuanMnO1xuaW1wb3J0IHsgaXNEZXZNb2RlIH0gZnJvbSAnLi4vZGV2TW9kZS5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXJPcHRpb25zIH0gZnJvbSAnLi4vZW5naW5lL25hcnJhdGl2ZS9Db21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyLmpzJztcbmltcG9ydCB7IENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXIgfSBmcm9tICcuLi9lbmdpbmUvbmFycmF0aXZlL0NvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBGbG93UmVjb3JkZXIgfSBmcm9tICcuLi9lbmdpbmUvbmFycmF0aXZlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgU2NvcGVGYWN0b3J5IH0gZnJvbSAnLi4vZW5naW5lL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgQ29tYmluZWRSZWNvcmRlciB9IGZyb20gJy4uL3JlY29yZGVyL0NvbWJpbmVkUmVjb3JkZXIuanMnO1xuaW1wb3J0IHsgaGFzRW1pdFJlY29yZGVyTWV0aG9kcywgaGFzRmxvd1JlY29yZGVyTWV0aG9kcywgaGFzUmVjb3JkZXJNZXRob2RzIH0gZnJvbSAnLi4vcmVjb3JkZXIvQ29tYmluZWRSZWNvcmRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IFNjb3BlUnVudGltZVRhcmdldCB9IGZyb20gJy4uL3Njb3BlL3J1bnRpbWUuanMnO1xuaW1wb3J0IHsgaGFzTmF0aXZlQ2FwdHVyZVRhcmdldCwgcmVxdWlyZVNjb3BlUnVudGltZSB9IGZyb20gJy4uL3Njb3BlL3J1bnRpbWUuanMnO1xuaW1wb3J0IHR5cGUgeyBSZWRhY3Rpb25Qb2xpY3ksIFNjb3BlUmVjb3JkZXIgfSBmcm9tICcuLi9zY29wZS90eXBlcy5qcyc7XG5pbXBvcnQgeyB0eXBlIEF0dGFjaFJlY29yZGVyT3B0aW9ucywgRGVmZXJyZWRPYnNlcnZlclRpZXIgfSBmcm9tICcuL0RlZmVycmVkT2JzZXJ2ZXJUaWVyLmpzJztcblxuLyoqIEEgc3RlcCBhcHBsaWVkIHRvIGV2ZXJ5IHN0YWdlIHNjb3BlIHJpZ2h0IGFmdGVyIHRoZSBiYXNlIGZhY3RvcnkgbWFrZXMgaXQuICovXG50eXBlIFNjb3BlTW9kaWZpZXIgPSAodGFyZ2V0OiBTY29wZVJ1bnRpbWVUYXJnZXQpID0+IHZvaWQ7XG5cbmV4cG9ydCBjbGFzcyBSdW5PYnNlcnZlcnMge1xuICBuYXJyYXRpdmVFbmFibGVkID0gZmFsc2U7XG4gIG5hcnJhdGl2ZU9wdGlvbnM/OiBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyT3B0aW9ucztcbiAgLyoqIFRoZSBidWlsdC1pbiBuYXJyYXRpdmUgcmVjb3JkZXIgb2YgdGhlIGN1cnJlbnQgbGVnIChrZXB0IGFjcm9zcyBhIHJlc3VtZSBzbyBpdCBhY2N1bXVsYXRlcykuICovXG4gIGNvbWJpbmVkUmVjb3JkZXI6IENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXIgfCB1bmRlZmluZWQ7XG4gIGZsb3dSZWNvcmRlcnM6IEZsb3dSZWNvcmRlcltdID0gW107XG4gIHNjb3BlUmVjb3JkZXJzOiBTY29wZVJlY29yZGVyW10gPSBbXTtcbiAgLyoqXG4gICAqIFJGQy0wMDEgZGVmZXJyZWQtb2JzZXJ2ZXIgd2lyaW5nIOKAlCBjcmVhdGVkIExBWklMWSBvbiB0aGUgZmlyc3RcbiAgICogYGRlbGl2ZXJ5OiAnZGVmZXJyZWQnYCBhdHRhY2guIGB1bmRlZmluZWRgIGZvciBldmVyeSBleGVjdXRvciB0aGF0IG5ldmVyXG4gICAqIG9wdHMgaW46IHplcm8gYWxsb2NhdGlvbiwgemVybyBwZXItZXZlbnQgY29zdCwgYnl0ZS1pZGVudGljYWwgYmVoYXZpb3JcbiAgICogKHRoZSBlbWl0IGZhc3QtcGF0aCBwcmVjZWRlbnQpLlxuICAgKi9cbiAgZGVmZXJyZWRUaWVyPzogRGVmZXJyZWRPYnNlcnZlclRpZXI7XG5cbiAgZW5hYmxlTmFycmF0aXZlKG9wdGlvbnM/OiBDb21iaW5lZE5hcnJhdGl2ZVJlY29yZGVyT3B0aW9ucyk6IHZvaWQge1xuICAgIHRoaXMubmFycmF0aXZlRW5hYmxlZCA9IHRydWU7XG4gICAgaWYgKG9wdGlvbnMpIHRoaXMubmFycmF0aXZlT3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBhdHRhY2hTY29wZShyZWNvcmRlcjogU2NvcGVSZWNvcmRlciwgb3B0aW9ucz86IEF0dGFjaFJlY29yZGVyT3B0aW9ucyk6IHZvaWQge1xuICAgIC8vIFRpZXIgc3dhcCwgYm90aCBkaXJlY3Rpb25zOiBhbiBpZCBsaXZlcyBvbiBleGFjdGx5IE9ORSB0aWVyIHBlciBsaXN0LlxuICAgIHRoaXMuc2NvcGVSZWNvcmRlcnMgPSB0aGlzLnNjb3BlUmVjb3JkZXJzLmZpbHRlcigocikgPT4gci5pZCAhPT0gcmVjb3JkZXIuaWQpO1xuICAgIGlmIChvcHRpb25zPy5kZWxpdmVyeSA9PT0gJ2RlZmVycmVkJykge1xuICAgICAgdGhpcy5lbnN1cmVEZWZlcnJlZFRpZXIob3B0aW9ucykucmVnaXN0ZXIocmVjb3JkZXIsIHsgc2NvcGU6IHRydWUgfSwgb3B0aW9ucyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZGVmZXJyZWRUaWVyPy5yZW1vdmVGcm9tTGlzdHMocmVjb3JkZXIuaWQsIHsgc2NvcGU6IHRydWUgfSk7XG4gICAgdGhpcy5zY29wZVJlY29yZGVycy5wdXNoKHJlY29yZGVyKTtcbiAgfVxuXG4gIGF0dGFjaEZsb3cocmVjb3JkZXI6IEZsb3dSZWNvcmRlciwgb3B0aW9ucz86IEF0dGFjaFJlY29yZGVyT3B0aW9ucyk6IHZvaWQge1xuICAgIC8vIFRpZXIgc3dhcCwgYm90aCBkaXJlY3Rpb25zOiBhbiBpZCBsaXZlcyBvbiBleGFjdGx5IE9ORSB0aWVyIHBlciBsaXN0LlxuICAgIHRoaXMuZmxvd1JlY29yZGVycyA9IHRoaXMuZmxvd1JlY29yZGVycy5maWx0ZXIoKHIpID0+IHIuaWQgIT09IHJlY29yZGVyLmlkKTtcbiAgICB0aGlzLm5hcnJhdGl2ZUVuYWJsZWQgPSB0cnVlO1xuICAgIGlmIChvcHRpb25zPy5kZWxpdmVyeSA9PT0gJ2RlZmVycmVkJykge1xuICAgICAgdGhpcy5lbnN1cmVEZWZlcnJlZFRpZXIob3B0aW9ucykucmVnaXN0ZXIocmVjb3JkZXIsIHsgZmxvdzogdHJ1ZSB9LCBvcHRpb25zKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kZWZlcnJlZFRpZXI/LnJlbW92ZUZyb21MaXN0cyhyZWNvcmRlci5pZCwgeyBmbG93OiB0cnVlIH0pO1xuICAgIHRoaXMuZmxvd1JlY29yZGVycy5wdXNoKHJlY29yZGVyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSb3V0ZSBhIHJlY29yZGVyIHRvIGV2ZXJ5IGNoYW5uZWwgaXQgaGFzIE9XTiBldmVudCBtZXRob2RzIGZvciAoc2VlXG4gICAqIGBoYXNSZWNvcmRlck1ldGhvZHNgIOKAlCBwcm90b3R5cGUtY2hhaW4gbWV0aG9kcyBhcmUgaWdub3JlZCBvbiBwdXJwb3NlLFxuICAgKiBhZ2FpbnN0IGBPYmplY3QucHJvdG90eXBlYCBwb2xsdXRpb24pLiBJZGVtcG90ZW50IGJ5IGBpZGAgYWNyb3NzIEFMTFxuICAgKiBjaGFubmVsczogYSBjb21iaW5lZCBhdHRhY2ggcmVwbGFjZXMgYSBzaW5nbGUtY2hhbm5lbCByZWdpc3RyYXRpb24gb2YgdGhlXG4gICAqIHNhbWUgaWQgb24gd2hpY2hldmVyIGNoYW5uZWwocykgdGhlIHJlY29yZGVyIGhhcyBtZXRob2RzIGZvci5cbiAgICovXG4gIGF0dGFjaENvbWJpbmVkKHJlY29yZGVyOiBDb21iaW5lZFJlY29yZGVyLCBvcHRpb25zPzogQXR0YWNoUmVjb3JkZXJPcHRpb25zKTogdm9pZCB7XG4gICAgY29uc3QgaGFzRGF0YSA9IGhhc1JlY29yZGVyTWV0aG9kcyhyZWNvcmRlcik7XG4gICAgY29uc3QgaGFzRmxvdyA9IGhhc0Zsb3dSZWNvcmRlck1ldGhvZHMocmVjb3JkZXIpO1xuICAgIGNvbnN0IGhhc0VtaXQgPSBoYXNFbWl0UmVjb3JkZXJNZXRob2RzKHJlY29yZGVyKTtcblxuICAgIC8vIERlbGl2ZXJ5IHRpZXIgKFJGQy0wMDEpOiBvcHRpb25zIGJhZyBPUiB0aGUgcmVjb3JkZXIncyBvd25cbiAgICAvLyBgZGVsaXZlcnk6ICdkZWZlcnJlZCdgIGZpZWxkLiBUaGUgZmllbGQgaXMgYSBzdHJpbmcg4oCUIGNoYW5uZWwgcm91dGluZ1xuICAgIC8vIGFib3ZlIGNvdW50cyBldmVudC1NRVRIT0QgcHJvcGVydGllcyBvbmx5LCBzbyBkZWNsYXJpbmcgaXQgbmV2ZXJcbiAgICAvLyBjaGFuZ2VzIHdoaWNoIGNoYW5uZWxzIHRoZSByZWNvcmRlciBsYW5kcyBvbi5cbiAgICBjb25zdCBkZWxpdmVyeSA9IG9wdGlvbnM/LmRlbGl2ZXJ5ID8/IHJlY29yZGVyLmRlbGl2ZXJ5O1xuICAgIGNvbnN0IHRpZXJPcHRpb25zOiBBdHRhY2hSZWNvcmRlck9wdGlvbnMgfCB1bmRlZmluZWQgPSBkZWxpdmVyeSA9PT0gdW5kZWZpbmVkID8gb3B0aW9ucyA6IHsgLi4ub3B0aW9ucywgZGVsaXZlcnkgfTtcblxuICAgIC8vIEVtaXQgcmVjb3JkZXJzIGxpdmUgb24gdGhlIFNBTUUgY2hhbm5lbCBhcyBkYXRhLWZsb3cgcmVjb3JkZXJzXG4gICAgLy8gKFNjb3BlRmFjYWRlIGl0ZXJhdGVzIGBfcmVjb3JkZXJzYCBmb3Igb25FbWl0IGRpc3BhdGNoKS4gU2hvcnQtY2lyY3VpdDpcbiAgICAvLyBpZiBoYXNEYXRhIE9SIGhhc0VtaXQsIHRoZSByZWNvcmRlciBsYW5kcyBvbiB0aGUgc2NvcGUgbGlzdCBleGFjdGx5IG9uY2UuXG4gICAgaWYgKGhhc0RhdGEgfHwgaGFzRW1pdCkgdGhpcy5hdHRhY2hTY29wZShyZWNvcmRlciBhcyBTY29wZVJlY29yZGVyLCB0aWVyT3B0aW9ucyk7XG4gICAgaWYgKGhhc0Zsb3cpIHRoaXMuYXR0YWNoRmxvdyhyZWNvcmRlciBhcyBGbG93UmVjb3JkZXIsIHRpZXJPcHRpb25zKTtcblxuICAgIGlmICghaGFzRGF0YSAmJiAhaGFzRmxvdyAmJiAhaGFzRW1pdCAmJiBpc0Rldk1vZGUoKSkge1xuICAgICAgLy8gRGV2LW1vZGUgb25seTogc2lsZW50IHNraXBzIGFyZSBpbnZpc2libGUgYW5kIHByb2R1Y2UgaGFyZC10by1kZWJ1Z1xuICAgICAgLy8gXCJ3aHkgZGlkbid0IG15IHJlY29yZGVyIGZpcmVcIiByZXBvcnRzLiBQZXIgbGlicmFyeSBjb252ZW50aW9uLCBnYXRlZFxuICAgICAgLy8gb24gdGhlIGNlbnRyYWwgaXNEZXZNb2RlKCkgZmxhZyAobm90IHByb2Nlc3MuZW52KSBzbyBjb25zdW1lcnMgY2FuXG4gICAgICAvLyBjb250cm9sIGRldiB0b29saW5nIGNlbnRyYWxseSB2aWEgZW5hYmxlRGV2TW9kZSgpL2Rpc2FibGVEZXZNb2RlKCkuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW2Zvb3RwcmludGpzXSBhdHRhY2hDb21iaW5lZFJlY29yZGVyOiByZWNvcmRlciAnJHtyZWNvcmRlci5pZH0nIGhhcyBgICtcbiAgICAgICAgICAnbm8gb2JzZXJ2ZXIgZXZlbnQgbWV0aG9kcyDigJQgbm90aGluZyB0byBhdHRhY2guIERpZCB5b3UgZm9yZ2V0IHRvICcgK1xuICAgICAgICAgICdhZGQgYW4gb24qIGhhbmRsZXIgKG9uV3JpdGUsIG9uRGVjaXNpb24sIG9uU3ViZmxvd0VudHJ5LCAuLi4pPyAnICtcbiAgICAgICAgICAnTm90ZTogb25seSBPV04gcHJvcGVydGllcyBjb3VudDsgbWV0aG9kcyBvbiB0aGUgcHJvdG90eXBlIGNoYWluICcgK1xuICAgICAgICAgICdhcmUgaWdub3JlZCBvbiBwdXJwb3NlLicsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBEZXRhY2ggZXZlcnkgc2NvcGUgcmVjb3JkZXIgd2l0aCB0aGlzIGlkIOKAlCBib3RoIGRlbGl2ZXJ5IHRpZXJzLiAqL1xuICBkZXRhY2hTY29wZShpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zY29wZVJlY29yZGVycyA9IHRoaXMuc2NvcGVSZWNvcmRlcnMuZmlsdGVyKChyKSA9PiByLmlkICE9PSBpZCk7XG4gICAgdGhpcy5kZWZlcnJlZFRpZXI/LnJlbW92ZUZyb21MaXN0cyhpZCwgeyBzY29wZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIC8qKiBEZXRhY2ggZXZlcnkgZmxvdyByZWNvcmRlciB3aXRoIHRoaXMgaWQg4oCUIGJvdGggZGVsaXZlcnkgdGllcnMuICovXG4gIGRldGFjaEZsb3coaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZmxvd1JlY29yZGVycyA9IHRoaXMuZmxvd1JlY29yZGVycy5maWx0ZXIoKHIpID0+IHIuaWQgIT09IGlkKTtcbiAgICB0aGlzLmRlZmVycmVkVGllcj8ucmVtb3ZlRnJvbUxpc3RzKGlkLCB7IGZsb3c6IHRydWUgfSk7XG4gIH1cblxuICAvKiogQSBkZWZlbnNpdmUgY29weSBvZiB0aGUgc2NvcGUgbGlzdCAoYm90aCB0aWVycykuICovXG4gIHNjb3BlTGlzdCgpOiBTY29wZVJlY29yZGVyW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5zY29wZVJlY29yZGVycywgLi4uKHRoaXMuZGVmZXJyZWRUaWVyPy5zY29wZUxpc3RSZWNvcmRlcnMoKSA/PyBbXSldO1xuICB9XG5cbiAgLyoqIEEgZGVmZW5zaXZlIGNvcHkgb2YgdGhlIGZsb3cgbGlzdCAoYm90aCB0aWVycykuICovXG4gIGZsb3dMaXN0KCk6IEZsb3dSZWNvcmRlcltdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuZmxvd1JlY29yZGVycywgLi4uKHRoaXMuZGVmZXJyZWRUaWVyPy5mbG93TGlzdFJlY29yZGVycygpID8/IFtdKV07XG4gIH1cblxuICAvKipcbiAgICogQSBmcmVzaCBgcnVuKClgIGNsZWFycyBldmVyeSBhdHRhY2hlZCByZWNvcmRlciAoYGNsZWFyKClgKSwgc28gc3RhdGUgZG9lc1xuICAgKiBub3QgYWNjdW11bGF0ZSBhY3Jvc3MgcnVucy4gVGhlIG5hcnJhdGl2ZSByZWNvcmRlciBpcyBub3QgY2xlYXJlZDogZWFjaFxuICAgKiBmcmVzaCBsZWcgYnVpbGRzIGEgbmV3IG9uZSAoe0BsaW5rIHN0YXJ0TGVnfSkuXG4gICAqL1xuICBjbGVhckZvclJ1bigpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHIgb2YgdGhpcy5mbG93UmVjb3JkZXJzKSB7XG4gICAgICByLmNsZWFyPy4oKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCByIG9mIHRoaXMuc2NvcGVSZWNvcmRlcnMpIHtcbiAgICAgIHIuY2xlYXI/LigpO1xuICAgIH1cbiAgICB0aGlzLmRlZmVycmVkVGllcj8uY2xlYXJSZWNvcmRlcnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVuIGEgbGVnOiBhIGZyZXNoIG5hcnJhdGl2ZSByZWNvcmRlciB3aGVuIHRoZSBuYXJyYXRpdmUgaXMgb24sIG5vbmUgd2hlblxuICAgKiBpdCBpcyBvZmYg4oCUIG9yLCBvbiBhIHJlc3VtZSAoYHByZXNlcnZlYCksIHRoZSBleGlzdGluZyBvbmUsIHNvIHRoZVxuICAgKiBuYXJyYXRpdmUgYWNjdW11bGF0ZXMgYWNyb3NzIHRoZSBwYXVzZS4gQSBmcmVzaCBleGVjdXRvciBoYXMgbm8gcmVjb3JkZXJcbiAgICogdG8gcHJlc2VydmUgYW5kIHN0YXJ0cyBvbmUgZm9yIHRoZSByZXN1bWVkIGxlZyBvbmx5LlxuICAgKiBSZXR1cm5zIHRoZSBsZWcncyBuYXJyYXRpdmUgZmxhZy5cbiAgICovXG4gIHN0YXJ0TGVnKGNoYXJ0TmFycmF0aXZlOiBib29sZWFuLCBwcmVzZXJ2ZTogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG5hcnJhdGl2ZUZsYWcgPSB0aGlzLm5hcnJhdGl2ZUVuYWJsZWQgfHwgY2hhcnROYXJyYXRpdmU7XG4gICAgaWYgKCFwcmVzZXJ2ZSB8fCAhdGhpcy5jb21iaW5lZFJlY29yZGVyKSB7XG4gICAgICB0aGlzLmNvbWJpbmVkUmVjb3JkZXIgPSBuYXJyYXRpdmVGbGFnID8gbmV3IENvbWJpbmVkTmFycmF0aXZlUmVjb3JkZXIodGhpcy5uYXJyYXRpdmVPcHRpb25zKSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIG5hcnJhdGl2ZUZsYWc7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGxlZydzIHNjb3BlIGZhY3Rvcnk6IHRoZSBiYXNlIGZhY3RvcnksIHRoZW4gZXZlcnkgc2NvcGUgbW9kaWZpZXIgaW4gT05FXG4gICAqIGZsYXQgcGFzcyDigJQgdGhlIG5hcnJhdGl2ZSByZWNvcmRlciwgdGhlIHVzZXIncyBzY29wZSByZWNvcmRlcnMsIHRoZVxuICAgKiBkZWZlcnJlZCB0aWVyJ3Mgc2NvcGUgdGFwLCB0aGUgcmVkYWN0aW9uIHBvbGljeS5cbiAgICpcbiAgICogVGhlIG1hcmtlZC1rZXlzIHNldCBpcyBBTFdBWVMgd2lyZWQgKGEgc3RhZ2UgY2FuIGNhbGxcbiAgICogYHNldFZhbHVlKGtleSwgdmFsLCB0cnVlKWAgZm9yIHBlci1jYWxsIHJlZGFjdGlvbiB3aXRob3V0IGFueSBwb2xpY3kpLlxuICAgKi9cbiAgY29tcG9zZVNjb3BlRmFjdG9yeTxUU2NvcGU+KFxuICAgIGJhc2VGYWN0b3J5OiBTY29wZUZhY3Rvcnk8VFNjb3BlPixcbiAgICByZWRhY3Rpb25Qb2xpY3k6IFJlZGFjdGlvblBvbGljeSB8IHVuZGVmaW5lZCxcbiAgICBzaGFyZWRSZWRhY3RlZEtleXM6IFNldDxzdHJpbmc+LFxuICAgIGNvcnJlbGF0aW9uPzogUnVuQ29ycmVsYXRpb24sXG4gICk6IFNjb3BlRmFjdG9yeTxUU2NvcGU+IHtcbiAgICBjb25zdCBtb2RpZmllcnM6IFNjb3BlTW9kaWZpZXJbXSA9IFtdO1xuXG4gICAgLy8gMS4gTmFycmF0aXZlIHJlY29yZGVyIChpZiBlbmFibGVkKVxuICAgIGlmICh0aGlzLmNvbWJpbmVkUmVjb3JkZXIpIHtcbiAgICAgIGNvbnN0IHJlY29yZGVyID0gdGhpcy5jb21iaW5lZFJlY29yZGVyO1xuICAgICAgbW9kaWZpZXJzLnB1c2goKHRhcmdldCkgPT4ge1xuICAgICAgICB0YXJnZXQuYXR0YWNoU2NvcGVSZWNvcmRlcj8uKHJlY29yZGVyKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIDIuIFVzZXItcHJvdmlkZWQgc2NvcGUgcmVjb3JkZXJzXG4gICAgaWYgKHRoaXMuc2NvcGVSZWNvcmRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgcmVjb3JkZXJzID0gdGhpcy5zY29wZVJlY29yZGVycztcbiAgICAgIG1vZGlmaWVycy5wdXNoKCh0YXJnZXQpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCByIG9mIHJlY29yZGVycykgdGFyZ2V0LmF0dGFjaFNjb3BlUmVjb3JkZXI/LihyKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIDJiLiBEZWZlcnJlZC1vYnNlcnZlciBzY29wZSB0YXAgKFJGQy0wMDEgQmxvY2sgNykg4oCUIGEgc3ludGhldGljXG4gICAgLy8gcmVjb3JkZXIgd2hvc2UgaG9va3MgQ0FQVFVSRSBpbnRvIHRoZSBib3VuZGVkIHF1ZXVlIGluc3RlYWQgb2YgZG9pbmdcbiAgICAvLyBvYnNlcnZlciB3b3JrLiBJdCByaWRlcyB0aGUgc2FtZSBwZXItc3RhZ2UgcmVjb3JkZXIgbGlzdCBhcyBpbmxpbmVcbiAgICAvLyByZWNvcmRlcnMsIHNvIGl0IHJlY2VpdmVzIGV4YWN0bHkgdGhlIHBvc3QtcmVkYWN0aW9uIGV2ZW50cyB0aGV5IGRvLlxuICAgIC8vIEFic2VudCAoemVybyB3b3JrLCBpZGVudGljYWwgbGlzdCkgd2hlbiBub2JvZHkgb3B0ZWQgaW50byBkZWZlcnJhbC5cbiAgICBjb25zdCBzY29wZVRhcCA9IHRoaXMuZGVmZXJyZWRUaWVyPy5idWlsZFNjb3BlVGFwKCk7XG4gICAgaWYgKHNjb3BlVGFwKSB7XG4gICAgICBtb2RpZmllcnMucHVzaCgodGFyZ2V0KSA9PiB7XG4gICAgICAgIHRhcmdldC5hdHRhY2hTY29wZVJlY29yZGVyPy4oc2NvcGVUYXApO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gMy4gUmVkYWN0aW9uIHBvbGljeSAoY29uZGl0aW9uYWwg4oCUIG9ubHkgd2hlbiBwb2xpY3kgaXMgc2V0KS4gQVxuICAgIC8vIGBTY29wZUZhY2FkZWAgYWxyZWFkeSByZWFkcyB0aGUgcnVuJ3MgcnVsZSB0aHJvdWdoIGl0cyBjb250ZXh0ICh0aGVcbiAgICAvLyBydWxlIGlzIGluc3RhbGxlZCBvbiB0aGUgcnVudGltZSByb290KTsgdGhpcyBjYWxsIHN1cHBsaWVzIGl0IHRvXG4gICAgLy8gZXhwbGljaXRseSByZWdpc3RlcmVkIGN1c3RvbSBwb3J0cywgYW5kIG9uIGEgZmFjYWRlIGl0XG4gICAgLy8gcmUtc3RhdGVzIHRoZSBleGVjdXRvcidzIHBvbGljeSBvbiB0aGUgc2hhcmVkIHJ1bGUgKGEgbm8tb3ApLlxuICAgIGlmIChyZWRhY3Rpb25Qb2xpY3kpIHtcbiAgICAgIGNvbnN0IHBvbGljeSA9IHJlZGFjdGlvblBvbGljeTtcbiAgICAgIG1vZGlmaWVycy5wdXNoKCh0YXJnZXQpID0+IHtcbiAgICAgICAgdGFyZ2V0LnVzZVJlZGFjdGlvblBvbGljeT8uKHBvbGljeSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyA0LiBUaGUgbGVnJ3MgY29ycmVsYXRpb24gKDEwLjEpIOKAlCBvbmUgZnJvemVuIG9iamVjdCBwZXIgbGVnLCBzbyBhIGZhY3RvcnkgY29tcG9zZWQgZm9yIG9uZSBsZWcgbmV2ZXJcbiAgICAvLyBzdGFtcHMgYW5vdGhlcidzLiBJbnN0YWxsZWQgZXZlbiB3aGVuIGFic2VudDogYSB0YXJnZXQgYSBjdXN0b20gZmFjdG9yeSByZS11c2VzIGFjcm9zcyBydW5zIGlzIENMRUFSRUQsXG4gICAgLy8gbmV2ZXIgbGVmdCBob2xkaW5nIGFuIGVhcmxpZXIgcnVuJ3MuIEFic2VudCDihpIgZXZlbnRzIGJ5dGUtaWRlbnRpY2FsLlxuICAgIG1vZGlmaWVycy5wdXNoKCh0YXJnZXQpID0+IHtcbiAgICAgIHRhcmdldC51c2VDb3JyZWxhdGlvbj8uKGNvcnJlbGF0aW9uKTtcbiAgICB9KTtcblxuICAgIHJldHVybiAoKGN0eDogYW55LCBzdGFnZU5hbWU6IHN0cmluZywgcmVhZE9ubHk/OiB1bmtub3duLCBlbnZBcmc/OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHNjb3BlID0gYmFzZUZhY3RvcnkoY3R4LCBzdGFnZU5hbWUsIHJlYWRPbmx5LCBlbnZBcmcpO1xuICAgICAgY29uc3QgeyB0YXJnZXQgfSA9IHJlcXVpcmVTY29wZVJ1bnRpbWUoc2NvcGUpO1xuICAgICAgaWYgKGN0eC5jYXB0dXJlICYmICFoYXNOYXRpdmVDYXB0dXJlVGFyZ2V0KHRhcmdldCwgY3R4KSkgY3R4LmNhcHR1cmUubGltaXQoJ2N1c3RvbS1zY29wZScpO1xuICAgICAgaWYgKGN0eC5yZWFkU291cmNlcz8ub2JzZXJ2aW5nICYmICFoYXNOYXRpdmVDYXB0dXJlVGFyZ2V0KHRhcmdldCwgY3R4KSkgY3R4LnJlYWRTb3VyY2VzLmxpbWl0KCdjdXN0b20tc2NvcGUnKTtcbiAgICAgIC8vIEFsd2F5cyB3aXJlIHNoYXJlZCByZWRhY3Rpb24gc3RhdGVcbiAgICAgIHRhcmdldC51c2VTaGFyZWRSZWRhY3RlZEtleXM/LihzaGFyZWRSZWRhY3RlZEtleXMpO1xuICAgICAgLy8gQXBwbHkgb3B0aW9uYWwgbW9kaWZpZXJzXG4gICAgICBmb3IgKGNvbnN0IG1vZCBvZiBtb2RpZmllcnMpIG1vZCh0YXJnZXQpO1xuICAgICAgcmV0dXJuIHNjb3BlO1xuICAgIH0pIGFzIFNjb3BlRmFjdG9yeTxUU2NvcGU+O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBsZWcncyBmbG93IHJlY29yZGVyczogdGhlIG5hcnJhdGl2ZSByZWNvcmRlciAod2hlbiBvbiksIHRoZSB1c2VyJ3NcbiAgICogZmxvdyByZWNvcmRlcnMsIHRoZW4gdGhlIGRlZmVycmVkIHRpZXIncyBmbG93IHRhcCAoUkZDLTAwMSBCbG9jayA3KSDigJRcbiAgICogYXBwZW5kZWQgbGlrZSBhbnkgb3RoZXIgZmxvdyByZWNvcmRlciwgc28gdGhlIGRpc3BhdGNoZXIgbmVlZHMgbm8gdGllclxuICAgKiBsb2dpYyBvZiBpdHMgb3duLiBgdW5kZWZpbmVkYCB3aGVuIHRoZXJlIGFyZSBub25lLlxuICAgKi9cbiAgZmxvd1JlY29yZGVyc0xpc3QoKTogRmxvd1JlY29yZGVyW10gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHJlY29yZGVyczogRmxvd1JlY29yZGVyW10gPSBbXTtcbiAgICBpZiAodGhpcy5jb21iaW5lZFJlY29yZGVyKSB7XG4gICAgICByZWNvcmRlcnMucHVzaCh0aGlzLmNvbWJpbmVkUmVjb3JkZXIpO1xuICAgIH1cbiAgICByZWNvcmRlcnMucHVzaCguLi50aGlzLmZsb3dSZWNvcmRlcnMpO1xuICAgIGNvbnN0IGZsb3dUYXAgPSB0aGlzLmRlZmVycmVkVGllcj8uYnVpbGRGbG93VGFwKCk7XG4gICAgaWYgKGZsb3dUYXApIHJlY29yZGVycy5wdXNoKGZsb3dUYXApO1xuICAgIHJldHVybiByZWNvcmRlcnMubGVuZ3RoID4gMCA/IHJlY29yZGVycyA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBUaGUgaW5saW5lIGZsb3cgbGlzdGVuZXJzIG9mIGFuIGV4ZWN1dG9yLW1hZGUgZXZlbnQgKGBvblJlc3VtZWApOiB0aGUgbmFycmF0aXZlIHJlY29yZGVyIGZpcnN0LiAqL1xuICBpbmxpbmVGbG93TGlzdGVuZXJzKCk6IEZsb3dSZWNvcmRlcltdIHtcbiAgICByZXR1cm4gdGhpcy5jb21iaW5lZFJlY29yZGVyID8gW3RoaXMuY29tYmluZWRSZWNvcmRlciwgLi4udGhpcy5mbG93UmVjb3JkZXJzXSA6IHRoaXMuZmxvd1JlY29yZGVycztcbiAgfVxuXG4gIC8qKlxuICAgKiBMYXppbHkgY3JlYXRlIHRoZSBleGVjdXRvcidzIE9ORSBkZWZlcnJlZC1vYnNlcnZlciB0aWVyIChvbmUgbWVyZ2VkXG4gICAqIHF1ZXVlLCB0b3RhbCBldmVudCBvcmRlciBhY3Jvc3MgYWxsIHRocmVlIGNoYW5uZWxzKS4gVGhlIEZJUlNUIGRlZmVycmVkXG4gICAqIGF0dGFjaCdzIG9wdGlvbnMgY29uZmlndXJlIHRoZSBkaXNwYXRjaGVyOyBsYXRlciBkaWZmZXJpbmcgb3B0aW9ucyBhcmVcbiAgICogZGV2LXdhcm5lZCBhbmQgaWdub3JlZCAoc2VlIGBBdHRhY2hSZWNvcmRlck9wdGlvbnNgKS5cbiAgICovXG4gIHByaXZhdGUgZW5zdXJlRGVmZXJyZWRUaWVyKG9wdGlvbnM/OiBBdHRhY2hSZWNvcmRlck9wdGlvbnMpOiBEZWZlcnJlZE9ic2VydmVyVGllciB7XG4gICAgaWYgKCF0aGlzLmRlZmVycmVkVGllcikgdGhpcy5kZWZlcnJlZFRpZXIgPSBuZXcgRGVmZXJyZWRPYnNlcnZlclRpZXIob3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMuZGVmZXJyZWRUaWVyO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.persistCaptureHistory = void 0;
4
+ const absentEntries_js_1 = require("../capture/absentEntries.js");
5
+ const historyData_js_1 = require("../capture/historyData.js");
6
+ const historyTarget_js_1 = require("../capture/historyTarget.js");
7
+ const historyTypes_js_1 = require("../capture/historyTypes.js");
8
+ /** Persist one terminal native root segment, without changing its memory-only engine observation. */
9
+ async function persistCaptureHistory(runtime, record, snapshot, lease) {
10
+ const options = record.captureOptions;
11
+ if (!options)
12
+ return;
13
+ // Packet 4 must digest and acknowledge the source envelope before sources can be durable.
14
+ if (runtime.readSources) {
15
+ record.captureResult({ status: 'unknown', reason: 'source-history-not-included' });
16
+ return;
17
+ }
18
+ if (lease.pending) {
19
+ record.captureResult({ status: 'unknown', reason: 'acknowledgement-pending' });
20
+ return;
21
+ }
22
+ lease.pending = true;
23
+ const controller = new AbortController();
24
+ let active = true;
25
+ let timer;
26
+ const unknown = (reason) => record.captureResult({ status: 'unknown', reason });
27
+ const work = async () => {
28
+ try {
29
+ if (!runtime.capture || record.stats().failed > 0)
30
+ return unknown('prior-delivery-failed');
31
+ const view = snapshot();
32
+ const note = view.capture;
33
+ if (!note || note.boundary.status === 'running')
34
+ return unknown('capture-unavailable');
35
+ const payload = (0, absentEntries_js_1.copyCaptureEvidence)(record.serve({
36
+ capture: note,
37
+ executionTree: view.executionTree,
38
+ ...(view.recorders && { recorders: view.recorders }),
39
+ }), options.maxBytes ?? 1024 * 1024);
40
+ const basis = (0, historyData_js_1.copyHistoryData)({
41
+ commitLog: view.commitLog,
42
+ ...(view.initialState !== undefined && { initialState: record.captureInitialState(view.initialState) }),
43
+ }, options.maxBytes ?? 1024 * 1024);
44
+ const target = (0, historyTarget_js_1.copyHistoryTarget)({
45
+ version: 1,
46
+ evidenceId: note.runId,
47
+ runId: note.runId,
48
+ digest: await (0, historyData_js_1.historyDigest)({ evidence: payload, record: basis }),
49
+ logAddress: note.logAddress,
50
+ commits: note.commits,
51
+ });
52
+ if (!active)
53
+ return;
54
+ if (!target)
55
+ return unknown('capture-unavailable');
56
+ const evidence = (0, historyData_js_1.copyHistoryData)(record.serve({ target, ...payload }), options.maxBytes ?? 1024 * 1024);
57
+ // A redaction rule may mask protocol fields too. Such a record is not eligible for acknowledgement.
58
+ if (!(0, absentEntries_js_1.validateAbsentEntries)(evidence) ||
59
+ !(0, historyTarget_js_1.copyHistoryTarget)(evidence.target) ||
60
+ JSON.stringify((0, historyTarget_js_1.copyHistoryTarget)(evidence.target)) !== JSON.stringify(target))
61
+ return unknown('evidence-refused');
62
+ runtime.noteRecord(historyTypes_js_1.CAPTURE_HISTORY_NOTE, evidence);
63
+ const delivered = await record.flush(options.timeoutMs ?? 10_000);
64
+ if (!active)
65
+ return;
66
+ if (!delivered.done || record.pendingCaptureDeliveries || record.stats().failed > 0)
67
+ return unknown('evidence-delivery-unknown');
68
+ const receipt = (0, historyTarget_js_1.copyHistoryReceipt)(await options.acknowledge(target, { signal: controller.signal }), target);
69
+ if (!active)
70
+ return;
71
+ if (!receipt)
72
+ return unknown('acknowledgement-refused');
73
+ const servedReceipt = record.serve({ ...receipt });
74
+ if (!(0, historyTarget_js_1.copyHistoryReceipt)(servedReceipt, target))
75
+ return unknown('acknowledgement-refused');
76
+ runtime.noteRecord(historyTypes_js_1.CAPTURE_RECEIPT_NOTE, servedReceipt);
77
+ const persisted = await record.flush(options.timeoutMs ?? 10_000);
78
+ if (!active)
79
+ return;
80
+ if (!persisted.done || record.pendingCaptureDeliveries || record.stats().failed > 0)
81
+ return unknown('receipt-delivery-unknown');
82
+ record.captureResult({ status: 'acknowledged' });
83
+ }
84
+ catch (error) {
85
+ if (active)
86
+ unknown(error instanceof historyData_js_1.HistoryDataError && error.code === 'too-large' ? 'evidence-too-large' : 'evidence-refused');
87
+ }
88
+ };
89
+ try {
90
+ await Promise.race([
91
+ work().finally(() => {
92
+ lease.pending = false;
93
+ }),
94
+ new Promise((resolve) => {
95
+ timer = setTimeout(() => {
96
+ active = false;
97
+ controller.abort();
98
+ unknown('acknowledgement-timeout');
99
+ resolve();
100
+ }, options.timeoutMs ?? 10_000);
101
+ }),
102
+ ]);
103
+ }
104
+ finally {
105
+ active = false;
106
+ clearTimeout(timer);
107
+ }
108
+ }
109
+ exports.persistCaptureHistory = persistCaptureHistory;
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FwdHVyZUhpc3RvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3J1bm5lci9jYXB0dXJlSGlzdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxrRUFBeUY7QUFDekYsOERBQTZGO0FBQzdGLGtFQUFvRjtBQUNwRixnRUFBd0Y7QUFTeEYscUdBQXFHO0FBQzlGLEtBQUssVUFBVSxxQkFBcUIsQ0FDekMsT0FBeUIsRUFDekIsTUFBaUIsRUFDakIsUUFBK0IsRUFDL0IsS0FBMEI7SUFFMUIsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQztJQUN0QyxJQUFJLENBQUMsT0FBTztRQUFFLE9BQU87SUFDckIsMEZBQTBGO0lBQzFGLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxhQUFhLENBQUMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSw2QkFBNkIsRUFBRSxDQUFDLENBQUM7UUFDbkYsT0FBTztJQUNULENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsQixNQUFNLENBQUMsYUFBYSxDQUFDLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUseUJBQXlCLEVBQUUsQ0FBQyxDQUFDO1FBQy9FLE9BQU87SUFDVCxDQUFDO0lBQ0QsS0FBSyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDckIsTUFBTSxVQUFVLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQztJQUN6QyxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFDbEIsSUFBSSxLQUFnRCxDQUFDO0lBQ3JELE1BQU0sT0FBTyxHQUFHLENBQUMsTUFBYyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3hGLE1BQU0sSUFBSSxHQUFHLEtB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QUssWUFBWSxpQ0FBZ0IsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUM1RyxDQUFDO1FBQ04sQ0FBQztJQUNILENBQUMsQ0FBQztJQUNGLElBQUksQ0FBQztRQUNILE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQztZQUNqQixJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFO2dCQUNsQixLQUFLLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUN4QixDQUFDLENBQUM7WUFDRixJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUM1QixLQUFLLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDdEIsTUFBTSxHQUFHLEtBQUssQ0FBQztvQkFDZixVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7b0JBQ25CLE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO29CQUNuQyxPQUFPLEVBQUUsQ0FBQztnQkFDWixDQUFDLEVBQUUsT0FBTyxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsQ0FBQztZQUNsQyxDQUFDLENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDO1lBQVMsQ0FBQztRQUNULE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDZixZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEIsQ0FBQztBQUNILENBQUM7QUF0R0Qsc0RBc0dDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBNZXRhIH0gZnJvbSAnZm9vdHRyYWNlJztcblxuaW1wb3J0IHsgY29weUNhcHR1cmVFdmlkZW5jZSwgdmFsaWRhdGVBYnNlbnRFbnRyaWVzIH0gZnJvbSAnLi4vY2FwdHVyZS9hYnNlbnRFbnRyaWVzLmpzJztcbmltcG9ydCB7IGNvcHlIaXN0b3J5RGF0YSwgSGlzdG9yeURhdGFFcnJvciwgaGlzdG9yeURpZ2VzdCB9IGZyb20gJy4uL2NhcHR1cmUvaGlzdG9yeURhdGEuanMnO1xuaW1wb3J0IHsgY29weUhpc3RvcnlSZWNlaXB0LCBjb3B5SGlzdG9yeVRhcmdldCB9IGZyb20gJy4uL2NhcHR1cmUvaGlzdG9yeVRhcmdldC5qcyc7XG5pbXBvcnQgeyBDQVBUVVJFX0hJU1RPUllfTk9URSwgQ0FQVFVSRV9SRUNFSVBUX05PVEUgfSBmcm9tICcuLi9jYXB0dXJlL2hpc3RvcnlUeXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IEV4ZWN1dGlvblJ1bnRpbWUsIFJ1bnRpbWVTbmFwc2hvdCB9IGZyb20gJy4vRXhlY3V0aW9uUnVudGltZS5qcyc7XG5pbXBvcnQgdHlwZSB7IFJ1blJlY29yZCB9IGZyb20gJy4vcmVjb3JkU2luay5qcyc7XG5cbi8qKiBAaW50ZXJuYWwgS2VlcHMgYSB0aW1lZC1vdXQgb3BlcmF0aW9uIGxlYXNlZCB1bnRpbCBpdHMgYWN0dWFsIHNldHRsZW1lbnQuICovXG5leHBvcnQgaW50ZXJmYWNlIENhcHR1cmVIaXN0b3J5TGVhc2Uge1xuICBwZW5kaW5nOiBib29sZWFuO1xufVxuXG4vKiogUGVyc2lzdCBvbmUgdGVybWluYWwgbmF0aXZlIHJvb3Qgc2VnbWVudCwgd2l0aG91dCBjaGFuZ2luZyBpdHMgbWVtb3J5LW9ubHkgZW5naW5lIG9ic2VydmF0aW9uLiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBlcnNpc3RDYXB0dXJlSGlzdG9yeShcbiAgcnVudGltZTogRXhlY3V0aW9uUnVudGltZSxcbiAgcmVjb3JkOiBSdW5SZWNvcmQsXG4gIHNuYXBzaG90OiAoKSA9PiBSdW50aW1lU25hcHNob3QsXG4gIGxlYXNlOiBDYXB0dXJlSGlzdG9yeUxlYXNlLFxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IG9wdGlvbnMgPSByZWNvcmQuY2FwdHVyZU9wdGlvbnM7XG4gIGlmICghb3B0aW9ucykgcmV0dXJuO1xuICAvLyBQYWNrZXQgNCBtdXN0IGRpZ2VzdCBhbmQgYWNrbm93bGVkZ2UgdGhlIHNvdXJjZSBlbnZlbG9wZSBiZWZvcmUgc291cmNlcyBjYW4gYmUgZHVyYWJsZS5cbiAgaWYgKHJ1bnRpbWUucmVhZFNvdXJjZXMpIHtcbiAgICByZWNvcmQuY2FwdHVyZVJlc3VsdCh7IHN0YXR1czogJ3Vua25vd24nLCByZWFzb246ICdzb3VyY2UtaGlzdG9yeS1ub3QtaW5jbHVkZWQnIH0pO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAobGVhc2UucGVuZGluZykge1xuICAgIHJlY29yZC5jYXB0dXJlUmVzdWx0KHsgc3RhdHVzOiAndW5rbm93bicsIHJlYXNvbjogJ2Fja25vd2xlZGdlbWVudC1wZW5kaW5nJyB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgbGVhc2UucGVuZGluZyA9IHRydWU7XG4gIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIGxldCBhY3RpdmUgPSB0cnVlO1xuICBsZXQgdGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkO1xuICBjb25zdCB1bmtub3duID0gKHJlYXNvbjogc3RyaW5nKSA9PiByZWNvcmQuY2FwdHVyZVJlc3VsdCh7IHN0YXR1czogJ3Vua25vd24nLCByZWFzb24gfSk7XG4gIGNvbnN0IHdvcmsgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmICghcnVudGltZS5jYXB0dXJlIHx8IHJlY29yZC5zdGF0cygpLmZhaWxlZCA+IDApIHJldHVybiB1bmtub3duKCdwcmlvci1kZWxpdmVyeS1mYWlsZWQnKTtcbiAgICAgIGNvbnN0IHZpZXcgPSBzbmFwc2hvdCgpO1xuICAgICAgY29uc3Qgbm90ZSA9IHZpZXcuY2FwdHVyZTtcbiAgICAgIGlmICghbm90ZSB8fCBub3RlLmJvdW5kYXJ5LnN0YXR1cyA9PT0gJ3J1bm5pbmcnKSByZXR1cm4gdW5rbm93bignY2FwdHVyZS11bmF2YWlsYWJsZScpO1xuICAgICAgY29uc3QgcGF5bG9hZCA9IGNvcHlDYXB0dXJlRXZpZGVuY2UoXG4gICAgICAgIHJlY29yZC5zZXJ2ZSh7XG4gICAgICAgICAgY2FwdHVyZTogbm90ZSxcbiAgICAgICAgICBleGVjdXRpb25UcmVlOiB2aWV3LmV4ZWN1dGlvblRyZWUsXG4gICAgICAgICAgLi4uKHZpZXcucmVjb3JkZXJzICYmIHsgcmVjb3JkZXJzOiB2aWV3LnJlY29yZGVycyB9KSxcbiAgICAgICAgfSksXG4gICAgICAgIG9wdGlvbnMubWF4Qnl0ZXMgPz8gMTAyNCAqIDEwMjQsXG4gICAgICApIGFzIE1ldGE7XG4gICAgICBjb25zdCBiYXNpcyA9IGNvcHlIaXN0b3J5RGF0YShcbiAgICAgICAge1xuICAgICAgICAgIGNvbW1pdExvZzogdmlldy5jb21taXRMb2csXG4gICAgICAgICAgLi4uKHZpZXcuaW5pdGlhbFN0YXRlICE9PSB1bmRlZmluZWQgJiYgeyBpbml0aWFsU3RhdGU6IHJlY29yZC5jYXB0dXJlSW5pdGlhbFN0YXRlKHZpZXcuaW5pdGlhbFN0YXRlKSB9KSxcbiAgICAgICAgfSxcbiAgICAgICAgb3B0aW9ucy5tYXhCeXRlcyA/PyAxMDI0ICogMTAyNCxcbiAgICAgICk7XG4gICAgICBjb25zdCB0YXJnZXQgPSBjb3B5SGlzdG9yeVRhcmdldCh7XG4gICAgICAgIHZlcnNpb246IDEsXG4gICAgICAgIGV2aWRlbmNlSWQ6IG5vdGUucnVuSWQsXG4gICAgICAgIHJ1bklkOiBub3RlLnJ1bklkLFxuICAgICAgICBkaWdlc3Q6IGF3YWl0IGhpc3RvcnlEaWdlc3QoeyBldmlkZW5jZTogcGF5bG9hZCwgcmVjb3JkOiBiYXNpcyB9KSxcbiAgICAgICAgbG9nQWRkcmVzczogbm90ZS5sb2dBZGRyZXNzLFxuICAgICAgICBjb21taXRzOiBub3RlLmNvbW1pdHMsXG4gICAgICB9KTtcbiAgICAgIGlmICghYWN0aXZlKSByZXR1cm47XG4gICAgICBpZiAoIXRhcmdldCkgcmV0dXJuIHVua25vd24oJ2NhcHR1cmUtdW5hdmFpbGFibGUnKTtcbiAgICAgIGNvbnN0IGV2aWRlbmNlID0gY29weUhpc3RvcnlEYXRhKHJlY29yZC5zZXJ2ZSh7IHRhcmdldCwgLi4ucGF5bG9hZCB9KSwgb3B0aW9ucy5tYXhCeXRlcyA/PyAxMDI0ICogMTAyNCkgYXMgTWV0YTtcbiAgICAgIC8vIEEgcmVkYWN0aW9uIHJ1bGUgbWF5IG1hc2sgcHJvdG9jb2wgZmllbGRzIHRvby4gU3VjaCBhIHJlY29yZCBpcyBub3QgZWxpZ2libGUgZm9yIGFja25vd2xlZGdlbWVudC5cbiAgICAgIGlmIChcbiAgICAgICAgIXZhbGlkYXRlQWJzZW50RW50cmllcyhldmlkZW5jZSkgfHxcbiAgICAgICAgIWNvcHlIaXN0b3J5VGFyZ2V0KGV2aWRlbmNlLnRhcmdldCkgfHxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoY29weUhpc3RvcnlUYXJnZXQoZXZpZGVuY2UudGFyZ2V0KSkgIT09IEpTT04uc3RyaW5naWZ5KHRhcmdldClcbiAgICAgIClcbiAgICAgICAgcmV0dXJuIHVua25vd24oJ2V2aWRlbmNlLXJlZnVzZWQnKTtcbiAgICAgIHJ1bnRpbWUubm90ZVJlY29yZChDQVBUVVJFX0hJU1RPUllfTk9URSwgZXZpZGVuY2UpO1xuICAgICAgY29uc3QgZGVsaXZlcmVkID0gYXdhaXQgcmVjb3JkLmZsdXNoKG9wdGlvbnMudGltZW91dE1zID8/IDEwXzAwMCk7XG4gICAgICBpZiAoIWFjdGl2ZSkgcmV0dXJuO1xuICAgICAgaWYgKCFkZWxpdmVyZWQuZG9uZSB8fCByZWNvcmQucGVuZGluZ0NhcHR1cmVEZWxpdmVyaWVzIHx8IHJlY29yZC5zdGF0cygpLmZhaWxlZCA+IDApXG4gICAgICAgIHJldHVybiB1bmtub3duKCdldmlkZW5jZS1kZWxpdmVyeS11bmtub3duJyk7XG4gICAgICBjb25zdCByZWNlaXB0ID0gY29weUhpc3RvcnlSZWNlaXB0KGF3YWl0IG9wdGlvbnMuYWNrbm93bGVkZ2UodGFyZ2V0LCB7IHNpZ25hbDogY29udHJvbGxlci5zaWduYWwgfSksIHRhcmdldCk7XG4gICAgICBpZiAoIWFjdGl2ZSkgcmV0dXJuO1xuICAgICAgaWYgKCFyZWNlaXB0KSByZXR1cm4gdW5rbm93bignYWNrbm93bGVkZ2VtZW50LXJlZnVzZWQnKTtcbiAgICAgIGNvbnN0IHNlcnZlZFJlY2VpcHQgPSByZWNvcmQuc2VydmUoeyAuLi5yZWNlaXB0IH0pO1xuICAgICAgaWYgKCFjb3B5SGlzdG9yeVJlY2VpcHQoc2VydmVkUmVjZWlwdCwgdGFyZ2V0KSkgcmV0dXJuIHVua25vd24oJ2Fja25vd2xlZGdlbWVudC1yZWZ1c2VkJyk7XG4gICAgICBydW50aW1lLm5vdGVSZWNvcmQoQ0FQVFVSRV9SRUNFSVBUX05PVEUsIHNlcnZlZFJlY2VpcHQpO1xuICAgICAgY29uc3QgcGVyc2lzdGVkID0gYXdhaXQgcmVjb3JkLmZsdXNoKG9wdGlvbnMudGltZW91dE1zID8/IDEwXzAwMCk7XG4gICAgICBpZiAoIWFjdGl2ZSkgcmV0dXJuO1xuICAgICAgaWYgKCFwZXJzaXN0ZWQuZG9uZSB8fCByZWNvcmQucGVuZGluZ0NhcHR1cmVEZWxpdmVyaWVzIHx8IHJlY29yZC5zdGF0cygpLmZhaWxlZCA+IDApXG4gICAgICAgIHJldHVybiB1bmtub3duKCdyZWNlaXB0LWRlbGl2ZXJ5LXVua25vd24nKTtcbiAgICAgIHJlY29yZC5jYXB0dXJlUmVzdWx0KHsgc3RhdHVzOiAnYWNrbm93bGVkZ2VkJyB9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGFjdGl2ZSlcbiAgICAgICAgdW5rbm93bihcbiAgICAgICAgICBlcnJvciBpbnN0YW5jZW9mIEhpc3RvcnlEYXRhRXJyb3IgJiYgZXJyb3IuY29kZSA9PT0gJ3Rvby1sYXJnZScgPyAnZXZpZGVuY2UtdG9vLWxhcmdlJyA6ICdldmlkZW5jZS1yZWZ1c2VkJyxcbiAgICAgICAgKTtcbiAgICB9XG4gIH07XG4gIHRyeSB7XG4gICAgYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgIHdvcmsoKS5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgbGVhc2UucGVuZGluZyA9IGZhbHNlO1xuICAgICAgfSksXG4gICAgICBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgIGNvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgICAgICB1bmtub3duKCdhY2tub3dsZWRnZW1lbnQtdGltZW91dCcpO1xuICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgfSwgb3B0aW9ucy50aW1lb3V0TXMgPz8gMTBfMDAwKTtcbiAgICAgIH0pLFxuICAgIF0pO1xuICB9IGZpbmFsbHkge1xuICAgIGFjdGl2ZSA9IGZhbHNlO1xuICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gIH1cbn1cbiJdfQ==
@@ -39,6 +39,7 @@
39
39
  */
40
40
  Object.defineProperty(exports, "__esModule", { value: true });
41
41
  exports.buildPauseCheckpoint = void 0;
42
+ const checkpointCapture_js_1 = require("../capture/checkpointCapture.js");
42
43
  const record_js_1 = require("../pause/record.js");
43
44
  /**
44
45
  * Build a fully DETACHED, lean checkpoint from a caught PauseSignal.
@@ -74,6 +75,7 @@ function buildPauseCheckpoint(signal, traverser, run) {
74
75
  const checkpoint = {
75
76
  // The format — read back by `pause/record.ts · decodeCheckpoint`.
76
77
  checkpointVersion: record_js_1.CHECKPOINT_VERSION,
78
+ ...(run.capture && { capture: (0, checkpointCapture_js_1.copyCheckpointCapture)({ ...run.capture, boundary: { status: 'paused' } }) }),
77
79
  sharedState: traverser.getRuntime().globalStore.getState(),
78
80
  pausedStageId: signal.stageId,
79
81
  // The paused EXECUTION (9.37.0) — a queued sibling raised on resume
@@ -145,4 +147,4 @@ function describeCheckpointCloneFailure(checkpoint, cause) {
145
147
  'are never part of a checkpoint and never cause this error. ' +
146
148
  'See docs/guides/execution-model.md ("Pause / resume — what a checkpoint captures").', { cause });
147
149
  }
148
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcnVubmVyL2NoZWNrcG9pbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUNHOzs7QUFHSCxrREFBd0Q7QUFZeEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMEJHO0FBQ0gsU0FBZ0Isb0JBQW9CLENBQ2xDLE1BQW1CLEVBQ25CLFNBQXVDLEVBQ3ZDLEdBQWM7SUFFZCw2RUFBNkU7SUFDN0UsbURBQW1EO0lBQ25ELE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsTUFBTSxVQUFVLEdBQUc7UUFDakIsa0VBQWtFO1FBQ2xFLGlCQUFpQixFQUFFLDhCQUFrQjtRQUNyQyxXQUFXLEVBQUUsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUU7UUFDMUQsYUFBYSxFQUFFLE1BQU0sQ0FBQyxPQUFPO1FBQzdCLG9FQUFvRTtRQUNwRSwyQ0FBMkM7UUFDM0MsR0FBRyxDQUFDLE1BQU0sQ0FBQyxlQUFlLElBQUksRUFBRSxlQUFlLEVBQUUsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzFFLCtGQUErRjtRQUMvRixHQUFHLENBQUMsTUFBTSxDQUFDLGNBQWMsS0FBSyxTQUFTLElBQUksRUFBRSxjQUFjLEVBQUUsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3JGLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVztRQUMvQixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7UUFDM0IsYUFBYSxFQUFFLE1BQU0sQ0FBQyxhQUFhO1FBQ25DLHVFQUF1RTtRQUN2RSwwRUFBMEU7UUFDMUUseUVBQXlFO1FBQ3pFLG9GQUFvRjtRQUNwRixjQUFjLEVBQUUsR0FBRyxDQUFDLGNBQWM7UUFDbEMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQztRQUNoRCw0RUFBNEU7UUFDNUUsMEVBQTBFO1FBQzFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsY0FBYyxJQUFJLEVBQUUsY0FBYyxFQUFFLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2RSxzRUFBc0U7UUFDdEUsZ0VBQWdFO1FBQ2hFLDBCQUEwQjtRQUMxQixHQUFHLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMvRSxxRUFBcUU7UUFDckUseUVBQXlFO1FBQ3pFLHdFQUF3RTtRQUN4RSx1RUFBdUU7UUFDdkUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3JELDBGQUEwRjtRQUMxRiwwRkFBMEY7UUFDMUYsR0FBRyxDQUFDLEdBQUcsQ0FBQyxjQUFjLElBQUksRUFBRSxjQUFjLEVBQUUsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2pFLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO0tBQ3JCLENBQUM7SUFDRixJQUFJLENBQUM7UUFDSCxPQUFPLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLCtEQUErRDtRQUMvRCxNQUFNLDhCQUE4QixDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMxRCxDQUFDO0FBQ0gsQ0FBQztBQWxERCxvREFrREM7QUFFRCw2REFBNkQ7QUFDN0QsU0FBUyxXQUFXLENBQUMsS0FBYztJQUNqQyxJQUFJLENBQUM7UUFDSCxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQVMsOEJBQThCLENBQUMsVUFBbUMsRUFBRSxLQUFjO0lBQ3pGLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO1NBQ3ZDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDMUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNuRSxPQUFPLElBQUksS0FBSyxDQUNkLHNGQUFzRjtRQUNwRix3QkFBd0IsTUFBTSwyREFBMkQ7UUFDekYsNEZBQTRGO1FBQzVGLDBGQUEwRjtRQUMxRiw2REFBNkQ7UUFDN0QscUZBQXFGLEVBQ3ZGLEVBQUUsS0FBSyxFQUFFLENBQ1YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGNoZWNrcG9pbnQg4oCUIHRoZSBwYXVzZSBjaGVja3BvaW50LCBidWlsdCBPTkNFIGF0IHRoZSBwYXVzZSAoRjkpLlxuICpcbiAqIGBidWlsZFBhdXNlQ2hlY2twb2ludGAgYXNzZW1ibGVzIHRoZSBjaGVja3BvaW50IGZyb20gYSBjYXVnaHQgYFBhdXNlU2lnbmFsYFxuICogYW5kIHRoZSBwYXVzZWQgcnVuLCBzdGFtcGVkIHdpdGggdGhlIGZvcm1hdCB0aGUgT05FIGNvZGVjIHJlYWRzIGJhY2tcbiAqIChgcGF1c2UvcmVjb3JkLnRzYCDCtyBgQ0hFQ0tQT0lOVF9WRVJTSU9OYCAvIGBkZWNvZGVDaGVja3BvaW50YCksIGFuZFxuICogZGV0YWNoZXMgaXQgd2l0aCBvbmUgYHN0cnVjdHVyZWRDbG9uZWAuXG4gKlxuICogTEVBTiAoZm9ybWF0IDIpLiBUaGUgY2hlY2twb2ludCBob2xkcyB3aGF0IGByZXN1bWUoKWAgcmVhZHMgYW5kIHRoZSBwYXVzZSdzXG4gKiBvd24gcmVjb3JkLCBub3RoaW5nIGVsc2U6XG4gKlxuICogICByZWFkIGJ5IHJlc3VtZSAgdGhlIGN1cnNvciAoYHBhdXNlZFN0YWdlSWRgLCBgc3ViZmxvd1BhdGhgLCBgcGF1c2VkQnlgKSxcbiAqICAgICAgICAgICAgICAgICAgIHRoZSBzdGF0ZSAoYHNoYXJlZFN0YXRlYCwgYW5kIGBzdWJmbG93U3RhdGVzYCDigJQgb25lIGNhcHR1cmVcbiAqICAgICAgICAgICAgICAgICAgIHBlciBzdWJmbG93IE9OIHRoZSBwYXVzZSBwYXRoKSwgdGhlIGNvdW50ZXJzXG4gKiAgICAgICAgICAgICAgICAgICAoYGV4ZWN1dGlvbkNvdW50YCwgYHZpc2l0Q291bnRzYCDigJQgb25lIGVudHJ5IHBlciBzdGFnZSBpZCksXG4gKiAgICAgICAgICAgICAgICAgICB0aGUgd2FpdGluZyBzaWJsaW5ncyAoYHBlbmRpbmdQYXVzZXNgKSwgdGhlIHJlZGFjdGlvbiBuYW1lc1xuICogICAgICAgICAgICAgICAgICAgKGByZWRhY3Rpb25NYXJrc2ApLCB0aGUgbGluayAoYHBhdXNlZEV4ZWN1dGlvbmApO1xuICogICB0aGUgcmVjb3JkICAgICAgYHBhdXNlRGF0YWAgKHRoZSBxdWVzdGlvbiksIGBpbnZva2VyU3RhZ2VJZGAsIGBwYXVzZWRBdGAuXG4gKlxuICogU28gaXRzIHNpemUgaXMgdGhlIHN0YXRlJ3MgYW5kIHRoZSBjaGFydCdzLCBuZXZlciB0aGUgcnVuJ3MgbGVuZ3RoLiBGb3JtYXQgMVxuICogYWxzbyBjYXJyaWVkIHRoZSB3aG9sZSBleGVjdXRpb24gdHJlZSBhbmQgdGhlIGZpbmlzaGVkIHN1YmZsb3dzJyByZXN1bHRzIOKAlFxuICogdGhlIHJ1bidzIHNlcnZlZCByZWNvcmQsIHdoaWNoIG5vIHJlc3VtZSByZWFkIGFuZCB3aGljaCBncmV3IHdpdGggZXZlcnlcbiAqIGZpbmlzaGVkIGl0ZXJhdGlvbiAoYGJlbmNoL2NoZWNrcG9pbnQtc2l6ZS50c2A6IDE5LjMgTUIgYWZ0ZXIgNjAgYWdlbnRcbiAqIHR1cm5zIHdob3NlIHJlc3VtYWJsZSBzdGF0ZSDigJQgcm9vdCBwbHVzIGNhcHR1cmVzIOKAlCBpcyAwLjEzIE1COyB0aGUgdHJlZVxuICogYWxvbmUgd2FzIDk3JSkuIFRoYXQgcmVjb3JkIGlzIGBnZXRTbmFwc2hvdCgpYCdzLiBQaW5uZWQ6XG4gKiB0ZXN0L2xpYi9wYXVzZS9jaGVja3BvaW50LXNpemUudGVzdC50cy5cbiAqXG4gKiBUSEUgTEFXIGhvbGRzOiB0aGUgY2hlY2twb2ludCBrZWVwcyBSRUFMIHZhbHVlcyDigJQgbm8gcmVkYWN0aW9uIHBvbGljeSBldmVyXG4gKiB0b3VjaGVzIGl0IChpdCBpcyB3aGF0IHRoZSByZXN1bWVkIHJ1biBjb21wdXRlcyBvbik7IHRoZSBtYXJrcyB0cmF2ZWwgYXNcbiAqIE5BTUVTIG9ubHkuXG4gKlxuICogVGhlIEpTT04tc2FmZSBjb250cmFjdCBnb3Zlcm5zIHdoYXQgQ09OU1VNRVJTIHB1dCBpbnRvIGEgY2hlY2twb2ludFxuICogKGBwYXVzZURhdGFgLCBzaGFyZWQgc3RhdGUpLiBBIHZhbHVlIGBzdHJ1Y3R1cmVkQ2xvbmVgIHJlZnVzZXMgY2FuIG9ubHkgY29tZVxuICogZnJvbSB0aGVtIOKAlCBzaGFyZWQgc3RhdGUgaXMgY2xvbmVkIGF0IGV2ZXJ5IGNvbW1pdCwgc28gYSBmdW5jdGlvbiBuZXZlclxuICogcmVhY2hlcyBpdCwgYW5kIG5vIGRpYWdub3N0aWMgYmFnIGlzIGNhcnJpZWQg4oCUIHNvIGEgZmFpbGVkIGNsb25lIGJlY29tZXMgYVxuICogREVTQ1JJUFRJVkUgY29udHJhY3QgZXJyb3IgbmFtaW5nIHRoZSBmaWVsZCAoYGRlc2NyaWJlQ2hlY2twb2ludENsb25lRmFpbHVyZWApXG4gKiBpbnN0ZWFkIG9mIGEgbmFrZWQgYERhdGFDbG9uZUVycm9yYC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEZsb3djaGFydFRyYXZlcnNlciB9IGZyb20gJy4uL2VuZ2luZS90cmF2ZXJzYWwvRmxvd2NoYXJ0VHJhdmVyc2VyLmpzJztcbmltcG9ydCB7IENIRUNLUE9JTlRfVkVSU0lPTiB9IGZyb20gJy4uL3BhdXNlL3JlY29yZC5qcyc7XG5pbXBvcnQgdHlwZSB7IEZsb3djaGFydENoZWNrcG9pbnQsIFBhdXNlU2lnbmFsLCBSZWRhY3Rpb25NYXJrcyB9IGZyb20gJy4uL3BhdXNlL3R5cGVzLmpzJztcblxuLyoqIFRoZSBwYXVzZWQgcnVuJ3MgY291bnRlcnMsIGFzIHRoZSBleGVjdXRvciBob2xkcyB0aGVtIGF0IHRoZSBwYXVzZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGF1c2VkUnVuIHtcbiAgcmVhZG9ubHkgcnVuSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgZXhlY3V0aW9uQ291bnQ6IG51bWJlcjtcbiAgcmVhZG9ubHkgdmlzaXRDb3VudHM6IFJlYWRvbmx5TWFwPHN0cmluZywgbnVtYmVyPjtcbiAgLyoqIFRoZSBydW4ncyByZWRhY3Rpb24gbWFya3Mg4oCUIG5hbWVzIG9ubHkgKGBSZWRhY3Rpb25SdWxlIMK3IG1hcmtzRm9yQ2hlY2twb2ludGApOyBhYnNlbnQgd2hlbiBub25lLiAqL1xuICByZWFkb25seSByZWRhY3Rpb25NYXJrcz86IFJlZGFjdGlvbk1hcmtzO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgZnVsbHkgREVUQUNIRUQsIGxlYW4gY2hlY2twb2ludCBmcm9tIGEgY2F1Z2h0IFBhdXNlU2lnbmFsLlxuICpcbiAqIEV2ZXJ5IGZpZWxkIGlzIGRlZXAtY29waWVkIHZpYSBvbmUgYHN0cnVjdHVyZWRDbG9uZWAgb2YgdGhlIGFzc2VtYmxlZFxuICogY2hlY2twb2ludCwgYmVjYXVzZSB0aGUgcmF3IHBpZWNlcyBhbGlhcyBsaXZlIGVuZ2luZSBzdGF0ZTpcbiAqXG4gKiAgIC0gYHNoYXJlZFN0YXRlYCBJUyBgU2hhcmVkTWVtb3J5YCdzIGN1cnJlbnQgZ2VuZXJhdGlvbiDigJQgbmV2ZXIgZWRpdGVkLFxuICogICAgIGJ1dCAoY29weS1vbi13cml0ZSwgOS4yOS4wKSBldmVyeSBsYXRlciBnZW5lcmF0aW9uIHNoYXJlcyBpdHNcbiAqICAgICB1bmNoYW5nZWQgc3VidHJlZXMsIHNvIGEgY2hlY2twb2ludCB0aGF0IGFsaWFzZWQgaXQgd291bGQgYWxpYXMgdGhlXG4gKiAgICAgcmVzdW1lZCBydW4ncyBzdGF0ZSB0b28uXG4gKiAgIC0gYHN1YmZsb3dTdGF0ZXNgIHZhbHVlcyBhcmUgc2hhbGxvdyBjb3BpZXMgd2hvc2UgTkVTVEVEIG9iamVjdHMgYWxpYXNcbiAqICAgICBzdWJmbG93IG1lbW9yeSwgYW5kIHRoZXkgZ2V0IHNlZWRlZCBiYWNrIGludG8gbGl2ZSBydW50aW1lcyBvbiByZXN1bWUuXG4gKlxuICogVGhlIGNoZWNrcG9pbnQgaXMgcGVyc2lzdGVkIGJ5IGNvbnRyYWN0IChcInN0b3JlIGluIFJlZGlzL1Bvc3RncmVzXCIpIOKAlCBpdFxuICogbXVzdCBuZXZlciBzaGFyZSBzdHJ1Y3R1cmUgd2l0aCB0aGUgZW5naW5lLlxuICpcbiAqIFRoZSBzdGF0ZSBpcyByZWFkIHN0cmFpZ2h0IG9mZiB0aGUgcm9vdCBydW50aW1lJ3Mgc3RvcmUg4oCUIG5vIHNuYXBzaG90IGlzXG4gKiBidWlsdCAoYSBzbmFwc2hvdCB3b3VsZCBidWlsZCB0aGUgZXhlY3V0aW9uIHRyZWUgYW5kIGNvcHkgdGhlIGNvbW1pdCBsb2csXG4gKiB3b3JrIHByb3BvcnRpb25hbCB0byB0aGUgcnVuJ3MgbGVuZ3RoLCBvbmx5IHRvIHRocm93IGJvdGggYXdheSkuXG4gKlxuICogU3ViZmxvdyBzY29wZSBjYXB0dXJlIChgc3ViZmxvd1N0YXRlc2ApIHN1cnZpdmVzIE9OTFkgb24gdGhlIHNpZ25hbCDigJQgdGhlXG4gKiBuZXN0ZWQgcnVudGltZXMgYXJlIEdDJ2QgYXMgdGhlIHN0YWNrIHVud2luZHMuIFByb21vdGluZyBpdCBvbnRvIHRoZVxuICogY2hlY2twb2ludCBoZXJlIGxldHMgY3Jvc3MtZXhlY3V0b3IgcmVzdW1lIHJlc3RvcmUgcHJlLXBhdXNlIHN1YmZsb3dcbiAqIHNjb3BlIChlLmcuIGFuIEFnZW50J3MgYHNjb3BlLmhpc3RvcnlgKS4gVGhlIHNpZ25hbCBjYXB0dXJlcyBhIHN1YmZsb3cgb25seVxuICogYXMgaXQgYnViYmxlcyB0aHJvdWdoIHRoYXQgc3ViZmxvdydzIGJvdW5kYXJ5LCBzbyB0aGUga2V5cyBhcmUgZXhhY3RseSB0aGVcbiAqIHBhdXNlIHBhdGgncy4gRW1wdHkgYHt9YCBmb3Igcm9vdC1sZXZlbCBwYXVzZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFBhdXNlQ2hlY2twb2ludChcbiAgc2lnbmFsOiBQYXVzZVNpZ25hbCxcbiAgdHJhdmVyc2VyOiBGbG93Y2hhcnRUcmF2ZXJzZXI8YW55LCBhbnk+LFxuICBydW46IFBhdXNlZFJ1bixcbik6IEZsb3djaGFydENoZWNrcG9pbnQge1xuICAvLyBFdmVyeSBwYXVzZSB0aGF0IHBhdXNlZCBpbiBUSElTIHJ1biBpcyBuYW1lZCBieSBpdDsgYSBzaWJsaW5nIHJhaXNlZCBhZ2FpblxuICAvLyBvbiByZXN1bWUga2VlcHMgdGhlIHJ1biBpdCBvcmlnaW5hbGx5IHBhdXNlZCBpbi5cbiAgc2lnbmFsLmNvbXBsZXRlRXhlY3V0aW9uKHJ1bi5ydW5JZCk7XG4gIGNvbnN0IGNoZWNrcG9pbnQgPSB7XG4gICAgLy8gVGhlIGZvcm1hdCDigJQgcmVhZCBiYWNrIGJ5IGBwYXVzZS9yZWNvcmQudHMgwrcgZGVjb2RlQ2hlY2twb2ludGAuXG4gICAgY2hlY2twb2ludFZlcnNpb246IENIRUNLUE9JTlRfVkVSU0lPTixcbiAgICBzaGFyZWRTdGF0ZTogdHJhdmVyc2VyLmdldFJ1bnRpbWUoKS5nbG9iYWxTdG9yZS5nZXRTdGF0ZSgpLFxuICAgIHBhdXNlZFN0YWdlSWQ6IHNpZ25hbC5zdGFnZUlkLFxuICAgIC8vIFRoZSBwYXVzZWQgRVhFQ1VUSU9OICg5LjM3LjApIOKAlCBhIHF1ZXVlZCBzaWJsaW5nIHJhaXNlZCBvbiByZXN1bWVcbiAgICAvLyBjYXJyaWVzIHRoZSBydW4gaXQgT1JJR0lOQUxMWSBwYXVzZWQgaW4uXG4gICAgLi4uKHNpZ25hbC5wYXVzZWRFeGVjdXRpb24gJiYgeyBwYXVzZWRFeGVjdXRpb246IHNpZ25hbC5wYXVzZWRFeGVjdXRpb24gfSksXG4gICAgLy8gVGhlIGtleSB0aGUgcGF1c2VkIHRvdWNoaW5nIGV4ZWN1dGlvbiByYW4gdW5kZXIgKDEwLjEpIOKAlCBpdHMgcmVzdW1lIHJ1bnMgdW5kZXIgdGhlIHNhbWUga2V5LlxuICAgIC4uLihzaWduYWwuaWRlbXBvdGVuY3lLZXkgIT09IHVuZGVmaW5lZCAmJiB7IGlkZW1wb3RlbmN5S2V5OiBzaWduYWwuaWRlbXBvdGVuY3lLZXkgfSksXG4gICAgc3ViZmxvd1BhdGg6IHNpZ25hbC5zdWJmbG93UGF0aCxcbiAgICBwYXVzZURhdGE6IHNpZ25hbC5wYXVzZURhdGEsXG4gICAgc3ViZmxvd1N0YXRlczogc2lnbmFsLnN1YmZsb3dTdGF0ZXMsXG4gICAgLy8gQ291bnRlciBjb250aW51aXR5IOKAlCBzZWVkZWQgYmFjayBpbiByZXN1bWUoKSBzbyBydW50aW1lU3RhZ2VJZHMgc3RheVxuICAgIC8vIHVuaXF1ZSBhbmQgbG9vcEl0ZXJhdGlvbiBzdGF5cyBtb25vdG9uaWMgYWNyb3NzIGEgQ1JPU1MtZXhlY3V0b3IgcmVzdW1lXG4gICAgLy8gKGJvdGggYXJlIHBsYWluIG51bWJlci9yZWNvcmQsIHNvIHRoZXkgcmlkZSB0aGUgc2luZ2xlIHN0cnVjdHVyZWRDbG9uZVxuICAgIC8vIGJlbG93IHVudG91Y2hlZCkuIFNlZSB0ZXN0L2xpYi9wYXVzZS9yZXN1bWUtZXhlY3V0aW9uLWNvdW50ZXItY29udGludWl0eS50ZXN0LnRzLlxuICAgIGV4ZWN1dGlvbkNvdW50OiBydW4uZXhlY3V0aW9uQ291bnQsXG4gICAgdmlzaXRDb3VudHM6IE9iamVjdC5mcm9tRW50cmllcyhydW4udmlzaXRDb3VudHMpLFxuICAgIC8vIEludm9rZXIgY29udGV4dCDigJQgY29sbGVjdGVkIGR1cmluZyB0cmF2ZXJzYWwgYnViYmxlLXVwIChub3QgdHJlZS13YWxrZWQpLlxuICAgIC8vIChgY29udGludWF0aW9uU3RhZ2VJZGAgaXMgbGVnYWN5LW9ubHkgc2luY2UgOS4zOS4wOiBubyBsb25nZXIgd3JpdHRlbi4pXG4gICAgLi4uKHNpZ25hbC5pbnZva2VyU3RhZ2VJZCAmJiB7IGludm9rZXJTdGFnZUlkOiBzaWduYWwuaW52b2tlclN0YWdlSWQgfSksXG4gICAgLy8gUGFyYWxsZWwgc2libGluZ3MnIHBhdXNlcyBmcm9tIHRoZSBzYW1lIGZhbi1vdXQsIHdhaXRpbmcgdGhlaXIgdHVyblxuICAgIC8vICg5LjI4LjApLiBBYnNlbnQgd2hlbiBvbmx5IG9uZSBjaGlsZCBwYXVzZWQg4oCUIHRoZSBzaGFwZSBldmVyeVxuICAgIC8vIGVhcmxpZXIgY2hlY2twb2ludCBoYXMuXG4gICAgLi4uKHNpZ25hbC5wZW5kaW5nUGF1c2VzLmxlbmd0aCA+IDAgJiYgeyBwZW5kaW5nUGF1c2VzOiBzaWduYWwucGVuZGluZ1BhdXNlcyB9KSxcbiAgICAvLyBIT1cgdGhlIHBhdXNlIHdhcyByYWlzZWQuIE9uZSBjaGVja3BvaW50IHNoYXBlLCBvbmUgZXh0cmEgb3B0aW9uYWxcbiAgICAvLyBmaWVsZCDigJQgYW4gaW50ZXJydXB0KCkgcGF1c2UgaXMgbm90IGEgc2Vjb25kIGtpbmQgb2YgY2hlY2twb2ludCwgaXQgaXNcbiAgICAvLyB0aGUgc2FtZSBjaGVja3BvaW50IHRoYXQgcmVzdW1lKCkgcmUtZW50ZXJzIGRpZmZlcmVudGx5IChzdGFnZSB0b3AgdnNcbiAgICAvLyByZXN1bWVGbikuIEFic2VudCBmb3IgZXZlcnkgcHJlLTkuMTQuMCBjaGVja3BvaW50LCB3aGljaCBpcyBjb3JyZWN0LlxuICAgIC4uLihzaWduYWwucGF1c2VkQnkgJiYgeyBwYXVzZWRCeTogc2lnbmFsLnBhdXNlZEJ5IH0pLFxuICAgIC8vIFRoZSByZWRhY3Rpb24gdGhlIHBhdXNlZCBydW4gaGFkIG1hZGUg4oCUIE5BTUVTIG9ubHkgKG1hcmtzLCBhIG1hcHBlcidzIHRhaW50cywgaW5oZXJpdGVkXG4gICAgLy8gZmllbGRzKS4gUmVzdW1lIHNlZWRzIHRoZSByZXN1bWVkIHJ1bidzIHJ1bGUgd2l0aCB0aGVtLiBBYnNlbnQgd2hlbiBub3RoaW5nIHdhcyBtYXJrZWQuXG4gICAgLi4uKHJ1bi5yZWRhY3Rpb25NYXJrcyAmJiB7IHJlZGFjdGlvbk1hcmtzOiBydW4ucmVkYWN0aW9uTWFya3MgfSksXG4gICAgcGF1c2VkQXQ6IERhdGUubm93KCksXG4gIH07XG4gIHRyeSB7XG4gICAgcmV0dXJuIHN0cnVjdHVyZWRDbG9uZShjaGVja3BvaW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBHZW51aW5lIEpTT04tc2FmZSBjb250cmFjdCB2aW9sYXRpb24gaW4gY29uc3VtZXItb3duZWQgZGF0YS5cbiAgICB0aHJvdyBkZXNjcmliZUNoZWNrcG9pbnRDbG9uZUZhaWx1cmUoY2hlY2twb2ludCwgZXJyb3IpO1xuICB9XG59XG5cbi8qKiBgdHJ1ZWAgd2hlbiBgc3RydWN0dXJlZENsb25lYCBhY2NlcHRzIHRoZSB2YWx1ZSBhcy1pcy4gKi9cbmZ1bmN0aW9uIGlzQ2xvbmVhYmxlKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgc3RydWN0dXJlZENsb25lKHZhbHVlKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIERFU0NSSVBUSVZFIGVycm9yIGZvciBhIGNoZWNrcG9pbnQgdGhhdCBjYW5ub3QgYmUgY2xvbmVkIOKAlCB0aGVcbiAqIG5vbi1jbG9uZWFibGUgdmFsdWUgbGl2ZXMgaW4gY29uc3VtZXItb3duZWQgZGF0YSAoYSBnZW51aW5lIEpTT04tc2FmZVxuICogY29udHJhY3QgdmlvbGF0aW9uKS4gUHJvYmVzIGVhY2ggdG9wLWxldmVsIGNoZWNrcG9pbnQgZmllbGQgaW5kaXZpZHVhbGx5IHNvXG4gKiB0aGUgbWVzc2FnZSBuYW1lcyB0aGUgb2ZmZW5kaW5nIGZpZWxkIGZhbWlseS4gTmV2ZXIgbGV0cyBhIG5ha2VkXG4gKiBgRGF0YUNsb25lRXJyb3JgIGVzY2FwZS5cbiAqL1xuZnVuY3Rpb24gZGVzY3JpYmVDaGVja3BvaW50Q2xvbmVGYWlsdXJlKGNoZWNrcG9pbnQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBjYXVzZTogdW5rbm93bik6IEVycm9yIHtcbiAgY29uc3QgZmFpbGluZyA9IE9iamVjdC5lbnRyaWVzKGNoZWNrcG9pbnQpXG4gICAgLmZpbHRlcigoWywgdmFsdWVdKSA9PiAhaXNDbG9uZWFibGUodmFsdWUpKVxuICAgIC5tYXAoKFtmaWVsZF0pID0+IGZpZWxkKTtcbiAgY29uc3QgZmllbGRzID0gZmFpbGluZy5sZW5ndGggPiAwID8gZmFpbGluZy5qb2luKCcsICcpIDogJ3Vua25vd24nO1xuICByZXR1cm4gbmV3IEVycm9yKFxuICAgICdGbG93Q2hhcnRFeGVjdXRvcjogY2Fubm90IGJ1aWxkIHRoZSBwYXVzZSBjaGVja3BvaW50IOKAlCBub24tc2VyaWFsaXphYmxlIHZhbHVlKHMpIGluICcgK1xuICAgICAgYGNoZWNrcG9pbnQgZmllbGQocyk6ICR7ZmllbGRzfS4gVGhlIGNoZWNrcG9pbnQgY29udHJhY3QgaXMgSlNPTi1zYWZlIChubyBmdW5jdGlvbnMsIG5vIGAgK1xuICAgICAgXCJjbGFzcyBpbnN0YW5jZXMpLiBDaGVjayB0aGUgcGF1c2VEYXRhIHJldHVybmVkIGJ5IHRoZSBwYXVzYWJsZSBzdGFnZSdzIGV4ZWN1dGUoKSwgYW5kIGFueSBcIiArXG4gICAgICAnc3ViZmxvdyBzdGF0ZSBjYXB0dXJlZCBhdCB0aGUgcGF1c2UuIERpYWdub3N0aWMgdmFsdWVzIGZyb20gJGRlYnVnLyRtZXRyaWMvJGVycm9yLyRldmFsICcgK1xuICAgICAgJ2FyZSBuZXZlciBwYXJ0IG9mIGEgY2hlY2twb2ludCBhbmQgbmV2ZXIgY2F1c2UgdGhpcyBlcnJvci4gJyArXG4gICAgICAnU2VlIGRvY3MvZ3VpZGVzL2V4ZWN1dGlvbi1tb2RlbC5tZCAoXCJQYXVzZSAvIHJlc3VtZSDigJQgd2hhdCBhIGNoZWNrcG9pbnQgY2FwdHVyZXNcIikuJyxcbiAgICB7IGNhdXNlIH0sXG4gICk7XG59XG4iXX0=
150
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2twb2ludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcnVubmVyL2NoZWNrcG9pbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUNHOzs7QUFFSCwwRUFBd0U7QUFHeEUsa0RBQXdEO0FBYXhEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCRztBQUNILFNBQWdCLG9CQUFvQixDQUNsQyxNQUFtQixFQUNuQixTQUF1QyxFQUN2QyxHQUFjO0lBRWQsNkVBQTZFO0lBQzdFLG1EQUFtRDtJQUNuRCxNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sVUFBVSxHQUFHO1FBQ2pCLGtFQUFrRTtRQUNsRSxpQkFBaUIsRUFBRSw4QkFBa0I7UUFDckMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRSxPQUFPLEVBQUUsSUFBQSw0Q0FBcUIsRUFBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDMUcsV0FBVyxFQUFFLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFO1FBQzFELGFBQWEsRUFBRSxNQUFNLENBQUMsT0FBTztRQUM3QixvRUFBb0U7UUFDcEUsMkNBQTJDO1FBQzNDLEdBQUcsQ0FBQyxNQUFNLENBQUMsZUFBZSxJQUFJLEVBQUUsZUFBZSxFQUFFLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUMxRSwrRkFBK0Y7UUFDL0YsR0FBRyxDQUFDLE1BQU0sQ0FBQyxjQUFjLEtBQUssU0FBUyxJQUFJLEVBQUUsY0FBYyxFQUFFLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNyRixXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVc7UUFDL0IsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1FBQzNCLGFBQWEsRUFBRSxNQUFNLENBQUMsYUFBYTtRQUNuQyx1RUFBdUU7UUFDdkUsMEVBQTBFO1FBQzFFLHlFQUF5RTtRQUN6RSxvRkFBb0Y7UUFDcEYsY0FBYyxFQUFFLEdBQUcsQ0FBQyxjQUFjO1FBQ2xDLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7UUFDaEQsNEVBQTRFO1FBQzVFLDBFQUEwRTtRQUMxRSxHQUFHLENBQUMsTUFBTSxDQUFDLGNBQWMsSUFBSSxFQUFFLGNBQWMsRUFBRSxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkUsc0VBQXNFO1FBQ3RFLGdFQUFnRTtRQUNoRSwwQkFBMEI7UUFDMUIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDL0UscUVBQXFFO1FBQ3JFLHlFQUF5RTtRQUN6RSx3RUFBd0U7UUFDeEUsdUVBQXVFO1FBQ3ZFLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNyRCwwRkFBMEY7UUFDMUYsMEZBQTBGO1FBQzFGLEdBQUcsQ0FBQyxHQUFHLENBQUMsY0FBYyxJQUFJLEVBQUUsY0FBYyxFQUFFLEdBQUcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUNqRSxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtLQUNyQixDQUFDO0lBQ0YsSUFBSSxDQUFDO1FBQ0gsT0FBTyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZiwrREFBK0Q7UUFDL0QsTUFBTSw4QkFBOEIsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDMUQsQ0FBQztBQUNILENBQUM7QUFuREQsb0RBbURDO0FBRUQsNkRBQTZEO0FBQzdELFNBQVMsV0FBVyxDQUFDLEtBQWM7SUFDakMsSUFBSSxDQUFDO1FBQ0gsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFTLDhCQUE4QixDQUFDLFVBQW1DLEVBQUUsS0FBYztJQUN6RixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztTQUN2QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNCLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDbkUsT0FBTyxJQUFJLEtBQUssQ0FDZCxzRkFBc0Y7UUFDcEYsd0JBQXdCLE1BQU0sMkRBQTJEO1FBQ3pGLDRGQUE0RjtRQUM1RiwwRkFBMEY7UUFDMUYsNkRBQTZEO1FBQzdELHFGQUFxRixFQUN2RixFQUFFLEtBQUssRUFBRSxDQUNWLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBjaGVja3BvaW50IOKAlCB0aGUgcGF1c2UgY2hlY2twb2ludCwgYnVpbHQgT05DRSBhdCB0aGUgcGF1c2UgKEY5KS5cbiAqXG4gKiBgYnVpbGRQYXVzZUNoZWNrcG9pbnRgIGFzc2VtYmxlcyB0aGUgY2hlY2twb2ludCBmcm9tIGEgY2F1Z2h0IGBQYXVzZVNpZ25hbGBcbiAqIGFuZCB0aGUgcGF1c2VkIHJ1biwgc3RhbXBlZCB3aXRoIHRoZSBmb3JtYXQgdGhlIE9ORSBjb2RlYyByZWFkcyBiYWNrXG4gKiAoYHBhdXNlL3JlY29yZC50c2AgwrcgYENIRUNLUE9JTlRfVkVSU0lPTmAgLyBgZGVjb2RlQ2hlY2twb2ludGApLCBhbmRcbiAqIGRldGFjaGVzIGl0IHdpdGggb25lIGBzdHJ1Y3R1cmVkQ2xvbmVgLlxuICpcbiAqIExFQU4gKGZvcm1hdCAyKS4gVGhlIGNoZWNrcG9pbnQgaG9sZHMgd2hhdCBgcmVzdW1lKClgIHJlYWRzIGFuZCB0aGUgcGF1c2Unc1xuICogb3duIHJlY29yZCwgbm90aGluZyBlbHNlOlxuICpcbiAqICAgcmVhZCBieSByZXN1bWUgIHRoZSBjdXJzb3IgKGBwYXVzZWRTdGFnZUlkYCwgYHN1YmZsb3dQYXRoYCwgYHBhdXNlZEJ5YCksXG4gKiAgICAgICAgICAgICAgICAgICB0aGUgc3RhdGUgKGBzaGFyZWRTdGF0ZWAsIGFuZCBgc3ViZmxvd1N0YXRlc2Ag4oCUIG9uZSBjYXB0dXJlXG4gKiAgICAgICAgICAgICAgICAgICBwZXIgc3ViZmxvdyBPTiB0aGUgcGF1c2UgcGF0aCksIHRoZSBjb3VudGVyc1xuICogICAgICAgICAgICAgICAgICAgKGBleGVjdXRpb25Db3VudGAsIGB2aXNpdENvdW50c2Ag4oCUIG9uZSBlbnRyeSBwZXIgc3RhZ2UgaWQpLFxuICogICAgICAgICAgICAgICAgICAgdGhlIHdhaXRpbmcgc2libGluZ3MgKGBwZW5kaW5nUGF1c2VzYCksIHRoZSByZWRhY3Rpb24gbmFtZXNcbiAqICAgICAgICAgICAgICAgICAgIChgcmVkYWN0aW9uTWFya3NgKSwgdGhlIGxpbmsgKGBwYXVzZWRFeGVjdXRpb25gKTtcbiAqICAgdGhlIHJlY29yZCAgICAgIGBwYXVzZURhdGFgICh0aGUgcXVlc3Rpb24pLCBgaW52b2tlclN0YWdlSWRgLCBgcGF1c2VkQXRgLlxuICpcbiAqIFNvIGl0cyBzaXplIGlzIHRoZSBzdGF0ZSdzIGFuZCB0aGUgY2hhcnQncywgbmV2ZXIgdGhlIHJ1bidzIGxlbmd0aC4gRm9ybWF0IDFcbiAqIGFsc28gY2FycmllZCB0aGUgd2hvbGUgZXhlY3V0aW9uIHRyZWUgYW5kIHRoZSBmaW5pc2hlZCBzdWJmbG93cycgcmVzdWx0cyDigJRcbiAqIHRoZSBydW4ncyBzZXJ2ZWQgcmVjb3JkLCB3aGljaCBubyByZXN1bWUgcmVhZCBhbmQgd2hpY2ggZ3JldyB3aXRoIGV2ZXJ5XG4gKiBmaW5pc2hlZCBpdGVyYXRpb24gKGBiZW5jaC9jaGVja3BvaW50LXNpemUudHNgOiAxOS4zIE1CIGFmdGVyIDYwIGFnZW50XG4gKiB0dXJucyB3aG9zZSByZXN1bWFibGUgc3RhdGUg4oCUIHJvb3QgcGx1cyBjYXB0dXJlcyDigJQgaXMgMC4xMyBNQjsgdGhlIHRyZWVcbiAqIGFsb25lIHdhcyA5NyUpLiBUaGF0IHJlY29yZCBpcyBgZ2V0U25hcHNob3QoKWAncy4gUGlubmVkOlxuICogdGVzdC9saWIvcGF1c2UvY2hlY2twb2ludC1zaXplLnRlc3QudHMuXG4gKlxuICogVEhFIExBVyBob2xkczogdGhlIGNoZWNrcG9pbnQga2VlcHMgUkVBTCB2YWx1ZXMg4oCUIG5vIHJlZGFjdGlvbiBwb2xpY3kgZXZlclxuICogdG91Y2hlcyBpdCAoaXQgaXMgd2hhdCB0aGUgcmVzdW1lZCBydW4gY29tcHV0ZXMgb24pOyB0aGUgbWFya3MgdHJhdmVsIGFzXG4gKiBOQU1FUyBvbmx5LlxuICpcbiAqIFRoZSBKU09OLXNhZmUgY29udHJhY3QgZ292ZXJucyB3aGF0IENPTlNVTUVSUyBwdXQgaW50byBhIGNoZWNrcG9pbnRcbiAqIChgcGF1c2VEYXRhYCwgc2hhcmVkIHN0YXRlKS4gQSB2YWx1ZSBgc3RydWN0dXJlZENsb25lYCByZWZ1c2VzIGNhbiBvbmx5IGNvbWVcbiAqIGZyb20gdGhlbSDigJQgc2hhcmVkIHN0YXRlIGlzIGNsb25lZCBhdCBldmVyeSBjb21taXQsIHNvIGEgZnVuY3Rpb24gbmV2ZXJcbiAqIHJlYWNoZXMgaXQsIGFuZCBubyBkaWFnbm9zdGljIGJhZyBpcyBjYXJyaWVkIOKAlCBzbyBhIGZhaWxlZCBjbG9uZSBiZWNvbWVzIGFcbiAqIERFU0NSSVBUSVZFIGNvbnRyYWN0IGVycm9yIG5hbWluZyB0aGUgZmllbGQgKGBkZXNjcmliZUNoZWNrcG9pbnRDbG9uZUZhaWx1cmVgKVxuICogaW5zdGVhZCBvZiBhIG5ha2VkIGBEYXRhQ2xvbmVFcnJvcmAuXG4gKi9cblxuaW1wb3J0IHsgY29weUNoZWNrcG9pbnRDYXB0dXJlIH0gZnJvbSAnLi4vY2FwdHVyZS9jaGVja3BvaW50Q2FwdHVyZS5qcyc7XG5pbXBvcnQgdHlwZSB7IE5hdGl2ZUNhcHR1cmVPYnNlcnZhdGlvbiB9IGZyb20gJy4uL2NhcHR1cmUvcmVhZFNvdXJjZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBGbG93Y2hhcnRUcmF2ZXJzZXIgfSBmcm9tICcuLi9lbmdpbmUvdHJhdmVyc2FsL0Zsb3djaGFydFRyYXZlcnNlci5qcyc7XG5pbXBvcnQgeyBDSEVDS1BPSU5UX1ZFUlNJT04gfSBmcm9tICcuLi9wYXVzZS9yZWNvcmQuanMnO1xuaW1wb3J0IHR5cGUgeyBGbG93Y2hhcnRDaGVja3BvaW50LCBQYXVzZVNpZ25hbCwgUmVkYWN0aW9uTWFya3MgfSBmcm9tICcuLi9wYXVzZS90eXBlcy5qcyc7XG5cbi8qKiBUaGUgcGF1c2VkIHJ1bidzIGNvdW50ZXJzLCBhcyB0aGUgZXhlY3V0b3IgaG9sZHMgdGhlbSBhdCB0aGUgcGF1c2UuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhdXNlZFJ1biB7XG4gIHJlYWRvbmx5IGNhcHR1cmU/OiBOYXRpdmVDYXB0dXJlT2JzZXJ2YXRpb247XG4gIHJlYWRvbmx5IHJ1bklkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGV4ZWN1dGlvbkNvdW50OiBudW1iZXI7XG4gIHJlYWRvbmx5IHZpc2l0Q291bnRzOiBSZWFkb25seU1hcDxzdHJpbmcsIG51bWJlcj47XG4gIC8qKiBUaGUgcnVuJ3MgcmVkYWN0aW9uIG1hcmtzIOKAlCBuYW1lcyBvbmx5IChgUmVkYWN0aW9uUnVsZSDCtyBtYXJrc0ZvckNoZWNrcG9pbnRgKTsgYWJzZW50IHdoZW4gbm9uZS4gKi9cbiAgcmVhZG9ubHkgcmVkYWN0aW9uTWFya3M/OiBSZWRhY3Rpb25NYXJrcztcbn1cblxuLyoqXG4gKiBCdWlsZCBhIGZ1bGx5IERFVEFDSEVELCBsZWFuIGNoZWNrcG9pbnQgZnJvbSBhIGNhdWdodCBQYXVzZVNpZ25hbC5cbiAqXG4gKiBFdmVyeSBmaWVsZCBpcyBkZWVwLWNvcGllZCB2aWEgb25lIGBzdHJ1Y3R1cmVkQ2xvbmVgIG9mIHRoZSBhc3NlbWJsZWRcbiAqIGNoZWNrcG9pbnQsIGJlY2F1c2UgdGhlIHJhdyBwaWVjZXMgYWxpYXMgbGl2ZSBlbmdpbmUgc3RhdGU6XG4gKlxuICogICAtIGBzaGFyZWRTdGF0ZWAgSVMgYFNoYXJlZE1lbW9yeWAncyBjdXJyZW50IGdlbmVyYXRpb24g4oCUIG5ldmVyIGVkaXRlZCxcbiAqICAgICBidXQgKGNvcHktb24td3JpdGUsIDkuMjkuMCkgZXZlcnkgbGF0ZXIgZ2VuZXJhdGlvbiBzaGFyZXMgaXRzXG4gKiAgICAgdW5jaGFuZ2VkIHN1YnRyZWVzLCBzbyBhIGNoZWNrcG9pbnQgdGhhdCBhbGlhc2VkIGl0IHdvdWxkIGFsaWFzIHRoZVxuICogICAgIHJlc3VtZWQgcnVuJ3Mgc3RhdGUgdG9vLlxuICogICAtIGBzdWJmbG93U3RhdGVzYCB2YWx1ZXMgYXJlIHNoYWxsb3cgY29waWVzIHdob3NlIE5FU1RFRCBvYmplY3RzIGFsaWFzXG4gKiAgICAgc3ViZmxvdyBtZW1vcnksIGFuZCB0aGV5IGdldCBzZWVkZWQgYmFjayBpbnRvIGxpdmUgcnVudGltZXMgb24gcmVzdW1lLlxuICpcbiAqIFRoZSBjaGVja3BvaW50IGlzIHBlcnNpc3RlZCBieSBjb250cmFjdCAoXCJzdG9yZSBpbiBSZWRpcy9Qb3N0Z3Jlc1wiKSDigJQgaXRcbiAqIG11c3QgbmV2ZXIgc2hhcmUgc3RydWN0dXJlIHdpdGggdGhlIGVuZ2luZS5cbiAqXG4gKiBUaGUgc3RhdGUgaXMgcmVhZCBzdHJhaWdodCBvZmYgdGhlIHJvb3QgcnVudGltZSdzIHN0b3JlIOKAlCBubyBzbmFwc2hvdCBpc1xuICogYnVpbHQgKGEgc25hcHNob3Qgd291bGQgYnVpbGQgdGhlIGV4ZWN1dGlvbiB0cmVlIGFuZCBjb3B5IHRoZSBjb21taXQgbG9nLFxuICogd29yayBwcm9wb3J0aW9uYWwgdG8gdGhlIHJ1bidzIGxlbmd0aCwgb25seSB0byB0aHJvdyBib3RoIGF3YXkpLlxuICpcbiAqIFN1YmZsb3cgc2NvcGUgY2FwdHVyZSAoYHN1YmZsb3dTdGF0ZXNgKSBzdXJ2aXZlcyBPTkxZIG9uIHRoZSBzaWduYWwg4oCUIHRoZVxuICogbmVzdGVkIHJ1bnRpbWVzIGFyZSBHQydkIGFzIHRoZSBzdGFjayB1bndpbmRzLiBQcm9tb3RpbmcgaXQgb250byB0aGVcbiAqIGNoZWNrcG9pbnQgaGVyZSBsZXRzIGNyb3NzLWV4ZWN1dG9yIHJlc3VtZSByZXN0b3JlIHByZS1wYXVzZSBzdWJmbG93XG4gKiBzY29wZSAoZS5nLiBhbiBBZ2VudCdzIGBzY29wZS5oaXN0b3J5YCkuIFRoZSBzaWduYWwgY2FwdHVyZXMgYSBzdWJmbG93IG9ubHlcbiAqIGFzIGl0IGJ1YmJsZXMgdGhyb3VnaCB0aGF0IHN1YmZsb3cncyBib3VuZGFyeSwgc28gdGhlIGtleXMgYXJlIGV4YWN0bHkgdGhlXG4gKiBwYXVzZSBwYXRoJ3MuIEVtcHR5IGB7fWAgZm9yIHJvb3QtbGV2ZWwgcGF1c2VzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRQYXVzZUNoZWNrcG9pbnQoXG4gIHNpZ25hbDogUGF1c2VTaWduYWwsXG4gIHRyYXZlcnNlcjogRmxvd2NoYXJ0VHJhdmVyc2VyPGFueSwgYW55PixcbiAgcnVuOiBQYXVzZWRSdW4sXG4pOiBGbG93Y2hhcnRDaGVja3BvaW50IHtcbiAgLy8gRXZlcnkgcGF1c2UgdGhhdCBwYXVzZWQgaW4gVEhJUyBydW4gaXMgbmFtZWQgYnkgaXQ7IGEgc2libGluZyByYWlzZWQgYWdhaW5cbiAgLy8gb24gcmVzdW1lIGtlZXBzIHRoZSBydW4gaXQgb3JpZ2luYWxseSBwYXVzZWQgaW4uXG4gIHNpZ25hbC5jb21wbGV0ZUV4ZWN1dGlvbihydW4ucnVuSWQpO1xuICBjb25zdCBjaGVja3BvaW50ID0ge1xuICAgIC8vIFRoZSBmb3JtYXQg4oCUIHJlYWQgYmFjayBieSBgcGF1c2UvcmVjb3JkLnRzIMK3IGRlY29kZUNoZWNrcG9pbnRgLlxuICAgIGNoZWNrcG9pbnRWZXJzaW9uOiBDSEVDS1BPSU5UX1ZFUlNJT04sXG4gICAgLi4uKHJ1bi5jYXB0dXJlICYmIHsgY2FwdHVyZTogY29weUNoZWNrcG9pbnRDYXB0dXJlKHsgLi4ucnVuLmNhcHR1cmUsIGJvdW5kYXJ5OiB7IHN0YXR1czogJ3BhdXNlZCcgfSB9KSB9KSxcbiAgICBzaGFyZWRTdGF0ZTogdHJhdmVyc2VyLmdldFJ1bnRpbWUoKS5nbG9iYWxTdG9yZS5nZXRTdGF0ZSgpLFxuICAgIHBhdXNlZFN0YWdlSWQ6IHNpZ25hbC5zdGFnZUlkLFxuICAgIC8vIFRoZSBwYXVzZWQgRVhFQ1VUSU9OICg5LjM3LjApIOKAlCBhIHF1ZXVlZCBzaWJsaW5nIHJhaXNlZCBvbiByZXN1bWVcbiAgICAvLyBjYXJyaWVzIHRoZSBydW4gaXQgT1JJR0lOQUxMWSBwYXVzZWQgaW4uXG4gICAgLi4uKHNpZ25hbC5wYXVzZWRFeGVjdXRpb24gJiYgeyBwYXVzZWRFeGVjdXRpb246IHNpZ25hbC5wYXVzZWRFeGVjdXRpb24gfSksXG4gICAgLy8gVGhlIGtleSB0aGUgcGF1c2VkIHRvdWNoaW5nIGV4ZWN1dGlvbiByYW4gdW5kZXIgKDEwLjEpIOKAlCBpdHMgcmVzdW1lIHJ1bnMgdW5kZXIgdGhlIHNhbWUga2V5LlxuICAgIC4uLihzaWduYWwuaWRlbXBvdGVuY3lLZXkgIT09IHVuZGVmaW5lZCAmJiB7IGlkZW1wb3RlbmN5S2V5OiBzaWduYWwuaWRlbXBvdGVuY3lLZXkgfSksXG4gICAgc3ViZmxvd1BhdGg6IHNpZ25hbC5zdWJmbG93UGF0aCxcbiAgICBwYXVzZURhdGE6IHNpZ25hbC5wYXVzZURhdGEsXG4gICAgc3ViZmxvd1N0YXRlczogc2lnbmFsLnN1YmZsb3dTdGF0ZXMsXG4gICAgLy8gQ291bnRlciBjb250aW51aXR5IOKAlCBzZWVkZWQgYmFjayBpbiByZXN1bWUoKSBzbyBydW50aW1lU3RhZ2VJZHMgc3RheVxuICAgIC8vIHVuaXF1ZSBhbmQgbG9vcEl0ZXJhdGlvbiBzdGF5cyBtb25vdG9uaWMgYWNyb3NzIGEgQ1JPU1MtZXhlY3V0b3IgcmVzdW1lXG4gICAgLy8gKGJvdGggYXJlIHBsYWluIG51bWJlci9yZWNvcmQsIHNvIHRoZXkgcmlkZSB0aGUgc2luZ2xlIHN0cnVjdHVyZWRDbG9uZVxuICAgIC8vIGJlbG93IHVudG91Y2hlZCkuIFNlZSB0ZXN0L2xpYi9wYXVzZS9yZXN1bWUtZXhlY3V0aW9uLWNvdW50ZXItY29udGludWl0eS50ZXN0LnRzLlxuICAgIGV4ZWN1dGlvbkNvdW50OiBydW4uZXhlY3V0aW9uQ291bnQsXG4gICAgdmlzaXRDb3VudHM6IE9iamVjdC5mcm9tRW50cmllcyhydW4udmlzaXRDb3VudHMpLFxuICAgIC8vIEludm9rZXIgY29udGV4dCDigJQgY29sbGVjdGVkIGR1cmluZyB0cmF2ZXJzYWwgYnViYmxlLXVwIChub3QgdHJlZS13YWxrZWQpLlxuICAgIC8vIChgY29udGludWF0aW9uU3RhZ2VJZGAgaXMgbGVnYWN5LW9ubHkgc2luY2UgOS4zOS4wOiBubyBsb25nZXIgd3JpdHRlbi4pXG4gICAgLi4uKHNpZ25hbC5pbnZva2VyU3RhZ2VJZCAmJiB7IGludm9rZXJTdGFnZUlkOiBzaWduYWwuaW52b2tlclN0YWdlSWQgfSksXG4gICAgLy8gUGFyYWxsZWwgc2libGluZ3MnIHBhdXNlcyBmcm9tIHRoZSBzYW1lIGZhbi1vdXQsIHdhaXRpbmcgdGhlaXIgdHVyblxuICAgIC8vICg5LjI4LjApLiBBYnNlbnQgd2hlbiBvbmx5IG9uZSBjaGlsZCBwYXVzZWQg4oCUIHRoZSBzaGFwZSBldmVyeVxuICAgIC8vIGVhcmxpZXIgY2hlY2twb2ludCBoYXMuXG4gICAgLi4uKHNpZ25hbC5wZW5kaW5nUGF1c2VzLmxlbmd0aCA+IDAgJiYgeyBwZW5kaW5nUGF1c2VzOiBzaWduYWwucGVuZGluZ1BhdXNlcyB9KSxcbiAgICAvLyBIT1cgdGhlIHBhdXNlIHdhcyByYWlzZWQuIE9uZSBjaGVja3BvaW50IHNoYXBlLCBvbmUgZXh0cmEgb3B0aW9uYWxcbiAgICAvLyBmaWVsZCDigJQgYW4gaW50ZXJydXB0KCkgcGF1c2UgaXMgbm90IGEgc2Vjb25kIGtpbmQgb2YgY2hlY2twb2ludCwgaXQgaXNcbiAgICAvLyB0aGUgc2FtZSBjaGVja3BvaW50IHRoYXQgcmVzdW1lKCkgcmUtZW50ZXJzIGRpZmZlcmVudGx5IChzdGFnZSB0b3AgdnNcbiAgICAvLyByZXN1bWVGbikuIEFic2VudCBmb3IgZXZlcnkgcHJlLTkuMTQuMCBjaGVja3BvaW50LCB3aGljaCBpcyBjb3JyZWN0LlxuICAgIC4uLihzaWduYWwucGF1c2VkQnkgJiYgeyBwYXVzZWRCeTogc2lnbmFsLnBhdXNlZEJ5IH0pLFxuICAgIC8vIFRoZSByZWRhY3Rpb24gdGhlIHBhdXNlZCBydW4gaGFkIG1hZGUg4oCUIE5BTUVTIG9ubHkgKG1hcmtzLCBhIG1hcHBlcidzIHRhaW50cywgaW5oZXJpdGVkXG4gICAgLy8gZmllbGRzKS4gUmVzdW1lIHNlZWRzIHRoZSByZXN1bWVkIHJ1bidzIHJ1bGUgd2l0aCB0aGVtLiBBYnNlbnQgd2hlbiBub3RoaW5nIHdhcyBtYXJrZWQuXG4gICAgLi4uKHJ1bi5yZWRhY3Rpb25NYXJrcyAmJiB7IHJlZGFjdGlvbk1hcmtzOiBydW4ucmVkYWN0aW9uTWFya3MgfSksXG4gICAgcGF1c2VkQXQ6IERhdGUubm93KCksXG4gIH07XG4gIHRyeSB7XG4gICAgcmV0dXJuIHN0cnVjdHVyZWRDbG9uZShjaGVja3BvaW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBHZW51aW5lIEpTT04tc2FmZSBjb250cmFjdCB2aW9sYXRpb24gaW4gY29uc3VtZXItb3duZWQgZGF0YS5cbiAgICB0aHJvdyBkZXNjcmliZUNoZWNrcG9pbnRDbG9uZUZhaWx1cmUoY2hlY2twb2ludCwgZXJyb3IpO1xuICB9XG59XG5cbi8qKiBgdHJ1ZWAgd2hlbiBgc3RydWN0dXJlZENsb25lYCBhY2NlcHRzIHRoZSB2YWx1ZSBhcy1pcy4gKi9cbmZ1bmN0aW9uIGlzQ2xvbmVhYmxlKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgc3RydWN0dXJlZENsb25lKHZhbHVlKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIERFU0NSSVBUSVZFIGVycm9yIGZvciBhIGNoZWNrcG9pbnQgdGhhdCBjYW5ub3QgYmUgY2xvbmVkIOKAlCB0aGVcbiAqIG5vbi1jbG9uZWFibGUgdmFsdWUgbGl2ZXMgaW4gY29uc3VtZXItb3duZWQgZGF0YSAoYSBnZW51aW5lIEpTT04tc2FmZVxuICogY29udHJhY3QgdmlvbGF0aW9uKS4gUHJvYmVzIGVhY2ggdG9wLWxldmVsIGNoZWNrcG9pbnQgZmllbGQgaW5kaXZpZHVhbGx5IHNvXG4gKiB0aGUgbWVzc2FnZSBuYW1lcyB0aGUgb2ZmZW5kaW5nIGZpZWxkIGZhbWlseS4gTmV2ZXIgbGV0cyBhIG5ha2VkXG4gKiBgRGF0YUNsb25lRXJyb3JgIGVzY2FwZS5cbiAqL1xuZnVuY3Rpb24gZGVzY3JpYmVDaGVja3BvaW50Q2xvbmVGYWlsdXJlKGNoZWNrcG9pbnQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBjYXVzZTogdW5rbm93bik6IEVycm9yIHtcbiAgY29uc3QgZmFpbGluZyA9IE9iamVjdC5lbnRyaWVzKGNoZWNrcG9pbnQpXG4gICAgLmZpbHRlcigoWywgdmFsdWVdKSA9PiAhaXNDbG9uZWFibGUodmFsdWUpKVxuICAgIC5tYXAoKFtmaWVsZF0pID0+IGZpZWxkKTtcbiAgY29uc3QgZmllbGRzID0gZmFpbGluZy5sZW5ndGggPiAwID8gZmFpbGluZy5qb2luKCcsICcpIDogJ3Vua25vd24nO1xuICByZXR1cm4gbmV3IEVycm9yKFxuICAgICdGbG93Q2hhcnRFeGVjdXRvcjogY2Fubm90IGJ1aWxkIHRoZSBwYXVzZSBjaGVja3BvaW50IOKAlCBub24tc2VyaWFsaXphYmxlIHZhbHVlKHMpIGluICcgK1xuICAgICAgYGNoZWNrcG9pbnQgZmllbGQocyk6ICR7ZmllbGRzfS4gVGhlIGNoZWNrcG9pbnQgY29udHJhY3QgaXMgSlNPTi1zYWZlIChubyBmdW5jdGlvbnMsIG5vIGAgK1xuICAgICAgXCJjbGFzcyBpbnN0YW5jZXMpLiBDaGVjayB0aGUgcGF1c2VEYXRhIHJldHVybmVkIGJ5IHRoZSBwYXVzYWJsZSBzdGFnZSdzIGV4ZWN1dGUoKSwgYW5kIGFueSBcIiArXG4gICAgICAnc3ViZmxvdyBzdGF0ZSBjYXB0dXJlZCBhdCB0aGUgcGF1c2UuIERpYWdub3N0aWMgdmFsdWVzIGZyb20gJGRlYnVnLyRtZXRyaWMvJGVycm9yLyRldmFsICcgK1xuICAgICAgJ2FyZSBuZXZlciBwYXJ0IG9mIGEgY2hlY2twb2ludCBhbmQgbmV2ZXIgY2F1c2UgdGhpcyBlcnJvci4gJyArXG4gICAgICAnU2VlIGRvY3MvZ3VpZGVzL2V4ZWN1dGlvbi1tb2RlbC5tZCAoXCJQYXVzZSAvIHJlc3VtZSDigJQgd2hhdCBhIGNoZWNrcG9pbnQgY2FwdHVyZXNcIikuJyxcbiAgICB7IGNhdXNlIH0sXG4gICk7XG59XG4iXX0=
@@ -12,4 +12,4 @@ var recordSink_js_1 = require("./recordSink.js");
12
12
  Object.defineProperty(exports, "RecordSinkError", { enumerable: true, get: function () { return recordSink_js_1.RecordSinkError; } });
13
13
  var RunContext_js_1 = require("./RunContext.js");
14
14
  Object.defineProperty(exports, "RunContext", { enumerable: true, get: function () { return RunContext_js_1.RunContext; } });
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3J1bm5lci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFTQSw2REFBeUQ7QUFBaEQsdUhBQUEsZ0JBQWdCLE9BQUE7QUFDekIsK0RBQTJEO0FBQWxELHlIQUFBLGlCQUFpQixPQUFBO0FBRTFCLGlFQUErRTtBQUF0RSwySEFBQSxrQkFBa0IsT0FBQTtBQUFFLHlIQUFBLGdCQUFnQixPQUFBO0FBUzdDLGlEQUFrRDtBQUF6QyxnSEFBQSxlQUFlLE9BQUE7QUFFeEIsaURBQTZDO0FBQXBDLDJHQUFBLFVBQVUsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGlzdGFuYnVsIGlnbm9yZSBmaWxlICovXG5leHBvcnQgdHlwZSB7IENvbXBvc2FibGVSdW5uZXIgfSBmcm9tICcuL0NvbXBvc2FibGVSdW5uZXIuanMnO1xuZXhwb3J0IHR5cGUge1xuICBBdHRhY2hSZWNvcmRlck9wdGlvbnMsXG4gIE9ic2VydmVyRGVsaXZlcnksXG4gIE9ic2VydmVyRHJhaW5SZXN1bHQsXG4gIE9ic2VydmVyU3RhdHMsXG59IGZyb20gJy4vRGVmZXJyZWRPYnNlcnZlclRpZXIuanMnO1xuZXhwb3J0IHR5cGUgeyBSZWNvcmRlclNuYXBzaG90LCBSZWNvcmRTaW5rU3RhdHMsIFJ1bnRpbWVTbmFwc2hvdCB9IGZyb20gJy4vRXhlY3V0aW9uUnVudGltZS5qcyc7XG5leHBvcnQgeyBFeGVjdXRpb25SdW50aW1lIH0gZnJvbSAnLi9FeGVjdXRpb25SdW50aW1lLmpzJztcbmV4cG9ydCB7IEZsb3dDaGFydEV4ZWN1dG9yIH0gZnJvbSAnLi9GbG93Q2hhcnRFeGVjdXRvci5qcyc7XG5leHBvcnQgdHlwZSB7IFN1YnRyZWVTbmFwc2hvdCB9IGZyb20gJy4vZ2V0U3VidHJlZVNuYXBzaG90LmpzJztcbmV4cG9ydCB7IGdldFN1YnRyZWVTbmFwc2hvdCwgbGlzdFN1YmZsb3dQYXRocyB9IGZyb20gJy4vZ2V0U3VidHJlZVNuYXBzaG90LmpzJztcbmV4cG9ydCB0eXBlIHsgRmxvd0NoYXJ0RXhlY3V0b3JPcHRpb25zIH0gZnJvbSAnLi9vcHRpb25zLmpzJztcbmV4cG9ydCB0eXBlIHtcbiAgUmVjb3JkRmx1c2hSZXN1bHQsXG4gIFJlY29yZFNpbmtGYWlsdXJlTW9kZSxcbiAgUmVjb3JkU2lua0ZsdXNoTW9kZSxcbiAgUmVjb3JkU2lua09wdGlvbixcbiAgUmVjb3JkU2lua09wdGlvbnMsXG59IGZyb20gJy4vcmVjb3JkU2luay5qcyc7XG5leHBvcnQgeyBSZWNvcmRTaW5rRXJyb3IgfSBmcm9tICcuL3JlY29yZFNpbmsuanMnO1xuZXhwb3J0IHR5cGUgeyBSdW5SZXN1bHQgfSBmcm9tICcuL1J1bkNvbnRleHQuanMnO1xuZXhwb3J0IHsgUnVuQ29udGV4dCB9IGZyb20gJy4vUnVuQ29udGV4dC5qcyc7XG5leHBvcnQgdHlwZSB7IFJ1bm5hYmxlRmxvd0NoYXJ0IH0gZnJvbSAnLi9SdW5uYWJsZUNoYXJ0LmpzJztcbiJdfQ==
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3J1bm5lci9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFlQSw2REFBeUQ7QUFBaEQsdUhBQUEsZ0JBQWdCLE9BQUE7QUFDekIsK0RBQTJEO0FBQWxELHlIQUFBLGlCQUFpQixPQUFBO0FBRTFCLGlFQUErRTtBQUF0RSwySEFBQSxrQkFBa0IsT0FBQTtBQUFFLHlIQUFBLGdCQUFnQixPQUFBO0FBUzdDLGlEQUFrRDtBQUF6QyxnSEFBQSxlQUFlLE9BQUE7QUFFeEIsaURBQTZDO0FBQXBDLDJHQUFBLFVBQVUsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGlzdGFuYnVsIGlnbm9yZSBmaWxlICovXG5leHBvcnQgdHlwZSB7XG4gIENhcHR1cmVIaXN0b3J5T3B0aW9ucyxcbiAgQ2FwdHVyZUhpc3RvcnlSZWNlaXB0LFxuICBDYXB0dXJlSGlzdG9yeVN0YXR1cyxcbiAgQ2FwdHVyZUhpc3RvcnlUYXJnZXQsXG59IGZyb20gJy4uL2NhcHR1cmUvaGlzdG9yeVR5cGVzLmpzJztcbmV4cG9ydCB0eXBlIHsgQ29tcG9zYWJsZVJ1bm5lciB9IGZyb20gJy4vQ29tcG9zYWJsZVJ1bm5lci5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIEF0dGFjaFJlY29yZGVyT3B0aW9ucyxcbiAgT2JzZXJ2ZXJEZWxpdmVyeSxcbiAgT2JzZXJ2ZXJEcmFpblJlc3VsdCxcbiAgT2JzZXJ2ZXJTdGF0cyxcbn0gZnJvbSAnLi9EZWZlcnJlZE9ic2VydmVyVGllci5qcyc7XG5leHBvcnQgdHlwZSB7IFJlY29yZGVyU25hcHNob3QsIFJlY29yZFNpbmtTdGF0cywgUnVudGltZVNuYXBzaG90IH0gZnJvbSAnLi9FeGVjdXRpb25SdW50aW1lLmpzJztcbmV4cG9ydCB7IEV4ZWN1dGlvblJ1bnRpbWUgfSBmcm9tICcuL0V4ZWN1dGlvblJ1bnRpbWUuanMnO1xuZXhwb3J0IHsgRmxvd0NoYXJ0RXhlY3V0b3IgfSBmcm9tICcuL0Zsb3dDaGFydEV4ZWN1dG9yLmpzJztcbmV4cG9ydCB0eXBlIHsgU3VidHJlZVNuYXBzaG90IH0gZnJvbSAnLi9nZXRTdWJ0cmVlU25hcHNob3QuanMnO1xuZXhwb3J0IHsgZ2V0U3VidHJlZVNuYXBzaG90LCBsaXN0U3ViZmxvd1BhdGhzIH0gZnJvbSAnLi9nZXRTdWJ0cmVlU25hcHNob3QuanMnO1xuZXhwb3J0IHR5cGUgeyBGbG93Q2hhcnRFeGVjdXRvck9wdGlvbnMgfSBmcm9tICcuL29wdGlvbnMuanMnO1xuZXhwb3J0IHR5cGUge1xuICBSZWNvcmRGbHVzaFJlc3VsdCxcbiAgUmVjb3JkU2lua0ZhaWx1cmVNb2RlLFxuICBSZWNvcmRTaW5rRmx1c2hNb2RlLFxuICBSZWNvcmRTaW5rT3B0aW9uLFxuICBSZWNvcmRTaW5rT3B0aW9ucyxcbn0gZnJvbSAnLi9yZWNvcmRTaW5rLmpzJztcbmV4cG9ydCB7IFJlY29yZFNpbmtFcnJvciB9IGZyb20gJy4vcmVjb3JkU2luay5qcyc7XG5leHBvcnQgdHlwZSB7IFJ1blJlc3VsdCB9IGZyb20gJy4vUnVuQ29udGV4dC5qcyc7XG5leHBvcnQgeyBSdW5Db250ZXh0IH0gZnJvbSAnLi9SdW5Db250ZXh0LmpzJztcbmV4cG9ydCB0eXBlIHsgUnVubmFibGVGbG93Q2hhcnQgfSBmcm9tICcuL1J1bm5hYmxlQ2hhcnQuanMnO1xuIl19
@@ -20,6 +20,48 @@ const defaultScopeFactory = (ctx, stageName, readOnly, env) => new ScopeFacade_j
20
20
  */
21
21
  function resolveExecutorArgs(flowChart, factoryOrOptions) {
22
22
  const opts = typeof factoryOrOptions === 'function' ? { scopeFactory: factoryOrOptions } : factoryOrOptions ?? {};
23
+ const slot = Object.getOwnPropertyDescriptor(opts, 'readSources');
24
+ if (slot && !Object.hasOwn(slot, 'value'))
25
+ throw new TypeError('readSources must be plain data');
26
+ const source = slot?.value;
27
+ const dialInput = Object.create(opts);
28
+ Object.defineProperty(dialInput, 'readSources', { value: source });
29
+ const dials = (0, runPolicy_js_1.pickDials)(dialInput);
30
+ if (source !== undefined && typeof source !== 'boolean') {
31
+ const limits = source && typeof source === 'object' && !Array.isArray(source)
32
+ ? Object.getOwnPropertyDescriptor(source, 'limits')
33
+ : undefined;
34
+ if (!limits ||
35
+ !Object.hasOwn(limits, 'value') ||
36
+ !limits.value ||
37
+ typeof limits.value !== 'object' ||
38
+ Array.isArray(limits.value))
39
+ throw new TypeError('readSources must be a boolean or an object with limits');
40
+ // Capture a plain immutable settings snapshot; no app getter runs and later edits cannot resize a run.
41
+ const copied = Object.create(null);
42
+ const fields = [
43
+ 'maxOccurrences',
44
+ 'maxPerExecution',
45
+ 'maxBytes',
46
+ 'maxOrigins',
47
+ 'maxStaging',
48
+ ];
49
+ for (const key of fields) {
50
+ const limit = Object.getOwnPropertyDescriptor(limits.value, key);
51
+ if (!limit)
52
+ continue;
53
+ if (!Object.hasOwn(limit, 'value'))
54
+ throw new TypeError('readSources limits must be plain values');
55
+ copied[key] = limit.value;
56
+ }
57
+ dials.readSources = Object.freeze({ limits: Object.freeze(copied) });
58
+ }
59
+ if (opts.captureCoverage !== undefined && typeof opts.captureCoverage !== 'boolean') {
60
+ throw new TypeError('captureCoverage must be a boolean');
61
+ }
62
+ const sink = opts.sink !== undefined ? (0, recordSink_js_1.resolveRecordSink)(opts.sink) : undefined;
63
+ if (sink?.capture && opts.captureCoverage !== true)
64
+ throw new TypeError('sink.capture requires captureCoverage: true');
23
65
  return {
24
66
  flowChart,
25
67
  scopeFactory: opts.scopeFactory ?? flowChart.scopeFactory ?? defaultScopeFactory,
@@ -29,9 +71,10 @@ function resolveExecutorArgs(flowChart, factoryOrOptions) {
29
71
  throttlingErrorChecker: opts.throttlingErrorChecker,
30
72
  streamHandlers: opts.streamHandlers,
31
73
  scopeProtectionMode: opts.scopeProtectionMode,
32
- dials: (0, runPolicy_js_1.pickDials)(opts),
33
- ...(opts.sink !== undefined && { sink: (0, recordSink_js_1.resolveRecordSink)(opts.sink) }),
74
+ dials,
75
+ ...(opts.captureCoverage === true && { captureCoverage: true }),
76
+ ...(sink && { sink }),
34
77
  };
35
78
  }
36
79
  exports.resolveExecutorArgs = resolveExecutorArgs;
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcnVubmVyL29wdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRzs7O0FBS0gseURBQW1EO0FBRW5ELDREQUFzRDtBQUN0RCxtREFBb0c7QUFFcEcsMEVBQTBFO0FBQzFFLE1BQU0sbUJBQW1CLEdBQWlCLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FDMUUsSUFBSSw0QkFBVyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBbUdqRDs7OztHQUlHO0FBQ0gsU0FBZ0IsbUJBQW1CLENBQ2pDLFNBQWtDLEVBQ2xDLGdCQUFxRjtJQUVyRixNQUFNLElBQUksR0FDUixPQUFPLGdCQUFnQixLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDO0lBQ3ZHLE9BQU87UUFDTCxTQUFTO1FBQ1QsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZLElBQUksU0FBUyxDQUFDLFlBQVksSUFBSyxtQkFBNEM7UUFDMUcsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLHVCQUF1QjtRQUNyRCxjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7UUFDbkMsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlO1FBQ3JDLHNCQUFzQixFQUFFLElBQUksQ0FBQyxzQkFBc0I7UUFDbkQsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO1FBQ25DLG1CQUFtQixFQUFFLElBQUksQ0FBQyxtQkFBbUI7UUFDN0MsS0FBSyxFQUFFLElBQUEsd0JBQVMsRUFBQyxJQUFJLENBQUM7UUFDdEIsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUEsaUNBQWlCLEVBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7S0FDdkUsQ0FBQztBQUNKLENBQUM7QUFsQkQsa0RBa0JDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBvcHRpb25zIOKAlCB0aGUgZXhlY3V0b3IncyBjb25zdHJ1Y3Rpb24gb3B0aW9ucyBhbmQgaG93IHRoZXkgcmVzb2x2ZSAoRjkpLlxuICpcbiAqIGBGbG93Q2hhcnRFeGVjdXRvck9wdGlvbnNgIGlzIHRoZSBwdWJsaWMgb3B0aW9ucyBvYmplY3Q7XG4gKiBgcmVzb2x2ZUV4ZWN1dG9yQXJnc2AgdHVybnMgZWl0aGVyIGNvbnN0cnVjdG9yIGZvcm0gKG9wdGlvbnMgb2JqZWN0LCBvciBhXG4gKiBiYXJlIGBTY29wZUZhY3RvcnlgKSBpbnRvIHRoZSBgRXhlY3V0b3JBcmdzYCB0aGUgZXhlY3V0b3Iga2VlcHMgZm9yIGV2ZXJ5IGxlZy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEZsb3dDaGFydCB9IGZyb20gJy4uL2J1aWxkZXIvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBTY29wZUZhY3RvcnksIFN0cmVhbUhhbmRsZXJzIH0gZnJvbSAnLi4vZW5naW5lL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgUnVuRGlhbHMgfSBmcm9tICcuLi9tZW1vcnkvcnVuUG9saWN5LmpzJztcbmltcG9ydCB7IHBpY2tEaWFscyB9IGZyb20gJy4uL21lbW9yeS9ydW5Qb2xpY3kuanMnO1xuaW1wb3J0IHR5cGUgeyBTY29wZVByb3RlY3Rpb25Nb2RlIH0gZnJvbSAnLi4vc2NvcGUvcHJvdGVjdGlvbi90eXBlcy5qcyc7XG5pbXBvcnQgeyBTY29wZUZhY2FkZSB9IGZyb20gJy4uL3Njb3BlL1Njb3BlRmFjYWRlLmpzJztcbmltcG9ydCB7IHR5cGUgUmVjb3JkU2lua09wdGlvbiwgdHlwZSBSZXNvbHZlZFJlY29yZFNpbmssIHJlc29sdmVSZWNvcmRTaW5rIH0gZnJvbSAnLi9yZWNvcmRTaW5rLmpzJztcblxuLyoqIERlZmF1bHQgc2NvcGUgZmFjdG9yeSDigJQgY3JlYXRlcyBhIHBsYWluIFNjb3BlRmFjYWRlIGZvciBlYWNoIHN0YWdlLiAqL1xuY29uc3QgZGVmYXVsdFNjb3BlRmFjdG9yeTogU2NvcGVGYWN0b3J5ID0gKGN0eCwgc3RhZ2VOYW1lLCByZWFkT25seSwgZW52KSA9PlxuICBuZXcgU2NvcGVGYWNhZGUoY3R4LCBzdGFnZU5hbWUsIHJlYWRPbmx5LCBlbnYpO1xuXG4vKipcbiAqIE9wdGlvbnMgb2JqZWN0IGZvciBgRmxvd0NoYXJ0RXhlY3V0b3JgIOKAlCBwcmVmZXJyZWQgb3ZlciBwb3NpdGlvbmFsIHBhcmFtcy5cbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBleCA9IG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCwge1xuICogICBzY29wZUZhY3Rvcnk6IG15RmFjdG9yeSxcbiAqICAgZGVmYXVsdFZhbHVlc0ZvckNvbnRleHQ6IHsgLi4uIH0sXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqICoqU3luYyBub3RlIGZvciBtYWludGFpbmVyczoqKiBhIGZpZWxkIGFkZGVkIGhlcmUgbXVzdCBhbHNvIGJlIGFkZGVkIHRvXG4gKiBgRXhlY3V0b3JBcmdzYCBhbmQgYHJlc29sdmVFeGVjdXRvckFyZ3NgIGJlbG93LCBvciBpdCBpcyBhY2NlcHRlZCBhbmQgbmV2ZXJcbiAqIGFwcGxpZWQuIFRoZSBESUFMUyBhcmUgdGhlIGV4Y2VwdGlvbjogdGhleSBjb21lIGZyb20gYFJ1bkRpYWxzYCBhbmQgdHJhdmVsXG4gKiB3aG9sZSBhcyBgZGlhbHNgLlxuICpcbiAqICoqVFNjb3BlIGluZmVyZW5jZSBub3RlOioqIFdoZW4gdXNpbmcgdGhlIG9wdGlvbnMtb2JqZWN0IGZvcm0gd2l0aCBhIGN1c3RvbSBzY29wZSxcbiAqIFR5cGVTY3JpcHQgY2Fubm90IGluZmVyIGBUU2NvcGVgIHRocm91Z2ggdGhlIG9wdGlvbnMgb2JqZWN0LiBQYXNzIHRoZSB0eXBlXG4gKiBleHBsaWNpdGx5OiBgbmV3IEZsb3dDaGFydEV4ZWN1dG9yPFRPdXQsIE15U2NvcGU+KGNoYXJ0LCB7IHNjb3BlRmFjdG9yeSB9KWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0NoYXJ0RXhlY3V0b3JPcHRpb25zPFRTY29wZSA9IGFueT4gZXh0ZW5kcyBSdW5EaWFscyB7XG4gIC8vIOKUgOKUgCBDb21tb24gb3B0aW9ucyAobW9zdCBjYWxsZXJzIG5lZWQgb25seSB0aGVzZSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIEN1c3RvbSBzY29wZSBmYWN0b3J5LiBEZWZhdWx0cyB0byBUeXBlZFNjb3BlIG9yIFNjb3BlRmFjYWRlIGF1dG8tZGV0ZWN0aW9uLiAqL1xuICBzY29wZUZhY3Rvcnk/OiBTY29wZUZhY3Rvcnk8VFNjb3BlPjtcblxuICAvLyDilIDilIAgQ29udGV4dCBvcHRpb25zIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHZhbHVlcyBwcmUtcG9wdWxhdGVkIGludG8gdGhlIHNoYXJlZCBjb250ZXh0IGJlZm9yZSAqKmVhY2gqKiBzdGFnZVxuICAgKiAocmUtYXBwbGllZCBldmVyeSBzdGFnZSwgYWN0aW5nIGFzIGJhc2VsaW5lIGRlZmF1bHRzKS5cbiAgICovXG4gIGRlZmF1bHRWYWx1ZXNGb3JDb250ZXh0PzogdW5rbm93bjtcbiAgLyoqXG4gICAqIEluaXRpYWwgY29udGV4dCB2YWx1ZXMgbWVyZ2VkIGludG8gdGhlIHNoYXJlZCBjb250ZXh0ICoqb25jZSoqIGF0IHN0YXJ0dXBcbiAgICogKGFwcGxpZWQgYmVmb3JlIHRoZSBmaXJzdCBzdGFnZSwgbm90IHJlcGVhdGVkIG9uIHN1YnNlcXVlbnQgc3RhZ2VzKS5cbiAgICogRGlzdGluY3QgZnJvbSBgZGVmYXVsdFZhbHVlc0ZvckNvbnRleHRgLCB3aGljaCBpcyByZS1hcHBsaWVkIGV2ZXJ5IHN0YWdlLlxuICAgKi9cbiAgaW5pdGlhbENvbnRleHQ/OiB1bmtub3duO1xuICAvKiogUmVhZC1vbmx5IGlucHV0IGFjY2Vzc2libGUgdmlhIGBzY29wZS5nZXRBcmdzKClgIOKAlCBuZXZlciB0cmFja2VkIG9yIHdyaXR0ZW4uICovXG4gIHJlYWRPbmx5Q29udGV4dD86IHVua25vd247XG5cbiAgLy8g4pSA4pSAIE9ic2VydmFiaWxpdHkgY29zdCBvcHRpb25zIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAvLyBUaGUgZm91ciBkaWFscyDigJQgYHJlYWRUcmFja2luZ2AsIGB3cml0ZVRyYWNraW5nYCwgYGNvbW1pdFZhbHVlc2AsXG4gIC8vIGB3cml0ZVByb3ZlbmFuY2VgIOKAlCBhcmUgaW5oZXJpdGVkIGZyb20gYFJ1bkRpYWxzYCAobWVtb3J5L3J1blBvbGljeS50cyxcbiAgLy8gd2hlcmUgZWFjaCBpcyBkb2N1bWVudGVkKTogdGhlIGV4ZWN1dG9yIHBpY2tzIHRoZW0gb2ZmIHRoaXMgb2JqZWN0IGFuZFxuICAvLyBidWlsZHMgdGhlIHJ1bidzIE9ORSBwb2xpY3kgZnJvbSB0aGVtIChGNSkuXG5cbiAgLy8g4pSA4pSAIFRoZSBjcmFzaC1zYWZlIHJlY29yZCAoMTAuMSwgUDYpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBXaGVyZSB0aGUgcnVuJ3MgcmVjb3JkIGdvZXMgQVMgSVQgTEFORFMsIHNvIGEgcnVuIHRoYXQgbmV2ZXIgZmluaXNoZXMgc3RpbGwgbGVhdmVzIGl0OiBldmVyeSBsb2cgb2YgdGhlIHJ1blxuICAgKiAodGhlIHJvb3QgYW5kIGVhY2ggc3ViZmxvdyBtb3VudCkgaGFuZHMgdGhlIHNpbmsgaXRzIGBvcGVuZWRgIGJhc2UsIGVhY2ggY29tbWl0LCBhIG5vdGUgcGVyIGF0dGVtcHQgdGhhdCBlbmRlZCxcbiAgICogYW5kIGl0cyBgY2xvc2VkYCBvdXRjb21lLiBgZmlsZVNpbmsocGF0aClgIChgZm9vdHByaW50anMvc2lua3NgLCBOb2RlKSBvciBgbWVtb3J5U2luaygpYCAoYGZvb3R0cmFjZS93cml0ZWApO1xuICAgKiByZWFkIGl0IGJhY2sgd2l0aCBgcmVhZFN0b3JlZFJlY29yZGAgKGBmb290dHJhY2VgKS4gVGhlIHJlZGFjdGlvbiBwb2xpY3kgYXBwbGllcyBiZWZvcmUgYW55IGVudHJ5IGlzIHdyaXR0ZW4uXG4gICAqIEEgZmFpbGluZyBzaW5rIG5ldmVyIHN0b3BzIHRoZSBydW4gKGBvbkZhaWx1cmU6ICdyZXBvcnQnYCwgdGhlIGRlZmF1bHQpIOKAlCBgZ2V0U25hcHNob3QoKS5zaW5rYCBjb3VudHMgd2hhdCB3YXNcbiAgICogbG9zdC4gU2VlIHRoZSBndWlkZSdzIFwiQSBjcmFzaC1zYWZlIHJlY29yZFwiLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IGV4ZWN1dG9yID0gbmV3IEZsb3dDaGFydEV4ZWN1dG9yKGNoYXJ0LCB7IHNpbms6IGZpbGVTaW5rKCcvdmFyL2Zvb3RwcmludC9ydW4uanNvbmwnKSB9KTtcbiAgICogYGBgXG4gICAqL1xuICBzaW5rPzogUmVjb3JkU2lua09wdGlvbjtcblxuICAvLyDilIDilIAgQWR2YW5jZWQgLyBlc2NhcGUtaGF0Y2ggb3B0aW9ucyAobW9zdCBjYWxsZXJzIGRvIG5vdCBuZWVkIHRoZXNlKSDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogQ3VzdG9tIGVycm9yIGNsYXNzaWZpZXIgZm9yIHRocm90dGxpbmcgZGV0ZWN0aW9uLiBSZXR1cm4gYHRydWVgIGlmIGEgZm9ya1xuICAgKiBjaGlsZCdzIGVycm9yIHJlcHJlc2VudHMgYSByYXRlLWxpbWl0IG9yIGJhY2twcmVzc3VyZSBjb25kaXRpb247IHRoZVxuICAgKiBleGVjdXRvciB0aGVuIGZpcmVzIGBGbG93UmVjb3JkZXIub25UaHJvdHRsZWRgIGZvciB0aGF0IGNoaWxkICg5LjM5LjAg4oCUXG4gICAqIGFuIEVWRU5ULCBub3QgYSBzdGF0ZSBrZXk6IHRoZSBgbW9uaXRvci5pc1Rocm90dGxlZGAgd3JpdGUgaXQgcmVwbGFjZWRcbiAgICogbmV2ZXIgbGFuZGVkKS4gVGhlIGNoaWxkJ3MgZmFpbHVyZSBpcyBvdGhlcndpc2UgaGFuZGxlZCBhcyBiZWZvcmUuXG4gICAqIERlZmF1bHRzIHRvIG5vIHRocm90dGxpbmcgY2xhc3NpZmljYXRpb24uXG4gICAqL1xuICB0aHJvdHRsaW5nRXJyb3JDaGVja2VyPzogKGVycm9yOiB1bmtub3duKSA9PiBib29sZWFuO1xuICAvKiogSGFuZGxlcnMgZm9yIHN0cmVhbWluZyBzdGFnZSBsaWZlY3ljbGUgZXZlbnRzIChzZWUgYGFkZFN0cmVhbWluZ0Z1bmN0aW9uYCkuICovXG4gIHN0cmVhbUhhbmRsZXJzPzogU3RyZWFtSGFuZGxlcnM7XG4gIC8qKiBTY29wZSBwcm90ZWN0aW9uIG1vZGUgZm9yIFR5cGVkU2NvcGUgZGlyZWN0LWFzc2lnbm1lbnQgZGV0ZWN0aW9uLiAqL1xuICBzY29wZVByb3RlY3Rpb25Nb2RlPzogU2NvcGVQcm90ZWN0aW9uTW9kZTtcbn1cblxuLyoqIFdoYXQgdGhlIGV4ZWN1dG9yIGtlZXBzIGZyb20gY29uc3RydWN0aW9uIOKAlCByZWFkIGJ5IGV2ZXJ5IGxlZyAoYHJ1bigpYCAvIGByZXN1bWUoKWApLiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeGVjdXRvckFyZ3M8VE91dCwgVFNjb3BlPiB7XG4gIGZsb3dDaGFydDogRmxvd0NoYXJ0PFRPdXQsIFRTY29wZT47XG4gIHNjb3BlRmFjdG9yeTogU2NvcGVGYWN0b3J5PFRTY29wZT47XG4gIGRlZmF1bHRWYWx1ZXNGb3JDb250ZXh0PzogdW5rbm93bjtcbiAgaW5pdGlhbENvbnRleHQ/OiB1bmtub3duO1xuICByZWFkT25seUNvbnRleHQ/OiB1bmtub3duO1xuICB0aHJvdHRsaW5nRXJyb3JDaGVja2VyPzogKGVycm9yOiB1bmtub3duKSA9PiBib29sZWFuO1xuICBzdHJlYW1IYW5kbGVycz86IFN0cmVhbUhhbmRsZXJzO1xuICBzY29wZVByb3RlY3Rpb25Nb2RlPzogU2NvcGVQcm90ZWN0aW9uTW9kZTtcbiAgLyoqIFRoZSBkaWFscyBhcyBnaXZlbiAoYWJzZW50ID0gZGVmYXVsdCkg4oCUIHRoZSBydW4ncyBwb2xpY3kgaXMgYnVpbHQgZnJvbSB0aGVtIHBlciBsZWcuICovXG4gIGRpYWxzOiBSdW5EaWFscztcbiAgLyoqIFRoZSByZWNvcmQgc2luaywgcmVzb2x2ZWQgYW5kIGNoZWNrZWQgYXQgY29uc3RydWN0aW9uICgxMC4xLCBQNikuICovXG4gIHNpbms/OiBSZXNvbHZlZFJlY29yZFNpbms7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBlaXRoZXIgY29uc3RydWN0b3IgZm9ybS4gVGhlIDItcGFyYW0gZm9ybSBpcyB0aGUgb3B0aW9ucyBmb3JtIHdpdGhcbiAqIG9ubHkgYHNjb3BlRmFjdG9yeWA7IHRoZSBzY29wZSBmYWN0b3J5IGZhbGxzIGJhY2sgdG8gdGhlIGNoYXJ0J3MsIHRoZW4gdG8gYVxuICogcGxhaW4gYFNjb3BlRmFjYWRlYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVFeGVjdXRvckFyZ3M8VE91dCwgVFNjb3BlPihcbiAgZmxvd0NoYXJ0OiBGbG93Q2hhcnQ8VE91dCwgVFNjb3BlPixcbiAgZmFjdG9yeU9yT3B0aW9uczogU2NvcGVGYWN0b3J5PFRTY29wZT4gfCBGbG93Q2hhcnRFeGVjdXRvck9wdGlvbnM8VFNjb3BlPiB8IHVuZGVmaW5lZCxcbik6IEV4ZWN1dG9yQXJnczxUT3V0LCBUU2NvcGU+IHtcbiAgY29uc3Qgb3B0czogRmxvd0NoYXJ0RXhlY3V0b3JPcHRpb25zPFRTY29wZT4gPVxuICAgIHR5cGVvZiBmYWN0b3J5T3JPcHRpb25zID09PSAnZnVuY3Rpb24nID8geyBzY29wZUZhY3Rvcnk6IGZhY3RvcnlPck9wdGlvbnMgfSA6IGZhY3RvcnlPck9wdGlvbnMgPz8ge307XG4gIHJldHVybiB7XG4gICAgZmxvd0NoYXJ0LFxuICAgIHNjb3BlRmFjdG9yeTogb3B0cy5zY29wZUZhY3RvcnkgPz8gZmxvd0NoYXJ0LnNjb3BlRmFjdG9yeSA/PyAoZGVmYXVsdFNjb3BlRmFjdG9yeSBhcyBTY29wZUZhY3Rvcnk8VFNjb3BlPiksXG4gICAgZGVmYXVsdFZhbHVlc0ZvckNvbnRleHQ6IG9wdHMuZGVmYXVsdFZhbHVlc0ZvckNvbnRleHQsXG4gICAgaW5pdGlhbENvbnRleHQ6IG9wdHMuaW5pdGlhbENvbnRleHQsXG4gICAgcmVhZE9ubHlDb250ZXh0OiBvcHRzLnJlYWRPbmx5Q29udGV4dCxcbiAgICB0aHJvdHRsaW5nRXJyb3JDaGVja2VyOiBvcHRzLnRocm90dGxpbmdFcnJvckNoZWNrZXIsXG4gICAgc3RyZWFtSGFuZGxlcnM6IG9wdHMuc3RyZWFtSGFuZGxlcnMsXG4gICAgc2NvcGVQcm90ZWN0aW9uTW9kZTogb3B0cy5zY29wZVByb3RlY3Rpb25Nb2RlLFxuICAgIGRpYWxzOiBwaWNrRGlhbHMob3B0cyksXG4gICAgLi4uKG9wdHMuc2luayAhPT0gdW5kZWZpbmVkICYmIHsgc2luazogcmVzb2x2ZVJlY29yZFNpbmsob3B0cy5zaW5rKSB9KSxcbiAgfTtcbn1cbiJdfQ==
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcnVubmVyL29wdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7R0FNRzs7O0FBT0gseURBQW1EO0FBRW5ELDREQUFzRDtBQUN0RCxtREFBb0c7QUFFcEcsMEVBQTBFO0FBQzFFLE1BQU0sbUJBQW1CLEdBQWlCLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FDMUUsSUFBSSw0QkFBVyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBdUdqRDs7OztHQUlHO0FBQ0gsU0FBZ0IsbUJBQW1CLENBQ2pDLFNBQWtDLEVBQ2xDLGdCQUFxRjtJQUVyRixNQUFNLElBQUksR0FDUixPQUFPLGdCQUFnQixLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDO0lBQ3ZHLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDbEUsSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxPQUFPLENBQUM7UUFBRSxNQUFNLElBQUksU0FBUyxDQUFDLGdDQUFnQyxDQUFDLENBQUM7SUFDakcsTUFBTSxNQUFNLEdBQUcsSUFBSSxFQUFFLEtBQUssQ0FBQztJQUMzQixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLE1BQU0sS0FBSyxHQUFHLElBQUEsd0JBQVMsRUFB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QUksSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0tBQ3RCLENBQUM7QUFDSixDQUFDO0FBN0RELGtEQTZEQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogb3B0aW9ucyDigJQgdGhlIGV4ZWN1dG9yJ3MgY29uc3RydWN0aW9uIG9wdGlvbnMgYW5kIGhvdyB0aGV5IHJlc29sdmUgKEY5KS5cbiAqXG4gKiBgRmxvd0NoYXJ0RXhlY3V0b3JPcHRpb25zYCBpcyB0aGUgcHVibGljIG9wdGlvbnMgb2JqZWN0O1xuICogYHJlc29sdmVFeGVjdXRvckFyZ3NgIHR1cm5zIGVpdGhlciBjb25zdHJ1Y3RvciBmb3JtIChvcHRpb25zIG9iamVjdCwgb3IgYVxuICogYmFyZSBgU2NvcGVGYWN0b3J5YCkgaW50byB0aGUgYEV4ZWN1dG9yQXJnc2AgdGhlIGV4ZWN1dG9yIGtlZXBzIGZvciBldmVyeSBsZWcuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBSZWFkU291cmNlTGltaXRzIH0gZnJvbSAnZm9vdHRyYWNlL3dyaXRlJztcblxuaW1wb3J0IHR5cGUgeyBGbG93Q2hhcnQgfSBmcm9tICcuLi9idWlsZGVyL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgU2NvcGVGYWN0b3J5LCBTdHJlYW1IYW5kbGVycyB9IGZyb20gJy4uL2VuZ2luZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFJ1bkRpYWxzIH0gZnJvbSAnLi4vbWVtb3J5L3J1blBvbGljeS5qcyc7XG5pbXBvcnQgeyBwaWNrRGlhbHMgfSBmcm9tICcuLi9tZW1vcnkvcnVuUG9saWN5LmpzJztcbmltcG9ydCB0eXBlIHsgU2NvcGVQcm90ZWN0aW9uTW9kZSB9IGZyb20gJy4uL3Njb3BlL3Byb3RlY3Rpb24vdHlwZXMuanMnO1xuaW1wb3J0IHsgU2NvcGVGYWNhZGUgfSBmcm9tICcuLi9zY29wZS9TY29wZUZhY2FkZS5qcyc7XG5pbXBvcnQgeyB0eXBlIFJlY29yZFNpbmtPcHRpb24sIHR5cGUgUmVzb2x2ZWRSZWNvcmRTaW5rLCByZXNvbHZlUmVjb3JkU2luayB9IGZyb20gJy4vcmVjb3JkU2luay5qcyc7XG5cbi8qKiBEZWZhdWx0IHNjb3BlIGZhY3Rvcnkg4oCUIGNyZWF0ZXMgYSBwbGFpbiBTY29wZUZhY2FkZSBmb3IgZWFjaCBzdGFnZS4gKi9cbmNvbnN0IGRlZmF1bHRTY29wZUZhY3Rvcnk6IFNjb3BlRmFjdG9yeSA9IChjdHgsIHN0YWdlTmFtZSwgcmVhZE9ubHksIGVudikgPT5cbiAgbmV3IFNjb3BlRmFjYWRlKGN0eCwgc3RhZ2VOYW1lLCByZWFkT25seSwgZW52KTtcblxuLyoqXG4gKiBPcHRpb25zIG9iamVjdCBmb3IgYEZsb3dDaGFydEV4ZWN1dG9yYCDigJQgcHJlZmVycmVkIG92ZXIgcG9zaXRpb25hbCBwYXJhbXMuXG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgZXggPSBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHtcbiAqICAgc2NvcGVGYWN0b3J5OiBteUZhY3RvcnksXG4gKiAgIGRlZmF1bHRWYWx1ZXNGb3JDb250ZXh0OiB7IC4uLiB9LFxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiAqKlN5bmMgbm90ZSBmb3IgbWFpbnRhaW5lcnM6KiogYSBmaWVsZCBhZGRlZCBoZXJlIG11c3QgYWxzbyBiZSBhZGRlZCB0b1xuICogYEV4ZWN1dG9yQXJnc2AgYW5kIGByZXNvbHZlRXhlY3V0b3JBcmdzYCBiZWxvdywgb3IgaXQgaXMgYWNjZXB0ZWQgYW5kIG5ldmVyXG4gKiBhcHBsaWVkLiBUaGUgRElBTFMgYXJlIHRoZSBleGNlcHRpb246IHRoZXkgY29tZSBmcm9tIGBSdW5EaWFsc2AgYW5kIHRyYXZlbFxuICogd2hvbGUgYXMgYGRpYWxzYC5cbiAqXG4gKiAqKlRTY29wZSBpbmZlcmVuY2Ugbm90ZToqKiBXaGVuIHVzaW5nIHRoZSBvcHRpb25zLW9iamVjdCBmb3JtIHdpdGggYSBjdXN0b20gc2NvcGUsXG4gKiBUeXBlU2NyaXB0IGNhbm5vdCBpbmZlciBgVFNjb3BlYCB0aHJvdWdoIHRoZSBvcHRpb25zIG9iamVjdC4gUGFzcyB0aGUgdHlwZVxuICogZXhwbGljaXRseTogYG5ldyBGbG93Q2hhcnRFeGVjdXRvcjxUT3V0LCBNeVNjb3BlPihjaGFydCwgeyBzY29wZUZhY3RvcnkgfSlgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dDaGFydEV4ZWN1dG9yT3B0aW9uczxUU2NvcGUgPSBhbnk+IGV4dGVuZHMgUnVuRGlhbHMge1xuICAvLyDilIDilIAgQ29tbW9uIG9wdGlvbnMgKG1vc3QgY2FsbGVycyBuZWVkIG9ubHkgdGhlc2UpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBDdXN0b20gc2NvcGUgZmFjdG9yeS4gRGVmYXVsdHMgdG8gVHlwZWRTY29wZSBvciBTY29wZUZhY2FkZSBhdXRvLWRldGVjdGlvbi4gKi9cbiAgc2NvcGVGYWN0b3J5PzogU2NvcGVGYWN0b3J5PFRTY29wZT47XG5cbiAgLy8g4pSA4pSAIENvbnRleHQgb3B0aW9ucyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogRGVmYXVsdCB2YWx1ZXMgcHJlLXBvcHVsYXRlZCBpbnRvIHRoZSBzaGFyZWQgY29udGV4dCBiZWZvcmUgKiplYWNoKiogc3RhZ2VcbiAgICogKHJlLWFwcGxpZWQgZXZlcnkgc3RhZ2UsIGFjdGluZyBhcyBiYXNlbGluZSBkZWZhdWx0cykuXG4gICAqL1xuICBkZWZhdWx0VmFsdWVzRm9yQ29udGV4dD86IHVua25vd247XG4gIC8qKlxuICAgKiBJbml0aWFsIGNvbnRleHQgdmFsdWVzIG1lcmdlZCBpbnRvIHRoZSBzaGFyZWQgY29udGV4dCAqKm9uY2UqKiBhdCBzdGFydHVwXG4gICAqIChhcHBsaWVkIGJlZm9yZSB0aGUgZmlyc3Qgc3RhZ2UsIG5vdCByZXBlYXRlZCBvbiBzdWJzZXF1ZW50IHN0YWdlcykuXG4gICAqIERpc3RpbmN0IGZyb20gYGRlZmF1bHRWYWx1ZXNGb3JDb250ZXh0YCwgd2hpY2ggaXMgcmUtYXBwbGllZCBldmVyeSBzdGFnZS5cbiAgICovXG4gIGluaXRpYWxDb250ZXh0PzogdW5rbm93bjtcbiAgLyoqIFJlYWQtb25seSBpbnB1dCBhY2Nlc3NpYmxlIHZpYSBgc2NvcGUuZ2V0QXJncygpYCDigJQgbmV2ZXIgdHJhY2tlZCBvciB3cml0dGVuLiAqL1xuICByZWFkT25seUNvbnRleHQ/OiB1bmtub3duO1xuXG4gIC8vIOKUgOKUgCBPYnNlcnZhYmlsaXR5IGNvc3Qgb3B0aW9ucyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgLy8gVGhlIGZvdXIgZGlhbHMg4oCUIGByZWFkVHJhY2tpbmdgLCBgd3JpdGVUcmFja2luZ2AsIGBjb21taXRWYWx1ZXNgLFxuICAvLyBgd3JpdGVQcm92ZW5hbmNlYCDigJQgYXJlIGluaGVyaXRlZCBmcm9tIGBSdW5EaWFsc2AgKG1lbW9yeS9ydW5Qb2xpY3kudHMsXG4gIC8vIHdoZXJlIGVhY2ggaXMgZG9jdW1lbnRlZCk6IHRoZSBleGVjdXRvciBwaWNrcyB0aGVtIG9mZiB0aGlzIG9iamVjdCBhbmRcbiAgLy8gYnVpbGRzIHRoZSBydW4ncyBPTkUgcG9saWN5IGZyb20gdGhlbSAoRjUpLlxuXG4gIC8vIOKUgOKUgCBUaGUgY3Jhc2gtc2FmZSByZWNvcmQgKDEwLjEsIFA2KSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogV2hlcmUgdGhlIHJ1bidzIHJlY29yZCBnb2VzIEFTIElUIExBTkRTLCBzbyBhIHJ1biB0aGF0IG5ldmVyIGZpbmlzaGVzIHN0aWxsIGxlYXZlcyBpdDogZXZlcnkgbG9nIG9mIHRoZSBydW5cbiAgICogKHRoZSByb290IGFuZCBlYWNoIHN1YmZsb3cgbW91bnQpIGhhbmRzIHRoZSBzaW5rIGl0cyBgb3BlbmVkYCBiYXNlLCBlYWNoIGNvbW1pdCwgYSBub3RlIHBlciBhdHRlbXB0IHRoYXQgZW5kZWQsXG4gICAqIGFuZCBpdHMgYGNsb3NlZGAgb3V0Y29tZS4gYGZpbGVTaW5rKHBhdGgpYCAoYGZvb3RwcmludGpzL3NpbmtzYCwgTm9kZSkgb3IgYG1lbW9yeVNpbmsoKWAgKGBmb290dHJhY2Uvd3JpdGVgKTtcbiAgICogcmVhZCBpdCBiYWNrIHdpdGggYHJlYWRTdG9yZWRSZWNvcmRgIChgZm9vdHRyYWNlYCkuIFRoZSByZWRhY3Rpb24gcG9saWN5IGFwcGxpZXMgYmVmb3JlIGFueSBlbnRyeSBpcyB3cml0dGVuLlxuICAgKiBBIGZhaWxpbmcgc2luayBuZXZlciBzdG9wcyB0aGUgcnVuIChgb25GYWlsdXJlOiAncmVwb3J0J2AsIHRoZSBkZWZhdWx0KSDigJQgYGdldFNuYXBzaG90KCkuc2lua2AgY291bnRzIHdoYXQgd2FzXG4gICAqIGxvc3QuIFNlZSB0aGUgZ3VpZGUncyBcIkEgY3Jhc2gtc2FmZSByZWNvcmRcIi5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBleGVjdXRvciA9IG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCwgeyBzaW5rOiBmaWxlU2luaygnL3Zhci9mb290cHJpbnQvcnVuLmpzb25sJykgfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgc2luaz86IFJlY29yZFNpbmtPcHRpb247XG5cbiAgLyoqIE9wdCBpbiB0byBhIHZlcnNpb25lZCwgbWVtb3J5LW9ubHkgcm9vdC1sb2cgY2FwdHVyZSBub3RlIG9uIHNuYXBzaG90cyAoIzExMSBzdGFnZSAxKS4gKi9cbiAgY2FwdHVyZUNvdmVyYWdlPzogYm9vbGVhbjtcblxuICAvLyDilIDilIAgQWR2YW5jZWQgLyBlc2NhcGUtaGF0Y2ggb3B0aW9ucyAobW9zdCBjYWxsZXJzIGRvIG5vdCBuZWVkIHRoZXNlKSDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogQ3VzdG9tIGVycm9yIGNsYXNzaWZpZXIgZm9yIHRocm90dGxpbmcgZGV0ZWN0aW9uLiBSZXR1cm4gYHRydWVgIGlmIGEgZm9ya1xuICAgKiBjaGlsZCdzIGVycm9yIHJlcHJlc2VudHMgYSByYXRlLWxpbWl0IG9yIGJhY2twcmVzc3VyZSBjb25kaXRpb247IHRoZVxuICAgKiBleGVjdXRvciB0aGVuIGZpcmVzIGBGbG93UmVjb3JkZXIub25UaHJvdHRsZWRgIGZvciB0aGF0IGNoaWxkICg5LjM5LjAg4oCUXG4gICAqIGFuIEVWRU5ULCBub3QgYSBzdGF0ZSBrZXk6IHRoZSBgbW9uaXRvci5pc1Rocm90dGxlZGAgd3JpdGUgaXQgcmVwbGFjZWRcbiAgICogbmV2ZXIgbGFuZGVkKS4gVGhlIGNoaWxkJ3MgZmFpbHVyZSBpcyBvdGhlcndpc2UgaGFuZGxlZCBhcyBiZWZvcmUuXG4gICAqIERlZmF1bHRzIHRvIG5vIHRocm90dGxpbmcgY2xhc3NpZmljYXRpb24uXG4gICAqL1xuICB0aHJvdHRsaW5nRXJyb3JDaGVja2VyPzogKGVycm9yOiB1bmtub3duKSA9PiBib29sZWFuO1xuICAvKiogSGFuZGxlcnMgZm9yIHN0cmVhbWluZyBzdGFnZSBsaWZlY3ljbGUgZXZlbnRzIChzZWUgYGFkZFN0cmVhbWluZ0Z1bmN0aW9uYCkuICovXG4gIHN0cmVhbUhhbmRsZXJzPzogU3RyZWFtSGFuZGxlcnM7XG4gIC8qKiBTY29wZSBwcm90ZWN0aW9uIG1vZGUgZm9yIFR5cGVkU2NvcGUgZGlyZWN0LWFzc2lnbm1lbnQgZGV0ZWN0aW9uLiAqL1xuICBzY29wZVByb3RlY3Rpb25Nb2RlPzogU2NvcGVQcm90ZWN0aW9uTW9kZTtcbn1cblxuLyoqIFdoYXQgdGhlIGV4ZWN1dG9yIGtlZXBzIGZyb20gY29uc3RydWN0aW9uIOKAlCByZWFkIGJ5IGV2ZXJ5IGxlZyAoYHJ1bigpYCAvIGByZXN1bWUoKWApLiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeGVjdXRvckFyZ3M8VE91dCwgVFNjb3BlPiB7XG4gIGZsb3dDaGFydDogRmxvd0NoYXJ0PFRPdXQsIFRTY29wZT47XG4gIHNjb3BlRmFjdG9yeTogU2NvcGVGYWN0b3J5PFRTY29wZT47XG4gIGRlZmF1bHRWYWx1ZXNGb3JDb250ZXh0PzogdW5rbm93bjtcbiAgaW5pdGlhbENvbnRleHQ/OiB1bmtub3duO1xuICByZWFkT25seUNvbnRleHQ/OiB1bmtub3duO1xuICB0aHJvdHRsaW5nRXJyb3JDaGVja2VyPzogKGVycm9yOiB1bmtub3duKSA9PiBib29sZWFuO1xuICBzdHJlYW1IYW5kbGVycz86IFN0cmVhbUhhbmRsZXJzO1xuICBzY29wZVByb3RlY3Rpb25Nb2RlPzogU2NvcGVQcm90ZWN0aW9uTW9kZTtcbiAgLyoqIFRoZSBkaWFscyBhcyBnaXZlbiAoYWJzZW50ID0gZGVmYXVsdCkg4oCUIHRoZSBydW4ncyBwb2xpY3kgaXMgYnVpbHQgZnJvbSB0aGVtIHBlciBsZWcuICovXG4gIGRpYWxzOiBSdW5EaWFscztcbiAgLyoqIFRoZSByZWNvcmQgc2luaywgcmVzb2x2ZWQgYW5kIGNoZWNrZWQgYXQgY29uc3RydWN0aW9uICgxMC4xLCBQNikuICovXG4gIHNpbms/OiBSZXNvbHZlZFJlY29yZFNpbms7XG4gIGNhcHR1cmVDb3ZlcmFnZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUmVzb2x2ZSBlaXRoZXIgY29uc3RydWN0b3IgZm9ybS4gVGhlIDItcGFyYW0gZm9ybSBpcyB0aGUgb3B0aW9ucyBmb3JtIHdpdGhcbiAqIG9ubHkgYHNjb3BlRmFjdG9yeWA7IHRoZSBzY29wZSBmYWN0b3J5IGZhbGxzIGJhY2sgdG8gdGhlIGNoYXJ0J3MsIHRoZW4gdG8gYVxuICogcGxhaW4gYFNjb3BlRmFjYWRlYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVFeGVjdXRvckFyZ3M8VE91dCwgVFNjb3BlPihcbiAgZmxvd0NoYXJ0OiBGbG93Q2hhcnQ8VE91dCwgVFNjb3BlPixcbiAgZmFjdG9yeU9yT3B0aW9uczogU2NvcGVGYWN0b3J5PFRTY29wZT4gfCBGbG93Q2hhcnRFeGVjdXRvck9wdGlvbnM8VFNjb3BlPiB8IHVuZGVmaW5lZCxcbik6IEV4ZWN1dG9yQXJnczxUT3V0LCBUU2NvcGU+IHtcbiAgY29uc3Qgb3B0czogRmxvd0NoYXJ0RXhlY3V0b3JPcHRpb25zPFRTY29wZT4gPVxuICAgIHR5cGVvZiBmYWN0b3J5T3JPcHRpb25zID09PSAnZnVuY3Rpb24nID8geyBzY29wZUZhY3Rvcnk6IGZhY3RvcnlPck9wdGlvbnMgfSA6IGZhY3RvcnlPck9wdGlvbnMgPz8ge307XG4gIGNvbnN0IHNsb3QgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9wdHMsICdyZWFkU291cmNlcycpO1xuICBpZiAoc2xvdCAmJiAhT2JqZWN0Lmhhc093bihzbG90LCAndmFsdWUnKSkgdGhyb3cgbmV3IFR5cGVFcnJvcigncmVhZFNvdXJjZXMgbXVzdCBiZSBwbGFpbiBkYXRhJyk7XG4gIGNvbnN0IHNvdXJjZSA9IHNsb3Q/LnZhbHVlO1xuICBjb25zdCBkaWFsSW5wdXQgPSBPYmplY3QuY3JlYXRlKG9wdHMpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZGlhbElucHV0LCAncmVhZFNvdXJjZXMnLCB7IHZhbHVlOiBzb3VyY2UgfSk7XG4gIGNvbnN0IGRpYWxzID0gcGlja0RpYWxzKGRpYWxJbnB1dCk7XG4gIGlmIChzb3VyY2UgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygc291cmNlICE9PSAnYm9vbGVhbicpIHtcbiAgICBjb25zdCBsaW1pdHMgPVxuICAgICAgc291cmNlICYmIHR5cGVvZiBzb3VyY2UgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHNvdXJjZSlcbiAgICAgICAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwgJ2xpbWl0cycpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIGlmIChcbiAgICAgICFsaW1pdHMgfHxcbiAgICAgICFPYmplY3QuaGFzT3duKGxpbWl0cywgJ3ZhbHVlJykgfHxcbiAgICAgICFsaW1pdHMudmFsdWUgfHxcbiAgICAgIHR5cGVvZiBsaW1pdHMudmFsdWUgIT09ICdvYmplY3QnIHx8XG4gICAgICBBcnJheS5pc0FycmF5KGxpbWl0cy52YWx1ZSlcbiAgICApXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdyZWFkU291cmNlcyBtdXN0IGJlIGEgYm9vbGVhbiBvciBhbiBvYmplY3Qgd2l0aCBsaW1pdHMnKTtcbiAgICAvLyBDYXB0dXJlIGEgcGxhaW4gaW1tdXRhYmxlIHNldHRpbmdzIHNuYXBzaG90OyBubyBhcHAgZ2V0dGVyIHJ1bnMgYW5kIGxhdGVyIGVkaXRzIGNhbm5vdCByZXNpemUgYSBydW4uXG4gICAgY29uc3QgY29waWVkOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICBjb25zdCBmaWVsZHM6IHJlYWRvbmx5IChrZXlvZiBSZWFkU291cmNlTGltaXRzKVtdID0gW1xuICAgICAgJ21heE9jY3VycmVuY2VzJyxcbiAgICAgICdtYXhQZXJFeGVjdXRpb24nLFxuICAgICAgJ21heEJ5dGVzJyxcbiAgICAgICdtYXhPcmlnaW5zJyxcbiAgICAgICdtYXhTdGFnaW5nJyxcbiAgICBdO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGZpZWxkcykge1xuICAgICAgY29uc3QgbGltaXQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGxpbWl0cy52YWx1ZSwga2V5KTtcbiAgICAgIGlmICghbGltaXQpIGNvbnRpbnVlO1xuICAgICAgaWYgKCFPYmplY3QuaGFzT3duKGxpbWl0LCAndmFsdWUnKSkgdGhyb3cgbmV3IFR5cGVFcnJvcigncmVhZFNvdXJjZXMgbGltaXRzIG11c3QgYmUgcGxhaW4gdmFsdWVzJyk7XG4gICAgICBjb3BpZWRba2V5XSA9IGxpbWl0LnZhbHVlO1xuICAgIH1cbiAgICBkaWFscy5yZWFkU291cmNlcyA9IE9iamVjdC5mcmVlemUoeyBsaW1pdHM6IE9iamVjdC5mcmVlemUoY29waWVkKSB9KTtcbiAgfVxuICBpZiAob3B0cy5jYXB0dXJlQ292ZXJhZ2UgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb3B0cy5jYXB0dXJlQ292ZXJhZ2UgIT09ICdib29sZWFuJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2NhcHR1cmVDb3ZlcmFnZSBtdXN0IGJlIGEgYm9vbGVhbicpO1xuICB9XG4gIGNvbnN0IHNpbmsgPSBvcHRzLnNpbmsgIT09IHVuZGVmaW5lZCA/IHJlc29sdmVSZWNvcmRTaW5rKG9wdHMuc2luaykgOiB1bmRlZmluZWQ7XG4gIGlmIChzaW5rPy5jYXB0dXJlICYmIG9wdHMuY2FwdHVyZUNvdmVyYWdlICE9PSB0cnVlKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NpbmsuY2FwdHVyZSByZXF1aXJlcyBjYXB0dXJlQ292ZXJhZ2U6IHRydWUnKTtcbiAgcmV0dXJuIHtcbiAgICBmbG93Q2hhcnQsXG4gICAgc2NvcGVGYWN0b3J5OiBvcHRzLnNjb3BlRmFjdG9yeSA/PyBmbG93Q2hhcnQuc2NvcGVGYWN0b3J5ID8/IChkZWZhdWx0U2NvcGVGYWN0b3J5IGFzIFNjb3BlRmFjdG9yeTxUU2NvcGU+KSxcbiAgICBkZWZhdWx0VmFsdWVzRm9yQ29udGV4dDogb3B0cy5kZWZhdWx0VmFsdWVzRm9yQ29udGV4dCxcbiAgICBpbml0aWFsQ29udGV4dDogb3B0cy5pbml0aWFsQ29udGV4dCxcbiAgICByZWFkT25seUNvbnRleHQ6IG9wdHMucmVhZE9ubHlDb250ZXh0LFxuICAgIHRocm90dGxpbmdFcnJvckNoZWNrZXI6IG9wdHMudGhyb3R0bGluZ0Vycm9yQ2hlY2tlcixcbiAgICBzdHJlYW1IYW5kbGVyczogb3B0cy5zdHJlYW1IYW5kbGVycyxcbiAgICBzY29wZVByb3RlY3Rpb25Nb2RlOiBvcHRzLnNjb3BlUHJvdGVjdGlvbk1vZGUsXG4gICAgZGlhbHMsXG4gICAgLi4uKG9wdHMuY2FwdHVyZUNvdmVyYWdlID09PSB0cnVlICYmIHsgY2FwdHVyZUNvdmVyYWdlOiB0cnVlIH0pLFxuICAgIC4uLihzaW5rICYmIHsgc2luayB9KSxcbiAgfTtcbn1cbiJdfQ==
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.readStoredCapture = void 0;
4
+ const foottrace_1 = require("foottrace");
5
+ const historyData_js_1 = require("../capture/historyData.js");
6
+ const storedCaptureAdmission_js_1 = require("./storedCaptureAdmission.js");
7
+ /** Only inert bounded data reaches the generic record reader. The outer iterable remains host-owned. */
8
+ function* inertEntries(entries, maxBytes) {
9
+ let remaining = maxBytes * 4;
10
+ for (const entry of entries) {
11
+ const copied = (0, historyData_js_1.copyHistoryData)(entry, remaining);
12
+ remaining -= new TextEncoder().encode(JSON.stringify(copied)).length;
13
+ yield copied;
14
+ }
15
+ }
16
+ /**
17
+ * Read authorized stored entries using Foottrace's sequence/gap checks, then validate FootPrint's opaque metadata.
18
+ * A receipt is a host-adapter assertion, not a signature. Callers still own storage authorization and trust.
19
+ * Never performs causal analysis or upgrades partial native capture to complete.
20
+ */
21
+ async function readStoredCapture(entries, options) {
22
+ const unknown = (reason) => ({ status: 'unknown', reason });
23
+ try {
24
+ const maxBytes = options.maxBytes ?? 1024 * 1024;
25
+ if (!Number.isSafeInteger(maxBytes) || maxBytes < 1 || maxBytes > 8 * 1024 * 1024)
26
+ return unknown('reader-limit');
27
+ const stored = (0, foottrace_1.readStoredRecord)(inertEntries(entries, maxBytes), options.limits);
28
+ const log = stored.root(options.runId);
29
+ if (!log)
30
+ return unknown('root-missing');
31
+ if (!log.complete || log.gaps.length || stored.unread.length)
32
+ return unknown('history-incomplete');
33
+ return await (0, storedCaptureAdmission_js_1.admitStoredCapture)(log, options.runId, maxBytes);
34
+ }
35
+ catch (error) {
36
+ return unknown(error instanceof historyData_js_1.HistoryDataError && error.code === 'too-large' ? 'history-too-large' : 'history-refused');
37
+ }
38
+ }
39
+ exports.readStoredCapture = readStoredCapture;
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZFN0b3JlZENhcHR1cmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3J1bm5lci9yZWFkU3RvcmVkQ2FwdHVyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSx5Q0FBNkM7QUFFN0MsOERBQThFO0FBSzlFLDJFQUFpRTtBQXNCakUsd0dBQXdHO0FBQ3hHLFFBQVEsQ0FBQyxDQUFDLFlBQVksQ0FBQyxPQUEwQixFQUFFLFFBQWdCO0lBQ2pFLElBQUksU0FBUyxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUM7SUFDN0IsS0FBSyxNQUFNLEtBQUssSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM1QixNQUFNLE1BQU0sR0FBRyxJQUFBLGdDQUFlLEVBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2pELFNBQVMsSUFBSSxJQUFJLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQ3JFLE1BQU0sTUFBTSxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0ksS0FBSyxVQUFVLGlCQUFpQixDQUNyQyxPQUEwQixFQUMxQixPQUEwRTtJQUUxRSxNQUFNLE9BQU8sR0FBRyxDQUFDLE1BQWMsRUFBdUIsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDekYsSUFBSSxDQUFDO1FBQ0gsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLFFBQVEsR0FBRyxDQUFDLElBQUksUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSTtZQUFFLE9BQU8sT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2xILE1BQU0sTUFBTSxHQUFHLElBQUEsNEJBQWdCLEVBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsRUFBRSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakYsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU07WUFBRSxPQUFPLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ25HLE9BQU8sTUFBTSxJQUFBLDhDQUFrQixFQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ2hFLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsT0FBTyxPQUFPLENBQ1osS0FBSyxZQUFZLGlDQUFnQixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQzFHLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQztBQWxCRCw4Q0FrQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENvbW1pdEJ1bmRsZSwgU3RvcmVkUmVjb3JkTGltaXRzIH0gZnJvbSAnZm9vdHRyYWNlJztcbmltcG9ydCB7IHJlYWRTdG9yZWRSZWNvcmQgfSBmcm9tICdmb290dHJhY2UnO1xuXG5pbXBvcnQgeyBjb3B5SGlzdG9yeURhdGEsIEhpc3RvcnlEYXRhRXJyb3IgfSBmcm9tICcuLi9jYXB0dXJlL2hpc3RvcnlEYXRhLmpzJztcbmltcG9ydCB0eXBlIHsgQ2FwdHVyZUhpc3RvcnlSZWNlaXB0IH0gZnJvbSAnLi4vY2FwdHVyZS9oaXN0b3J5VHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBOYXRpdmVDYXB0dXJlTm90ZSB9IGZyb20gJy4uL2NhcHR1cmUvbmF0aXZlQ292ZXJhZ2UuanMnO1xuaW1wb3J0IHR5cGUgeyBTdGFnZVNuYXBzaG90IH0gZnJvbSAnLi4vbWVtb3J5L2ZyYW1lVHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBSZWNvcmRlclNuYXBzaG90IH0gZnJvbSAnLi9FeGVjdXRpb25SdW50aW1lLmpzJztcbmltcG9ydCB7IGFkbWl0U3RvcmVkQ2FwdHVyZSB9IGZyb20gJy4vc3RvcmVkQ2FwdHVyZUFkbWlzc2lvbi5qcyc7XG5cbi8qKiBFbmdpbmUgaGlzdG9yeSB3aG9zZSBzdG9yYWdlIGV2aWRlbmNlIG1hdGNoZWQuIENoYW5uZWxzIGFuZCBuYXRpdmUgbGltaXRhdGlvbnMgcmV0YWluIHRoZWlyIG9yaWdpbmFsIG1lYW5pbmdzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdG9yZWRDYXB0dXJlSGlzdG9yeSB7XG4gIHJlYWRvbmx5IHJ1bklkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNhcHR1cmU6IE5hdGl2ZUNhcHR1cmVOb3RlO1xuICByZWFkb25seSBleGVjdXRpb25UcmVlOiBTdGFnZVNuYXBzaG90O1xuICAvKipcbiAgICogU29ydGVkIGxpdGVyYWwgcGF0aHMgb2Ygb3duIHVuZGVmaW5lZCBzdGFnZVJlYWRzL3N0YWdlV3JpdGVzIGVudHJpZXMgb21pdHRlZCBieSBKU09OLlxuICAgKiBSZWFkIGFsb25nc2lkZSBleGVjdXRpb25UcmVlOyB0aGlzIGlzIG5vdCBwcm9vZiB0aGF0IHRoZSB1bmRlcmx5aW5nIHN0YXRlIGtleSBuZXZlciBleGlzdGVkLlxuICAgKiBBdCBtb3N0IDQwOTYgcGF0aHMgb2YgMjU2IHNlZ21lbnRzLCB3aXRoaW4gdGhlIGV2aWRlbmNlIGJ5dGUgbGltaXQuIE5vIGVudHJpZXMgYXJlIHRydW5jYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGFic2VudD86IHJlYWRvbmx5IChyZWFkb25seSBzdHJpbmdbXSlbXTtcbiAgcmVhZG9ubHkgcmVjb3JkZXJzPzogcmVhZG9ubHkgUmVjb3JkZXJTbmFwc2hvdFtdO1xuICByZWFkb25seSBjb21taXRMb2c6IHJlYWRvbmx5IENvbW1pdEJ1bmRsZVtdO1xuICByZWFkb25seSBpbml0aWFsU3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcmVhZG9ubHkgcmVjZWlwdDogQ2FwdHVyZUhpc3RvcnlSZWNlaXB0O1xufVxuZXhwb3J0IHR5cGUgU3RvcmVkQ2FwdHVyZVJlc3VsdCA9XG4gIHwgeyByZWFkb25seSBzdGF0dXM6ICdhY2tub3dsZWRnZWQnOyByZWFkb25seSBoaXN0b3J5OiBTdG9yZWRDYXB0dXJlSGlzdG9yeSB9XG4gIHwgeyByZWFkb25seSBzdGF0dXM6ICd1bmtub3duJzsgcmVhZG9ubHkgcmVhc29uOiBzdHJpbmc7IHJlYWRvbmx5IGhpc3Rvcnk/OiBuZXZlciB9O1xuXG4vKiogT25seSBpbmVydCBib3VuZGVkIGRhdGEgcmVhY2hlcyB0aGUgZ2VuZXJpYyByZWNvcmQgcmVhZGVyLiBUaGUgb3V0ZXIgaXRlcmFibGUgcmVtYWlucyBob3N0LW93bmVkLiAqL1xuZnVuY3Rpb24qIGluZXJ0RW50cmllcyhlbnRyaWVzOiBJdGVyYWJsZTx1bmtub3duPiwgbWF4Qnl0ZXM6IG51bWJlcik6IEl0ZXJhYmxlPHVua25vd24+IHtcbiAgbGV0IHJlbWFpbmluZyA9IG1heEJ5dGVzICogNDtcbiAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgY29uc3QgY29waWVkID0gY29weUhpc3RvcnlEYXRhKGVudHJ5LCByZW1haW5pbmcpO1xuICAgIHJlbWFpbmluZyAtPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoY29waWVkKSkubGVuZ3RoO1xuICAgIHlpZWxkIGNvcGllZDtcbiAgfVxufVxuXG4vKipcbiAqIFJlYWQgYXV0aG9yaXplZCBzdG9yZWQgZW50cmllcyB1c2luZyBGb290dHJhY2UncyBzZXF1ZW5jZS9nYXAgY2hlY2tzLCB0aGVuIHZhbGlkYXRlIEZvb3RQcmludCdzIG9wYXF1ZSBtZXRhZGF0YS5cbiAqIEEgcmVjZWlwdCBpcyBhIGhvc3QtYWRhcHRlciBhc3NlcnRpb24sIG5vdCBhIHNpZ25hdHVyZS4gQ2FsbGVycyBzdGlsbCBvd24gc3RvcmFnZSBhdXRob3JpemF0aW9uIGFuZCB0cnVzdC5cbiAqIE5ldmVyIHBlcmZvcm1zIGNhdXNhbCBhbmFseXNpcyBvciB1cGdyYWRlcyBwYXJ0aWFsIG5hdGl2ZSBjYXB0dXJlIHRvIGNvbXBsZXRlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFN0b3JlZENhcHR1cmUoXG4gIGVudHJpZXM6IEl0ZXJhYmxlPHVua25vd24+LFxuICBvcHRpb25zOiB7IHJ1bklkOiBzdHJpbmc7IGxpbWl0cz86IFN0b3JlZFJlY29yZExpbWl0czsgbWF4Qnl0ZXM/OiBudW1iZXIgfSxcbik6IFByb21pc2U8U3RvcmVkQ2FwdHVyZVJlc3VsdD4ge1xuICBjb25zdCB1bmtub3duID0gKHJlYXNvbjogc3RyaW5nKTogU3RvcmVkQ2FwdHVyZVJlc3VsdCA9PiAoeyBzdGF0dXM6ICd1bmtub3duJywgcmVhc29uIH0pO1xuICB0cnkge1xuICAgIGNvbnN0IG1heEJ5dGVzID0gb3B0aW9ucy5tYXhCeXRlcyA/PyAxMDI0ICogMTAyNDtcbiAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKG1heEJ5dGVzKSB8fCBtYXhCeXRlcyA8IDEgfHwgbWF4Qnl0ZXMgPiA4ICogMTAyNCAqIDEwMjQpIHJldHVybiB1bmtub3duKCdyZWFkZXItbGltaXQnKTtcbiAgICBjb25zdCBzdG9yZWQgPSByZWFkU3RvcmVkUmVjb3JkKGluZXJ0RW50cmllcyhlbnRyaWVzLCBtYXhCeXRlcyksIG9wdGlvbnMubGltaXRzKTtcbiAgICBjb25zdCBsb2cgPSBzdG9yZWQucm9vdChvcHRpb25zLnJ1bklkKTtcbiAgICBpZiAoIWxvZykgcmV0dXJuIHVua25vd24oJ3Jvb3QtbWlzc2luZycpO1xuICAgIGlmICghbG9nLmNvbXBsZXRlIHx8IGxvZy5nYXBzLmxlbmd0aCB8fCBzdG9yZWQudW5yZWFkLmxlbmd0aCkgcmV0dXJuIHVua25vd24oJ2hpc3RvcnktaW5jb21wbGV0ZScpO1xuICAgIHJldHVybiBhd2FpdCBhZG1pdFN0b3JlZENhcHR1cmUobG9nLCBvcHRpb25zLnJ1bklkLCBtYXhCeXRlcyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHVua25vd24oXG4gICAgICBlcnJvciBpbnN0YW5jZW9mIEhpc3RvcnlEYXRhRXJyb3IgJiYgZXJyb3IuY29kZSA9PT0gJ3Rvby1sYXJnZScgPyAnaGlzdG9yeS10b28tbGFyZ2UnIDogJ2hpc3RvcnktcmVmdXNlZCcsXG4gICAgKTtcbiAgfVxufVxuIl19