footprintjs 5.0.0 → 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 +32 -8
- package/dist/advanced.js +2 -3
- package/dist/esm/advanced.js +2 -2
- package/dist/esm/index.js +1 -1
- package/dist/esm/lib/builder/FlowChartBuilder.js +364 -100
- 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/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 +12 -2
- package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.js +3 -3
- 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 +11 -54
- package/dist/esm/lib/engine/types.js +1 -1
- package/dist/esm/lib/engine/walkSubflowSpec.js +144 -0
- package/dist/esm/lib/runner/FlowChartExecutor.js +4 -17
- package/dist/esm/lib/runner/getSubtreeSnapshot.js +3 -2
- package/dist/esm/trace.js +3 -2
- package/dist/index.js +1 -1
- package/dist/lib/builder/FlowChartBuilder.js +364 -100
- 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/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 +12 -2
- package/dist/lib/engine/narrative/FlowRecorderDispatcher.js +3 -3
- 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 +11 -54
- package/dist/lib/engine/types.js +1 -1
- package/dist/lib/engine/walkSubflowSpec.js +148 -0
- package/dist/lib/runner/FlowChartExecutor.js +4 -17
- package/dist/lib/runner/getSubtreeSnapshot.js +3 -2
- package/dist/trace.js +5 -2
- package/dist/types/advanced.d.ts +4 -4
- package/dist/types/index.d.ts +2 -0
- 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/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/FlowRecorderDispatcher.d.ts +2 -2
- package/dist/types/lib/engine/narrative/types.d.ts +24 -2
- package/dist/types/lib/engine/runtimeStageId.d.ts +57 -1
- package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +1 -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/runner/FlowChartExecutor.d.ts +4 -16
- package/dist/types/trace.d.ts +3 -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
|
@@ -19,4 +19,4 @@ Object.defineProperty(exports, "flowChart", { enumerable: true, get: function ()
|
|
|
19
19
|
Object.defineProperty(exports, "specToStageNode", { enumerable: true, get: function () { return FlowChartBuilder_js_2.specToStageNode; } });
|
|
20
20
|
var types_js_1 = require("./types.js");
|
|
21
21
|
Object.defineProperty(exports, "ArrayMergeMode", { enumerable: true, get: function () { return types_js_1.ArrayMergeMode; } });
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2J1aWxkZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDBCQUEwQjtBQUMxQjs7Ozs7R0FLRzs7O0FBRUgsVUFBVTtBQUNWLDZEQUFzRjtBQUE3RSxrSEFBQSxXQUFXLE9BQUE7QUFBRSx1SEFBQSxnQkFBZ0IsT0FBQTtBQUFFLHFIQUFBLGNBQWMsT0FBQTtBQUV0RCxzQkFBc0I7QUFDdEIsNkRBQW1FO0FBQTFELGdIQUFBLFNBQVMsT0FBQTtBQUFFLHNIQUFBLGVBQWUsT0FBQTtBQXNCbkMsdUNBQTRDO0FBQW5DLDBHQUFBLGNBQWMsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGlzdGFuYnVsIGlnbm9yZSBmaWxlICovXG4vKipcbiAqIGJ1aWxkZXIvIOKAlCBGbG93Y2hhcnQgY29uc3RydWN0aW9uIGxpYnJhcnkgKHplcm8gZGVwcyBvbiBvbGQgY29kZSlcbiAqXG4gKiBGbHVlbnQgQVBJIGZvciBidWlsZGluZyBTdGFnZU5vZGUgdHJlZXMgYW5kIFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZS5cbiAqIENhbiBiZSB1c2VkIHN0YW5kYWxvbmUgZm9yIGJ1aWxkaW5nIGZsb3djaGFydCBzcGVjcyB3aXRob3V0IGV4ZWN1dGlvbi5cbiAqL1xuXG4vLyBDbGFzc2VzXG5leHBvcnQgeyBEZWNpZGVyTGlzdCwgRmxvd0NoYXJ0QnVpbGRlciwgU2VsZWN0b3JGbkxpc3QgfSBmcm9tICcuL0Zsb3dDaGFydEJ1aWxkZXIuanMnO1xuXG4vLyBGYWN0b3J5ICYgdXRpbGl0aWVzXG5leHBvcnQgeyBmbG93Q2hhcnQsIHNwZWNUb1N0YWdlTm9kZSB9IGZyb20gJy4vRmxvd0NoYXJ0QnVpbGRlci5qcyc7XG5cbi8vIFR5cGVzXG5leHBvcnQgdHlwZSB7XG4gIEV4ZWNPcHRpb25zLFxuICBGbG93Q2hhcnQsXG4gIEZsb3dDaGFydE9wdGlvbnMsXG4gIEZsb3dDaGFydFNwZWMsXG4gIElMb2dnZXIsXG4gIFNjb3BlUHJvdGVjdGlvbk1vZGUsXG4gIFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSxcbiAgU2ltcGxpZmllZFBhcmFsbGVsU3BlYyxcbiAgU3RhZ2VGbixcbiAgU3RhZ2VGdW5jdGlvbixcbiAgU3RhZ2VOb2RlLFxuICBTdHJlYW1DYWxsYmFjayxcbiAgU3RyZWFtSGFuZGxlcnMsXG4gIFN0cmVhbUxpZmVjeWNsZUhhbmRsZXIsXG4gIFN0cmVhbVRva2VuSGFuZGxlcixcbiAgU3ViZmxvd01vdW50T3B0aW9ucyxcbiAgU3ViZmxvd1JlZixcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5leHBvcnQgeyBBcnJheU1lcmdlTW9kZSB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vLyDilIDilIAgTDcg4oCUIFN0cnVjdHVyYWwgb2JzZXJ2ZXIgc3VyZmFjZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIGBTdHJ1Y3R1cmVSZWNvcmRlcmAgaXMgdGhlIGJ1aWxkLXRpbWUgdHdpbiBvZiBgRmxvd1JlY29yZGVyYC4gVG9nZXRoZXIgdGhleVxuLy8gY292ZXIgYm90aCBwaGFzZXMgb2YgY2hhcnQgbGlmZSDigJQgc2VlIGBTdHJ1Y3R1cmVSZWNvcmRlci50c2AgSlNEb2MgZm9yIHRoZVxuLy8gYXJjaGl0ZWN0dXJhbCByYXRpb25hbGUgKHdoeSB0d28gaW50ZXJmYWNlcywgbm90IG9uZSBwaGFzZS10YWdnZWQgZXZlbnQpLlxuZXhwb3J0IHR5cGUge1xuICBTdHJ1Y3R1cmVEZWNpZGVyQ29tcGxldGVFdmVudCxcbiAgU3RydWN0dXJlRWRnZUFkZGVkRXZlbnQsXG4gIFN0cnVjdHVyZUVkZ2VLaW5kLFxuICBTdHJ1Y3R1cmVMb29wRWRnZUFkZGVkRXZlbnQsXG4gIFN0cnVjdHVyZVJlY29yZGVyLFxuICBTdHJ1Y3R1cmVTdGFnZUFkZGVkRXZlbnQsXG4gIFN0cnVjdHVyZVN1YmZsb3dNb3VudGVkRXZlbnQsXG59IGZyb20gJy4vc3RydWN0dXJlL1N0cnVjdHVyZVJlY29yZGVyLmpzJztcbiJdfQ==
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* StructureRecorder — passive observer of BUILD-TIME chart construction events.
|
|
4
|
+
*
|
|
5
|
+
* The build-time twin of `FlowRecorder`. Where `FlowRecorder` observes
|
|
6
|
+
* RUNTIME control-flow transitions (per-execution `runtimeStageId`,
|
|
7
|
+
* iteration counts, errors, pauses), `StructureRecorder` observes
|
|
8
|
+
* STATIC chart shape as it's assembled by the builder — every spec
|
|
9
|
+
* node added, every outgoing edge wired, every decider closed.
|
|
10
|
+
*
|
|
11
|
+
* Why two interfaces, not one
|
|
12
|
+
* ───────────────────────────
|
|
13
|
+
* Build and runtime events have different INVARIANTS, not just
|
|
14
|
+
* different timing:
|
|
15
|
+
*
|
|
16
|
+
* - Runtime events carry `runtimeStageId` (`[subflowPath/]stageId#N`),
|
|
17
|
+
* `iteration`, `traversalContext` — load-bearing for time-travel
|
|
18
|
+
* UIs, commit-log indices, and `SequenceRecorder<T>` consumers.
|
|
19
|
+
* NONE of these exist at build time.
|
|
20
|
+
*
|
|
21
|
+
* - Build events carry only `stageId` + structural fields. No
|
|
22
|
+
* execution index, no iteration, no snapshot.
|
|
23
|
+
*
|
|
24
|
+
* - Some events have no analog across phases: `onPause` /
|
|
25
|
+
* `onResume` / `onError` / `onRunStart` are runtime-only;
|
|
26
|
+
* `onDeciderComplete` / `onStageAdded` are build-only.
|
|
27
|
+
*
|
|
28
|
+
* A single `FlowRecorder` with `phase: 'static' | 'dynamic'`
|
|
29
|
+
* discriminator would force every consumer to write
|
|
30
|
+
* `if (e.phase === 'static') ...` branches and would erase the
|
|
31
|
+
* least-privilege boundary (a static-only consumer should NOT
|
|
32
|
+
* accidentally observe runtime data — e.g., a public docs site
|
|
33
|
+
* rendering chart topology must not see scope values).
|
|
34
|
+
*
|
|
35
|
+
* Two interfaces, same mental model, clean separation. Two
|
|
36
|
+
* registration sites ship today (pick whichever fits your call
|
|
37
|
+
* site):
|
|
38
|
+
*
|
|
39
|
+
* 1. **Options-bag** (preferred when the recorder set is known
|
|
40
|
+
* at construction time — registers BEFORE `start()` so even
|
|
41
|
+
* the seed event fires through the normal dispatcher fan-out):
|
|
42
|
+
* ```ts
|
|
43
|
+
* flowChart('seed', fn, 'seed', { structureRecorders: [rec] })
|
|
44
|
+
* .addFunction('a', fnA, 'a').build();
|
|
45
|
+
* ```
|
|
46
|
+
*
|
|
47
|
+
* 2. **Fluent** (preferred when attach is conditional, late, or
|
|
48
|
+
* in a chain builder — the just-attached recorder gets a
|
|
49
|
+
* one-time seed replay so it observes the root stage):
|
|
50
|
+
* ```ts
|
|
51
|
+
* flowChart('seed', fn, 'seed')
|
|
52
|
+
* .attachStructureRecorder(rec)
|
|
53
|
+
* .addFunction('a', fnA, 'a').build();
|
|
54
|
+
* ```
|
|
55
|
+
*
|
|
56
|
+
* Both deliver the same event stream to the same recorder. See the
|
|
57
|
+
* `@example` block below for a fully-fleshed-out implementation.
|
|
58
|
+
*
|
|
59
|
+
* Lifecycle + ordering invariants
|
|
60
|
+
* ───────────────────────────────
|
|
61
|
+
* - Fires SYNCHRONOUSLY during builder chain calls (and during
|
|
62
|
+
* `.build()` for the terminal node) at the natural moment each
|
|
63
|
+
* spec mutation completes.
|
|
64
|
+
* - `onStageAdded(A)` and `onStageAdded(B)` fire BEFORE any
|
|
65
|
+
* `onEdgeAdded({from: A, to: B})` — endpoint registration
|
|
66
|
+
* happens before edge wiring.
|
|
67
|
+
* - `onDeciderComplete(D)` fires at sub-builder `.end()` time, AFTER
|
|
68
|
+
* every child's `onStageAdded` and every `onEdgeAdded({from: D,
|
|
69
|
+
* to: child})`. Marks the decider as no-further-mutation.
|
|
70
|
+
* - `onSubflowMounted({subflowId})` fires once per mount.
|
|
71
|
+
* **MOUNT-ONLY**: parent recorders do NOT receive a replay of
|
|
72
|
+
* the subflow's own internal structure events (those fired
|
|
73
|
+
* during the subflow's own `.build()`). Matches the runtime
|
|
74
|
+
* `onSubflowEntry` semantics — composition over replay.
|
|
75
|
+
*
|
|
76
|
+
* Error isolation (matches FlowRecorder contract)
|
|
77
|
+
* ───────────────────────────────────────────────
|
|
78
|
+
* - A throwing handler is caught, logged via `isDevMode()` warning,
|
|
79
|
+
* and accumulated on `builder.getStructureBuildErrors()` for
|
|
80
|
+
* post-hoc inspection.
|
|
81
|
+
* - Subsequent recorders + subsequent events fire normally; one
|
|
82
|
+
* misbehaving recorder cannot THROW its way into blocking
|
|
83
|
+
* construction.
|
|
84
|
+
* - The errors[] accumulator is soft-capped (~100 entries) with a
|
|
85
|
+
* `__truncated__` sentinel record once the cap is hit, to prevent
|
|
86
|
+
* unbounded growth on chatty broken recorders.
|
|
87
|
+
* - Note: throw isolation does NOT defend against a handler that
|
|
88
|
+
* succeeds at runtime but mutates `event.spec` to corrupt the
|
|
89
|
+
* chart. See "Spec mutation" below.
|
|
90
|
+
*
|
|
91
|
+
* Spec mutation — readonly-by-contract (NOT runtime-enforced)
|
|
92
|
+
* ────────────────────────────────────────────────────────────
|
|
93
|
+
* - Event payloads pass spec references where useful (e.g., `spec`
|
|
94
|
+
* on `onStageAdded`). Every field on every event payload is
|
|
95
|
+
* marked `readonly` in TypeScript — the type system signals
|
|
96
|
+
* consumer intent at author time.
|
|
97
|
+
* - There is NO runtime freeze. The builder fires `onStageAdded`
|
|
98
|
+
* IMMEDIATELY when a spec node is added, BEFORE the builder
|
|
99
|
+
* wires that node's `.next`/`.children`/`.loopTarget` in the
|
|
100
|
+
* subsequent `addX` call. Freezing here would break the
|
|
101
|
+
* builder's own subsequent mutation.
|
|
102
|
+
* - Handler mutation of `event.spec` is DOCUMENTED UNDEFINED
|
|
103
|
+
* BEHAVIOR — it will succeed at runtime, but is not supported
|
|
104
|
+
* and downstream consumers may break. Specifically, mutating
|
|
105
|
+
* `event.spec.fn`, `event.spec.id`, or `event.spec.children`
|
|
106
|
+
* can corrupt subsequent runtime behavior of the chart.
|
|
107
|
+
* - **Trust model**: attach ONLY recorders from trusted code paths.
|
|
108
|
+
* A hostile or buggy recorder can effectively substitute stage
|
|
109
|
+
* functions or rewire the chart structure. The `readonly`
|
|
110
|
+
* markers cannot defend against intentional mutation.
|
|
111
|
+
*
|
|
112
|
+
* @example
|
|
113
|
+
* ```ts
|
|
114
|
+
* class TraceStructureRecorder implements StructureRecorder {
|
|
115
|
+
* readonly id = 'trace-static';
|
|
116
|
+
* nodes: XyflowNode[] = [];
|
|
117
|
+
* edges: XyflowEdge[] = [];
|
|
118
|
+
*
|
|
119
|
+
* onStageAdded(e) {
|
|
120
|
+
* // Node role: 'stage' is the initial type. If outgoing edges
|
|
121
|
+
* // arrive with kind 'fork-branch' / 'decision-branch' the node
|
|
122
|
+
* // is functioning as a fork/decider — derive the visual style
|
|
123
|
+
* // from those edges, not from `e.type` alone.
|
|
124
|
+
* this.nodes.push({ id: e.stageId, type: 'lensStage', data: { label: e.name } });
|
|
125
|
+
* }
|
|
126
|
+
* onEdgeAdded(e) {
|
|
127
|
+
* this.edges.push({ id: `${e.from}->${e.to}`, source: e.from, target: e.to });
|
|
128
|
+
* }
|
|
129
|
+
* onSubflowMounted(e) {
|
|
130
|
+
* this.nodes.push({ id: e.subflowId, type: 'subflow', data: { label: e.subflowName } });
|
|
131
|
+
* }
|
|
132
|
+
* onDeciderComplete(e) {
|
|
133
|
+
* // Optional: finalize node styling now that branch list is sealed.
|
|
134
|
+
* }
|
|
135
|
+
* }
|
|
136
|
+
*
|
|
137
|
+
* // Registration option A — options-bag (preferred when recorders
|
|
138
|
+
* // are known up front; attaches BEFORE the seed event fires):
|
|
139
|
+
* const rec = new TraceStructureRecorder();
|
|
140
|
+
* const builder = flowChart('seed', fn, 'seed', {
|
|
141
|
+
* structureRecorders: [rec],
|
|
142
|
+
* }).addFunction('a', fnA, 'a');
|
|
143
|
+
* const chart = builder.build();
|
|
144
|
+
*
|
|
145
|
+
* // Registration option B — fluent chain (preferred for conditional
|
|
146
|
+
* // or late attach; the just-attached recorder gets a seed replay):
|
|
147
|
+
* const rec2 = new TraceStructureRecorder();
|
|
148
|
+
* const builder2 = flowChart('seed', fn, 'seed')
|
|
149
|
+
* .attachStructureRecorder(rec2)
|
|
150
|
+
* .addFunction('a', fnA, 'a');
|
|
151
|
+
*
|
|
152
|
+
* // Inspect any recorder errors (call on the BUILDER, not the chart):
|
|
153
|
+
* const errors = builder.getStructureBuildErrors();
|
|
154
|
+
*
|
|
155
|
+
* <ReactFlow nodes={rec.nodes} edges={rec.edges} />
|
|
156
|
+
* ```
|
|
157
|
+
*/
|
|
158
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
159
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RydWN0dXJlUmVjb3JkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL2J1aWxkZXIvc3RydWN0dXJlL1N0cnVjdHVyZVJlY29yZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EySkciLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN0cnVjdHVyZVJlY29yZGVyIOKAlCBwYXNzaXZlIG9ic2VydmVyIG9mIEJVSUxELVRJTUUgY2hhcnQgY29uc3RydWN0aW9uIGV2ZW50cy5cbiAqXG4gKiBUaGUgYnVpbGQtdGltZSB0d2luIG9mIGBGbG93UmVjb3JkZXJgLiBXaGVyZSBgRmxvd1JlY29yZGVyYCBvYnNlcnZlc1xuICogUlVOVElNRSBjb250cm9sLWZsb3cgdHJhbnNpdGlvbnMgKHBlci1leGVjdXRpb24gYHJ1bnRpbWVTdGFnZUlkYCxcbiAqIGl0ZXJhdGlvbiBjb3VudHMsIGVycm9ycywgcGF1c2VzKSwgYFN0cnVjdHVyZVJlY29yZGVyYCBvYnNlcnZlc1xuICogU1RBVElDIGNoYXJ0IHNoYXBlIGFzIGl0J3MgYXNzZW1ibGVkIGJ5IHRoZSBidWlsZGVyIOKAlCBldmVyeSBzcGVjXG4gKiBub2RlIGFkZGVkLCBldmVyeSBvdXRnb2luZyBlZGdlIHdpcmVkLCBldmVyeSBkZWNpZGVyIGNsb3NlZC5cbiAqXG4gKiBXaHkgdHdvIGludGVyZmFjZXMsIG5vdCBvbmVcbiAqIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICogICBCdWlsZCBhbmQgcnVudGltZSBldmVudHMgaGF2ZSBkaWZmZXJlbnQgSU5WQVJJQU5UUywgbm90IGp1c3RcbiAqICAgZGlmZmVyZW50IHRpbWluZzpcbiAqXG4gKiAgICAgLSBSdW50aW1lIGV2ZW50cyBjYXJyeSBgcnVudGltZVN0YWdlSWRgIChgW3N1YmZsb3dQYXRoL11zdGFnZUlkI05gKSxcbiAqICAgICAgIGBpdGVyYXRpb25gLCBgdHJhdmVyc2FsQ29udGV4dGAg4oCUIGxvYWQtYmVhcmluZyBmb3IgdGltZS10cmF2ZWxcbiAqICAgICAgIFVJcywgY29tbWl0LWxvZyBpbmRpY2VzLCBhbmQgYFNlcXVlbmNlUmVjb3JkZXI8VD5gIGNvbnN1bWVycy5cbiAqICAgICAgIE5PTkUgb2YgdGhlc2UgZXhpc3QgYXQgYnVpbGQgdGltZS5cbiAqXG4gKiAgICAgLSBCdWlsZCBldmVudHMgY2Fycnkgb25seSBgc3RhZ2VJZGAgKyBzdHJ1Y3R1cmFsIGZpZWxkcy4gTm9cbiAqICAgICAgIGV4ZWN1dGlvbiBpbmRleCwgbm8gaXRlcmF0aW9uLCBubyBzbmFwc2hvdC5cbiAqXG4gKiAgICAgLSBTb21lIGV2ZW50cyBoYXZlIG5vIGFuYWxvZyBhY3Jvc3MgcGhhc2VzOiBgb25QYXVzZWAgL1xuICogICAgICAgYG9uUmVzdW1lYCAvIGBvbkVycm9yYCAvIGBvblJ1blN0YXJ0YCBhcmUgcnVudGltZS1vbmx5O1xuICogICAgICAgYG9uRGVjaWRlckNvbXBsZXRlYCAvIGBvblN0YWdlQWRkZWRgIGFyZSBidWlsZC1vbmx5LlxuICpcbiAqICAgQSBzaW5nbGUgYEZsb3dSZWNvcmRlcmAgd2l0aCBgcGhhc2U6ICdzdGF0aWMnIHwgJ2R5bmFtaWMnYFxuICogICBkaXNjcmltaW5hdG9yIHdvdWxkIGZvcmNlIGV2ZXJ5IGNvbnN1bWVyIHRvIHdyaXRlXG4gKiAgIGBpZiAoZS5waGFzZSA9PT0gJ3N0YXRpYycpIC4uLmAgYnJhbmNoZXMgYW5kIHdvdWxkIGVyYXNlIHRoZVxuICogICBsZWFzdC1wcml2aWxlZ2UgYm91bmRhcnkgKGEgc3RhdGljLW9ubHkgY29uc3VtZXIgc2hvdWxkIE5PVFxuICogICBhY2NpZGVudGFsbHkgb2JzZXJ2ZSBydW50aW1lIGRhdGEg4oCUIGUuZy4sIGEgcHVibGljIGRvY3Mgc2l0ZVxuICogICByZW5kZXJpbmcgY2hhcnQgdG9wb2xvZ3kgbXVzdCBub3Qgc2VlIHNjb3BlIHZhbHVlcykuXG4gKlxuICogICBUd28gaW50ZXJmYWNlcywgc2FtZSBtZW50YWwgbW9kZWwsIGNsZWFuIHNlcGFyYXRpb24uIFR3b1xuICogICByZWdpc3RyYXRpb24gc2l0ZXMgc2hpcCB0b2RheSAocGljayB3aGljaGV2ZXIgZml0cyB5b3VyIGNhbGxcbiAqICAgc2l0ZSk6XG4gKlxuICogICAgIDEuICoqT3B0aW9ucy1iYWcqKiAocHJlZmVycmVkIHdoZW4gdGhlIHJlY29yZGVyIHNldCBpcyBrbm93blxuICogICAgICAgIGF0IGNvbnN0cnVjdGlvbiB0aW1lIOKAlCByZWdpc3RlcnMgQkVGT1JFIGBzdGFydCgpYCBzbyBldmVuXG4gKiAgICAgICAgdGhlIHNlZWQgZXZlbnQgZmlyZXMgdGhyb3VnaCB0aGUgbm9ybWFsIGRpc3BhdGNoZXIgZmFuLW91dCk6XG4gKiAgICAgICAgYGBgdHNcbiAqICAgICAgICBmbG93Q2hhcnQoJ3NlZWQnLCBmbiwgJ3NlZWQnLCB7IHN0cnVjdHVyZVJlY29yZGVyczogW3JlY10gfSlcbiAqICAgICAgICAgIC5hZGRGdW5jdGlvbignYScsIGZuQSwgJ2EnKS5idWlsZCgpO1xuICogICAgICAgIGBgYFxuICpcbiAqICAgICAyLiAqKkZsdWVudCoqIChwcmVmZXJyZWQgd2hlbiBhdHRhY2ggaXMgY29uZGl0aW9uYWwsIGxhdGUsIG9yXG4gKiAgICAgICAgaW4gYSBjaGFpbiBidWlsZGVyIOKAlCB0aGUganVzdC1hdHRhY2hlZCByZWNvcmRlciBnZXRzIGFcbiAqICAgICAgICBvbmUtdGltZSBzZWVkIHJlcGxheSBzbyBpdCBvYnNlcnZlcyB0aGUgcm9vdCBzdGFnZSk6XG4gKiAgICAgICAgYGBgdHNcbiAqICAgICAgICBmbG93Q2hhcnQoJ3NlZWQnLCBmbiwgJ3NlZWQnKVxuICogICAgICAgICAgLmF0dGFjaFN0cnVjdHVyZVJlY29yZGVyKHJlYylcbiAqICAgICAgICAgIC5hZGRGdW5jdGlvbignYScsIGZuQSwgJ2EnKS5idWlsZCgpO1xuICogICAgICAgIGBgYFxuICpcbiAqICAgQm90aCBkZWxpdmVyIHRoZSBzYW1lIGV2ZW50IHN0cmVhbSB0byB0aGUgc2FtZSByZWNvcmRlci4gU2VlIHRoZVxuICogICBgQGV4YW1wbGVgIGJsb2NrIGJlbG93IGZvciBhIGZ1bGx5LWZsZXNoZWQtb3V0IGltcGxlbWVudGF0aW9uLlxuICpcbiAqIExpZmVjeWNsZSArIG9yZGVyaW5nIGludmFyaWFudHNcbiAqIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICogICAtIEZpcmVzIFNZTkNIUk9OT1VTTFkgZHVyaW5nIGJ1aWxkZXIgY2hhaW4gY2FsbHMgKGFuZCBkdXJpbmdcbiAqICAgICBgLmJ1aWxkKClgIGZvciB0aGUgdGVybWluYWwgbm9kZSkgYXQgdGhlIG5hdHVyYWwgbW9tZW50IGVhY2hcbiAqICAgICBzcGVjIG11dGF0aW9uIGNvbXBsZXRlcy5cbiAqICAgLSBgb25TdGFnZUFkZGVkKEEpYCBhbmQgYG9uU3RhZ2VBZGRlZChCKWAgZmlyZSBCRUZPUkUgYW55XG4gKiAgICAgYG9uRWRnZUFkZGVkKHtmcm9tOiBBLCB0bzogQn0pYCDigJQgZW5kcG9pbnQgcmVnaXN0cmF0aW9uXG4gKiAgICAgaGFwcGVucyBiZWZvcmUgZWRnZSB3aXJpbmcuXG4gKiAgIC0gYG9uRGVjaWRlckNvbXBsZXRlKEQpYCBmaXJlcyBhdCBzdWItYnVpbGRlciBgLmVuZCgpYCB0aW1lLCBBRlRFUlxuICogICAgIGV2ZXJ5IGNoaWxkJ3MgYG9uU3RhZ2VBZGRlZGAgYW5kIGV2ZXJ5IGBvbkVkZ2VBZGRlZCh7ZnJvbTogRCxcbiAqICAgICB0bzogY2hpbGR9KWAuIE1hcmtzIHRoZSBkZWNpZGVyIGFzIG5vLWZ1cnRoZXItbXV0YXRpb24uXG4gKiAgIC0gYG9uU3ViZmxvd01vdW50ZWQoe3N1YmZsb3dJZH0pYCBmaXJlcyBvbmNlIHBlciBtb3VudC5cbiAqICAgICAqKk1PVU5ULU9OTFkqKjogcGFyZW50IHJlY29yZGVycyBkbyBOT1QgcmVjZWl2ZSBhIHJlcGxheSBvZlxuICogICAgIHRoZSBzdWJmbG93J3Mgb3duIGludGVybmFsIHN0cnVjdHVyZSBldmVudHMgKHRob3NlIGZpcmVkXG4gKiAgICAgZHVyaW5nIHRoZSBzdWJmbG93J3Mgb3duIGAuYnVpbGQoKWApLiBNYXRjaGVzIHRoZSBydW50aW1lXG4gKiAgICAgYG9uU3ViZmxvd0VudHJ5YCBzZW1hbnRpY3Mg4oCUIGNvbXBvc2l0aW9uIG92ZXIgcmVwbGF5LlxuICpcbiAqIEVycm9yIGlzb2xhdGlvbiAobWF0Y2hlcyBGbG93UmVjb3JkZXIgY29udHJhY3QpXG4gKiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAqICAgLSBBIHRocm93aW5nIGhhbmRsZXIgaXMgY2F1Z2h0LCBsb2dnZWQgdmlhIGBpc0Rldk1vZGUoKWAgd2FybmluZyxcbiAqICAgICBhbmQgYWNjdW11bGF0ZWQgb24gYGJ1aWxkZXIuZ2V0U3RydWN0dXJlQnVpbGRFcnJvcnMoKWAgZm9yXG4gKiAgICAgcG9zdC1ob2MgaW5zcGVjdGlvbi5cbiAqICAgLSBTdWJzZXF1ZW50IHJlY29yZGVycyArIHN1YnNlcXVlbnQgZXZlbnRzIGZpcmUgbm9ybWFsbHk7IG9uZVxuICogICAgIG1pc2JlaGF2aW5nIHJlY29yZGVyIGNhbm5vdCBUSFJPVyBpdHMgd2F5IGludG8gYmxvY2tpbmdcbiAqICAgICBjb25zdHJ1Y3Rpb24uXG4gKiAgIC0gVGhlIGVycm9yc1tdIGFjY3VtdWxhdG9yIGlzIHNvZnQtY2FwcGVkICh+MTAwIGVudHJpZXMpIHdpdGggYVxuICogICAgIGBfX3RydW5jYXRlZF9fYCBzZW50aW5lbCByZWNvcmQgb25jZSB0aGUgY2FwIGlzIGhpdCwgdG8gcHJldmVudFxuICogICAgIHVuYm91bmRlZCBncm93dGggb24gY2hhdHR5IGJyb2tlbiByZWNvcmRlcnMuXG4gKiAgIC0gTm90ZTogdGhyb3cgaXNvbGF0aW9uIGRvZXMgTk9UIGRlZmVuZCBhZ2FpbnN0IGEgaGFuZGxlciB0aGF0XG4gKiAgICAgc3VjY2VlZHMgYXQgcnVudGltZSBidXQgbXV0YXRlcyBgZXZlbnQuc3BlY2AgdG8gY29ycnVwdCB0aGVcbiAqICAgICBjaGFydC4gU2VlIFwiU3BlYyBtdXRhdGlvblwiIGJlbG93LlxuICpcbiAqIFNwZWMgbXV0YXRpb24g4oCUIHJlYWRvbmx5LWJ5LWNvbnRyYWN0IChOT1QgcnVudGltZS1lbmZvcmNlZClcbiAqIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICogICAtIEV2ZW50IHBheWxvYWRzIHBhc3Mgc3BlYyByZWZlcmVuY2VzIHdoZXJlIHVzZWZ1bCAoZS5nLiwgYHNwZWNgXG4gKiAgICAgb24gYG9uU3RhZ2VBZGRlZGApLiBFdmVyeSBmaWVsZCBvbiBldmVyeSBldmVudCBwYXlsb2FkIGlzXG4gKiAgICAgbWFya2VkIGByZWFkb25seWAgaW4gVHlwZVNjcmlwdCDigJQgdGhlIHR5cGUgc3lzdGVtIHNpZ25hbHNcbiAqICAgICBjb25zdW1lciBpbnRlbnQgYXQgYXV0aG9yIHRpbWUuXG4gKiAgIC0gVGhlcmUgaXMgTk8gcnVudGltZSBmcmVlemUuIFRoZSBidWlsZGVyIGZpcmVzIGBvblN0YWdlQWRkZWRgXG4gKiAgICAgSU1NRURJQVRFTFkgd2hlbiBhIHNwZWMgbm9kZSBpcyBhZGRlZCwgQkVGT1JFIHRoZSBidWlsZGVyXG4gKiAgICAgd2lyZXMgdGhhdCBub2RlJ3MgYC5uZXh0YC9gLmNoaWxkcmVuYC9gLmxvb3BUYXJnZXRgIGluIHRoZVxuICogICAgIHN1YnNlcXVlbnQgYGFkZFhgIGNhbGwuIEZyZWV6aW5nIGhlcmUgd291bGQgYnJlYWsgdGhlXG4gKiAgICAgYnVpbGRlcidzIG93biBzdWJzZXF1ZW50IG11dGF0aW9uLlxuICogICAtIEhhbmRsZXIgbXV0YXRpb24gb2YgYGV2ZW50LnNwZWNgIGlzIERPQ1VNRU5URUQgVU5ERUZJTkVEXG4gKiAgICAgQkVIQVZJT1Ig4oCUIGl0IHdpbGwgc3VjY2VlZCBhdCBydW50aW1lLCBidXQgaXMgbm90IHN1cHBvcnRlZFxuICogICAgIGFuZCBkb3duc3RyZWFtIGNvbnN1bWVycyBtYXkgYnJlYWsuIFNwZWNpZmljYWxseSwgbXV0YXRpbmdcbiAqICAgICBgZXZlbnQuc3BlYy5mbmAsIGBldmVudC5zcGVjLmlkYCwgb3IgYGV2ZW50LnNwZWMuY2hpbGRyZW5gXG4gKiAgICAgY2FuIGNvcnJ1cHQgc3Vic2VxdWVudCBydW50aW1lIGJlaGF2aW9yIG9mIHRoZSBjaGFydC5cbiAqICAgLSAqKlRydXN0IG1vZGVsKio6IGF0dGFjaCBPTkxZIHJlY29yZGVycyBmcm9tIHRydXN0ZWQgY29kZSBwYXRocy5cbiAqICAgICBBIGhvc3RpbGUgb3IgYnVnZ3kgcmVjb3JkZXIgY2FuIGVmZmVjdGl2ZWx5IHN1YnN0aXR1dGUgc3RhZ2VcbiAqICAgICBmdW5jdGlvbnMgb3IgcmV3aXJlIHRoZSBjaGFydCBzdHJ1Y3R1cmUuIFRoZSBgcmVhZG9ubHlgXG4gKiAgICAgbWFya2VycyBjYW5ub3QgZGVmZW5kIGFnYWluc3QgaW50ZW50aW9uYWwgbXV0YXRpb24uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBjbGFzcyBUcmFjZVN0cnVjdHVyZVJlY29yZGVyIGltcGxlbWVudHMgU3RydWN0dXJlUmVjb3JkZXIge1xuICogICByZWFkb25seSBpZCA9ICd0cmFjZS1zdGF0aWMnO1xuICogICBub2RlczogWHlmbG93Tm9kZVtdID0gW107XG4gKiAgIGVkZ2VzOiBYeWZsb3dFZGdlW10gPSBbXTtcbiAqXG4gKiAgIG9uU3RhZ2VBZGRlZChlKSB7XG4gKiAgICAgLy8gTm9kZSByb2xlOiAnc3RhZ2UnIGlzIHRoZSBpbml0aWFsIHR5cGUuIElmIG91dGdvaW5nIGVkZ2VzXG4gKiAgICAgLy8gYXJyaXZlIHdpdGgga2luZCAnZm9yay1icmFuY2gnIC8gJ2RlY2lzaW9uLWJyYW5jaCcgdGhlIG5vZGVcbiAqICAgICAvLyBpcyBmdW5jdGlvbmluZyBhcyBhIGZvcmsvZGVjaWRlciDigJQgZGVyaXZlIHRoZSB2aXN1YWwgc3R5bGVcbiAqICAgICAvLyBmcm9tIHRob3NlIGVkZ2VzLCBub3QgZnJvbSBgZS50eXBlYCBhbG9uZS5cbiAqICAgICB0aGlzLm5vZGVzLnB1c2goeyBpZDogZS5zdGFnZUlkLCB0eXBlOiAnbGVuc1N0YWdlJywgZGF0YTogeyBsYWJlbDogZS5uYW1lIH0gfSk7XG4gKiAgIH1cbiAqICAgb25FZGdlQWRkZWQoZSkge1xuICogICAgIHRoaXMuZWRnZXMucHVzaCh7IGlkOiBgJHtlLmZyb219LT4ke2UudG99YCwgc291cmNlOiBlLmZyb20sIHRhcmdldDogZS50byB9KTtcbiAqICAgfVxuICogICBvblN1YmZsb3dNb3VudGVkKGUpIHtcbiAqICAgICB0aGlzLm5vZGVzLnB1c2goeyBpZDogZS5zdWJmbG93SWQsIHR5cGU6ICdzdWJmbG93JywgZGF0YTogeyBsYWJlbDogZS5zdWJmbG93TmFtZSB9IH0pO1xuICogICB9XG4gKiAgIG9uRGVjaWRlckNvbXBsZXRlKGUpIHtcbiAqICAgICAvLyBPcHRpb25hbDogZmluYWxpemUgbm9kZSBzdHlsaW5nIG5vdyB0aGF0IGJyYW5jaCBsaXN0IGlzIHNlYWxlZC5cbiAqICAgfVxuICogfVxuICpcbiAqIC8vIFJlZ2lzdHJhdGlvbiBvcHRpb24gQSDigJQgb3B0aW9ucy1iYWcgKHByZWZlcnJlZCB3aGVuIHJlY29yZGVyc1xuICogLy8gYXJlIGtub3duIHVwIGZyb250OyBhdHRhY2hlcyBCRUZPUkUgdGhlIHNlZWQgZXZlbnQgZmlyZXMpOlxuICogY29uc3QgcmVjID0gbmV3IFRyYWNlU3RydWN0dXJlUmVjb3JkZXIoKTtcbiAqIGNvbnN0IGJ1aWxkZXIgPSBmbG93Q2hhcnQoJ3NlZWQnLCBmbiwgJ3NlZWQnLCB7XG4gKiAgIHN0cnVjdHVyZVJlY29yZGVyczogW3JlY10sXG4gKiB9KS5hZGRGdW5jdGlvbignYScsIGZuQSwgJ2EnKTtcbiAqIGNvbnN0IGNoYXJ0ID0gYnVpbGRlci5idWlsZCgpO1xuICpcbiAqIC8vIFJlZ2lzdHJhdGlvbiBvcHRpb24gQiDigJQgZmx1ZW50IGNoYWluIChwcmVmZXJyZWQgZm9yIGNvbmRpdGlvbmFsXG4gKiAvLyBvciBsYXRlIGF0dGFjaDsgdGhlIGp1c3QtYXR0YWNoZWQgcmVjb3JkZXIgZ2V0cyBhIHNlZWQgcmVwbGF5KTpcbiAqIGNvbnN0IHJlYzIgPSBuZXcgVHJhY2VTdHJ1Y3R1cmVSZWNvcmRlcigpO1xuICogY29uc3QgYnVpbGRlcjIgPSBmbG93Q2hhcnQoJ3NlZWQnLCBmbiwgJ3NlZWQnKVxuICogICAuYXR0YWNoU3RydWN0dXJlUmVjb3JkZXIocmVjMilcbiAqICAgLmFkZEZ1bmN0aW9uKCdhJywgZm5BLCAnYScpO1xuICpcbiAqIC8vIEluc3BlY3QgYW55IHJlY29yZGVyIGVycm9ycyAoY2FsbCBvbiB0aGUgQlVJTERFUiwgbm90IHRoZSBjaGFydCk6XG4gKiBjb25zdCBlcnJvcnMgPSBidWlsZGVyLmdldFN0cnVjdHVyZUJ1aWxkRXJyb3JzKCk7XG4gKlxuICogPFJlYWN0RmxvdyBub2Rlcz17cmVjLm5vZGVzfSBlZGdlcz17cmVjLmVkZ2VzfSAvPlxuICogYGBgXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBGbG93Q2hhcnRTcGVjLCBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUgfSBmcm9tICcuLi90eXBlcy5qcyc7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gRXZlbnQgcGF5bG9hZCB0eXBlc1xuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogRXZlbnQgcGF5bG9hZCBmb3IgYFN0cnVjdHVyZVJlY29yZGVyLm9uU3RhZ2VBZGRlZGAuIEZpcmVzIGZvciBldmVyeVxuICogc3BlYyBub2RlIGFkZGVkIHRvIHRoZSBjaGFydCwgaW5jbHVkaW5nIHRoZSBzZWVkIChhZGRlZCB2aWFcbiAqIGBmbG93Q2hhcnQoKWAgZmFjdG9yeSkgYW5kIHN1YmZsb3cgbW91bnQgbm9kZXMuIEV4Y2x1ZGVzIHN5bnRoZXRpY1xuICogbG9vcC1yZWZlcmVuY2Ugbm9kZXMgKHRob3NlIGNhcnJ5IGBpc0xvb3BSZWZlcmVuY2U6IHRydWVgIG9uIHRoZVxuICogc3BlYzsgY29uc3VtZXJzIHNlZSB0aGVtIHZpYSB0aGUgc2VwYXJhdGUgYG9uTG9vcEVkZ2VBZGRlZGAgZXZlbnRcbiAqIGluc3RlYWQgb2YgYXMgZnJlc2ggc3RhZ2VzKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdHJ1Y3R1cmVTdGFnZUFkZGVkRXZlbnQge1xuICAvKipcbiAgICogU3RhYmxlIGlkZW50aWZpZXIgZm9yIHRoaXMgbm9kZS4gQVQgRVZFTlQgRklSRSBUSU1FIHRoaXMgaXMgdGhlXG4gICAqIGJ1aWxkZXIncyBMT0NBTCBmb3JtIChubyBzdWJmbG93IHByZWZpeCDigJQgdGhlIHByZWZpeCBpcyBhcHBsaWVkXG4gICAqIGxhdGVyIGJ5IGBfcHJlZml4Tm9kZVRyZWVgIHdoZW4gdGhpcyBidWlsZGVyIGlzIG1vdW50ZWQgYXMgYVxuICAgKiBzdWJmbG93IGludG8gYSBwYXJlbnQpLlxuICAgKlxuICAgKiBOb3RlOiBgc3BlYy5pZGAgaXMgYSBMSVZFIHJlZmVyZW5jZS4gSWYgeW91IHJlYWQgaXQgQUZURVIgdGhpc1xuICAgKiBjaGFydCBoYXMgYmVlbiBtb3VudGVkIGFzIGEgc3ViZmxvdywgaXQgbWF5IGhhdmUgYmVlbiByZXdyaXR0ZW5cbiAgICogdG8gdGhlIEZVTEwgcHJlZml4ZWQgZm9ybS4gVXNlIGBzcGxpdFN0YWdlSWQoc3BlYy5pZClgIGZyb21cbiAgICogYGZvb3RwcmludGpzL3RyYWNlYCB0byBkZWNvbXBvc2UgaXQgYmFjayBpbnRvIGxvY2FsICsgc3ViZmxvd1BhdGguXG4gICAqXG4gICAqIENvcnJlbGF0aW5nIHdpdGggcnVudGltZSBldmVudHM6XG4gICAqICAgLSBTYW1lIGJ1aWxkZXIgKG5vIG1vdW50KSDihpJcbiAgICogICAgIGBldmVudC5zdGFnZUlkID09PSBwYXJzZVJ1bnRpbWVTdGFnZUlkKHJ1bnRpbWUpLnN0YWdlSWRgXG4gICAqICAgLSBUaGlzIGJ1aWxkZXIgbW91bnRlZCBhcyBzdWJmbG93IOKGkiB1c2UgYHNwbGl0U3RhZ2VJZGAgb24gdGhlXG4gICAqICAgICBwcmVmaXhlZCBmb3JtIChvciBgcGFyc2VSdW50aW1lU3RhZ2VJZGAgb24gdGhlIGZ1bGxcbiAgICogICAgIHJ1bnRpbWVTdGFnZUlkKSBiZWZvcmUgY29tcGFyaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2VJZDogc3RyaW5nO1xuICAvKiogSHVtYW4tcmVhZGFibGUgbGFiZWwgZm9yIHRoZSBub2RlLiAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKiBTcGVjIG5vZGUgYHR5cGVgLiBMZXRzIHJlY29yZGVycyBicmFuY2ggb24gc3RhZ2UgdnMgZGVjaWRlciB2c1xuICAgKiAgZm9yayB2cyBzdWJmbG93IHdpdGhvdXQgcmUtZGVyaXZpbmcgZnJvbSBvdGhlciBmaWVsZHMuICovXG4gIHJlYWRvbmx5IHR5cGU6IE5vbk51bGxhYmxlPEZsb3dDaGFydFNwZWNbJ3R5cGUnXT47XG4gIC8qKiBUcnVlIGZvciBub2RlcyBhZGRlZCB2aWEgYGFkZFBhdXNhYmxlRnVuY3Rpb24oKWAg4oCUIHVzZWZ1bCBmb3JcbiAgICogIHZpc3VhbGlzZXJzIHRoYXQgd2FudCB0byBtYXJrIHN0YWdlcyB0aGF0IGNhbiBwYXVzZSBleGVjdXRpb24uICovXG4gIHJlYWRvbmx5IGlzUGF1c2FibGU/OiBib29sZWFuO1xuICAvKiogTGl2ZSByZWZlcmVuY2UgdG8gdGhlIGZ1bGwgc3BlYyBub2RlLCBmb3IgaGFuZGxlcnMgdGhhdCB3YW50XG4gICAqICBkZXRhaWxzIGJleW9uZCB0aGUgZGlzY3JpbWluYXRvciBmaWVsZHMgYWJvdmUuIE1VU1QgTk9UIGJlXG4gICAqICBtdXRhdGVkIGJ5IHRoZSBoYW5kbGVyIOKAlCByZWFkb25seSBpcyB0eXBlLWxldmVsIGludGVudDsgbm9cbiAgICogIHJ1bnRpbWUgZnJlZXplLiBTZWUgXCJTcGVjIG11dGF0aW9uXCIgaW4gdGhlIGZpbGUgaGVhZGVyIGZvciB0aGVcbiAgICogIHRydXN0LW1vZGVsIGNhdmVhdHMuICovXG4gIHJlYWRvbmx5IHNwZWM6IEZsb3dDaGFydFNwZWM7XG59XG5cbi8qKiBFZGdlIGtpbmRzIHRoZSBidWlsZGVyIHByb2R1Y2VzIGF0IHN0cnVjdHVyYWwgdGltZS4gTWF0Y2hlcyB0aGVcbiAqICBmb290cHJpbnRqcyBjb250cm9sLWZsb3cgdm9jYWJ1bGFyeSB1c2VkIGF0IHJ1bnRpbWUuXG4gKlxuICogIFdoeSBubyBgc3ViZmxvdy1lbnRyeWAgaGVyZTogc3ViZmxvdyBtb3VudHMgdXNlIHRoZSBsaWZlY3ljbGVcbiAqICBldmVudCBgb25TdWJmbG93TW91bnRlZGAgKG5vdCBhbiBlZGdlIGV2ZW50KS4gSWYgYSBmdXR1cmUgdXNlIGNhc2VcbiAqICBuZWVkcyB0aGUgcGFyZW504oaSc3ViZmxvdy1yb290IGVkZ2UgYXMgYSBkaXN0aW5jdCBraW5kLCBpdCdsbCBiZVxuICogIGFkZGVkIHRoZW4g4oCUIFlBR05JIG5vdyAoUGFuZWwgMywgTDcuMiByZXZpZXcpLiAqL1xuZXhwb3J0IHR5cGUgU3RydWN0dXJlRWRnZUtpbmQgPVxuICB8ICduZXh0JyAvLyBsaW5lYXIgY2hhaW46IHByZXYubmV4dCA9IGN1cnJcbiAgfCAnZm9yay1icmFuY2gnIC8vIGZvcmsgcGFyZW50IOKGkiBwYXJhbGxlbCBjaGlsZFxuICB8ICdkZWNpc2lvbi1icmFuY2gnOyAvLyBkZWNpZGVyIOKGkiBicmFuY2ggY2hpbGRcblxuLyoqXG4gKiBFdmVudCBwYXlsb2FkIGZvciBgU3RydWN0dXJlUmVjb3JkZXIub25FZGdlQWRkZWRgLiBGaXJlcyB3aGVuZXZlclxuICogdGhlIGJ1aWxkZXIgd2lyZXMgYW4gb3V0Z29pbmcgZWRnZSBmcm9tIG9uZSBub2RlIHRvIGFub3RoZXIuIEJvdGhcbiAqIGVuZHBvaW50cyBoYXZlIGFscmVhZHkgYmVlbiBhbm5vdW5jZWQgdmlhIGBvblN0YWdlQWRkZWRgIGJ5IHRoZVxuICogdGltZSB0aGlzIGZpcmVzLlxuICpcbiAqIExvb3AgYmFjay1lZGdlcyBoYXZlIHRoZWlyIE9XTiBldmVudCAoYG9uTG9vcEVkZ2VBZGRlZGApIHNvXG4gKiBjb25zdW1lcnMgY2FuIHRoZW1lIHRoZW0gZGlzdGluY3RseSBhbmQgc28gYnVpbGQtdGltZSBldmVudHMgc3RheVxuICogZnJlZSBvZiB0aGUgcnVudGltZS1vbmx5IGBpdGVyYXRpb25gIGZpZWxkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cnVjdHVyZUVkZ2VBZGRlZEV2ZW50IHtcbiAgcmVhZG9ubHkgZnJvbTogc3RyaW5nO1xuICByZWFkb25seSB0bzogc3RyaW5nO1xuICByZWFkb25seSBraW5kOiBTdHJ1Y3R1cmVFZGdlS2luZDtcbiAgLyoqIE9wdGlvbmFsIGh1bWFuLXJlYWRhYmxlIGxhYmVsIOKAlCB1c2VkIHRvZGF5IGZvciBkZWNpZGVyIGJyYW5jaFxuICAgKiAga2V5cyAoZS5nLiwgYCdsb3cnYCwgYCdoaWdoJ2AsIGAnaGlnaCAoZGVmYXVsdCknYCkgYW5kIHBhcmFsbGVsXG4gICAqICBicmFuY2ggaWRzLiAqL1xuICByZWFkb25seSBsYWJlbD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBFdmVudCBwYXlsb2FkIGZvciBgU3RydWN0dXJlUmVjb3JkZXIub25Mb29wRWRnZUFkZGVkYC4gRmlyZXMgd2hlblxuICogYC5sb29wVG8odGFyZ2V0KWAgaW5zdGFsbHMgYSBiYWNrLWVkZ2UuIERpc3RpbmN0IGZyb21cbiAqIGBvbkVkZ2VBZGRlZGAgc28gY29uc3VtZXJzIGNhbiB0aGVtZSBiYWNrLWVkZ2VzIGRpZmZlcmVudGx5IGFuZFxuICogYmVjYXVzZSBydW50aW1lIGBvbkxvb3BgIGNhcnJpZXMgYGl0ZXJhdGlvbjogbnVtYmVyYCB3aGljaCBoYXMgbm9cbiAqIGJ1aWxkLXRpbWUgbWVhbmluZyDigJQga2VlcGluZyB0aGUgZXZlbnRzIHNlcGFyYXRlZCBhdm9pZHMgZm9yY2luZ1xuICogYW4gYGl0ZXJhdGlvbj86IG51bWJlcmAgbGllIGludG8gdGhlIHN0cnVjdHVyYWwgc2hhcGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RydWN0dXJlTG9vcEVkZ2VBZGRlZEV2ZW50IHtcbiAgcmVhZG9ubHkgZnJvbTogc3RyaW5nO1xuICByZWFkb25seSB0bzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEV2ZW50IHBheWxvYWQgZm9yIGBTdHJ1Y3R1cmVSZWNvcmRlci5vbkRlY2lkZXJDb21wbGV0ZWAuIEZpcmVzXG4gKiB3aGVuIGEgZGVjaWRlciAvIHNlbGVjdG9yIHN1Yi1idWlsZGVyIGNsb3NlcyB2aWEgYC5lbmQoKWAuIEJ5IHRoZVxuICogdGltZSB0aGlzIGZpcmVzIGV2ZXJ5IGJyYW5jaCBoYXMgYmVlbiBhbm5vdW5jZWQgYW5kIHRoZVxuICogYGRlZmF1bHRCcmFuY2hgIChpZiBzZXQgdmlhIGAuc2V0RGVmYXVsdCgpYCkgaXMgZmluYWwuIExldHNcbiAqIHJlY29yZGVycyB0cmVhdCB0aGUgZGVjaWRlciBhcyBuby1mdXJ0aGVyLW11dGF0aW9uIGFuZCBzbmFwc2hvdFxuICogaXRzIGJyYW5jaCBsaXN0IGFzIGZpbmFsLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cnVjdHVyZURlY2lkZXJDb21wbGV0ZUV2ZW50IHtcbiAgLyoqIERlY2lkZXIgLyBzZWxlY3RvciBzdGFnZSBpZC4gKi9cbiAgcmVhZG9ubHkgZGVjaWRlcjogc3RyaW5nO1xuICAvKiogU3BlYyB0eXBlIChgJ2RlY2lkZXInYCB2cyBgJ3NlbGVjdG9yJ2ApIOKAlCBleHBvc2VkIHNvIGNvbnN1bWVyc1xuICAgKiAgZG9uJ3QgbmVlZCB0byBsb29rIHVwIHRoZSBvcmlnaW5hbCBgb25TdGFnZUFkZGVkYCBldmVudC4gKi9cbiAgcmVhZG9ubHkgdHlwZTogJ2RlY2lkZXInIHwgJ3NlbGVjdG9yJztcbiAgLyoqIEJyYW5jaCBtZW1iZXIgaWRzIGluIGRlY2xhcmF0aW9uIG9yZGVyLiAqL1xuICByZWFkb25seSBicmFuY2hJZHM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKiogRGVmYXVsdCBicmFuY2ggaWQgd2hlbiBzZXQgdmlhIGAuc2V0RGVmYXVsdCgpYDsgdW5kZWZpbmVkIHdoZW5cbiAgICogIG5vIGRlZmF1bHQgaXMgY29uZmlndXJlZCAoZS5nLiwgc2VsZWN0b3JzKS4gKi9cbiAgcmVhZG9ubHkgZGVmYXVsdEJyYW5jaD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBFdmVudCBwYXlsb2FkIGZvciBgU3RydWN0dXJlUmVjb3JkZXIub25TdWJmbG93TW91bnRlZGAuIEZpcmVzIG9uY2VcbiAqIHBlciBzdWJmbG93IG1vdW50IChgYWRkU3ViRmxvd0NoYXJ0YCAvIGBhZGRTdWJGbG93Q2hhcnROZXh0YCBhbmRcbiAqIHRoZWlyIGxhenkgdmFyaWFudHMpLlxuICpcbiAqICoqTU9VTlQtT05MWSBzZW1hbnRpY3MqKiDigJQgdGhlIHN1YmZsb3cncyBPV04gc3RydWN0dXJlIGV2ZW50c1xuICogKGV2ZXJ5IGBvblN0YWdlQWRkZWRgIC8gYG9uRWRnZUFkZGVkYCBpbnNpZGUgdGhlIHN1YmZsb3cpIGZpcmVkXG4gKiBkdXJpbmcgdGhlIHN1YmZsb3cncyBvd24gYC5idWlsZCgpYCwgYmVmb3JlIHRoZSBtb3VudC4gUGFyZW50XG4gKiByZWNvcmRlcnMgZG8gTk9UIHJlY2VpdmUgYSByZXBsYXkuIEluc3RlYWQsIHRoaXMgZXZlbnQgZGVsaXZlcnNcbiAqIHRoZSBzdWJmbG93J3MgZnVsbCBzdHJ1Y3R1cmUgdmlhIGBzdWJmbG93U3BlY2AsIGFuZCBjb25zdW1lcnMgY2FuXG4gKiB3YWxrIGl0IHZpYSBgd2Fsa1N1YmZsb3dTcGVjYCBmcm9tIGBmb290cHJpbnRqcy90cmFjZWAuXG4gKlxuICogVGhpcyBtYXRjaGVzIGBGbG93UmVjb3JkZXIub25TdWJmbG93RW50cnlgIHNlbWFudGljcyBhdCBydW50aW1lXG4gKiAocGFyZW50cyBzZWUgdGhlIGJvdW5kYXJ5LCBub3QgYSByZXBsYXkgb2YgaW50ZXJuYWxzKSBhbmRcbiAqIHByZXNlcnZlcyB0aGUgXCJvbmUgcHVycG9zZSBwZXIgcmVjb3JkZXJcIiBjb252ZW50aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cnVjdHVyZVN1YmZsb3dNb3VudGVkRXZlbnQge1xuICAvKiogU3ViZmxvdyBpZGVudGlmaWVyIHRoZSBwYXJlbnQgYXNzaWduZWQgYXQgbW91bnQuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dJZDogc3RyaW5nO1xuICAvKiogSHVtYW4tcmVhZGFibGUgc3ViZmxvdyBuYW1lLiAqL1xuICByZWFkb25seSBzdWJmbG93TmFtZTogc3RyaW5nO1xuICAvKiogTW91bnQgbm9kZSBpZCBpbiB0aGUgcGFyZW50J3MgY2hhcnQuICovXG4gIHJlYWRvbmx5IHJvb3RTdGFnZUlkOiBzdHJpbmc7XG4gIC8qKiBUcnVlIHdoZW4gdGhlIG1vdW50IHVzZXMgbGF6eSByZXNvbHV0aW9uIChkZWZlcnJlZCBzdWJmbG93XG4gICAqICByZXNvbHV0aW9uIHVudGlsIGV4ZWN1dGlvbikuICovXG4gIHJlYWRvbmx5IGlzTGF6eT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBtb3VudGVkIHN1YmZsb3cncyBjb21wbGV0ZSBzcGVjIOKAlCB0aGUgU0FNRSBPQkpFQ1RcbiAgICogKD09PSByZWZlcmVuY2UgZXF1YWxpdHkpIHJlYWNoYWJsZSB2aWEgYHN1YmZsb3cuYnVpbGRUaW1lU3RydWN0dXJlYFxuICAgKiBmb3IgdGhlIEZsb3dDaGFydCB0aGUgY29uc3VtZXIgcGFzc2VkIHRvIGBhZGRTdWJGbG93Q2hhcnRCcmFuY2hgIC9cbiAgICogYGFkZFN1YkZsb3dDaGFydGAgLyBgYWRkU3ViRmxvd0NoYXJ0TmV4dGAuXG4gICAqXG4gICAqIFVOREVGSU5FRCBmb3IgbGF6eSBtb3VudHMgYXQgYnVpbGQgdGltZSAoYGlzTGF6eTogdHJ1ZWApIOKAlCB0aGVcbiAgICogc3ViZmxvdydzIHN0cnVjdHVyZSBoYXNuJ3QgYmVlbiByZXNvbHZlZCB5ZXQuIENvbnN1bWVycyB3YWl0aW5nIG9uXG4gICAqIGxhenkgc3ViZmxvd3MgaGFuZGxlIHRoZSBydW50aW1lIGBvblN1YmZsb3dFbnRyeWAgZXZlbnQgaW5zdGVhZC5cbiAgICpcbiAgICogSW1tdXRhYmxlIHBvc3QtYnVpbGQ7IGNvbnN1bWVycyBNVVNUIE5PVCBtdXRhdGUuXG4gICAqXG4gICAqIEBpbnRlcm5hbCBgU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlYCBpcyBsaWJyYXJ5LWludGVybmFsLlxuICAgKiAgICAgICAgICAgVXNlIGB3YWxrU3ViZmxvd1NwZWNgIGZyb20gYGZvb3RwcmludGpzL3RyYWNlYCBmb3IgdGhlXG4gICAqICAgICAgICAgICBzdGFibGUgcHVibGljIGNvbnRyYWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1NwZWM/OiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmU7XG5cbiAgLyoqXG4gICAqIExvY2FsIG1vdW50IGlkIG9mIHRoaXMgc3ViZmxvdyB3aXRoaW4gaXRzIHBhcmVudCDigJQgZXF1YWwgdG9cbiAgICogYHN1YmZsb3dJZGAgZm9yIHRvcC1sZXZlbCBtb3VudHMgKGUuZy4gYCdhdXRoJ2ApLCBjb21wb3NlZFxuICAgKiAoYCdhdXRoL3ZlcmlmeSdgKSBmb3IgbmVzdGVkIG1vdW50cyB3aG9zZSByZWNvcmRlciBpcyBhdHRhY2hlZFxuICAgKiB0byB0aGUgZ3JhbmRwYXJlbnQuIE1hdGNoZXMgcnVudGltZSBgdHJhdmVyc2FsQ29udGV4dC5zdWJmbG93UGF0aGBcbiAgICogc2VtYW50aWNzIOKAlCBORVZFUiBwcmVmaXhlZCB3aXRoIGBfX3Jvb3RfXy9gLlxuICAgKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1BhdGg6IHN0cmluZztcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTdHJ1Y3R1cmVSZWNvcmRlciBpbnRlcmZhY2Vcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIFBsdWdnYWJsZSBvYnNlcnZlciBmb3IgQlVJTEQtVElNRSBjaGFydCBjb25zdHJ1Y3Rpb24gZXZlbnRzLlxuICpcbiAqIEFsbCBtZXRob2RzIGFyZSBvcHRpb25hbCDigJQgaW1wbGVtZW50IG9ubHkgdGhlIGhvb2tzIHlvdSBuZWVkLlxuICogSGFuZGxlcnMgZmlyZSBTWU5DSFJPTk9VU0xZIGR1cmluZyBidWlsZGVyIG9wZXJhdGlvbnMgYW5kIGAuYnVpbGQoKWAuXG4gKiBBIHRocm93aW5nIGhhbmRsZXIgaXMgY2F1Z2h0IChzZWUgXCJFcnJvciBpc29sYXRpb25cIiBpbiB0aGUgZmlsZVxuICogaGVhZGVyKTsgc3Vic2VxdWVudCBkaXNwYXRjaCBjb250aW51ZXMuXG4gKlxuICogTGlmZWN5Y2xlOiBlYWNoIGBTdHJ1Y3R1cmVSZWNvcmRlcmAgaW5zdGFuY2UgaXMgcmVnaXN0ZXJlZCB2aWFcbiAqIEVJVEhFUiB0aGUgYGZsb3dDaGFydCgpYCBvcHRpb25zIGJhZyAoYHsgc3RydWN0dXJlUmVjb3JkZXJzOiBbcmVjXSB9YClcbiAqIE9SIHRoZSBmbHVlbnQgYC5hdHRhY2hTdHJ1Y3R1cmVSZWNvcmRlcihyZWMpYCBjaGFpbiDigJQgc2VlIHRoZSBmaWxlXG4gKiBoZWFkZXIgZm9yIHRoZSB0cmFkZS1vZmZzLiBSZWdpc3RyYXRpb24gYWZ0ZXIgYC5idWlsZCgpYCBpc1xuICogcmVqZWN0ZWQgKGNoYXJ0IGlzIHNlYWxlZCkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RydWN0dXJlUmVjb3JkZXIge1xuICAvKipcbiAgICogU3RhYmxlIGlkZW50aWZpZXIg4oCUIHVzZWQgYnkgdGhlIGRpc3BhdGNoZXIgdG8gc2NvcGUgZXJyb3JcbiAgICogbWVzc2FnZXMgYW5kIHRvIHN1cHBvcnQgYGRldGFjaChpZClgIGxvb2t1cC5cbiAgICpcbiAgICogQ29udmVudGlvbiAobWF0Y2hlcyBgRmxvd1JlY29yZGVyLmlkYCBmcm9tIENMQVVERS5tZCk6XG4gICAqICAgLSBkb21haW4tcHJlZml4ZWQga2ViYWItY2FzZSAoYCdsZW5zLXN0cnVjdHVyZSdgLFxuICAgKiAgICAgYCdhZ2VudGZvb3RwcmludC1jb21wb3NpdGlvbidgLCBgJ3RyYWNlLWV4cGxhaW5hYmxlJ2ApXG4gICAqICAgLSBzYW1lIGlkIOKGkiBtdWx0aXBsZSByZWNvcmRlcnMgY29leGlzdCAoTk9UIGRlZHVwbGljYXRlZCBieVxuICAgKiAgICAgaWQ7IHRoZSBkaXNwYXRjaGVyIGZpcmVzIGV2ZXJ5IGF0dGFjaGVkIHJlY29yZGVyIHJlZ2FyZGxlc3MpXG4gICAqICAgLSBgZGV0YWNoKGlkKWAgcmVtb3ZlcyBFVkVSWSByZWNvcmRlciB3aXRoIHRoYXQgaWQg4oCUIGJlXG4gICAqICAgICBpbnRlbnRpb25hbCBhYm91dCByZXVzZSBpZiB5b3UgcmVseSBvbiBzZWxlY3RpdmUgZGV0YWNoXG4gICAqXG4gICAqIENob29zZSBhIHN0YWJsZSBpZCBhdCBtb2R1bGUgbG9hZCBhbmQgZG9uJ3QgcmFuZG9taXNlIGl0IGFjcm9zc1xuICAgKiBydW5zIOKAlCBpdCBsYW5kcyBpbiBgU3RydWN0dXJlQnVpbGRFcnJvci5yZWNvcmRlcklkYCBzbyBkZWJ1Z1xuICAgKiBvdXRwdXQgaXMgZ3JlcHBhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICBvblN0YWdlQWRkZWQ/KGV2ZW50OiBTdHJ1Y3R1cmVTdGFnZUFkZGVkRXZlbnQpOiB2b2lkO1xuICBvbkVkZ2VBZGRlZD8oZXZlbnQ6IFN0cnVjdHVyZUVkZ2VBZGRlZEV2ZW50KTogdm9pZDtcbiAgb25Mb29wRWRnZUFkZGVkPyhldmVudDogU3RydWN0dXJlTG9vcEVkZ2VBZGRlZEV2ZW50KTogdm9pZDtcbiAgb25EZWNpZGVyQ29tcGxldGU/KGV2ZW50OiBTdHJ1Y3R1cmVEZWNpZGVyQ29tcGxldGVFdmVudCk6IHZvaWQ7XG4gIG9uU3ViZmxvd01vdW50ZWQ/KGV2ZW50OiBTdHJ1Y3R1cmVTdWJmbG93TW91bnRlZEV2ZW50KTogdm9pZDtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* StructureRecorderDispatcher — Fans build-time structure events out to N
|
|
4
|
+
* attached `StructureRecorder` instances.
|
|
5
|
+
*
|
|
6
|
+
* Mirrors `FlowRecorderDispatcher` (engine/narrative/) exactly:
|
|
7
|
+
*
|
|
8
|
+
* - `recorders: StructureRecorder[]` — attach order preserved
|
|
9
|
+
* - per-event fire methods early-return when no recorders attached
|
|
10
|
+
* (zero-allocation fast path)
|
|
11
|
+
* - per-recorder try/catch isolates errors; one bad recorder cannot
|
|
12
|
+
* cascade into the chain build or sibling recorders
|
|
13
|
+
* - errors route to BOTH the dev-mode console warning (matches
|
|
14
|
+
* FlowRecorderDispatcher) AND a structured `buildErrors`
|
|
15
|
+
* accumulator so consumers can inspect failures post-build
|
|
16
|
+
* - spec payloads are NOT frozen at dispatch time — handlers must
|
|
17
|
+
* respect the `readonly` markers on event payload types (the
|
|
18
|
+
* builder still needs to mutate `spec.next` after the immediate
|
|
19
|
+
* `onStageAdded` fires; see `fireStageAdded` for the full note,
|
|
20
|
+
* and `StructureRecorder.ts` header "Spec mutation" for the
|
|
21
|
+
* trust-model implications)
|
|
22
|
+
*
|
|
23
|
+
* The dispatcher itself owns NO chart state. The builder owns the
|
|
24
|
+
* dispatcher; events fire from the natural mutation points in
|
|
25
|
+
* FlowChartBuilder (L7.3).
|
|
26
|
+
*/
|
|
27
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
+
exports.StructureRecorderDispatcher = void 0;
|
|
29
|
+
const detectCircular_js_1 = require("../../scope/detectCircular.js");
|
|
30
|
+
/**
|
|
31
|
+
* Soft cap on the `errors[]` accumulator. Builds with thousands of
|
|
32
|
+
* stages and a misbehaving recorder that throws on every event would
|
|
33
|
+
* otherwise retain unbounded `{recorderId, method, message, error}`
|
|
34
|
+
* records — each closing over the thrown value (often an Error with
|
|
35
|
+
* a captured stack), preventing GC of any closure data the throw
|
|
36
|
+
* captured. The cap is for diagnosis, not forensic completeness;
|
|
37
|
+
* once exceeded, a single sentinel record signals truncation.
|
|
38
|
+
*/
|
|
39
|
+
const STRUCTURE_BUILD_ERRORS_CAP = 100;
|
|
40
|
+
class StructureRecorderDispatcher {
|
|
41
|
+
recorders = [];
|
|
42
|
+
errors = [];
|
|
43
|
+
_truncated = false;
|
|
44
|
+
/** Attach a `StructureRecorder`. Multiple recorders with the same
|
|
45
|
+
* id are allowed; the convention is one id per logical concern. */
|
|
46
|
+
attach(recorder) {
|
|
47
|
+
this.recorders.push(recorder);
|
|
48
|
+
}
|
|
49
|
+
/** Detach every recorder with the given id. */
|
|
50
|
+
detach(id) {
|
|
51
|
+
this.recorders = this.recorders.filter((r) => r.id !== id);
|
|
52
|
+
}
|
|
53
|
+
/** Defensive copy of the attached recorders — used in tests + by
|
|
54
|
+
* tooling that wants to inspect what's registered. */
|
|
55
|
+
getRecorders() {
|
|
56
|
+
return [...this.recorders];
|
|
57
|
+
}
|
|
58
|
+
/** Find one recorder by id. */
|
|
59
|
+
getRecorderById(id) {
|
|
60
|
+
return this.recorders.find((r) => r.id === id);
|
|
61
|
+
}
|
|
62
|
+
/** Read accumulated errors from this build. Returns a defensive copy. */
|
|
63
|
+
getErrors() {
|
|
64
|
+
return [...this.errors];
|
|
65
|
+
}
|
|
66
|
+
// ── fire* methods — called by the builder at each event moment ─────
|
|
67
|
+
fireStageAdded(event) {
|
|
68
|
+
if (this.recorders.length === 0)
|
|
69
|
+
return;
|
|
70
|
+
// NOTE: `event.spec` is NOT frozen here. `onStageAdded` fires
|
|
71
|
+
// IMMEDIATELY when a spec node is added — the builder still needs
|
|
72
|
+
// to mutate `spec.next` later (in the subsequent `addX` call).
|
|
73
|
+
// Freezing here would break the builder. Handler mutation of
|
|
74
|
+
// `event.spec` is documented as undefined behavior — see the
|
|
75
|
+
// StructureRecorder type's JSDoc + readonly markers on the
|
|
76
|
+
// event payload interface.
|
|
77
|
+
for (const r of this.recorders) {
|
|
78
|
+
try {
|
|
79
|
+
r.onStageAdded?.(event);
|
|
80
|
+
}
|
|
81
|
+
catch (err) {
|
|
82
|
+
this.recordError(r.id, 'onStageAdded', err);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
fireEdgeAdded(event) {
|
|
87
|
+
if (this.recorders.length === 0)
|
|
88
|
+
return;
|
|
89
|
+
// No spec on this event — pass through.
|
|
90
|
+
for (const r of this.recorders) {
|
|
91
|
+
try {
|
|
92
|
+
r.onEdgeAdded?.(event);
|
|
93
|
+
}
|
|
94
|
+
catch (err) {
|
|
95
|
+
this.recordError(r.id, 'onEdgeAdded', err);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
fireLoopEdgeAdded(event) {
|
|
100
|
+
if (this.recorders.length === 0)
|
|
101
|
+
return;
|
|
102
|
+
for (const r of this.recorders) {
|
|
103
|
+
try {
|
|
104
|
+
r.onLoopEdgeAdded?.(event);
|
|
105
|
+
}
|
|
106
|
+
catch (err) {
|
|
107
|
+
this.recordError(r.id, 'onLoopEdgeAdded', err);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
fireDeciderComplete(event) {
|
|
112
|
+
if (this.recorders.length === 0)
|
|
113
|
+
return;
|
|
114
|
+
for (const r of this.recorders) {
|
|
115
|
+
try {
|
|
116
|
+
r.onDeciderComplete?.(event);
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
this.recordError(r.id, 'onDeciderComplete', err);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
fireSubflowMounted(event) {
|
|
124
|
+
if (this.recorders.length === 0)
|
|
125
|
+
return;
|
|
126
|
+
for (const r of this.recorders) {
|
|
127
|
+
try {
|
|
128
|
+
r.onSubflowMounted?.(event);
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
this.recordError(r.id, 'onSubflowMounted', err);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Externally-callable error capture for events the builder fires
|
|
137
|
+
* OUTSIDE the normal fire* fan-out path — specifically the seed
|
|
138
|
+
* replay in `FlowChartBuilder.attachStructureRecorder()`, which
|
|
139
|
+
* targets one specific recorder rather than every attached recorder.
|
|
140
|
+
*
|
|
141
|
+
* Same observability contract as the internal `recordError`:
|
|
142
|
+
* accumulates on `getErrors()` AND logs in dev mode.
|
|
143
|
+
*/
|
|
144
|
+
recordErrorForReplay(recorderId, method, err) {
|
|
145
|
+
this.recordError(recorderId, method, err);
|
|
146
|
+
}
|
|
147
|
+
// ── Internals ───────────────────────────────────────────────────────
|
|
148
|
+
recordError(recorderId, method, err) {
|
|
149
|
+
const e = err;
|
|
150
|
+
const message = typeof e?.message === 'string' ? e.message : String(err);
|
|
151
|
+
// Soft cap to prevent unbounded growth + closure retention. Once
|
|
152
|
+
// hit, push a single sentinel describing the truncation and drop
|
|
153
|
+
// further records on the floor (still log in dev mode so the
|
|
154
|
+
// consumer notices the spam at its source).
|
|
155
|
+
if (this.errors.length < STRUCTURE_BUILD_ERRORS_CAP) {
|
|
156
|
+
this.errors.push({ recorderId, method, message, error: err });
|
|
157
|
+
}
|
|
158
|
+
else if (!this._truncated) {
|
|
159
|
+
this._truncated = true;
|
|
160
|
+
this.errors.push({
|
|
161
|
+
recorderId: '__truncated__',
|
|
162
|
+
method: '__truncated__',
|
|
163
|
+
message: `StructureRecorderDispatcher: error accumulator truncated at ${STRUCTURE_BUILD_ERRORS_CAP} entries; further errors suppressed.`,
|
|
164
|
+
error: null,
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
if ((0, detectCircular_js_1.isDevMode)()) {
|
|
168
|
+
// eslint-disable-next-line no-console
|
|
169
|
+
console.warn(`[footprint] StructureRecorderDispatcher: recorder "${recorderId}" threw in ${method}: ${message}. ` +
|
|
170
|
+
'See builder.getStructureBuildErrors() for the full list.');
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
exports.StructureRecorderDispatcher = StructureRecorderDispatcher;
|
|
175
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RydWN0dXJlUmVjb3JkZXJEaXNwYXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9idWlsZGVyL3N0cnVjdHVyZS9TdHJ1Y3R1cmVSZWNvcmRlckRpc3BhdGNoZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7OztBQUVILHFFQUEwRDtBQTJCMUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLDBCQUEwQixHQUFHLEdBQUcsQ0FBQztBQUV2QyxNQUFhLDJCQUEyQjtJQUM5QixTQUFTLEdBQXdCLEVBQUUsQ0FBQztJQUMzQixNQUFNLEdBQTBCLEVBQUUsQ0FBQztJQUM1QyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBRTNCO3dFQUNvRTtJQUNwRSxNQUFNLENBQUMsUUFBMkI7UUFDaEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELCtDQUErQztJQUMvQyxNQUFNLENBQUMsRUFBVTtRQUNmLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVEOzJEQUN1RDtJQUN2RCxZQUFZO1FBQ1YsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCwrQkFBK0I7SUFDL0IsZUFBZSxDQUFrRCxFQUFVO1FBQ3pFLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFrQixDQUFDO0lBQ2xFLENBQUM7SUFFRCx5RUFBeUU7SUFDekUsU0FBUztRQUNQLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsc0VBQXNFO0lBRXRFLGNBQWMsQ0FBQyxLQUErQjtRQUM1QyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPO1FBQ3hDLDhEQUE4RDtRQUM5RCxrRUFBa0U7UUFDbEUsK0RBQStEO1FBQy9ELDZEQUE2RDtRQUM3RCw2REFBNkQ7UUFDN0QsMkRBQTJEO1FBQzNELDJCQUEyQjtRQUMzQixLQUFLLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUM7Z0JBQ0gsQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFCLENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxjQUFjLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDOUMsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQThCO1FBQzFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU87UUFDeEMsd0NBQXdDO1FBQ3hDLEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQztnQkFDSCxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekIsQ0FBQztZQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUM3QyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUFrQztRQUNsRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPO1FBQ3hDLEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQztnQkFDSCxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0IsQ0FBQztZQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLGlCQUFpQixFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ2pELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQW9DO1FBQ3RELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUFFLE9BQU87UUFDeEMsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDO2dCQUNILENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9CLENBQUM7WUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2dCQUNiLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxtQkFBbUIsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNuRCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxLQUFtQztRQUNwRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPO1FBQ3hDLEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQztnQkFDSCxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5QixDQUFDO1lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDYixJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDbEQsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxvQkFBb0IsQ0FBQyxVQUFrQixFQUFFLE1BQWMsRUFBRSxHQUFZO1FBQ25FLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsdUVBQXVFO0lBRS9ELFdBQVcsQ0FBQyxVQUFrQixFQUFFLE1BQWMsRUFBRSxHQUFZO1FBQ2xFLE1BQU0sQ0FBQyxHQUFHLEdBQXdDLENBQUM7UUFDbkQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLEVBQUUsT0FBTyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pFLGlFQUFpRTtRQUNqRSxpRUFBaUU7UUFDakUsNkRBQTZEO1FBQzdELDRDQUE0QztRQUM1QyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLDBCQUEwQixFQUFFLENBQUM7WUFDcEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNoRSxDQUFDO2FBQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztnQkFDZixVQUFVLEVBQUUsZUFBZTtnQkFDM0IsTUFBTSxFQUFFLGVBQWU7Z0JBQ3ZCLE9BQU8sRUFBRSwrREFBK0QsMEJBQTBCLHNDQUFzQztnQkFDeEksS0FBSyxFQUFFLElBQUk7YUFDWixDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxJQUFBLDZCQUFTLEdBQUUsRUFBRSxDQUFDO1lBQ2hCLHNDQUFzQztZQUN0QyxPQUFPLENBQUMsSUFBSSxDQUNWLHNEQUFzRCxVQUFVLGNBQWMsTUFBTSxLQUFLLE9BQU8sSUFBSTtnQkFDbEcsMERBQTBELENBQzdELENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBMUlELGtFQTBJQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogU3RydWN0dXJlUmVjb3JkZXJEaXNwYXRjaGVyIOKAlCBGYW5zIGJ1aWxkLXRpbWUgc3RydWN0dXJlIGV2ZW50cyBvdXQgdG8gTlxuICogYXR0YWNoZWQgYFN0cnVjdHVyZVJlY29yZGVyYCBpbnN0YW5jZXMuXG4gKlxuICogTWlycm9ycyBgRmxvd1JlY29yZGVyRGlzcGF0Y2hlcmAgKGVuZ2luZS9uYXJyYXRpdmUvKSBleGFjdGx5OlxuICpcbiAqICAgLSBgcmVjb3JkZXJzOiBTdHJ1Y3R1cmVSZWNvcmRlcltdYCDigJQgYXR0YWNoIG9yZGVyIHByZXNlcnZlZFxuICogICAtIHBlci1ldmVudCBmaXJlIG1ldGhvZHMgZWFybHktcmV0dXJuIHdoZW4gbm8gcmVjb3JkZXJzIGF0dGFjaGVkXG4gKiAgICAgKHplcm8tYWxsb2NhdGlvbiBmYXN0IHBhdGgpXG4gKiAgIC0gcGVyLXJlY29yZGVyIHRyeS9jYXRjaCBpc29sYXRlcyBlcnJvcnM7IG9uZSBiYWQgcmVjb3JkZXIgY2Fubm90XG4gKiAgICAgY2FzY2FkZSBpbnRvIHRoZSBjaGFpbiBidWlsZCBvciBzaWJsaW5nIHJlY29yZGVyc1xuICogICAtIGVycm9ycyByb3V0ZSB0byBCT1RIIHRoZSBkZXYtbW9kZSBjb25zb2xlIHdhcm5pbmcgKG1hdGNoZXNcbiAqICAgICBGbG93UmVjb3JkZXJEaXNwYXRjaGVyKSBBTkQgYSBzdHJ1Y3R1cmVkIGBidWlsZEVycm9yc2BcbiAqICAgICBhY2N1bXVsYXRvciBzbyBjb25zdW1lcnMgY2FuIGluc3BlY3QgZmFpbHVyZXMgcG9zdC1idWlsZFxuICogICAtIHNwZWMgcGF5bG9hZHMgYXJlIE5PVCBmcm96ZW4gYXQgZGlzcGF0Y2ggdGltZSDigJQgaGFuZGxlcnMgbXVzdFxuICogICAgIHJlc3BlY3QgdGhlIGByZWFkb25seWAgbWFya2VycyBvbiBldmVudCBwYXlsb2FkIHR5cGVzICh0aGVcbiAqICAgICBidWlsZGVyIHN0aWxsIG5lZWRzIHRvIG11dGF0ZSBgc3BlYy5uZXh0YCBhZnRlciB0aGUgaW1tZWRpYXRlXG4gKiAgICAgYG9uU3RhZ2VBZGRlZGAgZmlyZXM7IHNlZSBgZmlyZVN0YWdlQWRkZWRgIGZvciB0aGUgZnVsbCBub3RlLFxuICogICAgIGFuZCBgU3RydWN0dXJlUmVjb3JkZXIudHNgIGhlYWRlciBcIlNwZWMgbXV0YXRpb25cIiBmb3IgdGhlXG4gKiAgICAgdHJ1c3QtbW9kZWwgaW1wbGljYXRpb25zKVxuICpcbiAqIFRoZSBkaXNwYXRjaGVyIGl0c2VsZiBvd25zIE5PIGNoYXJ0IHN0YXRlLiBUaGUgYnVpbGRlciBvd25zIHRoZVxuICogZGlzcGF0Y2hlcjsgZXZlbnRzIGZpcmUgZnJvbSB0aGUgbmF0dXJhbCBtdXRhdGlvbiBwb2ludHMgaW5cbiAqIEZsb3dDaGFydEJ1aWxkZXIgKEw3LjMpLlxuICovXG5cbmltcG9ydCB7IGlzRGV2TW9kZSB9IGZyb20gJy4uLy4uL3Njb3BlL2RldGVjdENpcmN1bGFyLmpzJztcbmltcG9ydCB0eXBlIHsgRmxvd0NoYXJ0U3BlYyB9IGZyb20gJy4uL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgU3RydWN0dXJlRGVjaWRlckNvbXBsZXRlRXZlbnQsXG4gIFN0cnVjdHVyZUVkZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVMb29wRWRnZUFkZGVkRXZlbnQsXG4gIFN0cnVjdHVyZVJlY29yZGVyLFxuICBTdHJ1Y3R1cmVTdGFnZUFkZGVkRXZlbnQsXG4gIFN0cnVjdHVyZVN1YmZsb3dNb3VudGVkRXZlbnQsXG59IGZyb20gJy4vU3RydWN0dXJlUmVjb3JkZXIuanMnO1xuXG4vKiogU3RydWN0dXJlZCBlcnJvciBjYXB0dXJlZCB3aGVuIGEgcmVjb3JkZXIgdGhyb3dzLiBSZWFkIHBvc3QtYnVpbGRcbiAqICB2aWEgYGJ1aWxkZXIuZ2V0U3RydWN0dXJlQnVpbGRFcnJvcnMoKWAg4oCUIGNhbGwgb24gdGhlIEJVSUxERVJcbiAqICByZWZlcmVuY2UgKE5PVCB0aGUgY2hhcnQgcmV0dXJuZWQgYnkgYC5idWlsZCgpYCkuIENhcHR1cmUgdGhlXG4gKiAgYnVpbGRlciByZWZlcmVuY2UgYmVmb3JlIGAuYnVpbGQoKWAgaWYgeW91IG5lZWQgcG9zdC1idWlsZCBhY2Nlc3MuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0cnVjdHVyZUJ1aWxkRXJyb3Ige1xuICAvKiogV2hpY2ggcmVjb3JkZXIncyBoYW5kbGVyIHRocmV3LiAqL1xuICByZWFkb25seSByZWNvcmRlcklkOiBzdHJpbmc7XG4gIC8qKiBXaGljaCBldmVudCBtZXRob2QgKGAnb25TdGFnZUFkZGVkJ2AsIGAnb25FZGdlQWRkZWQnYCwgLi4uKS4gKi9cbiAgcmVhZG9ubHkgbWV0aG9kOiBzdHJpbmc7XG4gIC8qKiBFcnJvciBtZXNzYWdlIGV4dHJhY3RlZCBmcm9tIHRoZSB0aHJvd24gdmFsdWUuICovXG4gIHJlYWRvbmx5IG1lc3NhZ2U6IHN0cmluZztcbiAgLyoqIFRoZSBvcmlnaW5hbCB0aHJvd24gdmFsdWUg4oCUIGBFcnJvcmAgaW5zdGFuY2Ugb3Igd2hhdGV2ZXIgdGhlXG4gICAqICByZWNvcmRlciB0aHJldy4gVXNlZnVsIHdoZW4gZGlhZ25vc2lzIG5lZWRzIGEgc3RhY2sgdHJhY2UuICovXG4gIHJlYWRvbmx5IGVycm9yOiB1bmtub3duO1xufVxuXG4vKipcbiAqIFNvZnQgY2FwIG9uIHRoZSBgZXJyb3JzW11gIGFjY3VtdWxhdG9yLiBCdWlsZHMgd2l0aCB0aG91c2FuZHMgb2ZcbiAqIHN0YWdlcyBhbmQgYSBtaXNiZWhhdmluZyByZWNvcmRlciB0aGF0IHRocm93cyBvbiBldmVyeSBldmVudCB3b3VsZFxuICogb3RoZXJ3aXNlIHJldGFpbiB1bmJvdW5kZWQgYHtyZWNvcmRlcklkLCBtZXRob2QsIG1lc3NhZ2UsIGVycm9yfWBcbiAqIHJlY29yZHMg4oCUIGVhY2ggY2xvc2luZyBvdmVyIHRoZSB0aHJvd24gdmFsdWUgKG9mdGVuIGFuIEVycm9yIHdpdGhcbiAqIGEgY2FwdHVyZWQgc3RhY2spLCBwcmV2ZW50aW5nIEdDIG9mIGFueSBjbG9zdXJlIGRhdGEgdGhlIHRocm93XG4gKiBjYXB0dXJlZC4gVGhlIGNhcCBpcyBmb3IgZGlhZ25vc2lzLCBub3QgZm9yZW5zaWMgY29tcGxldGVuZXNzO1xuICogb25jZSBleGNlZWRlZCwgYSBzaW5nbGUgc2VudGluZWwgcmVjb3JkIHNpZ25hbHMgdHJ1bmNhdGlvbi5cbiAqL1xuY29uc3QgU1RSVUNUVVJFX0JVSUxEX0VSUk9SU19DQVAgPSAxMDA7XG5cbmV4cG9ydCBjbGFzcyBTdHJ1Y3R1cmVSZWNvcmRlckRpc3BhdGNoZXIge1xuICBwcml2YXRlIHJlY29yZGVyczogU3RydWN0dXJlUmVjb3JkZXJbXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IGVycm9yczogU3RydWN0dXJlQnVpbGRFcnJvcltdID0gW107XG4gIHByaXZhdGUgX3RydW5jYXRlZCA9IGZhbHNlO1xuXG4gIC8qKiBBdHRhY2ggYSBgU3RydWN0dXJlUmVjb3JkZXJgLiBNdWx0aXBsZSByZWNvcmRlcnMgd2l0aCB0aGUgc2FtZVxuICAgKiAgaWQgYXJlIGFsbG93ZWQ7IHRoZSBjb252ZW50aW9uIGlzIG9uZSBpZCBwZXIgbG9naWNhbCBjb25jZXJuLiAqL1xuICBhdHRhY2gocmVjb3JkZXI6IFN0cnVjdHVyZVJlY29yZGVyKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvcmRlcnMucHVzaChyZWNvcmRlcik7XG4gIH1cblxuICAvKiogRGV0YWNoIGV2ZXJ5IHJlY29yZGVyIHdpdGggdGhlIGdpdmVuIGlkLiAqL1xuICBkZXRhY2goaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkZXJzID0gdGhpcy5yZWNvcmRlcnMuZmlsdGVyKChyKSA9PiByLmlkICE9PSBpZCk7XG4gIH1cblxuICAvKiogRGVmZW5zaXZlIGNvcHkgb2YgdGhlIGF0dGFjaGVkIHJlY29yZGVycyDigJQgdXNlZCBpbiB0ZXN0cyArIGJ5XG4gICAqICB0b29saW5nIHRoYXQgd2FudHMgdG8gaW5zcGVjdCB3aGF0J3MgcmVnaXN0ZXJlZC4gKi9cbiAgZ2V0UmVjb3JkZXJzKCk6IFN0cnVjdHVyZVJlY29yZGVyW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5yZWNvcmRlcnNdO1xuICB9XG5cbiAgLyoqIEZpbmQgb25lIHJlY29yZGVyIGJ5IGlkLiAqL1xuICBnZXRSZWNvcmRlckJ5SWQ8VCBleHRlbmRzIFN0cnVjdHVyZVJlY29yZGVyID0gU3RydWN0dXJlUmVjb3JkZXI+KGlkOiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5yZWNvcmRlcnMuZmluZCgocikgPT4gci5pZCA9PT0gaWQpIGFzIFQgfCB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogUmVhZCBhY2N1bXVsYXRlZCBlcnJvcnMgZnJvbSB0aGlzIGJ1aWxkLiBSZXR1cm5zIGEgZGVmZW5zaXZlIGNvcHkuICovXG4gIGdldEVycm9ycygpOiBTdHJ1Y3R1cmVCdWlsZEVycm9yW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5lcnJvcnNdO1xuICB9XG5cbiAgLy8g4pSA4pSAIGZpcmUqIG1ldGhvZHMg4oCUIGNhbGxlZCBieSB0aGUgYnVpbGRlciBhdCBlYWNoIGV2ZW50IG1vbWVudCDilIDilIDilIDilIDilIBcblxuICBmaXJlU3RhZ2VBZGRlZChldmVudDogU3RydWN0dXJlU3RhZ2VBZGRlZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIC8vIE5PVEU6IGBldmVudC5zcGVjYCBpcyBOT1QgZnJvemVuIGhlcmUuIGBvblN0YWdlQWRkZWRgIGZpcmVzXG4gICAgLy8gSU1NRURJQVRFTFkgd2hlbiBhIHNwZWMgbm9kZSBpcyBhZGRlZCDigJQgdGhlIGJ1aWxkZXIgc3RpbGwgbmVlZHNcbiAgICAvLyB0byBtdXRhdGUgYHNwZWMubmV4dGAgbGF0ZXIgKGluIHRoZSBzdWJzZXF1ZW50IGBhZGRYYCBjYWxsKS5cbiAgICAvLyBGcmVlemluZyBoZXJlIHdvdWxkIGJyZWFrIHRoZSBidWlsZGVyLiBIYW5kbGVyIG11dGF0aW9uIG9mXG4gICAgLy8gYGV2ZW50LnNwZWNgIGlzIGRvY3VtZW50ZWQgYXMgdW5kZWZpbmVkIGJlaGF2aW9yIOKAlCBzZWUgdGhlXG4gICAgLy8gU3RydWN0dXJlUmVjb3JkZXIgdHlwZSdzIEpTRG9jICsgcmVhZG9ubHkgbWFya2VycyBvbiB0aGVcbiAgICAvLyBldmVudCBwYXlsb2FkIGludGVyZmFjZS5cbiAgICBmb3IgKGNvbnN0IHIgb2YgdGhpcy5yZWNvcmRlcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHIub25TdGFnZUFkZGVkPy4oZXZlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMucmVjb3JkRXJyb3Ioci5pZCwgJ29uU3RhZ2VBZGRlZCcsIGVycik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZmlyZUVkZ2VBZGRlZChldmVudDogU3RydWN0dXJlRWRnZUFkZGVkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvcmRlcnMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgLy8gTm8gc3BlYyBvbiB0aGlzIGV2ZW50IOKAlCBwYXNzIHRocm91Z2guXG4gICAgZm9yIChjb25zdCByIG9mIHRoaXMucmVjb3JkZXJzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByLm9uRWRnZUFkZGVkPy4oZXZlbnQpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMucmVjb3JkRXJyb3Ioci5pZCwgJ29uRWRnZUFkZGVkJywgZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmaXJlTG9vcEVkZ2VBZGRlZChldmVudDogU3RydWN0dXJlTG9vcEVkZ2VBZGRlZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVjb3JkZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICAgIGZvciAoY29uc3QgciBvZiB0aGlzLnJlY29yZGVycykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgci5vbkxvb3BFZGdlQWRkZWQ/LihldmVudCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5yZWNvcmRFcnJvcihyLmlkLCAnb25Mb29wRWRnZUFkZGVkJywgZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmaXJlRGVjaWRlckNvbXBsZXRlKGV2ZW50OiBTdHJ1Y3R1cmVEZWNpZGVyQ29tcGxldGVFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBmb3IgKGNvbnN0IHIgb2YgdGhpcy5yZWNvcmRlcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHIub25EZWNpZGVyQ29tcGxldGU/LihldmVudCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5yZWNvcmRFcnJvcihyLmlkLCAnb25EZWNpZGVyQ29tcGxldGUnLCBlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZpcmVTdWJmbG93TW91bnRlZChldmVudDogU3RydWN0dXJlU3ViZmxvd01vdW50ZWRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29yZGVycy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICBmb3IgKGNvbnN0IHIgb2YgdGhpcy5yZWNvcmRlcnMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHIub25TdWJmbG93TW91bnRlZD8uKGV2ZW50KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLnJlY29yZEVycm9yKHIuaWQsICdvblN1YmZsb3dNb3VudGVkJywgZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXh0ZXJuYWxseS1jYWxsYWJsZSBlcnJvciBjYXB0dXJlIGZvciBldmVudHMgdGhlIGJ1aWxkZXIgZmlyZXNcbiAgICogT1VUU0lERSB0aGUgbm9ybWFsIGZpcmUqIGZhbi1vdXQgcGF0aCDigJQgc3BlY2lmaWNhbGx5IHRoZSBzZWVkXG4gICAqIHJlcGxheSBpbiBgRmxvd0NoYXJ0QnVpbGRlci5hdHRhY2hTdHJ1Y3R1cmVSZWNvcmRlcigpYCwgd2hpY2hcbiAgICogdGFyZ2V0cyBvbmUgc3BlY2lmaWMgcmVjb3JkZXIgcmF0aGVyIHRoYW4gZXZlcnkgYXR0YWNoZWQgcmVjb3JkZXIuXG4gICAqXG4gICAqIFNhbWUgb2JzZXJ2YWJpbGl0eSBjb250cmFjdCBhcyB0aGUgaW50ZXJuYWwgYHJlY29yZEVycm9yYDpcbiAgICogYWNjdW11bGF0ZXMgb24gYGdldEVycm9ycygpYCBBTkQgbG9ncyBpbiBkZXYgbW9kZS5cbiAgICovXG4gIHJlY29yZEVycm9yRm9yUmVwbGF5KHJlY29yZGVySWQ6IHN0cmluZywgbWV0aG9kOiBzdHJpbmcsIGVycjogdW5rbm93bik6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkRXJyb3IocmVjb3JkZXJJZCwgbWV0aG9kLCBlcnIpO1xuICB9XG5cbiAgLy8g4pSA4pSAIEludGVybmFscyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBwcml2YXRlIHJlY29yZEVycm9yKHJlY29yZGVySWQ6IHN0cmluZywgbWV0aG9kOiBzdHJpbmcsIGVycjogdW5rbm93bik6IHZvaWQge1xuICAgIGNvbnN0IGUgPSBlcnIgYXMgeyBtZXNzYWdlPzogdW5rbm93biB9IHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSB0eXBlb2YgZT8ubWVzc2FnZSA9PT0gJ3N0cmluZycgPyBlLm1lc3NhZ2UgOiBTdHJpbmcoZXJyKTtcbiAgICAvLyBTb2Z0IGNhcCB0byBwcmV2ZW50IHVuYm91bmRlZCBncm93dGggKyBjbG9zdXJlIHJldGVudGlvbi4gT25jZVxuICAgIC8vIGhpdCwgcHVzaCBhIHNpbmdsZSBzZW50aW5lbCBkZXNjcmliaW5nIHRoZSB0cnVuY2F0aW9uIGFuZCBkcm9wXG4gICAgLy8gZnVydGhlciByZWNvcmRzIG9uIHRoZSBmbG9vciAoc3RpbGwgbG9nIGluIGRldiBtb2RlIHNvIHRoZVxuICAgIC8vIGNvbnN1bWVyIG5vdGljZXMgdGhlIHNwYW0gYXQgaXRzIHNvdXJjZSkuXG4gICAgaWYgKHRoaXMuZXJyb3JzLmxlbmd0aCA8IFNUUlVDVFVSRV9CVUlMRF9FUlJPUlNfQ0FQKSB7XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKHsgcmVjb3JkZXJJZCwgbWV0aG9kLCBtZXNzYWdlLCBlcnJvcjogZXJyIH0pO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMuX3RydW5jYXRlZCkge1xuICAgICAgdGhpcy5fdHJ1bmNhdGVkID0gdHJ1ZTtcbiAgICAgIHRoaXMuZXJyb3JzLnB1c2goe1xuICAgICAgICByZWNvcmRlcklkOiAnX190cnVuY2F0ZWRfXycsXG4gICAgICAgIG1ldGhvZDogJ19fdHJ1bmNhdGVkX18nLFxuICAgICAgICBtZXNzYWdlOiBgU3RydWN0dXJlUmVjb3JkZXJEaXNwYXRjaGVyOiBlcnJvciBhY2N1bXVsYXRvciB0cnVuY2F0ZWQgYXQgJHtTVFJVQ1RVUkVfQlVJTERfRVJST1JTX0NBUH0gZW50cmllczsgZnVydGhlciBlcnJvcnMgc3VwcHJlc3NlZC5gLFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGBbZm9vdHByaW50XSBTdHJ1Y3R1cmVSZWNvcmRlckRpc3BhdGNoZXI6IHJlY29yZGVyIFwiJHtyZWNvcmRlcklkfVwiIHRocmV3IGluICR7bWV0aG9kfTogJHttZXNzYWdlfS4gYCArXG4gICAgICAgICAgJ1NlZSBidWlsZGVyLmdldFN0cnVjdHVyZUJ1aWxkRXJyb3JzKCkgZm9yIHRoZSBmdWxsIGxpc3QuJyxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbi8qKiBSZS1leHBvcnQgdGhlIEZsb3dDaGFydFNwZWMgdHlwZSBmb3IgZG93bnN0cmVhbSB0eXBlIGNvbXBsZXRlbmVzcy4gKi9cbmV4cG9ydCB0eXBlIHsgRmxvd0NoYXJ0U3BlYyB9O1xuIl19
|
|
@@ -13,4 +13,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
13
13
|
exports.ArrayMergeMode = void 0;
|
|
14
14
|
var types_js_1 = require("../engine/types.js");
|
|
15
15
|
Object.defineProperty(exports, "ArrayMergeMode", { enumerable: true, get: function () { return types_js_1.ArrayMergeMode; } });
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2J1aWxkZXIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7R0FTRzs7O0FBb0JILCtDQUFvRDtBQUEzQywwR0FBQSxjQUFjLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGJ1aWxkZXIvdHlwZXMudHMg4oCUIEFsbCB0eXBlcyB1c2VkIGJ5IHRoZSBidWlsZGVyIGxpYnJhcnkuXG4gKlxuICogU2hhcmVkIHR5cGVzIChTdGFnZU5vZGUsIFN0YWdlRnVuY3Rpb24sIGV0Yy4pIGFyZSBpbXBvcnRlZCBmcm9tIHRoZSBlbmdpbmUuXG4gKiBCdWlsZGVyLXNwZWNpZmljIHR5cGVzIChGbG93Q2hhcnRTcGVjLCBGbG93Q2hhcnQsIFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSlcbiAqIGFyZSBkZWZpbmVkIGxvY2FsbHkg4oCUIHRoZXkgY2FycnkgYnVpbGRlci1vbmx5IGZpZWxkcyAoZGVzY3JpcHRpb24sIG91dHB1dE1hcHBlciwgZXRjLikuXG4gKlxuICogTk9URTogQWxsIGVuZ2luZSBpbXBvcnRzIGFyZSBgaW1wb3J0IHR5cGVgIOKAlCB6ZXJvIHJ1bnRpbWUgZGVwZW5kZW5jeS5cbiAqIFRoZSBidWlsZGVyIHJlbWFpbnMgc3RhbmRhbG9uZSBhdCBydW50aW1lLlxuICovXG5cbmltcG9ydCB0eXBlIHsgU3RhZ2VOb2RlIH0gZnJvbSAnLi4vZW5naW5lL2dyYXBoL1N0YWdlTm9kZS5qcyc7XG5pbXBvcnQgdHlwZSB7IElMb2dnZXIsIFNjb3BlRmFjdG9yeSwgU3RhZ2VGdW5jdGlvbiwgVHJhdmVyc2FsRXh0cmFjdG9yIH0gZnJvbSAnLi4vZW5naW5lL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgU2NvcGVQcm90ZWN0aW9uTW9kZSB9IGZyb20gJy4uL3Njb3BlL3Byb3RlY3Rpb24vdHlwZXMuanMnO1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFJlLWV4cG9ydHMgZnJvbSBlbmdpbmUgKGNhbm9uaWNhbCBkZWZpbml0aW9ucylcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSB7IFJlc3VtZUZuLCBTdGFnZU5vZGUgfSBmcm9tICcuLi9lbmdpbmUvZ3JhcGgvU3RhZ2VOb2RlLmpzJztcbmV4cG9ydCB0eXBlIHtcbiAgSUxvZ2dlcixcbiAgU3RhZ2VGdW5jdGlvbixcbiAgU3RyZWFtQ2FsbGJhY2ssXG4gIFN0cmVhbUhhbmRsZXJzLFxuICBTdHJlYW1MaWZlY3ljbGVIYW5kbGVyLFxuICBTdHJlYW1Ub2tlbkhhbmRsZXIsXG4gIFN1YmZsb3dNb3VudE9wdGlvbnMsXG59IGZyb20gJy4uL2VuZ2luZS90eXBlcy5qcyc7XG5leHBvcnQgeyBBcnJheU1lcmdlTW9kZSB9IGZyb20gJy4uL2VuZ2luZS90eXBlcy5qcyc7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gQWxpYXNlc1xuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKiBSZWxheGVkLWdlbmVyaWMgYWxpYXMgZm9yIGJ1aWxkZXIgZXJnb25vbWljcy4gKi9cbmV4cG9ydCB0eXBlIFN0YWdlRm4gPSBTdGFnZUZ1bmN0aW9uPGFueSwgYW55PjtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTY29wZSBQcm90ZWN0aW9uIOKAlCBjYW5vbmljYWwgZGVmaW5pdGlvbiBpbiBzY29wZS9wcm90ZWN0aW9uL3R5cGVzLnRzXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IHR5cGUgeyBTY29wZVByb3RlY3Rpb25Nb2RlIH07XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU2VyaWFsaXplZCBQaXBlbGluZSBTdHJ1Y3R1cmUgKEpTT04tc2FmZSwgZm9yIHZpc3VhbGl6YXRpb24pXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IGludGVyZmFjZSBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmUge1xuICBuYW1lOiBzdHJpbmc7XG4gIGlkOiBzdHJpbmc7XG4gIHR5cGU6ICdzdGFnZScgfCAnZGVjaWRlcicgfCAnc2VsZWN0b3InIHwgJ2ZvcmsnIHwgJ3N0cmVhbWluZycgfCAnc3ViZmxvdycgfCAnbG9vcCc7XG4gIC8qKiBTZW1hbnRpYyBpY29uIGhpbnQgZm9yIHZpc3VhbGl6YXRpb24gKGUuZy4sIFwibGxtXCIsIFwidG9vbFwiLCBcInJhZ1wiLCBcImFnZW50XCIsIFwic3RhcnRcIikgKi9cbiAgaWNvbj86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlW107XG4gIG5leHQ/OiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmU7XG4gIGhhc0RlY2lkZXI/OiBib29sZWFuO1xuICBoYXNTZWxlY3Rvcj86IGJvb2xlYW47XG4gIGJyYW5jaElkcz86IHN0cmluZ1tdO1xuICBsb29wVGFyZ2V0Pzogc3RyaW5nO1xuICBpc1N0cmVhbWluZz86IGJvb2xlYW47XG4gIHN0cmVhbUlkPzogc3RyaW5nO1xuICBpc1BhcmFsbGVsQ2hpbGQ/OiBib29sZWFuO1xuICBwYXJhbGxlbEdyb3VwSWQ/OiBzdHJpbmc7XG4gIGlzU3ViZmxvd1Jvb3Q/OiBib29sZWFuO1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIHN1YmZsb3dOYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogTmVzdGVkIHBpcGVsaW5lIHN0cnVjdHVyZSBmb3IgYSBzdWJmbG93IG5vZGUuXG4gICAqIFdBUk5JTkc6IEFueSBmdXR1cmUgd2Fsa2VyIHRoYXQgdHJhdmVyc2VzIHRoaXMgZmllbGQgcmVjdXJzaXZlbHkgbXVzdCBhcHBseSBpdHMgb3duXG4gICAqIGRlcHRoIGd1YXJkIChzZWUgTUFYX1dBTEtfREVQVEggaW4gY29udHJhY3Qvb3BlbmFwaS50cykuIFRoZSBjdXJyZW50IGBidWlsZERlc2NyaXB0aW9uYFxuICAgKiB3YWxrIGluIG9wZW5hcGkudHMgZG9lcyBOT1QgdHJhdmVyc2Ugc3ViZmxvd1N0cnVjdHVyZSDigJQgaWYgaXQgZXZlciBkb2VzLCB0aGUgZGVwdGhcbiAgICogZ3VhcmQgbXVzdCBjb3ZlciBib3RoIHRoZSBgbmV4dGAgY2hhaW4gYW5kIHRoaXMgbmVzdGVkIHN0cnVjdHVyZS5cbiAgICovXG4gIHN1YmZsb3dTdHJ1Y3R1cmU/OiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmU7XG4gIGl0ZXJhdGlvbkNvdW50PzogbnVtYmVyO1xuICAvKiogVHJ1ZSB3aGVuIHRoaXMgc3ViZmxvdyB1c2VzIGxhenkgcmVzb2x1dGlvbiAoZGVmZXJyZWQgdW50aWwgZXhlY3V0aW9uKS4gKi9cbiAgaXNMYXp5PzogYm9vbGVhbjtcbiAgLyoqIFRydWUgd2hlbiB0aGlzIG5vZGUgaXMgYSBiYWNrLWVkZ2UgcmVmZXJlbmNlIGNyZWF0ZWQgYnkgbG9vcFRvKCkg4oCUIG5vdCBhbiBleGVjdXRhYmxlIHN0YWdlLiAqL1xuICBpc0xvb3BSZWZlcmVuY2U/OiBib29sZWFuO1xuICAvKiogV2hlbiB0cnVlLCB0aGlzIHN0YWdlIGNhbiBwYXVzZSBleGVjdXRpb24gKFBhdXNhYmxlSGFuZGxlciBwYXR0ZXJuKS4gKi9cbiAgaXNQYXVzYWJsZT86IGJvb2xlYW47XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gRmxvd0NoYXJ0U3BlYyAocHVyZSBKU09OLCBubyBmdW5jdGlvbnMg4oCUIGZvciBGReKGkkJFIHRyYW5zcG9ydClcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgaW50ZXJmYWNlIEZsb3dDaGFydFNwZWMge1xuICBuYW1lOiBzdHJpbmc7XG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBOb2RlIHR5cGUg4oCUIG1hdGNoZXMgYFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZS50eXBlYCBmb3IgdmlzdWFsaXphdGlvbiBhbGlnbm1lbnQuICovXG4gIHR5cGU/OiAnc3RhZ2UnIHwgJ2RlY2lkZXInIHwgJ3NlbGVjdG9yJyB8ICdmb3JrJyB8ICdzdHJlYW1pbmcnIHwgJ3N1YmZsb3cnIHwgJ2xvb3AnO1xuICAvKiogU2VtYW50aWMgaWNvbiBoaW50IGZvciB2aXN1YWxpemF0aW9uIChlLmcuLCBcImxsbVwiLCBcInRvb2xcIiwgXCJyYWdcIiwgXCJhZ2VudFwiLCBcInN0YXJ0XCIpICovXG4gIGljb24/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBjaGlsZHJlbj86IEZsb3dDaGFydFNwZWNbXTtcbiAgbmV4dD86IEZsb3dDaGFydFNwZWM7XG4gIGhhc0RlY2lkZXI/OiBib29sZWFuO1xuICBoYXNTZWxlY3Rvcj86IGJvb2xlYW47XG4gIGJyYW5jaElkcz86IHN0cmluZ1tdO1xuICBsb29wVGFyZ2V0Pzogc3RyaW5nO1xuICBpc1N0cmVhbWluZz86IGJvb2xlYW47XG4gIHN0cmVhbUlkPzogc3RyaW5nO1xuICBpc1BhcmFsbGVsQ2hpbGQ/OiBib29sZWFuO1xuICBwYXJhbGxlbEdyb3VwSWQ/OiBzdHJpbmc7XG4gIGlzU3ViZmxvd1Jvb3Q/OiBib29sZWFuO1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIHN1YmZsb3dOYW1lPzogc3RyaW5nO1xuICAvKiogVHJ1ZSB3aGVuIHRoaXMgbm9kZSBpcyBhIGJhY2stZWRnZSByZWZlcmVuY2UgY3JlYXRlZCBieSBsb29wVG8oKSDigJQgbm90IGFuIGV4ZWN1dGFibGUgc3RhZ2UuICovXG4gIGlzTG9vcFJlZmVyZW5jZT86IGJvb2xlYW47XG59XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gQnVpbGQtVGltZSBFeHRyYWN0b3Jcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogTWV0YWRhdGEgcHJvdmlkZWQgdG8gdGhlIGJ1aWxkLXRpbWUgZXh0cmFjdG9yIGZvciBlYWNoIG5vZGUuICovXG5leHBvcnQgdHlwZSBCdWlsZFRpbWVOb2RlTWV0YWRhdGEgPSBGbG93Q2hhcnRTcGVjO1xuXG5leHBvcnQgdHlwZSBCdWlsZFRpbWVFeHRyYWN0b3I8VFJlc3VsdCA9IEZsb3dDaGFydFNwZWM+ID0gKG1ldGFkYXRhOiBCdWlsZFRpbWVOb2RlTWV0YWRhdGEpID0+IFRSZXN1bHQ7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gVHJhdmVyc2FsIEV4dHJhY3RvciAocnVudGltZSkg4oCUIGNhbm9uaWNhbCBkZWZpbml0aW9uIGxpdmVzIGluIGVuZ2luZS90eXBlcy5cbi8vIFJlLWV4cG9ydGVkIGhlcmUgc28gY2FsbGVycyBkb24ndCBuZWVkIHR3byBpbXBvcnQgcGF0aHMuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IHR5cGUgeyBUcmF2ZXJzYWxFeHRyYWN0b3IgfSBmcm9tICcuLi9lbmdpbmUvdHlwZXMuanMnO1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIEZsb3dDaGFydCDigJQgY29tcGlsZWQgb3V0cHV0IG9mIGJ1aWxkKClcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSBGbG93Q2hhcnQ8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiA9IHtcbiAgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT47XG4gIHN0YWdlTWFwOiBNYXA8c3RyaW5nLCBTdGFnZUZ1bmN0aW9uPFRPdXQsIFRTY29wZT4+O1xuICBleHRyYWN0b3I/OiBUcmF2ZXJzYWxFeHRyYWN0b3I7XG4gIHN1YmZsb3dzPzogUmVjb3JkPHN0cmluZywgeyByb290OiBTdGFnZU5vZGU8VE91dCwgVFNjb3BlPiB9PjtcbiAgYnVpbGRUaW1lU3RydWN0dXJlOiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmU7XG4gIGVuYWJsZU5hcnJhdGl2ZT86IGJvb2xlYW47XG4gIGxvZ2dlcj86IElMb2dnZXI7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHN0YWdlRGVzY3JpcHRpb25zOiBNYXA8c3RyaW5nLCBzdHJpbmc+O1xuICAvKiogSW5wdXQgc2NoZW1hIChab2Qgb3IgSlNPTiBTY2hlbWEpIOKAlCBkZWNsYXJlZCB2aWEgc2V0SW5wdXRTY2hlbWEoKSBvciAuY29udHJhY3QoKS4gKi9cbiAgaW5wdXRTY2hlbWE/OiB1bmtub3duO1xuICAvKiogT3V0cHV0IHNjaGVtYSAoWm9kIG9yIEpTT04gU2NoZW1hKSDigJQgZGVjbGFyZWQgdmlhIHNldE91dHB1dFNjaGVtYSgpIG9yIC5jb250cmFjdCgpLiAqL1xuICBvdXRwdXRTY2hlbWE/OiB1bmtub3duO1xuICAvKiogT3V0cHV0IG1hcHBlciDigJQgZXh0cmFjdHMgcmVzcG9uc2UgZnJvbSBmaW5hbCBzY29wZS4gKi9cbiAgb3V0cHV0TWFwcGVyPzogKGZpbmFsU2NvcGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB1bmtub3duO1xuICAvKiogU2NvcGUgZmFjdG9yeSDigJQgYXV0by1lbWJlZGRlZCBieSBmbG93Q2hhcnQ8VD4oKS4gRXhlY3V0b3IgcmVhZHMgdGhpcyBpZiBubyBmYWN0b3J5IHBhcmFtLiAqL1xuICBzY29wZUZhY3Rvcnk/OiBTY29wZUZhY3Rvcnk8VFNjb3BlPjtcbn07XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU2ltcGxpZmllZCBQYXJhbGxlbCBTcGVjIChmb3IgYWRkTGlzdE9mRnVuY3Rpb24pXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IHR5cGUgU2ltcGxpZmllZFBhcmFsbGVsU3BlYzxUT3V0ID0gYW55LCBUU2NvcGUgPSBhbnk+ID0ge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGZuPzogU3RhZ2VGdW5jdGlvbjxUT3V0LCBUU2NvcGU+O1xufTtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBFeGVjT3B0aW9ucyAoZm9yIGV4ZWN1dGUoKSBjb252ZW5pZW5jZSDigJQgdXNlZCBieSBydW5uZXIgbGF5ZXIpXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuZXhwb3J0IHR5cGUgRXhlY09wdGlvbnMgPSB7XG4gIGRlZmF1bHRzPzogdW5rbm93bjtcbiAgaW5pdGlhbD86IHVua25vd247XG4gIHJlYWRPbmx5PzogdW5rbm93bjtcbiAgdGhyb3R0bGluZ0Vycm9yQ2hlY2tlcj86IChlOiB1bmtub3duKSA9PiBib29sZWFuO1xuICBzY29wZVByb3RlY3Rpb25Nb2RlPzogU2NvcGVQcm90ZWN0aW9uTW9kZTtcbiAgZW5hYmxlTmFycmF0aXZlPzogYm9vbGVhbjtcbn07XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gU3ViZmxvd1JlZlxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBpbnRlcmZhY2UgU3ViZmxvd1JlZiB7XG4gICRyZWY6IHN0cmluZztcbiAgbW91bnRJZDogc3RyaW5nO1xufVxuIl19
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL2J1aWxkZXIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7R0FTRzs7O0FBcUJILCtDQUFvRDtBQUEzQywwR0FBQSxjQUFjLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGJ1aWxkZXIvdHlwZXMudHMg4oCUIEFsbCB0eXBlcyB1c2VkIGJ5IHRoZSBidWlsZGVyIGxpYnJhcnkuXG4gKlxuICogU2hhcmVkIHR5cGVzIChTdGFnZU5vZGUsIFN0YWdlRnVuY3Rpb24sIGV0Yy4pIGFyZSBpbXBvcnRlZCBmcm9tIHRoZSBlbmdpbmUuXG4gKiBCdWlsZGVyLXNwZWNpZmljIHR5cGVzIChGbG93Q2hhcnRTcGVjLCBGbG93Q2hhcnQsIFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSlcbiAqIGFyZSBkZWZpbmVkIGxvY2FsbHkg4oCUIHRoZXkgY2FycnkgYnVpbGRlci1vbmx5IGZpZWxkcyAoZGVzY3JpcHRpb24sIG91dHB1dE1hcHBlciwgZXRjLikuXG4gKlxuICogTk9URTogQWxsIGVuZ2luZSBpbXBvcnRzIGFyZSBgaW1wb3J0IHR5cGVgIOKAlCB6ZXJvIHJ1bnRpbWUgZGVwZW5kZW5jeS5cbiAqIFRoZSBidWlsZGVyIHJlbWFpbnMgc3RhbmRhbG9uZSBhdCBydW50aW1lLlxuICovXG5cbmltcG9ydCB0eXBlIHsgU3RhZ2VOb2RlIH0gZnJvbSAnLi4vZW5naW5lL2dyYXBoL1N0YWdlTm9kZS5qcyc7XG5pbXBvcnQgdHlwZSB7IElMb2dnZXIsIFNjb3BlRmFjdG9yeSwgU3RhZ2VGdW5jdGlvbiB9IGZyb20gJy4uL2VuZ2luZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFNjb3BlUHJvdGVjdGlvbk1vZGUgfSBmcm9tICcuLi9zY29wZS9wcm90ZWN0aW9uL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgU3RydWN0dXJlUmVjb3JkZXIgfSBmcm9tICcuL3N0cnVjdHVyZS9TdHJ1Y3R1cmVSZWNvcmRlci5qcyc7XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gUmUtZXhwb3J0cyBmcm9tIGVuZ2luZSAoY2Fub25pY2FsIGRlZmluaXRpb25zKVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIHsgUmVzdW1lRm4sIFN0YWdlTm9kZSB9IGZyb20gJy4uL2VuZ2luZS9ncmFwaC9TdGFnZU5vZGUuanMnO1xuZXhwb3J0IHR5cGUge1xuICBJTG9nZ2VyLFxuICBTdGFnZUZ1bmN0aW9uLFxuICBTdHJlYW1DYWxsYmFjayxcbiAgU3RyZWFtSGFuZGxlcnMsXG4gIFN0cmVhbUxpZmVjeWNsZUhhbmRsZXIsXG4gIFN0cmVhbVRva2VuSGFuZGxlcixcbiAgU3ViZmxvd01vdW50T3B0aW9ucyxcbn0gZnJvbSAnLi4vZW5naW5lL3R5cGVzLmpzJztcbmV4cG9ydCB7IEFycmF5TWVyZ2VNb2RlIH0gZnJvbSAnLi4vZW5naW5lL3R5cGVzLmpzJztcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBBbGlhc2VzXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIFJlbGF4ZWQtZ2VuZXJpYyBhbGlhcyBmb3IgYnVpbGRlciBlcmdvbm9taWNzLiAqL1xuZXhwb3J0IHR5cGUgU3RhZ2VGbiA9IFN0YWdlRnVuY3Rpb248YW55LCBhbnk+O1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFNjb3BlIFByb3RlY3Rpb24g4oCUIGNhbm9uaWNhbCBkZWZpbml0aW9uIGluIHNjb3BlL3Byb3RlY3Rpb24vdHlwZXMudHNcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSB7IFNjb3BlUHJvdGVjdGlvbk1vZGUgfTtcblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBTZXJpYWxpemVkIFBpcGVsaW5lIFN0cnVjdHVyZSAoSlNPTi1zYWZlLCBmb3IgdmlzdWFsaXphdGlvbilcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgaW50ZXJmYWNlIFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgaWQ6IHN0cmluZztcbiAgdHlwZTogJ3N0YWdlJyB8ICdkZWNpZGVyJyB8ICdzZWxlY3RvcicgfCAnZm9yaycgfCAnc3RyZWFtaW5nJyB8ICdzdWJmbG93JyB8ICdsb29wJztcbiAgLyoqIFNlbWFudGljIGljb24gaGludCBmb3IgdmlzdWFsaXphdGlvbiAoZS5nLiwgXCJsbG1cIiwgXCJ0b29sXCIsIFwicmFnXCIsIFwiYWdlbnRcIiwgXCJzdGFydFwiKSAqL1xuICBpY29uPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBTZXJpYWxpemVkUGlwZWxpbmVTdHJ1Y3R1cmVbXTtcbiAgbmV4dD86IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZTtcbiAgaGFzRGVjaWRlcj86IGJvb2xlYW47XG4gIGhhc1NlbGVjdG9yPzogYm9vbGVhbjtcbiAgYnJhbmNoSWRzPzogc3RyaW5nW107XG4gIGxvb3BUYXJnZXQ/OiBzdHJpbmc7XG4gIGlzU3RyZWFtaW5nPzogYm9vbGVhbjtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIGlzUGFyYWxsZWxDaGlsZD86IGJvb2xlYW47XG4gIHBhcmFsbGVsR3JvdXBJZD86IHN0cmluZztcbiAgaXNTdWJmbG93Um9vdD86IGJvb2xlYW47XG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgc3ViZmxvd05hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBOZXN0ZWQgcGlwZWxpbmUgc3RydWN0dXJlIGZvciBhIHN1YmZsb3cgbm9kZS5cbiAgICogV0FSTklORzogQW55IGZ1dHVyZSB3YWxrZXIgdGhhdCB0cmF2ZXJzZXMgdGhpcyBmaWVsZCByZWN1cnNpdmVseSBtdXN0IGFwcGx5IGl0cyBvd25cbiAgICogZGVwdGggZ3VhcmQgKHNlZSBNQVhfV0FMS19ERVBUSCBpbiBjb250cmFjdC9vcGVuYXBpLnRzKS4gVGhlIGN1cnJlbnQgYGJ1aWxkRGVzY3JpcHRpb25gXG4gICAqIHdhbGsgaW4gb3BlbmFwaS50cyBkb2VzIE5PVCB0cmF2ZXJzZSBzdWJmbG93U3RydWN0dXJlIOKAlCBpZiBpdCBldmVyIGRvZXMsIHRoZSBkZXB0aFxuICAgKiBndWFyZCBtdXN0IGNvdmVyIGJvdGggdGhlIGBuZXh0YCBjaGFpbiBhbmQgdGhpcyBuZXN0ZWQgc3RydWN0dXJlLlxuICAgKi9cbiAgc3ViZmxvd1N0cnVjdHVyZT86IFNlcmlhbGl6ZWRQaXBlbGluZVN0cnVjdHVyZTtcbiAgaXRlcmF0aW9uQ291bnQ/OiBudW1iZXI7XG4gIC8qKiBUcnVlIHdoZW4gdGhpcyBzdWJmbG93IHVzZXMgbGF6eSByZXNvbHV0aW9uIChkZWZlcnJlZCB1bnRpbCBleGVjdXRpb24pLiAqL1xuICBpc0xhenk/OiBib29sZWFuO1xuICAvKiogVHJ1ZSB3aGVuIHRoaXMgbm9kZSBpcyBhIGJhY2stZWRnZSByZWZlcmVuY2UgY3JlYXRlZCBieSBsb29wVG8oKSDigJQgbm90IGFuIGV4ZWN1dGFibGUgc3RhZ2UuICovXG4gIGlzTG9vcFJlZmVyZW5jZT86IGJvb2xlYW47XG4gIC8qKiBXaGVuIHRydWUsIHRoaXMgc3RhZ2UgY2FuIHBhdXNlIGV4ZWN1dGlvbiAoUGF1c2FibGVIYW5kbGVyIHBhdHRlcm4pLiAqL1xuICBpc1BhdXNhYmxlPzogYm9vbGVhbjtcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBGbG93Q2hhcnRTcGVjIChwdXJlIEpTT04sIG5vIGZ1bmN0aW9ucyDigJQgZm9yIEZF4oaSQkUgdHJhbnNwb3J0KVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0NoYXJ0U3BlYyB7XG4gIG5hbWU6IHN0cmluZztcbiAgaWQ6IHN0cmluZztcbiAgLyoqIE5vZGUgdHlwZSDigJQgbWF0Y2hlcyBgU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlLnR5cGVgIGZvciB2aXN1YWxpemF0aW9uIGFsaWdubWVudC4gKi9cbiAgdHlwZT86ICdzdGFnZScgfCAnZGVjaWRlcicgfCAnc2VsZWN0b3InIHwgJ2ZvcmsnIHwgJ3N0cmVhbWluZycgfCAnc3ViZmxvdycgfCAnbG9vcCc7XG4gIC8qKiBTZW1hbnRpYyBpY29uIGhpbnQgZm9yIHZpc3VhbGl6YXRpb24gKGUuZy4sIFwibGxtXCIsIFwidG9vbFwiLCBcInJhZ1wiLCBcImFnZW50XCIsIFwic3RhcnRcIikgKi9cbiAgaWNvbj86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogRmxvd0NoYXJ0U3BlY1tdO1xuICBuZXh0PzogRmxvd0NoYXJ0U3BlYztcbiAgaGFzRGVjaWRlcj86IGJvb2xlYW47XG4gIGhhc1NlbGVjdG9yPzogYm9vbGVhbjtcbiAgYnJhbmNoSWRzPzogc3RyaW5nW107XG4gIGxvb3BUYXJnZXQ/OiBzdHJpbmc7XG4gIGlzU3RyZWFtaW5nPzogYm9vbGVhbjtcbiAgc3RyZWFtSWQ/OiBzdHJpbmc7XG4gIGlzUGFyYWxsZWxDaGlsZD86IGJvb2xlYW47XG4gIHBhcmFsbGVsR3JvdXBJZD86IHN0cmluZztcbiAgaXNTdWJmbG93Um9vdD86IGJvb2xlYW47XG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgc3ViZmxvd05hbWU/OiBzdHJpbmc7XG4gIC8qKiBUcnVlIHdoZW4gdGhpcyBub2RlIGlzIGEgYmFjay1lZGdlIHJlZmVyZW5jZSBjcmVhdGVkIGJ5IGxvb3BUbygpIOKAlCBub3QgYW4gZXhlY3V0YWJsZSBzdGFnZS4gKi9cbiAgaXNMb29wUmVmZXJlbmNlPzogYm9vbGVhbjtcbn1cblxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4vLyBmbG93Q2hhcnQoKSBvcHRpb25zIGJhZ1xuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogT3B0aW9ucy1iYWcgYXJndW1lbnQgc2hhcGUgZm9yIHRoZSBgZmxvd0NoYXJ0KClgIGZhY3RvcnkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmxvd0NoYXJ0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBCdWlsZC10aW1lIHJlY29yZGVycyB0byBhdHRhY2ggQkVGT1JFIGBzdGFydCgpYCBmaXJlcy4gRXF1aXZhbGVudFxuICAgKiB0byBjaGFpbmluZyBgLmF0dGFjaFN0cnVjdHVyZVJlY29yZGVyKHJlYylgIGltbWVkaWF0ZWx5IGFmdGVyIHRoZVxuICAgKiBmYWN0b3J5IHJldHVybnMg4oCUIGJ1dCByZWdpc3RlcmVkIEVBUkxJRVIsIHNvIGV2ZW4gdGhlIHNlZWQgZXZlbnRcbiAgICogZmlyZXMgdGhyb3VnaCB0aGUgZGlzcGF0Y2hlciB3aXRob3V0IG5lZWRpbmcgdGhlIHNlZWQtcmVwbGF5IHBhdGguXG4gICAqXG4gICAqIE11bHRpcGxlIHJlY29yZGVycyBhdHRhY2ggaW4gYXJyYXkgb3JkZXIgKHNhbWUgYXNcbiAgICogYC5hdHRhY2hTdHJ1Y3R1cmVSZWNvcmRlcmAgcmVwZWF0ZWQpLiBTZWUgYFN0cnVjdHVyZVJlY29yZGVyYCBKU0RvY1xuICAgKiBmb3IgZXZlbnQgc2VtYW50aWNzLCBvcmRlcmluZyBpbnZhcmlhbnRzLCBhbmQgdGhlIHRydXN0IG1vZGVsLlxuICAgKi9cbiAgc3RydWN0dXJlUmVjb3JkZXJzPzogU3RydWN0dXJlUmVjb3JkZXJbXTtcbiAgLyoqIEZyZWUtZm9ybSBkZXNjcmlwdGlvbiBzaG93biBvbiB0aGUgcm9vdCBzcGVjIG5vZGUuICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufVxuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIEZsb3dDaGFydCDigJQgY29tcGlsZWQgb3V0cHV0IG9mIGJ1aWxkKClcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgdHlwZSBGbG93Q2hhcnQ8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiA9IHtcbiAgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT47XG4gIHN0YWdlTWFwOiBNYXA8c3RyaW5nLCBTdGFnZUZ1bmN0aW9uPFRPdXQsIFRTY29wZT4+O1xuICBzdWJmbG93cz86IFJlY29yZDxzdHJpbmcsIHsgcm9vdDogU3RhZ2VOb2RlPFRPdXQsIFRTY29wZT4gfT47XG4gIGJ1aWxkVGltZVN0cnVjdHVyZTogU2VyaWFsaXplZFBpcGVsaW5lU3RydWN0dXJlO1xuICBlbmFibGVOYXJyYXRpdmU/OiBib29sZWFuO1xuICBsb2dnZXI/OiBJTG9nZ2VyO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBzdGFnZURlc2NyaXB0aW9uczogTWFwPHN0cmluZywgc3RyaW5nPjtcbiAgLyoqIElucHV0IHNjaGVtYSAoWm9kIG9yIEpTT04gU2NoZW1hKSDigJQgZGVjbGFyZWQgdmlhIHNldElucHV0U2NoZW1hKCkgb3IgLmNvbnRyYWN0KCkuICovXG4gIGlucHV0U2NoZW1hPzogdW5rbm93bjtcbiAgLyoqIE91dHB1dCBzY2hlbWEgKFpvZCBvciBKU09OIFNjaGVtYSkg4oCUIGRlY2xhcmVkIHZpYSBzZXRPdXRwdXRTY2hlbWEoKSBvciAuY29udHJhY3QoKS4gKi9cbiAgb3V0cHV0U2NoZW1hPzogdW5rbm93bjtcbiAgLyoqIE91dHB1dCBtYXBwZXIg4oCUIGV4dHJhY3RzIHJlc3BvbnNlIGZyb20gZmluYWwgc2NvcGUuICovXG4gIG91dHB1dE1hcHBlcj86IChmaW5hbFNjb3BlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gdW5rbm93bjtcbiAgLyoqIFNjb3BlIGZhY3Rvcnkg4oCUIGF1dG8tZW1iZWRkZWQgYnkgZmxvd0NoYXJ0PFQ+KCkuIEV4ZWN1dG9yIHJlYWRzIHRoaXMgaWYgbm8gZmFjdG9yeSBwYXJhbS4gKi9cbiAgc2NvcGVGYWN0b3J5PzogU2NvcGVGYWN0b3J5PFRTY29wZT47XG59O1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFNpbXBsaWZpZWQgUGFyYWxsZWwgU3BlYyAoZm9yIGFkZExpc3RPZkZ1bmN0aW9uKVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIFNpbXBsaWZpZWRQYXJhbGxlbFNwZWM8VE91dCA9IGFueSwgVFNjb3BlID0gYW55PiA9IHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBmbj86IFN0YWdlRnVuY3Rpb248VE91dCwgVFNjb3BlPjtcbn07XG5cbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy8gRXhlY09wdGlvbnMgKGZvciBleGVjdXRlKCkgY29udmVuaWVuY2Ug4oCUIHVzZWQgYnkgcnVubmVyIGxheWVyKVxuLy8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIEV4ZWNPcHRpb25zID0ge1xuICBkZWZhdWx0cz86IHVua25vd247XG4gIGluaXRpYWw/OiB1bmtub3duO1xuICByZWFkT25seT86IHVua25vd247XG4gIHRocm90dGxpbmdFcnJvckNoZWNrZXI/OiAoZTogdW5rbm93bikgPT4gYm9vbGVhbjtcbiAgc2NvcGVQcm90ZWN0aW9uTW9kZT86IFNjb3BlUHJvdGVjdGlvbk1vZGU7XG4gIGVuYWJsZU5hcnJhdGl2ZT86IGJvb2xlYW47XG59O1xuXG4vLyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vIFN1YmZsb3dSZWZcbi8vIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5leHBvcnQgaW50ZXJmYWNlIFN1YmZsb3dSZWYge1xuICAkcmVmOiBzdHJpbmc7XG4gIG1vdW50SWQ6IHN0cmluZztcbn1cbiJdfQ==
|
|
@@ -7,8 +7,9 @@
|
|
|
7
7
|
* a single extraction point that preserves structured details while still
|
|
8
8
|
* producing a human-readable message.
|
|
9
9
|
*
|
|
10
|
-
* Consumers (narrative recorders,
|
|
11
|
-
* StructuredErrorInfo instead of a flat string, and can
|
|
10
|
+
* Consumers (narrative recorders, FlowRecorder.onError handlers, diagnostic
|
|
11
|
+
* collectors) receive StructuredErrorInfo instead of a flat string, and can
|
|
12
|
+
* decide how to render it.
|
|
12
13
|
* String-ification happens only at the final rendering boundary.
|
|
13
14
|
*/
|
|
14
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
@@ -87,4 +88,4 @@ function formatErrorInfo(info) {
|
|
|
87
88
|
return `${info.message}\n${issueLines.join('\n')}`;
|
|
88
89
|
}
|
|
89
90
|
exports.formatErrorInfo = formatErrorInfo;
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JJbmZvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9lbmdpbmUvZXJyb3JzL2Vycm9ySW5mby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7OztHQVlHOzs7QUFHSCxzREFBOEQ7QUFxQjlEOzs7Ozs7R0FNRztBQUNILFNBQWdCLGdCQUFnQixDQUFDLEtBQWM7SUFDN0MsSUFBSSxLQUFLLFlBQVksZ0NBQW9CLEVBQUUsQ0FBQztRQUMxQyxPQUFPO1lBQ0wsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1lBQ3RCLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtZQUNoQixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDMUUsSUFBSSxFQUFFLHdCQUF3QjtZQUM5QixHQUFHLEVBQUUsS0FBSztTQUNYLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxLQUFLLFlBQVksS0FBSyxFQUFFLENBQUM7UUFDM0IsaUZBQWlGO1FBQ2pGLElBQUksQ0FBQztZQUNILE1BQU0sSUFBSSxHQUF3QjtnQkFDaEMsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO2dCQUN0QixJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7Z0JBQ2hCLEdBQUcsRUFBRSxLQUFLO2FBQ1gsQ0FBQztZQUVGLGtFQUFrRTtZQUNsRSxJQUFJLENBQUM7Z0JBQ0gsTUFBTSxTQUFTLEdBQUksS0FBNEMsQ0FBQyxJQUFJLENBQUM7Z0JBQ3JFLElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQ2xDLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO2dCQUN4QixDQUFDO1lBQ0gsQ0FBQztZQUFDLE1BQU0sQ0FBQztnQkFDUCxvQ0FBb0M7WUFDdEMsQ0FBQztZQUVELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLG1FQUFtRTtRQUNyRSxDQUFDO0lBQ0gsQ0FBQztJQUVELHdEQUF3RDtJQUN4RCxJQUFJLENBQUM7UUFDSCxPQUFPO1lBQ0wsT0FBTyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDdEIsR0FBRyxFQUFFLEtBQUs7U0FDWCxDQUFDO0lBQ0osQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLHFFQUFxRTtRQUNyRSxPQUFPO1lBQ0wsT0FBTyxFQUFFLHdCQUF3QjtZQUNqQyxHQUFHLEVBQUUsS0FBSztTQUNYLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQztBQWpERCw0Q0FpREM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsZUFBZSxDQUFDLElBQXlCO0lBQ3ZELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzdDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUMzQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7UUFDckUsT0FBTyxPQUFPLElBQUksS0FBSyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDekMsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sS0FBSyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDckQsQ0FBQztBQVhELDBDQVdDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBlcnJvckluZm8udHMg4oCUIEV4dHJhY3Qgc3RydWN0dXJlZCBpbmZvcm1hdGlvbiBmcm9tIGFueSBlcnJvciB0eXBlLlxuICpcbiAqIFRoZSBlbmdpbmUncyBlcnJvciBjYXRjaCBibG9ja3MgY3VycmVudGx5IGNhbGwgZXJyb3IudG9TdHJpbmcoKSwgZGVzdHJveWluZ1xuICogc3RydWN0dXJlZCBkYXRhIChlLmcuIElucHV0VmFsaWRhdGlvbkVycm9yLmlzc3VlcykuIFRoaXMgbW9kdWxlIHByb3ZpZGVzXG4gKiBhIHNpbmdsZSBleHRyYWN0aW9uIHBvaW50IHRoYXQgcHJlc2VydmVzIHN0cnVjdHVyZWQgZGV0YWlscyB3aGlsZSBzdGlsbFxuICogcHJvZHVjaW5nIGEgaHVtYW4tcmVhZGFibGUgbWVzc2FnZS5cbiAqXG4gKiBDb25zdW1lcnMgKG5hcnJhdGl2ZSByZWNvcmRlcnMsIEZsb3dSZWNvcmRlci5vbkVycm9yIGhhbmRsZXJzLCBkaWFnbm9zdGljXG4gKiBjb2xsZWN0b3JzKSByZWNlaXZlIFN0cnVjdHVyZWRFcnJvckluZm8gaW5zdGVhZCBvZiBhIGZsYXQgc3RyaW5nLCBhbmQgY2FuXG4gKiBkZWNpZGUgaG93IHRvIHJlbmRlciBpdC5cbiAqIFN0cmluZy1pZmljYXRpb24gaGFwcGVucyBvbmx5IGF0IHRoZSBmaW5hbCByZW5kZXJpbmcgYm91bmRhcnkuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBWYWxpZGF0aW9uSXNzdWUgfSBmcm9tICcuLi8uLi9zY2hlbWEvZXJyb3JzLmpzJztcbmltcG9ydCB7IElucHV0VmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnLi4vLi4vc2NoZW1hL2Vycm9ycy5qcyc7XG5cbi8qKiBTdHJ1Y3R1cmVkIHJlcHJlc2VudGF0aW9uIG9mIGFueSBlcnJvciBjYXVnaHQgZHVyaW5nIHN0YWdlIGV4ZWN1dGlvbi4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RydWN0dXJlZEVycm9ySW5mbyB7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBlcnJvciBtZXNzYWdlIChhbHdheXMgcHJlc2VudCkuICovXG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgLyoqIEVycm9yIGNsYXNzIG5hbWUgd2hlbiBhdmFpbGFibGUgKGUuZy4gJ0lucHV0VmFsaWRhdGlvbkVycm9yJywgJ1R5cGVFcnJvcicpLiAqL1xuICBuYW1lPzogc3RyaW5nO1xuICAvKiogRmllbGQtbGV2ZWwgdmFsaWRhdGlvbiBpc3N1ZXMgKHByZXNlbnQgZm9yIElucHV0VmFsaWRhdGlvbkVycm9yKS4gKi9cbiAgaXNzdWVzPzogVmFsaWRhdGlvbklzc3VlW107XG4gIC8qKiBNYWNoaW5lLXJlYWRhYmxlIGVycm9yIGNvZGUgaWYgdGhlIGVycm9yIGNhcnJpZXMgb25lLiAqL1xuICBjb2RlPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIG9yaWdpbmFsIGVycm9yIG9iamVjdCwgZm9yIGNvbnN1bWVycyB0aGF0IG5lZWQgZnVsbCBhY2Nlc3MuXG4gICAqIE5vdCBzYWZlIHRvIHNlcmlhbGl6ZSBkaXJlY3RseSDigJQgbWF5IGNvbnRhaW4gY2lyY3VsYXIgcmVmZXJlbmNlcyxcbiAgICogc3RhY2sgdHJhY2VzLCBvciBzZW5zaXRpdmUgaW50ZXJuYWxzLiBVc2UgYGZvcm1hdEVycm9ySW5mbygpYCBmb3JcbiAgICogc2FmZSBzdHJpbmcgb3V0cHV0LlxuICAgKi9cbiAgcmF3OiB1bmtub3duO1xufVxuXG4vKipcbiAqIEV4dHJhY3Qgc3RydWN0dXJlZCBlcnJvciBpbmZvIGZyb20gYW55IHRocm93biB2YWx1ZS5cbiAqXG4gKiAtIElucHV0VmFsaWRhdGlvbkVycm9yIOKGkiBwcmVzZXJ2ZXMgLmlzc3VlcyBhcnJheVxuICogLSBTdGFuZGFyZCBFcnJvciDihpIgcHJlc2VydmVzIC5uYW1lLCAubWVzc2FnZVxuICogLSBOb24tRXJyb3IgdGhyb3duIHZhbHVlcyDihpIgY29lcmNlcyB0byBzdHJpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RFcnJvckluZm8oZXJyb3I6IHVua25vd24pOiBTdHJ1Y3R1cmVkRXJyb3JJbmZvIHtcbiAgaWYgKGVycm9yIGluc3RhbmNlb2YgSW5wdXRWYWxpZGF0aW9uRXJyb3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgIG5hbWU6IGVycm9yLm5hbWUsXG4gICAgICBpc3N1ZXM6IGVycm9yLmlzc3Vlcy5tYXAoKGlzc3VlKSA9PiAoeyAuLi5pc3N1ZSwgcGF0aDogWy4uLmlzc3VlLnBhdGhdIH0pKSxcbiAgICAgIGNvZGU6ICdJTlBVVF9WQUxJREFUSU9OX0VSUk9SJyxcbiAgICAgIHJhdzogZXJyb3IsXG4gICAgfTtcbiAgfVxuXG4gIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgLy8gR3VhcmQgYWdhaW5zdCBhZHZlcnNhcmlhbCBlcnJvcnMgd2l0aCB0aHJvd2luZyBnZXR0ZXJzIG9uIC5tZXNzYWdlLy5uYW1lLy5jb2RlXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGluZm86IFN0cnVjdHVyZWRFcnJvckluZm8gPSB7XG4gICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgIG5hbWU6IGVycm9yLm5hbWUsXG4gICAgICAgIHJhdzogZXJyb3IsXG4gICAgICB9O1xuXG4gICAgICAvLyBQcmVzZXJ2ZSAuY29kZSBpZiBwcmVzZW50IChjb21tb24gTm9kZS5qcyBwYXR0ZXJuLCBlLmcuIEVOT0VOVClcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG1heWJlQ29kZSA9IChlcnJvciBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KS5jb2RlO1xuICAgICAgICBpZiAodHlwZW9mIG1heWJlQ29kZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBpbmZvLmNvZGUgPSBtYXliZUNvZGU7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvKiAuY29kZSBhY2Nlc3NvciB0aHJldyDigJQgc2tpcCBpdCAqL1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW5mbztcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIC5tZXNzYWdlIG9yIC5uYW1lIGdldHRlciB0aHJldyDigJQgZmFsbCB0aHJvdWdoIHRvIHN0cmluZyBjb2VyY2lvblxuICAgIH1cbiAgfVxuXG4gIC8vIE5vbi1FcnJvciB0aHJvd24gdmFsdWUgKHN0cmluZywgbnVtYmVyLCBvYmplY3QsIGV0Yy4pXG4gIHRyeSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1lc3NhZ2U6IFN0cmluZyhlcnJvciksXG4gICAgICByYXc6IGVycm9yLFxuICAgIH07XG4gIH0gY2F0Y2gge1xuICAgIC8vIFN0cmluZygpIGZhaWxlZCAoZS5nLiBudWxsLXByb3RvdHlwZSBvYmplY3QsIHRocm93aW5nIC50b1N0cmluZygpKVxuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlOiAnW3Vuc2VyaWFsaXphYmxlIGVycm9yXScsXG4gICAgICByYXc6IGVycm9yLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBGb3JtYXQgYSBTdHJ1Y3R1cmVkRXJyb3JJbmZvIGJhY2sgdG8gYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcuXG4gKiBVc2UgdGhpcyBhdCByZW5kZXJpbmcgYm91bmRhcmllcyAobmFycmF0aXZlIG91dHB1dCwgbG9nIGxpbmVzKS5cbiAqIEluY2x1ZGVzIGZpZWxkLWxldmVsIGRldGFpbHMgd2hlbiBpc3N1ZXMgYXJlIHByZXNlbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRFcnJvckluZm8oaW5mbzogU3RydWN0dXJlZEVycm9ySW5mbyk6IHN0cmluZyB7XG4gIGlmICghaW5mby5pc3N1ZXMgfHwgaW5mby5pc3N1ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGluZm8ubWVzc2FnZTtcbiAgfVxuXG4gIGNvbnN0IGlzc3VlTGluZXMgPSBpbmZvLmlzc3Vlcy5tYXAoKGlzc3VlKSA9PiB7XG4gICAgY29uc3QgcGF0aCA9IGlzc3VlLnBhdGgubGVuZ3RoID4gMCA/IGlzc3VlLnBhdGguam9pbignLicpIDogJyhyb290KSc7XG4gICAgcmV0dXJuIGAgIC0gJHtwYXRofTogJHtpc3N1ZS5tZXNzYWdlfWA7XG4gIH0pO1xuXG4gIHJldHVybiBgJHtpbmZvLm1lc3NhZ2V9XFxuJHtpc3N1ZUxpbmVzLmpvaW4oJ1xcbicpfWA7XG59XG4iXX0=
|