footprintjs 9.47.0 → 9.48.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 (85) hide show
  1. package/AGENTS.md +2 -2
  2. package/CLAUDE.md +8 -8
  3. package/dist/esm/lib/builder/FlowChartBuilder.js +5 -4
  4. package/dist/esm/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +1 -1
  5. package/dist/esm/lib/engine/traversal/FlowchartTraverser.d.ts +1 -1
  6. package/dist/esm/lib/engine/traversal/FlowchartTraverser.js +4 -3
  7. package/dist/esm/lib/engine/types.d.ts +1 -1
  8. package/dist/esm/lib/engine/types.js +1 -1
  9. package/dist/esm/lib/ids/reservedIds.d.ts +34 -0
  10. package/dist/esm/lib/ids/reservedIds.js +45 -0
  11. package/dist/esm/lib/ids/runtimeStageId.d.ts +13 -31
  12. package/dist/esm/lib/ids/runtimeStageId.js +12 -43
  13. package/dist/esm/lib/memory/DiagnosticCollector.d.ts +1 -1
  14. package/dist/esm/lib/memory/DiagnosticCollector.js +1 -1
  15. package/dist/esm/lib/memory/StageContext.d.ts +2 -1
  16. package/dist/esm/lib/memory/StageContext.js +1 -1
  17. package/dist/esm/lib/memory/backtrack.d.ts +3 -2
  18. package/dist/esm/lib/memory/backtrack.js +4 -10
  19. package/dist/esm/lib/memory/frameTypes.d.ts +98 -0
  20. package/dist/esm/lib/memory/frameTypes.js +14 -0
  21. package/dist/esm/lib/memory/index.d.ts +4 -2
  22. package/dist/esm/lib/memory/index.js +1 -2
  23. package/dist/esm/lib/memory/runPolicy.d.ts +2 -1
  24. package/dist/esm/lib/memory/runPolicy.js +1 -1
  25. package/dist/esm/lib/memory/types.d.ts +41 -98
  26. package/dist/esm/lib/memory/types.js +7 -8
  27. package/dist/esm/lib/runner/ExecutionRuntime.d.ts +2 -1
  28. package/dist/esm/lib/runner/ExecutionRuntime.js +1 -1
  29. package/dist/esm/lib/runner/FlowChartExecutor.d.ts +2 -1
  30. package/dist/esm/lib/runner/FlowChartExecutor.js +1 -1
  31. package/dist/esm/lib/runner/getSubtreeSnapshot.d.ts +1 -1
  32. package/dist/esm/lib/runner/getSubtreeSnapshot.js +1 -1
  33. package/dist/esm/lib/slice/keysReadSources.d.ts +3 -3
  34. package/dist/esm/lib/slice/keysReadSources.js +3 -4
  35. package/dist/esm/lib/time-travel/bundles.d.ts +3 -3
  36. package/dist/esm/lib/time-travel/bundles.js +2 -2
  37. package/dist/esm/lib/time-travel/commitStops.d.ts +2 -2
  38. package/dist/esm/lib/time-travel/commitStops.js +1 -1
  39. package/dist/esm/lib/time-travel/tagStops.js +1 -1
  40. package/dist/esm/lib/time-travel/types.d.ts +23 -14
  41. package/dist/esm/lib/time-travel/types.js +9 -9
  42. package/dist/esm/trace.d.ts +5 -4
  43. package/dist/esm/trace.js +4 -4
  44. package/dist/lib/builder/FlowChartBuilder.js +5 -4
  45. package/dist/lib/engine/traversal/FlowchartTraverser.js +6 -5
  46. package/dist/lib/engine/types.js +1 -1
  47. package/dist/lib/ids/reservedIds.js +49 -0
  48. package/dist/lib/ids/runtimeStageId.js +26 -58
  49. package/dist/lib/memory/DiagnosticCollector.js +1 -1
  50. package/dist/lib/memory/StageContext.js +1 -1
  51. package/dist/lib/memory/backtrack.js +4 -10
  52. package/dist/lib/memory/frameTypes.js +15 -0
  53. package/dist/lib/memory/index.js +2 -5
  54. package/dist/lib/memory/runPolicy.js +1 -1
  55. package/dist/lib/memory/types.js +6 -11
  56. package/dist/lib/runner/ExecutionRuntime.js +1 -1
  57. package/dist/lib/runner/FlowChartExecutor.js +1 -1
  58. package/dist/lib/runner/getSubtreeSnapshot.js +1 -1
  59. package/dist/lib/slice/keysReadSources.js +3 -4
  60. package/dist/lib/time-travel/bundles.js +2 -2
  61. package/dist/lib/time-travel/commitStops.js +1 -1
  62. package/dist/lib/time-travel/tagStops.js +1 -1
  63. package/dist/lib/time-travel/types.js +9 -9
  64. package/dist/trace.js +32 -32
  65. package/dist/types/lib/engine/narrative/CombinedNarrativeRecorder.d.ts +1 -1
  66. package/dist/types/lib/engine/traversal/FlowchartTraverser.d.ts +1 -1
  67. package/dist/types/lib/engine/types.d.ts +1 -1
  68. package/dist/types/lib/ids/reservedIds.d.ts +34 -0
  69. package/dist/types/lib/ids/runtimeStageId.d.ts +13 -31
  70. package/dist/types/lib/memory/DiagnosticCollector.d.ts +1 -1
  71. package/dist/types/lib/memory/StageContext.d.ts +2 -1
  72. package/dist/types/lib/memory/backtrack.d.ts +3 -2
  73. package/dist/types/lib/memory/frameTypes.d.ts +98 -0
  74. package/dist/types/lib/memory/index.d.ts +4 -2
  75. package/dist/types/lib/memory/runPolicy.d.ts +2 -1
  76. package/dist/types/lib/memory/types.d.ts +41 -98
  77. package/dist/types/lib/runner/ExecutionRuntime.d.ts +2 -1
  78. package/dist/types/lib/runner/FlowChartExecutor.d.ts +2 -1
  79. package/dist/types/lib/runner/getSubtreeSnapshot.d.ts +1 -1
  80. package/dist/types/lib/slice/keysReadSources.d.ts +3 -3
  81. package/dist/types/lib/time-travel/bundles.d.ts +3 -3
  82. package/dist/types/lib/time-travel/commitStops.d.ts +2 -2
  83. package/dist/types/lib/time-travel/types.d.ts +23 -14
  84. package/dist/types/trace.d.ts +5 -4
  85. package/package.json +1 -1
@@ -1,13 +1,11 @@
1
1
  /**
2
- * types.ts — Core type definitions for the memory library
2
+ * types.ts — the record's types: a bundle, its rows, its patches, its encoding, and the
3
+ * execution tree as the record's readers read it.
3
4
  *
4
- * Zero dependencies on old code or other libraries in this package, with one
5
- * deliberate exception: `capture/` — the standalone leaf module holding the
6
- * shared retention-policy family and summary-marker builders (extracted from
7
- * here in #13c-A so the read and write dials, and later RFC-001, share one
8
- * implementation).
5
+ * Imports nothing. The record names nothing outside itself (C6, `RECORD_FILES` in
6
+ * scripts/layering.config.cjs): the engine's frame types — the stage snapshot, the flow
7
+ * messages, the retention dials — live beside the frame, in `frameTypes.ts` (L4).
9
8
  */
10
- import type { RetentionPolicy } from '../capture/policies.js';
11
9
  /** A flat key-value bag representing a state patch (overwrite or merge). */
