footprintjs 9.6.0 → 9.7.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 (40) hide show
  1. package/CLAUDE.md +2 -1
  2. package/dist/esm/index.js +1 -1
  3. package/dist/esm/lib/engine/handlers/SubflowExecutor.js +10 -1
  4. package/dist/esm/lib/memory/SharedMemory.js +1 -1
  5. package/dist/esm/lib/memory/StageContext.js +40 -3
  6. package/dist/esm/lib/memory/TransactionBuffer.js +166 -9
  7. package/dist/esm/lib/memory/commitLogUtils.js +71 -1
  8. package/dist/esm/lib/memory/index.js +1 -1
  9. package/dist/esm/lib/memory/pathOps.js +28 -1
  10. package/dist/esm/lib/memory/types.js +1 -1
  11. package/dist/esm/lib/memory/utils.js +29 -3
  12. package/dist/esm/lib/runner/ExecutionRuntime.js +19 -1
  13. package/dist/esm/lib/runner/FlowChartExecutor.js +22 -1
  14. package/dist/esm/trace.js +6 -3
  15. package/dist/index.js +1 -1
  16. package/dist/lib/engine/handlers/SubflowExecutor.js +10 -1
  17. package/dist/lib/memory/SharedMemory.js +1 -1
  18. package/dist/lib/memory/StageContext.js +40 -3
  19. package/dist/lib/memory/TransactionBuffer.js +166 -9
  20. package/dist/lib/memory/commitLogUtils.js +73 -2
  21. package/dist/lib/memory/index.js +1 -1
  22. package/dist/lib/memory/pathOps.js +30 -2
  23. package/dist/lib/memory/types.js +1 -1
  24. package/dist/lib/memory/utils.js +28 -2
  25. package/dist/lib/runner/ExecutionRuntime.js +19 -1
  26. package/dist/lib/runner/FlowChartExecutor.js +22 -1
  27. package/dist/trace.js +7 -3
  28. package/dist/types/index.d.ts +17 -0
  29. package/dist/types/lib/memory/SharedMemory.d.ts +2 -5
  30. package/dist/types/lib/memory/StageContext.d.ts +23 -1
  31. package/dist/types/lib/memory/TransactionBuffer.d.ts +70 -10
  32. package/dist/types/lib/memory/commitLogUtils.d.ts +28 -0
  33. package/dist/types/lib/memory/index.d.ts +1 -1
  34. package/dist/types/lib/memory/pathOps.d.ts +10 -0
  35. package/dist/types/lib/memory/types.d.ts +56 -3
  36. package/dist/types/lib/memory/utils.d.ts +21 -6
  37. package/dist/types/lib/runner/ExecutionRuntime.d.ts +23 -1
  38. package/dist/types/lib/runner/FlowChartExecutor.d.ts +41 -3
  39. package/dist/types/trace.d.ts +1 -1
  40. package/package.json +1 -1
