footprintjs 4.16.0 → 4.17.2
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 +567 -82
- package/CLAUDE.md +57 -0
- package/README.md +2 -0
- package/dist/advanced.js +4 -2
- package/dist/detach.js +78 -0
- package/dist/esm/advanced.js +2 -1
- package/dist/esm/detach.js +57 -0
- package/dist/esm/lib/builder/FlowChartBuilder.js +171 -61
- package/dist/esm/lib/contract/openapi.js +4 -5
- package/dist/esm/lib/contract/schema.js +115 -4
- package/dist/esm/lib/decide/decide.js +4 -5
- package/dist/esm/lib/decide/evidence.js +3 -2
- package/dist/esm/lib/detach/drivers/immediate.js +66 -0
- package/dist/esm/lib/detach/drivers/microtaskBatch.js +113 -0
- package/dist/esm/lib/detach/drivers/sendBeacon.js +78 -0
- package/dist/esm/lib/detach/drivers/setImmediate.js +81 -0
- package/dist/esm/lib/detach/drivers/setTimeout.js +69 -0
- package/dist/esm/lib/detach/drivers/workerThread.js +117 -0
- package/dist/esm/lib/detach/flush.js +91 -0
- package/dist/esm/lib/detach/handle.js +134 -0
- package/dist/esm/lib/detach/registry.js +97 -0
- package/dist/esm/lib/detach/runChild.js +40 -0
- package/dist/esm/lib/detach/spawn.js +86 -0
- package/dist/esm/lib/detach/types.js +37 -0
- package/dist/esm/lib/engine/errors/errorInfo.js +4 -4
- package/dist/esm/lib/engine/graph/StageNode.js +2 -2
- package/dist/esm/lib/engine/handlers/ChildrenExecutor.js +9 -8
- package/dist/esm/lib/engine/handlers/ContinuationResolver.js +12 -9
- package/dist/esm/lib/engine/handlers/DeciderHandler.js +7 -8
- package/dist/esm/lib/engine/handlers/ExtractorRunner.js +14 -8
- package/dist/esm/lib/engine/handlers/NodeResolver.js +5 -3
- package/dist/esm/lib/engine/handlers/RuntimeStructureManager.js +11 -14
- package/dist/esm/lib/engine/handlers/SelectorHandler.js +9 -9
- package/dist/esm/lib/engine/handlers/StageRunner.js +9 -11
- package/dist/esm/lib/engine/handlers/SubflowExecutor.js +13 -12
- package/dist/esm/lib/engine/handlers/SubflowInputMapper.js +4 -4
- package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +85 -96
- package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.js +18 -36
- package/dist/esm/lib/engine/narrative/NarrativeFlowRecorder.js +6 -5
- package/dist/esm/lib/engine/narrative/recorders/AdaptiveNarrativeFlowRecorder.js +7 -6
- package/dist/esm/lib/engine/narrative/recorders/ManifestFlowRecorder.js +10 -10
- package/dist/esm/lib/engine/narrative/recorders/MilestoneNarrativeFlowRecorder.js +5 -3
- package/dist/esm/lib/engine/narrative/recorders/ProgressiveNarrativeFlowRecorder.js +4 -3
- package/dist/esm/lib/engine/narrative/recorders/RLENarrativeFlowRecorder.js +4 -4
- package/dist/esm/lib/engine/narrative/recorders/SeparateNarrativeFlowRecorder.js +5 -6
- package/dist/esm/lib/engine/narrative/recorders/SilentNarrativeFlowRecorder.js +5 -6
- package/dist/esm/lib/engine/narrative/recorders/WindowedNarrativeFlowRecorder.js +5 -3
- package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +97 -71
- package/dist/esm/lib/memory/DiagnosticCollector.js +6 -8
- package/dist/esm/lib/memory/EventLog.js +5 -3
- package/dist/esm/lib/memory/SharedMemory.js +3 -2
- package/dist/esm/lib/memory/StageContext.js +44 -14
- package/dist/esm/lib/memory/TransactionBuffer.js +9 -8
- package/dist/esm/lib/memory/backtrack.js +3 -4
- package/dist/esm/lib/memory/commitLogUtils.js +2 -2
- package/dist/esm/lib/memory/utils.js +2 -3
- package/dist/esm/lib/pause/types.js +33 -14
- package/dist/esm/lib/reactive/createTypedScope.js +10 -8
- package/dist/esm/lib/reactive/types.js +3 -1
- package/dist/esm/lib/recorder/BoundaryStateTracker.js +263 -0
- package/dist/esm/lib/recorder/CompositeRecorder.js +3 -1
- package/dist/esm/lib/recorder/InOutRecorder.js +5 -6
- package/dist/esm/lib/recorder/KeyedRecorder.js +2 -4
- package/dist/esm/lib/recorder/QualityRecorder.js +15 -14
- package/dist/esm/lib/recorder/SequenceRecorder.js +11 -12
- package/dist/esm/lib/recorder/TopologyRecorder.js +36 -40
- package/dist/esm/lib/recorder/index.js +2 -1
- package/dist/esm/lib/recorder/qualityTrace.js +4 -5
- package/dist/esm/lib/runner/ExecutionRuntime.js +20 -4
- package/dist/esm/lib/runner/FlowChartExecutor.js +99 -55
- package/dist/esm/lib/runner/RunContext.js +5 -3
- package/dist/esm/lib/runner/RunnableChart.js +7 -9
- package/dist/esm/lib/runner/getSubtreeSnapshot.js +4 -5
- package/dist/esm/lib/schema/errors.js +4 -3
- package/dist/esm/lib/schema/validate.js +4 -5
- package/dist/esm/lib/scope/ScopeFacade.js +52 -35
- package/dist/esm/lib/scope/providers/baseStateCompatible.js +9 -9
- package/dist/esm/lib/scope/providers/guards.js +2 -2
- package/dist/esm/lib/scope/recorders/DebugRecorder.js +9 -7
- package/dist/esm/lib/scope/recorders/MetricRecorder.js +10 -8
- package/dist/esm/lib/scope/state/zod/defineScopeFromZod.js +2 -3
- package/dist/esm/lib/scope/state/zod/resolver.js +2 -3
- package/dist/esm/lib/scope/state/zod/scopeFactory.js +16 -20
- package/dist/esm/lib/scope/state/zod/utils/validateHelper.js +57 -14
- package/dist/esm/trace.js +4 -1
- package/dist/lib/builder/FlowChartBuilder.js +171 -61
- package/dist/lib/contract/openapi.js +4 -5
- package/dist/lib/contract/schema.js +115 -4
- package/dist/lib/decide/decide.js +4 -5
- package/dist/lib/decide/evidence.js +3 -2
- package/dist/lib/detach/drivers/immediate.js +70 -0
- package/dist/lib/detach/drivers/microtaskBatch.js +117 -0
- package/dist/lib/detach/drivers/sendBeacon.js +82 -0
- package/dist/lib/detach/drivers/setImmediate.js +85 -0
- package/dist/lib/detach/drivers/setTimeout.js +73 -0
- package/dist/lib/detach/drivers/workerThread.js +121 -0
- package/dist/lib/detach/flush.js +95 -0
- package/dist/lib/detach/handle.js +140 -0
- package/dist/lib/detach/registry.js +106 -0
- package/dist/lib/detach/runChild.js +67 -0
- package/dist/lib/detach/spawn.js +92 -0
- package/dist/lib/detach/types.js +38 -0
- package/dist/lib/engine/errors/errorInfo.js +4 -4
- package/dist/lib/engine/graph/StageNode.js +2 -2
- package/dist/lib/engine/handlers/ChildrenExecutor.js +9 -8
- package/dist/lib/engine/handlers/ContinuationResolver.js +12 -9
- package/dist/lib/engine/handlers/DeciderHandler.js +7 -8
- package/dist/lib/engine/handlers/ExtractorRunner.js +14 -8
- package/dist/lib/engine/handlers/NodeResolver.js +5 -3
- package/dist/lib/engine/handlers/RuntimeStructureManager.js +11 -14
- package/dist/lib/engine/handlers/SelectorHandler.js +9 -9
- package/dist/lib/engine/handlers/StageRunner.js +9 -11
- package/dist/lib/engine/handlers/SubflowExecutor.js +13 -12
- package/dist/lib/engine/handlers/SubflowInputMapper.js +4 -4
- package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +85 -96
- package/dist/lib/engine/narrative/FlowRecorderDispatcher.js +18 -36
- package/dist/lib/engine/narrative/NarrativeFlowRecorder.js +6 -5
- package/dist/lib/engine/narrative/recorders/AdaptiveNarrativeFlowRecorder.js +7 -6
- package/dist/lib/engine/narrative/recorders/ManifestFlowRecorder.js +10 -10
- package/dist/lib/engine/narrative/recorders/MilestoneNarrativeFlowRecorder.js +5 -3
- package/dist/lib/engine/narrative/recorders/ProgressiveNarrativeFlowRecorder.js +4 -3
- package/dist/lib/engine/narrative/recorders/RLENarrativeFlowRecorder.js +4 -4
- package/dist/lib/engine/narrative/recorders/SeparateNarrativeFlowRecorder.js +5 -6
- package/dist/lib/engine/narrative/recorders/SilentNarrativeFlowRecorder.js +5 -6
- package/dist/lib/engine/narrative/recorders/WindowedNarrativeFlowRecorder.js +5 -3
- package/dist/lib/engine/traversal/FlowchartTraverser.js +97 -71
- package/dist/lib/memory/DiagnosticCollector.js +6 -8
- package/dist/lib/memory/EventLog.js +5 -3
- package/dist/lib/memory/SharedMemory.js +3 -2
- package/dist/lib/memory/StageContext.js +44 -14
- package/dist/lib/memory/TransactionBuffer.js +9 -8
- package/dist/lib/memory/backtrack.js +3 -4
- package/dist/lib/memory/commitLogUtils.js +2 -2
- package/dist/lib/memory/utils.js +2 -3
- package/dist/lib/pause/types.js +33 -14
- package/dist/lib/reactive/createTypedScope.js +10 -8
- package/dist/lib/reactive/types.js +3 -1
- package/dist/lib/recorder/BoundaryStateTracker.js +267 -0
- package/dist/lib/recorder/CompositeRecorder.js +3 -1
- package/dist/lib/recorder/InOutRecorder.js +5 -6
- package/dist/lib/recorder/KeyedRecorder.js +2 -4
- package/dist/lib/recorder/QualityRecorder.js +15 -14
- package/dist/lib/recorder/SequenceRecorder.js +11 -12
- package/dist/lib/recorder/TopologyRecorder.js +36 -40
- package/dist/lib/recorder/index.js +4 -2
- package/dist/lib/recorder/qualityTrace.js +4 -5
- package/dist/lib/runner/ExecutionRuntime.js +20 -4
- package/dist/lib/runner/FlowChartExecutor.js +99 -55
- package/dist/lib/runner/RunContext.js +5 -3
- package/dist/lib/runner/RunnableChart.js +7 -9
- package/dist/lib/runner/getSubtreeSnapshot.js +4 -5
- package/dist/lib/schema/errors.js +4 -3
- package/dist/lib/schema/validate.js +4 -5
- package/dist/lib/scope/ScopeFacade.js +52 -35
- package/dist/lib/scope/providers/baseStateCompatible.js +9 -9
- package/dist/lib/scope/providers/guards.js +2 -2
- package/dist/lib/scope/recorders/DebugRecorder.js +9 -7
- package/dist/lib/scope/recorders/MetricRecorder.js +10 -8
- package/dist/lib/scope/state/zod/defineScopeFromZod.js +2 -3
- package/dist/lib/scope/state/zod/resolver.js +2 -3
- package/dist/lib/scope/state/zod/scopeFactory.js +16 -20
- package/dist/lib/scope/state/zod/utils/validateHelper.js +57 -14
- package/dist/trace.js +6 -2
- package/dist/types/advanced.d.ts +1 -0
- package/dist/types/detach.d.ts +59 -0
- package/dist/types/lib/builder/FlowChartBuilder.d.ts +81 -0
- package/dist/types/lib/detach/drivers/immediate.d.ts +39 -0
- package/dist/types/lib/detach/drivers/microtaskBatch.d.ts +57 -0
- package/dist/types/lib/detach/drivers/sendBeacon.d.ts +38 -0
- package/dist/types/lib/detach/drivers/setImmediate.d.ts +32 -0
- package/dist/types/lib/detach/drivers/setTimeout.d.ts +34 -0
- package/dist/types/lib/detach/drivers/workerThread.d.ts +50 -0
- package/dist/types/lib/detach/flush.d.ts +62 -0
- package/dist/types/lib/detach/handle.d.ts +83 -0
- package/dist/types/lib/detach/registry.d.ts +82 -0
- package/dist/types/lib/detach/runChild.d.ts +41 -0
- package/dist/types/lib/detach/spawn.d.ts +64 -0
- package/dist/types/lib/detach/types.d.ts +200 -0
- package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +0 -1
- package/dist/types/lib/engine/types.d.ts +0 -1
- package/dist/types/lib/reactive/types.d.ts +4 -0
- package/dist/types/lib/recorder/BoundaryStateTracker.d.ts +215 -0
- package/dist/types/lib/recorder/index.d.ts +1 -0
- package/dist/types/lib/runner/FlowChartExecutor.d.ts +28 -0
- package/dist/types/lib/scope/ScopeFacade.d.ts +4 -0
- package/dist/types/lib/scope/state/zod/utils/validateHelper.d.ts +13 -1
- package/dist/types/trace.d.ts +1 -0
- package/package.json +6 -1
|
@@ -34,18 +34,21 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
34
34
|
exports.QualityRecorder = void 0;
|
|
35
35
|
const KeyedRecorder_js_1 = require("./KeyedRecorder.js");
|
|
36
36
|
class QualityRecorder extends KeyedRecorder_js_1.KeyedRecorder {
|
|
37
|
+
static _counter = 0;
|
|
38
|
+
id;
|
|
39
|
+
preferredOperation;
|
|
40
|
+
scoringFn;
|
|
41
|
+
// Per-stage buffers (reset on each stageStart)
|
|
42
|
+
currentRuntimeStageId = '';
|
|
43
|
+
currentStageId = '';
|
|
44
|
+
currentStageName = '';
|
|
45
|
+
currentKeysRead = [];
|
|
46
|
+
currentKeysWritten = [];
|
|
37
47
|
constructor(scoringFn, options) {
|
|
38
|
-
var _a, _b;
|
|
39
48
|
super();
|
|
40
|
-
// Per-stage buffers (reset on each stageStart)
|
|
41
|
-
this.currentRuntimeStageId = '';
|
|
42
|
-
this.currentStageId = '';
|
|
43
|
-
this.currentStageName = '';
|
|
44
|
-
this.currentKeysRead = [];
|
|
45
|
-
this.currentKeysWritten = [];
|
|
46
49
|
this.scoringFn = scoringFn;
|
|
47
|
-
this.id =
|
|
48
|
-
this.preferredOperation =
|
|
50
|
+
this.id = options?.id ?? `quality-${++QualityRecorder._counter}`;
|
|
51
|
+
this.preferredOperation = options?.preferredOperation ?? 'accumulate';
|
|
49
52
|
}
|
|
50
53
|
onStageStart(event) {
|
|
51
54
|
this.currentRuntimeStageId = event.runtimeStageId;
|
|
@@ -73,7 +76,7 @@ class QualityRecorder extends KeyedRecorder_js_1.KeyedRecorder {
|
|
|
73
76
|
stageName: this.currentStageName,
|
|
74
77
|
stageId: this.currentStageId,
|
|
75
78
|
score: Math.max(0, Math.min(1, score)),
|
|
76
|
-
factors: factors
|
|
79
|
+
factors: factors ?? [],
|
|
77
80
|
keysRead: [...this.currentKeysRead],
|
|
78
81
|
keysWritten: [...this.currentKeysWritten],
|
|
79
82
|
});
|
|
@@ -105,7 +108,6 @@ class QualityRecorder extends KeyedRecorder_js_1.KeyedRecorder {
|
|
|
105
108
|
return count === 0 ? 1.0 : total / count;
|
|
106
109
|
}
|
|
107
110
|
toSnapshot() {
|
|
108
|
-
var _a;
|
|
109
111
|
const steps = {};
|
|
110
112
|
for (const [key, value] of this.getMap()) {
|
|
111
113
|
steps[key] = value;
|
|
@@ -117,7 +119,7 @@ class QualityRecorder extends KeyedRecorder_js_1.KeyedRecorder {
|
|
|
117
119
|
data: {
|
|
118
120
|
numericField: 'score',
|
|
119
121
|
overallScore: this.getOverallScore(),
|
|
120
|
-
lowestStep:
|
|
122
|
+
lowestStep: this.getLowest()?.runtimeStageId,
|
|
121
123
|
steps,
|
|
122
124
|
},
|
|
123
125
|
};
|
|
@@ -132,5 +134,4 @@ class QualityRecorder extends KeyedRecorder_js_1.KeyedRecorder {
|
|
|
132
134
|
}
|
|
133
135
|
}
|
|
134
136
|
exports.QualityRecorder = QualityRecorder;
|
|
135
|
-
QualityRecorder._counter = 0;
|
|
136
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUXVhbGl0eVJlY29yZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9yZWNvcmRlci9RdWFsaXR5UmVjb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7OztBQUdILHlEQUFtRDtBQTJDbkQsTUFBYSxlQUFnQixTQUFRLGdDQUEyQjtJQWM5RCxZQUFZLFNBQTJCLEVBQUUsT0FBZ0M7O1FBQ3ZFLEtBQUssRUFBRSxDQUFDO1FBUlYsK0NBQStDO1FBQ3ZDLDBCQUFxQixHQUFHLEVBQUUsQ0FBQztRQUMzQixtQkFBYyxHQUFHLEVBQUUsQ0FBQztRQUNwQixxQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDdEIsb0JBQWUsR0FBYSxFQUFFLENBQUM7UUFDL0IsdUJBQWtCLEdBQWEsRUFBRSxDQUFDO1FBSXhDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsRUFBRSxtQ0FBSSxXQUFXLEVBQUUsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxNQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxrQkFBa0IsbUNBQUksWUFBWSxDQUFDO0lBQ3hFLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBaUI7UUFDNUIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUM7UUFDbEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENB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RUFBRSxDQUFDO1FBQzFDLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztZQUN6QyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLENBQUM7UUFDRCxPQUFPO1lBQ0wsSUFBSSxFQUFFLFNBQVM7WUFDZixXQUFXLEVBQUUsNkRBQTZEO1lBQzFFLGtCQUFrQixFQUFFLElBQUksQ0FBQyxrQkFBa0I7WUFDM0MsSUFBSSxFQUFFO2dCQUNKLFlBQVksRUFBRSxPQUFPO2dCQUNyQixZQUFZLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDcEMsVUFBVSxFQUFFLE1BQUEsSUFBSSxDQUFDLFNBQVMsRUFBRSwwQ0FBRSxjQUFjO2dCQUM1QyxLQUFLO2FBQ047U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVRLEtBQUs7UUFDWixLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDZCxJQUFJLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztJQUMvQixDQUFDOztBQWpISCwwQ0FrSEM7QUFqSGdCLHdCQUFRLEdBQUcsQ0FBQyxBQUFKLENBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFF1YWxpdHlSZWNvcmRlciDigJQgcGVyLXN0ZXAgcXVhbGl0eSBzY29yaW5nIGtleWVkIGJ5IHJ1bnRpbWVTdGFnZUlkLlxuICpcbiAqIENvbGxlY3RzIHF1YWxpdHkgc2NvcmVzIGR1cmluZyB0cmF2ZXJzYWwgKGFjY3VtdWxhdGUgcGF0dGVybikuXG4gKiBBZnRlciBleGVjdXRpb24sIHVzZSBxdWFsaXR5VHJhY2UoKSB0byBiYWNrdHJhY2sgZnJvbSBhbnkgbG93LXNjb3Jpbmcgc3RlcC5cbiAqXG4gKiBFeHRlbmRzIEtleWVkUmVjb3JkZXI8UXVhbGl0eUVudHJ5PiBmb3IgTygxKSBsb29rdXAgYW5kIHN0YW5kYXJkIG9wZXJhdGlvbnM6XG4gKiAgIC0gKipUcmFuc2xhdGUqKjogYGdldEJ5S2V5KCdjYWxsLWxsbSM1JylgIOKAlCBxdWFsaXR5IGF0IHRoaXMgc3RlcFxuICogICAtICoqQWNjdW11bGF0ZSoqOiBwcm9ncmVzc2l2ZSBxdWFsaXR5IHVwIHRvIHNsaWRlciBwb3NpdGlvblxuICogICAtICoqQWdncmVnYXRlKio6IG92ZXJhbGwgcGlwZWxpbmUgcXVhbGl0eSBzY29yZVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBxdWFsaXR5ID0gbmV3IFF1YWxpdHlSZWNvcmRlcigocnVudGltZVN0YWdlSWQsIGV2ZW50KSA9PiB7XG4gKiAgIC8vIEN1c3RvbSBzY29yaW5nIGZ1bmN0aW9uIOKAlCByZXR1cm4gMC4w4oCTMS4wXG4gKiAgIGlmIChldmVudC5zdGFnZU5hbWUuaW5jbHVkZXMoJ2xsbScpKSByZXR1cm4gMC43O1xuICogICByZXR1cm4gMS4wO1xuICogfSk7XG4gKiBleGVjdXRvci5hdHRhY2hSZWNvcmRlcihxdWFsaXR5KTtcbiAqIGF3YWl0IGV4ZWN1dG9yLnJ1bigpO1xuICpcbiAqIC8vIFBlci1zdGVwIHNjb3JlXG4gKiBxdWFsaXR5LmdldEJ5S2V5KCdjYWxsLWxsbSM1Jyk7ICAvLyB7IHNjb3JlOiAwLjcsIHN0YWdlTmFtZTogJ0NhbGxMTE0nLCBmYWN0b3JzOiBbLi4uXSB9XG4gKlxuICogLy8gT3ZlcmFsbCBxdWFsaXR5XG4gKiBxdWFsaXR5LmdldE92ZXJhbGxTY29yZSgpOyAgLy8gMC44NVxuICpcbiAqIC8vIExvd2VzdC1zY29yaW5nIHN0ZXBcbiAqIHF1YWxpdHkuZ2V0TG93ZXN0KCk7ICAvLyB7IHJ1bnRpbWVTdGFnZUlkOiAnY2FsbC1sbG0jNScsIGVudHJ5OiB7IHNjb3JlOiAwLjcsIC4uLiB9IH1cbiAqIGBgYFxuICovXG5cbmltcG9ydCB0eXBlIHsgUmVhZEV2ZW50LCBSZWNvcmRlciwgU3RhZ2VFdmVudCwgV3JpdGVFdmVudCB9IGZyb20gJy4uL3Njb3BlL3R5cGVzLmpzJztcbmltcG9ydCB7IEtleWVkUmVjb3JkZXIgfSBmcm9tICcuL0tleWVkUmVjb3JkZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBSZWNvcmRlck9wZXJhdGlvbiB9IGZyb20gJy4vUmVjb3JkZXJPcGVyYXRpb24uanMnO1xuXG4vKiogUGVyLXN0ZXAgcXVhbGl0eSBkYXRhIHN0b3JlZCBieSBRdWFsaXR5UmVjb3JkZXIuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1YWxpdHlFbnRyeSB7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBzdGFnZSBuYW1lLiAqL1xuICBzdGFnZU5hbWU6IHN0cmluZztcbiAgLyoqIFN0YWJsZSBzdGFnZSBpZGVudGlmaWVyLiAqL1xuICBzdGFnZUlkOiBzdHJpbmc7XG4gIC8qKiBRdWFsaXR5IHNjb3JlIGZvciB0aGlzIHN0ZXAgKDAuMCA9IHdvcnN0LCAxLjAgPSBiZXN0KS4gKi9cbiAgc2NvcmU6IG51bWJlcjtcbiAgLyoqIFdoYXQgY29udHJpYnV0ZWQgdG8gdGhpcyBzY29yZS4gKi9cbiAgZmFjdG9yczogc3RyaW5nW107XG4gIC8qKiBLZXlzIHJlYWQgZHVyaW5nIHRoaXMgc3RlcCAoZm9yIGJhY2t0cmFja2luZykuICovXG4gIGtleXNSZWFkOiBzdHJpbmdbXTtcbiAgLyoqIEtleXMgd3JpdHRlbiBkdXJpbmcgdGhpcyBzdGVwIChmb3IgYmFja3RyYWNraW5nKS4gKi9cbiAga2V5c1dyaXR0ZW46IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFNjb3JpbmcgZnVuY3Rpb24gY2FsbGVkIGF0IHRoZSBlbmQgb2YgZWFjaCBzdGFnZS5cbiAqIFJlY2VpdmVzIHRoZSBydW50aW1lU3RhZ2VJZCwgc3RhZ2UgZXZlbnQsIGFuZCBhIHN1bW1hcnkgb2YgcmVhZHMvd3JpdGVzLlxuICogUmV0dXJuIGEgc2NvcmUgKDAuMOKAkzEuMCkgYW5kIG9wdGlvbmFsIGZhY3RvcnMgZXhwbGFpbmluZyB0aGUgc2NvcmUuXG4gKi9cbmV4cG9ydCB0eXBlIFF1YWxpdHlTY29yaW5nRm4gPSAoXG4gIHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcsXG4gIGNvbnRleHQ6IHtcbiAgICBzdGFnZU5hbWU6IHN0cmluZztcbiAgICBzdGFnZUlkOiBzdHJpbmc7XG4gICAga2V5c1JlYWQ6IHN0cmluZ1tdO1xuICAgIGtleXNXcml0dGVuOiBzdHJpbmdbXTtcbiAgICBkdXJhdGlvbj86IG51bWJlcjtcbiAgfSxcbikgPT4geyBzY29yZTogbnVtYmVyOyBmYWN0b3JzPzogc3RyaW5nW10gfTtcblxuLyoqIE9wdGlvbnMgZm9yIFF1YWxpdHlSZWNvcmRlci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVhbGl0eVJlY29yZGVyT3B0aW9ucyB7XG4gIC8qKiBSZWNvcmRlciBJRC4gRGVmYXVsdHMgdG8gYXV0by1pbmNyZW1lbnQuICovXG4gIGlkPzogc3RyaW5nO1xuICAvKiogUHJlZmVycmVkIFVJIG9wZXJhdGlvbi4gRGVmYXVsdHMgdG8gJ2FjY3VtdWxhdGUnIChwcm9ncmVzc2l2ZSBxdWFsaXR5KS4gKi9cbiAgcHJlZmVycmVkT3BlcmF0aW9uPzogUmVjb3JkZXJPcGVyYXRpb247XG59XG5cbmV4cG9ydCBjbGFzcyBRdWFsaXR5UmVjb3JkZXIgZXh0ZW5kcyBLZXllZFJlY29yZGVyPFF1YWxpdHlFbnRyeT4gaW1wbGVtZW50cyBSZWNvcmRlciB7XG4gIHByaXZhdGUgc3RhdGljIF9jb3VudGVyID0gMDtcblxuICByZWFkb25seSBpZDogc3RyaW5nO1xuICByZWFkb25seSBwcmVmZXJyZWRPcGVyYXRpb246IFJlY29yZGVyT3BlcmF0aW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IHNjb3JpbmdGbjogUXVhbGl0eVNjb3JpbmdGbjtcblxuICAvLyBQZXItc3RhZ2UgYnVmZmVycyAocmVzZXQgb24gZWFjaCBzdGFnZVN0YXJ0KVxuICBwcml2YXRlIGN1cnJlbnRSdW50aW1lU3RhZ2VJZCA9ICcnO1xuICBwcml2YXRlIGN1cnJlbnRTdGFnZUlkID0gJyc7XG4gIHByaXZhdGUgY3VycmVudFN0YWdlTmFtZSA9ICcnO1xuICBwcml2YXRlIGN1cnJlbnRLZXlzUmVhZDogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBjdXJyZW50S2V5c1dyaXR0ZW46IHN0cmluZ1tdID0gW107XG5cbiAgY29uc3RydWN0b3Ioc2NvcmluZ0ZuOiBRdWFsaXR5U2NvcmluZ0ZuLCBvcHRpb25zPzogUXVhbGl0eVJlY29yZGVyT3B0aW9ucykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5zY29yaW5nRm4gPSBzY29yaW5nRm47XG4gICAgdGhpcy5pZCA9IG9wdGlvbnM/LmlkID8/IGBxdWFsaXR5LSR7KytRdWFsaXR5UmVjb3JkZXIuX2NvdW50ZXJ9YDtcbiAgICB0aGlzLnByZWZlcnJlZE9wZXJhdGlvbiA9IG9wdGlvbnM/LnByZWZlcnJlZE9wZXJhdGlvbiA/PyAnYWNjdW11bGF0ZSc7XG4gIH1cblxuICBvblN0YWdlU3RhcnQoZXZlbnQ6IFN0YWdlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRSdW50aW1lU3RhZ2VJZCA9IGV2ZW50LnJ1bnRpbWVTdGFnZUlkO1xuICAgIHRoaXMuY3VycmVudFN0YWdlSWQgPSBldmVudC5zdGFnZUlkO1xuICAgIHRoaXMuY3VycmVudFN0YWdlTmFtZSA9IGV2ZW50LnN0YWdlTmFtZTtcbiAgICB0aGlzLmN1cnJlbnRLZXlzUmVhZCA9IFtdO1xuICAgIHRoaXMuY3VycmVudEtleXNXcml0dGVuID0gW107XG4gIH1cblxuICBvblJlYWQoZXZlbnQ6IFJlYWRFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5rZXkpIHRoaXMuY3VycmVudEtleXNSZWFkLnB1c2goZXZlbnQua2V5KTtcbiAgfVxuXG4gIG9uV3JpdGUoZXZlbnQ6IFdyaXRlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRLZXlzV3JpdHRlbi5wdXNoKGV2ZW50LmtleSk7XG4gIH1cblxuICBvblN0YWdlRW5kKGV2ZW50OiBTdGFnZUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgeyBzY29yZSwgZmFjdG9ycyB9ID0gdGhpcy5zY29yaW5nRm4odGhpcy5jdXJyZW50UnVudGltZVN0YWdlSWQsIHtcbiAgICAgIHN0YWdlTmFtZTogdGhpcy5jdXJyZW50U3RhZ2VOYW1lLFxuICAgICAgc3RhZ2VJZDogdGhpcy5jdXJyZW50U3RhZ2VJZCxcbiAgICAgIGtleXNSZWFkOiB0aGlzLmN1cnJlbnRLZXlzUmVhZCxcbiAgICAgIGtleXNXcml0dGVuOiB0aGlzLmN1cnJlbnRLZXlzV3JpdHRlbixcbiAgICAgIGR1cmF0aW9uOiBldmVudC5kdXJhdGlvbixcbiAgICB9KTtcblxuICAgIHRoaXMuc3RvcmUodGhpcy5jdXJyZW50UnVudGltZVN0YWdlSWQsIHtcbiAgICAgIHN0YWdlTmFtZTogdGhpcy5jdXJyZW50U3RhZ2VOYW1lLFxuICAgICAgc3RhZ2VJZDogdGhpcy5jdXJyZW50U3RhZ2VJZCxcbiAgICAgIHNjb3JlOiBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBzY29yZSkpLFxuICAgICAgZmFjdG9yczogZmFjdG9ycyA/PyBbXSxcbiAgICAgIGtleXNSZWFkOiBbLi4udGhpcy5jdXJyZW50S2V5c1JlYWRdLFxuICAgICAga2V5c1dyaXR0ZW46IFsuLi50aGlzLmN1cnJlbnRLZXlzV3JpdHRlbl0sXG4gICAgfSk7XG4gIH1cblxuICAvKiogT3ZlcmFsbCBxdWFsaXR5IHNjb3JlIOKAlCBhdmVyYWdlIG9mIGFsbCBzdGVwIHNjb3Jlcy4gKi9cbiAgZ2V0T3ZlcmFsbFNjb3JlKCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuc2l6ZSA9PT0gMCkgcmV0dXJuIDEuMDtcbiAgICBjb25zdCB0b3RhbCA9IHRoaXMuYWdncmVnYXRlKChzdW0sIGUpID0+IHN1bSArIGUuc2NvcmUsIDApO1xuICAgIHJldHVybiB0b3RhbCAvIHRoaXMuc2l6ZTtcbiAgfVxuXG4gIC8qKiBGaW5kIHRoZSBsb3dlc3Qtc2NvcmluZyBzdGVwLiAqL1xuICBnZXRMb3dlc3QoKTogeyBydW50aW1lU3RhZ2VJZDogc3RyaW5nOyBlbnRyeTogUXVhbGl0eUVudHJ5IH0gfCB1bmRlZmluZWQge1xuICAgIGxldCBsb3dlc3Q6IHsgcnVudGltZVN0YWdlSWQ6IHN0cmluZzsgZW50cnk6IFF1YWxpdHlFbnRyeSB9IHwgdW5kZWZpbmVkO1xuICAgIGZvciAoY29uc3QgW2tleSwgZW50cnldIG9mIHRoaXMuZ2V0TWFwKCkpIHtcbiAgICAgIGlmICghbG93ZXN0IHx8IGVudHJ5LnNjb3JlIDwgbG93ZXN0LmVudHJ5LnNjb3JlKSB7XG4gICAgICAgIGxvd2VzdCA9IHsgcnVudGltZVN0YWdlSWQ6IGtleSwgZW50cnkgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxvd2VzdDtcbiAgfVxuXG4gIC8qKiBQcm9ncmVzc2l2ZSBxdWFsaXR5IHNjb3JlIHVwIHRvIGEgc2xpZGVyIHBvc2l0aW9uLiAqL1xuICBnZXRTY29yZVVwVG8odmlzaWJsZUtleXM6IFJlYWRvbmx5U2V0PHN0cmluZz4pOiBudW1iZXIge1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgY29uc3QgdG90YWwgPSB0aGlzLmFjY3VtdWxhdGUoXG4gICAgICAoc3VtLCBlKSA9PiB7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICAgIHJldHVybiBzdW0gKyBlLnNjb3JlO1xuICAgICAgfSxcbiAgICAgIDAsXG4gICAgICB2aXNpYmxlS2V5cyxcbiAgICApO1xuICAgIHJldHVybiBjb3VudCA9PT0gMCA/IDEuMCA6IHRvdGFsIC8gY291bnQ7XG4gIH1cblxuICB0b1NuYXBzaG90KCkge1xuICAgIGNvbnN0IHN0ZXBzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRoaXMuZ2V0TWFwKCkpIHtcbiAgICAgIHN0ZXBzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6ICdRdWFsaXR5JyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnUXVhbGl0eSBzY29yZXMgcGVyIGV4ZWN1dGlvbiBzdGVwIHdpdGggYmFja3RyYWNraW5nIHN1cHBvcnQnLFxuICAgICAgcHJlZmVycmVkT3BlcmF0aW9uOiB0aGlzLnByZWZlcnJlZE9wZXJhdGlvbixcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbnVtZXJpY0ZpZWxkOiAnc2NvcmUnLFxuICAgICAgICBvdmVyYWxsU2NvcmU6IHRoaXMuZ2V0T3ZlcmFsbFNjb3JlKCksXG4gICAgICAgIGxvd2VzdFN0ZXA6IHRoaXMuZ2V0TG93ZXN0KCk/LnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgICBzdGVwcyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIG92ZXJyaWRlIGNsZWFyKCk6IHZvaWQge1xuICAgIHN1cGVyLmNsZWFyKCk7XG4gICAgdGhpcy5jdXJyZW50UnVudGltZVN0YWdlSWQgPSAnJztcbiAgICB0aGlzLmN1cnJlbnRTdGFnZUlkID0gJyc7XG4gICAgdGhpcy5jdXJyZW50U3RhZ2VOYW1lID0gJyc7XG4gICAgdGhpcy5jdXJyZW50S2V5c1JlYWQgPSBbXTtcbiAgICB0aGlzLmN1cnJlbnRLZXlzV3JpdHRlbiA9IFtdO1xuICB9XG59XG4iXX0=
|
|
137
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUXVhbGl0eVJlY29yZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9yZWNvcmRlci9RdWFsaXR5UmVjb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Qkc7OztBQUdILHlEQUFtRDtBQTJDbkQsTUFBYSxlQUFnQixTQUFRLGdDQUEyQjtJQUN0RCxNQUFNLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUVuQixFQUFFLENBQVM7SUFDWCxrQkFBa0IsQ0FBb0I7SUFDOUIsU0FBUyxDQUFtQjtJQUU3QywrQ0FBK0M7SUFDdkMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO0lBQzNCLGNBQWMsR0FBRyxFQUFFLENBQUM7SUFDcEIsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLGVBQWUsR0FBYSxFQUFFLENBQUM7SUFDL0Isa0JBQWtCLEdBQWEsRUFBRSxDQUFDO0lBRTFDLFlBQVksU0FBMkIsRUFBRSxPQUFnQztRQUN2RSxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzNCLElBQUksQ0FBQyxFQUFFLEdBQUcsT0FBTyxFQUFFLEVBQUUsSUFBSSxXQUFXLEVBQUUsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxPQUFPLEVBQUUsa0JBQWtCLElBQUksWUFBWSxDQUFDO0lBQ3hFLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBaUI7UUFDNUIsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUM7UUFDbEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFnQjtRQUNyQixJQUFJLEtBQUssQ0FBQyxHQUFHO1lBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxPQUFPLENBQUMsS0FBaUI7UUFDdkIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVELFVBQVUsQ0FBQyxLQUFpQjtRQUMxQixNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQ3BFLFNBQVMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1lBQ2hDLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYztZQUM1QixRQUFRLEVBQUUsSUFBSSxDQUFDLGVBQWU7WUFDOUIsV0FBVyxFQUFFLElBQUksQ0FBQyxrQkFBa0I7WUFDcEMsUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRO1NBQ3pCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQ3JDLFNBQVMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1lBQ2hDLE9BQU8sRUFBRSxJQUFJLENBQUMsY0FBYztZQUM1QixLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdEMsT0FBTyxFQUFFLE9BQU8sSUFBSSxFQUFFO1lBQ3RCLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztZQUNuQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztTQUMxQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsMERBQTBEO0lBQzFELGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQztZQUFFLE9BQU8sR0FBRyxDQUFDO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzRCxPQUFPLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQzNCLENBQUM7SUFFRCxvQ0FBb0M7SUFDcEMsU0FBUztRQUNQLElBQUksTUFBbUUsQ0FBQztRQUN4RSxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBQ2hELE1BQU0sR0FBRyxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDMUMsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQseURBQXlEO0lBQ3pELFlBQVksQ0FBQyxXQUFnQztRQUMzQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUMzQixDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNULEtBQUssRUFBRSxDQUFDO1lBQ1IsT0FBTyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUN2QixDQUFDLEVBQ0QsQ0FBQyxFQUNELFdBQVcsQ0FDWixDQUFDO1FBQ0YsT0FBTyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDM0MsQ0FBQztJQUVELFVBQVU7UUFDUixNQUFNLEtBQUssR0FBNEIsRUFBRSxDQUFDO1FBQzFDLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztZQUN6QyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLENBQUM7UUFDRCxPQUFPO1lBQ0wsSUFBSSxFQUFFLFNBQVM7WUFDZixXQUFXLEVBQUUsNkRBQTZEO1lBQzFFLGtCQUFrQixFQUFFLElBQUksQ0FBQyxrQkFBa0I7WUFDM0MsSUFBSSxFQUFFO2dCQUNKLFlBQVksRUFBRSxPQUFPO2dCQUNyQixZQUFZLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDcEMsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxjQUFjO2dCQUM1QyxLQUFLO2FBQ047U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVRLEtBQUs7UUFDWixLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDZCxJQUFJLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztJQUMvQixDQUFDOztBQWpISCwwQ0FrSEMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFF1YWxpdHlSZWNvcmRlciDigJQgcGVyLXN0ZXAgcXVhbGl0eSBzY29yaW5nIGtleWVkIGJ5IHJ1bnRpbWVTdGFnZUlkLlxuICpcbiAqIENvbGxlY3RzIHF1YWxpdHkgc2NvcmVzIGR1cmluZyB0cmF2ZXJzYWwgKGFjY3VtdWxhdGUgcGF0dGVybikuXG4gKiBBZnRlciBleGVjdXRpb24sIHVzZSBxdWFsaXR5VHJhY2UoKSB0byBiYWNrdHJhY2sgZnJvbSBhbnkgbG93LXNjb3Jpbmcgc3RlcC5cbiAqXG4gKiBFeHRlbmRzIEtleWVkUmVjb3JkZXI8UXVhbGl0eUVudHJ5PiBmb3IgTygxKSBsb29rdXAgYW5kIHN0YW5kYXJkIG9wZXJhdGlvbnM6XG4gKiAgIC0gKipUcmFuc2xhdGUqKjogYGdldEJ5S2V5KCdjYWxsLWxsbSM1JylgIOKAlCBxdWFsaXR5IGF0IHRoaXMgc3RlcFxuICogICAtICoqQWNjdW11bGF0ZSoqOiBwcm9ncmVzc2l2ZSBxdWFsaXR5IHVwIHRvIHNsaWRlciBwb3NpdGlvblxuICogICAtICoqQWdncmVnYXRlKio6IG92ZXJhbGwgcGlwZWxpbmUgcXVhbGl0eSBzY29yZVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBxdWFsaXR5ID0gbmV3IFF1YWxpdHlSZWNvcmRlcigocnVudGltZVN0YWdlSWQsIGV2ZW50KSA9PiB7XG4gKiAgIC8vIEN1c3RvbSBzY29yaW5nIGZ1bmN0aW9uIOKAlCByZXR1cm4gMC4w4oCTMS4wXG4gKiAgIGlmIChldmVudC5zdGFnZU5hbWUuaW5jbHVkZXMoJ2xsbScpKSByZXR1cm4gMC43O1xuICogICByZXR1cm4gMS4wO1xuICogfSk7XG4gKiBleGVjdXRvci5hdHRhY2hSZWNvcmRlcihxdWFsaXR5KTtcbiAqIGF3YWl0IGV4ZWN1dG9yLnJ1bigpO1xuICpcbiAqIC8vIFBlci1zdGVwIHNjb3JlXG4gKiBxdWFsaXR5LmdldEJ5S2V5KCdjYWxsLWxsbSM1Jyk7ICAvLyB7IHNjb3JlOiAwLjcsIHN0YWdlTmFtZTogJ0NhbGxMTE0nLCBmYWN0b3JzOiBbLi4uXSB9XG4gKlxuICogLy8gT3ZlcmFsbCBxdWFsaXR5XG4gKiBxdWFsaXR5LmdldE92ZXJhbGxTY29yZSgpOyAgLy8gMC44NVxuICpcbiAqIC8vIExvd2VzdC1zY29yaW5nIHN0ZXBcbiAqIHF1YWxpdHkuZ2V0TG93ZXN0KCk7ICAvLyB7IHJ1bnRpbWVTdGFnZUlkOiAnY2FsbC1sbG0jNScsIGVudHJ5OiB7IHNjb3JlOiAwLjcsIC4uLiB9IH1cbiAqIGBgYFxuICovXG5cbmltcG9ydCB0eXBlIHsgUmVhZEV2ZW50LCBSZWNvcmRlciwgU3RhZ2VFdmVudCwgV3JpdGVFdmVudCB9IGZyb20gJy4uL3Njb3BlL3R5cGVzLmpzJztcbmltcG9ydCB7IEtleWVkUmVjb3JkZXIgfSBmcm9tICcuL0tleWVkUmVjb3JkZXIuanMnO1xuaW1wb3J0IHR5cGUgeyBSZWNvcmRlck9wZXJhdGlvbiB9IGZyb20gJy4vUmVjb3JkZXJPcGVyYXRpb24uanMnO1xuXG4vKiogUGVyLXN0ZXAgcXVhbGl0eSBkYXRhIHN0b3JlZCBieSBRdWFsaXR5UmVjb3JkZXIuICovXG5leHBvcnQgaW50ZXJmYWNlIFF1YWxpdHlFbnRyeSB7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBzdGFnZSBuYW1lLiAqL1xuICBzdGFnZU5hbWU6IHN0cmluZztcbiAgLyoqIFN0YWJsZSBzdGFnZSBpZGVudGlmaWVyLiAqL1xuICBzdGFnZUlkOiBzdHJpbmc7XG4gIC8qKiBRdWFsaXR5IHNjb3JlIGZvciB0aGlzIHN0ZXAgKDAuMCA9IHdvcnN0LCAxLjAgPSBiZXN0KS4gKi9cbiAgc2NvcmU6IG51bWJlcjtcbiAgLyoqIFdoYXQgY29udHJpYnV0ZWQgdG8gdGhpcyBzY29yZS4gKi9cbiAgZmFjdG9yczogc3RyaW5nW107XG4gIC8qKiBLZXlzIHJlYWQgZHVyaW5nIHRoaXMgc3RlcCAoZm9yIGJhY2t0cmFja2luZykuICovXG4gIGtleXNSZWFkOiBzdHJpbmdbXTtcbiAgLyoqIEtleXMgd3JpdHRlbiBkdXJpbmcgdGhpcyBzdGVwIChmb3IgYmFja3RyYWNraW5nKS4gKi9cbiAga2V5c1dyaXR0ZW46IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFNjb3JpbmcgZnVuY3Rpb24gY2FsbGVkIGF0IHRoZSBlbmQgb2YgZWFjaCBzdGFnZS5cbiAqIFJlY2VpdmVzIHRoZSBydW50aW1lU3RhZ2VJZCwgc3RhZ2UgZXZlbnQsIGFuZCBhIHN1bW1hcnkgb2YgcmVhZHMvd3JpdGVzLlxuICogUmV0dXJuIGEgc2NvcmUgKDAuMOKAkzEuMCkgYW5kIG9wdGlvbmFsIGZhY3RvcnMgZXhwbGFpbmluZyB0aGUgc2NvcmUuXG4gKi9cbmV4cG9ydCB0eXBlIFF1YWxpdHlTY29yaW5nRm4gPSAoXG4gIHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcsXG4gIGNvbnRleHQ6IHtcbiAgICBzdGFnZU5hbWU6IHN0cmluZztcbiAgICBzdGFnZUlkOiBzdHJpbmc7XG4gICAga2V5c1JlYWQ6IHN0cmluZ1tdO1xuICAgIGtleXNXcml0dGVuOiBzdHJpbmdbXTtcbiAgICBkdXJhdGlvbj86IG51bWJlcjtcbiAgfSxcbikgPT4geyBzY29yZTogbnVtYmVyOyBmYWN0b3JzPzogc3RyaW5nW10gfTtcblxuLyoqIE9wdGlvbnMgZm9yIFF1YWxpdHlSZWNvcmRlci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUXVhbGl0eVJlY29yZGVyT3B0aW9ucyB7XG4gIC8qKiBSZWNvcmRlciBJRC4gRGVmYXVsdHMgdG8gYXV0by1pbmNyZW1lbnQuICovXG4gIGlkPzogc3RyaW5nO1xuICAvKiogUHJlZmVycmVkIFVJIG9wZXJhdGlvbi4gRGVmYXVsdHMgdG8gJ2FjY3VtdWxhdGUnIChwcm9ncmVzc2l2ZSBxdWFsaXR5KS4gKi9cbiAgcHJlZmVycmVkT3BlcmF0aW9uPzogUmVjb3JkZXJPcGVyYXRpb247XG59XG5cbmV4cG9ydCBjbGFzcyBRdWFsaXR5UmVjb3JkZXIgZXh0ZW5kcyBLZXllZFJlY29yZGVyPFF1YWxpdHlFbnRyeT4gaW1wbGVtZW50cyBSZWNvcmRlciB7XG4gIHByaXZhdGUgc3RhdGljIF9jb3VudGVyID0gMDtcblxuICByZWFkb25seSBpZDogc3RyaW5nO1xuICByZWFkb25seSBwcmVmZXJyZWRPcGVyYXRpb246IFJlY29yZGVyT3BlcmF0aW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IHNjb3JpbmdGbjogUXVhbGl0eVNjb3JpbmdGbjtcblxuICAvLyBQZXItc3RhZ2UgYnVmZmVycyAocmVzZXQgb24gZWFjaCBzdGFnZVN0YXJ0KVxuICBwcml2YXRlIGN1cnJlbnRSdW50aW1lU3RhZ2VJZCA9ICcnO1xuICBwcml2YXRlIGN1cnJlbnRTdGFnZUlkID0gJyc7XG4gIHByaXZhdGUgY3VycmVudFN0YWdlTmFtZSA9ICcnO1xuICBwcml2YXRlIGN1cnJlbnRLZXlzUmVhZDogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBjdXJyZW50S2V5c1dyaXR0ZW46IHN0cmluZ1tdID0gW107XG5cbiAgY29uc3RydWN0b3Ioc2NvcmluZ0ZuOiBRdWFsaXR5U2NvcmluZ0ZuLCBvcHRpb25zPzogUXVhbGl0eVJlY29yZGVyT3B0aW9ucykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5zY29yaW5nRm4gPSBzY29yaW5nRm47XG4gICAgdGhpcy5pZCA9IG9wdGlvbnM/LmlkID8/IGBxdWFsaXR5LSR7KytRdWFsaXR5UmVjb3JkZXIuX2NvdW50ZXJ9YDtcbiAgICB0aGlzLnByZWZlcnJlZE9wZXJhdGlvbiA9IG9wdGlvbnM/LnByZWZlcnJlZE9wZXJhdGlvbiA/PyAnYWNjdW11bGF0ZSc7XG4gIH1cblxuICBvblN0YWdlU3RhcnQoZXZlbnQ6IFN0YWdlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRSdW50aW1lU3RhZ2VJZCA9IGV2ZW50LnJ1bnRpbWVTdGFnZUlkO1xuICAgIHRoaXMuY3VycmVudFN0YWdlSWQgPSBldmVudC5zdGFnZUlkO1xuICAgIHRoaXMuY3VycmVudFN0YWdlTmFtZSA9IGV2ZW50LnN0YWdlTmFtZTtcbiAgICB0aGlzLmN1cnJlbnRLZXlzUmVhZCA9IFtdO1xuICAgIHRoaXMuY3VycmVudEtleXNXcml0dGVuID0gW107XG4gIH1cblxuICBvblJlYWQoZXZlbnQ6IFJlYWRFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5rZXkpIHRoaXMuY3VycmVudEtleXNSZWFkLnB1c2goZXZlbnQua2V5KTtcbiAgfVxuXG4gIG9uV3JpdGUoZXZlbnQ6IFdyaXRlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRLZXlzV3JpdHRlbi5wdXNoKGV2ZW50LmtleSk7XG4gIH1cblxuICBvblN0YWdlRW5kKGV2ZW50OiBTdGFnZUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgeyBzY29yZSwgZmFjdG9ycyB9ID0gdGhpcy5zY29yaW5nRm4odGhpcy5jdXJyZW50UnVudGltZVN0YWdlSWQsIHtcbiAgICAgIHN0YWdlTmFtZTogdGhpcy5jdXJyZW50U3RhZ2VOYW1lLFxuICAgICAgc3RhZ2VJZDogdGhpcy5jdXJyZW50U3RhZ2VJZCxcbiAgICAgIGtleXNSZWFkOiB0aGlzLmN1cnJlbnRLZXlzUmVhZCxcbiAgICAgIGtleXNXcml0dGVuOiB0aGlzLmN1cnJlbnRLZXlzV3JpdHRlbixcbiAgICAgIGR1cmF0aW9uOiBldmVudC5kdXJhdGlvbixcbiAgICB9KTtcblxuICAgIHRoaXMuc3RvcmUodGhpcy5jdXJyZW50UnVudGltZVN0YWdlSWQsIHtcbiAgICAgIHN0YWdlTmFtZTogdGhpcy5jdXJyZW50U3RhZ2VOYW1lLFxuICAgICAgc3RhZ2VJZDogdGhpcy5jdXJyZW50U3RhZ2VJZCxcbiAgICAgIHNjb3JlOiBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBzY29yZSkpLFxuICAgICAgZmFjdG9yczogZmFjdG9ycyA/PyBbXSxcbiAgICAgIGtleXNSZWFkOiBbLi4udGhpcy5jdXJyZW50S2V5c1JlYWRdLFxuICAgICAga2V5c1dyaXR0ZW46IFsuLi50aGlzLmN1cnJlbnRLZXlzV3JpdHRlbl0sXG4gICAgfSk7XG4gIH1cblxuICAvKiogT3ZlcmFsbCBxdWFsaXR5IHNjb3JlIOKAlCBhdmVyYWdlIG9mIGFsbCBzdGVwIHNjb3Jlcy4gKi9cbiAgZ2V0T3ZlcmFsbFNjb3JlKCk6IG51bWJlciB7XG4gICAgaWYgKHRoaXMuc2l6ZSA9PT0gMCkgcmV0dXJuIDEuMDtcbiAgICBjb25zdCB0b3RhbCA9IHRoaXMuYWdncmVnYXRlKChzdW0sIGUpID0+IHN1bSArIGUuc2NvcmUsIDApO1xuICAgIHJldHVybiB0b3RhbCAvIHRoaXMuc2l6ZTtcbiAgfVxuXG4gIC8qKiBGaW5kIHRoZSBsb3dlc3Qtc2NvcmluZyBzdGVwLiAqL1xuICBnZXRMb3dlc3QoKTogeyBydW50aW1lU3RhZ2VJZDogc3RyaW5nOyBlbnRyeTogUXVhbGl0eUVudHJ5IH0gfCB1bmRlZmluZWQge1xuICAgIGxldCBsb3dlc3Q6IHsgcnVudGltZVN0YWdlSWQ6IHN0cmluZzsgZW50cnk6IFF1YWxpdHlFbnRyeSB9IHwgdW5kZWZpbmVkO1xuICAgIGZvciAoY29uc3QgW2tleSwgZW50cnldIG9mIHRoaXMuZ2V0TWFwKCkpIHtcbiAgICAgIGlmICghbG93ZXN0IHx8IGVudHJ5LnNjb3JlIDwgbG93ZXN0LmVudHJ5LnNjb3JlKSB7XG4gICAgICAgIGxvd2VzdCA9IHsgcnVudGltZVN0YWdlSWQ6IGtleSwgZW50cnkgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxvd2VzdDtcbiAgfVxuXG4gIC8qKiBQcm9ncmVzc2l2ZSBxdWFsaXR5IHNjb3JlIHVwIHRvIGEgc2xpZGVyIHBvc2l0aW9uLiAqL1xuICBnZXRTY29yZVVwVG8odmlzaWJsZUtleXM6IFJlYWRvbmx5U2V0PHN0cmluZz4pOiBudW1iZXIge1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgY29uc3QgdG90YWwgPSB0aGlzLmFjY3VtdWxhdGUoXG4gICAgICAoc3VtLCBlKSA9PiB7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICAgIHJldHVybiBzdW0gKyBlLnNjb3JlO1xuICAgICAgfSxcbiAgICAgIDAsXG4gICAgICB2aXNpYmxlS2V5cyxcbiAgICApO1xuICAgIHJldHVybiBjb3VudCA9PT0gMCA/IDEuMCA6IHRvdGFsIC8gY291bnQ7XG4gIH1cblxuICB0b1NuYXBzaG90KCkge1xuICAgIGNvbnN0IHN0ZXBzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHRoaXMuZ2V0TWFwKCkpIHtcbiAgICAgIHN0ZXBzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6ICdRdWFsaXR5JyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnUXVhbGl0eSBzY29yZXMgcGVyIGV4ZWN1dGlvbiBzdGVwIHdpdGggYmFja3RyYWNraW5nIHN1cHBvcnQnLFxuICAgICAgcHJlZmVycmVkT3BlcmF0aW9uOiB0aGlzLnByZWZlcnJlZE9wZXJhdGlvbixcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgbnVtZXJpY0ZpZWxkOiAnc2NvcmUnLFxuICAgICAgICBvdmVyYWxsU2NvcmU6IHRoaXMuZ2V0T3ZlcmFsbFNjb3JlKCksXG4gICAgICAgIGxvd2VzdFN0ZXA6IHRoaXMuZ2V0TG93ZXN0KCk/LnJ1bnRpbWVTdGFnZUlkLFxuICAgICAgICBzdGVwcyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIG92ZXJyaWRlIGNsZWFyKCk6IHZvaWQge1xuICAgIHN1cGVyLmNsZWFyKCk7XG4gICAgdGhpcy5jdXJyZW50UnVudGltZVN0YWdlSWQgPSAnJztcbiAgICB0aGlzLmN1cnJlbnRTdGFnZUlkID0gJyc7XG4gICAgdGhpcy5jdXJyZW50U3RhZ2VOYW1lID0gJyc7XG4gICAgdGhpcy5jdXJyZW50S2V5c1JlYWQgPSBbXTtcbiAgICB0aGlzLmN1cnJlbnRLZXlzV3JpdHRlbiA9IFtdO1xuICB9XG59XG4iXX0=
|
|
@@ -58,15 +58,15 @@ exports.SequenceRecorder = void 0;
|
|
|
58
58
|
* ```
|
|
59
59
|
*/
|
|
60
60
|
class SequenceRecorder {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
61
|
+
/** Ordered sequence of all entries (insertion order). */
|
|
62
|
+
entries = [];
|
|
63
|
+
/** Per-step index: runtimeStageId → entries for that step. Same objects as entries[]. */
|
|
64
|
+
byRuntimeStageId = new Map();
|
|
65
|
+
/** Per-step range index: runtimeStageId → [firstIdx, endIdx) in entries array.
|
|
66
|
+
* endIdx includes trailing keyless entries (structural markers). Maintained during emit(). */
|
|
67
|
+
entryRanges = new Map();
|
|
68
|
+
/** The runtimeStageId of the most recently emitted keyed entry. Used to extend ranges for trailing markers. */
|
|
69
|
+
lastEmittedId;
|
|
70
70
|
// ── Write ─────────────────────────────────────────────────────────────
|
|
71
71
|
/**
|
|
72
72
|
* Append an entry to both the ordered sequence, keyed index, and range index.
|
|
@@ -112,8 +112,7 @@ class SequenceRecorder {
|
|
|
112
112
|
// ── Keyed access ──────────────────────────────────────────────────────
|
|
113
113
|
/** O(1) lookup: all entries for a specific execution step (returns a copy). */
|
|
114
114
|
getEntriesForStep(runtimeStageId) {
|
|
115
|
-
|
|
116
|
-
return [...((_a = this.byRuntimeStageId.get(runtimeStageId)) !== null && _a !== void 0 ? _a : [])];
|
|
115
|
+
return [...(this.byRuntimeStageId.get(runtimeStageId) ?? [])];
|
|
117
116
|
}
|
|
118
117
|
/** Number of unique execution steps that have entries. */
|
|
119
118
|
get stepCount() {
|
|
@@ -195,4 +194,4 @@ class SequenceRecorder {
|
|
|
195
194
|
}
|
|
196
195
|
}
|
|
197
196
|
exports.SequenceRecorder = SequenceRecorder;
|
|
198
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VxdWVuY2VSZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcmVjb3JkZXIvU2VxdWVuY2VSZWNvcmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVERztBQUNILE1BQXNCLGdCQUFnQjtJQUF0QztRQUdFLHlEQUF5RDtRQUN4QyxZQUFPLEdBQVEsRUFBRSxDQUFDO1FBQ25DLHlGQUF5RjtRQUN4RSxxQkFBZ0IsR0FBRyxJQUFJLEdBQUcsRUFBZSxDQUFDO1FBQzNEO3VHQUMrRjtRQUM5RSxnQkFBVyxHQUFHLElBQUksR0FBRyxFQUFnRCxDQUFDO0lBNkl6RixDQUFDO0lBeklDLHlFQUF5RTtJQUV6RTs7O09BR0c7SUFDTyxJQUFJLENBQUMsS0FBUTtRQUNyQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDO1FBQ2hDLElBQUksRUFBRSxFQUFFLENBQUM7WUFDUCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDVCxHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUNULElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZ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RSxDQUFDO2dCQUNSLGlHQUFpRztnQkFDakcsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUM7b0JBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwRCxDQUFDO2lCQUFNLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO2dCQUM5QixrRkFBa0Y7Z0JBQ2xGLElBQUksY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDOUIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLGNBQWMsQ0FBQyxDQUFDO29CQUMvQixjQUFjLEdBQUcsRUFBRSxDQUFDO2dCQUN0QixDQUFDO2dCQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckIsQ0FBQztZQUNELG1GQUFtRjtZQUNuRiwwRUFBMEU7UUFDNUUsQ0FBQztRQUNELHVFQUF1RTtRQUN2RSxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQseUVBQXlFO0lBRXpFLG1FQUFtRTtJQUNuRSxLQUFLO1FBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO0lBQ2pDLENBQUM7Q0FDRjtBQXRKRCw0Q0FzSkMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNlcXVlbmNlUmVjb3JkZXI8VD4g4oCUIGJhc2UgY2xhc3MgZm9yIG9yZGVyZWQgc2VxdWVuY2UgcmVjb3JkZXJzIHdpdGgga2V5ZWQgaW5kZXguXG4gKlxuICogUHJvdmlkZXMgZHVhbC1pbmRleGVkIHN0b3JhZ2U6IGEgZmxhdCBhcnJheSBwcmVzZXJ2aW5nIGluc2VydGlvbiBvcmRlciBwbHVzIGFcbiAqIE1hcDxydW50aW1lU3RhZ2VJZCwgVFtdPiBmb3IgTygxKSBwZXItc3RlcCBsb29rdXAuIE9uZSBlbnRyeSB0eXBlLCBtdWx0aXBsZSBlbnRyaWVzXG4gKiBwZXIgc3RlcC4gRGVzaWduZWQgZm9yIHJlY29yZGVycyB0aGF0IGltcGxlbWVudCBCT1RIIFJlY29yZGVyIGFuZCBGbG93UmVjb3JkZXJcbiAqIChtZXJnaW5nIGRhdGEgb3BzIGFuZCBjb250cm9sIGZsb3cgaW50byBhIHNpbmdsZSBpbnRlcmxlYXZlZCBzZXF1ZW5jZSkuXG4gKlxuICogKipDb250cmFzdCB3aXRoIEtleWVkUmVjb3JkZXI8VD46KipcbiAqIC0gYEtleWVkUmVjb3JkZXI8VD5gIOKAlCAxOjEgTWFwLiBPbmUgZW50cnkgcGVyIHJ1bnRpbWVTdGFnZUlkLiBGb3Igc2luZ2xlLXZhbHVlIHJlY29yZGVyc1xuICogICBsaWtlIE1ldHJpY1JlY29yZGVyIChvbmUgU3RlcE1ldHJpY3MgcGVyIHN0YWdlIGV4ZWN1dGlvbikuXG4gKiAtIGBTZXF1ZW5jZVJlY29yZGVyPFQ+YCDigJQgMTpOIHNlcXVlbmNlICsgTWFwLiBNdWx0aXBsZSBlbnRyaWVzIHBlciBydW50aW1lU3RhZ2VJZCxcbiAqICAgcGx1cyBvcmRlcmluZyBtYXR0ZXJzLiBGb3IgcmVjb3JkZXJzIHRoYXQgcHJvZHVjZSBhIHByb3NlIG5hcnJhdGl2ZSBvciBldmVudCBsb2dcbiAqICAgd2hlcmUgYSBzaW5nbGUgc3RlcCBnZW5lcmF0ZXMgc3RhZ2UgKyBkYXRhICsgZGVjaXNpb24gZW50cmllcy5cbiAqXG4gKiAqKkhvdyB0byBjaG9vc2U6KipcbiAqIC0gSWYgZWFjaCBzdGVwIHByb2R1Y2VzIGV4YWN0bHkgb25lIHJlY29yZCDihpIgZXh0ZW5kIGBLZXllZFJlY29yZGVyPFQ+YFxuICogLSBJZiBlYWNoIHN0ZXAgcHJvZHVjZXMgbXVsdGlwbGUgcmVjb3JkcyBvciBvcmRlcmluZyBtYXR0ZXJzIOKGkiBleHRlbmQgYFNlcXVlbmNlUmVjb3JkZXI8VD5gXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IFNlcXVlbmNlUmVjb3JkZXIgfSBmcm9tICdmb290cHJpbnRqcy90cmFjZSc7XG4gKlxuICogaW50ZXJmYWNlIEF1ZGl0RW50cnkge1xuICogICBydW50aW1lU3RhZ2VJZD86IHN0cmluZztcbiAqICAgdHlwZTogJ3JlYWQnIHwgJ3dyaXRlJyB8ICdkZWNpc2lvbic7XG4gKiAgIGRldGFpbDogc3RyaW5nO1xuICogfVxuICpcbiAqIGNsYXNzIEF1ZGl0UmVjb3JkZXIgZXh0ZW5kcyBTZXF1ZW5jZVJlY29yZGVyPEF1ZGl0RW50cnk+IHtcbiAqICAgcmVhZG9ubHkgaWQgPSAnYXVkaXQnO1xuICpcbiAqICAgLy8gU2NvcGUgaG9va3MgKGZpcmVzIGR1cmluZyBzdGFnZSBleGVjdXRpb24pXG4gKiAgIG9uUmVhZChldmVudDogUmVhZEV2ZW50KSB7XG4gKiAgICAgdGhpcy5lbWl0KHsgcnVudGltZVN0YWdlSWQ6IGV2ZW50LnJ1bnRpbWVTdGFnZUlkLCB0eXBlOiAncmVhZCcsIGRldGFpbDogZXZlbnQua2V5IH0pO1xuICogICB9XG4gKiAgIG9uV3JpdGUoZXZlbnQ6IFdyaXRlRXZlbnQpIHtcbiAqICAgICB0aGlzLmVtaXQoeyBydW50aW1lU3RhZ2VJZDogZXZlbnQucnVudGltZVN0YWdlSWQsIHR5cGU6ICd3cml0ZScsIGRldGFpbDogZXZlbnQua2V5IH0pO1xuICogICB9XG4gKlxuICogICAvLyBGbG93IGhvb2tzIChmaXJlcyBhZnRlciBzdGFnZSBleGVjdXRpb24pXG4gKiAgIG9uRGVjaXNpb24oZXZlbnQ6IEZsb3dEZWNpc2lvbkV2ZW50KSB7XG4gKiAgICAgdGhpcy5lbWl0KHtcbiAqICAgICAgIHJ1bnRpbWVTdGFnZUlkOiBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5ydW50aW1lU3RhZ2VJZCxcbiAqICAgICAgIHR5cGU6ICdkZWNpc2lvbicsXG4gKiAgICAgICBkZXRhaWw6IGAke2V2ZW50LmRlY2lkZXJ9IGNob3NlICR7ZXZlbnQuY2hvc2VufWAsXG4gKiAgICAgfSk7XG4gKiAgIH1cbiAqXG4gKiAgIC8vIFRpbWUtdHJhdmVsOiBlbnRyaWVzIHVwIHRvIHNsaWRlciBwb3NpdGlvblxuICogICBnZXRBdWRpdFVwVG8odmlzaWJsZUlkczogUmVhZG9ubHlTZXQ8c3RyaW5nPikge1xuICogICAgIHJldHVybiB0aGlzLmdldEVudHJpZXNVcFRvKHZpc2libGVJZHMpO1xuICogICB9XG4gKiB9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNlcXVlbmNlUmVjb3JkZXI8VCBleHRlbmRzIHsgcnVudGltZVN0YWdlSWQ/OiBzdHJpbmcgfT4ge1xuICBhYnN0cmFjdCByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIC8qKiBPcmRlcmVkIHNlcXVlbmNlIG9mIGFsbCBlbnRyaWVzIChpbnNlcnRpb24gb3JkZXIpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGVudHJpZXM6IFRbXSA9IFtdO1xuICAvKiogUGVyLXN0ZXAgaW5kZXg6IHJ1bnRpbWVTdGFnZUlkIOKGkiBlbnRyaWVzIGZvciB0aGF0IHN0ZXAuIFNhbWUgb2JqZWN0cyBhcyBlbnRyaWVzW10uICovXG4gIHByaXZhdGUgcmVhZG9ubHkgYnlSdW50aW1lU3RhZ2VJZCA9IG5ldyBNYXA8c3RyaW5nLCBUW10+KCk7XG4gIC8qKiBQZXItc3RlcCByYW5nZSBpbmRleDogcnVudGltZVN0YWdlSWQg4oaSIFtmaXJzdElkeCwgZW5kSWR4KSBpbiBlbnRyaWVzIGFycmF5LlxuICAgKiAgZW5kSWR4IGluY2x1ZGVzIHRyYWlsaW5nIGtleWxlc3MgZW50cmllcyAoc3RydWN0dXJhbCBtYXJrZXJzKS4gTWFpbnRhaW5lZCBkdXJpbmcgZW1pdCgpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGVudHJ5UmFuZ2VzID0gbmV3IE1hcDxzdHJpbmcsIHsgZmlyc3RJZHg6IG51bWJlcjsgZW5kSWR4OiBudW1iZXIgfT4oKTtcbiAgLyoqIFRoZSBydW50aW1lU3RhZ2VJZCBvZiB0aGUgbW9zdCByZWNlbnRseSBlbWl0dGVkIGtleWVkIGVudHJ5LiBVc2VkIHRvIGV4dGVuZCByYW5nZXMgZm9yIHRyYWlsaW5nIG1hcmtlcnMuICovXG4gIHByaXZhdGUgbGFzdEVtaXR0ZWRJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8vIOKUgOKUgCBXcml0ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogQXBwZW5kIGFuIGVudHJ5IHRvIGJvdGggdGhlIG9yZGVyZWQgc2VxdWVuY2UsIGtleWVkIGluZGV4LCBhbmQgcmFuZ2UgaW5kZXguXG4gICAqIEFsbCByZWZlcmVuY2UgdGhlIHNhbWUgZW50cnkgb2JqZWN0IOKAlCBubyBkdXBsaWNhdGlvbi5cbiAgICovXG4gIHByb3RlY3RlZCBlbWl0KGVudHJ5OiBUKTogdm9pZCB7XG4gICAgY29uc3QgaWR4ID0gdGhpcy5lbnRyaWVzLmxlbmd0aDtcbiAgICB0aGlzLmVudHJpZXMucHVzaChlbnRyeSk7XG4gICAgY29uc3QgaWQgPSBlbnRyeS5ydW50aW1lU3RhZ2VJZDtcbiAgICBpZiAoaWQpIHtcbiAgICAgIGxldCBhcnIgPSB0aGlzLmJ5UnVudGltZVN0YWdlSWQuZ2V0KGlkKTtcbiAgICAgIGlmICghYXJyKSB7XG4gICAgICAgIGFyciA9IFtdO1xuICAgICAgICB0aGlzLmJ5UnVudGltZVN0YWdlSWQuc2V0KGlkLCBhcnIpO1xuICAgICAgICB0aGlzLmVudHJ5UmFuZ2VzLnNldChpZCwgeyBmaXJzdElkeDogaWR4LCBlbmRJZHg6IGlkeCArIDEgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVudHJ5UmFuZ2VzLmdldChpZCkhLmVuZElkeCA9IGlkeCArIDE7XG4gICAgICB9XG4gICAgICBhcnIucHVzaChlbnRyeSk7XG4gICAgICB0aGlzLmxhc3RFbWl0dGVkSWQgPSBpZDtcbiAgICB9IGVsc2UgaWYgKHRoaXMubGFzdEVtaXR0ZWRJZCkge1xuICAgICAgLy8gU3RydWN0dXJhbCBtYXJrZXIgKG5vIHJ1bnRpbWVTdGFnZUlkKSDigJQgZXh0ZW5kIHRoZSBwcmVjZWRpbmcgc3RlcCdzIHJhbmdlXG4gICAgICB0aGlzLmVudHJ5UmFuZ2VzLmdldCh0aGlzLmxhc3RFbWl0dGVkSWQpIS5lbmRJZHggPSBpZHggKyAxO1xuICAgIH1cbiAgfVxuXG4gIC8vIOKUgOKUgCBPcmRlcmVkIGFjY2VzcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogQWxsIGVudHJpZXMgaW4gaW5zZXJ0aW9uIG9yZGVyIChyZXR1cm5zIGEgc2hhbGxvdyBjb3B5IOKAlCBlbnRyeSBvYmplY3RzIGFyZSBzaGFyZWQpLiAqL1xuICBnZXRFbnRyaWVzKCk6IFRbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmVudHJpZXNdO1xuICB9XG5cbiAgLyoqIE51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBzZXF1ZW5jZS4gKi9cbiAgZ2V0IGVudHJ5Q291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5lbnRyaWVzLmxlbmd0aDtcbiAgfVxuXG4gIC8qKiBaZXJvLWNvcHkgaXRlcmF0aW9uIGZvciBzdWJjbGFzcyByZW5kZXJpbmcgbWV0aG9kcyAoYXZvaWRzIGdldEVudHJpZXMoKSBzcHJlYWQpLiAqL1xuICBwcm90ZWN0ZWQgZm9yRWFjaEVudHJ5KGZuOiAoZW50cnk6IFQpID0+IHZvaWQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllcykge1xuICAgICAgZm4oZW50cnkpO1xuICAgIH1cbiAgfVxuXG4gIC8vIOKUgOKUgCBLZXllZCBhY2Nlc3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIE8oMSkgbG9va3VwOiBhbGwgZW50cmllcyBmb3IgYSBzcGVjaWZpYyBleGVjdXRpb24gc3RlcCAocmV0dXJucyBhIGNvcHkpLiAqL1xuICBnZXRFbnRyaWVzRm9yU3RlcChydW50aW1lU3RhZ2VJZDogc3RyaW5nKTogVFtdIHtcbiAgICByZXR1cm4gWy4uLih0aGlzLmJ5UnVudGltZVN0YWdlSWQuZ2V0KHJ1bnRpbWVTdGFnZUlkKSA/PyBbXSldO1xuICB9XG5cbiAgLyoqIE51bWJlciBvZiB1bmlxdWUgZXhlY3V0aW9uIHN0ZXBzIHRoYXQgaGF2ZSBlbnRyaWVzLiAqL1xuICBnZXQgc3RlcENvdW50KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuYnlSdW50aW1lU3RhZ2VJZC5zaXplO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZS1idWlsdCByYW5nZSBpbmRleDogcnVudGltZVN0YWdlSWQg4oaSIGhhbGYtb3BlbiByYW5nZSBbZmlyc3RJZHgsIGVuZElkeCkgaW4gZW50cmllcyBhcnJheS5cbiAgICogTWFpbnRhaW5lZCBkdXJpbmcgZW1pdCgpIOKAlCBubyByZWJ1aWxkIG5lZWRlZC4gVXNlIGZvciBPKDEpIHBlci1zdGVwIGxvb2t1cHMgZHVyaW5nIHRpbWUtdHJhdmVsLlxuICAgKiBlbmRJZHggaW5jbHVkZXMgdHJhaWxpbmcga2V5bGVzcyBlbnRyaWVzIChzdHJ1Y3R1cmFsIG1hcmtlcnMgZm9sbG93aW5nIGEgc3RlcCkuXG4gICAqL1xuICBnZXRFbnRyeVJhbmdlcygpOiBSZWFkb25seU1hcDxzdHJpbmcsIHsgcmVhZG9ubHkgZmlyc3RJZHg6IG51bWJlcjsgcmVhZG9ubHkgZW5kSWR4OiBudW1iZXIgfT4ge1xuICAgIHJldHVybiB0aGlzLmVudHJ5UmFuZ2VzO1xuICB9XG5cbiAgLy8g4pSA4pSAIEFnZ3JlZ2F0ZSAocmVkdWNlIGFsbCBlbnRyaWVzKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogUmVkdWNlIEFMTCBlbnRyaWVzIHRvIGEgc2luZ2xlIHZhbHVlLiBGb3IgZGFzaGJvYXJkcywgdG90YWxzLCBzdW1tYXJpZXMuICovXG4gIGFnZ3JlZ2F0ZTxSPihmbjogKGFjYzogUiwgZW50cnk6IFQpID0+IFIsIGluaXRpYWw6IFIpOiBSIHtcbiAgICBsZXQgYWNjID0gaW5pdGlhbDtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllcykge1xuICAgICAgYWNjID0gZm4oYWNjLCBlbnRyeSk7XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH1cblxuICAvLyDilIDilIAgQWNjdW11bGF0ZSAocHJvZ3Jlc3NpdmUgcmVkdWNlKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogUmVkdWNlIGVudHJpZXMsIG9wdGlvbmFsbHkgZmlsdGVyZWQgYnkgYSBzZXQgb2YgcnVudGltZVN0YWdlSWRzLlxuICAgKiBGb3IgdGltZS10cmF2ZWwgcHJvZ3Jlc3NpdmUgdmlldzogcGFzcyB0aGUgcnVudGltZVN0YWdlSWRzIHZpc2libGUgYXQgdGhlIGN1cnJlbnQgc2xpZGVyIHBvc2l0aW9uLlxuICAgKiBFbnRyaWVzIHdpdGhvdXQgcnVudGltZVN0YWdlSWQgKHN0cnVjdHVyYWwgbWFya2VycykgYXJlIGV4Y2x1ZGVkIHdoZW4ga2V5cyBhcmUgcHJvdmlkZWQuXG4gICAqIFdpdGhvdXQga2V5cywgcmVkdWNlcyBhbGwgZW50cmllcyAoc2FtZSBhcyBhZ2dyZWdhdGUpLlxuICAgKi9cbiAgYWNjdW11bGF0ZTxSPihmbjogKGFjYzogUiwgZW50cnk6IFQpID0+IFIsIGluaXRpYWw6IFIsIGtleXM/OiBSZWFkb25seVNldDxzdHJpbmc+KTogUiB7XG4gICAgbGV0IGFjYyA9IGluaXRpYWw7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXMpIHtcbiAgICAgIGlmIChrZXlzKSB7XG4gICAgICAgIGlmICghZW50cnkucnVudGltZVN0YWdlSWQgfHwgIWtleXMuaGFzKGVudHJ5LnJ1bnRpbWVTdGFnZUlkKSkgY29udGludWU7XG4gICAgICB9XG4gICAgICBhY2MgPSBmbihhY2MsIGVudHJ5KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfVxuXG4gIC8vIOKUgOKUgCBUaW1lLXRyYXZlbCBxdWVyaWVzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBQcm9ncmVzc2l2ZSByZXZlYWw6IGVudHJpZXMgd2hvc2UgcnVudGltZVN0YWdlSWQgaXMgaW4gdGhlIHZpc2libGUgc2V0LlxuICAgKiBQcmVzZXJ2ZXMgaW5zZXJ0aW9uIG9yZGVyLiBFbnRyaWVzIHdpdGhvdXQgcnVudGltZVN0YWdlSWQgKHN0cnVjdHVyYWwgbWFya2VycylcbiAgICogYXJlIGJ1ZmZlcmVkIGFuZCBpbmNsdWRlZCBvbmx5IHdoZW4gc3Vycm91bmRlZCBieSB2aXNpYmxlIHN0ZXBzIG9uIGJvdGggc2lkZXMg4oCUXG4gICAqIHRyYWlsaW5nIG1hcmtlcnMgYWZ0ZXIgdGhlIGxhc3QgdmlzaWJsZSBzdGVwIGFyZSBkaXNjYXJkZWQuXG4gICAqL1xuICBnZXRFbnRyaWVzVXBUbyh2aXNpYmxlSWRzOiBSZWFkb25seVNldDxzdHJpbmc+KTogVFtdIHtcbiAgICBjb25zdCByZXN1bHQ6IFRbXSA9IFtdO1xuICAgIGxldCBwZW5kaW5nTWFya2VyczogVFtdID0gW107XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXMpIHtcbiAgICAgIGNvbnN0IGlkID0gZW50cnkucnVudGltZVN0YWdlSWQ7XG4gICAgICBpZiAoIWlkKSB7XG4gICAgICAgIC8vIFN0cnVjdHVyYWwgbWFya2VyIOKAlCBidWZmZXIgdW50aWwgbmV4dCB2aXNpYmxlIGtleWVkIGVudHJ5IGNvbmZpcm1zIGl0J3MgYmV0d2VlbiB2aXNpYmxlIHN0ZXBzLlxuICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA+IDApIHBlbmRpbmdNYXJrZXJzLnB1c2goZW50cnkpO1xuICAgICAgfSBlbHNlIGlmICh2aXNpYmxlSWRzLmhhcyhpZCkpIHtcbiAgICAgICAgLy8gRmx1c2ggYnVmZmVyZWQgbWFya2VycyDigJQgdGhleSBzaXQgYmV0d2VlbiBhIHByZXZpb3VzIHZpc2libGUgc3RlcCBhbmQgdGhpcyBvbmUuXG4gICAgICAgIGlmIChwZW5kaW5nTWFya2Vycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2goLi4ucGVuZGluZ01hcmtlcnMpO1xuICAgICAgICAgIHBlbmRpbmdNYXJrZXJzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0LnB1c2goZW50cnkpO1xuICAgICAgfVxuICAgICAgLy8gTm9uLXZpc2libGUga2V5ZWQgZW50cmllczogZG9uJ3QgZGlzY2FyZCBwZW5kaW5nIG1hcmtlcnMg4oCUIGEgbGF0ZXIgdmlzaWJsZSBlbnRyeVxuICAgICAgLy8gbWF5IHN0aWxsIGZsdXNoIHRoZW0uIE1hcmtlcnMgYXJlIG9ubHkgZGlzY2FyZGVkIGF0IHRoZSBlbmQgKHRyYWlsaW5nKS5cbiAgICB9XG4gICAgLy8gRGlzY2FyZCByZW1haW5pbmcgcGVuZGluZ01hcmtlcnMg4oCUIHRoZXkgdHJhaWwgdGhlIGxhc3QgdmlzaWJsZSBzdGVwLlxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyDilIDilIAgTGlmZWN5Y2xlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBDbGVhciBhbGwgc3RvcmVkIGRhdGEuIENhbGxlZCBieSBleGVjdXRvciBiZWZvcmUgZWFjaCBydW4oKS4gKi9cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5lbnRyaWVzLmxlbmd0aCA9IDA7XG4gICAgdGhpcy5ieVJ1bnRpbWVTdGFnZUlkLmNsZWFyKCk7XG4gICAgdGhpcy5lbnRyeVJhbmdlcy5jbGVhcigpO1xuICAgIHRoaXMubGFzdEVtaXR0ZWRJZCA9IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
|
|
197
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VxdWVuY2VSZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcmVjb3JkZXIvU2VxdWVuY2VSZWNvcmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXVERztBQUNILE1BQXNCLGdCQUFnQjtJQUdwQyx5REFBeUQ7SUFDeEMsT0FBTyxHQUFRLEVBQUUsQ0FBQztJQUNuQyx5RkFBeUY7SUFDeEUsZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLEVBQWUsQ0FBQztJQUMzRDttR0FDK0Y7SUFDOUUsV0FBVyxHQUFHLElBQUksR0FBRyxFQUFnRCxDQUFDO0lBQ3ZGLCtHQUErRztJQUN2RyxhQUFhLENBQXFCO0lBRTFDLHlFQUF5RTtJQUV6RTs7O09BR0c7SUFDTyxJQUFJLENBQUMsS0FBUTtRQUNyQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QixNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDO1FBQ2hDLElBQUksRUFBRSxFQUFFLENBQUM7WUFDUCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDVCxHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUNULElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxFQUFF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RSxFQUFFLENBQUM7Z0JBQ1IsaUdBQWlHO2dCQUNqRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQztvQkFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3BELENBQUM7aUJBQU0sSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQzlCLGtGQUFrRjtnQkFDbEYsSUFBSSxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUM5QixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUM7b0JBQy9CLGNBQWMsR0FBRyxFQUFFLENBQUM7Z0JBQ3RCLENBQUM7Z0JBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQixDQUFDO1lBQ0QsbUZBQW1GO1lBQ25GLDBFQUEwRTtRQUM1RSxDQUFDO1FBQ0QsdUVBQXVFO1FBQ3ZFLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCx5RUFBeUU7SUFFekUsbUVBQW1FO0lBQ25FLEtBQUs7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7SUFDakMsQ0FBQztDQUNGO0FBdEpELDRDQXNKQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU2VxdWVuY2VSZWNvcmRlcjxUPiDigJQgYmFzZSBjbGFzcyBmb3Igb3JkZXJlZCBzZXF1ZW5jZSByZWNvcmRlcnMgd2l0aCBrZXllZCBpbmRleC5cbiAqXG4gKiBQcm92aWRlcyBkdWFsLWluZGV4ZWQgc3RvcmFnZTogYSBmbGF0IGFycmF5IHByZXNlcnZpbmcgaW5zZXJ0aW9uIG9yZGVyIHBsdXMgYVxuICogTWFwPHJ1bnRpbWVTdGFnZUlkLCBUW10+IGZvciBPKDEpIHBlci1zdGVwIGxvb2t1cC4gT25lIGVudHJ5IHR5cGUsIG11bHRpcGxlIGVudHJpZXNcbiAqIHBlciBzdGVwLiBEZXNpZ25lZCBmb3IgcmVjb3JkZXJzIHRoYXQgaW1wbGVtZW50IEJPVEggUmVjb3JkZXIgYW5kIEZsb3dSZWNvcmRlclxuICogKG1lcmdpbmcgZGF0YSBvcHMgYW5kIGNvbnRyb2wgZmxvdyBpbnRvIGEgc2luZ2xlIGludGVybGVhdmVkIHNlcXVlbmNlKS5cbiAqXG4gKiAqKkNvbnRyYXN0IHdpdGggS2V5ZWRSZWNvcmRlcjxUPjoqKlxuICogLSBgS2V5ZWRSZWNvcmRlcjxUPmAg4oCUIDE6MSBNYXAuIE9uZSBlbnRyeSBwZXIgcnVudGltZVN0YWdlSWQuIEZvciBzaW5nbGUtdmFsdWUgcmVjb3JkZXJzXG4gKiAgIGxpa2UgTWV0cmljUmVjb3JkZXIgKG9uZSBTdGVwTWV0cmljcyBwZXIgc3RhZ2UgZXhlY3V0aW9uKS5cbiAqIC0gYFNlcXVlbmNlUmVjb3JkZXI8VD5gIOKAlCAxOk4gc2VxdWVuY2UgKyBNYXAuIE11bHRpcGxlIGVudHJpZXMgcGVyIHJ1bnRpbWVTdGFnZUlkLFxuICogICBwbHVzIG9yZGVyaW5nIG1hdHRlcnMuIEZvciByZWNvcmRlcnMgdGhhdCBwcm9kdWNlIGEgcHJvc2UgbmFycmF0aXZlIG9yIGV2ZW50IGxvZ1xuICogICB3aGVyZSBhIHNpbmdsZSBzdGVwIGdlbmVyYXRlcyBzdGFnZSArIGRhdGEgKyBkZWNpc2lvbiBlbnRyaWVzLlxuICpcbiAqICoqSG93IHRvIGNob29zZToqKlxuICogLSBJZiBlYWNoIHN0ZXAgcHJvZHVjZXMgZXhhY3RseSBvbmUgcmVjb3JkIOKGkiBleHRlbmQgYEtleWVkUmVjb3JkZXI8VD5gXG4gKiAtIElmIGVhY2ggc3RlcCBwcm9kdWNlcyBtdWx0aXBsZSByZWNvcmRzIG9yIG9yZGVyaW5nIG1hdHRlcnMg4oaSIGV4dGVuZCBgU2VxdWVuY2VSZWNvcmRlcjxUPmBcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgU2VxdWVuY2VSZWNvcmRlciB9IGZyb20gJ2Zvb3RwcmludGpzL3RyYWNlJztcbiAqXG4gKiBpbnRlcmZhY2UgQXVkaXRFbnRyeSB7XG4gKiAgIHJ1bnRpbWVTdGFnZUlkPzogc3RyaW5nO1xuICogICB0eXBlOiAncmVhZCcgfCAnd3JpdGUnIHwgJ2RlY2lzaW9uJztcbiAqICAgZGV0YWlsOiBzdHJpbmc7XG4gKiB9XG4gKlxuICogY2xhc3MgQXVkaXRSZWNvcmRlciBleHRlbmRzIFNlcXVlbmNlUmVjb3JkZXI8QXVkaXRFbnRyeT4ge1xuICogICByZWFkb25seSBpZCA9ICdhdWRpdCc7XG4gKlxuICogICAvLyBTY29wZSBob29rcyAoZmlyZXMgZHVyaW5nIHN0YWdlIGV4ZWN1dGlvbilcbiAqICAgb25SZWFkKGV2ZW50OiBSZWFkRXZlbnQpIHtcbiAqICAgICB0aGlzLmVtaXQoeyBydW50aW1lU3RhZ2VJZDogZXZlbnQucnVudGltZVN0YWdlSWQsIHR5cGU6ICdyZWFkJywgZGV0YWlsOiBldmVudC5rZXkgfSk7XG4gKiAgIH1cbiAqICAgb25Xcml0ZShldmVudDogV3JpdGVFdmVudCkge1xuICogICAgIHRoaXMuZW1pdCh7IHJ1bnRpbWVTdGFnZUlkOiBldmVudC5ydW50aW1lU3RhZ2VJZCwgdHlwZTogJ3dyaXRlJywgZGV0YWlsOiBldmVudC5rZXkgfSk7XG4gKiAgIH1cbiAqXG4gKiAgIC8vIEZsb3cgaG9va3MgKGZpcmVzIGFmdGVyIHN0YWdlIGV4ZWN1dGlvbilcbiAqICAgb25EZWNpc2lvbihldmVudDogRmxvd0RlY2lzaW9uRXZlbnQpIHtcbiAqICAgICB0aGlzLmVtaXQoe1xuICogICAgICAgcnVudGltZVN0YWdlSWQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkLFxuICogICAgICAgdHlwZTogJ2RlY2lzaW9uJyxcbiAqICAgICAgIGRldGFpbDogYCR7ZXZlbnQuZGVjaWRlcn0gY2hvc2UgJHtldmVudC5jaG9zZW59YCxcbiAqICAgICB9KTtcbiAqICAgfVxuICpcbiAqICAgLy8gVGltZS10cmF2ZWw6IGVudHJpZXMgdXAgdG8gc2xpZGVyIHBvc2l0aW9uXG4gKiAgIGdldEF1ZGl0VXBUbyh2aXNpYmxlSWRzOiBSZWFkb25seVNldDxzdHJpbmc+KSB7XG4gKiAgICAgcmV0dXJuIHRoaXMuZ2V0RW50cmllc1VwVG8odmlzaWJsZUlkcyk7XG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2VxdWVuY2VSZWNvcmRlcjxUIGV4dGVuZHMgeyBydW50aW1lU3RhZ2VJZD86IHN0cmluZyB9PiB7XG4gIGFic3RyYWN0IHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgLyoqIE9yZGVyZWQgc2VxdWVuY2Ugb2YgYWxsIGVudHJpZXMgKGluc2VydGlvbiBvcmRlcikuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZW50cmllczogVFtdID0gW107XG4gIC8qKiBQZXItc3RlcCBpbmRleDogcnVudGltZVN0YWdlSWQg4oaSIGVudHJpZXMgZm9yIHRoYXQgc3RlcC4gU2FtZSBvYmplY3RzIGFzIGVudHJpZXNbXS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBieVJ1bnRpbWVTdGFnZUlkID0gbmV3IE1hcDxzdHJpbmcsIFRbXT4oKTtcbiAgLyoqIFBlci1zdGVwIHJhbmdlIGluZGV4OiBydW50aW1lU3RhZ2VJZCDihpIgW2ZpcnN0SWR4LCBlbmRJZHgpIGluIGVudHJpZXMgYXJyYXkuXG4gICAqICBlbmRJZHggaW5jbHVkZXMgdHJhaWxpbmcga2V5bGVzcyBlbnRyaWVzIChzdHJ1Y3R1cmFsIG1hcmtlcnMpLiBNYWludGFpbmVkIGR1cmluZyBlbWl0KCkuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgZW50cnlSYW5nZXMgPSBuZXcgTWFwPHN0cmluZywgeyBmaXJzdElkeDogbnVtYmVyOyBlbmRJZHg6IG51bWJlciB9PigpO1xuICAvKiogVGhlIHJ1bnRpbWVTdGFnZUlkIG9mIHRoZSBtb3N0IHJlY2VudGx5IGVtaXR0ZWQga2V5ZWQgZW50cnkuIFVzZWQgdG8gZXh0ZW5kIHJhbmdlcyBmb3IgdHJhaWxpbmcgbWFya2Vycy4gKi9cbiAgcHJpdmF0ZSBsYXN0RW1pdHRlZElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLy8g4pSA4pSAIFdyaXRlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBBcHBlbmQgYW4gZW50cnkgdG8gYm90aCB0aGUgb3JkZXJlZCBzZXF1ZW5jZSwga2V5ZWQgaW5kZXgsIGFuZCByYW5nZSBpbmRleC5cbiAgICogQWxsIHJlZmVyZW5jZSB0aGUgc2FtZSBlbnRyeSBvYmplY3Qg4oCUIG5vIGR1cGxpY2F0aW9uLlxuICAgKi9cbiAgcHJvdGVjdGVkIGVtaXQoZW50cnk6IFQpOiB2b2lkIHtcbiAgICBjb25zdCBpZHggPSB0aGlzLmVudHJpZXMubGVuZ3RoO1xuICAgIHRoaXMuZW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICBjb25zdCBpZCA9IGVudHJ5LnJ1bnRpbWVTdGFnZUlkO1xuICAgIGlmIChpZCkge1xuICAgICAgbGV0IGFyciA9IHRoaXMuYnlSdW50aW1lU3RhZ2VJZC5nZXQoaWQpO1xuICAgICAgaWYgKCFhcnIpIHtcbiAgICAgICAgYXJyID0gW107XG4gICAgICAgIHRoaXMuYnlSdW50aW1lU3RhZ2VJZC5zZXQoaWQsIGFycik7XG4gICAgICAgIHRoaXMuZW50cnlSYW5nZXMuc2V0KGlkLCB7IGZpcnN0SWR4OiBpZHgsIGVuZElkeDogaWR4ICsgMSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZW50cnlSYW5nZXMuZ2V0KGlkKSEuZW5kSWR4ID0gaWR4ICsgMTtcbiAgICAgIH1cbiAgICAgIGFyci5wdXNoKGVudHJ5KTtcbiAgICAgIHRoaXMubGFzdEVtaXR0ZWRJZCA9IGlkO1xuICAgIH0gZWxzZSBpZiAodGhpcy5sYXN0RW1pdHRlZElkKSB7XG4gICAgICAvLyBTdHJ1Y3R1cmFsIG1hcmtlciAobm8gcnVudGltZVN0YWdlSWQpIOKAlCBleHRlbmQgdGhlIHByZWNlZGluZyBzdGVwJ3MgcmFuZ2VcbiAgICAgIHRoaXMuZW50cnlSYW5nZXMuZ2V0KHRoaXMubGFzdEVtaXR0ZWRJZCkhLmVuZElkeCA9IGlkeCArIDE7XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIE9yZGVyZWQgYWNjZXNzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBBbGwgZW50cmllcyBpbiBpbnNlcnRpb24gb3JkZXIgKHJldHVybnMgYSBzaGFsbG93IGNvcHkg4oCUIGVudHJ5IG9iamVjdHMgYXJlIHNoYXJlZCkuICovXG4gIGdldEVudHJpZXMoKTogVFtdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuZW50cmllc107XG4gIH1cblxuICAvKiogTnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIHNlcXVlbmNlLiAqL1xuICBnZXQgZW50cnlDb3VudCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmVudHJpZXMubGVuZ3RoO1xuICB9XG5cbiAgLyoqIFplcm8tY29weSBpdGVyYXRpb24gZm9yIHN1YmNsYXNzIHJlbmRlcmluZyBtZXRob2RzIChhdm9pZHMgZ2V0RW50cmllcygpIHNwcmVhZCkuICovXG4gIHByb3RlY3RlZCBmb3JFYWNoRW50cnkoZm46IChlbnRyeTogVCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5lbnRyaWVzKSB7XG4gICAgICBmbihlbnRyeSk7XG4gICAgfVxuICB9XG5cbiAgLy8g4pSA4pSAIEtleWVkIGFjY2VzcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogTygxKSBsb29rdXA6IGFsbCBlbnRyaWVzIGZvciBhIHNwZWNpZmljIGV4ZWN1dGlvbiBzdGVwIChyZXR1cm5zIGEgY29weSkuICovXG4gIGdldEVudHJpZXNGb3JTdGVwKHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcpOiBUW10ge1xuICAgIHJldHVybiBbLi4uKHRoaXMuYnlSdW50aW1lU3RhZ2VJZC5nZXQocnVudGltZVN0YWdlSWQpID8/IFtdKV07XG4gIH1cblxuICAvKiogTnVtYmVyIG9mIHVuaXF1ZSBleGVjdXRpb24gc3RlcHMgdGhhdCBoYXZlIGVudHJpZXMuICovXG4gIGdldCBzdGVwQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5ieVJ1bnRpbWVTdGFnZUlkLnNpemU7XG4gIH1cblxuICAvKipcbiAgICogUHJlLWJ1aWx0IHJhbmdlIGluZGV4OiBydW50aW1lU3RhZ2VJZCDihpIgaGFsZi1vcGVuIHJhbmdlIFtmaXJzdElkeCwgZW5kSWR4KSBpbiBlbnRyaWVzIGFycmF5LlxuICAgKiBNYWludGFpbmVkIGR1cmluZyBlbWl0KCkg4oCUIG5vIHJlYnVpbGQgbmVlZGVkLiBVc2UgZm9yIE8oMSkgcGVyLXN0ZXAgbG9va3VwcyBkdXJpbmcgdGltZS10cmF2ZWwuXG4gICAqIGVuZElkeCBpbmNsdWRlcyB0cmFpbGluZyBrZXlsZXNzIGVudHJpZXMgKHN0cnVjdHVyYWwgbWFya2VycyBmb2xsb3dpbmcgYSBzdGVwKS5cbiAgICovXG4gIGdldEVudHJ5UmFuZ2VzKCk6IFJlYWRvbmx5TWFwPHN0cmluZywgeyByZWFkb25seSBmaXJzdElkeDogbnVtYmVyOyByZWFkb25seSBlbmRJZHg6IG51bWJlciB9PiB7XG4gICAgcmV0dXJuIHRoaXMuZW50cnlSYW5nZXM7XG4gIH1cblxuICAvLyDilIDilIAgQWdncmVnYXRlIChyZWR1Y2UgYWxsIGVudHJpZXMpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBSZWR1Y2UgQUxMIGVudHJpZXMgdG8gYSBzaW5nbGUgdmFsdWUuIEZvciBkYXNoYm9hcmRzLCB0b3RhbHMsIHN1bW1hcmllcy4gKi9cbiAgYWdncmVnYXRlPFI+KGZuOiAoYWNjOiBSLCBlbnRyeTogVCkgPT4gUiwgaW5pdGlhbDogUik6IFIge1xuICAgIGxldCBhY2MgPSBpbml0aWFsO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgdGhpcy5lbnRyaWVzKSB7XG4gICAgICBhY2MgPSBmbihhY2MsIGVudHJ5KTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfVxuXG4gIC8vIOKUgOKUgCBBY2N1bXVsYXRlIChwcm9ncmVzc2l2ZSByZWR1Y2UpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBSZWR1Y2UgZW50cmllcywgb3B0aW9uYWxseSBmaWx0ZXJlZCBieSBhIHNldCBvZiBydW50aW1lU3RhZ2VJZHMuXG4gICAqIEZvciB0aW1lLXRyYXZlbCBwcm9ncmVzc2l2ZSB2aWV3OiBwYXNzIHRoZSBydW50aW1lU3RhZ2VJZHMgdmlzaWJsZSBhdCB0aGUgY3VycmVudCBzbGlkZXIgcG9zaXRpb24uXG4gICAqIEVudHJpZXMgd2l0aG91dCBydW50aW1lU3RhZ2VJZCAoc3RydWN0dXJhbCBtYXJrZXJzKSBhcmUgZXhjbHVkZWQgd2hlbiBrZXlzIGFyZSBwcm92aWRlZC5cbiAgICogV2l0aG91dCBrZXlzLCByZWR1Y2VzIGFsbCBlbnRyaWVzIChzYW1lIGFzIGFnZ3JlZ2F0ZSkuXG4gICAqL1xuICBhY2N1bXVsYXRlPFI+KGZuOiAoYWNjOiBSLCBlbnRyeTogVCkgPT4gUiwgaW5pdGlhbDogUiwga2V5cz86IFJlYWRvbmx5U2V0PHN0cmluZz4pOiBSIHtcbiAgICBsZXQgYWNjID0gaW5pdGlhbDtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllcykge1xuICAgICAgaWYgKGtleXMpIHtcbiAgICAgICAgaWYgKCFlbnRyeS5ydW50aW1lU3RhZ2VJZCB8fCAha2V5cy5oYXMoZW50cnkucnVudGltZVN0YWdlSWQpKSBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGFjYyA9IGZuKGFjYywgZW50cnkpO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9XG5cbiAgLy8g4pSA4pSAIFRpbWUtdHJhdmVsIHF1ZXJpZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqXG4gICAqIFByb2dyZXNzaXZlIHJldmVhbDogZW50cmllcyB3aG9zZSBydW50aW1lU3RhZ2VJZCBpcyBpbiB0aGUgdmlzaWJsZSBzZXQuXG4gICAqIFByZXNlcnZlcyBpbnNlcnRpb24gb3JkZXIuIEVudHJpZXMgd2l0aG91dCBydW50aW1lU3RhZ2VJZCAoc3RydWN0dXJhbCBtYXJrZXJzKVxuICAgKiBhcmUgYnVmZmVyZWQgYW5kIGluY2x1ZGVkIG9ubHkgd2hlbiBzdXJyb3VuZGVkIGJ5IHZpc2libGUgc3RlcHMgb24gYm90aCBzaWRlcyDigJRcbiAgICogdHJhaWxpbmcgbWFya2VycyBhZnRlciB0aGUgbGFzdCB2aXNpYmxlIHN0ZXAgYXJlIGRpc2NhcmRlZC5cbiAgICovXG4gIGdldEVudHJpZXNVcFRvKHZpc2libGVJZHM6IFJlYWRvbmx5U2V0PHN0cmluZz4pOiBUW10ge1xuICAgIGNvbnN0IHJlc3VsdDogVFtdID0gW107XG4gICAgbGV0IHBlbmRpbmdNYXJrZXJzOiBUW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllcykge1xuICAgICAgY29uc3QgaWQgPSBlbnRyeS5ydW50aW1lU3RhZ2VJZDtcbiAgICAgIGlmICghaWQpIHtcbiAgICAgICAgLy8gU3RydWN0dXJhbCBtYXJrZXIg4oCUIGJ1ZmZlciB1bnRpbCBuZXh0IHZpc2libGUga2V5ZWQgZW50cnkgY29uZmlybXMgaXQncyBiZXR3ZWVuIHZpc2libGUgc3RlcHMuXG4gICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMCkgcGVuZGluZ01hcmtlcnMucHVzaChlbnRyeSk7XG4gICAgICB9IGVsc2UgaWYgKHZpc2libGVJZHMuaGFzKGlkKSkge1xuICAgICAgICAvLyBGbHVzaCBidWZmZXJlZCBtYXJrZXJzIOKAlCB0aGV5IHNpdCBiZXR3ZWVuIGEgcHJldmlvdXMgdmlzaWJsZSBzdGVwIGFuZCB0aGlzIG9uZS5cbiAgICAgICAgaWYgKHBlbmRpbmdNYXJrZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICByZXN1bHQucHVzaCguLi5wZW5kaW5nTWFya2Vycyk7XG4gICAgICAgICAgcGVuZGluZ01hcmtlcnMgPSBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQucHVzaChlbnRyeSk7XG4gICAgICB9XG4gICAgICAvLyBOb24tdmlzaWJsZSBrZXllZCBlbnRyaWVzOiBkb24ndCBkaXNjYXJkIHBlbmRpbmcgbWFya2VycyDigJQgYSBsYXRlciB2aXNpYmxlIGVudHJ5XG4gICAgICAvLyBtYXkgc3RpbGwgZmx1c2ggdGhlbS4gTWFya2VycyBhcmUgb25seSBkaXNjYXJkZWQgYXQgdGhlIGVuZCAodHJhaWxpbmcpLlxuICAgIH1cbiAgICAvLyBEaXNjYXJkIHJlbWFpbmluZyBwZW5kaW5nTWFya2VycyDigJQgdGhleSB0cmFpbCB0aGUgbGFzdCB2aXNpYmxlIHN0ZXAuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIOKUgOKUgCBMaWZlY3ljbGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIENsZWFyIGFsbCBzdG9yZWQgZGF0YS4gQ2FsbGVkIGJ5IGV4ZWN1dG9yIGJlZm9yZSBlYWNoIHJ1bigpLiAqL1xuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmVudHJpZXMubGVuZ3RoID0gMDtcbiAgICB0aGlzLmJ5UnVudGltZVN0YWdlSWQuY2xlYXIoKTtcbiAgICB0aGlzLmVudHJ5UmFuZ2VzLmNsZWFyKCk7XG4gICAgdGhpcy5sYXN0RW1pdHRlZElkID0gdW5kZWZpbmVkO1xuICB9XG59XG4iXX0=
|
|
@@ -65,39 +65,40 @@ exports.topologyRecorder = topologyRecorder;
|
|
|
65
65
|
* footprintjs detects the `FlowRecorder` method shape and routes events.
|
|
66
66
|
*/
|
|
67
67
|
class TopologyRecorder {
|
|
68
|
+
id;
|
|
69
|
+
nodesById = new Map();
|
|
70
|
+
nodeOrder = [];
|
|
71
|
+
edges = [];
|
|
72
|
+
/** Stack of active SUBFLOW node ids. Fork/decision-branch nodes never push. */
|
|
73
|
+
subflowStack = [];
|
|
74
|
+
/** Map of childName → pending fork-branch synthetic node, consumed by
|
|
75
|
+
* the next matching `onSubflowEntry`. */
|
|
76
|
+
pendingForkByName = new Map();
|
|
77
|
+
/** Pending decision-branch synthetic node, consumed by a matching entry. */
|
|
78
|
+
pendingDecision;
|
|
79
|
+
/**
|
|
80
|
+
* The previous subflow that just finished, keyed by scope (parentId,
|
|
81
|
+
* or '' for root). When a new subflow enters in the same scope via
|
|
82
|
+
* the normal next-chained path (not fork/decision), we emit a `next`
|
|
83
|
+
* edge from the previous subflow to the new one — matching how the
|
|
84
|
+
* builder actually wired them: `.addSubFlowChartNext(A).addSubFlowChartNext(B)`
|
|
85
|
+
* means A → B, one after the other.
|
|
86
|
+
*
|
|
87
|
+
* Without this, consumers only see parent→child edges (A, B, C all
|
|
88
|
+
* children of their common ancestor) with no record of the actual
|
|
89
|
+
* A → B → C sequential chain that ran — which is exactly what
|
|
90
|
+
* TopologyRecorder is supposed to expose.
|
|
91
|
+
*/
|
|
92
|
+
previousSubflowInScope = new Map();
|
|
68
93
|
constructor(options = {}) {
|
|
69
|
-
|
|
70
|
-
this.nodesById = new Map();
|
|
71
|
-
this.nodeOrder = [];
|
|
72
|
-
this.edges = [];
|
|
73
|
-
/** Stack of active SUBFLOW node ids. Fork/decision-branch nodes never push. */
|
|
74
|
-
this.subflowStack = [];
|
|
75
|
-
/** Map of childName → pending fork-branch synthetic node, consumed by
|
|
76
|
-
* the next matching `onSubflowEntry`. */
|
|
77
|
-
this.pendingForkByName = new Map();
|
|
78
|
-
/**
|
|
79
|
-
* The previous subflow that just finished, keyed by scope (parentId,
|
|
80
|
-
* or '' for root). When a new subflow enters in the same scope via
|
|
81
|
-
* the normal next-chained path (not fork/decision), we emit a `next`
|
|
82
|
-
* edge from the previous subflow to the new one — matching how the
|
|
83
|
-
* builder actually wired them: `.addSubFlowChartNext(A).addSubFlowChartNext(B)`
|
|
84
|
-
* means A → B, one after the other.
|
|
85
|
-
*
|
|
86
|
-
* Without this, consumers only see parent→child edges (A, B, C all
|
|
87
|
-
* children of their common ancestor) with no record of the actual
|
|
88
|
-
* A → B → C sequential chain that ran — which is exactly what
|
|
89
|
-
* TopologyRecorder is supposed to expose.
|
|
90
|
-
*/
|
|
91
|
-
this.previousSubflowInScope = new Map();
|
|
92
|
-
this.id = (_a = options.id) !== null && _a !== void 0 ? _a : `topology-${++_counter}`;
|
|
94
|
+
this.id = options.id ?? `topology-${++_counter}`;
|
|
93
95
|
}
|
|
94
96
|
// ── FlowRecorder hooks ────────────────────────────────────────────────
|
|
95
97
|
onSubflowEntry(event) {
|
|
96
|
-
var _a, _b;
|
|
97
98
|
const subflowId = event.subflowId;
|
|
98
99
|
if (!subflowId)
|
|
99
100
|
return; // Need a stable id to track.
|
|
100
|
-
const enteredAt =
|
|
101
|
+
const enteredAt = event.traversalContext?.runtimeStageId ?? '';
|
|
101
102
|
// Determine the parent: prefer a pending fork/decision match by name,
|
|
102
103
|
// otherwise the current top-of-subflow-stack.
|
|
103
104
|
let parentId;
|
|
@@ -162,7 +163,7 @@ class TopologyRecorder {
|
|
|
162
163
|
// their own edge mechanics (parent→fork-branch, parent→decision-
|
|
163
164
|
// branch) that carry the branching semantics.
|
|
164
165
|
if (incomingKind === 'next' || incomingKind === 'root') {
|
|
165
|
-
const scopeKey = parentId
|
|
166
|
+
const scopeKey = parentId ?? '';
|
|
166
167
|
const previous = this.previousSubflowInScope.get(scopeKey);
|
|
167
168
|
if (previous) {
|
|
168
169
|
this.edges.push({
|
|
@@ -177,12 +178,11 @@ class TopologyRecorder {
|
|
|
177
178
|
this.subflowStack.push(nodeId);
|
|
178
179
|
}
|
|
179
180
|
onSubflowExit(event) {
|
|
180
|
-
var _a, _b, _c;
|
|
181
181
|
const nodeId = this.subflowStack.pop();
|
|
182
182
|
if (!nodeId)
|
|
183
183
|
return;
|
|
184
184
|
const node = this.nodesById.get(nodeId);
|
|
185
|
-
const exitedAt =
|
|
185
|
+
const exitedAt = event.traversalContext?.runtimeStageId ?? '';
|
|
186
186
|
if (node) {
|
|
187
187
|
node.exitedAt = exitedAt;
|
|
188
188
|
// Remember this node as the "previous subflow" in its scope.
|
|
@@ -190,7 +190,7 @@ class TopologyRecorder {
|
|
|
190
190
|
// path, not fork/decision) gets a `next` edge drawn from here
|
|
191
191
|
// — this is the real sequential A → B transition that the
|
|
192
192
|
// `.addSubFlowChartNext()` builder produced.
|
|
193
|
-
const scopeKey =
|
|
193
|
+
const scopeKey = node.parentId ?? '';
|
|
194
194
|
this.previousSubflowInScope.set(scopeKey, { nodeId, exitedAt });
|
|
195
195
|
}
|
|
196
196
|
// Clear pendingDecision on exit — a decision identifies exactly ONE
|
|
@@ -204,9 +204,8 @@ class TopologyRecorder {
|
|
|
204
204
|
// pending entries are cleared on new `onFork` or consumed on match.
|
|
205
205
|
}
|
|
206
206
|
onFork(event) {
|
|
207
|
-
var _a, _b;
|
|
208
207
|
const activeId = this.subflowStack[this.subflowStack.length - 1];
|
|
209
|
-
const at =
|
|
208
|
+
const at = event.traversalContext?.runtimeStageId ?? '';
|
|
210
209
|
const depth = activeId ? this.nodesById.get(activeId).depth + 1 : 0;
|
|
211
210
|
// Reset any prior pending fork state — a new fork starts fresh.
|
|
212
211
|
this.pendingForkByName.clear();
|
|
@@ -231,9 +230,8 @@ class TopologyRecorder {
|
|
|
231
230
|
});
|
|
232
231
|
}
|
|
233
232
|
onDecision(event) {
|
|
234
|
-
var _a, _b;
|
|
235
233
|
const activeId = this.subflowStack[this.subflowStack.length - 1];
|
|
236
|
-
const at =
|
|
234
|
+
const at = event.traversalContext?.runtimeStageId ?? '';
|
|
237
235
|
const depth = activeId ? this.nodesById.get(activeId).depth + 1 : 0;
|
|
238
236
|
// A new decision supersedes any prior unresolved pending one.
|
|
239
237
|
this.pendingDecision = undefined;
|
|
@@ -261,7 +259,6 @@ class TopologyRecorder {
|
|
|
261
259
|
this.pendingDecision = { name: event.chosen, nodeId, at };
|
|
262
260
|
}
|
|
263
261
|
onLoop(event) {
|
|
264
|
-
var _a, _b;
|
|
265
262
|
// loopTo jumps back inside the CURRENT subflow. Record a self-edge on the
|
|
266
263
|
// active subflow — synthetic fork/decision nodes don't participate in loops.
|
|
267
264
|
const activeId = this.subflowStack[this.subflowStack.length - 1];
|
|
@@ -271,7 +268,7 @@ class TopologyRecorder {
|
|
|
271
268
|
from: activeId,
|
|
272
269
|
to: activeId,
|
|
273
270
|
kind: 'loop-iteration',
|
|
274
|
-
at:
|
|
271
|
+
at: event.traversalContext?.runtimeStageId ?? '',
|
|
275
272
|
});
|
|
276
273
|
}
|
|
277
274
|
/** Called by the executor before each `run()` — resets all state. */
|
|
@@ -287,13 +284,12 @@ class TopologyRecorder {
|
|
|
287
284
|
// ── Query API ─────────────────────────────────────────────────────────
|
|
288
285
|
/** Live snapshot of the composition graph. Safe during or after a run. */
|
|
289
286
|
getTopology() {
|
|
290
|
-
var _a, _b;
|
|
291
287
|
const nodes = this.nodeOrder.map((id) => this.nodesById.get(id));
|
|
292
288
|
return {
|
|
293
289
|
nodes,
|
|
294
290
|
edges: [...this.edges],
|
|
295
|
-
activeNodeId:
|
|
296
|
-
rootId:
|
|
291
|
+
activeNodeId: this.subflowStack[this.subflowStack.length - 1] ?? null,
|
|
292
|
+
rootId: this.nodeOrder[0] ?? null,
|
|
297
293
|
};
|
|
298
294
|
}
|
|
299
295
|
/** Direct children of a node — insertion-ordered. */
|
|
@@ -328,4 +324,4 @@ class TopologyRecorder {
|
|
|
328
324
|
}
|
|
329
325
|
}
|
|
330
326
|
exports.TopologyRecorder = TopologyRecorder;
|
|
331
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVG9wb2xvZ3lSZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcmVjb3JkZXIvVG9wb2xvZ3lSZWNvcmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpREc7OztBQTJFSCxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFFakI7O0dBRUc7QUFDSCxTQUFnQixnQkFBZ0IsQ0FBQyxVQUFtQyxFQUFFO0lBQ3BFLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN2QyxDQUFDO0FBRkQsNENBRUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBYSxnQkFBZ0I7SUE2QjNCLFlBQVksVUFBbUMsRUFBRTs7UUExQmhDLGNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBd0IsQ0FBQztRQUM1QyxjQUFTLEdBQWEsRUFBRSxDQUFDO1FBQ3pCLFVBQUssR0FBbUIsRUFBRSxDQUFDO1FBQzVDLCtFQUErRTtRQUM5RCxpQkFBWSxHQUFhLEVBQUUsQ0FBQztRQUU3QztrREFDMEM7UUFDekIsc0JBQWlCLEdBQUcsSUFBSSxHQUFHLEVBQXdCLENBQUM7UUFHckU7Ozs7Ozs7Ozs7OztXQVlHO1FBQ2MsMkJBQXNCLEdBQUcsSUFBSSxHQUFHLEVBQWdELENBQUM7UUFHaEcsSUFBSSxDQUFDLEVBQUUsR0FBRyxNQUFBLE9BQU8sQ0FBQyxFQUFFLG1DQUFJLFlBQVksRUFBRSxRQUFRLEVBQUUsQ0FBQztJQUNuRCxDQUFDO0lBRUQseUVBQXlFO0lBRXpFLGNBQWMsQ0FBQyxLQUF1Qjs7UUFDcEMsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztRQUNsQyxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU8sQ0FBQyw2QkFBNkI7UUFFckQsTUFBTSxTQUFTLEdBQUcsTUFBQSxNQUFBLEtBQUssQ0FBQyxnQkFBZ0IsMENB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SSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFFRCx3RUFBd0U7SUFDeEUsVUFBVTtRQUNSLE9BQU87WUFDTCxJQUFJLEVBQUUsVUFBVTtZQUNoQixXQUFXLEVBQUUseUVBQXlFO1lBQ3RGLGtCQUFrQixFQUFFLFdBQW9CO1lBQ3hDLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFO1NBQ3pCLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUF4UkQsNENBd1JDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUb3BvbG9neVJlY29yZGVyIOKAlCBjb21wb3NpdGlvbiBncmFwaCBidWlsdCBkdXJpbmcgdHJhdmVyc2FsLlxuICpcbiAqIFRoZSBnYXAgdGhpcyBmaWxsczpcbiAqICAgZm9vdHByaW50anMgZmlyZXMgYXRvbWljIGZsb3cgZXZlbnRzIChvblN1YmZsb3dFbnRyeSwgb25Gb3JrLCBvbkRlY2lzaW9uLFxuICogICBvbkxvb3ApIGJ1dCB0aGUgYWNjdW11bGF0ZWQgKnNoYXBlKiBvZiBhIHJ1biDigJQgd2hvIG5lc3RzIGluc2lkZSB3aG9tLFxuICogICB3aGljaCBub2RlcyBhcmUgcGFyYWxsZWwgc2libGluZ3MgdnMgYnJhbmNoZXMgb2YgYSBkZWNpc2lvbiDigJQgaXMgb25seVxuICogICB2aXNpYmxlIHBvc3QtcnVuIHZpYSBgZXhlY3V0b3IuZ2V0U25hcHNob3QoKWAgdHJlZS13YWxraW5nLlxuICpcbiAqICAgU3RyZWFtaW5nIGNvbnN1bWVycyAobGl2ZSBVSXMsIGluLWZsaWdodCBkZWJ1Z2dlcnMpIHNlZSBvbmx5IHRoZSBldmVudFxuICogICBzdHJlYW0uIEV2ZXJ5IHN1Y2ggY29uc3VtZXIgaGFzIHRvIHJlYnVpbGQgc3ViZmxvdy1zdGFjayArIGZvcmstbWFwICtcbiAqICAgZGVjaXNpb24tdHJhY2tlciBmcm9tIHNjcmF0Y2gsIHVzdWFsbHkgc2xpZ2h0bHkgd3JvbmcgaW4gZGlmZmVyZW50IHdheXMuXG4gKlxuICogICBUb3BvbG9neVJlY29yZGVyIGlzIHRoZSBzdGFuZGFyZCBhY2N1bXVsYXRvcjogb25lIHN1YnNjcmlwdGlvbiB0byB0aGVcbiAqICAgdGhyZWUgcHJpbWl0aXZlIGNoYW5uZWxzLCBvbmUgbGl2ZSBncmFwaCwgcXVlcnlhYmxlIGF0IGFueSBtb21lbnQgZHVyaW5nXG4gKiAgIG9yIGFmdGVyIGEgcnVuLlxuICpcbiAqIFdoYXQgaXQgcmVjb3JkcyDigJQgVEhSRUUgbm9kZSBraW5kcyBmb3IgY29tcGxldGUgY29tcG9zaXRpb24gY292ZXJhZ2U6XG4gKiAgIDEuICdzdWJmbG93JyAgICAgICAgICDigJQgdmlhIG9uU3ViZmxvd0VudHJ5IChhIG1vdW50ZWQgc3ViZmxvdyBib3VuZGFyeSlcbiAqICAgMi4gJ2ZvcmstYnJhbmNoJyAgICAgIOKAlCB2aWEgb25Gb3JrIChvbmUgbm9kZSBwZXIgY2hpbGQsIHN5bnRoZXNpemVkKVxuICogICAzLiAnZGVjaXNpb24tYnJhbmNoJyAg4oCUIHZpYSBvbkRlY2lzaW9uICh0aGUgY2hvc2VuIGJyYW5jaCwgc3ludGhlc2l6ZWQpXG4gKlxuICogICBXaGVuIGEgZm9yay1icmFuY2ggb3IgZGVjaXNpb24tYnJhbmNoIHRhcmdldCBJUyBBTFNPIGEgc3ViZmxvdywgdGhlXG4gKiAgIHN1YnNlcXVlbnQgb25TdWJmbG93RW50cnkgY3JlYXRlcyBhIHN1YmZsb3cgQ0hJTEQgb2YgdGhlIHN5bnRoZXRpYyBub2RlLlxuICogICBUaGUgbGF5ZXJlZCBzaGFwZSBwcmVzZXJ2ZXMgYm90aCBcIndobyBicmFuY2hlZFwiIGFuZCBcIndoYXQgdGhlIGJyYW5jaCByYW4uXCJcbiAqXG4gKiAgIFBsYWluIHNlcXVlbnRpYWwgc3RhZ2VzIGFyZSBOT1Qgbm9kZXMg4oCUIHRoYXQncyBTdGFnZUNvbnRleHQncyBqb2IuXG4gKiAgIFRvcG9sb2d5IGlzIGEgZ3JhcGggb2YgY29udHJvbC1mbG93IGJyYW5jaGluZywgbm90IGEgZnVsbCBleGVjdXRpb24gdHJlZS5cbiAqXG4gKiBFZGdlczpcbiAqICAgT25lIGVkZ2UgcGVyIHRyYXZlcnNhbCB0cmFuc2l0aW9uIOKAlCBga2luZGAgbWF0Y2hlcyB0aGUgY2hpbGQnc1xuICogICBgaW5jb21pbmdLaW5kYC4gQSBjb25zdW1lciByZW5kZXJpbmcgXCJwYXJhbGxlbCBjb2x1bW5zXCIgZmlsdGVycyBlZGdlc1xuICogICB3aGVyZSBga2luZCA9PT0gJ2ZvcmstYnJhbmNoJ2Agc2hhcmluZyB0aGUgc2FtZSBgZnJvbWAuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IHRvcG9sb2d5UmVjb3JkZXIgfSBmcm9tICdmb290cHJpbnRqcy90cmFjZSc7XG4gKlxuICogY29uc3QgdG9wbyA9IHRvcG9sb2d5UmVjb3JkZXIoKTtcbiAqIGV4ZWN1dG9yLmF0dGFjaENvbWJpbmVkUmVjb3JkZXIodG9wbyk7ICAvLyBhdXRvLXJvdXRlcyB0byBGbG93UmVjb3JkZXIgY2hhbm5lbFxuICpcbiAqIGF3YWl0IGV4ZWN1dG9yLnJ1bigpO1xuICpcbiAqIGNvbnN0IHsgbm9kZXMsIGVkZ2VzLCBhY3RpdmVOb2RlSWQsIHJvb3RJZCB9ID0gdG9wby5nZXRUb3BvbG9neSgpO1xuICogLy8gQ29uc3VtZXIgcXVlcmllczpcbiAqIHRvcG8uZ2V0Q2hpbGRyZW4oJ3NmLXBhcmVudCcpOyAgICAgICAgICAgICAgLy8gZGlyZWN0IGNoaWxkcmVuIChhbnkga2luZClcbiAqIHRvcG8uZ2V0QnlLaW5kKCdmb3JrLWJyYW5jaCcpOyAgICAgICAgICAgICAgLy8gYWxsIHBhcmFsbGVsIGJyYW5jaGVzXG4gKiB0b3BvLmdldFN1YmZsb3dOb2RlcygpOyAgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgbW91bnRlZCBzdWJmbG93c1xuICogYGBgXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBGbG93RGVjaXNpb25FdmVudCxcbiAgRmxvd0ZvcmtFdmVudCxcbiAgRmxvd0xvb3BFdmVudCxcbiAgRmxvd1JlY29yZGVyLFxuICBGbG93U3ViZmxvd0V2ZW50LFxufSBmcm9tICcuLi9lbmdpbmUvbmFycmF0aXZlL3R5cGVzLmpzJztcblxuLyoqIFRoZSBraW5kIG9mIGNvbXBvc2l0aW9uIHVuaXQgYSBub2RlIHJlcHJlc2VudHMuICovXG5leHBvcnQgdHlwZSBUb3BvbG9neU5vZGVLaW5kID0gJ3N1YmZsb3cnIHwgJ2ZvcmstYnJhbmNoJyB8ICdkZWNpc2lvbi1icmFuY2gnO1xuXG4vKiogSG93IHRoZSB0cmF2ZXJzYWwgcmVhY2hlZCB0aGlzIG5vZGUg4oCUIGRyaXZlcyBjb25zdW1lciBsYXlvdXQgZGVjaXNpb25zLiAqL1xuZXhwb3J0IHR5cGUgVG9wb2xvZ3lJbmNvbWluZ0tpbmQgPSAncm9vdCcgfCAnbmV4dCcgfCAnZm9yay1icmFuY2gnIHwgJ2RlY2lzaW9uLWJyYW5jaCcgfCAnbG9vcC1pdGVyYXRpb24nO1xuXG4vKiogQSBjb21wb3NpdGlvbi1zaWduaWZpY2FudCBwb2ludCBpbiB0aGUgZ3JhcGguICovXG5leHBvcnQgaW50ZXJmYWNlIFRvcG9sb2d5Tm9kZSB7XG4gIC8qKiBVbmlxdWUgaWQuIFN1YmZsb3dzIHVzZSB0aGVpciBzdWJmbG93SWQgKHdpdGggYCNuYCBzdWZmaXggb24gcmUtZW50cnkpLlxuICAgKiAgU3ludGhldGljIG5vZGVzIChmb3JrLWJyYW5jaCAvIGRlY2lzaW9uLWJyYW5jaCkgdXNlXG4gICAqICBgZm9yay0ke3J1bnRpbWVTdGFnZUlkfS0ke2l9YCAvIGBkZWNpc2lvbi0ke3J1bnRpbWVTdGFnZUlkfWAgZm9ybS4gKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgLyoqIFdoYXQgdGhpcyBub2RlIHJlcHJlc2VudHMuICovXG4gIHJlYWRvbmx5IGtpbmQ6IFRvcG9sb2d5Tm9kZUtpbmQ7XG4gIC8qKiBEaXNwbGF5IG5hbWUuIEZvciBzdWJmbG93czogYEZsb3dTdWJmbG93RXZlbnQubmFtZWAuIEZvciBmb3JrLWJyYW5jaGVzOlxuICAgKiAgdGhlIGNoaWxkIG5hbWUgZnJvbSBgRmxvd0ZvcmtFdmVudC5jaGlsZHJlbmAuIEZvciBkZWNpc2lvbi1icmFuY2hlczpcbiAgICogIHRoZSBjaG9zZW4gbmFtZSBmcm9tIGBGbG93RGVjaXNpb25FdmVudC5jaG9zZW5gLiAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKiBQYXJlbnQgbm9kZSBpZC4gVW5kZWZpbmVkIHdoZW4gdGhpcyBub2RlIHNpdHMgYXQgdGhlIHJ1bidzIHRvcCBsZXZlbC4gKi9cbiAgcmVhZG9ubHkgcGFyZW50SWQ/OiBzdHJpbmc7XG4gIC8qKiBEZXB0aCBpbiB0aGUgdG9wb2xvZ3kgdHJlZSAoMCA9IHRvcC1sZXZlbCkuICovXG4gIHJlYWRvbmx5IGRlcHRoOiBudW1iZXI7XG4gIC8qKiBIb3cgdGhlIHRyYXZlcnNhbCByZWFjaGVkIHRoaXMgbm9kZS4gKi9cbiAgcmVhZG9ubHkgaW5jb21pbmdLaW5kOiBUb3BvbG9neUluY29taW5nS2luZDtcbiAgLyoqIHJ1bnRpbWVTdGFnZUlkIGF0IHRoZSBtb21lbnQgdGhlIG5vZGUgd2FzIGNyZWF0ZWQuICovXG4gIHJlYWRvbmx5IGVudGVyZWRBdDogc3RyaW5nO1xuICAvKiogcnVudGltZVN0YWdlSWQgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBzdWJmbG93IGV4aXRlZC4gT25seSBtZWFuaW5nZnVsXG4gICAqICBmb3Iga2luZD0nc3ViZmxvdyc7IGZvcmsvZGVjaXNpb24tYnJhbmNoIG5vZGVzIGFyZSBpbnN0YW50YW5lb3VzLiAqL1xuICBleGl0ZWRBdD86IHN0cmluZztcbiAgLyoqIEtpbmQtc3BlY2lmaWMgZXh0cmFzOiBmb3JrUGFyZW50LCBkZWNpZGVyLCByYXRpb25hbGUsIGRlc2NyaXB0aW9uLiAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pjtcbn1cblxuLyoqIEEgdHJhdmVyc2FsIHRyYW5zaXRpb24gYmV0d2VlbiB0d28gbm9kZXMuICovXG5leHBvcnQgaW50ZXJmYWNlIFRvcG9sb2d5RWRnZSB7XG4gIHJlYWRvbmx5IGZyb206IHN0cmluZztcbiAgcmVhZG9ubHkgdG86IHN0cmluZztcbiAgcmVhZG9ubHkga2luZDogRXhjbHVkZTxUb3BvbG9neUluY29taW5nS2luZCwgJ3Jvb3QnPjtcbiAgcmVhZG9ubHkgYXQ6IHN0cmluZztcbn1cblxuLyoqIFNuYXBzaG90IG9mIHRoZSBjb21wb3NpdGlvbiBncmFwaC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVG9wb2xvZ3kge1xuICByZWFkb25seSBub2RlczogUmVhZG9ubHlBcnJheTxUb3BvbG9neU5vZGU+O1xuICByZWFkb25seSBlZGdlczogUmVhZG9ubHlBcnJheTxUb3BvbG9neUVkZ2U+O1xuICAvKiogQ3VycmVudGx5LWFjdGl2ZSBzdWJmbG93ICh0b3Agb2YgdGhlIHN1YmZsb3cgc3RhY2spLiBGb3JrLWJyYW5jaCBhbmRcbiAgICogIGRlY2lzaW9uLWJyYW5jaCBub2RlcyBhcmUgaW5zdGFudGFuZW91cyDigJQgdGhleSBkb24ndCBhZmZlY3QgYWN0aXZlTm9kZUlkLiAqL1xuICByZWFkb25seSBhY3RpdmVOb2RlSWQ6IHN0cmluZyB8IG51bGw7XG4gIC8qKiBGaXJzdCBub2RlIGluc2VydGVkLiBudWxsIGJlZm9yZSBhbnkgY29tcG9zaXRpb24gZXZlbnQgZmlyZXMuICovXG4gIHJlYWRvbmx5IHJvb3RJZDogc3RyaW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUb3BvbG9neVJlY29yZGVyT3B0aW9ucyB7XG4gIC8qKiBSZWNvcmRlciBpZC4gRGVmYXVsdHMgdG8gYHRvcG9sb2d5LU5gIChhdXRvLWluY3JlbWVudGVkKS4gKi9cbiAgaWQ/OiBzdHJpbmc7XG59XG5cbi8vIENvcnJlbGF0aW9uIHN0YXRlOiBtYXBzIGEgcGVuZGluZyBmb3JrL2RlY2lzaW9uIGNoaWxkIG5hbWUgdG8gaXRzIHN5bnRoZXRpY1xuLy8gbm9kZSBpZCwgc28gYSBzdWJzZXF1ZW50IG9uU3ViZmxvd0VudHJ5IG1hdGNoaW5nIHRoYXQgbmFtZSBjYW4gYmUgbmVzdGVkXG4vLyB1bmRlciB0aGUgc3ludGhldGljIG5vZGUgKHJhdGhlciB0aGFuIGNyZWF0aW5nIGEgcGVlcikuXG5pbnRlcmZhY2UgUGVuZGluZ0NoaWxkIHtcbiAgbm9kZUlkOiBzdHJpbmc7XG4gIGF0OiBzdHJpbmc7XG59XG5cbmxldCBfY291bnRlciA9IDA7XG5cbi8qKlxuICogRmFjdG9yeSDigJQgbWF0Y2hlcyB0aGUgYG5hcnJhdGl2ZSgpYCAvIGBtZXRyaWNzKClgIHN0eWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9wb2xvZ3lSZWNvcmRlcihvcHRpb25zOiBUb3BvbG9neVJlY29yZGVyT3B0aW9ucyA9IHt9KTogVG9wb2xvZ3lSZWNvcmRlciB7XG4gIHJldHVybiBuZXcgVG9wb2xvZ3lSZWNvcmRlcihvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBTdGF0ZWZ1bCBhY2N1bXVsYXRvciB0aGF0IHdhdGNoZXMgRmxvd1JlY29yZGVyIGV2ZW50cyBhbmQgbWFpbnRhaW5zIGEgbGl2ZVxuICogY29tcG9zaXRpb24gZ3JhcGguIEF0dGFjaCB2aWEgYGV4ZWN1dG9yLmF0dGFjaENvbWJpbmVkUmVjb3JkZXIocmVjb3JkZXIpYCDigJRcbiAqIGZvb3RwcmludGpzIGRldGVjdHMgdGhlIGBGbG93UmVjb3JkZXJgIG1ldGhvZCBzaGFwZSBhbmQgcm91dGVzIGV2ZW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFRvcG9sb2d5UmVjb3JkZXIgaW1wbGVtZW50cyBGbG93UmVjb3JkZXIge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbm9kZXNCeUlkID0gbmV3IE1hcDxzdHJpbmcsIFRvcG9sb2d5Tm9kZT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBub2RlT3JkZXI6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgZWRnZXM6IFRvcG9sb2d5RWRnZVtdID0gW107XG4gIC8qKiBTdGFjayBvZiBhY3RpdmUgU1VCRkxPVyBub2RlIGlkcy4gRm9yay9kZWNpc2lvbi1icmFuY2ggbm9kZXMgbmV2ZXIgcHVzaC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBzdWJmbG93U3RhY2s6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqIE1hcCBvZiBjaGlsZE5hbWUg4oaSIHBlbmRpbmcgZm9yay1icmFuY2ggc3ludGhldGljIG5vZGUsIGNvbnN1bWVkIGJ5XG4gICAqICB0aGUgbmV4dCBtYXRjaGluZyBgb25TdWJmbG93RW50cnlgLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHBlbmRpbmdGb3JrQnlOYW1lID0gbmV3IE1hcDxzdHJpbmcsIFBlbmRpbmdDaGlsZD4oKTtcbiAgLyoqIFBlbmRpbmcgZGVjaXNpb24tYnJhbmNoIHN5bnRoZXRpYyBub2RlLCBjb25zdW1lZCBieSBhIG1hdGNoaW5nIGVudHJ5LiAqL1xuICBwcml2YXRlIHBlbmRpbmdEZWNpc2lvbj86IHsgbmFtZTogc3RyaW5nIH0gJiBQZW5kaW5nQ2hpbGQ7XG4gIC8qKlxuICAgKiBUaGUgcHJldmlvdXMgc3ViZmxvdyB0aGF0IGp1c3QgZmluaXNoZWQsIGtleWVkIGJ5IHNjb3BlIChwYXJlbnRJZCxcbiAgICogb3IgJycgZm9yIHJvb3QpLiBXaGVuIGEgbmV3IHN1YmZsb3cgZW50ZXJzIGluIHRoZSBzYW1lIHNjb3BlIHZpYVxuICAgKiB0aGUgbm9ybWFsIG5leHQtY2hhaW5lZCBwYXRoIChub3QgZm9yay9kZWNpc2lvbiksIHdlIGVtaXQgYSBgbmV4dGBcbiAgICogZWRnZSBmcm9tIHRoZSBwcmV2aW91cyBzdWJmbG93IHRvIHRoZSBuZXcgb25lIOKAlCBtYXRjaGluZyBob3cgdGhlXG4gICAqIGJ1aWxkZXIgYWN0dWFsbHkgd2lyZWQgdGhlbTogYC5hZGRTdWJGbG93Q2hhcnROZXh0KEEpLmFkZFN1YkZsb3dDaGFydE5leHQoQilgXG4gICAqIG1lYW5zIEEg4oaSIEIsIG9uZSBhZnRlciB0aGUgb3RoZXIuXG4gICAqXG4gICAqIFdpdGhvdXQgdGhpcywgY29uc3VtZXJzIG9ubHkgc2VlIHBhcmVudOKGkmNoaWxkIGVkZ2VzIChBLCBCLCBDIGFsbFxuICAgKiBjaGlsZHJlbiBvZiB0aGVpciBjb21tb24gYW5jZXN0b3IpIHdpdGggbm8gcmVjb3JkIG9mIHRoZSBhY3R1YWxcbiAgICogQSDihpIgQiDihpIgQyBzZXF1ZW50aWFsIGNoYWluIHRoYXQgcmFuIOKAlCB3aGljaCBpcyBleGFjdGx5IHdoYXRcbiAgICogVG9wb2xvZ3lSZWNvcmRlciBpcyBzdXBwb3NlZCB0byBleHBvc2UuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHByZXZpb3VzU3ViZmxvd0luU2NvcGUgPSBuZXcgTWFwPHN0cmluZywgeyBub2RlSWQ6IHN0cmluZzsgZXhpdGVkQXQ6IHN0cmluZyB9PigpO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFRvcG9sb2d5UmVjb3JkZXJPcHRpb25zID0ge30pIHtcbiAgICB0aGlzLmlkID0gb3B0aW9ucy5pZCA/PyBgdG9wb2xvZ3ktJHsrK19jb3VudGVyfWA7XG4gIH1cblxuICAvLyDilIDilIAgRmxvd1JlY29yZGVyIGhvb2tzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIG9uU3ViZmxvd0VudHJ5KGV2ZW50OiBGbG93U3ViZmxvd0V2ZW50KTogdm9pZCB7XG4gICAgY29uc3Qgc3ViZmxvd0lkID0gZXZlbnQuc3ViZmxvd0lkO1xuICAgIGlmICghc3ViZmxvd0lkKSByZXR1cm47IC8vIE5lZWQgYSBzdGFibGUgaWQgdG8gdHJhY2suXG5cbiAgICBjb25zdCBlbnRlcmVkQXQgPSBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5ydW50aW1lU3RhZ2VJZCA/PyAnJztcblxuICAgIC8vIERldGVybWluZSB0aGUgcGFyZW50OiBwcmVmZXIgYSBwZW5kaW5nIGZvcmsvZGVjaXNpb24gbWF0Y2ggYnkgbmFtZSxcbiAgICAvLyBvdGhlcndpc2UgdGhlIGN1cnJlbnQgdG9wLW9mLXN1YmZsb3ctc3RhY2suXG4gICAgbGV0IHBhcmVudElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGluY29taW5nS2luZDogVG9wb2xvZ3lJbmNvbWluZ0tpbmQ7XG5cbiAgICBjb25zdCBwZW5kaW5nRm9yayA9IHRoaXMucGVuZGluZ0ZvcmtCeU5hbWUuZ2V0KGV2ZW50Lm5hbWUpO1xuICAgIGlmIChwZW5kaW5nRm9yaykge1xuICAgICAgcGFyZW50SWQgPSBwZW5kaW5nRm9yay5ub2RlSWQ7XG4gICAgICBpbmNvbWluZ0tpbmQgPSAnbmV4dCc7IC8vIENoaWxkIE9GIGEgZm9yay1icmFuY2ggbm9kZTsgdGhlIGZvcmsgc2VtYW50aWNcbiAgICAgIC8vIGlzIGNhcHR1cmVkIGJ5IHRoZSBmb3JrLWJyYW5jaCdzIG93biBpbmNvbWluZ0tpbmQuXG4gICAgICB0aGlzLnBlbmRpbmdGb3JrQnlOYW1lLmRlbGV0ZShldmVudC5uYW1lKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucGVuZGluZ0RlY2lzaW9uICYmIHRoaXMucGVuZGluZ0RlY2lzaW9uLm5hbWUgPT09IGV2ZW50Lm5hbWUpIHtcbiAgICAgIHBhcmVudElkID0gdGhpcy5wZW5kaW5nRGVjaXNpb24ubm9kZUlkO1xuICAgICAgaW5jb21pbmdLaW5kID0gJ25leHQnO1xuICAgICAgdGhpcy5wZW5kaW5nRGVjaXNpb24gPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmVudElkID0gdGhpcy5zdWJmbG93U3RhY2tbdGhpcy5zdWJmbG93U3RhY2subGVuZ3RoIC0gMV07XG4gICAgICBpbmNvbWluZ0tpbmQgPSBwYXJlbnRJZCA/ICduZXh0JyA6ICdyb290JztcbiAgICB9XG5cbiAgICAvLyBEaXNhbWJpZ3VhdGUgcmUtZW50cnkgKGUuZy4sIGxvb3AgYm9keSByZS1lbnRlcnMgdGhlIHNhbWUgc3ViZmxvdykuXG4gICAgbGV0IG5vZGVJZCA9IHN1YmZsb3dJZDtcbiAgICBpZiAodGhpcy5ub2Rlc0J5SWQuaGFzKG5vZGVJZCkpIHtcbiAgICAgIGxldCBuID0gMTtcbiAgICAgIHdoaWxlICh0aGlzLm5vZGVzQnlJZC5oYXMoYCR7c3ViZmxvd0lkfSMke259YCkpIG4rKztcbiAgICAgIG5vZGVJZCA9IGAke3N1YmZsb3dJZH0jJHtufWA7XG4gICAgfVxuXG4gICAgY29uc3QgZGVwdGggPSBwYXJlbnRJZCA/IHRoaXMubm9kZXNCeUlkLmdldChwYXJlbnRJZCkhLmRlcHRoICsgMSA6IDA7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBldmVudC5kZXNjcmlwdGlvbiA/IHsgZGVzY3JpcHRpb246IGV2ZW50LmRlc2NyaXB0aW9uIH0gOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBub2RlOiBUb3BvbG9neU5vZGUgPSB7XG4gICAgICBpZDogbm9kZUlkLFxuICAgICAga2luZDogJ3N1YmZsb3cnLFxuICAgICAgbmFtZTogZXZlbnQubmFtZSxcbiAgICAgIHBhcmVudElkLFxuICAgICAgZGVwdGgsXG4gICAgICBpbmNvbWluZ0tpbmQsXG4gICAgICBlbnRlcmVkQXQsXG4gICAgICBtZXRhZGF0YSxcbiAgICB9O1xuICAgIHRoaXMubm9kZXNCeUlkLnNldChub2RlSWQsIG5vZGUpO1xuICAgIHRoaXMubm9kZU9yZGVyLnB1c2gobm9kZUlkKTtcblxuICAgIGlmIChwYXJlbnRJZCAmJiBpbmNvbWluZ0tpbmQgIT09ICdyb290Jykge1xuICAgICAgdGhpcy5lZGdlcy5wdXNoKHtcbiAgICAgICAgZnJvbTogcGFyZW50SWQsXG4gICAgICAgIHRvOiBub2RlSWQsXG4gICAgICAgIGtpbmQ6IGluY29taW5nS2luZCxcbiAgICAgICAgYXQ6IGVudGVyZWRBdCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIE5leHQtY2hhaW5lZCBlZGdlIGZyb20gdGhlIFBSRVZJT1VTIHN1YmZsb3cgaW4gdGhpcyBzY29wZS5cbiAgICAvL1xuICAgIC8vIGAuYWRkU3ViRmxvd0NoYXJ0TmV4dChBKS5hZGRTdWJGbG93Q2hhcnROZXh0KEIpLmFkZFN1YkZsb3dDaGFydE5leHQoQylgXG4gICAgLy8gcnVucyBhczogQSBlbnRlcnMg4oaSIEEgZXhpdHMg4oaSIEIgZW50ZXJzIOKGkiBCIGV4aXRzIOKGkiBDIGVudGVycy4gQXRcbiAgICAvLyBCJ3MgZW50cnkgdGhlIHN0YWNrIGhhcyByZXR1cm5lZCB0byB0aGUgc2NvcGUgaXQgd2FzIGluIGJlZm9yZSBBXG4gICAgLy8gZW50ZXJlZCAocm9vdCwgb3IgdGhlIHNoYXJlZCBhbmNlc3RvcikuIFdpdGhvdXQgdGhpcyBlZGdlIHdlJ2RcbiAgICAvLyBzZWUgbm9kZXMge0EsIEIsIEN9IGJ1dCBubyByZWNvcmQgdGhhdCBBIHJhbiBCRUZPUkUgQiB3aGljaCByYW5cbiAgICAvLyBCRUZPUkUgQyDigJQgYW5kIGRvd25zdHJlYW0gY29uc3VtZXJzIHdvdWxkIGhhdmUgdG8gcmVjb25zdHJ1Y3RcbiAgICAvLyBzZXF1ZW50aWFsIG9yZGVyaW5nIHRoZW1zZWx2ZXMuXG4gICAgLy9cbiAgICAvLyBPbmx5IGVtaXQgb24gdGhlIHJlZ3VsYXItZW50cnkgcGF0aC4gRm9yay9kZWNpc2lvbiBlbnRyaWVzIGhhdmVcbiAgICAvLyB0aGVpciBvd24gZWRnZSBtZWNoYW5pY3MgKHBhcmVudOKGkmZvcmstYnJhbmNoLCBwYXJlbnTihpJkZWNpc2lvbi1cbiAgICAvLyBicmFuY2gpIHRoYXQgY2FycnkgdGhlIGJyYW5jaGluZyBzZW1hbnRpY3MuXG4gICAgaWYgKGluY29taW5nS2luZCA9PT0gJ25leHQnIHx8IGluY29taW5nS2luZCA9PT0gJ3Jvb3QnKSB7XG4gICAgICBjb25zdCBzY29wZUtleSA9IHBhcmVudElkID8/ICcnO1xuICAgICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLnByZXZpb3VzU3ViZmxvd0luU2NvcGUuZ2V0KHNjb3BlS2V5KTtcbiAgICAgIGlmIChwcmV2aW91cykge1xuICAgICAgICB0aGlzLmVkZ2VzLnB1c2goe1xuICAgICAgICAgIGZyb206IHByZXZpb3VzLm5vZGVJZCxcbiAgICAgICAgICB0bzogbm9kZUlkLFxuICAgICAgICAgIGtpbmQ6ICduZXh0JyxcbiAgICAgICAgICBhdDogZW50ZXJlZEF0LFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5wcmV2aW91c1N1YmZsb3dJblNjb3BlLmRlbGV0ZShzY29wZUtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zdWJmbG93U3RhY2sucHVzaChub2RlSWQpO1xuICB9XG5cbiAgb25TdWJmbG93RXhpdChldmVudDogRmxvd1N1YmZsb3dFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IG5vZGVJZCA9IHRoaXMuc3ViZmxvd1N0YWNrLnBvcCgpO1xuICAgIGlmICghbm9kZUlkKSByZXR1cm47XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMubm9kZXNCeUlkLmdldChub2RlSWQpO1xuICAgIGNvbnN0IGV4aXRlZEF0ID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dD8ucnVudGltZVN0YWdlSWQgPz8gJyc7XG4gICAgaWYgKG5vZGUpIHtcbiAgICAgIG5vZGUuZXhpdGVkQXQgPSBleGl0ZWRBdDtcbiAgICAgIC8vIFJlbWVtYmVyIHRoaXMgbm9kZSBhcyB0aGUgXCJwcmV2aW91cyBzdWJmbG93XCIgaW4gaXRzIHNjb3BlLlxuICAgICAgLy8gV2hhdGV2ZXIgc3ViZmxvdyBlbnRlcnMgTkVYVCBpbiB0aGUgc2FtZSBzY29wZSAobm9ybWFsLWVudHJ5XG4gICAgICAvLyBwYXRoLCBub3QgZm9yay9kZWNpc2lvbikgZ2V0cyBhIGBuZXh0YCBlZGdlIGRyYXduIGZyb20gaGVyZVxuICAgICAgLy8g4oCUIHRoaXMgaXMgdGhlIHJlYWwgc2VxdWVudGlhbCBBIOKGkiBCIHRyYW5zaXRpb24gdGhhdCB0aGVcbiAgICAgIC8vIGAuYWRkU3ViRmxvd0NoYXJ0TmV4dCgpYCBidWlsZGVyIHByb2R1Y2VkLlxuICAgICAgY29uc3Qgc2NvcGVLZXkgPSBub2RlLnBhcmVudElkID8/ICcnO1xuICAgICAgdGhpcy5wcmV2aW91c1N1YmZsb3dJblNjb3BlLnNldChzY29wZUtleSwgeyBub2RlSWQsIGV4aXRlZEF0IH0pO1xuICAgIH1cbiAgICAvLyBDbGVhciBwZW5kaW5nRGVjaXNpb24gb24gZXhpdCDigJQgYSBkZWNpc2lvbiBpZGVudGlmaWVzIGV4YWN0bHkgT05FXG4gICAgLy8gdGFyZ2V0LiBJZiB0aGUgY2hvc2VuIGdvZXMgdG8gYSBwbGFpbiBzdGFnZSAobm90IGEgc3ViZmxvdyksIHRoZVxuICAgIC8vIHBlbmRpbmcgZW50cnkgd291bGQgb3RoZXJ3aXNlIGxpbmdlciBhbmQgZmFsc2VseSBtYXRjaCBhblxuICAgIC8vIHVucmVsYXRlZCBzdWJmbG93IGxhdGVyIGluIGEgZGlmZmVyZW50IHNjb3BlLlxuICAgIHRoaXMucGVuZGluZ0RlY2lzaW9uID0gdW5kZWZpbmVkO1xuICAgIC8vIERlbGliZXJhdGVseSBOT1QgY2xlYXJpbmcgcGVuZGluZ0ZvcmtCeU5hbWUg4oCUIGZvcmsgc2libGluZ3MgbmVlZFxuICAgIC8vIHRoZWlyIHBlbmRpbmcgZW50cmllcyB0byBzdXJ2aXZlIHNjb3BlIGV4aXRzIG9mIGVhcmxpZXIgc2libGluZ3NcbiAgICAvLyAoZS5nLiBBbHBoYSdzIGlubmVyIHNmLW1lc3NhZ2VzIGV4aXRzIGJlZm9yZSBCZXRhIGVudGVycykuIEZvcmtcbiAgICAvLyBwZW5kaW5nIGVudHJpZXMgYXJlIGNsZWFyZWQgb24gbmV3IGBvbkZvcmtgIG9yIGNvbnN1bWVkIG9uIG1hdGNoLlxuICB9XG5cbiAgb25Gb3JrKGV2ZW50OiBGbG93Rm9ya0V2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgYWN0aXZlSWQgPSB0aGlzLnN1YmZsb3dTdGFja1t0aGlzLnN1YmZsb3dTdGFjay5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBhdCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkID8/ICcnO1xuICAgIGNvbnN0IGRlcHRoID0gYWN0aXZlSWQgPyB0aGlzLm5vZGVzQnlJZC5nZXQoYWN0aXZlSWQpIS5kZXB0aCArIDEgOiAwO1xuXG4gICAgLy8gUmVzZXQgYW55IHByaW9yIHBlbmRpbmcgZm9yayBzdGF0ZSDigJQgYSBuZXcgZm9yayBzdGFydHMgZnJlc2guXG4gICAgdGhpcy5wZW5kaW5nRm9ya0J5TmFtZS5jbGVhcigpO1xuXG4gICAgZXZlbnQuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGROYW1lLCBpKSA9PiB7XG4gICAgICBjb25zdCBub2RlSWQgPSBgZm9yay0ke2F0IHx8IGV2ZW50LnBhcmVudH0tJHtpfS0ke2NoaWxkTmFtZX1gO1xuICAgICAgY29uc3Qgbm9kZTogVG9wb2xvZ3lOb2RlID0ge1xuICAgICAgICBpZDogbm9kZUlkLFxuICAgICAgICBraW5kOiAnZm9yay1icmFuY2gnLFxuICAgICAgICBuYW1lOiBjaGlsZE5hbWUsXG4gICAgICAgIHBhcmVudElkOiBhY3RpdmVJZCxcbiAgICAgICAgZGVwdGgsXG4gICAgICAgIGluY29taW5nS2luZDogJ2ZvcmstYnJhbmNoJyxcbiAgICAgICAgZW50ZXJlZEF0OiBhdCxcbiAgICAgICAgbWV0YWRhdGE6IHsgZm9ya1BhcmVudDogZXZlbnQucGFyZW50IH0sXG4gICAgICB9O1xuICAgICAgdGhpcy5ub2Rlc0J5SWQuc2V0KG5vZGVJZCwgbm9kZSk7XG4gICAgICB0aGlzLm5vZGVPcmRlci5wdXNoKG5vZGVJZCk7XG4gICAgICBpZiAoYWN0aXZlSWQpIHtcbiAgICAgICAgdGhpcy5lZGdlcy5wdXNoKHsgZnJvbTogYWN0aXZlSWQsIHRvOiBub2RlSWQsIGtpbmQ6ICdmb3JrLWJyYW5jaCcsIGF0IH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5wZW5kaW5nRm9ya0J5TmFtZS5zZXQoY2hpbGROYW1lLCB7IG5vZGVJZCwgYXQgfSk7XG4gICAgfSk7XG4gIH1cblxuICBvbkRlY2lzaW9uKGV2ZW50OiBGbG93RGVjaXNpb25FdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGFjdGl2ZUlkID0gdGhpcy5zdWJmbG93U3RhY2tbdGhpcy5zdWJmbG93U3RhY2subGVuZ3RoIC0gMV07XG4gICAgY29uc3QgYXQgPSBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5ydW50aW1lU3RhZ2VJZCA/PyAnJztcbiAgICBjb25zdCBkZXB0aCA9IGFjdGl2ZUlkID8gdGhpcy5ub2Rlc0J5SWQuZ2V0KGFjdGl2ZUlkKSEuZGVwdGggKyAxIDogMDtcblxuICAgIC8vIEEgbmV3IGRlY2lzaW9uIHN1cGVyc2VkZXMgYW55IHByaW9yIHVucmVzb2x2ZWQgcGVuZGluZyBvbmUuXG4gICAgdGhpcy5wZW5kaW5nRGVjaXNpb24gPSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBub2RlSWQgPSBgZGVjaXNpb24tJHthdCB8fCBldmVudC5kZWNpZGVyfS0ke2V2ZW50LmNob3Nlbn1gO1xuICAgIGNvbnN0IG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsgZGVjaWRlcjogZXZlbnQuZGVjaWRlciB9O1xuICAgIGlmIChldmVudC5yYXRpb25hbGUpIG1ldGFkYXRhLnJhdGlvbmFsZSA9IGV2ZW50LnJhdGlvbmFsZTtcbiAgICBpZiAoZXZlbnQuZGVzY3JpcHRpb24pIG1ldGFkYXRhLmRlc2NyaXB0aW9uID0gZXZlbnQuZGVzY3JpcHRpb247XG5cbiAgICBjb25zdCBub2RlOiBUb3BvbG9neU5vZGUgPSB7XG4gICAgICBpZDogbm9kZUlkLFxuICAgICAga2luZDogJ2RlY2lzaW9uLWJyYW5jaCcsXG4gICAgICBuYW1lOiBldmVudC5jaG9zZW4sXG4gICAgICBwYXJlbnRJZDogYWN0aXZlSWQsXG4gICAgICBkZXB0aCxcbiAgICAgIGluY29taW5nS2luZDogJ2RlY2lzaW9uLWJyYW5jaCcsXG4gICAgICBlbnRlcmVkQXQ6IGF0LFxuICAgICAgbWV0YWRhdGEsXG4gICAgfTtcbiAgICB0aGlzLm5vZGVzQnlJZC5zZXQobm9kZUlkLCBub2RlKTtcbiAgICB0aGlzLm5vZGVPcmRlci5wdXNoKG5vZGVJZCk7XG4gICAgaWYgKGFjdGl2ZUlkKSB7XG4gICAgICB0aGlzLmVkZ2VzLnB1c2goeyBmcm9tOiBhY3RpdmVJZCwgdG86IG5vZGVJZCwga2luZDogJ2RlY2lzaW9uLWJyYW5jaCcsIGF0IH0pO1xuICAgIH1cbiAgICB0aGlzLnBlbmRpbmdEZWNpc2lvbiA9IHsgbmFtZTogZXZlbnQuY2hvc2VuLCBub2RlSWQsIGF0IH07XG4gIH1cblxuICBvbkxvb3AoZXZlbnQ6IEZsb3dMb29wRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBsb29wVG8ganVtcHMgYmFjayBpbnNpZGUgdGhlIENVUlJFTlQgc3ViZmxvdy4gUmVjb3JkIGEgc2VsZi1lZGdlIG9uIHRoZVxuICAgIC8vIGFjdGl2ZSBzdWJmbG93IOKAlCBzeW50aGV0aWMgZm9yay9kZWNpc2lvbiBub2RlcyBkb24ndCBwYXJ0aWNpcGF0ZSBpbiBsb29wcy5cbiAgICBjb25zdCBhY3RpdmVJZCA9IHRoaXMuc3ViZmxvd1N0YWNrW3RoaXMuc3ViZmxvd1N0YWNrLmxlbmd0aCAtIDFdO1xuICAgIGlmICghYWN0aXZlSWQpIHJldHVybjtcbiAgICB0aGlzLmVkZ2VzLnB1c2goe1xuICAgICAgZnJvbTogYWN0aXZlSWQsXG4gICAgICB0bzogYWN0aXZlSWQsXG4gICAgICBraW5kOiAnbG9vcC1pdGVyYXRpb24nLFxuICAgICAgYXQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkID8/ICcnLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIENhbGxlZCBieSB0aGUgZXhlY3V0b3IgYmVmb3JlIGVhY2ggYHJ1bigpYCDigJQgcmVzZXRzIGFsbCBzdGF0ZS4gKi9cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5ub2Rlc0J5SWQuY2xlYXIoKTtcbiAgICB0aGlzLm5vZGVPcmRlci5sZW5ndGggPSAwO1xuICAgIHRoaXMuZWRnZXMubGVuZ3RoID0gMDtcbiAgICB0aGlzLnN1YmZsb3dTdGFjay5sZW5ndGggPSAwO1xuICAgIHRoaXMucGVuZGluZ0ZvcmtCeU5hbWUuY2xlYXIoKTtcbiAgICB0aGlzLnByZXZpb3VzU3ViZmxvd0luU2NvcGUuY2xlYXIoKTtcbiAgICB0aGlzLnBlbmRpbmdEZWNpc2lvbiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIOKUgOKUgCBRdWVyeSBBUEkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIExpdmUgc25hcHNob3Qgb2YgdGhlIGNvbXBvc2l0aW9uIGdyYXBoLiBTYWZlIGR1cmluZyBvciBhZnRlciBhIHJ1bi4gKi9cbiAgZ2V0VG9wb2xvZ3koKTogVG9wb2xvZ3kge1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ub2RlT3JkZXIubWFwKChpZCkgPT4gdGhpcy5ub2Rlc0J5SWQuZ2V0KGlkKSEpO1xuICAgIHJldHVybiB7XG4gICAgICBub2RlcyxcbiAgICAgIGVkZ2VzOiBbLi4udGhpcy5lZGdlc10sXG4gICAgICBhY3RpdmVOb2RlSWQ6IHRoaXMuc3ViZmxvd1N0YWNrW3RoaXMuc3ViZmxvd1N0YWNrLmxlbmd0aCAtIDFdID8/IG51bGwsXG4gICAgICByb290SWQ6IHRoaXMubm9kZU9yZGVyWzBdID8/IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBEaXJlY3QgY2hpbGRyZW4gb2YgYSBub2RlIOKAlCBpbnNlcnRpb24tb3JkZXJlZC4gKi9cbiAgZ2V0Q2hpbGRyZW4obm9kZUlkOiBzdHJpbmcpOiBUb3BvbG9neU5vZGVbXSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZU9yZGVyLm1hcCgoaWQpID0+IHRoaXMubm9kZXNCeUlkLmdldChpZCkhKS5maWx0ZXIoKG4pID0+IG4ucGFyZW50SWQgPT09IG5vZGVJZCk7XG4gIH1cblxuICAvKiogQWxsIG5vZGVzIG9mIGEgZ2l2ZW4ga2luZC4gKi9cbiAgZ2V0QnlLaW5kKGtpbmQ6IFRvcG9sb2d5Tm9kZUtpbmQpOiBUb3BvbG9neU5vZGVbXSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZU9yZGVyLm1hcCgoaWQpID0+IHRoaXMubm9kZXNCeUlkLmdldChpZCkhKS5maWx0ZXIoKG4pID0+IG4ua2luZCA9PT0ga2luZCk7XG4gIH1cblxuICAvKiogQWxsIG1vdW50ZWQgc3ViZmxvdyBub2Rlcy4gQ29udmVuaWVuY2UgZm9yIGFnZW50LWNlbnRyaWMgdmlld3MuICovXG4gIGdldFN1YmZsb3dOb2RlcygpOiBUb3BvbG9neU5vZGVbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QnlLaW5kKCdzdWJmbG93Jyk7XG4gIH1cblxuICAvKiogQWxsIGZvcmstYnJhbmNoIG5vZGVzIHNoYXJpbmcgdGhlIHNhbWUgcGFyZW50IGFzIGBub2RlSWRgIOKAlCBpLmUuLFxuICAgKiAgcGFyYWxsZWwgc2libGluZ3Mgb2YgYSBwYXJhbGxlbCBicmFuY2guIEVtcHR5IGlmIGBub2RlSWRgIGlzbid0IGFcbiAgICogIGZvcmstYnJhbmNoIG9yIGhhcyBubyBwYXJlbnQuICovXG4gIGdldFBhcmFsbGVsU2libGluZ3Mobm9kZUlkOiBzdHJpbmcpOiBUb3BvbG9neU5vZGVbXSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMubm9kZXNCeUlkLmdldChub2RlSWQpO1xuICAgIGlmICghbm9kZSB8fCBub2RlLmtpbmQgIT09ICdmb3JrLWJyYW5jaCcgfHwgIW5vZGUucGFyZW50SWQpIHJldHVybiBbXTtcbiAgICByZXR1cm4gdGhpcy5nZXRDaGlsZHJlbihub2RlLnBhcmVudElkKS5maWx0ZXIoKG4pID0+IG4ua2luZCA9PT0gJ2ZvcmstYnJhbmNoJyk7XG4gIH1cblxuICAvKiogRW1pdCBhIHNuYXBzaG90IGJ1bmRsZSBmb3IgaW5jbHVzaW9uIGluIGBleGVjdXRvci5nZXRTbmFwc2hvdCgpYC4gKi9cbiAgdG9TbmFwc2hvdCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogJ1RvcG9sb2d5JyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQ29tcG9zaXRpb24gZ3JhcGg6IHN1YmZsb3cgYm91bmRhcmllcywgZm9yayBicmFuY2hlcywgZGVjaXNpb24gYnJhbmNoZXMnLFxuICAgICAgcHJlZmVycmVkT3BlcmF0aW9uOiAndHJhbnNsYXRlJyBhcyBjb25zdCxcbiAgICAgIGRhdGE6IHRoaXMuZ2V0VG9wb2xvZ3koKSxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
327
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVG9wb2xvZ3lSZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcmVjb3JkZXIvVG9wb2xvZ3lSZWNvcmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpREc7OztBQTJFSCxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUM7QUFFakI7O0dBRUc7QUFDSCxTQUFnQixnQkFBZ0IsQ0FBQyxVQUFtQyxFQUFFO0lBQ3BFLE9BQU8sSUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN2QyxDQUFDO0FBRkQsNENBRUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBYSxnQkFBZ0I7SUFDbEIsRUFBRSxDQUFTO0lBRUgsU0FBUyxHQUFHLElBQUksR0FBRyxFQUF3QixDQUFDO0lBQzVDLFNBQVMsR0FBYSxFQUFFLENBQUM7SUFDekIsS0FBSyxHQUFtQixFQUFFLENBQUM7SUFDNUMsK0VBQStFO0lBQzlELFlBQVksR0FBYSxFQUFFLENBQUM7SUFFN0M7OENBQzBDO0lBQ3pCLGlCQUFpQixHQUFHLElBQUksR0FBRyxFQUF3QixDQUFDO0lBQ3JFLDRFQUE0RTtJQUNwRSxlQUFlLENBQW1DO0lBQzFEOzs7Ozs7Ozs7Ozs7T0FZRztJQUNjLHNCQUFzQixHQUFHLElBQUksR0FBRyxFQUFnRCxDQUFDO0lBRWxHLFlBQVksVUFBbUMsRUFBRTtRQUMvQyxJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLElBQUksWUFBWSxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQ25ELENBQUM7SUFFRCx5RUFBeUU7SUFFekUsY0FBYyxDQUFDLEtBQXVCO1FBQ3BDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7UUFDbEMsSUFBSSxDQUFDLFNBQVM7WUFBRSxPQUFPLENBQUMsNkJBQTZCO1FBRXJELE1BQU0sU0FBUyxH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QUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQyxDQUFDO0lBQ2pGLENBQUM7SUFFRCx3RUFBd0U7SUFDeEUsVUFBVTtRQUNSLE9BQU87WUFDTCxJQUFJLEVBQUUsVUFBVTtZQUNoQixXQUFXLEVBQUUseUVBQXlFO1lBQ3RGLGtCQUFrQixFQUFFLFdBQW9CO1lBQ3hDLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFO1NBQ3pCLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUF4UkQsNENBd1JDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUb3BvbG9neVJlY29yZGVyIOKAlCBjb21wb3NpdGlvbiBncmFwaCBidWlsdCBkdXJpbmcgdHJhdmVyc2FsLlxuICpcbiAqIFRoZSBnYXAgdGhpcyBmaWxsczpcbiAqICAgZm9vdHByaW50anMgZmlyZXMgYXRvbWljIGZsb3cgZXZlbnRzIChvblN1YmZsb3dFbnRyeSwgb25Gb3JrLCBvbkRlY2lzaW9uLFxuICogICBvbkxvb3ApIGJ1dCB0aGUgYWNjdW11bGF0ZWQgKnNoYXBlKiBvZiBhIHJ1biDigJQgd2hvIG5lc3RzIGluc2lkZSB3aG9tLFxuICogICB3aGljaCBub2RlcyBhcmUgcGFyYWxsZWwgc2libGluZ3MgdnMgYnJhbmNoZXMgb2YgYSBkZWNpc2lvbiDigJQgaXMgb25seVxuICogICB2aXNpYmxlIHBvc3QtcnVuIHZpYSBgZXhlY3V0b3IuZ2V0U25hcHNob3QoKWAgdHJlZS13YWxraW5nLlxuICpcbiAqICAgU3RyZWFtaW5nIGNvbnN1bWVycyAobGl2ZSBVSXMsIGluLWZsaWdodCBkZWJ1Z2dlcnMpIHNlZSBvbmx5IHRoZSBldmVudFxuICogICBzdHJlYW0uIEV2ZXJ5IHN1Y2ggY29uc3VtZXIgaGFzIHRvIHJlYnVpbGQgc3ViZmxvdy1zdGFjayArIGZvcmstbWFwICtcbiAqICAgZGVjaXNpb24tdHJhY2tlciBmcm9tIHNjcmF0Y2gsIHVzdWFsbHkgc2xpZ2h0bHkgd3JvbmcgaW4gZGlmZmVyZW50IHdheXMuXG4gKlxuICogICBUb3BvbG9neVJlY29yZGVyIGlzIHRoZSBzdGFuZGFyZCBhY2N1bXVsYXRvcjogb25lIHN1YnNjcmlwdGlvbiB0byB0aGVcbiAqICAgdGhyZWUgcHJpbWl0aXZlIGNoYW5uZWxzLCBvbmUgbGl2ZSBncmFwaCwgcXVlcnlhYmxlIGF0IGFueSBtb21lbnQgZHVyaW5nXG4gKiAgIG9yIGFmdGVyIGEgcnVuLlxuICpcbiAqIFdoYXQgaXQgcmVjb3JkcyDigJQgVEhSRUUgbm9kZSBraW5kcyBmb3IgY29tcGxldGUgY29tcG9zaXRpb24gY292ZXJhZ2U6XG4gKiAgIDEuICdzdWJmbG93JyAgICAgICAgICDigJQgdmlhIG9uU3ViZmxvd0VudHJ5IChhIG1vdW50ZWQgc3ViZmxvdyBib3VuZGFyeSlcbiAqICAgMi4gJ2ZvcmstYnJhbmNoJyAgICAgIOKAlCB2aWEgb25Gb3JrIChvbmUgbm9kZSBwZXIgY2hpbGQsIHN5bnRoZXNpemVkKVxuICogICAzLiAnZGVjaXNpb24tYnJhbmNoJyAg4oCUIHZpYSBvbkRlY2lzaW9uICh0aGUgY2hvc2VuIGJyYW5jaCwgc3ludGhlc2l6ZWQpXG4gKlxuICogICBXaGVuIGEgZm9yay1icmFuY2ggb3IgZGVjaXNpb24tYnJhbmNoIHRhcmdldCBJUyBBTFNPIGEgc3ViZmxvdywgdGhlXG4gKiAgIHN1YnNlcXVlbnQgb25TdWJmbG93RW50cnkgY3JlYXRlcyBhIHN1YmZsb3cgQ0hJTEQgb2YgdGhlIHN5bnRoZXRpYyBub2RlLlxuICogICBUaGUgbGF5ZXJlZCBzaGFwZSBwcmVzZXJ2ZXMgYm90aCBcIndobyBicmFuY2hlZFwiIGFuZCBcIndoYXQgdGhlIGJyYW5jaCByYW4uXCJcbiAqXG4gKiAgIFBsYWluIHNlcXVlbnRpYWwgc3RhZ2VzIGFyZSBOT1Qgbm9kZXMg4oCUIHRoYXQncyBTdGFnZUNvbnRleHQncyBqb2IuXG4gKiAgIFRvcG9sb2d5IGlzIGEgZ3JhcGggb2YgY29udHJvbC1mbG93IGJyYW5jaGluZywgbm90IGEgZnVsbCBleGVjdXRpb24gdHJlZS5cbiAqXG4gKiBFZGdlczpcbiAqICAgT25lIGVkZ2UgcGVyIHRyYXZlcnNhbCB0cmFuc2l0aW9uIOKAlCBga2luZGAgbWF0Y2hlcyB0aGUgY2hpbGQnc1xuICogICBgaW5jb21pbmdLaW5kYC4gQSBjb25zdW1lciByZW5kZXJpbmcgXCJwYXJhbGxlbCBjb2x1bW5zXCIgZmlsdGVycyBlZGdlc1xuICogICB3aGVyZSBga2luZCA9PT0gJ2ZvcmstYnJhbmNoJ2Agc2hhcmluZyB0aGUgc2FtZSBgZnJvbWAuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IHRvcG9sb2d5UmVjb3JkZXIgfSBmcm9tICdmb290cHJpbnRqcy90cmFjZSc7XG4gKlxuICogY29uc3QgdG9wbyA9IHRvcG9sb2d5UmVjb3JkZXIoKTtcbiAqIGV4ZWN1dG9yLmF0dGFjaENvbWJpbmVkUmVjb3JkZXIodG9wbyk7ICAvLyBhdXRvLXJvdXRlcyB0byBGbG93UmVjb3JkZXIgY2hhbm5lbFxuICpcbiAqIGF3YWl0IGV4ZWN1dG9yLnJ1bigpO1xuICpcbiAqIGNvbnN0IHsgbm9kZXMsIGVkZ2VzLCBhY3RpdmVOb2RlSWQsIHJvb3RJZCB9ID0gdG9wby5nZXRUb3BvbG9neSgpO1xuICogLy8gQ29uc3VtZXIgcXVlcmllczpcbiAqIHRvcG8uZ2V0Q2hpbGRyZW4oJ3NmLXBhcmVudCcpOyAgICAgICAgICAgICAgLy8gZGlyZWN0IGNoaWxkcmVuIChhbnkga2luZClcbiAqIHRvcG8uZ2V0QnlLaW5kKCdmb3JrLWJyYW5jaCcpOyAgICAgICAgICAgICAgLy8gYWxsIHBhcmFsbGVsIGJyYW5jaGVzXG4gKiB0b3BvLmdldFN1YmZsb3dOb2RlcygpOyAgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgbW91bnRlZCBzdWJmbG93c1xuICogYGBgXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBGbG93RGVjaXNpb25FdmVudCxcbiAgRmxvd0ZvcmtFdmVudCxcbiAgRmxvd0xvb3BFdmVudCxcbiAgRmxvd1JlY29yZGVyLFxuICBGbG93U3ViZmxvd0V2ZW50LFxufSBmcm9tICcuLi9lbmdpbmUvbmFycmF0aXZlL3R5cGVzLmpzJztcblxuLyoqIFRoZSBraW5kIG9mIGNvbXBvc2l0aW9uIHVuaXQgYSBub2RlIHJlcHJlc2VudHMuICovXG5leHBvcnQgdHlwZSBUb3BvbG9neU5vZGVLaW5kID0gJ3N1YmZsb3cnIHwgJ2ZvcmstYnJhbmNoJyB8ICdkZWNpc2lvbi1icmFuY2gnO1xuXG4vKiogSG93IHRoZSB0cmF2ZXJzYWwgcmVhY2hlZCB0aGlzIG5vZGUg4oCUIGRyaXZlcyBjb25zdW1lciBsYXlvdXQgZGVjaXNpb25zLiAqL1xuZXhwb3J0IHR5cGUgVG9wb2xvZ3lJbmNvbWluZ0tpbmQgPSAncm9vdCcgfCAnbmV4dCcgfCAnZm9yay1icmFuY2gnIHwgJ2RlY2lzaW9uLWJyYW5jaCcgfCAnbG9vcC1pdGVyYXRpb24nO1xuXG4vKiogQSBjb21wb3NpdGlvbi1zaWduaWZpY2FudCBwb2ludCBpbiB0aGUgZ3JhcGguICovXG5leHBvcnQgaW50ZXJmYWNlIFRvcG9sb2d5Tm9kZSB7XG4gIC8qKiBVbmlxdWUgaWQuIFN1YmZsb3dzIHVzZSB0aGVpciBzdWJmbG93SWQgKHdpdGggYCNuYCBzdWZmaXggb24gcmUtZW50cnkpLlxuICAgKiAgU3ludGhldGljIG5vZGVzIChmb3JrLWJyYW5jaCAvIGRlY2lzaW9uLWJyYW5jaCkgdXNlXG4gICAqICBgZm9yay0ke3J1bnRpbWVTdGFnZUlkfS0ke2l9YCAvIGBkZWNpc2lvbi0ke3J1bnRpbWVTdGFnZUlkfWAgZm9ybS4gKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgLyoqIFdoYXQgdGhpcyBub2RlIHJlcHJlc2VudHMuICovXG4gIHJlYWRvbmx5IGtpbmQ6IFRvcG9sb2d5Tm9kZUtpbmQ7XG4gIC8qKiBEaXNwbGF5IG5hbWUuIEZvciBzdWJmbG93czogYEZsb3dTdWJmbG93RXZlbnQubmFtZWAuIEZvciBmb3JrLWJyYW5jaGVzOlxuICAgKiAgdGhlIGNoaWxkIG5hbWUgZnJvbSBgRmxvd0ZvcmtFdmVudC5jaGlsZHJlbmAuIEZvciBkZWNpc2lvbi1icmFuY2hlczpcbiAgICogIHRoZSBjaG9zZW4gbmFtZSBmcm9tIGBGbG93RGVjaXNpb25FdmVudC5jaG9zZW5gLiAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKiBQYXJlbnQgbm9kZSBpZC4gVW5kZWZpbmVkIHdoZW4gdGhpcyBub2RlIHNpdHMgYXQgdGhlIHJ1bidzIHRvcCBsZXZlbC4gKi9cbiAgcmVhZG9ubHkgcGFyZW50SWQ/OiBzdHJpbmc7XG4gIC8qKiBEZXB0aCBpbiB0aGUgdG9wb2xvZ3kgdHJlZSAoMCA9IHRvcC1sZXZlbCkuICovXG4gIHJlYWRvbmx5IGRlcHRoOiBudW1iZXI7XG4gIC8qKiBIb3cgdGhlIHRyYXZlcnNhbCByZWFjaGVkIHRoaXMgbm9kZS4gKi9cbiAgcmVhZG9ubHkgaW5jb21pbmdLaW5kOiBUb3BvbG9neUluY29taW5nS2luZDtcbiAgLyoqIHJ1bnRpbWVTdGFnZUlkIGF0IHRoZSBtb21lbnQgdGhlIG5vZGUgd2FzIGNyZWF0ZWQuICovXG4gIHJlYWRvbmx5IGVudGVyZWRBdDogc3RyaW5nO1xuICAvKiogcnVudGltZVN0YWdlSWQgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBzdWJmbG93IGV4aXRlZC4gT25seSBtZWFuaW5nZnVsXG4gICAqICBmb3Iga2luZD0nc3ViZmxvdyc7IGZvcmsvZGVjaXNpb24tYnJhbmNoIG5vZGVzIGFyZSBpbnN0YW50YW5lb3VzLiAqL1xuICBleGl0ZWRBdD86IHN0cmluZztcbiAgLyoqIEtpbmQtc3BlY2lmaWMgZXh0cmFzOiBmb3JrUGFyZW50LCBkZWNpZGVyLCByYXRpb25hbGUsIGRlc2NyaXB0aW9uLiAqL1xuICByZWFkb25seSBtZXRhZGF0YT86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pjtcbn1cblxuLyoqIEEgdHJhdmVyc2FsIHRyYW5zaXRpb24gYmV0d2VlbiB0d28gbm9kZXMuICovXG5leHBvcnQgaW50ZXJmYWNlIFRvcG9sb2d5RWRnZSB7XG4gIHJlYWRvbmx5IGZyb206IHN0cmluZztcbiAgcmVhZG9ubHkgdG86IHN0cmluZztcbiAgcmVhZG9ubHkga2luZDogRXhjbHVkZTxUb3BvbG9neUluY29taW5nS2luZCwgJ3Jvb3QnPjtcbiAgcmVhZG9ubHkgYXQ6IHN0cmluZztcbn1cblxuLyoqIFNuYXBzaG90IG9mIHRoZSBjb21wb3NpdGlvbiBncmFwaC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVG9wb2xvZ3kge1xuICByZWFkb25seSBub2RlczogUmVhZG9ubHlBcnJheTxUb3BvbG9neU5vZGU+O1xuICByZWFkb25seSBlZGdlczogUmVhZG9ubHlBcnJheTxUb3BvbG9neUVkZ2U+O1xuICAvKiogQ3VycmVudGx5LWFjdGl2ZSBzdWJmbG93ICh0b3Agb2YgdGhlIHN1YmZsb3cgc3RhY2spLiBGb3JrLWJyYW5jaCBhbmRcbiAgICogIGRlY2lzaW9uLWJyYW5jaCBub2RlcyBhcmUgaW5zdGFudGFuZW91cyDigJQgdGhleSBkb24ndCBhZmZlY3QgYWN0aXZlTm9kZUlkLiAqL1xuICByZWFkb25seSBhY3RpdmVOb2RlSWQ6IHN0cmluZyB8IG51bGw7XG4gIC8qKiBGaXJzdCBub2RlIGluc2VydGVkLiBudWxsIGJlZm9yZSBhbnkgY29tcG9zaXRpb24gZXZlbnQgZmlyZXMuICovXG4gIHJlYWRvbmx5IHJvb3RJZDogc3RyaW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUb3BvbG9neVJlY29yZGVyT3B0aW9ucyB7XG4gIC8qKiBSZWNvcmRlciBpZC4gRGVmYXVsdHMgdG8gYHRvcG9sb2d5LU5gIChhdXRvLWluY3JlbWVudGVkKS4gKi9cbiAgaWQ/OiBzdHJpbmc7XG59XG5cbi8vIENvcnJlbGF0aW9uIHN0YXRlOiBtYXBzIGEgcGVuZGluZyBmb3JrL2RlY2lzaW9uIGNoaWxkIG5hbWUgdG8gaXRzIHN5bnRoZXRpY1xuLy8gbm9kZSBpZCwgc28gYSBzdWJzZXF1ZW50IG9uU3ViZmxvd0VudHJ5IG1hdGNoaW5nIHRoYXQgbmFtZSBjYW4gYmUgbmVzdGVkXG4vLyB1bmRlciB0aGUgc3ludGhldGljIG5vZGUgKHJhdGhlciB0aGFuIGNyZWF0aW5nIGEgcGVlcikuXG5pbnRlcmZhY2UgUGVuZGluZ0NoaWxkIHtcbiAgbm9kZUlkOiBzdHJpbmc7XG4gIGF0OiBzdHJpbmc7XG59XG5cbmxldCBfY291bnRlciA9IDA7XG5cbi8qKlxuICogRmFjdG9yeSDigJQgbWF0Y2hlcyB0aGUgYG5hcnJhdGl2ZSgpYCAvIGBtZXRyaWNzKClgIHN0eWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9wb2xvZ3lSZWNvcmRlcihvcHRpb25zOiBUb3BvbG9neVJlY29yZGVyT3B0aW9ucyA9IHt9KTogVG9wb2xvZ3lSZWNvcmRlciB7XG4gIHJldHVybiBuZXcgVG9wb2xvZ3lSZWNvcmRlcihvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBTdGF0ZWZ1bCBhY2N1bXVsYXRvciB0aGF0IHdhdGNoZXMgRmxvd1JlY29yZGVyIGV2ZW50cyBhbmQgbWFpbnRhaW5zIGEgbGl2ZVxuICogY29tcG9zaXRpb24gZ3JhcGguIEF0dGFjaCB2aWEgYGV4ZWN1dG9yLmF0dGFjaENvbWJpbmVkUmVjb3JkZXIocmVjb3JkZXIpYCDigJRcbiAqIGZvb3RwcmludGpzIGRldGVjdHMgdGhlIGBGbG93UmVjb3JkZXJgIG1ldGhvZCBzaGFwZSBhbmQgcm91dGVzIGV2ZW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFRvcG9sb2d5UmVjb3JkZXIgaW1wbGVtZW50cyBGbG93UmVjb3JkZXIge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbm9kZXNCeUlkID0gbmV3IE1hcDxzdHJpbmcsIFRvcG9sb2d5Tm9kZT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBub2RlT3JkZXI6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgZWRnZXM6IFRvcG9sb2d5RWRnZVtdID0gW107XG4gIC8qKiBTdGFjayBvZiBhY3RpdmUgU1VCRkxPVyBub2RlIGlkcy4gRm9yay9kZWNpc2lvbi1icmFuY2ggbm9kZXMgbmV2ZXIgcHVzaC4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBzdWJmbG93U3RhY2s6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqIE1hcCBvZiBjaGlsZE5hbWUg4oaSIHBlbmRpbmcgZm9yay1icmFuY2ggc3ludGhldGljIG5vZGUsIGNvbnN1bWVkIGJ5XG4gICAqICB0aGUgbmV4dCBtYXRjaGluZyBgb25TdWJmbG93RW50cnlgLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHBlbmRpbmdGb3JrQnlOYW1lID0gbmV3IE1hcDxzdHJpbmcsIFBlbmRpbmdDaGlsZD4oKTtcbiAgLyoqIFBlbmRpbmcgZGVjaXNpb24tYnJhbmNoIHN5bnRoZXRpYyBub2RlLCBjb25zdW1lZCBieSBhIG1hdGNoaW5nIGVudHJ5LiAqL1xuICBwcml2YXRlIHBlbmRpbmdEZWNpc2lvbj86IHsgbmFtZTogc3RyaW5nIH0gJiBQZW5kaW5nQ2hpbGQ7XG4gIC8qKlxuICAgKiBUaGUgcHJldmlvdXMgc3ViZmxvdyB0aGF0IGp1c3QgZmluaXNoZWQsIGtleWVkIGJ5IHNjb3BlIChwYXJlbnRJZCxcbiAgICogb3IgJycgZm9yIHJvb3QpLiBXaGVuIGEgbmV3IHN1YmZsb3cgZW50ZXJzIGluIHRoZSBzYW1lIHNjb3BlIHZpYVxuICAgKiB0aGUgbm9ybWFsIG5leHQtY2hhaW5lZCBwYXRoIChub3QgZm9yay9kZWNpc2lvbiksIHdlIGVtaXQgYSBgbmV4dGBcbiAgICogZWRnZSBmcm9tIHRoZSBwcmV2aW91cyBzdWJmbG93IHRvIHRoZSBuZXcgb25lIOKAlCBtYXRjaGluZyBob3cgdGhlXG4gICAqIGJ1aWxkZXIgYWN0dWFsbHkgd2lyZWQgdGhlbTogYC5hZGRTdWJGbG93Q2hhcnROZXh0KEEpLmFkZFN1YkZsb3dDaGFydE5leHQoQilgXG4gICAqIG1lYW5zIEEg4oaSIEIsIG9uZSBhZnRlciB0aGUgb3RoZXIuXG4gICAqXG4gICAqIFdpdGhvdXQgdGhpcywgY29uc3VtZXJzIG9ubHkgc2VlIHBhcmVudOKGkmNoaWxkIGVkZ2VzIChBLCBCLCBDIGFsbFxuICAgKiBjaGlsZHJlbiBvZiB0aGVpciBjb21tb24gYW5jZXN0b3IpIHdpdGggbm8gcmVjb3JkIG9mIHRoZSBhY3R1YWxcbiAgICogQSDihpIgQiDihpIgQyBzZXF1ZW50aWFsIGNoYWluIHRoYXQgcmFuIOKAlCB3aGljaCBpcyBleGFjdGx5IHdoYXRcbiAgICogVG9wb2xvZ3lSZWNvcmRlciBpcyBzdXBwb3NlZCB0byBleHBvc2UuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHByZXZpb3VzU3ViZmxvd0luU2NvcGUgPSBuZXcgTWFwPHN0cmluZywgeyBub2RlSWQ6IHN0cmluZzsgZXhpdGVkQXQ6IHN0cmluZyB9PigpO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IFRvcG9sb2d5UmVjb3JkZXJPcHRpb25zID0ge30pIHtcbiAgICB0aGlzLmlkID0gb3B0aW9ucy5pZCA/PyBgdG9wb2xvZ3ktJHsrK19jb3VudGVyfWA7XG4gIH1cblxuICAvLyDilIDilIAgRmxvd1JlY29yZGVyIGhvb2tzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIG9uU3ViZmxvd0VudHJ5KGV2ZW50OiBGbG93U3ViZmxvd0V2ZW50KTogdm9pZCB7XG4gICAgY29uc3Qgc3ViZmxvd0lkID0gZXZlbnQuc3ViZmxvd0lkO1xuICAgIGlmICghc3ViZmxvd0lkKSByZXR1cm47IC8vIE5lZWQgYSBzdGFibGUgaWQgdG8gdHJhY2suXG5cbiAgICBjb25zdCBlbnRlcmVkQXQgPSBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5ydW50aW1lU3RhZ2VJZCA/PyAnJztcblxuICAgIC8vIERldGVybWluZSB0aGUgcGFyZW50OiBwcmVmZXIgYSBwZW5kaW5nIGZvcmsvZGVjaXNpb24gbWF0Y2ggYnkgbmFtZSxcbiAgICAvLyBvdGhlcndpc2UgdGhlIGN1cnJlbnQgdG9wLW9mLXN1YmZsb3ctc3RhY2suXG4gICAgbGV0IHBhcmVudElkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGluY29taW5nS2luZDogVG9wb2xvZ3lJbmNvbWluZ0tpbmQ7XG5cbiAgICBjb25zdCBwZW5kaW5nRm9yayA9IHRoaXMucGVuZGluZ0ZvcmtCeU5hbWUuZ2V0KGV2ZW50Lm5hbWUpO1xuICAgIGlmIChwZW5kaW5nRm9yaykge1xuICAgICAgcGFyZW50SWQgPSBwZW5kaW5nRm9yay5ub2RlSWQ7XG4gICAgICBpbmNvbWluZ0tpbmQgPSAnbmV4dCc7IC8vIENoaWxkIE9GIGEgZm9yay1icmFuY2ggbm9kZTsgdGhlIGZvcmsgc2VtYW50aWNcbiAgICAgIC8vIGlzIGNhcHR1cmVkIGJ5IHRoZSBmb3JrLWJyYW5jaCdzIG93biBpbmNvbWluZ0tpbmQuXG4gICAgICB0aGlzLnBlbmRpbmdGb3JrQnlOYW1lLmRlbGV0ZShldmVudC5uYW1lKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucGVuZGluZ0RlY2lzaW9uICYmIHRoaXMucGVuZGluZ0RlY2lzaW9uLm5hbWUgPT09IGV2ZW50Lm5hbWUpIHtcbiAgICAgIHBhcmVudElkID0gdGhpcy5wZW5kaW5nRGVjaXNpb24ubm9kZUlkO1xuICAgICAgaW5jb21pbmdLaW5kID0gJ25leHQnO1xuICAgICAgdGhpcy5wZW5kaW5nRGVjaXNpb24gPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmVudElkID0gdGhpcy5zdWJmbG93U3RhY2tbdGhpcy5zdWJmbG93U3RhY2subGVuZ3RoIC0gMV07XG4gICAgICBpbmNvbWluZ0tpbmQgPSBwYXJlbnRJZCA/ICduZXh0JyA6ICdyb290JztcbiAgICB9XG5cbiAgICAvLyBEaXNhbWJpZ3VhdGUgcmUtZW50cnkgKGUuZy4sIGxvb3AgYm9keSByZS1lbnRlcnMgdGhlIHNhbWUgc3ViZmxvdykuXG4gICAgbGV0IG5vZGVJZCA9IHN1YmZsb3dJZDtcbiAgICBpZiAodGhpcy5ub2Rlc0J5SWQuaGFzKG5vZGVJZCkpIHtcbiAgICAgIGxldCBuID0gMTtcbiAgICAgIHdoaWxlICh0aGlzLm5vZGVzQnlJZC5oYXMoYCR7c3ViZmxvd0lkfSMke259YCkpIG4rKztcbiAgICAgIG5vZGVJZCA9IGAke3N1YmZsb3dJZH0jJHtufWA7XG4gICAgfVxuXG4gICAgY29uc3QgZGVwdGggPSBwYXJlbnRJZCA/IHRoaXMubm9kZXNCeUlkLmdldChwYXJlbnRJZCkhLmRlcHRoICsgMSA6IDA7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBldmVudC5kZXNjcmlwdGlvbiA/IHsgZGVzY3JpcHRpb246IGV2ZW50LmRlc2NyaXB0aW9uIH0gOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBub2RlOiBUb3BvbG9neU5vZGUgPSB7XG4gICAgICBpZDogbm9kZUlkLFxuICAgICAga2luZDogJ3N1YmZsb3cnLFxuICAgICAgbmFtZTogZXZlbnQubmFtZSxcbiAgICAgIHBhcmVudElkLFxuICAgICAgZGVwdGgsXG4gICAgICBpbmNvbWluZ0tpbmQsXG4gICAgICBlbnRlcmVkQXQsXG4gICAgICBtZXRhZGF0YSxcbiAgICB9O1xuICAgIHRoaXMubm9kZXNCeUlkLnNldChub2RlSWQsIG5vZGUpO1xuICAgIHRoaXMubm9kZU9yZGVyLnB1c2gobm9kZUlkKTtcblxuICAgIGlmIChwYXJlbnRJZCAmJiBpbmNvbWluZ0tpbmQgIT09ICdyb290Jykge1xuICAgICAgdGhpcy5lZGdlcy5wdXNoKHtcbiAgICAgICAgZnJvbTogcGFyZW50SWQsXG4gICAgICAgIHRvOiBub2RlSWQsXG4gICAgICAgIGtpbmQ6IGluY29taW5nS2luZCxcbiAgICAgICAgYXQ6IGVudGVyZWRBdCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIE5leHQtY2hhaW5lZCBlZGdlIGZyb20gdGhlIFBSRVZJT1VTIHN1YmZsb3cgaW4gdGhpcyBzY29wZS5cbiAgICAvL1xuICAgIC8vIGAuYWRkU3ViRmxvd0NoYXJ0TmV4dChBKS5hZGRTdWJGbG93Q2hhcnROZXh0KEIpLmFkZFN1YkZsb3dDaGFydE5leHQoQylgXG4gICAgLy8gcnVucyBhczogQSBlbnRlcnMg4oaSIEEgZXhpdHMg4oaSIEIgZW50ZXJzIOKGkiBCIGV4aXRzIOKGkiBDIGVudGVycy4gQXRcbiAgICAvLyBCJ3MgZW50cnkgdGhlIHN0YWNrIGhhcyByZXR1cm5lZCB0byB0aGUgc2NvcGUgaXQgd2FzIGluIGJlZm9yZSBBXG4gICAgLy8gZW50ZXJlZCAocm9vdCwgb3IgdGhlIHNoYXJlZCBhbmNlc3RvcikuIFdpdGhvdXQgdGhpcyBlZGdlIHdlJ2RcbiAgICAvLyBzZWUgbm9kZXMge0EsIEIsIEN9IGJ1dCBubyByZWNvcmQgdGhhdCBBIHJhbiBCRUZPUkUgQiB3aGljaCByYW5cbiAgICAvLyBCRUZPUkUgQyDigJQgYW5kIGRvd25zdHJlYW0gY29uc3VtZXJzIHdvdWxkIGhhdmUgdG8gcmVjb25zdHJ1Y3RcbiAgICAvLyBzZXF1ZW50aWFsIG9yZGVyaW5nIHRoZW1zZWx2ZXMuXG4gICAgLy9cbiAgICAvLyBPbmx5IGVtaXQgb24gdGhlIHJlZ3VsYXItZW50cnkgcGF0aC4gRm9yay9kZWNpc2lvbiBlbnRyaWVzIGhhdmVcbiAgICAvLyB0aGVpciBvd24gZWRnZSBtZWNoYW5pY3MgKHBhcmVudOKGkmZvcmstYnJhbmNoLCBwYXJlbnTihpJkZWNpc2lvbi1cbiAgICAvLyBicmFuY2gpIHRoYXQgY2FycnkgdGhlIGJyYW5jaGluZyBzZW1hbnRpY3MuXG4gICAgaWYgKGluY29taW5nS2luZCA9PT0gJ25leHQnIHx8IGluY29taW5nS2luZCA9PT0gJ3Jvb3QnKSB7XG4gICAgICBjb25zdCBzY29wZUtleSA9IHBhcmVudElkID8/ICcnO1xuICAgICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLnByZXZpb3VzU3ViZmxvd0luU2NvcGUuZ2V0KHNjb3BlS2V5KTtcbiAgICAgIGlmIChwcmV2aW91cykge1xuICAgICAgICB0aGlzLmVkZ2VzLnB1c2goe1xuICAgICAgICAgIGZyb206IHByZXZpb3VzLm5vZGVJZCxcbiAgICAgICAgICB0bzogbm9kZUlkLFxuICAgICAgICAgIGtpbmQ6ICduZXh0JyxcbiAgICAgICAgICBhdDogZW50ZXJlZEF0LFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5wcmV2aW91c1N1YmZsb3dJblNjb3BlLmRlbGV0ZShzY29wZUtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zdWJmbG93U3RhY2sucHVzaChub2RlSWQpO1xuICB9XG5cbiAgb25TdWJmbG93RXhpdChldmVudDogRmxvd1N1YmZsb3dFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IG5vZGVJZCA9IHRoaXMuc3ViZmxvd1N0YWNrLnBvcCgpO1xuICAgIGlmICghbm9kZUlkKSByZXR1cm47XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMubm9kZXNCeUlkLmdldChub2RlSWQpO1xuICAgIGNvbnN0IGV4aXRlZEF0ID0gZXZlbnQudHJhdmVyc2FsQ29udGV4dD8ucnVudGltZVN0YWdlSWQgPz8gJyc7XG4gICAgaWYgKG5vZGUpIHtcbiAgICAgIG5vZGUuZXhpdGVkQXQgPSBleGl0ZWRBdDtcbiAgICAgIC8vIFJlbWVtYmVyIHRoaXMgbm9kZSBhcyB0aGUgXCJwcmV2aW91cyBzdWJmbG93XCIgaW4gaXRzIHNjb3BlLlxuICAgICAgLy8gV2hhdGV2ZXIgc3ViZmxvdyBlbnRlcnMgTkVYVCBpbiB0aGUgc2FtZSBzY29wZSAobm9ybWFsLWVudHJ5XG4gICAgICAvLyBwYXRoLCBub3QgZm9yay9kZWNpc2lvbikgZ2V0cyBhIGBuZXh0YCBlZGdlIGRyYXduIGZyb20gaGVyZVxuICAgICAgLy8g4oCUIHRoaXMgaXMgdGhlIHJlYWwgc2VxdWVudGlhbCBBIOKGkiBCIHRyYW5zaXRpb24gdGhhdCB0aGVcbiAgICAgIC8vIGAuYWRkU3ViRmxvd0NoYXJ0TmV4dCgpYCBidWlsZGVyIHByb2R1Y2VkLlxuICAgICAgY29uc3Qgc2NvcGVLZXkgPSBub2RlLnBhcmVudElkID8/ICcnO1xuICAgICAgdGhpcy5wcmV2aW91c1N1YmZsb3dJblNjb3BlLnNldChzY29wZUtleSwgeyBub2RlSWQsIGV4aXRlZEF0IH0pO1xuICAgIH1cbiAgICAvLyBDbGVhciBwZW5kaW5nRGVjaXNpb24gb24gZXhpdCDigJQgYSBkZWNpc2lvbiBpZGVudGlmaWVzIGV4YWN0bHkgT05FXG4gICAgLy8gdGFyZ2V0LiBJZiB0aGUgY2hvc2VuIGdvZXMgdG8gYSBwbGFpbiBzdGFnZSAobm90IGEgc3ViZmxvdyksIHRoZVxuICAgIC8vIHBlbmRpbmcgZW50cnkgd291bGQgb3RoZXJ3aXNlIGxpbmdlciBhbmQgZmFsc2VseSBtYXRjaCBhblxuICAgIC8vIHVucmVsYXRlZCBzdWJmbG93IGxhdGVyIGluIGEgZGlmZmVyZW50IHNjb3BlLlxuICAgIHRoaXMucGVuZGluZ0RlY2lzaW9uID0gdW5kZWZpbmVkO1xuICAgIC8vIERlbGliZXJhdGVseSBOT1QgY2xlYXJpbmcgcGVuZGluZ0ZvcmtCeU5hbWUg4oCUIGZvcmsgc2libGluZ3MgbmVlZFxuICAgIC8vIHRoZWlyIHBlbmRpbmcgZW50cmllcyB0byBzdXJ2aXZlIHNjb3BlIGV4aXRzIG9mIGVhcmxpZXIgc2libGluZ3NcbiAgICAvLyAoZS5nLiBBbHBoYSdzIGlubmVyIHNmLW1lc3NhZ2VzIGV4aXRzIGJlZm9yZSBCZXRhIGVudGVycykuIEZvcmtcbiAgICAvLyBwZW5kaW5nIGVudHJpZXMgYXJlIGNsZWFyZWQgb24gbmV3IGBvbkZvcmtgIG9yIGNvbnN1bWVkIG9uIG1hdGNoLlxuICB9XG5cbiAgb25Gb3JrKGV2ZW50OiBGbG93Rm9ya0V2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgYWN0aXZlSWQgPSB0aGlzLnN1YmZsb3dTdGFja1t0aGlzLnN1YmZsb3dTdGFjay5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBhdCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkID8/ICcnO1xuICAgIGNvbnN0IGRlcHRoID0gYWN0aXZlSWQgPyB0aGlzLm5vZGVzQnlJZC5nZXQoYWN0aXZlSWQpIS5kZXB0aCArIDEgOiAwO1xuXG4gICAgLy8gUmVzZXQgYW55IHByaW9yIHBlbmRpbmcgZm9yayBzdGF0ZSDigJQgYSBuZXcgZm9yayBzdGFydHMgZnJlc2guXG4gICAgdGhpcy5wZW5kaW5nRm9ya0J5TmFtZS5jbGVhcigpO1xuXG4gICAgZXZlbnQuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGROYW1lLCBpKSA9PiB7XG4gICAgICBjb25zdCBub2RlSWQgPSBgZm9yay0ke2F0IHx8IGV2ZW50LnBhcmVudH0tJHtpfS0ke2NoaWxkTmFtZX1gO1xuICAgICAgY29uc3Qgbm9kZTogVG9wb2xvZ3lOb2RlID0ge1xuICAgICAgICBpZDogbm9kZUlkLFxuICAgICAgICBraW5kOiAnZm9yay1icmFuY2gnLFxuICAgICAgICBuYW1lOiBjaGlsZE5hbWUsXG4gICAgICAgIHBhcmVudElkOiBhY3RpdmVJZCxcbiAgICAgICAgZGVwdGgsXG4gICAgICAgIGluY29taW5nS2luZDogJ2ZvcmstYnJhbmNoJyxcbiAgICAgICAgZW50ZXJlZEF0OiBhdCxcbiAgICAgICAgbWV0YWRhdGE6IHsgZm9ya1BhcmVudDogZXZlbnQucGFyZW50IH0sXG4gICAgICB9O1xuICAgICAgdGhpcy5ub2Rlc0J5SWQuc2V0KG5vZGVJZCwgbm9kZSk7XG4gICAgICB0aGlzLm5vZGVPcmRlci5wdXNoKG5vZGVJZCk7XG4gICAgICBpZiAoYWN0aXZlSWQpIHtcbiAgICAgICAgdGhpcy5lZGdlcy5wdXNoKHsgZnJvbTogYWN0aXZlSWQsIHRvOiBub2RlSWQsIGtpbmQ6ICdmb3JrLWJyYW5jaCcsIGF0IH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5wZW5kaW5nRm9ya0J5TmFtZS5zZXQoY2hpbGROYW1lLCB7IG5vZGVJZCwgYXQgfSk7XG4gICAgfSk7XG4gIH1cblxuICBvbkRlY2lzaW9uKGV2ZW50OiBGbG93RGVjaXNpb25FdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGFjdGl2ZUlkID0gdGhpcy5zdWJmbG93U3RhY2tbdGhpcy5zdWJmbG93U3RhY2subGVuZ3RoIC0gMV07XG4gICAgY29uc3QgYXQgPSBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5ydW50aW1lU3RhZ2VJZCA/PyAnJztcbiAgICBjb25zdCBkZXB0aCA9IGFjdGl2ZUlkID8gdGhpcy5ub2Rlc0J5SWQuZ2V0KGFjdGl2ZUlkKSEuZGVwdGggKyAxIDogMDtcblxuICAgIC8vIEEgbmV3IGRlY2lzaW9uIHN1cGVyc2VkZXMgYW55IHByaW9yIHVucmVzb2x2ZWQgcGVuZGluZyBvbmUuXG4gICAgdGhpcy5wZW5kaW5nRGVjaXNpb24gPSB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBub2RlSWQgPSBgZGVjaXNpb24tJHthdCB8fCBldmVudC5kZWNpZGVyfS0ke2V2ZW50LmNob3Nlbn1gO1xuICAgIGNvbnN0IG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsgZGVjaWRlcjogZXZlbnQuZGVjaWRlciB9O1xuICAgIGlmIChldmVudC5yYXRpb25hbGUpIG1ldGFkYXRhLnJhdGlvbmFsZSA9IGV2ZW50LnJhdGlvbmFsZTtcbiAgICBpZiAoZXZlbnQuZGVzY3JpcHRpb24pIG1ldGFkYXRhLmRlc2NyaXB0aW9uID0gZXZlbnQuZGVzY3JpcHRpb247XG5cbiAgICBjb25zdCBub2RlOiBUb3BvbG9neU5vZGUgPSB7XG4gICAgICBpZDogbm9kZUlkLFxuICAgICAga2luZDogJ2RlY2lzaW9uLWJyYW5jaCcsXG4gICAgICBuYW1lOiBldmVudC5jaG9zZW4sXG4gICAgICBwYXJlbnRJZDogYWN0aXZlSWQsXG4gICAgICBkZXB0aCxcbiAgICAgIGluY29taW5nS2luZDogJ2RlY2lzaW9uLWJyYW5jaCcsXG4gICAgICBlbnRlcmVkQXQ6IGF0LFxuICAgICAgbWV0YWRhdGEsXG4gICAgfTtcbiAgICB0aGlzLm5vZGVzQnlJZC5zZXQobm9kZUlkLCBub2RlKTtcbiAgICB0aGlzLm5vZGVPcmRlci5wdXNoKG5vZGVJZCk7XG4gICAgaWYgKGFjdGl2ZUlkKSB7XG4gICAgICB0aGlzLmVkZ2VzLnB1c2goeyBmcm9tOiBhY3RpdmVJZCwgdG86IG5vZGVJZCwga2luZDogJ2RlY2lzaW9uLWJyYW5jaCcsIGF0IH0pO1xuICAgIH1cbiAgICB0aGlzLnBlbmRpbmdEZWNpc2lvbiA9IHsgbmFtZTogZXZlbnQuY2hvc2VuLCBub2RlSWQsIGF0IH07XG4gIH1cblxuICBvbkxvb3AoZXZlbnQ6IEZsb3dMb29wRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBsb29wVG8ganVtcHMgYmFjayBpbnNpZGUgdGhlIENVUlJFTlQgc3ViZmxvdy4gUmVjb3JkIGEgc2VsZi1lZGdlIG9uIHRoZVxuICAgIC8vIGFjdGl2ZSBzdWJmbG93IOKAlCBzeW50aGV0aWMgZm9yay9kZWNpc2lvbiBub2RlcyBkb24ndCBwYXJ0aWNpcGF0ZSBpbiBsb29wcy5cbiAgICBjb25zdCBhY3RpdmVJZCA9IHRoaXMuc3ViZmxvd1N0YWNrW3RoaXMuc3ViZmxvd1N0YWNrLmxlbmd0aCAtIDFdO1xuICAgIGlmICghYWN0aXZlSWQpIHJldHVybjtcbiAgICB0aGlzLmVkZ2VzLnB1c2goe1xuICAgICAgZnJvbTogYWN0aXZlSWQsXG4gICAgICB0bzogYWN0aXZlSWQsXG4gICAgICBraW5kOiAnbG9vcC1pdGVyYXRpb24nLFxuICAgICAgYXQ6IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkID8/ICcnLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIENhbGxlZCBieSB0aGUgZXhlY3V0b3IgYmVmb3JlIGVhY2ggYHJ1bigpYCDigJQgcmVzZXRzIGFsbCBzdGF0ZS4gKi9cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5ub2Rlc0J5SWQuY2xlYXIoKTtcbiAgICB0aGlzLm5vZGVPcmRlci5sZW5ndGggPSAwO1xuICAgIHRoaXMuZWRnZXMubGVuZ3RoID0gMDtcbiAgICB0aGlzLnN1YmZsb3dTdGFjay5sZW5ndGggPSAwO1xuICAgIHRoaXMucGVuZGluZ0ZvcmtCeU5hbWUuY2xlYXIoKTtcbiAgICB0aGlzLnByZXZpb3VzU3ViZmxvd0luU2NvcGUuY2xlYXIoKTtcbiAgICB0aGlzLnBlbmRpbmdEZWNpc2lvbiA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIOKUgOKUgCBRdWVyeSBBUEkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIExpdmUgc25hcHNob3Qgb2YgdGhlIGNvbXBvc2l0aW9uIGdyYXBoLiBTYWZlIGR1cmluZyBvciBhZnRlciBhIHJ1bi4gKi9cbiAgZ2V0VG9wb2xvZ3koKTogVG9wb2xvZ3kge1xuICAgIGNvbnN0IG5vZGVzID0gdGhpcy5ub2RlT3JkZXIubWFwKChpZCkgPT4gdGhpcy5ub2Rlc0J5SWQuZ2V0KGlkKSEpO1xuICAgIHJldHVybiB7XG4gICAgICBub2RlcyxcbiAgICAgIGVkZ2VzOiBbLi4udGhpcy5lZGdlc10sXG4gICAgICBhY3RpdmVOb2RlSWQ6IHRoaXMuc3ViZmxvd1N0YWNrW3RoaXMuc3ViZmxvd1N0YWNrLmxlbmd0aCAtIDFdID8/IG51bGwsXG4gICAgICByb290SWQ6IHRoaXMubm9kZU9yZGVyWzBdID8/IG51bGwsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBEaXJlY3QgY2hpbGRyZW4gb2YgYSBub2RlIOKAlCBpbnNlcnRpb24tb3JkZXJlZC4gKi9cbiAgZ2V0Q2hpbGRyZW4obm9kZUlkOiBzdHJpbmcpOiBUb3BvbG9neU5vZGVbXSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZU9yZGVyLm1hcCgoaWQpID0+IHRoaXMubm9kZXNCeUlkLmdldChpZCkhKS5maWx0ZXIoKG4pID0+IG4ucGFyZW50SWQgPT09IG5vZGVJZCk7XG4gIH1cblxuICAvKiogQWxsIG5vZGVzIG9mIGEgZ2l2ZW4ga2luZC4gKi9cbiAgZ2V0QnlLaW5kKGtpbmQ6IFRvcG9sb2d5Tm9kZUtpbmQpOiBUb3BvbG9neU5vZGVbXSB7XG4gICAgcmV0dXJuIHRoaXMubm9kZU9yZGVyLm1hcCgoaWQpID0+IHRoaXMubm9kZXNCeUlkLmdldChpZCkhKS5maWx0ZXIoKG4pID0+IG4ua2luZCA9PT0ga2luZCk7XG4gIH1cblxuICAvKiogQWxsIG1vdW50ZWQgc3ViZmxvdyBub2Rlcy4gQ29udmVuaWVuY2UgZm9yIGFnZW50LWNlbnRyaWMgdmlld3MuICovXG4gIGdldFN1YmZsb3dOb2RlcygpOiBUb3BvbG9neU5vZGVbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QnlLaW5kKCdzdWJmbG93Jyk7XG4gIH1cblxuICAvKiogQWxsIGZvcmstYnJhbmNoIG5vZGVzIHNoYXJpbmcgdGhlIHNhbWUgcGFyZW50IGFzIGBub2RlSWRgIOKAlCBpLmUuLFxuICAgKiAgcGFyYWxsZWwgc2libGluZ3Mgb2YgYSBwYXJhbGxlbCBicmFuY2guIEVtcHR5IGlmIGBub2RlSWRgIGlzbid0IGFcbiAgICogIGZvcmstYnJhbmNoIG9yIGhhcyBubyBwYXJlbnQuICovXG4gIGdldFBhcmFsbGVsU2libGluZ3Mobm9kZUlkOiBzdHJpbmcpOiBUb3BvbG9neU5vZGVbXSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMubm9kZXNCeUlkLmdldChub2RlSWQpO1xuICAgIGlmICghbm9kZSB8fCBub2RlLmtpbmQgIT09ICdmb3JrLWJyYW5jaCcgfHwgIW5vZGUucGFyZW50SWQpIHJldHVybiBbXTtcbiAgICByZXR1cm4gdGhpcy5nZXRDaGlsZHJlbihub2RlLnBhcmVudElkKS5maWx0ZXIoKG4pID0+IG4ua2luZCA9PT0gJ2ZvcmstYnJhbmNoJyk7XG4gIH1cblxuICAvKiogRW1pdCBhIHNuYXBzaG90IGJ1bmRsZSBmb3IgaW5jbHVzaW9uIGluIGBleGVjdXRvci5nZXRTbmFwc2hvdCgpYC4gKi9cbiAgdG9TbmFwc2hvdCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogJ1RvcG9sb2d5JyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQ29tcG9zaXRpb24gZ3JhcGg6IHN1YmZsb3cgYm91bmRhcmllcywgZm9yayBicmFuY2hlcywgZGVjaXNpb24gYnJhbmNoZXMnLFxuICAgICAgcHJlZmVycmVkT3BlcmF0aW9uOiAndHJhbnNsYXRlJyBhcyBjb25zdCxcbiAgICAgIGRhdGE6IHRoaXMuZ2V0VG9wb2xvZ3koKSxcbiAgICB9O1xuICB9XG59XG4iXX0=
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SequenceRecorder = exports.RecorderOperation = exports.KeyedRecorder = exports.CompositeRecorder = exports.isFlowEvent = exports.hasRecorderMethods = exports.hasFlowRecorderMethods = exports.hasEmitRecorderMethods = void 0;
|
|
3
|
+
exports.SequenceRecorder = exports.RecorderOperation = exports.KeyedRecorder = exports.CompositeRecorder = exports.isFlowEvent = exports.hasRecorderMethods = exports.hasFlowRecorderMethods = exports.hasEmitRecorderMethods = exports.BoundaryStateTracker = void 0;
|
|
4
|
+
var BoundaryStateTracker_js_1 = require("./BoundaryStateTracker.js");
|
|
5
|
+
Object.defineProperty(exports, "BoundaryStateTracker", { enumerable: true, get: function () { return BoundaryStateTracker_js_1.BoundaryStateTracker; } });
|
|
4
6
|
var CombinedRecorder_js_1 = require("./CombinedRecorder.js");
|
|
5
7
|
Object.defineProperty(exports, "hasEmitRecorderMethods", { enumerable: true, get: function () { return CombinedRecorder_js_1.hasEmitRecorderMethods; } });
|
|
6
8
|
Object.defineProperty(exports, "hasFlowRecorderMethods", { enumerable: true, get: function () { return CombinedRecorder_js_1.hasFlowRecorderMethods; } });
|
|
@@ -14,4 +16,4 @@ var RecorderOperation_js_1 = require("./RecorderOperation.js");
|
|
|
14
16
|
Object.defineProperty(exports, "RecorderOperation", { enumerable: true, get: function () { return RecorderOperation_js_1.RecorderOperation; } });
|
|
15
17
|
var SequenceRecorder_js_1 = require("./SequenceRecorder.js");
|
|
16
18
|
Object.defineProperty(exports, "SequenceRecorder", { enumerable: true, get: function () { return SequenceRecorder_js_1.SequenceRecorder; } });
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3JlY29yZGVyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFFQUFpRTtBQUF4RCwrSEFBQSxvQkFBb0IsT0FBQTtBQUU3Qiw2REFBd0g7QUFBL0csNkhBQUEsc0JBQXNCLE9BQUE7QUFBRSw2SEFBQSxzQkFBc0IsT0FBQTtBQUFFLHlIQUFBLGtCQUFrQixPQUFBO0FBQUUsa0hBQUEsV0FBVyxPQUFBO0FBRXhGLCtEQUEyRDtBQUFsRCx5SEFBQSxpQkFBaUIsT0FBQTtBQUUxQix1REFBbUQ7QUFBMUMsaUhBQUEsYUFBYSxPQUFBO0FBQ3RCLCtEQUEyRDtBQUFsRCx5SEFBQSxpQkFBaUIsT0FBQTtBQUMxQiw2REFBeUQ7QUFBaEQsdUhBQUEsZ0JBQWdCLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBCb3VuZGFyeVN0YXRlVHJhY2tlciB9IGZyb20gJy4vQm91bmRhcnlTdGF0ZVRyYWNrZXIuanMnO1xuZXhwb3J0IHR5cGUgeyBDb21iaW5lZFJlY29yZGVyIH0gZnJvbSAnLi9Db21iaW5lZFJlY29yZGVyLmpzJztcbmV4cG9ydCB7IGhhc0VtaXRSZWNvcmRlck1ldGhvZHMsIGhhc0Zsb3dSZWNvcmRlck1ldGhvZHMsIGhhc1JlY29yZGVyTWV0aG9kcywgaXNGbG93RXZlbnQgfSBmcm9tICcuL0NvbWJpbmVkUmVjb3JkZXIuanMnO1xuZXhwb3J0IHR5cGUgeyBDb21wb3NpdGVTbmFwc2hvdCB9IGZyb20gJy4vQ29tcG9zaXRlUmVjb3JkZXIuanMnO1xuZXhwb3J0IHsgQ29tcG9zaXRlUmVjb3JkZXIgfSBmcm9tICcuL0NvbXBvc2l0ZVJlY29yZGVyLmpzJztcbmV4cG9ydCB0eXBlIHsgRW1pdEV2ZW50LCBFbWl0UmVjb3JkZXIgfSBmcm9tICcuL0VtaXRSZWNvcmRlci5qcyc7XG5leHBvcnQgeyBLZXllZFJlY29yZGVyIH0gZnJvbSAnLi9LZXllZFJlY29yZGVyLmpzJztcbmV4cG9ydCB7IFJlY29yZGVyT3BlcmF0aW9uIH0gZnJvbSAnLi9SZWNvcmRlck9wZXJhdGlvbi5qcyc7XG5leHBvcnQgeyBTZXF1ZW5jZVJlY29yZGVyIH0gZnJvbSAnLi9TZXF1ZW5jZVJlY29yZGVyLmpzJztcbiJdfQ==
|