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
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
* has always done.
|
|
20
20
|
*/
|
|
21
21
|
import { type RuntimeStageId } from 'foottrace';
|
|
22
|
+
import type { RunCorrelation } from '../attempt/types.js';
|
|
22
23
|
import type { ResumeLink, TraversalContext } from './narrative/types.js';
|
|
23
24
|
/** Everything a stamp can carry; optional keys are written only when PRESENT on this object. */
|
|
24
25
|
export interface TraversalStamp {
|
|
@@ -32,11 +33,13 @@ export interface TraversalStamp {
|
|
|
32
33
|
readonly subflowId?: string;
|
|
33
34
|
readonly subflowPath?: string;
|
|
34
35
|
readonly resumedFrom?: ResumeLink;
|
|
36
|
+
/** The leg's correlation — the same frozen object on every stamp; written last, only when present. */
|
|
37
|
+
readonly correlation?: RunCorrelation;
|
|
35
38
|
}
|
|
36
39
|
/**
|
|
37
40
|
* Build the stamp. `parentStageId` / `subflowId` / `subflowPath` are copied
|
|
38
41
|
* when the key is present (even as `undefined`); `parentRuntimeStageId`,
|
|
39
|
-
* `loopIteration` and `
|
|
42
|
+
* `loopIteration`, `resumedFrom` and `correlation` only when they hold a value.
|
|
40
43
|
*/
|
|
41
44
|
export declare function traversalContextFor(stamp: TraversalStamp): TraversalContext;
|
|
42
45
|
/**
|
|
@@ -44,7 +47,7 @@ export declare function traversalContextFor(stamp: TraversalStamp): TraversalCon
|
|
|
44
47
|
* depth 0) so the `runId` is reliably available on run events without forcing
|
|
45
48
|
* recorders to handle `traversalContext === undefined`.
|
|
46
49
|
*/
|
|
47
|
-
export declare function rootTraversalContext(runId: string): TraversalContext;
|
|
50
|
+
export declare function rootTraversalContext(runId: string, correlation?: RunCorrelation): TraversalContext;
|
|
48
51
|
/**
|
|
49
52
|
* The `onResume` stamp. Names the stand-in's own execution (`runtimeStageId`,
|
|
50
53
|
* the id its commit carries), the REAL subflow it runs in — `subflowId` is the
|
|
@@ -62,4 +65,6 @@ export declare function resumeTraversalContext(resume: {
|
|
|
62
65
|
/** `checkpoint.subflowPath`: the prefixed id of every subflow on the way down, outermost first. */
|
|
63
66
|
readonly subflowPath: readonly string[];
|
|
64
67
|
readonly resumedFrom?: ResumeLink;
|
|
68
|
+
/** The RESUMED leg's correlation (from `resume()`'s env) — never the paused leg's. */
|
|
69
|
+
readonly correlation?: RunCorrelation;
|
|
65
70
|
}): TraversalContext;
|
|
@@ -22,7 +22,7 @@ import { buildRuntimeStageId, subflowSegmentsOf } from 'foottrace';
|
|
|
22
22
|
/**
|
|
23
23
|
* Build the stamp. `parentStageId` / `subflowId` / `subflowPath` are copied
|
|
24
24
|
* when the key is present (even as `undefined`); `parentRuntimeStageId`,
|
|
25
|
-
* `loopIteration` and `
|
|
25
|
+
* `loopIteration`, `resumedFrom` and `correlation` only when they hold a value.
|
|
26
26
|
*/
|
|
27
27
|
export function traversalContextFor(stamp) {
|
|
28
28
|
return {
|
|
@@ -39,6 +39,7 @@ export function traversalContextFor(stamp) {
|
|
|
39
39
|
// off the runtimeStageId, so every stamp (stage, root, resume) agrees.
|
|
40
40
|
depth: subflowSegmentsOf(stamp.runtimeStageId).length,
|
|
41
41
|
...(stamp.resumedFrom && { resumedFrom: stamp.resumedFrom }),
|
|
42
|
+
...(stamp.correlation && { correlation: stamp.correlation }),
|
|
42
43
|
};
|
|
43
44
|
}
|
|
44
45
|
/** Own-key presence — `undefined` counts as present (a stage stamp always names these keys). */
|
|
@@ -52,12 +53,13 @@ const ROOT_STAGE_ID = '__root__';
|
|
|
52
53
|
* depth 0) so the `runId` is reliably available on run events without forcing
|
|
53
54
|
* recorders to handle `traversalContext === undefined`.
|
|
54
55
|
*/
|
|
55
|
-
export function rootTraversalContext(runId) {
|
|
56
|
+
export function rootTraversalContext(runId, correlation) {
|
|
56
57
|
return traversalContextFor({
|
|
57
58
|
runId,
|
|
58
59
|
stageId: ROOT_STAGE_ID,
|
|
59
60
|
runtimeStageId: buildRuntimeStageId(ROOT_STAGE_ID, 0),
|
|
60
61
|
stageName: ROOT_STAGE_ID,
|
|
62
|
+
...(correlation && { correlation }),
|
|
61
63
|
});
|
|
62
64
|
}
|
|
63
65
|
/**
|
|
@@ -78,6 +80,7 @@ export function resumeTraversalContext(resume) {
|
|
|
78
80
|
stageName: resume.stageName,
|
|
79
81
|
...(innermost !== undefined && { subflowId: innermost }),
|
|
80
82
|
...(resume.resumedFrom && { resumedFrom: resume.resumedFrom }),
|
|
83
|
+
...(resume.correlation && { correlation: resume.correlation }),
|
|
81
84
|
});
|
|
82
85
|
}
|
|
83
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhdmVyc2FsQ29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL3RyYXZlcnNhbENvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFFSCxPQUFPLEVBQXVCLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBa0J4Rjs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFDLEtBQXFCO0lBQ3ZELE9BQU87UUFDTCxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7UUFDbEIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1FBQ3RCLGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBYztRQUNwQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7UUFDMUIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsb0JBQW9CLElBQUksRUFBRSxvQkFBb0IsRUFBRSxLQUFLLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUN2RixHQUFHLENBQUMsS0FBSyxDQUFDLGFBQWEsS0FBSyxTQUFTLElBQUksRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2hGLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM5RCxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEUseUVBQXlFO1FBQ3pFLHVFQUF1RTtRQUN2RSxLQUFLLEVBQUUsaUJBQWlCLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU07UUFDckQsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0tBQzdELENBQUM7QUFDSixDQUFDO0FBRUQsZ0dBQWdHO0FBQ2hHLFNBQVMsR0FBRyxDQUFDLEtBQXFCLEVBQUUsR0FBa0Q7SUFDcEYsT0FBTyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQzFELENBQUM7QUFFRCxvR0FBb0c7QUFDcEcsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDO0FBRWpDOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsS0FBYTtJQUNoRCxPQUFPLG1CQUFtQixDQUFDO1FBQ3pCLEtBQUs7UUFDTCxPQUFPLEVBQUUsYUFBYTtRQUN0QixjQUFjLEVBQUUsbUJBQW1CLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUNyRCxTQUFTLEVBQUUsYUFBYTtLQUN6QixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsTUFRdEM7SUFDQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLE9BQU8sbUJBQW1CLENBQUM7UUFDekIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO1FBQ25CLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztRQUN2QixjQUFjLEVBQUUsTUFBTSxDQUFDLGNBQWM7UUFDckMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1FBQzNCLEdBQUcsQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDO1FBQ3hELEdBQUcsQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztLQUMvRCxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiB0cmF2ZXJzYWxDb250ZXh0IOKAlCB0aGUgT05FIGNvbnN0cnVjdG9yIG9mIGBUcmF2ZXJzYWxDb250ZXh0YCAoRjcsIDkuMzcuMCkuXG4gKlxuICogYFRyYXZlcnNhbENvbnRleHRgIGlzIHRoZSBjb3JyZWxhdGlvbiBzdGFtcCBldmVyeSBGbG93UmVjb3JkZXIgZXZlbnQgY2Fycmllc1xuICogKFwidGhlIGVudGlyZSBldmVudC1jb3JyZWxhdGlvbiBtb2RlbCByZXN0cyBvblwiIHNjb3BlIGFuZCBmbG93IGV2ZW50cyBzaGFyaW5nXG4gKiBpdCkuIFVudGlsIDkuMzYuMCB0aHJlZSBzaXRlcyBidWlsdCBpdCBieSBoYW5kIOKAlCB0aGUgdHJhdmVyc2VyIHBlciBzdGFnZSwgdGhlXG4gKiB0cmF2ZXJzZXIncyBzeW50aGV0aWMgcnVuLWJvdW5kYXJ5IHJvb3QsIGFuZCB0aGUgZXhlY3V0b3IncyBgb25SZXN1bWVgIOKAlCBhbmRcbiAqIHRoZSB0aGlyZCBmb3JlY2FzdCB3aGF0IGl0IGNvdWxkIG5vdCBrbm93IChkZXB0aCAwLCBubyBzdWJmbG93KS4gTm93IGFsbFxuICogdGhyZWUgY2FsbCBgdHJhdmVyc2FsQ29udGV4dEZvcmAsIHRocm91Z2ggdGhlIHR3byBuYW1lZCBzaGFwZXMgYmVsb3cuXG4gKlxuICogYGRlcHRoYCBoYXMgT05FIG1lYW5pbmcgb24gZXZlcnkgc3RhbXA6IHRoZSBzdWJmbG93IG5lc3Rpbmcgb2YgdGhlIHN0YWdlJ3NcbiAqIGFkZHJlc3MsIHJlYWQgb2ZmIGl0cyBydW50aW1lU3RhZ2VJZCAoOS4zNy4wIOKAlCBzdGFnZSBldmVudHMgdXNlZCB0byBzdGFtcFxuICogdGhlIHBhcmVudC1jaGFpbiBsZW5ndGggb2YgdGhlIHN0YWdlJ3MgY29udGV4dCkuXG4gKlxuICogS2V5IE9SREVSIGFuZCBrZXkgUFJFU0VOQ0UgYXJlIHBhcnQgb2YgdGhlIGJ5dGVzIChhIHJlY29yZGVyIHRoYXQgc2VyaWFsaXplc1xuICogdGhlIHN0YW1wIHNlZXMgdGhlbSksIHNvIGB0cmF2ZXJzYWxDb250ZXh0Rm9yYCB3cml0ZXMgYSBrZXkgb25seSB3aGVuIHRoZVxuICogY2FsbGVyIHBhc3NlZCBpdCDigJQgYHBhcmVudFN0YWdlSWRgLCBgc3ViZmxvd0lkYCBhbmQgYHN1YmZsb3dQYXRoYCBhcmUgd3JpdHRlblxuICogZXZlbiB3aGVuIGB1bmRlZmluZWRgIGlmIHRoZSBjYWxsZXIgbmFtZXMgdGhlbSwgd2hpY2ggaXMgd2hhdCBhIHN0YWdlIHN0YW1wXG4gKiBoYXMgYWx3YXlzIGRvbmUuXG4gKi9cblxuaW1wb3J0IHsgdHlwZSBSdW50aW1lU3RhZ2VJZCwgYnVpbGRSdW50aW1lU3RhZ2VJZCwgc3ViZmxvd1NlZ21lbnRzT2YgfSBmcm9tICdmb290dHJhY2UnO1xuXG5pbXBvcnQgdHlwZSB7IFJlc3VtZUxpbmssIFRyYXZlcnNhbENvbnRleHQgfSBmcm9tICcuL25hcnJhdGl2ZS90eXBlcy5qcyc7XG5cbi8qKiBFdmVyeXRoaW5nIGEgc3RhbXAgY2FuIGNhcnJ5OyBvcHRpb25hbCBrZXlzIGFyZSB3cml0dGVuIG9ubHkgd2hlbiBQUkVTRU5UIG9uIHRoaXMgb2JqZWN0LiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmF2ZXJzYWxTdGFtcCB7XG4gIHJlYWRvbmx5IHJ1bklkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0YWdlSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcnVudGltZVN0YWdlSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgc3RhZ2VOYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBhcmVudFN0YWdlSWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBhcmVudFJ1bnRpbWVTdGFnZUlkPzogc3RyaW5nO1xuICByZWFkb25seSBsb29wSXRlcmF0aW9uPzogbnVtYmVyO1xuICByZWFkb25seSBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN1YmZsb3dQYXRoPzogc3RyaW5nO1xuICByZWFkb25seSByZXN1bWVkRnJvbT86IFJlc3VtZUxpbms7XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIHN0YW1wLiBgcGFyZW50U3RhZ2VJZGAgLyBgc3ViZmxvd0lkYCAvIGBzdWJmbG93UGF0aGAgYXJlIGNvcGllZFxuICogd2hlbiB0aGUga2V5IGlzIHByZXNlbnQgKGV2ZW4gYXMgYHVuZGVmaW5lZGApOyBgcGFyZW50UnVudGltZVN0YWdlSWRgLFxuICogYGxvb3BJdGVyYXRpb25gIGFuZCBgcmVzdW1lZEZyb21gIG9ubHkgd2hlbiB0aGV5IGhvbGQgYSB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYXZlcnNhbENvbnRleHRGb3Ioc3RhbXA6IFRyYXZlcnNhbFN0YW1wKTogVHJhdmVyc2FsQ29udGV4dCB7XG4gIHJldHVybiB7XG4gICAgcnVuSWQ6IHN0YW1wLnJ1bklkLFxuICAgIHN0YWdlSWQ6IHN0YW1wLnN0YWdlSWQsXG4gICAgcnVudGltZVN0YWdlSWQ6IHN0YW1wLnJ1bnRpbWVTdGFnZUlkLFxuICAgIHN0YWdlTmFtZTogc3RhbXAuc3RhZ2VOYW1lLFxuICAgIC4uLihoYXMoc3RhbXAsICdwYXJlbnRTdGFnZUlkJykgJiYgeyBwYXJlbnRTdGFnZUlkOiBzdGFtcC5wYXJlbnRTdGFnZUlkIH0pLFxuICAgIC4uLihzdGFtcC5wYXJlbnRSdW50aW1lU3RhZ2VJZCAmJiB7IHBhcmVudFJ1bnRpbWVTdGFnZUlkOiBzdGFtcC5wYXJlbnRSdW50aW1lU3RhZ2VJZCB9KSxcbiAgICAuLi4oc3RhbXAubG9vcEl0ZXJhdGlvbiAhPT0gdW5kZWZpbmVkICYmIHsgbG9vcEl0ZXJhdGlvbjogc3RhbXAubG9vcEl0ZXJhdGlvbiB9KSxcbiAgICAuLi4oaGFzKHN0YW1wLCAnc3ViZmxvd0lkJykgJiYgeyBzdWJmbG93SWQ6IHN0YW1wLnN1YmZsb3dJZCB9KSxcbiAgICAuLi4oaGFzKHN0YW1wLCAnc3ViZmxvd1BhdGgnKSAmJiB7IHN1YmZsb3dQYXRoOiBzdGFtcC5zdWJmbG93UGF0aCB9KSxcbiAgICAvLyBPTkUgbWVhbmluZyAoRjcpOiBob3cgbWFueSBzdWJmbG93cyBkZWVwIHRoZSBzdGFnZSdzIEFERFJFU1MgaXMg4oCUIHJlYWRcbiAgICAvLyBvZmYgdGhlIHJ1bnRpbWVTdGFnZUlkLCBzbyBldmVyeSBzdGFtcCAoc3RhZ2UsIHJvb3QsIHJlc3VtZSkgYWdyZWVzLlxuICAgIGRlcHRoOiBzdWJmbG93U2VnbWVudHNPZihzdGFtcC5ydW50aW1lU3RhZ2VJZCkubGVuZ3RoLFxuICAgIC4uLihzdGFtcC5yZXN1bWVkRnJvbSAmJiB7IHJlc3VtZWRGcm9tOiBzdGFtcC5yZXN1bWVkRnJvbSB9KSxcbiAgfTtcbn1cblxuLyoqIE93bi1rZXkgcHJlc2VuY2Ug4oCUIGB1bmRlZmluZWRgIGNvdW50cyBhcyBwcmVzZW50IChhIHN0YWdlIHN0YW1wIGFsd2F5cyBuYW1lcyB0aGVzZSBrZXlzKS4gKi9cbmZ1bmN0aW9uIGhhcyhzdGFtcDogVHJhdmVyc2FsU3RhbXAsIGtleTogJ3BhcmVudFN0YWdlSWQnIHwgJ3N1YmZsb3dJZCcgfCAnc3ViZmxvd1BhdGgnKTogYm9vbGVhbiB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc3RhbXAsIGtleSk7XG59XG5cbi8qKiBUaGUgc3ludGhldGljIHN0YWdlIGlkIG9mIHRoZSBydW4tYm91bmRhcnkgc3RhbXAgKGBvblJ1blN0YXJ0YCAvIGBvblJ1bkVuZGAgLyBgb25SdW5GYWlsZWRgKS4gKi9cbmNvbnN0IFJPT1RfU1RBR0VfSUQgPSAnX19yb290X18nO1xuXG4vKipcbiAqIFRoZSBydW4tYm91bmRhcnkgc3RhbXA6IHJvb3Qtc3RhZ2UgZGVmYXVsdHMgKGAnX19yb290X18nYCwgYCdfX3Jvb3RfXyMwJ2AsXG4gKiBkZXB0aCAwKSBzbyB0aGUgYHJ1bklkYCBpcyByZWxpYWJseSBhdmFpbGFibGUgb24gcnVuIGV2ZW50cyB3aXRob3V0IGZvcmNpbmdcbiAqIHJlY29yZGVycyB0byBoYW5kbGUgYHRyYXZlcnNhbENvbnRleHQgPT09IHVuZGVmaW5lZGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb290VHJhdmVyc2FsQ29udGV4dChydW5JZDogc3RyaW5nKTogVHJhdmVyc2FsQ29udGV4dCB7XG4gIHJldHVybiB0cmF2ZXJzYWxDb250ZXh0Rm9yKHtcbiAgICBydW5JZCxcbiAgICBzdGFnZUlkOiBST09UX1NUQUdFX0lELFxuICAgIHJ1bnRpbWVTdGFnZUlkOiBidWlsZFJ1bnRpbWVTdGFnZUlkKFJPT1RfU1RBR0VfSUQsIDApLFxuICAgIHN0YWdlTmFtZTogUk9PVF9TVEFHRV9JRCxcbiAgfSk7XG59XG5cbi8qKlxuICogVGhlIGBvblJlc3VtZWAgc3RhbXAuIE5hbWVzIHRoZSBzdGFuZC1pbidzIG93biBleGVjdXRpb24gKGBydW50aW1lU3RhZ2VJZGAsXG4gKiB0aGUgaWQgaXRzIGNvbW1pdCBjYXJyaWVzKSwgdGhlIFJFQUwgc3ViZmxvdyBpdCBydW5zIGluIOKAlCBgc3ViZmxvd0lkYCBpcyB0aGVcbiAqIHBhdXNlZCBzdGFnZSdzIGlubmVybW9zdCBzdWJmbG93IChgY2hlY2twb2ludC5zdWJmbG93UGF0aGAncyBsYXN0IGVudHJ5LCB0aGVcbiAqIHByZWZpeGVkIGlkIGV2ZXJ5IGluLXN1YmZsb3cgc3RhbXAgY2FycmllcyksIGFic2VudCBhdCB0aGUgdG9wIGxldmVsIOKAlCBhbmRcbiAqIHRoZSBzYW1lIGBkZXB0aGAgaXRzIG93biBzdGFnZSBldmVudHMgY2FycnkgKGJvdGggcmVhZCB0aGUgYWRkcmVzcykuXG4gKiBgcmVzdW1lZEZyb21gIExJTktTIHRvIHRoZSBwYXVzZWQgZXhlY3V0aW9uIChPVGVsIHNwYW4tbGluayBzdHlsZSwgcmVhZCBvZmZcbiAqIGBjaGVja3BvaW50LnBhdXNlZEV4ZWN1dGlvbmApIGluc3RlYWQgb2YgZm9yZWNhc3RpbmcgYSBwYXJlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXN1bWVUcmF2ZXJzYWxDb250ZXh0KHJlc3VtZToge1xuICByZWFkb25seSBydW5JZDogc3RyaW5nO1xuICByZWFkb25seSBzdGFnZUlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0YWdlTmFtZTogc3RyaW5nO1xuICByZWFkb25seSBydW50aW1lU3RhZ2VJZDogUnVudGltZVN0YWdlSWQ7XG4gIC8qKiBgY2hlY2twb2ludC5zdWJmbG93UGF0aGA6IHRoZSBwcmVmaXhlZCBpZCBvZiBldmVyeSBzdWJmbG93IG9uIHRoZSB3YXkgZG93biwgb3V0ZXJtb3N0IGZpcnN0LiAqL1xuICByZWFkb25seSBzdWJmbG93UGF0aDogcmVhZG9ubHkgc3RyaW5nW107XG4gIHJlYWRvbmx5IHJlc3VtZWRGcm9tPzogUmVzdW1lTGluaztcbn0pOiBUcmF2ZXJzYWxDb250ZXh0IHtcbiAgY29uc3QgaW5uZXJtb3N0ID0gcmVzdW1lLnN1YmZsb3dQYXRoW3Jlc3VtZS5zdWJmbG93UGF0aC5sZW5ndGggLSAxXTtcbiAgcmV0dXJuIHRyYXZlcnNhbENvbnRleHRGb3Ioe1xuICAgIHJ1bklkOiByZXN1bWUucnVuSWQsXG4gICAgc3RhZ2VJZDogcmVzdW1lLnN0YWdlSWQsXG4gICAgcnVudGltZVN0YWdlSWQ6IHJlc3VtZS5ydW50aW1lU3RhZ2VJZCxcbiAgICBzdGFnZU5hbWU6IHJlc3VtZS5zdGFnZU5hbWUsXG4gICAgLi4uKGlubmVybW9zdCAhPT0gdW5kZWZpbmVkICYmIHsgc3ViZmxvd0lkOiBpbm5lcm1vc3QgfSksXG4gICAgLi4uKHJlc3VtZS5yZXN1bWVkRnJvbSAmJiB7IHJlc3VtZWRGcm9tOiByZXN1bWUucmVzdW1lZEZyb20gfSksXG4gIH0pO1xufVxuIl19
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhdmVyc2FsQ29udGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvZW5naW5lL3RyYXZlcnNhbENvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFFSCxPQUFPLEVBQXVCLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sV0FBVyxDQUFDO0FBcUJ4Rjs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFDLEtBQXFCO0lBQ3ZELE9BQU87UUFDTCxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7UUFDbEIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1FBQ3RCLGNBQWMsRUFBRSxLQUFLLENBQUMsY0FBYztRQUNwQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7UUFDMUIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsb0JBQW9CLElBQUksRUFBRSxvQkFBb0IsRUFBRSxLQUFLLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUN2RixHQUFHLENBQUMsS0FBSyxDQUFDLGFBQWEsS0FBSyxTQUFTLElBQUksRUFBRSxhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ2hGLEdBQUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM5RCxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEUseUVBQXlFO1FBQ3pFLHVFQUF1RTtRQUN2RSxLQUFLLEVBQUUsaUJBQWlCLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU07UUFDckQsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQzVELEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztLQUM3RCxDQUFDO0FBQ0osQ0FBQztBQUVELGdHQUFnRztBQUNoRyxTQUFTLEdBQUcsQ0FBQyxLQUFxQixFQUFFLEdBQWtEO0lBQ3BGLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRUQsb0dBQW9HO0FBQ3BHLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQztBQUVqQzs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLEtBQWEsRUFBRSxXQUE0QjtJQUM5RSxPQUFPLG1CQUFtQixDQUFDO1FBQ3pCLEtBQUs7UUFDTCxPQUFPLEVBQUUsYUFBYTtRQUN0QixjQUFjLEVBQUUsbUJBQW1CLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUNyRCxTQUFTLEVBQUUsYUFBYTtRQUN4QixHQUFHLENBQUMsV0FBVyxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUM7S0FDcEMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUFDLE1BVXRDO0lBQ0MsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNwRSxPQUFPLG1CQUFtQixDQUFDO1FBQ3pCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztRQUNuQixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87UUFDdkIsY0FBYyxFQUFFLE1BQU0sQ0FBQyxjQUFjO1FBQ3JDLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztRQUMzQixHQUFHLENBQUMsU0FBUyxLQUFLLFNBQVMsSUFBSSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsQ0FBQztRQUN4RCxHQUFHLENBQUMsTUFBTSxDQUFDLFdBQVcsSUFBSSxFQUFFLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDOUQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxXQUFXLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO0tBQy9ELENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHRyYXZlcnNhbENvbnRleHQg4oCUIHRoZSBPTkUgY29uc3RydWN0b3Igb2YgYFRyYXZlcnNhbENvbnRleHRgIChGNywgOS4zNy4wKS5cbiAqXG4gKiBgVHJhdmVyc2FsQ29udGV4dGAgaXMgdGhlIGNvcnJlbGF0aW9uIHN0YW1wIGV2ZXJ5IEZsb3dSZWNvcmRlciBldmVudCBjYXJyaWVzXG4gKiAoXCJ0aGUgZW50aXJlIGV2ZW50LWNvcnJlbGF0aW9uIG1vZGVsIHJlc3RzIG9uXCIgc2NvcGUgYW5kIGZsb3cgZXZlbnRzIHNoYXJpbmdcbiAqIGl0KS4gVW50aWwgOS4zNi4wIHRocmVlIHNpdGVzIGJ1aWx0IGl0IGJ5IGhhbmQg4oCUIHRoZSB0cmF2ZXJzZXIgcGVyIHN0YWdlLCB0aGVcbiAqIHRyYXZlcnNlcidzIHN5bnRoZXRpYyBydW4tYm91bmRhcnkgcm9vdCwgYW5kIHRoZSBleGVjdXRvcidzIGBvblJlc3VtZWAg4oCUIGFuZFxuICogdGhlIHRoaXJkIGZvcmVjYXN0IHdoYXQgaXQgY291bGQgbm90IGtub3cgKGRlcHRoIDAsIG5vIHN1YmZsb3cpLiBOb3cgYWxsXG4gKiB0aHJlZSBjYWxsIGB0cmF2ZXJzYWxDb250ZXh0Rm9yYCwgdGhyb3VnaCB0aGUgdHdvIG5hbWVkIHNoYXBlcyBiZWxvdy5cbiAqXG4gKiBgZGVwdGhgIGhhcyBPTkUgbWVhbmluZyBvbiBldmVyeSBzdGFtcDogdGhlIHN1YmZsb3cgbmVzdGluZyBvZiB0aGUgc3RhZ2Unc1xuICogYWRkcmVzcywgcmVhZCBvZmYgaXRzIHJ1bnRpbWVTdGFnZUlkICg5LjM3LjAg4oCUIHN0YWdlIGV2ZW50cyB1c2VkIHRvIHN0YW1wXG4gKiB0aGUgcGFyZW50LWNoYWluIGxlbmd0aCBvZiB0aGUgc3RhZ2UncyBjb250ZXh0KS5cbiAqXG4gKiBLZXkgT1JERVIgYW5kIGtleSBQUkVTRU5DRSBhcmUgcGFydCBvZiB0aGUgYnl0ZXMgKGEgcmVjb3JkZXIgdGhhdCBzZXJpYWxpemVzXG4gKiB0aGUgc3RhbXAgc2VlcyB0aGVtKSwgc28gYHRyYXZlcnNhbENvbnRleHRGb3JgIHdyaXRlcyBhIGtleSBvbmx5IHdoZW4gdGhlXG4gKiBjYWxsZXIgcGFzc2VkIGl0IOKAlCBgcGFyZW50U3RhZ2VJZGAsIGBzdWJmbG93SWRgIGFuZCBgc3ViZmxvd1BhdGhgIGFyZSB3cml0dGVuXG4gKiBldmVuIHdoZW4gYHVuZGVmaW5lZGAgaWYgdGhlIGNhbGxlciBuYW1lcyB0aGVtLCB3aGljaCBpcyB3aGF0IGEgc3RhZ2Ugc3RhbXBcbiAqIGhhcyBhbHdheXMgZG9uZS5cbiAqL1xuXG5pbXBvcnQgeyB0eXBlIFJ1bnRpbWVTdGFnZUlkLCBidWlsZFJ1bnRpbWVTdGFnZUlkLCBzdWJmbG93U2VnbWVudHNPZiB9IGZyb20gJ2Zvb3R0cmFjZSc7XG5cbmltcG9ydCB0eXBlIHsgUnVuQ29ycmVsYXRpb24gfSBmcm9tICcuLi9hdHRlbXB0L3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgUmVzdW1lTGluaywgVHJhdmVyc2FsQ29udGV4dCB9IGZyb20gJy4vbmFycmF0aXZlL3R5cGVzLmpzJztcblxuLyoqIEV2ZXJ5dGhpbmcgYSBzdGFtcCBjYW4gY2Fycnk7IG9wdGlvbmFsIGtleXMgYXJlIHdyaXR0ZW4gb25seSB3aGVuIFBSRVNFTlQgb24gdGhpcyBvYmplY3QuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyYXZlcnNhbFN0YW1wIHtcbiAgcmVhZG9ubHkgcnVuSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgc3RhZ2VJZDogc3RyaW5nO1xuICByZWFkb25seSBydW50aW1lU3RhZ2VJZDogc3RyaW5nO1xuICByZWFkb25seSBzdGFnZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgcGFyZW50U3RhZ2VJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgcGFyZW50UnVudGltZVN0YWdlSWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGxvb3BJdGVyYXRpb24/OiBudW1iZXI7XG4gIHJlYWRvbmx5IHN1YmZsb3dJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgc3ViZmxvd1BhdGg/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlc3VtZWRGcm9tPzogUmVzdW1lTGluaztcbiAgLyoqIFRoZSBsZWcncyBjb3JyZWxhdGlvbiDigJQgdGhlIHNhbWUgZnJvemVuIG9iamVjdCBvbiBldmVyeSBzdGFtcDsgd3JpdHRlbiBsYXN0LCBvbmx5IHdoZW4gcHJlc2VudC4gKi9cbiAgcmVhZG9ubHkgY29ycmVsYXRpb24/OiBSdW5Db3JyZWxhdGlvbjtcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgc3RhbXAuIGBwYXJlbnRTdGFnZUlkYCAvIGBzdWJmbG93SWRgIC8gYHN1YmZsb3dQYXRoYCBhcmUgY29waWVkXG4gKiB3aGVuIHRoZSBrZXkgaXMgcHJlc2VudCAoZXZlbiBhcyBgdW5kZWZpbmVkYCk7IGBwYXJlbnRSdW50aW1lU3RhZ2VJZGAsXG4gKiBgbG9vcEl0ZXJhdGlvbmAsIGByZXN1bWVkRnJvbWAgYW5kIGBjb3JyZWxhdGlvbmAgb25seSB3aGVuIHRoZXkgaG9sZCBhIHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJhdmVyc2FsQ29udGV4dEZvcihzdGFtcDogVHJhdmVyc2FsU3RhbXApOiBUcmF2ZXJzYWxDb250ZXh0IHtcbiAgcmV0dXJuIHtcbiAgICBydW5JZDogc3RhbXAucnVuSWQsXG4gICAgc3RhZ2VJZDogc3RhbXAuc3RhZ2VJZCxcbiAgICBydW50aW1lU3RhZ2VJZDogc3RhbXAucnVudGltZVN0YWdlSWQsXG4gICAgc3RhZ2VOYW1lOiBzdGFtcC5zdGFnZU5hbWUsXG4gICAgLi4uKGhhcyhzdGFtcCwgJ3BhcmVudFN0YWdlSWQnKSAmJiB7IHBhcmVudFN0YWdlSWQ6IHN0YW1wLnBhcmVudFN0YWdlSWQgfSksXG4gICAgLi4uKHN0YW1wLnBhcmVudFJ1bnRpbWVTdGFnZUlkICYmIHsgcGFyZW50UnVudGltZVN0YWdlSWQ6IHN0YW1wLnBhcmVudFJ1bnRpbWVTdGFnZUlkIH0pLFxuICAgIC4uLihzdGFtcC5sb29wSXRlcmF0aW9uICE9PSB1bmRlZmluZWQgJiYgeyBsb29wSXRlcmF0aW9uOiBzdGFtcC5sb29wSXRlcmF0aW9uIH0pLFxuICAgIC4uLihoYXMoc3RhbXAsICdzdWJmbG93SWQnKSAmJiB7IHN1YmZsb3dJZDogc3RhbXAuc3ViZmxvd0lkIH0pLFxuICAgIC4uLihoYXMoc3RhbXAsICdzdWJmbG93UGF0aCcpICYmIHsgc3ViZmxvd1BhdGg6IHN0YW1wLnN1YmZsb3dQYXRoIH0pLFxuICAgIC8vIE9ORSBtZWFuaW5nIChGNyk6IGhvdyBtYW55IHN1YmZsb3dzIGRlZXAgdGhlIHN0YWdlJ3MgQUREUkVTUyBpcyDigJQgcmVhZFxuICAgIC8vIG9mZiB0aGUgcnVudGltZVN0YWdlSWQsIHNvIGV2ZXJ5IHN0YW1wIChzdGFnZSwgcm9vdCwgcmVzdW1lKSBhZ3JlZXMuXG4gICAgZGVwdGg6IHN1YmZsb3dTZWdtZW50c09mKHN0YW1wLnJ1bnRpbWVTdGFnZUlkKS5sZW5ndGgsXG4gICAgLi4uKHN0YW1wLnJlc3VtZWRGcm9tICYmIHsgcmVzdW1lZEZyb206IHN0YW1wLnJlc3VtZWRGcm9tIH0pLFxuICAgIC4uLihzdGFtcC5jb3JyZWxhdGlvbiAmJiB7IGNvcnJlbGF0aW9uOiBzdGFtcC5jb3JyZWxhdGlvbiB9KSxcbiAgfTtcbn1cblxuLyoqIE93bi1rZXkgcHJlc2VuY2Ug4oCUIGB1bmRlZmluZWRgIGNvdW50cyBhcyBwcmVzZW50IChhIHN0YWdlIHN0YW1wIGFsd2F5cyBuYW1lcyB0aGVzZSBrZXlzKS4gKi9cbmZ1bmN0aW9uIGhhcyhzdGFtcDogVHJhdmVyc2FsU3RhbXAsIGtleTogJ3BhcmVudFN0YWdlSWQnIHwgJ3N1YmZsb3dJZCcgfCAnc3ViZmxvd1BhdGgnKTogYm9vbGVhbiB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc3RhbXAsIGtleSk7XG59XG5cbi8qKiBUaGUgc3ludGhldGljIHN0YWdlIGlkIG9mIHRoZSBydW4tYm91bmRhcnkgc3RhbXAgKGBvblJ1blN0YXJ0YCAvIGBvblJ1bkVuZGAgLyBgb25SdW5GYWlsZWRgKS4gKi9cbmNvbnN0IFJPT1RfU1RBR0VfSUQgPSAnX19yb290X18nO1xuXG4vKipcbiAqIFRoZSBydW4tYm91bmRhcnkgc3RhbXA6IHJvb3Qtc3RhZ2UgZGVmYXVsdHMgKGAnX19yb290X18nYCwgYCdfX3Jvb3RfXyMwJ2AsXG4gKiBkZXB0aCAwKSBzbyB0aGUgYHJ1bklkYCBpcyByZWxpYWJseSBhdmFpbGFibGUgb24gcnVuIGV2ZW50cyB3aXRob3V0IGZvcmNpbmdcbiAqIHJlY29yZGVycyB0byBoYW5kbGUgYHRyYXZlcnNhbENvbnRleHQgPT09IHVuZGVmaW5lZGAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb290VHJhdmVyc2FsQ29udGV4dChydW5JZDogc3RyaW5nLCBjb3JyZWxhdGlvbj86IFJ1bkNvcnJlbGF0aW9uKTogVHJhdmVyc2FsQ29udGV4dCB7XG4gIHJldHVybiB0cmF2ZXJzYWxDb250ZXh0Rm9yKHtcbiAgICBydW5JZCxcbiAgICBzdGFnZUlkOiBST09UX1NUQUdFX0lELFxuICAgIHJ1bnRpbWVTdGFnZUlkOiBidWlsZFJ1bnRpbWVTdGFnZUlkKFJPT1RfU1RBR0VfSUQsIDApLFxuICAgIHN0YWdlTmFtZTogUk9PVF9TVEFHRV9JRCxcbiAgICAuLi4oY29ycmVsYXRpb24gJiYgeyBjb3JyZWxhdGlvbiB9KSxcbiAgfSk7XG59XG5cbi8qKlxuICogVGhlIGBvblJlc3VtZWAgc3RhbXAuIE5hbWVzIHRoZSBzdGFuZC1pbidzIG93biBleGVjdXRpb24gKGBydW50aW1lU3RhZ2VJZGAsXG4gKiB0aGUgaWQgaXRzIGNvbW1pdCBjYXJyaWVzKSwgdGhlIFJFQUwgc3ViZmxvdyBpdCBydW5zIGluIOKAlCBgc3ViZmxvd0lkYCBpcyB0aGVcbiAqIHBhdXNlZCBzdGFnZSdzIGlubmVybW9zdCBzdWJmbG93IChgY2hlY2twb2ludC5zdWJmbG93UGF0aGAncyBsYXN0IGVudHJ5LCB0aGVcbiAqIHByZWZpeGVkIGlkIGV2ZXJ5IGluLXN1YmZsb3cgc3RhbXAgY2FycmllcyksIGFic2VudCBhdCB0aGUgdG9wIGxldmVsIOKAlCBhbmRcbiAqIHRoZSBzYW1lIGBkZXB0aGAgaXRzIG93biBzdGFnZSBldmVudHMgY2FycnkgKGJvdGggcmVhZCB0aGUgYWRkcmVzcykuXG4gKiBgcmVzdW1lZEZyb21gIExJTktTIHRvIHRoZSBwYXVzZWQgZXhlY3V0aW9uIChPVGVsIHNwYW4tbGluayBzdHlsZSwgcmVhZCBvZmZcbiAqIGBjaGVja3BvaW50LnBhdXNlZEV4ZWN1dGlvbmApIGluc3RlYWQgb2YgZm9yZWNhc3RpbmcgYSBwYXJlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXN1bWVUcmF2ZXJzYWxDb250ZXh0KHJlc3VtZToge1xuICByZWFkb25seSBydW5JZDogc3RyaW5nO1xuICByZWFkb25seSBzdGFnZUlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0YWdlTmFtZTogc3RyaW5nO1xuICByZWFkb25seSBydW50aW1lU3RhZ2VJZDogUnVudGltZVN0YWdlSWQ7XG4gIC8qKiBgY2hlY2twb2ludC5zdWJmbG93UGF0aGA6IHRoZSBwcmVmaXhlZCBpZCBvZiBldmVyeSBzdWJmbG93IG9uIHRoZSB3YXkgZG93biwgb3V0ZXJtb3N0IGZpcnN0LiAqL1xuICByZWFkb25seSBzdWJmbG93UGF0aDogcmVhZG9ubHkgc3RyaW5nW107XG4gIHJlYWRvbmx5IHJlc3VtZWRGcm9tPzogUmVzdW1lTGluaztcbiAgLyoqIFRoZSBSRVNVTUVEIGxlZydzIGNvcnJlbGF0aW9uIChmcm9tIGByZXN1bWUoKWAncyBlbnYpIOKAlCBuZXZlciB0aGUgcGF1c2VkIGxlZydzLiAqL1xuICByZWFkb25seSBjb3JyZWxhdGlvbj86IFJ1bkNvcnJlbGF0aW9uO1xufSk6IFRyYXZlcnNhbENvbnRleHQge1xuICBjb25zdCBpbm5lcm1vc3QgPSByZXN1bWUuc3ViZmxvd1BhdGhbcmVzdW1lLnN1YmZsb3dQYXRoLmxlbmd0aCAtIDFdO1xuICByZXR1cm4gdHJhdmVyc2FsQ29udGV4dEZvcih7XG4gICAgcnVuSWQ6IHJlc3VtZS5ydW5JZCxcbiAgICBzdGFnZUlkOiByZXN1bWUuc3RhZ2VJZCxcbiAgICBydW50aW1lU3RhZ2VJZDogcmVzdW1lLnJ1bnRpbWVTdGFnZUlkLFxuICAgIHN0YWdlTmFtZTogcmVzdW1lLnN0YWdlTmFtZSxcbiAgICAuLi4oaW5uZXJtb3N0ICE9PSB1bmRlZmluZWQgJiYgeyBzdWJmbG93SWQ6IGlubmVybW9zdCB9KSxcbiAgICAuLi4ocmVzdW1lLnJlc3VtZWRGcm9tICYmIHsgcmVzdW1lZEZyb206IHJlc3VtZS5yZXN1bWVkRnJvbSB9KSxcbiAgICAuLi4ocmVzdW1lLmNvcnJlbGF0aW9uICYmIHsgY29ycmVsYXRpb246IHJlc3VtZS5jb3JyZWxhdGlvbiB9KSxcbiAgfSk7XG59XG4iXX0=
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Centralizes type definitions to avoid circular dependencies.
|
|
5
5
|
* Every handler receives HandlerDeps (the DI bag) instead of importing the traverser.
|
|
6
6
|
*/
|
|
7
|
-
import type { LogAddress } from 'foottrace';
|
|
7
|
+
import type { LogAddress, LogOutcome, Meta } from 'foottrace';
|
|
8
8
|
import type { SharedMemory } from 'foottrace/write';
|
|
9
9
|
import type { FlowControlType, FlowMessage } from '../memory/frameTypes.js';
|
|
10
10
|
import type { StageContext } from '../memory/StageContext.js';
|
|
@@ -104,57 +104,7 @@ export interface ParallelForEachConfig<TItem = any, TScope = any> {
|
|
|
104
104
|
*/
|
|
105
105
|
failFast?: boolean;
|
|
106
106
|
}
|
|
107
|
-
|
|
108
|
-
* Declarative per-stage retry policy.
|
|
109
|
-
*
|
|
110
|
-
* WHY this exists: a retry hand-rolled inside a stage function is invisible to
|
|
111
|
-
* the trace. The stage shows one execution, the commit log shows one bundle,
|
|
112
|
-
* and the two failed calls that preceded the successful one left no mark
|
|
113
|
-
* anywhere — an unexplained behaviour in a library whose whole thesis is that
|
|
114
|
-
* nothing invisible happens. Declared here instead, every attempt is part of
|
|
115
|
-
* the record: each failed attempt fires `FlowRecorder.onStageRetry` with the
|
|
116
|
-
* attempt number, the wait, and the structured error.
|
|
117
|
-
*
|
|
118
|
-
* A POLICY, not a stage kind — `retry` sits on a normal stage the way
|
|
119
|
-
* `isPausable` / `isStreaming` do. The serialized node `type` is unchanged and
|
|
120
|
-
* every existing consumer keeps rendering the stage exactly as before.
|
|
121
|
-
*
|
|
122
|
-
* @example
|
|
123
|
-
* ```ts
|
|
124
|
-
* flowChart<State>('Fetch user', fetchFn, 'fetch-user')
|
|
125
|
-
* .retry({ attempts: 3, backoffMs: (n) => 100 * 2 ** (n - 1) })
|
|
126
|
-
* ```
|
|
127
|
-
*/
|
|
128
|
-
export interface RetryPolicy {
|
|
129
|
-
/**
|
|
130
|
-
* How many times the stage function may run in total, INCLUDING the first
|
|
131
|
-
* run. Must be an integer >= 1; `1` means "no retry" (a declared no-op,
|
|
132
|
-
* accepted so a policy can be switched off without deleting it).
|
|
133
|
-
*/
|
|
134
|
-
attempts: number;
|
|
135
|
-
/**
|
|
136
|
-
* How long to wait before the NEXT attempt. Either a fixed number of
|
|
137
|
-
* milliseconds, or a function of the attempt that just FAILED (1-based)
|
|
138
|
-
* returning milliseconds — `(n) => 100 * 2 ** (n - 1)` is exponential
|
|
139
|
-
* backoff. Omitted (or a non-finite / negative result) means no wait.
|
|
140
|
-
*
|
|
141
|
-
* The wait is a plain awaited timer that is CANCELLED by the run's
|
|
142
|
-
* `AbortSignal`. It is not a pause: a chart cannot be checkpointed in the
|
|
143
|
-
* middle of a backoff.
|
|
144
|
-
*/
|
|
145
|
-
backoffMs?: number | ((attempt: number) => number);
|
|
146
|
-
/**
|
|
147
|
-
* Is THIS error worth another attempt? Defaults to retrying every error.
|
|
148
|
-
* Returning `false` ends the stage immediately on the normal error path —
|
|
149
|
-
* exactly as if no policy had been declared, and with no retry event (the
|
|
150
|
-
* policy chose not to act; there is nothing to report that the error event
|
|
151
|
-
* does not already say).
|
|
152
|
-
*
|
|
153
|
-
* A throw from this predicate is treated as `false` — a broken predicate
|
|
154
|
-
* must not turn a failing stage into an infinite retry loop.
|
|
155
|
-
*/
|
|
156
|
-
retryOn?: (error: unknown) => boolean;
|
|
157
|
-
}
|
|
107
|
+
export type { RetryPolicy, StageTouches } from '../attempt/types.js';
|
|
158
108
|
/**
|
|
159
109
|
* Controls how array values from outputMapper are merged into parent scope.
|
|
160
110
|
*/
|
|
@@ -438,6 +388,14 @@ export interface IExecutionRuntime {
|
|
|
438
388
|
};
|
|
439
389
|
setRootObject(path: string[], key: string, value: unknown): void;
|
|
440
390
|
getPipelines(): string[];
|
|
391
|
+
/**
|
|
392
|
+
* Where a mount's own log writes as it lands (10.1, P6) — the run's sink at this log's address plus the mount's
|
|
393
|
+
* `runtimeStageId`. `undefined` when this runtime's log writes to no sink. `SubflowExecutor` hands it to the
|
|
394
|
+
* nested runtime it constructs.
|
|
395
|
+
*/
|
|
396
|
+
recordFor?(mountRuntimeStageId: string, meta?: Meta): unknown;
|
|
397
|
+
/** Tell the sink this runtime's log ended (10.1, P6) — a mount's at its exit. No-op without a sink. */
|
|
398
|
+
closeRecord?(outcome: LogOutcome, meta?: Meta): void;
|
|
441
399
|
}
|
|
442
400
|
/**
|
|
443
401
|
* ExecutionEnv — infrastructure values that propagate through nested executors.
|
|
@@ -452,12 +410,39 @@ export interface IExecutionRuntime {
|
|
|
452
410
|
* parent and child flowcharts.
|
|
453
411
|
*/
|
|
454
412
|
export interface ExecutionEnv {
|
|
455
|
-
/**
|
|
413
|
+
/**
|
|
414
|
+
* AbortSignal for cooperative cancellation across nested executors. Honoured by the engine (10.1): it ends the
|
|
415
|
+
* run like `RunOptions.signal`. Under a run that has a signal or a deadline AND an env, a stage reads the run's
|
|
416
|
+
* ONE effective signal here — `RunOptions.signal`, this one and the deadline's timer, composed.
|
|
417
|
+
*/
|
|
456
418
|
readonly signal?: AbortSignal;
|
|
457
|
-
/** Timeout budget in milliseconds. */
|
|
419
|
+
/** Timeout budget in milliseconds. Readable only — the run's deadline is {@link deadline}. */
|
|
458
420
|
readonly timeoutMs?: number;
|
|
459
|
-
/**
|
|
421
|
+
/**
|
|
422
|
+
* Trace identifier for distributed tracing / observability. With `operationId` (or alone) it becomes the run's
|
|
423
|
+
* `RunCorrelation`; it wins over the trace id of `traceparent`. 1–256 printable ASCII characters with no space
|
|
424
|
+
* (since 10.1 anything else rejects the run with a `TypeError` naming the field — the id rides every event);
|
|
425
|
+
* an empty string is no id.
|
|
426
|
+
*/
|
|
460
427
|
readonly traceId?: string;
|
|
428
|
+
/**
|
|
429
|
+
* The caller's unit of work (W3C's parent-id) — part of the run's `RunCorrelation`; wins over the header's
|
|
430
|
+
* parent-id. Needs a trace: `traceId` or `traceparent` (refused alone). Same character rule as `traceId`.
|
|
431
|
+
*/
|
|
432
|
+
readonly operationId?: string;
|
|
433
|
+
/**
|
|
434
|
+
* A W3C `traceparent` header, usually straight from an inbound request. Parsed STRICTLY once per run — a
|
|
435
|
+
* malformed one refuses the run with a `TraceparentError` naming the reason (never the header). Stages read
|
|
436
|
+
* back (`$getEnv()`) exactly `RunCorrelation.traceparent` — the canonical header of the effective ids — or no
|
|
437
|
+
* key when the run's correlation carries none. Correlation only: never identity or authorisation.
|
|
438
|
+
*/
|
|
439
|
+
readonly traceparent?: string;
|
|
440
|
+
/**
|
|
441
|
+
* The run's deadline, epoch milliseconds (10.1) — the earliest of `RunOptions.deadline`, `now + RunOptions.timeoutMs`
|
|
442
|
+
* and a deadline given here. The run's signal aborts when it passes; every attempt is capped by the time left.
|
|
443
|
+
* Inherited by subflows. Read it through `scope.$attempt().timeLeftMs()`.
|
|
444
|
+
*/
|
|
445
|
+
readonly deadline?: number;
|
|
461
446
|
}
|
|
462
447
|
/**
|
|
463
448
|
* HandlerDeps — Dependency injection bag passed to all handler modules.
|
|
@@ -496,10 +481,20 @@ export interface HandlerDeps<TOut = any, TScope = any> {
|
|
|
496
481
|
}
|
|
497
482
|
/** Options for FlowChartExecutor.run(). */
|
|
498
483
|
export interface RunOptions {
|
|
499
|
-
/** AbortSignal for cooperative cancellation. */
|
|
484
|
+
/** AbortSignal for cooperative cancellation. Composed with `env.signal` and the deadline (10.1). */
|
|
500
485
|
signal?: AbortSignal;
|
|
501
|
-
/**
|
|
486
|
+
/**
|
|
487
|
+
* Timeout in milliseconds: the run's deadline is `now + timeoutMs`. The run aborts when it passes (rejecting with
|
|
488
|
+
* `Execution timed out after <timeoutMs>ms`), stages read it as `env.deadline`, and every stage records its
|
|
489
|
+
* attempt (`StageSnapshot.attempts`). Honoured beside a `signal` since 10.1 (it used to be ignored there).
|
|
490
|
+
*/
|
|
502
491
|
timeoutMs?: number;
|
|
492
|
+
/**
|
|
493
|
+
* The run's deadline, epoch milliseconds (10.1) — `Date.now() + 120_000`. Same effect as `timeoutMs`; when both
|
|
494
|
+
* are given, the earlier wins. A deadline already past stops the run before its first stage. A resumed leg has
|
|
495
|
+
* its own: pass it again to `resume()`.
|
|
496
|
+
*/
|
|
497
|
+
deadline?: number;
|
|
503
498
|
/**
|
|
504
499
|
* Runtime input data for the pipeline.
|
|
505
500
|
* Becomes the readOnlyContext accessible via `scope.getArgs()`.
|
|
@@ -27,4 +27,4 @@ export var ArrayMergeMode;
|
|
|
27
27
|
/** Overwrite parent array with subflow output. Use for Dynamic loops. */
|
|
28
28
|
ArrayMergeMode["Replace"] = "replace";
|
|
29
29
|
})(ArrayMergeMode || (ArrayMergeMode = {}));
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQWlCSCxPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQWU5RSxvQ0FBb0M7QUFDcEMsd0RBQXdEO0FBQ3hELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBWTtJQUNwQyxJQUFJLEVBQUUsQ0FBQyxPQUFhLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3ZFLEdBQUcsRUFBRSxDQUFDLE9BQWEsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDckUsS0FBSyxFQUFFLENBQUMsT0FBYSxFQUFFLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQztJQUN6RSxLQUFLLEVBQUUsQ0FBQyxPQUFhLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3pFLElBQUksRUFBRSxDQUFDLE9BQWEsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDeEUsQ0FBQztBQXVLRiw4RUFBOEU7QUFDOUUsVUFBVTtBQUNWLDhFQUE4RTtBQUU5RTs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLGNBS1g7QUFMRCxXQUFZLGNBQWM7SUFDeEIsd0ZBQXdGO0lBQ3hGLG1DQUFpQixDQUFBO0lBQ2pCLHlFQUF5RTtJQUN6RSxxQ0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBTFcsY0FBYyxLQUFkLGNBQWMsUUFLekIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHR5cGVzLnRzIOKAlCBBbGwgdHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIGVuZ2luZSBsaWJyYXJ5LlxuICpcbiAqIENlbnRyYWxpemVzIHR5cGUgZGVmaW5pdGlvbnMgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLlxuICogRXZlcnkgaGFuZGxlciByZWNlaXZlcyBIYW5kbGVyRGVwcyAodGhlIERJIGJhZykgaW5zdGVhZCBvZiBpbXBvcnRpbmcgdGhlIHRyYXZlcnNlci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IExvZ0FkZHJlc3MgfSBmcm9tICdmb290dHJhY2UnO1xuaW1wb3J0IHR5cGUgeyBTaGFyZWRNZW1vcnkgfSBmcm9tICdmb290dHJhY2Uvd3JpdGUnO1xuXG5pbXBvcnQgdHlwZSB7IEZsb3dDb250cm9sVHlwZSwgRmxvd01lc3NhZ2UgfSBmcm9tICcuLi9tZW1vcnkvZnJhbWVUeXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0YWdlQ29udGV4dCB9IGZyb20gJy4uL21lbW9yeS9TdGFnZUNvbnRleHQuanMnO1xuaW1wb3J0IHR5cGUgeyBTY29wZVByb3RlY3Rpb25Nb2RlIH0gZnJvbSAnLi4vc2NvcGUvcHJvdGVjdGlvbi90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IERlY2lkZXIsIFNlbGVjdG9yLCBTdGFnZU5vZGUgfSBmcm9tICcuL2dyYXBoL1N0YWdlTm9kZS5qcyc7XG5pbXBvcnQgdHlwZSB7IFF1ZXVlZFBhdXNlLCBSZXN1bWVFbnRyeSB9IGZyb20gJy4vaGFuZGxlcnMvUmVzdW1lRW50cnkuanMnO1xuaW1wb3J0IHR5cGUgeyBJQ29udHJvbEZsb3dOYXJyYXRpdmUgfSBmcm9tICcuL25hcnJhdGl2ZS90eXBlcy5qcyc7XG5cbi8vIFJlLWV4cG9ydCBTdGFnZU5vZGUgdHlwZXMgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQgdHlwZSB7IERlY2lkZXIsIFNlbGVjdG9yLCBTdGFnZU5vZGUgfSBmcm9tICcuL2dyYXBoL1N0YWdlTm9kZS5qcyc7XG5cbi8vIFJlLWV4cG9ydCBwYXVzZSB0eXBlcyBmcm9tIHBhdXNlLyBsaWJyYXJ5XG5leHBvcnQgdHlwZSB7IEZsb3djaGFydENoZWNrcG9pbnQsIFBhdXNhYmxlSGFuZGxlciwgUGF1c2VSZXN1bHQgfSBmcm9tICcuLi9wYXVzZS9pbmRleC5qcyc7XG5leHBvcnQgeyBpc1BhdXNlUmVzdWx0LCBpc1BhdXNlU2lnbmFsLCBQYXVzZVNpZ25hbCB9IGZyb20gJy4uL3BhdXNlL2luZGV4LmpzJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBMb2dnZXJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogTWluaW1hbCBsb2dnaW5nIGNvbnRyYWN0LiBNaXJyb3JzIENvbnNvbGUgQVBJIHN1YnNldC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUxvZ2dlciB7XG4gIGluZm8obWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbiAgbG9nKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIGRlYnVnKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIGVycm9yKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIHdhcm4obWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbn1cblxuLyoqIERlZmF1bHQgY29uc29sZS1iYXNlZCBsb2dnZXIuICovXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtLSB0cml2aWFsIGNvbnNvbGUgZGVsZWdhdGlvbiAqL1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRMb2dnZXI6IElMb2dnZXIgPSB7XG4gIGluZm86IChtZXNzYWdlPzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gY29uc29sZS5pbmZvKG1lc3NhZ2UsIC4uLmFyZ3MpLFxuICBsb2c6IChtZXNzYWdlPzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gY29uc29sZS5sb2cobWVzc2FnZSwgLi4uYXJncyksXG4gIGRlYnVnOiAobWVzc2FnZT86IGFueSwgLi4uYXJnczogYW55W10pID0+IGNvbnNvbGUuZGVidWcobWVzc2FnZSwgLi4uYXJncyksXG4gIGVycm9yOiAobWVzc2FnZT86IGFueSwgLi4uYXJnczogYW55W10pID0+IGNvbnNvbGUuZXJyb3IobWVzc2FnZSwgLi4uYXJncyksXG4gIHdhcm46IChtZXNzYWdlPzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gY29uc29sZS53YXJuKG1lc3NhZ2UsIC4uLmFyZ3MpLFxufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTdGFnZSBGdW5jdGlvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBDYWxsYmFjayB0aGF0IHJlY2VpdmVzIHRva2VucyBkdXJpbmcgc3RyZWFtaW5nLiAqL1xuZXhwb3J0IHR5cGUgU3RyZWFtQ2FsbGJhY2sgPSAodG9rZW46IHN0cmluZykgPT4gdm9pZDtcblxuLyoqXG4gKiBUaGUgZnVuY3Rpb24gc2lnbmF0dXJlIGZvciBzdGFnZSBoYW5kbGVycy5cbiAqIC0gVE91dDogcmV0dXJuIHR5cGUgcHJvZHVjZWQgYnkgdGhlIHN0YWdlXG4gKiAtIFRTY29wZTogdGhlIHNjb3BlIG9iamVjdCBwYXNzZWQgdG8gdGhlIHN0YWdlXG4gKiAtIE9wdGlvbmFsIDNyZCBwYXJhbWV0ZXIgYHN0cmVhbUNhbGxiYWNrYCBpbmplY3RlZCBmb3Igc3RyZWFtaW5nIHN0YWdlcy5cbiAqL1xuZXhwb3J0IHR5cGUgU3RhZ2VGdW5jdGlvbjxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+ID0gKFxuICBzY29wZTogVFNjb3BlLFxuICBicmVha1BpcGVsaW5lOiAoKSA9PiB2b2lkLFxuICBzdHJlYW1DYWxsYmFjaz86IFN0cmVhbUNhbGxiYWNrLFxuKSA9PiBQcm9taXNlPFRPdXQgfCB2b2lkPiB8IFRPdXQgfCB2b2lkO1xuXG4vKipcbiAqIFN0YWdlIGZ1bmN0aW9uIGZvciBwYXVzYWJsZSBzdGFnZXMg4oCUIHJldHVybiB2YWx1ZSBpcyB0aGUgcGF1c2UgZGF0YSAoYW55IHR5cGUpLlxuICogUmV0dXJuIG5vbi12b2lkIHRvIHBhdXNlLCByZXR1cm4gdm9pZCB0byBjb250aW51ZSBub3JtYWxseS5cbiAqL1xuZXhwb3J0IHR5cGUgUGF1c2FibGVTdGFnZUZ1bmN0aW9uPFRTY29wZSA9IGFueT4gPSAoXG4gIHNjb3BlOiBUU2NvcGUsXG4gIGJyZWFrUGlwZWxpbmU6ICgpID0+IHZvaWQsXG4pID0+IFByb21pc2U8dW5rbm93bj4gfCB1bmtub3duO1xuXG4vKiogRmFjdG9yeSB0aGF0IGNyZWF0ZXMgYSBzY29wZSBpbnN0YW5jZSBmb3IgZWFjaCBzdGFnZS4gKi9cbmV4cG9ydCB0eXBlIFNjb3BlRmFjdG9yeTxUU2NvcGUgPSBhbnk+ID0gKFxuICBjb250ZXh0OiBTdGFnZUNvbnRleHQsXG4gIHN0YWdlTmFtZTogc3RyaW5nLFxuICByZWFkT25seUNvbnRleHQ/OiB1bmtub3duLFxuICBleGVjdXRpb25FbnY/OiBFeGVjdXRpb25FbnYsXG4pID0+IFRTY29wZTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTdHJlYW1pbmdcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBTdHJlYW1Ub2tlbkhhbmRsZXIgPSAoc3RyZWFtSWQ6IHN0cmluZywgdG9rZW46IHN0cmluZykgPT4gdm9pZDtcbmV4cG9ydCB0eXBlIFN0cmVhbUxpZmVjeWNsZUhhbmRsZXIgPSAoc3RyZWFtSWQ6IHN0cmluZywgZnVsbFRleHQ/OiBzdHJpbmcpID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyZWFtSGFuZGxlcnMge1xuICBvblRva2VuPzogU3RyZWFtVG9rZW5IYW5kbGVyO1xuICBvblN0YXJ0PzogU3RyZWFtTGlmZWN5Y2xlSGFuZGxlcjtcbiAgb25FbmQ/OiBTdHJlYW1MaWZlY3ljbGVIYW5kbGVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFBhcmFsbGVsLWZvci1lYWNoIChkeW5hbWljIGZhbi1vdXQpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBBIGJ1aWx0IGNoYXJ0LCBhcyBgYWRkUGFyYWxsZWxGb3JFYWNoYCdzIGBicmFuY2hgIGZhY3RvcnkgcmV0dXJucyBpdC5cbiAqXG4gKiBTdHJ1Y3R1cmFsbHkgdGhlIHN1YnNldCBvZiBgRmxvd0NoYXJ0YCB0aGUgZW5naW5lIG5lZWRzIHRvIG1vdW50IGEgYnJhbmNoIOKAlFxuICogZGVjbGFyZWQgaGVyZSByYXRoZXIgdGhhbiBpbXBvcnRlZCBzbyBgZW5naW5lL2Aga2VlcHMgaXRzIG9uZS13YXkgZGVwZW5kZW5jeVxuICogb24gYGJ1aWxkZXIvYC4gQW55IGBmbG93Q2hhcnQoLi4uKS5idWlsZCgpYCByZXN1bHQgc2F0aXNmaWVzIGl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJyYW5jaENoYXJ0PFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgc3RhZ2VNYXA6IE1hcDxzdHJpbmcsIFN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPj47XG4gIHN1YmZsb3dzPzogUmVjb3JkPHN0cmluZywgeyByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB9PjtcbiAgYnVpbGRUaW1lU3RydWN0dXJlPzogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBSdW50aW1lIGZhbi1vdXQgY29uZmlnIOKAlCBvbmUgYnJhbmNoIHBlciBpdGVtLCBicmFuY2ggQ09VTlQgZGVjaWRlZCBhdFxuICogcnVudGltZSBmcm9tIHRoZSBwYXlsb2FkLiBEZXNpZ246IGRvY3MvZGVzaWduL2V4ZWN1dGlvbi1jb250cm9sLm1kIChEMikuXG4gKlxuICogRWFjaCBicmFuY2ggcnVucyBhcyBhIGdlbmVyYXRlZCBTVUJGTE9XIChpc29sYXRlZCBydW50aW1lLCBvd24gY29tbWl0IGxvZyxcbiAqIGFkZHJlc3NhYmxlIGF0IGA8c3RhZ2VJZD5+PGluZGV4PmAgaW4gZXZlcnkgdHJhY2UgcXVlcnkpLCB3aGljaCBpcyB3aGF0XG4gKiBtYWtlcyBicmFuY2hlcyB1bmFibGUgdG8gY29ycnVwdCBlYWNoIG90aGVyJ3MgaW4tZmxpZ2h0IHN0YXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcmFsbGVsRm9yRWFjaENvbmZpZzxUSXRlbSA9IGFueSwgVFNjb3BlID0gYW55PiB7XG4gIC8qKlxuICAgKiBQaWNrcyB0aGUgaXRlbXMgdG8gZmFuIG91dCBvdmVyLCBmcm9tIHRoZSBsaXZlIHNjb3BlLiBSZWFkcyBoZXJlIGFyZVxuICAgKiB0cmFja2VkIGxpa2UgYW55IG90aGVyIHN0YWdlIHJlYWQsIHNvIHRoZSBmYW4tb3V0J3Mgb3duIGlucHV0cyBzaG93IHVwIGluXG4gICAqIHRoZSB0cmFjZSBhbmQgaW4gYSBiYWNrd2FyZCBzbGljZS5cbiAgICovXG4gIGl0ZW1zOiAoc2NvcGU6IFRTY29wZSkgPT4gcmVhZG9ubHkgVEl0ZW1bXTtcbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgY2hhcnQgZm9yIE9ORSBpdGVtLiBDYWxsZWQgb25jZSBwZXIgZXhlY3V0ZWQgYnJhbmNoLCB3aXRoIHRoZVxuICAgKiBpdGVtIGFuZCBpdHMgaW5kZXgg4oCUIGNsb3NlIG92ZXIgdGhlbSwgb3IgcmVhZCB0aGUgYGl0ZW1gIC8gYGluZGV4YCB2YWx1ZXNcbiAgICogc2VlZGVkIGludG8gdGhlIGJyYW5jaCdzIG93biBzY29wZS5cbiAgICovXG4gIGJyYW5jaDogKGl0ZW06IFRJdGVtLCBpbmRleDogbnVtYmVyKSA9PiBCcmFuY2hDaGFydDtcbiAgLyoqXG4gICAqIEhhcmQgY2VpbGluZyBvbiBicmFuY2hlcyBwZXIgZXhlY3V0aW9uLiBSRVFVSVJFRDogYW4gdW5ib3VuZGVkIGZhbi1vdXRcbiAgICogZHJpdmVuIGJ5IG1vZGVsIG91dHB1dCBpcyBhIHJlc291cmNlIGF0dGFjaywgc28gdGhlcmUgaXMgbm8gZGVmYXVsdCB0b1xuICAgKiBmb3JnZXQuIEV4dHJhIGl0ZW1zIGRvIG5vdCBydW4g4oCUIHRoZSB0cnVuY2F0aW9uIGlzIHJlY29yZGVkLCBuZXZlciBzaWxlbnQuXG4gICAqL1xuICBtYXhCcmFuY2hlczogbnVtYmVyO1xuICAvKipcbiAgICogU3RhdGUga2V5IHRoZSBvcmRlcmVkIHJlc3VsdHMgYXJyYXkgaXMgd3JpdHRlbiB0byBvbiB0aGUgcGFyZW50IHNjb3BlLlxuICAgKiBSRVFVSVJFRCDigJQgYSBrZXkgZGVyaXZlZCBmcm9tIHRoZSBzdGFnZSBpZCBjb3VsZCBzaWxlbnRseSBvdmVyd3JpdGUgc3RhdGVcbiAgICogdGhlIGNoYXJ0IGFscmVhZHkgb3ducy5cbiAgICovXG4gIGludG86IHN0cmluZztcbiAgLyoqXG4gICAqIEZhbi1vdXQgZXJyb3IgcG9saWN5IOKAlCB0aGUgU0FNRSBwb2xpY3kgdGhlIGV4aXN0aW5nIHBhcmFsbGVsIGZhbi1vdXQgdXNlcy5cbiAgICogYHRydWVgID0gYFByb21pc2UuYWxsYCAodGhlIGZpcnN0IGZhaWxpbmcgYnJhbmNoIHJlamVjdHMgdGhlIHN0YWdlKTtcbiAgICogb21pdHRlZC9mYWxzZSA9IGJlc3QtZWZmb3J0IGBQcm9taXNlLmFsbFNldHRsZWRgIChldmVyeSBicmFuY2ggcnVuczsgYVxuICAgKiBmYWlsZWQgYnJhbmNoJ3Mgc2xvdCBpbiB0aGUgcmVzdWx0cyBhcnJheSBpcyBgdW5kZWZpbmVkYCkuXG4gICAqL1xuICBmYWlsRmFzdD86IGJvb2xlYW47XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmV0cnkgKHBlci1zdGFnZSBkZWNsYXJhdGl2ZSBwb2xpY3kpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBEZWNsYXJhdGl2ZSBwZXItc3RhZ2UgcmV0cnkgcG9saWN5LlxuICpcbiAqIFdIWSB0aGlzIGV4aXN0czogYSByZXRyeSBoYW5kLXJvbGxlZCBpbnNpZGUgYSBzdGFnZSBmdW5jdGlvbiBpcyBpbnZpc2libGUgdG9cbiAqIHRoZSB0cmFjZS4gVGhlIHN0YWdlIHNob3dzIG9uZSBleGVjdXRpb24sIHRoZSBjb21taXQgbG9nIHNob3dzIG9uZSBidW5kbGUsXG4gKiBhbmQgdGhlIHR3byBmYWlsZWQgY2FsbHMgdGhhdCBwcmVjZWRlZCB0aGUgc3VjY2Vzc2Z1bCBvbmUgbGVmdCBubyBtYXJrXG4gKiBhbnl3aGVyZSDigJQgYW4gdW5leHBsYWluZWQgYmVoYXZpb3VyIGluIGEgbGlicmFyeSB3aG9zZSB3aG9sZSB0aGVzaXMgaXMgdGhhdFxuICogbm90aGluZyBpbnZpc2libGUgaGFwcGVucy4gRGVjbGFyZWQgaGVyZSBpbnN0ZWFkLCBldmVyeSBhdHRlbXB0IGlzIHBhcnQgb2ZcbiAqIHRoZSByZWNvcmQ6IGVhY2ggZmFpbGVkIGF0dGVtcHQgZmlyZXMgYEZsb3dSZWNvcmRlci5vblN0YWdlUmV0cnlgIHdpdGggdGhlXG4gKiBhdHRlbXB0IG51bWJlciwgdGhlIHdhaXQsIGFuZCB0aGUgc3RydWN0dXJlZCBlcnJvci5cbiAqXG4gKiBBIFBPTElDWSwgbm90IGEgc3RhZ2Uga2luZCDigJQgYHJldHJ5YCBzaXRzIG9uIGEgbm9ybWFsIHN0YWdlIHRoZSB3YXlcbiAqIGBpc1BhdXNhYmxlYCAvIGBpc1N0cmVhbWluZ2AgZG8uIFRoZSBzZXJpYWxpemVkIG5vZGUgYHR5cGVgIGlzIHVuY2hhbmdlZCBhbmRcbiAqIGV2ZXJ5IGV4aXN0aW5nIGNvbnN1bWVyIGtlZXBzIHJlbmRlcmluZyB0aGUgc3RhZ2UgZXhhY3RseSBhcyBiZWZvcmUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBmbG93Q2hhcnQ8U3RhdGU+KCdGZXRjaCB1c2VyJywgZmV0Y2hGbiwgJ2ZldGNoLXVzZXInKVxuICogICAucmV0cnkoeyBhdHRlbXB0czogMywgYmFja29mZk1zOiAobikgPT4gMTAwICogMiAqKiAobiAtIDEpIH0pXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXRyeVBvbGljeSB7XG4gIC8qKlxuICAgKiBIb3cgbWFueSB0aW1lcyB0aGUgc3RhZ2UgZnVuY3Rpb24gbWF5IHJ1biBpbiB0b3RhbCwgSU5DTFVESU5HIHRoZSBmaXJzdFxuICAgKiBydW4uIE11c3QgYmUgYW4gaW50ZWdlciA+PSAxOyBgMWAgbWVhbnMgXCJubyByZXRyeVwiIChhIGRlY2xhcmVkIG5vLW9wLFxuICAgKiBhY2NlcHRlZCBzbyBhIHBvbGljeSBjYW4gYmUgc3dpdGNoZWQgb2ZmIHdpdGhvdXQgZGVsZXRpbmcgaXQpLlxuICAgKi9cbiAgYXR0ZW1wdHM6IG51bWJlcjtcbiAgLyoqXG4gICAqIEhvdyBsb25nIHRvIHdhaXQgYmVmb3JlIHRoZSBORVhUIGF0dGVtcHQuIEVpdGhlciBhIGZpeGVkIG51bWJlciBvZlxuICAgKiBtaWxsaXNlY29uZHMsIG9yIGEgZnVuY3Rpb24gb2YgdGhlIGF0dGVtcHQgdGhhdCBqdXN0IEZBSUxFRCAoMS1iYXNlZClcbiAgICogcmV0dXJuaW5nIG1pbGxpc2Vjb25kcyDigJQgYChuKSA9PiAxMDAgKiAyICoqIChuIC0gMSlgIGlzIGV4cG9uZW50aWFsXG4gICAqIGJhY2tvZmYuIE9taXR0ZWQgKG9yIGEgbm9uLWZpbml0ZSAvIG5lZ2F0aXZlIHJlc3VsdCkgbWVhbnMgbm8gd2FpdC5cbiAgICpcbiAgICogVGhlIHdhaXQgaXMgYSBwbGFpbiBhd2FpdGVkIHRpbWVyIHRoYXQgaXMgQ0FOQ0VMTEVEIGJ5IHRoZSBydW4nc1xuICAgKiBgQWJvcnRTaWduYWxgLiBJdCBpcyBub3QgYSBwYXVzZTogYSBjaGFydCBjYW5ub3QgYmUgY2hlY2twb2ludGVkIGluIHRoZVxuICAgKiBtaWRkbGUgb2YgYSBiYWNrb2ZmLlxuICAgKi9cbiAgYmFja29mZk1zPzogbnVtYmVyIHwgKChhdHRlbXB0OiBudW1iZXIpID0+IG51bWJlcik7XG4gIC8qKlxuICAgKiBJcyBUSElTIGVycm9yIHdvcnRoIGFub3RoZXIgYXR0ZW1wdD8gRGVmYXVsdHMgdG8gcmV0cnlpbmcgZXZlcnkgZXJyb3IuXG4gICAqIFJldHVybmluZyBgZmFsc2VgIGVuZHMgdGhlIHN0YWdlIGltbWVkaWF0ZWx5IG9uIHRoZSBub3JtYWwgZXJyb3IgcGF0aCDigJRcbiAgICogZXhhY3RseSBhcyBpZiBubyBwb2xpY3kgaGFkIGJlZW4gZGVjbGFyZWQsIGFuZCB3aXRoIG5vIHJldHJ5IGV2ZW50ICh0aGVcbiAgICogcG9saWN5IGNob3NlIG5vdCB0byBhY3Q7IHRoZXJlIGlzIG5vdGhpbmcgdG8gcmVwb3J0IHRoYXQgdGhlIGVycm9yIGV2ZW50XG4gICAqIGRvZXMgbm90IGFscmVhZHkgc2F5KS5cbiAgICpcbiAgICogQSB0aHJvdyBmcm9tIHRoaXMgcHJlZGljYXRlIGlzIHRyZWF0ZWQgYXMgYGZhbHNlYCDigJQgYSBicm9rZW4gcHJlZGljYXRlXG4gICAqIG11c3Qgbm90IHR1cm4gYSBmYWlsaW5nIHN0YWdlIGludG8gYW4gaW5maW5pdGUgcmV0cnkgbG9vcC5cbiAgICovXG4gIHJldHJ5T24/OiAoZXJyb3I6IHVua25vd24pID0+IGJvb2xlYW47XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU3ViZmxvd1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogQ29udHJvbHMgaG93IGFycmF5IHZhbHVlcyBmcm9tIG91dHB1dE1hcHBlciBhcmUgbWVyZ2VkIGludG8gcGFyZW50IHNjb3BlLlxuICovXG5leHBvcnQgZW51bSBBcnJheU1lcmdlTW9kZSB7XG4gIC8qKiBBcHBlbmQgc3ViZmxvdyBvdXRwdXQgdG8gZXhpc3RpbmcgcGFyZW50IGFycmF5OiBbLi4uZXhpc3RpbmcsIC4uLnZhbHVlXS4gRGVmYXVsdC4gKi9cbiAgQ29uY2F0ID0gJ2NvbmNhdCcsXG4gIC8qKiBPdmVyd3JpdGUgcGFyZW50IGFycmF5IHdpdGggc3ViZmxvdyBvdXRwdXQuIFVzZSBmb3IgRHluYW1pYyBsb29wcy4gKi9cbiAgUmVwbGFjZSA9ICdyZXBsYWNlJyxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdWJmbG93TW91bnRPcHRpb25zPFRQYXJlbnRTY29wZSA9IGFueSwgVFN1YmZsb3dJbnB1dCA9IGFueSwgVFN1YmZsb3dPdXRwdXQgPSBhbnk+IHtcbiAgaW5wdXRNYXBwZXI/OiAocGFyZW50U2NvcGU6IFRQYXJlbnRTY29wZSkgPT4gVFN1YmZsb3dJbnB1dDtcbiAgLyoqXG4gICAqIE1hcHMgc3ViZmxvdyBvdXRwdXQgYmFjayBpbnRvIHBhcmVudCBzY29wZS5cbiAgICpcbiAgICogKipBcnJheSBtZXJnZSBiZWhhdmlvcioqIGlzIGNvbnRyb2xsZWQgYnkgYGFycmF5TWVyZ2VgOlxuICAgKiAtIGAnY29uY2F0J2AgKGRlZmF1bHQpOiBgWy4uLmV4aXN0aW5nLCAuLi52YWx1ZV1gIOKAlCByZXR1cm4gb25seSAqKmRlbHRhKiogaXRlbXNcbiAgICogLSBgJ3JlcGxhY2UnYDogb3ZlcndyaXRlcyB0aGUgcGFyZW50IHZhbHVlIOKAlCByZXR1cm4gdGhlIGZ1bGwgYXJyYXlcbiAgICpcbiAgICogU2NhbGFyIHZhbHVlcyBhcmUgYWx3YXlzIHJlcGxhY2VkIHJlZ2FyZGxlc3Mgb2YgYGFycmF5TWVyZ2VgLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIERlbHRhIG1vZGUgKGRlZmF1bHQpIOKAlCByZXR1cm4gb25seSBuZXcgaXRlbXMsIGNvbmNhdCBhcHBlbmRzXG4gICAqIG91dHB1dE1hcHBlcjogKHNmKSA9PiAoeyBtZXNzYWdlczogc2YubmV3TWVzc2FnZXMgfSlcbiAgICpcbiAgICogLy8gUmVwbGFjZSBtb2RlIOKAlCByZXR1cm4gZnVsbCBhcnJheSwgcGFyZW50IHZhbHVlIGlzIG92ZXJ3cml0dGVuXG4gICAqIC8vIFVzZWZ1bCBpbiBEeW5hbWljIGxvb3BzIHdoZXJlIHRoZSBzdWJmbG93IHJlY29tcHV0ZXMgdGhlIGZ1bGwgdmFsdWUgZWFjaCBpdGVyYXRpb25cbiAgICogb3V0cHV0TWFwcGVyOiAoc2YpID0+ICh7IHRvb2xEZXNjcmlwdGlvbnM6IHNmLnRvb2xEZXNjcmlwdGlvbnMgfSksXG4gICAqIGFycmF5TWVyZ2U6IEFycmF5TWVyZ2VNb2RlLlJlcGxhY2UsXG4gICAqXG4gICAqIC8vIFNjYWxhcnMgYXJlIGZpbmUgaW4gYm90aCBtb2RlcyDigJQgYWx3YXlzIHJlcGxhY2VkXG4gICAqIG91dHB1dE1hcHBlcjogKHNmKSA9PiAoeyBzdGF0dXM6IHNmLnJlc3VsdCwgY291bnQ6IHNmLnRvdGFsIH0pXG4gICAqIGBgYFxuICAgKi9cbiAgb3V0cHV0TWFwcGVyPzogKHN1YmZsb3dPdXRwdXQ6IFRTdWJmbG93T3V0cHV0LCBwYXJlbnRTY29wZTogVFBhcmVudFNjb3BlKSA9PiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqXG4gICAqIENvbnRyb2xzIGhvdyBhcnJheSB2YWx1ZXMgZnJvbSBvdXRwdXRNYXBwZXIgYXJlIG1lcmdlZCBpbnRvIHBhcmVudCBzY29wZS5cbiAgICogQXBwbGllcyBvbmx5IHRvIHRvcC1sZXZlbCBhcnJheSBrZXlzLiBOZXN0ZWQgYXJyYXlzIGluc2lkZSBvYmplY3RzXG4gICAqIGFsd2F5cyB1c2UgYXBwZW5kIChhcHBlbmRUb0FycmF5KSByZWdhcmRsZXNzIG9mIHRoaXMgc2V0dGluZy5cbiAgICpcbiAgICogQGRlZmF1bHQgQXJyYXlNZXJnZU1vZGUuQ29uY2F0XG4gICAqL1xuICBhcnJheU1lcmdlPzogQXJyYXlNZXJnZU1vZGU7XG5cbiAgLyoqXG4gICAqIFNUUlVDVFVSRS1PTkxZOiB0aGUgZG93bnN0cmVhbSBzdGFnZSBpZCB0aGlzIGJyYW5jaCdzIGNvbnZlcmdlbmNlIGVkZ2VcbiAgICogcG9pbnRzIHRvLCBvdmVycmlkaW5nIHRoZSBkZWZhdWx0IFwiY29udmVyZ2UgYXQgdGhlIG5leHQgbGluZWFyIHN0YWdlLlwiXG4gICAqXG4gICAqIFdoZW4gYSBmb3JrL3NlbGVjdG9yL2RlY2lkZXIgYnJhbmNoIGNhcnJpZXMgYGNvbnZlcmdlQXRgLCBpdHMgdmlzdWFsaXplZFxuICAgKiBgbmV4dGAgZWRnZSBpcyBmaXJlZCB0byB0aGUgbmFtZWQgc3RhZ2UgaW5zdGVhZCBvZiB0byB0aGUgc2hhcmVkXG4gICAqIGNvbnZlcmdlbmNlIG5vZGUgaXRzIHNpYmxpbmdzIHVzZS4gVGhpcyBleHByZXNzZXMgYW4gdW5lcXVhbC1kZXB0aCBtZXJnZVxuICAgKiDigJQgZS5nLiBhIGB0b29sc2Agc2xvdCB0aGF0IGJ5cGFzc2VzIHRoZSBgbWVzc2FnZUFQSWAgYXNzZW1ibHkgbm9kZSBhbmRcbiAgICogcGFpcnMgd2l0aCBpdHMgb3V0cHV0IGF0IGBjYWxsLWxsbWAgKHNvIGBjYWxsLWxsbWAgcmVhZHMgYXMgYSAyLXBhcmVudFxuICAgKiBtZXJnZSksIGZhaXRoZnVsIHRvIHRoZSBBbnRocm9waWMgd2lyZSBwcm90b2NvbCAoc3lzdGVtK21lc3NhZ2VzID0gdGhlXG4gICAqIG1lc3NhZ2UgcGF5bG9hZDsgdG9vbHMgPSBhIHNlcGFyYXRlIHRvcC1sZXZlbCBmaWVsZCkuXG4gICAqXG4gICAqICoqVGhpcyBhZmZlY3RzIHRoZSBTVFJVQ1RVUkUvdG9wb2xvZ3kgZ3JhcGggb25seSoqIOKAlCB0aGUgcnVudGltZSBpc1xuICAgKiB1bmNoYW5nZWQgKHRoZSBicmFuY2gncyBvdXRwdXRzIHJpZGUgc2hhcmVkIHNjb3BlOyB0aGUgbmFtZWQgdGFyZ2V0IHJlYWRzXG4gICAqIHRoZW0gd2hlbiBpdCBydW5zKS4gSXQgZG9lcyBOT1QgaW50cm9kdWNlIGEgam9pbiBiYXJyaWVyLiBUaGUgdGFyZ2V0IGlzIGFcbiAgICogRk9SV0FSRCBzdGFnZSAoYWRkZWQgbGF0ZXIgaW4gdGhlIGNoYWluKSwgc28gaXQgaXMgbm90IHZhbGlkYXRlZCBhdFxuICAgKiBicmFuY2gtZGVjbGFyYXRpb24gdGltZS5cbiAgICovXG4gIGNvbnZlcmdlQXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZW4gYHRydWVgLCBhbiBpbm5lciBgc2NvcGUuJGJyZWFrKHJlYXNvbilgIGNhbGwgaW5zaWRlIHRoaXMgc3ViZmxvd1xuICAgKiBwcm9wYWdhdGVzIHVwIHRvIHRoZSBwYXJlbnQg4oCUIGkuZS4sIHRoZSBwYXJlbnQncyBgYnJlYWtGbGFnYCBpcyBzZXRcbiAgICogYWZ0ZXIgdGhlIHN1YmZsb3cgZXhpdHMsIHRlcm1pbmF0aW5nIHRoZSBwYXJlbnQncyBvdXRlciBsb29wIHRvby5cbiAgICpcbiAgICogKipEZWZhdWx0OiBgZmFsc2VgKiogKGN1cnJlbnQgYmVoYXZpb3VyIOKAlCBpbm5lciBicmVhayBzdG9wcyBvbmx5IHRoZVxuICAgKiBzdWJmbG93OyBwYXJlbnQgY29udGludWVzKS5cbiAgICpcbiAgICogIyMgV2hlbiB0byB1c2VcbiAgICpcbiAgICogU2V0IGBwcm9wYWdhdGVCcmVhazogdHJ1ZWAgb24gc3ViZmxvdyBtb3VudHMgdGhhdCByZXByZXNlbnRcbiAgICogKip0ZXJtaW5hbCoqIGJyYW5jaGVzIOKAlCBcImlmIHRoaXMgc3ViZmxvdyBmaXJlcywgdGhlIG91dGVyIGxvb3AgaXNcbiAgICogZG9uZVwiLiBFeGFtcGxlczpcbiAgICpcbiAgICogLSBBIGh1bWFuLXJldmlldyBydW5uZXIgdGhhdCB0YWtlcyBvdmVyIGZyb20gYW4gYWdlbnQncyB0b29sLWNhbGxpbmdcbiAgICogICBsb29wIGFuZCBwcm9kdWNlcyB0aGUgZmluYWwgcmVzcG9uc2UuXG4gICAqIC0gQSBzYWZldHktZ2F0ZSBzdWJmbG93IHRoYXQgaGFsdHMgdGhlIG91dGVyIHdvcmtmbG93IHdoZW4gYSBwb2xpY3lcbiAgICogICB2aW9sYXRpb24gaXMgZGV0ZWN0ZWQuXG4gICAqIC0gQW4gZXJyb3ItcmVjb3Zlcnkgc3ViZmxvdyB0aGF0IHJlc3RvcmVzIHN0YXRlIGFuZCB0aGVuIHRlcm1pbmF0ZXMuXG4gICAqXG4gICAqICMjIFNlbWFudGljc1xuICAgKlxuICAgKiAxLiBJbnNpZGUgdGhlIHN1YmZsb3csIGEgc3RhZ2UgY2FsbHMgYHNjb3BlLiRicmVhayhyZWFzb24pYC5cbiAgICogMi4gVGhlIHN1YmZsb3cncyBvd24gZXhlY3V0aW9uIHN0b3BzIChub3JtYWwgYCRicmVha2AgYmVoYXZpb3VyKS5cbiAgICogMy4gYFN1YmZsb3dFeGVjdXRvcmAgaW5zcGVjdHMgdGhlIHN1YmZsb3cncyBleGl0IHN0YXRlLiBJZlxuICAgKiAgICBgcHJvcGFnYXRlQnJlYWsgPT09IHRydWVgIEFORCB0aGUgaW5uZXIgYnJlYWsgZmlyZWQsIGl0IGZvcndhcmRzXG4gICAqICAgIHRoZSBicmVhayAoYW5kIGl0cyByZWFzb24pIHRvIHRoZSBwYXJlbnQncyBgYnJlYWtGbGFnYC5cbiAgICogNC4gVGhlIHBhcmVudCB0cmF2ZXJzZXIgc2VlcyBgc2hvdWxkQnJlYWtgIG9uIGl0cyBuZXh0IHN0ZXAgYW5kIGV4aXRzLlxuICAgKiA1LiBBIGBGbG93UmVjb3JkZXIub25CcmVha2AgZXZlbnQgZmlyZXMgYXQgdGhlIHBhcmVudC1tb3VudCBsZXZlbCB3aXRoXG4gICAqICAgIGBwcm9wYWdhdGVkRnJvbVN1YmZsb3dgID0gdGhlIHN1YmZsb3cncyBpZCBhbmQgdGhlIGlubmVyIHJlYXNvbi5cbiAgICpcbiAgICogIyMgUGFyYWxsZWwvZmFuLW91dFxuICAgKlxuICAgKiBGb2xsb3dzIHRoZSBleGlzdGluZyBsaWJyYXJ5IHJ1bGUgaW4gYENoaWxkcmVuRXhlY3V0b3JgOiB0aGUgcGFyZW50XG4gICAqIGJyZWFrcyBvbmx5IHdoZW4gKipldmVyeSoqIGNoaWxkIG9mIGEgZm9yayBicm9rZS4gQSBzaW5nbGVcbiAgICogYHByb3BhZ2F0ZUJyZWFrOiB0cnVlYCBzdWJmbG93IGNvbnRyaWJ1dGluZyBpdHMgYnJlYWsgdG8gdGhlIGNvdW50XG4gICAqIGRvZXMgbm90IG9uIGl0cyBvd24gdGVybWluYXRlIHRoZSBwYXJlbnQgZmFuLW91dC5cbiAgICpcbiAgICogIyMgb3V0cHV0TWFwcGVyIHN0aWxsIHJ1bnNcbiAgICpcbiAgICogVGhlIHN1YmZsb3cncyBgb3V0cHV0TWFwcGVyYCAoaWYgc3VwcGxpZWQpIEFMV0FZUyBydW5zIGJlZm9yZSB0aGVcbiAgICogYnJlYWsgcHJvcGFnYXRlcywgc28gdGhlIHN1YmZsb3cncyBwYXJ0aWFsIHN0YXRlIGlzIHN0aWxsIHdyaXR0ZW4gdG9cbiAgICogdGhlIHBhcmVudCBzY29wZS4gVGhpcyBpcyBpbnRlbnRpb25hbCDigJQgdGhlIHR5cGljYWwgdXNlIGNhc2UgaXMgYW5cbiAgICogXCJlc2NhbGF0aW9uXCIgc3ViZmxvdyB3aG9zZSBvdXRwdXQgSVMgdGhlIGZpbmFsIGFuc3dlciB0aGF0IG5lZWRzIHRvXG4gICAqIGxhbmQgaW4gdGhlIHBhcmVudCBzY29wZSBiZWZvcmUgdGhlIG91dGVyIGxvb3AgdGVybWluYXRlcy4gSWYgeW91XG4gICAqIHdhbnQgdG8gc3VwcHJlc3Mgb3V0cHV0IG1hcHBpbmcgb24gYnJlYWssIGNoZWNrIHRoZSBicmVhayBzdGF0ZVxuICAgKiBpbnNpZGUgeW91ciBgb3V0cHV0TWFwcGVyYCBhbmQgcmV0dXJuIGB7fWAgZWFybHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBwcm9wYWdhdGVCcmVhaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERlY2xhcmVkIHRhZ3MgKDkuMjEuMSkgZm9yIHRoZSBNT1VOVCBpdHNlbGYg4oCUIHRoZSBOQU1FUyB0aGUgYXV0aG9yIHB1dHNcbiAgICogb24gdGhpcyBtb3VudCBhdCBidWlsZCB0aW1lLCBsYW5kZWQgYnkgdGhlIHNhbWUgYGFwcGx5VGFnc2AgZXZlcnkgb3RoZXJcbiAgICogYG9wdGlvbnMudGFnc2Agc2l0ZSB1c2VzLCB3aXRoIHRoZSBzYW1lIHJlZnVzYWxzIChlbXB0eSwgbm9uLXN0cmluZywgdGhlXG4gICAqIHJlc2VydmVkIGB+YCBtYXJrZXIsIGEgZHVwbGljYXRlLCBhIHNlY29uZCBkZWNsYXJhdGlvbikuXG4gICAqXG4gICAqIEEgbW91bnQgaXMgYSBzdGFnZSB0aGF0IGNvbW1pdHM6IGl0cyBmaXJzdCBidW5kbGUgaW4gdGhlIFBBUkVOVCBsb2cgaXMgYVxuICAgKiBzdG9wIGluIGBjb21taXRTdG9wc2AsIHNvIGB0YWdTdG9wc2Aga2VlcHMgaXQgbGlrZSBhbnkgdGFnZ2VkIHN0YWdlIGFuZFxuICAgKiBjYXJyaWVzIHRoZXNlIG5hbWVzIGFzIGBTdG9wLm1ldGFgLiBTdGFtcGVkIG9uIHRoYXQgZmlyc3QgYnVuZGxlIG9ubHlcbiAgICogKHRoZSBtb3VudCdzIGV4aXQgYnVuZGxlIGNhcnJpZXMgbm9uZSDigJQgdGhlIG9uY2UtcGVyLWV4ZWN1dGlvbiBsYXcpLlxuICAgKiBUaGUgc3ViZmxvdydzIE9XTiBsb2cgaXMgdW50b3VjaGVkOiBpdHMgaW5uZXIgc3RhZ2VzIGRlY2xhcmUgdGhlaXIgb3duXG4gICAqIHRhZ3MsIGFuZCBgZHJpbGwobW91bnQpYCByZWFkcyB0aG9zZSBvZmYgdGhlIGlubmVyIGxvZy5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgT05MWSB0YWcgc2l0ZSBmb3IgYSBmb3JrLWNoaWxkIG1vdW50IChgYWRkU3ViRmxvd0NoYXJ0YCkgb3JcbiAgICogYSBicmFuY2ggbW91bnQgKGBhZGRTdWJGbG93Q2hhcnRCcmFuY2hgKSDigJQgYWZ0ZXIgdGhvc2UgdGhlIGN1cnNvciBzdGlsbFxuICAgKiBwb2ludHMgYXQgdGhlIHBhcmVudCwgc28gYC50YWcoKWAgcmVmdXNlcyByYXRoZXIgdGhhbiBtaXMtYXR0cmlidXRlLiBBXG4gICAqIGxpbmVhciBtb3VudCAoYGFkZFN1YkZsb3dDaGFydE5leHRgKSBtb3ZlcyB0aGUgY3Vyc29yLCBzbyBgLnRhZygpYCB3b3Jrc1xuICAgKiB0aGVyZSB0b287IGRlY2xhcmUgaW4gb25lIHBsYWNlLCBub3QgYm90aC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAuYWRkU2VsZWN0b3JGdW5jdGlvbignU2xvdHMnLCBwaWNrU2xvdHMsICdzbG90cycpXG4gICAqICAgLmFkZFN1YkZsb3dDaGFydEJyYW5jaCgnbWVtb3J5JywgbWVtb3J5Q2hhcnQsICdNZW1vcnknLCB7IHRhZ3M6IFsnc2xvdDptZW1vcnknXSB9KVxuICAgKiAgIC5hZGRTdWJGbG93Q2hhcnRCcmFuY2goJ3Rvb2xzJywgdG9vbHNDaGFydCwgJ1Rvb2xzJywgeyB0YWdzOiBbJ3Nsb3Q6dG9vbHMnXSB9KVxuICAgKiAuZW5kKClcbiAgICogYGBgXG4gICAqL1xuICB0YWdzPzogcmVhZG9ubHkgc3RyaW5nW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3ViZmxvd1Jlc3VsdCB7XG4gIHN1YmZsb3dJZDogc3RyaW5nO1xuICBzdWJmbG93TmFtZTogc3RyaW5nO1xuICB0cmVlQ29udGV4dDoge1xuICAgIC8qKlxuICAgICAqIFRoZSBzdWJmbG93J3MgZmluYWwgc3RhdGUuIFRoZSB0cmF2ZXJzZXIncyByZWNvcmQgaG9sZHMgdGhlIExJVkUgaGVhcFxuICAgICAqIOKAlCB3aGF0IGEgcGxhaW4gYGdldFNuYXBzaG90KClgIGFuZCB0aGUgY2hlY2twb2ludCBzZWUuIFVuZGVyXG4gICAgICogYGdldFNuYXBzaG90KHsgcmVkYWN0OiB0cnVlIH0pYCB0aGUgZXhlY3V0b3Igc2VydmVzIHRoZSBzdWJmbG93J3Mgb3duXG4gICAgICogcmVkYWN0ZWQgbWlycm9yIGhlcmUgaW5zdGVhZCAoOS4yMC4wOyBgaGFuZGxlcnMvc2VydmVkU3ViZmxvd1Jlc3VsdHNgKSxcbiAgICAgKiB3aGljaCBpcyBleGFjdGx5IHdoYXQgYHN0YXRlQXRgIGZvbGRzIGBoaXN0b3J5YCB0by5cbiAgICAgKi9cbiAgICBnbG9iYWxDb250ZXh0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBzdGFnZUNvbnRleHRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBoaXN0b3J5OiB1bmtub3duW107XG4gICAgLyoqIElkZW50aXR5IG9mIHRoZSBsb2NhbCBoaXN0b3J5LCBub3QgaXRzIHBhcmVudCdzIGxvZy4gKi9cbiAgICByZWFkb25seSBsb2dBZGRyZXNzPzogTG9nQWRkcmVzcztcbiAgICAvKipcbiAgICAgKiBUaGUgc3ViZmxvdydzIE9XTiBmb2xkIGJhc2Ug4oCUIHRoZSBzdGF0ZSBpdHMgaXNvbGF0ZWQgcnVudGltZSBzdGFydGVkXG4gICAgICogZnJvbSwgYmVmb3JlIGl0cyBmaXJzdCBjb21taXQuIFRoZSBzaWJsaW5nIG9mXG4gICAgICogYFJ1bnRpbWVTbmFwc2hvdC5pbml0aWFsU3RhdGVgLCBjYXJyaWVkIGhlcmUgc28gYSBzdWJmbG93J3MgYGhpc3RvcnlgXG4gICAgICogY2FuIGJlIGZvbGRlZCBvZmZsaW5lIGV4YWN0bHkgbGlrZSB0aGUgcnVuJ3MgbG9nIChgc3RhdGVBdGAsXG4gICAgICogYHRpbWVUcmF2ZWwoLi4uKS5kcmlsbChtb3VudClgKS4gRnJvemVuIGFuZCBkZXRhY2hlZC5cbiAgICAgKlxuICAgICAqIE5vcm1hbGx5IGB7fWA6IGEgc3ViZmxvdydzIGBpbnB1dE1hcHBlcmAgc2VlZCBpcyBpdHNlbGYgdGhlIGZpcnN0XG4gICAgICogQ09NTUlUIGluIGBoaXN0b3J5YCAodGhlIHJvb3QgY29udGV4dCBjb21taXRzIGl0KSwgbm90IGEgcHJlLXJ1biBiYXNlLlxuICAgICAqL1xuICAgIGluaXRpYWxTdGF0ZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9O1xuICBwYXJlbnRTdGFnZUlkOiBzdHJpbmc7XG4gIHBpcGVsaW5lU3RydWN0dXJlPzogdW5rbm93bjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTdWJmbG93IFRyYXZlcnNlciBGYWN0b3J5XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBTdWJmbG93VHJhdmVyc2VyRmFjdG9yeSDigJQgQ3JlYXRlcyBhIEZsb3djaGFydFRyYXZlcnNlciBmb3Igc3ViZmxvdyBleGVjdXRpb24uXG4gKlxuICogSW5qZWN0ZWQgaW50byBTdWJmbG93RXhlY3V0b3IgdG8gYnJlYWsgdGhlIGNpcmN1bGFyIGRlcGVuZGVuY3k6XG4gKiBGbG93Y2hhcnRUcmF2ZXJzZXIg4oaSIFN1YmZsb3dFeGVjdXRvciDihpIgRmxvd2NoYXJ0VHJhdmVyc2VyLlxuICpcbiAqIFRoZSBmYWN0b3J5IGNhcHR1cmVzIHBhcmVudCB0cmF2ZXJzZXIgY29uZmlnIChzdGFnZU1hcCwgc2NvcGVGYWN0b3J5LCBuYXJyYXRpdmUsIGV0Yy4pXG4gKiBpbiBhIGNsb3N1cmUuIFN1YmZsb3dFeGVjdXRvciBjYWxscyBpdCB3aXRoIHN1YmZsb3ctc3BlY2lmaWMgb3ZlcnJpZGVzIChyb290LCBydW50aW1lLCBpbnB1dCkuXG4gKiBUaGUgcmV0dXJuZWQgdHJhdmVyc2VyIHVzZXMgdGhlIFNBTUUgNy1waGFzZSBhbGdvcml0aG0gYXMgdGhlIHRvcC1sZXZlbCB0cmF2ZXJzZXIsXG4gKiBzbyBkZWNpZGVycywgc2VsZWN0b3JzLCBsb29wcywgbGF6eSBzdWJmbG93cywgYW5kIGFib3J0IHNpZ25hbHMgYWxsIHdvcmsgaW5zaWRlIHN1YmZsb3dzLlxuICovXG5leHBvcnQgdHlwZSBTdWJmbG93VHJhdmVyc2VyRmFjdG9yeTxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+ID0gKG9wdGlvbnM6IHtcbiAgLyoqIFJvb3Qgbm9kZSBvZiB0aGUgc3ViZmxvdyAod2l0aCBpc1N1YmZsb3dSb290IHN0cmlwcGVkKSDigJQgdGhlIGdyYXBoIGV2ZXJ5IGlkIGluc2lkZSB0aGUgc3ViZmxvdyByZXNvbHZlcyBhZ2FpbnN0LiAqL1xuICByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgLyoqXG4gICAqIFdoZXJlIHRoZSBzdWJmbG93J3MgdHJhdmVyc2FsIHN0YXJ0cyB3aGVuIG5vdCBhdCBgcm9vdGAg4oCUIGEgcmVzdW1lJ3NcbiAgICogb25lLXNob3QgcmUtZW50cnkgKGBSZXN1bWVIb3AuZW50cnlgKTogdGhlIG5leHQgbW91bnQgb24gdGhlIHBhdXNlIHBhdGgsXG4gICAqIG9yIHRoZSBwYXVzZWQgc3RhZ2UncyBzdGFuZC1pbiwgZWFjaCB3aXRoIGl0cyBkaXNwYXRjaGVyJ3MgY29udGludWF0aW9uXG4gICAqIGF0dGFjaGVkLiBWaXNpdGVkIG9uY2UsIGZpcnN0OyBuZXZlciByZXNvbHZhYmxlIGJ5IGlkLlxuICAgKi9cbiAgZW50cnk/OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgLyoqXG4gICAqIFBhcmFsbGVsIHNpYmxpbmdzJyBwYXVzZXMgd2FpdGluZyBpbiB0aGlzIHN1YmZsb3cgKGBSZXN1bWVIb3AucGVuZGluZ1BhdXNlc2AsXG4gICAqIDkuMjguMCkg4oCUIHJhaXNlZCBpbiBvcmRlciBvbmNlIGBlbnRyeWAncyBjaGFpbiBlbmRzLlxuICAgKi9cbiAgcGVuZGluZ1BhdXNlcz86IHJlYWRvbmx5IFF1ZXVlZFBhdXNlW107XG4gIC8qKiBJc29sYXRlZCBleGVjdXRpb24gcnVudGltZSBmb3IgdGhlIHN1YmZsb3cuICovXG4gIGV4ZWN1dGlvblJ1bnRpbWU6IElFeGVjdXRpb25SdW50aW1lO1xuICAvKiogTWFwcGVkIGlucHV0IGZyb20gcGFyZW50IHNjb3BlIChiZWNvbWVzIHJlYWRPbmx5Q29udGV4dCBmb3Igc3RhZ2VzKS4gKi9cbiAgcmVhZE9ubHlDb250ZXh0PzogdW5rbm93bjtcbiAgLyoqIFN1YmZsb3cgaWRlbnRpZmllciDigJQgdXNlZCBhcyBicmFuY2hQYXRoIGZvciBuYXJyYXRpdmUgY29udGV4dC4gKi9cbiAgc3ViZmxvd0lkPzogc3RyaW5nO1xuICAvKipcbiAgICogUkZDLTAwMyBEMTogcnVudGltZVN0YWdlSWQgb2YgdGhlIHN1YmZsb3cgTU9VTlQgc3RhZ2UgaW4gdGhlIHBhcmVudFxuICAgKiB0cmF2ZXJzZXIuIEJlY29tZXMgdGhlIGBwYXJlbnRSdW50aW1lU3RhZ2VJZGAgZmFsbGJhY2sgZm9yIHRoZSBzdWJmbG93J3NcbiAgICogcm9vdCBzdGFnZSBzbyBydW50aW1lIGFuY2VzdG9yIGNoYWlucyBjcm9zcyBzdWJmbG93IGJvdW5kYXJpZXMuXG4gICAqL1xuICBwYXJlbnRNb3VudFJ1bnRpbWVTdGFnZUlkPzogc3RyaW5nO1xufSkgPT4gU3ViZmxvd1RyYXZlcnNlckhhbmRsZTxUT3V0LCBUU2NvcGU+O1xuXG4vKipcbiAqIEhhbmRsZSByZXR1cm5lZCBieSBTdWJmbG93VHJhdmVyc2VyRmFjdG9yeS5cbiAqIFByb3ZpZGVzIGV4ZWN1dGUoKSArIGFjY2VzcyB0byBuZXN0ZWQgc3ViZmxvdyByZXN1bHRzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN1YmZsb3dUcmF2ZXJzZXJIYW5kbGU8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiB7XG4gIC8qKiBFeGVjdXRlIHRoZSBzdWJmbG93J3MgZ3JhcGggdXNpbmcgdGhlIGZ1bGwgNy1waGFzZSB0cmF2ZXJzYWwgYWxnb3JpdGhtLiAqL1xuICBleGVjdXRlKCk6IFByb21pc2U8VHJhdmVyc2FsUmVzdWx0PjtcbiAgLyoqIENvbGxlY3QgbmVzdGVkIHN1YmZsb3cgcmVzdWx0cyAoZnJvbSBzdWJmbG93cyBtb3VudGVkIGluc2lkZSB0aGlzIHN1YmZsb3cpLiAqL1xuICBnZXRTdWJmbG93UmVzdWx0cygpOiBNYXA8c3RyaW5nLCBTdWJmbG93UmVzdWx0PjtcbiAgLyoqXG4gICAqIEZpbmFsIGJyZWFrIHN0YXRlIG9mIHRoZSBzdWJmbG93IGFmdGVyIGBleGVjdXRlKClgIHJldHVybnMuXG4gICAqXG4gICAqICAgLSBgc2hvdWxkQnJlYWs6IHRydWVgICDihpIgYSBzdGFnZSBpbnNpZGUgdGhlIHN1YmZsb3cgY2FsbGVkXG4gICAqICAgICBgc2NvcGUuJGJyZWFrKHJlYXNvbilgLCBzdG9wcGluZyB0aGUgc3ViZmxvdydzIG93biB0cmF2ZXJzYWwuXG4gICAqICAgLSBgcmVhc29uYCAgICAgICAgICAgICDihpIgdGhlIG9wdGlvbmFsIHN0cmluZyBwYXNzZWQgdG8gYCRicmVha2AuXG4gICAqXG4gICAqIFVzZWQgYnkgYFN1YmZsb3dFeGVjdXRvcmAgdG8gaW1wbGVtZW50IGBTdWJmbG93TW91bnRPcHRpb25zLnByb3BhZ2F0ZUJyZWFrYDpcbiAgICogaWYgdGhlIG1vdW50IG9wdHMgaW4gQU5EIHRoZSBzdWJmbG93IGJyb2tlLCB0aGUgcGFyZW50J3MgYnJlYWsgZmxhZyBpc1xuICAgKiBmb3J3YXJkZWQuXG4gICAqL1xuICBnZXRCcmVha1N0YXRlKCk6IHsgc2hvdWxkQnJlYWs6IGJvb2xlYW47IHJlYXNvbj86IHN0cmluZyB9O1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEV4ZWN1dGlvbiBSdW50aW1lIEludGVyZmFjZVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogSUV4ZWN1dGlvblJ1bnRpbWUg4oCUIEludGVyZmFjZSBmb3IgdGhlIHJ1bnRpbWUgZW52aXJvbm1lbnQuXG4gKlxuICogRGVmaW5lcyB0aGUgY29udHJhY3QgdGhhdCBlbmdpbmUgaGFuZGxlcnMgbmVlZCBmcm9tIHRoZSBydW5uZXIgbGF5ZXIsXG4gKiBhdm9pZGluZyBjaXJjdWxhciBpbXBvcnRzIGJldHdlZW4gZW5naW5lLyBhbmQgcnVubmVyLy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRXhlY3V0aW9uUnVudGltZSB7XG4gIGdsb2JhbFN0b3JlOiB7IGdldFN0YXRlKCk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH07XG4gIC8qKlxuICAgKiBUaGUgcmVkYWN0ZWQgbWlycm9yIG9mIGBnbG9iYWxTdG9yZWAg4oCUIHByZXNlbnQgd2hlbiB0aGUgcnVuJ3MgcG9saWN5XG4gICAqIGtlZXBzIG9uZSAoYFJ1blBvbGljeS5taXJyb3JgOiBhIHJ1biB3aXRoIGEgcmVkYWN0aW9uIHBvbGljeSksIGVsc2UgYWJzZW50LlxuICAgKiBgU3ViZmxvd0V4ZWN1dG9yYCByZWFkcyBpdCB0byBzZXJ2ZSBhIHN1YmZsb3cncyBzdGF0ZSAoOS4yMC4wKS5cbiAgICovXG4gIHJlZGFjdGVkU3RvcmU/OiBTaGFyZWRNZW1vcnk7XG4gIHJvb3RTdGFnZUNvbnRleHQ6IFN0YWdlQ29udGV4dDtcbiAgZXhlY3V0aW9uSGlzdG9yeTogeyBsaXN0KCk6IHVua25vd25bXSB9O1xuICAvKipcbiAgICogQSBmcmVzaCByb290IGZyYW1lIG9uIHRoaXMgcnVudGltZSDigJQgaXRzIHN0b3JlLCBpdHMgbG9nLCB0aGUgcnVuJ3MgcG9saWN5XG4gICAqIGFuZCBtaXJyb3IgKGBFeGVjdXRpb25SdW50aW1lLm5ld1Jvb3RgKS4gYFN1YmZsb3dFeGVjdXRvcmAgc3dhcHMgYVxuICAgKiBzdWJmbG93J3Mgc2VlZCBmcmFtZSBmb3IgdGhlIGZyYW1lIGl0cyBmaXJzdCBzdGFnZSBydW5zIG9uIHdpdGggaXQuXG4gICAqL1xuICBuZXdSb290KG5hbWU6IHN0cmluZywgaWQ6IHN0cmluZyk6IFN0YWdlQ29udGV4dDtcbiAgZ2V0U25hcHNob3Qob3B0aW9ucz86IHsgcmVkYWN0PzogYm9vbGVhbiB9KToge1xuICAgIHNoYXJlZFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBleGVjdXRpb25UcmVlOiB1bmtub3duO1xuICAgIC8qKiBUaGUgY29tbWl0IGxvZydzIGZvbGQgYmFzZSDigJQgc2VlIGBSdW50aW1lU25hcHNob3QuaW5pdGlhbFN0YXRlYC4gKi9cbiAgICBpbml0aWFsU3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb21taXRMb2c6IHVua25vd25bXTtcbiAgICByZWFkb25seSBsb2dBZGRyZXNzPzogTG9nQWRkcmVzcztcbiAgICAvKiogRHVhbC1rZXllZCBieSBzdWJmbG93IHBhdGggKGxhc3QgaXRlcmF0aW9uKSBBTkQgcGVyLWV4ZWN1dGlvbiBtb3VudCBydW50aW1lU3RhZ2VJZFxuICAgICAqICAoZWFjaCBpdGVyYXRpb24pIOKAlCBzZWUgUnVudGltZVNuYXBzaG90LnN1YmZsb3dSZXN1bHRzIC8gc3ViZmxvdy1jb21taXQtdmlzaWJpbGl0eS4gKi9cbiAgICBzdWJmbG93UmVzdWx0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHJlY29yZGVycz86IEFycmF5PHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nOyBkYXRhOiB1bmtub3duIH0+O1xuICB9O1xuICBzZXRSb290T2JqZWN0KHBhdGg6IHN0cmluZ1tdLCBrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkO1xuICBnZXRQaXBlbGluZXMoKTogc3RyaW5nW107XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRXhlY3V0aW9uIEVudmlyb25tZW50IOKAlCByZWFkLW9ubHksIHByb3BhZ2F0ZXMgdGhyb3VnaCBuZXN0ZWQgZXhlY3V0b3JzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBFeGVjdXRpb25FbnYg4oCUIGluZnJhc3RydWN0dXJlIHZhbHVlcyB0aGF0IHByb3BhZ2F0ZSB0aHJvdWdoIG5lc3RlZCBleGVjdXRvcnMuXG4gKlxuICogTGlrZSBgcHJvY2Vzcy5lbnZgIGZvciBmbG93Y2hhcnRzOiByZWFkLW9ubHksIGluaGVyaXRlZCBieSBjaGlsZCBleGVjdXRvcnMsXG4gKiBpbmZyYXN0cnVjdHVyZS1vbmx5IChub3QgYnVzaW5lc3MgbG9naWMpLlxuICpcbiAqIExpdG11cyB0ZXN0OiBDcmVhdGVkIGV4dGVybmFsIHRvIHRoZSBmbG93Y2hhcnQgKyBwYXNzZWQgaW4gZm9yIGV4ZWN1dGlvbiA9IGVudi5cbiAqIEJ1c2luZXNzIGNvbmZpZyBmb3IgYSBzcGVjaWZpYyBmbG93Y2hhcnQgPSBhcmdzIChnZXRBcmdzKCkpLlxuICpcbiAqIEludGVudGlvbmFsbHkgYSBjbG9zZWQgdHlwZSDigJQgbm90IGV4dGVuc2libGUgdG8gcHJldmVudCBjb3VwbGluZyBiZXR3ZWVuXG4gKiBwYXJlbnQgYW5kIGNoaWxkIGZsb3djaGFydHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXhlY3V0aW9uRW52IHtcbiAgLyoqIEFib3J0U2lnbmFsIGZvciBjb29wZXJhdGl2ZSBjYW5jZWxsYXRpb24gYWNyb3NzIG5lc3RlZCBleGVjdXRvcnMuICovXG4gIHJlYWRvbmx5IHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICAvKiogVGltZW91dCBidWRnZXQgaW4gbWlsbGlzZWNvbmRzLiAqL1xuICByZWFkb25seSB0aW1lb3V0TXM/OiBudW1iZXI7XG4gIC8qKiBUcmFjZSBpZGVudGlmaWVyIGZvciBkaXN0cmlidXRlZCB0cmFjaW5nIC8gb2JzZXJ2YWJpbGl0eS4gKi9cbiAgcmVhZG9ubHkgdHJhY2VJZD86IHN0cmluZztcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBIYW5kbGVyIERlcGVuZGVuY2llcyAoREkgYmFnKSDigJQgd2FzIFBpcGVsaW5lQ29udGV4dFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogSGFuZGxlckRlcHMg4oCUIERlcGVuZGVuY3kgaW5qZWN0aW9uIGJhZyBwYXNzZWQgdG8gYWxsIGhhbmRsZXIgbW9kdWxlcy5cbiAqXG4gKiBQcm92aWRlcyBzaGFyZWQgc3RhdGUgKHN0YWdlTWFwLCBydW50aW1lLCBzY29wZUZhY3RvcnksIGV0Yy4pIHdpdGhvdXRcbiAqIGhhbmRsZXJzIG5lZWRpbmcgdG8gaW1wb3J0IHRoZSB0cmF2ZXJzZXIgZGlyZWN0bHkuIEF2b2lkcyBjaXJjdWxhciBkZXBzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhhbmRsZXJEZXBzPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICBzdGFnZU1hcDogTWFwPHN0cmluZywgU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+PjtcbiAgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT47XG4gIGV4ZWN1dGlvblJ1bnRpbWU6IElFeGVjdXRpb25SdW50aW1lO1xuICBzY29wZUZhY3Rvcnk6IFNjb3BlRmFjdG9yeTxUU2NvcGU+O1xuICBzdWJmbG93cz86IFJlY29yZDxzdHJpbmcsIHsgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gfT47XG4gIHRocm90dGxpbmdFcnJvckNoZWNrZXI/OiAoZXJyb3I6IHVua25vd24pID0+IGJvb2xlYW47XG4gIHN0cmVhbUhhbmRsZXJzPzogU3RyZWFtSGFuZGxlcnM7XG4gIHNjb3BlUHJvdGVjdGlvbk1vZGU6IFNjb3BlUHJvdGVjdGlvbk1vZGU7XG4gIHJlYWRPbmx5Q29udGV4dD86IHVua25vd247XG4gIC8qKiBFeGVjdXRpb24gZW52aXJvbm1lbnQg4oCUIHByb3BhZ2F0ZXMgdG8gc3ViZmxvd3MgYXV0b21hdGljYWxseS4gKi9cbiAgZXhlY3V0aW9uRW52PzogRXhlY3V0aW9uRW52O1xuICBuYXJyYXRpdmVHZW5lcmF0b3I6IElDb250cm9sRmxvd05hcnJhdGl2ZTtcbiAgbG9nZ2VyOiBJTG9nZ2VyO1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgLyoqXG4gICAqIFRoZSByZXN1bWUncyBvbmUtc2hvdCByZS1lbnRyeSAoTTIpIOKAlCBzaGFyZWQgYnkgcmVmZXJlbmNlIHdpdGggZXZlcnlcbiAgICogbmVzdGVkIHRyYXZlcnNlciwgbGlrZSB0aGUgZXhlY3V0aW9uIGNvdW50ZXIuIGBTdWJmbG93RXhlY3V0b3JgIGFza3MgaXRcbiAgICogYXQgZWFjaCBzdWJmbG93IGVudHJ5OiB0aGUgRklSU1QgZW50cnkgaW50byBhIHN1YmZsb3cgb24gdGhlIHBhdXNlIHBhdGhcbiAgICogdGFrZXMgdGhhdCBzdWJmbG93J3MgY2FwdHVyZWQgc3RhdGUgKHNlZWRpbmcgdGhlIG5lc3RlZCBydW50aW1lIGluIHBsYWNlXG4gICAqIG9mIHRoZSBpbnB1dE1hcHBlcidzIHZhbHVlcyDigJQgdGhlIG1hcHBlciBzdGlsbCBydW5zIGZvciB0aGUgcmVhZC1vbmx5XG4gICAqIGFyZ3MpLCBpdHMgZW50cnkgcG9pbnQgYW5kIGFueSBzaWJsaW5nIHBhdXNlcyB3YWl0aW5nIHRoZXJlOyBldmVyeSBsYXRlclxuICAgKiBlbnRyeSBpcyBhbiBvcmRpbmFyeSBvbmUuIFNlZSBgUmVzdW1lRW50cnlgLiBVbmRlZmluZWQgb24gbm9ybWFsIGBydW4oKWBcbiAgICogcGF0aHMuXG4gICAqL1xuICByZXN1bWU/OiBSZXN1bWVFbnRyeTxUT3V0LCBUU2NvcGU+O1xufVxuXG4vKiogT3B0aW9ucyBmb3IgRmxvd0NoYXJ0RXhlY3V0b3IucnVuKCkuICovXG5leHBvcnQgaW50ZXJmYWNlIFJ1bk9wdGlvbnMge1xuICAvKiogQWJvcnRTaWduYWwgZm9yIGNvb3BlcmF0aXZlIGNhbmNlbGxhdGlvbi4gKi9cbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIC8qKiBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcy4gQ3JlYXRlcyBhbiBpbnRlcm5hbCBBYm9ydENvbnRyb2xsZXIuICovXG4gIHRpbWVvdXRNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFJ1bnRpbWUgaW5wdXQgZGF0YSBmb3IgdGhlIHBpcGVsaW5lLlxuICAgKiBCZWNvbWVzIHRoZSByZWFkT25seUNvbnRleHQgYWNjZXNzaWJsZSB2aWEgYHNjb3BlLmdldEFyZ3MoKWAuXG4gICAqIFN0YWdlcyBjYW5ub3Qgb3ZlcndyaXRlIHRoZXNlIGtleXMgd2l0aCBgc2V0VmFsdWUoKWAuXG4gICAqL1xuICBpbnB1dD86IHVua25vd247XG4gIC8qKlxuICAgKiBFeGVjdXRpb24gZW52aXJvbm1lbnQg4oCUIHJlYWQtb25seSBpbmZyYXN0cnVjdHVyZSB2YWx1ZXMgdGhhdCBwcm9wYWdhdGVcbiAgICogdGhyb3VnaCBuZXN0ZWQgZXhlY3V0b3JzIChsaWtlIGBwcm9jZXNzLmVudmAgZm9yIGZsb3djaGFydHMpLlxuICAgKiBBY2Nlc3NpYmxlIHZpYSBgc2NvcGUuZ2V0RW52KClgLiBJbmhlcml0ZWQgYnkgc3ViZmxvd3MgYXV0b21hdGljYWxseS5cbiAgICovXG4gIGVudj86IEV4ZWN1dGlvbkVudjtcbiAgLyoqXG4gICAqIE92ZXJyaWRlIHRoZSBtYXhpbXVtIG5lc3RlZCBgZXhlY3V0ZU5vZGVgIGRlcHRoIGZvciB0aGlzIHJ1bi5cbiAgICogRGVmYXVsdHMgdG8gYEZsb3djaGFydFRyYXZlcnNlci5NQVhfRVhFQ1VURV9ERVBUSGAgKDUwMCkuXG4gICAqXG4gICAqIERlcHRoIGNvdW50cyBUUkVFIG5lc3Rpbmcgb25seSDigJQgZm9yayBjaGlsZHJlbiwgZGVjaWRlci9zZWxlY3RvciBicmFuY2hcbiAgICogZGlzcGF0Y2gsIHJlY3Vyc2l2ZSBjb21wb3NpdGlvbi4gTGluZWFyIGNoYWlucyBhbmQgbG9vcCBpdGVyYXRpb25zIHJ1blxuICAgKiBvbiBhIGZsYXQgdHJhbXBvbGluZSBhbmQgbmV2ZXIgY29uc3VtZSBkZXB0aCwgc28gdGhpcyByYXJlbHkgbmVlZHNcbiAgICogcmFpc2luZy4gTXVzdCBiZSA+PSAxLlxuICAgKi9cbiAgbWF4RGVwdGg/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgbWF4aW11bSBsb29wIGl0ZXJhdGlvbnMgcGVyIG5vZGUgZm9yIHRoaXMgcnVuICh0aGVcbiAgICogYENvbnRpbnVhdGlvblJlc29sdmVyYCBpbmZpbml0ZS1sb29wIGd1YXJkKS4gRGVmYXVsdHMgdG8gMTAwMC5cbiAgICogVGhpcyBpcyB0aGUgYmluZGluZyBjb25zdHJhaW50IGZvciBsb29wLWhlYXZ5IHBpcGVsaW5lcyDigJQgcmFpc2UgaXQgZm9yXG4gICAqIGxlZ2l0aW1hdGVseSBsb25nIGxvb3BzIChgbG9vcFRvYCBjaGFpbnMgcnVuIHdpdGggYSBmbGF0IHN0YWNrLCBzbyBoaWdoXG4gICAqIHZhbHVlcyBhcmUgc2FmZTsgbWVtb3J5IGZvciBzdGF0ZS9uYXJyYXRpdmUgc3RpbGwgZ3Jvd3MgcGVyIGl0ZXJhdGlvbikuXG4gICAqIEFsc28gYm91bmRzIHRoZSBydW4tdG90YWwgY2hhaW4gb2YgZnVuY3Rpb24tYmVhcmluZyBkeW5hbWljIGBuZXh0YFxuICAgKiBjb250aW51YXRpb25zIChmcmVzaCBub2RlcyByZXR1cm5lZCBmcm9tIHN0YWdlcykg4oCUIGEgcnVuYXdheSBkeW5hbWljXG4gICAqIGNoYWluIGVycm9ycyBpbnN0ZWFkIG9mIHJ1bm5pbmcgZm9yZXZlci5cbiAgICogUHJvcGFnYXRlcyB0byBzdWJmbG93cy4gTXVzdCBiZSA+PSAxLlxuICAgKi9cbiAgbWF4SXRlcmF0aW9ucz86IG51bWJlcjtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBGbG93IENvbnRyb2wgTmFycmF0aXZlIOKAlCBjYW5vbmljYWwgZGVmaW5pdGlvbnMgbGl2ZSBpbiBtZW1vcnkvdHlwZXMudHNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSB7IEZsb3dDb250cm9sVHlwZSwgRmxvd01lc3NhZ2UgfTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSdW50aW1lIFN0cnVjdHVyZSBNZXRhZGF0YSAodXNlZCBieSBSdW50aW1lU3RydWN0dXJlTWFuYWdlcilcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgaW50ZXJmYWNlIFJ1bnRpbWVTdHJ1Y3R1cmVNZXRhZGF0YSB7XG4gIHR5cGU6ICdzdGFnZScgfCAnZGVjaWRlcicgfCAnc2VsZWN0b3InIHwgJ2ZvcmsnIHwgJ3N0cmVhbWluZycgfCAnc3ViZmxvdycgfCAnbG9vcCc7XG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgaXNTdWJmbG93Um9vdD86IGJvb2xlYW47XG4gIHN1YmZsb3dOYW1lPzogc3RyaW5nO1xuICAvKiogVHJ1ZSBmb3IgYW4gYGFkZFBhcmFsbGVsRm9yRWFjaGAgZmFuLW91dCAodHlwZSBzdGF5cyBgJ2ZvcmsnYCkuICovXG4gIGlzRHluYW1pY1BhcmFsbGVsPzogYm9vbGVhbjtcbiAgaXNQYXJhbGxlbENoaWxkPzogYm9vbGVhbjtcbiAgcGFyYWxsZWxHcm91cElkPzogc3RyaW5nO1xuICBsb29wVGFyZ2V0Pzogc3RyaW5nO1xuICBpc0R5bmFtaWM/OiBib29sZWFuO1xuICBpc0xvb3BSZWZlcmVuY2U/OiBib29sZWFuO1xuICBzdHJlYW1JZD86IHN0cmluZztcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBOb2RlIFJlc3VsdFxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCB0eXBlIE5vZGVSZXN1bHRUeXBlID0ge1xuICBpZDogc3RyaW5nO1xuICByZXN1bHQ6IHVua25vd247XG4gIGlzRXJyb3I/OiBib29sZWFuO1xufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFeGVjdXRpb24gUmVzcG9uc2Vcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBCcmFuY2hSZXN1bHQgPSB7XG4gIHJlc3VsdDogc3RyaW5nIHwgRXJyb3I7XG4gIGlzRXJyb3I6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBCcmFuY2hSZXN1bHRzID0geyBbYnJhbmNoSWQ6IHN0cmluZ106IEJyYW5jaFJlc3VsdCB9O1xuZXhwb3J0IHR5cGUgVHJhdmVyc2FsUmVzdWx0ID0gQnJhbmNoUmVzdWx0cyB8IHN0cmluZyB8IEVycm9yO1xuXG4vKiogUmV0dXJuZWQgYnkgcnVuKCkvcmVzdW1lKCkgd2hlbiBleGVjdXRpb24gcGF1c2VzLiAqL1xuZXhwb3J0IHR5cGUgUGF1c2VkUmVzdWx0ID0ge1xuICByZWFkb25seSBwYXVzZWQ6IHRydWU7XG4gIHJlYWRvbmx5IGNoZWNrcG9pbnQ6IGltcG9ydCgnLi4vcGF1c2UvdHlwZXMuanMnKS5GbG93Y2hhcnRDaGVja3BvaW50O1xufTtcblxuLyoqIEZ1bGwgcmV0dXJuIHR5cGUgb2YgRmxvd0NoYXJ0RXhlY3V0b3IucnVuKCkgYW5kIHJlc3VtZSgpLiAqL1xuZXhwb3J0IHR5cGUgRXhlY3V0b3JSZXN1bHQgPSBUcmF2ZXJzYWxSZXN1bHQgfCBQYXVzZWRSZXN1bHQ7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gU2VyaWFsaXplZCBQaXBlbGluZSBTdHJ1Y3R1cmUgKGZvciB2aXN1YWxpemF0aW9uKVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VyaWFsaXplZFBpcGVsaW5lTm9kZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgaWQ6IHN0cmluZztcbiAgdHlwZT86XG4gICAgfCAnc3RhZ2UnXG4gICAgfCAnZGVjaWRlcidcbiAgICB8ICdzZWxlY3RvcidcbiAgICB8ICdmb3JrJ1xuICAgIHwgJ3N0cmVhbWluZydcbiAgICB8ICdzdWJmbG93J1xuICAgIHwgJ2xvb3AnXG4gICAgfCAndXNlcidcbiAgICB8ICd0b29sJ1xuICAgIHwgJ2Z1bmN0aW9uJ1xuICAgIHwgJ3NlcXVlbmNlJztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogU2VyaWFsaXplZFBpcGVsaW5lTm9kZVtdO1xuICBuZXh0PzogU2VyaWFsaXplZFBpcGVsaW5lTm9kZTtcbiAgYnJhbmNoZXM/OiBSZWNvcmQ8c3RyaW5nLCBTZXJpYWxpemVkUGlwZWxpbmVOb2RlPjtcbiAgaGFzRGVjaWRlcj86IGJvb2xlYW47XG4gIGhhc1NlbGVjdG9yPzogYm9vbGVhbjtcbiAgaGFzU3VidHJlZT86IGJvb2xlYW47XG4gIGlzU3RyZWFtaW5nPzogYm9vbGVhbjtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIGlzU3ViZmxvd1Jvb3Q/OiBib29sZWFuO1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIHN1YmZsb3dOYW1lPzogc3RyaW5nO1xuICBsb29wVGFyZ2V0Pzogc3RyaW5nO1xuICBpc0xvb3BSZWZlcmVuY2U/OiBib29sZWFuO1xuICBpc1BhcmFsbGVsQ2hpbGQ/OiBib29sZWFuO1xuICBwYXJhbGxlbEdyb3VwSWQ/OiBzdHJpbmc7XG4gIGlzRHluYW1pYz86IGJvb2xlYW47XG4gIC8qKiBXaGVuIHRydWUsIHRoaXMgc3RhZ2UgY2FuIHBhdXNlIGV4ZWN1dGlvbiAoUGF1c2FibGVIYW5kbGVyIHBhdHRlcm4pLiAqL1xuICBpc1BhdXNhYmxlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRydWUgZm9yIGFuIGBhZGRQYXJhbGxlbEZvckVhY2hgIGZhbi1vdXQg4oCUIGJyYW5jaCBDT1VOVCBkZWNpZGVkIGF0IHJ1bnRpbWVcbiAgICogZnJvbSB0aGUgcGF5bG9hZC4gQSBmbGFnLCBub3QgYSB0eXBlOiBgdHlwZWAgc3RheXMgYCdmb3JrJ2Agc28gZXZlcnlcbiAgICogZXhpc3RpbmcgY29uc3VtZXIgcmVuZGVycyBpdCBjb3JyZWN0bHkgKGl0IElTIGEgZmFuLW91dCksIGFuZCBhIGNvbnN1bWVyXG4gICAqIHRoYXQgd2FudHMgdG8gc2F5IFwib25lIGJyYW5jaCBwZXIgaXRlbVwiIGNhbiByZWFkIHRoaXMuXG4gICAqL1xuICBpc0R5bmFtaWNQYXJhbGxlbD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUb3RhbCBhdHRlbXB0cyB0aGlzIHN0YWdlJ3MgZnVuY3Rpb24gbWF5IHJ1biwgZnJvbSBpdHMgZGVjbGFyZWRcbiAgICoge0BsaW5rIFJldHJ5UG9saWN5fS4gUHJlc2VudCBvbmx5IHdoZW4gYSBwb2xpY3kgd2FzIGRlY2xhcmVkLiBUaGUgQ09VTlRcbiAgICogb25seSDigJQgYGJhY2tvZmZNc2AgYW5kIGByZXRyeU9uYCBjYW4gYmUgZnVuY3Rpb25zLCB3aGljaCBhIEpTT04tc2FmZSBzcGVjXG4gICAqIGNhbm5vdCBjYXJyeS5cbiAgICovXG4gIHJldHJ5QXR0ZW1wdHM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBEZWNsYXJlZCB0YWdzICg5LjIxLjApIOKAlCB0aGUgbmFtZXMgdGhlIGF1dGhvciBwdXQgb24gdGhpcyBzdGFnZSBhdCBidWlsZFxuICAgKiB0aW1lLCBjb3BpZWQgYXMtaXMuIEZyZWUgc3RyaW5nczsgZm9vdHByaW50anMgYXNzaWducyB0aGVtIG5vIG1lYW5pbmcuXG4gICAqIEFic2VudCB3aGVuIHRoZSBzdGFnZSBkZWNsYXJlcyBub25lLlxuICAgKi9cbiAgdGFncz86IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIEZsb3dDaGFydCBpcyBkZWZpbmVkIGluIGAuLi9idWlsZGVyL3R5cGVzLnRzYC4gVGhlIGVuZ2luZSBsYXllciBjb25zdW1lcyBpdFxuLy8gdmlhIGltcG9ydCBmcm9tIHRoZXJlLiBBIGR1cGxpY2F0ZSBtaW5pbWFsIGRlZmluaXRpb24gcHJldmlvdXNseSBsaXZlZCBoZXJlXG4vLyBhbmQgY2F1c2VkIFRTIGNvbmZ1c2lvbiBhdCBjb21wb3NpdGlvbiBib3VuZGFyaWVzIChDb21wb3NhYmxlUnVubmVyIHZzXG4vLyBhZGRTdWJGbG93Q2hhcnQgcGFyYW1ldGVyKS4gU2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBub3cgbGl2ZXMgaW4gYnVpbGRlci8uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqIEFsaWFzIGZvciBTZXJpYWxpemVkUGlwZWxpbmVOb2RlIHVzZWQgYXMgZnVsbCBzdHJ1Y3R1cmUgKi9cbmV4cG9ydCB0eXBlIFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSA9IFNlcmlhbGl6ZWRQaXBlbGluZU5vZGUgJiB7XG4gIGJyYW5jaElkcz86IHN0cmluZ1tdO1xuICBzdWJmbG93U3RydWN0dXJlPzogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlO1xuICBpdGVyYXRpb25Db3VudD86IG51bWJlcjtcbn07XG4iXX0=
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2VuZ2luZS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQWlCSCxPQUFPLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQWU5RSxvQ0FBb0M7QUFDcEMsd0RBQXdEO0FBQ3hELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBWTtJQUNwQyxJQUFJLEVBQUUsQ0FBQyxPQUFhLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3ZFLEdBQUcsRUFBRSxDQUFDLE9BQWEsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7SUFDckUsS0FBSyxFQUFFLENBQUMsT0FBYSxFQUFFLEdBQUcsSUFBVyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQztJQUN6RSxLQUFLLEVBQUUsQ0FBQyxPQUFhLEVBQUUsR0FBRyxJQUFXLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO0lBQ3pFLElBQUksRUFBRSxDQUFDLE9BQWEsRUFBRSxHQUFHLElBQVcsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7Q0FDeEUsQ0FBQztBQXVIRiw4RUFBOEU7QUFDOUUsVUFBVTtBQUNWLDhFQUE4RTtBQUU5RTs7R0FFRztBQUNILE1BQU0sQ0FBTixJQUFZLGNBS1g7QUFMRCxXQUFZLGNBQWM7SUFDeEIsd0ZBQXdGO0lBQ3hGLG1DQUFpQixDQUFBO0lBQ2pCLHlFQUF5RTtJQUN6RSxxQ0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBTFcsY0FBYyxLQUFkLGNBQWMsUUFLekIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHR5cGVzLnRzIOKAlCBBbGwgdHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIGVuZ2luZSBsaWJyYXJ5LlxuICpcbiAqIENlbnRyYWxpemVzIHR5cGUgZGVmaW5pdGlvbnMgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLlxuICogRXZlcnkgaGFuZGxlciByZWNlaXZlcyBIYW5kbGVyRGVwcyAodGhlIERJIGJhZykgaW5zdGVhZCBvZiBpbXBvcnRpbmcgdGhlIHRyYXZlcnNlci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IExvZ0FkZHJlc3MsIExvZ091dGNvbWUsIE1ldGEgfSBmcm9tICdmb290dHJhY2UnO1xuaW1wb3J0IHR5cGUgeyBTaGFyZWRNZW1vcnkgfSBmcm9tICdmb290dHJhY2Uvd3JpdGUnO1xuXG5pbXBvcnQgdHlwZSB7IEZsb3dDb250cm9sVHlwZSwgRmxvd01lc3NhZ2UgfSBmcm9tICcuLi9tZW1vcnkvZnJhbWVUeXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0YWdlQ29udGV4dCB9IGZyb20gJy4uL21lbW9yeS9TdGFnZUNvbnRleHQuanMnO1xuaW1wb3J0IHR5cGUgeyBTY29wZVByb3RlY3Rpb25Nb2RlIH0gZnJvbSAnLi4vc2NvcGUvcHJvdGVjdGlvbi90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IERlY2lkZXIsIFNlbGVjdG9yLCBTdGFnZU5vZGUgfSBmcm9tICcuL2dyYXBoL1N0YWdlTm9kZS5qcyc7XG5pbXBvcnQgdHlwZSB7IFF1ZXVlZFBhdXNlLCBSZXN1bWVFbnRyeSB9IGZyb20gJy4vaGFuZGxlcnMvUmVzdW1lRW50cnkuanMnO1xuaW1wb3J0IHR5cGUgeyBJQ29udHJvbEZsb3dOYXJyYXRpdmUgfSBmcm9tICcuL25hcnJhdGl2ZS90eXBlcy5qcyc7XG5cbi8vIFJlLWV4cG9ydCBTdGFnZU5vZGUgdHlwZXMgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQgdHlwZSB7IERlY2lkZXIsIFNlbGVjdG9yLCBTdGFnZU5vZGUgfSBmcm9tICcuL2dyYXBoL1N0YWdlTm9kZS5qcyc7XG5cbi8vIFJlLWV4cG9ydCBwYXVzZSB0eXBlcyBmcm9tIHBhdXNlLyBsaWJyYXJ5XG5leHBvcnQgdHlwZSB7IEZsb3djaGFydENoZWNrcG9pbnQsIFBhdXNhYmxlSGFuZGxlciwgUGF1c2VSZXN1bHQgfSBmcm9tICcuLi9wYXVzZS9pbmRleC5qcyc7XG5leHBvcnQgeyBpc1BhdXNlUmVzdWx0LCBpc1BhdXNlU2lnbmFsLCBQYXVzZVNpZ25hbCB9IGZyb20gJy4uL3BhdXNlL2luZGV4LmpzJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBMb2dnZXJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogTWluaW1hbCBsb2dnaW5nIGNvbnRyYWN0LiBNaXJyb3JzIENvbnNvbGUgQVBJIHN1YnNldC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUxvZ2dlciB7XG4gIGluZm8obWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbiAgbG9nKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIGRlYnVnKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIGVycm9yKG1lc3NhZ2U/OiBhbnksIC4uLm9wdGlvbmFsUGFyYW1zOiBhbnlbXSk6IHZvaWQ7XG4gIHdhcm4obWVzc2FnZT86IGFueSwgLi4ub3B0aW9uYWxQYXJhbXM6IGFueVtdKTogdm9pZDtcbn1cblxuLyoqIERlZmF1bHQgY29uc29sZS1iYXNlZCBsb2dnZXIuICovXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAtLSB0cml2aWFsIGNvbnNvbGUgZGVsZWdhdGlvbiAqL1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRMb2dnZXI6IElMb2dnZXIgPSB7XG4gIGluZm86IChtZXNzYWdlPzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gY29uc29sZS5pbmZvKG1lc3NhZ2UsIC4uLmFyZ3MpLFxuICBsb2c6IChtZXNzYWdlPzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gY29uc29sZS5sb2cobWVzc2FnZSwgLi4uYXJncyksXG4gIGRlYnVnOiAobWVzc2FnZT86IGFueSwgLi4uYXJnczogYW55W10pID0+IGNvbnNvbGUuZGVidWcobWVzc2FnZSwgLi4uYXJncyksXG4gIGVycm9yOiAobWVzc2FnZT86IGFueSwgLi4uYXJnczogYW55W10pID0+IGNvbnNvbGUuZXJyb3IobWVzc2FnZSwgLi4uYXJncyksXG4gIHdhcm46IChtZXNzYWdlPzogYW55LCAuLi5hcmdzOiBhbnlbXSkgPT4gY29uc29sZS53YXJuKG1lc3NhZ2UsIC4uLmFyZ3MpLFxufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTdGFnZSBGdW5jdGlvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBDYWxsYmFjayB0aGF0IHJlY2VpdmVzIHRva2VucyBkdXJpbmcgc3RyZWFtaW5nLiAqL1xuZXhwb3J0IHR5cGUgU3RyZWFtQ2FsbGJhY2sgPSAodG9rZW46IHN0cmluZykgPT4gdm9pZDtcblxuLyoqXG4gKiBUaGUgZnVuY3Rpb24gc2lnbmF0dXJlIGZvciBzdGFnZSBoYW5kbGVycy5cbiAqIC0gVE91dDogcmV0dXJuIHR5cGUgcHJvZHVjZWQgYnkgdGhlIHN0YWdlXG4gKiAtIFRTY29wZTogdGhlIHNjb3BlIG9iamVjdCBwYXNzZWQgdG8gdGhlIHN0YWdlXG4gKiAtIE9wdGlvbmFsIDNyZCBwYXJhbWV0ZXIgYHN0cmVhbUNhbGxiYWNrYCBpbmplY3RlZCBmb3Igc3RyZWFtaW5nIHN0YWdlcy5cbiAqL1xuZXhwb3J0IHR5cGUgU3RhZ2VGdW5jdGlvbjxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+ID0gKFxuICBzY29wZTogVFNjb3BlLFxuICBicmVha1BpcGVsaW5lOiAoKSA9PiB2b2lkLFxuICBzdHJlYW1DYWxsYmFjaz86IFN0cmVhbUNhbGxiYWNrLFxuKSA9PiBQcm9taXNlPFRPdXQgfCB2b2lkPiB8IFRPdXQgfCB2b2lkO1xuXG4vKipcbiAqIFN0YWdlIGZ1bmN0aW9uIGZvciBwYXVzYWJsZSBzdGFnZXMg4oCUIHJldHVybiB2YWx1ZSBpcyB0aGUgcGF1c2UgZGF0YSAoYW55IHR5cGUpLlxuICogUmV0dXJuIG5vbi12b2lkIHRvIHBhdXNlLCByZXR1cm4gdm9pZCB0byBjb250aW51ZSBub3JtYWxseS5cbiAqL1xuZXhwb3J0IHR5cGUgUGF1c2FibGVTdGFnZUZ1bmN0aW9uPFRTY29wZSA9IGFueT4gPSAoXG4gIHNjb3BlOiBUU2NvcGUsXG4gIGJyZWFrUGlwZWxpbmU6ICgpID0+IHZvaWQsXG4pID0+IFByb21pc2U8dW5rbm93bj4gfCB1bmtub3duO1xuXG4vKiogRmFjdG9yeSB0aGF0IGNyZWF0ZXMgYSBzY29wZSBpbnN0YW5jZSBmb3IgZWFjaCBzdGFnZS4gKi9cbmV4cG9ydCB0eXBlIFNjb3BlRmFjdG9yeTxUU2NvcGUgPSBhbnk+ID0gKFxuICBjb250ZXh0OiBTdGFnZUNvbnRleHQsXG4gIHN0YWdlTmFtZTogc3RyaW5nLFxuICByZWFkT25seUNvbnRleHQ/OiB1bmtub3duLFxuICBleGVjdXRpb25FbnY/OiBFeGVjdXRpb25FbnYsXG4pID0+IFRTY29wZTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTdHJlYW1pbmdcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBTdHJlYW1Ub2tlbkhhbmRsZXIgPSAoc3RyZWFtSWQ6IHN0cmluZywgdG9rZW46IHN0cmluZykgPT4gdm9pZDtcbmV4cG9ydCB0eXBlIFN0cmVhbUxpZmVjeWNsZUhhbmRsZXIgPSAoc3RyZWFtSWQ6IHN0cmluZywgZnVsbFRleHQ/OiBzdHJpbmcpID0+IHZvaWQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RyZWFtSGFuZGxlcnMge1xuICBvblRva2VuPzogU3RyZWFtVG9rZW5IYW5kbGVyO1xuICBvblN0YXJ0PzogU3RyZWFtTGlmZWN5Y2xlSGFuZGxlcjtcbiAgb25FbmQ/OiBTdHJlYW1MaWZlY3ljbGVIYW5kbGVyO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFBhcmFsbGVsLWZvci1lYWNoIChkeW5hbWljIGZhbi1vdXQpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBBIGJ1aWx0IGNoYXJ0LCBhcyBgYWRkUGFyYWxsZWxGb3JFYWNoYCdzIGBicmFuY2hgIGZhY3RvcnkgcmV0dXJucyBpdC5cbiAqXG4gKiBTdHJ1Y3R1cmFsbHkgdGhlIHN1YnNldCBvZiBgRmxvd0NoYXJ0YCB0aGUgZW5naW5lIG5lZWRzIHRvIG1vdW50IGEgYnJhbmNoIOKAlFxuICogZGVjbGFyZWQgaGVyZSByYXRoZXIgdGhhbiBpbXBvcnRlZCBzbyBgZW5naW5lL2Aga2VlcHMgaXRzIG9uZS13YXkgZGVwZW5kZW5jeVxuICogb24gYGJ1aWxkZXIvYC4gQW55IGBmbG93Q2hhcnQoLi4uKS5idWlsZCgpYCByZXN1bHQgc2F0aXNmaWVzIGl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJyYW5jaENoYXJ0PFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4ge1xuICByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgc3RhZ2VNYXA6IE1hcDxzdHJpbmcsIFN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPj47XG4gIHN1YmZsb3dzPzogUmVjb3JkPHN0cmluZywgeyByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB9PjtcbiAgYnVpbGRUaW1lU3RydWN0dXJlPzogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBSdW50aW1lIGZhbi1vdXQgY29uZmlnIOKAlCBvbmUgYnJhbmNoIHBlciBpdGVtLCBicmFuY2ggQ09VTlQgZGVjaWRlZCBhdFxuICogcnVudGltZSBmcm9tIHRoZSBwYXlsb2FkLiBEZXNpZ246IGRvY3MvZGVzaWduL2V4ZWN1dGlvbi1jb250cm9sLm1kIChEMikuXG4gKlxuICogRWFjaCBicmFuY2ggcnVucyBhcyBhIGdlbmVyYXRlZCBTVUJGTE9XIChpc29sYXRlZCBydW50aW1lLCBvd24gY29tbWl0IGxvZyxcbiAqIGFkZHJlc3NhYmxlIGF0IGA8c3RhZ2VJZD5+PGluZGV4PmAgaW4gZXZlcnkgdHJhY2UgcXVlcnkpLCB3aGljaCBpcyB3aGF0XG4gKiBtYWtlcyBicmFuY2hlcyB1bmFibGUgdG8gY29ycnVwdCBlYWNoIG90aGVyJ3MgaW4tZmxpZ2h0IHN0YXRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcmFsbGVsRm9yRWFjaENvbmZpZzxUSXRlbSA9IGFueSwgVFNjb3BlID0gYW55PiB7XG4gIC8qKlxuICAgKiBQaWNrcyB0aGUgaXRlbXMgdG8gZmFuIG91dCBvdmVyLCBmcm9tIHRoZSBsaXZlIHNjb3BlLiBSZWFkcyBoZXJlIGFyZVxuICAgKiB0cmFja2VkIGxpa2UgYW55IG90aGVyIHN0YWdlIHJlYWQsIHNvIHRoZSBmYW4tb3V0J3Mgb3duIGlucHV0cyBzaG93IHVwIGluXG4gICAqIHRoZSB0cmFjZSBhbmQgaW4gYSBiYWNrd2FyZCBzbGljZS5cbiAgICovXG4gIGl0ZW1zOiAoc2NvcGU6IFRTY29wZSkgPT4gcmVhZG9ubHkgVEl0ZW1bXTtcbiAgLyoqXG4gICAqIEJ1aWxkcyB0aGUgY2hhcnQgZm9yIE9ORSBpdGVtLiBDYWxsZWQgb25jZSBwZXIgZXhlY3V0ZWQgYnJhbmNoLCB3aXRoIHRoZVxuICAgKiBpdGVtIGFuZCBpdHMgaW5kZXgg4oCUIGNsb3NlIG92ZXIgdGhlbSwgb3IgcmVhZCB0aGUgYGl0ZW1gIC8gYGluZGV4YCB2YWx1ZXNcbiAgICogc2VlZGVkIGludG8gdGhlIGJyYW5jaCdzIG93biBzY29wZS5cbiAgICovXG4gIGJyYW5jaDogKGl0ZW06IFRJdGVtLCBpbmRleDogbnVtYmVyKSA9PiBCcmFuY2hDaGFydDtcbiAgLyoqXG4gICAqIEhhcmQgY2VpbGluZyBvbiBicmFuY2hlcyBwZXIgZXhlY3V0aW9uLiBSRVFVSVJFRDogYW4gdW5ib3VuZGVkIGZhbi1vdXRcbiAgICogZHJpdmVuIGJ5IG1vZGVsIG91dHB1dCBpcyBhIHJlc291cmNlIGF0dGFjaywgc28gdGhlcmUgaXMgbm8gZGVmYXVsdCB0b1xuICAgKiBmb3JnZXQuIEV4dHJhIGl0ZW1zIGRvIG5vdCBydW4g4oCUIHRoZSB0cnVuY2F0aW9uIGlzIHJlY29yZGVkLCBuZXZlciBzaWxlbnQuXG4gICAqL1xuICBtYXhCcmFuY2hlczogbnVtYmVyO1xuICAvKipcbiAgICogU3RhdGUga2V5IHRoZSBvcmRlcmVkIHJlc3VsdHMgYXJyYXkgaXMgd3JpdHRlbiB0byBvbiB0aGUgcGFyZW50IHNjb3BlLlxuICAgKiBSRVFVSVJFRCDigJQgYSBrZXkgZGVyaXZlZCBmcm9tIHRoZSBzdGFnZSBpZCBjb3VsZCBzaWxlbnRseSBvdmVyd3JpdGUgc3RhdGVcbiAgICogdGhlIGNoYXJ0IGFscmVhZHkgb3ducy5cbiAgICovXG4gIGludG86IHN0cmluZztcbiAgLyoqXG4gICAqIEZhbi1vdXQgZXJyb3IgcG9saWN5IOKAlCB0aGUgU0FNRSBwb2xpY3kgdGhlIGV4aXN0aW5nIHBhcmFsbGVsIGZhbi1vdXQgdXNlcy5cbiAgICogYHRydWVgID0gYFByb21pc2UuYWxsYCAodGhlIGZpcnN0IGZhaWxpbmcgYnJhbmNoIHJlamVjdHMgdGhlIHN0YWdlKTtcbiAgICogb21pdHRlZC9mYWxzZSA9IGJlc3QtZWZmb3J0IGBQcm9taXNlLmFsbFNldHRsZWRgIChldmVyeSBicmFuY2ggcnVuczsgYVxuICAgKiBmYWlsZWQgYnJhbmNoJ3Mgc2xvdCBpbiB0aGUgcmVzdWx0cyBhcnJheSBpcyBgdW5kZWZpbmVkYCkuXG4gICAqL1xuICBmYWlsRmFzdD86IGJvb2xlYW47XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUmV0cnkgKHBlci1zdGFnZSBkZWNsYXJhdGl2ZSBwb2xpY3kpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLy8gVGhlIHBvbGljeSB0aGUgYXR0ZW1wdCBydW5uZXIgcnVuczogZGVjbGFyZWQgb25jZSwgaW4gdGhlIGF0dGVtcHQgbGVhZiAoYGF0dGVtcHQvdHlwZXMudHNgLCAxMC4xKSwgYW5kIG5hbWVkXG4vLyBoZXJlIHNvIGV2ZXJ5IGVuZ2luZSBhbmQgYnVpbGRlciBzaXRlIGtlZXBzIGl0cyBpbXBvcnQuXG5leHBvcnQgdHlwZSB7IFJldHJ5UG9saWN5LCBTdGFnZVRvdWNoZXMgfSBmcm9tICcuLi9hdHRlbXB0L3R5cGVzLmpzJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBTdWJmbG93XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBDb250cm9scyBob3cgYXJyYXkgdmFsdWVzIGZyb20gb3V0cHV0TWFwcGVyIGFyZSBtZXJnZWQgaW50byBwYXJlbnQgc2NvcGUuXG4gKi9cbmV4cG9ydCBlbnVtIEFycmF5TWVyZ2VNb2RlIHtcbiAgLyoqIEFwcGVuZCBzdWJmbG93IG91dHB1dCB0byBleGlzdGluZyBwYXJlbnQgYXJyYXk6IFsuLi5leGlzdGluZywgLi4udmFsdWVdLiBEZWZhdWx0LiAqL1xuICBDb25jYXQgPSAnY29uY2F0JyxcbiAgLyoqIE92ZXJ3cml0ZSBwYXJlbnQgYXJyYXkgd2l0aCBzdWJmbG93IG91dHB1dC4gVXNlIGZvciBEeW5hbWljIGxvb3BzLiAqL1xuICBSZXBsYWNlID0gJ3JlcGxhY2UnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1YmZsb3dNb3VudE9wdGlvbnM8VFBhcmVudFNjb3BlID0gYW55LCBUU3ViZmxvd0lucHV0ID0gYW55LCBUU3ViZmxvd091dHB1dCA9IGFueT4ge1xuICBpbnB1dE1hcHBlcj86IChwYXJlbnRTY29wZTogVFBhcmVudFNjb3BlKSA9PiBUU3ViZmxvd0lucHV0O1xuICAvKipcbiAgICogTWFwcyBzdWJmbG93IG91dHB1dCBiYWNrIGludG8gcGFyZW50IHNjb3BlLlxuICAgKlxuICAgKiAqKkFycmF5IG1lcmdlIGJlaGF2aW9yKiogaXMgY29udHJvbGxlZCBieSBgYXJyYXlNZXJnZWA6XG4gICAqIC0gYCdjb25jYXQnYCAoZGVmYXVsdCk6IGBbLi4uZXhpc3RpbmcsIC4uLnZhbHVlXWAg4oCUIHJldHVybiBvbmx5ICoqZGVsdGEqKiBpdGVtc1xuICAgKiAtIGAncmVwbGFjZSdgOiBvdmVyd3JpdGVzIHRoZSBwYXJlbnQgdmFsdWUg4oCUIHJldHVybiB0aGUgZnVsbCBhcnJheVxuICAgKlxuICAgKiBTY2FsYXIgdmFsdWVzIGFyZSBhbHdheXMgcmVwbGFjZWQgcmVnYXJkbGVzcyBvZiBgYXJyYXlNZXJnZWAuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogLy8gRGVsdGEgbW9kZSAoZGVmYXVsdCkg4oCUIHJldHVybiBvbmx5IG5ldyBpdGVtcywgY29uY2F0IGFwcGVuZHNcbiAgICogb3V0cHV0TWFwcGVyOiAoc2YpID0+ICh7IG1lc3NhZ2VzOiBzZi5uZXdNZXNzYWdlcyB9KVxuICAgKlxuICAgKiAvLyBSZXBsYWNlIG1vZGUg4oCUIHJldHVybiBmdWxsIGFycmF5LCBwYXJlbnQgdmFsdWUgaXMgb3ZlcndyaXR0ZW5cbiAgICogLy8gVXNlZnVsIGluIER5bmFtaWMgbG9vcHMgd2hlcmUgdGhlIHN1YmZsb3cgcmVjb21wdXRlcyB0aGUgZnVsbCB2YWx1ZSBlYWNoIGl0ZXJhdGlvblxuICAgKiBvdXRwdXRNYXBwZXI6IChzZikgPT4gKHsgdG9vbERlc2NyaXB0aW9uczogc2YudG9vbERlc2NyaXB0aW9ucyB9KSxcbiAgICogYXJyYXlNZXJnZTogQXJyYXlNZXJnZU1vZGUuUmVwbGFjZSxcbiAgICpcbiAgICogLy8gU2NhbGFycyBhcmUgZmluZSBpbiBib3RoIG1vZGVzIOKAlCBhbHdheXMgcmVwbGFjZWRcbiAgICogb3V0cHV0TWFwcGVyOiAoc2YpID0+ICh7IHN0YXR1czogc2YucmVzdWx0LCBjb3VudDogc2YudG90YWwgfSlcbiAgICogYGBgXG4gICAqL1xuICBvdXRwdXRNYXBwZXI/OiAoc3ViZmxvd091dHB1dDogVFN1YmZsb3dPdXRwdXQsIHBhcmVudFNjb3BlOiBUUGFyZW50U2NvcGUpID0+IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKipcbiAgICogQ29udHJvbHMgaG93IGFycmF5IHZhbHVlcyBmcm9tIG91dHB1dE1hcHBlciBhcmUgbWVyZ2VkIGludG8gcGFyZW50IHNjb3BlLlxuICAgKiBBcHBsaWVzIG9ubHkgdG8gdG9wLWxldmVsIGFycmF5IGtleXMuIE5lc3RlZCBhcnJheXMgaW5zaWRlIG9iamVjdHNcbiAgICogYWx3YXlzIHVzZSBhcHBlbmQgKGFwcGVuZFRvQXJyYXkpIHJlZ2FyZGxlc3Mgb2YgdGhpcyBzZXR0aW5nLlxuICAgKlxuICAgKiBAZGVmYXVsdCBBcnJheU1lcmdlTW9kZS5Db25jYXRcbiAgICovXG4gIGFycmF5TWVyZ2U/OiBBcnJheU1lcmdlTW9kZTtcblxuICAvKipcbiAgICogU1RSVUNUVVJFLU9OTFk6IHRoZSBkb3duc3RyZWFtIHN0YWdlIGlkIHRoaXMgYnJhbmNoJ3MgY29udmVyZ2VuY2UgZWRnZVxuICAgKiBwb2ludHMgdG8sIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQgXCJjb252ZXJnZSBhdCB0aGUgbmV4dCBsaW5lYXIgc3RhZ2UuXCJcbiAgICpcbiAgICogV2hlbiBhIGZvcmsvc2VsZWN0b3IvZGVjaWRlciBicmFuY2ggY2FycmllcyBgY29udmVyZ2VBdGAsIGl0cyB2aXN1YWxpemVkXG4gICAqIGBuZXh0YCBlZGdlIGlzIGZpcmVkIHRvIHRoZSBuYW1lZCBzdGFnZSBpbnN0ZWFkIG9mIHRvIHRoZSBzaGFyZWRcbiAgICogY29udmVyZ2VuY2Ugbm9kZSBpdHMgc2libGluZ3MgdXNlLiBUaGlzIGV4cHJlc3NlcyBhbiB1bmVxdWFsLWRlcHRoIG1lcmdlXG4gICAqIOKAlCBlLmcuIGEgYHRvb2xzYCBzbG90IHRoYXQgYnlwYXNzZXMgdGhlIGBtZXNzYWdlQVBJYCBhc3NlbWJseSBub2RlIGFuZFxuICAgKiBwYWlycyB3aXRoIGl0cyBvdXRwdXQgYXQgYGNhbGwtbGxtYCAoc28gYGNhbGwtbGxtYCByZWFkcyBhcyBhIDItcGFyZW50XG4gICAqIG1lcmdlKSwgZmFpdGhmdWwgdG8gdGhlIEFudGhyb3BpYyB3aXJlIHByb3RvY29sIChzeXN0ZW0rbWVzc2FnZXMgPSB0aGVcbiAgICogbWVzc2FnZSBwYXlsb2FkOyB0b29scyA9IGEgc2VwYXJhdGUgdG9wLWxldmVsIGZpZWxkKS5cbiAgICpcbiAgICogKipUaGlzIGFmZmVjdHMgdGhlIFNUUlVDVFVSRS90b3BvbG9neSBncmFwaCBvbmx5Kiog4oCUIHRoZSBydW50aW1lIGlzXG4gICAqIHVuY2hhbmdlZCAodGhlIGJyYW5jaCdzIG91dHB1dHMgcmlkZSBzaGFyZWQgc2NvcGU7IHRoZSBuYW1lZCB0YXJnZXQgcmVhZHNcbiAgICogdGhlbSB3aGVuIGl0IHJ1bnMpLiBJdCBkb2VzIE5PVCBpbnRyb2R1Y2UgYSBqb2luIGJhcnJpZXIuIFRoZSB0YXJnZXQgaXMgYVxuICAgKiBGT1JXQVJEIHN0YWdlIChhZGRlZCBsYXRlciBpbiB0aGUgY2hhaW4pLCBzbyBpdCBpcyBub3QgdmFsaWRhdGVkIGF0XG4gICAqIGJyYW5jaC1kZWNsYXJhdGlvbiB0aW1lLlxuICAgKi9cbiAgY29udmVyZ2VBdD86IHN0cmluZztcblxuICAvKipcbiAgICogV2hlbiBgdHJ1ZWAsIGFuIGlubmVyIGBzY29wZS4kYnJlYWsocmVhc29uKWAgY2FsbCBpbnNpZGUgdGhpcyBzdWJmbG93XG4gICAqIHByb3BhZ2F0ZXMgdXAgdG8gdGhlIHBhcmVudCDigJQgaS5lLiwgdGhlIHBhcmVudCdzIGBicmVha0ZsYWdgIGlzIHNldFxuICAgKiBhZnRlciB0aGUgc3ViZmxvdyBleGl0cywgdGVybWluYXRpbmcgdGhlIHBhcmVudCdzIG91dGVyIGxvb3AgdG9vLlxuICAgKlxuICAgKiAqKkRlZmF1bHQ6IGBmYWxzZWAqKiAoY3VycmVudCBiZWhhdmlvdXIg4oCUIGlubmVyIGJyZWFrIHN0b3BzIG9ubHkgdGhlXG4gICAqIHN1YmZsb3c7IHBhcmVudCBjb250aW51ZXMpLlxuICAgKlxuICAgKiAjIyBXaGVuIHRvIHVzZVxuICAgKlxuICAgKiBTZXQgYHByb3BhZ2F0ZUJyZWFrOiB0cnVlYCBvbiBzdWJmbG93IG1vdW50cyB0aGF0IHJlcHJlc2VudFxuICAgKiAqKnRlcm1pbmFsKiogYnJhbmNoZXMg4oCUIFwiaWYgdGhpcyBzdWJmbG93IGZpcmVzLCB0aGUgb3V0ZXIgbG9vcCBpc1xuICAgKiBkb25lXCIuIEV4YW1wbGVzOlxuICAgKlxuICAgKiAtIEEgaHVtYW4tcmV2aWV3IHJ1bm5lciB0aGF0IHRha2VzIG92ZXIgZnJvbSBhbiBhZ2VudCdzIHRvb2wtY2FsbGluZ1xuICAgKiAgIGxvb3AgYW5kIHByb2R1Y2VzIHRoZSBmaW5hbCByZXNwb25zZS5cbiAgICogLSBBIHNhZmV0eS1nYXRlIHN1YmZsb3cgdGhhdCBoYWx0cyB0aGUgb3V0ZXIgd29ya2Zsb3cgd2hlbiBhIHBvbGljeVxuICAgKiAgIHZpb2xhdGlvbiBpcyBkZXRlY3RlZC5cbiAgICogLSBBbiBlcnJvci1yZWNvdmVyeSBzdWJmbG93IHRoYXQgcmVzdG9yZXMgc3RhdGUgYW5kIHRoZW4gdGVybWluYXRlcy5cbiAgICpcbiAgICogIyMgU2VtYW50aWNzXG4gICAqXG4gICAqIDEuIEluc2lkZSB0aGUgc3ViZmxvdywgYSBzdGFnZSBjYWxscyBgc2NvcGUuJGJyZWFrKHJlYXNvbilgLlxuICAgKiAyLiBUaGUgc3ViZmxvdydzIG93biBleGVjdXRpb24gc3RvcHMgKG5vcm1hbCBgJGJyZWFrYCBiZWhhdmlvdXIpLlxuICAgKiAzLiBgU3ViZmxvd0V4ZWN1dG9yYCBpbnNwZWN0cyB0aGUgc3ViZmxvdydzIGV4aXQgc3RhdGUuIElmXG4gICAqICAgIGBwcm9wYWdhdGVCcmVhayA9PT0gdHJ1ZWAgQU5EIHRoZSBpbm5lciBicmVhayBmaXJlZCwgaXQgZm9yd2FyZHNcbiAgICogICAgdGhlIGJyZWFrIChhbmQgaXRzIHJlYXNvbikgdG8gdGhlIHBhcmVudCdzIGBicmVha0ZsYWdgLlxuICAgKiA0LiBUaGUgcGFyZW50IHRyYXZlcnNlciBzZWVzIGBzaG91bGRCcmVha2Agb24gaXRzIG5leHQgc3RlcCBhbmQgZXhpdHMuXG4gICAqIDUuIEEgYEZsb3dSZWNvcmRlci5vbkJyZWFrYCBldmVudCBmaXJlcyBhdCB0aGUgcGFyZW50LW1vdW50IGxldmVsIHdpdGhcbiAgICogICAgYHByb3BhZ2F0ZWRGcm9tU3ViZmxvd2AgPSB0aGUgc3ViZmxvdydzIGlkIGFuZCB0aGUgaW5uZXIgcmVhc29uLlxuICAgKlxuICAgKiAjIyBQYXJhbGxlbC9mYW4tb3V0XG4gICAqXG4gICAqIEZvbGxvd3MgdGhlIGV4aXN0aW5nIGxpYnJhcnkgcnVsZSBpbiBgQ2hpbGRyZW5FeGVjdXRvcmA6IHRoZSBwYXJlbnRcbiAgICogYnJlYWtzIG9ubHkgd2hlbiAqKmV2ZXJ5KiogY2hpbGQgb2YgYSBmb3JrIGJyb2tlLiBBIHNpbmdsZVxuICAgKiBgcHJvcGFnYXRlQnJlYWs6IHRydWVgIHN1YmZsb3cgY29udHJpYnV0aW5nIGl0cyBicmVhayB0byB0aGUgY291bnRcbiAgICogZG9lcyBub3Qgb24gaXRzIG93biB0ZXJtaW5hdGUgdGhlIHBhcmVudCBmYW4tb3V0LlxuICAgKlxuICAgKiAjIyBvdXRwdXRNYXBwZXIgc3RpbGwgcnVuc1xuICAgKlxuICAgKiBUaGUgc3ViZmxvdydzIGBvdXRwdXRNYXBwZXJgIChpZiBzdXBwbGllZCkgQUxXQVlTIHJ1bnMgYmVmb3JlIHRoZVxuICAgKiBicmVhayBwcm9wYWdhdGVzLCBzbyB0aGUgc3ViZmxvdydzIHBhcnRpYWwgc3RhdGUgaXMgc3RpbGwgd3JpdHRlbiB0b1xuICAgKiB0aGUgcGFyZW50IHNjb3BlLiBUaGlzIGlzIGludGVudGlvbmFsIOKAlCB0aGUgdHlwaWNhbCB1c2UgY2FzZSBpcyBhblxuICAgKiBcImVzY2FsYXRpb25cIiBzdWJmbG93IHdob3NlIG91dHB1dCBJUyB0aGUgZmluYWwgYW5zd2VyIHRoYXQgbmVlZHMgdG9cbiAgICogbGFuZCBpbiB0aGUgcGFyZW50IHNjb3BlIGJlZm9yZSB0aGUgb3V0ZXIgbG9vcCB0ZXJtaW5hdGVzLiBJZiB5b3VcbiAgICogd2FudCB0byBzdXBwcmVzcyBvdXRwdXQgbWFwcGluZyBvbiBicmVhaywgY2hlY2sgdGhlIGJyZWFrIHN0YXRlXG4gICAqIGluc2lkZSB5b3VyIGBvdXRwdXRNYXBwZXJgIGFuZCByZXR1cm4gYHt9YCBlYXJseS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHByb3BhZ2F0ZUJyZWFrPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGVjbGFyZWQgdGFncyAoOS4yMS4xKSBmb3IgdGhlIE1PVU5UIGl0c2VsZiDigJQgdGhlIE5BTUVTIHRoZSBhdXRob3IgcHV0c1xuICAgKiBvbiB0aGlzIG1vdW50IGF0IGJ1aWxkIHRpbWUsIGxhbmRlZCBieSB0aGUgc2FtZSBgYXBwbHlUYWdzYCBldmVyeSBvdGhlclxuICAgKiBgb3B0aW9ucy50YWdzYCBzaXRlIHVzZXMsIHdpdGggdGhlIHNhbWUgcmVmdXNhbHMgKGVtcHR5LCBub24tc3RyaW5nLCB0aGVcbiAgICogcmVzZXJ2ZWQgYH5gIG1hcmtlciwgYSBkdXBsaWNhdGUsIGEgc2Vjb25kIGRlY2xhcmF0aW9uKS5cbiAgICpcbiAgICogQSBtb3VudCBpcyBhIHN0YWdlIHRoYXQgY29tbWl0czogaXRzIGZpcnN0IGJ1bmRsZSBpbiB0aGUgUEFSRU5UIGxvZyBpcyBhXG4gICAqIHN0b3AgaW4gYGNvbW1pdFN0b3BzYCwgc28gYHRhZ1N0b3BzYCBrZWVwcyBpdCBsaWtlIGFueSB0YWdnZWQgc3RhZ2UgYW5kXG4gICAqIGNhcnJpZXMgdGhlc2UgbmFtZXMgYXMgYFN0b3AubWV0YWAuIFN0YW1wZWQgb24gdGhhdCBmaXJzdCBidW5kbGUgb25seVxuICAgKiAodGhlIG1vdW50J3MgZXhpdCBidW5kbGUgY2FycmllcyBub25lIOKAlCB0aGUgb25jZS1wZXItZXhlY3V0aW9uIGxhdykuXG4gICAqIFRoZSBzdWJmbG93J3MgT1dOIGxvZyBpcyB1bnRvdWNoZWQ6IGl0cyBpbm5lciBzdGFnZXMgZGVjbGFyZSB0aGVpciBvd25cbiAgICogdGFncywgYW5kIGBkcmlsbChtb3VudClgIHJlYWRzIHRob3NlIG9mZiB0aGUgaW5uZXIgbG9nLlxuICAgKlxuICAgKiBUaGlzIGlzIHRoZSBPTkxZIHRhZyBzaXRlIGZvciBhIGZvcmstY2hpbGQgbW91bnQgKGBhZGRTdWJGbG93Q2hhcnRgKSBvclxuICAgKiBhIGJyYW5jaCBtb3VudCAoYGFkZFN1YkZsb3dDaGFydEJyYW5jaGApIOKAlCBhZnRlciB0aG9zZSB0aGUgY3Vyc29yIHN0aWxsXG4gICAqIHBvaW50cyBhdCB0aGUgcGFyZW50LCBzbyBgLnRhZygpYCByZWZ1c2VzIHJhdGhlciB0aGFuIG1pcy1hdHRyaWJ1dGUuIEFcbiAgICogbGluZWFyIG1vdW50IChgYWRkU3ViRmxvd0NoYXJ0TmV4dGApIG1vdmVzIHRoZSBjdXJzb3IsIHNvIGAudGFnKClgIHdvcmtzXG4gICAqIHRoZXJlIHRvbzsgZGVjbGFyZSBpbiBvbmUgcGxhY2UsIG5vdCBib3RoLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC5hZGRTZWxlY3RvckZ1bmN0aW9uKCdTbG90cycsIHBpY2tTbG90cywgJ3Nsb3RzJylcbiAgICogICAuYWRkU3ViRmxvd0NoYXJ0QnJhbmNoKCdtZW1vcnknLCBtZW1vcnlDaGFydCwgJ01lbW9yeScsIHsgdGFnczogWydzbG90Om1lbW9yeSddIH0pXG4gICAqICAgLmFkZFN1YkZsb3dDaGFydEJyYW5jaCgndG9vbHMnLCB0b29sc0NoYXJ0LCAnVG9vbHMnLCB7IHRhZ3M6IFsnc2xvdDp0b29scyddIH0pXG4gICAqIC5lbmQoKVxuICAgKiBgYGBcbiAgICovXG4gIHRhZ3M/OiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdWJmbG93UmVzdWx0IHtcbiAgc3ViZmxvd0lkOiBzdHJpbmc7XG4gIHN1YmZsb3dOYW1lOiBzdHJpbmc7XG4gIHRyZWVDb250ZXh0OiB7XG4gICAgLyoqXG4gICAgICogVGhlIHN1YmZsb3cncyBmaW5hbCBzdGF0ZS4gVGhlIHRyYXZlcnNlcidzIHJlY29yZCBob2xkcyB0aGUgTElWRSBoZWFwXG4gICAgICog4oCUIHdoYXQgYSBwbGFpbiBgZ2V0U25hcHNob3QoKWAgYW5kIHRoZSBjaGVja3BvaW50IHNlZS4gVW5kZXJcbiAgICAgKiBgZ2V0U25hcHNob3QoeyByZWRhY3Q6IHRydWUgfSlgIHRoZSBleGVjdXRvciBzZXJ2ZXMgdGhlIHN1YmZsb3cncyBvd25cbiAgICAgKiByZWRhY3RlZCBtaXJyb3IgaGVyZSBpbnN0ZWFkICg5LjIwLjA7IGBoYW5kbGVycy9zZXJ2ZWRTdWJmbG93UmVzdWx0c2ApLFxuICAgICAqIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBgc3RhdGVBdGAgZm9sZHMgYGhpc3RvcnlgIHRvLlxuICAgICAqL1xuICAgIGdsb2JhbENvbnRleHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIHN0YWdlQ29udGV4dHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGhpc3Rvcnk6IHVua25vd25bXTtcbiAgICAvKiogSWRlbnRpdHkgb2YgdGhlIGxvY2FsIGhpc3RvcnksIG5vdCBpdHMgcGFyZW50J3MgbG9nLiAqL1xuICAgIHJlYWRvbmx5IGxvZ0FkZHJlc3M/OiBMb2dBZGRyZXNzO1xuICAgIC8qKlxuICAgICAqIFRoZSBzdWJmbG93J3MgT1dOIGZvbGQgYmFzZSDigJQgdGhlIHN0YXRlIGl0cyBpc29sYXRlZCBydW50aW1lIHN0YXJ0ZWRcbiAgICAgKiBmcm9tLCBiZWZvcmUgaXRzIGZpcnN0IGNvbW1pdC4gVGhlIHNpYmxpbmcgb2ZcbiAgICAgKiBgUnVudGltZVNuYXBzaG90LmluaXRpYWxTdGF0ZWAsIGNhcnJpZWQgaGVyZSBzbyBhIHN1YmZsb3cncyBgaGlzdG9yeWBcbiAgICAgKiBjYW4gYmUgZm9sZGVkIG9mZmxpbmUgZXhhY3RseSBsaWtlIHRoZSBydW4ncyBsb2cgKGBzdGF0ZUF0YCxcbiAgICAgKiBgdGltZVRyYXZlbCguLi4pLmRyaWxsKG1vdW50KWApLiBGcm96ZW4gYW5kIGRldGFjaGVkLlxuICAgICAqXG4gICAgICogTm9ybWFsbHkgYHt9YDogYSBzdWJmbG93J3MgYGlucHV0TWFwcGVyYCBzZWVkIGlzIGl0c2VsZiB0aGUgZmlyc3RcbiAgICAgKiBDT01NSVQgaW4gYGhpc3RvcnlgICh0aGUgcm9vdCBjb250ZXh0IGNvbW1pdHMgaXQpLCBub3QgYSBwcmUtcnVuIGJhc2UuXG4gICAgICovXG4gICAgaW5pdGlhbFN0YXRlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH07XG4gIHBhcmVudFN0YWdlSWQ6IHN0cmluZztcbiAgcGlwZWxpbmVTdHJ1Y3R1cmU/OiB1bmtub3duO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFN1YmZsb3cgVHJhdmVyc2VyIEZhY3Rvcnlcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIFN1YmZsb3dUcmF2ZXJzZXJGYWN0b3J5IOKAlCBDcmVhdGVzIGEgRmxvd2NoYXJ0VHJhdmVyc2VyIGZvciBzdWJmbG93IGV4ZWN1dGlvbi5cbiAqXG4gKiBJbmplY3RlZCBpbnRvIFN1YmZsb3dFeGVjdXRvciB0byBicmVhayB0aGUgY2lyY3VsYXIgZGVwZW5kZW5jeTpcbiAqIEZsb3djaGFydFRyYXZlcnNlciDihpIgU3ViZmxvd0V4ZWN1dG9yIOKGkiBGbG93Y2hhcnRUcmF2ZXJzZXIuXG4gKlxuICogVGhlIGZhY3RvcnkgY2FwdHVyZXMgcGFyZW50IHRyYXZlcnNlciBjb25maWcgKHN0YWdlTWFwLCBzY29wZUZhY3RvcnksIG5hcnJhdGl2ZSwgZXRjLilcbiAqIGluIGEgY2xvc3VyZS4gU3ViZmxvd0V4ZWN1dG9yIGNhbGxzIGl0IHdpdGggc3ViZmxvdy1zcGVjaWZpYyBvdmVycmlkZXMgKHJvb3QsIHJ1bnRpbWUsIGlucHV0KS5cbiAqIFRoZSByZXR1cm5lZCB0cmF2ZXJzZXIgdXNlcyB0aGUgU0FNRSA3LXBoYXNlIGFsZ29yaXRobSBhcyB0aGUgdG9wLWxldmVsIHRyYXZlcnNlcixcbiAqIHNvIGRlY2lkZXJzLCBzZWxlY3RvcnMsIGxvb3BzLCBsYXp5IHN1YmZsb3dzLCBhbmQgYWJvcnQgc2lnbmFscyBhbGwgd29yayBpbnNpZGUgc3ViZmxvd3MuXG4gKi9cbmV4cG9ydCB0eXBlIFN1YmZsb3dUcmF2ZXJzZXJGYWN0b3J5PFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4gPSAob3B0aW9uczoge1xuICAvKiogUm9vdCBub2RlIG9mIHRoZSBzdWJmbG93ICh3aXRoIGlzU3ViZmxvd1Jvb3Qgc3RyaXBwZWQpIOKAlCB0aGUgZ3JhcGggZXZlcnkgaWQgaW5zaWRlIHRoZSBzdWJmbG93IHJlc29sdmVzIGFnYWluc3QuICovXG4gIHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICAvKipcbiAgICogV2hlcmUgdGhlIHN1YmZsb3cncyB0cmF2ZXJzYWwgc3RhcnRzIHdoZW4gbm90IGF0IGByb290YCDigJQgYSByZXN1bWUnc1xuICAgKiBvbmUtc2hvdCByZS1lbnRyeSAoYFJlc3VtZUhvcC5lbnRyeWApOiB0aGUgbmV4dCBtb3VudCBvbiB0aGUgcGF1c2UgcGF0aCxcbiAgICogb3IgdGhlIHBhdXNlZCBzdGFnZSdzIHN0YW5kLWluLCBlYWNoIHdpdGggaXRzIGRpc3BhdGNoZXIncyBjb250aW51YXRpb25cbiAgICogYXR0YWNoZWQuIFZpc2l0ZWQgb25jZSwgZmlyc3Q7IG5ldmVyIHJlc29sdmFibGUgYnkgaWQuXG4gICAqL1xuICBlbnRyeT86IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICAvKipcbiAgICogUGFyYWxsZWwgc2libGluZ3MnIHBhdXNlcyB3YWl0aW5nIGluIHRoaXMgc3ViZmxvdyAoYFJlc3VtZUhvcC5wZW5kaW5nUGF1c2VzYCxcbiAgICogOS4yOC4wKSDigJQgcmFpc2VkIGluIG9yZGVyIG9uY2UgYGVudHJ5YCdzIGNoYWluIGVuZHMuXG4gICAqL1xuICBwZW5kaW5nUGF1c2VzPzogcmVhZG9ubHkgUXVldWVkUGF1c2VbXTtcbiAgLyoqIElzb2xhdGVkIGV4ZWN1dGlvbiBydW50aW1lIGZvciB0aGUgc3ViZmxvdy4gKi9cbiAgZXhlY3V0aW9uUnVudGltZTogSUV4ZWN1dGlvblJ1bnRpbWU7XG4gIC8qKiBNYXBwZWQgaW5wdXQgZnJvbSBwYXJlbnQgc2NvcGUgKGJlY29tZXMgcmVhZE9ubHlDb250ZXh0IGZvciBzdGFnZXMpLiAqL1xuICByZWFkT25seUNvbnRleHQ/OiB1bmtub3duO1xuICAvKiogU3ViZmxvdyBpZGVudGlmaWVyIOKAlCB1c2VkIGFzIGJyYW5jaFBhdGggZm9yIG5hcnJhdGl2ZSBjb250ZXh0LiAqL1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBSRkMtMDAzIEQxOiBydW50aW1lU3RhZ2VJZCBvZiB0aGUgc3ViZmxvdyBNT1VOVCBzdGFnZSBpbiB0aGUgcGFyZW50XG4gICAqIHRyYXZlcnNlci4gQmVjb21lcyB0aGUgYHBhcmVudFJ1bnRpbWVTdGFnZUlkYCBmYWxsYmFjayBmb3IgdGhlIHN1YmZsb3cnc1xuICAgKiByb290IHN0YWdlIHNvIHJ1bnRpbWUgYW5jZXN0b3IgY2hhaW5zIGNyb3NzIHN1YmZsb3cgYm91bmRhcmllcy5cbiAgICovXG4gIHBhcmVudE1vdW50UnVudGltZVN0YWdlSWQ/OiBzdHJpbmc7XG59KSA9PiBTdWJmbG93VHJhdmVyc2VySGFuZGxlPFRPdXQsIFRTY29wZT47XG5cbi8qKlxuICogSGFuZGxlIHJldHVybmVkIGJ5IFN1YmZsb3dUcmF2ZXJzZXJGYWN0b3J5LlxuICogUHJvdmlkZXMgZXhlY3V0ZSgpICsgYWNjZXNzIHRvIG5lc3RlZCBzdWJmbG93IHJlc3VsdHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3ViZmxvd1RyYXZlcnNlckhhbmRsZTxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+IHtcbiAgLyoqIEV4ZWN1dGUgdGhlIHN1YmZsb3cncyBncmFwaCB1c2luZyB0aGUgZnVsbCA3LXBoYXNlIHRyYXZlcnNhbCBhbGdvcml0aG0uICovXG4gIGV4ZWN1dGUoKTogUHJvbWlzZTxUcmF2ZXJzYWxSZXN1bHQ+O1xuICAvKiogQ29sbGVjdCBuZXN0ZWQgc3ViZmxvdyByZXN1bHRzIChmcm9tIHN1YmZsb3dzIG1vdW50ZWQgaW5zaWRlIHRoaXMgc3ViZmxvdykuICovXG4gIGdldFN1YmZsb3dSZXN1bHRzKCk6IE1hcDxzdHJpbmcsIFN1YmZsb3dSZXN1bHQ+O1xuICAvKipcbiAgICogRmluYWwgYnJlYWsgc3RhdGUgb2YgdGhlIHN1YmZsb3cgYWZ0ZXIgYGV4ZWN1dGUoKWAgcmV0dXJucy5cbiAgICpcbiAgICogICAtIGBzaG91bGRCcmVhazogdHJ1ZWAgIOKGkiBhIHN0YWdlIGluc2lkZSB0aGUgc3ViZmxvdyBjYWxsZWRcbiAgICogICAgIGBzY29wZS4kYnJlYWsocmVhc29uKWAsIHN0b3BwaW5nIHRoZSBzdWJmbG93J3Mgb3duIHRyYXZlcnNhbC5cbiAgICogICAtIGByZWFzb25gICAgICAgICAgICAgIOKGkiB0aGUgb3B0aW9uYWwgc3RyaW5nIHBhc3NlZCB0byBgJGJyZWFrYC5cbiAgICpcbiAgICogVXNlZCBieSBgU3ViZmxvd0V4ZWN1dG9yYCB0byBpbXBsZW1lbnQgYFN1YmZsb3dNb3VudE9wdGlvbnMucHJvcGFnYXRlQnJlYWtgOlxuICAgKiBpZiB0aGUgbW91bnQgb3B0cyBpbiBBTkQgdGhlIHN1YmZsb3cgYnJva2UsIHRoZSBwYXJlbnQncyBicmVhayBmbGFnIGlzXG4gICAqIGZvcndhcmRlZC5cbiAgICovXG4gIGdldEJyZWFrU3RhdGUoKTogeyBzaG91bGRCcmVhazogYm9vbGVhbjsgcmVhc29uPzogc3RyaW5nIH07XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRXhlY3V0aW9uIFJ1bnRpbWUgSW50ZXJmYWNlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBJRXhlY3V0aW9uUnVudGltZSDigJQgSW50ZXJmYWNlIGZvciB0aGUgcnVudGltZSBlbnZpcm9ubWVudC5cbiAqXG4gKiBEZWZpbmVzIHRoZSBjb250cmFjdCB0aGF0IGVuZ2luZSBoYW5kbGVycyBuZWVkIGZyb20gdGhlIHJ1bm5lciBsYXllcixcbiAqIGF2b2lkaW5nIGNpcmN1bGFyIGltcG9ydHMgYmV0d2VlbiBlbmdpbmUvIGFuZCBydW5uZXIvLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElFeGVjdXRpb25SdW50aW1lIHtcbiAgZ2xvYmFsU3RvcmU6IHsgZ2V0U3RhdGUoKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfTtcbiAgLyoqXG4gICAqIFRoZSByZWRhY3RlZCBtaXJyb3Igb2YgYGdsb2JhbFN0b3JlYCDigJQgcHJlc2VudCB3aGVuIHRoZSBydW4ncyBwb2xpY3lcbiAgICoga2VlcHMgb25lIChgUnVuUG9saWN5Lm1pcnJvcmA6IGEgcnVuIHdpdGggYSByZWRhY3Rpb24gcG9saWN5KSwgZWxzZSBhYnNlbnQuXG4gICAqIGBTdWJmbG93RXhlY3V0b3JgIHJlYWRzIGl0IHRvIHNlcnZlIGEgc3ViZmxvdydzIHN0YXRlICg5LjIwLjApLlxuICAgKi9cbiAgcmVkYWN0ZWRTdG9yZT86IFNoYXJlZE1lbW9yeTtcbiAgcm9vdFN0YWdlQ29udGV4dDogU3RhZ2VDb250ZXh0O1xuICBleGVjdXRpb25IaXN0b3J5OiB7IGxpc3QoKTogdW5rbm93bltdIH07XG4gIC8qKlxuICAgKiBBIGZyZXNoIHJvb3QgZnJhbWUgb24gdGhpcyBydW50aW1lIOKAlCBpdHMgc3RvcmUsIGl0cyBsb2csIHRoZSBydW4ncyBwb2xpY3lcbiAgICogYW5kIG1pcnJvciAoYEV4ZWN1dGlvblJ1bnRpbWUubmV3Um9vdGApLiBgU3ViZmxvd0V4ZWN1dG9yYCBzd2FwcyBhXG4gICAqIHN1YmZsb3cncyBzZWVkIGZyYW1lIGZvciB0aGUgZnJhbWUgaXRzIGZpcnN0IHN0YWdlIHJ1bnMgb24gd2l0aCBpdC5cbiAgICovXG4gIG5ld1Jvb3QobmFtZTogc3RyaW5nLCBpZDogc3RyaW5nKTogU3RhZ2VDb250ZXh0O1xuICBnZXRTbmFwc2hvdChvcHRpb25zPzogeyByZWRhY3Q/OiBib29sZWFuIH0pOiB7XG4gICAgc2hhcmVkU3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGV4ZWN1dGlvblRyZWU6IHVua25vd247XG4gICAgLyoqIFRoZSBjb21taXQgbG9nJ3MgZm9sZCBiYXNlIOKAlCBzZWUgYFJ1bnRpbWVTbmFwc2hvdC5pbml0aWFsU3RhdGVgLiAqL1xuICAgIGluaXRpYWxTdGF0ZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGNvbW1pdExvZzogdW5rbm93bltdO1xuICAgIHJlYWRvbmx5IGxvZ0FkZHJlc3M/OiBMb2dBZGRyZXNzO1xuICAgIC8qKiBEdWFsLWtleWVkIGJ5IHN1YmZsb3cgcGF0aCAobGFzdCBpdGVyYXRpb24pIEFORCBwZXItZXhlY3V0aW9uIG1vdW50IHJ1bnRpbWVTdGFnZUlkXG4gICAgICogIChlYWNoIGl0ZXJhdGlvbikg4oCUIHNlZSBSdW50aW1lU25hcHNob3Quc3ViZmxvd1Jlc3VsdHMgLyBzdWJmbG93LWNvbW1pdC12aXNpYmlsaXR5LiAqL1xuICAgIHN1YmZsb3dSZXN1bHRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgcmVjb3JkZXJzPzogQXJyYXk8eyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IGRhdGE6IHVua25vd24gfT47XG4gIH07XG4gIHNldFJvb3RPYmplY3QocGF0aDogc3RyaW5nW10sIGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQ7XG4gIGdldFBpcGVsaW5lcygpOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFdoZXJlIGEgbW91bnQncyBvd24gbG9nIHdyaXRlcyBhcyBpdCBsYW5kcyAoMTAuMSwgUDYpIOKAlCB0aGUgcnVuJ3Mgc2luayBhdCB0aGlzIGxvZydzIGFkZHJlc3MgcGx1cyB0aGUgbW91bnQnc1xuICAgKiBgcnVudGltZVN0YWdlSWRgLiBgdW5kZWZpbmVkYCB3aGVuIHRoaXMgcnVudGltZSdzIGxvZyB3cml0ZXMgdG8gbm8gc2luay4gYFN1YmZsb3dFeGVjdXRvcmAgaGFuZHMgaXQgdG8gdGhlXG4gICAqIG5lc3RlZCBydW50aW1lIGl0IGNvbnN0cnVjdHMuXG4gICAqL1xuICByZWNvcmRGb3I/KG1vdW50UnVudGltZVN0YWdlSWQ6IHN0cmluZywgbWV0YT86IE1ldGEpOiB1bmtub3duO1xuICAvKiogVGVsbCB0aGUgc2luayB0aGlzIHJ1bnRpbWUncyBsb2cgZW5kZWQgKDEwLjEsIFA2KSDigJQgYSBtb3VudCdzIGF0IGl0cyBleGl0LiBOby1vcCB3aXRob3V0IGEgc2luay4gKi9cbiAgY2xvc2VSZWNvcmQ/KG91dGNvbWU6IExvZ091dGNvbWUsIG1ldGE/OiBNZXRhKTogdm9pZDtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFeGVjdXRpb24gRW52aXJvbm1lbnQg4oCUIHJlYWQtb25seSwgcHJvcGFnYXRlcyB0aHJvdWdoIG5lc3RlZCBleGVjdXRvcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEV4ZWN1dGlvbkVudiDigJQgaW5mcmFzdHJ1Y3R1cmUgdmFsdWVzIHRoYXQgcHJvcGFnYXRlIHRocm91Z2ggbmVzdGVkIGV4ZWN1dG9ycy5cbiAqXG4gKiBMaWtlIGBwcm9jZXNzLmVudmAgZm9yIGZsb3djaGFydHM6IHJlYWQtb25seSwgaW5oZXJpdGVkIGJ5IGNoaWxkIGV4ZWN1dG9ycyxcbiAqIGluZnJhc3RydWN0dXJlLW9ubHkgKG5vdCBidXNpbmVzcyBsb2dpYykuXG4gKlxuICogTGl0bXVzIHRlc3Q6IENyZWF0ZWQgZXh0ZXJuYWwgdG8gdGhlIGZsb3djaGFydCArIHBhc3NlZCBpbiBmb3IgZXhlY3V0aW9uID0gZW52LlxuICogQnVzaW5lc3MgY29uZmlnIGZvciBhIHNwZWNpZmljIGZsb3djaGFydCA9IGFyZ3MgKGdldEFyZ3MoKSkuXG4gKlxuICogSW50ZW50aW9uYWxseSBhIGNsb3NlZCB0eXBlIOKAlCBub3QgZXh0ZW5zaWJsZSB0byBwcmV2ZW50IGNvdXBsaW5nIGJldHdlZW5cbiAqIHBhcmVudCBhbmQgY2hpbGQgZmxvd2NoYXJ0cy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeGVjdXRpb25FbnYge1xuICAvKipcbiAgICogQWJvcnRTaWduYWwgZm9yIGNvb3BlcmF0aXZlIGNhbmNlbGxhdGlvbiBhY3Jvc3MgbmVzdGVkIGV4ZWN1dG9ycy4gSG9ub3VyZWQgYnkgdGhlIGVuZ2luZSAoMTAuMSk6IGl0IGVuZHMgdGhlXG4gICAqIHJ1biBsaWtlIGBSdW5PcHRpb25zLnNpZ25hbGAuIFVuZGVyIGEgcnVuIHRoYXQgaGFzIGEgc2lnbmFsIG9yIGEgZGVhZGxpbmUgQU5EIGFuIGVudiwgYSBzdGFnZSByZWFkcyB0aGUgcnVuJ3NcbiAgICogT05FIGVmZmVjdGl2ZSBzaWduYWwgaGVyZSDigJQgYFJ1bk9wdGlvbnMuc2lnbmFsYCwgdGhpcyBvbmUgYW5kIHRoZSBkZWFkbGluZSdzIHRpbWVyLCBjb21wb3NlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNpZ25hbD86IEFib3J0U2lnbmFsO1xuICAvKiogVGltZW91dCBidWRnZXQgaW4gbWlsbGlzZWNvbmRzLiBSZWFkYWJsZSBvbmx5IOKAlCB0aGUgcnVuJ3MgZGVhZGxpbmUgaXMge0BsaW5rIGRlYWRsaW5lfS4gKi9cbiAgcmVhZG9ubHkgdGltZW91dE1zPzogbnVtYmVyO1xuICAvKipcbiAgICogVHJhY2UgaWRlbnRpZmllciBmb3IgZGlzdHJpYnV0ZWQgdHJhY2luZyAvIG9ic2VydmFiaWxpdHkuIFdpdGggYG9wZXJhdGlvbklkYCAob3IgYWxvbmUpIGl0IGJlY29tZXMgdGhlIHJ1bidzXG4gICAqIGBSdW5Db3JyZWxhdGlvbmA7IGl0IHdpbnMgb3ZlciB0aGUgdHJhY2UgaWQgb2YgYHRyYWNlcGFyZW50YC4gMeKAkzI1NiBwcmludGFibGUgQVNDSUkgY2hhcmFjdGVycyB3aXRoIG5vIHNwYWNlXG4gICAqIChzaW5jZSAxMC4xIGFueXRoaW5nIGVsc2UgcmVqZWN0cyB0aGUgcnVuIHdpdGggYSBgVHlwZUVycm9yYCBuYW1pbmcgdGhlIGZpZWxkIOKAlCB0aGUgaWQgcmlkZXMgZXZlcnkgZXZlbnQpO1xuICAgKiBhbiBlbXB0eSBzdHJpbmcgaXMgbm8gaWQuXG4gICAqL1xuICByZWFkb25seSB0cmFjZUlkPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGNhbGxlcidzIHVuaXQgb2Ygd29yayAoVzNDJ3MgcGFyZW50LWlkKSDigJQgcGFydCBvZiB0aGUgcnVuJ3MgYFJ1bkNvcnJlbGF0aW9uYDsgd2lucyBvdmVyIHRoZSBoZWFkZXInc1xuICAgKiBwYXJlbnQtaWQuIE5lZWRzIGEgdHJhY2U6IGB0cmFjZUlkYCBvciBgdHJhY2VwYXJlbnRgIChyZWZ1c2VkIGFsb25lKS4gU2FtZSBjaGFyYWN0ZXIgcnVsZSBhcyBgdHJhY2VJZGAuXG4gICAqL1xuICByZWFkb25seSBvcGVyYXRpb25JZD86IHN0cmluZztcbiAgLyoqXG4gICAqIEEgVzNDIGB0cmFjZXBhcmVudGAgaGVhZGVyLCB1c3VhbGx5IHN0cmFpZ2h0IGZyb20gYW4gaW5ib3VuZCByZXF1ZXN0LiBQYXJzZWQgU1RSSUNUTFkgb25jZSBwZXIgcnVuIOKAlCBhXG4gICAqIG1hbGZvcm1lZCBvbmUgcmVmdXNlcyB0aGUgcnVuIHdpdGggYSBgVHJhY2VwYXJlbnRFcnJvcmAgbmFtaW5nIHRoZSByZWFzb24gKG5ldmVyIHRoZSBoZWFkZXIpLiBTdGFnZXMgcmVhZFxuICAgKiBiYWNrIChgJGdldEVudigpYCkgZXhhY3RseSBgUnVuQ29ycmVsYXRpb24udHJhY2VwYXJlbnRgIOKAlCB0aGUgY2Fub25pY2FsIGhlYWRlciBvZiB0aGUgZWZmZWN0aXZlIGlkcyDigJQgb3Igbm9cbiAgICoga2V5IHdoZW4gdGhlIHJ1bidzIGNvcnJlbGF0aW9uIGNhcnJpZXMgbm9uZS4gQ29ycmVsYXRpb24gb25seTogbmV2ZXIgaWRlbnRpdHkgb3IgYXV0aG9yaXNhdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHRyYWNlcGFyZW50Pzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHJ1bidzIGRlYWRsaW5lLCBlcG9jaCBtaWxsaXNlY29uZHMgKDEwLjEpIOKAlCB0aGUgZWFybGllc3Qgb2YgYFJ1bk9wdGlvbnMuZGVhZGxpbmVgLCBgbm93ICsgUnVuT3B0aW9ucy50aW1lb3V0TXNgXG4gICAqIGFuZCBhIGRlYWRsaW5lIGdpdmVuIGhlcmUuIFRoZSBydW4ncyBzaWduYWwgYWJvcnRzIHdoZW4gaXQgcGFzc2VzOyBldmVyeSBhdHRlbXB0IGlzIGNhcHBlZCBieSB0aGUgdGltZSBsZWZ0LlxuICAgKiBJbmhlcml0ZWQgYnkgc3ViZmxvd3MuIFJlYWQgaXQgdGhyb3VnaCBgc2NvcGUuJGF0dGVtcHQoKS50aW1lTGVmdE1zKClgLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVhZGxpbmU/OiBudW1iZXI7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gSGFuZGxlciBEZXBlbmRlbmNpZXMgKERJIGJhZykg4oCUIHdhcyBQaXBlbGluZUNvbnRleHRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEhhbmRsZXJEZXBzIOKAlCBEZXBlbmRlbmN5IGluamVjdGlvbiBiYWcgcGFzc2VkIHRvIGFsbCBoYW5kbGVyIG1vZHVsZXMuXG4gKlxuICogUHJvdmlkZXMgc2hhcmVkIHN0YXRlIChzdGFnZU1hcCwgcnVudGltZSwgc2NvcGVGYWN0b3J5LCBldGMuKSB3aXRob3V0XG4gKiBoYW5kbGVycyBuZWVkaW5nIHRvIGltcG9ydCB0aGUgdHJhdmVyc2VyIGRpcmVjdGx5LiBBdm9pZHMgY2lyY3VsYXIgZGVwcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIYW5kbGVyRGVwczxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+IHtcbiAgc3RhZ2VNYXA6IE1hcDxzdHJpbmcsIFN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPj47XG4gIHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICBleGVjdXRpb25SdW50aW1lOiBJRXhlY3V0aW9uUnVudGltZTtcbiAgc2NvcGVGYWN0b3J5OiBTY29wZUZhY3Rvcnk8VFNjb3BlPjtcbiAgc3ViZmxvd3M/OiBSZWNvcmQ8c3RyaW5nLCB7IHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IH0+O1xuICB0aHJvdHRsaW5nRXJyb3JDaGVja2VyPzogKGVycm9yOiB1bmtub3duKSA9PiBib29sZWFuO1xuICBzdHJlYW1IYW5kbGVycz86IFN0cmVhbUhhbmRsZXJzO1xuICBzY29wZVByb3RlY3Rpb25Nb2RlOiBTY29wZVByb3RlY3Rpb25Nb2RlO1xuICByZWFkT25seUNvbnRleHQ/OiB1bmtub3duO1xuICAvKiogRXhlY3V0aW9uIGVudmlyb25tZW50IOKAlCBwcm9wYWdhdGVzIHRvIHN1YmZsb3dzIGF1dG9tYXRpY2FsbHkuICovXG4gIGV4ZWN1dGlvbkVudj86IEV4ZWN1dGlvbkVudjtcbiAgbmFycmF0aXZlR2VuZXJhdG9yOiBJQ29udHJvbEZsb3dOYXJyYXRpdmU7XG4gIGxvZ2dlcjogSUxvZ2dlcjtcbiAgc2lnbmFsPzogQWJvcnRTaWduYWw7XG4gIC8qKlxuICAgKiBUaGUgcmVzdW1lJ3Mgb25lLXNob3QgcmUtZW50cnkgKE0yKSDigJQgc2hhcmVkIGJ5IHJlZmVyZW5jZSB3aXRoIGV2ZXJ5XG4gICAqIG5lc3RlZCB0cmF2ZXJzZXIsIGxpa2UgdGhlIGV4ZWN1dGlvbiBjb3VudGVyLiBgU3ViZmxvd0V4ZWN1dG9yYCBhc2tzIGl0XG4gICAqIGF0IGVhY2ggc3ViZmxvdyBlbnRyeTogdGhlIEZJUlNUIGVudHJ5IGludG8gYSBzdWJmbG93IG9uIHRoZSBwYXVzZSBwYXRoXG4gICAqIHRha2VzIHRoYXQgc3ViZmxvdydzIGNhcHR1cmVkIHN0YXRlIChzZWVkaW5nIHRoZSBuZXN0ZWQgcnVudGltZSBpbiBwbGFjZVxuICAgKiBvZiB0aGUgaW5wdXRNYXBwZXIncyB2YWx1ZXMg4oCUIHRoZSBtYXBwZXIgc3RpbGwgcnVucyBmb3IgdGhlIHJlYWQtb25seVxuICAgKiBhcmdzKSwgaXRzIGVudHJ5IHBvaW50IGFuZCBhbnkgc2libGluZyBwYXVzZXMgd2FpdGluZyB0aGVyZTsgZXZlcnkgbGF0ZXJcbiAgICogZW50cnkgaXMgYW4gb3JkaW5hcnkgb25lLiBTZWUgYFJlc3VtZUVudHJ5YC4gVW5kZWZpbmVkIG9uIG5vcm1hbCBgcnVuKClgXG4gICAqIHBhdGhzLlxuICAgKi9cbiAgcmVzdW1lPzogUmVzdW1lRW50cnk8VE91dCwgVFNjb3BlPjtcbn1cblxuLyoqIE9wdGlvbnMgZm9yIEZsb3dDaGFydEV4ZWN1dG9yLnJ1bigpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBSdW5PcHRpb25zIHtcbiAgLyoqIEFib3J0U2lnbmFsIGZvciBjb29wZXJhdGl2ZSBjYW5jZWxsYXRpb24uIENvbXBvc2VkIHdpdGggYGVudi5zaWduYWxgIGFuZCB0aGUgZGVhZGxpbmUgKDEwLjEpLiAqL1xuICBzaWduYWw/OiBBYm9ydFNpZ25hbDtcbiAgLyoqXG4gICAqIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzOiB0aGUgcnVuJ3MgZGVhZGxpbmUgaXMgYG5vdyArIHRpbWVvdXRNc2AuIFRoZSBydW4gYWJvcnRzIHdoZW4gaXQgcGFzc2VzIChyZWplY3Rpbmcgd2l0aFxuICAgKiBgRXhlY3V0aW9uIHRpbWVkIG91dCBhZnRlciA8dGltZW91dE1zPm1zYCksIHN0YWdlcyByZWFkIGl0IGFzIGBlbnYuZGVhZGxpbmVgLCBhbmQgZXZlcnkgc3RhZ2UgcmVjb3JkcyBpdHNcbiAgICogYXR0ZW1wdCAoYFN0YWdlU25hcHNob3QuYXR0ZW1wdHNgKS4gSG9ub3VyZWQgYmVzaWRlIGEgYHNpZ25hbGAgc2luY2UgMTAuMSAoaXQgdXNlZCB0byBiZSBpZ25vcmVkIHRoZXJlKS5cbiAgICovXG4gIHRpbWVvdXRNcz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBydW4ncyBkZWFkbGluZSwgZXBvY2ggbWlsbGlzZWNvbmRzICgxMC4xKSDigJQgYERhdGUubm93KCkgKyAxMjBfMDAwYC4gU2FtZSBlZmZlY3QgYXMgYHRpbWVvdXRNc2A7IHdoZW4gYm90aFxuICAgKiBhcmUgZ2l2ZW4sIHRoZSBlYXJsaWVyIHdpbnMuIEEgZGVhZGxpbmUgYWxyZWFkeSBwYXN0IHN0b3BzIHRoZSBydW4gYmVmb3JlIGl0cyBmaXJzdCBzdGFnZS4gQSByZXN1bWVkIGxlZyBoYXNcbiAgICogaXRzIG93bjogcGFzcyBpdCBhZ2FpbiB0byBgcmVzdW1lKClgLlxuICAgKi9cbiAgZGVhZGxpbmU/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBSdW50aW1lIGlucHV0IGRhdGEgZm9yIHRoZSBwaXBlbGluZS5cbiAgICogQmVjb21lcyB0aGUgcmVhZE9ubHlDb250ZXh0IGFjY2Vzc2libGUgdmlhIGBzY29wZS5nZXRBcmdzKClgLlxuICAgKiBTdGFnZXMgY2Fubm90IG92ZXJ3cml0ZSB0aGVzZSBrZXlzIHdpdGggYHNldFZhbHVlKClgLlxuICAgKi9cbiAgaW5wdXQ/OiB1bmtub3duO1xuICAvKipcbiAgICogRXhlY3V0aW9uIGVudmlyb25tZW50IOKAlCByZWFkLW9ubHkgaW5mcmFzdHJ1Y3R1cmUgdmFsdWVzIHRoYXQgcHJvcGFnYXRlXG4gICAqIHRocm91Z2ggbmVzdGVkIGV4ZWN1dG9ycyAobGlrZSBgcHJvY2Vzcy5lbnZgIGZvciBmbG93Y2hhcnRzKS5cbiAgICogQWNjZXNzaWJsZSB2aWEgYHNjb3BlLmdldEVudigpYC4gSW5oZXJpdGVkIGJ5IHN1YmZsb3dzIGF1dG9tYXRpY2FsbHkuXG4gICAqL1xuICBlbnY/OiBFeGVjdXRpb25FbnY7XG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgbWF4aW11bSBuZXN0ZWQgYGV4ZWN1dGVOb2RlYCBkZXB0aCBmb3IgdGhpcyBydW4uXG4gICAqIERlZmF1bHRzIHRvIGBGbG93Y2hhcnRUcmF2ZXJzZXIuTUFYX0VYRUNVVEVfREVQVEhgICg1MDApLlxuICAgKlxuICAgKiBEZXB0aCBjb3VudHMgVFJFRSBuZXN0aW5nIG9ubHkg4oCUIGZvcmsgY2hpbGRyZW4sIGRlY2lkZXIvc2VsZWN0b3IgYnJhbmNoXG4gICAqIGRpc3BhdGNoLCByZWN1cnNpdmUgY29tcG9zaXRpb24uIExpbmVhciBjaGFpbnMgYW5kIGxvb3AgaXRlcmF0aW9ucyBydW5cbiAgICogb24gYSBmbGF0IHRyYW1wb2xpbmUgYW5kIG5ldmVyIGNvbnN1bWUgZGVwdGgsIHNvIHRoaXMgcmFyZWx5IG5lZWRzXG4gICAqIHJhaXNpbmcuIE11c3QgYmUgPj0gMS5cbiAgICovXG4gIG1heERlcHRoPzogbnVtYmVyO1xuICAvKipcbiAgICogT3ZlcnJpZGUgdGhlIG1heGltdW0gbG9vcCBpdGVyYXRpb25zIHBlciBub2RlIGZvciB0aGlzIHJ1biAodGhlXG4gICAqIGBDb250aW51YXRpb25SZXNvbHZlcmAgaW5maW5pdGUtbG9vcCBndWFyZCkuIERlZmF1bHRzIHRvIDEwMDAuXG4gICAqIFRoaXMgaXMgdGhlIGJpbmRpbmcgY29uc3RyYWludCBmb3IgbG9vcC1oZWF2eSBwaXBlbGluZXMg4oCUIHJhaXNlIGl0IGZvclxuICAgKiBsZWdpdGltYXRlbHkgbG9uZyBsb29wcyAoYGxvb3BUb2AgY2hhaW5zIHJ1biB3aXRoIGEgZmxhdCBzdGFjaywgc28gaGlnaFxuICAgKiB2YWx1ZXMgYXJlIHNhZmU7IG1lbW9yeSBmb3Igc3RhdGUvbmFycmF0aXZlIHN0aWxsIGdyb3dzIHBlciBpdGVyYXRpb24pLlxuICAgKiBBbHNvIGJvdW5kcyB0aGUgcnVuLXRvdGFsIGNoYWluIG9mIGZ1bmN0aW9uLWJlYXJpbmcgZHluYW1pYyBgbmV4dGBcbiAgICogY29udGludWF0aW9ucyAoZnJlc2ggbm9kZXMgcmV0dXJuZWQgZnJvbSBzdGFnZXMpIOKAlCBhIHJ1bmF3YXkgZHluYW1pY1xuICAgKiBjaGFpbiBlcnJvcnMgaW5zdGVhZCBvZiBydW5uaW5nIGZvcmV2ZXIuXG4gICAqIFByb3BhZ2F0ZXMgdG8gc3ViZmxvd3MuIE11c3QgYmUgPj0gMS5cbiAgICovXG4gIG1heEl0ZXJhdGlvbnM/OiBudW1iZXI7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRmxvdyBDb250cm9sIE5hcnJhdGl2ZSDigJQgY2Fub25pY2FsIGRlZmluaXRpb25zIGxpdmUgaW4gbWVtb3J5L3R5cGVzLnRzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IHR5cGUgeyBGbG93Q29udHJvbFR5cGUsIEZsb3dNZXNzYWdlIH07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gUnVudGltZSBTdHJ1Y3R1cmUgTWV0YWRhdGEgKHVzZWQgYnkgUnVudGltZVN0cnVjdHVyZU1hbmFnZXIpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGludGVyZmFjZSBSdW50aW1lU3RydWN0dXJlTWV0YWRhdGEge1xuICB0eXBlOiAnc3RhZ2UnIHwgJ2RlY2lkZXInIHwgJ3NlbGVjdG9yJyB8ICdmb3JrJyB8ICdzdHJlYW1pbmcnIHwgJ3N1YmZsb3cnIHwgJ2xvb3AnO1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIGlzU3ViZmxvd1Jvb3Q/OiBib29sZWFuO1xuICBzdWJmbG93TmFtZT86IHN0cmluZztcbiAgLyoqIFRydWUgZm9yIGFuIGBhZGRQYXJhbGxlbEZvckVhY2hgIGZhbi1vdXQgKHR5cGUgc3RheXMgYCdmb3JrJ2ApLiAqL1xuICBpc0R5bmFtaWNQYXJhbGxlbD86IGJvb2xlYW47XG4gIGlzUGFyYWxsZWxDaGlsZD86IGJvb2xlYW47XG4gIHBhcmFsbGVsR3JvdXBJZD86IHN0cmluZztcbiAgbG9vcFRhcmdldD86IHN0cmluZztcbiAgaXNEeW5hbWljPzogYm9vbGVhbjtcbiAgaXNMb29wUmVmZXJlbmNlPzogYm9vbGVhbjtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG59XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTm9kZSBSZXN1bHRcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgdHlwZSBOb2RlUmVzdWx0VHlwZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgcmVzdWx0OiB1bmtub3duO1xuICBpc0Vycm9yPzogYm9vbGVhbjtcbn07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRXhlY3V0aW9uIFJlc3BvbnNlXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IHR5cGUgQnJhbmNoUmVzdWx0ID0ge1xuICByZXN1bHQ6IHN0cmluZyB8IEVycm9yO1xuICBpc0Vycm9yOiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgQnJhbmNoUmVzdWx0cyA9IHsgW2JyYW5jaElkOiBzdHJpbmddOiBCcmFuY2hSZXN1bHQgfTtcbmV4cG9ydCB0eXBlIFRyYXZlcnNhbFJlc3VsdCA9IEJyYW5jaFJlc3VsdHMgfCBzdHJpbmcgfCBFcnJvcjtcblxuLyoqIFJldHVybmVkIGJ5IHJ1bigpL3Jlc3VtZSgpIHdoZW4gZXhlY3V0aW9uIHBhdXNlcy4gKi9cbmV4cG9ydCB0eXBlIFBhdXNlZFJlc3VsdCA9IHtcbiAgcmVhZG9ubHkgcGF1c2VkOiB0cnVlO1xuICByZWFkb25seSBjaGVja3BvaW50OiBpbXBvcnQoJy4uL3BhdXNlL3R5cGVzLmpzJykuRmxvd2NoYXJ0Q2hlY2twb2ludDtcbn07XG5cbi8qKiBGdWxsIHJldHVybiB0eXBlIG9mIEZsb3dDaGFydEV4ZWN1dG9yLnJ1bigpIGFuZCByZXN1bWUoKS4gKi9cbmV4cG9ydCB0eXBlIEV4ZWN1dG9yUmVzdWx0ID0gVHJhdmVyc2FsUmVzdWx0IHwgUGF1c2VkUmVzdWx0O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNlcmlhbGl6ZWQgUGlwZWxpbmUgU3RydWN0dXJlIChmb3IgdmlzdWFsaXphdGlvbilcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlcmlhbGl6ZWRQaXBlbGluZU5vZGUge1xuICBuYW1lOiBzdHJpbmc7XG4gIGlkOiBzdHJpbmc7XG4gIHR5cGU/OlxuICAgIHwgJ3N0YWdlJ1xuICAgIHwgJ2RlY2lkZXInXG4gICAgfCAnc2VsZWN0b3InXG4gICAgfCAnZm9yaydcbiAgICB8ICdzdHJlYW1pbmcnXG4gICAgfCAnc3ViZmxvdydcbiAgICB8ICdsb29wJ1xuICAgIHwgJ3VzZXInXG4gICAgfCAndG9vbCdcbiAgICB8ICdmdW5jdGlvbidcbiAgICB8ICdzZXF1ZW5jZSc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBjaGlsZHJlbj86IFNlcmlhbGl6ZWRQaXBlbGluZU5vZGVbXTtcbiAgbmV4dD86IFNlcmlhbGl6ZWRQaXBlbGluZU5vZGU7XG4gIGJyYW5jaGVzPzogUmVjb3JkPHN0cmluZywgU2VyaWFsaXplZFBpcGVsaW5lTm9kZT47XG4gIGhhc0RlY2lkZXI/OiBib29sZWFuO1xuICBoYXNTZWxlY3Rvcj86IGJvb2xlYW47XG4gIGhhc1N1YnRyZWU/OiBib29sZWFuO1xuICBpc1N0cmVhbWluZz86IGJvb2xlYW47XG4gIHN0cmVhbUlkPzogc3RyaW5nO1xuICBpc1N1YmZsb3dSb290PzogYm9vbGVhbjtcbiAgc3ViZmxvd0lkPzogc3RyaW5nO1xuICBzdWJmbG93TmFtZT86IHN0cmluZztcbiAgbG9vcFRhcmdldD86IHN0cmluZztcbiAgaXNMb29wUmVmZXJlbmNlPzogYm9vbGVhbjtcbiAgaXNQYXJhbGxlbENoaWxkPzogYm9vbGVhbjtcbiAgcGFyYWxsZWxHcm91cElkPzogc3RyaW5nO1xuICBpc0R5bmFtaWM/OiBib29sZWFuO1xuICAvKiogV2hlbiB0cnVlLCB0aGlzIHN0YWdlIGNhbiBwYXVzZSBleGVjdXRpb24gKFBhdXNhYmxlSGFuZGxlciBwYXR0ZXJuKS4gKi9cbiAgaXNQYXVzYWJsZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUcnVlIGZvciBhbiBgYWRkUGFyYWxsZWxGb3JFYWNoYCBmYW4tb3V0IOKAlCBicmFuY2ggQ09VTlQgZGVjaWRlZCBhdCBydW50aW1lXG4gICAqIGZyb20gdGhlIHBheWxvYWQuIEEgZmxhZywgbm90IGEgdHlwZTogYHR5cGVgIHN0YXlzIGAnZm9yaydgIHNvIGV2ZXJ5XG4gICAqIGV4aXN0aW5nIGNvbnN1bWVyIHJlbmRlcnMgaXQgY29ycmVjdGx5IChpdCBJUyBhIGZhbi1vdXQpLCBhbmQgYSBjb25zdW1lclxuICAgKiB0aGF0IHdhbnRzIHRvIHNheSBcIm9uZSBicmFuY2ggcGVyIGl0ZW1cIiBjYW4gcmVhZCB0aGlzLlxuICAgKi9cbiAgaXNEeW5hbWljUGFyYWxsZWw/OiBib29sZWFuO1xuICAvKipcbiAgICogVG90YWwgYXR0ZW1wdHMgdGhpcyBzdGFnZSdzIGZ1bmN0aW9uIG1heSBydW4sIGZyb20gaXRzIGRlY2xhcmVkXG4gICAqIHtAbGluayBSZXRyeVBvbGljeX0uIFByZXNlbnQgb25seSB3aGVuIGEgcG9saWN5IHdhcyBkZWNsYXJlZC4gVGhlIENPVU5UXG4gICAqIG9ubHkg4oCUIGBiYWNrb2ZmTXNgIGFuZCBgcmV0cnlPbmAgY2FuIGJlIGZ1bmN0aW9ucywgd2hpY2ggYSBKU09OLXNhZmUgc3BlY1xuICAgKiBjYW5ub3QgY2FycnkuXG4gICAqL1xuICByZXRyeUF0dGVtcHRzPzogbnVtYmVyO1xuICAvKipcbiAgICogRGVjbGFyZWQgdGFncyAoOS4yMS4wKSDigJQgdGhlIG5hbWVzIHRoZSBhdXRob3IgcHV0IG9uIHRoaXMgc3RhZ2UgYXQgYnVpbGRcbiAgICogdGltZSwgY29waWVkIGFzLWlzLiBGcmVlIHN0cmluZ3M7IGZvb3RwcmludGpzIGFzc2lnbnMgdGhlbSBubyBtZWFuaW5nLlxuICAgKiBBYnNlbnQgd2hlbiB0aGUgc3RhZ2UgZGVjbGFyZXMgbm9uZS5cbiAgICovXG4gIHRhZ3M/OiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBGbG93Q2hhcnQgaXMgZGVmaW5lZCBpbiBgLi4vYnVpbGRlci90eXBlcy50c2AuIFRoZSBlbmdpbmUgbGF5ZXIgY29uc3VtZXMgaXRcbi8vIHZpYSBpbXBvcnQgZnJvbSB0aGVyZS4gQSBkdXBsaWNhdGUgbWluaW1hbCBkZWZpbml0aW9uIHByZXZpb3VzbHkgbGl2ZWQgaGVyZVxuLy8gYW5kIGNhdXNlZCBUUyBjb25mdXNpb24gYXQgY29tcG9zaXRpb24gYm91bmRhcmllcyAoQ29tcG9zYWJsZVJ1bm5lciB2c1xuLy8gYWRkU3ViRmxvd0NoYXJ0IHBhcmFtZXRlcikuIFNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggbm93IGxpdmVzIGluIGJ1aWxkZXIvLlxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKiBBbGlhcyBmb3IgU2VyaWFsaXplZFBpcGVsaW5lTm9kZSB1c2VkIGFzIGZ1bGwgc3RydWN0dXJlICovXG5leHBvcnQgdHlwZSBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUgPSBTZXJpYWxpemVkUGlwZWxpbmVOb2RlICYge1xuICBicmFuY2hJZHM/OiBzdHJpbmdbXTtcbiAgc3ViZmxvd1N0cnVjdHVyZT86IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZTtcbiAgaXRlcmF0aW9uQ291bnQ/OiBudW1iZXI7XG59O1xuIl19
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { AttemptCategory } from '../attempt/types.js';
|
|
2
|
+
/** Safe context for the failure that escaped a native run; never the exception itself. */
|
|
3
|
+
export interface TerminalFailureContext {
|
|
4
|
+
readonly category: AttemptCategory;
|
|
5
|
+
/** Absent when no native stage owns this failure (for example input admission or run retention). */
|
|
6
|
+
readonly stage?: {
|
|
7
|
+
readonly runId: string;
|
|
8
|
+
readonly runtimeStageId: string;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* @internal One execution chain's failure ownership, not an error history.
|
|
13
|
+
* Sequential frames share it; forks and subflows do not. Only an explicitly
|
|
14
|
+
* selected escaping rejection may transfer ownership to its parent chain.
|
|
15
|
+
* Raw identity lives in a private slot and is released when the leg settles.
|
|
16
|
+
*/
|
|
17
|
+
export declare class NativeFailureState {
|
|
18
|
+
#private;
|
|
19
|
+
get result(): TerminalFailureContext | undefined;
|
|
20
|
+
capture(error: unknown, category: AttemptCategory, stage: NonNullable<TerminalFailureContext['stage']>): void;
|
|
21
|
+
/** A runner already classified this exact native failure before it was served. */
|
|
22
|
+
owns(error: unknown): boolean;
|
|
23
|
+
adopt(child: NativeFailureState, error: unknown): void;
|
|
24
|
+
/** Publish at the run event boundary; keep ownership until executor settlement. */
|
|
25
|
+
announce(error: unknown): TerminalFailureContext;
|
|
26
|
+
finish(error: unknown): void;
|
|
27
|
+
/** Success or pause has no terminal failure. Also closes contained branch ownership. */
|
|
28
|
+
complete(): void;
|
|
29
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
const UNKNOWN = Object.freeze({ category: 'unknown' });
|
|
2
|
+
/**
|
|
3
|
+
* @internal One execution chain's failure ownership, not an error history.
|
|
4
|
+
* Sequential frames share it; forks and subflows do not. Only an explicitly
|
|
5
|
+
* selected escaping rejection may transfer ownership to its parent chain.
|
|
6
|
+
* Raw identity lives in a private slot and is released when the leg settles.
|
|
7
|
+
*/
|
|
8
|
+
export class NativeFailureState {
|
|
9
|
+
#pending;
|
|
10
|
+
#result;
|
|
11
|
+
#sealed = false;
|
|
12
|
+
get result() {
|
|
13
|
+
return this.#result;
|
|
14
|
+
}
|
|
15
|
+
capture(error, category, stage) {
|
|
16
|
+
if (this.#sealed)
|
|
17
|
+
return;
|
|
18
|
+
this.#pending = {
|
|
19
|
+
error,
|
|
20
|
+
context: Object.freeze({
|
|
21
|
+
category,
|
|
22
|
+
stage: Object.freeze({ runId: stage.runId, runtimeStageId: stage.runtimeStageId }),
|
|
23
|
+
}),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/** A runner already classified this exact native failure before it was served. */
|
|
27
|
+
owns(error) {
|
|
28
|
+
return this.#pending !== undefined && Object.is(this.#pending.error, error);
|
|
29
|
+
}
|
|
30
|
+
adopt(child, error) {
|
|
31
|
+
if (!this.#sealed)
|
|
32
|
+
this.#pending = child.owns(error) ? child.#pending : undefined;
|
|
33
|
+
child.complete();
|
|
34
|
+
}
|
|
35
|
+
/** Publish at the run event boundary; keep ownership until executor settlement. */
|
|
36
|
+
announce(error) {
|
|
37
|
+
if (this.#sealed)
|
|
38
|
+
return this.#result ?? UNKNOWN;
|
|
39
|
+
const pending = this.#pending;
|
|
40
|
+
const context = pending && Object.is(pending.error, error) ? pending.context : UNKNOWN;
|
|
41
|
+
this.#result = context;
|
|
42
|
+
return context;
|
|
43
|
+
}
|
|
44
|
+
finish(error) {
|
|
45
|
+
if (this.#sealed)
|
|
46
|
+
return;
|
|
47
|
+
this.announce(error);
|
|
48
|
+
this.#pending = undefined;
|
|
49
|
+
this.#sealed = true;
|
|
50
|
+
}
|
|
51
|
+
/** Success or pause has no terminal failure. Also closes contained branch ownership. */
|
|
52
|
+
complete() {
|
|
53
|
+
if (this.#sealed)
|
|
54
|
+
return;
|
|
55
|
+
this.#pending = undefined;
|
|
56
|
+
this.#result = undefined;
|
|
57
|
+
this.#sealed = true;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVybWluYWxGYWlsdXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9lcnJvcnMvdGVybWluYWxGYWlsdXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVlBLE1BQU0sT0FBTyxHQUEyQixNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFFL0U7Ozs7O0dBS0c7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBQzdCLFFBQVEsQ0FBdUQ7SUFDL0QsT0FBTyxDQUEwQjtJQUNqQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBRWhCLElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQWMsRUFBRSxRQUF5QixFQUFFLEtBQW1EO1FBQ3BHLElBQUksSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBQ3pCLElBQUksQ0FBQyxRQUFRLEdBQUc7WUFDZCxLQUFLO1lBQ0wsT0FBTyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUM7Z0JBQ3JCLFFBQVE7Z0JBQ1IsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2FBQ25GLENBQUM7U0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELGtGQUFrRjtJQUNsRixJQUFJLENBQUMsS0FBYztRQUNqQixPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUF5QixFQUFFLEtBQWM7UUFDN0MsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDbEYsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRCxtRkFBbUY7SUFDbkYsUUFBUSxDQUFDLEtBQWM7UUFDckIsSUFBSSxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU8sSUFBSSxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUM7UUFDakQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUM5QixNQUFNLE9BQU8sR0FBRyxPQUFPLElBQUksTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDdkYsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFjO1FBQ25CLElBQUksSUFBSSxDQUFDLE9BQU87WUFBRSxPQUFPO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7UUFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDdEIsQ0FBQztJQUVELHdGQUF3RjtJQUN4RixRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU87UUFDekIsSUFBSSxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7UUFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUM7UUFDekIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDdEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBdHRlbXB0Q2F0ZWdvcnkgfSBmcm9tICcuLi9hdHRlbXB0L3R5cGVzLmpzJztcblxuLyoqIFNhZmUgY29udGV4dCBmb3IgdGhlIGZhaWx1cmUgdGhhdCBlc2NhcGVkIGEgbmF0aXZlIHJ1bjsgbmV2ZXIgdGhlIGV4Y2VwdGlvbiBpdHNlbGYuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlcm1pbmFsRmFpbHVyZUNvbnRleHQge1xuICByZWFkb25seSBjYXRlZ29yeTogQXR0ZW1wdENhdGVnb3J5O1xuICAvKiogQWJzZW50IHdoZW4gbm8gbmF0aXZlIHN0YWdlIG93bnMgdGhpcyBmYWlsdXJlIChmb3IgZXhhbXBsZSBpbnB1dCBhZG1pc3Npb24gb3IgcnVuIHJldGVudGlvbikuICovXG4gIHJlYWRvbmx5IHN0YWdlPzoge1xuICAgIHJlYWRvbmx5IHJ1bklkOiBzdHJpbmc7XG4gICAgcmVhZG9ubHkgcnVudGltZVN0YWdlSWQ6IHN0cmluZztcbiAgfTtcbn1cblxuY29uc3QgVU5LTk9XTjogVGVybWluYWxGYWlsdXJlQ29udGV4dCA9IE9iamVjdC5mcmVlemUoeyBjYXRlZ29yeTogJ3Vua25vd24nIH0pO1xuXG4vKipcbiAqIEBpbnRlcm5hbCBPbmUgZXhlY3V0aW9uIGNoYWluJ3MgZmFpbHVyZSBvd25lcnNoaXAsIG5vdCBhbiBlcnJvciBoaXN0b3J5LlxuICogU2VxdWVudGlhbCBmcmFtZXMgc2hhcmUgaXQ7IGZvcmtzIGFuZCBzdWJmbG93cyBkbyBub3QuIE9ubHkgYW4gZXhwbGljaXRseVxuICogc2VsZWN0ZWQgZXNjYXBpbmcgcmVqZWN0aW9uIG1heSB0cmFuc2ZlciBvd25lcnNoaXAgdG8gaXRzIHBhcmVudCBjaGFpbi5cbiAqIFJhdyBpZGVudGl0eSBsaXZlcyBpbiBhIHByaXZhdGUgc2xvdCBhbmQgaXMgcmVsZWFzZWQgd2hlbiB0aGUgbGVnIHNldHRsZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBOYXRpdmVGYWlsdXJlU3RhdGUge1xuICAjcGVuZGluZz86IHsgZXJyb3I6IHVua25vd247IGNvbnRleHQ6IFRlcm1pbmFsRmFpbHVyZUNvbnRleHQgfTtcbiAgI3Jlc3VsdD86IFRlcm1pbmFsRmFpbHVyZUNvbnRleHQ7XG4gICNzZWFsZWQgPSBmYWxzZTtcblxuICBnZXQgcmVzdWx0KCk6IFRlcm1pbmFsRmFpbHVyZUNvbnRleHQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLiNyZXN1bHQ7XG4gIH1cblxuICBjYXB0dXJlKGVycm9yOiB1bmtub3duLCBjYXRlZ29yeTogQXR0ZW1wdENhdGVnb3J5LCBzdGFnZTogTm9uTnVsbGFibGU8VGVybWluYWxGYWlsdXJlQ29udGV4dFsnc3RhZ2UnXT4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy4jc2VhbGVkKSByZXR1cm47XG4gICAgdGhpcy4jcGVuZGluZyA9IHtcbiAgICAgIGVycm9yLFxuICAgICAgY29udGV4dDogT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIGNhdGVnb3J5LFxuICAgICAgICBzdGFnZTogT2JqZWN0LmZyZWV6ZSh7IHJ1bklkOiBzdGFnZS5ydW5JZCwgcnVudGltZVN0YWdlSWQ6IHN0YWdlLnJ1bnRpbWVTdGFnZUlkIH0pLFxuICAgICAgfSksXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBBIHJ1bm5lciBhbHJlYWR5IGNsYXNzaWZpZWQgdGhpcyBleGFjdCBuYXRpdmUgZmFpbHVyZSBiZWZvcmUgaXQgd2FzIHNlcnZlZC4gKi9cbiAgb3ducyhlcnJvcjogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLiNwZW5kaW5nICE9PSB1bmRlZmluZWQgJiYgT2JqZWN0LmlzKHRoaXMuI3BlbmRpbmcuZXJyb3IsIGVycm9yKTtcbiAgfVxuXG4gIGFkb3B0KGNoaWxkOiBOYXRpdmVGYWlsdXJlU3RhdGUsIGVycm9yOiB1bmtub3duKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLiNzZWFsZWQpIHRoaXMuI3BlbmRpbmcgPSBjaGlsZC5vd25zKGVycm9yKSA/IGNoaWxkLiNwZW5kaW5nIDogdW5kZWZpbmVkO1xuICAgIGNoaWxkLmNvbXBsZXRlKCk7XG4gIH1cblxuICAvKiogUHVibGlzaCBhdCB0aGUgcnVuIGV2ZW50IGJvdW5kYXJ5OyBrZWVwIG93bmVyc2hpcCB1bnRpbCBleGVjdXRvciBzZXR0bGVtZW50LiAqL1xuICBhbm5vdW5jZShlcnJvcjogdW5rbm93bik6IFRlcm1pbmFsRmFpbHVyZUNvbnRleHQge1xuICAgIGlmICh0aGlzLiNzZWFsZWQpIHJldHVybiB0aGlzLiNyZXN1bHQgPz8gVU5LTk9XTjtcbiAgICBjb25zdCBwZW5kaW5nID0gdGhpcy4jcGVuZGluZztcbiAgICBjb25zdCBjb250ZXh0ID0gcGVuZGluZyAmJiBPYmplY3QuaXMocGVuZGluZy5lcnJvciwgZXJyb3IpID8gcGVuZGluZy5jb250ZXh0IDogVU5LTk9XTjtcbiAgICB0aGlzLiNyZXN1bHQgPSBjb250ZXh0O1xuICAgIHJldHVybiBjb250ZXh0O1xuICB9XG5cbiAgZmluaXNoKGVycm9yOiB1bmtub3duKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI3NlYWxlZCkgcmV0dXJuO1xuICAgIHRoaXMuYW5ub3VuY2UoZXJyb3IpO1xuICAgIHRoaXMuI3BlbmRpbmcgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy4jc2VhbGVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBTdWNjZXNzIG9yIHBhdXNlIGhhcyBubyB0ZXJtaW5hbCBmYWlsdXJlLiBBbHNvIGNsb3NlcyBjb250YWluZWQgYnJhbmNoIG93bmVyc2hpcC4gKi9cbiAgY29tcGxldGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI3NlYWxlZCkgcmV0dXJuO1xuICAgIHRoaXMuI3BlbmRpbmcgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy4jcmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuI3NlYWxlZCA9IHRydWU7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* filter/evaluator -- Prisma-style filter evaluator for decision rules.
|
|
3
3
|
*
|
|
4
4
|
* Pure function. Takes a WhereFilter, a value getter, and a redaction checker.
|
|
5
5
|
* Evaluates each condition, records the result, returns matched/conditions.
|
|
6
6
|
*
|
|
7
7
|
* All keys in the filter are ANDed (all must match for the rule to match).
|
|
8
8
|
* Decoupled from ScopeFacade — receives callbacks, not scope.
|
|
9
|
+
*
|
|
10
|
+
* A LEAF module of its own (P2, 10.1): `decide()` (decide/) and the attempt rule table (attempt/decision.ts) share
|
|
11
|
+
* this one law, and neither may reach the other's dependencies through it. In decide/ it made `attempt/` reach
|
|
12
|
+
* `scope/` (decide.ts imports the scope runtime), so a `scope → attempt` edge — `scope.$call` — closed a module
|
|
13
|
+
* cycle.
|
|
9
14
|
*/
|
|
10
|
-
import type { FilterCondition, WhereFilter } from '
|
|
15
|
+
import type { FilterCondition, WhereFilter } from '../decide/types.js';
|
|
11
16
|
/**
|
|
12
17
|
* Evaluates a Prisma-style filter against scope values.
|
|
13
18
|
*
|