footprintjs 9.41.0 → 9.43.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 +7 -3
- package/CLAUDE.md +12 -11
- package/README.md +7 -3
- package/dist/advanced.js +4 -3
- package/dist/esm/advanced.d.ts +3 -1
- package/dist/esm/advanced.js +3 -2
- package/dist/esm/index.d.ts +3 -3
- package/dist/esm/index.js +1 -1
- package/dist/esm/lib/builder/FlowChartBuilder.d.ts +14 -4
- package/dist/esm/lib/builder/FlowChartBuilder.js +25 -7
- package/dist/esm/lib/builder/types.d.ts +2 -3
- package/dist/esm/lib/builder/types.js +1 -1
- package/dist/esm/lib/capture/freeze.d.ts +5 -5
- package/dist/esm/lib/capture/freeze.js +5 -4
- package/dist/esm/lib/contract/index.d.ts +5 -8
- package/dist/esm/lib/contract/index.js +5 -10
- package/dist/esm/lib/contract/types.d.ts +3 -81
- package/dist/esm/lib/contract/types.js +4 -5
- package/dist/esm/lib/decide/decide.js +13 -46
- package/dist/esm/lib/detach/drivers/batch.d.ts +9 -0
- package/dist/esm/lib/detach/drivers/batch.js +79 -0
- package/dist/esm/lib/detach/drivers/microtaskBatch.d.ts +17 -20
- package/dist/esm/lib/detach/drivers/microtaskBatch.js +20 -72
- package/dist/esm/lib/detach/drivers/setImmediate.js +10 -41
- package/dist/esm/lib/detach/drivers/setTimeout.js +3 -36
- package/dist/esm/lib/detach/types.d.ts +17 -20
- package/dist/esm/lib/detach/types.js +9 -11
- package/dist/esm/lib/engine/handlers/ChildrenExecutor.js +7 -3
- package/dist/esm/lib/engine/handlers/DeciderHandler.js +7 -5
- package/dist/esm/lib/engine/handlers/ParallelForEachHandler.d.ts +2 -3
- package/dist/esm/lib/engine/handlers/ParallelForEachHandler.js +21 -24
- package/dist/esm/lib/engine/handlers/SelectorHandler.d.ts +2 -4
- package/dist/esm/lib/engine/handlers/SelectorHandler.js +15 -7
- package/dist/esm/lib/engine/handlers/StageRunner.js +11 -22
- package/dist/esm/lib/engine/handlers/SubflowExecutor.js +32 -17
- package/dist/esm/lib/engine/handlers/SubflowInputMapper.d.ts +4 -3
- package/dist/esm/lib/engine/handlers/SubflowInputMapper.js +19 -8
- package/dist/esm/lib/engine/handlers/breakFlag.d.ts +3 -0
- package/dist/esm/lib/engine/handlers/breakFlag.js +9 -0
- package/dist/esm/lib/engine/handlers/commitStage.js +3 -3
- package/dist/esm/lib/engine/handlers/servedPause.d.ts +15 -0
- package/dist/esm/lib/engine/handlers/servedPause.js +26 -0
- package/dist/esm/lib/engine/handlers/stageError.d.ts +20 -0
- package/dist/esm/lib/engine/handlers/stageError.js +28 -0
- package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +6 -1
- package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +40 -67
- package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.d.ts +3 -3
- package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.js +4 -8
- package/dist/esm/lib/engine/narrative/NarrativeFlowRecorder.d.ts +7 -1
- package/dist/esm/lib/engine/narrative/NarrativeFlowRecorder.js +28 -48
- package/dist/esm/lib/engine/narrative/formatting/resolveText.d.ts +6 -0
- package/dist/esm/lib/engine/narrative/formatting/resolveText.js +9 -0
- package/dist/esm/lib/engine/narrative/formatting/sentences.d.ts +16 -0
- package/dist/esm/lib/engine/narrative/formatting/sentences.js +50 -0
- package/dist/esm/lib/engine/narrative/narrativeTypes.d.ts +2 -0
- package/dist/esm/lib/engine/narrative/narrativeTypes.js +1 -1
- package/dist/esm/lib/engine/narrative/recorders/RLENarrativeFlowRecorder.js +3 -7
- package/dist/esm/lib/engine/narrative/recorders/SeparateNarrativeFlowRecorder.js +3 -7
- package/dist/esm/lib/engine/narrative/recorders/WindowedNarrativeFlowRecorder.d.ts +0 -1
- package/dist/esm/lib/engine/narrative/recorders/WindowedNarrativeFlowRecorder.js +5 -10
- package/dist/esm/lib/engine/narrative/types.d.ts +18 -8
- package/dist/esm/lib/engine/narrative/types.js +1 -1
- package/dist/esm/lib/engine/traversal/FlowchartTraverser.d.ts +8 -3
- package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +64 -33
- package/dist/esm/lib/engine/types.d.ts +4 -0
- package/dist/esm/lib/engine/types.js +1 -1
- package/dist/esm/lib/memory/DiagnosticCollector.d.ts +12 -0
- package/dist/esm/lib/memory/DiagnosticCollector.js +53 -9
- package/dist/esm/lib/memory/EventLog.d.ts +9 -0
- package/dist/esm/lib/memory/EventLog.js +24 -1
- package/dist/esm/lib/memory/StageContext.d.ts +22 -1
- package/dist/esm/lib/memory/StageContext.js +61 -7
- package/dist/esm/lib/memory/eventPosition.d.ts +18 -0
- package/dist/esm/lib/memory/eventPosition.js +2 -0
- package/dist/esm/lib/memory/merge.d.ts +2 -1
- package/dist/esm/lib/memory/merge.js +15 -4
- package/dist/esm/lib/memory/redaction.d.ts +339 -17
- package/dist/esm/lib/memory/redaction.js +993 -32
- package/dist/esm/lib/observer-queue/deferredDispatcher.d.ts +2 -2
- package/dist/esm/lib/observer-queue/deferredDispatcher.js +3 -3
- package/dist/esm/lib/observer-queue/index.d.ts +7 -4
- package/dist/esm/lib/observer-queue/index.js +8 -5
- package/dist/esm/lib/pause/index.d.ts +1 -1
- package/dist/esm/lib/pause/index.js +1 -1
- package/dist/esm/lib/pause/record.js +19 -1
- package/dist/esm/lib/pause/types.d.ts +20 -0
- package/dist/esm/lib/pause/types.js +1 -1
- package/dist/esm/lib/reactive/createTypedScope.js +20 -21
- package/dist/esm/lib/reactive/index.d.ts +1 -1
- package/dist/esm/lib/reactive/index.js +2 -2
- package/dist/esm/lib/reactive/types.d.ts +0 -3
- package/dist/esm/lib/reactive/types.js +1 -23
- package/dist/esm/lib/recorder/EmitRecorder.d.ts +9 -0
- package/dist/esm/lib/recorder/EmitRecorder.js +1 -1
- package/dist/esm/lib/recorder/InOutRecorder.d.ts +5 -2
- package/dist/esm/lib/recorder/InOutRecorder.js +6 -3
- package/dist/esm/lib/runner/DeferredObserverTier.d.ts +4 -3
- package/dist/esm/lib/runner/DeferredObserverTier.js +5 -4
- package/dist/esm/lib/runner/ExecutionRuntime.d.ts +3 -0
- package/dist/esm/lib/runner/ExecutionRuntime.js +2 -1
- package/dist/esm/lib/runner/FlowChartExecutor.d.ts +11 -9
- package/dist/esm/lib/runner/FlowChartExecutor.js +18 -10
- package/dist/esm/lib/runner/attach.d.ts +3 -1
- package/dist/esm/lib/runner/attach.js +21 -31
- package/dist/esm/lib/runner/checkpoint.d.ts +3 -1
- package/dist/esm/lib/runner/checkpoint.js +4 -1
- package/dist/esm/lib/scope/ScopeFacade.d.ts +13 -1
- package/dist/esm/lib/scope/ScopeFacade.js +60 -39
- package/dist/esm/lib/scope/protection/createProtectedScope.js +5 -2
- package/dist/esm/lib/scope/protection/readonlyInput.d.ts +16 -6
- package/dist/esm/lib/scope/protection/readonlyInput.js +72 -9
- package/dist/esm/lib/scope/providers/baseStateCompatible.d.ts +10 -24
- package/dist/esm/lib/scope/providers/baseStateCompatible.js +35 -35
- package/dist/esm/lib/scope/providers/providers.d.ts +2 -2
- package/dist/esm/lib/scope/providers/providers.js +3 -3
- package/dist/esm/lib/scope/providers/resolve.js +2 -2
- package/dist/esm/lib/scope/providers/types.d.ts +4 -2
- package/dist/esm/lib/scope/providers/types.js +1 -1
- package/dist/esm/lib/scope/recorders/MetricRecorder.d.ts +2 -3
- package/dist/esm/lib/scope/recorders/MetricRecorder.js +11 -14
- package/dist/esm/lib/scope/runtime.d.ts +48 -0
- package/dist/esm/lib/scope/runtime.js +60 -0
- package/dist/esm/lib/scope/state/zod/defineScopeFromZod.d.ts +2 -2
- package/dist/esm/lib/scope/state/zod/defineScopeFromZod.js +17 -6
- package/dist/esm/lib/scope/state/zod/resolver.js +3 -15
- package/dist/esm/lib/scope/state/zod/scopeFactory.d.ts +7 -3
- package/dist/esm/lib/scope/state/zod/scopeFactory.js +57 -22
- package/dist/esm/lib/scope/state/zod/utils/validateHelper.d.ts +27 -18
- package/dist/esm/lib/scope/state/zod/utils/validateHelper.js +66 -67
- package/dist/esm/recorders.d.ts +3 -0
- package/dist/esm/recorders.js +1 -1
- package/dist/index.js +1 -1
- package/dist/lib/builder/FlowChartBuilder.js +25 -7
- package/dist/lib/builder/types.js +1 -1
- package/dist/lib/capture/freeze.js +5 -4
- package/dist/lib/contract/index.js +6 -13
- package/dist/lib/contract/types.js +4 -5
- package/dist/lib/decide/decide.js +13 -46
- package/dist/lib/detach/drivers/batch.js +83 -0
- package/dist/lib/detach/drivers/microtaskBatch.js +20 -72
- package/dist/lib/detach/drivers/setImmediate.js +10 -41
- package/dist/lib/detach/drivers/setTimeout.js +3 -36
- package/dist/lib/detach/types.js +9 -11
- package/dist/lib/engine/handlers/ChildrenExecutor.js +7 -3
- package/dist/lib/engine/handlers/DeciderHandler.js +7 -5
- package/dist/lib/engine/handlers/ParallelForEachHandler.js +21 -24
- package/dist/lib/engine/handlers/SelectorHandler.js +15 -7
- package/dist/lib/engine/handlers/StageRunner.js +11 -22
- package/dist/lib/engine/handlers/SubflowExecutor.js +32 -17
- package/dist/lib/engine/handlers/SubflowInputMapper.js +19 -8
- package/dist/lib/engine/handlers/breakFlag.js +13 -0
- package/dist/lib/engine/handlers/commitStage.js +2 -2
- package/dist/lib/engine/handlers/servedPause.js +30 -0
- package/dist/lib/engine/handlers/stageError.js +34 -0
- package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +40 -67
- package/dist/lib/engine/narrative/FlowRecorderDispatcher.js +4 -8
- package/dist/lib/engine/narrative/NarrativeFlowRecorder.js +28 -48
- package/dist/lib/engine/narrative/formatting/resolveText.js +13 -0
- package/dist/lib/engine/narrative/formatting/sentences.js +63 -0
- package/dist/lib/engine/narrative/narrativeTypes.js +1 -1
- package/dist/lib/engine/narrative/recorders/RLENarrativeFlowRecorder.js +3 -7
- package/dist/lib/engine/narrative/recorders/SeparateNarrativeFlowRecorder.js +3 -7
- package/dist/lib/engine/narrative/recorders/WindowedNarrativeFlowRecorder.js +5 -10
- package/dist/lib/engine/narrative/types.js +1 -1
- package/dist/lib/engine/traversal/FlowchartTraverser.js +64 -33
- package/dist/lib/engine/types.js +1 -1
- package/dist/lib/memory/DiagnosticCollector.js +53 -9
- package/dist/lib/memory/EventLog.js +24 -1
- package/dist/lib/memory/StageContext.js +61 -7
- package/dist/lib/memory/eventPosition.js +3 -0
- package/dist/lib/memory/merge.js +15 -4
- package/dist/lib/memory/redaction.js +997 -33
- package/dist/lib/observer-queue/deferredDispatcher.js +3 -3
- package/dist/lib/observer-queue/index.js +8 -5
- package/dist/lib/pause/index.js +1 -1
- package/dist/lib/pause/record.js +19 -1
- package/dist/lib/pause/types.js +1 -1
- package/dist/lib/reactive/createTypedScope.js +19 -20
- package/dist/lib/reactive/index.js +2 -5
- package/dist/lib/reactive/types.js +2 -24
- package/dist/lib/recorder/EmitRecorder.js +1 -1
- package/dist/lib/recorder/InOutRecorder.js +6 -3
- package/dist/lib/runner/DeferredObserverTier.js +5 -4
- package/dist/lib/runner/ExecutionRuntime.js +2 -1
- package/dist/lib/runner/FlowChartExecutor.js +18 -10
- package/dist/lib/runner/attach.js +21 -31
- package/dist/lib/runner/checkpoint.js +4 -1
- package/dist/lib/scope/ScopeFacade.js +60 -39
- package/dist/lib/scope/protection/createProtectedScope.js +5 -2
- package/dist/lib/scope/protection/readonlyInput.js +74 -10
- package/dist/lib/scope/providers/baseStateCompatible.js +37 -36
- package/dist/lib/scope/providers/providers.js +3 -3
- package/dist/lib/scope/providers/resolve.js +2 -2
- package/dist/lib/scope/providers/types.js +1 -1
- package/dist/lib/scope/recorders/MetricRecorder.js +11 -14
- package/dist/lib/scope/runtime.js +67 -0
- package/dist/lib/scope/state/zod/defineScopeFromZod.js +15 -4
- package/dist/lib/scope/state/zod/resolver.js +3 -15
- package/dist/lib/scope/state/zod/scopeFactory.js +58 -22
- package/dist/lib/scope/state/zod/utils/validateHelper.js +70 -68
- package/dist/recorders.js +1 -1
- package/dist/types/advanced.d.ts +3 -1
- package/dist/types/index.d.ts +3 -3
- package/dist/types/lib/builder/FlowChartBuilder.d.ts +14 -4
- package/dist/types/lib/builder/types.d.ts +2 -3
- package/dist/types/lib/capture/freeze.d.ts +5 -5
- package/dist/types/lib/contract/index.d.ts +5 -8
- package/dist/types/lib/contract/types.d.ts +3 -81
- package/dist/types/lib/detach/drivers/batch.d.ts +9 -0
- package/dist/types/lib/detach/drivers/microtaskBatch.d.ts +17 -20
- package/dist/types/lib/detach/types.d.ts +17 -20
- package/dist/types/lib/engine/handlers/ParallelForEachHandler.d.ts +2 -3
- package/dist/types/lib/engine/handlers/SelectorHandler.d.ts +2 -4
- package/dist/types/lib/engine/handlers/SubflowInputMapper.d.ts +4 -3
- package/dist/types/lib/engine/handlers/breakFlag.d.ts +3 -0
- package/dist/types/lib/engine/handlers/servedPause.d.ts +15 -0
- package/dist/types/lib/engine/handlers/stageError.d.ts +20 -0
- package/dist/types/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +6 -1
- package/dist/types/lib/engine/narrative/FlowRecorderDispatcher.d.ts +3 -3
- package/dist/types/lib/engine/narrative/NarrativeFlowRecorder.d.ts +7 -1
- package/dist/types/lib/engine/narrative/formatting/resolveText.d.ts +6 -0
- package/dist/types/lib/engine/narrative/formatting/sentences.d.ts +16 -0
- package/dist/types/lib/engine/narrative/narrativeTypes.d.ts +2 -0
- package/dist/types/lib/engine/narrative/recorders/WindowedNarrativeFlowRecorder.d.ts +0 -1
- package/dist/types/lib/engine/narrative/types.d.ts +18 -8
- package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +8 -3
- package/dist/types/lib/engine/types.d.ts +4 -0
- package/dist/types/lib/memory/DiagnosticCollector.d.ts +12 -0
- package/dist/types/lib/memory/EventLog.d.ts +9 -0
- package/dist/types/lib/memory/StageContext.d.ts +22 -1
- package/dist/types/lib/memory/eventPosition.d.ts +18 -0
- package/dist/types/lib/memory/merge.d.ts +2 -1
- package/dist/types/lib/memory/redaction.d.ts +339 -17
- package/dist/types/lib/observer-queue/deferredDispatcher.d.ts +2 -2
- package/dist/types/lib/observer-queue/index.d.ts +7 -4
- package/dist/types/lib/pause/index.d.ts +1 -1
- package/dist/types/lib/pause/types.d.ts +20 -0
- package/dist/types/lib/reactive/index.d.ts +1 -1
- package/dist/types/lib/reactive/types.d.ts +0 -3
- package/dist/types/lib/recorder/EmitRecorder.d.ts +9 -0
- package/dist/types/lib/recorder/InOutRecorder.d.ts +5 -2
- package/dist/types/lib/runner/DeferredObserverTier.d.ts +4 -3
- package/dist/types/lib/runner/ExecutionRuntime.d.ts +3 -0
- package/dist/types/lib/runner/FlowChartExecutor.d.ts +11 -9
- package/dist/types/lib/runner/attach.d.ts +3 -1
- package/dist/types/lib/runner/checkpoint.d.ts +3 -1
- package/dist/types/lib/scope/ScopeFacade.d.ts +13 -1
- package/dist/types/lib/scope/protection/readonlyInput.d.ts +16 -6
- package/dist/types/lib/scope/providers/baseStateCompatible.d.ts +10 -24
- package/dist/types/lib/scope/providers/providers.d.ts +2 -2
- package/dist/types/lib/scope/providers/types.d.ts +4 -2
- package/dist/types/lib/scope/recorders/MetricRecorder.d.ts +2 -3
- package/dist/types/lib/scope/runtime.d.ts +48 -0
- package/dist/types/lib/scope/state/zod/defineScopeFromZod.d.ts +2 -2
- package/dist/types/lib/scope/state/zod/scopeFactory.d.ts +7 -3
- package/dist/types/lib/scope/state/zod/utils/validateHelper.d.ts +27 -18
- package/dist/types/recorders.d.ts +3 -0
- package/package.json +4 -3
- package/dist/esm/lib/contract/defineContract.d.ts +0 -18
- package/dist/esm/lib/contract/defineContract.js +0 -64
- package/dist/esm/lib/contract/openapi.d.ts +0 -18
- package/dist/esm/lib/contract/openapi.js +0 -98
- package/dist/lib/contract/defineContract.js +0 -68
- package/dist/lib/contract/openapi.js +0 -102
- package/dist/types/lib/contract/defineContract.d.ts +0 -18
- package/dist/types/lib/contract/openapi.d.ts +0 -18
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
* error isolation. Composes the whole pure pipeline: MergedQueue
|
|
7
7
|
* (Block 3, which captures via Block 1) + FlushDriver (Block 4) +
|
|
8
8
|
* a listener registry with timing/inflight accounting.
|
|
9
|
-
* Role: The
|
|
10
|
-
* `capture()
|
|
9
|
+
* Role: The pipeline held by `runner/DeferredObserverTier.ts · DeferredObserverTier`.
|
|
10
|
+
* Producers call `capture()`; listeners
|
|
11
11
|
* receive envelopes at the next checkpoint, "one beat behind".
|
|
12
12
|
* Pure module — zero engine imports.
|
|
13
13
|
*
|
|
@@ -227,4 +227,4 @@ class DeferredDispatcher {
|
|
|
227
227
|
}
|
|
228
228
|
}
|
|
229
229
|
exports.DeferredDispatcher = DeferredDispatcher;
|
|
230
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmZXJyZWREaXNwYXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9vYnNlcnZlci1xdWV1ZS9kZWZlcnJlZERpc3BhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkNHOzs7QUFHSCxxREFBcUU7QUFDckUscURBQWtFO0FBd0ZsRSxNQUFNLFVBQVUsR0FBRyxHQUFXLEVBQUUsQ0FBQyxDQUFDLE9BQU8sV0FBVyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUV2RyxTQUFTLFVBQVUsQ0FBQyxLQUEyQjtJQUM3QyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQVEsS0FBdUIsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDO0FBQzVHLENBQUM7QUFFRCxNQUFhLGtCQUFrQjtJQUNaLEtBQUssQ0FBYztJQUNuQixNQUFNLENBQWM7SUFDcEIsU0FBUyxHQUFHLElBQUksR0FBRyxFQUE0QixDQUFDO0lBQ2hELGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBZ0MsQ0FBQztJQUN6RSw0RUFBNEU7SUFDM0QsUUFBUSxHQUFHLElBQUksR0FBRyxFQUFvQixDQUFDO0lBQ3ZDLE9BQU8sQ0FBd0I7SUFDL0IsR0FBRyxDQUFlO0lBQzNCLGdCQUFnQixHQUFHLENBQUMsQ0FBQztJQUU3QixZQUFZLElBQWdDO1FBQzFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxFQUFFLE9BQU8sQ0FBQztRQUM3QixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxHQUFHLElBQUksVUFBVSxDQUFDO1FBQ25DLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSw0QkFBVyxDQUFDO1lB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QUFJLENBQzVDLEdBQUcsRUFBRSxDQUFDLElBQUksRUFDVixDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ2xFLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxDQUNGLENBQUM7UUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQix3RUFBd0U7UUFDeEUsdUJBQXVCO1FBQ3ZCLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsd0RBQXdEO0lBQ2hELFdBQVcsQ0FBQyxLQUFjLEVBQUUsT0FBNkI7UUFDL0QsSUFBSSxDQUFDO1lBQ0gsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsbUNBQW1DO1FBQ3JDLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFwTEQsZ0RBb0xDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBvYnNlcnZlci1xdWV1ZS9kZWZlcnJlZERpc3BhdGNoZXIudHMg4oCUIFJGQy0wMDEgQmxvY2sgNTogZGVmZXJyZWQgZGVsaXZlcnkgZmHDp2FkZS5cbiAqXG4gKiBQYXR0ZXJuOiAgY2FwdHVyZSDihpIgZW5xdWV1ZSDihpIgKG1pY3JvdGFzaykgZmx1c2gg4oaSIGludm9rZSwgd2l0aCBwZXItbGlzdGVuZXJcbiAqICAgICAgICAgICBlcnJvciBpc29sYXRpb24uIENvbXBvc2VzIHRoZSB3aG9sZSBwdXJlIHBpcGVsaW5lOiBNZXJnZWRRdWV1ZVxuICogICAgICAgICAgIChCbG9jayAzLCB3aGljaCBjYXB0dXJlcyB2aWEgQmxvY2sgMSkgKyBGbHVzaERyaXZlciAoQmxvY2sgNCkgK1xuICogICAgICAgICAgIGEgbGlzdGVuZXIgcmVnaXN0cnkgd2l0aCB0aW1pbmcvaW5mbGlnaHQgYWNjb3VudGluZy5cbiAqIFJvbGU6ICAgICBUaGUgb2JqZWN0IHRoZSBlbmdpbmUgd2lyaW5nIChCbG9jayA2KSB3aWxsIGhvbGQuIFByb2R1Y2VycyBjYWxsXG4gKiAgICAgICAgICAgYGNhcHR1cmUoKWAgKGNoZWFwLCBuZXZlciB0aHJvd3MsIG5ldmVyIGJsb2Nrcyk7IGxpc3RlbmVyc1xuICogICAgICAgICAgIHJlY2VpdmUgZW52ZWxvcGVzIGF0IHRoZSBuZXh0IGNoZWNrcG9pbnQsIFwib25lIGJlYXQgYmVoaW5kXCIuXG4gKiAgICAgICAgICAgUHVyZSBtb2R1bGUg4oCUIHplcm8gZW5naW5lIGltcG9ydHMuXG4gKlxuICogRGVsaXZlcnkgc2VtYW50aWNzIChub3JtYXRpdmUsIFJGQy0wMDEgwqc1ICsgYW1lbmRtZW50cyBBMi9BNCk6XG4gKiAgIC0gUGVyLWxpc3RlbmVyIEZJRk86IGV2ZXJ5IGxpc3RlbmVyIHNlZXMgZW52ZWxvcGVzIGluIHNlcSBvcmRlclxuICogICAgIChpbnZvY2F0aW9uIG9yZGVyOyBhbiBhc3luYyBsaXN0ZW5lcidzIENPTVBMRVRJT04gb3JkZXIgaXMgaXRzIG93blxuICogICAgIGNvbmNlcm4pIOKAlCBFWENFUFQgdW5kZXIgYCdibG9jaydgIG92ZXJmbG93LCB3aGVyZSBhIHJlZnVzZWQgZW5xdWV1ZVxuICogICAgIGlzIGRlbGl2ZXJlZCBpbmxpbmUgYW5kIG92ZXJ0YWtlcyB0aGUgcXVldWVkIGJhY2tsb2cuIGBzZXFgIGFsd2F5c1xuICogICAgIHJlY29yZHMgdHJ1ZSBhcnJpdmFsIG9yZGVyLCBzbyBvcmRlci1zZW5zaXRpdmUgY29uc3VtZXJzIHJlLXNvcnQ7XG4gKiAgICAgc2VlIHRoZSBgJ2Jsb2NrJ2AgY2F2ZWF0IGJlbG93LlxuICogICAtIEVycm9yIGlzb2xhdGlvbjogYSB0aHJvd2luZyBsaXN0ZW5lciAoc3luYykgb3IgcmVqZWN0aW5nIGxpc3RlbmVyXG4gKiAgICAgKGFzeW5jKSBuZXZlciBhZmZlY3RzIHNpYmxpbmdzIG9yIHRoZSBwcm9kdWNlci4gQm90aCBmYWlsdXJlIG1vZGVzXG4gKiAgICAgcm91dGUgdG8gdGhlIGluamVjdGVkIGBvbkVycm9yYDsgYSB0aHJvd2luZyBgb25FcnJvcmAgaXMgaXRzZWxmXG4gKiAgICAgc3dhbGxvd2VkLlxuICogICAtIFRoZSBmbHVzaCBORVZFUiBhd2FpdHMgYSBsaXN0ZW5lci4gQXN5bmMgY29udGludWF0aW9ucyBhcmUgdHJhY2tlZCBpblxuICogICAgIGFuIGluZmxpZ2h0IHNldDsgYGRyYWluKHsgdGltZW91dE1zIH0pYCBzZXR0bGVzIHRoZW1cbiAqICAgICAoYFByb21pc2UuYWxsU2V0dGxlZGAgKyBkZWFkbGluZSwgc2hhcGVkIGxpa2UgYGZsdXNoQWxsRGV0YWNoZWRgKS5cbiAqICAgLSBgJ2Jsb2NrJ2Agb3ZlcmZsb3c6IGEgcmVmdXNlZCBlbnF1ZXVlIGlzIGRlbGl2ZXJlZCBzeW5jaHJvbm91c2x5XG4gKiAgICAgSU5MSU5FIGZyb20gYGNhcHR1cmUoKWAg4oCUIHJlLWludHJvZHVjaW5nIGJsb2NraW5nIGRlbGl2ZXJ5IGJ5IHRoZVxuICogICAgIGNvbnN1bWVyJ3MgZXhwbGljaXQgY2hvaWNlLiBPcmRlcmluZyBjYXZlYXQgKGRvY3VtZW50ZWQgKyB0ZXN0ZWQpOiBhblxuICogICAgIGlubGluZSBldmVudCBvdmVydGFrZXMgdGhlIHF1ZXVlZCBiYWNrbG9nIOKAlCBgJ2Jsb2NrJ2AgdHJhZGVzIGdsb2JhbFxuICogICAgIG9yZGVyaW5nIGZvciB6ZXJvIGxvc3MgYW5kIGJvdW5kZWQgbWVtb3J5LiBgc2VxYCBzdGlsbCB0ZWxscyB0aGVcbiAqICAgICB0cnVlIGFycml2YWwgb3JkZXIuXG4gKiAgIC0gTGlzdGVuZXIgcmVnaXN0cnkgaXMgaWRlbXBvdGVudCBieSBpZCAoc2FtZSBpZCByZXBsYWNlcywgZGlmZmVyZW50XG4gKiAgICAgaWRzIGNvZXhpc3QpIOKAlCBtaXJyb3JzIHRoZSByZXBvLXdpZGUgcmVjb3JkZXIgSUQgY29udHJhY3QuIFN0YXRzXG4gKiAgICAgYWNjdW11bGF0ZSBwZXIgaWQgYWNyb3NzIHJlcGxhY2VtZW50OyBgcmVtb3ZlTGlzdGVuZXJgIGtlZXBzIHRoZVxuICogICAgIGlkJ3MgYWNjdW11bGF0ZWQgc3RhdHMgZm9yIHBvc3QtcnVuIHJlcG9ydHMuXG4gKiAgIC0gRXZlbnRzIGNhcHR1cmVkIEJFRk9SRSBhbnkgbGlzdGVuZXIgYXR0YWNoZXMgc3RheSBxdWV1ZWQg4oCUIGEgbGlzdGVuZXJcbiAqICAgICBhdHRhY2hlZCBiZWZvcmUgdGhlIG5leHQgY2hlY2twb2ludCBzdGlsbCByZWNlaXZlcyB0aGUgYmFja2xvZy5cbiAqXG4gKiBQZXItbGlzdGVuZXIgdGltZSBhY2NvdW50aW5nIChhbWVuZG1lbnQgQTIg4oCUIFwibmFtZSB0aGUgaG9nXCIpOiBjdW11bGF0aXZlXG4gKiBgdG90YWxNc2AgYW5kIHBlci1jaGVja3BvaW50IGBsYXN0Rmx1c2hNc2Agb2YgU1lOQyB0aW1lIHBlciBsaXN0ZW5lciBpZCDigJRcbiAqIHRoZSB0aW1lIHRoYXQgYWN0dWFsbHkgYmxvY2tzIHRoZSBmbHVzaC4gQW4gYXN5bmMgbGlzdGVuZXIncyBjb250aW51YXRpb25cbiAqIHRpbWUgaXMgaW50ZW50aW9uYWxseSBub3QgYXR0cmlidXRlZCAoaXQgZG9lcyBub3QgYmxvY2sgZGVsaXZlcnkpLlxuICovXG5cbmltcG9ydCB7IHR5cGUgQ2FwdHVyZUVudmVsb3BlLCB0eXBlIENhcHR1cmVIb29rcywgdHlwZSBDYXB0dXJlUG9saWN5IH0gZnJvbSAnLi4vY2FwdHVyZS9lbnZlbG9wZS5qcyc7XG5pbXBvcnQgeyB0eXBlIEZsdXNoU3luY1Jlc3VsdCwgRmx1c2hEcml2ZXIgfSBmcm9tICcuL2ZsdXNoRHJpdmVyLmpzJztcbmltcG9ydCB7IHR5cGUgRW5xdWV1ZUlucHV0LCBNZXJnZWRRdWV1ZSB9IGZyb20gJy4vbWVyZ2VkUXVldWUuanMnO1xuaW1wb3J0IHsgdHlwZSBPdmVyZmxvd1BvbGljeSB9IGZyb20gJy4vcmluZy5qcyc7XG5cbi8qKlxuICogT25lIGRlZmVycmVkIG9ic2VydmVyLiBNYXkgcmV0dXJuIGEgUHJvbWlzZSDigJQgdGhlIGRpc3BhdGNoZXIgdHJhY2tzIGl0IGluXG4gKiB0aGUgaW5mbGlnaHQgc2V0IGJ1dCBORVZFUiBhd2FpdHMgaXQgZHVyaW5nIGEgZmx1c2guXG4gKi9cbmV4cG9ydCB0eXBlIERlZmVycmVkTGlzdGVuZXIgPSAoZW52ZWxvcGU6IENhcHR1cmVFbnZlbG9wZSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlzcGF0Y2hFcnJvckNvbnRleHQge1xuICByZWFkb25seSBsaXN0ZW5lcklkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGVudmVsb3BlOiBDYXB0dXJlRW52ZWxvcGU7XG4gIC8qKiBgJ3N5bmMnYCA9IGxpc3RlbmVyIHRocmV3OyBgJ2FzeW5jJ2AgPSByZXR1cm5lZCBwcm9taXNlIHJlamVjdGVkLiAqL1xuICByZWFkb25seSBwaGFzZTogJ3N5bmMnIHwgJ2FzeW5jJztcbn1cblxuLyoqIEluamVjdGVkIGVycm9yIHNpbmsg4oCUIHRoZSB3aXJpbmcgbGF5ZXIgcm91dGVzIHRoZXNlIChCbG9jayA2KS4gKi9cbmV4cG9ydCB0eXBlIERpc3BhdGNoRXJyb3JIYW5kbGVyID0gKGVycm9yOiB1bmtub3duLCBjb250ZXh0OiBEaXNwYXRjaEVycm9yQ29udGV4dCkgPT4gdm9pZDtcblxuZXhwb3J0IGludGVyZmFjZSBEZWZlcnJlZERpc3BhdGNoZXJPcHRpb25zIHtcbiAgLyoqIFF1ZXVlIGJvdW5kIOKAlCBkZWZhdWx0IDEwIDAwMCAoc2VlIGBNZXJnZWRRdWV1ZWApLiAqL1xuICByZWFkb25seSBtYXhRdWV1ZT86IG51bWJlcjtcbiAgLyoqIE92ZXJmbG93IHBvbGljeSDigJQgZGVmYXVsdCBgJ2Ryb3Atb2xkZXN0J2AuICovXG4gIHJlYWRvbmx5IG92ZXJmbG93PzogT3ZlcmZsb3dQb2xpY3k7XG4gIC8qKiBgJ3NhbXBsZSdgIG92ZXJmbG93IG9ubHkg4oCUIGFkbWl0IDEgaW4gdGhpcyBtYW55IHNhdHVyYXRlZCBhcnJpdmFscy4gKi9cbiAgcmVhZG9ubHkgc2FtcGxlRXZlcnk/OiBudW1iZXI7XG4gIC8qKiBEZWZhdWx0IGNhcHR1cmUgcG9saWN5IOKAlCBkZWZhdWx0IGAnc3VtbWFyeSdgLiAqL1xuICByZWFkb25seSBjYXB0dXJlUG9saWN5PzogQ2FwdHVyZVBvbGljeTtcbiAgLyoqIFBlci1mbHVzaCB0aW1lIGJ1ZGdldCwgbXMgKEExKSDigJQgZGVmYXVsdCAyOyBgSW5maW5pdHlgID0gZnVsbCBkcmFpbi4gKi9cbiAgcmVhZG9ubHkgZmx1c2hCdWRnZXRNcz86IG51bWJlcjtcbiAgLyoqIExpc3RlbmVyLWZhaWx1cmUgc2luay4gTm8gZGVmYXVsdCDigJQgd2l0aG91dCBpdCwgZmFpbHVyZXMgYXJlIHNpbGVudC4gKi9cbiAgcmVhZG9ubHkgb25FcnJvcj86IERpc3BhdGNoRXJyb3JIYW5kbGVyO1xuICAvKiogQ2FwdHVyZSBzZWFtcyAoZGV2LXdhcm4sIGNhcHR1cmVkQXQgY2xvY2spIOKAlCBzZWUgYENhcHR1cmVIb29rc2AuICovXG4gIHJlYWRvbmx5IGhvb2tzPzogQ2FwdHVyZUhvb2tzO1xuICAvKiogVGltaW5nIGNsb2NrIGZvciBidWRnZXQgKyBwZXItbGlzdGVuZXIgYWNjb3VudGluZy4gSW5qZWN0YWJsZS4gKi9cbiAgcmVhZG9ubHkgbm93PzogKCkgPT4gbnVtYmVyO1xuICAvKiogQ2hlY2twb2ludCBwcmltaXRpdmUg4oCUIGRlZmF1bHQgYHF1ZXVlTWljcm90YXNrYC4gSW5qZWN0YWJsZS4gKi9cbiAgcmVhZG9ubHkgc2NoZWR1bGU/OiAoY2I6ICgpID0+IHZvaWQpID0+IHZvaWQ7XG59XG5cbi8qKiBQZXItbGlzdGVuZXIgYWNjb3VudGluZyAoQTIvQTQpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaXN0ZW5lclN0YXRzIHtcbiAgLyoqIEVudmVsb3BlcyBkZWxpdmVyZWQgKGludm9jYXRpb25zLCBpbmNsdWRpbmcgb25lcyB0aGF0IHRocmV3KS4gKi9cbiAgcmVhZG9ubHkgZXZlbnRzOiBudW1iZXI7XG4gIC8qKiBDdW11bGF0aXZlIHN5bmMgZGVsaXZlcnkgdGltZSwgbXMuICovXG4gIHJlYWRvbmx5IHRvdGFsTXM6IG51bWJlcjtcbiAgLyoqIFN5bmMgZGVsaXZlcnkgdGltZSBzaW5jZSB0aGUgbGFzdCBmbHVzaCBzdGFydGVkLCBtcy4gKi9cbiAgcmVhZG9ubHkgbGFzdEZsdXNoTXM6IG51bWJlcjtcbn1cblxuLyoqIFRoZSBCbG9jayA5IG9ic2VydmFiaWxpdHkgc3VyZmFjZSAoYW1lbmRtZW50IEE0KSDigJQgcHVyZSBnZXR0ZXIuICovXG5leHBvcnQgaW50ZXJmYWNlIERpc3BhdGNoZXJTdGF0cyB7XG4gIC8qKiBDdXJyZW50IGJhY2tsb2cuICovXG4gIHJlYWRvbmx5IGRlcHRoOiBudW1iZXI7XG4gIC8qKiBFdmVudHMgTE9TVCAob3ZlcmZsb3cpIOKAlCBuZXZlciBzaWxlbnQ7IGFsc28gdmlzaWJsZSBhcyBzZXEgZ2Fwcy4gKi9cbiAgcmVhZG9ubHkgZHJvcHM6IG51bWJlcjtcbiAgLyoqIENvbXBsZXRlZCBjaGVja3BvaW50IGZsdXNoZXMuICovXG4gIHJlYWRvbmx5IGZsdXNoZXM6IG51bWJlcjtcbiAgLyoqIEZsdXNoZXMgY3V0IHNob3J0IGJ5IGBmbHVzaEJ1ZGdldE1zYCAoQTEpLiAqL1xuICByZWFkb25seSBidWRnZXRFeGhhdXN0ZWQ6IG51bWJlcjtcbiAgLyoqIHA5NSBmbHVzaCBkdXJhdGlvbiwgbXMgKHJvbGxpbmcgd2luZG93KS4gKi9cbiAgcmVhZG9ubHkgcDk1Rmx1c2hNczogbnVtYmVyO1xuICAvKiogYCdibG9jaydgLXBvbGljeSByZWZ1c2FscyBkZWxpdmVyZWQgc3luY2hyb25vdXNseSBpbmxpbmUuICovXG4gIHJlYWRvbmx5IGlubGluZURlbGl2ZXJpZXM6IG51bWJlcjtcbiAgLyoqIEFzeW5jIGxpc3RlbmVyIGNvbnRpbnVhdGlvbnMgbm90IHlldCBzZXR0bGVkLiAqL1xuICByZWFkb25seSBpbmZsaWdodDogbnVtYmVyO1xuICAvKiogUGVyLWxpc3RlbmVyIHRpbWUgYWNjb3VudGluZyDigJQgXCJuYW1lIHRoZSBob2dcIiAoQTIpLiAqL1xuICByZWFkb25seSBwZXJMaXN0ZW5lcjogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgTGlzdGVuZXJTdGF0cz4+O1xufVxuXG4vKiogUmVzdWx0IG9mIHtAbGluayBEZWZlcnJlZERpc3BhdGNoZXIuZHJhaW59IOKAlCBgZmx1c2hBbGxEZXRhY2hlZGAgc2hhcGUuICovXG5leHBvcnQgaW50ZXJmYWNlIERyYWluUmVzdWx0IHtcbiAgLyoqIEFzeW5jIGNvbnRpbnVhdGlvbnMgc2VlbiBzZXR0bGluZyBmdWxmaWxsZWQuIEJlc3QtZWZmb3J0IGNvdW50IOKAlCBhXG4gICAqICBjb250aW51YXRpb24gdGhhdCBzZXR0bGVzIGJldHdlZW4gY2hlY2tzIGlzIGRyYWluZWQgYnV0IG1heSBub3QgYmVcbiAgICogIGNvdW50ZWQgKHNhbWUgc2VtYW50aWNzIGFzIGBmbHVzaEFsbERldGFjaGVkYCkuICovXG4gIHJlYWRvbmx5IGRvbmU6IG51bWJlcjtcbiAgLyoqIENvbnRpbnVhdGlvbnMgd2hvc2UgbGlzdGVuZXIgcHJvbWlzZSByZWplY3RlZCAocm91dGVkIHRvIG9uRXJyb3IpLiAqL1xuICByZWFkb25seSBmYWlsZWQ6IG51bWJlcjtcbiAgLyoqIFN0aWxsIGluIGZsaWdodCAob3IgcXVldWVkKSB3aGVuIHRoZSBkZWFkbGluZSBleHBpcmVkLiBgMGAgPSBkcmFpbmVkLiAqL1xuICByZWFkb25seSBwZW5kaW5nOiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBNdXRhYmxlTGlzdGVuZXJTdGF0cyB7XG4gIGV2ZW50czogbnVtYmVyO1xuICB0b3RhbE1zOiBudW1iZXI7XG4gIGxhc3RGbHVzaE1zOiBudW1iZXI7XG59XG5cbmNvbnN0IGRlZmF1bHROb3cgPSAoKTogbnVtYmVyID0+ICh0eXBlb2YgcGVyZm9ybWFuY2UgIT09ICd1bmRlZmluZWQnID8gcGVyZm9ybWFuY2Uubm93KCkgOiBEYXRlLm5vdygpKTtcblxuZnVuY3Rpb24gaXNUaGVuYWJsZSh2YWx1ZTogdm9pZCB8IFByb21pc2U8dm9pZD4pOiB2YWx1ZSBpcyBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mICh2YWx1ZSBhcyBQcm9taXNlPHZvaWQ+KS50aGVuID09PSAnZnVuY3Rpb24nO1xufVxuXG5leHBvcnQgY2xhc3MgRGVmZXJyZWREaXNwYXRjaGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBxdWV1ZTogTWVyZ2VkUXVldWU7XG4gIHByaXZhdGUgcmVhZG9ubHkgZHJpdmVyOiBGbHVzaERyaXZlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBsaXN0ZW5lcnMgPSBuZXcgTWFwPHN0cmluZywgRGVmZXJyZWRMaXN0ZW5lcj4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBsaXN0ZW5lclN0YXRzID0gbmV3IE1hcDxzdHJpbmcsIE11dGFibGVMaXN0ZW5lclN0YXRzPigpO1xuICAvKiogVHJhY2tlZCBhc3luYyBjb250aW51YXRpb25zIOKAlCByZXNvbHZlIGB0cnVlYCAob2spIC8gYGZhbHNlYCAoZmFpbGVkKS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBpbmZsaWdodCA9IG5ldyBTZXQ8UHJvbWlzZTxib29sZWFuPj4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBvbkVycm9yPzogRGlzcGF0Y2hFcnJvckhhbmRsZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgbm93OiAoKSA9PiBudW1iZXI7XG4gIHByaXZhdGUgaW5saW5lRGVsaXZlcmllcyA9IDA7XG5cbiAgY29uc3RydWN0b3Iob3B0cz86IERlZmVycmVkRGlzcGF0Y2hlck9wdGlvbnMpIHtcbiAgICB0aGlzLm9uRXJyb3IgPSBvcHRzPy5vbkVycm9yO1xuICAgIHRoaXMubm93ID0gb3B0cz8ubm93ID8/IGRlZmF1bHROb3c7XG4gICAgdGhpcy5xdWV1ZSA9IG5ldyBNZXJnZWRRdWV1ZSh7XG4gICAgICBtYXhRdWV1ZTogb3B0cz8ubWF4UXVldWUsXG4gICAgICBvdmVyZmxvdzogb3B0cz8ub3ZlcmZsb3csXG4gICAgICBzYW1wbGVFdmVyeTogb3B0cz8uc2FtcGxlRXZlcnksXG4gICAgICBjYXB0dXJlUG9saWN5OiBvcHRzPy5jYXB0dXJlUG9saWN5LFxuICAgICAgaG9va3M6IG9wdHM/Lmhvb2tzLFxuICAgIH0pO1xuICAgIHRoaXMuZHJpdmVyID0gbmV3IEZsdXNoRHJpdmVyKHtcbiAgICAgIGRlcHRoOiAoKSA9PiB0aGlzLnF1ZXVlLmRlcHRoLFxuICAgICAgcHJvY2Vzc05leHQ6ICgpID0+IHRoaXMuZGVsaXZlck5leHQoKSxcbiAgICAgIGZsdXNoQnVkZ2V0TXM6IG9wdHM/LmZsdXNoQnVkZ2V0TXMsXG4gICAgICBub3c6IG9wdHM/Lm5vdyxcbiAgICAgIHNjaGVkdWxlOiBvcHRzPy5zY2hlZHVsZSxcbiAgICAgIG9uRmx1c2hTdGFydDogKCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IHN0YXRzIG9mIHRoaXMubGlzdGVuZXJTdGF0cy52YWx1ZXMoKSkgc3RhdHMubGFzdEZsdXNoTXMgPSAwO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBJZGVtcG90ZW50IGJ5IGlkIOKAlCBzYW1lIGlkIHJlcGxhY2VzIChzdGF0cyBjb250aW51ZSksIGlkcyBjb2V4aXN0LiAqL1xuICBhZGRMaXN0ZW5lcihpZDogc3RyaW5nLCBsaXN0ZW5lcjogRGVmZXJyZWRMaXN0ZW5lcik6IHZvaWQge1xuICAgIHRoaXMubGlzdGVuZXJzLnNldChpZCwgbGlzdGVuZXIpO1xuICAgIGlmICghdGhpcy5saXN0ZW5lclN0YXRzLmhhcyhpZCkpIHtcbiAgICAgIHRoaXMubGlzdGVuZXJTdGF0cy5zZXQoaWQsIHsgZXZlbnRzOiAwLCB0b3RhbE1zOiAwLCBsYXN0Rmx1c2hNczogMCB9KTtcbiAgICB9XG4gIH1cblxuICAvKiogU3RvcCBkZWxpdmVyaW5nIHRvIGBpZGAuIEFjY3VtdWxhdGVkIHN0YXRzIGFyZSBrZXB0IGZvciByZXBvcnRzLiAqL1xuICByZW1vdmVMaXN0ZW5lcihpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5saXN0ZW5lcnMuZGVsZXRlKGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9kdWNlciBlbnRyeSBwb2ludDogY2FwdHVyZSB0aGUgZXZlbnQgKHNlcS1zdGFtcGVkLCBwYXlsb2FkIHBlclxuICAgKiBwb2xpY3kpIGFuZCBzdGFnZSBpdCBmb3IgdGhlIG5leHQgY2hlY2twb2ludC4gQ2hlYXA7IE5FVkVSIHRocm93cztcbiAgICogbmV2ZXIgYmxvY2tzIOKAlCBleGNlcHQgdW5kZXIgYCdibG9jaydgIG92ZXJmbG93LCB3aGVyZSBhIHJlZnVzZWRcbiAgICogZW5xdWV1ZSBpcyBkZWxpdmVyZWQgc3luY2hyb25vdXNseSBpbmxpbmUgKGV4cGxpY2l0IGNvbnN1bWVyIGNob2ljZSkuXG4gICAqL1xuICBjYXB0dXJlKGlucHV0OiBFbnF1ZXVlSW5wdXQsIHBvbGljeT86IENhcHR1cmVQb2xpY3kpOiB2b2lkIHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLnF1ZXVlLmVucXVldWUoaW5wdXQsIHBvbGljeSk7XG4gICAgaWYgKHJlc3VsdC5vdXRjb21lID09PSAncXVldWVkJykge1xuICAgICAgdGhpcy5kcml2ZXIuYXJtKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChyZXN1bHQub3V0Y29tZSA9PT0gJ2lubGluZScpIHtcbiAgICAgIHRoaXMuaW5saW5lRGVsaXZlcmllcyArPSAxO1xuICAgICAgdGhpcy5kZWxpdmVyKHJlc3VsdC5lbnZlbG9wZSk7XG4gICAgfVxuICAgIC8vICdkcm9wcGVkJzogY291bnRlZCBieSB0aGUgcXVldWU7IGxvc3Mgc3VyZmFjZXMgaW4gc3RhdHMgKyBzZXEgZ2Fwcy5cbiAgfVxuXG4gIC8qKlxuICAgKiBUZXJtaW5hbCBmbHVzaCDigJQgc3luY2hyb25vdXNseSBkZWxpdmVyIGV2ZXJ5dGhpbmcgcXVldWVkIChlbmQgb2YgcnVuIC9cbiAgICogc2h1dGRvd24pLiBBc3luYyBsaXN0ZW5lciBjb250aW51YXRpb25zIGFyZSBOT1QgYXdhaXRlZDsgZm9sbG93IHdpdGhcbiAgICogYGRyYWluKClgIGZvciB0aGF0LlxuICAgKi9cbiAgZmx1c2hOb3cob3B0cz86IHsgbWF4Um91bmRzPzogbnVtYmVyIH0pOiBGbHVzaFN5bmNSZXN1bHQge1xuICAgIHJldHVybiB0aGlzLmRyaXZlci5mbHVzaFN5bmMob3B0cyk7XG4gIH1cblxuICAvKipcbiAgICogRmx1c2ggdGhlIGJhY2tsb2csIHRoZW4gc2V0dGxlIGFsbCBpbmZsaWdodCBhc3luYyBjb250aW51YXRpb25zIOKAlFxuICAgKiBgUHJvbWlzZS5hbGxTZXR0bGVkYCB1bmRlciBhIGRlYWRsaW5lLCBzaGFwZWQgbGlrZSBgZmx1c2hBbGxEZXRhY2hlZGAuXG4gICAqIExvb3BzIHdoaWxlIGNvbnRpbnVhdGlvbnMgc3Bhd24gbmV3IGNhcHR1cmVzLCB1bnRpbCBxdWllc2NlbnQgb3IgdGhlXG4gICAqIGRlYWRsaW5lIGV4cGlyZXMuXG4gICAqL1xuICBhc3luYyBkcmFpbihvcHRzPzogeyB0aW1lb3V0TXM/OiBudW1iZXIgfSk6IFByb21pc2U8RHJhaW5SZXN1bHQ+IHtcbiAgICBjb25zdCB0aW1lb3V0TXMgPSBvcHRzPy50aW1lb3V0TXMgPz8gMzBfMDAwO1xuICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IERhdGUubm93KCk7XG4gICAgbGV0IGRvbmUgPSAwO1xuICAgIGxldCBmYWlsZWQgPSAwO1xuXG4gICAgdGhpcy5mbHVzaE5vdygpO1xuICAgIHdoaWxlICh0aGlzLmluZmxpZ2h0LnNpemUgPiAwKSB7XG4gICAgICBjb25zdCByZW1haW5pbmdNcyA9IHRpbWVvdXRNcyAtIChEYXRlLm5vdygpIC0gc3RhcnRlZEF0KTtcbiAgICAgIGlmIChyZW1haW5pbmdNcyA8PSAwKSByZXR1cm4geyBkb25lLCBmYWlsZWQsIHBlbmRpbmc6IHRoaXMuaW5mbGlnaHQuc2l6ZSArIHRoaXMucXVldWUuZGVwdGggfTtcblxuICAgICAgY29uc3QgYmF0Y2ggPSBbLi4udGhpcy5pbmZsaWdodF07XG4gICAgICBsZXQgdGltZXJJZDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWQ7XG4gICAgICBjb25zdCB0aW1lb3V0UHJvbWlzZSA9IG5ldyBQcm9taXNlPCdfX2RyYWluX3RpbWVvdXRfXyc+KChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHRpbWVySWQgPSBzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUoJ19fZHJhaW5fdGltZW91dF9fJyksIHJlbWFpbmluZ01zKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc2V0dGxlZCA9IGF3YWl0IFByb21pc2UucmFjZShbUHJvbWlzZS5hbGxTZXR0bGVkKGJhdGNoKSwgdGltZW91dFByb21pc2VdKTtcbiAgICAgIGlmICh0aW1lcklkICE9PSB1bmRlZmluZWQpIGNsZWFyVGltZW91dCh0aW1lcklkKTtcbiAgICAgIGlmIChzZXR0bGVkID09PSAnX19kcmFpbl90aW1lb3V0X18nKSB7XG4gICAgICAgIHJldHVybiB7IGRvbmUsIGZhaWxlZCwgcGVuZGluZzogdGhpcy5pbmZsaWdodC5zaXplICsgdGhpcy5xdWV1ZS5kZXB0aCB9O1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCByIG9mIHNldHRsZWQpIHtcbiAgICAgICAgLy8gVHJhY2tlZCBwcm9taXNlcyBuZXZlciByZWplY3Qg4oCUIHRoZXkgcmVzb2x2ZSB0cnVlIChvaykgLyBmYWxzZS5cbiAgICAgICAgaWYgKHIuc3RhdHVzID09PSAnZnVsZmlsbGVkJyAmJiByLnZhbHVlID09PSBmYWxzZSkgZmFpbGVkICs9IDE7XG4gICAgICAgIGVsc2UgZG9uZSArPSAxO1xuICAgICAgfVxuICAgICAgLy8gQ29udGludWF0aW9ucyBtYXkgaGF2ZSBjYXB0dXJlZCBtb3JlIGV2ZW50cyDigJQgZmx1c2ggYW5kIHJlLWNoZWNrLlxuICAgICAgdGhpcy5mbHVzaE5vdygpO1xuICAgIH1cbiAgICByZXR1cm4geyBkb25lLCBmYWlsZWQsIHBlbmRpbmc6IHRoaXMucXVldWUuZGVwdGggfTtcbiAgfVxuXG4gIC8qKiBBNCDigJQgdGhlIHN0YXRzIG9iamVjdCBCbG9jayA5IGNvbnN1bWVzLiBQdXJlIGdldHRlciwgZnJlc2ggc25hcHNob3QuICovXG4gIGdldFN0YXRzKCk6IERpc3BhdGNoZXJTdGF0cyB7XG4gICAgY29uc3QgY291bnRlcnMgPSB0aGlzLnF1ZXVlLmdldENvdW50ZXJzKCk7XG4gICAgY29uc3QgZHJpdmVyU3RhdHMgPSB0aGlzLmRyaXZlci5nZXRTdGF0cygpO1xuICAgIGNvbnN0IHBlckxpc3RlbmVyOiBSZWNvcmQ8c3RyaW5nLCBMaXN0ZW5lclN0YXRzPiA9IHt9O1xuICAgIGZvciAoY29uc3QgW2lkLCBzdGF0c10gb2YgdGhpcy5saXN0ZW5lclN0YXRzKSB7XG4gICAgICBwZXJMaXN0ZW5lcltpZF0gPSB7IGV2ZW50czogc3RhdHMuZXZlbnRzLCB0b3RhbE1zOiBzdGF0cy50b3RhbE1zLCBsYXN0Rmx1c2hNczogc3RhdHMubGFzdEZsdXNoTXMgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGRlcHRoOiB0aGlzLnF1ZXVlLmRlcHRoLFxuICAgICAgZHJvcHM6IGNvdW50ZXJzLmRyb3BzLFxuICAgICAgZmx1c2hlczogZHJpdmVyU3RhdHMuZmx1c2hlcyxcbiAgICAgIGJ1ZGdldEV4aGF1c3RlZDogZHJpdmVyU3RhdHMuYnVkZ2V0RXhoYXVzdGVkLFxuICAgICAgcDk1Rmx1c2hNczogZHJpdmVyU3RhdHMucDk1Rmx1c2hNcyxcbiAgICAgIGlubGluZURlbGl2ZXJpZXM6IHRoaXMuaW5saW5lRGVsaXZlcmllcyxcbiAgICAgIGluZmxpZ2h0OiB0aGlzLmluZmxpZ2h0LnNpemUsXG4gICAgICBwZXJMaXN0ZW5lcixcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxpdmVyTmV4dCgpOiB2b2lkIHtcbiAgICBjb25zdCBlbnZlbG9wZSA9IHRoaXMucXVldWUuc2hpZnQoKTtcbiAgICBpZiAoZW52ZWxvcGUgPT09IHVuZGVmaW5lZCkgcmV0dXJuO1xuICAgIHRoaXMuZGVsaXZlcihlbnZlbG9wZSk7XG4gIH1cblxuICAvKiogSW52b2tlIGV2ZXJ5IGxpc3RlbmVyIHdpdGggZnVsbCBlcnJvciBpc29sYXRpb24gKyB0aW1lIGFjY291bnRpbmcuICovXG4gIHByaXZhdGUgZGVsaXZlcihlbnZlbG9wZTogQ2FwdHVyZUVudmVsb3BlKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBbaWQsIGxpc3RlbmVyXSBvZiB0aGlzLmxpc3RlbmVycykge1xuICAgICAgY29uc3Qgc3RhdHMgPSB0aGlzLmxpc3RlbmVyU3RhdHMuZ2V0KGlkKSBhcyBNdXRhYmxlTGlzdGVuZXJTdGF0cztcbiAgICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5ub3coKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGxpc3RlbmVyKGVudmVsb3BlKTtcbiAgICAgICAgaWYgKGlzVGhlbmFibGUocmVzdWx0KSkgdGhpcy50cmFjayhyZXN1bHQsIGlkLCBlbnZlbG9wZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLnNhZmVPbkVycm9yKGVycm9yLCB7IGxpc3RlbmVySWQ6IGlkLCBlbnZlbG9wZSwgcGhhc2U6ICdzeW5jJyB9KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGNvbnN0IGVsYXBzZWQgPSB0aGlzLm5vdygpIC0gc3RhcnQ7XG4gICAgICAgIHN0YXRzLmV2ZW50cyArPSAxO1xuICAgICAgICBzdGF0cy50b3RhbE1zICs9IGVsYXBzZWQ7XG4gICAgICAgIHN0YXRzLmxhc3RGbHVzaE1zICs9IGVsYXBzZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqIFRyYWNrIGFuIGFzeW5jIGNvbnRpbnVhdGlvbjsgcm91dGUgaXRzIHJlamVjdGlvbjsgbmV2ZXIgcmVqZWN0LiAqL1xuICBwcml2YXRlIHRyYWNrKHByb21pc2U6IFByb21pc2U8dm9pZD4sIGxpc3RlbmVySWQ6IHN0cmluZywgZW52ZWxvcGU6IENhcHR1cmVFbnZlbG9wZSk6IHZvaWQge1xuICAgIGNvbnN0IHRyYWNrZWQ6IFByb21pc2U8Ym9vbGVhbj4gPSBwcm9taXNlLnRoZW4oXG4gICAgICAoKSA9PiB0cnVlLFxuICAgICAgKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMuc2FmZU9uRXJyb3IoZXJyb3IsIHsgbGlzdGVuZXJJZCwgZW52ZWxvcGUsIHBoYXNlOiAnYXN5bmMnIH0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9LFxuICAgICk7XG4gICAgdGhpcy5pbmZsaWdodC5hZGQodHJhY2tlZCk7XG4gICAgLy8gU2VsZi1jbGVhbnVwIOKAlCBgdHJhY2tlZGAgbmV2ZXIgcmVqZWN0cywgc28gdGhpcyBjaGFpbiBjYW5ub3QgZmxvYXQgYW5cbiAgICAvLyB1bmhhbmRsZWQgcmVqZWN0aW9uLlxuICAgIHRyYWNrZWQudGhlbigoKSA9PiB0aGlzLmluZmxpZ2h0LmRlbGV0ZSh0cmFja2VkKSk7XG4gIH1cblxuICAvKiogVGhlIGVycm9yIHNpbmsgbXVzdCBuZXZlciBiZWNvbWUgYW4gZXJyb3Igc291cmNlLiAqL1xuICBwcml2YXRlIHNhZmVPbkVycm9yKGVycm9yOiB1bmtub3duLCBjb250ZXh0OiBEaXNwYXRjaEVycm9yQ29udGV4dCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLm9uRXJyb3I/LihlcnJvciwgY29udGV4dCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBTd2FsbG93IOKAlCBpc29sYXRpb24gaXMgYWJzb2x1dGUuXG4gICAgfVxuICB9XG59XG4iXX0=
|
|
230
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmZXJyZWREaXNwYXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9vYnNlcnZlci1xdWV1ZS9kZWZlcnJlZERpc3BhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkNHOzs7QUFHSCxxREFBcUU7QUFDckUscURBQWtFO0FBd0ZsRSxNQUFNLFVBQVUsR0FBRyxHQUFXLEVBQUUsQ0FBQyxDQUFDLE9BQU8sV0FBVyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUV2RyxTQUFTLFVBQVUsQ0FBQyxLQUEyQjtJQUM3QyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQVEsS0FBdUIsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDO0FBQzVHLENBQUM7QUFFRCxNQUFhLGtCQUFrQjtJQUNaLEtBQUssQ0FBYztJQUNuQixNQUFNLENBQWM7SUFDcEIsU0FBUyxHQUFHLElBQUksR0FBRyxFQUE0QixDQUFDO0lBQ2hELGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBZ0MsQ0FBQztJQUN6RSw0RUFBNEU7SUFDM0QsUUFBUSxHQUFHLElBQUksR0FBRyxFQUFvQixDQUFDO0lBQ3ZDLE9BQU8sQ0FBd0I7SUFDL0IsR0FBRyxDQUFlO0lBQzNCLGdCQUFnQixHQUFHLENBQUMsQ0FBQztJQUU3QixZQUFZLElBQWdDO1FBQzFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxFQUFFLE9BQU8sQ0FBQztRQUM3QixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksRUFBRSxHQUFHLElBQUksVUFBVSxDQUFDO1FBQ25DLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSw0QkFBVyxDQUFDO1lB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QUFJLENBQzVDLEdBQUcsRUFBRSxDQUFDLElBQUksRUFDVixDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO1lBQ2xFLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQyxDQUNGLENBQUM7UUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQix3RUFBd0U7UUFDeEUsdUJBQXVCO1FBQ3ZCLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsd0RBQXdEO0lBQ2hELFdBQVcsQ0FBQyxLQUFjLEVBQUUsT0FBNkI7UUFDL0QsSUFBSSxDQUFDO1lBQ0gsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsbUNBQW1DO1FBQ3JDLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFwTEQsZ0RBb0xDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBvYnNlcnZlci1xdWV1ZS9kZWZlcnJlZERpc3BhdGNoZXIudHMg4oCUIFJGQy0wMDEgQmxvY2sgNTogZGVmZXJyZWQgZGVsaXZlcnkgZmHDp2FkZS5cbiAqXG4gKiBQYXR0ZXJuOiAgY2FwdHVyZSDihpIgZW5xdWV1ZSDihpIgKG1pY3JvdGFzaykgZmx1c2gg4oaSIGludm9rZSwgd2l0aCBwZXItbGlzdGVuZXJcbiAqICAgICAgICAgICBlcnJvciBpc29sYXRpb24uIENvbXBvc2VzIHRoZSB3aG9sZSBwdXJlIHBpcGVsaW5lOiBNZXJnZWRRdWV1ZVxuICogICAgICAgICAgIChCbG9jayAzLCB3aGljaCBjYXB0dXJlcyB2aWEgQmxvY2sgMSkgKyBGbHVzaERyaXZlciAoQmxvY2sgNCkgK1xuICogICAgICAgICAgIGEgbGlzdGVuZXIgcmVnaXN0cnkgd2l0aCB0aW1pbmcvaW5mbGlnaHQgYWNjb3VudGluZy5cbiAqIFJvbGU6ICAgICBUaGUgcGlwZWxpbmUgaGVsZCBieSBgcnVubmVyL0RlZmVycmVkT2JzZXJ2ZXJUaWVyLnRzIMK3IERlZmVycmVkT2JzZXJ2ZXJUaWVyYC5cbiAqICAgICAgICAgICBQcm9kdWNlcnMgY2FsbCBgY2FwdHVyZSgpYDsgbGlzdGVuZXJzXG4gKiAgICAgICAgICAgcmVjZWl2ZSBlbnZlbG9wZXMgYXQgdGhlIG5leHQgY2hlY2twb2ludCwgXCJvbmUgYmVhdCBiZWhpbmRcIi5cbiAqICAgICAgICAgICBQdXJlIG1vZHVsZSDigJQgemVybyBlbmdpbmUgaW1wb3J0cy5cbiAqXG4gKiBEZWxpdmVyeSBzZW1hbnRpY3MgKG5vcm1hdGl2ZSwgUkZDLTAwMSDCpzUgKyBhbWVuZG1lbnRzIEEyL0E0KTpcbiAqICAgLSBQZXItbGlzdGVuZXIgRklGTzogZXZlcnkgbGlzdGVuZXIgc2VlcyBlbnZlbG9wZXMgaW4gc2VxIG9yZGVyXG4gKiAgICAgKGludm9jYXRpb24gb3JkZXI7IGFuIGFzeW5jIGxpc3RlbmVyJ3MgQ09NUExFVElPTiBvcmRlciBpcyBpdHMgb3duXG4gKiAgICAgY29uY2Vybikg4oCUIEVYQ0VQVCB1bmRlciBgJ2Jsb2NrJ2Agb3ZlcmZsb3csIHdoZXJlIGEgcmVmdXNlZCBlbnF1ZXVlXG4gKiAgICAgaXMgZGVsaXZlcmVkIGlubGluZSBhbmQgb3ZlcnRha2VzIHRoZSBxdWV1ZWQgYmFja2xvZy4gYHNlcWAgYWx3YXlzXG4gKiAgICAgcmVjb3JkcyB0cnVlIGFycml2YWwgb3JkZXIsIHNvIG9yZGVyLXNlbnNpdGl2ZSBjb25zdW1lcnMgcmUtc29ydDtcbiAqICAgICBzZWUgdGhlIGAnYmxvY2snYCBjYXZlYXQgYmVsb3cuXG4gKiAgIC0gRXJyb3IgaXNvbGF0aW9uOiBhIHRocm93aW5nIGxpc3RlbmVyIChzeW5jKSBvciByZWplY3RpbmcgbGlzdGVuZXJcbiAqICAgICAoYXN5bmMpIG5ldmVyIGFmZmVjdHMgc2libGluZ3Mgb3IgdGhlIHByb2R1Y2VyLiBCb3RoIGZhaWx1cmUgbW9kZXNcbiAqICAgICByb3V0ZSB0byB0aGUgaW5qZWN0ZWQgYG9uRXJyb3JgOyBhIHRocm93aW5nIGBvbkVycm9yYCBpcyBpdHNlbGZcbiAqICAgICBzd2FsbG93ZWQuXG4gKiAgIC0gVGhlIGZsdXNoIE5FVkVSIGF3YWl0cyBhIGxpc3RlbmVyLiBBc3luYyBjb250aW51YXRpb25zIGFyZSB0cmFja2VkIGluXG4gKiAgICAgYW4gaW5mbGlnaHQgc2V0OyBgZHJhaW4oeyB0aW1lb3V0TXMgfSlgIHNldHRsZXMgdGhlbVxuICogICAgIChgUHJvbWlzZS5hbGxTZXR0bGVkYCArIGRlYWRsaW5lLCBzaGFwZWQgbGlrZSBgZmx1c2hBbGxEZXRhY2hlZGApLlxuICogICAtIGAnYmxvY2snYCBvdmVyZmxvdzogYSByZWZ1c2VkIGVucXVldWUgaXMgZGVsaXZlcmVkIHN5bmNocm9ub3VzbHlcbiAqICAgICBJTkxJTkUgZnJvbSBgY2FwdHVyZSgpYCDigJQgcmUtaW50cm9kdWNpbmcgYmxvY2tpbmcgZGVsaXZlcnkgYnkgdGhlXG4gKiAgICAgY29uc3VtZXIncyBleHBsaWNpdCBjaG9pY2UuIE9yZGVyaW5nIGNhdmVhdCAoZG9jdW1lbnRlZCArIHRlc3RlZCk6IGFuXG4gKiAgICAgaW5saW5lIGV2ZW50IG92ZXJ0YWtlcyB0aGUgcXVldWVkIGJhY2tsb2cg4oCUIGAnYmxvY2snYCB0cmFkZXMgZ2xvYmFsXG4gKiAgICAgb3JkZXJpbmcgZm9yIHplcm8gbG9zcyBhbmQgYm91bmRlZCBtZW1vcnkuIGBzZXFgIHN0aWxsIHRlbGxzIHRoZVxuICogICAgIHRydWUgYXJyaXZhbCBvcmRlci5cbiAqICAgLSBMaXN0ZW5lciByZWdpc3RyeSBpcyBpZGVtcG90ZW50IGJ5IGlkIChzYW1lIGlkIHJlcGxhY2VzLCBkaWZmZXJlbnRcbiAqICAgICBpZHMgY29leGlzdCkg4oCUIG1pcnJvcnMgdGhlIHJlcG8td2lkZSByZWNvcmRlciBJRCBjb250cmFjdC4gU3RhdHNcbiAqICAgICBhY2N1bXVsYXRlIHBlciBpZCBhY3Jvc3MgcmVwbGFjZW1lbnQ7IGByZW1vdmVMaXN0ZW5lcmAga2VlcHMgdGhlXG4gKiAgICAgaWQncyBhY2N1bXVsYXRlZCBzdGF0cyBmb3IgcG9zdC1ydW4gcmVwb3J0cy5cbiAqICAgLSBFdmVudHMgY2FwdHVyZWQgQkVGT1JFIGFueSBsaXN0ZW5lciBhdHRhY2hlcyBzdGF5IHF1ZXVlZCDigJQgYSBsaXN0ZW5lclxuICogICAgIGF0dGFjaGVkIGJlZm9yZSB0aGUgbmV4dCBjaGVja3BvaW50IHN0aWxsIHJlY2VpdmVzIHRoZSBiYWNrbG9nLlxuICpcbiAqIFBlci1saXN0ZW5lciB0aW1lIGFjY291bnRpbmcgKGFtZW5kbWVudCBBMiDigJQgXCJuYW1lIHRoZSBob2dcIik6IGN1bXVsYXRpdmVcbiAqIGB0b3RhbE1zYCBhbmQgcGVyLWNoZWNrcG9pbnQgYGxhc3RGbHVzaE1zYCBvZiBTWU5DIHRpbWUgcGVyIGxpc3RlbmVyIGlkIOKAlFxuICogdGhlIHRpbWUgdGhhdCBhY3R1YWxseSBibG9ja3MgdGhlIGZsdXNoLiBBbiBhc3luYyBsaXN0ZW5lcidzIGNvbnRpbnVhdGlvblxuICogdGltZSBpcyBpbnRlbnRpb25hbGx5IG5vdCBhdHRyaWJ1dGVkIChpdCBkb2VzIG5vdCBibG9jayBkZWxpdmVyeSkuXG4gKi9cblxuaW1wb3J0IHsgdHlwZSBDYXB0dXJlRW52ZWxvcGUsIHR5cGUgQ2FwdHVyZUhvb2tzLCB0eXBlIENhcHR1cmVQb2xpY3kgfSBmcm9tICcuLi9jYXB0dXJlL2VudmVsb3BlLmpzJztcbmltcG9ydCB7IHR5cGUgRmx1c2hTeW5jUmVzdWx0LCBGbHVzaERyaXZlciB9IGZyb20gJy4vZmx1c2hEcml2ZXIuanMnO1xuaW1wb3J0IHsgdHlwZSBFbnF1ZXVlSW5wdXQsIE1lcmdlZFF1ZXVlIH0gZnJvbSAnLi9tZXJnZWRRdWV1ZS5qcyc7XG5pbXBvcnQgeyB0eXBlIE92ZXJmbG93UG9saWN5IH0gZnJvbSAnLi9yaW5nLmpzJztcblxuLyoqXG4gKiBPbmUgZGVmZXJyZWQgb2JzZXJ2ZXIuIE1heSByZXR1cm4gYSBQcm9taXNlIOKAlCB0aGUgZGlzcGF0Y2hlciB0cmFja3MgaXQgaW5cbiAqIHRoZSBpbmZsaWdodCBzZXQgYnV0IE5FVkVSIGF3YWl0cyBpdCBkdXJpbmcgYSBmbHVzaC5cbiAqL1xuZXhwb3J0IHR5cGUgRGVmZXJyZWRMaXN0ZW5lciA9IChlbnZlbG9wZTogQ2FwdHVyZUVudmVsb3BlKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcblxuZXhwb3J0IGludGVyZmFjZSBEaXNwYXRjaEVycm9yQ29udGV4dCB7XG4gIHJlYWRvbmx5IGxpc3RlbmVySWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgZW52ZWxvcGU6IENhcHR1cmVFbnZlbG9wZTtcbiAgLyoqIGAnc3luYydgID0gbGlzdGVuZXIgdGhyZXc7IGAnYXN5bmMnYCA9IHJldHVybmVkIHByb21pc2UgcmVqZWN0ZWQuICovXG4gIHJlYWRvbmx5IHBoYXNlOiAnc3luYycgfCAnYXN5bmMnO1xufVxuXG4vKiogSW5qZWN0ZWQgZXJyb3Igc2luayDigJQgdGhlIHdpcmluZyBsYXllciByb3V0ZXMgdGhlc2UgKEJsb2NrIDYpLiAqL1xuZXhwb3J0IHR5cGUgRGlzcGF0Y2hFcnJvckhhbmRsZXIgPSAoZXJyb3I6IHVua25vd24sIGNvbnRleHQ6IERpc3BhdGNoRXJyb3JDb250ZXh0KSA9PiB2b2lkO1xuXG5leHBvcnQgaW50ZXJmYWNlIERlZmVycmVkRGlzcGF0Y2hlck9wdGlvbnMge1xuICAvKiogUXVldWUgYm91bmQg4oCUIGRlZmF1bHQgMTAgMDAwIChzZWUgYE1lcmdlZFF1ZXVlYCkuICovXG4gIHJlYWRvbmx5IG1heFF1ZXVlPzogbnVtYmVyO1xuICAvKiogT3ZlcmZsb3cgcG9saWN5IOKAlCBkZWZhdWx0IGAnZHJvcC1vbGRlc3QnYC4gKi9cbiAgcmVhZG9ubHkgb3ZlcmZsb3c/OiBPdmVyZmxvd1BvbGljeTtcbiAgLyoqIGAnc2FtcGxlJ2Agb3ZlcmZsb3cgb25seSDigJQgYWRtaXQgMSBpbiB0aGlzIG1hbnkgc2F0dXJhdGVkIGFycml2YWxzLiAqL1xuICByZWFkb25seSBzYW1wbGVFdmVyeT86IG51bWJlcjtcbiAgLyoqIERlZmF1bHQgY2FwdHVyZSBwb2xpY3kg4oCUIGRlZmF1bHQgYCdzdW1tYXJ5J2AuICovXG4gIHJlYWRvbmx5IGNhcHR1cmVQb2xpY3k/OiBDYXB0dXJlUG9saWN5O1xuICAvKiogUGVyLWZsdXNoIHRpbWUgYnVkZ2V0LCBtcyAoQTEpIOKAlCBkZWZhdWx0IDI7IGBJbmZpbml0eWAgPSBmdWxsIGRyYWluLiAqL1xuICByZWFkb25seSBmbHVzaEJ1ZGdldE1zPzogbnVtYmVyO1xuICAvKiogTGlzdGVuZXItZmFpbHVyZSBzaW5rLiBObyBkZWZhdWx0IOKAlCB3aXRob3V0IGl0LCBmYWlsdXJlcyBhcmUgc2lsZW50LiAqL1xuICByZWFkb25seSBvbkVycm9yPzogRGlzcGF0Y2hFcnJvckhhbmRsZXI7XG4gIC8qKiBDYXB0dXJlIHNlYW1zIChkZXYtd2FybiwgY2FwdHVyZWRBdCBjbG9jaykg4oCUIHNlZSBgQ2FwdHVyZUhvb2tzYC4gKi9cbiAgcmVhZG9ubHkgaG9va3M/OiBDYXB0dXJlSG9va3M7XG4gIC8qKiBUaW1pbmcgY2xvY2sgZm9yIGJ1ZGdldCArIHBlci1saXN0ZW5lciBhY2NvdW50aW5nLiBJbmplY3RhYmxlLiAqL1xuICByZWFkb25seSBub3c/OiAoKSA9PiBudW1iZXI7XG4gIC8qKiBDaGVja3BvaW50IHByaW1pdGl2ZSDigJQgZGVmYXVsdCBgcXVldWVNaWNyb3Rhc2tgLiBJbmplY3RhYmxlLiAqL1xuICByZWFkb25seSBzY2hlZHVsZT86IChjYjogKCkgPT4gdm9pZCkgPT4gdm9pZDtcbn1cblxuLyoqIFBlci1saXN0ZW5lciBhY2NvdW50aW5nIChBMi9BNCkuICovXG5leHBvcnQgaW50ZXJmYWNlIExpc3RlbmVyU3RhdHMge1xuICAvKiogRW52ZWxvcGVzIGRlbGl2ZXJlZCAoaW52b2NhdGlvbnMsIGluY2x1ZGluZyBvbmVzIHRoYXQgdGhyZXcpLiAqL1xuICByZWFkb25seSBldmVudHM6IG51bWJlcjtcbiAgLyoqIEN1bXVsYXRpdmUgc3luYyBkZWxpdmVyeSB0aW1lLCBtcy4gKi9cbiAgcmVhZG9ubHkgdG90YWxNczogbnVtYmVyO1xuICAvKiogU3luYyBkZWxpdmVyeSB0aW1lIHNpbmNlIHRoZSBsYXN0IGZsdXNoIHN0YXJ0ZWQsIG1zLiAqL1xuICByZWFkb25seSBsYXN0Rmx1c2hNczogbnVtYmVyO1xufVxuXG4vKiogVGhlIEJsb2NrIDkgb2JzZXJ2YWJpbGl0eSBzdXJmYWNlIChhbWVuZG1lbnQgQTQpIOKAlCBwdXJlIGdldHRlci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGlzcGF0Y2hlclN0YXRzIHtcbiAgLyoqIEN1cnJlbnQgYmFja2xvZy4gKi9cbiAgcmVhZG9ubHkgZGVwdGg6IG51bWJlcjtcbiAgLyoqIEV2ZW50cyBMT1NUIChvdmVyZmxvdykg4oCUIG5ldmVyIHNpbGVudDsgYWxzbyB2aXNpYmxlIGFzIHNlcSBnYXBzLiAqL1xuICByZWFkb25seSBkcm9wczogbnVtYmVyO1xuICAvKiogQ29tcGxldGVkIGNoZWNrcG9pbnQgZmx1c2hlcy4gKi9cbiAgcmVhZG9ubHkgZmx1c2hlczogbnVtYmVyO1xuICAvKiogRmx1c2hlcyBjdXQgc2hvcnQgYnkgYGZsdXNoQnVkZ2V0TXNgIChBMSkuICovXG4gIHJlYWRvbmx5IGJ1ZGdldEV4aGF1c3RlZDogbnVtYmVyO1xuICAvKiogcDk1IGZsdXNoIGR1cmF0aW9uLCBtcyAocm9sbGluZyB3aW5kb3cpLiAqL1xuICByZWFkb25seSBwOTVGbHVzaE1zOiBudW1iZXI7XG4gIC8qKiBgJ2Jsb2NrJ2AtcG9saWN5IHJlZnVzYWxzIGRlbGl2ZXJlZCBzeW5jaHJvbm91c2x5IGlubGluZS4gKi9cbiAgcmVhZG9ubHkgaW5saW5lRGVsaXZlcmllczogbnVtYmVyO1xuICAvKiogQXN5bmMgbGlzdGVuZXIgY29udGludWF0aW9ucyBub3QgeWV0IHNldHRsZWQuICovXG4gIHJlYWRvbmx5IGluZmxpZ2h0OiBudW1iZXI7XG4gIC8qKiBQZXItbGlzdGVuZXIgdGltZSBhY2NvdW50aW5nIOKAlCBcIm5hbWUgdGhlIGhvZ1wiIChBMikuICovXG4gIHJlYWRvbmx5IHBlckxpc3RlbmVyOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBMaXN0ZW5lclN0YXRzPj47XG59XG5cbi8qKiBSZXN1bHQgb2Yge0BsaW5rIERlZmVycmVkRGlzcGF0Y2hlci5kcmFpbn0g4oCUIGBmbHVzaEFsbERldGFjaGVkYCBzaGFwZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRHJhaW5SZXN1bHQge1xuICAvKiogQXN5bmMgY29udGludWF0aW9ucyBzZWVuIHNldHRsaW5nIGZ1bGZpbGxlZC4gQmVzdC1lZmZvcnQgY291bnQg4oCUIGFcbiAgICogIGNvbnRpbnVhdGlvbiB0aGF0IHNldHRsZXMgYmV0d2VlbiBjaGVja3MgaXMgZHJhaW5lZCBidXQgbWF5IG5vdCBiZVxuICAgKiAgY291bnRlZCAoc2FtZSBzZW1hbnRpY3MgYXMgYGZsdXNoQWxsRGV0YWNoZWRgKS4gKi9cbiAgcmVhZG9ubHkgZG9uZTogbnVtYmVyO1xuICAvKiogQ29udGludWF0aW9ucyB3aG9zZSBsaXN0ZW5lciBwcm9taXNlIHJlamVjdGVkIChyb3V0ZWQgdG8gb25FcnJvcikuICovXG4gIHJlYWRvbmx5IGZhaWxlZDogbnVtYmVyO1xuICAvKiogU3RpbGwgaW4gZmxpZ2h0IChvciBxdWV1ZWQpIHdoZW4gdGhlIGRlYWRsaW5lIGV4cGlyZWQuIGAwYCA9IGRyYWluZWQuICovXG4gIHJlYWRvbmx5IHBlbmRpbmc6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIE11dGFibGVMaXN0ZW5lclN0YXRzIHtcbiAgZXZlbnRzOiBudW1iZXI7XG4gIHRvdGFsTXM6IG51bWJlcjtcbiAgbGFzdEZsdXNoTXM6IG51bWJlcjtcbn1cblxuY29uc3QgZGVmYXVsdE5vdyA9ICgpOiBudW1iZXIgPT4gKHR5cGVvZiBwZXJmb3JtYW5jZSAhPT0gJ3VuZGVmaW5lZCcgPyBwZXJmb3JtYW5jZS5ub3coKSA6IERhdGUubm93KCkpO1xuXG5mdW5jdGlvbiBpc1RoZW5hYmxlKHZhbHVlOiB2b2lkIHwgUHJvbWlzZTx2b2lkPik6IHZhbHVlIGlzIFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgKHZhbHVlIGFzIFByb21pc2U8dm9pZD4pLnRoZW4gPT09ICdmdW5jdGlvbic7XG59XG5cbmV4cG9ydCBjbGFzcyBEZWZlcnJlZERpc3BhdGNoZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IHF1ZXVlOiBNZXJnZWRRdWV1ZTtcbiAgcHJpdmF0ZSByZWFkb25seSBkcml2ZXI6IEZsdXNoRHJpdmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IGxpc3RlbmVycyA9IG5ldyBNYXA8c3RyaW5nLCBEZWZlcnJlZExpc3RlbmVyPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IGxpc3RlbmVyU3RhdHMgPSBuZXcgTWFwPHN0cmluZywgTXV0YWJsZUxpc3RlbmVyU3RhdHM+KCk7XG4gIC8qKiBUcmFja2VkIGFzeW5jIGNvbnRpbnVhdGlvbnMg4oCUIHJlc29sdmUgYHRydWVgIChvaykgLyBgZmFsc2VgIChmYWlsZWQpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGluZmxpZ2h0ID0gbmV3IFNldDxQcm9taXNlPGJvb2xlYW4+PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IG9uRXJyb3I/OiBEaXNwYXRjaEVycm9ySGFuZGxlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBub3c6ICgpID0+IG51bWJlcjtcbiAgcHJpdmF0ZSBpbmxpbmVEZWxpdmVyaWVzID0gMDtcblxuICBjb25zdHJ1Y3RvcihvcHRzPzogRGVmZXJyZWREaXNwYXRjaGVyT3B0aW9ucykge1xuICAgIHRoaXMub25FcnJvciA9IG9wdHM/Lm9uRXJyb3I7XG4gICAgdGhpcy5ub3cgPSBvcHRzPy5ub3cgPz8gZGVmYXVsdE5vdztcbiAgICB0aGlzLnF1ZXVlID0gbmV3IE1lcmdlZFF1ZXVlKHtcbiAgICAgIG1heFF1ZXVlOiBvcHRzPy5tYXhRdWV1ZSxcbiAgICAgIG92ZXJmbG93OiBvcHRzPy5vdmVyZmxvdyxcbiAgICAgIHNhbXBsZUV2ZXJ5OiBvcHRzPy5zYW1wbGVFdmVyeSxcbiAgICAgIGNhcHR1cmVQb2xpY3k6IG9wdHM/LmNhcHR1cmVQb2xpY3ksXG4gICAgICBob29rczogb3B0cz8uaG9va3MsXG4gICAgfSk7XG4gICAgdGhpcy5kcml2ZXIgPSBuZXcgRmx1c2hEcml2ZXIoe1xuICAgICAgZGVwdGg6ICgpID0+IHRoaXMucXVldWUuZGVwdGgsXG4gICAgICBwcm9jZXNzTmV4dDogKCkgPT4gdGhpcy5kZWxpdmVyTmV4dCgpLFxuICAgICAgZmx1c2hCdWRnZXRNczogb3B0cz8uZmx1c2hCdWRnZXRNcyxcbiAgICAgIG5vdzogb3B0cz8ubm93LFxuICAgICAgc2NoZWR1bGU6IG9wdHM/LnNjaGVkdWxlLFxuICAgICAgb25GbHVzaFN0YXJ0OiAoKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3Qgc3RhdHMgb2YgdGhpcy5saXN0ZW5lclN0YXRzLnZhbHVlcygpKSBzdGF0cy5sYXN0Rmx1c2hNcyA9IDA7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIElkZW1wb3RlbnQgYnkgaWQg4oCUIHNhbWUgaWQgcmVwbGFjZXMgKHN0YXRzIGNvbnRpbnVlKSwgaWRzIGNvZXhpc3QuICovXG4gIGFkZExpc3RlbmVyKGlkOiBzdHJpbmcsIGxpc3RlbmVyOiBEZWZlcnJlZExpc3RlbmVyKTogdm9pZCB7XG4gICAgdGhpcy5saXN0ZW5lcnMuc2V0KGlkLCBsaXN0ZW5lcik7XG4gICAgaWYgKCF0aGlzLmxpc3RlbmVyU3RhdHMuaGFzKGlkKSkge1xuICAgICAgdGhpcy5saXN0ZW5lclN0YXRzLnNldChpZCwgeyBldmVudHM6IDAsIHRvdGFsTXM6IDAsIGxhc3RGbHVzaE1zOiAwIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTdG9wIGRlbGl2ZXJpbmcgdG8gYGlkYC4gQWNjdW11bGF0ZWQgc3RhdHMgYXJlIGtlcHQgZm9yIHJlcG9ydHMuICovXG4gIHJlbW92ZUxpc3RlbmVyKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmxpc3RlbmVycy5kZWxldGUoaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2R1Y2VyIGVudHJ5IHBvaW50OiBjYXB0dXJlIHRoZSBldmVudCAoc2VxLXN0YW1wZWQsIHBheWxvYWQgcGVyXG4gICAqIHBvbGljeSkgYW5kIHN0YWdlIGl0IGZvciB0aGUgbmV4dCBjaGVja3BvaW50LiBDaGVhcDsgTkVWRVIgdGhyb3dzO1xuICAgKiBuZXZlciBibG9ja3Mg4oCUIGV4Y2VwdCB1bmRlciBgJ2Jsb2NrJ2Agb3ZlcmZsb3csIHdoZXJlIGEgcmVmdXNlZFxuICAgKiBlbnF1ZXVlIGlzIGRlbGl2ZXJlZCBzeW5jaHJvbm91c2x5IGlubGluZSAoZXhwbGljaXQgY29uc3VtZXIgY2hvaWNlKS5cbiAgICovXG4gIGNhcHR1cmUoaW5wdXQ6IEVucXVldWVJbnB1dCwgcG9saWN5PzogQ2FwdHVyZVBvbGljeSk6IHZvaWQge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMucXVldWUuZW5xdWV1ZShpbnB1dCwgcG9saWN5KTtcbiAgICBpZiAocmVzdWx0Lm91dGNvbWUgPT09ICdxdWV1ZWQnKSB7XG4gICAgICB0aGlzLmRyaXZlci5hcm0oKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHJlc3VsdC5vdXRjb21lID09PSAnaW5saW5lJykge1xuICAgICAgdGhpcy5pbmxpbmVEZWxpdmVyaWVzICs9IDE7XG4gICAgICB0aGlzLmRlbGl2ZXIocmVzdWx0LmVudmVsb3BlKTtcbiAgICB9XG4gICAgLy8gJ2Ryb3BwZWQnOiBjb3VudGVkIGJ5IHRoZSBxdWV1ZTsgbG9zcyBzdXJmYWNlcyBpbiBzdGF0cyArIHNlcSBnYXBzLlxuICB9XG5cbiAgLyoqXG4gICAqIFRlcm1pbmFsIGZsdXNoIOKAlCBzeW5jaHJvbm91c2x5IGRlbGl2ZXIgZXZlcnl0aGluZyBxdWV1ZWQgKGVuZCBvZiBydW4gL1xuICAgKiBzaHV0ZG93bikuIEFzeW5jIGxpc3RlbmVyIGNvbnRpbnVhdGlvbnMgYXJlIE5PVCBhd2FpdGVkOyBmb2xsb3cgd2l0aFxuICAgKiBgZHJhaW4oKWAgZm9yIHRoYXQuXG4gICAqL1xuICBmbHVzaE5vdyhvcHRzPzogeyBtYXhSb3VuZHM/OiBudW1iZXIgfSk6IEZsdXNoU3luY1Jlc3VsdCB7XG4gICAgcmV0dXJuIHRoaXMuZHJpdmVyLmZsdXNoU3luYyhvcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGbHVzaCB0aGUgYmFja2xvZywgdGhlbiBzZXR0bGUgYWxsIGluZmxpZ2h0IGFzeW5jIGNvbnRpbnVhdGlvbnMg4oCUXG4gICAqIGBQcm9taXNlLmFsbFNldHRsZWRgIHVuZGVyIGEgZGVhZGxpbmUsIHNoYXBlZCBsaWtlIGBmbHVzaEFsbERldGFjaGVkYC5cbiAgICogTG9vcHMgd2hpbGUgY29udGludWF0aW9ucyBzcGF3biBuZXcgY2FwdHVyZXMsIHVudGlsIHF1aWVzY2VudCBvciB0aGVcbiAgICogZGVhZGxpbmUgZXhwaXJlcy5cbiAgICovXG4gIGFzeW5jIGRyYWluKG9wdHM/OiB7IHRpbWVvdXRNcz86IG51bWJlciB9KTogUHJvbWlzZTxEcmFpblJlc3VsdD4ge1xuICAgIGNvbnN0IHRpbWVvdXRNcyA9IG9wdHM/LnRpbWVvdXRNcyA/PyAzMF8wMDA7XG4gICAgY29uc3Qgc3RhcnRlZEF0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgZG9uZSA9IDA7XG4gICAgbGV0IGZhaWxlZCA9IDA7XG5cbiAgICB0aGlzLmZsdXNoTm93KCk7XG4gICAgd2hpbGUgKHRoaXMuaW5mbGlnaHQuc2l6ZSA+IDApIHtcbiAgICAgIGNvbnN0IHJlbWFpbmluZ01zID0gdGltZW91dE1zIC0gKERhdGUubm93KCkgLSBzdGFydGVkQXQpO1xuICAgICAgaWYgKHJlbWFpbmluZ01zIDw9IDApIHJldHVybiB7IGRvbmUsIGZhaWxlZCwgcGVuZGluZzogdGhpcy5pbmZsaWdodC5zaXplICsgdGhpcy5xdWV1ZS5kZXB0aCB9O1xuXG4gICAgICBjb25zdCBiYXRjaCA9IFsuLi50aGlzLmluZmxpZ2h0XTtcbiAgICAgIGxldCB0aW1lcklkOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZDtcbiAgICAgIGNvbnN0IHRpbWVvdXRQcm9taXNlID0gbmV3IFByb21pc2U8J19fZHJhaW5fdGltZW91dF9fJz4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgdGltZXJJZCA9IHNldFRpbWVvdXQoKCkgPT4gcmVzb2x2ZSgnX19kcmFpbl90aW1lb3V0X18nKSwgcmVtYWluaW5nTXMpO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBzZXR0bGVkID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtQcm9taXNlLmFsbFNldHRsZWQoYmF0Y2gpLCB0aW1lb3V0UHJvbWlzZV0pO1xuICAgICAgaWYgKHRpbWVySWQgIT09IHVuZGVmaW5lZCkgY2xlYXJUaW1lb3V0KHRpbWVySWQpO1xuICAgICAgaWYgKHNldHRsZWQgPT09ICdfX2RyYWluX3RpbWVvdXRfXycpIHtcbiAgICAgICAgcmV0dXJuIHsgZG9uZSwgZmFpbGVkLCBwZW5kaW5nOiB0aGlzLmluZmxpZ2h0LnNpemUgKyB0aGlzLnF1ZXVlLmRlcHRoIH07XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IHIgb2Ygc2V0dGxlZCkge1xuICAgICAgICAvLyBUcmFja2VkIHByb21pc2VzIG5ldmVyIHJlamVjdCDigJQgdGhleSByZXNvbHZlIHRydWUgKG9rKSAvIGZhbHNlLlxuICAgICAgICBpZiAoci5zdGF0dXMgPT09ICdmdWxmaWxsZWQnICYmIHIudmFsdWUgPT09IGZhbHNlKSBmYWlsZWQgKz0gMTtcbiAgICAgICAgZWxzZSBkb25lICs9IDE7XG4gICAgICB9XG4gICAgICAvLyBDb250aW51YXRpb25zIG1heSBoYXZlIGNhcHR1cmVkIG1vcmUgZXZlbnRzIOKAlCBmbHVzaCBhbmQgcmUtY2hlY2suXG4gICAgICB0aGlzLmZsdXNoTm93KCk7XG4gICAgfVxuICAgIHJldHVybiB7IGRvbmUsIGZhaWxlZCwgcGVuZGluZzogdGhpcy5xdWV1ZS5kZXB0aCB9O1xuICB9XG5cbiAgLyoqIEE0IOKAlCB0aGUgc3RhdHMgb2JqZWN0IEJsb2NrIDkgY29uc3VtZXMuIFB1cmUgZ2V0dGVyLCBmcmVzaCBzbmFwc2hvdC4gKi9cbiAgZ2V0U3RhdHMoKTogRGlzcGF0Y2hlclN0YXRzIHtcbiAgICBjb25zdCBjb3VudGVycyA9IHRoaXMucXVldWUuZ2V0Q291bnRlcnMoKTtcbiAgICBjb25zdCBkcml2ZXJTdGF0cyA9IHRoaXMuZHJpdmVyLmdldFN0YXRzKCk7XG4gICAgY29uc3QgcGVyTGlzdGVuZXI6IFJlY29yZDxzdHJpbmcsIExpc3RlbmVyU3RhdHM+ID0ge307XG4gICAgZm9yIChjb25zdCBbaWQsIHN0YXRzXSBvZiB0aGlzLmxpc3RlbmVyU3RhdHMpIHtcbiAgICAgIHBlckxpc3RlbmVyW2lkXSA9IHsgZXZlbnRzOiBzdGF0cy5ldmVudHMsIHRvdGFsTXM6IHN0YXRzLnRvdGFsTXMsIGxhc3RGbHVzaE1zOiBzdGF0cy5sYXN0Rmx1c2hNcyB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZGVwdGg6IHRoaXMucXVldWUuZGVwdGgsXG4gICAgICBkcm9wczogY291bnRlcnMuZHJvcHMsXG4gICAgICBmbHVzaGVzOiBkcml2ZXJTdGF0cy5mbHVzaGVzLFxuICAgICAgYnVkZ2V0RXhoYXVzdGVkOiBkcml2ZXJTdGF0cy5idWRnZXRFeGhhdXN0ZWQsXG4gICAgICBwOTVGbHVzaE1zOiBkcml2ZXJTdGF0cy5wOTVGbHVzaE1zLFxuICAgICAgaW5saW5lRGVsaXZlcmllczogdGhpcy5pbmxpbmVEZWxpdmVyaWVzLFxuICAgICAgaW5mbGlnaHQ6IHRoaXMuaW5mbGlnaHQuc2l6ZSxcbiAgICAgIHBlckxpc3RlbmVyLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGRlbGl2ZXJOZXh0KCk6IHZvaWQge1xuICAgIGNvbnN0IGVudmVsb3BlID0gdGhpcy5xdWV1ZS5zaGlmdCgpO1xuICAgIGlmIChlbnZlbG9wZSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgdGhpcy5kZWxpdmVyKGVudmVsb3BlKTtcbiAgfVxuXG4gIC8qKiBJbnZva2UgZXZlcnkgbGlzdGVuZXIgd2l0aCBmdWxsIGVycm9yIGlzb2xhdGlvbiArIHRpbWUgYWNjb3VudGluZy4gKi9cbiAgcHJpdmF0ZSBkZWxpdmVyKGVudmVsb3BlOiBDYXB0dXJlRW52ZWxvcGUpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IFtpZCwgbGlzdGVuZXJdIG9mIHRoaXMubGlzdGVuZXJzKSB7XG4gICAgICBjb25zdCBzdGF0cyA9IHRoaXMubGlzdGVuZXJTdGF0cy5nZXQoaWQpIGFzIE11dGFibGVMaXN0ZW5lclN0YXRzO1xuICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLm5vdygpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gbGlzdGVuZXIoZW52ZWxvcGUpO1xuICAgICAgICBpZiAoaXNUaGVuYWJsZShyZXN1bHQpKSB0aGlzLnRyYWNrKHJlc3VsdCwgaWQsIGVudmVsb3BlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuc2FmZU9uRXJyb3IoZXJyb3IsIHsgbGlzdGVuZXJJZDogaWQsIGVudmVsb3BlLCBwaGFzZTogJ3N5bmMnIH0pO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgY29uc3QgZWxhcHNlZCA9IHRoaXMubm93KCkgLSBzdGFydDtcbiAgICAgICAgc3RhdHMuZXZlbnRzICs9IDE7XG4gICAgICAgIHN0YXRzLnRvdGFsTXMgKz0gZWxhcHNlZDtcbiAgICAgICAgc3RhdHMubGFzdEZsdXNoTXMgKz0gZWxhcHNlZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogVHJhY2sgYW4gYXN5bmMgY29udGludWF0aW9uOyByb3V0ZSBpdHMgcmVqZWN0aW9uOyBuZXZlciByZWplY3QuICovXG4gIHByaXZhdGUgdHJhY2socHJvbWlzZTogUHJvbWlzZTx2b2lkPiwgbGlzdGVuZXJJZDogc3RyaW5nLCBlbnZlbG9wZTogQ2FwdHVyZUVudmVsb3BlKTogdm9pZCB7XG4gICAgY29uc3QgdHJhY2tlZDogUHJvbWlzZTxib29sZWFuPiA9IHByb21pc2UudGhlbihcbiAgICAgICgpID0+IHRydWUsXG4gICAgICAoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5zYWZlT25FcnJvcihlcnJvciwgeyBsaXN0ZW5lcklkLCBlbnZlbG9wZSwgcGhhc2U6ICdhc3luYycgfSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0sXG4gICAgKTtcbiAgICB0aGlzLmluZmxpZ2h0LmFkZCh0cmFja2VkKTtcbiAgICAvLyBTZWxmLWNsZWFudXAg4oCUIGB0cmFja2VkYCBuZXZlciByZWplY3RzLCBzbyB0aGlzIGNoYWluIGNhbm5vdCBmbG9hdCBhblxuICAgIC8vIHVuaGFuZGxlZCByZWplY3Rpb24uXG4gICAgdHJhY2tlZC50aGVuKCgpID0+IHRoaXMuaW5mbGlnaHQuZGVsZXRlKHRyYWNrZWQpKTtcbiAgfVxuXG4gIC8qKiBUaGUgZXJyb3Igc2luayBtdXN0IG5ldmVyIGJlY29tZSBhbiBlcnJvciBzb3VyY2UuICovXG4gIHByaXZhdGUgc2FmZU9uRXJyb3IoZXJyb3I6IHVua25vd24sIGNvbnRleHQ6IERpc3BhdGNoRXJyb3JDb250ZXh0KTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMub25FcnJvcj8uKGVycm9yLCBjb250ZXh0KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIFN3YWxsb3cg4oCUIGlzb2xhdGlvbiBpcyBhYnNvbHV0ZS5cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -10,10 +10,13 @@
|
|
|
10
10
|
* (Block 4, armed-once microtask checkpoints, flushBudgetMs) ─►
|
|
11
11
|
* DeferredDispatcher (Block 5, isolated listeners + inflight + stats)
|
|
12
12
|
*
|
|
13
|
-
* INTERNAL MODULE —
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
13
|
+
* INTERNAL MODULE — queue implementations stay behind this barrel. Engine
|
|
14
|
+
* integration lives in `runner/DeferredObserverTier.ts · DeferredObserverTier`;
|
|
15
|
+
* `runner/attach.ts · RunObservers` creates the tier on the first deferred
|
|
16
|
+
* attach. Public use is through the executor's attach options, with delivery
|
|
17
|
+
* types re-exported by `src/index.ts` (see docs/guides/observers-deferred.md).
|
|
18
|
+
* Zero engine imports: this directory may import only `../capture/` and its
|
|
19
|
+
* own files; the runner imports the pipeline, never the reverse.
|
|
17
20
|
*/
|
|
18
21
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
22
|
exports.BoundedRing = exports.MergedQueue = exports.DEFAULT_MAX_QUEUE = exports.FlushDriver = exports.FLUSH_SAMPLE_WINDOW = exports.DeferredDispatcher = exports.summarizePayload = exports.PAYLOAD_SUMMARY_MAX_NODES = exports.PAYLOAD_SUMMARY_MAX_ENTRIES = exports.PAYLOAD_SUMMARY_MAX_DEPTH = exports.capture = void 0;
|
|
@@ -33,4 +36,4 @@ Object.defineProperty(exports, "DEFAULT_MAX_QUEUE", { enumerable: true, get: fun
|
|
|
33
36
|
Object.defineProperty(exports, "MergedQueue", { enumerable: true, get: function () { return mergedQueue_js_1.MergedQueue; } });
|
|
34
37
|
var ring_js_1 = require("./ring.js");
|
|
35
38
|
Object.defineProperty(exports, "BoundedRing", { enumerable: true, get: function () { return ring_js_1.BoundedRing; } });
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL29ic2VydmVyLXF1ZXVlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwwQkFBMEI7QUFDMUI7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHOzs7QUFZSCxzREFNZ0M7QUFMOUIsc0dBQUEsT0FBTyxPQUFBO0FBQ1Asd0hBQUEseUJBQXlCLE9BQUE7QUFDekIsMEhBQUEsMkJBQTJCLE9BQUE7QUFDM0Isd0hBQUEseUJBQXlCLE9BQUE7QUFDekIsK0dBQUEsZ0JBQWdCLE9BQUE7QUFXbEIsaUVBQTZEO0FBQXBELDJIQUFBLGtCQUFrQixPQUFBO0FBRTNCLG1EQUFvRTtBQUEzRCxxSEFBQSxtQkFBbUIsT0FBQTtBQUFFLDZHQUFBLFdBQVcsT0FBQTtBQUV6QyxtREFBa0U7QUFBekQsbUhBQUEsaUJBQWlCLE9BQUE7QUFBRSw2R0FBQSxXQUFXLE9BQUE7QUFFdkMscUNBQXdDO0FBQS9CLHNHQUFBLFdBQVcsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGlzdGFuYnVsIGlnbm9yZSBmaWxlICovXG4vKipcbiAqIG9ic2VydmVyLXF1ZXVlLyDigJQgUkZDLTAwMSBkZWZlcnJlZCBvYnNlcnZlciBkZWxpdmVyeSwgQmxvY2tzIDLigJM1LlxuICpcbiAqIFRoZSBwdXJlIFwib25lIGJlYXQgYmVoaW5kXCIgcGlwZWxpbmU6XG4gKlxuICogICBwcm9kdWNlciDilIDilrogY2FwdHVyZSAoQmxvY2sgMSwgYGNhcHR1cmUvZW52ZWxvcGVgKSDilIDilrogTWVyZ2VkUXVldWVcbiAqICAgKEJsb2NrIDMsIHNlcS1zdGFtcGVkIG92ZXIgYSBCb3VuZGVkUmluZywgQmxvY2sgMikg4pSA4pa6IEZsdXNoRHJpdmVyXG4gKiAgIChCbG9jayA0LCBhcm1lZC1vbmNlIG1pY3JvdGFzayBjaGVja3BvaW50cywgZmx1c2hCdWRnZXRNcykg4pSA4pa6XG4gKiAgIERlZmVycmVkRGlzcGF0Y2hlciAoQmxvY2sgNSwgaXNvbGF0ZWQgbGlzdGVuZXJzICsgaW5mbGlnaHQgKyBzdGF0cylcbiAqXG4gKiBJTlRFUk5BTCBNT0RVTEUg4oCUIHF1ZXVlIGltcGxlbWVudGF0aW9ucyBzdGF5IGJlaGluZCB0aGlzIGJhcnJlbC4gRW5naW5lXG4gKiBpbnRlZ3JhdGlvbiBsaXZlcyBpbiBgcnVubmVyL0RlZmVycmVkT2JzZXJ2ZXJUaWVyLnRzIMK3IERlZmVycmVkT2JzZXJ2ZXJUaWVyYDtcbiAqIGBydW5uZXIvYXR0YWNoLnRzIMK3IFJ1bk9ic2VydmVyc2AgY3JlYXRlcyB0aGUgdGllciBvbiB0aGUgZmlyc3QgZGVmZXJyZWRcbiAqIGF0dGFjaC4gUHVibGljIHVzZSBpcyB0aHJvdWdoIHRoZSBleGVjdXRvcidzIGF0dGFjaCBvcHRpb25zLCB3aXRoIGRlbGl2ZXJ5XG4gKiB0eXBlcyByZS1leHBvcnRlZCBieSBgc3JjL2luZGV4LnRzYCAoc2VlIGRvY3MvZ3VpZGVzL29ic2VydmVycy1kZWZlcnJlZC5tZCkuXG4gKiBaZXJvIGVuZ2luZSBpbXBvcnRzOiB0aGlzIGRpcmVjdG9yeSBtYXkgaW1wb3J0IG9ubHkgYC4uL2NhcHR1cmUvYCBhbmQgaXRzXG4gKiBvd24gZmlsZXM7IHRoZSBydW5uZXIgaW1wb3J0cyB0aGUgcGlwZWxpbmUsIG5ldmVyIHRoZSByZXZlcnNlLlxuICovXG5cbmV4cG9ydCB0eXBlIHtcbiAgQ2FwdHVyZUNoYW5uZWwsXG4gIENhcHR1cmVFbnZlbG9wZSxcbiAgQ2FwdHVyZUhvb2tzLFxuICBDYXB0dXJlUG9saWN5LFxuICBDYXB0dXJlUmVxdWVzdCxcbiAgUGF5bG9hZFN1bW1hcnksXG4gIFBheWxvYWRTdW1tYXJ5Tm9kZSxcbiAgUGF5bG9hZFN1bW1hcnlUeXBlLFxufSBmcm9tICcuLi9jYXB0dXJlL2VudmVsb3BlLmpzJztcbmV4cG9ydCB7XG4gIGNhcHR1cmUsXG4gIFBBWUxPQURfU1VNTUFSWV9NQVhfREVQVEgsXG4gIFBBWUxPQURfU1VNTUFSWV9NQVhfRU5UUklFUyxcbiAgUEFZTE9BRF9TVU1NQVJZX01BWF9OT0RFUyxcbiAgc3VtbWFyaXplUGF5bG9hZCxcbn0gZnJvbSAnLi4vY2FwdHVyZS9lbnZlbG9wZS5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIERlZmVycmVkRGlzcGF0Y2hlck9wdGlvbnMsXG4gIERlZmVycmVkTGlzdGVuZXIsXG4gIERpc3BhdGNoRXJyb3JDb250ZXh0LFxuICBEaXNwYXRjaEVycm9ySGFuZGxlcixcbiAgRGlzcGF0Y2hlclN0YXRzLFxuICBEcmFpblJlc3VsdCxcbiAgTGlzdGVuZXJTdGF0cyxcbn0gZnJvbSAnLi9kZWZlcnJlZERpc3BhdGNoZXIuanMnO1xuZXhwb3J0IHsgRGVmZXJyZWREaXNwYXRjaGVyIH0gZnJvbSAnLi9kZWZlcnJlZERpc3BhdGNoZXIuanMnO1xuZXhwb3J0IHR5cGUgeyBGbHVzaERyaXZlck9wdGlvbnMsIEZsdXNoRHJpdmVyU3RhdHMsIEZsdXNoT3V0Y29tZSwgRmx1c2hTeW5jUmVzdWx0IH0gZnJvbSAnLi9mbHVzaERyaXZlci5qcyc7XG5leHBvcnQgeyBGTFVTSF9TQU1QTEVfV0lORE9XLCBGbHVzaERyaXZlciB9IGZyb20gJy4vZmx1c2hEcml2ZXIuanMnO1xuZXhwb3J0IHR5cGUgeyBFbnF1ZXVlSW5wdXQsIEVucXVldWVPdXRjb21lLCBFbnF1ZXVlUmVzdWx0LCBNZXJnZWRRdWV1ZU9wdGlvbnMgfSBmcm9tICcuL21lcmdlZFF1ZXVlLmpzJztcbmV4cG9ydCB7IERFRkFVTFRfTUFYX1FVRVVFLCBNZXJnZWRRdWV1ZSB9IGZyb20gJy4vbWVyZ2VkUXVldWUuanMnO1xuZXhwb3J0IHR5cGUgeyBPdmVyZmxvd1BvbGljeSwgUmluZ0NvdW50ZXJzLCBSaW5nT3B0aW9ucywgUmluZ1B1c2hSZXN1bHQgfSBmcm9tICcuL3JpbmcuanMnO1xuZXhwb3J0IHsgQm91bmRlZFJpbmcgfSBmcm9tICcuL3JpbmcuanMnO1xuIl19
|
package/dist/lib/pause/index.js
CHANGED
|
@@ -10,4 +10,4 @@ var types_js_1 = require("./types.js");
|
|
|
10
10
|
Object.defineProperty(exports, "isPauseResult", { enumerable: true, get: function () { return types_js_1.isPauseResult; } });
|
|
11
11
|
Object.defineProperty(exports, "isPauseSignal", { enumerable: true, get: function () { return types_js_1.isPauseSignal; } });
|
|
12
12
|
Object.defineProperty(exports, "PauseSignal", { enumerable: true, get: function () { return types_js_1.PauseSignal; } });
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3BhdXNlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLCtDQUF1RztBQUE5Rix5R0FBQSxTQUFTLE9BQUE7QUFBRSwrR0FBQSxlQUFlLE9BQUE7QUFBRSxpSEFBQSxpQkFBaUIsT0FBQTtBQUFFLHNIQUFBLHNCQUFzQixPQUFBO0FBUzlFLHVDQUF1RTtBQUE5RCx5R0FBQSxhQUFhLE9BQUE7QUFBRSx5R0FBQSxhQUFhLE9BQUE7QUFBRSx1R0FBQSxXQUFXLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSB7IEludGVycnVwdFBheWxvYWQgfSBmcm9tICcuL2ludGVycnVwdC5qcyc7XG5leHBvcnQgeyBpbnRlcnJ1cHQsIEludGVycnVwdFNpZ25hbCwgaXNJbnRlcnJ1cHRTaWduYWwsIHByb3ZpZGVJbnRlcnJ1cHRBbnN3ZXIgfSBmcm9tICcuL2ludGVycnVwdC5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIEZsb3djaGFydENoZWNrcG9pbnQsXG4gIFBhdXNhYmxlSGFuZGxlcixcbiAgUGF1c2VkRXhlY3V0aW9uLFxuICBQYXVzZVJlc3VsdCxcbiAgUGVuZGluZ1BhdXNlLFxuICBSZWRhY3Rpb25NYXJrcyxcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5leHBvcnQgeyBpc1BhdXNlUmVzdWx0LCBpc1BhdXNlU2lnbmFsLCBQYXVzZVNpZ25hbCB9IGZyb20gJy4vdHlwZXMuanMnO1xuIl19
|
package/dist/lib/pause/record.js
CHANGED
|
@@ -126,9 +126,27 @@ function decodeCheckpoint(stored) {
|
|
|
126
126
|
}
|
|
127
127
|
if (checkpoint.pendingPauses !== undefined)
|
|
128
128
|
checkpoint.pendingPauses = decodePendingPauses(checkpoint.pendingPauses);
|
|
129
|
+
// The redaction a pause carries (names only) seeds the resumed run's rule — a malformed one
|
|
130
|
+
// is refused, never dropped: dropping it would serve in plain what the run had masked.
|
|
131
|
+
if (checkpoint.redactionMarks !== undefined)
|
|
132
|
+
decodeRedactionMarks(checkpoint.redactionMarks);
|
|
129
133
|
return checkpoint;
|
|
130
134
|
}
|
|
131
135
|
exports.decodeCheckpoint = decodeCheckpoint;
|
|
136
|
+
/** `redactionMarks`: `keys` an array of strings; `fields`, when present, keys → arrays of strings. */
|
|
137
|
+
function decodeRedactionMarks(marks) {
|
|
138
|
+
if (!isPlainRecord(marks))
|
|
139
|
+
refuse('redactionMarks must be an object');
|
|
140
|
+
if (!isStrings(marks.keys))
|
|
141
|
+
refuse('redactionMarks.keys must be an array of strings');
|
|
142
|
+
const fields = marks.fields;
|
|
143
|
+
if (fields !== undefined && (!isPlainRecord(fields) || !Object.values(fields).every(isStrings))) {
|
|
144
|
+
refuse('redactionMarks.fields must map keys to arrays of strings');
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
function isStrings(value) {
|
|
148
|
+
return Array.isArray(value) && value.every((item) => typeof item === 'string');
|
|
149
|
+
}
|
|
132
150
|
/**
|
|
133
151
|
* `pendingPauses` (stored, untrusted) as decoded records — the one check
|
|
134
152
|
* `decodeCheckpoint` runs, and the one `ResumeEntry.plan` runs on what it is
|
|
@@ -143,4 +161,4 @@ exports.decodePendingPauses = decodePendingPauses;
|
|
|
143
161
|
function isCount(value) {
|
|
144
162
|
return typeof value === 'number' && Number.isInteger(value) && value >= 0;
|
|
145
163
|
}
|
|
146
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9wYXVzZS9yZWNvcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7OztBQUdILHlDQUErQztBQUUvQywyRkFBMkY7QUFDOUUsUUFBQSxrQkFBa0IsR0FBRyxDQUFVLENBQUM7QUFXN0MsbUVBQW1FO0FBQ25FLFNBQVMsTUFBTSxDQUFDLElBQVk7SUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsS0FBYztJQUNuQyxPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5RSxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixnQkFBZ0IsQ0FBQyxNQUErQjtJQUM5RCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUM7SUFDekMsSUFBSSxPQUFPLEtBQUssU0FBUyxJQUFJLE9BQU8sS0FBSywwQkFBa0IsRUFBRSxDQUFDO1FBQzVELE1BQU0sQ0FDSixxQkFBcUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLGlDQUFpQztZQUM5RixJQUFJLDBCQUFrQixtREFBbUQsQ0FDNUUsQ0FBQztJQUNKLENBQUM7SUFDRCx3RUFBd0U7SUFDeEUsTUFBTSxFQUFFLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxHQUFHLE1BQTBELENBQUM7SUFDaEgsT0FBTyxPQUFPLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLDBCQUFrQixFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUNqRyxDQUFDO0FBWEQsNENBV0M7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixpQkFBaUIsQ0FBQyxHQUFZLEVBQUUsRUFBRSxHQUFHLEVBQUU7SUFDckQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxJQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUM7UUFBRSxNQUFNLENBQUMsR0FBRyxFQUFFLElBQUksZ0JBQWdCLG9CQUFvQixDQUFDLENBQUM7SUFDL0UsSUFBSSxPQUFPLEdBQUcsQ0FBQyxhQUFhLEtBQUssUUFBUSxJQUFJLEdBQUcsQ0FBQyxhQUFhLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDdEUsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFDRCxNQUFNLFdBQVcsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDO0lBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUNwRixNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLDhCQUE4QixDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUNELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUM7SUFDakMsSUFBSSxNQUFNLEtBQUssU0FBUyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQztRQUFFLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUMxRywrRUFBK0U7SUFDL0UsS0FBSyxNQUFNLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDaEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7WUFBRSxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUNuSCxDQUFDO0lBQ0QsSUFBSSxHQUFHLENBQUMsUUFBUSxLQUFLLFNBQVMsSUFBSSxHQUFHLENBQUMsUUFBUSxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQy9ELE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsbUNBQW1DLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBQ0QsT0FBTztRQUNMLGFBQWEsRUFBRSxHQUFHLENBQUMsYUFBdUI7UUFDMUMsV0FBVyxFQUFFLFdBQXVCO1FBQ3BDLGFBQWEsRUFBRyxNQUE4RCxJQUFJLEVBQUU7UUFDcEYsR0FBRyxDQUFDLEdBQUcsQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNoRSxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxXQUFXLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBb0IsRUFBRSxDQUFDO1FBQ3ZFLHdFQUF3RTtRQUN4RSxvREFBb0Q7UUFDcEQsR0FBRyxDQUFDLElBQUEsNEJBQWlCLEVBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJO1lBQzVDLGVBQWUsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsR0FBRyxDQUFDLGVBQWUsQ0FBQyxjQUFjLEVBQUU7U0FDMUcsQ0FBQztLQUNILENBQUM7QUFDSixDQUFDO0FBL0JELDhDQStCQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQWdCLGdCQUFnQixDQUFDLE1BQWU7SUFDOUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7UUFBRSxNQUFNLENBQUMsa0NBQWtDLENBQUMsQ0FBQztJQUN2RSxNQUFNLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUM7UUFBRSxNQUFNLENBQUMsb0NBQW9DLENBQUMsQ0FBQztJQUN6RixpQkFBaUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM5QiwyRUFBMkU7SUFDM0UsK0RBQStEO0lBQy9ELElBQUksVUFBVSxDQUFDLGVBQWUsS0FBSyxTQUFTLElBQUksQ0FBQyxJQUFBLDRCQUFpQixFQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO1FBQy9GLE9BQU8sVUFBVSxDQUFDLGVBQWUsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsNEVBQTRFO0lBQzVFLGtFQUFrRTtJQUNsRSxJQUFJLFVBQVUsQ0FBQyxjQUFjLEtBQUssU0FBUyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDO1FBQ25GLE1BQU0sQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFDRCxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDO0lBQ3RDLElBQUksTUFBTSxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzlGLE1BQU0sQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFDRCxJQUFJLFVBQVUsQ0FBQyxhQUFhLEtBQUssU0FBUztRQUFFLFVBQVUsQ0FBQyxhQUFhLEdBQUcsbUJBQW1CLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3JILE9BQU8sVUFBNEMsQ0FBQztBQUN0RCxDQUFDO0FBckJELDRDQXFCQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixtQkFBbUIsQ0FBQyxPQUFnQjtJQUNsRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUM7UUFBRSxNQUFNLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztJQUN0RSxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFZLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN6RixDQUFDO0FBSEQsa0RBR0M7QUFFRCxTQUFTLE9BQU8sQ0FBQyxLQUFjO0lBQzdCLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztBQUM1RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBwYXVzZS9yZWNvcmQudHMg4oCUIHRoZSBjaGVja3BvaW50IENPREVDIChGOCwgOS4zOS4wKTogb25lIHZlcnNpb24sIG9uZVxuICogdXBjYXN0ZXIsIG9uZSB2YWxpZGF0b3IsIG9uZSBtZXNzYWdlIHNldC5cbiAqXG4gKiBBIGNoZWNrcG9pbnQgaXMgc3RvcmVkIGRhdGEg4oCUIFJlZGlzLCBQb3N0Z3JlcywgYSBmaWxlIOKAlCBhbmQgY29tZXMgYmFjayB0b1xuICogYHJlc3VtZSgpYCBmcm9tIHdoaWNoZXZlciByZWxlYXNlIHdyb3RlIGl0LiBVbnRpbCA5LjM4LjAgaXQgd2FzIGNoZWNrZWQgaW5cbiAqIFRXTyBwbGFjZXMgd2l0aCB0d28gbWVzc2FnZSBzZXRzOiBgRmxvd0NoYXJ0RXhlY3V0b3IgwrcgcmVzdW1lYCBjaGVja2VkIHRoZVxuICogcGF1c2VkIHJlY29yZCdzIGZpZWxkcywgYFJlc3VtZUVudHJ5YCBjaGVja2VkIGVhY2ggd2FpdGluZyBzaWJsaW5nJ3NcbiAqIChgcGVuZGluZ1BhdXNlc1tuXWApIOKAlCB0aGUgU0FNRSByZWNvcmQgc2hhcGUsIGNoZWNrZWQgdHdpY2UsIGRpZmZlcmVudGx5XG4gKiAodGhlIHRvcC1sZXZlbCBgcGF1c2VkQnlgIGFuZCBgc3ViZmxvd1N0YXRlc2Agd2VyZSBuZXZlciBjaGVja2VkIGF0IGFsbCkuXG4gKiBCb3RoIG5vdyBjYWxsIHtAbGluayBkZWNvZGVDaGVja3BvaW50fTsgZXZlcnkgcmVjb3JkIGlzIGNoZWNrZWQgYnlcbiAqIHtAbGluayBkZWNvZGVQYXVzZVJlY29yZH0uXG4gKlxuICogVkVSU0lPTklORy4gQSBjaGVja3BvaW50IHdyaXR0ZW4gYnkgdGhpcyByZWxlYXNlIGNhcnJpZXNcbiAqIGBjaGVja3BvaW50VmVyc2lvbjogMWAuIE9uZSB3cml0dGVuIGJlZm9yZSBjYXJyaWVzIG5vbmUgYW5kIGlzIHJlYWQgYXNcbiAqIHZlcnNpb24gMCBieSB0aGUgT05FIHVwY2FzdGVyLCB7QGxpbmsgdXBjYXN0Q2hlY2twb2ludH06IGV2ZXJ5IGZpZWxkXG4gKiA5LjE04oCTOS4zNyBhZGRlZCBpcyBvcHRpb25hbCBhbmQgcmVhZCBhcyBhYnNlbnQsIHNvIHRoZSBvbmx5IHN0ZXAgaXNcbiAqIGRyb3BwaW5nIGBjb250aW51YXRpb25TdGFnZUlkYCDigJQgYSByZWNvcmQgbm8gcmVzdW1lIGhhcyByZWFkIHNpbmNlIDkuMjguMFxuICogKHdoYXQgcnVucyBhZnRlciBhIHJlc3VtZSBjb21lcyBmcm9tIHRoZSBjaGFydCksIG5vIGxvbmdlciB3cml0dGVuLCBhbmRcbiAqIGxlZ2FjeS1vbmx5IGZyb20gaGVyZSBvbi4gQSB2ZXJzaW9uIHRoaXMgcmVsZWFzZSBkb2VzIG5vdCBrbm93IGlzIHJlZnVzZWQsXG4gKiBuZXZlciBndWVzc2VkIGF0LlxuICpcbiAqIEJvcnJvd2VkOiBMYW5nR3JhcGgncyBjaGVja3BvaW50IGB2YCBmaWVsZDsgaW8tdHMncyBkZWNvZGUtYXQtdGhlLWJvdW5kYXJ5XG4gKiAob25lIGRlY29kZXIgdHVybnMgYHVua25vd25gIGludG8gdGhlIHR5cGUsIG9yIHJlZnVzZXMgd2l0aCBhIHBhdGgpLlxuICovXG5cbmltcG9ydCB0eXBlIHsgRmxvd2NoYXJ0Q2hlY2twb2ludCwgUGVuZGluZ1BhdXNlIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBpc1BhdXNlZEV4ZWN1dGlvbiB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vKiogVGhlIGNoZWNrcG9pbnQgZm9ybWF0IHRoaXMgcmVsZWFzZSB3cml0ZXMgKGBGbG93Y2hhcnRDaGVja3BvaW50LmNoZWNrcG9pbnRWZXJzaW9uYCkuICovXG5leHBvcnQgY29uc3QgQ0hFQ0tQT0lOVF9WRVJTSU9OID0gMSBhcyBjb25zdDtcblxuLyoqXG4gKiBGaWVsZHMgb25seSBhIGNoZWNrcG9pbnQgd3JpdHRlbiBCRUZPUkUgOS4zOS4wIGNhbiBjYXJyeS4gVGhlIHVwY2FzdGVyXG4gKiByZWFkcyB0aGVtIGFuZCB0aGUgY3VycmVudCBzaGFwZSBuZXZlciBoYXMgdGhlbS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMZWdhY3lDaGVja3BvaW50RmllbGRzIHtcbiAgLyoqIFRoZSBpbnZva2VyJ3MgYC5uZXh0YCBpZCDigJQgYSByZWNvcmQgc2luY2UgOS4yOC4wLCBuZXZlciByZWFkOyBkcm9wcGVkIGJ5IHRoZSB1cGNhc3Rlci4gKi9cbiAgcmVhZG9ubHkgY29udGludWF0aW9uU3RhZ2VJZD86IHN0cmluZztcbn1cblxuLyoqIFRoZSBvbmUgbWVzc2FnZSBzaGFwZTogYEludmFsaWQgY2hlY2twb2ludDogPHdoZXJlPiA8d2hhdD4uYCAqL1xuZnVuY3Rpb24gcmVmdXNlKHdoYXQ6IHN0cmluZyk6IG5ldmVyIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNoZWNrcG9pbnQ6ICR7d2hhdH0uYCk7XG59XG5cbmZ1bmN0aW9uIGlzUGxhaW5SZWNvcmQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cblxuLyoqXG4gKiBCcmluZyBhIHN0b3JlZCBjaGVja3BvaW50IG9mIEFOWSByZWxlYXNlIHRvIHRoZSBjdXJyZW50IHNoYXBlIOKAlCB0aGUgb25lXG4gKiB1cGNhc3Rlci4gVmVyc2lvbiAwIChubyBgY2hlY2twb2ludFZlcnNpb25gKTogZHJvcCB0aGUgbGVnYWN5XG4gKiBgY29udGludWF0aW9uU3RhZ2VJZGAsIHN0YW1wIHRoZSB2ZXJzaW9uLiBWZXJzaW9uIDE6IGFzIGlzLiBBbnl0aGluZyBlbHNlOlxuICogcmVmdXNlZC4gUmV0dXJucyBhIG5ldyBvYmplY3Q7IHRoZSBjYWxsZXIncyBpcyBuZXZlciBlZGl0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGNhc3RDaGVja3BvaW50KHN0b3JlZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGNvbnN0IHZlcnNpb24gPSBzdG9yZWQuY2hlY2twb2ludFZlcnNpb247XG4gIGlmICh2ZXJzaW9uICE9PSB1bmRlZmluZWQgJiYgdmVyc2lvbiAhPT0gQ0hFQ0tQT0lOVF9WRVJTSU9OKSB7XG4gICAgcmVmdXNlKFxuICAgICAgYGNoZWNrcG9pbnRWZXJzaW9uICR7SlNPTi5zdHJpbmdpZnkodmVyc2lvbikgPz8gU3RyaW5nKHZlcnNpb24pfSBpcyBub3Qgb25lIHRoaXMgcmVsZWFzZSByZWFkcyBgICtcbiAgICAgICAgYCgke0NIRUNLUE9JTlRfVkVSU0lPTn0sIG9yIG5vbmUgZm9yIGEgY2hlY2twb2ludCB3cml0dGVuIGJlZm9yZSA5LjM5LjApYCxcbiAgICApO1xuICB9XG4gIC8vIFRoZSBsZWdhY3kgZmllbGQgbmV2ZXIgc3Vydml2ZXMsIHdoYXRldmVyIHZlcnNpb24gY2xhaW1zIHRvIGNhcnJ5IGl0LlxuICBjb25zdCB7IGNvbnRpbnVhdGlvblN0YWdlSWQ6IF9sZWdhY3ksIC4uLmN1cnJlbnQgfSA9IHN0b3JlZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiAmIExlZ2FjeUNoZWNrcG9pbnRGaWVsZHM7XG4gIHJldHVybiB2ZXJzaW9uID09PSB1bmRlZmluZWQgPyB7IGNoZWNrcG9pbnRWZXJzaW9uOiBDSEVDS1BPSU5UX1ZFUlNJT04sIC4uLmN1cnJlbnQgfSA6IGN1cnJlbnQ7XG59XG5cbi8qKlxuICogQ2hlY2sgT05FIHBhdXNlIHJlY29yZCDigJQgdGhlIHBhdXNlZCBzdGFnZSdzIG93biBmaWVsZHMgb24gdGhlIGNoZWNrcG9pbnQsXG4gKiBvciBhIHdhaXRpbmcgc2libGluZydzIGBwZW5kaW5nUGF1c2VzW25dYCDigJQgYW5kIHJldHVybiBpdCBhcyBhXG4gKiB7QGxpbmsgUGVuZGluZ1BhdXNlfS4gYGF0YCBuYW1lcyB3aGVyZSB0aGUgcmVjb3JkIHNpdHMgKGAnJ2AgZm9yIHRoZVxuICogY2hlY2twb2ludCBpdHNlbGYsIGAncGVuZGluZ1BhdXNlc1swXSdgIGZvciBhIHNpYmxpbmcpLCBzbyBib3RoIHNpdGVzIHNwZWFrXG4gKiB0aGUgc2FtZSBzZW50ZW5jZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVQYXVzZVJlY29yZChyYXc6IHVua25vd24sIGF0ID0gJycpOiBQZW5kaW5nUGF1c2Uge1xuICBjb25zdCBmaWVsZCA9IChuYW1lOiBzdHJpbmcpID0+IChhdCA/IGAke2F0fS4ke25hbWV9YCA6IG5hbWUpO1xuICBpZiAoIWlzUGxhaW5SZWNvcmQocmF3KSkgcmVmdXNlKGAke2F0IHx8ICd0aGUgY2hlY2twb2ludCd9IG11c3QgYmUgYW4gb2JqZWN0YCk7XG4gIGlmICh0eXBlb2YgcmF3LnBhdXNlZFN0YWdlSWQgIT09ICdzdHJpbmcnIHx8IHJhdy5wYXVzZWRTdGFnZUlkID09PSAnJykge1xuICAgIHJlZnVzZShgJHtmaWVsZCgncGF1c2VkU3RhZ2VJZCcpfSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZ2ApO1xuICB9XG4gIGNvbnN0IHN1YmZsb3dQYXRoID0gcmF3LnN1YmZsb3dQYXRoO1xuICBpZiAoIUFycmF5LmlzQXJyYXkoc3ViZmxvd1BhdGgpIHx8ICFzdWJmbG93UGF0aC5ldmVyeSgocykgPT4gdHlwZW9mIHMgPT09ICdzdHJpbmcnKSkge1xuICAgIHJlZnVzZShgJHtmaWVsZCgnc3ViZmxvd1BhdGgnKX0gbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzYCk7XG4gIH1cbiAgY29uc3Qgc3RhdGVzID0gcmF3LnN1YmZsb3dTdGF0ZXM7XG4gIGlmIChzdGF0ZXMgIT09IHVuZGVmaW5lZCAmJiAhaXNQbGFpblJlY29yZChzdGF0ZXMpKSByZWZ1c2UoYCR7ZmllbGQoJ3N1YmZsb3dTdGF0ZXMnKX0gbXVzdCBiZSBhbiBvYmplY3RgKTtcbiAgLy8gRWFjaCBjYXB0dXJlIHNlZWRzIGEgc3ViZmxvdydzIHJ1bnRpbWUg4oCUIGEgcGxhaW4gb2JqZWN0LCBsaWtlIGBzaGFyZWRTdGF0ZWAuXG4gIGZvciAoY29uc3QgW3N1YmZsb3dJZCwgY2FwdHVyZV0gb2YgT2JqZWN0LmVudHJpZXMoc3RhdGVzID8/IHt9KSkge1xuICAgIGlmICghaXNQbGFpblJlY29yZChjYXB0dXJlKSkgcmVmdXNlKGAke2ZpZWxkKCdzdWJmbG93U3RhdGVzJyl9WyR7SlNPTi5zdHJpbmdpZnkoc3ViZmxvd0lkKX1dIG11c3QgYmUgYW4gb2JqZWN0YCk7XG4gIH1cbiAgaWYgKHJhdy5wYXVzZWRCeSAhPT0gdW5kZWZpbmVkICYmIHJhdy5wYXVzZWRCeSAhPT0gJ2ludGVycnVwdCcpIHtcbiAgICByZWZ1c2UoYCR7ZmllbGQoJ3BhdXNlZEJ5Jyl9IG11c3QgYmUgJ2ludGVycnVwdCcgd2hlbiBwcmVzZW50YCk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwYXVzZWRTdGFnZUlkOiByYXcucGF1c2VkU3RhZ2VJZCBhcyBzdHJpbmcsXG4gICAgc3ViZmxvd1BhdGg6IHN1YmZsb3dQYXRoIGFzIHN0cmluZ1tdLFxuICAgIHN1YmZsb3dTdGF0ZXM6IChzdGF0ZXMgYXMgUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHwgdW5kZWZpbmVkKSA/PyB7fSxcbiAgICAuLi4ocmF3LnBhdXNlRGF0YSAhPT0gdW5kZWZpbmVkICYmIHsgcGF1c2VEYXRhOiByYXcucGF1c2VEYXRhIH0pLFxuICAgIC4uLihyYXcucGF1c2VkQnkgPT09ICdpbnRlcnJ1cHQnICYmIHsgcGF1c2VkQnk6ICdpbnRlcnJ1cHQnIGFzIGNvbnN0IH0pLFxuICAgIC8vIEEgcmVjb3JkLCBuZXZlciBhIHBsYW4gaW5wdXQ6IGtlcHQgb25seSB3aGVuIHdlbGwtZm9ybWVkIChhbiBvbGRlciBvclxuICAgIC8vIGhhbmQtZWRpdGVkIGVudHJ5IHNpbXBseSByZXN1bWVzIHdpdGhvdXQgYSBsaW5rKS5cbiAgICAuLi4oaXNQYXVzZWRFeGVjdXRpb24ocmF3LnBhdXNlZEV4ZWN1dGlvbikgJiYge1xuICAgICAgcGF1c2VkRXhlY3V0aW9uOiB7IHJ1bklkOiByYXcucGF1c2VkRXhlY3V0aW9uLnJ1bklkLCBydW50aW1lU3RhZ2VJZDogcmF3LnBhdXNlZEV4ZWN1dGlvbi5ydW50aW1lU3RhZ2VJZCB9LFxuICAgIH0pLFxuICB9O1xufVxuXG4vKipcbiAqIFRIRSBjaGVja3BvaW50IGRlY29kZXI6IHVwY2FzdCwgdGhlbiBjaGVjayDigJQgdGhlIGNoZWNrcG9pbnQgaXMgYW4gb2JqZWN0LFxuICogaXRzIGBzaGFyZWRTdGF0ZWAgYSBwbGFpbiBvYmplY3QsIGl0cyBvd24gcGF1c2UgcmVjb3JkIHdlbGwtZm9ybWVkLCBhbmRcbiAqIGV2ZXJ5IGBwZW5kaW5nUGF1c2VzYCBlbnRyeSB3ZWxsLWZvcm1lZCAoZWFjaCByZXR1cm5lZCBkZWNvZGVkKS4gVGhyb3dzXG4gKiBgSW52YWxpZCBjaGVja3BvaW50OiDigKZgIG5hbWluZyB0aGUgZmlyc3QgZmllbGQgdGhhdCBpcyBub3Q7IG5ldmVyIGVkaXRzXG4gKiB0aGUgY2FsbGVyJ3Mgb2JqZWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjb2RlQ2hlY2twb2ludChzdG9yZWQ6IHVua25vd24pOiBGbG93Y2hhcnRDaGVja3BvaW50IHtcbiAgaWYgKCFpc1BsYWluUmVjb3JkKHN0b3JlZCkpIHJlZnVzZSgndGhlIGNoZWNrcG9pbnQgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgY29uc3QgY2hlY2twb2ludCA9IHVwY2FzdENoZWNrcG9pbnQoc3RvcmVkKTtcbiAgaWYgKCFpc1BsYWluUmVjb3JkKGNoZWNrcG9pbnQuc2hhcmVkU3RhdGUpKSByZWZ1c2UoJ3NoYXJlZFN0YXRlIG11c3QgYmUgYSBwbGFpbiBvYmplY3QnKTtcbiAgZGVjb2RlUGF1c2VSZWNvcmQoY2hlY2twb2ludCk7XG4gIC8vIEEgcmVjb3JkLCBuZXZlciBhIHBsYW4gaW5wdXQg4oCUIHRoZSBTQU1FIHJ1bGUgYXMgYSBzaWJsaW5nJ3M6IGEgbWFsZm9ybWVkXG4gIC8vIGxpbmsgaXMgZHJvcHBlZCAodGhlIHJlc3VtZSBydW5zIHdpdGhvdXQgaXQpLCBuZXZlciB0cnVzdGVkLlxuICBpZiAoY2hlY2twb2ludC5wYXVzZWRFeGVjdXRpb24gIT09IHVuZGVmaW5lZCAmJiAhaXNQYXVzZWRFeGVjdXRpb24oY2hlY2twb2ludC5wYXVzZWRFeGVjdXRpb24pKSB7XG4gICAgZGVsZXRlIGNoZWNrcG9pbnQucGF1c2VkRXhlY3V0aW9uO1xuICB9XG4gIC8vIFRoZSBjb3VudGVycyBzZWVkIHRoZSByZXN1bWVkIHJ1bidzIGlkcyBhbmQgbG9vcCBidWRnZXQ6IGFic2VudCBpcyBhbiBvbGRcbiAgLy8gY2hlY2twb2ludCAodGhlIGNvdW50ZXIgcmVzdGFydHMpLCBwcmVzZW50IG11c3QgYmUgd2VsbC1mb3JtZWQuXG4gIGlmIChjaGVja3BvaW50LmV4ZWN1dGlvbkNvdW50ICE9PSB1bmRlZmluZWQgJiYgIWlzQ291bnQoY2hlY2twb2ludC5leGVjdXRpb25Db3VudCkpIHtcbiAgICByZWZ1c2UoJ2V4ZWN1dGlvbkNvdW50IG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlcicpO1xuICB9XG4gIGNvbnN0IHZpc2l0cyA9IGNoZWNrcG9pbnQudmlzaXRDb3VudHM7XG4gIGlmICh2aXNpdHMgIT09IHVuZGVmaW5lZCAmJiAoIWlzUGxhaW5SZWNvcmQodmlzaXRzKSB8fCAhT2JqZWN0LnZhbHVlcyh2aXNpdHMpLmV2ZXJ5KGlzQ291bnQpKSkge1xuICAgIHJlZnVzZSgndmlzaXRDb3VudHMgbXVzdCBtYXAgc3RhZ2UgaWRzIHRvIG5vbi1uZWdhdGl2ZSBpbnRlZ2VycycpO1xuICB9XG4gIGlmIChjaGVja3BvaW50LnBlbmRpbmdQYXVzZXMgIT09IHVuZGVmaW5lZCkgY2hlY2twb2ludC5wZW5kaW5nUGF1c2VzID0gZGVjb2RlUGVuZGluZ1BhdXNlcyhjaGVja3BvaW50LnBlbmRpbmdQYXVzZXMpO1xuICByZXR1cm4gY2hlY2twb2ludCBhcyB1bmtub3duIGFzIEZsb3djaGFydENoZWNrcG9pbnQ7XG59XG5cbi8qKlxuICogYHBlbmRpbmdQYXVzZXNgIChzdG9yZWQsIHVudHJ1c3RlZCkgYXMgZGVjb2RlZCByZWNvcmRzIOKAlCB0aGUgb25lIGNoZWNrXG4gKiBgZGVjb2RlQ2hlY2twb2ludGAgcnVucywgYW5kIHRoZSBvbmUgYFJlc3VtZUVudHJ5LnBsYW5gIHJ1bnMgb24gd2hhdCBpdCBpc1xuICogaGFuZGVkIGRpcmVjdGx5LCBzbyBuZWl0aGVyIGRvb3IgdGFrZXMgYW4gdW5jaGVja2VkIHNpYmxpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVQZW5kaW5nUGF1c2VzKHBlbmRpbmc6IHVua25vd24pOiBQZW5kaW5nUGF1c2VbXSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShwZW5kaW5nKSkgcmVmdXNlKCdwZW5kaW5nUGF1c2VzIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgcmV0dXJuIHBlbmRpbmcubWFwKChyYXc6IHVua25vd24sIG4pID0+IGRlY29kZVBhdXNlUmVjb3JkKHJhdywgYHBlbmRpbmdQYXVzZXNbJHtufV1gKSk7XG59XG5cbmZ1bmN0aW9uIGlzQ291bnQodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkgJiYgdmFsdWUgPj0gMDtcbn1cbiJdfQ==
|
|
164
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjb3JkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9wYXVzZS9yZWNvcmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7OztBQUdILHlDQUErQztBQUUvQywyRkFBMkY7QUFDOUUsUUFBQSxrQkFBa0IsR0FBRyxDQUFVLENBQUM7QUFXN0MsbUVBQW1FO0FBQ25FLFNBQVMsTUFBTSxDQUFDLElBQVk7SUFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQyx1QkFBdUIsSUFBSSxHQUFHLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsS0FBYztJQUNuQyxPQUFPLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM5RSxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixnQkFBZ0IsQ0FBQyxNQUErQjtJQUM5RCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUM7SUFDekMsSUFBSSxPQUFPLEtBQUssU0FBUyxJQUFJLE9BQU8sS0FBSywwQkFBa0IsRUFBRSxDQUFDO1FBQzVELE1BQU0sQ0FDSixxQkFBcUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLGlDQUFpQztZQUM5RixJQUFJLDBCQUFrQixtREFBbUQsQ0FDNUUsQ0FBQztJQUNKLENBQUM7SUFDRCx3RUFBd0U7SUFDeEUsTUFBTSxFQUFFLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxHQUFHLE1BQTBELENBQUM7SUFDaEgsT0FBTyxPQUFPLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLDBCQUFrQixFQUFFLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQyxD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QUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3pGLENBQUM7QUFIRCxrREFHQztBQUVELFNBQVMsT0FBTyxDQUFDLEtBQWM7SUFDN0IsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQzVFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHBhdXNlL3JlY29yZC50cyDigJQgdGhlIGNoZWNrcG9pbnQgQ09ERUMgKEY4LCA5LjM5LjApOiBvbmUgdmVyc2lvbiwgb25lXG4gKiB1cGNhc3Rlciwgb25lIHZhbGlkYXRvciwgb25lIG1lc3NhZ2Ugc2V0LlxuICpcbiAqIEEgY2hlY2twb2ludCBpcyBzdG9yZWQgZGF0YSDigJQgUmVkaXMsIFBvc3RncmVzLCBhIGZpbGUg4oCUIGFuZCBjb21lcyBiYWNrIHRvXG4gKiBgcmVzdW1lKClgIGZyb20gd2hpY2hldmVyIHJlbGVhc2Ugd3JvdGUgaXQuIFVudGlsIDkuMzguMCBpdCB3YXMgY2hlY2tlZCBpblxuICogVFdPIHBsYWNlcyB3aXRoIHR3byBtZXNzYWdlIHNldHM6IGBGbG93Q2hhcnRFeGVjdXRvciDCtyByZXN1bWVgIGNoZWNrZWQgdGhlXG4gKiBwYXVzZWQgcmVjb3JkJ3MgZmllbGRzLCBgUmVzdW1lRW50cnlgIGNoZWNrZWQgZWFjaCB3YWl0aW5nIHNpYmxpbmcnc1xuICogKGBwZW5kaW5nUGF1c2VzW25dYCkg4oCUIHRoZSBTQU1FIHJlY29yZCBzaGFwZSwgY2hlY2tlZCB0d2ljZSwgZGlmZmVyZW50bHlcbiAqICh0aGUgdG9wLWxldmVsIGBwYXVzZWRCeWAgYW5kIGBzdWJmbG93U3RhdGVzYCB3ZXJlIG5ldmVyIGNoZWNrZWQgYXQgYWxsKS5cbiAqIEJvdGggbm93IGNhbGwge0BsaW5rIGRlY29kZUNoZWNrcG9pbnR9OyBldmVyeSByZWNvcmQgaXMgY2hlY2tlZCBieVxuICoge0BsaW5rIGRlY29kZVBhdXNlUmVjb3JkfS5cbiAqXG4gKiBWRVJTSU9OSU5HLiBBIGNoZWNrcG9pbnQgd3JpdHRlbiBieSB0aGlzIHJlbGVhc2UgY2Fycmllc1xuICogYGNoZWNrcG9pbnRWZXJzaW9uOiAxYC4gT25lIHdyaXR0ZW4gYmVmb3JlIGNhcnJpZXMgbm9uZSBhbmQgaXMgcmVhZCBhc1xuICogdmVyc2lvbiAwIGJ5IHRoZSBPTkUgdXBjYXN0ZXIsIHtAbGluayB1cGNhc3RDaGVja3BvaW50fTogZXZlcnkgZmllbGRcbiAqIDkuMTTigJM5LjM3IGFkZGVkIGlzIG9wdGlvbmFsIGFuZCByZWFkIGFzIGFic2VudCwgc28gdGhlIG9ubHkgc3RlcCBpc1xuICogZHJvcHBpbmcgYGNvbnRpbnVhdGlvblN0YWdlSWRgIOKAlCBhIHJlY29yZCBubyByZXN1bWUgaGFzIHJlYWQgc2luY2UgOS4yOC4wXG4gKiAod2hhdCBydW5zIGFmdGVyIGEgcmVzdW1lIGNvbWVzIGZyb20gdGhlIGNoYXJ0KSwgbm8gbG9uZ2VyIHdyaXR0ZW4sIGFuZFxuICogbGVnYWN5LW9ubHkgZnJvbSBoZXJlIG9uLiBBIHZlcnNpb24gdGhpcyByZWxlYXNlIGRvZXMgbm90IGtub3cgaXMgcmVmdXNlZCxcbiAqIG5ldmVyIGd1ZXNzZWQgYXQuXG4gKlxuICogQm9ycm93ZWQ6IExhbmdHcmFwaCdzIGNoZWNrcG9pbnQgYHZgIGZpZWxkOyBpby10cydzIGRlY29kZS1hdC10aGUtYm91bmRhcnlcbiAqIChvbmUgZGVjb2RlciB0dXJucyBgdW5rbm93bmAgaW50byB0aGUgdHlwZSwgb3IgcmVmdXNlcyB3aXRoIGEgcGF0aCkuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBGbG93Y2hhcnRDaGVja3BvaW50LCBQZW5kaW5nUGF1c2UgfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IGlzUGF1c2VkRXhlY3V0aW9uIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8qKiBUaGUgY2hlY2twb2ludCBmb3JtYXQgdGhpcyByZWxlYXNlIHdyaXRlcyAoYEZsb3djaGFydENoZWNrcG9pbnQuY2hlY2twb2ludFZlcnNpb25gKS4gKi9cbmV4cG9ydCBjb25zdCBDSEVDS1BPSU5UX1ZFUlNJT04gPSAxIGFzIGNvbnN0O1xuXG4vKipcbiAqIEZpZWxkcyBvbmx5IGEgY2hlY2twb2ludCB3cml0dGVuIEJFRk9SRSA5LjM5LjAgY2FuIGNhcnJ5LiBUaGUgdXBjYXN0ZXJcbiAqIHJlYWRzIHRoZW0gYW5kIHRoZSBjdXJyZW50IHNoYXBlIG5ldmVyIGhhcyB0aGVtLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExlZ2FjeUNoZWNrcG9pbnRGaWVsZHMge1xuICAvKiogVGhlIGludm9rZXIncyBgLm5leHRgIGlkIOKAlCBhIHJlY29yZCBzaW5jZSA5LjI4LjAsIG5ldmVyIHJlYWQ7IGRyb3BwZWQgYnkgdGhlIHVwY2FzdGVyLiAqL1xuICByZWFkb25seSBjb250aW51YXRpb25TdGFnZUlkPzogc3RyaW5nO1xufVxuXG4vKiogVGhlIG9uZSBtZXNzYWdlIHNoYXBlOiBgSW52YWxpZCBjaGVja3BvaW50OiA8d2hlcmU+IDx3aGF0Pi5gICovXG5mdW5jdGlvbiByZWZ1c2Uod2hhdDogc3RyaW5nKTogbmV2ZXIge1xuICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY2hlY2twb2ludDogJHt3aGF0fS5gKTtcbn1cblxuZnVuY3Rpb24gaXNQbGFpblJlY29yZCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpO1xufVxuXG4vKipcbiAqIEJyaW5nIGEgc3RvcmVkIGNoZWNrcG9pbnQgb2YgQU5ZIHJlbGVhc2UgdG8gdGhlIGN1cnJlbnQgc2hhcGUg4oCUIHRoZSBvbmVcbiAqIHVwY2FzdGVyLiBWZXJzaW9uIDAgKG5vIGBjaGVja3BvaW50VmVyc2lvbmApOiBkcm9wIHRoZSBsZWdhY3lcbiAqIGBjb250aW51YXRpb25TdGFnZUlkYCwgc3RhbXAgdGhlIHZlcnNpb24uIFZlcnNpb24gMTogYXMgaXMuIEFueXRoaW5nIGVsc2U6XG4gKiByZWZ1c2VkLiBSZXR1cm5zIGEgbmV3IG9iamVjdDsgdGhlIGNhbGxlcidzIGlzIG5ldmVyIGVkaXRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwY2FzdENoZWNrcG9pbnQoc3RvcmVkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgY29uc3QgdmVyc2lvbiA9IHN0b3JlZC5jaGVja3BvaW50VmVyc2lvbjtcbiAgaWYgKHZlcnNpb24gIT09IHVuZGVmaW5lZCAmJiB2ZXJzaW9uICE9PSBDSEVDS1BPSU5UX1ZFUlNJT04pIHtcbiAgICByZWZ1c2UoXG4gICAgICBgY2hlY2twb2ludFZlcnNpb24gJHtKU09OLnN0cmluZ2lmeSh2ZXJzaW9uKSA/PyBTdHJpbmcodmVyc2lvbil9IGlzIG5vdCBvbmUgdGhpcyByZWxlYXNlIHJlYWRzIGAgK1xuICAgICAgICBgKCR7Q0hFQ0tQT0lOVF9WRVJTSU9OfSwgb3Igbm9uZSBmb3IgYSBjaGVja3BvaW50IHdyaXR0ZW4gYmVmb3JlIDkuMzkuMClgLFxuICAgICk7XG4gIH1cbiAgLy8gVGhlIGxlZ2FjeSBmaWVsZCBuZXZlciBzdXJ2aXZlcywgd2hhdGV2ZXIgdmVyc2lvbiBjbGFpbXMgdG8gY2FycnkgaXQuXG4gIGNvbnN0IHsgY29udGludWF0aW9uU3RhZ2VJZDogX2xlZ2FjeSwgLi4uY3VycmVudCB9ID0gc3RvcmVkIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYgTGVnYWN5Q2hlY2twb2ludEZpZWxkcztcbiAgcmV0dXJuIHZlcnNpb24gPT09IHVuZGVmaW5lZCA/IHsgY2hlY2twb2ludFZlcnNpb246IENIRUNLUE9JTlRfVkVSU0lPTiwgLi4uY3VycmVudCB9IDogY3VycmVudDtcbn1cblxuLyoqXG4gKiBDaGVjayBPTkUgcGF1c2UgcmVjb3JkIOKAlCB0aGUgcGF1c2VkIHN0YWdlJ3Mgb3duIGZpZWxkcyBvbiB0aGUgY2hlY2twb2ludCxcbiAqIG9yIGEgd2FpdGluZyBzaWJsaW5nJ3MgYHBlbmRpbmdQYXVzZXNbbl1gIOKAlCBhbmQgcmV0dXJuIGl0IGFzIGFcbiAqIHtAbGluayBQZW5kaW5nUGF1c2V9LiBgYXRgIG5hbWVzIHdoZXJlIHRoZSByZWNvcmQgc2l0cyAoYCcnYCBmb3IgdGhlXG4gKiBjaGVja3BvaW50IGl0c2VsZiwgYCdwZW5kaW5nUGF1c2VzWzBdJ2AgZm9yIGEgc2libGluZyksIHNvIGJvdGggc2l0ZXMgc3BlYWtcbiAqIHRoZSBzYW1lIHNlbnRlbmNlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVBhdXNlUmVjb3JkKHJhdzogdW5rbm93biwgYXQgPSAnJyk6IFBlbmRpbmdQYXVzZSB7XG4gIGNvbnN0IGZpZWxkID0gKG5hbWU6IHN0cmluZykgPT4gKGF0ID8gYCR7YXR9LiR7bmFtZX1gIDogbmFtZSk7XG4gIGlmICghaXNQbGFpblJlY29yZChyYXcpKSByZWZ1c2UoYCR7YXQgfHwgJ3RoZSBjaGVja3BvaW50J30gbXVzdCBiZSBhbiBvYmplY3RgKTtcbiAgaWYgKHR5cGVvZiByYXcucGF1c2VkU3RhZ2VJZCAhPT0gJ3N0cmluZycgfHwgcmF3LnBhdXNlZFN0YWdlSWQgPT09ICcnKSB7XG4gICAgcmVmdXNlKGAke2ZpZWxkKCdwYXVzZWRTdGFnZUlkJyl9IG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nYCk7XG4gIH1cbiAgY29uc3Qgc3ViZmxvd1BhdGggPSByYXcuc3ViZmxvd1BhdGg7XG4gIGlmICghQXJyYXkuaXNBcnJheShzdWJmbG93UGF0aCkgfHwgIXN1YmZsb3dQYXRoLmV2ZXJ5KChzKSA9PiB0eXBlb2YgcyA9PT0gJ3N0cmluZycpKSB7XG4gICAgcmVmdXNlKGAke2ZpZWxkKCdzdWJmbG93UGF0aCcpfSBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3NgKTtcbiAgfVxuICBjb25zdCBzdGF0ZXMgPSByYXcuc3ViZmxvd1N0YXRlcztcbiAgaWYgKHN0YXRlcyAhPT0gdW5kZWZpbmVkICYmICFpc1BsYWluUmVjb3JkKHN0YXRlcykpIHJlZnVzZShgJHtmaWVsZCgnc3ViZmxvd1N0YXRlcycpfSBtdXN0IGJlIGFuIG9iamVjdGApO1xuICAvLyBFYWNoIGNhcHR1cmUgc2VlZHMgYSBzdWJmbG93J3MgcnVudGltZSDigJQgYSBwbGFpbiBvYmplY3QsIGxpa2UgYHNoYXJlZFN0YXRlYC5cbiAgZm9yIChjb25zdCBbc3ViZmxvd0lkLCBjYXB0dXJlXSBvZiBPYmplY3QuZW50cmllcyhzdGF0ZXMgPz8ge30pKSB7XG4gICAgaWYgKCFpc1BsYWluUmVjb3JkKGNhcHR1cmUpKSByZWZ1c2UoYCR7ZmllbGQoJ3N1YmZsb3dTdGF0ZXMnKX1bJHtKU09OLnN0cmluZ2lmeShzdWJmbG93SWQpfV0gbXVzdCBiZSBhbiBvYmplY3RgKTtcbiAgfVxuICBpZiAocmF3LnBhdXNlZEJ5ICE9PSB1bmRlZmluZWQgJiYgcmF3LnBhdXNlZEJ5ICE9PSAnaW50ZXJydXB0Jykge1xuICAgIHJlZnVzZShgJHtmaWVsZCgncGF1c2VkQnknKX0gbXVzdCBiZSAnaW50ZXJydXB0JyB3aGVuIHByZXNlbnRgKTtcbiAgfVxuICByZXR1cm4ge1xuICAgIHBhdXNlZFN0YWdlSWQ6IHJhdy5wYXVzZWRTdGFnZUlkIGFzIHN0cmluZyxcbiAgICBzdWJmbG93UGF0aDogc3ViZmxvd1BhdGggYXMgc3RyaW5nW10sXG4gICAgc3ViZmxvd1N0YXRlczogKHN0YXRlcyBhcyBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gfCB1bmRlZmluZWQpID8/IHt9LFxuICAgIC4uLihyYXcucGF1c2VEYXRhICE9PSB1bmRlZmluZWQgJiYgeyBwYXVzZURhdGE6IHJhdy5wYXVzZURhdGEgfSksXG4gICAgLi4uKHJhdy5wYXVzZWRCeSA9PT0gJ2ludGVycnVwdCcgJiYgeyBwYXVzZWRCeTogJ2ludGVycnVwdCcgYXMgY29uc3QgfSksXG4gICAgLy8gQSByZWNvcmQsIG5ldmVyIGEgcGxhbiBpbnB1dDoga2VwdCBvbmx5IHdoZW4gd2VsbC1mb3JtZWQgKGFuIG9sZGVyIG9yXG4gICAgLy8gaGFuZC1lZGl0ZWQgZW50cnkgc2ltcGx5IHJlc3VtZXMgd2l0aG91dCBhIGxpbmspLlxuICAgIC4uLihpc1BhdXNlZEV4ZWN1dGlvbihyYXcucGF1c2VkRXhlY3V0aW9uKSAmJiB7XG4gICAgICBwYXVzZWRFeGVjdXRpb246IHsgcnVuSWQ6IHJhdy5wYXVzZWRFeGVjdXRpb24ucnVuSWQsIHJ1bnRpbWVTdGFnZUlkOiByYXcucGF1c2VkRXhlY3V0aW9uLnJ1bnRpbWVTdGFnZUlkIH0sXG4gICAgfSksXG4gIH07XG59XG5cbi8qKlxuICogVEhFIGNoZWNrcG9pbnQgZGVjb2RlcjogdXBjYXN0LCB0aGVuIGNoZWNrIOKAlCB0aGUgY2hlY2twb2ludCBpcyBhbiBvYmplY3QsXG4gKiBpdHMgYHNoYXJlZFN0YXRlYCBhIHBsYWluIG9iamVjdCwgaXRzIG93biBwYXVzZSByZWNvcmQgd2VsbC1mb3JtZWQsIGFuZFxuICogZXZlcnkgYHBlbmRpbmdQYXVzZXNgIGVudHJ5IHdlbGwtZm9ybWVkIChlYWNoIHJldHVybmVkIGRlY29kZWQpLiBUaHJvd3NcbiAqIGBJbnZhbGlkIGNoZWNrcG9pbnQ6IOKApmAgbmFtaW5nIHRoZSBmaXJzdCBmaWVsZCB0aGF0IGlzIG5vdDsgbmV2ZXIgZWRpdHNcbiAqIHRoZSBjYWxsZXIncyBvYmplY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVDaGVja3BvaW50KHN0b3JlZDogdW5rbm93bik6IEZsb3djaGFydENoZWNrcG9pbnQge1xuICBpZiAoIWlzUGxhaW5SZWNvcmQoc3RvcmVkKSkgcmVmdXNlKCd0aGUgY2hlY2twb2ludCBtdXN0IGJlIGFuIG9iamVjdCcpO1xuICBjb25zdCBjaGVja3BvaW50ID0gdXBjYXN0Q2hlY2twb2ludChzdG9yZWQpO1xuICBpZiAoIWlzUGxhaW5SZWNvcmQoY2hlY2twb2ludC5zaGFyZWRTdGF0ZSkpIHJlZnVzZSgnc2hhcmVkU3RhdGUgbXVzdCBiZSBhIHBsYWluIG9iamVjdCcpO1xuICBkZWNvZGVQYXVzZVJlY29yZChjaGVja3BvaW50KTtcbiAgLy8gQSByZWNvcmQsIG5ldmVyIGEgcGxhbiBpbnB1dCDigJQgdGhlIFNBTUUgcnVsZSBhcyBhIHNpYmxpbmcnczogYSBtYWxmb3JtZWRcbiAgLy8gbGluayBpcyBkcm9wcGVkICh0aGUgcmVzdW1lIHJ1bnMgd2l0aG91dCBpdCksIG5ldmVyIHRydXN0ZWQuXG4gIGlmIChjaGVja3BvaW50LnBhdXNlZEV4ZWN1dGlvbiAhPT0gdW5kZWZpbmVkICYmICFpc1BhdXNlZEV4ZWN1dGlvbihjaGVja3BvaW50LnBhdXNlZEV4ZWN1dGlvbikpIHtcbiAgICBkZWxldGUgY2hlY2twb2ludC5wYXVzZWRFeGVjdXRpb247XG4gIH1cbiAgLy8gVGhlIGNvdW50ZXJzIHNlZWQgdGhlIHJlc3VtZWQgcnVuJ3MgaWRzIGFuZCBsb29wIGJ1ZGdldDogYWJzZW50IGlzIGFuIG9sZFxuICAvLyBjaGVja3BvaW50ICh0aGUgY291bnRlciByZXN0YXJ0cyksIHByZXNlbnQgbXVzdCBiZSB3ZWxsLWZvcm1lZC5cbiAgaWYgKGNoZWNrcG9pbnQuZXhlY3V0aW9uQ291bnQgIT09IHVuZGVmaW5lZCAmJiAhaXNDb3VudChjaGVja3BvaW50LmV4ZWN1dGlvbkNvdW50KSkge1xuICAgIHJlZnVzZSgnZXhlY3V0aW9uQ291bnQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyJyk7XG4gIH1cbiAgY29uc3QgdmlzaXRzID0gY2hlY2twb2ludC52aXNpdENvdW50cztcbiAgaWYgKHZpc2l0cyAhPT0gdW5kZWZpbmVkICYmICghaXNQbGFpblJlY29yZCh2aXNpdHMpIHx8ICFPYmplY3QudmFsdWVzKHZpc2l0cykuZXZlcnkoaXNDb3VudCkpKSB7XG4gICAgcmVmdXNlKCd2aXNpdENvdW50cyBtdXN0IG1hcCBzdGFnZSBpZHMgdG8gbm9uLW5lZ2F0aXZlIGludGVnZXJzJyk7XG4gIH1cbiAgaWYgKGNoZWNrcG9pbnQucGVuZGluZ1BhdXNlcyAhPT0gdW5kZWZpbmVkKSBjaGVja3BvaW50LnBlbmRpbmdQYXVzZXMgPSBkZWNvZGVQZW5kaW5nUGF1c2VzKGNoZWNrcG9pbnQucGVuZGluZ1BhdXNlcyk7XG4gIC8vIFRoZSByZWRhY3Rpb24gYSBwYXVzZSBjYXJyaWVzIChuYW1lcyBvbmx5KSBzZWVkcyB0aGUgcmVzdW1lZCBydW4ncyBydWxlIOKAlCBhIG1hbGZvcm1lZCBvbmVcbiAgLy8gaXMgcmVmdXNlZCwgbmV2ZXIgZHJvcHBlZDogZHJvcHBpbmcgaXQgd291bGQgc2VydmUgaW4gcGxhaW4gd2hhdCB0aGUgcnVuIGhhZCBtYXNrZWQuXG4gIGlmIChjaGVja3BvaW50LnJlZGFjdGlvbk1hcmtzICE9PSB1bmRlZmluZWQpIGRlY29kZVJlZGFjdGlvbk1hcmtzKGNoZWNrcG9pbnQucmVkYWN0aW9uTWFya3MpO1xuICByZXR1cm4gY2hlY2twb2ludCBhcyB1bmtub3duIGFzIEZsb3djaGFydENoZWNrcG9pbnQ7XG59XG5cbi8qKiBgcmVkYWN0aW9uTWFya3NgOiBga2V5c2AgYW4gYXJyYXkgb2Ygc3RyaW5nczsgYGZpZWxkc2AsIHdoZW4gcHJlc2VudCwga2V5cyDihpIgYXJyYXlzIG9mIHN0cmluZ3MuICovXG5mdW5jdGlvbiBkZWNvZGVSZWRhY3Rpb25NYXJrcyhtYXJrczogdW5rbm93bik6IHZvaWQge1xuICBpZiAoIWlzUGxhaW5SZWNvcmQobWFya3MpKSByZWZ1c2UoJ3JlZGFjdGlvbk1hcmtzIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIGlmICghaXNTdHJpbmdzKG1hcmtzLmtleXMpKSByZWZ1c2UoJ3JlZGFjdGlvbk1hcmtzLmtleXMgbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzJyk7XG4gIGNvbnN0IGZpZWxkcyA9IG1hcmtzLmZpZWxkcztcbiAgaWYgKGZpZWxkcyAhPT0gdW5kZWZpbmVkICYmICghaXNQbGFpblJlY29yZChmaWVsZHMpIHx8ICFPYmplY3QudmFsdWVzKGZpZWxkcykuZXZlcnkoaXNTdHJpbmdzKSkpIHtcbiAgICByZWZ1c2UoJ3JlZGFjdGlvbk1hcmtzLmZpZWxkcyBtdXN0IG1hcCBrZXlzIHRvIGFycmF5cyBvZiBzdHJpbmdzJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNTdHJpbmdzKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5ldmVyeSgoaXRlbSkgPT4gdHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKTtcbn1cblxuLyoqXG4gKiBgcGVuZGluZ1BhdXNlc2AgKHN0b3JlZCwgdW50cnVzdGVkKSBhcyBkZWNvZGVkIHJlY29yZHMg4oCUIHRoZSBvbmUgY2hlY2tcbiAqIGBkZWNvZGVDaGVja3BvaW50YCBydW5zLCBhbmQgdGhlIG9uZSBgUmVzdW1lRW50cnkucGxhbmAgcnVucyBvbiB3aGF0IGl0IGlzXG4gKiBoYW5kZWQgZGlyZWN0bHksIHNvIG5laXRoZXIgZG9vciB0YWtlcyBhbiB1bmNoZWNrZWQgc2libGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZVBlbmRpbmdQYXVzZXMocGVuZGluZzogdW5rbm93bik6IFBlbmRpbmdQYXVzZVtdIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHBlbmRpbmcpKSByZWZ1c2UoJ3BlbmRpbmdQYXVzZXMgbXVzdCBiZSBhbiBhcnJheScpO1xuICByZXR1cm4gcGVuZGluZy5tYXAoKHJhdzogdW5rbm93biwgbikgPT4gZGVjb2RlUGF1c2VSZWNvcmQocmF3LCBgcGVuZGluZ1BhdXNlc1ske259XWApKTtcbn1cblxuZnVuY3Rpb24gaXNDb3VudCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSAmJiB2YWx1ZSA+PSAwO1xufVxuIl19
|
package/dist/lib/pause/types.js
CHANGED
|
@@ -248,4 +248,4 @@ function isPauseSignal(error) {
|
|
|
248
248
|
}
|
|
249
249
|
}
|
|
250
250
|
exports.isPauseSignal = isPauseSignal;
|
|
251
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3BhdXNlL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQkc7OztBQWNILDhFQUE4RTtBQUM5RSxTQUFnQixpQkFBaUIsQ0FBQyxLQUFjO0lBQzlDLE1BQU0sQ0FBQyxHQUFHLEtBQXlFLENBQUM7SUFDcEYsT0FBTyxDQUNMLE9BQU8sQ0FBQyxFQUFFLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFLElBQUksT0FBTyxDQUFDLENBQUMsY0FBYyxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsY0FBYyxLQUFLLEVBQUUsQ0FDbEgsQ0FBQztBQUNKLENBQUM7QUFMRCw4Q0FLQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQWEsV0FBWSxTQUFRLEtBQUs7SUFDcEMsdURBQXVEO0lBQzlDLFNBQVMsQ0FBVTtJQUM1Qiw0Q0FBNEM7SUFDbkMsT0FBTyxDQUFTO0lBQ3pCOzs7Ozs7O09BT0c7SUFDTSxRQUFRLENBQWU7SUFDaEMseUVBQXlFO0lBQ2pFLFlBQVksQ0FBVztJQUUvQjs7Ozs7Ozs7O09BU0c7SUFDSyxlQUFlLENBQVU7SUFFakM7Ozs7Ozs7Ozs7O09BV0c7SUFDSyxjQUFjLEdBQTRDLEVBQUUsQ0FBQztJQUVyRTs7Ozs7OztPQU9HO0lBQ0ssY0FBYyxHQUEwQixFQUFFLENBQUM7SUFFbkQ7Ozs7T0FJRztJQUNLLGdCQUFnQixDQUE4QztJQUV0RSxZQUFZLElBQWEsRUFBRSxPQUFlLEVBQUUsUUFBc0I7UUFDaEUsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksR0FBRyxhQUFhLENBQUM7UUFDMUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIs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bE1ELGtDQWtNQztBQXlSRCwrREFBK0Q7QUFFL0QsZ0VBQWdFO0FBQ2hFLFNBQWdCLGFBQWEsQ0FBQyxLQUFjO0lBQzFDLE9BQU8sT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUssS0FBcUIsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDO0FBQzlGLENBQUM7QUFGRCxzQ0FFQztBQUVELHdHQUF3RztBQUN4RyxTQUFnQixhQUFhLENBQUMsS0FBYztJQUMxQyx5RUFBeUU7SUFDekUsdUVBQXVFO0lBQ3ZFLDJEQUEyRDtJQUMzRCxJQUFJLENBQUM7UUFDSCxPQUFPLENBQ0wsS0FBSyxZQUFZLFdBQVc7WUFDNUIsQ0FBQyxLQUFLLFlBQVksS0FBSztnQkFDckIsS0FBSyxDQUFDLElBQUksS0FBSyxhQUFhO2dCQUM1QixNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQztnQkFDeEQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUMxRCxDQUFDO0lBQ0osQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUM7QUFmRCxzQ0FlQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGF1c2UvUmVzdW1lIOKAlCBzZXJpYWxpemFibGUgY2hlY2twb2ludCBmb3IgbG9uZy1ydW5uaW5nIG9yIGh1bWFuLWluLXRoZS1sb29wIGZsb3dzLlxuICpcbiAqIEEgc3RhZ2Ugc2lnbmFscyBwYXVzZSBieSBjYWxsaW5nIGBzY29wZS4kcGF1c2UoZGF0YSlgIHdoaWNoIHRocm93cyBhIFBhdXNlU2lnbmFsLlxuICogVGhlIHNpZ25hbCBidWJibGVzIHVwIHRocm91Z2ggU3ViZmxvd0V4ZWN1dG9yIOKGkiBGbG93Y2hhcnRUcmF2ZXJzZXIg4oaSIEZsb3dDaGFydEV4ZWN1dG9yLFxuICogZWFjaCBsZXZlbCBhZGRpbmcgaXRzIHN1YmZsb3cgSUQgdG8gdGhlIHBhdGguXG4gKlxuICogVGhlIGNoZWNrcG9pbnQgY2FwdHVyZXM6XG4gKiAgIC0gcGF1c2VkU3RhZ2VJZCArIHN1YmZsb3dQYXRoOiB0aGUgcGF1c2VkIHN0YWdlJ3MgaWQgYW5kIGl0cyBzdWJmbG93IHBhdGhcbiAqICAgLSBzaGFyZWRTdGF0ZTogc2NvcGUgYXQgdGhlIHBhdXNlIHBvaW50XG4gKiAgIC0gZXhlY3V0aW9uVHJlZTogY29tcGxldGVkIHN0YWdlcyBmb3IgQlRTL25hcnJhdGl2ZVxuICogICAtIHBhdXNlRGF0YTogcXVlc3Rpb24sIHJlYXNvbiwgb3IgbWV0YWRhdGEgZnJvbSAkcGF1c2UoKVxuICpcbiAqIFJlc3VtZSByZWJ1aWxkcyB0aGUgZmxvd2NoYXJ0LCByZXN0b3JlcyBzY29wZSwgbmF2aWdhdGVzIHRvIHRoZSBwYXVzZWQgc3RhZ2UsXG4gKiBpbmplY3RzIHJlc3VtZUlucHV0LCBhbmQgY29udGludWVzIHRyYXZlcnNhbC5cbiAqXG4gKiBTdXBwb3J0ZWQgdG9wb2xvZ2llczogbGluZWFyLCBzdWJmbG93IChhdCBhbnkgZGVwdGgg4oCUIG1vdW50ZWQgbGluZWFybHksIGFzIGFcbiAqIGRlY2lkZXIgb3Igc2VsZWN0b3IgYnJhbmNoLCBvciBhcyBhIGZvcmsgY2hpbGQpLCBsb29wLCBuZXN0ZWQgc3ViZmxvdyBpblxuICogbG9vcCwgYW5kIHNldmVyYWwgcGFyYWxsZWwgc2libGluZ3MgcGF1c2luZyBpbiBvbmUgZmFuLW91dCAoZWFjaCBhc2tzIGluXG4gKiB0dXJuIOKAlCBgRmxvd2NoYXJ0Q2hlY2twb2ludC5wZW5kaW5nUGF1c2VzYCkuXG4gKlxuICogTk9UIHJlc3VtYWJsZSB5ZXQ6IGEgcGF1c2UgaW5zaWRlIGEgTEFaWSBzdWJmbG93IChgYWRkTGF6eVN1YkZsb3dDaGFydCpgKSBvclxuICogaW5zaWRlIGFuIGBhZGRQYXJhbGxlbEZvckVhY2hgIGJyYW5jaC4gVGhlaXIgZ3JhcGhzIGFyZSByZXNvbHZlZCBhdCBydW4gdGltZVxuICogYW5kIGFyZSBub3QgaW4gdGhlIGNoYXJ0IGEgcmVzdW1lIHdhbGtzLCBzbyBgcmVzdW1lKClgIHJlZnVzZXMgdGhlXG4gKiBjaGVja3BvaW50IChcIm5vdCBmb3VuZFwiKSBpbnN0ZWFkIG9mIGd1ZXNzaW5nLiBQaW5uZWQgaW5cbiAqIHRlc3QvbGliL3BhdXNlL3Jlc3VtZS1rbm93bi1saW1pdGF0aW9ucy50ZXN0LnRzLlxuICovXG5cbi8vIOKUgOKUgCBQYXVzZVNpZ25hbCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBUaGUgcGF1c2VkIEVYRUNVVElPTiAoOS4zNy4wKTogdGhlIHJ1biB0aGF0IHBhdXNlZCBhbmQgdGhlIHBhdXNlZCBzdGFnZSdzXG4gKiBydW50aW1lU3RhZ2VJZCBpbiBpdC4gUmVjb3JkZWQgb24gdGhlIGNoZWNrcG9pbnQgKGFuZCBvbiBlYWNoIHF1ZXVlZFxuICogc2libGluZydzIHBlbmRpbmcgcmVjb3JkKSBzbyBhIHJlc3VtZSBjYW4gTElOSyB0byBpdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXVzZWRFeGVjdXRpb24ge1xuICByZWFkb25seSBydW5JZDogc3RyaW5nO1xuICByZWFkb25seSBydW50aW1lU3RhZ2VJZDogc3RyaW5nO1xufVxuXG4vKiogVHJ1ZSBmb3IgYSB3ZWxsLWZvcm1lZCB7QGxpbmsgUGF1c2VkRXhlY3V0aW9ufSAodHdvIG5vbi1lbXB0eSBzdHJpbmdzKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BhdXNlZEV4ZWN1dGlvbih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFBhdXNlZEV4ZWN1dGlvbiB7XG4gIGNvbnN0IHYgPSB2YWx1ZSBhcyB7IHJ1bklkPzogdW5rbm93bjsgcnVudGltZVN0YWdlSWQ/OiB1bmtub3duIH0gfCBudWxsIHwgdW5kZWZpbmVkO1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiB2Py5ydW5JZCA9PT0gJ3N0cmluZycgJiYgdi5ydW5JZCAhPT0gJycgJiYgdHlwZW9mIHYucnVudGltZVN0YWdlSWQgPT09ICdzdHJpbmcnICYmIHYucnVudGltZVN0YWdlSWQgIT09ICcnXG4gICk7XG59XG5cbi8qKlxuICogVGhyb3duIGJ5IGBzY29wZS4kcGF1c2UoKWAgdG8gc2lnbmFsIHRoYXQgZXhlY3V0aW9uIHNob3VsZCBzdG9wXG4gKiBhbmQgY3JlYXRlIGEgc2VyaWFsaXphYmxlIGNoZWNrcG9pbnQuXG4gKlxuICogQnViYmxlcyB1cCB0aHJvdWdoIFN1YmZsb3dFeGVjdXRvciAod2hpY2ggcHJlcGVuZHMgc3ViZmxvdyBJRCB0byBwYXRoKVxuICogYW5kIGlzIGNhdWdodCBieSBGbG93Y2hhcnRUcmF2ZXJzZXIvRmxvd0NoYXJ0RXhlY3V0b3IuXG4gKi9cbmV4cG9ydCBjbGFzcyBQYXVzZVNpZ25hbCBleHRlbmRzIEVycm9yIHtcbiAgLyoqIERhdGEgZnJvbSAkcGF1c2UoKSDigJQgcXVlc3Rpb24sIHJlYXNvbiwgbWV0YWRhdGEuICovXG4gIHJlYWRvbmx5IHBhdXNlRGF0YTogdW5rbm93bjtcbiAgLyoqIElEIG9mIHRoZSBzdGFnZSB0aGF0IGNhbGxlZCAkcGF1c2UoKS4gKi9cbiAgcmVhZG9ubHkgc3RhZ2VJZDogc3RyaW5nO1xuICAvKipcbiAgICogSE9XIHRoZSBwYXVzZSB3YXMgcmFpc2VkIOKAlCBgJ2ludGVycnVwdCdgIHdoZW4gYSBzdGFnZSBib2R5IGNhbGxlZFxuICAgKiBgaW50ZXJydXB0KHNjb3BlLCBwYXlsb2FkKWAsIGFic2VudCBmb3IgdGhlIGBhZGRQYXVzYWJsZUZ1bmN0aW9uYFxuICAgKiBleGVjdXRlL3Jlc3VtZSBwYXRoLiBTZXQgYXQgdGhlIHN0YWdlIGJvdW5kYXJ5IChgU3RhZ2VSdW5uZXJgKSwgY2FycmllZFxuICAgKiBvbnRvIHRoZSBjaGVja3BvaW50LCBhbmQgcmVhZCBieSBgcmVzdW1lKClgIHRvIHBpY2sgdGhlIHJlLWVudHJ5OiBhblxuICAgKiBpbnRlcnJ1cHRlZCBzdGFnZSByZS1ydW5zIGl0cyBPV04gZnVuY3Rpb24gZnJvbSB0aGUgdG9wIChzdGFnZXMgYXJlXG4gICAqIGF0b21pYyksIGEgcGF1c2FibGUgc3RhZ2UgcnVucyBpdHMgYHJlc3VtZUZuYC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdXNlZEJ5PzogJ2ludGVycnVwdCc7XG4gIC8qKiBQYXRoIHRocm91Z2ggc3ViZmxvd3MgdG8gdGhlIHBhdXNlZCBzdGFnZS4gQnVpbHQgZHVyaW5nIGJ1YmJsZS11cC4gKi9cbiAgcHJpdmF0ZSBfc3ViZmxvd1BhdGg6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBJbnZva2VyIGNvbnRleHQg4oCUIGVucmljaGVkIGR1cmluZyBidWJibGUtdXAgd2hlbiBhIFBhdXNlU2lnbmFsIHBhc3Nlc1xuICAgKiB0aHJvdWdoIGEgZGVjaWRlciwgc2VsZWN0b3IsIG9yIGZvcmsgaGFuZGxlci5cbiAgICpcbiAgICogVGhlIGludm9rZXIgaXMgdGhlIHN0YWdlIHRoYXQgY2FsbGVkIGV4ZWN1dGVOb2RlKCkgb24gdGhlIHBhdXNlZCBjaGlsZC5cbiAgICogQ2FwdHVyZWQgZHVyaW5nIHRyYXZlcnNhbCAobm90IHJlY29uc3RydWN0ZWQgZnJvbSB0aGUgdHJlZSkuIChUaGVcbiAgICogaW52b2tlcidzIGAubmV4dGAgaWQgcm9kZSBiZXNpZGUgaXQgdW50aWwgOS4zOS4wIGFzXG4gICAqIGBjb250aW51YXRpb25TdGFnZUlkYDsgd2hhdCBydW5zIGFmdGVyIGEgcmVzdW1lIGNvbWVzIGZyb20gdGhlIGNoYXJ0XG4gICAqIHNpbmNlIDkuMjguMCwgc28gaXQgaXMgbm8gbG9uZ2VyIGNhcnJpZWQuKVxuICAgKi9cbiAgcHJpdmF0ZSBfaW52b2tlclN0YWdlSWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFN1YmZsb3cgc2NvcGUgY2FwdHVyZSDigJQgcG9wdWxhdGVkIGR1cmluZyBidWJibGUtdXAgYnlcbiAgICogYFN1YmZsb3dFeGVjdXRvcmAgcmlnaHQgYmVmb3JlIHJlLXRocm93LiBFYWNoIGVudHJ5IGlzIG9uZVxuICAgKiBzdWJmbG93J3MgcHJlLXBhdXNlIHNoYXJlZCBzdGF0ZSwga2V5ZWQgYnkgdGhlIHBhdGgtcHJlZml4ZWRcbiAgICogc3ViZmxvdyBpZCAobWF0Y2hlcyBgc3ViZmxvd1BhdGhgKS5cbiAgICpcbiAgICogV2l0aG91dCB0aGlzLCB0aGUgbmVzdGVkIGBTaGFyZWRNZW1vcnlgIGlzIGdhcmJhZ2UtY29sbGVjdGVkXG4gICAqIGJlZm9yZSB0aGUgY2hlY2twb2ludCBpcyBidWlsdC4gT24gcmVzdW1lLCB0aGUgaW5uZXIgcnVudGltZSBpc1xuICAgKiByZS1jcmVhdGVkIGVtcHR5IGFuZCByZXN1bWUgaGFuZGxlcnMgcmVhZGluZyBwcmUtcGF1c2Ugc2NvcGVcbiAgICogKGUuZy4sIGFuIEFnZW50J3MgYHNjb3BlLmhpc3RvcnlgLCBgc2NvcGUucGF1c2VkVG9vbENhbGxJZGApXG4gICAqIGNyYXNoIHdpdGggXCJYIGlzIG5vdCBpdGVyYWJsZVwiIC8gdW5kZWZpbmVkLlxuICAgKi9cbiAgcHJpdmF0ZSBfc3ViZmxvd1N0YXRlczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+ID0ge307XG5cbiAgLyoqXG4gICAqIFBhdXNlcyB0aGF0IFBBUkFMTEVMIFNJQkxJTkdTIHJhaXNlZCBpbiB0aGUgc2FtZSBmYW4tb3V0IGFzIHRoaXMgb25lLFxuICAgKiB3YWl0aW5nIHRoZWlyIHR1cm4gKDkuMjguMCkuIFJlY29yZGVkIGJ5IGBDaGlsZHJlbkV4ZWN1dG9yYCB3aGVuIG1vcmVcbiAgICogdGhhbiBvbmUgY2hpbGQgb2YgYSBmb3JrIChvciBtb3JlIHRoYW4gb25lIHNlbGVjdGVkIGJyYW5jaCkgcGF1c2VzOiB0aGVcbiAgICogZmlyc3QgcGF1c2UgaXMgdGhlIG9uZSB0aGF0IGlzIGFza2VkLCB0aGUgb3RoZXJzIHJpZGUgaGVyZSBpbnN0ZWFkIG9mXG4gICAqIGJlaW5nIGRyb3BwZWQuIEVhY2ggcGF0aCBpcyByZWxhdGl2ZSB0byB3aGVyZSB0aGUgc2lnbmFsIGN1cnJlbnRseSBpc1xuICAgKiBhbmQgZ3Jvd3Mgd2l0aCBpdCDigJQgYHByZXBlbmRTdWJmbG93YCBwcmVwZW5kcyB0byBldmVyeSBlbnRyeSB0b28uXG4gICAqL1xuICBwcml2YXRlIF9wZW5kaW5nUGF1c2VzOiBNdXRhYmxlUGVuZGluZ1BhdXNlW10gPSBbXTtcblxuICAvKipcbiAgICogV0hJQ0ggZXhlY3V0aW9uIHBhdXNlZCDigJQgaXRzIHJ1bnRpbWVTdGFnZUlkIHN0YW1wZWQgb25jZSBhdCB0aGUgc3RhZ2VcbiAgICogYm91bmRhcnkgKGBTdGFnZVJ1bm5lcmApLCBpdHMgcnVuIGFkZGVkIHdoZW4gdGhlIGNoZWNrcG9pbnQgaXMgYnVpbHRcbiAgICogKGBjb21wbGV0ZUV4ZWN1dGlvbmApLCBvciBib3RoIGNhcnJpZWQgb3ZlciBmb3IgYSBxdWV1ZWQgc2libGluZy5cbiAgICovXG4gIHByaXZhdGUgX3BhdXNlZEV4ZWN1dGlvbj86IHsgcnVudGltZVN0YWdlSWQ6IHN0cmluZzsgcnVuSWQ/OiBzdHJpbmcgfTtcblxuICBjb25zdHJ1Y3RvcihkYXRhOiB1bmtub3duLCBzdGFnZUlkOiBzdHJpbmcsIHBhdXNlZEJ5PzogJ2ludGVycnVwdCcpIHtcbiAgICBzdXBlcignRXhlY3V0aW9uIHBhdXNlZCcpO1xuICAgIHRoaXMubmFtZSA9ICdQYXVzZVNpZ25hbCc7XG4gICAgdGhpcy5wYXVzZURhdGEgPSBkYXRhO1xuICAgIHRoaXMuc3RhZ2VJZCA9IHN0YWdlSWQ7XG4gICAgaWYgKHBhdXNlZEJ5KSB0aGlzLnBhdXNlZEJ5ID0gcGF1c2VkQnk7XG4gICAgdGhpcy5fc3ViZmxvd1BhdGggPSBbXTtcbiAgICAvLyBQYXVzZVNpZ25hbCBpcyBjb250cm9sIGZsb3csIG5vdCBhIHJlYWwgZXJyb3Ig4oCUIHN0YWNrIHRyYWNlIGhhcyBubyBkaWFnbm9zdGljIHZhbHVlLlxuICAgIHRoaXMuc3RhY2sgPSAnJztcbiAgfVxuXG4gIGdldCBzdWJmbG93UGF0aCgpOiByZWFkb25seSBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YmZsb3dQYXRoO1xuICB9XG5cbiAgLyoqIFRoZSBwYXVzZWQgZXhlY3V0aW9uIChpdHMgcnVuIGFuZCBgW3BhdGgvXXN0YWdlSWQjTmApLCBvbmNlIGJvdGggYXJlIGtub3duLiAqL1xuICBnZXQgcGF1c2VkRXhlY3V0aW9uKCk6IFBhdXNlZEV4ZWN1dGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZSA9IHRoaXMuX3BhdXNlZEV4ZWN1dGlvbjtcbiAgICByZXR1cm4gZT8ucnVuSWQgIT09IHVuZGVmaW5lZCA/IHsgcnVuSWQ6IGUucnVuSWQsIHJ1bnRpbWVTdGFnZUlkOiBlLnJ1bnRpbWVTdGFnZUlkIH0gOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogUmVjb3JkIHdoaWNoIEVYRUNVVElPTiBwYXVzZWQuIEZpcnN0IHN0YW1wIHdpbnM6IHRoZSBzaWduYWwgYnViYmxlc1xuICAgKiB0aHJvdWdoIG91dGVyIGJvdW5kYXJpZXMgdGhhdCBtdXN0IG5vdCBvdmVyd3JpdGUgaXQuIFRoZSBzdGFnZSBib3VuZGFyeVxuICAgKiBrbm93cyBvbmx5IHRoZSBydW50aW1lU3RhZ2VJZDsgYSBxdWV1ZWQgc2libGluZyByYWlzZWQgYWdhaW4gb24gcmVzdW1lXG4gICAqIGNhcnJpZXMgYm90aCAoaXQgcGF1c2VkIGluIGFuIEVBUkxJRVIgcnVuKS5cbiAgICovXG4gIHN0YW1wRXhlY3V0aW9uKHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcsIHJ1bklkPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3BhdXNlZEV4ZWN1dGlvbiAhPT0gdW5kZWZpbmVkIHx8ICFydW50aW1lU3RhZ2VJZCkgcmV0dXJuO1xuICAgIHRoaXMuX3BhdXNlZEV4ZWN1dGlvbiA9IHsgcnVudGltZVN0YWdlSWQsIC4uLihydW5JZCAhPT0gdW5kZWZpbmVkICYmIHsgcnVuSWQgfSkgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOYW1lIHRoZSBydW4gZm9yIGV2ZXJ5IHBhdXNlIG9uIHRoaXMgc2lnbmFsIHRoYXQgcGF1c2VkIGluIGl0IOKAlCB0aGlzIG9uZVxuICAgKiBhbmQgaXRzIHF1ZXVlZCBzaWJsaW5ncyB0aGF0IGRvIG5vdCBhbHJlYWR5IGNhcnJ5IGEgcnVuIChhIHNpYmxpbmcgcmFpc2VkXG4gICAqIGFnYWluIG9uIHJlc3VtZSBrZWVwcyB0aGUgcnVuIGl0IHBhdXNlZCBpbikuIENhbGxlZCBvbmNlLCB3aGVuIHRoZVxuICAgKiBjaGVja3BvaW50IGlzIGJ1aWx0LlxuICAgKi9cbiAgY29tcGxldGVFeGVjdXRpb24ocnVuSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9wYXVzZWRFeGVjdXRpb24gJiYgdGhpcy5fcGF1c2VkRXhlY3V0aW9uLnJ1bklkID09PSB1bmRlZmluZWQpIHRoaXMuX3BhdXNlZEV4ZWN1dGlvbi5ydW5JZCA9IHJ1bklkO1xuICAgIGZvciAoY29uc3QgcGVuZGluZyBvZiB0aGlzLl9wZW5kaW5nUGF1c2VzKSB7XG4gICAgICBpZiAocGVuZGluZy5wYXVzZWRFeGVjdXRpb24gJiYgcGVuZGluZy5wYXVzZWRFeGVjdXRpb24ucnVuSWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwZW5kaW5nLnBhdXNlZEV4ZWN1dGlvbiA9IHsgcnVudGltZVN0YWdlSWQ6IHBlbmRpbmcucGF1c2VkRXhlY3V0aW9uLnJ1bnRpbWVTdGFnZUlkLCBydW5JZCB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVwZW5kIGEgc3ViZmxvdyBJRCB0byB0aGUgcGF0aCAoY2FsbGVkIGR1cmluZyBidWJibGUtdXApLiBUaGUgcGVuZGluZ1xuICAgKiBzaWJsaW5nIHBhdXNlcyByaWRlIHRoZSBzYW1lIGJvdW5kYXJ5LCBzbyB0aGVpciBwYXRocyBncm93IHdpdGggaXQuXG4gICAqL1xuICBwcmVwZW5kU3ViZmxvdyhzdWJmbG93SWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX3N1YmZsb3dQYXRoLnVuc2hpZnQoc3ViZmxvd0lkKTtcbiAgICBmb3IgKGNvbnN0IHBlbmRpbmcgb2YgdGhpcy5fcGVuZGluZ1BhdXNlcykgcGVuZGluZy5zdWJmbG93UGF0aC51bnNoaWZ0KHN1YmZsb3dJZCk7XG4gIH1cblxuICAvKipcbiAgICogUXVldWUgYSBwYXJhbGxlbCBzaWJsaW5nJ3MgcGF1c2UgYmVoaW5kIHRoaXMgb25lIChpdHMgcGF0aCByZWxhdGl2ZSB0b1xuICAgKiB0aGlzIHNpZ25hbCdzIGN1cnJlbnQgbGV2ZWwpLiBDb3BpZWQgaW46IHRoZSBlbnRyeSBpcyBvd25lZCBieSB0aGVcbiAgICogc2lnbmFsIGZyb20gaGVyZSBvbi5cbiAgICovXG4gIGFkZFBlbmRpbmdQYXVzZShwYXVzZTogUGVuZGluZ1BhdXNlKTogdm9pZCB7XG4gICAgdGhpcy5fcGVuZGluZ1BhdXNlcy5wdXNoKHtcbiAgICAgIHBhdXNlZFN0YWdlSWQ6IHBhdXNlLnBhdXNlZFN0YWdlSWQsXG4gICAgICBzdWJmbG93UGF0aDogWy4uLnBhdXNlLnN1YmZsb3dQYXRoXSxcbiAgICAgIHN1YmZsb3dTdGF0ZXM6IHsgLi4ucGF1c2Uuc3ViZmxvd1N0YXRlcyB9LFxuICAgICAgLi4uKHBhdXNlLnBhdXNlRGF0YSAhPT0gdW5kZWZpbmVkICYmIHsgcGF1c2VEYXRhOiBwYXVzZS5wYXVzZURhdGEgfSksXG4gICAgICAuLi4ocGF1c2UucGF1c2VkQnkgJiYgeyBwYXVzZWRCeTogcGF1c2UucGF1c2VkQnkgfSksXG4gICAgICAuLi4ocGF1c2UucGF1c2VkRXhlY3V0aW9uICYmXG4gICAgICAgIHR5cGVvZiBwYXVzZS5wYXVzZWRFeGVjdXRpb24ucnVudGltZVN0YWdlSWQgPT09ICdzdHJpbmcnICYmIHsgcGF1c2VkRXhlY3V0aW9uOiB7IC4uLnBhdXNlLnBhdXNlZEV4ZWN1dGlvbiB9IH0pLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcmFsbGVsIHNpYmxpbmdzJyBwYXVzZXMgd2FpdGluZyBiZWhpbmQgdGhpcyBvbmUsIGluIHRoZSBvcmRlciB0aGV5IHdpbGxcbiAgICogYmUgYXNrZWQuIEluIGZsaWdodCwgYSBzaWJsaW5nIHRoYXQgcGF1c2VkIGluIFRISVMgcnVuIGNhcnJpZXMgb25seSBpdHNcbiAgICogcnVudGltZVN0YWdlSWQ7IGBjb21wbGV0ZUV4ZWN1dGlvbmAgKGF0IGNoZWNrcG9pbnQgYnVpbGQpIGFkZHMgdGhlIHJ1bi5cbiAgICovXG4gIGdldCBwZW5kaW5nUGF1c2VzKCk6IHJlYWRvbmx5IFBlbmRpbmdQYXVzZVtdIHtcbiAgICByZXR1cm4gdGhpcy5fcGVuZGluZ1BhdXNlcyBhcyByZWFkb25seSBQZW5kaW5nUGF1c2VbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIHBhdXNlIGFzIGEge0BsaW5rIFBlbmRpbmdQYXVzZX0g4oCUIHdoYXQgYENoaWxkcmVuRXhlY3V0b3JgIHF1ZXVlc1xuICAgKiBiZWhpbmQgYSBzaWJsaW5nJ3MgcGF1c2Ugd2hlbiBib3RoIHBhdXNlZCBpbiBvbmUgZmFuLW91dC5cbiAgICovXG4gIHRvUGVuZGluZ1BhdXNlKCk6IFBlbmRpbmdQYXVzZSB7XG4gICAgLy8gSW4gZmxpZ2h0IChzZWUgYHBlbmRpbmdQYXVzZXNgKTogdGhlIHJ1biBpcyBhZGRlZCBhdCBjaGVja3BvaW50IGJ1aWxkLlxuICAgIHJldHVybiA8UGVuZGluZ1BhdXNlPntcbiAgICAgIHBhdXNlZFN0YWdlSWQ6IHRoaXMuc3RhZ2VJZCxcbiAgICAgIHN1YmZsb3dQYXRoOiBbLi4udGhpcy5fc3ViZmxvd1BhdGhdLFxuICAgICAgc3ViZmxvd1N0YXRlczogeyAuLi50aGlzLl9zdWJmbG93U3RhdGVzIH0sXG4gICAgICAuLi4odGhpcy5wYXVzZURhdGEgIT09IHVuZGVmaW5lZCAmJiB7IHBhdXNlRGF0YTogdGhpcy5wYXVzZURhdGEgfSksXG4gICAgICAuLi4odGhpcy5wYXVzZWRCeSAmJiB7IHBhdXNlZEJ5OiB0aGlzLnBhdXNlZEJ5IH0pLFxuICAgICAgLi4uKHRoaXMuX3BhdXNlZEV4ZWN1dGlvbiAmJiB7IHBhdXNlZEV4ZWN1dGlvbjogeyAuLi50aGlzLl9wYXVzZWRFeGVjdXRpb24gfSB9KSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIFRoZSBzdGFnZSB0aGF0IGludm9rZWQgdGhlIHBhdXNlZCBjaGlsZCAoZGVjaWRlciwgc2VsZWN0b3IsIGZvcmspLiAqL1xuICBnZXQgaW52b2tlclN0YWdlSWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5faW52b2tlclN0YWdlSWQ7XG4gIH1cblxuICAvKipcbiAgICogU3RhbXAgdGhlIGludm9rZXIgY29udGV4dCBkdXJpbmcgYnViYmxlLXVwLlxuICAgKiBDYWxsZWQgYnkgZGVjaWRlci9zZWxlY3Rvci9mb3JrIGhhbmRsZXJzIHdoZW4gY2F0Y2hpbmcgYSBjaGlsZCdzIFBhdXNlU2lnbmFsLlxuICAgKiBGaXJzdCBpbnZva2VyIHdpbnMgKGlubmVybW9zdCkg4oCUIHN1YnNlcXVlbnQgY2FsbHMgYXJlIG5vLW9wcy5cbiAgICovXG4gIHNldEludm9rZXIoaW52b2tlclN0YWdlSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5faW52b2tlclN0YWdlSWQpIHRoaXMuX2ludm9rZXJTdGFnZUlkID0gaW52b2tlclN0YWdlSWQ7XG4gIH1cblxuICAvKipcbiAgICogQ2FwdHVyZSBhIHN1YmZsb3cncyBpc29sYXRlZCBTaGFyZWRNZW1vcnkgYXQgdGhlIG1vbWVudCBpdHNcbiAgICogdHJhdmVyc2FsIHRocmV3LiBDYWxsZWQgYnkgYFN1YmZsb3dFeGVjdXRvcmAgb25jZSBwZXIgc3ViZmxvd1xuICAgKiBib3VuZGFyeSBvbiB0aGUgYnViYmxlLXVwIHBhdGguIEVhY2ggY2FwdHVyZSBpcyBrZXllZCBieSB0aGVcbiAgICogcGF0aC1wcmVmaXhlZCBzdWJmbG93IGlkICh0aGUgc2FtZSBpZCB1c2VkIGluIGBzdWJmbG93UGF0aGApLlxuICAgKlxuICAgKiBJbm5lcm1vc3QtZmlyc3Q6IGEgZGVlcCBgU2VxdWVuY2UoQWdlbnQoLi4uKSlgIHBhdXNlIGNhcHR1cmVzIHRoZVxuICAgKiBhZ2VudCdzIHN1YmZsb3cgZmlyc3QsIHRoZW4gaXRzIHBhcmVudCdzLCBhbGwgdGhlIHdheSB0byB0aGUgcm9vdFxuICAgKiBtb3VudC4gVGhlIGZ1bGwgbmVzdCBzdXJ2aXZlcyBpbnRvIGBjaGVja3BvaW50LnN1YmZsb3dTdGF0ZXNgLlxuICAgKi9cbiAgY2FwdHVyZVN1YmZsb3dTY29wZShzdWJmbG93SWQ6IHN0cmluZywgc3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG4gICAgLy8gRGVmZW5zaXZlIHNoYWxsb3cgY2xvbmUgc28gbGF0ZXIgbXV0YXRpb25zIG9uIHRoZSBzb3VyY2UgZG9uJ3RcbiAgICAvLyBibGVlZCBpbnRvIHRoZSBjYXB0dXJlZCBzbmFwc2hvdC4gRGVlcCBjbG9uaW5nIGlzIHRoZSBjb25zdW1lcidzXG4gICAgLy8gcmVzcG9uc2liaWxpdHkgKHRoZSByZXN1bWUgdGFyZ2V0IG1heSBub3QgZXZlbiBiZSBvbiB0aGlzXG4gICAgLy8gcHJvY2Vzcyk7IFNoYXJlZE1lbW9yeSB2YWx1ZXMgYXJlIGNvbnZlbnRpb25hbGx5IEpTT04tZnJpZW5kbHkuXG4gICAgdGhpcy5fc3ViZmxvd1N0YXRlc1tzdWJmbG93SWRdID0geyAuLi5zdGF0ZSB9O1xuICB9XG5cbiAgLyoqIENhcHR1cmVkIHN1YmZsb3cgc2NvcGVzIChyZWFkLW9ubHkgdmlldykuICovXG4gIGdldCBzdWJmbG93U3RhdGVzKCk6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4ge1xuICAgIHJldHVybiB0aGlzLl9zdWJmbG93U3RhdGVzO1xuICB9XG59XG5cbi8vIOKUgOKUgCBQZW5kaW5nUGF1c2Ug4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogQSBwYXVzZSBhIFBBUkFMTEVMIFNJQkxJTkcgb2YgdGhlIHBhdXNlZCBzdGFnZSByYWlzZWQgaW4gdGhlIHNhbWUgZmFuLW91dCDigJRcbiAqIHR3byBjaGlsZHJlbiBvZiBvbmUgZm9yayAob3IgdHdvIHNlbGVjdGVkIGJyYW5jaGVzIG9mIG9uZSBzZWxlY3RvcikgdGhhdFxuICogYm90aCBwYXVzZWQgKDkuMjguMCkuIE9ubHkgb25lIHBhdXNlIGlzIGFza2VkIGF0IGEgdGltZTogdGhlIGNoZWNrcG9pbnQnc1xuICogb3duIChgcGF1c2VkU3RhZ2VJZGApLCB0aGVuIGVhY2ggb2YgdGhlc2UgaW4gdHVybiwgd2l0aCB0aGUgZmFuLW91dCdzIGpvaW5cbiAqIHJ1bm5pbmcgb25seSBvbmNlIGV2ZXJ5IGNoaWxkIGlzIGRvbmUuXG4gKlxuICogRXZlcnl0aGluZyBuZWVkZWQgdG8gcmFpc2UgdGhlIHNpYmxpbmcncyBwYXVzZSBhZ2FpbiBsYXRlciBXSVRIT1VUIHJlLXJ1bm5pbmdcbiAqIHRoZSBzaWJsaW5nOiBpdHMgc3RhZ2UsIGl0cyBwYXRoLCBpdHMgY2FwdHVyZWQgc3ViZmxvdyBzdGF0ZSwgaXRzIHF1ZXN0aW9uLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBBIGZvcmsgd2hvc2UgdHdvIGNoaWxkcmVuIGJvdGggYXNrOiB0aGUgZmlyc3QgY2hlY2twb2ludCBhc2tzIGMxIGFuZFxuICogLy8gY2FycmllcyBjMidzIHBhdXNlOyByZXN1bWluZyBpdCBmaW5pc2hlcyBjMSwgdGhlbiBwYXVzZXMgd2l0aCBjMidzXG4gKiAvLyBxdWVzdGlvbjsgcmVzdW1pbmcgVEhBVCBmaW5pc2hlcyBjMiBhbmQgcnVucyB0aGUgam9pbi5cbiAqIGNvbnN0IGNwID0gZXhlY3V0b3IuZ2V0Q2hlY2twb2ludCgpITtcbiAqIGNwLnBhdXNlZFN0YWdlSWQ7ICAgICAgICAgICAgICAgICAgLy8gJ2MxL2FzaydcbiAqIGNwLnBlbmRpbmdQYXVzZXM/LlswXS5wYXVzZWRTdGFnZUlkOyAvLyAnYzIvYXNrJ1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGVuZGluZ1BhdXNlIHtcbiAgLyoqIFRoZSBzaWJsaW5nJ3MgcGF1c2VkIHN0YWdlIChwYXRoLXByZWZpeGVkIGlkLCBhcyBgcGF1c2VkU3RhZ2VJZGApLiAqL1xuICByZWFkb25seSBwYXVzZWRTdGFnZUlkOiBzdHJpbmc7XG4gIC8qKiBQYXRoIHRocm91Z2ggc3ViZmxvd3MgdG8gdGhlIHNpYmxpbmcncyBwYXVzZWQgc3RhZ2UgKGFzIGBzdWJmbG93UGF0aGApLiAqL1xuICByZWFkb25seSBzdWJmbG93UGF0aDogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKlxuICAgKiBUaGUgc2libGluZydzIG93biBzdWJmbG93IGNhcHR1cmVzIOKAlCB0aGUgc3ViZmxvd3Mgb24gSVRTIHBhdGggYmVsb3cgdGhlXG4gICAqIGZhbi1vdXQuIFRoZSBzdWJmbG93cyBhYm92ZSB0aGUgZmFuLW91dCBhcmUgc2hhcmVkIHdpdGggdGhlIGNoZWNrcG9pbnQnc1xuICAgKiBvd24gcGF1c2UgYW5kIGFyZSBjYXB0dXJlZCBhZ2FpbiB3aGVuIHRoaXMgcGF1c2UgaXMgcmFpc2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1N0YXRlczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuICAvKiogVGhlIHNpYmxpbmcncyBxdWVzdGlvbiAoYXMgYHBhdXNlRGF0YWApLiAqL1xuICByZWFkb25seSBwYXVzZURhdGE/OiB1bmtub3duO1xuICAvKiogSG93IHRoZSBzaWJsaW5nIHBhdXNlZCAoYXMgYHBhdXNlZEJ5YCkuICovXG4gIHJlYWRvbmx5IHBhdXNlZEJ5PzogJ2ludGVycnVwdCc7XG4gIC8qKiBXaGljaCBleGVjdXRpb24gdGhlIHNpYmxpbmcgcGF1c2VkIGluIChhcyBgcGF1c2VkRXhlY3V0aW9uYCwgOS4zNy4wKSDigJQga2VwdCBzbyBpdHMgb3duIHJlc3VtZSBsaW5rcyB0byBpdC4gKi9cbiAgcmVhZG9ubHkgcGF1c2VkRXhlY3V0aW9uPzogUGF1c2VkRXhlY3V0aW9uO1xufVxuXG4vKiogQSBwZW5kaW5nIHBhdXNlIHdob3NlIHBhdGggc3RpbGwgZ3Jvd3MgYXMgaXRzIHNpZ25hbCBidWJibGVzIHVwIChpbnRlcm5hbCkuICovXG4vKipcbiAqIFRoZSBzaWduYWwncyBvd24gY29weSBvZiBhIHBlbmRpbmcgcGF1c2UuIEl0cyBgcGF1c2VkRXhlY3V0aW9uYCBtYXkgc3RpbGxcbiAqIGxhY2sgdGhlIHJ1biAoYSBzaWJsaW5nIHRoYXQgcGF1c2VkIGluIFRISVMgcnVuKSB1bnRpbCBgY29tcGxldGVFeGVjdXRpb25gLlxuICovXG50eXBlIE11dGFibGVQZW5kaW5nUGF1c2UgPSBPbWl0PFBlbmRpbmdQYXVzZSwgJ3N1YmZsb3dQYXRoJyB8ICdwYXVzZWRFeGVjdXRpb24nPiAmIHtcbiAgc3ViZmxvd1BhdGg6IHN0cmluZ1tdO1xuICBwYXVzZWRFeGVjdXRpb24/OiB7IHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmc7IHJ1bklkPzogc3RyaW5nIH07XG59O1xuXG4vLyDilIDilIAgUGF1c2VSZXN1bHQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogUmV0dXJuZWQgYnkgYSBwYXVzYWJsZSBzdGFnZSdzIGV4ZWN1dGUvcmVzdW1lIGZ1bmN0aW9uIHRvIHNpZ25hbCBwYXVzZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogZXhlY3V0ZTogYXN5bmMgKHNjb3BlKSA9PiB7XG4gKiAgIHNjb3BlLm9yZGVySWQgPSAnMTIzJztcbiAqICAgcmV0dXJuIHsgcGF1c2U6IHRydWUsIGRhdGE6IHsgcXVlc3Rpb246ICdBcHByb3ZlIG9yZGVyIDEyMz8nIH0gfTtcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhdXNlUmVzdWx0IHtcbiAgcmVhZG9ubHkgcGF1c2U6IHRydWU7XG4gIC8qKiBEYXRhIHRvIGluY2x1ZGUgaW4gdGhlIGNoZWNrcG9pbnQg4oCUIHF1ZXN0aW9uLCByZWFzb24sIG1ldGFkYXRhLiAqL1xuICByZWFkb25seSBkYXRhPzogdW5rbm93bjtcbn1cblxuLy8g4pSA4pSAIEZsb3djaGFydENoZWNrcG9pbnQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogU2VyaWFsaXphYmxlIGNoZWNrcG9pbnQg4oCUIGV2ZXJ5dGhpbmcgbmVlZGVkIHRvIHJlc3VtZSBhIHBhdXNlZCBmbG93Y2hhcnQuXG4gKlxuICogSlNPTi1zYWZlOiBubyBmdW5jdGlvbnMsIG5vIGNsYXNzIGluc3RhbmNlcywgbm8gU0RLIGNsaWVudHMuXG4gKiBTdG9yZSBhbnl3aGVyZTogUmVkaXMsIFBvc3RncmVzLCBsb2NhbFN0b3JhZ2UsIGEgZmlsZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gU2F2ZVxuICogY29uc3QgY2hlY2twb2ludCA9IGV4ZWN1dG9yLmdldENoZWNrcG9pbnQoKTsgLy8gYWZ0ZXIgcGF1c2VcbiAqIGF3YWl0IHJlZGlzLnNldChgc2Vzc2lvbjoke2lkfWAsIEpTT04uc3RyaW5naWZ5KGNoZWNrcG9pbnQpKTtcbiAqXG4gKiAvLyBSZXN1bWUgKGhvdXJzIGxhdGVyLCBwb3NzaWJseSBkaWZmZXJlbnQgc2VydmVyKVxuICogY29uc3QgY2hlY2twb2ludCA9IEpTT04ucGFyc2UoYXdhaXQgcmVkaXMuZ2V0KGBzZXNzaW9uOiR7aWR9YCkpO1xuICogY29uc3QgZXhlY3V0b3IgPSBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQpO1xuICogYXdhaXQgZXhlY3V0b3IucmVzdW1lKGNoZWNrcG9pbnQsIHsgYXBwcm92ZWQ6IHRydWUgfSk7XG4gKiBgYGBcbiAqL1xuLyoqXG4gKiBTZXJpYWxpemFibGUgY2hlY2twb2ludCDigJQgZXZlcnl0aGluZyBuZWVkZWQgdG8gcmVzdW1lIGEgcGF1c2VkIGZsb3djaGFydC5cbiAqXG4gKiBUaGUgZXhlY3V0aW9uIHRyZWUgSVMgdGhlIHRyYXZlcnNlZCBwYXRoLiBUaGUgbGVhZiBub2RlIHdpdGggc3RhdHVzICdwYXVzZWQnXG4gKiBJUyB0aGUgY3Vyc29yLiBObyBzZXBhcmF0ZSBwYXRoIGFycmF5IG5lZWRlZCDigJQgdGhlIHRyZWUgc3RydWN0dXJlIGNhcHR1cmVzXG4gKiB0aGUgZnVsbCBuZXN0aW5nIChpbmNsdWRpbmcgc3ViZmxvd3MpLlxuICpcbiAqIEpTT04tc2FmZTogbm8gZnVuY3Rpb25zLCBubyBjbGFzcyBpbnN0YW5jZXMsIG5vIFNESyBjbGllbnRzLlxuICogU3RvcmUgYW55d2hlcmU6IFJlZGlzLCBQb3N0Z3JlcywgbG9jYWxTdG9yYWdlLCBhIGZpbGUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGNoZWNrcG9pbnQgPSBleGVjdXRvci5nZXRDaGVja3BvaW50KCk7IC8vIGFmdGVyIHBhdXNlXG4gKiBhd2FpdCByZWRpcy5zZXQoYHNlc3Npb246JHtpZH1gLCBKU09OLnN0cmluZ2lmeShjaGVja3BvaW50KSk7XG4gKlxuICogLy8gUmVzdW1lIChob3VycyBsYXRlciwgcG9zc2libHkgZGlmZmVyZW50IHNlcnZlcilcbiAqIGNvbnN0IGNoZWNrcG9pbnQgPSBKU09OLnBhcnNlKGF3YWl0IHJlZGlzLmdldChgc2Vzc2lvbjoke2lkfWApKTtcbiAqIGNvbnN0IGV4ZWN1dG9yID0gbmV3IEZsb3dDaGFydEV4ZWN1dG9yKGNoYXJ0KTtcbiAqIGF3YWl0IGV4ZWN1dG9yLnJlc3VtZShjaGVja3BvaW50LCB7IGFwcHJvdmVkOiB0cnVlIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd2NoYXJ0Q2hlY2twb2ludCB7XG4gIC8qKlxuICAgKiBUaGUgY2hlY2twb2ludCBGT1JNQVQgKDkuMzkuMCk6IGAxYC4gQWJzZW50IG9uIGEgY2hlY2twb2ludCB3cml0dGVuXG4gICAqIGJlZm9yZSA5LjM5LjAsIHdoaWNoIGByZXN1bWUoKWAgcmVhZHMgdGhyb3VnaCB0aGUgb25lIHVwY2FzdGVyXG4gICAqIChgcGF1c2UvcmVjb3JkLnRzIMK3IHVwY2FzdENoZWNrcG9pbnRgKSDigJQgaXQgZHJvcHMgdGhlIGxlZ2FjeVxuICAgKiBgY29udGludWF0aW9uU3RhZ2VJZGAgKGEgcmVjb3JkIG5vIHJlc3VtZSBoYXMgcmVhZCBzaW5jZSA5LjI4LjApLiBBXG4gICAqIHZlcnNpb24gdGhpcyByZWxlYXNlIGRvZXMgbm90IGtub3cgaXMgcmVmdXNlZC5cbiAgICovXG4gIHJlYWRvbmx5IGNoZWNrcG9pbnRWZXJzaW9uPzogMTtcblxuICAvKiogU2NvcGUgc3RhdGUgYXQgdGhlIHBhdXNlIHBvaW50IOKAlCBhbGwgc2hhcmVkIG1lbW9yeSBrZXkvdmFsdWVzLiAqL1xuICByZWFkb25seSBzaGFyZWRTdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLyoqIEV4ZWN1dGlvbiB0cmVlIOKAlCB0aGUgdHJhdmVyc2VkIHBhdGguIFRoZSBsZWFmIHdpdGggc3RhdHVzICdwYXVzZWQnIGlzIHRoZSBjdXJzb3IuXG4gICAqICBDb250YWlucyBzdWJmbG93IG5lc3RpbmcuIFVzZWQgZm9yIEJUUyB2aXN1YWxpemF0aW9uIGFuZCB0byBmaW5kIHRoZSByZXN1bWUgcG9pbnQuICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblRyZWU6IHVua25vd247XG5cbiAgLyoqIElEIG9mIHRoZSBzdGFnZSB0aGF0IHBhdXNlZC4gVXNlZCBieSByZXN1bWUoKSB0byBmaW5kIHRoZSBub2RlIGluIHRoZSBncmFwaC4gKi9cbiAgcmVhZG9ubHkgcGF1c2VkU3RhZ2VJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF1c2VkIEVYRUNVVElPTiAoOS4zNy4wKTogdGhlIHJ1biB0aGF0IHBhdXNlZCBhbmQgdGhlIHBhdXNlZCBzdGFnZSdzXG4gICAqIHJ1bnRpbWVTdGFnZUlkIGluIGl0ICh0aGUgaWQgaXRzIGBvblBhdXNlYCBldmVudCBhbmQgaXRzIGNvbW1pdCBjYXJyeSkuXG4gICAqIFJlYWQgYnkgYHJlc3VtZSgpYCBpbnRvIHRoZSBgb25SZXN1bWVgIGV2ZW50J3MgYHRyYXZlcnNhbENvbnRleHQucmVzdW1lZEZyb21gXG4gICAqIGxpbmsg4oCUIG5ldmVyIHVzZWQgdG8gcGxhbiB0aGUgcmUtZW50cnkuIEFic2VudCBvbiBhbiBvbGRlciBjaGVja3BvaW50LFxuICAgKiB3aGljaCB0aGVuIHJlc3VtZXMgd2l0aG91dCBhIGxpbmsuXG4gICAqL1xuICByZWFkb25seSBwYXVzZWRFeGVjdXRpb24/OiBQYXVzZWRFeGVjdXRpb247XG5cbiAgLyoqIFBhdGggdGhyb3VnaCBzdWJmbG93cyB0byB0aGUgcGF1c2VkIHN0YWdlIChlLmcuLCBbJ3NmLXBheW1lbnQnLCAnc2YtdmFsaWRhdGlvbiddKS5cbiAgICogIEVtcHR5IGFycmF5IHdoZW4gcGF1c2VkIGF0IHRoZSB0b3AgbGV2ZWwuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dQYXRoOiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKiogRGF0YSBmcm9tICRwYXVzZSgpIOKAlCBxdWVzdGlvbiwgcmVhc29uLCBtZXRhZGF0YS4gKi9cbiAgcmVhZG9ubHkgcGF1c2VEYXRhPzogdW5rbm93bjtcblxuICAvKipcbiAgICogSE9XIHRoZSBwYXVzZSB3YXMgcmFpc2VkLiBgJ2ludGVycnVwdCdgIG1lYW5zIGEgc3RhZ2UgYm9keSBjYWxsZWRcbiAgICogYGludGVycnVwdChzY29wZSwgeyByZWFzb24sIGV4cGVjdHM/IH0pYCBhbmQgYHBhdXNlRGF0YWAgSVMgdGhhdCBwYXlsb2FkO1xuICAgKiBhYnNlbnQgbWVhbnMgdGhlIGBhZGRQYXVzYWJsZUZ1bmN0aW9uYCBleGVjdXRlL3Jlc3VtZSBwYXRoIChldmVyeVxuICAgKiBjaGVja3BvaW50IHdyaXR0ZW4gYmVmb3JlIDkuMTQuMCBvbWl0cyBpdCwgd2hpY2ggaXMgZXhhY3RseSByaWdodCkuXG4gICAqXG4gICAqIGByZXN1bWUoKWAgcmVhZHMgdGhpcyB0byBwaWNrIHRoZSByZS1lbnRyeSwgYW5kIHRoZSB0d28gZGlmZmVyIGJ5IGxhdzpcbiAgICogYW4gaW50ZXJydXB0ZWQgc3RhZ2UgUkUtUlVOUyBJVFMgT1dOIEZVTkNUSU9OIEZST00gVEhFIFRPUCAoc3RhZ2VzIGFyZVxuICAgKiBhdG9taWMg4oCUIHRoZSBhbnN3ZXIgY29tZXMgYmFjayBvdXQgb2YgdGhlIGBpbnRlcnJ1cHQoKWAgY2FsbCksIHdoaWxlIGFcbiAgICogcGF1c2FibGUgc3RhZ2UgcnVucyBpdHMgc2VwYXJhdGUgYHJlc3VtZUZuYC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdXNlZEJ5PzogJ2ludGVycnVwdCc7XG5cbiAgLyoqIFN1YmZsb3cgcmVzdWx0cyBjb2xsZWN0ZWQgYmVmb3JlIHRoZSBwYXVzZS4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1Jlc3VsdHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAvKipcbiAgICogU3ViZmxvdyBzY29wZSBjYXB0dXJlIOKAlCBvbmUgZW50cnkgcGVyIHN1YmZsb3cgYm91bmRhcnkgb24gdGhlIHBhdGhcbiAgICogdG8gdGhlIHBhdXNlZCBzdGFnZS4gS2V5ZWQgYnkgcGF0aC1wcmVmaXhlZCBzdWJmbG93IGlkIChtYXRjaGVzXG4gICAqIGBzdWJmbG93UGF0aGAgZW50cmllcykuIEVhY2ggdmFsdWUgaXMgdGhlIHN1YmZsb3cncyBwcmUtcGF1c2VcbiAgICogc2hhcmVkIHN0YXRlLlxuICAgKlxuICAgKiBBbHdheXMgcHJlc2VudCAoZW1wdHkgYHt9YCBmb3Igcm9vdC1sZXZlbCBwYXVzZXMgd2hlcmUgbm8gc3ViZmxvd3NcbiAgICogd2VyZSBlbnRlcmVkKS4gT24gcmVzdW1lLCBgU3ViZmxvd0V4ZWN1dG9yYCBzZWVkcyBlYWNoIG5lc3RlZCBydW50aW1lXG4gICAqIG9uIHRoZSBwYXRoIGZyb20gdGhpcyBtYXAg4oCUIE9OQ0UsIG9uIGl0cyBmaXJzdCBlbnRyeSwgaW4gcGxhY2Ugb2YgdGhlXG4gICAqIGlucHV0TWFwcGVyJ3MgdmFsdWVzICh0aGUgbWFwcGVyIHN0aWxsIHJ1bnMsIGZvciB0aGUgc3RhZ2VzJyByZWFkLW9ubHlcbiAgICogYXJncykg4oCUIHNvIHJlc3VtZSBoYW5kbGVycyBzZWUgcHJlLXBhdXNlIHNjb3BlIGFjcm9zcyBzYW1lLWV4ZWN1dG9yIEFORFxuICAgKiBjcm9zcy1leGVjdXRvciByZXN0YXJ0cy4gT25seSB0aGUgc3ViZmxvd3MgT04gYHN1YmZsb3dQYXRoYCByZWFkIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1N0YXRlczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xuXG4gIC8qKlxuICAgKiBUaGUgc2hhcmVkIGV4ZWN1dGlvbiBjb3VudGVyIGF0IHRoZSBtb21lbnQgb2YgcGF1c2Ug4oCUIHRoZSBudW1iZXIgb2Ygc3RhZ2VzXG4gICAqIGV4ZWN1dGVkIHNvIGZhciB0aGlzIHJ1bi4gUmVzdW1lIHNlZWRzIGl0IHNvIHBvc3QtcmVzdW1lIGBydW50aW1lU3RhZ2VJZGBzXG4gICAqIChgc3RhZ2VJZCNleGVjdXRpb25JbmRleGApIGtlZXAgY2xpbWJpbmcgYW5kIG5ldmVyIGNvbGxpZGUgd2l0aCBwcmUtcGF1c2VcbiAgICogb25lcywgd2hpY2ggaXMgd2hhdCB0aGUgd2hvbGUgZXZlbnQtY29ycmVsYXRpb24gbW9kZWwgcmVzdHMgb24uXG4gICAqXG4gICAqIE9wdGlvbmFsIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5OiBhIGNoZWNrcG9pbnQgcGVyc2lzdGVkIGJlZm9yZSB0aGlzXG4gICAqIGZpZWxkIGV4aXN0ZWQgKG9sZGVyIFJlZGlzL1Bvc3RncmVzIHJvd3MpIHN0aWxsIHZhbGlkYXRlcyBhbmQgcmVzdW1lcyB3aXRoXG4gICAqIHRoZSBwcmV2aW91cyAoY291bnRlci1yZXN0YXJ0aW5nKSBiZWhhdmlvci5cbiAgICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvbkNvdW50PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBQZXItYHN0YWdlSWRgIGxvb3AgdmlzaXQgY291bnRzIGF0IHRoZSBtb21lbnQgb2YgcGF1c2UuIFJlc3VtZSBzZWVkcyB0aGVtXG4gICAqIHNvIGBUcmF2ZXJzYWxDb250ZXh0Lmxvb3BJdGVyYXRpb25gIHN0YXlzIGNvbnRpbnVvdXMgYWNyb3NzIHRoZSBwYXVzZSAoYVxuICAgKiBtaWQtbG9vcCByZXN1bWUga2VlcHMgY291bnRpbmcgdXAsIG5vdCByZXN0YXJ0aW5nIGF0IDApIGFuZCB0aGVcbiAgICogQ29udGludWF0aW9uUmVzb2x2ZXIgaXRlcmF0aW9uIGJ1ZGdldCBpcyBub3Qgc2lsZW50bHkgcmVmaWxsZWQuXG4gICAqXG4gICAqIE9wdGlvbmFsIGZvciB0aGUgc2FtZSBiYWNrd2FyZC1jb21wYXRpYmlsaXR5IHJlYXNvbiBhcyBgZXhlY3V0aW9uQ291bnRgLlxuICAgKi9cbiAgcmVhZG9ubHkgdmlzaXRDb3VudHM/OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBudW1iZXI+PjtcblxuICAvKiogU3RhZ2UgdGhhdCBpbnZva2VkIHRoZSBwYXVzZWQgY2hpbGQgKGRlY2lkZXIsIHNlbGVjdG9yLCBmb3JrKS4gQWJzZW50IGZvciBsaW5lYXIgcGF1c2VzLiAqL1xuICByZWFkb25seSBpbnZva2VyU3RhZ2VJZD86IHN0cmluZztcblxuICAvKipcbiAgICogUGF1c2VzIHJhaXNlZCBieSBQQVJBTExFTCBTSUJMSU5HUyBvZiB0aGUgcGF1c2VkIHN0YWdlIGluIHRoZSBzYW1lXG4gICAqIGZhbi1vdXQsIHdhaXRpbmcgdGhlaXIgdHVybiAoOS4yOC4wKSDigJQgc2VlIHtAbGluayBQZW5kaW5nUGF1c2V9LiBBYnNlbnRcbiAgICogd2hlbiBvbmx5IG9uZSBjaGlsZCBwYXVzZWQgKGV2ZXJ5IGNoZWNrcG9pbnQgYmVmb3JlIDkuMjguMCBvbWl0cyBpdCwgYW5kXG4gICAqIHJlc3VtZXMgZXhhY3RseSBhcyBiZWZvcmUpLiBSZXN1bWluZyB0aGlzIGNoZWNrcG9pbnQgZmluaXNoZXMgdGhlIHBhdXNlZFxuICAgKiBzdGFnZSdzIGNoaWxkLCB0aGVuIHBhdXNlcyBhZ2FpbiB3aXRoIHRoZSBmaXJzdCBvZiB0aGVzZTsgdGhlIGZhbi1vdXQnc1xuICAgKiBqb2luIHJ1bnMgb25jZSBldmVyeSBjaGlsZCBpcyBkb25lLlxuICAgKi9cbiAgcmVhZG9ubHkgcGVuZGluZ1BhdXNlcz86IHJlYWRvbmx5IFBlbmRpbmdQYXVzZVtdO1xuXG4gIC8qKiBUaW1lc3RhbXAgb2Ygd2hlbiB0aGUgcGF1c2Ugb2NjdXJyZWQuICovXG4gIHJlYWRvbmx5IHBhdXNlZEF0OiBudW1iZXI7XG59XG5cbi8vIOKUgOKUgCBQYXVzYWJsZUhhbmRsZXIg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogSGFuZGxlciBmb3IgYSBwYXVzYWJsZSBzdGFnZSDigJQgaGFzIHR3byBwaGFzZXM6IGV4ZWN1dGUgYW5kIHJlc3VtZS5cbiAqXG4gKiBgZXhlY3V0ZWAgcnVucyB0aGUgZmlyc3QgdGltZS4gUmV0dXJuIGFueSBub24tdm9pZCB2YWx1ZSB0byBwYXVzZSAodGhhdCB2YWx1ZVxuICogYmVjb21lcyB0aGUgY2hlY2twb2ludCdzIGBwYXVzZURhdGFgKTsgcmV0dXJuIHZvaWQvdW5kZWZpbmVkIHRvIGNvbnRpbnVlIG5vcm1hbGx5LlxuICogYHJlc3VtZWAgcnVucyB3aGVuIHRoZSBmbG93Y2hhcnQgaXMgcmVzdW1lZC4gSXQgcmVjZWl2ZXMgdGhlIHJlc3VtZSBpbnB1dC5cbiAqXG4gKiBCb3RoIHBoYXNlcyByZWNlaXZlIHRoZSBzYW1lIHNjb3BlLiBBZnRlciBleGVjdXRlIHBhdXNlcywgdGhlIHNjb3BlIHN0YXRlXG4gKiBpcyBwcmVzZXJ2ZWQgaW4gdGhlIGNoZWNrcG9pbnQuIE9uIHJlc3VtZSwgdGhlIHNjb3BlIGlzIHJlc3RvcmVkIGJlZm9yZVxuICogY2FsbGluZyByZXN1bWUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC5hZGRQYXVzYWJsZUZ1bmN0aW9uKCdBcHByb3ZlT3JkZXInLCB7XG4gKiAgIGV4ZWN1dGU6IGFzeW5jIChzY29wZSkgPT4ge1xuICogICAgIHNjb3BlLm9yZGVySWQgPSAnMTIzJztcbiAqICAgICBzY29wZS5hbW91bnQgPSAyOTk7XG4gKiAgICAgcmV0dXJuIHsgcXVlc3Rpb246IGBBcHByb3ZlICQke3Njb3BlLmFtb3VudH0gcmVmdW5kP2AgfTtcbiAqICAgfSxcbiAqICAgcmVzdW1lOiBhc3luYyAoc2NvcGUsIGlucHV0KSA9PiB7XG4gKiAgICAgc2NvcGUuYXBwcm92ZWQgPSBpbnB1dC5hcHByb3ZlZDtcbiAqICAgICBzY29wZS5hcHByb3ZlciA9IGlucHV0LmFwcHJvdmVyO1xuICogICB9LFxuICogfSwgJ2FwcHJvdmUtb3JkZXInLCAnTWFuYWdlciBhcHByb3ZhbCBnYXRlJylcbiAqXG4gKiAvLyBMYXRlciDigJQgcmVzdW1lIHdpdGggaHVtYW4ncyBhbnN3ZXJcbiAqIGF3YWl0IGV4ZWN1dG9yLnJlc3VtZShjaGVja3BvaW50LCB7IGFwcHJvdmVkOiB0cnVlLCBhcHByb3ZlcjogJ0phbmUnIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGF1c2FibGVIYW5kbGVyPFRTY29wZSA9IGFueSwgVElucHV0ID0gdW5rbm93biwgVFBhdXNlRGF0YSA9IHVua25vd24+IHtcbiAgLyoqXG4gICAqIEZpcnN0LXJ1biBwaGFzZS4gUmV0dXJuIGRhdGEgdG8gcGF1c2UsIG9yIHZvaWQvdW5kZWZpbmVkIHRvIGNvbnRpbnVlIG5vcm1hbGx5LlxuICAgKlxuICAgKiBBbnkgbm9uLXZvaWQgcmV0dXJuIHZhbHVlIGJlY29tZXMgdGhlIGBwYXVzZURhdGFgIGluIHRoZSBjaGVja3BvaW50LlxuICAgKiBUaGUgY29uc3VtZXIgZGVmaW5lcyB0aGUgYFRQYXVzZURhdGFgIHR5cGUg4oCUIHRoZSBGRSB1c2VzIGl0IHRvIHJlbmRlclxuICAgKiB0aGUgcmlnaHQgVUkgKGZvcm0gZmllbGRzLCBhcHByb3ZhbCBidXR0b25zLCBldGMuKS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiAvLyBUUGF1c2VEYXRhID0geyBxdWVzdGlvbjogc3RyaW5nOyByaXNrTGV2ZWw6IHN0cmluZyB9XG4gICAqIGNvbnN0IGhhbmRsZXI6IFBhdXNhYmxlSGFuZGxlcjxNeVN0YXRlLCB7IGFwcHJvdmVkOiBib29sZWFuIH0sIHsgcXVlc3Rpb246IHN0cmluZzsgcmlza0xldmVsOiBzdHJpbmcgfT4gPSB7XG4gICAqICAgZXhlY3V0ZTogYXN5bmMgKHNjb3BlKSA9PiB7XG4gICAqICAgICByZXR1cm4geyBxdWVzdGlvbjogYEFwcHJvdmUgb3JkZXIgJHtzY29wZS5vcmRlcklkfT9gLCByaXNrTGV2ZWw6ICdoaWdoJyB9O1xuICAgKiAgIH0sXG4gICAqICAgcmVzdW1lOiBhc3luYyAoc2NvcGUsIGlucHV0KSA9PiB7XG4gICAqICAgICBzY29wZS5hcHByb3ZlZCA9IGlucHV0LmFwcHJvdmVkO1xuICAgKiAgIH0sXG4gICAqIH07XG4gICAqIGBgYFxuICAgKi9cbiAgZXhlY3V0ZTogKHNjb3BlOiBUU2NvcGUpID0+IFByb21pc2U8VFBhdXNlRGF0YSB8IHZvaWQ+IHwgVFBhdXNlRGF0YSB8IHZvaWQ7XG4gIC8qKlxuICAgKiBSZXN1bWUgcGhhc2UuIENhbGxlZCB3aXRoIHRoZSByZXN1bWUgaW5wdXQgd2hlbiBleGVjdXRpb24gY29udGludWVzLlxuICAgKlxuICAgKiBUaGUgc2NvcGUgaXMgcmVzdG9yZWQgZnJvbSB0aGUgY2hlY2twb2ludCdzIGBzaGFyZWRTdGF0ZWAuIFdyaXRlcyBkdXJpbmdcbiAgICogYHJlc3VtZWAgYXJlIGNvbW1pdHRlZCBhbmQgdmlzaWJsZSB0byBzdWJzZXF1ZW50IHN0YWdlcy5cbiAgICovXG4gIHJlc3VtZTogKHNjb3BlOiBUU2NvcGUsIGlucHV0OiBUSW5wdXQpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xufVxuXG4vLyDilIDilIAgVHlwZSBndWFyZCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIENoZWNrIGlmIGEgdmFsdWUgaXMgYSBQYXVzZVJlc3VsdCAoc3RhZ2Ugd2FudHMgdG8gcGF1c2UpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGF1c2VSZXN1bHQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBQYXVzZVJlc3VsdCB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICh2YWx1ZSBhcyBQYXVzZVJlc3VsdCkucGF1c2UgPT09IHRydWU7XG59XG5cbi8qKiBDaGVjayBpZiBhbiBlcnJvciBpcyBhIFBhdXNlU2lnbmFsLiBVc2VzIGluc3RhbmNlb2YgKyBuYW1lIGJyYW5kIGZhbGxiYWNrIGZvciBjcm9zcy1yZWFsbSBzYWZldHkuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQYXVzZVNpZ25hbChlcnJvcjogdW5rbm93bik6IGVycm9yIGlzIFBhdXNlU2lnbmFsIHtcbiAgLy8gVG90YWw6IGEgUHJveHkgd2hvc2UgYGdldFByb3RvdHlwZU9mYCB0cmFwIHRocm93cyAob3IgYSByZXZva2VkIFByb3h5KVxuICAvLyBpcyBub3QgYSBzaWduYWwg4oCUIHRoZSBlbmdpbmUncyBjYXRjaCBibG9ja3MgYXNrIHRoaXMgZmlyc3QsIGFuZCBtdXN0XG4gIC8vIG5vdCB0cmFkZSB0aGUgc3RhZ2UncyB0aHJvd24gdmFsdWUgZm9yIHRoZSB0cmFwJ3MgZXJyb3IuXG4gIHRyeSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGVycm9yIGluc3RhbmNlb2YgUGF1c2VTaWduYWwgfHxcbiAgICAgIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmXG4gICAgICAgIGVycm9yLm5hbWUgPT09ICdQYXVzZVNpZ25hbCcgJiZcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGVycm9yLCAncGF1c2VEYXRhJykgJiZcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGVycm9yLCAnc3RhZ2VJZCcpKVxuICAgICk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIl19
|
|
251
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3BhdXNlL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQkc7OztBQTRCSCw4RUFBOEU7QUFDOUUsU0FBZ0IsaUJBQWlCLENBQUMsS0FBYztJQUM5QyxNQUFNLENBQUMsR0FBRyxLQUF5RSxDQUFDO0lBQ3BGLE9BQU8sQ0FDTCxPQUFPLENBQUMsRUFBRSxLQUFLLEtBQUssUUFBUSxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQUssRUFBRSxJQUFJLE9BQU8sQ0FBQyxDQUFDLGNBQWMsS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLGNBQWMsS0FBSyxFQUFFLENBQ2xILENBQUM7QUFDSixDQUFDO0FBTEQsOENBS0M7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFhLFdBQVksU0FBUSxLQUFLO0lBQ3BDLHVEQUF1RDtJQUM5QyxTQUFTLENBQVU7SUFDNUIsNENBQTRDO0lBQ25DLE9BQU8sQ0FBUztJQUN6Qjs7Ozs7OztPQU9HO0lBQ00sUUFBUSxDQUFlO0lBQ2hDLHlFQUF5RTtJQUNqRSxZQUFZLENBQVc7SUFFL0I7Ozs7Ozs7OztPQVNHO0lBQ0ssZUFBZSxDQUFVO0lBRWpDOzs7Ozs7Ozs7OztPQVdHO0lBQ0ssY0FBYyxHQUE0QyxFQUFFLENBQUM7SUFFckU7Ozs7Ozs7T0FPRztJQUNLLGNBQWMsR0FBMEIsRUFBRSxDQUFDO0lBRW5EOzs7O09BSUc7SUFDSyxnQkFBZ0IsQ0FBOEM7SUFFdEUsWUFBWSxJQUFhLEVBQUUsT0FBZSxFQUFFLFFBQXNCO1FBQ2hFLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxJQUFJLEdBQUcsYUFBYSxDQUFDO1FBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZC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QWxNRCxrQ0FrTUM7QUFpU0QsK0RBQStEO0FBRS9ELGdFQUFnRTtBQUNoRSxTQUFnQixhQUFhLENBQUMsS0FBYztJQUMxQyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFLLEtBQXFCLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQztBQUM5RixDQUFDO0FBRkQsc0NBRUM7QUFFRCx3R0FBd0c7QUFDeEcsU0FBZ0IsYUFBYSxDQUFDLEtBQWM7SUFDMUMseUVBQXlFO0lBQ3pFLHVFQUF1RTtJQUN2RSwyREFBMkQ7SUFDM0QsSUFBSSxDQUFDO1FBQ0gsT0FBTyxDQUNMLEtBQUssWUFBWSxXQUFXO1lBQzVCLENBQUMsS0FBSyxZQUFZLEtBQUs7Z0JBQ3JCLEtBQUssQ0FBQyxJQUFJLEtBQUssYUFBYTtnQkFDNUIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxXQUFXLENBQUM7Z0JBQ3hELE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FDMUQsQ0FBQztJQUNKLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7QUFDSCxDQUFDO0FBZkQsc0NBZUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBhdXNlL1Jlc3VtZSDigJQgc2VyaWFsaXphYmxlIGNoZWNrcG9pbnQgZm9yIGxvbmctcnVubmluZyBvciBodW1hbi1pbi10aGUtbG9vcCBmbG93cy5cbiAqXG4gKiBBIHN0YWdlIHNpZ25hbHMgcGF1c2UgYnkgY2FsbGluZyBgc2NvcGUuJHBhdXNlKGRhdGEpYCB3aGljaCB0aHJvd3MgYSBQYXVzZVNpZ25hbC5cbiAqIFRoZSBzaWduYWwgYnViYmxlcyB1cCB0aHJvdWdoIFN1YmZsb3dFeGVjdXRvciDihpIgRmxvd2NoYXJ0VHJhdmVyc2VyIOKGkiBGbG93Q2hhcnRFeGVjdXRvcixcbiAqIGVhY2ggbGV2ZWwgYWRkaW5nIGl0cyBzdWJmbG93IElEIHRvIHRoZSBwYXRoLlxuICpcbiAqIFRoZSBjaGVja3BvaW50IGNhcHR1cmVzOlxuICogICAtIHBhdXNlZFN0YWdlSWQgKyBzdWJmbG93UGF0aDogdGhlIHBhdXNlZCBzdGFnZSdzIGlkIGFuZCBpdHMgc3ViZmxvdyBwYXRoXG4gKiAgIC0gc2hhcmVkU3RhdGU6IHNjb3BlIGF0IHRoZSBwYXVzZSBwb2ludFxuICogICAtIGV4ZWN1dGlvblRyZWU6IGNvbXBsZXRlZCBzdGFnZXMgZm9yIEJUUy9uYXJyYXRpdmVcbiAqICAgLSBwYXVzZURhdGE6IHF1ZXN0aW9uLCByZWFzb24sIG9yIG1ldGFkYXRhIGZyb20gJHBhdXNlKClcbiAqXG4gKiBSZXN1bWUgcmVidWlsZHMgdGhlIGZsb3djaGFydCwgcmVzdG9yZXMgc2NvcGUsIG5hdmlnYXRlcyB0byB0aGUgcGF1c2VkIHN0YWdlLFxuICogaW5qZWN0cyByZXN1bWVJbnB1dCwgYW5kIGNvbnRpbnVlcyB0cmF2ZXJzYWwuXG4gKlxuICogU3VwcG9ydGVkIHRvcG9sb2dpZXM6IGxpbmVhciwgc3ViZmxvdyAoYXQgYW55IGRlcHRoIOKAlCBtb3VudGVkIGxpbmVhcmx5LCBhcyBhXG4gKiBkZWNpZGVyIG9yIHNlbGVjdG9yIGJyYW5jaCwgb3IgYXMgYSBmb3JrIGNoaWxkKSwgbG9vcCwgbmVzdGVkIHN1YmZsb3cgaW5cbiAqIGxvb3AsIGFuZCBzZXZlcmFsIHBhcmFsbGVsIHNpYmxpbmdzIHBhdXNpbmcgaW4gb25lIGZhbi1vdXQgKGVhY2ggYXNrcyBpblxuICogdHVybiDigJQgYEZsb3djaGFydENoZWNrcG9pbnQucGVuZGluZ1BhdXNlc2ApLlxuICpcbiAqIE5PVCByZXN1bWFibGUgeWV0OiBhIHBhdXNlIGluc2lkZSBhIExBWlkgc3ViZmxvdyAoYGFkZExhenlTdWJGbG93Q2hhcnQqYCkgb3JcbiAqIGluc2lkZSBhbiBgYWRkUGFyYWxsZWxGb3JFYWNoYCBicmFuY2guIFRoZWlyIGdyYXBocyBhcmUgcmVzb2x2ZWQgYXQgcnVuIHRpbWVcbiAqIGFuZCBhcmUgbm90IGluIHRoZSBjaGFydCBhIHJlc3VtZSB3YWxrcywgc28gYHJlc3VtZSgpYCByZWZ1c2VzIHRoZVxuICogY2hlY2twb2ludCAoXCJub3QgZm91bmRcIikgaW5zdGVhZCBvZiBndWVzc2luZy4gUGlubmVkIGluXG4gKiB0ZXN0L2xpYi9wYXVzZS9yZXN1bWUta25vd24tbGltaXRhdGlvbnMudGVzdC50cy5cbiAqL1xuXG4vLyDilIDilIAgUGF1c2VTaWduYWwg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogVGhlIHBhdXNlZCBFWEVDVVRJT04gKDkuMzcuMCk6IHRoZSBydW4gdGhhdCBwYXVzZWQgYW5kIHRoZSBwYXVzZWQgc3RhZ2Unc1xuICogcnVudGltZVN0YWdlSWQgaW4gaXQuIFJlY29yZGVkIG9uIHRoZSBjaGVja3BvaW50IChhbmQgb24gZWFjaCBxdWV1ZWRcbiAqIHNpYmxpbmcncyBwZW5kaW5nIHJlY29yZCkgc28gYSByZXN1bWUgY2FuIExJTksgdG8gaXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGF1c2VkRXhlY3V0aW9uIHtcbiAgcmVhZG9ubHkgcnVuSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcnVudGltZVN0YWdlSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcmVkYWN0aW9uIGEgcGF1c2UgY2FycmllcyB0byB0aGUgcmVzdW1lZCBydW4g4oCUIE5BTUVTIG9ubHksIG5ldmVyIGEgdmFsdWVcbiAqICh0aGUgY2hlY2twb2ludCBzdGF5cyByZWFsKTogdGhlIGtleXMgbWFya2VkIHNlY3JldCBmb3IgdGhlIHJlc3Qgb2YgdGhlIHJ1blxuICogKGEgcGVyLWNhbGwgYHNldFZhbHVlKGtleSwgdmFsdWUsIHRydWUpYCwgYSBrZXkgdGhlIHBvbGljeSByZWRhY3RlZCB3aG9sZSwgYVxuICogc3ViZmxvdyBtYXBwZXIncyB0YWludCkgYW5kIHRoZSBmaWVsZHMgYSBtYXBwZXIgaGFuZGVkIHRvIGEgbmV3IGtleS4gUmVzdW1lXG4gKiBzZWVkcyB0aGUgcmVzdW1lZCBydW4ncyBydWxlIHdpdGggdGhlbSwgc28gYSBjb3B5IG1hZGUgYmVmb3JlIHRoZSBwYXVzZSBpc1xuICogc3RpbGwgbWFza2VkIGFmdGVyIGl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZGFjdGlvbk1hcmtzIHtcbiAgcmVhZG9ubHkga2V5czogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKiBLZXkg4oaSIHRoZSBmaWVsZCBwYXRocyBhIG1hcHBlciBoYW5kZWQgaXQuIEFic2VudCB3aGVuIG5vbmUuICovXG4gIHJlYWRvbmx5IGZpZWxkcz86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHJlYWRvbmx5IHN0cmluZ1tdPj47XG59XG5cbi8qKiBUcnVlIGZvciBhIHdlbGwtZm9ybWVkIHtAbGluayBQYXVzZWRFeGVjdXRpb259ICh0d28gbm9uLWVtcHR5IHN0cmluZ3MpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUGF1c2VkRXhlY3V0aW9uKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUGF1c2VkRXhlY3V0aW9uIHtcbiAgY29uc3QgdiA9IHZhbHVlIGFzIHsgcnVuSWQ/OiB1bmtub3duOyBydW50aW1lU3RhZ2VJZD86IHVua25vd24gfSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHY/LnJ1bklkID09PSAnc3RyaW5nJyAmJiB2LnJ1bklkICE9PSAnJyAmJiB0eXBlb2Ygdi5ydW50aW1lU3RhZ2VJZCA9PT0gJ3N0cmluZycgJiYgdi5ydW50aW1lU3RhZ2VJZCAhPT0gJydcbiAgKTtcbn1cblxuLyoqXG4gKiBUaHJvd24gYnkgYHNjb3BlLiRwYXVzZSgpYCB0byBzaWduYWwgdGhhdCBleGVjdXRpb24gc2hvdWxkIHN0b3BcbiAqIGFuZCBjcmVhdGUgYSBzZXJpYWxpemFibGUgY2hlY2twb2ludC5cbiAqXG4gKiBCdWJibGVzIHVwIHRocm91Z2ggU3ViZmxvd0V4ZWN1dG9yICh3aGljaCBwcmVwZW5kcyBzdWJmbG93IElEIHRvIHBhdGgpXG4gKiBhbmQgaXMgY2F1Z2h0IGJ5IEZsb3djaGFydFRyYXZlcnNlci9GbG93Q2hhcnRFeGVjdXRvci5cbiAqL1xuZXhwb3J0IGNsYXNzIFBhdXNlU2lnbmFsIGV4dGVuZHMgRXJyb3Ige1xuICAvKiogRGF0YSBmcm9tICRwYXVzZSgpIOKAlCBxdWVzdGlvbiwgcmVhc29uLCBtZXRhZGF0YS4gKi9cbiAgcmVhZG9ubHkgcGF1c2VEYXRhOiB1bmtub3duO1xuICAvKiogSUQgb2YgdGhlIHN0YWdlIHRoYXQgY2FsbGVkICRwYXVzZSgpLiAqL1xuICByZWFkb25seSBzdGFnZUlkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBIT1cgdGhlIHBhdXNlIHdhcyByYWlzZWQg4oCUIGAnaW50ZXJydXB0J2Agd2hlbiBhIHN0YWdlIGJvZHkgY2FsbGVkXG4gICAqIGBpbnRlcnJ1cHQoc2NvcGUsIHBheWxvYWQpYCwgYWJzZW50IGZvciB0aGUgYGFkZFBhdXNhYmxlRnVuY3Rpb25gXG4gICAqIGV4ZWN1dGUvcmVzdW1lIHBhdGguIFNldCBhdCB0aGUgc3RhZ2UgYm91bmRhcnkgKGBTdGFnZVJ1bm5lcmApLCBjYXJyaWVkXG4gICAqIG9udG8gdGhlIGNoZWNrcG9pbnQsIGFuZCByZWFkIGJ5IGByZXN1bWUoKWAgdG8gcGljayB0aGUgcmUtZW50cnk6IGFuXG4gICAqIGludGVycnVwdGVkIHN0YWdlIHJlLXJ1bnMgaXRzIE9XTiBmdW5jdGlvbiBmcm9tIHRoZSB0b3AgKHN0YWdlcyBhcmVcbiAgICogYXRvbWljKSwgYSBwYXVzYWJsZSBzdGFnZSBydW5zIGl0cyBgcmVzdW1lRm5gLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF1c2VkQnk/OiAnaW50ZXJydXB0JztcbiAgLyoqIFBhdGggdGhyb3VnaCBzdWJmbG93cyB0byB0aGUgcGF1c2VkIHN0YWdlLiBCdWlsdCBkdXJpbmcgYnViYmxlLXVwLiAqL1xuICBwcml2YXRlIF9zdWJmbG93UGF0aDogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEludm9rZXIgY29udGV4dCDigJQgZW5yaWNoZWQgZHVyaW5nIGJ1YmJsZS11cCB3aGVuIGEgUGF1c2VTaWduYWwgcGFzc2VzXG4gICAqIHRocm91Z2ggYSBkZWNpZGVyLCBzZWxlY3Rvciwgb3IgZm9yayBoYW5kbGVyLlxuICAgKlxuICAgKiBUaGUgaW52b2tlciBpcyB0aGUgc3RhZ2UgdGhhdCBjYWxsZWQgZXhlY3V0ZU5vZGUoKSBvbiB0aGUgcGF1c2VkIGNoaWxkLlxuICAgKiBDYXB0dXJlZCBkdXJpbmcgdHJhdmVyc2FsIChub3QgcmVjb25zdHJ1Y3RlZCBmcm9tIHRoZSB0cmVlKS4gKFRoZVxuICAgKiBpbnZva2VyJ3MgYC5uZXh0YCBpZCByb2RlIGJlc2lkZSBpdCB1bnRpbCA5LjM5LjAgYXNcbiAgICogYGNvbnRpbnVhdGlvblN0YWdlSWRgOyB3aGF0IHJ1bnMgYWZ0ZXIgYSByZXN1bWUgY29tZXMgZnJvbSB0aGUgY2hhcnRcbiAgICogc2luY2UgOS4yOC4wLCBzbyBpdCBpcyBubyBsb25nZXIgY2FycmllZC4pXG4gICAqL1xuICBwcml2YXRlIF9pbnZva2VyU3RhZ2VJZD86IHN0cmluZztcblxuICAvKipcbiAgICogU3ViZmxvdyBzY29wZSBjYXB0dXJlIOKAlCBwb3B1bGF0ZWQgZHVyaW5nIGJ1YmJsZS11cCBieVxuICAgKiBgU3ViZmxvd0V4ZWN1dG9yYCByaWdodCBiZWZvcmUgcmUtdGhyb3cuIEVhY2ggZW50cnkgaXMgb25lXG4gICAqIHN1YmZsb3cncyBwcmUtcGF1c2Ugc2hhcmVkIHN0YXRlLCBrZXllZCBieSB0aGUgcGF0aC1wcmVmaXhlZFxuICAgKiBzdWJmbG93IGlkIChtYXRjaGVzIGBzdWJmbG93UGF0aGApLlxuICAgKlxuICAgKiBXaXRob3V0IHRoaXMsIHRoZSBuZXN0ZWQgYFNoYXJlZE1lbW9yeWAgaXMgZ2FyYmFnZS1jb2xsZWN0ZWRcbiAgICogYmVmb3JlIHRoZSBjaGVja3BvaW50IGlzIGJ1aWx0LiBPbiByZXN1bWUsIHRoZSBpbm5lciBydW50aW1lIGlzXG4gICAqIHJlLWNyZWF0ZWQgZW1wdHkgYW5kIHJlc3VtZSBoYW5kbGVycyByZWFkaW5nIHByZS1wYXVzZSBzY29wZVxuICAgKiAoZS5nLiwgYW4gQWdlbnQncyBgc2NvcGUuaGlzdG9yeWAsIGBzY29wZS5wYXVzZWRUb29sQ2FsbElkYClcbiAgICogY3Jhc2ggd2l0aCBcIlggaXMgbm90IGl0ZXJhYmxlXCIgLyB1bmRlZmluZWQuXG4gICAqL1xuICBwcml2YXRlIF9zdWJmbG93U3RhdGVzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gPSB7fTtcblxuICAvKipcbiAgICogUGF1c2VzIHRoYXQgUEFSQUxMRUwgU0lCTElOR1MgcmFpc2VkIGluIHRoZSBzYW1lIGZhbi1vdXQgYXMgdGhpcyBvbmUsXG4gICAqIHdhaXRpbmcgdGhlaXIgdHVybiAoOS4yOC4wKS4gUmVjb3JkZWQgYnkgYENoaWxkcmVuRXhlY3V0b3JgIHdoZW4gbW9yZVxuICAgKiB0aGFuIG9uZSBjaGlsZCBvZiBhIGZvcmsgKG9yIG1vcmUgdGhhbiBvbmUgc2VsZWN0ZWQgYnJhbmNoKSBwYXVzZXM6IHRoZVxuICAgKiBmaXJzdCBwYXVzZSBpcyB0aGUgb25lIHRoYXQgaXMgYXNrZWQsIHRoZSBvdGhlcnMgcmlkZSBoZXJlIGluc3RlYWQgb2ZcbiAgICogYmVpbmcgZHJvcHBlZC4gRWFjaCBwYXRoIGlzIHJlbGF0aXZlIHRvIHdoZXJlIHRoZSBzaWduYWwgY3VycmVudGx5IGlzXG4gICAqIGFuZCBncm93cyB3aXRoIGl0IOKAlCBgcHJlcGVuZFN1YmZsb3dgIHByZXBlbmRzIHRvIGV2ZXJ5IGVudHJ5IHRvby5cbiAgICovXG4gIHByaXZhdGUgX3BlbmRpbmdQYXVzZXM6IE11dGFibGVQZW5kaW5nUGF1c2VbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBXSElDSCBleGVjdXRpb24gcGF1c2VkIOKAlCBpdHMgcnVudGltZVN0YWdlSWQgc3RhbXBlZCBvbmNlIGF0IHRoZSBzdGFnZVxuICAgKiBib3VuZGFyeSAoYFN0YWdlUnVubmVyYCksIGl0cyBydW4gYWRkZWQgd2hlbiB0aGUgY2hlY2twb2ludCBpcyBidWlsdFxuICAgKiAoYGNvbXBsZXRlRXhlY3V0aW9uYCksIG9yIGJvdGggY2FycmllZCBvdmVyIGZvciBhIHF1ZXVlZCBzaWJsaW5nLlxuICAgKi9cbiAgcHJpdmF0ZSBfcGF1c2VkRXhlY3V0aW9uPzogeyBydW50aW1lU3RhZ2VJZDogc3RyaW5nOyBydW5JZD86IHN0cmluZyB9O1xuXG4gIGNvbnN0cnVjdG9yKGRhdGE6IHVua25vd24sIHN0YWdlSWQ6IHN0cmluZywgcGF1c2VkQnk/OiAnaW50ZXJydXB0Jykge1xuICAgIHN1cGVyKCdFeGVjdXRpb24gcGF1c2VkJyk7XG4gICAgdGhpcy5uYW1lID0gJ1BhdXNlU2lnbmFsJztcbiAgICB0aGlzLnBhdXNlRGF0YSA9IGRhdGE7XG4gICAgdGhpcy5zdGFnZUlkID0gc3RhZ2VJZDtcbiAgICBpZiAocGF1c2VkQnkpIHRoaXMucGF1c2VkQnkgPSBwYXVzZWRCeTtcbiAgICB0aGlzLl9zdWJmbG93UGF0aCA9IFtdO1xuICAgIC8vIFBhdXNlU2lnbmFsIGlzIGNvbnRyb2wgZmxvdywgbm90IGEgcmVhbCBlcnJvciDigJQgc3RhY2sgdHJhY2UgaGFzIG5vIGRpYWdub3N0aWMgdmFsdWUuXG4gICAgdGhpcy5zdGFjayA9ICcnO1xuICB9XG5cbiAgZ2V0IHN1YmZsb3dQYXRoKCk6IHJlYWRvbmx5IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fc3ViZmxvd1BhdGg7XG4gIH1cblxuICAvKiogVGhlIHBhdXNlZCBleGVjdXRpb24gKGl0cyBydW4gYW5kIGBbcGF0aC9dc3RhZ2VJZCNOYCksIG9uY2UgYm90aCBhcmUga25vd24uICovXG4gIGdldCBwYXVzZWRFeGVjdXRpb24oKTogUGF1c2VkRXhlY3V0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBlID0gdGhpcy5fcGF1c2VkRXhlY3V0aW9uO1xuICAgIHJldHVybiBlPy5ydW5JZCAhPT0gdW5kZWZpbmVkID8geyBydW5JZDogZS5ydW5JZCwgcnVudGltZVN0YWdlSWQ6IGUucnVudGltZVN0YWdlSWQgfSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWNvcmQgd2hpY2ggRVhFQ1VUSU9OIHBhdXNlZC4gRmlyc3Qgc3RhbXAgd2luczogdGhlIHNpZ25hbCBidWJibGVzXG4gICAqIHRocm91Z2ggb3V0ZXIgYm91bmRhcmllcyB0aGF0IG11c3Qgbm90IG92ZXJ3cml0ZSBpdC4gVGhlIHN0YWdlIGJvdW5kYXJ5XG4gICAqIGtub3dzIG9ubHkgdGhlIHJ1bnRpbWVTdGFnZUlkOyBhIHF1ZXVlZCBzaWJsaW5nIHJhaXNlZCBhZ2FpbiBvbiByZXN1bWVcbiAgICogY2FycmllcyBib3RoIChpdCBwYXVzZWQgaW4gYW4gRUFSTElFUiBydW4pLlxuICAgKi9cbiAgc3RhbXBFeGVjdXRpb24ocnVudGltZVN0YWdlSWQ6IHN0cmluZywgcnVuSWQ/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcGF1c2VkRXhlY3V0aW9uICE9PSB1bmRlZmluZWQgfHwgIXJ1bnRpbWVTdGFnZUlkKSByZXR1cm47XG4gICAgdGhpcy5fcGF1c2VkRXhlY3V0aW9uID0geyBydW50aW1lU3RhZ2VJZCwgLi4uKHJ1bklkICE9PSB1bmRlZmluZWQgJiYgeyBydW5JZCB9KSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIE5hbWUgdGhlIHJ1biBmb3IgZXZlcnkgcGF1c2Ugb24gdGhpcyBzaWduYWwgdGhhdCBwYXVzZWQgaW4gaXQg4oCUIHRoaXMgb25lXG4gICAqIGFuZCBpdHMgcXVldWVkIHNpYmxpbmdzIHRoYXQgZG8gbm90IGFscmVhZHkgY2FycnkgYSBydW4gKGEgc2libGluZyByYWlzZWRcbiAgICogYWdhaW4gb24gcmVzdW1lIGtlZXBzIHRoZSBydW4gaXQgcGF1c2VkIGluKS4gQ2FsbGVkIG9uY2UsIHdoZW4gdGhlXG4gICAqIGNoZWNrcG9pbnQgaXMgYnVpbHQuXG4gICAqL1xuICBjb21wbGV0ZUV4ZWN1dGlvbihydW5JZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3BhdXNlZEV4ZWN1dGlvbiAmJiB0aGlzLl9wYXVzZWRFeGVjdXRpb24ucnVuSWQgPT09IHVuZGVmaW5lZCkgdGhpcy5fcGF1c2VkRXhlY3V0aW9uLnJ1bklkID0gcnVuSWQ7XG4gICAgZm9yIChjb25zdCBwZW5kaW5nIG9mIHRoaXMuX3BlbmRpbmdQYXVzZXMpIHtcbiAgICAgIGlmIChwZW5kaW5nLnBhdXNlZEV4ZWN1dGlvbiAmJiBwZW5kaW5nLnBhdXNlZEV4ZWN1dGlvbi5ydW5JZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHBlbmRpbmcucGF1c2VkRXhlY3V0aW9uID0geyBydW50aW1lU3RhZ2VJZDogcGVuZGluZy5wYXVzZWRFeGVjdXRpb24ucnVudGltZVN0YWdlSWQsIHJ1bklkIH07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFByZXBlbmQgYSBzdWJmbG93IElEIHRvIHRoZSBwYXRoIChjYWxsZWQgZHVyaW5nIGJ1YmJsZS11cCkuIFRoZSBwZW5kaW5nXG4gICAqIHNpYmxpbmcgcGF1c2VzIHJpZGUgdGhlIHNhbWUgYm91bmRhcnksIHNvIHRoZWlyIHBhdGhzIGdyb3cgd2l0aCBpdC5cbiAgICovXG4gIHByZXBlbmRTdWJmbG93KHN1YmZsb3dJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fc3ViZmxvd1BhdGgudW5zaGlmdChzdWJmbG93SWQpO1xuICAgIGZvciAoY29uc3QgcGVuZGluZyBvZiB0aGlzLl9wZW5kaW5nUGF1c2VzKSBwZW5kaW5nLnN1YmZsb3dQYXRoLnVuc2hpZnQoc3ViZmxvd0lkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBRdWV1ZSBhIHBhcmFsbGVsIHNpYmxpbmcncyBwYXVzZSBiZWhpbmQgdGhpcyBvbmUgKGl0cyBwYXRoIHJlbGF0aXZlIHRvXG4gICAqIHRoaXMgc2lnbmFsJ3MgY3VycmVudCBsZXZlbCkuIENvcGllZCBpbjogdGhlIGVudHJ5IGlzIG93bmVkIGJ5IHRoZVxuICAgKiBzaWduYWwgZnJvbSBoZXJlIG9uLlxuICAgKi9cbiAgYWRkUGVuZGluZ1BhdXNlKHBhdXNlOiBQZW5kaW5nUGF1c2UpOiB2b2lkIHtcbiAgICB0aGlzLl9wZW5kaW5nUGF1c2VzLnB1c2goe1xuICAgICAgcGF1c2VkU3RhZ2VJZDogcGF1c2UucGF1c2VkU3RhZ2VJZCxcbiAgICAgIHN1YmZsb3dQYXRoOiBbLi4ucGF1c2Uuc3ViZmxvd1BhdGhdLFxuICAgICAgc3ViZmxvd1N0YXRlczogeyAuLi5wYXVzZS5zdWJmbG93U3RhdGVzIH0sXG4gICAgICAuLi4ocGF1c2UucGF1c2VEYXRhICE9PSB1bmRlZmluZWQgJiYgeyBwYXVzZURhdGE6IHBhdXNlLnBhdXNlRGF0YSB9KSxcbiAgICAgIC4uLihwYXVzZS5wYXVzZWRCeSAmJiB7IHBhdXNlZEJ5OiBwYXVzZS5wYXVzZWRCeSB9KSxcbiAgICAgIC4uLihwYXVzZS5wYXVzZWRFeGVjdXRpb24gJiZcbiAgICAgICAgdHlwZW9mIHBhdXNlLnBhdXNlZEV4ZWN1dGlvbi5ydW50aW1lU3RhZ2VJZCA9PT0gJ3N0cmluZycgJiYgeyBwYXVzZWRFeGVjdXRpb246IHsgLi4ucGF1c2UucGF1c2VkRXhlY3V0aW9uIH0gfSksXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUGFyYWxsZWwgc2libGluZ3MnIHBhdXNlcyB3YWl0aW5nIGJlaGluZCB0aGlzIG9uZSwgaW4gdGhlIG9yZGVyIHRoZXkgd2lsbFxuICAgKiBiZSBhc2tlZC4gSW4gZmxpZ2h0LCBhIHNpYmxpbmcgdGhhdCBwYXVzZWQgaW4gVEhJUyBydW4gY2FycmllcyBvbmx5IGl0c1xuICAgKiBydW50aW1lU3RhZ2VJZDsgYGNvbXBsZXRlRXhlY3V0aW9uYCAoYXQgY2hlY2twb2ludCBidWlsZCkgYWRkcyB0aGUgcnVuLlxuICAgKi9cbiAgZ2V0IHBlbmRpbmdQYXVzZXMoKTogcmVhZG9ubHkgUGVuZGluZ1BhdXNlW10ge1xuICAgIHJldHVybiB0aGlzLl9wZW5kaW5nUGF1c2VzIGFzIHJlYWRvbmx5IFBlbmRpbmdQYXVzZVtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgcGF1c2UgYXMgYSB7QGxpbmsgUGVuZGluZ1BhdXNlfSDigJQgd2hhdCBgQ2hpbGRyZW5FeGVjdXRvcmAgcXVldWVzXG4gICAqIGJlaGluZCBhIHNpYmxpbmcncyBwYXVzZSB3aGVuIGJvdGggcGF1c2VkIGluIG9uZSBmYW4tb3V0LlxuICAgKi9cbiAgdG9QZW5kaW5nUGF1c2UoKTogUGVuZGluZ1BhdXNlIHtcbiAgICAvLyBJbiBmbGlnaHQgKHNlZSBgcGVuZGluZ1BhdXNlc2ApOiB0aGUgcnVuIGlzIGFkZGVkIGF0IGNoZWNrcG9pbnQgYnVpbGQuXG4gICAgcmV0dXJuIDxQZW5kaW5nUGF1c2U+e1xuICAgICAgcGF1c2VkU3RhZ2VJZDogdGhpcy5zdGFnZUlkLFxuICAgICAgc3ViZmxvd1BhdGg6IFsuLi50aGlzLl9zdWJmbG93UGF0aF0sXG4gICAgICBzdWJmbG93U3RhdGVzOiB7IC4uLnRoaXMuX3N1YmZsb3dTdGF0ZXMgfSxcbiAgICAgIC4uLih0aGlzLnBhdXNlRGF0YSAhPT0gdW5kZWZpbmVkICYmIHsgcGF1c2VEYXRhOiB0aGlzLnBhdXNlRGF0YSB9KSxcbiAgICAgIC4uLih0aGlzLnBhdXNlZEJ5ICYmIHsgcGF1c2VkQnk6IHRoaXMucGF1c2VkQnkgfSksXG4gICAgICAuLi4odGhpcy5fcGF1c2VkRXhlY3V0aW9uICYmIHsgcGF1c2VkRXhlY3V0aW9uOiB7IC4uLnRoaXMuX3BhdXNlZEV4ZWN1dGlvbiB9IH0pLFxuICAgIH07XG4gIH1cblxuICAvKiogVGhlIHN0YWdlIHRoYXQgaW52b2tlZCB0aGUgcGF1c2VkIGNoaWxkIChkZWNpZGVyLCBzZWxlY3RvciwgZm9yaykuICovXG4gIGdldCBpbnZva2VyU3RhZ2VJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9pbnZva2VyU3RhZ2VJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFtcCB0aGUgaW52b2tlciBjb250ZXh0IGR1cmluZyBidWJibGUtdXAuXG4gICAqIENhbGxlZCBieSBkZWNpZGVyL3NlbGVjdG9yL2ZvcmsgaGFuZGxlcnMgd2hlbiBjYXRjaGluZyBhIGNoaWxkJ3MgUGF1c2VTaWduYWwuXG4gICAqIEZpcnN0IGludm9rZXIgd2lucyAoaW5uZXJtb3N0KSDigJQgc3Vic2VxdWVudCBjYWxscyBhcmUgbm8tb3BzLlxuICAgKi9cbiAgc2V0SW52b2tlcihpbnZva2VyU3RhZ2VJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9pbnZva2VyU3RhZ2VJZCkgdGhpcy5faW52b2tlclN0YWdlSWQgPSBpbnZva2VyU3RhZ2VJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXB0dXJlIGEgc3ViZmxvdydzIGlzb2xhdGVkIFNoYXJlZE1lbW9yeSBhdCB0aGUgbW9tZW50IGl0c1xuICAgKiB0cmF2ZXJzYWwgdGhyZXcuIENhbGxlZCBieSBgU3ViZmxvd0V4ZWN1dG9yYCBvbmNlIHBlciBzdWJmbG93XG4gICAqIGJvdW5kYXJ5IG9uIHRoZSBidWJibGUtdXAgcGF0aC4gRWFjaCBjYXB0dXJlIGlzIGtleWVkIGJ5IHRoZVxuICAgKiBwYXRoLXByZWZpeGVkIHN1YmZsb3cgaWQgKHRoZSBzYW1lIGlkIHVzZWQgaW4gYHN1YmZsb3dQYXRoYCkuXG4gICAqXG4gICAqIElubmVybW9zdC1maXJzdDogYSBkZWVwIGBTZXF1ZW5jZShBZ2VudCguLi4pKWAgcGF1c2UgY2FwdHVyZXMgdGhlXG4gICAqIGFnZW50J3Mgc3ViZmxvdyBmaXJzdCwgdGhlbiBpdHMgcGFyZW50J3MsIGFsbCB0aGUgd2F5IHRvIHRoZSByb290XG4gICAqIG1vdW50LiBUaGUgZnVsbCBuZXN0IHN1cnZpdmVzIGludG8gYGNoZWNrcG9pbnQuc3ViZmxvd1N0YXRlc2AuXG4gICAqL1xuICBjYXB0dXJlU3ViZmxvd1Njb3BlKHN1YmZsb3dJZDogc3RyaW5nLCBzdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiB2b2lkIHtcbiAgICAvLyBEZWZlbnNpdmUgc2hhbGxvdyBjbG9uZSBzbyBsYXRlciBtdXRhdGlvbnMgb24gdGhlIHNvdXJjZSBkb24ndFxuICAgIC8vIGJsZWVkIGludG8gdGhlIGNhcHR1cmVkIHNuYXBzaG90LiBEZWVwIGNsb25pbmcgaXMgdGhlIGNvbnN1bWVyJ3NcbiAgICAvLyByZXNwb25zaWJpbGl0eSAodGhlIHJlc3VtZSB0YXJnZXQgbWF5IG5vdCBldmVuIGJlIG9uIHRoaXNcbiAgICAvLyBwcm9jZXNzKTsgU2hhcmVkTWVtb3J5IHZhbHVlcyBhcmUgY29udmVudGlvbmFsbHkgSlNPTi1mcmllbmRseS5cbiAgICB0aGlzLl9zdWJmbG93U3RhdGVzW3N1YmZsb3dJZF0gPSB7IC4uLnN0YXRlIH07XG4gIH1cblxuICAvKiogQ2FwdHVyZWQgc3ViZmxvdyBzY29wZXMgKHJlYWQtb25seSB2aWV3KS4gKi9cbiAgZ2V0IHN1YmZsb3dTdGF0ZXMoKTogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+PiB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YmZsb3dTdGF0ZXM7XG4gIH1cbn1cblxuLy8g4pSA4pSAIFBlbmRpbmdQYXVzZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBBIHBhdXNlIGEgUEFSQUxMRUwgU0lCTElORyBvZiB0aGUgcGF1c2VkIHN0YWdlIHJhaXNlZCBpbiB0aGUgc2FtZSBmYW4tb3V0IOKAlFxuICogdHdvIGNoaWxkcmVuIG9mIG9uZSBmb3JrIChvciB0d28gc2VsZWN0ZWQgYnJhbmNoZXMgb2Ygb25lIHNlbGVjdG9yKSB0aGF0XG4gKiBib3RoIHBhdXNlZCAoOS4yOC4wKS4gT25seSBvbmUgcGF1c2UgaXMgYXNrZWQgYXQgYSB0aW1lOiB0aGUgY2hlY2twb2ludCdzXG4gKiBvd24gKGBwYXVzZWRTdGFnZUlkYCksIHRoZW4gZWFjaCBvZiB0aGVzZSBpbiB0dXJuLCB3aXRoIHRoZSBmYW4tb3V0J3Mgam9pblxuICogcnVubmluZyBvbmx5IG9uY2UgZXZlcnkgY2hpbGQgaXMgZG9uZS5cbiAqXG4gKiBFdmVyeXRoaW5nIG5lZWRlZCB0byByYWlzZSB0aGUgc2libGluZydzIHBhdXNlIGFnYWluIGxhdGVyIFdJVEhPVVQgcmUtcnVubmluZ1xuICogdGhlIHNpYmxpbmc6IGl0cyBzdGFnZSwgaXRzIHBhdGgsIGl0cyBjYXB0dXJlZCBzdWJmbG93IHN0YXRlLCBpdHMgcXVlc3Rpb24uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIEEgZm9yayB3aG9zZSB0d28gY2hpbGRyZW4gYm90aCBhc2s6IHRoZSBmaXJzdCBjaGVja3BvaW50IGFza3MgYzEgYW5kXG4gKiAvLyBjYXJyaWVzIGMyJ3MgcGF1c2U7IHJlc3VtaW5nIGl0IGZpbmlzaGVzIGMxLCB0aGVuIHBhdXNlcyB3aXRoIGMyJ3NcbiAqIC8vIHF1ZXN0aW9uOyByZXN1bWluZyBUSEFUIGZpbmlzaGVzIGMyIGFuZCBydW5zIHRoZSBqb2luLlxuICogY29uc3QgY3AgPSBleGVjdXRvci5nZXRDaGVja3BvaW50KCkhO1xuICogY3AucGF1c2VkU3RhZ2VJZDsgICAgICAgICAgICAgICAgICAvLyAnYzEvYXNrJ1xuICogY3AucGVuZGluZ1BhdXNlcz8uWzBdLnBhdXNlZFN0YWdlSWQ7IC8vICdjMi9hc2snXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQZW5kaW5nUGF1c2Uge1xuICAvKiogVGhlIHNpYmxpbmcncyBwYXVzZWQgc3RhZ2UgKHBhdGgtcHJlZml4ZWQgaWQsIGFzIGBwYXVzZWRTdGFnZUlkYCkuICovXG4gIHJlYWRvbmx5IHBhdXNlZFN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIFBhdGggdGhyb3VnaCBzdWJmbG93cyB0byB0aGUgc2libGluZydzIHBhdXNlZCBzdGFnZSAoYXMgYHN1YmZsb3dQYXRoYCkuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dQYXRoOiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFRoZSBzaWJsaW5nJ3Mgb3duIHN1YmZsb3cgY2FwdHVyZXMg4oCUIHRoZSBzdWJmbG93cyBvbiBJVFMgcGF0aCBiZWxvdyB0aGVcbiAgICogZmFuLW91dC4gVGhlIHN1YmZsb3dzIGFib3ZlIHRoZSBmYW4tb3V0IGFyZSBzaGFyZWQgd2l0aCB0aGUgY2hlY2twb2ludCdzXG4gICAqIG93biBwYXVzZSBhbmQgYXJlIGNhcHR1cmVkIGFnYWluIHdoZW4gdGhpcyBwYXVzZSBpcyByYWlzZWQuXG4gICAqL1xuICByZWFkb25seSBzdWJmbG93U3RhdGVzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG4gIC8qKiBUaGUgc2libGluZydzIHF1ZXN0aW9uIChhcyBgcGF1c2VEYXRhYCkuICovXG4gIHJlYWRvbmx5IHBhdXNlRGF0YT86IHVua25vd247XG4gIC8qKiBIb3cgdGhlIHNpYmxpbmcgcGF1c2VkIChhcyBgcGF1c2VkQnlgKS4gKi9cbiAgcmVhZG9ubHkgcGF1c2VkQnk/OiAnaW50ZXJydXB0JztcbiAgLyoqIFdoaWNoIGV4ZWN1dGlvbiB0aGUgc2libGluZyBwYXVzZWQgaW4gKGFzIGBwYXVzZWRFeGVjdXRpb25gLCA5LjM3LjApIOKAlCBrZXB0IHNvIGl0cyBvd24gcmVzdW1lIGxpbmtzIHRvIGl0LiAqL1xuICByZWFkb25seSBwYXVzZWRFeGVjdXRpb24/OiBQYXVzZWRFeGVjdXRpb247XG59XG5cbi8qKiBBIHBlbmRpbmcgcGF1c2Ugd2hvc2UgcGF0aCBzdGlsbCBncm93cyBhcyBpdHMgc2lnbmFsIGJ1YmJsZXMgdXAgKGludGVybmFsKS4gKi9cbi8qKlxuICogVGhlIHNpZ25hbCdzIG93biBjb3B5IG9mIGEgcGVuZGluZyBwYXVzZS4gSXRzIGBwYXVzZWRFeGVjdXRpb25gIG1heSBzdGlsbFxuICogbGFjayB0aGUgcnVuIChhIHNpYmxpbmcgdGhhdCBwYXVzZWQgaW4gVEhJUyBydW4pIHVudGlsIGBjb21wbGV0ZUV4ZWN1dGlvbmAuXG4gKi9cbnR5cGUgTXV0YWJsZVBlbmRpbmdQYXVzZSA9IE9taXQ8UGVuZGluZ1BhdXNlLCAnc3ViZmxvd1BhdGgnIHwgJ3BhdXNlZEV4ZWN1dGlvbic+ICYge1xuICBzdWJmbG93UGF0aDogc3RyaW5nW107XG4gIHBhdXNlZEV4ZWN1dGlvbj86IHsgcnVudGltZVN0YWdlSWQ6IHN0cmluZzsgcnVuSWQ/OiBzdHJpbmcgfTtcbn07XG5cbi8vIOKUgOKUgCBQYXVzZVJlc3VsdCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBSZXR1cm5lZCBieSBhIHBhdXNhYmxlIHN0YWdlJ3MgZXhlY3V0ZS9yZXN1bWUgZnVuY3Rpb24gdG8gc2lnbmFsIHBhdXNlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBleGVjdXRlOiBhc3luYyAoc2NvcGUpID0+IHtcbiAqICAgc2NvcGUub3JkZXJJZCA9ICcxMjMnO1xuICogICByZXR1cm4geyBwYXVzZTogdHJ1ZSwgZGF0YTogeyBxdWVzdGlvbjogJ0FwcHJvdmUgb3JkZXIgMTIzPycgfSB9O1xuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGF1c2VSZXN1bHQge1xuICByZWFkb25seSBwYXVzZTogdHJ1ZTtcbiAgLyoqIERhdGEgdG8gaW5jbHVkZSBpbiB0aGUgY2hlY2twb2ludCDigJQgcXVlc3Rpb24sIHJlYXNvbiwgbWV0YWRhdGEuICovXG4gIHJlYWRvbmx5IGRhdGE/OiB1bmtub3duO1xufVxuXG4vLyDilIDilIAgRmxvd2NoYXJ0Q2hlY2twb2ludCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBTZXJpYWxpemFibGUgY2hlY2twb2ludCDigJQgZXZlcnl0aGluZyBuZWVkZWQgdG8gcmVzdW1lIGEgcGF1c2VkIGZsb3djaGFydC5cbiAqXG4gKiBKU09OLXNhZmU6IG5vIGZ1bmN0aW9ucywgbm8gY2xhc3MgaW5zdGFuY2VzLCBubyBTREsgY2xpZW50cy5cbiAqIFN0b3JlIGFueXdoZXJlOiBSZWRpcywgUG9zdGdyZXMsIGxvY2FsU3RvcmFnZSwgYSBmaWxlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBTYXZlXG4gKiBjb25zdCBjaGVja3BvaW50ID0gZXhlY3V0b3IuZ2V0Q2hlY2twb2ludCgpOyAvLyBhZnRlciBwYXVzZVxuICogYXdhaXQgcmVkaXMuc2V0KGBzZXNzaW9uOiR7aWR9YCwgSlNPTi5zdHJpbmdpZnkoY2hlY2twb2ludCkpO1xuICpcbiAqIC8vIFJlc3VtZSAoaG91cnMgbGF0ZXIsIHBvc3NpYmx5IGRpZmZlcmVudCBzZXJ2ZXIpXG4gKiBjb25zdCBjaGVja3BvaW50ID0gSlNPTi5wYXJzZShhd2FpdCByZWRpcy5nZXQoYHNlc3Npb246JHtpZH1gKSk7XG4gKiBjb25zdCBleGVjdXRvciA9IG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCk7XG4gKiBhd2FpdCBleGVjdXRvci5yZXN1bWUoY2hlY2twb2ludCwgeyBhcHByb3ZlZDogdHJ1ZSB9KTtcbiAqIGBgYFxuICovXG4vKipcbiAqIFNlcmlhbGl6YWJsZSBjaGVja3BvaW50IOKAlCBldmVyeXRoaW5nIG5lZWRlZCB0byByZXN1bWUgYSBwYXVzZWQgZmxvd2NoYXJ0LlxuICpcbiAqIFRoZSBleGVjdXRpb24gdHJlZSBJUyB0aGUgdHJhdmVyc2VkIHBhdGguIFRoZSBsZWFmIG5vZGUgd2l0aCBzdGF0dXMgJ3BhdXNlZCdcbiAqIElTIHRoZSBjdXJzb3IuIE5vIHNlcGFyYXRlIHBhdGggYXJyYXkgbmVlZGVkIOKAlCB0aGUgdHJlZSBzdHJ1Y3R1cmUgY2FwdHVyZXNcbiAqIHRoZSBmdWxsIG5lc3RpbmcgKGluY2x1ZGluZyBzdWJmbG93cykuXG4gKlxuICogSlNPTi1zYWZlOiBubyBmdW5jdGlvbnMsIG5vIGNsYXNzIGluc3RhbmNlcywgbm8gU0RLIGNsaWVudHMuXG4gKiBTdG9yZSBhbnl3aGVyZTogUmVkaXMsIFBvc3RncmVzLCBsb2NhbFN0b3JhZ2UsIGEgZmlsZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgY2hlY2twb2ludCA9IGV4ZWN1dG9yLmdldENoZWNrcG9pbnQoKTsgLy8gYWZ0ZXIgcGF1c2VcbiAqIGF3YWl0IHJlZGlzLnNldChgc2Vzc2lvbjoke2lkfWAsIEpTT04uc3RyaW5naWZ5KGNoZWNrcG9pbnQpKTtcbiAqXG4gKiAvLyBSZXN1bWUgKGhvdXJzIGxhdGVyLCBwb3NzaWJseSBkaWZmZXJlbnQgc2VydmVyKVxuICogY29uc3QgY2hlY2twb2ludCA9IEpTT04ucGFyc2UoYXdhaXQgcmVkaXMuZ2V0KGBzZXNzaW9uOiR7aWR9YCkpO1xuICogY29uc3QgZXhlY3V0b3IgPSBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQpO1xuICogYXdhaXQgZXhlY3V0b3IucmVzdW1lKGNoZWNrcG9pbnQsIHsgYXBwcm92ZWQ6IHRydWUgfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93Y2hhcnRDaGVja3BvaW50IHtcbiAgLyoqXG4gICAqIFRoZSBjaGVja3BvaW50IEZPUk1BVCAoOS4zOS4wKTogYDFgLiBBYnNlbnQgb24gYSBjaGVja3BvaW50IHdyaXR0ZW5cbiAgICogYmVmb3JlIDkuMzkuMCwgd2hpY2ggYHJlc3VtZSgpYCByZWFkcyB0aHJvdWdoIHRoZSBvbmUgdXBjYXN0ZXJcbiAgICogKGBwYXVzZS9yZWNvcmQudHMgwrcgdXBjYXN0Q2hlY2twb2ludGApIOKAlCBpdCBkcm9wcyB0aGUgbGVnYWN5XG4gICAqIGBjb250aW51YXRpb25TdGFnZUlkYCAoYSByZWNvcmQgbm8gcmVzdW1lIGhhcyByZWFkIHNpbmNlIDkuMjguMCkuIEFcbiAgICogdmVyc2lvbiB0aGlzIHJlbGVhc2UgZG9lcyBub3Qga25vdyBpcyByZWZ1c2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgY2hlY2twb2ludFZlcnNpb24/OiAxO1xuXG4gIC8qKiBTY29wZSBzdGF0ZSBhdCB0aGUgcGF1c2UgcG9pbnQg4oCUIGFsbCBzaGFyZWQgbWVtb3J5IGtleS92YWx1ZXMuICovXG4gIHJlYWRvbmx5IHNoYXJlZFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAvKiogRXhlY3V0aW9uIHRyZWUg4oCUIHRoZSB0cmF2ZXJzZWQgcGF0aC4gVGhlIGxlYWYgd2l0aCBzdGF0dXMgJ3BhdXNlZCcgaXMgdGhlIGN1cnNvci5cbiAgICogIENvbnRhaW5zIHN1YmZsb3cgbmVzdGluZy4gVXNlZCBmb3IgQlRTIHZpc3VhbGl6YXRpb24gYW5kIHRvIGZpbmQgdGhlIHJlc3VtZSBwb2ludC4gKi9cbiAgcmVhZG9ubHkgZXhlY3V0aW9uVHJlZTogdW5rbm93bjtcblxuICAvKiogSUQgb2YgdGhlIHN0YWdlIHRoYXQgcGF1c2VkLiBVc2VkIGJ5IHJlc3VtZSgpIHRvIGZpbmQgdGhlIG5vZGUgaW4gdGhlIGdyYXBoLiAqL1xuICByZWFkb25seSBwYXVzZWRTdGFnZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXVzZWQgRVhFQ1VUSU9OICg5LjM3LjApOiB0aGUgcnVuIHRoYXQgcGF1c2VkIGFuZCB0aGUgcGF1c2VkIHN0YWdlJ3NcbiAgICogcnVudGltZVN0YWdlSWQgaW4gaXQgKHRoZSBpZCBpdHMgYG9uUGF1c2VgIGV2ZW50IGFuZCBpdHMgY29tbWl0IGNhcnJ5KS5cbiAgICogUmVhZCBieSBgcmVzdW1lKClgIGludG8gdGhlIGBvblJlc3VtZWAgZXZlbnQncyBgdHJhdmVyc2FsQ29udGV4dC5yZXN1bWVkRnJvbWBcbiAgICogbGluayDigJQgbmV2ZXIgdXNlZCB0byBwbGFuIHRoZSByZS1lbnRyeS4gQWJzZW50IG9uIGFuIG9sZGVyIGNoZWNrcG9pbnQsXG4gICAqIHdoaWNoIHRoZW4gcmVzdW1lcyB3aXRob3V0IGEgbGluay5cbiAgICovXG4gIHJlYWRvbmx5IHBhdXNlZEV4ZWN1dGlvbj86IFBhdXNlZEV4ZWN1dGlvbjtcblxuICAvKiogUGF0aCB0aHJvdWdoIHN1YmZsb3dzIHRvIHRoZSBwYXVzZWQgc3RhZ2UgKGUuZy4sIFsnc2YtcGF5bWVudCcsICdzZi12YWxpZGF0aW9uJ10pLlxuICAgKiAgRW1wdHkgYXJyYXkgd2hlbiBwYXVzZWQgYXQgdGhlIHRvcCBsZXZlbC4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1BhdGg6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKiBEYXRhIGZyb20gJHBhdXNlKCkg4oCUIHF1ZXN0aW9uLCByZWFzb24sIG1ldGFkYXRhLiAqL1xuICByZWFkb25seSBwYXVzZURhdGE/OiB1bmtub3duO1xuXG4gIC8qKlxuICAgKiBIT1cgdGhlIHBhdXNlIHdhcyByYWlzZWQuIGAnaW50ZXJydXB0J2AgbWVhbnMgYSBzdGFnZSBib2R5IGNhbGxlZFxuICAgKiBgaW50ZXJydXB0KHNjb3BlLCB7IHJlYXNvbiwgZXhwZWN0cz8gfSlgIGFuZCBgcGF1c2VEYXRhYCBJUyB0aGF0IHBheWxvYWQ7XG4gICAqIGFic2VudCBtZWFucyB0aGUgYGFkZFBhdXNhYmxlRnVuY3Rpb25gIGV4ZWN1dGUvcmVzdW1lIHBhdGggKGV2ZXJ5XG4gICAqIGNoZWNrcG9pbnQgd3JpdHRlbiBiZWZvcmUgOS4xNC4wIG9taXRzIGl0LCB3aGljaCBpcyBleGFjdGx5IHJpZ2h0KS5cbiAgICpcbiAgICogYHJlc3VtZSgpYCByZWFkcyB0aGlzIHRvIHBpY2sgdGhlIHJlLWVudHJ5LCBhbmQgdGhlIHR3byBkaWZmZXIgYnkgbGF3OlxuICAgKiBhbiBpbnRlcnJ1cHRlZCBzdGFnZSBSRS1SVU5TIElUUyBPV04gRlVOQ1RJT04gRlJPTSBUSEUgVE9QIChzdGFnZXMgYXJlXG4gICAqIGF0b21pYyDigJQgdGhlIGFuc3dlciBjb21lcyBiYWNrIG91dCBvZiB0aGUgYGludGVycnVwdCgpYCBjYWxsKSwgd2hpbGUgYVxuICAgKiBwYXVzYWJsZSBzdGFnZSBydW5zIGl0cyBzZXBhcmF0ZSBgcmVzdW1lRm5gLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF1c2VkQnk/OiAnaW50ZXJydXB0JztcblxuICAvKiogU3ViZmxvdyByZXN1bHRzIGNvbGxlY3RlZCBiZWZvcmUgdGhlIHBhdXNlLiAqL1xuICByZWFkb25seSBzdWJmbG93UmVzdWx0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8qKlxuICAgKiBTdWJmbG93IHNjb3BlIGNhcHR1cmUg4oCUIG9uZSBlbnRyeSBwZXIgc3ViZmxvdyBib3VuZGFyeSBvbiB0aGUgcGF0aFxuICAgKiB0byB0aGUgcGF1c2VkIHN0YWdlLiBLZXllZCBieSBwYXRoLXByZWZpeGVkIHN1YmZsb3cgaWQgKG1hdGNoZXNcbiAgICogYHN1YmZsb3dQYXRoYCBlbnRyaWVzKS4gRWFjaCB2YWx1ZSBpcyB0aGUgc3ViZmxvdydzIHByZS1wYXVzZVxuICAgKiBzaGFyZWQgc3RhdGUuXG4gICAqXG4gICAqIEFsd2F5cyBwcmVzZW50IChlbXB0eSBge31gIGZvciByb290LWxldmVsIHBhdXNlcyB3aGVyZSBubyBzdWJmbG93c1xuICAgKiB3ZXJlIGVudGVyZWQpLiBPbiByZXN1bWUsIGBTdWJmbG93RXhlY3V0b3JgIHNlZWRzIGVhY2ggbmVzdGVkIHJ1bnRpbWVcbiAgICogb24gdGhlIHBhdGggZnJvbSB0aGlzIG1hcCDigJQgT05DRSwgb24gaXRzIGZpcnN0IGVudHJ5LCBpbiBwbGFjZSBvZiB0aGVcbiAgICogaW5wdXRNYXBwZXIncyB2YWx1ZXMgKHRoZSBtYXBwZXIgc3RpbGwgcnVucywgZm9yIHRoZSBzdGFnZXMnIHJlYWQtb25seVxuICAgKiBhcmdzKSDigJQgc28gcmVzdW1lIGhhbmRsZXJzIHNlZSBwcmUtcGF1c2Ugc2NvcGUgYWNyb3NzIHNhbWUtZXhlY3V0b3IgQU5EXG4gICAqIGNyb3NzLWV4ZWN1dG9yIHJlc3RhcnRzLiBPbmx5IHRoZSBzdWJmbG93cyBPTiBgc3ViZmxvd1BhdGhgIHJlYWQgaXQuXG4gICAqL1xuICByZWFkb25seSBzdWJmbG93U3RhdGVzOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG5cbiAgLyoqXG4gICAqIFRoZSBzaGFyZWQgZXhlY3V0aW9uIGNvdW50ZXIgYXQgdGhlIG1vbWVudCBvZiBwYXVzZSDigJQgdGhlIG51bWJlciBvZiBzdGFnZXNcbiAgICogZXhlY3V0ZWQgc28gZmFyIHRoaXMgcnVuLiBSZXN1bWUgc2VlZHMgaXQgc28gcG9zdC1yZXN1bWUgYHJ1bnRpbWVTdGFnZUlkYHNcbiAgICogKGBzdGFnZUlkI2V4ZWN1dGlvbkluZGV4YCkga2VlcCBjbGltYmluZyBhbmQgbmV2ZXIgY29sbGlkZSB3aXRoIHByZS1wYXVzZVxuICAgKiBvbmVzLCB3aGljaCBpcyB3aGF0IHRoZSB3aG9sZSBldmVudC1jb3JyZWxhdGlvbiBtb2RlbCByZXN0cyBvbi5cbiAgICpcbiAgICogT3B0aW9uYWwgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6IGEgY2hlY2twb2ludCBwZXJzaXN0ZWQgYmVmb3JlIHRoaXNcbiAgICogZmllbGQgZXhpc3RlZCAob2xkZXIgUmVkaXMvUG9zdGdyZXMgcm93cykgc3RpbGwgdmFsaWRhdGVzIGFuZCByZXN1bWVzIHdpdGhcbiAgICogdGhlIHByZXZpb3VzIChjb3VudGVyLXJlc3RhcnRpbmcpIGJlaGF2aW9yLlxuICAgKi9cbiAgcmVhZG9ubHkgZXhlY3V0aW9uQ291bnQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFBlci1gc3RhZ2VJZGAgbG9vcCB2aXNpdCBjb3VudHMgYXQgdGhlIG1vbWVudCBvZiBwYXVzZS4gUmVzdW1lIHNlZWRzIHRoZW1cbiAgICogc28gYFRyYXZlcnNhbENvbnRleHQubG9vcEl0ZXJhdGlvbmAgc3RheXMgY29udGludW91cyBhY3Jvc3MgdGhlIHBhdXNlIChhXG4gICAqIG1pZC1sb29wIHJlc3VtZSBrZWVwcyBjb3VudGluZyB1cCwgbm90IHJlc3RhcnRpbmcgYXQgMCkgYW5kIHRoZVxuICAgKiBDb250aW51YXRpb25SZXNvbHZlciBpdGVyYXRpb24gYnVkZ2V0IGlzIG5vdCBzaWxlbnRseSByZWZpbGxlZC5cbiAgICpcbiAgICogT3B0aW9uYWwgZm9yIHRoZSBzYW1lIGJhY2t3YXJkLWNvbXBhdGliaWxpdHkgcmVhc29uIGFzIGBleGVjdXRpb25Db3VudGAuXG4gICAqL1xuICByZWFkb25seSB2aXNpdENvdW50cz86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIG51bWJlcj4+O1xuXG4gIC8qKiBTdGFnZSB0aGF0IGludm9rZWQgdGhlIHBhdXNlZCBjaGlsZCAoZGVjaWRlciwgc2VsZWN0b3IsIGZvcmspLiBBYnNlbnQgZm9yIGxpbmVhciBwYXVzZXMuICovXG4gIHJlYWRvbmx5IGludm9rZXJTdGFnZUlkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXVzZXMgcmFpc2VkIGJ5IFBBUkFMTEVMIFNJQkxJTkdTIG9mIHRoZSBwYXVzZWQgc3RhZ2UgaW4gdGhlIHNhbWVcbiAgICogZmFuLW91dCwgd2FpdGluZyB0aGVpciB0dXJuICg5LjI4LjApIOKAlCBzZWUge0BsaW5rIFBlbmRpbmdQYXVzZX0uIEFic2VudFxuICAgKiB3aGVuIG9ubHkgb25lIGNoaWxkIHBhdXNlZCAoZXZlcnkgY2hlY2twb2ludCBiZWZvcmUgOS4yOC4wIG9taXRzIGl0LCBhbmRcbiAgICogcmVzdW1lcyBleGFjdGx5IGFzIGJlZm9yZSkuIFJlc3VtaW5nIHRoaXMgY2hlY2twb2ludCBmaW5pc2hlcyB0aGUgcGF1c2VkXG4gICAqIHN0YWdlJ3MgY2hpbGQsIHRoZW4gcGF1c2VzIGFnYWluIHdpdGggdGhlIGZpcnN0IG9mIHRoZXNlOyB0aGUgZmFuLW91dCdzXG4gICAqIGpvaW4gcnVucyBvbmNlIGV2ZXJ5IGNoaWxkIGlzIGRvbmUuXG4gICAqL1xuICByZWFkb25seSBwZW5kaW5nUGF1c2VzPzogcmVhZG9ubHkgUGVuZGluZ1BhdXNlW107XG5cbiAgLyoqXG4gICAqIFRoZSByZWRhY3Rpb24gbWFya3Mgb2YgdGhlIHBhdXNlZCBydW4g4oCUIE5BTUVTIG9ubHkgKHNlZVxuICAgKiB7QGxpbmsgUmVkYWN0aW9uTWFya3N9KS4gQWJzZW50IHdoZW4gdGhlIHJ1biBtYXJrZWQgbm90aGluZyAobm8gcG9saWN5XG4gICAqIGFuZCBubyBwZXItY2FsbCBtYXJrLCBvciBhbiBvbGRlciBjaGVja3BvaW50KTogdGhlIHJlc3VtZWQgcnVuIHRoZW4gc3RhcnRzXG4gICAqIGZyb20gaXRzIHBvbGljeSBhbG9uZS5cbiAgICovXG4gIHJlYWRvbmx5IHJlZGFjdGlvbk1hcmtzPzogUmVkYWN0aW9uTWFya3M7XG5cbiAgLyoqIFRpbWVzdGFtcCBvZiB3aGVuIHRoZSBwYXVzZSBvY2N1cnJlZC4gKi9cbiAgcmVhZG9ubHkgcGF1c2VkQXQ6IG51bWJlcjtcbn1cblxuLy8g4pSA4pSAIFBhdXNhYmxlSGFuZGxlciDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBIYW5kbGVyIGZvciBhIHBhdXNhYmxlIHN0YWdlIOKAlCBoYXMgdHdvIHBoYXNlczogZXhlY3V0ZSBhbmQgcmVzdW1lLlxuICpcbiAqIGBleGVjdXRlYCBydW5zIHRoZSBmaXJzdCB0aW1lLiBSZXR1cm4gYW55IG5vbi12b2lkIHZhbHVlIHRvIHBhdXNlICh0aGF0IHZhbHVlXG4gKiBiZWNvbWVzIHRoZSBjaGVja3BvaW50J3MgYHBhdXNlRGF0YWApOyByZXR1cm4gdm9pZC91bmRlZmluZWQgdG8gY29udGludWUgbm9ybWFsbHkuXG4gKiBgcmVzdW1lYCBydW5zIHdoZW4gdGhlIGZsb3djaGFydCBpcyByZXN1bWVkLiBJdCByZWNlaXZlcyB0aGUgcmVzdW1lIGlucHV0LlxuICpcbiAqIEJvdGggcGhhc2VzIHJlY2VpdmUgdGhlIHNhbWUgc2NvcGUuIEFmdGVyIGV4ZWN1dGUgcGF1c2VzLCB0aGUgc2NvcGUgc3RhdGVcbiAqIGlzIHByZXNlcnZlZCBpbiB0aGUgY2hlY2twb2ludC4gT24gcmVzdW1lLCB0aGUgc2NvcGUgaXMgcmVzdG9yZWQgYmVmb3JlXG4gKiBjYWxsaW5nIHJlc3VtZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLmFkZFBhdXNhYmxlRnVuY3Rpb24oJ0FwcHJvdmVPcmRlcicsIHtcbiAqICAgZXhlY3V0ZTogYXN5bmMgKHNjb3BlKSA9PiB7XG4gKiAgICAgc2NvcGUub3JkZXJJZCA9ICcxMjMnO1xuICogICAgIHNjb3BlLmFtb3VudCA9IDI5OTtcbiAqICAgICByZXR1cm4geyBxdWVzdGlvbjogYEFwcHJvdmUgJCR7c2NvcGUuYW1vdW50fSByZWZ1bmQ/YCB9O1xuICogICB9LFxuICogICByZXN1bWU6IGFzeW5jIChzY29wZSwgaW5wdXQpID0+IHtcbiAqICAgICBzY29wZS5hcHByb3ZlZCA9IGlucHV0LmFwcHJvdmVkO1xuICogICAgIHNjb3BlLmFwcHJvdmVyID0gaW5wdXQuYXBwcm92ZXI7XG4gKiAgIH0sXG4gKiB9LCAnYXBwcm92ZS1vcmRlcicsICdNYW5hZ2VyIGFwcHJvdmFsIGdhdGUnKVxuICpcbiAqIC8vIExhdGVyIOKAlCByZXN1bWUgd2l0aCBodW1hbidzIGFuc3dlclxuICogYXdhaXQgZXhlY3V0b3IucmVzdW1lKGNoZWNrcG9pbnQsIHsgYXBwcm92ZWQ6IHRydWUsIGFwcHJvdmVyOiAnSmFuZScgfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXVzYWJsZUhhbmRsZXI8VFNjb3BlID0gYW55LCBUSW5wdXQgPSB1bmtub3duLCBUUGF1c2VEYXRhID0gdW5rbm93bj4ge1xuICAvKipcbiAgICogRmlyc3QtcnVuIHBoYXNlLiBSZXR1cm4gZGF0YSB0byBwYXVzZSwgb3Igdm9pZC91bmRlZmluZWQgdG8gY29udGludWUgbm9ybWFsbHkuXG4gICAqXG4gICAqIEFueSBub24tdm9pZCByZXR1cm4gdmFsdWUgYmVjb21lcyB0aGUgYHBhdXNlRGF0YWAgaW4gdGhlIGNoZWNrcG9pbnQuXG4gICAqIFRoZSBjb25zdW1lciBkZWZpbmVzIHRoZSBgVFBhdXNlRGF0YWAgdHlwZSDigJQgdGhlIEZFIHVzZXMgaXQgdG8gcmVuZGVyXG4gICAqIHRoZSByaWdodCBVSSAoZm9ybSBmaWVsZHMsIGFwcHJvdmFsIGJ1dHRvbnMsIGV0Yy4pLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIFRQYXVzZURhdGEgPSB7IHF1ZXN0aW9uOiBzdHJpbmc7IHJpc2tMZXZlbDogc3RyaW5nIH1cbiAgICogY29uc3QgaGFuZGxlcjogUGF1c2FibGVIYW5kbGVyPE15U3RhdGUsIHsgYXBwcm92ZWQ6IGJvb2xlYW4gfSwgeyBxdWVzdGlvbjogc3RyaW5nOyByaXNrTGV2ZWw6IHN0cmluZyB9PiA9IHtcbiAgICogICBleGVjdXRlOiBhc3luYyAoc2NvcGUpID0+IHtcbiAgICogICAgIHJldHVybiB7IHF1ZXN0aW9uOiBgQXBwcm92ZSBvcmRlciAke3Njb3BlLm9yZGVySWR9P2AsIHJpc2tMZXZlbDogJ2hpZ2gnIH07XG4gICAqICAgfSxcbiAgICogICByZXN1bWU6IGFzeW5jIChzY29wZSwgaW5wdXQpID0+IHtcbiAgICogICAgIHNjb3BlLmFwcHJvdmVkID0gaW5wdXQuYXBwcm92ZWQ7XG4gICAqICAgfSxcbiAgICogfTtcbiAgICogYGBgXG4gICAqL1xuICBleGVjdXRlOiAoc2NvcGU6IFRTY29wZSkgPT4gUHJvbWlzZTxUUGF1c2VEYXRhIHwgdm9pZD4gfCBUUGF1c2VEYXRhIHwgdm9pZDtcbiAgLyoqXG4gICAqIFJlc3VtZSBwaGFzZS4gQ2FsbGVkIHdpdGggdGhlIHJlc3VtZSBpbnB1dCB3aGVuIGV4ZWN1dGlvbiBjb250aW51ZXMuXG4gICAqXG4gICAqIFRoZSBzY29wZSBpcyByZXN0b3JlZCBmcm9tIHRoZSBjaGVja3BvaW50J3MgYHNoYXJlZFN0YXRlYC4gV3JpdGVzIGR1cmluZ1xuICAgKiBgcmVzdW1lYCBhcmUgY29tbWl0dGVkIGFuZCB2aXNpYmxlIHRvIHN1YnNlcXVlbnQgc3RhZ2VzLlxuICAgKi9cbiAgcmVzdW1lOiAoc2NvcGU6IFRTY29wZSwgaW5wdXQ6IFRJbnB1dCkgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG59XG5cbi8vIOKUgOKUgCBUeXBlIGd1YXJkIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogQ2hlY2sgaWYgYSB2YWx1ZSBpcyBhIFBhdXNlUmVzdWx0IChzdGFnZSB3YW50cyB0byBwYXVzZSkuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQYXVzZVJlc3VsdCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFBhdXNlUmVzdWx0IHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgKHZhbHVlIGFzIFBhdXNlUmVzdWx0KS5wYXVzZSA9PT0gdHJ1ZTtcbn1cblxuLyoqIENoZWNrIGlmIGFuIGVycm9yIGlzIGEgUGF1c2VTaWduYWwuIFVzZXMgaW5zdGFuY2VvZiArIG5hbWUgYnJhbmQgZmFsbGJhY2sgZm9yIGNyb3NzLXJlYWxtIHNhZmV0eS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BhdXNlU2lnbmFsKGVycm9yOiB1bmtub3duKTogZXJyb3IgaXMgUGF1c2VTaWduYWwge1xuICAvLyBUb3RhbDogYSBQcm94eSB3aG9zZSBgZ2V0UHJvdG90eXBlT2ZgIHRyYXAgdGhyb3dzIChvciBhIHJldm9rZWQgUHJveHkpXG4gIC8vIGlzIG5vdCBhIHNpZ25hbCDigJQgdGhlIGVuZ2luZSdzIGNhdGNoIGJsb2NrcyBhc2sgdGhpcyBmaXJzdCwgYW5kIG11c3RcbiAgLy8gbm90IHRyYWRlIHRoZSBzdGFnZSdzIHRocm93biB2YWx1ZSBmb3IgdGhlIHRyYXAncyBlcnJvci5cbiAgdHJ5IHtcbiAgICByZXR1cm4gKFxuICAgICAgZXJyb3IgaW5zdGFuY2VvZiBQYXVzZVNpZ25hbCB8fFxuICAgICAgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiZcbiAgICAgICAgZXJyb3IubmFtZSA9PT0gJ1BhdXNlU2lnbmFsJyAmJlxuICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXJyb3IsICdwYXVzZURhdGEnKSAmJlxuICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXJyb3IsICdzdGFnZUlkJykpXG4gICAgKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXX0=
|