footprintjs 4.17.2 → 5.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.
Files changed (115) hide show
  1. package/CLAUDE.md +39 -1
  2. package/dist/advanced.js +1 -1
  3. package/dist/esm/advanced.js +1 -1
  4. package/dist/esm/index.js +3 -3
  5. package/dist/esm/lib/builder/FlowChartBuilder.js +32 -7
  6. package/dist/esm/lib/decide/decide.js +9 -9
  7. package/dist/esm/lib/decide/evidence.js +2 -2
  8. package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.js +3 -3
  9. package/dist/esm/lib/engine/narrative/FlowRecorderDispatcher.js +3 -3
  10. package/dist/esm/lib/engine/narrative/types.js +1 -1
  11. package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +20 -3
  12. package/dist/esm/lib/memory/StageContext.js +3 -3
  13. package/dist/esm/lib/memory/backtrack.js +1 -1
  14. package/dist/esm/lib/reactive/createTypedScope.js +5 -5
  15. package/dist/esm/lib/reactive/types.js +7 -7
  16. package/dist/esm/lib/recorder/BoundaryStateStore.js +167 -0
  17. package/dist/esm/lib/recorder/BoundaryStateTracker.js +4 -4
  18. package/dist/esm/lib/recorder/CombinedRecorder.js +9 -9
  19. package/dist/esm/lib/recorder/CommitRangeIndex.js +207 -0
  20. package/dist/esm/lib/recorder/CompositeRecorder.js +6 -6
  21. package/dist/esm/lib/recorder/EmitRecorder.js +3 -3
  22. package/dist/esm/lib/recorder/InOutRecorder.js +1 -1
  23. package/dist/esm/lib/recorder/KeyedStore.js +113 -0
  24. package/dist/esm/lib/recorder/QualityRecorder.js +2 -2
  25. package/dist/esm/lib/recorder/SequenceRecorder.js +2 -2
  26. package/dist/esm/lib/recorder/SequenceStore.js +195 -0
  27. package/dist/esm/lib/recorder/TopologyRecorder.js +1 -1
  28. package/dist/esm/lib/recorder/index.js +13 -3
  29. package/dist/esm/lib/runner/ExecutionRuntime.js +1 -1
  30. package/dist/esm/lib/runner/FlowChartExecutor.js +72 -28
  31. package/dist/esm/lib/runner/RunContext.js +2 -2
  32. package/dist/esm/lib/runner/RunnableChart.js +1 -1
  33. package/dist/esm/lib/runner/runId.js +65 -0
  34. package/dist/esm/lib/scope/ScopeFacade.js +6 -6
  35. package/dist/esm/lib/scope/index.js +1 -1
  36. package/dist/esm/lib/scope/recorders/DebugRecorder.js +4 -4
  37. package/dist/esm/lib/scope/recorders/MetricRecorder.js +2 -2
  38. package/dist/esm/lib/scope/recorders/index.js +1 -1
  39. package/dist/esm/lib/scope/types.js +1 -1
  40. package/dist/esm/recorders.js +1 -1
  41. package/dist/esm/trace.js +13 -1
  42. package/dist/index.js +3 -3
  43. package/dist/lib/builder/FlowChartBuilder.js +32 -7
  44. package/dist/lib/decide/decide.js +9 -9
  45. package/dist/lib/decide/evidence.js +2 -2
  46. package/dist/lib/engine/narrative/CombinedNarrativeRecorder.js +3 -3
  47. package/dist/lib/engine/narrative/FlowRecorderDispatcher.js +3 -3
  48. package/dist/lib/engine/narrative/types.js +1 -1
  49. package/dist/lib/engine/traversal/FlowchartTraverser.js +20 -3
  50. package/dist/lib/memory/StageContext.js +3 -3
  51. package/dist/lib/memory/backtrack.js +1 -1
  52. package/dist/lib/reactive/createTypedScope.js +5 -5
  53. package/dist/lib/reactive/types.js +7 -7
  54. package/dist/lib/recorder/BoundaryStateStore.js +171 -0
  55. package/dist/lib/recorder/BoundaryStateTracker.js +4 -4
  56. package/dist/lib/recorder/CombinedRecorder.js +9 -9
  57. package/dist/lib/recorder/CommitRangeIndex.js +211 -0
  58. package/dist/lib/recorder/CompositeRecorder.js +6 -6
  59. package/dist/lib/recorder/EmitRecorder.js +3 -3
  60. package/dist/lib/recorder/InOutRecorder.js +1 -1
  61. package/dist/lib/recorder/KeyedStore.js +117 -0
  62. package/dist/lib/recorder/QualityRecorder.js +2 -2
  63. package/dist/lib/recorder/SequenceRecorder.js +2 -2
  64. package/dist/lib/recorder/SequenceStore.js +199 -0
  65. package/dist/lib/recorder/TopologyRecorder.js +1 -1
  66. package/dist/lib/recorder/index.js +19 -6
  67. package/dist/lib/runner/ExecutionRuntime.js +1 -1
  68. package/dist/lib/runner/FlowChartExecutor.js +72 -28
  69. package/dist/lib/runner/RunContext.js +2 -2
  70. package/dist/lib/runner/RunnableChart.js +1 -1
  71. package/dist/lib/runner/runId.js +70 -0
  72. package/dist/lib/scope/ScopeFacade.js +6 -6
  73. package/dist/lib/scope/index.js +1 -1
  74. package/dist/lib/scope/recorders/DebugRecorder.js +4 -4
  75. package/dist/lib/scope/recorders/MetricRecorder.js +2 -2
  76. package/dist/lib/scope/recorders/index.js +1 -1
  77. package/dist/lib/scope/types.js +1 -1
  78. package/dist/recorders.js +1 -1
  79. package/dist/trace.js +18 -2
  80. package/dist/types/index.d.ts +4 -4
  81. package/dist/types/lib/decide/evidence.d.ts +3 -3
  82. package/dist/types/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +1 -1
  83. package/dist/types/lib/engine/narrative/FlowRecorderDispatcher.d.ts +2 -2
  84. package/dist/types/lib/engine/narrative/types.d.ts +19 -2
  85. package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +11 -0
  86. package/dist/types/lib/memory/StageContext.d.ts +2 -2
  87. package/dist/types/lib/memory/backtrack.d.ts +1 -1
  88. package/dist/types/lib/reactive/types.d.ts +7 -7
  89. package/dist/types/lib/recorder/BoundaryStateStore.d.ts +115 -0
  90. package/dist/types/lib/recorder/BoundaryStateTracker.d.ts +3 -3
  91. package/dist/types/lib/recorder/CombinedRecorder.d.ts +11 -11
  92. package/dist/types/lib/recorder/CommitRangeIndex.d.ts +147 -0
  93. package/dist/types/lib/recorder/CompositeRecorder.d.ts +8 -8
  94. package/dist/types/lib/recorder/EmitRecorder.d.ts +2 -2
  95. package/dist/types/lib/recorder/InOutRecorder.d.ts +1 -1
  96. package/dist/types/lib/recorder/KeyedStore.d.ts +70 -0
  97. package/dist/types/lib/recorder/QualityRecorder.d.ts +4 -4
  98. package/dist/types/lib/recorder/SequenceRecorder.d.ts +1 -1
  99. package/dist/types/lib/recorder/SequenceStore.d.ts +120 -0
  100. package/dist/types/lib/recorder/TopologyRecorder.d.ts +1 -1
  101. package/dist/types/lib/recorder/index.d.ts +5 -2
  102. package/dist/types/lib/runner/ExecutionRuntime.d.ts +1 -1
  103. package/dist/types/lib/runner/FlowChartExecutor.d.ts +36 -14
  104. package/dist/types/lib/runner/RunContext.d.ts +2 -2
  105. package/dist/types/lib/runner/RunnableChart.d.ts +2 -2
  106. package/dist/types/lib/runner/runId.d.ts +45 -0
  107. package/dist/types/lib/scope/ScopeFacade.d.ts +4 -4
  108. package/dist/types/lib/scope/index.d.ts +1 -1
  109. package/dist/types/lib/scope/recorders/DebugRecorder.d.ts +4 -4
  110. package/dist/types/lib/scope/recorders/MetricRecorder.d.ts +4 -4
  111. package/dist/types/lib/scope/recorders/index.d.ts +1 -1
  112. package/dist/types/lib/scope/types.d.ts +1 -1
  113. package/dist/types/recorders.d.ts +1 -1
  114. package/dist/types/trace.d.ts +5 -0
  115. package/package.json +1 -1
