obsidian-integration-testing 6.2.0 → 8.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +49 -14
- package/dist/lib/cjs/connect-to-cdp.cjs +1 -1
- package/dist/lib/cjs/connect-to-cdp.d.cts +5 -4
- package/dist/lib/cjs/enable-plugin.cjs +2 -2
- package/dist/lib/cjs/error-to-string.cjs +61 -0
- package/dist/lib/cjs/error-to-string.d.cts +20 -0
- package/dist/lib/cjs/eval-in-obsidian.cjs +1 -1
- package/dist/lib/cjs/eval-in-obsidian.d.cts +127 -92
- package/dist/lib/cjs/global-setup-core.cjs +11 -11
- package/dist/lib/cjs/index.cjs +4 -1
- package/dist/lib/cjs/index.d.cts +3 -1
- package/dist/lib/cjs/lib-registry.cjs +59 -0
- package/dist/lib/cjs/lib-registry.d.cts +67 -0
- package/dist/lib/cjs/library.cjs +1 -1
- package/dist/lib/cjs/namespace-bootstrap.cjs +55 -31
- package/dist/lib/cjs/obsidian-namespace.cjs +1 -1
- package/dist/lib/cjs/obsidian-namespace.d.cts +8 -8
- package/dist/lib/cjs/vitest/global-setup.cjs +4 -4
- package/dist/lib/esm/connect-to-cdp.d.mts +5 -4
- package/dist/lib/esm/connect-to-cdp.mjs +1 -1
- package/dist/lib/esm/enable-plugin.mjs +2 -2
- package/dist/lib/esm/error-to-string.d.mts +20 -0
- package/dist/lib/esm/error-to-string.mjs +37 -0
- package/dist/lib/esm/eval-in-obsidian.d.mts +127 -92
- package/dist/lib/esm/eval-in-obsidian.mjs +1 -1
- package/dist/lib/esm/global-setup-core.mjs +11 -11
- package/dist/lib/esm/index.d.mts +3 -1
- package/dist/lib/esm/index.mjs +3 -1
- package/dist/lib/esm/lib-registry.d.mts +67 -0
- package/dist/lib/esm/lib-registry.mjs +32 -0
- package/dist/lib/esm/library.mjs +1 -1
- package/dist/lib/esm/namespace-bootstrap.mjs +58 -31
- package/dist/lib/esm/obsidian-namespace.d.mts +8 -8
- package/dist/lib/esm/vitest/global-setup.mjs +4 -4
- package/dist/obsidian-integration-testing-8.0.0.tgz +0 -0
- package/package.json +1 -1
- package/dist/lib/cjs/serialize-error.cjs +0 -44
- package/dist/lib/cjs/serialize-error.d.cts +0 -22
- package/dist/lib/esm/serialize-error.d.mts +0 -22
- package/dist/lib/esm/serialize-error.mjs +0 -20
- package/dist/obsidian-integration-testing-6.2.0.tgz +0 -0
package/README.md
CHANGED
|
@@ -111,7 +111,7 @@ const title = await evalInObsidian({
|
|
|
111
111
|
|
|
112
112
|
### Simulate real user input (trusted keyboard & pointer)
|
|
113
113
|
|
|
114
|
-
|
|
114
|
+
The callback's `lib` bag provides helpers that inject **trusted** input at the Chromium level
|
|
115
115
|
(via Electron's `webContents.sendInputEvent`) — the kind of event only the browser/OS
|
|
116
116
|
normally produces. This matters because the in-page alternatives give false results:
|
|
117
117
|
`dispatchEvent(new KeyboardEvent(...))` / `new MouseEvent(...)` are untrusted
|
|
@@ -124,18 +124,18 @@ genuinely apply.
|
|
|
124
124
|
The element/editor arguments are live renderer DOM nodes — the callback runs in the Obsidian
|
|
125
125
|
renderer, so no cross-process serialization is needed.
|
|
126
126
|
|
|
127
|
-
| Helper | Purpose
|
|
128
|
-
| ---------------------------------- |
|
|
129
|
-
| `typeIntoEditor({ editor, text })` | Focuses `editor` (caret to end), types `text` as trusted key events, then polls until the document reflects it.
|
|
130
|
-
| `pressKey({ key, modifiers })` | Presses `key` with optional `modifiers` as a trusted `keyDown`→`char`→`keyUp` on the DOM-focused element (fires `keydown`/`keypress`/`beforeinput`/`input`/`keyup`).
|
|
131
|
-
| `hoverElement({ element })` | Moves the pointer to `element`'s center, then polls until `element.matches(':hover')`.
|
|
132
|
-
| `unhoverElement({ element })` | Moves the pointer just outside `element`'s bounding box, then polls until it no longer matches `:hover`.
|
|
133
|
-
| `moveMouse({ x, y })` | Low-level primitive: injects one trusted pointer move at the given web-contents DIP coordinates
|
|
127
|
+
| Helper | Purpose |
|
|
128
|
+
| ---------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
129
|
+
| `typeIntoEditor({ editor, text })` | Focuses `editor` (caret to end), types `text` as trusted key events, then polls until the document reflects it. |
|
|
130
|
+
| `pressKey({ key, modifiers })` | Presses `key` with optional `modifiers` as a trusted `keyDown`→`char`→`keyUp` on the DOM-focused element (fires `keydown`/`keypress`/`beforeinput`/`input`/`keyup`). **Synchronous**; does **not** poll — pair with `waitUntil`. |
|
|
131
|
+
| `hoverElement({ element })` | Moves the pointer to `element`'s center, then polls until `element.matches(':hover')`. |
|
|
132
|
+
| `unhoverElement({ element })` | Moves the pointer just outside `element`'s bounding box, then polls until it no longer matches `:hover`. |
|
|
133
|
+
| `moveMouse({ x, y })` | Low-level primitive: injects one trusted pointer move at the given web-contents DIP coordinates. **Synchronous**; does **not** poll. |
|
|
134
134
|
|
|
135
135
|
```ts
|
|
136
136
|
// Type into the active editor — only succeeds if the editor truly holds focus.
|
|
137
137
|
const typed = await evalInObsidian({
|
|
138
|
-
fn: async ({ app,
|
|
138
|
+
fn: async ({ app, lib: { typeIntoEditor }, obsidianModule }) => {
|
|
139
139
|
const view = app.workspace.getActiveViewOfType(obsidianModule.MarkdownView);
|
|
140
140
|
const editor = view?.editor;
|
|
141
141
|
if (!editor) {
|
|
@@ -150,18 +150,18 @@ const typed = await evalInObsidian({
|
|
|
150
150
|
// Press special keys / shortcuts (Obsidian `Modifier` names; `'Mod'` = Cmd on macOS, Ctrl elsewhere).
|
|
151
151
|
// A key press has no universal effect, so pair it with `waitUntil` to await the outcome.
|
|
152
152
|
await evalInObsidian({
|
|
153
|
-
fn: async ({ app,
|
|
153
|
+
fn: async ({ app, lib: { pressKey, waitUntil }, obsidianModule }) => {
|
|
154
154
|
const editor = app.workspace.getActiveViewOfType(obsidianModule.MarkdownView)?.editor;
|
|
155
155
|
editor?.focus();
|
|
156
156
|
|
|
157
|
-
|
|
157
|
+
pressKey({ key: 'Enter', modifiers: ['Shift'] }); // synchronous; soft line break
|
|
158
158
|
await waitUntil({ predicate: () => (editor?.getValue().includes('\n') ?? false) });
|
|
159
159
|
}
|
|
160
160
|
});
|
|
161
161
|
|
|
162
162
|
// Observe a genuine :hover state (real theme var() values, real compositing).
|
|
163
163
|
await evalInObsidian({
|
|
164
|
-
fn: async ({ hoverElement, unhoverElement }) => {
|
|
164
|
+
fn: async ({ lib: { hoverElement, unhoverElement } }) => {
|
|
165
165
|
const bar = document.querySelector<HTMLElement>('.minimized-modal-bar');
|
|
166
166
|
if (!bar) {
|
|
167
167
|
return;
|
|
@@ -182,7 +182,7 @@ await evalInObsidian({
|
|
|
182
182
|
|
|
183
183
|
### Wait for an async condition (`waitUntil`)
|
|
184
184
|
|
|
185
|
-
|
|
185
|
+
The `lib` bag also provides a `waitUntil({ predicate })` helper for polling until an
|
|
186
186
|
asynchronous effect settles (a view opens, a DOM node appears, a setting applies). Because
|
|
187
187
|
the callback is serialized via `toString()` and **cannot import modules**, it can't reuse a
|
|
188
188
|
library poll helper — `waitUntil` is the shared, injected replacement for the loops you would
|
|
@@ -203,7 +203,7 @@ includes `message` when given).
|
|
|
203
203
|
```ts
|
|
204
204
|
// Wait until the plugin has opened a Markdown view, then read its editor.
|
|
205
205
|
const value = await evalInObsidian({
|
|
206
|
-
fn: async ({ app,
|
|
206
|
+
fn: async ({ app, lib: { waitUntil }, obsidianModule }) => {
|
|
207
207
|
await waitUntil({
|
|
208
208
|
message: 'no active Markdown view',
|
|
209
209
|
predicate: () => Boolean(app.workspace.getActiveViewOfType(obsidianModule.MarkdownView))
|
|
@@ -213,6 +213,41 @@ const value = await evalInObsidian({
|
|
|
213
213
|
});
|
|
214
214
|
```
|
|
215
215
|
|
|
216
|
+
### Inject a shared library (`lib`)
|
|
217
|
+
|
|
218
|
+
Because a callback is serialized via `toString()` and **cannot import modules**, it can't reuse
|
|
219
|
+
your utility library directly. Every callback receives a `lib` argument — a single bag that
|
|
220
|
+
**provider packages populate** with their whole (renderer-safe) library, so closures can call
|
|
221
|
+
shared helpers instead of hand-rolling them. `lib` is `{}` until a provider registers a resolver.
|
|
222
|
+
|
|
223
|
+
A provider registers a **renderer-side resolver** with `registerLibResolver` from its per-worker
|
|
224
|
+
test setup (a `setupFiles` entry, the same place the context resolvers are registered). The
|
|
225
|
+
resolver runs inside Obsidian and returns an object; every registered resolver's result is merged
|
|
226
|
+
(`Object.assign`) into the one `lib` bag, so multiple providers compose. The resolver is
|
|
227
|
+
serialized, so it must be self-contained — read a value a fixture plugin published on `window`:
|
|
228
|
+
|
|
229
|
+
```ts
|
|
230
|
+
// provider's setup file (registered via setupFiles)
|
|
231
|
+
import { registerLibResolver } from 'obsidian-integration-testing';
|
|
232
|
+
|
|
233
|
+
registerLibResolver(() => window.__myLibraryModule__);
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
Make `lib` type-safe by augmenting the `Lib` interface (multiple augmentations merge, mirroring
|
|
237
|
+
the runtime merge):
|
|
238
|
+
|
|
239
|
+
```ts
|
|
240
|
+
declare module 'obsidian-integration-testing' {
|
|
241
|
+
interface Lib {
|
|
242
|
+
getThing(id: string): Thing;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
const name = await evalInObsidian({
|
|
247
|
+
fn: ({ lib: { getThing } }) => getThing('a').name
|
|
248
|
+
});
|
|
249
|
+
```
|
|
250
|
+
|
|
216
251
|
### Pass complex arguments
|
|
217
252
|
|
|
218
253
|
Arguments are JSON-serialized. You can even pass functions — they are serialized via `toString()`:
|
|
@@ -85,4 +85,4 @@ function resolveEndpoint(transport, options) {
|
|
|
85
85
|
0 && (module.exports = {
|
|
86
86
|
connectToCdp
|
|
87
87
|
});
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Nvbm5lY3QtdG8tY2RwLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUHJvZ3JhbW1hdGljIGhlbHBlciB0byBsYXVuY2ggKG9yIGF0dGFjaCB0bykgYSBDRFAtZW5hYmxlZCBPYnNpZGlhbiBpbnN0YW5jZVxuICogd2l0aCB0aGUgcnVudGltZSBoZWxwZXIgbmFtZXNwYWNlIGJvb3RzdHJhcHBlZCwgZm9yIGFkLWhvYyByZWFsLWFwcCBkZWJ1Z2dpbmcuXG4gKlxuICogQSBzaW5nbGUge0BsaW5rIGNvbm5lY3RUb0NkcH0gY2FsbCByZXNvbHZlcyB0aGUgb3duZWQtaW5zdGFuY2UgY29uZmlnLCBvcGVucyBhXG4gKiB2YXVsdCwgYW5kIGJvb3RzdHJhcHMgYHdpbmRvdy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nYCAoc28gYGV2YWxXcmFwcGVyYCxcbiAqIGB0eXBlSW50b0VkaXRvcmAsIGBzZXJpYWxpemVFcnJvcmAsIGBnZXRPYnNpZGlhbk1vZHVsZWAsIFx1MjAyNiBhcmUgYXZhaWxhYmxlKSwgdGhlblxuICogaGFuZHMgYmFjayBhIGRpc3Bvc2FibGUge0BsaW5rIENkcENvbm5lY3Rpb259IGV4cG9zaW5nIHRoZSBjaG9zZW4gQ0RQIHBvcnQsIGFcbiAqIHJhdyB7QGxpbmsgQ2RwQ29ubmVjdGlvbi5pbnZva2V9IGFuZCB0aGUgcmljaCB7QGxpbmsgQ2RwQ29ubmVjdGlvbi5ldmFsSW5PYnNpZGlhbn0uXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEludGVncmF0aW9uLXRpbWUgY29kZSAobGF1bmNoZXMgT2JzaWRpYW4gLyBDRFApIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgdHlwZSB7IEV4Y2VwdCB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB0eXBlIHsgQ29udGV4dElkIH0gZnJvbSAnLi9jb250ZXh0LWlkLmNqcyc7XG5pbXBvcnQgdHlwZSB7XG4gIEV2YWxJbk9ic2lkaWFuUGFyYW1zLFxuICBHZW5lcmljT2JqZWN0XG59IGZyb20gJy4vZXZhbC1pbi1vYnNpZGlhbi5janMnO1xuaW1wb3J0IHR5cGUgeyBPYnNpZGlhbkNkcFRyYW5zcG9ydE9wdGlvbnMgfSBmcm9tICcuL3RyYW5zcG9ydC1vcHRpb25zLmNqcyc7XG5cbmltcG9ydCB7IGV2YWxJbk9ic2lkaWFuIH0gZnJvbSAnLi9ldmFsLWluLW9ic2lkaWFuLmNqcyc7XG5pbXBvcnQgeyBUZW1wVmF1bHQgfSBmcm9tICcuL3RlbXAtdmF1bHQuY2pzJztcbmltcG9ydCB7IERlc2t0b3BDZHBUcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC1kZXNrdG9wLWNkcC5janMnO1xuaW1wb3J0IHsgY3JlYXRlVHJhbnNwb3J0RnJvbU9wdGlvbnMgfSBmcm9tICcuL3RyYW5zcG9ydC1mYWN0b3J5LmNqcyc7XG5cbmNvbnN0IERFRkFVTFRfQ0RQX0hPU1QgPSAnbG9jYWxob3N0JztcblxuLyoqXG4gKiBBIGxpdmUgY29ubmVjdGlvbiB0byBhIENEUC1lbmFibGVkIE9ic2lkaWFuIGluc3RhbmNlIHdpdGggdGhlIHJ1bnRpbWUgaGVscGVyXG4gKiBuYW1lc3BhY2UgYm9vdHN0cmFwcGVkLlxuICpcbiAqIEltcGxlbWVudHMgYEFzeW5jRGlzcG9zYWJsZWAsIHNvIGBhd2FpdCB1c2luZyBjb25uID0gYXdhaXQgY29ubmVjdFRvQ2RwKFx1MjAyNilgXG4gKiBkaXNwb3NlcyBpdCAoa2lsbGluZyBhbiBvd25lZCBpbnN0YW5jZSBhbmQgXHUyMDE0IGZvciBhIHRocm93LWF3YXkgdGVtcCB2YXVsdCBcdTIwMTRcbiAqIHJlbW92aW5nIGl0cyBkaXJlY3RvcnkpIGF1dG9tYXRpY2FsbHkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2RwQ29ubmVjdGlvbiBleHRlbmRzIEFzeW5jRGlzcG9zYWJsZSB7XG4gIC8qKlxuICAgKiBUaGUgYmFzZSBDRFAgVVJMLCBlLmcuIGBodHRwOi8vbG9jYWxob3N0OjUxODg4YC5cbiAgICovXG4gIHJlYWRvbmx5IGNkcFVybDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEaXNwb3NlcyB0aGUgY29ubmVjdGlvbjoga2lsbHMgYW4gb3duZWQgaW5zdGFuY2UgYW5kIHJlbW92ZXMgaXRzIGlzb2xhdGVkXG4gICAqIHVzZXItZGF0YSBkaXIuIFRoZSB2YXVsdCBkaXJlY3RvcnkgaXMgcmVtb3ZlZCBvbmx5IHdoZW4gaXQgaXMgYSB0aHJvdy1hd2F5XG4gICAqIHRlbXAgdmF1bHQgKHNlZSB7QGxpbmsgQ29ubmVjdFRvQ2RwT3B0aW9ucy5zaG91bGRSZW1vdmVWYXVsdE9uRGlzcG9zZX0pOyBhXG4gICAqIHJlYWwgdmF1bHQgcGFzc2VkIHZpYSB7QGxpbmsgQ29ubmVjdFRvQ2RwT3B0aW9ucy52YXVsdH0gaXMgbmV2ZXIgZGVsZXRlZC5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIGRpc3Bvc2FsIGNvbXBsZXRlcy5cbiAgICovXG4gIGRpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogRXZhbHVhdGVzIGEgc2VsZi1jb250YWluZWQgZnVuY3Rpb24gaW5zaWRlIE9ic2lkaWFuIHZpYSB0aGUgcmljaCBoZWxwZXJcbiAgICogcGF0aCwgcmVjZWl2aW5nIGB7IGFwcCwgb2JzaWRpYW5Nb2R1bGUsIHR5cGVJbnRvRWRpdG9yLCBjb250ZXh0IH1gIHBsdXMgYW55XG4gICAqIGBhcmdzYC4gTWlycm9ycyB0aGUgdG9wLWxldmVsIGBldmFsSW5PYnNpZGlhbmAsIHdpdGggdGhlIHRyYW5zcG9ydCBhbmQgdmF1bHRcbiAgICogcGF0aCBwcmUtYm91bmQgdG8gdGhpcyBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGV2YWx1YXRpb24gcGFyYW1ldGVycyAoYGZuYCwgb3B0aW9uYWwgYGFyZ3NgL2Bjb250ZXh0SWRgKS5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgcmV0dXJuIHZhbHVlIG9mIGBmbmAuXG4gICAqL1xuICBldmFsSW5PYnNpZGlhbjxBcmdzIGV4dGVuZHMgR2VuZXJpY09iamVjdCwgUmVzdWx0LCBUQ29udGV4dElkIGV4dGVuZHMgQ29udGV4dElkPHVua25vd24+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPihcbiAgICBwYXJhbXM6IEV4Y2VwdDxFdmFsSW5PYnNpZGlhblBhcmFtczxBcmdzLCBSZXN1bHQsIFRDb250ZXh0SWQ+LCAndHJhbnNwb3J0JyB8ICd2YXVsdFBhdGgnPlxuICApOiBQcm9taXNlPFJlc3VsdD47XG5cbiAgLyoqXG4gICAqIEV2YWx1YXRlcyBhIHJhdyBKYXZhU2NyaXB0IGV4cHJlc3Npb24gaW5zaWRlIE9ic2lkaWFuIGFuZCByZXR1cm5zIHRoZVxuICAgKiBub3JtYWxpemVkIHN0cmluZyByZXN1bHQgKGUuZy4gYCc1J2AsIGEgSlNPTiBzdHJpbmcsIG9yIGAnKG5vIG91dHB1dCknYCkuXG4gICAqXG4gICAqIEBwYXJhbSBleHByZXNzaW9uIC0gQSBzZWxmLWNvbnRhaW5lZCBKYXZhU2NyaXB0IGV4cHJlc3Npb24uXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHJhdyByZXN1bHQgc3RyaW5nLlxuICAgKi9cbiAgaW52b2tlKGV4cHJlc3Npb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPjtcblxuICAvKipcbiAgICogVGhlIENEUCBwb3J0IHRoZSBpbnN0YW5jZSBpcyByZWFjaGFibGUgb24gKHRoZSBmcmVlIHBvcnQgY2hvc2VuIGZvciBhblxuICAgKiBvd25lZCBpbnN0YW5jZSwgb3IgdGhlIGF0dGFjaGVkIHtAbGluayBDb25uZWN0VG9DZHBPcHRpb25zLnBvcnR9KS5cbiAgICovXG4gIHJlYWRvbmx5IHBvcnQ6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG9wZW5lZCB2YXVsdC4gRXhwb3NlcyBgcGF0aGAgYW5kIGBwb3B1bGF0ZSguLi4pYCBmb3Igc2VlZGluZyBmaWxlcy5cbiAgICovXG4gIHJlYWRvbmx5IHZhdWx0OiBUZW1wVmF1bHQ7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGNvbm5lY3RUb0NkcH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdFRvQ2RwT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgaW5kaXZpZHVhbCBDRFAgY29tbWFuZHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAzMDAwMGBcbiAgICovXG4gIHJlYWRvbmx5IGNvbW1hbmRUaW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENEUCBob3N0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJ2xvY2FsaG9zdCdgXG4gICAqL1xuICByZWFkb25seSBob3N0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBPYnNpZGlhbiB3aW5kb3cgaXMgc2hvd24gb24gc2NyZWVuLiBVbmxpa2UgdGhlIHRlc3QgdHJhbnNwb3J0c1xuICAgKiAoaGlkZGVuIGJ5IGRlZmF1bHQpLCBgY29ubmVjdFRvQ2RwYCAqKmRlZmF1bHRzIHRvIGB0cnVlYCoqIFx1MjAxNCBpdCBpcyBtZWFudCBmb3JcbiAgICogd2F0Y2hpbmcvZGVidWdnaW5nIGEgcmVhbCBPYnNpZGlhbi4gU2V0IGBmYWxzZWAgdG8gbGF1bmNoIGl0IG9mZi1zY3JlZW4uXG4gICAqIElnbm9yZWQgaW4gYXR0YWNoIG1vZGUgKHtAbGluayBwb3J0fSBzZXQpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IGlzT2JzaWRpYW5BcHBWaXNpYmxlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUGlucyB0aGUgRWxlY3Ryb24gc2hlbGwgKGluc3RhbGxlciBidWlsZCkgdGhlIG93bmVkIGluc3RhbmNlIHJ1bnMuIEFjY2VwdHNcbiAgICogYCd4LnkueidgLCBgJ3B1YmxpYy1sYXRlc3QnYCwgb3IgYCdjYXRhbHlzdC1sYXRlc3QnYC4gSWdub3JlZCB3aGVuXG4gICAqIHtAbGluayBwb3J0fSAoYXR0YWNoIG1vZGUpIGlzIHNldC4gV2hlbiBvbWl0dGVkLCB0aGUgaW5zdGFsbGVkIHNoZWxsIGlzIHVzZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB1bmRlZmluZWRgXG4gICAqL1xuICByZWFkb25seSBvYnNpZGlhbkluc3RhbGxlclZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBpbnMgdGhlIE9ic2lkaWFuIGFwcCB2ZXJzaW9uIChhc2FyKSB0aGUgb3duZWQgaW5zdGFuY2UgcnVucy4gQWNjZXB0c1xuICAgKiBgJ3gueS56J2AsIGAncHVibGljLWxhdGVzdCdgLCBvciBgJ2NhdGFseXN0LWxhdGVzdCdgLiBJZ25vcmVkIHdoZW5cbiAgICoge0BsaW5rIHBvcnR9IChhdHRhY2ggbW9kZSkgaXMgc2V0LiBXaGVuIG9taXR0ZWQsIHRoZSBpbnN0YWxsZWQgdmVyc2lvbiBpcyB1c2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdW5kZWZpbmVkYFxuICAgKi9cbiAgcmVhZG9ubHkgb2JzaWRpYW5WZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDRFAgcG9ydCBvZiBhbiBhbHJlYWR5LXJ1bm5pbmcgT2JzaWRpYW4gdG8gKiphdHRhY2gqKiB0by4gV2hlbiBvbWl0dGVkLCBhblxuICAgKiBpc29sYXRlZCBpbnN0YW5jZSBpcyBsYXVuY2hlZCBvbiBhbiBhdXRvbWF0aWNhbGx5IGNob3NlbiBmcmVlIHBvcnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB1bmRlZmluZWRgXG4gICAqL1xuICByZWFkb25seSBwb3J0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJlbW92ZSB0aGUgdmF1bHQgZGlyZWN0b3J5IG9uIHtAbGluayBDZHBDb25uZWN0aW9uLmRpc3Bvc2V9LlxuICAgKlxuICAgKiBXaGVuIG9taXR0ZWQsIGRlZmF1bHRzIHRvIGB0cnVlYCBmb3IgYW4gaW1wbGljaXQgdGhyb3ctYXdheSB0ZW1wIHZhdWx0XG4gICAqICh7QGxpbmsgdmF1bHR9IG5vdCBnaXZlbikgYW5kIGBmYWxzZWAgd2hlbiBhIHtAbGluayB2YXVsdH0gcGF0aCBpcyBnaXZlbiwgc29cbiAgICogYSByZWFsIHZhdWx0IGlzIG5ldmVyIGRlbGV0ZWQuIFNldCBleHBsaWNpdGx5IHRvIG92ZXJyaWRlLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkUmVtb3ZlVmF1bHRPbkRpc3Bvc2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBYnNvbHV0ZSBwYXRoIHRvIGFuIGV4aXN0aW5nIHZhdWx0IHRvIG9wZW4uIFdoZW4gb21pdHRlZCwgYW4gZW1wdHkgdGVtcG9yYXJ5XG4gICAqIHZhdWx0IGlzIGNyZWF0ZWQgKGFuZCByZW1vdmVkIG9uIGRpc3Bvc2UgdW5sZXNzXG4gICAqIHtAbGluayBzaG91bGRSZW1vdmVWYXVsdE9uRGlzcG9zZX0gc2F5cyBvdGhlcndpc2UpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdW5kZWZpbmVkYFxuICAgKi9cbiAgcmVhZG9ubHkgdmF1bHQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSByZXNvbHZlZCBDRFAgaG9zdC9wb3J0IHBhaXIuXG4gKi9cbmludGVyZmFjZSBSZXNvbHZlZEVuZHBvaW50IHtcbiAgaG9zdDogc3RyaW5nO1xuICBwb3J0OiBudW1iZXI7XG59XG5cbi8qKlxuICogTGF1bmNoZXMgKG9yIGF0dGFjaGVzIHRvKSBhIENEUC1lbmFibGVkIE9ic2lkaWFuIGluc3RhbmNlLCBvcGVucyBhIHZhdWx0LCBhbmRcbiAqIGJvb3RzdHJhcHMgdGhlIHJ1bnRpbWUgaGVscGVyIG5hbWVzcGFjZSwgcmV0dXJuaW5nIGEgZGlzcG9zYWJsZSBjb25uZWN0aW9uLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gQ29ubmVjdGlvbiBvcHRpb25zLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgbGl2ZSB7QGxpbmsgQ2RwQ29ubmVjdGlvbn0uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb25uZWN0VG9DZHAob3B0aW9ucz86IENvbm5lY3RUb0NkcE9wdGlvbnMpOiBQcm9taXNlPENkcENvbm5lY3Rpb24+IHtcbiAgY29uc3QgdHJhbnNwb3J0T3B0aW9uczogT2JzaWRpYW5DZHBUcmFuc3BvcnRPcHRpb25zID0ge1xuICAgIGlzT2JzaWRpYW5BcHBWaXNpYmxlOiBvcHRpb25zPy5pc09ic2lkaWFuQXBwVmlzaWJsZSA/PyB0cnVlLFxuICAgIHR5cGU6ICdvYnNpZGlhbi1jZHAnLFxuICAgIC4uLihvcHRpb25zPy5jb21tYW5kVGltZW91dEluTWlsbGlzZWNvbmRzICE9PSB1bmRlZmluZWQgJiYgeyBjb21tYW5kVGltZW91dEluTWlsbGlzZWNvbmRzOiBvcHRpb25zLmNvbW1hbmRUaW1lb3V0SW5NaWxsaXNlY29uZHMgfSksXG4gICAgLi4uKG9wdGlvbnM/Lmhvc3QgIT09IHVuZGVmaW5lZCAmJiB7IGhvc3Q6IG9wdGlvbnMuaG9zdCB9KSxcbiAgICAuLi4ob3B0aW9ucz8ub2JzaWRpYW5JbnN0YWxsZXJWZXJzaW9uICE9PSB1bmRlZmluZWQgJiYgeyBvYnNpZGlhbkluc3RhbGxlclZlcnNpb246IG9wdGlvbnMub2JzaWRpYW5JbnN0YWxsZXJWZXJzaW9uIH0pLFxuICAgIC4uLihvcHRpb25zPy5vYnNpZGlhblZlcnNpb24gIT09IHVuZGVmaW5lZCAmJiB7IG9ic2lkaWFuVmVyc2lvbjogb3B0aW9ucy5vYnNpZGlhblZlcnNpb24gfSksXG4gICAgLi4uKG9wdGlvbnM/LnBvcnQgIT09IHVuZGVmaW5lZCAmJiB7IHBvcnQ6IG9wdGlvbnMucG9ydCB9KVxuICB9O1xuXG4gIGNvbnN0IHRyYW5zcG9ydCA9IGF3YWl0IGNyZWF0ZVRyYW5zcG9ydEZyb21PcHRpb25zKHRyYW5zcG9ydE9wdGlvbnMpO1xuICBjb25zdCB2YXVsdCA9IG5ldyBUZW1wVmF1bHQob3B0aW9ucz8udmF1bHQpO1xuICBjb25zdCBzaG91bGRSZW1vdmVWYXVsdE9uRGlzcG9zZSA9IG9wdGlvbnM/LnNob3VsZFJlbW92ZVZhdWx0T25EaXNwb3NlID8/IChvcHRpb25zPy52YXVsdCA9PT0gdW5kZWZpbmVkKTtcblxuICAvLyBSZWdpc3RlcmluZyB0aGUgdmF1bHQgaXMgd2hhdCBsYXVuY2hlcyB0aGUgb3duZWQgaW5zdGFuY2UgKHByb3Zpc2lvbnMgdGhlXG4gIC8vIEFzYXIsIG9wZW5zIHRoZSB2YXVsdCwgYW5kIGJvb3RzdHJhcHMgdGhlIGhlbHBlciBuYW1lc3BhY2UpLCBvciBvcGVucyB0aGVcbiAgLy8gVmF1bHQgaW4gdGhlIGF0dGFjaGVkIGluc3RhbmNlLlxuICBhd2FpdCB2YXVsdC5yZWdpc3Rlcih0cmFuc3BvcnQpO1xuXG4gIGNvbnN0IHsgaG9zdCwgcG9ydCB9ID0gcmVzb2x2ZUVuZHBvaW50KHRyYW5zcG9ydCwgb3B0aW9ucyk7XG4gIGNvbnN0IGNkcFVybCA9IGBodHRwOi8vJHtob3N0fToke1N0cmluZyhwb3J0KX1gO1xuXG4gIGNvbnN0IGNvbm5lY3Rpb246IENkcENvbm5lY3Rpb24gPSB7XG4gICAgY2RwVXJsLFxuXG4gICAgYXN5bmMgZGlzcG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChzaG91bGRSZW1vdmVWYXVsdE9uRGlzcG9zZSkge1xuICAgICAgICAgIGF3YWl0IHZhdWx0LmRpc3Bvc2UodHJhbnNwb3J0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhd2FpdCB0cmFuc3BvcnQudW5yZWdpc3RlclZhdWx0KHZhdWx0LnBhdGgpO1xuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBhd2FpdCB0cmFuc3BvcnQuZGlzcG9zZT8uKCk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGV2YWxJbk9ic2lkaWFuPEFyZ3MgZXh0ZW5kcyBHZW5lcmljT2JqZWN0LCBSZXN1bHQsIFRDb250ZXh0SWQgZXh0ZW5kcyBDb250ZXh0SWQ8dW5rbm93bj4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ+KFxuICAgICAgcGFyYW1zOiBFeGNlcHQ8RXZhbEluT2JzaWRpYW5QYXJhbXM8QXJncywgUmVzdWx0LCBUQ29udGV4dElkPiwgJ3RyYW5zcG9ydCcgfCAndmF1bHRQYXRoJz5cbiAgICApOiBQcm9taXNlPFJlc3VsdD4ge1xuICAgICAgcmV0dXJuIGV2YWxJbk9ic2lkaWFuPEFyZ3MsIFJlc3VsdCwgVENvbnRleHRJZD4oeyAuLi5wYXJhbXMsIHRyYW5zcG9ydCwgdmF1bHRQYXRoOiB2YXVsdC5wYXRoIH0pO1xuICAgIH0sXG5cbiAgICBhc3luYyBpbnZva2UoZXhwcmVzc2lvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgIHJldHVybiB0cmFuc3BvcnQuZXZhbHVhdGUoZXhwcmVzc2lvbiwgeyBjd2Q6IHZhdWx0LnBhdGggfSk7XG4gICAgfSxcblxuICAgIHBvcnQsXG5cbiAgICBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICBhd2FpdCBjb25uZWN0aW9uLmRpc3Bvc2UoKTtcbiAgICB9LFxuXG4gICAgdmF1bHRcbiAgfTtcblxuICByZXR1cm4gY29ubmVjdGlvbjtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgQ0RQIGhvc3QvcG9ydCBmb3IgdGhlIGNvbm5lY3Rpb246IGZyb20gdGhlIG93bmVkIGluc3RhbmNlJ3NcbiAqIGxhdW5jaGVkIGVuZHBvaW50IHdoZW4gcHJlc2VudCwgb3RoZXJ3aXNlIGZyb20gdGhlIGF0dGFjaCBvcHRpb25zLlxuICpcbiAqIEBwYXJhbSB0cmFuc3BvcnQgLSBUaGUgdHJhbnNwb3J0IGNyZWF0ZWQgZm9yIHRoaXMgY29ubmVjdGlvbi5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIGNvbm5lY3Rpb24gb3B0aW9ucy5cbiAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBob3N0IGFuZCBwb3J0LlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgcG9ydCBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUVuZHBvaW50KHRyYW5zcG9ydDogdW5rbm93biwgb3B0aW9uczogQ29ubmVjdFRvQ2RwT3B0aW9ucyB8IHVuZGVmaW5lZCk6IFJlc29sdmVkRW5kcG9pbnQge1xuICBpZiAodHJhbnNwb3J0IGluc3RhbmNlb2YgRGVza3RvcENkcFRyYW5zcG9ydCkge1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdHJhbnNwb3J0LmdldE93bmVkSW5zdGFuY2VFbmRwb2ludCgpO1xuICAgIGlmIChlbmRwb2ludCkge1xuICAgICAgcmV0dXJuIHsgaG9zdDogZW5kcG9pbnQuaG9zdCwgcG9ydDogZW5kcG9pbnQucG9ydCB9O1xuICAgIH1cbiAgfVxuXG4gIGlmIChvcHRpb25zPy5wb3J0ICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4geyBob3N0OiBvcHRpb25zLmhvc3QgPz8gREVGQVVMVF9DRFBfSE9TVCwgcG9ydDogb3B0aW9ucy5wb3J0IH07XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ2Nvbm5lY3RUb0NkcDogY291bGQgbm90IGRldGVybWluZSB0aGUgQ0RQIHBvcnQuJyk7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBd0JBLDhCQUErQjtBQUMvQix3QkFBMEI7QUFDMUIsbUNBQW9DO0FBQ3BDLCtCQUEyQztBQUUzQyxNQUFNLG1CQUFtQjtBQW9KekIsZUFBc0IsYUFBYSxTQUF1RDtBQUN4RixRQUFNLG1CQUFnRDtBQUFBLElBQ3BELHNCQUFzQixTQUFTLHdCQUF3QjtBQUFBLElBQ3ZELE1BQU07QUFBQSxJQUNOLEdBQUksU0FBUyxpQ0FBaUMsVUFBYSxFQUFFLDhCQUE4QixRQUFRLDZCQUE2QjtBQUFBLElBQ2hJLEdBQUksU0FBUyxTQUFTLFVBQWEsRUFBRSxNQUFNLFFBQVEsS0FBSztBQUFBLElBQ3hELEdBQUksU0FBUyw2QkFBNkIsVUFBYSxFQUFFLDBCQUEwQixRQUFRLHlCQUF5QjtBQUFBLElBQ3BILEdBQUksU0FBUyxvQkFBb0IsVUFBYSxFQUFFLGlCQUFpQixRQUFRLGdCQUFnQjtBQUFBLElBQ3pGLEdBQUksU0FBUyxTQUFTLFVBQWEsRUFBRSxNQUFNLFFBQVEsS0FBSztBQUFBLEVBQzFEO0FBRUEsUUFBTSxZQUFZLFVBQU0scURBQTJCLGdCQUFnQjtBQUNuRSxRQUFNLFFBQVEsSUFBSSw0QkFBVSxTQUFTLEtBQUs7QUFDMUMsUUFBTSw2QkFBNkIsU0FBUyw4QkFBK0IsU0FBUyxVQUFVO0FBSzlGLFFBQU0sTUFBTSxTQUFTLFNBQVM7QUFFOUIsUUFBTSxFQUFFLE1BQU0sS0FBSyxJQUFJLGdCQUFnQixXQUFXLE9BQU87QUFDekQsUUFBTSxTQUFTLFVBQVUsSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDO0FBRTdDLFFBQU0sYUFBNEI7QUFBQSxJQUNoQztBQUFBLElBRUEsTUFBTSxVQUF5QjtBQUM3QixVQUFJO0FBQ0YsWUFBSSw0QkFBNEI7QUFDOUIsZ0JBQU0sTUFBTSxRQUFRLFNBQVM7QUFBQSxRQUMvQixPQUFPO0FBQ0wsZ0JBQU0sVUFBVSxnQkFBZ0IsTUFBTSxJQUFJO0FBQUEsUUFDNUM7QUFBQSxNQUNGLFVBQUU7QUFDQSxjQUFNLFVBQVUsVUFBVTtBQUFBLE1BQzVCO0FBQUEsSUFDRjtBQUFBLElBRUEsTUFBTSxlQUNKLFFBQ2lCO0FBQ2pCLGlCQUFPLHdDQUF5QyxFQUFFLEdBQUcsUUFBUSxXQUFXLFdBQVcsTUFBTSxLQUFLLENBQUM7QUFBQSxJQUNqRztBQUFBLElBRUEsTUFBTSxPQUFPLFlBQXFDO0FBQ2hELGFBQU8sVUFBVSxTQUFTLFlBQVksRUFBRSxLQUFLLE1BQU0sS0FBSyxDQUFDO0FBQUEsSUFDM0Q7QUFBQSxJQUVBO0FBQUEsSUFFQSxPQUFPLE9BQU8sWUFBWSxJQUFtQjtBQUMzQyxZQUFNLFdBQVcsUUFBUTtBQUFBLElBQzNCO0FBQUEsSUFFQTtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7QUFXQSxTQUFTLGdCQUFnQixXQUFvQixTQUE0RDtBQUN2RyxNQUFJLHFCQUFxQixrREFBcUI7QUFDNUMsVUFBTSxXQUFXLFVBQVUseUJBQXlCO0FBQ3BELFFBQUksVUFBVTtBQUNaLGFBQU8sRUFBRSxNQUFNLFNBQVMsTUFBTSxNQUFNLFNBQVMsS0FBSztBQUFBLElBQ3BEO0FBQUEsRUFDRjtBQUVBLE1BQUksU0FBUyxTQUFTLFFBQVc7QUFDL0IsV0FBTyxFQUFFLE1BQU0sUUFBUSxRQUFRLGtCQUFrQixNQUFNLFFBQVEsS0FBSztBQUFBLEVBQ3RFO0FBRUEsUUFBTSxJQUFJLE1BQU0saURBQWlEO0FBQ25FOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Nvbm5lY3QtdG8tY2RwLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUHJvZ3JhbW1hdGljIGhlbHBlciB0byBsYXVuY2ggKG9yIGF0dGFjaCB0bykgYSBDRFAtZW5hYmxlZCBPYnNpZGlhbiBpbnN0YW5jZVxuICogd2l0aCB0aGUgcnVudGltZSBoZWxwZXIgbmFtZXNwYWNlIGJvb3RzdHJhcHBlZCwgZm9yIGFkLWhvYyByZWFsLWFwcCBkZWJ1Z2dpbmcuXG4gKlxuICogQSBzaW5nbGUge0BsaW5rIGNvbm5lY3RUb0NkcH0gY2FsbCByZXNvbHZlcyB0aGUgb3duZWQtaW5zdGFuY2UgY29uZmlnLCBvcGVucyBhXG4gKiB2YXVsdCwgYW5kIGJvb3RzdHJhcHMgYHdpbmRvdy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nYCAoc28gYGV2YWxXcmFwcGVyYCxcbiAqIHRoZSBiYXNlIGBsaWJgIGhlbHBlcnMsIGBlcnJvclRvU3RyaW5nYCwgYGdldE9ic2lkaWFuTW9kdWxlYCwgXHUyMDI2IGFyZSBhdmFpbGFibGUpLCB0aGVuXG4gKiBoYW5kcyBiYWNrIGEgZGlzcG9zYWJsZSB7QGxpbmsgQ2RwQ29ubmVjdGlvbn0gZXhwb3NpbmcgdGhlIGNob3NlbiBDRFAgcG9ydCwgYVxuICogcmF3IHtAbGluayBDZHBDb25uZWN0aW9uLmludm9rZX0gYW5kIHRoZSByaWNoIHtAbGluayBDZHBDb25uZWN0aW9uLmV2YWxJbk9ic2lkaWFufS5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gSW50ZWdyYXRpb24tdGltZSBjb2RlIChsYXVuY2hlcyBPYnNpZGlhbiAvIENEUCkgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgRXhjZXB0IH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHR5cGUgeyBDb250ZXh0SWQgfSBmcm9tICcuL2NvbnRleHQtaWQuY2pzJztcbmltcG9ydCB0eXBlIHtcbiAgRXZhbEluT2JzaWRpYW5QYXJhbXMsXG4gIEdlbmVyaWNPYmplY3Rcbn0gZnJvbSAnLi9ldmFsLWluLW9ic2lkaWFuLmNqcyc7XG5pbXBvcnQgdHlwZSB7IE9ic2lkaWFuQ2RwVHJhbnNwb3J0T3B0aW9ucyB9IGZyb20gJy4vdHJhbnNwb3J0LW9wdGlvbnMuY2pzJztcblxuaW1wb3J0IHsgZXZhbEluT2JzaWRpYW4gfSBmcm9tICcuL2V2YWwtaW4tb2JzaWRpYW4uY2pzJztcbmltcG9ydCB7IFRlbXBWYXVsdCB9IGZyb20gJy4vdGVtcC12YXVsdC5janMnO1xuaW1wb3J0IHsgRGVza3RvcENkcFRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWRlc2t0b3AtY2RwLmNqcyc7XG5pbXBvcnQgeyBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9ucyB9IGZyb20gJy4vdHJhbnNwb3J0LWZhY3RvcnkuY2pzJztcblxuY29uc3QgREVGQVVMVF9DRFBfSE9TVCA9ICdsb2NhbGhvc3QnO1xuXG4vKipcbiAqIEEgbGl2ZSBjb25uZWN0aW9uIHRvIGEgQ0RQLWVuYWJsZWQgT2JzaWRpYW4gaW5zdGFuY2Ugd2l0aCB0aGUgcnVudGltZSBoZWxwZXJcbiAqIG5hbWVzcGFjZSBib290c3RyYXBwZWQuXG4gKlxuICogSW1wbGVtZW50cyBgQXN5bmNEaXNwb3NhYmxlYCwgc28gYGF3YWl0IHVzaW5nIGNvbm4gPSBhd2FpdCBjb25uZWN0VG9DZHAoXHUyMDI2KWBcbiAqIGRpc3Bvc2VzIGl0IChraWxsaW5nIGFuIG93bmVkIGluc3RhbmNlIGFuZCBcdTIwMTQgZm9yIGEgdGhyb3ctYXdheSB0ZW1wIHZhdWx0IFx1MjAxNFxuICogcmVtb3ZpbmcgaXRzIGRpcmVjdG9yeSkgYXV0b21hdGljYWxseS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZHBDb25uZWN0aW9uIGV4dGVuZHMgQXN5bmNEaXNwb3NhYmxlIHtcbiAgLyoqXG4gICAqIFRoZSBiYXNlIENEUCBVUkwsIGUuZy4gYGh0dHA6Ly9sb2NhbGhvc3Q6NTE4ODhgLlxuICAgKi9cbiAgcmVhZG9ubHkgY2RwVXJsOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERpc3Bvc2VzIHRoZSBjb25uZWN0aW9uOiBraWxscyBhbiBvd25lZCBpbnN0YW5jZSBhbmQgcmVtb3ZlcyBpdHMgaXNvbGF0ZWRcbiAgICogdXNlci1kYXRhIGRpci4gVGhlIHZhdWx0IGRpcmVjdG9yeSBpcyByZW1vdmVkIG9ubHkgd2hlbiBpdCBpcyBhIHRocm93LWF3YXlcbiAgICogdGVtcCB2YXVsdCAoc2VlIHtAbGluayBDb25uZWN0VG9DZHBPcHRpb25zLnNob3VsZFJlbW92ZVZhdWx0T25EaXNwb3NlfSk7IGFcbiAgICogcmVhbCB2YXVsdCBwYXNzZWQgdmlhIHtAbGluayBDb25uZWN0VG9DZHBPcHRpb25zLnZhdWx0fSBpcyBuZXZlciBkZWxldGVkLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgZGlzcG9zYWwgY29tcGxldGVzLlxuICAgKi9cbiAgZGlzcG9zZSgpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZXMgYSBzZWxmLWNvbnRhaW5lZCBmdW5jdGlvbiBpbnNpZGUgT2JzaWRpYW4gdmlhIHRoZSByaWNoIGhlbHBlclxuICAgKiBwYXRoLCByZWNlaXZpbmcgYHsgYXBwLCBsaWIsIG9ic2lkaWFuTW9kdWxlLCBjb250ZXh0IH1gIHBsdXMgYW55IGBhcmdzYFxuICAgKiAoc2hhcmVkIGhlbHBlcnMgbGlrZSBgdHlwZUludG9FZGl0b3JgIC8gYHdhaXRVbnRpbGAgbGl2ZSBvbiBgbGliYCkuIE1pcnJvcnNcbiAgICogdGhlIHRvcC1sZXZlbCBgZXZhbEluT2JzaWRpYW5gLCB3aXRoIHRoZSB0cmFuc3BvcnQgYW5kIHZhdWx0IHBhdGggcHJlLWJvdW5kXG4gICAqIHRvIHRoaXMgY29ubmVjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBldmFsdWF0aW9uIHBhcmFtZXRlcnMgKGBmbmAsIG9wdGlvbmFsIGBhcmdzYC9gY29udGV4dElkYCkuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHJldHVybiB2YWx1ZSBvZiBgZm5gLlxuICAgKi9cbiAgZXZhbEluT2JzaWRpYW48QXJncyBleHRlbmRzIEdlbmVyaWNPYmplY3QsIFJlc3VsdCwgVENvbnRleHRJZCBleHRlbmRzIENvbnRleHRJZDx1bmtub3duPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4oXG4gICAgcGFyYW1zOiBFeGNlcHQ8RXZhbEluT2JzaWRpYW5QYXJhbXM8QXJncywgUmVzdWx0LCBUQ29udGV4dElkPiwgJ3RyYW5zcG9ydCcgfCAndmF1bHRQYXRoJz5cbiAgKTogUHJvbWlzZTxSZXN1bHQ+O1xuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZXMgYSByYXcgSmF2YVNjcmlwdCBleHByZXNzaW9uIGluc2lkZSBPYnNpZGlhbiBhbmQgcmV0dXJucyB0aGVcbiAgICogbm9ybWFsaXplZCBzdHJpbmcgcmVzdWx0IChlLmcuIGAnNSdgLCBhIEpTT04gc3RyaW5nLCBvciBgJyhubyBvdXRwdXQpJ2ApLlxuICAgKlxuICAgKiBAcGFyYW0gZXhwcmVzc2lvbiAtIEEgc2VsZi1jb250YWluZWQgSmF2YVNjcmlwdCBleHByZXNzaW9uLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSByYXcgcmVzdWx0IHN0cmluZy5cbiAgICovXG4gIGludm9rZShleHByZXNzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFRoZSBDRFAgcG9ydCB0aGUgaW5zdGFuY2UgaXMgcmVhY2hhYmxlIG9uICh0aGUgZnJlZSBwb3J0IGNob3NlbiBmb3IgYW5cbiAgICogb3duZWQgaW5zdGFuY2UsIG9yIHRoZSBhdHRhY2hlZCB7QGxpbmsgQ29ubmVjdFRvQ2RwT3B0aW9ucy5wb3J0fSkuXG4gICAqL1xuICByZWFkb25seSBwb3J0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBvcGVuZWQgdmF1bHQuIEV4cG9zZXMgYHBhdGhgIGFuZCBgcG9wdWxhdGUoLi4uKWAgZm9yIHNlZWRpbmcgZmlsZXMuXG4gICAqL1xuICByZWFkb25seSB2YXVsdDogVGVtcFZhdWx0O1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBjb25uZWN0VG9DZHB9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RUb0NkcE9wdGlvbnMge1xuICAvKipcbiAgICogVGltZW91dCBpbiBtaWxsaXNlY29uZHMgZm9yIGluZGl2aWR1YWwgQ0RQIGNvbW1hbmRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgMzAwMDBgXG4gICAqL1xuICByZWFkb25seSBjb21tYW5kVGltZW91dEluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDRFAgaG9zdC5cbiAgICpcbiAgICogQGRlZmF1bHQgYCdsb2NhbGhvc3QnYFxuICAgKi9cbiAgcmVhZG9ubHkgaG9zdD86IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgT2JzaWRpYW4gd2luZG93IGlzIHNob3duIG9uIHNjcmVlbi4gVW5saWtlIHRoZSB0ZXN0IHRyYW5zcG9ydHNcbiAgICogKGhpZGRlbiBieSBkZWZhdWx0KSwgYGNvbm5lY3RUb0NkcGAgKipkZWZhdWx0cyB0byBgdHJ1ZWAqKiBcdTIwMTQgaXQgaXMgbWVhbnQgZm9yXG4gICAqIHdhdGNoaW5nL2RlYnVnZ2luZyBhIHJlYWwgT2JzaWRpYW4uIFNldCBgZmFsc2VgIHRvIGxhdW5jaCBpdCBvZmYtc2NyZWVuLlxuICAgKiBJZ25vcmVkIGluIGF0dGFjaCBtb2RlICh7QGxpbmsgcG9ydH0gc2V0KS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBpc09ic2lkaWFuQXBwVmlzaWJsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFBpbnMgdGhlIEVsZWN0cm9uIHNoZWxsIChpbnN0YWxsZXIgYnVpbGQpIHRoZSBvd25lZCBpbnN0YW5jZSBydW5zLiBBY2NlcHRzXG4gICAqIGAneC55LnonYCwgYCdwdWJsaWMtbGF0ZXN0J2AsIG9yIGAnY2F0YWx5c3QtbGF0ZXN0J2AuIElnbm9yZWQgd2hlblxuICAgKiB7QGxpbmsgcG9ydH0gKGF0dGFjaCBtb2RlKSBpcyBzZXQuIFdoZW4gb21pdHRlZCwgdGhlIGluc3RhbGxlZCBzaGVsbCBpcyB1c2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdW5kZWZpbmVkYFxuICAgKi9cbiAgcmVhZG9ubHkgb2JzaWRpYW5JbnN0YWxsZXJWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQaW5zIHRoZSBPYnNpZGlhbiBhcHAgdmVyc2lvbiAoYXNhcikgdGhlIG93bmVkIGluc3RhbmNlIHJ1bnMuIEFjY2VwdHNcbiAgICogYCd4LnkueidgLCBgJ3B1YmxpYy1sYXRlc3QnYCwgb3IgYCdjYXRhbHlzdC1sYXRlc3QnYC4gSWdub3JlZCB3aGVuXG4gICAqIHtAbGluayBwb3J0fSAoYXR0YWNoIG1vZGUpIGlzIHNldC4gV2hlbiBvbWl0dGVkLCB0aGUgaW5zdGFsbGVkIHZlcnNpb24gaXMgdXNlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYHVuZGVmaW5lZGBcbiAgICovXG4gIHJlYWRvbmx5IG9ic2lkaWFuVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogQ0RQIHBvcnQgb2YgYW4gYWxyZWFkeS1ydW5uaW5nIE9ic2lkaWFuIHRvICoqYXR0YWNoKiogdG8uIFdoZW4gb21pdHRlZCwgYW5cbiAgICogaXNvbGF0ZWQgaW5zdGFuY2UgaXMgbGF1bmNoZWQgb24gYW4gYXV0b21hdGljYWxseSBjaG9zZW4gZnJlZSBwb3J0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdW5kZWZpbmVkYFxuICAgKi9cbiAgcmVhZG9ubHkgcG9ydD86IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZW1vdmUgdGhlIHZhdWx0IGRpcmVjdG9yeSBvbiB7QGxpbmsgQ2RwQ29ubmVjdGlvbi5kaXNwb3NlfS5cbiAgICpcbiAgICogV2hlbiBvbWl0dGVkLCBkZWZhdWx0cyB0byBgdHJ1ZWAgZm9yIGFuIGltcGxpY2l0IHRocm93LWF3YXkgdGVtcCB2YXVsdFxuICAgKiAoe0BsaW5rIHZhdWx0fSBub3QgZ2l2ZW4pIGFuZCBgZmFsc2VgIHdoZW4gYSB7QGxpbmsgdmF1bHR9IHBhdGggaXMgZ2l2ZW4sIHNvXG4gICAqIGEgcmVhbCB2YXVsdCBpcyBuZXZlciBkZWxldGVkLiBTZXQgZXhwbGljaXRseSB0byBvdmVycmlkZS5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFJlbW92ZVZhdWx0T25EaXNwb3NlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQWJzb2x1dGUgcGF0aCB0byBhbiBleGlzdGluZyB2YXVsdCB0byBvcGVuLiBXaGVuIG9taXR0ZWQsIGFuIGVtcHR5IHRlbXBvcmFyeVxuICAgKiB2YXVsdCBpcyBjcmVhdGVkIChhbmQgcmVtb3ZlZCBvbiBkaXNwb3NlIHVubGVzc1xuICAgKiB7QGxpbmsgc2hvdWxkUmVtb3ZlVmF1bHRPbkRpc3Bvc2V9IHNheXMgb3RoZXJ3aXNlKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHVuZGVmaW5lZGBcbiAgICovXG4gIHJlYWRvbmx5IHZhdWx0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgcmVzb2x2ZWQgQ0RQIGhvc3QvcG9ydCBwYWlyLlxuICovXG5pbnRlcmZhY2UgUmVzb2x2ZWRFbmRwb2ludCB7XG4gIGhvc3Q6IHN0cmluZztcbiAgcG9ydDogbnVtYmVyO1xufVxuXG4vKipcbiAqIExhdW5jaGVzIChvciBhdHRhY2hlcyB0bykgYSBDRFAtZW5hYmxlZCBPYnNpZGlhbiBpbnN0YW5jZSwgb3BlbnMgYSB2YXVsdCwgYW5kXG4gKiBib290c3RyYXBzIHRoZSBydW50aW1lIGhlbHBlciBuYW1lc3BhY2UsIHJldHVybmluZyBhIGRpc3Bvc2FibGUgY29ubmVjdGlvbi5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIENvbm5lY3Rpb24gb3B0aW9ucy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGxpdmUge0BsaW5rIENkcENvbm5lY3Rpb259LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29ubmVjdFRvQ2RwKG9wdGlvbnM/OiBDb25uZWN0VG9DZHBPcHRpb25zKTogUHJvbWlzZTxDZHBDb25uZWN0aW9uPiB7XG4gIGNvbnN0IHRyYW5zcG9ydE9wdGlvbnM6IE9ic2lkaWFuQ2RwVHJhbnNwb3J0T3B0aW9ucyA9IHtcbiAgICBpc09ic2lkaWFuQXBwVmlzaWJsZTogb3B0aW9ucz8uaXNPYnNpZGlhbkFwcFZpc2libGUgPz8gdHJ1ZSxcbiAgICB0eXBlOiAnb2JzaWRpYW4tY2RwJyxcbiAgICAuLi4ob3B0aW9ucz8uY29tbWFuZFRpbWVvdXRJbk1pbGxpc2Vjb25kcyAhPT0gdW5kZWZpbmVkICYmIHsgY29tbWFuZFRpbWVvdXRJbk1pbGxpc2Vjb25kczogb3B0aW9ucy5jb21tYW5kVGltZW91dEluTWlsbGlzZWNvbmRzIH0pLFxuICAgIC4uLihvcHRpb25zPy5ob3N0ICE9PSB1bmRlZmluZWQgJiYgeyBob3N0OiBvcHRpb25zLmhvc3QgfSksXG4gICAgLi4uKG9wdGlvbnM/Lm9ic2lkaWFuSW5zdGFsbGVyVmVyc2lvbiAhPT0gdW5kZWZpbmVkICYmIHsgb2JzaWRpYW5JbnN0YWxsZXJWZXJzaW9uOiBvcHRpb25zLm9ic2lkaWFuSW5zdGFsbGVyVmVyc2lvbiB9KSxcbiAgICAuLi4ob3B0aW9ucz8ub2JzaWRpYW5WZXJzaW9uICE9PSB1bmRlZmluZWQgJiYgeyBvYnNpZGlhblZlcnNpb246IG9wdGlvbnMub2JzaWRpYW5WZXJzaW9uIH0pLFxuICAgIC4uLihvcHRpb25zPy5wb3J0ICE9PSB1bmRlZmluZWQgJiYgeyBwb3J0OiBvcHRpb25zLnBvcnQgfSlcbiAgfTtcblxuICBjb25zdCB0cmFuc3BvcnQgPSBhd2FpdCBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9ucyh0cmFuc3BvcnRPcHRpb25zKTtcbiAgY29uc3QgdmF1bHQgPSBuZXcgVGVtcFZhdWx0KG9wdGlvbnM/LnZhdWx0KTtcbiAgY29uc3Qgc2hvdWxkUmVtb3ZlVmF1bHRPbkRpc3Bvc2UgPSBvcHRpb25zPy5zaG91bGRSZW1vdmVWYXVsdE9uRGlzcG9zZSA/PyAob3B0aW9ucz8udmF1bHQgPT09IHVuZGVmaW5lZCk7XG5cbiAgLy8gUmVnaXN0ZXJpbmcgdGhlIHZhdWx0IGlzIHdoYXQgbGF1bmNoZXMgdGhlIG93bmVkIGluc3RhbmNlIChwcm92aXNpb25zIHRoZVxuICAvLyBBc2FyLCBvcGVucyB0aGUgdmF1bHQsIGFuZCBib290c3RyYXBzIHRoZSBoZWxwZXIgbmFtZXNwYWNlKSwgb3Igb3BlbnMgdGhlXG4gIC8vIFZhdWx0IGluIHRoZSBhdHRhY2hlZCBpbnN0YW5jZS5cbiAgYXdhaXQgdmF1bHQucmVnaXN0ZXIodHJhbnNwb3J0KTtcblxuICBjb25zdCB7IGhvc3QsIHBvcnQgfSA9IHJlc29sdmVFbmRwb2ludCh0cmFuc3BvcnQsIG9wdGlvbnMpO1xuICBjb25zdCBjZHBVcmwgPSBgaHR0cDovLyR7aG9zdH06JHtTdHJpbmcocG9ydCl9YDtcblxuICBjb25zdCBjb25uZWN0aW9uOiBDZHBDb25uZWN0aW9uID0ge1xuICAgIGNkcFVybCxcblxuICAgIGFzeW5jIGRpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlVmF1bHRPbkRpc3Bvc2UpIHtcbiAgICAgICAgICBhd2FpdCB2YXVsdC5kaXNwb3NlKHRyYW5zcG9ydCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXdhaXQgdHJhbnNwb3J0LnVucmVnaXN0ZXJWYXVsdCh2YXVsdC5wYXRoKTtcbiAgICAgICAgfVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgYXdhaXQgdHJhbnNwb3J0LmRpc3Bvc2U/LigpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBldmFsSW5PYnNpZGlhbjxBcmdzIGV4dGVuZHMgR2VuZXJpY09iamVjdCwgUmVzdWx0LCBUQ29udGV4dElkIGV4dGVuZHMgQ29udGV4dElkPHVua25vd24+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPihcbiAgICAgIHBhcmFtczogRXhjZXB0PEV2YWxJbk9ic2lkaWFuUGFyYW1zPEFyZ3MsIFJlc3VsdCwgVENvbnRleHRJZD4sICd0cmFuc3BvcnQnIHwgJ3ZhdWx0UGF0aCc+XG4gICAgKTogUHJvbWlzZTxSZXN1bHQ+IHtcbiAgICAgIHJldHVybiBldmFsSW5PYnNpZGlhbjxBcmdzLCBSZXN1bHQsIFRDb250ZXh0SWQ+KHsgLi4ucGFyYW1zLCB0cmFuc3BvcnQsIHZhdWx0UGF0aDogdmF1bHQucGF0aCB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgaW52b2tlKGV4cHJlc3Npb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICByZXR1cm4gdHJhbnNwb3J0LmV2YWx1YXRlKGV4cHJlc3Npb24sIHsgY3dkOiB2YXVsdC5wYXRoIH0pO1xuICAgIH0sXG5cbiAgICBwb3J0LFxuXG4gICAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgYXdhaXQgY29ubmVjdGlvbi5kaXNwb3NlKCk7XG4gICAgfSxcblxuICAgIHZhdWx0XG4gIH07XG5cbiAgcmV0dXJuIGNvbm5lY3Rpb247XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIENEUCBob3N0L3BvcnQgZm9yIHRoZSBjb25uZWN0aW9uOiBmcm9tIHRoZSBvd25lZCBpbnN0YW5jZSdzXG4gKiBsYXVuY2hlZCBlbmRwb2ludCB3aGVuIHByZXNlbnQsIG90aGVyd2lzZSBmcm9tIHRoZSBhdHRhY2ggb3B0aW9ucy5cbiAqXG4gKiBAcGFyYW0gdHJhbnNwb3J0IC0gVGhlIHRyYW5zcG9ydCBjcmVhdGVkIGZvciB0aGlzIGNvbm5lY3Rpb24uXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBjb25uZWN0aW9uIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgaG9zdCBhbmQgcG9ydC5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIHBvcnQgY2Fubm90IGJlIGRldGVybWluZWQuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVFbmRwb2ludCh0cmFuc3BvcnQ6IHVua25vd24sIG9wdGlvbnM6IENvbm5lY3RUb0NkcE9wdGlvbnMgfCB1bmRlZmluZWQpOiBSZXNvbHZlZEVuZHBvaW50IHtcbiAgaWYgKHRyYW5zcG9ydCBpbnN0YW5jZW9mIERlc2t0b3BDZHBUcmFuc3BvcnQpIHtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRyYW5zcG9ydC5nZXRPd25lZEluc3RhbmNlRW5kcG9pbnQoKTtcbiAgICBpZiAoZW5kcG9pbnQpIHtcbiAgICAgIHJldHVybiB7IGhvc3Q6IGVuZHBvaW50Lmhvc3QsIHBvcnQ6IGVuZHBvaW50LnBvcnQgfTtcbiAgICB9XG4gIH1cblxuICBpZiAob3B0aW9ucz8ucG9ydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHsgaG9zdDogb3B0aW9ucy5ob3N0ID8/IERFRkFVTFRfQ0RQX0hPU1QsIHBvcnQ6IG9wdGlvbnMucG9ydCB9O1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdjb25uZWN0VG9DZHA6IGNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIENEUCBwb3J0LicpO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXdCQSw4QkFBK0I7QUFDL0Isd0JBQTBCO0FBQzFCLG1DQUFvQztBQUNwQywrQkFBMkM7QUFFM0MsTUFBTSxtQkFBbUI7QUFxSnpCLGVBQXNCLGFBQWEsU0FBdUQ7QUFDeEYsUUFBTSxtQkFBZ0Q7QUFBQSxJQUNwRCxzQkFBc0IsU0FBUyx3QkFBd0I7QUFBQSxJQUN2RCxNQUFNO0FBQUEsSUFDTixHQUFJLFNBQVMsaUNBQWlDLFVBQWEsRUFBRSw4QkFBOEIsUUFBUSw2QkFBNkI7QUFBQSxJQUNoSSxHQUFJLFNBQVMsU0FBUyxVQUFhLEVBQUUsTUFBTSxRQUFRLEtBQUs7QUFBQSxJQUN4RCxHQUFJLFNBQVMsNkJBQTZCLFVBQWEsRUFBRSwwQkFBMEIsUUFBUSx5QkFBeUI7QUFBQSxJQUNwSCxHQUFJLFNBQVMsb0JBQW9CLFVBQWEsRUFBRSxpQkFBaUIsUUFBUSxnQkFBZ0I7QUFBQSxJQUN6RixHQUFJLFNBQVMsU0FBUyxVQUFhLEVBQUUsTUFBTSxRQUFRLEtBQUs7QUFBQSxFQUMxRDtBQUVBLFFBQU0sWUFBWSxVQUFNLHFEQUEyQixnQkFBZ0I7QUFDbkUsUUFBTSxRQUFRLElBQUksNEJBQVUsU0FBUyxLQUFLO0FBQzFDLFFBQU0sNkJBQTZCLFNBQVMsOEJBQStCLFNBQVMsVUFBVTtBQUs5RixRQUFNLE1BQU0sU0FBUyxTQUFTO0FBRTlCLFFBQU0sRUFBRSxNQUFNLEtBQUssSUFBSSxnQkFBZ0IsV0FBVyxPQUFPO0FBQ3pELFFBQU0sU0FBUyxVQUFVLElBQUksSUFBSSxPQUFPLElBQUksQ0FBQztBQUU3QyxRQUFNLGFBQTRCO0FBQUEsSUFDaEM7QUFBQSxJQUVBLE1BQU0sVUFBeUI7QUFDN0IsVUFBSTtBQUNGLFlBQUksNEJBQTRCO0FBQzlCLGdCQUFNLE1BQU0sUUFBUSxTQUFTO0FBQUEsUUFDL0IsT0FBTztBQUNMLGdCQUFNLFVBQVUsZ0JBQWdCLE1BQU0sSUFBSTtBQUFBLFFBQzVDO0FBQUEsTUFDRixVQUFFO0FBQ0EsY0FBTSxVQUFVLFVBQVU7QUFBQSxNQUM1QjtBQUFBLElBQ0Y7QUFBQSxJQUVBLE1BQU0sZUFDSixRQUNpQjtBQUNqQixpQkFBTyx3Q0FBeUMsRUFBRSxHQUFHLFFBQVEsV0FBVyxXQUFXLE1BQU0sS0FBSyxDQUFDO0FBQUEsSUFDakc7QUFBQSxJQUVBLE1BQU0sT0FBTyxZQUFxQztBQUNoRCxhQUFPLFVBQVUsU0FBUyxZQUFZLEVBQUUsS0FBSyxNQUFNLEtBQUssQ0FBQztBQUFBLElBQzNEO0FBQUEsSUFFQTtBQUFBLElBRUEsT0FBTyxPQUFPLFlBQVksSUFBbUI7QUFDM0MsWUFBTSxXQUFXLFFBQVE7QUFBQSxJQUMzQjtBQUFBLElBRUE7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUNUO0FBV0EsU0FBUyxnQkFBZ0IsV0FBb0IsU0FBNEQ7QUFDdkcsTUFBSSxxQkFBcUIsa0RBQXFCO0FBQzVDLFVBQU0sV0FBVyxVQUFVLHlCQUF5QjtBQUNwRCxRQUFJLFVBQVU7QUFDWixhQUFPLEVBQUUsTUFBTSxTQUFTLE1BQU0sTUFBTSxTQUFTLEtBQUs7QUFBQSxJQUNwRDtBQUFBLEVBQ0Y7QUFFQSxNQUFJLFNBQVMsU0FBUyxRQUFXO0FBQy9CLFdBQU8sRUFBRSxNQUFNLFFBQVEsUUFBUSxrQkFBa0IsTUFBTSxRQUFRLEtBQUs7QUFBQSxFQUN0RTtBQUVBLFFBQU0sSUFBSSxNQUFNLGlEQUFpRDtBQUNuRTsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*
|
|
7
7
|
* A single {@link connectToCdp} call resolves the owned-instance config, opens a
|
|
8
8
|
* vault, and bootstraps `window.__obsidianIntegrationTesting` (so `evalWrapper`,
|
|
9
|
-
* `
|
|
9
|
+
* the base `lib` helpers, `errorToString`, `getObsidianModule`, … are available), then
|
|
10
10
|
* hands back a disposable {@link CdpConnection} exposing the chosen CDP port, a
|
|
11
11
|
* raw {@link CdpConnection.invoke} and the rich {@link CdpConnection.evalInObsidian}.
|
|
12
12
|
*/
|
|
@@ -38,9 +38,10 @@ export interface CdpConnection extends AsyncDisposable {
|
|
|
38
38
|
dispose(): Promise<void>;
|
|
39
39
|
/**
|
|
40
40
|
* Evaluates a self-contained function inside Obsidian via the rich helper
|
|
41
|
-
* path, receiving `{ app,
|
|
42
|
-
*
|
|
43
|
-
* path pre-bound
|
|
41
|
+
* path, receiving `{ app, lib, obsidianModule, context }` plus any `args`
|
|
42
|
+
* (shared helpers like `typeIntoEditor` / `waitUntil` live on `lib`). Mirrors
|
|
43
|
+
* the top-level `evalInObsidian`, with the transport and vault path pre-bound
|
|
44
|
+
* to this connection.
|
|
44
45
|
*
|
|
45
46
|
* @param params - The evaluation parameters (`fn`, optional `args`/`contextId`).
|
|
46
47
|
* @returns A {@link Promise} that resolves to the return value of `fn`.
|
|
@@ -34,7 +34,7 @@ async function enablePluginWithErrorCapture({ app, pluginId }) {
|
|
|
34
34
|
return result;
|
|
35
35
|
} catch (error) {
|
|
36
36
|
const holder = window;
|
|
37
|
-
errorMessage = holder.__obsidianIntegrationTesting?.
|
|
37
|
+
errorMessage = holder.__obsidianIntegrationTesting?.errorToString(error) ?? String(error);
|
|
38
38
|
throw error;
|
|
39
39
|
}
|
|
40
40
|
};
|
|
@@ -57,4 +57,4 @@ async function enablePluginWithErrorCapture({ app, pluginId }) {
|
|
|
57
57
|
0 && (module.exports = {
|
|
58
58
|
enablePluginWithErrorCapture
|
|
59
59
|
});
|
|
60
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2VuYWJsZS1wbHVnaW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBTaGFyZWQgaGVscGVyIGZvciBlbmFibGluZyBhbiBPYnNpZGlhbiBwbHVnaW4gd2l0aCBlcnJvciBjYXB0dXJlLlxuICogVXNlZCBieSBib3RoIHRoZSBnbG9iYWwgc2V0dXAgYW5kIGludGVncmF0aW9uIHRlc3RzLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGNvZGUgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IENvbW1vbkFyZ3MgfSBmcm9tICcuL2V2YWwtaW4tb2JzaWRpYW4uY2pzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZW5hYmxlUGx1Z2luV2l0aEVycm9yQ2FwdHVyZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW5hYmxlUGx1Z2luUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBJRCBvZiB0aGUgcGx1Z2luIHRvIGVuYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbklkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIGVuYWJsaW5nIGEgcGx1Z2luIHdpdGggZXJyb3IgY2FwdHVyZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbmFibGVQbHVnaW5SZXN1bHQge1xuICAvKipcbiAgICogVGhlIGVycm9yIG1lc3NhZ2UgaWYgdGhlIHBsdWdpbiBmYWlsZWQgdG8gbG9hZCwgb3IgYHVuZGVmaW5lZGAgaWYgaXQgbG9hZGVkIHN1Y2Nlc3NmdWxseS5cbiAgICovXG4gIHJlYWRvbmx5IGVycm9yTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBwbHVnaW4gaXMgaW4gdGhlIGVuYWJsZWQgc2V0IGFmdGVyIHRoZSBlbmFibGUgYXR0ZW1wdC5cbiAgICogQSBwbHVnaW4gY2FuIGJlIFwiZW5hYmxlZFwiIChjb25maWd1cmVkKSBidXQgbm90IFwibG9hZGVkXCIgKGZhaWxlZCB0byBpbml0aWFsaXplKS5cbiAgICovXG4gIHJlYWRvbmx5IGlzRW5hYmxlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcGx1Z2luIGluc3RhbmNlIGFjdHVhbGx5IGV4aXN0cyBpbiBgYXBwLnBsdWdpbnMucGx1Z2luc2AuXG4gICAqIFRoaXMgaXMgdGhlIGRlZmluaXRpdmUgY2hlY2sgXHUyMDE0IGEgcGx1Z2luIHRoYXQgaXMgZW5hYmxlZCBidXQgbm90IGxvYWRlZCBoYXMgZmFpbGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNMb2FkZWQ6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBJbnRlZ3JhdGlvblRlc3RpbmdFcnJvclRvU3RyaW5nIHtcbiAgZXJyb3JUb1N0cmluZyhlcnJvcjogdW5rbm93bik6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEludGVncmF0aW9uVGVzdGluZ0hvbGRlciB7XG4gIF9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3Rpbmc6IEludGVncmF0aW9uVGVzdGluZ0Vycm9yVG9TdHJpbmc7XG59XG5cbi8qKlxuICogRW5hYmxlcyBhIHBsdWdpbiBpbnNpZGUgT2JzaWRpYW4gYW5kIGNhcHR1cmVzIGFueSBsb2FkIGVycm9yLlxuICpcbiAqIE1vbmtleS1wYXRjaGVzIGBhcHAucGx1Z2lucy5sb2FkUGx1Z2luYCB0byBpbnRlcmNlcHQgZXJyb3JzIGJlZm9yZVxuICogT2JzaWRpYW4ncyBgZW5hYmxlUGx1Z2luYCB0cnktY2F0Y2ggc3dhbGxvd3MgdGhlbS4gVGhlIG9yaWdpbmFsIG1ldGhvZFxuICogaXMgYWx3YXlzIHJlc3RvcmVkIGluIGEgYGZpbmFsbHlgIGJsb2NrLlxuICpcbiAqIERlc2lnbmVkIHRvIGJlIHBhc3NlZCBhcyB0aGUgYGZuYCBhcmd1bWVudCB0byB7QGxpbmsgZXZhbEluT2JzaWRpYW59LlxuICpcbiAqIEBwYXJhbSBhcmdzIC0gVGhlIGNvbW1vbiBhcmdzIHBsdXMgdGhlIHBsdWdpbiBJRC5cbiAqIEBwYXJhbSBhcmdzLmFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gYXJncy5wbHVnaW5JZCAtIFRoZSBJRCBvZiB0aGUgcGx1Z2luIHRvIGVuYWJsZS5cbiAqIEByZXR1cm5zIFRoZSBlbmFibGUgcmVzdWx0IHdpdGggZXJyb3IgbWVzc2FnZSBhbmQgZW5hYmxlZCBzdGF0dXMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbmFibGVQbHVnaW5XaXRoRXJyb3JDYXB0dXJlKHsgYXBwLCBwbHVnaW5JZCB9OiBDb21tb25BcmdzICYgRW5hYmxlUGx1Z2luUGFyYW1zKTogUHJvbWlzZTxFbmFibGVQbHVnaW5SZXN1bHQ+IHtcbiAgaWYgKCFhcHAucGx1Z2lucy5pc0VuYWJsZWQoKSkge1xuICAgIGF3YWl0IGFwcC5wbHVnaW5zLnNldEVuYWJsZSh0cnVlKTtcbiAgfVxuXG4gIGxldCBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZCAtLSBJbnRlbnRpb25hbCBtb25rZXktcGF0Y2g7IHJlc3RvcmVkIGluIGZpbmFsbHkuXG4gIGNvbnN0IG9yaWdMb2FkUGx1Z2luID0gYXBwLnBsdWdpbnMubG9hZFBsdWdpbjtcbiAgYXBwLnBsdWdpbnMubG9hZFBsdWdpbiA9IGFzeW5jIGZ1bmN0aW9uIGxvYWRQbHVnaW4oaWQ6IHN0cmluZywgaXNVc2VyRW5hYmxlZD86IGJvb2xlYW4pOiBQcm9taXNlPFBsdWdpbj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvcmlnTG9hZFBsdWdpbi5jYWxsKHRoaXMsIGlkLCBpc1VzZXJFbmFibGVkKTtcbiAgICAgIGVycm9yTWVzc2FnZSA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCAtLSBBcHByb3ZlZCBkb3VibGUgY2FzdDogYF9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmdgIGlzIG91ciBpbnRlcm5hbCBXaW5kb3cgYXVnbWVudGF0aW9uLCBpbnRlbnRpb25hbGx5IGtlcHQgbG9jYWwgKG5vdCBkZWNsYXJlZCBnbG9iYWxseSkgdG8gYXZvaWQgbGVha2luZyBpbnRvIGNvbnN1bWVyIHR5cGVzLlxuICAgICAgY29uc3QgaG9sZGVyID0gd2luZG93IGFzIHVua25vd24gYXMgUGFydGlhbDxJbnRlZ3JhdGlvblRlc3RpbmdIb2xkZXI+O1xuICAgICAgZXJyb3JNZXNzYWdlID0gaG9sZGVyLl9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3Rpbmc/LmVycm9yVG9TdHJpbmcoZXJyb3IpID8/IFN0cmluZyhlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH07XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBhcHAucGx1Z2lucy5lbmFibGVQbHVnaW5BbmRTYXZlKHBsdWdpbklkKTtcbiAgfSBmaW5hbGx5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hdG9taWMtdXBkYXRlcyAtLSBJbnRlbnRpb25hbCByZXN0b3JlIG9mIG1vbmtleS1wYXRjaC5cbiAgICBhcHAucGx1Z2lucy5sb2FkUGx1Z2luID0gb3JpZ0xvYWRQbHVnaW47XG4gIH1cblxuICBjb25zdCBpc0xvYWRlZCA9IHBsdWdpbklkIGluIGFwcC5wbHVnaW5zLnBsdWdpbnM7XG5cbiAgaWYgKCFlcnJvck1lc3NhZ2UgJiYgIWlzTG9hZGVkKSB7XG4gICAgZXJyb3JNZXNzYWdlID0gYFBsdWdpbiBcIiR7cGx1Z2luSWR9XCIgaXMgaW4gdGhlIGVuYWJsZWQgc2V0IGJ1dCBub3QgbG9hZGVkLiBgXG4gICAgICArICdPYnNpZGlhbiBtYXkgaGF2ZSBjYXVnaHQgdGhlIGVycm9yIGJlZm9yZSB0aGUgbW9ua2V5LXBhdGNoLiAnXG4gICAgICArICdDaGVjayB0aGUgT2JzaWRpYW4gY29uc29sZSBmb3IgZGV0YWlscy4nO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBlcnJvck1lc3NhZ2UsXG4gICAgaXNFbmFibGVkOiBhcHAucGx1Z2lucy5lbmFibGVkUGx1Z2lucy5oYXMocGx1Z2luSWQpLFxuICAgIGlzTG9hZGVkXG4gIH07XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBbUVBLGVBQXNCLDZCQUE2QixFQUFFLEtBQUssU0FBUyxHQUFpRTtBQUNsSSxNQUFJLENBQUMsSUFBSSxRQUFRLFVBQVUsR0FBRztBQUM1QixVQUFNLElBQUksUUFBUSxVQUFVLElBQUk7QUFBQSxFQUNsQztBQUVBLE1BQUk7QUFFSixRQUFNLGlCQUFpQixJQUFJLFFBQVE7QUFDbkMsTUFBSSxRQUFRLGFBQWEsZUFBZSxXQUFXLElBQVksZUFBMEM7QUFDdkcsUUFBSTtBQUNGLFlBQU0sU0FBUyxNQUFNLGVBQWUsS0FBSyxNQUFNLElBQUksYUFBYTtBQUNoRSxxQkFBZTtBQUNmLGFBQU87QUFBQSxJQUNULFNBQVMsT0FBTztBQUVkLFlBQU0sU0FBUztBQUNmLHFCQUFlLE9BQU8sOEJBQThCLGNBQWMsS0FBSyxLQUFLLE9BQU8sS0FBSztBQUN4RixZQUFNO0FBQUEsSUFDUjtBQUFBLEVBQ0Y7QUFFQSxNQUFJO0FBQ0YsVUFBTSxJQUFJLFFBQVEsb0JBQW9CLFFBQVE7QUFBQSxFQUNoRCxVQUFFO0FBRUEsUUFBSSxRQUFRLGFBQWE7QUFBQSxFQUMzQjtBQUVBLFFBQU0sV0FBVyxZQUFZLElBQUksUUFBUTtBQUV6QyxNQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVTtBQUM5QixtQkFBZSxXQUFXLFFBQVE7QUFBQSxFQUdwQztBQUVBLFNBQU87QUFBQSxJQUNMO0FBQUEsSUFDQSxXQUFXLElBQUksUUFBUSxlQUFlLElBQUksUUFBUTtBQUFBLElBQ2xEO0FBQUEsRUFDRjtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var error_to_string_exports = {};
|
|
20
|
+
__export(error_to_string_exports, {
|
|
21
|
+
errorToString: () => errorToString
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(error_to_string_exports);
|
|
24
|
+
const STACK_TRACE_PREFIX = " at";
|
|
25
|
+
function errorToString(error) {
|
|
26
|
+
if (!(error instanceof Error)) {
|
|
27
|
+
return String(error);
|
|
28
|
+
}
|
|
29
|
+
let message = error.stack ?? `${error.name}: ${error.message}`;
|
|
30
|
+
if (error.cause !== void 0) {
|
|
31
|
+
message = appendNestedError(message, error.cause, "Caused by:");
|
|
32
|
+
}
|
|
33
|
+
if (error instanceof AggregateError) {
|
|
34
|
+
const aggregatedErrors = error.errors;
|
|
35
|
+
for (const [index, aggregatedError] of aggregatedErrors.entries()) {
|
|
36
|
+
message = appendNestedError(message, aggregatedError, `Aggregated error #${String(index + 1)}:`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return message;
|
|
40
|
+
}
|
|
41
|
+
function appendNestedError(message, nestedError, title) {
|
|
42
|
+
let result = `${message}
|
|
43
|
+
${generateStackTraceLine(title)}`;
|
|
44
|
+
for (const line of errorToString(nestedError).split("\n")) {
|
|
45
|
+
if (!line.trim()) {
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
result += line.startsWith(STACK_TRACE_PREFIX) ? `
|
|
49
|
+
${line}` : `
|
|
50
|
+
${generateStackTraceLine(line)}`;
|
|
51
|
+
}
|
|
52
|
+
return result;
|
|
53
|
+
}
|
|
54
|
+
function generateStackTraceLine(title) {
|
|
55
|
+
return `${STACK_TRACE_PREFIX} --- ${title} --- (0)`;
|
|
56
|
+
}
|
|
57
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
58
|
+
0 && (module.exports = {
|
|
59
|
+
errorToString
|
|
60
|
+
});
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Vycm9yLXRvLXN0cmluZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbnZlcnRzIGFuIGVycm9yIGludG8gYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcgd2l0aCBpdHMgZnVsbCBzdGFjayB0cmFjZSxcbiAqIHJlY3Vyc2l2ZSBgY2F1c2VgIGNoYWluLCBhbmQgdGhlIGFnZ3JlZ2F0ZWQgZXJyb3JzIG9mIGFuIGBBZ2dyZWdhdGVFcnJvcmAuXG4gKlxuICogVXNlZCBOb2RlLXNpZGUgYnkgdGhlIGZyYW1ld29yayBnbG9iYWwtc2V0dXAvdGVhcmRvd24gdG8gbG9nIG5vbi1mYXRhbFxuICogY2xlYW51cCBlcnJvcnMuIEl0IGlzIGEgaGFuZC1rZXB0IGNvcHkgb2YgYG9ic2lkaWFuLWRldi11dGlsc2AnIGBlcnJvclRvU3RyaW5nYFxuICogKGBzcmMvZXJyb3IudHNgKSBcdTIwMTQgc2VlIHRoZSBzeW5jIHJ1bGUgTDE3IFx1MjAxNCBzbyB0aGUgdHdvIHN0YXkgYmVoYXZpb3JhbGx5XG4gKiBpZGVudGljYWwgd2l0aG91dCB0aGUgaGFybmVzcyB0YWtpbmcgYSBkZXBlbmRlbmN5IG9uIHRoZSB1dGlsaXR5IGxpYnJhcnkuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEhhbmQta2VwdCBkdXBsaWNhdGUgb2Ygb2JzaWRpYW4tZGV2LXV0aWxzJyBlcnJvclRvU3RyaW5nIChzZWUgTDE3KTsgaXRzIGJlaGF2aW9yIGlzIGNvdmVyZWQgYnkgdGhhdCBsaWJyYXJ5J3Mgb3duIHVuaXQgdGVzdHMsIG5vdCByZXBlYXRlZCBoZXJlLiAqL1xuXG5jb25zdCBTVEFDS19UUkFDRV9QUkVGSVggPSAnICAgIGF0JztcblxuLyoqXG4gKiBDb252ZXJ0cyBhbiBlcnJvciB0byBhIHN0cmluZyByZXByZXNlbnRhdGlvbiwgaW5jbHVkaW5nIG5lc3RlZCBjYXVzZXMgYW5kIHRoZVxuICogYWdncmVnYXRlZCBlcnJvcnMgb2YgYW4gYEFnZ3JlZ2F0ZUVycm9yYCwgd2l0aCBlYWNoIG5lc3RlZCBlcnJvciByZW5kZXJlZCBhc1xuICogYCAgICBhdGAgc2VwYXJhdG9yIGxpbmVzIHNvIGl0IGJsZW5kcyBpbnRvIHRoZSBzdXJyb3VuZGluZyBzdGFjay5cbiAqXG4gKiBAcGFyYW0gZXJyb3IgLSBUaGUgZXJyb3IgdG8gY29udmVydCB0byBhIHN0cmluZy5cbiAqIEByZXR1cm5zIFRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGVycm9yLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXJyb3JUb1N0cmluZyhlcnJvcjogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICghKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgcmV0dXJuIFN0cmluZyhlcnJvcik7XG4gIH1cblxuICBsZXQgbWVzc2FnZSA9IGVycm9yLnN0YWNrID8/IGAke2Vycm9yLm5hbWV9OiAke2Vycm9yLm1lc3NhZ2V9YDtcbiAgaWYgKGVycm9yLmNhdXNlICE9PSB1bmRlZmluZWQpIHtcbiAgICBtZXNzYWdlID0gYXBwZW5kTmVzdGVkRXJyb3IobWVzc2FnZSwgZXJyb3IuY2F1c2UsICdDYXVzZWQgYnk6Jyk7XG4gIH1cbiAgaWYgKGVycm9yIGluc3RhbmNlb2YgQWdncmVnYXRlRXJyb3IpIHtcbiAgICBjb25zdCBhZ2dyZWdhdGVkRXJyb3JzOiByZWFkb25seSB1bmtub3duW10gPSBlcnJvci5lcnJvcnM7XG4gICAgZm9yIChjb25zdCBbaW5kZXgsIGFnZ3JlZ2F0ZWRFcnJvcl0gb2YgYWdncmVnYXRlZEVycm9ycy5lbnRyaWVzKCkpIHtcbiAgICAgIG1lc3NhZ2UgPSBhcHBlbmROZXN0ZWRFcnJvcihtZXNzYWdlLCBhZ2dyZWdhdGVkRXJyb3IsIGBBZ2dyZWdhdGVkIGVycm9yICMke1N0cmluZyhpbmRleCArIDEpfTpgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1lc3NhZ2U7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZE5lc3RlZEVycm9yKG1lc3NhZ2U6IHN0cmluZywgbmVzdGVkRXJyb3I6IHVua25vd24sIHRpdGxlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBsZXQgcmVzdWx0ID0gYCR7bWVzc2FnZX1cXG4ke2dlbmVyYXRlU3RhY2tUcmFjZUxpbmUodGl0bGUpfWA7XG4gIGZvciAoY29uc3QgbGluZSBvZiBlcnJvclRvU3RyaW5nKG5lc3RlZEVycm9yKS5zcGxpdCgnXFxuJykpIHtcbiAgICBpZiAoIWxpbmUudHJpbSgpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcmVzdWx0ICs9IGxpbmUuc3RhcnRzV2l0aChTVEFDS19UUkFDRV9QUkVGSVgpXG4gICAgICA/IGBcXG4ke2xpbmV9YFxuICAgICAgOiBgXFxuJHtnZW5lcmF0ZVN0YWNrVHJhY2VMaW5lKGxpbmUpfWA7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVTdGFja1RyYWNlTGluZSh0aXRsZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke1NUQUNLX1RSQUNFX1BSRUZJWH0gLS0tICR7dGl0bGV9IC0tLSAoMClgO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWNBLE1BQU0scUJBQXFCO0FBVXBCLFNBQVMsY0FBYyxPQUF3QjtBQUNwRCxNQUFJLEVBQUUsaUJBQWlCLFFBQVE7QUFDN0IsV0FBTyxPQUFPLEtBQUs7QUFBQSxFQUNyQjtBQUVBLE1BQUksVUFBVSxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksS0FBSyxNQUFNLE9BQU87QUFDNUQsTUFBSSxNQUFNLFVBQVUsUUFBVztBQUM3QixjQUFVLGtCQUFrQixTQUFTLE1BQU0sT0FBTyxZQUFZO0FBQUEsRUFDaEU7QUFDQSxNQUFJLGlCQUFpQixnQkFBZ0I7QUFDbkMsVUFBTSxtQkFBdUMsTUFBTTtBQUNuRCxlQUFXLENBQUMsT0FBTyxlQUFlLEtBQUssaUJBQWlCLFFBQVEsR0FBRztBQUNqRSxnQkFBVSxrQkFBa0IsU0FBUyxpQkFBaUIscUJBQXFCLE9BQU8sUUFBUSxDQUFDLENBQUMsR0FBRztBQUFBLElBQ2pHO0FBQUEsRUFDRjtBQUNBLFNBQU87QUFDVDtBQUVBLFNBQVMsa0JBQWtCLFNBQWlCLGFBQXNCLE9BQXVCO0FBQ3ZGLE1BQUksU0FBUyxHQUFHLE9BQU87QUFBQSxFQUFLLHVCQUF1QixLQUFLLENBQUM7QUFDekQsYUFBVyxRQUFRLGNBQWMsV0FBVyxFQUFFLE1BQU0sSUFBSSxHQUFHO0FBQ3pELFFBQUksQ0FBQyxLQUFLLEtBQUssR0FBRztBQUNoQjtBQUFBLElBQ0Y7QUFDQSxjQUFVLEtBQUssV0FBVyxrQkFBa0IsSUFDeEM7QUFBQSxFQUFLLElBQUksS0FDVDtBQUFBLEVBQUssdUJBQXVCLElBQUksQ0FBQztBQUFBLEVBQ3ZDO0FBQ0EsU0FBTztBQUNUO0FBRUEsU0FBUyx1QkFBdUIsT0FBdUI7QUFDckQsU0FBTyxHQUFHLGtCQUFrQixRQUFRLEtBQUs7QUFDM0M7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file
|
|
3
|
+
*
|
|
4
|
+
* Converts an error into a human-readable string with its full stack trace,
|
|
5
|
+
* recursive `cause` chain, and the aggregated errors of an `AggregateError`.
|
|
6
|
+
*
|
|
7
|
+
* Used Node-side by the framework global-setup/teardown to log non-fatal
|
|
8
|
+
* cleanup errors. It is a hand-kept copy of `obsidian-dev-utils`' `errorToString`
|
|
9
|
+
* (`src/error.ts`) — see the sync rule L17 — so the two stay behaviorally
|
|
10
|
+
* identical without the harness taking a dependency on the utility library.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Converts an error to a string representation, including nested causes and the
|
|
14
|
+
* aggregated errors of an `AggregateError`, with each nested error rendered as
|
|
15
|
+
* ` at` separator lines so it blends into the surrounding stack.
|
|
16
|
+
*
|
|
17
|
+
* @param error - The error to convert to a string.
|
|
18
|
+
* @returns The string representation of the error.
|
|
19
|
+
*/
|
|
20
|
+
export declare function errorToString(error: unknown): string;
|
|
@@ -79,4 +79,4 @@ ${sanitizedDetail}`);
|
|
|
79
79
|
0 && (module.exports = {
|
|
80
80
|
evalInObsidian
|
|
81
81
|
});
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2V2YWwtaW4tb2JzaWRpYW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFdmFsdWF0ZXMgYSBmdW5jdGlvbiBpbnNpZGUgYSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlIHZpYSBhIHBsdWdnYWJsZSB0cmFuc3BvcnQuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIEVkaXRvcixcbiAgTW9kaWZpZXJcbn0gZnJvbSAnb2JzaWRpYW4nO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLW5hbWVzcGFjZSAtLSBXZSBuZWVkIHRvIHJlZmVyZW5jZSBgb2JzaWRpYW5gIG1vZHVsZS5cbmltcG9ydCB0eXBlICogYXMgb2JzaWRpYW4gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcblxuaW1wb3J0IHR5cGUge1xuICBDb250ZXh0QXJncyxcbiAgQ29udGV4dElkXG59IGZyb20gJy4vY29udGV4dC1pZC5janMnO1xuaW1wb3J0IHR5cGUgeyBHZW5lcmF0ZU5hbWVzcGFjZUNhbGxQYXJhbXMgfSBmcm9tICcuL2dlbmVyYXRlLWZ1bmN0aW9uLWNhbGwuY2pzJztcbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5UcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC5janMnO1xuXG5pbXBvcnQge1xuICBnZXRUcmFuc3BvcnRPcHRpb25zLFxuICBnZXRWYXVsdFBhdGhcbn0gZnJvbSAnLi9jb250ZXh0LXByb3ZpZGVyLmNqcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZU5hbWVzcGFjZUNhbGwgfSBmcm9tICcuL2dlbmVyYXRlLWZ1bmN0aW9uLWNhbGwuY2pzJztcbmltcG9ydCB7IGVuc3VyZU5hbWVzcGFjZUJvb3RzdHJhcHBlZCB9IGZyb20gJy4vbmFtZXNwYWNlLWJvb3RzdHJhcC5janMnO1xuaW1wb3J0IHsgZ2V0T3JDcmVhdGVUcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC1mYWN0b3J5LmNqcyc7XG5cbmludGVyZmFjZSBFdmFsRXJyb3JFbnZlbG9wZSB7XG4gIHR5cGU6ICdlcnJvcic7XG4gIHZhbHVlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGlzY3JpbWluYXRlZCBlbnZlbG9wZSByZXR1cm5lZCBieSB0aGUgcmVnaXN0ZXJlZCBgZXZhbFdyYXBwZXJgIGZyb20gaW5zaWRlIHRoZSBPYnNpZGlhbiBwcm9jZXNzLlxuICpcbiAqIC0gYEV2YWxFcnJvckVudmVsb3BlYCBcdTIwMTQgYGZuYCB0aHJldzsgYHZhbHVlYCBpcyB0aGUgc2VyaWFsaXplZCBlcnJvci5cbiAqIC0gYEV2YWxVbmRlZmluZWRFbnZlbG9wZWAgXHUyMDE0IGBmbmAgcmV0dXJuZWQgYHVuZGVmaW5lZGAuXG4gKiAtIGBFdmFsVmFsdWVFbnZlbG9wZWAgXHUyMDE0IGBmbmAgcmV0dXJuZWQgYSBKU09OLXNlcmlhbGl6YWJsZSB2YWx1ZS5cbiAqL1xudHlwZSBFdmFsUmVzdWx0RW52ZWxvcGUgPVxuICB8IEV2YWxFcnJvckVudmVsb3BlXG4gIHwgRXZhbFVuZGVmaW5lZEVudmVsb3BlXG4gIHwgRXZhbFZhbHVlRW52ZWxvcGU7XG5cbmludGVyZmFjZSBFdmFsVW5kZWZpbmVkRW52ZWxvcGUge1xuICB0eXBlOiAndW5kZWZpbmVkJztcbn1cblxuaW50ZXJmYWNlIEV2YWxWYWx1ZUVudmVsb3BlIHtcbiAgdmFsdWU6IHVua25vd247XG59XG5cbmNvbnN0IE5PX09VVFBVVCA9ICcobm8gb3V0cHV0KSc7XG5cbi8qKlxuICogQ29tbW9uIGFyZ3VtZW50cyBhdXRvbWF0aWNhbGx5IHByb3ZpZGVkIHRvIGV2ZXJ5IHtAbGluayBldmFsSW5PYnNpZGlhbn0gY2FsbGJhY2suXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbW9uQXJncyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4ge0BsaW5rIEFwcH0gaW5zdGFuY2UuXG4gICAqL1xuICBhcHA6IEFwcDtcblxuICAvKipcbiAgICogTW92ZXMgdGhlIG1vdXNlIHBvaW50ZXIgdG8gdGhlIGNlbnRlciBvZiBhbiBlbGVtZW50IHVzaW5nICoqdHJ1c3RlZCoqXG4gICAqIEVsZWN0cm9uIHBvaW50ZXIgaW5wdXQsIHRoZW4gcG9sbHMgdW50aWwgdGhlIGVsZW1lbnQgYWN0dWFsbHkgbWF0Y2hlc1xuICAgKiBgOmhvdmVyYC5cbiAgICpcbiAgICogQmVjYXVzZSB0aGUgbW92ZSBpcyB0cnVzdGVkIChzZWUge0BsaW5rIENvbW1vbkFyZ3MubW92ZU1vdXNlfSksIHRoZSByZWFsXG4gICAqIGA6aG92ZXJgIHN0YXRlIHRha2VzIGVmZmVjdCBpbiB0aGUgQ1NTIGVuZ2luZSBcdTIwMTQgcmVhbCB0aGVtZSBgdmFyKClgIHZhbHVlc1xuICAgKiBhbmQgcmVhbCBjb21wb3NpdGluZyBcdTIwMTQgaW5zdGVhZCBvZiBhIGhhbmQtc2ltdWxhdGVkIGNhc2NhZGUuIEl0IHBvbGxzIHRoZVxuICAgKiBsaXZlIGBlbGVtZW50Lm1hdGNoZXMoJzpob3ZlcicpYCBzdGF0ZSAobm90IGEgZml4ZWQgZGVsYXkpLCBzbyBpdCBpcyByb2J1c3RcbiAgICogdW5kZXIgc2hhcmVkLWluc3RhbmNlIGxvYWQuIEl0IHRhcmdldHMgdGhlIHNpbmdsZSBzaGFyZWQgd2luZG93J3NcbiAgICogKipnbG9iYWwqKiBwb2ludGVyLCBzbyBvbmx5IG9uZSBlbGVtZW50IGlzIGhvdmVyZWQgYXQgYSB0aW1lLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGVsZW1lbnQgdG8gaG92ZXIuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgZWxlbWVudCBtYXRjaGVzIGA6aG92ZXJgLlxuICAgKi9cbiAgaG92ZXJFbGVtZW50KHRoaXM6IHZvaWQsIHBhcmFtczogSG92ZXJFbGVtZW50UGFyYW1zKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogTW92ZXMgdGhlIG1vdXNlIHBvaW50ZXIgdG8gdGhlIGdpdmVuIHdlYi1jb250ZW50cyBjb29yZGluYXRlcyB1c2luZyBhXG4gICAqICoqdHJ1c3RlZCoqIEVsZWN0cm9uIHBvaW50ZXIgbW92ZS5cbiAgICpcbiAgICogQSB0cnVzdGVkIG1vdmUgKGluamVjdGVkIHZpYSBFbGVjdHJvbidzIGB3ZWJDb250ZW50cy5zZW5kSW5wdXRFdmVudGApXG4gICAqIHVwZGF0ZXMgdGhlIHJlYWwgcG9pbnRlciBzdGF0ZSBpbiB0aGUgQ1NTIGVuZ2luZSwgc28gYDpob3ZlcmAgcnVsZXNcbiAgICogZ2VudWluZWx5IGFwcGx5IFx1MjAxNCB1bmxpa2UgYGRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoJ21vdXNlb3ZlcicpKWAsXG4gICAqIHdoaWNoIGlzIHVudHJ1c3RlZCBhbmQgbmV2ZXIgc2V0cyBgOmhvdmVyYC4gSXQgdGFyZ2V0cyB0aGUgc2luZ2xlIHNoYXJlZFxuICAgKiB3aW5kb3cncyAqKmdsb2JhbCoqIHBvaW50ZXIsIHNvIG9ubHkgb25lIGVsZW1lbnQgaXMgaG92ZXJlZCBhdCBhIHRpbWUuXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIGxvdy1sZXZlbCBwcmltaXRpdmU6IGl0IHBlcmZvcm1zIGEgc2luZ2xlIG1vdmUgYW5kIGRvZXMgKipub3QqKlxuICAgKiB3YWl0IGZvciBhbnkgc3RhdGUgdG8gc2V0dGxlIChjYWxsZXJzIHBvbGwgdGhlaXIgb3duIHJlYWRpbmVzcyBzaWduYWwpLlxuICAgKiBQcmVmZXIge0BsaW5rIENvbW1vbkFyZ3MuaG92ZXJFbGVtZW50fSAvIHtAbGluayBDb21tb25BcmdzLnVuaG92ZXJFbGVtZW50fVxuICAgKiBmb3IgZWxlbWVudC1yZWxhdGl2ZSBtb3ZlczsgdXNlIGBtb3ZlTW91c2VgIGRpcmVjdGx5IHdoZW4gYW5cbiAgICogZWxlbWVudC1yZWxhdGl2ZSB0YXJnZXQgZG9lcyBub3QgZml0IChlLmcuIGFuIGVsZW1lbnQgc3Bhbm5pbmcgdGhlIGZ1bGxcbiAgICogdmlld3BvcnQgd2lkdGgpLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHdlYi1jb250ZW50cyBESVAgY29vcmRpbmF0ZXMgdG8gbW92ZSB0by5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBtb3ZlIGhhcyBiZWVuIGluamVjdGVkLlxuICAgKi9cbiAgbW92ZU1vdXNlKHRoaXM6IHZvaWQsIHBhcmFtczogTW92ZU1vdXNlUGFyYW1zKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogVGhlIGBvYnNpZGlhbmAgbW9kdWxlLCByZXNvbHZlZCBhdCBydW50aW1lIGluc2lkZSB0aGUgT2JzaWRpYW4gcHJvY2Vzcy5cbiAgICovXG4gIG9ic2lkaWFuTW9kdWxlOiB0eXBlb2Ygb2JzaWRpYW47XG5cbiAgLyoqXG4gICAqIFByZXNzZXMgYSBzaW5nbGUga2V5IChvcHRpb25hbGx5IHdpdGggbW9kaWZpZXJzKSB1c2luZyAqKnRydXN0ZWQqKiBFbGVjdHJvblxuICAgKiBrZXlib2FyZCBpbnB1dCwgZmlyaW5nIHRoZSBmdWxsIHJlYWwga2V5IHBpcGVsaW5lIFx1MjAxNFxuICAgKiBga2V5ZG93bmAgXHUyMTkyIGBrZXlwcmVzc2AgXHUyMTkyIGBiZWZvcmVpbnB1dGAgXHUyMTkyIGBpbnB1dGAgXHUyMTkyIGBrZXl1cGAuXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIGtleS1wcmVzcyBhbmFsb2cgb2Yge0BsaW5rIENvbW1vbkFyZ3MudHlwZUludG9FZGl0b3J9OiBpdFxuICAgKiBpbmplY3RzIGEgdHJ1c3RlZCBga2V5RG93bmAgXHUyMTkyIGBjaGFyYCBcdTIxOTIgYGtleVVwYCBzZXF1ZW5jZSB2aWEgRWxlY3Ryb24nc1xuICAgKiBgd2ViQ29udGVudHMuc2VuZElucHV0RXZlbnRgLCBzbyBpdCBpcyBkZWxpdmVyZWQgdG8gdGhlIHdpbmRvdydzIERPTS1mb2N1c2VkXG4gICAqIGVsZW1lbnQgYW5kIGZsb3dzIHRocm91Z2ggdGhlIHJlYWwgaW5wdXQgcGlwZWxpbmUgXHUyMDE0IHVubGlrZVxuICAgKiBgZGlzcGF0Y2hFdmVudChuZXcgS2V5Ym9hcmRFdmVudCguLi4pKWAsIHdoaWNoIGlzIHVudHJ1c3RlZCAoYGlzVHJ1c3RlZDpcbiAgICogZmFsc2VgKSBhbmQgaWdub3JlZCBieSBDb2RlTWlycm9yIGFuZCBtb3N0IGtleSBoYW5kbGVycy4gVXNlIGl0IGZvciBzcGVjaWFsXG4gICAqIGtleXMgKGAnRW50ZXInYCwgYCdFc2NhcGUnYCwgYCdUYWInYCwgYXJyb3cga2V5cykgYW5kIG1vZGlmaWVyIGNvbWJpbmF0aW9uc1xuICAgKiAoYFNoaWZ0K0VudGVyYCwgYEN0cmwrQWApIHRoYXQge0BsaW5rIENvbW1vbkFyZ3MudHlwZUludG9FZGl0b3J9ICh3aGljaFxuICAgKiB0eXBlcyBwcmludGFibGUgdGV4dCkgZG9lcyBub3QgY292ZXIuXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIGxvdy1sZXZlbCBwcmltaXRpdmU6IGl0IGluamVjdHMgdGhlIGtleSBwcmVzcyBhbmQgZG9lcyAqKm5vdCoqXG4gICAqIHBvbGwgZm9yIGFueSBlZmZlY3QgKGEga2V5IHByZXNzIGhhcyBubyB1bml2ZXJzYWwgb2JzZXJ2YWJsZSBvdXRjb21lIFx1MjAxNFxuICAgKiBgRW50ZXJgIGVkaXRzIHRoZSBkb2N1bWVudCwgYEVzY2FwZWAgY2xvc2VzIGEgbW9kYWwsIGBBcnJvd0Rvd25gIG1vdmVzIHRoZVxuICAgKiBzZWxlY3Rpb24pLiBUaGUgY2FsbGVyIGZvY3VzZXMgdGhlIGludGVuZGVkIHRhcmdldCBmaXJzdCwgdGhlbiBhd2FpdHMgdGhlXG4gICAqIGV4cGVjdGVkIGVmZmVjdCB2aWEge0BsaW5rIENvbW1vbkFyZ3Mud2FpdFVudGlsfS4gSXQgdGFyZ2V0cyB0aGUgc2luZ2xlXG4gICAqIHNoYXJlZCB3aW5kb3cncyAqKmdsb2JhbCoqIGZvY3VzLCBzbyBvbmx5IHRoZSBET00tZm9jdXNlZCBlbGVtZW50IHJlY2VpdmVzXG4gICAqIHRoZSBrZXkuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUga2V5IHRvIHByZXNzIGFuZCBhbnkgbW9kaWZpZXJzIHRvIGhvbGQuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUga2V5IHByZXNzIGhhcyBiZWVuXG4gICAqICAgaW5qZWN0ZWQuXG4gICAqL1xuICBwcmVzc0tleSh0aGlzOiB2b2lkLCBwYXJhbXM6IFByZXNzS2V5UGFyYW1zKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogVHlwZXMgdGV4dCBpbnRvIGEgQ29kZU1pcnJvciB7QGxpbmsgRWRpdG9yfSB1c2luZyAqKnRydXN0ZWQqKiBFbGVjdHJvblxuICAgKiBrZXlib2FyZCBpbnB1dC5cbiAgICpcbiAgICogVHlwaW5nIGlzIHByZXNzaW5nIGVhY2ggY2hhcmFjdGVyIGtleSBpbiB0dXJuOiB0aGlzIGZvY3VzZXMgdGhlIGVkaXRvclxuICAgKiAoY2FyZXQgdG8gZW5kKSBhbmQgcHJlc3NlcyBldmVyeSBjb2RlIHBvaW50IG9mIGB0ZXh0YCB2aWFcbiAgICoge0BsaW5rIENvbW1vbkFyZ3MucHJlc3NLZXl9IFx1MjAxNCB0aGUgc2FtZSB0cnVzdGVkIGBrZXlEb3duYCBcdTIxOTIgYGNoYXJgIFx1MjE5MiBga2V5VXBgXG4gICAqIGEgcmVhbCB1c2VyIHByb2R1Y2VzLiBFYWNoIGtleXN0cm9rZSBpcyBkZWxpdmVyZWQgdG8gdGhlIHdpbmRvdydzXG4gICAqIERPTS1mb2N1c2VkIGVsZW1lbnQgYW5kIGZsb3dzIHRocm91Z2ggQ29kZU1pcnJvcidzIHJlYWwgaW5wdXQgcGlwZWxpbmUsIHNvXG4gICAqIHRoZSB0eXBlZCB0ZXh0IHJlYWNoZXMgdGhlIGRvY3VtZW50ICoqb25seSBpZiB0aGUgZWRpdG9yIGdlbnVpbmVseSBob2xkc1xuICAgKiBmb2N1cyoqLlxuICAgKiBUaGlzIG1ha2VzIFwidGhlIHVzZXIgdHlwZWQgaW50byB0aGUgZWRpdG9yXCIgYSBmYWl0aGZ1bCBlbmQtdG8tZW5kIGNoZWNrLFxuICAgKiB1bmxpa2UgYGRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoLi4uKSlgICh1bnRydXN0ZWQgXHUyMDE0IGlnbm9yZWQgYnlcbiAgICogQ29kZU1pcnJvcikgb3IgYGV4ZWNDb21tYW5kKCdpbnNlcnRUZXh0JylgIChtdXRhdGVzIHRoZSBzZWxlY3Rpb24gZXZlblxuICAgKiB3aGVuIHRoZSBlZGl0b3IgaXMgbm90IGZvY3VzZWQsIG1hc2tpbmcgZm9jdXMgYnVncyBhcyBmYWxzZSBwb3NpdGl2ZXMpLlxuICAgKlxuICAgKiBBZnRlciBpbmplY3RpbmcgdGhlIGtleXN0cm9rZXMgaXQgcG9sbHMgdW50aWwgdGhlIGRvY3VtZW50IHJlZmxlY3RzIHRoZVxuICAgKiBpbnB1dCwgb3IgYSBib3VuZGVkIHRpbWVvdXQgZWxhcHNlcyAodGhlIGV4cGVjdGVkIG91dGNvbWUgd2hlbiB0aGUgZWRpdG9yXG4gICAqIGlzIHJlYWQtb25seSBhbmQgcmVqZWN0cyB0aGUgaW5wdXQsIG9yIHdoZW4gZm9jdXMgd2FzIHN0b2xlbikuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZWRpdG9yIHRvIHR5cGUgaW50byBhbmQgdGhlIHRleHQgdG8gdHlwZS5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBrZXlzdHJva2VzIGhhdmUgc2V0dGxlZC5cbiAgICovXG4gIHR5cGVJbnRvRWRpdG9yKHRoaXM6IHZvaWQsIHBhcmFtczogVHlwZUludG9FZGl0b3JQYXJhbXMpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBNb3ZlcyB0aGUgbW91c2UgcG9pbnRlciB0byBhIHBvaW50IGp1c3Qgb3V0c2lkZSBhbiBlbGVtZW50J3MgYm91bmRpbmcgYm94XG4gICAqIHVzaW5nIGEgKip0cnVzdGVkKiogRWxlY3Ryb24gcG9pbnRlciBtb3ZlLCB0aGVuIHBvbGxzIHVudGlsIHRoZSBlbGVtZW50IG5vXG4gICAqIGxvbmdlciBtYXRjaGVzIGA6aG92ZXJgLlxuICAgKlxuICAgKiBUaGUgaW52ZXJzZSBvZiB7QGxpbmsgQ29tbW9uQXJncy5ob3ZlckVsZW1lbnR9LiBJdCB0YXJnZXRzIHRoZSBzaW5nbGVcbiAgICogc2hhcmVkIHdpbmRvdydzICoqZ2xvYmFsKiogcG9pbnRlciwgc28gb25seSBvbmUgZWxlbWVudCBpcyBob3ZlcmVkIGF0IGFcbiAgICogdGltZS4gV2hlbiBhbiBlbGVtZW50IHNwYW5zIHRoZSBmdWxsIHZpZXdwb3J0IChubyBwb2ludCBvdXRzaWRlIGl0cyBib3ggaXNcbiAgICogcmVhY2hhYmxlKSwgdXNlIHtAbGluayBDb21tb25BcmdzLm1vdmVNb3VzZX0gZGlyZWN0bHkgdG8gbW92ZSB0aGUgcG9pbnRlclxuICAgKiB0byBhIGtub3duIGVtcHR5IGNvb3JkaW5hdGUgaW5zdGVhZC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBlbGVtZW50IHRvIG1vdmUgdGhlIHBvaW50ZXIgYXdheSBmcm9tLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGVsZW1lbnQgbm8gbG9uZ2VyIG1hdGNoZXNcbiAgICogICBgOmhvdmVyYC5cbiAgICovXG4gIHVuaG92ZXJFbGVtZW50KHRoaXM6IHZvaWQsIHBhcmFtczogVW5ob3ZlckVsZW1lbnRQYXJhbXMpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBQb2xscyBhIHByZWRpY2F0ZSB1bnRpbCBpdCBiZWNvbWVzIHRydXRoeSwgb3IgcmVqZWN0cyBvbmNlIGEgYm91bmRlZFxuICAgKiB0aW1lb3V0IGVsYXBzZXMuXG4gICAqXG4gICAqIEludGVncmF0aW9uLXRlc3QgYGV2YWxJbk9ic2lkaWFuYCBjYWxsYmFja3Mgcm91dGluZWx5IG5lZWQgdG8gd2FpdCBmb3IgYW5cbiAgICogYXN5bmNocm9ub3VzIGVmZmVjdCB0byBzZXR0bGUgKGEgdmlldyB0byBvcGVuLCBhIERPTSBub2RlIHRvIGFwcGVhciwgYVxuICAgKiBzZXR0aW5nIHRvIGFwcGx5KS4gQmVjYXVzZSB0aGUgY2FsbGJhY2sgaXMgc2VyaWFsaXplZCB2aWEgYHRvU3RyaW5nKClgIGFuZFxuICAgKiBjYW5ub3QgaW1wb3J0IG1vZHVsZXMsIGl0IGNhbid0IHJldXNlIGBvYnNpZGlhbi1kZXYtdXRpbHNgJ1xuICAgKiBgcmV0cnlXaXRoVGltZW91dGAgLyBgcnVuV2l0aFRpbWVvdXRgLiBUaGlzIGhlbHBlciBpcyB0aGUgc2hhcmVkLFxuICAgKiBpbmplY3RlZCByZXBsYWNlbWVudCBmb3IgdGhlIHBlci1jbG9zdXJlIHBvbGwgbG9vcHMgY29uc3VtZXJzIHdvdWxkXG4gICAqIG90aGVyd2lzZSBoYW5kLXJvbGwuXG4gICAqXG4gICAqIFRoZSBgcHJlZGljYXRlYCBtYXkgYmUgc3luY2hyb25vdXMgb3IgYXN5bmNocm9ub3VzIFx1MjAxNCBpdCBpcyBhd2FpdGVkIG9uIGV2ZXJ5XG4gICAqIHBvbGwuIEl0IGlzIGNoZWNrZWQgaW1tZWRpYXRlbHksIHRoZW4gcmUtY2hlY2tlZCBldmVyeVxuICAgKiBgaW50ZXJ2YWxJbk1pbGxpc2Vjb25kc2AgdW50aWwgaXQgcmV0dXJucyB0cnV0aHkgb3IgYHRpbWVvdXRJbk1pbGxpc2Vjb25kc2BcbiAgICogZWxhcHNlcywgYXQgd2hpY2ggcG9pbnQgdGhlIHJldHVybmVkIHtAbGluayBQcm9taXNlfSByZWplY3RzICh0aGUgZXJyb3JcbiAgICogaW5jbHVkZXMgYG1lc3NhZ2VgIHdoZW4gcHJvdmlkZWQpLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHByZWRpY2F0ZSB0byBwb2xsIHBsdXMgb3B0aW9uYWwgdGltZW91dCwgaW50ZXJ2YWwsIGFuZFxuICAgKiAgIHRpbWVvdXQgbWVzc2FnZS5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwcmVkaWNhdGUgaXMgdHJ1dGh5LlxuICAgKi9cbiAgd2FpdFVudGlsKHRoaXM6IHZvaWQsIHBhcmFtczogV2FpdFVudGlsUGFyYW1zKTogUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZXZhbEluT2JzaWRpYW59LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2YWxJbk9ic2lkaWFuUGFyYW1zPEFyZ3MgZXh0ZW5kcyBHZW5lcmljT2JqZWN0LCBSZXN1bHQsIFRDb250ZXh0SWQgZXh0ZW5kcyBDb250ZXh0SWQ8dW5rbm93bj4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ+IHtcbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIGZ1bmN0aW9uLiBWYWx1ZXMgbWF5IGluY2x1ZGUgZnVuY3Rpb25zIFx1MjAxNFxuICAgKiB0aGV5IGFyZSBzZXJpYWxpemVkIHZpYSBgdG9TdHJpbmcoKWAuXG4gICAqL1xuICByZWFkb25seSBhcmdzPzogQXJncztcblxuICAvKipcbiAgICogQSB7QGxpbmsgQ29udGV4dElkfSBsaW5raW5nIHRoaXMgY2FsbCB0byBhIHBlcnNpc3RlbnQgc3RvcmUgb24gYHdpbmRvd2BcbiAgICogaW4gdGhlIE9ic2lkaWFuIHByb2Nlc3MuIFRoZSBjYWxsYmFjayByZWNlaXZlcyBhIHR5cGVkIGBjb250ZXh0YCBvYmplY3RcbiAgICogdGhhdCBzdXJ2aXZlcyBhY3Jvc3MgY2FsbHMgc2hhcmluZyB0aGUgc2FtZSBJRC5cbiAgICpcbiAgICogV2hlbiBvbWl0dGVkLCBgY29udGV4dGAgaXMgYSBmcmVzaCBlbXB0eSBvYmplY3QgZWFjaCBjYWxsLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGV4dElkPzogVENvbnRleHRJZDtcblxuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIHRvIGV2YWx1YXRlIGluIHRoZSBPYnNpZGlhbiBjb250ZXh0LlxuICAgKi9cbiAgZm4oYXJnczogQXJncyAmIENvbW1vbkFyZ3MgJiBDb250ZXh0QXJnczxUQ29udGV4dElkPik6IFByb21pc2FibGU8UmVzdWx0PjtcblxuICAvKipcbiAgICogU2tpcHMgcHJlLWZsaWdodCBjaGVja3MgKHZhdWx0IHJlZ2lzdHJhdGlvbiwgQ0xJIGF2YWlsYWJpbGl0eSkuXG4gICAqIFVzZWQgaW50ZXJuYWxseSBieSB2YXVsdCByZWdpc3RyYXRpb24gZnVuY3Rpb25zLlxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNraXBQcmVmbGlnaHRDaGVja3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPdmVycmlkZSB0aGUgdHJhbnNwb3J0IGZvciB0aGlzIGNhbGwuIFdoZW4gb21pdHRlZCwgdXNlcyB0aGUgdHJhbnNwb3J0XG4gICAqIGNvbmZpZ3VyZWQgdmlhIHRoZSBjb250ZXh0IHByb3ZpZGVyIChzZXQgYnkgdGhlIGZyYW1ld29yayBhZGFwdGVyJ3MgZ2xvYmFsIHNldHVwKS5cbiAgICovXG4gIHJlYWRvbmx5IHRyYW5zcG9ydD86IE9ic2lkaWFuVHJhbnNwb3J0O1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCB0byB0aGUgT2JzaWRpYW4gdmF1bHQuIERlZmF1bHRzIHRvIGBwcm9jZXNzLmN3ZCgpYC5cbiAgICovXG4gIHJlYWRvbmx5IHZhdWx0UGF0aD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHBsYWluIG9iamVjdCB3aXRoIHN0cmluZyBrZXlzLlxuICovXG5leHBvcnQgdHlwZSBHZW5lcmljT2JqZWN0ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIENvbW1vbkFyZ3MuaG92ZXJFbGVtZW50fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIb3ZlckVsZW1lbnRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGVsZW1lbnQgdG8gaG92ZXIuIFRoZSBwb2ludGVyIGlzIG1vdmVkIHRvIGl0cyBjZW50ZXIuIFRoaXMgaXMgYSBsaXZlXG4gICAqIHJlbmRlcmVyIERPTSBub2RlIFx1MjAxNCB0aGUgY2FsbGJhY2sgcnVucyBpbi1yZW5kZXJlciwgc28gbm8gY3Jvc3MtcHJvY2Vzc1xuICAgKiBzZXJpYWxpemF0aW9uIGlzIG5lZWRlZCAoc2FtZSBhcyB7QGxpbmsgVHlwZUludG9FZGl0b3JQYXJhbXMuZWRpdG9yfSkuXG4gICAqL1xuICByZWFkb25seSBlbGVtZW50OiBIVE1MRWxlbWVudDtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgQ29tbW9uQXJncy5tb3ZlTW91c2V9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vdmVNb3VzZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgeCBjb29yZGluYXRlICh3ZWItY29udGVudHMgRElQKSB0byBtb3ZlIHRoZSBwb2ludGVyIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgeDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgeSBjb29yZGluYXRlICh3ZWItY29udGVudHMgRElQKSB0byBtb3ZlIHRoZSBwb2ludGVyIHRvLlxuICAgKi9cbiAgcmVhZG9ubHkgeTogbnVtYmVyO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBDb21tb25BcmdzLnByZXNzS2V5fS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmVzc0tleVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUga2V5IHRvIHByZXNzLCBnaXZlbiBhcyBhbiBFbGVjdHJvbiBBY2NlbGVyYXRvciBrZXkgbmFtZSBcdTIwMTQgZS5nLlxuICAgKiBgJ0VudGVyJ2AsIGAnRXNjYXBlJ2AsIGAnVGFiJ2AsIGAnQmFja3NwYWNlJ2AsIGAnRGVsZXRlJ2AsIGFuIGFycm93IGtleVxuICAgKiAoYCdVcCdgIC8gYCdEb3duJ2AgLyBgJ0xlZnQnYCAvIGAnUmlnaHQnYCksIG9yIGEgcHJpbnRhYmxlIGNoYXJhY3RlclxuICAgKiAoYCdhJ2AsIGAnMSdgKS4gVGhlIHByb2R1Y2VkIGNoYXJhY3RlciAod2hlbiB0aGUga2V5IGluc2VydHMgdGV4dCkgaXMgdGhlXG4gICAqIGxpdGVyYWwgYGtleWAgdmFsdWU7IGNhc2UtY29ycmVjdCB0ZXh0IGJlbG9uZ3MgdG9cbiAgICoge0BsaW5rIENvbW1vbkFyZ3MudHlwZUludG9FZGl0b3J9LCBub3QgYSBrZXktcHJlc3MgcHJpbWl0aXZlLlxuICAgKi9cbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBtb2RpZmllciBrZXlzIHRvIGhvbGQgd2hpbGUgdGhlIGtleSBpcyBwcmVzc2VkLCB1c2luZyBPYnNpZGlhbidzXG4gICAqIHtAbGluayBNb2RpZmllcn0gbmFtZXMgKHRoZSBzYW1lIHZhbHVlcyBhcyBhbiBPYnNpZGlhbiBgSG90a2V5YCkuIGAnTW9kJ2BcbiAgICogcmVzb2x2ZXMgcGVyLXBsYXRmb3JtIChDbWQgb24gbWFjT1MsIEN0cmwgZWxzZXdoZXJlKTsgZWFjaCBpcyBtYXBwZWQgdG9cbiAgICogRWxlY3Ryb24ncyBsb3dlcmNhc2UgYHNlbmRJbnB1dEV2ZW50YCBtb2RpZmllciBuYW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgW11gXG4gICAqL1xuICByZWFkb25seSBtb2RpZmllcnM/OiByZWFkb25seSBNb2RpZmllcltdO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBDb21tb25BcmdzLnR5cGVJbnRvRWRpdG9yfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUeXBlSW50b0VkaXRvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZWRpdG9yIHRvIHR5cGUgaW50by4gSXQgaXMgZm9jdXNlZCAod2l0aCB0aGUgY2FyZXQgbW92ZWQgdG8gdGhlIGVuZCBvZlxuICAgKiB0aGUgZG9jdW1lbnQpIGJlZm9yZSB0aGUga2V5c3Ryb2tlcyBhcmUgaW5qZWN0ZWQuXG4gICAqL1xuICByZWFkb25seSBlZGl0b3I6IEVkaXRvcjtcblxuICAvKipcbiAgICogVGhlIHRleHQgdG8gdHlwZS4gRWFjaCBjb2RlIHBvaW50IGlzIHByZXNzZWQgdmlhIHtAbGluayBDb21tb25BcmdzLnByZXNzS2V5fVxuICAgKiAoYSB0cnVzdGVkIGBrZXlEb3duYCBcdTIxOTIgYGNoYXJgIFx1MjE5MiBga2V5VXBgKSwgZXhhY3RseSBhcyBhIHJlYWwgdXNlciB0eXBpbmcuXG4gICAqL1xuICByZWFkb25seSB0ZXh0OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIENvbW1vbkFyZ3MudW5ob3ZlckVsZW1lbnR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVuaG92ZXJFbGVtZW50UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRvIG1vdmUgdGhlIHBvaW50ZXIgYXdheSBmcm9tLiBUaGUgcG9pbnRlciBpcyBtb3ZlZCB0byBhIHBvaW50XG4gICAqIGp1c3Qgb3V0c2lkZSBpdHMgYm91bmRpbmcgYm94LiBUaGlzIGlzIGEgbGl2ZSByZW5kZXJlciBET00gbm9kZSBcdTIwMTQgdGhlXG4gICAqIGNhbGxiYWNrIHJ1bnMgaW4tcmVuZGVyZXIsIHNvIG5vIGNyb3NzLXByb2Nlc3Mgc2VyaWFsaXphdGlvbiBpcyBuZWVkZWRcbiAgICogKHNhbWUgYXMge0BsaW5rIFR5cGVJbnRvRWRpdG9yUGFyYW1zLmVkaXRvcn0pLlxuICAgKi9cbiAgcmVhZG9ubHkgZWxlbWVudDogSFRNTEVsZW1lbnQ7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIENvbW1vbkFyZ3Mud2FpdFVudGlsfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXYWl0VW50aWxQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHBvbGxpbmcgaW50ZXJ2YWwgYmV0d2VlbiBwcmVkaWNhdGUgY2hlY2tzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgNTBgXG4gICAqL1xuICByZWFkb25seSBpbnRlcnZhbEluTWlsbGlzZWNvbmRzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCBkZXRhaWwgYXBwZW5kZWQgdG8gdGhlIHRpbWVvdXQgZXJyb3IgbWVzc2FnZSwgZGVzY3JpYmluZyB3aGF0XG4gICAqIHdhcyBiZWluZyB3YWl0ZWQgZm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgbWVzc2FnZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNvbmRpdGlvbiB0byB3YWl0IGZvci4gUG9sbGVkIGltbWVkaWF0ZWx5LCB0aGVuIG9uIGV2ZXJ5IGludGVydmFsIHVudGlsXG4gICAqIGl0IHJldHVybnMgYSB0cnV0aHkgdmFsdWUuIE1heSBiZSBzeW5jaHJvbm91cyBvciBhc3luY2hyb25vdXMgXHUyMDE0IGl0IGlzXG4gICAqIGF3YWl0ZWQgb24gZWFjaCBwb2xsLlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBhd2FpdGVkIGNvbmRpdGlvbiBoYXMgYmVlbiBtZXQuXG4gICAqL1xuICBwcmVkaWNhdGUodGhpczogdm9pZCk6IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+O1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSB0aW1lIHRvIHdhaXQgYmVmb3JlIHJlamVjdGluZy5cbiAgICpcbiAgICogQGRlZmF1bHQgYDUwMDBgXG4gICAqL1xuICByZWFkb25seSB0aW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG59XG5cbi8qKlxuICogRXZhbHVhdGVzIGEgZnVuY3Rpb24gaW5zaWRlIHRoZSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlXG4gKiB2aWEgdGhlIGFjdGl2ZSB0cmFuc3BvcnQgYW5kIHJldHVybnMgdGhlIHBhcnNlZCByZXN1bHQuXG4gKlxuICogVGhlIGZ1bmN0aW9uIHJlY2VpdmVzIGFuIGFyZ3Mgb2JqZWN0IHRoYXQgaW5jbHVkZXMgYGFwcGAsIGBvYnNpZGlhbk1vZHVsZWAsXG4gKiBgY29udGV4dGAsIGFuZCBhbnkgYWRkaXRpb25hbCBgYXJnc2AgcGFzc2VkIGJ5IHRoZSBjYWxsZXIuXG4gKiBJdCBpcyBzZXJpYWxpemVkIHZpYSBgdG9TdHJpbmcoKWAgYW5kIGludm9rZWQgYXMgYW4gSUlGRS5cbiAqIFRoZSBmdW5jdGlvbiBtdXN0IGJlIHNlbGYtY29udGFpbmVkIFx1MjAxNCBjbG9zdXJlcyBvdmVyIGxvY2FsIHZhcmlhYmxlcyB3aWxsIG5vdCB3b3JrLlxuICogUGFzcyBhbnkgbmVlZGVkIHZhbHVlcyBhcyBgYXJnc2AgXHUyMDE0IHRoZXkgYXJlIEpTT04tc2VyaWFsaXplZCBhbmQgZGVzZXJpYWxpemVkIG9uIHRoZSBPYnNpZGlhbiBzaWRlLlxuICpcbiAqIFRoZSByZXN1bHQgaXMgYEpTT04uc3RyaW5naWZ5YCdkIG9uIHRoZSBPYnNpZGlhbiBzaWRlIGFuZCBwYXJzZWQgYmFjay5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBmdW5jdGlvbiB0byBldmFsdWF0ZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHJldHVybiB2YWx1ZSBvZiBgZm5gLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXZhbEluT2JzaWRpYW48QXJncyBleHRlbmRzIEdlbmVyaWNPYmplY3QsIFJlc3VsdCwgVENvbnRleHRJZCBleHRlbmRzIENvbnRleHRJZDx1bmtub3duPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4oXG4gIHBhcmFtczogRXZhbEluT2JzaWRpYW5QYXJhbXM8QXJncywgUmVzdWx0LCBUQ29udGV4dElkPlxuKTogUHJvbWlzZTxSZXN1bHQ+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZCAtLSBgZm5gIGNhbiBiZSB1bmJvdW5kLlxuICBjb25zdCB7IGFyZ3MgPSB7fSwgY29udGV4dElkLCBmbiwgc2hvdWxkU2tpcFByZWZsaWdodENoZWNrcyA9IGZhbHNlLCB0cmFuc3BvcnQ6IHRyYW5zcG9ydE92ZXJyaWRlLCB2YXVsdFBhdGggfSA9IHBhcmFtcztcbiAgY29uc3QgY3dkID0gdmF1bHRQYXRoID8/IGdldFZhdWx0UGF0aCgpID8/IHByb2Nlc3MuY3dkKCk7XG5cbiAgLy8gQ2hlY2s6IFZhdWx0IHBhdGggZXhpc3RzIG9uIGRpc2suXG4gIGlmICh2YXVsdFBhdGggIT09IHVuZGVmaW5lZCAmJiAhZXhpc3RzU3luYyh2YXVsdFBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBWYXVsdCBwYXRoIGRvZXMgbm90IGV4aXN0OiAke3ZhdWx0UGF0aH1gKTtcbiAgfVxuXG4gIGNvbnN0IHRyYW5zcG9ydCA9IHRyYW5zcG9ydE92ZXJyaWRlID8/IGF3YWl0IGdldE9yQ3JlYXRlVHJhbnNwb3J0KGdldFRyYW5zcG9ydE9wdGlvbnMoKSk7XG5cbiAgaWYgKCFzaG91bGRTa2lwUHJlZmxpZ2h0Q2hlY2tzKSB7XG4gICAgYXdhaXQgdHJhbnNwb3J0LnByZWZsaWdodENoZWNrKGN3ZCk7XG4gIH1cblxuICBhd2FpdCBlbnN1cmVOYW1lc3BhY2VCb290c3RyYXBwZWQodHJhbnNwb3J0LCBjd2QpO1xuXG4gIGNvbnN0IG5hbWVzcGFjZUNhbGxQYXJhbXM6IEdlbmVyYXRlTmFtZXNwYWNlQ2FsbFBhcmFtcyA9IHtcbiAgICBhcmdzLFxuICAgIGZuLFxuICAgIC4uLihjb250ZXh0SWQgIT09IHVuZGVmaW5lZCAmJiB7IGNvbnRleHRJZDogU3RyaW5nKGNvbnRleHRJZCkgfSlcbiAgfTtcblxuICBjb25zdCBleHByZXNzaW9uID0gZ2VuZXJhdGVOYW1lc3BhY2VDYWxsKG5hbWVzcGFjZUNhbGxQYXJhbXMpO1xuXG4gIGNvbnN0IHJlc3VsdFN0ciA9IGF3YWl0IHRyYW5zcG9ydC5ldmFsdWF0ZShleHByZXNzaW9uLCB7IGN3ZCB9KTtcblxuICBpZiAocmVzdWx0U3RyID09PSAnJyB8fCByZXN1bHRTdHIgPT09IE5PX09VVFBVVCkge1xuICAgIHJldHVybiB1bmRlZmluZWQgYXMgUmVzdWx0O1xuICB9XG5cbiAgbGV0IGVudmVsb3BlOiBFdmFsUmVzdWx0RW52ZWxvcGU7XG4gIHRyeSB7XG4gICAgZW52ZWxvcGUgPSBKU09OLnBhcnNlKHJlc3VsdFN0cikgYXMgRXZhbFJlc3VsdEVudmVsb3BlO1xuICB9IGNhdGNoIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGV2YWxJbk9ic2lkaWFuOiBPYnNpZGlhbiByZXR1cm5lZCBub24tSlNPTiBvdXRwdXQ6ICR7cmVzdWx0U3RyfWApO1xuICB9XG5cbiAgaWYgKCd0eXBlJyBpbiBlbnZlbG9wZSkge1xuICAgIGlmIChlbnZlbG9wZS50eXBlID09PSAnZXJyb3InKSB7XG4gICAgICAvLyBSZXdyaXRlIGJhcmUtb3JpZ2luIGxvY2FsaG9zdCBzdGFjayBmcmFtZXMgbGlrZSBcIihodHRwOi8vbG9jYWxob3N0Lzo5MTU6MzIpXCJcbiAgICAgIC8vIFNvIFZpdGVzdCdzIHNvdXJjZS1tYXAgcmVzb2x2ZXIgd29uJ3QgZXh0cmFjdCBcIi9cIiBhcyB0aGUgZmlsZSBwYXRoIGFuZCBjcmFzaFxuICAgICAgLy8gV2l0aCBFSVNESVIgd2hlbiBpdCB0cmllcyB0byByZWFkRmlsZVN5bmMgb24gdGhlIHJvb3QgZGlyZWN0b3J5LlxuICAgICAgY29uc3Qgc2FuaXRpemVkRGV0YWlsID0gZW52ZWxvcGUudmFsdWVcbiAgICAgICAgLnJlcGxhY2UoL1xcKGh0dHBzPzpcXC9cXC9sb2NhbGhvc3RcXC86KD88bGluZT5cXGQpL2csICcob2JzaWRpYW4td2VidmlldzokPGxpbmU+Jyk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGV2YWxJbk9ic2lkaWFuOiBFcnJvciBpbnNpZGUgT2JzaWRpYW46XFxuJHtzYW5pdGl6ZWREZXRhaWx9YCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZCBhcyBSZXN1bHQ7XG4gIH1cblxuICByZXR1cm4gZW52ZWxvcGUudmFsdWUgYXMgUmVzdWx0O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFlQSxxQkFBMkI7QUFDM0IsMEJBQW9CO0FBU3BCLDhCQUdPO0FBQ1Asb0NBQXNDO0FBQ3RDLGlDQUE0QztBQUM1QywrQkFBcUM7QUEyQnJDLE1BQU0sWUFBWTtBQTJVbEIsZUFBc0IsZUFDcEIsUUFDaUI7QUFFakIsUUFBTSxFQUFFLE9BQU8sQ0FBQyxHQUFHLFdBQVcsSUFBSSw0QkFBNEIsT0FBTyxXQUFXLG1CQUFtQixVQUFVLElBQUk7QUFDakgsUUFBTSxNQUFNLGlCQUFhLHNDQUFhLEtBQUssb0JBQUFBLFFBQVEsSUFBSTtBQUd2RCxNQUFJLGNBQWMsVUFBYSxLQUFDLDJCQUFXLFNBQVMsR0FBRztBQUNyRCxVQUFNLElBQUksTUFBTSw4QkFBOEIsU0FBUyxFQUFFO0FBQUEsRUFDM0Q7QUFFQSxRQUFNLFlBQVkscUJBQXFCLFVBQU0sbURBQXFCLDZDQUFvQixDQUFDO0FBRXZGLE1BQUksQ0FBQywyQkFBMkI7QUFDOUIsVUFBTSxVQUFVLGVBQWUsR0FBRztBQUFBLEVBQ3BDO0FBRUEsWUFBTSx3REFBNEIsV0FBVyxHQUFHO0FBRWhELFFBQU0sc0JBQW1EO0FBQUEsSUFDdkQ7QUFBQSxJQUNBO0FBQUEsSUFDQSxHQUFJLGNBQWMsVUFBYSxFQUFFLFdBQVcsT0FBTyxTQUFTLEVBQUU7QUFBQSxFQUNoRTtBQUVBLFFBQU0saUJBQWEscURBQXNCLG1CQUFtQjtBQUU1RCxRQUFNLFlBQVksTUFBTSxVQUFVLFNBQVMsWUFBWSxFQUFFLElBQUksQ0FBQztBQUU5RCxNQUFJLGNBQWMsTUFBTSxjQUFjLFdBQVc7QUFDL0MsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFJO0FBQ0osTUFBSTtBQUNGLGVBQVcsS0FBSyxNQUFNLFNBQVM7QUFBQSxFQUNqQyxRQUFRO0FBQ04sVUFBTSxJQUFJLE1BQU0sc0RBQXNELFNBQVMsRUFBRTtBQUFBLEVBQ25GO0FBRUEsTUFBSSxVQUFVLFVBQVU7QUFDdEIsUUFBSSxTQUFTLFNBQVMsU0FBUztBQUk3QixZQUFNLGtCQUFrQixTQUFTLE1BQzlCLFFBQVEseUNBQXlDLDJCQUEyQjtBQUMvRSxZQUFNLElBQUksTUFBTTtBQUFBLEVBQTJDLGVBQWUsRUFBRTtBQUFBLElBQzlFO0FBRUEsV0FBTztBQUFBLEVBQ1Q7QUFFQSxTQUFPLFNBQVM7QUFDbEI7IiwKICAibmFtZXMiOiBbInByb2Nlc3MiXQp9Cg==
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2V2YWwtaW4tb2JzaWRpYW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFdmFsdWF0ZXMgYSBmdW5jdGlvbiBpbnNpZGUgYSBydW5uaW5nIE9ic2lkaWFuIGluc3RhbmNlIHZpYSBhIHBsdWdnYWJsZSB0cmFuc3BvcnQuXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIEVkaXRvcixcbiAgTW9kaWZpZXJcbn0gZnJvbSAnb2JzaWRpYW4nO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLW5hbWVzcGFjZSAtLSBXZSBuZWVkIHRvIHJlZmVyZW5jZSBgb2JzaWRpYW5gIG1vZHVsZS5cbmltcG9ydCB0eXBlICogYXMgb2JzaWRpYW4gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcblxuaW1wb3J0IHR5cGUge1xuICBDb250ZXh0QXJncyxcbiAgQ29udGV4dElkXG59IGZyb20gJy4vY29udGV4dC1pZC5janMnO1xuaW1wb3J0IHR5cGUgeyBHZW5lcmF0ZU5hbWVzcGFjZUNhbGxQYXJhbXMgfSBmcm9tICcuL2dlbmVyYXRlLWZ1bmN0aW9uLWNhbGwuY2pzJztcbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5UcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC5janMnO1xuXG5pbXBvcnQge1xuICBnZXRUcmFuc3BvcnRPcHRpb25zLFxuICBnZXRWYXVsdFBhdGhcbn0gZnJvbSAnLi9jb250ZXh0LXByb3ZpZGVyLmNqcyc7XG5pbXBvcnQgeyBnZW5lcmF0ZU5hbWVzcGFjZUNhbGwgfSBmcm9tICcuL2dlbmVyYXRlLWZ1bmN0aW9uLWNhbGwuY2pzJztcbmltcG9ydCB7IGVuc3VyZU5hbWVzcGFjZUJvb3RzdHJhcHBlZCB9IGZyb20gJy4vbmFtZXNwYWNlLWJvb3RzdHJhcC5janMnO1xuaW1wb3J0IHsgZ2V0T3JDcmVhdGVUcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydC1mYWN0b3J5LmNqcyc7XG5cbmludGVyZmFjZSBFdmFsRXJyb3JFbnZlbG9wZSB7XG4gIHR5cGU6ICdlcnJvcic7XG4gIHZhbHVlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGlzY3JpbWluYXRlZCBlbnZlbG9wZSByZXR1cm5lZCBieSB0aGUgcmVnaXN0ZXJlZCBgZXZhbFdyYXBwZXJgIGZyb20gaW5zaWRlIHRoZSBPYnNpZGlhbiBwcm9jZXNzLlxuICpcbiAqIC0gYEV2YWxFcnJvckVudmVsb3BlYCBcdTIwMTQgYGZuYCB0aHJldzsgYHZhbHVlYCBpcyB0aGUgc2VyaWFsaXplZCBlcnJvci5cbiAqIC0gYEV2YWxVbmRlZmluZWRFbnZlbG9wZWAgXHUyMDE0IGBmbmAgcmV0dXJuZWQgYHVuZGVmaW5lZGAuXG4gKiAtIGBFdmFsVmFsdWVFbnZlbG9wZWAgXHUyMDE0IGBmbmAgcmV0dXJuZWQgYSBKU09OLXNlcmlhbGl6YWJsZSB2YWx1ZS5cbiAqL1xudHlwZSBFdmFsUmVzdWx0RW52ZWxvcGUgPVxuICB8IEV2YWxFcnJvckVudmVsb3BlXG4gIHwgRXZhbFVuZGVmaW5lZEVudmVsb3BlXG4gIHwgRXZhbFZhbHVlRW52ZWxvcGU7XG5cbmludGVyZmFjZSBFdmFsVW5kZWZpbmVkRW52ZWxvcGUge1xuICB0eXBlOiAndW5kZWZpbmVkJztcbn1cblxuaW50ZXJmYWNlIEV2YWxWYWx1ZUVudmVsb3BlIHtcbiAgdmFsdWU6IHVua25vd247XG59XG5cbmNvbnN0IE5PX09VVFBVVCA9ICcobm8gb3V0cHV0KSc7XG5cbi8qKlxuICogQ29tbW9uIGFyZ3VtZW50cyBhdXRvbWF0aWNhbGx5IHByb3ZpZGVkIHRvIGV2ZXJ5IHtAbGluayBldmFsSW5PYnNpZGlhbn0gY2FsbGJhY2suXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbW9uQXJncyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4ge0BsaW5rIEFwcH0gaW5zdGFuY2UuXG4gICAqL1xuICBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIHNoYXJlZCBsaWJyYXJ5IGJhZyBpbmplY3RlZCBpbnRvIGV2ZXJ5IGNhbGxiYWNrIFx1MjAxNCBzZWUge0BsaW5rIExpYn0uXG4gICAqXG4gICAqIE5ldmVyIGVtcHR5OiB0aGUgaGFybmVzcyBwcmUtcG9wdWxhdGVzIGEgKipiYXNlKiogc2V0IG9mIHJlbmRlcmVyLWRyaXZpbmdcbiAgICogaGVscGVycyAodHJ1c3RlZCBpbnB1dCBcdTIwMTQgYHR5cGVJbnRvRWRpdG9yYCAvIGBwcmVzc0tleWAgLyBgbW92ZU1vdXNlYCAvXG4gICAqIGBob3ZlckVsZW1lbnRgIC8gYHVuaG92ZXJFbGVtZW50YCBcdTIwMTQgYW5kIGB3YWl0VW50aWxgKSwgYW5kIHByb3ZpZGVyIHBhY2thZ2VzXG4gICAqIChjaGllZmx5IGBvYnNpZGlhbi1kZXYtdXRpbHNgKSBgT2JqZWN0LmFzc2lnbmAgdGhlaXIgd2hvbGUgcmVuZGVyZXItc2FmZVxuICAgKiBsaWJyYXJ5IG9uIHRvcCB2aWEge0BsaW5rIHJlZ2lzdGVyTGliUmVzb2x2ZXJ9LiBBIHNlcmlhbGl6ZWQgY2xvc3VyZSByZWFjaGVzXG4gICAqIGV2ZXJ5IHNoYXJlZCBoZWxwZXIgdGhyb3VnaCBgbGliYCBcdTIwMTQgYGxpYi50eXBlSW50b0VkaXRvcih7IGVkaXRvciwgdGV4dCB9KWAsXG4gICAqIGBsaWIuZ2V0RmlsZU9yTnVsbCh7IGFwcCwgXHUyMDI2IH0pYCBcdTIwMTQgaW5zdGVhZCBvZiBpbXBvcnRpbmcgb3IgaGFuZC1yb2xsaW5nIHRoZW0uXG4gICAqL1xuICBsaWI6IExpYjtcblxuICAvKipcbiAgICogVGhlIGBvYnNpZGlhbmAgbW9kdWxlLCByZXNvbHZlZCBhdCBydW50aW1lIGluc2lkZSB0aGUgT2JzaWRpYW4gcHJvY2Vzcy5cbiAgICovXG4gIG9ic2lkaWFuTW9kdWxlOiB0eXBlb2Ygb2JzaWRpYW47XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGV2YWxJbk9ic2lkaWFufS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmFsSW5PYnNpZGlhblBhcmFtczxBcmdzIGV4dGVuZHMgR2VuZXJpY09iamVjdCwgUmVzdWx0LCBUQ29udGV4dElkIGV4dGVuZHMgQ29udGV4dElkPHVua25vd24+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPiB7XG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBmdW5jdGlvbi4gVmFsdWVzIG1heSBpbmNsdWRlIGZ1bmN0aW9ucyBcdTIwMTRcbiAgICogdGhleSBhcmUgc2VyaWFsaXplZCB2aWEgYHRvU3RyaW5nKClgLlxuICAgKi9cbiAgcmVhZG9ubHkgYXJncz86IEFyZ3M7XG5cbiAgLyoqXG4gICAqIEEge0BsaW5rIENvbnRleHRJZH0gbGlua2luZyB0aGlzIGNhbGwgdG8gYSBwZXJzaXN0ZW50IHN0b3JlIG9uIGB3aW5kb3dgXG4gICAqIGluIHRoZSBPYnNpZGlhbiBwcm9jZXNzLiBUaGUgY2FsbGJhY2sgcmVjZWl2ZXMgYSB0eXBlZCBgY29udGV4dGAgb2JqZWN0XG4gICAqIHRoYXQgc3Vydml2ZXMgYWNyb3NzIGNhbGxzIHNoYXJpbmcgdGhlIHNhbWUgSUQuXG4gICAqXG4gICAqIFdoZW4gb21pdHRlZCwgYGNvbnRleHRgIGlzIGEgZnJlc2ggZW1wdHkgb2JqZWN0IGVhY2ggY2FsbC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHRJZD86IFRDb250ZXh0SWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiB0byBldmFsdWF0ZSBpbiB0aGUgT2JzaWRpYW4gY29udGV4dC5cbiAgICovXG4gIGZuKGFyZ3M6IEFyZ3MgJiBDb21tb25BcmdzICYgQ29udGV4dEFyZ3M8VENvbnRleHRJZD4pOiBQcm9taXNhYmxlPFJlc3VsdD47XG5cbiAgLyoqXG4gICAqIFNraXBzIHByZS1mbGlnaHQgY2hlY2tzICh2YXVsdCByZWdpc3RyYXRpb24sIENMSSBhdmFpbGFiaWxpdHkpLlxuICAgKiBVc2VkIGludGVybmFsbHkgYnkgdmF1bHQgcmVnaXN0cmF0aW9uIGZ1bmN0aW9ucy5cbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICByZWFkb25seSBzaG91bGRTa2lwUHJlZmxpZ2h0Q2hlY2tzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3ZlcnJpZGUgdGhlIHRyYW5zcG9ydCBmb3IgdGhpcyBjYWxsLiBXaGVuIG9taXR0ZWQsIHVzZXMgdGhlIHRyYW5zcG9ydFxuICAgKiBjb25maWd1cmVkIHZpYSB0aGUgY29udGV4dCBwcm92aWRlciAoc2V0IGJ5IHRoZSBmcmFtZXdvcmsgYWRhcHRlcidzIGdsb2JhbCBzZXR1cCkuXG4gICAqL1xuICByZWFkb25seSB0cmFuc3BvcnQ/OiBPYnNpZGlhblRyYW5zcG9ydDtcblxuICAvKipcbiAgICogVGhlIHBhdGggdG8gdGhlIE9ic2lkaWFuIHZhdWx0LiBEZWZhdWx0cyB0byBgcHJvY2Vzcy5jd2QoKWAuXG4gICAqL1xuICByZWFkb25seSB2YXVsdFBhdGg/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSBwbGFpbiBvYmplY3Qgd2l0aCBzdHJpbmcga2V5cy5cbiAqL1xuZXhwb3J0IHR5cGUgR2VuZXJpY09iamVjdCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBDb21tb25BcmdzLmhvdmVyRWxlbWVudH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSG92ZXJFbGVtZW50UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRvIGhvdmVyLiBUaGUgcG9pbnRlciBpcyBtb3ZlZCB0byBpdHMgY2VudGVyLiBUaGlzIGlzIGEgbGl2ZVxuICAgKiByZW5kZXJlciBET00gbm9kZSBcdTIwMTQgdGhlIGNhbGxiYWNrIHJ1bnMgaW4tcmVuZGVyZXIsIHNvIG5vIGNyb3NzLXByb2Nlc3NcbiAgICogc2VyaWFsaXphdGlvbiBpcyBuZWVkZWQgKHNhbWUgYXMge0BsaW5rIFR5cGVJbnRvRWRpdG9yUGFyYW1zLmVkaXRvcn0pLlxuICAgKi9cbiAgcmVhZG9ubHkgZWxlbWVudDogSFRNTEVsZW1lbnQ7XG59XG5cbi8qKlxuICogVGhlIHNoYXJlZCBsaWJyYXJ5IGJhZyBpbmplY3RlZCBpbnRvIGV2ZXJ5IHtAbGluayBldmFsSW5PYnNpZGlhbn0gY2FsbGJhY2sgYXNcbiAqIHtAbGluayBDb21tb25BcmdzLmxpYn0uXG4gKlxuICogVHdvIGxheWVycyBjb21wb3NlIGludG8gdGhpcyBvbmUgYmFnLiBUaGUgKipiYXNlKiogXHUyMDE0IHRoZSBoYXJuZXNzLXByb3ZpZGVkXG4gKiByZW5kZXJlci1kcml2aW5nIGhlbHBlcnMgZGVjbGFyZWQgYmVsb3cgKHRoZSB0cnVzdGVkLWlucHV0IHByaW1pdGl2ZXMgYW5kXG4gKiB7QGxpbmsgTGliLndhaXRVbnRpbH0pIFx1MjAxNCBpcyBhbHdheXMgcHJlc2VudC4gT24gdG9wLCBwcm92aWRlciBwYWNrYWdlcyByZWdpc3RlclxuICogYSByZW5kZXJlci1zaWRlIHJlc29sdmVyIHZpYSB7QGxpbmsgcmVnaXN0ZXJMaWJSZXNvbHZlcn0gdG8gYE9iamVjdC5hc3NpZ25gXG4gKiB0aGVpciB3aG9sZSByZW5kZXJlci1zYWZlIGxpYnJhcnkgYXQgcnVudGltZSwgYW5kIGF1Z21lbnQgdGhpcyAqKmF1Z21lbnRhYmxlKipcbiAqIGludGVyZmFjZSAodGhlIGBpMThuZXh0YCBgQ3VzdG9tVHlwZU9wdGlvbnNgIGlkaW9tKSB2aWFcbiAqIGBkZWNsYXJlIG1vZHVsZSAnb2JzaWRpYW4taW50ZWdyYXRpb24tdGVzdGluZydgIHRvIHR5cGUgaXQuIE11bHRpcGxlIHByb3ZpZGVyc1xuICogY29tcG9zZTogdGhlaXIgZXhwb3J0cyBtZXJnZSBhdCBydW50aW1lIGFuZCB0aGVpciBhdWdtZW50YXRpb25zIG1lcmdlIGluIHRoZVxuICogdHlwZSBzeXN0ZW0gKGBpbnRlcmZhY2UgTGliIGV4dGVuZHMgXHUyMDI2YCkuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBkZWNsYXJlIG1vZHVsZSAnb2JzaWRpYW4taW50ZWdyYXRpb24tdGVzdGluZycge1xuICogICBpbnRlcmZhY2UgTGliIGV4dGVuZHMgKHR5cGVvZiBpbXBvcnQoJ29ic2lkaWFuLWRldi11dGlscy9fX21lcmdlZCcpKSB7fVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGliIHtcbiAgLyoqXG4gICAqIE1vdmVzIHRoZSBtb3VzZSBwb2ludGVyIHRvIHRoZSBjZW50ZXIgb2YgYW4gZWxlbWVudCB1c2luZyAqKnRydXN0ZWQqKlxuICAgKiBFbGVjdHJvbiBwb2ludGVyIGlucHV0LCB0aGVuIHBvbGxzIHVudGlsIHRoZSBlbGVtZW50IGFjdHVhbGx5IG1hdGNoZXNcbiAgICogYDpob3ZlcmAuXG4gICAqXG4gICAqIEJlY2F1c2UgdGhlIG1vdmUgaXMgdHJ1c3RlZCAoc2VlIHtAbGluayBMaWIubW92ZU1vdXNlfSksIHRoZSByZWFsIGA6aG92ZXJgXG4gICAqIHN0YXRlIHRha2VzIGVmZmVjdCBpbiB0aGUgQ1NTIGVuZ2luZSBcdTIwMTQgcmVhbCB0aGVtZSBgdmFyKClgIHZhbHVlcyBhbmQgcmVhbFxuICAgKiBjb21wb3NpdGluZyBcdTIwMTQgaW5zdGVhZCBvZiBhIGhhbmQtc2ltdWxhdGVkIGNhc2NhZGUuIEl0IHBvbGxzIHRoZSBsaXZlXG4gICAqIGBlbGVtZW50Lm1hdGNoZXMoJzpob3ZlcicpYCBzdGF0ZSAobm90IGEgZml4ZWQgZGVsYXkpLCBzbyBpdCBpcyByb2J1c3QgdW5kZXJcbiAgICogc2hhcmVkLWluc3RhbmNlIGxvYWQuIEl0IHRhcmdldHMgdGhlIHNpbmdsZSBzaGFyZWQgd2luZG93J3MgKipnbG9iYWwqKlxuICAgKiBwb2ludGVyLCBzbyBvbmx5IG9uZSBlbGVtZW50IGlzIGhvdmVyZWQgYXQgYSB0aW1lLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGVsZW1lbnQgdG8gaG92ZXIuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgZWxlbWVudCBtYXRjaGVzIGA6aG92ZXJgLlxuICAgKi9cbiAgaG92ZXJFbGVtZW50KHRoaXM6IHZvaWQsIHBhcmFtczogSG92ZXJFbGVtZW50UGFyYW1zKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogTW92ZXMgdGhlIG1vdXNlIHBvaW50ZXIgdG8gdGhlIGdpdmVuIHdlYi1jb250ZW50cyBjb29yZGluYXRlcyB1c2luZyBhXG4gICAqICoqdHJ1c3RlZCoqIEVsZWN0cm9uIHBvaW50ZXIgbW92ZS5cbiAgICpcbiAgICogQSB0cnVzdGVkIG1vdmUgKGluamVjdGVkIHZpYSBFbGVjdHJvbidzIGB3ZWJDb250ZW50cy5zZW5kSW5wdXRFdmVudGApXG4gICAqIHVwZGF0ZXMgdGhlIHJlYWwgcG9pbnRlciBzdGF0ZSBpbiB0aGUgQ1NTIGVuZ2luZSwgc28gYDpob3ZlcmAgcnVsZXNcbiAgICogZ2VudWluZWx5IGFwcGx5IFx1MjAxNCB1bmxpa2UgYGRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoJ21vdXNlb3ZlcicpKWAsXG4gICAqIHdoaWNoIGlzIHVudHJ1c3RlZCBhbmQgbmV2ZXIgc2V0cyBgOmhvdmVyYC4gSXQgdGFyZ2V0cyB0aGUgc2luZ2xlIHNoYXJlZFxuICAgKiB3aW5kb3cncyAqKmdsb2JhbCoqIHBvaW50ZXIsIHNvIG9ubHkgb25lIGVsZW1lbnQgaXMgaG92ZXJlZCBhdCBhIHRpbWUuXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIGxvdy1sZXZlbCBwcmltaXRpdmU6IGl0IHBlcmZvcm1zIGEgc2luZ2xlIG1vdmUgYW5kIGRvZXMgKipub3QqKlxuICAgKiB3YWl0IGZvciBhbnkgc3RhdGUgdG8gc2V0dGxlIChjYWxsZXJzIHBvbGwgdGhlaXIgb3duIHJlYWRpbmVzcyBzaWduYWwpLlxuICAgKiBQcmVmZXIge0BsaW5rIExpYi5ob3ZlckVsZW1lbnR9IC8ge0BsaW5rIExpYi51bmhvdmVyRWxlbWVudH0gZm9yXG4gICAqIGVsZW1lbnQtcmVsYXRpdmUgbW92ZXM7IHVzZSBgbW92ZU1vdXNlYCBkaXJlY3RseSB3aGVuIGFuIGVsZW1lbnQtcmVsYXRpdmVcbiAgICogdGFyZ2V0IGRvZXMgbm90IGZpdCAoZS5nLiBhbiBlbGVtZW50IHNwYW5uaW5nIHRoZSBmdWxsIHZpZXdwb3J0IHdpZHRoKS5cbiAgICpcbiAgICogU3luY2hyb25vdXM6IGluamVjdGluZyB0aGUgdHJ1c3RlZCBtb3ZlIGRvZXMgbm8gcmVhbCBhd2FpdGluZywgc28gdGhlIGNhbGxlclxuICAgKiBkb2VzIG5vdCBuZWVkIHRvIGBhd2FpdGAgaXQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgd2ViLWNvbnRlbnRzIERJUCBjb29yZGluYXRlcyB0byBtb3ZlIHRvLlxuICAgKi9cbiAgbW92ZU1vdXNlKHRoaXM6IHZvaWQsIHBhcmFtczogTW92ZU1vdXNlUGFyYW1zKTogdm9pZDtcblxuICAvKipcbiAgICogUHJlc3NlcyBhIHNpbmdsZSBrZXkgKG9wdGlvbmFsbHkgd2l0aCBtb2RpZmllcnMpIHVzaW5nICoqdHJ1c3RlZCoqIEVsZWN0cm9uXG4gICAqIGtleWJvYXJkIGlucHV0LCBmaXJpbmcgdGhlIGZ1bGwgcmVhbCBrZXkgcGlwZWxpbmUgXHUyMDE0XG4gICAqIGBrZXlkb3duYCBcdTIxOTIgYGtleXByZXNzYCBcdTIxOTIgYGJlZm9yZWlucHV0YCBcdTIxOTIgYGlucHV0YCBcdTIxOTIgYGtleXVwYC5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUga2V5LXByZXNzIGFuYWxvZyBvZiB7QGxpbmsgTGliLnR5cGVJbnRvRWRpdG9yfTogaXQgaW5qZWN0cyBhXG4gICAqIHRydXN0ZWQgYGtleURvd25gIFx1MjE5MiBgY2hhcmAgXHUyMTkyIGBrZXlVcGAgc2VxdWVuY2UgdmlhIEVsZWN0cm9uJ3NcbiAgICogYHdlYkNvbnRlbnRzLnNlbmRJbnB1dEV2ZW50YCwgc28gaXQgaXMgZGVsaXZlcmVkIHRvIHRoZSB3aW5kb3cncyBET00tZm9jdXNlZFxuICAgKiBlbGVtZW50IGFuZCBmbG93cyB0aHJvdWdoIHRoZSByZWFsIGlucHV0IHBpcGVsaW5lIFx1MjAxNCB1bmxpa2VcbiAgICogYGRpc3BhdGNoRXZlbnQobmV3IEtleWJvYXJkRXZlbnQoLi4uKSlgLCB3aGljaCBpcyB1bnRydXN0ZWQgKGBpc1RydXN0ZWQ6XG4gICAqIGZhbHNlYCkgYW5kIGlnbm9yZWQgYnkgQ29kZU1pcnJvciBhbmQgbW9zdCBrZXkgaGFuZGxlcnMuIFVzZSBpdCBmb3Igc3BlY2lhbFxuICAgKiBrZXlzIChgJ0VudGVyJ2AsIGAnRXNjYXBlJ2AsIGAnVGFiJ2AsIGFycm93IGtleXMpIGFuZCBtb2RpZmllciBjb21iaW5hdGlvbnNcbiAgICogKGBTaGlmdCtFbnRlcmAsIGBDdHJsK0FgKSB0aGF0IHtAbGluayBMaWIudHlwZUludG9FZGl0b3J9ICh3aGljaCB0eXBlc1xuICAgKiBwcmludGFibGUgdGV4dCkgZG9lcyBub3QgY292ZXIuXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIGxvdy1sZXZlbCBwcmltaXRpdmU6IGl0IGluamVjdHMgdGhlIGtleSBwcmVzcyBhbmQgZG9lcyAqKm5vdCoqXG4gICAqIHBvbGwgZm9yIGFueSBlZmZlY3QgKGEga2V5IHByZXNzIGhhcyBubyB1bml2ZXJzYWwgb2JzZXJ2YWJsZSBvdXRjb21lIFx1MjAxNFxuICAgKiBgRW50ZXJgIGVkaXRzIHRoZSBkb2N1bWVudCwgYEVzY2FwZWAgY2xvc2VzIGEgbW9kYWwsIGBBcnJvd0Rvd25gIG1vdmVzIHRoZVxuICAgKiBzZWxlY3Rpb24pLiBUaGUgY2FsbGVyIGZvY3VzZXMgdGhlIGludGVuZGVkIHRhcmdldCBmaXJzdCwgdGhlbiBhd2FpdHMgdGhlXG4gICAqIGV4cGVjdGVkIGVmZmVjdCB2aWEge0BsaW5rIExpYi53YWl0VW50aWx9LiBJdCB0YXJnZXRzIHRoZSBzaW5nbGUgc2hhcmVkXG4gICAqIHdpbmRvdydzICoqZ2xvYmFsKiogZm9jdXMsIHNvIG9ubHkgdGhlIERPTS1mb2N1c2VkIGVsZW1lbnQgcmVjZWl2ZXMgdGhlIGtleS5cbiAgICpcbiAgICogU3luY2hyb25vdXM6IGluamVjdGluZyB0aGUgdHJ1c3RlZCBrZXkgcHJlc3MgZG9lcyBubyByZWFsIGF3YWl0aW5nLCBzbyB0aGVcbiAgICogY2FsbGVyIGRvZXMgbm90IG5lZWQgdG8gYGF3YWl0YCBpdC5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBrZXkgdG8gcHJlc3MgYW5kIGFueSBtb2RpZmllcnMgdG8gaG9sZC5cbiAgICovXG4gIHByZXNzS2V5KHRoaXM6IHZvaWQsIHBhcmFtczogUHJlc3NLZXlQYXJhbXMpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBUeXBlcyB0ZXh0IGludG8gYSBDb2RlTWlycm9yIHtAbGluayBFZGl0b3J9IHVzaW5nICoqdHJ1c3RlZCoqIEVsZWN0cm9uXG4gICAqIGtleWJvYXJkIGlucHV0LlxuICAgKlxuICAgKiBUeXBpbmcgaXMgcHJlc3NpbmcgZWFjaCBjaGFyYWN0ZXIga2V5IGluIHR1cm46IHRoaXMgZm9jdXNlcyB0aGUgZWRpdG9yXG4gICAqIChjYXJldCB0byBlbmQpIGFuZCBwcmVzc2VzIGV2ZXJ5IGNvZGUgcG9pbnQgb2YgYHRleHRgIHZpYVxuICAgKiB7QGxpbmsgTGliLnByZXNzS2V5fSBcdTIwMTQgdGhlIHNhbWUgdHJ1c3RlZCBga2V5RG93bmAgXHUyMTkyIGBjaGFyYCBcdTIxOTIgYGtleVVwYCBhIHJlYWxcbiAgICogdXNlciBwcm9kdWNlcy4gRWFjaCBrZXlzdHJva2UgaXMgZGVsaXZlcmVkIHRvIHRoZSB3aW5kb3cncyBET00tZm9jdXNlZFxuICAgKiBlbGVtZW50IGFuZCBmbG93cyB0aHJvdWdoIENvZGVNaXJyb3IncyByZWFsIGlucHV0IHBpcGVsaW5lLCBzbyB0aGUgdHlwZWRcbiAgICogdGV4dCByZWFjaGVzIHRoZSBkb2N1bWVudCAqKm9ubHkgaWYgdGhlIGVkaXRvciBnZW51aW5lbHkgaG9sZHMgZm9jdXMqKi5cbiAgICogVGhpcyBtYWtlcyBcInRoZSB1c2VyIHR5cGVkIGludG8gdGhlIGVkaXRvclwiIGEgZmFpdGhmdWwgZW5kLXRvLWVuZCBjaGVjayxcbiAgICogdW5saWtlIGBkaXNwYXRjaEV2ZW50KG5ldyBLZXlib2FyZEV2ZW50KC4uLikpYCAodW50cnVzdGVkIFx1MjAxNCBpZ25vcmVkIGJ5XG4gICAqIENvZGVNaXJyb3IpIG9yIGBleGVjQ29tbWFuZCgnaW5zZXJ0VGV4dCcpYCAobXV0YXRlcyB0aGUgc2VsZWN0aW9uIGV2ZW5cbiAgICogd2hlbiB0aGUgZWRpdG9yIGlzIG5vdCBmb2N1c2VkLCBtYXNraW5nIGZvY3VzIGJ1Z3MgYXMgZmFsc2UgcG9zaXRpdmVzKS5cbiAgICpcbiAgICogQWZ0ZXIgaW5qZWN0aW5nIHRoZSBrZXlzdHJva2VzIGl0IHBvbGxzIHVudGlsIHRoZSBkb2N1bWVudCByZWZsZWN0cyB0aGVcbiAgICogaW5wdXQsIG9yIGEgYm91bmRlZCB0aW1lb3V0IGVsYXBzZXMgKHRoZSBleHBlY3RlZCBvdXRjb21lIHdoZW4gdGhlIGVkaXRvclxuICAgKiBpcyByZWFkLW9ubHkgYW5kIHJlamVjdHMgdGhlIGlucHV0LCBvciB3aGVuIGZvY3VzIHdhcyBzdG9sZW4pLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGVkaXRvciB0byB0eXBlIGludG8gYW5kIHRoZSB0ZXh0IHRvIHR5cGUuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUga2V5c3Ryb2tlcyBoYXZlIHNldHRsZWQuXG4gICAqL1xuICB0eXBlSW50b0VkaXRvcih0aGlzOiB2b2lkLCBwYXJhbXM6IFR5cGVJbnRvRWRpdG9yUGFyYW1zKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogTW92ZXMgdGhlIG1vdXNlIHBvaW50ZXIgdG8gYSBwb2ludCBqdXN0IG91dHNpZGUgYW4gZWxlbWVudCdzIGJvdW5kaW5nIGJveFxuICAgKiB1c2luZyBhICoqdHJ1c3RlZCoqIEVsZWN0cm9uIHBvaW50ZXIgbW92ZSwgdGhlbiBwb2xscyB1bnRpbCB0aGUgZWxlbWVudCBub1xuICAgKiBsb25nZXIgbWF0Y2hlcyBgOmhvdmVyYC5cbiAgICpcbiAgICogVGhlIGludmVyc2Ugb2Yge0BsaW5rIExpYi5ob3ZlckVsZW1lbnR9LiBJdCB0YXJnZXRzIHRoZSBzaW5nbGUgc2hhcmVkXG4gICAqIHdpbmRvdydzICoqZ2xvYmFsKiogcG9pbnRlciwgc28gb25seSBvbmUgZWxlbWVudCBpcyBob3ZlcmVkIGF0IGEgdGltZS4gV2hlblxuICAgKiBhbiBlbGVtZW50IHNwYW5zIHRoZSBmdWxsIHZpZXdwb3J0IChubyBwb2ludCBvdXRzaWRlIGl0cyBib3ggaXMgcmVhY2hhYmxlKSxcbiAgICogdXNlIHtAbGluayBMaWIubW92ZU1vdXNlfSBkaXJlY3RseSB0byBtb3ZlIHRoZSBwb2ludGVyIHRvIGEga25vd24gZW1wdHlcbiAgICogY29vcmRpbmF0ZSBpbnN0ZWFkLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGVsZW1lbnQgdG8gbW92ZSB0aGUgcG9pbnRlciBhd2F5IGZyb20uXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgZWxlbWVudCBubyBsb25nZXIgbWF0Y2hlc1xuICAgKiAgIGA6aG92ZXJgLlxuICAgKi9cbiAgdW5ob3ZlckVsZW1lbnQodGhpczogdm9pZCwgcGFyYW1zOiBVbmhvdmVyRWxlbWVudFBhcmFtcyk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIFBvbGxzIGEgcHJlZGljYXRlIHVudGlsIGl0IGJlY29tZXMgdHJ1dGh5LCBvciByZWplY3RzIG9uY2UgYSBib3VuZGVkXG4gICAqIHRpbWVvdXQgZWxhcHNlcy5cbiAgICpcbiAgICogSW50ZWdyYXRpb24tdGVzdCBgZXZhbEluT2JzaWRpYW5gIGNhbGxiYWNrcyByb3V0aW5lbHkgbmVlZCB0byB3YWl0IGZvciBhblxuICAgKiBhc3luY2hyb25vdXMgZWZmZWN0IHRvIHNldHRsZSAoYSB2aWV3IHRvIG9wZW4sIGEgRE9NIG5vZGUgdG8gYXBwZWFyLCBhXG4gICAqIHNldHRpbmcgdG8gYXBwbHkpLiBCZWNhdXNlIHRoZSBjYWxsYmFjayBpcyBzZXJpYWxpemVkIHZpYSBgdG9TdHJpbmcoKWAgYW5kXG4gICAqIGNhbm5vdCBpbXBvcnQgbW9kdWxlcywgaXQgY2FuJ3QgcmV1c2UgYG9ic2lkaWFuLWRldi11dGlsc2AnXG4gICAqIGByZXRyeVdpdGhUaW1lb3V0YCAvIGBydW5XaXRoVGltZW91dGAuIFRoaXMgaGVscGVyIGlzIHRoZSBzaGFyZWQsIGluamVjdGVkXG4gICAqIHJlcGxhY2VtZW50IGZvciB0aGUgcGVyLWNsb3N1cmUgcG9sbCBsb29wcyBjb25zdW1lcnMgd291bGQgb3RoZXJ3aXNlXG4gICAqIGhhbmQtcm9sbC5cbiAgICpcbiAgICogVGhlIGBwcmVkaWNhdGVgIG1heSBiZSBzeW5jaHJvbm91cyBvciBhc3luY2hyb25vdXMgXHUyMDE0IGl0IGlzIGF3YWl0ZWQgb24gZXZlcnlcbiAgICogcG9sbC4gSXQgaXMgY2hlY2tlZCBpbW1lZGlhdGVseSwgdGhlbiByZS1jaGVja2VkIGV2ZXJ5XG4gICAqIGBpbnRlcnZhbEluTWlsbGlzZWNvbmRzYCB1bnRpbCBpdCByZXR1cm5zIHRydXRoeSBvciBgdGltZW91dEluTWlsbGlzZWNvbmRzYFxuICAgKiBlbGFwc2VzLCBhdCB3aGljaCBwb2ludCB0aGUgcmV0dXJuZWQge0BsaW5rIFByb21pc2V9IHJlamVjdHMgKHRoZSBlcnJvclxuICAgKiBpbmNsdWRlcyBgbWVzc2FnZWAgd2hlbiBwcm92aWRlZCkuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcHJlZGljYXRlIHRvIHBvbGwgcGx1cyBvcHRpb25hbCB0aW1lb3V0LCBpbnRlcnZhbCwgYW5kXG4gICAqICAgdGltZW91dCBtZXNzYWdlLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHByZWRpY2F0ZSBpcyB0cnV0aHkuXG4gICAqL1xuICB3YWl0VW50aWwodGhpczogdm9pZCwgcGFyYW1zOiBXYWl0VW50aWxQYXJhbXMpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBDb21tb25BcmdzLm1vdmVNb3VzZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW92ZU1vdXNlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSB4IGNvb3JkaW5hdGUgKHdlYi1jb250ZW50cyBESVApIHRvIG1vdmUgdGhlIHBvaW50ZXIgdG8uXG4gICAqL1xuICByZWFkb25seSB4OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB5IGNvb3JkaW5hdGUgKHdlYi1jb250ZW50cyBESVApIHRvIG1vdmUgdGhlIHBvaW50ZXIgdG8uXG4gICAqL1xuICByZWFkb25seSB5OiBudW1iZXI7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIENvbW1vbkFyZ3MucHJlc3NLZXl9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByZXNzS2V5UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBrZXkgdG8gcHJlc3MsIGdpdmVuIGFzIGFuIEVsZWN0cm9uIEFjY2VsZXJhdG9yIGtleSBuYW1lIFx1MjAxNCBlLmcuXG4gICAqIGAnRW50ZXInYCwgYCdFc2NhcGUnYCwgYCdUYWInYCwgYCdCYWNrc3BhY2UnYCwgYCdEZWxldGUnYCwgYW4gYXJyb3cga2V5XG4gICAqIChgJ1VwJ2AgLyBgJ0Rvd24nYCAvIGAnTGVmdCdgIC8gYCdSaWdodCdgKSwgb3IgYSBwcmludGFibGUgY2hhcmFjdGVyXG4gICAqIChgJ2EnYCwgYCcxJ2ApLiBUaGUgcHJvZHVjZWQgY2hhcmFjdGVyICh3aGVuIHRoZSBrZXkgaW5zZXJ0cyB0ZXh0KSBpcyB0aGVcbiAgICogbGl0ZXJhbCBga2V5YCB2YWx1ZTsgY2FzZS1jb3JyZWN0IHRleHQgYmVsb25ncyB0b1xuICAgKiB7QGxpbmsgQ29tbW9uQXJncy50eXBlSW50b0VkaXRvcn0sIG5vdCBhIGtleS1wcmVzcyBwcmltaXRpdmUuXG4gICAqL1xuICByZWFkb25seSBrZXk6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG1vZGlmaWVyIGtleXMgdG8gaG9sZCB3aGlsZSB0aGUga2V5IGlzIHByZXNzZWQsIHVzaW5nIE9ic2lkaWFuJ3NcbiAgICoge0BsaW5rIE1vZGlmaWVyfSBuYW1lcyAodGhlIHNhbWUgdmFsdWVzIGFzIGFuIE9ic2lkaWFuIGBIb3RrZXlgKS4gYCdNb2QnYFxuICAgKiByZXNvbHZlcyBwZXItcGxhdGZvcm0gKENtZCBvbiBtYWNPUywgQ3RybCBlbHNld2hlcmUpOyBlYWNoIGlzIG1hcHBlZCB0b1xuICAgKiBFbGVjdHJvbidzIGxvd2VyY2FzZSBgc2VuZElucHV0RXZlbnRgIG1vZGlmaWVyIG5hbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBbXWBcbiAgICovXG4gIHJlYWRvbmx5IG1vZGlmaWVycz86IHJlYWRvbmx5IE1vZGlmaWVyW107XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIENvbW1vbkFyZ3MudHlwZUludG9FZGl0b3J9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVJbnRvRWRpdG9yUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBlZGl0b3IgdG8gdHlwZSBpbnRvLiBJdCBpcyBmb2N1c2VkICh3aXRoIHRoZSBjYXJldCBtb3ZlZCB0byB0aGUgZW5kIG9mXG4gICAqIHRoZSBkb2N1bWVudCkgYmVmb3JlIHRoZSBrZXlzdHJva2VzIGFyZSBpbmplY3RlZC5cbiAgICovXG4gIHJlYWRvbmx5IGVkaXRvcjogRWRpdG9yO1xuXG4gIC8qKlxuICAgKiBUaGUgdGV4dCB0byB0eXBlLiBFYWNoIGNvZGUgcG9pbnQgaXMgcHJlc3NlZCB2aWEge0BsaW5rIENvbW1vbkFyZ3MucHJlc3NLZXl9XG4gICAqIChhIHRydXN0ZWQgYGtleURvd25gIFx1MjE5MiBgY2hhcmAgXHUyMTkyIGBrZXlVcGApLCBleGFjdGx5IGFzIGEgcmVhbCB1c2VyIHR5cGluZy5cbiAgICovXG4gIHJlYWRvbmx5IHRleHQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgQ29tbW9uQXJncy51bmhvdmVyRWxlbWVudH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVW5ob3ZlckVsZW1lbnRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGVsZW1lbnQgdG8gbW92ZSB0aGUgcG9pbnRlciBhd2F5IGZyb20uIFRoZSBwb2ludGVyIGlzIG1vdmVkIHRvIGEgcG9pbnRcbiAgICoganVzdCBvdXRzaWRlIGl0cyBib3VuZGluZyBib3guIFRoaXMgaXMgYSBsaXZlIHJlbmRlcmVyIERPTSBub2RlIFx1MjAxNCB0aGVcbiAgICogY2FsbGJhY2sgcnVucyBpbi1yZW5kZXJlciwgc28gbm8gY3Jvc3MtcHJvY2VzcyBzZXJpYWxpemF0aW9uIGlzIG5lZWRlZFxuICAgKiAoc2FtZSBhcyB7QGxpbmsgVHlwZUludG9FZGl0b3JQYXJhbXMuZWRpdG9yfSkuXG4gICAqL1xuICByZWFkb25seSBlbGVtZW50OiBIVE1MRWxlbWVudDtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgQ29tbW9uQXJncy53YWl0VW50aWx9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdhaXRVbnRpbFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgcG9sbGluZyBpbnRlcnZhbCBiZXR3ZWVuIHByZWRpY2F0ZSBjaGVja3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IGA1MGBcbiAgICovXG4gIHJlYWRvbmx5IGludGVydmFsSW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEFuIG9wdGlvbmFsIGRldGFpbCBhcHBlbmRlZCB0byB0aGUgdGltZW91dCBlcnJvciBtZXNzYWdlLCBkZXNjcmliaW5nIHdoYXRcbiAgICogd2FzIGJlaW5nIHdhaXRlZCBmb3IuXG4gICAqL1xuICByZWFkb25seSBtZXNzYWdlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29uZGl0aW9uIHRvIHdhaXQgZm9yLiBQb2xsZWQgaW1tZWRpYXRlbHksIHRoZW4gb24gZXZlcnkgaW50ZXJ2YWwgdW50aWxcbiAgICogaXQgcmV0dXJucyBhIHRydXRoeSB2YWx1ZS4gTWF5IGJlIHN5bmNocm9ub3VzIG9yIGFzeW5jaHJvbm91cyBcdTIwMTQgaXQgaXNcbiAgICogYXdhaXRlZCBvbiBlYWNoIHBvbGwuXG4gICAqXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGF3YWl0ZWQgY29uZGl0aW9uIGhhcyBiZWVuIG1ldC5cbiAgICovXG4gIHByZWRpY2F0ZSh0aGlzOiB2b2lkKTogYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj47XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIHRpbWUgdG8gd2FpdCBiZWZvcmUgcmVqZWN0aW5nLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgNTAwMGBcbiAgICovXG4gIHJlYWRvbmx5IHRpbWVvdXRJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBFdmFsdWF0ZXMgYSBmdW5jdGlvbiBpbnNpZGUgdGhlIHJ1bm5pbmcgT2JzaWRpYW4gaW5zdGFuY2VcbiAqIHZpYSB0aGUgYWN0aXZlIHRyYW5zcG9ydCBhbmQgcmV0dXJucyB0aGUgcGFyc2VkIHJlc3VsdC5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gcmVjZWl2ZXMgYW4gYXJncyBvYmplY3QgdGhhdCBpbmNsdWRlcyBgYXBwYCwgYG9ic2lkaWFuTW9kdWxlYCxcbiAqIGBjb250ZXh0YCwgYW5kIGFueSBhZGRpdGlvbmFsIGBhcmdzYCBwYXNzZWQgYnkgdGhlIGNhbGxlci5cbiAqIEl0IGlzIHNlcmlhbGl6ZWQgdmlhIGB0b1N0cmluZygpYCBhbmQgaW52b2tlZCBhcyBhbiBJSUZFLlxuICogVGhlIGZ1bmN0aW9uIG11c3QgYmUgc2VsZi1jb250YWluZWQgXHUyMDE0IGNsb3N1cmVzIG92ZXIgbG9jYWwgdmFyaWFibGVzIHdpbGwgbm90IHdvcmsuXG4gKiBQYXNzIGFueSBuZWVkZWQgdmFsdWVzIGFzIGBhcmdzYCBcdTIwMTQgdGhleSBhcmUgSlNPTi1zZXJpYWxpemVkIGFuZCBkZXNlcmlhbGl6ZWQgb24gdGhlIE9ic2lkaWFuIHNpZGUuXG4gKlxuICogVGhlIHJlc3VsdCBpcyBgSlNPTi5zdHJpbmdpZnlgJ2Qgb24gdGhlIE9ic2lkaWFuIHNpZGUgYW5kIHBhcnNlZCBiYWNrLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgdGhlIGZ1bmN0aW9uIHRvIGV2YWx1YXRlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgcmV0dXJuIHZhbHVlIG9mIGBmbmAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBldmFsSW5PYnNpZGlhbjxBcmdzIGV4dGVuZHMgR2VuZXJpY09iamVjdCwgUmVzdWx0LCBUQ29udGV4dElkIGV4dGVuZHMgQ29udGV4dElkPHVua25vd24+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPihcbiAgcGFyYW1zOiBFdmFsSW5PYnNpZGlhblBhcmFtczxBcmdzLCBSZXN1bHQsIFRDb250ZXh0SWQ+XG4pOiBQcm9taXNlPFJlc3VsdD4ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kIC0tIGBmbmAgY2FuIGJlIHVuYm91bmQuXG4gIGNvbnN0IHsgYXJncyA9IHt9LCBjb250ZXh0SWQsIGZuLCBzaG91bGRTa2lwUHJlZmxpZ2h0Q2hlY2tzID0gZmFsc2UsIHRyYW5zcG9ydDogdHJhbnNwb3J0T3ZlcnJpZGUsIHZhdWx0UGF0aCB9ID0gcGFyYW1zO1xuICBjb25zdCBjd2QgPSB2YXVsdFBhdGggPz8gZ2V0VmF1bHRQYXRoKCkgPz8gcHJvY2Vzcy5jd2QoKTtcblxuICAvLyBDaGVjazogVmF1bHQgcGF0aCBleGlzdHMgb24gZGlzay5cbiAgaWYgKHZhdWx0UGF0aCAhPT0gdW5kZWZpbmVkICYmICFleGlzdHNTeW5jKHZhdWx0UGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFZhdWx0IHBhdGggZG9lcyBub3QgZXhpc3Q6ICR7dmF1bHRQYXRofWApO1xuICB9XG5cbiAgY29uc3QgdHJhbnNwb3J0ID0gdHJhbnNwb3J0T3ZlcnJpZGUgPz8gYXdhaXQgZ2V0T3JDcmVhdGVUcmFuc3BvcnQoZ2V0VHJhbnNwb3J0T3B0aW9ucygpKTtcblxuICBpZiAoIXNob3VsZFNraXBQcmVmbGlnaHRDaGVja3MpIHtcbiAgICBhd2FpdCB0cmFuc3BvcnQucHJlZmxpZ2h0Q2hlY2soY3dkKTtcbiAgfVxuXG4gIGF3YWl0IGVuc3VyZU5hbWVzcGFjZUJvb3RzdHJhcHBlZCh0cmFuc3BvcnQsIGN3ZCk7XG5cbiAgY29uc3QgbmFtZXNwYWNlQ2FsbFBhcmFtczogR2VuZXJhdGVOYW1lc3BhY2VDYWxsUGFyYW1zID0ge1xuICAgIGFyZ3MsXG4gICAgZm4sXG4gICAgLi4uKGNvbnRleHRJZCAhPT0gdW5kZWZpbmVkICYmIHsgY29udGV4dElkOiBTdHJpbmcoY29udGV4dElkKSB9KVxuICB9O1xuXG4gIGNvbnN0IGV4cHJlc3Npb24gPSBnZW5lcmF0ZU5hbWVzcGFjZUNhbGwobmFtZXNwYWNlQ2FsbFBhcmFtcyk7XG5cbiAgY29uc3QgcmVzdWx0U3RyID0gYXdhaXQgdHJhbnNwb3J0LmV2YWx1YXRlKGV4cHJlc3Npb24sIHsgY3dkIH0pO1xuXG4gIGlmIChyZXN1bHRTdHIgPT09ICcnIHx8IHJlc3VsdFN0ciA9PT0gTk9fT1VUUFVUKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZCBhcyBSZXN1bHQ7XG4gIH1cblxuICBsZXQgZW52ZWxvcGU6IEV2YWxSZXN1bHRFbnZlbG9wZTtcbiAgdHJ5IHtcbiAgICBlbnZlbG9wZSA9IEpTT04ucGFyc2UocmVzdWx0U3RyKSBhcyBFdmFsUmVzdWx0RW52ZWxvcGU7XG4gIH0gY2F0Y2gge1xuICAgIHRocm93IG5ldyBFcnJvcihgZXZhbEluT2JzaWRpYW46IE9ic2lkaWFuIHJldHVybmVkIG5vbi1KU09OIG91dHB1dDogJHtyZXN1bHRTdHJ9YCk7XG4gIH1cblxuICBpZiAoJ3R5cGUnIGluIGVudmVsb3BlKSB7XG4gICAgaWYgKGVudmVsb3BlLnR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAgIC8vIFJld3JpdGUgYmFyZS1vcmlnaW4gbG9jYWxob3N0IHN0YWNrIGZyYW1lcyBsaWtlIFwiKGh0dHA6Ly9sb2NhbGhvc3QvOjkxNTozMilcIlxuICAgICAgLy8gU28gVml0ZXN0J3Mgc291cmNlLW1hcCByZXNvbHZlciB3b24ndCBleHRyYWN0IFwiL1wiIGFzIHRoZSBmaWxlIHBhdGggYW5kIGNyYXNoXG4gICAgICAvLyBXaXRoIEVJU0RJUiB3aGVuIGl0IHRyaWVzIHRvIHJlYWRGaWxlU3luYyBvbiB0aGUgcm9vdCBkaXJlY3RvcnkuXG4gICAgICBjb25zdCBzYW5pdGl6ZWREZXRhaWwgPSBlbnZlbG9wZS52YWx1ZVxuICAgICAgICAucmVwbGFjZSgvXFwoaHR0cHM/OlxcL1xcL2xvY2FsaG9zdFxcLzooPzxsaW5lPlxcZCkvZywgJyhvYnNpZGlhbi13ZWJ2aWV3OiQ8bGluZT4nKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgZXZhbEluT2JzaWRpYW46IEVycm9yIGluc2lkZSBPYnNpZGlhbjpcXG4ke3Nhbml0aXplZERldGFpbH1gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkIGFzIFJlc3VsdDtcbiAgfVxuXG4gIHJldHVybiBlbnZlbG9wZS52YWx1ZSBhcyBSZXN1bHQ7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWVBLHFCQUEyQjtBQUMzQiwwQkFBb0I7QUFTcEIsOEJBR087QUFDUCxvQ0FBc0M7QUFDdEMsaUNBQTRDO0FBQzVDLCtCQUFxQztBQTJCckMsTUFBTSxZQUFZO0FBK1dsQixlQUFzQixlQUNwQixRQUNpQjtBQUVqQixRQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsV0FBVyxJQUFJLDRCQUE0QixPQUFPLFdBQVcsbUJBQW1CLFVBQVUsSUFBSTtBQUNqSCxRQUFNLE1BQU0saUJBQWEsc0NBQWEsS0FBSyxvQkFBQUEsUUFBUSxJQUFJO0FBR3ZELE1BQUksY0FBYyxVQUFhLEtBQUMsMkJBQVcsU0FBUyxHQUFHO0FBQ3JELFVBQU0sSUFBSSxNQUFNLDhCQUE4QixTQUFTLEVBQUU7QUFBQSxFQUMzRDtBQUVBLFFBQU0sWUFBWSxxQkFBcUIsVUFBTSxtREFBcUIsNkNBQW9CLENBQUM7QUFFdkYsTUFBSSxDQUFDLDJCQUEyQjtBQUM5QixVQUFNLFVBQVUsZUFBZSxHQUFHO0FBQUEsRUFDcEM7QUFFQSxZQUFNLHdEQUE0QixXQUFXLEdBQUc7QUFFaEQsUUFBTSxzQkFBbUQ7QUFBQSxJQUN2RDtBQUFBLElBQ0E7QUFBQSxJQUNBLEdBQUksY0FBYyxVQUFhLEVBQUUsV0FBVyxPQUFPLFNBQVMsRUFBRTtBQUFBLEVBQ2hFO0FBRUEsUUFBTSxpQkFBYSxxREFBc0IsbUJBQW1CO0FBRTVELFFBQU0sWUFBWSxNQUFNLFVBQVUsU0FBUyxZQUFZLEVBQUUsSUFBSSxDQUFDO0FBRTlELE1BQUksY0FBYyxNQUFNLGNBQWMsV0FBVztBQUMvQyxXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQUk7QUFDSixNQUFJO0FBQ0YsZUFBVyxLQUFLLE1BQU0sU0FBUztBQUFBLEVBQ2pDLFFBQVE7QUFDTixVQUFNLElBQUksTUFBTSxzREFBc0QsU0FBUyxFQUFFO0FBQUEsRUFDbkY7QUFFQSxNQUFJLFVBQVUsVUFBVTtBQUN0QixRQUFJLFNBQVMsU0FBUyxTQUFTO0FBSTdCLFlBQU0sa0JBQWtCLFNBQVMsTUFDOUIsUUFBUSx5Q0FBeUMsMkJBQTJCO0FBQy9FLFlBQU0sSUFBSSxNQUFNO0FBQUEsRUFBMkMsZUFBZSxFQUFFO0FBQUEsSUFDOUU7QUFFQSxXQUFPO0FBQUEsRUFDVDtBQUVBLFNBQU8sU0FBUztBQUNsQjsiLAogICJuYW1lcyI6IFsicHJvY2VzcyJdCn0K
|