footprintjs 10.3.0 → 10.5.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 (146) hide show
  1. package/README.md +63 -25
  2. package/dist/esm/index.d.ts +2 -0
  3. package/dist/esm/index.js +1 -1
  4. package/dist/esm/lib/capture/absentEntries.d.ts +7 -0
  5. package/dist/esm/lib/capture/absentEntries.js +81 -0
  6. package/dist/esm/lib/capture/checkpointCapture.d.ts +11 -0
  7. package/dist/esm/lib/capture/checkpointCapture.js +104 -0
  8. package/dist/esm/lib/capture/historyData.d.ts +13 -0
  9. package/dist/esm/lib/capture/historyData.js +96 -0
  10. package/dist/esm/lib/capture/historyNote.d.ts +4 -0
  11. package/dist/esm/lib/capture/historyNote.js +57 -0
  12. package/dist/esm/lib/capture/historyTarget.d.ts +5 -0
  13. package/dist/esm/lib/capture/historyTarget.js +35 -0
  14. package/dist/esm/lib/capture/historyTypes.d.ts +39 -0
  15. package/dist/esm/lib/capture/historyTypes.js +4 -0
  16. package/dist/esm/lib/capture/nativeCoverage.d.ts +20 -7
  17. package/dist/esm/lib/capture/nativeCoverage.js +50 -12
  18. package/dist/esm/lib/capture/nativeSourceAddress.d.ts +3 -0
  19. package/dist/esm/lib/capture/nativeSourceAddress.js +15 -0
  20. package/dist/esm/lib/capture/noteShape.d.ts +10 -0
  21. package/dist/esm/lib/capture/noteShape.js +93 -0
  22. package/dist/esm/lib/capture/readSources.d.ts +49 -0
  23. package/dist/esm/lib/capture/readSources.js +99 -0
  24. package/dist/esm/lib/capture/sinkSettlement.d.ts +6 -0
  25. package/dist/esm/lib/capture/sinkSettlement.js +10 -0
  26. package/dist/esm/lib/capture/sourceReadCounts.d.ts +18 -0
  27. package/dist/esm/lib/capture/sourceReadCounts.js +27 -0
  28. package/dist/esm/lib/capture/sourceReferenceBudget.d.ts +10 -0
  29. package/dist/esm/lib/capture/sourceReferenceBudget.js +21 -0
  30. package/dist/esm/lib/capture/storedReadSourceCounts.d.ts +3 -0
  31. package/dist/esm/lib/capture/storedReadSourceCounts.js +78 -0
  32. package/dist/esm/lib/capture/storedReadSources.d.ts +4 -0
  33. package/dist/esm/lib/capture/storedReadSources.js +104 -0
  34. package/dist/esm/lib/engine/handlers/SubflowExecutor.js +14 -2
  35. package/dist/esm/lib/engine/handlers/servedSubflowResults.js +13 -2
  36. package/dist/esm/lib/engine/traversal/FlowchartTraverser.d.ts +1 -0
  37. package/dist/esm/lib/engine/types.d.ts +4 -0
  38. package/dist/esm/lib/engine/types.js +1 -1
  39. package/dist/esm/lib/memory/StageContext.d.ts +9 -0
  40. package/dist/esm/lib/memory/StageContext.js +96 -9
  41. package/dist/esm/lib/memory/frameTypes.d.ts +3 -0
  42. package/dist/esm/lib/memory/frameTypes.js +1 -1
  43. package/dist/esm/lib/memory/logAddress.d.ts +3 -0
  44. package/dist/esm/lib/memory/logAddress.js +7 -0
  45. package/dist/esm/lib/memory/runPolicy.d.ts +5 -1
  46. package/dist/esm/lib/memory/runPolicy.js +2 -1
  47. package/dist/esm/lib/pause/record.js +8 -2
  48. package/dist/esm/lib/pause/types.d.ts +2 -0
  49. package/dist/esm/lib/pause/types.js +1 -1
  50. package/dist/esm/lib/runner/ExecutionRuntime.d.ts +19 -3
  51. package/dist/esm/lib/runner/ExecutionRuntime.js +92 -6
  52. package/dist/esm/lib/runner/FlowChartExecutor.d.ts +3 -0
  53. package/dist/esm/lib/runner/FlowChartExecutor.js +50 -10
  54. package/dist/esm/lib/runner/attach.js +3 -1
  55. package/dist/esm/lib/runner/captureHistory.d.ts +8 -0
  56. package/dist/esm/lib/runner/captureHistory.js +112 -0
  57. package/dist/esm/lib/runner/checkpoint.d.ts +2 -0
  58. package/dist/esm/lib/runner/checkpoint.js +3 -1
  59. package/dist/esm/lib/runner/index.d.ts +1 -0
  60. package/dist/esm/lib/runner/index.js +1 -1
  61. package/dist/esm/lib/runner/options.js +42 -3
  62. package/dist/esm/lib/runner/readStoredCapture.d.ts +41 -0
  63. package/dist/esm/lib/runner/readStoredCapture.js +36 -0
  64. package/dist/esm/lib/runner/recordSink.d.ts +11 -0
  65. package/dist/esm/lib/runner/recordSink.js +48 -13
  66. package/dist/esm/lib/runner/snapshot.js +2 -2
  67. package/dist/esm/lib/runner/storedCaptureAdmission.d.ts +4 -0
  68. package/dist/esm/lib/runner/storedCaptureAdmission.js +99 -0
  69. package/dist/esm/lib/scope/ScopeFacade.js +2 -2
  70. package/dist/esm/lib/sinks/fileSink.d.ts +2 -1
  71. package/dist/esm/lib/sinks/fileSink.js +8 -2
  72. package/dist/esm/trace.d.ts +2 -0
  73. package/dist/esm/trace.js +2 -1
  74. package/dist/index.js +1 -1
  75. package/dist/lib/capture/absentEntries.js +86 -0
  76. package/dist/lib/capture/checkpointCapture.js +110 -0
  77. package/dist/lib/capture/historyData.js +104 -0
  78. package/dist/lib/capture/historyNote.js +61 -0
  79. package/dist/lib/capture/historyTarget.js +40 -0
  80. package/dist/lib/capture/historyTypes.js +7 -0
  81. package/dist/lib/capture/nativeCoverage.js +52 -13
  82. package/dist/lib/capture/nativeSourceAddress.js +19 -0
  83. package/dist/lib/capture/noteShape.js +103 -0
  84. package/dist/lib/capture/readSources.js +106 -0
  85. package/dist/lib/capture/sinkSettlement.js +14 -0
  86. package/dist/lib/capture/sourceReadCounts.js +31 -0
  87. package/dist/lib/capture/sourceReferenceBudget.js +25 -0
  88. package/dist/lib/capture/storedReadSourceCounts.js +82 -0
  89. package/dist/lib/capture/storedReadSources.js +108 -0
  90. package/dist/lib/engine/handlers/SubflowExecutor.js +14 -2
  91. package/dist/lib/engine/handlers/servedSubflowResults.js +13 -2
  92. package/dist/lib/engine/types.js +1 -1
  93. package/dist/lib/memory/StageContext.js +96 -9
  94. package/dist/lib/memory/frameTypes.js +1 -1
  95. package/dist/lib/memory/logAddress.js +11 -0
  96. package/dist/lib/memory/runPolicy.js +2 -1
  97. package/dist/lib/pause/record.js +8 -2
  98. package/dist/lib/pause/types.js +1 -1
  99. package/dist/lib/runner/ExecutionRuntime.js +91 -5
  100. package/dist/lib/runner/FlowChartExecutor.js +50 -10
  101. package/dist/lib/runner/attach.js +3 -1
  102. package/dist/lib/runner/captureHistory.js +116 -0
  103. package/dist/lib/runner/checkpoint.js +3 -1
  104. package/dist/lib/runner/index.js +1 -1
  105. package/dist/lib/runner/options.js +42 -3
  106. package/dist/lib/runner/readStoredCapture.js +40 -0
  107. package/dist/lib/runner/recordSink.js +50 -15
  108. package/dist/lib/runner/snapshot.js +2 -2
  109. package/dist/lib/runner/storedCaptureAdmission.js +103 -0
  110. package/dist/lib/scope/ScopeFacade.js +2 -2
  111. package/dist/lib/sinks/fileSink.js +8 -2
  112. package/dist/trace.js +4 -2
  113. package/dist/types/index.d.ts +2 -0
  114. package/dist/types/lib/capture/absentEntries.d.ts +7 -0
  115. package/dist/types/lib/capture/checkpointCapture.d.ts +11 -0
  116. package/dist/types/lib/capture/historyData.d.ts +13 -0
  117. package/dist/types/lib/capture/historyNote.d.ts +4 -0
  118. package/dist/types/lib/capture/historyTarget.d.ts +5 -0
  119. package/dist/types/lib/capture/historyTypes.d.ts +39 -0
  120. package/dist/types/lib/capture/nativeCoverage.d.ts +20 -7
  121. package/dist/types/lib/capture/nativeSourceAddress.d.ts +3 -0
  122. package/dist/types/lib/capture/noteShape.d.ts +10 -0
  123. package/dist/types/lib/capture/readSources.d.ts +49 -0
  124. package/dist/types/lib/capture/sinkSettlement.d.ts +6 -0
  125. package/dist/types/lib/capture/sourceReadCounts.d.ts +18 -0
  126. package/dist/types/lib/capture/sourceReferenceBudget.d.ts +10 -0
  127. package/dist/types/lib/capture/storedReadSourceCounts.d.ts +3 -0
  128. package/dist/types/lib/capture/storedReadSources.d.ts +4 -0
  129. package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +1 -0
  130. package/dist/types/lib/engine/types.d.ts +4 -0
  131. package/dist/types/lib/memory/StageContext.d.ts +9 -0
  132. package/dist/types/lib/memory/frameTypes.d.ts +3 -0
  133. package/dist/types/lib/memory/logAddress.d.ts +3 -0
  134. package/dist/types/lib/memory/runPolicy.d.ts +5 -1
  135. package/dist/types/lib/pause/types.d.ts +2 -0
  136. package/dist/types/lib/runner/ExecutionRuntime.d.ts +19 -3
  137. package/dist/types/lib/runner/FlowChartExecutor.d.ts +3 -0
  138. package/dist/types/lib/runner/captureHistory.d.ts +8 -0
  139. package/dist/types/lib/runner/checkpoint.d.ts +2 -0
  140. package/dist/types/lib/runner/index.d.ts +1 -0
  141. package/dist/types/lib/runner/readStoredCapture.d.ts +41 -0
  142. package/dist/types/lib/runner/recordSink.d.ts +11 -0
  143. package/dist/types/lib/runner/storedCaptureAdmission.d.ts +4 -0
  144. package/dist/types/lib/sinks/fileSink.d.ts +2 -1
  145. package/dist/types/trace.d.ts +2 -0
  146. package/package.json +2 -2
@@ -15,6 +15,7 @@
15
15
  import type { Attention } from 'foottrace';
16
16
  import type { AttemptRecord, AttemptSummary, LateWrite } from '../attempt/types.js';
17
17
  import type { RetentionPolicy } from '../capture/policies.js';
18
+ import type { SourceReadCounts } from '../capture/sourceReadCounts.js';
18
19
  /** Types of control flow decisions captured by the execution engine. */
19
20
  export type FlowControlType = 'next' | 'branch' | 'children' | 'selected' | 'subflow' | 'loop';
20
21
  /** A single flow control narrative entry. */
@@ -92,6 +93,8 @@ export type StageSnapshot = {
92
93
  * `'full'` (default), {@link ReadSummaryMarker}s under `'summary'`, absent
93
94
  * under `'off'`. */
94
95
  stageReads?: Record<string, unknown>;
96
+ /** Native source-read totals across all attempts, only with an owned source book. No values or names. */
97
+ readSourceCounts?: SourceReadCounts;
95
98
  logs: Record<string, unknown>;
96
99
  errors: Record<string, unknown>;
97
100
  metrics: Record<string, unknown>;
@@ -13,4 +13,4 @@
13
13
  * `commitStops`, `tagStops` and `keysReadFromExecutionTree` take one.
14
14
  */
15
15
  export {};
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWVUeXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbWVtb3J5L2ZyYW1lVHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogZnJhbWVUeXBlcy50cyDigJQgdGhlIHR5cGVzIG9mIHRoZSBlbmdpbmUncyBmcmFtZSAoTDQpOiB3aGF0IG9uZSBzdGFnZSBpbnNpZGUgYSBydW4gcmVwb3J0cy5cbiAqXG4gKiBJdHMgc25hcHNob3QgKGBTdGFnZVNuYXBzaG90YCwgb25lIG5vZGUgb2YgdGhlIGV4ZWN1dGlvbiB0cmVlKSwgaXRzIGZsb3cgbWVzc2FnZXNcbiAqIChgRmxvd01lc3NhZ2VgLCBgRmxvd0NvbnRyb2xUeXBlYCkgYW5kIHRoZSB0d28gcmV0ZW50aW9uIGRpYWxzIHRoYXQgc2hhcGUgd2hhdCB0aGUgc25hcHNob3RcbiAqIGtlZXBzIChgUmVhZFRyYWNraW5nTW9kZWAsIGBXcml0ZVRyYWNraW5nTW9kZWAsIG92ZXIgYGNhcHR1cmUvYCdzIGBSZXRlbnRpb25Qb2xpY3lgKS4gVGhleSBsaXZlZFxuICogaW4gdGhlIHJlY29yZCdzIGB0eXBlcy50c2AgdW50aWwgQzY7IHRoZSByZWNvcmQgbmFtZXMgbm90aGluZyBvdXRzaWRlIGl0c2VsZiBub3dcbiAqIChgUkVDT1JEX0ZJTEVTYCwgc2NyaXB0cy9sYXllcmluZy5jb25maWcuY2pzKSwgc28gdGhleSBzaXQgYmVzaWRlIHRoZSBmcmFtZSB0aGF0IHdyaXRlcyB0aGVtLlxuICpcbiAqIEEgcmV0cmllZCBzdGFnZSdzIG5vZGUgYWxzbyBjYXJyaWVzIGl0cyBhdHRlbXB0cyAoYGF0dGVtcHRzYCwgYGF0dGVtcHRTdW1tYXJ5YCDigJQgdGhlIGF0dGVtcHQgbGVhZidzIHR5cGVzLCBMMCkuXG4gKlxuICogQSBgU3RhZ2VTbmFwc2hvdGAgaXMgYW4gYEV4ZWN1dGlvblRyZWVgIChgdHlwZXMudHNgKSwgdGhlIHNoYXBlIHRoZSByZWNvcmQncyByZWFkZXJzIHdhbGs6XG4gKiBgY29tbWl0U3RvcHNgLCBgdGFnU3RvcHNgIGFuZCBga2V5c1JlYWRGcm9tRXhlY3V0aW9uVHJlZWAgdGFrZSBvbmUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBdHRlbnRpb24gfSBmcm9tICdmb290dHJhY2UnO1xuXG5pbXBvcnQgdHlwZSB7IEF0dGVtcHRSZWNvcmQsIEF0dGVtcHRTdW1tYXJ5LCBMYXRlV3JpdGUgfSBmcm9tICcuLi9hdHRlbXB0L3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgUmV0ZW50aW9uUG9saWN5IH0gZnJvbSAnLi4vY2FwdHVyZS9wb2xpY2llcy5qcyc7XG5cbi8vIOKUgOKUgCBGbG93IENvbnRyb2wgTmFycmF0aXZlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogVHlwZXMgb2YgY29udHJvbCBmbG93IGRlY2lzaW9ucyBjYXB0dXJlZCBieSB0aGUgZXhlY3V0aW9uIGVuZ2luZS4gKi9cbmV4cG9ydCB0eXBlIEZsb3dDb250cm9sVHlwZSA9ICduZXh0JyB8ICdicmFuY2gnIHwgJ2NoaWxkcmVuJyB8ICdzZWxlY3RlZCcgfCAnc3ViZmxvdycgfCAnbG9vcCc7XG5cbi8qKiBBIHNpbmdsZSBmbG93IGNvbnRyb2wgbmFycmF0aXZlIGVudHJ5LiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93TWVzc2FnZSB7XG4gIHR5cGU6IEZsb3dDb250cm9sVHlwZTtcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgdGFyZ2V0U3RhZ2U/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgcmF0aW9uYWxlPzogc3RyaW5nO1xuICBjb3VudD86IG51bWJlcjtcbiAgaXRlcmF0aW9uPzogbnVtYmVyO1xuICB0aW1lc3RhbXA/OiBudW1iZXI7XG59XG5cbi8vIOKUgOKUgCBSZWFkIC8gV3JpdGUgVHJhY2tpbmcgKCMxNCwgIzEzYy1BKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vXG4vLyBUaGUgcG9saWN5IGZhbWlseSBhbmQgbWFya2VyIHNoYXBlcyBhcmUgb3duZWQgYnkgYGNhcHR1cmUvYCAoc2hhcmVkIHdpdGhcbi8vIHRoZSBkZWZlcnJlZC1vYnNlcnZlciBjYXB0dXJlIHRpZXIpLlxuXG4vKipcbiAqIFBvbGljeSBmb3IgaG93IHRyYWNrZWQgcmVhZHMgYXJlIHJlY29yZGVkIGludG8gYFN0YWdlU25hcHNob3Quc3RhZ2VSZWFkc2AuXG4gKlxuICogLSBgJ2Z1bGwnYCAoZGVmYXVsdCkg4oCUIGV2ZXJ5IHRyYWNrZWQgcmVhZCBgc3RydWN0dXJlZENsb25lYHMgdGhlIHZhbHVlIGludG9cbiAqICAgdGhlIHN0YWdlJ3MgcmVhZCB2aWV3LiBCeXRlLWlkZW50aWNhbCB0byB0aGUgaGlzdG9yaWNhbCBiZWhhdmlvcjsgdGhpcyBpc1xuICogICB3aGF0IHNuYXBzaG90IGNvbnN1bWVycyAobGVucywgYWdlbnRmb290cHJpbnQpIHNlZSB0b2RheS5cbiAqIC0gYCdzdW1tYXJ5J2Ag4oCUIHJlYWRzIHJlY29yZCBhIGNoZWFwIHtAbGluayBSZWFkU3VtbWFyeU1hcmtlcn0gKHR5cGUgKyBzaXplXG4gKiAgIHByb3h5ICsgc2hvcnQgcHJldmlldykgaW5zdGVhZCBvZiB0aGUgY2xvbmVkIHZhbHVlLiBPKDEpLWlzaCBwZXIgcmVhZCDigJRcbiAqICAgbm8gdmFsdWUgY2xvbmUsIG5vIHNlcmlhbGl6YXRpb24gb2YgbGFyZ2Ugb2JqZWN0cy5cbiAqIC0gYCdvZmYnYCDigJQgcmVhZHMgYXJlIG5vdCByZWNvcmRlZCBhdCBhbGw7IGBzdGFnZVJlYWRzYCBpcyBhYnNlbnQgZnJvbSB0aGVcbiAqICAgc25hcHNob3QuIFplcm8gcGVyLXJlYWQgY29zdC4gVmFsdWVzIGFyZSBzdGlsbCByZWFkYWJsZSwgYW5kIHRoZVxuICogICBgU2NvcGVSZWNvcmRlci5vblJlYWRgIGV2ZW50IHN0aWxsIGZpcmVzIChpdCBwYXNzZXMgdGhlIGxpdmUgcmVmZXJlbmNlIGFuZFxuICogICBuZXZlciBjbG9uZWQpIOKAlCBzbyBuYXJyYXRpdmUgb3V0cHV0IGlzIGlkZW50aWNhbCBpbiBldmVyeSBtb2RlLiBUaGUgcG9saWN5XG4gKiAgIHNjb3BlcyBPTkxZIHRoZSBzbmFwc2hvdCdzIGBzdGFnZVJlYWRzYCBwYXlsb2FkLlxuICpcbiAqIFNldCB2aWEgYG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCwgeyByZWFkVHJhY2tpbmcgfSlgIG9yXG4gKiBgZXhlY3V0b3Iuc2V0UmVhZFRyYWNraW5nKG1vZGUpYCAoYmVmb3JlIGBydW4oKWApLlxuICpcbiAqIEFsaWFzIG9mIHRoZSBzaGFyZWQge0BsaW5rIFJldGVudGlvblBvbGljeX0gZmFtaWx5ICgjMTNjLUEpIOKAlCBrZXB0IGFzIHRoZVxuICogc2hpcHBlZCBwdWJsaWMgbmFtZSBmb3IgdGhlIHJlYWQgZGlhbC5cbiAqL1xuZXhwb3J0IHR5cGUgUmVhZFRyYWNraW5nTW9kZSA9IFJldGVudGlvblBvbGljeTtcblxuLyoqXG4gKiBQb2xpY3kgZm9yIGhvdyB0cmFja2VkIHdyaXRlcyBhcmUgcmVjb3JkZWQgaW50byBgU3RhZ2VTbmFwc2hvdC5zdGFnZVdyaXRlc2BcbiAqICgjMTNjLUEpIOKAlCB0aGUgc2libGluZyBvZiB7QGxpbmsgUmVhZFRyYWNraW5nTW9kZX0uXG4gKlxuICogLSBgJ2Z1bGwnYCAoZGVmYXVsdCkg4oCUIGV2ZXJ5IHRyYWNrZWQgd3JpdGUgYHN0cnVjdHVyZWRDbG9uZWBzIHRoZSB2YWx1ZSBpbnRvXG4gKiAgIHRoZSBzdGFnZSdzIHdyaXRlIHZpZXcuIEJ5dGUtaWRlbnRpY2FsIHRvIHRoZSBoaXN0b3JpY2FsIGJlaGF2aW9yLlxuICogLSBgJ3N1bW1hcnknYCDigJQgd3JpdGVzIHJlY29yZCBhIGNoZWFwIHtAbGluayBXcml0ZVN1bW1hcnlNYXJrZXJ9IGluc3RlYWQgb2ZcbiAqICAgdGhlIGNsb25lZCB2YWx1ZS5cbiAqIC0gYCdvZmYnYCDigJQgd3JpdGVzIGFyZSBub3QgcmVjb3JkZWQgYXQgYWxsOyBgc3RhZ2VXcml0ZXNgIGlzIGFic2VudCBmcm9tIHRoZVxuICogICBzbmFwc2hvdC4gVGhlIHdyaXRlcyB0aGVtc2VsdmVzIHN0aWxsIGNvbW1pdCB0byBzaGFyZWQgc3RhdGUgYW5kIHN0aWxsXG4gKiAgIGFwcGVhciBpbiB0aGUgY29tbWl0IGxvZyDigJQgb25seSB0aGUgcGVyLXN0YWdlIHNuYXBzaG90IGJvb2trZWVwaW5nIChhbmRcbiAqICAgdGhlcmVmb3JlIHRoZSBjb21taXQgb2JzZXJ2ZXIncyBtdXRhdGlvbnMgcGF5bG9hZCkgaXMgYWZmZWN0ZWQuIChUaGVcbiAqICAgY29tbWl0IGxvZydzIG93biB2YWx1ZSBlbmNvZGluZyBoYXMgaXRzIG93biBsb3NzbGVzcyBkaWFsIOKAlFxuICogICB7QGxpbmsgQ29tbWl0VmFsdWVzTW9kZX0sICMxM2MtQi4pXG4gKlxuICogU2V0IHZpYSBgbmV3IEZsb3dDaGFydEV4ZWN1dG9yKGNoYXJ0LCB7IHdyaXRlVHJhY2tpbmcgfSlgIG9yXG4gKiBgZXhlY3V0b3Iuc2V0V3JpdGVUcmFja2luZyhtb2RlKWAgKGJlZm9yZSBgcnVuKClgKS4gU2VlXG4gKiBgRmxvd0NoYXJ0RXhlY3V0b3JPcHRpb25zLndyaXRlVHJhY2tpbmdgIGZvciB0aGUgZnVsbCBvYnNlcnZhYmxlLWNvbnNlcXVlbmNlXG4gKiBjb250cmFjdCAob25Db21taXQgcGF5bG9hZCwgcmVkYWN0aW9uIHByZWNlZGVuY2UsIHdoYXQgaXMgT1VUIG9mIHNjb3BlKS5cbiAqL1xuZXhwb3J0IHR5cGUgV3JpdGVUcmFja2luZ01vZGUgPSBSZXRlbnRpb25Qb2xpY3k7XG5cbi8vIOKUgOKUgCBTdGFnZSBTbmFwc2hvdCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIFNlcmlhbGlzYWJsZSByZXByZXNlbnRhdGlvbiBvZiBhIHN0YWdlJ3Mgc3RhdGUgKGZvciBkZWJ1Z2dpbmcgLyB2aXN1YWxpc2F0aW9uKS4gKi9cbmV4cG9ydCB0eXBlIFN0YWdlU25hcHNob3QgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBVbmlxdWUgcGVyLWV4ZWN1dGlvbi1zdGVwIGlkZW50aWZpZXIuIEZvcm1hdDogW3N1YmZsb3dQYXRoL11zdGFnZUlkI2V4ZWN1dGlvbkluZGV4ICovXG4gIHJ1bnRpbWVTdGFnZUlkPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICAvKiogSHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2Ygd2hhdCB0aGlzIHN0YWdlIGRvZXMgKGZyb20gYnVpbGRlcikuICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKiogU3ViZmxvdyBpZGVudGlmaWVyIOKAlCBwcmVzZW50IHdoZW4gdGhpcyBzdGFnZSBpcyBhIHN1YmZsb3cgZW50cnkgcG9pbnQuICovXG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgaXNEZWNpZGVyPzogYm9vbGVhbjtcbiAgaXNGb3JrPzogYm9vbGVhbjtcbiAgLyoqIFVzZXItbGV2ZWwgd3JpdGVzIG1hZGUgYnkgdGhpcyBzdGFnZSAocHJlLW5hbWVzcGFjZSBrZXlzIOKGkiB2YWx1ZXMpLlxuICAgKiAgU2hhcGUgZGVwZW5kcyBvbiB7QGxpbmsgV3JpdGVUcmFja2luZ01vZGV9OiBjbG9uZWQgdmFsdWVzIHVuZGVyIGAnZnVsbCdgXG4gICAqICAoZGVmYXVsdCksIHtAbGluayBXcml0ZVN1bW1hcnlNYXJrZXJ9cyB1bmRlciBgJ3N1bW1hcnknYCwgYWJzZW50IHVuZGVyXG4gICAqICBgJ29mZidgLiBSZWRhY3RlZCB3cml0ZXMgc2hvdyBgJ1tSRURBQ1RFRF0nYCByZWdhcmRsZXNzIG9mIG1vZGUuICovXG4gIHN0YWdlV3JpdGVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKiBVc2VyLWxldmVsIHJlYWRzIG1hZGUgYnkgdGhpcyBzdGFnZSAocHJlLW5hbWVzcGFjZSBrZXlzIOKGkiB2YWx1ZXMgYXQgcmVhZFxuICAgKiAgdGltZSkuIFNoYXBlIGRlcGVuZHMgb24ge0BsaW5rIFJlYWRUcmFja2luZ01vZGV9OiBjbG9uZWQgdmFsdWVzIHVuZGVyXG4gICAqICBgJ2Z1bGwnYCAoZGVmYXVsdCksIHtAbGluayBSZWFkU3VtbWFyeU1hcmtlcn1zIHVuZGVyIGAnc3VtbWFyeSdgLCBhYnNlbnRcbiAgICogIHVuZGVyIGAnb2ZmJ2AuICovXG4gIHN0YWdlUmVhZHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgbG9nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGVycm9yczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIG1ldHJpY3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBldmFsczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGZsb3dNZXNzYWdlcz86IEZsb3dNZXNzYWdlW107XG4gIC8qKlxuICAgKiBFdmVyeSBhdHRlbXB0IG9mIHRoaXMgZXhlY3V0aW9uLCBpbiBvcmRlciDigJQgd2hlbiBpdCBzdGFydGVkLCBob3cgbG9uZyBpdCB0b29rLCBob3cgaXQgZW5kZWQsIGFuZCB0aGVcbiAgICogcmV0cnktb3Itc3RvcCBkZWNpc2lvbiB0aGF0IGZvbGxvd2VkIChgQXR0ZW1wdFJlY29yZGApOiB0aGUgc3RhZ2UncyBvd24gdW5kZXIgaXRzIHJldHJ5IHBvbGljeSwgYSBgdGltZW91dE1zYFxuICAgKiBvciBhIHJ1biBkZWFkbGluZSAoMTAuMSwgYGtpbmQ6ICdzdGFnZSdgKSwgYW5kIHRob3NlIG9mIHRoZSBjYWxscyBpdCBtYWRlIHRocm91Z2ggYHNjb3BlLiRjYWxsYCBhbmQgdGhlXG4gICAqIG91dHNpZGUgYXR0ZW1wdHMgaXQgcmVwb3J0ZWQgdGhyb3VnaCBgb2JzZXJ2ZWQoKWAgKFAyLCBga2luZDogJ2NhbGwnYCAvIGAnb2JzZXJ2ZWQnYCwgdGhlIGZpcnN0IDEwMDAg4oCUXG4gICAqIGBTdGFnZUNvbnRleHQgwrcgTUFYX0NBTExfUkVDT1JEU2ApLiBBYnNlbnQgd2hlbiB0aGVyZSBhcmUgbm9uZS4gVGhlIGNvbW1pdCBsb2cgbmV2ZXIgY2FycmllcyBhdHRlbXB0czogYVxuICAgKiByZXRyaWVkIHN0YWdlIGlzIHN0aWxsIE9ORSBidW5kbGUuXG4gICAqL1xuICBhdHRlbXB0cz86IHJlYWRvbmx5IEF0dGVtcHRSZWNvcmRbXTtcbiAgLyoqXG4gICAqIENhbGwgYW5kIG9ic2VydmVkIGF0dGVtcHQgcmVjb3JkcyB0aGlzIGV4ZWN1dGlvbiBtYWRlIHBhc3QgdGhlIGZpcnN0IDEwMDAg4oCUIGNvdW50ZWQsIG5vdCBrZXB0IChlYWNoIHN0aWxsXG4gICAqIGZpcmVkIGBvbkF0dGVtcHRgKS4gQWJzZW50IHdoZW4gbm9uZSB3ZXJlIGRyb3BwZWQuXG4gICAqL1xuICBhdHRlbXB0c0Ryb3BwZWQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgc2VyaWVzIGF0IGEgZ2xhbmNlIOKAlCBjb3VudHMgcGVyIG91dGNvbWUsIGFuZCBob3cgaXQgZW5kZWQuIFN0YW1wZWQgd2hlbiB0aGUgc2VyaWVzIGVuZHM6IGFic2VudCB3aGlsZSBpdFxuICAgKiBpcyBzdGlsbCBydW5uaW5nIChhIHNuYXBzaG90IHRha2VuIG1pZC1zdGFnZSkgYW5kIHdpdGhvdXQgYSBwb2xpY3kuXG4gICAqL1xuICBhdHRlbXB0U3VtbWFyeT86IEF0dGVtcHRTdW1tYXJ5O1xuICAvKipcbiAgICogV3JpdGVzIChhbmQgZW1pdHMpIGFuIGF0dGVtcHQgdHJpZWQgQUZURVIgaXQgaGFkIGVuZGVkIOKAlCB0aW1lZCBvdXQsIGFib3J0ZWQgb3IgZmFpbGVkIOKAlCBpbiB0aGUgb3JkZXIgdGhleSBjYW1lXG4gICAqIChQMWIpLiBFYWNoIHdhcyBkcm9wcGVkIGF0IHRoZSBzY29wZSwgc28gbm9uZSByZWFjaGVkIHRoZSBzdGFnZSdzIGJ1ZmZlciwgaXRzIGNvbW1pdCBvciBhIHJlY29yZGVyOyB0aGlzIGlzXG4gICAqIHRoZSByZWNvcmQgdGhhdCB0aGV5IHdlcmUgdHJpZWQg4oCUIHRoZSBmaXJzdCAxMDAgKGBNQVhfTEFURV9XUklURVNgKS4gQW4gYWJhbmRvbmVkIGZ1bmN0aW9uIGNhbiBrZWVwIHJ1bm5pbmdcbiAgICogYWZ0ZXIgdGhlIHJ1biBlbmRlZCwgc28gdGhlIGxpc3QgY2FuIGdyb3cgYWZ0ZXIgYSBzbmFwc2hvdCB3YXMgdGFrZW4uIE5hbWVzIG9ubHksIG5ldmVyIHZhbHVlcy4gQWJzZW50IHdoZW5cbiAgICogdGhlcmUgd2VyZSBub25lLlxuICAgKi9cbiAgbGF0ZVdyaXRlcz86IHJlYWRvbmx5IExhdGVXcml0ZVtdO1xuICAvKipcbiAgICogRml4ZWQtcmVhc29uIG1hcmtzIGNvbGxlY3RlZCBhcyB0aGlzIGV4ZWN1dGlvbiBydW5zLiBBYnNlbnQgd2hlbiBubyBmYWN0IG5lZWRzIGF0dGVudGlvbi5cbiAgICogQXR0ZW1wdCBldmlkZW5jZSB1c2VzIGNhbm9uaWNhbCBGb290dHJhY2UgYXR0ZW1wdCBJRHMuIFN1bW1hcnktb25seSBhbmQgc3RhZ2UtZXJyb3IgcHJvb2YgcmVzb2x2ZXMgd2l0aGluIFRISVMgbm9kZVxuICAgKiB0aHJvdWdoIGF0dGVtcHRTdW1tYXJ5LCBlcnJvcnM6c3RhZ2VFeGVjdXRpb25FcnJvciBvciBhdHRlbXB0c0Ryb3BwZWQuIFF1YWxpdHkgbWFya3MgYXJlIHJlYWQtdGltZSByZWNvcmRlciB3b3JrLlxuICAgKiBNYXJrcyByZXRhaW4gbm8gZXJyb3IgdGV4dCwgdmFsdWVzLCB0YXJnZXRzIG9yIGlkZW1wb3RlbmN5IGtleXM7IG9taXR0ZWQgcHJvb2YgaXMgZGlzY2xvc2VkIGFzIG5vdC1jb2xsZWN0ZWQuXG4gICAqL1xuICBhdHRlbnRpb24/OiByZWFkb25seSBBdHRlbnRpb25bXTtcbiAgbmV4dD86IFN0YWdlU25hcHNob3Q7XG4gIGNoaWxkcmVuPzogU3RhZ2VTbmFwc2hvdFtdO1xufTtcbiJdfQ==
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWVUeXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbWVtb3J5L2ZyYW1lVHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogZnJhbWVUeXBlcy50cyDigJQgdGhlIHR5cGVzIG9mIHRoZSBlbmdpbmUncyBmcmFtZSAoTDQpOiB3aGF0IG9uZSBzdGFnZSBpbnNpZGUgYSBydW4gcmVwb3J0cy5cbiAqXG4gKiBJdHMgc25hcHNob3QgKGBTdGFnZVNuYXBzaG90YCwgb25lIG5vZGUgb2YgdGhlIGV4ZWN1dGlvbiB0cmVlKSwgaXRzIGZsb3cgbWVzc2FnZXNcbiAqIChgRmxvd01lc3NhZ2VgLCBgRmxvd0NvbnRyb2xUeXBlYCkgYW5kIHRoZSB0d28gcmV0ZW50aW9uIGRpYWxzIHRoYXQgc2hhcGUgd2hhdCB0aGUgc25hcHNob3RcbiAqIGtlZXBzIChgUmVhZFRyYWNraW5nTW9kZWAsIGBXcml0ZVRyYWNraW5nTW9kZWAsIG92ZXIgYGNhcHR1cmUvYCdzIGBSZXRlbnRpb25Qb2xpY3lgKS4gVGhleSBsaXZlZFxuICogaW4gdGhlIHJlY29yZCdzIGB0eXBlcy50c2AgdW50aWwgQzY7IHRoZSByZWNvcmQgbmFtZXMgbm90aGluZyBvdXRzaWRlIGl0c2VsZiBub3dcbiAqIChgUkVDT1JEX0ZJTEVTYCwgc2NyaXB0cy9sYXllcmluZy5jb25maWcuY2pzKSwgc28gdGhleSBzaXQgYmVzaWRlIHRoZSBmcmFtZSB0aGF0IHdyaXRlcyB0aGVtLlxuICpcbiAqIEEgcmV0cmllZCBzdGFnZSdzIG5vZGUgYWxzbyBjYXJyaWVzIGl0cyBhdHRlbXB0cyAoYGF0dGVtcHRzYCwgYGF0dGVtcHRTdW1tYXJ5YCDigJQgdGhlIGF0dGVtcHQgbGVhZidzIHR5cGVzLCBMMCkuXG4gKlxuICogQSBgU3RhZ2VTbmFwc2hvdGAgaXMgYW4gYEV4ZWN1dGlvblRyZWVgIChgdHlwZXMudHNgKSwgdGhlIHNoYXBlIHRoZSByZWNvcmQncyByZWFkZXJzIHdhbGs6XG4gKiBgY29tbWl0U3RvcHNgLCBgdGFnU3RvcHNgIGFuZCBga2V5c1JlYWRGcm9tRXhlY3V0aW9uVHJlZWAgdGFrZSBvbmUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBdHRlbnRpb24gfSBmcm9tICdmb290dHJhY2UnO1xuXG5pbXBvcnQgdHlwZSB7IEF0dGVtcHRSZWNvcmQsIEF0dGVtcHRTdW1tYXJ5LCBMYXRlV3JpdGUgfSBmcm9tICcuLi9hdHRlbXB0L3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgUmV0ZW50aW9uUG9saWN5IH0gZnJvbSAnLi4vY2FwdHVyZS9wb2xpY2llcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFNvdXJjZVJlYWRDb3VudHMgfSBmcm9tICcuLi9jYXB0dXJlL3NvdXJjZVJlYWRDb3VudHMuanMnO1xuXG4vLyDilIDilIAgRmxvdyBDb250cm9sIE5hcnJhdGl2ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIFR5cGVzIG9mIGNvbnRyb2wgZmxvdyBkZWNpc2lvbnMgY2FwdHVyZWQgYnkgdGhlIGV4ZWN1dGlvbiBlbmdpbmUuICovXG5leHBvcnQgdHlwZSBGbG93Q29udHJvbFR5cGUgPSAnbmV4dCcgfCAnYnJhbmNoJyB8ICdjaGlsZHJlbicgfCAnc2VsZWN0ZWQnIHwgJ3N1YmZsb3cnIHwgJ2xvb3AnO1xuXG4vKiogQSBzaW5nbGUgZmxvdyBjb250cm9sIG5hcnJhdGl2ZSBlbnRyeS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd01lc3NhZ2Uge1xuICB0eXBlOiBGbG93Q29udHJvbFR5cGU7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHRhcmdldFN0YWdlPzogc3RyaW5nIHwgc3RyaW5nW107XG4gIHJhdGlvbmFsZT86IHN0cmluZztcbiAgY291bnQ/OiBudW1iZXI7XG4gIGl0ZXJhdGlvbj86IG51bWJlcjtcbiAgdGltZXN0YW1wPzogbnVtYmVyO1xufVxuXG4vLyDilIDilIAgUmVhZCAvIFdyaXRlIFRyYWNraW5nICgjMTQsICMxM2MtQSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vL1xuLy8gVGhlIHBvbGljeSBmYW1pbHkgYW5kIG1hcmtlciBzaGFwZXMgYXJlIG93bmVkIGJ5IGBjYXB0dXJlL2AgKHNoYXJlZCB3aXRoXG4vLyB0aGUgZGVmZXJyZWQtb2JzZXJ2ZXIgY2FwdHVyZSB0aWVyKS5cblxuLyoqXG4gKiBQb2xpY3kgZm9yIGhvdyB0cmFja2VkIHJlYWRzIGFyZSByZWNvcmRlZCBpbnRvIGBTdGFnZVNuYXBzaG90LnN0YWdlUmVhZHNgLlxuICpcbiAqIC0gYCdmdWxsJ2AgKGRlZmF1bHQpIOKAlCBldmVyeSB0cmFja2VkIHJlYWQgYHN0cnVjdHVyZWRDbG9uZWBzIHRoZSB2YWx1ZSBpbnRvXG4gKiAgIHRoZSBzdGFnZSdzIHJlYWQgdmlldy4gQnl0ZS1pZGVudGljYWwgdG8gdGhlIGhpc3RvcmljYWwgYmVoYXZpb3I7IHRoaXMgaXNcbiAqICAgd2hhdCBzbmFwc2hvdCBjb25zdW1lcnMgKGxlbnMsIGFnZW50Zm9vdHByaW50KSBzZWUgdG9kYXkuXG4gKiAtIGAnc3VtbWFyeSdgIOKAlCByZWFkcyByZWNvcmQgYSBjaGVhcCB7QGxpbmsgUmVhZFN1bW1hcnlNYXJrZXJ9ICh0eXBlICsgc2l6ZVxuICogICBwcm94eSArIHNob3J0IHByZXZpZXcpIGluc3RlYWQgb2YgdGhlIGNsb25lZCB2YWx1ZS4gTygxKS1pc2ggcGVyIHJlYWQg4oCUXG4gKiAgIG5vIHZhbHVlIGNsb25lLCBubyBzZXJpYWxpemF0aW9uIG9mIGxhcmdlIG9iamVjdHMuXG4gKiAtIGAnb2ZmJ2Ag4oCUIHJlYWRzIGFyZSBub3QgcmVjb3JkZWQgYXQgYWxsOyBgc3RhZ2VSZWFkc2AgaXMgYWJzZW50IGZyb20gdGhlXG4gKiAgIHNuYXBzaG90LiBaZXJvIHBlci1yZWFkIGNvc3QuIFZhbHVlcyBhcmUgc3RpbGwgcmVhZGFibGUsIGFuZCB0aGVcbiAqICAgYFNjb3BlUmVjb3JkZXIub25SZWFkYCBldmVudCBzdGlsbCBmaXJlcyAoaXQgcGFzc2VzIHRoZSBsaXZlIHJlZmVyZW5jZSBhbmRcbiAqICAgbmV2ZXIgY2xvbmVkKSDigJQgc28gbmFycmF0aXZlIG91dHB1dCBpcyBpZGVudGljYWwgaW4gZXZlcnkgbW9kZS4gVGhlIHBvbGljeVxuICogICBzY29wZXMgT05MWSB0aGUgc25hcHNob3QncyBgc3RhZ2VSZWFkc2AgcGF5bG9hZC5cbiAqXG4gKiBTZXQgdmlhIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgcmVhZFRyYWNraW5nIH0pYCBvclxuICogYGV4ZWN1dG9yLnNldFJlYWRUcmFja2luZyhtb2RlKWAgKGJlZm9yZSBgcnVuKClgKS5cbiAqXG4gKiBBbGlhcyBvZiB0aGUgc2hhcmVkIHtAbGluayBSZXRlbnRpb25Qb2xpY3l9IGZhbWlseSAoIzEzYy1BKSDigJQga2VwdCBhcyB0aGVcbiAqIHNoaXBwZWQgcHVibGljIG5hbWUgZm9yIHRoZSByZWFkIGRpYWwuXG4gKi9cbmV4cG9ydCB0eXBlIFJlYWRUcmFja2luZ01vZGUgPSBSZXRlbnRpb25Qb2xpY3k7XG5cbi8qKlxuICogUG9saWN5IGZvciBob3cgdHJhY2tlZCB3cml0ZXMgYXJlIHJlY29yZGVkIGludG8gYFN0YWdlU25hcHNob3Quc3RhZ2VXcml0ZXNgXG4gKiAoIzEzYy1BKSDigJQgdGhlIHNpYmxpbmcgb2Yge0BsaW5rIFJlYWRUcmFja2luZ01vZGV9LlxuICpcbiAqIC0gYCdmdWxsJ2AgKGRlZmF1bHQpIOKAlCBldmVyeSB0cmFja2VkIHdyaXRlIGBzdHJ1Y3R1cmVkQ2xvbmVgcyB0aGUgdmFsdWUgaW50b1xuICogICB0aGUgc3RhZ2UncyB3cml0ZSB2aWV3LiBCeXRlLWlkZW50aWNhbCB0byB0aGUgaGlzdG9yaWNhbCBiZWhhdmlvci5cbiAqIC0gYCdzdW1tYXJ5J2Ag4oCUIHdyaXRlcyByZWNvcmQgYSBjaGVhcCB7QGxpbmsgV3JpdGVTdW1tYXJ5TWFya2VyfSBpbnN0ZWFkIG9mXG4gKiAgIHRoZSBjbG9uZWQgdmFsdWUuXG4gKiAtIGAnb2ZmJ2Ag4oCUIHdyaXRlcyBhcmUgbm90IHJlY29yZGVkIGF0IGFsbDsgYHN0YWdlV3JpdGVzYCBpcyBhYnNlbnQgZnJvbSB0aGVcbiAqICAgc25hcHNob3QuIFRoZSB3cml0ZXMgdGhlbXNlbHZlcyBzdGlsbCBjb21taXQgdG8gc2hhcmVkIHN0YXRlIGFuZCBzdGlsbFxuICogICBhcHBlYXIgaW4gdGhlIGNvbW1pdCBsb2cg4oCUIG9ubHkgdGhlIHBlci1zdGFnZSBzbmFwc2hvdCBib29ra2VlcGluZyAoYW5kXG4gKiAgIHRoZXJlZm9yZSB0aGUgY29tbWl0IG9ic2VydmVyJ3MgbXV0YXRpb25zIHBheWxvYWQpIGlzIGFmZmVjdGVkLiAoVGhlXG4gKiAgIGNvbW1pdCBsb2cncyBvd24gdmFsdWUgZW5jb2RpbmcgaGFzIGl0cyBvd24gbG9zc2xlc3MgZGlhbCDigJRcbiAqICAge0BsaW5rIENvbW1pdFZhbHVlc01vZGV9LCAjMTNjLUIuKVxuICpcbiAqIFNldCB2aWEgYG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCwgeyB3cml0ZVRyYWNraW5nIH0pYCBvclxuICogYGV4ZWN1dG9yLnNldFdyaXRlVHJhY2tpbmcobW9kZSlgIChiZWZvcmUgYHJ1bigpYCkuIFNlZVxuICogYEZsb3dDaGFydEV4ZWN1dG9yT3B0aW9ucy53cml0ZVRyYWNraW5nYCBmb3IgdGhlIGZ1bGwgb2JzZXJ2YWJsZS1jb25zZXF1ZW5jZVxuICogY29udHJhY3QgKG9uQ29tbWl0IHBheWxvYWQsIHJlZGFjdGlvbiBwcmVjZWRlbmNlLCB3aGF0IGlzIE9VVCBvZiBzY29wZSkuXG4gKi9cbmV4cG9ydCB0eXBlIFdyaXRlVHJhY2tpbmdNb2RlID0gUmV0ZW50aW9uUG9saWN5O1xuXG4vLyDilIDilIAgU3RhZ2UgU25hcHNob3Qg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKiBTZXJpYWxpc2FibGUgcmVwcmVzZW50YXRpb24gb2YgYSBzdGFnZSdzIHN0YXRlIChmb3IgZGVidWdnaW5nIC8gdmlzdWFsaXNhdGlvbikuICovXG5leHBvcnQgdHlwZSBTdGFnZVNuYXBzaG90ID0ge1xuICBpZDogc3RyaW5nO1xuICAvKiogVW5pcXVlIHBlci1leGVjdXRpb24tc3RlcCBpZGVudGlmaWVyLiBGb3JtYXQ6IFtzdWJmbG93UGF0aC9dc3RhZ2VJZCNleGVjdXRpb25JbmRleCAqL1xuICBydW50aW1lU3RhZ2VJZD86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHdoYXQgdGhpcyBzdGFnZSBkb2VzIChmcm9tIGJ1aWxkZXIpLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqIFN1YmZsb3cgaWRlbnRpZmllciDigJQgcHJlc2VudCB3aGVuIHRoaXMgc3RhZ2UgaXMgYSBzdWJmbG93IGVudHJ5IHBvaW50LiAqL1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIGlzRGVjaWRlcj86IGJvb2xlYW47XG4gIGlzRm9yaz86IGJvb2xlYW47XG4gIC8qKiBVc2VyLWxldmVsIHdyaXRlcyBtYWRlIGJ5IHRoaXMgc3RhZ2UgKHByZS1uYW1lc3BhY2Uga2V5cyDihpIgdmFsdWVzKS5cbiAgICogIFNoYXBlIGRlcGVuZHMgb24ge0BsaW5rIFdyaXRlVHJhY2tpbmdNb2RlfTogY2xvbmVkIHZhbHVlcyB1bmRlciBgJ2Z1bGwnYFxuICAgKiAgKGRlZmF1bHQpLCB7QGxpbmsgV3JpdGVTdW1tYXJ5TWFya2VyfXMgdW5kZXIgYCdzdW1tYXJ5J2AsIGFic2VudCB1bmRlclxuICAgKiAgYCdvZmYnYC4gUmVkYWN0ZWQgd3JpdGVzIHNob3cgYCdbUkVEQUNURURdJ2AgcmVnYXJkbGVzcyBvZiBtb2RlLiAqL1xuICBzdGFnZVdyaXRlcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKiogVXNlci1sZXZlbCByZWFkcyBtYWRlIGJ5IHRoaXMgc3RhZ2UgKHByZS1uYW1lc3BhY2Uga2V5cyDihpIgdmFsdWVzIGF0IHJlYWRcbiAgICogIHRpbWUpLiBTaGFwZSBkZXBlbmRzIG9uIHtAbGluayBSZWFkVHJhY2tpbmdNb2RlfTogY2xvbmVkIHZhbHVlcyB1bmRlclxuICAgKiAgYCdmdWxsJ2AgKGRlZmF1bHQpLCB7QGxpbmsgUmVhZFN1bW1hcnlNYXJrZXJ9cyB1bmRlciBgJ3N1bW1hcnknYCwgYWJzZW50XG4gICAqICB1bmRlciBgJ29mZidgLiAqL1xuICBzdGFnZVJlYWRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKiBOYXRpdmUgc291cmNlLXJlYWQgdG90YWxzIGFjcm9zcyBhbGwgYXR0ZW1wdHMsIG9ubHkgd2l0aCBhbiBvd25lZCBzb3VyY2UgYm9vay4gTm8gdmFsdWVzIG9yIG5hbWVzLiAqL1xuICByZWFkU291cmNlQ291bnRzPzogU291cmNlUmVhZENvdW50cztcbiAgbG9nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGVycm9yczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIG1ldHJpY3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBldmFsczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGZsb3dNZXNzYWdlcz86IEZsb3dNZXNzYWdlW107XG4gIC8qKlxuICAgKiBFdmVyeSBhdHRlbXB0IG9mIHRoaXMgZXhlY3V0aW9uLCBpbiBvcmRlciDigJQgd2hlbiBpdCBzdGFydGVkLCBob3cgbG9uZyBpdCB0b29rLCBob3cgaXQgZW5kZWQsIGFuZCB0aGVcbiAgICogcmV0cnktb3Itc3RvcCBkZWNpc2lvbiB0aGF0IGZvbGxvd2VkIChgQXR0ZW1wdFJlY29yZGApOiB0aGUgc3RhZ2UncyBvd24gdW5kZXIgaXRzIHJldHJ5IHBvbGljeSwgYSBgdGltZW91dE1zYFxuICAgKiBvciBhIHJ1biBkZWFkbGluZSAoMTAuMSwgYGtpbmQ6ICdzdGFnZSdgKSwgYW5kIHRob3NlIG9mIHRoZSBjYWxscyBpdCBtYWRlIHRocm91Z2ggYHNjb3BlLiRjYWxsYCBhbmQgdGhlXG4gICAqIG91dHNpZGUgYXR0ZW1wdHMgaXQgcmVwb3J0ZWQgdGhyb3VnaCBgb2JzZXJ2ZWQoKWAgKFAyLCBga2luZDogJ2NhbGwnYCAvIGAnb2JzZXJ2ZWQnYCwgdGhlIGZpcnN0IDEwMDAg4oCUXG4gICAqIGBTdGFnZUNvbnRleHQgwrcgTUFYX0NBTExfUkVDT1JEU2ApLiBBYnNlbnQgd2hlbiB0aGVyZSBhcmUgbm9uZS4gVGhlIGNvbW1pdCBsb2cgbmV2ZXIgY2FycmllcyBhdHRlbXB0czogYVxuICAgKiByZXRyaWVkIHN0YWdlIGlzIHN0aWxsIE9ORSBidW5kbGUuXG4gICAqL1xuICBhdHRlbXB0cz86IHJlYWRvbmx5IEF0dGVtcHRSZWNvcmRbXTtcbiAgLyoqXG4gICAqIENhbGwgYW5kIG9ic2VydmVkIGF0dGVtcHQgcmVjb3JkcyB0aGlzIGV4ZWN1dGlvbiBtYWRlIHBhc3QgdGhlIGZpcnN0IDEwMDAg4oCUIGNvdW50ZWQsIG5vdCBrZXB0IChlYWNoIHN0aWxsXG4gICAqIGZpcmVkIGBvbkF0dGVtcHRgKS4gQWJzZW50IHdoZW4gbm9uZSB3ZXJlIGRyb3BwZWQuXG4gICAqL1xuICBhdHRlbXB0c0Ryb3BwZWQ/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgc2VyaWVzIGF0IGEgZ2xhbmNlIOKAlCBjb3VudHMgcGVyIG91dGNvbWUsIGFuZCBob3cgaXQgZW5kZWQuIFN0YW1wZWQgd2hlbiB0aGUgc2VyaWVzIGVuZHM6IGFic2VudCB3aGlsZSBpdFxuICAgKiBpcyBzdGlsbCBydW5uaW5nIChhIHNuYXBzaG90IHRha2VuIG1pZC1zdGFnZSkgYW5kIHdpdGhvdXQgYSBwb2xpY3kuXG4gICAqL1xuICBhdHRlbXB0U3VtbWFyeT86IEF0dGVtcHRTdW1tYXJ5O1xuICAvKipcbiAgICogV3JpdGVzIChhbmQgZW1pdHMpIGFuIGF0dGVtcHQgdHJpZWQgQUZURVIgaXQgaGFkIGVuZGVkIOKAlCB0aW1lZCBvdXQsIGFib3J0ZWQgb3IgZmFpbGVkIOKAlCBpbiB0aGUgb3JkZXIgdGhleSBjYW1lXG4gICAqIChQMWIpLiBFYWNoIHdhcyBkcm9wcGVkIGF0IHRoZSBzY29wZSwgc28gbm9uZSByZWFjaGVkIHRoZSBzdGFnZSdzIGJ1ZmZlciwgaXRzIGNvbW1pdCBvciBhIHJlY29yZGVyOyB0aGlzIGlzXG4gICAqIHRoZSByZWNvcmQgdGhhdCB0aGV5IHdlcmUgdHJpZWQg4oCUIHRoZSBmaXJzdCAxMDAgKGBNQVhfTEFURV9XUklURVNgKS4gQW4gYWJhbmRvbmVkIGZ1bmN0aW9uIGNhbiBrZWVwIHJ1bm5pbmdcbiAgICogYWZ0ZXIgdGhlIHJ1biBlbmRlZCwgc28gdGhlIGxpc3QgY2FuIGdyb3cgYWZ0ZXIgYSBzbmFwc2hvdCB3YXMgdGFrZW4uIE5hbWVzIG9ubHksIG5ldmVyIHZhbHVlcy4gQWJzZW50IHdoZW5cbiAgICogdGhlcmUgd2VyZSBub25lLlxuICAgKi9cbiAgbGF0ZVdyaXRlcz86IHJlYWRvbmx5IExhdGVXcml0ZVtdO1xuICAvKipcbiAgICogRml4ZWQtcmVhc29uIG1hcmtzIGNvbGxlY3RlZCBhcyB0aGlzIGV4ZWN1dGlvbiBydW5zLiBBYnNlbnQgd2hlbiBubyBmYWN0IG5lZWRzIGF0dGVudGlvbi5cbiAgICogQXR0ZW1wdCBldmlkZW5jZSB1c2VzIGNhbm9uaWNhbCBGb290dHJhY2UgYXR0ZW1wdCBJRHMuIFN1bW1hcnktb25seSBhbmQgc3RhZ2UtZXJyb3IgcHJvb2YgcmVzb2x2ZXMgd2l0aGluIFRISVMgbm9kZVxuICAgKiB0aHJvdWdoIGF0dGVtcHRTdW1tYXJ5LCBlcnJvcnM6c3RhZ2VFeGVjdXRpb25FcnJvciBvciBhdHRlbXB0c0Ryb3BwZWQuIFF1YWxpdHkgbWFya3MgYXJlIHJlYWQtdGltZSByZWNvcmRlciB3b3JrLlxuICAgKiBNYXJrcyByZXRhaW4gbm8gZXJyb3IgdGV4dCwgdmFsdWVzLCB0YXJnZXRzIG9yIGlkZW1wb3RlbmN5IGtleXM7IG9taXR0ZWQgcHJvb2YgaXMgZGlzY2xvc2VkIGFzIG5vdC1jb2xsZWN0ZWQuXG4gICAqL1xuICBhdHRlbnRpb24/OiByZWFkb25seSBBdHRlbnRpb25bXTtcbiAgbmV4dD86IFN0YWdlU25hcHNob3Q7XG4gIGNoaWxkcmVuPzogU3RhZ2VTbmFwc2hvdFtdO1xufTtcbiJdfQ==
@@ -0,0 +1,3 @@
1
+ import type { LogAddress } from 'foottrace';
2
+ /** One engine address law for a mount's independent native book and its sink log. */
3
+ export declare function childLogAddress(parent: LogAddress | undefined, mountRuntimeStageId: string | undefined): LogAddress | undefined;
@@ -0,0 +1,7 @@
1
+ /** One engine address law for a mount's independent native book and its sink log. */
2
+ export function childLogAddress(parent, mountRuntimeStageId) {
3
+ return parent && mountRuntimeStageId
4
+ ? { logRunId: parent.logRunId, drillPath: [...parent.drillPath, mountRuntimeStageId] }
5
+ : undefined;
6
+ }
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nQWRkcmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbWVtb3J5L2xvZ0FkZHJlc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEscUZBQXFGO0FBQ3JGLE1BQU0sVUFBVSxlQUFlLENBQzdCLE1BQThCLEVBQzlCLG1CQUF1QztJQUV2QyxPQUFPLE1BQU0sSUFBSSxtQkFBbUI7UUFDbEMsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsU0FBUyxFQUFFLG1CQUFtQixDQUFDLEVBQUU7UUFDdEYsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUNoQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBMb2dBZGRyZXNzIH0gZnJvbSAnZm9vdHRyYWNlJztcblxuLyoqIE9uZSBlbmdpbmUgYWRkcmVzcyBsYXcgZm9yIGEgbW91bnQncyBpbmRlcGVuZGVudCBuYXRpdmUgYm9vayBhbmQgaXRzIHNpbmsgbG9nLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoaWxkTG9nQWRkcmVzcyhcbiAgcGFyZW50OiBMb2dBZGRyZXNzIHwgdW5kZWZpbmVkLFxuICBtb3VudFJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4pOiBMb2dBZGRyZXNzIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHBhcmVudCAmJiBtb3VudFJ1bnRpbWVTdGFnZUlkXG4gICAgPyB7IGxvZ1J1bklkOiBwYXJlbnQubG9nUnVuSWQsIGRyaWxsUGF0aDogWy4uLnBhcmVudC5kcmlsbFBhdGgsIG1vdW50UnVudGltZVN0YWdlSWRdIH1cbiAgICA6IHVuZGVmaW5lZDtcbn1cbiJdfQ==
@@ -30,7 +30,7 @@
30
30
  * its own store when `mirror` is set.
31
31
  */
32
32
  import type { CommitValuesMode } from 'foottrace';
33
- import type { WriteProvenanceMode } from 'foottrace/write';
33
+ import type { ReadSourceLimits, WriteProvenanceMode } from 'foottrace/write';
34
34
  import type { ReadTrackingMode, WriteTrackingMode } from './frameTypes.js';
35
35
  import type { RedactionRule } from './redaction.js';
36
36
  /**
@@ -38,6 +38,10 @@ import type { RedactionRule } from './redaction.js';
38
38
  * one is its default. `FlowChartExecutorOptions` extends this interface.
39
39
  */
40
40
  export interface RunDials {
41
+ /** Native, bounded scalar read-source occurrences (#113). Default false; memory-only in packet 3. */
42
+ readSources?: boolean | {
43
+ readonly limits: Partial<ReadSourceLimits>;
44
+ };
41
45
  /**
42
46
  * Policy for `StageSnapshot.stageReads` (#14). Default `'full'` — every
43
47
  * tracked read `structuredClone`s the value into the stage's read view
@@ -31,6 +31,7 @@
31
31
  */
32
32
  /** Each dial's default — the value a run gets when the option is absent. The dial list IS these keys. */
33
33
  export const DIAL_DEFAULTS = Object.freeze({
34
+ readSources: false,
34
35
  readTracking: 'full',
35
36
  writeTracking: 'full',
36
37
  commitValues: 'full',
@@ -66,4 +67,4 @@ export function withRedaction(policy, redaction) {
66
67
  export function derivePolicy(policy, patch) {
67
68
  return Object.freeze({ ...policy, ...patch });
68
69
  }
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuUG9saWN5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvcnVuUG9saWN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7QUFrSEgseUdBQXlHO0FBQ3pHLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBaUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN2RSxZQUFZLEVBQUUsTUFBTTtJQUNwQixhQUFhLEVBQUUsTUFBTTtJQUNyQixZQUFZLEVBQUUsTUFBTTtJQUNwQixlQUFlLEVBQUUsS0FBSztDQUN2QixDQUFDLENBQUM7QUFFSCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBMEIsQ0FBQztBQUV2RSwyR0FBMkc7QUFDM0csTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQWMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsYUFBYSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBRWhHLG1GQUFtRjtBQUNuRixNQUFNLFVBQVUsU0FBUyxDQUFDLFFBQWtCLEVBQUUsRUFBRSxTQUF5QixFQUFFLE1BQU0sR0FBRyxLQUFLO0lBQ3ZGLE1BQU0sUUFBUSxHQUE0QixFQUFFLEdBQUcsYUFBYSxFQUFFLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQzVGLElBQUksU0FBUztRQUFFLFFBQVEsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzlDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQXlCLENBQUM7QUFDekQsQ0FBQztBQUVELHFGQUFxRjtBQUNyRixNQUFNLFVBQVUsU0FBUyxDQUFDLE1BQWdCO0lBQ3hDLE1BQU0sS0FBSyxHQUE0QixFQUFFLENBQUM7SUFDMUMsS0FBSyxNQUFNLElBQUksSUFBSSxVQUFVO1FBQUUsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssU0FBUztZQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUYsT0FBTyxLQUFpQixDQUFDO0FBQzNCLENBQUM7QUFFRCw2RkFBNkY7QUFDN0YsTUFBTSxVQUFVLGFBQWEsQ0FBQyxNQUFpQixFQUFFLFNBQXdCO0lBQ3ZFLE9BQU8sWUFBWSxDQUFDLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLE1BQWlCLEVBQUUsS0FBeUI7SUFDdkUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ2hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJ1blBvbGljeSDigJQgd2hhdCBhIHJ1biByZXRhaW5zLCBlbmNvZGVzIGFuZCBzY3J1YnMsIGFzIE9ORSBpbW11dGFibGUgb2JqZWN0IChGNSkuXG4gKlxuICogV0hZLiBBIHJ1biBjYXJyaWVzIHNpeCBzZXR0aW5ncyB0aGF0IGV2ZXJ5IHN0YWdlIGZyYW1lIG11c3QgYWdyZWUgb246IHRoZSBmb3VyXG4gKiBvYnNlcnZhYmlsaXR5IGRpYWxzIChgcmVhZFRyYWNraW5nYCwgYHdyaXRlVHJhY2tpbmdgLCBgY29tbWl0VmFsdWVzYCwgYHdyaXRlUHJvdmVuYW5jZWApLFxuICogdGhlIHJlZGFjdGlvbiBydWxlLCBhbmQgd2hldGhlciBhIHJlZGFjdGVkIG1pcnJvciBpcyBrZXB0LiBVbnRpbCA5LjM0LjAgZWFjaCBvbmUgd2FzXG4gKiBjb3BpZWQgZmllbGQgYnkgZmllbGQgZG93biB0aHJlZSBzZXBhcmF0ZSBwYXRocyDigJQgYEV4ZWN1dGlvblJ1bnRpbWUudXNlKmAgb24gdGhlIHJvb3QsXG4gKiBgU3RhZ2VDb250ZXh0LmNyZWF0ZU5leHRgL2BjcmVhdGVDaGlsZGAgKHNpeCBhc3NpZ25tZW50cyBlYWNoKSwgYW5kIGEgZHVjay10eXBlZCBwdXNoIHBlclxuICogZGlhbCBpbiBgU3ViZmxvd0V4ZWN1dG9yYCDigJQgc28gYSBuZXcgZGlhbCBtZWFudCBzaXggZWRpdHMsIGFuZCBhIG1pc3NlZCBvbmUgcmFuIGEgc3ViZmxvd1xuICogb24gdGhlIGRlZmF1bHQgc2lsZW50bHkuIE5vdyB0aGUgZXhlY3V0b3IgYnVpbGRzIE9ORSBwb2xpY3kgcGVyIHJ1biAoYW5kIHBlciByZXN1bWUpLCB0aGVcbiAqIHJ1bnRpbWUgaW5zdGFsbHMgaXQgb24gaXRzIHJvb3QgZnJhbWUsIGFuZCBldmVyeSBmcmFtZSBob2xkcyBpdCBCWSBSRUZFUkVOQ0U6IGEgY2hpbGQsIGFcbiAqIGNvbnRpbnVhdGlvbiBhbmQgYSBzdWJmbG93J3Mgcm9vdCAoaXRzIHNlZWQgZnJhbWUgaW5jbHVkZWQpIGFsbCBwb2ludCBhdCB0aGUgc2FtZSBvYmplY3QuXG4gKiBUaGUgYm9ycm93ZWQgaWRlYSBpcyBHbydzIGBjb250ZXh0LkNvbnRleHRgIC8gT3BlblRlbGVtZXRyeSdzIGBDb250ZXh0YDogYW4gaW1tdXRhYmxlIHZhbHVlXG4gKiBoYW5kZWQgZG93biwgbmV2ZXIgY29waWVkIGFwYXJ0LlxuICpcbiAqIEFERElORyBBIERJQUwgaXMgdHdvIGZpbGVzOiBhIGZpZWxkICsgaXRzIGRlZmF1bHQgaGVyZSAoe0BsaW5rIFJ1bkRpYWxzfSxcbiAqIHtAbGluayBESUFMX0RFRkFVTFRTfSksIGFuZCB0aGUgZnJhbWUgY29kZSB0aGF0IHJlYWRzIGBwb2xpY3kuPGRpYWw+YCAoYFN0YWdlQ29udGV4dGApLiBUaGVcbiAqIGV4ZWN1dG9yJ3Mgb3B0aW9ucyBpbmhlcml0IHtAbGluayBSdW5EaWFsc30sIHBpY2tzIHRoZW0gd2l0aCB7QGxpbmsgcGlja0RpYWxzfSwgYW5kIGV2ZXJ5XG4gKiBwcm9wYWdhdGlvbiBwYXRoIGNhcnJpZXMgdGhlIHdob2xlIG9iamVjdCDigJQgbm9uZSBvZiB0aGVtIG5hbWVzIGEgZGlhbC5cbiAqXG4gKiBgYGB0c1xuICogY29uc3QgcG9saWN5ID0gcnVuUG9saWN5KHsgY29tbWl0VmFsdWVzOiAnZGVsdGEnIH0sIHJ1bGUsIHRydWUpO1xuICogcG9saWN5LnJlYWRUcmFja2luZzsgLy8gJ2Z1bGwnIOKAlCBhbiBhYnNlbnQgZGlhbCBpcyBpdHMgZGVmYXVsdFxuICogT2JqZWN0LmlzRnJvemVuKHBvbGljeSk7IC8vIHRydWUg4oCUIGEgZnJhbWUgY2FuIG5ldmVyIGVkaXQgd2hhdCBpdHMgc2libGluZ3Mgc2hhcmVcbiAqIGBgYFxuICpcbiAqIFRoZSBSVUxFIGluc2lkZSBpcyBzaGFyZWQgdG9vLCBhbmQgaXMgaXRzZWxmIHN0YXRlZnVsIGJ5IGRlc2lnbiAocGVyLWNhbGwgYHNldFZhbHVlKGssIHYsXG4gKiB0cnVlKWAgbWFya3MgYSBrZXkgb24gaXQgZm9yIHRoZSByZXN0IG9mIHRoZSBydW4pOyB0aGUgcG9saWN5IGZyZWV6ZXMgd2hpY2ggcnVsZSwgbm90IHRoZVxuICogcnVsZSdzIG1hcmtzLiBUaGUgbWlycm9yIFNUT1JFIGlzIG5vdCBwb2xpY3kg4oCUIGVhY2ggcnVudGltZSAoYSBzdWJmbG93IGhhcyBpdHMgb3duKSBrZWVwc1xuICogaXRzIG93biBzdG9yZSB3aGVuIGBtaXJyb3JgIGlzIHNldC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbW1pdFZhbHVlc01vZGUgfSBmcm9tICdmb290dHJhY2UnO1xuaW1wb3J0IHR5cGUgeyBXcml0ZVByb3ZlbmFuY2VNb2RlIH0gZnJvbSAnZm9vdHRyYWNlL3dyaXRlJztcblxuaW1wb3J0IHR5cGUgeyBSZWFkVHJhY2tpbmdNb2RlLCBXcml0ZVRyYWNraW5nTW9kZSB9IGZyb20gJy4vZnJhbWVUeXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlZGFjdGlvblJ1bGUgfSBmcm9tICcuL3JlZGFjdGlvbi5qcyc7XG5cbi8qKlxuICogVGhlIGZvdXIgb2JzZXJ2YWJpbGl0eSBkaWFscyBhcyBhbiBleGVjdXRvciB0YWtlcyB0aGVtIOKAlCBldmVyeSBmaWVsZCBvcHRpb25hbCwgYW4gYWJzZW50XG4gKiBvbmUgaXMgaXRzIGRlZmF1bHQuIGBGbG93Q2hhcnRFeGVjdXRvck9wdGlvbnNgIGV4dGVuZHMgdGhpcyBpbnRlcmZhY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVuRGlhbHMge1xuICAvKipcbiAgICogUG9saWN5IGZvciBgU3RhZ2VTbmFwc2hvdC5zdGFnZVJlYWRzYCAoIzE0KS4gRGVmYXVsdCBgJ2Z1bGwnYCDigJQgZXZlcnlcbiAgICogdHJhY2tlZCByZWFkIGBzdHJ1Y3R1cmVkQ2xvbmVgcyB0aGUgdmFsdWUgaW50byB0aGUgc3RhZ2UncyByZWFkIHZpZXdcbiAgICogKHRoZSBoaXN0b3JpY2FsIGJlaGF2aW9yOyB3aGF0IGxlbnMvYWdlbnRmb290cHJpbnQgc25hcHNob3RzIHNob3cpLlxuICAgKiBgJ3N1bW1hcnknYCByZWNvcmRzIGEgY2hlYXAgdHlwZS9zaXplL3ByZXZpZXcgbWFya2VyIHBlciByZWFkOyBgJ29mZidgXG4gICAqIHJlY29yZHMgbm90aGluZyDigJQgemVybyBwZXItcmVhZCBjbG9uZSBjb3N0IChyZWFkcyBvZiBsYXJnZSB2YWx1ZXMgYmVjb21lXG4gICAqIH5mcmVlKS4gTmFycmF0aXZlIGFuZCBgU2NvcGVSZWNvcmRlci5vblJlYWRgIGFyZSBpZGVudGljYWwgaW4gZXZlcnkgbW9kZS5cbiAgICogQ2F2ZWF0OiB1bmRlciBgJ29mZidgIGEgc3RhZ2UncyBzbmFwc2hvdCBpcyBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIG9uZVxuICAgKiB0aGF0IHJlYWQgbm90aGluZyDigJQgYXVkaXRpbmcgY29uc3VtZXJzIHRoYXQgbmVlZCBcImRpZCBpdCByZWFkP1wiIHdpdGhvdXRcbiAgICogdGhlIHZhbHVlIGNvc3Qgc2hvdWxkIHByZWZlciBgJ3N1bW1hcnknYC5cbiAgICogRXF1aXZhbGVudCB0byBjYWxsaW5nIGBleGVjdXRvci5zZXRSZWFkVHJhY2tpbmcobW9kZSlgIGJlZm9yZSBgcnVuKClgLlxuICAgKi9cbiAgcmVhZFRyYWNraW5nPzogUmVhZFRyYWNraW5nTW9kZTtcblxuICAvKipcbiAgICogUG9saWN5IGZvciBgU3RhZ2VTbmFwc2hvdC5zdGFnZVdyaXRlc2AgKCMxM2MtQSkg4oCUIHRoZSBzaWJsaW5nIG9mXG4gICAqIHtAbGluayByZWFkVHJhY2tpbmd9OyB0aGUgdHdvIGRpYWxzIGFyZSBpbmRlcGVuZGVudC4gRGVmYXVsdCBgJ2Z1bGwnYCDigJRcbiAgICogZXZlcnkgdHJhY2tlZCB3cml0ZSBgc3RydWN0dXJlZENsb25lYHMgdGhlIHZhbHVlIGludG8gdGhlIHN0YWdlJ3Mgd3JpdGVcbiAgICogdmlldyAodGhlIGhpc3RvcmljYWwgYmVoYXZpb3IpLiBgJ3N1bW1hcnknYCByZWNvcmRzIGEgY2hlYXBcbiAgICogYFdyaXRlU3VtbWFyeU1hcmtlcmAgKHR5cGUvc2l6ZS9wcmV2aWV3KSBwZXIgd3JpdGU7IGAnb2ZmJ2AgcmVjb3Jkc1xuICAgKiBub3RoaW5nIOKAlCBgc3RhZ2VXcml0ZXNgIGlzIGFic2VudCBmcm9tIHRoZSBzbmFwc2hvdC5cbiAgICpcbiAgICogT2JzZXJ2YWJsZSBjb25zZXF1ZW5jZXMg4oCUIHdoYXQgdGhlIHBvbGljeSBET0VTIGdvdmVybjpcbiAgICogLSBgU3RhZ2VTbmFwc2hvdC5zdGFnZVdyaXRlc2AgKG1hcmtlcnMgdW5kZXIgYCdzdW1tYXJ5J2AsIGFic2VudCB1bmRlclxuICAgKiAgIGAnb2ZmJ2ApLlxuICAgKiAtIFRoZSBjb21taXQgb2JzZXJ2ZXIgcGF5bG9hZDogYFNjb3BlUmVjb3JkZXIub25Db21taXQobXV0YXRpb25zKWBcbiAgICogICByZWNlaXZlcyB0aGUgcmV0YWluZWQgYF9zdGFnZVdyaXRlc2AgZW50cmllcywgc28gaXQgY2FycmllcyB0aGUgc2FtZVxuICAgKiAgIG1hcmtlcnMgdW5kZXIgYCdzdW1tYXJ5J2AgYW5kIGFuIGVtcHR5IG11dGF0aW9ucyBiYWcgdW5kZXIgYCdvZmYnYCDigJRcbiAgICogICBkZWZlcnJlZC9vYnNlcnZlciBjb25zdW1lcnMgc2VlIGV4YWN0bHkgd2hhdCByZXRlbnRpb24gc3RvcmVkLlxuICAgKlxuICAgKiBXaGF0IGl0IGRvZXMgTk9UIGdvdmVybjpcbiAgICogLSBUaGUgd3JpdGVzIHRoZW1zZWx2ZXM6IHNoYXJlZCBzdGF0ZSwgdGhlIHRyYW5zYWN0aW9uIGJ1ZmZlciwgYW5kIHRoZVxuICAgKiAgIENPTU1JVCBMT0cgYXJlIGlkZW50aWNhbCBpbiBldmVyeSBtb2RlIChjb21taXRMb2cgdmFsdWVzIGtlZXAgdGhlaXJcbiAgICogICBmdWxsIHBheWxvYWRzIOKAlCB0aGUgbG9zc2xlc3MgbGluZWFyLWNvc3QgZml4IGZvciB0aG9zZSBpcyB0aGVcbiAgICogICB7QGxpbmsgY29tbWl0VmFsdWVzfSBkaWFsLCAjMTNjLUIpLlxuICAgKiAtIFBlci1vcCBgU2NvcGVSZWNvcmRlci5vbldyaXRlYCBldmVudHMg4oCUIHRoZXkgZmlyZSB3aXRoIGxpdmUgdmFsdWVzXG4gICAqICAgcmVnYXJkbGVzcyAoZGVsaXZlcnkgdGllciwgUkZDLTAwMSdzIGNvbmNlcm4pLCBzbyBuYXJyYXRpdmUgb3V0cHV0IGlzXG4gICAqICAgaWRlbnRpY2FsIGluIGV2ZXJ5IG1vZGUuXG4gICAqIC0gUmVkYWN0aW9uOiBhIHBvbGljeS9wZXItY2FsbC1yZWRhY3RlZCB3cml0ZSBzdG9yZXMgYCdbUkVEQUNURURdJ2BcbiAgICogICB1bmRlciBgJ2Z1bGwnYCBBTkQgYCdzdW1tYXJ5J2AgKHJlZGFjdGlvbiB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdGhlXG4gICAqICAgZGlhbDsgYSBtYXJrZXIgd291bGQgbGVhayBzaXplL3ByZXZpZXcpLCBhbmQgbm90aGluZyB1bmRlciBgJ29mZidgLlxuICAgKlxuICAgKiBDYXZlYXQ6IHVuZGVyIGAnb2ZmJ2AgYSBzdGFnZSdzIFNOQVBTSE9UIGlzIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gb25lXG4gICAqIHRoYXQgd3JvdGUgbm90aGluZyDigJQgYnV0IHVubGlrZSBgcmVhZFRyYWNraW5nOiAnb2ZmJ2AsIHRoZSBjb21taXQgbG9nXG4gICAqIHN0aWxsIHJlY29yZHMgZXZlcnkgbmV0IGNoYW5nZSwgc28gXCJkaWQgaXQgd3JpdGU/XCIgc3RheXMgYW5zd2VyYWJsZS5cbiAgICogRXF1aXZhbGVudCB0byBjYWxsaW5nIGBleGVjdXRvci5zZXRXcml0ZVRyYWNraW5nKG1vZGUpYCBiZWZvcmUgYHJ1bigpYC5cbiAgICovXG4gIHdyaXRlVHJhY2tpbmc/OiBXcml0ZVRyYWNraW5nTW9kZTtcblxuICAvKipcbiAgICogRW5jb2RpbmcgcG9saWN5IGZvciBDT01NSVQgTE9HIHZhbHVlcyAoIzEzYy1CKSDigJQgdGhlIHRoaXJkIGRpYWwgb2YgdGhlXG4gICAqIGZhbWlseSwgYW5kIHVubGlrZSBpdHMgc2libGluZ3MgaXQgaXMgKipsb3NzbGVzcyBpbiBib3RoIG1vZGVzKiogKGl0XG4gICAqIGNoYW5nZXMgdGhlIGxvZydzIGVuY29kaW5nLCBuZXZlciBpdHMgaW5mb3JtYXRpb24pLlxuICAgKlxuICAgKiAtIGAnZnVsbCdgIChkZWZhdWx0KSDigJQgZXZlcnkgc3Vydml2aW5nIGBzZXRgIHBhdGggc3RvcmVzIHRoZSBmdWxsIGZpbmFsXG4gICAqICAgdmFsdWU7IGJ5dGUtaWRlbnRpY2FsIHRvIHRoZSBoaXN0b3JpY2FsIGJlaGF2aW9yLlxuICAgKiAtIGAnZGVsdGEnYCDigJQgYXJyYXkgbmV0LWNoYW5nZXMgdGhhdCBhcmUgXCJiYXNlIHBsdXMgYSB0YWlsXCIgY29tbWl0IGFzIGFuXG4gICAqICAgYGFwcGVuZGAgdHJhY2UgdmVyYiBzdG9yaW5nIE9OTFkgdGhlIHRhaWwgKHRoZSBncm93aW5nLWhpc3RvcnkgY29tbWl0XG4gICAqICAgbG9nIGJlY29tZXMgbGluZWFyIGluc3RlYWQgb2YgTyhOwrIpIHJldGFpbmVkKTsgYGRlbGV0ZVZhbHVlKClgIGNvbW1pdHNcbiAgICogICBhcyBhIHJlYWwgYGRlbGV0ZWAgdmVyYiAocmVwbGF5IHJlbW92ZXMgdGhlIGtleSBpbnN0ZWFkIG9mIGxlYXZpbmdcbiAgICogICBga2V5OiB1bmRlZmluZWRgKTsgYnVuZGxlcyBjYXJyeSBleGFjdGx5IE9ORSB0cmFjZSBlbnRyeSBwZXIgc3Vydml2aW5nXG4gICAqICAgcGF0aC4gUmVwbGF5ICh0aGUgb25lIHZlcmIgbGF3IOKAlCBsaXZlIHN0YXRlLCBgbWF0ZXJpYWxpc2UoKWAsIHRoZVxuICAgKiAgIHJlZGFjdGVkIG1pcnJvciwgYHN0YXRlQXRgKSByZWNvbnN0cnVjdHMgZXZlcnkgc3RlcCdzIGZ1bGwgc3RhdGVcbiAgICogICBleGFjdGx5LlxuICAgKlxuICAgKiBDb25zdW1lcnMgdGhhdCByZWFkIGBidW5kbGUub3ZlcndyaXRlW2tleV1gIGFzIFwidGhlIGZ1bGwgdmFsdWUgd3JpdHRlblwiXG4gICAqIG11c3Qgc3dpdGNoIHRvIGBjb21taXRWYWx1ZUF0KGNvbW1pdExvZywgaWR4LCBrZXkpYCBmcm9tXG4gICAqIGBmb290dHJhY2VgIOKAlCB1bmRlciBgJ2RlbHRhJ2AgdGhhdCB2YWx1ZSBpcyB2ZXJiLXF1YWxpZmllZCAoYW5cbiAgICogYGFwcGVuZGAgYnVuZGxlIGhvbGRzIG9ubHkgdGhlIHRhaWwpLiBQYXRoLXRpZXIgY29uc3VtZXJzXG4gICAqIChgZmluZExhc3RXcml0ZXJgLCBgY2F1c2FsQ2hhaW5gLCBuYXJyYXRpdmUsIGxlbnMgaGlnaGxpZ2h0cykgYXJlXG4gICAqIHVuYWZmZWN0ZWQuIFRoZSBhY3RpdmUgbW9kZSBpcyBzdXJmYWNlZCBhc1xuICAgKiBgZ2V0U25hcHNob3QoKS5jb21taXRWYWx1ZXNgLlxuICAgKlxuICAgKiBIb25lc3QgY29zdCBub3RlOiBhcHBlbmQgZGV0ZWN0aW9uIGlzIG5ldyB3YWxsIHdvcmsg4oCUIGFuIE8ofGJhc2UgYXJyYXl8KVxuICAgKiBzdHJ1Y3R1cmFsIHByZWZpeCBjb21wYXJlIHBlciBhcnJheS1zZXQgcGF0aCBwZXIgY29tbWl0LiBPbiBhIGhpdCB0aGVcbiAgICogY29tbWl0IGdldHMgY2hlYXBlciBpbiBib3RoIHdhbGwgYW5kIGhlYXA7IG9uIGEgbWlzcyAocHJlZml4IGRpdmVyZ2VzKVxuICAgKiBpdCBwYXlzIGNvbXBhcmUgKyBmdWxsIGNsb25lLiBgJ2Z1bGwnYCBwYXlzIHplcm8uXG4gICAqIEVxdWl2YWxlbnQgdG8gY2FsbGluZyBgZXhlY3V0b3Iuc2V0Q29tbWl0VmFsdWVzKG1vZGUpYCBiZWZvcmUgYHJ1bigpYC5cbiAgICovXG4gIGNvbW1pdFZhbHVlcz86IENvbW1pdFZhbHVlc01vZGU7XG5cbiAgLyoqXG4gICAqIFBlci13cml0ZSByZWFkIHByb3ZlbmFuY2UgKCNQMSkg4oCUIHRoZSBmb3VydGggZGlhbCBvZiB0aGUgZmFtaWx5LiBEZWZhdWx0XG4gICAqIGAnb2ZmJ2A6IHplcm8gY29zdCwgYnl0ZS1pZGVudGljYWwgY29tbWl0IGxvZ3MuIGAncmVhZHMtcHJlZml4J2A6IGV2ZXJ5XG4gICAqIGNvbW1pdHRlZCBgVHJhY2VFbnRyeWAgY2FycmllcyBgcmVhZEtleXNgIOKAlCB0aGUga2V5cyB0cmFja2VkLXJlYWQgQkVGT1JFXG4gICAqIHRoYXQgd3JpdGUg4oCUIGVuYWJsaW5nIHBlci13cml0ZSBjYXVzYWwgYXR0cmlidXRpb24gKGBjYXVzYWxDaGFpbmAnc1xuICAgKiBgZWRnZUF0dHJpYnV0aW9uOiAncGVyLXdyaXRlJ2AgYW5kIHZhcmlhYmxlIHNsaWNlcykuIENvc3Q6IG9uZSBzbWFsbFxuICAgKiBhcnJheSBjb3B5IHBlciB3cml0ZS4gU25hcHNob3QgZGlzY3JpbWluYW50OlxuICAgKiBgZ2V0U25hcHNob3QoKS53cml0ZVByb3ZlbmFuY2VgLlxuICAgKi9cbiAgd3JpdGVQcm92ZW5hbmNlPzogV3JpdGVQcm92ZW5hbmNlTW9kZTtcbn1cblxuLyoqIFRoZSBydW4ncyBwb2xpY3k6IGV2ZXJ5IGRpYWwgcmVzb2x2ZWQsIHBsdXMgdGhlIHJlZGFjdGlvbiBydWxlIGFuZCB0aGUgbWlycm9yIGZsYWcuIEZyb3plbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVuUG9saWN5IGV4dGVuZHMgUmVhZG9ubHk8UmVxdWlyZWQ8UnVuRGlhbHM+PiB7XG4gIC8qKiBUaGUgcnVuJ3MgcmVkYWN0aW9uIHJ1bGUg4oCUIHRoZSBPTkUgb3duZXIgb2YgdGhlIHZlcmRpY3QgKGByZWRhY3Rpb24udHNgKS4gQWJzZW50IG9uIGJhcmUgZnJhbWVzLiAqL1xuICByZWFkb25seSByZWRhY3Rpb24/OiBSZWRhY3Rpb25SdWxlO1xuICAvKiogS2VlcCBhIHJlZGFjdGVkIG1pcnJvciBvZiB0aGUgaGVhcCAoYSBydW4gd2l0aCBhIHJlZGFjdGlvbiBwb2xpY3kpLiBFYWNoIHJ1bnRpbWUgb3ducyBpdHMgb3duIHN0b3JlLiAqL1xuICByZWFkb25seSBtaXJyb3I6IGJvb2xlYW47XG59XG5cbi8qKiBFYWNoIGRpYWwncyBkZWZhdWx0IOKAlCB0aGUgdmFsdWUgYSBydW4gZ2V0cyB3aGVuIHRoZSBvcHRpb24gaXMgYWJzZW50LiBUaGUgZGlhbCBsaXN0IElTIHRoZXNlIGtleXMuICovXG5leHBvcnQgY29uc3QgRElBTF9ERUZBVUxUUzogUmVhZG9ubHk8UmVxdWlyZWQ8UnVuRGlhbHM+PiA9IE9iamVjdC5mcmVlemUoe1xuICByZWFkVHJhY2tpbmc6ICdmdWxsJyxcbiAgd3JpdGVUcmFja2luZzogJ2Z1bGwnLFxuICBjb21taXRWYWx1ZXM6ICdmdWxsJyxcbiAgd3JpdGVQcm92ZW5hbmNlOiAnb2ZmJyxcbn0pO1xuXG5jb25zdCBESUFMX05BTUVTID0gT2JqZWN0LmtleXMoRElBTF9ERUZBVUxUUykgYXMgQXJyYXk8a2V5b2YgUnVuRGlhbHM+O1xuXG4vKiogRXZlcnkgZGVmYXVsdCwgbm8gcnVsZSwgbm8gbWlycm9yIOKAlCB3aGF0IGEgYmFyZSBmcmFtZSAoYSB1bml0IHRlc3QncyBgbmV3IFN0YWdlQ29udGV4dGApIHJ1bnMgdW5kZXIuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9SVU5fUE9MSUNZOiBSdW5Qb2xpY3kgPSBPYmplY3QuZnJlZXplKHsgLi4uRElBTF9ERUZBVUxUUywgbWlycm9yOiBmYWxzZSB9KTtcblxuLyoqIEJ1aWxkIGEgcnVuJ3MgcG9saWN5OiBhYnNlbnQgZGlhbHMgdGFrZSB0aGVpciBkZWZhdWx0OyB0aGUgcmVzdWx0IGlzIGZyb3plbi4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5Qb2xpY3koZGlhbHM6IFJ1bkRpYWxzID0ge30sIHJlZGFjdGlvbj86IFJlZGFjdGlvblJ1bGUsIG1pcnJvciA9IGZhbHNlKTogUnVuUG9saWN5IHtcbiAgY29uc3QgcmVzb2x2ZWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyAuLi5ESUFMX0RFRkFVTFRTLCAuLi5waWNrRGlhbHMoZGlhbHMpLCBtaXJyb3IgfTtcbiAgaWYgKHJlZGFjdGlvbikgcmVzb2x2ZWQucmVkYWN0aW9uID0gcmVkYWN0aW9uO1xuICByZXR1cm4gT2JqZWN0LmZyZWV6ZShyZXNvbHZlZCkgYXMgdW5rbm93biBhcyBSdW5Qb2xpY3k7XG59XG5cbi8qKiBUaGUgZGlhbHMgc2V0IG9uIGBzb3VyY2VgIChhbiBvcHRpb25zIG9iamVjdCwgc2F5KSDigJQgYW5kIG5vdGhpbmcgZWxzZSBmcm9tIGl0LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBpY2tEaWFscyhzb3VyY2U6IFJ1bkRpYWxzKTogUnVuRGlhbHMge1xuICBjb25zdCBkaWFsczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcbiAgZm9yIChjb25zdCBuYW1lIG9mIERJQUxfTkFNRVMpIGlmIChzb3VyY2VbbmFtZV0gIT09IHVuZGVmaW5lZCkgZGlhbHNbbmFtZV0gPSBzb3VyY2VbbmFtZV07XG4gIHJldHVybiBkaWFscyBhcyBSdW5EaWFscztcbn1cblxuLyoqIFRoZSBzYW1lIHBvbGljeSB1bmRlciBhbm90aGVyIHJ1bGUg4oCUIGEgTkVXIGZyb3plbiBvYmplY3Q7IHRoZSBvbGQgb25lIGlzIG5ldmVyIGVkaXRlZC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoUmVkYWN0aW9uKHBvbGljeTogUnVuUG9saWN5LCByZWRhY3Rpb246IFJlZGFjdGlvblJ1bGUpOiBSdW5Qb2xpY3kge1xuICByZXR1cm4gZGVyaXZlUG9saWN5KHBvbGljeSwgeyByZWRhY3Rpb24gfSk7XG59XG5cbi8qKlxuICogVGhlIHNhbWUgcG9saWN5IHdpdGggc29tZSBzZXR0aW5ncyBjaGFuZ2VkIOKAlCBhIE5FVyBmcm96ZW4gb2JqZWN0OyB0aGUgb2xkIG9uZSBpcyBuZXZlclxuICogZWRpdGVkLiBBIGZyYW1lIG9yIHJ1bnRpbWUgY2hhbmdlcyBhIHNldHRpbmcgYnkgc3dhcHBpbmcgaW4gYSBkZXJpdmVkIHBvbGljeSAoYHVzZVBvbGljeWApLCBzb1xuICogbm8gbXV0YWJsZSBkaWFsIGZpZWxkIGV4aXN0cyBhbnl3aGVyZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlcml2ZVBvbGljeShwb2xpY3k6IFJ1blBvbGljeSwgcGF0Y2g6IFBhcnRpYWw8UnVuUG9saWN5Pik6IFJ1blBvbGljeSB7XG4gIHJldHVybiBPYmplY3QuZnJlZXplKHsgLi4ucG9saWN5LCAuLi5wYXRjaCB9KTtcbn1cbiJdfQ==
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuUG9saWN5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9tZW1vcnkvcnVuUG9saWN5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7QUFvSEgseUdBQXlHO0FBQ3pHLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBaUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN2RSxXQUFXLEVBQUUsS0FBSztJQUNsQixZQUFZLEVBQUUsTUFBTTtJQUNwQixhQUFhLEVBQUUsTUFBTTtJQUNyQixZQUFZLEVBQUUsTUFBTTtJQUNwQixlQUFlLEVBQUUsS0FBSztDQUN2QixDQUFDLENBQUM7QUFFSCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBMEIsQ0FBQztBQUV2RSwyR0FBMkc7QUFDM0csTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQWMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEdBQUcsYUFBYSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBRWhHLG1GQUFtRjtBQUNuRixNQUFNLFVBQVUsU0FBUyxDQUFDLFFBQWtCLEVBQUUsRUFBRSxTQUF5QixFQUFFLE1BQU0sR0FBRyxLQUFLO0lBQ3ZGLE1BQU0sUUFBUSxHQUE0QixFQUFFLEdBQUcsYUFBYSxFQUFFLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQzVGLElBQUksU0FBUztRQUFFLFFBQVEsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzlDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQXlCLENBQUM7QUFDekQsQ0FBQztBQUVELHFGQUFxRjtBQUNyRixNQUFNLFVBQVUsU0FBUyxDQUFDLE1BQWdCO0lBQ3hDLE1BQU0sS0FBSyxHQUE0QixFQUFFLENBQUM7SUFDMUMsS0FBSyxNQUFNLElBQUksSUFBSSxVQUFVO1FBQUUsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssU0FBUztZQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUYsT0FBTyxLQUFpQixDQUFDO0FBQzNCLENBQUM7QUFFRCw2RkFBNkY7QUFDN0YsTUFBTSxVQUFVLGFBQWEsQ0FBQyxNQUFpQixFQUFFLFNBQXdCO0lBQ3ZFLE9BQU8sWUFBWSxDQUFDLE1BQU0sRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDN0MsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLE1BQWlCLEVBQUUsS0FBeUI7SUFDdkUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ2hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFJ1blBvbGljeSDigJQgd2hhdCBhIHJ1biByZXRhaW5zLCBlbmNvZGVzIGFuZCBzY3J1YnMsIGFzIE9ORSBpbW11dGFibGUgb2JqZWN0IChGNSkuXG4gKlxuICogV0hZLiBBIHJ1biBjYXJyaWVzIHNpeCBzZXR0aW5ncyB0aGF0IGV2ZXJ5IHN0YWdlIGZyYW1lIG11c3QgYWdyZWUgb246IHRoZSBmb3VyXG4gKiBvYnNlcnZhYmlsaXR5IGRpYWxzIChgcmVhZFRyYWNraW5nYCwgYHdyaXRlVHJhY2tpbmdgLCBgY29tbWl0VmFsdWVzYCwgYHdyaXRlUHJvdmVuYW5jZWApLFxuICogdGhlIHJlZGFjdGlvbiBydWxlLCBhbmQgd2hldGhlciBhIHJlZGFjdGVkIG1pcnJvciBpcyBrZXB0LiBVbnRpbCA5LjM0LjAgZWFjaCBvbmUgd2FzXG4gKiBjb3BpZWQgZmllbGQgYnkgZmllbGQgZG93biB0aHJlZSBzZXBhcmF0ZSBwYXRocyDigJQgYEV4ZWN1dGlvblJ1bnRpbWUudXNlKmAgb24gdGhlIHJvb3QsXG4gKiBgU3RhZ2VDb250ZXh0LmNyZWF0ZU5leHRgL2BjcmVhdGVDaGlsZGAgKHNpeCBhc3NpZ25tZW50cyBlYWNoKSwgYW5kIGEgZHVjay10eXBlZCBwdXNoIHBlclxuICogZGlhbCBpbiBgU3ViZmxvd0V4ZWN1dG9yYCDigJQgc28gYSBuZXcgZGlhbCBtZWFudCBzaXggZWRpdHMsIGFuZCBhIG1pc3NlZCBvbmUgcmFuIGEgc3ViZmxvd1xuICogb24gdGhlIGRlZmF1bHQgc2lsZW50bHkuIE5vdyB0aGUgZXhlY3V0b3IgYnVpbGRzIE9ORSBwb2xpY3kgcGVyIHJ1biAoYW5kIHBlciByZXN1bWUpLCB0aGVcbiAqIHJ1bnRpbWUgaW5zdGFsbHMgaXQgb24gaXRzIHJvb3QgZnJhbWUsIGFuZCBldmVyeSBmcmFtZSBob2xkcyBpdCBCWSBSRUZFUkVOQ0U6IGEgY2hpbGQsIGFcbiAqIGNvbnRpbnVhdGlvbiBhbmQgYSBzdWJmbG93J3Mgcm9vdCAoaXRzIHNlZWQgZnJhbWUgaW5jbHVkZWQpIGFsbCBwb2ludCBhdCB0aGUgc2FtZSBvYmplY3QuXG4gKiBUaGUgYm9ycm93ZWQgaWRlYSBpcyBHbydzIGBjb250ZXh0LkNvbnRleHRgIC8gT3BlblRlbGVtZXRyeSdzIGBDb250ZXh0YDogYW4gaW1tdXRhYmxlIHZhbHVlXG4gKiBoYW5kZWQgZG93biwgbmV2ZXIgY29waWVkIGFwYXJ0LlxuICpcbiAqIEFERElORyBBIERJQUwgaXMgdHdvIGZpbGVzOiBhIGZpZWxkICsgaXRzIGRlZmF1bHQgaGVyZSAoe0BsaW5rIFJ1bkRpYWxzfSxcbiAqIHtAbGluayBESUFMX0RFRkFVTFRTfSksIGFuZCB0aGUgZnJhbWUgY29kZSB0aGF0IHJlYWRzIGBwb2xpY3kuPGRpYWw+YCAoYFN0YWdlQ29udGV4dGApLiBUaGVcbiAqIGV4ZWN1dG9yJ3Mgb3B0aW9ucyBpbmhlcml0IHtAbGluayBSdW5EaWFsc30sIHBpY2tzIHRoZW0gd2l0aCB7QGxpbmsgcGlja0RpYWxzfSwgYW5kIGV2ZXJ5XG4gKiBwcm9wYWdhdGlvbiBwYXRoIGNhcnJpZXMgdGhlIHdob2xlIG9iamVjdCDigJQgbm9uZSBvZiB0aGVtIG5hbWVzIGEgZGlhbC5cbiAqXG4gKiBgYGB0c1xuICogY29uc3QgcG9saWN5ID0gcnVuUG9saWN5KHsgY29tbWl0VmFsdWVzOiAnZGVsdGEnIH0sIHJ1bGUsIHRydWUpO1xuICogcG9saWN5LnJlYWRUcmFja2luZzsgLy8gJ2Z1bGwnIOKAlCBhbiBhYnNlbnQgZGlhbCBpcyBpdHMgZGVmYXVsdFxuICogT2JqZWN0LmlzRnJvemVuKHBvbGljeSk7IC8vIHRydWUg4oCUIGEgZnJhbWUgY2FuIG5ldmVyIGVkaXQgd2hhdCBpdHMgc2libGluZ3Mgc2hhcmVcbiAqIGBgYFxuICpcbiAqIFRoZSBSVUxFIGluc2lkZSBpcyBzaGFyZWQgdG9vLCBhbmQgaXMgaXRzZWxmIHN0YXRlZnVsIGJ5IGRlc2lnbiAocGVyLWNhbGwgYHNldFZhbHVlKGssIHYsXG4gKiB0cnVlKWAgbWFya3MgYSBrZXkgb24gaXQgZm9yIHRoZSByZXN0IG9mIHRoZSBydW4pOyB0aGUgcG9saWN5IGZyZWV6ZXMgd2hpY2ggcnVsZSwgbm90IHRoZVxuICogcnVsZSdzIG1hcmtzLiBUaGUgbWlycm9yIFNUT1JFIGlzIG5vdCBwb2xpY3kg4oCUIGVhY2ggcnVudGltZSAoYSBzdWJmbG93IGhhcyBpdHMgb3duKSBrZWVwc1xuICogaXRzIG93biBzdG9yZSB3aGVuIGBtaXJyb3JgIGlzIHNldC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IENvbW1pdFZhbHVlc01vZGUgfSBmcm9tICdmb290dHJhY2UnO1xuaW1wb3J0IHR5cGUgeyBSZWFkU291cmNlTGltaXRzLCBXcml0ZVByb3ZlbmFuY2VNb2RlIH0gZnJvbSAnZm9vdHRyYWNlL3dyaXRlJztcblxuaW1wb3J0IHR5cGUgeyBSZWFkVHJhY2tpbmdNb2RlLCBXcml0ZVRyYWNraW5nTW9kZSB9IGZyb20gJy4vZnJhbWVUeXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlZGFjdGlvblJ1bGUgfSBmcm9tICcuL3JlZGFjdGlvbi5qcyc7XG5cbi8qKlxuICogVGhlIGZvdXIgb2JzZXJ2YWJpbGl0eSBkaWFscyBhcyBhbiBleGVjdXRvciB0YWtlcyB0aGVtIOKAlCBldmVyeSBmaWVsZCBvcHRpb25hbCwgYW4gYWJzZW50XG4gKiBvbmUgaXMgaXRzIGRlZmF1bHQuIGBGbG93Q2hhcnRFeGVjdXRvck9wdGlvbnNgIGV4dGVuZHMgdGhpcyBpbnRlcmZhY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVuRGlhbHMge1xuICAvKiogTmF0aXZlLCBib3VuZGVkIHNjYWxhciByZWFkLXNvdXJjZSBvY2N1cnJlbmNlcyAoIzExMykuIERlZmF1bHQgZmFsc2U7IG1lbW9yeS1vbmx5IGluIHBhY2tldCAzLiAqL1xuICByZWFkU291cmNlcz86IGJvb2xlYW4gfCB7IHJlYWRvbmx5IGxpbWl0czogUGFydGlhbDxSZWFkU291cmNlTGltaXRzPiB9O1xuICAvKipcbiAgICogUG9saWN5IGZvciBgU3RhZ2VTbmFwc2hvdC5zdGFnZVJlYWRzYCAoIzE0KS4gRGVmYXVsdCBgJ2Z1bGwnYCDigJQgZXZlcnlcbiAgICogdHJhY2tlZCByZWFkIGBzdHJ1Y3R1cmVkQ2xvbmVgcyB0aGUgdmFsdWUgaW50byB0aGUgc3RhZ2UncyByZWFkIHZpZXdcbiAgICogKHRoZSBoaXN0b3JpY2FsIGJlaGF2aW9yOyB3aGF0IGxlbnMvYWdlbnRmb290cHJpbnQgc25hcHNob3RzIHNob3cpLlxuICAgKiBgJ3N1bW1hcnknYCByZWNvcmRzIGEgY2hlYXAgdHlwZS9zaXplL3ByZXZpZXcgbWFya2VyIHBlciByZWFkOyBgJ29mZidgXG4gICAqIHJlY29yZHMgbm90aGluZyDigJQgemVybyBwZXItcmVhZCBjbG9uZSBjb3N0IChyZWFkcyBvZiBsYXJnZSB2YWx1ZXMgYmVjb21lXG4gICAqIH5mcmVlKS4gTmFycmF0aXZlIGFuZCBgU2NvcGVSZWNvcmRlci5vblJlYWRgIGFyZSBpZGVudGljYWwgaW4gZXZlcnkgbW9kZS5cbiAgICogQ2F2ZWF0OiB1bmRlciBgJ29mZidgIGEgc3RhZ2UncyBzbmFwc2hvdCBpcyBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIG9uZVxuICAgKiB0aGF0IHJlYWQgbm90aGluZyDigJQgYXVkaXRpbmcgY29uc3VtZXJzIHRoYXQgbmVlZCBcImRpZCBpdCByZWFkP1wiIHdpdGhvdXRcbiAgICogdGhlIHZhbHVlIGNvc3Qgc2hvdWxkIHByZWZlciBgJ3N1bW1hcnknYC5cbiAgICogRXF1aXZhbGVudCB0byBjYWxsaW5nIGBleGVjdXRvci5zZXRSZWFkVHJhY2tpbmcobW9kZSlgIGJlZm9yZSBgcnVuKClgLlxuICAgKi9cbiAgcmVhZFRyYWNraW5nPzogUmVhZFRyYWNraW5nTW9kZTtcblxuICAvKipcbiAgICogUG9saWN5IGZvciBgU3RhZ2VTbmFwc2hvdC5zdGFnZVdyaXRlc2AgKCMxM2MtQSkg4oCUIHRoZSBzaWJsaW5nIG9mXG4gICAqIHtAbGluayByZWFkVHJhY2tpbmd9OyB0aGUgdHdvIGRpYWxzIGFyZSBpbmRlcGVuZGVudC4gRGVmYXVsdCBgJ2Z1bGwnYCDigJRcbiAgICogZXZlcnkgdHJhY2tlZCB3cml0ZSBgc3RydWN0dXJlZENsb25lYHMgdGhlIHZhbHVlIGludG8gdGhlIHN0YWdlJ3Mgd3JpdGVcbiAgICogdmlldyAodGhlIGhpc3RvcmljYWwgYmVoYXZpb3IpLiBgJ3N1bW1hcnknYCByZWNvcmRzIGEgY2hlYXBcbiAgICogYFdyaXRlU3VtbWFyeU1hcmtlcmAgKHR5cGUvc2l6ZS9wcmV2aWV3KSBwZXIgd3JpdGU7IGAnb2ZmJ2AgcmVjb3Jkc1xuICAgKiBub3RoaW5nIOKAlCBgc3RhZ2VXcml0ZXNgIGlzIGFic2VudCBmcm9tIHRoZSBzbmFwc2hvdC5cbiAgICpcbiAgICogT2JzZXJ2YWJsZSBjb25zZXF1ZW5jZXMg4oCUIHdoYXQgdGhlIHBvbGljeSBET0VTIGdvdmVybjpcbiAgICogLSBgU3RhZ2VTbmFwc2hvdC5zdGFnZVdyaXRlc2AgKG1hcmtlcnMgdW5kZXIgYCdzdW1tYXJ5J2AsIGFic2VudCB1bmRlclxuICAgKiAgIGAnb2ZmJ2ApLlxuICAgKiAtIFRoZSBjb21taXQgb2JzZXJ2ZXIgcGF5bG9hZDogYFNjb3BlUmVjb3JkZXIub25Db21taXQobXV0YXRpb25zKWBcbiAgICogICByZWNlaXZlcyB0aGUgcmV0YWluZWQgYF9zdGFnZVdyaXRlc2AgZW50cmllcywgc28gaXQgY2FycmllcyB0aGUgc2FtZVxuICAgKiAgIG1hcmtlcnMgdW5kZXIgYCdzdW1tYXJ5J2AgYW5kIGFuIGVtcHR5IG11dGF0aW9ucyBiYWcgdW5kZXIgYCdvZmYnYCDigJRcbiAgICogICBkZWZlcnJlZC9vYnNlcnZlciBjb25zdW1lcnMgc2VlIGV4YWN0bHkgd2hhdCByZXRlbnRpb24gc3RvcmVkLlxuICAgKlxuICAgKiBXaGF0IGl0IGRvZXMgTk9UIGdvdmVybjpcbiAgICogLSBUaGUgd3JpdGVzIHRoZW1zZWx2ZXM6IHNoYXJlZCBzdGF0ZSwgdGhlIHRyYW5zYWN0aW9uIGJ1ZmZlciwgYW5kIHRoZVxuICAgKiAgIENPTU1JVCBMT0cgYXJlIGlkZW50aWNhbCBpbiBldmVyeSBtb2RlIChjb21taXRMb2cgdmFsdWVzIGtlZXAgdGhlaXJcbiAgICogICBmdWxsIHBheWxvYWRzIOKAlCB0aGUgbG9zc2xlc3MgbGluZWFyLWNvc3QgZml4IGZvciB0aG9zZSBpcyB0aGVcbiAgICogICB7QGxpbmsgY29tbWl0VmFsdWVzfSBkaWFsLCAjMTNjLUIpLlxuICAgKiAtIFBlci1vcCBgU2NvcGVSZWNvcmRlci5vbldyaXRlYCBldmVudHMg4oCUIHRoZXkgZmlyZSB3aXRoIGxpdmUgdmFsdWVzXG4gICAqICAgcmVnYXJkbGVzcyAoZGVsaXZlcnkgdGllciwgUkZDLTAwMSdzIGNvbmNlcm4pLCBzbyBuYXJyYXRpdmUgb3V0cHV0IGlzXG4gICAqICAgaWRlbnRpY2FsIGluIGV2ZXJ5IG1vZGUuXG4gICAqIC0gUmVkYWN0aW9uOiBhIHBvbGljeS9wZXItY2FsbC1yZWRhY3RlZCB3cml0ZSBzdG9yZXMgYCdbUkVEQUNURURdJ2BcbiAgICogICB1bmRlciBgJ2Z1bGwnYCBBTkQgYCdzdW1tYXJ5J2AgKHJlZGFjdGlvbiB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdGhlXG4gICAqICAgZGlhbDsgYSBtYXJrZXIgd291bGQgbGVhayBzaXplL3ByZXZpZXcpLCBhbmQgbm90aGluZyB1bmRlciBgJ29mZidgLlxuICAgKlxuICAgKiBDYXZlYXQ6IHVuZGVyIGAnb2ZmJ2AgYSBzdGFnZSdzIFNOQVBTSE9UIGlzIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gb25lXG4gICAqIHRoYXQgd3JvdGUgbm90aGluZyDigJQgYnV0IHVubGlrZSBgcmVhZFRyYWNraW5nOiAnb2ZmJ2AsIHRoZSBjb21taXQgbG9nXG4gICAqIHN0aWxsIHJlY29yZHMgZXZlcnkgbmV0IGNoYW5nZSwgc28gXCJkaWQgaXQgd3JpdGU/XCIgc3RheXMgYW5zd2VyYWJsZS5cbiAgICogRXF1aXZhbGVudCB0byBjYWxsaW5nIGBleGVjdXRvci5zZXRXcml0ZVRyYWNraW5nKG1vZGUpYCBiZWZvcmUgYHJ1bigpYC5cbiAgICovXG4gIHdyaXRlVHJhY2tpbmc/OiBXcml0ZVRyYWNraW5nTW9kZTtcblxuICAvKipcbiAgICogRW5jb2RpbmcgcG9saWN5IGZvciBDT01NSVQgTE9HIHZhbHVlcyAoIzEzYy1CKSDigJQgdGhlIHRoaXJkIGRpYWwgb2YgdGhlXG4gICAqIGZhbWlseSwgYW5kIHVubGlrZSBpdHMgc2libGluZ3MgaXQgaXMgKipsb3NzbGVzcyBpbiBib3RoIG1vZGVzKiogKGl0XG4gICAqIGNoYW5nZXMgdGhlIGxvZydzIGVuY29kaW5nLCBuZXZlciBpdHMgaW5mb3JtYXRpb24pLlxuICAgKlxuICAgKiAtIGAnZnVsbCdgIChkZWZhdWx0KSDigJQgZXZlcnkgc3Vydml2aW5nIGBzZXRgIHBhdGggc3RvcmVzIHRoZSBmdWxsIGZpbmFsXG4gICAqICAgdmFsdWU7IGJ5dGUtaWRlbnRpY2FsIHRvIHRoZSBoaXN0b3JpY2FsIGJlaGF2aW9yLlxuICAgKiAtIGAnZGVsdGEnYCDigJQgYXJyYXkgbmV0LWNoYW5nZXMgdGhhdCBhcmUgXCJiYXNlIHBsdXMgYSB0YWlsXCIgY29tbWl0IGFzIGFuXG4gICAqICAgYGFwcGVuZGAgdHJhY2UgdmVyYiBzdG9yaW5nIE9OTFkgdGhlIHRhaWwgKHRoZSBncm93aW5nLWhpc3RvcnkgY29tbWl0XG4gICAqICAgbG9nIGJlY29tZXMgbGluZWFyIGluc3RlYWQgb2YgTyhOwrIpIHJldGFpbmVkKTsgYGRlbGV0ZVZhbHVlKClgIGNvbW1pdHNcbiAgICogICBhcyBhIHJlYWwgYGRlbGV0ZWAgdmVyYiAocmVwbGF5IHJlbW92ZXMgdGhlIGtleSBpbnN0ZWFkIG9mIGxlYXZpbmdcbiAgICogICBga2V5OiB1bmRlZmluZWRgKTsgYnVuZGxlcyBjYXJyeSBleGFjdGx5IE9ORSB0cmFjZSBlbnRyeSBwZXIgc3Vydml2aW5nXG4gICAqICAgcGF0aC4gUmVwbGF5ICh0aGUgb25lIHZlcmIgbGF3IOKAlCBsaXZlIHN0YXRlLCBgbWF0ZXJpYWxpc2UoKWAsIHRoZVxuICAgKiAgIHJlZGFjdGVkIG1pcnJvciwgYHN0YXRlQXRgKSByZWNvbnN0cnVjdHMgZXZlcnkgc3RlcCdzIGZ1bGwgc3RhdGVcbiAgICogICBleGFjdGx5LlxuICAgKlxuICAgKiBDb25zdW1lcnMgdGhhdCByZWFkIGBidW5kbGUub3ZlcndyaXRlW2tleV1gIGFzIFwidGhlIGZ1bGwgdmFsdWUgd3JpdHRlblwiXG4gICAqIG11c3Qgc3dpdGNoIHRvIGBjb21taXRWYWx1ZUF0KGNvbW1pdExvZywgaWR4LCBrZXkpYCBmcm9tXG4gICAqIGBmb290dHJhY2VgIOKAlCB1bmRlciBgJ2RlbHRhJ2AgdGhhdCB2YWx1ZSBpcyB2ZXJiLXF1YWxpZmllZCAoYW5cbiAgICogYGFwcGVuZGAgYnVuZGxlIGhvbGRzIG9ubHkgdGhlIHRhaWwpLiBQYXRoLXRpZXIgY29uc3VtZXJzXG4gICAqIChgZmluZExhc3RXcml0ZXJgLCBgY2F1c2FsQ2hhaW5gLCBuYXJyYXRpdmUsIGxlbnMgaGlnaGxpZ2h0cykgYXJlXG4gICAqIHVuYWZmZWN0ZWQuIFRoZSBhY3RpdmUgbW9kZSBpcyBzdXJmYWNlZCBhc1xuICAgKiBgZ2V0U25hcHNob3QoKS5jb21taXRWYWx1ZXNgLlxuICAgKlxuICAgKiBIb25lc3QgY29zdCBub3RlOiBhcHBlbmQgZGV0ZWN0aW9uIGlzIG5ldyB3YWxsIHdvcmsg4oCUIGFuIE8ofGJhc2UgYXJyYXl8KVxuICAgKiBzdHJ1Y3R1cmFsIHByZWZpeCBjb21wYXJlIHBlciBhcnJheS1zZXQgcGF0aCBwZXIgY29tbWl0LiBPbiBhIGhpdCB0aGVcbiAgICogY29tbWl0IGdldHMgY2hlYXBlciBpbiBib3RoIHdhbGwgYW5kIGhlYXA7IG9uIGEgbWlzcyAocHJlZml4IGRpdmVyZ2VzKVxuICAgKiBpdCBwYXlzIGNvbXBhcmUgKyBmdWxsIGNsb25lLiBgJ2Z1bGwnYCBwYXlzIHplcm8uXG4gICAqIEVxdWl2YWxlbnQgdG8gY2FsbGluZyBgZXhlY3V0b3Iuc2V0Q29tbWl0VmFsdWVzKG1vZGUpYCBiZWZvcmUgYHJ1bigpYC5cbiAgICovXG4gIGNvbW1pdFZhbHVlcz86IENvbW1pdFZhbHVlc01vZGU7XG5cbiAgLyoqXG4gICAqIFBlci13cml0ZSByZWFkIHByb3ZlbmFuY2UgKCNQMSkg4oCUIHRoZSBmb3VydGggZGlhbCBvZiB0aGUgZmFtaWx5LiBEZWZhdWx0XG4gICAqIGAnb2ZmJ2A6IHplcm8gY29zdCwgYnl0ZS1pZGVudGljYWwgY29tbWl0IGxvZ3MuIGAncmVhZHMtcHJlZml4J2A6IGV2ZXJ5XG4gICAqIGNvbW1pdHRlZCBgVHJhY2VFbnRyeWAgY2FycmllcyBgcmVhZEtleXNgIOKAlCB0aGUga2V5cyB0cmFja2VkLXJlYWQgQkVGT1JFXG4gICAqIHRoYXQgd3JpdGUg4oCUIGVuYWJsaW5nIHBlci13cml0ZSBjYXVzYWwgYXR0cmlidXRpb24gKGBjYXVzYWxDaGFpbmAnc1xuICAgKiBgZWRnZUF0dHJpYnV0aW9uOiAncGVyLXdyaXRlJ2AgYW5kIHZhcmlhYmxlIHNsaWNlcykuIENvc3Q6IG9uZSBzbWFsbFxuICAgKiBhcnJheSBjb3B5IHBlciB3cml0ZS4gU25hcHNob3QgZGlzY3JpbWluYW50OlxuICAgKiBgZ2V0U25hcHNob3QoKS53cml0ZVByb3ZlbmFuY2VgLlxuICAgKi9cbiAgd3JpdGVQcm92ZW5hbmNlPzogV3JpdGVQcm92ZW5hbmNlTW9kZTtcbn1cblxuLyoqIFRoZSBydW4ncyBwb2xpY3k6IGV2ZXJ5IGRpYWwgcmVzb2x2ZWQsIHBsdXMgdGhlIHJlZGFjdGlvbiBydWxlIGFuZCB0aGUgbWlycm9yIGZsYWcuIEZyb3plbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUnVuUG9saWN5IGV4dGVuZHMgUmVhZG9ubHk8UmVxdWlyZWQ8UnVuRGlhbHM+PiB7XG4gIC8qKiBUaGUgcnVuJ3MgcmVkYWN0aW9uIHJ1bGUg4oCUIHRoZSBPTkUgb3duZXIgb2YgdGhlIHZlcmRpY3QgKGByZWRhY3Rpb24udHNgKS4gQWJzZW50IG9uIGJhcmUgZnJhbWVzLiAqL1xuICByZWFkb25seSByZWRhY3Rpb24/OiBSZWRhY3Rpb25SdWxlO1xuICAvKiogS2VlcCBhIHJlZGFjdGVkIG1pcnJvciBvZiB0aGUgaGVhcCAoYSBydW4gd2l0aCBhIHJlZGFjdGlvbiBwb2xpY3kpLiBFYWNoIHJ1bnRpbWUgb3ducyBpdHMgb3duIHN0b3JlLiAqL1xuICByZWFkb25seSBtaXJyb3I6IGJvb2xlYW47XG59XG5cbi8qKiBFYWNoIGRpYWwncyBkZWZhdWx0IOKAlCB0aGUgdmFsdWUgYSBydW4gZ2V0cyB3aGVuIHRoZSBvcHRpb24gaXMgYWJzZW50LiBUaGUgZGlhbCBsaXN0IElTIHRoZXNlIGtleXMuICovXG5leHBvcnQgY29uc3QgRElBTF9ERUZBVUxUUzogUmVhZG9ubHk8UmVxdWlyZWQ8UnVuRGlhbHM+PiA9IE9iamVjdC5mcmVlemUoe1xuICByZWFkU291cmNlczogZmFsc2UsXG4gIHJlYWRUcmFja2luZzogJ2Z1bGwnLFxuICB3cml0ZVRyYWNraW5nOiAnZnVsbCcsXG4gIGNvbW1pdFZhbHVlczogJ2Z1bGwnLFxuICB3cml0ZVByb3ZlbmFuY2U6ICdvZmYnLFxufSk7XG5cbmNvbnN0IERJQUxfTkFNRVMgPSBPYmplY3Qua2V5cyhESUFMX0RFRkFVTFRTKSBhcyBBcnJheTxrZXlvZiBSdW5EaWFscz47XG5cbi8qKiBFdmVyeSBkZWZhdWx0LCBubyBydWxlLCBubyBtaXJyb3Ig4oCUIHdoYXQgYSBiYXJlIGZyYW1lIChhIHVuaXQgdGVzdCdzIGBuZXcgU3RhZ2VDb250ZXh0YCkgcnVucyB1bmRlci4gKi9cbmV4cG9ydCBjb25zdCBERUZBVUxUX1JVTl9QT0xJQ1k6IFJ1blBvbGljeSA9IE9iamVjdC5mcmVlemUoeyAuLi5ESUFMX0RFRkFVTFRTLCBtaXJyb3I6IGZhbHNlIH0pO1xuXG4vKiogQnVpbGQgYSBydW4ncyBwb2xpY3k6IGFic2VudCBkaWFscyB0YWtlIHRoZWlyIGRlZmF1bHQ7IHRoZSByZXN1bHQgaXMgZnJvemVuLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1blBvbGljeShkaWFsczogUnVuRGlhbHMgPSB7fSwgcmVkYWN0aW9uPzogUmVkYWN0aW9uUnVsZSwgbWlycm9yID0gZmFsc2UpOiBSdW5Qb2xpY3kge1xuICBjb25zdCByZXNvbHZlZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IC4uLkRJQUxfREVGQVVMVFMsIC4uLnBpY2tEaWFscyhkaWFscyksIG1pcnJvciB9O1xuICBpZiAocmVkYWN0aW9uKSByZXNvbHZlZC5yZWRhY3Rpb24gPSByZWRhY3Rpb247XG4gIHJldHVybiBPYmplY3QuZnJlZXplKHJlc29sdmVkKSBhcyB1bmtub3duIGFzIFJ1blBvbGljeTtcbn1cblxuLyoqIFRoZSBkaWFscyBzZXQgb24gYHNvdXJjZWAgKGFuIG9wdGlvbnMgb2JqZWN0LCBzYXkpIOKAlCBhbmQgbm90aGluZyBlbHNlIGZyb20gaXQuICovXG5leHBvcnQgZnVuY3Rpb24gcGlja0RpYWxzKHNvdXJjZTogUnVuRGlhbHMpOiBSdW5EaWFscyB7XG4gIGNvbnN0IGRpYWxzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICBmb3IgKGNvbnN0IG5hbWUgb2YgRElBTF9OQU1FUykgaWYgKHNvdXJjZVtuYW1lXSAhPT0gdW5kZWZpbmVkKSBkaWFsc1tuYW1lXSA9IHNvdXJjZVtuYW1lXTtcbiAgcmV0dXJuIGRpYWxzIGFzIFJ1bkRpYWxzO1xufVxuXG4vKiogVGhlIHNhbWUgcG9saWN5IHVuZGVyIGFub3RoZXIgcnVsZSDigJQgYSBORVcgZnJvemVuIG9iamVjdDsgdGhlIG9sZCBvbmUgaXMgbmV2ZXIgZWRpdGVkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhSZWRhY3Rpb24ocG9saWN5OiBSdW5Qb2xpY3ksIHJlZGFjdGlvbjogUmVkYWN0aW9uUnVsZSk6IFJ1blBvbGljeSB7XG4gIHJldHVybiBkZXJpdmVQb2xpY3kocG9saWN5LCB7IHJlZGFjdGlvbiB9KTtcbn1cblxuLyoqXG4gKiBUaGUgc2FtZSBwb2xpY3kgd2l0aCBzb21lIHNldHRpbmdzIGNoYW5nZWQg4oCUIGEgTkVXIGZyb3plbiBvYmplY3Q7IHRoZSBvbGQgb25lIGlzIG5ldmVyXG4gKiBlZGl0ZWQuIEEgZnJhbWUgb3IgcnVudGltZSBjaGFuZ2VzIGEgc2V0dGluZyBieSBzd2FwcGluZyBpbiBhIGRlcml2ZWQgcG9saWN5IChgdXNlUG9saWN5YCksIHNvXG4gKiBubyBtdXRhYmxlIGRpYWwgZmllbGQgZXhpc3RzIGFueXdoZXJlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVyaXZlUG9saWN5KHBvbGljeTogUnVuUG9saWN5LCBwYXRjaDogUGFydGlhbDxSdW5Qb2xpY3k+KTogUnVuUG9saWN5IHtcbiAgcmV0dXJuIE9iamVjdC5mcmVlemUoeyAuLi5wb2xpY3ksIC4uLnBhdGNoIH0pO1xufVxuIl19
@@ -31,6 +31,7 @@
31
31
  * Borrowed: LangGraph's checkpoint `v` field; io-ts's decode-at-the-boundary
32
32
  * (one decoder turns `unknown` into the type, or refuses with a path).
33
33
  */
34
+ import { readCheckpointCapture, withoutCheckpointCapture } from '../capture/checkpointCapture.js';
34
35
  import { idempotencyKeyProblem } from '../ids/idempotencyKey.js';
35
36
  import { isPausedExecution } from './types.js';
36
37
  /** The checkpoint format this release writes (`FlowchartCheckpoint.checkpointVersion`). */
@@ -122,7 +123,12 @@ export function decodePauseRecord(raw, at = '') {
122
123
  export function decodeCheckpoint(stored) {
123
124
  if (!isPlainRecord(stored))
124
125
  refuse('the checkpoint must be an object');
125
- const checkpoint = upcastCheckpoint(stored);
126
+ const capture = readCheckpointCapture(stored);
127
+ const checkpoint = upcastCheckpoint(withoutCheckpointCapture(stored));
128
+ if (capture)
129
+ checkpoint.capture = capture;
130
+ else
131
+ delete checkpoint.capture;
126
132
  if (!isPlainRecord(checkpoint.sharedState))
127
133
  refuse('sharedState must be a plain object');
128
134
  decodePauseRecord(checkpoint);
@@ -175,4 +181,4 @@ export function decodePendingPauses(pending) {
175
181
  function isCount(value) {
176
182
  return typeof value === 'number' && Number.isInteger(value) && value >= 0;
177
183
  }
178
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9wYXVzZS9yZWNvcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBZ0NHO0FBRUgsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFakUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRS9DLDJGQUEyRjtBQUMzRixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFVLENBQUM7QUFFN0MscUdBQXFHO0FBQ3JHLE1BQU0saUJBQWlCLEdBQXVCLENBQUMsQ0FBQyxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFldEUsbUVBQW1FO0FBQ25FLFNBQVMsTUFBTSxDQUFDLElBQVk7SUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsS0FBYztJQUNuQyxPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5RSxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxNQUErQjtJQUM5RCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUM7SUFDekMsSUFBSSxPQUFPLEtBQUssU0FBUyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDbEUsTUFBTSxDQUNKLHFCQUFxQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsaUNBQWlDO1lBQzlGLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1B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SUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNoRyxNQUFNLENBQUMsMERBQTBELENBQUMsQ0FBQztJQUNyRSxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLEtBQWM7SUFDL0IsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDO0FBQ2pGLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFDLE9BQWdCO0lBQ2xELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUFFLE1BQU0sQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0lBQ3RFLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQVksRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3pGLENBQUM7QUFFRCxTQUFTLE9BQU8sQ0FBQyxLQUFjO0lBQzdCLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztBQUM1RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBwYXVzZS9yZWNvcmQudHMg4oCUIHRoZSBjaGVja3BvaW50IENPREVDIChGOCwgOS4zOS4wKTogb25lIHZlcnNpb24sIG9uZVxuICogdXBjYXN0ZXIsIG9uZSB2YWxpZGF0b3IsIG9uZSBtZXNzYWdlIHNldC5cbiAqXG4gKiBBIGNoZWNrcG9pbnQgaXMgc3RvcmVkIGRhdGEg4oCUIFJlZGlzLCBQb3N0Z3JlcywgYSBmaWxlIOKAlCBhbmQgY29tZXMgYmFjayB0b1xuICogYHJlc3VtZSgpYCBmcm9tIHdoaWNoZXZlciByZWxlYXNlIHdyb3RlIGl0LiBVbnRpbCA5LjM4LjAgaXQgd2FzIGNoZWNrZWQgaW5cbiAqIFRXTyBwbGFjZXMgd2l0aCB0d28gbWVzc2FnZSBzZXRzOiBgRmxvd0NoYXJ0RXhlY3V0b3IgwrcgcmVzdW1lYCBjaGVja2VkIHRoZVxuICogcGF1c2VkIHJlY29yZCdzIGZpZWxkcywgYFJlc3VtZUVudHJ5YCBjaGVja2VkIGVhY2ggd2FpdGluZyBzaWJsaW5nJ3NcbiAqIChgcGVuZGluZ1BhdXNlc1tuXWApIOKAlCB0aGUgU0FNRSByZWNvcmQgc2hhcGUsIGNoZWNrZWQgdHdpY2UsIGRpZmZlcmVudGx5XG4gKiAodGhlIHRvcC1sZXZlbCBgcGF1c2VkQnlgIGFuZCBgc3ViZmxvd1N0YXRlc2Agd2VyZSBuZXZlciBjaGVja2VkIGF0IGFsbCkuXG4gKiBCb3RoIG5vdyBjYWxsIHtAbGluayBkZWNvZGVDaGVja3BvaW50fTsgZXZlcnkgcmVjb3JkIGlzIGNoZWNrZWQgYnlcbiAqIHtAbGluayBkZWNvZGVQYXVzZVJlY29yZH0uXG4gKlxuICogVkVSU0lPTklORy4gQSBjaGVja3BvaW50IHdyaXR0ZW4gYnkgdGhpcyByZWxlYXNlIGNhcnJpZXNcbiAqIGBjaGVja3BvaW50VmVyc2lvbjogMmAuIEV2ZXJ5IG9sZGVyIG9uZSBpcyByZWFkIGJ5IHRoZSBPTkUgdXBjYXN0ZXIsXG4gKiB7QGxpbmsgdXBjYXN0Q2hlY2twb2ludH0sIGFuZCBldmVyeSBzdGVwIHNvIGZhciBvbmx5IERST1BTIGZpZWxkcyDigJQgd2hhdCBhXG4gKiBsYXRlciBmb3JtYXQgYWRkZWQgaXMgb3B0aW9uYWwgYW5kIHJlYWQgYXMgYWJzZW50OlxuICpcbiAqICAgLSB2ZXJzaW9uIDAgKG5vIGBjaGVja3BvaW50VmVyc2lvbmAsIGJlZm9yZSA5LjM5LjApIOKGkiAxOiBkcm9wXG4gKiAgICAgYGNvbnRpbnVhdGlvblN0YWdlSWRgLCBhIHJlY29yZCBubyByZXN1bWUgaGFzIHJlYWQgc2luY2UgOS4yOC4wICh3aGF0XG4gKiAgICAgcnVucyBhZnRlciBhIHJlc3VtZSBjb21lcyBmcm9tIHRoZSBjaGFydCk7XG4gKiAgIC0gdmVyc2lvbiAxICg5LjM5LjDigJM5LjQzLngpIOKGkiAyICh0aGUgTEVBTiBjaGVja3BvaW50KTogZHJvcFxuICogICAgIGBleGVjdXRpb25UcmVlYCBhbmQgYHN1YmZsb3dSZXN1bHRzYCDigJQgdGhlIHJ1bidzIHNlcnZlZCByZWNvcmQgKHRoZVxuICogICAgIHdob2xlIGV4ZWN1dGlvbiB0cmVlLCB0aGUgZmluaXNoZWQgc3ViZmxvd3MnIHJlc3VsdHMpLCB3aGljaCBubyByZXN1bWVcbiAqICAgICBldmVyIHJlYWQgYW5kIHdoaWNoIGdyZXcgd2l0aCBldmVyeSBmaW5pc2hlZCBpdGVyYXRpb25cbiAqICAgICAoYHJ1bm5lci9jaGVja3BvaW50LnRzYCkuXG4gKlxuICogQSBkcm9wcGVkIGZpZWxkIG5ldmVyIHN1cnZpdmVzLCB3aGF0ZXZlciB2ZXJzaW9uIGNsYWltcyB0byBjYXJyeSBpdC4gQVxuICogdmVyc2lvbiB0aGlzIHJlbGVhc2UgZG9lcyBub3Qga25vdyBpcyByZWZ1c2VkLCBuZXZlciBndWVzc2VkIGF0LlxuICpcbiAqIEJvcnJvd2VkOiBMYW5nR3JhcGgncyBjaGVja3BvaW50IGB2YCBmaWVsZDsgaW8tdHMncyBkZWNvZGUtYXQtdGhlLWJvdW5kYXJ5XG4gKiAob25lIGRlY29kZXIgdHVybnMgYHVua25vd25gIGludG8gdGhlIHR5cGUsIG9yIHJlZnVzZXMgd2l0aCBhIHBhdGgpLlxuICovXG5cbmltcG9ydCB7IGlkZW1wb3RlbmN5S2V5UHJvYmxlbSB9IGZyb20gJy4uL2lkcy9pZGVtcG90ZW5jeUtleS5qcyc7XG5pbXBvcnQgdHlwZSB7IEZsb3djaGFydENoZWNrcG9pbnQsIFBlbmRpbmdQYXVzZSB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgaXNQYXVzZWRFeGVjdXRpb24gfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLyoqIFRoZSBjaGVja3BvaW50IGZvcm1hdCB0aGlzIHJlbGVhc2Ugd3JpdGVzIChgRmxvd2NoYXJ0Q2hlY2twb2ludC5jaGVja3BvaW50VmVyc2lvbmApLiAqL1xuZXhwb3J0IGNvbnN0IENIRUNLUE9JTlRfVkVSU0lPTiA9IDIgYXMgY29uc3Q7XG5cbi8qKiBUaGUgZm9ybWF0cyB0aGlzIHJlbGVhc2UgcmVhZHM6IHRoZSBjdXJyZW50IG9uZSBhbmQgZXZlcnkgb25lIGl0IHVwY2FzdHMgKGFic2VudCA9IHZlcnNpb24gMCkuICovXG5jb25zdCBSRUFEQUJMRV9WRVJTSU9OUzogcmVhZG9ubHkgdW5rbm93bltdID0gWzEsIENIRUNLUE9JTlRfVkVSU0lPTl07XG5cbi8qKlxuICogRmllbGRzIG9ubHkgYW4gT0xERVIgY2hlY2twb2ludCBjYW4gY2FycnksIGVhY2ggZHJvcHBlZCBieSB0aGUgZm9ybWF0IG5hbWVkXG4gKiBiZXNpZGUgaXQuIFRoZSB1cGNhc3RlciByZW1vdmVzIHRoZW0gYW5kIHRoZSBjdXJyZW50IHNoYXBlIG5ldmVyIGhhcyB0aGVtLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExlZ2FjeUNoZWNrcG9pbnRGaWVsZHMge1xuICAvKiogVmVyc2lvbiAwIG9ubHk6IHRoZSBpbnZva2VyJ3MgYC5uZXh0YCBpZCDigJQgYSByZWNvcmQgc2luY2UgOS4yOC4wLCBuZXZlciByZWFkLiBEcm9wcGVkIGJ5IHZlcnNpb24gMS4gKi9cbiAgcmVhZG9ubHkgY29udGludWF0aW9uU3RhZ2VJZD86IHN0cmluZztcbiAgLyoqIFZlcnNpb25zIDDigJMxOiB0aGUgcnVuJ3MgZXhlY3V0aW9uIHRyZWUgYXQgdGhlIHBhdXNlIOKAlCBuZXZlciByZWFkIGJ5IGEgcmVzdW1lLiBEcm9wcGVkIGJ5IHZlcnNpb24gMi4gKi9cbiAgcmVhZG9ubHkgZXhlY3V0aW9uVHJlZT86IHVua25vd247XG4gIC8qKiBWZXJzaW9ucyAw4oCTMTogdGhlIHN1YmZsb3dzIGZpbmlzaGVkIGJlZm9yZSB0aGUgcGF1c2Ug4oCUIG5ldmVyIHJlYWQgYnkgYSByZXN1bWUuIERyb3BwZWQgYnkgdmVyc2lvbiAyLiAqL1xuICByZWFkb25seSBzdWJmbG93UmVzdWx0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xufVxuXG4vKiogVGhlIG9uZSBtZXNzYWdlIHNoYXBlOiBgSW52YWxpZCBjaGVja3BvaW50OiA8d2hlcmU+IDx3aGF0Pi5gICovXG5mdW5jdGlvbiByZWZ1c2Uod2hhdDogc3RyaW5nKTogbmV2ZXIge1xuICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY2hlY2twb2ludDogJHt3aGF0fS5gKTtcbn1cblxuZnVuY3Rpb24gaXNQbGFpblJlY29yZCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuXG4vKipcbiAqIEJyaW5nIGEgc3RvcmVkIGNoZWNrcG9pbnQgb2YgQU5ZIHJlbGVhc2UgdG8gdGhlIGN1cnJlbnQgc2hhcGUg4oCUIHRoZSBvbmVcbiAqIHVwY2FzdGVyLiBWZXJzaW9ucyAwIChubyBgY2hlY2twb2ludFZlcnNpb25gKSBhbmQgMTogZHJvcCB0aGUgZmllbGRzIHRoZWlyXG4gKiBzdWNjZXNzb3JzIGRyb3BwZWQgKHtAbGluayBMZWdhY3lDaGVja3BvaW50RmllbGRzfSksIHN0YW1wIHRoZSBjdXJyZW50XG4gKiB2ZXJzaW9uIGFzIHRoZSBmaXJzdCBrZXkuIFRoZSBjdXJyZW50IHZlcnNpb246IGFzIGlzLCBtaW51cyBhbnkgZHJvcHBlZFxuICogZmllbGQgaXQgY2xhaW1zIHRvIGNhcnJ5LiBBbnl0aGluZyBlbHNlOiByZWZ1c2VkLiBSZXR1cm5zIGEgbmV3IG9iamVjdDsgdGhlXG4gKiBjYWxsZXIncyBpcyBuZXZlciBlZGl0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGNhc3RDaGVja3BvaW50KHN0b3JlZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGNvbnN0IHZlcnNpb24gPSBzdG9yZWQuY2hlY2twb2ludFZlcnNpb247XG4gIGlmICh2ZXJzaW9uICE9PSB1bmRlZmluZWQgJiYgIVJFQURBQkxFX1ZFUlNJT05TLmluY2x1ZGVzKHZlcnNpb24pKSB7XG4gICAgcmVmdXNlKFxuICAgICAgYGNoZWNrcG9pbnRWZXJzaW9uICR7SlNPTi5zdHJpbmdpZnkodmVyc2lvbikgPz8gU3RyaW5nKHZlcnNpb24pfSBpcyBub3Qgb25lIHRoaXMgcmVsZWFzZSByZWFkcyBgICtcbiAgICAgICAgYCgke1JFQURBQkxFX1ZFUlNJT05TLmpvaW4oJyBvciAnKX0sIG9yIG5vbmUgZm9yIGEgY2hlY2twb2ludCB3cml0dGVuIGJlZm9yZSA5LjM5LjApYCxcbiAgICApO1xuICB9XG4gIC8vIEEgZHJvcHBlZCBmaWVsZCBuZXZlciBzdXJ2aXZlcywgd2hhdGV2ZXIgdmVyc2lvbiBjbGFpbXMgdG8gY2FycnkgaXQuXG4gIGNvbnN0IHtcbiAgICBjaGVja3BvaW50VmVyc2lvbjogX3ZlcnNpb24sXG4gICAgY29udGludWF0aW9uU3RhZ2VJZDogX2ludm9rZXJOZXh0LFxuICAgIGV4ZWN1dGlvblRyZWU6IF90cmVlLFxuICAgIHN1YmZsb3dSZXN1bHRzOiBfZmluaXNoZWRTdWJmbG93cyxcbiAgICAuLi5jdXJyZW50XG4gIH0gPSBzdG9yZWQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gJiBMZWdhY3lDaGVja3BvaW50RmllbGRzO1xuICByZXR1cm4geyBjaGVja3BvaW50VmVyc2lvbjogQ0hFQ0tQT0lOVF9WRVJTSU9OLCAuLi5jdXJyZW50IH07XG59XG5cbi8qKlxuICogQ2hlY2sgT05FIHBhdXNlIHJlY29yZCDigJQgdGhlIHBhdXNlZCBzdGFnZSdzIG93biBmaWVsZHMgb24gdGhlIGNoZWNrcG9pbnQsXG4gKiBvciBhIHdhaXRpbmcgc2libGluZydzIGBwZW5kaW5nUGF1c2VzW25dYCDigJQgYW5kIHJldHVybiBpdCBhcyBhXG4gKiB7QGxpbmsgUGVuZGluZ1BhdXNlfS4gYGF0YCBuYW1lcyB3aGVyZSB0aGUgcmVjb3JkIHNpdHMgKGAnJ2AgZm9yIHRoZVxuICogY2hlY2twb2ludCBpdHNlbGYsIGAncGVuZGluZ1BhdXNlc1swXSdgIGZvciBhIHNpYmxpbmcpLCBzbyBib3RoIHNpdGVzIHNwZWFrXG4gKiB0aGUgc2FtZSBzZW50ZW5jZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVQYXVzZVJlY29yZChyYXc6IHVua25vd24sIGF0ID0gJycpOiBQZW5kaW5nUGF1c2Uge1xuICBjb25zdCBmaWVsZCA9IChuYW1lOiBzdHJpbmcpID0+IChhdCA/IGAke2F0fS4ke25hbWV9YCA6IG5hbWUpO1xuICBpZiAoIWlzUGxhaW5SZWNvcmQocmF3KSkgcmVmdXNlKGAke2F0IHx8ICd0aGUgY2hlY2twb2ludCd9IG11c3QgYmUgYW4gb2JqZWN0YCk7XG4gIGlmICh0eXBlb2YgcmF3LnBhdXNlZFN0YWdlSWQgIT09ICdzdHJpbmcnIHx8IHJhdy5wYXVzZWRTdGFnZUlkID09PSAnJykge1xuICAgIHJlZnVzZShgJHtmaWVsZCgncGF1c2VkU3RhZ2VJZCcpfSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZ2ApO1xuICB9XG4gIGNvbnN0IHN1YmZsb3dQYXRoID0gcmF3LnN1YmZsb3dQYXRoO1xuICBpZiAoIUFycmF5LmlzQXJyYXkoc3ViZmxvd1BhdGgpIHx8ICFzdWJmbG93UGF0aC5ldmVyeSgocykgPT4gdHlwZW9mIHMgPT09ICdzdHJpbmcnKSkge1xuICAgIHJlZnVzZShgJHtmaWVsZCgnc3ViZmxvd1BhdGgnKX0gbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzYCk7XG4gIH1cbiAgY29uc3Qgc3RhdGVzID0gcmF3LnN1YmZsb3dTdGF0ZXM7XG4gIGlmIChzdGF0ZXMgIT09IHVuZGVmaW5lZCAmJiAhaXNQbGFpblJlY29yZChzdGF0ZXMpKSByZWZ1c2UoYCR7ZmllbGQoJ3N1YmZsb3dTdGF0ZXMnKX0gbXVzdCBiZSBhbiBvYmplY3RgKTtcbiAgLy8gRWFjaCBjYXB0dXJlIHNlZWRzIGEgc3ViZmxvdydzIHJ1bnRpbWUg4oCUIGEgcGxhaW4gb2JqZWN0LCBsaWtlIGBzaGFyZWRTdGF0ZWAuXG4gIGZvciAoY29uc3QgW3N1YmZsb3dJZCwgY2FwdHVyZV0gb2YgT2JqZWN0LmVudHJpZXMoc3RhdGVzID8/IHt9KSkge1xuICAgIGlmICghaXNQbGFpblJlY29yZChjYXB0dXJlKSkgcmVmdXNlKGAke2ZpZWxkKCdzdWJmbG93U3RhdGVzJyl9WyR7SlNPTi5zdHJpbmdpZnkoc3ViZmxvd0lkKX1dIG11c3QgYmUgYW4gb2JqZWN0YCk7XG4gIH1cbiAgaWYgKHJhdy5wYXVzZWRCeSAhPT0gdW5kZWZpbmVkICYmIHJhdy5wYXVzZWRCeSAhPT0gJ2ludGVycnVwdCcpIHtcbiAgICByZWZ1c2UoYCR7ZmllbGQoJ3BhdXNlZEJ5Jyl9IG11c3QgYmUgJ2ludGVycnVwdCcgd2hlbiBwcmVzZW50YCk7XG4gIH1cbiAgLy8gQSBrZXkgdGhlIHJlc3VtZSB3aWxsIFNFTkQgKFAzKTogaGVsZCB0byB0aGUgb25lIGtleSBydWxlLCByZWZ1c2VkIOKAlCBuZXZlciBkcm9wcGVkIChkcm9wcGluZyB3b3VsZCBsZXQgdGhlXG4gIC8vIHJlc3VtZSByZWNvbXB1dGUgYSBkaWZmZXJlbnQga2V5KS5cbiAgaWYgKHJhdy5pZGVtcG90ZW5jeUtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgcHJvYmxlbSA9IGlkZW1wb3RlbmN5S2V5UHJvYmxlbShyYXcuaWRlbXBvdGVuY3lLZXkpO1xuICAgIGlmIChwcm9ibGVtICE9PSB1bmRlZmluZWQpIHJlZnVzZShgJHtmaWVsZCgnaWRlbXBvdGVuY3lLZXknKX0gJHtwcm9ibGVtfWApO1xuICB9XG4gIHJldHVybiB7XG4gICAgcGF1c2VkU3RhZ2VJZDogcmF3LnBhdXNlZFN0YWdlSWQgYXMgc3RyaW5nLFxuICAgIHN1YmZsb3dQYXRoOiBzdWJmbG93UGF0aCBhcyBzdHJpbmdbXSxcbiAgICBzdWJmbG93U3RhdGVzOiAoc3RhdGVzIGFzIFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiB8IHVuZGVmaW5lZCkgPz8ge30sXG4gICAgLi4uKHJhdy5wYXVzZURhdGEgIT09IHVuZGVmaW5lZCAmJiB7IHBhdXNlRGF0YTogcmF3LnBhdXNlRGF0YSB9KSxcbiAgICAuLi4ocmF3LnBhdXNlZEJ5ID09PSAnaW50ZXJydXB0JyAmJiB7IHBhdXNlZEJ5OiAnaW50ZXJydXB0JyBhcyBjb25zdCB9KSxcbiAgICAvLyBBIHJlY29yZCwgbmV2ZXIgYSBwbGFuIGlucHV0OiBrZXB0IG9ubHkgd2hlbiB3ZWxsLWZvcm1lZCAoYW4gb2xkZXIgb3JcbiAgICAvLyBoYW5kLWVkaXRlZCBlbnRyeSBzaW1wbHkgcmVzdW1lcyB3aXRob3V0IGEgbGluaykuXG4gICAgLi4uKGlzUGF1c2VkRXhlY3V0aW9uKHJhdy5wYXVzZWRFeGVjdXRpb24pICYmIHtcbiAgICAgIHBhdXNlZEV4ZWN1dGlvbjogeyBydW5JZDogcmF3LnBhdXNlZEV4ZWN1dGlvbi5ydW5JZCwgcnVudGltZVN0YWdlSWQ6IHJhdy5wYXVzZWRFeGVjdXRpb24ucnVudGltZVN0YWdlSWQgfSxcbiAgICB9KSxcbiAgICAuLi4ocmF3LmlkZW1wb3RlbmN5S2V5ICE9PSB1bmRlZmluZWQgJiYgeyBpZGVtcG90ZW5jeUtleTogcmF3LmlkZW1wb3RlbmN5S2V5IGFzIHN0cmluZyB9KSxcbiAgfTtcbn1cblxuLyoqXG4gKiBUSEUgY2hlY2twb2ludCBkZWNvZGVyOiB1cGNhc3QsIHRoZW4gY2hlY2sg4oCUIHRoZSBjaGVja3BvaW50IGlzIGFuIG9iamVjdCxcbiAqIGl0cyBgc2hhcmVkU3RhdGVgIGEgcGxhaW4gb2JqZWN0LCBpdHMgb3duIHBhdXNlIHJlY29yZCB3ZWxsLWZvcm1lZCwgYW5kXG4gKiBldmVyeSBgcGVuZGluZ1BhdXNlc2AgZW50cnkgd2VsbC1mb3JtZWQgKGVhY2ggcmV0dXJuZWQgZGVjb2RlZCkuIFRocm93c1xuICogYEludmFsaWQgY2hlY2twb2ludDog4oCmYCBuYW1pbmcgdGhlIGZpcnN0IGZpZWxkIHRoYXQgaXMgbm90OyBuZXZlciBlZGl0c1xuICogdGhlIGNhbGxlcidzIG9iamVjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZUNoZWNrcG9pbnQoc3RvcmVkOiB1bmtub3duKTogRmxvd2NoYXJ0Q2hlY2twb2ludCB7XG4gIGlmICghaXNQbGFpblJlY29yZChzdG9yZWQpKSByZWZ1c2UoJ3RoZSBjaGVja3BvaW50IG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIGNvbnN0IGNoZWNrcG9pbnQgPSB1cGNhc3RDaGVja3BvaW50KHN0b3JlZCk7XG4gIGlmICghaXNQbGFpblJlY29yZChjaGVja3BvaW50LnNoYXJlZFN0YXRlKSkgcmVmdXNlKCdzaGFyZWRTdGF0ZSBtdXN0IGJlIGEgcGxhaW4gb2JqZWN0Jyk7XG4gIGRlY29kZVBhdXNlUmVjb3JkKGNoZWNrcG9pbnQpO1xuICAvLyBBIHJlY29yZCwgbmV2ZXIgYSBwbGFuIGlucHV0IOKAlCB0aGUgU0FNRSBydWxlIGFzIGEgc2libGluZydzOiBhIG1hbGZvcm1lZFxuICAvLyBsaW5rIGlzIGRyb3BwZWQgKHRoZSByZXN1bWUgcnVucyB3aXRob3V0IGl0KSwgbmV2ZXIgdHJ1c3RlZC5cbiAgaWYgKGNoZWNrcG9pbnQucGF1c2VkRXhlY3V0aW9uICE9PSB1bmRlZmluZWQgJiYgIWlzUGF1c2VkRXhlY3V0aW9uKGNoZWNrcG9pbnQucGF1c2VkRXhlY3V0aW9uKSkge1xuICAgIGRlbGV0ZSBjaGVja3BvaW50LnBhdXNlZEV4ZWN1dGlvbjtcbiAgfVxuICAvLyBUaGUgY291bnRlcnMgc2VlZCB0aGUgcmVzdW1lZCBydW4ncyBpZHMgYW5kIGxvb3AgYnVkZ2V0OiBhYnNlbnQgaXMgYW4gb2xkXG4gIC8vIGNoZWNrcG9pbnQgKHRoZSBjb3VudGVyIHJlc3RhcnRzKSwgcHJlc2VudCBtdXN0IGJlIHdlbGwtZm9ybWVkLlxuICBpZiAoY2hlY2twb2ludC5leGVjdXRpb25Db3VudCAhPT0gdW5kZWZpbmVkICYmICFpc0NvdW50KGNoZWNrcG9pbnQuZXhlY3V0aW9uQ291bnQpKSB7XG4gICAgcmVmdXNlKCdleGVjdXRpb25Db3VudCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXInKTtcbiAgfVxuICBjb25zdCB2aXNpdHMgPSBjaGVja3BvaW50LnZpc2l0Q291bnRzO1xuICBpZiAodmlzaXRzICE9PSB1bmRlZmluZWQgJiYgKCFpc1BsYWluUmVjb3JkKHZpc2l0cykgfHwgIU9iamVjdC52YWx1ZXModmlzaXRzKS5ldmVyeShpc0NvdW50KSkpIHtcbiAgICByZWZ1c2UoJ3Zpc2l0Q291bnRzIG11c3QgbWFwIHN0YWdlIGlkcyB0byBub24tbmVnYXRpdmUgaW50ZWdlcnMnKTtcbiAgfVxuICBpZiAoY2hlY2twb2ludC5wZW5kaW5nUGF1c2VzICE9PSB1bmRlZmluZWQpIGNoZWNrcG9pbnQucGVuZGluZ1BhdXNlcyA9IGRlY29kZVBlbmRpbmdQYXVzZXMoY2hlY2twb2ludC5wZW5kaW5nUGF1c2VzKTtcbiAgLy8gVGhlIHJlZGFjdGlvbiBhIHBhdXNlIGNhcnJpZXMgKG5hbWVzIG9ubHkpIHNlZWRzIHRoZSByZXN1bWVkIHJ1bidzIHJ1bGUg4oCUIGEgbWFsZm9ybWVkIG9uZVxuICAvLyBpcyByZWZ1c2VkLCBuZXZlciBkcm9wcGVkOiBkcm9wcGluZyBpdCB3b3VsZCBzZXJ2ZSBpbiBwbGFpbiB3aGF0IHRoZSBydW4gaGFkIG1hc2tlZC5cbiAgaWYgKGNoZWNrcG9pbnQucmVkYWN0aW9uTWFya3MgIT09IHVuZGVmaW5lZCkgZGVjb2RlUmVkYWN0aW9uTWFya3MoY2hlY2twb2ludC5yZWRhY3Rpb25NYXJrcyk7XG4gIHJldHVybiBjaGVja3BvaW50IGFzIHVua25vd24gYXMgRmxvd2NoYXJ0Q2hlY2twb2ludDtcbn1cblxuLyoqIGByZWRhY3Rpb25NYXJrc2A6IGBrZXlzYCBhbiBhcnJheSBvZiBzdHJpbmdzOyBgZmllbGRzYCwgd2hlbiBwcmVzZW50LCBrZXlzIOKGkiBhcnJheXMgb2Ygc3RyaW5ncy4gKi9cbmZ1bmN0aW9uIGRlY29kZVJlZGFjdGlvbk1hcmtzKG1hcmtzOiB1bmtub3duKTogdm9pZCB7XG4gIGlmICghaXNQbGFpblJlY29yZChtYXJrcykpIHJlZnVzZSgncmVkYWN0aW9uTWFya3MgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgaWYgKCFpc1N0cmluZ3MobWFya3Mua2V5cykpIHJlZnVzZSgncmVkYWN0aW9uTWFya3Mua2V5cyBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MnKTtcbiAgY29uc3QgZmllbGRzID0gbWFya3MuZmllbGRzO1xuICBpZiAoZmllbGRzICE9PSB1bmRlZmluZWQgJiYgKCFpc1BsYWluUmVjb3JkKGZpZWxkcykgfHwgIU9iamVjdC52YWx1ZXMoZmllbGRzKS5ldmVyeShpc1N0cmluZ3MpKSkge1xuICAgIHJlZnVzZSgncmVkYWN0aW9uTWFya3MuZmllbGRzIG11c3QgbWFwIGtleXMgdG8gYXJyYXlzIG9mIHN0cmluZ3MnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1N0cmluZ3ModmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmV2ZXJ5KChpdGVtKSA9PiB0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycpO1xufVxuXG4vKipcbiAqIGBwZW5kaW5nUGF1c2VzYCAoc3RvcmVkLCB1bnRydXN0ZWQpIGFzIGRlY29kZWQgcmVjb3JkcyDigJQgdGhlIG9uZSBjaGVja1xuICogYGRlY29kZUNoZWNrcG9pbnRgIHJ1bnMsIGFuZCB0aGUgb25lIGBSZXN1bWVFbnRyeS5wbGFuYCBydW5zIG9uIHdoYXQgaXQgaXNcbiAqIGhhbmRlZCBkaXJlY3RseSwgc28gbmVpdGhlciBkb29yIHRha2VzIGFuIHVuY2hlY2tlZCBzaWJsaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlUGVuZGluZ1BhdXNlcyhwZW5kaW5nOiB1bmtub3duKTogUGVuZGluZ1BhdXNlW10ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocGVuZGluZykpIHJlZnVzZSgncGVuZGluZ1BhdXNlcyBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gIHJldHVybiBwZW5kaW5nLm1hcCgocmF3OiB1bmtub3duLCBuKSA9PiBkZWNvZGVQYXVzZVJlY29yZChyYXcsIGBwZW5kaW5nUGF1c2VzWyR7bn1dYCkpO1xufVxuXG5mdW5jdGlvbiBpc0NvdW50KHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIE51bWJlci5pc0ludGVnZXIodmFsdWUpICYmIHZhbHVlID49IDA7XG59XG4iXX0=
184
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9wYXVzZS9yZWNvcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBZ0NHO0FBRUgsT0FBTyxFQUFFLHFCQUFxQixFQUFFLHdCQUF3QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEcsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFakUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRS9DLDJGQUEyRjtBQUMzRixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFVLENBQUM7QUFFN0MscUdBQXFHO0FBQ3JHLE1BQU0saUJBQWlCLEdBQXVCLENBQUMsQ0FBQyxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFldEUsbUVBQW1FO0FBQ25FLFNBQVMsTUFBTSxDQUFDLElBQVk7SUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsS0FBYztJQUNuQyxPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5RSxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxNQUErQjtJQUM5RCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUM7SUFDekMsSUFBSSxPQUFPLEtBQUssU0FBUyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDbEUsTUFBTSxDQUNKLHFCQUFxQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLE1BQU0s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KlxuICogcGF1c2UvcmVjb3JkLnRzIOKAlCB0aGUgY2hlY2twb2ludCBDT0RFQyAoRjgsIDkuMzkuMCk6IG9uZSB2ZXJzaW9uLCBvbmVcbiAqIHVwY2FzdGVyLCBvbmUgdmFsaWRhdG9yLCBvbmUgbWVzc2FnZSBzZXQuXG4gKlxuICogQSBjaGVja3BvaW50IGlzIHN0b3JlZCBkYXRhIOKAlCBSZWRpcywgUG9zdGdyZXMsIGEgZmlsZSDigJQgYW5kIGNvbWVzIGJhY2sgdG9cbiAqIGByZXN1bWUoKWAgZnJvbSB3aGljaGV2ZXIgcmVsZWFzZSB3cm90ZSBpdC4gVW50aWwgOS4zOC4wIGl0IHdhcyBjaGVja2VkIGluXG4gKiBUV08gcGxhY2VzIHdpdGggdHdvIG1lc3NhZ2Ugc2V0czogYEZsb3dDaGFydEV4ZWN1dG9yIMK3IHJlc3VtZWAgY2hlY2tlZCB0aGVcbiAqIHBhdXNlZCByZWNvcmQncyBmaWVsZHMsIGBSZXN1bWVFbnRyeWAgY2hlY2tlZCBlYWNoIHdhaXRpbmcgc2libGluZydzXG4gKiAoYHBlbmRpbmdQYXVzZXNbbl1gKSDigJQgdGhlIFNBTUUgcmVjb3JkIHNoYXBlLCBjaGVja2VkIHR3aWNlLCBkaWZmZXJlbnRseVxuICogKHRoZSB0b3AtbGV2ZWwgYHBhdXNlZEJ5YCBhbmQgYHN1YmZsb3dTdGF0ZXNgIHdlcmUgbmV2ZXIgY2hlY2tlZCBhdCBhbGwpLlxuICogQm90aCBub3cgY2FsbCB7QGxpbmsgZGVjb2RlQ2hlY2twb2ludH07IGV2ZXJ5IHJlY29yZCBpcyBjaGVja2VkIGJ5XG4gKiB7QGxpbmsgZGVjb2RlUGF1c2VSZWNvcmR9LlxuICpcbiAqIFZFUlNJT05JTkcuIEEgY2hlY2twb2ludCB3cml0dGVuIGJ5IHRoaXMgcmVsZWFzZSBjYXJyaWVzXG4gKiBgY2hlY2twb2ludFZlcnNpb246IDJgLiBFdmVyeSBvbGRlciBvbmUgaXMgcmVhZCBieSB0aGUgT05FIHVwY2FzdGVyLFxuICoge0BsaW5rIHVwY2FzdENoZWNrcG9pbnR9LCBhbmQgZXZlcnkgc3RlcCBzbyBmYXIgb25seSBEUk9QUyBmaWVsZHMg4oCUIHdoYXQgYVxuICogbGF0ZXIgZm9ybWF0IGFkZGVkIGlzIG9wdGlvbmFsIGFuZCByZWFkIGFzIGFic2VudDpcbiAqXG4gKiAgIC0gdmVyc2lvbiAwIChubyBgY2hlY2twb2ludFZlcnNpb25gLCBiZWZvcmUgOS4zOS4wKSDihpIgMTogZHJvcFxuICogICAgIGBjb250aW51YXRpb25TdGFnZUlkYCwgYSByZWNvcmQgbm8gcmVzdW1lIGhhcyByZWFkIHNpbmNlIDkuMjguMCAod2hhdFxuICogICAgIHJ1bnMgYWZ0ZXIgYSByZXN1bWUgY29tZXMgZnJvbSB0aGUgY2hhcnQpO1xuICogICAtIHZlcnNpb24gMSAoOS4zOS4w4oCTOS40My54KSDihpIgMiAodGhlIExFQU4gY2hlY2twb2ludCk6IGRyb3BcbiAqICAgICBgZXhlY3V0aW9uVHJlZWAgYW5kIGBzdWJmbG93UmVzdWx0c2Ag4oCUIHRoZSBydW4ncyBzZXJ2ZWQgcmVjb3JkICh0aGVcbiAqICAgICB3aG9sZSBleGVjdXRpb24gdHJlZSwgdGhlIGZpbmlzaGVkIHN1YmZsb3dzJyByZXN1bHRzKSwgd2hpY2ggbm8gcmVzdW1lXG4gKiAgICAgZXZlciByZWFkIGFuZCB3aGljaCBncmV3IHdpdGggZXZlcnkgZmluaXNoZWQgaXRlcmF0aW9uXG4gKiAgICAgKGBydW5uZXIvY2hlY2twb2ludC50c2ApLlxuICpcbiAqIEEgZHJvcHBlZCBmaWVsZCBuZXZlciBzdXJ2aXZlcywgd2hhdGV2ZXIgdmVyc2lvbiBjbGFpbXMgdG8gY2FycnkgaXQuIEFcbiAqIHZlcnNpb24gdGhpcyByZWxlYXNlIGRvZXMgbm90IGtub3cgaXMgcmVmdXNlZCwgbmV2ZXIgZ3Vlc3NlZCBhdC5cbiAqXG4gKiBCb3Jyb3dlZDogTGFuZ0dyYXBoJ3MgY2hlY2twb2ludCBgdmAgZmllbGQ7IGlvLXRzJ3MgZGVjb2RlLWF0LXRoZS1ib3VuZGFyeVxuICogKG9uZSBkZWNvZGVyIHR1cm5zIGB1bmtub3duYCBpbnRvIHRoZSB0eXBlLCBvciByZWZ1c2VzIHdpdGggYSBwYXRoKS5cbiAqL1xuXG5pbXBvcnQgeyByZWFkQ2hlY2twb2ludENhcHR1cmUsIHdpdGhvdXRDaGVja3BvaW50Q2FwdHVyZSB9IGZyb20gJy4uL2NhcHR1cmUvY2hlY2twb2ludENhcHR1cmUuanMnO1xuaW1wb3J0IHsgaWRlbXBvdGVuY3lLZXlQcm9ibGVtIH0gZnJvbSAnLi4vaWRzL2lkZW1wb3RlbmN5S2V5LmpzJztcbmltcG9ydCB0eXBlIHsgRmxvd2NoYXJ0Q2hlY2twb2ludCwgUGVuZGluZ1BhdXNlIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBpc1BhdXNlZEV4ZWN1dGlvbiB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vKiogVGhlIGNoZWNrcG9pbnQgZm9ybWF0IHRoaXMgcmVsZWFzZSB3cml0ZXMgKGBGbG93Y2hhcnRDaGVja3BvaW50LmNoZWNrcG9pbnRWZXJzaW9uYCkuICovXG5leHBvcnQgY29uc3QgQ0hFQ0tQT0lOVF9WRVJTSU9OID0gMiBhcyBjb25zdDtcblxuLyoqIFRoZSBmb3JtYXRzIHRoaXMgcmVsZWFzZSByZWFkczogdGhlIGN1cnJlbnQgb25lIGFuZCBldmVyeSBvbmUgaXQgdXBjYXN0cyAoYWJzZW50ID0gdmVyc2lvbiAwKS4gKi9cbmNvbnN0IFJFQURBQkxFX1ZFUlNJT05TOiByZWFkb25seSB1bmtub3duW10gPSBbMSwgQ0hFQ0tQT0lOVF9WRVJTSU9OXTtcblxuLyoqXG4gKiBGaWVsZHMgb25seSBhbiBPTERFUiBjaGVja3BvaW50IGNhbiBjYXJyeSwgZWFjaCBkcm9wcGVkIGJ5IHRoZSBmb3JtYXQgbmFtZWRcbiAqIGJlc2lkZSBpdC4gVGhlIHVwY2FzdGVyIHJlbW92ZXMgdGhlbSBhbmQgdGhlIGN1cnJlbnQgc2hhcGUgbmV2ZXIgaGFzIHRoZW0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGVnYWN5Q2hlY2twb2ludEZpZWxkcyB7XG4gIC8qKiBWZXJzaW9uIDAgb25seTogdGhlIGludm9rZXIncyBgLm5leHRgIGlkIOKAlCBhIHJlY29yZCBzaW5jZSA5LjI4LjAsIG5ldmVyIHJlYWQuIERyb3BwZWQgYnkgdmVyc2lvbiAxLiAqL1xuICByZWFkb25seSBjb250aW51YXRpb25TdGFnZUlkPzogc3RyaW5nO1xuICAvKiogVmVyc2lvbnMgMOKAkzE6IHRoZSBydW4ncyBleGVjdXRpb24gdHJlZSBhdCB0aGUgcGF1c2Ug4oCUIG5ldmVyIHJlYWQgYnkgYSByZXN1bWUuIERyb3BwZWQgYnkgdmVyc2lvbiAyLiAqL1xuICByZWFkb25seSBleGVjdXRpb25UcmVlPzogdW5rbm93bjtcbiAgLyoqIFZlcnNpb25zIDDigJMxOiB0aGUgc3ViZmxvd3MgZmluaXNoZWQgYmVmb3JlIHRoZSBwYXVzZSDigJQgbmV2ZXIgcmVhZCBieSBhIHJlc3VtZS4gRHJvcHBlZCBieSB2ZXJzaW9uIDIuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dSZXN1bHRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8qKiBUaGUgb25lIG1lc3NhZ2Ugc2hhcGU6IGBJbnZhbGlkIGNoZWNrcG9pbnQ6IDx3aGVyZT4gPHdoYXQ+LmAgKi9cbmZ1bmN0aW9uIHJlZnVzZSh3aGF0OiBzdHJpbmcpOiBuZXZlciB7XG4gIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjaGVja3BvaW50OiAke3doYXR9LmApO1xufVxuXG5mdW5jdGlvbiBpc1BsYWluUmVjb3JkKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5cbi8qKlxuICogQnJpbmcgYSBzdG9yZWQgY2hlY2twb2ludCBvZiBBTlkgcmVsZWFzZSB0byB0aGUgY3VycmVudCBzaGFwZSDigJQgdGhlIG9uZVxuICogdXBjYXN0ZXIuIFZlcnNpb25zIDAgKG5vIGBjaGVja3BvaW50VmVyc2lvbmApIGFuZCAxOiBkcm9wIHRoZSBmaWVsZHMgdGhlaXJcbiAqIHN1Y2Nlc3NvcnMgZHJvcHBlZCAoe0BsaW5rIExlZ2FjeUNoZWNrcG9pbnRGaWVsZHN9KSwgc3RhbXAgdGhlIGN1cnJlbnRcbiAqIHZlcnNpb24gYXMgdGhlIGZpcnN0IGtleS4gVGhlIGN1cnJlbnQgdmVyc2lvbjogYXMgaXMsIG1pbnVzIGFueSBkcm9wcGVkXG4gKiBmaWVsZCBpdCBjbGFpbXMgdG8gY2FycnkuIEFueXRoaW5nIGVsc2U6IHJlZnVzZWQuIFJldHVybnMgYSBuZXcgb2JqZWN0OyB0aGVcbiAqIGNhbGxlcidzIGlzIG5ldmVyIGVkaXRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwY2FzdENoZWNrcG9pbnQoc3RvcmVkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgY29uc3QgdmVyc2lvbiA9IHN0b3JlZC5jaGVja3BvaW50VmVyc2lvbjtcbiAgaWYgKHZlcnNpb24gIT09IHVuZGVmaW5lZCAmJiAhUkVBREFCTEVfVkVSU0lPTlMuaW5jbHVkZXModmVyc2lvbikpIHtcbiAgICByZWZ1c2UoXG4gICAgICBgY2hlY2twb2ludFZlcnNpb24gJHtKU09OLnN0cmluZ2lmeSh2ZXJzaW9uKSA/PyBTdHJpbmcodmVyc2lvbil9IGlzIG5vdCBvbmUgdGhpcyByZWxlYXNlIHJlYWRzIGAgK1xuICAgICAgICBgKCR7UkVBREFCTEVfVkVSU0lPTlMuam9pbignIG9yICcpfSwgb3Igbm9uZSBmb3IgYSBjaGVja3BvaW50IHdyaXR0ZW4gYmVmb3JlIDkuMzkuMClgLFxuICAgICk7XG4gIH1cbiAgLy8gQSBkcm9wcGVkIGZpZWxkIG5ldmVyIHN1cnZpdmVzLCB3aGF0ZXZlciB2ZXJzaW9uIGNsYWltcyB0byBjYXJyeSBpdC5cbiAgY29uc3Qge1xuICAgIGNoZWNrcG9pbnRWZXJzaW9uOiBfdmVyc2lvbixcbiAgICBjb250aW51YXRpb25TdGFnZUlkOiBfaW52b2tlck5leHQsXG4gICAgZXhlY3V0aW9uVHJlZTogX3RyZWUsXG4gICAgc3ViZmxvd1Jlc3VsdHM6IF9maW5pc2hlZFN1YmZsb3dzLFxuICAgIC4uLmN1cnJlbnRcbiAgfSA9IHN0b3JlZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiAmIExlZ2FjeUNoZWNrcG9pbnRGaWVsZHM7XG4gIHJldHVybiB7IGNoZWNrcG9pbnRWZXJzaW9uOiBDSEVDS1BPSU5UX1ZFUlNJT04sIC4uLmN1cnJlbnQgfTtcbn1cblxuLyoqXG4gKiBDaGVjayBPTkUgcGF1c2UgcmVjb3JkIOKAlCB0aGUgcGF1c2VkIHN0YWdlJ3Mgb3duIGZpZWxkcyBvbiB0aGUgY2hlY2twb2ludCxcbiAqIG9yIGEgd2FpdGluZyBzaWJsaW5nJ3MgYHBlbmRpbmdQYXVzZXNbbl1gIOKAlCBhbmQgcmV0dXJuIGl0IGFzIGFcbiAqIHtAbGluayBQZW5kaW5nUGF1c2V9LiBgYXRgIG5hbWVzIHdoZXJlIHRoZSByZWNvcmQgc2l0cyAoYCcnYCBmb3IgdGhlXG4gKiBjaGVja3BvaW50IGl0c2VsZiwgYCdwZW5kaW5nUGF1c2VzWzBdJ2AgZm9yIGEgc2libGluZyksIHNvIGJvdGggc2l0ZXMgc3BlYWtcbiAqIHRoZSBzYW1lIHNlbnRlbmNlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVBhdXNlUmVjb3JkKHJhdzogdW5rbm93biwgYXQgPSAnJyk6IFBlbmRpbmdQYXVzZSB7XG4gIGNvbnN0IGZpZWxkID0gKG5hbWU6IHN0cmluZykgPT4gKGF0ID8gYCR7YXR9LiR7bmFtZX1gIDogbmFtZSk7XG4gIGlmICghaXNQbGFpblJlY29yZChyYXcpKSByZWZ1c2UoYCR7YXQgfHwgJ3RoZSBjaGVja3BvaW50J30gbXVzdCBiZSBhbiBvYmplY3RgKTtcbiAgaWYgKHR5cGVvZiByYXcucGF1c2VkU3RhZ2VJZCAhPT0gJ3N0cmluZycgfHwgcmF3LnBhdXNlZFN0YWdlSWQgPT09ICcnKSB7XG4gICAgcmVmdXNlKGAke2ZpZWxkKCdwYXVzZWRTdGFnZUlkJyl9IG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nYCk7XG4gIH1cbiAgY29uc3Qgc3ViZmxvd1BhdGggPSByYXcuc3ViZmxvd1BhdGg7XG4gIGlmICghQXJyYXkuaXNBcnJheShzdWJmbG93UGF0aCkgfHwgIXN1YmZsb3dQYXRoLmV2ZXJ5KChzKSA9PiB0eXBlb2YgcyA9PT0gJ3N0cmluZycpKSB7XG4gICAgcmVmdXNlKGAke2ZpZWxkKCdzdWJmbG93UGF0aCcpfSBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3NgKTtcbiAgfVxuICBjb25zdCBzdGF0ZXMgPSByYXcuc3ViZmxvd1N0YXRlcztcbiAgaWYgKHN0YXRlcyAhPT0gdW5kZWZpbmVkICYmICFpc1BsYWluUmVjb3JkKHN0YXRlcykpIHJlZnVzZShgJHtmaWVsZCgnc3ViZmxvd1N0YXRlcycpfSBtdXN0IGJlIGFuIG9iamVjdGApO1xuICAvLyBFYWNoIGNhcHR1cmUgc2VlZHMgYSBzdWJmbG93J3MgcnVudGltZSDigJQgYSBwbGFpbiBvYmplY3QsIGxpa2UgYHNoYXJlZFN0YXRlYC5cbiAgZm9yIChjb25zdCBbc3ViZmxvd0lkLCBjYXB0dXJlXSBvZiBPYmplY3QuZW50cmllcyhzdGF0ZXMgPz8ge30pKSB7XG4gICAgaWYgKCFpc1BsYWluUmVjb3JkKGNhcHR1cmUpKSByZWZ1c2UoYCR7ZmllbGQoJ3N1YmZsb3dTdGF0ZXMnKX1bJHtKU09OLnN0cmluZ2lmeShzdWJmbG93SWQpfV0gbXVzdCBiZSBhbiBvYmplY3RgKTtcbiAgfVxuICBpZiAocmF3LnBhdXNlZEJ5ICE9PSB1bmRlZmluZWQgJiYgcmF3LnBhdXNlZEJ5ICE9PSAnaW50ZXJydXB0Jykge1xuICAgIHJlZnVzZShgJHtmaWVsZCgncGF1c2VkQnknKX0gbXVzdCBiZSAnaW50ZXJydXB0JyB3aGVuIHByZXNlbnRgKTtcbiAgfVxuICAvLyBBIGtleSB0aGUgcmVzdW1lIHdpbGwgU0VORCAoUDMpOiBoZWxkIHRvIHRoZSBvbmUga2V5IHJ1bGUsIHJlZnVzZWQg4oCUIG5ldmVyIGRyb3BwZWQgKGRyb3BwaW5nIHdvdWxkIGxldCB0aGVcbiAgLy8gcmVzdW1lIHJlY29tcHV0ZSBhIGRpZmZlcmVudCBrZXkpLlxuICBpZiAocmF3LmlkZW1wb3RlbmN5S2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBwcm9ibGVtID0gaWRlbXBvdGVuY3lLZXlQcm9ibGVtKHJhdy5pZGVtcG90ZW5jeUtleSk7XG4gICAgaWYgKHByb2JsZW0gIT09IHVuZGVmaW5lZCkgcmVmdXNlKGAke2ZpZWxkKCdpZGVtcG90ZW5jeUtleScpfSAke3Byb2JsZW19YCk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwYXVzZWRTdGFnZUlkOiByYXcucGF1c2VkU3RhZ2VJZCBhcyBzdHJpbmcsXG4gICAgc3ViZmxvd1BhdGg6IHN1YmZsb3dQYXRoIGFzIHN0cmluZ1tdLFxuICAgIHN1YmZsb3dTdGF0ZXM6IChzdGF0ZXMgYXMgUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHwgdW5kZWZpbmVkKSA/PyB7fSxcbiAgICAuLi4ocmF3LnBhdXNlRGF0YSAhPT0gdW5kZWZpbmVkICYmIHsgcGF1c2VEYXRhOiByYXcucGF1c2VEYXRhIH0pLFxuICAgIC4uLihyYXcucGF1c2VkQnkgPT09ICdpbnRlcnJ1cHQnICYmIHsgcGF1c2VkQnk6ICdpbnRlcnJ1cHQnIGFzIGNvbnN0IH0pLFxuICAgIC8vIEEgcmVjb3JkLCBuZXZlciBhIHBsYW4gaW5wdXQ6IGtlcHQgb25seSB3aGVuIHdlbGwtZm9ybWVkIChhbiBvbGRlciBvclxuICAgIC8vIGhhbmQtZWRpdGVkIGVudHJ5IHNpbXBseSByZXN1bWVzIHdpdGhvdXQgYSBsaW5rKS5cbiAgICAuLi4oaXNQYXVzZWRFeGVjdXRpb24ocmF3LnBhdXNlZEV4ZWN1dGlvbikgJiYge1xuICAgICAgcGF1c2VkRXhlY3V0aW9uOiB7IHJ1bklkOiByYXcucGF1c2VkRXhlY3V0aW9uLnJ1bklkLCBydW50aW1lU3RhZ2VJZDogcmF3LnBhdXNlZEV4ZWN1dGlvbi5ydW50aW1lU3RhZ2VJZCB9LFxuICAgIH0pLFxuICAgIC4uLihyYXcuaWRlbXBvdGVuY3lLZXkgIT09IHVuZGVmaW5lZCAmJiB7IGlkZW1wb3RlbmN5S2V5OiByYXcuaWRlbXBvdGVuY3lLZXkgYXMgc3RyaW5nIH0pLFxuICB9O1xufVxuXG4vKipcbiAqIFRIRSBjaGVja3BvaW50IGRlY29kZXI6IHVwY2FzdCwgdGhlbiBjaGVjayDigJQgdGhlIGNoZWNrcG9pbnQgaXMgYW4gb2JqZWN0LFxuICogaXRzIGBzaGFyZWRTdGF0ZWAgYSBwbGFpbiBvYmplY3QsIGl0cyBvd24gcGF1c2UgcmVjb3JkIHdlbGwtZm9ybWVkLCBhbmRcbiAqIGV2ZXJ5IGBwZW5kaW5nUGF1c2VzYCBlbnRyeSB3ZWxsLWZvcm1lZCAoZWFjaCByZXR1cm5lZCBkZWNvZGVkKS4gVGhyb3dzXG4gKiBgSW52YWxpZCBjaGVja3BvaW50OiDigKZgIG5hbWluZyB0aGUgZmlyc3QgZmllbGQgdGhhdCBpcyBub3Q7IG5ldmVyIGVkaXRzXG4gKiB0aGUgY2FsbGVyJ3Mgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlQ2hlY2twb2ludChzdG9yZWQ6IHVua25vd24pOiBGbG93Y2hhcnRDaGVja3BvaW50IHtcbiAgaWYgKCFpc1BsYWluUmVjb3JkKHN0b3JlZCkpIHJlZnVzZSgndGhlIGNoZWNrcG9pbnQgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgY29uc3QgY2FwdHVyZSA9IHJlYWRDaGVja3BvaW50Q2FwdHVyZShzdG9yZWQpO1xuICBjb25zdCBjaGVja3BvaW50ID0gdXBjYXN0Q2hlY2twb2ludCh3aXRob3V0Q2hlY2twb2ludENhcHR1cmUoc3RvcmVkKSk7XG4gIGlmIChjYXB0dXJlKSBjaGVja3BvaW50LmNhcHR1cmUgPSBjYXB0dXJlO1xuICBlbHNlIGRlbGV0ZSBjaGVja3BvaW50LmNhcHR1cmU7XG4gIGlmICghaXNQbGFpblJlY29yZChjaGVja3BvaW50LnNoYXJlZFN0YXRlKSkgcmVmdXNlKCdzaGFyZWRTdGF0ZSBtdXN0IGJlIGEgcGxhaW4gb2JqZWN0Jyk7XG4gIGRlY29kZVBhdXNlUmVjb3JkKGNoZWNrcG9pbnQpO1xuICAvLyBBIHJlY29yZCwgbmV2ZXIgYSBwbGFuIGlucHV0IOKAlCB0aGUgU0FNRSBydWxlIGFzIGEgc2libGluZydzOiBhIG1hbGZvcm1lZFxuICAvLyBsaW5rIGlzIGRyb3BwZWQgKHRoZSByZXN1bWUgcnVucyB3aXRob3V0IGl0KSwgbmV2ZXIgdHJ1c3RlZC5cbiAgaWYgKGNoZWNrcG9pbnQucGF1c2VkRXhlY3V0aW9uICE9PSB1bmRlZmluZWQgJiYgIWlzUGF1c2VkRXhlY3V0aW9uKGNoZWNrcG9pbnQucGF1c2VkRXhlY3V0aW9uKSkge1xuICAgIGRlbGV0ZSBjaGVja3BvaW50LnBhdXNlZEV4ZWN1dGlvbjtcbiAgfVxuICAvLyBUaGUgY291bnRlcnMgc2VlZCB0aGUgcmVzdW1lZCBydW4ncyBpZHMgYW5kIGxvb3AgYnVkZ2V0OiBhYnNlbnQgaXMgYW4gb2xkXG4gIC8vIGNoZWNrcG9pbnQgKHRoZSBjb3VudGVyIHJlc3RhcnRzKSwgcHJlc2VudCBtdXN0IGJlIHdlbGwtZm9ybWVkLlxuICBpZiAoY2hlY2twb2ludC5leGVjdXRpb25Db3VudCAhPT0gdW5kZWZpbmVkICYmICFpc0NvdW50KGNoZWNrcG9pbnQuZXhlY3V0aW9uQ291bnQpKSB7XG4gICAgcmVmdXNlKCdleGVjdXRpb25Db3VudCBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXInKTtcbiAgfVxuICBjb25zdCB2aXNpdHMgPSBjaGVja3BvaW50LnZpc2l0Q291bnRzO1xuICBpZiAodmlzaXRzICE9PSB1bmRlZmluZWQgJiYgKCFpc1BsYWluUmVjb3JkKHZpc2l0cykgfHwgIU9iamVjdC52YWx1ZXModmlzaXRzKS5ldmVyeShpc0NvdW50KSkpIHtcbiAgICByZWZ1c2UoJ3Zpc2l0Q291bnRzIG11c3QgbWFwIHN0YWdlIGlkcyB0byBub24tbmVnYXRpdmUgaW50ZWdlcnMnKTtcbiAgfVxuICBpZiAoY2hlY2twb2ludC5wZW5kaW5nUGF1c2VzICE9PSB1bmRlZmluZWQpIGNoZWNrcG9pbnQucGVuZGluZ1BhdXNlcyA9IGRlY29kZVBlbmRpbmdQYXVzZXMoY2hlY2twb2ludC5wZW5kaW5nUGF1c2VzKTtcbiAgLy8gVGhlIHJlZGFjdGlvbiBhIHBhdXNlIGNhcnJpZXMgKG5hbWVzIG9ubHkpIHNlZWRzIHRoZSByZXN1bWVkIHJ1bidzIHJ1bGUg4oCUIGEgbWFsZm9ybWVkIG9uZVxuICAvLyBpcyByZWZ1c2VkLCBuZXZlciBkcm9wcGVkOiBkcm9wcGluZyBpdCB3b3VsZCBzZXJ2ZSBpbiBwbGFpbiB3aGF0IHRoZSBydW4gaGFkIG1hc2tlZC5cbiAgaWYgKGNoZWNrcG9pbnQucmVkYWN0aW9uTWFya3MgIT09IHVuZGVmaW5lZCkgZGVjb2RlUmVkYWN0aW9uTWFya3MoY2hlY2twb2ludC5yZWRhY3Rpb25NYXJrcyk7XG4gIHJldHVybiBjaGVja3BvaW50IGFzIHVua25vd24gYXMgRmxvd2NoYXJ0Q2hlY2twb2ludDtcbn1cblxuLyoqIGByZWRhY3Rpb25NYXJrc2A6IGBrZXlzYCBhbiBhcnJheSBvZiBzdHJpbmdzOyBgZmllbGRzYCwgd2hlbiBwcmVzZW50LCBrZXlzIOKGkiBhcnJheXMgb2Ygc3RyaW5ncy4gKi9cbmZ1bmN0aW9uIGRlY29kZVJlZGFjdGlvbk1hcmtzKG1hcmtzOiB1bmtub3duKTogdm9pZCB7XG4gIGlmICghaXNQbGFpblJlY29yZChtYXJrcykpIHJlZnVzZSgncmVkYWN0aW9uTWFya3MgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgaWYgKCFpc1N0cmluZ3MobWFya3Mua2V5cykpIHJlZnVzZSgncmVkYWN0aW9uTWFya3Mua2V5cyBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3MnKTtcbiAgY29uc3QgZmllbGRzID0gbWFya3MuZmllbGRzO1xuICBpZiAoZmllbGRzICE9PSB1bmRlZmluZWQgJiYgKCFpc1BsYWluUmVjb3JkKGZpZWxkcykgfHwgIU9iamVjdC52YWx1ZXMoZmllbGRzKS5ldmVyeShpc1N0cmluZ3MpKSkge1xuICAgIHJlZnVzZSgncmVkYWN0aW9uTWFya3MuZmllbGRzIG11c3QgbWFwIGtleXMgdG8gYXJyYXlzIG9mIHN0cmluZ3MnKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1N0cmluZ3ModmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmV2ZXJ5KChpdGVtKSA9PiB0eXBlb2YgaXRlbSA9PT0gJ3N0cmluZycpO1xufVxuXG4vKipcbiAqIGBwZW5kaW5nUGF1c2VzYCAoc3RvcmVkLCB1bnRydXN0ZWQpIGFzIGRlY29kZWQgcmVjb3JkcyDigJQgdGhlIG9uZSBjaGVja1xuICogYGRlY29kZUNoZWNrcG9pbnRgIHJ1bnMsIGFuZCB0aGUgb25lIGBSZXN1bWVFbnRyeS5wbGFuYCBydW5zIG9uIHdoYXQgaXQgaXNcbiAqIGhhbmRlZCBkaXJlY3RseSwgc28gbmVpdGhlciBkb29yIHRha2VzIGFuIHVuY2hlY2tlZCBzaWJsaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlUGVuZGluZ1BhdXNlcyhwZW5kaW5nOiB1bmtub3duKTogUGVuZGluZ1BhdXNlW10ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocGVuZGluZykpIHJlZnVzZSgncGVuZGluZ1BhdXNlcyBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gIHJldHVybiBwZW5kaW5nLm1hcCgocmF3OiB1bmtub3duLCBuKSA9PiBkZWNvZGVQYXVzZVJlY29yZChyYXcsIGBwZW5kaW5nUGF1c2VzWyR7bn1dYCkpO1xufVxuXG5mdW5jdGlvbiBpc0NvdW50KHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIE51bWJlci5pc0ludGVnZXIodmFsdWUpICYmIHZhbHVlID49IDA7XG59XG4iXX0=
@@ -267,6 +267,8 @@ export interface PauseResult {
267
267
  * ```
268
268
  */
269
269
  export interface FlowchartCheckpoint {
270
+ /** Paused root-leg observation only. No history/recorder data or storage acknowledgement is included. */
271
+ readonly capture?: import('../capture/readSources.js').NativeCaptureObservation;
270
272
  /**
271
273
  * The checkpoint FORMAT: `2`, the lean checkpoint (`1` from 9.39.0; absent
272
274
  * before). `resume()` reads every older one through the one upcaster
@@ -260,4 +260,4 @@ export function isPauseSignal(error) {
260
260
  return false;
261
261
  }
262
262
  }
263
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3BhdXNlL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZCRztBQTRCSCw4RUFBOEU7QUFDOUUsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEtBQWM7SUFDOUMsTUFBTSxDQUFDLEdBQUcsS0FBeUUsQ0FBQztJQUNwRixPQUFPLENBQ0wsT0FBTyxDQUFDLEVBQUUsS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUUsSUFBSSxPQUFPLENBQUMsQ0FBQyxjQUFjLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxjQUFjLEtBQUssRUFBRSxDQUNsSCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sT0FBTyxXQUFZLFNBQVEsS0FBSztJQUNwQyx1REFBdUQ7SUFDOUMsU0FBUyxDQUFVO0lBQzVCLDRDQUE0QztJQUNuQyxPQUFPLENBQVM7SUFDekI7Ozs7Ozs7T0FPRztJQUNNLFFBQVEsQ0FBZTtJQUNoQyx5RUFBeUU7SUFDakUsWUFBWSxDQUFXO0lBRS9COzs7Ozs7Ozs7T0FTRztJQUNLLGVBQWUsQ0FBVTtJQUVqQzs7Ozs7Ozs7Ozs7T0FXRztJQUNLLGNBQWMsR0FBNEMsRUFBRSxDQUFDO0lBRXJFOzs7Ozs7O09BT0c7SUFDSyxjQUFjLEdBQTBCLEVBQUUsQ0FBQztJQUVuRDs7OztPQUlHO0lBQ0ssZ0JBQWdCLENBQThDO0lBRXRFLDRHQUE0RztJQUNwRyxlQUFlLENBQVU7SUFFakMsWUFBWSxJQUFhLEVBQUUsT0FBZSxFQUFFLFFBQXNCO1FBQ2hFLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDO1FBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUks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QyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQYXVzZS9SZXN1bWUg4oCUIHNlcmlhbGl6YWJsZSBjaGVja3BvaW50IGZvciBsb25nLXJ1bm5pbmcgb3IgaHVtYW4taW4tdGhlLWxvb3AgZmxvd3MuXG4gKlxuICogQSBzdGFnZSBzaWduYWxzIHBhdXNlIGJ5IGNhbGxpbmcgYHNjb3BlLiRwYXVzZShkYXRhKWAgd2hpY2ggdGhyb3dzIGEgUGF1c2VTaWduYWwuXG4gKiBUaGUgc2lnbmFsIGJ1YmJsZXMgdXAgdGhyb3VnaCBTdWJmbG93RXhlY3V0b3Ig4oaSIEZsb3djaGFydFRyYXZlcnNlciDihpIgRmxvd0NoYXJ0RXhlY3V0b3IsXG4gKiBlYWNoIGxldmVsIGFkZGluZyBpdHMgc3ViZmxvdyBJRCB0byB0aGUgcGF0aC5cbiAqXG4gKiBUaGUgY2hlY2twb2ludCBjYXB0dXJlcyB3aGF0IGEgcmVzdW1lIHJlYWRzLCBhbmQgdGhlIHBhdXNlJ3Mgb3duIHJlY29yZCDigJRcbiAqIG5ldmVyIHRoZSBydW4ncyBoaXN0b3J5ICh0aGF0IGlzIGBnZXRTbmFwc2hvdCgpYCdzKTpcbiAqICAgLSBwYXVzZWRTdGFnZUlkICsgc3ViZmxvd1BhdGggKCsgcGF1c2VkQnkpOiB0aGUgY3Vyc29yXG4gKiAgIC0gc2hhcmVkU3RhdGUgKyBzdWJmbG93U3RhdGVzOiB0aGUgc3RhdGUgYXQgdGhlIHBhdXNlIOKAlCB0aGUgcm9vdCdzLCBhbmRcbiAqICAgICBlYWNoIHN1YmZsb3cncyBvbiB0aGUgcGF1c2UgcGF0aFxuICogICAtIGV4ZWN1dGlvbkNvdW50ICsgdmlzaXRDb3VudHM6IHRoZSBjb3VudGVycyB0aGUgcmVzdW1lZCBydW4gY29udGludWVzXG4gKiAgIC0gcGVuZGluZ1BhdXNlcywgcmVkYWN0aW9uTWFya3M6IHdhaXRpbmcgc2libGluZ3MsIHJlZGFjdGlvbiBuYW1lc1xuICogICAtIHBhdXNlRGF0YSwgcGF1c2VkRXhlY3V0aW9uLCBpbnZva2VyU3RhZ2VJZCwgcGF1c2VkQXQ6IHRoZSByZWNvcmRcbiAqXG4gKiBSZXN1bWUgcmVidWlsZHMgdGhlIGZsb3djaGFydCwgcmVzdG9yZXMgc2NvcGUsIG5hdmlnYXRlcyB0byB0aGUgcGF1c2VkIHN0YWdlLFxuICogaW5qZWN0cyByZXN1bWVJbnB1dCwgYW5kIGNvbnRpbnVlcyB0cmF2ZXJzYWwuXG4gKlxuICogU3VwcG9ydGVkIHRvcG9sb2dpZXM6IGxpbmVhciwgc3ViZmxvdyAoYXQgYW55IGRlcHRoIOKAlCBtb3VudGVkIGxpbmVhcmx5LCBhcyBhXG4gKiBkZWNpZGVyIG9yIHNlbGVjdG9yIGJyYW5jaCwgb3IgYXMgYSBmb3JrIGNoaWxkKSwgbG9vcCwgbmVzdGVkIHN1YmZsb3cgaW5cbiAqIGxvb3AsIGFuZCBzZXZlcmFsIHBhcmFsbGVsIHNpYmxpbmdzIHBhdXNpbmcgaW4gb25lIGZhbi1vdXQgKGVhY2ggYXNrcyBpblxuICogdHVybiDigJQgYEZsb3djaGFydENoZWNrcG9pbnQucGVuZGluZ1BhdXNlc2ApLlxuICpcbiAqIE5PVCByZXN1bWFibGUgeWV0OiBhIHBhdXNlIGluc2lkZSBhIExBWlkgc3ViZmxvdyAoYGFkZExhenlTdWJGbG93Q2hhcnQqYCkgb3JcbiAqIGluc2lkZSBhbiBgYWRkUGFyYWxsZWxGb3JFYWNoYCBicmFuY2guIFRoZWlyIGdyYXBocyBhcmUgcmVzb2x2ZWQgYXQgcnVuIHRpbWVcbiAqIGFuZCBhcmUgbm90IGluIHRoZSBjaGFydCBhIHJlc3VtZSB3YWxrcywgc28gYHJlc3VtZSgpYCByZWZ1c2VzIHRoZVxuICogY2hlY2twb2ludCAoXCJub3QgZm91bmRcIikgaW5zdGVhZCBvZiBndWVzc2luZy4gUGlubmVkIGluXG4gKiB0ZXN0L2xpYi9wYXVzZS9yZXN1bWUta25vd24tbGltaXRhdGlvbnMudGVzdC50cy5cbiAqL1xuXG4vLyDilIDilIAgUGF1c2VTaWduYWwg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogVGhlIHBhdXNlZCBFWEVDVVRJT04gKDkuMzcuMCk6IHRoZSBydW4gdGhhdCBwYXVzZWQgYW5kIHRoZSBwYXVzZWQgc3RhZ2Unc1xuICogcnVudGltZVN0YWdlSWQgaW4gaXQuIFJlY29yZGVkIG9uIHRoZSBjaGVja3BvaW50IChhbmQgb24gZWFjaCBxdWV1ZWRcbiAqIHNpYmxpbmcncyBwZW5kaW5nIHJlY29yZCkgc28gYSByZXN1bWUgY2FuIExJTksgdG8gaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGF1c2VkRXhlY3V0aW9uIHtcbiAgcmVhZG9ubHkgcnVuSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcnVudGltZVN0YWdlSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcmVkYWN0aW9uIGEgcGF1c2UgY2FycmllcyB0byB0aGUgcmVzdW1lZCBydW4g4oCUIE5BTUVTIG9ubHksIG5ldmVyIGEgdmFsdWVcbiAqICh0aGUgY2hlY2twb2ludCBzdGF5cyByZWFsKTogdGhlIGtleXMgbWFya2VkIHNlY3JldCBmb3IgdGhlIHJlc3Qgb2YgdGhlIHJ1blxuICogKGEgcGVyLWNhbGwgYHNldFZhbHVlKGtleSwgdmFsdWUsIHRydWUpYCwgYSBrZXkgdGhlIHBvbGljeSByZWRhY3RlZCB3aG9sZSwgYVxuICogc3ViZmxvdyBtYXBwZXIncyB0YWludCkgYW5kIHRoZSBmaWVsZHMgYSBtYXBwZXIgaGFuZGVkIHRvIGEgbmV3IGtleS4gUmVzdW1lXG4gKiBzZWVkcyB0aGUgcmVzdW1lZCBydW4ncyBydWxlIHdpdGggdGhlbSwgc28gYSBjb3B5IG1hZGUgYmVmb3JlIHRoZSBwYXVzZSBpc1xuICogc3RpbGwgbWFza2VkIGFmdGVyIGl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZGFjdGlvbk1hcmtzIHtcbiAgcmVhZG9ubHkga2V5czogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKiBLZXkg4oaSIHRoZSBmaWVsZCBwYXRocyBhIG1hcHBlciBoYW5kZWQgaXQuIEFic2VudCB3aGVuIG5vbmUuICovXG4gIHJlYWRvbmx5IGZpZWxkcz86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHJlYWRvbmx5IHN0cmluZ1tdPj47XG59XG5cbi8qKiBUcnVlIGZvciBhIHdlbGwtZm9ybWVkIHtAbGluayBQYXVzZWRFeGVjdXRpb259ICh0d28gbm9uLWVtcHR5IHN0cmluZ3MpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGF1c2VkRXhlY3V0aW9uKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUGF1c2VkRXhlY3V0aW9uIHtcbiAgY29uc3QgdiA9IHZhbHVlIGFzIHsgcnVuSWQ/OiB1bmtub3duOyBydW50aW1lU3RhZ2VJZD86IHVua25vd24gfSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHY/LnJ1bklkID09PSAnc3RyaW5nJyAmJiB2LnJ1bklkICE9PSAnJyAmJiB0eXBlb2Ygdi5ydW50aW1lU3RhZ2VJZCA9PT0gJ3N0cmluZycgJiYgdi5ydW50aW1lU3RhZ2VJZCAhPT0gJydcbiAgKTtcbn1cblxuLyoqXG4gKiBUaHJvd24gYnkgYHNjb3BlLiRwYXVzZSgpYCB0byBzaWduYWwgdGhhdCBleGVjdXRpb24gc2hvdWxkIHN0b3BcbiAqIGFuZCBjcmVhdGUgYSBzZXJpYWxpemFibGUgY2hlY2twb2ludC5cbiAqXG4gKiBCdWJibGVzIHVwIHRocm91Z2ggU3ViZmxvd0V4ZWN1dG9yICh3aGljaCBwcmVwZW5kcyBzdWJmbG93IElEIHRvIHBhdGgpXG4gKiBhbmQgaXMgY2F1Z2h0IGJ5IEZsb3djaGFydFRyYXZlcnNlci9GbG93Q2hhcnRFeGVjdXRvci5cbiAqL1xuZXhwb3J0IGNsYXNzIFBhdXNlU2lnbmFsIGV4dGVuZHMgRXJyb3Ige1xuICAvKiogRGF0YSBmcm9tICRwYXVzZSgpIOKAlCBxdWVzdGlvbiwgcmVhc29uLCBtZXRhZGF0YS4gKi9cbiAgcmVhZG9ubHkgcGF1c2VEYXRhOiB1bmtub3duO1xuICAvKiogSUQgb2YgdGhlIHN0YWdlIHRoYXQgY2FsbGVkICRwYXVzZSgpLiAqL1xuICByZWFkb25seSBzdGFnZUlkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBIT1cgdGhlIHBhdXNlIHdhcyByYWlzZWQg4oCUIGAnaW50ZXJydXB0J2Agd2hlbiBhIHN0YWdlIGJvZHkgY2FsbGVkXG4gICAqIGBpbnRlcnJ1cHQoc2NvcGUsIHBheWxvYWQpYCwgYWJzZW50IGZvciB0aGUgYGFkZFBhdXNhYmxlRnVuY3Rpb25gXG4gICAqIGV4ZWN1dGUvcmVzdW1lIHBhdGguIFNldCBhdCB0aGUgc3RhZ2UgYm91bmRhcnkgKGBTdGFnZVJ1bm5lcmApLCBjYXJyaWVkXG4gICAqIG9udG8gdGhlIGNoZWNrcG9pbnQsIGFuZCByZWFkIGJ5IGByZXN1bWUoKWAgdG8gcGljayB0aGUgcmUtZW50cnk6IGFuXG4gICAqIGludGVycnVwdGVkIHN0YWdlIHJlLXJ1bnMgaXRzIE9XTiBmdW5jdGlvbiBmcm9tIHRoZSB0b3AgKHN0YWdlcyBhcmVcbiAgICogYXRvbWljKSwgYSBwYXVzYWJsZSBzdGFnZSBydW5zIGl0cyBgcmVzdW1lRm5gLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF1c2VkQnk/OiAnaW50ZXJydXB0JztcbiAgLyoqIFBhdGggdGhyb3VnaCBzdWJmbG93cyB0byB0aGUgcGF1c2VkIHN0YWdlLiBCdWlsdCBkdXJpbmcgYnViYmxlLXVwLiAqL1xuICBwcml2YXRlIF9zdWJmbG93UGF0aDogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEludm9rZXIgY29udGV4dCDigJQgZW5yaWNoZWQgZHVyaW5nIGJ1YmJsZS11cCB3aGVuIGEgUGF1c2VTaWduYWwgcGFzc2VzXG4gICAqIHRocm91Z2ggYSBkZWNpZGVyLCBzZWxlY3Rvciwgb3IgZm9yayBoYW5kbGVyLlxuICAgKlxuICAgKiBUaGUgaW52b2tlciBpcyB0aGUgc3RhZ2UgdGhhdCBjYWxsZWQgZXhlY3V0ZU5vZGUoKSBvbiB0aGUgcGF1c2VkIGNoaWxkLlxuICAgKiBDYXB0dXJlZCBkdXJpbmcgdHJhdmVyc2FsIChub3QgcmVjb25zdHJ1Y3RlZCBmcm9tIHRoZSB0cmVlKS4gKFRoZVxuICAgKiBpbnZva2VyJ3MgYC5uZXh0YCBpZCByb2RlIGJlc2lkZSBpdCB1bnRpbCA5LjM5LjAgYXNcbiAgICogYGNvbnRpbnVhdGlvblN0YWdlSWRgOyB3aGF0IHJ1bnMgYWZ0ZXIgYSByZXN1bWUgY29tZXMgZnJvbSB0aGUgY2hhcnRcbiAgICogc2luY2UgOS4yOC4wLCBzbyBpdCBpcyBubyBsb25nZXIgY2FycmllZC4pXG4gICAqL1xuICBwcml2YXRlIF9pbnZva2VyU3RhZ2VJZD86IHN0cmluZztcblxuICAvKipcbiAgICogU3ViZmxvdyBzY29wZSBjYXB0dXJlIOKAlCBwb3B1bGF0ZWQgZHVyaW5nIGJ1YmJsZS11cCBieVxuICAgKiBgU3ViZmxvd0V4ZWN1dG9yYCByaWdodCBiZWZvcmUgcmUtdGhyb3cuIEVhY2ggZW50cnkgaXMgb25lXG4gICAqIHN1YmZsb3cncyBwcmUtcGF1c2Ugc2hhcmVkIHN0YXRlLCBrZXllZCBieSB0aGUgcGF0aC1wcmVmaXhlZFxuICAgKiBzdWJmbG93IGlkIChtYXRjaGVzIGBzdWJmbG93UGF0aGApLlxuICAgKlxuICAgKiBXaXRob3V0IHRoaXMsIHRoZSBuZXN0ZWQgYFNoYXJlZE1lbW9yeWAgaXMgZ2FyYmFnZS1jb2xsZWN0ZWRcbiAgICogYmVmb3JlIHRoZSBjaGVja3BvaW50IGlzIGJ1aWx0LiBPbiByZXN1bWUsIHRoZSBpbm5lciBydW50aW1lIGlzXG4gICAqIHJlLWNyZWF0ZWQgZW1wdHkgYW5kIHJlc3VtZSBoYW5kbGVycyByZWFkaW5nIHByZS1wYXVzZSBzY29wZVxuICAgKiAoZS5nLiwgYW4gQWdlbnQncyBgc2NvcGUuaGlzdG9yeWAsIGBzY29wZS5wYXVzZWRUb29sQ2FsbElkYClcbiAgICogY3Jhc2ggd2l0aCBcIlggaXMgbm90IGl0ZXJhYmxlXCIgLyB1bmRlZmluZWQuXG4gICAqL1xuICBwcml2YXRlIF9zdWJmbG93U3RhdGVzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gPSB7fTtcblxuICAvKipcbiAgICogUGF1c2VzIHRoYXQgUEFSQUxMRUwgU0lCTElOR1MgcmFpc2VkIGluIHRoZSBzYW1lIGZhbi1vdXQgYXMgdGhpcyBvbmUsXG4gICAqIHdhaXRpbmcgdGhlaXIgdHVybiAoOS4yOC4wKS4gUmVjb3JkZWQgYnkgYENoaWxkcmVuRXhlY3V0b3JgIHdoZW4gbW9yZVxuICAgKiB0aGFuIG9uZSBjaGlsZCBvZiBhIGZvcmsgKG9yIG1vcmUgdGhhbiBvbmUgc2VsZWN0ZWQgYnJhbmNoKSBwYXVzZXM6IHRoZVxuICAgKiBmaXJzdCBwYXVzZSBpcyB0aGUgb25lIHRoYXQgaXMgYXNrZWQsIHRoZSBvdGhlcnMgcmlkZSBoZXJlIGluc3RlYWQgb2ZcbiAgICogYmVpbmcgZHJvcHBlZC4gRWFjaCBwYXRoIGlzIHJlbGF0aXZlIHRvIHdoZXJlIHRoZSBzaWduYWwgY3VycmVudGx5IGlzXG4gICAqIGFuZCBncm93cyB3aXRoIGl0IOKAlCBgcHJlcGVuZFN1YmZsb3dgIHByZXBlbmRzIHRvIGV2ZXJ5IGVudHJ5IHRvby5cbiAgICovXG4gIHByaXZhdGUgX3BlbmRpbmdQYXVzZXM6IE11dGFibGVQZW5kaW5nUGF1c2VbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBXSElDSCBleGVjdXRpb24gcGF1c2VkIOKAlCBpdHMgcnVudGltZVN0YWdlSWQgc3RhbXBlZCBvbmNlIGF0IHRoZSBzdGFnZVxuICAgKiBib3VuZGFyeSAoYFN0YWdlUnVubmVyYCksIGl0cyBydW4gYWRkZWQgd2hlbiB0aGUgY2hlY2twb2ludCBpcyBidWlsdFxuICAgKiAoYGNvbXBsZXRlRXhlY3V0aW9uYCksIG9yIGJvdGggY2FycmllZCBvdmVyIGZvciBhIHF1ZXVlZCBzaWJsaW5nLlxuICAgKi9cbiAgcHJpdmF0ZSBfcGF1c2VkRXhlY3V0aW9uPzogeyBydW50aW1lU3RhZ2VJZDogc3RyaW5nOyBydW5JZD86IHN0cmluZyB9O1xuXG4gIC8qKiBUaGUgcGF1c2VkIGV4ZWN1dGlvbidzIGlkZW1wb3RlbmN5IGtleSAoUDMpIOKAlCBhIHRvdWNoaW5nIHN0YWdlJ3MsIHN0YW1wZWQgb25jZSBhdCB0aGUgc3RhZ2UgYm91bmRhcnkuICovXG4gIHByaXZhdGUgX2lkZW1wb3RlbmN5S2V5Pzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IHVua25vd24sIHN0YWdlSWQ6IHN0cmluZywgcGF1c2VkQnk/OiAnaW50ZXJydXB0Jykge1xuICAgIHN1cGVyKCdFeGVjdXRpb24gcGF1c2VkJyk7XG4gICAgdGhpcy5uYW1lID0gJ1BhdXNlU2lnbmFsJztcbiAgICB0aGlzLnBhdXNlRGF0YSA9IGRhdGE7XG4gICAgdGhpcy5zdGFnZUlkID0gc3RhZ2VJZDtcbiAgICBpZiAocGF1c2VkQnkpIHRoaXMucGF1c2VkQnkgPSBwYXVzZWRCeTtcbiAgICB0aGlzLl9zdWJmbG93UGF0aCA9IFtdO1xuICAgIC8vIFBhdXNlU2lnbmFsIGlzIGNvbnRyb2wgZmxvdywgbm90IGEgcmVhbCBlcnJvciDigJQgc3RhY2sgdHJhY2UgaGFzIG5vIGRpYWdub3N0aWMgdmFsdWUuXG4gICAgdGhpcy5zdGFjayA9ICcnO1xuICB9XG5cbiAgZ2V0IHN1YmZsb3dQYXRoKCk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fc3ViZmxvd1BhdGg7XG4gIH1cblxuICAvKiogVGhlIHBhdXNlZCBleGVjdXRpb24gKGl0cyBydW4gYW5kIGBbcGF0aC9dc3RhZ2VJZCNOYCksIG9uY2UgYm90aCBhcmUga25vd24uICovXG4gIGdldCBwYXVzZWRFeGVjdXRpb24oKTogUGF1c2VkRXhlY3V0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBlID0gdGhpcy5fcGF1c2VkRXhlY3V0aW9uO1xuICAgIHJldHVybiBlPy5ydW5JZCAhPT0gdW5kZWZpbmVkID8geyBydW5JZDogZS5ydW5JZCwgcnVudGltZVN0YWdlSWQ6IGUucnVudGltZVN0YWdlSWQgfSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvcmQgd2hpY2ggRVhFQ1VUSU9OIHBhdXNlZC4gRmlyc3Qgc3RhbXAgd2luczogdGhlIHNpZ25hbCBidWJibGVzXG4gICAqIHRocm91Z2ggb3V0ZXIgYm91bmRhcmllcyB0aGF0IG11c3Qgbm90IG92ZXJ3cml0ZSBpdC4gVGhlIHN0YWdlIGJvdW5kYXJ5XG4gICAqIGtub3dzIG9ubHkgdGhlIHJ1bnRpbWVTdGFnZUlkOyBhIHF1ZXVlZCBzaWJsaW5nIHJhaXNlZCBhZ2FpbiBvbiByZXN1bWVcbiAgICogY2FycmllcyBib3RoIChpdCBwYXVzZWQgaW4gYW4gRUFSTElFUiBydW4pLlxuICAgKi9cbiAgc3RhbXBFeGVjdXRpb24ocnVudGltZVN0YWdlSWQ6IHN0cmluZywgcnVuSWQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcGF1c2VkRXhlY3V0aW9uICE9PSB1bmRlZmluZWQgfHwgIXJ1bnRpbWVTdGFnZUlkKSByZXR1cm47XG4gICAgdGhpcy5fcGF1c2VkRXhlY3V0aW9uID0geyBydW50aW1lU3RhZ2VJZCwgLi4uKHJ1bklkICE9PSB1bmRlZmluZWQgJiYgeyBydW5JZCB9KSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBpZGVtcG90ZW5jeSBrZXkgdGhlIHBhdXNlZCBleGVjdXRpb24gcmFuIHVuZGVyIChQMykg4oCUIGEgdG91Y2hpbmcgc3RhZ2Uncy4gSXQgcmlkZXMgdGhlIGNoZWNrcG9pbnQgc28gdGhlXG4gICAqIHJlc3VtZSByZS1ydW5zIHRoZSBzdGFnZSAob3IgaXRzIGByZXN1bWVGbmApIHVuZGVyIHRoZSBTQU1FIGtleTogdGhlIGlucHV0IGl0cyBydWxlIHJlYWQgZG9lcyBub3QgY3Jvc3MgYVxuICAgKiByZXN1bWUuIEZpcnN0IHN0YW1wIHdpbnMuXG4gICAqL1xuICBnZXQgaWRlbXBvdGVuY3lLZXkoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faWRlbXBvdGVuY3lLZXk7XG4gIH1cblxuICBzdGFtcElkZW1wb3RlbmN5S2V5KGtleTogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2lkZW1wb3RlbmN5S2V5ID09PSB1bmRlZmluZWQgJiYga2V5ICE9PSB1bmRlZmluZWQpIHRoaXMuX2lkZW1wb3RlbmN5S2V5ID0ga2V5O1xuICB9XG5cbiAgLyoqXG4gICAqIE5hbWUgdGhlIHJ1biBmb3IgZXZlcnkgcGF1c2Ugb24gdGhpcyBzaWduYWwgdGhhdCBwYXVzZWQgaW4gaXQg4oCUIHRoaXMgb25lXG4gICAqIGFuZCBpdHMgcXVldWVkIHNpYmxpbmdzIHRoYXQgZG8gbm90IGFscmVhZHkgY2FycnkgYSBydW4gKGEgc2libGluZyByYWlzZWRcbiAgICogYWdhaW4gb24gcmVzdW1lIGtlZXBzIHRoZSBydW4gaXQgcGF1c2VkIGluKS4gQ2FsbGVkIG9uY2UsIHdoZW4gdGhlXG4gICAqIGNoZWNrcG9pbnQgaXMgYnVpbHQuXG4gICAqL1xuICBjb21wbGV0ZUV4ZWN1dGlvbihydW5JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3BhdXNlZEV4ZWN1dGlvbiAmJiB0aGlzLl9wYXVzZWRFeGVjdXRpb24ucnVuSWQgPT09IHVuZGVmaW5lZCkgdGhpcy5fcGF1c2VkRXhlY3V0aW9uLnJ1bklkID0gcnVuSWQ7XG4gICAgZm9yIChjb25zdCBwZW5kaW5nIG9mIHRoaXMuX3BlbmRpbmdQYXVzZXMpIHtcbiAgICAgIGlmIChwZW5kaW5nLnBhdXNlZEV4ZWN1dGlvbiAmJiBwZW5kaW5nLnBhdXNlZEV4ZWN1dGlvbi5ydW5JZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHBlbmRpbmcucGF1c2VkRXhlY3V0aW9uID0geyBydW50aW1lU3RhZ2VJZDogcGVuZGluZy5wYXVzZWRFeGVjdXRpb24ucnVudGltZVN0YWdlSWQsIHJ1bklkIH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFByZXBlbmQgYSBzdWJmbG93IElEIHRvIHRoZSBwYXRoIChjYWxsZWQgZHVyaW5nIGJ1YmJsZS11cCkuIFRoZSBwZW5kaW5nXG4gICAqIHNpYmxpbmcgcGF1c2VzIHJpZGUgdGhlIHNhbWUgYm91bmRhcnksIHNvIHRoZWlyIHBhdGhzIGdyb3cgd2l0aCBpdC5cbiAgICovXG4gIHByZXBlbmRTdWJmbG93KHN1YmZsb3dJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fc3ViZmxvd1BhdGgudW5zaGlmdChzdWJmbG93SWQpO1xuICAgIGZvciAoY29uc3QgcGVuZGluZyBvZiB0aGlzLl9wZW5kaW5nUGF1c2VzKSBwZW5kaW5nLnN1YmZsb3dQYXRoLnVuc2hpZnQoc3ViZmxvd0lkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBRdWV1ZSBhIHBhcmFsbGVsIHNpYmxpbmcncyBwYXVzZSBiZWhpbmQgdGhpcyBvbmUgKGl0cyBwYXRoIHJlbGF0aXZlIHRvXG4gICAqIHRoaXMgc2lnbmFsJ3MgY3VycmVudCBsZXZlbCkuIENvcGllZCBpbjogdGhlIGVudHJ5IGlzIG93bmVkIGJ5IHRoZVxuICAgKiBzaWduYWwgZnJvbSBoZXJlIG9uLlxuICAgKi9cbiAgYWRkUGVuZGluZ1BhdXNlKHBhdXNlOiBQZW5kaW5nUGF1c2UpOiB2b2lkIHtcbiAgICB0aGlzLl9wZW5kaW5nUGF1c2VzLnB1c2goe1xuICAgICAgcGF1c2VkU3RhZ2VJZDogcGF1c2UucGF1c2VkU3RhZ2VJZCxcbiAgICAgIHN1YmZsb3dQYXRoOiBbLi4ucGF1c2Uuc3ViZmxvd1BhdGhdLFxuICAgICAgc3ViZmxvd1N0YXRlczogeyAuLi5wYXVzZS5zdWJmbG93U3RhdGVzIH0sXG4gICAgICAuLi4ocGF1c2UucGF1c2VEYXRhICE9PSB1bmRlZmluZWQgJiYgeyBwYXVzZURhdGE6IHBhdXNlLnBhdXNlRGF0YSB9KSxcbiAgICAgIC4uLihwYXVzZS5wYXVzZWRCeSAmJiB7IHBhdXNlZEJ5OiBwYXVzZS5wYXVzZWRCeSB9KSxcbiAgICAgIC4uLihwYXVzZS5wYXVzZWRFeGVjdXRpb24gJiZcbiAgICAgICAgdHlwZW9mIHBhdXNlLnBhdXNlZEV4ZWN1dGlvbi5ydW50aW1lU3RhZ2VJZCA9PT0gJ3N0cmluZycgJiYgeyBwYXVzZWRFeGVjdXRpb246IHsgLi4ucGF1c2UucGF1c2VkRXhlY3V0aW9uIH0gfSksXG4gICAgICAuLi4ocGF1c2UuaWRlbXBvdGVuY3lLZXkgIT09IHVuZGVmaW5lZCAmJiB7IGlkZW1wb3RlbmN5S2V5OiBwYXVzZS5pZGVtcG90ZW5jeUtleSB9KSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJhbGxlbCBzaWJsaW5ncycgcGF1c2VzIHdhaXRpbmcgYmVoaW5kIHRoaXMgb25lLCBpbiB0aGUgb3JkZXIgdGhleSB3aWxsXG4gICAqIGJlIGFza2VkLiBJbiBmbGlnaHQsIGEgc2libGluZyB0aGF0IHBhdXNlZCBpbiBUSElTIHJ1biBjYXJyaWVzIG9ubHkgaXRzXG4gICAqIHJ1bnRpbWVTdGFnZUlkOyBgY29tcGxldGVFeGVjdXRpb25gIChhdCBjaGVja3BvaW50IGJ1aWxkKSBhZGRzIHRoZSBydW4uXG4gICAqL1xuICBnZXQgcGVuZGluZ1BhdXNlcygpOiByZWFkb25seSBQZW5kaW5nUGF1c2VbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3BlbmRpbmdQYXVzZXMgYXMgcmVhZG9ubHkgUGVuZGluZ1BhdXNlW107XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBwYXVzZSBhcyBhIHtAbGluayBQZW5kaW5nUGF1c2V9IOKAlCB3aGF0IGBDaGlsZHJlbkV4ZWN1dG9yYCBxdWV1ZXNcbiAgICogYmVoaW5kIGEgc2libGluZydzIHBhdXNlIHdoZW4gYm90aCBwYXVzZWQgaW4gb25lIGZhbi1vdXQuXG4gICAqL1xuICB0b1BlbmRpbmdQYXVzZSgpOiBQZW5kaW5nUGF1c2Uge1xuICAgIC8vIEluIGZsaWdodCAoc2VlIGBwZW5kaW5nUGF1c2VzYCk6IHRoZSBydW4gaXMgYWRkZWQgYXQgY2hlY2twb2ludCBidWlsZC5cbiAgICByZXR1cm4gPFBlbmRpbmdQYXVzZT57XG4gICAgICBwYXVzZWRTdGFnZUlkOiB0aGlzLnN0YWdlSWQsXG4gICAgICBzdWJmbG93UGF0aDogWy4uLnRoaXMuX3N1YmZsb3dQYXRoXSxcbiAgICAgIHN1YmZsb3dTdGF0ZXM6IHsgLi4udGhpcy5fc3ViZmxvd1N0YXRlcyB9LFxuICAgICAgLi4uKHRoaXMucGF1c2VEYXRhICE9PSB1bmRlZmluZWQgJiYgeyBwYXVzZURhdGE6IHRoaXMucGF1c2VEYXRhIH0pLFxuICAgICAgLi4uKHRoaXMucGF1c2VkQnkgJiYgeyBwYXVzZWRCeTogdGhpcy5wYXVzZWRCeSB9KSxcbiAgICAgIC4uLih0aGlzLl9wYXVzZWRFeGVjdXRpb24gJiYgeyBwYXVzZWRFeGVjdXRpb246IHsgLi4udGhpcy5fcGF1c2VkRXhlY3V0aW9uIH0gfSksXG4gICAgICAuLi4odGhpcy5faWRlbXBvdGVuY3lLZXkgIT09IHVuZGVmaW5lZCAmJiB7IGlkZW1wb3RlbmN5S2V5OiB0aGlzLl9pZGVtcG90ZW5jeUtleSB9KSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIFRoZSBzdGFnZSB0aGF0IGludm9rZWQgdGhlIHBhdXNlZCBjaGlsZCAoZGVjaWRlciwgc2VsZWN0b3IsIGZvcmspLiAqL1xuICBnZXQgaW52b2tlclN0YWdlSWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faW52b2tlclN0YWdlSWQ7XG4gIH1cblxuICAvKipcbiAgICogU3RhbXAgdGhlIGludm9rZXIgY29udGV4dCBkdXJpbmcgYnViYmxlLXVwLlxuICAgKiBDYWxsZWQgYnkgZGVjaWRlci9zZWxlY3Rvci9mb3JrIGhhbmRsZXJzIHdoZW4gY2F0Y2hpbmcgYSBjaGlsZCdzIFBhdXNlU2lnbmFsLlxuICAgKiBGaXJzdCBpbnZva2VyIHdpbnMgKGlubmVybW9zdCkg4oCUIHN1YnNlcXVlbnQgY2FsbHMgYXJlIG5vLW9wcy5cbiAgICovXG4gIHNldEludm9rZXIoaW52b2tlclN0YWdlSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faW52b2tlclN0YWdlSWQpIHRoaXMuX2ludm9rZXJTdGFnZUlkID0gaW52b2tlclN0YWdlSWQ7XG4gIH1cblxuICAvKipcbiAgICogQ2FwdHVyZSBhIHN1YmZsb3cncyBpc29sYXRlZCBTaGFyZWRNZW1vcnkgYXQgdGhlIG1vbWVudCBpdHNcbiAgICogdHJhdmVyc2FsIHRocmV3LiBDYWxsZWQgYnkgYFN1YmZsb3dFeGVjdXRvcmAgb25jZSBwZXIgc3ViZmxvd1xuICAgKiBib3VuZGFyeSBvbiB0aGUgYnViYmxlLXVwIHBhdGguIEVhY2ggY2FwdHVyZSBpcyBrZXllZCBieSB0aGVcbiAgICogcGF0aC1wcmVmaXhlZCBzdWJmbG93IGlkICh0aGUgc2FtZSBpZCB1c2VkIGluIGBzdWJmbG93UGF0aGApLlxuICAgKlxuICAgKiBJbm5lcm1vc3QtZmlyc3Q6IGEgZGVlcCBgU2VxdWVuY2UoQWdlbnQoLi4uKSlgIHBhdXNlIGNhcHR1cmVzIHRoZVxuICAgKiBhZ2VudCdzIHN1YmZsb3cgZmlyc3QsIHRoZW4gaXRzIHBhcmVudCdzLCBhbGwgdGhlIHdheSB0byB0aGUgcm9vdFxuICAgKiBtb3VudC4gVGhlIGZ1bGwgbmVzdCBzdXJ2aXZlcyBpbnRvIGBjaGVja3BvaW50LnN1YmZsb3dTdGF0ZXNgLlxuICAgKi9cbiAgY2FwdHVyZVN1YmZsb3dTY29wZShzdWJmbG93SWQ6IHN0cmluZywgc3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG4gICAgLy8gRGVmZW5zaXZlIHNoYWxsb3cgY2xvbmUgc28gbGF0ZXIgbXV0YXRpb25zIG9uIHRoZSBzb3VyY2UgZG9uJ3RcbiAgICAvLyBibGVlZCBpbnRvIHRoZSBjYXB0dXJlZCBzbmFwc2hvdC4gRGVlcCBjbG9uaW5nIGlzIHRoZSBjb25zdW1lcidzXG4gICAgLy8gcmVzcG9uc2liaWxpdHkgKHRoZSByZXN1bWUgdGFyZ2V0IG1heSBub3QgZXZlbiBiZSBvbiB0aGlzXG4gICAgLy8gcHJvY2Vzcyk7IFNoYXJlZE1lbW9yeSB2YWx1ZXMgYXJlIGNvbnZlbnRpb25hbGx5IEpTT04tZnJpZW5kbHkuXG4gICAgdGhpcy5fc3ViZmxvd1N0YXRlc1tzdWJmbG93SWRdID0geyAuLi5zdGF0ZSB9O1xuICB9XG5cbiAgLyoqIENhcHR1cmVkIHN1YmZsb3cgc2NvcGVzIChyZWFkLW9ubHkgdmlldykuICovXG4gIGdldCBzdWJmbG93U3RhdGVzKCk6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ge1xuICAgIHJldHVybiB0aGlzLl9zdWJmbG93U3RhdGVzO1xuICB9XG59XG5cbi8vIOKUgOKUgCBQZW5kaW5nUGF1c2Ug4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogQSBwYXVzZSBhIFBBUkFMTEVMIFNJQkxJTkcgb2YgdGhlIHBhdXNlZCBzdGFnZSByYWlzZWQgaW4gdGhlIHNhbWUgZmFuLW91dCDigJRcbiAqIHR3byBjaGlsZHJlbiBvZiBvbmUgZm9yayAob3IgdHdvIHNlbGVjdGVkIGJyYW5jaGVzIG9mIG9uZSBzZWxlY3RvcikgdGhhdFxuICogYm90aCBwYXVzZWQgKDkuMjguMCkuIE9ubHkgb25lIHBhdXNlIGlzIGFza2VkIGF0IGEgdGltZTogdGhlIGNoZWNrcG9pbnQnc1xuICogb3duIChgcGF1c2VkU3RhZ2VJZGApLCB0aGVuIGVhY2ggb2YgdGhlc2UgaW4gdHVybiwgd2l0aCB0aGUgZmFuLW91dCdzIGpvaW5cbiAqIHJ1bm5pbmcgb25seSBvbmNlIGV2ZXJ5IGNoaWxkIGlzIGRvbmUuXG4gKlxuICogRXZlcnl0aGluZyBuZWVkZWQgdG8gcmFpc2UgdGhlIHNpYmxpbmcncyBwYXVzZSBhZ2FpbiBsYXRlciBXSVRIT1VUIHJlLXJ1bm5pbmdcbiAqIHRoZSBzaWJsaW5nOiBpdHMgc3RhZ2UsIGl0cyBwYXRoLCBpdHMgY2FwdHVyZWQgc3ViZmxvdyBzdGF0ZSwgaXRzIHF1ZXN0aW9uLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBBIGZvcmsgd2hvc2UgdHdvIGNoaWxkcmVuIGJvdGggYXNrOiB0aGUgZmlyc3QgY2hlY2twb2ludCBhc2tzIGMxIGFuZFxuICogLy8gY2FycmllcyBjMidzIHBhdXNlOyByZXN1bWluZyBpdCBmaW5pc2hlcyBjMSwgdGhlbiBwYXVzZXMgd2l0aCBjMidzXG4gKiAvLyBxdWVzdGlvbjsgcmVzdW1pbmcgVEhBVCBmaW5pc2hlcyBjMiBhbmQgcnVucyB0aGUgam9pbi5cbiAqIGNvbnN0IGNwID0gZXhlY3V0b3IuZ2V0Q2hlY2twb2ludCgpITtcbiAqIGNwLnBhdXNlZFN0YWdlSWQ7ICAgICAgICAgICAgICAgICAgLy8gJ2MxL2FzaydcbiAqIGNwLnBlbmRpbmdQYXVzZXM/LlswXS5wYXVzZWRTdGFnZUlkOyAvLyAnYzIvYXNrJ1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGVuZGluZ1BhdXNlIHtcbiAgLyoqIFRoZSBzaWJsaW5nJ3MgcGF1c2VkIHN0YWdlIChwYXRoLXByZWZpeGVkIGlkLCBhcyBgcGF1c2VkU3RhZ2VJZGApLiAqL1xuICByZWFkb25seSBwYXVzZWRTdGFnZUlkOiBzdHJpbmc7XG4gIC8qKiBQYXRoIHRocm91Z2ggc3ViZmxvd3MgdG8gdGhlIHNpYmxpbmcncyBwYXVzZWQgc3RhZ2UgKGFzIGBzdWJmbG93UGF0aGApLiAqL1xuICByZWFkb25seSBzdWJmbG93UGF0aDogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKlxuICAgKiBUaGUgc2libGluZydzIG93biBzdWJmbG93IGNhcHR1cmVzIOKAlCB0aGUgc3ViZmxvd3Mgb24gSVRTIHBhdGggYmVsb3cgdGhlXG4gICAqIGZhbi1vdXQuIFRoZSBzdWJmbG93cyBhYm92ZSB0aGUgZmFuLW91dCBhcmUgc2hhcmVkIHdpdGggdGhlIGNoZWNrcG9pbnQnc1xuICAgKiBvd24gcGF1c2UgYW5kIGFyZSBjYXB0dXJlZCBhZ2FpbiB3aGVuIHRoaXMgcGF1c2UgaXMgcmFpc2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1N0YXRlczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuICAvKiogVGhlIHNpYmxpbmcncyBxdWVzdGlvbiAoYXMgYHBhdXNlRGF0YWApLiAqL1xuICByZWFkb25seSBwYXVzZURhdGE/OiB1bmtub3duO1xuICAvKiogSG93IHRoZSBzaWJsaW5nIHBhdXNlZCAoYXMgYHBhdXNlZEJ5YCkuICovXG4gIHJlYWRvbmx5IHBhdXNlZEJ5PzogJ2ludGVycnVwdCc7XG4gIC8qKiBXaGljaCBleGVjdXRpb24gdGhlIHNpYmxpbmcgcGF1c2VkIGluIChhcyBgcGF1c2VkRXhlY3V0aW9uYCwgOS4zNy4wKSDigJQga2VwdCBzbyBpdHMgb3duIHJlc3VtZSBsaW5rcyB0byBpdC4gKi9cbiAgcmVhZG9ubHkgcGF1c2VkRXhlY3V0aW9uPzogUGF1c2VkRXhlY3V0aW9uO1xuICAvKiogVGhlIGlkZW1wb3RlbmN5IGtleSB0aGUgc2libGluZydzIGV4ZWN1dGlvbiByYW4gdW5kZXIgKGFzIGBpZGVtcG90ZW5jeUtleWAsIDEwLjEpLiAqL1xuICByZWFkb25seSBpZGVtcG90ZW5jeUtleT86IHN0cmluZztcbn1cblxuLyoqIEEgcGVuZGluZyBwYXVzZSB3aG9zZSBwYXRoIHN0aWxsIGdyb3dzIGFzIGl0cyBzaWduYWwgYnViYmxlcyB1cCAoaW50ZXJuYWwpLiAqL1xuLyoqXG4gKiBUaGUgc2lnbmFsJ3Mgb3duIGNvcHkgb2YgYSBwZW5kaW5nIHBhdXNlLiBJdHMgYHBhdXNlZEV4ZWN1dGlvbmAgbWF5IHN0aWxsXG4gKiBsYWNrIHRoZSBydW4gKGEgc2libGluZyB0aGF0IHBhdXNlZCBpbiBUSElTIHJ1bikgdW50aWwgYGNvbXBsZXRlRXhlY3V0aW9uYC5cbiAqL1xudHlwZSBNdXRhYmxlUGVuZGluZ1BhdXNlID0gT21pdDxQZW5kaW5nUGF1c2UsICdzdWJmbG93UGF0aCcgfCAncGF1c2VkRXhlY3V0aW9uJz4gJiB7XG4gIHN1YmZsb3dQYXRoOiBzdHJpbmdbXTtcbiAgcGF1c2VkRXhlY3V0aW9uPzogeyBydW50aW1lU3RhZ2VJZDogc3RyaW5nOyBydW5JZD86IHN0cmluZyB9O1xufTtcblxuLy8g4pSA4pSAIFBhdXNlUmVzdWx0IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFJldHVybmVkIGJ5IGEgcGF1c2FibGUgc3RhZ2UncyBleGVjdXRlL3Jlc3VtZSBmdW5jdGlvbiB0byBzaWduYWwgcGF1c2UuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGV4ZWN1dGU6IGFzeW5jIChzY29wZSkgPT4ge1xuICogICBzY29wZS5vcmRlcklkID0gJzEyMyc7XG4gKiAgIHJldHVybiB7IHBhdXNlOiB0cnVlLCBkYXRhOiB7IHF1ZXN0aW9uOiAnQXBwcm92ZSBvcmRlciAxMjM/JyB9IH07XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXVzZVJlc3VsdCB7XG4gIHJlYWRvbmx5IHBhdXNlOiB0cnVlO1xuICAvKiogRGF0YSB0byBpbmNsdWRlIGluIHRoZSBjaGVja3BvaW50IOKAlCBxdWVzdGlvbiwgcmVhc29uLCBtZXRhZGF0YS4gKi9cbiAgcmVhZG9ubHkgZGF0YT86IHVua25vd247XG59XG5cbi8vIOKUgOKUgCBGbG93Y2hhcnRDaGVja3BvaW50IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFNlcmlhbGl6YWJsZSBjaGVja3BvaW50IOKAlCBldmVyeXRoaW5nIG5lZWRlZCB0byByZXN1bWUgYSBwYXVzZWQgZmxvd2NoYXJ0LFxuICogYW5kIG5vdGhpbmcgYSByZXN1bWUgbmV2ZXIgcmVhZHMuXG4gKlxuICogTEVBTiAoZm9ybWF0IDIpOiBpdHMgc2l6ZSBpcyB0aGUgU1RBVEUncywgbmV2ZXIgdGhlIHJ1bidzIGxlbmd0aC4gVGhlIGN1cnNvclxuICogaXMgYHBhdXNlZFN0YWdlSWRgICsgYHN1YmZsb3dQYXRoYDsgdGhlIHN0YXRlIGlzIGBzaGFyZWRTdGF0ZWAgcGx1cyB0aGVcbiAqIGNhcHR1cmVzIG9mIHRoZSBzdWJmbG93cyBvbiB0aGF0IHBhdGggKGBzdWJmbG93U3RhdGVzYCkuIFRoZSBydW4ncyBoaXN0b3J5IOKAlFxuICogdGhlIGV4ZWN1dGlvbiB0cmVlLCB0aGUgZmluaXNoZWQgc3ViZmxvd3MnIHJlc3VsdHMsIHRoZSBjb21taXQgbG9nIOKAlCBpcyBub3RcbiAqIGhlcmU6IHJlYWQgaXQgZnJvbSBgZXhlY3V0b3IuZ2V0U25hcHNob3QoKWAgYmVmb3JlIGByZXN1bWUoKWAgKGZvcm1hdCAxXG4gKiBjYXJyaWVkIGBleGVjdXRpb25UcmVlYCBhbmQgYHN1YmZsb3dSZXN1bHRzYDsgbm8gcmVzdW1lIHJlYWQgdGhlbSkuXG4gKlxuICogSlNPTi1zYWZlOiBubyBmdW5jdGlvbnMsIG5vIGNsYXNzIGluc3RhbmNlcywgbm8gU0RLIGNsaWVudHMuXG4gKiBTdG9yZSBhbnl3aGVyZTogUmVkaXMsIFBvc3RncmVzLCBsb2NhbFN0b3JhZ2UsIGEgZmlsZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgY2hlY2twb2ludCA9IGV4ZWN1dG9yLmdldENoZWNrcG9pbnQoKTsgLy8gYWZ0ZXIgcGF1c2VcbiAqIGF3YWl0IHJlZGlzLnNldChgc2Vzc2lvbjoke2lkfWAsIEpTT04uc3RyaW5naWZ5KGNoZWNrcG9pbnQpKTtcbiAqXG4gKiAvLyBSZXN1bWUgKGhvdXJzIGxhdGVyLCBwb3NzaWJseSBkaWZmZXJlbnQgc2VydmVyKVxuICogY29uc3QgY2hlY2twb2ludCA9IEpTT04ucGFyc2UoYXdhaXQgcmVkaXMuZ2V0KGBzZXNzaW9uOiR7aWR9YCkpO1xuICogY29uc3QgZXhlY3V0b3IgPSBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQpO1xuICogYXdhaXQgZXhlY3V0b3IucmVzdW1lKGNoZWNrcG9pbnQsIHsgYXBwcm92ZWQ6IHRydWUgfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93Y2hhcnRDaGVja3BvaW50IHtcbiAgLyoqXG4gICAqIFRoZSBjaGVja3BvaW50IEZPUk1BVDogYDJgLCB0aGUgbGVhbiBjaGVja3BvaW50IChgMWAgZnJvbSA5LjM5LjA7IGFic2VudFxuICAgKiBiZWZvcmUpLiBgcmVzdW1lKClgIHJlYWRzIGV2ZXJ5IG9sZGVyIG9uZSB0aHJvdWdoIHRoZSBvbmUgdXBjYXN0ZXJcbiAgICogKGBwYXVzZS9yZWNvcmQudHMgwrcgdXBjYXN0Q2hlY2twb2ludGApLCB3aGljaCBkcm9wcyB3aGF0IGxhdGVyIGZvcm1hdHNcbiAgICogZHJvcHBlZCDigJQgZm9ybWF0IDEncyBgZXhlY3V0aW9uVHJlZWAgYW5kIGBzdWJmbG93UmVzdWx0c2AsIHRoZSBsZWdhY3lcbiAgICogYGNvbnRpbnVhdGlvblN0YWdlSWRgIOKAlCBub25lIG9mIHdoaWNoIGEgcmVzdW1lIGV2ZXIgcmVhZC4gQSB2ZXJzaW9uIHRoaXNcbiAgICogcmVsZWFzZSBkb2VzIG5vdCBrbm93IGlzIHJlZnVzZWQuXG4gICAqL1xuICByZWFkb25seSBjaGVja3BvaW50VmVyc2lvbj86IDI7XG5cbiAgLyoqIFNjb3BlIHN0YXRlIGF0IHRoZSBwYXVzZSBwb2ludCDigJQgYWxsIHNoYXJlZCBtZW1vcnkga2V5L3ZhbHVlcy4gKi9cbiAgcmVhZG9ubHkgc2hhcmVkU3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8qKiBJRCBvZiB0aGUgc3RhZ2UgdGhhdCBwYXVzZWQuIFVzZWQgYnkgcmVzdW1lKCkgdG8gZmluZCB0aGUgbm9kZSBpbiB0aGUgZ3JhcGguICovXG4gIHJlYWRvbmx5IHBhdXNlZFN0YWdlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBhdXNlZCBFWEVDVVRJT04gKDkuMzcuMCk6IHRoZSBydW4gdGhhdCBwYXVzZWQgYW5kIHRoZSBwYXVzZWQgc3RhZ2Unc1xuICAgKiBydW50aW1lU3RhZ2VJZCBpbiBpdCAodGhlIGlkIGl0cyBgb25QYXVzZWAgZXZlbnQgYW5kIGl0cyBjb21taXQgY2FycnkpLlxuICAgKiBSZWFkIGJ5IGByZXN1bWUoKWAgaW50byB0aGUgYG9uUmVzdW1lYCBldmVudCdzIGB0cmF2ZXJzYWxDb250ZXh0LnJlc3VtZWRGcm9tYFxuICAgKiBsaW5rIOKAlCBuZXZlciB1c2VkIHRvIHBsYW4gdGhlIHJlLWVudHJ5LiBBYnNlbnQgb24gYW4gb2xkZXIgY2hlY2twb2ludCxcbiAgICogd2hpY2ggdGhlbiByZXN1bWVzIHdpdGhvdXQgYSBsaW5rLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF1c2VkRXhlY3V0aW9uPzogUGF1c2VkRXhlY3V0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgaWRlbXBvdGVuY3kga2V5IHRoZSBwYXVzZWQgZXhlY3V0aW9uIHJhbiB1bmRlciAoMTAuMSkg4oCUIHByZXNlbnQgb25seSB3aGVuIHRoZSBwYXVzZWQgc3RhZ2UgYHRvdWNoZXNgIGFuXG4gICAqIG91dHNpZGUgc3lzdGVtIHdpdGggYSBrZXkgcnVsZS4gYHJlc3VtZSgpYCByZS1ydW5zIHRoZSBzdGFnZSAob3IgcnVucyBpdHMgYHJlc3VtZUZuYCkgdW5kZXIgVEhJUyBrZXksIG5ldmVyIGFcbiAgICogcmVjb21wdXRlZCBvbmU6IHRoZSBpbnB1dCB0aGUgcnVsZSByZWFkIGRvZXMgbm90IGNyb3NzIGEgcmVzdW1lLCBhbmQgYSBkaWZmZXJlbnQga2V5IG9uIHRoZSByZS1ydW4gd291bGQgbWFrZVxuICAgKiB0aGUgb3V0c2lkZSBzeXN0ZW0gYXBwbHkgdGhlIGVmZmVjdCB0d2ljZS4gQSByZWFsIHZhbHVlLCBsaWtlIGBzaGFyZWRTdGF0ZWAg4oCUIG5vIHJlZGFjdGlvbiBwb2xpY3kgdG91Y2hlcyB0aGVcbiAgICogY2hlY2twb2ludC4gQSBtYWxmb3JtZWQgb25lIGlzIHJlZnVzZWQgYXQgYHJlc3VtZSgpYC5cbiAgICovXG4gIHJlYWRvbmx5IGlkZW1wb3RlbmN5S2V5Pzogc3RyaW5nO1xuXG4gIC8qKiBQYXRoIHRocm91Z2ggc3ViZmxvd3MgdG8gdGhlIHBhdXNlZCBzdGFnZSAoZS5nLiwgWydzZi1wYXltZW50JywgJ3NmLXZhbGlkYXRpb24nXSkuXG4gICAqICBFbXB0eSBhcnJheSB3aGVuIHBhdXNlZCBhdCB0aGUgdG9wIGxldmVsLiAqL1xuICByZWFkb25seSBzdWJmbG93UGF0aDogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqIERhdGEgZnJvbSAkcGF1c2UoKSDigJQgcXVlc3Rpb24sIHJlYXNvbiwgbWV0YWRhdGEuICovXG4gIHJlYWRvbmx5IHBhdXNlRGF0YT86IHVua25vd247XG5cbiAgLyoqXG4gICAqIEhPVyB0aGUgcGF1c2Ugd2FzIHJhaXNlZC4gYCdpbnRlcnJ1cHQnYCBtZWFucyBhIHN0YWdlIGJvZHkgY2FsbGVkXG4gICAqIGBpbnRlcnJ1cHQoc2NvcGUsIHsgcmVhc29uLCBleHBlY3RzPyB9KWAgYW5kIGBwYXVzZURhdGFgIElTIHRoYXQgcGF5bG9hZDtcbiAgICogYWJzZW50IG1lYW5zIHRoZSBgYWRkUGF1c2FibGVGdW5jdGlvbmAgZXhlY3V0ZS9yZXN1bWUgcGF0aCAoZXZlcnlcbiAgICogY2hlY2twb2ludCB3cml0dGVuIGJlZm9yZSA5LjE0LjAgb21pdHMgaXQsIHdoaWNoIGlzIGV4YWN0bHkgcmlnaHQpLlxuICAgKlxuICAgKiBgcmVzdW1lKClgIHJlYWRzIHRoaXMgdG8gcGljayB0aGUgcmUtZW50cnksIGFuZCB0aGUgdHdvIGRpZmZlciBieSBsYXc6XG4gICAqIGFuIGludGVycnVwdGVkIHN0YWdlIFJFLVJVTlMgSVRTIE9XTiBGVU5DVElPTiBGUk9NIFRIRSBUT1AgKHN0YWdlcyBhcmVcbiAgICogYXRvbWljIOKAlCB0aGUgYW5zd2VyIGNvbWVzIGJhY2sgb3V0IG9mIHRoZSBgaW50ZXJydXB0KClgIGNhbGwpLCB3aGlsZSBhXG4gICAqIHBhdXNhYmxlIHN0YWdlIHJ1bnMgaXRzIHNlcGFyYXRlIGByZXN1bWVGbmAuXG4gICAqL1xuICByZWFkb25seSBwYXVzZWRCeT86ICdpbnRlcnJ1cHQnO1xuXG4gIC8qKlxuICAgKiBTdWJmbG93IHNjb3BlIGNhcHR1cmUg4oCUIG9uZSBlbnRyeSBwZXIgc3ViZmxvdyBib3VuZGFyeSBvbiB0aGUgcGF0aFxuICAgKiB0byB0aGUgcGF1c2VkIHN0YWdlLiBLZXllZCBieSBwYXRoLXByZWZpeGVkIHN1YmZsb3cgaWQgKG1hdGNoZXNcbiAgICogYHN1YmZsb3dQYXRoYCBlbnRyaWVzKS4gRWFjaCB2YWx1ZSBpcyB0aGUgc3ViZmxvdydzIHByZS1wYXVzZVxuICAgKiBzaGFyZWQgc3RhdGUuXG4gICAqXG4gICAqIEFsd2F5cyBwcmVzZW50IChlbXB0eSBge31gIGZvciByb290LWxldmVsIHBhdXNlcyB3aGVyZSBubyBzdWJmbG93c1xuICAgKiB3ZXJlIGVudGVyZWQpLiBPbiByZXN1bWUsIGBTdWJmbG93RXhlY3V0b3JgIHNlZWRzIGVhY2ggbmVzdGVkIHJ1bnRpbWVcbiAgICogb24gdGhlIHBhdGggZnJvbSB0aGlzIG1hcCDigJQgT05DRSwgb24gaXRzIGZpcnN0IGVudHJ5LCBpbiBwbGFjZSBvZiB0aGVcbiAgICogaW5wdXRNYXBwZXIncyB2YWx1ZXMgKHRoZSBtYXBwZXIgc3RpbGwgcnVucywgZm9yIHRoZSBzdGFnZXMnIHJlYWQtb25seVxuICAgKiBhcmdzKSDigJQgc28gcmVzdW1lIGhhbmRsZXJzIHNlZSBwcmUtcGF1c2Ugc2NvcGUgYWNyb3NzIHNhbWUtZXhlY3V0b3IgQU5EXG4gICAqIGNyb3NzLWV4ZWN1dG9yIHJlc3RhcnRzLiBPbmx5IHRoZSBzdWJmbG93cyBPTiBgc3ViZmxvd1BhdGhgIHJlYWQgaXQuXG4gICAqL1xuICByZWFkb25seSBzdWJmbG93U3RhdGVzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG5cbiAgLyoqXG4gICAqIFRoZSBzaGFyZWQgZXhlY3V0aW9uIGNvdW50ZXIgYXQgdGhlIG1vbWVudCBvZiBwYXVzZSDigJQgdGhlIG51bWJlciBvZiBzdGFnZXNcbiAgICogZXhlY3V0ZWQgc28gZmFyIHRoaXMgcnVuLiBSZXN1bWUgc2VlZHMgaXQgc28gcG9zdC1yZXN1bWUgYHJ1bnRpbWVTdGFnZUlkYHNcbiAgICogKGBzdGFnZUlkI2V4ZWN1dGlvbkluZGV4YCkga2VlcCBjbGltYmluZyBhbmQgbmV2ZXIgY29sbGlkZSB3aXRoIHByZS1wYXVzZVxuICAgKiBvbmVzLCB3aGljaCBpcyB3aGF0IHRoZSB3aG9sZSBldmVudC1jb3JyZWxhdGlvbiBtb2RlbCByZXN0cyBvbi5cbiAgICpcbiAgICogT3B0aW9uYWwgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6IGEgY2hlY2twb2ludCBwZXJzaXN0ZWQgYmVmb3JlIHRoaXNcbiAgICogZmllbGQgZXhpc3RlZCAob2xkZXIgUmVkaXMvUG9zdGdyZXMgcm93cykgc3RpbGwgdmFsaWRhdGVzIGFuZCByZXN1bWVzIHdpdGhcbiAgICogdGhlIHByZXZpb3VzIChjb3VudGVyLXJlc3RhcnRpbmcpIGJlaGF2aW9yLlxuICAgKi9cbiAgcmVhZG9ubHkgZXhlY3V0aW9uQ291bnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFBlci1gc3RhZ2VJZGAgbG9vcCB2aXNpdCBjb3VudHMgYXQgdGhlIG1vbWVudCBvZiBwYXVzZS4gUmVzdW1lIHNlZWRzIHRoZW1cbiAgICogc28gYFRyYXZlcnNhbENvbnRleHQubG9vcEl0ZXJhdGlvbmAgc3RheXMgY29udGludW91cyBhY3Jvc3MgdGhlIHBhdXNlIChhXG4gICAqIG1pZC1sb29wIHJlc3VtZSBrZWVwcyBjb3VudGluZyB1cCwgbm90IHJlc3RhcnRpbmcgYXQgMCkgYW5kIHRoZVxuICAgKiBDb250aW51YXRpb25SZXNvbHZlciBpdGVyYXRpb24gYnVkZ2V0IGlzIG5vdCBzaWxlbnRseSByZWZpbGxlZC5cbiAgICpcbiAgICogT3B0aW9uYWwgZm9yIHRoZSBzYW1lIGJhY2t3YXJkLWNvbXBhdGliaWxpdHkgcmVhc29uIGFzIGBleGVjdXRpb25Db3VudGAuXG4gICAqL1xuICByZWFkb25seSB2aXNpdENvdW50cz86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIG51bWJlcj4+O1xuXG4gIC8qKiBTdGFnZSB0aGF0IGludm9rZWQgdGhlIHBhdXNlZCBjaGlsZCAoZGVjaWRlciwgc2VsZWN0b3IsIGZvcmspLiBBYnNlbnQgZm9yIGxpbmVhciBwYXVzZXMuICovXG4gIHJlYWRvbmx5IGludm9rZXJTdGFnZUlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXVzZXMgcmFpc2VkIGJ5IFBBUkFMTEVMIFNJQkxJTkdTIG9mIHRoZSBwYXVzZWQgc3RhZ2UgaW4gdGhlIHNhbWVcbiAgICogZmFuLW91dCwgd2FpdGluZyB0aGVpciB0dXJuICg5LjI4LjApIOKAlCBzZWUge0BsaW5rIFBlbmRpbmdQYXVzZX0uIEFic2VudFxuICAgKiB3aGVuIG9ubHkgb25lIGNoaWxkIHBhdXNlZCAoZXZlcnkgY2hlY2twb2ludCBiZWZvcmUgOS4yOC4wIG9taXRzIGl0LCBhbmRcbiAgICogcmVzdW1lcyBleGFjdGx5IGFzIGJlZm9yZSkuIFJlc3VtaW5nIHRoaXMgY2hlY2twb2ludCBmaW5pc2hlcyB0aGUgcGF1c2VkXG4gICAqIHN0YWdlJ3MgY2hpbGQsIHRoZW4gcGF1c2VzIGFnYWluIHdpdGggdGhlIGZpcnN0IG9mIHRoZXNlOyB0aGUgZmFuLW91dCdzXG4gICAqIGpvaW4gcnVucyBvbmNlIGV2ZXJ5IGNoaWxkIGlzIGRvbmUuXG4gICAqL1xuICByZWFkb25seSBwZW5kaW5nUGF1c2VzPzogcmVhZG9ubHkgUGVuZGluZ1BhdXNlW107XG5cbiAgLyoqXG4gICAqIFRoZSByZWRhY3Rpb24gbWFya3Mgb2YgdGhlIHBhdXNlZCBydW4g4oCUIE5BTUVTIG9ubHkgKHNlZVxuICAgKiB7QGxpbmsgUmVkYWN0aW9uTWFya3N9KS4gQWJzZW50IHdoZW4gdGhlIHJ1biBtYXJrZWQgbm90aGluZyAobm8gcG9saWN5XG4gICAqIGFuZCBubyBwZXItY2FsbCBtYXJrLCBvciBhbiBvbGRlciBjaGVja3BvaW50KTogdGhlIHJlc3VtZWQgcnVuIHRoZW4gc3RhcnRzXG4gICAqIGZyb20gaXRzIHBvbGljeSBhbG9uZS5cbiAgICovXG4gIHJlYWRvbmx5IHJlZGFjdGlvbk1hcmtzPzogUmVkYWN0aW9uTWFya3M7XG5cbiAgLyoqIFRpbWVzdGFtcCBvZiB3aGVuIHRoZSBwYXVzZSBvY2N1cnJlZC4gKi9cbiAgcmVhZG9ubHkgcGF1c2VkQXQ6IG51bWJlcjtcbn1cblxuLy8g4pSA4pSAIFBhdXNhYmxlSGFuZGxlciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBIYW5kbGVyIGZvciBhIHBhdXNhYmxlIHN0YWdlIOKAlCBoYXMgdHdvIHBoYXNlczogZXhlY3V0ZSBhbmQgcmVzdW1lLlxuICpcbiAqIGBleGVjdXRlYCBydW5zIHRoZSBmaXJzdCB0aW1lLiBSZXR1cm4gYW55IG5vbi12b2lkIHZhbHVlIHRvIHBhdXNlICh0aGF0IHZhbHVlXG4gKiBiZWNvbWVzIHRoZSBjaGVja3BvaW50J3MgYHBhdXNlRGF0YWApOyByZXR1cm4gdm9pZC91bmRlZmluZWQgdG8gY29udGludWUgbm9ybWFsbHkuXG4gKiBgcmVzdW1lYCBydW5zIHdoZW4gdGhlIGZsb3djaGFydCBpcyByZXN1bWVkLiBJdCByZWNlaXZlcyB0aGUgcmVzdW1lIGlucHV0LlxuICpcbiAqIEJvdGggcGhhc2VzIHJlY2VpdmUgdGhlIHNhbWUgc2NvcGUuIEFmdGVyIGV4ZWN1dGUgcGF1c2VzLCB0aGUgc2NvcGUgc3RhdGVcbiAqIGlzIHByZXNlcnZlZCBpbiB0aGUgY2hlY2twb2ludC4gT24gcmVzdW1lLCB0aGUgc2NvcGUgaXMgcmVzdG9yZWQgYmVmb3JlXG4gKiBjYWxsaW5nIHJlc3VtZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLmFkZFBhdXNhYmxlRnVuY3Rpb24oJ0FwcHJvdmVPcmRlcicsIHtcbiAqICAgZXhlY3V0ZTogYXN5bmMgKHNjb3BlKSA9PiB7XG4gKiAgICAgc2NvcGUub3JkZXJJZCA9ICcxMjMnO1xuICogICAgIHNjb3BlLmFtb3VudCA9IDI5OTtcbiAqICAgICByZXR1cm4geyBxdWVzdGlvbjogYEFwcHJvdmUgJCR7c2NvcGUuYW1vdW50fSByZWZ1bmQ/YCB9O1xuICogICB9LFxuICogICByZXN1bWU6IGFzeW5jIChzY29wZSwgaW5wdXQpID0+IHtcbiAqICAgICBzY29wZS5hcHByb3ZlZCA9IGlucHV0LmFwcHJvdmVkO1xuICogICAgIHNjb3BlLmFwcHJvdmVyID0gaW5wdXQuYXBwcm92ZXI7XG4gKiAgIH0sXG4gKiB9LCAnYXBwcm92ZS1vcmRlcicsICdNYW5hZ2VyIGFwcHJvdmFsIGdhdGUnKVxuICpcbiAqIC8vIExhdGVyIOKAlCByZXN1bWUgd2l0aCBodW1hbidzIGFuc3dlclxuICogYXdhaXQgZXhlY3V0b3IucmVzdW1lKGNoZWNrcG9pbnQsIHsgYXBwcm92ZWQ6IHRydWUsIGFwcHJvdmVyOiAnSmFuZScgfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXVzYWJsZUhhbmRsZXI8VFNjb3BlID0gYW55LCBUSW5wdXQgPSB1bmtub3duLCBUUGF1c2VEYXRhID0gdW5rbm93bj4ge1xuICAvKipcbiAgICogRmlyc3QtcnVuIHBoYXNlLiBSZXR1cm4gZGF0YSB0byBwYXVzZSwgb3Igdm9pZC91bmRlZmluZWQgdG8gY29udGludWUgbm9ybWFsbHkuXG4gICAqXG4gICAqIEFueSBub24tdm9pZCByZXR1cm4gdmFsdWUgYmVjb21lcyB0aGUgYHBhdXNlRGF0YWAgaW4gdGhlIGNoZWNrcG9pbnQuXG4gICAqIFRoZSBjb25zdW1lciBkZWZpbmVzIHRoZSBgVFBhdXNlRGF0YWAgdHlwZSDigJQgdGhlIEZFIHVzZXMgaXQgdG8gcmVuZGVyXG4gICAqIHRoZSByaWdodCBVSSAoZm9ybSBmaWVsZHMsIGFwcHJvdmFsIGJ1dHRvbnMsIGV0Yy4pLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIFRQYXVzZURhdGEgPSB7IHF1ZXN0aW9uOiBzdHJpbmc7IHJpc2tMZXZlbDogc3RyaW5nIH1cbiAgICogY29uc3QgaGFuZGxlcjogUGF1c2FibGVIYW5kbGVyPE15U3RhdGUsIHsgYXBwcm92ZWQ6IGJvb2xlYW4gfSwgeyBxdWVzdGlvbjogc3RyaW5nOyByaXNrTGV2ZWw6IHN0cmluZyB9PiA9IHtcbiAgICogICBleGVjdXRlOiBhc3luYyAoc2NvcGUpID0+IHtcbiAgICogICAgIHJldHVybiB7IHF1ZXN0aW9uOiBgQXBwcm92ZSBvcmRlciAke3Njb3BlLm9yZGVySWR9P2AsIHJpc2tMZXZlbDogJ2hpZ2gnIH07XG4gICAqICAgfSxcbiAgICogICByZXN1bWU6IGFzeW5jIChzY29wZSwgaW5wdXQpID0+IHtcbiAgICogICAgIHNjb3BlLmFwcHJvdmVkID0gaW5wdXQuYXBwcm92ZWQ7XG4gICAqICAgfSxcbiAgICogfTtcbiAgICogYGBgXG4gICAqL1xuICBleGVjdXRlOiAoc2NvcGU6IFRTY29wZSkgPT4gUHJvbWlzZTxUUGF1c2VEYXRhIHwgdm9pZD4gfCBUUGF1c2VEYXRhIHwgdm9pZDtcbiAgLyoqXG4gICAqIFJlc3VtZSBwaGFzZS4gQ2FsbGVkIHdpdGggdGhlIHJlc3VtZSBpbnB1dCB3aGVuIGV4ZWN1dGlvbiBjb250aW51ZXMuXG4gICAqXG4gICAqIFRoZSBzY29wZSBpcyByZXN0b3JlZCBmcm9tIHRoZSBjaGVja3BvaW50J3MgYHNoYXJlZFN0YXRlYC4gV3JpdGVzIGR1cmluZ1xuICAgKiBgcmVzdW1lYCBhcmUgY29tbWl0dGVkIGFuZCB2aXNpYmxlIHRvIHN1YnNlcXVlbnQgc3RhZ2VzLlxuICAgKi9cbiAgcmVzdW1lOiAoc2NvcGU6IFRTY29wZSwgaW5wdXQ6IFRJbnB1dCkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG59XG5cbi8vIOKUgOKUgCBUeXBlIGd1YXJkIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogQ2hlY2sgaWYgYSB2YWx1ZSBpcyBhIFBhdXNlUmVzdWx0IChzdGFnZSB3YW50cyB0byBwYXVzZSkuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQYXVzZVJlc3VsdCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFBhdXNlUmVzdWx0IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgKHZhbHVlIGFzIFBhdXNlUmVzdWx0KS5wYXVzZSA9PT0gdHJ1ZTtcbn1cblxuLyoqIENoZWNrIGlmIGFuIGVycm9yIGlzIGEgUGF1c2VTaWduYWwuIFVzZXMgaW5zdGFuY2VvZiArIG5hbWUgYnJhbmQgZmFsbGJhY2sgZm9yIGNyb3NzLXJlYWxtIHNhZmV0eS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BhdXNlU2lnbmFsKGVycm9yOiB1bmtub3duKTogZXJyb3IgaXMgUGF1c2VTaWduYWwge1xuICAvLyBUb3RhbDogYSBQcm94eSB3aG9zZSBgZ2V0UHJvdG90eXBlT2ZgIHRyYXAgdGhyb3dzIChvciBhIHJldm9rZWQgUHJveHkpXG4gIC8vIGlzIG5vdCBhIHNpZ25hbCDigJQgdGhlIGVuZ2luZSdzIGNhdGNoIGJsb2NrcyBhc2sgdGhpcyBmaXJzdCwgYW5kIG11c3RcbiAgLy8gbm90IHRyYWRlIHRoZSBzdGFnZSdzIHRocm93biB2YWx1ZSBmb3IgdGhlIHRyYXAncyBlcnJvci5cbiAgdHJ5IHtcbiAgICByZXR1cm4gKFxuICAgICAgZXJyb3IgaW5zdGFuY2VvZiBQYXVzZVNpZ25hbCB8fFxuICAgICAgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiZcbiAgICAgICAgZXJyb3IubmFtZSA9PT0gJ1BhdXNlU2lnbmFsJyAmJlxuICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXJyb3IsICdwYXVzZURhdGEnKSAmJlxuICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXJyb3IsICdzdGFnZUlkJykpXG4gICAgKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXX0=
263
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3BhdXNlL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZCRztBQTRCSCw4RUFBOEU7QUFDOUUsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEtBQWM7SUFDOUMsTUFBTSxDQUFDLEdBQUcsS0FBeUUsQ0FBQztJQUNwRixPQUFPLENBQ0wsT0FBTyxDQUFDLEVBQUUsS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUUsSUFBSSxPQUFPLENBQUMsQ0FBQyxjQUFjLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxjQUFjLEtBQUssRUFBRSxDQUNsSCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sT0FBTyxXQUFZLFNBQVEsS0FBSztJQUNwQyx1REFBdUQ7SUFDOUMsU0FBUyxDQUFVO0lBQzVCLDRDQUE0QztJQUNuQyxPQUFPLENBQVM7SUFDekI7Ozs7Ozs7T0FPRztJQUNNLFFBQVEsQ0FBZTtJQUNoQyx5RUFBeUU7SUFDakUsWUFBWSxDQUFXO0lBRS9COzs7Ozs7Ozs7T0FTRztJQUNLLGVBQWUsQ0FBVTtJQUVqQzs7Ozs7Ozs7Ozs7T0FXRztJQUNLLGNBQWMsR0FBNEMsRUFBRSxDQUFDO0lBRXJFOzs7Ozs7O09BT0c7SUFDSyxjQUFjLEdBQTBCLEVBQUUsQ0FBQztJQUVuRDs7OztPQUlHO0lBQ0ssZ0JBQWdCLENBQThDO0lBRXRFLDRHQUE0RztJQUNwRyxlQUFlLENBQVU7SUFFakMsWUFBWSxJQUFhLEVBQUUsT0FBZSxFQUFFLFFBQXNCO1FBQ2hFLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDO1FBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUks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QyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQYXVzZS9SZXN1bWUg4oCUIHNlcmlhbGl6YWJsZSBjaGVja3BvaW50IGZvciBsb25nLXJ1bm5pbmcgb3IgaHVtYW4taW4tdGhlLWxvb3AgZmxvd3MuXG4gKlxuICogQSBzdGFnZSBzaWduYWxzIHBhdXNlIGJ5IGNhbGxpbmcgYHNjb3BlLiRwYXVzZShkYXRhKWAgd2hpY2ggdGhyb3dzIGEgUGF1c2VTaWduYWwuXG4gKiBUaGUgc2lnbmFsIGJ1YmJsZXMgdXAgdGhyb3VnaCBTdWJmbG93RXhlY3V0b3Ig4oaSIEZsb3djaGFydFRyYXZlcnNlciDihpIgRmxvd0NoYXJ0RXhlY3V0b3IsXG4gKiBlYWNoIGxldmVsIGFkZGluZyBpdHMgc3ViZmxvdyBJRCB0byB0aGUgcGF0aC5cbiAqXG4gKiBUaGUgY2hlY2twb2ludCBjYXB0dXJlcyB3aGF0IGEgcmVzdW1lIHJlYWRzLCBhbmQgdGhlIHBhdXNlJ3Mgb3duIHJlY29yZCDigJRcbiAqIG5ldmVyIHRoZSBydW4ncyBoaXN0b3J5ICh0aGF0IGlzIGBnZXRTbmFwc2hvdCgpYCdzKTpcbiAqICAgLSBwYXVzZWRTdGFnZUlkICsgc3ViZmxvd1BhdGggKCsgcGF1c2VkQnkpOiB0aGUgY3Vyc29yXG4gKiAgIC0gc2hhcmVkU3RhdGUgKyBzdWJmbG93U3RhdGVzOiB0aGUgc3RhdGUgYXQgdGhlIHBhdXNlIOKAlCB0aGUgcm9vdCdzLCBhbmRcbiAqICAgICBlYWNoIHN1YmZsb3cncyBvbiB0aGUgcGF1c2UgcGF0aFxuICogICAtIGV4ZWN1dGlvbkNvdW50ICsgdmlzaXRDb3VudHM6IHRoZSBjb3VudGVycyB0aGUgcmVzdW1lZCBydW4gY29udGludWVzXG4gKiAgIC0gcGVuZGluZ1BhdXNlcywgcmVkYWN0aW9uTWFya3M6IHdhaXRpbmcgc2libGluZ3MsIHJlZGFjdGlvbiBuYW1lc1xuICogICAtIHBhdXNlRGF0YSwgcGF1c2VkRXhlY3V0aW9uLCBpbnZva2VyU3RhZ2VJZCwgcGF1c2VkQXQ6IHRoZSByZWNvcmRcbiAqXG4gKiBSZXN1bWUgcmVidWlsZHMgdGhlIGZsb3djaGFydCwgcmVzdG9yZXMgc2NvcGUsIG5hdmlnYXRlcyB0byB0aGUgcGF1c2VkIHN0YWdlLFxuICogaW5qZWN0cyByZXN1bWVJbnB1dCwgYW5kIGNvbnRpbnVlcyB0cmF2ZXJzYWwuXG4gKlxuICogU3VwcG9ydGVkIHRvcG9sb2dpZXM6IGxpbmVhciwgc3ViZmxvdyAoYXQgYW55IGRlcHRoIOKAlCBtb3VudGVkIGxpbmVhcmx5LCBhcyBhXG4gKiBkZWNpZGVyIG9yIHNlbGVjdG9yIGJyYW5jaCwgb3IgYXMgYSBmb3JrIGNoaWxkKSwgbG9vcCwgbmVzdGVkIHN1YmZsb3cgaW5cbiAqIGxvb3AsIGFuZCBzZXZlcmFsIHBhcmFsbGVsIHNpYmxpbmdzIHBhdXNpbmcgaW4gb25lIGZhbi1vdXQgKGVhY2ggYXNrcyBpblxuICogdHVybiDigJQgYEZsb3djaGFydENoZWNrcG9pbnQucGVuZGluZ1BhdXNlc2ApLlxuICpcbiAqIE5PVCByZXN1bWFibGUgeWV0OiBhIHBhdXNlIGluc2lkZSBhIExBWlkgc3ViZmxvdyAoYGFkZExhenlTdWJGbG93Q2hhcnQqYCkgb3JcbiAqIGluc2lkZSBhbiBgYWRkUGFyYWxsZWxGb3JFYWNoYCBicmFuY2guIFRoZWlyIGdyYXBocyBhcmUgcmVzb2x2ZWQgYXQgcnVuIHRpbWVcbiAqIGFuZCBhcmUgbm90IGluIHRoZSBjaGFydCBhIHJlc3VtZSB3YWxrcywgc28gYHJlc3VtZSgpYCByZWZ1c2VzIHRoZVxuICogY2hlY2twb2ludCAoXCJub3QgZm91bmRcIikgaW5zdGVhZCBvZiBndWVzc2luZy4gUGlubmVkIGluXG4gKiB0ZXN0L2xpYi9wYXVzZS9yZXN1bWUta25vd24tbGltaXRhdGlvbnMudGVzdC50cy5cbiAqL1xuXG4vLyDilIDilIAgUGF1c2VTaWduYWwg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogVGhlIHBhdXNlZCBFWEVDVVRJT04gKDkuMzcuMCk6IHRoZSBydW4gdGhhdCBwYXVzZWQgYW5kIHRoZSBwYXVzZWQgc3RhZ2Unc1xuICogcnVudGltZVN0YWdlSWQgaW4gaXQuIFJlY29yZGVkIG9uIHRoZSBjaGVja3BvaW50IChhbmQgb24gZWFjaCBxdWV1ZWRcbiAqIHNpYmxpbmcncyBwZW5kaW5nIHJlY29yZCkgc28gYSByZXN1bWUgY2FuIExJTksgdG8gaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGF1c2VkRXhlY3V0aW9uIHtcbiAgcmVhZG9ubHkgcnVuSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcnVudGltZVN0YWdlSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcmVkYWN0aW9uIGEgcGF1c2UgY2FycmllcyB0byB0aGUgcmVzdW1lZCBydW4g4oCUIE5BTUVTIG9ubHksIG5ldmVyIGEgdmFsdWVcbiAqICh0aGUgY2hlY2twb2ludCBzdGF5cyByZWFsKTogdGhlIGtleXMgbWFya2VkIHNlY3JldCBmb3IgdGhlIHJlc3Qgb2YgdGhlIHJ1blxuICogKGEgcGVyLWNhbGwgYHNldFZhbHVlKGtleSwgdmFsdWUsIHRydWUpYCwgYSBrZXkgdGhlIHBvbGljeSByZWRhY3RlZCB3aG9sZSwgYVxuICogc3ViZmxvdyBtYXBwZXIncyB0YWludCkgYW5kIHRoZSBmaWVsZHMgYSBtYXBwZXIgaGFuZGVkIHRvIGEgbmV3IGtleS4gUmVzdW1lXG4gKiBzZWVkcyB0aGUgcmVzdW1lZCBydW4ncyBydWxlIHdpdGggdGhlbSwgc28gYSBjb3B5IG1hZGUgYmVmb3JlIHRoZSBwYXVzZSBpc1xuICogc3RpbGwgbWFza2VkIGFmdGVyIGl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZGFjdGlvbk1hcmtzIHtcbiAgcmVhZG9ubHkga2V5czogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKiBLZXkg4oaSIHRoZSBmaWVsZCBwYXRocyBhIG1hcHBlciBoYW5kZWQgaXQuIEFic2VudCB3aGVuIG5vbmUuICovXG4gIHJlYWRvbmx5IGZpZWxkcz86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHJlYWRvbmx5IHN0cmluZ1tdPj47XG59XG5cbi8qKiBUcnVlIGZvciBhIHdlbGwtZm9ybWVkIHtAbGluayBQYXVzZWRFeGVjdXRpb259ICh0d28gbm9uLWVtcHR5IHN0cmluZ3MpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGF1c2VkRXhlY3V0aW9uKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUGF1c2VkRXhlY3V0aW9uIHtcbiAgY29uc3QgdiA9IHZhbHVlIGFzIHsgcnVuSWQ/OiB1bmtub3duOyBydW50aW1lU3RhZ2VJZD86IHVua25vd24gfSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHY/LnJ1bklkID09PSAnc3RyaW5nJyAmJiB2LnJ1bklkICE9PSAnJyAmJiB0eXBlb2Ygdi5ydW50aW1lU3RhZ2VJZCA9PT0gJ3N0cmluZycgJiYgdi5ydW50aW1lU3RhZ2VJZCAhPT0gJydcbiAgKTtcbn1cblxuLyoqXG4gKiBUaHJvd24gYnkgYHNjb3BlLiRwYXVzZSgpYCB0byBzaWduYWwgdGhhdCBleGVjdXRpb24gc2hvdWxkIHN0b3BcbiAqIGFuZCBjcmVhdGUgYSBzZXJpYWxpemFibGUgY2hlY2twb2ludC5cbiAqXG4gKiBCdWJibGVzIHVwIHRocm91Z2ggU3ViZmxvd0V4ZWN1dG9yICh3aGljaCBwcmVwZW5kcyBzdWJmbG93IElEIHRvIHBhdGgpXG4gKiBhbmQgaXMgY2F1Z2h0IGJ5IEZsb3djaGFydFRyYXZlcnNlci9GbG93Q2hhcnRFeGVjdXRvci5cbiAqL1xuZXhwb3J0IGNsYXNzIFBhdXNlU2lnbmFsIGV4dGVuZHMgRXJyb3Ige1xuICAvKiogRGF0YSBmcm9tICRwYXVzZSgpIOKAlCBxdWVzdGlvbiwgcmVhc29uLCBtZXRhZGF0YS4gKi9cbiAgcmVhZG9ubHkgcGF1c2VEYXRhOiB1bmtub3duO1xuICAvKiogSUQgb2YgdGhlIHN0YWdlIHRoYXQgY2FsbGVkICRwYXVzZSgpLiAqL1xuICByZWFkb25seSBzdGFnZUlkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBIT1cgdGhlIHBhdXNlIHdhcyByYWlzZWQg4oCUIGAnaW50ZXJydXB0J2Agd2hlbiBhIHN0YWdlIGJvZHkgY2FsbGVkXG4gICAqIGBpbnRlcnJ1cHQoc2NvcGUsIHBheWxvYWQpYCwgYWJzZW50IGZvciB0aGUgYGFkZFBhdXNhYmxlRnVuY3Rpb25gXG4gICAqIGV4ZWN1dGUvcmVzdW1lIHBhdGguIFNldCBhdCB0aGUgc3RhZ2UgYm91bmRhcnkgKGBTdGFnZVJ1bm5lcmApLCBjYXJyaWVkXG4gICAqIG9udG8gdGhlIGNoZWNrcG9pbnQsIGFuZCByZWFkIGJ5IGByZXN1bWUoKWAgdG8gcGljayB0aGUgcmUtZW50cnk6IGFuXG4gICAqIGludGVycnVwdGVkIHN0YWdlIHJlLXJ1bnMgaXRzIE9XTiBmdW5jdGlvbiBmcm9tIHRoZSB0b3AgKHN0YWdlcyBhcmVcbiAgICogYXRvbWljKSwgYSBwYXVzYWJsZSBzdGFnZSBydW5zIGl0cyBgcmVzdW1lRm5gLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF1c2VkQnk/OiAnaW50ZXJydXB0JztcbiAgLyoqIFBhdGggdGhyb3VnaCBzdWJmbG93cyB0byB0aGUgcGF1c2VkIHN0YWdlLiBCdWlsdCBkdXJpbmcgYnViYmxlLXVwLiAqL1xuICBwcml2YXRlIF9zdWJmbG93UGF0aDogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEludm9rZXIgY29udGV4dCDigJQgZW5yaWNoZWQgZHVyaW5nIGJ1YmJsZS11cCB3aGVuIGEgUGF1c2VTaWduYWwgcGFzc2VzXG4gICAqIHRocm91Z2ggYSBkZWNpZGVyLCBzZWxlY3Rvciwgb3IgZm9yayBoYW5kbGVyLlxuICAgKlxuICAgKiBUaGUgaW52b2tlciBpcyB0aGUgc3RhZ2UgdGhhdCBjYWxsZWQgZXhlY3V0ZU5vZGUoKSBvbiB0aGUgcGF1c2VkIGNoaWxkLlxuICAgKiBDYXB0dXJlZCBkdXJpbmcgdHJhdmVyc2FsIChub3QgcmVjb25zdHJ1Y3RlZCBmcm9tIHRoZSB0cmVlKS4gKFRoZVxuICAgKiBpbnZva2VyJ3MgYC5uZXh0YCBpZCByb2RlIGJlc2lkZSBpdCB1bnRpbCA5LjM5LjAgYXNcbiAgICogYGNvbnRpbnVhdGlvblN0YWdlSWRgOyB3aGF0IHJ1bnMgYWZ0ZXIgYSByZXN1bWUgY29tZXMgZnJvbSB0aGUgY2hhcnRcbiAgICogc2luY2UgOS4yOC4wLCBzbyBpdCBpcyBubyBsb25nZXIgY2FycmllZC4pXG4gICAqL1xuICBwcml2YXRlIF9pbnZva2VyU3RhZ2VJZD86IHN0cmluZztcblxuICAvKipcbiAgICogU3ViZmxvdyBzY29wZSBjYXB0dXJlIOKAlCBwb3B1bGF0ZWQgZHVyaW5nIGJ1YmJsZS11cCBieVxuICAgKiBgU3ViZmxvd0V4ZWN1dG9yYCByaWdodCBiZWZvcmUgcmUtdGhyb3cuIEVhY2ggZW50cnkgaXMgb25lXG4gICAqIHN1YmZsb3cncyBwcmUtcGF1c2Ugc2hhcmVkIHN0YXRlLCBrZXllZCBieSB0aGUgcGF0aC1wcmVmaXhlZFxuICAgKiBzdWJmbG93IGlkIChtYXRjaGVzIGBzdWJmbG93UGF0aGApLlxuICAgKlxuICAgKiBXaXRob3V0IHRoaXMsIHRoZSBuZXN0ZWQgYFNoYXJlZE1lbW9yeWAgaXMgZ2FyYmFnZS1jb2xsZWN0ZWRcbiAgICogYmVmb3JlIHRoZSBjaGVja3BvaW50IGlzIGJ1aWx0LiBPbiByZXN1bWUsIHRoZSBpbm5lciBydW50aW1lIGlzXG4gICAqIHJlLWNyZWF0ZWQgZW1wdHkgYW5kIHJlc3VtZSBoYW5kbGVycyByZWFkaW5nIHByZS1wYXVzZSBzY29wZVxuICAgKiAoZS5nLiwgYW4gQWdlbnQncyBgc2NvcGUuaGlzdG9yeWAsIGBzY29wZS5wYXVzZWRUb29sQ2FsbElkYClcbiAgICogY3Jhc2ggd2l0aCBcIlggaXMgbm90IGl0ZXJhYmxlXCIgLyB1bmRlZmluZWQuXG4gICAqL1xuICBwcml2YXRlIF9zdWJmbG93U3RhdGVzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gPSB7fTtcblxuICAvKipcbiAgICogUGF1c2VzIHRoYXQgUEFSQUxMRUwgU0lCTElOR1MgcmFpc2VkIGluIHRoZSBzYW1lIGZhbi1vdXQgYXMgdGhpcyBvbmUsXG4gICAqIHdhaXRpbmcgdGhlaXIgdHVybiAoOS4yOC4wKS4gUmVjb3JkZWQgYnkgYENoaWxkcmVuRXhlY3V0b3JgIHdoZW4gbW9yZVxuICAgKiB0aGFuIG9uZSBjaGlsZCBvZiBhIGZvcmsgKG9yIG1vcmUgdGhhbiBvbmUgc2VsZWN0ZWQgYnJhbmNoKSBwYXVzZXM6IHRoZVxuICAgKiBmaXJzdCBwYXVzZSBpcyB0aGUgb25lIHRoYXQgaXMgYXNrZWQsIHRoZSBvdGhlcnMgcmlkZSBoZXJlIGluc3RlYWQgb2ZcbiAgICogYmVpbmcgZHJvcHBlZC4gRWFjaCBwYXRoIGlzIHJlbGF0aXZlIHRvIHdoZXJlIHRoZSBzaWduYWwgY3VycmVudGx5IGlzXG4gICAqIGFuZCBncm93cyB3aXRoIGl0IOKAlCBgcHJlcGVuZFN1YmZsb3dgIHByZXBlbmRzIHRvIGV2ZXJ5IGVudHJ5IHRvby5cbiAgICovXG4gIHByaXZhdGUgX3BlbmRpbmdQYXVzZXM6IE11dGFibGVQZW5kaW5nUGF1c2VbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBXSElDSCBleGVjdXRpb24gcGF1c2VkIOKAlCBpdHMgcnVudGltZVN0YWdlSWQgc3RhbXBlZCBvbmNlIGF0IHRoZSBzdGFnZVxuICAgKiBib3VuZGFyeSAoYFN0YWdlUnVubmVyYCksIGl0cyBydW4gYWRkZWQgd2hlbiB0aGUgY2hlY2twb2ludCBpcyBidWlsdFxuICAgKiAoYGNvbXBsZXRlRXhlY3V0aW9uYCksIG9yIGJvdGggY2FycmllZCBvdmVyIGZvciBhIHF1ZXVlZCBzaWJsaW5nLlxuICAgKi9cbiAgcHJpdmF0ZSBfcGF1c2VkRXhlY3V0aW9uPzogeyBydW50aW1lU3RhZ2VJZDogc3RyaW5nOyBydW5JZD86IHN0cmluZyB9O1xuXG4gIC8qKiBUaGUgcGF1c2VkIGV4ZWN1dGlvbidzIGlkZW1wb3RlbmN5IGtleSAoUDMpIOKAlCBhIHRvdWNoaW5nIHN0YWdlJ3MsIHN0YW1wZWQgb25jZSBhdCB0aGUgc3RhZ2UgYm91bmRhcnkuICovXG4gIHByaXZhdGUgX2lkZW1wb3RlbmN5S2V5Pzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IHVua25vd24sIHN0YWdlSWQ6IHN0cmluZywgcGF1c2VkQnk/OiAnaW50ZXJydXB0Jykge1xuICAgIHN1cGVyKCdFeGVjdXRpb24gcGF1c2VkJyk7XG4gICAgdGhpcy5uYW1lID0gJ1BhdXNlU2lnbmFsJztcbiAgICB0aGlzLnBhdXNlRGF0YSA9IGRhdGE7XG4gICAgdGhpcy5zdGFnZUlkID0gc3RhZ2VJZDtcbiAgICBpZiAocGF1c2VkQnkpIHRoaXMucGF1c2VkQnkgPSBwYXVzZWRCeTtcbiAgICB0aGlzLl9zdWJmbG93UGF0aCA9IFtdO1xuICAgIC8vIFBhdXNlU2lnbmFsIGlzIGNvbnRyb2wgZmxvdywgbm90IGEgcmVhbCBlcnJvciDigJQgc3RhY2sgdHJhY2UgaGFzIG5vIGRpYWdub3N0aWMgdmFsdWUuXG4gICAgdGhpcy5zdGFjayA9ICcnO1xuICB9XG5cbiAgZ2V0IHN1YmZsb3dQYXRoKCk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fc3ViZmxvd1BhdGg7XG4gIH1cblxuICAvKiogVGhlIHBhdXNlZCBleGVjdXRpb24gKGl0cyBydW4gYW5kIGBbcGF0aC9dc3RhZ2VJZCNOYCksIG9uY2UgYm90aCBhcmUga25vd24uICovXG4gIGdldCBwYXVzZWRFeGVjdXRpb24oKTogUGF1c2VkRXhlY3V0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBlID0gdGhpcy5fcGF1c2VkRXhlY3V0aW9uO1xuICAgIHJldHVybiBlPy5ydW5JZCAhPT0gdW5kZWZpbmVkID8geyBydW5JZDogZS5ydW5JZCwgcnVudGltZVN0YWdlSWQ6IGUucnVudGltZVN0YWdlSWQgfSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvcmQgd2hpY2ggRVhFQ1VUSU9OIHBhdXNlZC4gRmlyc3Qgc3RhbXAgd2luczogdGhlIHNpZ25hbCBidWJibGVzXG4gICAqIHRocm91Z2ggb3V0ZXIgYm91bmRhcmllcyB0aGF0IG11c3Qgbm90IG92ZXJ3cml0ZSBpdC4gVGhlIHN0YWdlIGJvdW5kYXJ5XG4gICAqIGtub3dzIG9ubHkgdGhlIHJ1bnRpbWVTdGFnZUlkOyBhIHF1ZXVlZCBzaWJsaW5nIHJhaXNlZCBhZ2FpbiBvbiByZXN1bWVcbiAgICogY2FycmllcyBib3RoIChpdCBwYXVzZWQgaW4gYW4gRUFSTElFUiBydW4pLlxuICAgKi9cbiAgc3RhbXBFeGVjdXRpb24ocnVudGltZVN0YWdlSWQ6IHN0cmluZywgcnVuSWQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcGF1c2VkRXhlY3V0aW9uICE9PSB1bmRlZmluZWQgfHwgIXJ1bnRpbWVTdGFnZUlkKSByZXR1cm47XG4gICAgdGhpcy5fcGF1c2VkRXhlY3V0aW9uID0geyBydW50aW1lU3RhZ2VJZCwgLi4uKHJ1bklkICE9PSB1bmRlZmluZWQgJiYgeyBydW5JZCB9KSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBpZGVtcG90ZW5jeSBrZXkgdGhlIHBhdXNlZCBleGVjdXRpb24gcmFuIHVuZGVyIChQMykg4oCUIGEgdG91Y2hpbmcgc3RhZ2Uncy4gSXQgcmlkZXMgdGhlIGNoZWNrcG9pbnQgc28gdGhlXG4gICAqIHJlc3VtZSByZS1ydW5zIHRoZSBzdGFnZSAob3IgaXRzIGByZXN1bWVGbmApIHVuZGVyIHRoZSBTQU1FIGtleTogdGhlIGlucHV0IGl0cyBydWxlIHJlYWQgZG9lcyBub3QgY3Jvc3MgYVxuICAgKiByZXN1bWUuIEZpcnN0IHN0YW1wIHdpbnMuXG4gICAqL1xuICBnZXQgaWRlbXBvdGVuY3lLZXkoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faWRlbXBvdGVuY3lLZXk7XG4gIH1cblxuICBzdGFtcElkZW1wb3RlbmN5S2V5KGtleTogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2lkZW1wb3RlbmN5S2V5ID09PSB1bmRlZmluZWQgJiYga2V5ICE9PSB1bmRlZmluZWQpIHRoaXMuX2lkZW1wb3RlbmN5S2V5ID0ga2V5O1xuICB9XG5cbiAgLyoqXG4gICAqIE5hbWUgdGhlIHJ1biBmb3IgZXZlcnkgcGF1c2Ugb24gdGhpcyBzaWduYWwgdGhhdCBwYXVzZWQgaW4gaXQg4oCUIHRoaXMgb25lXG4gICAqIGFuZCBpdHMgcXVldWVkIHNpYmxpbmdzIHRoYXQgZG8gbm90IGFscmVhZHkgY2FycnkgYSBydW4gKGEgc2libGluZyByYWlzZWRcbiAgICogYWdhaW4gb24gcmVzdW1lIGtlZXBzIHRoZSBydW4gaXQgcGF1c2VkIGluKS4gQ2FsbGVkIG9uY2UsIHdoZW4gdGhlXG4gICAqIGNoZWNrcG9pbnQgaXMgYnVpbHQuXG4gICAqL1xuICBjb21wbGV0ZUV4ZWN1dGlvbihydW5JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3BhdXNlZEV4ZWN1dGlvbiAmJiB0aGlzLl9wYXVzZWRFeGVjdXRpb24ucnVuSWQgPT09IHVuZGVmaW5lZCkgdGhpcy5fcGF1c2VkRXhlY3V0aW9uLnJ1bklkID0gcnVuSWQ7XG4gICAgZm9yIChjb25zdCBwZW5kaW5nIG9mIHRoaXMuX3BlbmRpbmdQYXVzZXMpIHtcbiAgICAgIGlmIChwZW5kaW5nLnBhdXNlZEV4ZWN1dGlvbiAmJiBwZW5kaW5nLnBhdXNlZEV4ZWN1dGlvbi5ydW5JZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHBlbmRpbmcucGF1c2VkRXhlY3V0aW9uID0geyBydW50aW1lU3RhZ2VJZDogcGVuZGluZy5wYXVzZWRFeGVjdXRpb24ucnVudGltZVN0YWdlSWQsIHJ1bklkIH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFByZXBlbmQgYSBzdWJmbG93IElEIHRvIHRoZSBwYXRoIChjYWxsZWQgZHVyaW5nIGJ1YmJsZS11cCkuIFRoZSBwZW5kaW5nXG4gICAqIHNpYmxpbmcgcGF1c2VzIHJpZGUgdGhlIHNhbWUgYm91bmRhcnksIHNvIHRoZWlyIHBhdGhzIGdyb3cgd2l0aCBpdC5cbiAgICovXG4gIHByZXBlbmRTdWJmbG93KHN1YmZsb3dJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fc3ViZmxvd1BhdGgudW5zaGlmdChzdWJmbG93SWQpO1xuICAgIGZvciAoY29uc3QgcGVuZGluZyBvZiB0aGlzLl9wZW5kaW5nUGF1c2VzKSBwZW5kaW5nLnN1YmZsb3dQYXRoLnVuc2hpZnQoc3ViZmxvd0lkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBRdWV1ZSBhIHBhcmFsbGVsIHNpYmxpbmcncyBwYXVzZSBiZWhpbmQgdGhpcyBvbmUgKGl0cyBwYXRoIHJlbGF0aXZlIHRvXG4gICAqIHRoaXMgc2lnbmFsJ3MgY3VycmVudCBsZXZlbCkuIENvcGllZCBpbjogdGhlIGVudHJ5IGlzIG93bmVkIGJ5IHRoZVxuICAgKiBzaWduYWwgZnJvbSBoZXJlIG9uLlxuICAgKi9cbiAgYWRkUGVuZGluZ1BhdXNlKHBhdXNlOiBQZW5kaW5nUGF1c2UpOiB2b2lkIHtcbiAgICB0aGlzLl9wZW5kaW5nUGF1c2VzLnB1c2goe1xuICAgICAgcGF1c2VkU3RhZ2VJZDogcGF1c2UucGF1c2VkU3RhZ2VJZCxcbiAgICAgIHN1YmZsb3dQYXRoOiBbLi4ucGF1c2Uuc3ViZmxvd1BhdGhdLFxuICAgICAgc3ViZmxvd1N0YXRlczogeyAuLi5wYXVzZS5zdWJmbG93U3RhdGVzIH0sXG4gICAgICAuLi4ocGF1c2UucGF1c2VEYXRhICE9PSB1bmRlZmluZWQgJiYgeyBwYXVzZURhdGE6IHBhdXNlLnBhdXNlRGF0YSB9KSxcbiAgICAgIC4uLihwYXVzZS5wYXVzZWRCeSAmJiB7IHBhdXNlZEJ5OiBwYXVzZS5wYXVzZWRCeSB9KSxcbiAgICAgIC4uLihwYXVzZS5wYXVzZWRFeGVjdXRpb24gJiZcbiAgICAgICAgdHlwZW9mIHBhdXNlLnBhdXNlZEV4ZWN1dGlvbi5ydW50aW1lU3RhZ2VJZCA9PT0gJ3N0cmluZycgJiYgeyBwYXVzZWRFeGVjdXRpb246IHsgLi4ucGF1c2UucGF1c2VkRXhlY3V0aW9uIH0gfSksXG4gICAgICAuLi4ocGF1c2UuaWRlbXBvdGVuY3lLZXkgIT09IHVuZGVmaW5lZCAmJiB7IGlkZW1wb3RlbmN5S2V5OiBwYXVzZS5pZGVtcG90ZW5jeUtleSB9KSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJhbGxlbCBzaWJsaW5ncycgcGF1c2VzIHdhaXRpbmcgYmVoaW5kIHRoaXMgb25lLCBpbiB0aGUgb3JkZXIgdGhleSB3aWxsXG4gICAqIGJlIGFza2VkLiBJbiBmbGlnaHQsIGEgc2libGluZyB0aGF0IHBhdXNlZCBpbiBUSElTIHJ1biBjYXJyaWVzIG9ubHkgaXRzXG4gICAqIHJ1bnRpbWVTdGFnZUlkOyBgY29tcGxldGVFeGVjdXRpb25gIChhdCBjaGVja3BvaW50IGJ1aWxkKSBhZGRzIHRoZSBydW4uXG4gICAqL1xuICBnZXQgcGVuZGluZ1BhdXNlcygpOiByZWFkb25seSBQZW5kaW5nUGF1c2VbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3BlbmRpbmdQYXVzZXMgYXMgcmVhZG9ubHkgUGVuZGluZ1BhdXNlW107XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBwYXVzZSBhcyBhIHtAbGluayBQZW5kaW5nUGF1c2V9IOKAlCB3aGF0IGBDaGlsZHJlbkV4ZWN1dG9yYCBxdWV1ZXNcbiAgICogYmVoaW5kIGEgc2libGluZydzIHBhdXNlIHdoZW4gYm90aCBwYXVzZWQgaW4gb25lIGZhbi1vdXQuXG4gICAqL1xuICB0b1BlbmRpbmdQYXVzZSgpOiBQZW5kaW5nUGF1c2Uge1xuICAgIC8vIEluIGZsaWdodCAoc2VlIGBwZW5kaW5nUGF1c2VzYCk6IHRoZSBydW4gaXMgYWRkZWQgYXQgY2hlY2twb2ludCBidWlsZC5cbiAgICByZXR1cm4gPFBlbmRpbmdQYXVzZT57XG4gICAgICBwYXVzZWRTdGFnZUlkOiB0aGlzLnN0YWdlSWQsXG4gICAgICBzdWJmbG93UGF0aDogWy4uLnRoaXMuX3N1YmZsb3dQYXRoXSxcbiAgICAgIHN1YmZsb3dTdGF0ZXM6IHsgLi4udGhpcy5fc3ViZmxvd1N0YXRlcyB9LFxuICAgICAgLi4uKHRoaXMucGF1c2VEYXRhICE9PSB1bmRlZmluZWQgJiYgeyBwYXVzZURhdGE6IHRoaXMucGF1c2VEYXRhIH0pLFxuICAgICAgLi4uKHRoaXMucGF1c2VkQnkgJiYgeyBwYXVzZWRCeTogdGhpcy5wYXVzZWRCeSB9KSxcbiAgICAgIC4uLih0aGlzLl9wYXVzZWRFeGVjdXRpb24gJiYgeyBwYXVzZWRFeGVjdXRpb246IHsgLi4udGhpcy5fcGF1c2VkRXhlY3V0aW9uIH0gfSksXG4gICAgICAuLi4odGhpcy5faWRlbXBvdGVuY3lLZXkgIT09IHVuZGVmaW5lZCAmJiB7IGlkZW1wb3RlbmN5S2V5OiB0aGlzLl9pZGVtcG90ZW5jeUtleSB9KSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIFRoZSBzdGFnZSB0aGF0IGludm9rZWQgdGhlIHBhdXNlZCBjaGlsZCAoZGVjaWRlciwgc2VsZWN0b3IsIGZvcmspLiAqL1xuICBnZXQgaW52b2tlclN0YWdlSWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faW52b2tlclN0YWdlSWQ7XG4gIH1cblxuICAvKipcbiAgICogU3RhbXAgdGhlIGludm9rZXIgY29udGV4dCBkdXJpbmcgYnViYmxlLXVwLlxuICAgKiBDYWxsZWQgYnkgZGVjaWRlci9zZWxlY3Rvci9mb3JrIGhhbmRsZXJzIHdoZW4gY2F0Y2hpbmcgYSBjaGlsZCdzIFBhdXNlU2lnbmFsLlxuICAgKiBGaXJzdCBpbnZva2VyIHdpbnMgKGlubmVybW9zdCkg4oCUIHN1YnNlcXVlbnQgY2FsbHMgYXJlIG5vLW9wcy5cbiAgICovXG4gIHNldEludm9rZXIoaW52b2tlclN0YWdlSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faW52b2tlclN0YWdlSWQpIHRoaXMuX2ludm9rZXJTdGFnZUlkID0gaW52b2tlclN0YWdlSWQ7XG4gIH1cblxuICAvKipcbiAgICogQ2FwdHVyZSBhIHN1YmZsb3cncyBpc29sYXRlZCBTaGFyZWRNZW1vcnkgYXQgdGhlIG1vbWVudCBpdHNcbiAgICogdHJhdmVyc2FsIHRocmV3LiBDYWxsZWQgYnkgYFN1YmZsb3dFeGVjdXRvcmAgb25jZSBwZXIgc3ViZmxvd1xuICAgKiBib3VuZGFyeSBvbiB0aGUgYnViYmxlLXVwIHBhdGguIEVhY2ggY2FwdHVyZSBpcyBrZXllZCBieSB0aGVcbiAgICogcGF0aC1wcmVmaXhlZCBzdWJmbG93IGlkICh0aGUgc2FtZSBpZCB1c2VkIGluIGBzdWJmbG93UGF0aGApLlxuICAgKlxuICAgKiBJbm5lcm1vc3QtZmlyc3Q6IGEgZGVlcCBgU2VxdWVuY2UoQWdlbnQoLi4uKSlgIHBhdXNlIGNhcHR1cmVzIHRoZVxuICAgKiBhZ2VudCdzIHN1YmZsb3cgZmlyc3QsIHRoZW4gaXRzIHBhcmVudCdzLCBhbGwgdGhlIHdheSB0byB0aGUgcm9vdFxuICAgKiBtb3VudC4gVGhlIGZ1bGwgbmVzdCBzdXJ2aXZlcyBpbnRvIGBjaGVja3BvaW50LnN1YmZsb3dTdGF0ZXNgLlxuICAgKi9cbiAgY2FwdHVyZVN1YmZsb3dTY29wZShzdWJmbG93SWQ6IHN0cmluZywgc3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG4gICAgLy8gRGVmZW5zaXZlIHNoYWxsb3cgY2xvbmUgc28gbGF0ZXIgbXV0YXRpb25zIG9uIHRoZSBzb3VyY2UgZG9uJ3RcbiAgICAvLyBibGVlZCBpbnRvIHRoZSBjYXB0dXJlZCBzbmFwc2hvdC4gRGVlcCBjbG9uaW5nIGlzIHRoZSBjb25zdW1lcidzXG4gICAgLy8gcmVzcG9uc2liaWxpdHkgKHRoZSByZXN1bWUgdGFyZ2V0IG1heSBub3QgZXZlbiBiZSBvbiB0aGlzXG4gICAgLy8gcHJvY2Vzcyk7IFNoYXJlZE1lbW9yeSB2YWx1ZXMgYXJlIGNvbnZlbnRpb25hbGx5IEpTT04tZnJpZW5kbHkuXG4gICAgdGhpcy5fc3ViZmxvd1N0YXRlc1tzdWJmbG93SWRdID0geyAuLi5zdGF0ZSB9O1xuICB9XG5cbiAgLyoqIENhcHR1cmVkIHN1YmZsb3cgc2NvcGVzIChyZWFkLW9ubHkgdmlldykuICovXG4gIGdldCBzdWJmbG93U3RhdGVzKCk6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ge1xuICAgIHJldHVybiB0aGlzLl9zdWJmbG93U3RhdGVzO1xuICB9XG59XG5cbi8vIOKUgOKUgCBQZW5kaW5nUGF1c2Ug4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogQSBwYXVzZSBhIFBBUkFMTEVMIFNJQkxJTkcgb2YgdGhlIHBhdXNlZCBzdGFnZSByYWlzZWQgaW4gdGhlIHNhbWUgZmFuLW91dCDigJRcbiAqIHR3byBjaGlsZHJlbiBvZiBvbmUgZm9yayAob3IgdHdvIHNlbGVjdGVkIGJyYW5jaGVzIG9mIG9uZSBzZWxlY3RvcikgdGhhdFxuICogYm90aCBwYXVzZWQgKDkuMjguMCkuIE9ubHkgb25lIHBhdXNlIGlzIGFza2VkIGF0IGEgdGltZTogdGhlIGNoZWNrcG9pbnQnc1xuICogb3duIChgcGF1c2VkU3RhZ2VJZGApLCB0aGVuIGVhY2ggb2YgdGhlc2UgaW4gdHVybiwgd2l0aCB0aGUgZmFuLW91dCdzIGpvaW5cbiAqIHJ1bm5pbmcgb25seSBvbmNlIGV2ZXJ5IGNoaWxkIGlzIGRvbmUuXG4gKlxuICogRXZlcnl0aGluZyBuZWVkZWQgdG8gcmFpc2UgdGhlIHNpYmxpbmcncyBwYXVzZSBhZ2FpbiBsYXRlciBXSVRIT1VUIHJlLXJ1bm5pbmdcbiAqIHRoZSBzaWJsaW5nOiBpdHMgc3RhZ2UsIGl0cyBwYXRoLCBpdHMgY2FwdHVyZWQgc3ViZmxvdyBzdGF0ZSwgaXRzIHF1ZXN0aW9uLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBBIGZvcmsgd2hvc2UgdHdvIGNoaWxkcmVuIGJvdGggYXNrOiB0aGUgZmlyc3QgY2hlY2twb2ludCBhc2tzIGMxIGFuZFxuICogLy8gY2FycmllcyBjMidzIHBhdXNlOyByZXN1bWluZyBpdCBmaW5pc2hlcyBjMSwgdGhlbiBwYXVzZXMgd2l0aCBjMidzXG4gKiAvLyBxdWVzdGlvbjsgcmVzdW1pbmcgVEhBVCBmaW5pc2hlcyBjMiBhbmQgcnVucyB0aGUgam9pbi5cbiAqIGNvbnN0IGNwID0gZXhlY3V0b3IuZ2V0Q2hlY2twb2ludCgpITtcbiAqIGNwLnBhdXNlZFN0YWdlSWQ7ICAgICAgICAgICAgICAgICAgLy8gJ2MxL2FzaydcbiAqIGNwLnBlbmRpbmdQYXVzZXM/LlswXS5wYXVzZWRTdGFnZUlkOyAvLyAnYzIvYXNrJ1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGVuZGluZ1BhdXNlIHtcbiAgLyoqIFRoZSBzaWJsaW5nJ3MgcGF1c2VkIHN0YWdlIChwYXRoLXByZWZpeGVkIGlkLCBhcyBgcGF1c2VkU3RhZ2VJZGApLiAqL1xuICByZWFkb25seSBwYXVzZWRTdGFnZUlkOiBzdHJpbmc7XG4gIC8qKiBQYXRoIHRocm91Z2ggc3ViZmxvd3MgdG8gdGhlIHNpYmxpbmcncyBwYXVzZWQgc3RhZ2UgKGFzIGBzdWJmbG93UGF0aGApLiAqL1xuICByZWFkb25seSBzdWJmbG93UGF0aDogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKlxuICAgKiBUaGUgc2libGluZydzIG93biBzdWJmbG93IGNhcHR1cmVzIOKAlCB0aGUgc3ViZmxvd3Mgb24gSVRTIHBhdGggYmVsb3cgdGhlXG4gICAqIGZhbi1vdXQuIFRoZSBzdWJmbG93cyBhYm92ZSB0aGUgZmFuLW91dCBhcmUgc2hhcmVkIHdpdGggdGhlIGNoZWNrcG9pbnQnc1xuICAgKiBvd24gcGF1c2UgYW5kIGFyZSBjYXB0dXJlZCBhZ2FpbiB3aGVuIHRoaXMgcGF1c2UgaXMgcmFpc2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1N0YXRlczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuICAvKiogVGhlIHNpYmxpbmcncyBxdWVzdGlvbiAoYXMgYHBhdXNlRGF0YWApLiAqL1xuICByZWFkb25seSBwYXVzZURhdGE/OiB1bmtub3duO1xuICAvKiogSG93IHRoZSBzaWJsaW5nIHBhdXNlZCAoYXMgYHBhdXNlZEJ5YCkuICovXG4gIHJlYWRvbmx5IHBhdXNlZEJ5PzogJ2ludGVycnVwdCc7XG4gIC8qKiBXaGljaCBleGVjdXRpb24gdGhlIHNpYmxpbmcgcGF1c2VkIGluIChhcyBgcGF1c2VkRXhlY3V0aW9uYCwgOS4zNy4wKSDigJQga2VwdCBzbyBpdHMgb3duIHJlc3VtZSBsaW5rcyB0byBpdC4gKi9cbiAgcmVhZG9ubHkgcGF1c2VkRXhlY3V0aW9uPzogUGF1c2VkRXhlY3V0aW9uO1xuICAvKiogVGhlIGlkZW1wb3RlbmN5IGtleSB0aGUgc2libGluZydzIGV4ZWN1dGlvbiByYW4gdW5kZXIgKGFzIGBpZGVtcG90ZW5jeUtleWAsIDEwLjEpLiAqL1xuICByZWFkb25seSBpZGVtcG90ZW5jeUtleT86IHN0cmluZztcbn1cblxuLyoqIEEgcGVuZGluZyBwYXVzZSB3aG9zZSBwYXRoIHN0aWxsIGdyb3dzIGFzIGl0cyBzaWduYWwgYnViYmxlcyB1cCAoaW50ZXJuYWwpLiAqL1xuLyoqXG4gKiBUaGUgc2lnbmFsJ3Mgb3duIGNvcHkgb2YgYSBwZW5kaW5nIHBhdXNlLiBJdHMgYHBhdXNlZEV4ZWN1dGlvbmAgbWF5IHN0aWxsXG4gKiBsYWNrIHRoZSBydW4gKGEgc2libGluZyB0aGF0IHBhdXNlZCBpbiBUSElTIHJ1bikgdW50aWwgYGNvbXBsZXRlRXhlY3V0aW9uYC5cbiAqL1xudHlwZSBNdXRhYmxlUGVuZGluZ1BhdXNlID0gT21pdDxQZW5kaW5nUGF1c2UsICdzdWJmbG93UGF0aCcgfCAncGF1c2VkRXhlY3V0aW9uJz4gJiB7XG4gIHN1YmZsb3dQYXRoOiBzdHJpbmdbXTtcbiAgcGF1c2VkRXhlY3V0aW9uPzogeyBydW50aW1lU3RhZ2VJZDogc3RyaW5nOyBydW5JZD86IHN0cmluZyB9O1xufTtcblxuLy8g4pSA4pSAIFBhdXNlUmVzdWx0IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFJldHVybmVkIGJ5IGEgcGF1c2FibGUgc3RhZ2UncyBleGVjdXRlL3Jlc3VtZSBmdW5jdGlvbiB0byBzaWduYWwgcGF1c2UuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGV4ZWN1dGU6IGFzeW5jIChzY29wZSkgPT4ge1xuICogICBzY29wZS5vcmRlcklkID0gJzEyMyc7XG4gKiAgIHJldHVybiB7IHBhdXNlOiB0cnVlLCBkYXRhOiB7IHF1ZXN0aW9uOiAnQXBwcm92ZSBvcmRlciAxMjM/JyB9IH07XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXVzZVJlc3VsdCB7XG4gIHJlYWRvbmx5IHBhdXNlOiB0cnVlO1xuICAvKiogRGF0YSB0byBpbmNsdWRlIGluIHRoZSBjaGVja3BvaW50IOKAlCBxdWVzdGlvbiwgcmVhc29uLCBtZXRhZGF0YS4gKi9cbiAgcmVhZG9ubHkgZGF0YT86IHVua25vd247XG59XG5cbi8vIOKUgOKUgCBGbG93Y2hhcnRDaGVja3BvaW50IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFNlcmlhbGl6YWJsZSBjaGVja3BvaW50IOKAlCBldmVyeXRoaW5nIG5lZWRlZCB0byByZXN1bWUgYSBwYXVzZWQgZmxvd2NoYXJ0LFxuICogYW5kIG5vdGhpbmcgYSByZXN1bWUgbmV2ZXIgcmVhZHMuXG4gKlxuICogTEVBTiAoZm9ybWF0IDIpOiBpdHMgc2l6ZSBpcyB0aGUgU1RBVEUncywgbmV2ZXIgdGhlIHJ1bidzIGxlbmd0aC4gVGhlIGN1cnNvclxuICogaXMgYHBhdXNlZFN0YWdlSWRgICsgYHN1YmZsb3dQYXRoYDsgdGhlIHN0YXRlIGlzIGBzaGFyZWRTdGF0ZWAgcGx1cyB0aGVcbiAqIGNhcHR1cmVzIG9mIHRoZSBzdWJmbG93cyBvbiB0aGF0IHBhdGggKGBzdWJmbG93U3RhdGVzYCkuIFRoZSBydW4ncyBoaXN0b3J5IOKAlFxuICogdGhlIGV4ZWN1dGlvbiB0cmVlLCB0aGUgZmluaXNoZWQgc3ViZmxvd3MnIHJlc3VsdHMsIHRoZSBjb21taXQgbG9nIOKAlCBpcyBub3RcbiAqIGhlcmU6IHJlYWQgaXQgZnJvbSBgZXhlY3V0b3IuZ2V0U25hcHNob3QoKWAgYmVmb3JlIGByZXN1bWUoKWAgKGZvcm1hdCAxXG4gKiBjYXJyaWVkIGBleGVjdXRpb25UcmVlYCBhbmQgYHN1YmZsb3dSZXN1bHRzYDsgbm8gcmVzdW1lIHJlYWQgdGhlbSkuXG4gKlxuICogSlNPTi1zYWZlOiBubyBmdW5jdGlvbnMsIG5vIGNsYXNzIGluc3RhbmNlcywgbm8gU0RLIGNsaWVudHMuXG4gKiBTdG9yZSBhbnl3aGVyZTogUmVkaXMsIFBvc3RncmVzLCBsb2NhbFN0b3JhZ2UsIGEgZmlsZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgY2hlY2twb2ludCA9IGV4ZWN1dG9yLmdldENoZWNrcG9pbnQoKTsgLy8gYWZ0ZXIgcGF1c2VcbiAqIGF3YWl0IHJlZGlzLnNldChgc2Vzc2lvbjoke2lkfWAsIEpTT04uc3RyaW5naWZ5KGNoZWNrcG9pbnQpKTtcbiAqXG4gKiAvLyBSZXN1bWUgKGhvdXJzIGxhdGVyLCBwb3NzaWJseSBkaWZmZXJlbnQgc2VydmVyKVxuICogY29uc3QgY2hlY2twb2ludCA9IEpTT04ucGFyc2UoYXdhaXQgcmVkaXMuZ2V0KGBzZXNzaW9uOiR7aWR9YCkpO1xuICogY29uc3QgZXhlY3V0b3IgPSBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQpO1xuICogYXdhaXQgZXhlY3V0b3IucmVzdW1lKGNoZWNrcG9pbnQsIHsgYXBwcm92ZWQ6IHRydWUgfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93Y2hhcnRDaGVja3BvaW50IHtcbiAgLyoqIFBhdXNlZCByb290LWxlZyBvYnNlcnZhdGlvbiBvbmx5LiBObyBoaXN0b3J5L3JlY29yZGVyIGRhdGEgb3Igc3RvcmFnZSBhY2tub3dsZWRnZW1lbnQgaXMgaW5jbHVkZWQuICovXG4gIHJlYWRvbmx5IGNhcHR1cmU/OiBpbXBvcnQoJy4uL2NhcHR1cmUvcmVhZFNvdXJjZXMuanMnKS5OYXRpdmVDYXB0dXJlT2JzZXJ2YXRpb247XG4gIC8qKlxuICAgKiBUaGUgY2hlY2twb2ludCBGT1JNQVQ6IGAyYCwgdGhlIGxlYW4gY2hlY2twb2ludCAoYDFgIGZyb20gOS4zOS4wOyBhYnNlbnRcbiAgICogYmVmb3JlKS4gYHJlc3VtZSgpYCByZWFkcyBldmVyeSBvbGRlciBvbmUgdGhyb3VnaCB0aGUgb25lIHVwY2FzdGVyXG4gICAqIChgcGF1c2UvcmVjb3JkLnRzIMK3IHVwY2FzdENoZWNrcG9pbnRgKSwgd2hpY2ggZHJvcHMgd2hhdCBsYXRlciBmb3JtYXRzXG4gICAqIGRyb3BwZWQg4oCUIGZvcm1hdCAxJ3MgYGV4ZWN1dGlvblRyZWVgIGFuZCBgc3ViZmxvd1Jlc3VsdHNgLCB0aGUgbGVnYWN5XG4gICAqIGBjb250aW51YXRpb25TdGFnZUlkYCDigJQgbm9uZSBvZiB3aGljaCBhIHJlc3VtZSBldmVyIHJlYWQuIEEgdmVyc2lvbiB0aGlzXG4gICAqIHJlbGVhc2UgZG9lcyBub3Qga25vdyBpcyByZWZ1c2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgY2hlY2twb2ludFZlcnNpb24/OiAyO1xuXG4gIC8qKiBTY29wZSBzdGF0ZSBhdCB0aGUgcGF1c2UgcG9pbnQg4oCUIGFsbCBzaGFyZWQgbWVtb3J5IGtleS92YWx1ZXMuICovXG4gIHJlYWRvbmx5IHNoYXJlZFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAvKiogSUQgb2YgdGhlIHN0YWdlIHRoYXQgcGF1c2VkLiBVc2VkIGJ5IHJlc3VtZSgpIHRvIGZpbmQgdGhlIG5vZGUgaW4gdGhlIGdyYXBoLiAqL1xuICByZWFkb25seSBwYXVzZWRTdGFnZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXVzZWQgRVhFQ1VUSU9OICg5LjM3LjApOiB0aGUgcnVuIHRoYXQgcGF1c2VkIGFuZCB0aGUgcGF1c2VkIHN0YWdlJ3NcbiAgICogcnVudGltZVN0YWdlSWQgaW4gaXQgKHRoZSBpZCBpdHMgYG9uUGF1c2VgIGV2ZW50IGFuZCBpdHMgY29tbWl0IGNhcnJ5KS5cbiAgICogUmVhZCBieSBgcmVzdW1lKClgIGludG8gdGhlIGBvblJlc3VtZWAgZXZlbnQncyBgdHJhdmVyc2FsQ29udGV4dC5yZXN1bWVkRnJvbWBcbiAgICogbGluayDigJQgbmV2ZXIgdXNlZCB0byBwbGFuIHRoZSByZS1lbnRyeS4gQWJzZW50IG9uIGFuIG9sZGVyIGNoZWNrcG9pbnQsXG4gICAqIHdoaWNoIHRoZW4gcmVzdW1lcyB3aXRob3V0IGEgbGluay5cbiAgICovXG4gIHJlYWRvbmx5IHBhdXNlZEV4ZWN1dGlvbj86IFBhdXNlZEV4ZWN1dGlvbjtcblxuICAvKipcbiAgICogVGhlIGlkZW1wb3RlbmN5IGtleSB0aGUgcGF1c2VkIGV4ZWN1dGlvbiByYW4gdW5kZXIgKDEwLjEpIOKAlCBwcmVzZW50IG9ubHkgd2hlbiB0aGUgcGF1c2VkIHN0YWdlIGB0b3VjaGVzYCBhblxuICAgKiBvdXRzaWRlIHN5c3RlbSB3aXRoIGEga2V5IHJ1bGUuIGByZXN1bWUoKWAgcmUtcnVucyB0aGUgc3RhZ2UgKG9yIHJ1bnMgaXRzIGByZXN1bWVGbmApIHVuZGVyIFRISVMga2V5LCBuZXZlciBhXG4gICAqIHJlY29tcHV0ZWQgb25lOiB0aGUgaW5wdXQgdGhlIHJ1bGUgcmVhZCBkb2VzIG5vdCBjcm9zcyBhIHJlc3VtZSwgYW5kIGEgZGlmZmVyZW50IGtleSBvbiB0aGUgcmUtcnVuIHdvdWxkIG1ha2VcbiAgICogdGhlIG91dHNpZGUgc3lzdGVtIGFwcGx5IHRoZSBlZmZlY3QgdHdpY2UuIEEgcmVhbCB2YWx1ZSwgbGlrZSBgc2hhcmVkU3RhdGVgIOKAlCBubyByZWRhY3Rpb24gcG9saWN5IHRvdWNoZXMgdGhlXG4gICAqIGNoZWNrcG9pbnQuIEEgbWFsZm9ybWVkIG9uZSBpcyByZWZ1c2VkIGF0IGByZXN1bWUoKWAuXG4gICAqL1xuICByZWFkb25seSBpZGVtcG90ZW5jeUtleT86IHN0cmluZztcblxuICAvKiogUGF0aCB0aHJvdWdoIHN1YmZsb3dzIHRvIHRoZSBwYXVzZWQgc3RhZ2UgKGUuZy4sIFsnc2YtcGF5bWVudCcsICdzZi12YWxpZGF0aW9uJ10pLlxuICAgKiAgRW1wdHkgYXJyYXkgd2hlbiBwYXVzZWQgYXQgdGhlIHRvcCBsZXZlbC4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1BhdGg6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKiBEYXRhIGZyb20gJHBhdXNlKCkg4oCUIHF1ZXN0aW9uLCByZWFzb24sIG1ldGFkYXRhLiAqL1xuICByZWFkb25seSBwYXVzZURhdGE/OiB1bmtub3duO1xuXG4gIC8qKlxuICAgKiBIT1cgdGhlIHBhdXNlIHdhcyByYWlzZWQuIGAnaW50ZXJydXB0J2AgbWVhbnMgYSBzdGFnZSBib2R5IGNhbGxlZFxuICAgKiBgaW50ZXJydXB0KHNjb3BlLCB7IHJlYXNvbiwgZXhwZWN0cz8gfSlgIGFuZCBgcGF1c2VEYXRhYCBJUyB0aGF0IHBheWxvYWQ7XG4gICAqIGFic2VudCBtZWFucyB0aGUgYGFkZFBhdXNhYmxlRnVuY3Rpb25gIGV4ZWN1dGUvcmVzdW1lIHBhdGggKGV2ZXJ5XG4gICAqIGNoZWNrcG9pbnQgd3JpdHRlbiBiZWZvcmUgOS4xNC4wIG9taXRzIGl0LCB3aGljaCBpcyBleGFjdGx5IHJpZ2h0KS5cbiAgICpcbiAgICogYHJlc3VtZSgpYCByZWFkcyB0aGlzIHRvIHBpY2sgdGhlIHJlLWVudHJ5LCBhbmQgdGhlIHR3byBkaWZmZXIgYnkgbGF3OlxuICAgKiBhbiBpbnRlcnJ1cHRlZCBzdGFnZSBSRS1SVU5TIElUUyBPV04gRlVOQ1RJT04gRlJPTSBUSEUgVE9QIChzdGFnZXMgYXJlXG4gICAqIGF0b21pYyDigJQgdGhlIGFuc3dlciBjb21lcyBiYWNrIG91dCBvZiB0aGUgYGludGVycnVwdCgpYCBjYWxsKSwgd2hpbGUgYVxuICAgKiBwYXVzYWJsZSBzdGFnZSBydW5zIGl0cyBzZXBhcmF0ZSBgcmVzdW1lRm5gLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF1c2VkQnk/OiAnaW50ZXJydXB0JztcblxuICAvKipcbiAgICogU3ViZmxvdyBzY29wZSBjYXB0dXJlIOKAlCBvbmUgZW50cnkgcGVyIHN1YmZsb3cgYm91bmRhcnkgb24gdGhlIHBhdGhcbiAgICogdG8gdGhlIHBhdXNlZCBzdGFnZS4gS2V5ZWQgYnkgcGF0aC1wcmVmaXhlZCBzdWJmbG93IGlkIChtYXRjaGVzXG4gICAqIGBzdWJmbG93UGF0aGAgZW50cmllcykuIEVhY2ggdmFsdWUgaXMgdGhlIHN1YmZsb3cncyBwcmUtcGF1c2VcbiAgICogc2hhcmVkIHN0YXRlLlxuICAgKlxuICAgKiBBbHdheXMgcHJlc2VudCAoZW1wdHkgYHt9YCBmb3Igcm9vdC1sZXZlbCBwYXVzZXMgd2hlcmUgbm8gc3ViZmxvd3NcbiAgICogd2VyZSBlbnRlcmVkKS4gT24gcmVzdW1lLCBgU3ViZmxvd0V4ZWN1dG9yYCBzZWVkcyBlYWNoIG5lc3RlZCBydW50aW1lXG4gICAqIG9uIHRoZSBwYXRoIGZyb20gdGhpcyBtYXAg4oCUIE9OQ0UsIG9uIGl0cyBmaXJzdCBlbnRyeSwgaW4gcGxhY2Ugb2YgdGhlXG4gICAqIGlucHV0TWFwcGVyJ3MgdmFsdWVzICh0aGUgbWFwcGVyIHN0aWxsIHJ1bnMsIGZvciB0aGUgc3RhZ2VzJyByZWFkLW9ubHlcbiAgICogYXJncykg4oCUIHNvIHJlc3VtZSBoYW5kbGVycyBzZWUgcHJlLXBhdXNlIHNjb3BlIGFjcm9zcyBzYW1lLWV4ZWN1dG9yIEFORFxuICAgKiBjcm9zcy1leGVjdXRvciByZXN0YXJ0cy4gT25seSB0aGUgc3ViZmxvd3MgT04gYHN1YmZsb3dQYXRoYCByZWFkIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1N0YXRlczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuXG4gIC8qKlxuICAgKiBUaGUgc2hhcmVkIGV4ZWN1dGlvbiBjb3VudGVyIGF0IHRoZSBtb21lbnQgb2YgcGF1c2Ug4oCUIHRoZSBudW1iZXIgb2Ygc3RhZ2VzXG4gICAqIGV4ZWN1dGVkIHNvIGZhciB0aGlzIHJ1bi4gUmVzdW1lIHNlZWRzIGl0IHNvIHBvc3QtcmVzdW1lIGBydW50aW1lU3RhZ2VJZGBzXG4gICAqIChgc3RhZ2VJZCNleGVjdXRpb25JbmRleGApIGtlZXAgY2xpbWJpbmcgYW5kIG5ldmVyIGNvbGxpZGUgd2l0aCBwcmUtcGF1c2VcbiAgICogb25lcywgd2hpY2ggaXMgd2hhdCB0aGUgd2hvbGUgZXZlbnQtY29ycmVsYXRpb24gbW9kZWwgcmVzdHMgb24uXG4gICAqXG4gICAqIE9wdGlvbmFsIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OiBhIGNoZWNrcG9pbnQgcGVyc2lzdGVkIGJlZm9yZSB0aGlzXG4gICAqIGZpZWxkIGV4aXN0ZWQgKG9sZGVyIFJlZGlzL1Bvc3RncmVzIHJvd3MpIHN0aWxsIHZhbGlkYXRlcyBhbmQgcmVzdW1lcyB3aXRoXG4gICAqIHRoZSBwcmV2aW91cyAoY291bnRlci1yZXN0YXJ0aW5nKSBiZWhhdmlvci5cbiAgICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvbkNvdW50PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBQZXItYHN0YWdlSWRgIGxvb3AgdmlzaXQgY291bnRzIGF0IHRoZSBtb21lbnQgb2YgcGF1c2UuIFJlc3VtZSBzZWVkcyB0aGVtXG4gICAqIHNvIGBUcmF2ZXJzYWxDb250ZXh0Lmxvb3BJdGVyYXRpb25gIHN0YXlzIGNvbnRpbnVvdXMgYWNyb3NzIHRoZSBwYXVzZSAoYVxuICAgKiBtaWQtbG9vcCByZXN1bWUga2VlcHMgY291bnRpbmcgdXAsIG5vdCByZXN0YXJ0aW5nIGF0IDApIGFuZCB0aGVcbiAgICogQ29udGludWF0aW9uUmVzb2x2ZXIgaXRlcmF0aW9uIGJ1ZGdldCBpcyBub3Qgc2lsZW50bHkgcmVmaWxsZWQuXG4gICAqXG4gICAqIE9wdGlvbmFsIGZvciB0aGUgc2FtZSBiYWNrd2FyZC1jb21wYXRpYmlsaXR5IHJlYXNvbiBhcyBgZXhlY3V0aW9uQ291bnRgLlxuICAgKi9cbiAgcmVhZG9ubHkgdmlzaXRDb3VudHM/OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBudW1iZXI+PjtcblxuICAvKiogU3RhZ2UgdGhhdCBpbnZva2VkIHRoZSBwYXVzZWQgY2hpbGQgKGRlY2lkZXIsIHNlbGVjdG9yLCBmb3JrKS4gQWJzZW50IGZvciBsaW5lYXIgcGF1c2VzLiAqL1xuICByZWFkb25seSBpbnZva2VyU3RhZ2VJZD86IHN0cmluZztcblxuICAvKipcbiAgICogUGF1c2VzIHJhaXNlZCBieSBQQVJBTExFTCBTSUJMSU5HUyBvZiB0aGUgcGF1c2VkIHN0YWdlIGluIHRoZSBzYW1lXG4gICAqIGZhbi1vdXQsIHdhaXRpbmcgdGhlaXIgdHVybiAoOS4yOC4wKSDigJQgc2VlIHtAbGluayBQZW5kaW5nUGF1c2V9LiBBYnNlbnRcbiAgICogd2hlbiBvbmx5IG9uZSBjaGlsZCBwYXVzZWQgKGV2ZXJ5IGNoZWNrcG9pbnQgYmVmb3JlIDkuMjguMCBvbWl0cyBpdCwgYW5kXG4gICAqIHJlc3VtZXMgZXhhY3RseSBhcyBiZWZvcmUpLiBSZXN1bWluZyB0aGlzIGNoZWNrcG9pbnQgZmluaXNoZXMgdGhlIHBhdXNlZFxuICAgKiBzdGFnZSdzIGNoaWxkLCB0aGVuIHBhdXNlcyBhZ2FpbiB3aXRoIHRoZSBmaXJzdCBvZiB0aGVzZTsgdGhlIGZhbi1vdXQnc1xuICAgKiBqb2luIHJ1bnMgb25jZSBldmVyeSBjaGlsZCBpcyBkb25lLlxuICAgKi9cbiAgcmVhZG9ubHkgcGVuZGluZ1BhdXNlcz86IHJlYWRvbmx5IFBlbmRpbmdQYXVzZVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVkYWN0aW9uIG1hcmtzIG9mIHRoZSBwYXVzZWQgcnVuIOKAlCBOQU1FUyBvbmx5IChzZWVcbiAgICoge0BsaW5rIFJlZGFjdGlvbk1hcmtzfSkuIEFic2VudCB3aGVuIHRoZSBydW4gbWFya2VkIG5vdGhpbmcgKG5vIHBvbGljeVxuICAgKiBhbmQgbm8gcGVyLWNhbGwgbWFyaywgb3IgYW4gb2xkZXIgY2hlY2twb2ludCk6IHRoZSByZXN1bWVkIHJ1biB0aGVuIHN0YXJ0c1xuICAgKiBmcm9tIGl0cyBwb2xpY3kgYWxvbmUuXG4gICAqL1xuICByZWFkb25seSByZWRhY3Rpb25NYXJrcz86IFJlZGFjdGlvbk1hcmtzO1xuXG4gIC8qKiBUaW1lc3RhbXAgb2Ygd2hlbiB0aGUgcGF1c2Ugb2NjdXJyZWQuICovXG4gIHJlYWRvbmx5IHBhdXNlZEF0OiBudW1iZXI7XG59XG5cbi8vIOKUgOKUgCBQYXVzYWJsZUhhbmRsZXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogSGFuZGxlciBmb3IgYSBwYXVzYWJsZSBzdGFnZSDigJQgaGFzIHR3byBwaGFzZXM6IGV4ZWN1dGUgYW5kIHJlc3VtZS5cbiAqXG4gKiBgZXhlY3V0ZWAgcnVucyB0aGUgZmlyc3QgdGltZS4gUmV0dXJuIGFueSBub24tdm9pZCB2YWx1ZSB0byBwYXVzZSAodGhhdCB2YWx1ZVxuICogYmVjb21lcyB0aGUgY2hlY2twb2ludCdzIGBwYXVzZURhdGFgKTsgcmV0dXJuIHZvaWQvdW5kZWZpbmVkIHRvIGNvbnRpbnVlIG5vcm1hbGx5LlxuICogYHJlc3VtZWAgcnVucyB3aGVuIHRoZSBmbG93Y2hhcnQgaXMgcmVzdW1lZC4gSXQgcmVjZWl2ZXMgdGhlIHJlc3VtZSBpbnB1dC5cbiAqXG4gKiBCb3RoIHBoYXNlcyByZWNlaXZlIHRoZSBzYW1lIHNjb3BlLiBBZnRlciBleGVjdXRlIHBhdXNlcywgdGhlIHNjb3BlIHN0YXRlXG4gKiBpcyBwcmVzZXJ2ZWQgaW4gdGhlIGNoZWNrcG9pbnQuIE9uIHJlc3VtZSwgdGhlIHNjb3BlIGlzIHJlc3RvcmVkIGJlZm9yZVxuICogY2FsbGluZyByZXN1bWUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC5hZGRQYXVzYWJsZUZ1bmN0aW9uKCdBcHByb3ZlT3JkZXInLCB7XG4gKiAgIGV4ZWN1dGU6IGFzeW5jIChzY29wZSkgPT4ge1xuICogICAgIHNjb3BlLm9yZGVySWQgPSAnMTIzJztcbiAqICAgICBzY29wZS5hbW91bnQgPSAyOTk7XG4gKiAgICAgcmV0dXJuIHsgcXVlc3Rpb246IGBBcHByb3ZlICQke3Njb3BlLmFtb3VudH0gcmVmdW5kP2AgfTtcbiAqICAgfSxcbiAqICAgcmVzdW1lOiBhc3luYyAoc2NvcGUsIGlucHV0KSA9PiB7XG4gKiAgICAgc2NvcGUuYXBwcm92ZWQgPSBpbnB1dC5hcHByb3ZlZDtcbiAqICAgICBzY29wZS5hcHByb3ZlciA9IGlucHV0LmFwcHJvdmVyO1xuICogICB9LFxuICogfSwgJ2FwcHJvdmUtb3JkZXInLCAnTWFuYWdlciBhcHByb3ZhbCBnYXRlJylcbiAqXG4gKiAvLyBMYXRlciDigJQgcmVzdW1lIHdpdGggaHVtYW4ncyBhbnN3ZXJcbiAqIGF3YWl0IGV4ZWN1dG9yLnJlc3VtZShjaGVja3BvaW50LCB7IGFwcHJvdmVkOiB0cnVlLCBhcHByb3ZlcjogJ0phbmUnIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGF1c2FibGVIYW5kbGVyPFRTY29wZSA9IGFueSwgVElucHV0ID0gdW5rbm93biwgVFBhdXNlRGF0YSA9IHVua25vd24+IHtcbiAgLyoqXG4gICAqIEZpcnN0LXJ1biBwaGFzZS4gUmV0dXJuIGRhdGEgdG8gcGF1c2UsIG9yIHZvaWQvdW5kZWZpbmVkIHRvIGNvbnRpbnVlIG5vcm1hbGx5LlxuICAgKlxuICAgKiBBbnkgbm9uLXZvaWQgcmV0dXJuIHZhbHVlIGJlY29tZXMgdGhlIGBwYXVzZURhdGFgIGluIHRoZSBjaGVja3BvaW50LlxuICAgKiBUaGUgY29uc3VtZXIgZGVmaW5lcyB0aGUgYFRQYXVzZURhdGFgIHR5cGUg4oCUIHRoZSBGRSB1c2VzIGl0IHRvIHJlbmRlclxuICAgKiB0aGUgcmlnaHQgVUkgKGZvcm0gZmllbGRzLCBhcHByb3ZhbCBidXR0b25zLCBldGMuKS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBUUGF1c2VEYXRhID0geyBxdWVzdGlvbjogc3RyaW5nOyByaXNrTGV2ZWw6IHN0cmluZyB9XG4gICAqIGNvbnN0IGhhbmRsZXI6IFBhdXNhYmxlSGFuZGxlcjxNeVN0YXRlLCB7IGFwcHJvdmVkOiBib29sZWFuIH0sIHsgcXVlc3Rpb246IHN0cmluZzsgcmlza0xldmVsOiBzdHJpbmcgfT4gPSB7XG4gICAqICAgZXhlY3V0ZTogYXN5bmMgKHNjb3BlKSA9PiB7XG4gICAqICAgICByZXR1cm4geyBxdWVzdGlvbjogYEFwcHJvdmUgb3JkZXIgJHtzY29wZS5vcmRlcklkfT9gLCByaXNrTGV2ZWw6ICdoaWdoJyB9O1xuICAgKiAgIH0sXG4gICAqICAgcmVzdW1lOiBhc3luYyAoc2NvcGUsIGlucHV0KSA9PiB7XG4gICAqICAgICBzY29wZS5hcHByb3ZlZCA9IGlucHV0LmFwcHJvdmVkO1xuICAgKiAgIH0sXG4gICAqIH07XG4gICAqIGBgYFxuICAgKi9cbiAgZXhlY3V0ZTogKHNjb3BlOiBUU2NvcGUpID0+IFByb21pc2U8VFBhdXNlRGF0YSB8IHZvaWQ+IHwgVFBhdXNlRGF0YSB8IHZvaWQ7XG4gIC8qKlxuICAgKiBSZXN1bWUgcGhhc2UuIENhbGxlZCB3aXRoIHRoZSByZXN1bWUgaW5wdXQgd2hlbiBleGVjdXRpb24gY29udGludWVzLlxuICAgKlxuICAgKiBUaGUgc2NvcGUgaXMgcmVzdG9yZWQgZnJvbSB0aGUgY2hlY2twb2ludCdzIGBzaGFyZWRTdGF0ZWAuIFdyaXRlcyBkdXJpbmdcbiAgICogYHJlc3VtZWAgYXJlIGNvbW1pdHRlZCBhbmQgdmlzaWJsZSB0byBzdWJzZXF1ZW50IHN0YWdlcy5cbiAgICovXG4gIHJlc3VtZTogKHNjb3BlOiBUU2NvcGUsIGlucHV0OiBUSW5wdXQpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xufVxuXG4vLyDilIDilIAgVHlwZSBndWFyZCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIENoZWNrIGlmIGEgdmFsdWUgaXMgYSBQYXVzZVJlc3VsdCAoc3RhZ2Ugd2FudHMgdG8gcGF1c2UpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGF1c2VSZXN1bHQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBQYXVzZVJlc3VsdCB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICh2YWx1ZSBhcyBQYXVzZVJlc3VsdCkucGF1c2UgPT09IHRydWU7XG59XG5cbi8qKiBDaGVjayBpZiBhbiBlcnJvciBpcyBhIFBhdXNlU2lnbmFsLiBVc2VzIGluc3RhbmNlb2YgKyBuYW1lIGJyYW5kIGZhbGxiYWNrIGZvciBjcm9zcy1yZWFsbSBzYWZldHkuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQYXVzZVNpZ25hbChlcnJvcjogdW5rbm93bik6IGVycm9yIGlzIFBhdXNlU2lnbmFsIHtcbiAgLy8gVG90YWw6IGEgUHJveHkgd2hvc2UgYGdldFByb3RvdHlwZU9mYCB0cmFwIHRocm93cyAob3IgYSByZXZva2VkIFByb3h5KVxuICAvLyBpcyBub3QgYSBzaWduYWwg4oCUIHRoZSBlbmdpbmUncyBjYXRjaCBibG9ja3MgYXNrIHRoaXMgZmlyc3QsIGFuZCBtdXN0XG4gIC8vIG5vdCB0cmFkZSB0aGUgc3RhZ2UncyB0aHJvd24gdmFsdWUgZm9yIHRoZSB0cmFwJ3MgZXJyb3IuXG4gIHRyeSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGVycm9yIGluc3RhbmNlb2YgUGF1c2VTaWduYWwgfHxcbiAgICAgIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmXG4gICAgICAgIGVycm9yLm5hbWUgPT09ICdQYXVzZVNpZ25hbCcgJiZcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGVycm9yLCAncGF1c2VEYXRhJykgJiZcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGVycm9yLCAnc3RhZ2VJZCcpKVxuICAgICk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIl19
@@ -13,8 +13,11 @@ import type { CommitBundle, CommitValuesMode, LogAddress, LogOutcome, Meta } fro
13
13
  import type { RecordSink, WriteProvenanceMode } from 'foottrace/write';
14
14
  import { EventLog, SharedMemory } from 'foottrace/write';
15
15
  import type { RunCorrelation } from '../attempt/types.js';
16
- import type { NativeCaptureNote, RecorderCaptureAcknowledgement } from '../capture/nativeCoverage.js';
16
+ import type { CaptureHistoryStatus } from '../capture/historyTypes.js';
17
+ import type { CaptureChannelStatus, RecorderCaptureAcknowledgement } from '../capture/nativeCoverage.js';
17
18
  import { NativeCapture } from '../capture/nativeCoverage.js';
19
+ import type { EngineReadSources, NativeCaptureObservation, SourceLimitation } from '../capture/readSources.js';
20
+ import { EngineReadSourceCapture } from '../capture/readSources.js';
18
21
  import type { StageSnapshot } from '../memory/frameTypes.js';
19
22
  import type { RunPolicy } from '../memory/runPolicy.js';
20
23
  import { StageContext } from '../memory/StageContext.js';
@@ -62,7 +65,9 @@ export type RuntimeSnapshot = {
62
65
  */
63
66
  readonly runId: string;
64
67
  /** Opt-in native observation; root log and current leg only, never durable storage. */
65
- readonly capture?: NativeCaptureNote;
68
+ readonly capture?: NativeCaptureObservation;
69
+ /** Opt-in ordered native occurrences. Unknown ownership has no record; never infer observed-empty. */
70
+ readonly readSources?: EngineReadSources;
66
71
  /**
67
72
  * The run's correlation (10.1) — `env.traceparent`, or `env.traceId` + `env.operationId`, resolved once per
68
73
  * leg; the same frozen object every event of the leg carries (`TraversalContext.correlation`, a scope event's
@@ -146,6 +151,8 @@ export type RuntimeSnapshot = {
146
151
  };
147
152
  /** `getSnapshot().sink` — what the run handed its sink, and what the sink did not take (10.1, P6). */
148
153
  export interface RecordSinkStats {
154
+ /** Present only when explicit capture persistence was requested. Never inferred from an ordinary flush. */
155
+ readonly capture?: CaptureHistoryStatus;
149
156
  /** Entries handed to the adapter (each `opened`, `commit`, `note`, `closed` call). */
150
157
  readonly entries: number;
151
158
  /**
@@ -167,9 +174,13 @@ export interface RuntimeRecord {
167
174
  readonly meta?: Meta;
168
175
  }
169
176
  export declare class ExecutionRuntime {
177
+ readSources?: EngineReadSourceCapture;
170
178
  /** Present only for the current opted-in root leg. Never inherited by a subflow runtime. */
171
179
  capture?: NativeCapture;
172
180
  beginCapture(runId: string): NativeCapture;
181
+ /** A reused log cannot be retrofitted or relabelled as the new leg's base. */
182
+ resumeReadSources(runId: string): void;
183
+ captureSnapshot(to: number, control?: CaptureChannelStatus, redact?: boolean): NativeCaptureObservation | undefined;
173
184
  globalStore: SharedMemory;
174
185
  /**
175
186
  * Parallel redacted mirror of `globalStore`. Populated by every commit that
@@ -201,7 +212,12 @@ export declare class ExecutionRuntime {
201
212
  * every frame after inherits the same reference. Default: every dial at
202
213
  * its default, no rule, no mirror.
203
214
  */
204
- constructor(rootName: string, rootId: string, defaultValues?: unknown, initialState?: unknown, policy?: RunPolicy, record?: RuntimeRecord);
215
+ constructor(rootName: string, rootId: string, defaultValues?: unknown, initialState?: unknown, policy?: RunPolicy, record?: RuntimeRecord, source?: {
216
+ readonly runId: string;
217
+ readonly address?: LogAddress;
218
+ readonly unavailable?: SourceLimitation;
219
+ readonly historyOmitted?: boolean;
220
+ });
205
221
  /**
206
222
  * A fresh root frame for this runtime — `globalStore`, `executionHistory`,
207
223
  * the run's policy and (when kept) the mirror. Also how `SubflowExecutor`