@@ -0,0 +1,211 @@
1
+ "use strict";
2
+ /**
3
+ * CommitRangeIndex<TLabel> — interval index over commit indices.
4
+ *
5
+ * Built incrementally during traversal: `open(label, startIdx)` when a
6
+ * boundary begins, `close(token, endIdx)` when it ends. Query at any
7
+ * commit position with `enclosing(idx)` (returns ranges containing
8
+ * that index, ordered outer→inner) or `overlapping(start, end)`
9
+ * (returns ranges intersecting a slice).
10
+ *
11
+ * See `docs/design/commit-range-index.md` for the full contract. In
12
+ * one paragraph: this is a generic interval data structure for
13
+ * commit-range queries. footprintjs owns ZERO knowledge of what
14
+ * labels mean — consumers (agentfootprint, lens, OTel exporters)
15
+ * pick their own `TLabel` type. Open ranges (mid-run, no end yet)
16
+ * are first-class — query results carry `endIdx: undefined` for them.
17
+ *
18
+ * Pattern: incremental builder + interval query. Same "collect during
19
+ * traversal, never post-process" rule footprintjs's CLAUDE.md
20
+ * requires of every observer.
21
+ * Role: structural primitive for time-travel UIs and per-boundary
22
+ * aggregation.
23
+ * Channel: consumer-driven (no engine subscription).
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * import { CommitRangeIndex } from 'footprintjs/trace';
28
+ *
29
+ * const idx = new CommitRangeIndex<string>();
30
+ * const t = idx.open('LLMCall', executor.getCommitCount());
31
+ * // ... LLM call runs, scope writes happen ...
32
+ * idx.close(t, executor.getCommitCount());
33
+ *
34
+ * idx.enclosing(50); // → ranges containing commit 50, outer→inner
35
+ * idx.overlapping(40, 60); // → ranges sharing the slice [40,60]
36
+ * idx.clear(); // wipe (e.g., on new run)
37
+ * ```
38
+ *
39
+ * REDACTION NOTE: labels are stored verbatim and returned verbatim in
40
+ * query results — the index does NOT redact `TLabel` content. If a
41
+ * consumer attaches a label containing PII (user email, scope reads
42
+ * with sensitive keys, etc.) and then serializes the index for
43
+ * logging or telemetry, that data leaves the trust boundary. Use
44
+ * `RedactionPolicy` (or your own scrubbing) on the consumer side
45
+ * BEFORE attaching labels. The index follows the same contract as
46
+ * other footprintjs storage primitives (SequenceStore, KeyedStore):
47
+ * storage is verbatim; redaction is the caller's responsibility.
48
+ */
49
+ Object.defineProperty(exports, "__esModule", { value: true });
50
+ exports.CommitRangeIndex = void 0;
51
+ class CommitRangeIndex {
52
+ entries = [];
53
+ byId = new Map();
54
+ nextId = 0;
55
+ /** Identity for token scoping — each index gets a fresh symbol so
56
+ * tokens from one index can't accidentally close ranges in another.
57
+ * ROTATED on `clear()` to invalidate stale tokens that survived a
58
+ * run reset (would otherwise hit a recycled id and silently mutate
59
+ * a different range — see DS+logic panel review RED #1). */
60
+ owner = Symbol('CommitRangeIndex');
61
+ /**
62
+ * Open a new range. Returns a token the caller MUST hold and pass
63
+ * to `close()` later. Each `open()` gets a fresh token; tokens
64
+ * cannot be reused or shared across indices (silent no-op if
65
+ * misused — see Law 2 in the design doc). Tokens from BEFORE
66
+ * the most recent `clear()` are also invalid (owner symbol
67
+ * rotates on clear).
68
+ */
69
+ open(label, startIdx) {
70
+ const id = this.nextId++;
71
+ const entry = {
72
+ label,
73
+ startIdx,
74
+ endIdx: undefined,
75
+ id,
76
+ closed: false,
77
+ };
78
+ this.entries.push(entry);
79
+ this.byId.set(id, entry);
80
+ return { _id: id, _owner: this.owner };
81
+ }
82
+ /**
83
+ * Close an open range at `endIdx` (inclusive). After close, the
84
+ * range is queryable with both bounds. Closing an already-closed
85
+ * token is a no-op. Closing an unknown token (from another index,
86
+ * or fabricated) is a no-op.
87
+ */
88
+ close(token, endIdx) {
89
+ if (token._owner !== this.owner)
90
+ return; // cross-index misuse — silent no-op
91
+ const entry = this.findById(token._id);
92
+ if (!entry || entry.closed)
93
+ return;
94
+ entry.endIdx = endIdx;
95
+ entry.closed = true;
96
+ }
97
+ /**
98
+ * Returns ALL ranges enclosing `commitIdx`, ordered outer→inner.
99
+ * Includes both closed and open ranges. For a closed range to
100
+ * enclose: `startIdx <= commitIdx <= endIdx`. For an open range:
101
+ * `startIdx <= commitIdx` (no upper bound check).
102
+ *
103
+ * Ordering rule: ascending by `startIdx`, with TIES BROKEN BY
104
+ * descending `endIdx` (wider range = outer). Open ranges (endIdx
105
+ * undefined) are treated as `+Infinity` for tie-break — they
106
+ * always sort outer of any closed range starting at the same idx.
107
+ * This is the only deterministic outer→inner ordering when two
108
+ * boundaries open at the same commit (e.g., Parallel root +
109
+ * its first branch).
110
+ *
111
+ * Returns a SHALLOW IMMUTABLE COPY — caller mutations don't affect
112
+ * internal state.
113
+ */
114
+ enclosing(commitIdx) {
115
+ const matches = [];
116
+ for (const e of this.entries) {
117
+ if (e.startIdx > commitIdx)
118
+ continue;
119
+ if (e.endIdx === undefined || e.endIdx >= commitIdx) {
120
+ matches.push(toEntry(e));
121
+ }
122
+ }
123
+ matches.sort(outerToInnerComparator);
124
+ return matches;
125
+ }
126
+ /**
127
+ * Returns all ranges OVERLAPPING the slice `[startIdx, endIdx]`. A
128
+ * range overlaps if it shares at least one commit position with the
129
+ * slice. Use for parallel-branch detection, time-window queries,
130
+ * or "what boundaries fired during this slice."
131
+ *
132
+ * Sorted by the SAME outer→inner comparator as `enclosing()`:
133
+ * ascending by `startIdx`, ties broken by descending `endIdx`
134
+ * (wider = outer; open ranges treated as +Infinity).
135
+ *
136
+ * Returns a SHALLOW IMMUTABLE COPY.
137
+ */
138
+ overlapping(startIdx, endIdx) {
139
+ const matches = [];
140
+ for (const e of this.entries) {
141
+ // Overlap test:
142
+ // range starts after slice ends → no overlap
143
+ // range ends (closed) before slice starts → no overlap
144
+ // otherwise → overlap (open ranges always overlap if they start <= endIdx)
145
+ if (e.startIdx > endIdx)
146
+ continue;
147
+ if (e.endIdx !== undefined && e.endIdx < startIdx)
148
+ continue;
149
+ matches.push(toEntry(e));
150
+ }
151
+ matches.sort(outerToInnerComparator);
152
+ return matches;
153
+ }
154
+ /** Total range count (open + closed). */
155
+ get size() {
156
+ return this.entries.length;
157
+ }
158
+ /**
159
+ * Wipe all ranges + reset the token counter AND rotate the owner
160
+ * symbol so any token from before this clear becomes invalid.
161
+ * Critical: without rotating the owner, a stale token whose `_id`
162
+ * happens to match a recycled id after clear would silently mutate
163
+ * the wrong entry. Owner rotation makes stale-token close a no-op
164
+ * via the `_owner !== this.owner` guard.
165
+ *
166
+ * Call from a consumer's runId guard when a new run starts (e.g.,
167
+ * agentfootprint's `observeRunId(onNewRun)` from Phase 2).
168
+ */
169
+ clear() {
170
+ this.entries.length = 0;
171
+ this.byId.clear();
172
+ this.nextId = 0;
173
+ this.owner = Symbol('CommitRangeIndex');
174
+ }
175
+ // ─── Internals ────────────────────────────────────────────────────
176
+ /** O(1) lookup by token id. Always returns the entry that the token
177
+ * references (or undefined if the id was never opened in this index). */
178
+ findById(id) {
179
+ return this.byId.get(id);
180
+ }
181
+ }
182
+ exports.CommitRangeIndex = CommitRangeIndex;
183
+ /** Project the internal mutable shape into the public readonly entry.
184
+ * The OUTER object is a fresh allocation per query (so caller array
185
+ * mutations don't leak). The `label` field is a REFERENCE COPY —
186
+ * if `TLabel` is an object, mutating its fields will affect the
187
+ * internal entry too. Consumers MUST treat labels as immutable
188
+ * (or pass primitives). Documented in the class JSDoc as the
189
+ * "labels are stored verbatim" contract. */
190
+ function toEntry(e) {
191
+ return e.endIdx === undefined
192
+ ? { label: e.label, startIdx: e.startIdx }
193
+ : { label: e.label, startIdx: e.startIdx, endIdx: e.endIdx };
194
+ }
195
+ /**
196
+ * Shared outer→inner comparator for both `enclosing()` and
197
+ * `overlapping()`. Primary key: `startIdx` ascending. Tie-break:
198
+ * `endIdx` descending (wider range is outer). Open ranges (undefined
199
+ * `endIdx`) sort as +Infinity → outermost when tied. Deterministic
200
+ * ordering required so consumers (Lens breadcrumb, time-travel UIs)
201
+ * never see flicker on equal-start boundaries (e.g., a Parallel
202
+ * root and its first branch opening at the same commit).
203
+ */
204
+ function outerToInnerComparator(a, b) {
205
+ if (a.startIdx !== b.startIdx)
206
+ return a.startIdx - b.startIdx;
207
+ const ae = a.endIdx ?? Number.POSITIVE_INFINITY;
208
+ const be = b.endIdx ?? Number.POSITIVE_INFINITY;
209
+ return be - ae;
210
+ }
211
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tbWl0UmFuZ2VJbmRleC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcmVjb3JkZXIvQ29tbWl0UmFuZ2VJbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E4Q0c7OztBQTRDSCxNQUFhLGdCQUFnQjtJQUNuQixPQUFPLEdBQTRCLEVBQUUsQ0FBQztJQUN0QyxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQWlDLENBQUM7SUFDaEQsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNuQjs7OztpRUFJNkQ7SUFDckQsS0FBSyxHQUFHLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBRTNDOzs7Ozs7O09BT0c7SUFDSCxJQUFJLENBQUMsS0FBYSxFQUFFLFFBQWdCO1FBQ2xDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN6QixNQUFNLEtBQUssR0FBMEI7WUFDbkMsS0FBSztZQUNMLFFBQVE7WUFDUixNQUFNLEVBQUUsU0FBUztZQUNqQixFQUFFO1lBQ0YsTUFBTSxFQUFFLEtBQUs7U0FDZCxDQUFDO1FBQ0YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLE9BQU8sRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsS0FBSyxDQUFDLEtBQWlCLEVBQUUsTUFBYztRQUNyQyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPLENBQUMsb0NBQW9DO1FBQzdFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FB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RixJQUFJLENBQUMsQ0FBQyxRQUFRLEtBQUssQ0FBQyxDQUFDLFFBQVE7UUFBRSxPQUFPLENBQUMsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUM5RCxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztJQUNoRCxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQztJQUNoRCxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29tbWl0UmFuZ2VJbmRleDxUTGFiZWw+IOKAlCBpbnRlcnZhbCBpbmRleCBvdmVyIGNvbW1pdCBpbmRpY2VzLlxuICpcbiAqIEJ1aWx0IGluY3JlbWVudGFsbHkgZHVyaW5nIHRyYXZlcnNhbDogYG9wZW4obGFiZWwsIHN0YXJ0SWR4KWAgd2hlbiBhXG4gKiBib3VuZGFyeSBiZWdpbnMsIGBjbG9zZSh0b2tlbiwgZW5kSWR4KWAgd2hlbiBpdCBlbmRzLiBRdWVyeSBhdCBhbnlcbiAqIGNvbW1pdCBwb3NpdGlvbiB3aXRoIGBlbmNsb3NpbmcoaWR4KWAgKHJldHVybnMgcmFuZ2VzIGNvbnRhaW5pbmdcbiAqIHRoYXQgaW5kZXgsIG9yZGVyZWQgb3V0ZXLihpJpbm5lcikgb3IgYG92ZXJsYXBwaW5nKHN0YXJ0LCBlbmQpYFxuICogKHJldHVybnMgcmFuZ2VzIGludGVyc2VjdGluZyBhIHNsaWNlKS5cbiAqXG4gKiBTZWUgYGRvY3MvZGVzaWduL2NvbW1pdC1yYW5nZS1pbmRleC5tZGAgZm9yIHRoZSBmdWxsIGNvbnRyYWN0LiBJblxuICogb25lIHBhcmFncmFwaDogdGhpcyBpcyBhIGdlbmVyaWMgaW50ZXJ2YWwgZGF0YSBzdHJ1Y3R1cmUgZm9yXG4gKiBjb21taXQtcmFuZ2UgcXVlcmllcy4gZm9vdHByaW50anMgb3ducyBaRVJPIGtub3dsZWRnZSBvZiB3aGF0XG4gKiBsYWJlbHMgbWVhbiDigJQgY29uc3VtZXJzIChhZ2VudGZvb3RwcmludCwgbGVucywgT1RlbCBleHBvcnRlcnMpXG4gKiBwaWNrIHRoZWlyIG93biBgVExhYmVsYCB0eXBlLiBPcGVuIHJhbmdlcyAobWlkLXJ1biwgbm8gZW5kIHlldClcbiAqIGFyZSBmaXJzdC1jbGFzcyDigJQgcXVlcnkgcmVzdWx0cyBjYXJyeSBgZW5kSWR4OiB1bmRlZmluZWRgIGZvciB0aGVtLlxuICpcbiAqIFBhdHRlcm46IGluY3JlbWVudGFsIGJ1aWxkZXIgKyBpbnRlcnZhbCBxdWVyeS4gU2FtZSBcImNvbGxlY3QgZHVyaW5nXG4gKiAgICAgICAgICB0cmF2ZXJzYWwsIG5ldmVyIHBvc3QtcHJvY2Vzc1wiIHJ1bGUgZm9vdHByaW50anMncyBDTEFVREUubWRcbiAqICAgICAgICAgIHJlcXVpcmVzIG9mIGV2ZXJ5IG9ic2VydmVyLlxuICogUm9sZTogICAgc3RydWN0dXJhbCBwcmltaXRpdmUgZm9yIHRpbWUtdHJhdmVsIFVJcyBhbmQgcGVyLWJvdW5kYXJ5XG4gKiAgICAgICAgICBhZ2dyZWdhdGlvbi5cbiAqIENoYW5uZWw6IGNvbnN1bWVyLWRyaXZlbiAobm8gZW5naW5lIHN1YnNjcmlwdGlvbikuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IENvbW1pdFJhbmdlSW5kZXggfSBmcm9tICdmb290cHJpbnRqcy90cmFjZSc7XG4gKlxuICogY29uc3QgaWR4ID0gbmV3IENvbW1pdFJhbmdlSW5kZXg8c3RyaW5nPigpO1xuICogY29uc3QgdCA9IGlkeC5vcGVuKCdMTE1DYWxsJywgZXhlY3V0b3IuZ2V0Q29tbWl0Q291bnQoKSk7XG4gKiAvLyAuLi4gTExNIGNhbGwgcnVucywgc2NvcGUgd3JpdGVzIGhhcHBlbiAuLi5cbiAqIGlkeC5jbG9zZSh0LCBleGVjdXRvci5nZXRDb21taXRDb3VudCgpKTtcbiAqXG4gKiBpZHguZW5jbG9zaW5nKDUwKTsgIC8vIOKGkiByYW5nZXMgY29udGFpbmluZyBjb21taXQgNTAsIG91dGVy4oaSaW5uZXJcbiAqIGlkeC5vdmVybGFwcGluZyg0MCwgNjApOyAgLy8g4oaSIHJhbmdlcyBzaGFyaW5nIHRoZSBzbGljZSBbNDAsNjBdXG4gKiBpZHguY2xlYXIoKTsgICAgICAgIC8vIHdpcGUgKGUuZy4sIG9uIG5ldyBydW4pXG4gKiBgYGBcbiAqXG4gKiBSRURBQ1RJT04gTk9URTogbGFiZWxzIGFyZSBzdG9yZWQgdmVyYmF0aW0gYW5kIHJldHVybmVkIHZlcmJhdGltIGluXG4gKiBxdWVyeSByZXN1bHRzIOKAlCB0aGUgaW5kZXggZG9lcyBOT1QgcmVkYWN0IGBUTGFiZWxgIGNvbnRlbnQuIElmIGFcbiAqIGNvbnN1bWVyIGF0dGFjaGVzIGEgbGFiZWwgY29udGFpbmluZyBQSUkgKHVzZXIgZW1haWwsIHNjb3BlIHJlYWRzXG4gKiB3aXRoIHNlbnNpdGl2ZSBrZXlzLCBldGMuKSBhbmQgdGhlbiBzZXJpYWxpemVzIHRoZSBpbmRleCBmb3JcbiAqIGxvZ2dpbmcgb3IgdGVsZW1ldHJ5LCB0aGF0IGRhdGEgbGVhdmVzIHRoZSB0cnVzdCBib3VuZGFyeS4gVXNlXG4gKiBgUmVkYWN0aW9uUG9saWN5YCAob3IgeW91ciBvd24gc2NydWJiaW5nKSBvbiB0aGUgY29uc3VtZXIgc2lkZVxuICogQkVGT1JFIGF0dGFjaGluZyBsYWJlbHMuIFRoZSBpbmRleCBmb2xsb3dzIHRoZSBzYW1lIGNvbnRyYWN0IGFzXG4gKiBvdGhlciBmb290cHJpbnRqcyBzdG9yYWdlIHByaW1pdGl2ZXMgKFNlcXVlbmNlU3RvcmUsIEtleWVkU3RvcmUpOlxuICogc3RvcmFnZSBpcyB2ZXJiYXRpbTsgcmVkYWN0aW9uIGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eS5cbiAqL1xuXG4vKiogT3BhcXVlIHRva2VuIGlkZW50aWZ5aW5nIGFuIG9wZW4gcmFuZ2UuIEhvbGQgb250byBpdDsgcGFzcyB0byBgY2xvc2UoKWAuXG4gKiAgSW5kZXgtc2NvcGVkIOKAlCB1c2luZyBhIHRva2VuIGZyb20gb25lIENvbW1pdFJhbmdlSW5kZXggb24gYW5vdGhlciBpc1xuICogIGEgc2lsZW50IG5vLW9wICh2ZXJpZmllZCBieSB0aGUgcGVyLWluZGV4IGBfb3duZXJgIHN5bWJvbCkuXG4gKlxuICogIFNFQ1VSSVRZIE5PVEU6IHRoZSBgX293bmVyYCBzeW1ib2wgaXMgZW51bWVyYWJsZSBvbiB0aGUgdG9rZW4gb2JqZWN0XG4gKiAgdmlhIGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRva2VuKWAuIFRoaXMgbWVhbnMgdG9rZW5zIGFyZSBOT1RcbiAqICBhZHZlcnNhcnktc2FmZSDigJQgYSBtYWxpY2lvdXMgY2FsbGVyIHdpdGggYWNjZXNzIHRvIEFOWSB0b2tlbiBmcm9tXG4gKiAgdGhpcyBpbmRleCBjYW4gcmVjb3ZlciB0aGUgb3duZXIgc3ltYm9sIGFuZCBmb3JnZSBuZXcgdG9rZW5zLiBUaGVcbiAqICBpbmRleCBpcyBkZXNpZ25lZCBmb3IgaW4tcHJvY2VzcyB0cnVzdCBib3VuZGFyaWVzIChjb29wZXJhdGl2ZVxuICogIHJlY29yZGVycyBzaGFyaW5nIG9uZSBydW5uZXIpLCBub3QgZm9yIGhvc3RpbGUtaW5wdXQgc2NlbmFyaW9zLlxuICogIElmIGFkdmVyc2FyeS1zYWZldHkgYmVjb21lcyBhIHJlcXVpcmVtZW50LCBzd2l0Y2ggdG8gYSBXZWFrTWFwLVxuICogIHNjb3BlZCB0b2tlbiBtb2RlbCAoc2VlIHNlY3VyaXR5IHBhbmVsIHJldmlldyBZMikuICovXG5leHBvcnQgaW50ZXJmYWNlIFJhbmdlVG9rZW4ge1xuICAvKiogUGVyLWluZGV4IHNlcXVlbnRpYWwgaWQuIE9wYXF1ZSB0byBjb25zdW1lcnMg4oCUIHRoZXkgc2hvdWxkbid0IHJlYWQgaXQuICovXG4gIHJlYWRvbmx5IF9pZDogbnVtYmVyO1xuICAvKiogUGVyLWluZGV4IGlkZW50aXR5IOKAlCBwcmV2ZW50cyBhY2NpZGVudGFsIGNyb3NzLWluZGV4IHRva2VuIG1pc3VzZS4gKi9cbiAgcmVhZG9ubHkgX293bmVyOiBzeW1ib2w7XG59XG5cbi8qKiBBIHNpbmdsZSByYW5nZSBhcyByZXR1cm5lZCBieSBxdWVyeSBtZXRob2RzLiBGcm96ZW4tc2hhcGUg4oCUIHJlYWRvbmx5IGZpZWxkcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmFuZ2VFbnRyeTxUTGFiZWw+IHtcbiAgcmVhZG9ubHkgbGFiZWw6IFRMYWJlbDtcbiAgcmVhZG9ubHkgc3RhcnRJZHg6IG51bWJlcjtcbiAgLyoqIFVuZGVmaW5lZCB3aGlsZSB0aGUgcmFuZ2UgaXMgc3RpbGwgb3BlbiAobWlkLXJ1biBib3VuZGFyeSkuICovXG4gIHJlYWRvbmx5IGVuZElkeD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBJbnRlcm5hbCBzdG9yYWdlIHNoYXBlLiBNdXRhYmxlIHdoaWxlIHRoZSByYW5nZSBpcyBvcGVuOyBvbmNlXG4gKiBjbG9zZWQsIGBlbmRJZHhgIGlzIHNldCBhbmQgbmV2ZXIgY2hhbmdlcy4gVG9rZW5zIHJlZmVyZW5jZSB0aGVzZVxuICogYnkgdGhlaXIgcG9zaXRpb24gaW4gdGhlIGBlbnRyaWVzYCBhcnJheSAodGhlIGBfaWRgKS5cbiAqL1xuaW50ZXJmYWNlIEludGVybmFsRW50cnk8VExhYmVsPiB7XG4gIGxhYmVsOiBUTGFiZWw7XG4gIHN0YXJ0SWR4OiBudW1iZXI7XG4gIGVuZElkeDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICAvKiogSW50ZXJuYWwgY3Vyc29yIOKAlCBhc3NpZ25lZCBvbiBgb3BlbigpYCwgdXNlZCB0byBpZGVudGlmeSBieSB0b2tlbi4gKi9cbiAgaWQ6IG51bWJlcjtcbiAgLyoqIFRydWUgYWZ0ZXIgYGNsb3NlKClgIHJ1bnMuIFByZXZlbnRzIGRvdWJsZS1jbG9zZSBtdXRhdGlvbi4gKi9cbiAgY2xvc2VkOiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgQ29tbWl0UmFuZ2VJbmRleDxUTGFiZWw+IHtcbiAgcHJpdmF0ZSBlbnRyaWVzOiBJbnRlcm5hbEVudHJ5PFRMYWJlbD5bXSA9IFtdO1xuICBwcml2YXRlIGJ5SWQgPSBuZXcgTWFwPG51bWJlciwgSW50ZXJuYWxFbnRyeTxUTGFiZWw+PigpO1xuICBwcml2YXRlIG5leHRJZCA9IDA7XG4gIC8qKiBJZGVudGl0eSBmb3IgdG9rZW4gc2NvcGluZyDigJQgZWFjaCBpbmRleCBnZXRzIGEgZnJlc2ggc3ltYm9sIHNvXG4gICAqICB0b2tlbnMgZnJvbSBvbmUgaW5kZXggY2FuJ3QgYWNjaWRlbnRhbGx5IGNsb3NlIHJhbmdlcyBpbiBhbm90aGVyLlxuICAgKiAgUk9UQVRFRCBvbiBgY2xlYXIoKWAgdG8gaW52YWxpZGF0ZSBzdGFsZSB0b2tlbnMgdGhhdCBzdXJ2aXZlZCBhXG4gICAqICBydW4gcmVzZXQgKHdvdWxkIG90aGVyd2lzZSBoaXQgYSByZWN5Y2xlZCBpZCBhbmQgc2lsZW50bHkgbXV0YXRlXG4gICAqICBhIGRpZmZlcmVudCByYW5nZSDigJQgc2VlIERTK2xvZ2ljIHBhbmVsIHJldmlldyBSRUQgIzEpLiAqL1xuICBwcml2YXRlIG93bmVyID0gU3ltYm9sKCdDb21taXRSYW5nZUluZGV4Jyk7XG5cbiAgLyoqXG4gICAqIE9wZW4gYSBuZXcgcmFuZ2UuIFJldHVybnMgYSB0b2tlbiB0aGUgY2FsbGVyIE1VU1QgaG9sZCBhbmQgcGFzc1xuICAgKiB0byBgY2xvc2UoKWAgbGF0ZXIuIEVhY2ggYG9wZW4oKWAgZ2V0cyBhIGZyZXNoIHRva2VuOyB0b2tlbnNcbiAgICogY2Fubm90IGJlIHJldXNlZCBvciBzaGFyZWQgYWNyb3NzIGluZGljZXMgKHNpbGVudCBuby1vcCBpZlxuICAgKiBtaXN1c2VkIOKAlCBzZWUgTGF3IDIgaW4gdGhlIGRlc2lnbiBkb2MpLiBUb2tlbnMgZnJvbSBCRUZPUkVcbiAgICogdGhlIG1vc3QgcmVjZW50IGBjbGVhcigpYCBhcmUgYWxzbyBpbnZhbGlkIChvd25lciBzeW1ib2xcbiAgICogcm90YXRlcyBvbiBjbGVhcikuXG4gICAqL1xuICBvcGVuKGxhYmVsOiBUTGFiZWwsIHN0YXJ0SWR4OiBudW1iZXIpOiBSYW5nZVRva2VuIHtcbiAgICBjb25zdCBpZCA9IHRoaXMubmV4dElkKys7XG4gICAgY29uc3QgZW50cnk6IEludGVybmFsRW50cnk8VExhYmVsPiA9IHtcbiAgICAgIGxhYmVsLFxuICAgICAgc3RhcnRJZHgsXG4gICAgICBlbmRJZHg6IHVuZGVmaW5lZCxcbiAgICAgIGlkLFxuICAgICAgY2xvc2VkOiBmYWxzZSxcbiAgICB9O1xuICAgIHRoaXMuZW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICB0aGlzLmJ5SWQuc2V0KGlkLCBlbnRyeSk7XG4gICAgcmV0dXJuIHsgX2lkOiBpZCwgX293bmVyOiB0aGlzLm93bmVyIH07XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgYW4gb3BlbiByYW5nZSBhdCBgZW5kSWR4YCAoaW5jbHVzaXZlKS4gQWZ0ZXIgY2xvc2UsIHRoZVxuICAgKiByYW5nZSBpcyBxdWVyeWFibGUgd2l0aCBib3RoIGJvdW5kcy4gQ2xvc2luZyBhbiBhbHJlYWR5LWNsb3NlZFxuICAgKiB0b2tlbiBpcyBhIG5vLW9wLiBDbG9zaW5nIGFuIHVua25vd24gdG9rZW4gKGZyb20gYW5vdGhlciBpbmRleCxcbiAgICogb3IgZmFicmljYXRlZCkgaXMgYSBuby1vcC5cbiAgICovXG4gIGNsb3NlKHRva2VuOiBSYW5nZVRva2VuLCBlbmRJZHg6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0b2tlbi5fb3duZXIgIT09IHRoaXMub3duZXIpIHJldHVybjsgLy8gY3Jvc3MtaW5kZXggbWlzdXNlIOKAlCBzaWxlbnQgbm8tb3BcbiAgICBjb25zdCBlbnRyeSA9IHRoaXMuZmluZEJ5SWQodG9rZW4uX2lkKTtcbiAgICBpZiAoIWVudHJ5IHx8IGVudHJ5LmNsb3NlZCkgcmV0dXJuO1xuICAgIGVudHJ5LmVuZElkeCA9IGVuZElkeDtcbiAgICBlbnRyeS5jbG9zZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgQUxMIHJhbmdlcyBlbmNsb3NpbmcgYGNvbW1pdElkeGAsIG9yZGVyZWQgb3V0ZXLihpJpbm5lci5cbiAgICogSW5jbHVkZXMgYm90aCBjbG9zZWQgYW5kIG9wZW4gcmFuZ2VzLiBGb3IgYSBjbG9zZWQgcmFuZ2UgdG9cbiAgICogZW5jbG9zZTogYHN0YXJ0SWR4IDw9IGNvbW1pdElkeCA8PSBlbmRJZHhgLiBGb3IgYW4gb3BlbiByYW5nZTpcbiAgICogYHN0YXJ0SWR4IDw9IGNvbW1pdElkeGAgKG5vIHVwcGVyIGJvdW5kIGNoZWNrKS5cbiAgICpcbiAgICogT3JkZXJpbmcgcnVsZTogYXNjZW5kaW5nIGJ5IGBzdGFydElkeGAsIHdpdGggVElFUyBCUk9LRU4gQllcbiAgICogZGVzY2VuZGluZyBgZW5kSWR4YCAod2lkZXIgcmFuZ2UgPSBvdXRlcikuIE9wZW4gcmFuZ2VzIChlbmRJZHhcbiAgICogdW5kZWZpbmVkKSBhcmUgdHJlYXRlZCBhcyBgK0luZmluaXR5YCBmb3IgdGllLWJyZWFrIOKAlCB0aGV5XG4gICAqIGFsd2F5cyBzb3J0IG91dGVyIG9mIGFueSBjbG9zZWQgcmFuZ2Ugc3RhcnRpbmcgYXQgdGhlIHNhbWUgaWR4LlxuICAgKiBUaGlzIGlzIHRoZSBvbmx5IGRldGVybWluaXN0aWMgb3V0ZXLihpJpbm5lciBvcmRlcmluZyB3aGVuIHR3b1xuICAgKiBib3VuZGFyaWVzIG9wZW4gYXQgdGhlIHNhbWUgY29tbWl0IChlLmcuLCBQYXJhbGxlbCByb290ICtcbiAgICogaXRzIGZpcnN0IGJyYW5jaCkuXG4gICAqXG4gICAqIFJldHVybnMgYSBTSEFMTE9XIElNTVVUQUJMRSBDT1BZIOKAlCBjYWxsZXIgbXV0YXRpb25zIGRvbid0IGFmZmVjdFxuICAgKiBpbnRlcm5hbCBzdGF0ZS5cbiAgICovXG4gIGVuY2xvc2luZyhjb21taXRJZHg6IG51bWJlcik6IHJlYWRvbmx5IFJhbmdlRW50cnk8VExhYmVsPltdIHtcbiAgICBjb25zdCBtYXRjaGVzOiBSYW5nZUVudHJ5PFRMYWJlbD5bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgZSBvZiB0aGlzLmVudHJpZXMpIHtcbiAgICAgIGlmIChlLnN0YXJ0SWR4ID4gY29tbWl0SWR4KSBjb250aW51ZTtcbiAgICAgIGlmIChlLmVuZElkeCA9PT0gdW5kZWZpbmVkIHx8IGUuZW5kSWR4ID49IGNvbW1pdElkeCkge1xuICAgICAgICBtYXRjaGVzLnB1c2godG9FbnRyeShlKSk7XG4gICAgICB9XG4gICAgfVxuICAgIG1hdGNoZXMuc29ydChvdXRlclRvSW5uZXJDb21wYXJhdG9yKTtcbiAgICByZXR1cm4gbWF0Y2hlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCByYW5nZXMgT1ZFUkxBUFBJTkcgdGhlIHNsaWNlIGBbc3RhcnRJZHgsIGVuZElkeF1gLiBBXG4gICAqIHJhbmdlIG92ZXJsYXBzIGlmIGl0IHNoYXJlcyBhdCBsZWFzdCBvbmUgY29tbWl0IHBvc2l0aW9uIHdpdGggdGhlXG4gICAqIHNsaWNlLiBVc2UgZm9yIHBhcmFsbGVsLWJyYW5jaCBkZXRlY3Rpb24sIHRpbWUtd2luZG93IHF1ZXJpZXMsXG4gICAqIG9yIFwid2hhdCBib3VuZGFyaWVzIGZpcmVkIGR1cmluZyB0aGlzIHNsaWNlLlwiXG4gICAqXG4gICAqIFNvcnRlZCBieSB0aGUgU0FNRSBvdXRlcuKGkmlubmVyIGNvbXBhcmF0b3IgYXMgYGVuY2xvc2luZygpYDpcbiAgICogYXNjZW5kaW5nIGJ5IGBzdGFydElkeGAsIHRpZXMgYnJva2VuIGJ5IGRlc2NlbmRpbmcgYGVuZElkeGBcbiAgICogKHdpZGVyID0gb3V0ZXI7IG9wZW4gcmFuZ2VzIHRyZWF0ZWQgYXMgK0luZmluaXR5KS5cbiAgICpcbiAgICogUmV0dXJucyBhIFNIQUxMT1cgSU1NVVRBQkxFIENPUFkuXG4gICAqL1xuICBvdmVybGFwcGluZyhzdGFydElkeDogbnVtYmVyLCBlbmRJZHg6IG51bWJlcik6IHJlYWRvbmx5IFJhbmdlRW50cnk8VExhYmVsPltdIHtcbiAgICBjb25zdCBtYXRjaGVzOiBSYW5nZUVudHJ5PFRMYWJlbD5bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgZSBvZiB0aGlzLmVudHJpZXMpIHtcbiAgICAgIC8vIE92ZXJsYXAgdGVzdDpcbiAgICAgIC8vICAgcmFuZ2Ugc3RhcnRzIGFmdGVyIHNsaWNlIGVuZHMg4oaSIG5vIG92ZXJsYXBcbiAgICAgIC8vICAgcmFuZ2UgZW5kcyAoY2xvc2VkKSBiZWZvcmUgc2xpY2Ugc3RhcnRzIOKGkiBubyBvdmVybGFwXG4gICAgICAvLyAgIG90aGVyd2lzZSDihpIgb3ZlcmxhcCAob3BlbiByYW5nZXMgYWx3YXlzIG92ZXJsYXAgaWYgdGhleSBzdGFydCA8PSBlbmRJZHgpXG4gICAgICBpZiAoZS5zdGFydElkeCA+IGVuZElkeCkgY29udGludWU7XG4gICAgICBpZiAoZS5lbmRJZHggIT09IHVuZGVmaW5lZCAmJiBlLmVuZElkeCA8IHN0YXJ0SWR4KSBjb250aW51ZTtcbiAgICAgIG1hdGNoZXMucHVzaCh0b0VudHJ5KGUpKTtcbiAgICB9XG4gICAgbWF0Y2hlcy5zb3J0KG91dGVyVG9Jbm5lckNvbXBhcmF0b3IpO1xuICAgIHJldHVybiBtYXRjaGVzO1xuICB9XG5cbiAgLyoqIFRvdGFsIHJhbmdlIGNvdW50IChvcGVuICsgY2xvc2VkKS4gKi9cbiAgZ2V0IHNpemUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5lbnRyaWVzLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaXBlIGFsbCByYW5nZXMgKyByZXNldCB0aGUgdG9rZW4gY291bnRlciBBTkQgcm90YXRlIHRoZSBvd25lclxuICAgKiBzeW1ib2wgc28gYW55IHRva2VuIGZyb20gYmVmb3JlIHRoaXMgY2xlYXIgYmVjb21lcyBpbnZhbGlkLlxuICAgKiBDcml0aWNhbDogd2l0aG91dCByb3RhdGluZyB0aGUgb3duZXIsIGEgc3RhbGUgdG9rZW4gd2hvc2UgYF9pZGBcbiAgICogaGFwcGVucyB0byBtYXRjaCBhIHJlY3ljbGVkIGlkIGFmdGVyIGNsZWFyIHdvdWxkIHNpbGVudGx5IG11dGF0ZVxuICAgKiB0aGUgd3JvbmcgZW50cnkuIE93bmVyIHJvdGF0aW9uIG1ha2VzIHN0YWxlLXRva2VuIGNsb3NlIGEgbm8tb3BcbiAgICogdmlhIHRoZSBgX293bmVyICE9PSB0aGlzLm93bmVyYCBndWFyZC5cbiAgICpcbiAgICogQ2FsbCBmcm9tIGEgY29uc3VtZXIncyBydW5JZCBndWFyZCB3aGVuIGEgbmV3IHJ1biBzdGFydHMgKGUuZy4sXG4gICAqIGFnZW50Zm9vdHByaW50J3MgYG9ic2VydmVSdW5JZChvbk5ld1J1bilgIGZyb20gUGhhc2UgMikuXG4gICAqL1xuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmVudHJpZXMubGVuZ3RoID0gMDtcbiAgICB0aGlzLmJ5SWQuY2xlYXIoKTtcbiAgICB0aGlzLm5leHRJZCA9IDA7XG4gICAgdGhpcy5vd25lciA9IFN5bWJvbCgnQ29tbWl0UmFuZ2VJbmRleCcpO1xuICB9XG5cbiAgLy8g4pSA4pSA4pSAIEludGVybmFscyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKiogTygxKSBsb29rdXAgYnkgdG9rZW4gaWQuIEFsd2F5cyByZXR1cm5zIHRoZSBlbnRyeSB0aGF0IHRoZSB0b2tlblxuICAgKiAgcmVmZXJlbmNlcyAob3IgdW5kZWZpbmVkIGlmIHRoZSBpZCB3YXMgbmV2ZXIgb3BlbmVkIGluIHRoaXMgaW5kZXgpLiAqL1xuICBwcml2YXRlIGZpbmRCeUlkKGlkOiBudW1iZXIpOiBJbnRlcm5hbEVudHJ5PFRMYWJlbD4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmJ5SWQuZ2V0KGlkKTtcbiAgfVxufVxuXG4vKiogUHJvamVjdCB0aGUgaW50ZXJuYWwgbXV0YWJsZSBzaGFwZSBpbnRvIHRoZSBwdWJsaWMgcmVhZG9ubHkgZW50cnkuXG4gKiAgVGhlIE9VVEVSIG9iamVjdCBpcyBhIGZyZXNoIGFsbG9jYXRpb24gcGVyIHF1ZXJ5IChzbyBjYWxsZXIgYXJyYXlcbiAqICBtdXRhdGlvbnMgZG9uJ3QgbGVhaykuIFRoZSBgbGFiZWxgIGZpZWxkIGlzIGEgUkVGRVJFTkNFIENPUFkg4oCUXG4gKiAgaWYgYFRMYWJlbGAgaXMgYW4gb2JqZWN0LCBtdXRhdGluZyBpdHMgZmllbGRzIHdpbGwgYWZmZWN0IHRoZVxuICogIGludGVybmFsIGVudHJ5IHRvby4gQ29uc3VtZXJzIE1VU1QgdHJlYXQgbGFiZWxzIGFzIGltbXV0YWJsZVxuICogIChvciBwYXNzIHByaW1pdGl2ZXMpLiBEb2N1bWVudGVkIGluIHRoZSBjbGFzcyBKU0RvYyBhcyB0aGVcbiAqICBcImxhYmVscyBhcmUgc3RvcmVkIHZlcmJhdGltXCIgY29udHJhY3QuICovXG5mdW5jdGlvbiB0b0VudHJ5PFRMYWJlbD4oZTogSW50ZXJuYWxFbnRyeTxUTGFiZWw+KTogUmFuZ2VFbnRyeTxUTGFiZWw+IHtcbiAgcmV0dXJuIGUuZW5kSWR4ID09PSB1bmRlZmluZWRcbiAgICA/IHsgbGFiZWw6IGUubGFiZWwsIHN0YXJ0SWR4OiBlLnN0YXJ0SWR4IH1cbiAgICA6IHsgbGFiZWw6IGUubGFiZWwsIHN0YXJ0SWR4OiBlLnN0YXJ0SWR4LCBlbmRJZHg6IGUuZW5kSWR4IH07XG59XG5cbi8qKlxuICogU2hhcmVkIG91dGVy4oaSaW5uZXIgY29tcGFyYXRvciBmb3IgYm90aCBgZW5jbG9zaW5nKClgIGFuZFxuICogYG92ZXJsYXBwaW5nKClgLiBQcmltYXJ5IGtleTogYHN0YXJ0SWR4YCBhc2NlbmRpbmcuIFRpZS1icmVhazpcbiAqIGBlbmRJZHhgIGRlc2NlbmRpbmcgKHdpZGVyIHJhbmdlIGlzIG91dGVyKS4gT3BlbiByYW5nZXMgKHVuZGVmaW5lZFxuICogYGVuZElkeGApIHNvcnQgYXMgK0luZmluaXR5IOKGkiBvdXRlcm1vc3Qgd2hlbiB0aWVkLiBEZXRlcm1pbmlzdGljXG4gKiBvcmRlcmluZyByZXF1aXJlZCBzbyBjb25zdW1lcnMgKExlbnMgYnJlYWRjcnVtYiwgdGltZS10cmF2ZWwgVUlzKVxuICogbmV2ZXIgc2VlIGZsaWNrZXIgb24gZXF1YWwtc3RhcnQgYm91bmRhcmllcyAoZS5nLiwgYSBQYXJhbGxlbFxuICogcm9vdCBhbmQgaXRzIGZpcnN0IGJyYW5jaCBvcGVuaW5nIGF0IHRoZSBzYW1lIGNvbW1pdCkuXG4gKi9cbmZ1bmN0aW9uIG91dGVyVG9Jbm5lckNvbXBhcmF0b3I8VExhYmVsPihhOiBSYW5nZUVudHJ5PFRMYWJlbD4sIGI6IFJhbmdlRW50cnk8VExhYmVsPik6IG51bWJlciB7XG4gIGlmIChhLnN0YXJ0SWR4ICE9PSBiLnN0YXJ0SWR4KSByZXR1cm4gYS5zdGFydElkeCAtIGIuc3RhcnRJZHg7XG4gIGNvbnN0IGFlID0gYS5lbmRJZHggPz8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICBjb25zdCBiZSA9IGIuZW5kSWR4ID8/IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgcmV0dXJuIGJlIC0gYWU7XG59XG4iXX0=
@@ -2,8 +2,8 @@
2
2
  /**
3
3
  * CompositeRecorder — fan-out a single recorder attachment to multiple child recorders.
4
4
  *
5
- * Implements both Recorder (scope data ops) and FlowRecorder (control flow events)
6
- * so it works with both `executor.attachRecorder()` and `executor.attachFlowRecorder()`.
5
+ * Implements both ScopeRecorder (scope data ops) and FlowRecorder (control flow events)
6
+ * so it works with both `executor.attachScopeRecorder()` and `executor.attachFlowRecorder()`.
7
7
  *
8
8
  * The composite has a single ID for idempotent attach/detach. Child recorders
9
9
  * keep their own IDs internally but are not individually visible to the executor.
@@ -21,7 +21,7 @@
21
21
  * new DebugRecorder({ verbosity: 'minimal' }),
22
22
  * ]);
23
23
  *
24
- * executor.attachRecorder(observability);
24
+ * executor.attachScopeRecorder(observability);
25
25
  *
26
26
  * // Access child recorders by type
27
27
  * const metrics = observability.get(MetricRecorder);
@@ -40,7 +40,7 @@
40
40
  * }
41
41
  *
42
42
  * // Consumer
43
- * executor.attachRecorder(agentObservability());
43
+ * executor.attachScopeRecorder(agentObservability());
44
44
  * ```
45
45
  */