@@ -26,9 +26,12 @@ export class TransactionBuffer {
26
26
  updatePatch = {};
27
27
  opTrace = [];
28
28
  redactedPaths = new Set();
29
- constructor(base) {
29
+ /** Commit-value encoding policy (#13c-B). `'full'` = historical bytes. */
30
+ commitValues;
31
+ constructor(base, commitValues = 'full') {
30
32
  this.baseSnapshot = structuredClone(base);
31
33
  this.workingCopy = structuredClone(base);
34
+ this.commitValues = commitValues;
32
35
  }
33
36
  /** Hard overwrite at the specified path. */
34
37
  set(path, value, shouldRedact = false) {
@@ -39,6 +42,25 @@ export class TransactionBuffer {
39
42
  }
40
43
  this.opTrace.push({ path: normalisePath(path), verb: 'set' });
41
44
  }
45
+ /**
46
+ * Explicit key deletion at the specified path (#13c-B; absorbs backlog B8).
47
+ *
48
+ * Stages EXACTLY the same buffer mutations as `set(path, undefined)` —
49
+ * `workingCopy`/`overwritePatch` get an own `undefined` at the path (the
50
+ * historical flattening, preserving read behavior and the dedup diff base
51
+ * across modes) — but records the op verb as `'delete'`. At commit:
52
+ * `'full'` mode maps it back to a `'set'` trace entry (byte-identical to
53
+ * today); `'delta'` mode emits a real `'delete'` entry whose replay
54
+ * REMOVES the key instead of leaving `key: undefined` behind.
55
+ */
56
+ delete(path, shouldRedact = false) {
57
+ _set(this.workingCopy, path, undefined);
58
+ _set(this.overwritePatch, path, undefined);
59
+ if (shouldRedact) {
60
+ this.redactedPaths.add(normalisePath(path));
61
+ }
62
+ this.opTrace.push({ path: normalisePath(path), verb: 'delete' });
63
+ }
42
64
  /** Deep union merge at the specified path. */
43
65
  merge(path, value, shouldRedact = false) {
44
66
  const existing = _get(this.workingCopy, path) ?? {};
@@ -101,10 +123,11 @@ export class TransactionBuffer {
101
123
  * commit-indexed slider stable while making the highlight truthful.
102
124
  *
103
125
  * ── KNOWN LIMITATIONS / FUTURE ──────────────────────────────────────────
104
- * • Explicit key DELETION is still unrepresentable in MemoryPatch (a removed
105
- * key cannot be expressed). Setting a key to `undefined` is treated as a
106
- * change (value differs from base), not a deletion. Tracked for a future
107
- * `delete` verb.
126
+ * • Explicit key DELETION under the default 'full' mode is still
127
+ * flattened to set-of-`undefined` (a removed key cannot be expressed
128
+ * in MemoryPatch alone). CLOSED under `commitValues: 'delta'` (#13c-B):
129
+ * {@link delete} stages a distinct op and the bundle carries a real
130
+ * `delete` trace verb whose replay removes the key.
108
131
  * • Array-merge dedup in {@link deepSmartMerge} still uses reference equality
109
132
  * (`new Set`), so deep-equal *objects* in a merged array are not deduped.
110
133
  * Orthogonal to this change; tracked separately.
@@ -112,7 +135,7 @@ export class TransactionBuffer {
112
135
  * Resets the buffer to empty state after commit.
113
136
  */
114
137
  commit() {
115
- const payload = this.toChangeOnlyPayload();
138
+ const payload = this.commitValues === 'delta' ? this.toDeltaPayload() : this.toChangeOnlyPayload();
116
139
  this.overwritePatch = {};
117
140
  this.updatePatch = {};
118
141
  this.opTrace.length = 0;
@@ -131,6 +154,11 @@ export class TransactionBuffer {
131
154
  * surviving `merge` paths copy their accumulated delta from `updatePatch` —
132
155
  * preserving the set-vs-merge verb so replay ({@link applySmartMerge}) is
133
156
  * byte-for-byte identical to recording only the real changes.
157
+ *
158
+ * This is the DEFAULT (`commitValues: 'full'`) payload — byte-identical to
159
+ * the historical behavior, including flattening staged `delete` ops into
160
+ * `set`-of-`undefined` trace entries. The delta encoding lives in
161
+ * {@link toDeltaPayload}.
134
162
  */
135
163
  toChangeOnlyPayload() {
136
164
  const overwrite = {};
@@ -143,17 +171,146 @@ export class TransactionBuffer {
143
171
  const after = _get(this.workingCopy, segments);
144
172
  if (deepEqual(before, after))
145
173
  continue; // no-op or write-then-revert → no net change
146
- trace.push(op);
174
+ // Historical flattening: an explicit delete commits as set-of-undefined.
175
+ trace.push(op.verb === 'delete' ? { path: op.path, verb: 'set' } : op);
147
176
  survivingPaths.add(op.path);
148
- if (op.verb === 'set') {
177
+ if (op.verb === 'merge') {
178
+ _set(updates, segments, structuredClone(_get(this.updatePatch, segments)));
179
+ }
180
+ else {
149
181
  _set(overwrite, segments, structuredClone(_get(this.overwritePatch, segments)));
150
182
  }
183
+ }
184
+ const redactedPaths = new Set([...this.redactedPaths].filter((path) => survivingPaths.has(path)));
185
+ return { overwrite, updates, redactedPaths, trace };
186
+ }
187
+ /**
188
+ * Delta-encoded payload (`commitValues: 'delta'`, #13c-B) — same net-change
189
+ * filter as {@link toChangeOnlyPayload}, two encoding differences:
190
+ *
191
+ * 1. **One trace entry per surviving path** (the §2.5 dedup rule — `append`
192
+ * is NOT idempotent on replay, so duplicate entries would multiply
193
+ * tails). The verb is resolved from the path's op mix + base→final
194
+ * relationship; entries are ordered by each path's LAST touch,
195
+ * preserving last-writer-wins for nested/overlapping paths.
196
+ * 2. **Verb resolution per path**:
197
+ * - last op `'delete'` AND final value gone → `delete` (the path stays
198
+ * enumerated in `overwrite` with `undefined` for key-set consumers);
199
+ * - ONLY `'merge'` ops → `merge` with the accumulated `updatePatch`
200
+ * delta (replaying the accumulated delta once ≡ the full mode's
201
+ * k sequential replays — `deepSmartMerge` is reference-idempotent
202
+ * within one replay pass);
203
+ * - otherwise (`set`/mixed): the committed value is computed by
204
+ * replaying the path's op sequence EXACTLY the way `applySmartMerge`
205
+ * replays the full-mode bundle ({@link replayPathVerbs}) — for
206
+ * pure-set paths that is simply the last set value; for mixed
207
+ * set+merge interleavings it reproduces the full mode's quirk of
208
+ * applying the ACCUMULATED merge delta at every merge position
209
+ * (which can differ from the buffer's read-your-writes view; parity
210
+ * with the `'full'` mode's committed state is the contract). If base
211
+ * and that value are arrays and base is a STRICT PREFIX → `append`
212
+ * storing only the tail; else `set` storing the full value.
213
+ *
214
+ * Losslessness never depends on detection succeeding — every fallback is
215
+ * today's full-value `set`.
216
+ */
217
+ toDeltaPayload() {
218
+ const overwrite = {};
219
+ const updates = {};
220
+ const trace = [];
221
+ const survivingPaths = new Set();
222
+ // Path → its op-verb sequence, ordered by LAST touch (delete +
223
+ // re-insert moves a re-touched path to the end of the Map's insertion
224
+ // order — preserving last-writer-wins for nested/overlapping paths).
225
+ const byPath = new Map();
226
+ for (const op of this.opTrace) {
227
+ const prev = byPath.get(op.path);
228
+ if (prev) {
229
+ prev.push(op.verb);
230
+ byPath.delete(op.path);
231
+ byPath.set(op.path, prev);
232
+ }
151
233
  else {
234
+ byPath.set(op.path, [op.verb]);
235
+ }
236
+ }
237
+ for (const [path, verbs] of byPath) {
238
+ const segments = path.split(DELIM);
239
+ const before = _get(this.baseSnapshot, segments);
240
+ const after = _get(this.workingCopy, segments);
241
+ if (deepEqual(before, after))
242
+ continue; // no-op or write-then-revert → no net change (same filter as 'full')
243
+ survivingPaths.add(path);
244
+ const lastVerb = verbs[verbs.length - 1];
245
+ if (lastVerb === 'delete' && after === undefined) {
246
+ // Real deletion — replay removes the key. Keep the path enumerated
247
+ // in `overwrite` (undefined) so Object.keys consumers see it.
248
+ trace.push({ path, verb: 'delete' });
249
+ _set(overwrite, segments, undefined);
250
+ }
251
+ else if (verbs.every((v) => v === 'merge')) {
252
+ trace.push({ path, verb: 'merge' });
152
253
  _set(updates, segments, structuredClone(_get(this.updatePatch, segments)));
153
254
  }
255
+ else {
256
+ // Committed-equivalent value: replay this path's op sequence the way
257
+ // applySmartMerge replays the FULL-mode bundle, so both modes commit
258
+ // byte-identical state (see the method JSDoc).
259
+ const committed = this.replayPathVerbs(before, segments, verbs);
260
+ if (isStrictArrayPrefix(before, committed)) {
261
+ trace.push({ path, verb: 'append' });
262
+ _set(overwrite, segments, structuredClone(committed.slice(before.length)));
263
+ }
264
+ else {
265
+ trace.push({ path, verb: 'set' });
266
+ _set(overwrite, segments, structuredClone(committed));
267
+ }
268
+ }
154
269
  }
155
270
  const redactedPaths = new Set([...this.redactedPaths].filter((path) => survivingPaths.has(path)));
156
271
  return { overwrite, updates, redactedPaths, trace };
157
272
  }
273
+ /**
274
+ * Replay ONE path's op-verb sequence against its base value, exactly the
275
+ * way `applySmartMerge` replays the corresponding full-mode bundle: every
276
+ * `set`/`delete` position applies the LAST staged overwrite value (the
277
+ * bag holds one value per path — last writer wins), every `merge`
278
+ * position applies the ACCUMULATED `updatePatch` delta. This reproduces
279
+ * the full mode's committed value for any interleaving — including the
280
+ * mixed set+merge quirk where the accumulated delta re-applies pre-set
281
+ * merge keys (full-mode replay semantics, kept for byte-parity across
282
+ * modes; property-tested in delta-replay-equivalence).
283
+ */
284
+ replayPathVerbs(before, segments, verbs) {
285
+ const setValue = _get(this.overwritePatch, segments);
286
+ const mergeDelta = _get(this.updatePatch, segments);
287
+ let value = before;
288
+ for (const verb of verbs) {
289
+ value = verb === 'merge' ? deepSmartMerge(value ?? {}, mergeDelta) : setValue;
290
+ }
291
+ return value;
292
+ }
293
+ }
294
+ /**
295
+ * Append-detection predicate (#13c-B §2.2): both values are arrays, the
296
+ * final is strictly longer, and the base is a structural prefix of the
297
+ * final. Element compares short-circuit on reference identity (`deepEqual`'s
298
+ * `===` fast path) before walking structure, and bail at the first mismatch
299
+ * — worst case one structural compare of the base array, strictly cheaper
300
+ * than the full-value `structuredClone` the fallback pays.
301
+ *
302
+ * `before === undefined` (first write) fails `Array.isArray` → `set`, which
303
+ * keeps the first write as the causal anchor for "who initialized this key".
304
+ */
305
+ function isStrictArrayPrefix(before, after) {
306
+ if (!Array.isArray(before) || !Array.isArray(after))
307
+ return false;
308
+ if (after.length <= before.length)
309
+ return false;
310
+ for (let i = 0; i < before.length; i++) {
311
+ if (!deepEqual(before[i], after[i]))
312
+ return false;
313
+ }
314
+ return true;
158
315
  }
159
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJhbnNhY3Rpb25CdWZmZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lbW9yeS9UcmFuc2FjdGlvbkJ1ZmZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBRUgsT0FBTyxFQUFFLFNBQVMsSUFBSSxJQUFJLEVBQUUsU0FBUyxJQUFJLElBQUksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVwRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRTdFLE1BQU0sT0FBTyxpQkFBaUI7SUFDWCxZQUFZLENBQU07SUFDM0IsV0FBVyxDQUFNO0lBRWpCLGNBQWMsR0FBZ0IsRUFBRSxDQUFDO0lBQ2pDLFdBQVcsR0FBZ0IsRUFBRSxDQUFDO0lBQzlCLE9BQU8sR0FBOEMsRUFBRSxDQUFDO0lBQ3hELGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBRTFDLFlBQVksSUFBUztRQUNuQixJQUFJLENBQUMsWUFBWSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsV0FBVyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsNENBQTRDO0lBQzVDLEdBQUcsQ0FBQyxJQUF5QixFQUFFLEtBQVUsRUFBRSxZQUFZLEdBQUcsS0FBSztRQUM3RCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxFQUFFLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3hELElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFD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LENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDO2dCQUN0QixJQUFJLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xGLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzdFLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xHLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUN0RCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRyYW5zYWN0aW9uQnVmZmVyIOKAlCBQZXItc3RhZ2UgU1RBR0lORyBidWZmZXIgZm9yIHN0YXRlIG11dGF0aW9uc1xuICpcbiAqIFdoYXQgaXQgSVM6IGEgc3RhZ2luZyBidWZmZXIgd2l0aCByZWFkLXlvdXItd3JpdGVzIGFuZCBuZXQtY2hhbmdlIGNvbW1pdHMuXG4gKiAtIENoYW5nZXMgYXJlIHN0YWdlZCBoZXJlIGR1cmluZyBzdGFnZSBleGVjdXRpb24gYW5kIGZsdXNoZWQgdG9cbiAqICAgU2hhcmVkTWVtb3J5IGluIE9ORSBiYXRjaCBwZXIgc3RhZ2UgKGBjb21taXQoKWApIOKAlCBvdGhlciBzdGFnZXMgYW5kXG4gKiAgIHBhcmFsbGVsIHNpYmxpbmdzIG5ldmVyIG9ic2VydmUgYSBzdGFnZSdzIGhhbGYtZmluaXNoZWQgd3JpdGVzLlxuICogLSBSZWFkLWFmdGVyLXdyaXRlIGNvbnNpc3RlbmN5IHdpdGhpbiBhIHN0YWdlIOKAlCBhIHN0YWdlIHNlZXMgaXRzIG93blxuICogICBzdGFnZWQgd3JpdGVzIGltbWVkaWF0ZWx5LlxuICogLSBgY29tbWl0KClgIHJlY29yZHMgdGhlIHN0YWdlJ3MgTkVUIGNoYW5nZSAoc2VlIHtAbGluayBjb21taXR9KSwgcGx1cyBhblxuICogICBvcGVyYXRpb24gdHJhY2UgZm9yIGRldGVybWluaXN0aWMgcmVwbGF5LlxuICpcbiAqIFdoYXQgaXQgaXMgTk9UOiBhIHJvbGxiYWNrIG1lY2hhbmlzbS4gRGVzcGl0ZSB0aGUgbmFtZSwgdGhlcmUgaXMgbm9cbiAqIGFib3J0L3JvbGxiYWNrIHBhdGgg4oCUIHdoZW4gYSBzdGFnZSBUSFJPV1MsIHRoZSBlbmdpbmUgc3RpbGwgY29tbWl0c1xuICogZXZlcnl0aGluZyBzdGFnZWQgc28gZmFyIGJlZm9yZSByZS10aHJvd2luZyAoY29tbWl0LW9uLWVycm9yIGluXG4gKiBgRmxvd2NoYXJ0VHJhdmVyc2VyYCkuIFRoYXQgaXMgZGVsaWJlcmF0ZTogdGhlIGF1ZGl0IHRyYWlsIG11c3QgcmVjb3JkXG4gKiB3aGF0IHRoZSBmYWlsaW5nIHN0YWdlIGNoYW5nZWQuIERvIG5vdCByZWx5IG9uIFwic3RhZ2UgZmFpbGVkIOKGkiBpdHNcbiAqIHdyaXRlcyB2YW5pc2hlZFwiLlxuICovXG5cbmltcG9ydCB7IG5hdGl2ZUdldCBhcyBfZ2V0LCBuYXRpdmVTZXQgYXMgX3NldCB9IGZyb20gJy4vcGF0aE9wcy5qcyc7XG5pbXBvcnQgdHlwZSB7IE1lbW9yeVBhdGNoIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBkZWVwRXF1YWwsIGRlZXBTbWFydE1lcmdlLCBERUxJTSwgbm9ybWFsaXNlUGF0aCB9IGZyb20gJy4vdXRpbHMuanMnO1xuXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb25CdWZmZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGJhc2VTbmFwc2hvdDogYW55O1xuICBwcml2YXRlIHdvcmtpbmdDb3B5OiBhbnk7XG5cbiAgcHJpdmF0ZSBvdmVyd3JpdGVQYXRjaDogTWVtb3J5UGF0Y2ggPSB7fTtcbiAgcHJpdmF0ZSB1cGRhdGVQYXRjaDogTWVtb3J5UGF0Y2ggPSB7fTtcbiAgcHJpdmF0ZSBvcFRyYWNlOiB7IHBhdGg6IHN0cmluZzsgdmVyYjogJ3NldCcgfCAnbWVyZ2UnIH1bXSA9IFtdO1xuICBwcml2YXRlIHJlZGFjdGVkUGF0aHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBjb25zdHJ1Y3RvcihiYXNlOiBhbnkpIHtcbiAgICB0aGlzLmJhc2VTbmFwc2hvdCA9IHN0cnVjdHVyZWRDbG9uZShiYXNlKTtcbiAgICB0aGlzLndvcmtpbmdDb3B5ID0gc3RydWN0dXJlZENsb25lKGJhc2UpO1xuICB9XG5cbiAgLyoqIEhhcmQgb3ZlcndyaXRlIGF0IHRoZSBzcGVjaWZpZWQgcGF0aC4gKi9cbiAgc2V0KHBhdGg6IChzdHJpbmcgfCBudW1iZXIpW10sIHZhbHVlOiBhbnksIHNob3VsZFJlZGFjdCA9IGZhbHNlKTogdm9pZCB7XG4gICAgX3NldCh0aGlzLndvcmtpbmdDb3B5LCBwYXRoLCB2YWx1ZSk7XG4gICAgX3NldCh0aGlzLm92ZXJ3cml0ZVBhdGNoLCBwYXRoLCBzdHJ1Y3R1cmVkQ2xvbmUodmFsdWUpKTtcbiAgICBpZiAoc2hvdWxkUmVkYWN0KSB7XG4gICAgICB0aGlzLnJlZGFjdGVkUGF0aHMuYWRkKG5vcm1hbGlzZVBhdGgocGF0aCkpO1xuICAgIH1cbiAgICB0aGlzLm9wVHJhY2UucHVzaCh7IHBhdGg6IG5vcm1hbGlzZVBhdGgocGF0aCksIHZlcmI6ICdzZXQnIH0pO1xuICB9XG5cbiAgLyoqIERlZXAgdW5pb24gbWVyZ2UgYXQgdGhlIHNwZWNpZmllZCBwYXRoLiAqL1xuICBtZXJnZShwYXRoOiAoc3RyaW5nIHwgbnVtYmVyKVtdLCB2YWx1ZTogYW55LCBzaG91bGRSZWRhY3QgPSBmYWxzZSk6IHZvaWQge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gX2dldCh0aGlzLndvcmtpbmdDb3B5LCBwYXRoKSA/PyB7fTtcbiAgICBjb25zdCBtZXJnZWQgPSBkZWVwU21hcnRNZXJnZShleGlzdGluZywgdmFsdWUpO1xuICAgIF9zZXQodGhpcy53b3JraW5nQ29weSwgcGF0aCwgbWVyZ2VkKTtcbiAgICBfc2V0KHRoaXMudXBkYXRlUGF0Y2gsIHBhdGgsIGRlZXBTbWFydE1lcmdlKF9nZXQodGhpcy51cGRhdGVQYXRjaCwgcGF0aCkgPz8ge30sIHZhbHVlKSk7XG4gICAgaWYgKHNob3VsZFJlZGFjdCkge1xuICAgICAgdGhpcy5yZWRhY3RlZFBhdGhzLmFkZChub3JtYWxpc2VQYXRoKHBhdGgpKTtcbiAgICB9XG4gICAgdGhpcy5vcFRyYWNlLnB1c2goeyBwYXRoOiBub3JtYWxpc2VQYXRoKHBhdGgpLCB2ZXJiOiAnbWVyZ2UnIH0pO1xuICB9XG5cbiAgLyoqIFJlYWQgY3VycmVudCB2YWx1ZSBhdCBwYXRoIChpbmNsdWRlcyB1bmNvbW1pdHRlZCBjaGFuZ2VzKS4gKi9cbiAgZ2V0KHBhdGg6IChzdHJpbmcgfCBudW1iZXIpW10sIGRlZmF1bHRWYWx1ZT86IGFueSkge1xuICAgIHJldHVybiBfZ2V0KHRoaXMud29ya2luZ0NvcHksIHBhdGgsIGRlZmF1bHRWYWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogRmx1c2ggYWxsIHN0YWdlZCBtdXRhdGlvbnMgYW5kIHJldHVybiB0aGUgY29tbWl0IGJ1bmRsZSDigJQgcmVjb3JkaW5nIHRoZVxuICAgKiBzdGFnZSdzIE5FVCBDSEFOR0UsIG5vdCBpdHMgcmF3IHdyaXRlIGxvZy5cbiAgICpcbiAgICog4pSA4pSAIFdIWSAodGhlIGRlZmVjdCB0aGlzIGZpeGVzKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICogUHJldmlvdXNseSBldmVyeSBgc2V0YC9gbWVyZ2VgIHdhcyByZWNvcmRlZCB2ZXJiYXRpbSwgc28gdGhlIGNvbW1pdCBidW5kbGVcbiAgICogd2FzIGEgbG9nIG9mICpvcGVyYXRpb25zKiByYXRoZXIgdGhhbiAqY2hhbmdlcyouIFR3byBvcGVyYXRpb25zIHByb2R1Y2Ugbm9cbiAgICogbmV0IGNoYW5nZSB5ZXQgd2VyZSBzdGlsbCBjb21taXR0ZWQgYXMgXCJtdXRhdGlvbnNcIjpcbiAgICpcbiAgICogICAxLiBOby1vcCB3cml0ZSAgIOKAlCB3cml0aW5nIGEga2V5IHRoZSB2YWx1ZSBpdCBhbHJlYWR5IGhvbGRzIChlLmcuIGFuXG4gICAqICAgICAgICAgICAgICAgICAgICAgIGFnZW50IGNvbnRleHQgc2xvdCByZS1lbWl0dGluZyBpZGVudGljYWwgY29udGVudCBldmVyeVxuICAgKiAgICAgICAgICAgICAgICAgICAgICB0dXJuKS4gYmFzZSBLPTEsIHN0YWdlIHdyaXRlcyBLPTEuXG4gICAqICAgMi4gV3JpdGUtcmV2ZXJ0ICDigJQgY2hhbmdpbmcgdGhlbiByZXN0b3JpbmcgYSBrZXkgd2l0aGluIG9uZSBzdGFnZS5cbiAgICogICAgICAgICAgICAgICAgICAgICAgYmFzZSBLPTEsIHN0YWdlIHdyaXRlcyBLPTIgdGhlbiBLPTEuXG4gICAqXG4gICAqIFJlY29yZGluZyB0aGVzZSBhcyBtdXRhdGlvbnMgKGEpIGJsb2F0ZWQgY2F1c2FsIHNsaWNpbmcgLyBiYWNrdHJhY2tpbmcgd2l0aFxuICAgKiBzcHVyaW91cyBkZXBlbmRlbmNpZXMgb24gaW50ZXJtZWRpYXRlIHZhbHVlcyB0aGF0IG5ldmVyIHJlYWNoIGZpbmFsIHN0YXRlLFxuICAgKiBhbmQgKGIpIG1hZGUgZG93bnN0cmVhbSBcIndoYXQgY2hhbmdlZCBoZXJlP1wiIGNvbnN1bWVycyBsaWdodCB1cCBzdGFnZXMgdGhhdFxuICAgKiBjaGFuZ2VkIG5vdGhpbmcg4oCUIG1vc3QgdmlzaWJseSB0aGUgbGVucyBoaWdobGlnaHQgZmxhZ2dpbmcgZXZlcnkgc2xvdC5cbiAgICpcbiAgICog4pSA4pSAIEhPVyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICogQXQgY29tbWl0IHdlIGhvbGQgQk9USCBgYmFzZVNuYXBzaG90YCAoc3RhdGUgd2hlbiB0aGUgc3RhZ2UgYmVnYW4pIGFuZFxuICAgKiBgd29ya2luZ0NvcHlgIChzdGF0ZSBhZnRlciBhbGwgaXRzIHdyaXRlcykuIEZvciBlYWNoIHBhdGggdGhlIHN0YWdlIHRvdWNoZWRcbiAgICogd2Uga2VlcCBpdCBpbiB0aGUgYnVuZGxlIE9OTFkgaWYgaXRzIGZpbmFsIHZhbHVlIGRpZmZlcnMgZnJvbSB0aGUgYmFzZVxuICAgKiB2YWx1ZSAoe0BsaW5rIGRlZXBFcXVhbH0pLiBOby1vcCBBTkQgd3JpdGUtcmV2ZXJ0IHBhdGhzIGRyb3Agb3V0LCBiZWNhdXNlXG4gICAqIGJvdGggY29tcGFyZSBlcXVhbCB0byBiYXNlLiBUaGlzIGlzIGEgc2luZ2xlIG5ldC1kZWx0YSBkaWZmIGF0IGNvbW1pdCB0aW1lXG4gICAqIOKAlCBvbmUgZGVlcCBjb21wYXJlIHBlciB0b3VjaGVkIHBhdGgsIE8oY2hhbmdlZCBzdGF0ZSksIHBhaWQgb25jZSBwZXIgc3RhZ2VcbiAgICogKE5PVCBwZXIgd3JpdGUpLiBBIG5haXZlIHBlci13cml0ZSBkZWVwLWVxdWFsIHNraXAgd291bGQgYmUgbW9yZSBleHBlbnNpdmVcbiAgICogYW5kIHdvdWxkIHN0aWxsIG1pc3Mgd3JpdGUtcmV2ZXJ0ICh0aGUgaW50ZXJtZWRpYXRlIHdyaXRlIGRpZmZlcnMgZnJvbSB0aGVcbiAgICogdmFsdWUgcHJlc2VudCBhdCB0aGUgbW9tZW50IG9mIHdyaXRpbmcpLlxuICAgKlxuICAgKiDilIDilIAgVFdPIEhPTkVTVCBUSUVSUyAoYnkgZGVzaWduIOKAlCBkbyBub3QgXCJ1bmlmeVwiIHRoZW0pIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgKiAgIOKAoiBjb21taXQgKGhlcmUpICAgPSBDSEFOR0UtbGV2ZWwg4oCUIHRydXRoZnVsIG5ldCBkZWx0YS4gRmVlZHMgdGhlIGNvbW1pdFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgbG9nLCBjYXVzYWwgY2hhaW4sIG5hcnJhdGl2ZSwgYW5kIHRoZSBsZW5zIGhpZ2hsaWdodC5cbiAgICogICDigKIgYG9uV3JpdGVgIGV2ZW50ID0gT1AtbGV2ZWwg4oCUIGZpcmVzIG9uIEVWRVJZIHdyaXRlIGF0dGVtcHQgcmVnYXJkbGVzcyBvZlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgbmV0IGNoYW5nZS4gRmVlZHMgbWV0cmljcyAvIGJlaGF2aW91cmFsIG9ic2VydmFiaWxpdHlcbiAgICogICAgICAgICAgICAgICAgICAgICAgIChhIGRlYnVnZ2VyIHdhbnRzIHRvIHNlZSBcIndyb3RlIDIsIHRoZW4gcmV2ZXJ0ZWRcIikuXG4gICAqIGBvbldyaXRlYCBpcyB1bmNoYW5nZWQgYnkgdGhpcyBtZXRob2Q7IG9ubHkgdGhlIENPTU1JVCBiZWNvbWVzIGNoYW5nZS1vbmx5LlxuICAgKlxuICAgKiDilIDilIAgRU1QVFkgQ09NTUlUUyBBUkUgSU5URU5USU9OQUwg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAqIEEgc3RhZ2UgdGhhdCBuZXRzIG5vIGNoYW5nZSBjb21taXRzIGFuIEVNUFRZIHBhdGNoIOKAlCBOT1Qgbm90aGluZy5cbiAgICoge0BsaW5rIFN0YWdlQ29udGV4dC5jb21taXR9IHN0aWxsIHJlY29yZHMgdGhlIGJ1bmRsZSB1bmNvbmRpdGlvbmFsbHksIHNvXG4gICAqIGV2ZXJ5IGV4ZWN1dGVkIHN0YWdlIHJlbWFpbnMgYSB0aW1lLXRyYXZlbCBjdXJzb3Igc3RvcCAoaXRzIGBydW50aW1lU3RhZ2VJZGBcbiAgICogbWFya2VyIGlzIHByZXNlcnZlZCk7IG9ubHkgaXRzIFBBVENIIGlzIGVtcHR5LiBUaGlzIGlzIHdoYXQga2VlcHMgdGhlXG4gICAqIGNvbW1pdC1pbmRleGVkIHNsaWRlciBzdGFibGUgd2hpbGUgbWFraW5nIHRoZSBoaWdobGlnaHQgdHJ1dGhmdWwuXG4gICAqXG4gICAqIOKUgOKUgCBLTk9XTiBMSU1JVEFUSU9OUyAvIEZVVFVSRSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICogICDigKIgRXhwbGljaXQga2V5IERFTEVUSU9OIGlzIHN0aWxsIHVucmVwcmVzZW50YWJsZSBpbiBNZW1vcnlQYXRjaCAoYSByZW1vdmVkXG4gICAqICAgICBrZXkgY2Fubm90IGJlIGV4cHJlc3NlZCkuIFNldHRpbmcgYSBrZXkgdG8gYHVuZGVmaW5lZGAgaXMgdHJlYXRlZCBhcyBhXG4gICAqICAgICBjaGFuZ2UgKHZhbHVlIGRpZmZlcnMgZnJvbSBiYXNlKSwgbm90IGEgZGVsZXRpb24uIFRyYWNrZWQgZm9yIGEgZnV0dXJlXG4gICAqICAgICBgZGVsZXRlYCB2ZXJiLlxuICAgKiAgIOKAoiBBcnJheS1tZXJnZSBkZWR1cCBpbiB7QGxpbmsgZGVlcFNtYXJ0TWVyZ2V9IHN0aWxsIHVzZXMgcmVmZXJlbmNlIGVxdWFsaXR5XG4gICAqICAgICAoYG5ldyBTZXRgKSwgc28gZGVlcC1lcXVhbCAqb2JqZWN0cyogaW4gYSBtZXJnZWQgYXJyYXkgYXJlIG5vdCBkZWR1cGVkLlxuICAgKiAgICAgT3J0aG9nb25hbCB0byB0aGlzIGNoYW5nZTsgdHJhY2tlZCBzZXBhcmF0ZWx5LlxuICAgKlxuICAgKiBSZXNldHMgdGhlIGJ1ZmZlciB0byBlbXB0eSBzdGF0ZSBhZnRlciBjb21taXQuXG4gICAqL1xuICBjb21taXQoKToge1xuICAgIG92ZXJ3cml0ZTogTWVtb3J5UGF0Y2g7XG4gICAgdXBkYXRlczogTWVtb3J5UGF0Y2g7XG4gICAgcmVkYWN0ZWRQYXRoczogU2V0PHN0cmluZz47XG4gICAgdHJhY2U6IHsgcGF0aDogc3RyaW5nOyB2ZXJiOiAnc2V0JyB8ICdtZXJnZScgfVtdO1xuICB9IHtcbiAgICBjb25zdCBwYXlsb2FkID0gdGhpcy50b0NoYW5nZU9ubHlQYXlsb2FkKCk7XG5cbiAgICB0aGlzLm92ZXJ3cml0ZVBhdGNoID0ge307XG4gICAgdGhpcy51cGRhdGVQYXRjaCA9IHt9O1xuICAgIHRoaXMub3BUcmFjZS5sZW5ndGggPSAwO1xuICAgIHRoaXMucmVkYWN0ZWRQYXRocy5jbGVhcigpO1xuICAgIHRoaXMud29ya2luZ0NvcHkgPSB7fTtcblxuICAgIHJldHVybiBwYXlsb2FkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYnVpbGQgb3ZlcndyaXRlIC8gdXBkYXRlcyAvIHRyYWNlIGtlZXBpbmcgT05MWSBwYXRocyB3aG9zZSBmaW5hbCB2YWx1ZVxuICAgKiBkaWZmZXJzIGZyb20gdGhlIGJhc2UgdmFsdWUg4oCUIGkuZS4gdGhlIHN0YWdlJ3MgbmV0IGNoYW5nZS4gU2VlXG4gICAqIHtAbGluayBUcmFuc2FjdGlvbkJ1ZmZlci5jb21taXR9IGZvciB0aGUgcmF0aW9uYWxlLlxuICAgKlxuICAgKiBQYXRocyBhcmUgY29tcGFyZWQgYXQgdGhlIGV4YWN0IGdyYW51bGFyaXR5IHRoZXkgd2VyZSB3cml0dGVuIChlYWNoIHRyYWNlXG4gICAqIGVudHJ5J3MgcGF0aCksIGFnYWluc3QgYHdvcmtpbmdDb3B5YCAoZmluYWwpIHZzIGBiYXNlU25hcHNob3RgIChzdGFydCkuXG4gICAqIFN1cnZpdmluZyBgc2V0YCBwYXRocyBjb3B5IHRoZWlyIGZpbmFsIHZhbHVlIGZyb20gYG92ZXJ3cml0ZVBhdGNoYDtcbiAgICogc3Vydml2aW5nIGBtZXJnZWAgcGF0aHMgY29weSB0aGVpciBhY2N1bXVsYXRlZCBkZWx0YSBmcm9tIGB1cGRhdGVQYXRjaGAg4oCUXG4gICAqIHByZXNlcnZpbmcgdGhlIHNldC12cy1tZXJnZSB2ZXJiIHNvIHJlcGxheSAoe0BsaW5rIGFwcGx5U21hcnRNZXJnZX0pIGlzXG4gICAqIGJ5dGUtZm9yLWJ5dGUgaWRlbnRpY2FsIHRvIHJlY29yZGluZyBvbmx5IHRoZSByZWFsIGNoYW5nZXMuXG4gICAqL1xuICBwcml2YXRlIHRvQ2hhbmdlT25seVBheWxvYWQoKToge1xuICAgIG92ZXJ3cml0ZTogTWVtb3J5UGF0Y2g7XG4gICAgdXBkYXRlczogTWVtb3J5UGF0Y2g7XG4gICAgcmVkYWN0ZWRQYXRoczogU2V0PHN0cmluZz47XG4gICAgdHJhY2U6IHsgcGF0aDogc3RyaW5nOyB2ZXJiOiAnc2V0JyB8ICdtZXJnZScgfVtdO1xuICB9IHtcbiAgICBjb25zdCBvdmVyd3JpdGU6IE1lbW9yeVBhdGNoID0ge307XG4gICAgY29uc3QgdXBkYXRlczogTWVtb3J5UGF0Y2ggPSB7fTtcbiAgICBjb25zdCB0cmFjZTogeyBwYXRoOiBzdHJpbmc7IHZlcmI6ICdzZXQnIHwgJ21lcmdlJyB9W10gPSBbXTtcbiAgICBjb25zdCBzdXJ2aXZpbmdQYXRocyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgZm9yIChjb25zdCBvcCBvZiB0aGlzLm9wVHJhY2UpIHtcbiAgICAgIGNvbnN0IHNlZ21lbnRzID0gb3AucGF0aC5zcGxpdChERUxJTSk7XG4gICAgICBjb25zdCBiZWZvcmUgPSBfZ2V0KHRoaXMuYmFzZVNuYXBzaG90LCBzZWdtZW50cyk7XG4gICAgICBjb25zdCBhZnRlciA9IF9nZXQodGhpcy53b3JraW5nQ29weSwgc2VnbWVudHMpO1xuICAgICAgaWYgKGRlZXBFcXVhbChiZWZvcmUsIGFmdGVyKSkgY29udGludWU7IC8vIG5vLW9wIG9yIHdyaXRlLXRoZW4tcmV2ZXJ0IOKGkiBubyBuZXQgY2hhbmdlXG5cbiAgICAgIHRyYWNlLnB1c2gob3ApO1xuICAgICAgc3Vydml2aW5nUGF0aHMuYWRkKG9wLnBhdGgpO1xuICAgICAgaWYgKG9wLnZlcmIgPT09ICdzZXQnKSB7XG4gICAgICAgIF9zZXQob3ZlcndyaXRlLCBzZWdtZW50cywgc3RydWN0dXJlZENsb25lKF9nZXQodGhpcy5vdmVyd3JpdGVQYXRjaCwgc2VnbWVudHMpKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfc2V0KHVwZGF0ZXMsIHNlZ21lbnRzLCBzdHJ1Y3R1cmVkQ2xvbmUoX2dldCh0aGlzLnVwZGF0ZVBhdGNoLCBzZWdtZW50cykpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZWRhY3RlZFBhdGhzID0gbmV3IFNldChbLi4udGhpcy5yZWRhY3RlZFBhdGhzXS5maWx0ZXIoKHBhdGgpID0+IHN1cnZpdmluZ1BhdGhzLmhhcyhwYXRoKSkpO1xuICAgIHJldHVybiB7IG92ZXJ3cml0ZSwgdXBkYXRlcywgcmVkYWN0ZWRQYXRocywgdHJhY2UgfTtcbiAgfVxufVxuIl19
316
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHJhbnNhY3Rpb25CdWZmZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lbW9yeS9UcmFuc2FjdGlvbkJ1ZmZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBRUgsT0FBTyxFQUFFLFNBQVMsSUFBSSxJQUFJLEVBQUUsU0FBUyxJQUFJLElBQUksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVwRSxPQUFPLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBUTdFLE1BQU0sT0FBTyxpQkFBaUI7SUFDWCxZQUFZLENBQU07SUFDM0IsV0FBVyxDQUFNO0lBRWpCLGNBQWMsR0FBZ0IsRUFBRSxDQUFDO0lBQ2pDLFdBQVcsR0FBZ0IsRUFBRSxDQUFDO0lBQzlCLE9BQU8sR0FBcUMsRUFBRSxDQUFDO0lBQy9DLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBQzFDLDBFQUEwRTtJQUN6RCxZQUFZLENBQW1CO0lBRWhELFlBQVksSUFBUyxFQUFFLGVBQWlDLE1BQU07UUFDNUQsSUFBSSxDQUFDLFlBQVksR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7SUFDbkMsQ0FBQztJQUVELDRDQUE0QztJQUM1QyxHQUFHLENBQUMsSUFBeUIsRUFBRSxLQUFVLEVBQUUsWUFBWSxHQUFHLEtBQUs7UUFDN0QsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLElBQUksRUFBRSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN4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ZSBTVEFHSU5HIGJ1ZmZlciBmb3Igc3RhdGUgbXV0YXRpb25zXG4gKlxuICogV2hhdCBpdCBJUzogYSBzdGFnaW5nIGJ1ZmZlciB3aXRoIHJlYWQteW91ci13cml0ZXMgYW5kIG5ldC1jaGFuZ2UgY29tbWl0cy5cbiAqIC0gQ2hhbmdlcyBhcmUgc3RhZ2VkIGhlcmUgZHVyaW5nIHN0YWdlIGV4ZWN1dGlvbiBhbmQgZmx1c2hlZCB0b1xuICogICBTaGFyZWRNZW1vcnkgaW4gT05FIGJhdGNoIHBlciBzdGFnZSAoYGNvbW1pdCgpYCkg4oCUIG90aGVyIHN0YWdlcyBhbmRcbiAqICAgcGFyYWxsZWwgc2libGluZ3MgbmV2ZXIgb2JzZXJ2ZSBhIHN0YWdlJ3MgaGFsZi1maW5pc2hlZCB3cml0ZXMuXG4gKiAtIFJlYWQtYWZ0ZXItd3JpdGUgY29uc2lzdGVuY3kgd2l0aGluIGEgc3RhZ2Ug4oCUIGEgc3RhZ2Ugc2VlcyBpdHMgb3duXG4gKiAgIHN0YWdlZCB3cml0ZXMgaW1tZWRpYXRlbHkuXG4gKiAtIGBjb21taXQoKWAgcmVjb3JkcyB0aGUgc3RhZ2UncyBORVQgY2hhbmdlIChzZWUge0BsaW5rIGNvbW1pdH0pLCBwbHVzIGFuXG4gKiAgIG9wZXJhdGlvbiB0cmFjZSBmb3IgZGV0ZXJtaW5pc3RpYyByZXBsYXkuXG4gKlxuICogV2hhdCBpdCBpcyBOT1Q6IGEgcm9sbGJhY2sgbWVjaGFuaXNtLiBEZXNwaXRlIHRoZSBuYW1lLCB0aGVyZSBpcyBub1xuICogYWJvcnQvcm9sbGJhY2sgcGF0aCDigJQgd2hlbiBhIHN0YWdlIFRIUk9XUywgdGhlIGVuZ2luZSBzdGlsbCBjb21taXRzXG4gKiBldmVyeXRoaW5nIHN0YWdlZCBzbyBmYXIgYmVmb3JlIHJlLXRocm93aW5nIChjb21taXQtb24tZXJyb3IgaW5cbiAqIGBGbG93Y2hhcnRUcmF2ZXJzZXJgKS4gVGhhdCBpcyBkZWxpYmVyYXRlOiB0aGUgYXVkaXQgdHJhaWwgbXVzdCByZWNvcmRcbiAqIHdoYXQgdGhlIGZhaWxpbmcgc3RhZ2UgY2hhbmdlZC4gRG8gbm90IHJlbHkgb24gXCJzdGFnZSBmYWlsZWQg4oaSIGl0c1xuICogd3JpdGVzIHZhbmlzaGVkXCIuXG4gKi9cblxuaW1wb3J0IHsgbmF0aXZlR2V0IGFzIF9nZXQsIG5hdGl2ZVNldCBhcyBfc2V0IH0gZnJvbSAnLi9wYXRoT3BzLmpzJztcbmltcG9ydCB0eXBlIHsgQ29tbWl0VmFsdWVzTW9kZSwgTWVtb3J5UGF0Y2gsIFRyYWNlRW50cnkgfSBmcm9tICcuL3R5cGVzLmpzJztcbmltcG9ydCB7IGRlZXBFcXVhbCwgZGVlcFNtYXJ0TWVyZ2UsIERFTElNLCBub3JtYWxpc2VQYXRoIH0gZnJvbSAnLi91dGlscy5qcyc7XG5cbi8qKiBPcC1sZXZlbCB2ZXJicyBzdGFnZWQgaW50byBgb3BUcmFjZWAuIGAnZGVsZXRlJ2AgaXMgc3RhZ2VkIGRpc3RpbmN0bHkgc29cbiAqICBkZWx0YS1tb2RlIGNvbW1pdHMgKCMxM2MtQikgY2FuIGVtaXQgYSByZWFsIGBkZWxldGVgIHRyYWNlIGVudHJ5OyB1bmRlclxuICogIHRoZSBkZWZhdWx0IGAnZnVsbCdgIG1vZGUgaXQgY29tbWl0cyBhcyBgJ3NldCdgIChvZiBgdW5kZWZpbmVkYCkg4oCUXG4gKiAgYnl0ZS1pZGVudGljYWwgdG8gdGhlIGhpc3RvcmljYWwgZmxhdHRlbmluZy4gKi9cbnR5cGUgT3BWZXJiID0gJ3NldCcgfCAnbWVyZ2UnIHwgJ2RlbGV0ZSc7XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2FjdGlvbkJ1ZmZlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYmFzZVNuYXBzaG90OiBhbnk7XG4gIHByaXZhdGUgd29ya2luZ0NvcHk6IGFueTtcblxuICBwcml2YXRlIG92ZXJ3cml0ZVBhdGNoOiBNZW1vcnlQYXRjaCA9IHt9O1xuICBwcml2YXRlIHVwZGF0ZVBhdGNoOiBNZW1vcnlQYXRjaCA9IHt9O1xuICBwcml2YXRlIG9wVHJhY2U6IHsgcGF0aDogc3RyaW5nOyB2ZXJiOiBPcFZlcmIgfVtdID0gW107XG4gIHByaXZhdGUgcmVkYWN0ZWRQYXRocyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAvKiogQ29tbWl0LXZhbHVlIGVuY29kaW5nIHBvbGljeSAoIzEzYy1CKS4gYCdmdWxsJ2AgPSBoaXN0b3JpY2FsIGJ5dGVzLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbW1pdFZhbHVlczogQ29tbWl0VmFsdWVzTW9kZTtcblxuICBjb25zdHJ1Y3RvcihiYXNlOiBhbnksIGNvbW1pdFZhbHVlczogQ29tbWl0VmFsdWVzTW9kZSA9ICdmdWxsJykge1xuICAgIHRoaXMuYmFzZVNuYXBzaG90ID0gc3RydWN0dXJlZENsb25lKGJhc2UpO1xuICAgIHRoaXMud29ya2luZ0NvcHkgPSBzdHJ1Y3R1cmVkQ2xvbmUoYmFzZSk7XG4gICAgdGhpcy5jb21taXRWYWx1ZXMgPSBjb21taXRWYWx1ZXM7XG4gIH1cblxuICAvKiogSGFyZCBvdmVyd3JpdGUgYXQgdGhlIHNwZWNpZmllZCBwYXRoLiAqL1xuICBzZXQocGF0aDogKHN0cmluZyB8IG51bWJlcilbXSwgdmFsdWU6IGFueSwgc2hvdWxkUmVkYWN0ID0gZmFsc2UpOiB2b2lkIHtcbiAgICBfc2V0KHRoaXMud29ya2luZ0NvcHksIHBhdGgsIHZhbHVlKTtcbiAgICBfc2V0KHRoaXMub3ZlcndyaXRlUGF0Y2gsIHBhdGgsIHN0cnVjdHVyZWRDbG9uZSh2YWx1ZSkpO1xuICAgIGlmIChzaG91bGRSZWRhY3QpIHtcbiAgICAgIHRoaXMucmVkYWN0ZWRQYXRocy5hZGQobm9ybWFsaXNlUGF0aChwYXRoKSk7XG4gICAgfVxuICAgIHRoaXMub3BUcmFjZS5wdXNoKHsgcGF0aDogbm9ybWFsaXNlUGF0aChwYXRoKSwgdmVyYjogJ3NldCcgfSk7XG4gIH1cblxuICAvKipcbiAgICogRXhwbGljaXQga2V5IGRlbGV0aW9uIGF0IHRoZSBzcGVjaWZpZWQgcGF0aCAoIzEzYy1COyBhYnNvcmJzIGJhY2tsb2cgQjgpLlxuICAgKlxuICAgKiBTdGFnZXMgRVhBQ1RMWSB0aGUgc2FtZSBidWZmZXIgbXV0YXRpb25zIGFzIGBzZXQocGF0aCwgdW5kZWZpbmVkKWAg4oCUXG4gICAqIGB3b3JraW5nQ29weWAvYG92ZXJ3cml0ZVBhdGNoYCBnZXQgYW4gb3duIGB1bmRlZmluZWRgIGF0IHRoZSBwYXRoICh0aGVcbiAgICogaGlzdG9yaWNhbCBmbGF0dGVuaW5nLCBwcmVzZXJ2aW5nIHJlYWQgYmVoYXZpb3IgYW5kIHRoZSBkZWR1cCBkaWZmIGJhc2VcbiAgICogYWNyb3NzIG1vZGVzKSDigJQgYnV0IHJlY29yZHMgdGhlIG9wIHZlcmIgYXMgYCdkZWxldGUnYC4gQXQgY29tbWl0OlxuICAgKiBgJ2Z1bGwnYCBtb2RlIG1hcHMgaXQgYmFjayB0byBhIGAnc2V0J2AgdHJhY2UgZW50cnkgKGJ5dGUtaWRlbnRpY2FsIHRvXG4gICAqIHRvZGF5KTsgYCdkZWx0YSdgIG1vZGUgZW1pdHMgYSByZWFsIGAnZGVsZXRlJ2AgZW50cnkgd2hvc2UgcmVwbGF5XG4gICAqIFJFTU9WRVMgdGhlIGtleSBpbnN0ZWFkIG9mIGxlYXZpbmcgYGtleTogdW5kZWZpbmVkYCBiZWhpbmQuXG4gICAqL1xuICBkZWxldGUocGF0aDogKHN0cmluZyB8IG51bWJlcilbXSwgc2hvdWxkUmVkYWN0ID0gZmFsc2UpOiB2b2lkIHtcbiAgICBfc2V0KHRoaXMud29ya2luZ0NvcHksIHBhdGgsIHVuZGVmaW5lZCk7XG4gICAgX3NldCh0aGlzLm92ZXJ3cml0ZVBhdGNoLCBwYXRoLCB1bmRlZmluZWQpO1xuICAgIGlmIChzaG91bGRSZWRhY3QpIHtcbiAgICAgIHRoaXMucmVkYWN0ZWRQYXRocy5hZGQobm9ybWFsaXNlUGF0aChwYXRoKSk7XG4gICAgfVxuICAgIHRoaXMub3BUcmFjZS5wdXNoKHsgcGF0aDogbm9ybWFsaXNlUGF0aChwYXRoKSwgdmVyYjogJ2RlbGV0ZScgfSk7XG4gIH1cblxuICAvKiogRGVlcCB1bmlvbiBtZXJnZSBhdCB0aGUgc3BlY2lmaWVkIHBhdGguICovXG4gIG1lcmdlKHBhdGg6IChzdHJpbmcgfCBudW1iZXIpW10sIHZhbHVlOiBhbnksIHNob3VsZFJlZGFjdCA9IGZhbHNlKTogdm9pZCB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBfZ2V0KHRoaXMud29ya2luZ0NvcHksIHBhdGgpID8/IHt9O1xuICAgIGNvbnN0IG1lcmdlZCA9IGRlZXBTbWFydE1lcmdlKGV4aXN0aW5nLCB2YWx1ZSk7XG4gICAgX3NldCh0aGlzLndvcmtpbmdDb3B5LCBwYXRoLCBtZXJnZWQpO1xuICAgIF9zZXQodGhpcy51cGRhdGVQYXRjaCwgcGF0aCwgZGVlcFNtYXJ0TWVyZ2UoX2dldCh0aGlzLnVwZGF0ZVBhdGNoLCBwYXRoKSA/PyB7fSwgdmFsdWUpKTtcbiAgICBpZiAoc2hvdWxkUmVkYWN0KSB7XG4gICAgICB0aGlzLnJlZGFjdGVkUGF0aHMuYWRkKG5vcm1hbGlzZVBhdGgocGF0aCkpO1xuICAgIH1cbiAgICB0aGlzLm9wVHJhY2UucHVzaCh7IHBhdGg6IG5vcm1hbGlzZVBhdGgocGF0aCksIHZlcmI6ICdtZXJnZScgfSk7XG4gIH1cblxuICAvKiogUmVhZCBjdXJyZW50IHZhbHVlIGF0IHBhdGggKGluY2x1ZGVzIHVuY29tbWl0dGVkIGNoYW5nZXMpLiAqL1xuICBnZXQocGF0aDogKHN0cmluZyB8IG51bWJlcilbXSwgZGVmYXVsdFZhbHVlPzogYW55KSB7XG4gICAgcmV0dXJuIF9nZXQodGhpcy53b3JraW5nQ29weSwgcGF0aCwgZGVmYXVsdFZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGbHVzaCBhbGwgc3RhZ2VkIG11dGF0aW9ucyBhbmQgcmV0dXJuIHRoZSBjb21taXQgYnVuZGxlIOKAlCByZWNvcmRpbmcgdGhlXG4gICAqIHN0YWdlJ3MgTkVUIENIQU5HRSwgbm90IGl0cyByYXcgd3JpdGUgbG9nLlxuICAgKlxuICAgKiDilIDilIAgV0hZICh0aGUgZGVmZWN0IHRoaXMgZml4ZXMpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgKiBQcmV2aW91c2x5IGV2ZXJ5IGBzZXRgL2BtZXJnZWAgd2FzIHJlY29yZGVkIHZlcmJhdGltLCBzbyB0aGUgY29tbWl0IGJ1bmRsZVxuICAgKiB3YXMgYSBsb2cgb2YgKm9wZXJhdGlvbnMqIHJhdGhlciB0aGFuICpjaGFuZ2VzKi4gVHdvIG9wZXJhdGlvbnMgcHJvZHVjZSBub1xuICAgKiBuZXQgY2hhbmdlIHlldCB3ZXJlIHN0aWxsIGNvbW1pdHRlZCBhcyBcIm11dGF0aW9uc1wiOlxuICAgKlxuICAgKiAgIDEuIE5vLW9wIHdyaXRlICAg4oCUIHdyaXRpbmcgYSBrZXkgdGhlIHZhbHVlIGl0IGFscmVhZHkgaG9sZHMgKGUuZy4gYW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgYWdlbnQgY29udGV4dCBzbG90IHJlLWVtaXR0aW5nIGlkZW50aWNhbCBjb250ZW50IGV2ZXJ5XG4gICAqICAgICAgICAgICAgICAgICAgICAgIHR1cm4pLiBiYXNlIEs9MSwgc3RhZ2Ugd3JpdGVzIEs9MS5cbiAgICogICAyLiBXcml0ZS1yZXZlcnQgIOKAlCBjaGFuZ2luZyB0aGVuIHJlc3RvcmluZyBhIGtleSB3aXRoaW4gb25lIHN0YWdlLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICBiYXNlIEs9MSwgc3RhZ2Ugd3JpdGVzIEs9MiB0aGVuIEs9MS5cbiAgICpcbiAgICogUmVjb3JkaW5nIHRoZXNlIGFzIG11dGF0aW9ucyAoYSkgYmxvYXRlZCBjYXVzYWwgc2xpY2luZyAvIGJhY2t0cmFja2luZyB3aXRoXG4gICAqIHNwdXJpb3VzIGRlcGVuZGVuY2llcyBvbiBpbnRlcm1lZGlhdGUgdmFsdWVzIHRoYXQgbmV2ZXIgcmVhY2ggZmluYWwgc3RhdGUsXG4gICAqIGFuZCAoYikgbWFkZSBkb3duc3RyZWFtIFwid2hhdCBjaGFuZ2VkIGhlcmU/XCIgY29uc3VtZXJzIGxpZ2h0IHVwIHN0YWdlcyB0aGF0XG4gICAqIGNoYW5nZWQgbm90aGluZyDigJQgbW9zdCB2aXNpYmx5IHRoZSBsZW5zIGhpZ2hsaWdodCBmbGFnZ2luZyBldmVyeSBzbG90LlxuICAgKlxuICAgKiDilIDilIAgSE9XIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgKiBBdCBjb21taXQgd2UgaG9sZCBCT1RIIGBiYXNlU25hcHNob3RgIChzdGF0ZSB3aGVuIHRoZSBzdGFnZSBiZWdhbikgYW5kXG4gICAqIGB3b3JraW5nQ29weWAgKHN0YXRlIGFmdGVyIGFsbCBpdHMgd3JpdGVzKS4gRm9yIGVhY2ggcGF0aCB0aGUgc3RhZ2UgdG91Y2hlZFxuICAgKiB3ZSBrZWVwIGl0IGluIHRoZSBidW5kbGUgT05MWSBpZiBpdHMgZmluYWwgdmFsdWUgZGlmZmVycyBmcm9tIHRoZSBiYXNlXG4gICAqIHZhbHVlICh7QGxpbmsgZGVlcEVxdWFsfSkuIE5vLW9wIEFORCB3cml0ZS1yZXZlcnQgcGF0aHMgZHJvcCBvdXQsIGJlY2F1c2VcbiAgICogYm90aCBjb21wYXJlIGVxdWFsIHRvIGJhc2UuIFRoaXMgaXMgYSBzaW5nbGUgbmV0LWRlbHRhIGRpZmYgYXQgY29tbWl0IHRpbWVcbiAgICog4oCUIG9uZSBkZWVwIGNvbXBhcmUgcGVyIHRvdWNoZWQgcGF0aCwgTyhjaGFuZ2VkIHN0YXRlKSwgcGFpZCBvbmNlIHBlciBzdGFnZVxuICAgKiAoTk9UIHBlciB3cml0ZSkuIEEgbmFpdmUgcGVyLXdyaXRlIGRlZXAtZXF1YWwgc2tpcCB3b3VsZCBiZSBtb3JlIGV4cGVuc2l2ZVxuICAgKiBhbmQgd291bGQgc3RpbGwgbWlzcyB3cml0ZS1yZXZlcnQgKHRoZSBpbnRlcm1lZGlhdGUgd3JpdGUgZGlmZmVycyBmcm9tIHRoZVxuICAgKiB2YWx1ZSBwcmVzZW50IGF0IHRoZSBtb21lbnQgb2Ygd3JpdGluZykuXG4gICAqXG4gICAqIOKUgOKUgCBUV08gSE9ORVNUIFRJRVJTIChieSBkZXNpZ24g4oCUIGRvIG5vdCBcInVuaWZ5XCIgdGhlbSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAqICAg4oCiIGNvbW1pdCAoaGVyZSkgICA9IENIQU5HRS1sZXZlbCDigJQgdHJ1dGhmdWwgbmV0IGRlbHRhLiBGZWVkcyB0aGUgY29tbWl0XG4gICAqICAgICAgICAgICAgICAgICAgICAgICBsb2csIGNhdXNhbCBjaGFpbiwgbmFycmF0aXZlLCBhbmQgdGhlIGxlbnMgaGlnaGxpZ2h0LlxuICAgKiAgIOKAoiBgb25Xcml0ZWAgZXZlbnQgPSBPUC1sZXZlbCDigJQgZmlyZXMgb24gRVZFUlkgd3JpdGUgYXR0ZW1wdCByZWdhcmRsZXNzIG9mXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBuZXQgY2hhbmdlLiBGZWVkcyBtZXRyaWNzIC8gYmVoYXZpb3VyYWwgb2JzZXJ2YWJpbGl0eVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgKGEgZGVidWdnZXIgd2FudHMgdG8gc2VlIFwid3JvdGUgMiwgdGhlbiByZXZlcnRlZFwiKS5cbiAgICogYG9uV3JpdGVgIGlzIHVuY2hhbmdlZCBieSB0aGlzIG1ldGhvZDsgb25seSB0aGUgQ09NTUlUIGJlY29tZXMgY2hhbmdlLW9ubHkuXG4gICAqXG4gICAqIOKUgOKUgCBFTVBUWSBDT01NSVRTIEFSRSBJTlRFTlRJT05BTCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgICogQSBzdGFnZSB0aGF0IG5ldHMgbm8gY2hhbmdlIGNvbW1pdHMgYW4gRU1QVFkgcGF0Y2gg4oCUIE5PVCBub3RoaW5nLlxuICAgKiB7QGxpbmsgU3RhZ2VDb250ZXh0LmNvbW1pdH0gc3RpbGwgcmVjb3JkcyB0aGUgYnVuZGxlIHVuY29uZGl0aW9uYWxseSwgc29cbiAgICogZXZlcnkgZXhlY3V0ZWQgc3RhZ2UgcmVtYWlucyBhIHRpbWUtdHJhdmVsIGN1cnNvciBzdG9wIChpdHMgYHJ1bnRpbWVTdGFnZUlkYFxuICAgKiBtYXJrZXIgaXMgcHJlc2VydmVkKTsgb25seSBpdHMgUEFUQ0ggaXMgZW1wdHkuIFRoaXMgaXMgd2hhdCBrZWVwcyB0aGVcbiAgICogY29tbWl0LWluZGV4ZWQgc2xpZGVyIHN0YWJsZSB3aGlsZSBtYWtpbmcgdGhlIGhpZ2hsaWdodCB0cnV0aGZ1bC5cbiAgICpcbiAgICog4pSA4pSAIEtOT1dOIExJTUlUQVRJT05TIC8gRlVUVVJFIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuICAgKiAgIOKAoiBFeHBsaWNpdCBrZXkgREVMRVRJT04gdW5kZXIgdGhlIGRlZmF1bHQgJ2Z1bGwnIG1vZGUgaXMgc3RpbGxcbiAgICogICAgIGZsYXR0ZW5lZCB0byBzZXQtb2YtYHVuZGVmaW5lZGAgKGEgcmVtb3ZlZCBrZXkgY2Fubm90IGJlIGV4cHJlc3NlZFxuICAgKiAgICAgaW4gTWVtb3J5UGF0Y2ggYWxvbmUpLiBDTE9TRUQgdW5kZXIgYGNvbW1pdFZhbHVlczogJ2RlbHRhJ2AgKCMxM2MtQik6XG4gICAqICAgICB7QGxpbmsgZGVsZXRlfSBzdGFnZXMgYSBkaXN0aW5jdCBvcCBhbmQgdGhlIGJ1bmRsZSBjYXJyaWVzIGEgcmVhbFxuICAgKiAgICAgYGRlbGV0ZWAgdHJhY2UgdmVyYiB3aG9zZSByZXBsYXkgcmVtb3ZlcyB0aGUga2V5LlxuICAgKiAgIOKAoiBBcnJheS1tZXJnZSBkZWR1cCBpbiB7QGxpbmsgZGVlcFNtYXJ0TWVyZ2V9IHN0aWxsIHVzZXMgcmVmZXJlbmNlIGVxdWFsaXR5XG4gICAqICAgICAoYG5ldyBTZXRgKSwgc28gZGVlcC1lcXVhbCAqb2JqZWN0cyogaW4gYSBtZXJnZWQgYXJyYXkgYXJlIG5vdCBkZWR1cGVkLlxuICAgKiAgICAgT3J0aG9nb25hbCB0byB0aGlzIGNoYW5nZTsgdHJhY2tlZCBzZXBhcmF0ZWx5LlxuICAgKlxuICAgKiBSZXNldHMgdGhlIGJ1ZmZlciB0byBlbXB0eSBzdGF0ZSBhZnRlciBjb21taXQuXG4gICAqL1xuICBjb21taXQoKToge1xuICAgIG92ZXJ3cml0ZTogTWVtb3J5UGF0Y2g7XG4gICAgdXBkYXRlczogTWVtb3J5UGF0Y2g7XG4gICAgcmVkYWN0ZWRQYXRoczogU2V0PHN0cmluZz47XG4gICAgdHJhY2U6IFRyYWNlRW50cnlbXTtcbiAgfSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IHRoaXMuY29tbWl0VmFsdWVzID09PSAnZGVsdGEnID8gdGhpcy50b0RlbHRhUGF5bG9hZCgpIDogdGhpcy50b0NoYW5nZU9ubHlQYXlsb2FkKCk7XG5cbiAgICB0aGlzLm92ZXJ3cml0ZVBhdGNoID0ge307XG4gICAgdGhpcy51cGRhdGVQYXRjaCA9IHt9O1xuICAgIHRoaXMub3BUcmFjZS5sZW5ndGggPSAwO1xuICAgIHRoaXMucmVkYWN0ZWRQYXRocy5jbGVhcigpO1xuICAgIHRoaXMud29ya2luZ0NvcHkgPSB7fTtcblxuICAgIHJldHVybiBwYXlsb2FkO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlYnVpbGQgb3ZlcndyaXRlIC8gdXBkYXRlcyAvIHRyYWNlIGtlZXBpbmcgT05MWSBwYXRocyB3aG9zZSBmaW5hbCB2YWx1ZVxuICAgKiBkaWZmZXJzIGZyb20gdGhlIGJhc2UgdmFsdWUg4oCUIGkuZS4gdGhlIHN0YWdlJ3MgbmV0IGNoYW5nZS4gU2VlXG4gICAqIHtAbGluayBUcmFuc2FjdGlvbkJ1ZmZlci5jb21taXR9IGZvciB0aGUgcmF0aW9uYWxlLlxuICAgKlxuICAgKiBQYXRocyBhcmUgY29tcGFyZWQgYXQgdGhlIGV4YWN0IGdyYW51bGFyaXR5IHRoZXkgd2VyZSB3cml0dGVuIChlYWNoIHRyYWNlXG4gICAqIGVudHJ5J3MgcGF0aCksIGFnYWluc3QgYHdvcmtpbmdDb3B5YCAoZmluYWwpIHZzIGBiYXNlU25hcHNob3RgIChzdGFydCkuXG4gICAqIFN1cnZpdmluZyBgc2V0YCBwYXRocyBjb3B5IHRoZWlyIGZpbmFsIHZhbHVlIGZyb20gYG92ZXJ3cml0ZVBhdGNoYDtcbiAgICogc3Vydml2aW5nIGBtZXJnZWAgcGF0aHMgY29weSB0aGVpciBhY2N1bXVsYXRlZCBkZWx0YSBmcm9tIGB1cGRhdGVQYXRjaGAg4oCUXG4gICAqIHByZXNlcnZpbmcgdGhlIHNldC12cy1tZXJnZSB2ZXJiIHNvIHJlcGxheSAoe0BsaW5rIGFwcGx5U21hcnRNZXJnZX0pIGlzXG4gICAqIGJ5dGUtZm9yLWJ5dGUgaWRlbnRpY2FsIHRvIHJlY29yZGluZyBvbmx5IHRoZSByZWFsIGNoYW5nZXMuXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIERFRkFVTFQgKGBjb21taXRWYWx1ZXM6ICdmdWxsJ2ApIHBheWxvYWQg4oCUIGJ5dGUtaWRlbnRpY2FsIHRvXG4gICAqIHRoZSBoaXN0b3JpY2FsIGJlaGF2aW9yLCBpbmNsdWRpbmcgZmxhdHRlbmluZyBzdGFnZWQgYGRlbGV0ZWAgb3BzIGludG9cbiAgICogYHNldGAtb2YtYHVuZGVmaW5lZGAgdHJhY2UgZW50cmllcy4gVGhlIGRlbHRhIGVuY29kaW5nIGxpdmVzIGluXG4gICAqIHtAbGluayB0b0RlbHRhUGF5bG9hZH0uXG4gICAqL1xuICBwcml2YXRlIHRvQ2hhbmdlT25seVBheWxvYWQoKToge1xuICAgIG92ZXJ3cml0ZTogTWVtb3J5UGF0Y2g7XG4gICAgdXBkYXRlczogTWVtb3J5UGF0Y2g7XG4gICAgcmVkYWN0ZWRQYXRoczogU2V0PHN0cmluZz47XG4gICAgdHJhY2U6IFRyYWNlRW50cnlbXTtcbiAgfSB7XG4gICAgY29uc3Qgb3ZlcndyaXRlOiBNZW1vcnlQYXRjaCA9IHt9O1xuICAgIGNvbnN0IHVwZGF0ZXM6IE1lbW9yeVBhdGNoID0ge307XG4gICAgY29uc3QgdHJhY2U6IFRyYWNlRW50cnlbXSA9IFtdO1xuICAgIGNvbnN0IHN1cnZpdmluZ1BhdGhzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICBmb3IgKGNvbnN0IG9wIG9mIHRoaXMub3BUcmFjZSkge1xuICAgICAgY29uc3Qgc2VnbWVudHMgPSBvcC5wYXRoLnNwbGl0KERFTElNKTtcbiAgICAgIGNvbnN0IGJlZm9yZSA9IF9nZXQodGhpcy5iYXNlU25hcHNob3QsIHNlZ21lbnRzKTtcbiAgICAgIGNvbnN0IGFmdGVyID0gX2dldCh0aGlzLndvcmtpbmdDb3B5LCBzZWdtZW50cyk7XG4gICAgICBpZiAoZGVlcEVxdWFsKGJlZm9yZSwgYWZ0ZXIpKSBjb250aW51ZTsgLy8gbm8tb3Agb3Igd3JpdGUtdGhlbi1yZXZlcnQg4oaSIG5vIG5ldCBjaGFuZ2VcblxuICAgICAgLy8gSGlzdG9yaWNhbCBmbGF0dGVuaW5nOiBhbiBleHBsaWNpdCBkZWxldGUgY29tbWl0cyBhcyBzZXQtb2YtdW5kZWZpbmVkLlxuICAgICAgdHJhY2UucHVzaChvcC52ZXJiID09PSAnZGVsZXRlJyA/IHsgcGF0aDogb3AucGF0aCwgdmVyYjogJ3NldCcgfSA6IG9wKTtcbiAgICAgIHN1cnZpdmluZ1BhdGhzLmFkZChvcC5wYXRoKTtcbiAgICAgIGlmIChvcC52ZXJiID09PSAnbWVyZ2UnKSB7XG4gICAgICAgIF9zZXQodXBkYXRlcywgc2VnbWVudHMsIHN0cnVjdHVyZWRDbG9uZShfZ2V0KHRoaXMudXBkYXRlUGF0Y2gsIHNlZ21lbnRzKSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3NldChvdmVyd3JpdGUsIHNlZ21lbnRzLCBzdHJ1Y3R1cmVkQ2xvbmUoX2dldCh0aGlzLm92ZXJ3cml0ZVBhdGNoLCBzZWdtZW50cykpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZWRhY3RlZFBhdGhzID0gbmV3IFNldChbLi4udGhpcy5yZWRhY3RlZFBhdGhzXS5maWx0ZXIoKHBhdGgpID0+IHN1cnZpdmluZ1BhdGhzLmhhcyhwYXRoKSkpO1xuICAgIHJldHVybiB7IG92ZXJ3cml0ZSwgdXBkYXRlcywgcmVkYWN0ZWRQYXRocywgdHJhY2UgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWx0YS1lbmNvZGVkIHBheWxvYWQgKGBjb21taXRWYWx1ZXM6ICdkZWx0YSdgLCAjMTNjLUIpIOKAlCBzYW1lIG5ldC1jaGFuZ2VcbiAgICogZmlsdGVyIGFzIHtAbGluayB0b0NoYW5nZU9ubHlQYXlsb2FkfSwgdHdvIGVuY29kaW5nIGRpZmZlcmVuY2VzOlxuICAgKlxuICAgKiAxLiAqKk9uZSB0cmFjZSBlbnRyeSBwZXIgc3Vydml2aW5nIHBhdGgqKiAodGhlIMKnMi41IGRlZHVwIHJ1bGUg4oCUIGBhcHBlbmRgXG4gICAqICAgIGlzIE5PVCBpZGVtcG90ZW50IG9uIHJlcGxheSwgc28gZHVwbGljYXRlIGVudHJpZXMgd291bGQgbXVsdGlwbHlcbiAgICogICAgdGFpbHMpLiBUaGUgdmVyYiBpcyByZXNvbHZlZCBmcm9tIHRoZSBwYXRoJ3Mgb3AgbWl4ICsgYmFzZeKGkmZpbmFsXG4gICAqICAgIHJlbGF0aW9uc2hpcDsgZW50cmllcyBhcmUgb3JkZXJlZCBieSBlYWNoIHBhdGgncyBMQVNUIHRvdWNoLFxuICAgKiAgICBwcmVzZXJ2aW5nIGxhc3Qtd3JpdGVyLXdpbnMgZm9yIG5lc3RlZC9vdmVybGFwcGluZyBwYXRocy5cbiAgICogMi4gKipWZXJiIHJlc29sdXRpb24gcGVyIHBhdGgqKjpcbiAgICogICAgLSBsYXN0IG9wIGAnZGVsZXRlJ2AgQU5EIGZpbmFsIHZhbHVlIGdvbmUg4oaSIGBkZWxldGVgICh0aGUgcGF0aCBzdGF5c1xuICAgKiAgICAgIGVudW1lcmF0ZWQgaW4gYG92ZXJ3cml0ZWAgd2l0aCBgdW5kZWZpbmVkYCBmb3Iga2V5LXNldCBjb25zdW1lcnMpO1xuICAgKiAgICAtIE9OTFkgYCdtZXJnZSdgIG9wcyDihpIgYG1lcmdlYCB3aXRoIHRoZSBhY2N1bXVsYXRlZCBgdXBkYXRlUGF0Y2hgXG4gICAqICAgICAgZGVsdGEgKHJlcGxheWluZyB0aGUgYWNjdW11bGF0ZWQgZGVsdGEgb25jZSDiiaEgdGhlIGZ1bGwgbW9kZSdzXG4gICAqICAgICAgayBzZXF1ZW50aWFsIHJlcGxheXMg4oCUIGBkZWVwU21hcnRNZXJnZWAgaXMgcmVmZXJlbmNlLWlkZW1wb3RlbnRcbiAgICogICAgICB3aXRoaW4gb25lIHJlcGxheSBwYXNzKTtcbiAgICogICAgLSBvdGhlcndpc2UgKGBzZXRgL21peGVkKTogdGhlIGNvbW1pdHRlZCB2YWx1ZSBpcyBjb21wdXRlZCBieVxuICAgKiAgICAgIHJlcGxheWluZyB0aGUgcGF0aCdzIG9wIHNlcXVlbmNlIEVYQUNUTFkgdGhlIHdheSBgYXBwbHlTbWFydE1lcmdlYFxuICAgKiAgICAgIHJlcGxheXMgdGhlIGZ1bGwtbW9kZSBidW5kbGUgKHtAbGluayByZXBsYXlQYXRoVmVyYnN9KSDigJQgZm9yXG4gICAqICAgICAgcHVyZS1zZXQgcGF0aHMgdGhhdCBpcyBzaW1wbHkgdGhlIGxhc3Qgc2V0IHZhbHVlOyBmb3IgbWl4ZWRcbiAgICogICAgICBzZXQrbWVyZ2UgaW50ZXJsZWF2aW5ncyBpdCByZXByb2R1Y2VzIHRoZSBmdWxsIG1vZGUncyBxdWlyayBvZlxuICAgKiAgICAgIGFwcGx5aW5nIHRoZSBBQ0NVTVVMQVRFRCBtZXJnZSBkZWx0YSBhdCBldmVyeSBtZXJnZSBwb3NpdGlvblxuICAgKiAgICAgICh3aGljaCBjYW4gZGlmZmVyIGZyb20gdGhlIGJ1ZmZlcidzIHJlYWQteW91ci13cml0ZXMgdmlldzsgcGFyaXR5XG4gICAqICAgICAgd2l0aCB0aGUgYCdmdWxsJ2AgbW9kZSdzIGNvbW1pdHRlZCBzdGF0ZSBpcyB0aGUgY29udHJhY3QpLiBJZiBiYXNlXG4gICAqICAgICAgYW5kIHRoYXQgdmFsdWUgYXJlIGFycmF5cyBhbmQgYmFzZSBpcyBhIFNUUklDVCBQUkVGSVgg4oaSIGBhcHBlbmRgXG4gICAqICAgICAgc3RvcmluZyBvbmx5IHRoZSB0YWlsOyBlbHNlIGBzZXRgIHN0b3JpbmcgdGhlIGZ1bGwgdmFsdWUuXG4gICAqXG4gICAqIExvc3NsZXNzbmVzcyBuZXZlciBkZXBlbmRzIG9uIGRldGVjdGlvbiBzdWNjZWVkaW5nIOKAlCBldmVyeSBmYWxsYmFjayBpc1xuICAgKiB0b2RheSdzIGZ1bGwtdmFsdWUgYHNldGAuXG4gICAqL1xuICBwcml2YXRlIHRvRGVsdGFQYXlsb2FkKCk6IHtcbiAgICBvdmVyd3JpdGU6IE1lbW9yeVBhdGNoO1xuICAgIHVwZGF0ZXM6IE1lbW9yeVBhdGNoO1xuICAgIHJlZGFjdGVkUGF0aHM6IFNldDxzdHJpbmc+O1xuICAgIHRyYWNlOiBUcmFjZUVudHJ5W107XG4gIH0ge1xuICAgIGNvbnN0IG92ZXJ3cml0ZTogTWVtb3J5UGF0Y2ggPSB7fTtcbiAgICBjb25zdCB1cGRhdGVzOiBNZW1vcnlQYXRjaCA9IHt9O1xuICAgIGNvbnN0IHRyYWNlOiBUcmFjZUVudHJ5W10gPSBbXTtcbiAgICBjb25zdCBzdXJ2aXZpbmdQYXRocyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgLy8gUGF0aCDihpIgaXRzIG9wLXZlcmIgc2VxdWVuY2UsIG9yZGVyZWQgYnkgTEFTVCB0b3VjaCAoZGVsZXRlICtcbiAgICAvLyByZS1pbnNlcnQgbW92ZXMgYSByZS10b3VjaGVkIHBhdGggdG8gdGhlIGVuZCBvZiB0aGUgTWFwJ3MgaW5zZXJ0aW9uXG4gICAgLy8gb3JkZXIg4oCUIHByZXNlcnZpbmcgbGFzdC13cml0ZXItd2lucyBmb3IgbmVzdGVkL292ZXJsYXBwaW5nIHBhdGhzKS5cbiAgICBjb25zdCBieVBhdGggPSBuZXcgTWFwPHN0cmluZywgT3BWZXJiW10+KCk7XG4gICAgZm9yIChjb25zdCBvcCBvZiB0aGlzLm9wVHJhY2UpIHtcbiAgICAgIGNvbnN0IHByZXYgPSBieVBhdGguZ2V0KG9wLnBhdGgpO1xuICAgICAgaWYgKHByZXYpIHtcbiAgICAgICAgcHJldi5wdXNoKG9wLnZlcmIpO1xuICAgICAgICBieVBhdGguZGVsZXRlKG9wLnBhdGgpO1xuICAgICAgICBieVBhdGguc2V0KG9wLnBhdGgsIHByZXYpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnlQYXRoLnNldChvcC5wYXRoLCBbb3AudmVyYl0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgW3BhdGgsIHZlcmJzXSBvZiBieVBhdGgpIHtcbiAgICAgIGNvbnN0IHNlZ21lbnRzID0gcGF0aC5zcGxpdChERUxJTSk7XG4gICAgICBjb25zdCBiZWZvcmUgPSBfZ2V0KHRoaXMuYmFzZVNuYXBzaG90LCBzZWdtZW50cyk7XG4gICAgICBjb25zdCBhZnRlciA9IF9nZXQodGhpcy53b3JraW5nQ29weSwgc2VnbWVudHMpO1xuICAgICAgaWYgKGRlZXBFcXVhbChiZWZvcmUsIGFmdGVyKSkgY29udGludWU7IC8vIG5vLW9wIG9yIHdyaXRlLXRoZW4tcmV2ZXJ0IOKGkiBubyBuZXQgY2hhbmdlIChzYW1lIGZpbHRlciBhcyAnZnVsbCcpXG5cbiAgICAgIHN1cnZpdmluZ1BhdGhzLmFkZChwYXRoKTtcbiAgICAgIGNvbnN0IGxhc3RWZXJiID0gdmVyYnNbdmVyYnMubGVuZ3RoIC0gMV07XG4gICAgICBpZiAobGFzdFZlcmIgPT09ICdkZWxldGUnICYmIGFmdGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gUmVhbCBkZWxldGlvbiDigJQgcmVwbGF5IHJlbW92ZXMgdGhlIGtleS4gS2VlcCB0aGUgcGF0aCBlbnVtZXJhdGVkXG4gICAgICAgIC8vIGluIGBvdmVyd3JpdGVgICh1bmRlZmluZWQpIHNvIE9iamVjdC5rZXlzIGNvbnN1bWVycyBzZWUgaXQuXG4gICAgICAgIHRyYWNlLnB1c2goeyBwYXRoLCB2ZXJiOiAnZGVsZXRlJyB9KTtcbiAgICAgICAgX3NldChvdmVyd3JpdGUsIHNlZ21lbnRzLCB1bmRlZmluZWQpO1xuICAgICAgfSBlbHNlIGlmICh2ZXJicy5ldmVyeSgodikgPT4gdiA9PT0gJ21lcmdlJykpIHtcbiAgICAgICAgdHJhY2UucHVzaCh7IHBhdGgsIHZlcmI6ICdtZXJnZScgfSk7XG4gICAgICAgIF9zZXQodXBkYXRlcywgc2VnbWVudHMsIHN0cnVjdHVyZWRDbG9uZShfZ2V0KHRoaXMudXBkYXRlUGF0Y2gsIHNlZ21lbnRzKSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ29tbWl0dGVkLWVxdWl2YWxlbnQgdmFsdWU6IHJlcGxheSB0aGlzIHBhdGgncyBvcCBzZXF1ZW5jZSB0aGUgd2F5XG4gICAgICAgIC8vIGFwcGx5U21hcnRNZXJnZSByZXBsYXlzIHRoZSBGVUxMLW1vZGUgYnVuZGxlLCBzbyBib3RoIG1vZGVzIGNvbW1pdFxuICAgICAgICAvLyBieXRlLWlkZW50aWNhbCBzdGF0ZSAoc2VlIHRoZSBtZXRob2QgSlNEb2MpLlxuICAgICAgICBjb25zdCBjb21taXR0ZWQgPSB0aGlzLnJlcGxheVBhdGhWZXJicyhiZWZvcmUsIHNlZ21lbnRzLCB2ZXJicyk7XG4gICAgICAgIGlmIChpc1N0cmljdEFycmF5UHJlZml4KGJlZm9yZSwgY29tbWl0dGVkKSkge1xuICAgICAgICAgIHRyYWNlLnB1c2goeyBwYXRoLCB2ZXJiOiAnYXBwZW5kJyB9KTtcbiAgICAgICAgICBfc2V0KG92ZXJ3cml0ZSwgc2VnbWVudHMsIHN0cnVjdHVyZWRDbG9uZSgoY29tbWl0dGVkIGFzIHVua25vd25bXSkuc2xpY2UoKGJlZm9yZSBhcyB1bmtub3duW10pLmxlbmd0aCkpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0cmFjZS5wdXNoKHsgcGF0aCwgdmVyYjogJ3NldCcgfSk7XG4gICAgICAgICAgX3NldChvdmVyd3JpdGUsIHNlZ21lbnRzLCBzdHJ1Y3R1cmVkQ2xvbmUoY29tbWl0dGVkKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZWRhY3RlZFBhdGhzID0gbmV3IFNldChbLi4udGhpcy5yZWRhY3RlZFBhdGhzXS5maWx0ZXIoKHBhdGgpID0+IHN1cnZpdmluZ1BhdGhzLmhhcyhwYXRoKSkpO1xuICAgIHJldHVybiB7IG92ZXJ3cml0ZSwgdXBkYXRlcywgcmVkYWN0ZWRQYXRocywgdHJhY2UgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYXkgT05FIHBhdGgncyBvcC12ZXJiIHNlcXVlbmNlIGFnYWluc3QgaXRzIGJhc2UgdmFsdWUsIGV4YWN0bHkgdGhlXG4gICAqIHdheSBgYXBwbHlTbWFydE1lcmdlYCByZXBsYXlzIHRoZSBjb3JyZXNwb25kaW5nIGZ1bGwtbW9kZSBidW5kbGU6IGV2ZXJ5XG4gICAqIGBzZXRgL2BkZWxldGVgIHBvc2l0aW9uIGFwcGxpZXMgdGhlIExBU1Qgc3RhZ2VkIG92ZXJ3cml0ZSB2YWx1ZSAodGhlXG4gICAqIGJhZyBob2xkcyBvbmUgdmFsdWUgcGVyIHBhdGgg4oCUIGxhc3Qgd3JpdGVyIHdpbnMpLCBldmVyeSBgbWVyZ2VgXG4gICAqIHBvc2l0aW9uIGFwcGxpZXMgdGhlIEFDQ1VNVUxBVEVEIGB1cGRhdGVQYXRjaGAgZGVsdGEuIFRoaXMgcmVwcm9kdWNlc1xuICAgKiB0aGUgZnVsbCBtb2RlJ3MgY29tbWl0dGVkIHZhbHVlIGZvciBhbnkgaW50ZXJsZWF2aW5nIOKAlCBpbmNsdWRpbmcgdGhlXG4gICAqIG1peGVkIHNldCttZXJnZSBxdWlyayB3aGVyZSB0aGUgYWNjdW11bGF0ZWQgZGVsdGEgcmUtYXBwbGllcyBwcmUtc2V0XG4gICAqIG1lcmdlIGtleXMgKGZ1bGwtbW9kZSByZXBsYXkgc2VtYW50aWNzLCBrZXB0IGZvciBieXRlLXBhcml0eSBhY3Jvc3NcbiAgICogbW9kZXM7IHByb3BlcnR5LXRlc3RlZCBpbiBkZWx0YS1yZXBsYXktZXF1aXZhbGVuY2UpLlxuICAgKi9cbiAgcHJpdmF0ZSByZXBsYXlQYXRoVmVyYnMoYmVmb3JlOiB1bmtub3duLCBzZWdtZW50czogc3RyaW5nW10sIHZlcmJzOiBPcFZlcmJbXSk6IHVua25vd24ge1xuICAgIGNvbnN0IHNldFZhbHVlID0gX2dldCh0aGlzLm92ZXJ3cml0ZVBhdGNoLCBzZWdtZW50cyk7XG4gICAgY29uc3QgbWVyZ2VEZWx0YSA9IF9nZXQodGhpcy51cGRhdGVQYXRjaCwgc2VnbWVudHMpO1xuICAgIGxldCB2YWx1ZTogdW5rbm93biA9IGJlZm9yZTtcbiAgICBmb3IgKGNvbnN0IHZlcmIgb2YgdmVyYnMpIHtcbiAgICAgIHZhbHVlID0gdmVyYiA9PT0gJ21lcmdlJyA/IGRlZXBTbWFydE1lcmdlKHZhbHVlID8/IHt9LCBtZXJnZURlbHRhKSA6IHNldFZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuLyoqXG4gKiBBcHBlbmQtZGV0ZWN0aW9uIHByZWRpY2F0ZSAoIzEzYy1CIMKnMi4yKTogYm90aCB2YWx1ZXMgYXJlIGFycmF5cywgdGhlXG4gKiBmaW5hbCBpcyBzdHJpY3RseSBsb25nZXIsIGFuZCB0aGUgYmFzZSBpcyBhIHN0cnVjdHVyYWwgcHJlZml4IG9mIHRoZVxuICogZmluYWwuIEVsZW1lbnQgY29tcGFyZXMgc2hvcnQtY2lyY3VpdCBvbiByZWZlcmVuY2UgaWRlbnRpdHkgKGBkZWVwRXF1YWxgJ3NcbiAqIGA9PT1gIGZhc3QgcGF0aCkgYmVmb3JlIHdhbGtpbmcgc3RydWN0dXJlLCBhbmQgYmFpbCBhdCB0aGUgZmlyc3QgbWlzbWF0Y2hcbiAqIOKAlCB3b3JzdCBjYXNlIG9uZSBzdHJ1Y3R1cmFsIGNvbXBhcmUgb2YgdGhlIGJhc2UgYXJyYXksIHN0cmljdGx5IGNoZWFwZXJcbiAqIHRoYW4gdGhlIGZ1bGwtdmFsdWUgYHN0cnVjdHVyZWRDbG9uZWAgdGhlIGZhbGxiYWNrIHBheXMuXG4gKlxuICogYGJlZm9yZSA9PT0gdW5kZWZpbmVkYCAoZmlyc3Qgd3JpdGUpIGZhaWxzIGBBcnJheS5pc0FycmF5YCDihpIgYHNldGAsIHdoaWNoXG4gKiBrZWVwcyB0aGUgZmlyc3Qgd3JpdGUgYXMgdGhlIGNhdXNhbCBhbmNob3IgZm9yIFwid2hvIGluaXRpYWxpemVkIHRoaXMga2V5XCIuXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaWN0QXJyYXlQcmVmaXgoYmVmb3JlOiB1bmtub3duLCBhZnRlcjogdW5rbm93bik6IGJlZm9yZSBpcyB1bmtub3duW10ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoYmVmb3JlKSB8fCAhQXJyYXkuaXNBcnJheShhZnRlcikpIHJldHVybiBmYWxzZTtcbiAgaWYgKGFmdGVyLmxlbmd0aCA8PSBiZWZvcmUubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYmVmb3JlLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKCFkZWVwRXF1YWwoYmVmb3JlW2ldLCBhZnRlcltpXSkpIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbiJdfQ==
@@ -4,6 +4,8 @@
4
4
  * The commitLog is an ordered array of CommitBundle — one per stage commit.
5
5
  * These helpers provide type-safe queries without (b: any) casts.
6
6
  */
7
+ import { nativeGet } from './pathOps.js';
8
+ import { deepSmartMerge, DELIM } from './utils.js';
7
9
  /** Find the first commit by stageId, optionally filtering by a written key. */
8
10
  export function findCommit(commitLog, stageId, key) {
9
11
  return commitLog.find((b) => b.stageId === stageId && (!key || b.trace.some((t) => t.path === key)));
@@ -22,4 +24,72 @@ export function findLastWriter(commitLog, key, beforeIdx) {
22
24
  }
23
25
  return undefined;
24
26
  }
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWl0TG9nVXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lbW9yeS9jb21taXRMb2dVdGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUlILCtFQUErRTtBQUMvRSxNQUFNLFVBQVUsVUFBVSxDQUFDLFNBQXlCLEVBQUUsT0FBZSxFQUFFLEdBQVk7SUFDakYsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLE9BQU8sSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2RyxDQUFDO0FBRUQsbUNBQW1DO0FBQ25DLE1BQU0sVUFBVSxXQUFXLENBQUMsU0FBeUIsRUFBRSxPQUFlO0lBQ3BFLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsQ0FBQztBQUN4RCxDQUFDO0FBRUQseUVBQXlFO0FBQ3pFLE1BQU0sVUFBVSxjQUFjLENBQUMsU0FBeUIsRUFBRSxHQUFXLEVBQUUsU0FBa0I7SUFDdkYsTUFBTSxHQUFHLEdBQUcsU0FBUyxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUM7SUFDMUMsS0FBSyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNsQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbkQsT0FBTyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUeXBlZCB1dGlsaXRpZXMgZm9yIHF1ZXJ5aW5nIHRoZSBjb21taXQgbG9nLlxuICpcbiAqIFRoZSBjb21taXRMb2cgaXMgYW4gb3JkZXJlZCBhcnJheSBvZiBDb21taXRCdW5kbGUg4oCUIG9uZSBwZXIgc3RhZ2UgY29tbWl0LlxuICogVGhlc2UgaGVscGVycyBwcm92aWRlIHR5cGUtc2FmZSBxdWVyaWVzIHdpdGhvdXQgKGI6IGFueSkgY2FzdHMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBDb21taXRCdW5kbGUgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLyoqIEZpbmQgdGhlIGZpcnN0IGNvbW1pdCBieSBzdGFnZUlkLCBvcHRpb25hbGx5IGZpbHRlcmluZyBieSBhIHdyaXR0ZW4ga2V5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRDb21taXQoY29tbWl0TG9nOiBDb21taXRCdW5kbGVbXSwgc3RhZ2VJZDogc3RyaW5nLCBrZXk/OiBzdHJpbmcpOiBDb21taXRCdW5kbGUgfCB1bmRlZmluZWQge1xuICByZXR1cm4gY29tbWl0TG9nLmZpbmQoKGIpID0+IGIuc3RhZ2VJZCA9PT0gc3RhZ2VJZCAmJiAoIWtleSB8fCBiLnRyYWNlLnNvbWUoKHQpID0+IHQucGF0aCA9PT0ga2V5KSkpO1xufVxuXG4vKiogRmluZCBhbGwgY29tbWl0cyBieSBzdGFnZUlkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRDb21taXRzKGNvbW1pdExvZzogQ29tbWl0QnVuZGxlW10sIHN0YWdlSWQ6IHN0cmluZyk6IENvbW1pdEJ1bmRsZVtdIHtcbiAgcmV0dXJuIGNvbW1pdExvZy5maWx0ZXIoKGIpID0+IGIuc3RhZ2VJZCA9PT0gc3RhZ2VJZCk7XG59XG5cbi8qKiBGaW5kIHRoZSBsYXN0IGNvbW1pdCB0aGF0IHdyb3RlIGEgc3BlY2lmaWMga2V5IChmb3IgYmFja3RyYWNraW5nKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kTGFzdFdyaXRlcihjb21taXRMb2c6IENvbW1pdEJ1bmRsZVtdLCBrZXk6IHN0cmluZywgYmVmb3JlSWR4PzogbnVtYmVyKTogQ29tbWl0QnVuZGxlIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZW5kID0gYmVmb3JlSWR4ID8/IGNvbW1pdExvZy5sZW5ndGg7XG4gIGZvciAobGV0IGkgPSBlbmQgLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChjb21taXRMb2dbaV0udHJhY2Uuc29tZSgodCkgPT4gdC5wYXRoID09PSBrZXkpKSB7XG4gICAgICByZXR1cm4gY29tbWl0TG9nW2ldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuIl19
27
+ /**
28
+ * Reconstruct the FULL value of `key` as of commit array index `idx`
29
+ * (inclusive) — the migration helper for the "read `bundle.overwrite[key]`
30
+ * as the full value written" pattern (#13c-B).
31
+ *
32
+ * Under `commitValues: 'delta'`, an `append` bundle's `overwrite[key]` holds
33
+ * only the TAIL of the array; this helper folds the verbs back together:
34
+ * it scans `commitLog[0..idx]` for trace entries on `key`, anchors at the
35
+ * latest full-value write (`set` — or `delete`, which resets to absent), and
36
+ * replays forward (`append` → concat, `merge` → `deepSmartMerge`) — exactly
37
+ * the per-key slice of `applySmartMerge`'s replay, O(key's commit span)
38
+ * instead of a full `materialise()`.
39
+ *
40
+ * Works on full-mode logs too (every `set` is its own anchor — equivalent to
41
+ * `findLastWriter(...).overwrite[key]`).
42
+ *
43
+ * @param key Matched against `TraceEntry.path` exactly (same contract as
44
+ * `findLastWriter`) — DELIM-joined for nested paths.
45
+ * @param idx CommitBundle ARRAY index (the `bundle.idx` position),
46
+ * inclusive. NOT the executionIndex from a runtimeStageId.
47
+ * @returns The reconstructed value (a detached clone), or `undefined` when
48
+ * the key was never written in `commitLog[0..idx]` or its last write was a
49
+ * delete. Caveat: values derived purely from the run's INITIAL state (no
50
+ * `set` anchor in the log — e.g. merges onto a seeded key) fold from
51
+ * absent; the commit log alone cannot see the pre-run base (the same blind
52
+ * spot `findLastWriter` has).
53
+ */
54
+ export function commitValueAt(commitLog, idx, key) {
55
+ const end = Math.min(idx, commitLog.length - 1);
56
+ const segs = key.split(DELIM);
57
+ // Collect every trace entry touching the key (in order) up to `end`.
58
+ const touches = [];
59
+ for (let i = 0; i <= end; i++) {
60
+ for (const t of commitLog[i].trace) {
61
+ if (t.path === key)
62
+ touches.push({ verb: t.verb, bundle: commitLog[i] });
63
+ }
64
+ }
65
+ if (touches.length === 0)
66
+ return undefined;
67
+ // Anchor at the latest entry that fully determines the value on its own.
68
+ let start = 0;
69
+ for (let i = touches.length - 1; i >= 0; i--) {
70
+ if (touches[i].verb === 'set' || touches[i].verb === 'delete') {
71
+ start = i;
72
+ break;
73
+ }
74
+ }
75
+ // Fold forward from the anchor — the per-key slice of applySmartMerge.
76
+ let value;
77
+ for (let i = start; i < touches.length; i++) {
78
+ const { verb, bundle } = touches[i];
79
+ if (verb === 'set') {
80
+ value = structuredClone(nativeGet(bundle.overwrite, segs));
81
+ }
82
+ else if (verb === 'delete') {
83
+ value = undefined;
84
+ }
85
+ else if (verb === 'append') {
86
+ const tail = structuredClone(nativeGet(bundle.overwrite, segs));
87
+ value = Array.isArray(value) && Array.isArray(tail) ? [...value, ...tail] : tail;
88
+ }
89
+ else {
90
+ value = deepSmartMerge(value, structuredClone(nativeGet(bundle.updates, segs)));
91
+ }
92
+ }
93
+ return value;
94
+ }
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWl0TG9nVXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lbW9yeS9jb21taXRMb2dVdGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFekMsT0FBTyxFQUFFLGNBQWMsRUFBRSxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFbkQsK0VBQStFO0FBQy9FLE1BQU0sVUFBVSxVQUFVLENBQUMsU0FBeUIsRUFBRSxPQUFlLEVBQUUsR0FBWTtJQUNqRixPQUFPLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssT0FBTyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZHLENBQUM7QUFFRCxtQ0FBbUM7QUFDbkMsTUFBTSxVQUFVLFdBQVcsQ0FBQyxTQUF5QixFQUFFLE9BQWU7SUFDcEUsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxDQUFDO0FBQ3hELENBQUM7QUFFRCx5RUFBeUU7QUFDekUsTUFBTSxVQUFVLGNBQWMsQ0FBQyxTQUF5QixFQUFFLEdBQVcsRUFBRSxTQUFrQjtJQUN2RixNQUFNLEdBQUcsR0FBRyxTQUFTLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQztJQUMxQyxLQUFLLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2xDLElBQUksU0FBUyxD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WUFDTixLQUFLLEdBQUcsY0FBYyxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xGLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUeXBlZCB1dGlsaXRpZXMgZm9yIHF1ZXJ5aW5nIHRoZSBjb21taXQgbG9nLlxuICpcbiAqIFRoZSBjb21taXRMb2cgaXMgYW4gb3JkZXJlZCBhcnJheSBvZiBDb21taXRCdW5kbGUg4oCUIG9uZSBwZXIgc3RhZ2UgY29tbWl0LlxuICogVGhlc2UgaGVscGVycyBwcm92aWRlIHR5cGUtc2FmZSBxdWVyaWVzIHdpdGhvdXQgKGI6IGFueSkgY2FzdHMuXG4gKi9cblxuaW1wb3J0IHsgbmF0aXZlR2V0IH0gZnJvbSAnLi9wYXRoT3BzLmpzJztcbmltcG9ydCB0eXBlIHsgQ29tbWl0QnVuZGxlIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBkZWVwU21hcnRNZXJnZSwgREVMSU0gfSBmcm9tICcuL3V0aWxzLmpzJztcblxuLyoqIEZpbmQgdGhlIGZpcnN0IGNvbW1pdCBieSBzdGFnZUlkLCBvcHRpb25hbGx5IGZpbHRlcmluZyBieSBhIHdyaXR0ZW4ga2V5LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRDb21taXQoY29tbWl0TG9nOiBDb21taXRCdW5kbGVbXSwgc3RhZ2VJZDogc3RyaW5nLCBrZXk/OiBzdHJpbmcpOiBDb21taXRCdW5kbGUgfCB1bmRlZmluZWQge1xuICByZXR1cm4gY29tbWl0TG9nLmZpbmQoKGIpID0+IGIuc3RhZ2VJZCA9PT0gc3RhZ2VJZCAmJiAoIWtleSB8fCBiLnRyYWNlLnNvbWUoKHQpID0+IHQucGF0aCA9PT0ga2V5KSkpO1xufVxuXG4vKiogRmluZCBhbGwgY29tbWl0cyBieSBzdGFnZUlkLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRDb21taXRzKGNvbW1pdExvZzogQ29tbWl0QnVuZGxlW10sIHN0YWdlSWQ6IHN0cmluZyk6IENvbW1pdEJ1bmRsZVtdIHtcbiAgcmV0dXJuIGNvbW1pdExvZy5maWx0ZXIoKGIpID0+IGIuc3RhZ2VJZCA9PT0gc3RhZ2VJZCk7XG59XG5cbi8qKiBGaW5kIHRoZSBsYXN0IGNvbW1pdCB0aGF0IHdyb3RlIGEgc3BlY2lmaWMga2V5IChmb3IgYmFja3RyYWNraW5nKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kTGFzdFdyaXRlcihjb21taXRMb2c6IENvbW1pdEJ1bmRsZVtdLCBrZXk6IHN0cmluZywgYmVmb3JlSWR4PzogbnVtYmVyKTogQ29tbWl0QnVuZGxlIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZW5kID0gYmVmb3JlSWR4ID8/IGNvbW1pdExvZy5sZW5ndGg7XG4gIGZvciAobGV0IGkgPSBlbmQgLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChjb21taXRMb2dbaV0udHJhY2Uuc29tZSgodCkgPT4gdC5wYXRoID09PSBrZXkpKSB7XG4gICAgICByZXR1cm4gY29tbWl0TG9nW2ldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJlY29uc3RydWN0IHRoZSBGVUxMIHZhbHVlIG9mIGBrZXlgIGFzIG9mIGNvbW1pdCBhcnJheSBpbmRleCBgaWR4YFxuICogKGluY2x1c2l2ZSkg4oCUIHRoZSBtaWdyYXRpb24gaGVscGVyIGZvciB0aGUgXCJyZWFkIGBidW5kbGUub3ZlcndyaXRlW2tleV1gXG4gKiBhcyB0aGUgZnVsbCB2YWx1ZSB3cml0dGVuXCIgcGF0dGVybiAoIzEzYy1CKS5cbiAqXG4gKiBVbmRlciBgY29tbWl0VmFsdWVzOiAnZGVsdGEnYCwgYW4gYGFwcGVuZGAgYnVuZGxlJ3MgYG92ZXJ3cml0ZVtrZXldYCBob2xkc1xuICogb25seSB0aGUgVEFJTCBvZiB0aGUgYXJyYXk7IHRoaXMgaGVscGVyIGZvbGRzIHRoZSB2ZXJicyBiYWNrIHRvZ2V0aGVyOlxuICogaXQgc2NhbnMgYGNvbW1pdExvZ1swLi5pZHhdYCBmb3IgdHJhY2UgZW50cmllcyBvbiBga2V5YCwgYW5jaG9ycyBhdCB0aGVcbiAqIGxhdGVzdCBmdWxsLXZhbHVlIHdyaXRlIChgc2V0YCDigJQgb3IgYGRlbGV0ZWAsIHdoaWNoIHJlc2V0cyB0byBhYnNlbnQpLCBhbmRcbiAqIHJlcGxheXMgZm9yd2FyZCAoYGFwcGVuZGAg4oaSIGNvbmNhdCwgYG1lcmdlYCDihpIgYGRlZXBTbWFydE1lcmdlYCkg4oCUIGV4YWN0bHlcbiAqIHRoZSBwZXIta2V5IHNsaWNlIG9mIGBhcHBseVNtYXJ0TWVyZ2VgJ3MgcmVwbGF5LCBPKGtleSdzIGNvbW1pdCBzcGFuKVxuICogaW5zdGVhZCBvZiBhIGZ1bGwgYG1hdGVyaWFsaXNlKClgLlxuICpcbiAqIFdvcmtzIG9uIGZ1bGwtbW9kZSBsb2dzIHRvbyAoZXZlcnkgYHNldGAgaXMgaXRzIG93biBhbmNob3Ig4oCUIGVxdWl2YWxlbnQgdG9cbiAqIGBmaW5kTGFzdFdyaXRlciguLi4pLm92ZXJ3cml0ZVtrZXldYCkuXG4gKlxuICogQHBhcmFtIGtleSAgTWF0Y2hlZCBhZ2FpbnN0IGBUcmFjZUVudHJ5LnBhdGhgIGV4YWN0bHkgKHNhbWUgY29udHJhY3QgYXNcbiAqICAgYGZpbmRMYXN0V3JpdGVyYCkg4oCUIERFTElNLWpvaW5lZCBmb3IgbmVzdGVkIHBhdGhzLlxuICogQHBhcmFtIGlkeCAgQ29tbWl0QnVuZGxlIEFSUkFZIGluZGV4ICh0aGUgYGJ1bmRsZS5pZHhgIHBvc2l0aW9uKSxcbiAqICAgaW5jbHVzaXZlLiBOT1QgdGhlIGV4ZWN1dGlvbkluZGV4IGZyb20gYSBydW50aW1lU3RhZ2VJZC5cbiAqIEByZXR1cm5zIFRoZSByZWNvbnN0cnVjdGVkIHZhbHVlIChhIGRldGFjaGVkIGNsb25lKSwgb3IgYHVuZGVmaW5lZGAgd2hlblxuICogICB0aGUga2V5IHdhcyBuZXZlciB3cml0dGVuIGluIGBjb21taXRMb2dbMC4uaWR4XWAgb3IgaXRzIGxhc3Qgd3JpdGUgd2FzIGFcbiAqICAgZGVsZXRlLiBDYXZlYXQ6IHZhbHVlcyBkZXJpdmVkIHB1cmVseSBmcm9tIHRoZSBydW4ncyBJTklUSUFMIHN0YXRlIChub1xuICogICBgc2V0YCBhbmNob3IgaW4gdGhlIGxvZyDigJQgZS5nLiBtZXJnZXMgb250byBhIHNlZWRlZCBrZXkpIGZvbGQgZnJvbVxuICogICBhYnNlbnQ7IHRoZSBjb21taXQgbG9nIGFsb25lIGNhbm5vdCBzZWUgdGhlIHByZS1ydW4gYmFzZSAodGhlIHNhbWUgYmxpbmRcbiAqICAgc3BvdCBgZmluZExhc3RXcml0ZXJgIGhhcykuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21taXRWYWx1ZUF0KGNvbW1pdExvZzogQ29tbWl0QnVuZGxlW10sIGlkeDogbnVtYmVyLCBrZXk6IHN0cmluZyk6IHVua25vd24ge1xuICBjb25zdCBlbmQgPSBNYXRoLm1pbihpZHgsIGNvbW1pdExvZy5sZW5ndGggLSAxKTtcbiAgY29uc3Qgc2VncyA9IGtleS5zcGxpdChERUxJTSk7XG5cbiAgLy8gQ29sbGVjdCBldmVyeSB0cmFjZSBlbnRyeSB0b3VjaGluZyB0aGUga2V5IChpbiBvcmRlcikgdXAgdG8gYGVuZGAuXG4gIGNvbnN0IHRvdWNoZXM6IHsgdmVyYjogc3RyaW5nOyBidW5kbGU6IENvbW1pdEJ1bmRsZSB9W10gPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPD0gZW5kOyBpKyspIHtcbiAgICBmb3IgKGNvbnN0IHQgb2YgY29tbWl0TG9nW2ldLnRyYWNlKSB7XG4gICAgICBpZiAodC5wYXRoID09PSBrZXkpIHRvdWNoZXMucHVzaCh7IHZlcmI6IHQudmVyYiwgYnVuZGxlOiBjb21taXRMb2dbaV0gfSk7XG4gICAgfVxuICB9XG4gIGlmICh0b3VjaGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAvLyBBbmNob3IgYXQgdGhlIGxhdGVzdCBlbnRyeSB0aGF0IGZ1bGx5IGRldGVybWluZXMgdGhlIHZhbHVlIG9uIGl0cyBvd24uXG4gIGxldCBzdGFydCA9IDA7XG4gIGZvciAobGV0IGkgPSB0b3VjaGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKHRvdWNoZXNbaV0udmVyYiA9PT0gJ3NldCcgfHwgdG91Y2hlc1tpXS52ZXJiID09PSAnZGVsZXRlJykge1xuICAgICAgc3RhcnQgPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgLy8gRm9sZCBmb3J3YXJkIGZyb20gdGhlIGFuY2hvciDigJQgdGhlIHBlci1rZXkgc2xpY2Ugb2YgYXBwbHlTbWFydE1lcmdlLlxuICBsZXQgdmFsdWU6IHVua25vd247XG4gIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IHRvdWNoZXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB7IHZlcmIsIGJ1bmRsZSB9ID0gdG91Y2hlc1tpXTtcbiAgICBpZiAodmVyYiA9PT0gJ3NldCcpIHtcbiAgICAgIHZhbHVlID0gc3RydWN0dXJlZENsb25lKG5hdGl2ZUdldChidW5kbGUub3ZlcndyaXRlLCBzZWdzKSk7XG4gICAgfSBlbHNlIGlmICh2ZXJiID09PSAnZGVsZXRlJykge1xuICAgICAgdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmICh2ZXJiID09PSAnYXBwZW5kJykge1xuICAgICAgY29uc3QgdGFpbCA9IHN0cnVjdHVyZWRDbG9uZShuYXRpdmVHZXQoYnVuZGxlLm92ZXJ3cml0ZSwgc2VncykpO1xuICAgICAgdmFsdWUgPSBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiBBcnJheS5pc0FycmF5KHRhaWwpID8gWy4uLnZhbHVlLCAuLi50YWlsXSA6IHRhaWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlID0gZGVlcFNtYXJ0TWVyZ2UodmFsdWUsIHN0cnVjdHVyZWRDbG9uZShuYXRpdmVHZXQoYnVuZGxlLnVwZGF0ZXMsIHNlZ3MpKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cbiJdfQ==
@@ -14,4 +14,4 @@ export { TransactionBuffer } from './TransactionBuffer.js';
14
14
  export { READ_PREVIEW_LENGTH, SUMMARY_PREVIEW_LENGTH } from './types.js';
15
15
  // Utilities
16
16
  export { applySmartMerge, deepSmartMerge, DELIM, getNestedValue, getRunAndGlobalPaths, normalisePath, redactPatch, setNestedValue, updateNestedValue, updateValue, } from './utils.js';
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lbW9yeS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwQkFBMEI7QUFDMUI7Ozs7O0dBS0c7QUFFSCxVQUFVO0FBQ1YsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBaUIzRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFekUsWUFBWTtBQUNaLE9BQU8sRUFDTCxlQUFlLEVBQ2YsY0FBYyxFQUNkLEtBQUssRUFDTCxjQUFjLEVBQ2Qsb0JBQW9CLEVBQ3BCLGFBQWEsRUFDYixXQUFXLEVBQ1gsY0FBYyxFQUNkLGlCQUFpQixFQUNqQixXQUFXLEdBQ1osTUFBTSxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBpc3RhbmJ1bCBpZ25vcmUgZmlsZSAqL1xuLyoqXG4gKiBtZW1vcnkvIOKAlCBGb3VuZGF0aW9uIGxpYnJhcnkgKHplcm8gZXh0ZXJuYWwgZGVwcylcbiAqXG4gKiBUcmFuc2FjdGlvbmFsIHN0YXRlIG1hbmFnZW1lbnQgd2l0aCBuYW1lc3BhY2UgaXNvbGF0aW9uLFxuICogYXRvbWljIGNvbW1pdHMsIGFuZCBldmVudC1zb3VyY2VkIHRpbWUtdHJhdmVsLlxuICovXG5cbi8vIENsYXNzZXNcbmV4cG9ydCB7IERpYWdub3N0aWNDb2xsZWN0b3IgfSBmcm9tICcuL0RpYWdub3N0aWNDb2xsZWN0b3IuanMnO1xuZXhwb3J0IHsgRXZlbnRMb2cgfSBmcm9tICcuL0V2ZW50TG9nLmpzJztcbmV4cG9ydCB7IFNoYXJlZE1lbW9yeSB9IGZyb20gJy4vU2hhcmVkTWVtb3J5LmpzJztcbmV4cG9ydCB7IFN0YWdlQ29udGV4dCB9IGZyb20gJy4vU3RhZ2VDb250ZXh0LmpzJztcbmV4cG9ydCB7IFRyYW5zYWN0aW9uQnVmZmVyIH0gZnJvbSAnLi9UcmFuc2FjdGlvbkJ1ZmZlci5qcyc7XG5cbi8vIFR5cGVzXG5leHBvcnQgdHlwZSB7XG4gIENvbW1pdEJ1bmRsZSxcbiAgRmxvd0NvbnRyb2xUeXBlLFxuICBGbG93TWVzc2FnZSxcbiAgTWVtb3J5UGF0Y2gsXG4gIFJlYWRTdW1tYXJ5TWFya2VyLFxuICBSZWFkVHJhY2tpbmdNb2RlLFxuICBSZXRlbnRpb25Qb2xpY3ksXG4gIFNjb3BlRmFjdG9yeSxcbiAgU3RhZ2VTbmFwc2hvdCxcbiAgVHJhY2VFbnRyeSxcbiAgV3JpdGVTdW1tYXJ5TWFya2VyLFxuICBXcml0ZVRyYWNraW5nTW9kZSxcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5leHBvcnQgeyBSRUFEX1BSRVZJRVdfTEVOR1RILCBTVU1NQVJZX1BSRVZJRVdfTEVOR1RIIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8vIFV0aWxpdGllc1xuZXhwb3J0IHtcbiAgYXBwbHlTbWFydE1lcmdlLFxuICBkZWVwU21hcnRNZXJnZSxcbiAgREVMSU0sXG4gIGdldE5lc3RlZFZhbHVlLFxuICBnZXRSdW5BbmRHbG9iYWxQYXRocyxcbiAgbm9ybWFsaXNlUGF0aCxcbiAgcmVkYWN0UGF0Y2gsXG4gIHNldE5lc3RlZFZhbHVlLFxuICB1cGRhdGVOZXN0ZWRWYWx1ZSxcbiAgdXBkYXRlVmFsdWUsXG59IGZyb20gJy4vdXRpbHMuanMnO1xuIl19
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lbW9yeS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwQkFBMEI7QUFDMUI7Ozs7O0dBS0c7QUFFSCxVQUFVO0FBQ1YsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDL0QsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBa0IzRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFekUsWUFBWTtBQUNaLE9BQU8sRUFDTCxlQUFlLEVBQ2YsY0FBYyxFQUNkLEtBQUssRUFDTCxjQUFjLEVBQ2Qsb0JBQW9CLEVBQ3BCLGFBQWEsRUFDYixXQUFXLEVBQ1gsY0FBYyxFQUNkLGlCQUFpQixFQUNqQixXQUFXLEdBQ1osTUFBTSxZQUFZLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBpc3RhbmJ1bCBpZ25vcmUgZmlsZSAqL1xuLyoqXG4gKiBtZW1vcnkvIOKAlCBGb3VuZGF0aW9uIGxpYnJhcnkgKHplcm8gZXh0ZXJuYWwgZGVwcylcbiAqXG4gKiBUcmFuc2FjdGlvbmFsIHN0YXRlIG1hbmFnZW1lbnQgd2l0aCBuYW1lc3BhY2UgaXNvbGF0aW9uLFxuICogYXRvbWljIGNvbW1pdHMsIGFuZCBldmVudC1zb3VyY2VkIHRpbWUtdHJhdmVsLlxuICovXG5cbi8vIENsYXNzZXNcbmV4cG9ydCB7IERpYWdub3N0aWNDb2xsZWN0b3IgfSBmcm9tICcuL0RpYWdub3N0aWNDb2xsZWN0b3IuanMnO1xuZXhwb3J0IHsgRXZlbnRMb2cgfSBmcm9tICcuL0V2ZW50TG9nLmpzJztcbmV4cG9ydCB7IFNoYXJlZE1lbW9yeSB9IGZyb20gJy4vU2hhcmVkTWVtb3J5LmpzJztcbmV4cG9ydCB7IFN0YWdlQ29udGV4dCB9IGZyb20gJy4vU3RhZ2VDb250ZXh0LmpzJztcbmV4cG9ydCB7IFRyYW5zYWN0aW9uQnVmZmVyIH0gZnJvbSAnLi9UcmFuc2FjdGlvbkJ1ZmZlci5qcyc7XG5cbi8vIFR5cGVzXG5leHBvcnQgdHlwZSB7XG4gIENvbW1pdEJ1bmRsZSxcbiAgQ29tbWl0VmFsdWVzTW9kZSxcbiAgRmxvd0NvbnRyb2xUeXBlLFxuICBGbG93TWVzc2FnZSxcbiAgTWVtb3J5UGF0Y2gsXG4gIFJlYWRTdW1tYXJ5TWFya2VyLFxuICBSZWFkVHJhY2tpbmdNb2RlLFxuICBSZXRlbnRpb25Qb2xpY3ksXG4gIFNjb3BlRmFjdG9yeSxcbiAgU3RhZ2VTbmFwc2hvdCxcbiAgVHJhY2VFbnRyeSxcbiAgV3JpdGVTdW1tYXJ5TWFya2VyLFxuICBXcml0ZVRyYWNraW5nTW9kZSxcbn0gZnJvbSAnLi90eXBlcy5qcyc7XG5leHBvcnQgeyBSRUFEX1BSRVZJRVdfTEVOR1RILCBTVU1NQVJZX1BSRVZJRVdfTEVOR1RIIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8vIFV0aWxpdGllc1xuZXhwb3J0IHtcbiAgYXBwbHlTbWFydE1lcmdlLFxuICBkZWVwU21hcnRNZXJnZSxcbiAgREVMSU0sXG4gIGdldE5lc3RlZFZhbHVlLFxuICBnZXRSdW5BbmRHbG9iYWxQYXRocyxcbiAgbm9ybWFsaXNlUGF0aCxcbiAgcmVkYWN0UGF0Y2gsXG4gIHNldE5lc3RlZFZhbHVlLFxuICB1cGRhdGVOZXN0ZWRWYWx1ZSxcbiAgdXBkYXRlVmFsdWUsXG59IGZyb20gJy4vdXRpbHMuanMnO1xuIl19
@@ -66,6 +66,33 @@ export function nativeSet(obj, path, value) {
66
66
  curr[last] = value;
67
67
  return obj;
68
68
  }
69
+ /**
70
+ * Remove the own property at `path` in `obj` (the replay primitive for the
71
+ * `delete` commit verb, #13c-B). No-op when any intermediate segment is
72
+ * missing — deleting an absent key has nothing to remove.
73
+ *
74
+ * Security: same DENIED + hasOwnProperty discipline as nativeGet — every
75
+ * segment is checked, so `nativeDelete(obj, '__proto__x')` and
76
+ * prototype-chain walks are inert.
77
+ */
78
+ export function nativeDelete(obj, path) {
79
+ const segs = toSegments(path);
80
+ let curr = obj;
81
+ for (let i = 0; i < segs.length - 1; i++) {
82
+ const seg = segs[i];
83
+ if (DENIED.has(String(seg)))
84
+ return;
85
+ if (curr == null || typeof curr !== 'object' || !Object.prototype.hasOwnProperty.call(curr, seg))
86
+ return;
87
+ curr = curr[seg];
88
+ }
89
+ const last = segs[segs.length - 1];
90
+ if (DENIED.has(String(last)))
91
+ return;
92
+ if (curr != null && typeof curr === 'object') {
93
+ delete curr[last];
94
+ }
95
+ }
69
96
  /** Returns true if `obj` has an own property at every segment of `path`. */
70
97
  export function nativeHas(obj, path) {
71
98
  const segs = toSegments(path);
@@ -112,4 +139,4 @@ export function mergeContextWins(dst, src) {
112
139
  }
113
140
  return out;
114
141
  }
115
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aE9wcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbWVtb3J5L3BhdGhPcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFFSCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUVsRSxTQUFTLFVBQVUsQ0FBQyxJQUFrQztJQUNwRCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsR0FBUSxFQUFFLElBQWtDLEVBQUUsWUFBa0I7SUFDeEYsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQztJQUNmLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdkIsSUFBSSxJQUFJLElBQUksSUFBSTtZQUFFLE9BQU8sWUFBWSxDQUFDO1FBQ3RDLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFBRSxPQUFPLFlBQVksQ0FBQztRQUNqRCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUM7WUFBRSxPQUFPLFlBQVksQ0FBQztRQUMxRSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFDRCxPQUFPLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMs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QyxHQUFHLENBQUM7WUFBRSxTQUFTO1FBQzlCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QixJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN6Qix5REFBeUQ7WUFDekQsSUFDRSxNQUFNLEtBQUssSUFBSTtnQkFDZixPQUFPLE1BQU0sS0FBSyxRQUFRO2dCQUMxQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO2dCQUN0QixHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSTtnQkFDakIsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssUUFBUTtnQkFDNUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUN4QixDQUFDO2dCQUNELEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDaEQsQ0FBQztZQUNELDZCQUE2QjtRQUMvQixDQUFDO2FBQU0sQ0FBQztZQUNOLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHBhdGhPcHMudHMg4oCUIE5hdGl2ZSBuZXN0ZWQtcGF0aCBoZWxwZXJzIChyZXBsYWNlcyBsb2Rhc2guZ2V0L3NldC9oYXMvbWVyZ2V3aXRoKVxuICpcbiAqIFNlY3VyaXR5IGNvbnRyYWN0OiBhbGwgZnVuY3Rpb25zIGd1YXJkIGFnYWluc3QgcHJvdG90eXBlLXBvbGx1dGlvbiBhbmRcbiAqIHByb3RvdHlwZS1jaGFpbi1yZWFkIGF0dGFja3MuIFRoZSBERU5JRUQgc2V0IGJsb2NrcyB0aGUgdGhyZWUgY2Fub25pY2FsXG4gKiBwb2xsdXRpb24gdmVjdG9ycyAoX19wcm90b19fLCBjb25zdHJ1Y3RvciwgcHJvdG90eXBlKSBvbiBldmVyeSBmdW5jdGlvbi5cbiAqXG4gKiBJbnRlbnRpb25hbCBhc3ltbWV0cnk6XG4gKiAgIC0gbmF0aXZlU2V0ICDigJQgREVOSUVEIGNoZWNrIG9ubHkgYXQgZWFjaCBzZWdtZW50LiBObyBoYXNPd25Qcm9wZXJ0eVxuICogICAgIGNoZWNrIGlzIG5lZWRlZCBiZWNhdXNlIHdyaXRpbmcgYWx3YXlzIGNyZWF0ZXMgYW4gT1dOIHByb3BlcnR5IG9uIGBjdXJyYCxcbiAqICAgICB3aGljaCBjYW5ub3QgcG9sbHV0ZSB0aGUgcHJvdG90eXBlIGNoYWluLlxuICogICAtIG5hdGl2ZUdldCAvIG5hdGl2ZUhhcyDigJQgREVOSUVEIGNoZWNrICsgaGFzT3duUHJvcGVydHkgYXQgZXZlcnkgc3RlcC5cbiAqICAgICBSZWFkcyBmb2xsb3cgdGhlIHByb3RvdHlwZSBjaGFpbiBieSBkZWZhdWx0IChicmFja2V0IG5vdGF0aW9uKSwgc28gdGhlXG4gKiAgICAgaGFzT3duUHJvcGVydHkgZ3VhcmQgaXMgcmVxdWlyZWQgdG8gcHJldmVudCBsZWFraW5nIGluaGVyaXRlZCB2YWx1ZXNcbiAqICAgICAoZS5nLiBPYmplY3QucHJvdG90eXBlLCBPYmplY3QgY29uc3RydWN0b3IsIHRvU3RyaW5nKS5cbiAqICAgLSBtZXJnZUNvbnRleHRXaW5zIOKAlCBERU5JRUQgY2hlY2sgb25seTsgT2JqZWN0LmtleXMoKSBpcyBvd24tZW51bWVyYWJsZS1vbmx5XG4gKiAgICAgYnkgc3BlYyBzbyBwcm90b3R5cGUga2V5cyBuZXZlciBhcHBlYXIgaW4gdGhlIGl0ZXJhdGlvbi5cbiAqXG4gKiBEbyBOT1QgXCJmaXhcIiB0aGUgbmF0aXZlU2V0IGFzeW1tZXRyeSBieSBhZGRpbmcgaGFzT3duUHJvcGVydHkg4oCUIGl0IGlzXG4gKiBpbnRlbnRpb25hbCBhbmQgd291bGQgYnJlYWsgcGF0aCBjcmVhdGlvbiBmb3IgbmV3IGludGVybWVkaWF0ZSBub2Rlcy5cbiAqXG4gKiBQYXRocyBtYXkgYmUgZG90LW5vdGF0aW9uIHN0cmluZ3Mgb3IgcHJlLXNwbGl0IChzdHJpbmd8bnVtYmVyKVtdIGFycmF5cy5cbiAqL1xuXG5jb25zdCBERU5JRUQgPSBuZXcgU2V0KFsnX19wcm90b19fJywgJ2NvbnN0cnVjdG9yJywgJ3Byb3RvdHlwZSddKTtcblxuZnVuY3Rpb24gdG9TZWdtZW50cyhwYXRoOiBzdHJpbmcgfCAoc3RyaW5nIHwgbnVtYmVyKVtdKTogKHN0cmluZyB8IG51bWJlcilbXSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aCA6IHBhdGguc3BsaXQoJy4nKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIGF0IGBwYXRoYCBpbiBgb2JqYCwgcmV0dXJuaW5nIGBkZWZhdWx0VmFsdWVgIGlmIGFic2VudC5cbiAqXG4gKiBTZWN1cml0eTogZWFjaCBwYXRoIHNlZ21lbnQgaXMgY2hlY2tlZCBhZ2FpbnN0IHRoZSBERU5JRUQgbGlzdCBhbmQgcmVxdWlyZXNcbiAqIGFuIG93biBwcm9wZXJ0eSBhdCBldmVyeSBzdGVwLCBwcmV2ZW50aW5nIHByb3RvdHlwZS1jaGFpbiByZWFkcy5cbiAqIGUuZy4gbmF0aXZlR2V0KHt9LCAnX19wcm90b19fJykgYW5kIG5hdGl2ZUdldCh7fSwgJ2NvbnN0cnVjdG9yJykgYm90aCByZXR1cm5cbiAqIGBkZWZhdWx0VmFsdWVgIGluc3RlYWQgb2YgbGVha2luZyBPYmplY3QucHJvdG90eXBlIC8gdGhlIE9iamVjdCBjb25zdHJ1Y3Rvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5hdGl2ZUdldChvYmo6IGFueSwgcGF0aDogc3RyaW5nIHwgKHN0cmluZyB8IG51bWJlcilbXSwgZGVmYXVsdFZhbHVlPzogYW55KTogYW55IHtcbiAgY29uc3Qgc2VncyA9IHRvU2VnbWVudHMocGF0aCk7XG4gIGxldCBjdXJyID0gb2JqO1xuICBmb3IgKGNvbnN0IHNlZyBvZiBzZWdzKSB7XG4gICAgaWYgKGN1cnIgPT0gbnVsbCkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICBpZiAoREVOSUVELmhhcyhTdHJpbmcoc2VnKSkpIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY3Vyciwgc2VnKSkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICBjdXJyID0gY3VycltzZWddO1xuICB9XG4gIHJldHVybiBjdXJyID09PSB1bmRlZmluZWQgPyBkZWZhdWx0VmFsdWUgOiBjdXJyO1xufVxuXG4vKiogTXV0YXRlIGBvYmpgLCBzZXR0aW5nIGB2YWx1ZWAgYXQgYHBhdGhgIChjcmVhdGVzIGludGVybWVkaWF0ZSBvYmplY3RzKS4gUmV0dXJucyBgb2JqYC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuYXRpdmVTZXQob2JqOiBhbnksIHBhdGg6IHN0cmluZyB8IChzdHJpbmcgfCBudW1iZXIpW10sIHZhbHVlOiBhbnkpOiBhbnkge1xuICBjb25zdCBzZWdzID0gdG9TZWdtZW50cyhwYXRoKTtcbiAgbGV0IGN1cnIgPSBvYmo7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2Vncy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICBjb25zdCBrID0gc2Vnc1tpXTtcbiAgICBpZiAoREVOSUVELmhhcyhTdHJpbmcoaykpKSByZXR1cm4gb2JqO1xuICAgIGlmIChjdXJyW2tdID09IG51bGwgfHwgdHlwZW9mIGN1cnJba10gIT09ICdvYmplY3QnKSB7XG4gICAgICBjdXJyW2tdID0gdHlwZW9mIHNlZ3NbaSArIDFdID09PSAnbnVtYmVyJyA/IFtdIDoge307XG4gICAgfVxuICAgIGN1cnIgPSBjdXJyW2tdO1xuICB9XG4gIGNvbnN0IGxhc3QgPSBzZWdzW3NlZ3MubGVuZ3RoIC0gMV07XG4gIGlmIChERU5JRUQuaGFzKFN0cmluZyhsYXN0KSkpIHJldHVybiBvYmo7XG4gIGN1cnJbbGFzdF0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqIFJldHVybnMgdHJ1ZSBpZiBgb2JqYCBoYXMgYW4gb3duIHByb3BlcnR5IGF0IGV2ZXJ5IHNlZ21lbnQgb2YgYHBhdGhgLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5hdGl2ZUhhcyhvYmo6IGFueSwgcGF0aDogc3RyaW5nIHwgKHN0cmluZyB8IG51bWJlcilbXSk6IGJvb2xlYW4ge1xuICBjb25zdCBzZWdzID0gdG9TZWdtZW50cyhwYXRoKTtcbiAgbGV0IGN1cnIgPSBvYmo7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2Vncy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChjdXJyID09IG51bGwgfHwgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjdXJyLCBzZWdzW2ldKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChpIDwgc2Vncy5sZW5ndGggLSAxKSBjdXJyID0gY3VycltzZWdzW2ldXTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBEZWVwIG1lcmdlIHdoZXJlIGRlc3RpbmF0aW9uIHdpbnMgZm9yIGFueSBkZWZpbmVkIHZhbHVlLlxuICogRmlsbHMgbWlzc2luZyBrZXlzIGZyb20gYHNyY2AsIGJ1dCBuZXZlciBvdmVyd3JpdGVzIGRlZmluZWQga2V5cyBpbiBgZHN0YC5cbiAqIEFycmF5cyBhcmUgbm90IHJlY3Vyc2VkIOKAlCBkc3QgYXJyYXkgYWx3YXlzIHdpbnMgd2hlbiBwcmVzZW50LlxuICpcbiAqIFJlcGxhY2VzOiBgbWVyZ2VXaXRoKGRzdCwgc3JjLCAob2JqVmFsdWUpID0+IG9ialZhbHVlICE9PSB1bmRlZmluZWQgPyBvYmpWYWx1ZSA6IHVuZGVmaW5lZClgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUNvbnRleHRXaW5zKGRzdDogYW55LCBzcmM6IGFueSk6IGFueSB7XG4gIGlmICghc3JjIHx8IHR5cGVvZiBzcmMgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoc3JjKSkge1xuICAgIHJldHVybiBkc3QgIT09IHVuZGVmaW5lZCA/IGRzdCA6IHNyYztcbiAgfVxuICBjb25zdCBvdXQ6IGFueSA9IGRzdCAhPSBudWxsICYmIHR5cGVvZiBkc3QgPT09ICdvYmplY3QnID8geyAuLi5kc3QgfSA6IHt9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhzcmMpKSB7XG4gICAgaWYgKERFTklFRC5oYXMoa2V5KSkgY29udGludWU7XG4gICAgY29uc3QgZHN0VmFsID0gb3V0W2tleV07XG4gICAgaWYgKGRzdFZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBkc3Qgd2luczsgcmVjdXJzZSBvbmx5IGlmIGJvdGggc2lkZXMgYXJlIHBsYWluIG9iamVjdHNcbiAgICAgIGlmIChcbiAgICAgICAgZHN0VmFsICE9PSBudWxsICYmXG4gICAgICAgIHR5cGVvZiBkc3RWYWwgPT09ICdvYmplY3QnICYmXG4gICAgICAgICFBcnJheS5pc0FycmF5KGRzdFZhbCkgJiZcbiAgICAgICAgc3JjW2tleV0gIT09IG51bGwgJiZcbiAgICAgICAgdHlwZW9mIHNyY1trZXldID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAhQXJyYXkuaXNBcnJheShzcmNba2V5XSlcbiAgICAgICkge1xuICAgICAgICBvdXRba2V5XSA9IG1lcmdlQ29udGV4dFdpbnMoZHN0VmFsLCBzcmNba2V5XSk7XG4gICAgICB9XG4gICAgICAvLyBlbHNlIGtlZXAgZHN0VmFsIHVuY2hhbmdlZFxuICAgIH0gZWxzZSB7XG4gICAgICBvdXRba2V5XSA9IHNyY1trZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIl19
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGF0aE9wcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvbWVtb3J5L3BhdGhPcHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzQkc7QUFFSCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUVsRSxTQUFTLFVBQVUsQ0FBQyxJQUFrQztJQUNwRCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsR0FBUSxFQUFFLElBQWtDLEVBQUUsWUFBa0I7SUFDeEYsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQztJQUNmLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdkIsSUFBSSxJQUFJLElBQUksSUFBSTtZQUFFLE9BQU8sWUFBWSxDQUFDO1FBQ3RDLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFBRSxPQUFPLFlBQVksQ0FBQztRQUNqRCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUM7WUFBRSxPQUFPLFlBQVksQ0FBQztRQUMxRSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFDRCxPQUFPLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMs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RSxNQUFNLEtBQUssSUFBSTtnQkFDZixPQUFPLE1BQU0sS0FBSyxRQUFRO2dCQUMxQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO2dCQUN0QixHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSTtnQkFDakIsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssUUFBUTtnQkFDNUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUN4QixDQUFDO2dCQUNELEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDaEQsQ0FBQztZQUNELDZCQUE2QjtRQUMvQixDQUFDO2FBQU0sQ0FBQztZQUNOLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHBhdGhPcHMudHMg4oCUIE5hdGl2ZSBuZXN0ZWQtcGF0aCBoZWxwZXJzIChyZXBsYWNlcyBsb2Rhc2guZ2V0L3NldC9oYXMvbWVyZ2V3aXRoKVxuICpcbiAqIFNlY3VyaXR5IGNvbnRyYWN0OiBhbGwgZnVuY3Rpb25zIGd1YXJkIGFnYWluc3QgcHJvdG90eXBlLXBvbGx1dGlvbiBhbmRcbiAqIHByb3RvdHlwZS1jaGFpbi1yZWFkIGF0dGFja3MuIFRoZSBERU5JRUQgc2V0IGJsb2NrcyB0aGUgdGhyZWUgY2Fub25pY2FsXG4gKiBwb2xsdXRpb24gdmVjdG9ycyAoX19wcm90b19fLCBjb25zdHJ1Y3RvciwgcHJvdG90eXBlKSBvbiBldmVyeSBmdW5jdGlvbi5cbiAqXG4gKiBJbnRlbnRpb25hbCBhc3ltbWV0cnk6XG4gKiAgIC0gbmF0aXZlU2V0ICDigJQgREVOSUVEIGNoZWNrIG9ubHkgYXQgZWFjaCBzZWdtZW50LiBObyBoYXNPd25Qcm9wZXJ0eVxuICogICAgIGNoZWNrIGlzIG5lZWRlZCBiZWNhdXNlIHdyaXRpbmcgYWx3YXlzIGNyZWF0ZXMgYW4gT1dOIHByb3BlcnR5IG9uIGBjdXJyYCxcbiAqICAgICB3aGljaCBjYW5ub3QgcG9sbHV0ZSB0aGUgcHJvdG90eXBlIGNoYWluLlxuICogICAtIG5hdGl2ZUdldCAvIG5hdGl2ZUhhcyDigJQgREVOSUVEIGNoZWNrICsgaGFzT3duUHJvcGVydHkgYXQgZXZlcnkgc3RlcC5cbiAqICAgICBSZWFkcyBmb2xsb3cgdGhlIHByb3RvdHlwZSBjaGFpbiBieSBkZWZhdWx0IChicmFja2V0IG5vdGF0aW9uKSwgc28gdGhlXG4gKiAgICAgaGFzT3duUHJvcGVydHkgZ3VhcmQgaXMgcmVxdWlyZWQgdG8gcHJldmVudCBsZWFraW5nIGluaGVyaXRlZCB2YWx1ZXNcbiAqICAgICAoZS5nLiBPYmplY3QucHJvdG90eXBlLCBPYmplY3QgY29uc3RydWN0b3IsIHRvU3RyaW5nKS5cbiAqICAgLSBtZXJnZUNvbnRleHRXaW5zIOKAlCBERU5JRUQgY2hlY2sgb25seTsgT2JqZWN0LmtleXMoKSBpcyBvd24tZW51bWVyYWJsZS1vbmx5XG4gKiAgICAgYnkgc3BlYyBzbyBwcm90b3R5cGUga2V5cyBuZXZlciBhcHBlYXIgaW4gdGhlIGl0ZXJhdGlvbi5cbiAqXG4gKiBEbyBOT1QgXCJmaXhcIiB0aGUgbmF0aXZlU2V0IGFzeW1tZXRyeSBieSBhZGRpbmcgaGFzT3duUHJvcGVydHkg4oCUIGl0IGlzXG4gKiBpbnRlbnRpb25hbCBhbmQgd291bGQgYnJlYWsgcGF0aCBjcmVhdGlvbiBmb3IgbmV3IGludGVybWVkaWF0ZSBub2Rlcy5cbiAqXG4gKiBQYXRocyBtYXkgYmUgZG90LW5vdGF0aW9uIHN0cmluZ3Mgb3IgcHJlLXNwbGl0IChzdHJpbmd8bnVtYmVyKVtdIGFycmF5cy5cbiAqL1xuXG5jb25zdCBERU5JRUQgPSBuZXcgU2V0KFsnX19wcm90b19fJywgJ2NvbnN0cnVjdG9yJywgJ3Byb3RvdHlwZSddKTtcblxuZnVuY3Rpb24gdG9TZWdtZW50cyhwYXRoOiBzdHJpbmcgfCAoc3RyaW5nIHwgbnVtYmVyKVtdKTogKHN0cmluZyB8IG51bWJlcilbXSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHBhdGgpID8gcGF0aCA6IHBhdGguc3BsaXQoJy4nKTtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIGF0IGBwYXRoYCBpbiBgb2JqYCwgcmV0dXJuaW5nIGBkZWZhdWx0VmFsdWVgIGlmIGFic2VudC5cbiAqXG4gKiBTZWN1cml0eTogZWFjaCBwYXRoIHNlZ21lbnQgaXMgY2hlY2tlZCBhZ2FpbnN0IHRoZSBERU5JRUQgbGlzdCBhbmQgcmVxdWlyZXNcbiAqIGFuIG93biBwcm9wZXJ0eSBhdCBldmVyeSBzdGVwLCBwcmV2ZW50aW5nIHByb3RvdHlwZS1jaGFpbiByZWFkcy5cbiAqIGUuZy4gbmF0aXZlR2V0KHt9LCAnX19wcm90b19fJykgYW5kIG5hdGl2ZUdldCh7fSwgJ2NvbnN0cnVjdG9yJykgYm90aCByZXR1cm5cbiAqIGBkZWZhdWx0VmFsdWVgIGluc3RlYWQgb2YgbGVha2luZyBPYmplY3QucHJvdG90eXBlIC8gdGhlIE9iamVjdCBjb25zdHJ1Y3Rvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5hdGl2ZUdldChvYmo6IGFueSwgcGF0aDogc3RyaW5nIHwgKHN0cmluZyB8IG51bWJlcilbXSwgZGVmYXVsdFZhbHVlPzogYW55KTogYW55IHtcbiAgY29uc3Qgc2VncyA9IHRvU2VnbWVudHMocGF0aCk7XG4gIGxldCBjdXJyID0gb2JqO1xuICBmb3IgKGNvbnN0IHNlZyBvZiBzZWdzKSB7XG4gICAgaWYgKGN1cnIgPT0gbnVsbCkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICBpZiAoREVOSUVELmhhcyhTdHJpbmcoc2VnKSkpIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY3Vyciwgc2VnKSkgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICBjdXJyID0gY3VycltzZWddO1xuICB9XG4gIHJldHVybiBjdXJyID09PSB1bmRlZmluZWQgPyBkZWZhdWx0VmFsdWUgOiBjdXJyO1xufVxuXG4vKiogTXV0YXRlIGBvYmpgLCBzZXR0aW5nIGB2YWx1ZWAgYXQgYHBhdGhgIChjcmVhdGVzIGludGVybWVkaWF0ZSBvYmplY3RzKS4gUmV0dXJucyBgb2JqYC4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuYXRpdmVTZXQob2JqOiBhbnksIHBhdGg6IHN0cmluZyB8IChzdHJpbmcgfCBudW1iZXIpW10sIHZhbHVlOiBhbnkpOiBhbnkge1xuICBjb25zdCBzZWdzID0gdG9TZWdtZW50cyhwYXRoKTtcbiAgbGV0IGN1cnIgPSBvYmo7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc2Vncy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICBjb25zdCBrID0gc2Vnc1tpXTtcbiAgICBpZiAoREVOSUVELmhhcyhTdHJpbmcoaykpKSByZXR1cm4gb2JqO1xuICAgIGlmIChjdXJyW2tdID09IG51bGwgfHwgdHlwZW9mIGN1cnJba10gIT09ICdvYmplY3QnKSB7XG4gICAgICBjdXJyW2tdID0gdHlwZW9mIHNlZ3NbaSArIDFdID09PSAnbnVtYmVyJyA/IFtdIDoge307XG4gICAgfVxuICAgIGN1cnIgPSBjdXJyW2tdO1xuICB9XG4gIGNvbnN0IGxhc3QgPSBzZWdzW3NlZ3MubGVuZ3RoIC0gMV07XG4gIGlmIChERU5JRUQuaGFzKFN0cmluZyhsYXN0KSkpIHJldHVybiBvYmo7XG4gIGN1cnJbbGFzdF0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iajtcbn1cblxuLyoqXG4gKiBSZW1vdmUgdGhlIG93biBwcm9wZXJ0eSBhdCBgcGF0aGAgaW4gYG9iamAgKHRoZSByZXBsYXkgcHJpbWl0aXZlIGZvciB0aGVcbiAqIGBkZWxldGVgIGNvbW1pdCB2ZXJiLCAjMTNjLUIpLiBOby1vcCB3aGVuIGFueSBpbnRlcm1lZGlhdGUgc2VnbWVudCBpc1xuICogbWlzc2luZyDigJQgZGVsZXRpbmcgYW4gYWJzZW50IGtleSBoYXMgbm90aGluZyB0byByZW1vdmUuXG4gKlxuICogU2VjdXJpdHk6IHNhbWUgREVOSUVEICsgaGFzT3duUHJvcGVydHkgZGlzY2lwbGluZSBhcyBuYXRpdmVHZXQg4oCUIGV2ZXJ5XG4gKiBzZWdtZW50IGlzIGNoZWNrZWQsIHNvIGBuYXRpdmVEZWxldGUob2JqLCAnX19wcm90b19fXHUwMDFmeCcpYCBhbmRcbiAqIHByb3RvdHlwZS1jaGFpbiB3YWxrcyBhcmUgaW5lcnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuYXRpdmVEZWxldGUob2JqOiBhbnksIHBhdGg6IHN0cmluZyB8IChzdHJpbmcgfCBudW1iZXIpW10pOiB2b2lkIHtcbiAgY29uc3Qgc2VncyA9IHRvU2VnbWVudHMocGF0aCk7XG4gIGxldCBjdXJyID0gb2JqO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHNlZ3MubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgY29uc3Qgc2VnID0gc2Vnc1tpXTtcbiAgICBpZiAoREVOSUVELmhhcyhTdHJpbmcoc2VnKSkpIHJldHVybjtcbiAgICBpZiAoY3VyciA9PSBudWxsIHx8IHR5cGVvZiBjdXJyICE9PSAnb2JqZWN0JyB8fCAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGN1cnIsIHNlZykpIHJldHVybjtcbiAgICBjdXJyID0gY3VycltzZWddO1xuICB9XG4gIGNvbnN0IGxhc3QgPSBzZWdzW3NlZ3MubGVuZ3RoIC0gMV07XG4gIGlmIChERU5JRUQuaGFzKFN0cmluZyhsYXN0KSkpIHJldHVybjtcbiAgaWYgKGN1cnIgIT0gbnVsbCAmJiB0eXBlb2YgY3VyciA9PT0gJ29iamVjdCcpIHtcbiAgICBkZWxldGUgY3VycltsYXN0XTtcbiAgfVxufVxuXG4vKiogUmV0dXJucyB0cnVlIGlmIGBvYmpgIGhhcyBhbiBvd24gcHJvcGVydHkgYXQgZXZlcnkgc2VnbWVudCBvZiBgcGF0aGAuICovXG5leHBvcnQgZnVuY3Rpb24gbmF0aXZlSGFzKG9iajogYW55LCBwYXRoOiBzdHJpbmcgfCAoc3RyaW5nIHwgbnVtYmVyKVtdKTogYm9vbGVhbiB7XG4gIGNvbnN0IHNlZ3MgPSB0b1NlZ21lbnRzKHBhdGgpO1xuICBsZXQgY3VyciA9IG9iajtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWdzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGN1cnIgPT0gbnVsbCB8fCAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGN1cnIsIHNlZ3NbaV0pKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGkgPCBzZWdzLmxlbmd0aCAtIDEpIGN1cnIgPSBjdXJyW3NlZ3NbaV1dO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIERlZXAgbWVyZ2Ugd2hlcmUgZGVzdGluYXRpb24gd2lucyBmb3IgYW55IGRlZmluZWQgdmFsdWUuXG4gKiBGaWxscyBtaXNzaW5nIGtleXMgZnJvbSBgc3JjYCwgYnV0IG5ldmVyIG92ZXJ3cml0ZXMgZGVmaW5lZCBrZXlzIGluIGBkc3RgLlxuICogQXJyYXlzIGFyZSBub3QgcmVjdXJzZWQg4oCUIGRzdCBhcnJheSBhbHdheXMgd2lucyB3aGVuIHByZXNlbnQuXG4gKlxuICogUmVwbGFjZXM6IGBtZXJnZVdpdGgoZHN0LCBzcmMsIChvYmpWYWx1ZSkgPT4gb2JqVmFsdWUgIT09IHVuZGVmaW5lZCA/IG9ialZhbHVlIDogdW5kZWZpbmVkKWBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQ29udGV4dFdpbnMoZHN0OiBhbnksIHNyYzogYW55KTogYW55IHtcbiAgaWYgKCFzcmMgfHwgdHlwZW9mIHNyYyAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShzcmMpKSB7XG4gICAgcmV0dXJuIGRzdCAhPT0gdW5kZWZpbmVkID8gZHN0IDogc3JjO1xuICB9XG4gIGNvbnN0IG91dDogYW55ID0gZHN0ICE9IG51bGwgJiYgdHlwZW9mIGRzdCA9PT0gJ29iamVjdCcgPyB7IC4uLmRzdCB9IDoge307XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHNyYykpIHtcbiAgICBpZiAoREVOSUVELmhhcyhrZXkpKSBjb250aW51ZTtcbiAgICBjb25zdCBkc3RWYWwgPSBvdXRba2V5XTtcbiAgICBpZiAoZHN0VmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGRzdCB3aW5zOyByZWN1cnNlIG9ubHkgaWYgYm90aCBzaWRlcyBhcmUgcGxhaW4gb2JqZWN0c1xuICAgICAgaWYgKFxuICAgICAgICBkc3RWYWwgIT09IG51bGwgJiZcbiAgICAgICAgdHlwZW9mIGRzdFZhbCA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgIUFycmF5LmlzQXJyYXkoZHN0VmFsKSAmJlxuICAgICAgICBzcmNba2V5XSAhPT0gbnVsbCAmJlxuICAgICAgICB0eXBlb2Ygc3JjW2tleV0gPT09ICdvYmplY3QnICYmXG4gICAgICAgICFBcnJheS5pc0FycmF5KHNyY1trZXldKVxuICAgICAgKSB7XG4gICAgICAgIG91dFtrZXldID0gbWVyZ2VDb250ZXh0V2lucyhkc3RWYWwsIHNyY1trZXldKTtcbiAgICAgIH1cbiAgICAgIC8vIGVsc2Uga2VlcCBkc3RWYWwgdW5jaGFuZ2VkXG4gICAgfSBlbHNlIHtcbiAgICAgIG91dFtrZXldID0gc3JjW2tleV07XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iXX0=
@@ -8,4 +8,4 @@
8
8
  * implementation).
9
9
  */
10
10
  export { READ_PREVIEW_LENGTH, SUMMARY_PREVIEW_LENGTH } from '../capture/summarize.js';
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lbW9yeS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQStESCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogdHlwZXMudHMg4oCUIENvcmUgdHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIG1lbW9yeSBsaWJyYXJ5XG4gKlxuICogWmVybyBkZXBlbmRlbmNpZXMgb24gb2xkIGNvZGUgb3Igb3RoZXIgbGlicmFyaWVzIGluIHRoaXMgcGFja2FnZSwgd2l0aCBvbmVcbiAqIGRlbGliZXJhdGUgZXhjZXB0aW9uOiBgY2FwdHVyZS9gIOKAlCB0aGUgc3RhbmRhbG9uZSBsZWFmIG1vZHVsZSBob2xkaW5nIHRoZVxuICogc2hhcmVkIHJldGVudGlvbi1wb2xpY3kgZmFtaWx5IGFuZCBzdW1tYXJ5LW1hcmtlciBidWlsZGVycyAoZXh0cmFjdGVkIGZyb21cbiAqIGhlcmUgaW4gIzEzYy1BIHNvIHRoZSByZWFkIGFuZCB3cml0ZSBkaWFscywgYW5kIGxhdGVyIFJGQy0wMDEsIHNoYXJlIG9uZVxuICogaW1wbGVtZW50YXRpb24pLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUmV0ZW50aW9uUG9saWN5IH0gZnJvbSAnLi4vY2FwdHVyZS9wb2xpY2llcy5qcyc7XG5cbi8vIOKUgOKUgCBQYXRjaCAmIFRyYWNlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogQSBmbGF0IGtleS12YWx1ZSBiYWcgcmVwcmVzZW50aW5nIGEgc3RhdGUgcGF0Y2ggKG92ZXJ3cml0ZSBvciBtZXJnZSkuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lbW9yeVBhdGNoIHtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG4vKiogQSBzaW5nbGUgZW50cnkgaW4gdGhlIGNocm9ub2xvZ2ljYWwgb3BlcmF0aW9uIHRyYWNlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmFjZUVudHJ5IHtcbiAgLyoqIENhbm9uaWNhbCBwYXRoIHN0cmluZyAoc2VnbWVudHMgam9pbmVkIGJ5IERFTElNKS4gKi9cbiAgcGF0aDogc3RyaW5nO1xuICAvKiogJ3NldCcgPSBoYXJkIG92ZXJ3cml0ZSwgJ21lcmdlJyA9IGRlZXAgdW5pb24gbWVyZ2UuICovXG4gIHZlcmI6ICdzZXQnIHwgJ21lcmdlJztcbn1cblxuLyoqIFRoZSBhdG9taWMgYnVuZGxlIHByb2R1Y2VkIGJ5IFRyYW5zYWN0aW9uQnVmZmVyLmNvbW1pdCgpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21taXRCdW5kbGUge1xuICAvKiogQXV0by1hc3NpZ25lZCBzdGVwIGluZGV4IChzZXQgYnkgRXZlbnRMb2cucmVjb3JkKS4gKi9cbiAgaWR4PzogbnVtYmVyO1xuICAvKiogSHVtYW4tcmVhZGFibGUgc3RhZ2UgbmFtZS4gKi9cbiAgc3RhZ2U6IHN0cmluZztcbiAgLyoqIFN0YWJsZSBzdGFnZSBpZGVudGlmaWVyIChtYXRjaGVzIHNwZWMgbm9kZSBpZCkuICovXG4gIHN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIFVuaXF1ZSBwZXItZXhlY3V0aW9uLXN0ZXAgaWRlbnRpZmllci4gRm9ybWF0OiBbc3ViZmxvd1BhdGgvXXN0YWdlSWQjZXhlY3V0aW9uSW5kZXggKi9cbiAgcnVudGltZVN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIENocm9ub2xvZ2ljYWwgd3JpdGUgbG9nIGZvciBkZXRlcm1pbmlzdGljIHJlcGxheS4gKi9cbiAgdHJhY2U6IFRyYWNlRW50cnlbXTtcbiAgLyoqIFBhdGhzIHRoYXQgc2hvdWxkIGJlIHJlZGFjdGVkIGluIFVJIChzZW5zaXRpdmUgZGF0YSkuICovXG4gIHJlZGFjdGVkUGF0aHM6IHN0cmluZ1tdO1xuICAvKiogSGFyZCBvdmVyd3JpdGUgcGF0Y2hlcy4gKi9cbiAgb3ZlcndyaXRlOiBNZW1vcnlQYXRjaDtcbiAgLyoqIERlZXAgbWVyZ2UgcGF0Y2hlcy4gKi9cbiAgdXBkYXRlczogTWVtb3J5UGF0Y2g7XG59XG5cbi8vIOKUgOKUgCBGbG93IENvbnRyb2wgTmFycmF0aXZlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogVHlwZXMgb2YgY29udHJvbCBmbG93IGRlY2lzaW9ucyBjYXB0dXJlZCBieSB0aGUgZXhlY3V0aW9uIGVuZ2luZS4gKi9cbmV4cG9ydCB0eXBlIEZsb3dDb250cm9sVHlwZSA9ICduZXh0JyB8ICdicmFuY2gnIHwgJ2NoaWxkcmVuJyB8ICdzZWxlY3RlZCcgfCAnc3ViZmxvdycgfCAnbG9vcCc7XG5cbi8qKiBBIHNpbmdsZSBmbG93IGNvbnRyb2wgbmFycmF0aXZlIGVudHJ5LiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93TWVzc2FnZSB7XG4gIHR5cGU6IEZsb3dDb250cm9sVHlwZTtcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgdGFyZ2V0U3RhZ2U/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgcmF0aW9uYWxlPzogc3RyaW5nO1xuICBjb3VudD86IG51bWJlcjtcbiAgaXRlcmF0aW9uPzogbnVtYmVyO1xuICB0aW1lc3RhbXA/OiBudW1iZXI7XG59XG5cbi8vIOKUgOKUgCBSZWFkIC8gV3JpdGUgVHJhY2tpbmcgKCMxNCwgIzEzYy1BKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vXG4vLyBUaGUgcG9saWN5IGZhbWlseSBhbmQgbWFya2VyIHNoYXBlcyBhcmUgb3duZWQgYnkgYGNhcHR1cmUvYCAoc2hhcmVkIHdpdGhcbi8vIHRoZSB3cml0ZSBkaWFsIGFuZCwgbGF0ZXIsIFJGQy0wMDEncyBkZWZlcnJlZC1vYnNlcnZlciBjYXB0dXJlIHRpZXIpLlxuLy8gUmUtZXhwb3J0ZWQgaGVyZSBzbyBldmVyeSBwcmUtZXh0cmFjdGlvbiBpbXBvcnQgcGF0aCBrZWVwcyB3b3JraW5nLlxuXG5leHBvcnQgdHlwZSB7IFJldGVudGlvblBvbGljeSB9IGZyb20gJy4uL2NhcHR1cmUvcG9saWNpZXMuanMnO1xuZXhwb3J0IHR5cGUgeyBSZWFkU3VtbWFyeU1hcmtlciwgV3JpdGVTdW1tYXJ5TWFya2VyIH0gZnJvbSAnLi4vY2FwdHVyZS9zdW1tYXJpemUuanMnO1xuZXhwb3J0IHsgUkVBRF9QUkVWSUVXX0xFTkdUSCwgU1VNTUFSWV9QUkVWSUVXX0xFTkdUSCB9IGZyb20gJy4uL2NhcHR1cmUvc3VtbWFyaXplLmpzJztcblxuLyoqXG4gKiBQb2xpY3kgZm9yIGhvdyB0cmFja2VkIHJlYWRzIGFyZSByZWNvcmRlZCBpbnRvIGBTdGFnZVNuYXBzaG90LnN0YWdlUmVhZHNgLlxuICpcbiAqIC0gYCdmdWxsJ2AgKGRlZmF1bHQpIOKAlCBldmVyeSB0cmFja2VkIHJlYWQgYHN0cnVjdHVyZWRDbG9uZWBzIHRoZSB2YWx1ZSBpbnRvXG4gKiAgIHRoZSBzdGFnZSdzIHJlYWQgdmlldy4gQnl0ZS1pZGVudGljYWwgdG8gdGhlIGhpc3RvcmljYWwgYmVoYXZpb3I7IHRoaXMgaXNcbiAqICAgd2hhdCBzbmFwc2hvdCBjb25zdW1lcnMgKGxlbnMsIGFnZW50Zm9vdHByaW50KSBzZWUgdG9kYXkuXG4gKiAtIGAnc3VtbWFyeSdgIOKAlCByZWFkcyByZWNvcmQgYSBjaGVhcCB7QGxpbmsgUmVhZFN1bW1hcnlNYXJrZXJ9ICh0eXBlICsgc2l6ZVxuICogICBwcm94eSArIHNob3J0IHByZXZpZXcpIGluc3RlYWQgb2YgdGhlIGNsb25lZCB2YWx1ZS4gTygxKS1pc2ggcGVyIHJlYWQg4oCUXG4gKiAgIG5vIHZhbHVlIGNsb25lLCBubyBzZXJpYWxpemF0aW9uIG9mIGxhcmdlIG9iamVjdHMuXG4gKiAtIGAnb2ZmJ2Ag4oCUIHJlYWRzIGFyZSBub3QgcmVjb3JkZWQgYXQgYWxsOyBgc3RhZ2VSZWFkc2AgaXMgYWJzZW50IGZyb20gdGhlXG4gKiAgIHNuYXBzaG90LiBaZXJvIHBlci1yZWFkIGNvc3QuIFZhbHVlcyBhcmUgc3RpbGwgcmVhZGFibGUsIGFuZCB0aGVcbiAqICAgYFNjb3BlUmVjb3JkZXIub25SZWFkYCBldmVudCBzdGlsbCBmaXJlcyAoaXQgcGFzc2VzIHRoZSBsaXZlIHJlZmVyZW5jZSBhbmRcbiAqICAgbmV2ZXIgY2xvbmVkKSDigJQgc28gbmFycmF0aXZlIG91dHB1dCBpcyBpZGVudGljYWwgaW4gZXZlcnkgbW9kZS4gVGhlIHBvbGljeVxuICogICBzY29wZXMgT05MWSB0aGUgc25hcHNob3QncyBgc3RhZ2VSZWFkc2AgcGF5bG9hZC5cbiAqXG4gKiBTZXQgdmlhIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgcmVhZFRyYWNraW5nIH0pYCBvclxuICogYGV4ZWN1dG9yLnNldFJlYWRUcmFja2luZyhtb2RlKWAgKGJlZm9yZSBgcnVuKClgKS5cbiAqXG4gKiBBbGlhcyBvZiB0aGUgc2hhcmVkIHtAbGluayBSZXRlbnRpb25Qb2xpY3l9IGZhbWlseSAoIzEzYy1BKSDigJQga2VwdCBhcyB0aGVcbiAqIHNoaXBwZWQgcHVibGljIG5hbWUgZm9yIHRoZSByZWFkIGRpYWwuXG4gKi9cbmV4cG9ydCB0eXBlIFJlYWRUcmFja2luZ01vZGUgPSBSZXRlbnRpb25Qb2xpY3k7XG5cbi8qKlxuICogUG9saWN5IGZvciBob3cgdHJhY2tlZCB3cml0ZXMgYXJlIHJlY29yZGVkIGludG8gYFN0YWdlU25hcHNob3Quc3RhZ2VXcml0ZXNgXG4gKiAoIzEzYy1BKSDigJQgdGhlIHNpYmxpbmcgb2Yge0BsaW5rIFJlYWRUcmFja2luZ01vZGV9LlxuICpcbiAqIC0gYCdmdWxsJ2AgKGRlZmF1bHQpIOKAlCBldmVyeSB0cmFja2VkIHdyaXRlIGBzdHJ1Y3R1cmVkQ2xvbmVgcyB0aGUgdmFsdWUgaW50b1xuICogICB0aGUgc3RhZ2UncyB3cml0ZSB2aWV3LiBCeXRlLWlkZW50aWNhbCB0byB0aGUgaGlzdG9yaWNhbCBiZWhhdmlvci5cbiAqIC0gYCdzdW1tYXJ5J2Ag4oCUIHdyaXRlcyByZWNvcmQgYSBjaGVhcCB7QGxpbmsgV3JpdGVTdW1tYXJ5TWFya2VyfSBpbnN0ZWFkIG9mXG4gKiAgIHRoZSBjbG9uZWQgdmFsdWUuXG4gKiAtIGAnb2ZmJ2Ag4oCUIHdyaXRlcyBhcmUgbm90IHJlY29yZGVkIGF0IGFsbDsgYHN0YWdlV3JpdGVzYCBpcyBhYnNlbnQgZnJvbSB0aGVcbiAqICAgc25hcHNob3QuIFRoZSB3cml0ZXMgdGhlbXNlbHZlcyBzdGlsbCBjb21taXQgdG8gc2hhcmVkIHN0YXRlIGFuZCBzdGlsbFxuICogICBhcHBlYXIgaW4gdGhlIGNvbW1pdCBsb2cg4oCUIG9ubHkgdGhlIHBlci1zdGFnZSBzbmFwc2hvdCBib29ra2VlcGluZyAoYW5kXG4gKiAgIHRoZXJlZm9yZSB0aGUgY29tbWl0IG9ic2VydmVyJ3MgbXV0YXRpb25zIHBheWxvYWQpIGlzIGFmZmVjdGVkLlxuICpcbiAqIFNldCB2aWEgYG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCwgeyB3cml0ZVRyYWNraW5nIH0pYCBvclxuICogYGV4ZWN1dG9yLnNldFdyaXRlVHJhY2tpbmcobW9kZSlgIChiZWZvcmUgYHJ1bigpYCkuIFNlZVxuICogYEZsb3dDaGFydEV4ZWN1dG9yT3B0aW9ucy53cml0ZVRyYWNraW5nYCBmb3IgdGhlIGZ1bGwgb2JzZXJ2YWJsZS1jb25zZXF1ZW5jZVxuICogY29udHJhY3QgKG9uQ29tbWl0IHBheWxvYWQsIHJlZGFjdGlvbiBwcmVjZWRlbmNlLCB3aGF0IGlzIE9VVCBvZiBzY29wZSkuXG4gKi9cbmV4cG9ydCB0eXBlIFdyaXRlVHJhY2tpbmdNb2RlID0gUmV0ZW50aW9uUG9saWN5O1xuXG4vLyDilIDilIAgU3RhZ2UgU25hcHNob3Qg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKiBTZXJpYWxpc2FibGUgcmVwcmVzZW50YXRpb24gb2YgYSBzdGFnZSdzIHN0YXRlIChmb3IgZGVidWdnaW5nIC8gdmlzdWFsaXNhdGlvbikuICovXG5leHBvcnQgdHlwZSBTdGFnZVNuYXBzaG90ID0ge1xuICBpZDogc3RyaW5nO1xuICAvKiogVW5pcXVlIHBlci1leGVjdXRpb24tc3RlcCBpZGVudGlmaWVyLiBGb3JtYXQ6IFtzdWJmbG93UGF0aC9dc3RhZ2VJZCNleGVjdXRpb25JbmRleCAqL1xuICBydW50aW1lU3RhZ2VJZD86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgLyoqIEh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHdoYXQgdGhpcyBzdGFnZSBkb2VzIChmcm9tIGJ1aWxkZXIpLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqIFN1YmZsb3cgaWRlbnRpZmllciDigJQgcHJlc2VudCB3aGVuIHRoaXMgc3RhZ2UgaXMgYSBzdWJmbG93IGVudHJ5IHBvaW50LiAqL1xuICBzdWJmbG93SWQ/OiBzdHJpbmc7XG4gIGlzRGVjaWRlcj86IGJvb2xlYW47XG4gIGlzRm9yaz86IGJvb2xlYW47XG4gIC8qKiBVc2VyLWxldmVsIHdyaXRlcyBtYWRlIGJ5IHRoaXMgc3RhZ2UgKHByZS1uYW1lc3BhY2Uga2V5cyDihpIgdmFsdWVzKS5cbiAgICogIFNoYXBlIGRlcGVuZHMgb24ge0BsaW5rIFdyaXRlVHJhY2tpbmdNb2RlfTogY2xvbmVkIHZhbHVlcyB1bmRlciBgJ2Z1bGwnYFxuICAgKiAgKGRlZmF1bHQpLCB7QGxpbmsgV3JpdGVTdW1tYXJ5TWFya2VyfXMgdW5kZXIgYCdzdW1tYXJ5J2AsIGFic2VudCB1bmRlclxuICAgKiAgYCdvZmYnYC4gUmVkYWN0ZWQgd3JpdGVzIHNob3cgYCdbUkVEQUNURURdJ2AgcmVnYXJkbGVzcyBvZiBtb2RlLiAqL1xuICBzdGFnZVdyaXRlcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKiogVXNlci1sZXZlbCByZWFkcyBtYWRlIGJ5IHRoaXMgc3RhZ2UgKHByZS1uYW1lc3BhY2Uga2V5cyDihpIgdmFsdWVzIGF0IHJlYWRcbiAgICogIHRpbWUpLiBTaGFwZSBkZXBlbmRzIG9uIHtAbGluayBSZWFkVHJhY2tpbmdNb2RlfTogY2xvbmVkIHZhbHVlcyB1bmRlclxuICAgKiAgYCdmdWxsJ2AgKGRlZmF1bHQpLCB7QGxpbmsgUmVhZFN1bW1hcnlNYXJrZXJ9cyB1bmRlciBgJ3N1bW1hcnknYCwgYWJzZW50XG4gICAqICB1bmRlciBgJ29mZidgLiAqL1xuICBzdGFnZVJlYWRzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGxvZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBlcnJvcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBtZXRyaWNzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgZXZhbHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBmbG93TWVzc2FnZXM/OiBGbG93TWVzc2FnZVtdO1xuICBuZXh0PzogU3RhZ2VTbmFwc2hvdDtcbiAgY2hpbGRyZW4/OiBTdGFnZVNuYXBzaG90W107XG59O1xuXG4vLyDilIDilIAgU2NvcGUgRmFjdG9yeSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIEZvcndhcmQtZGVjbGFyZWQgc28gU3RhZ2VDb250ZXh0IGNhbiBhY2NlcHQgaXQgd2l0aG91dCBpbXBvcnRpbmcgc2NvcGUvLiAqL1xuZXhwb3J0IHR5cGUgU2NvcGVGYWN0b3J5PFRTY29wZT4gPSAoY29yZTogU3RhZ2VDb250ZXh0LCBzdGFnZU5hbWU6IHN0cmluZywgcmVhZE9ubHlDb250ZXh0PzogdW5rbm93bikgPT4gVFNjb3BlO1xuXG4vLyDilIDilIAgU3RhZ2VDb250ZXh0IChmb3J3YXJkIHJlZmVyZW5jZSBmb3IgU2NvcGVGYWN0b3J5KSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLy8gVGhlIGFjdHVhbCBjbGFzcyBsaXZlcyBpbiBTdGFnZUNvbnRleHQudHM7IHdlIGp1c3QgbmVlZCB0aGUgdHlwZSBoZXJlIGZvclxuLy8gdGhlIFNjb3BlRmFjdG9yeSBnZW5lcmljLiBUeXBlU2NyaXB0J3MgaW1wb3J0LXR5cGUgaGFuZGxlcyB0aGlzOlxuaW1wb3J0IHR5cGUgeyBTdGFnZUNvbnRleHQgfSBmcm9tICcuL1N0YWdlQ29udGV4dC5qcyc7XG4iXX0=
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lbW9yeS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQWdGSCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogdHlwZXMudHMg4oCUIENvcmUgdHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIG1lbW9yeSBsaWJyYXJ5XG4gKlxuICogWmVybyBkZXBlbmRlbmNpZXMgb24gb2xkIGNvZGUgb3Igb3RoZXIgbGlicmFyaWVzIGluIHRoaXMgcGFja2FnZSwgd2l0aCBvbmVcbiAqIGRlbGliZXJhdGUgZXhjZXB0aW9uOiBgY2FwdHVyZS9gIOKAlCB0aGUgc3RhbmRhbG9uZSBsZWFmIG1vZHVsZSBob2xkaW5nIHRoZVxuICogc2hhcmVkIHJldGVudGlvbi1wb2xpY3kgZmFtaWx5IGFuZCBzdW1tYXJ5LW1hcmtlciBidWlsZGVycyAoZXh0cmFjdGVkIGZyb21cbiAqIGhlcmUgaW4gIzEzYy1BIHNvIHRoZSByZWFkIGFuZCB3cml0ZSBkaWFscywgYW5kIGxhdGVyIFJGQy0wMDEsIHNoYXJlIG9uZVxuICogaW1wbGVtZW50YXRpb24pLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUmV0ZW50aW9uUG9saWN5IH0gZnJvbSAnLi4vY2FwdHVyZS9wb2xpY2llcy5qcyc7XG5cbi8vIOKUgOKUgCBQYXRjaCAmIFRyYWNlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogQSBmbGF0IGtleS12YWx1ZSBiYWcgcmVwcmVzZW50aW5nIGEgc3RhdGUgcGF0Y2ggKG92ZXJ3cml0ZSBvciBtZXJnZSkuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lbW9yeVBhdGNoIHtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG4vKiogQSBzaW5nbGUgZW50cnkgaW4gdGhlIGNocm9ub2xvZ2ljYWwgb3BlcmF0aW9uIHRyYWNlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmFjZUVudHJ5IHtcbiAgLyoqIENhbm9uaWNhbCBwYXRoIHN0cmluZyAoc2VnbWVudHMgam9pbmVkIGJ5IERFTElNKS4gKi9cbiAgcGF0aDogc3RyaW5nO1xuICAvKipcbiAgICogLSBgJ3NldCdgICAgIOKAlCBoYXJkIG92ZXJ3cml0ZTsgYG92ZXJ3cml0ZVtwYXRoXWAgaG9sZHMgdGhlIGZ1bGwgZmluYWwgdmFsdWUuXG4gICAqIC0gYCdtZXJnZSdgICDigJQgZGVlcCB1bmlvbiBtZXJnZTsgYHVwZGF0ZXNbcGF0aF1gIGhvbGRzIHRoZSBhY2N1bXVsYXRlZCBkZWx0YS5cbiAgICogLSBgJ2FwcGVuZCdgIOKAlCAoIzEzYy1CLCBwcm9kdWNlZCBvbmx5IHVuZGVyIHtAbGluayBDb21taXRWYWx1ZXNNb2RlfVxuICAgKiAgIGAnZGVsdGEnYCkgdGhlIHBhdGgncyBmaW5hbCB2YWx1ZSBpcyBpdHMgYmFzZSB2YWx1ZSBwbHVzIGEgdGFpbCBvZiBuZXdcbiAgICogICB0cmFpbGluZyBlbGVtZW50czsgYG92ZXJ3cml0ZVtwYXRoXWAgaG9sZHMgT05MWSB0aGUgdGFpbC4gUmVwbGF5XG4gICAqICAgcmVjb25zdHJ1Y3RzIGJ5IGNvbmNhdGVuYXRpb24uIE5PVCBpZGVtcG90ZW50IOKAlCBkZWx0YS1tb2RlIGJ1bmRsZXNcbiAgICogICBjYXJyeSBleGFjdGx5IG9uZSB0cmFjZSBlbnRyeSBwZXIgc3Vydml2aW5nIHBhdGguXG4gICAqIC0gYCdkZWxldGUnYCDigJQgKCMxM2MtQiwgcHJvZHVjZWQgb25seSB1bmRlciBgJ2RlbHRhJ2A7IGFic29yYnMgYmFja2xvZ1xuICAgKiAgIEI4KSB0aGUga2V5IHdhcyBleHBsaWNpdGx5IHJlbW92ZWQgdmlhIGBkZWxldGVWYWx1ZSgpYC4gUmVwbGF5IHJlbW92ZXNcbiAgICogICB0aGUga2V5LiBgb3ZlcndyaXRlW3BhdGhdYCBzdGlsbCBFTlVNRVJBVEVTIHRoZSBwYXRoICh2YWx1ZVxuICAgKiAgIGB1bmRlZmluZWRgKSBzbyBrZXktc2V0IGNvbnN1bWVycyBrZWVwIHNlZWluZyB0aGUgY2hhbmdlZCBrZXkuXG4gICAqXG4gICAqIGBvdmVyd3JpdGVgIHZhbHVlcyBhcmUgdGhlcmVmb3JlIFZFUkItUVVBTElGSUVEOiBjb25zdW1lcnMgdGhhdCByZWFkXG4gICAqIGBidW5kbGUub3ZlcndyaXRlW2tleV1gIGFzIFwidGhlIGZ1bGwgdmFsdWUgd3JpdHRlblwiIG11c3QgdXNlXG4gICAqIGBjb21taXRWYWx1ZUF0KGNvbW1pdExvZywgaWR4LCBrZXkpYCAoZnJvbSBgZm9vdHByaW50anMvdHJhY2VgKSB3aGVuIHRoZVxuICAgKiBsb2cgbWF5IGNvbnRhaW4gZGVsdGEtbW9kZSBidW5kbGVzLlxuICAgKi9cbiAgdmVyYjogJ3NldCcgfCAnbWVyZ2UnIHwgJ2FwcGVuZCcgfCAnZGVsZXRlJztcbn1cblxuLyoqIFRoZSBhdG9taWMgYnVuZGxlIHByb2R1Y2VkIGJ5IFRyYW5zYWN0aW9uQnVmZmVyLmNvbW1pdCgpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21taXRCdW5kbGUge1xuICAvKiogQXV0by1hc3NpZ25lZCBzdGVwIGluZGV4IChzZXQgYnkgRXZlbnRMb2cucmVjb3JkKS4gKi9cbiAgaWR4PzogbnVtYmVyO1xuICAvKiogSHVtYW4tcmVhZGFibGUgc3RhZ2UgbmFtZS4gKi9cbiAgc3RhZ2U6IHN0cmluZztcbiAgLyoqIFN0YWJsZSBzdGFnZSBpZGVudGlmaWVyIChtYXRjaGVzIHNwZWMgbm9kZSBpZCkuICovXG4gIHN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIFVuaXF1ZSBwZXItZXhlY3V0aW9uLXN0ZXAgaWRlbnRpZmllci4gRm9ybWF0OiBbc3ViZmxvd1BhdGgvXXN0YWdlSWQjZXhlY3V0aW9uSW5kZXggKi9cbiAgcnVudGltZVN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIENocm9ub2xvZ2ljYWwgd3JpdGUgbG9nIGZvciBkZXRlcm1pbmlzdGljIHJlcGxheS4gKi9cbiAgdHJhY2U6IFRyYWNlRW50cnlbXTtcbiAgLyoqIFBhdGhzIHRoYXQgc2hvdWxkIGJlIHJlZGFjdGVkIGluIFVJIChzZW5zaXRpdmUgZGF0YSkuICovXG4gIHJlZGFjdGVkUGF0aHM6IHN0cmluZ1tdO1xuICAvKiogSGFyZCBvdmVyd3JpdGUgcGF0Y2hlcy4gKi9cbiAgb3ZlcndyaXRlOiBNZW1vcnlQYXRjaDtcbiAgLyoqIERlZXAgbWVyZ2UgcGF0Y2hlcy4gKi9cbiAgdXBkYXRlczogTWVtb3J5UGF0Y2g7XG59XG5cbi8vIOKUgOKUgCBGbG93IENvbnRyb2wgTmFycmF0aXZlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogVHlwZXMgb2YgY29udHJvbCBmbG93IGRlY2lzaW9ucyBjYXB0dXJlZCBieSB0aGUgZXhlY3V0aW9uIGVuZ2luZS4gKi9cbmV4cG9ydCB0eXBlIEZsb3dDb250cm9sVHlwZSA9ICduZXh0JyB8ICdicmFuY2gnIHwgJ2NoaWxkcmVuJyB8ICdzZWxlY3RlZCcgfCAnc3ViZmxvdycgfCAnbG9vcCc7XG5cbi8qKiBBIHNpbmdsZSBmbG93IGNvbnRyb2wgbmFycmF0aXZlIGVudHJ5LiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93TWVzc2FnZSB7XG4gIHR5cGU6IEZsb3dDb250cm9sVHlwZTtcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgdGFyZ2V0U3RhZ2U/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgcmF0aW9uYWxlPzogc3RyaW5nO1xuICBjb3VudD86IG51bWJlcjtcbiAgaXRlcmF0aW9uPzogbnVtYmVyO1xuICB0aW1lc3RhbXA/OiBudW1iZXI7XG59XG5cbi8vIOKUgOKUgCBSZWFkIC8gV3JpdGUgVHJhY2tpbmcgKCMxNCwgIzEzYy1BKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vXG4vLyBUaGUgcG9saWN5IGZhbWlseSBhbmQgbWFya2VyIHNoYXBlcyBhcmUgb3duZWQgYnkgYGNhcHR1cmUvYCAoc2hhcmVkIHdpdGhcbi8vIHRoZSB3cml0ZSBkaWFsIGFuZCwgbGF0ZXIsIFJGQy0wMDEncyBkZWZlcnJlZC1vYnNlcnZlciBjYXB0dXJlIHRpZXIpLlxuLy8gUmUtZXhwb3J0ZWQgaGVyZSBzbyBldmVyeSBwcmUtZXh0cmFjdGlvbiBpbXBvcnQgcGF0aCBrZWVwcyB3b3JraW5nLlxuXG5leHBvcnQgdHlwZSB7IFJldGVudGlvblBvbGljeSB9IGZyb20gJy4uL2NhcHR1cmUvcG9saWNpZXMuanMnO1xuZXhwb3J0IHR5cGUgeyBSZWFkU3VtbWFyeU1hcmtlciwgV3JpdGVTdW1tYXJ5TWFya2VyIH0gZnJvbSAnLi4vY2FwdHVyZS9zdW1tYXJpemUuanMnO1xuZXhwb3J0IHsgUkVBRF9QUkVWSUVXX0xFTkdUSCwgU1VNTUFSWV9QUkVWSUVXX0xFTkdUSCB9IGZyb20gJy4uL2NhcHR1cmUvc3VtbWFyaXplLmpzJztcblxuLyoqXG4gKiBQb2xpY3kgZm9yIGhvdyB0cmFja2VkIHJlYWRzIGFyZSByZWNvcmRlZCBpbnRvIGBTdGFnZVNuYXBzaG90LnN0YWdlUmVhZHNgLlxuICpcbiAqIC0gYCdmdWxsJ2AgKGRlZmF1bHQpIOKAlCBldmVyeSB0cmFja2VkIHJlYWQgYHN0cnVjdHVyZWRDbG9uZWBzIHRoZSB2YWx1ZSBpbnRvXG4gKiAgIHRoZSBzdGFnZSdzIHJlYWQgdmlldy4gQnl0ZS1pZGVudGljYWwgdG8gdGhlIGhpc3RvcmljYWwgYmVoYXZpb3I7IHRoaXMgaXNcbiAqICAgd2hhdCBzbmFwc2hvdCBjb25zdW1lcnMgKGxlbnMsIGFnZW50Zm9vdHByaW50KSBzZWUgdG9kYXkuXG4gKiAtIGAnc3VtbWFyeSdgIOKAlCByZWFkcyByZWNvcmQgYSBjaGVhcCB7QGxpbmsgUmVhZFN1bW1hcnlNYXJrZXJ9ICh0eXBlICsgc2l6ZVxuICogICBwcm94eSArIHNob3J0IHByZXZpZXcpIGluc3RlYWQgb2YgdGhlIGNsb25lZCB2YWx1ZS4gTygxKS1pc2ggcGVyIHJlYWQg4oCUXG4gKiAgIG5vIHZhbHVlIGNsb25lLCBubyBzZXJpYWxpemF0aW9uIG9mIGxhcmdlIG9iamVjdHMuXG4gKiAtIGAnb2ZmJ2Ag4oCUIHJlYWRzIGFyZSBub3QgcmVjb3JkZWQgYXQgYWxsOyBgc3RhZ2VSZWFkc2AgaXMgYWJzZW50IGZyb20gdGhlXG4gKiAgIHNuYXBzaG90LiBaZXJvIHBlci1yZWFkIGNvc3QuIFZhbHVlcyBhcmUgc3RpbGwgcmVhZGFibGUsIGFuZCB0aGVcbiAqICAgYFNjb3BlUmVjb3JkZXIub25SZWFkYCBldmVudCBzdGlsbCBmaXJlcyAoaXQgcGFzc2VzIHRoZSBsaXZlIHJlZmVyZW5jZSBhbmRcbiAqICAgbmV2ZXIgY2xvbmVkKSDigJQgc28gbmFycmF0aXZlIG91dHB1dCBpcyBpZGVudGljYWwgaW4gZXZlcnkgbW9kZS4gVGhlIHBvbGljeVxuICogICBzY29wZXMgT05MWSB0aGUgc25hcHNob3QncyBgc3RhZ2VSZWFkc2AgcGF5bG9hZC5cbiAqXG4gKiBTZXQgdmlhIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgcmVhZFRyYWNraW5nIH0pYCBvclxuICogYGV4ZWN1dG9yLnNldFJlYWRUcmFja2luZyhtb2RlKWAgKGJlZm9yZSBgcnVuKClgKS5cbiAqXG4gKiBBbGlhcyBvZiB0aGUgc2hhcmVkIHtAbGluayBSZXRlbnRpb25Qb2xpY3l9IGZhbWlseSAoIzEzYy1BKSDigJQga2VwdCBhcyB0aGVcbiAqIHNoaXBwZWQgcHVibGljIG5hbWUgZm9yIHRoZSByZWFkIGRpYWwuXG4gKi9cbmV4cG9ydCB0eXBlIFJlYWRUcmFja2luZ01vZGUgPSBSZXRlbnRpb25Qb2xpY3k7XG5cbi8qKlxuICogUG9saWN5IGZvciBob3cgdHJhY2tlZCB3cml0ZXMgYXJlIHJlY29yZGVkIGludG8gYFN0YWdlU25hcHNob3Quc3RhZ2VXcml0ZXNgXG4gKiAoIzEzYy1BKSDigJQgdGhlIHNpYmxpbmcgb2Yge0BsaW5rIFJlYWRUcmFja2luZ01vZGV9LlxuICpcbiAqIC0gYCdmdWxsJ2AgKGRlZmF1bHQpIOKAlCBldmVyeSB0cmFja2VkIHdyaXRlIGBzdHJ1Y3R1cmVkQ2xvbmVgcyB0aGUgdmFsdWUgaW50b1xuICogICB0aGUgc3RhZ2UncyB3cml0ZSB2aWV3LiBCeXRlLWlkZW50aWNhbCB0byB0aGUgaGlzdG9yaWNhbCBiZWhhdmlvci5cbiAqIC0gYCdzdW1tYXJ5J2Ag4oCUIHdyaXRlcyByZWNvcmQgYSBjaGVhcCB7QGxpbmsgV3JpdGVTdW1tYXJ5TWFya2VyfSBpbnN0ZWFkIG9mXG4gKiAgIHRoZSBjbG9uZWQgdmFsdWUuXG4gKiAtIGAnb2ZmJ2Ag4oCUIHdyaXRlcyBhcmUgbm90IHJlY29yZGVkIGF0IGFsbDsgYHN0YWdlV3JpdGVzYCBpcyBhYnNlbnQgZnJvbSB0aGVcbiAqICAgc25hcHNob3QuIFRoZSB3cml0ZXMgdGhlbXNlbHZlcyBzdGlsbCBjb21taXQgdG8gc2hhcmVkIHN0YXRlIGFuZCBzdGlsbFxuICogICBhcHBlYXIgaW4gdGhlIGNvbW1pdCBsb2cg4oCUIG9ubHkgdGhlIHBlci1zdGFnZSBzbmFwc2hvdCBib29ra2VlcGluZyAoYW5kXG4gKiAgIHRoZXJlZm9yZSB0aGUgY29tbWl0IG9ic2VydmVyJ3MgbXV0YXRpb25zIHBheWxvYWQpIGlzIGFmZmVjdGVkLiAoVGhlXG4gKiAgIGNvbW1pdCBsb2cncyBvd24gdmFsdWUgZW5jb2RpbmcgaGFzIGl0cyBvd24gbG9zc2xlc3MgZGlhbCDigJRcbiAqICAge0BsaW5rIENvbW1pdFZhbHVlc01vZGV9LCAjMTNjLUIuKVxuICpcbiAqIFNldCB2aWEgYG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCwgeyB3cml0ZVRyYWNraW5nIH0pYCBvclxuICogYGV4ZWN1dG9yLnNldFdyaXRlVHJhY2tpbmcobW9kZSlgIChiZWZvcmUgYHJ1bigpYCkuIFNlZVxuICogYEZsb3dDaGFydEV4ZWN1dG9yT3B0aW9ucy53cml0ZVRyYWNraW5nYCBmb3IgdGhlIGZ1bGwgb2JzZXJ2YWJsZS1jb25zZXF1ZW5jZVxuICogY29udHJhY3QgKG9uQ29tbWl0IHBheWxvYWQsIHJlZGFjdGlvbiBwcmVjZWRlbmNlLCB3aGF0IGlzIE9VVCBvZiBzY29wZSkuXG4gKi9cbmV4cG9ydCB0eXBlIFdyaXRlVHJhY2tpbmdNb2RlID0gUmV0ZW50aW9uUG9saWN5O1xuXG4vKipcbiAqIFBvbGljeSBmb3IgaG93IGNvbW1pdC1idW5kbGUgVkFMVUVTIGFyZSBlbmNvZGVkIGludG8gdGhlIGNvbW1pdCBsb2dcbiAqICgjMTNjLUIpIOKAlCBjb21wbGV0ZXMgdGhlIGByZWFkVHJhY2tpbmdgL2B3cml0ZVRyYWNraW5nYCBkaWFsIGZhbWlseS5cbiAqIFVubGlrZSB0aG9zZSB0d28gKHdoaWNoIGdhdGUgbG9zc3kgc25hcHNob3QgYm9va2tlZXBpbmcpLCB0aGlzIGRpYWwgaXNcbiAqICoqbG9zc2xlc3MgaW4gYm90aCBtb2RlcyoqIOKAlCBpdCBjaGFuZ2VzIHRoZSBjb21taXQgbG9nJ3MgKmVuY29kaW5nKixcbiAqIG5ldmVyIGl0cyAqaW5mb3JtYXRpb24qOyBhbnkgc3RlcCdzIGZ1bGwgc3RhdGUgc3RheXMgZXhhY3RseVxuICogcmVjb25zdHJ1Y3RhYmxlIGJ5IHJlcGxheS5cbiAqXG4gKiAtIGAnZnVsbCdgIChkZWZhdWx0KSDigJQgZXZlcnkgc3Vydml2aW5nIGBzZXRgIHBhdGggc3RvcmVzIHRoZSBmdWxsIGZpbmFsXG4gKiAgIHZhbHVlLCBvbmUgdHJhY2UgZW50cnkgcGVyIG9wZXJhdGlvbi4gQnl0ZS1pZGVudGljYWwgdG8gdGhlIGhpc3RvcmljYWxcbiAqICAgYmVoYXZpb3IuXG4gKiAtIGAnZGVsdGEnYCDigJQgdHdvIGNoYW5nZXMsIGJvdGggcmVwbGF5LWNvdmVyZWQgYnkgYGFwcGx5U21hcnRNZXJnZWA6XG4gKiAgIDEuICoqYGFwcGVuZGAgZGV0ZWN0aW9uKio6IHdoZW4gYSBwYXRoJ3MgbmV0IGNoYW5nZSBpcyBcInRoZSBiYXNlIGFycmF5XG4gKiAgICAgIHBsdXMgbmV3IHRyYWlsaW5nIGVsZW1lbnRzXCIgKHN0cmljdCBwcmVmaXgpLCB0aGUgYnVuZGxlIHJlY29yZHMgT05MWVxuICogICAgICB0aGUgdGFpbCB1bmRlciBhIGB2ZXJiOiAnYXBwZW5kJ2AgdHJhY2UgZW50cnkg4oCUIHRoZSBncm93aW5nLWhpc3RvcnlcbiAqICAgICAgY29tbWl0IGxvZyBiZWNvbWVzIGxpbmVhciBpbiB0YWlsIHNpemUgaW5zdGVhZCBvZiBPKE7CsikgcmV0YWluZWQuXG4gKiAgICAgIEEgcmVhbCBgdmVyYjogJ2RlbGV0ZSdgIGVudHJ5IHJlcGxhY2VzIHRoZSBgc2V0OiB1bmRlZmluZWRgIGZsYXR0ZW5pbmdcbiAqICAgICAgZm9yIGBkZWxldGVWYWx1ZSgpYCAoY2xvc2VzIHRoZSBkb2N1bWVudGVkIE1lbW9yeVBhdGNoIGxpbWl0YXRpb24pLlxuICogICAyLiAqKk9uZSB0cmFjZSBlbnRyeSBwZXIgc3Vydml2aW5nIHBhdGgqKiAoYXBwZW5kIGlzIG5vdCBpZGVtcG90ZW50IG9uXG4gKiAgICAgIHJlcGxheSk6IHRoZSB2ZXJiIGlzIHJlc29sdmVkIGZyb20gdGhlIHBhdGgncyBiYXNl4oaSZmluYWwgcmVsYXRpb25zaGlwXG4gKiAgICAgIGFuZCBvcCBtaXg7IGVudHJpZXMgYXJlIG9yZGVyZWQgYnkgZWFjaCBwYXRoJ3MgTEFTVCB0b3VjaC5cbiAqXG4gKiBIb25lc3QgY29zdCBub3RlOiBhcHBlbmQgZGV0ZWN0aW9uIGlzIE5FVyB3YWxsIHdvcmsg4oCUIGFuIE8ofGJhc2V8KVxuICogc3RydWN0dXJhbCBwcmVmaXggY29tcGFyZSBwZXIgYXJyYXktc2V0IHBhdGggcGVyIGNvbW1pdCAodG9kYXknc1xuICogYGRlZXBFcXVhbGAgZmFzdC1mYWlscyBvbiBsZW5ndGggaW4gTygxKSBmb3IgYSBncm93biBhcnJheSkuIE9uIGEgaGl0IHRoZVxuICogY29tbWl0IGdldHMgY2hlYXBlciBpbiBib3RoIHdhbGwgYW5kIGhlYXAgKHRoZSBPKHxmaW5hbHwpIGNsb25lIHNocmlua3MgdG9cbiAqIE8ofHRhaWx8KSk7IG9uIGEgbWlzcyBpdCBwYXlzIGNvbXBhcmUgKyBmdWxsIGNsb25lLiBgJ2Z1bGwnYCBwYXlzIHplcm8g4oCUXG4gKiB0aGUgZGV0ZWN0aW9uIGJyYW5jaCBpcyBtb2RlLWdhdGVkLlxuICpcbiAqIFNldCB2aWEgYG5ldyBGbG93Q2hhcnRFeGVjdXRvcihjaGFydCwgeyBjb21taXRWYWx1ZXMgfSlgIG9yXG4gKiBgZXhlY3V0b3Iuc2V0Q29tbWl0VmFsdWVzKG1vZGUpYCAoYmVmb3JlIGBydW4oKWApLiBUaGUgYWN0aXZlIG1vZGUgaXNcbiAqIHN1cmZhY2VkIGFzIHRoZSBzbmFwc2hvdCBkaXNjcmltaW5hbnQgYFJ1bnRpbWVTbmFwc2hvdC5jb21taXRWYWx1ZXNgLlxuICovXG5leHBvcnQgdHlwZSBDb21taXRWYWx1ZXNNb2RlID0gJ2Z1bGwnIHwgJ2RlbHRhJztcblxuLy8g4pSA4pSAIFN0YWdlIFNuYXBzaG90IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogU2VyaWFsaXNhYmxlIHJlcHJlc2VudGF0aW9uIG9mIGEgc3RhZ2UncyBzdGF0ZSAoZm9yIGRlYnVnZ2luZyAvIHZpc3VhbGlzYXRpb24pLiAqL1xuZXhwb3J0IHR5cGUgU3RhZ2VTbmFwc2hvdCA9IHtcbiAgaWQ6IHN0cmluZztcbiAgLyoqIFVuaXF1ZSBwZXItZXhlY3V0aW9uLXN0ZXAgaWRlbnRpZmllci4gRm9ybWF0OiBbc3ViZmxvd1BhdGgvXXN0YWdlSWQjZXhlY3V0aW9uSW5kZXggKi9cbiAgcnVudGltZVN0YWdlSWQ/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB3aGF0IHRoaXMgc3RhZ2UgZG9lcyAoZnJvbSBidWlsZGVyKS4gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKiBTdWJmbG93IGlkZW50aWZpZXIg4oCUIHByZXNlbnQgd2hlbiB0aGlzIHN0YWdlIGlzIGEgc3ViZmxvdyBlbnRyeSBwb2ludC4gKi9cbiAgc3ViZmxvd0lkPzogc3RyaW5nO1xuICBpc0RlY2lkZXI/OiBib29sZWFuO1xuICBpc0Zvcms/OiBib29sZWFuO1xuICAvKiogVXNlci1sZXZlbCB3cml0ZXMgbWFkZSBieSB0aGlzIHN0YWdlIChwcmUtbmFtZXNwYWNlIGtleXMg4oaSIHZhbHVlcykuXG4gICAqICBTaGFwZSBkZXBlbmRzIG9uIHtAbGluayBXcml0ZVRyYWNraW5nTW9kZX06IGNsb25lZCB2YWx1ZXMgdW5kZXIgYCdmdWxsJ2BcbiAgICogIChkZWZhdWx0KSwge0BsaW5rIFdyaXRlU3VtbWFyeU1hcmtlcn1zIHVuZGVyIGAnc3VtbWFyeSdgLCBhYnNlbnQgdW5kZXJcbiAgICogIGAnb2ZmJ2AuIFJlZGFjdGVkIHdyaXRlcyBzaG93IGAnW1JFREFDVEVEXSdgIHJlZ2FyZGxlc3Mgb2YgbW9kZS4gKi9cbiAgc3RhZ2VXcml0ZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqIFVzZXItbGV2ZWwgcmVhZHMgbWFkZSBieSB0aGlzIHN0YWdlIChwcmUtbmFtZXNwYWNlIGtleXMg4oaSIHZhbHVlcyBhdCByZWFkXG4gICAqICB0aW1lKS4gU2hhcGUgZGVwZW5kcyBvbiB7QGxpbmsgUmVhZFRyYWNraW5nTW9kZX06IGNsb25lZCB2YWx1ZXMgdW5kZXJcbiAgICogIGAnZnVsbCdgIChkZWZhdWx0KSwge0BsaW5rIFJlYWRTdW1tYXJ5TWFya2VyfXMgdW5kZXIgYCdzdW1tYXJ5J2AsIGFic2VudFxuICAgKiAgdW5kZXIgYCdvZmYnYC4gKi9cbiAgc3RhZ2VSZWFkcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBsb2dzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgZXJyb3JzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgbWV0cmljczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGV2YWxzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgZmxvd01lc3NhZ2VzPzogRmxvd01lc3NhZ2VbXTtcbiAgbmV4dD86IFN0YWdlU25hcHNob3Q7XG4gIGNoaWxkcmVuPzogU3RhZ2VTbmFwc2hvdFtdO1xufTtcblxuLy8g4pSA4pSAIFNjb3BlIEZhY3Rvcnkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKiBGb3J3YXJkLWRlY2xhcmVkIHNvIFN0YWdlQ29udGV4dCBjYW4gYWNjZXB0IGl0IHdpdGhvdXQgaW1wb3J0aW5nIHNjb3BlLy4gKi9cbmV4cG9ydCB0eXBlIFNjb3BlRmFjdG9yeTxUU2NvcGU+ID0gKGNvcmU6IFN0YWdlQ29udGV4dCwgc3RhZ2VOYW1lOiBzdHJpbmcsIHJlYWRPbmx5Q29udGV4dD86IHVua25vd24pID0+IFRTY29wZTtcblxuLy8g4pSA4pSAIFN0YWdlQ29udGV4dCAoZm9yd2FyZCByZWZlcmVuY2UgZm9yIFNjb3BlRmFjdG9yeSkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8vIFRoZSBhY3R1YWwgY2xhc3MgbGl2ZXMgaW4gU3RhZ2VDb250ZXh0LnRzOyB3ZSBqdXN0IG5lZWQgdGhlIHR5cGUgaGVyZSBmb3Jcbi8vIHRoZSBTY29wZUZhY3RvcnkgZ2VuZXJpYy4gVHlwZVNjcmlwdCdzIGltcG9ydC10eXBlIGhhbmRsZXMgdGhpczpcbmltcG9ydCB0eXBlIHsgU3RhZ2VDb250ZXh0IH0gZnJvbSAnLi9TdGFnZUNvbnRleHQuanMnO1xuIl19