footprintjs 4.17.2 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +71 -9
- package/dist/advanced.js +2 -3
- package/dist/esm/advanced.js +2 -2
- package/dist/esm/index.js +3 -3
- package/dist/esm/lib/builder/FlowChartBuilder.js +359 -70
- package/dist/esm/lib/builder/index.js +1 -1
- package/dist/esm/lib/builder/structure/StructureRecorder.js +158 -0
- package/dist/esm/lib/builder/structure/StructureRecorderDispatcher.js +171 -0
- package/dist/esm/lib/builder/types.js +1 -1
- package/dist/esm/lib/decide/decide.js +9 -9
- package/dist/esm/lib/decide/evidence.js +2 -2
- package/dist/esm/lib/engine/errors/errorInfo.js +4 -3
- package/dist/esm/lib/engine/handlers/ChildrenExecutor.js +11 -2
- package/dist/esm/lib/engine/handlers/DeciderHandler.js +5 -7
- package/dist/esm/lib/engine/handlers/RuntimeStructureManager.js +2 -2
- package/dist/esm/lib/engine/handlers/SelectorHandler.js +9 -7
- package/dist/esm/lib/engine/handlers/SubflowExecutor.js +7 -1
- package/dist/esm/lib/engine/handlers/index.js +1 -3
- package/dist/esm/lib/engine/handlers/types.js +2 -2
- package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +14 -4
- package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.js +5 -5
- package/dist/esm/lib/engine/narrative/NarrativeFlowRecorder.js +8 -1
- package/dist/esm/lib/engine/narrative/types.js +1 -1
- package/dist/esm/lib/engine/runtimeStageId.js +64 -2
- package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +30 -56
- package/dist/esm/lib/engine/types.js +1 -1
- package/dist/esm/lib/engine/walkSubflowSpec.js +144 -0
- package/dist/esm/lib/memory/StageContext.js +3 -3
- package/dist/esm/lib/memory/backtrack.js +1 -1
- package/dist/esm/lib/reactive/createTypedScope.js +5 -5
- package/dist/esm/lib/reactive/types.js +7 -7
- package/dist/esm/lib/recorder/BoundaryStateStore.js +167 -0
- package/dist/esm/lib/recorder/BoundaryStateTracker.js +4 -4
- package/dist/esm/lib/recorder/CombinedRecorder.js +9 -9
- package/dist/esm/lib/recorder/CommitRangeIndex.js +207 -0
- package/dist/esm/lib/recorder/CompositeRecorder.js +6 -6
- package/dist/esm/lib/recorder/EmitRecorder.js +3 -3
- package/dist/esm/lib/recorder/InOutRecorder.js +1 -1
- package/dist/esm/lib/recorder/KeyedStore.js +113 -0
- package/dist/esm/lib/recorder/QualityRecorder.js +2 -2
- package/dist/esm/lib/recorder/SequenceRecorder.js +2 -2
- package/dist/esm/lib/recorder/SequenceStore.js +195 -0
- package/dist/esm/lib/recorder/TopologyRecorder.js +1 -1
- package/dist/esm/lib/recorder/index.js +13 -3
- package/dist/esm/lib/runner/ExecutionRuntime.js +1 -1
- package/dist/esm/lib/runner/FlowChartExecutor.js +75 -44
- package/dist/esm/lib/runner/RunContext.js +2 -2
- package/dist/esm/lib/runner/RunnableChart.js +1 -1
- package/dist/esm/lib/runner/getSubtreeSnapshot.js +3 -2
- package/dist/esm/lib/runner/runId.js +65 -0
- package/dist/esm/lib/scope/ScopeFacade.js +6 -6
- package/dist/esm/lib/scope/index.js +1 -1
- package/dist/esm/lib/scope/recorders/DebugRecorder.js +4 -4
- package/dist/esm/lib/scope/recorders/MetricRecorder.js +2 -2
- package/dist/esm/lib/scope/recorders/index.js +1 -1
- package/dist/esm/lib/scope/types.js +1 -1
- package/dist/esm/recorders.js +1 -1
- package/dist/esm/trace.js +15 -2
- package/dist/index.js +3 -3
- package/dist/lib/builder/FlowChartBuilder.js +359 -70
- package/dist/lib/builder/index.js +1 -1
- package/dist/lib/builder/structure/StructureRecorder.js +159 -0
- package/dist/lib/builder/structure/StructureRecorderDispatcher.js +175 -0
- package/dist/lib/builder/types.js +1 -1
- package/dist/lib/decide/decide.js +9 -9
- package/dist/lib/decide/evidence.js +2 -2
- package/dist/lib/engine/errors/errorInfo.js +4 -3
- package/dist/lib/engine/handlers/ChildrenExecutor.js +11 -2
- package/dist/lib/engine/handlers/DeciderHandler.js +5 -7
- package/dist/lib/engine/handlers/RuntimeStructureManager.js +2 -2
- package/dist/lib/engine/handlers/SelectorHandler.js +9 -7
- package/dist/lib/engine/handlers/SubflowExecutor.js +7 -1
- package/dist/lib/engine/handlers/index.js +2 -5
- package/dist/lib/engine/handlers/types.js +2 -2
- package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +14 -4
- package/dist/lib/engine/narrative/FlowRecorderDispatcher.js +5 -5
- package/dist/lib/engine/narrative/NarrativeFlowRecorder.js +8 -1
- package/dist/lib/engine/narrative/types.js +1 -1
- package/dist/lib/engine/runtimeStageId.js +66 -3
- package/dist/lib/engine/traversal/FlowchartTraverser.js +30 -56
- package/dist/lib/engine/types.js +1 -1
- package/dist/lib/engine/walkSubflowSpec.js +148 -0
- package/dist/lib/memory/StageContext.js +3 -3
- package/dist/lib/memory/backtrack.js +1 -1
- package/dist/lib/reactive/createTypedScope.js +5 -5
- package/dist/lib/reactive/types.js +7 -7
- package/dist/lib/recorder/BoundaryStateStore.js +171 -0
- package/dist/lib/recorder/BoundaryStateTracker.js +4 -4
- package/dist/lib/recorder/CombinedRecorder.js +9 -9
- package/dist/lib/recorder/CommitRangeIndex.js +211 -0
- package/dist/lib/recorder/CompositeRecorder.js +6 -6
- package/dist/lib/recorder/EmitRecorder.js +3 -3
- package/dist/lib/recorder/InOutRecorder.js +1 -1
- package/dist/lib/recorder/KeyedStore.js +117 -0
- package/dist/lib/recorder/QualityRecorder.js +2 -2
- package/dist/lib/recorder/SequenceRecorder.js +2 -2
- package/dist/lib/recorder/SequenceStore.js +199 -0
- package/dist/lib/recorder/TopologyRecorder.js +1 -1
- package/dist/lib/recorder/index.js +19 -6
- package/dist/lib/runner/ExecutionRuntime.js +1 -1
- package/dist/lib/runner/FlowChartExecutor.js +75 -44
- package/dist/lib/runner/RunContext.js +2 -2
- package/dist/lib/runner/RunnableChart.js +1 -1
- package/dist/lib/runner/getSubtreeSnapshot.js +3 -2
- package/dist/lib/runner/runId.js +70 -0
- package/dist/lib/scope/ScopeFacade.js +6 -6
- package/dist/lib/scope/index.js +1 -1
- package/dist/lib/scope/recorders/DebugRecorder.js +4 -4
- package/dist/lib/scope/recorders/MetricRecorder.js +2 -2
- package/dist/lib/scope/recorders/index.js +1 -1
- package/dist/lib/scope/types.js +1 -1
- package/dist/recorders.js +1 -1
- package/dist/trace.js +21 -2
- package/dist/types/advanced.d.ts +4 -4
- package/dist/types/index.d.ts +6 -4
- package/dist/types/lib/builder/FlowChartBuilder.d.ts +110 -14
- package/dist/types/lib/builder/index.d.ts +2 -1
- package/dist/types/lib/builder/structure/StructureRecorder.d.ts +349 -0
- package/dist/types/lib/builder/structure/StructureRecorderDispatcher.d.ts +77 -0
- package/dist/types/lib/builder/types.d.ts +20 -6
- package/dist/types/lib/decide/evidence.d.ts +3 -3
- package/dist/types/lib/engine/errors/errorInfo.d.ts +3 -2
- package/dist/types/lib/engine/handlers/DeciderHandler.d.ts +3 -3
- package/dist/types/lib/engine/handlers/RuntimeStructureManager.d.ts +1 -1
- package/dist/types/lib/engine/handlers/SelectorHandler.d.ts +2 -2
- package/dist/types/lib/engine/handlers/index.d.ts +1 -2
- package/dist/types/lib/engine/handlers/types.d.ts +2 -9
- package/dist/types/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +1 -1
- package/dist/types/lib/engine/narrative/FlowRecorderDispatcher.d.ts +4 -4
- package/dist/types/lib/engine/narrative/types.d.ts +43 -4
- package/dist/types/lib/engine/runtimeStageId.d.ts +57 -1
- package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +12 -6
- package/dist/types/lib/engine/types.d.ts +0 -26
- package/dist/types/lib/engine/walkSubflowSpec.d.ts +95 -0
- package/dist/types/lib/memory/StageContext.d.ts +2 -2
- package/dist/types/lib/memory/backtrack.d.ts +1 -1
- package/dist/types/lib/reactive/types.d.ts +7 -7
- package/dist/types/lib/recorder/BoundaryStateStore.d.ts +115 -0
- package/dist/types/lib/recorder/BoundaryStateTracker.d.ts +3 -3
- package/dist/types/lib/recorder/CombinedRecorder.d.ts +11 -11
- package/dist/types/lib/recorder/CommitRangeIndex.d.ts +147 -0
- package/dist/types/lib/recorder/CompositeRecorder.d.ts +8 -8
- package/dist/types/lib/recorder/EmitRecorder.d.ts +2 -2
- package/dist/types/lib/recorder/InOutRecorder.d.ts +1 -1
- package/dist/types/lib/recorder/KeyedStore.d.ts +70 -0
- package/dist/types/lib/recorder/QualityRecorder.d.ts +4 -4
- package/dist/types/lib/recorder/SequenceRecorder.d.ts +1 -1
- package/dist/types/lib/recorder/SequenceStore.d.ts +120 -0
- package/dist/types/lib/recorder/TopologyRecorder.d.ts +1 -1
- package/dist/types/lib/recorder/index.d.ts +5 -2
- package/dist/types/lib/runner/ExecutionRuntime.d.ts +1 -1
- package/dist/types/lib/runner/FlowChartExecutor.d.ts +40 -30
- package/dist/types/lib/runner/RunContext.d.ts +2 -2
- package/dist/types/lib/runner/RunnableChart.d.ts +2 -2
- package/dist/types/lib/runner/runId.d.ts +45 -0
- package/dist/types/lib/scope/ScopeFacade.d.ts +4 -4
- package/dist/types/lib/scope/index.d.ts +1 -1
- package/dist/types/lib/scope/recorders/DebugRecorder.d.ts +4 -4
- package/dist/types/lib/scope/recorders/MetricRecorder.d.ts +4 -4
- package/dist/types/lib/scope/recorders/index.d.ts +1 -1
- package/dist/types/lib/scope/types.d.ts +1 -1
- package/dist/types/recorders.d.ts +1 -1
- package/dist/types/trace.d.ts +8 -1
- package/package.json +1 -1
- package/dist/esm/lib/engine/handlers/ExtractorRunner.js +0 -122
- package/dist/lib/engine/handlers/ExtractorRunner.js +0 -126
- package/dist/types/lib/engine/handlers/ExtractorRunner.d.ts +0 -41
|
@@ -10,4 +10,4 @@ export { DeciderList, FlowChartBuilder, SelectorFnList } from './FlowChartBuilde
|
|
|
10
10
|
// Factory & utilities
|
|
11
11
|
export { flowChart, specToStageNode } from './FlowChartBuilder.js';
|
|
12
12
|
export { ArrayMergeMode } from './types.js';
|
|
13
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2J1aWxkZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsMEJBQTBCO0FBQzFCOzs7OztHQUtHO0FBRUgsVUFBVTtBQUNWLE9BQU8sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdEYsc0JBQXNCO0FBQ3RCLE9BQU8sRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFzQm5FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBpc3RhbmJ1bCBpZ25vcmUgZmlsZSAqL1xuLyoqXG4gKiBidWlsZGVyLyDigJQgRmxvd2NoYXJ0IGNvbnN0cnVjdGlvbiBsaWJyYXJ5ICh6ZXJvIGRlcHMgb24gb2xkIGNvZGUpXG4gKlxuICogRmx1ZW50IEFQSSBmb3IgYnVpbGRpbmcgU3RhZ2VOb2RlIHRyZWVzIGFuZCBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUuXG4gKiBDYW4gYmUgdXNlZCBzdGFuZGFsb25lIGZvciBidWlsZGluZyBmbG93Y2hhcnQgc3BlY3Mgd2l0aG91dCBleGVjdXRpb24uXG4gKi9cblxuLy8gQ2xhc3Nlc1xuZXhwb3J0IHsgRGVjaWRlckxpc3QsIEZsb3dDaGFydEJ1aWxkZXIsIFNlbGVjdG9yRm5MaXN0IH0gZnJvbSAnLi9GbG93Q2hhcnRCdWlsZGVyLmpzJztcblxuLy8gRmFjdG9yeSAmIHV0aWxpdGllc1xuZXhwb3J0IHsgZmxvd0NoYXJ0LCBzcGVjVG9TdGFnZU5vZGUgfSBmcm9tICcuL0Zsb3dDaGFydEJ1aWxkZXIuanMnO1xuXG4vLyBUeXBlc1xuZXhwb3J0IHR5cGUge1xuICBFeGVjT3B0aW9ucyxcbiAgRmxvd0NoYXJ0LFxuICBGbG93Q2hhcnRPcHRpb25zLFxuICBGbG93Q2hhcnRTcGVjLFxuICBJTG9nZ2VyLFxuICBTY29wZVByb3RlY3Rpb25Nb2RlLFxuICBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUsXG4gIFNpbXBsaWZpZWRQYXJhbGxlbFNwZWMsXG4gIFN0YWdlRm4sXG4gIFN0YWdlRnVuY3Rpb24sXG4gIFN0YWdlTm9kZSxcbiAgU3RyZWFtQ2FsbGJhY2ssXG4gIFN0cmVhbUhhbmRsZXJzLFxuICBTdHJlYW1MaWZlY3ljbGVIYW5kbGVyLFxuICBTdHJlYW1Ub2tlbkhhbmRsZXIsXG4gIFN1YmZsb3dNb3VudE9wdGlvbnMsXG4gIFN1YmZsb3dSZWYsXG59IGZyb20gJy4vdHlwZXMuanMnO1xuZXhwb3J0IHsgQXJyYXlNZXJnZU1vZGUgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLy8g4pSA4pSAIEw3IOKAlCBTdHJ1Y3R1cmFsIG9ic2VydmVyIHN1cmZhY2Ug4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBgU3RydWN0dXJlUmVjb3JkZXJgIGlzIHRoZSBidWlsZC10aW1lIHR3aW4gb2YgYEZsb3dSZWNvcmRlcmAuIFRvZ2V0aGVyIHRoZXlcbi8vIGNvdmVyIGJvdGggcGhhc2VzIG9mIGNoYXJ0IGxpZmUg4oCUIHNlZSBgU3RydWN0dXJlUmVjb3JkZXIudHNgIEpTRG9jIGZvciB0aGVcbi8vIGFyY2hpdGVjdHVyYWwgcmF0aW9uYWxlICh3aHkgdHdvIGludGVyZmFjZXMsIG5vdCBvbmUgcGhhc2UtdGFnZ2VkIGV2ZW50KS5cbmV4cG9ydCB0eXBlIHtcbiAgU3RydWN0dXJlRGVjaWRlckNvbXBsZXRlRXZlbnQsXG4gIFN0cnVjdHVyZUVkZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVFZGdlS2luZCxcbiAgU3RydWN0dXJlTG9vcEVkZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVSZWNvcmRlcixcbiAgU3RydWN0dXJlU3RhZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVTdWJmbG93TW91bnRlZEV2ZW50LFxufSBmcm9tICcuL3N0cnVjdHVyZS9TdHJ1Y3R1cmVSZWNvcmRlci5qcyc7XG4iXX0=
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StructureRecorder — passive observer of BUILD-TIME chart construction events.
|
|
3
|
+
*
|
|
4
|
+
* The build-time twin of `FlowRecorder`. Where `FlowRecorder` observes
|
|
5
|
+
* RUNTIME control-flow transitions (per-execution `runtimeStageId`,
|
|
6
|
+
* iteration counts, errors, pauses), `StructureRecorder` observes
|
|
7
|
+
* STATIC chart shape as it's assembled by the builder — every spec
|
|
8
|
+
* node added, every outgoing edge wired, every decider closed.
|
|
9
|
+
*
|
|
10
|
+
* Why two interfaces, not one
|
|
11
|
+
* ───────────────────────────
|
|
12
|
+
* Build and runtime events have different INVARIANTS, not just
|
|
13
|
+
* different timing:
|
|
14
|
+
*
|
|
15
|
+
* - Runtime events carry `runtimeStageId` (`[subflowPath/]stageId#N`),
|
|
16
|
+
* `iteration`, `traversalContext` — load-bearing for time-travel
|
|
17
|
+
* UIs, commit-log indices, and `SequenceRecorder<T>` consumers.
|
|
18
|
+
* NONE of these exist at build time.
|
|
19
|
+
*
|
|
20
|
+
* - Build events carry only `stageId` + structural fields. No
|
|
21
|
+
* execution index, no iteration, no snapshot.
|
|
22
|
+
*
|
|
23
|
+
* - Some events have no analog across phases: `onPause` /
|
|
24
|
+
* `onResume` / `onError` / `onRunStart` are runtime-only;
|
|
25
|
+
* `onDeciderComplete` / `onStageAdded` are build-only.
|
|
26
|
+
*
|
|
27
|
+
* A single `FlowRecorder` with `phase: 'static' | 'dynamic'`
|
|
28
|
+
* discriminator would force every consumer to write
|
|
29
|
+
* `if (e.phase === 'static') ...` branches and would erase the
|
|
30
|
+
* least-privilege boundary (a static-only consumer should NOT
|
|
31
|
+
* accidentally observe runtime data — e.g., a public docs site
|
|
32
|
+
* rendering chart topology must not see scope values).
|
|
33
|
+
*
|
|
34
|
+
* Two interfaces, same mental model, clean separation. Two
|
|
35
|
+
* registration sites ship today (pick whichever fits your call
|
|
36
|
+
* site):
|
|
37
|
+
*
|
|
38
|
+
* 1. **Options-bag** (preferred when the recorder set is known
|
|
39
|
+
* at construction time — registers BEFORE `start()` so even
|
|
40
|
+
* the seed event fires through the normal dispatcher fan-out):
|
|
41
|
+
* ```ts
|
|
42
|
+
* flowChart('seed', fn, 'seed', { structureRecorders: [rec] })
|
|
43
|
+
* .addFunction('a', fnA, 'a').build();
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
* 2. **Fluent** (preferred when attach is conditional, late, or
|
|
47
|
+
* in a chain builder — the just-attached recorder gets a
|
|
48
|
+
* one-time seed replay so it observes the root stage):
|
|
49
|
+
* ```ts
|
|
50
|
+
* flowChart('seed', fn, 'seed')
|
|
51
|
+
* .attachStructureRecorder(rec)
|
|
52
|
+
* .addFunction('a', fnA, 'a').build();
|
|
53
|
+
* ```
|
|
54
|
+
*
|
|
55
|
+
* Both deliver the same event stream to the same recorder. See the
|
|
56
|
+
* `@example` block below for a fully-fleshed-out implementation.
|
|
57
|
+
*
|
|
58
|
+
* Lifecycle + ordering invariants
|
|
59
|
+
* ───────────────────────────────
|
|
60
|
+
* - Fires SYNCHRONOUSLY during builder chain calls (and during
|
|
61
|
+
* `.build()` for the terminal node) at the natural moment each
|
|
62
|
+
* spec mutation completes.
|
|
63
|
+
* - `onStageAdded(A)` and `onStageAdded(B)` fire BEFORE any
|
|
64
|
+
* `onEdgeAdded({from: A, to: B})` — endpoint registration
|
|
65
|
+
* happens before edge wiring.
|
|
66
|
+
* - `onDeciderComplete(D)` fires at sub-builder `.end()` time, AFTER
|
|
67
|
+
* every child's `onStageAdded` and every `onEdgeAdded({from: D,
|
|
68
|
+
* to: child})`. Marks the decider as no-further-mutation.
|
|
69
|
+
* - `onSubflowMounted({subflowId})` fires once per mount.
|
|
70
|
+
* **MOUNT-ONLY**: parent recorders do NOT receive a replay of
|
|
71
|
+
* the subflow's own internal structure events (those fired
|
|
72
|
+
* during the subflow's own `.build()`). Matches the runtime
|
|
73
|
+
* `onSubflowEntry` semantics — composition over replay.
|
|
74
|
+
*
|
|
75
|
+
* Error isolation (matches FlowRecorder contract)
|
|
76
|
+
* ───────────────────────────────────────────────
|
|
77
|
+
* - A throwing handler is caught, logged via `isDevMode()` warning,
|
|
78
|
+
* and accumulated on `builder.getStructureBuildErrors()` for
|
|
79
|
+
* post-hoc inspection.
|
|
80
|
+
* - Subsequent recorders + subsequent events fire normally; one
|
|
81
|
+
* misbehaving recorder cannot THROW its way into blocking
|
|
82
|
+
* construction.
|
|
83
|
+
* - The errors[] accumulator is soft-capped (~100 entries) with a
|
|
84
|
+
* `__truncated__` sentinel record once the cap is hit, to prevent
|
|
85
|
+
* unbounded growth on chatty broken recorders.
|
|
86
|
+
* - Note: throw isolation does NOT defend against a handler that
|
|
87
|
+
* succeeds at runtime but mutates `event.spec` to corrupt the
|
|
88
|
+
* chart. See "Spec mutation" below.
|
|
89
|
+
*
|
|
90
|
+
* Spec mutation — readonly-by-contract (NOT runtime-enforced)
|
|
91
|
+
* ────────────────────────────────────────────────────────────
|
|
92
|
+
* - Event payloads pass spec references where useful (e.g., `spec`
|
|
93
|
+
* on `onStageAdded`). Every field on every event payload is
|
|
94
|
+
* marked `readonly` in TypeScript — the type system signals
|
|
95
|
+
* consumer intent at author time.
|
|
96
|
+
* - There is NO runtime freeze. The builder fires `onStageAdded`
|
|
97
|
+
* IMMEDIATELY when a spec node is added, BEFORE the builder
|
|
98
|
+
* wires that node's `.next`/`.children`/`.loopTarget` in the
|
|
99
|
+
* subsequent `addX` call. Freezing here would break the
|
|
100
|
+
* builder's own subsequent mutation.
|
|
101
|
+
* - Handler mutation of `event.spec` is DOCUMENTED UNDEFINED
|
|
102
|
+
* BEHAVIOR — it will succeed at runtime, but is not supported
|
|
103
|
+
* and downstream consumers may break. Specifically, mutating
|
|
104
|
+
* `event.spec.fn`, `event.spec.id`, or `event.spec.children`
|
|
105
|
+
* can corrupt subsequent runtime behavior of the chart.
|
|
106
|
+
* - **Trust model**: attach ONLY recorders from trusted code paths.
|
|
107
|
+
* A hostile or buggy recorder can effectively substitute stage
|
|
108
|
+
* functions or rewire the chart structure. The `readonly`
|
|
109
|
+
* markers cannot defend against intentional mutation.
|
|
110
|
+
*
|
|
111
|
+
* @example
|
|
112
|
+
* ```ts
|
|
113
|
+
* class TraceStructureRecorder implements StructureRecorder {
|
|
114
|
+
* readonly id = 'trace-static';
|
|
115
|
+
* nodes: XyflowNode[] = [];
|
|
116
|
+
* edges: XyflowEdge[] = [];
|
|
117
|
+
*
|
|
118
|
+
* onStageAdded(e) {
|
|
119
|
+
* // Node role: 'stage' is the initial type. If outgoing edges
|
|
120
|
+
* // arrive with kind 'fork-branch' / 'decision-branch' the node
|
|
121
|
+
* // is functioning as a fork/decider — derive the visual style
|
|
122
|
+
* // from those edges, not from `e.type` alone.
|
|
123
|
+
* this.nodes.push({ id: e.stageId, type: 'lensStage', data: { label: e.name } });
|
|
124
|
+
* }
|
|
125
|
+
* onEdgeAdded(e) {
|
|
126
|
+
* this.edges.push({ id: `${e.from}->${e.to}`, source: e.from, target: e.to });
|
|
127
|
+
* }
|
|
128
|
+
* onSubflowMounted(e) {
|
|
129
|
+
* this.nodes.push({ id: e.subflowId, type: 'subflow', data: { label: e.subflowName } });
|
|
130
|
+
* }
|
|
131
|
+
* onDeciderComplete(e) {
|
|
132
|
+
* // Optional: finalize node styling now that branch list is sealed.
|
|
133
|
+
* }
|
|
134
|
+
* }
|
|
135
|
+
*
|
|
136
|
+
* // Registration option A — options-bag (preferred when recorders
|
|
137
|
+
* // are known up front; attaches BEFORE the seed event fires):
|
|
138
|
+
* const rec = new TraceStructureRecorder();
|
|
139
|
+
* const builder = flowChart('seed', fn, 'seed', {
|
|
140
|
+
* structureRecorders: [rec],
|
|
141
|
+
* }).addFunction('a', fnA, 'a');
|
|
142
|
+
* const chart = builder.build();
|
|
143
|
+
*
|
|
144
|
+
* // Registration option B — fluent chain (preferred for conditional
|
|
145
|
+
* // or late attach; the just-attached recorder gets a seed replay):
|
|
146
|
+
* const rec2 = new TraceStructureRecorder();
|
|
147
|
+
* const builder2 = flowChart('seed', fn, 'seed')
|
|
148
|
+
* .attachStructureRecorder(rec2)
|
|
149
|
+
* .addFunction('a', fnA, 'a');
|
|
150
|
+
*
|
|
151
|
+
* // Inspect any recorder errors (call on the BUILDER, not the chart):
|
|
152
|
+
* const errors = builder.getStructureBuildErrors();
|
|
153
|
+
*
|
|
154
|
+
* <ReactFlow nodes={rec.nodes} edges={rec.edges} />
|
|
155
|
+
* ```
|
|
156
|
+
*/
|
|
157
|
+
export {};
|
|
158
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RydWN0dXJlUmVjb3JkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2J1aWxkZXIvc3RydWN0dXJlL1N0cnVjdHVyZVJlY29yZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJKRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU3RydWN0dXJlUmVjb3JkZXIg4oCUIHBhc3NpdmUgb2JzZXJ2ZXIgb2YgQlVJTEQtVElNRSBjaGFydCBjb25zdHJ1Y3Rpb24gZXZlbnRzLlxuICpcbiAqIFRoZSBidWlsZC10aW1lIHR3aW4gb2YgYEZsb3dSZWNvcmRlcmAuIFdoZXJlIGBGbG93UmVjb3JkZXJgIG9ic2VydmVzXG4gKiBSVU5USU1FIGNvbnRyb2wtZmxvdyB0cmFuc2l0aW9ucyAocGVyLWV4ZWN1dGlvbiBgcnVudGltZVN0YWdlSWRgLFxuICogaXRlcmF0aW9uIGNvdW50cywgZXJyb3JzLCBwYXVzZXMpLCBgU3RydWN0dXJlUmVjb3JkZXJgIG9ic2VydmVzXG4gKiBTVEFUSUMgY2hhcnQgc2hhcGUgYXMgaXQncyBhc3NlbWJsZWQgYnkgdGhlIGJ1aWxkZXIg4oCUIGV2ZXJ5IHNwZWNcbiAqIG5vZGUgYWRkZWQsIGV2ZXJ5IG91dGdvaW5nIGVkZ2Ugd2lyZWQsIGV2ZXJ5IGRlY2lkZXIgY2xvc2VkLlxuICpcbiAqIFdoeSB0d28gaW50ZXJmYWNlcywgbm90IG9uZVxuICog4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gKiAgIEJ1aWxkIGFuZCBydW50aW1lIGV2ZW50cyBoYXZlIGRpZmZlcmVudCBJTlZBUklBTlRTLCBub3QganVzdFxuICogICBkaWZmZXJlbnQgdGltaW5nOlxuICpcbiAqICAgICAtIFJ1bnRpbWUgZXZlbnRzIGNhcnJ5IGBydW50aW1lU3RhZ2VJZGAgKGBbc3ViZmxvd1BhdGgvXXN0YWdlSWQjTmApLFxuICogICAgICAgYGl0ZXJhdGlvbmAsIGB0cmF2ZXJzYWxDb250ZXh0YCDigJQgbG9hZC1iZWFyaW5nIGZvciB0aW1lLXRyYXZlbFxuICogICAgICAgVUlzLCBjb21taXQtbG9nIGluZGljZXMsIGFuZCBgU2VxdWVuY2VSZWNvcmRlcjxUPmAgY29uc3VtZXJzLlxuICogICAgICAgTk9ORSBvZiB0aGVzZSBleGlzdCBhdCBidWlsZCB0aW1lLlxuICpcbiAqICAgICAtIEJ1aWxkIGV2ZW50cyBjYXJyeSBvbmx5IGBzdGFnZUlkYCArIHN0cnVjdHVyYWwgZmllbGRzLiBOb1xuICogICAgICAgZXhlY3V0aW9uIGluZGV4LCBubyBpdGVyYXRpb24sIG5vIHNuYXBzaG90LlxuICpcbiAqICAgICAtIFNvbWUgZXZlbnRzIGhhdmUgbm8gYW5hbG9nIGFjcm9zcyBwaGFzZXM6IGBvblBhdXNlYCAvXG4gKiAgICAgICBgb25SZXN1bWVgIC8gYG9uRXJyb3JgIC8gYG9uUnVuU3RhcnRgIGFyZSBydW50aW1lLW9ubHk7XG4gKiAgICAgICBgb25EZWNpZGVyQ29tcGxldGVgIC8gYG9uU3RhZ2VBZGRlZGAgYXJlIGJ1aWxkLW9ubHkuXG4gKlxuICogICBBIHNpbmdsZSBgRmxvd1JlY29yZGVyYCB3aXRoIGBwaGFzZTogJ3N0YXRpYycgfCAnZHluYW1pYydgXG4gKiAgIGRpc2NyaW1pbmF0b3Igd291bGQgZm9yY2UgZXZlcnkgY29uc3VtZXIgdG8gd3JpdGVcbiAqICAgYGlmIChlLnBoYXNlID09PSAnc3RhdGljJykgLi4uYCBicmFuY2hlcyBhbmQgd291bGQgZXJhc2UgdGhlXG4gKiAgIGxlYXN0LXByaXZpbGVnZSBib3VuZGFyeSAoYSBzdGF0aWMtb25seSBjb25zdW1lciBzaG91bGQgTk9UXG4gKiAgIGFjY2lkZW50YWxseSBvYnNlcnZlIHJ1bnRpbWUgZGF0YSDigJQgZS5nLiwgYSBwdWJsaWMgZG9jcyBzaXRlXG4gKiAgIHJlbmRlcmluZyBjaGFydCB0b3BvbG9neSBtdXN0IG5vdCBzZWUgc2NvcGUgdmFsdWVzKS5cbiAqXG4gKiAgIFR3byBpbnRlcmZhY2VzLCBzYW1lIG1lbnRhbCBtb2RlbCwgY2xlYW4gc2VwYXJhdGlvbi4gVHdvXG4gKiAgIHJlZ2lzdHJhdGlvbiBzaXRlcyBzaGlwIHRvZGF5IChwaWNrIHdoaWNoZXZlciBmaXRzIHlvdXIgY2FsbFxuICogICBzaXRlKTpcbiAqXG4gKiAgICAgMS4gKipPcHRpb25zLWJhZyoqIChwcmVmZXJyZWQgd2hlbiB0aGUgcmVjb3JkZXIgc2V0IGlzIGtub3duXG4gKiAgICAgICAgYXQgY29uc3RydWN0aW9uIHRpbWUg4oCUIHJlZ2lzdGVycyBCRUZPUkUgYHN0YXJ0KClgIHNvIGV2ZW5cbiAqICAgICAgICB0aGUgc2VlZCBldmVudCBmaXJlcyB0aHJvdWdoIHRoZSBub3JtYWwgZGlzcGF0Y2hlciBmYW4tb3V0KTpcbiAqICAgICAgICBgYGB0c1xuICogICAgICAgIGZsb3dDaGFydCgnc2VlZCcsIGZuLCAnc2VlZCcsIHsgc3RydWN0dXJlUmVjb3JkZXJzOiBbcmVjXSB9KVxuICogICAgICAgICAgLmFkZEZ1bmN0aW9uKCdhJywgZm5BLCAnYScpLmJ1aWxkKCk7XG4gKiAgICAgICAgYGBgXG4gKlxuICogICAgIDIuICoqRmx1ZW50KiogKHByZWZlcnJlZCB3aGVuIGF0dGFjaCBpcyBjb25kaXRpb25hbCwgbGF0ZSwgb3JcbiAqICAgICAgICBpbiBhIGNoYWluIGJ1aWxkZXIg4oCUIHRoZSBqdXN0LWF0dGFjaGVkIHJlY29yZGVyIGdldHMgYVxuICogICAgICAgIG9uZS10aW1lIHNlZWQgcmVwbGF5IHNvIGl0IG9ic2VydmVzIHRoZSByb290IHN0YWdlKTpcbiAqICAgICAgICBgYGB0c1xuICogICAgICAgIGZsb3dDaGFydCgnc2VlZCcsIGZuLCAnc2VlZCcpXG4gKiAgICAgICAgICAuYXR0YWNoU3RydWN0dXJlUmVjb3JkZXIocmVjKVxuICogICAgICAgICAgLmFkZEZ1bmN0aW9uKCdhJywgZm5BLCAnYScpLmJ1aWxkKCk7XG4gKiAgICAgICAgYGBgXG4gKlxuICogICBCb3RoIGRlbGl2ZXIgdGhlIHNhbWUgZXZlbnQgc3RyZWFtIHRvIHRoZSBzYW1lIHJlY29yZGVyLiBTZWUgdGhlXG4gKiAgIGBAZXhhbXBsZWAgYmxvY2sgYmVsb3cgZm9yIGEgZnVsbHktZmxlc2hlZC1vdXQgaW1wbGVtZW50YXRpb24uXG4gKlxuICogTGlmZWN5Y2xlICsgb3JkZXJpbmcgaW52YXJpYW50c1xuICog4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gKiAgIC0gRmlyZXMgU1lOQ0hST05PVVNMWSBkdXJpbmcgYnVpbGRlciBjaGFpbiBjYWxscyAoYW5kIGR1cmluZ1xuICogICAgIGAuYnVpbGQoKWAgZm9yIHRoZSB0ZXJtaW5hbCBub2RlKSBhdCB0aGUgbmF0dXJhbCBtb21lbnQgZWFjaFxuICogICAgIHNwZWMgbXV0YXRpb24gY29tcGxldGVzLlxuICogICAtIGBvblN0YWdlQWRkZWQoQSlgIGFuZCBgb25TdGFnZUFkZGVkKEIpYCBmaXJlIEJFRk9SRSBhbnlcbiAqICAgICBgb25FZGdlQWRkZWQoe2Zyb206IEEsIHRvOiBCfSlgIOKAlCBlbmRwb2ludCByZWdpc3RyYXRpb25cbiAqICAgICBoYXBwZW5zIGJlZm9yZSBlZGdlIHdpcmluZy5cbiAqICAgLSBgb25EZWNpZGVyQ29tcGxldGUoRClgIGZpcmVzIGF0IHN1Yi1idWlsZGVyIGAuZW5kKClgIHRpbWUsIEFGVEVSXG4gKiAgICAgZXZlcnkgY2hpbGQncyBgb25TdGFnZUFkZGVkYCBhbmQgZXZlcnkgYG9uRWRnZUFkZGVkKHtmcm9tOiBELFxuICogICAgIHRvOiBjaGlsZH0pYC4gTWFya3MgdGhlIGRlY2lkZXIgYXMgbm8tZnVydGhlci1tdXRhdGlvbi5cbiAqICAgLSBgb25TdWJmbG93TW91bnRlZCh7c3ViZmxvd0lkfSlgIGZpcmVzIG9uY2UgcGVyIG1vdW50LlxuICogICAgICoqTU9VTlQtT05MWSoqOiBwYXJlbnQgcmVjb3JkZXJzIGRvIE5PVCByZWNlaXZlIGEgcmVwbGF5IG9mXG4gKiAgICAgdGhlIHN1YmZsb3cncyBvd24gaW50ZXJuYWwgc3RydWN0dXJlIGV2ZW50cyAodGhvc2UgZmlyZWRcbiAqICAgICBkdXJpbmcgdGhlIHN1YmZsb3cncyBvd24gYC5idWlsZCgpYCkuIE1hdGNoZXMgdGhlIHJ1bnRpbWVcbiAqICAgICBgb25TdWJmbG93RW50cnlgIHNlbWFudGljcyDigJQgY29tcG9zaXRpb24gb3ZlciByZXBsYXkuXG4gKlxuICogRXJyb3IgaXNvbGF0aW9uIChtYXRjaGVzIEZsb3dSZWNvcmRlciBjb250cmFjdClcbiAqIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICogICAtIEEgdGhyb3dpbmcgaGFuZGxlciBpcyBjYXVnaHQsIGxvZ2dlZCB2aWEgYGlzRGV2TW9kZSgpYCB3YXJuaW5nLFxuICogICAgIGFuZCBhY2N1bXVsYXRlZCBvbiBgYnVpbGRlci5nZXRTdHJ1Y3R1cmVCdWlsZEVycm9ycygpYCBmb3JcbiAqICAgICBwb3N0LWhvYyBpbnNwZWN0aW9uLlxuICogICAtIFN1YnNlcXVlbnQgcmVjb3JkZXJzICsgc3Vic2VxdWVudCBldmVudHMgZmlyZSBub3JtYWxseTsgb25lXG4gKiAgICAgbWlzYmVoYXZpbmcgcmVjb3JkZXIgY2Fubm90IFRIUk9XIGl0cyB3YXkgaW50byBibG9ja2luZ1xuICogICAgIGNvbnN0cnVjdGlvbi5cbiAqICAgLSBUaGUgZXJyb3JzW10gYWNjdW11bGF0b3IgaXMgc29mdC1jYXBwZWQgKH4xMDAgZW50cmllcykgd2l0aCBhXG4gKiAgICAgYF9fdHJ1bmNhdGVkX19gIHNlbnRpbmVsIHJlY29yZCBvbmNlIHRoZSBjYXAgaXMgaGl0LCB0byBwcmV2ZW50XG4gKiAgICAgdW5ib3VuZGVkIGdyb3d0aCBvbiBjaGF0dHkgYnJva2VuIHJlY29yZGVycy5cbiAqICAgLSBOb3RlOiB0aHJvdyBpc29sYXRpb24gZG9lcyBOT1QgZGVmZW5kIGFnYWluc3QgYSBoYW5kbGVyIHRoYXRcbiAqICAgICBzdWNjZWVkcyBhdCBydW50aW1lIGJ1dCBtdXRhdGVzIGBldmVudC5zcGVjYCB0byBjb3JydXB0IHRoZVxuICogICAgIGNoYXJ0LiBTZWUgXCJTcGVjIG11dGF0aW9uXCIgYmVsb3cuXG4gKlxuICogU3BlYyBtdXRhdGlvbiDigJQgcmVhZG9ubHktYnktY29udHJhY3QgKE5PVCBydW50aW1lLWVuZm9yY2VkKVxuICog4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gKiAgIC0gRXZlbnQgcGF5bG9hZHMgcGFzcyBzcGVjIHJlZmVyZW5jZXMgd2hlcmUgdXNlZnVsIChlLmcuLCBgc3BlY2BcbiAqICAgICBvbiBgb25TdGFnZUFkZGVkYCkuIEV2ZXJ5IGZpZWxkIG9uIGV2ZXJ5IGV2ZW50IHBheWxvYWQgaXNcbiAqICAgICBtYXJrZWQgYHJlYWRvbmx5YCBpbiBUeXBlU2NyaXB0IOKAlCB0aGUgdHlwZSBzeXN0ZW0gc2lnbmFsc1xuICogICAgIGNvbnN1bWVyIGludGVudCBhdCBhdXRob3IgdGltZS5cbiAqICAgLSBUaGVyZSBpcyBOTyBydW50aW1lIGZyZWV6ZS4gVGhlIGJ1aWxkZXIgZmlyZXMgYG9uU3RhZ2VBZGRlZGBcbiAqICAgICBJTU1FRElBVEVMWSB3aGVuIGEgc3BlYyBub2RlIGlzIGFkZGVkLCBCRUZPUkUgdGhlIGJ1aWxkZXJcbiAqICAgICB3aXJlcyB0aGF0IG5vZGUncyBgLm5leHRgL2AuY2hpbGRyZW5gL2AubG9vcFRhcmdldGAgaW4gdGhlXG4gKiAgICAgc3Vic2VxdWVudCBgYWRkWGAgY2FsbC4gRnJlZXppbmcgaGVyZSB3b3VsZCBicmVhayB0aGVcbiAqICAgICBidWlsZGVyJ3Mgb3duIHN1YnNlcXVlbnQgbXV0YXRpb24uXG4gKiAgIC0gSGFuZGxlciBtdXRhdGlvbiBvZiBgZXZlbnQuc3BlY2AgaXMgRE9DVU1FTlRFRCBVTkRFRklORURcbiAqICAgICBCRUhBVklPUiDigJQgaXQgd2lsbCBzdWNjZWVkIGF0IHJ1bnRpbWUsIGJ1dCBpcyBub3Qgc3VwcG9ydGVkXG4gKiAgICAgYW5kIGRvd25zdHJlYW0gY29uc3VtZXJzIG1heSBicmVhay4gU3BlY2lmaWNhbGx5LCBtdXRhdGluZ1xuICogICAgIGBldmVudC5zcGVjLmZuYCwgYGV2ZW50LnNwZWMuaWRgLCBvciBgZXZlbnQuc3BlYy5jaGlsZHJlbmBcbiAqICAgICBjYW4gY29ycnVwdCBzdWJzZXF1ZW50IHJ1bnRpbWUgYmVoYXZpb3Igb2YgdGhlIGNoYXJ0LlxuICogICAtICoqVHJ1c3QgbW9kZWwqKjogYXR0YWNoIE9OTFkgcmVjb3JkZXJzIGZyb20gdHJ1c3RlZCBjb2RlIHBhdGhzLlxuICogICAgIEEgaG9zdGlsZSBvciBidWdneSByZWNvcmRlciBjYW4gZWZmZWN0aXZlbHkgc3Vic3RpdHV0ZSBzdGFnZVxuICogICAgIGZ1bmN0aW9ucyBvciByZXdpcmUgdGhlIGNoYXJ0IHN0cnVjdHVyZS4gVGhlIGByZWFkb25seWBcbiAqICAgICBtYXJrZXJzIGNhbm5vdCBkZWZlbmQgYWdhaW5zdCBpbnRlbnRpb25hbCBtdXRhdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNsYXNzIFRyYWNlU3RydWN0dXJlUmVjb3JkZXIgaW1wbGVtZW50cyBTdHJ1Y3R1cmVSZWNvcmRlciB7XG4gKiAgIHJlYWRvbmx5IGlkID0gJ3RyYWNlLXN0YXRpYyc7XG4gKiAgIG5vZGVzOiBYeWZsb3dOb2RlW10gPSBbXTtcbiAqICAgZWRnZXM6IFh5Zmxvd0VkZ2VbXSA9IFtdO1xuICpcbiAqICAgb25TdGFnZUFkZGVkKGUpIHtcbiAqICAgICAvLyBOb2RlIHJvbGU6ICdzdGFnZScgaXMgdGhlIGluaXRpYWwgdHlwZS4gSWYgb3V0Z29pbmcgZWRnZXNcbiAqICAgICAvLyBhcnJpdmUgd2l0aCBraW5kICdmb3JrLWJyYW5jaCcgLyAnZGVjaXNpb24tYnJhbmNoJyB0aGUgbm9kZVxuICogICAgIC8vIGlzIGZ1bmN0aW9uaW5nIGFzIGEgZm9yay9kZWNpZGVyIOKAlCBkZXJpdmUgdGhlIHZpc3VhbCBzdHlsZVxuICogICAgIC8vIGZyb20gdGhvc2UgZWRnZXMsIG5vdCBmcm9tIGBlLnR5cGVgIGFsb25lLlxuICogICAgIHRoaXMubm9kZXMucHVzaCh7IGlkOiBlLnN0YWdlSWQsIHR5cGU6ICdsZW5zU3RhZ2UnLCBkYXRhOiB7IGxhYmVsOiBlLm5hbWUgfSB9KTtcbiAqICAgfVxuICogICBvbkVkZ2VBZGRlZChlKSB7XG4gKiAgICAgdGhpcy5lZGdlcy5wdXNoKHsgaWQ6IGAke2UuZnJvbX0tPiR7ZS50b31gLCBzb3VyY2U6IGUuZnJvbSwgdGFyZ2V0OiBlLnRvIH0pO1xuICogICB9XG4gKiAgIG9uU3ViZmxvd01vdW50ZWQoZSkge1xuICogICAgIHRoaXMubm9kZXMucHVzaCh7IGlkOiBlLnN1YmZsb3dJZCwgdHlwZTogJ3N1YmZsb3cnLCBkYXRhOiB7IGxhYmVsOiBlLnN1YmZsb3dOYW1lIH0gfSk7XG4gKiAgIH1cbiAqICAgb25EZWNpZGVyQ29tcGxldGUoZSkge1xuICogICAgIC8vIE9wdGlvbmFsOiBmaW5hbGl6ZSBub2RlIHN0eWxpbmcgbm93IHRoYXQgYnJhbmNoIGxpc3QgaXMgc2VhbGVkLlxuICogICB9XG4gKiB9XG4gKlxuICogLy8gUmVnaXN0cmF0aW9uIG9wdGlvbiBBIOKAlCBvcHRpb25zLWJhZyAocHJlZmVycmVkIHdoZW4gcmVjb3JkZXJzXG4gKiAvLyBhcmUga25vd24gdXAgZnJvbnQ7IGF0dGFjaGVzIEJFRk9SRSB0aGUgc2VlZCBldmVudCBmaXJlcyk6XG4gKiBjb25zdCByZWMgPSBuZXcgVHJhY2VTdHJ1Y3R1cmVSZWNvcmRlcigpO1xuICogY29uc3QgYnVpbGRlciA9IGZsb3dDaGFydCgnc2VlZCcsIGZuLCAnc2VlZCcsIHtcbiAqICAgc3RydWN0dXJlUmVjb3JkZXJzOiBbcmVjXSxcbiAqIH0pLmFkZEZ1bmN0aW9uKCdhJywgZm5BLCAnYScpO1xuICogY29uc3QgY2hhcnQgPSBidWlsZGVyLmJ1aWxkKCk7XG4gKlxuICogLy8gUmVnaXN0cmF0aW9uIG9wdGlvbiBCIOKAlCBmbHVlbnQgY2hhaW4gKHByZWZlcnJlZCBmb3IgY29uZGl0aW9uYWxcbiAqIC8vIG9yIGxhdGUgYXR0YWNoOyB0aGUganVzdC1hdHRhY2hlZCByZWNvcmRlciBnZXRzIGEgc2VlZCByZXBsYXkpOlxuICogY29uc3QgcmVjMiA9IG5ldyBUcmFjZVN0cnVjdHVyZVJlY29yZGVyKCk7XG4gKiBjb25zdCBidWlsZGVyMiA9IGZsb3dDaGFydCgnc2VlZCcsIGZuLCAnc2VlZCcpXG4gKiAgIC5hdHRhY2hTdHJ1Y3R1cmVSZWNvcmRlcihyZWMyKVxuICogICAuYWRkRnVuY3Rpb24oJ2EnLCBmbkEsICdhJyk7XG4gKlxuICogLy8gSW5zcGVjdCBhbnkgcmVjb3JkZXIgZXJyb3JzIChjYWxsIG9uIHRoZSBCVUlMREVSLCBub3QgdGhlIGNoYXJ0KTpcbiAqIGNvbnN0IGVycm9ycyA9IGJ1aWxkZXIuZ2V0U3RydWN0dXJlQnVpbGRFcnJvcnMoKTtcbiAqXG4gKiA8UmVhY3RGbG93IG5vZGVzPXtyZWMubm9kZXN9IGVkZ2VzPXtyZWMuZWRnZXN9IC8+XG4gKiBgYGBcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEZsb3dDaGFydFNwZWMsIFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSB9IGZyb20gJy4uL3R5cGVzLmpzJztcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBFdmVudCBwYXlsb2FkIHR5cGVzXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBFdmVudCBwYXlsb2FkIGZvciBgU3RydWN0dXJlUmVjb3JkZXIub25TdGFnZUFkZGVkYC4gRmlyZXMgZm9yIGV2ZXJ5XG4gKiBzcGVjIG5vZGUgYWRkZWQgdG8gdGhlIGNoYXJ0LCBpbmNsdWRpbmcgdGhlIHNlZWQgKGFkZGVkIHZpYVxuICogYGZsb3dDaGFydCgpYCBmYWN0b3J5KSBhbmQgc3ViZmxvdyBtb3VudCBub2Rlcy4gRXhjbHVkZXMgc3ludGhldGljXG4gKiBsb29wLXJlZmVyZW5jZSBub2RlcyAodGhvc2UgY2FycnkgYGlzTG9vcFJlZmVyZW5jZTogdHJ1ZWAgb24gdGhlXG4gKiBzcGVjOyBjb25zdW1lcnMgc2VlIHRoZW0gdmlhIHRoZSBzZXBhcmF0ZSBgb25Mb29wRWRnZUFkZGVkYCBldmVudFxuICogaW5zdGVhZCBvZiBhcyBmcmVzaCBzdGFnZXMpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cnVjdHVyZVN0YWdlQWRkZWRFdmVudCB7XG4gIC8qKlxuICAgKiBTdGFibGUgaWRlbnRpZmllciBmb3IgdGhpcyBub2RlLiBBVCBFVkVOVCBGSVJFIFRJTUUgdGhpcyBpcyB0aGVcbiAgICogYnVpbGRlcidzIExPQ0FMIGZvcm0gKG5vIHN1YmZsb3cgcHJlZml4IOKAlCB0aGUgcHJlZml4IGlzIGFwcGxpZWRcbiAgICogbGF0ZXIgYnkgYF9wcmVmaXhOb2RlVHJlZWAgd2hlbiB0aGlzIGJ1aWxkZXIgaXMgbW91bnRlZCBhcyBhXG4gICAqIHN1YmZsb3cgaW50byBhIHBhcmVudCkuXG4gICAqXG4gICAqIE5vdGU6IGBzcGVjLmlkYCBpcyBhIExJVkUgcmVmZXJlbmNlLiBJZiB5b3UgcmVhZCBpdCBBRlRFUiB0aGlzXG4gICAqIGNoYXJ0IGhhcyBiZWVuIG1vdW50ZWQgYXMgYSBzdWJmbG93LCBpdCBtYXkgaGF2ZSBiZWVuIHJld3JpdHRlblxuICAgKiB0byB0aGUgRlVMTCBwcmVmaXhlZCBmb3JtLiBVc2UgYHNwbGl0U3RhZ2VJZChzcGVjLmlkKWAgZnJvbVxuICAgKiBgZm9vdHByaW50anMvdHJhY2VgIHRvIGRlY29tcG9zZSBpdCBiYWNrIGludG8gbG9jYWwgKyBzdWJmbG93UGF0aC5cbiAgICpcbiAgICogQ29ycmVsYXRpbmcgd2l0aCBydW50aW1lIGV2ZW50czpcbiAgICogICAtIFNhbWUgYnVpbGRlciAobm8gbW91bnQpIOKGklxuICAgKiAgICAgYGV2ZW50LnN0YWdlSWQgPT09IHBhcnNlUnVudGltZVN0YWdlSWQocnVudGltZSkuc3RhZ2VJZGBcbiAgICogICAtIFRoaXMgYnVpbGRlciBtb3VudGVkIGFzIHN1YmZsb3cg4oaSIHVzZSBgc3BsaXRTdGFnZUlkYCBvbiB0aGVcbiAgICogICAgIHByZWZpeGVkIGZvcm0gKG9yIGBwYXJzZVJ1bnRpbWVTdGFnZUlkYCBvbiB0aGUgZnVsbFxuICAgKiAgICAgcnVudGltZVN0YWdlSWQpIGJlZm9yZSBjb21wYXJpbmcuXG4gICAqL1xuICByZWFkb25seSBzdGFnZUlkOiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBsYWJlbCBmb3IgdGhlIG5vZGUuICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgLyoqIFNwZWMgbm9kZSBgdHlwZWAuIExldHMgcmVjb3JkZXJzIGJyYW5jaCBvbiBzdGFnZSB2cyBkZWNpZGVyIHZzXG4gICAqICBmb3JrIHZzIHN1YmZsb3cgd2l0aG91dCByZS1kZXJpdmluZyBmcm9tIG90aGVyIGZpZWxkcy4gKi9cbiAgcmVhZG9ubHkgdHlwZTogTm9uTnVsbGFibGU8Rmxvd0NoYXJ0U3BlY1sndHlwZSddPjtcbiAgLyoqIFRydWUgZm9yIG5vZGVzIGFkZGVkIHZpYSBgYWRkUGF1c2FibGVGdW5jdGlvbigpYCDigJQgdXNlZnVsIGZvclxuICAgKiAgdmlzdWFsaXNlcnMgdGhhdCB3YW50IHRvIG1hcmsgc3RhZ2VzIHRoYXQgY2FuIHBhdXNlIGV4ZWN1dGlvbi4gKi9cbiAgcmVhZG9ubHkgaXNQYXVzYWJsZT86IGJvb2xlYW47XG4gIC8qKiBMaXZlIHJlZmVyZW5jZSB0byB0aGUgZnVsbCBzcGVjIG5vZGUsIGZvciBoYW5kbGVycyB0aGF0IHdhbnRcbiAgICogIGRldGFpbHMgYmV5b25kIHRoZSBkaXNjcmltaW5hdG9yIGZpZWxkcyBhYm92ZS4gTVVTVCBOT1QgYmVcbiAgICogIG11dGF0ZWQgYnkgdGhlIGhhbmRsZXIg4oCUIHJlYWRvbmx5IGlzIHR5cGUtbGV2ZWwgaW50ZW50OyBub1xuICAgKiAgcnVudGltZSBmcmVlemUuIFNlZSBcIlNwZWMgbXV0YXRpb25cIiBpbiB0aGUgZmlsZSBoZWFkZXIgZm9yIHRoZVxuICAgKiAgdHJ1c3QtbW9kZWwgY2F2ZWF0cy4gKi9cbiAgcmVhZG9ubHkgc3BlYzogRmxvd0NoYXJ0U3BlYztcbn1cblxuLyoqIEVkZ2Uga2luZHMgdGhlIGJ1aWxkZXIgcHJvZHVjZXMgYXQgc3RydWN0dXJhbCB0aW1lLiBNYXRjaGVzIHRoZVxuICogIGZvb3RwcmludGpzIGNvbnRyb2wtZmxvdyB2b2NhYnVsYXJ5IHVzZWQgYXQgcnVudGltZS5cbiAqXG4gKiAgV2h5IG5vIGBzdWJmbG93LWVudHJ5YCBoZXJlOiBzdWJmbG93IG1vdW50cyB1c2UgdGhlIGxpZmVjeWNsZVxuICogIGV2ZW50IGBvblN1YmZsb3dNb3VudGVkYCAobm90IGFuIGVkZ2UgZXZlbnQpLiBJZiBhIGZ1dHVyZSB1c2UgY2FzZVxuICogIG5lZWRzIHRoZSBwYXJlbnTihpJzdWJmbG93LXJvb3QgZWRnZSBhcyBhIGRpc3RpbmN0IGtpbmQsIGl0J2xsIGJlXG4gKiAgYWRkZWQgdGhlbiDigJQgWUFHTkkgbm93IChQYW5lbCAzLCBMNy4yIHJldmlldykuICovXG5leHBvcnQgdHlwZSBTdHJ1Y3R1cmVFZGdlS2luZCA9XG4gIHwgJ25leHQnIC8vIGxpbmVhciBjaGFpbjogcHJldi5uZXh0ID0gY3VyclxuICB8ICdmb3JrLWJyYW5jaCcgLy8gZm9yayBwYXJlbnQg4oaSIHBhcmFsbGVsIGNoaWxkXG4gIHwgJ2RlY2lzaW9uLWJyYW5jaCc7IC8vIGRlY2lkZXIg4oaSIGJyYW5jaCBjaGlsZFxuXG4vKipcbiAqIEV2ZW50IHBheWxvYWQgZm9yIGBTdHJ1Y3R1cmVSZWNvcmRlci5vbkVkZ2VBZGRlZGAuIEZpcmVzIHdoZW5ldmVyXG4gKiB0aGUgYnVpbGRlciB3aXJlcyBhbiBvdXRnb2luZyBlZGdlIGZyb20gb25lIG5vZGUgdG8gYW5vdGhlci4gQm90aFxuICogZW5kcG9pbnRzIGhhdmUgYWxyZWFkeSBiZWVuIGFubm91bmNlZCB2aWEgYG9uU3RhZ2VBZGRlZGAgYnkgdGhlXG4gKiB0aW1lIHRoaXMgZmlyZXMuXG4gKlxuICogTG9vcCBiYWNrLWVkZ2VzIGhhdmUgdGhlaXIgT1dOIGV2ZW50IChgb25Mb29wRWRnZUFkZGVkYCkgc29cbiAqIGNvbnN1bWVycyBjYW4gdGhlbWUgdGhlbSBkaXN0aW5jdGx5IGFuZCBzbyBidWlsZC10aW1lIGV2ZW50cyBzdGF5XG4gKiBmcmVlIG9mIHRoZSBydW50aW1lLW9ubHkgYGl0ZXJhdGlvbmAgZmllbGQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RydWN0dXJlRWRnZUFkZGVkRXZlbnQge1xuICByZWFkb25seSBmcm9tOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRvOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGtpbmQ6IFN0cnVjdHVyZUVkZ2VLaW5kO1xuICAvKiogT3B0aW9uYWwgaHVtYW4tcmVhZGFibGUgbGFiZWwg4oCUIHVzZWQgdG9kYXkgZm9yIGRlY2lkZXIgYnJhbmNoXG4gICAqICBrZXlzIChlLmcuLCBgJ2xvdydgLCBgJ2hpZ2gnYCwgYCdoaWdoIChkZWZhdWx0KSdgKSBhbmQgcGFyYWxsZWxcbiAgICogIGJyYW5jaCBpZHMuICovXG4gIHJlYWRvbmx5IGxhYmVsPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEV2ZW50IHBheWxvYWQgZm9yIGBTdHJ1Y3R1cmVSZWNvcmRlci5vbkxvb3BFZGdlQWRkZWRgLiBGaXJlcyB3aGVuXG4gKiBgLmxvb3BUbyh0YXJnZXQpYCBpbnN0YWxscyBhIGJhY2stZWRnZS4gRGlzdGluY3QgZnJvbVxuICogYG9uRWRnZUFkZGVkYCBzbyBjb25zdW1lcnMgY2FuIHRoZW1lIGJhY2stZWRnZXMgZGlmZmVyZW50bHkgYW5kXG4gKiBiZWNhdXNlIHJ1bnRpbWUgYG9uTG9vcGAgY2FycmllcyBgaXRlcmF0aW9uOiBudW1iZXJgIHdoaWNoIGhhcyBub1xuICogYnVpbGQtdGltZSBtZWFuaW5nIOKAlCBrZWVwaW5nIHRoZSBldmVudHMgc2VwYXJhdGVkIGF2b2lkcyBmb3JjaW5nXG4gKiBhbiBgaXRlcmF0aW9uPzogbnVtYmVyYCBsaWUgaW50byB0aGUgc3RydWN0dXJhbCBzaGFwZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJ1Y3R1cmVMb29wRWRnZUFkZGVkRXZlbnQge1xuICByZWFkb25seSBmcm9tOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHRvOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRXZlbnQgcGF5bG9hZCBmb3IgYFN0cnVjdHVyZVJlY29yZGVyLm9uRGVjaWRlckNvbXBsZXRlYC4gRmlyZXNcbiAqIHdoZW4gYSBkZWNpZGVyIC8gc2VsZWN0b3Igc3ViLWJ1aWxkZXIgY2xvc2VzIHZpYSBgLmVuZCgpYC4gQnkgdGhlXG4gKiB0aW1lIHRoaXMgZmlyZXMgZXZlcnkgYnJhbmNoIGhhcyBiZWVuIGFubm91bmNlZCBhbmQgdGhlXG4gKiBgZGVmYXVsdEJyYW5jaGAgKGlmIHNldCB2aWEgYC5zZXREZWZhdWx0KClgKSBpcyBmaW5hbC4gTGV0c1xuICogcmVjb3JkZXJzIHRyZWF0IHRoZSBkZWNpZGVyIGFzIG5vLWZ1cnRoZXItbXV0YXRpb24gYW5kIHNuYXBzaG90XG4gKiBpdHMgYnJhbmNoIGxpc3QgYXMgZmluYWwuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RydWN0dXJlRGVjaWRlckNvbXBsZXRlRXZlbnQge1xuICAvKiogRGVjaWRlciAvIHNlbGVjdG9yIHN0YWdlIGlkLiAqL1xuICByZWFkb25seSBkZWNpZGVyOiBzdHJpbmc7XG4gIC8qKiBTcGVjIHR5cGUgKGAnZGVjaWRlcidgIHZzIGAnc2VsZWN0b3InYCkg4oCUIGV4cG9zZWQgc28gY29uc3VtZXJzXG4gICAqICBkb24ndCBuZWVkIHRvIGxvb2sgdXAgdGhlIG9yaWdpbmFsIGBvblN0YWdlQWRkZWRgIGV2ZW50LiAqL1xuICByZWFkb25seSB0eXBlOiAnZGVjaWRlcicgfCAnc2VsZWN0b3InO1xuICAvKiogQnJhbmNoIG1lbWJlciBpZHMgaW4gZGVjbGFyYXRpb24gb3JkZXIuICovXG4gIHJlYWRvbmx5IGJyYW5jaElkczogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKiBEZWZhdWx0IGJyYW5jaCBpZCB3aGVuIHNldCB2aWEgYC5zZXREZWZhdWx0KClgOyB1bmRlZmluZWQgd2hlblxuICAgKiAgbm8gZGVmYXVsdCBpcyBjb25maWd1cmVkIChlLmcuLCBzZWxlY3RvcnMpLiAqL1xuICByZWFkb25seSBkZWZhdWx0QnJhbmNoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEV2ZW50IHBheWxvYWQgZm9yIGBTdHJ1Y3R1cmVSZWNvcmRlci5vblN1YmZsb3dNb3VudGVkYC4gRmlyZXMgb25jZVxuICogcGVyIHN1YmZsb3cgbW91bnQgKGBhZGRTdWJGbG93Q2hhcnRgIC8gYGFkZFN1YkZsb3dDaGFydE5leHRgIGFuZFxuICogdGhlaXIgbGF6eSB2YXJpYW50cykuXG4gKlxuICogKipNT1VOVC1PTkxZIHNlbWFudGljcyoqIOKAlCB0aGUgc3ViZmxvdydzIE9XTiBzdHJ1Y3R1cmUgZXZlbnRzXG4gKiAoZXZlcnkgYG9uU3RhZ2VBZGRlZGAgLyBgb25FZGdlQWRkZWRgIGluc2lkZSB0aGUgc3ViZmxvdykgZmlyZWRcbiAqIGR1cmluZyB0aGUgc3ViZmxvdydzIG93biBgLmJ1aWxkKClgLCBiZWZvcmUgdGhlIG1vdW50LiBQYXJlbnRcbiAqIHJlY29yZGVycyBkbyBOT1QgcmVjZWl2ZSBhIHJlcGxheS4gSW5zdGVhZCwgdGhpcyBldmVudCBkZWxpdmVyc1xuICogdGhlIHN1YmZsb3cncyBmdWxsIHN0cnVjdHVyZSB2aWEgYHN1YmZsb3dTcGVjYCwgYW5kIGNvbnN1bWVycyBjYW5cbiAqIHdhbGsgaXQgdmlhIGB3YWxrU3ViZmxvd1NwZWNgIGZyb20gYGZvb3RwcmludGpzL3RyYWNlYC5cbiAqXG4gKiBUaGlzIG1hdGNoZXMgYEZsb3dSZWNvcmRlci5vblN1YmZsb3dFbnRyeWAgc2VtYW50aWNzIGF0IHJ1bnRpbWVcbiAqIChwYXJlbnRzIHNlZSB0aGUgYm91bmRhcnksIG5vdCBhIHJlcGxheSBvZiBpbnRlcm5hbHMpIGFuZFxuICogcHJlc2VydmVzIHRoZSBcIm9uZSBwdXJwb3NlIHBlciByZWNvcmRlclwiIGNvbnZlbnRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RydWN0dXJlU3ViZmxvd01vdW50ZWRFdmVudCB7XG4gIC8qKiBTdWJmbG93IGlkZW50aWZpZXIgdGhlIHBhcmVudCBhc3NpZ25lZCBhdCBtb3VudC4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd0lkOiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBzdWJmbG93IG5hbWUuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dOYW1lOiBzdHJpbmc7XG4gIC8qKiBNb3VudCBub2RlIGlkIGluIHRoZSBwYXJlbnQncyBjaGFydC4gKi9cbiAgcmVhZG9ubHkgcm9vdFN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIFRydWUgd2hlbiB0aGUgbW91bnQgdXNlcyBsYXp5IHJlc29sdXRpb24gKGRlZmVycmVkIHN1YmZsb3dcbiAgICogIHJlc29sdXRpb24gdW50aWwgZXhlY3V0aW9uKS4gKi9cbiAgcmVhZG9ubHkgaXNMYXp5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG1vdW50ZWQgc3ViZmxvdydzIGNvbXBsZXRlIHNwZWMg4oCUIHRoZSBTQU1FIE9CSkVDVFxuICAgKiAoPT09IHJlZmVyZW5jZSBlcXVhbGl0eSkgcmVhY2hhYmxlIHZpYSBgc3ViZmxvdy5idWlsZFRpbWVTdHJ1Y3R1cmVgXG4gICAqIGZvciB0aGUgRmxvd0NoYXJ0IHRoZSBjb25zdW1lciBwYXNzZWQgdG8gYGFkZFN1YkZsb3dDaGFydEJyYW5jaGAgL1xuICAgKiBgYWRkU3ViRmxvd0NoYXJ0YCAvIGBhZGRTdWJGbG93Q2hhcnROZXh0YC5cbiAgICpcbiAgICogVU5ERUZJTkVEIGZvciBsYXp5IG1vdW50cyBhdCBidWlsZCB0aW1lIChgaXNMYXp5OiB0cnVlYCkg4oCUIHRoZVxuICAgKiBzdWJmbG93J3Mgc3RydWN0dXJlIGhhc24ndCBiZWVuIHJlc29sdmVkIHlldC4gQ29uc3VtZXJzIHdhaXRpbmcgb25cbiAgICogbGF6eSBzdWJmbG93cyBoYW5kbGUgdGhlIHJ1bnRpbWUgYG9uU3ViZmxvd0VudHJ5YCBldmVudCBpbnN0ZWFkLlxuICAgKlxuICAgKiBJbW11dGFibGUgcG9zdC1idWlsZDsgY29uc3VtZXJzIE1VU1QgTk9UIG11dGF0ZS5cbiAgICpcbiAgICogQGludGVybmFsIGBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmVgIGlzIGxpYnJhcnktaW50ZXJuYWwuXG4gICAqICAgICAgICAgICBVc2UgYHdhbGtTdWJmbG93U3BlY2AgZnJvbSBgZm9vdHByaW50anMvdHJhY2VgIGZvciB0aGVcbiAgICogICAgICAgICAgIHN0YWJsZSBwdWJsaWMgY29udHJhY3QuXG4gICAqL1xuICByZWFkb25seSBzdWJmbG93U3BlYz86IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZTtcblxuICAvKipcbiAgICogTG9jYWwgbW91bnQgaWQgb2YgdGhpcyBzdWJmbG93IHdpdGhpbiBpdHMgcGFyZW50IOKAlCBlcXVhbCB0b1xuICAgKiBgc3ViZmxvd0lkYCBmb3IgdG9wLWxldmVsIG1vdW50cyAoZS5nLiBgJ2F1dGgnYCksIGNvbXBvc2VkXG4gICAqIChgJ2F1dGgvdmVyaWZ5J2ApIGZvciBuZXN0ZWQgbW91bnRzIHdob3NlIHJlY29yZGVyIGlzIGF0dGFjaGVkXG4gICAqIHRvIHRoZSBncmFuZHBhcmVudC4gTWF0Y2hlcyBydW50aW1lIGB0cmF2ZXJzYWxDb250ZXh0LnN1YmZsb3dQYXRoYFxuICAgKiBzZW1hbnRpY3Mg4oCUIE5FVkVSIHByZWZpeGVkIHdpdGggYF9fcm9vdF9fL2AuXG4gICAqL1xuICByZWFkb25seSBzdWJmbG93UGF0aDogc3RyaW5nO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFN0cnVjdHVyZVJlY29yZGVyIGludGVyZmFjZVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogUGx1Z2dhYmxlIG9ic2VydmVyIGZvciBCVUlMRC1USU1FIGNoYXJ0IGNvbnN0cnVjdGlvbiBldmVudHMuXG4gKlxuICogQWxsIG1ldGhvZHMgYXJlIG9wdGlvbmFsIOKAlCBpbXBsZW1lbnQgb25seSB0aGUgaG9va3MgeW91IG5lZWQuXG4gKiBIYW5kbGVycyBmaXJlIFNZTkNIUk9OT1VTTFkgZHVyaW5nIGJ1aWxkZXIgb3BlcmF0aW9ucyBhbmQgYC5idWlsZCgpYC5cbiAqIEEgdGhyb3dpbmcgaGFuZGxlciBpcyBjYXVnaHQgKHNlZSBcIkVycm9yIGlzb2xhdGlvblwiIGluIHRoZSBmaWxlXG4gKiBoZWFkZXIpOyBzdWJzZXF1ZW50IGRpc3BhdGNoIGNvbnRpbnVlcy5cbiAqXG4gKiBMaWZlY3ljbGU6IGVhY2ggYFN0cnVjdHVyZVJlY29yZGVyYCBpbnN0YW5jZSBpcyByZWdpc3RlcmVkIHZpYVxuICogRUlUSEVSIHRoZSBgZmxvd0NoYXJ0KClgIG9wdGlvbnMgYmFnIChgeyBzdHJ1Y3R1cmVSZWNvcmRlcnM6IFtyZWNdIH1gKVxuICogT1IgdGhlIGZsdWVudCBgLmF0dGFjaFN0cnVjdHVyZVJlY29yZGVyKHJlYylgIGNoYWluIOKAlCBzZWUgdGhlIGZpbGVcbiAqIGhlYWRlciBmb3IgdGhlIHRyYWRlLW9mZnMuIFJlZ2lzdHJhdGlvbiBhZnRlciBgLmJ1aWxkKClgIGlzXG4gKiByZWplY3RlZCAoY2hhcnQgaXMgc2VhbGVkKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJ1Y3R1cmVSZWNvcmRlciB7XG4gIC8qKlxuICAgKiBTdGFibGUgaWRlbnRpZmllciDigJQgdXNlZCBieSB0aGUgZGlzcGF0Y2hlciB0byBzY29wZSBlcnJvclxuICAgKiBtZXNzYWdlcyBhbmQgdG8gc3VwcG9ydCBgZGV0YWNoKGlkKWAgbG9va3VwLlxuICAgKlxuICAgKiBDb252ZW50aW9uIChtYXRjaGVzIGBGbG93UmVjb3JkZXIuaWRgIGZyb20gQ0xBVURFLm1kKTpcbiAgICogICAtIGRvbWFpbi1wcmVmaXhlZCBrZWJhYi1jYXNlIChgJ2xlbnMtc3RydWN0dXJlJ2AsXG4gICAqICAgICBgJ2FnZW50Zm9vdHByaW50LWNvbXBvc2l0aW9uJ2AsIGAndHJhY2UtZXhwbGFpbmFibGUnYClcbiAgICogICAtIHNhbWUgaWQg4oaSIG11bHRpcGxlIHJlY29yZGVycyBjb2V4aXN0IChOT1QgZGVkdXBsaWNhdGVkIGJ5XG4gICAqICAgICBpZDsgdGhlIGRpc3BhdGNoZXIgZmlyZXMgZXZlcnkgYXR0YWNoZWQgcmVjb3JkZXIgcmVnYXJkbGVzcylcbiAgICogICAtIGBkZXRhY2goaWQpYCByZW1vdmVzIEVWRVJZIHJlY29yZGVyIHdpdGggdGhhdCBpZCDigJQgYmVcbiAgICogICAgIGludGVudGlvbmFsIGFib3V0IHJldXNlIGlmIHlvdSByZWx5IG9uIHNlbGVjdGl2ZSBkZXRhY2hcbiAgICpcbiAgICogQ2hvb3NlIGEgc3RhYmxlIGlkIGF0IG1vZHVsZSBsb2FkIGFuZCBkb24ndCByYW5kb21pc2UgaXQgYWNyb3NzXG4gICAqIHJ1bnMg4oCUIGl0IGxhbmRzIGluIGBTdHJ1Y3R1cmVCdWlsZEVycm9yLnJlY29yZGVySWRgIHNvIGRlYnVnXG4gICAqIG91dHB1dCBpcyBncmVwcGFibGUuXG4gICAqL1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIG9uU3RhZ2VBZGRlZD8oZXZlbnQ6IFN0cnVjdHVyZVN0YWdlQWRkZWRFdmVudCk6IHZvaWQ7XG4gIG9uRWRnZUFkZGVkPyhldmVudDogU3RydWN0dXJlRWRnZUFkZGVkRXZlbnQpOiB2b2lkO1xuICBvbkxvb3BFZGdlQWRkZWQ/KGV2ZW50OiBTdHJ1Y3R1cmVMb29wRWRnZUFkZGVkRXZlbnQpOiB2b2lkO1xuICBvbkRlY2lkZXJDb21wbGV0ZT8oZXZlbnQ6IFN0cnVjdHVyZURlY2lkZXJDb21wbGV0ZUV2ZW50KTogdm9pZDtcbiAgb25TdWJmbG93TW91bnRlZD8oZXZlbnQ6IFN0cnVjdHVyZVN1YmZsb3dNb3VudGVkRXZlbnQpOiB2b2lkO1xufVxuIl19
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StructureRecorderDispatcher — Fans build-time structure events out to N
|
|
3
|
+
* attached `StructureRecorder` instances.
|
|
4
|
+
*
|
|
5
|
+
* Mirrors `FlowRecorderDispatcher` (engine/narrative/) exactly:
|
|
6
|
+
*
|
|
7
|
+
* - `recorders: StructureRecorder[]` — attach order preserved
|
|
8
|
+
* - per-event fire methods early-return when no recorders attached
|
|
9
|
+
* (zero-allocation fast path)
|
|
10
|
+
* - per-recorder try/catch isolates errors; one bad recorder cannot
|
|
11
|
+
* cascade into the chain build or sibling recorders
|
|
12
|
+
* - errors route to BOTH the dev-mode console warning (matches
|
|
13
|
+
* FlowRecorderDispatcher) AND a structured `buildErrors`
|
|
14
|
+
* accumulator so consumers can inspect failures post-build
|
|
15
|
+
* - spec payloads are NOT frozen at dispatch time — handlers must
|
|
16
|
+
* respect the `readonly` markers on event payload types (the
|
|
17
|
+
* builder still needs to mutate `spec.next` after the immediate
|
|
18
|
+
* `onStageAdded` fires; see `fireStageAdded` for the full note,
|
|
19
|
+
* and `StructureRecorder.ts` header "Spec mutation" for the
|
|
20
|
+
* trust-model implications)
|
|
21
|
+
*
|
|
22
|
+
* The dispatcher itself owns NO chart state. The builder owns the
|
|
23
|
+
* dispatcher; events fire from the natural mutation points in
|
|
24
|
+
* FlowChartBuilder (L7.3).
|
|
25
|
+
*/
|
|
26
|
+
import { isDevMode } from '../../scope/detectCircular.js';
|
|
27
|
+
/**
|
|
28
|
+
* Soft cap on the `errors[]` accumulator. Builds with thousands of
|
|
29
|
+
* stages and a misbehaving recorder that throws on every event would
|
|
30
|
+
* otherwise retain unbounded `{recorderId, method, message, error}`
|
|
31
|
+
* records — each closing over the thrown value (often an Error with
|
|
32
|
+
* a captured stack), preventing GC of any closure data the throw
|
|
33
|
+
* captured. The cap is for diagnosis, not forensic completeness;
|
|
34
|
+
* once exceeded, a single sentinel record signals truncation.
|
|
35
|
+
*/
|
|
36
|
+
const STRUCTURE_BUILD_ERRORS_CAP = 100;
|
|
37
|
+
export class StructureRecorderDispatcher {
|
|
38
|
+
recorders = [];
|
|
39
|
+
errors = [];
|
|
40
|
+
_truncated = false;
|
|
41
|
+
/** Attach a `StructureRecorder`. Multiple recorders with the same
|
|
42
|
+
* id are allowed; the convention is one id per logical concern. */
|
|
43
|
+
attach(recorder) {
|
|
44
|
+
this.recorders.push(recorder);
|
|
45
|
+
}
|
|
46
|
+
/** Detach every recorder with the given id. */
|
|
47
|
+
detach(id) {
|
|
48
|
+
this.recorders = this.recorders.filter((r) => r.id !== id);
|
|
49
|
+
}
|
|
50
|
+
/** Defensive copy of the attached recorders — used in tests + by
|
|
51
|
+
* tooling that wants to inspect what's registered. */
|
|
52
|
+
getRecorders() {
|
|
53
|
+
return [...this.recorders];
|
|
54
|
+
}
|
|
55
|
+
/** Find one recorder by id. */
|
|
56
|
+
getRecorderById(id) {
|
|
57
|
+
return this.recorders.find((r) => r.id === id);
|
|
58
|
+
}
|
|
59
|
+
/** Read accumulated errors from this build. Returns a defensive copy. */
|
|
60
|
+
getErrors() {
|
|
61
|
+
return [...this.errors];
|
|
62
|
+
}
|
|
63
|
+
// ── fire* methods — called by the builder at each event moment ─────
|
|
64
|
+
fireStageAdded(event) {
|
|
65
|
+
if (this.recorders.length === 0)
|
|
66
|
+
return;
|
|
67
|
+
// NOTE: `event.spec` is NOT frozen here. `onStageAdded` fires
|
|
68
|
+
// IMMEDIATELY when a spec node is added — the builder still needs
|
|
69
|
+
// to mutate `spec.next` later (in the subsequent `addX` call).
|
|
70
|
+
// Freezing here would break the builder. Handler mutation of
|
|
71
|
+
// `event.spec` is documented as undefined behavior — see the
|
|
72
|
+
// StructureRecorder type's JSDoc + readonly markers on the
|
|
73
|
+
// event payload interface.
|
|
74
|
+
for (const r of this.recorders) {
|
|
75
|
+
try {
|
|
76
|
+
r.onStageAdded?.(event);
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
this.recordError(r.id, 'onStageAdded', err);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
fireEdgeAdded(event) {
|
|
84
|
+
if (this.recorders.length === 0)
|
|
85
|
+
return;
|
|
86
|
+
// No spec on this event — pass through.
|
|
87
|
+
for (const r of this.recorders) {
|
|
88
|
+
try {
|
|
89
|
+
r.onEdgeAdded?.(event);
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
this.recordError(r.id, 'onEdgeAdded', err);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
fireLoopEdgeAdded(event) {
|
|
97
|
+
if (this.recorders.length === 0)
|
|
98
|
+
return;
|
|
99
|
+
for (const r of this.recorders) {
|
|
100
|
+
try {
|
|
101
|
+
r.onLoopEdgeAdded?.(event);
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
this.recordError(r.id, 'onLoopEdgeAdded', err);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
fireDeciderComplete(event) {
|
|
109
|
+
if (this.recorders.length === 0)
|
|
110
|
+
return;
|
|
111
|
+
for (const r of this.recorders) {
|
|
112
|
+
try {
|
|
113
|
+
r.onDeciderComplete?.(event);
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
this.recordError(r.id, 'onDeciderComplete', err);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
fireSubflowMounted(event) {
|
|
121
|
+
if (this.recorders.length === 0)
|
|
122
|
+
return;
|
|
123
|
+
for (const r of this.recorders) {
|
|
124
|
+
try {
|
|
125
|
+
r.onSubflowMounted?.(event);
|
|
126
|
+
}
|
|
127
|
+
catch (err) {
|
|
128
|
+
this.recordError(r.id, 'onSubflowMounted', err);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Externally-callable error capture for events the builder fires
|
|
134
|
+
* OUTSIDE the normal fire* fan-out path — specifically the seed
|
|
135
|
+
* replay in `FlowChartBuilder.attachStructureRecorder()`, which
|
|
136
|
+
* targets one specific recorder rather than every attached recorder.
|
|
137
|
+
*
|
|
138
|
+
* Same observability contract as the internal `recordError`:
|
|
139
|
+
* accumulates on `getErrors()` AND logs in dev mode.
|
|
140
|
+
*/
|
|
141
|
+
recordErrorForReplay(recorderId, method, err) {
|
|
142
|
+
this.recordError(recorderId, method, err);
|
|
143
|
+
}
|
|
144
|
+
// ── Internals ───────────────────────────────────────────────────────
|
|
145
|
+
recordError(recorderId, method, err) {
|
|
146
|
+
const e = err;
|
|
147
|
+
const message = typeof e?.message === 'string' ? e.message : String(err);
|
|
148
|
+
// Soft cap to prevent unbounded growth + closure retention. Once
|
|
149
|
+
// hit, push a single sentinel describing the truncation and drop
|
|
150
|
+
// further records on the floor (still log in dev mode so the
|
|
151
|
+
// consumer notices the spam at its source).
|
|
152
|
+
if (this.errors.length < STRUCTURE_BUILD_ERRORS_CAP) {
|
|
153
|
+
this.errors.push({ recorderId, method, message, error: err });
|
|
154
|
+
}
|
|
155
|
+
else if (!this._truncated) {
|
|
156
|
+
this._truncated = true;
|
|
157
|
+
this.errors.push({
|
|
158
|
+
recorderId: '__truncated__',
|
|
159
|
+
method: '__truncated__',
|
|
160
|
+
message: `StructureRecorderDispatcher: error accumulator truncated at ${STRUCTURE_BUILD_ERRORS_CAP} entries; further errors suppressed.`,
|
|
161
|
+
error: null,
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
if (isDevMode()) {
|
|
165
|
+
// eslint-disable-next-line no-console
|
|
166
|
+
console.warn(`[footprint] StructureRecorderDispatcher: recorder "${recorderId}" threw in ${method}: ${message}. ` +
|
|
167
|
+
'See builder.getStructureBuildErrors() for the full list.');
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RydWN0dXJlUmVjb3JkZXJEaXNwYXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9idWlsZGVyL3N0cnVjdHVyZS9TdHJ1Y3R1cmVSZWNvcmRlckRpc3BhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQTJCMUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLDBCQUEwQixHQUFHLEdBQUcsQ0FBQztBQUV2QyxNQUFNLE9BQU8sMkJBQTJCO0lBQzlCLFNBQVMsR0FBd0IsRUFBRSxDQUFDO0lBQzNCLE1BQU0sR0FBMEIsRUFBRSxDQUFDO0lBQzVDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFFM0I7d0VBQ29FO0lBQ3BFLE1BQU0sQ0FBQyxRQUEyQjtRQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsK0NBQStDO0lBQy9DLE1BQU0sQ0FBQyxFQUFVO1FBQ2YsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7MkRBQ3VEO0lBQ3ZELFlBQVk7UUFDVixPQUFPLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELCtCQUErQjtJQUMvQixlQUFlLENBQWtELEVBQVU7UUFDekUsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQWtCLENBQUM7SUFDbEUsQ0FBQztJQUVELHlFQUF5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QyxJQUFJLENBQ1Ysc0RBQXNELFVBQVUsY0FBYyxNQUFNLEtBQUssT0FBTyxJQUFJO2dCQUNsRywwREFBMEQsQ0FDN0QsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN0cnVjdHVyZVJlY29yZGVyRGlzcGF0Y2hlciDigJQgRmFucyBidWlsZC10aW1lIHN0cnVjdHVyZSBldmVudHMgb3V0IHRvIE5cbiAqIGF0dGFjaGVkIGBTdHJ1Y3R1cmVSZWNvcmRlcmAgaW5zdGFuY2VzLlxuICpcbiAqIE1pcnJvcnMgYEZsb3dSZWNvcmRlckRpc3BhdGNoZXJgIChlbmdpbmUvbmFycmF0aXZlLykgZXhhY3RseTpcbiAqXG4gKiAgIC0gYHJlY29yZGVyczogU3RydWN0dXJlUmVjb3JkZXJbXWAg4oCUIGF0dGFjaCBvcmRlciBwcmVzZXJ2ZWRcbiAqICAgLSBwZXItZXZlbnQgZmlyZSBtZXRob2RzIGVhcmx5LXJldHVybiB3aGVuIG5vIHJlY29yZGVycyBhdHRhY2hlZFxuICogICAgICh6ZXJvLWFsbG9jYXRpb24gZmFzdCBwYXRoKVxuICogICAtIHBlci1yZWNvcmRlciB0cnkvY2F0Y2ggaXNvbGF0ZXMgZXJyb3JzOyBvbmUgYmFkIHJlY29yZGVyIGNhbm5vdFxuICogICAgIGNhc2NhZGUgaW50byB0aGUgY2hhaW4gYnVpbGQgb3Igc2libGluZyByZWNvcmRlcnNcbiAqICAgLSBlcnJvcnMgcm91dGUgdG8gQk9USCB0aGUgZGV2LW1vZGUgY29uc29sZSB3YXJuaW5nIChtYXRjaGVzXG4gKiAgICAgRmxvd1JlY29yZGVyRGlzcGF0Y2hlcikgQU5EIGEgc3RydWN0dXJlZCBgYnVpbGRFcnJvcnNgXG4gKiAgICAgYWNjdW11bGF0b3Igc28gY29uc3VtZXJzIGNhbiBpbnNwZWN0IGZhaWx1cmVzIHBvc3QtYnVpbGRcbiAqICAgLSBzcGVjIHBheWxvYWRzIGFyZSBOT1QgZnJvemVuIGF0IGRpc3BhdGNoIHRpbWUg4oCUIGhhbmRsZXJzIG11c3RcbiAqICAgICByZXNwZWN0IHRoZSBgcmVhZG9ubHlgIG1hcmtlcnMgb24gZXZlbnQgcGF5bG9hZCB0eXBlcyAodGhlXG4gKiAgICAgYnVpbGRlciBzdGlsbCBuZWVkcyB0byBtdXRhdGUgYHNwZWMubmV4dGAgYWZ0ZXIgdGhlIGltbWVkaWF0ZVxuICogICAgIGBvblN0YWdlQWRkZWRgIGZpcmVzOyBzZWUgYGZpcmVTdGFnZUFkZGVkYCBmb3IgdGhlIGZ1bGwgbm90ZSxcbiAqICAgICBhbmQgYFN0cnVjdHVyZVJlY29yZGVyLnRzYCBoZWFkZXIgXCJTcGVjIG11dGF0aW9uXCIgZm9yIHRoZVxuICogICAgIHRydXN0LW1vZGVsIGltcGxpY2F0aW9ucylcbiAqXG4gKiBUaGUgZGlzcGF0Y2hlciBpdHNlbGYgb3ducyBOTyBjaGFydCBzdGF0ZS4gVGhlIGJ1aWxkZXIgb3ducyB0aGVcbiAqIGRpc3BhdGNoZXI7IGV2ZW50cyBmaXJlIGZyb20gdGhlIG5hdHVyYWwgbXV0YXRpb24gcG9pbnRzIGluXG4gKiBGbG93Q2hhcnRCdWlsZGVyIChMNy4zKS5cbiAqL1xuXG5pbXBvcnQgeyBpc0Rldk1vZGUgfSBmcm9tICcuLi8uLi9zY29wZS9kZXRlY3RDaXJjdWxhci5qcyc7XG5pbXBvcnQgdHlwZSB7IEZsb3dDaGFydFNwZWMgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIFN0cnVjdHVyZURlY2lkZXJDb21wbGV0ZUV2ZW50LFxuICBTdHJ1Y3R1cmVFZGdlQWRkZWRFdmVudCxcbiAgU3RydWN0dXJlTG9vcEVkZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVSZWNvcmRlcixcbiAgU3RydWN0dXJlU3RhZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVTdWJmbG93TW91bnRlZEV2ZW50LFxufSBmcm9tICcuL1N0cnVjdHVyZVJlY29yZGVyLmpzJztcblxuLyoqIFN0cnVjdHVyZWQgZXJyb3IgY2FwdHVyZWQgd2hlbiBhIHJlY29yZGVyIHRocm93cy4gUmVhZCBwb3N0LWJ1aWxkXG4gKiAgdmlhIGBidWlsZGVyLmdldFN0cnVjdHVyZUJ1aWxkRXJyb3JzKClgIOKAlCBjYWxsIG9uIHRoZSBCVUlMREVSXG4gKiAgcmVmZXJlbmNlIChOT1QgdGhlIGNoYXJ0IHJldHVybmVkIGJ5IGAuYnVpbGQoKWApLiBDYXB0dXJlIHRoZVxuICogIGJ1aWxkZXIgcmVmZXJlbmNlIGJlZm9yZSBgLmJ1aWxkKClgIGlmIHlvdSBuZWVkIHBvc3QtYnVpbGQgYWNjZXNzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJ1Y3R1cmVCdWlsZEVycm9yIHtcbiAgLyoqIFdoaWNoIHJlY29yZGVyJ3MgaGFuZGxlciB0aHJldy4gKi9cbiAgcmVhZG9ubHkgcmVjb3JkZXJJZDogc3RyaW5nO1xuICAvKiogV2hpY2ggZXZlbnQgbWV0aG9kIChgJ29uU3RhZ2VBZGRlZCdgLCBgJ29uRWRnZUFkZGVkJ2AsIC4uLikuICovXG4gIHJlYWRvbmx5IG1ldGhvZDogc3RyaW5nO1xuICAvKiogRXJyb3IgbWVzc2FnZSBleHRyYWN0ZWQgZnJvbSB0aGUgdGhyb3duIHZhbHVlLiAqL1xuICByZWFkb25seSBtZXNzYWdlOiBzdHJpbmc7XG4gIC8qKiBUaGUgb3JpZ2luYWwgdGhyb3duIHZhbHVlIOKAlCBgRXJyb3JgIGluc3RhbmNlIG9yIHdoYXRldmVyIHRoZVxuICAgKiAgcmVjb3JkZXIgdGhyZXcuIFVzZWZ1bCB3aGVuIGRpYWdub3NpcyBuZWVkcyBhIHN0YWNrIHRyYWNlLiAqL1xuICByZWFkb25seSBlcnJvcjogdW5rbm93bjtcbn1cblxuLyoqXG4gKiBTb2Z0IGNhcCBvbiB0aGUgYGVycm9yc1tdYCBhY2N1bXVsYXRvci4gQnVpbGRzIHdpdGggdGhvdXNhbmRzIG9mXG4gKiBzdGFnZXMgYW5kIGEgbWlzYmVoYXZpbmcgcmVjb3JkZXIgdGhhdCB0aHJvd3Mgb24gZXZlcnkgZXZlbnQgd291bGRcbiAqIG90aGVyd2lzZSByZXRhaW4gdW5ib3VuZGVkIGB7cmVjb3JkZXJJZCwgbWV0aG9kLCBtZXNzYWdlLCBlcnJvcn1gXG4gKiByZWNvcmRzIOKAlCBlYWNoIGNsb3Npbmcgb3ZlciB0aGUgdGhyb3duIHZhbHVlIChvZnRlbiBhbiBFcnJvciB3aXRoXG4gKiBhIGNhcHR1cmVkIHN0YWNrKSwgcHJldmVudGluZyBHQyBvZiBhbnkgY2xvc3VyZSBkYXRhIHRoZSB0aHJvd1xuICogY2FwdHVyZWQuIFRoZSBjYXAgaXMgZm9yIGRpYWdub3Npcywgbm90IGZvcmVuc2ljIGNvbXBsZXRlbmVzcztcbiAqIG9uY2UgZXhjZWVkZWQsIGEgc2luZ2xlIHNlbnRpbmVsIHJlY29yZCBzaWduYWxzIHRydW5jYXRpb24uXG4gKi9cbmNvbnN0IFNUUlVDVFVSRV9CVUlMRF9FUlJPUlNfQ0FQID0gMTAwO1xuXG5leHBvcnQgY2xhc3MgU3RydWN0dXJlUmVjb3JkZXJEaXNwYXRjaGVyIHtcbiAgcHJpdmF0ZSByZWNvcmRlcnM6IFN0cnVjdHVyZVJlY29yZGVyW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBlcnJvcnM6IFN0cnVjdHVyZUJ1aWxkRXJyb3JbXSA9IFtdO1xuICBwcml2YXRlIF90cnVuY2F0ZWQgPSBmYWxzZTtcblxuICAvKiogQXR0YWNoIGEgYFN0cnVjdHVyZVJlY29yZGVyYC4gTXVsdGlwbGUgcmVjb3JkZXJzIHdpdGggdGhlIHNhbWVcbiAgICogIGlkIGFyZSBhbGxvd2VkOyB0aGUgY29udmVudGlvbiBpcyBvbmUgaWQgcGVyIGxvZ2ljYWwgY29uY2Vybi4gKi9cbiAgYXR0YWNoKHJlY29yZGVyOiBTdHJ1Y3R1cmVSZWNvcmRlcik6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkZXJzLnB1c2gocmVjb3JkZXIpO1xuICB9XG5cbiAgLyoqIERldGFjaCBldmVyeSByZWNvcmRlciB3aXRoIHRoZSBnaXZlbiBpZC4gKi9cbiAgZGV0YWNoKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZGVycyA9IHRoaXMucmVjb3JkZXJzLmZpbHRlcigocikgPT4gci5pZCAhPT0gaWQpO1xuICB9XG5cbiAgLyoqIERlZmVuc2l2ZSBjb3B5IG9mIHRoZSBhdHRhY2hlZCByZWNvcmRlcnMg4oCUIHVzZWQgaW4gdGVzdHMgKyBieVxuICAgKiAgdG9vbGluZyB0aGF0IHdhbnRzIHRvIGluc3BlY3Qgd2hhdCdzIHJlZ2lzdGVyZWQuICovXG4gIGdldFJlY29yZGVycygpOiBTdHJ1Y3R1cmVSZWNvcmRlcltdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMucmVjb3JkZXJzXTtcbiAgfVxuXG4gIC8qKiBGaW5kIG9uZSByZWNvcmRlciBieSBpZC4gKi9cbiAgZ2V0UmVjb3JkZXJCeUlkPFQgZXh0ZW5kcyBTdHJ1Y3R1cmVSZWNvcmRlciA9IFN0cnVjdHVyZVJlY29yZGVyPihpZDogc3RyaW5nKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucmVjb3JkZXJzLmZpbmQoKHIpID0+IHIuaWQgPT09IGlkKSBhcyBUIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIFJlYWQgYWNjdW11bGF0ZWQgZXJyb3JzIGZyb20gdGhpcyBidWlsZC4gUmV0dXJucyBhIGRlZmVuc2l2ZSBjb3B5LiAqL1xuICBnZXRFcnJvcnMoKTogU3RydWN0dXJlQnVpbGRFcnJvcltdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuZXJyb3JzXTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBmaXJlKiBtZXRob2RzIOKAlCBjYWxsZWQgYnkgdGhlIGJ1aWxkZXIgYXQgZWFjaCBldmVudCBtb21lbnQg4pSA4pSA4pSA4pSA4pSAXG5cbiAgZmlyZVN0YWdlQWRkZWQoZXZlbnQ6IFN0cnVjdHVyZVN0YWdlQWRkZWRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAvLyBOT1RFOiBgZXZlbnQuc3BlY2AgaXMgTk9UIGZyb3plbiBoZXJlLiBgb25TdGFnZUFkZGVkYCBmaXJlc1xuICAgIC8vIElNTUVESUFURUxZIHdoZW4gYSBzcGVjIG5vZGUgaXMgYWRkZWQg4oCUIHRoZSBidWlsZGVyIHN0aWxsIG5lZWRzXG4gICAgLy8gdG8gbXV0YXRlIGBzcGVjLm5leHRgIGxhdGVyIChpbiB0aGUgc3Vic2VxdWVudCBgYWRkWGAgY2FsbCkuXG4gICAgLy8gRnJlZXppbmcgaGVyZSB3b3VsZCBicmVhayB0aGUgYnVpbGRlci4gSGFuZGxlciBtdXRhdGlvbiBvZlxuICAgIC8vIGBldmVudC5zcGVjYCBpcyBkb2N1bWVudGVkIGFzIHVuZGVmaW5lZCBiZWhhdmlvciDigJQgc2VlIHRoZVxuICAgIC8vIFN0cnVjdHVyZVJlY29yZGVyIHR5cGUncyBKU0RvYyArIHJlYWRvbmx5IG1hcmtlcnMgb24gdGhlXG4gICAgLy8gZXZlbnQgcGF5bG9hZCBpbnRlcmZhY2UuXG4gICAgZm9yIChjb25zdCByIG9mIHRoaXMucmVjb3JkZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByLm9uU3RhZ2VBZGRlZD8uKGV2ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLnJlY29yZEVycm9yKHIuaWQsICdvblN0YWdlQWRkZWQnLCBlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZpcmVFZGdlQWRkZWQoZXZlbnQ6IFN0cnVjdHVyZUVkZ2VBZGRlZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIC8vIE5vIHNwZWMgb24gdGhpcyBldmVudCDigJQgcGFzcyB0aHJvdWdoLlxuICAgIGZvciAoY29uc3QgciBvZiB0aGlzLnJlY29yZGVycykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgci5vbkVkZ2VBZGRlZD8uKGV2ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLnJlY29yZEVycm9yKHIuaWQsICdvbkVkZ2VBZGRlZCcsIGVycik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZmlyZUxvb3BFZGdlQWRkZWQoZXZlbnQ6IFN0cnVjdHVyZUxvb3BFZGdlQWRkZWRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBmb3IgKGNvbnN0IHIgb2YgdGhpcy5yZWNvcmRlcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHIub25Mb29wRWRnZUFkZGVkPy4oZXZlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMucmVjb3JkRXJyb3Ioci5pZCwgJ29uTG9vcEVkZ2VBZGRlZCcsIGVycik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZmlyZURlY2lkZXJDb21wbGV0ZShldmVudDogU3RydWN0dXJlRGVjaWRlckNvbXBsZXRlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgZm9yIChjb25zdCByIG9mIHRoaXMucmVjb3JkZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByLm9uRGVjaWRlckNvbXBsZXRlPy4oZXZlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMucmVjb3JkRXJyb3Ioci5pZCwgJ29uRGVjaWRlckNvbXBsZXRlJywgZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmaXJlU3ViZmxvd01vdW50ZWQoZXZlbnQ6IFN0cnVjdHVyZVN1YmZsb3dNb3VudGVkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgZm9yIChjb25zdCByIG9mIHRoaXMucmVjb3JkZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByLm9uU3ViZmxvd01vdW50ZWQ/LihldmVudCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5yZWNvcmRFcnJvcihyLmlkLCAnb25TdWJmbG93TW91bnRlZCcsIGVycik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4dGVybmFsbHktY2FsbGFibGUgZXJyb3IgY2FwdHVyZSBmb3IgZXZlbnRzIHRoZSBidWlsZGVyIGZpcmVzXG4gICAqIE9VVFNJREUgdGhlIG5vcm1hbCBmaXJlKiBmYW4tb3V0IHBhdGgg4oCUIHNwZWNpZmljYWxseSB0aGUgc2VlZFxuICAgKiByZXBsYXkgaW4gYEZsb3dDaGFydEJ1aWxkZXIuYXR0YWNoU3RydWN0dXJlUmVjb3JkZXIoKWAsIHdoaWNoXG4gICAqIHRhcmdldHMgb25lIHNwZWNpZmljIHJlY29yZGVyIHJhdGhlciB0aGFuIGV2ZXJ5IGF0dGFjaGVkIHJlY29yZGVyLlxuICAgKlxuICAgKiBTYW1lIG9ic2VydmFiaWxpdHkgY29udHJhY3QgYXMgdGhlIGludGVybmFsIGByZWNvcmRFcnJvcmA6XG4gICAqIGFjY3VtdWxhdGVzIG9uIGBnZXRFcnJvcnMoKWAgQU5EIGxvZ3MgaW4gZGV2IG1vZGUuXG4gICAqL1xuICByZWNvcmRFcnJvckZvclJlcGxheShyZWNvcmRlcklkOiBzdHJpbmcsIG1ldGhvZDogc3RyaW5nLCBlcnI6IHVua25vd24pOiB2b2lkIHtcbiAgICB0aGlzLnJlY29yZEVycm9yKHJlY29yZGVySWQsIG1ldGhvZCwgZXJyKTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBJbnRlcm5hbHMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgcHJpdmF0ZSByZWNvcmRFcnJvcihyZWNvcmRlcklkOiBzdHJpbmcsIG1ldGhvZDogc3RyaW5nLCBlcnI6IHVua25vd24pOiB2b2lkIHtcbiAgICBjb25zdCBlID0gZXJyIGFzIHsgbWVzc2FnZT86IHVua25vd24gfSB8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBtZXNzYWdlID0gdHlwZW9mIGU/Lm1lc3NhZ2UgPT09ICdzdHJpbmcnID8gZS5tZXNzYWdlIDogU3RyaW5nKGVycik7XG4gICAgLy8gU29mdCBjYXAgdG8gcHJldmVudCB1bmJvdW5kZWQgZ3Jvd3RoICsgY2xvc3VyZSByZXRlbnRpb24uIE9uY2VcbiAgICAvLyBoaXQsIHB1c2ggYSBzaW5nbGUgc2VudGluZWwgZGVzY3JpYmluZyB0aGUgdHJ1bmNhdGlvbiBhbmQgZHJvcFxuICAgIC8vIGZ1cnRoZXIgcmVjb3JkcyBvbiB0aGUgZmxvb3IgKHN0aWxsIGxvZyBpbiBkZXYgbW9kZSBzbyB0aGVcbiAgICAvLyBjb25zdW1lciBub3RpY2VzIHRoZSBzcGFtIGF0IGl0cyBzb3VyY2UpLlxuICAgIGlmICh0aGlzLmVycm9ycy5sZW5ndGggPCBTVFJVQ1RVUkVfQlVJTERfRVJST1JTX0NBUCkge1xuICAgICAgdGhpcy5lcnJvcnMucHVzaCh7IHJlY29yZGVySWQsIG1ldGhvZCwgbWVzc2FnZSwgZXJyb3I6IGVyciB9KTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLl90cnVuY2F0ZWQpIHtcbiAgICAgIHRoaXMuX3RydW5jYXRlZCA9IHRydWU7XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKHtcbiAgICAgICAgcmVjb3JkZXJJZDogJ19fdHJ1bmNhdGVkX18nLFxuICAgICAgICBtZXRob2Q6ICdfX3RydW5jYXRlZF9fJyxcbiAgICAgICAgbWVzc2FnZTogYFN0cnVjdHVyZVJlY29yZGVyRGlzcGF0Y2hlcjogZXJyb3IgYWNjdW11bGF0b3IgdHJ1bmNhdGVkIGF0ICR7U1RSVUNUVVJFX0JVSUxEX0VSUk9SU19DQVB9IGVudHJpZXM7IGZ1cnRoZXIgZXJyb3JzIHN1cHByZXNzZWQuYCxcbiAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBgW2Zvb3RwcmludF0gU3RydWN0dXJlUmVjb3JkZXJEaXNwYXRjaGVyOiByZWNvcmRlciBcIiR7cmVjb3JkZXJJZH1cIiB0aHJldyBpbiAke21ldGhvZH06ICR7bWVzc2FnZX0uIGAgK1xuICAgICAgICAgICdTZWUgYnVpbGRlci5nZXRTdHJ1Y3R1cmVCdWlsZEVycm9ycygpIGZvciB0aGUgZnVsbCBsaXN0LicsXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG4vKiogUmUtZXhwb3J0IHRoZSBGbG93Q2hhcnRTcGVjIHR5cGUgZm9yIGRvd25zdHJlYW0gdHlwZSBjb21wbGV0ZW5lc3MuICovXG5leHBvcnQgdHlwZSB7IEZsb3dDaGFydFNwZWMgfTtcbiJdfQ==
|
|
@@ -9,4 +9,4 @@
|
|
|
9
9
|
* The builder remains standalone at runtime.
|
|
10
10
|
*/
|
|
11
11
|
export { ArrayMergeMode } from '../engine/types.js';
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2J1aWxkZXIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7OztHQVNHO0FBb0JILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogYnVpbGRlci90eXBlcy50cyDigJQgQWxsIHR5cGVzIHVzZWQgYnkgdGhlIGJ1aWxkZXIgbGlicmFyeS5cbiAqXG4gKiBTaGFyZWQgdHlwZXMgKFN0YWdlTm9kZSwgU3RhZ2VGdW5jdGlvbiwgZXRjLikgYXJlIGltcG9ydGVkIGZyb20gdGhlIGVuZ2luZS5cbiAqIEJ1aWxkZXItc3BlY2lmaWMgdHlwZXMgKEZsb3dDaGFydFNwZWMsIEZsb3dDaGFydCwgU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlKVxuICogYXJlIGRlZmluZWQgbG9jYWxseSDigJQgdGhleSBjYXJyeSBidWlsZGVyLW9ubHkgZmllbGRzIChkZXNjcmlwdGlvbiwgb3V0cHV0TWFwcGVyLCBldGMuKS5cbiAqXG4gKiBOT1RFOiBBbGwgZW5naW5lIGltcG9ydHMgYXJlIGBpbXBvcnQgdHlwZWAg4oCUIHplcm8gcnVudGltZSBkZXBlbmRlbmN5LlxuICogVGhlIGJ1aWxkZXIgcmVtYWlucyBzdGFuZGFsb25lIGF0IHJ1bnRpbWUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBTdGFnZU5vZGUgfSBmcm9tICcuLi9lbmdpbmUvZ3JhcGgvU3RhZ2VOb2RlLmpzJztcbmltcG9ydCB0eXBlIHsgSUxvZ2dlciwgU2NvcGVGYWN0b3J5LCBTdGFnZUZ1bmN0aW9uLCBUcmF2ZXJzYWxFeHRyYWN0b3IgfSBmcm9tICcuLi9lbmdpbmUvdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBTY29wZVByb3RlY3Rpb25Nb2RlIH0gZnJvbSAnLi4vc2NvcGUvcHJvdGVjdGlvbi90eXBlcy5qcyc7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gUmUtZXhwb3J0cyBmcm9tIGVuZ2luZSAoY2Fub25pY2FsIGRlZmluaXRpb25zKVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIHsgUmVzdW1lRm4sIFN0YWdlTm9kZSB9IGZyb20gJy4uL2VuZ2luZS9ncmFwaC9TdGFnZU5vZGUuanMnO1xuZXhwb3J0IHR5cGUge1xuICBJTG9nZ2VyLFxuICBTdGFnZUZ1bmN0aW9uLFxuICBTdHJlYW1DYWxsYmFjayxcbiAgU3RyZWFtSGFuZGxlcnMsXG4gIFN0cmVhbUxpZmVjeWNsZUhhbmRsZXIsXG4gIFN0cmVhbVRva2VuSGFuZGxlcixcbiAgU3ViZmxvd01vdW50T3B0aW9ucyxcbn0gZnJvbSAnLi4vZW5naW5lL3R5cGVzLmpzJztcbmV4cG9ydCB7IEFycmF5TWVyZ2VNb2RlIH0gZnJvbSAnLi4vZW5naW5lL3R5cGVzLmpzJztcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBBbGlhc2VzXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIFJlbGF4ZWQtZ2VuZXJpYyBhbGlhcyBmb3IgYnVpbGRlciBlcmdvbm9taWNzLiAqL1xuZXhwb3J0IHR5cGUgU3RhZ2VGbiA9IFN0YWdlRnVuY3Rpb248YW55LCBhbnk+O1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFNjb3BlIFByb3RlY3Rpb24g4oCUIGNhbm9uaWNhbCBkZWZpbml0aW9uIGluIHNjb3BlL3Byb3RlY3Rpb24vdHlwZXMudHNcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSB7IFNjb3BlUHJvdGVjdGlvbk1vZGUgfTtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTZXJpYWxpemVkIFBpcGVsaW5lIFN0cnVjdHVyZSAoSlNPTi1zYWZlLCBmb3IgdmlzdWFsaXphdGlvbilcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgaW50ZXJmYWNlIFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgaWQ6IHN0cmluZztcbiAgdHlwZTogJ3N0YWdlJyB8ICdkZWNpZGVyJyB8ICdzZWxlY3RvcicgfCAnZm9yaycgfCAnc3RyZWFtaW5nJyB8ICdzdWJmbG93JyB8ICdsb29wJztcbiAgLyoqIFNlbWFudGljIGljb24gaGludCBmb3IgdmlzdWFsaXphdGlvbiAoZS5nLiwgXCJsbG1cIiwgXCJ0b29sXCIsIFwicmFnXCIsIFwiYWdlbnRcIiwgXCJzdGFydFwiKSAqL1xuICBpY29uPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmVbXTtcbiAgbmV4dD86IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZTtcbiAgaGFzRGVjaWRlcj86IGJvb2xlYW47XG4gIGhhc1NlbGVjdG9yPzogYm9vbGVhbjtcbiAgYnJhbmNoSWRzPzogc3RyaW5nW107XG4gIGxvb3BUYXJnZXQ/OiBzdHJpbmc7XG4gIGlzU3RyZWFtaW5nPzogYm9vbGVhbjtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIGlzUGFyYWxsZWxDaGlsZD86IGJvb2xlYW47XG4gIHBhcmFsbGVsR3JvdXBJZD86IHN0cmluZztcbiAgaXNTdWJmbG93Um9vdD86IGJvb2xlYW47XG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgc3ViZmxvd05hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBOZXN0ZWQgcGlwZWxpbmUgc3RydWN0dXJlIGZvciBhIHN1YmZsb3cgbm9kZS5cbiAgICogV0FSTklORzogQW55IGZ1dHVyZSB3YWxrZXIgdGhhdCB0cmF2ZXJzZXMgdGhpcyBmaWVsZCByZWN1cnNpdmVseSBtdXN0IGFwcGx5IGl0cyBvd25cbiAgICogZGVwdGggZ3VhcmQgKHNlZSBNQVhfV0FMS19ERVBUSCBpbiBjb250cmFjdC9vcGVuYXBpLnRzKS4gVGhlIGN1cnJlbnQgYGJ1aWxkRGVzY3JpcHRpb25gXG4gICAqIHdhbGsgaW4gb3BlbmFwaS50cyBkb2VzIE5PVCB0cmF2ZXJzZSBzdWJmbG93U3RydWN0dXJlIOKAlCBpZiBpdCBldmVyIGRvZXMsIHRoZSBkZXB0aFxuICAgKiBndWFyZCBtdXN0IGNvdmVyIGJvdGggdGhlIGBuZXh0YCBjaGFpbiBhbmQgdGhpcyBuZXN0ZWQgc3RydWN0dXJlLlxuICAgKi9cbiAgc3ViZmxvd1N0cnVjdHVyZT86IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZTtcbiAgaXRlcmF0aW9uQ291bnQ/OiBudW1iZXI7XG4gIC8qKiBUcnVlIHdoZW4gdGhpcyBzdWJmbG93IHVzZXMgbGF6eSByZXNvbHV0aW9uIChkZWZlcnJlZCB1bnRpbCBleGVjdXRpb24pLiAqL1xuICBpc0xhenk/OiBib29sZWFuO1xuICAvKiogVHJ1ZSB3aGVuIHRoaXMgbm9kZSBpcyBhIGJhY2stZWRnZSByZWZlcmVuY2UgY3JlYXRlZCBieSBsb29wVG8oKSDigJQgbm90IGFuIGV4ZWN1dGFibGUgc3RhZ2UuICovXG4gIGlzTG9vcFJlZmVyZW5jZT86IGJvb2xlYW47XG4gIC8qKiBXaGVuIHRydWUsIHRoaXMgc3RhZ2UgY2FuIHBhdXNlIGV4ZWN1dGlvbiAoUGF1c2FibGVIYW5kbGVyIHBhdHRlcm4pLiAqL1xuICBpc1BhdXNhYmxlPzogYm9vbGVhbjtcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBGbG93Q2hhcnRTcGVjIChwdXJlIEpTT04sIG5vIGZ1bmN0aW9ucyDigJQgZm9yIEZF4oaSQkUgdHJhbnNwb3J0KVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0NoYXJ0U3BlYyB7XG4gIG5hbWU6IHN0cmluZztcbiAgaWQ6IHN0cmluZztcbiAgLyoqIE5vZGUgdHlwZSDigJQgbWF0Y2hlcyBgU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlLnR5cGVgIGZvciB2aXN1YWxpemF0aW9uIGFsaWdubWVudC4gKi9cbiAgdHlwZT86ICdzdGFnZScgfCAnZGVjaWRlcicgfCAnc2VsZWN0b3InIHwgJ2ZvcmsnIHwgJ3N0cmVhbWluZycgfCAnc3ViZmxvdycgfCAnbG9vcCc7XG4gIC8qKiBTZW1hbnRpYyBpY29uIGhpbnQgZm9yIHZpc3VhbGl6YXRpb24gKGUuZy4sIFwibGxtXCIsIFwidG9vbFwiLCBcInJhZ1wiLCBcImFnZW50XCIsIFwic3RhcnRcIikgKi9cbiAgaWNvbj86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogRmxvd0NoYXJ0U3BlY1tdO1xuICBuZXh0PzogRmxvd0NoYXJ0U3BlYztcbiAgaGFzRGVjaWRlcj86IGJvb2xlYW47XG4gIGhhc1NlbGVjdG9yPzogYm9vbGVhbjtcbiAgYnJhbmNoSWRzPzogc3RyaW5nW107XG4gIGxvb3BUYXJnZXQ/OiBzdHJpbmc7XG4gIGlzU3RyZWFtaW5nPzogYm9vbGVhbjtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIGlzUGFyYWxsZWxDaGlsZD86IGJvb2xlYW47XG4gIHBhcmFsbGVsR3JvdXBJZD86IHN0cmluZztcbiAgaXNTdWJmbG93Um9vdD86IGJvb2xlYW47XG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgc3ViZmxvd05hbWU/OiBzdHJpbmc7XG4gIC8qKiBUcnVlIHdoZW4gdGhpcyBub2RlIGlzIGEgYmFjay1lZGdlIHJlZmVyZW5jZSBjcmVhdGVkIGJ5IGxvb3BUbygpIOKAlCBub3QgYW4gZXhlY3V0YWJsZSBzdGFnZS4gKi9cbiAgaXNMb29wUmVmZXJlbmNlPzogYm9vbGVhbjtcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBCdWlsZC1UaW1lIEV4dHJhY3RvclxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKiBNZXRhZGF0YSBwcm92aWRlZCB0byB0aGUgYnVpbGQtdGltZSBleHRyYWN0b3IgZm9yIGVhY2ggbm9kZS4gKi9cbmV4cG9ydCB0eXBlIEJ1aWxkVGltZU5vZGVNZXRhZGF0YSA9IEZsb3dDaGFydFNwZWM7XG5cbmV4cG9ydCB0eXBlIEJ1aWxkVGltZUV4dHJhY3RvcjxUUmVzdWx0ID0gRmxvd0NoYXJ0U3BlYz4gPSAobWV0YWRhdGE6IEJ1aWxkVGltZU5vZGVNZXRhZGF0YSkgPT4gVFJlc3VsdDtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBUcmF2ZXJzYWwgRXh0cmFjdG9yIChydW50aW1lKSDigJQgY2Fub25pY2FsIGRlZmluaXRpb24gbGl2ZXMgaW4gZW5naW5lL3R5cGVzLlxuLy8gUmUtZXhwb3J0ZWQgaGVyZSBzbyBjYWxsZXJzIGRvbid0IG5lZWQgdHdvIGltcG9ydCBwYXRocy5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSB7IFRyYXZlcnNhbEV4dHJhY3RvciB9IGZyb20gJy4uL2VuZ2luZS90eXBlcy5qcyc7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gRmxvd0NoYXJ0IOKAlCBjb21waWxlZCBvdXRwdXQgb2YgYnVpbGQoKVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIEZsb3dDaGFydDxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+ID0ge1xuICByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgc3RhZ2VNYXA6IE1hcDxzdHJpbmcsIFN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPj47XG4gIGV4dHJhY3Rvcj86IFRyYXZlcnNhbEV4dHJhY3RvcjtcbiAgc3ViZmxvd3M/OiBSZWNvcmQ8c3RyaW5nLCB7IHJvb3Q6IFN0YWdlTm9kZTxUT3V0LCBUU2NvcGU+IH0+O1xuICBidWlsZFRpbWVTdHJ1Y3R1cmU6IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZTtcbiAgZW5hYmxlTmFycmF0aXZlPzogYm9vbGVhbjtcbiAgbG9nZ2VyPzogSUxvZ2dlcjtcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgc3RhZ2VEZXNjcmlwdGlvbnM6IE1hcDxzdHJpbmcsIHN0cmluZz47XG4gIC8qKiBJbnB1dCBzY2hlbWEgKFpvZCBvciBKU09OIFNjaGVtYSkg4oCUIGRlY2xhcmVkIHZpYSBzZXRJbnB1dFNjaGVtYSgpIG9yIC5jb250cmFjdCgpLiAqL1xuICBpbnB1dFNjaGVtYT86IHVua25vd247XG4gIC8qKiBPdXRwdXQgc2NoZW1hIChab2Qgb3IgSlNPTiBTY2hlbWEpIOKAlCBkZWNsYXJlZCB2aWEgc2V0T3V0cHV0U2NoZW1hKCkgb3IgLmNvbnRyYWN0KCkuICovXG4gIG91dHB1dFNjaGVtYT86IHVua25vd247XG4gIC8qKiBPdXRwdXQgbWFwcGVyIOKAlCBleHRyYWN0cyByZXNwb25zZSBmcm9tIGZpbmFsIHNjb3BlLiAqL1xuICBvdXRwdXRNYXBwZXI/OiAoZmluYWxTY29wZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHVua25vd247XG4gIC8qKiBTY29wZSBmYWN0b3J5IOKAlCBhdXRvLWVtYmVkZGVkIGJ5IGZsb3dDaGFydDxUPigpLiBFeGVjdXRvciByZWFkcyB0aGlzIGlmIG5vIGZhY3RvcnkgcGFyYW0uICovXG4gIHNjb3BlRmFjdG9yeT86IFNjb3BlRmFjdG9yeTxUU2NvcGU+O1xufTtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTaW1wbGlmaWVkIFBhcmFsbGVsIFNwZWMgKGZvciBhZGRMaXN0T2ZGdW5jdGlvbilcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSBTaW1wbGlmaWVkUGFyYWxsZWxTcGVjPFRPdXQgPSBhbnksIFRTY29wZSA9IGFueT4gPSB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgZm4/OiBTdGFnZUZ1bmN0aW9uPFRPdXQsIFRTY29wZT47XG59O1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIEV4ZWNPcHRpb25zIChmb3IgZXhlY3V0ZSgpIGNvbnZlbmllbmNlIOKAlCB1c2VkIGJ5IHJ1bm5lciBsYXllcilcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSBFeGVjT3B0aW9ucyA9IHtcbiAgZGVmYXVsdHM/OiB1bmtub3duO1xuICBpbml0aWFsPzogdW5rbm93bjtcbiAgcmVhZE9ubHk/OiB1bmtub3duO1xuICB0aHJvdHRsaW5nRXJyb3JDaGVja2VyPzogKGU6IHVua25vd24pID0+IGJvb2xlYW47XG4gIHNjb3BlUHJvdGVjdGlvbk1vZGU/OiBTY29wZVByb3RlY3Rpb25Nb2RlO1xuICBlbmFibGVOYXJyYXRpdmU/OiBib29sZWFuO1xufTtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTdWJmbG93UmVmXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGludGVyZmFjZSBTdWJmbG93UmVmIHtcbiAgJHJlZjogc3RyaW5nO1xuICBtb3VudElkOiBzdHJpbmc7XG59XG4iXX0=
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2J1aWxkZXIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7OztHQVNHO0FBcUJILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogYnVpbGRlci90eXBlcy50cyDigJQgQWxsIHR5cGVzIHVzZWQgYnkgdGhlIGJ1aWxkZXIgbGlicmFyeS5cbiAqXG4gKiBTaGFyZWQgdHlwZXMgKFN0YWdlTm9kZSwgU3RhZ2VGdW5jdGlvbiwgZXRjLikgYXJlIGltcG9ydGVkIGZyb20gdGhlIGVuZ2luZS5cbiAqIEJ1aWxkZXItc3BlY2lmaWMgdHlwZXMgKEZsb3dDaGFydFNwZWMsIEZsb3dDaGFydCwgU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlKVxuICogYXJlIGRlZmluZWQgbG9jYWxseSDigJQgdGhleSBjYXJyeSBidWlsZGVyLW9ubHkgZmllbGRzIChkZXNjcmlwdGlvbiwgb3V0cHV0TWFwcGVyLCBldGMuKS5cbiAqXG4gKiBOT1RFOiBBbGwgZW5naW5lIGltcG9ydHMgYXJlIGBpbXBvcnQgdHlwZWAg4oCUIHplcm8gcnVudGltZSBkZXBlbmRlbmN5LlxuICogVGhlIGJ1aWxkZXIgcmVtYWlucyBzdGFuZGFsb25lIGF0IHJ1bnRpbWUuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBTdGFnZU5vZGUgfSBmcm9tICcuLi9lbmdpbmUvZ3JhcGgvU3RhZ2VOb2RlLmpzJztcbmltcG9ydCB0eXBlIHsgSUxvZ2dlciwgU2NvcGVGYWN0b3J5LCBTdGFnZUZ1bmN0aW9uIH0gZnJvbSAnLi4vZW5naW5lL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgU2NvcGVQcm90ZWN0aW9uTW9kZSB9IGZyb20gJy4uL3Njb3BlL3Byb3RlY3Rpb24vdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBTdHJ1Y3R1cmVSZWNvcmRlciB9IGZyb20gJy4vc3RydWN0dXJlL1N0cnVjdHVyZVJlY29yZGVyLmpzJztcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBSZS1leHBvcnRzIGZyb20gZW5naW5lIChjYW5vbmljYWwgZGVmaW5pdGlvbnMpXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IHR5cGUgeyBSZXN1bWVGbiwgU3RhZ2VOb2RlIH0gZnJvbSAnLi4vZW5naW5lL2dyYXBoL1N0YWdlTm9kZS5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIElMb2dnZXIsXG4gIFN0YWdlRnVuY3Rpb24sXG4gIFN0cmVhbUNhbGxiYWNrLFxuICBTdHJlYW1IYW5kbGVycyxcbiAgU3RyZWFtTGlmZWN5Y2xlSGFuZGxlcixcbiAgU3RyZWFtVG9rZW5IYW5kbGVyLFxuICBTdWJmbG93TW91bnRPcHRpb25zLFxufSBmcm9tICcuLi9lbmdpbmUvdHlwZXMuanMnO1xuZXhwb3J0IHsgQXJyYXlNZXJnZU1vZGUgfSBmcm9tICcuLi9lbmdpbmUvdHlwZXMuanMnO1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIEFsaWFzZXNcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogUmVsYXhlZC1nZW5lcmljIGFsaWFzIGZvciBidWlsZGVyIGVyZ29ub21pY3MuICovXG5leHBvcnQgdHlwZSBTdGFnZUZuID0gU3RhZ2VGdW5jdGlvbjxhbnksIGFueT47XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU2NvcGUgUHJvdGVjdGlvbiDigJQgY2Fub25pY2FsIGRlZmluaXRpb24gaW4gc2NvcGUvcHJvdGVjdGlvbi90eXBlcy50c1xuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIHsgU2NvcGVQcm90ZWN0aW9uTW9kZSB9O1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFNlcmlhbGl6ZWQgUGlwZWxpbmUgU3RydWN0dXJlIChKU09OLXNhZmUsIGZvciB2aXN1YWxpemF0aW9uKVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlIHtcbiAgbmFtZTogc3RyaW5nO1xuICBpZDogc3RyaW5nO1xuICB0eXBlOiAnc3RhZ2UnIHwgJ2RlY2lkZXInIHwgJ3NlbGVjdG9yJyB8ICdmb3JrJyB8ICdzdHJlYW1pbmcnIHwgJ3N1YmZsb3cnIHwgJ2xvb3AnO1xuICAvKiogU2VtYW50aWMgaWNvbiBoaW50IGZvciB2aXN1YWxpemF0aW9uIChlLmcuLCBcImxsbVwiLCBcInRvb2xcIiwgXCJyYWdcIiwgXCJhZ2VudFwiLCBcInN0YXJ0XCIpICovXG4gIGljb24/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBjaGlsZHJlbj86IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZVtdO1xuICBuZXh0PzogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlO1xuICBoYXNEZWNpZGVyPzogYm9vbGVhbjtcbiAgaGFzU2VsZWN0b3I/OiBib29sZWFuO1xuICBicmFuY2hJZHM/OiBzdHJpbmdbXTtcbiAgbG9vcFRhcmdldD86IHN0cmluZztcbiAgaXNTdHJlYW1pbmc/OiBib29sZWFuO1xuICBzdHJlYW1JZD86IHN0cmluZztcbiAgaXNQYXJhbGxlbENoaWxkPzogYm9vbGVhbjtcbiAgcGFyYWxsZWxHcm91cElkPzogc3RyaW5nO1xuICBpc1N1YmZsb3dSb290PzogYm9vbGVhbjtcbiAgc3ViZmxvd0lkPzogc3RyaW5nO1xuICBzdWJmbG93TmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIE5lc3RlZCBwaXBlbGluZSBzdHJ1Y3R1cmUgZm9yIGEgc3ViZmxvdyBub2RlLlxuICAgKiBXQVJOSU5HOiBBbnkgZnV0dXJlIHdhbGtlciB0aGF0IHRyYXZlcnNlcyB0aGlzIGZpZWxkIHJlY3Vyc2l2ZWx5IG11c3QgYXBwbHkgaXRzIG93blxuICAgKiBkZXB0aCBndWFyZCAoc2VlIE1BWF9XQUxLX0RFUFRIIGluIGNvbnRyYWN0L29wZW5hcGkudHMpLiBUaGUgY3VycmVudCBgYnVpbGREZXNjcmlwdGlvbmBcbiAgICogd2FsayBpbiBvcGVuYXBpLnRzIGRvZXMgTk9UIHRyYXZlcnNlIHN1YmZsb3dTdHJ1Y3R1cmUg4oCUIGlmIGl0IGV2ZXIgZG9lcywgdGhlIGRlcHRoXG4gICAqIGd1YXJkIG11c3QgY292ZXIgYm90aCB0aGUgYG5leHRgIGNoYWluIGFuZCB0aGlzIG5lc3RlZCBzdHJ1Y3R1cmUuXG4gICAqL1xuICBzdWJmbG93U3RydWN0dXJlPzogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlO1xuICBpdGVyYXRpb25Db3VudD86IG51bWJlcjtcbiAgLyoqIFRydWUgd2hlbiB0aGlzIHN1YmZsb3cgdXNlcyBsYXp5IHJlc29sdXRpb24gKGRlZmVycmVkIHVudGlsIGV4ZWN1dGlvbikuICovXG4gIGlzTGF6eT86IGJvb2xlYW47XG4gIC8qKiBUcnVlIHdoZW4gdGhpcyBub2RlIGlzIGEgYmFjay1lZGdlIHJlZmVyZW5jZSBjcmVhdGVkIGJ5IGxvb3BUbygpIOKAlCBub3QgYW4gZXhlY3V0YWJsZSBzdGFnZS4gKi9cbiAgaXNMb29wUmVmZXJlbmNlPzogYm9vbGVhbjtcbiAgLyoqIFdoZW4gdHJ1ZSwgdGhpcyBzdGFnZSBjYW4gcGF1c2UgZXhlY3V0aW9uIChQYXVzYWJsZUhhbmRsZXIgcGF0dGVybikuICovXG4gIGlzUGF1c2FibGU/OiBib29sZWFuO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIEZsb3dDaGFydFNwZWMgKHB1cmUgSlNPTiwgbm8gZnVuY3Rpb25zIOKAlCBmb3IgRkXihpJCRSB0cmFuc3BvcnQpXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGludGVyZmFjZSBGbG93Q2hhcnRTcGVjIHtcbiAgbmFtZTogc3RyaW5nO1xuICBpZDogc3RyaW5nO1xuICAvKiogTm9kZSB0eXBlIOKAlCBtYXRjaGVzIGBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUudHlwZWAgZm9yIHZpc3VhbGl6YXRpb24gYWxpZ25tZW50LiAqL1xuICB0eXBlPzogJ3N0YWdlJyB8ICdkZWNpZGVyJyB8ICdzZWxlY3RvcicgfCAnZm9yaycgfCAnc3RyZWFtaW5nJyB8ICdzdWJmbG93JyB8ICdsb29wJztcbiAgLyoqIFNlbWFudGljIGljb24gaGludCBmb3IgdmlzdWFsaXphdGlvbiAoZS5nLiwgXCJsbG1cIiwgXCJ0b29sXCIsIFwicmFnXCIsIFwiYWdlbnRcIiwgXCJzdGFydFwiKSAqL1xuICBpY29uPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBGbG93Q2hhcnRTcGVjW107XG4gIG5leHQ/OiBGbG93Q2hhcnRTcGVjO1xuICBoYXNEZWNpZGVyPzogYm9vbGVhbjtcbiAgaGFzU2VsZWN0b3I/OiBib29sZWFuO1xuICBicmFuY2hJZHM/OiBzdHJpbmdbXTtcbiAgbG9vcFRhcmdldD86IHN0cmluZztcbiAgaXNTdHJlYW1pbmc/OiBib29sZWFuO1xuICBzdHJlYW1JZD86IHN0cmluZztcbiAgaXNQYXJhbGxlbENoaWxkPzogYm9vbGVhbjtcbiAgcGFyYWxsZWxHcm91cElkPzogc3RyaW5nO1xuICBpc1N1YmZsb3dSb290PzogYm9vbGVhbjtcbiAgc3ViZmxvd0lkPzogc3RyaW5nO1xuICBzdWJmbG93TmFtZT86IHN0cmluZztcbiAgLyoqIFRydWUgd2hlbiB0aGlzIG5vZGUgaXMgYSBiYWNrLWVkZ2UgcmVmZXJlbmNlIGNyZWF0ZWQgYnkgbG9vcFRvKCkg4oCUIG5vdCBhbiBleGVjdXRhYmxlIHN0YWdlLiAqL1xuICBpc0xvb3BSZWZlcmVuY2U/OiBib29sZWFuO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIGZsb3dDaGFydCgpIG9wdGlvbnMgYmFnXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBPcHRpb25zLWJhZyBhcmd1bWVudCBzaGFwZSBmb3IgdGhlIGBmbG93Q2hhcnQoKWAgZmFjdG9yeS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93Q2hhcnRPcHRpb25zIHtcbiAgLyoqXG4gICAqIEJ1aWxkLXRpbWUgcmVjb3JkZXJzIHRvIGF0dGFjaCBCRUZPUkUgYHN0YXJ0KClgIGZpcmVzLiBFcXVpdmFsZW50XG4gICAqIHRvIGNoYWluaW5nIGAuYXR0YWNoU3RydWN0dXJlUmVjb3JkZXIocmVjKWAgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlXG4gICAqIGZhY3RvcnkgcmV0dXJucyDigJQgYnV0IHJlZ2lzdGVyZWQgRUFSTElFUiwgc28gZXZlbiB0aGUgc2VlZCBldmVudFxuICAgKiBmaXJlcyB0aHJvdWdoIHRoZSBkaXNwYXRjaGVyIHdpdGhvdXQgbmVlZGluZyB0aGUgc2VlZC1yZXBsYXkgcGF0aC5cbiAgICpcbiAgICogTXVsdGlwbGUgcmVjb3JkZXJzIGF0dGFjaCBpbiBhcnJheSBvcmRlciAoc2FtZSBhc1xuICAgKiBgLmF0dGFjaFN0cnVjdHVyZVJlY29yZGVyYCByZXBlYXRlZCkuIFNlZSBgU3RydWN0dXJlUmVjb3JkZXJgIEpTRG9jXG4gICAqIGZvciBldmVudCBzZW1hbnRpY3MsIG9yZGVyaW5nIGludmFyaWFudHMsIGFuZCB0aGUgdHJ1c3QgbW9kZWwuXG4gICAqL1xuICBzdHJ1Y3R1cmVSZWNvcmRlcnM/OiBTdHJ1Y3R1cmVSZWNvcmRlcltdO1xuICAvKiogRnJlZS1mb3JtIGRlc2NyaXB0aW9uIHNob3duIG9uIHRoZSByb290IHNwZWMgbm9kZS4gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gRmxvd0NoYXJ0IOKAlCBjb21waWxlZCBvdXRwdXQgb2YgYnVpbGQoKVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIEZsb3dDaGFydDxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+ID0ge1xuICByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPjtcbiAgc3RhZ2VNYXA6IE1hcDxzdHJpbmcsIFN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPj47XG4gIHN1YmZsb3dzPzogUmVjb3JkPHN0cmluZywgeyByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB9PjtcbiAgYnVpbGRUaW1lU3RydWN0dXJlOiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmU7XG4gIGVuYWJsZU5hcnJhdGl2ZT86IGJvb2xlYW47XG4gIGxvZ2dlcj86IElMb2dnZXI7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHN0YWdlRGVzY3JpcHRpb25zOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogSW5wdXQgc2NoZW1hIChab2Qgb3IgSlNPTiBTY2hlbWEpIOKAlCBkZWNsYXJlZCB2aWEgc2V0SW5wdXRTY2hlbWEoKSBvciAuY29udHJhY3QoKS4gKi9cbiAgaW5wdXRTY2hlbWE/OiB1bmtub3duO1xuICAvKiogT3V0cHV0IHNjaGVtYSAoWm9kIG9yIEpTT04gU2NoZW1hKSDigJQgZGVjbGFyZWQgdmlhIHNldE91dHB1dFNjaGVtYSgpIG9yIC5jb250cmFjdCgpLiAqL1xuICBvdXRwdXRTY2hlbWE/OiB1bmtub3duO1xuICAvKiogT3V0cHV0IG1hcHBlciDigJQgZXh0cmFjdHMgcmVzcG9uc2UgZnJvbSBmaW5hbCBzY29wZS4gKi9cbiAgb3V0cHV0TWFwcGVyPzogKGZpbmFsU2NvcGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB1bmtub3duO1xuICAvKiogU2NvcGUgZmFjdG9yeSDigJQgYXV0by1lbWJlZGRlZCBieSBmbG93Q2hhcnQ8VD4oKS4gRXhlY3V0b3IgcmVhZHMgdGhpcyBpZiBubyBmYWN0b3J5IHBhcmFtLiAqL1xuICBzY29wZUZhY3Rvcnk/OiBTY29wZUZhY3Rvcnk8VFNjb3BlPjtcbn07XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU2ltcGxpZmllZCBQYXJhbGxlbCBTcGVjIChmb3IgYWRkTGlzdE9mRnVuY3Rpb24pXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IHR5cGUgU2ltcGxpZmllZFBhcmFsbGVsU3BlYzxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+ID0ge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGZuPzogU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+O1xufTtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBFeGVjT3B0aW9ucyAoZm9yIGV4ZWN1dGUoKSBjb252ZW5pZW5jZSDigJQgdXNlZCBieSBydW5uZXIgbGF5ZXIpXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IHR5cGUgRXhlY09wdGlvbnMgPSB7XG4gIGRlZmF1bHRzPzogdW5rbm93bjtcbiAgaW5pdGlhbD86IHVua25vd247XG4gIHJlYWRPbmx5PzogdW5rbm93bjtcbiAgdGhyb3R0bGluZ0Vycm9yQ2hlY2tlcj86IChlOiB1bmtub3duKSA9PiBib29sZWFuO1xuICBzY29wZVByb3RlY3Rpb25Nb2RlPzogU2NvcGVQcm90ZWN0aW9uTW9kZTtcbiAgZW5hYmxlTmFycmF0aXZlPzogYm9vbGVhbjtcbn07XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU3ViZmxvd1JlZlxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBpbnRlcmZhY2UgU3ViZmxvd1JlZiB7XG4gICRyZWY6IHN0cmluZztcbiAgbW91bnRJZDogc3RyaW5nO1xufVxuIl19
|
|
@@ -15,18 +15,18 @@ import { DECISION_RESULT } from './types.js';
|
|
|
15
15
|
// -- Scope accessor helpers --------------------------------------------------
|
|
16
16
|
function getAttachFn(scope) {
|
|
17
17
|
const s = scope;
|
|
18
|
-
if (typeof s.$
|
|
19
|
-
return s.$
|
|
20
|
-
if (typeof s.
|
|
21
|
-
return s.
|
|
18
|
+
if (typeof s.$attachScopeRecorder === 'function')
|
|
19
|
+
return s.$attachScopeRecorder.bind(s);
|
|
20
|
+
if (typeof s.attachScopeRecorder === 'function')
|
|
21
|
+
return s.attachScopeRecorder.bind(s);
|
|
22
22
|
return undefined;
|
|
23
23
|
}
|
|
24
24
|
function getDetachFn(scope) {
|
|
25
25
|
const s = scope;
|
|
26
|
-
if (typeof s.$
|
|
27
|
-
return s.$
|
|
28
|
-
if (typeof s.
|
|
29
|
-
return s.
|
|
26
|
+
if (typeof s.$detachScopeRecorder === 'function')
|
|
27
|
+
return s.$detachScopeRecorder.bind(s);
|
|
28
|
+
if (typeof s.detachScopeRecorder === 'function')
|
|
29
|
+
return s.detachScopeRecorder.bind(s);
|
|
30
30
|
return undefined;
|
|
31
31
|
}
|
|
32
32
|
function getValueFn(scope) {
|
|
@@ -196,4 +196,4 @@ export function select(scope, rules) {
|
|
|
196
196
|
};
|
|
197
197
|
return { branches: selectedBranches, [DECISION_RESULT]: true, evidence };
|
|
198
198
|
}
|
|
199
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjaWRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9kZWNpZGUvZGVjaWRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBYWxELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFN0MsK0VBQStFO0FBRS9FLFNBQVMsV0FBVyxDQUFDLEtBQWM7SUFDakMsTUFBTSxDQUFDLEdBQUcsS0FBZ0MsQ0FBQztJQUMzQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLGVBQWUsS0FBSyxVQUFVO1FBQUUsT0FBTyxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RSxJQUFJLE9BQU8sQ0FBQyxDQUFDLGNBQWMsS0FBSyxVQUFVO1FBQUUsT0FBTyxDQUFDLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RSxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQsU0FBUyxXQUFXLENBQUMsS0FBYztJQUNqQyxNQUFNLENBQUMsR0FBRyxLQUFnQyxDQUFDO0lBQzNDLElBQUksT0FBTyxDQUFDLENBQUMsZUFBZSxLQUFLLFVBQVU7UUFBRSxPQUFPLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlFLElBQUksT0FBTyxDQUFDLENBQUMsY0FBYyxLQUFLLFVBQVU7UUFBRSxPQUFPLENBQUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVFLE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRCxTQUFTLFVBQVUs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SSxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFDNUMsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQy9GLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFbEMsSUFBSSxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDekIsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sUUFBUSxHQUFzQjtRQUNsQyxLQUFLLEVBQUUsY0FBYztRQUNyQixRQUFRLEVBQUUsZ0JBQWdCO0tBQzNCLENBQUM7SUFDRixPQUFPLEVBQUUsUUFBUSxFQUFFLGdCQUFnQixFQUFFLENBQUMsZUFBZSxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO0FBQzNFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGRlY2lkZS9kZWNpZGUgLS0gQ29yZSBkZWNpZGUoKSBhbmQgc2VsZWN0KCkgaGVscGVyIGZ1bmN0aW9ucy5cbiAqXG4gKiBkZWNpZGUoKSBldmFsdWF0ZXMgcnVsZXMgaW4gb3JkZXIgKGZpcnN0LW1hdGNoKSBhbmQgcmV0dXJucyBhIERlY2lzaW9uUmVzdWx0LlxuICogc2VsZWN0KCkgZXZhbHVhdGVzIEFMTCBydWxlcyBhbmQgcmV0dXJucyBhIFNlbGVjdGlvblJlc3VsdCB3aXRoIGFsbCBtYXRjaGVzLlxuICpcbiAqIEVhY2ggcnVsZSdzIGB3aGVuYCBjYW4gYmU6XG4gKiAtIEEgZnVuY3Rpb246IChzKSA9PiBzLmNyZWRpdFNjb3JlID4gNzAwICAoYXV0by1jYXB0dXJlcyByZWFkcyB2aWEgdGVtcCByZWNvcmRlcilcbiAqIC0gQSBmaWx0ZXI6ICAgeyBjcmVkaXRTY29yZTogeyBndDogNzAwIH0gfSAoY2FwdHVyZXMgcmVhZHMgKyBvcGVyYXRvcnMgKyB0aHJlc2hvbGRzKVxuICovXG5cbmltcG9ydCB7IGlzRGV2TW9kZSB9IGZyb20gJy4uL3Njb3BlL2RldGVjdENpcmN1bGFyLmpzJztcbmltcG9ydCB0eXBlIHsgUmVjb3JkZXIgfSBmcm9tICcuLi9zY29wZS90eXBlcy5qcyc7XG5pbXBvcnQgeyBldmFsdWF0ZUZpbHRlciB9IGZyb20gJy4vZXZhbHVhdG9yLmpzJztcbmltcG9ydCB7IEV2aWRlbmNlQ29sbGVjdG9yIH0gZnJvbSAnLi9ldmlkZW5jZS5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIERlY2lkZVJ1bGUsXG4gIERlY2lzaW9uRXZpZGVuY2UsXG4gIERlY2lzaW9uUmVzdWx0LFxuICBGaWx0ZXJDb25kaXRpb24sXG4gIEZpbHRlclJ1bGVFdmlkZW5jZSxcbiAgRnVuY3Rpb25SdWxlRXZpZGVuY2UsXG4gIFJ1bGVFdmlkZW5jZSxcbiAgU2VsZWN0aW9uRXZpZGVuY2UsXG4gIFNlbGVjdGlvblJlc3VsdCxcbiAgV2hlcmVGaWx0ZXIsXG59IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgREVDSVNJT05fUkVTVUxUIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8vIC0tIFNjb3BlIGFjY2Vzc29yIGhlbHBlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gZ2V0QXR0YWNoRm4oc2NvcGU6IHVua25vd24pOiAoKHI6IFJlY29yZGVyKSA9PiB2b2lkKSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHMgPSBzY29wZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgaWYgKHR5cGVvZiBzLiRhdHRhY2hSZWNvcmRlciA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHMuJGF0dGFjaFJlY29yZGVyLmJpbmQocyk7XG4gIGlmICh0eXBlb2Ygcy5hdHRhY2hSZWNvcmRlciA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHMuYXR0YWNoUmVjb3JkZXIuYmluZChzKTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0RGV0YWNoRm4oc2NvcGU6IHVua25vd24pOiAoKGlkOiBzdHJpbmcpID0+IHZvaWQpIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcyA9IHNjb3BlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBpZiAodHlwZW9mIHMuJGRldGFjaFJlY29yZGVyID09PSAnZnVuY3Rpb24nKSByZXR1cm4gcy4kZGV0YWNoUmVjb3JkZXIuYmluZChzKTtcbiAgaWYgKHR5cGVvZiBzLmRldGFjaFJlY29yZGVyID09PSAnZnVuY3Rpb24nKSByZXR1cm4gcy5kZXRhY2hSZWNvcmRlci5iaW5kKHMpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXRWYWx1ZUZuKHNjb3BlOiB1bmtub3duKTogKGtleTogc3RyaW5nKSA9PiB1bmtub3duIHtcbiAgY29uc3QgcyA9IHNjb3BlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvLyBDaGVjayAkZ2V0VmFsdWUgZmlyc3Q6IG9uIFR5cGVkU2NvcGUsIGFjY2Vzc2luZyAuZ2V0VmFsdWUgdHJpZ2dlcnMgYSBzcHVyaW91c1xuICAvLyBvblJlYWQgZm9yIGtleSBcImdldFZhbHVlXCIgdmlhIHRoZSBQcm94eSBnZXQgdHJhcC4gJGdldFZhbHVlIHJvdXRlcyB0aHJvdWdoXG4gIC8vIFNDT1BFX01FVEhPRF9OQU1FUyBhbmQgYXZvaWRzIHRoZSBzdGF0ZS1yZWFkIHBhdGguXG4gIGlmICh0eXBlb2Ygcy4kZ2V0VmFsdWUgPT09ICdmdW5jdGlvbicpIHJldHVybiBzLiRnZXRWYWx1ZS5iaW5kKHMpO1xuICBpZiAodHlwZW9mIHMuZ2V0VmFsdWUgPT09ICdmdW5jdGlvbicpIHJldHVybiBzLmdldFZhbHVlLmJpbmQocyk7XG4gIHJldHVybiAoKSA9PiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldFJlZGFjdGVkRm4oc2NvcGU6IHVua25vd24pOiAoa2V5OiBzdHJpbmcpID0+IGJvb2xlYW4ge1xuICBjb25zdCBzID0gc2NvcGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8vIFRyeSAkdG9SYXcoKSBmaXJzdCAoVHlwZWRTY29wZSksIHRoZW4gZGlyZWN0XG4gIGNvbnN0IHJhdyA9IHR5cGVvZiBzLiR0b1JhdyA9PT0gJ2Z1bmN0aW9uJyA/IHMuJHRvUmF3KCkgOiBzO1xuICBjb25zdCByID0gcmF3IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBpZiAodHlwZW9mIHIuZ2V0UmVkYWN0ZWRLZXlzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc3Qga2V5cyA9IHIuZ2V0UmVkYWN0ZWRLZXlzKCkgYXMgU2V0PHN0cmluZz47XG4gICAgcmV0dXJuIChrZXk6IHN0cmluZykgPT4ga2V5cy5oYXMoa2V5KTtcbiAgfVxuICByZXR1cm4gKCkgPT4gZmFsc2U7XG59XG5cbi8vIC0tIGV2YWx1YXRlIGEgc2luZ2xlIHJ1bGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gZXZhbHVhdGVSdWxlPFMgZXh0ZW5kcyBvYmplY3Q+KFxuICBzY29wZTogUyxcbiAgcnVsZTogRGVjaWRlUnVsZTxTPixcbiAgaW5kZXg6IG51bWJlcixcbiAgYXR0YWNoRm4/OiAocjogUmVjb3JkZXIpID0+IHZvaWQsXG4gIGRldGFjaEZuPzogKGlkOiBzdHJpbmcpID0+IHZvaWQsXG4gIHZhbHVlRm4/OiAoa2V5OiBzdHJpbmcpID0+IHVua25vd24sXG4gIHJlZGFjdGVkRm4/OiAoa2V5OiBzdHJpbmcpID0+IGJvb2xlYW4sXG4pOiBSdWxlRXZpZGVuY2Uge1xuICBpZiAodHlwZW9mIHJ1bGUud2hlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIEZVTkNUSU9OIFBBVEg6IHRlbXAgcmVjb3JkZXIgY2FwdHVyZXMgcmVhZHMgKGxhenkg4oCUIHNraXAgaWYgbm8gcmVjb3JkZXIgc3VwcG9ydClcbiAgICBjb25zdCBoYXNSZWNvcmRlclN1cHBvcnQgPSBCb29sZWFuKGF0dGFjaEZuKTtcbiAgICBjb25zdCBjb2xsZWN0b3IgPSBoYXNSZWNvcmRlclN1cHBvcnQgPyBuZXcgRXZpZGVuY2VDb2xsZWN0b3IoKSA6IHVuZGVmaW5lZDtcbiAgICBpZiAoY29sbGVjdG9yICYmIGF0dGFjaEZuKSBhdHRhY2hGbihjb2xsZWN0b3IpO1xuXG4gICAgbGV0IG1hdGNoZWQ6IGJvb2xlYW47XG4gICAgbGV0IG1hdGNoRXJyb3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgbWF0Y2hlZCA9IHJ1bGUud2hlbihzY29wZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbWF0Y2hlZCA9IGZhbHNlO1xuICAgICAgLy8gQ2FwdHVyZSB0aGUgZXJyb3IgZm9yIGRlYnVnZ2luZyDigJQgc3VyZmFjZSBpdCBpbiBldmlkZW5jZSBpbnN0ZWFkIG9mIHN3YWxsb3dpbmcgc2lsZW50bHlcbiAgICAgIG1hdGNoRXJyb3IgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZSk7XG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBydWxlLmxhYmVsID8gYCAoJyR7cnVsZS5sYWJlbH0nKWAgOiAnJztcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgY29uc29sZS53YXJuKGBbZm9vdHByaW50XSBkZWNpZGUoKSBydWxlICR7aW5kZXh9JHtsYWJlbH0gdGhyZXcgZHVyaW5nIGV2YWx1YXRpb246ICR7bWF0Y2hFcnJvcn1gKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKGNvbGxlY3RvciAmJiBkZXRhY2hGbikgZGV0YWNoRm4oY29sbGVjdG9yLmlkKTtcbiAgICB9XG5cbiAgICBjb25zdCBldmlkZW5jZTogRnVuY3Rpb25SdWxlRXZpZGVuY2UgPSB7XG4gICAgICB0eXBlOiAnZnVuY3Rpb24nLFxuICAgICAgcnVsZUluZGV4OiBpbmRleCxcbiAgICAgIGJyYW5jaDogcnVsZS50aGVuLFxuICAgICAgbWF0Y2hlZCxcbiAgICAgIGxhYmVsOiBydWxlLmxhYmVsLFxuICAgICAgLy8gUGFydGlhbCByZWFkczogaWYgcnVsZSB0aHJldyBhZnRlciBzb21lIGdldFZhbHVlKCkgY2FsbHMsIGNvbGxlY3RvciBob2xkcyByZWFkcyB1cCB0byB0aGUgdGhyb3cgcG9pbnRcbiAgICAgIGlucHV0czogY29sbGVjdG9yPy5nZXRJbnB1dHMoKSA/PyBbXSxcbiAgICAgIC4uLihtYXRjaEVycm9yICE9PSB1bmRlZmluZWQgJiYgeyBtYXRjaEVycm9yIH0pLFxuICAgIH07XG4gICAgcmV0dXJuIGV2aWRlbmNlO1xuICB9IGVsc2Uge1xuICAgIC8vIEZJTFRFUiBQQVRIOiByZWFkcyB2YWx1ZXMgZGlyZWN0bHkgdmlhIGNhbGxiYWNrcyAobm8gcmVjb3JkZXIpOyBleGNlcHRpb25zIHRyZWF0ZWQgYXMgbm9uLW1hdGNoXG4gICAgY29uc3QgcmVzb2x2ZWRWYWx1ZUZuID0gdmFsdWVGbiA/PyAoKCkgPT4gdW5kZWZpbmVkKTtcbiAgICBjb25zdCByZXNvbHZlZFJlZGFjdGVkRm4gPSByZWRhY3RlZEZuID8/ICgoKSA9PiBmYWxzZSk7XG4gICAgbGV0IGZpbHRlck1hdGNoZWQgPSBmYWxzZTtcbiAgICBsZXQgZmlsdGVyQ29uZGl0aW9uczogRmlsdGVyQ29uZGl0aW9uW10gPSBbXTtcbiAgICBsZXQgbWF0Y2hFcnJvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBldmFsdWF0ZUZpbHRlcihyZXNvbHZlZFZhbHVlRm4sIHJlc29sdmVkUmVkYWN0ZWRGbiwgcnVsZS53aGVuIGFzIFdoZXJlRmlsdGVyPFM+KTtcbiAgICAgIGZpbHRlck1hdGNoZWQgPSByZXN1bHQubWF0Y2hlZDtcbiAgICAgIGZpbHRlckNvbmRpdGlvbnMgPSByZXN1bHQuY29uZGl0aW9ucztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBmaWx0ZXJNYXRjaGVkID0gZmFsc2U7XG4gICAgICBmaWx0ZXJDb25kaXRpb25zID0gW107XG4gICAgICAvLyBDYXB0dXJlIHRoZSBlcnJvciBmb3IgZGVidWdnaW5nIOKAlCBzdXJmYWNlIGl0IGluIGV2aWRlbmNlIGluc3RlYWQgb2Ygc3dhbGxvd2luZyBzaWxlbnRseVxuICAgICAgbWF0Y2hFcnJvciA9IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKTtcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICBjb25zdCBsYWJlbCA9IHJ1bGUubGFiZWwgPyBgICgnJHtydWxlLmxhYmVsfScpYCA6ICcnO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLndhcm4oYFtmb290cHJpbnRdIGRlY2lkZSgpIGZpbHRlciBydWxlICR7aW5kZXh9JHtsYWJlbH0gdGhyZXcgZHVyaW5nIGV2YWx1YXRpb246ICR7bWF0Y2hFcnJvcn1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBldmlkZW5jZTogRmlsdGVyUnVsZUV2aWRlbmNlID0ge1xuICAgICAgdHlwZTogJ2ZpbHRlcicsXG4gICAgICBydWxlSW5kZXg6IGluZGV4LFxuICAgICAgYnJhbmNoOiBydWxlLnRoZW4sXG4gICAgICBtYXRjaGVkOiBmaWx0ZXJNYXRjaGVkLFxuICAgICAgbGFiZWw6IHJ1bGUubGFiZWwsXG4gICAgICBjb25kaXRpb25zOiBmaWx0ZXJDb25kaXRpb25zLFxuICAgICAgLi4uKG1hdGNoRXJyb3IgIT09IHVuZGVmaW5lZCAmJiB7IG1hdGNoRXJyb3IgfSksXG4gICAgfTtcbiAgICByZXR1cm4gZXZpZGVuY2U7XG4gIH1cbn1cblxuLy8gLS0gZGVjaWRlKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEV2YWx1YXRlcyBydWxlcyBpbiBvcmRlciAoZmlyc3QtbWF0Y2gpLiBSZXR1cm5zIGEgYnJhbmRlZCBEZWNpc2lvblJlc3VsdC5cbiAqXG4gKiBAcGFyYW0gc2NvcGUgLSBUeXBlZFNjb3BlIG9yIFNjb3BlRmFjYWRlXG4gKiBAcGFyYW0gcnVsZXMgLSBBcnJheSBvZiBEZWNpZGVSdWxlIChmdW5jdGlvbiBvciBmaWx0ZXIgd2hlbiBjbGF1c2VzKVxuICogQHBhcmFtIGRlZmF1bHRCcmFuY2ggLSBCcmFuY2ggSUQgaWYgbm8gcnVsZSBtYXRjaGVzXG4gKlxuICogKipFcnJvciBiZWhhdmlvcjoqKiBJZiBhIGB3aGVuYCBmdW5jdGlvbiB0aHJvd3MgZHVyaW5nIGV2YWx1YXRpb24sIHRoZSBydWxlIGlzXG4gKiB0cmVhdGVkIGFzIG5vbi1tYXRjaGluZyAoYG1hdGNoZWQ6IGZhbHNlYCkgYW5kIHRoZSBlcnJvciBtZXNzYWdlIGlzIGNhcHR1cmVkIGluXG4gKiBgbWF0Y2hFcnJvcmAgb24gdGhhdCBydWxlJ3MgYFJ1bGVFdmlkZW5jZWAgZW50cnkuIEV4ZWN1dGlvbiBjb250aW51ZXMgd2l0aFxuICogc3Vic2VxdWVudCBydWxlczsgZXJyb3JzIGRvIG5vdCBwcm9wYWdhdGUgdG8gdGhlIGNhbGxlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY2lkZTxTIGV4dGVuZHMgb2JqZWN0PihzY29wZTogUywgcnVsZXM6IERlY2lkZVJ1bGU8Uz5bXSwgZGVmYXVsdEJyYW5jaDogc3RyaW5nKTogRGVjaXNpb25SZXN1bHQge1xuICBjb25zdCBhdHRhY2hGbiA9IGdldEF0dGFjaEZuKHNjb3BlKTtcbiAgY29uc3QgZGV0YWNoRm4gPSBnZXREZXRhY2hGbihzY29wZSk7XG4gIGNvbnN0IHZhbHVlRm4gPSBnZXRWYWx1ZUZuKHNjb3BlKTtcbiAgY29uc3QgcmVkYWN0ZWRGbiA9IGdldFJlZGFjdGVkRm4oc2NvcGUpO1xuXG4gIGNvbnN0IGV2YWx1YXRlZFJ1bGVzOiBSdWxlRXZpZGVuY2VbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgW2luZGV4LCBydWxlXSBvZiBydWxlcy5lbnRyaWVzKCkpIHtcbiAgICBjb25zdCBydWxlRXZpZGVuY2UgPSBldmFsdWF0ZVJ1bGUoc2NvcGUsIHJ1bGUsIGluZGV4LCBhdHRhY2hGbiwgZGV0YWNoRm4sIHZhbHVlRm4sIHJlZGFjdGVkRm4pO1xuICAgIGV2YWx1YXRlZFJ1bGVzLnB1c2gocnVsZUV2aWRlbmNlKTtcblxuICAgIGlmIChydWxlRXZpZGVuY2UubWF0Y2hlZCkge1xuICAgICAgY29uc3QgZXZpZGVuY2U6IERlY2lzaW9uRXZpZGVuY2UgPSB7XG4gICAgICAgIHJ1bGVzOiBldmFsdWF0ZWRSdWxlcyxcbiAgICAgICAgY2hvc2VuOiBydWxlLnRoZW4sXG4gICAgICAgIGRlZmF1bHQ6IGRlZmF1bHRCcmFuY2gsXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgYnJhbmNoOiBydWxlLnRoZW4sIFtERUNJU0lPTl9SRVNVTFRdOiB0cnVlLCBldmlkZW5jZSB9O1xuICAgIH1cbiAgfVxuXG4gIC8vIERlZmF1bHQ6IG5vIHJ1bGUgbWF0Y2hlZFxuICBjb25zdCBldmlkZW5jZTogRGVjaXNpb25FdmlkZW5jZSA9IHtcbiAgICBydWxlczogZXZhbHVhdGVkUnVsZXMsXG4gICAgY2hvc2VuOiBkZWZhdWx0QnJhbmNoLFxuICAgIGRlZmF1bHQ6IGRlZmF1bHRCcmFuY2gsXG4gIH07XG4gIHJldHVybiB7IGJyYW5jaDogZGVmYXVsdEJyYW5jaCwgW0RFQ0lTSU9OX1JFU1VMVF06IHRydWUsIGV2aWRlbmNlIH07XG59XG5cbi8vIC0tIHNlbGVjdCgpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuLyoqXG4gKiBFdmFsdWF0ZXMgQUxMIHJ1bGVzIChub3QgZmlyc3QtbWF0Y2gpLiBSZXR1cm5zIGEgYnJhbmRlZCBTZWxlY3Rpb25SZXN1bHQuXG4gKlxuICogQHBhcmFtIHNjb3BlIC0gVHlwZWRTY29wZSBvciBTY29wZUZhY2FkZVxuICogQHBhcmFtIHJ1bGVzIC0gQXJyYXkgb2YgRGVjaWRlUnVsZSAoZnVuY3Rpb24gb3IgZmlsdGVyIHdoZW4gY2xhdXNlcylcbiAqXG4gKiAqKkVycm9yIGJlaGF2aW9yOioqIElmIGEgYHdoZW5gIGZ1bmN0aW9uIHRocm93cyBkdXJpbmcgZXZhbHVhdGlvbiwgdGhlIHJ1bGUgaXNcbiAqIHRyZWF0ZWQgYXMgbm9uLW1hdGNoaW5nIChgbWF0Y2hlZDogZmFsc2VgKSBhbmQgdGhlIGVycm9yIG1lc3NhZ2UgaXMgY2FwdHVyZWQgaW5cbiAqIGBtYXRjaEVycm9yYCBvbiB0aGF0IHJ1bGUncyBgUnVsZUV2aWRlbmNlYCBlbnRyeS4gRXZhbHVhdGlvbiBjb250aW51ZXMgd2l0aFxuICogcmVtYWluaW5nIHJ1bGVzOyBlcnJvcnMgZG8gbm90IHByb3BhZ2F0ZSB0byB0aGUgY2FsbGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0PFMgZXh0ZW5kcyBvYmplY3Q+KHNjb3BlOiBTLCBydWxlczogRGVjaWRlUnVsZTxTPltdKTogU2VsZWN0aW9uUmVzdWx0IHtcbiAgY29uc3QgYXR0YWNoRm4gPSBnZXRBdHRhY2hGbihzY29wZSk7XG4gIGNvbnN0IGRldGFjaEZuID0gZ2V0RGV0YWNoRm4oc2NvcGUpO1xuICBjb25zdCB2YWx1ZUZuID0gZ2V0VmFsdWVGbihzY29wZSk7XG4gIGNvbnN0IHJlZGFjdGVkRm4gPSBnZXRSZWRhY3RlZEZuKHNjb3BlKTtcblxuICBjb25zdCBldmFsdWF0ZWRSdWxlczogUnVsZUV2aWRlbmNlW10gPSBbXTtcbiAgY29uc3Qgc2VsZWN0ZWRCcmFuY2hlczogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IFtpbmRleCwgcnVsZV0gb2YgcnVsZXMuZW50cmllcygpKSB7XG4gICAgY29uc3QgcnVsZUV2aWRlbmNlID0gZXZhbHVhdGVSdWxlKHNjb3BlLCBydWxlLCBpbmRleCwgYXR0YWNoRm4sIGRldGFjaEZuLCB2YWx1ZUZuLCByZWRhY3RlZEZuKTtcbiAgICBldmFsdWF0ZWRSdWxlcy5wdXNoKHJ1bGVFdmlkZW5jZSk7XG5cbiAgICBpZiAocnVsZUV2aWRlbmNlLm1hdGNoZWQpIHtcbiAgICAgIHNlbGVjdGVkQnJhbmNoZXMucHVzaChydWxlLnRoZW4pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGV2aWRlbmNlOiBTZWxlY3Rpb25FdmlkZW5jZSA9IHtcbiAgICBydWxlczogZXZhbHVhdGVkUnVsZXMsXG4gICAgc2VsZWN0ZWQ6IHNlbGVjdGVkQnJhbmNoZXMsXG4gIH07XG4gIHJldHVybiB7IGJyYW5jaGVzOiBzZWxlY3RlZEJyYW5jaGVzLCBbREVDSVNJT05fUkVTVUxUXTogdHJ1ZSwgZXZpZGVuY2UgfTtcbn1cbiJdfQ==
|
|
199
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjaWRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9kZWNpZGUvZGVjaWRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBYWxELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFN0MsK0VBQStFO0FBRS9FLFNBQVMsV0FBVyxDQUFDLEtBQWM7SUFDakMsTUFBTSxDQUFDLEdBQUcsS0FBZ0MsQ0FBQztJQUMzQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLG9CQUFvQixLQUFLLFVBQVU7UUFBRSxPQUFPLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEYsSUFBSSxPQUFPLENBQUMsQ0FBQyxtQkFBbUIsS0FBSyxVQUFVO1FBQUUsT0FBTyxDQUFDLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RGLE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxLQUFjO0lBQ2pDLE1BQU0sQ0FBQyxHQUFHLEtBQWdDLENBQUM7SUFDM0MsSUFBSSxPQUFPLENBQUMsQ0FBQyxvQkFBb0IsS0FBSyxVQUFVO1FBQUUsT0FBTyxDQUFDLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hGLElBQUksT0FBTyxDQUFDLENBQUMsbUJBQW1CLEtBQUssVUFBVTtRQUFFLE9BQU8sQ0FBQyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RixPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFD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QUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQzVDLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMvRixjQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRWxDLElBQUksWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3pCLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLFFBQVEsR0FBc0I7UUFDbEMsS0FBSyxFQUFFLGNBQWM7UUFDckIsUUFBUSxFQUFFLGdCQUFnQjtLQUMzQixDQUFDO0lBQ0YsT0FBTyxFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDLGVBQWUsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQztBQUMzRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBkZWNpZGUvZGVjaWRlIC0tIENvcmUgZGVjaWRlKCkgYW5kIHNlbGVjdCgpIGhlbHBlciBmdW5jdGlvbnMuXG4gKlxuICogZGVjaWRlKCkgZXZhbHVhdGVzIHJ1bGVzIGluIG9yZGVyIChmaXJzdC1tYXRjaCkgYW5kIHJldHVybnMgYSBEZWNpc2lvblJlc3VsdC5cbiAqIHNlbGVjdCgpIGV2YWx1YXRlcyBBTEwgcnVsZXMgYW5kIHJldHVybnMgYSBTZWxlY3Rpb25SZXN1bHQgd2l0aCBhbGwgbWF0Y2hlcy5cbiAqXG4gKiBFYWNoIHJ1bGUncyBgd2hlbmAgY2FuIGJlOlxuICogLSBBIGZ1bmN0aW9uOiAocykgPT4gcy5jcmVkaXRTY29yZSA+IDcwMCAgKGF1dG8tY2FwdHVyZXMgcmVhZHMgdmlhIHRlbXAgcmVjb3JkZXIpXG4gKiAtIEEgZmlsdGVyOiAgIHsgY3JlZGl0U2NvcmU6IHsgZ3Q6IDcwMCB9IH0gKGNhcHR1cmVzIHJlYWRzICsgb3BlcmF0b3JzICsgdGhyZXNob2xkcylcbiAqL1xuXG5pbXBvcnQgeyBpc0Rldk1vZGUgfSBmcm9tICcuLi9zY29wZS9kZXRlY3RDaXJjdWxhci5qcyc7XG5pbXBvcnQgdHlwZSB7IFNjb3BlUmVjb3JkZXIgfSBmcm9tICcuLi9zY29wZS90eXBlcy5qcyc7XG5pbXBvcnQgeyBldmFsdWF0ZUZpbHRlciB9IGZyb20gJy4vZXZhbHVhdG9yLmpzJztcbmltcG9ydCB7IEV2aWRlbmNlQ29sbGVjdG9yIH0gZnJvbSAnLi9ldmlkZW5jZS5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIERlY2lkZVJ1bGUsXG4gIERlY2lzaW9uRXZpZGVuY2UsXG4gIERlY2lzaW9uUmVzdWx0LFxuICBGaWx0ZXJDb25kaXRpb24sXG4gIEZpbHRlclJ1bGVFdmlkZW5jZSxcbiAgRnVuY3Rpb25SdWxlRXZpZGVuY2UsXG4gIFJ1bGVFdmlkZW5jZSxcbiAgU2VsZWN0aW9uRXZpZGVuY2UsXG4gIFNlbGVjdGlvblJlc3VsdCxcbiAgV2hlcmVGaWx0ZXIsXG59IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgREVDSVNJT05fUkVTVUxUIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8vIC0tIFNjb3BlIGFjY2Vzc29yIGhlbHBlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gZ2V0QXR0YWNoRm4oc2NvcGU6IHVua25vd24pOiAoKHI6IFNjb3BlUmVjb3JkZXIpID0+IHZvaWQpIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgcyA9IHNjb3BlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBpZiAodHlwZW9mIHMuJGF0dGFjaFNjb3BlUmVjb3JkZXIgPT09ICdmdW5jdGlvbicpIHJldHVybiBzLiRhdHRhY2hTY29wZVJlY29yZGVyLmJpbmQocyk7XG4gIGlmICh0eXBlb2Ygcy5hdHRhY2hTY29wZVJlY29yZGVyID09PSAnZnVuY3Rpb24nKSByZXR1cm4gcy5hdHRhY2hTY29wZVJlY29yZGVyLmJpbmQocyk7XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldERldGFjaEZuKHNjb3BlOiB1bmtub3duKTogKChpZDogc3RyaW5nKSA9PiB2b2lkKSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHMgPSBzY29wZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgaWYgKHR5cGVvZiBzLiRkZXRhY2hTY29wZVJlY29yZGVyID09PSAnZnVuY3Rpb24nKSByZXR1cm4gcy4kZGV0YWNoU2NvcGVSZWNvcmRlci5iaW5kKHMpO1xuICBpZiAodHlwZW9mIHMuZGV0YWNoU2NvcGVSZWNvcmRlciA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIHMuZGV0YWNoU2NvcGVSZWNvcmRlci5iaW5kKHMpO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBnZXRWYWx1ZUZuKHNjb3BlOiB1bmtub3duKTogKGtleTogc3RyaW5nKSA9PiB1bmtub3duIHtcbiAgY29uc3QgcyA9IHNjb3BlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvLyBDaGVjayAkZ2V0VmFsdWUgZmlyc3Q6IG9uIFR5cGVkU2NvcGUsIGFjY2Vzc2luZyAuZ2V0VmFsdWUgdHJpZ2dlcnMgYSBzcHVyaW91c1xuICAvLyBvblJlYWQgZm9yIGtleSBcImdldFZhbHVlXCIgdmlhIHRoZSBQcm94eSBnZXQgdHJhcC4gJGdldFZhbHVlIHJvdXRlcyB0aHJvdWdoXG4gIC8vIFNDT1BFX01FVEhPRF9OQU1FUyBhbmQgYXZvaWRzIHRoZSBzdGF0ZS1yZWFkIHBhdGguXG4gIGlmICh0eXBlb2Ygcy4kZ2V0VmFsdWUgPT09ICdmdW5jdGlvbicpIHJldHVybiBzLiRnZXRWYWx1ZS5iaW5kKHMpO1xuICBpZiAodHlwZW9mIHMuZ2V0VmFsdWUgPT09ICdmdW5jdGlvbicpIHJldHVybiBzLmdldFZhbHVlLmJpbmQocyk7XG4gIHJldHVybiAoKSA9PiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGdldFJlZGFjdGVkRm4oc2NvcGU6IHVua25vd24pOiAoa2V5OiBzdHJpbmcpID0+IGJvb2xlYW4ge1xuICBjb25zdCBzID0gc2NvcGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8vIFRyeSAkdG9SYXcoKSBmaXJzdCAoVHlwZWRTY29wZSksIHRoZW4gZGlyZWN0XG4gIGNvbnN0IHJhdyA9IHR5cGVvZiBzLiR0b1JhdyA9PT0gJ2Z1bmN0aW9uJyA/IHMuJHRvUmF3KCkgOiBzO1xuICBjb25zdCByID0gcmF3IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBpZiAodHlwZW9mIHIuZ2V0UmVkYWN0ZWRLZXlzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc3Qga2V5cyA9IHIuZ2V0UmVkYWN0ZWRLZXlzKCkgYXMgU2V0PHN0cmluZz47XG4gICAgcmV0dXJuIChrZXk6IHN0cmluZykgPT4ga2V5cy5oYXMoa2V5KTtcbiAgfVxuICByZXR1cm4gKCkgPT4gZmFsc2U7XG59XG5cbi8vIC0tIGV2YWx1YXRlIGEgc2luZ2xlIHJ1bGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZnVuY3Rpb24gZXZhbHVhdGVSdWxlPFMgZXh0ZW5kcyBvYmplY3Q+KFxuICBzY29wZTogUyxcbiAgcnVsZTogRGVjaWRlUnVsZTxTPixcbiAgaW5kZXg6IG51bWJlcixcbiAgYXR0YWNoRm4/OiAocjogU2NvcGVSZWNvcmRlcikgPT4gdm9pZCxcbiAgZGV0YWNoRm4/OiAoaWQ6IHN0cmluZykgPT4gdm9pZCxcbiAgdmFsdWVGbj86IChrZXk6IHN0cmluZykgPT4gdW5rbm93bixcbiAgcmVkYWN0ZWRGbj86IChrZXk6IHN0cmluZykgPT4gYm9vbGVhbixcbik6IFJ1bGVFdmlkZW5jZSB7XG4gIGlmICh0eXBlb2YgcnVsZS53aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gRlVOQ1RJT04gUEFUSDogdGVtcCByZWNvcmRlciBjYXB0dXJlcyByZWFkcyAobGF6eSDigJQgc2tpcCBpZiBubyByZWNvcmRlciBzdXBwb3J0KVxuICAgIGNvbnN0IGhhc1JlY29yZGVyU3VwcG9ydCA9IEJvb2xlYW4oYXR0YWNoRm4pO1xuICAgIGNvbnN0IGNvbGxlY3RvciA9IGhhc1JlY29yZGVyU3VwcG9ydCA/IG5ldyBFdmlkZW5jZUNvbGxlY3RvcigpIDogdW5kZWZpbmVkO1xuICAgIGlmIChjb2xsZWN0b3IgJiYgYXR0YWNoRm4pIGF0dGFjaEZuKGNvbGxlY3Rvcik7XG5cbiAgICBsZXQgbWF0Y2hlZDogYm9vbGVhbjtcbiAgICBsZXQgbWF0Y2hFcnJvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBtYXRjaGVkID0gcnVsZS53aGVuKHNjb3BlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBtYXRjaGVkID0gZmFsc2U7XG4gICAgICAvLyBDYXB0dXJlIHRoZSBlcnJvciBmb3IgZGVidWdnaW5nIOKAlCBzdXJmYWNlIGl0IGluIGV2aWRlbmNlIGluc3RlYWQgb2Ygc3dhbGxvd2luZyBzaWxlbnRseVxuICAgICAgbWF0Y2hFcnJvciA9IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IFN0cmluZyhlKTtcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICBjb25zdCBsYWJlbCA9IHJ1bGUubGFiZWwgPyBgICgnJHtydWxlLmxhYmVsfScpYCA6ICcnO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLndhcm4oYFtmb290cHJpbnRdIGRlY2lkZSgpIHJ1bGUgJHtpbmRleH0ke2xhYmVsfSB0aHJldyBkdXJpbmcgZXZhbHVhdGlvbjogJHttYXRjaEVycm9yfWApO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoY29sbGVjdG9yICYmIGRldGFjaEZuKSBkZXRhY2hGbihjb2xsZWN0b3IuaWQpO1xuICAgIH1cblxuICAgIGNvbnN0IGV2aWRlbmNlOiBGdW5jdGlvblJ1bGVFdmlkZW5jZSA9IHtcbiAgICAgIHR5cGU6ICdmdW5jdGlvbicsXG4gICAgICBydWxlSW5kZXg6IGluZGV4LFxuICAgICAgYnJhbmNoOiBydWxlLnRoZW4sXG4gICAgICBtYXRjaGVkLFxuICAgICAgbGFiZWw6IHJ1bGUubGFiZWwsXG4gICAgICAvLyBQYXJ0aWFsIHJlYWRzOiBpZiBydWxlIHRocmV3IGFmdGVyIHNvbWUgZ2V0VmFsdWUoKSBjYWxscywgY29sbGVjdG9yIGhvbGRzIHJlYWRzIHVwIHRvIHRoZSB0aHJvdyBwb2ludFxuICAgICAgaW5wdXRzOiBjb2xsZWN0b3I/LmdldElucHV0cygpID8/IFtdLFxuICAgICAgLi4uKG1hdGNoRXJyb3IgIT09IHVuZGVmaW5lZCAmJiB7IG1hdGNoRXJyb3IgfSksXG4gICAgfTtcbiAgICByZXR1cm4gZXZpZGVuY2U7XG4gIH0gZWxzZSB7XG4gICAgLy8gRklMVEVSIFBBVEg6IHJlYWRzIHZhbHVlcyBkaXJlY3RseSB2aWEgY2FsbGJhY2tzIChubyByZWNvcmRlcik7IGV4Y2VwdGlvbnMgdHJlYXRlZCBhcyBub24tbWF0Y2hcbiAgICBjb25zdCByZXNvbHZlZFZhbHVlRm4gPSB2YWx1ZUZuID8/ICgoKSA9PiB1bmRlZmluZWQpO1xuICAgIGNvbnN0IHJlc29sdmVkUmVkYWN0ZWRGbiA9IHJlZGFjdGVkRm4gPz8gKCgpID0+IGZhbHNlKTtcbiAgICBsZXQgZmlsdGVyTWF0Y2hlZCA9IGZhbHNlO1xuICAgIGxldCBmaWx0ZXJDb25kaXRpb25zOiBGaWx0ZXJDb25kaXRpb25bXSA9IFtdO1xuICAgIGxldCBtYXRjaEVycm9yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGV2YWx1YXRlRmlsdGVyKHJlc29sdmVkVmFsdWVGbiwgcmVzb2x2ZWRSZWRhY3RlZEZuLCBydWxlLndoZW4gYXMgV2hlcmVGaWx0ZXI8Uz4pO1xuICAgICAgZmlsdGVyTWF0Y2hlZCA9IHJlc3VsdC5tYXRjaGVkO1xuICAgICAgZmlsdGVyQ29uZGl0aW9ucyA9IHJlc3VsdC5jb25kaXRpb25zO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGZpbHRlck1hdGNoZWQgPSBmYWxzZTtcbiAgICAgIGZpbHRlckNvbmRpdGlvbnMgPSBbXTtcbiAgICAgIC8vIENhcHR1cmUgdGhlIGVycm9yIGZvciBkZWJ1Z2dpbmcg4oCUIHN1cmZhY2UgaXQgaW4gZXZpZGVuY2UgaW5zdGVhZCBvZiBzd2FsbG93aW5nIHNpbGVudGx5XG4gICAgICBtYXRjaEVycm9yID0gZSBpbnN0YW5jZW9mIEVycm9yID8gZS5tZXNzYWdlIDogU3RyaW5nKGUpO1xuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gcnVsZS5sYWJlbCA/IGAgKCcke3J1bGUubGFiZWx9JylgIDogJyc7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUud2FybihgW2Zvb3RwcmludF0gZGVjaWRlKCkgZmlsdGVyIHJ1bGUgJHtpbmRleH0ke2xhYmVsfSB0aHJldyBkdXJpbmcgZXZhbHVhdGlvbjogJHttYXRjaEVycm9yfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGV2aWRlbmNlOiBGaWx0ZXJSdWxlRXZpZGVuY2UgPSB7XG4gICAgICB0eXBlOiAnZmlsdGVyJyxcbiAgICAgIHJ1bGVJbmRleDogaW5kZXgsXG4gICAgICBicmFuY2g6IHJ1bGUudGhlbixcbiAgICAgIG1hdGNoZWQ6IGZpbHRlck1hdGNoZWQsXG4gICAgICBsYWJlbDogcnVsZS5sYWJlbCxcbiAgICAgIGNvbmRpdGlvbnM6IGZpbHRlckNvbmRpdGlvbnMsXG4gICAgICAuLi4obWF0Y2hFcnJvciAhPT0gdW5kZWZpbmVkICYmIHsgbWF0Y2hFcnJvciB9KSxcbiAgICB9O1xuICAgIHJldHVybiBldmlkZW5jZTtcbiAgfVxufVxuXG4vLyAtLSBkZWNpZGUoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8qKlxuICogRXZhbHVhdGVzIHJ1bGVzIGluIG9yZGVyIChmaXJzdC1tYXRjaCkuIFJldHVybnMgYSBicmFuZGVkIERlY2lzaW9uUmVzdWx0LlxuICpcbiAqIEBwYXJhbSBzY29wZSAtIFR5cGVkU2NvcGUgb3IgU2NvcGVGYWNhZGVcbiAqIEBwYXJhbSBydWxlcyAtIEFycmF5IG9mIERlY2lkZVJ1bGUgKGZ1bmN0aW9uIG9yIGZpbHRlciB3aGVuIGNsYXVzZXMpXG4gKiBAcGFyYW0gZGVmYXVsdEJyYW5jaCAtIEJyYW5jaCBJRCBpZiBubyBydWxlIG1hdGNoZXNcbiAqXG4gKiAqKkVycm9yIGJlaGF2aW9yOioqIElmIGEgYHdoZW5gIGZ1bmN0aW9uIHRocm93cyBkdXJpbmcgZXZhbHVhdGlvbiwgdGhlIHJ1bGUgaXNcbiAqIHRyZWF0ZWQgYXMgbm9uLW1hdGNoaW5nIChgbWF0Y2hlZDogZmFsc2VgKSBhbmQgdGhlIGVycm9yIG1lc3NhZ2UgaXMgY2FwdHVyZWQgaW5cbiAqIGBtYXRjaEVycm9yYCBvbiB0aGF0IHJ1bGUncyBgUnVsZUV2aWRlbmNlYCBlbnRyeS4gRXhlY3V0aW9uIGNvbnRpbnVlcyB3aXRoXG4gKiBzdWJzZXF1ZW50IHJ1bGVzOyBlcnJvcnMgZG8gbm90IHByb3BhZ2F0ZSB0byB0aGUgY2FsbGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjaWRlPFMgZXh0ZW5kcyBvYmplY3Q+KHNjb3BlOiBTLCBydWxlczogRGVjaWRlUnVsZTxTPltdLCBkZWZhdWx0QnJhbmNoOiBzdHJpbmcpOiBEZWNpc2lvblJlc3VsdCB7XG4gIGNvbnN0IGF0dGFjaEZuID0gZ2V0QXR0YWNoRm4oc2NvcGUpO1xuICBjb25zdCBkZXRhY2hGbiA9IGdldERldGFjaEZuKHNjb3BlKTtcbiAgY29uc3QgdmFsdWVGbiA9IGdldFZhbHVlRm4oc2NvcGUpO1xuICBjb25zdCByZWRhY3RlZEZuID0gZ2V0UmVkYWN0ZWRGbihzY29wZSk7XG5cbiAgY29uc3QgZXZhbHVhdGVkUnVsZXM6IFJ1bGVFdmlkZW5jZVtdID0gW107XG5cbiAgZm9yIChjb25zdCBbaW5kZXgsIHJ1bGVdIG9mIHJ1bGVzLmVudHJpZXMoKSkge1xuICAgIGNvbnN0IHJ1bGVFdmlkZW5jZSA9IGV2YWx1YXRlUnVsZShzY29wZSwgcnVsZSwgaW5kZXgsIGF0dGFjaEZuLCBkZXRhY2hGbiwgdmFsdWVGbiwgcmVkYWN0ZWRGbik7XG4gICAgZXZhbHVhdGVkUnVsZXMucHVzaChydWxlRXZpZGVuY2UpO1xuXG4gICAgaWYgKHJ1bGVFdmlkZW5jZS5tYXRjaGVkKSB7XG4gICAgICBjb25zdCBldmlkZW5jZTogRGVjaXNpb25FdmlkZW5jZSA9IHtcbiAgICAgICAgcnVsZXM6IGV2YWx1YXRlZFJ1bGVzLFxuICAgICAgICBjaG9zZW46IHJ1bGUudGhlbixcbiAgICAgICAgZGVmYXVsdDogZGVmYXVsdEJyYW5jaCxcbiAgICAgIH07XG4gICAgICByZXR1cm4geyBicmFuY2g6IHJ1bGUudGhlbiwgW0RFQ0lTSU9OX1JFU1VMVF06IHRydWUsIGV2aWRlbmNlIH07XG4gICAgfVxuICB9XG5cbiAgLy8gRGVmYXVsdDogbm8gcnVsZSBtYXRjaGVkXG4gIGNvbnN0IGV2aWRlbmNlOiBEZWNpc2lvbkV2aWRlbmNlID0ge1xuICAgIHJ1bGVzOiBldmFsdWF0ZWRSdWxlcyxcbiAgICBjaG9zZW46IGRlZmF1bHRCcmFuY2gsXG4gICAgZGVmYXVsdDogZGVmYXVsdEJyYW5jaCxcbiAgfTtcbiAgcmV0dXJuIHsgYnJhbmNoOiBkZWZhdWx0QnJhbmNoLCBbREVDSVNJT05fUkVTVUxUXTogdHJ1ZSwgZXZpZGVuY2UgfTtcbn1cblxuLy8gLS0gc2VsZWN0KCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEV2YWx1YXRlcyBBTEwgcnVsZXMgKG5vdCBmaXJzdC1tYXRjaCkuIFJldHVybnMgYSBicmFuZGVkIFNlbGVjdGlvblJlc3VsdC5cbiAqXG4gKiBAcGFyYW0gc2NvcGUgLSBUeXBlZFNjb3BlIG9yIFNjb3BlRmFjYWRlXG4gKiBAcGFyYW0gcnVsZXMgLSBBcnJheSBvZiBEZWNpZGVSdWxlIChmdW5jdGlvbiBvciBmaWx0ZXIgd2hlbiBjbGF1c2VzKVxuICpcbiAqICoqRXJyb3IgYmVoYXZpb3I6KiogSWYgYSBgd2hlbmAgZnVuY3Rpb24gdGhyb3dzIGR1cmluZyBldmFsdWF0aW9uLCB0aGUgcnVsZSBpc1xuICogdHJlYXRlZCBhcyBub24tbWF0Y2hpbmcgKGBtYXRjaGVkOiBmYWxzZWApIGFuZCB0aGUgZXJyb3IgbWVzc2FnZSBpcyBjYXB0dXJlZCBpblxuICogYG1hdGNoRXJyb3JgIG9uIHRoYXQgcnVsZSdzIGBSdWxlRXZpZGVuY2VgIGVudHJ5LiBFdmFsdWF0aW9uIGNvbnRpbnVlcyB3aXRoXG4gKiByZW1haW5pbmcgcnVsZXM7IGVycm9ycyBkbyBub3QgcHJvcGFnYXRlIHRvIHRoZSBjYWxsZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZWxlY3Q8UyBleHRlbmRzIG9iamVjdD4oc2NvcGU6IFMsIHJ1bGVzOiBEZWNpZGVSdWxlPFM+W10pOiBTZWxlY3Rpb25SZXN1bHQge1xuICBjb25zdCBhdHRhY2hGbiA9IGdldEF0dGFjaEZuKHNjb3BlKTtcbiAgY29uc3QgZGV0YWNoRm4gPSBnZXREZXRhY2hGbihzY29wZSk7XG4gIGNvbnN0IHZhbHVlRm4gPSBnZXRWYWx1ZUZuKHNjb3BlKTtcbiAgY29uc3QgcmVkYWN0ZWRGbiA9IGdldFJlZGFjdGVkRm4oc2NvcGUpO1xuXG4gIGNvbnN0IGV2YWx1YXRlZFJ1bGVzOiBSdWxlRXZpZGVuY2VbXSA9IFtdO1xuICBjb25zdCBzZWxlY3RlZEJyYW5jaGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgW2luZGV4LCBydWxlXSBvZiBydWxlcy5lbnRyaWVzKCkpIHtcbiAgICBjb25zdCBydWxlRXZpZGVuY2UgPSBldmFsdWF0ZVJ1bGUoc2NvcGUsIHJ1bGUsIGluZGV4LCBhdHRhY2hGbiwgZGV0YWNoRm4sIHZhbHVlRm4sIHJlZGFjdGVkRm4pO1xuICAgIGV2YWx1YXRlZFJ1bGVzLnB1c2gocnVsZUV2aWRlbmNlKTtcblxuICAgIGlmIChydWxlRXZpZGVuY2UubWF0Y2hlZCkge1xuICAgICAgc2VsZWN0ZWRCcmFuY2hlcy5wdXNoKHJ1bGUudGhlbik7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZXZpZGVuY2U6IFNlbGVjdGlvbkV2aWRlbmNlID0ge1xuICAgIHJ1bGVzOiBldmFsdWF0ZWRSdWxlcyxcbiAgICBzZWxlY3RlZDogc2VsZWN0ZWRCcmFuY2hlcyxcbiAgfTtcbiAgcmV0dXJuIHsgYnJhbmNoZXM6IHNlbGVjdGVkQnJhbmNoZXMsIFtERUNJU0lPTl9SRVNVTFRdOiB0cnVlLCBldmlkZW5jZSB9O1xufVxuIl19
|