46
46
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -68,7 +68,7 @@ class CompositeRecorder {
68
68
  getChildren() {
69
69
  return this.children;
70
70
  }
71
- // ── Scope Recorder hooks (fan-out to children that implement Recorder) ─
71
+ // ── Scope ScopeRecorder hooks (fan-out to children that implement ScopeRecorder) ─
72
72
  onRead(event) {
73
73
  for (const c of this.children)
74
74
  if (c.onRead)
@@ -175,4 +175,4 @@ class CompositeRecorder {
175
175
  }
176
176
  }
177
177
  exports.CompositeRecorder = CompositeRecorder;
178
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcG9zaXRlUmVjb3JkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3JlY29yZGVyL0NvbXBvc2l0ZVJlY29yZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJDRzs7O0FBeUJILE1BQWEsaUJBQWlCO0lBQ25CLEVBQUUsQ0FBUztJQUNILFFBQVEsQ0FBaUM7SUFFMUQsWUFBWSxFQUFVLEVBQUUsUUFBd0M7UUFDOUQsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQseUVBQXlFO0lBRXpFOzs7Ozs7O09BT0c7SUFDSCxHQUFHLENBQUksSUFBK0I7UUFDcEMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxZQUFZLElBQUksQ0FBa0IsQ0FBQztJQUN2RSxDQUFDO0lBRUQsK0JBQStCO0lBQy9CLFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELDBFQUEwRTtJQUUxRSxNQUFNLENBQUMsS0FBZ0I7UUFDckIsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUTtZQUFFLElBQUssQ0FBYyxDQUFDLE1BQU07Z0JBQUcsQ0FBYyxDQUFDLE1BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1RixDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQWlCO1FBQ3ZCLEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxJQUFLLENBQWMsQ0FBQyxPQUFPO2dCQUFHLENBQWMsQ0FBQyxPQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFr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LEtBQUssQ0FBQyxDQUFDO0lBQ3BHLENBQUM7SUFFRCxPQUFPLENBQUMsS0FBcUI7UUFDM0IsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUTtZQUFFLElBQUssQ0FBa0IsQ0FBQyxPQUFPO2dCQUFHLENBQWtCLENBQUMsT0FBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RHLENBQUM7SUFFRCx5RUFBeUU7SUFFekUsS0FBSztRQUNILEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLO2dCQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsVUFBVTtRQUNSLE1BQU0sY0FBYyxHQUF1RCxFQUFFLENBQUM7UUFDOUUsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ2pCLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUN0QyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDaEQsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPO1lBQ0wsSUFBSSxFQUFFLFdBQVc7WUFDakIsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRTtTQUNuQyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBeEhELDhDQXdIQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29tcG9zaXRlUmVjb3JkZXIg4oCUIGZhbi1vdXQgYSBzaW5nbGUgcmVjb3JkZXIgYXR0YWNobWVudCB0byBtdWx0aXBsZSBjaGlsZCByZWNvcmRlcnMuXG4gKlxuICogSW1wbGVtZW50cyBib3RoIFJlY29yZGVyIChzY29wZSBkYXRhIG9wcykgYW5kIEZsb3dSZWNvcmRlciAoY29udHJvbCBmbG93IGV2ZW50cylcbiAqIHNvIGl0IHdvcmtzIHdpdGggYm90aCBgZXhlY3V0b3IuYXR0YWNoUmVjb3JkZXIoKWAgYW5kIGBleGVjdXRvci5hdHRhY2hGbG93UmVjb3JkZXIoKWAuXG4gKlxuICogVGhlIGNvbXBvc2l0ZSBoYXMgYSBzaW5nbGUgSUQgZm9yIGlkZW1wb3RlbnQgYXR0YWNoL2RldGFjaC4gQ2hpbGQgcmVjb3JkZXJzXG4gKiBrZWVwIHRoZWlyIG93biBJRHMgaW50ZXJuYWxseSBidXQgYXJlIG5vdCBpbmRpdmlkdWFsbHkgdmlzaWJsZSB0byB0aGUgZXhlY3V0b3IuXG4gKlxuICogRG9tYWluIGxpYnJhcmllcyAoZS5nLiwgYWdlbnRmb290cHJpbnQpIHVzZSB0aGlzIHRvIGJ1bmRsZSBtdWx0aXBsZSByZWNvcmRlcnNcbiAqIGludG8gYSBzaW5nbGUgcHJlc2V0IOKAlCB0aGUgY29uc3VtZXIgY2FsbHMgb25lIGZ1bmN0aW9uLCBnZXRzIGZ1bGwgb2JzZXJ2YWJpbGl0eS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgQ29tcG9zaXRlUmVjb3JkZXIsIE1ldHJpY1JlY29yZGVyLCBEZWJ1Z1JlY29yZGVyIH0gZnJvbSAnZm9vdHByaW50anMnO1xuICpcbiAqIC8vIEJ1bmRsZSBtZXRyaWNzICsgZGVidWcgaW50byBhIHNpbmdsZSByZWNvcmRlclxuICogY29uc3Qgb2JzZXJ2YWJpbGl0eSA9IG5ldyBDb21wb3NpdGVSZWNvcmRlcignb2JzZXJ2YWJpbGl0eScsIFtcbiAqICAgbmV3IE1ldHJpY1JlY29yZGVyKHsgc3RhZ2VGaWx0ZXI6IChuYW1lKSA9PiBuYW1lID09PSAnQ2FsbExMTScgfSksXG4gKiAgIG5ldyBEZWJ1Z1JlY29yZGVyKHsgdmVyYm9zaXR5OiAnbWluaW1hbCcgfSksXG4gKiBdKTtcbiAqXG4gKiBleGVjdXRvci5hdHRhY2hSZWNvcmRlcihvYnNlcnZhYmlsaXR5KTtcbiAqXG4gKiAvLyBBY2Nlc3MgY2hpbGQgcmVjb3JkZXJzIGJ5IHR5cGVcbiAqIGNvbnN0IG1ldHJpY3MgPSBvYnNlcnZhYmlsaXR5LmdldChNZXRyaWNSZWNvcmRlcik7XG4gKiBtZXRyaWNzPy5nZXRNZXRyaWNzKCk7IC8vIHRpbWluZyBkYXRhXG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gRG9tYWluIGxpYnJhcnkgcHJlc2V0IChlLmcuLCBhZ2VudGZvb3RwcmludClcbiAqIGV4cG9ydCBmdW5jdGlvbiBhZ2VudE9ic2VydmFiaWxpdHkob3B0aW9ucz86IEFnZW50T2JzZXJ2YWJpbGl0eU9wdGlvbnMpIHtcbiAqICAgcmV0dXJuIG5ldyBDb21wb3NpdGVSZWNvcmRlcignYWdlbnQtb2JzZXJ2YWJpbGl0eScsIFtcbiAqICAgICBuZXcgTWV0cmljUmVjb3JkZXIob3B0aW9ucz8uc3RhZ2VGaWx0ZXIgPyB7IHN0YWdlRmlsdGVyOiBvcHRpb25zLnN0YWdlRmlsdGVyIH0gOiB1bmRlZmluZWQpLFxuICogICAgIG5ldyBUb2tlblJlY29yZGVyKCksXG4gKiAgICAgbmV3IFRvb2xVc2FnZVJlY29yZGVyKCksXG4gKiAgIF0pO1xuICogfVxuICpcbiAqIC8vIENvbnN1bWVyXG4gKiBleGVjdXRvci5hdHRhY2hSZWNvcmRlcihhZ2VudE9ic2VydmFiaWxpdHkoKSk7XG4gKiBgYGBcbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEZsb3dCcmVha0V2ZW50LFxuICBGbG93RGVjaXNpb25FdmVudCxcbiAgRmxvd0Vycm9yRXZlbnQsXG4gIEZsb3dGb3JrRXZlbnQsXG4gIEZsb3dMb29wRXZlbnQsXG4gIEZsb3dOZXh0RXZlbnQsXG4gIEZsb3dSZWNvcmRlcixcbiAgRmxvd1NlbGVjdGVkRXZlbnQsXG4gIEZsb3dTdGFnZUV2ZW50LFxuICBGbG93U3ViZmxvd0V2ZW50LFxuICBGbG93U3ViZmxvd1JlZ2lzdGVyZWRFdmVudCxcbn0gZnJvbSAnLi4vZW5naW5lL25hcnJhdGl2ZS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbW1pdEV2ZW50LCBFcnJvckV2ZW50LCBSZWFkRXZlbnQsIFJlY29yZGVyLCBTdGFnZUV2ZW50LCBXcml0ZUV2ZW50IH0gZnJvbSAnLi4vc2NvcGUvdHlwZXMuanMnO1xuXG4vKiogU25hcHNob3QgZm9ybWF0IGZvciBjb21wb3NpdGUgcmVjb3JkZXJzIOKAlCB3cmFwcyBjaGlsZCBzbmFwc2hvdHMuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvc2l0ZVNuYXBzaG90IHtcbiAgbmFtZTogc3RyaW5nO1xuICBkYXRhOiB7XG4gICAgY2hpbGRyZW46IEFycmF5PHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nOyBkYXRhOiB1bmtub3duIH0+O1xuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgQ29tcG9zaXRlUmVjb3JkZXIgaW1wbGVtZW50cyBSZWNvcmRlciwgRmxvd1JlY29yZGVyIHtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBjaGlsZHJlbjogQXJyYXk8UmVjb3JkZXIgfCBGbG93UmVjb3JkZXI+O1xuXG4gIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcsIGNoaWxkcmVuOiBBcnJheTxSZWNvcmRlciB8IEZsb3dSZWNvcmRlcj4pIHtcbiAgICB0aGlzLmlkID0gaWQ7XG4gICAgdGhpcy5jaGlsZHJlbiA9IFsuLi5jaGlsZHJlbl07XG4gIH1cblxuICAvLyDilIDilIAgQ2hpbGQgYWNjZXNzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBHZXQgYSBjaGlsZCByZWNvcmRlciBieSBjbGFzcyB0eXBlLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IG1ldHJpY3MgPSBjb21wb3NpdGUuZ2V0KE1ldHJpY1JlY29yZGVyKTtcbiAgICogYGBgXG4gICAqL1xuICBnZXQ8VD4odHlwZTogbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gVCk6IFQgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmZpbmQoKGMpID0+IGMgaW5zdGFuY2VvZiB0eXBlKSBhcyBUIHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIEdldCBhbGwgY2hpbGQgcmVjb3JkZXJzLiAqL1xuICBnZXRDaGlsZHJlbigpOiBSZWFkb25seUFycmF5PFJlY29yZGVyIHwgRmxvd1JlY29yZGVyPiB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW47XG4gIH1cblxuICAvLyDilIDilIAgU2NvcGUgUmVjb3JkZXIgaG9va3MgKGZhbi1vdXQgdG8gY2hpbGRyZW4gdGhhdCBpbXBsZW1lbnQgUmVjb3JkZXIpIOKUgFxuXG4gIG9uUmVhZChldmVudDogUmVhZEV2ZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pIGlmICgoYyBhcyBSZWNvcmRlcikub25SZWFkKSAoYyBhcyBSZWNvcmRlcikub25SZWFkIShldmVudCk7XG4gIH1cblxuICBvbldyaXRlKGV2ZW50OiBXcml0ZUV2ZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pIGlmICgoYyBhcyBSZWNvcmRlcikub25Xcml0ZSkgKGMgYXMgUmVjb3JkZXIpLm9uV3JpdGUhKGV2ZW50KTtcbiAgfVxuXG4gIG9uQ29tbWl0KGV2ZW50OiBDb21taXRFdmVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSBpZiAoKGMgYXMgUmVjb3JkZXIpLm9uQ29tbWl0KSAoYyBhcyBSZWNvcmRlcikub25Db21taXQhKGV2ZW50KTtcbiAgfVxuXG4gIG9uRXJyb3IoZXZlbnQ6IEVycm9yRXZlbnQgfCBGbG93RXJyb3JFdmVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSBpZiAoKGMgYXMgUmVjb3JkZXIpLm9uRXJyb3IpIChjIGFzIFJlY29yZGVyKS5vbkVycm9yIShldmVudCBhcyBhbnkpO1xuICB9XG5cbiAgb25TdGFnZVN0YXJ0KGV2ZW50OiBTdGFnZUV2ZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pIGlmICgoYyBhcyBSZWNvcmRlcikub25TdGFnZVN0YXJ0KSAoYyBhcyBSZWNvcmRlcikub25TdGFnZVN0YXJ0IShldmVudCk7XG4gIH1cblxuICBvblN0YWdlRW5kKGV2ZW50OiBTdGFnZUV2ZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pIGlmICgoYyBhcyBSZWNvcmRlcikub25TdGFnZUVuZCkgKGMgYXMgUmVjb3JkZXIpLm9uU3RhZ2VFbmQhKGV2ZW50KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBGbG93UmVjb3JkZXIgaG9va3MgKGZhbi1vdXQgdG8gY2hpbGRyZW4gdGhhdCBpbXBsZW1lbnQgRmxvd1JlY29yZGVyKSDilIBcblxuICBvblN0YWdlRXhlY3V0ZWQoZXZlbnQ6IEZsb3dTdGFnZUV2ZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pIGlmICgoYyBhcyBGbG93UmVjb3JkZXIpLm9uU3RhZ2VFeGVjdXRlZCkgKGMgYXMgRmxvd1JlY29yZGVyKS5vblN0YWdlRXhlY3V0ZWQhKGV2ZW50KTtcbiAgfVxuXG4gIG9uTmV4dChldmVudDogRmxvd05leHRFdmVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSBpZiAoKGMgYXMgRmxvd1JlY29yZGVyKS5vbk5leHQpIChjIGFzIEZsb3dSZWNvcmRlcikub25OZXh0IShldmVudCk7XG4gIH1cblxuICBvbkRlY2lzaW9uKGV2ZW50OiBGbG93RGVjaXNpb25FdmVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSBpZiAoKGMgYXMgRmxvd1JlY29yZGVyKS5vbkRlY2lzaW9uKSAoYyBhcyBGbG93UmVjb3JkZXIpLm9uRGVjaXNpb24hKGV2ZW50KTtcbiAgfVxuXG4gIG9uRm9yayhldmVudDogRmxvd0ZvcmtFdmVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSBpZiAoKGMgYXMgRmxvd1JlY29yZGVyKS5vbkZvcmspIChjIGFzIEZsb3dSZWNvcmRlcikub25Gb3JrIShldmVudCk7XG4gIH1cblxuICBvblNlbGVjdGVkKGV2ZW50OiBGbG93U2VsZWN0ZWRFdmVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSBpZiAoKGMgYXMgRmxvd1JlY29yZGVyKS5vblNlbGVjdGVkKSAoYyBhcyBGbG93UmVjb3JkZXIpLm9uU2VsZWN0ZWQhKGV2ZW50KTtcbiAgfVxuXG4gIG9uU3ViZmxvd0VudHJ5KGV2ZW50OiBGbG93U3ViZmxvd0V2ZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pIGlmICgoYyBhcyBGbG93UmVjb3JkZXIpLm9uU3ViZmxvd0VudHJ5KSAoYyBhcyBGbG93UmVjb3JkZXIpLm9uU3ViZmxvd0VudHJ5IShldmVudCk7XG4gIH1cblxuICBvblN1YmZsb3dFeGl0KGV2ZW50OiBGbG93U3ViZmxvd0V2ZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pIGlmICgoYyBhcyBGbG93UmVjb3JkZXIpLm9uU3ViZmxvd0V4aXQpIChjIGFzIEZsb3dSZWNvcmRlcikub25TdWJmbG93RXhpdCEoZXZlbnQpO1xuICB9XG5cbiAgb25TdWJmbG93UmVnaXN0ZXJlZChldmVudDogRmxvd1N1YmZsb3dSZWdpc3RlcmVkRXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbilcbiAgICAgIGlmICgoYyBhcyBGbG93UmVjb3JkZXIpLm9uU3ViZmxvd1JlZ2lzdGVyZWQpIChjIGFzIEZsb3dSZWNvcmRlcikub25TdWJmbG93UmVnaXN0ZXJlZCEoZXZlbnQpO1xuICB9XG5cbiAgb25Mb29wKGV2ZW50OiBGbG93TG9vcEV2ZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pIGlmICgoYyBhcyBGbG93UmVjb3JkZXIpLm9uTG9vcCkgKGMgYXMgRmxvd1JlY29yZGVyKS5vbkxvb3AhKGV2ZW50KTtcbiAgfVxuXG4gIG9uQnJlYWsoZXZlbnQ6IEZsb3dCcmVha0V2ZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pIGlmICgoYyBhcyBGbG93UmVjb3JkZXIpLm9uQnJlYWspIChjIGFzIEZsb3dSZWNvcmRlcikub25CcmVhayEoZXZlbnQpO1xuICB9XG5cbiAgLy8g4pSA4pSAIExpZmVjeWNsZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBjbGVhcigpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikgaWYgKGMuY2xlYXIpIGMuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTbmFwc2hvdCBtZXJnZXMgYWxsIGNoaWxkIHNuYXBzaG90cyBpbnRvIGEgc2luZ2xlIGNvbXBvc2l0ZSBlbnRyeS5cbiAgICogRWFjaCBjaGlsZCdzIHNuYXBzaG90IGlzIHByZXNlcnZlZCB3aXRoIGl0cyBvd24gaWQvbmFtZS9kYXRhLlxuICAgKi9cbiAgdG9TbmFwc2hvdCgpOiBDb21wb3NpdGVTbmFwc2hvdCB7XG4gICAgY29uc3QgY2hpbGRTbmFwc2hvdHM6IEFycmF5PHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nOyBkYXRhOiB1bmtub3duIH0+ID0gW107XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pIHtcbiAgICAgIGlmIChjLnRvU25hcHNob3QpIHtcbiAgICAgICAgY29uc3QgeyBuYW1lLCBkYXRhIH0gPSBjLnRvU25hcHNob3QoKTtcbiAgICAgICAgY2hpbGRTbmFwc2hvdHMucHVzaCh7IGlkOiBjLmlkLCBuYW1lLCBkYXRhIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogJ0NvbXBvc2l0ZScsXG4gICAgICBkYXRhOiB7IGNoaWxkcmVuOiBjaGlsZFNuYXBzaG90cyB9LFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
178
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcG9zaXRlUmVjb3JkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3JlY29yZGVyL0NvbXBvc2l0ZVJlY29yZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJDRzs7O0FBeUJILE1BQWEsaUJBQWlCO0lBQ25CLEVBQUUsQ0FBUztJQUNILFFBQVEsQ0FBc0M7SUFFL0QsWUFBWSxFQUFVLEVBQUUsUUFBNkM7UUFDbkUsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQseUVBQXlFO0lBRXpFOzs7Ozs7O09BT0c7SUFDSCxHQUFHLENBQUksSUFBK0I7UUFDcEMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxZQUFZLElBQUksQ0FBa0IsQ0FBQztJQUN2RSxDQUFDO0lBRUQsK0JBQStCO0lBQy9CLFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELG9GQUFvRjtJQUVwRixNQUFNLENBQUMsS0FBZ0I7UUFDckIsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUTtZQUFFLElBQUssQ0FBbUIsQ0FBQyxNQUFNO2dCQUFHLENBQW1CLENBQUMsTUFBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RHLENBQUM7SUFFRCxPQUFPLENBQUMsS0FBaUI7UUFDdkIsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUTtZQUFFLElBQUssQ0FBbUIsQ0FBQyxPQUFPO2dCQUFHLENBQW1CLENBQUMsT0FBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hHLENBQUM7SUFFRCxRQUFRLENBQUMs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QUMsTUFBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BHLENBQUM7SUFFRCxPQUFPLENBQUMsS0FBcUI7UUFDM0IsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUTtZQUFFLElBQUssQ0FBa0IsQ0FBQyxPQUFPO2dCQUFHLENBQWtCLENBQUMsT0FBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RHLENBQUM7SUFFRCx5RUFBeUU7SUFFekUsS0FBSztRQUNILEtBQUssTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxJQUFJLENBQUMsQ0FBQyxLQUFLO2dCQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsVUFBVTtRQUNSLE1BQU0sY0FBYyxHQUF1RCxFQUFFLENBQUM7UUFDOUUsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ2pCLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUN0QyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDaEQsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPO1lBQ0wsSUFBSSxFQUFFLFdBQVc7WUFDakIsSUFBSSxFQUFFLEVBQUUsUUFBUSxFQUFFLGNBQWMsRUFBRTtTQUNuQyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBeEhELDhDQXdIQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29tcG9zaXRlUmVjb3JkZXIg4oCUIGZhbi1vdXQgYSBzaW5nbGUgcmVjb3JkZXIgYXR0YWNobWVudCB0byBtdWx0aXBsZSBjaGlsZCByZWNvcmRlcnMuXG4gKlxuICogSW1wbGVtZW50cyBib3RoIFNjb3BlUmVjb3JkZXIgKHNjb3BlIGRhdGEgb3BzKSBhbmQgRmxvd1JlY29yZGVyIChjb250cm9sIGZsb3cgZXZlbnRzKVxuICogc28gaXQgd29ya3Mgd2l0aCBib3RoIGBleGVjdXRvci5hdHRhY2hTY29wZVJlY29yZGVyKClgIGFuZCBgZXhlY3V0b3IuYXR0YWNoRmxvd1JlY29yZGVyKClgLlxuICpcbiAqIFRoZSBjb21wb3NpdGUgaGFzIGEgc2luZ2xlIElEIGZvciBpZGVtcG90ZW50IGF0dGFjaC9kZXRhY2guIENoaWxkIHJlY29yZGVyc1xuICoga2VlcCB0aGVpciBvd24gSURzIGludGVybmFsbHkgYnV0IGFyZSBub3QgaW5kaXZpZHVhbGx5IHZpc2libGUgdG8gdGhlIGV4ZWN1dG9yLlxuICpcbiAqIERvbWFpbiBsaWJyYXJpZXMgKGUuZy4sIGFnZW50Zm9vdHByaW50KSB1c2UgdGhpcyB0byBidW5kbGUgbXVsdGlwbGUgcmVjb3JkZXJzXG4gKiBpbnRvIGEgc2luZ2xlIHByZXNldCDigJQgdGhlIGNvbnN1bWVyIGNhbGxzIG9uZSBmdW5jdGlvbiwgZ2V0cyBmdWxsIG9ic2VydmFiaWxpdHkuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IENvbXBvc2l0ZVJlY29yZGVyLCBNZXRyaWNSZWNvcmRlciwgRGVidWdSZWNvcmRlciB9IGZyb20gJ2Zvb3RwcmludGpzJztcbiAqXG4gKiAvLyBCdW5kbGUgbWV0cmljcyArIGRlYnVnIGludG8gYSBzaW5nbGUgcmVjb3JkZXJcbiAqIGNvbnN0IG9ic2VydmFiaWxpdHkgPSBuZXcgQ29tcG9zaXRlUmVjb3JkZXIoJ29ic2VydmFiaWxpdHknLCBbXG4gKiAgIG5ldyBNZXRyaWNSZWNvcmRlcih7IHN0YWdlRmlsdGVyOiAobmFtZSkgPT4gbmFtZSA9PT0gJ0NhbGxMTE0nIH0pLFxuICogICBuZXcgRGVidWdSZWNvcmRlcih7IHZlcmJvc2l0eTogJ21pbmltYWwnIH0pLFxuICogXSk7XG4gKlxuICogZXhlY3V0b3IuYXR0YWNoU2NvcGVSZWNvcmRlcihvYnNlcnZhYmlsaXR5KTtcbiAqXG4gKiAvLyBBY2Nlc3MgY2hpbGQgcmVjb3JkZXJzIGJ5IHR5cGVcbiAqIGNvbnN0IG1ldHJpY3MgPSBvYnNlcnZhYmlsaXR5LmdldChNZXRyaWNSZWNvcmRlcik7XG4gKiBtZXRyaWNzPy5nZXRNZXRyaWNzKCk7IC8vIHRpbWluZyBkYXRhXG4gKiBgYGBcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gRG9tYWluIGxpYnJhcnkgcHJlc2V0IChlLmcuLCBhZ2VudGZvb3RwcmludClcbiAqIGV4cG9ydCBmdW5jdGlvbiBhZ2VudE9ic2VydmFiaWxpdHkob3B0aW9ucz86IEFnZW50T2JzZXJ2YWJpbGl0eU9wdGlvbnMpIHtcbiAqICAgcmV0dXJuIG5ldyBDb21wb3NpdGVSZWNvcmRlcignYWdlbnQtb2JzZXJ2YWJpbGl0eScsIFtcbiAqICAgICBuZXcgTWV0cmljUmVjb3JkZXIob3B0aW9ucz8uc3RhZ2VGaWx0ZXIgPyB7IHN0YWdlRmlsdGVyOiBvcHRpb25zLnN0YWdlRmlsdGVyIH0gOiB1bmRlZmluZWQpLFxuICogICAgIG5ldyBUb2tlblJlY29yZGVyKCksXG4gKiAgICAgbmV3IFRvb2xVc2FnZVJlY29yZGVyKCksXG4gKiAgIF0pO1xuICogfVxuICpcbiAqIC8vIENvbnN1bWVyXG4gKiBleGVjdXRvci5hdHRhY2hTY29wZVJlY29yZGVyKGFnZW50T2JzZXJ2YWJpbGl0eSgpKTtcbiAqIGBgYFxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgRmxvd0JyZWFrRXZlbnQsXG4gIEZsb3dEZWNpc2lvbkV2ZW50LFxuICBGbG93RXJyb3JFdmVudCxcbiAgRmxvd0ZvcmtFdmVudCxcbiAgRmxvd0xvb3BFdmVudCxcbiAgRmxvd05leHRFdmVudCxcbiAgRmxvd1JlY29yZGVyLFxuICBGbG93U2VsZWN0ZWRFdmVudCxcbiAgRmxvd1N0YWdlRXZlbnQsXG4gIEZsb3dTdWJmbG93RXZlbnQsXG4gIEZsb3dTdWJmbG93UmVnaXN0ZXJlZEV2ZW50LFxufSBmcm9tICcuLi9lbmdpbmUvbmFycmF0aXZlL3R5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgQ29tbWl0RXZlbnQsIEVycm9yRXZlbnQsIFJlYWRFdmVudCwgU2NvcGVSZWNvcmRlciwgU3RhZ2VFdmVudCwgV3JpdGVFdmVudCB9IGZyb20gJy4uL3Njb3BlL3R5cGVzLmpzJztcblxuLyoqIFNuYXBzaG90IGZvcm1hdCBmb3IgY29tcG9zaXRlIHJlY29yZGVycyDigJQgd3JhcHMgY2hpbGQgc25hcHNob3RzLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wb3NpdGVTbmFwc2hvdCB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGF0YToge1xuICAgIGNoaWxkcmVuOiBBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgZGF0YTogdW5rbm93biB9PjtcbiAgfTtcbn1cblxuZXhwb3J0IGNsYXNzIENvbXBvc2l0ZVJlY29yZGVyIGltcGxlbWVudHMgU2NvcGVSZWNvcmRlciwgRmxvd1JlY29yZGVyIHtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBjaGlsZHJlbjogQXJyYXk8U2NvcGVSZWNvcmRlciB8IEZsb3dSZWNvcmRlcj47XG5cbiAgY29uc3RydWN0b3IoaWQ6IHN0cmluZywgY2hpbGRyZW46IEFycmF5PFNjb3BlUmVjb3JkZXIgfCBGbG93UmVjb3JkZXI+KSB7XG4gICAgdGhpcy5pZCA9IGlkO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBbLi4uY2hpbGRyZW5dO1xuICB9XG5cbiAgLy8g4pSA4pSAIENoaWxkIGFjY2VzcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogR2V0IGEgY2hpbGQgcmVjb3JkZXIgYnkgY2xhc3MgdHlwZS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBtZXRyaWNzID0gY29tcG9zaXRlLmdldChNZXRyaWNSZWNvcmRlcik7XG4gICAqIGBgYFxuICAgKi9cbiAgZ2V0PFQ+KHR5cGU6IG5ldyAoLi4uYXJnczogYW55W10pID0+IFQpOiBUIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5jaGlsZHJlbi5maW5kKChjKSA9PiBjIGluc3RhbmNlb2YgdHlwZSkgYXMgVCB8IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBHZXQgYWxsIGNoaWxkIHJlY29yZGVycy4gKi9cbiAgZ2V0Q2hpbGRyZW4oKTogUmVhZG9ubHlBcnJheTxTY29wZVJlY29yZGVyIHwgRmxvd1JlY29yZGVyPiB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW47XG4gIH1cblxuICAvLyDilIDilIAgU2NvcGUgU2NvcGVSZWNvcmRlciBob29rcyAoZmFuLW91dCB0byBjaGlsZHJlbiB0aGF0IGltcGxlbWVudCBTY29wZVJlY29yZGVyKSDilIBcblxuICBvblJlYWQoZXZlbnQ6IFJlYWRFdmVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSBpZiAoKGMgYXMgU2NvcGVSZWNvcmRlcikub25SZWFkKSAoYyBhcyBTY29wZVJlY29yZGVyKS5vblJlYWQhKGV2ZW50KTtcbiAgfVxuXG4gIG9uV3JpdGUoZXZlbnQ6IFdyaXRlRXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikgaWYgKChjIGFzIFNjb3BlUmVjb3JkZXIpLm9uV3JpdGUpIChjIGFzIFNjb3BlUmVjb3JkZXIpLm9uV3JpdGUhKGV2ZW50KTtcbiAgfVxuXG4gIG9uQ29tbWl0KGV2ZW50OiBDb21taXRFdmVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSBpZiAoKGMgYXMgU2NvcGVSZWNvcmRlcikub25Db21taXQpIChjIGFzIFNjb3BlUmVjb3JkZXIpLm9uQ29tbWl0IShldmVudCk7XG4gIH1cblxuICBvbkVycm9yKGV2ZW50OiBFcnJvckV2ZW50IHwgRmxvd0Vycm9yRXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikgaWYgKChjIGFzIFNjb3BlUmVjb3JkZXIpLm9uRXJyb3IpIChjIGFzIFNjb3BlUmVjb3JkZXIpLm9uRXJyb3IhKGV2ZW50IGFzIGFueSk7XG4gIH1cblxuICBvblN0YWdlU3RhcnQoZXZlbnQ6IFN0YWdlRXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikgaWYgKChjIGFzIFNjb3BlUmVjb3JkZXIpLm9uU3RhZ2VTdGFydCkgKGMgYXMgU2NvcGVSZWNvcmRlcikub25TdGFnZVN0YXJ0IShldmVudCk7XG4gIH1cblxuICBvblN0YWdlRW5kKGV2ZW50OiBTdGFnZUV2ZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pIGlmICgoYyBhcyBTY29wZVJlY29yZGVyKS5vblN0YWdlRW5kKSAoYyBhcyBTY29wZVJlY29yZGVyKS5vblN0YWdlRW5kIShldmVudCk7XG4gIH1cblxuICAvLyDilIDilIAgRmxvd1JlY29yZGVyIGhvb2tzIChmYW4tb3V0IHRvIGNoaWxkcmVuIHRoYXQgaW1wbGVtZW50IEZsb3dSZWNvcmRlcikg4pSAXG5cbiAgb25TdGFnZUV4ZWN1dGVkKGV2ZW50OiBGbG93U3RhZ2VFdmVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSBpZiAoKGMgYXMgRmxvd1JlY29yZGVyKS5vblN0YWdlRXhlY3V0ZWQpIChjIGFzIEZsb3dSZWNvcmRlcikub25TdGFnZUV4ZWN1dGVkIShldmVudCk7XG4gIH1cblxuICBvbk5leHQoZXZlbnQ6IEZsb3dOZXh0RXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikgaWYgKChjIGFzIEZsb3dSZWNvcmRlcikub25OZXh0KSAoYyBhcyBGbG93UmVjb3JkZXIpLm9uTmV4dCEoZXZlbnQpO1xuICB9XG5cbiAgb25EZWNpc2lvbihldmVudDogRmxvd0RlY2lzaW9uRXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikgaWYgKChjIGFzIEZsb3dSZWNvcmRlcikub25EZWNpc2lvbikgKGMgYXMgRmxvd1JlY29yZGVyKS5vbkRlY2lzaW9uIShldmVudCk7XG4gIH1cblxuICBvbkZvcmsoZXZlbnQ6IEZsb3dGb3JrRXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikgaWYgKChjIGFzIEZsb3dSZWNvcmRlcikub25Gb3JrKSAoYyBhcyBGbG93UmVjb3JkZXIpLm9uRm9yayEoZXZlbnQpO1xuICB9XG5cbiAgb25TZWxlY3RlZChldmVudDogRmxvd1NlbGVjdGVkRXZlbnQpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgdGhpcy5jaGlsZHJlbikgaWYgKChjIGFzIEZsb3dSZWNvcmRlcikub25TZWxlY3RlZCkgKGMgYXMgRmxvd1JlY29yZGVyKS5vblNlbGVjdGVkIShldmVudCk7XG4gIH1cblxuICBvblN1YmZsb3dFbnRyeShldmVudDogRmxvd1N1YmZsb3dFdmVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSBpZiAoKGMgYXMgRmxvd1JlY29yZGVyKS5vblN1YmZsb3dFbnRyeSkgKGMgYXMgRmxvd1JlY29yZGVyKS5vblN1YmZsb3dFbnRyeSEoZXZlbnQpO1xuICB9XG5cbiAgb25TdWJmbG93RXhpdChldmVudDogRmxvd1N1YmZsb3dFdmVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSBpZiAoKGMgYXMgRmxvd1JlY29yZGVyKS5vblN1YmZsb3dFeGl0KSAoYyBhcyBGbG93UmVjb3JkZXIpLm9uU3ViZmxvd0V4aXQhKGV2ZW50KTtcbiAgfVxuXG4gIG9uU3ViZmxvd1JlZ2lzdGVyZWQoZXZlbnQ6IEZsb3dTdWJmbG93UmVnaXN0ZXJlZEV2ZW50KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pXG4gICAgICBpZiAoKGMgYXMgRmxvd1JlY29yZGVyKS5vblN1YmZsb3dSZWdpc3RlcmVkKSAoYyBhcyBGbG93UmVjb3JkZXIpLm9uU3ViZmxvd1JlZ2lzdGVyZWQhKGV2ZW50KTtcbiAgfVxuXG4gIG9uTG9vcChldmVudDogRmxvd0xvb3BFdmVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSBpZiAoKGMgYXMgRmxvd1JlY29yZGVyKS5vbkxvb3ApIChjIGFzIEZsb3dSZWNvcmRlcikub25Mb29wIShldmVudCk7XG4gIH1cblxuICBvbkJyZWFrKGV2ZW50OiBGbG93QnJlYWtFdmVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSBpZiAoKGMgYXMgRmxvd1JlY29yZGVyKS5vbkJyZWFrKSAoYyBhcyBGbG93UmVjb3JkZXIpLm9uQnJlYWshKGV2ZW50KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBMaWZlY3ljbGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBjIG9mIHRoaXMuY2hpbGRyZW4pIGlmIChjLmNsZWFyKSBjLmNsZWFyKCk7XG4gIH1cblxuICAvKipcbiAgICogU25hcHNob3QgbWVyZ2VzIGFsbCBjaGlsZCBzbmFwc2hvdHMgaW50byBhIHNpbmdsZSBjb21wb3NpdGUgZW50cnkuXG4gICAqIEVhY2ggY2hpbGQncyBzbmFwc2hvdCBpcyBwcmVzZXJ2ZWQgd2l0aCBpdHMgb3duIGlkL25hbWUvZGF0YS5cbiAgICovXG4gIHRvU25hcHNob3QoKTogQ29tcG9zaXRlU25hcHNob3Qge1xuICAgIGNvbnN0IGNoaWxkU25hcHNob3RzOiBBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgZGF0YTogdW5rbm93biB9PiA9IFtdO1xuICAgIGZvciAoY29uc3QgYyBvZiB0aGlzLmNoaWxkcmVuKSB7XG4gICAgICBpZiAoYy50b1NuYXBzaG90KSB7XG4gICAgICAgIGNvbnN0IHsgbmFtZSwgZGF0YSB9ID0gYy50b1NuYXBzaG90KCk7XG4gICAgICAgIGNoaWxkU25hcHNob3RzLnB1c2goeyBpZDogYy5pZCwgbmFtZSwgZGF0YSB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6ICdDb21wb3NpdGUnLFxuICAgICAgZGF0YTogeyBjaGlsZHJlbjogY2hpbGRTbmFwc2hvdHMgfSxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  /**
3
- * EmitRecorder — the third observer channel, alongside `Recorder`
3
+ * EmitRecorder — the third observer channel, alongside `ScopeRecorder`
4
4
  * (scope data-flow) and `FlowRecorder` (control-flow).
5
5
  *
6
6
  * ## Why this exists
@@ -35,7 +35,7 @@
35
35
  *
36
36
  * | Channel | Fires when | Built-in consumers |
37
37
  * |-----------------|------------------------------------|------------------------|
38
- * | `Recorder` | scope read/write/commit | DebugRecorder, MetricRecorder |
38
+ * | `ScopeRecorder` | scope read/write/commit | DebugRecorder, MetricRecorder |
39
39
  * | `FlowRecorder` | traversal transitions | NarrativeFlowRecorder, etc. |
40
40
  * | `EmitRecorder` | consumer calls `scope.$emit(...)` | (none ships today; Phase 3.X adds MemoryEmitRecorder) |
41
41
  *
@@ -60,4 +60,4 @@
60
60
  * ```
61
61
  */
62
62
  Object.defineProperty(exports, "__esModule", { value: true });
63
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW1pdFJlY29yZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9yZWNvcmRlci9FbWl0UmVjb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJERyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRW1pdFJlY29yZGVyIOKAlCB0aGUgdGhpcmQgb2JzZXJ2ZXIgY2hhbm5lbCwgYWxvbmdzaWRlIGBSZWNvcmRlcmBcbiAqIChzY29wZSBkYXRhLWZsb3cpIGFuZCBgRmxvd1JlY29yZGVyYCAoY29udHJvbC1mbG93KS5cbiAqXG4gKiAjIyBXaHkgdGhpcyBleGlzdHNcbiAqXG4gKiBUaGUgZmlyc3QgdHdvIGNoYW5uZWxzIGNhcHR1cmUgd2hhdCB0aGUgTElCUkFSWSBrbm93cyBhYm91dCDigJQgc2NvcGVcbiAqIHJlYWRzL3dyaXRlcyBmaXJlZCBieSBgc2V0VmFsdWVgLCBhbmQgY29udHJvbC1mbG93IGV2ZW50cyBmaXJlZCBieSB0aGVcbiAqIHRyYXZlcnNlci4gQnV0ICoqdXNlci1lbWl0dGVkIHN0cnVjdHVyZWQgZXZlbnRzKiog4oCUIHRoaW5ncyBhIHN0YWdlXG4gKiBmdW5jdGlvbiB3YW50cyB0byBzdXJmYWNlIGZvciBvYnNlcnZhYmlsaXR5IChMTE0gdG9rZW5zLCBiaWxsaW5nIG1ldHJpY3MsXG4gKiBhdXRoIGRlY2lzaW9ucywgZG9tYWluIG1pbGVzdG9uZXMpIOKAlCBoYXZlIG5vd2hlcmUgdG8gZ28gdG9kYXkuIFRoZXkgbGFuZFxuICogaW4gdW5vYnNlcnZlZCBgRGlhZ25vc3RpY0NvbGxlY3RvcmAgc2lkZSBiYWdzIHRoYXQgbm8gcmVjb3JkZXIgd2F0Y2hlcy5cbiAqXG4gKiBUaGlzIGNoYW5uZWwgY2xvc2VzIHRoYXQgZ2FwLiBDb25zdW1lciBjYWxscyBgc2NvcGUuJGVtaXQobmFtZSwgcGF5bG9hZClgXG4gKiBmcm9tIGluc2lkZSBhIHN0YWdlOyB0aGUgbGlicmFyeSBlbnJpY2hlcyB0aGUgZXZlbnQgd2l0aCBzdGFnZSBjb250ZXh0XG4gKiBhbmQgZGlzcGF0Y2hlcyBpdCBzeW5jaHJvbm91c2x5IHRvIGV2ZXJ5IGF0dGFjaGVkIGBFbWl0UmVjb3JkZXJgLlxuICpcbiAqICMjIERlc2lnbiBwcm9wZXJ0aWVzXG4gKlxuICogLSAqKlBhc3MtdGhyb3VnaCwgbm90IGJ1ZmZlcmVkLioqIFplcm8gYWxsb2NhdGlvbiB3aGVuIG5vIHJlY29yZGVyIGlzXG4gKiAgIGF0dGFjaGVkLiBFdmVudHMgZGVsaXZlcmVkIHN5bmNocm9ub3VzbHksIGluLW9yZGVyLCBhdCBjYWxsIHRpbWUuXG4gKiAgIFNhbWUgc2VtYW50aWNzIGFzIGBvblJlYWRgL2BvbldyaXRlYCBhbHJlYWR5IHVzZS5cbiAqIC0gKipMaWJyYXJ5LWFnbm9zdGljIHZvY2FidWxhcnkuKiogRXZlbnQgbmFtZXMgYXJlIGNvbnN1bWVyLWNob3NlbiBzdHJpbmdzLlxuICogICBDb252ZW50aW9uOiBoaWVyYXJjaGljYWwgZG90dGVkIG5hbWVzLCBlLmcuIGAnYWdlbnRmb290cHJpbnQubGxtLnRva2VucydgLFxuICogICBgJ215YXBwLmJpbGxpbmcuc3BlbmQnYC4gTGlicmFyeSBlbmZvcmNlcyBubyByZWdpc3RyeS5cbiAqIC0gKipBdXRvLWVucmljaGVkIGNvbnRleHQuKiogRXZlcnkgZXZlbnQgY2FycmllcyBgc3RhZ2VOYW1lYCxcbiAqICAgYHJ1bnRpbWVTdGFnZUlkYCwgYHN1YmZsb3dQYXRoYCwgYHBpcGVsaW5lSWRgLCBgdGltZXN0YW1wYC4gQ29uc3VtZXJzXG4gKiAgIG5ldmVyIG5lZWQgdG8gdGhyZWFkIGV4ZWN1dGlvbiBjb250ZXh0IHRocm91Z2ggdGhlaXIgZW1pdCBwYXlsb2Fkcy5cbiAqIC0gKipSZWRhY3Rpb24tYXdhcmUuKiogYFJlZGFjdGlvblBvbGljeS5lbWl0UGF0dGVybnNgIG1hdGNoZXMgZXZlbnQgbmFtZXNcbiAqICAgYmVmb3JlIGRpc3BhdGNoIOKAlCBtYXRjaGVkIGV2ZW50cyBoYXZlIHRoZWlyIHBheWxvYWQgcmVwbGFjZWQgd2l0aFxuICogICBgJ1tSRURBQ1RFRF0nYCBzbyBzZWNyZXRzIGNhbid0IGxlYWsgdmlhIGVtaXQuXG4gKlxuICogIyMgUmVsYXRpb25zaGlwIHRvIGV4aXN0aW5nIGNoYW5uZWxzXG4gKlxuICogfCBDaGFubmVsICAgICAgICAgfCBGaXJlcyB3aGVuICAgICAgICAgICAgICAgICAgICAgICAgIHwgQnVpbHQtaW4gY29uc3VtZXJzICAgICB8XG4gKiB8LS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXxcbiAqIHwgYFJlY29yZGVyYCAgICAgIHwgc2NvcGUgcmVhZC93cml0ZS9jb21taXQgICAgICAgICAgICB8IERlYnVnUmVjb3JkZXIsIE1ldHJpY1JlY29yZGVyIHxcbiAqIHwgYEZsb3dSZWNvcmRlcmAgIHwgdHJhdmVyc2FsIHRyYW5zaXRpb25zICAgICAgICAgICAgICB8IE5hcnJhdGl2ZUZsb3dSZWNvcmRlciwgZXRjLiB8XG4gKiB8IGBFbWl0UmVjb3JkZXJgICB8IGNvbnN1bWVyIGNhbGxzIGBzY29wZS4kZW1pdCguLi4pYCAgfCAobm9uZSBzaGlwcyB0b2RheTsgUGhhc2UgMy5YIGFkZHMgTWVtb3J5RW1pdFJlY29yZGVyKSB8XG4gKlxuICogYENvbWJpbmVkUmVjb3JkZXJgIChmcm9tIGAuL0NvbWJpbmVkUmVjb3JkZXIudHNgKSBpbnRlcnNlY3RzIGFsbCB0aHJlZVxuICogdmlhIGBQYXJ0aWFsPC4uLj5gLiBBIGNvbnN1bWVyIGNhbiB3cml0ZSBPTkUgb2JqZWN0IGltcGxlbWVudGluZyBhbnlcbiAqIGNvbWJpbmF0aW9uOyBgZXhlY3V0b3IuYXR0YWNoQ29tYmluZWRSZWNvcmRlcihyKWAgZHVjay10eXBlcyBhbmQgcm91dGVzXG4gKiB0byB0aGUgcmlnaHQgY2hhbm5lbChzKS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgdG9rZW5NZXRlcjogRW1pdFJlY29yZGVyID0ge1xuICogICBpZDogJ3Rva2VuLW1ldGVyJyxcbiAqICAgb25FbWl0KGV2ZW50KSB7XG4gKiAgICAgaWYgKGV2ZW50Lm5hbWUgPT09ICdhZ2VudGZvb3RwcmludC5sbG0udG9rZW5zJykge1xuICogICAgICAgdGhpcy50b3RhbCArPSAoZXZlbnQucGF5bG9hZCBhcyB7IGlucHV0OiBudW1iZXI7IG91dHB1dDogbnVtYmVyIH0pLmlucHV0O1xuICogICAgIH1cbiAqICAgfSxcbiAqICAgdG90YWw6IDAsXG4gKiB9IGFzIGFueTtcbiAqXG4gKiBleGVjdXRvci5hdHRhY2hFbWl0UmVjb3JkZXIodG9rZW5NZXRlcik7XG4gKiBgYGBcbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFJlY29yZGVyT3BlcmF0aW9uIH0gZnJvbSAnLi9SZWNvcmRlck9wZXJhdGlvbi5qcyc7XG5cbi8qKlxuICogRXZlbnQgZGVsaXZlcmVkIHRvIGBFbWl0UmVjb3JkZXIub25FbWl0YC5cbiAqXG4gKiBOYW1lICsgcGF5bG9hZCBhcmUgY29uc3VtZXItc3VwcGxpZWQgdmlhIGBzY29wZS4kZW1pdChuYW1lLCBwYXlsb2FkKWAuXG4gKiBFdmVyeXRoaW5nIGVsc2UgaXMgbGlicmFyeS1lbnJpY2hlZCBhdCBkaXNwYXRjaCB0aW1lIGZyb20gdGhlIGN1cnJlbnRcbiAqIHN0YWdlJ3MgZXhlY3V0aW9uIGNvbnRleHQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1pdEV2ZW50IHtcbiAgLyoqXG4gICAqIENvbnN1bWVyLXN1cHBsaWVkIGV2ZW50IG5hbWUuIENvbnZlbnRpb246IGhpZXJhcmNoaWNhbCBkb3R0ZWQgbmFtZXNwYWNlXG4gICAqIChlLmcuIGAnYWdlbnRmb290cHJpbnQubGxtLnRva2VucydgLCBgJ215YXBwLmJpbGxpbmcuc3BlbmQnYCkuIEtlZXBzXG4gICAqIHZvY2FidWxhcmllcyBjb2xsaXNpb24tZnJlZSBhY3Jvc3MgbGlicmFyaWVzL2FwcHMgd2l0aG91dCByZXF1aXJpbmcgYVxuICAgKiBjZW50cmFsIHJlZ2lzdHJ5LlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb25zdW1lci1zdXBwbGllZCBwYXlsb2FkLiBTaGFwZSBpcyB1cCB0byB0aGUgY29uc3VtZXIgYW5kIHRoZWlyXG4gICAqIGNvbnZlbnRpb247IGxpYnJhcnkgdHJlYXRzIGl0IGFzIG9wYXF1ZSBhbmQgcGFzc2VzIHRocm91Z2ggdW5jaGFuZ2VkXG4gICAqIChtb2R1bG8gcmVkYWN0aW9uIOKAlCBzZWUgYFJlZGFjdGlvblBvbGljeS5lbWl0UGF0dGVybnNgKS5cbiAgICpcbiAgICogV2hlbiByZWRhY3RlZCwgcmVwbGFjZWQgd2l0aCB0aGUgc3RyaW5nIGAnW1JFREFDVEVEXSdgLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF5bG9hZDogdW5rbm93bjtcblxuICAvKiogTmFtZSBvZiB0aGUgc3RhZ2UgdGhhdCBlbWl0dGVkIHRoaXMgZXZlbnQuICovXG4gIHJlYWRvbmx5IHN0YWdlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVbmlxdWUgcGVyLWV4ZWN1dGlvbi1zdGVwIGlkZW50aWZpZXIg4oCUIHRoZSBzYW1lIHZhbHVlIHJlY29yZGVyIGV2ZW50c1xuICAgKiBhbmQgY29tbWl0LWxvZyBlbnRyaWVzIGNhcnJ5LiBTZWUgYHJ1bnRpbWVTdGFnZUlkLnRzYCBmb3IgZm9ybWF0LlxuICAgKi9cbiAgcmVhZG9ubHkgcnVudGltZVN0YWdlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogU3ViZmxvdyBwYXRoIGZyb20gdGhlIG91dGVybW9zdCBwYXJlbnQgZG93biB0byB0aGUgc3ViZmxvdyB0aGF0IGVtaXR0ZWRcbiAgICogdGhpcyBldmVudC4gRW1wdHkgYXJyYXkgd2hlbiB0aGUgZW1pdCBjYW1lIGZyb20gdGhlIHJvb3QgZmxvd2NoYXJ0LlxuICAgKiBNYXRjaGVzIHRoZSBjb252ZW50aW9uIHVzZWQgYnkgYEZsb3dQYXVzZUV2ZW50LnN1YmZsb3dQYXRoYCxcbiAgICogYEZsb3djaGFydENoZWNrcG9pbnQuc3ViZmxvd1BhdGhgLCBldGMuXG4gICAqL1xuICByZWFkb25seSBzdWJmbG93UGF0aDogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgLyoqIFBpcGVsaW5lL3J1biBpZGVudGlmaWVyIChtYXRjaGVzIGBSZWNvcmRlckNvbnRleHQucGlwZWxpbmVJZGApLiAqL1xuICByZWFkb25seSBwaXBlbGluZUlkOiBzdHJpbmc7XG5cbiAgLyoqIEVtaXNzaW9uIHRpbWVzdGFtcCBpbiBtaWxsaXNlY29uZHMgc2luY2UgZXBvY2ggKGBEYXRlLm5vdygpYCkuICovXG4gIHJlYWRvbmx5IHRpbWVzdGFtcDogbnVtYmVyO1xufVxuXG4vKipcbiAqIFBsdWdnYWJsZSBvYnNlcnZlciBmb3IgY29uc3VtZXItZW1pdHRlZCBzdHJ1Y3R1cmVkIGV2ZW50cy5cbiAqXG4gKiBBbGwgbWV0aG9kcyBhcmUgb3B0aW9uYWw7IGltcGxlbWVudCBvbmx5IHdoYXQgeW91IGNhcmUgYWJvdXQuIFJlY29yZGVyc1xuICogYXJlIGludm9rZWQgc3luY2hyb25vdXNseSBpbiBhdHRhY2htZW50IG9yZGVyLiBJZiBhIHJlY29yZGVyIHRocm93cywgdGhlXG4gKiBlcnJvciBpcyBjYXVnaHQgYW5kIGlzb2xhdGVkIOKAlCBvdGhlciByZWNvcmRlcnMgY29udGludWUgdG8gcmVjZWl2ZSB0aGVcbiAqIGV2ZW50IGFuZCB0aGUgZW1pdHRpbmcgc3RhZ2UgaXMgdW5hZmZlY3RlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbWl0UmVjb3JkZXIge1xuICAvKipcbiAgICogU3RhYmxlIGlkZW50aWZpZXIgZm9yIGlkZW1wb3RlbnQgYXR0YWNoL2RldGFjaC4gUmUtYXR0YWNoaW5nIHdpdGggdGhlXG4gICAqIHNhbWUgaWQgcmVwbGFjZXMgdGhlIHByZXZpb3VzIHJlZ2lzdHJhdGlvbiBvbiB0aGUgZXhlY3V0b3IuXG4gICAqL1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIC8qKiBDYWxsZWQgZm9yIGV2ZXJ5IGBzY29wZS4kZW1pdChuYW1lLCBwYXlsb2FkKWAgY2FsbCBpbiBhbnkgc3RhZ2UuICovXG4gIG9uRW1pdD8oZXZlbnQ6IEVtaXRFdmVudCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsOiByZXNldCByZWNvcmRlci1pbnRlcm5hbCBzdGF0ZSBiZXR3ZWVuIHJ1bnMuIENhbGxlZCBieSB0aGVcbiAgICogZXhlY3V0b3IgYmVmb3JlIGVhY2ggYHJ1bigpYC5cbiAgICovXG4gIGNsZWFyPygpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbDogZXhwb3NlIGNvbGxlY3RlZCBkYXRhIGZvciBpbmNsdXNpb24gaW5cbiAgICogYGV4ZWN1dG9yLmdldFNuYXBzaG90KCkucmVjb3JkZXJzYC5cbiAgICovXG4gIHRvU25hcHNob3Q/KCk6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgcHJlZmVycmVkT3BlcmF0aW9uPzogUmVjb3JkZXJPcGVyYXRpb247XG4gICAgZGF0YTogdW5rbm93bjtcbiAgfTtcbn1cbiJdfQ==
63
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW1pdFJlY29yZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9yZWNvcmRlci9FbWl0UmVjb3JkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJERyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRW1pdFJlY29yZGVyIOKAlCB0aGUgdGhpcmQgb2JzZXJ2ZXIgY2hhbm5lbCwgYWxvbmdzaWRlIGBTY29wZVJlY29yZGVyYFxuICogKHNjb3BlIGRhdGEtZmxvdykgYW5kIGBGbG93UmVjb3JkZXJgIChjb250cm9sLWZsb3cpLlxuICpcbiAqICMjIFdoeSB0aGlzIGV4aXN0c1xuICpcbiAqIFRoZSBmaXJzdCB0d28gY2hhbm5lbHMgY2FwdHVyZSB3aGF0IHRoZSBMSUJSQVJZIGtub3dzIGFib3V0IOKAlCBzY29wZVxuICogcmVhZHMvd3JpdGVzIGZpcmVkIGJ5IGBzZXRWYWx1ZWAsIGFuZCBjb250cm9sLWZsb3cgZXZlbnRzIGZpcmVkIGJ5IHRoZVxuICogdHJhdmVyc2VyLiBCdXQgKip1c2VyLWVtaXR0ZWQgc3RydWN0dXJlZCBldmVudHMqKiDigJQgdGhpbmdzIGEgc3RhZ2VcbiAqIGZ1bmN0aW9uIHdhbnRzIHRvIHN1cmZhY2UgZm9yIG9ic2VydmFiaWxpdHkgKExMTSB0b2tlbnMsIGJpbGxpbmcgbWV0cmljcyxcbiAqIGF1dGggZGVjaXNpb25zLCBkb21haW4gbWlsZXN0b25lcykg4oCUIGhhdmUgbm93aGVyZSB0byBnbyB0b2RheS4gVGhleSBsYW5kXG4gKiBpbiB1bm9ic2VydmVkIGBEaWFnbm9zdGljQ29sbGVjdG9yYCBzaWRlIGJhZ3MgdGhhdCBubyByZWNvcmRlciB3YXRjaGVzLlxuICpcbiAqIFRoaXMgY2hhbm5lbCBjbG9zZXMgdGhhdCBnYXAuIENvbnN1bWVyIGNhbGxzIGBzY29wZS4kZW1pdChuYW1lLCBwYXlsb2FkKWBcbiAqIGZyb20gaW5zaWRlIGEgc3RhZ2U7IHRoZSBsaWJyYXJ5IGVucmljaGVzIHRoZSBldmVudCB3aXRoIHN0YWdlIGNvbnRleHRcbiAqIGFuZCBkaXNwYXRjaGVzIGl0IHN5bmNocm9ub3VzbHkgdG8gZXZlcnkgYXR0YWNoZWQgYEVtaXRSZWNvcmRlcmAuXG4gKlxuICogIyMgRGVzaWduIHByb3BlcnRpZXNcbiAqXG4gKiAtICoqUGFzcy10aHJvdWdoLCBub3QgYnVmZmVyZWQuKiogWmVybyBhbGxvY2F0aW9uIHdoZW4gbm8gcmVjb3JkZXIgaXNcbiAqICAgYXR0YWNoZWQuIEV2ZW50cyBkZWxpdmVyZWQgc3luY2hyb25vdXNseSwgaW4tb3JkZXIsIGF0IGNhbGwgdGltZS5cbiAqICAgU2FtZSBzZW1hbnRpY3MgYXMgYG9uUmVhZGAvYG9uV3JpdGVgIGFscmVhZHkgdXNlLlxuICogLSAqKkxpYnJhcnktYWdub3N0aWMgdm9jYWJ1bGFyeS4qKiBFdmVudCBuYW1lcyBhcmUgY29uc3VtZXItY2hvc2VuIHN0cmluZ3MuXG4gKiAgIENvbnZlbnRpb246IGhpZXJhcmNoaWNhbCBkb3R0ZWQgbmFtZXMsIGUuZy4gYCdhZ2VudGZvb3RwcmludC5sbG0udG9rZW5zJ2AsXG4gKiAgIGAnbXlhcHAuYmlsbGluZy5zcGVuZCdgLiBMaWJyYXJ5IGVuZm9yY2VzIG5vIHJlZ2lzdHJ5LlxuICogLSAqKkF1dG8tZW5yaWNoZWQgY29udGV4dC4qKiBFdmVyeSBldmVudCBjYXJyaWVzIGBzdGFnZU5hbWVgLFxuICogICBgcnVudGltZVN0YWdlSWRgLCBgc3ViZmxvd1BhdGhgLCBgcGlwZWxpbmVJZGAsIGB0aW1lc3RhbXBgLiBDb25zdW1lcnNcbiAqICAgbmV2ZXIgbmVlZCB0byB0aHJlYWQgZXhlY3V0aW9uIGNvbnRleHQgdGhyb3VnaCB0aGVpciBlbWl0IHBheWxvYWRzLlxuICogLSAqKlJlZGFjdGlvbi1hd2FyZS4qKiBgUmVkYWN0aW9uUG9saWN5LmVtaXRQYXR0ZXJuc2AgbWF0Y2hlcyBldmVudCBuYW1lc1xuICogICBiZWZvcmUgZGlzcGF0Y2gg4oCUIG1hdGNoZWQgZXZlbnRzIGhhdmUgdGhlaXIgcGF5bG9hZCByZXBsYWNlZCB3aXRoXG4gKiAgIGAnW1JFREFDVEVEXSdgIHNvIHNlY3JldHMgY2FuJ3QgbGVhayB2aWEgZW1pdC5cbiAqXG4gKiAjIyBSZWxhdGlvbnNoaXAgdG8gZXhpc3RpbmcgY2hhbm5lbHNcbiAqXG4gKiB8IENoYW5uZWwgICAgICAgICB8IEZpcmVzIHdoZW4gICAgICAgICAgICAgICAgICAgICAgICAgfCBCdWlsdC1pbiBjb25zdW1lcnMgICAgIHxcbiAqIHwtLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfFxuICogfCBgU2NvcGVSZWNvcmRlcmAgICAgICB8IHNjb3BlIHJlYWQvd3JpdGUvY29tbWl0ICAgICAgICAgICAgfCBEZWJ1Z1JlY29yZGVyLCBNZXRyaWNSZWNvcmRlciB8XG4gKiB8IGBGbG93UmVjb3JkZXJgICB8IHRyYXZlcnNhbCB0cmFuc2l0aW9ucyAgICAgICAgICAgICAgfCBOYXJyYXRpdmVGbG93UmVjb3JkZXIsIGV0Yy4gfFxuICogfCBgRW1pdFJlY29yZGVyYCAgfCBjb25zdW1lciBjYWxscyBgc2NvcGUuJGVtaXQoLi4uKWAgIHwgKG5vbmUgc2hpcHMgdG9kYXk7IFBoYXNlIDMuWCBhZGRzIE1lbW9yeUVtaXRSZWNvcmRlcikgfFxuICpcbiAqIGBDb21iaW5lZFJlY29yZGVyYCAoZnJvbSBgLi9Db21iaW5lZFJlY29yZGVyLnRzYCkgaW50ZXJzZWN0cyBhbGwgdGhyZWVcbiAqIHZpYSBgUGFydGlhbDwuLi4+YC4gQSBjb25zdW1lciBjYW4gd3JpdGUgT05FIG9iamVjdCBpbXBsZW1lbnRpbmcgYW55XG4gKiBjb21iaW5hdGlvbjsgYGV4ZWN1dG9yLmF0dGFjaENvbWJpbmVkUmVjb3JkZXIocilgIGR1Y2stdHlwZXMgYW5kIHJvdXRlc1xuICogdG8gdGhlIHJpZ2h0IGNoYW5uZWwocykuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHRva2VuTWV0ZXI6IEVtaXRSZWNvcmRlciA9IHtcbiAqICAgaWQ6ICd0b2tlbi1tZXRlcicsXG4gKiAgIG9uRW1pdChldmVudCkge1xuICogICAgIGlmIChldmVudC5uYW1lID09PSAnYWdlbnRmb290cHJpbnQubGxtLnRva2VucycpIHtcbiAqICAgICAgIHRoaXMudG90YWwgKz0gKGV2ZW50LnBheWxvYWQgYXMgeyBpbnB1dDogbnVtYmVyOyBvdXRwdXQ6IG51bWJlciB9KS5pbnB1dDtcbiAqICAgICB9XG4gKiAgIH0sXG4gKiAgIHRvdGFsOiAwLFxuICogfSBhcyBhbnk7XG4gKlxuICogZXhlY3V0b3IuYXR0YWNoRW1pdFJlY29yZGVyKHRva2VuTWV0ZXIpO1xuICogYGBgXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBSZWNvcmRlck9wZXJhdGlvbiB9IGZyb20gJy4vUmVjb3JkZXJPcGVyYXRpb24uanMnO1xuXG4vKipcbiAqIEV2ZW50IGRlbGl2ZXJlZCB0byBgRW1pdFJlY29yZGVyLm9uRW1pdGAuXG4gKlxuICogTmFtZSArIHBheWxvYWQgYXJlIGNvbnN1bWVyLXN1cHBsaWVkIHZpYSBgc2NvcGUuJGVtaXQobmFtZSwgcGF5bG9hZClgLlxuICogRXZlcnl0aGluZyBlbHNlIGlzIGxpYnJhcnktZW5yaWNoZWQgYXQgZGlzcGF0Y2ggdGltZSBmcm9tIHRoZSBjdXJyZW50XG4gKiBzdGFnZSdzIGV4ZWN1dGlvbiBjb250ZXh0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtaXRFdmVudCB7XG4gIC8qKlxuICAgKiBDb25zdW1lci1zdXBwbGllZCBldmVudCBuYW1lLiBDb252ZW50aW9uOiBoaWVyYXJjaGljYWwgZG90dGVkIG5hbWVzcGFjZVxuICAgKiAoZS5nLiBgJ2FnZW50Zm9vdHByaW50LmxsbS50b2tlbnMnYCwgYCdteWFwcC5iaWxsaW5nLnNwZW5kJ2ApLiBLZWVwc1xuICAgKiB2b2NhYnVsYXJpZXMgY29sbGlzaW9uLWZyZWUgYWNyb3NzIGxpYnJhcmllcy9hcHBzIHdpdGhvdXQgcmVxdWlyaW5nIGFcbiAgICogY2VudHJhbCByZWdpc3RyeS5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQ29uc3VtZXItc3VwcGxpZWQgcGF5bG9hZC4gU2hhcGUgaXMgdXAgdG8gdGhlIGNvbnN1bWVyIGFuZCB0aGVpclxuICAgKiBjb252ZW50aW9uOyBsaWJyYXJ5IHRyZWF0cyBpdCBhcyBvcGFxdWUgYW5kIHBhc3NlcyB0aHJvdWdoIHVuY2hhbmdlZFxuICAgKiAobW9kdWxvIHJlZGFjdGlvbiDigJQgc2VlIGBSZWRhY3Rpb25Qb2xpY3kuZW1pdFBhdHRlcm5zYCkuXG4gICAqXG4gICAqIFdoZW4gcmVkYWN0ZWQsIHJlcGxhY2VkIHdpdGggdGhlIHN0cmluZyBgJ1tSRURBQ1RFRF0nYC5cbiAgICovXG4gIHJlYWRvbmx5IHBheWxvYWQ6IHVua25vd247XG5cbiAgLyoqIE5hbWUgb2YgdGhlIHN0YWdlIHRoYXQgZW1pdHRlZCB0aGlzIGV2ZW50LiAqL1xuICByZWFkb25seSBzdGFnZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVW5pcXVlIHBlci1leGVjdXRpb24tc3RlcCBpZGVudGlmaWVyIOKAlCB0aGUgc2FtZSB2YWx1ZSByZWNvcmRlciBldmVudHNcbiAgICogYW5kIGNvbW1pdC1sb2cgZW50cmllcyBjYXJyeS4gU2VlIGBydW50aW1lU3RhZ2VJZC50c2AgZm9yIGZvcm1hdC5cbiAgICovXG4gIHJlYWRvbmx5IHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFN1YmZsb3cgcGF0aCBmcm9tIHRoZSBvdXRlcm1vc3QgcGFyZW50IGRvd24gdG8gdGhlIHN1YmZsb3cgdGhhdCBlbWl0dGVkXG4gICAqIHRoaXMgZXZlbnQuIEVtcHR5IGFycmF5IHdoZW4gdGhlIGVtaXQgY2FtZSBmcm9tIHRoZSByb290IGZsb3djaGFydC5cbiAgICogTWF0Y2hlcyB0aGUgY29udmVudGlvbiB1c2VkIGJ5IGBGbG93UGF1c2VFdmVudC5zdWJmbG93UGF0aGAsXG4gICAqIGBGbG93Y2hhcnRDaGVja3BvaW50LnN1YmZsb3dQYXRoYCwgZXRjLlxuICAgKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1BhdGg6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKiBQaXBlbGluZS9ydW4gaWRlbnRpZmllciAobWF0Y2hlcyBgUmVjb3JkZXJDb250ZXh0LnBpcGVsaW5lSWRgKS4gKi9cbiAgcmVhZG9ubHkgcGlwZWxpbmVJZDogc3RyaW5nO1xuXG4gIC8qKiBFbWlzc2lvbiB0aW1lc3RhbXAgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIGVwb2NoIChgRGF0ZS5ub3coKWApLiAqL1xuICByZWFkb25seSB0aW1lc3RhbXA6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQbHVnZ2FibGUgb2JzZXJ2ZXIgZm9yIGNvbnN1bWVyLWVtaXR0ZWQgc3RydWN0dXJlZCBldmVudHMuXG4gKlxuICogQWxsIG1ldGhvZHMgYXJlIG9wdGlvbmFsOyBpbXBsZW1lbnQgb25seSB3aGF0IHlvdSBjYXJlIGFib3V0LiBSZWNvcmRlcnNcbiAqIGFyZSBpbnZva2VkIHN5bmNocm9ub3VzbHkgaW4gYXR0YWNobWVudCBvcmRlci4gSWYgYSByZWNvcmRlciB0aHJvd3MsIHRoZVxuICogZXJyb3IgaXMgY2F1Z2h0IGFuZCBpc29sYXRlZCDigJQgb3RoZXIgcmVjb3JkZXJzIGNvbnRpbnVlIHRvIHJlY2VpdmUgdGhlXG4gKiBldmVudCBhbmQgdGhlIGVtaXR0aW5nIHN0YWdlIGlzIHVuYWZmZWN0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1pdFJlY29yZGVyIHtcbiAgLyoqXG4gICAqIFN0YWJsZSBpZGVudGlmaWVyIGZvciBpZGVtcG90ZW50IGF0dGFjaC9kZXRhY2guIFJlLWF0dGFjaGluZyB3aXRoIHRoZVxuICAgKiBzYW1lIGlkIHJlcGxhY2VzIHRoZSBwcmV2aW91cyByZWdpc3RyYXRpb24gb24gdGhlIGV4ZWN1dG9yLlxuICAgKi9cbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICAvKiogQ2FsbGVkIGZvciBldmVyeSBgc2NvcGUuJGVtaXQobmFtZSwgcGF5bG9hZClgIGNhbGwgaW4gYW55IHN0YWdlLiAqL1xuICBvbkVtaXQ/KGV2ZW50OiBFbWl0RXZlbnQpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbDogcmVzZXQgcmVjb3JkZXItaW50ZXJuYWwgc3RhdGUgYmV0d2VlbiBydW5zLiBDYWxsZWQgYnkgdGhlXG4gICAqIGV4ZWN1dG9yIGJlZm9yZSBlYWNoIGBydW4oKWAuXG4gICAqL1xuICBjbGVhcj8oKTogdm9pZDtcblxuICAvKipcbiAgICogT3B0aW9uYWw6IGV4cG9zZSBjb2xsZWN0ZWQgZGF0YSBmb3IgaW5jbHVzaW9uIGluXG4gICAqIGBleGVjdXRvci5nZXRTbmFwc2hvdCgpLnJlY29yZGVyc2AuXG4gICAqL1xuICB0b1NuYXBzaG90PygpOiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgIHByZWZlcnJlZE9wZXJhdGlvbj86IFJlY29yZGVyT3BlcmF0aW9uO1xuICAgIGRhdGE6IHVua25vd247XG4gIH07XG59XG4iXX0=
@@ -207,4 +207,4 @@ function buildSubflowEntry(event, phase) {
207
207
  isRoot: false,
208
208
  };
209
209
  }
