footprintjs 9.23.2 → 9.24.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 (54) hide show
  1. package/CLAUDE.md +4 -4
  2. package/dist/advanced.js +6 -3
  3. package/dist/esm/advanced.d.ts +1 -1
  4. package/dist/esm/advanced.js +2 -2
  5. package/dist/esm/index.d.ts +1 -1
  6. package/dist/esm/index.js +1 -1
  7. package/dist/esm/lib/builder/FlowChartBuilder.d.ts +1 -0
  8. package/dist/esm/lib/builder/FlowChartBuilder.js +17 -1
  9. package/dist/esm/lib/builder/index.d.ts +1 -1
  10. package/dist/esm/lib/builder/index.js +1 -1
  11. package/dist/esm/lib/builder/structure/StructureRecorder.d.ts +32 -0
  12. package/dist/esm/lib/builder/structure/StructureRecorder.js +1 -1
  13. package/dist/esm/lib/builder/structure/StructureRecorderDispatcher.d.ts +2 -1
  14. package/dist/esm/lib/builder/structure/StructureRecorderDispatcher.js +13 -1
  15. package/dist/esm/lib/engine/handlers/ParallelForEachHandler.d.ts +8 -0
  16. package/dist/esm/lib/engine/handlers/ParallelForEachHandler.js +11 -2
  17. package/dist/esm/lib/engine/handlers/SubflowInputMapper.d.ts +10 -1
  18. package/dist/esm/lib/engine/handlers/SubflowInputMapper.js +36 -6
  19. package/dist/esm/lib/reactive/arrayTraps.js +14 -12
  20. package/dist/esm/lib/reactive/createTypedScope.js +20 -12
  21. package/dist/esm/lib/reactive/handles.d.ts +46 -0
  22. package/dist/esm/lib/reactive/handles.js +105 -0
  23. package/dist/esm/lib/reactive/index.d.ts +1 -0
  24. package/dist/esm/lib/reactive/index.js +2 -1
  25. package/dist/esm/lib/reactive/structuralWrite.d.ts +0 -15
  26. package/dist/esm/lib/reactive/structuralWrite.js +10 -28
  27. package/dist/esm/lib/reactive/writeTraps.d.ts +4 -3
  28. package/dist/esm/lib/reactive/writeTraps.js +8 -6
  29. package/dist/index.js +1 -1
  30. package/dist/lib/builder/FlowChartBuilder.js +17 -1
  31. package/dist/lib/builder/index.js +1 -1
  32. package/dist/lib/builder/structure/StructureRecorder.js +1 -1
  33. package/dist/lib/builder/structure/StructureRecorderDispatcher.js +13 -1
  34. package/dist/lib/engine/handlers/ParallelForEachHandler.js +11 -2
  35. package/dist/lib/engine/handlers/SubflowInputMapper.js +36 -6
  36. package/dist/lib/reactive/arrayTraps.js +14 -12
  37. package/dist/lib/reactive/createTypedScope.js +20 -12
  38. package/dist/lib/reactive/handles.js +112 -0
  39. package/dist/lib/reactive/index.js +6 -2
  40. package/dist/lib/reactive/structuralWrite.js +11 -30
  41. package/dist/lib/reactive/writeTraps.js +7 -5
  42. package/dist/types/advanced.d.ts +1 -1
  43. package/dist/types/index.d.ts +1 -1
  44. package/dist/types/lib/builder/FlowChartBuilder.d.ts +1 -0
  45. package/dist/types/lib/builder/index.d.ts +1 -1
  46. package/dist/types/lib/builder/structure/StructureRecorder.d.ts +32 -0
  47. package/dist/types/lib/builder/structure/StructureRecorderDispatcher.d.ts +2 -1
  48. package/dist/types/lib/engine/handlers/ParallelForEachHandler.d.ts +8 -0
  49. package/dist/types/lib/engine/handlers/SubflowInputMapper.d.ts +10 -1
  50. package/dist/types/lib/reactive/handles.d.ts +46 -0
  51. package/dist/types/lib/reactive/index.d.ts +1 -0
  52. package/dist/types/lib/reactive/structuralWrite.d.ts +0 -15
  53. package/dist/types/lib/reactive/writeTraps.d.ts +4 -3
  54. package/package.json +1 -1
