@cqa-lib/cqa-ui 1.1.389 → 1.1.391

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.
@@ -44,9 +44,9 @@ export class CodeEditorComponent {
44
44
  ngOnInit() {
45
45
  this.codeValue = this.value ?? '';
46
46
  this.updateEditorOptions();
47
- if (this.useFallback && ['javascript', 'typescript'].includes(this.language)) {
48
- this.scheduleFallbackSyntaxCheck(this.codeValue);
49
- }
47
+ // if (this.useFallback && ['javascript', 'typescript'].includes(this.language)) {
48
+ // this.scheduleFallbackSyntaxCheck(this.codeValue);
49
+ // }
50
50
  }
51
51
  ngOnDestroy() {
52
52
  if (this.fallbackSyntaxTimer)
@@ -61,12 +61,12 @@ export class CodeEditorComponent {
61
61
  if (changes['value'] && changes['value'].currentValue !== undefined) {
62
62
  const newVal = changes['value'].currentValue ?? '';
63
63
  // Only update when value actually changed - avoids overwriting user input during typing
64
- if (newVal !== this.codeValue) {
65
- this.codeValue = newVal;
66
- if (this.useFallback && ['javascript', 'typescript'].includes(this.language)) {
67
- this.scheduleFallbackSyntaxCheck(newVal);
68
- }
69
- }
64
+ // if (newVal !== this.codeValue) {
65
+ // this.codeValue = newVal;
66
+ // if (this.useFallback && ['javascript', 'typescript'].includes(this.language)) {
67
+ // this.scheduleFallbackSyntaxCheck(newVal);
68
+ // }
69
+ // }
70
70
  }
71
71
  // Only update editor options when language or readOnly changes - value changes must NOT
72
72
  // recreate editorOptions or ngx-monaco-editor will re-init and dispose the editor,
@@ -80,7 +80,7 @@ export class CodeEditorComponent {
80
80
  const hasDiagnostics = ['javascript', 'typescript'].includes(monacoLang);
81
81
  this.editorOptions = {
82
82
  theme: 'vs',
83
- language: monacoLang,
83
+ language: 'javascript',
84
84
  minimap: { enabled: false },
85
85
  scrollBeyondLastLine: false,
86
86
  automaticLayout: true,
@@ -94,24 +94,37 @@ export class CodeEditorComponent {
94
94
  // bundled environments (Storybook, some webpack setups). Running in main thread
95
95
  // avoids "define is not defined" and worker creation errors.
96
96
  ...(hasDiagnostics ? { quickSuggestions: true } : {}),
97
+ quickSuggestions: true,
98
+ suggestOnTriggerCharacters: true,
99
+ acceptSuggestionOnEnter: "on",
100
+ tabCompletion: "on",
101
+ wordBasedSuggestions: true,
102
+ parameterHints: {
103
+ enabled: true
104
+ },
105
+ // Disable TypeScript features
97
106
  useWorker: false,
107
+ // Disable TypeScript validation
108
+ validate: false,
109
+ // Disable TypeScript diagnostics
110
+ diagnostics: false
98
111
  };
99
112
  }
100
113
  onCodeChange(newValue) {
101
114
  this.codeValue = newValue;
102
115
  this.valueChange.emit(newValue);
103
- if (!this.useFallback && ['javascript', 'typescript'].includes(this.language)) {
104
- this.scheduleFallbackSyntaxCheck(newValue);
105
- }
116
+ // if (!this.useFallback && ['javascript', 'typescript'].includes(this.language)) {
117
+ // this.scheduleFallbackSyntaxCheck(newValue);
118
+ // }
106
119
  }
107
120
  onFallbackInput(event) {
108
121
  const target = event.target;
109
122
  const newValue = target?.value ?? '';
110
123
  this.codeValue = newValue;
111
124
  this.valueChange.emit(newValue);
112
- if (['javascript', 'typescript'].includes(this.language)) {
113
- this.scheduleFallbackSyntaxCheck(newValue);
114
- }
125
+ // if (['javascript', 'typescript'].includes(this.language)) {
126
+ // this.scheduleFallbackSyntaxCheck(newValue);
127
+ // }
115
128
  }
116
129
  /** Debounced syntax check for fallback mode - avoids running on every keystroke */
117
130
  scheduleFallbackSyntaxCheck(code) {
@@ -135,7 +148,10 @@ export class CodeEditorComponent {
135
148
  return;
136
149
  }
137
150
  try {
138
- new Function(code);
151
+ // Use AsyncFunction so that top-level `await` (valid in async contexts) is not
152
+ // flagged as a syntax error by the Function constructor.
153
+ const AsyncFunction = Object.getPrototypeOf(async function () { }).constructor;
154
+ new AsyncFunction(code);
139
155
  this.validationErrors = [];
140
156
  }
141
157
  catch (e) {
@@ -157,10 +173,45 @@ export class CodeEditorComponent {
157
173
  }
158
174
  onEditorInit(editor) {
159
175
  this.editorInstance = editor;
160
- this.setupMarkersListener(editor);
176
+ // this.configureMonacoForAsyncCode();
177
+ // this.setupMarkersListener(editor);
161
178
  editor.onDidBlurEditorWidget?.(() => this.blur.emit());
162
- if (['javascript', 'typescript'].includes(this.language)) {
163
- this.scheduleFallbackSyntaxCheck(this.codeValue);
179
+ // if (['javascript', 'typescript'].includes(this.language)) {
180
+ // this.scheduleFallbackSyntaxCheck(this.codeValue);
181
+ // }
182
+ }
183
+ /** Configure Monaco JS/TS language defaults to allow top-level await.
184
+ * Sets module target to ESNext (enables top-level await as a module) and
185
+ * suppresses error code 1308 ("await is only valid in async functions") which
186
+ * Monaco incorrectly raises when code runs in an async context on the test runner. */
187
+ configureMonacoForAsyncCode() {
188
+ const win = window;
189
+ try {
190
+ const tsDefaults = win.monaco?.languages?.typescript;
191
+ if (!tsDefaults?.javascriptDefaults)
192
+ return;
193
+ const jsDefaults = tsDefaults.javascriptDefaults;
194
+ // Set module to ESNext so Monaco treats code as a module → top-level await is valid
195
+ if (jsDefaults.setCompilerOptions) {
196
+ jsDefaults.setCompilerOptions({
197
+ ...(jsDefaults.getCompilerOptions?.() ?? {}),
198
+ target: tsDefaults.ScriptTarget?.ESNext ?? 99,
199
+ module: tsDefaults.ModuleKind?.ESNext ?? 99,
200
+ });
201
+ }
202
+ // Relax Monaco diagnostics so async snippets with top-level `await`
203
+ // (executed inside an async context in the runner) are not flagged.
204
+ if (jsDefaults.setDiagnosticsOptions) {
205
+ jsDefaults.setDiagnosticsOptions({
206
+ // Disable semantic diagnostics (where TS1308 comes from) but keep
207
+ // basic syntax highlighting/validation. Our own fallback checker
208
+ // still validates syntax using AsyncFunction.
209
+ noSemanticValidation: true,
210
+ });
211
+ }
212
+ }
213
+ catch {
214
+ // Monaco not available — safe to ignore
164
215
  }
165
216
  }
166
217
  setupMarkersListener(editor) {
@@ -264,4 +315,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
264
315
  type: ViewChild,
265
316
  args: ['monacoEditor', { static: false }]
266
317
  }] } });
267
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb2RlLWVkaXRvci9jb2RlLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvZGUtZWRpdG9yL2NvZGUtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7OztBQUUxRCwwRUFBMEU7QUFDMUUsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQTJCO0lBQ3pELFVBQVUsRUFBRSxZQUFZO0lBQ3hCLFVBQVUsRUFBRSxZQUFZO0lBQ3hCLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLElBQUksRUFBRSxNQUFNO0lBQ1osSUFBSSxFQUFFLE1BQU07SUFDWixFQUFFLEVBQUUsSUFBSTtJQUNSLElBQUksRUFBRSxNQUFNO0lBQ1osTUFBTSxFQUFFLFFBQVE7Q0FDakIsQ0FBQztBQWVGLE1BQU0sT0FBTyxtQkFBbUI7SUFOaEM7UUFPVyxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1gsYUFBUSxHQUFHLFlBQVksQ0FBQztRQUN4QixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1gsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixnQkFBVyxHQUFHLDRCQUE0QixDQUFDO1FBQzNDLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFDakIsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNmLGNBQVMsR0FBRyxPQUFPLENBQUM7UUFDcEIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUMxQiwwRkFBMEY7UUFDakYsV0FBTSxHQUFhLEVBQUUsQ0FBQztRQUMvQix1R0FBdUc7UUFDOUYsZ0JBQVcs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O2dIQXBQVSxtQkFBbUI7b0dBQW5CLG1CQUFtQixta0JDdENoQyx5K0VBOERBOzJGRHhCYSxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0UsaUJBQWlCLFVBRW5CLENBQUMsa0JBQWtCLENBQUMsUUFDdEIsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFOzhCQUdyQixLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsTUFBTTtzQkFBZCxLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUksV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csSUFBSTtzQkFBYixNQUFNO2dCQUV1QyxlQUFlO3NCQUE1RCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENPREVfRURJVE9SX1NUWUxFUyB9IGZyb20gJy4vY29kZS1lZGl0b3Iuc3R5bGVzJztcblxuLyoqIE1hcHMgY3VzdG9tIGNvZGUgc3RlcCBsYW5ndWFnZSB2YWx1ZXMgdG8gTW9uYWNvIGVkaXRvciBsYW5ndWFnZSBJRHMgKi9cbmV4cG9ydCBjb25zdCBNT05BQ09fTEFOR1VBR0VfTUFQOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBqYXZhc2NyaXB0OiAnamF2YXNjcmlwdCcsXG4gIHR5cGVzY3JpcHQ6ICd0eXBlc2NyaXB0JyxcbiAgcHl0aG9uOiAncHl0aG9uJyxcbiAgamF2YTogJ2phdmEnLFxuICBydWJ5OiAncnVieScsXG4gIGdvOiAnZ28nLFxuICBydXN0OiAncnVzdCcsXG4gIGNzaGFycDogJ2NzaGFycCcsXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIENvZGVFZGl0b3JNYXJrZXIge1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHNldmVyaXR5OiAnZXJyb3InIHwgJ3dhcm5pbmcnIHwgJ2luZm8nO1xuICBsaW5lTnVtYmVyOiBudW1iZXI7XG4gIGNvbHVtbj86IG51bWJlcjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLWNvZGUtZWRpdG9yJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvZGUtZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVzOiBbQ09ERV9FRElUT1JfU1RZTEVTXSxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9LFxufSlcbmV4cG9ydCBjbGFzcyBDb2RlRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIHZhbHVlID0gJyc7XG4gIEBJbnB1dCgpIGxhbmd1YWdlID0gJ2phdmFzY3JpcHQnO1xuICBASW5wdXQoKSBsYWJlbCA9ICcnO1xuICBASW5wdXQoKSByZXF1aXJlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICcvLyBXcml0ZSB5b3VyIGNvZGUgaGVyZS4uLic7XG4gIEBJbnB1dCgpIGZ1bGxXaWR0aCA9IHRydWU7XG4gIEBJbnB1dCgpIGFyaWFMYWJlbCA9ICcnO1xuICBASW5wdXQoKSBtaW5IZWlnaHQgPSAnMjAwcHgnO1xuICBASW5wdXQoKSByZWFkT25seSA9IGZhbHNlO1xuICAvKiogRXh0ZXJuYWwgZXJyb3IgbWVzc2FnZXMgKGUuZy4gZnJvbSBmb3JtIHZhbGlkYXRpb24pLiBTaG93biBhbG9uZ3NpZGUgc3ludGF4IGVycm9ycy4gKi9cbiAgQElucHV0KCkgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICAvKiogV2hlbiB0cnVlLCB1c2UgYSBwbGFpbiB0ZXh0YXJlYSBpbnN0ZWFkIG9mIE1vbmFjbyAoZS5nLiBmb3IgU3Rvcnlib29rIHdoZXJlIE1vbmFjbyBtYXkgbm90IGxvYWQpICovXG4gIEBJbnB1dCgpIHVzZUZhbGxiYWNrID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSB2YWxpZGF0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxDb2RlRWRpdG9yTWFya2VyW10+KCk7XG4gIEBPdXRwdXQoKSBibHVyID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIEBWaWV3Q2hpbGQoJ21vbmFjb0VkaXRvcicsIHsgc3RhdGljOiBmYWxzZSB9KSBtb25hY29FZGl0b3JSZWY6IHVua25vd247XG5cbiAgY29kZVZhbHVlID0gJyc7XG4gIHZhbGlkYXRpb25FcnJvcnM6IENvZGVFZGl0b3JNYXJrZXJbXSA9IFtdO1xuICBlZGl0b3JPcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICBwcml2YXRlIGVkaXRvckluc3RhbmNlOiB1bmtub3duID0gbnVsbDtcbiAgcHJpdmF0ZSBtYXJrZXJzU3Vic2NyaXB0aW9uOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBmYWxsYmFja1N5bnRheFRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIG1vbmFjb01hcmtlcnNUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsID0gbnVsbDtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvZGVWYWx1ZSA9IHRoaXMudmFsdWUgPz8gJyc7XG4gICAgdGhpcy51cGRhdGVFZGl0b3JPcHRpb25zKCk7XG4gICAgaWYgKHRoaXMudXNlRmFsbGJhY2sgJiYgWydqYXZhc2NyaXB0JywgJ3R5cGVzY3JpcHQnXS5pbmNsdWRlcyh0aGlzLmxhbmd1YWdlKSkge1xuICAgICAgdGhpcy5zY2hlZHVsZUZhbGxiYWNrU3ludGF4Q2hlY2sodGhpcy5jb2RlVmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZhbGxiYWNrU3ludGF4VGltZXIpIGNsZWFyVGltZW91dCh0aGlzLmZhbGxiYWNrU3ludGF4VGltZXIpO1xuICAgIGlmICh0aGlzLm1vbmFjb01hcmtlcnNUaW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubW9uYWNvTWFya2Vyc1RpbWVyKTtcbiAgICAgIHRoaXMubW9uYWNvTWFya2Vyc1RpbWVyID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5tYXJrZXJzU3Vic2NyaXB0aW9uPy4oKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1sndmFsdWUnXSAmJiBjaGFuZ2VzWyd2YWx1ZSddLmN1cnJlbnRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBuZXdWYWwgPSBjaGFuZ2VzWyd2YWx1ZSddLmN1cnJlbnRWYWx1ZSA/PyAnJztcbiAgICAgIC8vIE9ubHkgdXBkYXRlIHdoZW4gdmFsdWUgYWN0dWFsbHkgY2hhbmdlZCAtIGF2b2lkcyBvdmVyd3JpdGluZyB1c2VyIGlucHV0IGR1cmluZyB0eXBpbmdcbiAgICAgIGlmIChuZXdWYWwgIT09IHRoaXMuY29kZVZhbHVlKSB7XG4gICAgICAgIHRoaXMuY29kZVZhbHVlID0gbmV3VmFsO1xuICAgICAgICBpZiAodGhpcy51c2VGYWxsYmFjayAmJiBbJ2phdmFzY3JpcHQnLCAndHlwZXNjcmlwdCddLmluY2x1ZGVzKHRoaXMubGFuZ3VhZ2UpKSB7XG4gICAgICAgICAgdGhpcy5zY2hlZHVsZUZhbGxiYWNrU3ludGF4Q2hlY2sobmV3VmFsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICAvLyBPbmx5IHVwZGF0ZSBlZGl0b3Igb3B0aW9ucyB3aGVuIGxhbmd1YWdlIG9yIHJlYWRPbmx5IGNoYW5nZXMgLSB2YWx1ZSBjaGFuZ2VzIG11c3QgTk9UXG4gICAgLy8gcmVjcmVhdGUgZWRpdG9yT3B0aW9ucyBvciBuZ3gtbW9uYWNvLWVkaXRvciB3aWxsIHJlLWluaXQgYW5kIGRpc3Bvc2UgdGhlIGVkaXRvcixcbiAgICAvLyBjYXVzaW5nIFwiQ2FuY2VsZWRcIiBlcnJvcnMgZnJvbSBNb25hY28ncyBhc3luYyBvcGVyYXRpb25zICh3b3JkIGhpZ2hsaWdodGluZywgZXRjLilcbiAgICBpZiAoY2hhbmdlc1snbGFuZ3VhZ2UnXSB8fCBjaGFuZ2VzWydyZWFkT25seSddKSB7XG4gICAgICB0aGlzLnVwZGF0ZUVkaXRvck9wdGlvbnMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUVkaXRvck9wdGlvbnMoKTogdm9pZCB7XG4gICAgY29uc3QgbW9uYWNvTGFuZyA9IE1PTkFDT19MQU5HVUFHRV9NQVBbdGhpcy5sYW5ndWFnZV0gfHwgdGhpcy5sYW5ndWFnZSB8fCAncGxhaW50ZXh0JztcbiAgICBjb25zdCBoYXNEaWFnbm9zdGljcyA9IFsnamF2YXNjcmlwdCcsICd0eXBlc2NyaXB0J10uaW5jbHVkZXMobW9uYWNvTGFuZyk7XG5cbiAgICB0aGlzLmVkaXRvck9wdGlvbnMgPSB7XG4gICAgICB0aGVtZTogJ3ZzJyxcbiAgICAgIGxhbmd1YWdlOiBtb25hY29MYW5nLFxuICAgICAgbWluaW1hcDogeyBlbmFibGVkOiBmYWxzZSB9LFxuICAgICAgc2Nyb2xsQmV5b25kTGFzdExpbmU6IGZhbHNlLFxuICAgICAgYXV0b21hdGljTGF5b3V0OiB0cnVlLFxuICAgICAgZm9udFNpemU6IDEzLFxuICAgICAgbGluZU51bWJlcnM6ICdvbicsXG4gICAgICByb3VuZGVkU2VsZWN0aW9uOiBmYWxzZSxcbiAgICAgIHJlYWRPbmx5OiB0aGlzLnJlYWRPbmx5LFxuICAgICAgY3Vyc29yU3R5bGU6ICdsaW5lJyxcbiAgICAgIHdvcmRXcmFwOiAnb24nLFxuICAgICAgLy8gdXNlV29ya2VyOiBmYWxzZSAtIE1vbmFjbyB3b3JrZXJzIHJlcXVpcmUgQU1EIGxvYWRlciAoZGVmaW5lKSB3aGljaCBmYWlscyBpblxuICAgICAgLy8gYnVuZGxlZCBlbnZpcm9ubWVudHMgKFN0b3J5Ym9vaywgc29tZSB3ZWJwYWNrIHNldHVwcykuIFJ1bm5pbmcgaW4gbWFpbiB0aHJlYWRcbiAgICAgIC8vIGF2b2lkcyBcImRlZmluZSBpcyBub3QgZGVmaW5lZFwiIGFuZCB3b3JrZXIgY3JlYXRpb24gZXJyb3JzLlxuICAgICAgLi4uKGhhc0RpYWdub3N0aWNzID8geyBxdWlja1N1Z2dlc3Rpb25zOiB0cnVlIH0gOiB7fSksXG4gICAgICB1c2VXb3JrZXI6IGZhbHNlLFxuICAgIH07XG4gIH1cblxuICBvbkNvZGVDaGFuZ2UobmV3VmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY29kZVZhbHVlID0gbmV3VmFsdWU7XG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KG5ld1ZhbHVlKTtcbiAgICBpZiAoIXRoaXMudXNlRmFsbGJhY2sgJiYgWydqYXZhc2NyaXB0JywgJ3R5cGVzY3JpcHQnXS5pbmNsdWRlcyh0aGlzLmxhbmd1YWdlKSkge1xuICAgICAgdGhpcy5zY2hlZHVsZUZhbGxiYWNrU3ludGF4Q2hlY2sobmV3VmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIG9uRmFsbGJhY2tJbnB1dChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTFRleHRBcmVhRWxlbWVudDtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IHRhcmdldD8udmFsdWUgPz8gJyc7XG4gICAgdGhpcy5jb2RlVmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQobmV3VmFsdWUpO1xuICAgIGlmIChbJ2phdmFzY3JpcHQnLCAndHlwZXNjcmlwdCddLmluY2x1ZGVzKHRoaXMubGFuZ3VhZ2UpKSB7XG4gICAgICB0aGlzLnNjaGVkdWxlRmFsbGJhY2tTeW50YXhDaGVjayhuZXdWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqIERlYm91bmNlZCBzeW50YXggY2hlY2sgZm9yIGZhbGxiYWNrIG1vZGUgLSBhdm9pZHMgcnVubmluZyBvbiBldmVyeSBrZXlzdHJva2UgKi9cbiAgcHJpdmF0ZSBzY2hlZHVsZUZhbGxiYWNrU3ludGF4Q2hlY2soY29kZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZmFsbGJhY2tTeW50YXhUaW1lcikgY2xlYXJUaW1lb3V0KHRoaXMuZmFsbGJhY2tTeW50YXhUaW1lcik7XG4gICAgdGhpcy5mYWxsYmFja1N5bnRheFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmZhbGxiYWNrU3ludGF4VGltZXIgPSBudWxsO1xuICAgICAgdGhpcy5jaGVja0ZhbGxiYWNrU3ludGF4KGNvZGUpO1xuICAgIH0sIDMwMCk7XG4gIH1cblxuICAvKiogU3ludGF4IHZhbGlkYXRpb24gZm9yIGZhbGxiYWNrICh0ZXh0YXJlYSkgbW9kZSAtIEpTL1RTIG9ubHkgKi9cbiAgcHJpdmF0ZSBjaGVja0ZhbGxiYWNrU3ludGF4KGNvZGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghWydqYXZhc2NyaXB0JywgJ3R5cGVzY3JpcHQnXS5pbmNsdWRlcyh0aGlzLmxhbmd1YWdlKSkge1xuICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3JzID0gW107XG4gICAgICB0aGlzLnZhbGlkYXRpb25DaGFuZ2UuZW1pdCh0aGlzLnZhbGlkYXRpb25FcnJvcnMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWNvZGUgfHwgIWNvZGUudHJpbSgpKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnMgPSBbXTtcbiAgICAgIHRoaXMudmFsaWRhdGlvbkNoYW5nZS5lbWl0KHRoaXMudmFsaWRhdGlvbkVycm9ycyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBuZXcgRnVuY3Rpb24oY29kZSk7XG4gICAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnMgPSBbXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICAgIGNvbnN0IGVyciA9IGUgYXMgU3ludGF4RXJyb3IgJiB7IGxpbmVOdW1iZXI/OiBudW1iZXI7IGNvbHVtbk51bWJlcj86IG51bWJlciB9O1xuICAgICAgICBjb25zdCBsaW5lID0gZXJyLmxpbmVOdW1iZXIgPz8gMTtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3JzID0gW3tcbiAgICAgICAgICBtZXNzYWdlOiBlcnIubWVzc2FnZSB8fCAnU3ludGF4IGVycm9yJyxcbiAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcbiAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lLFxuICAgICAgICAgIGNvbHVtbjogZXJyLmNvbHVtbk51bWJlcixcbiAgICAgICAgfV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnMgPSBbXTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy52YWxpZGF0aW9uQ2hhbmdlLmVtaXQodGhpcy52YWxpZGF0aW9uRXJyb3JzKTtcbiAgfVxuXG4gIG9uRWRpdG9ySW5pdChlZGl0b3I6IHtcbiAgICBnZXRNb2RlbD86ICgpID0+IHsgdXJpPzogeyB0b1N0cmluZz86ICgpID0+IHN0cmluZyB9IH07XG4gICAgb25EaWRDaGFuZ2VNb2RlbENvbnRlbnQ/OiAoZm46ICgpID0+IHZvaWQpID0+IHsgZGlzcG9zZT86ICgpID0+IHZvaWQgfTtcbiAgICBvbkRpZEJsdXJFZGl0b3JXaWRnZXQ/OiAoZm46ICgpID0+IHZvaWQpID0+IHsgZGlzcG9zZT86ICgpID0+IHZvaWQgfTtcbiAgfSk6IHZvaWQge1xuICAgIHRoaXMuZWRpdG9ySW5zdGFuY2UgPSBlZGl0b3I7XG4gICAgdGhpcy5zZXR1cE1hcmtlcnNMaXN0ZW5lcihlZGl0b3IpO1xuICAgIGVkaXRvci5vbkRpZEJsdXJFZGl0b3JXaWRnZXQ/LigoKSA9PiB0aGlzLmJsdXIuZW1pdCgpKTtcbiAgICBpZiAoWydqYXZhc2NyaXB0JywgJ3R5cGVzY3JpcHQnXS5pbmNsdWRlcyh0aGlzLmxhbmd1YWdlKSkge1xuICAgICAgdGhpcy5zY2hlZHVsZUZhbGxiYWNrU3ludGF4Q2hlY2sodGhpcy5jb2RlVmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBNYXJrZXJzTGlzdGVuZXIoZWRpdG9yOiB7XG4gICAgZ2V0TW9kZWw/OiAoKSA9PiB7IHVyaT86IHVua25vd24gfTtcbiAgICBvbkRpZENoYW5nZU1vZGVsQ29udGVudD86IChmbjogKCkgPT4gdm9pZCkgPT4geyBkaXNwb3NlPzogKCkgPT4gdm9pZCB9O1xuICB9KTogdm9pZCB7XG4gICAgdGhpcy5tYXJrZXJzU3Vic2NyaXB0aW9uPy4oKTtcblxuICAgIGNvbnN0IG1vZGVsID0gZWRpdG9yLmdldE1vZGVsPy4oKTtcbiAgICBpZiAoIW1vZGVsPy51cmkpIHJldHVybjtcblxuICAgIGNvbnN0IHdpbiA9IHdpbmRvdyBhcyB1bmtub3duIGFzIHtcbiAgICAgIG1vbmFjbz86IHtcbiAgICAgICAgZWRpdG9yPzoge1xuICAgICAgICAgIGdldE1vZGVsTWFya2Vycz86IChmaWx0ZXI6IHsgcmVzb3VyY2U/OiB1bmtub3duIH0pID0+IEFycmF5PHtcbiAgICAgICAgICAgIG1lc3NhZ2U/OiBzdHJpbmc7XG4gICAgICAgICAgICBzZXZlcml0eT86IG51bWJlcjtcbiAgICAgICAgICAgIHN0YXJ0TGluZU51bWJlcj86IG51bWJlcjtcbiAgICAgICAgICAgIHN0YXJ0Q29sdW1uPzogbnVtYmVyO1xuICAgICAgICAgIH0+O1xuICAgICAgICAgIG9uRGlkQ2hhbmdlTWFya2Vycz86IChmbjogKHVyaXM6IHVua25vd25bXSkgPT4gdm9pZCkgPT4geyBkaXNwb3NlPzogKCkgPT4gdm9pZCB9O1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgY2hlY2tNYXJrZXJzID0gKCk6IHZvaWQgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCF3aW4ubW9uYWNvPy5lZGl0b3I/LmdldE1vZGVsTWFya2VycykgcmV0dXJuO1xuICAgICAgICBjb25zdCBtYXJrZXJzID0gd2luLm1vbmFjby5lZGl0b3IuZ2V0TW9kZWxNYXJrZXJzKHsgcmVzb3VyY2U6IG1vZGVsLnVyaSB9KSB8fCBbXTtcbiAgICAgICAgY29uc3QgbW9uYWNvRXJyb3JzID0gbWFya2Vyc1xuICAgICAgICAgIC5maWx0ZXIoKG0pID0+IG0uc2V2ZXJpdHkgPT09IDgpIC8vIDggPSBFcnJvciBpbiBNb25hY29cbiAgICAgICAgICAubWFwKChtKSA9PiAoe1xuICAgICAgICAgICAgbWVzc2FnZTogbS5tZXNzYWdlIHx8ICdTeW50YXggZXJyb3InLFxuICAgICAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicgYXMgY29uc3QsXG4gICAgICAgICAgICBsaW5lTnVtYmVyOiBtLnN0YXJ0TGluZU51bWJlciB8fCAxLFxuICAgICAgICAgICAgY29sdW1uOiBtLnN0YXJ0Q29sdW1uLFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgLy8gT25seSB1cGRhdGUgZnJvbSBNb25hY28gd2hlbiBpdCBoYXMgbWFya2VycyAtIG90aGVyd2lzZSBrZWVwIGZhbGxiYWNrIHJlc3VsdHNcbiAgICAgICAgLy8gKE1vbmFjbyBtYXkgbm90IHByb2R1Y2UgbWFya2VycyB3aGVuIHVzZVdvcmtlcjogZmFsc2UgaW4gYnVuZGxlZCBlbnZpcm9ubWVudHMpXG4gICAgICAgIGlmIChtb25hY29FcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9ycyA9IG1vbmFjb0Vycm9ycztcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25DaGFuZ2UuZW1pdCh0aGlzLnZhbGlkYXRpb25FcnJvcnMpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gTW9uYWNvIG1heSBub3QgYmUgbG9hZGVkIHlldFxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBkaXNwb3NlTWFya2VycyA9IHdpbi5tb25hY28/LmVkaXRvcj8ub25EaWRDaGFuZ2VNYXJrZXJzPy4oKCkgPT4ge1xuICAgICAgY2hlY2tNYXJrZXJzKCk7XG4gICAgfSk7XG4gICAgY29uc3Qgc2NoZWR1bGVDaGVja01hcmtlcnMgPSAoKTogdm9pZCA9PiB7XG4gICAgICBpZiAodGhpcy5tb25hY29NYXJrZXJzVGltZXIpIGNsZWFyVGltZW91dCh0aGlzLm1vbmFjb01hcmtlcnNUaW1lcik7XG4gICAgICB0aGlzLm1vbmFjb01hcmtlcnNUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLm1vbmFjb01hcmtlcnNUaW1lciA9IG51bGw7XG4gICAgICAgIGNoZWNrTWFya2VycygpO1xuICAgICAgfSwgNDAwKTtcbiAgICB9O1xuICAgIGVkaXRvci5vbkRpZENoYW5nZU1vZGVsQ29udGVudD8uKHNjaGVkdWxlQ2hlY2tNYXJrZXJzKTtcbiAgICBzZXRUaW1lb3V0KGNoZWNrTWFya2VycywgNjAwKTtcblxuICAgIHRoaXMubWFya2Vyc1N1YnNjcmlwdGlvbiA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGlmICh0aGlzLm1vbmFjb01hcmtlcnNUaW1lcikge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5tb25hY29NYXJrZXJzVGltZXIpO1xuICAgICAgICB0aGlzLm1vbmFjb01hcmtlcnNUaW1lciA9IG51bGw7XG4gICAgICB9XG4gICAgICBkaXNwb3NlTWFya2Vycz8uZGlzcG9zZT8uKCk7XG4gICAgfTtcbiAgfVxuXG4gIGdldCBoYXNWYWxpZGF0aW9uRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZhbGlkYXRpb25FcnJvcnMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGdldCBoYXNFcnJvcnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLmVycm9ycz8ubGVuZ3RoID8/IDApID4gMCB8fCB0aGlzLmhhc1ZhbGlkYXRpb25FcnJvcnM7XG4gIH1cblxuICAvKiogQWxsIGVycm9yIG1lc3NhZ2VzOiBleHRlcm5hbCBlcnJvcnMgKyBzeW50YXggZXJyb3JzIGZvcm1hdHRlZCBhcyBzdHJpbmdzICovXG4gIGdldCBhbGxFcnJvck1lc3NhZ2VzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBleHRlcm5hbCA9IHRoaXMuZXJyb3JzID8/IFtdO1xuICAgIGNvbnN0IHN5bnRheCA9IHRoaXMudmFsaWRhdGlvbkVycm9ycy5tYXAoXG4gICAgICAoZSkgPT4gYExpbmUgJHtlLmxpbmVOdW1iZXJ9OiAke2UubWVzc2FnZX1gXG4gICAgKTtcbiAgICByZXR1cm4gWy4uLmV4dGVybmFsLCAuLi5zeW50YXhdO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS13LWZ1bGxcIiBbc3R5bGUud2lkdGhdPVwiZnVsbFdpZHRoID8gJzEwMCUnIDogJ2F1dG8nXCI+XG4gIDxsYWJlbFxuICAgICpuZ0lmPVwibGFiZWxcIlxuICAgIGNsYXNzPVwiY3FhLWxlYWRpbmctWzEwMCVdIGNxYS1ibG9jayBjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMTYxNjE3XSBjcWEtbWItMVwiPlxuICAgIHt7IGxhYmVsIH19XG4gICAgPHNwYW4gKm5nSWY9XCJyZXF1aXJlZFwiIGNsYXNzPVwiY3FhLXRleHQtWyNFRjQ0NDRdIGNxYS1tbC0wLjVcIj4qPC9zcGFuPlxuICA8L2xhYmVsPlxuXG4gIDwhLS0gRmFsbGJhY2s6IHBsYWluIHRleHRhcmVhIHdoZW4gTW9uYWNvIGlzIG5vdCBhdmFpbGFibGUgKGUuZy4gU3Rvcnlib29rKSAtLT5cbiAgPGRpdlxuICAgICpuZ0lmPVwidXNlRmFsbGJhY2tcIlxuICAgIGNsYXNzPVwiY3FhLWNvZGUtZWRpdG9yLWNvbnRhaW5lciBjcWEtY29kZS1lZGl0b3ItZmFsbGJhY2sgY3FhLXctZnVsbFwiXG4gICAgW2NsYXNzLmNxYS1oYXMtZXJyb3JzXT1cImhhc0Vycm9yc1wiXG4gICAgW3N0eWxlLmhlaWdodF09XCJtaW5IZWlnaHRcIlxuICAgIFtzdHlsZS5taW4taGVpZ2h0XT1cIm1pbkhlaWdodFwiPlxuICAgIDx0ZXh0YXJlYVxuICAgICAgY2xhc3M9XCJjcWEtY29kZS1lZGl0b3ItdGV4dGFyZWFcIlxuICAgICAgW3ZhbHVlXT1cImNvZGVWYWx1ZVwiXG4gICAgICAoaW5wdXQpPVwib25GYWxsYmFja0lucHV0KCRldmVudClcIlxuICAgICAgKGJsdXIpPVwiYmx1ci5lbWl0KClcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgIFtyZWFkb25seV09XCJyZWFkT25seVwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbCB8fCBsYWJlbCB8fCAnQ29kZSBlZGl0b3InXCJcbiAgICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCJoYXNFcnJvcnNcIlxuICAgICAgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJyZXF1aXJlZFwiPlxuICAgIDwvdGV4dGFyZWE+XG4gIDwvZGl2PlxuICA8IS0tIE1vbmFjbyBlZGl0b3IgKHVzZWQgaW4gbWFpbiBhcHApIC0tPlxuICA8ZGl2XG4gICAgKm5nSWY9XCIhdXNlRmFsbGJhY2tcIlxuICAgIGNsYXNzPVwiY3FhLWNvZGUtZWRpdG9yLWNvbnRhaW5lciBjcWEtdy1mdWxsXCJcbiAgICBbY2xhc3MuY3FhLWhhcy1lcnJvcnNdPVwiaGFzRXJyb3JzXCJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cIm1pbkhlaWdodFwiXG4gICAgW3N0eWxlLm1pbi1oZWlnaHRdPVwibWluSGVpZ2h0XCI+XG4gICAgPG5neC1tb25hY28tZWRpdG9yXG4gICAgICAjbW9uYWNvRWRpdG9yXG4gICAgICBjbGFzcz1cImNxYS1tb25hY28tZWRpdG9yXCJcbiAgICAgIFtvcHRpb25zXT1cImVkaXRvck9wdGlvbnNcIlxuICAgICAgW25nTW9kZWxdPVwiY29kZVZhbHVlXCJcbiAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ29kZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgIChvbkluaXQpPVwib25FZGl0b3JJbml0KCRldmVudClcIj5cbiAgICA8L25neC1tb25hY28tZWRpdG9yPlxuICA8L2Rpdj5cblxuICA8IS0tIEVycm9yIG1lc3NhZ2VzIChzYW1lIHN0eWxlIGFzIGN1c3RvbS10ZXh0YXJlYSkgLS0+XG4gIDxkaXYgKm5nSWY9XCJoYXNFcnJvcnNcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTEgY3FhLW10LTEuNVwiPlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IGVycm9yIG9mIGFsbEVycm9yTWVzc2FnZXNcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1zdGFydCBjcWEtZ2FwLTEuNVwiPlxuICAgICAgPHN2Z1xuICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgd2lkdGg9XCIxNFwiXG4gICAgICAgIGhlaWdodD1cIjE0XCJcbiAgICAgICAgdmlld0JveD1cIjAgMCAxNCAxNFwiXG4gICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtZmxleC1zaHJpbmstMCBjcWEtbXQtMC41XCI+XG4gICAgICAgIDxwYXRoIGQ9XCJNNyAxLjc1QzQuMSAxLjc1IDEuNzUgNC4xIDEuNzUgN0MxLjc1IDkuOSA0LjEgMTIuMjUgNyAxMi4yNUM5LjkgMTIuMjUgMTIuMjUgOS45IDEyLjI1IDdDMTIuMjUgNC4xIDkuOSAxLjc1IDcgMS43NVpNNyA5LjYyNUM2LjY1NjI1IDkuNjI1IDYuMzc1IDkuMzQzNzUgNi4zNzUgOVY3QzYuMzc1IDYuNjU2MjUgNi42NTYyNSA2LjM3NSA3IDYuMzc1QzcuMzQzNzUgNi4zNzUgNy42MjUgNi42NTYyNSA3LjYyNSA3VjlDNy42MjUgOS4zNDM3NSA3LjM0Mzc1IDkuNjI1IDcgOS42MjVaTTcuNjI1IDUuMjVINi4zNzVWNEg3LjYyNVY1LjI1WlwiIGZpbGw9XCIjRUY0NDQ0XCIvPlxuICAgICAgPC9zdmc+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjRUY0NDQ0XSBjcWEtZm9udC1tZWRpdW0gY3FhLWxlYWRpbmctWzE4cHhdXCI+XG4gICAgICAgIHt7IGVycm9yIH19XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
318
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb2RlLWVkaXRvci9jb2RlLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvZGUtZWRpdG9yL2NvZGUtZWRpdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFJTCxNQUFNLEVBRU4sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7OztBQUUxRCwwRUFBMEU7QUFDMUUsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQTJCO0lBQ3pELFVBQVUsRUFBRSxZQUFZO0lBQ3hCLFVBQVUsRUFBRSxZQUFZO0lBQ3hCLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLElBQUksRUFBRSxNQUFNO0lBQ1osSUFBSSxFQUFFLE1BQU07SUFDWixFQUFFLEVBQUUsSUFBSTtJQUNSLElBQUksRUFBRSxNQUFNO0lBQ1osTUFBTSxFQUFFLFFBQVE7Q0FDakIsQ0FBQztBQWVGLE1BQU0sT0FBTyxtQkFBbUI7SUFOaEM7UUFPVyxVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1gsYUFBUSxHQUFHLFlBQVksQ0FBQztRQUN4QixVQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ1gsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixnQkFBVyxHQUFHLDRCQUE0QixDQUFDO1FBQzNDLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFDakIsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNmLGNBQVMsR0FBRyxPQUFPLENBQUM7UUFDcEIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUMxQiwwRkFBMEY7UUFDakYsV0FBTSxHQUFhLEVBQUUsQ0FBQztRQUMvQix1R0FBdUc7UUFDOUYsZ0JBQVcs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RXVDLGVBQWU7c0JBQTVELFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ09ERV9FRElUT1JfU1RZTEVTIH0gZnJvbSAnLi9jb2RlLWVkaXRvci5zdHlsZXMnO1xuXG4vKiogTWFwcyBjdXN0b20gY29kZSBzdGVwIGxhbmd1YWdlIHZhbHVlcyB0byBNb25hY28gZWRpdG9yIGxhbmd1YWdlIElEcyAqL1xuZXhwb3J0IGNvbnN0IE1PTkFDT19MQU5HVUFHRV9NQVA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIGphdmFzY3JpcHQ6ICdqYXZhc2NyaXB0JyxcbiAgdHlwZXNjcmlwdDogJ3R5cGVzY3JpcHQnLFxuICBweXRob246ICdweXRob24nLFxuICBqYXZhOiAnamF2YScsXG4gIHJ1Ynk6ICdydWJ5JyxcbiAgZ286ICdnbycsXG4gIHJ1c3Q6ICdydXN0JyxcbiAgY3NoYXJwOiAnY3NoYXJwJyxcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29kZUVkaXRvck1hcmtlciB7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc2V2ZXJpdHk6ICdlcnJvcicgfCAnd2FybmluZycgfCAnaW5mbyc7XG4gIGxpbmVOdW1iZXI6IG51bWJlcjtcbiAgY29sdW1uPzogbnVtYmVyO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjcWEtY29kZS1lZGl0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vY29kZS1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtDT0RFX0VESVRPUl9TVFlMRVNdLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH0sXG59KVxuZXhwb3J0IGNsYXNzIENvZGVFZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgQElucHV0KCkgdmFsdWUgPSAnJztcbiAgQElucHV0KCkgbGFuZ3VhZ2UgPSAnamF2YXNjcmlwdCc7XG4gIEBJbnB1dCgpIGxhYmVsID0gJyc7XG4gIEBJbnB1dCgpIHJlcXVpcmVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJy8vIFdyaXRlIHlvdXIgY29kZSBoZXJlLi4uJztcbiAgQElucHV0KCkgZnVsbFdpZHRoID0gdHJ1ZTtcbiAgQElucHV0KCkgYXJpYUxhYmVsID0gJyc7XG4gIEBJbnB1dCgpIG1pbkhlaWdodCA9ICcyMDBweCc7XG4gIEBJbnB1dCgpIHJlYWRPbmx5ID0gZmFsc2U7XG4gIC8qKiBFeHRlcm5hbCBlcnJvciBtZXNzYWdlcyAoZS5nLiBmcm9tIGZvcm0gdmFsaWRhdGlvbikuIFNob3duIGFsb25nc2lkZSBzeW50YXggZXJyb3JzLiAqL1xuICBASW5wdXQoKSBlcnJvcnM6IHN0cmluZ1tdID0gW107XG4gIC8qKiBXaGVuIHRydWUsIHVzZSBhIHBsYWluIHRleHRhcmVhIGluc3RlYWQgb2YgTW9uYWNvIChlLmcuIGZvciBTdG9yeWJvb2sgd2hlcmUgTW9uYWNvIG1heSBub3QgbG9hZCkgKi9cbiAgQElucHV0KCkgdXNlRmFsbGJhY2sgPSBmYWxzZTtcblxuICBAT3V0cHV0KCkgdmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIHZhbGlkYXRpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPENvZGVFZGl0b3JNYXJrZXJbXT4oKTtcbiAgQE91dHB1dCgpIGJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgQFZpZXdDaGlsZCgnbW9uYWNvRWRpdG9yJywgeyBzdGF0aWM6IGZhbHNlIH0pIG1vbmFjb0VkaXRvclJlZjogdW5rbm93bjtcblxuICBjb2RlVmFsdWUgPSAnJztcbiAgdmFsaWRhdGlvbkVycm9yczogQ29kZUVkaXRvck1hcmtlcltdID0gW107XG4gIGVkaXRvck9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gIHByaXZhdGUgZWRpdG9ySW5zdGFuY2U6IHVua25vd24gPSBudWxsO1xuICBwcml2YXRlIG1hcmtlcnNTdWJzY3JpcHRpb246ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGZhbGxiYWNrU3ludGF4VGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgbW9uYWNvTWFya2Vyc1RpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY29kZVZhbHVlID0gdGhpcy52YWx1ZSA/PyAnJztcbiAgICB0aGlzLnVwZGF0ZUVkaXRvck9wdGlvbnMoKTtcbiAgICAvLyBpZiAodGhpcy51c2VGYWxsYmFjayAmJiBbJ2phdmFzY3JpcHQnLCAndHlwZXNjcmlwdCddLmluY2x1ZGVzKHRoaXMubGFuZ3VhZ2UpKSB7XG4gICAgLy8gICB0aGlzLnNjaGVkdWxlRmFsbGJhY2tTeW50YXhDaGVjayh0aGlzLmNvZGVWYWx1ZSk7XG4gICAgLy8gfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZmFsbGJhY2tTeW50YXhUaW1lcikgY2xlYXJUaW1lb3V0KHRoaXMuZmFsbGJhY2tTeW50YXhUaW1lcik7XG4gICAgaWYgKHRoaXMubW9uYWNvTWFya2Vyc1RpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5tb25hY29NYXJrZXJzVGltZXIpO1xuICAgICAgdGhpcy5tb25hY29NYXJrZXJzVGltZXIgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLm1hcmtlcnNTdWJzY3JpcHRpb24/LigpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWyd2YWx1ZSddICYmIGNoYW5nZXNbJ3ZhbHVlJ10uY3VycmVudFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IG5ld1ZhbCA9IGNoYW5nZXNbJ3ZhbHVlJ10uY3VycmVudFZhbHVlID8/ICcnO1xuICAgICAgLy8gT25seSB1cGRhdGUgd2hlbiB2YWx1ZSBhY3R1YWxseSBjaGFuZ2VkIC0gYXZvaWRzIG92ZXJ3cml0aW5nIHVzZXIgaW5wdXQgZHVyaW5nIHR5cGluZ1xuICAgICAgLy8gaWYgKG5ld1ZhbCAhPT0gdGhpcy5jb2RlVmFsdWUpIHtcbiAgICAgIC8vICAgdGhpcy5jb2RlVmFsdWUgPSBuZXdWYWw7XG4gICAgICAvLyAgIGlmICh0aGlzLnVzZUZhbGxiYWNrICYmIFsnamF2YXNjcmlwdCcsICd0eXBlc2NyaXB0J10uaW5jbHVkZXModGhpcy5sYW5ndWFnZSkpIHtcbiAgICAgIC8vICAgICB0aGlzLnNjaGVkdWxlRmFsbGJhY2tTeW50YXhDaGVjayhuZXdWYWwpO1xuICAgICAgLy8gICB9XG4gICAgICAvLyB9XG4gICAgfVxuICAgIC8vIE9ubHkgdXBkYXRlIGVkaXRvciBvcHRpb25zIHdoZW4gbGFuZ3VhZ2Ugb3IgcmVhZE9ubHkgY2hhbmdlcyAtIHZhbHVlIGNoYW5nZXMgbXVzdCBOT1RcbiAgICAvLyByZWNyZWF0ZSBlZGl0b3JPcHRpb25zIG9yIG5neC1tb25hY28tZWRpdG9yIHdpbGwgcmUtaW5pdCBhbmQgZGlzcG9zZSB0aGUgZWRpdG9yLFxuICAgIC8vIGNhdXNpbmcgXCJDYW5jZWxlZFwiIGVycm9ycyBmcm9tIE1vbmFjbydzIGFzeW5jIG9wZXJhdGlvbnMgKHdvcmQgaGlnaGxpZ2h0aW5nLCBldGMuKVxuICAgIGlmIChjaGFuZ2VzWydsYW5ndWFnZSddIHx8IGNoYW5nZXNbJ3JlYWRPbmx5J10pIHtcbiAgICAgIHRoaXMudXBkYXRlRWRpdG9yT3B0aW9ucygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlRWRpdG9yT3B0aW9ucygpOiB2b2lkIHtcbiAgICBjb25zdCBtb25hY29MYW5nID0gTU9OQUNPX0xBTkdVQUdFX01BUFt0aGlzLmxhbmd1YWdlXSB8fCB0aGlzLmxhbmd1YWdlIHx8ICdwbGFpbnRleHQnO1xuICAgIGNvbnN0IGhhc0RpYWdub3N0aWNzID0gWydqYXZhc2NyaXB0JywgJ3R5cGVzY3JpcHQnXS5pbmNsdWRlcyhtb25hY29MYW5nKTtcblxuICAgIHRoaXMuZWRpdG9yT3B0aW9ucyA9IHtcbiAgICAgIHRoZW1lOiAndnMnLFxuICAgICAgbGFuZ3VhZ2U6ICdqYXZhc2NyaXB0JyxcbiAgICAgIG1pbmltYXA6IHsgZW5hYmxlZDogZmFsc2UgfSxcbiAgICAgIHNjcm9sbEJleW9uZExhc3RMaW5lOiBmYWxzZSxcbiAgICAgIGF1dG9tYXRpY0xheW91dDogdHJ1ZSxcbiAgICAgIGZvbnRTaXplOiAxMyxcbiAgICAgIGxpbmVOdW1iZXJzOiAnb24nLFxuICAgICAgcm91bmRlZFNlbGVjdGlvbjogZmFsc2UsXG4gICAgICByZWFkT25seTogdGhpcy5yZWFkT25seSxcbiAgICAgIGN1cnNvclN0eWxlOiAnbGluZScsXG4gICAgICB3b3JkV3JhcDogJ29uJyxcbiAgICAgIC8vIHVzZVdvcmtlcjogZmFsc2UgLSBNb25hY28gd29ya2VycyByZXF1aXJlIEFNRCBsb2FkZXIgKGRlZmluZSkgd2hpY2ggZmFpbHMgaW5cbiAgICAgIC8vIGJ1bmRsZWQgZW52aXJvbm1lbnRzIChTdG9yeWJvb2ssIHNvbWUgd2VicGFjayBzZXR1cHMpLiBSdW5uaW5nIGluIG1haW4gdGhyZWFkXG4gICAgICAvLyBhdm9pZHMgXCJkZWZpbmUgaXMgbm90IGRlZmluZWRcIiBhbmQgd29ya2VyIGNyZWF0aW9uIGVycm9ycy5cbiAgICAgIC4uLihoYXNEaWFnbm9zdGljcyA/IHsgcXVpY2tTdWdnZXN0aW9uczogdHJ1ZSB9IDoge30pLFxuICAgICAgcXVpY2tTdWdnZXN0aW9uczogdHJ1ZSxcbiAgICAgIHN1Z2dlc3RPblRyaWdnZXJDaGFyYWN0ZXJzOiB0cnVlLFxuICAgICAgYWNjZXB0U3VnZ2VzdGlvbk9uRW50ZXI6IFwib25cIixcbiAgICAgIHRhYkNvbXBsZXRpb246IFwib25cIixcbiAgICAgIHdvcmRCYXNlZFN1Z2dlc3Rpb25zOiB0cnVlLFxuICAgICAgcGFyYW1ldGVySGludHM6IHtcbiAgICAgICAgZW5hYmxlZDogdHJ1ZVxuICAgICAgfSxcbiAgICAgIC8vIERpc2FibGUgVHlwZVNjcmlwdCBmZWF0dXJlc1xuICAgICAgdXNlV29ya2VyOiBmYWxzZSxcbiAgICAgIC8vIERpc2FibGUgVHlwZVNjcmlwdCB2YWxpZGF0aW9uXG4gICAgICB2YWxpZGF0ZTogZmFsc2UsXG4gICAgICAvLyBEaXNhYmxlIFR5cGVTY3JpcHQgZGlhZ25vc3RpY3NcbiAgICAgIGRpYWdub3N0aWNzOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBvbkNvZGVDaGFuZ2UobmV3VmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuY29kZVZhbHVlID0gbmV3VmFsdWU7XG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KG5ld1ZhbHVlKTtcbiAgICAvLyBpZiAoIXRoaXMudXNlRmFsbGJhY2sgJiYgWydqYXZhc2NyaXB0JywgJ3R5cGVzY3JpcHQnXS5pbmNsdWRlcyh0aGlzLmxhbmd1YWdlKSkge1xuICAgIC8vICAgdGhpcy5zY2hlZHVsZUZhbGxiYWNrU3ludGF4Q2hlY2sobmV3VmFsdWUpO1xuICAgIC8vIH1cbiAgfVxuXG4gIG9uRmFsbGJhY2tJbnB1dChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTFRleHRBcmVhRWxlbWVudDtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IHRhcmdldD8udmFsdWUgPz8gJyc7XG4gICAgdGhpcy5jb2RlVmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQobmV3VmFsdWUpO1xuICAgIC8vIGlmIChbJ2phdmFzY3JpcHQnLCAndHlwZXNjcmlwdCddLmluY2x1ZGVzKHRoaXMubGFuZ3VhZ2UpKSB7XG4gICAgLy8gICB0aGlzLnNjaGVkdWxlRmFsbGJhY2tTeW50YXhDaGVjayhuZXdWYWx1ZSk7XG4gICAgLy8gfVxuICB9XG5cbiAgLyoqIERlYm91bmNlZCBzeW50YXggY2hlY2sgZm9yIGZhbGxiYWNrIG1vZGUgLSBhdm9pZHMgcnVubmluZyBvbiBldmVyeSBrZXlzdHJva2UgKi9cbiAgcHJpdmF0ZSBzY2hlZHVsZUZhbGxiYWNrU3ludGF4Q2hlY2soY29kZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZmFsbGJhY2tTeW50YXhUaW1lcikgY2xlYXJUaW1lb3V0KHRoaXMuZmFsbGJhY2tTeW50YXhUaW1lcik7XG4gICAgdGhpcy5mYWxsYmFja1N5bnRheFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmZhbGxiYWNrU3ludGF4VGltZXIgPSBudWxsO1xuICAgICAgdGhpcy5jaGVja0ZhbGxiYWNrU3ludGF4KGNvZGUpO1xuICAgIH0sIDMwMCk7XG4gIH1cblxuICAvKiogU3ludGF4IHZhbGlkYXRpb24gZm9yIGZhbGxiYWNrICh0ZXh0YXJlYSkgbW9kZSAtIEpTL1RTIG9ubHkgKi9cbiAgcHJpdmF0ZSBjaGVja0ZhbGxiYWNrU3ludGF4KGNvZGU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghWydqYXZhc2NyaXB0JywgJ3R5cGVzY3JpcHQnXS5pbmNsdWRlcyh0aGlzLmxhbmd1YWdlKSkge1xuICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3JzID0gW107XG4gICAgICB0aGlzLnZhbGlkYXRpb25DaGFuZ2UuZW1pdCh0aGlzLnZhbGlkYXRpb25FcnJvcnMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIWNvZGUgfHwgIWNvZGUudHJpbSgpKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnMgPSBbXTtcbiAgICAgIHRoaXMudmFsaWRhdGlvbkNoYW5nZS5lbWl0KHRoaXMudmFsaWRhdGlvbkVycm9ycyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyBVc2UgQXN5bmNGdW5jdGlvbiBzbyB0aGF0IHRvcC1sZXZlbCBgYXdhaXRgICh2YWxpZCBpbiBhc3luYyBjb250ZXh0cykgaXMgbm90XG4gICAgICAvLyBmbGFnZ2VkIGFzIGEgc3ludGF4IGVycm9yIGJ5IHRoZSBGdW5jdGlvbiBjb25zdHJ1Y3Rvci5cbiAgICAgIGNvbnN0IEFzeW5jRnVuY3Rpb24gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoYXN5bmMgZnVuY3Rpb24gKCkge30pLmNvbnN0cnVjdG9yO1xuICAgICAgbmV3IEFzeW5jRnVuY3Rpb24oY29kZSk7XG4gICAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnMgPSBbXTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICAgIGNvbnN0IGVyciA9IGUgYXMgU3ludGF4RXJyb3IgJiB7IGxpbmVOdW1iZXI/OiBudW1iZXI7IGNvbHVtbk51bWJlcj86IG51bWJlciB9O1xuICAgICAgICBjb25zdCBsaW5lID0gZXJyLmxpbmVOdW1iZXIgPz8gMTtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uRXJyb3JzID0gW3tcbiAgICAgICAgICBtZXNzYWdlOiBlcnIubWVzc2FnZSB8fCAnU3ludGF4IGVycm9yJyxcbiAgICAgICAgICBzZXZlcml0eTogJ2Vycm9yJyxcbiAgICAgICAgICBsaW5lTnVtYmVyOiBsaW5lLFxuICAgICAgICAgIGNvbHVtbjogZXJyLmNvbHVtbk51bWJlcixcbiAgICAgICAgfV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25FcnJvcnMgPSBbXTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy52YWxpZGF0aW9uQ2hhbmdlLmVtaXQodGhpcy52YWxpZGF0aW9uRXJyb3JzKTtcbiAgfVxuXG4gIG9uRWRpdG9ySW5pdChlZGl0b3I6IHtcbiAgICBnZXRNb2RlbD86ICgpID0+IHsgdXJpPzogeyB0b1N0cmluZz86ICgpID0+IHN0cmluZyB9IH07XG4gICAgb25EaWRDaGFuZ2VNb2RlbENvbnRlbnQ/OiAoZm46ICgpID0+IHZvaWQpID0+IHsgZGlzcG9zZT86ICgpID0+IHZvaWQgfTtcbiAgICBvbkRpZEJsdXJFZGl0b3JXaWRnZXQ/OiAoZm46ICgpID0+IHZvaWQpID0+IHsgZGlzcG9zZT86ICgpID0+IHZvaWQgfTtcbiAgfSk6IHZvaWQge1xuICAgIHRoaXMuZWRpdG9ySW5zdGFuY2UgPSBlZGl0b3I7XG4gICAgLy8gdGhpcy5jb25maWd1cmVNb25hY29Gb3JBc3luY0NvZGUoKTtcbiAgICAvLyB0aGlzLnNldHVwTWFya2Vyc0xpc3RlbmVyKGVkaXRvcik7XG4gICAgZWRpdG9yLm9uRGlkQmx1ckVkaXRvcldpZGdldD8uKCgpID0+IHRoaXMuYmx1ci5lbWl0KCkpO1xuICAgIC8vIGlmIChbJ2phdmFzY3JpcHQnLCAndHlwZXNjcmlwdCddLmluY2x1ZGVzKHRoaXMubGFuZ3VhZ2UpKSB7XG4gICAgLy8gICB0aGlzLnNjaGVkdWxlRmFsbGJhY2tTeW50YXhDaGVjayh0aGlzLmNvZGVWYWx1ZSk7XG4gICAgLy8gfVxuICB9XG5cbiAgLyoqIENvbmZpZ3VyZSBNb25hY28gSlMvVFMgbGFuZ3VhZ2UgZGVmYXVsdHMgdG8gYWxsb3cgdG9wLWxldmVsIGF3YWl0LlxuICAgKiAgU2V0cyBtb2R1bGUgdGFyZ2V0IHRvIEVTTmV4dCAoZW5hYmxlcyB0b3AtbGV2ZWwgYXdhaXQgYXMgYSBtb2R1bGUpIGFuZFxuICAgKiAgc3VwcHJlc3NlcyBlcnJvciBjb2RlIDEzMDggKFwiYXdhaXQgaXMgb25seSB2YWxpZCBpbiBhc3luYyBmdW5jdGlvbnNcIikgd2hpY2hcbiAgICogIE1vbmFjbyBpbmNvcnJlY3RseSByYWlzZXMgd2hlbiBjb2RlIHJ1bnMgaW4gYW4gYXN5bmMgY29udGV4dCBvbiB0aGUgdGVzdCBydW5uZXIuICovXG4gIHByaXZhdGUgY29uZmlndXJlTW9uYWNvRm9yQXN5bmNDb2RlKCk6IHZvaWQge1xuICAgIGNvbnN0IHdpbiA9IHdpbmRvdyBhcyB1bmtub3duIGFzIHtcbiAgICAgIG1vbmFjbz86IHtcbiAgICAgICAgbGFuZ3VhZ2VzPzoge1xuICAgICAgICAgIHR5cGVzY3JpcHQ/OiB7XG4gICAgICAgICAgICBqYXZhc2NyaXB0RGVmYXVsdHM/OiB7XG4gICAgICAgICAgICAgIHNldENvbXBpbGVyT3B0aW9ucz86IChvcHRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gdm9pZDtcbiAgICAgICAgICAgICAgZ2V0Q29tcGlsZXJPcHRpb25zPzogKCkgPT4gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgICAgICAgIHNldERpYWdub3N0aWNzT3B0aW9ucz86IChvcHRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gdm9pZDtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBTY3JpcHRUYXJnZXQ/OiB7IEVTTmV4dD86IG51bWJlciB9O1xuICAgICAgICAgICAgTW9kdWxlS2luZD86IHsgRVNOZXh0PzogbnVtYmVyIH07XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdHNEZWZhdWx0cyA9IHdpbi5tb25hY28/Lmxhbmd1YWdlcz8udHlwZXNjcmlwdDtcbiAgICAgIGlmICghdHNEZWZhdWx0cz8uamF2YXNjcmlwdERlZmF1bHRzKSByZXR1cm47XG4gICAgICBjb25zdCBqc0RlZmF1bHRzID0gdHNEZWZhdWx0cy5qYXZhc2NyaXB0RGVmYXVsdHM7XG5cbiAgICAgIC8vIFNldCBtb2R1bGUgdG8gRVNOZXh0IHNvIE1vbmFjbyB0cmVhdHMgY29kZSBhcyBhIG1vZHVsZSDihpIgdG9wLWxldmVsIGF3YWl0IGlzIHZhbGlkXG4gICAgICBpZiAoanNEZWZhdWx0cy5zZXRDb21waWxlck9wdGlvbnMpIHtcbiAgICAgICAganNEZWZhdWx0cy5zZXRDb21waWxlck9wdGlvbnMoe1xuICAgICAgICAgIC4uLihqc0RlZmF1bHRzLmdldENvbXBpbGVyT3B0aW9ucz8uKCkgPz8ge30pLFxuICAgICAgICAgIHRhcmdldDogdHNEZWZhdWx0cy5TY3JpcHRUYXJnZXQ/LkVTTmV4dCA/PyA5OSxcbiAgICAgICAgICBtb2R1bGU6IHRzRGVmYXVsdHMuTW9kdWxlS2luZD8uRVNOZXh0ID8/IDk5LFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVsYXggTW9uYWNvIGRpYWdub3N0aWNzIHNvIGFzeW5jIHNuaXBwZXRzIHdpdGggdG9wLWxldmVsIGBhd2FpdGBcbiAgICAgIC8vIChleGVjdXRlZCBpbnNpZGUgYW4gYXN5bmMgY29udGV4dCBpbiB0aGUgcnVubmVyKSBhcmUgbm90IGZsYWdnZWQuXG4gICAgICBpZiAoanNEZWZhdWx0cy5zZXREaWFnbm9zdGljc09wdGlvbnMpIHtcbiAgICAgICAganNEZWZhdWx0cy5zZXREaWFnbm9zdGljc09wdGlvbnMoe1xuICAgICAgICAgIC8vIERpc2FibGUgc2VtYW50aWMgZGlhZ25vc3RpY3MgKHdoZXJlIFRTMTMwOCBjb21lcyBmcm9tKSBidXQga2VlcFxuICAgICAgICAgIC8vIGJhc2ljIHN5bnRheCBoaWdobGlnaHRpbmcvdmFsaWRhdGlvbi4gT3VyIG93biBmYWxsYmFjayBjaGVja2VyXG4gICAgICAgICAgLy8gc3RpbGwgdmFsaWRhdGVzIHN5bnRheCB1c2luZyBBc3luY0Z1bmN0aW9uLlxuICAgICAgICAgIG5vU2VtYW50aWNWYWxpZGF0aW9uOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIE1vbmFjbyBub3QgYXZhaWxhYmxlIOKAlCBzYWZlIHRvIGlnbm9yZVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBNYXJrZXJzTGlzdGVuZXIoZWRpdG9yOiB7XG4gICAgZ2V0TW9kZWw/OiAoKSA9PiB7IHVyaT86IHVua25vd24gfTtcbiAgICBvbkRpZENoYW5nZU1vZGVsQ29udGVudD86IChmbjogKCkgPT4gdm9pZCkgPT4geyBkaXNwb3NlPzogKCkgPT4gdm9pZCB9O1xuICB9KTogdm9pZCB7XG4gICAgdGhpcy5tYXJrZXJzU3Vic2NyaXB0aW9uPy4oKTtcblxuICAgIGNvbnN0IG1vZGVsID0gZWRpdG9yLmdldE1vZGVsPy4oKTtcbiAgICBpZiAoIW1vZGVsPy51cmkpIHJldHVybjtcblxuICAgIGNvbnN0IHdpbiA9IHdpbmRvdyBhcyB1bmtub3duIGFzIHtcbiAgICAgIG1vbmFjbz86IHtcbiAgICAgICAgZWRpdG9yPzoge1xuICAgICAgICAgIGdldE1vZGVsTWFya2Vycz86IChmaWx0ZXI6IHsgcmVzb3VyY2U/OiB1bmtub3duIH0pID0+IEFycmF5PHtcbiAgICAgICAgICAgIG1lc3NhZ2U/OiBzdHJpbmc7XG4gICAgICAgICAgICBzZXZlcml0eT86IG51bWJlcjtcbiAgICAgICAgICAgIHN0YXJ0TGluZU51bWJlcj86IG51bWJlcjtcbiAgICAgICAgICAgIHN0YXJ0Q29sdW1uPzogbnVtYmVyO1xuICAgICAgICAgIH0+O1xuICAgICAgICAgIG9uRGlkQ2hhbmdlTWFya2Vycz86IChmbjogKHVyaXM6IHVua25vd25bXSkgPT4gdm9pZCkgPT4geyBkaXNwb3NlPzogKCkgPT4gdm9pZCB9O1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgY2hlY2tNYXJrZXJzID0gKCk6IHZvaWQgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCF3aW4ubW9uYWNvPy5lZGl0b3I/LmdldE1vZGVsTWFya2VycykgcmV0dXJuO1xuICAgICAgICBjb25zdCBtYXJrZXJzID0gd2luLm1vbmFjby5lZGl0b3IuZ2V0TW9kZWxNYXJrZXJzKHsgcmVzb3VyY2U6IG1vZGVsLnVyaSB9KSB8fCBbXTtcbiAgICAgICAgY29uc3QgbW9uYWNvRXJyb3JzID0gbWFya2Vyc1xuICAgICAgICAgIC5maWx0ZXIoKG0pID0+IG0uc2V2ZXJpdHkgPT09IDgpIC8vIDggPSBFcnJvciBpbiBNb25hY29cbiAgICAgICAgICAubWFwKChtKSA9PiAoe1xuICAgICAgICAgICAgbWVzc2FnZTogbS5tZXNzYWdlIHx8ICdTeW50YXggZXJyb3InLFxuICAgICAgICAgICAgc2V2ZXJpdHk6ICdlcnJvcicgYXMgY29uc3QsXG4gICAgICAgICAgICBsaW5lTnVtYmVyOiBtLnN0YXJ0TGluZU51bWJlciB8fCAxLFxuICAgICAgICAgICAgY29sdW1uOiBtLnN0YXJ0Q29sdW1uLFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgLy8gT25seSB1cGRhdGUgZnJvbSBNb25hY28gd2hlbiBpdCBoYXMgbWFya2VycyAtIG90aGVyd2lzZSBrZWVwIGZhbGxiYWNrIHJlc3VsdHNcbiAgICAgICAgLy8gKE1vbmFjbyBtYXkgbm90IHByb2R1Y2UgbWFya2VycyB3aGVuIHVzZVdvcmtlcjogZmFsc2UgaW4gYnVuZGxlZCBlbnZpcm9ubWVudHMpXG4gICAgICAgIGlmIChtb25hY29FcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbkVycm9ycyA9IG1vbmFjb0Vycm9ycztcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25DaGFuZ2UuZW1pdCh0aGlzLnZhbGlkYXRpb25FcnJvcnMpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gTW9uYWNvIG1heSBub3QgYmUgbG9hZGVkIHlldFxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBkaXNwb3NlTWFya2VycyA9IHdpbi5tb25hY28/LmVkaXRvcj8ub25EaWRDaGFuZ2VNYXJrZXJzPy4oKCkgPT4ge1xuICAgICAgY2hlY2tNYXJrZXJzKCk7XG4gICAgfSk7XG4gICAgY29uc3Qgc2NoZWR1bGVDaGVja01hcmtlcnMgPSAoKTogdm9pZCA9PiB7XG4gICAgICBpZiAodGhpcy5tb25hY29NYXJrZXJzVGltZXIpIGNsZWFyVGltZW91dCh0aGlzLm1vbmFjb01hcmtlcnNUaW1lcik7XG4gICAgICB0aGlzLm1vbmFjb01hcmtlcnNUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLm1vbmFjb01hcmtlcnNUaW1lciA9IG51bGw7XG4gICAgICAgIGNoZWNrTWFya2VycygpO1xuICAgICAgfSwgNDAwKTtcbiAgICB9O1xuICAgIGVkaXRvci5vbkRpZENoYW5nZU1vZGVsQ29udGVudD8uKHNjaGVkdWxlQ2hlY2tNYXJrZXJzKTtcbiAgICBzZXRUaW1lb3V0KGNoZWNrTWFya2VycywgNjAwKTtcblxuICAgIHRoaXMubWFya2Vyc1N1YnNjcmlwdGlvbiA9ICgpOiB2b2lkID0+IHtcbiAgICAgIGlmICh0aGlzLm1vbmFjb01hcmtlcnNUaW1lcikge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5tb25hY29NYXJrZXJzVGltZXIpO1xuICAgICAgICB0aGlzLm1vbmFjb01hcmtlcnNUaW1lciA9IG51bGw7XG4gICAgICB9XG4gICAgICBkaXNwb3NlTWFya2Vycz8uZGlzcG9zZT8uKCk7XG4gICAgfTtcbiAgfVxuXG4gIGdldCBoYXNWYWxpZGF0aW9uRXJyb3JzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZhbGlkYXRpb25FcnJvcnMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGdldCBoYXNFcnJvcnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLmVycm9ycz8ubGVuZ3RoID8/IDApID4gMCB8fCB0aGlzLmhhc1ZhbGlkYXRpb25FcnJvcnM7XG4gIH1cblxuICAvKiogQWxsIGVycm9yIG1lc3NhZ2VzOiBleHRlcm5hbCBlcnJvcnMgKyBzeW50YXggZXJyb3JzIGZvcm1hdHRlZCBhcyBzdHJpbmdzICovXG4gIGdldCBhbGxFcnJvck1lc3NhZ2VzKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBleHRlcm5hbCA9IHRoaXMuZXJyb3JzID8/IFtdO1xuICAgIGNvbnN0IHN5bnRheCA9IHRoaXMudmFsaWRhdGlvbkVycm9ycy5tYXAoXG4gICAgICAoZSkgPT4gYExpbmUgJHtlLmxpbmVOdW1iZXJ9OiAke2UubWVzc2FnZX1gXG4gICAgKTtcbiAgICByZXR1cm4gWy4uLmV4dGVybmFsLCAuLi5zeW50YXhdO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS13LWZ1bGxcIiBbc3R5bGUud2lkdGhdPVwiZnVsbFdpZHRoID8gJzEwMCUnIDogJ2F1dG8nXCI+XG4gIDxsYWJlbFxuICAgICpuZ0lmPVwibGFiZWxcIlxuICAgIGNsYXNzPVwiY3FhLWxlYWRpbmctWzEwMCVdIGNxYS1ibG9jayBjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMTYxNjE3XSBjcWEtbWItMVwiPlxuICAgIHt7IGxhYmVsIH19XG4gICAgPHNwYW4gKm5nSWY9XCJyZXF1aXJlZFwiIGNsYXNzPVwiY3FhLXRleHQtWyNFRjQ0NDRdIGNxYS1tbC0wLjVcIj4qPC9zcGFuPlxuICA8L2xhYmVsPlxuXG4gIDwhLS0gRmFsbGJhY2s6IHBsYWluIHRleHRhcmVhIHdoZW4gTW9uYWNvIGlzIG5vdCBhdmFpbGFibGUgKGUuZy4gU3Rvcnlib29rKSAtLT5cbiAgPGRpdlxuICAgICpuZ0lmPVwidXNlRmFsbGJhY2tcIlxuICAgIGNsYXNzPVwiY3FhLWNvZGUtZWRpdG9yLWNvbnRhaW5lciBjcWEtY29kZS1lZGl0b3ItZmFsbGJhY2sgY3FhLXctZnVsbFwiXG4gICAgW2NsYXNzLmNxYS1oYXMtZXJyb3JzXT1cImhhc0Vycm9yc1wiXG4gICAgW3N0eWxlLmhlaWdodF09XCJtaW5IZWlnaHRcIlxuICAgIFtzdHlsZS5taW4taGVpZ2h0XT1cIm1pbkhlaWdodFwiPlxuICAgIDx0ZXh0YXJlYVxuICAgICAgY2xhc3M9XCJjcWEtY29kZS1lZGl0b3ItdGV4dGFyZWFcIlxuICAgICAgW3ZhbHVlXT1cImNvZGVWYWx1ZVwiXG4gICAgICAoaW5wdXQpPVwib25GYWxsYmFja0lucHV0KCRldmVudClcIlxuICAgICAgKGJsdXIpPVwiYmx1ci5lbWl0KClcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgIFtyZWFkb25seV09XCJyZWFkT25seVwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbCB8fCBsYWJlbCB8fCAnQ29kZSBlZGl0b3InXCJcbiAgICAgIFthdHRyLmFyaWEtaW52YWxpZF09XCJoYXNFcnJvcnNcIlxuICAgICAgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJyZXF1aXJlZFwiPlxuICAgIDwvdGV4dGFyZWE+XG4gIDwvZGl2PlxuICA8IS0tIE1vbmFjbyBlZGl0b3IgKHVzZWQgaW4gbWFpbiBhcHApIC0tPlxuICA8ZGl2XG4gICAgKm5nSWY9XCIhdXNlRmFsbGJhY2tcIlxuICAgIGNsYXNzPVwiY3FhLWNvZGUtZWRpdG9yLWNvbnRhaW5lciBjcWEtdy1mdWxsXCJcbiAgICBbY2xhc3MuY3FhLWhhcy1lcnJvcnNdPVwiaGFzRXJyb3JzXCJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cIm1pbkhlaWdodFwiXG4gICAgW3N0eWxlLm1pbi1oZWlnaHRdPVwibWluSGVpZ2h0XCI+XG4gICAgPG5neC1tb25hY28tZWRpdG9yXG4gICAgICAjbW9uYWNvRWRpdG9yXG4gICAgICBjbGFzcz1cImNxYS1tb25hY28tZWRpdG9yXCJcbiAgICAgIFtvcHRpb25zXT1cImVkaXRvck9wdGlvbnNcIlxuICAgICAgW25nTW9kZWxdPVwiY29kZVZhbHVlXCJcbiAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ29kZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgIChvbkluaXQpPVwib25FZGl0b3JJbml0KCRldmVudClcIj5cbiAgICA8L25neC1tb25hY28tZWRpdG9yPlxuICA8L2Rpdj5cblxuICA8IS0tIEVycm9yIG1lc3NhZ2VzIChzYW1lIHN0eWxlIGFzIGN1c3RvbS10ZXh0YXJlYSkgLS0+XG4gIDxkaXYgKm5nSWY9XCJoYXNFcnJvcnNcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTEgY3FhLW10LTEuNVwiPlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IGVycm9yIG9mIGFsbEVycm9yTWVzc2FnZXNcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1zdGFydCBjcWEtZ2FwLTEuNVwiPlxuICAgICAgPHN2Z1xuICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgd2lkdGg9XCIxNFwiXG4gICAgICAgIGhlaWdodD1cIjE0XCJcbiAgICAgICAgdmlld0JveD1cIjAgMCAxNCAxNFwiXG4gICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtZmxleC1zaHJpbmstMCBjcWEtbXQtMC41XCI+XG4gICAgICAgIDxwYXRoIGQ9XCJNNyAxLjc1QzQuMSAxLjc1IDEuNzUgNC4xIDEuNzUgN0MxLjc1IDkuOSA0LjEgMTIuMjUgNyAxMi4yNUM5LjkgMTIuMjUgMTIuMjUgOS45IDEyLjI1IDdDMTIuMjUgNC4xIDkuOSAxLjc1IDcgMS43NVpNNyA5LjYyNUM2LjY1NjI1IDkuNjI1IDYuMzc1IDkuMzQzNzUgNi4zNzUgOVY3QzYuMzc1IDYuNjU2MjUgNi42NTYyNSA2LjM3NSA3IDYuMzc1QzcuMzQzNzUgNi4zNzUgNy42MjUgNi42NTYyNSA3LjYyNSA3VjlDNy42MjUgOS4zNDM3NSA3LjM0Mzc1IDkuNjI1IDcgOS42MjVaTTcuNjI1IDUuMjVINi4zNzVWNEg3LjYyNVY1LjI1WlwiIGZpbGw9XCIjRUY0NDQ0XCIvPlxuICAgICAgPC9zdmc+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjRUY0NDQ0XSBjcWEtZm9udC1tZWRpdW0gY3FhLWxlYWRpbmctWzE4cHhdXCI+XG4gICAgICAgIHt7IGVycm9yIH19XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -1,7 +1,8 @@
1
1
  import { Component, Input, Output, EventEmitter } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
- import * as i1 from "../button/button.component";
4
- import * as i2 from "@angular/common";
3
+ import * as i1 from "../badge/badge.component";
4
+ import * as i2 from "../button/button.component";
5
+ import * as i3 from "@angular/common";
5
6
  export class ErrorModalComponent {
6
7
  constructor() {
7
8
  this.isOpen = false;
@@ -13,6 +14,8 @@ export class ErrorModalComponent {
13
14
  this.appTime = '';
14
15
  this.toolTime = '';
15
16
  this.buttons = [];
17
+ /** When true, shows a loading badge instead of buttons (e.g. while waiting for async completion) */
18
+ this.showLoading = false;
16
19
  this.buttonClick = new EventEmitter();
17
20
  this.closeModal = new EventEmitter();
18
21
  }
@@ -24,6 +27,8 @@ export class ErrorModalComponent {
24
27
  }
25
28
  }
26
29
  onButtonClick(button) {
30
+ if (button.disabled)
31
+ return;
27
32
  this.buttonClick.emit(button.action);
28
33
  }
29
34
  onClose() {
@@ -46,10 +51,10 @@ export class ErrorModalComponent {
46
51
  }
47
52
  }
48
53
  ErrorModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ErrorModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
49
- ErrorModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ErrorModalComponent, selector: "cqa-error-modal", inputs: { isOpen: "isOpen", title: "title", instructionalMessage: "instructionalMessage", errorMessage: "errorMessage", totalSteps: "totalSteps", completedSteps: "completedSteps", totalTime: "totalTime", appTime: "appTime", toolTime: "toolTime", buttons: "buttons" }, outputs: { buttonClick: "buttonClick", closeModal: "closeModal" }, ngImport: i0, template: "<div *ngIf=\"isOpen\"\n class=\"modal-backdrop cqa-fixed cqa-inset-0 cqa-bg-black cqa-bg-opacity-50 cqa-z-[9999] cqa-flex cqa-items-center cqa-justify-center cqa-p-4\"\n (click)=\"onBackdropClick($event)\">\n <div\n class=\"cqa-rounded-lg cqa-bg-white cqa-shadow-xl cqa-w-full cqa-max-w-[500px] cqa-overflow-hidden cqa-p-6 cqa-flex cqa-flex-col cqa-gap-2 cqa-max-h-[85vh] cqa-overflow-y-auto\"\n style=\"box-shadow: 0px 8px 8px -4px #10182808;\" (click)=\"$event.stopPropagation()\">\n\n <div class=\"cqa-flex cqa-flex-col cqa-items-center\">\n <div>\n <svg width=\"93\" height=\"93\" viewBox=\"0 0 93 93\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"4\" y=\"4\" width=\"85\" height=\"85\" rx=\"42.5\" fill=\"#F15F5F\"/>\n <rect x=\"4\" y=\"4\" width=\"85\" height=\"85\" rx=\"42.5\" stroke=\"#FCD9D9\" stroke-width=\"8\"/>\n <path d=\"M32.3815 62.4437H60.619C63.5065 62.4437 65.3065 59.3125 63.8627 56.8188L49.744 32.425C48.3002 29.9313 44.7002 29.9313 43.2565 32.425L29.1377 56.8188C27.694 59.3125 29.494 62.4437 32.3815 62.4437ZM46.5002 49.3188C45.469 49.3188 44.6252 48.475 44.6252 47.4438V43.6938C44.6252 42.6625 45.469 41.8188 46.5002 41.8188C47.5315 41.8188 48.3752 42.6625 48.3752 43.6938V47.4438C48.3752 48.475 47.5315 49.3188 46.5002 49.3188ZM48.3752 56.8188H44.6252V53.0688H48.3752V56.8188Z\" fill=\"white\"/>\n </svg>\n </div>\n\n <h2 class=\"cqa-text-[22px] cqa-font-semibold cqa-text-[#0B0B0C] cqa-mt-[20px] cqa-leading-[28px]\">\n {{ title }}\n </h2>\n\n <!-- Instructional Message -->\n <p *ngIf=\"instructionalMessage\" class=\"cqa-text-sm cqa-text-[#4A5565] cqa-mt-2 cqa-text-center\">\n {{ instructionalMessage }}\n </p>\n </div>\n\n <!-- <div *ngIf=\"hasTimingData\" class=\"cqa-rounded-lg cqa-border cqa-p-[17px] cqa-my-4\" [ngClass]=\"stepsBackgroundClass\"\n style=\"border: 1px solid;\" [style.border-color]=\"stepsBorderClass\">\n <div\n class=\"cqa-grid sm:cqa-flex sm:cqa-justify-between sm:cqa-items-center cqa-grid-cols-2 sm:cqa-grid-cols-4 cqa-gap-4 sm:cqa-gap-2\">\n <div class=\"cqa-flex cqa-flex-col\" *ngIf=\"totalSteps\">\n <span class=\"cqa-text-xs cqa-text-[#4A5565] cqa-mb-1\">Total Steps</span>\n <span class=\"cqa-text-[18px] cqa-font-medium cqa-text-[#101828]\">\n {{ completedSteps }} / {{ totalSteps }}\n </span>\n </div>\n\n <div class=\"cqa-flex cqa-flex-col\" *ngIf=\"totalTime\">\n <span class=\"cqa-text-xs cqa-text-[#4A5565] cqa-mb-1\">Total Time</span>\n <span class=\"cqa-text-[18px] cqa-font-medium cqa-text-[#101828]\">\n {{ totalTime }}\n </span>\n </div>\n\n <div class=\"cqa-flex cqa-flex-col\" *ngIf=\"appTime\">\n <span class=\"cqa-text-xs cqa-text-[#4A5565] cqa-mb-1\">App Time</span>\n <span class=\"cqa-text-[18px] cqa-font-medium cqa-text-[#101828]\">\n {{ appTime }}\n </span>\n </div>\n\n <div class=\"cqa-flex cqa-flex-col\" *ngIf=\"toolTime\">\n <span class=\"cqa-text-xs cqa-text-[#4A5565] cqa-mb-1\">Tool Time</span>\n <span class=\"cqa-text-[18px] cqa-font-medium cqa-text-[#101828]\">\n {{ toolTime }}\n </span>\n </div>\n </div>\n </div> -->\n\n <!-- Error Message Section -->\n <div *ngIf=\"errorMessage\" class=\"cqa-my-4 cqa-p-4 cqa-rounded-lg cqa-bg-white\"\n style=\"border: 1px solid #E5E7EB;\">\n <div class=\"cqa-text-xs cqa-text-[#9CA3AF] cqa-mb-2 cqa-font-medium\">\n Error Message\n </div>\n <div class=\"cqa-text-sm cqa-text-[#111827] cqa-font-semibold cqa-whitespace-normal cqa-break-anywhere\"\n style=\"word-break: break-word; white-space: pre-line;\">\n {{ errorMessage }}\n </div>\n </div>\n\n <!-- Buttons -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-[20px]\">\n <ng-container *ngFor=\"let button of buttons; let i = index\">\n <cqa-button\n [variant]=\"button.variant\"\n [text]=\"button.label\"\n [icon]=\"button.icon\"\n [btnSize]=\"button.btnSize || 'lg'\"\n [fullWidth]=\"button.fullWidth !== undefined ? button.fullWidth : true\"\n (clicked)=\"onButtonClick(button)\">\n </cqa-button>\n </ng-container>\n </div>\n </div>\n</div>", components: [{ type: i1.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
54
+ ErrorModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ErrorModalComponent, selector: "cqa-error-modal", inputs: { isOpen: "isOpen", title: "title", instructionalMessage: "instructionalMessage", errorMessage: "errorMessage", totalSteps: "totalSteps", completedSteps: "completedSteps", totalTime: "totalTime", appTime: "appTime", toolTime: "toolTime", buttons: "buttons", showLoading: "showLoading", loadingBadgeInlineStyles: "loadingBadgeInlineStyles" }, outputs: { buttonClick: "buttonClick", closeModal: "closeModal" }, ngImport: i0, template: "<div *ngIf=\"isOpen\"\n class=\"modal-backdrop cqa-fixed cqa-inset-0 cqa-bg-black cqa-bg-opacity-50 cqa-z-[9999] cqa-flex cqa-items-center cqa-justify-center cqa-p-4\"\n (click)=\"onBackdropClick($event)\">\n <div\n class=\"cqa-rounded-lg cqa-bg-white cqa-shadow-xl cqa-w-full cqa-max-w-[500px] cqa-overflow-hidden cqa-p-6 cqa-flex cqa-flex-col cqa-gap-2 cqa-max-h-[85vh] cqa-overflow-y-auto\"\n style=\"box-shadow: 0px 8px 8px -4px #10182808;\" (click)=\"$event.stopPropagation()\">\n\n <div class=\"cqa-flex cqa-flex-col cqa-items-center\">\n <div>\n <svg width=\"93\" height=\"93\" viewBox=\"0 0 93 93\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"4\" y=\"4\" width=\"85\" height=\"85\" rx=\"42.5\" fill=\"#F15F5F\"/>\n <rect x=\"4\" y=\"4\" width=\"85\" height=\"85\" rx=\"42.5\" stroke=\"#FCD9D9\" stroke-width=\"8\"/>\n <path d=\"M32.3815 62.4437H60.619C63.5065 62.4437 65.3065 59.3125 63.8627 56.8188L49.744 32.425C48.3002 29.9313 44.7002 29.9313 43.2565 32.425L29.1377 56.8188C27.694 59.3125 29.494 62.4437 32.3815 62.4437ZM46.5002 49.3188C45.469 49.3188 44.6252 48.475 44.6252 47.4438V43.6938C44.6252 42.6625 45.469 41.8188 46.5002 41.8188C47.5315 41.8188 48.3752 42.6625 48.3752 43.6938V47.4438C48.3752 48.475 47.5315 49.3188 46.5002 49.3188ZM48.3752 56.8188H44.6252V53.0688H48.3752V56.8188Z\" fill=\"white\"/>\n </svg>\n </div>\n\n <h2 class=\"cqa-text-[22px] cqa-font-semibold cqa-text-[#0B0B0C] cqa-mt-[20px] cqa-leading-[28px]\">\n {{ title }}\n </h2>\n\n <!-- Instructional Message -->\n <p *ngIf=\"instructionalMessage\" class=\"cqa-text-sm cqa-text-[#4A5565] cqa-mt-2 cqa-text-center\">\n {{ instructionalMessage }}\n </p>\n </div>\n\n <!-- <div *ngIf=\"hasTimingData\" class=\"cqa-rounded-lg cqa-border cqa-p-[17px] cqa-my-4\" [ngClass]=\"stepsBackgroundClass\"\n style=\"border: 1px solid;\" [style.border-color]=\"stepsBorderClass\">\n <div\n class=\"cqa-grid sm:cqa-flex sm:cqa-justify-between sm:cqa-items-center cqa-grid-cols-2 sm:cqa-grid-cols-4 cqa-gap-4 sm:cqa-gap-2\">\n <div class=\"cqa-flex cqa-flex-col\" *ngIf=\"totalSteps\">\n <span class=\"cqa-text-xs cqa-text-[#4A5565] cqa-mb-1\">Total Steps</span>\n <span class=\"cqa-text-[18px] cqa-font-medium cqa-text-[#101828]\">\n {{ completedSteps }} / {{ totalSteps }}\n </span>\n </div>\n\n <div class=\"cqa-flex cqa-flex-col\" *ngIf=\"totalTime\">\n <span class=\"cqa-text-xs cqa-text-[#4A5565] cqa-mb-1\">Total Time</span>\n <span class=\"cqa-text-[18px] cqa-font-medium cqa-text-[#101828]\">\n {{ totalTime }}\n </span>\n </div>\n\n <div class=\"cqa-flex cqa-flex-col\" *ngIf=\"appTime\">\n <span class=\"cqa-text-xs cqa-text-[#4A5565] cqa-mb-1\">App Time</span>\n <span class=\"cqa-text-[18px] cqa-font-medium cqa-text-[#101828]\">\n {{ appTime }}\n </span>\n </div>\n\n <div class=\"cqa-flex cqa-flex-col\" *ngIf=\"toolTime\">\n <span class=\"cqa-text-xs cqa-text-[#4A5565] cqa-mb-1\">Tool Time</span>\n <span class=\"cqa-text-[18px] cqa-font-medium cqa-text-[#101828]\">\n {{ toolTime }}\n </span>\n </div>\n </div>\n </div> -->\n\n <!-- Error Message Section -->\n <div *ngIf=\"errorMessage\" class=\"cqa-my-4 cqa-p-4 cqa-rounded-lg cqa-bg-white\"\n style=\"border: 1px solid #E5E7EB;\">\n <div class=\"cqa-text-xs cqa-text-[#9CA3AF] cqa-mb-2 cqa-font-medium\">\n Error Message\n </div>\n <div class=\"cqa-text-sm cqa-text-[#111827] cqa-font-semibold cqa-whitespace-normal cqa-break-anywhere\"\n style=\"word-break: break-word; white-space: pre-line;\">\n {{ errorMessage }}\n </div>\n </div>\n\n <!-- Buttons (or loading badge when showLoading) -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-[20px]\">\n <cqa-badge\n *ngIf=\"showLoading\"\n label=\"Updating Steps..\"\n icon=\"autorenew\"\n [isLoading]=\"true\"\n [fullWidth]=\"true\"\n [centerContent]=\"true\"\n variant=\"info\"\n size=\"medium\"\n [inlineStyles]=\"loadingBadgeInlineStyles\">\n </cqa-badge>\n <ng-container *ngIf=\"!showLoading\">\n <cqa-button\n *ngFor=\"let button of buttons; let i = index\"\n [variant]=\"button.variant\"\n [text]=\"button.label\"\n [icon]=\"button.icon\"\n [btnSize]=\"button.btnSize || 'lg'\"\n [fullWidth]=\"button.fullWidth !== undefined ? button.fullWidth : true\"\n [disabled]=\"button.disabled ?? false\"\n (clicked)=\"onButtonClick(button)\">\n </cqa-button>\n </ng-container>\n </div>\n </div>\n</div>", components: [{ type: i1.BadgeComponent, selector: "cqa-badge", inputs: ["type", "label", "icon", "iconLibrary", "variant", "size", "backgroundColor", "textColor", "borderColor", "iconBackgroundColor", "iconColor", "iconSize", "inlineStyles", "key", "value", "keyTextColor", "valueTextColor", "isLoading", "fullWidth", "centerContent", "title"] }, { type: i2.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
50
55
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ErrorModalComponent, decorators: [{
51
56
  type: Component,
52
- args: [{ selector: 'cqa-error-modal', template: "<div *ngIf=\"isOpen\"\n class=\"modal-backdrop cqa-fixed cqa-inset-0 cqa-bg-black cqa-bg-opacity-50 cqa-z-[9999] cqa-flex cqa-items-center cqa-justify-center cqa-p-4\"\n (click)=\"onBackdropClick($event)\">\n <div\n class=\"cqa-rounded-lg cqa-bg-white cqa-shadow-xl cqa-w-full cqa-max-w-[500px] cqa-overflow-hidden cqa-p-6 cqa-flex cqa-flex-col cqa-gap-2 cqa-max-h-[85vh] cqa-overflow-y-auto\"\n style=\"box-shadow: 0px 8px 8px -4px #10182808;\" (click)=\"$event.stopPropagation()\">\n\n <div class=\"cqa-flex cqa-flex-col cqa-items-center\">\n <div>\n <svg width=\"93\" height=\"93\" viewBox=\"0 0 93 93\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"4\" y=\"4\" width=\"85\" height=\"85\" rx=\"42.5\" fill=\"#F15F5F\"/>\n <rect x=\"4\" y=\"4\" width=\"85\" height=\"85\" rx=\"42.5\" stroke=\"#FCD9D9\" stroke-width=\"8\"/>\n <path d=\"M32.3815 62.4437H60.619C63.5065 62.4437 65.3065 59.3125 63.8627 56.8188L49.744 32.425C48.3002 29.9313 44.7002 29.9313 43.2565 32.425L29.1377 56.8188C27.694 59.3125 29.494 62.4437 32.3815 62.4437ZM46.5002 49.3188C45.469 49.3188 44.6252 48.475 44.6252 47.4438V43.6938C44.6252 42.6625 45.469 41.8188 46.5002 41.8188C47.5315 41.8188 48.3752 42.6625 48.3752 43.6938V47.4438C48.3752 48.475 47.5315 49.3188 46.5002 49.3188ZM48.3752 56.8188H44.6252V53.0688H48.3752V56.8188Z\" fill=\"white\"/>\n </svg>\n </div>\n\n <h2 class=\"cqa-text-[22px] cqa-font-semibold cqa-text-[#0B0B0C] cqa-mt-[20px] cqa-leading-[28px]\">\n {{ title }}\n </h2>\n\n <!-- Instructional Message -->\n <p *ngIf=\"instructionalMessage\" class=\"cqa-text-sm cqa-text-[#4A5565] cqa-mt-2 cqa-text-center\">\n {{ instructionalMessage }}\n </p>\n </div>\n\n <!-- <div *ngIf=\"hasTimingData\" class=\"cqa-rounded-lg cqa-border cqa-p-[17px] cqa-my-4\" [ngClass]=\"stepsBackgroundClass\"\n style=\"border: 1px solid;\" [style.border-color]=\"stepsBorderClass\">\n <div\n class=\"cqa-grid sm:cqa-flex sm:cqa-justify-between sm:cqa-items-center cqa-grid-cols-2 sm:cqa-grid-cols-4 cqa-gap-4 sm:cqa-gap-2\">\n <div class=\"cqa-flex cqa-flex-col\" *ngIf=\"totalSteps\">\n <span class=\"cqa-text-xs cqa-text-[#4A5565] cqa-mb-1\">Total Steps</span>\n <span class=\"cqa-text-[18px] cqa-font-medium cqa-text-[#101828]\">\n {{ completedSteps }} / {{ totalSteps }}\n </span>\n </div>\n\n <div class=\"cqa-flex cqa-flex-col\" *ngIf=\"totalTime\">\n <span class=\"cqa-text-xs cqa-text-[#4A5565] cqa-mb-1\">Total Time</span>\n <span class=\"cqa-text-[18px] cqa-font-medium cqa-text-[#101828]\">\n {{ totalTime }}\n </span>\n </div>\n\n <div class=\"cqa-flex cqa-flex-col\" *ngIf=\"appTime\">\n <span class=\"cqa-text-xs cqa-text-[#4A5565] cqa-mb-1\">App Time</span>\n <span class=\"cqa-text-[18px] cqa-font-medium cqa-text-[#101828]\">\n {{ appTime }}\n </span>\n </div>\n\n <div class=\"cqa-flex cqa-flex-col\" *ngIf=\"toolTime\">\n <span class=\"cqa-text-xs cqa-text-[#4A5565] cqa-mb-1\">Tool Time</span>\n <span class=\"cqa-text-[18px] cqa-font-medium cqa-text-[#101828]\">\n {{ toolTime }}\n </span>\n </div>\n </div>\n </div> -->\n\n <!-- Error Message Section -->\n <div *ngIf=\"errorMessage\" class=\"cqa-my-4 cqa-p-4 cqa-rounded-lg cqa-bg-white\"\n style=\"border: 1px solid #E5E7EB;\">\n <div class=\"cqa-text-xs cqa-text-[#9CA3AF] cqa-mb-2 cqa-font-medium\">\n Error Message\n </div>\n <div class=\"cqa-text-sm cqa-text-[#111827] cqa-font-semibold cqa-whitespace-normal cqa-break-anywhere\"\n style=\"word-break: break-word; white-space: pre-line;\">\n {{ errorMessage }}\n </div>\n </div>\n\n <!-- Buttons -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-[20px]\">\n <ng-container *ngFor=\"let button of buttons; let i = index\">\n <cqa-button\n [variant]=\"button.variant\"\n [text]=\"button.label\"\n [icon]=\"button.icon\"\n [btnSize]=\"button.btnSize || 'lg'\"\n [fullWidth]=\"button.fullWidth !== undefined ? button.fullWidth : true\"\n (clicked)=\"onButtonClick(button)\">\n </cqa-button>\n </ng-container>\n </div>\n </div>\n</div>", styles: [] }]
57
+ args: [{ selector: 'cqa-error-modal', template: "<div *ngIf=\"isOpen\"\n class=\"modal-backdrop cqa-fixed cqa-inset-0 cqa-bg-black cqa-bg-opacity-50 cqa-z-[9999] cqa-flex cqa-items-center cqa-justify-center cqa-p-4\"\n (click)=\"onBackdropClick($event)\">\n <div\n class=\"cqa-rounded-lg cqa-bg-white cqa-shadow-xl cqa-w-full cqa-max-w-[500px] cqa-overflow-hidden cqa-p-6 cqa-flex cqa-flex-col cqa-gap-2 cqa-max-h-[85vh] cqa-overflow-y-auto\"\n style=\"box-shadow: 0px 8px 8px -4px #10182808;\" (click)=\"$event.stopPropagation()\">\n\n <div class=\"cqa-flex cqa-flex-col cqa-items-center\">\n <div>\n <svg width=\"93\" height=\"93\" viewBox=\"0 0 93 93\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect x=\"4\" y=\"4\" width=\"85\" height=\"85\" rx=\"42.5\" fill=\"#F15F5F\"/>\n <rect x=\"4\" y=\"4\" width=\"85\" height=\"85\" rx=\"42.5\" stroke=\"#FCD9D9\" stroke-width=\"8\"/>\n <path d=\"M32.3815 62.4437H60.619C63.5065 62.4437 65.3065 59.3125 63.8627 56.8188L49.744 32.425C48.3002 29.9313 44.7002 29.9313 43.2565 32.425L29.1377 56.8188C27.694 59.3125 29.494 62.4437 32.3815 62.4437ZM46.5002 49.3188C45.469 49.3188 44.6252 48.475 44.6252 47.4438V43.6938C44.6252 42.6625 45.469 41.8188 46.5002 41.8188C47.5315 41.8188 48.3752 42.6625 48.3752 43.6938V47.4438C48.3752 48.475 47.5315 49.3188 46.5002 49.3188ZM48.3752 56.8188H44.6252V53.0688H48.3752V56.8188Z\" fill=\"white\"/>\n </svg>\n </div>\n\n <h2 class=\"cqa-text-[22px] cqa-font-semibold cqa-text-[#0B0B0C] cqa-mt-[20px] cqa-leading-[28px]\">\n {{ title }}\n </h2>\n\n <!-- Instructional Message -->\n <p *ngIf=\"instructionalMessage\" class=\"cqa-text-sm cqa-text-[#4A5565] cqa-mt-2 cqa-text-center\">\n {{ instructionalMessage }}\n </p>\n </div>\n\n <!-- <div *ngIf=\"hasTimingData\" class=\"cqa-rounded-lg cqa-border cqa-p-[17px] cqa-my-4\" [ngClass]=\"stepsBackgroundClass\"\n style=\"border: 1px solid;\" [style.border-color]=\"stepsBorderClass\">\n <div\n class=\"cqa-grid sm:cqa-flex sm:cqa-justify-between sm:cqa-items-center cqa-grid-cols-2 sm:cqa-grid-cols-4 cqa-gap-4 sm:cqa-gap-2\">\n <div class=\"cqa-flex cqa-flex-col\" *ngIf=\"totalSteps\">\n <span class=\"cqa-text-xs cqa-text-[#4A5565] cqa-mb-1\">Total Steps</span>\n <span class=\"cqa-text-[18px] cqa-font-medium cqa-text-[#101828]\">\n {{ completedSteps }} / {{ totalSteps }}\n </span>\n </div>\n\n <div class=\"cqa-flex cqa-flex-col\" *ngIf=\"totalTime\">\n <span class=\"cqa-text-xs cqa-text-[#4A5565] cqa-mb-1\">Total Time</span>\n <span class=\"cqa-text-[18px] cqa-font-medium cqa-text-[#101828]\">\n {{ totalTime }}\n </span>\n </div>\n\n <div class=\"cqa-flex cqa-flex-col\" *ngIf=\"appTime\">\n <span class=\"cqa-text-xs cqa-text-[#4A5565] cqa-mb-1\">App Time</span>\n <span class=\"cqa-text-[18px] cqa-font-medium cqa-text-[#101828]\">\n {{ appTime }}\n </span>\n </div>\n\n <div class=\"cqa-flex cqa-flex-col\" *ngIf=\"toolTime\">\n <span class=\"cqa-text-xs cqa-text-[#4A5565] cqa-mb-1\">Tool Time</span>\n <span class=\"cqa-text-[18px] cqa-font-medium cqa-text-[#101828]\">\n {{ toolTime }}\n </span>\n </div>\n </div>\n </div> -->\n\n <!-- Error Message Section -->\n <div *ngIf=\"errorMessage\" class=\"cqa-my-4 cqa-p-4 cqa-rounded-lg cqa-bg-white\"\n style=\"border: 1px solid #E5E7EB;\">\n <div class=\"cqa-text-xs cqa-text-[#9CA3AF] cqa-mb-2 cqa-font-medium\">\n Error Message\n </div>\n <div class=\"cqa-text-sm cqa-text-[#111827] cqa-font-semibold cqa-whitespace-normal cqa-break-anywhere\"\n style=\"word-break: break-word; white-space: pre-line;\">\n {{ errorMessage }}\n </div>\n </div>\n\n <!-- Buttons (or loading badge when showLoading) -->\n <div class=\"cqa-flex cqa-flex-col cqa-gap-[20px]\">\n <cqa-badge\n *ngIf=\"showLoading\"\n label=\"Updating Steps..\"\n icon=\"autorenew\"\n [isLoading]=\"true\"\n [fullWidth]=\"true\"\n [centerContent]=\"true\"\n variant=\"info\"\n size=\"medium\"\n [inlineStyles]=\"loadingBadgeInlineStyles\">\n </cqa-badge>\n <ng-container *ngIf=\"!showLoading\">\n <cqa-button\n *ngFor=\"let button of buttons; let i = index\"\n [variant]=\"button.variant\"\n [text]=\"button.label\"\n [icon]=\"button.icon\"\n [btnSize]=\"button.btnSize || 'lg'\"\n [fullWidth]=\"button.fullWidth !== undefined ? button.fullWidth : true\"\n [disabled]=\"button.disabled ?? false\"\n (clicked)=\"onButtonClick(button)\">\n </cqa-button>\n </ng-container>\n </div>\n </div>\n</div>", styles: [] }]
53
58
  }], propDecorators: { isOpen: [{
54
59
  type: Input
55
60
  }], title: [{
@@ -70,9 +75,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
70
75
  type: Input
71
76
  }], buttons: [{
72
77
  type: Input
78
+ }], showLoading: [{
79
+ type: Input
80
+ }], loadingBadgeInlineStyles: [{
81
+ type: Input
73
82
  }], buttonClick: [{
74
83
  type: Output
75
84
  }], closeModal: [{
76
85
  type: Output
77
86
  }] } });
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9lcnJvci1tb2RhbC9lcnJvci1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2Vycm9yLW1vZGFsL2Vycm9yLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFpQnZFLE1BQU0sT0FBTyxtQkFBbUI7SUFMaEM7UUFNVyxXQUFNLEdBQVksS0FBSyxDQUFDO1FBQ3hCLFVBQUssR0FBVyxPQUFPLENBQUM7UUFFeEIsaUJBQVksR0FBVyxFQUFFLENBQUM7UUFDMUIsZUFBVSxHQUFXLENBQUMsQ0FBQztRQUN2QixtQkFBYyxHQUFXLENBQUMsQ0FBQztRQUMzQixjQUFTLEdBQVcsRUFBRSxDQUFDO1FBQ3ZCLFlBQU8sR0FBVyxFQUFFLENBQUM7UUFDckIsYUFBUSxHQUFXLEVBQUUsQ0FBQztRQUN0QixZQUFPLEdBQXVCLEVBQUUsQ0FBQztRQUVoQyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDekMsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7S0FzQ2pEO0lBcENDLGVBQWUsQ0FBQyxLQUFpQjtRQUMvQixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBcUIsQ0FBQztRQUMzQyxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsYUFBNEIsQ0FBQztRQUV6RCxJQUFJLE1BQU0sS0FBSyxhQUFhLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtZQUMzRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDaEI7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQXdCO1FBQ3BDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVELElBQUksb0JBQW9CO1FBQ3RCLE9BQU8sb0JBQW9CLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJLGFBQWE7UUFDZixPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEtBQUssTUFBTSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsQ0FBQztJQUNsRSxDQUFDOztnSEFsRFUsbUJBQW1CO29HQUFuQixtQkFBbUIsc1lDakJoQyxtMUlBc0ZNOzJGRHJFTyxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0UsaUJBQWlCOzhCQUtsQixNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFFSSxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQnV0dG9uVmFyaWFudCB9IGZyb20gJy4uL2J1dHRvbi9idXR0b24uY29tcG9uZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBFcnJvck1vZGFsQnV0dG9uIHtcbiAgbGFiZWw6IHN0cmluZztcbiAgdmFyaWFudDogQnV0dG9uVmFyaWFudDtcbiAgaWNvbj86IHN0cmluZztcbiAgYWN0aW9uOiBzdHJpbmc7XG4gIGJ0blNpemU/OiAnc20nIHwgJ21kJyB8ICdsZyc7XG4gIGZ1bGxXaWR0aD86IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1lcnJvci1tb2RhbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9lcnJvci1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW11cbn0pXG5leHBvcnQgY2xhc3MgRXJyb3JNb2RhbENvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGlzT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nID0gJ0Vycm9yJztcbiAgQElucHV0KCkgaW5zdHJ1Y3Rpb25hbE1lc3NhZ2U/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGVycm9yTWVzc2FnZTogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHRvdGFsU3RlcHM6IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpIGNvbXBsZXRlZFN0ZXBzOiBudW1iZXIgPSAwO1xuICBASW5wdXQoKSB0b3RhbFRpbWU6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBhcHBUaW1lOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgdG9vbFRpbWU6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBidXR0b25zOiBFcnJvck1vZGFsQnV0dG9uW10gPSBbXTtcblxuICBAT3V0cHV0KCkgYnV0dG9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIGNsb3NlTW9kYWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgb25CYWNrZHJvcENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IGN1cnJlbnRUYXJnZXQgPSBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIFxuICAgIGlmICh0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQgfHwgdGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnbW9kYWwtYmFja2Ryb3AnKSkge1xuICAgICAgdGhpcy5vbkNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgb25CdXR0b25DbGljayhidXR0b246IEVycm9yTW9kYWxCdXR0b24pOiB2b2lkIHtcbiAgICB0aGlzLmJ1dHRvbkNsaWNrLmVtaXQoYnV0dG9uLmFjdGlvbik7XG4gIH1cblxuICBvbkNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2VNb2RhbC5lbWl0KCk7XG4gIH1cblxuICBnZXQgc3RlcHNCYWNrZ3JvdW5kQ2xhc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ2NxYS1iZy1bI0VFM0YzRjFBXSc7XG4gIH1cblxuICBnZXQgc3RlcHNCb3JkZXJDbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiAnI0ZFQ0FDQSc7XG4gIH1cblxuICBnZXQgaGFzVGltaW5nRGF0YSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEodGhpcy50b3RhbFN0ZXBzIHx8IHRoaXMudG90YWxUaW1lIHx8IHRoaXMuYXBwVGltZSB8fCB0aGlzLnRvb2xUaW1lKTtcbiAgfVxuXG4gIGdldE5vblRleHRCdXR0b25zKCk6IEVycm9yTW9kYWxCdXR0b25bXSB7XG4gICAgcmV0dXJuIHRoaXMuYnV0dG9ucy5maWx0ZXIoYnV0dG9uID0+IGJ1dHRvbi52YXJpYW50ICE9PSAndGV4dCcpO1xuICB9XG5cbiAgZ2V0VGV4dEJ1dHRvbnMoKTogRXJyb3JNb2RhbEJ1dHRvbltdIHtcbiAgICByZXR1cm4gdGhpcy5idXR0b25zLmZpbHRlcihidXR0b24gPT4gYnV0dG9uLnZhcmlhbnQgPT09ICd0ZXh0Jyk7XG4gIH1cbn1cblxuIiwiPGRpdiAqbmdJZj1cImlzT3BlblwiXG4gIGNsYXNzPVwibW9kYWwtYmFja2Ryb3AgY3FhLWZpeGVkIGNxYS1pbnNldC0wIGNxYS1iZy1ibGFjayBjcWEtYmctb3BhY2l0eS01MCBjcWEtei1bOTk5OV0gY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLXAtNFwiXG4gIChjbGljayk9XCJvbkJhY2tkcm9wQ2xpY2soJGV2ZW50KVwiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJjcWEtcm91bmRlZC1sZyBjcWEtYmctd2hpdGUgY3FhLXNoYWRvdy14bCBjcWEtdy1mdWxsIGNxYS1tYXgtdy1bNTAwcHhdIGNxYS1vdmVyZmxvdy1oaWRkZW4gY3FhLXAtNiBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yIGNxYS1tYXgtaC1bODV2aF0gY3FhLW92ZXJmbG93LXktYXV0b1wiXG4gICAgc3R5bGU9XCJib3gtc2hhZG93OiAwcHggOHB4IDhweCAtNHB4ICMxMDE4MjgwODtcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1pdGVtcy1jZW50ZXJcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxzdmcgd2lkdGg9XCI5M1wiIGhlaWdodD1cIjkzXCIgdmlld0JveD1cIjAgMCA5MyA5M1wiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgIDxyZWN0IHg9XCI0XCIgeT1cIjRcIiB3aWR0aD1cIjg1XCIgaGVpZ2h0PVwiODVcIiByeD1cIjQyLjVcIiBmaWxsPVwiI0YxNUY1RlwiLz5cbiAgICAgICAgICA8cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI4NVwiIGhlaWdodD1cIjg1XCIgcng9XCI0Mi41XCIgc3Ryb2tlPVwiI0ZDRDlEOVwiIHN0cm9rZS13aWR0aD1cIjhcIi8+XG4gICAgICAgICAgPHBhdGggZD1cIk0zMi4zODE1IDYyLjQ0MzdINjAuNjE5QzYzLjUwNjUgNjIuNDQzNyA2NS4zMDY1IDU5LjMxMjUgNjMuODYyNyA1Ni44MTg4TDQ5Ljc0NCAzMi40MjVDNDguMzAwMiAyOS45MzEzIDQ0LjcwMDIgMjkuOTMxMyA0My4yNTY1IDMyLjQyNUwyOS4xMzc3IDU2LjgxODhDMjcuNjk0IDU5LjMxMjUgMjkuNDk0IDYyLjQ0MzcgMzIuMzgxNSA2Mi40NDM3Wk00Ni41MDAyIDQ5LjMxODhDNDUuNDY5IDQ5LjMxODggNDQuNjI1MiA0OC40NzUgNDQuNjI1MiA0Ny40NDM4VjQzLjY5MzhDNDQuNjI1MiA0Mi42NjI1IDQ1LjQ2OSA0MS44MTg4IDQ2LjUwMDIgNDEuODE4OEM0Ny41MzE1IDQxLjgxODggNDguMzc1MiA0Mi42NjI1IDQ4LjM3NTIgNDMuNjkzOFY0Ny40NDM4QzQ4LjM3NTIgNDguNDc1IDQ3LjUzMTUgNDkuMzE4OCA0Ni41MDAyIDQ5LjMxODhaTTQ4LjM3NTIgNTYuODE4OEg0NC42MjUyVjUzLjA2ODhINDguMzc1MlY1Ni44MTg4WlwiIGZpbGw9XCJ3aGl0ZVwiLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8aDIgY2xhc3M9XCJjcWEtdGV4dC1bMjJweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyMwQjBCMENdIGNxYS1tdC1bMjBweF0gY3FhLWxlYWRpbmctWzI4cHhdXCI+XG4gICAgICAgIHt7IHRpdGxlIH19XG4gICAgICA8L2gyPlxuXG4gICAgICA8IS0tIEluc3RydWN0aW9uYWwgTWVzc2FnZSAtLT5cbiAgICAgIDxwICpuZ0lmPVwiaW5zdHJ1Y3Rpb25hbE1lc3NhZ2VcIiBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS10ZXh0LVsjNEE1NTY1XSBjcWEtbXQtMiBjcWEtdGV4dC1jZW50ZXJcIj5cbiAgICAgICAge3sgaW5zdHJ1Y3Rpb25hbE1lc3NhZ2UgfX1cbiAgICAgIDwvcD5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gPGRpdiAqbmdJZj1cImhhc1RpbWluZ0RhdGFcIiBjbGFzcz1cImNxYS1yb3VuZGVkLWxnIGNxYS1ib3JkZXIgY3FhLXAtWzE3cHhdIGNxYS1teS00XCIgW25nQ2xhc3NdPVwic3RlcHNCYWNrZ3JvdW5kQ2xhc3NcIlxuICAgICAgc3R5bGU9XCJib3JkZXI6IDFweCBzb2xpZDtcIiBbc3R5bGUuYm9yZGVyLWNvbG9yXT1cInN0ZXBzQm9yZGVyQ2xhc3NcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJjcWEtZ3JpZCBzbTpjcWEtZmxleCBzbTpjcWEtanVzdGlmeS1iZXR3ZWVuIHNtOmNxYS1pdGVtcy1jZW50ZXIgY3FhLWdyaWQtY29scy0yIHNtOmNxYS1ncmlkLWNvbHMtNCBjcWEtZ2FwLTQgc206Y3FhLWdhcC0yXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2xcIiAqbmdJZj1cInRvdGFsU3RlcHNcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjNEE1NTY1XSBjcWEtbWItMVwiPlRvdGFsIFN0ZXBzPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzE4cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzEwMTgyOF1cIj5cbiAgICAgICAgICAgIHt7IGNvbXBsZXRlZFN0ZXBzIH19IC8ge3sgdG90YWxTdGVwcyB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbFwiICpuZ0lmPVwidG90YWxUaW1lXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtdGV4dC1bIzRBNTU2NV0gY3FhLW1iLTFcIj5Ub3RhbCBUaW1lPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzE4cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzEwMTgyOF1cIj5cbiAgICAgICAgICAgIHt7IHRvdGFsVGltZSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbFwiICpuZ0lmPVwiYXBwVGltZVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQteHMgY3FhLXRleHQtWyM0QTU1NjVdIGNxYS1tYi0xXCI+QXBwIFRpbWU8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMThweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMTAxODI4XVwiPlxuICAgICAgICAgICAge3sgYXBwVGltZSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbFwiICpuZ0lmPVwidG9vbFRpbWVcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjNEE1NTY1XSBjcWEtbWItMVwiPlRvb2wgVGltZTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxOHB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMxMDE4MjhdXCI+XG4gICAgICAgICAgICB7eyB0b29sVGltZSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4gLS0+XG5cbiAgICA8IS0tIEVycm9yIE1lc3NhZ2UgU2VjdGlvbiAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiZXJyb3JNZXNzYWdlXCIgY2xhc3M9XCJjcWEtbXktNCBjcWEtcC00IGNxYS1yb3VuZGVkLWxnIGNxYS1iZy13aGl0ZVwiXG4gICAgICBzdHlsZT1cImJvcmRlcjogMXB4IHNvbGlkICNFNUU3RUI7XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLXRleHQteHMgY3FhLXRleHQtWyM5Q0EzQUZdIGNxYS1tYi0yIGNxYS1mb250LW1lZGl1bVwiPlxuICAgICAgICBFcnJvciBNZXNzYWdlXG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtdGV4dC1bIzExMTgyN10gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXdoaXRlc3BhY2Utbm9ybWFsIGNxYS1icmVhay1hbnl3aGVyZVwiXG4gICAgICAgIHN0eWxlPVwid29yZC1icmVhazogYnJlYWstd29yZDsgd2hpdGUtc3BhY2U6IHByZS1saW5lO1wiPlxuICAgICAgICB7eyBlcnJvck1lc3NhZ2UgfX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBCdXR0b25zIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC1bMjBweF1cIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBidXR0b25zOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgIDxjcWEtYnV0dG9uXG4gICAgICAgICAgW3ZhcmlhbnRdPVwiYnV0dG9uLnZhcmlhbnRcIlxuICAgICAgICAgIFt0ZXh0XT1cImJ1dHRvbi5sYWJlbFwiXG4gICAgICAgICAgW2ljb25dPVwiYnV0dG9uLmljb25cIlxuICAgICAgICAgIFtidG5TaXplXT1cImJ1dHRvbi5idG5TaXplIHx8ICdsZydcIlxuICAgICAgICAgIFtmdWxsV2lkdGhdPVwiYnV0dG9uLmZ1bGxXaWR0aCAhPT0gdW5kZWZpbmVkID8gYnV0dG9uLmZ1bGxXaWR0aCA6IHRydWVcIlxuICAgICAgICAgIChjbGlja2VkKT1cIm9uQnV0dG9uQ2xpY2soYnV0dG9uKVwiPlxuICAgICAgICA8L2NxYS1idXR0b24+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj4iXX0=
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9lcnJvci1tb2RhbC9lcnJvci1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2Vycm9yLW1vZGFsL2Vycm9yLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7O0FBbUJ2RSxNQUFNLE9BQU8sbUJBQW1CO0lBTGhDO1FBTVcsV0FBTSxHQUFZLEtBQUssQ0FBQztRQUN4QixVQUFLLEdBQVcsT0FBTyxDQUFDO1FBRXhCLGlCQUFZLEdBQVcsRUFBRSxDQUFDO1FBQzFCLGVBQVUsR0FBVyxDQUFDLENBQUM7UUFDdkIsbUJBQWMsR0FBVyxDQUFDLENBQUM7UUFDM0IsY0FBUyxHQUFXLEVBQUUsQ0FBQztRQUN2QixZQUFPLEdBQVcsRUFBRSxDQUFDO1FBQ3JCLGFBQVEsR0FBVyxFQUFFLENBQUM7UUFDdEIsWUFBTyxHQUF1QixFQUFFLENBQUM7UUFDMUMsb0dBQW9HO1FBQzNGLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBSTVCLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUN6QyxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztLQXVDakQ7SUFyQ0MsZUFBZSxDQUFDLEtBQWlCO1FBQy9CLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFxQixDQUFDO1FBQzNDLE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUE0QixDQUFDO1FBRXpELElBQUksTUFBTSxLQUFLLGFBQWEsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO1lBQzNFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNoQjtJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsTUFBd0I7UUFDcEMsSUFBSSxNQUFNLENBQUMsUUFBUTtZQUFFLE9BQU87UUFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxvQkFBb0I7UUFDdEIsT0FBTyxvQkFBb0IsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELElBQUksYUFBYTtRQUNmLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRCxpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sS0FBSyxNQUFNLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsT0FBTyxLQUFLLE1BQU0sQ0FBQyxDQUFDO0lBQ2xFLENBQUM7O2dIQXZEVSxtQkFBbUI7b0dBQW5CLG1CQUFtQix3ZENuQmhDLHd4SkFtR007MkZEaEZPLG1CQUFtQjtrQkFML0IsU0FBUzsrQkFDRSxpQkFBaUI7OEJBS2xCLE1BQU07c0JBQWQsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUVHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUVJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCdXR0b25WYXJpYW50IH0gZnJvbSAnLi4vYnV0dG9uL2J1dHRvbi5jb21wb25lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yTW9kYWxCdXR0b24ge1xuICBsYWJlbDogc3RyaW5nO1xuICB2YXJpYW50OiBCdXR0b25WYXJpYW50O1xuICBpY29uPzogc3RyaW5nO1xuICBhY3Rpb246IHN0cmluZztcbiAgYnRuU2l6ZT86ICdzbScgfCAnbWQnIHwgJ2xnJztcbiAgZnVsbFdpZHRoPzogYm9vbGVhbjtcbiAgLyoqIFdoZW4gdHJ1ZSwgYnV0dG9uIGlzIGRpc2FibGVkIGFuZCBkb2VzIG5vdCBlbWl0IGNsaWNrICovXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLWVycm9yLW1vZGFsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Vycm9yLW1vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXVxufSlcbmV4cG9ydCBjbGFzcyBFcnJvck1vZGFsQ29tcG9uZW50IHtcbiAgQElucHV0KCkgaXNPcGVuOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmcgPSAnRXJyb3InO1xuICBASW5wdXQoKSBpbnN0cnVjdGlvbmFsTWVzc2FnZT86IHN0cmluZztcbiAgQElucHV0KCkgZXJyb3JNZXNzYWdlOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgdG90YWxTdGVwczogbnVtYmVyID0gMDtcbiAgQElucHV0KCkgY29tcGxldGVkU3RlcHM6IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpIHRvdGFsVGltZTogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGFwcFRpbWU6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSB0b29sVGltZTogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGJ1dHRvbnM6IEVycm9yTW9kYWxCdXR0b25bXSA9IFtdO1xuICAvKiogV2hlbiB0cnVlLCBzaG93cyBhIGxvYWRpbmcgYmFkZ2UgaW5zdGVhZCBvZiBidXR0b25zIChlLmcuIHdoaWxlIHdhaXRpbmcgZm9yIGFzeW5jIGNvbXBsZXRpb24pICovXG4gIEBJbnB1dCgpIHNob3dMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBJbmxpbmUgc3R5bGVzIGZvciB0aGUgbG9hZGluZyBiYWRnZSAoZS5nLiBtaW4taGVpZ2h0IHRvIG1hdGNoIGJ1dHRvbikuIFBhc3MgZnJvbSBwYXJlbnQgZm9yIHJldXNhYmlsaXR5LiAqL1xuICBASW5wdXQoKSBsb2FkaW5nQmFkZ2VJbmxpbmVTdHlsZXM/OiBzdHJpbmc7XG5cbiAgQE91dHB1dCgpIGJ1dHRvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBjbG9zZU1vZGFsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIG9uQmFja2Ryb3BDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCBjdXJyZW50VGFyZ2V0ID0gZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBcbiAgICBpZiAodGFyZ2V0ID09PSBjdXJyZW50VGFyZ2V0IHx8IHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ21vZGFsLWJhY2tkcm9wJykpIHtcbiAgICAgIHRoaXMub25DbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIG9uQnV0dG9uQ2xpY2soYnV0dG9uOiBFcnJvck1vZGFsQnV0dG9uKTogdm9pZCB7XG4gICAgaWYgKGJ1dHRvbi5kaXNhYmxlZCkgcmV0dXJuO1xuICAgIHRoaXMuYnV0dG9uQ2xpY2suZW1pdChidXR0b24uYWN0aW9uKTtcbiAgfVxuXG4gIG9uQ2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5jbG9zZU1vZGFsLmVtaXQoKTtcbiAgfVxuXG4gIGdldCBzdGVwc0JhY2tncm91bmRDbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiAnY3FhLWJnLVsjRUUzRjNGMUFdJztcbiAgfVxuXG4gIGdldCBzdGVwc0JvcmRlckNsYXNzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICcjRkVDQUNBJztcbiAgfVxuXG4gIGdldCBoYXNUaW1pbmdEYXRhKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhISh0aGlzLnRvdGFsU3RlcHMgfHwgdGhpcy50b3RhbFRpbWUgfHwgdGhpcy5hcHBUaW1lIHx8IHRoaXMudG9vbFRpbWUpO1xuICB9XG5cbiAgZ2V0Tm9uVGV4dEJ1dHRvbnMoKTogRXJyb3JNb2RhbEJ1dHRvbltdIHtcbiAgICByZXR1cm4gdGhpcy5idXR0b25zLmZpbHRlcihidXR0b24gPT4gYnV0dG9uLnZhcmlhbnQgIT09ICd0ZXh0Jyk7XG4gIH1cblxuICBnZXRUZXh0QnV0dG9ucygpOiBFcnJvck1vZGFsQnV0dG9uW10ge1xuICAgIHJldHVybiB0aGlzLmJ1dHRvbnMuZmlsdGVyKGJ1dHRvbiA9PiBidXR0b24udmFyaWFudCA9PT0gJ3RleHQnKTtcbiAgfVxufVxuXG4iLCI8ZGl2ICpuZ0lmPVwiaXNPcGVuXCJcbiAgY2xhc3M9XCJtb2RhbC1iYWNrZHJvcCBjcWEtZml4ZWQgY3FhLWluc2V0LTAgY3FhLWJnLWJsYWNrIGNxYS1iZy1vcGFjaXR5LTUwIGNxYS16LVs5OTk5XSBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtcC00XCJcbiAgKGNsaWNrKT1cIm9uQmFja2Ryb3BDbGljaygkZXZlbnQpXCI+XG4gIDxkaXZcbiAgICBjbGFzcz1cImNxYS1yb3VuZGVkLWxnIGNxYS1iZy13aGl0ZSBjcWEtc2hhZG93LXhsIGNxYS13LWZ1bGwgY3FhLW1heC13LVs1MDBweF0gY3FhLW92ZXJmbG93LWhpZGRlbiBjcWEtcC02IGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTIgY3FhLW1heC1oLVs4NXZoXSBjcWEtb3ZlcmZsb3cteS1hdXRvXCJcbiAgICBzdHlsZT1cImJveC1zaGFkb3c6IDBweCA4cHggOHB4IC00cHggIzEwMTgyODA4O1wiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cblxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgPGRpdj5cbiAgICAgICAgPHN2ZyB3aWR0aD1cIjkzXCIgaGVpZ2h0PVwiOTNcIiB2aWV3Qm94PVwiMCAwIDkzIDkzXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgPHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiODVcIiBoZWlnaHQ9XCI4NVwiIHJ4PVwiNDIuNVwiIGZpbGw9XCIjRjE1RjVGXCIvPlxuICAgICAgICAgIDxyZWN0IHg9XCI0XCIgeT1cIjRcIiB3aWR0aD1cIjg1XCIgaGVpZ2h0PVwiODVcIiByeD1cIjQyLjVcIiBzdHJva2U9XCIjRkNEOUQ5XCIgc3Ryb2tlLXdpZHRoPVwiOFwiLz5cbiAgICAgICAgICA8cGF0aCBkPVwiTTMyLjM4MTUgNjIuNDQzN0g2MC42MTlDNjMuNTA2NSA2Mi40NDM3IDY1LjMwNjUgNTkuMzEyNSA2My44NjI3IDU2LjgxODhMNDkuNzQ0IDMyLjQyNUM0OC4zMDAyIDI5LjkzMTMgNDQuNzAwMiAyOS45MzEzIDQzLjI1NjUgMzIuNDI1TDI5LjEzNzcgNTYuODE4OEMyNy42OTQgNTkuMzEyNSAyOS40OTQgNjIuNDQzNyAzMi4zODE1IDYyLjQ0MzdaTTQ2LjUwMDIgNDkuMzE4OEM0NS40NjkgNDkuMzE4OCA0NC42MjUyIDQ4LjQ3NSA0NC42MjUyIDQ3LjQ0MzhWNDMuNjkzOEM0NC42MjUyIDQyLjY2MjUgNDUuNDY5IDQxLjgxODggNDYuNTAwMiA0MS44MTg4QzQ3LjUzMTUgNDEuODE4OCA0OC4zNzUyIDQyLjY2MjUgNDguMzc1MiA0My42OTM4VjQ3LjQ0MzhDNDguMzc1MiA0OC40NzUgNDcuNTMxNSA0OS4zMTg4IDQ2LjUwMDIgNDkuMzE4OFpNNDguMzc1MiA1Ni44MTg4SDQ0LjYyNTJWNTMuMDY4OEg0OC4zNzUyVjU2LjgxODhaXCIgZmlsbD1cIndoaXRlXCIvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxoMiBjbGFzcz1cImNxYS10ZXh0LVsyMnB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bIzBCMEIwQ10gY3FhLW10LVsyMHB4XSBjcWEtbGVhZGluZy1bMjhweF1cIj5cbiAgICAgICAge3sgdGl0bGUgfX1cbiAgICAgIDwvaDI+XG5cbiAgICAgIDwhLS0gSW5zdHJ1Y3Rpb25hbCBNZXNzYWdlIC0tPlxuICAgICAgPHAgKm5nSWY9XCJpbnN0cnVjdGlvbmFsTWVzc2FnZVwiIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLXRleHQtWyM0QTU1NjVdIGNxYS1tdC0yIGNxYS10ZXh0LWNlbnRlclwiPlxuICAgICAgICB7eyBpbnN0cnVjdGlvbmFsTWVzc2FnZSB9fVxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSA8ZGl2ICpuZ0lmPVwiaGFzVGltaW5nRGF0YVwiIGNsYXNzPVwiY3FhLXJvdW5kZWQtbGcgY3FhLWJvcmRlciBjcWEtcC1bMTdweF0gY3FhLW15LTRcIiBbbmdDbGFzc109XCJzdGVwc0JhY2tncm91bmRDbGFzc1wiXG4gICAgICBzdHlsZT1cImJvcmRlcjogMXB4IHNvbGlkO1wiIFtzdHlsZS5ib3JkZXItY29sb3JdPVwic3RlcHNCb3JkZXJDbGFzc1wiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImNxYS1ncmlkIHNtOmNxYS1mbGV4IHNtOmNxYS1qdXN0aWZ5LWJldHdlZW4gc206Y3FhLWl0ZW1zLWNlbnRlciBjcWEtZ3JpZC1jb2xzLTIgc206Y3FhLWdyaWQtY29scy00IGNxYS1nYXAtNCBzbTpjcWEtZ2FwLTJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbFwiICpuZ0lmPVwidG90YWxTdGVwc1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQteHMgY3FhLXRleHQtWyM0QTU1NjVdIGNxYS1tYi0xXCI+VG90YWwgU3RlcHM8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMThweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMTAxODI4XVwiPlxuICAgICAgICAgICAge3sgY29tcGxldGVkU3RlcHMgfX0gLyB7eyB0b3RhbFN0ZXBzIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sXCIgKm5nSWY9XCJ0b3RhbFRpbWVcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjNEE1NTY1XSBjcWEtbWItMVwiPlRvdGFsIFRpbWU8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMThweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMTAxODI4XVwiPlxuICAgICAgICAgICAge3sgdG90YWxUaW1lIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sXCIgKm5nSWY9XCJhcHBUaW1lXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtdGV4dC1bIzRBNTU2NV0gY3FhLW1iLTFcIj5BcHAgVGltZTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsxOHB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMxMDE4MjhdXCI+XG4gICAgICAgICAgICB7eyBhcHBUaW1lIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sXCIgKm5nSWY9XCJ0b29sVGltZVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQteHMgY3FhLXRleHQtWyM0QTU1NjVdIGNxYS1tYi0xXCI+VG9vbCBUaW1lPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWzE4cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzEwMTgyOF1cIj5cbiAgICAgICAgICAgIHt7IHRvb2xUaW1lIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PiAtLT5cblxuICAgIDwhLS0gRXJyb3IgTWVzc2FnZSBTZWN0aW9uIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJlcnJvck1lc3NhZ2VcIiBjbGFzcz1cImNxYS1teS00IGNxYS1wLTQgY3FhLXJvdW5kZWQtbGcgY3FhLWJnLXdoaXRlXCJcbiAgICAgIHN0eWxlPVwiYm9yZGVyOiAxcHggc29saWQgI0U1RTdFQjtcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtdGV4dC1bIzlDQTNBRl0gY3FhLW1iLTIgY3FhLWZvbnQtbWVkaXVtXCI+XG4gICAgICAgIEVycm9yIE1lc3NhZ2VcbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS10ZXh0LVsjMTExODI3XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtd2hpdGVzcGFjZS1ub3JtYWwgY3FhLWJyZWFrLWFueXdoZXJlXCJcbiAgICAgICAgc3R5bGU9XCJ3b3JkLWJyZWFrOiBicmVhay13b3JkOyB3aGl0ZS1zcGFjZTogcHJlLWxpbmU7XCI+XG4gICAgICAgIHt7IGVycm9yTWVzc2FnZSB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEJ1dHRvbnMgKG9yIGxvYWRpbmcgYmFkZ2Ugd2hlbiBzaG93TG9hZGluZykgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLVsyMHB4XVwiPlxuICAgICAgPGNxYS1iYWRnZVxuICAgICAgICAqbmdJZj1cInNob3dMb2FkaW5nXCJcbiAgICAgICAgbGFiZWw9XCJVcGRhdGluZyBTdGVwcy4uXCJcbiAgICAgICAgaWNvbj1cImF1dG9yZW5ld1wiXG4gICAgICAgIFtpc0xvYWRpbmddPVwidHJ1ZVwiXG4gICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgIFtjZW50ZXJDb250ZW50XT1cInRydWVcIlxuICAgICAgICB2YXJpYW50PVwiaW5mb1wiXG4gICAgICAgIHNpemU9XCJtZWRpdW1cIlxuICAgICAgICBbaW5saW5lU3R5bGVzXT1cImxvYWRpbmdCYWRnZUlubGluZVN0eWxlc1wiPlxuICAgICAgPC9jcWEtYmFkZ2U+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNob3dMb2FkaW5nXCI+XG4gICAgICAgIDxjcWEtYnV0dG9uXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiBidXR0b25zOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICBbdmFyaWFudF09XCJidXR0b24udmFyaWFudFwiXG4gICAgICAgICAgW3RleHRdPVwiYnV0dG9uLmxhYmVsXCJcbiAgICAgICAgICBbaWNvbl09XCJidXR0b24uaWNvblwiXG4gICAgICAgICAgW2J0blNpemVdPVwiYnV0dG9uLmJ0blNpemUgfHwgJ2xnJ1wiXG4gICAgICAgICAgW2Z1bGxXaWR0aF09XCJidXR0b24uZnVsbFdpZHRoICE9PSB1bmRlZmluZWQgPyBidXR0b24uZnVsbFdpZHRoIDogdHJ1ZVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImJ1dHRvbi5kaXNhYmxlZCA/PyBmYWxzZVwiXG4gICAgICAgICAgKGNsaWNrZWQpPVwib25CdXR0b25DbGljayhidXR0b24pXCI+XG4gICAgICAgIDwvY3FhLWJ1dHRvbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PiJdfQ==