210
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5PdXRSZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcmVjb3JkZXIvSW5PdXRSZWNvcmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2REc7OztBQUdILCtEQUF5RDtBQU16RCwwREFBMEQ7QUFDN0MsUUFBQSxlQUFlLEdBQUcsVUFBVSxDQUFDO0FBRTFDLG9FQUFvRTtBQUN2RCxRQUFBLHFCQUFxQixHQUFHLFlBQVksQ0FBQztBQW1EbEQsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBRWpCOztHQUVHO0FBQ0gsU0FBZ0IsYUFBYSxDQUFDLFVBQWdDLEVBQUU7SUFDOUQsT0FBTyxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNwQyxDQUFDO0FBRkQsc0NBRUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBYSxhQUFjLFNBQVEsc0NBQTRCO0lBQ3BELEVBQUUsQ0FBUztJQUVwQixZQUFZLFVBQWdDLEVBQUU7UUFDNUMsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLElBQUksU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFFRCx5RUFBeUU7SUFFekUsVUFBVSxDQUFDLEtBQW1CO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQW1CO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQXVCO1FBQ3BDLE1BQU0sS0FBSyxH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TSxLQUFLLEdBQUcsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDckMsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDO0lBQ2xFLE1BQU0sT0FBTyxHQUFHLEtBQUssS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7SUFFMUUsT0FBTztRQUNMLGNBQWM7UUFDZCxTQUFTO1FBQ1QsY0FBYztRQUNkLFdBQVcsRUFBRSxLQUFLLENBQUMsSUFBSTtRQUN2QixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7UUFDOUIsV0FBVztRQUNYLEtBQUs7UUFDTCxLQUFLO1FBQ0wsT0FBTztRQUNQLE1BQU0sRUFBRSxLQUFLO0tBQ2QsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEluT3V0UmVjb3JkZXIg4oCUIGNhcHR1cmVzIGV2ZXJ5IGNoYXJ0J3MgaW5wdXQvb3V0cHV0IGFzIGVudHJ5L2V4aXQgcGFpcnMuXG4gKlxuICogVGhlIGdhcCB0aGlzIGZpbGxzOlxuICogICBFdmVyeSBjaGFydCBpbiBmb290cHJpbnRqcyBoYXMgdHdvIG5hdHVyYWwgZGF0YSBib3VuZGFyaWVzOlxuICogICAgIC0gdGhlICoqaW5wdXQqKiB0aGF0IGZsb3dlZCBpbiAodG9wLWxldmVsOiBgcnVuKHtpbnB1dH0pYDtcbiAqICAgICAgIHN1YmZsb3c6IGBpbnB1dE1hcHBlcmAgcmVzdWx0KVxuICogICAgIC0gdGhlICoqb3V0cHV0KiogdGhhdCBmbG93ZWQgb3V0ICh0b3AtbGV2ZWw6IGNoYXJ0IHJldHVybiB2YWx1ZTtcbiAqICAgICAgIHN1YmZsb3c6IHNoYXJlZCBzdGF0ZSBhdCBleGl0IC8gYG91dHB1dE1hcHBlcmAgcmVzdWx0KVxuICpcbiAqICAgVG9nZXRoZXIgd2l0aCBgVG9wb2xvZ3lSZWNvcmRlcmAgKGNvbXBvc2l0aW9uIHNoYXBlKSB0aGlzIGlzIHRoZVxuICogICB1bml2ZXJzYWwgXCJzdGVwXCIgcHJpbWl0aXZlIHRoYXQgZG93bnN0cmVhbSBsYXllcnMgcHJvamVjdCDigJQgYSBMZW5zXG4gKiAgIFN0ZXBHcmFwaCwgYSBUcmFjZSB2aWV3LCBjdXN0b20gZGFzaGJvYXJkcy4gQWxsIGJpbmQgYnkgYHJ1bnRpbWVTdGFnZUlkYC5cbiAqXG4gKiAgIFRoZSByb290IGNoYXJ0IGlzIHRyZWF0ZWQgaWRlbnRpY2FsbHkgdG8gYW55IHN1YmZsb3c6IGFuIGBlbnRyeWBcbiAqICAgYm91bmRhcnkgb24gYG9uUnVuU3RhcnRgIGFuZCBhbiBgZXhpdGAgYm91bmRhcnkgb24gYG9uUnVuRW5kYCwgd2l0aFxuICogICBgc3ViZmxvd0lkOiAnX19yb290X18nYC4gU28gY29uc3VtZXJzIGJ1aWxkaW5nIFwiZXZlcnkgc3RlcCBoYXMgYW5cbiAqICAgaW4vb3V0IGFycm93XCIgdmlld3MgY2FuIGNsb3NlIHRoZSBjaGFpbiBhdCB0aGUgdG9wIGxldmVsIOKAlCBub1xuICogICBzcGVjaWFsLWNhc2UgcmVuZGVyaW5nIHJlcXVpcmVkLlxuICpcbiAqIFR3byBib3VuZGFyeSBwaGFzZXMgcGVyIGNoYXJ0IGV4ZWN1dGlvbjpcbiAqICAgMS4gYHBoYXNlOiAnZW50cnknYCDigJQgcGF5bG9hZCA9IHRoZSBpbnB1dCBjcm9zc2luZyB0aGUgYm91bmRhcnkgSU5cbiAqICAgMi4gYHBoYXNlOiAnZXhpdCdgICDigJQgcGF5bG9hZCA9IHRoZSBvdXRwdXQgY3Jvc3NpbmcgdGhlIGJvdW5kYXJ5IE9VVFxuICpcbiAqICAgTG9vcHMgcmUtZW50ZXJpbmcgdGhlIHNhbWUgc3ViZmxvdyBnZXQgZGlzdGluY3QgYHJ1bnRpbWVTdGFnZUlkYHNcbiAqICAgYXV0b21hdGljYWxseSAocGFyZW50IHN0YWdlJ3MgZXhlY3V0aW9uSW5kZXggaW5jcmVtZW50cyBwZXIgaXRlcmF0aW9uKS5cbiAqXG4gKiBQYXVzZSBzZW1hbnRpY3M6XG4gKiAgIFdoZW4gYSBzdGFnZSBwYXVzZXMgaW5zaWRlIGEgc3ViZmxvdywgdGhlIGVuZ2luZSByZS10aHJvd3MgdGhlIHBhdXNlXG4gKiAgIHNpZ25hbCB3aXRob3V0IGZpcmluZyBgb25TdWJmbG93RXhpdGAgKG9yIGBvblJ1bkVuZGApLiBUaGUgc3ViZmxvd1xuICogICBoYXMgYW4gYGVudHJ5YCB3aXRoIG5vIG1hdGNoaW5nIGBleGl0YCB1bnRpbCB0aGUgcnVuIHJlc3VtZXMgYW5kXG4gKiAgIGV4aXRzIGNsZWFubHkuIENvbnN1bWVycyBzaG91bGQgaGFuZGxlIGVudHJ5LXdpdGhvdXQtZXhpdCBncmFjZWZ1bGx5XG4gKiAgIChpdCBtZWFucyBcImluIHByb2dyZXNzXCIgb3IgXCJwYXVzZWRcIikuIFRoZSBgZ2V0Qm91bmRhcnkoKWAgaGVscGVyXG4gKiAgIHJldHVybnMgYHsgZW50cnksIGV4aXQ6IHVuZGVmaW5lZCB9YCBpbiB0aGF0IGNhc2UuXG4gKlxuICogUmVkYWN0aW9uOlxuICogICBQYXlsb2FkIHJlZGFjdGlvbiBpcyB0aGUgZW5naW5lJ3MgcmVzcG9uc2liaWxpdHkgKGBSZWRhY3Rpb25Qb2xpY3lgKS5cbiAqICAgQnkgdGhlIHRpbWUgcGF5bG9hZHMgcmVhY2ggdGhpcyByZWNvcmRlciB2aWEgYEZsb3dTdWJmbG93RXZlbnRgIG9yXG4gKiAgIGBGbG93UnVuRXZlbnRgLCByZWRhY3RhYmxlIHZhbHVlcyBhcmUgYWxyZWFkeSBzY3J1YmJlZC4gVGhlIHJlY29yZGVyXG4gKiAgIGRvZXMgbm90IChhbmQgc2hvdWxkIG5vdCkgcmUtcmVkYWN0LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBpbk91dFJlY29yZGVyIH0gZnJvbSAnZm9vdHByaW50anMvdHJhY2UnO1xuICpcbiAqIGNvbnN0IGluT3V0ID0gaW5PdXRSZWNvcmRlcigpO1xuICogZXhlY3V0b3IuYXR0YWNoQ29tYmluZWRSZWNvcmRlcihpbk91dCk7XG4gKiBhd2FpdCBleGVjdXRvci5ydW4oeyBpbnB1dCB9KTtcbiAqXG4gKiBpbk91dC5nZXRTdGVwcygpOyAgICAgICAgICAgICAgICAgICAgLy8gZW50cnkgYm91bmRhcmllcyDigJQgdGltZWxpbmUgcHJvamVjdGlvblxuICogaW5PdXQuZ2V0Qm91bmRhcnkocnVudGltZVN0YWdlSWQpOyAgIC8vIHsgZW50cnksIGV4aXQgfSBwYWlyIGZvciBvbmUgZXhlY3V0aW9uXG4gKiBpbk91dC5nZXRCb3VuZGFyaWVzKCk7ICAgICAgICAgICAgICAgLy8gZmxhdCBsaXN0IChlbnRyeStleGl0IGludGVybGVhdmVkKVxuICogaW5PdXQuZ2V0Um9vdEJvdW5kYXJ5KCk7ICAgICAgICAgICAgIC8vIHsgZW50cnksIGV4aXQgfSBmb3IgdGhlIHRvcC1sZXZlbCBydW5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIEZpbHRlcmluZyBieSBzdWJmbG93IHBhdGhcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGFnZW50U3RlcHMgPSBpbk91dFxuICogICAuZ2V0U3RlcHMoKVxuICogICAuZmlsdGVyKChiKSA9PiBiLnN1YmZsb3dQYXRoWzFdID09PSAnc2YtYWdlbnQnKTsgIC8vIHBhdGhbMF0gaXMgdGhlIHJvb3RcbiAqIGBgYFxuICovXG5cbmltcG9ydCB0eXBlIHsgRmxvd1JlY29yZGVyLCBGbG93UnVuRXZlbnQsIEZsb3dTdWJmbG93RXZlbnQgfSBmcm9tICcuLi9lbmdpbmUvbmFycmF0aXZlL3R5cGVzLmpzJztcbmltcG9ydCB7IFNlcXVlbmNlUmVjb3JkZXIgfSBmcm9tICcuL1NlcXVlbmNlUmVjb3JkZXIuanMnO1xuXG4vLyDilIDilIAgVHlwZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIEluT3V0UGhhc2UgPSAnZW50cnknIHwgJ2V4aXQnO1xuXG4vKiogU3ludGhldGljIGlkIGZvciB0aGUgdG9wLWxldmVsIHJ1bidzIGJvdW5kYXJ5IHBhaXIuICovXG5leHBvcnQgY29uc3QgUk9PVF9TVUJGTE9XX0lEID0gJ19fcm9vdF9fJztcblxuLyoqIFN5bnRoZXRpYyBydW50aW1lU3RhZ2VJZCBmb3IgdGhlIHRvcC1sZXZlbCBydW4gYm91bmRhcnkgcGFpci4gKi9cbmV4cG9ydCBjb25zdCBST09UX1JVTlRJTUVfU1RBR0VfSUQgPSAnX19yb290X18jMCc7XG5cbi8qKlxuICogT25lIGhhbGYgb2YgYSBjaGFydCBleGVjdXRpb24gYm91bmRhcnkuIEVudHJ5L2V4aXQgcGFpcnMgc2hhcmUgYHJ1bnRpbWVTdGFnZUlkYC5cbiAqXG4gKiBOYW1pbmcgZm9sbG93cyB0aGUgZW5naW5lOiBgc3ViZmxvd0lkYCBpcyB0aGUgcGF0aC1wcmVmaXhlZCBpZGVudGlmaWVyIHRoZVxuICogZW5naW5lIGVtaXRzIChlLmcuIGAnc2Ytb3V0ZXIvc2YtaW5uZXInYCBmb3IgbmVzdGVkIHN1YmZsb3dzKS4gRm9yIHRoZVxuICogdG9wLWxldmVsIHJ1biwgaXQncyB0aGUgc3ludGhldGljIGAnX19yb290X18nYC4gYHN1YmZsb3dQYXRoYCBpcyB0aGVcbiAqIGRlY29tcG9zaXRpb24gaW50byBzZWdtZW50cyDigJQgcHJvdmlkZWQgYXMgYSBjb252ZW5pZW5jZSBiZWNhdXNlIGNvbnN1bWVyc1xuICogb2Z0ZW4gcXVlcnkgLyBncm91cCBieSB0aGUgcGF0aCB0cmVlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluT3V0RW50cnkge1xuICAvKiogcnVudGltZVN0YWdlSWQg4oCUIHNhbWUgdmFsdWUgZm9yIHRoZSBlbnRyeS9leGl0IHBhaXIgb2Ygb25lIGV4ZWN1dGlvbi5cbiAgICogIFRvcC1sZXZlbCBydW4gdXNlcyB0aGUgc3ludGhldGljIGBST09UX1JVTlRJTUVfU1RBR0VfSURgLiAqL1xuICByZWFkb25seSBydW50aW1lU3RhZ2VJZDogc3RyaW5nO1xuICAvKiogUGF0aC1wcmVmaXhlZCBzdWJmbG93IGlkZW50aWZpZXIgKG1hdGNoZXMgdGhlIGVuZ2luZSdzIGBGbG93U3ViZmxvd0V2ZW50LnN1YmZsb3dJZGApLlxuICAgKiAgVG9wLWxldmVsIOKGkiBgJ19fcm9vdF9fJ2AuIFN1YmZsb3cg4oaSIGAnc2Ytb3V0ZXInYCBvciBgJ3NmLW91dGVyL3NmLWlubmVyJ2AuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dJZDogc3RyaW5nO1xuICAvKiogTGFzdCBzZWdtZW50IG9mIGBzdWJmbG93SWRgIOKAlCBjb252ZW5pZW5jZSBmb3IgY29uc3VtZXJzIHRoYXQgZ3JvdXAgYnkgbGVhZiBuYW1lLlxuICAgKiAgVG9wLWxldmVsIOKGkiBgJ19fcm9vdF9fJ2AuICovXG4gIHJlYWRvbmx5IGxvY2FsU3ViZmxvd0lkOiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBkaXNwbGF5IG5hbWUgKGZyb20gdGhlIGJ1aWxkZXI7IGAnUnVuJ2AgZm9yIHRoZSB0b3AtbGV2ZWwgcnVuKS4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd05hbWU6IHN0cmluZztcbiAgLyoqIEJ1aWxkLXRpbWUgZGVzY3JpcHRpb24gZnJvbSB0aGUgc3ViZmxvdydzIHJvb3Qgc3RhZ2UuXG4gICAqICBDYXJyaWVzIHRheG9ub215IG1hcmtlcnMgKGUuZy4gYCdBZ2VudDogUmVBY3QgbG9vcCdgKS4gVW5kZWZpbmVkIGZvciByb290LiAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqIERlY29tcG9zaXRpb24gb2YgYHN1YmZsb3dJZGAgaW50byBzZWdtZW50cy4gVG9wLWxldmVsIOKGkiBgWydfX3Jvb3RfXyddYC5cbiAgICogIFN1YmZsb3dzIGxpdmUgVU5ERVIgdGhlIHJvb3Q6IGEgdG9wLWxldmVsIHN1YmZsb3cgaGFzIHBhdGggYFsnX19yb290X18nLCAnc2YteCddYC4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1BhdGg6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKiogRGVwdGggaW4gdGhlIHN1YmZsb3cgdHJlZS4gUm9vdCDihpIgMC4gRmlyc3QtbGV2ZWwgc3ViZmxvdyDihpIgMS4gKi9cbiAgcmVhZG9ubHkgZGVwdGg6IG51bWJlcjtcbiAgLyoqIFdoaWNoIHNpZGUgb2YgdGhlIGJvdW5kYXJ5IHRoaXMgZW50cnkgcmVwcmVzZW50cy4gKi9cbiAgcmVhZG9ubHkgcGhhc2U6IEluT3V0UGhhc2U7XG4gIC8qKiBEYXRhIGNyb3NzaW5nIHRoZSBib3VuZGFyeS5cbiAgICogIC0gYHBoYXNlOiAnZW50cnknYCDihpIgYGlucHV0TWFwcGVyYCByZXN1bHQgKHN1YmZsb3cpIG9yIGBydW4oe2lucHV0fSlgIChyb290KVxuICAgKiAgLSBgcGhhc2U6ICdleGl0J2AgIOKGkiBzdWJmbG93IHNoYXJlZCBzdGF0ZSBhdCBleGl0IChzdWJmbG93KSBvciBjaGFydCByZXR1cm4gdmFsdWUgKHJvb3QpXG4gICAqXG4gICAqICBVbmRlZmluZWQgd2hlbiBubyBtYXBwZXIgLyBubyBpbnB1dCB3YXMgcHJvdmlkZWQuICovXG4gIHJlYWRvbmx5IHBheWxvYWQ/OiB1bmtub3duO1xuICAvKiogVHJ1ZSB3aGVuIHRoaXMgZW50cnkgY2FtZSBmcm9tIHRoZSB0b3AtbGV2ZWwgcnVuIChgb25SdW5TdGFydGAgLyBgb25SdW5FbmRgKVxuICAgKiAgcmF0aGVyIHRoYW4gZnJvbSBhIHN1YmZsb3cgKGBvblN1YmZsb3dFbnRyeWAgLyBgb25TdWJmbG93RXhpdGApLlxuICAgKiAgTGVucyB1c2VzIHRoaXMgdG8gcmVuZGVyIHRoZSByb290IHBhaXIgYXMgYHVzZXIg4oaSIHJ1biDihpIgdXNlcmAgaW5zdGVhZCBvZlxuICAgKiAgdGhlIHJlZ3VsYXIgc3ViZmxvdyBzaGFwZS4gKi9cbiAgcmVhZG9ubHkgaXNSb290OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEluT3V0UmVjb3JkZXJPcHRpb25zIHtcbiAgLyoqIFJlY29yZGVyIGlkLiBEZWZhdWx0cyB0byBgaW5vdXQtTmAgKGF1dG8taW5jcmVtZW50ZWQpLiAqL1xuICBpZD86IHN0cmluZztcbn1cblxubGV0IF9jb3VudGVyID0gMDtcblxuLyoqXG4gKiBGYWN0b3J5IOKAlCBtYXRjaGVzIHRoZSBgdG9wb2xvZ3lSZWNvcmRlcigpYCAvIGBuYXJyYXRpdmUoKWAgc3R5bGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbk91dFJlY29yZGVyKG9wdGlvbnM6IEluT3V0UmVjb3JkZXJPcHRpb25zID0ge30pOiBJbk91dFJlY29yZGVyIHtcbiAgcmV0dXJuIG5ldyBJbk91dFJlY29yZGVyKG9wdGlvbnMpO1xufVxuXG4vKipcbiAqIFN0YXRlZnVsIGFjY3VtdWxhdG9yIHRoYXQgd2F0Y2hlcyBgRmxvd1JlY29yZGVyYCBjaGFydC1ib3VuZGFyeSBldmVudHNcbiAqIChydW4gc3RhcnQvZW5kICsgc3ViZmxvdyBlbnRyeS9leGl0KSBhbmQgZW1pdHMgYEluT3V0RW50cnlgIHJlY29yZHMgdG9cbiAqIGl0cyB1bmRlcmx5aW5nIGBTZXF1ZW5jZVJlY29yZGVyYCBzdG9yYWdlLlxuICpcbiAqIEF0dGFjaCB2aWEgYGV4ZWN1dG9yLmF0dGFjaENvbWJpbmVkUmVjb3JkZXIocmVjb3JkZXIpYCDigJQgZm9vdHByaW50anNcbiAqIGRldGVjdHMgdGhlIGBGbG93UmVjb3JkZXJgIG1ldGhvZCBzaGFwZSBhbmQgcm91dGVzIGV2ZW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIEluT3V0UmVjb3JkZXIgZXh0ZW5kcyBTZXF1ZW5jZVJlY29yZGVyPEluT3V0RW50cnk+IGltcGxlbWVudHMgRmxvd1JlY29yZGVyIHtcbiAgcmVhZG9ubHkgaWQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBJbk91dFJlY29yZGVyT3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmlkID0gb3B0aW9ucy5pZCA/PyBgaW5vdXQtJHsrK19jb3VudGVyfWA7XG4gIH1cblxuICAvLyDilIDilIAgRmxvd1JlY29yZGVyIGhvb2tzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIG9uUnVuU3RhcnQoZXZlbnQ6IEZsb3dSdW5FdmVudCk6IHZvaWQge1xuICAgIHRoaXMuZW1pdChidWlsZFJvb3RFbnRyeSgnZW50cnknLCBldmVudC5wYXlsb2FkKSk7XG4gIH1cblxuICBvblJ1bkVuZChldmVudDogRmxvd1J1bkV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5lbWl0KGJ1aWxkUm9vdEVudHJ5KCdleGl0JywgZXZlbnQucGF5bG9hZCkpO1xuICB9XG5cbiAgb25TdWJmbG93RW50cnkoZXZlbnQ6IEZsb3dTdWJmbG93RXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBlbnRyeSA9IGJ1aWxkU3ViZmxvd0VudHJ5KGV2ZW50LCAnZW50cnknKTtcbiAgICBpZiAoZW50cnkpIHRoaXMuZW1pdChlbnRyeSk7XG4gIH1cblxuICBvblN1YmZsb3dFeGl0KGV2ZW50OiBGbG93U3ViZmxvd0V2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgZW50cnkgPSBidWlsZFN1YmZsb3dFbnRyeShldmVudCwgJ2V4aXQnKTtcbiAgICBpZiAoZW50cnkpIHRoaXMuZW1pdChlbnRyeSk7XG4gIH1cblxuICAvLyDilIDilIAgUXVlcnkgQVBJIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKiBBbGwgZW50cmllcyBpbiBleGVjdXRpb24gb3JkZXIgKGVudHJ5K2V4aXQgaW50ZXJsZWF2ZWQpLlxuICAgKiAgQWxpYXMgZm9yIGBnZXRFbnRyaWVzKClgIHdpdGggZG9tYWluLWNsZWFyZXIgbmFtaW5nLiAqL1xuICBnZXRCb3VuZGFyaWVzKCk6IEluT3V0RW50cnlbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0RW50cmllcygpO1xuICB9XG5cbiAgLyoqIEVudHJ5L2V4aXQgcGFpciBmb3Igb25lIGNoYXJ0IGV4ZWN1dGlvbi5cbiAgICogIFJldHVybnMgYHsgZW50cnksIGV4aXQgfWAg4oCUIGBleGl0YCBpcyBgdW5kZWZpbmVkYCBmb3IgaW4tcHJvZ3Jlc3MgLyBwYXVzZWRcbiAgICogIGNoYXJ0cyBvciBpZiBgcnVudGltZVN0YWdlSWRgIGlzIHVua25vd24uICovXG4gIGdldEJvdW5kYXJ5KHJ1bnRpbWVTdGFnZUlkOiBzdHJpbmcpOiB7IGVudHJ5PzogSW5PdXRFbnRyeTsgZXhpdD86IEluT3V0RW50cnkgfSB7XG4gICAgY29uc3QgZW50cmllcyA9IHRoaXMuZ2V0RW50cmllc0ZvclN0ZXAocnVudGltZVN0YWdlSWQpO1xuICAgIHJldHVybiB7XG4gICAgICBlbnRyeTogZW50cmllcy5maW5kKChlKSA9PiBlLnBoYXNlID09PSAnZW50cnknKSxcbiAgICAgIGV4aXQ6IGVudHJpZXMuZmluZCgoZSkgPT4gZS5waGFzZSA9PT0gJ2V4aXQnKSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEp1c3QgdGhlIGBlbnRyeWAtcGhhc2UgYm91bmRhcmllcyDigJQgdGhlIFwic3RlcCBsaXN0XCIgcHJvamVjdGlvbiBpblxuICAgKiAgZXhlY3V0aW9uIG9yZGVyLiBUaGlzIGlzIHRoZSBuYXR1cmFsIHRpbWVsaW5lIG9mIGNoYXJ0IGV4ZWN1dGlvbnNcbiAgICogIGZvciBzbGlkZXIgLyBzY3J1YmJpbmcgVUlzLiBUaGUgdG9wLWxldmVsIHJ1bidzIGVudHJ5IGlzIHRoZSBmaXJzdFxuICAgKiAgc3RlcCAoZGVwdGggMCkuICovXG4gIGdldFN0ZXBzKCk6IEluT3V0RW50cnlbXSB7XG4gICAgY29uc3Qgc3RlcHM6IEluT3V0RW50cnlbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgYiBvZiB0aGlzLmdldEVudHJpZXMoKSkge1xuICAgICAgaWYgKGIucGhhc2UgPT09ICdlbnRyeScpIHN0ZXBzLnB1c2goYik7XG4gICAgfVxuICAgIHJldHVybiBzdGVwcztcbiAgfVxuXG4gIC8qKiBUaGUgcm9vdCBydW4ncyBlbnRyeS9leGl0IHBhaXIsIGlmIHRoZSBydW4gaGFzIHN0YXJ0ZWQuXG4gICAqICBDb252ZW5pZW5jZSBmb3IgY29uc3VtZXJzIHRoYXQgd2FudCB0byBicmFja2V0IHRoZSB0aW1lbGluZSBieSB0aGVcbiAgICogIG91dGVybW9zdCBpbi9vdXQuICovXG4gIGdldFJvb3RCb3VuZGFyeSgpOiB7IGVudHJ5PzogSW5PdXRFbnRyeTsgZXhpdD86IEluT3V0RW50cnkgfSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Qm91bmRhcnkoUk9PVF9SVU5USU1FX1NUQUdFX0lEKTtcbiAgfVxuXG4gIC8qKiBTbmFwc2hvdCBidW5kbGUgZm9yIGluY2x1c2lvbiBpbiBgZXhlY3V0b3IuZ2V0U25hcHNob3QoKWAuICovXG4gIHRvU25hcHNob3QoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6ICdJbk91dCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ0NoYXJ0IGluL291dCBzdHJlYW0g4oCUIGVudHJ5L2V4aXQgcGFpcnMgYXQgZXZlcnkgY2hhcnQgYm91bmRhcnkgKHJvb3QgKyBzdWJmbG93cyknLFxuICAgICAgcHJlZmVycmVkT3BlcmF0aW9uOiAndHJhbnNsYXRlJyBhcyBjb25zdCxcbiAgICAgIGRhdGE6IHRoaXMuZ2V0Qm91bmRhcmllcygpLFxuICAgIH07XG4gIH1cbn1cblxuLy8g4pSA4pSAIEludGVybmFsIGhlbHBlcnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogQnVpbGQgdGhlIHN5bnRoZXRpYyByb290IGVudHJ5L2V4aXQuIERlcHRoIGlzIGAwYCBhbmQgdGhlIHBhdGggaXNcbiAqIGBbUk9PVF9TVUJGTE9XX0lEXWAgc28gY29uc3VtZXJzIGdyb3VwaW5nIGJ5IHBhdGggc2VlIHRoZSByb290IGFzIGFcbiAqIHJlZ3VsYXIgdG9wLWxldmVsIGNvbnRhaW5lci5cbiAqL1xuZnVuY3Rpb24gYnVpbGRSb290RW50cnkocGhhc2U6IEluT3V0UGhhc2UsIHBheWxvYWQ6IHVua25vd24pOiBJbk91dEVudHJ5IHtcbiAgcmV0dXJuIHtcbiAgICBydW50aW1lU3RhZ2VJZDogUk9PVF9SVU5USU1FX1NUQUdFX0lELFxuICAgIHN1YmZsb3dJZDogUk9PVF9TVUJGTE9XX0lELFxuICAgIGxvY2FsU3ViZmxvd0lkOiBST09UX1NVQkZMT1dfSUQsXG4gICAgc3ViZmxvd05hbWU6ICdSdW4nLFxuICAgIHN1YmZsb3dQYXRoOiBbUk9PVF9TVUJGTE9XX0lEXSxcbiAgICBkZXB0aDogMCxcbiAgICBwaGFzZSxcbiAgICBwYXlsb2FkLFxuICAgIGlzUm9vdDogdHJ1ZSxcbiAgfTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIHN1YmZsb3cgYEluT3V0RW50cnlgIGZyb20gYSBgRmxvd1N1YmZsb3dFdmVudGAuXG4gKlxuICogUmV0dXJucyBgdW5kZWZpbmVkYCB3aGVuIHRoZSBldmVudCBsYWNrcyBhIGBzdWJmbG93SWRgIChhbm9ueW1vdXMgL1xuICogbWFsZm9ybWVkIHN1YmZsb3cgZXZlbnRzIOKAlCBzYW1lIGRlZmVuc2l2ZSBwb2xpY3kgYXMgYFRvcG9sb2d5UmVjb3JkZXJgKS5cbiAqXG4gKiBQYXRoIGRlcml2YXRpb246IHRoZSBlbmdpbmUgZW1pdHMgYHN1YmZsb3dJZGAgYWxyZWFkeSBwcmVmaXhlZCB3aXRoIHRoZVxuICogZnVsbCBwYXRoIG9mIHBhcmVudCBzdWJmbG93cyAoZS5nLiBgJ3NmLW91dGVyL3NmLWlubmVyJ2ApLiBXZSBkZWNvbXBvc2VcbiAqIHRoYXQgaW50byBzZWdtZW50cyB0byBwb3B1bGF0ZSBgc3ViZmxvd1BhdGhgIGFuZCBjb21wdXRlIGBkZXB0aGAuXG4gKlxuICogU3ViZmxvd3MgbmVzdCBVTkRFUiB0aGUgc3ludGhldGljIHJvb3QgaW4gYHN1YmZsb3dQYXRoYCBzbyB0aGUgdHJlZSBpc1xuICogY29tcGxldGU6IGEgdG9wLWxldmVsIHN1YmZsb3cgaGFzIHBhdGggYFsnX19yb290X18nLCAnc2YteCddYCBhbmQgZGVwdGggMS5cbiAqL1xuZnVuY3Rpb24gYnVpbGRTdWJmbG93RW50cnkoZXZlbnQ6IEZsb3dTdWJmbG93RXZlbnQsIHBoYXNlOiBJbk91dFBoYXNlKTogSW5PdXRFbnRyeSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHN1YmZsb3dJZCA9IGV2ZW50LnN1YmZsb3dJZDtcbiAgaWYgKCFzdWJmbG93SWQpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgcnVudGltZVN0YWdlSWQgPSBldmVudC50cmF2ZXJzYWxDb250ZXh0Py5ydW50aW1lU3RhZ2VJZCA/PyAnJztcbiAgY29uc3Qgc2VnbWVudHMgPSBzdWJmbG93SWQuc3BsaXQoJy8nKS5maWx0ZXIoKHMpID0+IHMubGVuZ3RoID4gMCk7XG4gIGNvbnN0IHN1YmZsb3dQYXRoOiByZWFkb25seSBzdHJpbmdbXSA9IFtST09UX1NVQkZMT1dfSUQsIC4uLnNlZ21lbnRzXTtcbiAgY29uc3QgZGVwdGggPSBzdWJmbG93UGF0aC5sZW5ndGggLSAxO1xuICBjb25zdCBsb2NhbFN1YmZsb3dJZCA9IHNlZ21lbnRzW3NlZ21lbnRzLmxlbmd0aCAtIDFdID8/IHN1YmZsb3dJZDtcbiAgY29uc3QgcGF5bG9hZCA9IHBoYXNlID09PSAnZW50cnknID8gZXZlbnQubWFwcGVkSW5wdXQgOiBldmVudC5vdXRwdXRTdGF0ZTtcblxuICByZXR1cm4ge1xuICAgIHJ1bnRpbWVTdGFnZUlkLFxuICAgIHN1YmZsb3dJZCxcbiAgICBsb2NhbFN1YmZsb3dJZCxcbiAgICBzdWJmbG93TmFtZTogZXZlbnQubmFtZSxcbiAgICBkZXNjcmlwdGlvbjogZXZlbnQuZGVzY3JpcHRpb24sXG4gICAgc3ViZmxvd1BhdGgsXG4gICAgZGVwdGgsXG4gICAgcGhhc2UsXG4gICAgcGF5bG9hZCxcbiAgICBpc1Jvb3Q6IGZhbHNlLFxuICB9O1xufVxuIl19
210
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW5PdXRSZWNvcmRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcmVjb3JkZXIvSW5PdXRSZWNvcmRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E2REc7OztBQUdILCtEQUF5RDtBQU16RCwwREFBMEQ7QUFDN0MsUUFBQSxlQUFlLEdBQUcsVUFBVSxDQUFDO0FBRTFDLG9FQUFvRTtBQUN2RCxRQUFBLHFCQUFxQixHQUFHLFlBQVksQ0FBQztBQW1EbEQsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBRWpCOztHQUVHO0FBQ0gsU0FBZ0IsYUFBYSxDQUFDLFVBQWdDLEVBQUU7SUFDOUQsT0FBTyxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNwQyxDQUFDO0FBRkQsc0NBRUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBYSxhQUFjLFNBQVEsc0NBQTRCO0lBQ3BELEVBQUUsQ0FBUztJQUVwQixZQUFZLFVBQWdDLEVBQUU7UUFDNUMsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLElBQUksU0FBUyxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFFRCx5RUFBeUU7SUFFekUsVUFBVSxDQUFDLEtBQW1CO1FBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQW1CO1FBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQXVCO1FBQ3BDLE1BQU0sS0FBSyxH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TSxLQUFLLEdBQUcsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDckMsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDO0lBQ2xFLE1BQU0sT0FBTyxHQUFHLEtBQUssS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUM7SUFFMUUsT0FBTztRQUNMLGNBQWM7UUFDZCxTQUFTO1FBQ1QsY0FBYztRQUNkLFdBQVcsRUFBRSxLQUFLLENBQUMsSUFBSTtRQUN2QixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7UUFDOUIsV0FBVztRQUNYLEtBQUs7UUFDTCxLQUFLO1FBQ0wsT0FBTztRQUNQLE1BQU0sRUFBRSxLQUFLO0tBQ2QsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEluT3V0UmVjb3JkZXIg4oCUIGNhcHR1cmVzIGV2ZXJ5IGNoYXJ0J3MgaW5wdXQvb3V0cHV0IGFzIGVudHJ5L2V4aXQgcGFpcnMuXG4gKlxuICogVGhlIGdhcCB0aGlzIGZpbGxzOlxuICogICBFdmVyeSBjaGFydCBpbiBmb290cHJpbnRqcyBoYXMgdHdvIG5hdHVyYWwgZGF0YSBib3VuZGFyaWVzOlxuICogICAgIC0gdGhlICoqaW5wdXQqKiB0aGF0IGZsb3dlZCBpbiAodG9wLWxldmVsOiBgcnVuKHtpbnB1dH0pYDtcbiAqICAgICAgIHN1YmZsb3c6IGBpbnB1dE1hcHBlcmAgcmVzdWx0KVxuICogICAgIC0gdGhlICoqb3V0cHV0KiogdGhhdCBmbG93ZWQgb3V0ICh0b3AtbGV2ZWw6IGNoYXJ0IHJldHVybiB2YWx1ZTtcbiAqICAgICAgIHN1YmZsb3c6IHNoYXJlZCBzdGF0ZSBhdCBleGl0IC8gYG91dHB1dE1hcHBlcmAgcmVzdWx0KVxuICpcbiAqICAgVG9nZXRoZXIgd2l0aCBgVG9wb2xvZ3lSZWNvcmRlcmAgKGNvbXBvc2l0aW9uIHNoYXBlKSB0aGlzIGlzIHRoZVxuICogICB1bml2ZXJzYWwgXCJzdGVwXCIgcHJpbWl0aXZlIHRoYXQgZG93bnN0cmVhbSBsYXllcnMgcHJvamVjdCDigJQgYSBMZW5zXG4gKiAgIFN0ZXBHcmFwaCwgYSBUcmFjZSB2aWV3LCBjdXN0b20gZGFzaGJvYXJkcy4gQWxsIGJpbmQgYnkgYHJ1bnRpbWVTdGFnZUlkYC5cbiAqXG4gKiAgIFRoZSByb290IGNoYXJ0IGlzIHRyZWF0ZWQgaWRlbnRpY2FsbHkgdG8gYW55IHN1YmZsb3c6IGFuIGBlbnRyeWBcbiAqICAgYm91bmRhcnkgb24gYG9uUnVuU3RhcnRgIGFuZCBhbiBgZXhpdGAgYm91bmRhcnkgb24gYG9uUnVuRW5kYCwgd2l0aFxuICogICBgc3ViZmxvd0lkOiAnX19yb290X18nYC4gU28gY29uc3VtZXJzIGJ1aWxkaW5nIFwiZXZlcnkgc3RlcCBoYXMgYW5cbiAqICAgaW4vb3V0IGFycm93XCIgdmlld3MgY2FuIGNsb3NlIHRoZSBjaGFpbiBhdCB0aGUgdG9wIGxldmVsIOKAlCBub1xuICogICBzcGVjaWFsLWNhc2UgcmVuZGVyaW5nIHJlcXVpcmVkLlxuICpcbiAqIFR3byBib3VuZGFyeSBwaGFzZXMgcGVyIGNoYXJ0IGV4ZWN1dGlvbjpcbiAqICAgMS4gYHBoYXNlOiAnZW50cnknYCDigJQgcGF5bG9hZCA9IHRoZSBpbnB1dCBjcm9zc2luZyB0aGUgYm91bmRhcnkgSU5cbiAqICAgMi4gYHBoYXNlOiAnZXhpdCdgICDigJQgcGF5bG9hZCA9IHRoZSBvdXRwdXQgY3Jvc3NpbmcgdGhlIGJvdW5kYXJ5IE9VVFxuICpcbiAqICAgTG9vcHMgcmUtZW50ZXJpbmcgdGhlIHNhbWUgc3ViZmxvdyBnZXQgZGlzdGluY3QgYHJ1bnRpbWVTdGFnZUlkYHNcbiAqICAgYXV0b21hdGljYWxseSAocGFyZW50IHN0YWdlJ3MgZXhlY3V0aW9uSW5kZXggaW5jcmVtZW50cyBwZXIgaXRlcmF0aW9uKS5cbiAqXG4gKiBQYXVzZSBzZW1hbnRpY3M6XG4gKiAgIFdoZW4gYSBzdGFnZSBwYXVzZXMgaW5zaWRlIGEgc3ViZmxvdywgdGhlIGVuZ2luZSByZS10aHJvd3MgdGhlIHBhdXNlXG4gKiAgIHNpZ25hbCB3aXRob3V0IGZpcmluZyBgb25TdWJmbG93RXhpdGAgKG9yIGBvblJ1bkVuZGApLiBUaGUgc3ViZmxvd1xuICogICBoYXMgYW4gYGVudHJ5YCB3aXRoIG5vIG1hdGNoaW5nIGBleGl0YCB1bnRpbCB0aGUgcnVuIHJlc3VtZXMgYW5kXG4gKiAgIGV4aXRzIGNsZWFubHkuIENvbnN1bWVycyBzaG91bGQgaGFuZGxlIGVudHJ5LXdpdGhvdXQtZXhpdCBncmFjZWZ1bGx5XG4gKiAgIChpdCBtZWFucyBcImluIHByb2dyZXNzXCIgb3IgXCJwYXVzZWRcIikuIFRoZSBgZ2V0Qm91bmRhcnkoKWAgaGVscGVyXG4gKiAgIHJldHVybnMgYHsgZW50cnksIGV4aXQ6IHVuZGVmaW5lZCB9YCBpbiB0aGF0IGNhc2UuXG4gKlxuICogUmVkYWN0aW9uOlxuICogICBQYXlsb2FkIHJlZGFjdGlvbiBpcyB0aGUgZW5naW5lJ3MgcmVzcG9uc2liaWxpdHkgKGBSZWRhY3Rpb25Qb2xpY3lgKS5cbiAqICAgQnkgdGhlIHRpbWUgcGF5bG9hZHMgcmVhY2ggdGhpcyByZWNvcmRlciB2aWEgYEZsb3dTdWJmbG93RXZlbnRgIG9yXG4gKiAgIGBGbG93UnVuRXZlbnRgLCByZWRhY3RhYmxlIHZhbHVlcyBhcmUgYWxyZWFkeSBzY3J1YmJlZC4gVGhlIHJlY29yZGVyXG4gKiAgIGRvZXMgbm90IChhbmQgc2hvdWxkIG5vdCkgcmUtcmVkYWN0LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyBpbk91dFJlY29yZGVyIH0gZnJvbSAnZm9vdHByaW50anMvdHJhY2UnO1xuICpcbiAqIGNvbnN0IGluT3V0ID0gaW5PdXRSZWNvcmRlcigpO1xuICogZXhlY3V0b3IuYXR0YWNoQ29tYmluZWRSZWNvcmRlcihpbk91dCk7XG4gKiBhd2FpdCBleGVjdXRvci5ydW4oeyBpbnB1dCB9KTtcbiAqXG4gKiBpbk91dC5nZXRTdGVwcygpOyAgICAgICAgICAgICAgICAgICAgLy8gZW50cnkgYm91bmRhcmllcyDigJQgdGltZWxpbmUgcHJvamVjdGlvblxuICogaW5PdXQuZ2V0Qm91bmRhcnkocnVudGltZVN0YWdlSWQpOyAgIC8vIHsgZW50cnksIGV4aXQgfSBwYWlyIGZvciBvbmUgZXhlY3V0aW9uXG4gKiBpbk91dC5nZXRCb3VuZGFyaWVzKCk7ICAgICAgICAgICAgICAgLy8gZmxhdCBsaXN0IChlbnRyeStleGl0IGludGVybGVhdmVkKVxuICogaW5PdXQuZ2V0Um9vdEJvdW5kYXJ5KCk7ICAgICAgICAgICAgIC8vIHsgZW50cnksIGV4aXQgfSBmb3IgdGhlIHRvcC1sZXZlbCBydW5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIEZpbHRlcmluZyBieSBzdWJmbG93IHBhdGhcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGFnZW50U3RlcHMgPSBpbk91dFxuICogICAuZ2V0U3RlcHMoKVxuICogICAuZmlsdGVyKChiKSA9PiBiLnN1YmZsb3dQYXRoWzFdID09PSAnc2YtYWdlbnQnKTsgIC8vIHBhdGhbMF0gaXMgdGhlIHJvb3RcbiAqIGBgYFxuICovXG5cbmltcG9ydCB0eXBlIHsgRmxvd1JlY29yZGVyLCBGbG93UnVuRXZlbnQsIEZsb3dTdWJmbG93RXZlbnQgfSBmcm9tICcuLi9lbmdpbmUvbmFycmF0aXZlL3R5cGVzLmpzJztcbmltcG9ydCB7IFNlcXVlbmNlUmVjb3JkZXIgfSBmcm9tICcuL1NlcXVlbmNlUmVjb3JkZXIuanMnO1xuXG4vLyDilIDilIAgVHlwZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbmV4cG9ydCB0eXBlIEluT3V0UGhhc2UgPSAnZW50cnknIHwgJ2V4aXQnO1xuXG4vKiogU3ludGhldGljIGlkIGZvciB0aGUgdG9wLWxldmVsIHJ1bidzIGJvdW5kYXJ5IHBhaXIuICovXG5leHBvcnQgY29uc3QgUk9PVF9TVUJGTE9XX0lEID0gJ19fcm9vdF9fJztcblxuLyoqIFN5bnRoZXRpYyBydW50aW1lU3RhZ2VJZCBmb3IgdGhlIHRvcC1sZXZlbCBydW4gYm91bmRhcnkgcGFpci4gKi9cbmV4cG9ydCBjb25zdCBST09UX1JVTlRJTUVfU1RBR0VfSUQgPSAnX19yb290X18jMCc7XG5cbi8qKlxuICogT25lIGhhbGYgb2YgYSBjaGFydCBleGVjdXRpb24gYm91bmRhcnkuIEVudHJ5L2V4aXQgcGFpcnMgc2hhcmUgYHJ1bnRpbWVTdGFnZUlkYC5cbiAqXG4gKiBOYW1pbmcgZm9sbG93cyB0aGUgZW5naW5lOiBgc3ViZmxvd0lkYCBpcyB0aGUgcGF0aC1wcmVmaXhlZCBpZGVudGlmaWVyIHRoZVxuICogZW5naW5lIGVtaXRzIChlLmcuIGAnc2Ytb3V0ZXIvc2YtaW5uZXInYCBmb3IgbmVzdGVkIHN1YmZsb3dzKS4gRm9yIHRoZVxuICogdG9wLWxldmVsIHJ1biwgaXQncyB0aGUgc3ludGhldGljIGAnX19yb290X18nYC4gYHN1YmZsb3dQYXRoYCBpcyB0aGVcbiAqIGRlY29tcG9zaXRpb24gaW50byBzZWdtZW50cyDigJQgcHJvdmlkZWQgYXMgYSBjb252ZW5pZW5jZSBiZWNhdXNlIGNvbnN1bWVyc1xuICogb2Z0ZW4gcXVlcnkgLyBncm91cCBieSB0aGUgcGF0aCB0cmVlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluT3V0RW50cnkge1xuICAvKiogcnVudGltZVN0YWdlSWQg4oCUIHNhbWUgdmFsdWUgZm9yIHRoZSBlbnRyeS9leGl0IHBhaXIgb2Ygb25lIGV4ZWN1dGlvbi5cbiAgICogIFRvcC1sZXZlbCBydW4gdXNlcyB0aGUgc3ludGhldGljIGBST09UX1JVTlRJTUVfU1RBR0VfSURgLiAqL1xuICByZWFkb25seSBydW50aW1lU3RhZ2VJZDogc3RyaW5nO1xuICAvKiogUGF0aC1wcmVmaXhlZCBzdWJmbG93IGlkZW50aWZpZXIgKG1hdGNoZXMgdGhlIGVuZ2luZSdzIGBGbG93U3ViZmxvd0V2ZW50LnN1YmZsb3dJZGApLlxuICAgKiAgVG9wLWxldmVsIOKGkiBgJ19fcm9vdF9fJ2AuIFN1YmZsb3cg4oaSIGAnc2Ytb3V0ZXInYCBvciBgJ3NmLW91dGVyL3NmLWlubmVyJ2AuICovXG4gIHJlYWRvbmx5IHN1YmZsb3dJZDogc3RyaW5nO1xuICAvKiogTGFzdCBzZWdtZW50IG9mIGBzdWJmbG93SWRgIOKAlCBjb252ZW5pZW5jZSBmb3IgY29uc3VtZXJzIHRoYXQgZ3JvdXAgYnkgbGVhZiBuYW1lLlxuICAgKiAgVG9wLWxldmVsIOKGkiBgJ19fcm9vdF9fJ2AuICovXG4gIHJlYWRvbmx5IGxvY2FsU3ViZmxvd0lkOiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBkaXNwbGF5IG5hbWUgKGZyb20gdGhlIGJ1aWxkZXI7IGAnUnVuJ2AgZm9yIHRoZSB0b3AtbGV2ZWwgcnVuKS4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd05hbWU6IHN0cmluZztcbiAgLyoqIEJ1aWxkLXRpbWUgZGVzY3JpcHRpb24gZnJvbSB0aGUgc3ViZmxvdydzIHJvb3Qgc3RhZ2UuXG4gICAqICBDYXJyaWVzIHRheG9ub215IG1hcmtlcnMgKGUuZy4gYCdBZ2VudDogUmVBY3QgbG9vcCdgKS4gVW5kZWZpbmVkIGZvciByb290LiAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqIERlY29tcG9zaXRpb24gb2YgYHN1YmZsb3dJZGAgaW50byBzZWdtZW50cy4gVG9wLWxldmVsIOKGkiBgWydfX3Jvb3RfXyddYC5cbiAgICogIFN1YmZsb3dzIGxpdmUgVU5ERVIgdGhlIHJvb3Q6IGEgdG9wLWxldmVsIHN1YmZsb3cgaGFzIHBhdGggYFsnX19yb290X18nLCAnc2YteCddYC4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd1BhdGg6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKiogRGVwdGggaW4gdGhlIHN1YmZsb3cgdHJlZS4gUm9vdCDihpIgMC4gRmlyc3QtbGV2ZWwgc3ViZmxvdyDihpIgMS4gKi9cbiAgcmVhZG9ubHkgZGVwdGg6IG51bWJlcjtcbiAgLyoqIFdoaWNoIHNpZGUgb2YgdGhlIGJvdW5kYXJ5IHRoaXMgZW50cnkgcmVwcmVzZW50cy4gKi9cbiAgcmVhZG9ubHkgcGhhc2U6IEluT3V0UGhhc2U7XG4gIC8qKiBEYXRhIGNyb3NzaW5nIHRoZSBib3VuZGFyeS5cbiAgICogIC0gYHBoYXNlOiAnZW50cnknYCDihpIgYGlucHV0TWFwcGVyYCByZXN1bHQgKHN1YmZsb3cpIG9yIGBydW4oe2lucHV0fSlgIChyb290KVxuICAgKiAgLSBgcGhhc2U6ICdleGl0J2AgIOKGkiBzdWJmbG93IHNoYXJlZCBzdGF0ZSBhdCBleGl0IChzdWJmbG93KSBvciBjaGFydCByZXR1cm4gdmFsdWUgKHJvb3QpXG4gICAqXG4gICAqICBVbmRlZmluZWQgd2hlbiBubyBtYXBwZXIgLyBubyBpbnB1dCB3YXMgcHJvdmlkZWQuICovXG4gIHJlYWRvbmx5IHBheWxvYWQ/OiB1bmtub3duO1xuICAvKiogVHJ1ZSB3aGVuIHRoaXMgZW50cnkgY2FtZSBmcm9tIHRoZSB0b3AtbGV2ZWwgcnVuIChgb25SdW5TdGFydGAgLyBgb25SdW5FbmRgKVxuICAgKiAgcmF0aGVyIHRoYW4gZnJvbSBhIHN1YmZsb3cgKGBvblN1YmZsb3dFbnRyeWAgLyBgb25TdWJmbG93RXhpdGApLlxuICAgKiAgTGVucyB1c2VzIHRoaXMgdG8gcmVuZGVyIHRoZSByb290IHBhaXIgYXMgYHVzZXIg4oaSIHJ1biDihpIgdXNlcmAgaW5zdGVhZCBvZlxuICAgKiAgdGhlIHJlZ3VsYXIgc3ViZmxvdyBzaGFwZS4gKi9cbiAgcmVhZG9ubHkgaXNSb290OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEluT3V0UmVjb3JkZXJPcHRpb25zIHtcbiAgLyoqIFNjb3BlUmVjb3JkZXIgaWQuIERlZmF1bHRzIHRvIGBpbm91dC1OYCAoYXV0by1pbmNyZW1lbnRlZCkuICovXG4gIGlkPzogc3RyaW5nO1xufVxuXG5sZXQgX2NvdW50ZXIgPSAwO1xuXG4vKipcbiAqIEZhY3Rvcnkg4oCUIG1hdGNoZXMgdGhlIGB0b3BvbG9neVJlY29yZGVyKClgIC8gYG5hcnJhdGl2ZSgpYCBzdHlsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluT3V0UmVjb3JkZXIob3B0aW9uczogSW5PdXRSZWNvcmRlck9wdGlvbnMgPSB7fSk6IEluT3V0UmVjb3JkZXIge1xuICByZXR1cm4gbmV3IEluT3V0UmVjb3JkZXIob3B0aW9ucyk7XG59XG5cbi8qKlxuICogU3RhdGVmdWwgYWNjdW11bGF0b3IgdGhhdCB3YXRjaGVzIGBGbG93UmVjb3JkZXJgIGNoYXJ0LWJvdW5kYXJ5IGV2ZW50c1xuICogKHJ1biBzdGFydC9lbmQgKyBzdWJmbG93IGVudHJ5L2V4aXQpIGFuZCBlbWl0cyBgSW5PdXRFbnRyeWAgcmVjb3JkcyB0b1xuICogaXRzIHVuZGVybHlpbmcgYFNlcXVlbmNlUmVjb3JkZXJgIHN0b3JhZ2UuXG4gKlxuICogQXR0YWNoIHZpYSBgZXhlY3V0b3IuYXR0YWNoQ29tYmluZWRSZWNvcmRlcihyZWNvcmRlcilgIOKAlCBmb290cHJpbnRqc1xuICogZGV0ZWN0cyB0aGUgYEZsb3dSZWNvcmRlcmAgbWV0aG9kIHNoYXBlIGFuZCByb3V0ZXMgZXZlbnRzLlxuICovXG5leHBvcnQgY2xhc3MgSW5PdXRSZWNvcmRlciBleHRlbmRzIFNlcXVlbmNlUmVjb3JkZXI8SW5PdXRFbnRyeT4gaW1wbGVtZW50cyBGbG93UmVjb3JkZXIge1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IEluT3V0UmVjb3JkZXJPcHRpb25zID0ge30pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuaWQgPSBvcHRpb25zLmlkID8/IGBpbm91dC0keysrX2NvdW50ZXJ9YDtcbiAgfVxuXG4gIC8vIOKUgOKUgCBGbG93UmVjb3JkZXIgaG9va3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgb25SdW5TdGFydChldmVudDogRmxvd1J1bkV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5lbWl0KGJ1aWxkUm9vdEVudHJ5KCdlbnRyeScsIGV2ZW50LnBheWxvYWQpKTtcbiAgfVxuXG4gIG9uUnVuRW5kKGV2ZW50OiBGbG93UnVuRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmVtaXQoYnVpbGRSb290RW50cnkoJ2V4aXQnLCBldmVudC5wYXlsb2FkKSk7XG4gIH1cblxuICBvblN1YmZsb3dFbnRyeShldmVudDogRmxvd1N1YmZsb3dFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGVudHJ5ID0gYnVpbGRTdWJmbG93RW50cnkoZXZlbnQsICdlbnRyeScpO1xuICAgIGlmIChlbnRyeSkgdGhpcy5lbWl0KGVudHJ5KTtcbiAgfVxuXG4gIG9uU3ViZmxvd0V4aXQoZXZlbnQ6IEZsb3dTdWJmbG93RXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBlbnRyeSA9IGJ1aWxkU3ViZmxvd0VudHJ5KGV2ZW50LCAnZXhpdCcpO1xuICAgIGlmIChlbnRyeSkgdGhpcy5lbWl0KGVudHJ5KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBRdWVyeSBBUEkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIEFsbCBlbnRyaWVzIGluIGV4ZWN1dGlvbiBvcmRlciAoZW50cnkrZXhpdCBpbnRlcmxlYXZlZCkuXG4gICAqICBBbGlhcyBmb3IgYGdldEVudHJpZXMoKWAgd2l0aCBkb21haW4tY2xlYXJlciBuYW1pbmcuICovXG4gIGdldEJvdW5kYXJpZXMoKTogSW5PdXRFbnRyeVtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRFbnRyaWVzKCk7XG4gIH1cblxuICAvKiogRW50cnkvZXhpdCBwYWlyIGZvciBvbmUgY2hhcnQgZXhlY3V0aW9uLlxuICAgKiAgUmV0dXJucyBgeyBlbnRyeSwgZXhpdCB9YCDigJQgYGV4aXRgIGlzIGB1bmRlZmluZWRgIGZvciBpbi1wcm9ncmVzcyAvIHBhdXNlZFxuICAgKiAgY2hhcnRzIG9yIGlmIGBydW50aW1lU3RhZ2VJZGAgaXMgdW5rbm93bi4gKi9cbiAgZ2V0Qm91bmRhcnkocnVudGltZVN0YWdlSWQ6IHN0cmluZyk6IHsgZW50cnk/OiBJbk91dEVudHJ5OyBleGl0PzogSW5PdXRFbnRyeSB9IHtcbiAgICBjb25zdCBlbnRyaWVzID0gdGhpcy5nZXRFbnRyaWVzRm9yU3RlcChydW50aW1lU3RhZ2VJZCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVudHJ5OiBlbnRyaWVzLmZpbmQoKGUpID0+IGUucGhhc2UgPT09ICdlbnRyeScpLFxuICAgICAgZXhpdDogZW50cmllcy5maW5kKChlKSA9PiBlLnBoYXNlID09PSAnZXhpdCcpLFxuICAgIH07XG4gIH1cblxuICAvKiogSnVzdCB0aGUgYGVudHJ5YC1waGFzZSBib3VuZGFyaWVzIOKAlCB0aGUgXCJzdGVwIGxpc3RcIiBwcm9qZWN0aW9uIGluXG4gICAqICBleGVjdXRpb24gb3JkZXIuIFRoaXMgaXMgdGhlIG5hdHVyYWwgdGltZWxpbmUgb2YgY2hhcnQgZXhlY3V0aW9uc1xuICAgKiAgZm9yIHNsaWRlciAvIHNjcnViYmluZyBVSXMuIFRoZSB0b3AtbGV2ZWwgcnVuJ3MgZW50cnkgaXMgdGhlIGZpcnN0XG4gICAqICBzdGVwIChkZXB0aCAwKS4gKi9cbiAgZ2V0U3RlcHMoKTogSW5PdXRFbnRyeVtdIHtcbiAgICBjb25zdCBzdGVwczogSW5PdXRFbnRyeVtdID0gW107XG4gICAgZm9yIChjb25zdCBiIG9mIHRoaXMuZ2V0RW50cmllcygpKSB7XG4gICAgICBpZiAoYi5waGFzZSA9PT0gJ2VudHJ5Jykgc3RlcHMucHVzaChiKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0ZXBzO1xuICB9XG5cbiAgLyoqIFRoZSByb290IHJ1bidzIGVudHJ5L2V4aXQgcGFpciwgaWYgdGhlIHJ1biBoYXMgc3RhcnRlZC5cbiAgICogIENvbnZlbmllbmNlIGZvciBjb25zdW1lcnMgdGhhdCB3YW50IHRvIGJyYWNrZXQgdGhlIHRpbWVsaW5lIGJ5IHRoZVxuICAgKiAgb3V0ZXJtb3N0IGluL291dC4gKi9cbiAgZ2V0Um9vdEJvdW5kYXJ5KCk6IHsgZW50cnk/OiBJbk91dEVudHJ5OyBleGl0PzogSW5PdXRFbnRyeSB9IHtcbiAgICByZXR1cm4gdGhpcy5nZXRCb3VuZGFyeShST09UX1JVTlRJTUVfU1RBR0VfSUQpO1xuICB9XG5cbiAgLyoqIFNuYXBzaG90IGJ1bmRsZSBmb3IgaW5jbHVzaW9uIGluIGBleGVjdXRvci5nZXRTbmFwc2hvdCgpYC4gKi9cbiAgdG9TbmFwc2hvdCgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogJ0luT3V0JyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQ2hhcnQgaW4vb3V0IHN0cmVhbSDigJQgZW50cnkvZXhpdCBwYWlycyBhdCBldmVyeSBjaGFydCBib3VuZGFyeSAocm9vdCArIHN1YmZsb3dzKScsXG4gICAgICBwcmVmZXJyZWRPcGVyYXRpb246ICd0cmFuc2xhdGUnIGFzIGNvbnN0LFxuICAgICAgZGF0YTogdGhpcy5nZXRCb3VuZGFyaWVzKCksXG4gICAgfTtcbiAgfVxufVxuXG4vLyDilIDilIAgSW50ZXJuYWwgaGVscGVycyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBCdWlsZCB0aGUgc3ludGhldGljIHJvb3QgZW50cnkvZXhpdC4gRGVwdGggaXMgYDBgIGFuZCB0aGUgcGF0aCBpc1xuICogYFtST09UX1NVQkZMT1dfSURdYCBzbyBjb25zdW1lcnMgZ3JvdXBpbmcgYnkgcGF0aCBzZWUgdGhlIHJvb3QgYXMgYVxuICogcmVndWxhciB0b3AtbGV2ZWwgY29udGFpbmVyLlxuICovXG5mdW5jdGlvbiBidWlsZFJvb3RFbnRyeShwaGFzZTogSW5PdXRQaGFzZSwgcGF5bG9hZDogdW5rbm93bik6IEluT3V0RW50cnkge1xuICByZXR1cm4ge1xuICAgIHJ1bnRpbWVTdGFnZUlkOiBST09UX1JVTlRJTUVfU1RBR0VfSUQsXG4gICAgc3ViZmxvd0lkOiBST09UX1NVQkZMT1dfSUQsXG4gICAgbG9jYWxTdWJmbG93SWQ6IFJPT1RfU1VCRkxPV19JRCxcbiAgICBzdWJmbG93TmFtZTogJ1J1bicsXG4gICAgc3ViZmxvd1BhdGg6IFtST09UX1NVQkZMT1dfSURdLFxuICAgIGRlcHRoOiAwLFxuICAgIHBoYXNlLFxuICAgIHBheWxvYWQsXG4gICAgaXNSb290OiB0cnVlLFxuICB9O1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgc3ViZmxvdyBgSW5PdXRFbnRyeWAgZnJvbSBhIGBGbG93U3ViZmxvd0V2ZW50YC5cbiAqXG4gKiBSZXR1cm5zIGB1bmRlZmluZWRgIHdoZW4gdGhlIGV2ZW50IGxhY2tzIGEgYHN1YmZsb3dJZGAgKGFub255bW91cyAvXG4gKiBtYWxmb3JtZWQgc3ViZmxvdyBldmVudHMg4oCUIHNhbWUgZGVmZW5zaXZlIHBvbGljeSBhcyBgVG9wb2xvZ3lSZWNvcmRlcmApLlxuICpcbiAqIFBhdGggZGVyaXZhdGlvbjogdGhlIGVuZ2luZSBlbWl0cyBgc3ViZmxvd0lkYCBhbHJlYWR5IHByZWZpeGVkIHdpdGggdGhlXG4gKiBmdWxsIHBhdGggb2YgcGFyZW50IHN1YmZsb3dzIChlLmcuIGAnc2Ytb3V0ZXIvc2YtaW5uZXInYCkuIFdlIGRlY29tcG9zZVxuICogdGhhdCBpbnRvIHNlZ21lbnRzIHRvIHBvcHVsYXRlIGBzdWJmbG93UGF0aGAgYW5kIGNvbXB1dGUgYGRlcHRoYC5cbiAqXG4gKiBTdWJmbG93cyBuZXN0IFVOREVSIHRoZSBzeW50aGV0aWMgcm9vdCBpbiBgc3ViZmxvd1BhdGhgIHNvIHRoZSB0cmVlIGlzXG4gKiBjb21wbGV0ZTogYSB0b3AtbGV2ZWwgc3ViZmxvdyBoYXMgcGF0aCBgWydfX3Jvb3RfXycsICdzZi14J11gIGFuZCBkZXB0aCAxLlxuICovXG5mdW5jdGlvbiBidWlsZFN1YmZsb3dFbnRyeShldmVudDogRmxvd1N1YmZsb3dFdmVudCwgcGhhc2U6IEluT3V0UGhhc2UpOiBJbk91dEVudHJ5IHwgdW5kZWZpbmVkIHtcbiAgY29uc3Qgc3ViZmxvd0lkID0gZXZlbnQuc3ViZmxvd0lkO1xuICBpZiAoIXN1YmZsb3dJZCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICBjb25zdCBydW50aW1lU3RhZ2VJZCA9IGV2ZW50LnRyYXZlcnNhbENvbnRleHQ/LnJ1bnRpbWVTdGFnZUlkID8/ICcnO1xuICBjb25zdCBzZWdtZW50cyA9IHN1YmZsb3dJZC5zcGxpdCgnLycpLmZpbHRlcigocykgPT4gcy5sZW5ndGggPiAwKTtcbiAgY29uc3Qgc3ViZmxvd1BhdGg6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1JPT1RfU1VCRkxPV19JRCwgLi4uc2VnbWVudHNdO1xuICBjb25zdCBkZXB0aCA9IHN1YmZsb3dQYXRoLmxlbmd0aCAtIDE7XG4gIGNvbnN0IGxvY2FsU3ViZmxvd0lkID0gc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMV0gPz8gc3ViZmxvd0lkO1xuICBjb25zdCBwYXlsb2FkID0gcGhhc2UgPT09ICdlbnRyeScgPyBldmVudC5tYXBwZWRJbnB1dCA6IGV2ZW50Lm91dHB1dFN0YXRlO1xuXG4gIHJldHVybiB7XG4gICAgcnVudGltZVN0YWdlSWQsXG4gICAgc3ViZmxvd0lkLFxuICAgIGxvY2FsU3ViZmxvd0lkLFxuICAgIHN1YmZsb3dOYW1lOiBldmVudC5uYW1lLFxuICAgIGRlc2NyaXB0aW9uOiBldmVudC5kZXNjcmlwdGlvbixcbiAgICBzdWJmbG93UGF0aCxcbiAgICBkZXB0aCxcbiAgICBwaGFzZSxcbiAgICBwYXlsb2FkLFxuICAgIGlzUm9vdDogZmFsc2UsXG4gIH07XG59XG4iXX0=