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
|
@@ -41,9 +41,8 @@ export interface SerializedPipelineStructure {
|
|
|
41
41
|
/**
|
|
42
42
|
* Nested pipeline structure for a subflow node.
|
|
43
43
|
* WARNING: Any future walker that traverses this field recursively must apply its own
|
|
44
|
-
* depth
|
|
45
|
-
*
|
|
46
|
-
* guard must cover both the `next` chain and this nested structure.
|
|
44
|
+
* depth and cycle guards across both the `next` chain and this nested structure.
|
|
45
|
+
* Chart OpenAPI generation reads the builder-prepared description, not this graph.
|
|
47
46
|
*/
|
|
48
47
|
subflowStructure?: SerializedPipelineStructure;
|
|
49
48
|
iterationCount?: number;
|
|
@@ -9,4 +9,4 @@
|
|
|
9
9
|
* The builder remains standalone at runtime.
|
|
10
10
|
*/
|
|
11
11
|
export { ArrayMergeMode } from '../engine/types.js';
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2J1aWxkZXIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7OztHQVNHO0FBd0JILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogYnVpbGRlci90eXBlcy50cyDigJQgQWxsIHR5cGVzIHVzZWQgYnkgdGhlIGJ1aWxkZXIgbGlicmFyeS5cbiAqXG4gKiBTaGFyZWQgdHlwZXMgKFN0YWdlTm9kZSwgU3RhZ2VGdW5jdGlvbiwgZXRjLikgYXJlIGltcG9ydGVkIGZyb20gdGhlIGVuZ2luZS5cbiAqIEJ1aWxkZXItc3BlY2lmaWMgdHlwZXMgKEZsb3dDaGFydFNwZWMsIEZsb3dDaGFydCwgU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlKVxuICogYXJlIGRlZmluZWQgbG9jYWxseSDigJQgdGhleSBjYXJyeSBidWlsZGVyLW9ubHkgZmllbGRzIChkZXNjcmlwdGlvbiwgb3V0cHV0TWFwcGVyLCBldGMuKS5cbiAqXG4gKiBOT1RFOiBBbGwgZW5naW5lIGltcG9ydHMgYXJlIGBpbXBvcnQgdHlwZWAg4oCUIHplcm8gcnVudGltZSBkZXBlbmRlbmN5LlxuICogVGhlIGJ1aWxkZXIgcmVtYWlucyBzdGFuZGFsb25lIGF0IHJ1bnRpbWUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBTdGFnZU5vZGUgfSBmcm9tICcuLi9lbmdpbmUvZ3JhcGgvU3RhZ2VOb2RlLmpzJztcbmltcG9ydCB0eXBlIHsgSUxvZ2dlciwgUmV0cnlQb2xpY3ksIFNjb3BlRmFjdG9yeSwgU3RhZ2VGdW5jdGlvbiB9IGZyb20gJy4uL2VuZ2luZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFNjb3BlUHJvdGVjdGlvbk1vZGUgfSBmcm9tICcuLi9zY29wZS9wcm90ZWN0aW9uL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgU3RydWN0dXJlUmVjb3JkZXIgfSBmcm9tICcuL3N0cnVjdHVyZS9TdHJ1Y3R1cmVSZWNvcmRlci5qcyc7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gUmUtZXhwb3J0cyBmcm9tIGVuZ2luZSAoY2Fub25pY2FsIGRlZmluaXRpb25zKVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIHsgUmVzdW1lRm4sIFN0YWdlTm9kZSB9IGZyb20gJy4uL2VuZ2luZS9ncmFwaC9TdGFnZU5vZGUuanMnO1xuZXhwb3J0IHR5cGUge1xuICBCcmFuY2hDaGFydCxcbiAgSUxvZ2dlcixcbiAgUGFyYWxsZWxGb3JFYWNoQ29uZmlnLFxuICBSZXRyeVBvbGljeSxcbiAgU3RhZ2VGdW5jdGlvbixcbiAgU3RyZWFtQ2FsbGJhY2ssXG4gIFN0cmVhbUhhbmRsZXJzLFxuICBTdHJlYW1MaWZlY3ljbGVIYW5kbGVyLFxuICBTdHJlYW1Ub2tlbkhhbmRsZXIsXG4gIFN1YmZsb3dNb3VudE9wdGlvbnMsXG59IGZyb20gJy4uL2VuZ2luZS90eXBlcy5qcyc7XG5leHBvcnQgeyBBcnJheU1lcmdlTW9kZSB9IGZyb20gJy4uL2VuZ2luZS90eXBlcy5qcyc7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gQWxpYXNlc1xuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKiBSZWxheGVkLWdlbmVyaWMgYWxpYXMgZm9yIGJ1aWxkZXIgZXJnb25vbWljcy4gKi9cbmV4cG9ydCB0eXBlIFN0YWdlRm4gPSBTdGFnZUZ1bmN0aW9uPGFueSwgYW55PjtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTY29wZSBQcm90ZWN0aW9uIOKAlCBjYW5vbmljYWwgZGVmaW5pdGlvbiBpbiBzY29wZS9wcm90ZWN0aW9uL3R5cGVzLnRzXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IHR5cGUgeyBTY29wZVByb3RlY3Rpb25Nb2RlIH07XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU2VyaWFsaXplZCBQaXBlbGluZSBTdHJ1Y3R1cmUgKEpTT04tc2FmZSwgZm9yIHZpc3VhbGl6YXRpb24pXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGludGVyZmFjZSBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUge1xuICBuYW1lOiBzdHJpbmc7XG4gIGlkOiBzdHJpbmc7XG4gIHR5cGU6ICdzdGFnZScgfCAnZGVjaWRlcicgfCAnc2VsZWN0b3InIHwgJ2ZvcmsnIHwgJ3N0cmVhbWluZycgfCAnc3ViZmxvdycgfCAnbG9vcCc7XG4gIC8qKiBTZW1hbnRpYyBpY29uIGhpbnQgZm9yIHZpc3VhbGl6YXRpb24gKGUuZy4sIFwibGxtXCIsIFwidG9vbFwiLCBcInJhZ1wiLCBcImFnZW50XCIsIFwic3RhcnRcIikgKi9cbiAgaWNvbj86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlW107XG4gIG5leHQ/OiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmU7XG4gIGhhc0RlY2lkZXI/OiBib29sZWFuO1xuICBoYXNTZWxlY3Rvcj86IGJvb2xlYW47XG4gIGJyYW5jaElkcz86IHN0cmluZ1tdO1xuICBsb29wVGFyZ2V0Pzogc3RyaW5nO1xuICBpc1N0cmVhbWluZz86IGJvb2xlYW47XG4gIHN0cmVhbUlkPzogc3RyaW5nO1xuICBpc1BhcmFsbGVsQ2hpbGQ/OiBib29sZWFuO1xuICBwYXJhbGxlbEdyb3VwSWQ/OiBzdHJpbmc7XG4gIGlzU3ViZmxvd1Jvb3Q/OiBib29sZWFuO1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIHN1YmZsb3dOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogTmVzdGVkIHBpcGVsaW5lIHN0cnVjdHVyZSBmb3IgYSBzdWJmbG93IG5vZGUuXG4gICAqIFdBUk5JTkc6IEFueSBmdXR1cmUgd2Fsa2VyIHRoYXQgdHJhdmVyc2VzIHRoaXMgZmllbGQgcmVjdXJzaXZlbHkgbXVzdCBhcHBseSBpdHMgb3duXG4gICAqIGRlcHRoIGd1YXJkIChzZWUgTUFYX1dBTEtfREVQVEggaW4gY29udHJhY3Qvb3BlbmFwaS50cykuIFRoZSBjdXJyZW50IGBidWlsZERlc2NyaXB0aW9uYFxuICAgKiB3YWxrIGluIG9wZW5hcGkudHMgZG9lcyBOT1QgdHJhdmVyc2Ugc3ViZmxvd1N0cnVjdHVyZSDigJQgaWYgaXQgZXZlciBkb2VzLCB0aGUgZGVwdGhcbiAgICogZ3VhcmQgbXVzdCBjb3ZlciBib3RoIHRoZSBgbmV4dGAgY2hhaW4gYW5kIHRoaXMgbmVzdGVkIHN0cnVjdHVyZS5cbiAgICovXG4gIHN1YmZsb3dTdHJ1Y3R1cmU/OiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmU7XG4gIGl0ZXJhdGlvbkNvdW50PzogbnVtYmVyO1xuICAvKiogVHJ1ZSB3aGVuIHRoaXMgc3ViZmxvdyB1c2VzIGxhenkgcmVzb2x1dGlvbiAoZGVmZXJyZWQgdW50aWwgZXhlY3V0aW9uKS4gKi9cbiAgaXNMYXp5PzogYm9vbGVhbjtcbiAgLyoqIFRydWUgd2hlbiB0aGlzIG5vZGUgaXMgYSBiYWNrLWVkZ2UgcmVmZXJlbmNlIGNyZWF0ZWQgYnkgbG9vcFRvKCkg4oCUIG5vdCBhbiBleGVjdXRhYmxlIHN0YWdlLiAqL1xuICBpc0xvb3BSZWZlcmVuY2U/OiBib29sZWFuO1xuICAvKiogV2hlbiB0cnVlLCB0aGlzIHN0YWdlIGNhbiBwYXVzZSBleGVjdXRpb24gKFBhdXNhYmxlSGFuZGxlciBwYXR0ZXJuKS4gKi9cbiAgaXNQYXVzYWJsZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBUcnVlIGZvciBhbiBgYWRkUGFyYWxsZWxGb3JFYWNoYCBmYW4tb3V0IOKAlCBvbmUgYnJhbmNoIHBlciBpdGVtLCBjb3VudFxuICAgKiBkZWNpZGVkIGF0IHJ1bnRpbWUuIEEgZmxhZywgbm90IGEgdHlwZTogYHR5cGVgIHN0YXlzIGAnZm9yaydgIHNvIGV4aXN0aW5nXG4gICAqIGNvbnN1bWVycyBrZWVwIHJlbmRlcmluZyBpdCBhcyB0aGUgZmFuLW91dCBpdCBpcy5cbiAgICovXG4gIGlzRHluYW1pY1BhcmFsbGVsPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRvdGFsIGF0dGVtcHRzIHRoaXMgc3RhZ2UncyBmdW5jdGlvbiBtYXkgcnVuLCBmcm9tIGl0cyBkZWNsYXJlZFxuICAgKiB7QGxpbmsgUmV0cnlQb2xpY3l9LiBQcmVzZW50IG9ubHkgd2hlbiBhIHBvbGljeSB3YXMgZGVjbGFyZWQg4oCUIHRoZSBDT1VOVFxuICAgKiBvbmx5LCBiZWNhdXNlIGBiYWNrb2ZmTXNgIGFuZCBgcmV0cnlPbmAgY2FuIGJlIGZ1bmN0aW9ucyBhbmQgYSBKU09OLXNhZmVcbiAgICogc3BlYyBjYW5ub3QgY2FycnkgdGhvc2UuXG4gICAqXG4gICAqIFJlYWQgaXQgZnJvbSB0aGUgQlVJTFQgc3BlYyAoYGNoYXJ0LmJ1aWxkVGltZVN0cnVjdHVyZWAgLyBgdG9TcGVjKClgKSwgbm90XG4gICAqIGZyb20gYSBgU3RydWN0dXJlUmVjb3JkZXIub25TdGFnZUFkZGVkYCBldmVudDogdGhlIGAucmV0cnkoKWAgbW9kaWZpZXIgaXNcbiAgICogY2hhaW5lZCBBRlRFUiB0aGUgc3RhZ2UgaXMgYWRkZWQsIHNvIHRoZSBldmVudCBmaXJlcyBmaXJzdC4gVGhhdCBpcyB3aHlcbiAgICogdGhlcmUgaXMgbm8gYHJldHJ5QXR0ZW1wdHNgIGRpc2NyaW1pbmF0b3Igb24gdGhlIGV2ZW50IHBheWxvYWQg4oCUIGl0IHdvdWxkXG4gICAqIGJlIGB1bmRlZmluZWRgIGF0IGZpcmUgdGltZSBmb3IgZXhhY3RseSB0aGUgc3RhZ2VzIHRoYXQgaGF2ZSBhIHBvbGljeS5cbiAgICovXG4gIHJldHJ5QXR0ZW1wdHM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBEZWNsYXJlZCB0YWdzICg5LjIxLjApIOKAlCB0aGUgTkFNRVMgdGhlIGF1dGhvciBwdXQgb24gdGhpcyBzdGFnZSBhdCBidWlsZFxuICAgKiB0aW1lLCBjb3BpZWQgYXMtaXMgKEpTT04tc2FmZSwgZnJlZSBzdHJpbmdzOyBmb290cHJpbnRqcyBvd25zIG5vXG4gICAqIHZvY2FidWxhcnkpLiBUaGUgTWFwIGFkdmVydGlzZXMgd2hhdCBhIGNoYXJ0IENBTiBwcm9kdWNlOyB0aGUgY29tbWl0XG4gICAqIGJ1bmRsZSAoYENvbW1pdEJ1bmRsZS50YWdzYCkgcmVjb3JkcyB3aGljaCBhIHJ1biBESUQgaGl0LiBBYnNlbnQgd2hlbiB0aGVcbiAgICogc3RhZ2UgZGVjbGFyZXMgbm9uZS4gU2FtZSByZWFkLWl0LWZyb20tdGhlLWJ1aWx0LXNwZWMgY2F2ZWF0IGFzXG4gICAqIGByZXRyeUF0dGVtcHRzYDogYC50YWcoKWAgaXMgY2hhaW5lZCBBRlRFUiBgb25TdGFnZUFkZGVkYCBmaXJlcy5cbiAgICovXG4gIHRhZ3M/OiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFNUUlVDVFVSRS1PTkxZOiBmb3IgYSBmb3JrL3NlbGVjdG9yL2RlY2lkZXIgYnJhbmNoLCB0aGUgZG93bnN0cmVhbSBzdGFnZVxuICAgKiBpZCBpdHMgY29udmVyZ2VuY2UgYG5leHRgIGVkZ2UgcG9pbnRzIHRvLCBpbnN0ZWFkIG9mIHRoZSBzaGFyZWQgbmV4dC1zdGFnZVxuICAgKiBpdHMgc2libGluZ3MgY29udmVyZ2UgYXQuIFNldCBmcm9tIGBTdWJmbG93TW91bnRPcHRpb25zLmNvbnZlcmdlQXRgOyByZWFkIGJ5XG4gICAqIGBfZmlyZU5leHRFZGdlRnJvbVBhcmVudGAgdG8gZXhwcmVzcyBhbiB1bmVxdWFsLWRlcHRoIG1lcmdlIChlLmcuIHRvb2xzIOKGklxuICAgKiBjYWxsLWxsbSwgYnlwYXNzaW5nIG1lc3NhZ2UtYXBpKS4gVmlzdWFsaXphdGlvbi1vbmx5IOKAlCBydW50aW1lIGNvbnZlcmdlbmNlXG4gICAqIGlzIHVuY2hhbmdlZC5cbiAgICovXG4gIGNvbnZlcmdlQXQ/OiBzdHJpbmc7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gRmxvd0NoYXJ0U3BlYyAocHVyZSBKU09OLCBubyBmdW5jdGlvbnMg4oCUIGZvciBGReKGkkJFIHRyYW5zcG9ydClcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dDaGFydFNwZWMge1xuICBuYW1lOiBzdHJpbmc7XG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBOb2RlIHR5cGUg4oCUIG1hdGNoZXMgYFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZS50eXBlYCBmb3IgdmlzdWFsaXphdGlvbiBhbGlnbm1lbnQuICovXG4gIHR5cGU/OiAnc3RhZ2UnIHwgJ2RlY2lkZXInIHwgJ3NlbGVjdG9yJyB8ICdmb3JrJyB8ICdzdHJlYW1pbmcnIHwgJ3N1YmZsb3cnIHwgJ2xvb3AnO1xuICAvKiogU2VtYW50aWMgaWNvbiBoaW50IGZvciB2aXN1YWxpemF0aW9uIChlLmcuLCBcImxsbVwiLCBcInRvb2xcIiwgXCJyYWdcIiwgXCJhZ2VudFwiLCBcInN0YXJ0XCIpICovXG4gIGljb24/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBjaGlsZHJlbj86IEZsb3dDaGFydFNwZWNbXTtcbiAgbmV4dD86IEZsb3dDaGFydFNwZWM7XG4gIGhhc0RlY2lkZXI/OiBib29sZWFuO1xuICBoYXNTZWxlY3Rvcj86IGJvb2xlYW47XG4gIGJyYW5jaElkcz86IHN0cmluZ1tdO1xuICBsb29wVGFyZ2V0Pzogc3RyaW5nO1xuICBpc1N0cmVhbWluZz86IGJvb2xlYW47XG4gIHN0cmVhbUlkPzogc3RyaW5nO1xuICBpc1BhcmFsbGVsQ2hpbGQ/OiBib29sZWFuO1xuICBwYXJhbGxlbEdyb3VwSWQ/OiBzdHJpbmc7XG4gIGlzU3ViZmxvd1Jvb3Q/OiBib29sZWFuO1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIHN1YmZsb3dOYW1lPzogc3RyaW5nO1xuICAvKiogVHJ1ZSB3aGVuIHRoaXMgbm9kZSBpcyBhIGJhY2stZWRnZSByZWZlcmVuY2UgY3JlYXRlZCBieSBsb29wVG8oKSDigJQgbm90IGFuIGV4ZWN1dGFibGUgc3RhZ2UuICovXG4gIGlzTG9vcFJlZmVyZW5jZT86IGJvb2xlYW47XG4gIC8qKiBUcnVlIGZvciBhbiBgYWRkUGFyYWxsZWxGb3JFYWNoYCBmYW4tb3V0IChgdHlwZWAgc3RheXMgYCdmb3JrJ2ApLiAqL1xuICBpc0R5bmFtaWNQYXJhbGxlbD86IGJvb2xlYW47XG4gIC8qKiBUb3RhbCBhdHRlbXB0cyBhbGxvd2VkIGJ5IHRoaXMgc3RhZ2UncyBkZWNsYXJlZCByZXRyeSBwb2xpY3kg4oCUIHRoZSBjb3VudFxuICAgKiAgb25seSAoc2VlIGBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUucmV0cnlBdHRlbXB0c2ApLiAqL1xuICByZXRyeUF0dGVtcHRzPzogbnVtYmVyO1xuICAvKiogRGVjbGFyZWQgdGFncyBvbiB0aGlzIHN0YWdlLCBhcy1pcyAoc2VlIGBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUudGFnc2ApLiAqL1xuICB0YWdzPzogcmVhZG9ubHkgc3RyaW5nW107XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gZmxvd0NoYXJ0KCkgb3B0aW9ucyBiYWdcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIE9wdGlvbnMtYmFnIGFyZ3VtZW50IHNoYXBlIGZvciB0aGUgYGZsb3dDaGFydCgpYCBmYWN0b3J5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dDaGFydE9wdGlvbnMge1xuICAvKipcbiAgICogQnVpbGQtdGltZSByZWNvcmRlcnMgdG8gYXR0YWNoIEJFRk9SRSBgc3RhcnQoKWAgZmlyZXMuIEVxdWl2YWxlbnRcbiAgICogdG8gY2hhaW5pbmcgYC5hdHRhY2hTdHJ1Y3R1cmVSZWNvcmRlcihyZWMpYCBpbW1lZGlhdGVseSBhZnRlciB0aGVcbiAgICogZmFjdG9yeSByZXR1cm5zIOKAlCBidXQgcmVnaXN0ZXJlZCBFQVJMSUVSLCBzbyBldmVuIHRoZSBzZWVkIGV2ZW50XG4gICAqIGZpcmVzIHRocm91Z2ggdGhlIGRpc3BhdGNoZXIgd2l0aG91dCBuZWVkaW5nIHRoZSBzZWVkLXJlcGxheSBwYXRoLlxuICAgKlxuICAgKiBNdWx0aXBsZSByZWNvcmRlcnMgYXR0YWNoIGluIGFycmF5IG9yZGVyIChzYW1lIGFzXG4gICAqIGAuYXR0YWNoU3RydWN0dXJlUmVjb3JkZXJgIHJlcGVhdGVkKS4gU2VlIGBTdHJ1Y3R1cmVSZWNvcmRlcmAgSlNEb2NcbiAgICogZm9yIGV2ZW50IHNlbWFudGljcywgb3JkZXJpbmcgaW52YXJpYW50cywgYW5kIHRoZSB0cnVzdCBtb2RlbC5cbiAgICovXG4gIHN0cnVjdHVyZVJlY29yZGVycz86IFN0cnVjdHVyZVJlY29yZGVyW107XG4gIC8qKiBGcmVlLWZvcm0gZGVzY3JpcHRpb24gc2hvd24gb24gdGhlIHJvb3Qgc3BlYyBub2RlLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIE9ubHkgbWVhbmluZ2Z1bCBmb3IgYGZsb3dDaGFydFNlbGVjdG9yYCAoYSByb290IHNlbGVjdG9yKS4gV2hlbiB0aGVcbiAgICogc2VsZWN0b3IgcGlja3Mg4omlMiBicmFuY2hlcyB0aGV5IGZhbiBvdXQgaW4gcGFyYWxsZWw6IGBmYWlsRmFzdDogdHJ1ZWBcbiAgICogdXNlcyBgUHJvbWlzZS5hbGxgIChmaXJzdCBicmFuY2ggZXJyb3IgcmVqZWN0cyArIGFib3J0cyksIHRoZSBkZWZhdWx0XG4gICAqIHVzZXMgYFByb21pc2UuYWxsU2V0dGxlZGAgKGJlc3QtZWZmb3J0IOKAlCBhbGwgYnJhbmNoZXMgcnVuIGV2ZW4gaWYgc29tZVxuICAgKiBmYWlsKS4gVXNlIGZhaWwtZmFzdCB3aGVuIGFsbCBzZWxlY3RlZCBicmFuY2hlcyBhcmUgUkVRVUlSRUQuIElnbm9yZWQgZm9yXG4gICAqIG5vbi1zZWxlY3RvciBjaGFydHMuIFNhbWUgZmxhZyBgYWRkU2VsZWN0b3JGdW5jdGlvbmAgLyBgYWRkTGlzdE9mRnVuY3Rpb25gXG4gICAqIGV4cG9zZS5cbiAgICovXG4gIGZhaWxGYXN0PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIERlY2xhcmF0aXZlIHJldHJ5IHBvbGljeSBmb3IgdGhlIGNoYXJ0J3MgRklSU1Qgc3RhZ2UgKHRoZSBvbmUgdGhpcyBmYWN0b3J5XG4gICAqIGRlY2xhcmVzKS4gTGF0ZXIgc3RhZ2VzIHVzZSB0aGUgYC5yZXRyeSgpYCBtb2RpZmllciwgb3IgdGhlIGByZXRyeWAgb3B0aW9uXG4gICAqIGF0IHRoZWlyIG93biBkZWNsYXJhdGlvbiBzaXRlLiBTZWUge0BsaW5rIFJldHJ5UG9saWN5fS5cbiAgICovXG4gIHJldHJ5PzogUmV0cnlQb2xpY3k7XG4gIC8qKlxuICAgKiBEZWNsYXJlZCB0YWdzIGZvciB0aGUgY2hhcnQncyBGSVJTVCBzdGFnZS4gTGF0ZXIgc3RhZ2VzIHVzZSB0aGUgYC50YWcoKWBcbiAgICogbW9kaWZpZXIsIG9yIHRoZSBgdGFnc2Agb3B0aW9uIGF0IHRoZWlyIG93biBkZWNsYXJhdGlvbiBzaXRlLiBBIHRhZyBpcyBhXG4gICAqIE5BTUUgZGVjbGFyZWQgYXQgYnVpbGQgdGltZSDigJQgbmV2ZXIgYSB2YWx1ZSDigJQgYW5kIGlzIHN0YW1wZWQgb24gZXZlcnlcbiAgICogY29tbWl0IGJ1bmRsZSB0aGUgc3RhZ2UgcmVjb3JkcyAoYENvbW1pdEJ1bmRsZS50YWdzYCksIHNvIGEgc3RvcmVkXG4gICAqIHJlY29yZGluZyBjYXJyaWVzIGl0cyBvd24gbWlsZXN0b25lcy4gU2VlIGBGbG93Q2hhcnRCdWlsZGVyLnRhZ2AuXG4gICAqL1xuICB0YWdzPzogcmVhZG9ubHkgc3RyaW5nW107XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gRmxvd0NoYXJ0IOKAlCBjb21waWxlZCBvdXRwdXQgb2YgYnVpbGQoKVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIEZsb3dDaGFydDxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+ID0ge1xuICByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgc3RhZ2VNYXA6IE1hcDxzdHJpbmcsIFN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPj47XG4gIHN1YmZsb3dzPzogUmVjb3JkPHN0cmluZywgeyByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB9PjtcbiAgYnVpbGRUaW1lU3RydWN0dXJlOiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmU7XG4gIGVuYWJsZU5hcnJhdGl2ZT86IGJvb2xlYW47XG4gIGxvZ2dlcj86IElMb2dnZXI7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHN0YWdlRGVzY3JpcHRpb25zOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogSW5wdXQgc2NoZW1hIChab2Qgb3IgSlNPTiBTY2hlbWEpIOKAlCBkZWNsYXJlZCB2aWEgc2V0SW5wdXRTY2hlbWEoKSBvciAuY29udHJhY3QoKS4gKi9cbiAgaW5wdXRTY2hlbWE/OiB1bmtub3duO1xuICAvKiogT3V0cHV0IHNjaGVtYSAoWm9kIG9yIEpTT04gU2NoZW1hKSDigJQgZGVjbGFyZWQgdmlhIHNldE91dHB1dFNjaGVtYSgpIG9yIC5jb250cmFjdCgpLiAqL1xuICBvdXRwdXRTY2hlbWE/OiB1bmtub3duO1xuICAvKiogT3V0cHV0IG1hcHBlciDigJQgZXh0cmFjdHMgcmVzcG9uc2UgZnJvbSBmaW5hbCBzY29wZS4gKi9cbiAgb3V0cHV0TWFwcGVyPzogKGZpbmFsU2NvcGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB1bmtub3duO1xuICAvKiogU2NvcGUgZmFjdG9yeSDigJQgYXV0by1lbWJlZGRlZCBieSBmbG93Q2hhcnQ8VD4oKS4gRXhlY3V0b3IgcmVhZHMgdGhpcyBpZiBubyBmYWN0b3J5IHBhcmFtLiAqL1xuICBzY29wZUZhY3Rvcnk/OiBTY29wZUZhY3Rvcnk8VFNjb3BlPjtcbn07XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU2ltcGxpZmllZCBQYXJhbGxlbCBTcGVjIChmb3IgYWRkTGlzdE9mRnVuY3Rpb24pXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IHR5cGUgU2ltcGxpZmllZFBhcmFsbGVsU3BlYzxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+ID0ge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGZuPzogU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+O1xuICAvKiogRGVjbGFyYXRpdmUgcmV0cnkgcG9saWN5IGZvciB0aGlzIGZvcmsgY2hpbGQuIEZvcmsgYnJhbmNoZXMgYXJlIHdoZXJlXG4gICAqICBmbGFreSBJL08gdXN1YWxseSBsaXZlcywgc28gZWFjaCBjaGlsZCBkZWNsYXJlcyBpdHMgb3duLiAqL1xuICByZXRyeT86IFJldHJ5UG9saWN5O1xuICAvKiogRGVjbGFyZWQgdGFncyBmb3IgdGhpcyBmb3JrIGNoaWxkIOKAlCBlYWNoIGNoaWxkJ3MgYnVuZGxlIGNhcnJpZXMgaXRzIG93bi4gKi9cbiAgdGFncz86IHJlYWRvbmx5IHN0cmluZ1tdO1xufTtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBFeGVjT3B0aW9ucyAoZm9yIGV4ZWN1dGUoKSBjb252ZW5pZW5jZSDigJQgdXNlZCBieSBydW5uZXIgbGF5ZXIpXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IHR5cGUgRXhlY09wdGlvbnMgPSB7XG4gIGRlZmF1bHRzPzogdW5rbm93bjtcbiAgaW5pdGlhbD86IHVua25vd247XG4gIHJlYWRPbmx5PzogdW5rbm93bjtcbiAgdGhyb3R0bGluZ0Vycm9yQ2hlY2tlcj86IChlOiB1bmtub3duKSA9PiBib29sZWFuO1xuICBzY29wZVByb3RlY3Rpb25Nb2RlPzogU2NvcGVQcm90ZWN0aW9uTW9kZTtcbiAgZW5hYmxlTmFycmF0aXZlPzogYm9vbGVhbjtcbn07XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU3ViZmxvd1JlZlxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBpbnRlcmZhY2UgU3ViZmxvd1JlZiB7XG4gICRyZWY6IHN0cmluZztcbiAgbW91bnRJZDogc3RyaW5nO1xufVxuIl19
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2J1aWxkZXIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7OztHQVNHO0FBd0JILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogYnVpbGRlci90eXBlcy50cyDigJQgQWxsIHR5cGVzIHVzZWQgYnkgdGhlIGJ1aWxkZXIgbGlicmFyeS5cbiAqXG4gKiBTaGFyZWQgdHlwZXMgKFN0YWdlTm9kZSwgU3RhZ2VGdW5jdGlvbiwgZXRjLikgYXJlIGltcG9ydGVkIGZyb20gdGhlIGVuZ2luZS5cbiAqIEJ1aWxkZXItc3BlY2lmaWMgdHlwZXMgKEZsb3dDaGFydFNwZWMsIEZsb3dDaGFydCwgU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlKVxuICogYXJlIGRlZmluZWQgbG9jYWxseSDigJQgdGhleSBjYXJyeSBidWlsZGVyLW9ubHkgZmllbGRzIChkZXNjcmlwdGlvbiwgb3V0cHV0TWFwcGVyLCBldGMuKS5cbiAqXG4gKiBOT1RFOiBBbGwgZW5naW5lIGltcG9ydHMgYXJlIGBpbXBvcnQgdHlwZWAg4oCUIHplcm8gcnVudGltZSBkZXBlbmRlbmN5LlxuICogVGhlIGJ1aWxkZXIgcmVtYWlucyBzdGFuZGFsb25lIGF0IHJ1bnRpbWUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBTdGFnZU5vZGUgfSBmcm9tICcuLi9lbmdpbmUvZ3JhcGgvU3RhZ2VOb2RlLmpzJztcbmltcG9ydCB0eXBlIHsgSUxvZ2dlciwgUmV0cnlQb2xpY3ksIFNjb3BlRmFjdG9yeSwgU3RhZ2VGdW5jdGlvbiB9IGZyb20gJy4uL2VuZ2luZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFNjb3BlUHJvdGVjdGlvbk1vZGUgfSBmcm9tICcuLi9zY29wZS9wcm90ZWN0aW9uL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgU3RydWN0dXJlUmVjb3JkZXIgfSBmcm9tICcuL3N0cnVjdHVyZS9TdHJ1Y3R1cmVSZWNvcmRlci5qcyc7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gUmUtZXhwb3J0cyBmcm9tIGVuZ2luZSAoY2Fub25pY2FsIGRlZmluaXRpb25zKVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIHsgUmVzdW1lRm4sIFN0YWdlTm9kZSB9IGZyb20gJy4uL2VuZ2luZS9ncmFwaC9TdGFnZU5vZGUuanMnO1xuZXhwb3J0IHR5cGUge1xuICBCcmFuY2hDaGFydCxcbiAgSUxvZ2dlcixcbiAgUGFyYWxsZWxGb3JFYWNoQ29uZmlnLFxuICBSZXRyeVBvbGljeSxcbiAgU3RhZ2VGdW5jdGlvbixcbiAgU3RyZWFtQ2FsbGJhY2ssXG4gIFN0cmVhbUhhbmRsZXJzLFxuICBTdHJlYW1MaWZlY3ljbGVIYW5kbGVyLFxuICBTdHJlYW1Ub2tlbkhhbmRsZXIsXG4gIFN1YmZsb3dNb3VudE9wdGlvbnMsXG59IGZyb20gJy4uL2VuZ2luZS90eXBlcy5qcyc7XG5leHBvcnQgeyBBcnJheU1lcmdlTW9kZSB9IGZyb20gJy4uL2VuZ2luZS90eXBlcy5qcyc7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gQWxpYXNlc1xuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKiBSZWxheGVkLWdlbmVyaWMgYWxpYXMgZm9yIGJ1aWxkZXIgZXJnb25vbWljcy4gKi9cbmV4cG9ydCB0eXBlIFN0YWdlRm4gPSBTdGFnZUZ1bmN0aW9uPGFueSwgYW55PjtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTY29wZSBQcm90ZWN0aW9uIOKAlCBjYW5vbmljYWwgZGVmaW5pdGlvbiBpbiBzY29wZS9wcm90ZWN0aW9uL3R5cGVzLnRzXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IHR5cGUgeyBTY29wZVByb3RlY3Rpb25Nb2RlIH07XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU2VyaWFsaXplZCBQaXBlbGluZSBTdHJ1Y3R1cmUgKEpTT04tc2FmZSwgZm9yIHZpc3VhbGl6YXRpb24pXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGludGVyZmFjZSBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUge1xuICBuYW1lOiBzdHJpbmc7XG4gIGlkOiBzdHJpbmc7XG4gIHR5cGU6ICdzdGFnZScgfCAnZGVjaWRlcicgfCAnc2VsZWN0b3InIHwgJ2ZvcmsnIHwgJ3N0cmVhbWluZycgfCAnc3ViZmxvdycgfCAnbG9vcCc7XG4gIC8qKiBTZW1hbnRpYyBpY29uIGhpbnQgZm9yIHZpc3VhbGl6YXRpb24gKGUuZy4sIFwibGxtXCIsIFwidG9vbFwiLCBcInJhZ1wiLCBcImFnZW50XCIsIFwic3RhcnRcIikgKi9cbiAgaWNvbj86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlW107XG4gIG5leHQ/OiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmU7XG4gIGhhc0RlY2lkZXI/OiBib29sZWFuO1xuICBoYXNTZWxlY3Rvcj86IGJvb2xlYW47XG4gIGJyYW5jaElkcz86IHN0cmluZ1tdO1xuICBsb29wVGFyZ2V0Pzogc3RyaW5nO1xuICBpc1N0cmVhbWluZz86IGJvb2xlYW47XG4gIHN0cmVhbUlkPzogc3RyaW5nO1xuICBpc1BhcmFsbGVsQ2hpbGQ/OiBib29sZWFuO1xuICBwYXJhbGxlbEdyb3VwSWQ/OiBzdHJpbmc7XG4gIGlzU3ViZmxvd1Jvb3Q/OiBib29sZWFuO1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIHN1YmZsb3dOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogTmVzdGVkIHBpcGVsaW5lIHN0cnVjdHVyZSBmb3IgYSBzdWJmbG93IG5vZGUuXG4gICAqIFdBUk5JTkc6IEFueSBmdXR1cmUgd2Fsa2VyIHRoYXQgdHJhdmVyc2VzIHRoaXMgZmllbGQgcmVjdXJzaXZlbHkgbXVzdCBhcHBseSBpdHMgb3duXG4gICAqIGRlcHRoIGFuZCBjeWNsZSBndWFyZHMgYWNyb3NzIGJvdGggdGhlIGBuZXh0YCBjaGFpbiBhbmQgdGhpcyBuZXN0ZWQgc3RydWN0dXJlLlxuICAgKiBDaGFydCBPcGVuQVBJIGdlbmVyYXRpb24gcmVhZHMgdGhlIGJ1aWxkZXItcHJlcGFyZWQgZGVzY3JpcHRpb24sIG5vdCB0aGlzIGdyYXBoLlxuICAgKi9cbiAgc3ViZmxvd1N0cnVjdHVyZT86IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZTtcbiAgaXRlcmF0aW9uQ291bnQ/OiBudW1iZXI7XG4gIC8qKiBUcnVlIHdoZW4gdGhpcyBzdWJmbG93IHVzZXMgbGF6eSByZXNvbHV0aW9uIChkZWZlcnJlZCB1bnRpbCBleGVjdXRpb24pLiAqL1xuICBpc0xhenk/OiBib29sZWFuO1xuICAvKiogVHJ1ZSB3aGVuIHRoaXMgbm9kZSBpcyBhIGJhY2stZWRnZSByZWZlcmVuY2UgY3JlYXRlZCBieSBsb29wVG8oKSDigJQgbm90IGFuIGV4ZWN1dGFibGUgc3RhZ2UuICovXG4gIGlzTG9vcFJlZmVyZW5jZT86IGJvb2xlYW47XG4gIC8qKiBXaGVuIHRydWUsIHRoaXMgc3RhZ2UgY2FuIHBhdXNlIGV4ZWN1dGlvbiAoUGF1c2FibGVIYW5kbGVyIHBhdHRlcm4pLiAqL1xuICBpc1BhdXNhYmxlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFRydWUgZm9yIGFuIGBhZGRQYXJhbGxlbEZvckVhY2hgIGZhbi1vdXQg4oCUIG9uZSBicmFuY2ggcGVyIGl0ZW0sIGNvdW50XG4gICAqIGRlY2lkZWQgYXQgcnVudGltZS4gQSBmbGFnLCBub3QgYSB0eXBlOiBgdHlwZWAgc3RheXMgYCdmb3JrJ2Agc28gZXhpc3RpbmdcbiAgICogY29uc3VtZXJzIGtlZXAgcmVuZGVyaW5nIGl0IGFzIHRoZSBmYW4tb3V0IGl0IGlzLlxuICAgKi9cbiAgaXNEeW5hbWljUGFyYWxsZWw/OiBib29sZWFuO1xuICAvKipcbiAgICogVG90YWwgYXR0ZW1wdHMgdGhpcyBzdGFnZSdzIGZ1bmN0aW9uIG1heSBydW4sIGZyb20gaXRzIGRlY2xhcmVkXG4gICAqIHtAbGluayBSZXRyeVBvbGljeX0uIFByZXNlbnQgb25seSB3aGVuIGEgcG9saWN5IHdhcyBkZWNsYXJlZCDigJQgdGhlIENPVU5UXG4gICAqIG9ubHksIGJlY2F1c2UgYGJhY2tvZmZNc2AgYW5kIGByZXRyeU9uYCBjYW4gYmUgZnVuY3Rpb25zIGFuZCBhIEpTT04tc2FmZVxuICAgKiBzcGVjIGNhbm5vdCBjYXJyeSB0aG9zZS5cbiAgICpcbiAgICogUmVhZCBpdCBmcm9tIHRoZSBCVUlMVCBzcGVjIChgY2hhcnQuYnVpbGRUaW1lU3RydWN0dXJlYCAvIGB0b1NwZWMoKWApLCBub3RcbiAgICogZnJvbSBhIGBTdHJ1Y3R1cmVSZWNvcmRlci5vblN0YWdlQWRkZWRgIGV2ZW50OiB0aGUgYC5yZXRyeSgpYCBtb2RpZmllciBpc1xuICAgKiBjaGFpbmVkIEFGVEVSIHRoZSBzdGFnZSBpcyBhZGRlZCwgc28gdGhlIGV2ZW50IGZpcmVzIGZpcnN0LiBUaGF0IGlzIHdoeVxuICAgKiB0aGVyZSBpcyBubyBgcmV0cnlBdHRlbXB0c2AgZGlzY3JpbWluYXRvciBvbiB0aGUgZXZlbnQgcGF5bG9hZCDigJQgaXQgd291bGRcbiAgICogYmUgYHVuZGVmaW5lZGAgYXQgZmlyZSB0aW1lIGZvciBleGFjdGx5IHRoZSBzdGFnZXMgdGhhdCBoYXZlIGEgcG9saWN5LlxuICAgKi9cbiAgcmV0cnlBdHRlbXB0cz86IG51bWJlcjtcbiAgLyoqXG4gICAqIERlY2xhcmVkIHRhZ3MgKDkuMjEuMCkg4oCUIHRoZSBOQU1FUyB0aGUgYXV0aG9yIHB1dCBvbiB0aGlzIHN0YWdlIGF0IGJ1aWxkXG4gICAqIHRpbWUsIGNvcGllZCBhcy1pcyAoSlNPTi1zYWZlLCBmcmVlIHN0cmluZ3M7IGZvb3RwcmludGpzIG93bnMgbm9cbiAgICogdm9jYWJ1bGFyeSkuIFRoZSBNYXAgYWR2ZXJ0aXNlcyB3aGF0IGEgY2hhcnQgQ0FOIHByb2R1Y2U7IHRoZSBjb21taXRcbiAgICogYnVuZGxlIChgQ29tbWl0QnVuZGxlLnRhZ3NgKSByZWNvcmRzIHdoaWNoIGEgcnVuIERJRCBoaXQuIEFic2VudCB3aGVuIHRoZVxuICAgKiBzdGFnZSBkZWNsYXJlcyBub25lLiBTYW1lIHJlYWQtaXQtZnJvbS10aGUtYnVpbHQtc3BlYyBjYXZlYXQgYXNcbiAgICogYHJldHJ5QXR0ZW1wdHNgOiBgLnRhZygpYCBpcyBjaGFpbmVkIEFGVEVSIGBvblN0YWdlQWRkZWRgIGZpcmVzLlxuICAgKi9cbiAgdGFncz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKipcbiAgICogU1RSVUNUVVJFLU9OTFk6IGZvciBhIGZvcmsvc2VsZWN0b3IvZGVjaWRlciBicmFuY2gsIHRoZSBkb3duc3RyZWFtIHN0YWdlXG4gICAqIGlkIGl0cyBjb252ZXJnZW5jZSBgbmV4dGAgZWRnZSBwb2ludHMgdG8sIGluc3RlYWQgb2YgdGhlIHNoYXJlZCBuZXh0LXN0YWdlXG4gICAqIGl0cyBzaWJsaW5ncyBjb252ZXJnZSBhdC4gU2V0IGZyb20gYFN1YmZsb3dNb3VudE9wdGlvbnMuY29udmVyZ2VBdGA7IHJlYWQgYnlcbiAgICogYF9maXJlTmV4dEVkZ2VGcm9tUGFyZW50YCB0byBleHByZXNzIGFuIHVuZXF1YWwtZGVwdGggbWVyZ2UgKGUuZy4gdG9vbHMg4oaSXG4gICAqIGNhbGwtbGxtLCBieXBhc3NpbmcgbWVzc2FnZS1hcGkpLiBWaXN1YWxpemF0aW9uLW9ubHkg4oCUIHJ1bnRpbWUgY29udmVyZ2VuY2VcbiAgICogaXMgdW5jaGFuZ2VkLlxuICAgKi9cbiAgY29udmVyZ2VBdD86IHN0cmluZztcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBGbG93Q2hhcnRTcGVjIChwdXJlIEpTT04sIG5vIGZ1bmN0aW9ucyDigJQgZm9yIEZF4oaSQkUgdHJhbnNwb3J0KVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0NoYXJ0U3BlYyB7XG4gIG5hbWU6IHN0cmluZztcbiAgaWQ6IHN0cmluZztcbiAgLyoqIE5vZGUgdHlwZSDigJQgbWF0Y2hlcyBgU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlLnR5cGVgIGZvciB2aXN1YWxpemF0aW9uIGFsaWdubWVudC4gKi9cbiAgdHlwZT86ICdzdGFnZScgfCAnZGVjaWRlcicgfCAnc2VsZWN0b3InIHwgJ2ZvcmsnIHwgJ3N0cmVhbWluZycgfCAnc3ViZmxvdycgfCAnbG9vcCc7XG4gIC8qKiBTZW1hbnRpYyBpY29uIGhpbnQgZm9yIHZpc3VhbGl6YXRpb24gKGUuZy4sIFwibGxtXCIsIFwidG9vbFwiLCBcInJhZ1wiLCBcImFnZW50XCIsIFwic3RhcnRcIikgKi9cbiAgaWNvbj86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogRmxvd0NoYXJ0U3BlY1tdO1xuICBuZXh0PzogRmxvd0NoYXJ0U3BlYztcbiAgaGFzRGVjaWRlcj86IGJvb2xlYW47XG4gIGhhc1NlbGVjdG9yPzogYm9vbGVhbjtcbiAgYnJhbmNoSWRzPzogc3RyaW5nW107XG4gIGxvb3BUYXJnZXQ/OiBzdHJpbmc7XG4gIGlzU3RyZWFtaW5nPzogYm9vbGVhbjtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIGlzUGFyYWxsZWxDaGlsZD86IGJvb2xlYW47XG4gIHBhcmFsbGVsR3JvdXBJZD86IHN0cmluZztcbiAgaXNTdWJmbG93Um9vdD86IGJvb2xlYW47XG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgc3ViZmxvd05hbWU/OiBzdHJpbmc7XG4gIC8qKiBUcnVlIHdoZW4gdGhpcyBub2RlIGlzIGEgYmFjay1lZGdlIHJlZmVyZW5jZSBjcmVhdGVkIGJ5IGxvb3BUbygpIOKAlCBub3QgYW4gZXhlY3V0YWJsZSBzdGFnZS4gKi9cbiAgaXNMb29wUmVmZXJlbmNlPzogYm9vbGVhbjtcbiAgLyoqIFRydWUgZm9yIGFuIGBhZGRQYXJhbGxlbEZvckVhY2hgIGZhbi1vdXQgKGB0eXBlYCBzdGF5cyBgJ2ZvcmsnYCkuICovXG4gIGlzRHluYW1pY1BhcmFsbGVsPzogYm9vbGVhbjtcbiAgLyoqIFRvdGFsIGF0dGVtcHRzIGFsbG93ZWQgYnkgdGhpcyBzdGFnZSdzIGRlY2xhcmVkIHJldHJ5IHBvbGljeSDigJQgdGhlIGNvdW50XG4gICAqICBvbmx5IChzZWUgYFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZS5yZXRyeUF0dGVtcHRzYCkuICovXG4gIHJldHJ5QXR0ZW1wdHM/OiBudW1iZXI7XG4gIC8qKiBEZWNsYXJlZCB0YWdzIG9uIHRoaXMgc3RhZ2UsIGFzLWlzIChzZWUgYFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZS50YWdzYCkuICovXG4gIHRhZ3M/OiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBmbG93Q2hhcnQoKSBvcHRpb25zIGJhZ1xuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogT3B0aW9ucy1iYWcgYXJndW1lbnQgc2hhcGUgZm9yIHRoZSBgZmxvd0NoYXJ0KClgIGZhY3RvcnkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0NoYXJ0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBCdWlsZC10aW1lIHJlY29yZGVycyB0byBhdHRhY2ggQkVGT1JFIGBzdGFydCgpYCBmaXJlcy4gRXF1aXZhbGVudFxuICAgKiB0byBjaGFpbmluZyBgLmF0dGFjaFN0cnVjdHVyZVJlY29yZGVyKHJlYylgIGltbWVkaWF0ZWx5IGFmdGVyIHRoZVxuICAgKiBmYWN0b3J5IHJldHVybnMg4oCUIGJ1dCByZWdpc3RlcmVkIEVBUkxJRVIsIHNvIGV2ZW4gdGhlIHNlZWQgZXZlbnRcbiAgICogZmlyZXMgdGhyb3VnaCB0aGUgZGlzcGF0Y2hlciB3aXRob3V0IG5lZWRpbmcgdGhlIHNlZWQtcmVwbGF5IHBhdGguXG4gICAqXG4gICAqIE11bHRpcGxlIHJlY29yZGVycyBhdHRhY2ggaW4gYXJyYXkgb3JkZXIgKHNhbWUgYXNcbiAgICogYC5hdHRhY2hTdHJ1Y3R1cmVSZWNvcmRlcmAgcmVwZWF0ZWQpLiBTZWUgYFN0cnVjdHVyZVJlY29yZGVyYCBKU0RvY1xuICAgKiBmb3IgZXZlbnQgc2VtYW50aWNzLCBvcmRlcmluZyBpbnZhcmlhbnRzLCBhbmQgdGhlIHRydXN0IG1vZGVsLlxuICAgKi9cbiAgc3RydWN0dXJlUmVjb3JkZXJzPzogU3RydWN0dXJlUmVjb3JkZXJbXTtcbiAgLyoqIEZyZWUtZm9ybSBkZXNjcmlwdGlvbiBzaG93biBvbiB0aGUgcm9vdCBzcGVjIG5vZGUuICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKipcbiAgICogT25seSBtZWFuaW5nZnVsIGZvciBgZmxvd0NoYXJ0U2VsZWN0b3JgIChhIHJvb3Qgc2VsZWN0b3IpLiBXaGVuIHRoZVxuICAgKiBzZWxlY3RvciBwaWNrcyDiiaUyIGJyYW5jaGVzIHRoZXkgZmFuIG91dCBpbiBwYXJhbGxlbDogYGZhaWxGYXN0OiB0cnVlYFxuICAgKiB1c2VzIGBQcm9taXNlLmFsbGAgKGZpcnN0IGJyYW5jaCBlcnJvciByZWplY3RzICsgYWJvcnRzKSwgdGhlIGRlZmF1bHRcbiAgICogdXNlcyBgUHJvbWlzZS5hbGxTZXR0bGVkYCAoYmVzdC1lZmZvcnQg4oCUIGFsbCBicmFuY2hlcyBydW4gZXZlbiBpZiBzb21lXG4gICAqIGZhaWwpLiBVc2UgZmFpbC1mYXN0IHdoZW4gYWxsIHNlbGVjdGVkIGJyYW5jaGVzIGFyZSBSRVFVSVJFRC4gSWdub3JlZCBmb3JcbiAgICogbm9uLXNlbGVjdG9yIGNoYXJ0cy4gU2FtZSBmbGFnIGBhZGRTZWxlY3RvckZ1bmN0aW9uYCAvIGBhZGRMaXN0T2ZGdW5jdGlvbmBcbiAgICogZXhwb3NlLlxuICAgKi9cbiAgZmFpbEZhc3Q/OiBib29sZWFuO1xuICAvKipcbiAgICogRGVjbGFyYXRpdmUgcmV0cnkgcG9saWN5IGZvciB0aGUgY2hhcnQncyBGSVJTVCBzdGFnZSAodGhlIG9uZSB0aGlzIGZhY3RvcnlcbiAgICogZGVjbGFyZXMpLiBMYXRlciBzdGFnZXMgdXNlIHRoZSBgLnJldHJ5KClgIG1vZGlmaWVyLCBvciB0aGUgYHJldHJ5YCBvcHRpb25cbiAgICogYXQgdGhlaXIgb3duIGRlY2xhcmF0aW9uIHNpdGUuIFNlZSB7QGxpbmsgUmV0cnlQb2xpY3l9LlxuICAgKi9cbiAgcmV0cnk/OiBSZXRyeVBvbGljeTtcbiAgLyoqXG4gICAqIERlY2xhcmVkIHRhZ3MgZm9yIHRoZSBjaGFydCdzIEZJUlNUIHN0YWdlLiBMYXRlciBzdGFnZXMgdXNlIHRoZSBgLnRhZygpYFxuICAgKiBtb2RpZmllciwgb3IgdGhlIGB0YWdzYCBvcHRpb24gYXQgdGhlaXIgb3duIGRlY2xhcmF0aW9uIHNpdGUuIEEgdGFnIGlzIGFcbiAgICogTkFNRSBkZWNsYXJlZCBhdCBidWlsZCB0aW1lIOKAlCBuZXZlciBhIHZhbHVlIOKAlCBhbmQgaXMgc3RhbXBlZCBvbiBldmVyeVxuICAgKiBjb21taXQgYnVuZGxlIHRoZSBzdGFnZSByZWNvcmRzIChgQ29tbWl0QnVuZGxlLnRhZ3NgKSwgc28gYSBzdG9yZWRcbiAgICogcmVjb3JkaW5nIGNhcnJpZXMgaXRzIG93biBtaWxlc3RvbmVzLiBTZWUgYEZsb3dDaGFydEJ1aWxkZXIudGFnYC5cbiAgICovXG4gIHRhZ3M/OiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBGbG93Q2hhcnQg4oCUIGNvbXBpbGVkIG91dHB1dCBvZiBidWlsZCgpXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IHR5cGUgRmxvd0NoYXJ0PFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4gPSB7XG4gIHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+O1xuICBzdGFnZU1hcDogTWFwPHN0cmluZywgU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+PjtcbiAgc3ViZmxvd3M/OiBSZWNvcmQ8c3RyaW5nLCB7IHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IH0+O1xuICBidWlsZFRpbWVTdHJ1Y3R1cmU6IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZTtcbiAgZW5hYmxlTmFycmF0aXZlPzogYm9vbGVhbjtcbiAgbG9nZ2VyPzogSUxvZ2dlcjtcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgc3RhZ2VEZXNjcmlwdGlvbnM6IE1hcDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBJbnB1dCBzY2hlbWEgKFpvZCBvciBKU09OIFNjaGVtYSkg4oCUIGRlY2xhcmVkIHZpYSBzZXRJbnB1dFNjaGVtYSgpIG9yIC5jb250cmFjdCgpLiAqL1xuICBpbnB1dFNjaGVtYT86IHVua25vd247XG4gIC8qKiBPdXRwdXQgc2NoZW1hIChab2Qgb3IgSlNPTiBTY2hlbWEpIOKAlCBkZWNsYXJlZCB2aWEgc2V0T3V0cHV0U2NoZW1hKCkgb3IgLmNvbnRyYWN0KCkuICovXG4gIG91dHB1dFNjaGVtYT86IHVua25vd247XG4gIC8qKiBPdXRwdXQgbWFwcGVyIOKAlCBleHRyYWN0cyByZXNwb25zZSBmcm9tIGZpbmFsIHNjb3BlLiAqL1xuICBvdXRwdXRNYXBwZXI/OiAoZmluYWxTY29wZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHVua25vd247XG4gIC8qKiBTY29wZSBmYWN0b3J5IOKAlCBhdXRvLWVtYmVkZGVkIGJ5IGZsb3dDaGFydDxUPigpLiBFeGVjdXRvciByZWFkcyB0aGlzIGlmIG5vIGZhY3RvcnkgcGFyYW0uICovXG4gIHNjb3BlRmFjdG9yeT86IFNjb3BlRmFjdG9yeTxUU2NvcGU+O1xufTtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTaW1wbGlmaWVkIFBhcmFsbGVsIFNwZWMgKGZvciBhZGRMaXN0T2ZGdW5jdGlvbilcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSBTaW1wbGlmaWVkUGFyYWxsZWxTcGVjPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4gPSB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgZm4/OiBTdGFnZUZ1bmN0aW9uPFRPdXQsIFRTY29wZT47XG4gIC8qKiBEZWNsYXJhdGl2ZSByZXRyeSBwb2xpY3kgZm9yIHRoaXMgZm9yayBjaGlsZC4gRm9yayBicmFuY2hlcyBhcmUgd2hlcmVcbiAgICogIGZsYWt5IEkvTyB1c3VhbGx5IGxpdmVzLCBzbyBlYWNoIGNoaWxkIGRlY2xhcmVzIGl0cyBvd24uICovXG4gIHJldHJ5PzogUmV0cnlQb2xpY3k7XG4gIC8qKiBEZWNsYXJlZCB0YWdzIGZvciB0aGlzIGZvcmsgY2hpbGQg4oCUIGVhY2ggY2hpbGQncyBidW5kbGUgY2FycmllcyBpdHMgb3duLiAqL1xuICB0YWdzPzogcmVhZG9ubHkgc3RyaW5nW107XG59O1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIEV4ZWNPcHRpb25zIChmb3IgZXhlY3V0ZSgpIGNvbnZlbmllbmNlIOKAlCB1c2VkIGJ5IHJ1bm5lciBsYXllcilcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSBFeGVjT3B0aW9ucyA9IHtcbiAgZGVmYXVsdHM/OiB1bmtub3duO1xuICBpbml0aWFsPzogdW5rbm93bjtcbiAgcmVhZE9ubHk/OiB1bmtub3duO1xuICB0aHJvdHRsaW5nRXJyb3JDaGVja2VyPzogKGU6IHVua25vd24pID0+IGJvb2xlYW47XG4gIHNjb3BlUHJvdGVjdGlvbk1vZGU/OiBTY29wZVByb3RlY3Rpb25Nb2RlO1xuICBlbmFibGVOYXJyYXRpdmU/OiBib29sZWFuO1xufTtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTdWJmbG93UmVmXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGludGVyZmFjZSBTdWJmbG93UmVmIHtcbiAgJHJlZjogc3RyaW5nO1xuICBtb3VudElkOiBzdHJpbmc7XG59XG4iXX0=
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* freeze.ts — the ONE deep-freeze walk (moved here from `scope/protection/readonlyInput.ts` in F3).
|
|
3
3
|
*
|
|
4
|
-
* WHY HERE.
|
|
5
|
-
*
|
|
4
|
+
* WHY HERE. Saved trees freeze through this walk: the fold base served as
|
|
5
|
+
* `initialState` (`ExecutionRuntime · getFoldBase`), the
|
|
6
6
|
* dev-mode snapshot (`runner/snapshot.ts · servedSnapshot`), every state `stateAt` hands out
|
|
7
7
|
* (`time-travel/stateAt.ts`) and, since F3, every commit bundle (`EventLog · record`). `memory/` must
|
|
8
8
|
* not import `scope/` (that edge closed the memory ⇄ scope ⇄ recorder module cycle F0 removed), so the
|
|
9
|
-
* walk lives in this leaf, which imports nothing.
|
|
9
|
+
* walk lives in this leaf, which imports nothing. Args use an ownership snapshot instead
|
|
10
|
+
* (`scope/protection/readonlyInput.ts · createFrozenArgs`): never freeze borrowed caller values.
|
|
10
11
|
*
|
|
11
12
|
* @example
|
|
12
13
|
* ```typescript
|
|
@@ -21,8 +22,7 @@
|
|
|
21
22
|
* How {@link deepFreeze} walks an ARRAY.
|
|
22
23
|
*
|
|
23
24
|
* - `'every-key'` (the default) — every own property, as for any other object: the index elements
|
|
24
|
-
* AND any expando (`arr.note = { … }`). The
|
|
25
|
-
* rely on.
|
|
25
|
+
* AND any expando (`arr.note = { … }`). The dev-mode snapshot relies on this contract.
|
|
26
26
|
* - `'indices'` — the index elements only, so no key string is allocated per element; this is what
|
|
27
27
|
* keeps freezing a 10,000-element commit inside its budget (`bench/element-writes.ts`). An object
|
|
28
28
|
* hung on an array EXPANDO is then left unfrozen — the commit log's named hole
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* freeze.ts — the ONE deep-freeze walk (moved here from `scope/protection/readonlyInput.ts` in F3).
|
|
3
3
|
*
|
|
4
|
-
* WHY HERE.
|
|
5
|
-
*
|
|
4
|
+
* WHY HERE. Saved trees freeze through this walk: the fold base served as
|
|
5
|
+
* `initialState` (`ExecutionRuntime · getFoldBase`), the
|
|
6
6
|
* dev-mode snapshot (`runner/snapshot.ts · servedSnapshot`), every state `stateAt` hands out
|
|
7
7
|
* (`time-travel/stateAt.ts`) and, since F3, every commit bundle (`EventLog · record`). `memory/` must
|
|
8
8
|
* not import `scope/` (that edge closed the memory ⇄ scope ⇄ recorder module cycle F0 removed), so the
|
|
9
|
-
* walk lives in this leaf, which imports nothing.
|
|
9
|
+
* walk lives in this leaf, which imports nothing. Args use an ownership snapshot instead
|
|
10
|
+
* (`scope/protection/readonlyInput.ts · createFrozenArgs`): never freeze borrowed caller values.
|
|
10
11
|
*
|
|
11
12
|
* @example
|
|
12
13
|
* ```typescript
|
|
@@ -57,4 +58,4 @@ function freezeValue(value, indices) {
|
|
|
57
58
|
freezeValue(child, indices);
|
|
58
59
|
}
|
|
59
60
|
}
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJlZXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jYXB0dXJlL2ZyZWV6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQWNIOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBSSxHQUFNLEVBQUUsU0FBb0IsV0FBVztJQUNuRSxXQUFXLENBQUMsR0FBRyxFQUFFLE1BQU0sS0FBSyxTQUFTLENBQUMsQ0FBQztJQUN2QyxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxLQUFjLEVBQUUsT0FBZ0I7SUFDbkQsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTztJQUMvRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JCLG9HQUFvRztJQUNwRyx3REFBd0Q7SUFDeEQsSUFBSSxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3BDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDdEMsTUFBTSxLQUFLLEdBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO2dCQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDL0UsQ0FBQztRQUNELE9BQU87SUFDVCxDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDdEMsTUFBTSxLQUFLLEdBQUksS0FBaUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRCxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtZQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDL0UsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGZyZWV6ZS50cyDigJQgdGhlIE9ORSBkZWVwLWZyZWV6ZSB3YWxrIChtb3ZlZCBoZXJlIGZyb20gYHNjb3BlL3Byb3RlY3Rpb24vcmVhZG9ubHlJbnB1dC50c2AgaW4gRjMpLlxuICpcbiAqIFdIWSBIRVJFLiBTYXZlZCB0cmVlcyBmcmVlemUgdGhyb3VnaCB0aGlzIHdhbGs6IHRoZSBmb2xkIGJhc2Ugc2VydmVkIGFzXG4gKiBgaW5pdGlhbFN0YXRlYCAoYEV4ZWN1dGlvblJ1bnRpbWUgwrcgZ2V0Rm9sZEJhc2VgKSwgdGhlXG4gKiBkZXYtbW9kZSBzbmFwc2hvdCAoYHJ1bm5lci9zbmFwc2hvdC50cyDCtyBzZXJ2ZWRTbmFwc2hvdGApLCBldmVyeSBzdGF0ZSBgc3RhdGVBdGAgaGFuZHMgb3V0XG4gKiAoYHRpbWUtdHJhdmVsL3N0YXRlQXQudHNgKSBhbmQsIHNpbmNlIEYzLCBldmVyeSBjb21taXQgYnVuZGxlIChgRXZlbnRMb2cgwrcgcmVjb3JkYCkuIGBtZW1vcnkvYCBtdXN0XG4gKiBub3QgaW1wb3J0IGBzY29wZS9gICh0aGF0IGVkZ2UgY2xvc2VkIHRoZSBtZW1vcnkg4oeEIHNjb3BlIOKHhCByZWNvcmRlciBtb2R1bGUgY3ljbGUgRjAgcmVtb3ZlZCksIHNvIHRoZVxuICogd2FsayBsaXZlcyBpbiB0aGlzIGxlYWYsIHdoaWNoIGltcG9ydHMgbm90aGluZy4gQXJncyB1c2UgYW4gb3duZXJzaGlwIHNuYXBzaG90IGluc3RlYWRcbiAqIChgc2NvcGUvcHJvdGVjdGlvbi9yZWFkb25seUlucHV0LnRzIMK3IGNyZWF0ZUZyb3plbkFyZ3NgKTogbmV2ZXIgZnJlZXplIGJvcnJvd2VkIGNhbGxlciB2YWx1ZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IGRlZXBGcmVlemUgfSBmcm9tICcuL2ZyZWV6ZS5qcyc7XG4gKlxuICogY29uc3QgYXJncyA9IGRlZXBGcmVlemUoeyBvcmRlcjogeyBsaW5lczogW3sgc2t1OiAnQScgfV0gfSwgYnl0ZXM6IG5ldyBVaW50OEFycmF5KFsxXSkgfSk7XG4gKiBPYmplY3QuaXNGcm96ZW4oYXJncy5vcmRlci5saW5lc1swXSk7IC8vIHRydWVcbiAqIE9iamVjdC5pc0Zyb3plbihhcmdzLmJ5dGVzKTsgLy8gZmFsc2Ug4oCUIGEgdHlwZWQgYXJyYXkgY2Fubm90IGJlIGZyb3plbjsgaXQgaXMgc2tpcHBlZFxuICogYGBgXG4gKi9cblxuLyoqXG4gKiBIb3cge0BsaW5rIGRlZXBGcmVlemV9IHdhbGtzIGFuIEFSUkFZLlxuICpcbiAqIC0gYCdldmVyeS1rZXknYCAodGhlIGRlZmF1bHQpIOKAlCBldmVyeSBvd24gcHJvcGVydHksIGFzIGZvciBhbnkgb3RoZXIgb2JqZWN0OiB0aGUgaW5kZXggZWxlbWVudHNcbiAqICAgQU5EIGFueSBleHBhbmRvIChgYXJyLm5vdGUgPSB7IOKApiB9YCkuIFRoZSBkZXYtbW9kZSBzbmFwc2hvdCByZWxpZXMgb24gdGhpcyBjb250cmFjdC5cbiAqIC0gYCdpbmRpY2VzJ2Ag4oCUIHRoZSBpbmRleCBlbGVtZW50cyBvbmx5LCBzbyBubyBrZXkgc3RyaW5nIGlzIGFsbG9jYXRlZCBwZXIgZWxlbWVudDsgdGhpcyBpcyB3aGF0XG4gKiAgIGtlZXBzIGZyZWV6aW5nIGEgMTAsMDAwLWVsZW1lbnQgY29tbWl0IGluc2lkZSBpdHMgYnVkZ2V0IChgYmVuY2gvZWxlbWVudC13cml0ZXMudHNgKS4gQW4gb2JqZWN0XG4gKiAgIGh1bmcgb24gYW4gYXJyYXkgRVhQQU5ETyBpcyB0aGVuIGxlZnQgdW5mcm96ZW4g4oCUIHRoZSBjb21taXQgbG9nJ3MgbmFtZWQgaG9sZVxuICogICAoYEV2ZW50TG9nIMK3IHJlY29yZGApLlxuICovXG5leHBvcnQgdHlwZSBBcnJheVdhbGsgPSAnZXZlcnkta2V5JyB8ICdpbmRpY2VzJztcblxuLyoqXG4gKiBGcmVlemVzIGBvYmpgIGFuZCBldmVyeSBvYmplY3QgcmVhY2hhYmxlIHRocm91Z2ggaXRzIG93biBwcm9wZXJ0aWVzLCBhbmQgcmV0dXJucyBgb2JqYC5cbiAqXG4gKiAtIEFuIG9iamVjdCB0aGF0IGlzIEFMUkVBRFkgZnJvemVuIGlzIGxlZnQgYXMgaXQgaXMsIGFuZCBub3QgZGVzY2VuZGVkIOKAlCA5LjMyLjAncyBjb250cmFjdCwga2VwdDpcbiAqICAgYXJncyBtYXkgaG9sZCBhIGNhbGxlcidzIGZyb3plbiBvYmplY3Qgd2l0aCBsaXZlIHBhcnRzIGluc2lkZSAoYSBjbGFzcyBpbnN0YW5jZSBhIHN0YWdlIGNhbGxzKSxcbiAqICAgYW5kIGZyZWV6aW5nIHBhc3QgaXQgd291bGQgYnJlYWsgdGhlbS4gSXQgaXMgYWxzbyB3aGF0IGVuZHMgYSBjeWNsZS4gVGhlIGNvbW1pdCBsb2cgbmV2ZXIgbWVldHNcbiAqICAgb25lOiBpdHMgcGF5bG9hZHMgYXJlIGZyZXNoIGBzdHJ1Y3R1cmVkQ2xvbmVgcy5cbiAqIC0gQXJyYXlCdWZmZXIgdmlld3MgKHR5cGVkIGFycmF5cywgYERhdGFWaWV3YCkgYXJlIHNraXBwZWQ6IGBPYmplY3QuZnJlZXplYCB0aHJvd3Mgb24gYSBub24tZW1wdHlcbiAqICAgdHlwZWQgYXJyYXksIHNvIGEgYFVpbnQ4QXJyYXlgIGluIHN0YXRlLCBhcmdzIG9yIHRoZSBmb2xkIGJhc2UgdXNlZCB0byBmYWlsIHRoZSBydW4gb3IgdGhlXG4gKiAgIHNuYXBzaG90IGhlcmUuXG4gKiAtIFdoYXQgYE9iamVjdC5mcmVlemVgIGNhbm5vdCByZWFjaCBzdGF5cyBtdXRhYmxlIOKAlCBNYXAgYW5kIFNldCBjb250ZW50cywgYSBEYXRlJ3MgdGltZSwgdGhlXG4gKiAgIGJ5dGVzIGJlaGluZCBhIGJ1ZmZlci4gQSBmcm96ZW4gUmVnRXhwJ3MgYGxhc3RJbmRleGAgaXMgcmVhZC1vbmx5LCBzbyBhIGAvZ2Agb3IgYC95YCByZWdleFxuICogICB0YWtlbiBmcm9tIGEgZnJvemVuIHRyZWUgdGhyb3dzIHdoZW4gYGV4ZWNgIG9yIGByZXBsYWNlYCBhZHZhbmNlIGl0LlxuICogLSBGdW5jdGlvbnMgYXJlIG5vdCBkZXNjZW5kZWQgKHRoZXkgYXJlIG5vdCB2YWx1ZXMgdGhlIGVuZ2luZSBzdG9yZXMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVlcEZyZWV6ZTxUPihvYmo6IFQsIGFycmF5czogQXJyYXlXYWxrID0gJ2V2ZXJ5LWtleScpOiBUIHtcbiAgZnJlZXplVmFsdWUob2JqLCBhcnJheXMgPT09ICdpbmRpY2VzJyk7XG4gIHJldHVybiBvYmo7XG59XG5cbmZ1bmN0aW9uIGZyZWV6ZVZhbHVlKHZhbHVlOiB1bmtub3duLCBpbmRpY2VzOiBib29sZWFuKTogdm9pZCB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IEFycmF5QnVmZmVyLmlzVmlldyh2YWx1ZSkgfHwgT2JqZWN0LmlzRnJvemVuKHZhbHVlKSkgcmV0dXJuO1xuICBPYmplY3QuZnJlZXplKHZhbHVlKTtcbiAgLy8gVGhlIHR3byBsb29wcyBhcmUgd3JpdHRlbiBvdXQgcmF0aGVyIHRoYW4gc2hhcmVkIHRocm91Z2ggYSBjYWxsYmFjazogdGhpcyBydW5zIG9uY2UgcGVyIG9iamVjdCBvZlxuICAvLyBldmVyeSBjb21taXQsIGFuZCBhIGNsb3N1cmUgcGVyIG9iamVjdCBpcyBtZWFzdXJhYmxlLlxuICBpZiAoaW5kaWNlcyAmJiBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGNoaWxkOiB1bmtub3duID0gdmFsdWVbaV07XG4gICAgICBpZiAoY2hpbGQgIT09IG51bGwgJiYgdHlwZW9mIGNoaWxkID09PSAnb2JqZWN0JykgZnJlZXplVmFsdWUoY2hpbGQsIGluZGljZXMpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgbmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh2YWx1ZSk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGlsZCA9ICh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbbmFtZXNbaV1dO1xuICAgIGlmIChjaGlsZCAhPT0gbnVsbCAmJiB0eXBlb2YgY2hpbGQgPT09ICdvYmplY3QnKSBmcmVlemVWYWx1ZShjaGlsZCwgaW5kaWNlcyk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* contract/ —
|
|
2
|
+
* contract/ — Schema normalization for self-describing charts.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* pattern as subflow mounting.
|
|
4
|
+
* FlowChartBuilder.contract owns schema attachment. RunnableChart.makeRunnable
|
|
5
|
+
* owns chart.toOpenAPI and chart.toMCPTool; both normalize schemas here.
|
|
7
6
|
*
|
|
8
7
|
* Zero runtime deps on Zod — Zod schemas detected via duck-typing and
|
|
9
|
-
* converted to JSON Schema
|
|
8
|
+
* converted to JSON Schema when a chart is described.
|
|
10
9
|
*/
|
|
11
|
-
export { defineContract } from './defineContract.js';
|
|
12
10
|
export { normalizeSchema, zodToJsonSchema } from './schema.js';
|
|
13
|
-
export {
|
|
14
|
-
export type { FlowChartContract, FlowChartContractOptions, JsonSchema, OpenAPIOptions, OpenAPISpec, SchemaInput, } from './types.js';
|
|
11
|
+
export type { JsonSchema, SchemaInput } from './types.js';
|
|
@@ -1,18 +1,13 @@
|
|
|
1
1
|
/* istanbul ignore file */
|
|
2
2
|
/**
|
|
3
|
-
* contract/ —
|
|
3
|
+
* contract/ — Schema normalization for self-describing charts.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* pattern as subflow mounting.
|
|
5
|
+
* FlowChartBuilder.contract owns schema attachment. RunnableChart.makeRunnable
|
|
6
|
+
* owns chart.toOpenAPI and chart.toMCPTool; both normalize schemas here.
|
|
8
7
|
*
|
|
9
8
|
* Zero runtime deps on Zod — Zod schemas detected via duck-typing and
|
|
10
|
-
* converted to JSON Schema
|
|
9
|
+
* converted to JSON Schema when a chart is described.
|
|
11
10
|
*/
|
|
12
|
-
// Factory
|
|
13
|
-
export { defineContract } from './defineContract.js';
|
|
14
11
|
// Schema utilities
|
|
15
12
|
export { normalizeSchema, zodToJsonSchema } from './schema.js';
|
|
16
|
-
|
|
17
|
-
export { generateOpenAPI } from './openapi.js';
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbnRyYWN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBCQUEwQjtBQUMxQjs7Ozs7Ozs7O0dBU0c7QUFFSCxVQUFVO0FBQ1YsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXJELG1CQUFtQjtBQUNuQixPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUUvRCxvQkFBb0I7QUFDcEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGlzdGFuYnVsIGlnbm9yZSBmaWxlICovXG4vKipcbiAqIGNvbnRyYWN0LyDigJQgRmxvd0NoYXJ0IEkvTyBjb250cmFjdCBhbmQgT3BlbkFQSSBnZW5lcmF0aW9uIGxheWVyLlxuICpcbiAqIFN0YW5kYWxvbmUgbGlicmFyeTogd3JhcHMgYSBjb21waWxlZCBGbG93Q2hhcnQgd2l0aCBpbnB1dC9vdXRwdXQgc2NoZW1hc1xuICogYW5kIGdlbmVyYXRlcyBPcGVuQVBJIDMuMSBzcGVjcy4gVXNlcyB0aGUgc2FtZSBpbnB1dE1hcHBlci9vdXRwdXRNYXBwZXJcbiAqIHBhdHRlcm4gYXMgc3ViZmxvdyBtb3VudGluZy5cbiAqXG4gKiBaZXJvIHJ1bnRpbWUgZGVwcyBvbiBab2Qg4oCUIFpvZCBzY2hlbWFzIGRldGVjdGVkIHZpYSBkdWNrLXR5cGluZyBhbmRcbiAqIGNvbnZlcnRlZCB0byBKU09OIFNjaGVtYSBhdCBjb250cmFjdCBjcmVhdGlvbiB0aW1lLlxuICovXG5cbi8vIEZhY3RvcnlcbmV4cG9ydCB7IGRlZmluZUNvbnRyYWN0IH0gZnJvbSAnLi9kZWZpbmVDb250cmFjdC5qcyc7XG5cbi8vIFNjaGVtYSB1dGlsaXRpZXNcbmV4cG9ydCB7IG5vcm1hbGl6ZVNjaGVtYSwgem9kVG9Kc29uU2NoZW1hIH0gZnJvbSAnLi9zY2hlbWEuanMnO1xuXG4vLyBPcGVuQVBJIGdlbmVyYXRvclxuZXhwb3J0IHsgZ2VuZXJhdGVPcGVuQVBJIH0gZnJvbSAnLi9vcGVuYXBpLmpzJztcblxuLy8gVHlwZXNcbmV4cG9ydCB0eXBlIHtcbiAgRmxvd0NoYXJ0Q29udHJhY3QsXG4gIEZsb3dDaGFydENvbnRyYWN0T3B0aW9ucyxcbiAgSnNvblNjaGVtYSxcbiAgT3BlbkFQSU9wdGlvbnMsXG4gIE9wZW5BUElTcGVjLFxuICBTY2hlbWFJbnB1dCxcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG4iXX0=
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbnRyYWN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBCQUEwQjtBQUMxQjs7Ozs7Ozs7R0FRRztBQUVILG1CQUFtQjtBQUNuQixPQUFPLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxNQUFNLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGlzdGFuYnVsIGlnbm9yZSBmaWxlICovXG4vKipcbiAqIGNvbnRyYWN0LyDigJQgU2NoZW1hIG5vcm1hbGl6YXRpb24gZm9yIHNlbGYtZGVzY3JpYmluZyBjaGFydHMuXG4gKlxuICogRmxvd0NoYXJ0QnVpbGRlci5jb250cmFjdCBvd25zIHNjaGVtYSBhdHRhY2htZW50LiBSdW5uYWJsZUNoYXJ0Lm1ha2VSdW5uYWJsZVxuICogb3ducyBjaGFydC50b09wZW5BUEkgYW5kIGNoYXJ0LnRvTUNQVG9vbDsgYm90aCBub3JtYWxpemUgc2NoZW1hcyBoZXJlLlxuICpcbiAqIFplcm8gcnVudGltZSBkZXBzIG9uIFpvZCDigJQgWm9kIHNjaGVtYXMgZGV0ZWN0ZWQgdmlhIGR1Y2stdHlwaW5nIGFuZFxuICogY29udmVydGVkIHRvIEpTT04gU2NoZW1hIHdoZW4gYSBjaGFydCBpcyBkZXNjcmliZWQuXG4gKi9cblxuLy8gU2NoZW1hIHV0aWxpdGllc1xuZXhwb3J0IHsgbm9ybWFsaXplU2NoZW1hLCB6b2RUb0pzb25TY2hlbWEgfSBmcm9tICcuL3NjaGVtYS5qcyc7XG5cbi8vIFR5cGVzXG5leHBvcnQgdHlwZSB7IEpzb25TY2hlbWEsIFNjaGVtYUlucHV0IH0gZnJvbSAnLi90eXBlcy5qcyc7XG4iXX0=
|
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* contract/types.ts —
|
|
2
|
+
* contract/types.ts — Schema types for the FlowChart contract layer.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* (inputMapper/outputMapper) but at the top-level flowchart boundary.
|
|
4
|
+
* JsonSchema and SchemaInput describe the normalization boundary. The chart's
|
|
5
|
+
* own OpenAPI options are `ChartOpenAPIOptions` (runner/RunnableChart.ts).
|
|
7
6
|
*/
|
|
8
|
-
import type { FlowChart } from '../builder/types.js';
|
|
9
7
|
export type JsonSchema = {
|
|
10
8
|
type?: string | string[];
|
|
11
9
|
properties?: Record<string, JsonSchema>;
|
|
@@ -27,79 +25,3 @@ export type SchemaInput = JsonSchema | {
|
|
|
27
25
|
def: unknown;
|
|
28
26
|
[key: string]: unknown;
|
|
29
27
|
};
|
|
30
|
-
export interface FlowChartContractOptions<_TInput = unknown, TOutput = unknown> {
|
|
31
|
-
/** Schema describing the input (readOnlyContext) shape. Zod or JSON Schema. */
|
|
32
|
-
inputSchema?: SchemaInput;
|
|
33
|
-
/** Schema describing the output shape. Zod or JSON Schema. */
|
|
34
|
-
outputSchema?: SchemaInput;
|
|
35
|
-
/** Maps the final scope state into the response shape. */
|
|
36
|
-
outputMapper?: (finalScope: Record<string, unknown>) => TOutput;
|
|
37
|
-
}
|
|
38
|
-
export interface FlowChartContract<_TInput = unknown, TOutput = unknown> {
|
|
39
|
-
/**
|
|
40
|
-
* Prototype-linked view of the original compiled FlowChart.
|
|
41
|
-
*
|
|
42
|
-
* Own properties (inputSchema, outputSchema, outputMapper) are shadowed here
|
|
43
|
-
* so that the contract's values take precedence over builder-set values.
|
|
44
|
-
* All other fields (root, stageMap, methods) are inherited via the prototype
|
|
45
|
-
* chain with zero copying. The original chart is never mutated.
|
|
46
|
-
*
|
|
47
|
-
* ⚠️ Do NOT use Object.keys(), spread ({...chart}), or JSON.stringify() on
|
|
48
|
-
* this object — it will only see own (shadowed) properties. Use named
|
|
49
|
-
* property access or chart.toSpec() instead.
|
|
50
|
-
*/
|
|
51
|
-
chart: FlowChart;
|
|
52
|
-
/** JSON Schema for the input (normalized from Zod or raw). */
|
|
53
|
-
inputSchema?: JsonSchema;
|
|
54
|
-
/** JSON Schema for the output (normalized from Zod or raw). */
|
|
55
|
-
outputSchema?: JsonSchema;
|
|
56
|
-
/** Maps the final scope state into the response shape. */
|
|
57
|
-
outputMapper?: (finalScope: Record<string, unknown>) => TOutput;
|
|
58
|
-
/** Auto-generated OpenAPI spec. Description is read from `chart.description` (pre-built at build time). */
|
|
59
|
-
toOpenAPI(options?: OpenAPIOptions): OpenAPISpec;
|
|
60
|
-
}
|
|
61
|
-
export interface OpenAPIOptions {
|
|
62
|
-
/** API version string (default: "1.0.0"). */
|
|
63
|
-
version?: string;
|
|
64
|
-
/** Base path prefix (default: "/"). */
|
|
65
|
-
basePath?: string;
|
|
66
|
-
/** HTTP method for the execute endpoint (default: "post"). */
|
|
67
|
-
method?: string;
|
|
68
|
-
}
|
|
69
|
-
export interface OpenAPISpec {
|
|
70
|
-
openapi: '3.1.0';
|
|
71
|
-
info: {
|
|
72
|
-
title: string;
|
|
73
|
-
description: string;
|
|
74
|
-
version: string;
|
|
75
|
-
};
|
|
76
|
-
paths: Record<string, Record<string, OpenAPIOperation>>;
|
|
77
|
-
components?: {
|
|
78
|
-
schemas?: Record<string, JsonSchema>;
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
export interface OpenAPIOperation {
|
|
82
|
-
operationId: string;
|
|
83
|
-
summary: string;
|
|
84
|
-
description: string;
|
|
85
|
-
requestBody?: {
|
|
86
|
-
required: boolean;
|
|
87
|
-
content: {
|
|
88
|
-
'application/json': {
|
|
89
|
-
schema: JsonSchema | {
|
|
90
|
-
$ref: string;
|
|
91
|
-
};
|
|
92
|
-
};
|
|
93
|
-
};
|
|
94
|
-
};
|
|
95
|
-
responses: Record<string, {
|
|
96
|
-
description: string;
|
|
97
|
-
content?: {
|
|
98
|
-
'application/json': {
|
|
99
|
-
schema: JsonSchema | {
|
|
100
|
-
$ref: string;
|
|
101
|
-
};
|
|
102
|
-
};
|
|
103
|
-
};
|
|
104
|
-
}>;
|
|
105
|
-
}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* contract/types.ts —
|
|
2
|
+
* contract/types.ts — Schema types for the FlowChart contract layer.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* (inputMapper/outputMapper) but at the top-level flowchart boundary.
|
|
4
|
+
* JsonSchema and SchemaInput describe the normalization boundary. The chart's
|
|
5
|
+
* own OpenAPI options are `ChartOpenAPIOptions` (runner/RunnableChart.ts).
|
|
7
6
|
*/
|
|
8
7
|
export {};
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2NvbnRyYWN0L3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBjb250cmFjdC90eXBlcy50cyDigJQgU2NoZW1hIHR5cGVzIGZvciB0aGUgRmxvd0NoYXJ0IGNvbnRyYWN0IGxheWVyLlxuICpcbiAqIEpzb25TY2hlbWEgYW5kIFNjaGVtYUlucHV0IGRlc2NyaWJlIHRoZSBub3JtYWxpemF0aW9uIGJvdW5kYXJ5LiBUaGUgY2hhcnQnc1xuICogb3duIE9wZW5BUEkgb3B0aW9ucyBhcmUgYENoYXJ0T3BlbkFQSU9wdGlvbnNgIChydW5uZXIvUnVubmFibGVDaGFydC50cykuXG4gKi9cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBKU09OIFNjaGVtYSAoc3Vic2V0IG9mIEpTT04gU2NoZW1hIERyYWZ0IDIwMjAtMTIgLyBPcGVuQVBJIDMuMSlcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSBKc29uU2NoZW1hID0ge1xuICB0eXBlPzogc3RyaW5nIHwgc3RyaW5nW107XG4gIHByb3BlcnRpZXM/OiBSZWNvcmQ8c3RyaW5nLCBKc29uU2NoZW1hPjtcbiAgcmVxdWlyZWQ/OiBzdHJpbmdbXTtcbiAgaXRlbXM/OiBKc29uU2NoZW1hO1xuICBlbnVtPzogdW5rbm93bltdO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgZGVmYXVsdD86IHVua25vd247XG4gIGZvcm1hdD86IHN0cmluZztcbiAgYWRkaXRpb25hbFByb3BlcnRpZXM/OiBib29sZWFuIHwgSnNvblNjaGVtYTtcbiAgb25lT2Y/OiBKc29uU2NoZW1hW107XG4gIGFueU9mPzogSnNvblNjaGVtYVtdO1xuICBhbGxPZj86IEpzb25TY2hlbWFbXTtcbiAgJHJlZj86IHN0cmluZztcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn07XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU2NoZW1hIElucHV0IOKAlCBhY2NlcHRzIGVpdGhlciBab2Qgc2NoZW1hIG9yIHJhdyBKU09OIFNjaGVtYVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKiBBbnl0aGluZyB3aXRoIGEgYGRlZmAgKFpvZCB2NCkgb3IgYF9kZWZgIChab2QgdjMpIHByb3BlcnR5IGlzIHRyZWF0ZWQgYXMgYSBab2Qgc2NoZW1hLiAqL1xuZXhwb3J0IHR5cGUgU2NoZW1hSW5wdXQgPSBKc29uU2NoZW1hIHwgeyBkZWY6IHVua25vd247IFtrZXk6IHN0cmluZ106IHVua25vd24gfTtcbiJdfQ==
|
|
@@ -9,47 +9,20 @@
|
|
|
9
9
|
* - A filter: { creditScore: { gt: 700 } } (captures reads + operators + thresholds)
|
|
10
10
|
*/
|
|
11
11
|
import { isDevMode } from '../devMode.js';
|
|
12
|
+
import { requireDecisionScopeRuntime } from '../scope/runtime.js';
|
|
12
13
|
import { evaluateFilter } from './evaluator.js';
|
|
13
14
|
import { EvidenceCollector } from './evidence.js';
|
|
14
15
|
import { DECISION_RESULT } from './types.js';
|
|
15
16
|
// -- Scope accessor helpers --------------------------------------------------
|
|
16
|
-
function
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const s = scope;
|
|
26
|
-
if (typeof s.$detachScopeRecorder === 'function')
|
|
27
|
-
return s.$detachScopeRecorder.bind(s);
|
|
28
|
-
if (typeof s.detachScopeRecorder === 'function')
|
|
29
|
-
return s.detachScopeRecorder.bind(s);
|
|
30
|
-
return undefined;
|
|
31
|
-
}
|
|
32
|
-
function getValueFn(scope) {
|
|
33
|
-
const s = scope;
|
|
34
|
-
// Check $getValue first: on TypedScope, accessing .getValue triggers a spurious
|
|
35
|
-
// onRead for key "getValue" via the Proxy get trap. $getValue routes through
|
|
36
|
-
// SCOPE_METHOD_NAMES and avoids the state-read path.
|
|
37
|
-
if (typeof s.$getValue === 'function')
|
|
38
|
-
return s.$getValue.bind(s);
|
|
39
|
-
if (typeof s.getValue === 'function')
|
|
40
|
-
return s.getValue.bind(s);
|
|
41
|
-
return () => undefined;
|
|
42
|
-
}
|
|
43
|
-
function getRedactedFn(scope) {
|
|
44
|
-
const s = scope;
|
|
45
|
-
// Try $toRaw() first (TypedScope), then direct
|
|
46
|
-
const raw = typeof s.$toRaw === 'function' ? s.$toRaw() : s;
|
|
47
|
-
const r = raw;
|
|
48
|
-
if (typeof r.getRedactedKeys === 'function') {
|
|
49
|
-
const keys = r.getRedactedKeys();
|
|
50
|
-
return (key) => keys.has(key);
|
|
51
|
-
}
|
|
52
|
-
return () => false;
|
|
17
|
+
function scopeAccessors(scope) {
|
|
18
|
+
const { target } = requireDecisionScopeRuntime(scope);
|
|
19
|
+
const keys = target.getRedactedKeys?.();
|
|
20
|
+
return {
|
|
21
|
+
attachFn: target.attachScopeRecorder?.bind(target),
|
|
22
|
+
detachFn: target.detachScopeRecorder?.bind(target),
|
|
23
|
+
valueFn: target.getValue?.bind(target) ?? (() => undefined),
|
|
24
|
+
redactedFn: (key) => keys?.has(key) ?? false,
|
|
25
|
+
};
|
|
53
26
|
}
|
|
54
27
|
// -- evaluate a single rule --------------------------------------------------
|
|
55
28
|
function evaluateRule(scope, rule, index, attachFn, detachFn, valueFn, redactedFn) {
|
|
@@ -168,10 +141,7 @@ function normalizeDefaultBranch(defaultBranch) {
|
|
|
168
141
|
* catch-all instead. Unknown filter operators also never match (dev mode warns).
|
|
169
142
|
*/
|
|
170
143
|
export function decide(scope, rules, defaultBranch) {
|
|
171
|
-
const attachFn =
|
|
172
|
-
const detachFn = getDetachFn(scope);
|
|
173
|
-
const valueFn = getValueFn(scope);
|
|
174
|
-
const redactedFn = getRedactedFn(scope);
|
|
144
|
+
const { attachFn, detachFn, valueFn, redactedFn } = scopeAccessors(scope);
|
|
175
145
|
const { branch: defaultBranchId, label: defaultLabel } = normalizeDefaultBranch(defaultBranch);
|
|
176
146
|
// Declared once, spread into BOTH exits below — deliberately. A default's
|
|
177
147
|
// meaning is a property of the DECIDER, not of the run: it must be in the
|
|
@@ -220,10 +190,7 @@ export function decide(scope, rules, defaultBranch) {
|
|
|
220
190
|
* Unknown filter operators also never match (dev mode warns).
|
|
221
191
|
*/
|
|
222
192
|
export function select(scope, rules) {
|
|
223
|
-
const attachFn =
|
|
224
|
-
const detachFn = getDetachFn(scope);
|
|
225
|
-
const valueFn = getValueFn(scope);
|
|
226
|
-
const redactedFn = getRedactedFn(scope);
|
|
193
|
+
const { attachFn, detachFn, valueFn, redactedFn } = scopeAccessors(scope);
|
|
227
194
|
const evaluatedRules = [];
|
|
228
195
|
const selectedBranches = [];
|
|
229
196
|
for (const [index, rule] of rules.entries()) {
|
|
@@ -239,4 +206,4 @@ export function select(scope, rules) {
|
|
|
239
206
|
};
|
|
240
207
|
return { branches: selectedBranches, [DECISION_RESULT]: true, evidence };
|
|
241
208
|
}
|
|
242
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjaWRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9kZWNpZGUvZGVjaWRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQWNsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRTdDLCtFQUErRTtBQUUvRSxTQUFTLFdBQVcsQ0FBQyxLQUFjO0lBQ2pDLE1BQU0sQ0FBQyxHQUFHLEtBQWdDLENBQUM7SUFDM0MsSUFBSSxPQUFPLENBQUMsQ0FBQyxvQkFBb0IsS0FBSyxVQUFVO1FBQUUsT0FBTyxDQUFDLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hGLElBQUksT0FBTyxDQUFDLENBQUMsbUJBQW1CLEtBQUssVUFBVTtRQUFFLE9BQU8sQ0FBQyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RixPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsS0FBYztJQUNqQyxNQUFNLENBQUMsR0FBRyxLQUFnQyxDQUFDO0lBQzNDLElBQUksT0FBTyxDQUFDLENBQUMsb0JBQW9CLEtBQUssVUFBVTtRQUFFLE9BQU8sQ0FBQyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RixJQUFJLE9BQU8sQ0FBQyxDQUFDLG1CQUFtQixLQUFLLFVBQVU7UUFBRSxPQUFPLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEYsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztB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QkFBZ0IsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQztBQUMzRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBkZWNpZGUvZGVjaWRlIC0tIENvcmUgZGVjaWRlKCkgYW5kIHNlbGVjdCgpIGhlbHBlciBmdW5jdGlvbnMuXG4gKlxuICogZGVjaWRlKCkgZXZhbHVhdGVzIHJ1bGVzIGluIG9yZGVyIChmaXJzdC1tYXRjaCkgYW5kIHJldHVybnMgYSBEZWNpc2lvblJlc3VsdC5cbiAqIHNlbGVjdCgpIGV2YWx1YXRlcyBBTEwgcnVsZXMgYW5kIHJldHVybnMgYSBTZWxlY3Rpb25SZXN1bHQgd2l0aCBhbGwgbWF0Y2hlcy5cbiAqXG4gKiBFYWNoIHJ1bGUncyBgd2hlbmAgY2FuIGJlOlxuICogLSBBIGZ1bmN0aW9uOiAocykgPT4gcy5jcmVkaXRTY29yZSA+IDcwMCAgKGF1dG8tY2FwdHVyZXMgcmVhZHMgdmlhIHRlbXAgcmVjb3JkZXIpXG4gKiAtIEEgZmlsdGVyOiAgIHsgY3JlZGl0U2NvcmU6IHsgZ3Q6IDcwMCB9IH0gKGNhcHR1cmVzIHJlYWRzICsgb3BlcmF0b3JzICsgdGhyZXNob2xkcylcbiAqL1xuXG5pbXBvcnQgeyBpc0Rldk1vZGUgfSBmcm9tICcuLi9kZXZNb2RlLmpzJztcbmltcG9ydCB0eXBlIHsgU2NvcGVSZWNvcmRlciB9IGZyb20gJy4uL3Njb3BlL3R5cGVzLmpzJztcbmltcG9ydCB7IGV2YWx1YXRlRmlsdGVyIH0gZnJvbSAnLi9ldmFsdWF0b3IuanMnO1xuaW1wb3J0IHsgRXZpZGVuY2VDb2xsZWN0b3IgfSBmcm9tICcuL2V2aWRlbmNlLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgRGVjaWRlUnVsZSxcbiAgRGVjaXNpb25FdmlkZW5jZSxcbiAgRGVjaXNpb25SZXN1bHQsXG4gIERlZmF1bHRCcmFuY2gsXG4gIEZpbHRlckNvbmRpdGlvbixcbiAgRmlsdGVyUnVsZUV2aWRlbmNlLFxuICBGdW5jdGlvblJ1bGVFdmlkZW5jZSxcbiAgUnVsZUV2aWRlbmNlLFxuICBTZWxlY3Rpb25FdmlkZW5jZSxcbiAgU2VsZWN0aW9uUmVzdWx0LFxuICBXaGVyZUZpbHRlcixcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBERUNJU0lPTl9SRVNVTFQgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLy8gLS0gU2NvcGUgYWNjZXNzb3IgaGVscGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBnZXRBdHRhY2hGbihzY29wZTogdW5rbm93bik6ICgocjogU2NvcGVSZWNvcmRlcikgPT4gdm9pZCkgfCB1bmRlZmluZWQge1xuICBjb25zdCBzID0gc2NvcGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGlmICh0eXBlb2Ygcy4kYXR0YWNoU2NvcGVSZWNvcmRlciA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHMuJGF0dGFjaFNjb3BlUmVjb3JkZXIuYmluZChzKTtcbiAgaWYgKHR5cGVvZiBzLmF0dGFjaFNjb3BlUmVjb3JkZXIgPT09ICdmdW5jdGlvbicpIHJldHVybiBzLmF0dGFjaFNjb3BlUmVjb3JkZXIuYmluZChzKTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0RGV0YWNoRm4oc2NvcGU6IHVua25vd24pOiAoKGlkOiBzdHJpbmcpID0+IHZvaWQpIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcyA9IHNjb3BlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBpZiAodHlwZW9mIHMuJGRldGFjaFNjb3BlUmVjb3JkZXIgPT09ICdmdW5jdGlvbicpIHJldHVybiBzLiRkZXRhY2hTY29wZVJlY29yZGVyLmJpbmQocyk7XG4gIGlmICh0eXBlb2Ygcy5kZXRhY2hTY29wZVJlY29yZGVyID09PSAnZnVuY3Rpb24nKSByZXR1cm4gcy5kZXRhY2hTY29wZVJlY29yZGVyLmJpbmQocyk7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldFZhbHVlRm4oc2NvcGU6IHVua25vd24pOiAoa2V5OiBzdHJpbmcpID0+IHVua25vd24ge1xuICBjb25zdCBzID0gc2NvcGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8vIENoZWNrICRnZXRWYWx1ZSBmaXJzdDogb24gVHlwZWRTY29wZSwgYWNjZXNzaW5nIC5nZXRWYWx1ZSB0cmlnZ2VycyBhIHNwdXJpb3VzXG4gIC8vIG9uUmVhZCBmb3Iga2V5IFwiZ2V0VmFsdWVcIiB2aWEgdGhlIFByb3h5IGdldCB0cmFwLiAkZ2V0VmFsdWUgcm91dGVzIHRocm91Z2hcbiAgLy8gU0NPUEVfTUVUSE9EX05BTUVTIGFuZCBhdm9pZHMgdGhlIHN0YXRlLXJlYWQgcGF0aC5cbiAgaWYgKHR5cGVvZiBzLiRnZXRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHMuJGdldFZhbHVlLmJpbmQocyk7XG4gIGlmICh0eXBlb2Ygcy5nZXRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHMuZ2V0VmFsdWUuYmluZChzKTtcbiAgcmV0dXJuICgpID0+IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0UmVkYWN0ZWRGbihzY29wZTogdW5rbm93bik6IChrZXk6IHN0cmluZykgPT4gYm9vbGVhbiB7XG4gIGNvbnN0IHMgPSBzY29wZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLy8gVHJ5ICR0b1JhdygpIGZpcnN0IChUeXBlZFNjb3BlKSwgdGhlbiBkaXJlY3RcbiAgY29uc3QgcmF3ID0gdHlwZW9mIHMuJHRvUmF3ID09PSAnZnVuY3Rpb24nID8gcy4kdG9SYXcoKSA6IHM7XG4gIGNvbnN0IHIgPSByYXcgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGlmICh0eXBlb2Ygci5nZXRSZWRhY3RlZEtleXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zdCBrZXlzID0gci5nZXRSZWRhY3RlZEtleXMoKSBhcyBTZXQ8c3RyaW5nPjtcbiAgICByZXR1cm4gKGtleTogc3RyaW5nKSA9PiBrZXlzLmhhcyhrZXkpO1xuICB9XG4gIHJldHVybiAoKSA9PiBmYWxzZTtcbn1cblxuLy8gLS0gZXZhbHVhdGUgYSBzaW5nbGUgcnVsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBldmFsdWF0ZVJ1bGU8UyBleHRlbmRzIG9iamVjdD4oXG4gIHNjb3BlOiBTLFxuICBydWxlOiBEZWNpZGVSdWxlPFM+LFxuICBpbmRleDogbnVtYmVyLFxuICBhdHRhY2hGbj86IChyOiBTY29wZVJlY29yZGVyKSA9PiB2b2lkLFxuICBkZXRhY2hGbj86IChpZDogc3RyaW5nKSA9PiB2b2lkLFxuICB2YWx1ZUZuPzogKGtleTogc3RyaW5nKSA9PiB1bmtub3duLFxuICByZWRhY3RlZEZuPzogKGtleTogc3RyaW5nKSA9PiBib29sZWFuLFxuKTogUnVsZUV2aWRlbmNlIHtcbiAgaWYgKHR5cGVvZiBydWxlLndoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBGVU5DVElPTiBQQVRIOiB0ZW1wIHJlY29yZGVyIGNhcHR1cmVzIHJlYWRzIChsYXp5IOKAlCBza2lwIGlmIG5vIHJlY29yZGVyIHN1cHBvcnQpXG4gICAgY29uc3QgaGFzUmVjb3JkZXJTdXBwb3J0ID0gQm9vbGVhbihhdHRhY2hGbik7XG4gICAgY29uc3QgY29sbGVjdG9yID0gaGFzUmVjb3JkZXJTdXBwb3J0ID8gbmV3IEV2aWRlbmNlQ29sbGVjdG9yKCkgOiB1bmRlZmluZWQ7XG4gICAgaWYgKGNvbGxlY3RvciAmJiBhdHRhY2hGbikgYXR0YWNoRm4oY29sbGVjdG9yKTtcblxuICAgIGxldCBtYXRjaGVkOiBib29sZWFuO1xuICAgIGxldCBtYXRjaEVycm9yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIG1hdGNoZWQgPSBydWxlLndoZW4oc2NvcGUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIG1hdGNoZWQgPSBmYWxzZTtcbiAgICAgIC8vIENhcHR1cmUgdGhlIGVycm9yIGZvciBkZWJ1Z2dpbmcg4oCUIHN1cmZhY2UgaXQgaW4gZXZpZGVuY2UgaW5zdGVhZCBvZiBzd2FsbG93aW5nIHNpbGVudGx5XG4gICAgICBtYXRjaEVycm9yID0gZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpO1xuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gcnVsZS5sYWJlbCA/IGAgKCcke3J1bGUubGFiZWx9JylgIDogJyc7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybihgW2Zvb3RwcmludF0gZGVjaWRlKCkgcnVsZSAke2luZGV4fSR7bGFiZWx9IHRocmV3IGR1cmluZyBldmFsdWF0aW9uOiAke21hdGNoRXJyb3J9YCk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChjb2xsZWN0b3IgJiYgZGV0YWNoRm4pIGRldGFjaEZuKGNvbGxlY3Rvci5pZCk7XG4gICAgfVxuXG4gICAgY29uc3QgZXZpZGVuY2U6IEZ1bmN0aW9uUnVsZUV2aWRlbmNlID0ge1xuICAgICAgdHlwZTogJ2Z1bmN0aW9uJyxcbiAgICAgIHJ1bGVJbmRleDogaW5kZXgsXG4gICAgICBicmFuY2g6IHJ1bGUudGhlbixcbiAgICAgIG1hdGNoZWQsXG4gICAgICBsYWJlbDogcnVsZS5sYWJlbCxcbiAgICAgIC8vIFBhcnRpYWwgcmVhZHM6IGlmIHJ1bGUgdGhyZXcgYWZ0ZXIgc29tZSBnZXRWYWx1ZSgpIGNhbGxzLCBjb2xsZWN0b3IgaG9sZHMgcmVhZHMgdXAgdG8gdGhlIHRocm93IHBvaW50XG4gICAgICBpbnB1dHM6IGNvbGxlY3Rvcj8uZ2V0SW5wdXRzKCkgPz8gW10sXG4gICAgICAuLi4obWF0Y2hFcnJvciAhPT0gdW5kZWZpbmVkICYmIHsgbWF0Y2hFcnJvciB9KSxcbiAgICB9O1xuICAgIHJldHVybiBldmlkZW5jZTtcbiAgfSBlbHNlIHtcbiAgICAvLyBGSUxURVIgUEFUSDogcmVhZHMgdmFsdWVzIGRpcmVjdGx5IHZpYSBjYWxsYmFja3MgKG5vIHJlY29yZGVyKTsgZXhjZXB0aW9ucyB0cmVhdGVkIGFzIG5vbi1tYXRjaFxuICAgIGNvbnN0IHJlc29sdmVkVmFsdWVGbiA9IHZhbHVlRm4gPz8gKCgpID0+IHVuZGVmaW5lZCk7XG4gICAgY29uc3QgcmVzb2x2ZWRSZWRhY3RlZEZuID0gcmVkYWN0ZWRGbiA/PyAoKCkgPT4gZmFsc2UpO1xuICAgIGxldCBmaWx0ZXJNYXRjaGVkID0gZmFsc2U7XG4gICAgbGV0IGZpbHRlckNvbmRpdGlvbnM6IEZpbHRlckNvbmRpdGlvbltdID0gW107XG4gICAgbGV0IG1hdGNoRXJyb3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZXZhbHVhdGVGaWx0ZXIocmVzb2x2ZWRWYWx1ZUZuLCByZXNvbHZlZFJlZGFjdGVkRm4sIHJ1bGUud2hlbiBhcyBXaGVyZUZpbHRlcjxTPik7XG4gICAgICBmaWx0ZXJNYXRjaGVkID0gcmVzdWx0Lm1hdGNoZWQ7XG4gICAgICBmaWx0ZXJDb25kaXRpb25zID0gcmVzdWx0LmNvbmRpdGlvbnM7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZmlsdGVyTWF0Y2hlZCA9IGZhbHNlO1xuICAgICAgZmlsdGVyQ29uZGl0aW9ucyA9IFtdO1xuICAgICAgLy8gQ2FwdHVyZSB0aGUgZXJyb3IgZm9yIGRlYnVnZ2luZyDigJQgc3VyZmFjZSBpdCBpbiBldmlkZW5jZSBpbnN0ZWFkIG9mIHN3YWxsb3dpbmcgc2lsZW50bHlcbiAgICAgIG1hdGNoRXJyb3IgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSk7XG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBydWxlLmxhYmVsID8gYCAoJyR7cnVsZS5sYWJlbH0nKWAgOiAnJztcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS53YXJuKGBbZm9vdHByaW50XSBkZWNpZGUoKSBmaWx0ZXIgcnVsZSAke2luZGV4fSR7bGFiZWx9IHRocmV3IGR1cmluZyBldmFsdWF0aW9uOiAke21hdGNoRXJyb3J9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZXZpZGVuY2U6IEZpbHRlclJ1bGVFdmlkZW5jZSA9IHtcbiAgICAgIHR5cGU6ICdmaWx0ZXInLFxuICAgICAgcnVsZUluZGV4OiBpbmRleCxcbiAgICAgIGJyYW5jaDogcnVsZS50aGVuLFxuICAgICAgbWF0Y2hlZDogZmlsdGVyTWF0Y2hlZCxcbiAgICAgIGxhYmVsOiBydWxlLmxhYmVsLFxuICAgICAgY29uZGl0aW9uczogZmlsdGVyQ29uZGl0aW9ucyxcbiAgICAgIC4uLihtYXRjaEVycm9yICE9PSB1bmRlZmluZWQgJiYgeyBtYXRjaEVycm9yIH0pLFxuICAgIH07XG4gICAgcmV0dXJuIGV2aWRlbmNlO1xuICB9XG59XG5cbi8vIC0tIGRlZmF1bHQgYnJhbmNoIG5vcm1hbGl6YXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBDb2xsYXBzZXMgYm90aCB7QGxpbmsgRGVmYXVsdEJyYW5jaH0gZm9ybXMgdG8gb25lIHNoYXBlLCBvbmNlLCBhdCB0aGUgdG9wIG9mXG4gKiBgZGVjaWRlKClgLiBBIGJhcmUgc3RyaW5nIHlpZWxkcyBgbGFiZWw6IHVuZGVmaW5lZGAsIHdoaWNoIGV2ZXJ5IGRvd25zdHJlYW1cbiAqIHNwcmVhZCB0aGVuIG9taXRzIOKAlCBzbyB0aGUgc3RyaW5nIGNhbGwgc2l0ZSBwcm9kdWNlcyBleGFjdGx5IHRoZSBldmlkZW5jZSBpdFxuICogcHJvZHVjZWQgYmVmb3JlIHRoaXMgcGFyYW1ldGVyIHdhcyB3aWRlbmVkLlxuICpcbiAqIE9OTFkgdGhlIG9iamVjdCBmb3JtIGlzIHVud3JhcHBlZDsgZXZlcnkgb3RoZXIgdmFsdWUgcGFzc2VzIHRocm91Z2ggYXMgdGhlXG4gKiBicmFuY2gsIHVudG91Y2hlZC4gVGhhdCBpcyBkZWxpYmVyYXRlOiBKYXZhU2NyaXB0IGNhbGxlcnMgcmVhY2ggYGRlY2lkZSgpYFxuICogd2l0aCB0aGUgdGhpcmQgYXJndW1lbnQgTUlTU0lORyAoYSBydWxlIHNldCB0aGF0IGNvdmVycyBldmVyeSBjYXNlIG5ldmVyXG4gKiBjb25zdWx0cyBhIGRlZmF1bHQpLCBhbmQgYmVmb3JlIHRoZSBwYXJhbWV0ZXIgd2lkZW5lZCB0aGF0IGB1bmRlZmluZWRgXG4gKiBzaW1wbHkgbGFuZGVkIG9uIGBldmlkZW5jZS5kZWZhdWx0YC4gSXQgc3RpbGwgZG9lcyDigJQgYSBub3JtYWxpemF0aW9uIHRoYXRcbiAqIG9ubHkgdW5kZXJzdG9vZCBzdHJpbmdzIHdvdWxkIHR1cm4gdGhvc2UgY2FsbCBzaXRlcyBpbnRvIGEgVHlwZUVycm9yLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVEZWZhdWx0QnJhbmNoKGRlZmF1bHRCcmFuY2g6IERlZmF1bHRCcmFuY2gpOiB7IGJyYW5jaDogc3RyaW5nOyBsYWJlbD86IHN0cmluZyB9IHtcbiAgcmV0dXJuIHR5cGVvZiBkZWZhdWx0QnJhbmNoID09PSAnb2JqZWN0JyAmJiBkZWZhdWx0QnJhbmNoICE9PSBudWxsXG4gICAgPyBkZWZhdWx0QnJhbmNoXG4gICAgOiB7IGJyYW5jaDogZGVmYXVsdEJyYW5jaCBhcyBzdHJpbmcgfTtcbn1cblxuLy8gLS0gZGVjaWRlKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEV2YWx1YXRlcyBydWxlcyBpbiBvcmRlciAoZmlyc3QtbWF0Y2gpLiBSZXR1cm5zIGEgYnJhbmRlZCBEZWNpc2lvblJlc3VsdC5cbiAqXG4gKiBAcGFyYW0gc2NvcGUgLSBUeXBlZFNjb3BlIG9yIFNjb3BlRmFjYWRlXG4gKiBAcGFyYW0gcnVsZXMgLSBBcnJheSBvZiBEZWNpZGVSdWxlIChmdW5jdGlvbiBvciBmaWx0ZXIgd2hlbiBjbGF1c2VzKVxuICogQHBhcmFtIGRlZmF1bHRCcmFuY2ggLSBCcmFuY2ggdGFrZW4gd2hlbiBubyBydWxlIG1hdGNoZXMuIEVpdGhlciB0aGUgYnJhbmNoXG4gKiAgIGlkIChgJ3JlamVjdGVkJ2ApIG9yIHRoZSBpZCBwbHVzIHdoYXQgZmFsbGluZyBiYWNrIHRvIGl0IE1FQU5TXG4gKiAgIChgeyBicmFuY2g6ICdyZWplY3RlZCcsIGxhYmVsOiAnTm8gcnVsZSBmaXJlZCcgfWApLiBUaGUgbGFiZWwgbGFuZHMgb25cbiAqICAgYGV2aWRlbmNlLmRlZmF1bHRMYWJlbGAg4oCUIHRoZSBkZWZhdWx0IGlzIGNob3NlbiBieSBubyBydWxlLCBzbyBpdCBpcyB0aGVcbiAqICAgb25lIGJyYW5jaCB0aGF0IGBydWxlc1tdLmxhYmVsYCBjYW4gbmV2ZXIgZGVzY3JpYmUuXG4gKlxuICogKipFcnJvciBiZWhhdmlvcjoqKiBJZiBhIGB3aGVuYCBmdW5jdGlvbiB0aHJvd3MgZHVyaW5nIGV2YWx1YXRpb24sIHRoZSBydWxlIGlzXG4gKiB0cmVhdGVkIGFzIG5vbi1tYXRjaGluZyAoYG1hdGNoZWQ6IGZhbHNlYCkgYW5kIHRoZSBlcnJvciBtZXNzYWdlIGlzIGNhcHR1cmVkIGluXG4gKiBgbWF0Y2hFcnJvcmAgb24gdGhhdCBydWxlJ3MgYFJ1bGVFdmlkZW5jZWAgZW50cnkuIEV4ZWN1dGlvbiBjb250aW51ZXMgd2l0aFxuICogc3Vic2VxdWVudCBydWxlczsgZXJyb3JzIGRvIG5vdCBwcm9wYWdhdGUgdG8gdGhlIGNhbGxlci5cbiAqXG4gKiAqKkVtcHR5LWZpbHRlciBiZWhhdmlvciAoYW50aS12YWN1b3VzLXRydXRoKToqKiBhIGZpbHRlciBydWxlIHdob3NlIGB3aGVuYCBpc1xuICogYHt9YCAobm8gZXZhbHVhYmxlIGNvbmRpdGlvbnMpIE5FVkVSIG1hdGNoZXMuIFRoaXMgZGVsaWJlcmF0ZWx5IGludmVydHMgdGhlXG4gKiBQcmlzbWEvU1FMIGB3aGVyZToge31gIGludHVpdGlvbiAoXCJtYXRjaCBldmVyeXRoaW5nXCIpIOKAlCBhIHJ1bGUgdGhhdCBhc3NlcnRzXG4gKiBub3RoaW5nIG11c3Qgbm90IHdpbiBhIGJyYW5jaCBvbiB2YWN1b3VzIHRydXRoLiBVc2UgYGRlZmF1bHRCcmFuY2hgIGZvciB0aGVcbiAqIGNhdGNoLWFsbCBpbnN0ZWFkLiBVbmtub3duIGZpbHRlciBvcGVyYXRvcnMgYWxzbyBuZXZlciBtYXRjaCAoZGV2IG1vZGUgd2FybnMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjaWRlPFMgZXh0ZW5kcyBvYmplY3Q+KFxuICBzY29wZTogUyxcbiAgcnVsZXM6IERlY2lkZVJ1bGU8Uz5bXSxcbiAgZGVmYXVsdEJyYW5jaDogRGVmYXVsdEJyYW5jaCxcbik6IERlY2lzaW9uUmVzdWx0IHtcbiAgY29uc3QgYXR0YWNoRm4gPSBnZXRBdHRhY2hGbihzY29wZSk7XG4gIGNvbnN0IGRldGFjaEZuID0gZ2V0RGV0YWNoRm4oc2NvcGUpO1xuICBjb25zdCB2YWx1ZUZuID0gZ2V0VmFsdWVGbihzY29wZSk7XG4gIGNvbnN0IHJlZGFjdGVkRm4gPSBnZXRSZWRhY3RlZEZuKHNjb3BlKTtcblxuICBjb25zdCB7IGJyYW5jaDogZGVmYXVsdEJyYW5jaElkLCBsYWJlbDogZGVmYXVsdExhYmVsIH0gPSBub3JtYWxpemVEZWZhdWx0QnJhbmNoKGRlZmF1bHRCcmFuY2gpO1xuICAvLyBEZWNsYXJlZCBvbmNlLCBzcHJlYWQgaW50byBCT1RIIGV4aXRzIGJlbG93IOKAlCBkZWxpYmVyYXRlbHkuIEEgZGVmYXVsdCdzXG4gIC8vIG1lYW5pbmcgaXMgYSBwcm9wZXJ0eSBvZiB0aGUgREVDSURFUiwgbm90IG9mIHRoZSBydW46IGl0IG11c3QgYmUgaW4gdGhlXG4gIC8vIGV2aWRlbmNlIG9mIHRoZSBydW4gd2hlcmUgYSBydWxlIHdvbiBqdXN0IGFzIG11Y2ggYXMgaW4gdGhlIHJ1biB0aGF0IGZlbGxcbiAgLy8gdGhyb3VnaC4gRW1pdCBpdCBvbmx5IG9uIHRoZSBmYWxsdGhyb3VnaCBhbmQgYW55IGNvbnN1bWVyIGhhcnZlc3RpbmcgYnJhbmNoXG4gIC8vIG1lYW5pbmdzIHdvdWxkIHdhdGNoIHRoZW0gYXBwZWFyIGFuZCBkaXNhcHBlYXIgd2l0aCB0aGUgZGF0YS5cbiAgY29uc3QgZGVmYXVsdE1lYW5pbmcgPSBkZWZhdWx0TGFiZWwgIT09IHVuZGVmaW5lZCA/IHsgZGVmYXVsdExhYmVsIH0gOiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgZXZhbHVhdGVkUnVsZXM6IFJ1bGVFdmlkZW5jZVtdID0gW107XG5cbiAgZm9yIChjb25zdCBbaW5kZXgsIHJ1bGVdIG9mIHJ1bGVzLmVudHJpZXMoKSkge1xuICAgIGNvbnN0IHJ1bGVFdmlkZW5jZSA9IGV2YWx1YXRlUnVsZShzY29wZSwgcnVsZSwgaW5kZXgsIGF0dGFjaEZuLCBkZXRhY2hGbiwgdmFsdWVGbiwgcmVkYWN0ZWRGbik7XG4gICAgZXZhbHVhdGVkUnVsZXMucHVzaChydWxlRXZpZGVuY2UpO1xuXG4gICAgaWYgKHJ1bGVFdmlkZW5jZS5tYXRjaGVkKSB7XG4gICAgICBjb25zdCBldmlkZW5jZTogRGVjaXNpb25FdmlkZW5jZSA9IHtcbiAgICAgICAgcnVsZXM6IGV2YWx1YXRlZFJ1bGVzLFxuICAgICAgICBjaG9zZW46IHJ1bGUudGhlbixcbiAgICAgICAgZGVmYXVsdDogZGVmYXVsdEJyYW5jaElkLFxuICAgICAgICAuLi5kZWZhdWx0TWVhbmluZyxcbiAgICAgIH07XG4gICAgICByZXR1cm4geyBicmFuY2g6IHJ1bGUudGhlbiwgW0RFQ0lTSU9OX1JFU1VMVF06IHRydWUsIGV2aWRlbmNlIH07XG4gICAgfVxuICB9XG5cbiAgLy8gRGVmYXVsdDogbm8gcnVsZSBtYXRjaGVkXG4gIGNvbnN0IGV2aWRlbmNlOiBEZWNpc2lvbkV2aWRlbmNlID0ge1xuICAgIHJ1bGVzOiBldmFsdWF0ZWRSdWxlcyxcbiAgICBjaG9zZW46IGRlZmF1bHRCcmFuY2hJZCxcbiAgICBkZWZhdWx0OiBkZWZhdWx0QnJhbmNoSWQsXG4gICAgLi4uZGVmYXVsdE1lYW5pbmcsXG4gIH07XG4gIHJldHVybiB7IGJyYW5jaDogZGVmYXVsdEJyYW5jaElkLCBbREVDSVNJT05fUkVTVUxUXTogdHJ1ZSwgZXZpZGVuY2UgfTtcbn1cblxuLy8gLS0gc2VsZWN0KCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEV2YWx1YXRlcyBBTEwgcnVsZXMgKG5vdCBmaXJzdC1tYXRjaCkuIFJldHVybnMgYSBicmFuZGVkIFNlbGVjdGlvblJlc3VsdC5cbiAqXG4gKiBAcGFyYW0gc2NvcGUgLSBUeXBlZFNjb3BlIG9yIFNjb3BlRmFjYWRlXG4gKiBAcGFyYW0gcnVsZXMgLSBBcnJheSBvZiBEZWNpZGVSdWxlIChmdW5jdGlvbiBvciBmaWx0ZXIgd2hlbiBjbGF1c2VzKVxuICpcbiAqICoqRXJyb3IgYmVoYXZpb3I6KiogSWYgYSBgd2hlbmAgZnVuY3Rpb24gdGhyb3dzIGR1cmluZyBldmFsdWF0aW9uLCB0aGUgcnVsZSBpc1xuICogdHJlYXRlZCBhcyBub24tbWF0Y2hpbmcgKGBtYXRjaGVkOiBmYWxzZWApIGFuZCB0aGUgZXJyb3IgbWVzc2FnZSBpcyBjYXB0dXJlZCBpblxuICogYG1hdGNoRXJyb3JgIG9uIHRoYXQgcnVsZSdzIGBSdWxlRXZpZGVuY2VgIGVudHJ5LiBFdmFsdWF0aW9uIGNvbnRpbnVlcyB3aXRoXG4gKiByZW1haW5pbmcgcnVsZXM7IGVycm9ycyBkbyBub3QgcHJvcGFnYXRlIHRvIHRoZSBjYWxsZXIuXG4gKlxuICogKipFbXB0eS1maWx0ZXIgYmVoYXZpb3IgKGFudGktdmFjdW91cy10cnV0aCk6KiogYSBmaWx0ZXIgcnVsZSB3aG9zZSBgd2hlbmAgaXNcbiAqIGB7fWAgKG5vIGV2YWx1YWJsZSBjb25kaXRpb25zKSBORVZFUiBtYXRjaGVzIOKAlCBzYW1lIHJ1bGUgYXMgYGRlY2lkZSgpYDsgYW5cbiAqIGFsd2F5cy1zZWxlY3RlZCBicmFuY2ggbXVzdCBiZSBleHByZXNzZWQgZXhwbGljaXRseSwgbm90IHZpYSBhbiBlbXB0eSBmaWx0ZXIuXG4gKiBVbmtub3duIGZpbHRlciBvcGVyYXRvcnMgYWxzbyBuZXZlciBtYXRjaCAoZGV2IG1vZGUgd2FybnMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0PFMgZXh0ZW5kcyBvYmplY3Q+KHNjb3BlOiBTLCBydWxlczogRGVjaWRlUnVsZTxTPltdKTogU2VsZWN0aW9uUmVzdWx0IHtcbiAgY29uc3QgYXR0YWNoRm4gPSBnZXRBdHRhY2hGbihzY29wZSk7XG4gIGNvbnN0IGRldGFjaEZuID0gZ2V0RGV0YWNoRm4oc2NvcGUpO1xuICBjb25zdCB2YWx1ZUZuID0gZ2V0VmFsdWVGbihzY29wZSk7XG4gIGNvbnN0IHJlZGFjdGVkRm4gPSBnZXRSZWRhY3RlZEZuKHNjb3BlKTtcblxuICBjb25zdCBldmFsdWF0ZWRSdWxlczogUnVsZUV2aWRlbmNlW10gPSBbXTtcbiAgY29uc3Qgc2VsZWN0ZWRCcmFuY2hlczogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IFtpbmRleCwgcnVsZV0gb2YgcnVsZXMuZW50cmllcygpKSB7XG4gICAgY29uc3QgcnVsZUV2aWRlbmNlID0gZXZhbHVhdGVSdWxlKHNjb3BlLCBydWxlLCBpbmRleCwgYXR0YWNoRm4sIGRldGFjaEZuLCB2YWx1ZUZuLCByZWRhY3RlZEZuKTtcbiAgICBldmFsdWF0ZWRSdWxlcy5wdXNoKHJ1bGVFdmlkZW5jZSk7XG5cbiAgICBpZiAocnVsZUV2aWRlbmNlLm1hdGNoZWQpIHtcbiAgICAgIHNlbGVjdGVkQnJhbmNoZXMucHVzaChydWxlLnRoZW4pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGV2aWRlbmNlOiBTZWxlY3Rpb25FdmlkZW5jZSA9IHtcbiAgICBydWxlczogZXZhbHVhdGVkUnVsZXMsXG4gICAgc2VsZWN0ZWQ6IHNlbGVjdGVkQnJhbmNoZXMsXG4gIH07XG4gIHJldHVybiB7IGJyYW5jaGVzOiBzZWxlY3RlZEJyYW5jaGVzLCBbREVDSVNJT05fUkVTVUxUXTogdHJ1ZSwgZXZpZGVuY2UgfTtcbn1cbiJdfQ==
|
|
209
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjaWRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9kZWNpZGUvZGVjaWRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQWNsRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRTdDLCtFQUErRTtBQUUvRSxTQUFTLGNBQWMsQ0FBQyxLQUFjO0lBQ3BDLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRywyQkFBMkIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0RCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsZUFBZSxFQUFFLEVBQUUsQ0FBQztJQUN4QyxPQUFPO1FBQ0wsUUFBUSxFQUFFLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ2xELFFBQVEsRUFBRSxNQUFNLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNsRCxPQUFPLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUM7UUFDM0QsVUFBVSxFQUFFLENBQUMsR0FBVyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUs7S0FDckQsQ0FBQztBQUNKLENBQUM7QUFFRCwrRUFBK0U7QUFFL0UsU0FBUyxZQUFZLENBQ25CLEtBQVEsRUFDUixJQUFtQixFQUNuQixLQUFhLEVBQ2IsUUFBcUMsRUFDckMsUUFB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QUFPLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQztBQUN4RSxDQUFDO0FBRUQsK0VBQStFO0FBRS9FOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQW1CLEtBQVEsRUFBRSxLQUFzQjtJQUN2RSxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTFFLE1BQU0sY0FBYyxHQUFtQixFQUFFLENBQUM7SUFDMUMsTUFBTSxnQkFBZ0IsR0FBYSxFQUFFLENBQUM7SUFFdEMsS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQzVDLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMvRixjQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRWxDLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3pCLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLFFBQVEsR0FBc0I7UUFDbEMsS0FBSyxFQUFFLGNBQWM7UUFDckIsUUFBUSxFQUFFLGdCQUFnQjtLQUMzQixDQUFDO0lBQ0YsT0FBTyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQztBQUMzRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBkZWNpZGUvZGVjaWRlIC0tIENvcmUgZGVjaWRlKCkgYW5kIHNlbGVjdCgpIGhlbHBlciBmdW5jdGlvbnMuXG4gKlxuICogZGVjaWRlKCkgZXZhbHVhdGVzIHJ1bGVzIGluIG9yZGVyIChmaXJzdC1tYXRjaCkgYW5kIHJldHVybnMgYSBEZWNpc2lvblJlc3VsdC5cbiAqIHNlbGVjdCgpIGV2YWx1YXRlcyBBTEwgcnVsZXMgYW5kIHJldHVybnMgYSBTZWxlY3Rpb25SZXN1bHQgd2l0aCBhbGwgbWF0Y2hlcy5cbiAqXG4gKiBFYWNoIHJ1bGUncyBgd2hlbmAgY2FuIGJlOlxuICogLSBBIGZ1bmN0aW9uOiAocykgPT4gcy5jcmVkaXRTY29yZSA+IDcwMCAgKGF1dG8tY2FwdHVyZXMgcmVhZHMgdmlhIHRlbXAgcmVjb3JkZXIpXG4gKiAtIEEgZmlsdGVyOiAgIHsgY3JlZGl0U2NvcmU6IHsgZ3Q6IDcwMCB9IH0gKGNhcHR1cmVzIHJlYWRzICsgb3BlcmF0b3JzICsgdGhyZXNob2xkcylcbiAqL1xuXG5pbXBvcnQgeyBpc0Rldk1vZGUgfSBmcm9tICcuLi9kZXZNb2RlLmpzJztcbmltcG9ydCB7IHJlcXVpcmVEZWNpc2lvblNjb3BlUnVudGltZSB9IGZyb20gJy4uL3Njb3BlL3J1bnRpbWUuanMnO1xuaW1wb3J0IHR5cGUgeyBTY29wZVJlY29yZGVyIH0gZnJvbSAnLi4vc2NvcGUvdHlwZXMuanMnO1xuaW1wb3J0IHsgZXZhbHVhdGVGaWx0ZXIgfSBmcm9tICcuL2V2YWx1YXRvci5qcyc7XG5pbXBvcnQgeyBFdmlkZW5jZUNvbGxlY3RvciB9IGZyb20gJy4vZXZpZGVuY2UuanMnO1xuaW1wb3J0IHR5cGUge1xuICBEZWNpZGVSdWxlLFxuICBEZWNpc2lvbkV2aWRlbmNlLFxuICBEZWNpc2lvblJlc3VsdCxcbiAgRGVmYXVsdEJyYW5jaCxcbiAgRmlsdGVyQ29uZGl0aW9uLFxuICBGaWx0ZXJSdWxlRXZpZGVuY2UsXG4gIEZ1bmN0aW9uUnVsZUV2aWRlbmNlLFxuICBSdWxlRXZpZGVuY2UsXG4gIFNlbGVjdGlvbkV2aWRlbmNlLFxuICBTZWxlY3Rpb25SZXN1bHQsXG4gIFdoZXJlRmlsdGVyLFxufSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IERFQ0lTSU9OX1JFU1VMVCB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vLyAtLSBTY29wZSBhY2Nlc3NvciBoZWxwZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmZ1bmN0aW9uIHNjb3BlQWNjZXNzb3JzKHNjb3BlOiB1bmtub3duKSB7XG4gIGNvbnN0IHsgdGFyZ2V0IH0gPSByZXF1aXJlRGVjaXNpb25TY29wZVJ1bnRpbWUoc2NvcGUpO1xuICBjb25zdCBrZXlzID0gdGFyZ2V0LmdldFJlZGFjdGVkS2V5cz8uKCk7XG4gIHJldHVybiB7XG4gICAgYXR0YWNoRm46IHRhcmdldC5hdHRhY2hTY29wZVJlY29yZGVyPy5iaW5kKHRhcmdldCksXG4gICAgZGV0YWNoRm46IHRhcmdldC5kZXRhY2hTY29wZVJlY29yZGVyPy5iaW5kKHRhcmdldCksXG4gICAgdmFsdWVGbjogdGFyZ2V0LmdldFZhbHVlPy5iaW5kKHRhcmdldCkgPz8gKCgpID0+IHVuZGVmaW5lZCksXG4gICAgcmVkYWN0ZWRGbjogKGtleTogc3RyaW5nKSA9PiBrZXlzPy5oYXMoa2V5KSA/PyBmYWxzZSxcbiAgfTtcbn1cblxuLy8gLS0gZXZhbHVhdGUgYSBzaW5nbGUgcnVsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBldmFsdWF0ZVJ1bGU8UyBleHRlbmRzIG9iamVjdD4oXG4gIHNjb3BlOiBTLFxuICBydWxlOiBEZWNpZGVSdWxlPFM+LFxuICBpbmRleDogbnVtYmVyLFxuICBhdHRhY2hGbj86IChyOiBTY29wZVJlY29yZGVyKSA9PiB2b2lkLFxuICBkZXRhY2hGbj86IChpZDogc3RyaW5nKSA9PiB2b2lkLFxuICB2YWx1ZUZuPzogKGtleTogc3RyaW5nKSA9PiB1bmtub3duLFxuICByZWRhY3RlZEZuPzogKGtleTogc3RyaW5nKSA9PiBib29sZWFuLFxuKTogUnVsZUV2aWRlbmNlIHtcbiAgaWYgKHR5cGVvZiBydWxlLndoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBGVU5DVElPTiBQQVRIOiB0ZW1wIHJlY29yZGVyIGNhcHR1cmVzIHJlYWRzIChsYXp5IOKAlCBza2lwIGlmIG5vIHJlY29yZGVyIHN1cHBvcnQpXG4gICAgY29uc3QgaGFzUmVjb3JkZXJTdXBwb3J0ID0gQm9vbGVhbihhdHRhY2hGbik7XG4gICAgY29uc3QgY29sbGVjdG9yID0gaGFzUmVjb3JkZXJTdXBwb3J0ID8gbmV3IEV2aWRlbmNlQ29sbGVjdG9yKCkgOiB1bmRlZmluZWQ7XG4gICAgaWYgKGNvbGxlY3RvciAmJiBhdHRhY2hGbikgYXR0YWNoRm4oY29sbGVjdG9yKTtcblxuICAgIGxldCBtYXRjaGVkOiBib29sZWFuO1xuICAgIGxldCBtYXRjaEVycm9yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIG1hdGNoZWQgPSBydWxlLndoZW4oc2NvcGUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIG1hdGNoZWQgPSBmYWxzZTtcbiAgICAgIC8vIENhcHR1cmUgdGhlIGVycm9yIGZvciBkZWJ1Z2dpbmcg4oCUIHN1cmZhY2UgaXQgaW4gZXZpZGVuY2UgaW5zdGVhZCBvZiBzd2FsbG93aW5nIHNpbGVudGx5XG4gICAgICBtYXRjaEVycm9yID0gZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpO1xuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gcnVsZS5sYWJlbCA/IGAgKCcke3J1bGUubGFiZWx9JylgIDogJyc7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybihgW2Zvb3RwcmludF0gZGVjaWRlKCkgcnVsZSAke2luZGV4fSR7bGFiZWx9IHRocmV3IGR1cmluZyBldmFsdWF0aW9uOiAke21hdGNoRXJyb3J9YCk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChjb2xsZWN0b3IgJiYgZGV0YWNoRm4pIGRldGFjaEZuKGNvbGxlY3Rvci5pZCk7XG4gICAgfVxuXG4gICAgY29uc3QgZXZpZGVuY2U6IEZ1bmN0aW9uUnVsZUV2aWRlbmNlID0ge1xuICAgICAgdHlwZTogJ2Z1bmN0aW9uJyxcbiAgICAgIHJ1bGVJbmRleDogaW5kZXgsXG4gICAgICBicmFuY2g6IHJ1bGUudGhlbixcbiAgICAgIG1hdGNoZWQsXG4gICAgICBsYWJlbDogcnVsZS5sYWJlbCxcbiAgICAgIC8vIFBhcnRpYWwgcmVhZHM6IGlmIHJ1bGUgdGhyZXcgYWZ0ZXIgc29tZSBnZXRWYWx1ZSgpIGNhbGxzLCBjb2xsZWN0b3IgaG9sZHMgcmVhZHMgdXAgdG8gdGhlIHRocm93IHBvaW50XG4gICAgICBpbnB1dHM6IGNvbGxlY3Rvcj8uZ2V0SW5wdXRzKCkgPz8gW10sXG4gICAgICAuLi4obWF0Y2hFcnJvciAhPT0gdW5kZWZpbmVkICYmIHsgbWF0Y2hFcnJvciB9KSxcbiAgICB9O1xuICAgIHJldHVybiBldmlkZW5jZTtcbiAgfSBlbHNlIHtcbiAgICAvLyBGSUxURVIgUEFUSDogcmVhZHMgdmFsdWVzIGRpcmVjdGx5IHZpYSBjYWxsYmFja3MgKG5vIHJlY29yZGVyKTsgZXhjZXB0aW9ucyB0cmVhdGVkIGFzIG5vbi1tYXRjaFxuICAgIGNvbnN0IHJlc29sdmVkVmFsdWVGbiA9IHZhbHVlRm4gPz8gKCgpID0+IHVuZGVmaW5lZCk7XG4gICAgY29uc3QgcmVzb2x2ZWRSZWRhY3RlZEZuID0gcmVkYWN0ZWRGbiA/PyAoKCkgPT4gZmFsc2UpO1xuICAgIGxldCBmaWx0ZXJNYXRjaGVkID0gZmFsc2U7XG4gICAgbGV0IGZpbHRlckNvbmRpdGlvbnM6IEZpbHRlckNvbmRpdGlvbltdID0gW107XG4gICAgbGV0IG1hdGNoRXJyb3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZXZhbHVhdGVGaWx0ZXIocmVzb2x2ZWRWYWx1ZUZuLCByZXNvbHZlZFJlZGFjdGVkRm4sIHJ1bGUud2hlbiBhcyBXaGVyZUZpbHRlcjxTPik7XG4gICAgICBmaWx0ZXJNYXRjaGVkID0gcmVzdWx0Lm1hdGNoZWQ7XG4gICAgICBmaWx0ZXJDb25kaXRpb25zID0gcmVzdWx0LmNvbmRpdGlvbnM7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZmlsdGVyTWF0Y2hlZCA9IGZhbHNlO1xuICAgICAgZmlsdGVyQ29uZGl0aW9ucyA9IFtdO1xuICAgICAgLy8gQ2FwdHVyZSB0aGUgZXJyb3IgZm9yIGRlYnVnZ2luZyDigJQgc3VyZmFjZSBpdCBpbiBldmlkZW5jZSBpbnN0ZWFkIG9mIHN3YWxsb3dpbmcgc2lsZW50bHlcbiAgICAgIG1hdGNoRXJyb3IgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSk7XG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBydWxlLmxhYmVsID8gYCAoJyR7cnVsZS5sYWJlbH0nKWAgOiAnJztcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS53YXJuKGBbZm9vdHByaW50XSBkZWNpZGUoKSBmaWx0ZXIgcnVsZSAke2luZGV4fSR7bGFiZWx9IHRocmV3IGR1cmluZyBldmFsdWF0aW9uOiAke21hdGNoRXJyb3J9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZXZpZGVuY2U6IEZpbHRlclJ1bGVFdmlkZW5jZSA9IHtcbiAgICAgIHR5cGU6ICdmaWx0ZXInLFxuICAgICAgcnVsZUluZGV4OiBpbmRleCxcbiAgICAgIGJyYW5jaDogcnVsZS50aGVuLFxuICAgICAgbWF0Y2hlZDogZmlsdGVyTWF0Y2hlZCxcbiAgICAgIGxhYmVsOiBydWxlLmxhYmVsLFxuICAgICAgY29uZGl0aW9uczogZmlsdGVyQ29uZGl0aW9ucyxcbiAgICAgIC4uLihtYXRjaEVycm9yICE9PSB1bmRlZmluZWQgJiYgeyBtYXRjaEVycm9yIH0pLFxuICAgIH07XG4gICAgcmV0dXJuIGV2aWRlbmNlO1xuICB9XG59XG5cbi8vIC0tIGRlZmF1bHQgYnJhbmNoIG5vcm1hbGl6YXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBDb2xsYXBzZXMgYm90aCB7QGxpbmsgRGVmYXVsdEJyYW5jaH0gZm9ybXMgdG8gb25lIHNoYXBlLCBvbmNlLCBhdCB0aGUgdG9wIG9mXG4gKiBgZGVjaWRlKClgLiBBIGJhcmUgc3RyaW5nIHlpZWxkcyBgbGFiZWw6IHVuZGVmaW5lZGAsIHdoaWNoIGV2ZXJ5IGRvd25zdHJlYW1cbiAqIHNwcmVhZCB0aGVuIG9taXRzIOKAlCBzbyB0aGUgc3RyaW5nIGNhbGwgc2l0ZSBwcm9kdWNlcyBleGFjdGx5IHRoZSBldmlkZW5jZSBpdFxuICogcHJvZHVjZWQgYmVmb3JlIHRoaXMgcGFyYW1ldGVyIHdhcyB3aWRlbmVkLlxuICpcbiAqIE9OTFkgdGhlIG9iamVjdCBmb3JtIGlzIHVud3JhcHBlZDsgZXZlcnkgb3RoZXIgdmFsdWUgcGFzc2VzIHRocm91Z2ggYXMgdGhlXG4gKiBicmFuY2gsIHVudG91Y2hlZC4gVGhhdCBpcyBkZWxpYmVyYXRlOiBKYXZhU2NyaXB0IGNhbGxlcnMgcmVhY2ggYGRlY2lkZSgpYFxuICogd2l0aCB0aGUgdGhpcmQgYXJndW1lbnQgTUlTU0lORyAoYSBydWxlIHNldCB0aGF0IGNvdmVycyBldmVyeSBjYXNlIG5ldmVyXG4gKiBjb25zdWx0cyBhIGRlZmF1bHQpLCBhbmQgYmVmb3JlIHRoZSBwYXJhbWV0ZXIgd2lkZW5lZCB0aGF0IGB1bmRlZmluZWRgXG4gKiBzaW1wbHkgbGFuZGVkIG9uIGBldmlkZW5jZS5kZWZhdWx0YC4gSXQgc3RpbGwgZG9lcyDigJQgYSBub3JtYWxpemF0aW9uIHRoYXRcbiAqIG9ubHkgdW5kZXJzdG9vZCBzdHJpbmdzIHdvdWxkIHR1cm4gdGhvc2UgY2FsbCBzaXRlcyBpbnRvIGEgVHlwZUVycm9yLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVEZWZhdWx0QnJhbmNoKGRlZmF1bHRCcmFuY2g6IERlZmF1bHRCcmFuY2gpOiB7IGJyYW5jaDogc3RyaW5nOyBsYWJlbD86IHN0cmluZyB9IHtcbiAgcmV0dXJuIHR5cGVvZiBkZWZhdWx0QnJhbmNoID09PSAnb2JqZWN0JyAmJiBkZWZhdWx0QnJhbmNoICE9PSBudWxsXG4gICAgPyBkZWZhdWx0QnJhbmNoXG4gICAgOiB7IGJyYW5jaDogZGVmYXVsdEJyYW5jaCBhcyBzdHJpbmcgfTtcbn1cblxuLy8gLS0gZGVjaWRlKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEV2YWx1YXRlcyBydWxlcyBpbiBvcmRlciAoZmlyc3QtbWF0Y2gpLiBSZXR1cm5zIGEgYnJhbmRlZCBEZWNpc2lvblJlc3VsdC5cbiAqXG4gKiBAcGFyYW0gc2NvcGUgLSBUeXBlZFNjb3BlIG9yIFNjb3BlRmFjYWRlXG4gKiBAcGFyYW0gcnVsZXMgLSBBcnJheSBvZiBEZWNpZGVSdWxlIChmdW5jdGlvbiBvciBmaWx0ZXIgd2hlbiBjbGF1c2VzKVxuICogQHBhcmFtIGRlZmF1bHRCcmFuY2ggLSBCcmFuY2ggdGFrZW4gd2hlbiBubyBydWxlIG1hdGNoZXMuIEVpdGhlciB0aGUgYnJhbmNoXG4gKiAgIGlkIChgJ3JlamVjdGVkJ2ApIG9yIHRoZSBpZCBwbHVzIHdoYXQgZmFsbGluZyBiYWNrIHRvIGl0IE1FQU5TXG4gKiAgIChgeyBicmFuY2g6ICdyZWplY3RlZCcsIGxhYmVsOiAnTm8gcnVsZSBmaXJlZCcgfWApLiBUaGUgbGFiZWwgbGFuZHMgb25cbiAqICAgYGV2aWRlbmNlLmRlZmF1bHRMYWJlbGAg4oCUIHRoZSBkZWZhdWx0IGlzIGNob3NlbiBieSBubyBydWxlLCBzbyBpdCBpcyB0aGVcbiAqICAgb25lIGJyYW5jaCB0aGF0IGBydWxlc1tdLmxhYmVsYCBjYW4gbmV2ZXIgZGVzY3JpYmUuXG4gKlxuICogKipFcnJvciBiZWhhdmlvcjoqKiBJZiBhIGB3aGVuYCBmdW5jdGlvbiB0aHJvd3MgZHVyaW5nIGV2YWx1YXRpb24sIHRoZSBydWxlIGlzXG4gKiB0cmVhdGVkIGFzIG5vbi1tYXRjaGluZyAoYG1hdGNoZWQ6IGZhbHNlYCkgYW5kIHRoZSBlcnJvciBtZXNzYWdlIGlzIGNhcHR1cmVkIGluXG4gKiBgbWF0Y2hFcnJvcmAgb24gdGhhdCBydWxlJ3MgYFJ1bGVFdmlkZW5jZWAgZW50cnkuIEV4ZWN1dGlvbiBjb250aW51ZXMgd2l0aFxuICogc3Vic2VxdWVudCBydWxlczsgZXJyb3JzIGRvIG5vdCBwcm9wYWdhdGUgdG8gdGhlIGNhbGxlci5cbiAqXG4gKiAqKkVtcHR5LWZpbHRlciBiZWhhdmlvciAoYW50aS12YWN1b3VzLXRydXRoKToqKiBhIGZpbHRlciBydWxlIHdob3NlIGB3aGVuYCBpc1xuICogYHt9YCAobm8gZXZhbHVhYmxlIGNvbmRpdGlvbnMpIE5FVkVSIG1hdGNoZXMuIFRoaXMgZGVsaWJlcmF0ZWx5IGludmVydHMgdGhlXG4gKiBQcmlzbWEvU1FMIGB3aGVyZToge31gIGludHVpdGlvbiAoXCJtYXRjaCBldmVyeXRoaW5nXCIpIOKAlCBhIHJ1bGUgdGhhdCBhc3NlcnRzXG4gKiBub3RoaW5nIG11c3Qgbm90IHdpbiBhIGJyYW5jaCBvbiB2YWN1b3VzIHRydXRoLiBVc2UgYGRlZmF1bHRCcmFuY2hgIGZvciB0aGVcbiAqIGNhdGNoLWFsbCBpbnN0ZWFkLiBVbmtub3duIGZpbHRlciBvcGVyYXRvcnMgYWxzbyBuZXZlciBtYXRjaCAoZGV2IG1vZGUgd2FybnMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjaWRlPFMgZXh0ZW5kcyBvYmplY3Q+KFxuICBzY29wZTogUyxcbiAgcnVsZXM6IERlY2lkZVJ1bGU8Uz5bXSxcbiAgZGVmYXVsdEJyYW5jaDogRGVmYXVsdEJyYW5jaCxcbik6IERlY2lzaW9uUmVzdWx0IHtcbiAgY29uc3QgeyBhdHRhY2hGbiwgZGV0YWNoRm4sIHZhbHVlRm4sIHJlZGFjdGVkRm4gfSA9IHNjb3BlQWNjZXNzb3JzKHNjb3BlKTtcblxuICBjb25zdCB7IGJyYW5jaDogZGVmYXVsdEJyYW5jaElkLCBsYWJlbDogZGVmYXVsdExhYmVsIH0gPSBub3JtYWxpemVEZWZhdWx0QnJhbmNoKGRlZmF1bHRCcmFuY2gpO1xuICAvLyBEZWNsYXJlZCBvbmNlLCBzcHJlYWQgaW50byBCT1RIIGV4aXRzIGJlbG93IOKAlCBkZWxpYmVyYXRlbHkuIEEgZGVmYXVsdCdzXG4gIC8vIG1lYW5pbmcgaXMgYSBwcm9wZXJ0eSBvZiB0aGUgREVDSURFUiwgbm90IG9mIHRoZSBydW46IGl0IG11c3QgYmUgaW4gdGhlXG4gIC8vIGV2aWRlbmNlIG9mIHRoZSBydW4gd2hlcmUgYSBydWxlIHdvbiBqdXN0IGFzIG11Y2ggYXMgaW4gdGhlIHJ1biB0aGF0IGZlbGxcbiAgLy8gdGhyb3VnaC4gRW1pdCBpdCBvbmx5IG9uIHRoZSBmYWxsdGhyb3VnaCBhbmQgYW55IGNvbnN1bWVyIGhhcnZlc3RpbmcgYnJhbmNoXG4gIC8vIG1lYW5pbmdzIHdvdWxkIHdhdGNoIHRoZW0gYXBwZWFyIGFuZCBkaXNhcHBlYXIgd2l0aCB0aGUgZGF0YS5cbiAgY29uc3QgZGVmYXVsdE1lYW5pbmcgPSBkZWZhdWx0TGFiZWwgIT09IHVuZGVmaW5lZCA/IHsgZGVmYXVsdExhYmVsIH0gOiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgZXZhbHVhdGVkUnVsZXM6IFJ1bGVFdmlkZW5jZVtdID0gW107XG5cbiAgZm9yIChjb25zdCBbaW5kZXgsIHJ1bGVdIG9mIHJ1bGVzLmVudHJpZXMoKSkge1xuICAgIGNvbnN0IHJ1bGVFdmlkZW5jZSA9IGV2YWx1YXRlUnVsZShzY29wZSwgcnVsZSwgaW5kZXgsIGF0dGFjaEZuLCBkZXRhY2hGbiwgdmFsdWVGbiwgcmVkYWN0ZWRGbik7XG4gICAgZXZhbHVhdGVkUnVsZXMucHVzaChydWxlRXZpZGVuY2UpO1xuXG4gICAgaWYgKHJ1bGVFdmlkZW5jZS5tYXRjaGVkKSB7XG4gICAgICBjb25zdCBldmlkZW5jZTogRGVjaXNpb25FdmlkZW5jZSA9IHtcbiAgICAgICAgcnVsZXM6IGV2YWx1YXRlZFJ1bGVzLFxuICAgICAgICBjaG9zZW46IHJ1bGUudGhlbixcbiAgICAgICAgZGVmYXVsdDogZGVmYXVsdEJyYW5jaElkLFxuICAgICAgICAuLi5kZWZhdWx0TWVhbmluZyxcbiAgICAgIH07XG4gICAgICByZXR1cm4geyBicmFuY2g6IHJ1bGUudGhlbiwgW0RFQ0lTSU9OX1JFU1VMVF06IHRydWUsIGV2aWRlbmNlIH07XG4gICAgfVxuICB9XG5cbiAgLy8gRGVmYXVsdDogbm8gcnVsZSBtYXRjaGVkXG4gIGNvbnN0IGV2aWRlbmNlOiBEZWNpc2lvbkV2aWRlbmNlID0ge1xuICAgIHJ1bGVzOiBldmFsdWF0ZWRSdWxlcyxcbiAgICBjaG9zZW46IGRlZmF1bHRCcmFuY2hJZCxcbiAgICBkZWZhdWx0OiBkZWZhdWx0QnJhbmNoSWQsXG4gICAgLi4uZGVmYXVsdE1lYW5pbmcsXG4gIH07XG4gIHJldHVybiB7IGJyYW5jaDogZGVmYXVsdEJyYW5jaElkLCBbREVDSVNJT05fUkVTVUxUXTogdHJ1ZSwgZXZpZGVuY2UgfTtcbn1cblxuLy8gLS0gc2VsZWN0KCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEV2YWx1YXRlcyBBTEwgcnVsZXMgKG5vdCBmaXJzdC1tYXRjaCkuIFJldHVybnMgYSBicmFuZGVkIFNlbGVjdGlvblJlc3VsdC5cbiAqXG4gKiBAcGFyYW0gc2NvcGUgLSBUeXBlZFNjb3BlIG9yIFNjb3BlRmFjYWRlXG4gKiBAcGFyYW0gcnVsZXMgLSBBcnJheSBvZiBEZWNpZGVSdWxlIChmdW5jdGlvbiBvciBmaWx0ZXIgd2hlbiBjbGF1c2VzKVxuICpcbiAqICoqRXJyb3IgYmVoYXZpb3I6KiogSWYgYSBgd2hlbmAgZnVuY3Rpb24gdGhyb3dzIGR1cmluZyBldmFsdWF0aW9uLCB0aGUgcnVsZSBpc1xuICogdHJlYXRlZCBhcyBub24tbWF0Y2hpbmcgKGBtYXRjaGVkOiBmYWxzZWApIGFuZCB0aGUgZXJyb3IgbWVzc2FnZSBpcyBjYXB0dXJlZCBpblxuICogYG1hdGNoRXJyb3JgIG9uIHRoYXQgcnVsZSdzIGBSdWxlRXZpZGVuY2VgIGVudHJ5LiBFdmFsdWF0aW9uIGNvbnRpbnVlcyB3aXRoXG4gKiByZW1haW5pbmcgcnVsZXM7IGVycm9ycyBkbyBub3QgcHJvcGFnYXRlIHRvIHRoZSBjYWxsZXIuXG4gKlxuICogKipFbXB0eS1maWx0ZXIgYmVoYXZpb3IgKGFudGktdmFjdW91cy10cnV0aCk6KiogYSBmaWx0ZXIgcnVsZSB3aG9zZSBgd2hlbmAgaXNcbiAqIGB7fWAgKG5vIGV2YWx1YWJsZSBjb25kaXRpb25zKSBORVZFUiBtYXRjaGVzIOKAlCBzYW1lIHJ1bGUgYXMgYGRlY2lkZSgpYDsgYW5cbiAqIGFsd2F5cy1zZWxlY3RlZCBicmFuY2ggbXVzdCBiZSBleHByZXNzZWQgZXhwbGljaXRseSwgbm90IHZpYSBhbiBlbXB0eSBmaWx0ZXIuXG4gKiBVbmtub3duIGZpbHRlciBvcGVyYXRvcnMgYWxzbyBuZXZlciBtYXRjaCAoZGV2IG1vZGUgd2FybnMpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0PFMgZXh0ZW5kcyBvYmplY3Q+KHNjb3BlOiBTLCBydWxlczogRGVjaWRlUnVsZTxTPltdKTogU2VsZWN0aW9uUmVzdWx0IHtcbiAgY29uc3QgeyBhdHRhY2hGbiwgZGV0YWNoRm4sIHZhbHVlRm4sIHJlZGFjdGVkRm4gfSA9IHNjb3BlQWNjZXNzb3JzKHNjb3BlKTtcblxuICBjb25zdCBldmFsdWF0ZWRSdWxlczogUnVsZUV2aWRlbmNlW10gPSBbXTtcbiAgY29uc3Qgc2VsZWN0ZWRCcmFuY2hlczogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IFtpbmRleCwgcnVsZV0gb2YgcnVsZXMuZW50cmllcygpKSB7XG4gICAgY29uc3QgcnVsZUV2aWRlbmNlID0gZXZhbHVhdGVSdWxlKHNjb3BlLCBydWxlLCBpbmRleCwgYXR0YWNoRm4sIGRldGFjaEZuLCB2YWx1ZUZuLCByZWRhY3RlZEZuKTtcbiAgICBldmFsdWF0ZWRSdWxlcy5wdXNoKHJ1bGVFdmlkZW5jZSk7XG5cbiAgICBpZiAocnVsZUV2aWRlbmNlLm1hdGNoZWQpIHtcbiAgICAgIHNlbGVjdGVkQnJhbmNoZXMucHVzaChydWxlLnRoZW4pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGV2aWRlbmNlOiBTZWxlY3Rpb25FdmlkZW5jZSA9IHtcbiAgICBydWxlczogZXZhbHVhdGVkUnVsZXMsXG4gICAgc2VsZWN0ZWQ6IHNlbGVjdGVkQnJhbmNoZXMsXG4gIH07XG4gIHJldHVybiB7IGJyYW5jaGVzOiBzZWxlY3RlZEJyYW5jaGVzLCBbREVDSVNJT05fUkVTVUxUXTogdHJ1ZSwgZXZpZGVuY2UgfTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One lifecycle for the three deferred batching drivers. Adapters supply
|
|
3
|
+
* the deferral mechanism; this module owns each batch from registration
|
|
4
|
+
* through dispatch or refusal, and each child's terminal cleanup.
|
|
5
|
+
* Internal only: the consumer contract remains `types.ts · DetachDriver`.
|
|
6
|
+
*/
|
|
7
|
+
import type { ChildRunner } from '../runChild.js';
|
|
8
|
+
import type { DetachDriver } from '../types.js';
|
|
9
|
+
export declare function createBatchSchedule(defer: (flush: () => void) => void, runChild: ChildRunner): DetachDriver['schedule'];
|