12
10
  export interface MemoryPatch {
13
11
  [key: string]: any;
@@ -126,21 +124,6 @@ export interface CommitBundle {
126
124
  }
127
125
  /** The continuation a bundle records — see {@link CommitBundle.phase}. */
128
126
  export type CommitPhase = 'exit' | 'repeat';
129
- /** Types of control flow decisions captured by the execution engine. */
130
- export type FlowControlType = 'next' | 'branch' | 'children' | 'selected' | 'subflow' | 'loop';
131
- /** A single flow control narrative entry. */
132
- export interface FlowMessage {
133
- type: FlowControlType;
134
- description: string;
135
- targetStage?: string | string[];
136
- rationale?: string;
137
- count?: number;
138
- iteration?: number;
139
- timestamp?: number;
140
- }
141
- export type { RetentionPolicy } from '../capture/policies.js';
142
- export type { ReadSummaryMarker, WriteSummaryMarker } from '../capture/summarize.js';
143
- export { READ_PREVIEW_LENGTH, SUMMARY_PREVIEW_LENGTH } from '../capture/summarize.js';
144
127
  /**
145
128
  * Per-write read-provenance policy (#P1) — the fourth dial of the
146
129
  * readTracking/writeTracking/commitValues family, same 6-site propagation
@@ -154,49 +137,6 @@ export { READ_PREVIEW_LENGTH, SUMMARY_PREVIEW_LENGTH } from '../capture/summariz
154
137
  * `causalChain`'s `edgeAttribution: 'per-write'` and the slice layer.
155
138
  */
156
139
  export type WriteProvenanceMode = 'off' | 'reads-prefix';
157
- /**
158
- * Policy for how tracked reads are recorded into `StageSnapshot.stageReads`.
159
- *
160
- * - `'full'` (default) — every tracked read `structuredClone`s the value into
161
- * the stage's read view. Byte-identical to the historical behavior; this is
162
- * what snapshot consumers (lens, agentfootprint) see today.
163
- * - `'summary'` — reads record a cheap {@link ReadSummaryMarker} (type + size
164
- * proxy + short preview) instead of the cloned value. O(1)-ish per read —
165
- * no value clone, no serialization of large objects.
166
- * - `'off'` — reads are not recorded at all; `stageReads` is absent from the
167
- * snapshot. Zero per-read cost. Values are still readable, and the
168
- * `ScopeRecorder.onRead` event still fires (it passes the live reference and
169
- * never cloned) — so narrative output is identical in every mode. The policy
170
- * scopes ONLY the snapshot's `stageReads` payload.
171
- *
172
- * Set via `new FlowChartExecutor(chart, { readTracking })` or
173
- * `executor.setReadTracking(mode)` (before `run()`).
174
- *
175
- * Alias of the shared {@link RetentionPolicy} family (#13c-A) — kept as the
176
- * shipped public name for the read dial.
177
- */
178
- export type ReadTrackingMode = RetentionPolicy;
179
- /**
180
- * Policy for how tracked writes are recorded into `StageSnapshot.stageWrites`
181
- * (#13c-A) — the sibling of {@link ReadTrackingMode}.
182
- *
183
- * - `'full'` (default) — every tracked write `structuredClone`s the value into
184
- * the stage's write view. Byte-identical to the historical behavior.
185
- * - `'summary'` — writes record a cheap {@link WriteSummaryMarker} instead of
186
- * the cloned value.
187
- * - `'off'` — writes are not recorded at all; `stageWrites` is absent from the
188
- * snapshot. The writes themselves still commit to shared state and still
189
- * appear in the commit log — only the per-stage snapshot bookkeeping (and
190
- * therefore the commit observer's mutations payload) is affected. (The
191
- * commit log's own value encoding has its own lossless dial —
192
- * {@link CommitValuesMode}, #13c-B.)
193
- *
194
- * Set via `new FlowChartExecutor(chart, { writeTracking })` or
195
- * `executor.setWriteTracking(mode)` (before `run()`). See
196
- * `FlowChartExecutorOptions.writeTracking` for the full observable-consequence
197
- * contract (onCommit payload, redaction precedence, what is OUT of scope).
198
- */
199
- export type WriteTrackingMode = RetentionPolicy;
200
140
  /**
201
141
  * Policy for how commit-bundle VALUES are encoded into the commit log
202
142
  * (#13c-B) — completes the `readTracking`/`writeTracking` dial family.
@@ -231,36 +171,39 @@ export type WriteTrackingMode = RetentionPolicy;
231
171
  * surfaced as the snapshot discriminant `RuntimeSnapshot.commitValues`.
232
172
  */
233
173
  export type CommitValuesMode = 'full' | 'delta';
234
- /** Serialisable representation of a stage's state (for debugging / visualisation). */
235
- export type StageSnapshot = {
236
- id: string;
237
- /** Unique per-execution-step identifier. Format: [subflowPath/]stageId#executionIndex */
238
- runtimeStageId?: string;
239
- name?: string;
240
- /** Human-readable description of what this stage does (from builder). */
241
- description?: string;
242
- /** Subflow identifier — present when this stage is a subflow entry point. */
243
- subflowId?: string;
244
- isDecider?: boolean;
245
- isFork?: boolean;
246
- /** User-level writes made by this stage (pre-namespace keys → values).
247
- * Shape depends on {@link WriteTrackingMode}: cloned values under `'full'`
248
- * (default), {@link WriteSummaryMarker}s under `'summary'`, absent under
249
- * `'off'`. Redacted writes show `'[REDACTED]'` regardless of mode. */
250
- stageWrites?: Record<string, unknown>;
251
- /** User-level reads made by this stage (pre-namespace keys → values at read
252
- * time). Shape depends on {@link ReadTrackingMode}: cloned values under
253
- * `'full'` (default), {@link ReadSummaryMarker}s under `'summary'`, absent
254
- * under `'off'`. */
255
- stageReads?: Record<string, unknown>;
256
- logs: Record<string, unknown>;
257
- errors: Record<string, unknown>;
258
- metrics: Record<string, unknown>;
259
- evals: Record<string, unknown>;
260
- flowMessages?: FlowMessage[];
261
- next?: StageSnapshot;
262
- children?: StageSnapshot[];
263
- };
264
- /** Forward-declared so StageContext can accept it without importing scope/. */
265
- export type ScopeFactory<TScope> = (core: StageContext, stageName: string, readOnlyContext?: unknown) => TScope;
266
- import type { StageContext } from './StageContext.js';
174
+ /**
175
+ * The execution tree as the record's readers read it (C6): the fields a reader touches and
176
+ * nothing else. `commitStops` (and so `tagStops` and every strategy built on it) reads the mount
177
+ * marker (`subflowId`) and the root's `id`; `keysReadFromExecutionTree` reads the keys of
178
+ * `stageReads`; both key on `runtimeStageId` and walk `next` and `children`.
179
+ *
180
+ * A structural type the record owns, so the readers name nothing of the engine. The engine's
181
+ * `StageSnapshot` (`getSnapshot().executionTree`) is one — a supertype of it, so every caller
182
+ * that hands a snapshot's tree over compiles unchanged — and so is a stored recording's parsed
183
+ * JSON with these fields. Every field is optional: a reader that finds one absent reads on.
184
+ *
185
+ * @example
186
+ * ```typescript
187
+ * import { type ExecutionTree, keysReadFromExecutionTree } from 'footprintjs/trace';
188
+ *
189
+ * const tree: ExecutionTree = {
190
+ * runtimeStageId: 'seed#0',
191
+ * next: { runtimeStageId: 'decide#1', stageReads: { creditTier: 'A' } },
192
+ * };
193
+ * keysReadFromExecutionTree(tree).lookup('decide#1'); // ['creditTier']
194
+ * ```
195
+ */
196
+ export interface ExecutionTree {
197
+ /** The stage's id (prefixed inside a subflow). `commitStops` reads the root's to place a subflow's seed. */
198
+ readonly id?: string;
199
+ /** `[subflowPath/]stageId#executionIndex` — what a reader keys on. A node without one is not a stage. */
200
+ readonly runtimeStageId?: string;
201
+ /** Present on a subflow mount: the stop there says `kind: 'mount'`. */
202
+ readonly subflowId?: string;
203
+ /** What the stage tracked-read, by key. Only the KEYS are read: a `'summary'` marker serves as well as a value. */
204
+ readonly stageReads?: Readonly<Record<string, unknown>>;
205
+ /** The stage that ran next. */
206
+ readonly next?: ExecutionTree;
207
+ /** The stages that ran as this one's children (a fork's branches, a decider's chosen branch). */
208
+ readonly children?: readonly ExecutionTree[];
209
+ }
@@ -1,11 +1,10 @@
1
1
  /**
2
- * types.ts — Core type definitions for the memory library
2
+ * types.ts — the record's types: a bundle, its rows, its patches, its encoding, and the
3
+ * execution tree as the record's readers read it.
3
4
  *
4
- * Zero dependencies on old code or other libraries in this package, with one
5
- * deliberate exception: `capture/` — the standalone leaf module holding the
6
- * shared retention-policy family and summary-marker builders (extracted from
7
- * here in #13c-A so the read and write dials, and later RFC-001, share one
8
- * implementation).
5
+ * Imports nothing. The record names nothing outside itself (C6, `RECORD_FILES` in
6
+ * scripts/layering.config.cjs): the engine's frame types — the stage snapshot, the flow
7
+ * messages, the retention dials — live beside the frame, in `frameTypes.ts` (L4).
9
8
  */
10
- export { READ_PREVIEW_LENGTH, SUMMARY_PREVIEW_LENGTH } from '../capture/summarize.js';
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lbW9yeS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQXlKSCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogdHlwZXMudHMg4oCUIENvcmUgdHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIG1lbW9yeSBsaWJyYXJ5XG4gKlxuICogWmVybyBkZXBlbmRlbmNpZXMgb24gb2xkIGNvZGUgb3Igb3RoZXIgbGlicmFyaWVzIGluIHRoaXMgcGFja2FnZSwgd2l0aCBvbmVcbiAqIGRlbGliZXJhdGUgZXhjZXB0aW9uOiBgY2FwdHVyZS9gIOKAlCB0aGUgc3RhbmRhbG9uZSBsZWFmIG1vZHVsZSBob2xkaW5nIHRoZVxuICogc2hhcmVkIHJldGVudGlvbi1wb2xpY3kgZmFtaWx5IGFuZCBzdW1tYXJ5LW1hcmtlciBidWlsZGVycyAoZXh0cmFjdGVkIGZyb21cbiAqIGhlcmUgaW4gIzEzYy1BIHNvIHRoZSByZWFkIGFuZCB3cml0ZSBkaWFscywgYW5kIGxhdGVyIFJGQy0wMDEsIHNoYXJlIG9uZVxuICogaW1wbGVtZW50YXRpb24pLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUmV0ZW50aW9uUG9saWN5IH0gZnJvbSAnLi4vY2FwdHVyZS9wb2xpY2llcy5qcyc7XG5cbi8vIOKUgOKUgCBQYXRjaCAmIFRyYWNlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogQSBmbGF0IGtleS12YWx1ZSBiYWcgcmVwcmVzZW50aW5nIGEgc3RhdGUgcGF0Y2ggKG92ZXJ3cml0ZSBvciBtZXJnZSkuICovXG5leHBvcnQgaW50ZXJmYWNlIE1lbW9yeVBhdGNoIHtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG4vKiogQSBzaW5nbGUgZW50cnkgaW4gdGhlIGNocm9ub2xvZ2ljYWwgb3BlcmF0aW9uIHRyYWNlLiAqL1xuZXhwb3J0IGludGVyZmFjZSBUcmFjZUVudHJ5IHtcbiAgLyoqIENhbm9uaWNhbCBwYXRoIHN0cmluZyAoc2VnbWVudHMgam9pbmVkIGJ5IERFTElNKS4gKi9cbiAgcGF0aDogc3RyaW5nO1xuICAvKipcbiAgICogUGVyLXdyaXRlIHJlYWQgcHJvdmVuYW5jZSAoI1AxKSDigJQgdGhlIGtleXMgdGhpcyBzdGFnZSBoYWQgVFJBQ0tFRC1SRUFEIGF0XG4gICAqIHRoZSBtb21lbnQgdGhpcyBwYXRoIHdhcyAobGFzdCkgd3JpdHRlbjogdGhlIHRlbXBvcmFsLXByZWZpeCBhdHRyaWJ1dGlvblxuICAgKiB0aGF0IGxldHMgc2xpY2VzIGxpbmsgYSBzcGVjaWZpYyB3cml0ZSB0byBvbmx5IHRoZSByZWFkcyB0aGF0IGNvdWxkIGhhdmVcbiAgICogZmVkIGl0IChhIHN0YWdlIHJlYWRpbmcgYGEsYmAgYW5kIHdyaXRpbmcgYHgseWAgbm8gbG9uZ2VyIGltcGxpZXMgeOKGkGIpLlxuICAgKiBBQlNFTlQgdW5sZXNzIHRoZSBgd3JpdGVQcm92ZW5hbmNlOiAncmVhZHMtcHJlZml4J2AgZGlhbCBpcyBvbiDigJQgY2hhcnRzXG4gICAqIHRoYXQgbmV2ZXIgZW5hYmxlIGl0IGtlZXAgYnl0ZS1pZGVudGljYWwgY29tbWl0IGxvZ3MuIFJlYWQgcHJlZml4ZXMgb25seVxuICAgKiBncm93IGR1cmluZyBhIHN0YWdlLCBzbyB1bmRlciBkZWx0YSBtb2RlJ3Mgb25lLWVudHJ5LXBlci1wYXRoIGRlZHVwIHRoZVxuICAgKiBMQVNUIHdyaXRlJ3MgcHJlZml4ID09IHRoZSB1bmlvbiBhY3Jvc3MgYWxsIG9mIHRoYXQgcGF0aCdzIHdyaXRlcy5cbiAgICogSG9uZXN0IGNlaWxpbmc6IGEgd3JpdGUgd2l0aCBOTyB0cmFja2VkIHJlYWRzIGJlZm9yZSBpdCByZWNvcmRzIGBbXWAg4oCUXG4gICAqIFwiZGVwZW5kZWQgb24gbm8gdHJhY2tlZCByZWFkc1wiIGlzIGluZm9ybWF0aW9uLCBub3QgYWJzZW5jZS5cbiAgICovXG4gIHJlYWRLZXlzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiAtIGAnc2V0J2AgICAg4oCUIGhhcmQgb3ZlcndyaXRlOyBgb3ZlcndyaXRlW3BhdGhdYCBob2xkcyB0aGUgZnVsbCBmaW5hbCB2YWx1ZS5cbiAgICogLSBgJ21lcmdlJ2AgIOKAlCBkZWVwIHVuaW9uIG1lcmdlOyBgdXBkYXRlc1twYXRoXWAgaG9sZHMgdGhlIGFjY3VtdWxhdGVkIGRlbHRhLlxuICAgKiAtIGAnYXBwZW5kJ2Ag4oCUICgjMTNjLUIsIHByb2R1Y2VkIG9ubHkgdW5kZXIge0BsaW5rIENvbW1pdFZhbHVlc01vZGV9XG4gICAqICAgYCdkZWx0YSdgKSB0aGUgcGF0aCdzIGZpbmFsIHZhbHVlIGlzIGl0cyBiYXNlIHZhbHVlIHBsdXMgYSB0YWlsIG9mIG5ld1xuICAgKiAgIHRyYWlsaW5nIGVsZW1lbnRzOyBgb3ZlcndyaXRlW3BhdGhdYCBob2xkcyBPTkxZIHRoZSB0YWlsLiBSZXBsYXlcbiAgICogICByZWNvbnN0cnVjdHMgYnkgY29uY2F0ZW5hdGlvbi4gTk9UIGlkZW1wb3RlbnQg4oCUIGRlbHRhLW1vZGUgYnVuZGxlc1xuICAgKiAgIGNhcnJ5IGV4YWN0bHkgb25lIHRyYWNlIGVudHJ5IHBlciBzdXJ2aXZpbmcgcGF0aC5cbiAgICogLSBgJ2RlbGV0ZSdgIOKAlCAoIzEzYy1CLCBwcm9kdWNlZCBvbmx5IHVuZGVyIGAnZGVsdGEnYDsgYWJzb3JicyBiYWNrbG9nXG4gICAqICAgQjgpIHRoZSBrZXkgd2FzIGV4cGxpY2l0bHkgcmVtb3ZlZCB2aWEgYGRlbGV0ZVZhbHVlKClgLiBSZXBsYXkgcmVtb3Zlc1xuICAgKiAgIHRoZSBrZXkuIGBvdmVyd3JpdGVbcGF0aF1gIHN0aWxsIEVOVU1FUkFURVMgdGhlIHBhdGggKHZhbHVlXG4gICAqICAgYHVuZGVmaW5lZGApIHNvIGtleS1zZXQgY29uc3VtZXJzIGtlZXAgc2VlaW5nIHRoZSBjaGFuZ2VkIGtleS5cbiAgICpcbiAgICogYG92ZXJ3cml0ZWAgdmFsdWVzIGFyZSB0aGVyZWZvcmUgVkVSQi1RVUFMSUZJRUQ6IGNvbnN1bWVycyB0aGF0IHJlYWRcbiAgICogYGJ1bmRsZS5vdmVyd3JpdGVba2V5XWAgYXMgXCJ0aGUgZnVsbCB2YWx1ZSB3cml0dGVuXCIgbXVzdCB1c2VcbiAgICogYGNvbW1pdFZhbHVlQXQoY29tbWl0TG9nLCBpZHgsIGtleSlgIChmcm9tIGBmb290cHJpbnRqcy90cmFjZWApIHdoZW4gdGhlXG4gICAqIGxvZyBtYXkgY29udGFpbiBkZWx0YS1tb2RlIGJ1bmRsZXMuXG4gICAqL1xuICB2ZXJiOiAnc2V0JyB8ICdtZXJnZScgfCAnYXBwZW5kJyB8ICdkZWxldGUnO1xufVxuXG4vKipcbiAqIFJGQy0wMDMgRDIg4oCUIHJlYWQgcGF0aHMgdGhhdCBCWVBBU1MgcmVhZCB0cmFja2luZzpcbiAqIC0gYCdhcmdzJ2AgICDigJQgdGhlIHN0YWdlIGNhbGxlZCBgZ2V0QXJncygpYCAvIGAkZ2V0QXJncygpYCB3aXRoIG5vbi1lbXB0eVxuICogICBydW4gaW5wdXQgKGZyb3plbiwgdW50cmFja2VkIGJ5IGRlc2lnbilcbiAqIC0gYCdlbnYnYCAgICDigJQgdGhlIHN0YWdlIGNhbGxlZCBgZ2V0RW52KClgIC8gYCRnZXRFbnYoKWAgd2l0aCBhIG5vbi1lbXB0eVxuICogICBleGVjdXRpb24gZW52aXJvbm1lbnQgKGZyb3plbiwgdW50cmFja2VkIGJ5IGRlc2lnbilcbiAqIC0gYCdzaWxlbnQnYCDigJQgdGhlIHN0YWdlIHBlcmZvcm1lZCBhIHNpbGVudCByZWFkIChgZ2V0VmFsdWVTaWxlbnRgIC9cbiAqICAgYGdldFZhbHVlRGlyZWN0YCkgb2YgYSBrZXkgaXQgbmV2ZXIgdHJhY2tlZC1yZWFkIGluIHRoZSBzYW1lIHN0YWdlLlxuICogICBTaWxlbnQgcmVhZHMgU0hBRE9XRUQgYnkgYSB0cmFja2VkIHJlYWQgb2YgdGhlIHNhbWUga2V5IGluIHRoZSBzYW1lXG4gKiAgIHN0YWdlIChUeXBlZFNjb3BlIGFycmF5LXByb3h5IGludGVybmFscywgYCRiYXRjaEFycmF5YCkgYXJlIE5PVFxuICogICBmbGFnZ2VkIOKAlCB0aGVpciByZWFk4oaSd3JpdGUgZWRnZSBpcyBhbHJlYWR5IGNhcHR1cmVkLlxuICovXG5leHBvcnQgdHlwZSBVbnRyYWNrZWRTb3VyY2UgPSAnYXJncycgfCAnZW52JyB8ICdzaWxlbnQnO1xuXG4vKiogVGhlIGF0b21pYyBidW5kbGUgcHJvZHVjZWQgYnkgVHJhbnNhY3Rpb25CdWZmZXIuY29tbWl0KCkuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbW1pdEJ1bmRsZSB7XG4gIC8qKiBBdXRvLWFzc2lnbmVkIHN0ZXAgaW5kZXggKHNldCBieSBFdmVudExvZy5yZWNvcmQpLiAqL1xuICBpZHg/OiBudW1iZXI7XG4gIC8qKiBIdW1hbi1yZWFkYWJsZSBzdGFnZSBuYW1lLiAqL1xuICBzdGFnZTogc3RyaW5nO1xuICAvKiogU3RhYmxlIHN0YWdlIGlkZW50aWZpZXIgKG1hdGNoZXMgc3BlYyBub2RlIGlkKS4gKi9cbiAgc3RhZ2VJZDogc3RyaW5nO1xuICAvKiogVW5pcXVlIHBlci1leGVjdXRpb24tc3RlcCBpZGVudGlmaWVyLiBGb3JtYXQ6IFtzdWJmbG93UGF0aC9dc3RhZ2VJZCNleGVjdXRpb25JbmRleCAqL1xuICBydW50aW1lU3RhZ2VJZDogc3RyaW5nO1xuICAvKiogQ2hyb25vbG9naWNhbCB3cml0ZSBsb2cgZm9yIGRldGVybWluaXN0aWMgcmVwbGF5LiAqL1xuICB0cmFjZTogVHJhY2VFbnRyeVtdO1xuICAvKiogUGF0aHMgdGhhdCBzaG91bGQgYmUgcmVkYWN0ZWQgaW4gVUkgKHNlbnNpdGl2ZSBkYXRhKS4gKi9cbiAgcmVkYWN0ZWRQYXRoczogc3RyaW5nW107XG4gIC8qKiBIYXJkIG92ZXJ3cml0ZSBwYXRjaGVzLiAqL1xuICBvdmVyd3JpdGU6IE1lbW9yeVBhdGNoO1xuICAvKiogRGVlcCBtZXJnZSBwYXRjaGVzLiAqL1xuICB1cGRhdGVzOiBNZW1vcnlQYXRjaDtcbiAgLyoqXG4gICAqIFJGQy0wMDMgRDIgaG9uZXN0eSBtYXJrZXJzIOKAlCB1bnRyYWNrZWQgcmVhZCBwYXRocyB0aGlzIHN0YWdlIGNvbnN1bWVkXG4gICAqIChzZWUge0BsaW5rIFVudHJhY2tlZFNvdXJjZX0pLiBBQlNFTlQgd2hlbiB0aGUgc3RhZ2UgdXNlZCBub25lLCBzb1xuICAgKiBjaGFydHMgdGhhdCBuZXZlciB0b3VjaCB0aG9zZSBwYXRocyBrZWVwIGJ5dGUtaWRlbnRpY2FsIGNvbW1pdCBsb2dzLlxuICAgKiBDYXVzYWwtc2xpY2UgY29uc3VtZXJzIChgY2F1c2FsQ2hhaW5gL2Bmb3JtYXRDYXVzYWxDaGFpbmApIHN1cmZhY2UgdGhpc1xuICAgKiBhcyBcInNsaWNlIG1heSBiZSBpbmNvbXBsZXRlIGhlcmVcIi4gUmVzaWR1YWwgbGltaXRhdGlvbiAoYnkgZGVzaWduKTpcbiAgICogdmFsdWVzIHNtdWdnbGVkIHRocm91Z2ggSlMgY2xvc3VyZXMgYXJlIHVuZGV0ZWN0YWJsZS5cbiAgICovXG4gIHVudHJhY2tlZFNvdXJjZXM/OiBSZWFkb25seUFycmF5PFVudHJhY2tlZFNvdXJjZT47XG4gIC8qKlxuICAgKiBEZWNsYXJlZCB0YWdzICg5LjIxLjApIOKAlCB0aGUgbmFtZXMgdGhlIGF1dGhvciBwdXQgb24gdGhpcyBzdGFnZSBhdCBidWlsZFxuICAgKiB0aW1lIChgRmxvd0NoYXJ0QnVpbGRlci50YWdgIC8gYG9wdGlvbnMudGFnc2ApLCBzdGFtcGVkIGhlcmUgYnkgdGhlXG4gICAqIHRyYXZlcnNlciBzbyBhIHN0b3JlZCByZWNvcmRpbmcgY2FycmllcyBpdHMgb3duIG1pbGVzdG9uZXMgd2l0aG91dCBhXG4gICAqIGNvbnN1bWVyJ3MgaWQgY29udmVudGlvbnMuIEFCU0VOVCB3aGVuIHRoZSBzdGFnZSBkZWNsYXJlcyBub25lLCBzbyBhblxuICAgKiB1bnRhZ2dlZCBjaGFydCdzIGxvZyBpcyBieXRlLWlkZW50aWNhbCB0byA5LjIwLjAgKHRoZSBsYXdcbiAgICogYHVudHJhY2tlZFNvdXJjZXNgIGtlZXBzKS4gUmVjb3JkZWQgb24gdGhlIEZJUlNUIGJ1bmRsZSBvZiBlYWNoIGV4ZWN1dGlvblxuICAgKiBvZiB0aGUgc3RhZ2Ug4oCUIHRoZSBzdGFnZSdzIG93biBidW5kbGUsIHRoZSBvbmUgd2l0aG91dCBhIGBwaGFzZWAg4oCUIHNvXG4gICAqIHJldHJ5IGF0dGVtcHRzIHN0YW1wIGl0IG9uY2UsIGEgY29udGludWF0aW9uIChhIGZvcmsgY2hpbGQncyBgJ3JlcGVhdCdgLFxuICAgKiBhIG1vdW50J3MgYCdleGl0J2AgYWZ0ZXIgaXRzIG1lcmdlLWJhY2spIGNhcnJpZXMgbm9uZSwgYW5kIGEgbW91bnQgd2hvc2VcbiAgICogZXhpdCBpcyBpdHMgb25seSBidW5kbGUgKG5vIGBvdXRwdXRNYXBwZXJgKSBjYXJyaWVzIHRoZW0gb24gdGhhdCBidW5kbGUuIEZyZWUgc3RyaW5nczogZm9vdHByaW50anMgYXNzaWduc1xuICAgKiB0aGVtIG5vIG1lYW5pbmc7IGB0YWdTdG9wc2AgKGZvb3RwcmludGpzL3RyYWNlKSBrZWVwcyBhIHN0b3Agd2hlbiBhbnkgb2ZcbiAgICogdGhlbSBtYXRjaGVzLlxuICAgKi9cbiAgdGFncz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKipcbiAgICogV2hpY2ggQ09OVElOVUFUSU9OIG9mIGEgc3RhZ2UncyBleGVjdXRpb24gdGhpcyBidW5kbGUgaXMgKDkuMzkuMCkg4oCUXG4gICAqIHN0YW1wZWQgYnkgdGhlIFdSSVRFUi4gVEhFIExBVzogdGhlIEZJUlNUIGJ1bmRsZSBwZXIgYHJ1bnRpbWVTdGFnZUlkYCBpc1xuICAgKiB0aGUgc3RhZ2UncyBvd24gYW5kIGNhcnJpZXMgTk8gYHBoYXNlYDsgb25seSBhIGJ1bmRsZSBhZnRlciBpdCBjYW46XG4gICAqXG4gICAqIC0gYCdleGl0J2Ag4oCUIGEgc3ViZmxvdyBtb3VudCdzIGV4aXQgY29tbWl0IChgU3ViZmxvd0V4ZWN1dG9yYCkgYWZ0ZXIgaXRzXG4gICAqICAgbWVyZ2UtYmFjayBidW5kbGUgKGBvdXRwdXRNYXBwZXJgKS4gQSBtb3VudCB3aXRob3V0IGEgbWVyZ2UtYmFjayAoYSBsYXp5XG4gICAqICAgbW91bnQsIGV2ZXJ5IGBwYXJhbGxlbEZvckVhY2hgIGJyYW5jaCwgYW55IG1vdW50IHdpdGggbm8gbWFwcGVyKSBoYXNcbiAgICogICBpdHMgZXhpdCBhcyBpdHMgT05MWSBidW5kbGUg4oCUIGl0cyBvd24sIHNvIG5vIGBwaGFzZWA7IHRoZSBleGVjdXRpb25cbiAgICogICB0cmVlIG5hbWVzIGl0IGEgbW91bnQuXG4gICAqIC0gYCdyZXBlYXQnYCDigJQgdGhlIGZhbi1vdXQncyBzZXR0bGUgY29tbWl0IG9mIGEgZm9yayBjaGlsZCdzIGZyYW1lXG4gICAqICAgKGBDaGlsZHJlbkV4ZWN1dG9yYCksIGFmdGVyIHRoZSBjaGlsZCdzIG93biBidW5kbGUuXG4gICAqXG4gICAqIEEgcmVhZGVyIGdyb3VwcyBhIHN0YWdlJ3MgYnVuZGxlcyBieSBgcnVudGltZVN0YWdlSWRgIGFuZCByZWFkcyB0aGlzXG4gICAqIGZpZWxkIHRvIGtub3cgd2hhdCBlYWNoIGNvbnRpbnVhdGlvbiBpczsgaXQgbmV2ZXIgaW5mZXJzIGl0IGZyb20gdGhlXG4gICAqIGxvZydzIHNoYXBlLiBBIGxvZyB3cml0dGVuIGJlZm9yZSA5LjM5LjAgY2FycmllcyBubyBgcGhhc2VgIGFueXdoZXJlIOKAlFxuICAgKiBzZWUgYGluZmVyTGVnYWN5UGhhc2VzYCAoZm9vdHByaW50anMvdHJhY2UpIGZvciBob3cgaXQgaXMgc3RpbGwgcmVhZC5cbiAgICovXG4gIHBoYXNlPzogQ29tbWl0UGhhc2U7XG59XG5cbi8qKiBUaGUgY29udGludWF0aW9uIGEgYnVuZGxlIHJlY29yZHMg4oCUIHNlZSB7QGxpbmsgQ29tbWl0QnVuZGxlLnBoYXNlfS4gKi9cbmV4cG9ydCB0eXBlIENvbW1pdFBoYXNlID0gJ2V4aXQnIHwgJ3JlcGVhdCc7XG5cbi8vIOKUgOKUgCBGbG93IENvbnRyb2wgTmFycmF0aXZlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogVHlwZXMgb2YgY29udHJvbCBmbG93IGRlY2lzaW9ucyBjYXB0dXJlZCBieSB0aGUgZXhlY3V0aW9uIGVuZ2luZS4gKi9cbmV4cG9ydCB0eXBlIEZsb3dDb250cm9sVHlwZSA9ICduZXh0JyB8ICdicmFuY2gnIHwgJ2NoaWxkcmVuJyB8ICdzZWxlY3RlZCcgfCAnc3ViZmxvdycgfCAnbG9vcCc7XG5cbi8qKiBBIHNpbmdsZSBmbG93IGNvbnRyb2wgbmFycmF0aXZlIGVudHJ5LiAqL1xuZXhwb3J0IGludGVyZmFjZSBGbG93TWVzc2FnZSB7XG4gIHR5cGU6IEZsb3dDb250cm9sVHlwZTtcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgdGFyZ2V0U3RhZ2U/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgcmF0aW9uYWxlPzogc3RyaW5nO1xuICBjb3VudD86IG51bWJlcjtcbiAgaXRlcmF0aW9uPzogbnVtYmVyO1xuICB0aW1lc3RhbXA/OiBudW1iZXI7XG59XG5cbi8vIOKUgOKUgCBSZWFkIC8gV3JpdGUgVHJhY2tpbmcgKCMxNCwgIzEzYy1BKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbi8vXG4vLyBUaGUgcG9saWN5IGZhbWlseSBhbmQgbWFya2VyIHNoYXBlcyBhcmUgb3duZWQgYnkgYGNhcHR1cmUvYCAoc2hhcmVkIHdpdGhcbi8vIHRoZSB3cml0ZSBkaWFsIGFuZCwgbGF0ZXIsIFJGQy0wMDEncyBkZWZlcnJlZC1vYnNlcnZlciBjYXB0dXJlIHRpZXIpLlxuLy8gUmUtZXhwb3J0ZWQgaGVyZSBzbyBldmVyeSBwcmUtZXh0cmFjdGlvbiBpbXBvcnQgcGF0aCBrZWVwcyB3b3JraW5nLlxuXG5leHBvcnQgdHlwZSB7IFJldGVudGlvblBvbGljeSB9IGZyb20gJy4uL2NhcHR1cmUvcG9saWNpZXMuanMnO1xuZXhwb3J0IHR5cGUgeyBSZWFkU3VtbWFyeU1hcmtlciwgV3JpdGVTdW1tYXJ5TWFya2VyIH0gZnJvbSAnLi4vY2FwdHVyZS9zdW1tYXJpemUuanMnO1xuZXhwb3J0IHsgUkVBRF9QUkVWSUVXX0xFTkdUSCwgU1VNTUFSWV9QUkVWSUVXX0xFTkdUSCB9IGZyb20gJy4uL2NhcHR1cmUvc3VtbWFyaXplLmpzJztcblxuLyoqXG4gKiBQZXItd3JpdGUgcmVhZC1wcm92ZW5hbmNlIHBvbGljeSAoI1AxKSDigJQgdGhlIGZvdXJ0aCBkaWFsIG9mIHRoZVxuICogcmVhZFRyYWNraW5nL3dyaXRlVHJhY2tpbmcvY29tbWl0VmFsdWVzIGZhbWlseSwgc2FtZSA2LXNpdGUgcHJvcGFnYXRpb25cbiAqIHBhdHRlcm4gKGV4ZWN1dG9yIG9wdGlvbiDihpIgRXhlY3V0aW9uUnVudGltZS51c2UqIOKGkiByb290IFN0YWdlQ29udGV4dCDihpJcbiAqIGNyZWF0ZU5leHQvY3JlYXRlQ2hpbGQgaW5oZXJpdGFuY2Ug4oaSIFN1YmZsb3dFeGVjdXRvciBkdWNrLXB1c2gpLlxuICpcbiAqIC0gYCdvZmYnYCAoZGVmYXVsdCkg4oCUIHplcm8gY29zdCwgYnl0ZS1pZGVudGljYWwgY29tbWl0IGxvZ3MuXG4gKiAtIGAncmVhZHMtcHJlZml4J2Ag4oCUIGV2ZXJ5IGNvbW1pdHRlZCB7QGxpbmsgVHJhY2VFbnRyeX0gY2Fycmllc1xuICogICBgcmVhZEtleXNgOiB0aGUga2V5cyB0cmFja2VkLXJlYWQgQkVGT1JFIHRoYXQgd3JpdGUgKHRlbXBvcmFsLXByZWZpeFxuICogICBhdHRyaWJ1dGlvbikuIENvc3Q6IG9uZSBTZXQtdG8tYXJyYXkgY29weSBwZXIgd3JpdGUuIENvbnN1bWVkIGJ5XG4gKiAgIGBjYXVzYWxDaGFpbmAncyBgZWRnZUF0dHJpYnV0aW9uOiAncGVyLXdyaXRlJ2AgYW5kIHRoZSBzbGljZSBsYXllci5cbiAqL1xuZXhwb3J0IHR5cGUgV3JpdGVQcm92ZW5hbmNlTW9kZSA9ICdvZmYnIHwgJ3JlYWRzLXByZWZpeCc7XG5cbi8qKlxuICogUG9saWN5IGZvciBob3cgdHJhY2tlZCByZWFkcyBhcmUgcmVjb3JkZWQgaW50byBgU3RhZ2VTbmFwc2hvdC5zdGFnZVJlYWRzYC5cbiAqXG4gKiAtIGAnZnVsbCdgIChkZWZhdWx0KSDigJQgZXZlcnkgdHJhY2tlZCByZWFkIGBzdHJ1Y3R1cmVkQ2xvbmVgcyB0aGUgdmFsdWUgaW50b1xuICogICB0aGUgc3RhZ2UncyByZWFkIHZpZXcuIEJ5dGUtaWRlbnRpY2FsIHRvIHRoZSBoaXN0b3JpY2FsIGJlaGF2aW9yOyB0aGlzIGlzXG4gKiAgIHdoYXQgc25hcHNob3QgY29uc3VtZXJzIChsZW5zLCBhZ2VudGZvb3RwcmludCkgc2VlIHRvZGF5LlxuICogLSBgJ3N1bW1hcnknYCDigJQgcmVhZHMgcmVjb3JkIGEgY2hlYXAge0BsaW5rIFJlYWRTdW1tYXJ5TWFya2VyfSAodHlwZSArIHNpemVcbiAqICAgcHJveHkgKyBzaG9ydCBwcmV2aWV3KSBpbnN0ZWFkIG9mIHRoZSBjbG9uZWQgdmFsdWUuIE8oMSktaXNoIHBlciByZWFkIOKAlFxuICogICBubyB2YWx1ZSBjbG9uZSwgbm8gc2VyaWFsaXphdGlvbiBvZiBsYXJnZSBvYmplY3RzLlxuICogLSBgJ29mZidgIOKAlCByZWFkcyBhcmUgbm90IHJlY29yZGVkIGF0IGFsbDsgYHN0YWdlUmVhZHNgIGlzIGFic2VudCBmcm9tIHRoZVxuICogICBzbmFwc2hvdC4gWmVybyBwZXItcmVhZCBjb3N0LiBWYWx1ZXMgYXJlIHN0aWxsIHJlYWRhYmxlLCBhbmQgdGhlXG4gKiAgIGBTY29wZVJlY29yZGVyLm9uUmVhZGAgZXZlbnQgc3RpbGwgZmlyZXMgKGl0IHBhc3NlcyB0aGUgbGl2ZSByZWZlcmVuY2UgYW5kXG4gKiAgIG5ldmVyIGNsb25lZCkg4oCUIHNvIG5hcnJhdGl2ZSBvdXRwdXQgaXMgaWRlbnRpY2FsIGluIGV2ZXJ5IG1vZGUuIFRoZSBwb2xpY3lcbiAqICAgc2NvcGVzIE9OTFkgdGhlIHNuYXBzaG90J3MgYHN0YWdlUmVhZHNgIHBheWxvYWQuXG4gKlxuICogU2V0IHZpYSBgbmV3IEZsb3dDaGFydEV4ZWN1dG9yKGNoYXJ0LCB7IHJlYWRUcmFja2luZyB9KWAgb3JcbiAqIGBleGVjdXRvci5zZXRSZWFkVHJhY2tpbmcobW9kZSlgIChiZWZvcmUgYHJ1bigpYCkuXG4gKlxuICogQWxpYXMgb2YgdGhlIHNoYXJlZCB7QGxpbmsgUmV0ZW50aW9uUG9saWN5fSBmYW1pbHkgKCMxM2MtQSkg4oCUIGtlcHQgYXMgdGhlXG4gKiBzaGlwcGVkIHB1YmxpYyBuYW1lIGZvciB0aGUgcmVhZCBkaWFsLlxuICovXG5leHBvcnQgdHlwZSBSZWFkVHJhY2tpbmdNb2RlID0gUmV0ZW50aW9uUG9saWN5O1xuXG4vKipcbiAqIFBvbGljeSBmb3IgaG93IHRyYWNrZWQgd3JpdGVzIGFyZSByZWNvcmRlZCBpbnRvIGBTdGFnZVNuYXBzaG90LnN0YWdlV3JpdGVzYFxuICogKCMxM2MtQSkg4oCUIHRoZSBzaWJsaW5nIG9mIHtAbGluayBSZWFkVHJhY2tpbmdNb2RlfS5cbiAqXG4gKiAtIGAnZnVsbCdgIChkZWZhdWx0KSDigJQgZXZlcnkgdHJhY2tlZCB3cml0ZSBgc3RydWN0dXJlZENsb25lYHMgdGhlIHZhbHVlIGludG9cbiAqICAgdGhlIHN0YWdlJ3Mgd3JpdGUgdmlldy4gQnl0ZS1pZGVudGljYWwgdG8gdGhlIGhpc3RvcmljYWwgYmVoYXZpb3IuXG4gKiAtIGAnc3VtbWFyeSdgIOKAlCB3cml0ZXMgcmVjb3JkIGEgY2hlYXAge0BsaW5rIFdyaXRlU3VtbWFyeU1hcmtlcn0gaW5zdGVhZCBvZlxuICogICB0aGUgY2xvbmVkIHZhbHVlLlxuICogLSBgJ29mZidgIOKAlCB3cml0ZXMgYXJlIG5vdCByZWNvcmRlZCBhdCBhbGw7IGBzdGFnZVdyaXRlc2AgaXMgYWJzZW50IGZyb20gdGhlXG4gKiAgIHNuYXBzaG90LiBUaGUgd3JpdGVzIHRoZW1zZWx2ZXMgc3RpbGwgY29tbWl0IHRvIHNoYXJlZCBzdGF0ZSBhbmQgc3RpbGxcbiAqICAgYXBwZWFyIGluIHRoZSBjb21taXQgbG9nIOKAlCBvbmx5IHRoZSBwZXItc3RhZ2Ugc25hcHNob3QgYm9va2tlZXBpbmcgKGFuZFxuICogICB0aGVyZWZvcmUgdGhlIGNvbW1pdCBvYnNlcnZlcidzIG11dGF0aW9ucyBwYXlsb2FkKSBpcyBhZmZlY3RlZC4gKFRoZVxuICogICBjb21taXQgbG9nJ3Mgb3duIHZhbHVlIGVuY29kaW5nIGhhcyBpdHMgb3duIGxvc3NsZXNzIGRpYWwg4oCUXG4gKiAgIHtAbGluayBDb21taXRWYWx1ZXNNb2RlfSwgIzEzYy1CLilcbiAqXG4gKiBTZXQgdmlhIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgd3JpdGVUcmFja2luZyB9KWAgb3JcbiAqIGBleGVjdXRvci5zZXRXcml0ZVRyYWNraW5nKG1vZGUpYCAoYmVmb3JlIGBydW4oKWApLiBTZWVcbiAqIGBGbG93Q2hhcnRFeGVjdXRvck9wdGlvbnMud3JpdGVUcmFja2luZ2AgZm9yIHRoZSBmdWxsIG9ic2VydmFibGUtY29uc2VxdWVuY2VcbiAqIGNvbnRyYWN0IChvbkNvbW1pdCBwYXlsb2FkLCByZWRhY3Rpb24gcHJlY2VkZW5jZSwgd2hhdCBpcyBPVVQgb2Ygc2NvcGUpLlxuICovXG5leHBvcnQgdHlwZSBXcml0ZVRyYWNraW5nTW9kZSA9IFJldGVudGlvblBvbGljeTtcblxuLyoqXG4gKiBQb2xpY3kgZm9yIGhvdyBjb21taXQtYnVuZGxlIFZBTFVFUyBhcmUgZW5jb2RlZCBpbnRvIHRoZSBjb21taXQgbG9nXG4gKiAoIzEzYy1CKSDigJQgY29tcGxldGVzIHRoZSBgcmVhZFRyYWNraW5nYC9gd3JpdGVUcmFja2luZ2AgZGlhbCBmYW1pbHkuXG4gKiBVbmxpa2UgdGhvc2UgdHdvICh3aGljaCBnYXRlIGxvc3N5IHNuYXBzaG90IGJvb2trZWVwaW5nKSwgdGhpcyBkaWFsIGlzXG4gKiAqKmxvc3NsZXNzIGluIGJvdGggbW9kZXMqKiDigJQgaXQgY2hhbmdlcyB0aGUgY29tbWl0IGxvZydzICplbmNvZGluZyosXG4gKiBuZXZlciBpdHMgKmluZm9ybWF0aW9uKjsgYW55IHN0ZXAncyBmdWxsIHN0YXRlIHN0YXlzIGV4YWN0bHlcbiAqIHJlY29uc3RydWN0YWJsZSBieSByZXBsYXkuXG4gKlxuICogLSBgJ2Z1bGwnYCAoZGVmYXVsdCkg4oCUIGV2ZXJ5IHN1cnZpdmluZyBgc2V0YCBwYXRoIHN0b3JlcyB0aGUgZnVsbCBmaW5hbFxuICogICB2YWx1ZSwgb25lIHRyYWNlIGVudHJ5IHBlciBvcGVyYXRpb24uIEJ5dGUtaWRlbnRpY2FsIHRvIHRoZSBoaXN0b3JpY2FsXG4gKiAgIGJlaGF2aW9yLlxuICogLSBgJ2RlbHRhJ2Ag4oCUIHR3byBjaGFuZ2VzLCBib3RoIHJlcGxheS1jb3ZlcmVkIGJ5IGBhcHBseVNtYXJ0TWVyZ2VgOlxuICogICAxLiAqKmBhcHBlbmRgIGRldGVjdGlvbioqOiB3aGVuIGEgcGF0aCdzIG5ldCBjaGFuZ2UgaXMgXCJ0aGUgYmFzZSBhcnJheVxuICogICAgICBwbHVzIG5ldyB0cmFpbGluZyBlbGVtZW50c1wiIChzdHJpY3QgcHJlZml4KSwgdGhlIGJ1bmRsZSByZWNvcmRzIE9OTFlcbiAqICAgICAgdGhlIHRhaWwgdW5kZXIgYSBgdmVyYjogJ2FwcGVuZCdgIHRyYWNlIGVudHJ5IOKAlCB0aGUgZ3Jvd2luZy1oaXN0b3J5XG4gKiAgICAgIGNvbW1pdCBsb2cgYmVjb21lcyBsaW5lYXIgaW4gdGFpbCBzaXplIGluc3RlYWQgb2YgTyhOwrIpIHJldGFpbmVkLlxuICogICAgICBBIHJlYWwgYHZlcmI6ICdkZWxldGUnYCBlbnRyeSByZXBsYWNlcyB0aGUgYHNldDogdW5kZWZpbmVkYCBmbGF0dGVuaW5nXG4gKiAgICAgIGZvciBgZGVsZXRlVmFsdWUoKWAgKGNsb3NlcyB0aGUgZG9jdW1lbnRlZCBNZW1vcnlQYXRjaCBsaW1pdGF0aW9uKS5cbiAqICAgMi4gKipPbmUgdHJhY2UgZW50cnkgcGVyIHN1cnZpdmluZyBwYXRoKiogKGFwcGVuZCBpcyBub3QgaWRlbXBvdGVudCBvblxuICogICAgICByZXBsYXkpOiB0aGUgdmVyYiBpcyByZXNvbHZlZCBmcm9tIHRoZSBwYXRoJ3MgYmFzZeKGkmZpbmFsIHJlbGF0aW9uc2hpcFxuICogICAgICBhbmQgb3AgbWl4OyBlbnRyaWVzIGFyZSBvcmRlcmVkIGJ5IGVhY2ggcGF0aCdzIExBU1QgdG91Y2guXG4gKlxuICogSG9uZXN0IGNvc3Qgbm90ZTogYXBwZW5kIGRldGVjdGlvbiBpcyBORVcgd2FsbCB3b3JrIOKAlCBhbiBPKHxiYXNlfClcbiAqIHN0cnVjdHVyYWwgcHJlZml4IGNvbXBhcmUgcGVyIGFycmF5LXNldCBwYXRoIHBlciBjb21taXQgKHRvZGF5J3NcbiAqIGBkZWVwRXF1YWxgIGZhc3QtZmFpbHMgb24gbGVuZ3RoIGluIE8oMSkgZm9yIGEgZ3Jvd24gYXJyYXkpLiBPbiBhIGhpdCB0aGVcbiAqIGNvbW1pdCBnZXRzIGNoZWFwZXIgaW4gYm90aCB3YWxsIGFuZCBoZWFwICh0aGUgTyh8ZmluYWx8KSBjbG9uZSBzaHJpbmtzIHRvXG4gKiBPKHx0YWlsfCkpOyBvbiBhIG1pc3MgaXQgcGF5cyBjb21wYXJlICsgZnVsbCBjbG9uZS4gYCdmdWxsJ2AgcGF5cyB6ZXJvIOKAlFxuICogdGhlIGRldGVjdGlvbiBicmFuY2ggaXMgbW9kZS1nYXRlZC5cbiAqXG4gKiBTZXQgdmlhIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgY29tbWl0VmFsdWVzIH0pYCBvclxuICogYGV4ZWN1dG9yLnNldENvbW1pdFZhbHVlcyhtb2RlKWAgKGJlZm9yZSBgcnVuKClgKS4gVGhlIGFjdGl2ZSBtb2RlIGlzXG4gKiBzdXJmYWNlZCBhcyB0aGUgc25hcHNob3QgZGlzY3JpbWluYW50IGBSdW50aW1lU25hcHNob3QuY29tbWl0VmFsdWVzYC5cbiAqL1xuZXhwb3J0IHR5cGUgQ29tbWl0VmFsdWVzTW9kZSA9ICdmdWxsJyB8ICdkZWx0YSc7XG5cbi8vIOKUgOKUgCBTdGFnZSBTbmFwc2hvdCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIFNlcmlhbGlzYWJsZSByZXByZXNlbnRhdGlvbiBvZiBhIHN0YWdlJ3Mgc3RhdGUgKGZvciBkZWJ1Z2dpbmcgLyB2aXN1YWxpc2F0aW9uKS4gKi9cbmV4cG9ydCB0eXBlIFN0YWdlU25hcHNob3QgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBVbmlxdWUgcGVyLWV4ZWN1dGlvbi1zdGVwIGlkZW50aWZpZXIuIEZvcm1hdDogW3N1YmZsb3dQYXRoL11zdGFnZUlkI2V4ZWN1dGlvbkluZGV4ICovXG4gIHJ1bnRpbWVTdGFnZUlkPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICAvKiogSHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gb2Ygd2hhdCB0aGlzIHN0YWdlIGRvZXMgKGZyb20gYnVpbGRlcikuICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKiogU3ViZmxvdyBpZGVudGlmaWVyIOKAlCBwcmVzZW50IHdoZW4gdGhpcyBzdGFnZSBpcyBhIHN1YmZsb3cgZW50cnkgcG9pbnQuICovXG4gIHN1YmZsb3dJZD86IHN0cmluZztcbiAgaXNEZWNpZGVyPzogYm9vbGVhbjtcbiAgaXNGb3JrPzogYm9vbGVhbjtcbiAgLyoqIFVzZXItbGV2ZWwgd3JpdGVzIG1hZGUgYnkgdGhpcyBzdGFnZSAocHJlLW5hbWVzcGFjZSBrZXlzIOKGkiB2YWx1ZXMpLlxuICAgKiAgU2hhcGUgZGVwZW5kcyBvbiB7QGxpbmsgV3JpdGVUcmFja2luZ01vZGV9OiBjbG9uZWQgdmFsdWVzIHVuZGVyIGAnZnVsbCdgXG4gICAqICAoZGVmYXVsdCksIHtAbGluayBXcml0ZVN1bW1hcnlNYXJrZXJ9cyB1bmRlciBgJ3N1bW1hcnknYCwgYWJzZW50IHVuZGVyXG4gICAqICBgJ29mZidgLiBSZWRhY3RlZCB3cml0ZXMgc2hvdyBgJ1tSRURBQ1RFRF0nYCByZWdhcmRsZXNzIG9mIG1vZGUuICovXG4gIHN0YWdlV3JpdGVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKiBVc2VyLWxldmVsIHJlYWRzIG1hZGUgYnkgdGhpcyBzdGFnZSAocHJlLW5hbWVzcGFjZSBrZXlzIOKGkiB2YWx1ZXMgYXQgcmVhZFxuICAgKiAgdGltZSkuIFNoYXBlIGRlcGVuZHMgb24ge0BsaW5rIFJlYWRUcmFja2luZ01vZGV9OiBjbG9uZWQgdmFsdWVzIHVuZGVyXG4gICAqICBgJ2Z1bGwnYCAoZGVmYXVsdCksIHtAbGluayBSZWFkU3VtbWFyeU1hcmtlcn1zIHVuZGVyIGAnc3VtbWFyeSdgLCBhYnNlbnRcbiAgICogIHVuZGVyIGAnb2ZmJ2AuICovXG4gIHN0YWdlUmVhZHM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgbG9nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGVycm9yczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIG1ldHJpY3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBldmFsczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGZsb3dNZXNzYWdlcz86IEZsb3dNZXNzYWdlW107XG4gIG5leHQ/OiBTdGFnZVNuYXBzaG90O1xuICBjaGlsZHJlbj86IFN0YWdlU25hcHNob3RbXTtcbn07XG5cbi8vIOKUgOKUgCBTY29wZSBGYWN0b3J5IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKiogRm9yd2FyZC1kZWNsYXJlZCBzbyBTdGFnZUNvbnRleHQgY2FuIGFjY2VwdCBpdCB3aXRob3V0IGltcG9ydGluZyBzY29wZS8uICovXG5leHBvcnQgdHlwZSBTY29wZUZhY3Rvcnk8VFNjb3BlPiA9IChjb3JlOiBTdGFnZUNvbnRleHQsIHN0YWdlTmFtZTogc3RyaW5nLCByZWFkT25seUNvbnRleHQ/OiB1bmtub3duKSA9PiBUU2NvcGU7XG5cbi8vIOKUgOKUgCBTdGFnZUNvbnRleHQgKGZvcndhcmQgcmVmZXJlbmNlIGZvciBTY29wZUZhY3RvcnkpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vLyBUaGUgYWN0dWFsIGNsYXNzIGxpdmVzIGluIFN0YWdlQ29udGV4dC50czsgd2UganVzdCBuZWVkIHRoZSB0eXBlIGhlcmUgZm9yXG4vLyB0aGUgU2NvcGVGYWN0b3J5IGdlbmVyaWMuIFR5cGVTY3JpcHQncyBpbXBvcnQtdHlwZSBoYW5kbGVzIHRoaXM6XG5pbXBvcnQgdHlwZSB7IFN0YWdlQ29udGV4dCB9IGZyb20gJy4vU3RhZ2VDb250ZXh0LmpzJztcbiJdfQ==
9
+ export {};
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGliL21lbW9yeS90eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiB0eXBlcy50cyDigJQgdGhlIHJlY29yZCdzIHR5cGVzOiBhIGJ1bmRsZSwgaXRzIHJvd3MsIGl0cyBwYXRjaGVzLCBpdHMgZW5jb2RpbmcsIGFuZCB0aGVcbiAqIGV4ZWN1dGlvbiB0cmVlIGFzIHRoZSByZWNvcmQncyByZWFkZXJzIHJlYWQgaXQuXG4gKlxuICogSW1wb3J0cyBub3RoaW5nLiBUaGUgcmVjb3JkIG5hbWVzIG5vdGhpbmcgb3V0c2lkZSBpdHNlbGYgKEM2LCBgUkVDT1JEX0ZJTEVTYCBpblxuICogc2NyaXB0cy9sYXllcmluZy5jb25maWcuY2pzKTogdGhlIGVuZ2luZSdzIGZyYW1lIHR5cGVzIOKAlCB0aGUgc3RhZ2Ugc25hcHNob3QsIHRoZSBmbG93XG4gKiBtZXNzYWdlcywgdGhlIHJldGVudGlvbiBkaWFscyDigJQgbGl2ZSBiZXNpZGUgdGhlIGZyYW1lLCBpbiBgZnJhbWVUeXBlcy50c2AgKEw0KS5cbiAqL1xuXG4vLyDilIDilIAgUGF0Y2ggJiBUcmFjZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqIEEgZmxhdCBrZXktdmFsdWUgYmFnIHJlcHJlc2VudGluZyBhIHN0YXRlIHBhdGNoIChvdmVyd3JpdGUgb3IgbWVyZ2UpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBNZW1vcnlQYXRjaCB7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuLyoqIEEgc2luZ2xlIGVudHJ5IGluIHRoZSBjaHJvbm9sb2dpY2FsIG9wZXJhdGlvbiB0cmFjZS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVHJhY2VFbnRyeSB7XG4gIC8qKiBDYW5vbmljYWwgcGF0aCBzdHJpbmcgKHNlZ21lbnRzIGpvaW5lZCBieSBERUxJTSkuICovXG4gIHBhdGg6IHN0cmluZztcbiAgLyoqXG4gICAqIFBlci13cml0ZSByZWFkIHByb3ZlbmFuY2UgKCNQMSkg4oCUIHRoZSBrZXlzIHRoaXMgc3RhZ2UgaGFkIFRSQUNLRUQtUkVBRCBhdFxuICAgKiB0aGUgbW9tZW50IHRoaXMgcGF0aCB3YXMgKGxhc3QpIHdyaXR0ZW46IHRoZSB0ZW1wb3JhbC1wcmVmaXggYXR0cmlidXRpb25cbiAgICogdGhhdCBsZXRzIHNsaWNlcyBsaW5rIGEgc3BlY2lmaWMgd3JpdGUgdG8gb25seSB0aGUgcmVhZHMgdGhhdCBjb3VsZCBoYXZlXG4gICAqIGZlZCBpdCAoYSBzdGFnZSByZWFkaW5nIGBhLGJgIGFuZCB3cml0aW5nIGB4LHlgIG5vIGxvbmdlciBpbXBsaWVzIHjihpBiKS5cbiAgICogQUJTRU5UIHVubGVzcyB0aGUgYHdyaXRlUHJvdmVuYW5jZTogJ3JlYWRzLXByZWZpeCdgIGRpYWwgaXMgb24g4oCUIGNoYXJ0c1xuICAgKiB0aGF0IG5ldmVyIGVuYWJsZSBpdCBrZWVwIGJ5dGUtaWRlbnRpY2FsIGNvbW1pdCBsb2dzLiBSZWFkIHByZWZpeGVzIG9ubHlcbiAgICogZ3JvdyBkdXJpbmcgYSBzdGFnZSwgc28gdW5kZXIgZGVsdGEgbW9kZSdzIG9uZS1lbnRyeS1wZXItcGF0aCBkZWR1cCB0aGVcbiAgICogTEFTVCB3cml0ZSdzIHByZWZpeCA9PSB0aGUgdW5pb24gYWNyb3NzIGFsbCBvZiB0aGF0IHBhdGgncyB3cml0ZXMuXG4gICAqIEhvbmVzdCBjZWlsaW5nOiBhIHdyaXRlIHdpdGggTk8gdHJhY2tlZCByZWFkcyBiZWZvcmUgaXQgcmVjb3JkcyBgW11gIOKAlFxuICAgKiBcImRlcGVuZGVkIG9uIG5vIHRyYWNrZWQgcmVhZHNcIiBpcyBpbmZvcm1hdGlvbiwgbm90IGFic2VuY2UuXG4gICAqL1xuICByZWFkS2V5cz86IHN0cmluZ1tdO1xuICAvKipcbiAgICogLSBgJ3NldCdgICAgIOKAlCBoYXJkIG92ZXJ3cml0ZTsgYG92ZXJ3cml0ZVtwYXRoXWAgaG9sZHMgdGhlIGZ1bGwgZmluYWwgdmFsdWUuXG4gICAqIC0gYCdtZXJnZSdgICDigJQgZGVlcCB1bmlvbiBtZXJnZTsgYHVwZGF0ZXNbcGF0aF1gIGhvbGRzIHRoZSBhY2N1bXVsYXRlZCBkZWx0YS5cbiAgICogLSBgJ2FwcGVuZCdgIOKAlCAoIzEzYy1CLCBwcm9kdWNlZCBvbmx5IHVuZGVyIHtAbGluayBDb21taXRWYWx1ZXNNb2RlfVxuICAgKiAgIGAnZGVsdGEnYCkgdGhlIHBhdGgncyBmaW5hbCB2YWx1ZSBpcyBpdHMgYmFzZSB2YWx1ZSBwbHVzIGEgdGFpbCBvZiBuZXdcbiAgICogICB0cmFpbGluZyBlbGVtZW50czsgYG92ZXJ3cml0ZVtwYXRoXWAgaG9sZHMgT05MWSB0aGUgdGFpbC4gUmVwbGF5XG4gICAqICAgcmVjb25zdHJ1Y3RzIGJ5IGNvbmNhdGVuYXRpb24uIE5PVCBpZGVtcG90ZW50IOKAlCBkZWx0YS1tb2RlIGJ1bmRsZXNcbiAgICogICBjYXJyeSBleGFjdGx5IG9uZSB0cmFjZSBlbnRyeSBwZXIgc3Vydml2aW5nIHBhdGguXG4gICAqIC0gYCdkZWxldGUnYCDigJQgKCMxM2MtQiwgcHJvZHVjZWQgb25seSB1bmRlciBgJ2RlbHRhJ2A7IGFic29yYnMgYmFja2xvZ1xuICAgKiAgIEI4KSB0aGUga2V5IHdhcyBleHBsaWNpdGx5IHJlbW92ZWQgdmlhIGBkZWxldGVWYWx1ZSgpYC4gUmVwbGF5IHJlbW92ZXNcbiAgICogICB0aGUga2V5LiBgb3ZlcndyaXRlW3BhdGhdYCBzdGlsbCBFTlVNRVJBVEVTIHRoZSBwYXRoICh2YWx1ZVxuICAgKiAgIGB1bmRlZmluZWRgKSBzbyBrZXktc2V0IGNvbnN1bWVycyBrZWVwIHNlZWluZyB0aGUgY2hhbmdlZCBrZXkuXG4gICAqXG4gICAqIGBvdmVyd3JpdGVgIHZhbHVlcyBhcmUgdGhlcmVmb3JlIFZFUkItUVVBTElGSUVEOiBjb25zdW1lcnMgdGhhdCByZWFkXG4gICAqIGBidW5kbGUub3ZlcndyaXRlW2tleV1gIGFzIFwidGhlIGZ1bGwgdmFsdWUgd3JpdHRlblwiIG11c3QgdXNlXG4gICAqIGBjb21taXRWYWx1ZUF0KGNvbW1pdExvZywgaWR4LCBrZXkpYCAoZnJvbSBgZm9vdHByaW50anMvdHJhY2VgKSB3aGVuIHRoZVxuICAgKiBsb2cgbWF5IGNvbnRhaW4gZGVsdGEtbW9kZSBidW5kbGVzLlxuICAgKi9cbiAgdmVyYjogJ3NldCcgfCAnbWVyZ2UnIHwgJ2FwcGVuZCcgfCAnZGVsZXRlJztcbn1cblxuLyoqXG4gKiBSRkMtMDAzIEQyIOKAlCByZWFkIHBhdGhzIHRoYXQgQllQQVNTIHJlYWQgdHJhY2tpbmc6XG4gKiAtIGAnYXJncydgICAg4oCUIHRoZSBzdGFnZSBjYWxsZWQgYGdldEFyZ3MoKWAgLyBgJGdldEFyZ3MoKWAgd2l0aCBub24tZW1wdHlcbiAqICAgcnVuIGlucHV0IChmcm96ZW4sIHVudHJhY2tlZCBieSBkZXNpZ24pXG4gKiAtIGAnZW52J2AgICAg4oCUIHRoZSBzdGFnZSBjYWxsZWQgYGdldEVudigpYCAvIGAkZ2V0RW52KClgIHdpdGggYSBub24tZW1wdHlcbiAqICAgZXhlY3V0aW9uIGVudmlyb25tZW50IChmcm96ZW4sIHVudHJhY2tlZCBieSBkZXNpZ24pXG4gKiAtIGAnc2lsZW50J2Ag4oCUIHRoZSBzdGFnZSBwZXJmb3JtZWQgYSBzaWxlbnQgcmVhZCAoYGdldFZhbHVlU2lsZW50YCAvXG4gKiAgIGBnZXRWYWx1ZURpcmVjdGApIG9mIGEga2V5IGl0IG5ldmVyIHRyYWNrZWQtcmVhZCBpbiB0aGUgc2FtZSBzdGFnZS5cbiAqICAgU2lsZW50IHJlYWRzIFNIQURPV0VEIGJ5IGEgdHJhY2tlZCByZWFkIG9mIHRoZSBzYW1lIGtleSBpbiB0aGUgc2FtZVxuICogICBzdGFnZSAoVHlwZWRTY29wZSBhcnJheS1wcm94eSBpbnRlcm5hbHMsIGAkYmF0Y2hBcnJheWApIGFyZSBOT1RcbiAqICAgZmxhZ2dlZCDigJQgdGhlaXIgcmVhZOKGkndyaXRlIGVkZ2UgaXMgYWxyZWFkeSBjYXB0dXJlZC5cbiAqL1xuZXhwb3J0IHR5cGUgVW50cmFja2VkU291cmNlID0gJ2FyZ3MnIHwgJ2VudicgfCAnc2lsZW50JztcblxuLyoqIFRoZSBhdG9taWMgYnVuZGxlIHByb2R1Y2VkIGJ5IFRyYW5zYWN0aW9uQnVmZmVyLmNvbW1pdCgpLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21taXRCdW5kbGUge1xuICAvKiogQXV0by1hc3NpZ25lZCBzdGVwIGluZGV4IChzZXQgYnkgRXZlbnRMb2cucmVjb3JkKS4gKi9cbiAgaWR4PzogbnVtYmVyO1xuICAvKiogSHVtYW4tcmVhZGFibGUgc3RhZ2UgbmFtZS4gKi9cbiAgc3RhZ2U6IHN0cmluZztcbiAgLyoqIFN0YWJsZSBzdGFnZSBpZGVudGlmaWVyIChtYXRjaGVzIHNwZWMgbm9kZSBpZCkuICovXG4gIHN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIFVuaXF1ZSBwZXItZXhlY3V0aW9uLXN0ZXAgaWRlbnRpZmllci4gRm9ybWF0OiBbc3ViZmxvd1BhdGgvXXN0YWdlSWQjZXhlY3V0aW9uSW5kZXggKi9cbiAgcnVudGltZVN0YWdlSWQ6IHN0cmluZztcbiAgLyoqIENocm9ub2xvZ2ljYWwgd3JpdGUgbG9nIGZvciBkZXRlcm1pbmlzdGljIHJlcGxheS4gKi9cbiAgdHJhY2U6IFRyYWNlRW50cnlbXTtcbiAgLyoqIFBhdGhzIHRoYXQgc2hvdWxkIGJlIHJlZGFjdGVkIGluIFVJIChzZW5zaXRpdmUgZGF0YSkuICovXG4gIHJlZGFjdGVkUGF0aHM6IHN0cmluZ1tdO1xuICAvKiogSGFyZCBvdmVyd3JpdGUgcGF0Y2hlcy4gKi9cbiAgb3ZlcndyaXRlOiBNZW1vcnlQYXRjaDtcbiAgLyoqIERlZXAgbWVyZ2UgcGF0Y2hlcy4gKi9cbiAgdXBkYXRlczogTWVtb3J5UGF0Y2g7XG4gIC8qKlxuICAgKiBSRkMtMDAzIEQyIGhvbmVzdHkgbWFya2VycyDigJQgdW50cmFja2VkIHJlYWQgcGF0aHMgdGhpcyBzdGFnZSBjb25zdW1lZFxuICAgKiAoc2VlIHtAbGluayBVbnRyYWNrZWRTb3VyY2V9KS4gQUJTRU5UIHdoZW4gdGhlIHN0YWdlIHVzZWQgbm9uZSwgc29cbiAgICogY2hhcnRzIHRoYXQgbmV2ZXIgdG91Y2ggdGhvc2UgcGF0aHMga2VlcCBieXRlLWlkZW50aWNhbCBjb21taXQgbG9ncy5cbiAgICogQ2F1c2FsLXNsaWNlIGNvbnN1bWVycyAoYGNhdXNhbENoYWluYC9gZm9ybWF0Q2F1c2FsQ2hhaW5gKSBzdXJmYWNlIHRoaXNcbiAgICogYXMgXCJzbGljZSBtYXkgYmUgaW5jb21wbGV0ZSBoZXJlXCIuIFJlc2lkdWFsIGxpbWl0YXRpb24gKGJ5IGRlc2lnbik6XG4gICAqIHZhbHVlcyBzbXVnZ2xlZCB0aHJvdWdoIEpTIGNsb3N1cmVzIGFyZSB1bmRldGVjdGFibGUuXG4gICAqL1xuICB1bnRyYWNrZWRTb3VyY2VzPzogUmVhZG9ubHlBcnJheTxVbnRyYWNrZWRTb3VyY2U+O1xuICAvKipcbiAgICogRGVjbGFyZWQgdGFncyAoOS4yMS4wKSDigJQgdGhlIG5hbWVzIHRoZSBhdXRob3IgcHV0IG9uIHRoaXMgc3RhZ2UgYXQgYnVpbGRcbiAgICogdGltZSAoYEZsb3dDaGFydEJ1aWxkZXIudGFnYCAvIGBvcHRpb25zLnRhZ3NgKSwgc3RhbXBlZCBoZXJlIGJ5IHRoZVxuICAgKiB0cmF2ZXJzZXIgc28gYSBzdG9yZWQgcmVjb3JkaW5nIGNhcnJpZXMgaXRzIG93biBtaWxlc3RvbmVzIHdpdGhvdXQgYVxuICAgKiBjb25zdW1lcidzIGlkIGNvbnZlbnRpb25zLiBBQlNFTlQgd2hlbiB0aGUgc3RhZ2UgZGVjbGFyZXMgbm9uZSwgc28gYW5cbiAgICogdW50YWdnZWQgY2hhcnQncyBsb2cgaXMgYnl0ZS1pZGVudGljYWwgdG8gOS4yMC4wICh0aGUgbGF3XG4gICAqIGB1bnRyYWNrZWRTb3VyY2VzYCBrZWVwcykuIFJlY29yZGVkIG9uIHRoZSBGSVJTVCBidW5kbGUgb2YgZWFjaCBleGVjdXRpb25cbiAgICogb2YgdGhlIHN0YWdlIOKAlCB0aGUgc3RhZ2UncyBvd24gYnVuZGxlLCB0aGUgb25lIHdpdGhvdXQgYSBgcGhhc2VgIOKAlCBzb1xuICAgKiByZXRyeSBhdHRlbXB0cyBzdGFtcCBpdCBvbmNlLCBhIGNvbnRpbnVhdGlvbiAoYSBmb3JrIGNoaWxkJ3MgYCdyZXBlYXQnYCxcbiAgICogYSBtb3VudCdzIGAnZXhpdCdgIGFmdGVyIGl0cyBtZXJnZS1iYWNrKSBjYXJyaWVzIG5vbmUsIGFuZCBhIG1vdW50IHdob3NlXG4gICAqIGV4aXQgaXMgaXRzIG9ubHkgYnVuZGxlIChubyBgb3V0cHV0TWFwcGVyYCkgY2FycmllcyB0aGVtIG9uIHRoYXQgYnVuZGxlLiBGcmVlIHN0cmluZ3M6IGZvb3RwcmludGpzIGFzc2lnbnNcbiAgICogdGhlbSBubyBtZWFuaW5nOyBgdGFnU3RvcHNgIChmb290cHJpbnRqcy90cmFjZSkga2VlcHMgYSBzdG9wIHdoZW4gYW55IG9mXG4gICAqIHRoZW0gbWF0Y2hlcy5cbiAgICovXG4gIHRhZ3M/OiByZWFkb25seSBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFdoaWNoIENPTlRJTlVBVElPTiBvZiBhIHN0YWdlJ3MgZXhlY3V0aW9uIHRoaXMgYnVuZGxlIGlzICg5LjM5LjApIOKAlFxuICAgKiBzdGFtcGVkIGJ5IHRoZSBXUklURVIuIFRIRSBMQVc6IHRoZSBGSVJTVCBidW5kbGUgcGVyIGBydW50aW1lU3RhZ2VJZGAgaXNcbiAgICogdGhlIHN0YWdlJ3Mgb3duIGFuZCBjYXJyaWVzIE5PIGBwaGFzZWA7IG9ubHkgYSBidW5kbGUgYWZ0ZXIgaXQgY2FuOlxuICAgKlxuICAgKiAtIGAnZXhpdCdgIOKAlCBhIHN1YmZsb3cgbW91bnQncyBleGl0IGNvbW1pdCAoYFN1YmZsb3dFeGVjdXRvcmApIGFmdGVyIGl0c1xuICAgKiAgIG1lcmdlLWJhY2sgYnVuZGxlIChgb3V0cHV0TWFwcGVyYCkuIEEgbW91bnQgd2l0aG91dCBhIG1lcmdlLWJhY2sgKGEgbGF6eVxuICAgKiAgIG1vdW50LCBldmVyeSBgcGFyYWxsZWxGb3JFYWNoYCBicmFuY2gsIGFueSBtb3VudCB3aXRoIG5vIG1hcHBlcikgaGFzXG4gICAqICAgaXRzIGV4aXQgYXMgaXRzIE9OTFkgYnVuZGxlIOKAlCBpdHMgb3duLCBzbyBubyBgcGhhc2VgOyB0aGUgZXhlY3V0aW9uXG4gICAqICAgdHJlZSBuYW1lcyBpdCBhIG1vdW50LlxuICAgKiAtIGAncmVwZWF0J2Ag4oCUIHRoZSBmYW4tb3V0J3Mgc2V0dGxlIGNvbW1pdCBvZiBhIGZvcmsgY2hpbGQncyBmcmFtZVxuICAgKiAgIChgQ2hpbGRyZW5FeGVjdXRvcmApLCBhZnRlciB0aGUgY2hpbGQncyBvd24gYnVuZGxlLlxuICAgKlxuICAgKiBBIHJlYWRlciBncm91cHMgYSBzdGFnZSdzIGJ1bmRsZXMgYnkgYHJ1bnRpbWVTdGFnZUlkYCBhbmQgcmVhZHMgdGhpc1xuICAgKiBmaWVsZCB0byBrbm93IHdoYXQgZWFjaCBjb250aW51YXRpb24gaXM7IGl0IG5ldmVyIGluZmVycyBpdCBmcm9tIHRoZVxuICAgKiBsb2cncyBzaGFwZS4gQSBsb2cgd3JpdHRlbiBiZWZvcmUgOS4zOS4wIGNhcnJpZXMgbm8gYHBoYXNlYCBhbnl3aGVyZSDigJRcbiAgICogc2VlIGBpbmZlckxlZ2FjeVBoYXNlc2AgKGZvb3RwcmludGpzL3RyYWNlKSBmb3IgaG93IGl0IGlzIHN0aWxsIHJlYWQuXG4gICAqL1xuICBwaGFzZT86IENvbW1pdFBoYXNlO1xufVxuXG4vKiogVGhlIGNvbnRpbnVhdGlvbiBhIGJ1bmRsZSByZWNvcmRzIOKAlCBzZWUge0BsaW5rIENvbW1pdEJ1bmRsZS5waGFzZX0uICovXG5leHBvcnQgdHlwZSBDb21taXRQaGFzZSA9ICdleGl0JyB8ICdyZXBlYXQnO1xuXG4vKipcbiAqIFBlci13cml0ZSByZWFkLXByb3ZlbmFuY2UgcG9saWN5ICgjUDEpIOKAlCB0aGUgZm91cnRoIGRpYWwgb2YgdGhlXG4gKiByZWFkVHJhY2tpbmcvd3JpdGVUcmFja2luZy9jb21taXRWYWx1ZXMgZmFtaWx5LCBzYW1lIDYtc2l0ZSBwcm9wYWdhdGlvblxuICogcGF0dGVybiAoZXhlY3V0b3Igb3B0aW9uIOKGkiBFeGVjdXRpb25SdW50aW1lLnVzZSog4oaSIHJvb3QgU3RhZ2VDb250ZXh0IOKGklxuICogY3JlYXRlTmV4dC9jcmVhdGVDaGlsZCBpbmhlcml0YW5jZSDihpIgU3ViZmxvd0V4ZWN1dG9yIGR1Y2stcHVzaCkuXG4gKlxuICogLSBgJ29mZidgIChkZWZhdWx0KSDigJQgemVybyBjb3N0LCBieXRlLWlkZW50aWNhbCBjb21taXQgbG9ncy5cbiAqIC0gYCdyZWFkcy1wcmVmaXgnYCDigJQgZXZlcnkgY29tbWl0dGVkIHtAbGluayBUcmFjZUVudHJ5fSBjYXJyaWVzXG4gKiAgIGByZWFkS2V5c2A6IHRoZSBrZXlzIHRyYWNrZWQtcmVhZCBCRUZPUkUgdGhhdCB3cml0ZSAodGVtcG9yYWwtcHJlZml4XG4gKiAgIGF0dHJpYnV0aW9uKS4gQ29zdDogb25lIFNldC10by1hcnJheSBjb3B5IHBlciB3cml0ZS4gQ29uc3VtZWQgYnlcbiAqICAgYGNhdXNhbENoYWluYCdzIGBlZGdlQXR0cmlidXRpb246ICdwZXItd3JpdGUnYCBhbmQgdGhlIHNsaWNlIGxheWVyLlxuICovXG5leHBvcnQgdHlwZSBXcml0ZVByb3ZlbmFuY2VNb2RlID0gJ29mZicgfCAncmVhZHMtcHJlZml4JztcblxuLyoqXG4gKiBQb2xpY3kgZm9yIGhvdyBjb21taXQtYnVuZGxlIFZBTFVFUyBhcmUgZW5jb2RlZCBpbnRvIHRoZSBjb21taXQgbG9nXG4gKiAoIzEzYy1CKSDigJQgY29tcGxldGVzIHRoZSBgcmVhZFRyYWNraW5nYC9gd3JpdGVUcmFja2luZ2AgZGlhbCBmYW1pbHkuXG4gKiBVbmxpa2UgdGhvc2UgdHdvICh3aGljaCBnYXRlIGxvc3N5IHNuYXBzaG90IGJvb2trZWVwaW5nKSwgdGhpcyBkaWFsIGlzXG4gKiAqKmxvc3NsZXNzIGluIGJvdGggbW9kZXMqKiDigJQgaXQgY2hhbmdlcyB0aGUgY29tbWl0IGxvZydzICplbmNvZGluZyosXG4gKiBuZXZlciBpdHMgKmluZm9ybWF0aW9uKjsgYW55IHN0ZXAncyBmdWxsIHN0YXRlIHN0YXlzIGV4YWN0bHlcbiAqIHJlY29uc3RydWN0YWJsZSBieSByZXBsYXkuXG4gKlxuICogLSBgJ2Z1bGwnYCAoZGVmYXVsdCkg4oCUIGV2ZXJ5IHN1cnZpdmluZyBgc2V0YCBwYXRoIHN0b3JlcyB0aGUgZnVsbCBmaW5hbFxuICogICB2YWx1ZSwgb25lIHRyYWNlIGVudHJ5IHBlciBvcGVyYXRpb24uIEJ5dGUtaWRlbnRpY2FsIHRvIHRoZSBoaXN0b3JpY2FsXG4gKiAgIGJlaGF2aW9yLlxuICogLSBgJ2RlbHRhJ2Ag4oCUIHR3byBjaGFuZ2VzLCBib3RoIHJlcGxheS1jb3ZlcmVkIGJ5IGBhcHBseVNtYXJ0TWVyZ2VgOlxuICogICAxLiAqKmBhcHBlbmRgIGRldGVjdGlvbioqOiB3aGVuIGEgcGF0aCdzIG5ldCBjaGFuZ2UgaXMgXCJ0aGUgYmFzZSBhcnJheVxuICogICAgICBwbHVzIG5ldyB0cmFpbGluZyBlbGVtZW50c1wiIChzdHJpY3QgcHJlZml4KSwgdGhlIGJ1bmRsZSByZWNvcmRzIE9OTFlcbiAqICAgICAgdGhlIHRhaWwgdW5kZXIgYSBgdmVyYjogJ2FwcGVuZCdgIHRyYWNlIGVudHJ5IOKAlCB0aGUgZ3Jvd2luZy1oaXN0b3J5XG4gKiAgICAgIGNvbW1pdCBsb2cgYmVjb21lcyBsaW5lYXIgaW4gdGFpbCBzaXplIGluc3RlYWQgb2YgTyhOwrIpIHJldGFpbmVkLlxuICogICAgICBBIHJlYWwgYHZlcmI6ICdkZWxldGUnYCBlbnRyeSByZXBsYWNlcyB0aGUgYHNldDogdW5kZWZpbmVkYCBmbGF0dGVuaW5nXG4gKiAgICAgIGZvciBgZGVsZXRlVmFsdWUoKWAgKGNsb3NlcyB0aGUgZG9jdW1lbnRlZCBNZW1vcnlQYXRjaCBsaW1pdGF0aW9uKS5cbiAqICAgMi4gKipPbmUgdHJhY2UgZW50cnkgcGVyIHN1cnZpdmluZyBwYXRoKiogKGFwcGVuZCBpcyBub3QgaWRlbXBvdGVudCBvblxuICogICAgICByZXBsYXkpOiB0aGUgdmVyYiBpcyByZXNvbHZlZCBmcm9tIHRoZSBwYXRoJ3MgYmFzZeKGkmZpbmFsIHJlbGF0aW9uc2hpcFxuICogICAgICBhbmQgb3AgbWl4OyBlbnRyaWVzIGFyZSBvcmRlcmVkIGJ5IGVhY2ggcGF0aCdzIExBU1QgdG91Y2guXG4gKlxuICogSG9uZXN0IGNvc3Qgbm90ZTogYXBwZW5kIGRldGVjdGlvbiBpcyBORVcgd2FsbCB3b3JrIOKAlCBhbiBPKHxiYXNlfClcbiAqIHN0cnVjdHVyYWwgcHJlZml4IGNvbXBhcmUgcGVyIGFycmF5LXNldCBwYXRoIHBlciBjb21taXQgKHRvZGF5J3NcbiAqIGBkZWVwRXF1YWxgIGZhc3QtZmFpbHMgb24gbGVuZ3RoIGluIE8oMSkgZm9yIGEgZ3Jvd24gYXJyYXkpLiBPbiBhIGhpdCB0aGVcbiAqIGNvbW1pdCBnZXRzIGNoZWFwZXIgaW4gYm90aCB3YWxsIGFuZCBoZWFwICh0aGUgTyh8ZmluYWx8KSBjbG9uZSBzaHJpbmtzIHRvXG4gKiBPKHx0YWlsfCkpOyBvbiBhIG1pc3MgaXQgcGF5cyBjb21wYXJlICsgZnVsbCBjbG9uZS4gYCdmdWxsJ2AgcGF5cyB6ZXJvIOKAlFxuICogdGhlIGRldGVjdGlvbiBicmFuY2ggaXMgbW9kZS1nYXRlZC5cbiAqXG4gKiBTZXQgdmlhIGBuZXcgRmxvd0NoYXJ0RXhlY3V0b3IoY2hhcnQsIHsgY29tbWl0VmFsdWVzIH0pYCBvclxuICogYGV4ZWN1dG9yLnNldENvbW1pdFZhbHVlcyhtb2RlKWAgKGJlZm9yZSBgcnVuKClgKS4gVGhlIGFjdGl2ZSBtb2RlIGlzXG4gKiBzdXJmYWNlZCBhcyB0aGUgc25hcHNob3QgZGlzY3JpbWluYW50IGBSdW50aW1lU25hcHNob3QuY29tbWl0VmFsdWVzYC5cbiAqL1xuZXhwb3J0IHR5cGUgQ29tbWl0VmFsdWVzTW9kZSA9ICdmdWxsJyB8ICdkZWx0YSc7XG5cbi8vIOKUgOKUgCBUaGUgZXhlY3V0aW9uIHRyZWUsIGFzIHRoZSByZWNvcmQncyByZWFkZXJzIHJlYWQgaXQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogVGhlIGV4ZWN1dGlvbiB0cmVlIGFzIHRoZSByZWNvcmQncyByZWFkZXJzIHJlYWQgaXQgKEM2KTogdGhlIGZpZWxkcyBhIHJlYWRlciB0b3VjaGVzIGFuZFxuICogbm90aGluZyBlbHNlLiBgY29tbWl0U3RvcHNgIChhbmQgc28gYHRhZ1N0b3BzYCBhbmQgZXZlcnkgc3RyYXRlZ3kgYnVpbHQgb24gaXQpIHJlYWRzIHRoZSBtb3VudFxuICogbWFya2VyIChgc3ViZmxvd0lkYCkgYW5kIHRoZSByb290J3MgYGlkYDsgYGtleXNSZWFkRnJvbUV4ZWN1dGlvblRyZWVgIHJlYWRzIHRoZSBrZXlzIG9mXG4gKiBgc3RhZ2VSZWFkc2A7IGJvdGgga2V5IG9uIGBydW50aW1lU3RhZ2VJZGAgYW5kIHdhbGsgYG5leHRgIGFuZCBgY2hpbGRyZW5gLlxuICpcbiAqIEEgc3RydWN0dXJhbCB0eXBlIHRoZSByZWNvcmQgb3ducywgc28gdGhlIHJlYWRlcnMgbmFtZSBub3RoaW5nIG9mIHRoZSBlbmdpbmUuIFRoZSBlbmdpbmUnc1xuICogYFN0YWdlU25hcHNob3RgIChgZ2V0U25hcHNob3QoKS5leGVjdXRpb25UcmVlYCkgaXMgb25lIOKAlCBhIHN1cGVydHlwZSBvZiBpdCwgc28gZXZlcnkgY2FsbGVyXG4gKiB0aGF0IGhhbmRzIGEgc25hcHNob3QncyB0cmVlIG92ZXIgY29tcGlsZXMgdW5jaGFuZ2VkIOKAlCBhbmQgc28gaXMgYSBzdG9yZWQgcmVjb3JkaW5nJ3MgcGFyc2VkXG4gKiBKU09OIHdpdGggdGhlc2UgZmllbGRzLiBFdmVyeSBmaWVsZCBpcyBvcHRpb25hbDogYSByZWFkZXIgdGhhdCBmaW5kcyBvbmUgYWJzZW50IHJlYWRzIG9uLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBpbXBvcnQgeyB0eXBlIEV4ZWN1dGlvblRyZWUsIGtleXNSZWFkRnJvbUV4ZWN1dGlvblRyZWUgfSBmcm9tICdmb290cHJpbnRqcy90cmFjZSc7XG4gKlxuICogY29uc3QgdHJlZTogRXhlY3V0aW9uVHJlZSA9IHtcbiAqICAgcnVudGltZVN0YWdlSWQ6ICdzZWVkIzAnLFxuICogICBuZXh0OiB7IHJ1bnRpbWVTdGFnZUlkOiAnZGVjaWRlIzEnLCBzdGFnZVJlYWRzOiB7IGNyZWRpdFRpZXI6ICdBJyB9IH0sXG4gKiB9O1xuICoga2V5c1JlYWRGcm9tRXhlY3V0aW9uVHJlZSh0cmVlKS5sb29rdXAoJ2RlY2lkZSMxJyk7IC8vIFsnY3JlZGl0VGllciddXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFeGVjdXRpb25UcmVlIHtcbiAgLyoqIFRoZSBzdGFnZSdzIGlkIChwcmVmaXhlZCBpbnNpZGUgYSBzdWJmbG93KS4gYGNvbW1pdFN0b3BzYCByZWFkcyB0aGUgcm9vdCdzIHRvIHBsYWNlIGEgc3ViZmxvdydzIHNlZWQuICovXG4gIHJlYWRvbmx5IGlkPzogc3RyaW5nO1xuICAvKiogYFtzdWJmbG93UGF0aC9dc3RhZ2VJZCNleGVjdXRpb25JbmRleGAg4oCUIHdoYXQgYSByZWFkZXIga2V5cyBvbi4gQSBub2RlIHdpdGhvdXQgb25lIGlzIG5vdCBhIHN0YWdlLiAqL1xuICByZWFkb25seSBydW50aW1lU3RhZ2VJZD86IHN0cmluZztcbiAgLyoqIFByZXNlbnQgb24gYSBzdWJmbG93IG1vdW50OiB0aGUgc3RvcCB0aGVyZSBzYXlzIGBraW5kOiAnbW91bnQnYC4gKi9cbiAgcmVhZG9ubHkgc3ViZmxvd0lkPzogc3RyaW5nO1xuICAvKiogV2hhdCB0aGUgc3RhZ2UgdHJhY2tlZC1yZWFkLCBieSBrZXkuIE9ubHkgdGhlIEtFWVMgYXJlIHJlYWQ6IGEgYCdzdW1tYXJ5J2AgbWFya2VyIHNlcnZlcyBhcyB3ZWxsIGFzIGEgdmFsdWUuICovXG4gIHJlYWRvbmx5IHN0YWdlUmVhZHM/OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj47XG4gIC8qKiBUaGUgc3RhZ2UgdGhhdCByYW4gbmV4dC4gKi9cbiAgcmVhZG9ubHkgbmV4dD86IEV4ZWN1dGlvblRyZWU7XG4gIC8qKiBUaGUgc3RhZ2VzIHRoYXQgcmFuIGFzIHRoaXMgb25lJ3MgY2hpbGRyZW4gKGEgZm9yaydzIGJyYW5jaGVzLCBhIGRlY2lkZXIncyBjaG9zZW4gYnJhbmNoKS4gKi9cbiAgcmVhZG9ubHkgY2hpbGRyZW4/OiByZWFkb25seSBFeGVjdXRpb25UcmVlW107XG59XG4iXX0=
@@ -11,10 +11,11 @@
11
11
  */
12
12
  import { EventLog } from '../memory/EventLog.js';
13
13
  import type { LogAddress } from '../memory/eventPosition.js';
14
+ import type { StageSnapshot } from '../memory/frameTypes.js';
14
15
  import type { RunPolicy } from '../memory/runPolicy.js';
15
16
  import { SharedMemory } from '../memory/SharedMemory.js';
16
17
  import { StageContext } from '../memory/StageContext.js';
17
- import type { CommitBundle, CommitValuesMode, StageSnapshot, WriteProvenanceMode } from '../memory/types.js';
18
+ import type { CommitBundle, CommitValuesMode, WriteProvenanceMode } from '../memory/types.js';
18
19
  import type { ObserverStats } from './DeferredObserverTier.js';
19
20
  /** Snapshot of a single recorder's collected data. */
20
21
  export interface RecorderSnapshot {
@@ -188,4 +188,4 @@ export class ExecutionRuntime {
188
188
  };
189
189
  }
190
190
  }
