footprintjs 10.0.1 → 10.2.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.
- package/AGENTS.md +2 -1
- package/CLAUDE.md +61 -7
- package/README.md +136 -312
- package/dist/esm/index.d.ts +62 -2
- package/dist/esm/index.js +13 -6
- package/dist/esm/lib/attempt/anySignal.d.ts +19 -0
- package/dist/esm/lib/attempt/anySignal.js +39 -0
- package/dist/esm/lib/attempt/call.d.ts +88 -0
- package/dist/esm/lib/attempt/call.js +129 -0
- package/dist/esm/lib/attempt/category.d.ts +37 -0
- package/dist/esm/lib/attempt/category.js +131 -0
- package/dist/esm/lib/attempt/correlation.d.ts +95 -0
- package/dist/esm/lib/attempt/correlation.js +178 -0
- package/dist/esm/lib/attempt/deadline.d.ts +44 -0
- package/dist/esm/lib/attempt/deadline.js +101 -0
- package/dist/esm/lib/attempt/decision.d.ts +52 -0
- package/dist/esm/lib/attempt/decision.js +134 -0
- package/dist/esm/lib/attempt/effect.d.ts +76 -0
- package/dist/esm/lib/attempt/effect.js +160 -0
- package/dist/esm/lib/attempt/errors.d.ts +41 -0
- package/dist/esm/lib/attempt/errors.js +44 -0
- package/dist/esm/lib/attempt/index.d.ts +18 -0
- package/dist/esm/lib/attempt/index.js +15 -0
- package/dist/esm/lib/attempt/name.d.ts +21 -0
- package/dist/esm/lib/attempt/name.js +43 -0
- package/dist/esm/lib/attempt/observed.d.ts +66 -0
- package/dist/esm/lib/attempt/observed.js +171 -0
- package/dist/esm/lib/attempt/policy.d.ts +45 -0
- package/dist/esm/lib/attempt/policy.js +83 -0
- package/dist/esm/lib/attempt/record.d.ts +11 -0
- package/dist/esm/lib/attempt/record.js +24 -0
- package/dist/esm/lib/attempt/retryLoopContext.d.ts +18 -0
- package/dist/esm/lib/attempt/retryLoopContext.js +24 -0
- package/dist/esm/lib/attempt/retryLoopTypes.d.ts +18 -0
- package/dist/esm/lib/attempt/retryLoopTypes.js +2 -0
- package/dist/esm/lib/attempt/runner.d.ts +157 -0
- package/dist/esm/lib/attempt/runner.js +523 -0
- package/dist/esm/lib/attempt/standalone.d.ts +47 -0
- package/dist/esm/lib/attempt/standalone.js +126 -0
- package/dist/esm/lib/attempt/types.d.ts +453 -0
- package/dist/esm/lib/attempt/types.js +16 -0
- package/dist/esm/lib/budget/index.d.ts +9 -0
- package/dist/esm/lib/budget/index.js +9 -0
- package/dist/esm/lib/budget/timeBudget.d.ts +136 -0
- package/dist/esm/lib/budget/timeBudget.js +666 -0
- package/dist/esm/lib/builder/FlowChartBuilder.d.ts +88 -3
- package/dist/esm/lib/builder/FlowChartBuilder.js +199 -9
- package/dist/esm/lib/builder/retryLoop.d.ts +56 -0
- package/dist/esm/lib/builder/retryLoop.js +283 -0
- package/dist/esm/lib/builder/types.d.ts +35 -1
- package/dist/esm/lib/builder/types.js +1 -1
- package/dist/esm/lib/decide/decide.js +2 -2
- package/dist/esm/lib/decide/index.d.ts +1 -1
- package/dist/esm/lib/decide/index.js +2 -2
- package/dist/esm/lib/decide/types.d.ts +3 -0
- package/dist/esm/lib/decide/types.js +1 -8
- package/dist/esm/lib/engine/graph/StageNode.d.ts +11 -1
- package/dist/esm/lib/engine/graph/StageNode.js +1 -1
- package/dist/esm/lib/engine/graph/prefixNodeTree.js +5 -1
- package/dist/esm/lib/engine/handlers/ChildrenExecutor.js +36 -6
- package/dist/esm/lib/engine/handlers/DeciderHandler.js +9 -5
- package/dist/esm/lib/engine/handlers/ResumeEntry.js +3 -1
- package/dist/esm/lib/engine/handlers/SelectorHandler.js +6 -5
- package/dist/esm/lib/engine/handlers/StageRunner.d.ts +8 -1
- package/dist/esm/lib/engine/handlers/StageRunner.js +36 -9
- package/dist/esm/lib/engine/handlers/SubflowExecutor.js +24 -5
- package/dist/esm/lib/engine/handlers/commitStage.d.ts +7 -0
- package/dist/esm/lib/engine/handlers/commitStage.js +22 -4
- package/dist/esm/lib/engine/handlers/stageError.d.ts +9 -0
- package/dist/esm/lib/engine/handlers/stageError.js +23 -1
- package/dist/esm/lib/engine/index.d.ts +2 -2
- package/dist/esm/lib/engine/index.js +1 -1
- package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +27 -13
- package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +68 -40
- package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.d.ts +4 -1
- package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.js +19 -2
- package/dist/esm/lib/engine/narrative/NarrativeFlowRecorder.d.ts +22 -3
- package/dist/esm/lib/engine/narrative/NarrativeFlowRecorder.js +61 -9
- package/dist/esm/lib/engine/narrative/NullControlFlowNarrativeGenerator.d.ts +1 -0
- package/dist/esm/lib/engine/narrative/NullControlFlowNarrativeGenerator.js +2 -1
- package/dist/esm/lib/engine/narrative/formatting/sentences.d.ts +23 -0
- package/dist/esm/lib/engine/narrative/formatting/sentences.js +127 -1
- package/dist/esm/lib/engine/narrative/index.d.ts +2 -2
- package/dist/esm/lib/engine/narrative/index.js +1 -1
- package/dist/esm/lib/engine/narrative/narrativeTypes.d.ts +27 -21
- package/dist/esm/lib/engine/narrative/narrativeTypes.js +1 -1
- package/dist/esm/lib/engine/narrative/recorders/ManifestFlowRecorder.d.ts +45 -2
- package/dist/esm/lib/engine/narrative/recorders/ManifestFlowRecorder.js +55 -2
- package/dist/esm/lib/engine/narrative/recorders/index.d.ts +1 -1
- package/dist/esm/lib/engine/narrative/recorders/index.js +1 -1
- package/dist/esm/lib/engine/narrative/types.d.ts +74 -5
- package/dist/esm/lib/engine/narrative/types.js +1 -1
- package/dist/esm/lib/engine/traversal/FlowchartTraverser.d.ts +59 -19
- package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +194 -118
- package/dist/esm/lib/engine/traversalContext.d.ts +7 -2
- package/dist/esm/lib/engine/traversalContext.js +6 -3
- package/dist/esm/lib/engine/types.d.ts +52 -57
- package/dist/esm/lib/engine/types.js +1 -1
- package/dist/esm/lib/errors/terminalFailure.d.ts +29 -0
- package/dist/esm/lib/errors/terminalFailure.js +60 -0
- package/dist/esm/lib/{decide → filter}/evaluator.d.ts +7 -2
- package/dist/esm/lib/filter/evaluator.js +135 -0
- package/dist/esm/lib/ids/idempotencyKey.d.ts +14 -0
- package/dist/esm/lib/ids/idempotencyKey.js +24 -0
- package/dist/esm/lib/memory/StageContext.d.ts +123 -3
- package/dist/esm/lib/memory/StageContext.js +245 -4
- package/dist/esm/lib/memory/attention.d.ts +26 -0
- package/dist/esm/lib/memory/attention.js +171 -0
- package/dist/esm/lib/memory/borrowedMutation.d.ts +8 -0
- package/dist/esm/lib/memory/borrowedMutation.js +14 -1
- package/dist/esm/lib/memory/frameTypes.d.ts +38 -0
- package/dist/esm/lib/memory/frameTypes.js +3 -1
- package/dist/esm/lib/memory/redaction.d.ts +12 -0
- package/dist/esm/lib/memory/redaction.js +54 -5
- package/dist/esm/lib/pause/record.js +10 -1
- package/dist/esm/lib/pause/types.d.ts +19 -0
- package/dist/esm/lib/pause/types.js +17 -1
- package/dist/esm/lib/reactive/createTypedScope.js +3 -1
- package/dist/esm/lib/reactive/types.d.ts +36 -4
- package/dist/esm/lib/reactive/types.js +3 -1
- package/dist/esm/lib/recorder/AttemptRecorder.d.ts +141 -0
- package/dist/esm/lib/recorder/AttemptRecorder.js +412 -0
- package/dist/esm/lib/recorder/ControlDepRecorder.d.ts +36 -2
- package/dist/esm/lib/recorder/ControlDepRecorder.js +50 -2
- package/dist/esm/lib/recorder/EmitRecorder.d.ts +3 -0
- package/dist/esm/lib/recorder/EmitRecorder.js +1 -1
- package/dist/esm/lib/recorder/InOutRecorder.d.ts +37 -1
- package/dist/esm/lib/recorder/InOutRecorder.js +75 -6
- package/dist/esm/lib/recorder/QualityRecorder.d.ts +32 -5
- package/dist/esm/lib/recorder/QualityRecorder.js +87 -29
- package/dist/esm/lib/recorder/TopologyRecorder.d.ts +35 -5
- package/dist/esm/lib/recorder/TopologyRecorder.js +76 -2
- package/dist/esm/lib/recorder/attemptMetricRows.d.ts +11 -0
- package/dist/esm/lib/recorder/attemptMetricRows.js +202 -0
- package/dist/esm/lib/recorder/attemptMetrics.d.ts +7 -0
- package/dist/esm/lib/recorder/attemptMetrics.js +165 -0
- package/dist/esm/lib/recorder/attemptMetricsTypes.d.ts +114 -0
- package/dist/esm/lib/recorder/attemptMetricsTypes.js +2 -0
- package/dist/esm/lib/recorder/attemptOTel.d.ts +78 -0
- package/dist/esm/lib/recorder/attemptOTel.js +107 -0
- package/dist/esm/lib/recorder/attemptSeries.d.ts +81 -0
- package/dist/esm/lib/recorder/attemptSeries.js +103 -0
- package/dist/esm/lib/recorder/hooks.d.ts +9 -0
- package/dist/esm/lib/recorder/hooks.js +4 -1
- package/dist/esm/lib/runner/DeferredObserverTier.js +13 -1
- package/dist/esm/lib/runner/ExecutionRuntime.d.ts +54 -6
- package/dist/esm/lib/runner/ExecutionRuntime.js +57 -5
- package/dist/esm/lib/runner/FlowChartExecutor.d.ts +46 -2
- package/dist/esm/lib/runner/FlowChartExecutor.js +330 -101
- package/dist/esm/lib/runner/RunnableChart.d.ts +6 -0
- package/dist/esm/lib/runner/RunnableChart.js +5 -1
- package/dist/esm/lib/runner/attach.d.ts +2 -1
- package/dist/esm/lib/runner/attach.js +8 -2
- package/dist/esm/lib/runner/checkpoint.js +3 -1
- package/dist/esm/lib/runner/deadline.d.ts +42 -0
- package/dist/esm/lib/runner/deadline.js +90 -0
- package/dist/esm/lib/runner/index.d.ts +3 -1
- package/dist/esm/lib/runner/index.js +2 -1
- package/dist/esm/lib/runner/options.d.ts +17 -0
- package/dist/esm/lib/runner/options.js +3 -1
- package/dist/esm/lib/runner/recordSink.d.ts +128 -0
- package/dist/esm/lib/runner/recordSink.js +296 -0
- package/dist/esm/lib/runner/resume.d.ts +3 -0
- package/dist/esm/lib/runner/resume.js +22 -2
- package/dist/esm/lib/runner/snapshot.d.ts +2 -2
- package/dist/esm/lib/runner/snapshot.js +6 -2
- package/dist/esm/lib/scope/ScopeFacade.d.ts +118 -4
- package/dist/esm/lib/scope/ScopeFacade.js +304 -7
- package/dist/esm/lib/scope/recorders/DebugRecorder.d.ts +17 -3
- package/dist/esm/lib/scope/recorders/DebugRecorder.js +79 -13
- package/dist/esm/lib/scope/recorders/MetricRecorder.d.ts +10 -0
- package/dist/esm/lib/scope/recorders/MetricRecorder.js +15 -2
- package/dist/esm/lib/scope/runtime.d.ts +3 -0
- package/dist/esm/lib/scope/runtime.js +1 -1
- package/dist/esm/lib/scope/types.d.ts +6 -0
- package/dist/esm/lib/scope/types.js +1 -1
- package/dist/esm/lib/sinks/fileSink.d.ts +135 -0
- package/dist/esm/lib/sinks/fileSink.js +387 -0
- package/dist/esm/recorders.d.ts +8 -2
- package/dist/esm/recorders.js +7 -1
- package/dist/esm/sinks.d.ts +23 -0
- package/dist/esm/sinks.js +23 -0
- package/dist/esm/trace.d.ts +2 -2
- package/dist/esm/trace.js +1 -1
- package/dist/index.js +77 -60
- package/dist/lib/attempt/anySignal.js +43 -0
- package/dist/lib/attempt/call.js +134 -0
- package/dist/lib/attempt/category.js +136 -0
- package/dist/lib/attempt/correlation.js +186 -0
- package/dist/lib/attempt/deadline.js +112 -0
- package/dist/lib/attempt/decision.js +139 -0
- package/dist/lib/attempt/effect.js +174 -0
- package/dist/lib/attempt/errors.js +49 -0
- package/dist/lib/attempt/index.js +26 -0
- package/dist/lib/attempt/name.js +48 -0
- package/dist/lib/attempt/observed.js +177 -0
- package/dist/lib/attempt/policy.js +92 -0
- package/dist/lib/attempt/record.js +29 -0
- package/dist/lib/attempt/retryLoopContext.js +31 -0
- package/dist/lib/attempt/retryLoopTypes.js +3 -0
- package/dist/lib/attempt/runner.js +530 -0
- package/dist/lib/attempt/standalone.js +130 -0
- package/dist/lib/attempt/types.js +17 -0
- package/dist/lib/budget/index.js +17 -0
- package/dist/lib/budget/timeBudget.js +674 -0
- package/dist/lib/builder/FlowChartBuilder.js +199 -9
- package/dist/lib/builder/retryLoop.js +287 -0
- package/dist/lib/builder/types.js +1 -1
- package/dist/lib/decide/decide.js +2 -2
- package/dist/lib/decide/index.js +2 -2
- package/dist/lib/decide/types.js +1 -8
- package/dist/lib/engine/graph/StageNode.js +1 -1
- package/dist/lib/engine/graph/prefixNodeTree.js +5 -1
- package/dist/lib/engine/handlers/ChildrenExecutor.js +36 -6
- package/dist/lib/engine/handlers/DeciderHandler.js +7 -3
- package/dist/lib/engine/handlers/ResumeEntry.js +3 -1
- package/dist/lib/engine/handlers/SelectorHandler.js +4 -3
- package/dist/lib/engine/handlers/StageRunner.js +36 -9
- package/dist/lib/engine/handlers/SubflowExecutor.js +24 -5
- package/dist/lib/engine/handlers/commitStage.js +24 -5
- package/dist/lib/engine/handlers/stageError.js +26 -2
- package/dist/lib/engine/index.js +1 -1
- package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +67 -39
- package/dist/lib/engine/narrative/FlowRecorderDispatcher.js +19 -2
- package/dist/lib/engine/narrative/NarrativeFlowRecorder.js +60 -8
- package/dist/lib/engine/narrative/NullControlFlowNarrativeGenerator.js +2 -1
- package/dist/lib/engine/narrative/formatting/sentences.js +131 -2
- package/dist/lib/engine/narrative/index.js +1 -1
- package/dist/lib/engine/narrative/narrativeTypes.js +1 -1
- package/dist/lib/engine/narrative/recorders/ManifestFlowRecorder.js +55 -2
- package/dist/lib/engine/narrative/recorders/index.js +1 -1
- package/dist/lib/engine/narrative/types.js +1 -1
- package/dist/lib/engine/traversal/FlowchartTraverser.js +192 -116
- package/dist/lib/engine/traversalContext.js +6 -3
- package/dist/lib/engine/types.js +1 -1
- package/dist/lib/errors/terminalFailure.js +64 -0
- package/dist/lib/filter/evaluator.js +139 -0
- package/dist/lib/ids/idempotencyKey.js +28 -0
- package/dist/lib/memory/StageContext.js +246 -5
- package/dist/lib/memory/attention.js +175 -0
- package/dist/lib/memory/borrowedMutation.js +16 -2
- package/dist/lib/memory/frameTypes.js +3 -1
- package/dist/lib/memory/redaction.js +54 -5
- package/dist/lib/pause/record.js +10 -1
- package/dist/lib/pause/types.js +17 -1
- package/dist/lib/reactive/createTypedScope.js +3 -1
- package/dist/lib/reactive/types.js +3 -1
- package/dist/lib/recorder/AttemptRecorder.js +417 -0
- package/dist/lib/recorder/ControlDepRecorder.js +50 -2
- package/dist/lib/recorder/EmitRecorder.js +1 -1
- package/dist/lib/recorder/InOutRecorder.js +75 -6
- package/dist/lib/recorder/QualityRecorder.js +87 -29
- package/dist/lib/recorder/TopologyRecorder.js +76 -2
- package/dist/lib/recorder/attemptMetricRows.js +209 -0
- package/dist/lib/recorder/attemptMetrics.js +174 -0
- package/dist/lib/recorder/attemptMetricsTypes.js +3 -0
- package/dist/lib/recorder/attemptOTel.js +111 -0
- package/dist/lib/recorder/attemptSeries.js +113 -0
- package/dist/lib/recorder/hooks.js +4 -1
- package/dist/lib/runner/DeferredObserverTier.js +13 -1
- package/dist/lib/runner/ExecutionRuntime.js +57 -5
- package/dist/lib/runner/FlowChartExecutor.js +330 -101
- package/dist/lib/runner/RunnableChart.js +5 -1
- package/dist/lib/runner/attach.js +8 -2
- package/dist/lib/runner/checkpoint.js +3 -1
- package/dist/lib/runner/deadline.js +94 -0
- package/dist/lib/runner/index.js +4 -2
- package/dist/lib/runner/options.js +3 -1
- package/dist/lib/runner/recordSink.js +302 -0
- package/dist/lib/runner/resume.js +22 -2
- package/dist/lib/runner/snapshot.js +6 -2
- package/dist/lib/scope/ScopeFacade.js +303 -6
- package/dist/lib/scope/recorders/DebugRecorder.js +79 -13
- package/dist/lib/scope/recorders/MetricRecorder.js +15 -2
- package/dist/lib/scope/runtime.js +1 -1
- package/dist/lib/scope/types.js +1 -1
- package/dist/lib/sinks/fileSink.js +392 -0
- package/dist/recorders.js +10 -2
- package/dist/sinks.js +32 -0
- package/dist/trace.js +1 -1
- package/dist/types/index.d.ts +62 -2
- package/dist/types/lib/attempt/anySignal.d.ts +19 -0
- package/dist/types/lib/attempt/call.d.ts +88 -0
- package/dist/types/lib/attempt/category.d.ts +37 -0
- package/dist/types/lib/attempt/correlation.d.ts +95 -0
- package/dist/types/lib/attempt/deadline.d.ts +44 -0
- package/dist/types/lib/attempt/decision.d.ts +52 -0
- package/dist/types/lib/attempt/effect.d.ts +76 -0
- package/dist/types/lib/attempt/errors.d.ts +41 -0
- package/dist/types/lib/attempt/index.d.ts +18 -0
- package/dist/types/lib/attempt/name.d.ts +21 -0
- package/dist/types/lib/attempt/observed.d.ts +66 -0
- package/dist/types/lib/attempt/policy.d.ts +45 -0
- package/dist/types/lib/attempt/record.d.ts +11 -0
- package/dist/types/lib/attempt/retryLoopContext.d.ts +18 -0
- package/dist/types/lib/attempt/retryLoopTypes.d.ts +18 -0
- package/dist/types/lib/attempt/runner.d.ts +157 -0
- package/dist/types/lib/attempt/standalone.d.ts +47 -0
- package/dist/types/lib/attempt/types.d.ts +453 -0
- package/dist/types/lib/budget/index.d.ts +9 -0
- package/dist/types/lib/budget/timeBudget.d.ts +136 -0
- package/dist/types/lib/builder/FlowChartBuilder.d.ts +88 -3
- package/dist/types/lib/builder/retryLoop.d.ts +56 -0
- package/dist/types/lib/builder/types.d.ts +35 -1
- package/dist/types/lib/decide/index.d.ts +1 -1
- package/dist/types/lib/decide/types.d.ts +3 -0
- package/dist/types/lib/engine/graph/StageNode.d.ts +11 -1
- package/dist/types/lib/engine/handlers/StageRunner.d.ts +8 -1
- package/dist/types/lib/engine/handlers/commitStage.d.ts +7 -0
- package/dist/types/lib/engine/handlers/stageError.d.ts +9 -0
- package/dist/types/lib/engine/index.d.ts +2 -2
- package/dist/types/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +27 -13
- package/dist/types/lib/engine/narrative/FlowRecorderDispatcher.d.ts +4 -1
- package/dist/types/lib/engine/narrative/NarrativeFlowRecorder.d.ts +22 -3
- package/dist/types/lib/engine/narrative/NullControlFlowNarrativeGenerator.d.ts +1 -0
- package/dist/types/lib/engine/narrative/formatting/sentences.d.ts +23 -0
- package/dist/types/lib/engine/narrative/index.d.ts +2 -2
- package/dist/types/lib/engine/narrative/narrativeTypes.d.ts +27 -21
- package/dist/types/lib/engine/narrative/recorders/ManifestFlowRecorder.d.ts +45 -2
- package/dist/types/lib/engine/narrative/recorders/index.d.ts +1 -1
- package/dist/types/lib/engine/narrative/types.d.ts +74 -5
- package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +59 -19
- package/dist/types/lib/engine/traversalContext.d.ts +7 -2
- package/dist/types/lib/engine/types.d.ts +52 -57
- package/dist/types/lib/errors/terminalFailure.d.ts +29 -0
- package/dist/types/lib/{decide → filter}/evaluator.d.ts +7 -2
- package/dist/types/lib/ids/idempotencyKey.d.ts +14 -0
- package/dist/types/lib/memory/StageContext.d.ts +123 -3
- package/dist/types/lib/memory/attention.d.ts +26 -0
- package/dist/types/lib/memory/borrowedMutation.d.ts +8 -0
- package/dist/types/lib/memory/frameTypes.d.ts +38 -0
- package/dist/types/lib/memory/redaction.d.ts +12 -0
- package/dist/types/lib/pause/types.d.ts +19 -0
- package/dist/types/lib/reactive/types.d.ts +36 -4
- package/dist/types/lib/recorder/AttemptRecorder.d.ts +141 -0
- package/dist/types/lib/recorder/ControlDepRecorder.d.ts +36 -2
- package/dist/types/lib/recorder/EmitRecorder.d.ts +3 -0
- package/dist/types/lib/recorder/InOutRecorder.d.ts +37 -1
- package/dist/types/lib/recorder/QualityRecorder.d.ts +32 -5
- package/dist/types/lib/recorder/TopologyRecorder.d.ts +35 -5
- package/dist/types/lib/recorder/attemptMetricRows.d.ts +11 -0
- package/dist/types/lib/recorder/attemptMetrics.d.ts +7 -0
- package/dist/types/lib/recorder/attemptMetricsTypes.d.ts +114 -0
- package/dist/types/lib/recorder/attemptOTel.d.ts +78 -0
- package/dist/types/lib/recorder/attemptSeries.d.ts +81 -0
- package/dist/types/lib/recorder/hooks.d.ts +9 -0
- package/dist/types/lib/runner/ExecutionRuntime.d.ts +54 -6
- package/dist/types/lib/runner/FlowChartExecutor.d.ts +46 -2
- package/dist/types/lib/runner/RunnableChart.d.ts +6 -0
- package/dist/types/lib/runner/attach.d.ts +2 -1
- package/dist/types/lib/runner/deadline.d.ts +42 -0
- package/dist/types/lib/runner/index.d.ts +3 -1
- package/dist/types/lib/runner/options.d.ts +17 -0
- package/dist/types/lib/runner/recordSink.d.ts +128 -0
- package/dist/types/lib/runner/resume.d.ts +3 -0
- package/dist/types/lib/runner/snapshot.d.ts +2 -2
- package/dist/types/lib/scope/ScopeFacade.d.ts +118 -4
- package/dist/types/lib/scope/recorders/DebugRecorder.d.ts +17 -3
- package/dist/types/lib/scope/recorders/MetricRecorder.d.ts +10 -0
- package/dist/types/lib/scope/runtime.d.ts +3 -0
- package/dist/types/lib/scope/types.d.ts +6 -0
- package/dist/types/lib/sinks/fileSink.d.ts +135 -0
- package/dist/types/recorders.d.ts +8 -2
- package/dist/types/sinks.d.ts +23 -0
- package/dist/types/trace.d.ts +2 -2
- package/package.json +20 -6
- package/dist/esm/lib/decide/evaluator.js +0 -130
- package/dist/lib/decide/evaluator.js +0 -134
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* recorder/attemptSeries.ts — what a RECORDER keeps of a series: the one evidence predicate, the stop that gave up, and a
|
|
3
|
+
* per-series tally rebuilt from `onAttempt` records (design §5.1, P1c).
|
|
4
|
+
*
|
|
5
|
+
* WHY one module: seven built-in recorders account for attempts, and each must agree on two questions — "is this
|
|
6
|
+
* series worth a row?" and "did it give up?" — or a Topology node and a boundary count would disagree about the
|
|
7
|
+
* same run. Asked here, once.
|
|
8
|
+
*
|
|
9
|
+
* THE predicate (`isRetryEvidence`): a series is evidence when it RETRIED (some attempt was followed by another),
|
|
10
|
+
* GAVE UP while a retry was possible (it stopped `exhausted`, `declined` or `no-time-left` with `of > 1`, §3.9), or
|
|
11
|
+
* TIMED OUT (an attempt ran out of its cap or the deadline — P1b's lone timeout is the incident's own shape). A
|
|
12
|
+
* policy stage that succeeded first time — or that paused or was aborted on its first attempt — is
|
|
13
|
+
* indistinguishable from a stage with no policy in every recorder row, so a chart in which nothing retried keeps
|
|
14
|
+
* those rows byte-identical (law 2). So is a LONE attempt (`of: 1`, recorded for every stage of a run with a
|
|
15
|
+
* deadline, P1b) that merely failed: a stage error like any other, so a deadline alone never multiplies rows.
|
|
16
|
+
*
|
|
17
|
+
* Records arrive in order within a series, so the predicate is decided at the series' FIRST record: attempt 1 is
|
|
18
|
+
* evidence iff it did not end the series quietly, and every later attempt is evidence by being one.
|
|
19
|
+
*
|
|
20
|
+
* L5 (`recorder/**`), beside the stores: it imports the attempt vocabulary's types only (the L0 leaf), so
|
|
21
|
+
* `recorder/` never takes a runtime edge into `attempt/` — whose runner reaches `decide/` and `scope/`, which
|
|
22
|
+
* import `recorder/` (a module cycle).
|
|
23
|
+
*/
|
|
24
|
+
import { joinPath, subflowSegmentsOf } from 'foottrace';
|
|
25
|
+
/** The stop reasons that mean "gave up" — apart from `aborted` (the run ended it) and `paused` (§3.9). */
|
|
26
|
+
const GAVE_UP = new Set(['exhausted', 'declined', 'no-time-left']);
|
|
27
|
+
/** The series stopped on this record because retrying was given up (exhausted, declined or no time left). */
|
|
28
|
+
export function gaveUp(record) {
|
|
29
|
+
return record.next === 'stop' && GAVE_UP.has(record.reason);
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* The record belongs to a STAGE's series that retried, gave up or timed out — the one row predicate every recorder
|
|
33
|
+
* shares. A call's or an observed attempt (`scope.$call`, `observed()`, P2) is never a row here: these recorders keep
|
|
34
|
+
* one row per stage execution, and a call is counted per TARGET (the `attempts()` recorder, P7) — drawn as a stage's
|
|
35
|
+
* retry it would say the stage retried when only its call did.
|
|
36
|
+
*/
|
|
37
|
+
export function isRetryEvidence(record) {
|
|
38
|
+
if (record.kind !== 'stage')
|
|
39
|
+
return false;
|
|
40
|
+
return (record.attempt > 1 ||
|
|
41
|
+
record.next === 'retry' ||
|
|
42
|
+
record.outcome === 'timeout' ||
|
|
43
|
+
(gaveUp(record) && (record.of ?? 1) > 1));
|
|
44
|
+
}
|
|
45
|
+
/** Did the attempt itself fail — a failure, a timeout or the run's abort (not a success, not a pause)? */
|
|
46
|
+
export function attemptFailed(record) {
|
|
47
|
+
return record.outcome === 'failed' || record.outcome === 'timeout' || record.outcome === 'aborted';
|
|
48
|
+
}
|
|
49
|
+
/** The record's name. */
|
|
50
|
+
export function attemptRef(record) {
|
|
51
|
+
return { series: record.series, attempt: record.attempt };
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* The path-prefixed id of the subflow an attempt's stage ran in (`'sf-outer/sf-inner'`), or `undefined` at the top
|
|
55
|
+
* level — read off the stage execution's `runtimeStageId` (the event's, else the series'), the one id that always
|
|
56
|
+
* carries it.
|
|
57
|
+
*/
|
|
58
|
+
export function subflowOfAttempt(event) {
|
|
59
|
+
const segments = subflowSegmentsOf(event.traversalContext?.runtimeStageId ?? event.record.series);
|
|
60
|
+
return segments.length > 0 ? joinPath(...segments) : undefined;
|
|
61
|
+
}
|
|
62
|
+
/** A zeroed per-outcome count. */
|
|
63
|
+
export function emptyOutcomeCounts() {
|
|
64
|
+
return { ok: 0, failed: 0, timeout: 0, aborted: 0, paused: 0 };
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Per-series tallies, keyed by `series`, for the series that are evidence. `add` returns the series' state after
|
|
68
|
+
* the record, or `undefined` for a record that is not evidence (nothing to keep).
|
|
69
|
+
*/
|
|
70
|
+
export class AttemptSeriesBook {
|
|
71
|
+
bySeries = new Map();
|
|
72
|
+
add(record) {
|
|
73
|
+
if (!isRetryEvidence(record))
|
|
74
|
+
return undefined;
|
|
75
|
+
let entry = this.bySeries.get(record.series);
|
|
76
|
+
if (!entry) {
|
|
77
|
+
entry = { refs: [], counts: emptyOutcomeCounts() };
|
|
78
|
+
this.bySeries.set(record.series, entry);
|
|
79
|
+
}
|
|
80
|
+
entry.refs.push(attemptRef(record));
|
|
81
|
+
entry.counts[record.outcome] += 1;
|
|
82
|
+
const attempts = [...entry.refs];
|
|
83
|
+
if (record.next === 'retry')
|
|
84
|
+
return { series: record.series, attempts };
|
|
85
|
+
return { series: record.series, attempts, summary: summaryOf(entry.refs.length, entry.counts, record) };
|
|
86
|
+
}
|
|
87
|
+
clear() {
|
|
88
|
+
this.bySeries.clear();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function summaryOf(count, counts, last) {
|
|
92
|
+
return {
|
|
93
|
+
count,
|
|
94
|
+
...counts,
|
|
95
|
+
last: {
|
|
96
|
+
next: last.next,
|
|
97
|
+
reason: last.reason,
|
|
98
|
+
...(last.category !== undefined && { category: last.category }),
|
|
99
|
+
...(last.retryOnThrew && { retryOnThrew: true }),
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZW1wdFNlcmllcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcmVjb3JkZXIvYXR0ZW1wdFNlcmllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNCRztBQUVILE9BQU8sRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFnQnhELDBHQUEwRztBQUMxRyxNQUFNLE9BQU8sR0FBK0IsSUFBSSxHQUFHLENBQWdCLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0FBRTlHLDZHQUE2RztBQUM3RyxNQUFNLFVBQVUsTUFBTSxDQUFDLE1BQThDO0lBQ25FLE9BQU8sTUFBTSxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDOUQsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxNQUFxQjtJQUNuRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssT0FBTztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQzFDLE9BQU8sQ0FDTCxNQUFNLENBQUMsT0FBTyxHQUFHLENBQUM7UUFDbEIsTUFBTSxDQUFDLElBQUksS0FBSyxPQUFPO1FBQ3ZCLE1BQU0sQ0FBQyxPQUFPLEtBQUssU0FBUztRQUM1QixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQ3pDLENBQUM7QUFDSixDQUFDO0FBRUQsMEdBQTBHO0FBQzFHLE1BQU0sVUFBVSxhQUFhLENBQUMsTUFBcUI7SUFDakQsT0FBTyxNQUFNLENBQUMsT0FBTyxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsT0FBTyxLQUFLLFNBQVMsSUFBSSxNQUFNLENBQUMsT0FB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RUFBRSxDQUFDO1NBQzFEO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHJlY29yZGVyL2F0dGVtcHRTZXJpZXMudHMg4oCUIHdoYXQgYSBSRUNPUkRFUiBrZWVwcyBvZiBhIHNlcmllczogdGhlIG9uZSBldmlkZW5jZSBwcmVkaWNhdGUsIHRoZSBzdG9wIHRoYXQgZ2F2ZSB1cCwgYW5kIGFcbiAqIHBlci1zZXJpZXMgdGFsbHkgcmVidWlsdCBmcm9tIGBvbkF0dGVtcHRgIHJlY29yZHMgKGRlc2lnbiDCpzUuMSwgUDFjKS5cbiAqXG4gKiBXSFkgb25lIG1vZHVsZTogc2V2ZW4gYnVpbHQtaW4gcmVjb3JkZXJzIGFjY291bnQgZm9yIGF0dGVtcHRzLCBhbmQgZWFjaCBtdXN0IGFncmVlIG9uIHR3byBxdWVzdGlvbnMg4oCUIFwiaXMgdGhpc1xuICogc2VyaWVzIHdvcnRoIGEgcm93P1wiIGFuZCBcImRpZCBpdCBnaXZlIHVwP1wiIOKAlCBvciBhIFRvcG9sb2d5IG5vZGUgYW5kIGEgYm91bmRhcnkgY291bnQgd291bGQgZGlzYWdyZWUgYWJvdXQgdGhlXG4gKiBzYW1lIHJ1bi4gQXNrZWQgaGVyZSwgb25jZS5cbiAqXG4gKiBUSEUgcHJlZGljYXRlIChgaXNSZXRyeUV2aWRlbmNlYCk6IGEgc2VyaWVzIGlzIGV2aWRlbmNlIHdoZW4gaXQgUkVUUklFRCAoc29tZSBhdHRlbXB0IHdhcyBmb2xsb3dlZCBieSBhbm90aGVyKSxcbiAqIEdBVkUgVVAgd2hpbGUgYSByZXRyeSB3YXMgcG9zc2libGUgKGl0IHN0b3BwZWQgYGV4aGF1c3RlZGAsIGBkZWNsaW5lZGAgb3IgYG5vLXRpbWUtbGVmdGAgd2l0aCBgb2YgPiAxYCwgwqczLjkpLCBvclxuICogVElNRUQgT1VUIChhbiBhdHRlbXB0IHJhbiBvdXQgb2YgaXRzIGNhcCBvciB0aGUgZGVhZGxpbmUg4oCUIFAxYidzIGxvbmUgdGltZW91dCBpcyB0aGUgaW5jaWRlbnQncyBvd24gc2hhcGUpLiBBXG4gKiBwb2xpY3kgc3RhZ2UgdGhhdCBzdWNjZWVkZWQgZmlyc3QgdGltZSDigJQgb3IgdGhhdCBwYXVzZWQgb3Igd2FzIGFib3J0ZWQgb24gaXRzIGZpcnN0IGF0dGVtcHQg4oCUIGlzXG4gKiBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGEgc3RhZ2Ugd2l0aCBubyBwb2xpY3kgaW4gZXZlcnkgcmVjb3JkZXIgcm93LCBzbyBhIGNoYXJ0IGluIHdoaWNoIG5vdGhpbmcgcmV0cmllZCBrZWVwc1xuICogdGhvc2Ugcm93cyBieXRlLWlkZW50aWNhbCAobGF3IDIpLiBTbyBpcyBhIExPTkUgYXR0ZW1wdCAoYG9mOiAxYCwgcmVjb3JkZWQgZm9yIGV2ZXJ5IHN0YWdlIG9mIGEgcnVuIHdpdGggYVxuICogZGVhZGxpbmUsIFAxYikgdGhhdCBtZXJlbHkgZmFpbGVkOiBhIHN0YWdlIGVycm9yIGxpa2UgYW55IG90aGVyLCBzbyBhIGRlYWRsaW5lIGFsb25lIG5ldmVyIG11bHRpcGxpZXMgcm93cy5cbiAqXG4gKiBSZWNvcmRzIGFycml2ZSBpbiBvcmRlciB3aXRoaW4gYSBzZXJpZXMsIHNvIHRoZSBwcmVkaWNhdGUgaXMgZGVjaWRlZCBhdCB0aGUgc2VyaWVzJyBGSVJTVCByZWNvcmQ6IGF0dGVtcHQgMSBpc1xuICogZXZpZGVuY2UgaWZmIGl0IGRpZCBub3QgZW5kIHRoZSBzZXJpZXMgcXVpZXRseSwgYW5kIGV2ZXJ5IGxhdGVyIGF0dGVtcHQgaXMgZXZpZGVuY2UgYnkgYmVpbmcgb25lLlxuICpcbiAqIEw1IChgcmVjb3JkZXIvKipgKSwgYmVzaWRlIHRoZSBzdG9yZXM6IGl0IGltcG9ydHMgdGhlIGF0dGVtcHQgdm9jYWJ1bGFyeSdzIHR5cGVzIG9ubHkgKHRoZSBMMCBsZWFmKSwgc29cbiAqIGByZWNvcmRlci9gIG5ldmVyIHRha2VzIGEgcnVudGltZSBlZGdlIGludG8gYGF0dGVtcHQvYCDigJQgd2hvc2UgcnVubmVyIHJlYWNoZXMgYGRlY2lkZS9gIGFuZCBgc2NvcGUvYCwgd2hpY2hcbiAqIGltcG9ydCBgcmVjb3JkZXIvYCAoYSBtb2R1bGUgY3ljbGUpLlxuICovXG5cbmltcG9ydCB7IGpvaW5QYXRoLCBzdWJmbG93U2VnbWVudHNPZiB9IGZyb20gJ2Zvb3R0cmFjZSc7XG5cbmltcG9ydCB0eXBlIHsgQXR0ZW1wdE91dGNvbWUsIEF0dGVtcHRSZWFzb24sIEF0dGVtcHRSZWNvcmQsIEF0dGVtcHRTdW1tYXJ5IH0gZnJvbSAnLi4vYXR0ZW1wdC90eXBlcy5qcyc7XG5cbi8qKlxuICogT25lIGF0dGVtcHQsIG5hbWVkIOKAlCBgc2VyaWVzYCAodGhlIHN0YWdlIGV4ZWN1dGlvbidzIGBydW50aW1lU3RhZ2VJZGApIHBsdXMgdGhlIDEtYmFzZWQgYGF0dGVtcHRgLiBUaGVcbiAqIGlkZW50aXR5IGBBdHRlbXB0UmVjb3JkYCBjYXJyaWVzIHVudGlsIHRoZSBlbmdpbmUgc3RhbXBzIGZvb3R0cmFjZSdzIGF0dGVtcHQgaWQgKGRlc2lnbiDCpzMuNCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXR0ZW1wdFJlZiB7XG4gIHJlYWRvbmx5IHNlcmllczogc3RyaW5nO1xuICByZWFkb25seSBhdHRlbXB0OiBudW1iZXI7XG59XG5cbi8qKiBBdHRlbXB0IGNvdW50cyBwZXIgb3V0Y29tZSDigJQgdGhlIHNoYXBlIGBBdHRlbXB0U3VtbWFyeWAgdXNlcywgd2l0aG91dCB0aGUgc2VyaWVzJyBlbmQuICovXG5leHBvcnQgdHlwZSBBdHRlbXB0T3V0Y29tZUNvdW50cyA9IFJlYWRvbmx5PFJlY29yZDxBdHRlbXB0T3V0Y29tZSwgbnVtYmVyPj47XG5cbi8qKiBUaGUgc3RvcCByZWFzb25zIHRoYXQgbWVhbiBcImdhdmUgdXBcIiDigJQgYXBhcnQgZnJvbSBgYWJvcnRlZGAgKHRoZSBydW4gZW5kZWQgaXQpIGFuZCBgcGF1c2VkYCAowqczLjkpLiAqL1xuY29uc3QgR0FWRV9VUDogUmVhZG9ubHlTZXQ8QXR0ZW1wdFJlYXNvbj4gPSBuZXcgU2V0PEF0dGVtcHRSZWFzb24+KFsnZXhoYXVzdGVkJywgJ2RlY2xpbmVkJywgJ25vLXRpbWUtbGVmdCddKTtcblxuLyoqIFRoZSBzZXJpZXMgc3RvcHBlZCBvbiB0aGlzIHJlY29yZCBiZWNhdXNlIHJldHJ5aW5nIHdhcyBnaXZlbiB1cCAoZXhoYXVzdGVkLCBkZWNsaW5lZCBvciBubyB0aW1lIGxlZnQpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdhdmVVcChyZWNvcmQ6IFBpY2s8QXR0ZW1wdFJlY29yZCwgJ25leHQnIHwgJ3JlYXNvbic+KTogYm9vbGVhbiB7XG4gIHJldHVybiByZWNvcmQubmV4dCA9PT0gJ3N0b3AnICYmIEdBVkVfVVAuaGFzKHJlY29yZC5yZWFzb24pO1xufVxuXG4vKipcbiAqIFRoZSByZWNvcmQgYmVsb25ncyB0byBhIFNUQUdFJ3Mgc2VyaWVzIHRoYXQgcmV0cmllZCwgZ2F2ZSB1cCBvciB0aW1lZCBvdXQg4oCUIHRoZSBvbmUgcm93IHByZWRpY2F0ZSBldmVyeSByZWNvcmRlclxuICogc2hhcmVzLiBBIGNhbGwncyBvciBhbiBvYnNlcnZlZCBhdHRlbXB0IChgc2NvcGUuJGNhbGxgLCBgb2JzZXJ2ZWQoKWAsIFAyKSBpcyBuZXZlciBhIHJvdyBoZXJlOiB0aGVzZSByZWNvcmRlcnMga2VlcFxuICogb25lIHJvdyBwZXIgc3RhZ2UgZXhlY3V0aW9uLCBhbmQgYSBjYWxsIGlzIGNvdW50ZWQgcGVyIFRBUkdFVCAodGhlIGBhdHRlbXB0cygpYCByZWNvcmRlciwgUDcpIOKAlCBkcmF3biBhcyBhIHN0YWdlJ3NcbiAqIHJldHJ5IGl0IHdvdWxkIHNheSB0aGUgc3RhZ2UgcmV0cmllZCB3aGVuIG9ubHkgaXRzIGNhbGwgZGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSZXRyeUV2aWRlbmNlKHJlY29yZDogQXR0ZW1wdFJlY29yZCk6IGJvb2xlYW4ge1xuICBpZiAocmVjb3JkLmtpbmQgIT09ICdzdGFnZScpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIChcbiAgICByZWNvcmQuYXR0ZW1wdCA+IDEgfHxcbiAgICByZWNvcmQubmV4dCA9PT0gJ3JldHJ5JyB8fFxuICAgIHJlY29yZC5vdXRjb21lID09PSAndGltZW91dCcgfHxcbiAgICAoZ2F2ZVVwKHJlY29yZCkgJiYgKHJlY29yZC5vZiA/PyAxKSA+IDEpXG4gICk7XG59XG5cbi8qKiBEaWQgdGhlIGF0dGVtcHQgaXRzZWxmIGZhaWwg4oCUIGEgZmFpbHVyZSwgYSB0aW1lb3V0IG9yIHRoZSBydW4ncyBhYm9ydCAobm90IGEgc3VjY2Vzcywgbm90IGEgcGF1c2UpPyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dGVtcHRGYWlsZWQocmVjb3JkOiBBdHRlbXB0UmVjb3JkKTogYm9vbGVhbiB7XG4gIHJldHVybiByZWNvcmQub3V0Y29tZSA9PT0gJ2ZhaWxlZCcgfHwgcmVjb3JkLm91dGNvbWUgPT09ICd0aW1lb3V0JyB8fCByZWNvcmQub3V0Y29tZSA9PT0gJ2Fib3J0ZWQnO1xufVxuXG4vKiogVGhlIHJlY29yZCdzIG5hbWUuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0ZW1wdFJlZihyZWNvcmQ6IEF0dGVtcHRSZWNvcmQpOiBBdHRlbXB0UmVmIHtcbiAgcmV0dXJuIHsgc2VyaWVzOiByZWNvcmQuc2VyaWVzLCBhdHRlbXB0OiByZWNvcmQuYXR0ZW1wdCB9O1xufVxuXG4vKipcbiAqIFRoZSBwYXRoLXByZWZpeGVkIGlkIG9mIHRoZSBzdWJmbG93IGFuIGF0dGVtcHQncyBzdGFnZSByYW4gaW4gKGAnc2Ytb3V0ZXIvc2YtaW5uZXInYCksIG9yIGB1bmRlZmluZWRgIGF0IHRoZSB0b3BcbiAqIGxldmVsIOKAlCByZWFkIG9mZiB0aGUgc3RhZ2UgZXhlY3V0aW9uJ3MgYHJ1bnRpbWVTdGFnZUlkYCAodGhlIGV2ZW50J3MsIGVsc2UgdGhlIHNlcmllcycpLCB0aGUgb25lIGlkIHRoYXQgYWx3YXlzXG4gKiBjYXJyaWVzIGl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3ViZmxvd09mQXR0ZW1wdChldmVudDoge1xuICByZWFkb25seSByZWNvcmQ6IEF0dGVtcHRSZWNvcmQ7XG4gIHJlYWRvbmx5IHRyYXZlcnNhbENvbnRleHQ/OiB7IHJlYWRvbmx5IHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcgfTtcbn0pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBzZWdtZW50cyA9IHN1YmZsb3dTZWdtZW50c09mKGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkID8/IGV2ZW50LnJlY29yZC5zZXJpZXMpO1xuICByZXR1cm4gc2VnbWVudHMubGVuZ3RoID4gMCA/IGpvaW5QYXRoKC4uLnNlZ21lbnRzKSA6IHVuZGVmaW5lZDtcbn1cblxuLyoqIEEgemVyb2VkIHBlci1vdXRjb21lIGNvdW50LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVtcHR5T3V0Y29tZUNvdW50cygpOiBSZWNvcmQ8QXR0ZW1wdE91dGNvbWUsIG51bWJlcj4ge1xuICByZXR1cm4geyBvazogMCwgZmFpbGVkOiAwLCB0aW1lb3V0OiAwLCBhYm9ydGVkOiAwLCBwYXVzZWQ6IDAgfTtcbn1cblxuLyoqIFdoYXQgYSByZWNvcmRlciBrbm93cyBvZiBvbmUgc2VyaWVzIHNvIGZhci4gYHN1bW1hcnlgIGlzIHByZXNlbnQgb25jZSB0aGUgc2VyaWVzIGVuZGVkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdHRlbXB0U2VyaWVzU3RhdGUge1xuICByZWFkb25seSBzZXJpZXM6IHN0cmluZztcbiAgLyoqIFRoZSBzZXJpZXMnIGF0dGVtcHRzLCBpbiBvcmRlci4gKi9cbiAgcmVhZG9ubHkgYXR0ZW1wdHM6IHJlYWRvbmx5IEF0dGVtcHRSZWZbXTtcbiAgLyoqXG4gICAqIFRoZSBzZXJpZXMgYXQgYSBnbGFuY2Ug4oCUIHRoZSBzYW1lIHZhbHVlIHRoZSBydW5uZXIgc3RhbXBzIG9uIGBTdGFnZVNuYXBzaG90LmF0dGVtcHRTdW1tYXJ5YCwgcmVidWlsdCBmcm9tIHRoZVxuICAgKiByZWNvcmRzLiBBYnNlbnQgd2hpbGUgdGhlIGxhc3QgcmVjb3JkIHNheXMgYHJldHJ5YDogdGhlIHNlcmllcyBpcyBpbiBmbGlnaHQsIG9yIHRoZSBydW4ncyBzaWduYWwgY3V0IGl0cyB3YWl0XG4gICAqIChubyByZWNvcmQgZm9sbG93czsgb25seSB0aGUgZXhlY3V0aW9uIHRyZWUga25vd3MgaG93IGl0IGVuZGVkKS5cbiAgICovXG4gIHJlYWRvbmx5IHN1bW1hcnk/OiBBdHRlbXB0U3VtbWFyeTtcbn1cblxuLyoqXG4gKiBQZXItc2VyaWVzIHRhbGxpZXMsIGtleWVkIGJ5IGBzZXJpZXNgLCBmb3IgdGhlIHNlcmllcyB0aGF0IGFyZSBldmlkZW5jZS4gYGFkZGAgcmV0dXJucyB0aGUgc2VyaWVzJyBzdGF0ZSBhZnRlclxuICogdGhlIHJlY29yZCwgb3IgYHVuZGVmaW5lZGAgZm9yIGEgcmVjb3JkIHRoYXQgaXMgbm90IGV2aWRlbmNlIChub3RoaW5nIHRvIGtlZXApLlxuICovXG5leHBvcnQgY2xhc3MgQXR0ZW1wdFNlcmllc0Jvb2sge1xuICBwcml2YXRlIHJlYWRvbmx5IGJ5U2VyaWVzID0gbmV3IE1hcDxzdHJpbmcsIHsgcmVmczogQXR0ZW1wdFJlZltdOyBjb3VudHM6IFJlY29yZDxBdHRlbXB0T3V0Y29tZSwgbnVtYmVyPiB9PigpO1xuXG4gIGFkZChyZWNvcmQ6IEF0dGVtcHRSZWNvcmQpOiBBdHRlbXB0U2VyaWVzU3RhdGUgfCB1bmRlZmluZWQge1xuICAgIGlmICghaXNSZXRyeUV2aWRlbmNlKHJlY29yZCkpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgbGV0IGVudHJ5ID0gdGhpcy5ieVNlcmllcy5nZXQocmVjb3JkLnNlcmllcyk7XG4gICAgaWYgKCFlbnRyeSkge1xuICAgICAgZW50cnkgPSB7IHJlZnM6IFtdLCBjb3VudHM6IGVtcHR5T3V0Y29tZUNvdW50cygpIH07XG4gICAgICB0aGlzLmJ5U2VyaWVzLnNldChyZWNvcmQuc2VyaWVzLCBlbnRyeSk7XG4gICAgfVxuICAgIGVudHJ5LnJlZnMucHVzaChhdHRlbXB0UmVmKHJlY29yZCkpO1xuICAgIGVudHJ5LmNvdW50c1tyZWNvcmQub3V0Y29tZV0gKz0gMTtcbiAgICBjb25zdCBhdHRlbXB0cyA9IFsuLi5lbnRyeS5yZWZzXTtcbiAgICBpZiAocmVjb3JkLm5leHQgPT09ICdyZXRyeScpIHJldHVybiB7IHNlcmllczogcmVjb3JkLnNlcmllcywgYXR0ZW1wdHMgfTtcbiAgICByZXR1cm4geyBzZXJpZXM6IHJlY29yZC5zZXJpZXMsIGF0dGVtcHRzLCBzdW1tYXJ5OiBzdW1tYXJ5T2YoZW50cnkucmVmcy5sZW5ndGgsIGVudHJ5LmNvdW50cywgcmVjb3JkKSB9O1xuICB9XG5cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5ieVNlcmllcy5jbGVhcigpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN1bW1hcnlPZihjb3VudDogbnVtYmVyLCBjb3VudHM6IFJlY29yZDxBdHRlbXB0T3V0Y29tZSwgbnVtYmVyPiwgbGFzdDogQXR0ZW1wdFJlY29yZCk6IEF0dGVtcHRTdW1tYXJ5IHtcbiAgcmV0dXJuIHtcbiAgICBjb3VudCxcbiAgICAuLi5jb3VudHMsXG4gICAgbGFzdDoge1xuICAgICAgbmV4dDogbGFzdC5uZXh0IGFzIEF0dGVtcHRTdW1tYXJ5WydsYXN0J11bJ25leHQnXSxcbiAgICAgIHJlYXNvbjogbGFzdC5yZWFzb24sXG4gICAgICAuLi4obGFzdC5jYXRlZ29yeSAhPT0gdW5kZWZpbmVkICYmIHsgY2F0ZWdvcnk6IGxhc3QuY2F0ZWdvcnkgfSksXG4gICAgICAuLi4obGFzdC5yZXRyeU9uVGhyZXcgJiYgeyByZXRyeU9uVGhyZXc6IHRydWUgYXMgY29uc3QgfSksXG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
*
|
|
31
31
|
* Pinned by test/lib/recorder/hooks.test.ts (the `@ts-expect-error` probes).
|
|
32
32
|
*/
|
|
33
|
+
import type { RunCorrelation } from '../attempt/types.js';
|
|
33
34
|
import type { FlowRecorder } from '../engine/narrative/types.js';
|
|
34
35
|
import type { ErrorEvent, ScopeRecorder } from '../scope/types.js';
|
|
35
36
|
import type { EmitRecorder } from './EmitRecorder.js';
|
|
@@ -174,6 +175,12 @@ export declare const HOOKS: {
|
|
|
174
175
|
};
|
|
175
176
|
readonly executorMade: false;
|
|
176
177
|
};
|
|
178
|
+
readonly onAttempt: {
|
|
179
|
+
readonly on: {
|
|
180
|
+
readonly flow: "FlowAttemptEvent";
|
|
181
|
+
};
|
|
182
|
+
readonly executorMade: false;
|
|
183
|
+
};
|
|
177
184
|
readonly onStageRetry: {
|
|
178
185
|
readonly on: {
|
|
179
186
|
readonly flow: "FlowStageRetryEvent";
|
|
@@ -240,6 +247,8 @@ export interface FailureSite {
|
|
|
240
247
|
readonly stageId: string;
|
|
241
248
|
readonly runtimeStageId: string;
|
|
242
249
|
readonly pipelineId: string;
|
|
250
|
+
/** The run's correlation, when the site's events carry one — the failure event carries it too. */
|
|
251
|
+
readonly correlation?: RunCorrelation;
|
|
243
252
|
}
|
|
244
253
|
/**
|
|
245
254
|
* THE scope-channel `onError` event for a recorder that threw in `hook` — built in ONE place
|
|
@@ -54,6 +54,8 @@ export const HOOKS = {
|
|
|
54
54
|
onError: { on: { scope: 'ErrorEvent', flow: 'FlowErrorEvent' }, executorMade: false },
|
|
55
55
|
onStageStart: { on: { scope: 'StageEvent' }, executorMade: false },
|
|
56
56
|
onStageEnd: { on: { scope: 'StageEvent' }, executorMade: false },
|
|
57
|
+
// Every attempt of a declared retry policy (10.1): fires DURING a stage, once per attempt, before onStageRetry.
|
|
58
|
+
onAttempt: { on: { flow: 'FlowAttemptEvent' }, executorMade: false },
|
|
57
59
|
// Declarative per-stage retry (9.15): fires DURING a stage, once per failed attempt that will be retried.
|
|
58
60
|
onStageRetry: { on: { flow: 'FlowStageRetryEvent' }, executorMade: false },
|
|
59
61
|
// Throttling (9.39.0, R9): a fork child's error the run's `throttlingErrorChecker` classified.
|
|
@@ -105,6 +107,7 @@ export function recorderFailureEvent(site, thrown, hook) {
|
|
|
105
107
|
error: extractErrorInfo(thrown),
|
|
106
108
|
operation: operationFor(hook),
|
|
107
109
|
channel: 'scope',
|
|
110
|
+
...(site.correlation && { correlation: site.correlation }),
|
|
108
111
|
};
|
|
109
112
|
}
|
|
110
113
|
/**
|
|
@@ -153,4 +156,4 @@ export function fire(recorders, hook, event, onFailure = SWALLOW) {
|
|
|
153
156
|
}
|
|
154
157
|
}
|
|
155
158
|
}
|
|
156
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9va3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JlY29yZGVyL2hvb2tzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0JHO0FBRUgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQWdEMUQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHO0lBQ25CLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFO0lBQzNELE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFO0lBQzdELFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFO0lBQy9ELGVBQWUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUU7SUFDeEUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUU7SUFDOUQsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRTtJQUN0RSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEVBQUUsWUFBWSxFQUFFLEtB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ZWdpc3RyeSBhbmQgdGhlIG9uZSBkaXNwYXRjaGVyIChGNikuXG4gKlxuICogRXZlcnkgcmVjb3JkZXIgaG9vayBuYW1lIGlzIGRlY2xhcmVkIE9OQ0UsIGhlcmUsIGluIGBIT09LU2AuIEV2ZXJ5dGhpbmcgdGhhdCB1c2VkIHRvIGtlZXBcbiAqIGl0cyBvd24gaGFuZCBsaXN0IGRlcml2ZXMgZnJvbSBpdDpcbiAqXG4gKiAgIC0gY2hhbm5lbCByb3V0aW5nIChgQ29tYmluZWRSZWNvcmRlciDCtyBoYXMqUmVjb3JkZXJNZXRob2RzYCkgYXNrcyBgaG9va3NPbihjaGFubmVsKWAg4oCUIHRoZVxuICogICAgIHRocmVlIGhhbmQgbGlzdHMgaXQgcmVwbGFjZWQgKGBSRUNPUkRFUl9FVkVOVF9NRVRIT0RTYCwgYEZMT1df4oCmYCwgYEVNSVRf4oCmYCkgYXJlIGdvbmU7XG4gKiAgIC0gdGhlIGRlZmVycmVkIHRpZXIncyB0YXBzIChgRGVmZXJyZWRPYnNlcnZlclRpZXIgwrcgYnVpbGRTY29wZVRhcCAvIGJ1aWxkRmxvd1RhcGApIGl0ZXJhdGVcbiAqICAgICBgaG9va3NPbmA7XG4gKiAgIC0gYENvbXBvc2l0ZVJlY29yZGVyYCdzIGZhbi1vdXQgaXMgZ2VuZXJhdGVkIGZyb20gYEhPT0tfTkFNRVNgIChldmVyeSBob29rLCBldmVyeSBjaGFubmVsKS5cbiAqXG4gKiBgZmlyZWAgaXMgdGhlIG9uZSBwZXItcmVjb3JkZXIgbG9vcDogY2FsbCB0aGUgaG9vayBvbiBlYWNoIHJlY29yZGVyLCBhbmQgaGFuZCBhIHRocm93IHRvIHRoZVxuICogY2FsbGVyJ3MgZmFpbHVyZSBwb2xpY3kg4oCUIG5ldmVyIHRvIHRoZSBjYWxsZXIncyBjYWxsZXIuIFRoZSBlbmdpbmUga2VlcHMgaXRzIHR3byBwb2xpY2llc1xuICogKHRoZSBzY29wZSBjaGFubmVsIHJvdXRlcyBhIHRocm93IHRvIGV2ZXJ5IHJlY29yZGVyJ3MgYG9uRXJyb3JgOyB0aGUgZmxvdyBjaGFubmVsIHdhcm5zIGluXG4gKiBkZXYgbW9kZSBhbmQgbW92ZXMgb24pOyBgZmlyZWAgb25seSBndWFyYW50ZWVzIHRoYXQgd2hhdGV2ZXIgdGhlIHBvbGljeSBkb2VzLCB0aGUgbG9vcCBnb2VzXG4gKiBvbiBhbmQgbm90aGluZyBlc2NhcGVzLiBCb3Jyb3dlZDogQyMgYE11bHRpY2FzdERlbGVnYXRlYCAob25lIGludm9jYXRpb24gbGlzdCksIE9wZW5UZWxlbWV0cnlcbiAqIGBNdWx0aVNwYW5Qcm9jZXNzb3JgIChvbmUgZmFuLW91dCwgYSBmYWlsaW5nIHByb2Nlc3NvciBuZXZlciBzdG9wcyB0aGUgb3RoZXJzKS5cbiAqXG4gKiAjIyBUaGUgY29tcGlsZS10aW1lIGxhd1xuICpcbiAqIGBIT09LU2AgaXMgY2hlY2tlZCBhZ2FpbnN0IHRoZSB0aHJlZSByZWNvcmRlciBpbnRlcmZhY2VzIGluIEJPVEggZGlyZWN0aW9uczpcbiAqXG4gKiAgIC0gYSBob29rIGFkZGVkIHRvIGBTY29wZVJlY29yZGVyYCAvIGBGbG93UmVjb3JkZXJgIC8gYEVtaXRSZWNvcmRlcmAgYW5kIG5vdCB0byBgSE9PS1NgIGlzIGFcbiAqICAgICBtaXNzaW5nIHByb3BlcnR5IG9mIHRoZSBgc2F0aXNmaWVzYCBjbGF1c2Ug4oCUIGl0IGRvZXMgbm90IGNvbXBpbGU7XG4gKiAgIC0gYSBob29rIGFkZGVkIHRvIG9uZSBpbnRlcmZhY2UgdGhhdCBgSE9PS1NgIGxpc3RzIG9uIGFub3RoZXIgY2hhbm5lbCBvbmx5IGlzIGEgbWlzc2luZ1xuICogICAgIGtleSBvZiB0aGF0IGVudHJ5J3MgYG9uYCDigJQgaXQgZG9lcyBub3QgY29tcGlsZTtcbiAqICAgLSBhbiBlbnRyeSBuYW1pbmcgYSBjaGFubmVsIHdob3NlIGludGVyZmFjZSBkb2VzIG5vdCBkZWNsYXJlIGl0IGlzIGFuIGV4Y2VzcyBwcm9wZXJ0eSDigJRcbiAqICAgICBpdCBkb2VzIG5vdCBjb21waWxlLlxuICpcbiAqIFBpbm5lZCBieSB0ZXN0L2xpYi9yZWNvcmRlci9ob29rcy50ZXN0LnRzICh0aGUgYEB0cy1leHBlY3QtZXJyb3JgIHByb2JlcykuXG4gKi9cblxuaW1wb3J0IHsgaW52b2tlUmVjb3JkZXJIb29rIH0gZnJvbSAnLi4vY2FwdHVyZS9pbnZva2VIb29rLmpzJztcbmltcG9ydCB7IGlzRGV2TW9kZSB9IGZyb20gJy4uL2Rldk1vZGUuanMnO1xuaW1wb3J0IHR5cGUgeyBGbG93UmVjb3JkZXIgfSBmcm9tICcuLi9lbmdpbmUvbmFycmF0aXZlL3R5cGVzLmpzJztcbmltcG9ydCB7IGV4dHJhY3RFcnJvckluZm8gfSBmcm9tICcuLi9lcnJvcnMvZXJyb3JJbmZvLmpzJztcbmltcG9ydCB0eXBlIHsgRXJyb3JFdmVudCwgU2NvcGVSZWNvcmRlciB9IGZyb20gJy4uL3Njb3BlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgRW1pdFJlY29yZGVyIH0gZnJvbSAnLi9FbWl0UmVjb3JkZXIuanMnO1xuXG4vKiogTWVtYmVycyBldmVyeSByZWNvcmRlciBpbnRlcmZhY2Ugc2hhcmVzIHRoYXQgYXJlIE5PVCBldmVudHMuICovXG50eXBlIExpZmVjeWNsZSA9ICdpZCcgfCAnY2xlYXInIHwgJ3RvU25hcHNob3QnO1xuXG4vKiogSG9va3Mgb2YgdGhlIGVtaXQgY2hhbm5lbCAoYEVtaXRSZWNvcmRlcmApLiAqL1xuZXhwb3J0IHR5cGUgRW1pdEhvb2tOYW1lID0gRXhjbHVkZTxrZXlvZiBFbWl0UmVjb3JkZXIsIExpZmVjeWNsZT47XG4vKiogSG9va3Mgb2YgdGhlIHNjb3BlIChkYXRhLWZsb3cpIGNoYW5uZWwuIGBTY29wZVJlY29yZGVyYCBhbHNvIGRlY2xhcmVzIGBvbkVtaXRgIOKAlCB0aGUgZW1pdFxuICogIGNoYW5uZWwgcmlkZXMgdGhlIHNjb3BlIGxpc3Qg4oCUIHNvIGl0IGlzIHN1YnRyYWN0ZWQgaGVyZSBhbmQgY291bnRlZCBvbiBgZW1pdGAuICovXG5leHBvcnQgdHlwZSBTY29wZUhvb2tOYW1lID0gRXhjbHVkZTxrZXlvZiBTY29wZVJlY29yZGVyLCBMaWZlY3ljbGUgfCBFbWl0SG9va05hbWU+O1xuLyoqIEhvb2tzIG9mIHRoZSBmbG93IChjb250cm9sLWZsb3cpIGNoYW5uZWwuICovXG5leHBvcnQgdHlwZSBGbG93SG9va05hbWUgPSBFeGNsdWRlPGtleW9mIEZsb3dSZWNvcmRlciwgTGlmZWN5Y2xlPjtcbi8qKiBFdmVyeSByZWNvcmRlciBob29rLCBvbiBhbnkgY2hhbm5lbC4gKi9cbmV4cG9ydCB0eXBlIEhvb2tOYW1lID0gU2NvcGVIb29rTmFtZSB8IEZsb3dIb29rTmFtZSB8IEVtaXRIb29rTmFtZTtcbi8qKiBUaGUgdGhyZWUgcnVudGltZSBjaGFubmVscyAodGhlIGJ1aWxkLXRpbWUgc3RydWN0dXJlIGNoYW5uZWwgZmlyZXMgaXRzIGhvb2tzIGJ5IG5hbWUpLiAqL1xuZXhwb3J0IHR5cGUgSG9va0NoYW5uZWwgPSAnc2NvcGUnIHwgJ2Zsb3cnIHwgJ2VtaXQnO1xuXG4vKiogVGhlIGNoYW5uZWxzIHdob3NlIGludGVyZmFjZSBERUNMQVJFUyBob29rIGBLYCDigJQgd2hhdCBhbiBlbnRyeSdzIGBvbmAgbXVzdCBuYW1lIGV4YWN0bHkuICovXG5leHBvcnQgdHlwZSBDaGFubmVsc09mPEsgZXh0ZW5kcyBIb29rTmFtZT4gPVxuICB8IChLIGV4dGVuZHMgU2NvcGVIb29rTmFtZSA/ICdzY29wZScgOiBuZXZlcilcbiAgfCAoSyBleHRlbmRzIEZsb3dIb29rTmFtZSA/ICdmbG93JyA6IG5ldmVyKVxuICB8IChLIGV4dGVuZHMgRW1pdEhvb2tOYW1lID8gJ2VtaXQnIDogbmV2ZXIpO1xuXG50eXBlIFBheWxvYWRPZjxJLCBLPiA9IEsgZXh0ZW5kcyBrZXlvZiBJID8gKE5vbk51bGxhYmxlPElbS10+IGV4dGVuZHMgKGV2ZW50OiBpbmZlciBFKSA9PiB1bmtub3duID8gRSA6IG5ldmVyKSA6IG5ldmVyO1xudHlwZSBDaGFubmVsSW50ZXJmYWNlID0geyBzY29wZTogU2NvcGVSZWNvcmRlcjsgZmxvdzogRmxvd1JlY29yZGVyOyBlbWl0OiBFbWl0UmVjb3JkZXIgfTtcblxuLyoqIFRoZSBwYXlsb2FkIGhvb2sgYEtgIHJlY2VpdmVzIG9uIGNoYW5uZWwgYENgIOKAlCByZWFkIG9mZiB0aGUgY2hhbm5lbCdzIGludGVyZmFjZSwgbmV2ZXIgcmVzdGF0ZWQuICovXG5leHBvcnQgdHlwZSBIb29rUGF5bG9hZDxLIGV4dGVuZHMgSG9va05hbWUsIEMgZXh0ZW5kcyBDaGFubmVsc09mPEs+ID0gQ2hhbm5lbHNPZjxLPj4gPSBDIGV4dGVuZHMgSG9va0NoYW5uZWxcbiAgPyBQYXlsb2FkT2Y8Q2hhbm5lbEludGVyZmFjZVtDXSwgSz5cbiAgOiBuZXZlcjtcblxuLyoqXG4gKiBPbmUgcmVnaXN0cnkgZW50cnkuXG4gKlxuICogLSBgb25gIOKAlCBldmVyeSBjaGFubmVsIHRoZSBob29rIGlzIGRlY2xhcmVkIG9uLCBlYWNoIG1hcHBlZCB0byB0aGUgTkFNRSBvZiBpdHMgcGF5bG9hZCB0eXBlXG4gKiAgIChwcm9zZSBmb3IgcmVhZGVyczsgdGhlIHR5cGUgaXRzZWxmIGlzIGBIb29rUGF5bG9hZDxLLCBDPmAsIHJlYWQgb2ZmIHRoZSBpbnRlcmZhY2UpLlxuICogLSBgZXhlY3V0b3JNYWRlYCDigJQgYSBMQUJFTCAocmVhZCBieSB0ZXN0cyBhbmQgZG9jcywgbm90IGJ5IHJvdXRpbmcpOiBgdHJ1ZWAgd2hlbiB0aGUgZXhlY3V0b3Igc3ludGhlc2l6ZXMgdGhlIGV2ZW50IGl0c2VsZiBpbnN0ZWFkIG9mIGFcbiAqICAgZGlzcGF0Y2ggc2l0ZSBpbiB0aGUgZW5naW5lICh0b2RheSBvbmx5IGBvblJlc3VtZWAsIGZpcmVkIGJ5IGBydW5uZXIvcmVzdW1lLnRzIMK3IGFubm91bmNlUmVzdW1lYCkuXG4gKiAgIFN1Y2ggYW4gZXZlbnQgZ29lcyB0aHJvdWdoIGBmaXJlYCBsaWtlIGV2ZXJ5IG90aGVyLCBzbyBhIHRocm93aW5nIHJlY29yZGVyIG5ldmVyIGFib3J0c1xuICogICB0aGUgZXhlY3V0b3IgY2FsbCB0aGF0IG1hZGUgaXQuXG4gKi9cbmV4cG9ydCB0eXBlIEhvb2tTcGVjPEsgZXh0ZW5kcyBIb29rTmFtZT4gPSB7XG4gIHJlYWRvbmx5IG9uOiB7IHJlYWRvbmx5IFtDIGluIENoYW5uZWxzT2Y8Sz5dOiBzdHJpbmcgfTtcbiAgcmVhZG9ubHkgZXhlY3V0b3JNYWRlOiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBUSEUgcmVnaXN0cnkuIEtleSBvcmRlciBpcyB0aGUgb3JkZXIgZXZlcnkgZGVyaXZlZCBsaXN0IGtlZXBzOiBgaG9va3NPbihjaGFubmVsKWAgaXMgYW5cbiAqIG9yZGVyLXByZXNlcnZpbmcgZmlsdGVyIG9mIGl0LCBpZGVudGljYWwgdG8gdGhlIDkuMzUuMCBoYW5kLXdyaXR0ZW4gbGlzdHMgaXQgcmVwbGFjZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBIT09LUyA9IHtcbiAgb25SZWFkOiB7IG9uOiB7IHNjb3BlOiAnUmVhZEV2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG4gIG9uV3JpdGU6IHsgb246IHsgc2NvcGU6ICdXcml0ZUV2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG4gIG9uQ29tbWl0OiB7IG9uOiB7IHNjb3BlOiAnQ29tbWl0RXZlbnQnIH0sIGV4ZWN1dG9yTWFkZTogZmFsc2UgfSxcbiAgb25TdGFnZUV4ZWN1dGVkOiB7IG9uOiB7IGZsb3c6ICdGbG93U3RhZ2VFdmVudCcgfSwgZXhlY3V0b3JNYWRlOiBmYWxzZSB9LFxuICBvbk5leHQ6IHsgb246IHsgZmxvdzogJ0Zsb3dOZXh0RXZlbnQnIH0sIGV4ZWN1dG9yTWFkZTogZmFsc2UgfSxcbiAgb25EZWNpc2lvbjogeyBvbjogeyBmbG93OiAnRmxvd0RlY2lzaW9uRXZlbnQnIH0sIGV4ZWN1dG9yTWFkZTogZmFsc2UgfSxcbiAgb25Gb3JrOiB7IG9uOiB7IGZsb3c6ICdGbG93Rm9ya0V2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG4gIG9uU2VsZWN0ZWQ6IHsgb246IHsgZmxvdzogJ0Zsb3dTZWxlY3RlZEV2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG4gIG9uU3ViZmxvd0VudHJ5OiB7IG9uOiB7IGZsb3c6ICdGbG93U3ViZmxvd0V2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG4gIG9uU3ViZmxvd0V4aXQ6IHsgb246IHsgZmxvdzogJ0Zsb3dTdWJmbG93RXZlbnQnIH0sIGV4ZWN1dG9yTWFkZTogZmFsc2UgfSxcbiAgb25TdWJmbG93UmVnaXN0ZXJlZDogeyBvbjogeyBmbG93OiAnRmxvd1N1YmZsb3dSZWdpc3RlcmVkRXZlbnQnIH0sIGV4ZWN1dG9yTWFkZTogZmFsc2UgfSxcbiAgb25Mb29wOiB7IG9uOiB7IGZsb3c6ICdGbG93TG9vcEV2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG4gIG9uQnJlYWs6IHsgb246IHsgZmxvdzogJ0Zsb3dCcmVha0V2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG4gIG9uRXJyb3I6IHsgb246IHsgc2NvcGU6ICdFcnJvckV2ZW50JywgZmxvdzogJ0Zsb3dFcnJvckV2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG4gIG9uU3RhZ2VTdGFydDogeyBvbjogeyBzY29wZTogJ1N0YWdlRXZlbnQnIH0sIGV4ZWN1dG9yTWFkZTogZmFsc2UgfSxcbiAgb25TdGFnZUVuZDogeyBvbjogeyBzY29wZTogJ1N0YWdlRXZlbnQnIH0sIGV4ZWN1dG9yTWFkZTogZmFsc2UgfSxcbiAgLy8gRGVjbGFyYXRpdmUgcGVyLXN0YWdlIHJldHJ5ICg5LjE1KTogZmlyZXMgRFVSSU5HIGEgc3RhZ2UsIG9uY2UgcGVyIGZhaWxlZCBhdHRlbXB0IHRoYXQgd2lsbCBiZSByZXRyaWVkLlxuICBvblN0YWdlUmV0cnk6IHsgb246IHsgZmxvdzogJ0Zsb3dTdGFnZVJldHJ5RXZlbnQnIH0sIGV4ZWN1dG9yTWFkZTogZmFsc2UgfSxcbiAgLy8gVGhyb3R0bGluZyAoOS4zOS4wLCBSOSk6IGEgZm9yayBjaGlsZCdzIGVycm9yIHRoZSBydW4ncyBgdGhyb3R0bGluZ0Vycm9yQ2hlY2tlcmAgY2xhc3NpZmllZC5cbiAgb25UaHJvdHRsZWQ6IHsgb246IHsgZmxvdzogJ0Zsb3dUaHJvdHRsZWRFdmVudCcgfSwgZXhlY3V0b3JNYWRlOiBmYWxzZSB9LFxuICBvblBhdXNlOiB7IG9uOiB7IHNjb3BlOiAnUGF1c2VFdmVudCcsIGZsb3c6ICdGbG93UGF1c2VFdmVudCcgfSwgZXhlY3V0b3JNYWRlOiBmYWxzZSB9LFxuICBvblJlc3VtZTogeyBvbjogeyBzY29wZTogJ1Jlc3VtZUV2ZW50JywgZmxvdzogJ0Zsb3dSZXN1bWVFdmVudCcgfSwgZXhlY3V0b3JNYWRlOiB0cnVlIH0sXG4gIC8vIFJ1biBib3VuZGFyaWVzIOKAlCBsaXN0ZWQgc28gYSByZWNvcmRlciB3aG9zZSBPTkxZIGhvb2sgaXMgb25lIG9mIHRoZW0gc3RpbGwgcm91dGVzIHRvIHRoZSBmbG93IGNoYW5uZWwuXG4gIG9uUnVuU3RhcnQ6IHsgb246IHsgZmxvdzogJ0Zsb3dSdW5FdmVudCcgfSwgZXhlY3V0b3JNYWRlOiBmYWxzZSB9LFxuICBvblJ1bkVuZDogeyBvbjogeyBmbG93OiAnRmxvd1J1bkV2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG4gIG9uUnVuRmFpbGVkOiB7IG9uOiB7IGZsb3c6ICdGbG93UnVuRmFpbGVkRXZlbnQnIH0sIGV4ZWN1dG9yTWFkZTogZmFsc2UgfSxcbiAgb25FbWl0OiB7IG9uOiB7IGVtaXQ6ICdFbWl0RXZlbnQnIH0sIGV4ZWN1dG9yTWFkZTogZmFsc2UgfSxcbn0gYXMgY29uc3Qgc2F0aXNmaWVzIHsgcmVhZG9ubHkgW0sgaW4gSG9va05hbWVdOiBIb29rU3BlYzxLPiB9O1xuXG4vKiogRXZlcnkgaG9vayBuYW1lLCBpbiByZWdpc3RyeSBvcmRlci4gKi9cbmV4cG9ydCBjb25zdCBIT09LX05BTUVTID0gT2JqZWN0LmZyZWV6ZShPYmplY3Qua2V5cyhIT09LUykpIGFzIHJlYWRvbmx5IEhvb2tOYW1lW107XG5cbi8qKiBUaGUgaG9va3MgZGVjbGFyZWQgb24gYGNoYW5uZWxgLCBpbiByZWdpc3RyeSBvcmRlci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBob29rc09uKGNoYW5uZWw6ICdzY29wZScpOiByZWFkb25seSBTY29wZUhvb2tOYW1lW107XG5leHBvcnQgZnVuY3Rpb24gaG9va3NPbihjaGFubmVsOiAnZmxvdycpOiByZWFkb25seSBGbG93SG9va05hbWVbXTtcbmV4cG9ydCBmdW5jdGlvbiBob29rc09uKGNoYW5uZWw6ICdlbWl0Jyk6IHJlYWRvbmx5IEVtaXRIb29rTmFtZVtdO1xuZXhwb3J0IGZ1bmN0aW9uIGhvb2tzT24oY2hhbm5lbDogSG9va0NoYW5uZWwpOiByZWFkb25seSBIb29rTmFtZVtdO1xuZXhwb3J0IGZ1bmN0aW9uIGhvb2tzT24oY2hhbm5lbDogSG9va0NoYW5uZWwpOiByZWFkb25seSBIb29rTmFtZVtdIHtcbiAgcmV0dXJuIEJZX0NIQU5ORUxbY2hhbm5lbF07XG59XG5cbmNvbnN0IGRlY2xhcmVkT24gPSAoY2hhbm5lbDogSG9va0NoYW5uZWwpID0+XG4gIE9iamVjdC5mcmVlemUoSE9PS19OQU1FUy5maWx0ZXIoKGhvb2spID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChIT09LU1tob29rXS5vbiwgY2hhbm5lbCkpKTtcbi8qKiBDb21wdXRlZCBvbmNlIGF0IGxvYWQg4oCUIHJvdXRpbmcgYXNrcyBvbiBldmVyeSBhdHRhY2gsIHRoZSB0YXBzIG9uIGV2ZXJ5IHRyYXZlcnNlci4gKi9cbmNvbnN0IEJZX0NIQU5ORUw6IFJlYWRvbmx5PFJlY29yZDxIb29rQ2hhbm5lbCwgcmVhZG9ubHkgSG9va05hbWVbXT4+ID0ge1xuICBzY29wZTogZGVjbGFyZWRPbignc2NvcGUnKSxcbiAgZmxvdzogZGVjbGFyZWRPbignZmxvdycpLFxuICBlbWl0OiBkZWNsYXJlZE9uKCdlbWl0JyksXG59O1xuXG4vKiogVGhlIHNjb3BlLWNoYW5uZWwgZXJyb3Igb3BlcmF0aW9uIGEgZmFpbGluZyBob29rIGlzIHJlcG9ydGVkIHVuZGVyIChgRXJyb3JFdmVudC5vcGVyYXRpb25gKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvcGVyYXRpb25Gb3IoaG9vazogc3RyaW5nKTogJ3JlYWQnIHwgJ3dyaXRlJyB8ICdjb21taXQnIHtcbiAgaWYgKGhvb2sgPT09ICdvblJlYWQnKSByZXR1cm4gJ3JlYWQnO1xuICBpZiAoaG9vayA9PT0gJ29uQ29tbWl0JykgcmV0dXJuICdjb21taXQnO1xuICByZXR1cm4gJ3dyaXRlJztcbn1cblxuLyoqIFdoZXJlIGEgcmVjb3JkZXIgZmFpbHVyZSBpcyByZXBvcnRlZCBGUk9NIOKAlCB0aGUgc3RhZ2UgKG9yIHN5bnRoZXNpemVkIGV2ZW50KSB3aG9zZSBob29rIHRocmV3LiAqL1xuZXhwb3J0IGludGVyZmFjZSBGYWlsdXJlU2l0ZSB7XG4gIHJlYWRvbmx5IHN0YWdlTmFtZTogc3RyaW5nO1xuICByZWFkb25seSBzdGFnZUlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBpcGVsaW5lSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUSEUgc2NvcGUtY2hhbm5lbCBgb25FcnJvcmAgZXZlbnQgZm9yIGEgcmVjb3JkZXIgdGhhdCB0aHJldyBpbiBgaG9va2Ag4oCUIGJ1aWx0IGluIE9ORSBwbGFjZVxuICogZm9yIGV2ZXJ5IHBhdGggdGhhdCByZXBvcnRzIG9uZTogdGhlIGlubGluZSBmYWNhZGUgKGBTY29wZUZhY2FkZSDCtyBfcm91dGVGYWlsdXJlYCksIHRoZVxuICogZXhlY3V0b3IncyBvd24gYG9uUmVzdW1lYCAoYHJ1bm5lci9yZXN1bWUudHMgwrcgYW5ub3VuY2VSZXN1bWVgKSBhbmQgZGVmZXJyZWQgZGVsaXZlcnlcbiAqIChgRGVmZXJyZWRPYnNlcnZlclRpZXIgwrcgcm91dGVMaXN0ZW5lckVycm9yYCkuIGBlcnJvcmAgaXMgdGhlIHN0cnVjdHVyZWQgZm9ybVxuICogKGBleHRyYWN0RXJyb3JJbmZvYDogYG1lc3NhZ2VgLCBgbmFtZWAsIGBjb2RlP2AsIGByYXdgID0gdGhlIHRocm93biB2YWx1ZSBpdHNlbGYpIHdoYXRldmVyXG4gKiB3YXMgdGhyb3duIOKAlCBhbiBgRXJyb3JgLCBhIHN0cmluZywgYW55dGhpbmcgKDkuMzkuMDsgYmVmb3JlLCB0aGUgaW5saW5lIHBhdGhzIHBhc3NlZCB0aGUgcmF3XG4gKiB0aHJvd24gdmFsdWUgYW5kIHRoZSBkZWZlcnJlZCB0aWVyIHdyYXBwZWQgaXQgaW4gYG5ldyBFcnJvciguLi4pYCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWNvcmRlckZhaWx1cmVFdmVudChzaXRlOiBGYWlsdXJlU2l0ZSwgdGhyb3duOiB1bmtub3duLCBob29rOiBzdHJpbmcpOiBFcnJvckV2ZW50IHtcbiAgcmV0dXJuIHtcbiAgICBzdGFnZU5hbWU6IHNpdGUuc3RhZ2VOYW1lLFxuICAgIHN0YWdlSWQ6IHNpdGUuc3RhZ2VJZCxcbiAgICBydW50aW1lU3RhZ2VJZDogc2l0ZS5ydW50aW1lU3RhZ2VJZCxcbiAgICBwaXBlbGluZUlkOiBzaXRlLnBpcGVsaW5lSWQsXG4gICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgIGVycm9yOiBleHRyYWN0RXJyb3JJbmZvKHRocm93biksXG4gICAgb3BlcmF0aW9uOiBvcGVyYXRpb25Gb3IoaG9vayksXG4gICAgY2hhbm5lbDogJ3Njb3BlJyBhcyBjb25zdCxcbiAgfTtcbn1cblxuLyoqXG4gKiBUZXh0IGZvciBhbnl0aGluZyBhIHJlY29yZGVyIHRocmV3LiBgJHtlcnJ9YCB0aHJvd3Mgb24gYSBudWxsLXByb3RvdHlwZSBvYmplY3QgKG5vXG4gKiBgdG9TdHJpbmdgKSBhbmQgb24gYSBzeW1ib2wg4oCUIGFuZCBhIHRocm93IGluc2lkZSB0aGUgaXNvbGF0aW9uIHdvdWxkIGVzY2FwZSBpdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlc2NyaWJlVGhyb3duKGVycm9yOiB1bmtub3duKTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gU3RyaW5nKGVycm9yKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlcnJvcik7XG4gIH1cbn1cblxuLyoqIFdoYXQgdG8gZG8gd2l0aCBhIHJlY29yZGVyJ3MgdGhyb3cuIEl0cyBvd24gdGhyb3cgaXMgc3dhbGxvd2VkIGJ5IGBmaXJlYC4gKi9cbmV4cG9ydCB0eXBlIEhvb2tGYWlsdXJlID0gKGVycm9yOiB1bmtub3duLCByZWNvcmRlcjogb2JqZWN0LCBob29rOiBIb29rTmFtZSkgPT4gdm9pZDtcblxuLyoqXG4gKiBUaGUgZmxvdyBjaGFubmVsJ3MgcG9saWN5LCB2ZXJiYXRpbSBzaW5jZSA5LjA6IHdhcm4gaW4gZGV2IG1vZGUsIG90aGVyd2lzZSBzYXkgbm90aGluZy5cbiAqIGBzb3VyY2VgIG5hbWVzIHRoZSBkaXNwYXRjaGVyIGluIHRoZSB3YXJuaW5nIChgRmxvd1JlY29yZGVyRGlzcGF0Y2hlcmAsIGBGbG93Q2hhcnRFeGVjdXRvcmApLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2FybkluRGV2TW9kZShzb3VyY2U6IHN0cmluZyk6IEhvb2tGYWlsdXJlIHtcbiAgcmV0dXJuIChlcnJvciwgcmVjb3JkZXIsIGhvb2spID0+IHtcbiAgICBpZiAoIWlzRGV2TW9kZSgpKSByZXR1cm47XG4gICAgY29uc3QgaWQgPSAocmVjb3JkZXIgYXMgeyBpZD86IHVua25vd24gfSkuaWQ7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICBjb25zb2xlLndhcm4oYFtmb290cHJpbnRdICR7c291cmNlfTogcmVjb3JkZXIgXCIke1N0cmluZyhpZCl9XCIgdGhyZXcgaW4gJHtob29rfTogJHtkZXNjcmliZVRocm93bihlcnJvcil9YCk7XG4gIH07XG59XG5cbmNvbnN0IFNXQUxMT1c6IEhvb2tGYWlsdXJlID0gKCkgPT4gdW5kZWZpbmVkO1xuXG4vKipcbiAqIENhbGwgYGhvb2tgIG9uIGV2ZXJ5IHJlY29yZGVyIHRoYXQgaW1wbGVtZW50cyBpdCAobm9ybWFsIHByb3BlcnR5IGxvb2t1cCwgYHRoaXNgIGJvdW5kIOKAlFxuICogYGludm9rZVJlY29yZGVySG9va2ApLCBpbiBvcmRlci4gQSB0aHJvdyBnb2VzIHRvIGBvbkZhaWx1cmVgIGFuZCB0aGUgbG9vcCBjb250aW51ZXM7IGFcbiAqIHRocm93IEZST00gYG9uRmFpbHVyZWAgaXMgc3dhbGxvd2VkLiBOb3RoaW5nIGEgcmVjb3JkZXIgZG9lcyBjYW4gcmVhY2ggdGhlIGNhbGxlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpcmU8SyBleHRlbmRzIEhvb2tOYW1lPihcbiAgcmVjb3JkZXJzOiBJdGVyYWJsZTxvYmplY3Q+LFxuICBob29rOiBLLFxuICBldmVudDogSG9va1BheWxvYWQ8Sz4sXG4gIG9uRmFpbHVyZTogSG9va0ZhaWx1cmUgPSBTV0FMTE9XLFxuKTogdm9pZCB7XG4gIGZvciAoY29uc3QgcmVjb3JkZXIgb2YgcmVjb3JkZXJzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGludm9rZVJlY29yZGVySG9vayhyZWNvcmRlciwgaG9vaywgZXZlbnQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0cnkge1xuICAgICAgICBvbkZhaWx1cmUoZXJyb3IsIHJlY29yZGVyLCBob29rKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBBbiBpc29sYXRpb24gdGhhdCB0aHJvd3MgaXMgaXRzZWxmIGlzb2xhdGVkIOKAlCByZWNvcmRlciBlcnJvcnMgbmV2ZXIgcmVhY2ggdGhlIHJ1bi5cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
159
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9va3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JlY29yZGVyL2hvb2tzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0JHO0FBR0gsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQWdEMUQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHO0lBQ25CLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFO0lBQzNELE9BQU8sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFO0lBQzdELFFBQVEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFO0lBQy9ELGVBQWUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUU7SUFDeEUsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUU7SUFDOUQsVUFBVSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRTtJQUN0RSxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEVBQUUsWUFBWSxFQUFFLEtB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SyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNuQyxDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLHFGQUFxRjtZQUN2RixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiByZWNvcmRlci9ob29rcy50cyDigJQgdGhlIGhvb2sgcmVnaXN0cnkgYW5kIHRoZSBvbmUgZGlzcGF0Y2hlciAoRjYpLlxuICpcbiAqIEV2ZXJ5IHJlY29yZGVyIGhvb2sgbmFtZSBpcyBkZWNsYXJlZCBPTkNFLCBoZXJlLCBpbiBgSE9PS1NgLiBFdmVyeXRoaW5nIHRoYXQgdXNlZCB0byBrZWVwXG4gKiBpdHMgb3duIGhhbmQgbGlzdCBkZXJpdmVzIGZyb20gaXQ6XG4gKlxuICogICAtIGNoYW5uZWwgcm91dGluZyAoYENvbWJpbmVkUmVjb3JkZXIgwrcgaGFzKlJlY29yZGVyTWV0aG9kc2ApIGFza3MgYGhvb2tzT24oY2hhbm5lbClgIOKAlCB0aGVcbiAqICAgICB0aHJlZSBoYW5kIGxpc3RzIGl0IHJlcGxhY2VkIChgUkVDT1JERVJfRVZFTlRfTUVUSE9EU2AsIGBGTE9XX+KApmAsIGBFTUlUX+KApmApIGFyZSBnb25lO1xuICogICAtIHRoZSBkZWZlcnJlZCB0aWVyJ3MgdGFwcyAoYERlZmVycmVkT2JzZXJ2ZXJUaWVyIMK3IGJ1aWxkU2NvcGVUYXAgLyBidWlsZEZsb3dUYXBgKSBpdGVyYXRlXG4gKiAgICAgYGhvb2tzT25gO1xuICogICAtIGBDb21wb3NpdGVSZWNvcmRlcmAncyBmYW4tb3V0IGlzIGdlbmVyYXRlZCBmcm9tIGBIT09LX05BTUVTYCAoZXZlcnkgaG9vaywgZXZlcnkgY2hhbm5lbCkuXG4gKlxuICogYGZpcmVgIGlzIHRoZSBvbmUgcGVyLXJlY29yZGVyIGxvb3A6IGNhbGwgdGhlIGhvb2sgb24gZWFjaCByZWNvcmRlciwgYW5kIGhhbmQgYSB0aHJvdyB0byB0aGVcbiAqIGNhbGxlcidzIGZhaWx1cmUgcG9saWN5IOKAlCBuZXZlciB0byB0aGUgY2FsbGVyJ3MgY2FsbGVyLiBUaGUgZW5naW5lIGtlZXBzIGl0cyB0d28gcG9saWNpZXNcbiAqICh0aGUgc2NvcGUgY2hhbm5lbCByb3V0ZXMgYSB0aHJvdyB0byBldmVyeSByZWNvcmRlcidzIGBvbkVycm9yYDsgdGhlIGZsb3cgY2hhbm5lbCB3YXJucyBpblxuICogZGV2IG1vZGUgYW5kIG1vdmVzIG9uKTsgYGZpcmVgIG9ubHkgZ3VhcmFudGVlcyB0aGF0IHdoYXRldmVyIHRoZSBwb2xpY3kgZG9lcywgdGhlIGxvb3AgZ29lc1xuICogb24gYW5kIG5vdGhpbmcgZXNjYXBlcy4gQm9ycm93ZWQ6IEMjIGBNdWx0aWNhc3REZWxlZ2F0ZWAgKG9uZSBpbnZvY2F0aW9uIGxpc3QpLCBPcGVuVGVsZW1ldHJ5XG4gKiBgTXVsdGlTcGFuUHJvY2Vzc29yYCAob25lIGZhbi1vdXQsIGEgZmFpbGluZyBwcm9jZXNzb3IgbmV2ZXIgc3RvcHMgdGhlIG90aGVycykuXG4gKlxuICogIyMgVGhlIGNvbXBpbGUtdGltZSBsYXdcbiAqXG4gKiBgSE9PS1NgIGlzIGNoZWNrZWQgYWdhaW5zdCB0aGUgdGhyZWUgcmVjb3JkZXIgaW50ZXJmYWNlcyBpbiBCT1RIIGRpcmVjdGlvbnM6XG4gKlxuICogICAtIGEgaG9vayBhZGRlZCB0byBgU2NvcGVSZWNvcmRlcmAgLyBgRmxvd1JlY29yZGVyYCAvIGBFbWl0UmVjb3JkZXJgIGFuZCBub3QgdG8gYEhPT0tTYCBpcyBhXG4gKiAgICAgbWlzc2luZyBwcm9wZXJ0eSBvZiB0aGUgYHNhdGlzZmllc2AgY2xhdXNlIOKAlCBpdCBkb2VzIG5vdCBjb21waWxlO1xuICogICAtIGEgaG9vayBhZGRlZCB0byBvbmUgaW50ZXJmYWNlIHRoYXQgYEhPT0tTYCBsaXN0cyBvbiBhbm90aGVyIGNoYW5uZWwgb25seSBpcyBhIG1pc3NpbmdcbiAqICAgICBrZXkgb2YgdGhhdCBlbnRyeSdzIGBvbmAg4oCUIGl0IGRvZXMgbm90IGNvbXBpbGU7XG4gKiAgIC0gYW4gZW50cnkgbmFtaW5nIGEgY2hhbm5lbCB3aG9zZSBpbnRlcmZhY2UgZG9lcyBub3QgZGVjbGFyZSBpdCBpcyBhbiBleGNlc3MgcHJvcGVydHkg4oCUXG4gKiAgICAgaXQgZG9lcyBub3QgY29tcGlsZS5cbiAqXG4gKiBQaW5uZWQgYnkgdGVzdC9saWIvcmVjb3JkZXIvaG9va3MudGVzdC50cyAodGhlIGBAdHMtZXhwZWN0LWVycm9yYCBwcm9iZXMpLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUnVuQ29ycmVsYXRpb24gfSBmcm9tICcuLi9hdHRlbXB0L3R5cGVzLmpzJztcbmltcG9ydCB7IGludm9rZVJlY29yZGVySG9vayB9IGZyb20gJy4uL2NhcHR1cmUvaW52b2tlSG9vay5qcyc7XG5pbXBvcnQgeyBpc0Rldk1vZGUgfSBmcm9tICcuLi9kZXZNb2RlLmpzJztcbmltcG9ydCB0eXBlIHsgRmxvd1JlY29yZGVyIH0gZnJvbSAnLi4vZW5naW5lL25hcnJhdGl2ZS90eXBlcy5qcyc7XG5pbXBvcnQgeyBleHRyYWN0RXJyb3JJbmZvIH0gZnJvbSAnLi4vZXJyb3JzL2Vycm9ySW5mby5qcyc7XG5pbXBvcnQgdHlwZSB7IEVycm9yRXZlbnQsIFNjb3BlUmVjb3JkZXIgfSBmcm9tICcuLi9zY29wZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IEVtaXRSZWNvcmRlciB9IGZyb20gJy4vRW1pdFJlY29yZGVyLmpzJztcblxuLyoqIE1lbWJlcnMgZXZlcnkgcmVjb3JkZXIgaW50ZXJmYWNlIHNoYXJlcyB0aGF0IGFyZSBOT1QgZXZlbnRzLiAqL1xudHlwZSBMaWZlY3ljbGUgPSAnaWQnIHwgJ2NsZWFyJyB8ICd0b1NuYXBzaG90JztcblxuLyoqIEhvb2tzIG9mIHRoZSBlbWl0IGNoYW5uZWwgKGBFbWl0UmVjb3JkZXJgKS4gKi9cbmV4cG9ydCB0eXBlIEVtaXRIb29rTmFtZSA9IEV4Y2x1ZGU8a2V5b2YgRW1pdFJlY29yZGVyLCBMaWZlY3ljbGU+O1xuLyoqIEhvb2tzIG9mIHRoZSBzY29wZSAoZGF0YS1mbG93KSBjaGFubmVsLiBgU2NvcGVSZWNvcmRlcmAgYWxzbyBkZWNsYXJlcyBgb25FbWl0YCDigJQgdGhlIGVtaXRcbiAqICBjaGFubmVsIHJpZGVzIHRoZSBzY29wZSBsaXN0IOKAlCBzbyBpdCBpcyBzdWJ0cmFjdGVkIGhlcmUgYW5kIGNvdW50ZWQgb24gYGVtaXRgLiAqL1xuZXhwb3J0IHR5cGUgU2NvcGVIb29rTmFtZSA9IEV4Y2x1ZGU8a2V5b2YgU2NvcGVSZWNvcmRlciwgTGlmZWN5Y2xlIHwgRW1pdEhvb2tOYW1lPjtcbi8qKiBIb29rcyBvZiB0aGUgZmxvdyAoY29udHJvbC1mbG93KSBjaGFubmVsLiAqL1xuZXhwb3J0IHR5cGUgRmxvd0hvb2tOYW1lID0gRXhjbHVkZTxrZXlvZiBGbG93UmVjb3JkZXIsIExpZmVjeWNsZT47XG4vKiogRXZlcnkgcmVjb3JkZXIgaG9vaywgb24gYW55IGNoYW5uZWwuICovXG5leHBvcnQgdHlwZSBIb29rTmFtZSA9IFNjb3BlSG9va05hbWUgfCBGbG93SG9va05hbWUgfCBFbWl0SG9va05hbWU7XG4vKiogVGhlIHRocmVlIHJ1bnRpbWUgY2hhbm5lbHMgKHRoZSBidWlsZC10aW1lIHN0cnVjdHVyZSBjaGFubmVsIGZpcmVzIGl0cyBob29rcyBieSBuYW1lKS4gKi9cbmV4cG9ydCB0eXBlIEhvb2tDaGFubmVsID0gJ3Njb3BlJyB8ICdmbG93JyB8ICdlbWl0JztcblxuLyoqIFRoZSBjaGFubmVscyB3aG9zZSBpbnRlcmZhY2UgREVDTEFSRVMgaG9vayBgS2Ag4oCUIHdoYXQgYW4gZW50cnkncyBgb25gIG11c3QgbmFtZSBleGFjdGx5LiAqL1xuZXhwb3J0IHR5cGUgQ2hhbm5lbHNPZjxLIGV4dGVuZHMgSG9va05hbWU+ID1cbiAgfCAoSyBleHRlbmRzIFNjb3BlSG9va05hbWUgPyAnc2NvcGUnIDogbmV2ZXIpXG4gIHwgKEsgZXh0ZW5kcyBGbG93SG9va05hbWUgPyAnZmxvdycgOiBuZXZlcilcbiAgfCAoSyBleHRlbmRzIEVtaXRIb29rTmFtZSA/ICdlbWl0JyA6IG5ldmVyKTtcblxudHlwZSBQYXlsb2FkT2Y8SSwgSz4gPSBLIGV4dGVuZHMga2V5b2YgSSA/IChOb25OdWxsYWJsZTxJW0tdPiBleHRlbmRzIChldmVudDogaW5mZXIgRSkgPT4gdW5rbm93biA/IEUgOiBuZXZlcikgOiBuZXZlcjtcbnR5cGUgQ2hhbm5lbEludGVyZmFjZSA9IHsgc2NvcGU6IFNjb3BlUmVjb3JkZXI7IGZsb3c6IEZsb3dSZWNvcmRlcjsgZW1pdDogRW1pdFJlY29yZGVyIH07XG5cbi8qKiBUaGUgcGF5bG9hZCBob29rIGBLYCByZWNlaXZlcyBvbiBjaGFubmVsIGBDYCDigJQgcmVhZCBvZmYgdGhlIGNoYW5uZWwncyBpbnRlcmZhY2UsIG5ldmVyIHJlc3RhdGVkLiAqL1xuZXhwb3J0IHR5cGUgSG9va1BheWxvYWQ8SyBleHRlbmRzIEhvb2tOYW1lLCBDIGV4dGVuZHMgQ2hhbm5lbHNPZjxLPiA9IENoYW5uZWxzT2Y8Sz4+ID0gQyBleHRlbmRzIEhvb2tDaGFubmVsXG4gID8gUGF5bG9hZE9mPENoYW5uZWxJbnRlcmZhY2VbQ10sIEs+XG4gIDogbmV2ZXI7XG5cbi8qKlxuICogT25lIHJlZ2lzdHJ5IGVudHJ5LlxuICpcbiAqIC0gYG9uYCDigJQgZXZlcnkgY2hhbm5lbCB0aGUgaG9vayBpcyBkZWNsYXJlZCBvbiwgZWFjaCBtYXBwZWQgdG8gdGhlIE5BTUUgb2YgaXRzIHBheWxvYWQgdHlwZVxuICogICAocHJvc2UgZm9yIHJlYWRlcnM7IHRoZSB0eXBlIGl0c2VsZiBpcyBgSG9va1BheWxvYWQ8SywgQz5gLCByZWFkIG9mZiB0aGUgaW50ZXJmYWNlKS5cbiAqIC0gYGV4ZWN1dG9yTWFkZWAg4oCUIGEgTEFCRUwgKHJlYWQgYnkgdGVzdHMgYW5kIGRvY3MsIG5vdCBieSByb3V0aW5nKTogYHRydWVgIHdoZW4gdGhlIGV4ZWN1dG9yIHN5bnRoZXNpemVzIHRoZSBldmVudCBpdHNlbGYgaW5zdGVhZCBvZiBhXG4gKiAgIGRpc3BhdGNoIHNpdGUgaW4gdGhlIGVuZ2luZSAodG9kYXkgb25seSBgb25SZXN1bWVgLCBmaXJlZCBieSBgcnVubmVyL3Jlc3VtZS50cyDCtyBhbm5vdW5jZVJlc3VtZWApLlxuICogICBTdWNoIGFuIGV2ZW50IGdvZXMgdGhyb3VnaCBgZmlyZWAgbGlrZSBldmVyeSBvdGhlciwgc28gYSB0aHJvd2luZyByZWNvcmRlciBuZXZlciBhYm9ydHNcbiAqICAgdGhlIGV4ZWN1dG9yIGNhbGwgdGhhdCBtYWRlIGl0LlxuICovXG5leHBvcnQgdHlwZSBIb29rU3BlYzxLIGV4dGVuZHMgSG9va05hbWU+ID0ge1xuICByZWFkb25seSBvbjogeyByZWFkb25seSBbQyBpbiBDaGFubmVsc09mPEs+XTogc3RyaW5nIH07XG4gIHJlYWRvbmx5IGV4ZWN1dG9yTWFkZTogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogVEhFIHJlZ2lzdHJ5LiBLZXkgb3JkZXIgaXMgdGhlIG9yZGVyIGV2ZXJ5IGRlcml2ZWQgbGlzdCBrZWVwczogYGhvb2tzT24oY2hhbm5lbClgIGlzIGFuXG4gKiBvcmRlci1wcmVzZXJ2aW5nIGZpbHRlciBvZiBpdCwgaWRlbnRpY2FsIHRvIHRoZSA5LjM1LjAgaGFuZC13cml0dGVuIGxpc3RzIGl0IHJlcGxhY2VkLlxuICovXG5leHBvcnQgY29uc3QgSE9PS1MgPSB7XG4gIG9uUmVhZDogeyBvbjogeyBzY29wZTogJ1JlYWRFdmVudCcgfSwgZXhlY3V0b3JNYWRlOiBmYWxzZSB9LFxuICBvbldyaXRlOiB7IG9uOiB7IHNjb3BlOiAnV3JpdGVFdmVudCcgfSwgZXhlY3V0b3JNYWRlOiBmYWxzZSB9LFxuICBvbkNvbW1pdDogeyBvbjogeyBzY29wZTogJ0NvbW1pdEV2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG4gIG9uU3RhZ2VFeGVjdXRlZDogeyBvbjogeyBmbG93OiAnRmxvd1N0YWdlRXZlbnQnIH0sIGV4ZWN1dG9yTWFkZTogZmFsc2UgfSxcbiAgb25OZXh0OiB7IG9uOiB7IGZsb3c6ICdGbG93TmV4dEV2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG4gIG9uRGVjaXNpb246IHsgb246IHsgZmxvdzogJ0Zsb3dEZWNpc2lvbkV2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG4gIG9uRm9yazogeyBvbjogeyBmbG93OiAnRmxvd0ZvcmtFdmVudCcgfSwgZXhlY3V0b3JNYWRlOiBmYWxzZSB9LFxuICBvblNlbGVjdGVkOiB7IG9uOiB7IGZsb3c6ICdGbG93U2VsZWN0ZWRFdmVudCcgfSwgZXhlY3V0b3JNYWRlOiBmYWxzZSB9LFxuICBvblN1YmZsb3dFbnRyeTogeyBvbjogeyBmbG93OiAnRmxvd1N1YmZsb3dFdmVudCcgfSwgZXhlY3V0b3JNYWRlOiBmYWxzZSB9LFxuICBvblN1YmZsb3dFeGl0OiB7IG9uOiB7IGZsb3c6ICdGbG93U3ViZmxvd0V2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG4gIG9uU3ViZmxvd1JlZ2lzdGVyZWQ6IHsgb246IHsgZmxvdzogJ0Zsb3dTdWJmbG93UmVnaXN0ZXJlZEV2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG4gIG9uTG9vcDogeyBvbjogeyBmbG93OiAnRmxvd0xvb3BFdmVudCcgfSwgZXhlY3V0b3JNYWRlOiBmYWxzZSB9LFxuICBvbkJyZWFrOiB7IG9uOiB7IGZsb3c6ICdGbG93QnJlYWtFdmVudCcgfSwgZXhlY3V0b3JNYWRlOiBmYWxzZSB9LFxuICBvbkVycm9yOiB7IG9uOiB7IHNjb3BlOiAnRXJyb3JFdmVudCcsIGZsb3c6ICdGbG93RXJyb3JFdmVudCcgfSwgZXhlY3V0b3JNYWRlOiBmYWxzZSB9LFxuICBvblN0YWdlU3RhcnQ6IHsgb246IHsgc2NvcGU6ICdTdGFnZUV2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG4gIG9uU3RhZ2VFbmQ6IHsgb246IHsgc2NvcGU6ICdTdGFnZUV2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG4gIC8vIEV2ZXJ5IGF0dGVtcHQgb2YgYSBkZWNsYXJlZCByZXRyeSBwb2xpY3kgKDEwLjEpOiBmaXJlcyBEVVJJTkcgYSBzdGFnZSwgb25jZSBwZXIgYXR0ZW1wdCwgYmVmb3JlIG9uU3RhZ2VSZXRyeS5cbiAgb25BdHRlbXB0OiB7IG9uOiB7IGZsb3c6ICdGbG93QXR0ZW1wdEV2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG4gIC8vIERlY2xhcmF0aXZlIHBlci1zdGFnZSByZXRyeSAoOS4xNSk6IGZpcmVzIERVUklORyBhIHN0YWdlLCBvbmNlIHBlciBmYWlsZWQgYXR0ZW1wdCB0aGF0IHdpbGwgYmUgcmV0cmllZC5cbiAgb25TdGFnZVJldHJ5OiB7IG9uOiB7IGZsb3c6ICdGbG93U3RhZ2VSZXRyeUV2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG4gIC8vIFRocm90dGxpbmcgKDkuMzkuMCwgUjkpOiBhIGZvcmsgY2hpbGQncyBlcnJvciB0aGUgcnVuJ3MgYHRocm90dGxpbmdFcnJvckNoZWNrZXJgIGNsYXNzaWZpZWQuXG4gIG9uVGhyb3R0bGVkOiB7IG9uOiB7IGZsb3c6ICdGbG93VGhyb3R0bGVkRXZlbnQnIH0sIGV4ZWN1dG9yTWFkZTogZmFsc2UgfSxcbiAgb25QYXVzZTogeyBvbjogeyBzY29wZTogJ1BhdXNlRXZlbnQnLCBmbG93OiAnRmxvd1BhdXNlRXZlbnQnIH0sIGV4ZWN1dG9yTWFkZTogZmFsc2UgfSxcbiAgb25SZXN1bWU6IHsgb246IHsgc2NvcGU6ICdSZXN1bWVFdmVudCcsIGZsb3c6ICdGbG93UmVzdW1lRXZlbnQnIH0sIGV4ZWN1dG9yTWFkZTogdHJ1ZSB9LFxuICAvLyBSdW4gYm91bmRhcmllcyDigJQgbGlzdGVkIHNvIGEgcmVjb3JkZXIgd2hvc2UgT05MWSBob29rIGlzIG9uZSBvZiB0aGVtIHN0aWxsIHJvdXRlcyB0byB0aGUgZmxvdyBjaGFubmVsLlxuICBvblJ1blN0YXJ0OiB7IG9uOiB7IGZsb3c6ICdGbG93UnVuRXZlbnQnIH0sIGV4ZWN1dG9yTWFkZTogZmFsc2UgfSxcbiAgb25SdW5FbmQ6IHsgb246IHsgZmxvdzogJ0Zsb3dSdW5FdmVudCcgfSwgZXhlY3V0b3JNYWRlOiBmYWxzZSB9LFxuICBvblJ1bkZhaWxlZDogeyBvbjogeyBmbG93OiAnRmxvd1J1bkZhaWxlZEV2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG4gIG9uRW1pdDogeyBvbjogeyBlbWl0OiAnRW1pdEV2ZW50JyB9LCBleGVjdXRvck1hZGU6IGZhbHNlIH0sXG59IGFzIGNvbnN0IHNhdGlzZmllcyB7IHJlYWRvbmx5IFtLIGluIEhvb2tOYW1lXTogSG9va1NwZWM8Sz4gfTtcblxuLyoqIEV2ZXJ5IGhvb2sgbmFtZSwgaW4gcmVnaXN0cnkgb3JkZXIuICovXG5leHBvcnQgY29uc3QgSE9PS19OQU1FUyA9IE9iamVjdC5mcmVlemUoT2JqZWN0LmtleXMoSE9PS1MpKSBhcyByZWFkb25seSBIb29rTmFtZVtdO1xuXG4vKiogVGhlIGhvb2tzIGRlY2xhcmVkIG9uIGBjaGFubmVsYCwgaW4gcmVnaXN0cnkgb3JkZXIuICovXG5leHBvcnQgZnVuY3Rpb24gaG9va3NPbihjaGFubmVsOiAnc2NvcGUnKTogcmVhZG9ubHkgU2NvcGVIb29rTmFtZVtdO1xuZXhwb3J0IGZ1bmN0aW9uIGhvb2tzT24oY2hhbm5lbDogJ2Zsb3cnKTogcmVhZG9ubHkgRmxvd0hvb2tOYW1lW107XG5leHBvcnQgZnVuY3Rpb24gaG9va3NPbihjaGFubmVsOiAnZW1pdCcpOiByZWFkb25seSBFbWl0SG9va05hbWVbXTtcbmV4cG9ydCBmdW5jdGlvbiBob29rc09uKGNoYW5uZWw6IEhvb2tDaGFubmVsKTogcmVhZG9ubHkgSG9va05hbWVbXTtcbmV4cG9ydCBmdW5jdGlvbiBob29rc09uKGNoYW5uZWw6IEhvb2tDaGFubmVsKTogcmVhZG9ubHkgSG9va05hbWVbXSB7XG4gIHJldHVybiBCWV9DSEFOTkVMW2NoYW5uZWxdO1xufVxuXG5jb25zdCBkZWNsYXJlZE9uID0gKGNoYW5uZWw6IEhvb2tDaGFubmVsKSA9PlxuICBPYmplY3QuZnJlZXplKEhPT0tfTkFNRVMuZmlsdGVyKChob29rKSA9PiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoSE9PS1NbaG9va10ub24sIGNoYW5uZWwpKSk7XG4vKiogQ29tcHV0ZWQgb25jZSBhdCBsb2FkIOKAlCByb3V0aW5nIGFza3Mgb24gZXZlcnkgYXR0YWNoLCB0aGUgdGFwcyBvbiBldmVyeSB0cmF2ZXJzZXIuICovXG5jb25zdCBCWV9DSEFOTkVMOiBSZWFkb25seTxSZWNvcmQ8SG9va0NoYW5uZWwsIHJlYWRvbmx5IEhvb2tOYW1lW10+PiA9IHtcbiAgc2NvcGU6IGRlY2xhcmVkT24oJ3Njb3BlJyksXG4gIGZsb3c6IGRlY2xhcmVkT24oJ2Zsb3cnKSxcbiAgZW1pdDogZGVjbGFyZWRPbignZW1pdCcpLFxufTtcblxuLyoqIFRoZSBzY29wZS1jaGFubmVsIGVycm9yIG9wZXJhdGlvbiBhIGZhaWxpbmcgaG9vayBpcyByZXBvcnRlZCB1bmRlciAoYEVycm9yRXZlbnQub3BlcmF0aW9uYCkuICovXG5leHBvcnQgZnVuY3Rpb24gb3BlcmF0aW9uRm9yKGhvb2s6IHN0cmluZyk6ICdyZWFkJyB8ICd3cml0ZScgfCAnY29tbWl0JyB7XG4gIGlmIChob29rID09PSAnb25SZWFkJykgcmV0dXJuICdyZWFkJztcbiAgaWYgKGhvb2sgPT09ICdvbkNvbW1pdCcpIHJldHVybiAnY29tbWl0JztcbiAgcmV0dXJuICd3cml0ZSc7XG59XG5cbi8qKiBXaGVyZSBhIHJlY29yZGVyIGZhaWx1cmUgaXMgcmVwb3J0ZWQgRlJPTSDigJQgdGhlIHN0YWdlIChvciBzeW50aGVzaXplZCBldmVudCkgd2hvc2UgaG9vayB0aHJldy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFpbHVyZVNpdGUge1xuICByZWFkb25seSBzdGFnZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgc3RhZ2VJZDogc3RyaW5nO1xuICByZWFkb25seSBydW50aW1lU3RhZ2VJZDogc3RyaW5nO1xuICByZWFkb25seSBwaXBlbGluZUlkOiBzdHJpbmc7XG4gIC8qKiBUaGUgcnVuJ3MgY29ycmVsYXRpb24sIHdoZW4gdGhlIHNpdGUncyBldmVudHMgY2Fycnkgb25lIOKAlCB0aGUgZmFpbHVyZSBldmVudCBjYXJyaWVzIGl0IHRvby4gKi9cbiAgcmVhZG9ubHkgY29ycmVsYXRpb24/OiBSdW5Db3JyZWxhdGlvbjtcbn1cblxuLyoqXG4gKiBUSEUgc2NvcGUtY2hhbm5lbCBgb25FcnJvcmAgZXZlbnQgZm9yIGEgcmVjb3JkZXIgdGhhdCB0aHJldyBpbiBgaG9va2Ag4oCUIGJ1aWx0IGluIE9ORSBwbGFjZVxuICogZm9yIGV2ZXJ5IHBhdGggdGhhdCByZXBvcnRzIG9uZTogdGhlIGlubGluZSBmYWNhZGUgKGBTY29wZUZhY2FkZSDCtyBfcm91dGVGYWlsdXJlYCksIHRoZVxuICogZXhlY3V0b3IncyBvd24gYG9uUmVzdW1lYCAoYHJ1bm5lci9yZXN1bWUudHMgwrcgYW5ub3VuY2VSZXN1bWVgKSBhbmQgZGVmZXJyZWQgZGVsaXZlcnlcbiAqIChgRGVmZXJyZWRPYnNlcnZlclRpZXIgwrcgcm91dGVMaXN0ZW5lckVycm9yYCkuIGBlcnJvcmAgaXMgdGhlIHN0cnVjdHVyZWQgZm9ybVxuICogKGBleHRyYWN0RXJyb3JJbmZvYDogYG1lc3NhZ2VgLCBgbmFtZWAsIGBjb2RlP2AsIGByYXdgID0gdGhlIHRocm93biB2YWx1ZSBpdHNlbGYpIHdoYXRldmVyXG4gKiB3YXMgdGhyb3duIOKAlCBhbiBgRXJyb3JgLCBhIHN0cmluZywgYW55dGhpbmcgKDkuMzkuMDsgYmVmb3JlLCB0aGUgaW5saW5lIHBhdGhzIHBhc3NlZCB0aGUgcmF3XG4gKiB0aHJvd24gdmFsdWUgYW5kIHRoZSBkZWZlcnJlZCB0aWVyIHdyYXBwZWQgaXQgaW4gYG5ldyBFcnJvciguLi4pYCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWNvcmRlckZhaWx1cmVFdmVudChzaXRlOiBGYWlsdXJlU2l0ZSwgdGhyb3duOiB1bmtub3duLCBob29rOiBzdHJpbmcpOiBFcnJvckV2ZW50IHtcbiAgcmV0dXJuIHtcbiAgICBzdGFnZU5hbWU6IHNpdGUuc3RhZ2VOYW1lLFxuICAgIHN0YWdlSWQ6IHNpdGUuc3RhZ2VJZCxcbiAgICBydW50aW1lU3RhZ2VJZDogc2l0ZS5ydW50aW1lU3RhZ2VJZCxcbiAgICBwaXBlbGluZUlkOiBzaXRlLnBpcGVsaW5lSWQsXG4gICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgIGVycm9yOiBleHRyYWN0RXJyb3JJbmZvKHRocm93biksXG4gICAgb3BlcmF0aW9uOiBvcGVyYXRpb25Gb3IoaG9vayksXG4gICAgY2hhbm5lbDogJ3Njb3BlJyBhcyBjb25zdCxcbiAgICAuLi4oc2l0ZS5jb3JyZWxhdGlvbiAmJiB7IGNvcnJlbGF0aW9uOiBzaXRlLmNvcnJlbGF0aW9uIH0pLFxuICB9O1xufVxuXG4vKipcbiAqIFRleHQgZm9yIGFueXRoaW5nIGEgcmVjb3JkZXIgdGhyZXcuIGAke2Vycn1gIHRocm93cyBvbiBhIG51bGwtcHJvdG90eXBlIG9iamVjdCAobm9cbiAqIGB0b1N0cmluZ2ApIGFuZCBvbiBhIHN5bWJvbCDigJQgYW5kIGEgdGhyb3cgaW5zaWRlIHRoZSBpc29sYXRpb24gd291bGQgZXNjYXBlIGl0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVzY3JpYmVUaHJvd24oZXJyb3I6IHVua25vd24pOiBzdHJpbmcge1xuICB0cnkge1xuICAgIHJldHVybiBTdHJpbmcoZXJyb3IpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGVycm9yKTtcbiAgfVxufVxuXG4vKiogV2hhdCB0byBkbyB3aXRoIGEgcmVjb3JkZXIncyB0aHJvdy4gSXRzIG93biB0aHJvdyBpcyBzd2FsbG93ZWQgYnkgYGZpcmVgLiAqL1xuZXhwb3J0IHR5cGUgSG9va0ZhaWx1cmUgPSAoZXJyb3I6IHVua25vd24sIHJlY29yZGVyOiBvYmplY3QsIGhvb2s6IEhvb2tOYW1lKSA9PiB2b2lkO1xuXG4vKipcbiAqIFRoZSBmbG93IGNoYW5uZWwncyBwb2xpY3ksIHZlcmJhdGltIHNpbmNlIDkuMDogd2FybiBpbiBkZXYgbW9kZSwgb3RoZXJ3aXNlIHNheSBub3RoaW5nLlxuICogYHNvdXJjZWAgbmFtZXMgdGhlIGRpc3BhdGNoZXIgaW4gdGhlIHdhcm5pbmcgKGBGbG93UmVjb3JkZXJEaXNwYXRjaGVyYCwgYEZsb3dDaGFydEV4ZWN1dG9yYCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3YXJuSW5EZXZNb2RlKHNvdXJjZTogc3RyaW5nKTogSG9va0ZhaWx1cmUge1xuICByZXR1cm4gKGVycm9yLCByZWNvcmRlciwgaG9vaykgPT4ge1xuICAgIGlmICghaXNEZXZNb2RlKCkpIHJldHVybjtcbiAgICBjb25zdCBpZCA9IChyZWNvcmRlciBhcyB7IGlkPzogdW5rbm93biB9KS5pZDtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUud2FybihgW2Zvb3RwcmludF0gJHtzb3VyY2V9OiByZWNvcmRlciBcIiR7U3RyaW5nKGlkKX1cIiB0aHJldyBpbiAke2hvb2t9OiAke2Rlc2NyaWJlVGhyb3duKGVycm9yKX1gKTtcbiAgfTtcbn1cblxuY29uc3QgU1dBTExPVzogSG9va0ZhaWx1cmUgPSAoKSA9PiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQ2FsbCBgaG9va2Agb24gZXZlcnkgcmVjb3JkZXIgdGhhdCBpbXBsZW1lbnRzIGl0IChub3JtYWwgcHJvcGVydHkgbG9va3VwLCBgdGhpc2AgYm91bmQg4oCUXG4gKiBgaW52b2tlUmVjb3JkZXJIb29rYCksIGluIG9yZGVyLiBBIHRocm93IGdvZXMgdG8gYG9uRmFpbHVyZWAgYW5kIHRoZSBsb29wIGNvbnRpbnVlczsgYVxuICogdGhyb3cgRlJPTSBgb25GYWlsdXJlYCBpcyBzd2FsbG93ZWQuIE5vdGhpbmcgYSByZWNvcmRlciBkb2VzIGNhbiByZWFjaCB0aGUgY2FsbGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlyZTxLIGV4dGVuZHMgSG9va05hbWU+KFxuICByZWNvcmRlcnM6IEl0ZXJhYmxlPG9iamVjdD4sXG4gIGhvb2s6IEssXG4gIGV2ZW50OiBIb29rUGF5bG9hZDxLPixcbiAgb25GYWlsdXJlOiBIb29rRmFpbHVyZSA9IFNXQUxMT1csXG4pOiB2b2lkIHtcbiAgZm9yIChjb25zdCByZWNvcmRlciBvZiByZWNvcmRlcnMpIHtcbiAgICB0cnkge1xuICAgICAgaW52b2tlUmVjb3JkZXJIb29rKHJlY29yZGVyLCBob29rLCBldmVudCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG9uRmFpbHVyZShlcnJvciwgcmVjb3JkZXIsIGhvb2spO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIEFuIGlzb2xhdGlvbiB0aGF0IHRocm93cyBpcyBpdHNlbGYgaXNvbGF0ZWQg4oCUIHJlY29yZGVyIGVycm9ycyBuZXZlciByZWFjaCB0aGUgcnVuLlxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -309,6 +309,7 @@ export class DeferredObserverTier {
|
|
|
309
309
|
stageId: stageIdOf(envelope.runtimeStageId),
|
|
310
310
|
runtimeStageId: envelope.runtimeStageId,
|
|
311
311
|
pipelineId: envelope.runId,
|
|
312
|
+
...correlationOf(envelope.payload),
|
|
312
313
|
}, error, envelope.method);
|
|
313
314
|
for (const [, { recorder, channels }] of this.registrations) {
|
|
314
315
|
// Inline-tier parity (review CRITICAL-1): the synthesized event is
|
|
@@ -359,4 +360,15 @@ export class DeferredObserverTier {
|
|
|
359
360
|
console.warn(message);
|
|
360
361
|
}
|
|
361
362
|
}
|
|
362
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVmZXJyZWRPYnNlcnZlclRpZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3J1bm5lci9EZWZlcnJlZE9ic2VydmVyVGllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Q0c7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXRDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUMsT0FBTyxFQU9MLGtCQUFrQixHQUNuQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUE2RHJGLHlGQUF5RjtBQUN6RixNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyx3QkFBd0IsQ0FBQztBQUM5RCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyx1QkFBdUIsQ0FBQztBQUU1RCw2RUFBNkU7QUFDN0UsTUFBTSxtQkFBbUIsR0FBOEIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDekUsK0NBQStDO0FBQy9DLE1BQU0sa0JBQWtCLEdBQThCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFpQi9ELE1BQU0sT0FBTyxvQkFBb0I7SUFDZCxVQUFVLENBQXFCO0lBQy9CLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBZ0MsQ0FBQztJQUN4RCxhQUFhLENBQTBCO0lBQ3hELDJFQUEyRTtJQUMxRCxjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUM1QyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7SUFFN0IsWUFBWSxPQUErQjtRQUN6QyxJQUFJLENBQUMsYUFBYSxHQUFHO1lBQ25CLG9FQUFvRTtZQUNwRSxr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Q0FBQyxPQUFlO1FBQ3BDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFBRSxPQUFPO1FBQ3pCLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO1lBQUUsT0FBTztRQUM3QyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqQyxzQ0FBc0M7UUFDdEMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN4QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHJ1bm5lci9EZWZlcnJlZE9ic2VydmVyVGllci50cyDigJQgUkZDLTAwMSBCbG9ja3MgNuKAkzk6IHRoZSBlbmdpbmUgd2lyaW5nIG9mXG4gKiB0aGUgZGVmZXJyZWQtb2JzZXJ2ZXIgcGlwZWxpbmUuXG4gKlxuICogUGF0dGVybjogIFRoaW4gYWRhcHRlciBiZXR3ZWVuIHRoZSBleGVjdXRvcidzIHRocmVlIG9ic2VydmVyIGNoYW5uZWxzIGFuZFxuICogICAgICAgICAgIHRoZSBQVVJFIGBvYnNlcnZlci1xdWV1ZWAgbW9kdWxlLiBUaGUgcHVyZSBtb2R1bGUgc3RheXNcbiAqICAgICAgICAgICBlbmdpbmUtZnJlZSAoaXQgaW1wb3J0cyBub3RoaW5nIGZyb20gdGhlIGVuZ2luZSDigJQgdGhlIGVuZ2luZVxuICogICAgICAgICAgIGltcG9ydHMgSVQpOyB0aGlzIHRpZXIgb3ducyBldmVyeSBlbmdpbmUtZmxhdm9yZWQgY29uY2VybjpcbiAqICAgICAgICAgICAgIC0gdGhlIGBpc0Rldk1vZGUoKWAtZ2F0ZWQsIGRlZHVwbGljYXRlZCBgQ2FwdHVyZUhvb2tzLndhcm5gXG4gKiAgICAgICAgICAgICAgIGJpbmRpbmcgKHRoZSBkZXYtd2FybiBzZWFtLCBSRkMtMDAxIMKnXCJSZXNvbHV0aW9uXCIpO1xuICogICAgICAgICAgICAgLSByb3V0aW5nIGBEZWZlcnJlZERpc3BhdGNoZXIub25FcnJvcmAgaW50byB0aGUgZXhpc3RpbmdcbiAqICAgICAgICAgICAgICAgcmVjb3JkZXIgZXJyb3IgY2hhbm5lbCAoYG9uRXJyb3JgIG9uIHNpYmxpbmcgb2JzZXJ2ZXJzKTtcbiAqICAgICAgICAgICAgIC0gdGhlIGNhcHR1cmUgVEFQUyDigJQgc3ludGhldGljIHJlY29yZGVycyBwbGFjZWQgb24gdGhlXG4gKiAgICAgICAgICAgICAgIGV4aXN0aW5nIGlubGluZSBkaXNwYXRjaCBsaXN0cyBzbyB0aGUgdGhyZWUgZGlzcGF0Y2ggc2l0ZXNcbiAqICAgICAgICAgICAgICAgKGBTY29wZUZhY2FkZS5faW52b2tlSG9va2AsIGBTY29wZUZhY2FkZS5lbWl0RXZlbnRgLFxuICogICAgICAgICAgICAgICBgRmxvd1JlY29yZGVyRGlzcGF0Y2hlcmApIG5lZWQgTk8gcGVyLXNpdGUgdGllciBsb2dpYzogYVxuICogICAgICAgICAgICAgICB0YXAncyBob29rIGJvZHkgSVMgYGRpc3BhdGNoZXIuY2FwdHVyZSguLi4pYCwgYW5kIGJlY2F1c2VcbiAqICAgICAgICAgICAgICAgdGhlIHRhcCBzaXRzIGluIHRoZSBzYW1lIGxvb3AgYXMgaW5saW5lIHJlY29yZGVycyBpdCBzZWVzXG4gKiAgICAgICAgICAgICAgIGV4YWN0bHkgdGhlIHBvc3QtcmVkYWN0aW9uIGV2ZW50IG9iamVjdCBpbmxpbmUgb2JzZXJ2ZXJzXG4gKiAgICAgICAgICAgICAgIHNlZSDigJQgY2FwdHVyZSBjYW4gbmV2ZXIgb2JzZXJ2ZSBhIHByZS1yZWRhY3Rpb24gdmFsdWU7XG4gKiAgICAgICAgICAgICAtIHRoZSB0ZXJtaW5hbCBmbHVzaCAoQmxvY2sgOCkgd2l0aCBob25lc3Qgc3RyYW5kaW5nXG4gKiAgICAgICAgICAgICAgIGFjY291bnRpbmcsIGFuZCB0aGUgQmxvY2sgOSBzdGF0cyBzdXJmYWNlLlxuICpcbiAqIFJvbGU6ICAgICBPbmUgaW5zdGFuY2UgcGVyIGBGbG93Q2hhcnRFeGVjdXRvcmAsIGNyZWF0ZWQgTEFaSUxZIG9uIHRoZVxuICogICAgICAgICAgIGZpcnN0IGBkZWxpdmVyeTogJ2RlZmVycmVkJ2AgYXR0YWNoICh6ZXJvIGFsbG9jYXRpb24gd2hlbiBub2JvZHlcbiAqICAgICAgICAgICBvcHRzIGluIOKAlCBtaXJyb3JzIHRoZSBlbWl0IGZhc3QtcGF0aCBwcmVjZWRlbnQpLiBIb2xkcyB0aGUgT05FXG4gKiAgICAgICAgICAgYERlZmVycmVkRGlzcGF0Y2hlcmAgKG9uZSBtZXJnZWQgcXVldWUsIHRvdGFsIG9yZGVyIGFjcm9zc1xuICogICAgICAgICAgIGNoYW5uZWxzKSBwbHVzIHRoZSByZWdpc3RyeSBvZiBkZWZlcnJlZCByZWNvcmRlcnMuXG4gKlxuICogRGVsaXZlcnk6IGEgZGVmZXJyZWQgcmVjb3JkZXIncyBob29rcyBhcmUgaW52b2tlZCB0aHJvdWdoIHRoZSBTQU1FXG4gKiBgaW52b2tlUmVjb3JkZXJIb29rYCBoZWxwZXIgdGhlIGlubGluZSB0aWVyIHVzZXMgKFJGQy0wMDEgwqc5IG1pdGlnYXRpb24pIOKAlFxuICogb25lIGJlYXQgYmVoaW5kLCB3aXRoIGBlbnZlbG9wZS5wYXlsb2FkYCBtYXRlcmlhbGl6ZWQgcGVyIHRoZSBjYXB0dXJlXG4gKiBwb2xpY3kgKGAnY2xvbmUnYCBkZWZhdWx0IGF0IHRoaXMgYXR0YWNoIHRpZXIg4oCUIGZ1bGwgc3RydWN0dXJhbCBjb3B5LFxuICogZXZlbnQtc2hhcGUgY29tcGF0aWJsZSB3aXRoIGlubGluZTsgZXhwbGljaXQgYCdzdW1tYXJ5J2Ag4oCUIGJvdW5kZWQsXG4gKiByZWZlcmVuY2UtZnJlZTsgYCdyZWYnYCDigJQgdGhlIGxpdmUgZXZlbnQgb2JqZWN0LCBkZXYtd2FybmVkKS4gVGhlIHN0YW5kYWxvbmVcbiAqIHF1ZXVlIHJldGFpbnMgaXRzIGAnc3VtbWFyeSdgIGRlZmF1bHQgKGBvYnNlcnZlci1xdWV1ZS9tZXJnZWRRdWV1ZS50cyDCtyBNZXJnZWRRdWV1ZWApLlxuICpcbiAqIENoYW5uZWwgZmlsdGVyOiBhIHJlZ2lzdHJhdGlvbiByZW1lbWJlcnMgd2hpY2ggY2hhbm5lbHMgd291bGQgaGF2ZVxuICogcmVhY2hlZCB0aGUgcmVjb3JkZXIgaW5saW5lIChzY29wZS1saXN0IHJlY29yZGVycyBzZWUgYHNjb3BlYCArIGBlbWl0YFxuICogZW52ZWxvcGVzOyBmbG93LWxpc3QgcmVjb3JkZXJzIHNlZSBgZmxvd2AgZW52ZWxvcGVzKSBhbmQgc2tpcHMgdGhlIHJlc3Qg4oCUXG4gKiBzYW1lIHJlYWNoIGFzIHRoZSBpbmxpbmUgdGllciwgb25lIGJlYXQgYmVoaW5kLlxuICovXG5cbmltcG9ydCB7IHN0YWdlSWRPZiB9IGZyb20gJ2Zvb3R0cmFjZSc7XG5cbmltcG9ydCB7IGludm9rZVJlY29yZGVySG9vayB9IGZyb20gJy4uL2NhcHR1cmUvaW52b2tlSG9vay5qcyc7XG5pbXBvcnQgeyBpc0Rldk1vZGUgfSBmcm9tICcuLi9kZXZNb2RlLmpzJztcbmltcG9ydCB0eXBlIHsgRmxvd1JlY29yZGVyIH0gZnJvbSAnLi4vZW5naW5lL25hcnJhdGl2ZS90eXBlcy5qcyc7XG5pbXBvcnQge1xuICB0eXBlIENhcHR1cmVDaGFubmVsLFxuICB0eXBlIENhcHR1cmVFbnZlbG9wZSxcbiAgdHlwZSBDYXB0dXJlUG9saWN5LFxuICB0eXBlIERpc3BhdGNoZXJTdGF0cyxcbiAgdHlwZSBEcmFpblJlc3VsdCxcbiAgdHlwZSBPdmVyZmxvd1BvbGljeSxcbiAgRGVmZXJyZWREaXNwYXRjaGVyLFxufSBmcm9tICcuLi9vYnNlcnZlci1xdWV1ZS9pbmRleC5qcyc7XG5pbXBvcnQgeyBkZXNjcmliZVRocm93biwgaG9va3NPbiwgcmVjb3JkZXJGYWlsdXJlRXZlbnQgfSBmcm9tICcuLi9yZWNvcmRlci9ob29rcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFNjb3BlUmVjb3JkZXIgfSBmcm9tICcuLi9zY29wZS90eXBlcy5qcyc7XG5cbi8qKiBEZWxpdmVyeSB0aWVyIGZvciBhbiBhdHRhY2hlZCBvYnNlcnZlciAoUkZDLTAwMSkuICovXG5leHBvcnQgdHlwZSBPYnNlcnZlckRlbGl2ZXJ5ID0gJ2lubGluZScgfCAnZGVmZXJyZWQnO1xuXG4vKipcbiAqIE9wdGlvbnMgYmFnIGFjY2VwdGVkIGJ5IGV2ZXJ5IGBhdHRhY2gqUmVjb3JkZXJgIGNhbGwuXG4gKlxuICogYGRlbGl2ZXJ5OiAnZGVmZXJyZWQnYCBvcHRzIHRoZSByZWNvcmRlciBpbnRvIHRoZSBib3VuZGVkIGNhcHR1cmUgcXVldWVcbiAqIChcIm9uZSBiZWF0IGJlaGluZFwiKTsgYWJzZW50IC8gYCdpbmxpbmUnYCBrZWVwcyB0aGUgaGlzdG9yaWNhbCBzeW5jaHJvbm91c1xuICogY2FsbCDigJQgYnl0ZS1pZGVudGljYWwgdG8gdGhlIHByZS1SRkMgcGF0aC5cbiAqXG4gKiBUaGUgcmVtYWluaW5nIGZpZWxkcyBjb25maWd1cmUgdGhlIGV4ZWN1dG9yJ3MgT05FIHNoYXJlZCBkaXNwYXRjaGVyIGFuZFxuICogYXJlIGFwcGxpZWQgd2hlbiB0aGUgRklSU1QgZGVmZXJyZWQgYXR0YWNoIGNyZWF0ZXMgaXQ7IGxhdGVyIGF0dGFjaGVzXG4gKiBwYXNzaW5nIGRpZmZlcmVudCB2YWx1ZXMgZ2V0IGEgZGV2LW1vZGUgd2FybmluZyBhbmQga2VlcCB0aGUgb3JpZ2luYWxcbiAqIGNvbmZpZ3VyYXRpb24gKG9uZSBxdWV1ZSBwZXIgZXhlY3V0b3Ig4oCUIHBlci1yZWNvcmRlciBxdWV1ZXMgd291bGQgYnJlYWtcbiAqIHRoZSB0b3RhbCBjcm9zcy1jaGFubmVsIG9yZGVyKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdHRhY2hSZWNvcmRlck9wdGlvbnMge1xuICAvKiogYCdkZWZlcnJlZCdgID0gY2FwdHVyZSDihpIgcXVldWUg4oaSIG5leHQtY2hlY2twb2ludCBkZWxpdmVyeS4gRGVmYXVsdCBgJ2lubGluZSdgLiAqL1xuICByZWFkb25seSBkZWxpdmVyeT86IE9ic2VydmVyRGVsaXZlcnk7XG4gIC8qKlxuICAgKiBQYXlsb2FkIG1hdGVyaWFsaXphdGlvbiBhdCBjYXB0dXJlIHRpbWUuIERlZmF1bHQgYCdjbG9uZSdgIOKAlCB5b3VyXG4gICAqIHJlY29yZGVyJ3MgaG9va3MgcmVjZWl2ZSB0aGUgU0FNRSBldmVudCBzaGFwZSBhcyBpbmxpbmUgZGVsaXZlcnlcbiAgICogKGBzdHJ1Y3R1cmVkQ2xvbmVgZDsgYGUua2V5YC9gZS52YWx1ZWAvYGUucnVudGltZVN0YWdlSWRgIGFsbCB3b3JrXG4gICAqIHVuY2hhbmdlZCksIHNvIGB7IGRlbGl2ZXJ5OiAnZGVmZXJyZWQnIH1gIGlzIGEgZHJvcC1pbiBwb3J0LlxuICAgKiBgJ3N1bW1hcnknYCDigJQgYSBib3VuZGVkIHR5cGUvc2l6ZS9wcmV2aWV3IGRpZ2VzdCAoYFBheWxvYWRTdW1tYXJ5YClcbiAgICogaW5zdGVhZCBvZiB0aGUgZXZlbnQgc2hhcGU6IGNoZWFwZXIgY2FwdHVyZSBmb3IgdGVsZW1ldHJ5LW9ubHlcbiAgICogY29uc3VtZXJzIHRoYXQgZG9uJ3QgcmVhZCBkb21haW4gZmllbGRzLiBgJ3JlZidgIOKAlCBwYXNzLXRocm91Z2ggYnlcbiAgICogcmVmZXJlbmNlOyB0aGUgY2FsbGVyIGFzc2VydHMgaW1tdXRhYmlsaXR5IChkZXYtbW9kZSB3YXJucykuXG4gICAqL1xuICByZWFkb25seSBjYXB0dXJlPzogQ2FwdHVyZVBvbGljeTtcbiAgLyoqIFF1ZXVlIGJvdW5kIOKAlCBkZWZhdWx0IDEwIDAwMC4gKi9cbiAgcmVhZG9ubHkgbWF4UXVldWU/OiBudW1iZXI7XG4gIC8qKiBPdmVyZmxvdyBwb2xpY3kgYXQgYG1heFF1ZXVlYCDigJQgZGVmYXVsdCBgJ2Ryb3Atb2xkZXN0J2AuICovXG4gIHJlYWRvbmx5IG92ZXJmbG93PzogT3ZlcmZsb3dQb2xpY3k7XG4gIC8qKiBgJ3NhbXBsZSdgIG92ZXJmbG93IG9ubHkg4oCUIGFkbWl0IDEgaW4gdGhpcyBtYW55IHNhdHVyYXRlZCBhcnJpdmFscy4gKi9cbiAgcmVhZG9ubHkgc2FtcGxlRXZlcnk/OiBudW1iZXI7XG4gIC8qKiBQZXItY2hlY2twb2ludCBmbHVzaCBidWRnZXQsIG1zIChBMSkg4oCUIGRlZmF1bHQgMjsgYEluZmluaXR5YCA9IGZ1bGwgZHJhaW4uICovXG4gIHJlYWRvbmx5IGZsdXNoQnVkZ2V0TXM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIEJsb2NrIDkgb2JzZXJ2YWJpbGl0eSBzdXJmYWNlIOKAlCBgc25hcHNob3Qub2JzZXJ2ZXJTdGF0c2AuIFRoZSBBNFxuICogZGlzcGF0Y2hlciBzdGF0cyBwbHVzIHRoZSB0ZXJtaW5hbC1mbHVzaCBzdHJhbmRpbmcgY291bnQgZnJvbSBCbG9jayA4LlxuICogUHJlc2VudCBvbiBgUnVudGltZVNuYXBzaG90YCBvbmx5IHdoZW4gYSBkZWZlcnJlZCBvYnNlcnZlciB3YXMgYXR0YWNoZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT2JzZXJ2ZXJTdGF0cyBleHRlbmRzIERpc3BhdGNoZXJTdGF0cyB7XG4gIC8qKlxuICAgKiBFbnZlbG9wZXMgc3RpbGwgcXVldWVkIHdoZW4gYSB0ZXJtaW5hbCBmbHVzaCBoaXQgaXRzIHJ1bmF3YXktY2FzY2FkZVxuICAgKiByb3VuZCBjYXAgKEJsb2NrIDgpLiBgMGAgaW4gYW55IHNhbmUgcnVuIOKAlCBhIG5vbi16ZXJvIHZhbHVlIG1lYW5zIGFcbiAgICogbGlzdGVuZXIga2VwdCBlbnF1ZXVlaW5nIHdvcmsgYXQgZW5kLW9mLXJ1biBhbmQgZGVsaXZlcnkgd2FzIGN1dCBvZmZcbiAgICogKGFsc28gZGV2LXdhcm5lZCBhdCB0aGUgbW9tZW50IGl0IGhhcHBlbmVkKS4gTmV2ZXIgc2lsZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgdGVybWluYWxTdHJhbmRlZDogbnVtYmVyO1xufVxuXG4vKiogUmVzdWx0IHNoYXBlIG9mIGBleGVjdXRvci5kcmFpbk9ic2VydmVycygpYCDigJQgc2VlIGBEcmFpblJlc3VsdGAuICovXG5leHBvcnQgdHlwZSBPYnNlcnZlckRyYWluUmVzdWx0ID0gRHJhaW5SZXN1bHQ7XG5cbi8qKiBXZWxsLWtub3duIGlkcyBvZiB0aGUgc3ludGhldGljIGNhcHR1cmUgdGFwcyAoaW50ZXJuYWwsIGRvY3VtZW50ZWQgZm9yIGRlYnVnZ2luZykuICovXG5leHBvcnQgY29uc3QgREVGRVJSRURfU0NPUEVfVEFQX0lEID0gJ19fZGVmZXJyZWQtc2NvcGUtdGFwX18nO1xuZXhwb3J0IGNvbnN0IERFRkVSUkVEX0ZMT1dfVEFQX0lEID0gJ19fZGVmZXJyZWQtZmxvdy10YXBfXyc7XG5cbi8qKiBDaGFubmVsIHJlYWNoIG9mIHRoZSBzY29wZS1yZWNvcmRlciBsaXN0IChzY29wZSBldmVudHMgKyBlbWl0IGV2ZW50cykuICovXG5jb25zdCBTQ09QRV9MSVNUX0NIQU5ORUxTOiByZWFkb25seSBDYXB0dXJlQ2hhbm5lbFtdID0gWydzY29wZScsICdlbWl0J107XG4vKiogQ2hhbm5lbCByZWFjaCBvZiB0aGUgZmxvdy1yZWNvcmRlciBsaXN0LiAqL1xuY29uc3QgRkxPV19MSVNUX0NIQU5ORUxTOiByZWFkb25seSBDYXB0dXJlQ2hhbm5lbFtdID0gWydmbG93J107XG5cbi8qKiBEaXNwYXRjaGVyLWxldmVsIG9wdGlvbnMgc25hcHNob3QsIGtlcHQgZm9yIGNvbmZsaWN0IGRldGVjdGlvbi4gKi9cbmludGVyZmFjZSBBcHBsaWVkRGlzcGF0Y2hlckNvbmZpZyB7XG4gIHJlYWRvbmx5IGNhcHR1cmU/OiBDYXB0dXJlUG9saWN5O1xuICByZWFkb25seSBtYXhRdWV1ZT86IG51bWJlcjtcbiAgcmVhZG9ubHkgb3ZlcmZsb3c/OiBPdmVyZmxvd1BvbGljeTtcbiAgcmVhZG9ubHkgc2FtcGxlRXZlcnk/OiBudW1iZXI7XG4gIHJlYWRvbmx5IGZsdXNoQnVkZ2V0TXM/OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBEZWZlcnJlZFJlZ2lzdHJhdGlvbiB7XG4gIHJlYWRvbmx5IHJlY29yZGVyOiBTY29wZVJlY29yZGVyIHwgRmxvd1JlY29yZGVyO1xuICAvKiogV2hpY2ggZW52ZWxvcGUgY2hhbm5lbHMgcmVhY2ggdGhpcyByZWNvcmRlciAoaW5saW5lLXRpZXIgcGFyaXR5KS4gKi9cbiAgcmVhZG9ubHkgY2hhbm5lbHM6IFNldDxDYXB0dXJlQ2hhbm5lbD47XG59XG5cbmV4cG9ydCBjbGFzcyBEZWZlcnJlZE9ic2VydmVyVGllciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGlzcGF0Y2hlcjogRGVmZXJyZWREaXNwYXRjaGVyO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlZ2lzdHJhdGlvbnMgPSBuZXcgTWFwPHN0cmluZywgRGVmZXJyZWRSZWdpc3RyYXRpb24+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBwbGllZENvbmZpZzogQXBwbGllZERpc3BhdGNoZXJDb25maWc7XG4gIC8qKiBEZWR1cCBtZW1vcnkgZm9yIHRoZSBkZXYtd2FybiBzZWFtIChvbmUgd2FybmluZyBwZXIgdW5pcXVlIG1lc3NhZ2UpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHdhcm5lZE1lc3NhZ2VzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgdGVybWluYWxTdHJhbmRlZCA9IDA7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IEF0dGFjaFJlY29yZGVyT3B0aW9ucykge1xuICAgIHRoaXMuYXBwbGllZENvbmZpZyA9IHtcbiAgICAgIC8vIEF0dGFjaC1zdXJmYWNlIGRlZmF1bHQgaXMgJ2Nsb25lJyAocmV2aWV3IENSSVRJQ0FMLTIpOiBhIHJlY29yZGVyXG4gICAgICAvLyBwb3J0ZWQgd2l0aCBgeyBkZWxpdmVyeTogJ2RlZmVycmVkJyB9YCBrZWVwcyByZWNlaXZpbmcgdGhlIFNBTUVcbiAgICAgIC8vIGV2ZW50IHNoYXBlIGFzIGlubGluZSAoZS5rZXkvZS52YWx1ZS9lLnJ1bnRpbWVTdGFnZUlkIGFsbCBpbnRhY3QpLlxuICAgICAgLy8gVGhlIG1vZHVsZS1pbnRlcm5hbCBlbnZlbG9wZSBkZWZhdWx0IHN0YXlzICdzdW1tYXJ5JyBmb3IgcmF3LVxuICAgICAgLy8gZW52ZWxvcGUgY29uc3VtZXJzOyAnc3VtbWFyeScgaGVyZSBpcyBhbiBleHBsaWNpdCB0ZWxlbWV0cnkgY2hvaWNlLlxuICAgICAgY2FwdHVyZTogb3B0aW9ucz8uY2FwdHVyZSA/PyAnY2xvbmUnLFxuICAgICAgbWF4UXVldWU6IG9wdGlvbnM/Lm1heFF1ZXVlLFxuICAgICAgb3ZlcmZsb3c6IG9wdGlvbnM/Lm92ZXJmbG93LFxuICAgICAgc2FtcGxlRXZlcnk6IG9wdGlvbnM/LnNhbXBsZUV2ZXJ5LFxuICAgICAgZmx1c2hCdWRnZXRNczogb3B0aW9ucz8uZmx1c2hCdWRnZXRNcyxcbiAgICB9O1xuICAgIHRoaXMuZGlzcGF0Y2hlciA9IG5ldyBEZWZlcnJlZERpc3BhdGNoZXIoe1xuICAgICAgbWF4UXVldWU6IG9wdGlvbnM/Lm1heFF1ZXVlLFxuICAgICAgb3ZlcmZsb3c6IG9wdGlvbnM/Lm92ZXJmbG93LFxuICAgICAgc2FtcGxlRXZlcnk6IG9wdGlvbnM/LnNhbXBsZUV2ZXJ5LFxuICAgICAgY2FwdHVyZVBvbGljeTogb3B0aW9ucz8uY2FwdHVyZSA/PyAnY2xvbmUnLFxuICAgICAgZmx1c2hCdWRnZXRNczogb3B0aW9ucz8uZmx1c2hCdWRnZXRNcyxcbiAgICAgIC8vIFRoZSBkZXYtd2FybiBzZWFtIChSRkMtMDAxIMKnXCJSZXNvbHV0aW9uOiB0aGUgZGV2LXdhcm4gc2VhbVwiKTogdGhlXG4gICAgICAvLyBwdXJlIG1vZHVsZSBpbnZva2VzIGB3YXJuYCBvbiBldmVyeSAncmVmJyBjYXB0dXJlIGFuZCBldmVyeSAnY2xvbmUnXG4gICAgICAvLyBkZWdyYWRhdGlvbjsgdGhlIHRpZXIgYmluZHMgaXQgdG8gdGhlIGNlbnRyYWwgaXNEZXZNb2RlKCkgZmxhZyBhbmRcbiAgICAgIC8vIGRlZHVwZXMgYnkgbWVzc2FnZSBzbyBhIGhvdCBsb29wIGNhbm5vdCBzcGFtIHRoZSBjb25zb2xlLlxuICAgICAgaG9va3M6IHsgd2FybjogKG1lc3NhZ2UpID0+IHRoaXMuZGV2V2FybkRlZHVwZWQobWVzc2FnZSkgfSxcbiAgICAgIC8vIExpc3RlbmVyIGZhaWx1cmVzIChzeW5jIHRocm93cyBBTkQgYXN5bmMgcmVqZWN0aW9ucykgcm91dGUgaW50byB0aGVcbiAgICAgIC8vIGV4aXN0aW5nIHJlY29yZGVyIGVycm9yIGNoYW5uZWwg4oCUIHNlZSByb3V0ZUxpc3RlbmVyRXJyb3IuXG4gICAgICBvbkVycm9yOiAoZXJyb3IsIGN0eCkgPT4gdGhpcy5yb3V0ZUxpc3RlbmVyRXJyb3IoZXJyb3IsIGN0eC5saXN0ZW5lcklkLCBjdHguZW52ZWxvcGUsIGN0eC5waGFzZSksXG4gICAgfSk7XG4gIH1cblxuICAvLyDilIDilIAgUmVnaXN0cnkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgcmVjb3JkZXIgZm9yIGRlZmVycmVkIGRlbGl2ZXJ5IG9uIHRoZSBzY29wZS1saXN0IGNoYW5uZWxzXG4gICAqIChgc2NvcGVgICsgYGVtaXRgKSBhbmQvb3IgdGhlIGZsb3cgY2hhbm5lbC4gSWRlbXBvdGVudCBieSBpZCDigJQgc2FtZSBpZFxuICAgKiByZXBsYWNlcyB0aGUgcmVjb3JkZXIgb2JqZWN0OyBjaGFubmVsIGxpc3RzIE1FUkdFIGFjcm9zcyBjYWxscyAoc2FtZSBhc1xuICAgKiB0aGUgaW5saW5lIHRpZXIsIHdoZXJlIGBhdHRhY2hTY29wZVJlY29yZGVyKHgpYCArIGBhdHRhY2hGbG93UmVjb3JkZXIoeClgXG4gICAqIGxhbmRzIGB4YCBvbiBib3RoIGxpc3RzKS4gTGF0ZXIgYXR0YWNoZXMgcGFzc2luZyBkaXNwYXRjaGVyLWxldmVsXG4gICAqIG9wdGlvbnMgdGhhdCBkaWZmZXIgZnJvbSB0aGUgZmlyc3QgYXR0YWNoJ3MgY29uZmlndXJhdGlvbiBrZWVwIHRoZVxuICAgKiBvcmlnaW5hbCBjb25maWcgYW5kIGRldi13YXJuLlxuICAgKi9cbiAgcmVnaXN0ZXIoXG4gICAgcmVjb3JkZXI6IFNjb3BlUmVjb3JkZXIgfCBGbG93UmVjb3JkZXIsXG4gICAgbGlzdHM6IHsgc2NvcGU/OiBib29sZWFuOyBmbG93PzogYm9vbGVhbiB9LFxuICAgIG9wdGlvbnM/OiBBdHRhY2hSZWNvcmRlck9wdGlvbnMsXG4gICk6IHZvaWQge1xuICAgIHRoaXMud2Fybk9uQ29uZmlnQ29uZmxpY3QocmVjb3JkZXIuaWQsIG9wdGlvbnMpO1xuICAgIGNvbnN0IGNoYW5uZWxzID0gdGhpcy5yZWdpc3RyYXRpb25zLmdldChyZWNvcmRlci5pZCk/LmNoYW5uZWxzID8/IG5ldyBTZXQ8Q2FwdHVyZUNoYW5uZWw+KCk7XG4gICAgaWYgKGxpc3RzLnNjb3BlKSBmb3IgKGNvbnN0IGMgb2YgU0NPUEVfTElTVF9DSEFOTkVMUykgY2hhbm5lbHMuYWRkKGMpO1xuICAgIGlmIChsaXN0cy5mbG93KSBmb3IgKGNvbnN0IGMgb2YgRkxPV19MSVNUX0NIQU5ORUxTKSBjaGFubmVscy5hZGQoYyk7XG4gICAgdGhpcy5yZWdpc3RyYXRpb25zLnNldChyZWNvcmRlci5pZCwgeyByZWNvcmRlciwgY2hhbm5lbHMgfSk7XG4gICAgdGhpcy5kaXNwYXRjaGVyLmFkZExpc3RlbmVyKHJlY29yZGVyLmlkLCAoZW52ZWxvcGUpID0+IHtcbiAgICAgIGNvbnN0IHJlZ2lzdHJhdGlvbiA9IHRoaXMucmVnaXN0cmF0aW9ucy5nZXQocmVjb3JkZXIuaWQpO1xuICAgICAgaWYgKCFyZWdpc3RyYXRpb24gfHwgIXJlZ2lzdHJhdGlvbi5jaGFubmVscy5oYXMoZW52ZWxvcGUuY2hhbm5lbCkpIHJldHVybjtcbiAgICAgIC8vIFNBTUUgaW52b2tlIGhlbHBlciBhcyB0aGUgaW5saW5lIHRpZXIgKFJGQy0wMDEgwqc5IG1pdGlnYXRpb24pIOKAlCBhXG4gICAgICAvLyByZXR1cm5lZCBQcm9taXNlIGxhbmRzIGluIHRoZSBkaXNwYXRjaGVyJ3MgaW5mbGlnaHQgc2V0LlxuICAgICAgcmV0dXJuIGludm9rZVJlY29yZGVySG9vayhyZWNvcmRlciwgZW52ZWxvcGUubWV0aG9kLCBlbnZlbG9wZS5wYXlsb2FkKSBhcyB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgdGhlIGdpdmVuIGNoYW5uZWwgbGlzdHMgZnJvbSBhIHJlZ2lzdHJhdGlvbiAobWlycm9ycyB0aGUgaW5saW5lXG4gICAqIHRpZXIsIHdoZXJlIGBkZXRhY2hTY29wZVJlY29yZGVyYCAvIGBkZXRhY2hGbG93UmVjb3JkZXJgIGVhY2ggY2xlYXIgb25lXG4gICAqIGxpc3QpLiBXaGVuIG5vIGNoYW5uZWxzIHJlbWFpbiwgdGhlIGxpc3RlbmVyIGlzIGZ1bGx5IHJlbW92ZWQuXG4gICAqL1xuICByZW1vdmVGcm9tTGlzdHMoaWQ6IHN0cmluZywgbGlzdHM6IHsgc2NvcGU/OiBib29sZWFuOyBmbG93PzogYm9vbGVhbiB9KTogdm9pZCB7XG4gICAgY29uc3QgcmVnaXN0cmF0aW9uID0gdGhpcy5yZWdpc3RyYXRpb25zLmdldChpZCk7XG4gICAgaWYgKCFyZWdpc3RyYXRpb24pIHJldHVybjtcbiAgICBpZiAobGlzdHMuc2NvcGUpIGZvciAoY29uc3QgYyBvZiBTQ09QRV9MSVNUX0NIQU5ORUxTKSByZWdpc3RyYXRpb24uY2hhbm5lbHMuZGVsZXRlKGMpO1xuICAgIGlmIChsaXN0cy5mbG93KSBmb3IgKGNvbnN0IGMgb2YgRkxPV19MSVNUX0NIQU5ORUxTKSByZWdpc3RyYXRpb24uY2hhbm5lbHMuZGVsZXRlKGMpO1xuICAgIGlmIChyZWdpc3RyYXRpb24uY2hhbm5lbHMuc2l6ZSA9PT0gMCkge1xuICAgICAgdGhpcy5yZWdpc3RyYXRpb25zLmRlbGV0ZShpZCk7XG4gICAgICB0aGlzLmRpc3BhdGNoZXIucmVtb3ZlTGlzdGVuZXIoaWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBUcnVlIHdoZW4gYGlkYCBpcyByZWdpc3RlcmVkIGZvciBkZWZlcnJlZCBkZWxpdmVyeSAoYW55IGNoYW5uZWwpLiAqL1xuICBoYXMoaWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnJlZ2lzdHJhdGlvbnMuaGFzKGlkKTtcbiAgfVxuXG4gIC8qKiBEZWZlcnJlZCByZWNvcmRlcnMgd2hvc2UgcmVhY2ggaW5jbHVkZXMgdGhlIHNjb3BlIGxpc3QgKHNjb3BlK2VtaXQpLiAqL1xuICBzY29wZUxpc3RSZWNvcmRlcnMoKTogU2NvcGVSZWNvcmRlcltdIHtcbiAgICByZXR1cm4gdGhpcy5ieUNoYW5uZWwoJ3Njb3BlJykgYXMgU2NvcGVSZWNvcmRlcltdO1xuICB9XG5cbiAgLyoqIERlZmVycmVkIHJlY29yZGVycyB3aG9zZSByZWFjaCBpbmNsdWRlcyB0aGUgZmxvdyBjaGFubmVsLiAqL1xuICBmbG93TGlzdFJlY29yZGVycygpOiBGbG93UmVjb3JkZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuYnlDaGFubmVsKCdmbG93JykgYXMgRmxvd1JlY29yZGVyW107XG4gIH1cblxuICAvKiogUmVzZXQgZGVmZXJyZWQgcmVjb3JkZXJzIGJlZm9yZSBhIGZyZXNoIHJ1biAoc2FtZSBjb250cmFjdCBhcyBpbmxpbmUpLiAqL1xuICBjbGVhclJlY29yZGVycygpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHsgcmVjb3JkZXIgfSBvZiB0aGlzLnJlZ2lzdHJhdGlvbnMudmFsdWVzKCkpIHtcbiAgICAgIChyZWNvcmRlciBhcyB7IGNsZWFyPzogKCkgPT4gdm9pZCB9KS5jbGVhcj8uKCk7XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIENhcHR1cmUgdGFwcyAoQmxvY2sgNykg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBzeW50aGV0aWMgc2NvcGUtY2hhbm5lbCB0YXAg4oCUIGEgYFNjb3BlUmVjb3JkZXJgIHBsYWNlZCBvbiB0aGVcbiAgICogbm9ybWFsIHNjb3BlLXJlY29yZGVyIGxpc3Qgd2hvc2UgaG9va3MgY2FwdHVyZSBpbnRvIHRoZSBxdWV1ZS4gQnVpbHRcbiAgICogZnJlc2ggcGVyIHRyYXZlcnNlciBzbyBpdCByZWZsZWN0cyB0aGUgY3VycmVudCByZWdpc3RyYXRpb25zLiBPbmx5XG4gICAqIG1ldGhvZHMgc29tZSBkZWZlcnJlZCByZWNvcmRlciBhY3R1YWxseSBpbXBsZW1lbnRzIGFyZSBwcmVzZW50IChub1xuICAgKiB3YXN0ZWQgY2FwdHVyZXMpLiBSZXR1cm5zIGB1bmRlZmluZWRgIHdoZW4gbm90aGluZyBpcyByZWdpc3RlcmVkIGZvclxuICAgKiB0aGUgc2NvcGUgbGlzdC5cbiAgICpcbiAgICogUmVkYWN0aW9uIG9yZGVyaW5nOiB0aGUgdGFwIGlzIGludm9rZWQgZnJvbSB0aGUgU0FNRSBsb29wcyBhcyBpbmxpbmVcbiAgICogcmVjb3JkZXJzIChgX2ludm9rZUhvb2tgIC8gYGVtaXRFdmVudGApLCB3aGljaCByZWNlaXZlIGV2ZW50cyBBRlRFUiB0aGVcbiAgICogcmVkYWN0aW9uIGRlY2lzaW9uIOKAlCBzbyBhIGNhcHR1cmVkIHBheWxvYWQgY2FuIG5ldmVyIGNvbnRhaW4gYVxuICAgKiBwcmUtcmVkYWN0aW9uIHZhbHVlIHRoZSBpbmxpbmUgdGllciB3b3VsZCBub3QgaGF2ZSBzZWVuLlxuICAgKi9cbiAgYnVpbGRTY29wZVRhcCgpOiBTY29wZVJlY29yZGVyIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByZWNvcmRlcnMgPSB0aGlzLnNjb3BlTGlzdFJlY29yZGVycygpO1xuICAgIGlmIChyZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHRhcDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IGlkOiBERUZFUlJFRF9TQ09QRV9UQVBfSUQgfTtcbiAgICAvLyBEZXJpdmVkIGZyb20gdGhlIGhvb2sgcmVnaXN0cnk6IGV2ZXJ5IGhvb2sgb2YgdGhlIHNjb3BlIGNoYW5uZWwgYW5kIG9mIHRoZSBlbWl0IGNoYW5uZWxcbiAgICAvLyAod2hpY2ggcmlkZXMgdGhlIHNjb3BlIGxpc3QpIOKAlCBhIGhvb2sgdGhlIHJlZ2lzdHJ5IGdhaW5zIGlzIHRhcHBlZCB3aXRoIG5vIGVkaXQgaGVyZS5cbiAgICBmb3IgKGNvbnN0IGNoYW5uZWwgb2YgWydzY29wZScsICdlbWl0J10gYXMgY29uc3QpIHtcbiAgICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIGhvb2tzT24oY2hhbm5lbCkpIHtcbiAgICAgICAgaWYgKCF0aGlzLmFueUltcGxlbWVudHMocmVjb3JkZXJzLCBtZXRob2QpKSBjb250aW51ZTtcbiAgICAgICAgdGFwW21ldGhvZF0gPSAoZXZlbnQ6IHVua25vd24pID0+IHRoaXMuY2FwdHVyZVNjb3BlRXZlbnQoY2hhbm5lbCwgbWV0aG9kLCBldmVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YXAgYXMgdW5rbm93biBhcyBTY29wZVJlY29yZGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBzeW50aGV0aWMgZmxvdy1jaGFubmVsIHRhcCDigJQgYSBgRmxvd1JlY29yZGVyYCBhcHBlbmRlZCB0byB0aGVcbiAgICogZmxvdy1yZWNvcmRlcnMgbGlzdCBoYW5kZWQgdG8gdGhlIHRyYXZlcnNlci4gU2FtZSBjb250cmFjdCBhc1xuICAgKiB7QGxpbmsgYnVpbGRTY29wZVRhcH0uXG4gICAqL1xuICBidWlsZEZsb3dUYXAoKTogRmxvd1JlY29yZGVyIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCByZWNvcmRlcnMgPSB0aGlzLmZsb3dMaXN0UmVjb3JkZXJzKCk7XG4gICAgaWYgKHJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgdGFwOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsgaWQ6IERFRkVSUkVEX0ZMT1dfVEFQX0lEIH07XG4gICAgZm9yIChjb25zdCBtZXRob2Qgb2YgaG9va3NPbignZmxvdycpKSB7XG4gICAgICBpZiAoIXRoaXMuYW55SW1wbGVtZW50cyhyZWNvcmRlcnMsIG1ldGhvZCkpIGNvbnRpbnVlO1xuICAgICAgdGFwW21ldGhvZF0gPSAoZXZlbnQ6IHVua25vd24pID0+IHRoaXMuY2FwdHVyZUZsb3dFdmVudChtZXRob2QsIGV2ZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHRhcCBhcyB1bmtub3duIGFzIEZsb3dSZWNvcmRlcjtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXJlY3QgY2FwdHVyZSBmb3IgZXhlY3V0b3Itc3ludGhlc2l6ZWQgZXZlbnRzIHRoYXQgYnlwYXNzIHRoZSBkaXNwYXRjaFxuICAgKiBzaXRlcyAoZS5nLiB0aGUgc3ludGhldGljIGBvblJlc3VtZWAgdGhlIGV4ZWN1dG9yIGZpcmVzIG9uIHJlc3VtZSkuXG4gICAqL1xuICBjYXB0dXJlKGNoYW5uZWw6IENhcHR1cmVDaGFubmVsLCBtZXRob2Q6IHN0cmluZywgcnVudGltZVN0YWdlSWQ6IHN0cmluZywgcnVuSWQ6IHN0cmluZywgcGF5bG9hZDogdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMuZGlzcGF0Y2hlci5jYXB0dXJlKHsgY2hhbm5lbCwgbWV0aG9kLCBydW50aW1lU3RhZ2VJZCwgcnVuSWQsIHBheWxvYWQgfSk7XG4gIH1cblxuICAvLyDilIDilIAgVGVybWluYWwgZmx1c2ggKyBkcmFpbiAoQmxvY2sgOCkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIFN5bmNocm9ub3VzbHkgZGVsaXZlciBldmVyeXRoaW5nIHN0aWxsIHF1ZXVlZCDigJQgY2FsbGVkIGJ5IHRoZSBleGVjdXRvclxuICAgKiBhdCB0aGUgT1VURVJNT1NUIHJ1biBib3VuZGFyeSAocmVzb2x2ZSwgcmVqZWN0LCBwYXVzZSksIEJFRk9SRSBgcnVuKClgXG4gICAqIHJldHVybnMgLyByZXRocm93cyAvIHRoZSBjaGVja3BvaW50IGJlY29tZXMgYXZhaWxhYmxlLiBJbnNwZWN0c1xuICAgKiBgZmx1c2hTeW5jYCdzIGByZW1haW5pbmdgIChyZXZpZXdlciBOMSk6IGBmbHVzaFN5bmNgIGFscmVhZHkgbG9vcHNcbiAgICogc25hcHNob3Qgcm91bmRzIHVwIHRvIGl0cyBydW5hd2F5LWNhc2NhZGUgY2FwLCBzbyBhIG5vbi16ZXJvIHJlbWFpbmRlclxuICAgKiBtZWFucyBhIHBhdGhvbG9naWNhbCBzZWxmLWVucXVldWVpbmcgbGlzdGVuZXIg4oCUIGNvdW50ZWQgaW5cbiAgICogYG9ic2VydmVyU3RhdHMudGVybWluYWxTdHJhbmRlZGAgYW5kIGRldi13YXJuZWQsIG5ldmVyIHNpbGVudC5cbiAgICovXG4gIHRlcm1pbmFsRmx1c2goKTogdm9pZCB7XG4gICAgY29uc3QgeyByZW1haW5pbmcgfSA9IHRoaXMuZGlzcGF0Y2hlci5mbHVzaE5vdygpO1xuICAgIGlmIChyZW1haW5pbmcgPiAwKSB7XG4gICAgICB0aGlzLnRlcm1pbmFsU3RyYW5kZWQgKz0gcmVtYWluaW5nO1xuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgW2Zvb3RwcmludGpzXSBkZWZlcnJlZCBvYnNlcnZlcnM6IHRlcm1pbmFsIGZsdXNoIGhpdCB0aGUgcnVuYXdheS1jYXNjYWRlIGNhcCB3aXRoICR7cmVtYWluaW5nfSBgICtcbiAgICAgICAgICAgICdldmVudChzKSBzdGlsbCBxdWV1ZWQg4oCUIGEgbGlzdGVuZXIga2VwdCBlbnF1ZXVlaW5nIGR1cmluZyB0aGUgZmx1c2guIFRoZSBzdHJhbmRlZCBjb3VudCBpcyAnICtcbiAgICAgICAgICAgICdzdXJmYWNlZCBvbiBzbmFwc2hvdC5vYnNlcnZlclN0YXRzLnRlcm1pbmFsU3RyYW5kZWQuJyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmx1c2ggdGhlIGJhY2tsb2csIHRoZW4gc2V0dGxlIGFzeW5jIGxpc3RlbmVyIGNvbnRpbnVhdGlvbnMgdW5kZXIgYVxuICAgKiBkZWFkbGluZSDigJQgdGhlIHNlcnZlcmxlc3MgLyBncmFjZWZ1bC1zaHV0ZG93biBwYXR0ZXJuIChSRkMtMDAxIMKnMTEpLlxuICAgKi9cbiAgZHJhaW4ob3B0cz86IHsgdGltZW91dE1zPzogbnVtYmVyIH0pOiBQcm9taXNlPE9ic2VydmVyRHJhaW5SZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5kaXNwYXRjaGVyLmRyYWluKG9wdHMpO1xuICB9XG5cbiAgLy8g4pSA4pSAIFN0YXRzIChCbG9jayA5KSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogVGhlIGBzbmFwc2hvdC5vYnNlcnZlclN0YXRzYCBwYXlsb2FkIOKAlCBBNCBzdGF0cyArIEJsb2NrIDggc3RyYW5kaW5nLiAqL1xuICBnZXRTdGF0cygpOiBPYnNlcnZlclN0YXRzIHtcbiAgICByZXR1cm4geyAuLi50aGlzLmRpc3BhdGNoZXIuZ2V0U3RhdHMoKSwgdGVybWluYWxTdHJhbmRlZDogdGhpcy50ZXJtaW5hbFN0cmFuZGVkIH07XG4gIH1cblxuICAvLyDilIDilIAgSW50ZXJuYWxzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIHByaXZhdGUgYnlDaGFubmVsKGNoYW5uZWw6IENhcHR1cmVDaGFubmVsKTogQXJyYXk8U2NvcGVSZWNvcmRlciB8IEZsb3dSZWNvcmRlcj4ge1xuICAgIGNvbnN0IG91dDogQXJyYXk8U2NvcGVSZWNvcmRlciB8IEZsb3dSZWNvcmRlcj4gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHsgcmVjb3JkZXIsIGNoYW5uZWxzIH0gb2YgdGhpcy5yZWdpc3RyYXRpb25zLnZhbHVlcygpKSB7XG4gICAgICBpZiAoY2hhbm5lbHMuaGFzKGNoYW5uZWwpKSBvdXQucHVzaChyZWNvcmRlcik7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICAvKiogTm9ybWFsIHByb3BlcnR5IGxvb2t1cCDigJQgaW52b2NhdGlvbiBwYXJpdHkgd2l0aCB0aGUgaW5saW5lIHRpZXIuICovXG4gIHByaXZhdGUgYW55SW1wbGVtZW50cyhyZWNvcmRlcnM6IEFycmF5PFNjb3BlUmVjb3JkZXIgfCBGbG93UmVjb3JkZXI+LCBtZXRob2Q6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiByZWNvcmRlcnMuc29tZSgocikgPT4gdHlwZW9mIChyIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW21ldGhvZF0gPT09ICdmdW5jdGlvbicpO1xuICB9XG5cbiAgLyoqIFNjb3BlL2VtaXQgZXZlbnRzIGNhcnJ5IHRoZWlyIG93biBpZHMgKGBydW50aW1lU3RhZ2VJZGAgKyBgcGlwZWxpbmVJZGApLiAqL1xuICBwcml2YXRlIGNhcHR1cmVTY29wZUV2ZW50KGNoYW5uZWw6IENhcHR1cmVDaGFubmVsLCBtZXRob2Q6IHN0cmluZywgZXZlbnQ6IHVua25vd24pOiB2b2lkIHtcbiAgICBjb25zdCBlID0gZXZlbnQgYXMgeyBydW50aW1lU3RhZ2VJZD86IHN0cmluZzsgcGlwZWxpbmVJZD86IHN0cmluZyB9IHwgdW5kZWZpbmVkO1xuICAgIHRoaXMuZGlzcGF0Y2hlci5jYXB0dXJlKHtcbiAgICAgIGNoYW5uZWwsXG4gICAgICBtZXRob2QsXG4gICAgICBydW50aW1lU3RhZ2VJZDogZT8ucnVudGltZVN0YWdlSWQgPz8gJycsXG4gICAgICBydW5JZDogZT8ucGlwZWxpbmVJZCA/PyAnJyxcbiAgICAgIHBheWxvYWQ6IGV2ZW50LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIEZsb3cgZXZlbnRzIGNhcnJ5IGlkcyBvbiBgdHJhdmVyc2FsQ29udGV4dGAgKGFic2VudCBvbiBhIGZldyBldmVudHMpLiAqL1xuICBwcml2YXRlIGNhcHR1cmVGbG93RXZlbnQobWV0aG9kOiBzdHJpbmcsIGV2ZW50OiB1bmtub3duKTogdm9pZCB7XG4gICAgY29uc3QgY3R4ID0gKGV2ZW50IGFzIHsgdHJhdmVyc2FsQ29udGV4dD86IHsgcnVudGltZVN0YWdlSWQ/OiBzdHJpbmc7IHJ1bklkPzogc3RyaW5nIH0gfSB8IHVuZGVmaW5lZClcbiAgICAgID8udHJhdmVyc2FsQ29udGV4dDtcbiAgICB0aGlzLmRpc3BhdGNoZXIuY2FwdHVyZSh7XG4gICAgICBjaGFubmVsOiAnZmxvdycsXG4gICAgICBtZXRob2QsXG4gICAgICBydW50aW1lU3RhZ2VJZDogY3R4Py5ydW50aW1lU3RhZ2VJZCA/PyAnJyxcbiAgICAgIHJ1bklkOiBjdHg/LnJ1bklkID8/ICcnLFxuICAgICAgcGF5bG9hZDogZXZlbnQsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUm91dGUgYSBkZWZlcnJlZCBsaXN0ZW5lciBmYWlsdXJlIGludG8gdGhlIGV4aXN0aW5nIHJlY29yZGVyIGVycm9yXG4gICAqIGNoYW5uZWw6IGV2ZXJ5IHJlZ2lzdGVyZWQgc2NvcGUgb2JzZXJ2ZXIg4oCUIHRoZSBmYWlsaW5nIG9uZSBpbmNsdWRlZCwgaW5cbiAgICogcmVnaXN0cmF0aW9uIG9yZGVyIOKAlCByZWNlaXZlcyB0aGUgc2NvcGUtc2hhcGVkIGBvbkVycm9yYCBldmVudCB0aGUgaW5saW5lXG4gICAqIHRpZXIgYnVpbGRzIChgcmVjb3JkZXJGYWlsdXJlRXZlbnRgKSwgYW5kIGEgdGhyb3cgZnJvbSBgb25FcnJvcmAgaXRzZWxmXG4gICAqIGlzIG5vdCByb3V0ZWQgYWdhaW46IHRoZSBjb250cmFjdCB0aGUgaW5saW5lIHRpZXIgaG9ub3JzIHdoZW4gYSByZWNvcmRlclxuICAgKiB0aHJvd3MgbWlkLWRpc3BhdGNoICg5LjM5LjAg4oCUIGJlZm9yZSwgdGhlIGZhaWxpbmcgbGlzdGVuZXIgd2FzIHNraXBwZWQsXG4gICAqIHNvIGEgQ29tcG9zaXRlUmVjb3JkZXIncyBvdGhlciBjaGlsZHJlbiBuZXZlciBoZWFyZCBhIHNpYmxpbmcncyB0aHJvdykuXG4gICAqIFRoZSBlcnJvciBzaW5rIG11c3QgbmV2ZXIgYmVjb21lIGFuIGVycm9yIHNvdXJjZTogc2luayB0aHJvd3MgYXJlXG4gICAqIHN3YWxsb3dlZCAoaXNvbGF0aW9uIGlzIGFic29sdXRlKS5cbiAgICovXG4gIHByaXZhdGUgcm91dGVMaXN0ZW5lckVycm9yKFxuICAgIGVycm9yOiB1bmtub3duLFxuICAgIGxpc3RlbmVySWQ6IHN0cmluZyxcbiAgICBlbnZlbG9wZTogQ2FwdHVyZUVudmVsb3BlLFxuICAgIHBoYXNlOiAnc3luYycgfCAnYXN5bmMnLFxuICApOiB2b2lkIHtcbiAgICAvLyBJbmxpbmUgcGFyaXR5ICg5LjM5LjApOiB0aGUgaW5saW5lIHRpZXIgaGFuZHMgYSByZWNvcmRlcidzIHRocm93IHRvIEVWRVJZIHJlY29yZGVyIG9uIHRoZVxuICAgIC8vIHNjb3BlIGxpc3Qg4oCUIHRoZSB0aHJvd2VyIGluY2x1ZGVkLCBzbyBhIENvbXBvc2l0ZVJlY29yZGVyJ3Mgb3RoZXIgY2hpbGRyZW4gaGVhciBpdCDigJQgYW5kXG4gICAgLy8gZHJvcHMgYSB0aHJvdyBmcm9tIGBvbkVycm9yYCBpdHNlbGYuIFNhbWUgaGVyZSwgd2l0aCB0aGUgc2FtZSBldmVudCAoYHJlY29yZGVyRmFpbHVyZUV2ZW50YCkuXG4gICAgaWYgKGVudmVsb3BlLm1ldGhvZCAhPT0gJ29uRXJyb3InKSB0aGlzLmRlbGl2ZXJMaXN0ZW5lckVycm9yKGVycm9yLCBlbnZlbG9wZSk7XG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW2Zvb3RwcmludGpzXSBkZWZlcnJlZCBvYnNlcnZlciAnJHtsaXN0ZW5lcklkfScgZmFpbGVkICgke3BoYXNlfSkgaGFuZGxpbmcgYCArXG4gICAgICAgICAgYCR7ZW52ZWxvcGUuY2hhbm5lbH0uJHtlbnZlbG9wZS5tZXRob2R9IChzZXEgJHtlbnZlbG9wZS5zZXF9KTogJHtkZXNjcmliZVRocm93bihlcnJvcil9YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEhhbmQgb25lIGxpc3RlbmVyIGZhaWx1cmUgdG8gZXZlcnkgc2NvcGUgb2JzZXJ2ZXIgYXMgYW4gYG9uRXJyb3JgIOKAlCBzZWUge0BsaW5rIHJvdXRlTGlzdGVuZXJFcnJvcn0uICovXG4gIHByaXZhdGUgZGVsaXZlckxpc3RlbmVyRXJyb3IoZXJyb3I6IHVua25vd24sIGVudmVsb3BlOiBDYXB0dXJlRW52ZWxvcGUpOiB2b2lkIHtcbiAgICBjb25zdCBlcnJvckV2ZW50ID0gcmVjb3JkZXJGYWlsdXJlRXZlbnQoXG4gICAgICB7XG4gICAgICAgIHN0YWdlTmFtZTogJycsXG4gICAgICAgIHN0YWdlSWQ6IHN0YWdlSWRPZihlbnZlbG9wZS5ydW50aW1lU3RhZ2VJZCksXG4gICAgICAgIHJ1bnRpbWVTdGFnZUlkOiBlbnZlbG9wZS5ydW50aW1lU3RhZ2VJZCxcbiAgICAgICAgcGlwZWxpbmVJZDogZW52ZWxvcGUucnVuSWQsXG4gICAgICB9LFxuICAgICAgZXJyb3IsXG4gICAgICBlbnZlbG9wZS5tZXRob2QsXG4gICAgKTtcbiAgICBmb3IgKGNvbnN0IFssIHsgcmVjb3JkZXIsIGNoYW5uZWxzIH1dIG9mIHRoaXMucmVnaXN0cmF0aW9ucykge1xuICAgICAgLy8gSW5saW5lLXRpZXIgcGFyaXR5IChyZXZpZXcgQ1JJVElDQUwtMSk6IHRoZSBzeW50aGVzaXplZCBldmVudCBpc1xuICAgICAgLy8gc2NvcGUtdHlwZWQsIHNvIGl0IHJlYWNoZXMgT05MWSByZWNvcmRlcnMgcmVnaXN0ZXJlZCBvbiB0aGUgc2NvcGVcbiAgICAgIC8vIGxpc3RzIOKAlCBhIGZsb3ctb25seSByZWNvcmRlciBuZXZlciByZWNlaXZlcyBzY29wZS1jaGFubmVsIGVycm9yc1xuICAgICAgLy8gaW5saW5lIGFuZCBtdXN0IG5vdCBoZXJlIGVpdGhlci5cbiAgICAgIGlmICghY2hhbm5lbHMuaGFzKCdzY29wZScpKSBjb250aW51ZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGludm9rZVJlY29yZGVySG9vayhyZWNvcmRlciwgJ29uRXJyb3InLCBlcnJvckV2ZW50KTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBTd2FsbG93IOKAlCBzYW1lIHJ1bGUgYXMgRGVmZXJyZWREaXNwYXRjaGVyLnNhZmVPbkVycm9yLlxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKiBEaXNwYXRjaGVyLWxldmVsIG9wdGlvbnMgYXJlIGZpcnN0LWF0dGFjaC13aW5zOyBkaWZmZXJpbmcgbGF0ZXIgdmFsdWVzIGRldi13YXJuLiAqL1xuICBwcml2YXRlIHdhcm5PbkNvbmZpZ0NvbmZsaWN0KHJlY29yZGVySWQ6IHN0cmluZywgb3B0aW9ucz86IEF0dGFjaFJlY29yZGVyT3B0aW9ucyk6IHZvaWQge1xuICAgIGlmICghb3B0aW9ucykgcmV0dXJuO1xuICAgIGNvbnN0IGNvbmZsaWN0czogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCByZXF1ZXN0ZWQ6IEFwcGxpZWREaXNwYXRjaGVyQ29uZmlnID0ge1xuICAgICAgY2FwdHVyZTogb3B0aW9ucy5jYXB0dXJlLFxuICAgICAgbWF4UXVldWU6IG9wdGlvbnMubWF4UXVldWUsXG4gICAgICBvdmVyZmxvdzogb3B0aW9ucy5vdmVyZmxvdyxcbiAgICAgIHNhbXBsZUV2ZXJ5OiBvcHRpb25zLnNhbXBsZUV2ZXJ5LFxuICAgICAgZmx1c2hCdWRnZXRNczogb3B0aW9ucy5mbHVzaEJ1ZGdldE1zLFxuICAgIH07XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVxdWVzdGVkKSBhcyBBcnJheTxrZXlvZiBBcHBsaWVkRGlzcGF0Y2hlckNvbmZpZz4pIHtcbiAgICAgIGlmIChyZXF1ZXN0ZWRba2V5XSAhPT0gdW5kZWZpbmVkICYmIHJlcXVlc3RlZFtrZXldICE9PSB0aGlzLmFwcGxpZWRDb25maWdba2V5XSkge1xuICAgICAgICBjb25mbGljdHMucHVzaChTdHJpbmcoa2V5KSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjb25mbGljdHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5kZXZXYXJuRGVkdXBlZChcbiAgICAgICAgYFtmb290cHJpbnRqc10gYXR0YWNoICcke3JlY29yZGVySWR9JzogdGhlIGV4ZWN1dG9yJ3MgZGVmZXJyZWQtb2JzZXJ2ZXIgcXVldWUgd2FzIGFscmVhZHkgYCArXG4gICAgICAgICAgYGNvbmZpZ3VyZWQgYnkgdGhlIGZpcnN0IGRlZmVycmVkIGF0dGFjaCDigJQgaWdub3JpbmcgZGlmZmVyaW5nIG9wdGlvbihzKTogJHtjb25mbGljdHMuam9pbignLCAnKX0uIGAgK1xuICAgICAgICAgICdPbmUgZXhlY3V0b3IgaGFzIE9ORSBtZXJnZWQgcXVldWU7IGNvbmZpZ3VyZSBpdCBvbiB0aGUgZmlyc3QgZGVmZXJyZWQgYXR0YWNoLicsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBgaXNEZXZNb2RlKClgLWdhdGVkLCBkZWR1cGxpY2F0ZWQgd2FybmVyIOKAlCB0aGUgYm91bmQgd2FybiBzZWFtLiAqL1xuICBwcml2YXRlIGRldldhcm5EZWR1cGVkKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghaXNEZXZNb2RlKCkpIHJldHVybjtcbiAgICBpZiAodGhpcy53YXJuZWRNZXNzYWdlcy5oYXMobWVzc2FnZSkpIHJldHVybjtcbiAgICB0aGlzLndhcm5lZE1lc3NhZ2VzLmFkZChtZXNzYWdlKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbiAgfVxufVxuIl19
|
|
363
|
+
/**
|
|
364
|
+
* The run's correlation the failed event carried, as captured — a scope or emit event's own `correlation`, a flow
|
|
365
|
+
* event's on its `traversalContext` — spread into the synthesized `onError` (10.1). Empty when it carried none.
|
|
366
|
+
*/
|
|
367
|
+
function correlationOf(payload) {
|
|
368
|
+
if (payload === null || typeof payload !== 'object')
|
|
369
|
+
return {};
|
|
370
|
+
const event = payload;
|
|
371
|
+
const correlation = event.correlation ?? event.traversalContext?.correlation;
|
|
372
|
+
return correlation !== null && typeof correlation === 'object' ? { correlation: correlation } : {};
|
|
373
|
+
}
|
|
374
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGVmZXJyZWRPYnNlcnZlclRpZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3J1bm5lci9EZWZlcnJlZE9ic2VydmVyVGllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5Q0c7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBR3RDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzlELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUMsT0FBTyxFQU9MLGtCQUFrQixHQUNuQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUE2RHJGLHlGQUF5RjtBQUN6RixNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyx3QkFBd0IsQ0FBQztBQUM5RCxNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyx1QkFBdUIsQ0FBQztBQUU1RCw2RUFBNkU7QUFDN0UsTUFBTSxtQkFBbUIsR0FBOEIsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDekUsK0NBQStDO0FBQy9DLE1BQU0sa0JBQWtCLEdBQThCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFpQi9ELE1BQU0sT0FBTyxvQkFBb0I7SUFDZCxVQUFVLENBQXFCO0lBQy9CLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBZ0MsQ0FBQztJQUN4RCxhQUFhLENBQTBCO0lBQ3hELDJFQUEyRTtJQUMxRCxjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztJQUM1QyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7SUFFN0IsWUFBWSxPQUErQjtRQUN6QyxJQUFJLENBQUMsYUFBYSxHQUFHO1lBQ25CLG9FQUFvRTtZQUNwRSxr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Q0osQ0FBQztJQUNILENBQUM7SUFFRCxzRUFBc0U7SUFDOUQsY0FBYyxDQUFDLE9BQWU7UUFDcEMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUFFLE9BQU87UUFDekIsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7WUFBRSxPQUFPO1FBQzdDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLHNDQUFzQztRQUN0QyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hCLENBQUM7Q0FDRjtBQUVEOzs7R0FHRztBQUNILFNBQVMsYUFBYSxDQUFDLE9BQWdCO0lBQ3JDLElBQUksT0FBTyxLQUFLLElBQUksSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDL0QsTUFBTSxLQUFLLEdBQUcsT0FBa0YsQ0FBQztJQUNqRyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxXQUFXLENBQUM7SUFDN0UsT0FBTyxXQUFXLEtBQUssSUFBSSxJQUFJLE9BQU8sV0FBVyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsV0FBNkIsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDdkgsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogcnVubmVyL0RlZmVycmVkT2JzZXJ2ZXJUaWVyLnRzIOKAlCBSRkMtMDAxIEJsb2NrcyA24oCTOTogdGhlIGVuZ2luZSB3aXJpbmcgb2ZcbiAqIHRoZSBkZWZlcnJlZC1vYnNlcnZlciBwaXBlbGluZS5cbiAqXG4gKiBQYXR0ZXJuOiAgVGhpbiBhZGFwdGVyIGJldHdlZW4gdGhlIGV4ZWN1dG9yJ3MgdGhyZWUgb2JzZXJ2ZXIgY2hhbm5lbHMgYW5kXG4gKiAgICAgICAgICAgdGhlIFBVUkUgYG9ic2VydmVyLXF1ZXVlYCBtb2R1bGUuIFRoZSBwdXJlIG1vZHVsZSBzdGF5c1xuICogICAgICAgICAgIGVuZ2luZS1mcmVlIChpdCBpbXBvcnRzIG5vdGhpbmcgZnJvbSB0aGUgZW5naW5lIOKAlCB0aGUgZW5naW5lXG4gKiAgICAgICAgICAgaW1wb3J0cyBJVCk7IHRoaXMgdGllciBvd25zIGV2ZXJ5IGVuZ2luZS1mbGF2b3JlZCBjb25jZXJuOlxuICogICAgICAgICAgICAgLSB0aGUgYGlzRGV2TW9kZSgpYC1nYXRlZCwgZGVkdXBsaWNhdGVkIGBDYXB0dXJlSG9va3Mud2FybmBcbiAqICAgICAgICAgICAgICAgYmluZGluZyAodGhlIGRldi13YXJuIHNlYW0sIFJGQy0wMDEgwqdcIlJlc29sdXRpb25cIik7XG4gKiAgICAgICAgICAgICAtIHJvdXRpbmcgYERlZmVycmVkRGlzcGF0Y2hlci5vbkVycm9yYCBpbnRvIHRoZSBleGlzdGluZ1xuICogICAgICAgICAgICAgICByZWNvcmRlciBlcnJvciBjaGFubmVsIChgb25FcnJvcmAgb24gc2libGluZyBvYnNlcnZlcnMpO1xuICogICAgICAgICAgICAgLSB0aGUgY2FwdHVyZSBUQVBTIOKAlCBzeW50aGV0aWMgcmVjb3JkZXJzIHBsYWNlZCBvbiB0aGVcbiAqICAgICAgICAgICAgICAgZXhpc3RpbmcgaW5saW5lIGRpc3BhdGNoIGxpc3RzIHNvIHRoZSB0aHJlZSBkaXNwYXRjaCBzaXRlc1xuICogICAgICAgICAgICAgICAoYFNjb3BlRmFjYWRlLl9pbnZva2VIb29rYCwgYFNjb3BlRmFjYWRlLmVtaXRFdmVudGAsXG4gKiAgICAgICAgICAgICAgIGBGbG93UmVjb3JkZXJEaXNwYXRjaGVyYCkgbmVlZCBOTyBwZXItc2l0ZSB0aWVyIGxvZ2ljOiBhXG4gKiAgICAgICAgICAgICAgIHRhcCdzIGhvb2sgYm9keSBJUyBgZGlzcGF0Y2hlci5jYXB0dXJlKC4uLilgLCBhbmQgYmVjYXVzZVxuICogICAgICAgICAgICAgICB0aGUgdGFwIHNpdHMgaW4gdGhlIHNhbWUgbG9vcCBhcyBpbmxpbmUgcmVjb3JkZXJzIGl0IHNlZXNcbiAqICAgICAgICAgICAgICAgZXhhY3RseSB0aGUgcG9zdC1yZWRhY3Rpb24gZXZlbnQgb2JqZWN0IGlubGluZSBvYnNlcnZlcnNcbiAqICAgICAgICAgICAgICAgc2VlIOKAlCBjYXB0dXJlIGNhbiBuZXZlciBvYnNlcnZlIGEgcHJlLXJlZGFjdGlvbiB2YWx1ZTtcbiAqICAgICAgICAgICAgIC0gdGhlIHRlcm1pbmFsIGZsdXNoIChCbG9jayA4KSB3aXRoIGhvbmVzdCBzdHJhbmRpbmdcbiAqICAgICAgICAgICAgICAgYWNjb3VudGluZywgYW5kIHRoZSBCbG9jayA5IHN0YXRzIHN1cmZhY2UuXG4gKlxuICogUm9sZTogICAgIE9uZSBpbnN0YW5jZSBwZXIgYEZsb3dDaGFydEV4ZWN1dG9yYCwgY3JlYXRlZCBMQVpJTFkgb24gdGhlXG4gKiAgICAgICAgICAgZmlyc3QgYGRlbGl2ZXJ5OiAnZGVmZXJyZWQnYCBhdHRhY2ggKHplcm8gYWxsb2NhdGlvbiB3aGVuIG5vYm9keVxuICogICAgICAgICAgIG9wdHMgaW4g4oCUIG1pcnJvcnMgdGhlIGVtaXQgZmFzdC1wYXRoIHByZWNlZGVudCkuIEhvbGRzIHRoZSBPTkVcbiAqICAgICAgICAgICBgRGVmZXJyZWREaXNwYXRjaGVyYCAob25lIG1lcmdlZCBxdWV1ZSwgdG90YWwgb3JkZXIgYWNyb3NzXG4gKiAgICAgICAgICAgY2hhbm5lbHMpIHBsdXMgdGhlIHJlZ2lzdHJ5IG9mIGRlZmVycmVkIHJlY29yZGVycy5cbiAqXG4gKiBEZWxpdmVyeTogYSBkZWZlcnJlZCByZWNvcmRlcidzIGhvb2tzIGFyZSBpbnZva2VkIHRocm91Z2ggdGhlIFNBTUVcbiAqIGBpbnZva2VSZWNvcmRlckhvb2tgIGhlbHBlciB0aGUgaW5saW5lIHRpZXIgdXNlcyAoUkZDLTAwMSDCpzkgbWl0aWdhdGlvbikg4oCUXG4gKiBvbmUgYmVhdCBiZWhpbmQsIHdpdGggYGVudmVsb3BlLnBheWxvYWRgIG1hdGVyaWFsaXplZCBwZXIgdGhlIGNhcHR1cmVcbiAqIHBvbGljeSAoYCdjbG9uZSdgIGRlZmF1bHQgYXQgdGhpcyBhdHRhY2ggdGllciDigJQgZnVsbCBzdHJ1Y3R1cmFsIGNvcHksXG4gKiBldmVudC1zaGFwZSBjb21wYXRpYmxlIHdpdGggaW5saW5lOyBleHBsaWNpdCBgJ3N1bW1hcnknYCDigJQgYm91bmRlZCxcbiAqIHJlZmVyZW5jZS1mcmVlOyBgJ3JlZidgIOKAlCB0aGUgbGl2ZSBldmVudCBvYmplY3QsIGRldi13YXJuZWQpLiBUaGUgc3RhbmRhbG9uZVxuICogcXVldWUgcmV0YWlucyBpdHMgYCdzdW1tYXJ5J2AgZGVmYXVsdCAoYG9ic2VydmVyLXF1ZXVlL21lcmdlZFF1ZXVlLnRzIMK3IE1lcmdlZFF1ZXVlYCkuXG4gKlxuICogQ2hhbm5lbCBmaWx0ZXI6IGEgcmVnaXN0cmF0aW9uIHJlbWVtYmVycyB3aGljaCBjaGFubmVscyB3b3VsZCBoYXZlXG4gKiByZWFjaGVkIHRoZSByZWNvcmRlciBpbmxpbmUgKHNjb3BlLWxpc3QgcmVjb3JkZXJzIHNlZSBgc2NvcGVgICsgYGVtaXRgXG4gKiBlbnZlbG9wZXM7IGZsb3ctbGlzdCByZWNvcmRlcnMgc2VlIGBmbG93YCBlbnZlbG9wZXMpIGFuZCBza2lwcyB0aGUgcmVzdCDigJRcbiAqIHNhbWUgcmVhY2ggYXMgdGhlIGlubGluZSB0aWVyLCBvbmUgYmVhdCBiZWhpbmQuXG4gKi9cblxuaW1wb3J0IHsgc3RhZ2VJZE9mIH0gZnJvbSAnZm9vdHRyYWNlJztcblxuaW1wb3J0IHR5cGUgeyBSdW5Db3JyZWxhdGlvbiB9IGZyb20gJy4uL2F0dGVtcHQvdHlwZXMuanMnO1xuaW1wb3J0IHsgaW52b2tlUmVjb3JkZXJIb29rIH0gZnJvbSAnLi4vY2FwdHVyZS9pbnZva2VIb29rLmpzJztcbmltcG9ydCB7IGlzRGV2TW9kZSB9IGZyb20gJy4uL2Rldk1vZGUuanMnO1xuaW1wb3J0IHR5cGUgeyBGbG93UmVjb3JkZXIgfSBmcm9tICcuLi9lbmdpbmUvbmFycmF0aXZlL3R5cGVzLmpzJztcbmltcG9ydCB7XG4gIHR5cGUgQ2FwdHVyZUNoYW5uZWwsXG4gIHR5cGUgQ2FwdHVyZUVudmVsb3BlLFxuICB0eXBlIENhcHR1cmVQb2xpY3ksXG4gIHR5cGUgRGlzcGF0Y2hlclN0YXRzLFxuICB0eXBlIERyYWluUmVzdWx0LFxuICB0eXBlIE92ZXJmbG93UG9saWN5LFxuICBEZWZlcnJlZERpc3BhdGNoZXIsXG59IGZyb20gJy4uL29ic2VydmVyLXF1ZXVlL2luZGV4LmpzJztcbmltcG9ydCB7IGRlc2NyaWJlVGhyb3duLCBob29rc09uLCByZWNvcmRlckZhaWx1cmVFdmVudCB9IGZyb20gJy4uL3JlY29yZGVyL2hvb2tzLmpzJztcbmltcG9ydCB0eXBlIHsgU2NvcGVSZWNvcmRlciB9IGZyb20gJy4uL3Njb3BlL3R5cGVzLmpzJztcblxuLyoqIERlbGl2ZXJ5IHRpZXIgZm9yIGFuIGF0dGFjaGVkIG9ic2VydmVyIChSRkMtMDAxKS4gKi9cbmV4cG9ydCB0eXBlIE9ic2VydmVyRGVsaXZlcnkgPSAnaW5saW5lJyB8ICdkZWZlcnJlZCc7XG5cbi8qKlxuICogT3B0aW9ucyBiYWcgYWNjZXB0ZWQgYnkgZXZlcnkgYGF0dGFjaCpSZWNvcmRlcmAgY2FsbC5cbiAqXG4gKiBgZGVsaXZlcnk6ICdkZWZlcnJlZCdgIG9wdHMgdGhlIHJlY29yZGVyIGludG8gdGhlIGJvdW5kZWQgY2FwdHVyZSBxdWV1ZVxuICogKFwib25lIGJlYXQgYmVoaW5kXCIpOyBhYnNlbnQgLyBgJ2lubGluZSdgIGtlZXBzIHRoZSBoaXN0b3JpY2FsIHN5bmNocm9ub3VzXG4gKiBjYWxsIOKAlCBieXRlLWlkZW50aWNhbCB0byB0aGUgcHJlLVJGQyBwYXRoLlxuICpcbiAqIFRoZSByZW1haW5pbmcgZmllbGRzIGNvbmZpZ3VyZSB0aGUgZXhlY3V0b3IncyBPTkUgc2hhcmVkIGRpc3BhdGNoZXIgYW5kXG4gKiBhcmUgYXBwbGllZCB3aGVuIHRoZSBGSVJTVCBkZWZlcnJlZCBhdHRhY2ggY3JlYXRlcyBpdDsgbGF0ZXIgYXR0YWNoZXNcbiAqIHBhc3NpbmcgZGlmZmVyZW50IHZhbHVlcyBnZXQgYSBkZXYtbW9kZSB3YXJuaW5nIGFuZCBrZWVwIHRoZSBvcmlnaW5hbFxuICogY29uZmlndXJhdGlvbiAob25lIHF1ZXVlIHBlciBleGVjdXRvciDigJQgcGVyLXJlY29yZGVyIHF1ZXVlcyB3b3VsZCBicmVha1xuICogdGhlIHRvdGFsIGNyb3NzLWNoYW5uZWwgb3JkZXIpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF0dGFjaFJlY29yZGVyT3B0aW9ucyB7XG4gIC8qKiBgJ2RlZmVycmVkJ2AgPSBjYXB0dXJlIOKGkiBxdWV1ZSDihpIgbmV4dC1jaGVja3BvaW50IGRlbGl2ZXJ5LiBEZWZhdWx0IGAnaW5saW5lJ2AuICovXG4gIHJlYWRvbmx5IGRlbGl2ZXJ5PzogT2JzZXJ2ZXJEZWxpdmVyeTtcbiAgLyoqXG4gICAqIFBheWxvYWQgbWF0ZXJpYWxpemF0aW9uIGF0IGNhcHR1cmUgdGltZS4gRGVmYXVsdCBgJ2Nsb25lJ2Ag4oCUIHlvdXJcbiAgICogcmVjb3JkZXIncyBob29rcyByZWNlaXZlIHRoZSBTQU1FIGV2ZW50IHNoYXBlIGFzIGlubGluZSBkZWxpdmVyeVxuICAgKiAoYHN0cnVjdHVyZWRDbG9uZWBkOyBgZS5rZXlgL2BlLnZhbHVlYC9gZS5ydW50aW1lU3RhZ2VJZGAgYWxsIHdvcmtcbiAgICogdW5jaGFuZ2VkKSwgc28gYHsgZGVsaXZlcnk6ICdkZWZlcnJlZCcgfWAgaXMgYSBkcm9wLWluIHBvcnQuXG4gICAqIGAnc3VtbWFyeSdgIOKAlCBhIGJvdW5kZWQgdHlwZS9zaXplL3ByZXZpZXcgZGlnZXN0IChgUGF5bG9hZFN1bW1hcnlgKVxuICAgKiBpbnN0ZWFkIG9mIHRoZSBldmVudCBzaGFwZTogY2hlYXBlciBjYXB0dXJlIGZvciB0ZWxlbWV0cnktb25seVxuICAgKiBjb25zdW1lcnMgdGhhdCBkb24ndCByZWFkIGRvbWFpbiBmaWVsZHMuIGAncmVmJ2Ag4oCUIHBhc3MtdGhyb3VnaCBieVxuICAgKiByZWZlcmVuY2U7IHRoZSBjYWxsZXIgYXNzZXJ0cyBpbW11dGFiaWxpdHkgKGRldi1tb2RlIHdhcm5zKS5cbiAgICovXG4gIHJlYWRvbmx5IGNhcHR1cmU/OiBDYXB0dXJlUG9saWN5O1xuICAvKiogUXVldWUgYm91bmQg4oCUIGRlZmF1bHQgMTAgMDAwLiAqL1xuICByZWFkb25seSBtYXhRdWV1ZT86IG51bWJlcjtcbiAgLyoqIE92ZXJmbG93IHBvbGljeSBhdCBgbWF4UXVldWVgIOKAlCBkZWZhdWx0IGAnZHJvcC1vbGRlc3QnYC4gKi9cbiAgcmVhZG9ubHkgb3ZlcmZsb3c/OiBPdmVyZmxvd1BvbGljeTtcbiAgLyoqIGAnc2FtcGxlJ2Agb3ZlcmZsb3cgb25seSDigJQgYWRtaXQgMSBpbiB0aGlzIG1hbnkgc2F0dXJhdGVkIGFycml2YWxzLiAqL1xuICByZWFkb25seSBzYW1wbGVFdmVyeT86IG51bWJlcjtcbiAgLyoqIFBlci1jaGVja3BvaW50IGZsdXNoIGJ1ZGdldCwgbXMgKEExKSDigJQgZGVmYXVsdCAyOyBgSW5maW5pdHlgID0gZnVsbCBkcmFpbi4gKi9cbiAgcmVhZG9ubHkgZmx1c2hCdWRnZXRNcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgQmxvY2sgOSBvYnNlcnZhYmlsaXR5IHN1cmZhY2Ug4oCUIGBzbmFwc2hvdC5vYnNlcnZlclN0YXRzYC4gVGhlIEE0XG4gKiBkaXNwYXRjaGVyIHN0YXRzIHBsdXMgdGhlIHRlcm1pbmFsLWZsdXNoIHN0cmFuZGluZyBjb3VudCBmcm9tIEJsb2NrIDguXG4gKiBQcmVzZW50IG9uIGBSdW50aW1lU25hcHNob3RgIG9ubHkgd2hlbiBhIGRlZmVycmVkIG9ic2VydmVyIHdhcyBhdHRhY2hlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPYnNlcnZlclN0YXRzIGV4dGVuZHMgRGlzcGF0Y2hlclN0YXRzIHtcbiAgLyoqXG4gICAqIEVudmVsb3BlcyBzdGlsbCBxdWV1ZWQgd2hlbiBhIHRlcm1pbmFsIGZsdXNoIGhpdCBpdHMgcnVuYXdheS1jYXNjYWRlXG4gICAqIHJvdW5kIGNhcCAoQmxvY2sgOCkuIGAwYCBpbiBhbnkgc2FuZSBydW4g4oCUIGEgbm9uLXplcm8gdmFsdWUgbWVhbnMgYVxuICAgKiBsaXN0ZW5lciBrZXB0IGVucXVldWVpbmcgd29yayBhdCBlbmQtb2YtcnVuIGFuZCBkZWxpdmVyeSB3YXMgY3V0IG9mZlxuICAgKiAoYWxzbyBkZXYtd2FybmVkIGF0IHRoZSBtb21lbnQgaXQgaGFwcGVuZWQpLiBOZXZlciBzaWxlbnQuXG4gICAqL1xuICByZWFkb25seSB0ZXJtaW5hbFN0cmFuZGVkOiBudW1iZXI7XG59XG5cbi8qKiBSZXN1bHQgc2hhcGUgb2YgYGV4ZWN1dG9yLmRyYWluT2JzZXJ2ZXJzKClgIOKAlCBzZWUgYERyYWluUmVzdWx0YC4gKi9cbmV4cG9ydCB0eXBlIE9ic2VydmVyRHJhaW5SZXN1bHQgPSBEcmFpblJlc3VsdDtcblxuLyoqIFdlbGwta25vd24gaWRzIG9mIHRoZSBzeW50aGV0aWMgY2FwdHVyZSB0YXBzIChpbnRlcm5hbCwgZG9jdW1lbnRlZCBmb3IgZGVidWdnaW5nKS4gKi9cbmV4cG9ydCBjb25zdCBERUZFUlJFRF9TQ09QRV9UQVBfSUQgPSAnX19kZWZlcnJlZC1zY29wZS10YXBfXyc7XG5leHBvcnQgY29uc3QgREVGRVJSRURfRkxPV19UQVBfSUQgPSAnX19kZWZlcnJlZC1mbG93LXRhcF9fJztcblxuLyoqIENoYW5uZWwgcmVhY2ggb2YgdGhlIHNjb3BlLXJlY29yZGVyIGxpc3QgKHNjb3BlIGV2ZW50cyArIGVtaXQgZXZlbnRzKS4gKi9cbmNvbnN0IFNDT1BFX0xJU1RfQ0hBTk5FTFM6IHJlYWRvbmx5IENhcHR1cmVDaGFubmVsW10gPSBbJ3Njb3BlJywgJ2VtaXQnXTtcbi8qKiBDaGFubmVsIHJlYWNoIG9mIHRoZSBmbG93LXJlY29yZGVyIGxpc3QuICovXG5jb25zdCBGTE9XX0xJU1RfQ0hBTk5FTFM6IHJlYWRvbmx5IENhcHR1cmVDaGFubmVsW10gPSBbJ2Zsb3cnXTtcblxuLyoqIERpc3BhdGNoZXItbGV2ZWwgb3B0aW9ucyBzbmFwc2hvdCwga2VwdCBmb3IgY29uZmxpY3QgZGV0ZWN0aW9uLiAqL1xuaW50ZXJmYWNlIEFwcGxpZWREaXNwYXRjaGVyQ29uZmlnIHtcbiAgcmVhZG9ubHkgY2FwdHVyZT86IENhcHR1cmVQb2xpY3k7XG4gIHJlYWRvbmx5IG1heFF1ZXVlPzogbnVtYmVyO1xuICByZWFkb25seSBvdmVyZmxvdz86IE92ZXJmbG93UG9saWN5O1xuICByZWFkb25seSBzYW1wbGVFdmVyeT86IG51bWJlcjtcbiAgcmVhZG9ubHkgZmx1c2hCdWRnZXRNcz86IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIERlZmVycmVkUmVnaXN0cmF0aW9uIHtcbiAgcmVhZG9ubHkgcmVjb3JkZXI6IFNjb3BlUmVjb3JkZXIgfCBGbG93UmVjb3JkZXI7XG4gIC8qKiBXaGljaCBlbnZlbG9wZSBjaGFubmVscyByZWFjaCB0aGlzIHJlY29yZGVyIChpbmxpbmUtdGllciBwYXJpdHkpLiAqL1xuICByZWFkb25seSBjaGFubmVsczogU2V0PENhcHR1cmVDaGFubmVsPjtcbn1cblxuZXhwb3J0IGNsYXNzIERlZmVycmVkT2JzZXJ2ZXJUaWVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBkaXNwYXRjaGVyOiBEZWZlcnJlZERpc3BhdGNoZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVnaXN0cmF0aW9ucyA9IG5ldyBNYXA8c3RyaW5nLCBEZWZlcnJlZFJlZ2lzdHJhdGlvbj4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBhcHBsaWVkQ29uZmlnOiBBcHBsaWVkRGlzcGF0Y2hlckNvbmZpZztcbiAgLyoqIERlZHVwIG1lbW9yeSBmb3IgdGhlIGRldi13YXJuIHNlYW0gKG9uZSB3YXJuaW5nIHBlciB1bmlxdWUgbWVzc2FnZSkuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgd2FybmVkTWVzc2FnZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgcHJpdmF0ZSB0ZXJtaW5hbFN0cmFuZGVkID0gMDtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zPzogQXR0YWNoUmVjb3JkZXJPcHRpb25zKSB7XG4gICAgdGhpcy5hcHBsaWVkQ29uZmlnID0ge1xuICAgICAgLy8gQXR0YWNoLXN1cmZhY2UgZGVmYXVsdCBpcyAnY2xvbmUnIChyZXZpZXcgQ1JJVElDQUwtMik6IGEgcmVjb3JkZXJcbiAgICAgIC8vIHBvcnRlZCB3aXRoIGB7IGRlbGl2ZXJ5OiAnZGVmZXJyZWQnIH1gIGtlZXBzIHJlY2VpdmluZyB0aGUgU0FNRVxuICAgICAgLy8gZXZlbnQgc2hhcGUgYXMgaW5saW5lIChlLmtleS9lLnZhbHVlL2UucnVudGltZVN0YWdlSWQgYWxsIGludGFjdCkuXG4gICAgICAvLyBUaGUgbW9kdWxlLWludGVybmFsIGVudmVsb3BlIGRlZmF1bHQgc3RheXMgJ3N1bW1hcnknIGZvciByYXctXG4gICAgICAvLyBlbnZlbG9wZSBjb25zdW1lcnM7ICdzdW1tYXJ5JyBoZXJlIGlzIGFuIGV4cGxpY2l0IHRlbGVtZXRyeSBjaG9pY2UuXG4gICAgICBjYXB0dXJlOiBvcHRpb25zPy5jYXB0dXJlID8/ICdjbG9uZScsXG4gICAgICBtYXhRdWV1ZTogb3B0aW9ucz8ubWF4UXVldWUsXG4gICAgICBvdmVyZmxvdzogb3B0aW9ucz8ub3ZlcmZsb3csXG4gICAgICBzYW1wbGVFdmVyeTogb3B0aW9ucz8uc2FtcGxlRXZlcnksXG4gICAgICBmbHVzaEJ1ZGdldE1zOiBvcHRpb25zPy5mbHVzaEJ1ZGdldE1zLFxuICAgIH07XG4gICAgdGhpcy5kaXNwYXRjaGVyID0gbmV3IERlZmVycmVkRGlzcGF0Y2hlcih7XG4gICAgICBtYXhRdWV1ZTogb3B0aW9ucz8ubWF4UXVldWUsXG4gICAgICBvdmVyZmxvdzogb3B0aW9ucz8ub3ZlcmZsb3csXG4gICAgICBzYW1wbGVFdmVyeTogb3B0aW9ucz8uc2FtcGxlRXZlcnksXG4gICAgICBjYXB0dXJlUG9saWN5OiBvcHRpb25zPy5jYXB0dXJlID8/ICdjbG9uZScsXG4gICAgICBmbHVzaEJ1ZGdldE1zOiBvcHRpb25zPy5mbHVzaEJ1ZGdldE1zLFxuICAgICAgLy8gVGhlIGRldi13YXJuIHNlYW0gKFJGQy0wMDEgwqdcIlJlc29sdXRpb246IHRoZSBkZXYtd2FybiBzZWFtXCIpOiB0aGVcbiAgICAgIC8vIHB1cmUgbW9kdWxlIGludm9rZXMgYHdhcm5gIG9uIGV2ZXJ5ICdyZWYnIGNhcHR1cmUgYW5kIGV2ZXJ5ICdjbG9uZSdcbiAgICAgIC8vIGRlZ3JhZGF0aW9uOyB0aGUgdGllciBiaW5kcyBpdCB0byB0aGUgY2VudHJhbCBpc0Rldk1vZGUoKSBmbGFnIGFuZFxuICAgICAgLy8gZGVkdXBlcyBieSBtZXNzYWdlIHNvIGEgaG90IGxvb3AgY2Fubm90IHNwYW0gdGhlIGNvbnNvbGUuXG4gICAgICBob29rczogeyB3YXJuOiAobWVzc2FnZSkgPT4gdGhpcy5kZXZXYXJuRGVkdXBlZChtZXNzYWdlKSB9LFxuICAgICAgLy8gTGlzdGVuZXIgZmFpbHVyZXMgKHN5bmMgdGhyb3dzIEFORCBhc3luYyByZWplY3Rpb25zKSByb3V0ZSBpbnRvIHRoZVxuICAgICAgLy8gZXhpc3RpbmcgcmVjb3JkZXIgZXJyb3IgY2hhbm5lbCDigJQgc2VlIHJvdXRlTGlzdGVuZXJFcnJvci5cbiAgICAgIG9uRXJyb3I6IChlcnJvciwgY3R4KSA9PiB0aGlzLnJvdXRlTGlzdGVuZXJFcnJvcihlcnJvciwgY3R4Lmxpc3RlbmVySWQsIGN0eC5lbnZlbG9wZSwgY3R4LnBoYXNlKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBSZWdpc3RyeSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSByZWNvcmRlciBmb3IgZGVmZXJyZWQgZGVsaXZlcnkgb24gdGhlIHNjb3BlLWxpc3QgY2hhbm5lbHNcbiAgICogKGBzY29wZWAgKyBgZW1pdGApIGFuZC9vciB0aGUgZmxvdyBjaGFubmVsLiBJZGVtcG90ZW50IGJ5IGlkIOKAlCBzYW1lIGlkXG4gICAqIHJlcGxhY2VzIHRoZSByZWNvcmRlciBvYmplY3Q7IGNoYW5uZWwgbGlzdHMgTUVSR0UgYWNyb3NzIGNhbGxzIChzYW1lIGFzXG4gICAqIHRoZSBpbmxpbmUgdGllciwgd2hlcmUgYGF0dGFjaFNjb3BlUmVjb3JkZXIoeClgICsgYGF0dGFjaEZsb3dSZWNvcmRlcih4KWBcbiAgICogbGFuZHMgYHhgIG9uIGJvdGggbGlzdHMpLiBMYXRlciBhdHRhY2hlcyBwYXNzaW5nIGRpc3BhdGNoZXItbGV2ZWxcbiAgICogb3B0aW9ucyB0aGF0IGRpZmZlciBmcm9tIHRoZSBmaXJzdCBhdHRhY2gncyBjb25maWd1cmF0aW9uIGtlZXAgdGhlXG4gICAqIG9yaWdpbmFsIGNvbmZpZyBhbmQgZGV2LXdhcm4uXG4gICAqL1xuICByZWdpc3RlcihcbiAgICByZWNvcmRlcjogU2NvcGVSZWNvcmRlciB8IEZsb3dSZWNvcmRlcixcbiAgICBsaXN0czogeyBzY29wZT86IGJvb2xlYW47IGZsb3c/OiBib29sZWFuIH0sXG4gICAgb3B0aW9ucz86IEF0dGFjaFJlY29yZGVyT3B0aW9ucyxcbiAgKTogdm9pZCB7XG4gICAgdGhpcy53YXJuT25Db25maWdDb25mbGljdChyZWNvcmRlci5pZCwgb3B0aW9ucyk7XG4gICAgY29uc3QgY2hhbm5lbHMgPSB0aGlzLnJlZ2lzdHJhdGlvbnMuZ2V0KHJlY29yZGVyLmlkKT8uY2hhbm5lbHMgPz8gbmV3IFNldDxDYXB0dXJlQ2hhbm5lbD4oKTtcbiAgICBpZiAobGlzdHMuc2NvcGUpIGZvciAoY29uc3QgYyBvZiBTQ09QRV9MSVNUX0NIQU5ORUxTKSBjaGFubmVscy5hZGQoYyk7XG4gICAgaWYgKGxpc3RzLmZsb3cpIGZvciAoY29uc3QgYyBvZiBGTE9XX0xJU1RfQ0hBTk5FTFMpIGNoYW5uZWxzLmFkZChjKTtcbiAgICB0aGlzLnJlZ2lzdHJhdGlvbnMuc2V0KHJlY29yZGVyLmlkLCB7IHJlY29yZGVyLCBjaGFubmVscyB9KTtcbiAgICB0aGlzLmRpc3BhdGNoZXIuYWRkTGlzdGVuZXIocmVjb3JkZXIuaWQsIChlbnZlbG9wZSkgPT4ge1xuICAgICAgY29uc3QgcmVnaXN0cmF0aW9uID0gdGhpcy5yZWdpc3RyYXRpb25zLmdldChyZWNvcmRlci5pZCk7XG4gICAgICBpZiAoIXJlZ2lzdHJhdGlvbiB8fCAhcmVnaXN0cmF0aW9uLmNoYW5uZWxzLmhhcyhlbnZlbG9wZS5jaGFubmVsKSkgcmV0dXJuO1xuICAgICAgLy8gU0FNRSBpbnZva2UgaGVscGVyIGFzIHRoZSBpbmxpbmUgdGllciAoUkZDLTAwMSDCpzkgbWl0aWdhdGlvbikg4oCUIGFcbiAgICAgIC8vIHJldHVybmVkIFByb21pc2UgbGFuZHMgaW4gdGhlIGRpc3BhdGNoZXIncyBpbmZsaWdodCBzZXQuXG4gICAgICByZXR1cm4gaW52b2tlUmVjb3JkZXJIb29rKHJlY29yZGVyLCBlbnZlbG9wZS5tZXRob2QsIGVudmVsb3BlLnBheWxvYWQpIGFzIHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSB0aGUgZ2l2ZW4gY2hhbm5lbCBsaXN0cyBmcm9tIGEgcmVnaXN0cmF0aW9uIChtaXJyb3JzIHRoZSBpbmxpbmVcbiAgICogdGllciwgd2hlcmUgYGRldGFjaFNjb3BlUmVjb3JkZXJgIC8gYGRldGFjaEZsb3dSZWNvcmRlcmAgZWFjaCBjbGVhciBvbmVcbiAgICogbGlzdCkuIFdoZW4gbm8gY2hhbm5lbHMgcmVtYWluLCB0aGUgbGlzdGVuZXIgaXMgZnVsbHkgcmVtb3ZlZC5cbiAgICovXG4gIHJlbW92ZUZyb21MaXN0cyhpZDogc3RyaW5nLCBsaXN0czogeyBzY29wZT86IGJvb2xlYW47IGZsb3c/OiBib29sZWFuIH0pOiB2b2lkIHtcbiAgICBjb25zdCByZWdpc3RyYXRpb24gPSB0aGlzLnJlZ2lzdHJhdGlvbnMuZ2V0KGlkKTtcbiAgICBpZiAoIXJlZ2lzdHJhdGlvbikgcmV0dXJuO1xuICAgIGlmIChsaXN0cy5zY29wZSkgZm9yIChjb25zdCBjIG9mIFNDT1BFX0xJU1RfQ0hBTk5FTFMpIHJlZ2lzdHJhdGlvbi5jaGFubmVscy5kZWxldGUoYyk7XG4gICAgaWYgKGxpc3RzLmZsb3cpIGZvciAoY29uc3QgYyBvZiBGTE9XX0xJU1RfQ0hBTk5FTFMpIHJlZ2lzdHJhdGlvbi5jaGFubmVscy5kZWxldGUoYyk7XG4gICAgaWYgKHJlZ2lzdHJhdGlvbi5jaGFubmVscy5zaXplID09PSAwKSB7XG4gICAgICB0aGlzLnJlZ2lzdHJhdGlvbnMuZGVsZXRlKGlkKTtcbiAgICAgIHRoaXMuZGlzcGF0Y2hlci5yZW1vdmVMaXN0ZW5lcihpZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFRydWUgd2hlbiBgaWRgIGlzIHJlZ2lzdGVyZWQgZm9yIGRlZmVycmVkIGRlbGl2ZXJ5IChhbnkgY2hhbm5lbCkuICovXG4gIGhhcyhpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucmVnaXN0cmF0aW9ucy5oYXMoaWQpO1xuICB9XG5cbiAgLyoqIERlZmVycmVkIHJlY29yZGVycyB3aG9zZSByZWFjaCBpbmNsdWRlcyB0aGUgc2NvcGUgbGlzdCAoc2NvcGUrZW1pdCkuICovXG4gIHNjb3BlTGlzdFJlY29yZGVycygpOiBTY29wZVJlY29yZGVyW10ge1xuICAgIHJldHVybiB0aGlzLmJ5Q2hhbm5lbCgnc2NvcGUnKSBhcyBTY29wZVJlY29yZGVyW107XG4gIH1cblxuICAvKiogRGVmZXJyZWQgcmVjb3JkZXJzIHdob3NlIHJlYWNoIGluY2x1ZGVzIHRoZSBmbG93IGNoYW5uZWwuICovXG4gIGZsb3dMaXN0UmVjb3JkZXJzKCk6IEZsb3dSZWNvcmRlcltdIHtcbiAgICByZXR1cm4gdGhpcy5ieUNoYW5uZWwoJ2Zsb3cnKSBhcyBGbG93UmVjb3JkZXJbXTtcbiAgfVxuXG4gIC8qKiBSZXNldCBkZWZlcnJlZCByZWNvcmRlcnMgYmVmb3JlIGEgZnJlc2ggcnVuIChzYW1lIGNvbnRyYWN0IGFzIGlubGluZSkuICovXG4gIGNsZWFyUmVjb3JkZXJzKCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgeyByZWNvcmRlciB9IG9mIHRoaXMucmVnaXN0cmF0aW9ucy52YWx1ZXMoKSkge1xuICAgICAgKHJlY29yZGVyIGFzIHsgY2xlYXI/OiAoKSA9PiB2b2lkIH0pLmNsZWFyPy4oKTtcbiAgICB9XG4gIH1cblxuICAvLyDilIDilIAgQ2FwdHVyZSB0YXBzIChCbG9jayA3KSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogQnVpbGQgdGhlIHN5bnRoZXRpYyBzY29wZS1jaGFubmVsIHRhcCDigJQgYSBgU2NvcGVSZWNvcmRlcmAgcGxhY2VkIG9uIHRoZVxuICAgKiBub3JtYWwgc2NvcGUtcmVjb3JkZXIgbGlzdCB3aG9zZSBob29rcyBjYXB0dXJlIGludG8gdGhlIHF1ZXVlLiBCdWlsdFxuICAgKiBmcmVzaCBwZXIgdHJhdmVyc2VyIHNvIGl0IHJlZmxlY3RzIHRoZSBjdXJyZW50IHJlZ2lzdHJhdGlvbnMuIE9ubHlcbiAgICogbWV0aG9kcyBzb21lIGRlZmVycmVkIHJlY29yZGVyIGFjdHVhbGx5IGltcGxlbWVudHMgYXJlIHByZXNlbnQgKG5vXG4gICAqIHdhc3RlZCBjYXB0dXJlcykuIFJldHVybnMgYHVuZGVmaW5lZGAgd2hlbiBub3RoaW5nIGlzIHJlZ2lzdGVyZWQgZm9yXG4gICAqIHRoZSBzY29wZSBsaXN0LlxuICAgKlxuICAgKiBSZWRhY3Rpb24gb3JkZXJpbmc6IHRoZSB0YXAgaXMgaW52b2tlZCBmcm9tIHRoZSBTQU1FIGxvb3BzIGFzIGlubGluZVxuICAgKiByZWNvcmRlcnMgKGBfaW52b2tlSG9va2AgLyBgZW1pdEV2ZW50YCksIHdoaWNoIHJlY2VpdmUgZXZlbnRzIEFGVEVSIHRoZVxuICAgKiByZWRhY3Rpb24gZGVjaXNpb24g4oCUIHNvIGEgY2FwdHVyZWQgcGF5bG9hZCBjYW4gbmV2ZXIgY29udGFpbiBhXG4gICAqIHByZS1yZWRhY3Rpb24gdmFsdWUgdGhlIGlubGluZSB0aWVyIHdvdWxkIG5vdCBoYXZlIHNlZW4uXG4gICAqL1xuICBidWlsZFNjb3BlVGFwKCk6IFNjb3BlUmVjb3JkZXIgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHJlY29yZGVycyA9IHRoaXMuc2NvcGVMaXN0UmVjb3JkZXJzKCk7XG4gICAgaWYgKHJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgY29uc3QgdGFwOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsgaWQ6IERFRkVSUkVEX1NDT1BFX1RBUF9JRCB9O1xuICAgIC8vIERlcml2ZWQgZnJvbSB0aGUgaG9vayByZWdpc3RyeTogZXZlcnkgaG9vayBvZiB0aGUgc2NvcGUgY2hhbm5lbCBhbmQgb2YgdGhlIGVtaXQgY2hhbm5lbFxuICAgIC8vICh3aGljaCByaWRlcyB0aGUgc2NvcGUgbGlzdCkg4oCUIGEgaG9vayB0aGUgcmVnaXN0cnkgZ2FpbnMgaXMgdGFwcGVkIHdpdGggbm8gZWRpdCBoZXJlLlxuICAgIGZvciAoY29uc3QgY2hhbm5lbCBvZiBbJ3Njb3BlJywgJ2VtaXQnXSBhcyBjb25zdCkge1xuICAgICAgZm9yIChjb25zdCBtZXRob2Qgb2YgaG9va3NPbihjaGFubmVsKSkge1xuICAgICAgICBpZiAoIXRoaXMuYW55SW1wbGVtZW50cyhyZWNvcmRlcnMsIG1ldGhvZCkpIGNvbnRpbnVlO1xuICAgICAgICB0YXBbbWV0aG9kXSA9IChldmVudDogdW5rbm93bikgPT4gdGhpcy5jYXB0dXJlU2NvcGVFdmVudChjaGFubmVsLCBtZXRob2QsIGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhcCBhcyB1bmtub3duIGFzIFNjb3BlUmVjb3JkZXI7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdGhlIHN5bnRoZXRpYyBmbG93LWNoYW5uZWwgdGFwIOKAlCBhIGBGbG93UmVjb3JkZXJgIGFwcGVuZGVkIHRvIHRoZVxuICAgKiBmbG93LXJlY29yZGVycyBsaXN0IGhhbmRlZCB0byB0aGUgdHJhdmVyc2VyLiBTYW1lIGNvbnRyYWN0IGFzXG4gICAqIHtAbGluayBidWlsZFNjb3BlVGFwfS5cbiAgICovXG4gIGJ1aWxkRmxvd1RhcCgpOiBGbG93UmVjb3JkZXIgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHJlY29yZGVycyA9IHRoaXMuZmxvd0xpc3RSZWNvcmRlcnMoKTtcbiAgICBpZiAocmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBjb25zdCB0YXA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0geyBpZDogREVGRVJSRURfRkxPV19UQVBfSUQgfTtcbiAgICBmb3IgKGNvbnN0IG1ldGhvZCBvZiBob29rc09uKCdmbG93JykpIHtcbiAgICAgIGlmICghdGhpcy5hbnlJbXBsZW1lbnRzKHJlY29yZGVycywgbWV0aG9kKSkgY29udGludWU7XG4gICAgICB0YXBbbWV0aG9kXSA9IChldmVudDogdW5rbm93bikgPT4gdGhpcy5jYXB0dXJlRmxvd0V2ZW50KG1ldGhvZCwgZXZlbnQpO1xuICAgIH1cbiAgICByZXR1cm4gdGFwIGFzIHVua25vd24gYXMgRmxvd1JlY29yZGVyO1xuICB9XG5cbiAgLyoqXG4gICAqIERpcmVjdCBjYXB0dXJlIGZvciBleGVjdXRvci1zeW50aGVzaXplZCBldmVudHMgdGhhdCBieXBhc3MgdGhlIGRpc3BhdGNoXG4gICAqIHNpdGVzIChlLmcuIHRoZSBzeW50aGV0aWMgYG9uUmVzdW1lYCB0aGUgZXhlY3V0b3IgZmlyZXMgb24gcmVzdW1lKS5cbiAgICovXG4gIGNhcHR1cmUoY2hhbm5lbDogQ2FwdHVyZUNoYW5uZWwsIG1ldGhvZDogc3RyaW5nLCBydW50aW1lU3RhZ2VJZDogc3RyaW5nLCBydW5JZDogc3RyaW5nLCBwYXlsb2FkOiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5kaXNwYXRjaGVyLmNhcHR1cmUoeyBjaGFubmVsLCBtZXRob2QsIHJ1bnRpbWVTdGFnZUlkLCBydW5JZCwgcGF5bG9hZCB9KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBUZXJtaW5hbCBmbHVzaCArIGRyYWluIChCbG9jayA4KSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogU3luY2hyb25vdXNseSBkZWxpdmVyIGV2ZXJ5dGhpbmcgc3RpbGwgcXVldWVkIOKAlCBjYWxsZWQgYnkgdGhlIGV4ZWN1dG9yXG4gICAqIGF0IHRoZSBPVVRFUk1PU1QgcnVuIGJvdW5kYXJ5IChyZXNvbHZlLCByZWplY3QsIHBhdXNlKSwgQkVGT1JFIGBydW4oKWBcbiAgICogcmV0dXJucyAvIHJldGhyb3dzIC8gdGhlIGNoZWNrcG9pbnQgYmVjb21lcyBhdmFpbGFibGUuIEluc3BlY3RzXG4gICAqIGBmbHVzaFN5bmNgJ3MgYHJlbWFpbmluZ2AgKHJldmlld2VyIE4xKTogYGZsdXNoU3luY2AgYWxyZWFkeSBsb29wc1xuICAgKiBzbmFwc2hvdCByb3VuZHMgdXAgdG8gaXRzIHJ1bmF3YXktY2FzY2FkZSBjYXAsIHNvIGEgbm9uLXplcm8gcmVtYWluZGVyXG4gICAqIG1lYW5zIGEgcGF0aG9sb2dpY2FsIHNlbGYtZW5xdWV1ZWluZyBsaXN0ZW5lciDigJQgY291bnRlZCBpblxuICAgKiBgb2JzZXJ2ZXJTdGF0cy50ZXJtaW5hbFN0cmFuZGVkYCBhbmQgZGV2LXdhcm5lZCwgbmV2ZXIgc2lsZW50LlxuICAgKi9cbiAgdGVybWluYWxGbHVzaCgpOiB2b2lkIHtcbiAgICBjb25zdCB7IHJlbWFpbmluZyB9ID0gdGhpcy5kaXNwYXRjaGVyLmZsdXNoTm93KCk7XG4gICAgaWYgKHJlbWFpbmluZyA+IDApIHtcbiAgICAgIHRoaXMudGVybWluYWxTdHJhbmRlZCArPSByZW1haW5pbmc7XG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBbZm9vdHByaW50anNdIGRlZmVycmVkIG9ic2VydmVyczogdGVybWluYWwgZmx1c2ggaGl0IHRoZSBydW5hd2F5LWNhc2NhZGUgY2FwIHdpdGggJHtyZW1haW5pbmd9IGAgK1xuICAgICAgICAgICAgJ2V2ZW50KHMpIHN0aWxsIHF1ZXVlZCDigJQgYSBsaXN0ZW5lciBrZXB0IGVucXVldWVpbmcgZHVyaW5nIHRoZSBmbHVzaC4gVGhlIHN0cmFuZGVkIGNvdW50IGlzICcgK1xuICAgICAgICAgICAgJ3N1cmZhY2VkIG9uIHNuYXBzaG90Lm9ic2VydmVyU3RhdHMudGVybWluYWxTdHJhbmRlZC4nLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGbHVzaCB0aGUgYmFja2xvZywgdGhlbiBzZXR0bGUgYXN5bmMgbGlzdGVuZXIgY29udGludWF0aW9ucyB1bmRlciBhXG4gICAqIGRlYWRsaW5lIOKAlCB0aGUgc2VydmVybGVzcyAvIGdyYWNlZnVsLXNodXRkb3duIHBhdHRlcm4gKFJGQy0wMDEgwqcxMSkuXG4gICAqL1xuICBkcmFpbihvcHRzPzogeyB0aW1lb3V0TXM/OiBudW1iZXIgfSk6IFByb21pc2U8T2JzZXJ2ZXJEcmFpblJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLmRpc3BhdGNoZXIuZHJhaW4ob3B0cyk7XG4gIH1cblxuICAvLyDilIDilIAgU3RhdHMgKEJsb2NrIDkpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBUaGUgYHNuYXBzaG90Lm9ic2VydmVyU3RhdHNgIHBheWxvYWQg4oCUIEE0IHN0YXRzICsgQmxvY2sgOCBzdHJhbmRpbmcuICovXG4gIGdldFN0YXRzKCk6IE9ic2VydmVyU3RhdHMge1xuICAgIHJldHVybiB7IC4uLnRoaXMuZGlzcGF0Y2hlci5nZXRTdGF0cygpLCB0ZXJtaW5hbFN0cmFuZGVkOiB0aGlzLnRlcm1pbmFsU3RyYW5kZWQgfTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBJbnRlcm5hbHMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgcHJpdmF0ZSBieUNoYW5uZWwoY2hhbm5lbDogQ2FwdHVyZUNoYW5uZWwpOiBBcnJheTxTY29wZVJlY29yZGVyIHwgRmxvd1JlY29yZGVyPiB7XG4gICAgY29uc3Qgb3V0OiBBcnJheTxTY29wZVJlY29yZGVyIHwgRmxvd1JlY29yZGVyPiA9IFtdO1xuICAgIGZvciAoY29uc3QgeyByZWNvcmRlciwgY2hhbm5lbHMgfSBvZiB0aGlzLnJlZ2lzdHJhdGlvbnMudmFsdWVzKCkpIHtcbiAgICAgIGlmIChjaGFubmVscy5oYXMoY2hhbm5lbCkpIG91dC5wdXNoKHJlY29yZGVyKTtcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIC8qKiBOb3JtYWwgcHJvcGVydHkgbG9va3VwIOKAlCBpbnZvY2F0aW9uIHBhcml0eSB3aXRoIHRoZSBpbmxpbmUgdGllci4gKi9cbiAgcHJpdmF0ZSBhbnlJbXBsZW1lbnRzKHJlY29yZGVyczogQXJyYXk8U2NvcGVSZWNvcmRlciB8IEZsb3dSZWNvcmRlcj4sIG1ldGhvZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHJlY29yZGVycy5zb21lKChyKSA9PiB0eXBlb2YgKHIgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbbWV0aG9kXSA9PT0gJ2Z1bmN0aW9uJyk7XG4gIH1cblxuICAvKiogU2NvcGUvZW1pdCBldmVudHMgY2FycnkgdGhlaXIgb3duIGlkcyAoYHJ1bnRpbWVTdGFnZUlkYCArIGBwaXBlbGluZUlkYCkuICovXG4gIHByaXZhdGUgY2FwdHVyZVNjb3BlRXZlbnQoY2hhbm5lbDogQ2FwdHVyZUNoYW5uZWwsIG1ldGhvZDogc3RyaW5nLCBldmVudDogdW5rbm93bik6IHZvaWQge1xuICAgIGNvbnN0IGUgPSBldmVudCBhcyB7IHJ1bnRpbWVTdGFnZUlkPzogc3RyaW5nOyBwaXBlbGluZUlkPzogc3RyaW5nIH0gfCB1bmRlZmluZWQ7XG4gICAgdGhpcy5kaXNwYXRjaGVyLmNhcHR1cmUoe1xuICAgICAgY2hhbm5lbCxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHJ1bnRpbWVTdGFnZUlkOiBlPy5ydW50aW1lU3RhZ2VJZCA/PyAnJyxcbiAgICAgIHJ1bklkOiBlPy5waXBlbGluZUlkID8/ICcnLFxuICAgICAgcGF5bG9hZDogZXZlbnQsXG4gICAgfSk7XG4gIH1cblxuICAvKiogRmxvdyBldmVudHMgY2FycnkgaWRzIG9uIGB0cmF2ZXJzYWxDb250ZXh0YCAoYWJzZW50IG9uIGEgZmV3IGV2ZW50cykuICovXG4gIHByaXZhdGUgY2FwdHVyZUZsb3dFdmVudChtZXRob2Q6IHN0cmluZywgZXZlbnQ6IHVua25vd24pOiB2b2lkIHtcbiAgICBjb25zdCBjdHggPSAoZXZlbnQgYXMgeyB0cmF2ZXJzYWxDb250ZXh0PzogeyBydW50aW1lU3RhZ2VJZD86IHN0cmluZzsgcnVuSWQ/OiBzdHJpbmcgfSB9IHwgdW5kZWZpbmVkKVxuICAgICAgPy50cmF2ZXJzYWxDb250ZXh0O1xuICAgIHRoaXMuZGlzcGF0Y2hlci5jYXB0dXJlKHtcbiAgICAgIGNoYW5uZWw6ICdmbG93JyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHJ1bnRpbWVTdGFnZUlkOiBjdHg/LnJ1bnRpbWVTdGFnZUlkID8/ICcnLFxuICAgICAgcnVuSWQ6IGN0eD8ucnVuSWQgPz8gJycsXG4gICAgICBwYXlsb2FkOiBldmVudCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSb3V0ZSBhIGRlZmVycmVkIGxpc3RlbmVyIGZhaWx1cmUgaW50byB0aGUgZXhpc3RpbmcgcmVjb3JkZXIgZXJyb3JcbiAgICogY2hhbm5lbDogZXZlcnkgcmVnaXN0ZXJlZCBzY29wZSBvYnNlcnZlciDigJQgdGhlIGZhaWxpbmcgb25lIGluY2x1ZGVkLCBpblxuICAgKiByZWdpc3RyYXRpb24gb3JkZXIg4oCUIHJlY2VpdmVzIHRoZSBzY29wZS1zaGFwZWQgYG9uRXJyb3JgIGV2ZW50IHRoZSBpbmxpbmVcbiAgICogdGllciBidWlsZHMgKGByZWNvcmRlckZhaWx1cmVFdmVudGApLCBhbmQgYSB0aHJvdyBmcm9tIGBvbkVycm9yYCBpdHNlbGZcbiAgICogaXMgbm90IHJvdXRlZCBhZ2FpbjogdGhlIGNvbnRyYWN0IHRoZSBpbmxpbmUgdGllciBob25vcnMgd2hlbiBhIHJlY29yZGVyXG4gICAqIHRocm93cyBtaWQtZGlzcGF0Y2ggKDkuMzkuMCDigJQgYmVmb3JlLCB0aGUgZmFpbGluZyBsaXN0ZW5lciB3YXMgc2tpcHBlZCxcbiAgICogc28gYSBDb21wb3NpdGVSZWNvcmRlcidzIG90aGVyIGNoaWxkcmVuIG5ldmVyIGhlYXJkIGEgc2libGluZydzIHRocm93KS5cbiAgICogVGhlIGVycm9yIHNpbmsgbXVzdCBuZXZlciBiZWNvbWUgYW4gZXJyb3Igc291cmNlOiBzaW5rIHRocm93cyBhcmVcbiAgICogc3dhbGxvd2VkIChpc29sYXRpb24gaXMgYWJzb2x1dGUpLlxuICAgKi9cbiAgcHJpdmF0ZSByb3V0ZUxpc3RlbmVyRXJyb3IoXG4gICAgZXJyb3I6IHVua25vd24sXG4gICAgbGlzdGVuZXJJZDogc3RyaW5nLFxuICAgIGVudmVsb3BlOiBDYXB0dXJlRW52ZWxvcGUsXG4gICAgcGhhc2U6ICdzeW5jJyB8ICdhc3luYycsXG4gICk6IHZvaWQge1xuICAgIC8vIElubGluZSBwYXJpdHkgKDkuMzkuMCk6IHRoZSBpbmxpbmUgdGllciBoYW5kcyBhIHJlY29yZGVyJ3MgdGhyb3cgdG8gRVZFUlkgcmVjb3JkZXIgb24gdGhlXG4gICAgLy8gc2NvcGUgbGlzdCDigJQgdGhlIHRocm93ZXIgaW5jbHVkZWQsIHNvIGEgQ29tcG9zaXRlUmVjb3JkZXIncyBvdGhlciBjaGlsZHJlbiBoZWFyIGl0IOKAlCBhbmRcbiAgICAvLyBkcm9wcyBhIHRocm93IGZyb20gYG9uRXJyb3JgIGl0c2VsZi4gU2FtZSBoZXJlLCB3aXRoIHRoZSBzYW1lIGV2ZW50IChgcmVjb3JkZXJGYWlsdXJlRXZlbnRgKS5cbiAgICBpZiAoZW52ZWxvcGUubWV0aG9kICE9PSAnb25FcnJvcicpIHRoaXMuZGVsaXZlckxpc3RlbmVyRXJyb3IoZXJyb3IsIGVudmVsb3BlKTtcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBbZm9vdHByaW50anNdIGRlZmVycmVkIG9ic2VydmVyICcke2xpc3RlbmVySWR9JyBmYWlsZWQgKCR7cGhhc2V9KSBoYW5kbGluZyBgICtcbiAgICAgICAgICBgJHtlbnZlbG9wZS5jaGFubmVsfS4ke2VudmVsb3BlLm1ldGhvZH0gKHNlcSAke2VudmVsb3BlLnNlcX0pOiAke2Rlc2NyaWJlVGhyb3duKGVycm9yKX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKiogSGFuZCBvbmUgbGlzdGVuZXIgZmFpbHVyZSB0byBldmVyeSBzY29wZSBvYnNlcnZlciBhcyBhbiBgb25FcnJvcmAg4oCUIHNlZSB7QGxpbmsgcm91dGVMaXN0ZW5lckVycm9yfS4gKi9cbiAgcHJpdmF0ZSBkZWxpdmVyTGlzdGVuZXJFcnJvcihlcnJvcjogdW5rbm93biwgZW52ZWxvcGU6IENhcHR1cmVFbnZlbG9wZSk6IHZvaWQge1xuICAgIGNvbnN0IGVycm9yRXZlbnQgPSByZWNvcmRlckZhaWx1cmVFdmVudChcbiAgICAgIHtcbiAgICAgICAgc3RhZ2VOYW1lOiAnJyxcbiAgICAgICAgc3RhZ2VJZDogc3RhZ2VJZE9mKGVudmVsb3BlLnJ1bnRpbWVTdGFnZUlkKSxcbiAgICAgICAgcnVudGltZVN0YWdlSWQ6IGVudmVsb3BlLnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgICBwaXBlbGluZUlkOiBlbnZlbG9wZS5ydW5JZCxcbiAgICAgICAgLi4uY29ycmVsYXRpb25PZihlbnZlbG9wZS5wYXlsb2FkKSxcbiAgICAgIH0sXG4gICAgICBlcnJvcixcbiAgICAgIGVudmVsb3BlLm1ldGhvZCxcbiAgICApO1xuICAgIGZvciAoY29uc3QgWywgeyByZWNvcmRlciwgY2hhbm5lbHMgfV0gb2YgdGhpcy5yZWdpc3RyYXRpb25zKSB7XG4gICAgICAvLyBJbmxpbmUtdGllciBwYXJpdHkgKHJldmlldyBDUklUSUNBTC0xKTogdGhlIHN5bnRoZXNpemVkIGV2ZW50IGlzXG4gICAgICAvLyBzY29wZS10eXBlZCwgc28gaXQgcmVhY2hlcyBPTkxZIHJlY29yZGVycyByZWdpc3RlcmVkIG9uIHRoZSBzY29wZVxuICAgICAgLy8gbGlzdHMg4oCUIGEgZmxvdy1vbmx5IHJlY29yZGVyIG5ldmVyIHJlY2VpdmVzIHNjb3BlLWNoYW5uZWwgZXJyb3JzXG4gICAgICAvLyBpbmxpbmUgYW5kIG11c3Qgbm90IGhlcmUgZWl0aGVyLlxuICAgICAgaWYgKCFjaGFubmVscy5oYXMoJ3Njb3BlJykpIGNvbnRpbnVlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaW52b2tlUmVjb3JkZXJIb29rKHJlY29yZGVyLCAnb25FcnJvcicsIGVycm9yRXZlbnQpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIFN3YWxsb3cg4oCUIHNhbWUgcnVsZSBhcyBEZWZlcnJlZERpc3BhdGNoZXIuc2FmZU9uRXJyb3IuXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIERpc3BhdGNoZXItbGV2ZWwgb3B0aW9ucyBhcmUgZmlyc3QtYXR0YWNoLXdpbnM7IGRpZmZlcmluZyBsYXRlciB2YWx1ZXMgZGV2LXdhcm4uICovXG4gIHByaXZhdGUgd2Fybk9uQ29uZmlnQ29uZmxpY3QocmVjb3JkZXJJZDogc3RyaW5nLCBvcHRpb25zPzogQXR0YWNoUmVjb3JkZXJPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKCFvcHRpb25zKSByZXR1cm47XG4gICAgY29uc3QgY29uZmxpY3RzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHJlcXVlc3RlZDogQXBwbGllZERpc3BhdGNoZXJDb25maWcgPSB7XG4gICAgICBjYXB0dXJlOiBvcHRpb25zLmNhcHR1cmUsXG4gICAgICBtYXhRdWV1ZTogb3B0aW9ucy5tYXhRdWV1ZSxcbiAgICAgIG92ZXJmbG93OiBvcHRpb25zLm92ZXJmbG93LFxuICAgICAgc2FtcGxlRXZlcnk6IG9wdGlvbnMuc2FtcGxlRXZlcnksXG4gICAgICBmbHVzaEJ1ZGdldE1zOiBvcHRpb25zLmZsdXNoQnVkZ2V0TXMsXG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhyZXF1ZXN0ZWQpIGFzIEFycmF5PGtleW9mIEFwcGxpZWREaXNwYXRjaGVyQ29uZmlnPikge1xuICAgICAgaWYgKHJlcXVlc3RlZFtrZXldICE9PSB1bmRlZmluZWQgJiYgcmVxdWVzdGVkW2tleV0gIT09IHRoaXMuYXBwbGllZENvbmZpZ1trZXldKSB7XG4gICAgICAgIGNvbmZsaWN0cy5wdXNoKFN0cmluZyhrZXkpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNvbmZsaWN0cy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmRldldhcm5EZWR1cGVkKFxuICAgICAgICBgW2Zvb3RwcmludGpzXSBhdHRhY2ggJyR7cmVjb3JkZXJJZH0nOiB0aGUgZXhlY3V0b3IncyBkZWZlcnJlZC1vYnNlcnZlciBxdWV1ZSB3YXMgYWxyZWFkeSBgICtcbiAgICAgICAgICBgY29uZmlndXJlZCBieSB0aGUgZmlyc3QgZGVmZXJyZWQgYXR0YWNoIOKAlCBpZ25vcmluZyBkaWZmZXJpbmcgb3B0aW9uKHMpOiAke2NvbmZsaWN0cy5qb2luKCcsICcpfS4gYCArXG4gICAgICAgICAgJ09uZSBleGVjdXRvciBoYXMgT05FIG1lcmdlZCBxdWV1ZTsgY29uZmlndXJlIGl0IG9uIHRoZSBmaXJzdCBkZWZlcnJlZCBhdHRhY2guJyxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqIGBpc0Rldk1vZGUoKWAtZ2F0ZWQsIGRlZHVwbGljYXRlZCB3YXJuZXIg4oCUIHRoZSBib3VuZCB3YXJuIHNlYW0uICovXG4gIHByaXZhdGUgZGV2V2FybkRlZHVwZWQobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCFpc0Rldk1vZGUoKSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLndhcm5lZE1lc3NhZ2VzLmhhcyhtZXNzYWdlKSkgcmV0dXJuO1xuICAgIHRoaXMud2FybmVkTWVzc2FnZXMuYWRkKG1lc3NhZ2UpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xuICB9XG59XG5cbi8qKlxuICogVGhlIHJ1bidzIGNvcnJlbGF0aW9uIHRoZSBmYWlsZWQgZXZlbnQgY2FycmllZCwgYXMgY2FwdHVyZWQg4oCUIGEgc2NvcGUgb3IgZW1pdCBldmVudCdzIG93biBgY29ycmVsYXRpb25gLCBhIGZsb3dcbiAqIGV2ZW50J3Mgb24gaXRzIGB0cmF2ZXJzYWxDb250ZXh0YCDigJQgc3ByZWFkIGludG8gdGhlIHN5bnRoZXNpemVkIGBvbkVycm9yYCAoMTAuMSkuIEVtcHR5IHdoZW4gaXQgY2FycmllZCBub25lLlxuICovXG5mdW5jdGlvbiBjb3JyZWxhdGlvbk9mKHBheWxvYWQ6IHVua25vd24pOiB7IGNvcnJlbGF0aW9uPzogUnVuQ29ycmVsYXRpb24gfSB7XG4gIGlmIChwYXlsb2FkID09PSBudWxsIHx8IHR5cGVvZiBwYXlsb2FkICE9PSAnb2JqZWN0JykgcmV0dXJuIHt9O1xuICBjb25zdCBldmVudCA9IHBheWxvYWQgYXMgeyBjb3JyZWxhdGlvbj86IHVua25vd247IHRyYXZlcnNhbENvbnRleHQ/OiB7IGNvcnJlbGF0aW9uPzogdW5rbm93biB9IH07XG4gIGNvbnN0IGNvcnJlbGF0aW9uID0gZXZlbnQuY29ycmVsYXRpb24gPz8gZXZlbnQudHJhdmVyc2FsQ29udGV4dD8uY29ycmVsYXRpb247XG4gIHJldHVybiBjb3JyZWxhdGlvbiAhPT0gbnVsbCAmJiB0eXBlb2YgY29ycmVsYXRpb24gPT09ICdvYmplY3QnID8geyBjb3JyZWxhdGlvbjogY29ycmVsYXRpb24gYXMgUnVuQ29ycmVsYXRpb24gfSA6IHt9O1xufVxuIl19
|
|
@@ -9,9 +9,10 @@
|
|
|
9
9
|
* The engine (FlowchartTraverser) receives this as its runtime parameter.
|
|
10
10
|
* After execution, consumers query it for the full execution state.
|
|
11
11
|
*/
|
|
12
|
-
import type { CommitBundle, CommitValuesMode, LogAddress } from 'foottrace';
|
|
13
|
-
import type { WriteProvenanceMode } from 'foottrace/write';
|
|
12
|
+
import type { CommitBundle, CommitValuesMode, LogAddress, LogOutcome, Meta } from 'foottrace';
|
|
13
|
+
import type { RecordSink, WriteProvenanceMode } from 'foottrace/write';
|
|
14
14
|
import { EventLog, SharedMemory } from 'foottrace/write';
|
|
15
|
+
import type { RunCorrelation } from '../attempt/types.js';
|
|
15
16
|
import type { StageSnapshot } from '../memory/frameTypes.js';
|
|
16
17
|
import type { RunPolicy } from '../memory/runPolicy.js';
|
|
17
18
|
import { StageContext } from '../memory/StageContext.js';
|
|
@@ -56,6 +57,13 @@ export type RuntimeSnapshot = {
|
|
|
56
57
|
* snapshot carries a DIFFERENT runId than the paused run's snapshot.
|
|
57
58
|
*/
|
|
58
59
|
readonly runId: string;
|
|
60
|
+
/**
|
|
61
|
+
* The run's correlation (10.1) — `env.traceparent`, or `env.traceId` + `env.operationId`, resolved once per
|
|
62
|
+
* leg; the same frozen object every event of the leg carries (`TraversalContext.correlation`, a scope event's
|
|
63
|
+
* `correlation`). Like `runId`, per leg: a resume carries ITS env's, never the paused leg's. Absent — no
|
|
64
|
+
* key — when none was given.
|
|
65
|
+
*/
|
|
66
|
+
readonly correlation?: RunCorrelation;
|
|
59
67
|
sharedState: Record<string, unknown>;
|
|
60
68
|
executionTree: StageSnapshot;
|
|
61
69
|
/**
|
|
@@ -124,7 +132,34 @@ export type RuntimeSnapshot = {
|
|
|
124
132
|
* with `{ delivery: 'deferred' }` on this executor (zero-cost discipline).
|
|
125
133
|
*/
|
|
126
134
|
observerStats?: ObserverStats;
|
|
135
|
+
/**
|
|
136
|
+
* The crash-safe record's accounting (10.1, P6) — how many entries the run handed its sink and how many the sink
|
|
137
|
+
* did not take. ABSENT unless the executor was built with a `sink` and a run started.
|
|
138
|
+
*/
|
|
139
|
+
sink?: RecordSinkStats;
|
|
127
140
|
};
|
|
141
|
+
/** `getSnapshot().sink` — what the run handed its sink, and what the sink did not take (10.1, P6). */
|
|
142
|
+
export interface RecordSinkStats {
|
|
143
|
+
/** Entries handed to the adapter (each `opened`, `commit`, `note`, `closed` call). */
|
|
144
|
+
readonly entries: number;
|
|
145
|
+
/**
|
|
146
|
+
* Losses — a method that threw or rejected, an entry the log refused to send, a `meta` the log could not copy
|
|
147
|
+
* (that entry was still stored, without it), and failed or timed-out flushes. A rejection that settles after the
|
|
148
|
+
* run finished is counted when it settles.
|
|
149
|
+
*/
|
|
150
|
+
readonly failed: number;
|
|
151
|
+
/** The last loss's error, as text. Absent while nothing was lost. */
|
|
152
|
+
readonly lastError?: string;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Where a runtime's log writes as it lands (10.1, P6): the run's sink, the log's address and what the writer puts on
|
|
156
|
+
* its `opened` entry. Absent → the log is the plain one-argument `EventLog`, byte-identical to 10.0.
|
|
157
|
+
*/
|
|
158
|
+
export interface RuntimeRecord {
|
|
159
|
+
readonly sink: RecordSink;
|
|
160
|
+
readonly address: LogAddress;
|
|
161
|
+
readonly meta?: Meta;
|
|
162
|
+
}
|
|
128
163
|
export declare class ExecutionRuntime {
|
|
129
164
|
globalStore: SharedMemory;
|
|
130
165
|
/**
|
|
@@ -139,6 +174,8 @@ export declare class ExecutionRuntime {
|
|
|
139
174
|
redactedStore?: SharedMemory;
|
|
140
175
|
rootStageContext: StageContext;
|
|
141
176
|
executionHistory: EventLog;
|
|
177
|
+
/** The run's sink, when this runtime's log writes to one — handed on to every mount (`recordFor`). */
|
|
178
|
+
private recordSink?;
|
|
142
179
|
/** Original root for getSnapshot() — set before resume changes rootStageContext. */
|
|
143
180
|
private _snapshotRoot?;
|
|
144
181
|
private _initialState;
|
|
@@ -155,7 +192,7 @@ export declare class ExecutionRuntime {
|
|
|
155
192
|
* every frame after inherits the same reference. Default: every dial at
|
|
156
193
|
* its default, no rule, no mirror.
|
|
157
194
|
*/
|
|
158
|
-
constructor(rootName: string, rootId: string, defaultValues?: unknown, initialState?: unknown, policy?: RunPolicy);
|
|
195
|
+
constructor(rootName: string, rootId: string, defaultValues?: unknown, initialState?: unknown, policy?: RunPolicy, record?: RuntimeRecord);
|
|
159
196
|
/**
|
|
160
197
|
* A fresh root frame for this runtime — `globalStore`, `executionHistory`,
|
|
161
198
|
* the run's policy and (when kept) the mirror. Also how `SubflowExecutor`
|
|
@@ -193,6 +230,16 @@ export declare class ExecutionRuntime {
|
|
|
193
230
|
* 9.44.2).
|
|
194
231
|
*/
|
|
195
232
|
private getFoldBase;
|
|
233
|
+
/**
|
|
234
|
+
* Where a mount's log writes (10.1, P6): the same sink, at this log's address plus the mount's `runtimeStageId`
|
|
235
|
+
* (`drillPath: [...parent, mount]`, the address law `RuntimeSnapshot.logAddress` states). Absent when this log
|
|
236
|
+
* writes to no sink — a mount of a plain log is plain too.
|
|
237
|
+
*/
|
|
238
|
+
recordFor(mountRuntimeStageId: string, meta?: Meta): RuntimeRecord | undefined;
|
|
239
|
+
/** Tell the sink this runtime's log ended. Nothing happens without a sink; never throws. */
|
|
240
|
+
closeRecord(outcome: LogOutcome, meta?: Meta): void;
|
|
241
|
+
/** Note something beside this runtime's log, in its sink (a resumed leg). Nothing without a sink; never throws. */
|
|
242
|
+
noteRecord(kind: string, data: Meta): void;
|
|
196
243
|
getPipelines(): string[];
|
|
197
244
|
setRootObject(path: string[], key: string, value: unknown): void;
|
|
198
245
|
/**
|
|
@@ -222,14 +269,15 @@ export declare class ExecutionRuntime {
|
|
|
222
269
|
* `stateAt`, which is the honest signal that the base did not travel with
|
|
223
270
|
* this log — a partial answer that says it is partial, never a silent one.
|
|
224
271
|
*
|
|
225
|
-
* Returns `Omit<RuntimeSnapshot, 'runId'>`: the runtime is the memory
|
|
272
|
+
* Returns `Omit<RuntimeSnapshot, 'runId' | 'correlation'>`: the runtime is the memory
|
|
226
273
|
* container and doesn't know which run it serves — `runId` is per-run
|
|
227
274
|
* executor state, stamped by `FlowchartTraverser.getSnapshot()` (which
|
|
228
275
|
* owns the run's id and already stamps it on every event). Subflows'
|
|
229
276
|
* nested runtimes deliberately have NO runId of their own (a subflow is
|
|
230
|
-
* part of the parent's logical run).
|
|
277
|
+
* part of the parent's logical run). `correlation` is the traverser's for
|
|
278
|
+
* the same reason.
|
|
231
279
|
*/
|
|
232
280
|
getSnapshot(options?: {
|
|
233
281
|
redact?: boolean;
|
|
234
|
-
}): Omit<RuntimeSnapshot, 'runId'>;
|
|
282
|
+
}): Omit<RuntimeSnapshot, 'runId' | 'correlation'>;
|
|
235
283
|
}
|