@@ -0,0 +1,46 @@
1
+ /**
2
+ * reactive/handles — which objects are the scope's HANDLES, and the value
3
+ * behind each.
4
+ *
5
+ * Every object the typed scope hands back is a Proxy bound to its stage
6
+ * (reactive/README.md, "A handle is bound to its stage"): inside the stage
7
+ * that is what makes a deep write commit and a held read stay live. A handle
8
+ * can also TRAVEL out of the stage in the library's own hands — an
9
+ * `addParallelForEach` items selector returns the array handle and its
10
+ * elements become the generated branch inputs; a subflow `inputMapper` or
11
+ * `outputMapper` hands one on; `$setValue('copy', scope.customer)` hands one
12
+ * back. Wherever the engine RECORDS a value it clones it (`structuredClone`,
13
+ * at commit since 9.23.0), and a Proxy cannot be cloned: `DataCloneError`,
14
+ * the stage's writes lost. 9.22.0–9.23.2 lost every child of a fan-out over
15
+ * object items that way (9.23.3).
16
+ *
17
+ * LAW: a handle the scope handed out is a value the engine accepts back.
18
+ * Each proxy factory registers its handle here with the same live reader its
19
+ * get trap uses, so the value behind a handle is what a read of it would
20
+ * return NOW — and the engine asks {@link unwrapHandles} at every boundary
21
+ * where app code hands it a value to record. O(1) for a handle (a WeakMap
22
+ * lookup, no walk, no JSON round-trip: a `Date` stays a `Date`); a walk only
23
+ * for a plain container the app built around handles, copy-on-write so a
24
+ * handle-free value comes back as the SAME reference.
25
+ *
26
+ * The value behind a handle is BORROWED — the same reference a read hands
27
+ * back, cloned by the buffer at commit. Never mutate it (the reads law).
28
+ */
29
+ /** Register `handle` as a scope handle whose current value `live` returns. Returns the handle. */
30
+ export declare function rememberHandle<T extends object>(handle: T, live: () => unknown): T;
31
+ /** Is `value` a handle the scope handed out? */
32
+ export declare function isHandle(value: unknown): value is object;
33
+ /** The live value behind a handle; `value` itself when it is not one. O(1). */
34
+ export declare function valueBehind(value: unknown): unknown;
35
+ /**
36
+ * `value` with every handle inside it replaced by the value behind it.
37
+ *
38
+ * A handle is replaced in O(1) and NOT entered (the state behind it holds no
39
+ * handles — they are built on read, never stored). A plain container is
40
+ * walked and copied ONLY when something inside it changed, so a handle-free
41
+ * value is returned as the same reference and a hand-built `{ item, index }`
42
+ * around one handle costs one object. Anything else (a `Date`, a `Map`, a
43
+ * class instance, a primitive) is a leaf. A cycle among plain containers is
44
+ * left as it is — `structuredClone` handles cycles; only a Proxy stops it.
45
+ */
46
+ export declare function unwrapHandles<T>(value: T): T;
@@ -0,0 +1,105 @@
1
+ /**
2
+ * reactive/handles — which objects are the scope's HANDLES, and the value
3
+ * behind each.
4
+ *
5
+ * Every object the typed scope hands back is a Proxy bound to its stage
6
+ * (reactive/README.md, "A handle is bound to its stage"): inside the stage
7
+ * that is what makes a deep write commit and a held read stay live. A handle
8
+ * can also TRAVEL out of the stage in the library's own hands — an
9
+ * `addParallelForEach` items selector returns the array handle and its
10
+ * elements become the generated branch inputs; a subflow `inputMapper` or
11
+ * `outputMapper` hands one on; `$setValue('copy', scope.customer)` hands one
12
+ * back. Wherever the engine RECORDS a value it clones it (`structuredClone`,
13
+ * at commit since 9.23.0), and a Proxy cannot be cloned: `DataCloneError`,
14
+ * the stage's writes lost. 9.22.0–9.23.2 lost every child of a fan-out over
15
+ * object items that way (9.23.3).
16
+ *
17
+ * LAW: a handle the scope handed out is a value the engine accepts back.
18
+ * Each proxy factory registers its handle here with the same live reader its
19
+ * get trap uses, so the value behind a handle is what a read of it would
20
+ * return NOW — and the engine asks {@link unwrapHandles} at every boundary
21
+ * where app code hands it a value to record. O(1) for a handle (a WeakMap
22
+ * lookup, no walk, no JSON round-trip: a `Date` stays a `Date`); a walk only
23
+ * for a plain container the app built around handles, copy-on-write so a
24
+ * handle-free value comes back as the SAME reference.
25
+ *
26
+ * The value behind a handle is BORROWED — the same reference a read hands
27
+ * back, cloned by the buffer at commit. Never mutate it (the reads law).
28
+ */
29
+ /** Every handle the four proxy factories built, mapped to its live reader. */
30
+ const LIVE = new WeakMap();
31
+ /** Register `handle` as a scope handle whose current value `live` returns. Returns the handle. */
32
+ export function rememberHandle(handle, live) {
33
+ LIVE.set(handle, live);
34
+ return handle;
35
+ }
36
+ /** Is `value` a handle the scope handed out? */
37
+ export function isHandle(value) {
38
+ return value !== null && typeof value === 'object' && LIVE.has(value);
39
+ }
40
+ /** The live value behind a handle; `value` itself when it is not one. O(1). */
41
+ export function valueBehind(value) {
42
+ if (value === null || typeof value !== 'object')
43
+ return value;
44
+ const live = LIVE.get(value);
45
+ return live === undefined ? value : live();
46
+ }
47
+ /** A plain object or array — the only containers the walk enters (a `Date`, `Map` or class instance is a leaf). */
48
+ function isPlainContainer(value) {
49
+ if (value === null || typeof value !== 'object')
50
+ return false;
51
+ if (Array.isArray(value))
52
+ return true;
53
+ const proto = Object.getPrototypeOf(value);
54
+ return proto === Object.prototype || proto === null;
55
+ }
56
+ /**
57
+ * `value` with every handle inside it replaced by the value behind it.
58
+ *
59
+ * A handle is replaced in O(1) and NOT entered (the state behind it holds no
60
+ * handles — they are built on read, never stored). A plain container is
61
+ * walked and copied ONLY when something inside it changed, so a handle-free
62
+ * value is returned as the same reference and a hand-built `{ item, index }`
63
+ * around one handle costs one object. Anything else (a `Date`, a `Map`, a
64
+ * class instance, a primitive) is a leaf. A cycle among plain containers is
65
+ * left as it is — `structuredClone` handles cycles; only a Proxy stops it.
66
+ */
67
+ export function unwrapHandles(value) {
68
+ return walk(value, new Set());
69
+ }
70
+ function walk(value, onPath) {
71
+ if (value === null || typeof value !== 'object')
72
+ return value;
73
+ const live = LIVE.get(value);
74
+ if (live !== undefined)
75
+ return live();
76
+ if (!isPlainContainer(value) || onPath.has(value))
77
+ return value;
78
+ onPath.add(value);
79
+ const out = Array.isArray(value) ? walkArray(value, onPath) : walkObject(value, onPath);
80
+ onPath.delete(value);
81
+ return out;
82
+ }
83
+ function walkArray(value, onPath) {
84
+ let copy;
85
+ for (let i = 0; i < value.length; i++) {
86
+ const next = walk(value[i], onPath);
87
+ if (next === value[i])
88
+ continue;
89
+ copy ??= [...value];
90
+ copy[i] = next;
91
+ }
92
+ return copy ?? value;
93
+ }
94
+ function walkObject(value, onPath) {
95
+ let copy;
96
+ for (const key of Object.keys(value)) {
97
+ const next = walk(value[key], onPath);
98
+ if (next === value[key])
99
+ continue;
100
+ copy ??= { ...value };
101
+ copy[key] = next;
102
+ }
103
+ return copy ?? value;
104
+ }
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcmVhY3RpdmUvaGFuZGxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBRUgsOEVBQThFO0FBQzlFLE1BQU0sSUFBSSxHQUFHLElBQUksT0FBTyxFQUF5QixDQUFDO0FBRWxELGtHQUFrRztBQUNsRyxNQUFNLFVBQVUsY0FBYyxDQUFtQixNQUFTLEVBQUUsSUFBbUI7SUFDN0UsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDdkIsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELGdEQUFnRDtBQUNoRCxNQUFNLFVBQVUsUUFBUSxDQUFDLEtBQWM7SUFDckMsT0FBTyxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hFLENBQUM7QUFFRCwrRUFBK0U7QUFDL0UsTUFBTSxVQUFVLFdBQVcsQ0FBQyxLQUFjO0lBQ3hDLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDOUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QixPQUFPLElBQUksS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDN0MsQ0FBQztBQUVELG1IQUFtSDtBQUNuSCxTQUFTLGdCQUFnQixDQUFDLEtBQWM7SUFDdEMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUM5RCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDdEMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQyxPQUFPLEtBQUssS0FBSyxNQUFNLENBQUMsU0FBUyxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUM7QUFDdEQsQ0FBQztBQUVEOzs7Ozs7Ozs7O0dBVUc7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUFJLEtBQVE7SUFDdkMsT0FBTyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksR0FBRyxFQUFFLENBQU0sQ0FBQztBQUNyQyxDQUFDO0FBRUQsU0FBUyxJQUFJLENBQUMsS0FBYyxFQUFFLE1BQW1CO0lBQy9DLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDOUQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QixJQUFJLElBQUksS0FBSyxTQUFTO1FBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQztJQUN0QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUNoRSxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xCLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDeEYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQixPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxLQUFnQixFQUFFLE1BQW1CO0lBQ3RELElBQUksSUFBMkIsQ0FBQztJQUNoQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDcEMsSUFBSSxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQztZQUFFLFNBQVM7UUFDaEMsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ2pCLENBQUM7SUFDRCxPQUFPLElBQUksSUFBSSxLQUFLLENBQUM7QUFDdkIsQ0FBQztBQUVELFNBQVMsVUFBVSxDQUFDLEtBQThCLEVBQUUsTUFBbUI7SUFDckUsSUFBSSxJQUF5QyxDQUFDO0lBQzlDLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3JDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDdEMsSUFBSSxJQUFJLEtBQUssS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUFFLFNBQVM7UUFDbEMsSUFBSSxLQUFLLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ25CLENBQUM7SUFDRCxPQUFPLElBQUksSUFBSSxLQUFLLENBQUM7QUFDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogcmVhY3RpdmUvaGFuZGxlcyDigJQgd2hpY2ggb2JqZWN0cyBhcmUgdGhlIHNjb3BlJ3MgSEFORExFUywgYW5kIHRoZSB2YWx1ZVxuICogYmVoaW5kIGVhY2guXG4gKlxuICogRXZlcnkgb2JqZWN0IHRoZSB0eXBlZCBzY29wZSBoYW5kcyBiYWNrIGlzIGEgUHJveHkgYm91bmQgdG8gaXRzIHN0YWdlXG4gKiAocmVhY3RpdmUvUkVBRE1FLm1kLCBcIkEgaGFuZGxlIGlzIGJvdW5kIHRvIGl0cyBzdGFnZVwiKTogaW5zaWRlIHRoZSBzdGFnZVxuICogdGhhdCBpcyB3aGF0IG1ha2VzIGEgZGVlcCB3cml0ZSBjb21taXQgYW5kIGEgaGVsZCByZWFkIHN0YXkgbGl2ZS4gQSBoYW5kbGVcbiAqIGNhbiBhbHNvIFRSQVZFTCBvdXQgb2YgdGhlIHN0YWdlIGluIHRoZSBsaWJyYXJ5J3Mgb3duIGhhbmRzIOKAlCBhblxuICogYGFkZFBhcmFsbGVsRm9yRWFjaGAgaXRlbXMgc2VsZWN0b3IgcmV0dXJucyB0aGUgYXJyYXkgaGFuZGxlIGFuZCBpdHNcbiAqIGVsZW1lbnRzIGJlY29tZSB0aGUgZ2VuZXJhdGVkIGJyYW5jaCBpbnB1dHM7IGEgc3ViZmxvdyBgaW5wdXRNYXBwZXJgIG9yXG4gKiBgb3V0cHV0TWFwcGVyYCBoYW5kcyBvbmUgb247IGAkc2V0VmFsdWUoJ2NvcHknLCBzY29wZS5jdXN0b21lcilgIGhhbmRzIG9uZVxuICogYmFjay4gV2hlcmV2ZXIgdGhlIGVuZ2luZSBSRUNPUkRTIGEgdmFsdWUgaXQgY2xvbmVzIGl0IChgc3RydWN0dXJlZENsb25lYCxcbiAqIGF0IGNvbW1pdCBzaW5jZSA5LjIzLjApLCBhbmQgYSBQcm94eSBjYW5ub3QgYmUgY2xvbmVkOiBgRGF0YUNsb25lRXJyb3JgLFxuICogdGhlIHN0YWdlJ3Mgd3JpdGVzIGxvc3QuIDkuMjIuMOKAkzkuMjMuMiBsb3N0IGV2ZXJ5IGNoaWxkIG9mIGEgZmFuLW91dCBvdmVyXG4gKiBvYmplY3QgaXRlbXMgdGhhdCB3YXkgKDkuMjMuMykuXG4gKlxuICogTEFXOiBhIGhhbmRsZSB0aGUgc2NvcGUgaGFuZGVkIG91dCBpcyBhIHZhbHVlIHRoZSBlbmdpbmUgYWNjZXB0cyBiYWNrLlxuICogRWFjaCBwcm94eSBmYWN0b3J5IHJlZ2lzdGVycyBpdHMgaGFuZGxlIGhlcmUgd2l0aCB0aGUgc2FtZSBsaXZlIHJlYWRlciBpdHNcbiAqIGdldCB0cmFwIHVzZXMsIHNvIHRoZSB2YWx1ZSBiZWhpbmQgYSBoYW5kbGUgaXMgd2hhdCBhIHJlYWQgb2YgaXQgd291bGRcbiAqIHJldHVybiBOT1cg4oCUIGFuZCB0aGUgZW5naW5lIGFza3Mge0BsaW5rIHVud3JhcEhhbmRsZXN9IGF0IGV2ZXJ5IGJvdW5kYXJ5XG4gKiB3aGVyZSBhcHAgY29kZSBoYW5kcyBpdCBhIHZhbHVlIHRvIHJlY29yZC4gTygxKSBmb3IgYSBoYW5kbGUgKGEgV2Vha01hcFxuICogbG9va3VwLCBubyB3YWxrLCBubyBKU09OIHJvdW5kLXRyaXA6IGEgYERhdGVgIHN0YXlzIGEgYERhdGVgKTsgYSB3YWxrIG9ubHlcbiAqIGZvciBhIHBsYWluIGNvbnRhaW5lciB0aGUgYXBwIGJ1aWx0IGFyb3VuZCBoYW5kbGVzLCBjb3B5LW9uLXdyaXRlIHNvIGFcbiAqIGhhbmRsZS1mcmVlIHZhbHVlIGNvbWVzIGJhY2sgYXMgdGhlIFNBTUUgcmVmZXJlbmNlLlxuICpcbiAqIFRoZSB2YWx1ZSBiZWhpbmQgYSBoYW5kbGUgaXMgQk9SUk9XRUQg4oCUIHRoZSBzYW1lIHJlZmVyZW5jZSBhIHJlYWQgaGFuZHNcbiAqIGJhY2ssIGNsb25lZCBieSB0aGUgYnVmZmVyIGF0IGNvbW1pdC4gTmV2ZXIgbXV0YXRlIGl0ICh0aGUgcmVhZHMgbGF3KS5cbiAqL1xuXG4vKiogRXZlcnkgaGFuZGxlIHRoZSBmb3VyIHByb3h5IGZhY3RvcmllcyBidWlsdCwgbWFwcGVkIHRvIGl0cyBsaXZlIHJlYWRlci4gKi9cbmNvbnN0IExJVkUgPSBuZXcgV2Vha01hcDxvYmplY3QsICgpID0+IHVua25vd24+KCk7XG5cbi8qKiBSZWdpc3RlciBgaGFuZGxlYCBhcyBhIHNjb3BlIGhhbmRsZSB3aG9zZSBjdXJyZW50IHZhbHVlIGBsaXZlYCByZXR1cm5zLiBSZXR1cm5zIHRoZSBoYW5kbGUuICovXG5leHBvcnQgZnVuY3Rpb24gcmVtZW1iZXJIYW5kbGU8VCBleHRlbmRzIG9iamVjdD4oaGFuZGxlOiBULCBsaXZlOiAoKSA9PiB1bmtub3duKTogVCB7XG4gIExJVkUuc2V0KGhhbmRsZSwgbGl2ZSk7XG4gIHJldHVybiBoYW5kbGU7XG59XG5cbi8qKiBJcyBgdmFsdWVgIGEgaGFuZGxlIHRoZSBzY29wZSBoYW5kZWQgb3V0PyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzSGFuZGxlKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgb2JqZWN0IHtcbiAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgTElWRS5oYXModmFsdWUpO1xufVxuXG4vKiogVGhlIGxpdmUgdmFsdWUgYmVoaW5kIGEgaGFuZGxlOyBgdmFsdWVgIGl0c2VsZiB3aGVuIGl0IGlzIG5vdCBvbmUuIE8oMSkuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVCZWhpbmQodmFsdWU6IHVua25vd24pOiB1bmtub3duIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHJldHVybiB2YWx1ZTtcbiAgY29uc3QgbGl2ZSA9IExJVkUuZ2V0KHZhbHVlKTtcbiAgcmV0dXJuIGxpdmUgPT09IHVuZGVmaW5lZCA/IHZhbHVlIDogbGl2ZSgpO1xufVxuXG4vKiogQSBwbGFpbiBvYmplY3Qgb3IgYXJyYXkg4oCUIHRoZSBvbmx5IGNvbnRhaW5lcnMgdGhlIHdhbGsgZW50ZXJzIChhIGBEYXRlYCwgYE1hcGAgb3IgY2xhc3MgaW5zdGFuY2UgaXMgYSBsZWFmKS4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5Db250YWluZXIodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVua25vd25bXSB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSByZXR1cm4gZmFsc2U7XG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcbiAgcmV0dXJuIHByb3RvID09PSBPYmplY3QucHJvdG90eXBlIHx8IHByb3RvID09PSBudWxsO1xufVxuXG4vKipcbiAqIGB2YWx1ZWAgd2l0aCBldmVyeSBoYW5kbGUgaW5zaWRlIGl0IHJlcGxhY2VkIGJ5IHRoZSB2YWx1ZSBiZWhpbmQgaXQuXG4gKlxuICogQSBoYW5kbGUgaXMgcmVwbGFjZWQgaW4gTygxKSBhbmQgTk9UIGVudGVyZWQgKHRoZSBzdGF0ZSBiZWhpbmQgaXQgaG9sZHMgbm9cbiAqIGhhbmRsZXMg4oCUIHRoZXkgYXJlIGJ1aWx0IG9uIHJlYWQsIG5ldmVyIHN0b3JlZCkuIEEgcGxhaW4gY29udGFpbmVyIGlzXG4gKiB3YWxrZWQgYW5kIGNvcGllZCBPTkxZIHdoZW4gc29tZXRoaW5nIGluc2lkZSBpdCBjaGFuZ2VkLCBzbyBhIGhhbmRsZS1mcmVlXG4gKiB2YWx1ZSBpcyByZXR1cm5lZCBhcyB0aGUgc2FtZSByZWZlcmVuY2UgYW5kIGEgaGFuZC1idWlsdCBgeyBpdGVtLCBpbmRleCB9YFxuICogYXJvdW5kIG9uZSBoYW5kbGUgY29zdHMgb25lIG9iamVjdC4gQW55dGhpbmcgZWxzZSAoYSBgRGF0ZWAsIGEgYE1hcGAsIGFcbiAqIGNsYXNzIGluc3RhbmNlLCBhIHByaW1pdGl2ZSkgaXMgYSBsZWFmLiBBIGN5Y2xlIGFtb25nIHBsYWluIGNvbnRhaW5lcnMgaXNcbiAqIGxlZnQgYXMgaXQgaXMg4oCUIGBzdHJ1Y3R1cmVkQ2xvbmVgIGhhbmRsZXMgY3ljbGVzOyBvbmx5IGEgUHJveHkgc3RvcHMgaXQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bndyYXBIYW5kbGVzPFQ+KHZhbHVlOiBUKTogVCB7XG4gIHJldHVybiB3YWxrKHZhbHVlLCBuZXcgU2V0KCkpIGFzIFQ7XG59XG5cbmZ1bmN0aW9uIHdhbGsodmFsdWU6IHVua25vd24sIG9uUGF0aDogU2V0PG9iamVjdD4pOiB1bmtub3duIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHJldHVybiB2YWx1ZTtcbiAgY29uc3QgbGl2ZSA9IExJVkUuZ2V0KHZhbHVlKTtcbiAgaWYgKGxpdmUgIT09IHVuZGVmaW5lZCkgcmV0dXJuIGxpdmUoKTtcbiAgaWYgKCFpc1BsYWluQ29udGFpbmVyKHZhbHVlKSB8fCBvblBhdGguaGFzKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICBvblBhdGguYWRkKHZhbHVlKTtcbiAgY29uc3Qgb3V0ID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB3YWxrQXJyYXkodmFsdWUsIG9uUGF0aCkgOiB3YWxrT2JqZWN0KHZhbHVlLCBvblBhdGgpO1xuICBvblBhdGguZGVsZXRlKHZhbHVlKTtcbiAgcmV0dXJuIG91dDtcbn1cblxuZnVuY3Rpb24gd2Fsa0FycmF5KHZhbHVlOiB1bmtub3duW10sIG9uUGF0aDogU2V0PG9iamVjdD4pOiB1bmtub3duW10ge1xuICBsZXQgY29weTogdW5rbm93bltdIHwgdW5kZWZpbmVkO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgbmV4dCA9IHdhbGsodmFsdWVbaV0sIG9uUGF0aCk7XG4gICAgaWYgKG5leHQgPT09IHZhbHVlW2ldKSBjb250aW51ZTtcbiAgICBjb3B5ID8/PSBbLi4udmFsdWVdO1xuICAgIGNvcHlbaV0gPSBuZXh0O1xuICB9XG4gIHJldHVybiBjb3B5ID8/IHZhbHVlO1xufVxuXG5mdW5jdGlvbiB3YWxrT2JqZWN0KHZhbHVlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgb25QYXRoOiBTZXQ8b2JqZWN0Pik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgbGV0IGNvcHk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh2YWx1ZSkpIHtcbiAgICBjb25zdCBuZXh0ID0gd2Fsayh2YWx1ZVtrZXldLCBvblBhdGgpO1xuICAgIGlmIChuZXh0ID09PSB2YWx1ZVtrZXldKSBjb250aW51ZTtcbiAgICBjb3B5ID8/PSB7IC4uLnZhbHVlIH07XG4gICAgY29weVtrZXldID0gbmV4dDtcbiAgfVxuICByZXR1cm4gY29weSA/PyB2YWx1ZTtcbn1cbiJdfQ==
@@ -11,4 +11,5 @@ export { BREAK_SETTER, EXECUTOR_INTERNAL_METHODS, IS_TYPED_SCOPE, SCOPE_METHOD_N
11
11
  export { createTypedScope } from './createTypedScope.js';
12
12
  export { shouldWrapWithProxy } from './allowlist.js';
13
13
  export { createArrayProxy } from './arrayTraps.js';
14
+ export { isHandle, unwrapHandles, valueBehind } from './handles.js';
14
15
  export { buildNestedPatch, joinPath } from './pathBuilder.js';
@@ -13,5 +13,6 @@ export { createTypedScope } from './createTypedScope.js';
13
13
  // Utilities
14
14
  export { shouldWrapWithProxy } from './allowlist.js';
15
15
  export { createArrayProxy } from './arrayTraps.js';
16
+ export { isHandle, unwrapHandles, valueBehind } from './handles.js';
16
17
  export { buildNestedPatch, joinPath } from './pathBuilder.js';
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JlYWN0aXZlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFLSCxvQkFBb0I7QUFDcEIsT0FBTyxFQUFFLFlBQVksRUFBRSx5QkFBeUIsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFekcsZUFBZTtBQUNmLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXpELFlBQVk7QUFDWixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIHJlYWN0aXZlLyAtLSBEZWVwIFByb3h5IHN5c3RlbSBmb3IgVHlwZWRTY29wZTxUPi5cbiAqXG4gKiBQcm92aWRlcyB0eXBlZCBwcm9wZXJ0eSBhY2Nlc3MgdG8gZm9vdHByaW50anMgc2NvcGUgc3RhdGU6XG4gKiAgIHNjb3BlLmNyZWRpdFRpZXIgPSAnQScgIGluc3RlYWQgb2YgIHNjb3BlLnNldFZhbHVlKCdjcmVkaXRUaWVyJywgJ0EnKVxuICogICBzY29wZS5jdXN0b21lci5hZGRyZXNzLnppcCA9ICc5MDIxMCcgIGluc3RlYWQgb2YgIHNjb3BlLnVwZGF0ZVZhbHVlKC4uLilcbiAqICAgc2NvcGUudGFncy5wdXNoKCd2aXAnKSAgaW5zdGVhZCBvZiAgc2NvcGUuc2V0VmFsdWUoJ3RhZ3MnLCBbLi4udGFncywgJ3ZpcCddKVxuICovXG5cbi8vIFR5cGVzXG5leHBvcnQgdHlwZSB7IFJlYWN0aXZlT3B0aW9ucywgUmVhY3RpdmVUYXJnZXQsIFNjb3BlTWV0aG9kcywgVHlwZWRTY29wZSB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vLyBSdW50aW1lIGNvbnN0YW50c1xuZXhwb3J0IHsgQlJFQUtfU0VUVEVSLCBFWEVDVVRPUl9JTlRFUk5BTF9NRVRIT0RTLCBJU19UWVBFRF9TQ09QRSwgU0NPUEVfTUVUSE9EX05BTUVTIH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8vIENvcmUgZmFjdG9yeVxuZXhwb3J0IHsgY3JlYXRlVHlwZWRTY29wZSB9IGZyb20gJy4vY3JlYXRlVHlwZWRTY29wZS5qcyc7XG5cbi8vIFV0aWxpdGllc1xuZXhwb3J0IHsgc2hvdWxkV3JhcFdpdGhQcm94eSB9IGZyb20gJy4vYWxsb3dsaXN0LmpzJztcbmV4cG9ydCB7IGNyZWF0ZUFycmF5UHJveHkgfSBmcm9tICcuL2FycmF5VHJhcHMuanMnO1xuZXhwb3J0IHsgYnVpbGROZXN0ZWRQYXRjaCwgam9pblBhdGggfSBmcm9tICcuL3BhdGhCdWlsZGVyLmpzJztcbiJdfQ==
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL3JlYWN0aXZlL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFLSCxvQkFBb0I7QUFDcEIsT0FBTyxFQUFFLFlBQVksRUFBRSx5QkFBeUIsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFekcsZUFBZTtBQUNmLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXpELFlBQVk7QUFDWixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiByZWFjdGl2ZS8gLS0gRGVlcCBQcm94eSBzeXN0ZW0gZm9yIFR5cGVkU2NvcGU8VD4uXG4gKlxuICogUHJvdmlkZXMgdHlwZWQgcHJvcGVydHkgYWNjZXNzIHRvIGZvb3RwcmludGpzIHNjb3BlIHN0YXRlOlxuICogICBzY29wZS5jcmVkaXRUaWVyID0gJ0EnICBpbnN0ZWFkIG9mICBzY29wZS5zZXRWYWx1ZSgnY3JlZGl0VGllcicsICdBJylcbiAqICAgc2NvcGUuY3VzdG9tZXIuYWRkcmVzcy56aXAgPSAnOTAyMTAnICBpbnN0ZWFkIG9mICBzY29wZS51cGRhdGVWYWx1ZSguLi4pXG4gKiAgIHNjb3BlLnRhZ3MucHVzaCgndmlwJykgIGluc3RlYWQgb2YgIHNjb3BlLnNldFZhbHVlKCd0YWdzJywgWy4uLnRhZ3MsICd2aXAnXSlcbiAqL1xuXG4vLyBUeXBlc1xuZXhwb3J0IHR5cGUgeyBSZWFjdGl2ZU9wdGlvbnMsIFJlYWN0aXZlVGFyZ2V0LCBTY29wZU1ldGhvZHMsIFR5cGVkU2NvcGUgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLy8gUnVudGltZSBjb25zdGFudHNcbmV4cG9ydCB7IEJSRUFLX1NFVFRFUiwgRVhFQ1VUT1JfSU5URVJOQUxfTUVUSE9EUywgSVNfVFlQRURfU0NPUEUsIFNDT1BFX01FVEhPRF9OQU1FUyB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vLyBDb3JlIGZhY3RvcnlcbmV4cG9ydCB7IGNyZWF0ZVR5cGVkU2NvcGUgfSBmcm9tICcuL2NyZWF0ZVR5cGVkU2NvcGUuanMnO1xuXG4vLyBVdGlsaXRpZXNcbmV4cG9ydCB7IHNob3VsZFdyYXBXaXRoUHJveHkgfSBmcm9tICcuL2FsbG93bGlzdC5qcyc7XG5leHBvcnQgeyBjcmVhdGVBcnJheVByb3h5IH0gZnJvbSAnLi9hcnJheVRyYXBzLmpzJztcbmV4cG9ydCB7IGlzSGFuZGxlLCB1bndyYXBIYW5kbGVzLCB2YWx1ZUJlaGluZCB9IGZyb20gJy4vaGFuZGxlcy5qcyc7XG5leHBvcnQgeyBidWlsZE5lc3RlZFBhdGNoLCBqb2luUGF0aCB9IGZyb20gJy4vcGF0aEJ1aWxkZXIuanMnO1xuIl19
@@ -14,21 +14,6 @@
14
14
  * already makes. The buffer `structuredClone`s what it stages, so the
15
15
  * detaching happens once, at the boundary that needs it.
16
16
  */
17
- /**
18
- * Strip Proxy wrappers from a value about to be stored.
19
- *
20
- * `structuredClone` in TransactionBuffer cannot clone a Proxy, and every deep
21
- * read of state hands back one — so `scope.backup = scope.customer` would
22
- * otherwise stage an unclonable value.
23
- *
24
- * KNOWN COST (landmine 1): this is a JSON round-trip, so a `Date` becomes a
25
- * string, a `Map` becomes `{}` and an own `undefined` drops. `$setValue`
26
- * bypasses it, which is why the two write paths can store different bytes.
27
- * The round-trip is applied to the ASSIGNED VALUE only — never to the
28
- * surrounding state, which reaches the buffer by reference and is detached by
29
- * `structuredClone` (Dates and Maps intact).
30
- */
31
- export declare function unwrapProxy(value: unknown): unknown;
32
17
  /**
33
18
  * Return a copy of `root` with `value` at `segments`, mutating nothing.
34
19
  *
@@ -14,34 +14,16 @@
14
14
  * already makes. The buffer `structuredClone`s what it stages, so the
15
15
  * detaching happens once, at the boundary that needs it.
16
16
  */
17
- /**
18
- * Strip Proxy wrappers from a value about to be stored.
19
- *
20
- * `structuredClone` in TransactionBuffer cannot clone a Proxy, and every deep
21
- * read of state hands back one — so `scope.backup = scope.customer` would
22
- * otherwise stage an unclonable value.
23
- *
24
- * KNOWN COST (landmine 1): this is a JSON round-trip, so a `Date` becomes a
25
- * string, a `Map` becomes `{}` and an own `undefined` drops. `$setValue`
26
- * bypasses it, which is why the two write paths can store different bytes.
27
- * The round-trip is applied to the ASSIGNED VALUE only — never to the
28
- * surrounding state, which reaches the buffer by reference and is detached by
29
- * `structuredClone` (Dates and Maps intact).
17
+ /*
18
+ * Until 9.24.0 this module also owned `unwrapProxy`, a JSON round-trip of
19
+ * every ASSIGNED value — the only way then to keep the scope's own Proxies
20
+ * out of the buffer. It cost a `Date` its type and a `Map` its members, and
21
+ * it made the trap and `$setValue` store different bytes for the same value
22
+ * (the old landmine 1). The scope's handles are recognised now
23
+ * (`handles.ts · unwrapHandles`, O(1) each), so the assigned value goes to
24
+ * the sink AS ASSIGNED and the buffer's `structuredClone` at commit is the
25
+ * one detaching step — the same law `$setValue` has always had.
30
26
  */
31
- export function unwrapProxy(value) {
32
- if (value === null || value === undefined)
33
- return value;
34
- if (typeof value !== 'object')
35
- return value;
36
- try {
37
- // JSON round-trip strips Proxies. Safe because state values must be JSON-serializable.
38
- return JSON.parse(JSON.stringify(value));
39
- }
40
- catch {
41
- // Non-serializable (functions, symbols, etc.) — return as-is
42
- return value;
43
- }
44
- }
45
27
  /** Shallow copy that preserves array-ness — the one container copy this module makes. */
46
28
  function copyContainer(node) {
47
29
  if (Array.isArray(node))
@@ -119,4 +101,4 @@ export function deleteInPath(root, segments) {
119
101
  copy[segment] = replaced;
120
102
  return copy;
121
103
  }
122
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RydWN0dXJhbFdyaXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9yZWFjdGl2ZS9zdHJ1Y3R1cmFsV3JpdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUg7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsS0FBYztJQUN4QyxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxLQUFLLFNBQVM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUN4RCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUM1QyxJQUFJLENBQUM7UUFDSCx1RkFBdUY7UUFDdkYsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsNkRBQTZEO1FBQzdELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUM7QUFFRCx5RkFBeUY7QUFDekYsU0FBUyxhQUFhLENBQUMsSUFBYTtJQUNsQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQUUsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDMUMsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVE7UUFBRSxPQUFPLEVBQUUsR0FBSSxJQUFnQyxFQUFFLENBQUM7SUFDL0YsNEVBQTRFO0lBQzVFLHlFQUF5RTtJQUN6RSxPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUM7QUFFRCxnRkFBZ0Y7QUFDaEYsU0FBUyxPQUFPLENBQUMsSUFBYSxFQUFFLE9BQWU7SUFDN0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDM0MsTUFBTSxDQUFD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QUFDLENBQUM7SUFDakMsSUFBSSxLQUFLLEtBQUssU0FBUztRQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxRQUFRLENBQUM7O1FBQzNDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxRQUFRLENBQUM7SUFDOUIsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiByZWFjdGl2ZS9zdHJ1Y3R1cmFsV3JpdGUgLS0gQnVpbGQgdGhlIE5FWFQgdmFsdWUgd2l0aG91dCB0b3VjaGluZyB0aGUgbGFzdCBvbmUuXG4gKlxuICogRXZlcnkgZGVlcCB3cml0ZSB0aGUgdHlwZWQgc2NvcGUgaW50ZXJjZXB0cyBoYXMgdGhlIHNhbWUgc2hhcGU6IFwiYXQgdGhpc1xuICogcGF0aCBpbnNpZGUgdGhlIHZhbHVlIEkgcmVhZCwgcHV0IHRoaXNcIi4gVGhlIHZhbHVlIGl0IHJlYWQgaXMgQk9SUk9XRUQg4oCUXG4gKiBiZWZvcmUgYSBzdGFnZSdzIGZpcnN0IHN0YWdlZCB3cml0ZSBpdCBpcyBhIGJhcmUgcmVmZXJlbmNlIGludG8gY29tbWl0dGVkXG4gKiBzaGFyZWQgbWVtb3J5LCBhbmQgY29tbWl0dGVkIHN0YXRlIGlzIGltbXV0YWJsZS1hZnRlci1zd2FwIChzZWVcbiAqIGBTdGFnZUNvbnRleHQuZmlyc3RUb3VjaFN0YXRlYCkuIEVkaXRpbmcgaXQgaW4gcGxhY2Ugd291bGQgY29ycnVwdCBldmVyeVxuICogaW4tZmxpZ2h0IHN0YWdlIEFORCBsZWF2ZSB0aGUgY29tbWl0IGxvZyB3aXRoIG5vdGhpbmcgdG8gcmVjb3JkLlxuICpcbiAqIFNvIHRoZSB3cml0ZSBwYXRoIG5ldmVyIG11dGF0ZXMuIEl0IENPUElFUyB0aGUgY29udGFpbmVycyBhbG9uZyB0aGUgcGF0aFxuICogKGFuZCBvbmx5IHRob3NlKSBhbmQgcmV0dXJucyBhIG5ldyByb290LCBsZWF2aW5nIGV2ZXJ5IHVudG91Y2hlZCBzaWJsaW5nXG4gKiBzaGFyZWQgYnkgcmVmZXJlbmNlIOKAlCB0aGUgc2FtZSB6ZXJvLWNsb25lIGJhcmdhaW4gdGhlIGZpcnN0LXRvdWNoIHZpZXdcbiAqIGFscmVhZHkgbWFrZXMuIFRoZSBidWZmZXIgYHN0cnVjdHVyZWRDbG9uZWBzIHdoYXQgaXQgc3RhZ2VzLCBzbyB0aGVcbiAqIGRldGFjaGluZyBoYXBwZW5zIG9uY2UsIGF0IHRoZSBib3VuZGFyeSB0aGF0IG5lZWRzIGl0LlxuICovXG5cbi8qKlxuICogU3RyaXAgUHJveHkgd3JhcHBlcnMgZnJvbSBhIHZhbHVlIGFib3V0IHRvIGJlIHN0b3JlZC5cbiAqXG4gKiBgc3RydWN0dXJlZENsb25lYCBpbiBUcmFuc2FjdGlvbkJ1ZmZlciBjYW5ub3QgY2xvbmUgYSBQcm94eSwgYW5kIGV2ZXJ5IGRlZXBcbiAqIHJlYWQgb2Ygc3RhdGUgaGFuZHMgYmFjayBvbmUg4oCUIHNvIGBzY29wZS5iYWNrdXAgPSBzY29wZS5jdXN0b21lcmAgd291bGRcbiAqIG90aGVyd2lzZSBzdGFnZSBhbiB1bmNsb25hYmxlIHZhbHVlLlxuICpcbiAqIEtOT1dOIENPU1QgKGxhbmRtaW5lIDEpOiB0aGlzIGlzIGEgSlNPTiByb3VuZC10cmlwLCBzbyBhIGBEYXRlYCBiZWNvbWVzIGFcbiAqIHN0cmluZywgYSBgTWFwYCBiZWNvbWVzIGB7fWAgYW5kIGFuIG93biBgdW5kZWZpbmVkYCBkcm9wcy4gYCRzZXRWYWx1ZWBcbiAqIGJ5cGFzc2VzIGl0LCB3aGljaCBpcyB3aHkgdGhlIHR3byB3cml0ZSBwYXRocyBjYW4gc3RvcmUgZGlmZmVyZW50IGJ5dGVzLlxuICogVGhlIHJvdW5kLXRyaXAgaXMgYXBwbGllZCB0byB0aGUgQVNTSUdORUQgVkFMVUUgb25seSDigJQgbmV2ZXIgdG8gdGhlXG4gKiBzdXJyb3VuZGluZyBzdGF0ZSwgd2hpY2ggcmVhY2hlcyB0aGUgYnVmZmVyIGJ5IHJlZmVyZW5jZSBhbmQgaXMgZGV0YWNoZWQgYnlcbiAqIGBzdHJ1Y3R1cmVkQ2xvbmVgIChEYXRlcyBhbmQgTWFwcyBpbnRhY3QpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW53cmFwUHJveHkodmFsdWU6IHVua25vd24pOiB1bmtub3duIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiB2YWx1ZTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHJldHVybiB2YWx1ZTtcbiAgdHJ5IHtcbiAgICAvLyBKU09OIHJvdW5kLXRyaXAgc3RyaXBzIFByb3hpZXMuIFNhZmUgYmVjYXVzZSBzdGF0ZSB2YWx1ZXMgbXVzdCBiZSBKU09OLXNlcmlhbGl6YWJsZS5cbiAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICB9IGNhdGNoIHtcbiAgICAvLyBOb24tc2VyaWFsaXphYmxlIChmdW5jdGlvbnMsIHN5bWJvbHMsIGV0Yy4pIOKAlCByZXR1cm4gYXMtaXNcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cblxuLyoqIFNoYWxsb3cgY29weSB0aGF0IHByZXNlcnZlcyBhcnJheS1uZXNzIOKAlCB0aGUgb25lIGNvbnRhaW5lciBjb3B5IHRoaXMgbW9kdWxlIG1ha2VzLiAqL1xuZnVuY3Rpb24gY29weUNvbnRhaW5lcihub2RlOiB1bmtub3duKTogYW55IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHJldHVybiBbLi4ubm9kZV07XG4gIGlmIChub2RlICE9PSBudWxsICYmIHR5cGVvZiBub2RlID09PSAnb2JqZWN0JykgcmV0dXJuIHsgLi4uKG5vZGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIH07XG4gIC8vIE5vdCBhIGNvbnRhaW5lciAocHJpbWl0aXZlLCBudWxsLCB1bmRlZmluZWQpOiB0aGUgcGF0aCBjb250aW51ZXMgSU5UTyBpdCxcbiAgLy8gc28gaXQgYmVjb21lcyBhIGZyZXNoIG9iamVjdCDigJQgdGhlIHNhbWUgY29lcmNpb24gYG5hdGl2ZVNldGAgcGVyZm9ybXMuXG4gIHJldHVybiB7fTtcbn1cblxuLyoqIEFuIGFycmF5IGluZGV4IHNlZ21lbnQsIG9yIGB1bmRlZmluZWRgIHdoZW4gdGhlIHNlZ21lbnQgbmFtZXMgYSBwcm9wZXJ0eS4gKi9cbmZ1bmN0aW9uIGluZGV4T2Yobm9kZTogdW5rbm93biwgc2VnbWVudDogc3RyaW5nKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KG5vZGUpKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBpID0gTnVtYmVyKHNlZ21lbnQpO1xuICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihpKSAmJiBpID49IDAgPyBpIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJldHVybiBhIGNvcHkgb2YgYHJvb3RgIHdpdGggYHZhbHVlYCBhdCBgc2VnbWVudHNgLCBtdXRhdGluZyBub3RoaW5nLlxuICpcbiAqIENvbnRhaW5lcnMgb24gdGhlIHBhdGggYXJlIHNoYWxsb3ctY29waWVkIChhcnJheXMgc3RheSBhcnJheXMpOyBldmVyeXRoaW5nXG4gKiBvZmYgdGhlIHBhdGggaXMgc2hhcmVkIGJ5IHJlZmVyZW5jZS4gQW4gZW1wdHkgcGF0aCByZXR1cm5zIGB2YWx1ZWAgaXRzZWxmLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0SW5QYXRoKHJvb3Q6IHVua25vd24sIHNlZ21lbnRzOiByZWFkb25seSBzdHJpbmdbXSwgdmFsdWU6IHVua25vd24pOiB1bmtub3duIHtcbiAgaWYgKHNlZ21lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHZhbHVlO1xuICBjb25zdCBuZXh0ID0gY29weUNvbnRhaW5lcihyb290KTtcbiAgY29uc3Qgc2VnbWVudCA9IHNlZ21lbnRzWzBdO1xuICBjb25zdCBpbmRleCA9IGluZGV4T2YobmV4dCwgc2VnbWVudCk7XG4gIGNvbnN0IGNoaWxkID0gaW5kZXggIT09IHVuZGVmaW5lZCA/IG5leHRbaW5kZXhdIDogKG5leHQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW3NlZ21lbnRdO1xuICBjb25zdCByZXBsYWNlZCA9IHNldEluUGF0aChjaGlsZCwgc2VnbWVudHMuc2xpY2UoMSksIHZhbHVlKTtcbiAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQpIG5leHRbaW5kZXhdID0gcmVwbGFjZWQ7XG4gIGVsc2UgKG5leHQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW3NlZ21lbnRdID0gcmVwbGFjZWQ7XG4gIHJldHVybiBuZXh0O1xufVxuXG4vKipcbiAqIFJldHVybiBhIGNvcHkgb2YgYHJvb3RgIHdpdGggdGhlIGtleSBhdCBgc2VnbWVudHNgIFJFTU9WRUQsIG11dGF0aW5nIG5vdGhpbmcuXG4gKlxuICogT24gYW4gYXJyYXkgdGhlIHNsb3QgaXMgcmVtb3ZlZCB3aXRoIGBzcGxpY2VgICh0aGUgYXJyYXkgc2hyaW5rcyDigJQgYGRlbGV0ZWBcbiAqIG9uIGFuIGFycmF5IGluZGV4IHdvdWxkIGxlYXZlIGEgaG9sZSwgd2hpY2ggY2Fubm90IHN1cnZpdmVcbiAqIGBzdHJ1Y3R1cmVkQ2xvbmVgIHJvdW5kLXRyaXBzIGFzIHRoZSBzYW1lIHZhbHVlKS4gQSBwYXRoIHRoYXQgZG9lcyBub3RcbiAqIGV4aXN0IHJldHVybnMgdGhlIHJvb3QgdW5jaGFuZ2VkLCBieSByZWZlcmVuY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVJblBhdGgocm9vdDogdW5rbm93biwgc2VnbWVudHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogdW5rbm93biB7XG4gIGlmIChzZWdtZW50cy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChyb290ID09PSBudWxsIHx8IHR5cGVvZiByb290ICE9PSAnb2JqZWN0JykgcmV0dXJuIHJvb3Q7XG4gIGNvbnN0IHNlZ21lbnQgPSBzZWdtZW50c1swXTtcbiAgY29uc3QgaW5kZXggPSBpbmRleE9mKHJvb3QsIHNlZ21lbnQpO1xuICBpZiAoc2VnbWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChpbmRleCA+PSAocm9vdCBhcyB1bmtub3duW10pLmxlbmd0aCkgcmV0dXJuIHJvb3Q7XG4gICAgICBjb25zdCBjb3B5ID0gWy4uLihyb290IGFzIHVua25vd25bXSldO1xuICAgICAgY29weS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgcmV0dXJuIGNvcHk7XG4gICAgfVxuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJvb3QsIHNlZ21lbnQpKSByZXR1cm4gcm9vdDtcbiAgICBjb25zdCBjb3B5ID0geyAuLi4ocm9vdCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgfTtcbiAgICBkZWxldGUgY29weVtzZWdtZW50XTtcbiAgICByZXR1cm4gY29weTtcbiAgfVxuICBjb25zdCBjaGlsZCA9IGluZGV4ICE9PSB1bmRlZmluZWQgPyAocm9vdCBhcyB1bmtub3duW10pW2luZGV4XSA6IChyb290IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtzZWdtZW50XTtcbiAgY29uc3QgcmVwbGFjZWQgPSBkZWxldGVJblBhdGgoY2hpbGQsIHNlZ21lbnRzLnNsaWNlKDEpKTtcbiAgaWYgKHJlcGxhY2VkID09PSBjaGlsZCkgcmV0dXJuIHJvb3Q7XG4gIGNvbnN0IGNvcHkgPSBjb3B5Q29udGFpbmVyKHJvb3QpO1xuICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCkgY29weVtpbmRleF0gPSByZXBsYWNlZDtcbiAgZWxzZSBjb3B5W3NlZ21lbnRdID0gcmVwbGFjZWQ7XG4gIHJldHVybiBjb3B5O1xufVxuIl19
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RydWN0dXJhbFdyaXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9yZWFjdGl2ZS9zdHJ1Y3R1cmFsV3JpdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUg7Ozs7Ozs7OztHQVNHO0FBRUgseUZBQXlGO0FBQ3pGLFNBQVMsYUFBYSxDQUFDLElBQWE7SUFDbEMsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztRQUFFLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQzFDLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRO1FBQUUsT0FBTyxFQUFFLEdBQUksSUFBZ0MsRUFBRSxDQUFDO0lBQy9GLDRFQUE0RTtJQUM1RSx5RUFBeUU7SUFDekUsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDO0FBRUQsZ0ZBQWdGO0FBQ2hGLFNBQVMsT0FBTyxDQUFDLElBQWEsRUFBRSxPQUFlO0lBQzdDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzNDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxQixPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDdkQsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FBQyxJQUFhLEVBQUUsUUFBMkIsRUFBRSxLQUFjO0lBQ2xGLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDeEMsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sS0FBSyxHQUFHLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUUsSUFBZ0MsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3RixNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDNUQsSUFBSSxLQUFLLEtBQUssU0FBUztRQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxRQUFRLENBQUM7O1FBQzFDLElBQWdDLENBQUMsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDO0lBQzNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLElBQWEsRUFBRSxRQUEyQjtJQUNyRSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQztRQUFFLE9BQU8sU0FBUyxDQUFDO0lBQzVDLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDM0QsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDckMsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzFCLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3hCLElBQUksS0FBSyxJQUFLLElBQWtCLENBQUMsTUFBTTtnQkFBRSxPQUFPLElBQUksQ0FBQztZQUNyRCxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUksSUFBa0IsQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3RCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3RFLE1BQU0sSUFBSSxHQUFHLEVBQUUsR0FBSSxJQUFnQyxFQUFFLENBQUM7UUFDdEQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUUsSUFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUUsSUFBZ0MsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1RyxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxJQUFJLFFBQVEsS0FBSyxLQUFLO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDcEMsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLElBQUksS0FBSyxLQUFLLFNBQVM7UUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSxDQUFDOztRQUMzQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDO0lBQzlCLE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogcmVhY3RpdmUvc3RydWN0dXJhbFdyaXRlIC0tIEJ1aWxkIHRoZSBORVhUIHZhbHVlIHdpdGhvdXQgdG91Y2hpbmcgdGhlIGxhc3Qgb25lLlxuICpcbiAqIEV2ZXJ5IGRlZXAgd3JpdGUgdGhlIHR5cGVkIHNjb3BlIGludGVyY2VwdHMgaGFzIHRoZSBzYW1lIHNoYXBlOiBcImF0IHRoaXNcbiAqIHBhdGggaW5zaWRlIHRoZSB2YWx1ZSBJIHJlYWQsIHB1dCB0aGlzXCIuIFRoZSB2YWx1ZSBpdCByZWFkIGlzIEJPUlJPV0VEIOKAlFxuICogYmVmb3JlIGEgc3RhZ2UncyBmaXJzdCBzdGFnZWQgd3JpdGUgaXQgaXMgYSBiYXJlIHJlZmVyZW5jZSBpbnRvIGNvbW1pdHRlZFxuICogc2hhcmVkIG1lbW9yeSwgYW5kIGNvbW1pdHRlZCBzdGF0ZSBpcyBpbW11dGFibGUtYWZ0ZXItc3dhcCAoc2VlXG4gKiBgU3RhZ2VDb250ZXh0LmZpcnN0VG91Y2hTdGF0ZWApLiBFZGl0aW5nIGl0IGluIHBsYWNlIHdvdWxkIGNvcnJ1cHQgZXZlcnlcbiAqIGluLWZsaWdodCBzdGFnZSBBTkQgbGVhdmUgdGhlIGNvbW1pdCBsb2cgd2l0aCBub3RoaW5nIHRvIHJlY29yZC5cbiAqXG4gKiBTbyB0aGUgd3JpdGUgcGF0aCBuZXZlciBtdXRhdGVzLiBJdCBDT1BJRVMgdGhlIGNvbnRhaW5lcnMgYWxvbmcgdGhlIHBhdGhcbiAqIChhbmQgb25seSB0aG9zZSkgYW5kIHJldHVybnMgYSBuZXcgcm9vdCwgbGVhdmluZyBldmVyeSB1bnRvdWNoZWQgc2libGluZ1xuICogc2hhcmVkIGJ5IHJlZmVyZW5jZSDigJQgdGhlIHNhbWUgemVyby1jbG9uZSBiYXJnYWluIHRoZSBmaXJzdC10b3VjaCB2aWV3XG4gKiBhbHJlYWR5IG1ha2VzLiBUaGUgYnVmZmVyIGBzdHJ1Y3R1cmVkQ2xvbmVgcyB3aGF0IGl0IHN0YWdlcywgc28gdGhlXG4gKiBkZXRhY2hpbmcgaGFwcGVucyBvbmNlLCBhdCB0aGUgYm91bmRhcnkgdGhhdCBuZWVkcyBpdC5cbiAqL1xuXG4vKlxuICogVW50aWwgOS4yNC4wIHRoaXMgbW9kdWxlIGFsc28gb3duZWQgYHVud3JhcFByb3h5YCwgYSBKU09OIHJvdW5kLXRyaXAgb2ZcbiAqIGV2ZXJ5IEFTU0lHTkVEIHZhbHVlIOKAlCB0aGUgb25seSB3YXkgdGhlbiB0byBrZWVwIHRoZSBzY29wZSdzIG93biBQcm94aWVzXG4gKiBvdXQgb2YgdGhlIGJ1ZmZlci4gSXQgY29zdCBhIGBEYXRlYCBpdHMgdHlwZSBhbmQgYSBgTWFwYCBpdHMgbWVtYmVycywgYW5kXG4gKiBpdCBtYWRlIHRoZSB0cmFwIGFuZCBgJHNldFZhbHVlYCBzdG9yZSBkaWZmZXJlbnQgYnl0ZXMgZm9yIHRoZSBzYW1lIHZhbHVlXG4gKiAodGhlIG9sZCBsYW5kbWluZSAxKS4gVGhlIHNjb3BlJ3MgaGFuZGxlcyBhcmUgcmVjb2duaXNlZCBub3dcbiAqIChgaGFuZGxlcy50cyDCtyB1bndyYXBIYW5kbGVzYCwgTygxKSBlYWNoKSwgc28gdGhlIGFzc2lnbmVkIHZhbHVlIGdvZXMgdG9cbiAqIHRoZSBzaW5rIEFTIEFTU0lHTkVEIGFuZCB0aGUgYnVmZmVyJ3MgYHN0cnVjdHVyZWRDbG9uZWAgYXQgY29tbWl0IGlzIHRoZVxuICogb25lIGRldGFjaGluZyBzdGVwIOKAlCB0aGUgc2FtZSBsYXcgYCRzZXRWYWx1ZWAgaGFzIGFsd2F5cyBoYWQuXG4gKi9cblxuLyoqIFNoYWxsb3cgY29weSB0aGF0IHByZXNlcnZlcyBhcnJheS1uZXNzIOKAlCB0aGUgb25lIGNvbnRhaW5lciBjb3B5IHRoaXMgbW9kdWxlIG1ha2VzLiAqL1xuZnVuY3Rpb24gY29weUNvbnRhaW5lcihub2RlOiB1bmtub3duKTogYW55IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHJldHVybiBbLi4ubm9kZV07XG4gIGlmIChub2RlICE9PSBudWxsICYmIHR5cGVvZiBub2RlID09PSAnb2JqZWN0JykgcmV0dXJuIHsgLi4uKG5vZGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIH07XG4gIC8vIE5vdCBhIGNvbnRhaW5lciAocHJpbWl0aXZlLCBudWxsLCB1bmRlZmluZWQpOiB0aGUgcGF0aCBjb250aW51ZXMgSU5UTyBpdCxcbiAgLy8gc28gaXQgYmVjb21lcyBhIGZyZXNoIG9iamVjdCDigJQgdGhlIHNhbWUgY29lcmNpb24gYG5hdGl2ZVNldGAgcGVyZm9ybXMuXG4gIHJldHVybiB7fTtcbn1cblxuLyoqIEFuIGFycmF5IGluZGV4IHNlZ21lbnQsIG9yIGB1bmRlZmluZWRgIHdoZW4gdGhlIHNlZ21lbnQgbmFtZXMgYSBwcm9wZXJ0eS4gKi9cbmZ1bmN0aW9uIGluZGV4T2Yobm9kZTogdW5rbm93biwgc2VnbWVudDogc3RyaW5nKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KG5vZGUpKSByZXR1cm4gdW5kZWZpbmVkO1xuICBjb25zdCBpID0gTnVtYmVyKHNlZ21lbnQpO1xuICByZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihpKSAmJiBpID49IDAgPyBpIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJldHVybiBhIGNvcHkgb2YgYHJvb3RgIHdpdGggYHZhbHVlYCBhdCBgc2VnbWVudHNgLCBtdXRhdGluZyBub3RoaW5nLlxuICpcbiAqIENvbnRhaW5lcnMgb24gdGhlIHBhdGggYXJlIHNoYWxsb3ctY29waWVkIChhcnJheXMgc3RheSBhcnJheXMpOyBldmVyeXRoaW5nXG4gKiBvZmYgdGhlIHBhdGggaXMgc2hhcmVkIGJ5IHJlZmVyZW5jZS4gQW4gZW1wdHkgcGF0aCByZXR1cm5zIGB2YWx1ZWAgaXRzZWxmLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0SW5QYXRoKHJvb3Q6IHVua25vd24sIHNlZ21lbnRzOiByZWFkb25seSBzdHJpbmdbXSwgdmFsdWU6IHVua25vd24pOiB1bmtub3duIHtcbiAgaWYgKHNlZ21lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHZhbHVlO1xuICBjb25zdCBuZXh0ID0gY29weUNvbnRhaW5lcihyb290KTtcbiAgY29uc3Qgc2VnbWVudCA9IHNlZ21lbnRzWzBdO1xuICBjb25zdCBpbmRleCA9IGluZGV4T2YobmV4dCwgc2VnbWVudCk7XG4gIGNvbnN0IGNoaWxkID0gaW5kZXggIT09IHVuZGVmaW5lZCA/IG5leHRbaW5kZXhdIDogKG5leHQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW3NlZ21lbnRdO1xuICBjb25zdCByZXBsYWNlZCA9IHNldEluUGF0aChjaGlsZCwgc2VnbWVudHMuc2xpY2UoMSksIHZhbHVlKTtcbiAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQpIG5leHRbaW5kZXhdID0gcmVwbGFjZWQ7XG4gIGVsc2UgKG5leHQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW3NlZ21lbnRdID0gcmVwbGFjZWQ7XG4gIHJldHVybiBuZXh0O1xufVxuXG4vKipcbiAqIFJldHVybiBhIGNvcHkgb2YgYHJvb3RgIHdpdGggdGhlIGtleSBhdCBgc2VnbWVudHNgIFJFTU9WRUQsIG11dGF0aW5nIG5vdGhpbmcuXG4gKlxuICogT24gYW4gYXJyYXkgdGhlIHNsb3QgaXMgcmVtb3ZlZCB3aXRoIGBzcGxpY2VgICh0aGUgYXJyYXkgc2hyaW5rcyDigJQgYGRlbGV0ZWBcbiAqIG9uIGFuIGFycmF5IGluZGV4IHdvdWxkIGxlYXZlIGEgaG9sZSwgd2hpY2ggY2Fubm90IHN1cnZpdmVcbiAqIGBzdHJ1Y3R1cmVkQ2xvbmVgIHJvdW5kLXRyaXBzIGFzIHRoZSBzYW1lIHZhbHVlKS4gQSBwYXRoIHRoYXQgZG9lcyBub3RcbiAqIGV4aXN0IHJldHVybnMgdGhlIHJvb3QgdW5jaGFuZ2VkLCBieSByZWZlcmVuY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVJblBhdGgocm9vdDogdW5rbm93biwgc2VnbWVudHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogdW5rbm93biB7XG4gIGlmIChzZWdtZW50cy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gIGlmIChyb290ID09PSBudWxsIHx8IHR5cGVvZiByb290ICE9PSAnb2JqZWN0JykgcmV0dXJuIHJvb3Q7XG4gIGNvbnN0IHNlZ21lbnQgPSBzZWdtZW50c1swXTtcbiAgY29uc3QgaW5kZXggPSBpbmRleE9mKHJvb3QsIHNlZ21lbnQpO1xuICBpZiAoc2VnbWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChpbmRleCA+PSAocm9vdCBhcyB1bmtub3duW10pLmxlbmd0aCkgcmV0dXJuIHJvb3Q7XG4gICAgICBjb25zdCBjb3B5ID0gWy4uLihyb290IGFzIHVua25vd25bXSldO1xuICAgICAgY29weS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgcmV0dXJuIGNvcHk7XG4gICAgfVxuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJvb3QsIHNlZ21lbnQpKSByZXR1cm4gcm9vdDtcbiAgICBjb25zdCBjb3B5ID0geyAuLi4ocm9vdCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgfTtcbiAgICBkZWxldGUgY29weVtzZWdtZW50XTtcbiAgICByZXR1cm4gY29weTtcbiAgfVxuICBjb25zdCBjaGlsZCA9IGluZGV4ICE9PSB1bmRlZmluZWQgPyAocm9vdCBhcyB1bmtub3duW10pW2luZGV4XSA6IChyb290IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtzZWdtZW50XTtcbiAgY29uc3QgcmVwbGFjZWQgPSBkZWxldGVJblBhdGgoY2hpbGQsIHNlZ21lbnRzLnNsaWNlKDEpKTtcbiAgaWYgKHJlcGxhY2VkID09PSBjaGlsZCkgcmV0dXJuIHJvb3Q7XG4gIGNvbnN0IGNvcHkgPSBjb3B5Q29udGFpbmVyKHJvb3QpO1xuICBpZiAoaW5kZXggIT09IHVuZGVmaW5lZCkgY29weVtpbmRleF0gPSByZXBsYWNlZDtcbiAgZWxzZSBjb3B5W3NlZ21lbnRdID0gcmVwbGFjZWQ7XG4gIHJldHVybiBjb3B5O1xufVxuIl19
@@ -47,9 +47,10 @@ export declare function rootKeySink(target: RootKeyTarget, readSilent: (key: str
47
47
  */
48
48
  export declare function elementSink(getCurrent: () => unknown[], commit: (next: unknown[]) => void, index: number): WriteSink;
49
49
  /**
50
- * WHY one set trap: the assigned value is unwrapped HERE (landmine 1 — the
51
- * JSON round-trip applies to what the caller handed in, never to the
52
- * surrounding state) and handed to the sink at the proxy's path plus the key.
50
+ * WHY one set trap: the assigned value is taken as a VALUE here (a handle
51
+ * becomes what it stands for, `handles.ts`; nothing else is copied — the
52
+ * buffer detaches at commit) and handed to the sink at the proxy's path plus
53
+ * the key.
53
54
  */
54
55
  export declare function sinkSetTrap(sink: WriteSink, segments: readonly string[]): ProxyHandler<object>['set'];
55
56
  /**
@@ -13,8 +13,9 @@
13
13
  * fixed in one copy of these traps and then found again in the other two).
14
14
  */
15
15
  import { nativeGet } from '../memory/pathOps.js';
16
+ import { unwrapHandles } from './handles.js';
16
17
  import { buildNestedPatch } from './pathBuilder.js';
17
- import { deleteInPath, setInPath, unwrapProxy } from './structuralWrite.js';
18
+ import { deleteInPath, setInPath } from './structuralWrite.js';
18
19
  /**
19
20
  * WHY: a write below a top-level key has TWO verbs (reactive/README.md, law
20
21
  * 3) — an object leaf is a `merge` of a nested patch, an array leaf or a
@@ -105,15 +106,16 @@ function removeInElement(getCurrent, commit, index, path) {
105
106
  commit(next);
106
107
  }
107
108
  /**
108
- * WHY one set trap: the assigned value is unwrapped HERE (landmine 1 — the
109
- * JSON round-trip applies to what the caller handed in, never to the
110
- * surrounding state) and handed to the sink at the proxy's path plus the key.
109
+ * WHY one set trap: the assigned value is taken as a VALUE here (a handle
110
+ * becomes what it stands for, `handles.ts`; nothing else is copied — the
111
+ * buffer detaches at commit) and handed to the sink at the proxy's path plus
112
+ * the key.
111
113
  */
112
114
  export function sinkSetTrap(sink, segments) {
113
115
  return (_target, prop, value) => {
114
116
  if (typeof prop !== 'string')
115
117
  return true;
116
- sink.put([...segments, prop], unwrapProxy(value));
118
+ sink.put([...segments, prop], unwrapHandles(value));
117
119
  return true;
118
120
  };
119
121
  }
@@ -129,4 +131,4 @@ export function sinkDeleteTrap(sink, segments) {
129
131
  return true;
130
132
  };
131
133
  }
132
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGVUcmFwcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcmVhY3RpdmUvd3JpdGVUcmFwcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7OztHQWFHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWpELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBc0I1RTs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUN6QixNQUFxQixFQUNyQixVQUFvQyxFQUNwQyxPQUFlLEVBQ2YsS0FBa0M7SUFFbEMsT0FBTyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM3RCxDQUFDO0FBRUQsa0ZBQWtGO0FBQ2xGLE1BQU0sV0FBVztJQUVJO0lBQ0E7SUFDQTtJQUNBO0lBSm5CLFlBQ21CLE1BQXFCLEVBQ3JCLFVBQW9DLEVBQ3BDLE9BQWUsRUFDZixLQUFrQztRQUhsQyxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLGVBQVUsR0FBVixVQUFVLENBQTBCO1FBQ3BDLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDZixVQUFLLEdBQUwsS0FBSyxDQUE2QjtJQUNsRCxDQUFDO0lBRUosbUhBQW1IO0lBQ25ILE1BQU0sQ0FBQyxJQUF1QjtRQUM1QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQyxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsSUFBZ0IsQ0FBQyxDQUFDO0lBQ3RFLENB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Q0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogcmVhY3RpdmUvd3JpdGVUcmFwcyDigJQgd2hlcmUgYSBwcm94eSdzIHdyaXRlcyBMQU5ELCBhbmQgdGhlIHR3byB0cmFwcyB0aGF0XG4gKiBzZW5kIHRoZW0gdGhlcmUuXG4gKlxuICogRXZlcnkgb2JqZWN0IHByb3h5IGluIHRoaXMgZm9sZGVyIChuZXN0ZWQsIHRlcm1pbmFsLCBlbGVtZW50KSBpbnRlcmNlcHRzXG4gKiB0aGUgc2FtZSB0aHJlZSB0aGluZ3Mg4oCUIGEgcHJvcGVydHkgc2V0LCBhIHByb3BlcnR5IGRlbGV0ZSwgYW5kIGFuIGFycmF5XG4gKiBtdXRhdGlvbiBzb21ld2hlcmUgYmVsb3cgaXQg4oCUIGFuZCBkaWZmZXJzIG9ubHkgaW4gd2hlcmUgdGhlIHdyaXRlIGdvZXM6XG4gKiBhIG5lc3RlZC90ZXJtaW5hbCBwcm94eSBjb21taXRzIHVuZGVyIGEgVE9QLUxFVkVMIEtFWSAoYW4gb2JqZWN0IHdyaXRlIGFzXG4gKiBgbWVyZ2VgIG9mIGEgcGF0Y2gsIGFuIGFycmF5IHdyaXRlIG9yIGEgZGVsZXRlIGFzIGBzZXRgIG9mIHRoZSByZWJ1aWx0XG4gKiByb290KTsgYW4gZWxlbWVudCBwcm94eSBjb21taXRzIHRoZSBXSE9MRSBPV05JTkcgQVJSQVkgYmFjayB0aHJvdWdoIHRoZVxuICogYXJyYXkgcHJveHkncyBvd24gY2FsbGJhY2suIFRoYXQgZGlmZmVyZW5jZSBpcyBhIHtAbGluayBXcml0ZVNpbmt9OyB0aGVcbiAqIHRyYXBzIGFyZSB3cml0dGVuIG9uY2Ugb3ZlciBpdCAoOS4yMy4xIOKAlCB0aGUgOS4yMi4wIHN0YWxlLXJlYWQgYnVnIHdhc1xuICogZml4ZWQgaW4gb25lIGNvcHkgb2YgdGhlc2UgdHJhcHMgYW5kIHRoZW4gZm91bmQgYWdhaW4gaW4gdGhlIG90aGVyIHR3bykuXG4gKi9cblxuaW1wb3J0IHsgbmF0aXZlR2V0IH0gZnJvbSAnLi4vbWVtb3J5L3BhdGhPcHMuanMnO1xuaW1wb3J0IHR5cGUgeyBNZW1iZXJDYWNoZSB9IGZyb20gJy4vbGl2ZVZpZXcuanMnO1xuaW1wb3J0IHsgYnVpbGROZXN0ZWRQYXRjaCB9IGZyb20gJy4vcGF0aEJ1aWxkZXIuanMnO1xuaW1wb3J0IHsgZGVsZXRlSW5QYXRoLCBzZXRJblBhdGgsIHVud3JhcFByb3h5IH0gZnJvbSAnLi9zdHJ1Y3R1cmFsV3JpdGUuanMnO1xuXG4vKipcbiAqIFRoZSBzZWFtIGJldHdlZW4gYSBwcm94eSBhbmQgc3RhdGUuIGBwYXRoYCBpcyBtZWFzdXJlZCBmcm9tIHRoZSBzaW5rJ3NcbiAqIHJvb3Qg4oCUIHRoZSBrZXkncyB2YWx1ZSBmb3Ige0BsaW5rIHJvb3RLZXlTaW5rfSwgdGhlIGVsZW1lbnQgZm9yXG4gKiB7QGxpbmsgZWxlbWVudFNpbmt9OyBgW11gIGlzIHRoZSByb290IGl0c2VsZi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXcml0ZVNpbmsge1xuICAvKiogVGhlIHZhbHVlIGF0IGBwYXRoYCwgYXMgaXQgc3RhbmRzIE5PVyAocmVhZC15b3VyLXdyaXRlczsgbmV2ZXIgYSB0cmFja2VkIHJlYWQpLiAqL1xuICByZWFkQXQocGF0aDogcmVhZG9ubHkgc3RyaW5nW10pOiB1bmtub3duO1xuICAvKiogUHV0IGFuIGFscmVhZHktdW53cmFwcGVkIGB2YWx1ZWAgYXQgYHBhdGhgLiBUaGUgc2luayBjaG9vc2VzIHRoZSB2ZXJiLiAqL1xuICBwdXQocGF0aDogcmVhZG9ubHkgc3RyaW5nW10sIHZhbHVlOiB1bmtub3duKTogdm9pZDtcbiAgLyoqIFJlbW92ZSB0aGUga2V5IGF0IGBwYXRoYC4gKi9cbiAgcmVtb3ZlKHBhdGg6IHJlYWRvbmx5IHN0cmluZ1tdKTogdm9pZDtcbn1cblxuLyoqIFRoZSB0d28gd2F5cyBhIHZhbHVlIHJlYWNoZXMgYSBzdGF0ZSBrZXk6IHdoYXQgdGhlIHNpbmsgd3JpdGVzIHRocm91Z2guICovXG5leHBvcnQgaW50ZXJmYWNlIFJvb3RLZXlUYXJnZXQge1xuICBzZXRWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkO1xuICB1cGRhdGVWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkO1xufVxuXG4vKipcbiAqIFdIWTogYSB3cml0ZSBiZWxvdyBhIHRvcC1sZXZlbCBrZXkgaGFzIFRXTyB2ZXJicyAocmVhY3RpdmUvUkVBRE1FLm1kLCBsYXdcbiAqIDMpIOKAlCBhbiBvYmplY3QgbGVhZiBpcyBhIGBtZXJnZWAgb2YgYSBuZXN0ZWQgcGF0Y2gsIGFuIGFycmF5IGxlYWYgb3IgYVxuICogZGVsZXRlIHJlYnVpbGRzIHRoZSByb290IGltbXV0YWJseSBhbmQgY29tbWl0cyBhIGBzZXRgIG9mIHRoZSBrZXkuIE9ubHkgdGhlXG4gKiBzaW5rIGtub3dzIHRoYXQ7IHRoZSB0cmFwcyBkbyBub3QuIEV2ZXJ5IHdyaXRlIGRyb3BzIHRoZSBrZXkncyBjYWNoZWQgY2hpbGRcbiAqIHByb3h5IChgY2FjaGVgKSwgc28gdGhlIG5leHQgcmVhZCBpcyBidWlsdCBvdmVyIHRoZSBuZXcgdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb290S2V5U2luayhcbiAgdGFyZ2V0OiBSb290S2V5VGFyZ2V0LFxuICByZWFkU2lsZW50OiAoa2V5OiBzdHJpbmcpID0+IHVua25vd24sXG4gIHJvb3RLZXk6IHN0cmluZyxcbiAgY2FjaGU6IFBpY2s8TWVtYmVyQ2FjaGUsICdkZWxldGUnPixcbik6IFdyaXRlU2luayB7XG4gIHJldHVybiBuZXcgUm9vdEtleVNpbmsodGFyZ2V0LCByZWFkU2lsZW50LCByb290S2V5LCBjYWNoZSk7XG59XG5cbi8qKiBPbmUgYWxsb2NhdGlvbiBwZXIgdG9wLWxldmVsIHJlYWQgbWlzcyAodGhlIG1ldGhvZHMgbGl2ZSBvbiB0aGUgcHJvdG90eXBlKS4gKi9cbmNsYXNzIFJvb3RLZXlTaW5rIGltcGxlbWVudHMgV3JpdGVTaW5rIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB0YXJnZXQ6IFJvb3RLZXlUYXJnZXQsXG4gICAgcHJpdmF0ZSByZWFkb25seSByZWFkU2lsZW50OiAoa2V5OiBzdHJpbmcpID0+IHVua25vd24sXG4gICAgcHJpdmF0ZSByZWFkb25seSByb290S2V5OiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYWNoZTogUGljazxNZW1iZXJDYWNoZSwgJ2RlbGV0ZSc+LFxuICApIHt9XG5cbiAgLyoqIEFuIGVtcHR5IHBhdGggaXMgdGhlIGtleSdzIG93biB2YWx1ZSDigJQgYG5hdGl2ZUdldCh2LCBbXSlgIHdvdWxkIHJldHVybiBpdCB1bmNoYW5nZWQsIHNvIHRoZSB3YWxrIGlzIHNraXBwZWQuICovXG4gIHJlYWRBdChwYXRoOiByZWFkb25seSBzdHJpbmdbXSk6IHVua25vd24ge1xuICAgIGNvbnN0IHJvb3QgPSB0aGlzLnJlYWRTaWxlbnQodGhpcy5yb290S2V5KTtcbiAgICByZXR1cm4gcGF0aC5sZW5ndGggPT09IDAgPyByb290IDogbmF0aXZlR2V0KHJvb3QsIHBhdGggYXMgc3RyaW5nW10pO1xuICB9XG5cbiAgcHV0KHBhdGg6IHJlYWRvbmx5IHN0cmluZ1tdLCB2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHRoaXMudGFyZ2V0LnVwZGF0ZVZhbHVlKHRoaXMucm9vdEtleSwgYnVpbGROZXN0ZWRQYXRjaChwYXRoIGFzIHN0cmluZ1tdLCB2YWx1ZSkpO1xuICAgIGVsc2UgdGhpcy50YXJnZXQuc2V0VmFsdWUodGhpcy5yb290S2V5LCBwYXRoLmxlbmd0aCA9PT0gMCA/IHZhbHVlIDogc2V0SW5QYXRoKHRoaXMucmVhZEF0KFtdKSwgcGF0aCwgdmFsdWUpKTtcbiAgICB0aGlzLmNhY2hlLmRlbGV0ZSh0aGlzLnJvb3RLZXkpO1xuICB9XG5cbiAgcmVtb3ZlKHBhdGg6IHJlYWRvbmx5IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgdGhpcy50YXJnZXQuc2V0VmFsdWUodGhpcy5yb290S2V5LCBkZWxldGVJblBhdGgodGhpcy5yZWFkQXQoW10pLCBwYXRoKSk7XG4gICAgdGhpcy5jYWNoZS5kZWxldGUodGhpcy5yb290S2V5KTtcbiAgfVxufVxuXG4vKipcbiAqIFdIWTogYSB3cml0ZSBpbnNpZGUgYW4gYXJyYXkgZWxlbWVudCBpcyBhbiBhcnJheSB3cml0ZSDigJQgaXQgcmVidWlsZHMgdGhlXG4gKiBvd25pbmcgYXJyYXkgaW1tdXRhYmx5IGFuZCBoYW5kcyB0aGUgV0hPTEUgbmV3IGFycmF5IHRvIHRoZSBhcnJheSBwcm94eSdzXG4gKiBjb21taXQsIHRoZSBmdW5uZWwgYHB1c2hgIGFscmVhZHkgdXNlcy4gYHBhdGhgIGlzIG1lYXN1cmVkIGZyb20gdGhlXG4gKiBlbGVtZW50OyBgW11gIGlzIHRoZSBlbGVtZW50IHNsb3QgaXRzZWxmLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZWxlbWVudFNpbmsoZ2V0Q3VycmVudDogKCkgPT4gdW5rbm93bltdLCBjb21taXQ6IChuZXh0OiB1bmtub3duW10pID0+IHZvaWQsIGluZGV4OiBudW1iZXIpOiBXcml0ZVNpbmsge1xuICByZXR1cm4gbmV3IEVsZW1lbnRTaW5rKGdldEN1cnJlbnQsIGNvbW1pdCwgaW5kZXgpO1xufVxuXG4vKiogT25lIGFsbG9jYXRpb24gcGVyIGVsZW1lbnQgcHJveHkgKHRoZSBtZXRob2RzIGxpdmUgb24gdGhlIHByb3RvdHlwZSkg4oCUIGEgMTBrLWVsZW1lbnQgbG9vcCBidWlsZHMgMTBrIG9mIHRoZXNlLiAqL1xuY2xhc3MgRWxlbWVudFNpbmsgaW1wbGVtZW50cyBXcml0ZVNpbmsge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGdldEN1cnJlbnQ6ICgpID0+IHVua25vd25bXSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbW1pdDogKG5leHQ6IHVua25vd25bXSkgPT4gdm9pZCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGluZGV4OiBudW1iZXIsXG4gICkge31cblxuICByZWFkQXQocGF0aDogcmVhZG9ubHkgc3RyaW5nW10pOiB1bmtub3duIHtcbiAgICByZXR1cm4gcmVhZEluRWxlbWVudCh0aGlzLmdldEN1cnJlbnQsIHRoaXMuaW5kZXgsIHBhdGgpO1xuICB9XG5cbiAgcHV0KHBhdGg6IHJlYWRvbmx5IHN0cmluZ1tdLCB2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuICAgIHJlcGxhY2VJbkVsZW1lbnQodGhpcy5nZXRDdXJyZW50LCB0aGlzLmNvbW1pdCwgdGhpcy5pbmRleCwgcGF0aCwgdmFsdWUpO1xuICB9XG5cbiAgcmVtb3ZlKHBhdGg6IHJlYWRvbmx5IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgcmVtb3ZlSW5FbGVtZW50KHRoaXMuZ2V0Q3VycmVudCwgdGhpcy5jb21taXQsIHRoaXMuaW5kZXgsIHBhdGgpO1xuICB9XG59XG5cbi8qKiBUaGUgdmFsdWUgYXQgYHBhdGhgIGluc2lkZSBlbGVtZW50IGBpbmRleGAsIGFzIGl0IHN0YW5kcyBOT1cgKHJlYWQteW91ci13cml0ZXMpLiAqL1xuZnVuY3Rpb24gcmVhZEluRWxlbWVudChnZXRDdXJyZW50OiAoKSA9PiB1bmtub3duW10sIGluZGV4OiBudW1iZXIsIHBhdGg6IHJlYWRvbmx5IHN0cmluZ1tdKTogdW5rbm93biB7XG4gIGNvbnN0IGVsZW1lbnQgPSBnZXRDdXJyZW50KClbaW5kZXhdO1xuICByZXR1cm4gcGF0aC5sZW5ndGggPT09IDAgPyBlbGVtZW50IDogbmF0aXZlR2V0KGVsZW1lbnQsIHBhdGggYXMgc3RyaW5nW10pO1xufVxuXG4vKiogQSBjb3B5IG9mIHRoZSBhcnJheSB3aXRoIGB2YWx1ZWAgYXQgYHBhdGhgIGluc2lkZSBlbGVtZW50IGBpbmRleGA7IGEgZ29uZSBlbGVtZW50IGhhcyBub3RoaW5nIHRvIHdyaXRlIGludG8uICovXG5mdW5jdGlvbiByZXBsYWNlSW5FbGVtZW50KFxuICBnZXRDdXJyZW50OiAoKSA9PiB1bmtub3duW10sXG4gIGNvbW1pdDogKG5leHQ6IHVua25vd25bXSkgPT4gdm9pZCxcbiAgaW5kZXg6IG51bWJlcixcbiAgcGF0aDogcmVhZG9ubHkgc3RyaW5nW10sXG4gIHZhbHVlOiB1bmtub3duLFxuKTogdm9pZCB7XG4gIGNvbnN0IG5leHQgPSBbLi4uZ2V0Q3VycmVudCgpXTtcbiAgaWYgKGluZGV4ID49IG5leHQubGVuZ3RoKSByZXR1cm47XG4gIG5leHRbaW5kZXhdID0gcGF0aC5sZW5ndGggPT09IDAgPyB2YWx1ZSA6IHNldEluUGF0aChuZXh0W2luZGV4XSwgcGF0aCwgdmFsdWUpO1xuICBjb21taXQobmV4dCk7XG59XG5cbi8qKiBBIGNvcHkgb2YgdGhlIGFycmF5IHdpdGggdGhlIGtleSBhdCBgcGF0aGAgaW5zaWRlIGVsZW1lbnQgYGluZGV4YCByZW1vdmVkLiAqL1xuZnVuY3Rpb24gcmVtb3ZlSW5FbGVtZW50KFxuICBnZXRDdXJyZW50OiAoKSA9PiB1bmtub3duW10sXG4gIGNvbW1pdDogKG5leHQ6IHVua25vd25bXSkgPT4gdm9pZCxcbiAgaW5kZXg6IG51bWJlcixcbiAgcGF0aDogcmVhZG9ubHkgc3RyaW5nW10sXG4pOiB2b2lkIHtcbiAgY29uc3QgbmV4dCA9IFsuLi5nZXRDdXJyZW50KCldO1xuICBpZiAoaW5kZXggPj0gbmV4dC5sZW5ndGgpIHJldHVybjtcbiAgbmV4dFtpbmRleF0gPSBkZWxldGVJblBhdGgobmV4dFtpbmRleF0sIHBhdGgpO1xuICBjb21taXQobmV4dCk7XG59XG5cbi8qKlxuICogV0hZIG9uZSBzZXQgdHJhcDogdGhlIGFzc2lnbmVkIHZhbHVlIGlzIHVud3JhcHBlZCBIRVJFIChsYW5kbWluZSAxIOKAlCB0aGVcbiAqIEpTT04gcm91bmQtdHJpcCBhcHBsaWVzIHRvIHdoYXQgdGhlIGNhbGxlciBoYW5kZWQgaW4sIG5ldmVyIHRvIHRoZVxuICogc3Vycm91bmRpbmcgc3RhdGUpIGFuZCBoYW5kZWQgdG8gdGhlIHNpbmsgYXQgdGhlIHByb3h5J3MgcGF0aCBwbHVzIHRoZSBrZXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaW5rU2V0VHJhcChzaW5rOiBXcml0ZVNpbmssIHNlZ21lbnRzOiByZWFkb25seSBzdHJpbmdbXSk6IFByb3h5SGFuZGxlcjxvYmplY3Q+WydzZXQnXSB7XG4gIHJldHVybiAoX3RhcmdldCwgcHJvcCwgdmFsdWUpID0+IHtcbiAgICBpZiAodHlwZW9mIHByb3AgIT09ICdzdHJpbmcnKSByZXR1cm4gdHJ1ZTtcbiAgICBzaW5rLnB1dChbLi4uc2VnbWVudHMsIHByb3BdLCB1bndyYXBQcm94eSh2YWx1ZSkpO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xufVxuXG4vKipcbiAqIFdIWSBvbmUgZGVsZXRlIHRyYXA6IGBtZXJnZWAgY2Fubm90IGV4cHJlc3MgYSByZW1vdmFsIChhIHBhdGNoIG9mXG4gKiBgdW5kZWZpbmVkYCByZWFkcyBhcyBhYnNlbnQpLCBzbyBhIGRlbGV0ZSBhbHdheXMgcmVidWlsZHMgdGhyb3VnaCB0aGUgc2luay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNpbmtEZWxldGVUcmFwKHNpbms6IFdyaXRlU2luaywgc2VnbWVudHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJveHlIYW5kbGVyPG9iamVjdD5bJ2RlbGV0ZVByb3BlcnR5J10ge1xuICByZXR1cm4gKF90YXJnZXQsIHByb3ApID0+IHtcbiAgICBpZiAodHlwZW9mIHByb3AgIT09ICdzdHJpbmcnKSByZXR1cm4gdHJ1ZTtcbiAgICBzaW5rLnJlbW92ZShbLi4uc2VnbWVudHMsIHByb3BdKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbn1cbiJdfQ==
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid3JpdGVUcmFwcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcmVhY3RpdmUvd3JpdGVUcmFwcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7OztHQWFHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFN0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQXNCL0Q7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FDekIsTUFBcUIsRUFDckIsVUFBb0MsRUFDcEMsT0FBZSxFQUNmLEtBQWtDO0lBRWxDLE9BQU8sSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDN0QsQ0FBQztBQUVELGtGQUFrRjtBQUNsRixNQUFNLFdBQVc7SUFFSTtJQUNBO0lBQ0E7SUFDQTtJQUpuQixZQUNtQixNQUFxQixFQUNyQixVQUFvQyxFQUNwQyxPQUFlLEVBQ2YsS0FBa0M7UUFIbEMsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNyQixlQUFVLEdBQVYsVUFBVSxDQUEwQjtRQUNwQyxZQUFPLEdBQVAsT0FBTyxDQUFRO1FBQ2YsVUFBSyxHQUFMLEtBQUssQ0FBNkI7SUFDbEQsQ0FBQztJQUVKLG1IQUFtSDtJQUNuSCxNQUFNLENBQUMsSUFBdUI7UUFDNUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0MsT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFB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O1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDakMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiByZWFjdGl2ZS93cml0ZVRyYXBzIOKAlCB3aGVyZSBhIHByb3h5J3Mgd3JpdGVzIExBTkQsIGFuZCB0aGUgdHdvIHRyYXBzIHRoYXRcbiAqIHNlbmQgdGhlbSB0aGVyZS5cbiAqXG4gKiBFdmVyeSBvYmplY3QgcHJveHkgaW4gdGhpcyBmb2xkZXIgKG5lc3RlZCwgdGVybWluYWwsIGVsZW1lbnQpIGludGVyY2VwdHNcbiAqIHRoZSBzYW1lIHRocmVlIHRoaW5ncyDigJQgYSBwcm9wZXJ0eSBzZXQsIGEgcHJvcGVydHkgZGVsZXRlLCBhbmQgYW4gYXJyYXlcbiAqIG11dGF0aW9uIHNvbWV3aGVyZSBiZWxvdyBpdCDigJQgYW5kIGRpZmZlcnMgb25seSBpbiB3aGVyZSB0aGUgd3JpdGUgZ29lczpcbiAqIGEgbmVzdGVkL3Rlcm1pbmFsIHByb3h5IGNvbW1pdHMgdW5kZXIgYSBUT1AtTEVWRUwgS0VZIChhbiBvYmplY3Qgd3JpdGUgYXNcbiAqIGBtZXJnZWAgb2YgYSBwYXRjaCwgYW4gYXJyYXkgd3JpdGUgb3IgYSBkZWxldGUgYXMgYHNldGAgb2YgdGhlIHJlYnVpbHRcbiAqIHJvb3QpOyBhbiBlbGVtZW50IHByb3h5IGNvbW1pdHMgdGhlIFdIT0xFIE9XTklORyBBUlJBWSBiYWNrIHRocm91Z2ggdGhlXG4gKiBhcnJheSBwcm94eSdzIG93biBjYWxsYmFjay4gVGhhdCBkaWZmZXJlbmNlIGlzIGEge0BsaW5rIFdyaXRlU2lua307IHRoZVxuICogdHJhcHMgYXJlIHdyaXR0ZW4gb25jZSBvdmVyIGl0ICg5LjIzLjEg4oCUIHRoZSA5LjIyLjAgc3RhbGUtcmVhZCBidWcgd2FzXG4gKiBmaXhlZCBpbiBvbmUgY29weSBvZiB0aGVzZSB0cmFwcyBhbmQgdGhlbiBmb3VuZCBhZ2FpbiBpbiB0aGUgb3RoZXIgdHdvKS5cbiAqL1xuXG5pbXBvcnQgeyBuYXRpdmVHZXQgfSBmcm9tICcuLi9tZW1vcnkvcGF0aE9wcy5qcyc7XG5pbXBvcnQgeyB1bndyYXBIYW5kbGVzIH0gZnJvbSAnLi9oYW5kbGVzLmpzJztcbmltcG9ydCB0eXBlIHsgTWVtYmVyQ2FjaGUgfSBmcm9tICcuL2xpdmVWaWV3LmpzJztcbmltcG9ydCB7IGJ1aWxkTmVzdGVkUGF0Y2ggfSBmcm9tICcuL3BhdGhCdWlsZGVyLmpzJztcbmltcG9ydCB7IGRlbGV0ZUluUGF0aCwgc2V0SW5QYXRoIH0gZnJvbSAnLi9zdHJ1Y3R1cmFsV3JpdGUuanMnO1xuXG4vKipcbiAqIFRoZSBzZWFtIGJldHdlZW4gYSBwcm94eSBhbmQgc3RhdGUuIGBwYXRoYCBpcyBtZWFzdXJlZCBmcm9tIHRoZSBzaW5rJ3NcbiAqIHJvb3Qg4oCUIHRoZSBrZXkncyB2YWx1ZSBmb3Ige0BsaW5rIHJvb3RLZXlTaW5rfSwgdGhlIGVsZW1lbnQgZm9yXG4gKiB7QGxpbmsgZWxlbWVudFNpbmt9OyBgW11gIGlzIHRoZSByb290IGl0c2VsZi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXcml0ZVNpbmsge1xuICAvKiogVGhlIHZhbHVlIGF0IGBwYXRoYCwgYXMgaXQgc3RhbmRzIE5PVyAocmVhZC15b3VyLXdyaXRlczsgbmV2ZXIgYSB0cmFja2VkIHJlYWQpLiAqL1xuICByZWFkQXQocGF0aDogcmVhZG9ubHkgc3RyaW5nW10pOiB1bmtub3duO1xuICAvKiogUHV0IGFuIGFscmVhZHktdW53cmFwcGVkIGB2YWx1ZWAgYXQgYHBhdGhgLiBUaGUgc2luayBjaG9vc2VzIHRoZSB2ZXJiLiAqL1xuICBwdXQocGF0aDogcmVhZG9ubHkgc3RyaW5nW10sIHZhbHVlOiB1bmtub3duKTogdm9pZDtcbiAgLyoqIFJlbW92ZSB0aGUga2V5IGF0IGBwYXRoYC4gKi9cbiAgcmVtb3ZlKHBhdGg6IHJlYWRvbmx5IHN0cmluZ1tdKTogdm9pZDtcbn1cblxuLyoqIFRoZSB0d28gd2F5cyBhIHZhbHVlIHJlYWNoZXMgYSBzdGF0ZSBrZXk6IHdoYXQgdGhlIHNpbmsgd3JpdGVzIHRocm91Z2guICovXG5leHBvcnQgaW50ZXJmYWNlIFJvb3RLZXlUYXJnZXQge1xuICBzZXRWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkO1xuICB1cGRhdGVWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkO1xufVxuXG4vKipcbiAqIFdIWTogYSB3cml0ZSBiZWxvdyBhIHRvcC1sZXZlbCBrZXkgaGFzIFRXTyB2ZXJicyAocmVhY3RpdmUvUkVBRE1FLm1kLCBsYXdcbiAqIDMpIOKAlCBhbiBvYmplY3QgbGVhZiBpcyBhIGBtZXJnZWAgb2YgYSBuZXN0ZWQgcGF0Y2gsIGFuIGFycmF5IGxlYWYgb3IgYVxuICogZGVsZXRlIHJlYnVpbGRzIHRoZSByb290IGltbXV0YWJseSBhbmQgY29tbWl0cyBhIGBzZXRgIG9mIHRoZSBrZXkuIE9ubHkgdGhlXG4gKiBzaW5rIGtub3dzIHRoYXQ7IHRoZSB0cmFwcyBkbyBub3QuIEV2ZXJ5IHdyaXRlIGRyb3BzIHRoZSBrZXkncyBjYWNoZWQgY2hpbGRcbiAqIHByb3h5IChgY2FjaGVgKSwgc28gdGhlIG5leHQgcmVhZCBpcyBidWlsdCBvdmVyIHRoZSBuZXcgdmFsdWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb290S2V5U2luayhcbiAgdGFyZ2V0OiBSb290S2V5VGFyZ2V0LFxuICByZWFkU2lsZW50OiAoa2V5OiBzdHJpbmcpID0+IHVua25vd24sXG4gIHJvb3RLZXk6IHN0cmluZyxcbiAgY2FjaGU6IFBpY2s8TWVtYmVyQ2FjaGUsICdkZWxldGUnPixcbik6IFdyaXRlU2luayB7XG4gIHJldHVybiBuZXcgUm9vdEtleVNpbmsodGFyZ2V0LCByZWFkU2lsZW50LCByb290S2V5LCBjYWNoZSk7XG59XG5cbi8qKiBPbmUgYWxsb2NhdGlvbiBwZXIgdG9wLWxldmVsIHJlYWQgbWlzcyAodGhlIG1ldGhvZHMgbGl2ZSBvbiB0aGUgcHJvdG90eXBlKS4gKi9cbmNsYXNzIFJvb3RLZXlTaW5rIGltcGxlbWVudHMgV3JpdGVTaW5rIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB0YXJnZXQ6IFJvb3RLZXlUYXJnZXQsXG4gICAgcHJpdmF0ZSByZWFkb25seSByZWFkU2lsZW50OiAoa2V5OiBzdHJpbmcpID0+IHVua25vd24sXG4gICAgcHJpdmF0ZSByZWFkb25seSByb290S2V5OiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYWNoZTogUGljazxNZW1iZXJDYWNoZSwgJ2RlbGV0ZSc+LFxuICApIHt9XG5cbiAgLyoqIEFuIGVtcHR5IHBhdGggaXMgdGhlIGtleSdzIG93biB2YWx1ZSDigJQgYG5hdGl2ZUdldCh2LCBbXSlgIHdvdWxkIHJldHVybiBpdCB1bmNoYW5nZWQsIHNvIHRoZSB3YWxrIGlzIHNraXBwZWQuICovXG4gIHJlYWRBdChwYXRoOiByZWFkb25seSBzdHJpbmdbXSk6IHVua25vd24ge1xuICAgIGNvbnN0IHJvb3QgPSB0aGlzLnJlYWRTaWxlbnQodGhpcy5yb290S2V5KTtcbiAgICByZXR1cm4gcGF0aC5sZW5ndGggPT09IDAgPyByb290IDogbmF0aXZlR2V0KHJvb3QsIHBhdGggYXMgc3RyaW5nW10pO1xuICB9XG5cbiAgcHV0KHBhdGg6IHJlYWRvbmx5IHN0cmluZ1tdLCB2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHRoaXMudGFyZ2V0LnVwZGF0ZVZhbHVlKHRoaXMucm9vdEtleSwgYnVpbGROZXN0ZWRQYXRjaChwYXRoIGFzIHN0cmluZ1tdLCB2YWx1ZSkpO1xuICAgIGVsc2UgdGhpcy50YXJnZXQuc2V0VmFsdWUodGhpcy5yb290S2V5LCBwYXRoLmxlbmd0aCA9PT0gMCA/IHZhbHVlIDogc2V0SW5QYXRoKHRoaXMucmVhZEF0KFtdKSwgcGF0aCwgdmFsdWUpKTtcbiAgICB0aGlzLmNhY2hlLmRlbGV0ZSh0aGlzLnJvb3RLZXkpO1xuICB9XG5cbiAgcmVtb3ZlKHBhdGg6IHJlYWRvbmx5IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgdGhpcy50YXJnZXQuc2V0VmFsdWUodGhpcy5yb290S2V5LCBkZWxldGVJblBhdGgodGhpcy5yZWFkQXQoW10pLCBwYXRoKSk7XG4gICAgdGhpcy5jYWNoZS5kZWxldGUodGhpcy5yb290S2V5KTtcbiAgfVxufVxuXG4vKipcbiAqIFdIWTogYSB3cml0ZSBpbnNpZGUgYW4gYXJyYXkgZWxlbWVudCBpcyBhbiBhcnJheSB3cml0ZSDigJQgaXQgcmVidWlsZHMgdGhlXG4gKiBvd25pbmcgYXJyYXkgaW1tdXRhYmx5IGFuZCBoYW5kcyB0aGUgV0hPTEUgbmV3IGFycmF5IHRvIHRoZSBhcnJheSBwcm94eSdzXG4gKiBjb21taXQsIHRoZSBmdW5uZWwgYHB1c2hgIGFscmVhZHkgdXNlcy4gYHBhdGhgIGlzIG1lYXN1cmVkIGZyb20gdGhlXG4gKiBlbGVtZW50OyBgW11gIGlzIHRoZSBlbGVtZW50IHNsb3QgaXRzZWxmLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZWxlbWVudFNpbmsoZ2V0Q3VycmVudDogKCkgPT4gdW5rbm93bltdLCBjb21taXQ6IChuZXh0OiB1bmtub3duW10pID0+IHZvaWQsIGluZGV4OiBudW1iZXIpOiBXcml0ZVNpbmsge1xuICByZXR1cm4gbmV3IEVsZW1lbnRTaW5rKGdldEN1cnJlbnQsIGNvbW1pdCwgaW5kZXgpO1xufVxuXG4vKiogT25lIGFsbG9jYXRpb24gcGVyIGVsZW1lbnQgcHJveHkgKHRoZSBtZXRob2RzIGxpdmUgb24gdGhlIHByb3RvdHlwZSkg4oCUIGEgMTBrLWVsZW1lbnQgbG9vcCBidWlsZHMgMTBrIG9mIHRoZXNlLiAqL1xuY2xhc3MgRWxlbWVudFNpbmsgaW1wbGVtZW50cyBXcml0ZVNpbmsge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGdldEN1cnJlbnQ6ICgpID0+IHVua25vd25bXSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbW1pdDogKG5leHQ6IHVua25vd25bXSkgPT4gdm9pZCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGluZGV4OiBudW1iZXIsXG4gICkge31cblxuICByZWFkQXQocGF0aDogcmVhZG9ubHkgc3RyaW5nW10pOiB1bmtub3duIHtcbiAgICByZXR1cm4gcmVhZEluRWxlbWVudCh0aGlzLmdldEN1cnJlbnQsIHRoaXMuaW5kZXgsIHBhdGgpO1xuICB9XG5cbiAgcHV0KHBhdGg6IHJlYWRvbmx5IHN0cmluZ1tdLCB2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuICAgIHJlcGxhY2VJbkVsZW1lbnQodGhpcy5nZXRDdXJyZW50LCB0aGlzLmNvbW1pdCwgdGhpcy5pbmRleCwgcGF0aCwgdmFsdWUpO1xuICB9XG5cbiAgcmVtb3ZlKHBhdGg6IHJlYWRvbmx5IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgcmVtb3ZlSW5FbGVtZW50KHRoaXMuZ2V0Q3VycmVudCwgdGhpcy5jb21taXQsIHRoaXMuaW5kZXgsIHBhdGgpO1xuICB9XG59XG5cbi8qKiBUaGUgdmFsdWUgYXQgYHBhdGhgIGluc2lkZSBlbGVtZW50IGBpbmRleGAsIGFzIGl0IHN0YW5kcyBOT1cgKHJlYWQteW91ci13cml0ZXMpLiAqL1xuZnVuY3Rpb24gcmVhZEluRWxlbWVudChnZXRDdXJyZW50OiAoKSA9PiB1bmtub3duW10sIGluZGV4OiBudW1iZXIsIHBhdGg6IHJlYWRvbmx5IHN0cmluZ1tdKTogdW5rbm93biB7XG4gIGNvbnN0IGVsZW1lbnQgPSBnZXRDdXJyZW50KClbaW5kZXhdO1xuICByZXR1cm4gcGF0aC5sZW5ndGggPT09IDAgPyBlbGVtZW50IDogbmF0aXZlR2V0KGVsZW1lbnQsIHBhdGggYXMgc3RyaW5nW10pO1xufVxuXG4vKiogQSBjb3B5IG9mIHRoZSBhcnJheSB3aXRoIGB2YWx1ZWAgYXQgYHBhdGhgIGluc2lkZSBlbGVtZW50IGBpbmRleGA7IGEgZ29uZSBlbGVtZW50IGhhcyBub3RoaW5nIHRvIHdyaXRlIGludG8uICovXG5mdW5jdGlvbiByZXBsYWNlSW5FbGVtZW50KFxuICBnZXRDdXJyZW50OiAoKSA9PiB1bmtub3duW10sXG4gIGNvbW1pdDogKG5leHQ6IHVua25vd25bXSkgPT4gdm9pZCxcbiAgaW5kZXg6IG51bWJlcixcbiAgcGF0aDogcmVhZG9ubHkgc3RyaW5nW10sXG4gIHZhbHVlOiB1bmtub3duLFxuKTogdm9pZCB7XG4gIGNvbnN0IG5leHQgPSBbLi4uZ2V0Q3VycmVudCgpXTtcbiAgaWYgKGluZGV4ID49IG5leHQubGVuZ3RoKSByZXR1cm47XG4gIG5leHRbaW5kZXhdID0gcGF0aC5sZW5ndGggPT09IDAgPyB2YWx1ZSA6IHNldEluUGF0aChuZXh0W2luZGV4XSwgcGF0aCwgdmFsdWUpO1xuICBjb21taXQobmV4dCk7XG59XG5cbi8qKiBBIGNvcHkgb2YgdGhlIGFycmF5IHdpdGggdGhlIGtleSBhdCBgcGF0aGAgaW5zaWRlIGVsZW1lbnQgYGluZGV4YCByZW1vdmVkLiAqL1xuZnVuY3Rpb24gcmVtb3ZlSW5FbGVtZW50KFxuICBnZXRDdXJyZW50OiAoKSA9PiB1bmtub3duW10sXG4gIGNvbW1pdDogKG5leHQ6IHVua25vd25bXSkgPT4gdm9pZCxcbiAgaW5kZXg6IG51bWJlcixcbiAgcGF0aDogcmVhZG9ubHkgc3RyaW5nW10sXG4pOiB2b2lkIHtcbiAgY29uc3QgbmV4dCA9IFsuLi5nZXRDdXJyZW50KCldO1xuICBpZiAoaW5kZXggPj0gbmV4dC5sZW5ndGgpIHJldHVybjtcbiAgbmV4dFtpbmRleF0gPSBkZWxldGVJblBhdGgobmV4dFtpbmRleF0sIHBhdGgpO1xuICBjb21taXQobmV4dCk7XG59XG5cbi8qKlxuICogV0hZIG9uZSBzZXQgdHJhcDogdGhlIGFzc2lnbmVkIHZhbHVlIGlzIHRha2VuIGFzIGEgVkFMVUUgaGVyZSAoYSBoYW5kbGVcbiAqIGJlY29tZXMgd2hhdCBpdCBzdGFuZHMgZm9yLCBgaGFuZGxlcy50c2A7IG5vdGhpbmcgZWxzZSBpcyBjb3BpZWQg4oCUIHRoZVxuICogYnVmZmVyIGRldGFjaGVzIGF0IGNvbW1pdCkgYW5kIGhhbmRlZCB0byB0aGUgc2luayBhdCB0aGUgcHJveHkncyBwYXRoIHBsdXNcbiAqIHRoZSBrZXkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaW5rU2V0VHJhcChzaW5rOiBXcml0ZVNpbmssIHNlZ21lbnRzOiByZWFkb25seSBzdHJpbmdbXSk6IFByb3h5SGFuZGxlcjxvYmplY3Q+WydzZXQnXSB7XG4gIHJldHVybiAoX3RhcmdldCwgcHJvcCwgdmFsdWUpID0+IHtcbiAgICBpZiAodHlwZW9mIHByb3AgIT09ICdzdHJpbmcnKSByZXR1cm4gdHJ1ZTtcbiAgICBzaW5rLnB1dChbLi4uc2VnbWVudHMsIHByb3BdLCB1bndyYXBIYW5kbGVzKHZhbHVlKSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG59XG5cbi8qKlxuICogV0hZIG9uZSBkZWxldGUgdHJhcDogYG1lcmdlYCBjYW5ub3QgZXhwcmVzcyBhIHJlbW92YWwgKGEgcGF0Y2ggb2ZcbiAqIGB1bmRlZmluZWRgIHJlYWRzIGFzIGFic2VudCksIHNvIGEgZGVsZXRlIGFsd2F5cyByZWJ1aWxkcyB0aHJvdWdoIHRoZSBzaW5rLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2lua0RlbGV0ZVRyYXAoc2luazogV3JpdGVTaW5rLCBzZWdtZW50czogcmVhZG9ubHkgc3RyaW5nW10pOiBQcm94eUhhbmRsZXI8b2JqZWN0PlsnZGVsZXRlUHJvcGVydHknXSB7XG4gIHJldHVybiAoX3RhcmdldCwgcHJvcCkgPT4ge1xuICAgIGlmICh0eXBlb2YgcHJvcCAhPT0gJ3N0cmluZycpIHJldHVybiB0cnVlO1xuICAgIHNpbmsucmVtb3ZlKFsuLi5zZWdtZW50cywgcHJvcF0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xufVxuIl19
package/dist/index.js CHANGED
@@ -125,4 +125,4 @@ Object.defineProperty(exports, "isDevMode", { enumerable: true, get: function ()
125
125
  // `defineScopeFromZod` and the other zod-based scope helpers moved to the opt-in
126
126
  // `footprintjs/zod` entry — keeping zod out of the core load path (it is an
127
127
  // optional peer). Import them from 'footprintjs/zod'.
128
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHOzs7QUFTSCw0QkFBNEI7QUFDNUIsbURBQXdGO0FBQS9FLHFHQUFBLFNBQVMsT0FBQTtBQUFFLDRHQUFBLGdCQUFnQixPQUFBO0FBQUUsNkdBQUEsaUJBQWlCLE9BQUE7QUE0QnZELDRCQUE0QjtBQUM1QiwrQ0FBMkM7QUFBbEMseUdBQUEsU0FBUyxPQUFBO0FBb0JsQixtQ0FBbUM7QUFDbkMsa0RBQXVEO0FBQTlDLGtHQUFBLE1BQU0sT0FBQTtBQUFFLGtHQUFBLE1BQU0sT0FBQTtBQVl2QixvQkFBb0I7QUFDcEIsa0RBQTBEO0FBQWpELDZHQUFBLGlCQUFpQixPQUFBO0FBRTFCLG9CQUFvQjtBQUNwQixrREFBbUQ7QUFBMUMsc0dBQUEsVUFBVSxPQUFBO0FBcUJuQiwrQkFBK0I7QUFDL0IsaURBQXNEO0FBQTdDLDBHQUFBLGNBQWMsT0FBQTtBQUV2QiwrQkFBK0I7QUFDL0IsaURBQXFEO0FBQTVDLHlHQUFBLGFBQWEsT0FBQTtBQUV0QixvQ0FBb0M7QUFDcEMsb0RBQTREO0FBQW5ELDZHQUFBLGlCQUFpQixPQUFBO0FBbUMxQixxRUFBcUU7QUFDckUsb0RBS2lDO0FBSi9CLGtIQUFBLHNCQUFzQixPQUFBO0FBQ3RCLGtIQUFBLHNCQUFzQixPQUFBO0FBQ3RCLDhHQUFBLGtCQUFrQixPQUFBO0FBQ2xCLHVHQUFBLFdBQVcsT0FBQTtBQWtEYiwrQkFBK0I7QUFDL0Isa0RBQThEO0FBQXJELGlIQUFBLHFCQUFxQixPQUFBO0FBSzlCLCtCQUErQjtBQUMvQixtREFBNkQ7QUFBcEQsaUhBQUEsb0JBQW9CLE9BQUE7QUFFN0IsK0JBQStCO0FBQy9CLG1EQUFzRTtBQUE3RCwwSEFBQSw2QkFBNkIsT0FBQTtBQUV0QywrQkFBK0I7QUFDL0IsbURBQXVFO0FBQTlELDJIQUFBLDhCQUE4QixPQUFBO0FBRXZDLCtCQUErQjtBQUMvQixtREFBeUU7QUFBaEUsNkhBQUEsZ0NBQWdDLE9BQUE7QUFFekMsK0JBQStCO0FBQy9CLG1EQUFpRTtBQUF4RCxxSEFBQSx3QkFBd0IsT0FBQTtBQUVqQywrQkFBK0I7QUFDL0IsbURBQXNFO0FBQTdELDBIQUFBLDZCQUE2QixPQUFBO0FBRXRDLCtCQUErQjtBQUMvQixtREFBb0U7QUFBM0Qsd0hBQUEsMkJBQTJCLE9BQUE7QUFFcEMsK0JBQStCO0FBQy9CLG1EQUFzRTtBQUE3RCwwSEFBQSw2QkFBNkIsT0FBQTtBQXlCdEMsdUNBQXVDO0FBQ3ZDLG1EQUE2RTtBQUFwRSwrR0FBQSxrQkFBa0IsT0FBQTtBQUFFLDZHQUFBLGdCQUFnQixPQUFBO0FBRTdDLCtFQUErRTtBQUMvRSw0RUFBNEU7QUFDNUUsK0VBQStFO0FBRS9FLDhCQUE4QjtBQUM5QixxREFBNEQ7QUFBbkQsOEdBQUEsaUJBQWlCLE9BQUE7QUFvQjFCLDZCQUE2QjtBQUM3QixrREFBaUQ7QUFBeEMsc0dBQUEsU0FBUyxPQUFBO0FBaUVsQixzQ0FBc0M7QUFDdEMsbURBQTJFO0FBQWxFLHlHQUFBLFlBQVksT0FBQTtBQUFFLDBHQUFBLGFBQWEsT0FBQTtBQUFFLGtHQUFBLEtBQUssT0FBQTtBQUUzQyxzQ0FBc0M7QUFDdEMsbURBQXFHO0FBQTVGLGlIQUFBLG9CQUFvQixPQUFBO0FBQUUsa0hBQUEscUJBQXFCLE9BQUE7QUFBRSw0R0FBQSxlQUFlLE9BQUE7QUFTckUsZ0NBQWdDO0FBQ2hDLG1EQUEwRTtBQUFqRSw2R0FBQSxnQkFBZ0IsT0FBQTtBQUFFLDRHQUFBLGVBQWUsT0FBQTtBQUUxQywrRUFBK0U7QUFDL0UsaURBQWlEO0FBQ2pELCtFQUErRTtBQUUvRTs7Ozs7Ozs7Ozs7R0FXRztBQUNILG1FQUF5RjtBQUFoRixtSEFBQSxjQUFjLE9BQUE7QUFBRSxrSEFBQSxhQUFhLE9BQUE7QUFBRSw4R0FBQSxTQUFTLE9BQUE7QUFFakQsaUZBQWlGO0FBQ2pGLDRFQUE0RTtBQUM1RSxzREFBc0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZvb3RQcmludCDigJQgUHVibGljIEFQSSAodjMpXG4gKlxuICogVGhlIGZsb3djaGFydCBwYXR0ZXJuIGZvciBiYWNrZW5kIGNvZGUuXG4gKiBCdWlsZCDihpIgUnVuIOKGkiBPYnNlcnZlLlxuICpcbiAqICoqVGhyZWUgaW1wb3J0IHBhdGhzOioqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZmxvd0NoYXJ0LCBkZWNpZGUsIG5hcnJhdGl2ZSB9IGZyb20gJ2Zvb3RwcmludGpzJzsgICAgICAgICAgIC8vIG1haW4g4oCUIHN0YXJ0IGhlcmVcbiAqIGltcG9ydCB7IG1ldHJpY3MsIGRlYnVnLCBtYW5pZmVzdCB9ICAgICBmcm9tICdmb290cHJpbnRqcy9yZWNvcmRlcnMnOyAvLyByZWNvcmRlciBmYWN0b3JpZXNcbiAqIGltcG9ydCB7IFNoYXJlZE1lbW9yeSwgU3RhZ2VDb250ZXh0IH0gICBmcm9tICdmb290cHJpbnRqcy9hZHZhbmNlZCc7ICAvLyBpbnRlcm5hbHNcbiAqIGBgYFxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBRdWljayBTdGFydCDigJQgRXZlcnl0aGluZyB5b3UgbmVlZCBmb3IgOTAlIG9mIHVzZSBjYXNlc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0ICovXG5leHBvcnQgdHlwZSB7IEZsb3dDaGFydCwgU3RhZ2VGdW5jdGlvbiBhcyBTdGFnZUhhbmRsZXIsIFN0cmVhbUhhbmRsZXJzIH0gZnJvbSAnLi9saWIvYnVpbGRlci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUXVpY2sgU3RhcnQgKi9cbmV4cG9ydCB7IGZsb3dDaGFydCwgRmxvd0NoYXJ0QnVpbGRlciwgZmxvd0NoYXJ0U2VsZWN0b3IgfSBmcm9tICcuL2xpYi9idWlsZGVyL2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgUXVpY2sgU3RhcnRcbiAqXG4gKiBDb25maWcgZm9yIGAuYWRkUGFyYWxsZWxGb3JFYWNoKClgIOKAlCBvbmUgYnJhbmNoIHBlciBpdGVtLCBicmFuY2ggY291bnRcbiAqIGRlY2lkZWQgYXQgcnVuIHRpbWUgZnJvbSB0aGUgcGF5bG9hZC4gYG1heEJyYW5jaGVzYCBhbmQgYGludG9gIGFyZSByZXF1aXJlZFxuICogb24gcHVycG9zZSAoc2VlIGRvY3MvZGVzaWduL2V4ZWN1dGlvbi1jb250cm9sLm1kKS5cbiAqL1xuZXhwb3J0IHR5cGUgeyBCcmFuY2hDaGFydCwgUGFyYWxsZWxGb3JFYWNoQ29uZmlnLCBSZXRyeVBvbGljeSB9IGZyb20gJy4vbGliL2J1aWxkZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0IOKAlCBidWlsZC10aW1lIG9ic2VydmVyICh0d2luIG9mIEZsb3dSZWNvcmRlcikgKi9cbmV4cG9ydCB0eXBlIHtcbiAgU3RydWN0dXJlRGVjaWRlckNvbXBsZXRlRXZlbnQsXG4gIFN0cnVjdHVyZUVkZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVFZGdlS2luZCxcbiAgU3RydWN0dXJlTG9vcEVkZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVSZWNvcmRlcixcbiAgU3RydWN0dXJlU3RhZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVTdWJmbG93TW91bnRlZEV2ZW50LFxufSBmcm9tICcuL2xpYi9idWlsZGVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCAqL1xuZXhwb3J0IHR5cGUgeyBUeXBlZFN0YWdlRnVuY3Rpb24gfSBmcm9tICcuL2xpYi9idWlsZGVyL3R5cGVkRmxvd0NoYXJ0LmpzJztcblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCAqL1xuZXhwb3J0IHR5cGUgeyBTY29wZU1ldGhvZHMsIFR5cGVkU2NvcGUgfSBmcm9tICcuL2xpYi9yZWFjdGl2ZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUXVpY2sgU3RhcnQgKi9cbmV4cG9ydCB7IG5hcnJhdGl2ZSB9IGZyb20gJy4vcmVjb3JkZXJzLmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRGVjaXNpb24gQnJhbmNoaW5nIOKAlCBkZWNpZGUoKSAvIHNlbGVjdCgpIHdpdGggZXZpZGVuY2UgY2FwdHVyZVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IERlY2lzaW9uIEJyYW5jaGluZyAqL1xuZXhwb3J0IHR5cGUge1xuICBEZWNpZGVSdWxlLFxuICBEZWNpc2lvbkV2aWRlbmNlLFxuICBEZWNpc2lvblJlc3VsdCxcbiAgRGVmYXVsdEJyYW5jaCxcbiAgRmlsdGVyT3BzLFxuICBSdWxlRXZpZGVuY2UsXG4gIFNlbGVjdGlvbkV2aWRlbmNlLFxuICBTZWxlY3Rpb25SZXN1bHQsXG4gIFdoZW5DbGF1c2UsXG4gIFdoZXJlRmlsdGVyLFxufSBmcm9tICcuL2xpYi9kZWNpZGUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IERlY2lzaW9uIEJyYW5jaGluZyAqL1xuZXhwb3J0IHsgZGVjaWRlLCBzZWxlY3QgfSBmcm9tICcuL2xpYi9kZWNpZGUvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBSdW4g4oCUIEV4ZWN1dGUgY2hhcnRzIGFuZCBjb2xsZWN0IHJlc3VsdHNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBSdW4gKi9cbmV4cG9ydCB0eXBlIHsgUnVuUmVzdWx0IH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBSdW4gKi9cbmV4cG9ydCB0eXBlIHsgRmxvd0NoYXJ0RXhlY3V0b3JPcHRpb25zIH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBSdW4gKi9cbmV4cG9ydCB7IEZsb3dDaGFydEV4ZWN1dG9yIH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBSdW4gKi9cbmV4cG9ydCB7IFJ1bkNvbnRleHQgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFJ1biAqL1xuZXhwb3J0IHR5cGUgeyBDaGFydE9wZW5BUElPcHRpb25zLCBNQ1BUb29sRGVzY3JpcHRpb24sIFJ1bm5hYmxlRmxvd0NoYXJ0IH0gZnJvbSAnLi9saWIvcnVubmVyL1J1bm5hYmxlQ2hhcnQuanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBPYnNlcnZlIOKAlCBEYXRhIChzY29wZSByZWNvcmRlcnMsIGZpcmUgZHVyaW5nIHN0YWdlIGV4ZWN1dGlvbilcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBEYXRhICovXG5leHBvcnQgdHlwZSB7XG4gIENvbW1pdEV2ZW50LFxuICBFcnJvckV2ZW50LFxuICBSZWFkRXZlbnQsXG4gIFJlZGFjdGlvblBvbGljeSxcbiAgUmVkYWN0aW9uUmVwb3J0LFxuICBTY29wZVJlY29yZGVyLFxuICBTdGFnZUV2ZW50LFxuICBXcml0ZUV2ZW50LFxufSBmcm9tICcuL2xpYi9zY29wZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRGF0YSAqL1xuZXhwb3J0IHsgTWV0cmljUmVjb3JkZXIgfSBmcm9tICcuL2xpYi9zY29wZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRGF0YSAqL1xuZXhwb3J0IHsgRGVidWdSZWNvcmRlciB9IGZyb20gJy4vbGliL3Njb3BlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBPcGVyYXRpb24gKi9cbmV4cG9ydCB7IFJlY29yZGVyT3BlcmF0aW9uIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBEZWxpdmVyeSB0aWVyIChSRkMtMDAxIGRlZmVycmVkIG9ic2VydmVycylcbiAqXG4gKiBFdmVyeSBgYXR0YWNoKlJlY29yZGVyYCBjYWxsIGFjY2VwdHMgYW4gb3B0aW9ucyBiYWc6XG4gKiBgZXhlY3V0b3IuYXR0YWNoU2NvcGVSZWNvcmRlcihyZWMsIHsgZGVsaXZlcnk6ICdkZWZlcnJlZCcgfSlgIHRha2VzIHRoZVxuICogcmVjb3JkZXIgT1VUIG9mIHRoZSBlbmdpbmUncyBob3QgcGF0aCDigJQgZXZlbnRzIGFyZSBjYXB0dXJlZCBpbnRvIG9uZVxuICogYm91bmRlZCwgdG90YWxseS1vcmRlcmVkIHF1ZXVlIGFuZCBkZWxpdmVyZWQgYXQgdGhlIG5leHQgbWljcm90YXNrXG4gKiBjaGVja3BvaW50IChcIm9uZSBiZWF0IGJlaGluZFwiKS4gT21pdCBgZGVsaXZlcnlgIGZvciB0aGUgaGlzdG9yaWNhbFxuICogc3luY2hyb25vdXMgY2FsbCAoYnl0ZS1pZGVudGljYWwgdG8gcHJldmlvdXMgcmVsZWFzZXMpLiBBY2NvdW50aW5nXG4gKiBzdXJmYWNlcyBvbiBgc25hcHNob3Qub2JzZXJ2ZXJTdGF0c2A7IGBleGVjdXRvci5kcmFpbk9ic2VydmVycygpYCBzZXR0bGVzXG4gKiBhc3luYyBsaXN0ZW5lcnMgYmVmb3JlIHNodXRkb3duLiBTZWUgYGRvY3MvZ3VpZGVzL29ic2VydmVycy1kZWZlcnJlZC5tZGAuXG4gKi9cbmV4cG9ydCB0eXBlIHtcbiAgQXR0YWNoUmVjb3JkZXJPcHRpb25zLFxuICBPYnNlcnZlckRlbGl2ZXJ5LFxuICBPYnNlcnZlckRyYWluUmVzdWx0LFxuICBPYnNlcnZlclN0YXRzLFxufSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBEZWxpdmVyeSB0aWVyIChSRkMtMDAxIGRlZmVycmVkIG9ic2VydmVycylcbiAqXG4gKiBgQ2FwdHVyZVBvbGljeWAg4oCUIGhvdyBhIGRlZmVycmVkIGV2ZW50J3MgcGF5bG9hZCBpcyBtYXRlcmlhbGl6ZWQgYXRcbiAqIGNhcHR1cmUgdGltZSAoYCdzdW1tYXJ5J2AgZGVmYXVsdCAvIGAnY2xvbmUnYCAvIGAncmVmJ2ApLiBgT3ZlcmZsb3dQb2xpY3lgXG4gKiDigJQgd2hhdCBhIHNhdHVyYXRlZCBxdWV1ZSBkb2VzIChgJ2Ryb3Atb2xkZXN0J2AgZGVmYXVsdCAvIGAnc2FtcGxlJ2AgL1xuICogYCdibG9jaydgKS4gYERpc3BhdGNoZXJTdGF0c2AgLyBgTGlzdGVuZXJTdGF0c2Ag4oCUIHRoZSBhY2NvdW50aW5nIHNoYXBlc1xuICogZW1iZWRkZWQgaW4gYE9ic2VydmVyU3RhdHNgLiBUeXBlcyBvbmx5IOKAlCB0aGUgb2JzZXJ2ZXItcXVldWUgbW9kdWxlXG4gKiBpdHNlbGYgaXMgaW50ZXJuYWw7IGNvbnN1bWVycyB1c2UgdGhlIGF0dGFjaCBvcHRpb25zLlxuICovXG5leHBvcnQgdHlwZSB7IENhcHR1cmVQb2xpY3ksIERpc3BhdGNoZXJTdGF0cywgTGlzdGVuZXJTdGF0cywgT3ZlcmZsb3dQb2xpY3kgfSBmcm9tICcuL2xpYi9vYnNlcnZlci1xdWV1ZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgQ29tYmluZWQgKGJvdGggZGF0YS1mbG93IGFuZCBjb250cm9sLWZsb3cpICovXG5leHBvcnQgdHlwZSB7IENvbWJpbmVkUmVjb3JkZXIgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIENvbWJpbmVkIChib3RoIGRhdGEtZmxvdyBhbmQgY29udHJvbC1mbG93KSAqL1xuZXhwb3J0IHtcbiAgaGFzRW1pdFJlY29yZGVyTWV0aG9kcyxcbiAgaGFzRmxvd1JlY29yZGVyTWV0aG9kcyxcbiAgaGFzUmVjb3JkZXJNZXRob2RzLFxuICBpc0Zsb3dFdmVudCxcbn0gZnJvbSAnLi9saWIvcmVjb3JkZXIvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBFbWl0ICh1c2VyLWF1dGhvcmVkIHN0cnVjdHVyZWQgZXZlbnRzKVxuICpcbiAqIFRoaXJkIG9ic2VydmVyIGNoYW5uZWwgKGFsb25nc2lkZSBgU2NvcGVSZWNvcmRlcmAgYW5kIGBGbG93UmVjb3JkZXJgKS4gQ29uc3VtZXJcbiAqIGNvZGUgY2FsbHMgYHNjb3BlLiRlbWl0KG5hbWUsIHBheWxvYWQpYCBmcm9tIGluc2lkZSBhIHN0YWdlOyBldmVyeSBhdHRhY2hlZFxuICogYEVtaXRSZWNvcmRlci5vbkVtaXQoZXZlbnQpYCBmaXJlcyBzeW5jaHJvbm91c2x5IHdpdGggc3RhZ2UtY29udGV4dFxuICogZW5yaWNobWVudC4gUGFzcy10aHJvdWdoIOKAlCBubyBidWZmZXJpbmcsIHplcm8gYWxsb2NhdGlvbiB3aGVuIG5vIHJlY29yZGVyXG4gKiBpcyBhdHRhY2hlZC5cbiAqL1xuZXhwb3J0IHR5cGUgeyBFbWl0RXZlbnQsIEVtaXRSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gT2JzZXJ2ZSDigJQgRmxvdyAoRmxvd1JlY29yZGVyLCBmaXJlcyBhZnRlciBzdGFnZSBleGVjdXRpb24pXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHR5cGUge1xuICBGbG93QnJlYWtFdmVudCxcbiAgRmxvd0RlY2lzaW9uRXZlbnQsXG4gIEZsb3dFcnJvckV2ZW50LFxuICBGbG93Rm9ya0V2ZW50LFxuICBGbG93TG9vcEV2ZW50LFxuICBGbG93TmV4dEV2ZW50LFxuICBGbG93UmVjb3JkZXIsXG4gIEZsb3dSdW5FdmVudCxcbiAgRmxvd1J1bkZhaWxlZEV2ZW50LFxuICBGbG93U2VsZWN0ZWRFdmVudCxcbiAgRmxvd1N0YWdlRXZlbnQsXG4gIEZsb3dTdGFnZVJldHJ5RXZlbnQsXG4gIEZsb3dTdWJmbG93RXZlbnQsXG4gIEZsb3dTdWJmbG93UmVnaXN0ZXJlZEV2ZW50LFxuICBUcmF2ZXJzYWxDb250ZXh0LFxufSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB0eXBlIHsgQ29tYmluZWROYXJyYXRpdmVFbnRyeSB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3dcbiAqXG4gKiBgTmFycmF0aXZlRm9ybWF0dGVyYCDigJQgcGx1Z2dhYmxlIGZvcm1hdHRlciB0aGF0IGNvbnZlcnRzIGV2ZW50IGNvbnRleHRcbiAqIG9iamVjdHMgaW50byB0aGUgdGV4dCBsaW5lcyBvZiB0aGUgbmFycmF0aXZlLiBQcmVmZXIgdGhpcyBuYW1lIGluIG5ld1xuICogY29kZTsgYE5hcnJhdGl2ZVJlbmRlcmVyYCBpcyBhIGRlcHJlY2F0ZWQgYWxpYXMgdGhhdCB3aWxsIGJlIHJlbW92ZWQgaW5cbiAqIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UuXG4gKi9cbmV4cG9ydCB0eXBlIHsgTmFycmF0aXZlRm9ybWF0dGVyLCBOYXJyYXRpdmVSZW5kZXJlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgdHlwZSB7IE1hbmlmZXN0RW50cnkgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IE1hbmlmZXN0Rmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBBZGFwdGl2ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgTWlsZXN0b25lTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBQcm9ncmVzc2l2ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgUkxFTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBTZXBhcmF0ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgU2lsZW50TmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBXaW5kb3dlZE5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNlbGYtRGVzY3JpYmluZyDigJQgLmNvbnRyYWN0KCksIHRvT3BlbkFQSSgpLCB0b01DUFRvb2woKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFNlbGYtRGVzY3JpYmluZyAqL1xuZXhwb3J0IHR5cGUge1xuICBGbG93Q2hhcnRDb250cmFjdCxcbiAgRmxvd0NoYXJ0Q29udHJhY3RPcHRpb25zLFxuICBKc29uU2NoZW1hLFxuICBPcGVuQVBJT3B0aW9ucyxcbiAgT3BlbkFQSVNwZWMsXG59IGZyb20gJy4vbGliL2NvbnRyYWN0L2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU25hcHNob3QgJiBDb21wb3NpdGlvbiDigJQgU3ViZmxvdyBuYXZpZ2F0aW9uIGFuZCBDb21wb3NhYmxlUnVubmVyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgU25hcHNob3QgJiBDb21wb3NpdGlvbiAqL1xuZXhwb3J0IHR5cGUgeyBDb21wb3NhYmxlUnVubmVyIH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBTbmFwc2hvdCAmIENvbXBvc2l0aW9uICovXG5leHBvcnQgdHlwZSB7IFJlY29yZGVyU25hcHNob3QsIFJ1bnRpbWVTbmFwc2hvdCwgU3VidHJlZVNuYXBzaG90IH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBTbmFwc2hvdCAmIENvbXBvc2l0aW9uICovXG5leHBvcnQgeyBnZXRTdWJ0cmVlU25hcHNob3QsIGxpc3RTdWJmbG93UGF0aHMgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTY29wZVJlY29yZGVyIENvbXBvc2l0aW9uIOKAlCBCdW5kbGUgbXVsdGlwbGUgcmVjb3JkZXJzIGludG8gZG9tYWluIHByZXNldHNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBTY29wZVJlY29yZGVyICovXG5leHBvcnQgeyBDb21wb3NpdGVSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUGF1c2UvUmVzdW1lIOKAlCBTZXJpYWxpemFibGUgY2hlY2twb2ludHMgZm9yIGxvbmctcnVubmluZyBvciBodW1hbi1pbi10aGUtbG9vcCBmbG93c1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFBhdXNlL1Jlc3VtZSAqL1xuLyoqIEBjYXRlZ29yeSBQYXVzZS9SZXN1bWUgKi9cbmV4cG9ydCB0eXBlIHsgRmxvd2NoYXJ0Q2hlY2twb2ludCwgUGF1c2FibGVIYW5kbGVyIH0gZnJvbSAnLi9saWIvcGF1c2UvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBQYXVzZS9SZXN1bWVcbiAqXG4gKiBgaW50ZXJydXB0KHNjb3BlLCB7IHJlYXNvbiwgZXhwZWN0cz8gfSlgIOKAlCBzdG9wIG1pZC1zdGFnZSB0byBhc2sgYSBxdWVzdGlvbixcbiAqIGFuZCBnZXQgdGhlIGFuc3dlciBiYWNrIGF0IHRoZSBzYW1lIGNhbGwgc2l0ZSB3aGVuIHRoZSBydW4gcmVzdW1lcy4gUmVzdW1lXG4gKiByZS1lbnRlcnMgdGhlIHN0YWdlIGZyb20gaXRzIFRPUCAoc3RhZ2VzIGFyZSBhdG9taWMpLCBzbyBrZWVwIHRoZSBoYWxmXG4gKiBiZWZvcmUgdGhlIGNhbGwgaWRlbXBvdGVudC5cbiAqL1xuZXhwb3J0IHR5cGUgeyBJbnRlcnJ1cHRQYXlsb2FkIH0gZnJvbSAnLi9saWIvcGF1c2UvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFBhdXNlL1Jlc3VtZSAqL1xuZXhwb3J0IHsgaW50ZXJydXB0IH0gZnJvbSAnLi9saWIvcGF1c2UvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFNjb3BlUmVjb3JkZXIgKi9cbmV4cG9ydCB0eXBlIHsgQ29tcG9zaXRlU25hcHNob3QgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENvbmZpZ3VyYXRpb24g4oCUIFR5cGVzIHBhc3NlZCB0byBGbG93Q2hhcnRFeGVjdXRvciBhbmQgcnVuKClcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBDb25maWd1cmF0aW9uICovXG5leHBvcnQgdHlwZSB7IEV4ZWN1dGlvbkVudiwgRXhlY3V0b3JSZXN1bHQsIFBhdXNlZFJlc3VsdCwgUnVuT3B0aW9ucyB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgQ29uZmlndXJhdGlvbiAqL1xuZXhwb3J0IHR5cGUgeyBTY29wZUZhY3RvcnkgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBDb25maWd1cmF0aW9uXG4gKlxuICogUmVhZC10cmFja2luZyBwb2xpY3kgZm9yIGBTdGFnZVNuYXBzaG90LnN0YWdlUmVhZHNgICgjMTQpOlxuICogYCdmdWxsJ2AgKGRlZmF1bHQg4oCUIHBlci1yZWFkIHZhbHVlIGNsb25lLCBoaXN0b3JpY2FsIGJlaGF2aW9yKSAvXG4gKiBgJ3N1bW1hcnknYCAoY2hlYXAgYFJlYWRTdW1tYXJ5TWFya2VyYCBwZXIgcmVhZCkgLyBgJ29mZidgIChubyB0cmFja2luZyxcbiAqIHplcm8gcGVyLXJlYWQgY2xvbmUpLiBQYXNzIGFzIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgcmVhZFRyYWNraW5nIH0pYFxuICogb3IgY2FsbCBgZXhlY3V0b3Iuc2V0UmVhZFRyYWNraW5nKG1vZGUpYCBiZWZvcmUgYHJ1bigpYC5cbiAqL1xuZXhwb3J0IHR5cGUgeyBSZWFkU3VtbWFyeU1hcmtlciwgUmVhZFRyYWNraW5nTW9kZSB9IGZyb20gJy4vbGliL21lbW9yeS9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IENvbmZpZ3VyYXRpb25cbiAqXG4gKiBXcml0ZS10cmFja2luZyBwb2xpY3kgZm9yIGBTdGFnZVNuYXBzaG90LnN0YWdlV3JpdGVzYCAoIzEzYy1BKSDigJQgdGhlXG4gKiBzaWJsaW5nIG9mIGBSZWFkVHJhY2tpbmdNb2RlYDsgYm90aCBhbGlhcyB0aGUgc2hhcmVkIGBSZXRlbnRpb25Qb2xpY3lgXG4gKiBmYW1pbHkgZnJvbSBgbGliL2NhcHR1cmVgLiBgJ2Z1bGwnYCAoZGVmYXVsdCDigJQgcGVyLXdyaXRlIHZhbHVlIGNsb25lLFxuICogaGlzdG9yaWNhbCBiZWhhdmlvcikgLyBgJ3N1bW1hcnknYCAoY2hlYXAgYFdyaXRlU3VtbWFyeU1hcmtlcmAgcGVyIHdyaXRlKVxuICogLyBgJ29mZidgIChubyB0cmFja2luZzsgYHN0YWdlV3JpdGVzYCBhYnNlbnQgYW5kIHRoZSBgb25Db21taXRgIG11dGF0aW9uc1xuICogcGF5bG9hZCBpcyBlbXB0eSDigJQgd3JpdGVzIHRoZW1zZWx2ZXMgc3RpbGwgY29tbWl0LCBhbmQgdGhlIGNvbW1pdCBsb2cgaXNcbiAqIHVuYWZmZWN0ZWQpLiBQYXNzIGFzIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgd3JpdGVUcmFja2luZyB9KWAgb3JcbiAqIGNhbGwgYGV4ZWN1dG9yLnNldFdyaXRlVHJhY2tpbmcobW9kZSlgIGJlZm9yZSBgcnVuKClgLlxuICovXG5leHBvcnQgdHlwZSB7IFJldGVudGlvblBvbGljeSwgV3JpdGVTdW1tYXJ5TWFya2VyLCBXcml0ZVRyYWNraW5nTW9kZSB9IGZyb20gJy4vbGliL21lbW9yeS9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IENvbmZpZ3VyYXRpb25cbiAqXG4gKiBDb21taXQtdmFsdWVzIGVuY29kaW5nIGZvciB0aGUgQ09NTUlUIExPRyAoIzEzYy1CKSDigJQgdGhlIHRoaXJkIGRpYWwgb2ZcbiAqIHRoZSBmYW1pbHksIGFuZCB0aGUgb25seSBMT1NTTEVTUyBvbmUgKGl0IGNoYW5nZXMgdGhlIGxvZydzIGVuY29kaW5nLFxuICogbmV2ZXIgaXRzIGluZm9ybWF0aW9uKS4gYCdmdWxsJ2AgKGRlZmF1bHQg4oCUIGV2ZXJ5IHN1cnZpdmluZyBgc2V0YCBzdG9yZXNcbiAqIHRoZSBmdWxsIGZpbmFsIHZhbHVlLCBieXRlLWlkZW50aWNhbCB0byBoaXN0b3J5KSAvIGAnZGVsdGEnYCAoYXJyYXlcbiAqIG5ldC1jaGFuZ2VzIHRoYXQgYXJlIFwiYmFzZSBwbHVzIGEgdGFpbFwiIGNvbW1pdCBhcyBhbiBgYXBwZW5kYCB2ZXJiXG4gKiBzdG9yaW5nIG9ubHkgdGhlIHRhaWw7IGBkZWxldGVWYWx1ZSgpYCBjb21taXRzIGFzIGEgcmVhbCBgZGVsZXRlYCB2ZXJiO1xuICogb25lIHRyYWNlIGVudHJ5IHBlciBzdXJ2aXZpbmcgcGF0aCkuIFJlcGxheSByZWNvbnN0cnVjdHMgZXZlcnkgc3RlcCdzXG4gKiBmdWxsIHN0YXRlIGV4YWN0bHkuIENvbnN1bWVycyByZWFkaW5nIGBidW5kbGUub3ZlcndyaXRlW2tleV1gIGFzIHRoZSBmdWxsXG4gKiB2YWx1ZSBtdXN0IHVzZSBgY29tbWl0VmFsdWVBdGAgZnJvbSBgZm9vdHByaW50anMvdHJhY2VgLiBQYXNzIGFzXG4gKiBgbmV3IEZsb3dDaGFydEV4ZWN1dG9yKGNoYXJ0LCB7IGNvbW1pdFZhbHVlcyB9KWAgb3IgY2FsbFxuICogYGV4ZWN1dG9yLnNldENvbW1pdFZhbHVlcyhtb2RlKWAgYmVmb3JlIGBydW4oKWA7IHRoZSBhY3RpdmUgbW9kZSBpcyB0aGVcbiAqIHNuYXBzaG90IGRpc2NyaW1pbmFudCBgZ2V0U25hcHNob3QoKS5jb21taXRWYWx1ZXNgLlxuICovXG5leHBvcnQgdHlwZSB7IENvbW1pdFZhbHVlc01vZGUgfSBmcm9tICcuL2xpYi9tZW1vcnkvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDb250cmFjdCAmIFZhbGlkYXRpb25cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBDb250cmFjdCAmIFZhbGlkYXRpb24gKi9cbmV4cG9ydCB0eXBlIHsgU2NoZW1hS2luZCwgVmFsaWRhdGlvbklzc3VlLCBWYWxpZGF0aW9uUmVzdWx0IH0gZnJvbSAnLi9saWIvc2NoZW1hL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBDb250cmFjdCAmIFZhbGlkYXRpb24gKi9cbmV4cG9ydCB7IGRldGVjdFNjaGVtYSwgaXNWYWxpZGF0YWJsZSwgaXNab2QgfSBmcm9tICcuL2xpYi9zY2hlbWEvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IENvbnRyYWN0ICYgVmFsaWRhdGlvbiAqL1xuZXhwb3J0IHsgSW5wdXRWYWxpZGF0aW9uRXJyb3IsIHZhbGlkYXRlQWdhaW5zdFNjaGVtYSwgdmFsaWRhdGVPclRocm93IH0gZnJvbSAnLi9saWIvc2NoZW1hL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRXJyb3IgVXRpbGl0aWVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgRXJyb3IgVXRpbGl0aWVzICovXG5leHBvcnQgdHlwZSB7IFN0cnVjdHVyZWRFcnJvckluZm8gfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IEVycm9yIFV0aWxpdGllcyAqL1xuZXhwb3J0IHsgZXh0cmFjdEVycm9ySW5mbywgZm9ybWF0RXJyb3JJbmZvIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRGV2IFRvb2xzIOKAlCBNb2RlIGZsYWdzIGFuZCBab2Qgc2NvcGUgdXRpbGl0aWVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQGNhdGVnb3J5IERldiBUb29sc1xuICpcbiAqIEdsb2JhbCBkZXYtbW9kZSBmbGFnLiBDYWxsIGBlbmFibGVEZXZNb2RlKClgIGF0IGFwcGxpY2F0aW9uIHN0YXJ0dXAgdG9cbiAqIHR1cm4gb24gZGV2ZWxvcGVyLW9ubHkgZGlhZ25vc3RpY3MgYWNyb3NzIHRoZSBsaWJyYXJ5IOKAlCBjaXJjdWxhci1yZWZlcmVuY2VcbiAqIGRldGVjdGlvbiBpbiBzY29wZSB3cml0ZXMsIHdhcm5pbmdzIHdoZW4gYSByZWNvcmRlciBoYXMgbm8gb2JzZXJ2ZXJcbiAqIG1ldGhvZHMsIHN1c3BpY2lvdXMtcHJlZGljYXRlIHdhcm5pbmdzIGluIGRlY2lkZS9zZWxlY3QsIHN0cnVjdHVyYWxcbiAqIGNoZWNrcyBpbiBgZ2V0U3VidHJlZVNuYXBzaG90YCwgYW5kIGFueSBmdXR1cmUgZGV2LW9ubHkgZGlhZ25vc3RpYy5cbiAqXG4gKiBQcm9kdWN0aW9uIGxlYXZlcyBpdCBPRkYgYnkgZGVmYXVsdCAoemVybyBvdmVyaGVhZCkuIFNlZSB0aGUgSlNEb2Mgb25cbiAqIGBlbmFibGVEZXZNb2RlYCBmb3IgdGhlIGZ1bGwgbGlzdCBhbmQgdXNhZ2UgZXhhbXBsZS5cbiAqL1xuZXhwb3J0IHsgZGlzYWJsZURldk1vZGUsIGVuYWJsZURldk1vZGUsIGlzRGV2TW9kZSB9IGZyb20gJy4vbGliL3Njb3BlL2RldGVjdENpcmN1bGFyLmpzJztcblxuLy8gYGRlZmluZVNjb3BlRnJvbVpvZGAgYW5kIHRoZSBvdGhlciB6b2QtYmFzZWQgc2NvcGUgaGVscGVycyBtb3ZlZCB0byB0aGUgb3B0LWluXG4vLyBgZm9vdHByaW50anMvem9kYCBlbnRyeSDigJQga2VlcGluZyB6b2Qgb3V0IG9mIHRoZSBjb3JlIGxvYWQgcGF0aCAoaXQgaXMgYW5cbi8vIG9wdGlvbmFsIHBlZXIpLiBJbXBvcnQgdGhlbSBmcm9tICdmb290cHJpbnRqcy96b2QnLlxuIl19
128
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHOzs7QUFTSCw0QkFBNEI7QUFDNUIsbURBQXdGO0FBQS9FLHFHQUFBLFNBQVMsT0FBQTtBQUFFLDRHQUFBLGdCQUFnQixPQUFBO0FBQUUsNkdBQUEsaUJBQWlCLE9BQUE7QUE2QnZELDRCQUE0QjtBQUM1QiwrQ0FBMkM7QUFBbEMseUdBQUEsU0FBUyxPQUFBO0FBb0JsQixtQ0FBbUM7QUFDbkMsa0RBQXVEO0FBQTlDLGtHQUFBLE1BQU0sT0FBQTtBQUFFLGtHQUFBLE1BQU0sT0FBQTtBQVl2QixvQkFBb0I7QUFDcEIsa0RBQTBEO0FBQWpELDZHQUFBLGlCQUFpQixPQUFBO0FBRTFCLG9CQUFvQjtBQUNwQixrREFBbUQ7QUFBMUMsc0dBQUEsVUFBVSxPQUFBO0FBcUJuQiwrQkFBK0I7QUFDL0IsaURBQXNEO0FBQTdDLDBHQUFBLGNBQWMsT0FBQTtBQUV2QiwrQkFBK0I7QUFDL0IsaURBQXFEO0FBQTVDLHlHQUFBLGFBQWEsT0FBQTtBQUV0QixvQ0FBb0M7QUFDcEMsb0RBQTREO0FBQW5ELDZHQUFBLGlCQUFpQixPQUFBO0FBbUMxQixxRUFBcUU7QUFDckUsb0RBS2lDO0FBSi9CLGtIQUFBLHNCQUFzQixPQUFBO0FBQ3RCLGtIQUFBLHNCQUFzQixPQUFBO0FBQ3RCLDhHQUFBLGtCQUFrQixPQUFBO0FBQ2xCLHVHQUFBLFdBQVcsT0FBQTtBQWtEYiwrQkFBK0I7QUFDL0Isa0RBQThEO0FBQXJELGlIQUFBLHFCQUFxQixPQUFBO0FBSzlCLCtCQUErQjtBQUMvQixtREFBNkQ7QUFBcEQsaUhBQUEsb0JBQW9CLE9BQUE7QUFFN0IsK0JBQStCO0FBQy9CLG1EQUFzRTtBQUE3RCwwSEFBQSw2QkFBNkIsT0FBQTtBQUV0QywrQkFBK0I7QUFDL0IsbURBQXVFO0FBQTlELDJIQUFBLDhCQUE4QixPQUFBO0FBRXZDLCtCQUErQjtBQUMvQixtREFBeUU7QUFBaEUsNkhBQUEsZ0NBQWdDLE9BQUE7QUFFekMsK0JBQStCO0FBQy9CLG1EQUFpRTtBQUF4RCxxSEFBQSx3QkFBd0IsT0FBQTtBQUVqQywrQkFBK0I7QUFDL0IsbURBQXNFO0FBQTdELDBIQUFBLDZCQUE2QixPQUFBO0FBRXRDLCtCQUErQjtBQUMvQixtREFBb0U7QUFBM0Qsd0hBQUEsMkJBQTJCLE9BQUE7QUFFcEMsK0JBQStCO0FBQy9CLG1EQUFzRTtBQUE3RCwwSEFBQSw2QkFBNkIsT0FBQTtBQXlCdEMsdUNBQXVDO0FBQ3ZDLG1EQUE2RTtBQUFwRSwrR0FBQSxrQkFBa0IsT0FBQTtBQUFFLDZHQUFBLGdCQUFnQixPQUFBO0FBRTdDLCtFQUErRTtBQUMvRSw0RUFBNEU7QUFDNUUsK0VBQStFO0FBRS9FLDhCQUE4QjtBQUM5QixxREFBNEQ7QUFBbkQsOEdBQUEsaUJBQWlCLE9BQUE7QUFvQjFCLDZCQUE2QjtBQUM3QixrREFBaUQ7QUFBeEMsc0dBQUEsU0FBUyxPQUFBO0FBaUVsQixzQ0FBc0M7QUFDdEMsbURBQTJFO0FBQWxFLHlHQUFBLFlBQVksT0FBQTtBQUFFLDBHQUFBLGFBQWEsT0FBQTtBQUFFLGtHQUFBLEtBQUssT0FBQTtBQUUzQyxzQ0FBc0M7QUFDdEMsbURBQXFHO0FBQTVGLGlIQUFBLG9CQUFvQixPQUFBO0FBQUUsa0hBQUEscUJBQXFCLE9BQUE7QUFBRSw0R0FBQSxlQUFlLE9BQUE7QUFTckUsZ0NBQWdDO0FBQ2hDLG1EQUEwRTtBQUFqRSw2R0FBQSxnQkFBZ0IsT0FBQTtBQUFFLDRHQUFBLGVBQWUsT0FBQTtBQUUxQywrRUFBK0U7QUFDL0UsaURBQWlEO0FBQ2pELCtFQUErRTtBQUUvRTs7Ozs7Ozs7Ozs7R0FXRztBQUNILG1FQUF5RjtBQUFoRixtSEFBQSxjQUFjLE9BQUE7QUFBRSxrSEFBQSxhQUFhLE9BQUE7QUFBRSw4R0FBQSxTQUFTLE9BQUE7QUFFakQsaUZBQWlGO0FBQ2pGLDRFQUE0RTtBQUM1RSxzREFBc0QiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEZvb3RQcmludCDigJQgUHVibGljIEFQSSAodjMpXG4gKlxuICogVGhlIGZsb3djaGFydCBwYXR0ZXJuIGZvciBiYWNrZW5kIGNvZGUuXG4gKiBCdWlsZCDihpIgUnVuIOKGkiBPYnNlcnZlLlxuICpcbiAqICoqVGhyZWUgaW1wb3J0IHBhdGhzOioqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgZmxvd0NoYXJ0LCBkZWNpZGUsIG5hcnJhdGl2ZSB9IGZyb20gJ2Zvb3RwcmludGpzJzsgICAgICAgICAgIC8vIG1haW4g4oCUIHN0YXJ0IGhlcmVcbiAqIGltcG9ydCB7IG1ldHJpY3MsIGRlYnVnLCBtYW5pZmVzdCB9ICAgICBmcm9tICdmb290cHJpbnRqcy9yZWNvcmRlcnMnOyAvLyByZWNvcmRlciBmYWN0b3JpZXNcbiAqIGltcG9ydCB7IFNoYXJlZE1lbW9yeSwgU3RhZ2VDb250ZXh0IH0gICBmcm9tICdmb290cHJpbnRqcy9hZHZhbmNlZCc7ICAvLyBpbnRlcm5hbHNcbiAqIGBgYFxuICpcbiAqIEBtb2R1bGVcbiAqL1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBRdWljayBTdGFydCDigJQgRXZlcnl0aGluZyB5b3UgbmVlZCBmb3IgOTAlIG9mIHVzZSBjYXNlc1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0ICovXG5leHBvcnQgdHlwZSB7IEZsb3dDaGFydCwgU3RhZ2VGdW5jdGlvbiBhcyBTdGFnZUhhbmRsZXIsIFN0cmVhbUhhbmRsZXJzIH0gZnJvbSAnLi9saWIvYnVpbGRlci9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUXVpY2sgU3RhcnQgKi9cbmV4cG9ydCB7IGZsb3dDaGFydCwgRmxvd0NoYXJ0QnVpbGRlciwgZmxvd0NoYXJ0U2VsZWN0b3IgfSBmcm9tICcuL2xpYi9idWlsZGVyL2luZGV4LmpzJztcblxuLyoqXG4gKiBAY2F0ZWdvcnkgUXVpY2sgU3RhcnRcbiAqXG4gKiBDb25maWcgZm9yIGAuYWRkUGFyYWxsZWxGb3JFYWNoKClgIOKAlCBvbmUgYnJhbmNoIHBlciBpdGVtLCBicmFuY2ggY291bnRcbiAqIGRlY2lkZWQgYXQgcnVuIHRpbWUgZnJvbSB0aGUgcGF5bG9hZC4gYG1heEJyYW5jaGVzYCBhbmQgYGludG9gIGFyZSByZXF1aXJlZFxuICogb24gcHVycG9zZSAoc2VlIGRvY3MvZGVzaWduL2V4ZWN1dGlvbi1jb250cm9sLm1kKS5cbiAqL1xuZXhwb3J0IHR5cGUgeyBCcmFuY2hDaGFydCwgUGFyYWxsZWxGb3JFYWNoQ29uZmlnLCBSZXRyeVBvbGljeSB9IGZyb20gJy4vbGliL2J1aWxkZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFF1aWNrIFN0YXJ0IOKAlCBidWlsZC10aW1lIG9ic2VydmVyICh0d2luIG9mIEZsb3dSZWNvcmRlcikgKi9cbmV4cG9ydCB0eXBlIHtcbiAgU3RydWN0dXJlRGVjaWRlckNvbXBsZXRlRXZlbnQsXG4gIFN0cnVjdHVyZUVkZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVFZGdlS2luZCxcbiAgU3RydWN0dXJlTG9vcEVkZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVSZWNvcmRlcixcbiAgU3RydWN0dXJlU3RhZ2VBZGRlZEV2ZW50LFxuICBTdHJ1Y3R1cmVTdGFnZVRhZ2dlZEV2ZW50LFxuICBTdHJ1Y3R1cmVTdWJmbG93TW91bnRlZEV2ZW50LFxufSBmcm9tICcuL2xpYi9idWlsZGVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCAqL1xuZXhwb3J0IHR5cGUgeyBUeXBlZFN0YWdlRnVuY3Rpb24gfSBmcm9tICcuL2xpYi9idWlsZGVyL3R5cGVkRmxvd0NoYXJ0LmpzJztcblxuLyoqIEBjYXRlZ29yeSBRdWljayBTdGFydCAqL1xuZXhwb3J0IHR5cGUgeyBTY29wZU1ldGhvZHMsIFR5cGVkU2NvcGUgfSBmcm9tICcuL2xpYi9yZWFjdGl2ZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgUXVpY2sgU3RhcnQgKi9cbmV4cG9ydCB7IG5hcnJhdGl2ZSB9IGZyb20gJy4vcmVjb3JkZXJzLmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRGVjaXNpb24gQnJhbmNoaW5nIOKAlCBkZWNpZGUoKSAvIHNlbGVjdCgpIHdpdGggZXZpZGVuY2UgY2FwdHVyZVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IERlY2lzaW9uIEJyYW5jaGluZyAqL1xuZXhwb3J0IHR5cGUge1xuICBEZWNpZGVSdWxlLFxuICBEZWNpc2lvbkV2aWRlbmNlLFxuICBEZWNpc2lvblJlc3VsdCxcbiAgRGVmYXVsdEJyYW5jaCxcbiAgRmlsdGVyT3BzLFxuICBSdWxlRXZpZGVuY2UsXG4gIFNlbGVjdGlvbkV2aWRlbmNlLFxuICBTZWxlY3Rpb25SZXN1bHQsXG4gIFdoZW5DbGF1c2UsXG4gIFdoZXJlRmlsdGVyLFxufSBmcm9tICcuL2xpYi9kZWNpZGUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IERlY2lzaW9uIEJyYW5jaGluZyAqL1xuZXhwb3J0IHsgZGVjaWRlLCBzZWxlY3QgfSBmcm9tICcuL2xpYi9kZWNpZGUvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBSdW4g4oCUIEV4ZWN1dGUgY2hhcnRzIGFuZCBjb2xsZWN0IHJlc3VsdHNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBSdW4gKi9cbmV4cG9ydCB0eXBlIHsgUnVuUmVzdWx0IH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBSdW4gKi9cbmV4cG9ydCB0eXBlIHsgRmxvd0NoYXJ0RXhlY3V0b3JPcHRpb25zIH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBSdW4gKi9cbmV4cG9ydCB7IEZsb3dDaGFydEV4ZWN1dG9yIH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBSdW4gKi9cbmV4cG9ydCB7IFJ1bkNvbnRleHQgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFJ1biAqL1xuZXhwb3J0IHR5cGUgeyBDaGFydE9wZW5BUElPcHRpb25zLCBNQ1BUb29sRGVzY3JpcHRpb24sIFJ1bm5hYmxlRmxvd0NoYXJ0IH0gZnJvbSAnLi9saWIvcnVubmVyL1J1bm5hYmxlQ2hhcnQuanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBPYnNlcnZlIOKAlCBEYXRhIChzY29wZSByZWNvcmRlcnMsIGZpcmUgZHVyaW5nIHN0YWdlIGV4ZWN1dGlvbilcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBEYXRhICovXG5leHBvcnQgdHlwZSB7XG4gIENvbW1pdEV2ZW50LFxuICBFcnJvckV2ZW50LFxuICBSZWFkRXZlbnQsXG4gIFJlZGFjdGlvblBvbGljeSxcbiAgUmVkYWN0aW9uUmVwb3J0LFxuICBTY29wZVJlY29yZGVyLFxuICBTdGFnZUV2ZW50LFxuICBXcml0ZUV2ZW50LFxufSBmcm9tICcuL2xpYi9zY29wZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRGF0YSAqL1xuZXhwb3J0IHsgTWV0cmljUmVjb3JkZXIgfSBmcm9tICcuL2xpYi9zY29wZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRGF0YSAqL1xuZXhwb3J0IHsgRGVidWdSZWNvcmRlciB9IGZyb20gJy4vbGliL3Njb3BlL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBPcGVyYXRpb24gKi9cbmV4cG9ydCB7IFJlY29yZGVyT3BlcmF0aW9uIH0gZnJvbSAnLi9saWIvcmVjb3JkZXIvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBEZWxpdmVyeSB0aWVyIChSRkMtMDAxIGRlZmVycmVkIG9ic2VydmVycylcbiAqXG4gKiBFdmVyeSBgYXR0YWNoKlJlY29yZGVyYCBjYWxsIGFjY2VwdHMgYW4gb3B0aW9ucyBiYWc6XG4gKiBgZXhlY3V0b3IuYXR0YWNoU2NvcGVSZWNvcmRlcihyZWMsIHsgZGVsaXZlcnk6ICdkZWZlcnJlZCcgfSlgIHRha2VzIHRoZVxuICogcmVjb3JkZXIgT1VUIG9mIHRoZSBlbmdpbmUncyBob3QgcGF0aCDigJQgZXZlbnRzIGFyZSBjYXB0dXJlZCBpbnRvIG9uZVxuICogYm91bmRlZCwgdG90YWxseS1vcmRlcmVkIHF1ZXVlIGFuZCBkZWxpdmVyZWQgYXQgdGhlIG5leHQgbWljcm90YXNrXG4gKiBjaGVja3BvaW50IChcIm9uZSBiZWF0IGJlaGluZFwiKS4gT21pdCBgZGVsaXZlcnlgIGZvciB0aGUgaGlzdG9yaWNhbFxuICogc3luY2hyb25vdXMgY2FsbCAoYnl0ZS1pZGVudGljYWwgdG8gcHJldmlvdXMgcmVsZWFzZXMpLiBBY2NvdW50aW5nXG4gKiBzdXJmYWNlcyBvbiBgc25hcHNob3Qub2JzZXJ2ZXJTdGF0c2A7IGBleGVjdXRvci5kcmFpbk9ic2VydmVycygpYCBzZXR0bGVzXG4gKiBhc3luYyBsaXN0ZW5lcnMgYmVmb3JlIHNodXRkb3duLiBTZWUgYGRvY3MvZ3VpZGVzL29ic2VydmVycy1kZWZlcnJlZC5tZGAuXG4gKi9cbmV4cG9ydCB0eXBlIHtcbiAgQXR0YWNoUmVjb3JkZXJPcHRpb25zLFxuICBPYnNlcnZlckRlbGl2ZXJ5LFxuICBPYnNlcnZlckRyYWluUmVzdWx0LFxuICBPYnNlcnZlclN0YXRzLFxufSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBEZWxpdmVyeSB0aWVyIChSRkMtMDAxIGRlZmVycmVkIG9ic2VydmVycylcbiAqXG4gKiBgQ2FwdHVyZVBvbGljeWAg4oCUIGhvdyBhIGRlZmVycmVkIGV2ZW50J3MgcGF5bG9hZCBpcyBtYXRlcmlhbGl6ZWQgYXRcbiAqIGNhcHR1cmUgdGltZSAoYCdzdW1tYXJ5J2AgZGVmYXVsdCAvIGAnY2xvbmUnYCAvIGAncmVmJ2ApLiBgT3ZlcmZsb3dQb2xpY3lgXG4gKiDigJQgd2hhdCBhIHNhdHVyYXRlZCBxdWV1ZSBkb2VzIChgJ2Ryb3Atb2xkZXN0J2AgZGVmYXVsdCAvIGAnc2FtcGxlJ2AgL1xuICogYCdibG9jaydgKS4gYERpc3BhdGNoZXJTdGF0c2AgLyBgTGlzdGVuZXJTdGF0c2Ag4oCUIHRoZSBhY2NvdW50aW5nIHNoYXBlc1xuICogZW1iZWRkZWQgaW4gYE9ic2VydmVyU3RhdHNgLiBUeXBlcyBvbmx5IOKAlCB0aGUgb2JzZXJ2ZXItcXVldWUgbW9kdWxlXG4gKiBpdHNlbGYgaXMgaW50ZXJuYWw7IGNvbnN1bWVycyB1c2UgdGhlIGF0dGFjaCBvcHRpb25zLlxuICovXG5leHBvcnQgdHlwZSB7IENhcHR1cmVQb2xpY3ksIERpc3BhdGNoZXJTdGF0cywgTGlzdGVuZXJTdGF0cywgT3ZlcmZsb3dQb2xpY3kgfSBmcm9tICcuL2xpYi9vYnNlcnZlci1xdWV1ZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgQ29tYmluZWQgKGJvdGggZGF0YS1mbG93IGFuZCBjb250cm9sLWZsb3cpICovXG5leHBvcnQgdHlwZSB7IENvbWJpbmVkUmVjb3JkZXIgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIENvbWJpbmVkIChib3RoIGRhdGEtZmxvdyBhbmQgY29udHJvbC1mbG93KSAqL1xuZXhwb3J0IHtcbiAgaGFzRW1pdFJlY29yZGVyTWV0aG9kcyxcbiAgaGFzRmxvd1JlY29yZGVyTWV0aG9kcyxcbiAgaGFzUmVjb3JkZXJNZXRob2RzLFxuICBpc0Zsb3dFdmVudCxcbn0gZnJvbSAnLi9saWIvcmVjb3JkZXIvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBFbWl0ICh1c2VyLWF1dGhvcmVkIHN0cnVjdHVyZWQgZXZlbnRzKVxuICpcbiAqIFRoaXJkIG9ic2VydmVyIGNoYW5uZWwgKGFsb25nc2lkZSBgU2NvcGVSZWNvcmRlcmAgYW5kIGBGbG93UmVjb3JkZXJgKS4gQ29uc3VtZXJcbiAqIGNvZGUgY2FsbHMgYHNjb3BlLiRlbWl0KG5hbWUsIHBheWxvYWQpYCBmcm9tIGluc2lkZSBhIHN0YWdlOyBldmVyeSBhdHRhY2hlZFxuICogYEVtaXRSZWNvcmRlci5vbkVtaXQoZXZlbnQpYCBmaXJlcyBzeW5jaHJvbm91c2x5IHdpdGggc3RhZ2UtY29udGV4dFxuICogZW5yaWNobWVudC4gUGFzcy10aHJvdWdoIOKAlCBubyBidWZmZXJpbmcsIHplcm8gYWxsb2NhdGlvbiB3aGVuIG5vIHJlY29yZGVyXG4gKiBpcyBhdHRhY2hlZC5cbiAqL1xuZXhwb3J0IHR5cGUgeyBFbWl0RXZlbnQsIEVtaXRSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gT2JzZXJ2ZSDigJQgRmxvdyAoRmxvd1JlY29yZGVyLCBmaXJlcyBhZnRlciBzdGFnZSBleGVjdXRpb24pXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHR5cGUge1xuICBGbG93QnJlYWtFdmVudCxcbiAgRmxvd0RlY2lzaW9uRXZlbnQsXG4gIEZsb3dFcnJvckV2ZW50LFxuICBGbG93Rm9ya0V2ZW50LFxuICBGbG93TG9vcEV2ZW50LFxuICBGbG93TmV4dEV2ZW50LFxuICBGbG93UmVjb3JkZXIsXG4gIEZsb3dSdW5FdmVudCxcbiAgRmxvd1J1bkZhaWxlZEV2ZW50LFxuICBGbG93U2VsZWN0ZWRFdmVudCxcbiAgRmxvd1N0YWdlRXZlbnQsXG4gIEZsb3dTdGFnZVJldHJ5RXZlbnQsXG4gIEZsb3dTdWJmbG93RXZlbnQsXG4gIEZsb3dTdWJmbG93UmVnaXN0ZXJlZEV2ZW50LFxuICBUcmF2ZXJzYWxDb250ZXh0LFxufSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB0eXBlIHsgQ29tYmluZWROYXJyYXRpdmVFbnRyeSB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3dcbiAqXG4gKiBgTmFycmF0aXZlRm9ybWF0dGVyYCDigJQgcGx1Z2dhYmxlIGZvcm1hdHRlciB0aGF0IGNvbnZlcnRzIGV2ZW50IGNvbnRleHRcbiAqIG9iamVjdHMgaW50byB0aGUgdGV4dCBsaW5lcyBvZiB0aGUgbmFycmF0aXZlLiBQcmVmZXIgdGhpcyBuYW1lIGluIG5ld1xuICogY29kZTsgYE5hcnJhdGl2ZVJlbmRlcmVyYCBpcyBhIGRlcHJlY2F0ZWQgYWxpYXMgdGhhdCB3aWxsIGJlIHJlbW92ZWQgaW5cbiAqIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UuXG4gKi9cbmV4cG9ydCB0eXBlIHsgTmFycmF0aXZlRm9ybWF0dGVyLCBOYXJyYXRpdmVSZW5kZXJlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgdHlwZSB7IE1hbmlmZXN0RW50cnkgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IE9ic2VydmUg4oCUIEZsb3cgKi9cbmV4cG9ydCB7IE1hbmlmZXN0Rmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBBZGFwdGl2ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgTWlsZXN0b25lTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBQcm9ncmVzc2l2ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgUkxFTmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBTZXBhcmF0ZU5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgT2JzZXJ2ZSDigJQgRmxvdyAqL1xuZXhwb3J0IHsgU2lsZW50TmFycmF0aXZlRmxvd1JlY29yZGVyIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBPYnNlcnZlIOKAlCBGbG93ICovXG5leHBvcnQgeyBXaW5kb3dlZE5hcnJhdGl2ZUZsb3dSZWNvcmRlciB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNlbGYtRGVzY3JpYmluZyDigJQgLmNvbnRyYWN0KCksIHRvT3BlbkFQSSgpLCB0b01DUFRvb2woKVxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFNlbGYtRGVzY3JpYmluZyAqL1xuZXhwb3J0IHR5cGUge1xuICBGbG93Q2hhcnRDb250cmFjdCxcbiAgRmxvd0NoYXJ0Q29udHJhY3RPcHRpb25zLFxuICBKc29uU2NoZW1hLFxuICBPcGVuQVBJT3B0aW9ucyxcbiAgT3BlbkFQSVNwZWMsXG59IGZyb20gJy4vbGliL2NvbnRyYWN0L2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gU25hcHNob3QgJiBDb21wb3NpdGlvbiDigJQgU3ViZmxvdyBuYXZpZ2F0aW9uIGFuZCBDb21wb3NhYmxlUnVubmVyXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgU25hcHNob3QgJiBDb21wb3NpdGlvbiAqL1xuZXhwb3J0IHR5cGUgeyBDb21wb3NhYmxlUnVubmVyIH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBTbmFwc2hvdCAmIENvbXBvc2l0aW9uICovXG5leHBvcnQgdHlwZSB7IFJlY29yZGVyU25hcHNob3QsIFJ1bnRpbWVTbmFwc2hvdCwgU3VidHJlZVNuYXBzaG90IH0gZnJvbSAnLi9saWIvcnVubmVyL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBTbmFwc2hvdCAmIENvbXBvc2l0aW9uICovXG5leHBvcnQgeyBnZXRTdWJ0cmVlU25hcHNob3QsIGxpc3RTdWJmbG93UGF0aHMgfSBmcm9tICcuL2xpYi9ydW5uZXIvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBTY29wZVJlY29yZGVyIENvbXBvc2l0aW9uIOKAlCBCdW5kbGUgbXVsdGlwbGUgcmVjb3JkZXJzIGludG8gZG9tYWluIHByZXNldHNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBTY29wZVJlY29yZGVyICovXG5leHBvcnQgeyBDb21wb3NpdGVSZWNvcmRlciB9IGZyb20gJy4vbGliL3JlY29yZGVyL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gUGF1c2UvUmVzdW1lIOKAlCBTZXJpYWxpemFibGUgY2hlY2twb2ludHMgZm9yIGxvbmctcnVubmluZyBvciBodW1hbi1pbi10aGUtbG9vcCBmbG93c1xuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vKiogQGNhdGVnb3J5IFBhdXNlL1Jlc3VtZSAqL1xuLyoqIEBjYXRlZ29yeSBQYXVzZS9SZXN1bWUgKi9cbmV4cG9ydCB0eXBlIHsgRmxvd2NoYXJ0Q2hlY2twb2ludCwgUGF1c2FibGVIYW5kbGVyIH0gZnJvbSAnLi9saWIvcGF1c2UvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBQYXVzZS9SZXN1bWVcbiAqXG4gKiBgaW50ZXJydXB0KHNjb3BlLCB7IHJlYXNvbiwgZXhwZWN0cz8gfSlgIOKAlCBzdG9wIG1pZC1zdGFnZSB0byBhc2sgYSBxdWVzdGlvbixcbiAqIGFuZCBnZXQgdGhlIGFuc3dlciBiYWNrIGF0IHRoZSBzYW1lIGNhbGwgc2l0ZSB3aGVuIHRoZSBydW4gcmVzdW1lcy4gUmVzdW1lXG4gKiByZS1lbnRlcnMgdGhlIHN0YWdlIGZyb20gaXRzIFRPUCAoc3RhZ2VzIGFyZSBhdG9taWMpLCBzbyBrZWVwIHRoZSBoYWxmXG4gKiBiZWZvcmUgdGhlIGNhbGwgaWRlbXBvdGVudC5cbiAqL1xuZXhwb3J0IHR5cGUgeyBJbnRlcnJ1cHRQYXlsb2FkIH0gZnJvbSAnLi9saWIvcGF1c2UvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFBhdXNlL1Jlc3VtZSAqL1xuZXhwb3J0IHsgaW50ZXJydXB0IH0gZnJvbSAnLi9saWIvcGF1c2UvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IFNjb3BlUmVjb3JkZXIgKi9cbmV4cG9ydCB0eXBlIHsgQ29tcG9zaXRlU25hcHNob3QgfSBmcm9tICcuL2xpYi9yZWNvcmRlci9pbmRleC5qcyc7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIENvbmZpZ3VyYXRpb24g4oCUIFR5cGVzIHBhc3NlZCB0byBGbG93Q2hhcnRFeGVjdXRvciBhbmQgcnVuKClcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBDb25maWd1cmF0aW9uICovXG5leHBvcnQgdHlwZSB7IEV4ZWN1dGlvbkVudiwgRXhlY3V0b3JSZXN1bHQsIFBhdXNlZFJlc3VsdCwgUnVuT3B0aW9ucyB9IGZyb20gJy4vbGliL2VuZ2luZS9pbmRleC5qcyc7XG5cbi8qKiBAY2F0ZWdvcnkgQ29uZmlndXJhdGlvbiAqL1xuZXhwb3J0IHR5cGUgeyBTY29wZUZhY3RvcnkgfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKipcbiAqIEBjYXRlZ29yeSBDb25maWd1cmF0aW9uXG4gKlxuICogUmVhZC10cmFja2luZyBwb2xpY3kgZm9yIGBTdGFnZVNuYXBzaG90LnN0YWdlUmVhZHNgICgjMTQpOlxuICogYCdmdWxsJ2AgKGRlZmF1bHQg4oCUIHBlci1yZWFkIHZhbHVlIGNsb25lLCBoaXN0b3JpY2FsIGJlaGF2aW9yKSAvXG4gKiBgJ3N1bW1hcnknYCAoY2hlYXAgYFJlYWRTdW1tYXJ5TWFya2VyYCBwZXIgcmVhZCkgLyBgJ29mZidgIChubyB0cmFja2luZyxcbiAqIHplcm8gcGVyLXJlYWQgY2xvbmUpLiBQYXNzIGFzIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgcmVhZFRyYWNraW5nIH0pYFxuICogb3IgY2FsbCBgZXhlY3V0b3Iuc2V0UmVhZFRyYWNraW5nKG1vZGUpYCBiZWZvcmUgYHJ1bigpYC5cbiAqL1xuZXhwb3J0IHR5cGUgeyBSZWFkU3VtbWFyeU1hcmtlciwgUmVhZFRyYWNraW5nTW9kZSB9IGZyb20gJy4vbGliL21lbW9yeS9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IENvbmZpZ3VyYXRpb25cbiAqXG4gKiBXcml0ZS10cmFja2luZyBwb2xpY3kgZm9yIGBTdGFnZVNuYXBzaG90LnN0YWdlV3JpdGVzYCAoIzEzYy1BKSDigJQgdGhlXG4gKiBzaWJsaW5nIG9mIGBSZWFkVHJhY2tpbmdNb2RlYDsgYm90aCBhbGlhcyB0aGUgc2hhcmVkIGBSZXRlbnRpb25Qb2xpY3lgXG4gKiBmYW1pbHkgZnJvbSBgbGliL2NhcHR1cmVgLiBgJ2Z1bGwnYCAoZGVmYXVsdCDigJQgcGVyLXdyaXRlIHZhbHVlIGNsb25lLFxuICogaGlzdG9yaWNhbCBiZWhhdmlvcikgLyBgJ3N1bW1hcnknYCAoY2hlYXAgYFdyaXRlU3VtbWFyeU1hcmtlcmAgcGVyIHdyaXRlKVxuICogLyBgJ29mZidgIChubyB0cmFja2luZzsgYHN0YWdlV3JpdGVzYCBhYnNlbnQgYW5kIHRoZSBgb25Db21taXRgIG11dGF0aW9uc1xuICogcGF5bG9hZCBpcyBlbXB0eSDigJQgd3JpdGVzIHRoZW1zZWx2ZXMgc3RpbGwgY29tbWl0LCBhbmQgdGhlIGNvbW1pdCBsb2cgaXNcbiAqIHVuYWZmZWN0ZWQpLiBQYXNzIGFzIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgd3JpdGVUcmFja2luZyB9KWAgb3JcbiAqIGNhbGwgYGV4ZWN1dG9yLnNldFdyaXRlVHJhY2tpbmcobW9kZSlgIGJlZm9yZSBgcnVuKClgLlxuICovXG5leHBvcnQgdHlwZSB7IFJldGVudGlvblBvbGljeSwgV3JpdGVTdW1tYXJ5TWFya2VyLCBXcml0ZVRyYWNraW5nTW9kZSB9IGZyb20gJy4vbGliL21lbW9yeS9pbmRleC5qcyc7XG5cbi8qKlxuICogQGNhdGVnb3J5IENvbmZpZ3VyYXRpb25cbiAqXG4gKiBDb21taXQtdmFsdWVzIGVuY29kaW5nIGZvciB0aGUgQ09NTUlUIExPRyAoIzEzYy1CKSDigJQgdGhlIHRoaXJkIGRpYWwgb2ZcbiAqIHRoZSBmYW1pbHksIGFuZCB0aGUgb25seSBMT1NTTEVTUyBvbmUgKGl0IGNoYW5nZXMgdGhlIGxvZydzIGVuY29kaW5nLFxuICogbmV2ZXIgaXRzIGluZm9ybWF0aW9uKS4gYCdmdWxsJ2AgKGRlZmF1bHQg4oCUIGV2ZXJ5IHN1cnZpdmluZyBgc2V0YCBzdG9yZXNcbiAqIHRoZSBmdWxsIGZpbmFsIHZhbHVlLCBieXRlLWlkZW50aWNhbCB0byBoaXN0b3J5KSAvIGAnZGVsdGEnYCAoYXJyYXlcbiAqIG5ldC1jaGFuZ2VzIHRoYXQgYXJlIFwiYmFzZSBwbHVzIGEgdGFpbFwiIGNvbW1pdCBhcyBhbiBgYXBwZW5kYCB2ZXJiXG4gKiBzdG9yaW5nIG9ubHkgdGhlIHRhaWw7IGBkZWxldGVWYWx1ZSgpYCBjb21taXRzIGFzIGEgcmVhbCBgZGVsZXRlYCB2ZXJiO1xuICogb25lIHRyYWNlIGVudHJ5IHBlciBzdXJ2aXZpbmcgcGF0aCkuIFJlcGxheSByZWNvbnN0cnVjdHMgZXZlcnkgc3RlcCdzXG4gKiBmdWxsIHN0YXRlIGV4YWN0bHkuIENvbnN1bWVycyByZWFkaW5nIGBidW5kbGUub3ZlcndyaXRlW2tleV1gIGFzIHRoZSBmdWxsXG4gKiB2YWx1ZSBtdXN0IHVzZSBgY29tbWl0VmFsdWVBdGAgZnJvbSBgZm9vdHByaW50anMvdHJhY2VgLiBQYXNzIGFzXG4gKiBgbmV3IEZsb3dDaGFydEV4ZWN1dG9yKGNoYXJ0LCB7IGNvbW1pdFZhbHVlcyB9KWAgb3IgY2FsbFxuICogYGV4ZWN1dG9yLnNldENvbW1pdFZhbHVlcyhtb2RlKWAgYmVmb3JlIGBydW4oKWA7IHRoZSBhY3RpdmUgbW9kZSBpcyB0aGVcbiAqIHNuYXBzaG90IGRpc2NyaW1pbmFudCBgZ2V0U25hcHNob3QoKS5jb21taXRWYWx1ZXNgLlxuICovXG5leHBvcnQgdHlwZSB7IENvbW1pdFZhbHVlc01vZGUgfSBmcm9tICcuL2xpYi9tZW1vcnkvaW5kZXguanMnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDb250cmFjdCAmIFZhbGlkYXRpb25cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuLyoqIEBjYXRlZ29yeSBDb250cmFjdCAmIFZhbGlkYXRpb24gKi9cbmV4cG9ydCB0eXBlIHsgU2NoZW1hS2luZCwgVmFsaWRhdGlvbklzc3VlLCBWYWxpZGF0aW9uUmVzdWx0IH0gZnJvbSAnLi9saWIvc2NoZW1hL2luZGV4LmpzJztcblxuLyoqIEBjYXRlZ29yeSBDb250cmFjdCAmIFZhbGlkYXRpb24gKi9cbmV4cG9ydCB7IGRldGVjdFNjaGVtYSwgaXNWYWxpZGF0YWJsZSwgaXNab2QgfSBmcm9tICcuL2xpYi9zY2hlbWEvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IENvbnRyYWN0ICYgVmFsaWRhdGlvbiAqL1xuZXhwb3J0IHsgSW5wdXRWYWxpZGF0aW9uRXJyb3IsIHZhbGlkYXRlQWdhaW5zdFNjaGVtYSwgdmFsaWRhdGVPclRocm93IH0gZnJvbSAnLi9saWIvc2NoZW1hL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRXJyb3IgVXRpbGl0aWVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKiBAY2F0ZWdvcnkgRXJyb3IgVXRpbGl0aWVzICovXG5leHBvcnQgdHlwZSB7IFN0cnVjdHVyZWRFcnJvckluZm8gfSBmcm9tICcuL2xpYi9lbmdpbmUvaW5kZXguanMnO1xuXG4vKiogQGNhdGVnb3J5IEVycm9yIFV0aWxpdGllcyAqL1xuZXhwb3J0IHsgZXh0cmFjdEVycm9ySW5mbywgZm9ybWF0RXJyb3JJbmZvIH0gZnJvbSAnLi9saWIvZW5naW5lL2luZGV4LmpzJztcblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gRGV2IFRvb2xzIOKAlCBNb2RlIGZsYWdzIGFuZCBab2Qgc2NvcGUgdXRpbGl0aWVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogQGNhdGVnb3J5IERldiBUb29sc1xuICpcbiAqIEdsb2JhbCBkZXYtbW9kZSBmbGFnLiBDYWxsIGBlbmFibGVEZXZNb2RlKClgIGF0IGFwcGxpY2F0aW9uIHN0YXJ0dXAgdG9cbiAqIHR1cm4gb24gZGV2ZWxvcGVyLW9ubHkgZGlhZ25vc3RpY3MgYWNyb3NzIHRoZSBsaWJyYXJ5IOKAlCBjaXJjdWxhci1yZWZlcmVuY2VcbiAqIGRldGVjdGlvbiBpbiBzY29wZSB3cml0ZXMsIHdhcm5pbmdzIHdoZW4gYSByZWNvcmRlciBoYXMgbm8gb2JzZXJ2ZXJcbiAqIG1ldGhvZHMsIHN1c3BpY2lvdXMtcHJlZGljYXRlIHdhcm5pbmdzIGluIGRlY2lkZS9zZWxlY3QsIHN0cnVjdHVyYWxcbiAqIGNoZWNrcyBpbiBgZ2V0U3VidHJlZVNuYXBzaG90YCwgYW5kIGFueSBmdXR1cmUgZGV2LW9ubHkgZGlhZ25vc3RpYy5cbiAqXG4gKiBQcm9kdWN0aW9uIGxlYXZlcyBpdCBPRkYgYnkgZGVmYXVsdCAoemVybyBvdmVyaGVhZCkuIFNlZSB0aGUgSlNEb2Mgb25cbiAqIGBlbmFibGVEZXZNb2RlYCBmb3IgdGhlIGZ1bGwgbGlzdCBhbmQgdXNhZ2UgZXhhbXBsZS5cbiAqL1xuZXhwb3J0IHsgZGlzYWJsZURldk1vZGUsIGVuYWJsZURldk1vZGUsIGlzRGV2TW9kZSB9IGZyb20gJy4vbGliL3Njb3BlL2RldGVjdENpcmN1bGFyLmpzJztcblxuLy8gYGRlZmluZVNjb3BlRnJvbVpvZGAgYW5kIHRoZSBvdGhlciB6b2QtYmFzZWQgc2NvcGUgaGVscGVycyBtb3ZlZCB0byB0aGUgb3B0LWluXG4vLyBgZm9vdHByaW50anMvem9kYCBlbnRyeSDigJQga2VlcGluZyB6b2Qgb3V0IG9mIHRoZSBjb3JlIGxvYWQgcGF0aCAoaXQgaXMgYW5cbi8vIG9wdGlvbmFsIHBlZXIpLiBJbXBvcnQgdGhlbSBmcm9tICdmb290cHJpbnRqcy96b2QnLlxuIl19