191
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhlY3V0aW9uUnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcnVubmVyL0V4ZWN1dGlvblJ1bnRpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFtSHpELE1BQU0sT0FBTyxnQkFBZ0I7SUFDcEIsV0FBVyxDQUFlO0lBQ2pDOzs7Ozs7OztPQVFHO0lBQ0ksYUFBYSxDQUFnQjtJQUM3QixnQkFBZ0IsQ0FBZTtJQUMvQixnQkFBZ0IsQ0FBVztJQUNsQyxvRkFBb0Y7SUFDNUUsYUFBYSxDQUFnQjtJQUM3QixhQUFhLENBQVU7SUFDdkIsY0FBYyxDQUFVO0lBQ2hDO21GQUMrRTtJQUN2RSxNQUFNLENBQVk7SUFFMUIsNEVBQTRFO0lBQ3BFLFNBQVMsQ0FBMkI7SUFFNUM7Ozs7OztPQU1HO0lBQ0gsWUFDRSxRQUFnQixFQUNoQixNQUFjLEVBQ2QsYUFBdUIsRUFDdkIsWUFBc0IsRUFDdEIsU0FBb0Isa0JBQWtCO1FBRXRDLElBQUksQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxjQUFjLEdBQUcsYUFBYSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxZQUFZLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ2pFLHlFQUF5RTtRQUN6RSwwRUFBMEU7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QyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDckcsWUFBWSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWTtZQUN0QyxlQUFlLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlO1NBQzdDLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEV4ZWN1dGlvblJ1bnRpbWUg4oCUIFRoZSBydW50aW1lIGVudmlyb25tZW50IGZvciBvbmUgZmxvd2NoYXJ0IGV4ZWN1dGlvbi5cbiAqXG4gKiBXaXJlcyB1cCB0aGUgdGhyZWUgbWVtb3J5IHByaW1pdGl2ZXMgaW50byBhIHNpbmdsZSBjb250YWluZXI6XG4gKiAgIC0gU2hhcmVkTWVtb3J5ICh0aGUgaGVhcCDigJQgc2hhcmVkIHN0YXRlIGFjcm9zcyBhbGwgc3RhZ2VzKVxuICogICAtIFN0YWdlQ29udGV4dCAgKHRoZSBjYWxsIHN0YWNrIOKAlCBwZXItc3RhZ2UgZXhlY3V0aW9uIHRyZWUpXG4gKiAgIC0gRXZlbnRMb2cgICAgICAodGhlIHRyYW5zYWN0aW9uIGxvZyDigJQgY29tbWl0IGhpc3RvcnkgZm9yIHJlcGxheSlcbiAqXG4gKiBUaGUgZW5naW5lIChGbG93Y2hhcnRUcmF2ZXJzZXIpIHJlY2VpdmVzIHRoaXMgYXMgaXRzIHJ1bnRpbWUgcGFyYW1ldGVyLlxuICogQWZ0ZXIgZXhlY3V0aW9uLCBjb25zdW1lcnMgcXVlcnkgaXQgZm9yIHRoZSBmdWxsIGV4ZWN1dGlvbiBzdGF0ZS5cbiAqL1xuXG5pbXBvcnQgeyBmcmVlemVSZWNvcmQgfSBmcm9tICcuLi9jYXB0dXJlL2ZyZWV6ZS5qcyc7XG5pbXBvcnQgeyBFdmVudExvZyB9IGZyb20gJy4uL21lbW9yeS9FdmVudExvZy5qcyc7XG5pbXBvcnQgdHlwZSB7IExvZ0FkZHJlc3MgfSBmcm9tICcuLi9tZW1vcnkvZXZlbnRQb3NpdGlvbi5qcyc7XG5pbXBvcnQgeyBMT0dfUExBQ0VIT0xERVIgfSBmcm9tICcuLi9tZW1vcnkvcGxhY2Vob2xkZXJzLmpzJztcbmltcG9ydCB0eXBlIHsgUnVuUG9saWN5IH0gZnJvbSAnLi4vbWVtb3J5L3J1blBvbGljeS5qcyc7XG5pbXBvcnQgeyBERUZBVUxUX1JVTl9QT0xJQ1kgfSBmcm9tICcuLi9tZW1vcnkvcnVuUG9saWN5LmpzJztcbmltcG9ydCB7IFNoYXJlZE1lbW9yeSB9IGZyb20gJy4uL21lbW9yeS9TaGFyZWRNZW1vcnkuanMnO1xuaW1wb3J0IHsgU3RhZ2VDb250ZXh0IH0gZnJvbSAnLi4vbWVtb3J5L1N0YWdlQ29udGV4dC5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbW1pdEJ1bmRsZSwgQ29tbWl0VmFsdWVzTW9kZSwgU3RhZ2VTbmFwc2hvdCwgV3JpdGVQcm92ZW5hbmNlTW9kZSB9IGZyb20gJy4uL21lbW9yeS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IE9ic2VydmVyU3RhdHMgfSBmcm9tICcuL0RlZmVycmVkT2JzZXJ2ZXJUaWVyLmpzJztcblxuLyoqIFNuYXBzaG90IG9mIGEgc2luZ2xlIHJlY29yZGVyJ3MgY29sbGVjdGVkIGRhdGEuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZGVyU25hcHNob3Qge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBTY29wZVJlY29yZGVyIHR5cGUgYW5kIHBhdHRlcm4gZGVzY3JpcHRpb24gKGUuZy4sIFwiVHJhbnNsYXRvciAoS2V5ZWRTdG9yZSkg4oCUIHBlci1zdGVwIHRva2VuIHVzYWdlXCIpLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqIFByZWZlcnJlZCByZWFkLXRpbWUgb3BlcmF0aW9uIOKAlCBoaW50cyB0aGUgVUkgYWJvdXQgd2hpY2ggdmlldyB0byBzaG93IHByb21pbmVudGx5LiAqL1xuICBwcmVmZXJyZWRPcGVyYXRpb24/OiAndHJhbnNsYXRlJyB8ICdhY2N1bXVsYXRlJyB8ICdhZ2dyZWdhdGUnO1xuICBkYXRhOiB1bmtub3duO1xuICAvKipcbiAgICogU21hbGwgbWFjaGluZS1yZWFkYWJsZSBmYWN0cyBhYm91dCB0aGUgQlVORExFIOKAlCBob3cgaXQgd2FzIHByb2R1Y2VkLFxuICAgKiB3aGljaCBwcm9qZWN0aW9uIG9mIHRoZSByZWNvcmRlcidzIGRhdGEgaXQgaXMsIHdoYXQgaXQgZGVsaWJlcmF0ZWx5XG4gICAqIGxlZnQgb3V0LiBXaGF0ZXZlciB0aGUgcmVjb3JkZXIncyBgdG9TbmFwc2hvdCgpYCBwdXQgaGVyZSwgY29waWVkXG4gICAqIHRocm91Z2ggdW5jaGFuZ2VkLlxuICAgKlxuICAgKiBUaGUgc3BsaXQgd2l0aCBgZGVzY3JpcHRpb25gOiBgZGVzY3JpcHRpb25gIGlzIHRoZSBzZW50ZW5jZSBhIGh1bWFuXG4gICAqIHJlYWRzOyBgbWV0YWAgaXMgd2hhdCBhbiBvZmZsaW5lIGNvbnN1bWVyIEJSQU5DSEVTIG9uLiBBIHJlY29yZGVyIHdpdGhcbiAgICogYSBcImZ1bGxcIiBhbmQgYSBcImxlYW5cIiBidW5kbGUgc2hhcGUgdGhhdCBzYXlzIHNvIG9ubHkgaW4gaXRzXG4gICAqIGRlc2NyaXB0aW9uIGZvcmNlcyBldmVyeSByZWFkZXIgdG8gc3RyaW5nLW1hdGNoIHByb3NlIOKAlCBhbmQgYSByZWFkZXJcbiAgICogdGhhdCBkb2Vzbid0IHJlbmRlcnMgYW4gZW1wdHkgcGFuZWwgaW5zdGVhZCBvZiBzYXlpbmcgXCJ0aGlzIHJlY29yZGluZ1xuICAgKiBjYXJyaWVzIHN0cnVjdHVyZSBvbmx5XCIuXG4gICAqXG4gICAqIE5vdCBpbnRlcnByZXRlZCBieSB0aGUgZW5naW5lLCBzbyBrZXlzIGFyZSB0aGUgcmVjb3JkZXIncyB0byBjaG9vc2U7XG4gICAqIGtlZXAgdGhlIHZhbHVlcyBKU09OLXNhZmUsIHNpbmNlIHRoaXMgcmlkZXMgdGhlIHNuYXBzaG90IG91dCB0byBkaXNrLlxuICAgKi9cbiAgbWV0YT86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pjtcbn1cblxuZXhwb3J0IHR5cGUgUnVudGltZVNuYXBzaG90ID0ge1xuICAvKipcbiAgICogVGhlIHJ1biB0aGlzIHNuYXBzaG90IGJlbG9uZ3MgdG8g4oCUIHRoZSBzYW1lIGBydW5JZGAgc3RhbXBlZCBvbiBldmVyeVxuICAgKiBgVHJhdmVyc2FsQ29udGV4dGAgKGFuZCB0aHVzIGV2ZXJ5IHJlY29yZGVyIGV2ZW50KSBvZiB0aGUgcnVuLCBzbyBhXG4gICAqIHNuYXBzaG90IGNhbiBiZSBqb2luZWQgYWdhaW5zdCBhbiBldmVudCBzdHJlYW0gb3IgYW4gZXh0ZXJuYWxcbiAgICogY29ycmVsYXRpb24gdGFibGUuIFJlYWQtb25seSBieSBjb250cmFjdDogZ2VuZXJhdGVkIGJ5IHRoZSBleGVjdXRvclxuICAgKiAoYHJ1bm5lci9ydW5JZC50c2ApLCBuZXZlciBkZXJpdmVkIGZyb20gc25hcHNob3QgY29udGVudHMuXG4gICAqXG4gICAqIExpZmVjeWNsZSAobWF0Y2hlcyB0aGUgZXZlbnQgbW9kZWwpOiBmcmVzaCBwZXIgYHJ1bigpYCBBTkQgcGVyXG4gICAqIGByZXN1bWUoKWAg4oCUIHJlc3VtZSBpcyBsb2dpY2FsbHkgYSBkaXN0aW5jdCBydW4sIHNvIGEgcG9zdC1yZXN1bWVcbiAgICogc25hcHNob3QgY2FycmllcyBhIERJRkZFUkVOVCBydW5JZCB0aGFuIHRoZSBwYXVzZWQgcnVuJ3Mgc25hcHNob3QuXG4gICAqL1xuICByZWFkb25seSBydW5JZDogc3RyaW5nO1xuICBzaGFyZWRTdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGV4ZWN1dGlvblRyZWU6IFN0YWdlU25hcHNob3Q7XG4gIC8qKlxuICAgKiBUaGUgY29tbWl0IGxvZydzIGZvbGQgQkFTRSDigJQgdGhlIHJ1bidzIHN0YXRlIGJlZm9yZSBpdHMgZmlyc3QgY29tbWl0XG4gICAqIChgaW5pdGlhbENvbnRleHRgIG1lcmdlZCB3aXRoIGBkZWZhdWx0VmFsdWVzRm9yQ29udGV4dGA7IG9uIGEgcmVzdW1lLCB0aGVcbiAgICogY2hlY2twb2ludCdzIHN0YXRlKS4gRGVlcGx5IGZyb3plbiBhbmQgZnVsbHkgZGV0YWNoZWQgZnJvbSB0aGUgZW5naW5lLlxuICAgKlxuICAgKiBDb21taXQgYnVuZGxlcyBhcmUgRElGRlMsIHNvIHRoZSBsb2cgYWxvbmUgY2Fubm90IHJlYnVpbGQgYSB2YWx1ZSB0aGF0XG4gICAqIHdhcyBzZWVkZWQgYmVmb3JlIHRoZSBydW4gYW5kIG9ubHkgZXZlciBtZXJnZWQgYWZ0ZXJ3YXJkcy4gU2hpcHBpbmcgdGhlXG4gICAqIGJhc2UgV0lUSCB0aGUgbG9nIGlzIHdoYXQgbWFrZXMgYW4gb2ZmbGluZSBmb2xkIOKAlCBgc3RhdGVBdChzbmFwc2hvdCwgaSlgXG4gICAqIGZyb20gYGZvb3RwcmludGpzL3RyYWNlYCDigJQgcmVwcm9kdWNlIHRoZSBzdGF0ZSBhIHN0YWdlIGFjdHVhbGx5IHNhdy5cbiAgICpcbiAgICogT1BUSU9OQUwgQlkgVFlQRSwgYW5kIGFic2VudCBpbiBleGFjdGx5IHR3byBjYXNlcy4gQSBwbGFpbiBgZ2V0U25hcHNob3QoKWBcbiAgICogYWx3YXlzIGNhcnJpZXMgaXQsIHNvIGEgbGl2ZSBmb2xkIHJlcG9ydHMgYGJhc2lzOiAnaW5pdGlhbCtsb2cnYC4gVW5kZXJcbiAgICogYGdldFNuYXBzaG90KHsgcmVkYWN0OiB0cnVlIH0pYCBpdCBpcyBPTUlUVEVEIOKAlCB0aGUgYmFzZSBpcyB0aGUgcmF3IHByZS1ydW5cbiAgICogc2VlZCBhbmQgdGhlIHJlZGFjdGlvbiBwb2xpY3kgaXMgbm90IHBsdW1iZWQgaW50byB0aGUgZm9sZCDigJQgc28gYSBmb2xkIG9mXG4gICAqIGEgcmVkYWN0ZWQgc25hcHNob3QgZGVncmFkZXMgaG9uZXN0bHkgdG8gYGJhc2lzOiAnbG9nLW9ubHknYC4gQW5kIGl0IGlzXG4gICAqIGRlY2xhcmVkIG9wdGlvbmFsIHNvIHRoYXQgY29kZSB3cml0dGVuIGFnYWluc3QgOS4xNi54IOKAlCBhIHRlc3QgZml4dHVyZSBvclxuICAgKiBhIFVJIG1vY2sgdGhhdCBDT05TVFJVQ1RTIGEgYFJ1bnRpbWVTbmFwc2hvdGAgbGl0ZXJhbCDigJQgc3RpbGwgY29tcGlsZXMuXG4gICAqIGBzdGF0ZUF0YCBoYW5kbGVzIGFic2VuY2UgYnkgc2F5aW5nIHNvLCBuZXZlciBieSBmb2xkaW5nIGEgbGllLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5pdGlhbFN0YXRlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKlxuICAgKiBUaGUgcnVuJ3MgY29tbWl0IGJ1bmRsZXMsIG9uZSBwZXIgZXhlY3V0ZWQgc3RhZ2UsIGluIGV4ZWN1dGlvbiBvcmRlciDigJRcbiAgICogYSBERVRBQ0hFRCwgZnJvemVuIGNvcHkgb2YgdGhlIGVuZ2luZSdzIGxpdmUgbG9nIChhIHNuYXBzaG90IGlzIGEgZm9sZFxuICAgKiByZXN1bHQ6IGl0IG11c3Qgbm90IGtlZXAgY2hhbmdpbmcgdW5kZXIgdGhlIGNvbnN1bWVyIHRoYXQgaG9sZHMgaXQpLlxuICAgKiBUaGUgYnVuZGxlcyBpbnNpZGUgYXJlIHRoZSBlbmdpbmUncyBvd24gb2JqZWN0cywgaW1tdXRhYmxlIGFmdGVyIHJlY29yZC5cbiAgICovXG4gIGNvbW1pdExvZzogQ29tbWl0QnVuZGxlW107XG4gIC8qKiBJZGVudGl0eSBvZiB0aGlzIGxvZywgc3RhYmxlIGFjcm9zcyBzYW1lLWV4ZWN1dG9yIHJlc3VtZS4gQWJzZW50IGJlZm9yZSBiaW5kaW5nIG9yIGluIG9sZGVyIHNvdXJjZXMuICovXG4gIHJlYWRvbmx5IGxvZ0FkZHJlc3M/OiBMb2dBZGRyZXNzO1xuICAvKipcbiAgICogRW5jb2RpbmcgZGlzY3JpbWluYW50IGZvciBgY29tbWl0TG9nYCAoIzEzYy1CKTogYCdmdWxsJ2Ag4oCUIGV2ZXJ5IGBzZXRgXG4gICAqIGJ1bmRsZSBzdG9yZXMgdGhlIGZ1bGwgZmluYWwgdmFsdWUgKGhpc3RvcmljYWwpOyBgJ2RlbHRhJ2Ag4oCUIGJ1bmRsZXMgbWF5XG4gICAqIGNhcnJ5IGBhcHBlbmRgL2BkZWxldGVgIHRyYWNlIHZlcmJzIHdpdGggdmVyYi1xdWFsaWZpZWQgYG92ZXJ3cml0ZWBcbiAgICogcGF5bG9hZHMgKHRhaWxzKS4gT2ZmbGluZSB0b29saW5nIGtleXMgb24gdGhpcyBmaWVsZDsgYSBidW5kbGUgc3RyZWFtXG4gICAqIHdpdGhvdXQgY29udGV4dCByZW1haW5zIHNlbGYtZGVzY3JpYmluZyB2aWEgdGhlIHZlcmJzIHRoZW1zZWx2ZXMuXG4gICAqL1xuICBjb21taXRWYWx1ZXM6IENvbW1pdFZhbHVlc01vZGU7XG4gIC8qKiBQZXItd3JpdGUgcmVhZC1wcm92ZW5hbmNlIGRpYWwgKCNQMSkgdGhlIHJ1biBleGVjdXRlZCB1bmRlciDigJQgdGhlXG4gICAqICBvZmZsaW5lLXRvb2xpbmcgZGlzY3JpbWluYW50IGZvciBgVHJhY2VFbnRyeS5yZWFkS2V5c2AgYXZhaWxhYmlsaXR5LiAqL1xuICB3cml0ZVByb3ZlbmFuY2U6IFdyaXRlUHJvdmVuYW5jZU1vZGU7XG4gIC8qKlxuICAgKiBQZXItc3ViZmxvdyBleGVjdXRpb24gcmVzdWx0cywgRFVBTC1LRVlFRCAoZGVzaWduOiBkb2NzL2Rlc2lnbi9zdWJmbG93LWNvbW1pdC12aXNpYmlsaXR5Lm1kKTpcbiAgICogICAtIGJ5IHN1YmZsb3cgUEFUSCAoYHN1YmZsb3dJZGAsIGUuZy4gYCdzZi1wYXknYCkg4oaSIHRoZSBMQVNUIGl0ZXJhdGlvbiAoYmFjay1jb21wYXQpOyB0aGlzXG4gICAqICAgICBpcyB3aGF0IGBnZXRTdWJ0cmVlU25hcHNob3QocGF0aClgIGFuZCBgbGlzdFN1YmZsb3dQYXRocygpYCByZXNvbHZlLlxuICAgKiAgIC0gYnkgcGVyLWV4ZWN1dGlvbiBtb3VudCBgcnVudGltZVN0YWdlSWRgIChlLmcuIGAnc2YtcGF5IzUnYCkg4oaSIFRIQVQgaXRlcmF0aW9uJ3MgcmVzdWx0LCBzb1xuICAgKiAgICAgYSBMT09QSU5HIHN1YmZsb3cgcmV0YWlucyBFVkVSWSBpdGVyYXRpb24gKG5vdCBqdXN0IHRoZSBsYXN0KS4gTG9vayB1cCBhIHNwZWNpZmljXG4gICAqICAgICBpdGVyYXRpb24gYXMgYHN1YmZsb3dSZXN1bHRzW25vZGUucnVudGltZVN0YWdlSWRdID8/IHN1YmZsb3dSZXN1bHRzW25vZGUuc3ViZmxvd0lkXWAuXG4gICAqIEJvdGgga2V5cyBwb2ludCBhdCB0aGUgc2FtZSBvYmplY3QgZm9yIGEgc2luZ2xlIG1vdW50OyBpdGVyYXRlIHdpdGggY2FyZSAoY291bnQgdmlhIHRoZVxuICAgKiBwYXRoIGtleXMg4oCUIHRob3NlIHdpdGhvdXQgYCcjJ2ApLiBUaGUgcGF1c2UgY2hlY2twb2ludCBjYXJyaWVzIG9ubHkgdGhlIHBhdGgga2V5cywgbGVhbi5cbiAgICpcbiAgICogVW5kZXIgYGdldFNuYXBzaG90KHsgcmVkYWN0OiB0cnVlIH0pYCBlYWNoIGVudHJ5J3MgYHRyZWVDb250ZXh0Lmdsb2JhbENvbnRleHRgIGlzIHRoYXRcbiAgICogc3ViZmxvdydzIE9XTiByZWRhY3RlZCBtaXJyb3IgKDkuMjAuMCkg4oCUIHRoZSBmb2xkIG9mIGl0cyBzY3J1YmJlZCBgaGlzdG9yeWAg4oCUIHNlcnZlZCBhc1xuICAgKiBvbmUgc3Vic3RpdHV0ZWQgb2JqZWN0IHBlciBtb3VudCAoYm90aCBrZXlzIHN0aWxsIGFncmVlKSDigJQgdGhlIHdyYXBwZXIgaXMgZnJlc2ggcGVyXG4gICAqIGBnZXRTbmFwc2hvdGAgY2FsbCwgdGhlIGBnbG9iYWxDb250ZXh0YCBpbnNpZGUgaXQgaXMgdGhlIHN0YWJsZSBtaXJyb3I7IHBsYWluLCBpdCBpcyB0aGUgc3ViZmxvdydzXG4gICAqIGxpdmUgaGVhcC4gV2l0aG91dCBhIHBvbGljeSB0aGVyZSBpcyBubyBtaXJyb3IgYW5kIHRoZSB0d28gdmlld3MgYXJlIHRoZSBzYW1lIG9iamVjdHMuXG4gICAqL1xuICBzdWJmbG93UmVzdWx0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKiogU25hcHNob3QgZGF0YSBmcm9tIHJlY29yZGVycyB0aGF0IGltcGxlbWVudCB0b1NuYXBzaG90KCkuICovXG4gIHJlY29yZGVycz86IFJlY29yZGVyU25hcHNob3RbXTtcbiAgLyoqXG4gICAqIERlZmVycmVkLW9ic2VydmVyIGFjY291bnRpbmcgKFJGQy0wMDEgQmxvY2sgOSkg4oCUIHF1ZXVlIGRlcHRoLCBkcm9wcyxcbiAgICogZmx1c2gvYnVkZ2V0IGNvdW50ZXJzLCBwZXItbGlzdGVuZXIgdGltZSBhdHRyaWJ1dGlvbiwgYW5kIHRoZVxuICAgKiB0ZXJtaW5hbC1mbHVzaCBzdHJhbmRpbmcgY291bnQuIEFCU0VOVCB1bmxlc3MgYSByZWNvcmRlciB3YXMgYXR0YWNoZWRcbiAgICogd2l0aCBgeyBkZWxpdmVyeTogJ2RlZmVycmVkJyB9YCBvbiB0aGlzIGV4ZWN1dG9yICh6ZXJvLWNvc3QgZGlzY2lwbGluZSkuXG4gICAqL1xuICBvYnNlcnZlclN0YXRzPzogT2JzZXJ2ZXJTdGF0cztcbn07XG5cbmV4cG9ydCBjbGFzcyBFeGVjdXRpb25SdW50aW1lIHtcbiAgcHVibGljIGdsb2JhbFN0b3JlOiBTaGFyZWRNZW1vcnk7XG4gIC8qKlxuICAgKiBQYXJhbGxlbCByZWRhY3RlZCBtaXJyb3Igb2YgYGdsb2JhbFN0b3JlYC4gUG9wdWxhdGVkIGJ5IGV2ZXJ5IGNvbW1pdCB0aGF0XG4gICAqIHN0YWdlZCBhIHdyaXRlIChgbWVtb3J5L3JlY29yZENvbW1pdC50cyDCtyByZWNvcmRDb21taXRgKSwgd2l0aCB0aGUgYWxyZWFkeS1jb21wdXRlZCByZWRhY3RlZCBwYXRjaGVzLlxuICAgKiBPbmx5IGV4aXN0cyB3aGVuIHRoZSBydW4ncyBwb2xpY3kga2VlcHMgYSBtaXJyb3IgKGBSdW5Qb2xpY3kubWlycm9yYCDigJRcbiAgICogYEZsb3dDaGFydEV4ZWN1dG9yYCBzZXRzIGl0IHdoZW4gYSBgUmVkYWN0aW9uUG9saWN5YCBpcyBjb25maWd1cmVkKS5cbiAgICogT3RoZXJ3aXNlIHVuZGVmaW5lZCBhbmQgemVybyBjb3N0LlxuICAgKlxuICAgKiBSZWFkIHZpYSBgZ2V0U25hcHNob3QoeyByZWRhY3Q6IHRydWUgfSlgLlxuICAgKi9cbiAgcHVibGljIHJlZGFjdGVkU3RvcmU/OiBTaGFyZWRNZW1vcnk7XG4gIHB1YmxpYyByb290U3RhZ2VDb250ZXh0OiBTdGFnZUNvbnRleHQ7XG4gIHB1YmxpYyBleGVjdXRpb25IaXN0b3J5OiBFdmVudExvZztcbiAgLyoqIE9yaWdpbmFsIHJvb3QgZm9yIGdldFNuYXBzaG90KCkg4oCUIHNldCBiZWZvcmUgcmVzdW1lIGNoYW5nZXMgcm9vdFN0YWdlQ29udGV4dC4gKi9cbiAgcHJpdmF0ZSBfc25hcHNob3RSb290PzogU3RhZ2VDb250ZXh0O1xuICBwcml2YXRlIF9pbml0aWFsU3RhdGU6IHVua25vd247XG4gIHByaXZhdGUgX2RlZmF1bHRWYWx1ZXM6IHVua25vd247XG4gIC8qKiBUaGUgcnVuJ3MgcG9saWN5IChgbWVtb3J5L3J1blBvbGljeS50c2ApIOKAlCBpbnN0YWxsZWQgb24gdGhlIHJvb3QgZnJhbWU7XG4gICAqICBpdHMgYGNvbW1pdFZhbHVlc2AgYW5kIGB3cml0ZVByb3ZlbmFuY2VgIGFyZSB0aGUgc25hcHNob3QgZGlzY3JpbWluYW50cy4gKi9cbiAgcHJpdmF0ZSBwb2xpY3k6IFJ1blBvbGljeTtcblxuICAvKiogTWVtb2l6ZWQgZnJvemVuIGZvbGQgYmFzZSDigJQgc2VlIHtAbGluayBSdW50aW1lU25hcHNob3QuaW5pdGlhbFN0YXRlfS4gKi9cbiAgcHJpdmF0ZSBfZm9sZEJhc2U/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAvKipcbiAgICogQHBhcmFtIHBvbGljeSBUaGUgcnVuJ3MgcG9saWN5IChgcnVuUG9saWN5LnRzYCwgRjUpIOKAlCB0aGUgZm91ciBkaWFscywgdGhlXG4gICAqICAgcmVkYWN0aW9uIHJ1bGUsIHRoZSBtaXJyb3IgZmxhZy4gSW5zdGFsbGVkIG9uIHRoZSByb290IGZyYW1lIGhlcmUsIHNvXG4gICAqICAgdGhlIEZJUlNUIGNvbW1pdCAoYSBzdWJmbG93J3Mgc2VlZCwgYGhpc3RvcnlbMF1gKSBhbHJlYWR5IHJ1bnMgdW5kZXIgaXQ7XG4gICAqICAgZXZlcnkgZnJhbWUgYWZ0ZXIgaW5oZXJpdHMgdGhlIHNhbWUgcmVmZXJlbmNlLiBEZWZhdWx0OiBldmVyeSBkaWFsIGF0XG4gICAqICAgaXRzIGRlZmF1bHQsIG5vIHJ1bGUsIG5vIG1pcnJvci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJvb3ROYW1lOiBzdHJpbmcsXG4gICAgcm9vdElkOiBzdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlcz86IHVua25vd24sXG4gICAgaW5pdGlhbFN0YXRlPzogdW5rbm93bixcbiAgICBwb2xpY3k6IFJ1blBvbGljeSA9IERFRkFVTFRfUlVOX1BPTElDWSxcbiAgKSB7XG4gICAgdGhpcy5faW5pdGlhbFN0YXRlID0gaW5pdGlhbFN0YXRlO1xuICAgIHRoaXMuX2RlZmF1bHRWYWx1ZXMgPSBkZWZhdWx0VmFsdWVzO1xuICAgIHRoaXMuZ2xvYmFsU3RvcmUgPSBuZXcgU2hhcmVkTWVtb3J5KGRlZmF1bHRWYWx1ZXMsIGluaXRpYWxTdGF0ZSk7XG4gICAgLy8gVGhlIGV2ZW50IGxvZydzIGZvbGQgYmFzZSBtdXN0IGJlIHRoZSBTQU1FIHN0YXRlIHRoZSBzdG9yZSBzdGFydHMgZnJvbVxuICAgIC8vIOKAlCBgaW5pdGlhbENvbnRleHRgIG1lcmdlZCB3aXRoIGBkZWZhdWx0VmFsdWVzRm9yQ29udGV4dGAsIHdoaWNoIGlzIHdoYXRcbiAgICAvLyBgU2hhcmVkTWVtb3J5YCBjb21wdXRlZCBhYm92ZS4gU2VlZGluZyB0aGUgbG9nIGZyb20gYGluaXRpYWxTdGF0ZWAgYWxvbmVcbiAgICAvLyBsZWZ0IGBkZWZhdWx0VmFsdWVzYCBvdXQgb2YgZXZlcnkgcmVwbGF5LCBzbyBhIGZvbGQgY291bGQgbm90IHJlcHJvZHVjZVxuICAgIC8vIHRoZSBzdGF0ZSBhIHN0YWdlIGFjdHVhbGx5IHNhdy4gYGdldFN0YXRlKClgIGlzIHRoZSBsaXZlIGNvbnRleHQ7IHRoZVxuICAgIC8vIEV2ZW50TG9nIGNvbnN0cnVjdG9yIGNsb25lcyBpdCwgc28gdGhlIGJhc2Ugc3RheXMgZGV0YWNoZWQuXG4gICAgdGhpcy5leGVjdXRpb25IaXN0b3J5ID0gbmV3IEV2ZW50TG9nKHRoaXMuZ2xvYmFsU3RvcmUuZ2V0U3RhdGUoKSk7XG4gICAgdGhpcy5wb2xpY3kgPSBwb2xpY3k7XG4gICAgdGhpcy5yb290U3RhZ2VDb250ZXh0ID0gdGhpcy5uZXdSb290KHJvb3ROYW1lLCByb290SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgZnJlc2ggcm9vdCBmcmFtZSBmb3IgdGhpcyBydW50aW1lIOKAlCBgZ2xvYmFsU3RvcmVgLCBgZXhlY3V0aW9uSGlzdG9yeWAsXG4gICAqIHRoZSBydW4ncyBwb2xpY3kgYW5kICh3aGVuIGtlcHQpIHRoZSBtaXJyb3IuIEFsc28gaG93IGBTdWJmbG93RXhlY3V0b3JgXG4gICAqIHJlcGxhY2VzIGEgc3ViZmxvdydzIHNlZWQgZnJhbWUgd2l0aCB0aGUgZnJhbWUgaXRzIGZpcnN0IHN0YWdlIHJ1bnMgb24uXG4gICAqL1xuICBuZXdSb290KG5hbWU6IHN0cmluZywgaWQ6IHN0cmluZyk6IFN0YWdlQ29udGV4dCB7XG4gICAgY29uc3Qgcm9vdCA9IG5ldyBTdGFnZUNvbnRleHQoJycsIG5hbWUsIGlkLCB0aGlzLmdsb2JhbFN0b3JlLCAnJywgdGhpcy5leGVjdXRpb25IaXN0b3J5KTtcbiAgICB0aGlzLmluc3RhbGxQb2xpY3kocm9vdCk7XG4gICAgcmV0dXJuIHJvb3Q7XG4gIH1cblxuICAvKipcbiAgICogSW5zdGFsbCB0aGUgcnVuJ3MgcG9saWN5IG9uIHRoZSBDVVJSRU5UIHJvb3QgZnJhbWUg4oCUIGEgc2FtZS1leGVjdXRvclxuICAgKiByZXN1bWUsIHdob3NlIGNvbnRpbnVhdGlvbiByb290IChgbGVhZi5jcmVhdGVOZXh0YCkgaXMgYWR2YW5jZWQgYmVmb3JlXG4gICAqIHRoZSBleGVjdXRvciBidWlsZHMgdGhpcyBsZWcncyBwb2xpY3kgKGEgZnJlc2ggcnVsZSBwZXIgbGVnKS4gRXZlcnlcbiAgICogZGVzY2VuZGFudCB0YWtlcyB0aGUgcmVmZXJlbmNlIGZyb20gdGhlcmUuXG4gICAqL1xuICB1c2VQb2xpY3kocG9saWN5OiBSdW5Qb2xpY3kpOiB2b2lkIHtcbiAgICB0aGlzLnBvbGljeSA9IHBvbGljeTtcbiAgICB0aGlzLmluc3RhbGxQb2xpY3kodGhpcy5yb290U3RhZ2VDb250ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcG9saWN5IG9uIGByb290YCwgYW5kIHRoZSBtaXJyb3Igc3RvcmUgd2hlbiB0aGUgcG9saWN5IGtlZXBzIG9uZS5cbiAgICogVGhlIG1pcnJvciBpcyBhIFNFUlZFRCBzdXJmYWNlLCBzbyBpdHMgc2VlZCBtdXN0IGFscmVhZHkgYmUgdGhlIHBvbGljeSdzXG4gICAqIHZpZXcgb2YgdGhlIHN0YXJ0aW5nIHN0YXRlOiBhIHBvbGljeSBrZXkgdGhhdCBhcnJpdmVzIGJ5IGBpbml0aWFsQ29udGV4dGBcbiAgICogLyBgZGVmYXVsdFZhbHVlc0ZvckNvbnRleHRgIChvciwgb24gYSBjcm9zcy1leGVjdXRvciByZXN1bWUsIGJ5IHRoZVxuICAgKiBjaGVja3BvaW50J3MgYHNoYXJlZFN0YXRlYCkgYW5kIGlzIG5ldmVyIHJlLXdyaXR0ZW4gd291bGQgb3RoZXJ3aXNlIHNpdFxuICAgKiBpbiBgZ2V0U25hcHNob3QoeyByZWRhY3Q6IHRydWUgfSlgIGluIHBsYWludGV4dCDigJQgc28gdGhlIHNlZWQgaXMgc2NydWJiZWRcbiAgICogd2l0aCB0aGUgTE9HJ3MgcGxhY2Vob2xkZXIsIHRoZSBzYW1lIHN0cmluZyB0aGUgcmVkYWN0ZWQgcGF0Y2hlcyBjYXJyeS5cbiAgICogQ3JlYXRlZCBvbmNlIHBlciBydW50aW1lIChhIHN1YmZsb3cncyBydW50aW1lIGtlZXBzIGl0cyBvd247IGl0cyBzZWVkIGlzXG4gICAqIGVtcHR5IOKAlCB0aGUgaW5wdXQgYXJyaXZlcyBhcyBhIGNvbW1pdCkuXG4gICAqL1xuICBwcml2YXRlIGluc3RhbGxQb2xpY3kocm9vdDogU3RhZ2VDb250ZXh0KTogdm9pZCB7XG4gICAgcm9vdC51c2VQb2xpY3kodGhpcy5wb2xpY3kpO1xuICAgIGlmICghdGhpcy5wb2xpY3kubWlycm9yKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLnJlZGFjdGVkU3RvcmUpIHtcbiAgICAgIGNvbnN0IHJ1bGUgPSB0aGlzLnBvbGljeS5yZWRhY3Rpb247XG4gICAgICB0aGlzLnJlZGFjdGVkU3RvcmUgPSBuZXcgU2hhcmVkTWVtb3J5KFxuICAgICAgICBydWxlID8gcnVsZS5yZXRhaW5TdGF0ZSh0aGlzLl9kZWZhdWx0VmFsdWVzLCBMT0dfUExBQ0VIT0xERVIpIDogdGhpcy5fZGVmYXVsdFZhbHVlcyxcbiAgICAgICAgcnVsZSA/IHJ1bGUucmV0YWluU3RhdGUodGhpcy5faW5pdGlhbFN0YXRlLCBMT0dfUExBQ0VIT0xERVIpIDogdGhpcy5faW5pdGlhbFN0YXRlLFxuICAgICAgKTtcbiAgICB9XG4gICAgcm9vdC51c2VSZWRhY3RlZE1pcnJvcih0aGlzLnJlZGFjdGVkU3RvcmUpO1xuICB9XG5cbiAgLyoqIFByZXNlcnZlIHRoZSBjdXJyZW50IHJvb3RTdGFnZUNvbnRleHQgZm9yIHNuYXBzaG90cyBiZWZvcmUgY2hhbmdpbmcgaXQgZm9yIHJlc3VtZS4gKi9cbiAgcHJlc2VydmVTbmFwc2hvdFJvb3QoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9zbmFwc2hvdFJvb3QpIHtcbiAgICAgIHRoaXMuX3NuYXBzaG90Um9vdCA9IHRoaXMucm9vdFN0YWdlQ29udGV4dDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIGZyb3plbiwgZGV0YWNoZWQgZm9sZCBiYXNlIHNlcnZlZCBhcyB7QGxpbmsgUnVudGltZVNuYXBzaG90LmluaXRpYWxTdGF0ZX0uXG4gICAqIENvbXB1dGVkIG9uY2UgKHRoZSBiYXNlIG5ldmVyIGNoYW5nZXMgYWZ0ZXIgY29uc3RydWN0aW9uKSBhbmQgc2hhcmVkIOKAlFxuICAgKiBzYWZlIGJlY2F1c2UgaXQgaXMgZGVlcGx5IGZyb3plbiwgc28gbm8gaG9sZGVyIGNhbiBtdXRhdGUgaXQgb3IgcmVhY2ggdGhlXG4gICAqIGVuZ2luZSB0aHJvdWdoIGl0OyBhIGJhc2UgaG9sZGluZyBhIERhdGUsIE1hcCwgYnVmZmVyIOKApiAod2hhdCBmcmVlemluZ1xuICAgKiBjYW5ub3Qgc2VhbCkgaXMgc2VydmVkIGJ5IHRoZSBwdWJsaWMgc25hcHNob3QgYXMgYSBjb3B5IG9mIGl0cyBvcGVuIHBhdGhzXG4gICAqIChgcnVubmVyL3NuYXBzaG90LnRzIMK3IHNlcnZlZFNuYXBzaG90YCwgYGNhcHR1cmUvZnJlZXplLnRzIMK3IHNlcnZlUmVjb3JkYCxcbiAgICogOS40NC4yKS5cbiAgICovXG4gIHByaXZhdGUgZ2V0Rm9sZEJhc2UoKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGlmICghdGhpcy5fZm9sZEJhc2UpIHtcbiAgICAgIGNvbnN0IGJhc2UgPSB0aGlzLmV4ZWN1dGlvbkhpc3RvcnkuZ2V0SW5pdGlhbFN0YXRlKCk7XG4gICAgICB0aGlzLl9mb2xkQmFzZSA9IGZyZWV6ZVJlY29yZChiYXNlICYmIHR5cGVvZiBiYXNlID09PSAnb2JqZWN0JyA/IGJhc2UgOiB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9mb2xkQmFzZTtcbiAgfVxuXG4gIGdldFBpcGVsaW5lcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdsb2JhbFN0b3JlLmdldFN0YXRlKCk7XG4gICAgcmV0dXJuIHN0YXRlLnBpcGVsaW5lcyA/IE9iamVjdC5rZXlzKHN0YXRlLnBpcGVsaW5lcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgOiBbXTtcbiAgfVxuXG4gIHNldFJvb3RPYmplY3QocGF0aDogc3RyaW5nW10sIGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICAgIHRoaXMucm9vdFN0YWdlQ29udGV4dC5zZXRPYmplY3QocGF0aCwga2V5LCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBydW50aW1lIHNuYXBzaG90LlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucy5yZWRhY3QgIFdoZW4gYHRydWVgLCByZXR1cm5zIGBzaGFyZWRTdGF0ZWAgZnJvbSB0aGVcbiAgICogICBwYXJhbGxlbCByZWRhY3RlZCBtaXJyb3IgKGlmIG9uZSB3YXMgZW5hYmxlZCkuIFRoaXMgaXMgdGhlIHNhZmUgdmlld1xuICAgKiAgIGZvciBzaGFyaW5nIHRyYWNlcyBleHRlcm5hbGx5IOKAlCBwYXN0ZSBpbnRvIGEgdmlld2VyLCBzaGlwIHRvIHN1cHBvcnQsXG4gICAqICAgZXRjLiBXaGVuIHRoZSBtaXJyb3Igd2FzIG5ldmVyIGVuYWJsZWQsIGZhbGxzIGJhY2sgdG8gcmF3IGBnbG9iYWxTdG9yZWBcbiAgICogICBhbmQgYSBkZXYtbW9kZSB3YXJuaW5nIGlzIGVtaXR0ZWQgKHNpbGVudCBpbiBwcm9kdWN0aW9uKS5cbiAgICpcbiAgICogICBEZWZhdWx0IGBmYWxzZWAgcHJlc2VydmVzIHRoZSBydW50aW1lIHZpZXcg4oCUIG5lY2Vzc2FyeSBmb3IgcGF1c2UgL1xuICAgKiAgIHJlc3VtZSAocmVzdW1wdGlvbiBtdXN0IHJlcGxheSBhZ2FpbnN0IHRoZSByZWFsIHZhbHVlcywgbm90XG4gICAqICAgJ1tSRURBQ1RFRF0nKS5cbiAgICpcbiAgICogT3RoZXIgZmllbGRzIChgZXhlY3V0aW9uVHJlZWAsIGBjb21taXRMb2dgKSBhcmUgdGhlIHNhbWUgZWl0aGVyIHdheSDigJRcbiAgICogdGhlIGNvbW1pdCBsb2cgaXMgYWxyZWFkeSByZWRhY3RlZCBhdCB3cml0ZS10aW1lLCBhbmQgdGhlIGV4ZWN1dGlvblxuICAgKiB0cmVlIG9ubHkgY2FycmllcyBzdHJ1Y3R1cmFsIG1ldGFkYXRhLlxuICAgKlxuICAgKiBgaW5pdGlhbFN0YXRlYCAodGhlIGZvbGQgYmFzZSkgaXMgT01JVFRFRCB1bmRlciBgcmVkYWN0OiB0cnVlYC4gSXQgaXMgdGhlXG4gICAqIHJ1bidzIHJhdyBwcmUtcnVuIHNlZWQg4oCUIGBpbml0aWFsQ29udGV4dGAgbWVyZ2VkIHdpdGhcbiAgICogYGRlZmF1bHRWYWx1ZXNGb3JDb250ZXh0YCDigJQgYW5kIGl0IG5ldmVyIHBhc3NlZCB0aHJvdWdoIGEgcmVkYWN0aW9uXG4gICAqIHBvbGljeTogdGhlIHBvbGljeSBzY3J1YnMgV1JJVEVTIGF0IHRoZSBzY29wZSBmYWNhZGUsIGFuZCB0aGUgYmFzZSB3YXNcbiAgICogbmV2ZXIgd3JpdHRlbiBieSBhIHN0YWdlLiBTZXJ2aW5nIGl0IG9uIHRoZSByZWRhY3RlZCBzdXJmYWNlIHdvdWxkIGhhbmRcbiAgICogYmFjayB0aGUgb3JpZ2luYWwgdmFsdWUgb2YgYSBzZWVkZWQgc2VjcmV0IHRoYXQgYSBsYXRlciBjb21taXQgaGFkXG4gICAqIHNjcnViYmVkLiBBIGNvbnN1bWVyIGZvbGRpbmcgd2l0aG91dCBpdCBnZXRzIGBiYXNpczogJ2xvZy1vbmx5J2AgZnJvbVxuICAgKiBgc3RhdGVBdGAsIHdoaWNoIGlzIHRoZSBob25lc3Qgc2lnbmFsIHRoYXQgdGhlIGJhc2UgZGlkIG5vdCB0cmF2ZWwgd2l0aFxuICAgKiB0aGlzIGxvZyDigJQgYSBwYXJ0aWFsIGFuc3dlciB0aGF0IHNheXMgaXQgaXMgcGFydGlhbCwgbmV2ZXIgYSBzaWxlbnQgb25lLlxuICAgKlxuICAgKiBSZXR1cm5zIGBPbWl0PFJ1bnRpbWVTbmFwc2hvdCwgJ3J1bklkJz5gOiB0aGUgcnVudGltZSBpcyB0aGUgbWVtb3J5XG4gICAqIGNvbnRhaW5lciBhbmQgZG9lc24ndCBrbm93IHdoaWNoIHJ1biBpdCBzZXJ2ZXMg4oCUIGBydW5JZGAgaXMgcGVyLXJ1blxuICAgKiBleGVjdXRvciBzdGF0ZSwgc3RhbXBlZCBieSBgRmxvd2NoYXJ0VHJhdmVyc2VyLmdldFNuYXBzaG90KClgICh3aGljaFxuICAgKiBvd25zIHRoZSBydW4ncyBpZCBhbmQgYWxyZWFkeSBzdGFtcHMgaXQgb24gZXZlcnkgZXZlbnQpLiBTdWJmbG93cydcbiAgICogbmVzdGVkIHJ1bnRpbWVzIGRlbGliZXJhdGVseSBoYXZlIE5PIHJ1bklkIG9mIHRoZWlyIG93biAoYSBzdWJmbG93IGlzXG4gICAqIHBhcnQgb2YgdGhlIHBhcmVudCdzIGxvZ2ljYWwgcnVuKS5cbiAgICovXG4gIGdldFNuYXBzaG90KG9wdGlvbnM/OiB7IHJlZGFjdD86IGJvb2xlYW4gfSk6IE9taXQ8UnVudGltZVNuYXBzaG90LCAncnVuSWQnPiB7XG4gICAgY29uc3Qgc25hcHNob3RSb290ID0gdGhpcy5fc25hcHNob3RSb290ID8/IHRoaXMucm9vdFN0YWdlQ29udGV4dDtcbiAgICBjb25zdCB1c2VSZWRhY3RlZCA9IG9wdGlvbnM/LnJlZGFjdCA9PT0gdHJ1ZSAmJiB0aGlzLnJlZGFjdGVkU3RvcmUgIT09IHVuZGVmaW5lZDtcbiAgICByZXR1cm4ge1xuICAgICAgc2hhcmVkU3RhdGU6IHVzZVJlZGFjdGVkID8gdGhpcy5yZWRhY3RlZFN0b3JlIS5nZXRTdGF0ZSgpIDogdGhpcy5nbG9iYWxTdG9yZS5nZXRTdGF0ZSgpLFxuICAgICAgZXhlY3V0aW9uVHJlZTogc25hcHNob3RSb290LmdldFNuYXBzaG90KCksXG4gICAgICAvLyBSRURBQ1RJT046IHRoZSBmb2xkIGJhc2UgaXMgdGhlIHJhdyBwcmUtcnVuIHNlZWQgYW5kIG5vIHBvbGljeSBldmVyXG4gICAgICAvLyB0b3VjaGVkIGl0IChwb2xpY2llcyBzY3J1YiB3cml0ZXM7IG5vdGhpbmcgd3JvdGUgdGhlIGJhc2UpLiBPbWl0IGl0XG4gICAgICAvLyByYXRoZXIgdGhhbiBsZWFrIGl0IOKAlCBgc3RhdGVBdGAgZGVncmFkZXMgdG8gYGJhc2lzOiAnbG9nLW9ubHknYC5cbiAgICAgIC4uLih1c2VSZWRhY3RlZCA/IHt9IDogeyBpbml0aWFsU3RhdGU6IHRoaXMuZ2V0Rm9sZEJhc2UoKSB9KSxcbiAgICAgIC8vIERFVEFDSEVEOiB0aGUgZW5naW5lIGtlZXBzIGl0cyBsaXZlIEV2ZW50TG9nOyB0aGUgc25hcHNob3QgZ2V0cyBhXG4gICAgICAvLyBmcm96ZW4gYXJyYXkgb2YgaXRzIG93biAoYHJlY29yZGVkKClgIGJ1aWxkcyBhIG5ldyBvbmUpLiBTZXJ2aW5nIHRoZVxuICAgICAgLy8gaW50ZXJuYWwgYXJyYXkgYWxpYXNlZCBpdCwgc28gYSBzbmFwc2hvdCB0YWtlbiBtaWQtcnVuIGtlcHQgZ3Jvd2luZ1xuICAgICAgLy8gdW5kZXIgaXRzIGhvbGRlciBhbmQgYSBjb25zdW1lciBjb3VsZCBzcGxpY2UgdGhlIGVuZ2luZSdzIG93biBoaXN0b3J5LlxuICAgICAgLy8gVGhlIGJ1bmRsZXMgaW4gaXQgYXJlIHRoZSBsb2cncyBvd24sIGZyb3plbiBhdCBgRXZlbnRMb2cgwrcgcmVjb3JkYFxuICAgICAgLy8gKEYzKS4gVGhlIHB1YmxpYyBzbmFwc2hvdCBzZXJ2ZXMgdGhlbSAoYHJ1bm5lci9zbmFwc2hvdC50cyDCt1xuICAgICAgLy8gc2VydmVkU25hcHNob3RgLCA5LjQ0LjIpOyB0aGlzIG9uZSBpcyBhbHNvIHRoZSBlbmdpbmUncyBvd24g4oCUIGFcbiAgICAgIC8vIHN1YmZsb3cgbW91bnQgdGFrZXMgaXQgb25jZSBwZXIgbW91bnQg4oCUIHNvIHRoZSBydW4gcGF0aCBzZXJ2ZXMgbm90aGluZy5cbiAgICAgIGNvbW1pdExvZzogT2JqZWN0LmZyZWV6ZSh0aGlzLmV4ZWN1dGlvbkhpc3RvcnkucmVjb3JkZWQoKSkgYXMgQ29tbWl0QnVuZGxlW10sXG4gICAgICAuLi4odGhpcy5leGVjdXRpb25IaXN0b3J5LmFkZHJlc3MgPT09IHVuZGVmaW5lZCA/IHt9IDogeyBsb2dBZGRyZXNzOiB0aGlzLmV4ZWN1dGlvbkhpc3RvcnkuYWRkcmVzcyB9KSxcbiAgICAgIGNvbW1pdFZhbHVlczogdGhpcy5wb2xpY3kuY29tbWl0VmFsdWVzLFxuICAgICAgd3JpdGVQcm92ZW5hbmNlOiB0aGlzLnBvbGljeS53cml0ZVByb3ZlbmFuY2UsXG4gICAgfTtcbiAgfVxufVxuIl19
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXhlY3V0aW9uUnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvcnVubmVyL0V4ZWN1dGlvblJ1bnRpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7R0FVRztBQUVILE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFHakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFtSHpELE1BQU0sT0FBTyxnQkFBZ0I7SUFDcEIsV0FBVyxDQUFlO0lBQ2pDOzs7Ozs7OztPQVFHO0lBQ0ksYUFBYSxDQUFnQjtJQUM3QixnQkFBZ0IsQ0FBZTtJQUMvQixnQkFBZ0IsQ0FBVztJQUNsQyxvRkFBb0Y7SUFDNUUsYUFBYSxDQUFnQjtJQUM3QixhQUFhLENBQVU7SUFDdkIsY0FBYyxDQUFVO0lBQ2hDO21GQUMrRTtJQUN2RSxNQUFNLENBQVk7SUFFMUIsNEVBQTRFO0lBQ3BFLFNBQVMsQ0FBMkI7SUFFNUM7Ozs7OztPQU1HO0lBQ0gsWUFDRSxRQUFnQixFQUNoQixNQUFjLEVBQ2QsYUFBdUIsRUFDdkIsWUFBc0IsRUFDdEIsU0FBb0Isa0JBQWtCO1FBRXRDLElBQUksQ0FBQyxhQUFhLEdBQUcsWUFBWSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxjQUFjLEdBQUcsYUFBYSxDQUFDO1FBQ3BDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxZQUFZLENBQUMsYUFBYSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ2pFLHlFQUF5RTtRQUN6RSwwRUFBMEU7UUFDMUUsMkVBQTJFO1FBQzNFLDBFQUEwRTtRQUMxRSx3RUFBd0U7UUFDeEUsOERBQThEO1FBQzlELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsT0FBTyxDQUFDLElBQVksRUFBRSxFQUFVO1FBQzlCLE1BQU0sSUFBSSxHQUFHLElBQUksWUFBWSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3pGLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxTQUFTLENBQUMsTUFBaUI7UUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNLLGFBQWEsQ0FBQyxJQUFrQjtRQUN0QyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ3hCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1lBQ25DLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxZQUFZLENBQ25DLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUNuRixJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FDbEYsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCx5RkFBeUY7SUFDekYsb0JBQW9CO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDN0MsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNLLFdBQVc7UUFDakIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNwQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDckQsSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUMsSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQTRCLENBQUM7UUFDekcsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQsWUFBWTtRQUNWLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDMUMsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFvQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUN4RixDQUFDO0lBRUQsYUFBYSxDQUFDLElBQWMsRUFBRSxHQUFXLEVBQUUsS0FBYztRQUN2RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FpQ0c7SUFDSCxXQUFXLENBQUMsT0FBOEI7UUFDeEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDakUsTUFBTSxXQUFXLEdBQUcsT0FBTyxFQUFFLE1BQU0sS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxTQUFTLENBQUM7UUFDakYsT0FBTztZQUNMLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFjLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFO1lBQ3ZGLGFBQWEsRUFBRSxZQUFZLENBQUMsV0FBVyxFQUFFO1lBQ3pDLHNFQUFzRTtZQUN0RSxzRUFBc0U7WUFDdEUsbUVBQW1FO1lBQ25FLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDNUQsb0VBQW9FO1lBQ3BFLHVFQUF1RTtZQUN2RSxzRUFBc0U7WUFDdEUseUVBQXlFO1lBQ3pFLHFFQUFxRTtZQUNyRSwrREFBK0Q7WUFDL0Qsa0VBQWtFO1lBQ2xFLDBFQUEwRTtZQUMxRSxTQUFTLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLENBQW1CO1lBQzVFLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDckcsWUFBWSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWTtZQUN0QyxlQUFlLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxlQUFlO1NBQzdDLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEV4ZWN1dGlvblJ1bnRpbWUg4oCUIFRoZSBydW50aW1lIGVudmlyb25tZW50IGZvciBvbmUgZmxvd2NoYXJ0IGV4ZWN1dGlvbi5cbiAqXG4gKiBXaXJlcyB1cCB0aGUgdGhyZWUgbWVtb3J5IHByaW1pdGl2ZXMgaW50byBhIHNpbmdsZSBjb250YWluZXI6XG4gKiAgIC0gU2hhcmVkTWVtb3J5ICh0aGUgaGVhcCDigJQgc2hhcmVkIHN0YXRlIGFjcm9zcyBhbGwgc3RhZ2VzKVxuICogICAtIFN0YWdlQ29udGV4dCAgKHRoZSBjYWxsIHN0YWNrIOKAlCBwZXItc3RhZ2UgZXhlY3V0aW9uIHRyZWUpXG4gKiAgIC0gRXZlbnRMb2cgICAgICAodGhlIHRyYW5zYWN0aW9uIGxvZyDigJQgY29tbWl0IGhpc3RvcnkgZm9yIHJlcGxheSlcbiAqXG4gKiBUaGUgZW5naW5lIChGbG93Y2hhcnRUcmF2ZXJzZXIpIHJlY2VpdmVzIHRoaXMgYXMgaXRzIHJ1bnRpbWUgcGFyYW1ldGVyLlxuICogQWZ0ZXIgZXhlY3V0aW9uLCBjb25zdW1lcnMgcXVlcnkgaXQgZm9yIHRoZSBmdWxsIGV4ZWN1dGlvbiBzdGF0ZS5cbiAqL1xuXG5pbXBvcnQgeyBmcmVlemVSZWNvcmQgfSBmcm9tICcuLi9jYXB0dXJlL2ZyZWV6ZS5qcyc7XG5pbXBvcnQgeyBFdmVudExvZyB9IGZyb20gJy4uL21lbW9yeS9FdmVudExvZy5qcyc7XG5pbXBvcnQgdHlwZSB7IExvZ0FkZHJlc3MgfSBmcm9tICcuLi9tZW1vcnkvZXZlbnRQb3NpdGlvbi5qcyc7XG5pbXBvcnQgdHlwZSB7IFN0YWdlU25hcHNob3QgfSBmcm9tICcuLi9tZW1vcnkvZnJhbWVUeXBlcy5qcyc7XG5pbXBvcnQgeyBMT0dfUExBQ0VIT0xERVIgfSBmcm9tICcuLi9tZW1vcnkvcGxhY2Vob2xkZXJzLmpzJztcbmltcG9ydCB0eXBlIHsgUnVuUG9saWN5IH0gZnJvbSAnLi4vbWVtb3J5L3J1blBvbGljeS5qcyc7XG5pbXBvcnQgeyBERUZBVUxUX1JVTl9QT0xJQ1kgfSBmcm9tICcuLi9tZW1vcnkvcnVuUG9saWN5LmpzJztcbmltcG9ydCB7IFNoYXJlZE1lbW9yeSB9IGZyb20gJy4uL21lbW9yeS9TaGFyZWRNZW1vcnkuanMnO1xuaW1wb3J0IHsgU3RhZ2VDb250ZXh0IH0gZnJvbSAnLi4vbWVtb3J5L1N0YWdlQ29udGV4dC5qcyc7XG5pbXBvcnQgdHlwZSB7IENvbW1pdEJ1bmRsZSwgQ29tbWl0VmFsdWVzTW9kZSwgV3JpdGVQcm92ZW5hbmNlTW9kZSB9IGZyb20gJy4uL21lbW9yeS90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IE9ic2VydmVyU3RhdHMgfSBmcm9tICcuL0RlZmVycmVkT2JzZXJ2ZXJUaWVyLmpzJztcblxuLyoqIFNuYXBzaG90IG9mIGEgc2luZ2xlIHJlY29yZGVyJ3MgY29sbGVjdGVkIGRhdGEuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZGVyU25hcHNob3Qge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBTY29wZVJlY29yZGVyIHR5cGUgYW5kIHBhdHRlcm4gZGVzY3JpcHRpb24gKGUuZy4sIFwiVHJhbnNsYXRvciAoS2V5ZWRTdG9yZSkg4oCUIHBlci1zdGVwIHRva2VuIHVzYWdlXCIpLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqIFByZWZlcnJlZCByZWFkLXRpbWUgb3BlcmF0aW9uIOKAlCBoaW50cyB0aGUgVUkgYWJvdXQgd2hpY2ggdmlldyB0byBzaG93IHByb21pbmVudGx5LiAqL1xuICBwcmVmZXJyZWRPcGVyYXRpb24/OiAndHJhbnNsYXRlJyB8ICdhY2N1bXVsYXRlJyB8ICdhZ2dyZWdhdGUnO1xuICBkYXRhOiB1bmtub3duO1xuICAvKipcbiAgICogU21hbGwgbWFjaGluZS1yZWFkYWJsZSBmYWN0cyBhYm91dCB0aGUgQlVORExFIOKAlCBob3cgaXQgd2FzIHByb2R1Y2VkLFxuICAgKiB3aGljaCBwcm9qZWN0aW9uIG9mIHRoZSByZWNvcmRlcidzIGRhdGEgaXQgaXMsIHdoYXQgaXQgZGVsaWJlcmF0ZWx5XG4gICAqIGxlZnQgb3V0LiBXaGF0ZXZlciB0aGUgcmVjb3JkZXIncyBgdG9TbmFwc2hvdCgpYCBwdXQgaGVyZSwgY29waWVkXG4gICAqIHRocm91Z2ggdW5jaGFuZ2VkLlxuICAgKlxuICAgKiBUaGUgc3BsaXQgd2l0aCBgZGVzY3JpcHRpb25gOiBgZGVzY3JpcHRpb25gIGlzIHRoZSBzZW50ZW5jZSBhIGh1bWFuXG4gICAqIHJlYWRzOyBgbWV0YWAgaXMgd2hhdCBhbiBvZmZsaW5lIGNvbnN1bWVyIEJSQU5DSEVTIG9uLiBBIHJlY29yZGVyIHdpdGhcbiAgICogYSBcImZ1bGxcIiBhbmQgYSBcImxlYW5cIiBidW5kbGUgc2hhcGUgdGhhdCBzYXlzIHNvIG9ubHkgaW4gaXRzXG4gICAqIGRlc2NyaXB0aW9uIGZvcmNlcyBldmVyeSByZWFkZXIgdG8gc3RyaW5nLW1hdGNoIHByb3NlIOKAlCBhbmQgYSByZWFkZXJcbiAgICogdGhhdCBkb2Vzbid0IHJlbmRlcnMgYW4gZW1wdHkgcGFuZWwgaW5zdGVhZCBvZiBzYXlpbmcgXCJ0aGlzIHJlY29yZGluZ1xuICAgKiBjYXJyaWVzIHN0cnVjdHVyZSBvbmx5XCIuXG4gICAqXG4gICAqIE5vdCBpbnRlcnByZXRlZCBieSB0aGUgZW5naW5lLCBzbyBrZXlzIGFyZSB0aGUgcmVjb3JkZXIncyB0byBjaG9vc2U7XG4gICAqIGtlZXAgdGhlIHZhbHVlcyBKU09OLXNhZmUsIHNpbmNlIHRoaXMgcmlkZXMgdGhlIHNuYXBzaG90IG91dCB0byBkaXNrLlxuICAgKi9cbiAgbWV0YT86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pjtcbn1cblxuZXhwb3J0IHR5cGUgUnVudGltZVNuYXBzaG90ID0ge1xuICAvKipcbiAgICogVGhlIHJ1biB0aGlzIHNuYXBzaG90IGJlbG9uZ3MgdG8g4oCUIHRoZSBzYW1lIGBydW5JZGAgc3RhbXBlZCBvbiBldmVyeVxuICAgKiBgVHJhdmVyc2FsQ29udGV4dGAgKGFuZCB0aHVzIGV2ZXJ5IHJlY29yZGVyIGV2ZW50KSBvZiB0aGUgcnVuLCBzbyBhXG4gICAqIHNuYXBzaG90IGNhbiBiZSBqb2luZWQgYWdhaW5zdCBhbiBldmVudCBzdHJlYW0gb3IgYW4gZXh0ZXJuYWxcbiAgICogY29ycmVsYXRpb24gdGFibGUuIFJlYWQtb25seSBieSBjb250cmFjdDogZ2VuZXJhdGVkIGJ5IHRoZSBleGVjdXRvclxuICAgKiAoYHJ1bm5lci9ydW5JZC50c2ApLCBuZXZlciBkZXJpdmVkIGZyb20gc25hcHNob3QgY29udGVudHMuXG4gICAqXG4gICAqIExpZmVjeWNsZSAobWF0Y2hlcyB0aGUgZXZlbnQgbW9kZWwpOiBmcmVzaCBwZXIgYHJ1bigpYCBBTkQgcGVyXG4gICAqIGByZXN1bWUoKWAg4oCUIHJlc3VtZSBpcyBsb2dpY2FsbHkgYSBkaXN0aW5jdCBydW4sIHNvIGEgcG9zdC1yZXN1bWVcbiAgICogc25hcHNob3QgY2FycmllcyBhIERJRkZFUkVOVCBydW5JZCB0aGFuIHRoZSBwYXVzZWQgcnVuJ3Mgc25hcHNob3QuXG4gICAqL1xuICByZWFkb25seSBydW5JZDogc3RyaW5nO1xuICBzaGFyZWRTdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIGV4ZWN1dGlvblRyZWU6IFN0YWdlU25hcHNob3Q7XG4gIC8qKlxuICAgKiBUaGUgY29tbWl0IGxvZydzIGZvbGQgQkFTRSDigJQgdGhlIHJ1bidzIHN0YXRlIGJlZm9yZSBpdHMgZmlyc3QgY29tbWl0XG4gICAqIChgaW5pdGlhbENvbnRleHRgIG1lcmdlZCB3aXRoIGBkZWZhdWx0VmFsdWVzRm9yQ29udGV4dGA7IG9uIGEgcmVzdW1lLCB0aGVcbiAgICogY2hlY2twb2ludCdzIHN0YXRlKS4gRGVlcGx5IGZyb3plbiBhbmQgZnVsbHkgZGV0YWNoZWQgZnJvbSB0aGUgZW5naW5lLlxuICAgKlxuICAgKiBDb21taXQgYnVuZGxlcyBhcmUgRElGRlMsIHNvIHRoZSBsb2cgYWxvbmUgY2Fubm90IHJlYnVpbGQgYSB2YWx1ZSB0aGF0XG4gICAqIHdhcyBzZWVkZWQgYmVmb3JlIHRoZSBydW4gYW5kIG9ubHkgZXZlciBtZXJnZWQgYWZ0ZXJ3YXJkcy4gU2hpcHBpbmcgdGhlXG4gICAqIGJhc2UgV0lUSCB0aGUgbG9nIGlzIHdoYXQgbWFrZXMgYW4gb2ZmbGluZSBmb2xkIOKAlCBgc3RhdGVBdChzbmFwc2hvdCwgaSlgXG4gICAqIGZyb20gYGZvb3RwcmludGpzL3RyYWNlYCDigJQgcmVwcm9kdWNlIHRoZSBzdGF0ZSBhIHN0YWdlIGFjdHVhbGx5IHNhdy5cbiAgICpcbiAgICogT1BUSU9OQUwgQlkgVFlQRSwgYW5kIGFic2VudCBpbiBleGFjdGx5IHR3byBjYXNlcy4gQSBwbGFpbiBgZ2V0U25hcHNob3QoKWBcbiAgICogYWx3YXlzIGNhcnJpZXMgaXQsIHNvIGEgbGl2ZSBmb2xkIHJlcG9ydHMgYGJhc2lzOiAnaW5pdGlhbCtsb2cnYC4gVW5kZXJcbiAgICogYGdldFNuYXBzaG90KHsgcmVkYWN0OiB0cnVlIH0pYCBpdCBpcyBPTUlUVEVEIOKAlCB0aGUgYmFzZSBpcyB0aGUgcmF3IHByZS1ydW5cbiAgICogc2VlZCBhbmQgdGhlIHJlZGFjdGlvbiBwb2xpY3kgaXMgbm90IHBsdW1iZWQgaW50byB0aGUgZm9sZCDigJQgc28gYSBmb2xkIG9mXG4gICAqIGEgcmVkYWN0ZWQgc25hcHNob3QgZGVncmFkZXMgaG9uZXN0bHkgdG8gYGJhc2lzOiAnbG9nLW9ubHknYC4gQW5kIGl0IGlzXG4gICAqIGRlY2xhcmVkIG9wdGlvbmFsIHNvIHRoYXQgY29kZSB3cml0dGVuIGFnYWluc3QgOS4xNi54IOKAlCBhIHRlc3QgZml4dHVyZSBvclxuICAgKiBhIFVJIG1vY2sgdGhhdCBDT05TVFJVQ1RTIGEgYFJ1bnRpbWVTbmFwc2hvdGAgbGl0ZXJhbCDigJQgc3RpbGwgY29tcGlsZXMuXG4gICAqIGBzdGF0ZUF0YCBoYW5kbGVzIGFic2VuY2UgYnkgc2F5aW5nIHNvLCBuZXZlciBieSBmb2xkaW5nIGEgbGllLlxuICAgKi9cbiAgcmVhZG9ubHkgaW5pdGlhbFN0YXRlPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKlxuICAgKiBUaGUgcnVuJ3MgY29tbWl0IGJ1bmRsZXMsIG9uZSBwZXIgZXhlY3V0ZWQgc3RhZ2UsIGluIGV4ZWN1dGlvbiBvcmRlciDigJRcbiAgICogYSBERVRBQ0hFRCwgZnJvemVuIGNvcHkgb2YgdGhlIGVuZ2luZSdzIGxpdmUgbG9nIChhIHNuYXBzaG90IGlzIGEgZm9sZFxuICAgKiByZXN1bHQ6IGl0IG11c3Qgbm90IGtlZXAgY2hhbmdpbmcgdW5kZXIgdGhlIGNvbnN1bWVyIHRoYXQgaG9sZHMgaXQpLlxuICAgKiBUaGUgYnVuZGxlcyBpbnNpZGUgYXJlIHRoZSBlbmdpbmUncyBvd24gb2JqZWN0cywgaW1tdXRhYmxlIGFmdGVyIHJlY29yZC5cbiAgICovXG4gIGNvbW1pdExvZzogQ29tbWl0QnVuZGxlW107XG4gIC8qKiBJZGVudGl0eSBvZiB0aGlzIGxvZywgc3RhYmxlIGFjcm9zcyBzYW1lLWV4ZWN1dG9yIHJlc3VtZS4gQWJzZW50IGJlZm9yZSBiaW5kaW5nIG9yIGluIG9sZGVyIHNvdXJjZXMuICovXG4gIHJlYWRvbmx5IGxvZ0FkZHJlc3M/OiBMb2dBZGRyZXNzO1xuICAvKipcbiAgICogRW5jb2RpbmcgZGlzY3JpbWluYW50IGZvciBgY29tbWl0TG9nYCAoIzEzYy1CKTogYCdmdWxsJ2Ag4oCUIGV2ZXJ5IGBzZXRgXG4gICAqIGJ1bmRsZSBzdG9yZXMgdGhlIGZ1bGwgZmluYWwgdmFsdWUgKGhpc3RvcmljYWwpOyBgJ2RlbHRhJ2Ag4oCUIGJ1bmRsZXMgbWF5XG4gICAqIGNhcnJ5IGBhcHBlbmRgL2BkZWxldGVgIHRyYWNlIHZlcmJzIHdpdGggdmVyYi1xdWFsaWZpZWQgYG92ZXJ3cml0ZWBcbiAgICogcGF5bG9hZHMgKHRhaWxzKS4gT2ZmbGluZSB0b29saW5nIGtleXMgb24gdGhpcyBmaWVsZDsgYSBidW5kbGUgc3RyZWFtXG4gICAqIHdpdGhvdXQgY29udGV4dCByZW1haW5zIHNlbGYtZGVzY3JpYmluZyB2aWEgdGhlIHZlcmJzIHRoZW1zZWx2ZXMuXG4gICAqL1xuICBjb21taXRWYWx1ZXM6IENvbW1pdFZhbHVlc01vZGU7XG4gIC8qKiBQZXItd3JpdGUgcmVhZC1wcm92ZW5hbmNlIGRpYWwgKCNQMSkgdGhlIHJ1biBleGVjdXRlZCB1bmRlciDigJQgdGhlXG4gICAqICBvZmZsaW5lLXRvb2xpbmcgZGlzY3JpbWluYW50IGZvciBgVHJhY2VFbnRyeS5yZWFkS2V5c2AgYXZhaWxhYmlsaXR5LiAqL1xuICB3cml0ZVByb3ZlbmFuY2U6IFdyaXRlUHJvdmVuYW5jZU1vZGU7XG4gIC8qKlxuICAgKiBQZXItc3ViZmxvdyBleGVjdXRpb24gcmVzdWx0cywgRFVBTC1LRVlFRCAoZGVzaWduOiBkb2NzL2Rlc2lnbi9zdWJmbG93LWNvbW1pdC12aXNpYmlsaXR5Lm1kKTpcbiAgICogICAtIGJ5IHN1YmZsb3cgUEFUSCAoYHN1YmZsb3dJZGAsIGUuZy4gYCdzZi1wYXknYCkg4oaSIHRoZSBMQVNUIGl0ZXJhdGlvbiAoYmFjay1jb21wYXQpOyB0aGlzXG4gICAqICAgICBpcyB3aGF0IGBnZXRTdWJ0cmVlU25hcHNob3QocGF0aClgIGFuZCBgbGlzdFN1YmZsb3dQYXRocygpYCByZXNvbHZlLlxuICAgKiAgIC0gYnkgcGVyLWV4ZWN1dGlvbiBtb3VudCBgcnVudGltZVN0YWdlSWRgIChlLmcuIGAnc2YtcGF5IzUnYCkg4oaSIFRIQVQgaXRlcmF0aW9uJ3MgcmVzdWx0LCBzb1xuICAgKiAgICAgYSBMT09QSU5HIHN1YmZsb3cgcmV0YWlucyBFVkVSWSBpdGVyYXRpb24gKG5vdCBqdXN0IHRoZSBsYXN0KS4gTG9vayB1cCBhIHNwZWNpZmljXG4gICAqICAgICBpdGVyYXRpb24gYXMgYHN1YmZsb3dSZXN1bHRzW25vZGUucnVudGltZVN0YWdlSWRdID8/IHN1YmZsb3dSZXN1bHRzW25vZGUuc3ViZmxvd0lkXWAuXG4gICAqIEJvdGgga2V5cyBwb2ludCBhdCB0aGUgc2FtZSBvYmplY3QgZm9yIGEgc2luZ2xlIG1vdW50OyBpdGVyYXRlIHdpdGggY2FyZSAoY291bnQgdmlhIHRoZVxuICAgKiBwYXRoIGtleXMg4oCUIHRob3NlIHdpdGhvdXQgYCcjJ2ApLiBUaGUgcGF1c2UgY2hlY2twb2ludCBjYXJyaWVzIG9ubHkgdGhlIHBhdGgga2V5cywgbGVhbi5cbiAgICpcbiAgICogVW5kZXIgYGdldFNuYXBzaG90KHsgcmVkYWN0OiB0cnVlIH0pYCBlYWNoIGVudHJ5J3MgYHRyZWVDb250ZXh0Lmdsb2JhbENvbnRleHRgIGlzIHRoYXRcbiAgICogc3ViZmxvdydzIE9XTiByZWRhY3RlZCBtaXJyb3IgKDkuMjAuMCkg4oCUIHRoZSBmb2xkIG9mIGl0cyBzY3J1YmJlZCBgaGlzdG9yeWAg4oCUIHNlcnZlZCBhc1xuICAgKiBvbmUgc3Vic3RpdHV0ZWQgb2JqZWN0IHBlciBtb3VudCAoYm90aCBrZXlzIHN0aWxsIGFncmVlKSDigJQgdGhlIHdyYXBwZXIgaXMgZnJlc2ggcGVyXG4gICAqIGBnZXRTbmFwc2hvdGAgY2FsbCwgdGhlIGBnbG9iYWxDb250ZXh0YCBpbnNpZGUgaXQgaXMgdGhlIHN0YWJsZSBtaXJyb3I7IHBsYWluLCBpdCBpcyB0aGUgc3ViZmxvdydzXG4gICAqIGxpdmUgaGVhcC4gV2l0aG91dCBhIHBvbGljeSB0aGVyZSBpcyBubyBtaXJyb3IgYW5kIHRoZSB0d28gdmlld3MgYXJlIHRoZSBzYW1lIG9iamVjdHMuXG4gICAqL1xuICBzdWJmbG93UmVzdWx0cz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvKiogU25hcHNob3QgZGF0YSBmcm9tIHJlY29yZGVycyB0aGF0IGltcGxlbWVudCB0b1NuYXBzaG90KCkuICovXG4gIHJlY29yZGVycz86IFJlY29yZGVyU25hcHNob3RbXTtcbiAgLyoqXG4gICAqIERlZmVycmVkLW9ic2VydmVyIGFjY291bnRpbmcgKFJGQy0wMDEgQmxvY2sgOSkg4oCUIHF1ZXVlIGRlcHRoLCBkcm9wcyxcbiAgICogZmx1c2gvYnVkZ2V0IGNvdW50ZXJzLCBwZXItbGlzdGVuZXIgdGltZSBhdHRyaWJ1dGlvbiwgYW5kIHRoZVxuICAgKiB0ZXJtaW5hbC1mbHVzaCBzdHJhbmRpbmcgY291bnQuIEFCU0VOVCB1bmxlc3MgYSByZWNvcmRlciB3YXMgYXR0YWNoZWRcbiAgICogd2l0aCBgeyBkZWxpdmVyeTogJ2RlZmVycmVkJyB9YCBvbiB0aGlzIGV4ZWN1dG9yICh6ZXJvLWNvc3QgZGlzY2lwbGluZSkuXG4gICAqL1xuICBvYnNlcnZlclN0YXRzPzogT2JzZXJ2ZXJTdGF0cztcbn07XG5cbmV4cG9ydCBjbGFzcyBFeGVjdXRpb25SdW50aW1lIHtcbiAgcHVibGljIGdsb2JhbFN0b3JlOiBTaGFyZWRNZW1vcnk7XG4gIC8qKlxuICAgKiBQYXJhbGxlbCByZWRhY3RlZCBtaXJyb3Igb2YgYGdsb2JhbFN0b3JlYC4gUG9wdWxhdGVkIGJ5IGV2ZXJ5IGNvbW1pdCB0aGF0XG4gICAqIHN0YWdlZCBhIHdyaXRlIChgbWVtb3J5L3JlY29yZENvbW1pdC50cyDCtyByZWNvcmRDb21taXRgKSwgd2l0aCB0aGUgYWxyZWFkeS1jb21wdXRlZCByZWRhY3RlZCBwYXRjaGVzLlxuICAgKiBPbmx5IGV4aXN0cyB3aGVuIHRoZSBydW4ncyBwb2xpY3kga2VlcHMgYSBtaXJyb3IgKGBSdW5Qb2xpY3kubWlycm9yYCDigJRcbiAgICogYEZsb3dDaGFydEV4ZWN1dG9yYCBzZXRzIGl0IHdoZW4gYSBgUmVkYWN0aW9uUG9saWN5YCBpcyBjb25maWd1cmVkKS5cbiAgICogT3RoZXJ3aXNlIHVuZGVmaW5lZCBhbmQgemVybyBjb3N0LlxuICAgKlxuICAgKiBSZWFkIHZpYSBgZ2V0U25hcHNob3QoeyByZWRhY3Q6IHRydWUgfSlgLlxuICAgKi9cbiAgcHVibGljIHJlZGFjdGVkU3RvcmU/OiBTaGFyZWRNZW1vcnk7XG4gIHB1YmxpYyByb290U3RhZ2VDb250ZXh0OiBTdGFnZUNvbnRleHQ7XG4gIHB1YmxpYyBleGVjdXRpb25IaXN0b3J5OiBFdmVudExvZztcbiAgLyoqIE9yaWdpbmFsIHJvb3QgZm9yIGdldFNuYXBzaG90KCkg4oCUIHNldCBiZWZvcmUgcmVzdW1lIGNoYW5nZXMgcm9vdFN0YWdlQ29udGV4dC4gKi9cbiAgcHJpdmF0ZSBfc25hcHNob3RSb290PzogU3RhZ2VDb250ZXh0O1xuICBwcml2YXRlIF9pbml0aWFsU3RhdGU6IHVua25vd247XG4gIHByaXZhdGUgX2RlZmF1bHRWYWx1ZXM6IHVua25vd247XG4gIC8qKiBUaGUgcnVuJ3MgcG9saWN5IChgbWVtb3J5L3J1blBvbGljeS50c2ApIOKAlCBpbnN0YWxsZWQgb24gdGhlIHJvb3QgZnJhbWU7XG4gICAqICBpdHMgYGNvbW1pdFZhbHVlc2AgYW5kIGB3cml0ZVByb3ZlbmFuY2VgIGFyZSB0aGUgc25hcHNob3QgZGlzY3JpbWluYW50cy4gKi9cbiAgcHJpdmF0ZSBwb2xpY3k6IFJ1blBvbGljeTtcblxuICAvKiogTWVtb2l6ZWQgZnJvemVuIGZvbGQgYmFzZSDigJQgc2VlIHtAbGluayBSdW50aW1lU25hcHNob3QuaW5pdGlhbFN0YXRlfS4gKi9cbiAgcHJpdmF0ZSBfZm9sZEJhc2U/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAvKipcbiAgICogQHBhcmFtIHBvbGljeSBUaGUgcnVuJ3MgcG9saWN5IChgcnVuUG9saWN5LnRzYCwgRjUpIOKAlCB0aGUgZm91ciBkaWFscywgdGhlXG4gICAqICAgcmVkYWN0aW9uIHJ1bGUsIHRoZSBtaXJyb3IgZmxhZy4gSW5zdGFsbGVkIG9uIHRoZSByb290IGZyYW1lIGhlcmUsIHNvXG4gICAqICAgdGhlIEZJUlNUIGNvbW1pdCAoYSBzdWJmbG93J3Mgc2VlZCwgYGhpc3RvcnlbMF1gKSBhbHJlYWR5IHJ1bnMgdW5kZXIgaXQ7XG4gICAqICAgZXZlcnkgZnJhbWUgYWZ0ZXIgaW5oZXJpdHMgdGhlIHNhbWUgcmVmZXJlbmNlLiBEZWZhdWx0OiBldmVyeSBkaWFsIGF0XG4gICAqICAgaXRzIGRlZmF1bHQsIG5vIHJ1bGUsIG5vIG1pcnJvci5cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHJvb3ROYW1lOiBzdHJpbmcsXG4gICAgcm9vdElkOiBzdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlcz86IHVua25vd24sXG4gICAgaW5pdGlhbFN0YXRlPzogdW5rbm93bixcbiAgICBwb2xpY3k6IFJ1blBvbGljeSA9IERFRkFVTFRfUlVOX1BPTElDWSxcbiAgKSB7XG4gICAgdGhpcy5faW5pdGlhbFN0YXRlID0gaW5pdGlhbFN0YXRlO1xuICAgIHRoaXMuX2RlZmF1bHRWYWx1ZXMgPSBkZWZhdWx0VmFsdWVzO1xuICAgIHRoaXMuZ2xvYmFsU3RvcmUgPSBuZXcgU2hhcmVkTWVtb3J5KGRlZmF1bHRWYWx1ZXMsIGluaXRpYWxTdGF0ZSk7XG4gICAgLy8gVGhlIGV2ZW50IGxvZydzIGZvbGQgYmFzZSBtdXN0IGJlIHRoZSBTQU1FIHN0YXRlIHRoZSBzdG9yZSBzdGFydHMgZnJvbVxuICAgIC8vIOKAlCBgaW5pdGlhbENvbnRleHRgIG1lcmdlZCB3aXRoIGBkZWZhdWx0VmFsdWVzRm9yQ29udGV4dGAsIHdoaWNoIGlzIHdoYXRcbiAgICAvLyBgU2hhcmVkTWVtb3J5YCBjb21wdXRlZCBhYm92ZS4gU2VlZGluZyB0aGUgbG9nIGZyb20gYGluaXRpYWxTdGF0ZWAgYWxvbmVcbiAgICAvLyBsZWZ0IGBkZWZhdWx0VmFsdWVzYCBvdXQgb2YgZXZlcnkgcmVwbGF5LCBzbyBhIGZvbGQgY291bGQgbm90IHJlcHJvZHVjZVxuICAgIC8vIHRoZSBzdGF0ZSBhIHN0YWdlIGFjdHVhbGx5IHNhdy4gYGdldFN0YXRlKClgIGlzIHRoZSBsaXZlIGNvbnRleHQ7IHRoZVxuICAgIC8vIEV2ZW50TG9nIGNvbnN0cnVjdG9yIGNsb25lcyBpdCwgc28gdGhlIGJhc2Ugc3RheXMgZGV0YWNoZWQuXG4gICAgdGhpcy5leGVjdXRpb25IaXN0b3J5ID0gbmV3IEV2ZW50TG9nKHRoaXMuZ2xvYmFsU3RvcmUuZ2V0U3RhdGUoKSk7XG4gICAgdGhpcy5wb2xpY3kgPSBwb2xpY3k7XG4gICAgdGhpcy5yb290U3RhZ2VDb250ZXh0ID0gdGhpcy5uZXdSb290KHJvb3ROYW1lLCByb290SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEEgZnJlc2ggcm9vdCBmcmFtZSBmb3IgdGhpcyBydW50aW1lIOKAlCBgZ2xvYmFsU3RvcmVgLCBgZXhlY3V0aW9uSGlzdG9yeWAsXG4gICAqIHRoZSBydW4ncyBwb2xpY3kgYW5kICh3aGVuIGtlcHQpIHRoZSBtaXJyb3IuIEFsc28gaG93IGBTdWJmbG93RXhlY3V0b3JgXG4gICAqIHJlcGxhY2VzIGEgc3ViZmxvdydzIHNlZWQgZnJhbWUgd2l0aCB0aGUgZnJhbWUgaXRzIGZpcnN0IHN0YWdlIHJ1bnMgb24uXG4gICAqL1xuICBuZXdSb290KG5hbWU6IHN0cmluZywgaWQ6IHN0cmluZyk6IFN0YWdlQ29udGV4dCB7XG4gICAgY29uc3Qgcm9vdCA9IG5ldyBTdGFnZUNvbnRleHQoJycsIG5hbWUsIGlkLCB0aGlzLmdsb2JhbFN0b3JlLCAnJywgdGhpcy5leGVjdXRpb25IaXN0b3J5KTtcbiAgICB0aGlzLmluc3RhbGxQb2xpY3kocm9vdCk7XG4gICAgcmV0dXJuIHJvb3Q7XG4gIH1cblxuICAvKipcbiAgICogSW5zdGFsbCB0aGUgcnVuJ3MgcG9saWN5IG9uIHRoZSBDVVJSRU5UIHJvb3QgZnJhbWUg4oCUIGEgc2FtZS1leGVjdXRvclxuICAgKiByZXN1bWUsIHdob3NlIGNvbnRpbnVhdGlvbiByb290IChgbGVhZi5jcmVhdGVOZXh0YCkgaXMgYWR2YW5jZWQgYmVmb3JlXG4gICAqIHRoZSBleGVjdXRvciBidWlsZHMgdGhpcyBsZWcncyBwb2xpY3kgKGEgZnJlc2ggcnVsZSBwZXIgbGVnKS4gRXZlcnlcbiAgICogZGVzY2VuZGFudCB0YWtlcyB0aGUgcmVmZXJlbmNlIGZyb20gdGhlcmUuXG4gICAqL1xuICB1c2VQb2xpY3kocG9saWN5OiBSdW5Qb2xpY3kpOiB2b2lkIHtcbiAgICB0aGlzLnBvbGljeSA9IHBvbGljeTtcbiAgICB0aGlzLmluc3RhbGxQb2xpY3kodGhpcy5yb290U3RhZ2VDb250ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcG9saWN5IG9uIGByb290YCwgYW5kIHRoZSBtaXJyb3Igc3RvcmUgd2hlbiB0aGUgcG9saWN5IGtlZXBzIG9uZS5cbiAgICogVGhlIG1pcnJvciBpcyBhIFNFUlZFRCBzdXJmYWNlLCBzbyBpdHMgc2VlZCBtdXN0IGFscmVhZHkgYmUgdGhlIHBvbGljeSdzXG4gICAqIHZpZXcgb2YgdGhlIHN0YXJ0aW5nIHN0YXRlOiBhIHBvbGljeSBrZXkgdGhhdCBhcnJpdmVzIGJ5IGBpbml0aWFsQ29udGV4dGBcbiAgICogLyBgZGVmYXVsdFZhbHVlc0ZvckNvbnRleHRgIChvciwgb24gYSBjcm9zcy1leGVjdXRvciByZXN1bWUsIGJ5IHRoZVxuICAgKiBjaGVja3BvaW50J3MgYHNoYXJlZFN0YXRlYCkgYW5kIGlzIG5ldmVyIHJlLXdyaXR0ZW4gd291bGQgb3RoZXJ3aXNlIHNpdFxuICAgKiBpbiBgZ2V0U25hcHNob3QoeyByZWRhY3Q6IHRydWUgfSlgIGluIHBsYWludGV4dCDigJQgc28gdGhlIHNlZWQgaXMgc2NydWJiZWRcbiAgICogd2l0aCB0aGUgTE9HJ3MgcGxhY2Vob2xkZXIsIHRoZSBzYW1lIHN0cmluZyB0aGUgcmVkYWN0ZWQgcGF0Y2hlcyBjYXJyeS5cbiAgICogQ3JlYXRlZCBvbmNlIHBlciBydW50aW1lIChhIHN1YmZsb3cncyBydW50aW1lIGtlZXBzIGl0cyBvd247IGl0cyBzZWVkIGlzXG4gICAqIGVtcHR5IOKAlCB0aGUgaW5wdXQgYXJyaXZlcyBhcyBhIGNvbW1pdCkuXG4gICAqL1xuICBwcml2YXRlIGluc3RhbGxQb2xpY3kocm9vdDogU3RhZ2VDb250ZXh0KTogdm9pZCB7XG4gICAgcm9vdC51c2VQb2xpY3kodGhpcy5wb2xpY3kpO1xuICAgIGlmICghdGhpcy5wb2xpY3kubWlycm9yKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLnJlZGFjdGVkU3RvcmUpIHtcbiAgICAgIGNvbnN0IHJ1bGUgPSB0aGlzLnBvbGljeS5yZWRhY3Rpb247XG4gICAgICB0aGlzLnJlZGFjdGVkU3RvcmUgPSBuZXcgU2hhcmVkTWVtb3J5KFxuICAgICAgICBydWxlID8gcnVsZS5yZXRhaW5TdGF0ZSh0aGlzLl9kZWZhdWx0VmFsdWVzLCBMT0dfUExBQ0VIT0xERVIpIDogdGhpcy5fZGVmYXVsdFZhbHVlcyxcbiAgICAgICAgcnVsZSA/IHJ1bGUucmV0YWluU3RhdGUodGhpcy5faW5pdGlhbFN0YXRlLCBMT0dfUExBQ0VIT0xERVIpIDogdGhpcy5faW5pdGlhbFN0YXRlLFxuICAgICAgKTtcbiAgICB9XG4gICAgcm9vdC51c2VSZWRhY3RlZE1pcnJvcih0aGlzLnJlZGFjdGVkU3RvcmUpO1xuICB9XG5cbiAgLyoqIFByZXNlcnZlIHRoZSBjdXJyZW50IHJvb3RTdGFnZUNvbnRleHQgZm9yIHNuYXBzaG90cyBiZWZvcmUgY2hhbmdpbmcgaXQgZm9yIHJlc3VtZS4gKi9cbiAgcHJlc2VydmVTbmFwc2hvdFJvb3QoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9zbmFwc2hvdFJvb3QpIHtcbiAgICAgIHRoaXMuX3NuYXBzaG90Um9vdCA9IHRoaXMucm9vdFN0YWdlQ29udGV4dDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIGZyb3plbiwgZGV0YWNoZWQgZm9sZCBiYXNlIHNlcnZlZCBhcyB7QGxpbmsgUnVudGltZVNuYXBzaG90LmluaXRpYWxTdGF0ZX0uXG4gICAqIENvbXB1dGVkIG9uY2UgKHRoZSBiYXNlIG5ldmVyIGNoYW5nZXMgYWZ0ZXIgY29uc3RydWN0aW9uKSBhbmQgc2hhcmVkIOKAlFxuICAgKiBzYWZlIGJlY2F1c2UgaXQgaXMgZGVlcGx5IGZyb3plbiwgc28gbm8gaG9sZGVyIGNhbiBtdXRhdGUgaXQgb3IgcmVhY2ggdGhlXG4gICAqIGVuZ2luZSB0aHJvdWdoIGl0OyBhIGJhc2UgaG9sZGluZyBhIERhdGUsIE1hcCwgYnVmZmVyIOKApiAod2hhdCBmcmVlemluZ1xuICAgKiBjYW5ub3Qgc2VhbCkgaXMgc2VydmVkIGJ5IHRoZSBwdWJsaWMgc25hcHNob3QgYXMgYSBjb3B5IG9mIGl0cyBvcGVuIHBhdGhzXG4gICAqIChgcnVubmVyL3NuYXBzaG90LnRzIMK3IHNlcnZlZFNuYXBzaG90YCwgYGNhcHR1cmUvZnJlZXplLnRzIMK3IHNlcnZlUmVjb3JkYCxcbiAgICogOS40NC4yKS5cbiAgICovXG4gIHByaXZhdGUgZ2V0Rm9sZEJhc2UoKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICAgIGlmICghdGhpcy5fZm9sZEJhc2UpIHtcbiAgICAgIGNvbnN0IGJhc2UgPSB0aGlzLmV4ZWN1dGlvbkhpc3RvcnkuZ2V0SW5pdGlhbFN0YXRlKCk7XG4gICAgICB0aGlzLl9mb2xkQmFzZSA9IGZyZWV6ZVJlY29yZChiYXNlICYmIHR5cGVvZiBiYXNlID09PSAnb2JqZWN0JyA/IGJhc2UgOiB7fSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9mb2xkQmFzZTtcbiAgfVxuXG4gIGdldFBpcGVsaW5lcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3Qgc3RhdGUgPSB0aGlzLmdsb2JhbFN0b3JlLmdldFN0YXRlKCk7XG4gICAgcmV0dXJuIHN0YXRlLnBpcGVsaW5lcyA/IE9iamVjdC5rZXlzKHN0YXRlLnBpcGVsaW5lcyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgOiBbXTtcbiAgfVxuXG4gIHNldFJvb3RPYmplY3QocGF0aDogc3RyaW5nW10sIGtleTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bikge1xuICAgIHRoaXMucm9vdFN0YWdlQ29udGV4dC5zZXRPYmplY3QocGF0aCwga2V5LCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBydW50aW1lIHNuYXBzaG90LlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucy5yZWRhY3QgIFdoZW4gYHRydWVgLCByZXR1cm5zIGBzaGFyZWRTdGF0ZWAgZnJvbSB0aGVcbiAgICogICBwYXJhbGxlbCByZWRhY3RlZCBtaXJyb3IgKGlmIG9uZSB3YXMgZW5hYmxlZCkuIFRoaXMgaXMgdGhlIHNhZmUgdmlld1xuICAgKiAgIGZvciBzaGFyaW5nIHRyYWNlcyBleHRlcm5hbGx5IOKAlCBwYXN0ZSBpbnRvIGEgdmlld2VyLCBzaGlwIHRvIHN1cHBvcnQsXG4gICAqICAgZXRjLiBXaGVuIHRoZSBtaXJyb3Igd2FzIG5ldmVyIGVuYWJsZWQsIGZhbGxzIGJhY2sgdG8gcmF3IGBnbG9iYWxTdG9yZWBcbiAgICogICBhbmQgYSBkZXYtbW9kZSB3YXJuaW5nIGlzIGVtaXR0ZWQgKHNpbGVudCBpbiBwcm9kdWN0aW9uKS5cbiAgICpcbiAgICogICBEZWZhdWx0IGBmYWxzZWAgcHJlc2VydmVzIHRoZSBydW50aW1lIHZpZXcg4oCUIG5lY2Vzc2FyeSBmb3IgcGF1c2UgL1xuICAgKiAgIHJlc3VtZSAocmVzdW1wdGlvbiBtdXN0IHJlcGxheSBhZ2FpbnN0IHRoZSByZWFsIHZhbHVlcywgbm90XG4gICAqICAgJ1tSRURBQ1RFRF0nKS5cbiAgICpcbiAgICogT3RoZXIgZmllbGRzIChgZXhlY3V0aW9uVHJlZWAsIGBjb21taXRMb2dgKSBhcmUgdGhlIHNhbWUgZWl0aGVyIHdheSDigJRcbiAgICogdGhlIGNvbW1pdCBsb2cgaXMgYWxyZWFkeSByZWRhY3RlZCBhdCB3cml0ZS10aW1lLCBhbmQgdGhlIGV4ZWN1dGlvblxuICAgKiB0cmVlIG9ubHkgY2FycmllcyBzdHJ1Y3R1cmFsIG1ldGFkYXRhLlxuICAgKlxuICAgKiBgaW5pdGlhbFN0YXRlYCAodGhlIGZvbGQgYmFzZSkgaXMgT01JVFRFRCB1bmRlciBgcmVkYWN0OiB0cnVlYC4gSXQgaXMgdGhlXG4gICAqIHJ1bidzIHJhdyBwcmUtcnVuIHNlZWQg4oCUIGBpbml0aWFsQ29udGV4dGAgbWVyZ2VkIHdpdGhcbiAgICogYGRlZmF1bHRWYWx1ZXNGb3JDb250ZXh0YCDigJQgYW5kIGl0IG5ldmVyIHBhc3NlZCB0aHJvdWdoIGEgcmVkYWN0aW9uXG4gICAqIHBvbGljeTogdGhlIHBvbGljeSBzY3J1YnMgV1JJVEVTIGF0IHRoZSBzY29wZSBmYWNhZGUsIGFuZCB0aGUgYmFzZSB3YXNcbiAgICogbmV2ZXIgd3JpdHRlbiBieSBhIHN0YWdlLiBTZXJ2aW5nIGl0IG9uIHRoZSByZWRhY3RlZCBzdXJmYWNlIHdvdWxkIGhhbmRcbiAgICogYmFjayB0aGUgb3JpZ2luYWwgdmFsdWUgb2YgYSBzZWVkZWQgc2VjcmV0IHRoYXQgYSBsYXRlciBjb21taXQgaGFkXG4gICAqIHNjcnViYmVkLiBBIGNvbnN1bWVyIGZvbGRpbmcgd2l0aG91dCBpdCBnZXRzIGBiYXNpczogJ2xvZy1vbmx5J2AgZnJvbVxuICAgKiBgc3RhdGVBdGAsIHdoaWNoIGlzIHRoZSBob25lc3Qgc2lnbmFsIHRoYXQgdGhlIGJhc2UgZGlkIG5vdCB0cmF2ZWwgd2l0aFxuICAgKiB0aGlzIGxvZyDigJQgYSBwYXJ0aWFsIGFuc3dlciB0aGF0IHNheXMgaXQgaXMgcGFydGlhbCwgbmV2ZXIgYSBzaWxlbnQgb25lLlxuICAgKlxuICAgKiBSZXR1cm5zIGBPbWl0PFJ1bnRpbWVTbmFwc2hvdCwgJ3J1bklkJz5gOiB0aGUgcnVudGltZSBpcyB0aGUgbWVtb3J5XG4gICAqIGNvbnRhaW5lciBhbmQgZG9lc24ndCBrbm93IHdoaWNoIHJ1biBpdCBzZXJ2ZXMg4oCUIGBydW5JZGAgaXMgcGVyLXJ1blxuICAgKiBleGVjdXRvciBzdGF0ZSwgc3RhbXBlZCBieSBgRmxvd2NoYXJ0VHJhdmVyc2VyLmdldFNuYXBzaG90KClgICh3aGljaFxuICAgKiBvd25zIHRoZSBydW4ncyBpZCBhbmQgYWxyZWFkeSBzdGFtcHMgaXQgb24gZXZlcnkgZXZlbnQpLiBTdWJmbG93cydcbiAgICogbmVzdGVkIHJ1bnRpbWVzIGRlbGliZXJhdGVseSBoYXZlIE5PIHJ1bklkIG9mIHRoZWlyIG93biAoYSBzdWJmbG93IGlzXG4gICAqIHBhcnQgb2YgdGhlIHBhcmVudCdzIGxvZ2ljYWwgcnVuKS5cbiAgICovXG4gIGdldFNuYXBzaG90KG9wdGlvbnM/OiB7IHJlZGFjdD86IGJvb2xlYW4gfSk6IE9taXQ8UnVudGltZVNuYXBzaG90LCAncnVuSWQnPiB7XG4gICAgY29uc3Qgc25hcHNob3RSb290ID0gdGhpcy5fc25hcHNob3RSb290ID8/IHRoaXMucm9vdFN0YWdlQ29udGV4dDtcbiAgICBjb25zdCB1c2VSZWRhY3RlZCA9IG9wdGlvbnM/LnJlZGFjdCA9PT0gdHJ1ZSAmJiB0aGlzLnJlZGFjdGVkU3RvcmUgIT09IHVuZGVmaW5lZDtcbiAgICByZXR1cm4ge1xuICAgICAgc2hhcmVkU3RhdGU6IHVzZVJlZGFjdGVkID8gdGhpcy5yZWRhY3RlZFN0b3JlIS5nZXRTdGF0ZSgpIDogdGhpcy5nbG9iYWxTdG9yZS5nZXRTdGF0ZSgpLFxuICAgICAgZXhlY3V0aW9uVHJlZTogc25hcHNob3RSb290LmdldFNuYXBzaG90KCksXG4gICAgICAvLyBSRURBQ1RJT046IHRoZSBmb2xkIGJhc2UgaXMgdGhlIHJhdyBwcmUtcnVuIHNlZWQgYW5kIG5vIHBvbGljeSBldmVyXG4gICAgICAvLyB0b3VjaGVkIGl0IChwb2xpY2llcyBzY3J1YiB3cml0ZXM7IG5vdGhpbmcgd3JvdGUgdGhlIGJhc2UpLiBPbWl0IGl0XG4gICAgICAvLyByYXRoZXIgdGhhbiBsZWFrIGl0IOKAlCBgc3RhdGVBdGAgZGVncmFkZXMgdG8gYGJhc2lzOiAnbG9nLW9ubHknYC5cbiAgICAgIC4uLih1c2VSZWRhY3RlZCA/IHt9IDogeyBpbml0aWFsU3RhdGU6IHRoaXMuZ2V0Rm9sZEJhc2UoKSB9KSxcbiAgICAgIC8vIERFVEFDSEVEOiB0aGUgZW5naW5lIGtlZXBzIGl0cyBsaXZlIEV2ZW50TG9nOyB0aGUgc25hcHNob3QgZ2V0cyBhXG4gICAgICAvLyBmcm96ZW4gYXJyYXkgb2YgaXRzIG93biAoYHJlY29yZGVkKClgIGJ1aWxkcyBhIG5ldyBvbmUpLiBTZXJ2aW5nIHRoZVxuICAgICAgLy8gaW50ZXJuYWwgYXJyYXkgYWxpYXNlZCBpdCwgc28gYSBzbmFwc2hvdCB0YWtlbiBtaWQtcnVuIGtlcHQgZ3Jvd2luZ1xuICAgICAgLy8gdW5kZXIgaXRzIGhvbGRlciBhbmQgYSBjb25zdW1lciBjb3VsZCBzcGxpY2UgdGhlIGVuZ2luZSdzIG93biBoaXN0b3J5LlxuICAgICAgLy8gVGhlIGJ1bmRsZXMgaW4gaXQgYXJlIHRoZSBsb2cncyBvd24sIGZyb3plbiBhdCBgRXZlbnRMb2cgwrcgcmVjb3JkYFxuICAgICAgLy8gKEYzKS4gVGhlIHB1YmxpYyBzbmFwc2hvdCBzZXJ2ZXMgdGhlbSAoYHJ1bm5lci9zbmFwc2hvdC50cyDCt1xuICAgICAgLy8gc2VydmVkU25hcHNob3RgLCA5LjQ0LjIpOyB0aGlzIG9uZSBpcyBhbHNvIHRoZSBlbmdpbmUncyBvd24g4oCUIGFcbiAgICAgIC8vIHN1YmZsb3cgbW91bnQgdGFrZXMgaXQgb25jZSBwZXIgbW91bnQg4oCUIHNvIHRoZSBydW4gcGF0aCBzZXJ2ZXMgbm90aGluZy5cbiAgICAgIGNvbW1pdExvZzogT2JqZWN0LmZyZWV6ZSh0aGlzLmV4ZWN1dGlvbkhpc3RvcnkucmVjb3JkZWQoKSkgYXMgQ29tbWl0QnVuZGxlW10sXG4gICAgICAuLi4odGhpcy5leGVjdXRpb25IaXN0b3J5LmFkZHJlc3MgPT09IHVuZGVmaW5lZCA/IHt9IDogeyBsb2dBZGRyZXNzOiB0aGlzLmV4ZWN1dGlvbkhpc3RvcnkuYWRkcmVzcyB9KSxcbiAgICAgIGNvbW1pdFZhbHVlczogdGhpcy5wb2xpY3kuY29tbWl0VmFsdWVzLFxuICAgICAgd3JpdGVQcm92ZW5hbmNlOiB0aGlzLnBvbGljeS53cml0ZVByb3ZlbmFuY2UsXG4gICAgfTtcbiAgfVxufVxuIl19
@@ -27,7 +27,8 @@ import type { CombinedNarrativeEntry } from '../engine/narrative/narrativeTypes.
27
27
  import type { ManifestEntry } from '../engine/narrative/recorders/ManifestFlowRecorder.js';
28
28
  import type { FlowRecorder } from '../engine/narrative/types.js';
29
29
  import { type ExecutorResult, type RunOptions, type ScopeFactory, type SerializedPipelineStructure, type StageNode, type SubflowResult } from '../engine/types.js';
30
- import type { CommitValuesMode, ReadTrackingMode, WriteTrackingMode } from '../memory/types.js';
30
+ import type { ReadTrackingMode, WriteTrackingMode } from '../memory/frameTypes.js';
31
+ import type { CommitValuesMode } from '../memory/types.js';
31
32
  import type { FlowchartCheckpoint } from '../pause/types.js';
32
33
  import type { CombinedRecorder } from '../recorder/CombinedRecorder.js';
33
34
  import type { EmitRecorder } from '../recorder/EmitRecorder.js';