@obsidian-typings/obsidian-catalyst-1.15.1 0.0.0 → 1.2.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.
@@ -0,0 +1,1488 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ */
4
+
5
+ "use strict";
6
+ var __defProp = Object.defineProperty;
7
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
8
+ var __getOwnPropNames = Object.getOwnPropertyNames;
9
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
10
+ var __export = (target, all) => {
11
+ for (var name in all)
12
+ __defProp(target, name, { get: all[name], enumerable: true });
13
+ };
14
+ var __copyProps = (to, from, except, desc) => {
15
+ if (from && typeof from === "object" || typeof from === "function") {
16
+ for (let key of __getOwnPropNames(from))
17
+ if (!__hasOwnProp.call(to, key) && key !== except)
18
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
19
+ }
20
+ return to;
21
+ };
22
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
23
+
24
+ // src/obsidian/implementations/index.ts
25
+ var index_exports = {};
26
+ __export(index_exports, {
27
+ CustomArrayDictImpl: () => CustomArrayDictImpl,
28
+ FileExtension: () => FileExtension,
29
+ InternalPluginName: () => InternalPluginName,
30
+ ViewType: () => ViewType,
31
+ createTFileInstance: () => createTFileInstance,
32
+ createTFolderInstance: () => createTFolderInstance,
33
+ evaluateBaseHeadless: () => evaluateBaseHeadless,
34
+ getAbstractTextComponentConstructor: () => getAbstractTextComponentConstructor,
35
+ getAllPropertiesViewConstructor: () => getAllPropertiesViewConstructor,
36
+ getAppConstructor: () => getAppConstructor,
37
+ getAppMenuBarManagerConstructor: () => getAppMenuBarManagerConstructor,
38
+ getAppSettingConstructor: () => getAppSettingConstructor,
39
+ getAudioViewConstructor: () => getAudioViewConstructor,
40
+ getBacklinkViewConstructor: () => getBacklinkViewConstructor,
41
+ getBaseComponentConstructor: () => getBaseComponentConstructor,
42
+ getBasesContextConstructor: () => getBasesContextConstructor,
43
+ getBasesControllerFromRender: () => getBasesControllerFromRender,
44
+ getBasesEntryConstructor: () => getBasesEntryConstructor,
45
+ getBasesEntryGroupConstructor: () => getBasesEntryGroupConstructor,
46
+ getBasesQueryConstructor: () => getBasesQueryConstructor,
47
+ getBasesQueryResultConstructor: () => getBasesQueryResultConstructor,
48
+ getBasesViewConfigConstructor: () => getBasesViewConfigConstructor,
49
+ getBasesViewConstructor: () => getBasesViewConstructor,
50
+ getBookmarksViewConstructor: () => getBookmarksViewConstructor,
51
+ getBooleanValueConstructor: () => getBooleanValueConstructor,
52
+ getButtonComponentConstructor: () => getButtonComponentConstructor,
53
+ getCanvasViewConstructor: () => getCanvasViewConstructor,
54
+ getCapacitorAdapterConstructor: () => getCapacitorAdapterConstructor,
55
+ getCliConstructor: () => getCliConstructor,
56
+ getColorComponentConstructor: () => getColorComponentConstructor,
57
+ getCommandsConstructor: () => getCommandsConstructor,
58
+ getComponentConstructor: () => getComponentConstructor,
59
+ getConfirmationButtonConstructor: () => getConfirmationButtonConstructor,
60
+ getConfirmationModalConstructor: () => getConfirmationModalConstructor,
61
+ getCustomCSSConstructor: () => getCustomCSSConstructor,
62
+ getDataAdapterEx: () => getDataAdapterEx,
63
+ getDateValueConstructor: () => getDateValueConstructor,
64
+ getDisplayValueComponentConstructor: () => getDisplayValueComponentConstructor,
65
+ getDragManagerConstructor: () => getDragManagerConstructor,
66
+ getDropdownComponentConstructor: () => getDropdownComponentConstructor,
67
+ getDurationValueConstructor: () => getDurationValueConstructor,
68
+ getEditableFileViewConstructor: () => getEditableFileViewConstructor,
69
+ getEditorConstructor: () => getEditorConstructor,
70
+ getEditorSuggestsConstructor: () => getEditorSuggestsConstructor,
71
+ getEmbedRegistryConstructor: () => getEmbedRegistryConstructor,
72
+ getEmptyViewConstructor: () => getEmptyViewConstructor,
73
+ getEventsConstructor: () => getEventsConstructor,
74
+ getExtraButtonComponentConstructor: () => getExtraButtonComponentConstructor,
75
+ getFileExplorerViewConstructor: () => getFileExplorerViewConstructor,
76
+ getFileManagerConstructor: () => getFileManagerConstructor,
77
+ getFilePropertiesViewConstructor: () => getFilePropertiesViewConstructor,
78
+ getFileSystemAdapterConstructor: () => getFileSystemAdapterConstructor,
79
+ getFileValueConstructor: () => getFileValueConstructor,
80
+ getFoldManagerConstructor: () => getFoldManagerConstructor,
81
+ getFrameDomConstructor: () => getFrameDomConstructor,
82
+ getFuzzySuggestModalConstructor: () => getFuzzySuggestModalConstructor,
83
+ getGraphViewConstructor: () => getGraphViewConstructor,
84
+ getHTMLValueConstructor: () => getHTMLValueConstructor,
85
+ getHotkeyManagerConstructor: () => getHotkeyManagerConstructor,
86
+ getHoverPopoverConstructor: () => getHoverPopoverConstructor,
87
+ getIconValueConstructor: () => getIconValueConstructor,
88
+ getImageValueConstructor: () => getImageValueConstructor,
89
+ getImageViewConstructor: () => getImageViewConstructor,
90
+ getInternalPluginConstructor: () => getInternalPluginConstructor,
91
+ getInternalPluginsConstructor: () => getInternalPluginsConstructor,
92
+ getKeymapConstructor: () => getKeymapConstructor,
93
+ getLinkValueConstructor: () => getLinkValueConstructor,
94
+ getListValueConstructor: () => getListValueConstructor,
95
+ getLocalGraphViewConstructor: () => getLocalGraphViewConstructor,
96
+ getMarkdownPreviewRendererConstructor: () => getMarkdownPreviewRendererConstructor,
97
+ getMarkdownPreviewViewConstructor: () => getMarkdownPreviewViewConstructor,
98
+ getMarkdownRenderChildConstructor: () => getMarkdownRenderChildConstructor,
99
+ getMarkdownRendererConstructor: () => getMarkdownRendererConstructor,
100
+ getMarkdownViewConstructor: () => getMarkdownViewConstructor,
101
+ getMenuConstructor: () => getMenuConstructor,
102
+ getMenuItemConstructor: () => getMenuItemConstructor,
103
+ getMenuSeparatorConstructor: () => getMenuSeparatorConstructor,
104
+ getMetadataCacheConstructor: () => getMetadataCacheConstructor,
105
+ getMetadataTypeManagerConstructor: () => getMetadataTypeManagerConstructor,
106
+ getModalConstructor: () => getModalConstructor,
107
+ getMomentFormatComponentConstructor: () => getMomentFormatComponentConstructor,
108
+ getNotNullValueConstructor: () => getNotNullValueConstructor,
109
+ getNoticeConstructor: () => getNoticeConstructor,
110
+ getNullValueConstructor: () => getNullValueConstructor,
111
+ getNumberValueConstructor: () => getNumberValueConstructor,
112
+ getObjectValueConstructor: () => getObjectValueConstructor,
113
+ getObsidianDOMConstructor: () => getObsidianDOMConstructor,
114
+ getObsidianSearchQueryConstructor: () => getObsidianSearchQueryConstructor,
115
+ getOutgoingLinkViewConstructor: () => getOutgoingLinkViewConstructor,
116
+ getOutlineViewConstructor: () => getOutlineViewConstructor,
117
+ getPdfViewConstructor: () => getPdfViewConstructor,
118
+ getPlatformEx: () => getPlatformEx,
119
+ getPluginsConstructor: () => getPluginsConstructor,
120
+ getProgressBarComponentConstructor: () => getProgressBarComponentConstructor,
121
+ getQueryControllerConstructor: () => getQueryControllerConstructor,
122
+ getRecentFileTrackerConstructor: () => getRecentFileTrackerConstructor,
123
+ getRegExpValueConstructor: () => getRegExpValueConstructor,
124
+ getRelativeDateValueConstructor: () => getRelativeDateValueConstructor,
125
+ getReleaseNotesViewConstructor: () => getReleaseNotesViewConstructor,
126
+ getRenderContextConstructor: () => getRenderContextConstructor,
127
+ getScopeConstructor: () => getScopeConstructor,
128
+ getSearchComponentConstructor: () => getSearchComponentConstructor,
129
+ getSearchMatcherGuards: () => getSearchMatcherGuards,
130
+ getSearchViewConstructor: () => getSearchViewConstructor,
131
+ getSecretComponentConstructor: () => getSecretComponentConstructor,
132
+ getSecretStorageConstructor: () => getSecretStorageConstructor,
133
+ getSettingConstructor: () => getSettingConstructor,
134
+ getSettingGroupConstructor: () => getSettingGroupConstructor,
135
+ getSettingPageConstructor: () => getSettingPageConstructor,
136
+ getSettingTabConstructor: () => getSettingTabConstructor,
137
+ getShareReceiverConstructor: () => getShareReceiverConstructor,
138
+ getSliderComponentConstructor: () => getSliderComponentConstructor,
139
+ getStatusBarConstructor: () => getStatusBarConstructor,
140
+ getStringValueConstructor: () => getStringValueConstructor,
141
+ getSyncViewConstructor: () => getSyncViewConstructor,
142
+ getTAbstractFileConstructor: () => getTAbstractFileConstructor,
143
+ getTFileConstructor: () => getTFileConstructor,
144
+ getTFolderConstructor: () => getTFolderConstructor,
145
+ getTagValueConstructor: () => getTagValueConstructor,
146
+ getTagViewConstructor: () => getTagViewConstructor,
147
+ getTasksConstructor: () => getTasksConstructor,
148
+ getTextAreaComponentConstructor: () => getTextAreaComponentConstructor,
149
+ getTextComponentConstructor: () => getTextComponentConstructor,
150
+ getToggleComponentConstructor: () => getToggleComponentConstructor,
151
+ getUrlValueConstructor: () => getUrlValueConstructor,
152
+ getValueComponentConstructor: () => getValueComponentConstructor,
153
+ getValueConstructor: () => getValueConstructor,
154
+ getVaultConstructor: () => getVaultConstructor,
155
+ getVideoViewConstructor: () => getVideoViewConstructor,
156
+ getViewConstructorByViewType: () => getViewConstructorByViewType,
157
+ getViewRegistryConstructor: () => getViewRegistryConstructor,
158
+ getWebviewerHistoryViewConstructor: () => getWebviewerHistoryViewConstructor,
159
+ getWebviewerViewConstructor: () => getWebviewerViewConstructor,
160
+ getWorkspaceConstructor: () => getWorkspaceConstructor,
161
+ getWorkspaceContainerConstructor: () => getWorkspaceContainerConstructor,
162
+ getWorkspaceFloatingConstructor: () => getWorkspaceFloatingConstructor,
163
+ getWorkspaceItemConstructor: () => getWorkspaceItemConstructor,
164
+ getWorkspaceLeafConstructor: () => getWorkspaceLeafConstructor,
165
+ getWorkspaceLeafHistoryConstructor: () => getWorkspaceLeafHistoryConstructor,
166
+ getWorkspaceMobileDrawerConstructor: () => getWorkspaceMobileDrawerConstructor,
167
+ getWorkspaceParentConstructor: () => getWorkspaceParentConstructor,
168
+ getWorkspaceProtocolHandlerConstructor: () => getWorkspaceProtocolHandlerConstructor,
169
+ getWorkspaceRibbonConstructor: () => getWorkspaceRibbonConstructor,
170
+ getWorkspaceRootConstructor: () => getWorkspaceRootConstructor,
171
+ getWorkspaceSidedockConstructor: () => getWorkspaceSidedockConstructor,
172
+ getWorkspaceSplitConstructor: () => getWorkspaceSplitConstructor,
173
+ getWorkspaceTabsConstructor: () => getWorkspaceTabsConstructor,
174
+ getWorkspaceWindowConstructor: () => getWorkspaceWindowConstructor,
175
+ isEmbedCache: () => isEmbedCache,
176
+ isFrontmatterLinkCache: () => isFrontmatterLinkCache,
177
+ isLayoutReady: () => isLayoutReady,
178
+ isLinkCache: () => isLinkCache,
179
+ isReferenceCache: () => isReferenceCache,
180
+ loadMermaid: () => loadMermaid,
181
+ loadPdfJs: () => loadPdfJs,
182
+ loadPrism: () => loadPrism,
183
+ onLayoutReadyEx: () => onLayoutReadyEx,
184
+ parentFolderPath: () => parentFolderPath
185
+ });
186
+ module.exports = __toCommonJS(index_exports);
187
+
188
+ // src/obsidian/implementations/classes/CustomArrayDictImpl.ts
189
+ var CustomArrayDictImpl = class {
190
+ /**
191
+ * Internal map storing key-to-array mappings.
192
+ */
193
+ data = /* @__PURE__ */ new Map();
194
+ /**
195
+ * Add a value to the array associated with the given key.
196
+ *
197
+ * @param key - The key.
198
+ * @param value - The value to add.
199
+ */
200
+ add(key, value) {
201
+ let values = this.get(key);
202
+ if (!values) {
203
+ values = [];
204
+ this.data.set(key, values);
205
+ }
206
+ if (!values.includes(value)) {
207
+ values.push(value);
208
+ }
209
+ }
210
+ /**
211
+ * Remove all values for the given key.
212
+ *
213
+ * @param key - The key to clear.
214
+ */
215
+ clear(key) {
216
+ this.data.delete(key);
217
+ }
218
+ /**
219
+ * Remove all keys and their values.
220
+ */
221
+ clearAll() {
222
+ this.data.clear();
223
+ }
224
+ /**
225
+ * Check whether the array for the given key contains the specified value.
226
+ *
227
+ * @param key - The key.
228
+ * @param value - The value to check.
229
+ * @returns Whether the value exists.
230
+ */
231
+ contains(key, value) {
232
+ return !!this.get(key)?.contains(value);
233
+ }
234
+ /**
235
+ * Get the total number of values across all keys.
236
+ *
237
+ * @returns Total value count.
238
+ */
239
+ count() {
240
+ let ans = 0;
241
+ for (const key of this.keys()) {
242
+ ans += this.get(key)?.length ?? 0;
243
+ }
244
+ return ans;
245
+ }
246
+ /**
247
+ * Get the array of values for the given key, or `null` if not found.
248
+ *
249
+ * @param key - The key.
250
+ * @returns Array of values, or `null`.
251
+ */
252
+ get(key) {
253
+ return this.data.get(key) || null;
254
+ }
255
+ /**
256
+ * Get all keys in the dictionary.
257
+ *
258
+ * @returns Array of keys.
259
+ */
260
+ keys() {
261
+ return Array.from(this.data.keys());
262
+ }
263
+ /**
264
+ * Remove a specific value from the array associated with the given key.
265
+ *
266
+ * @param key - The key.
267
+ * @param value - The value to remove.
268
+ */
269
+ remove(key, value) {
270
+ const values = this.get(key);
271
+ if (!values) {
272
+ return;
273
+ }
274
+ values.remove(value);
275
+ if (values.length === 0) {
276
+ this.clear(key);
277
+ }
278
+ }
279
+ };
280
+
281
+ // src/obsidian/implementations/constants/FileExtension.ts
282
+ var FileExtension = {
283
+ _3gp: "3gp",
284
+ avif: "avif",
285
+ bmp: "bmp",
286
+ canvas: "canvas",
287
+ flac: "flac",
288
+ gif: "gif",
289
+ jpeg: "jpeg",
290
+ jpg: "jpg",
291
+ m4a: "m4a",
292
+ md: "md",
293
+ mkv: "mkv",
294
+ mov: "mov",
295
+ mp3: "mp3",
296
+ mp4: "mp4",
297
+ oga: "oga",
298
+ ogg: "ogg",
299
+ ogv: "ogv",
300
+ opus: "opus",
301
+ pdf: "pdf",
302
+ png: "png",
303
+ svg: "svg",
304
+ wav: "wav",
305
+ webm: "webm",
306
+ webp: "webp"
307
+ };
308
+
309
+ // src/obsidian/implementations/constants/InternalPluginName.ts
310
+ var InternalPluginName = {
311
+ /**
312
+ * Plugin name in UI: Audio recorder.
313
+ */
314
+ AudioRecorder: "audio-recorder",
315
+ /**
316
+ * Plugin name in UI: Backlinks.
317
+ */
318
+ Backlink: "backlink",
319
+ /**
320
+ * Plugin name in UI: Bases.
321
+ */
322
+ Bases: "bases",
323
+ /**
324
+ * Plugin name in UI: Bookmarks.
325
+ */
326
+ Bookmarks: "bookmarks",
327
+ /**
328
+ * Plugin name in UI: Canvas.
329
+ */
330
+ Canvas: "canvas",
331
+ /**
332
+ * Plugin name in UI: Command palette.
333
+ */
334
+ CommandPalette: "command-palette",
335
+ /**
336
+ * Plugin name in UI: Daily notes.
337
+ */
338
+ DailyNotes: "daily-notes",
339
+ /**
340
+ * Plugin name in UI: (hidden).
341
+ */
342
+ EditorStatus: "editor-status",
343
+ /**
344
+ * Plugin name in UI: Files.
345
+ */
346
+ FileExplorer: "file-explorer",
347
+ /**
348
+ * Plugin name in UI: File recovery.
349
+ */
350
+ FileRecovery: "file-recovery",
351
+ /**
352
+ * Plugin name in UI: Footnotes.
353
+ */
354
+ Footnotes: "footnotes",
355
+ /**
356
+ * Plugin name in UI: Search.
357
+ */
358
+ GlobalSearch: "global-search",
359
+ /**
360
+ * Plugin name in UI: Graph view.
361
+ */
362
+ Graph: "graph",
363
+ /**
364
+ * Plugin name in UI: Format converter.
365
+ */
366
+ MarkdownImporter: "markdown-importer",
367
+ /**
368
+ * Plugin name in UI: Note composer.
369
+ */
370
+ NoteComposer: "note-composer",
371
+ /**
372
+ * Plugin name in UI: Outgoing links.
373
+ */
374
+ OutgoingLink: "outgoing-link",
375
+ /**
376
+ * Plugin name in UI: Outline.
377
+ */
378
+ Outline: "outline",
379
+ /**
380
+ * Plugin name in UI: Page preview.
381
+ */
382
+ PagePreview: "page-preview",
383
+ /**
384
+ * Plugin name in UI: Properties view.
385
+ */
386
+ Properties: "properties",
387
+ /**
388
+ * Plugin name in UI: Publish.
389
+ */
390
+ Publish: "publish",
391
+ /**
392
+ * Plugin name in UI: Random note.
393
+ */
394
+ RandomNote: "random-note",
395
+ /**
396
+ * Plugin name in UI: Slash commands.
397
+ */
398
+ SlashCommand: "slash-command",
399
+ /**
400
+ * Plugin name in UI: Slides.
401
+ */
402
+ Slides: "slides",
403
+ /**
404
+ * Plugin name in UI: Quick Switcher.
405
+ */
406
+ Switcher: "switcher",
407
+ /**
408
+ * Plugin name in UI: Sync.
409
+ */
410
+ Sync: "sync",
411
+ /**
412
+ * Plugin name in UI: Tags view.
413
+ */
414
+ TagPane: "tag-pane",
415
+ /**
416
+ * Plugin name in UI: Templates.
417
+ */
418
+ Templates: "templates",
419
+ /**
420
+ * Plugin name in UI: Web viewer.
421
+ */
422
+ Webviewer: "webviewer",
423
+ /**
424
+ * Plugin name in UI: Word count.
425
+ */
426
+ WordCount: "word-count",
427
+ /**
428
+ * Plugin name in UI: Workspaces.
429
+ */
430
+ Workspaces: "workspaces",
431
+ /**
432
+ * Plugin name in UI: Unique note creator.
433
+ */
434
+ ZkPrefixer: "zk-prefixer"
435
+ };
436
+
437
+ // src/obsidian/implementations/constants/ViewType.ts
438
+ var ViewType = {
439
+ AllProperties: "all-properties",
440
+ Audio: "audio",
441
+ Backlink: InternalPluginName.Backlink,
442
+ Bases: InternalPluginName.Bases,
443
+ Bookmarks: InternalPluginName.Bookmarks,
444
+ Canvas: InternalPluginName.Canvas,
445
+ Empty: "empty",
446
+ FileExplorer: InternalPluginName.FileExplorer,
447
+ FileProperties: "file-properties",
448
+ Graph: InternalPluginName.Graph,
449
+ Image: "image",
450
+ LocalGraph: "localgraph",
451
+ Markdown: "markdown",
452
+ OutgoingLink: InternalPluginName.OutgoingLink,
453
+ Outline: InternalPluginName.Outline,
454
+ Pdf: "pdf",
455
+ ReleaseNotes: "release-notes",
456
+ Search: "search",
457
+ Sync: "sync",
458
+ Tag: "tag",
459
+ Video: "video",
460
+ Webviewer: "webviewer",
461
+ WebviewerHistory: "webviewer-history"
462
+ };
463
+
464
+ // src/obsidian/implementations/constructors/augmentations/bases/getBasesEntryConstructor.ts
465
+ var import_obsidian = require("obsidian");
466
+ function getBasesEntryConstructor() {
467
+ return import_obsidian.BasesEntry;
468
+ }
469
+
470
+ // src/obsidian/implementations/constructors/augmentations/bases/getBasesEntryGroupConstructor.ts
471
+ var import_obsidian2 = require("obsidian");
472
+ function getBasesEntryGroupConstructor() {
473
+ return import_obsidian2.BasesEntryGroup;
474
+ }
475
+
476
+ // src/obsidian/implementations/constructors/augmentations/bases/getBasesQueryResultConstructor.ts
477
+ var import_obsidian3 = require("obsidian");
478
+ function getBasesQueryResultConstructor() {
479
+ return import_obsidian3.BasesQueryResult;
480
+ }
481
+
482
+ // src/obsidian/implementations/constructors/augmentations/bases/getBasesViewConfigConstructor.ts
483
+ var import_obsidian4 = require("obsidian");
484
+ function getBasesViewConfigConstructor() {
485
+ return import_obsidian4.BasesViewConfig;
486
+ }
487
+
488
+ // src/obsidian/implementations/constructors/augmentations/bases/getQueryControllerConstructor.ts
489
+ var import_obsidian5 = require("obsidian");
490
+ function getQueryControllerConstructor() {
491
+ return import_obsidian5.QueryController;
492
+ }
493
+
494
+ // src/obsidian/implementations/constructors/augmentations/getAppConstructor.ts
495
+ var import_obsidian6 = require("obsidian");
496
+ function getAppConstructor() {
497
+ return import_obsidian6.App;
498
+ }
499
+
500
+ // src/obsidian/implementations/constructors/augmentations/getCapacitorAdapterConstructor.ts
501
+ var import_obsidian7 = require("obsidian");
502
+ function getCapacitorAdapterConstructor() {
503
+ return import_obsidian7.CapacitorAdapter;
504
+ }
505
+
506
+ // src/obsidian/implementations/constructors/augmentations/getConfirmationModalConstructor.ts
507
+ var import_obsidian8 = require("obsidian");
508
+ function getConfirmationModalConstructor() {
509
+ return import_obsidian8.ConfirmationModal;
510
+ }
511
+
512
+ // src/obsidian/implementations/constructors/augmentations/getEditorConstructor.ts
513
+ var import_obsidian9 = require("obsidian");
514
+ function getEditorConstructor() {
515
+ return import_obsidian9.Editor;
516
+ }
517
+
518
+ // src/obsidian/implementations/constructors/augmentations/getEventsConstructor.ts
519
+ var import_obsidian10 = require("obsidian");
520
+ function getEventsConstructor() {
521
+ return import_obsidian10.Events;
522
+ }
523
+
524
+ // src/obsidian/implementations/constructors/augmentations/getFileManagerConstructor.ts
525
+ var import_obsidian11 = require("obsidian");
526
+ function getFileManagerConstructor() {
527
+ return import_obsidian11.FileManager;
528
+ }
529
+
530
+ // src/obsidian/implementations/constructors/augmentations/getFileSystemAdapterConstructor.ts
531
+ var import_obsidian12 = require("obsidian");
532
+ function getFileSystemAdapterConstructor() {
533
+ return import_obsidian12.FileSystemAdapter;
534
+ }
535
+
536
+ // src/obsidian/implementations/constructors/augmentations/getFuzzySuggestModalConstructor.ts
537
+ var import_obsidian13 = require("obsidian");
538
+ function getFuzzySuggestModalConstructor() {
539
+ return import_obsidian13.FuzzySuggestModal;
540
+ }
541
+
542
+ // src/obsidian/implementations/constructors/augmentations/getHoverPopoverConstructor.ts
543
+ var import_obsidian14 = require("obsidian");
544
+ function getHoverPopoverConstructor() {
545
+ return import_obsidian14.HoverPopover;
546
+ }
547
+
548
+ // src/obsidian/implementations/constructors/augmentations/getKeymapConstructor.ts
549
+ var import_obsidian15 = require("obsidian");
550
+ function getKeymapConstructor() {
551
+ return import_obsidian15.Keymap;
552
+ }
553
+
554
+ // src/obsidian/implementations/constructors/augmentations/getMarkdownPreviewRendererConstructor.ts
555
+ var import_obsidian16 = require("obsidian");
556
+ function getMarkdownPreviewRendererConstructor() {
557
+ return import_obsidian16.MarkdownPreviewRenderer;
558
+ }
559
+
560
+ // src/obsidian/implementations/constructors/augmentations/getMarkdownPreviewViewConstructor.ts
561
+ var import_obsidian17 = require("obsidian");
562
+ function getMarkdownPreviewViewConstructor() {
563
+ return import_obsidian17.MarkdownPreviewView;
564
+ }
565
+
566
+ // src/obsidian/implementations/constructors/augmentations/getMarkdownRenderChildConstructor.ts
567
+ var import_obsidian18 = require("obsidian");
568
+ function getMarkdownRenderChildConstructor() {
569
+ return import_obsidian18.MarkdownRenderChild;
570
+ }
571
+
572
+ // src/obsidian/implementations/constructors/augmentations/getMarkdownRendererConstructor.ts
573
+ var import_obsidian19 = require("obsidian");
574
+ function getMarkdownRendererConstructor() {
575
+ return import_obsidian19.MarkdownRenderer;
576
+ }
577
+
578
+ // src/obsidian/implementations/constructors/augmentations/getMenuConstructor.ts
579
+ var import_obsidian20 = require("obsidian");
580
+ function getMenuConstructor() {
581
+ return import_obsidian20.Menu;
582
+ }
583
+
584
+ // src/obsidian/implementations/constructors/augmentations/getMenuItemConstructor.ts
585
+ var import_obsidian21 = require("obsidian");
586
+ function getMenuItemConstructor() {
587
+ return import_obsidian21.MenuItem;
588
+ }
589
+
590
+ // src/obsidian/implementations/constructors/augmentations/getMenuSeparatorConstructor.ts
591
+ var import_obsidian22 = require("obsidian");
592
+ function getMenuSeparatorConstructor() {
593
+ return import_obsidian22.MenuSeparator;
594
+ }
595
+
596
+ // src/obsidian/implementations/constructors/augmentations/getMetadataCacheConstructor.ts
597
+ var import_obsidian23 = require("obsidian");
598
+ function getMetadataCacheConstructor() {
599
+ return import_obsidian23.MetadataCache;
600
+ }
601
+
602
+ // src/obsidian/implementations/constructors/augmentations/getModalConstructor.ts
603
+ var import_obsidian24 = require("obsidian");
604
+ function getModalConstructor() {
605
+ return import_obsidian24.Modal;
606
+ }
607
+
608
+ // src/obsidian/implementations/constructors/augmentations/getNoticeConstructor.ts
609
+ var import_obsidian25 = require("obsidian");
610
+ function getNoticeConstructor() {
611
+ return import_obsidian25.Notice;
612
+ }
613
+
614
+ // src/obsidian/implementations/constructors/augmentations/getRenderContextConstructor.ts
615
+ var import_obsidian26 = require("obsidian");
616
+ function getRenderContextConstructor() {
617
+ return import_obsidian26.RenderContext;
618
+ }
619
+
620
+ // src/obsidian/implementations/constructors/augmentations/getScopeConstructor.ts
621
+ var import_obsidian27 = require("obsidian");
622
+ function getScopeConstructor() {
623
+ return import_obsidian27.Scope;
624
+ }
625
+
626
+ // src/obsidian/implementations/constructors/augmentations/getSecretStorageConstructor.ts
627
+ var import_obsidian28 = require("obsidian");
628
+ function getSecretStorageConstructor() {
629
+ return import_obsidian28.SecretStorage;
630
+ }
631
+
632
+ // src/obsidian/implementations/constructors/augmentations/getSettingConstructor.ts
633
+ var import_obsidian29 = require("obsidian");
634
+ function getSettingConstructor() {
635
+ return import_obsidian29.Setting;
636
+ }
637
+
638
+ // src/obsidian/implementations/constructors/augmentations/getSettingGroupConstructor.ts
639
+ var import_obsidian30 = require("obsidian");
640
+ function getSettingGroupConstructor() {
641
+ return import_obsidian30.SettingGroup;
642
+ }
643
+
644
+ // src/obsidian/implementations/constructors/augmentations/getSettingPageConstructor.ts
645
+ var import_obsidian31 = require("obsidian");
646
+ function getSettingPageConstructor() {
647
+ return import_obsidian31.SettingPage;
648
+ }
649
+
650
+ // src/obsidian/implementations/constructors/augmentations/getSettingTabConstructor.ts
651
+ var import_obsidian32 = require("obsidian");
652
+ function getSettingTabConstructor() {
653
+ return import_obsidian32.SettingTab;
654
+ }
655
+
656
+ // src/obsidian/implementations/constructors/augmentations/getTAbstractFileConstructor.ts
657
+ var import_obsidian33 = require("obsidian");
658
+ function getTAbstractFileConstructor() {
659
+ return import_obsidian33.TAbstractFile;
660
+ }
661
+
662
+ // src/obsidian/implementations/constructors/augmentations/getTasksConstructor.ts
663
+ var import_obsidian34 = require("obsidian");
664
+ function getTasksConstructor() {
665
+ return import_obsidian34.Tasks;
666
+ }
667
+
668
+ // src/obsidian/implementations/constructors/augmentations/getTFileConstructor.ts
669
+ var import_obsidian35 = require("obsidian");
670
+ function getTFileConstructor() {
671
+ return import_obsidian35.TFile;
672
+ }
673
+
674
+ // src/obsidian/implementations/constructors/augmentations/getTFolderConstructor.ts
675
+ var import_obsidian36 = require("obsidian");
676
+ function getTFolderConstructor() {
677
+ return import_obsidian36.TFolder;
678
+ }
679
+
680
+ // src/obsidian/implementations/constructors/augmentations/getVaultConstructor.ts
681
+ var import_obsidian37 = require("obsidian");
682
+ function getVaultConstructor() {
683
+ return import_obsidian37.Vault;
684
+ }
685
+
686
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceConstructor.ts
687
+ var import_obsidian38 = require("obsidian");
688
+ function getWorkspaceConstructor() {
689
+ return import_obsidian38.Workspace;
690
+ }
691
+
692
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceContainerConstructor.ts
693
+ var import_obsidian39 = require("obsidian");
694
+ function getWorkspaceContainerConstructor() {
695
+ return import_obsidian39.WorkspaceContainer;
696
+ }
697
+
698
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceFloatingConstructor.ts
699
+ var import_obsidian40 = require("obsidian");
700
+ function getWorkspaceFloatingConstructor() {
701
+ return import_obsidian40.WorkspaceFloating;
702
+ }
703
+
704
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceItemConstructor.ts
705
+ var import_obsidian41 = require("obsidian");
706
+ function getWorkspaceItemConstructor() {
707
+ return import_obsidian41.WorkspaceItem;
708
+ }
709
+
710
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceLeafConstructor.ts
711
+ var import_obsidian42 = require("obsidian");
712
+ function getWorkspaceLeafConstructor() {
713
+ return import_obsidian42.WorkspaceLeaf;
714
+ }
715
+
716
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceMobileDrawerConstructor.ts
717
+ var import_obsidian43 = require("obsidian");
718
+ function getWorkspaceMobileDrawerConstructor() {
719
+ return import_obsidian43.WorkspaceMobileDrawer;
720
+ }
721
+
722
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceParentConstructor.ts
723
+ var import_obsidian44 = require("obsidian");
724
+ function getWorkspaceParentConstructor() {
725
+ return import_obsidian44.WorkspaceParent;
726
+ }
727
+
728
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceRibbonConstructor.ts
729
+ var import_obsidian45 = require("obsidian");
730
+ function getWorkspaceRibbonConstructor() {
731
+ return import_obsidian45.WorkspaceRibbon;
732
+ }
733
+
734
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceRootConstructor.ts
735
+ var import_obsidian46 = require("obsidian");
736
+ function getWorkspaceRootConstructor() {
737
+ return import_obsidian46.WorkspaceRoot;
738
+ }
739
+
740
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceSidedockConstructor.ts
741
+ var import_obsidian47 = require("obsidian");
742
+ function getWorkspaceSidedockConstructor() {
743
+ return import_obsidian47.WorkspaceSidedock;
744
+ }
745
+
746
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceSplitConstructor.ts
747
+ var import_obsidian48 = require("obsidian");
748
+ function getWorkspaceSplitConstructor() {
749
+ return import_obsidian48.WorkspaceSplit;
750
+ }
751
+
752
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceTabsConstructor.ts
753
+ var import_obsidian49 = require("obsidian");
754
+ function getWorkspaceTabsConstructor() {
755
+ return import_obsidian49.WorkspaceTabs;
756
+ }
757
+
758
+ // src/obsidian/implementations/constructors/augmentations/getWorkspaceWindowConstructor.ts
759
+ var import_obsidian50 = require("obsidian");
760
+ function getWorkspaceWindowConstructor() {
761
+ return import_obsidian50.WorkspaceWindow;
762
+ }
763
+
764
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getAbstractTextComponentConstructor.ts
765
+ var import_obsidian51 = require("obsidian");
766
+ function getAbstractTextComponentConstructor() {
767
+ return import_obsidian51.AbstractTextComponent;
768
+ }
769
+
770
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getBaseComponentConstructor.ts
771
+ var import_obsidian52 = require("obsidian");
772
+ function getBaseComponentConstructor() {
773
+ return import_obsidian52.BaseComponent;
774
+ }
775
+
776
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getButtonComponentConstructor.ts
777
+ var import_obsidian53 = require("obsidian");
778
+ function getButtonComponentConstructor() {
779
+ return import_obsidian53.ButtonComponent;
780
+ }
781
+
782
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getColorComponentConstructor.ts
783
+ var import_obsidian54 = require("obsidian");
784
+ function getColorComponentConstructor() {
785
+ return import_obsidian54.ColorComponent;
786
+ }
787
+
788
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getComponentConstructor.ts
789
+ var import_obsidian55 = require("obsidian");
790
+ function getComponentConstructor() {
791
+ return import_obsidian55.Component;
792
+ }
793
+
794
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getConfirmationButtonConstructor.ts
795
+ var import_obsidian56 = require("obsidian");
796
+ function getConfirmationButtonConstructor() {
797
+ return import_obsidian56.ConfirmationButton;
798
+ }
799
+
800
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getDisplayValueComponentConstructor.ts
801
+ var import_obsidian57 = require("obsidian");
802
+ function getDisplayValueComponentConstructor() {
803
+ return import_obsidian57.DisplayValueComponent;
804
+ }
805
+
806
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getDropdownComponentConstructor.ts
807
+ var import_obsidian58 = require("obsidian");
808
+ function getDropdownComponentConstructor() {
809
+ return import_obsidian58.DropdownComponent;
810
+ }
811
+
812
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getExtraButtonComponentConstructor.ts
813
+ var import_obsidian59 = require("obsidian");
814
+ function getExtraButtonComponentConstructor() {
815
+ return import_obsidian59.ExtraButtonComponent;
816
+ }
817
+
818
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getMomentFormatComponentConstructor.ts
819
+ var import_obsidian60 = require("obsidian");
820
+ function getMomentFormatComponentConstructor() {
821
+ return import_obsidian60.MomentFormatComponent;
822
+ }
823
+
824
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getProgressBarComponentConstructor.ts
825
+ var import_obsidian61 = require("obsidian");
826
+ function getProgressBarComponentConstructor() {
827
+ return import_obsidian61.ProgressBarComponent;
828
+ }
829
+
830
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getSearchComponentConstructor.ts
831
+ var import_obsidian62 = require("obsidian");
832
+ function getSearchComponentConstructor() {
833
+ return import_obsidian62.SearchComponent;
834
+ }
835
+
836
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getSecretComponentConstructor.ts
837
+ var import_obsidian63 = require("obsidian");
838
+ function getSecretComponentConstructor() {
839
+ return import_obsidian63.SecretComponent;
840
+ }
841
+
842
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getSliderComponentConstructor.ts
843
+ var import_obsidian64 = require("obsidian");
844
+ function getSliderComponentConstructor() {
845
+ return import_obsidian64.SliderComponent;
846
+ }
847
+
848
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getTextAreaComponentConstructor.ts
849
+ var import_obsidian65 = require("obsidian");
850
+ function getTextAreaComponentConstructor() {
851
+ return import_obsidian65.TextAreaComponent;
852
+ }
853
+
854
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getTextComponentConstructor.ts
855
+ var import_obsidian66 = require("obsidian");
856
+ function getTextComponentConstructor() {
857
+ return import_obsidian66.TextComponent;
858
+ }
859
+
860
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getToggleComponentConstructor.ts
861
+ var import_obsidian67 = require("obsidian");
862
+ function getToggleComponentConstructor() {
863
+ return import_obsidian67.ToggleComponent;
864
+ }
865
+
866
+ // src/obsidian/implementations/constructors/augmentations/settings/setting-components/getValueComponentConstructor.ts
867
+ var import_obsidian68 = require("obsidian");
868
+ function getValueComponentConstructor() {
869
+ return import_obsidian68.ValueComponent;
870
+ }
871
+
872
+ // src/obsidian/implementations/constructors/augmentations/values/getBooleanValueConstructor.ts
873
+ var import_obsidian69 = require("obsidian");
874
+ function getBooleanValueConstructor() {
875
+ return import_obsidian69.BooleanValue;
876
+ }
877
+
878
+ // src/obsidian/implementations/constructors/augmentations/values/getDateValueConstructor.ts
879
+ var import_obsidian70 = require("obsidian");
880
+ function getDateValueConstructor() {
881
+ return import_obsidian70.DateValue;
882
+ }
883
+
884
+ // src/obsidian/implementations/constructors/augmentations/values/getDurationValueConstructor.ts
885
+ var import_obsidian71 = require("obsidian");
886
+ function getDurationValueConstructor() {
887
+ return import_obsidian71.DurationValue;
888
+ }
889
+
890
+ // src/obsidian/implementations/constructors/augmentations/values/getFileValueConstructor.ts
891
+ var import_obsidian72 = require("obsidian");
892
+ function getFileValueConstructor() {
893
+ return import_obsidian72.FileValue;
894
+ }
895
+
896
+ // src/obsidian/implementations/constructors/augmentations/values/getHTMLValueConstructor.ts
897
+ var import_obsidian73 = require("obsidian");
898
+ function getHTMLValueConstructor() {
899
+ return import_obsidian73.HTMLValue;
900
+ }
901
+
902
+ // src/obsidian/implementations/constructors/augmentations/values/getIconValueConstructor.ts
903
+ var import_obsidian74 = require("obsidian");
904
+ function getIconValueConstructor() {
905
+ return import_obsidian74.IconValue;
906
+ }
907
+
908
+ // src/obsidian/implementations/constructors/augmentations/values/getImageValueConstructor.ts
909
+ var import_obsidian75 = require("obsidian");
910
+ function getImageValueConstructor() {
911
+ return import_obsidian75.ImageValue;
912
+ }
913
+
914
+ // src/obsidian/implementations/constructors/augmentations/values/getLinkValueConstructor.ts
915
+ var import_obsidian76 = require("obsidian");
916
+ function getLinkValueConstructor() {
917
+ return import_obsidian76.LinkValue;
918
+ }
919
+
920
+ // src/obsidian/implementations/constructors/augmentations/values/getListValueConstructor.ts
921
+ var import_obsidian77 = require("obsidian");
922
+ function getListValueConstructor() {
923
+ return import_obsidian77.ListValue;
924
+ }
925
+
926
+ // src/obsidian/implementations/constructors/augmentations/values/getNotNullValueConstructor.ts
927
+ var import_obsidian78 = require("obsidian");
928
+ function getNotNullValueConstructor() {
929
+ return import_obsidian78.NotNullValue;
930
+ }
931
+
932
+ // src/obsidian/implementations/constructors/augmentations/values/getNullValueConstructor.ts
933
+ var import_obsidian79 = require("obsidian");
934
+ function getNullValueConstructor() {
935
+ return import_obsidian79.NullValue;
936
+ }
937
+
938
+ // src/obsidian/implementations/constructors/augmentations/values/getNumberValueConstructor.ts
939
+ var import_obsidian80 = require("obsidian");
940
+ function getNumberValueConstructor() {
941
+ return import_obsidian80.NumberValue;
942
+ }
943
+
944
+ // src/obsidian/implementations/constructors/augmentations/values/getObjectValueConstructor.ts
945
+ var import_obsidian81 = require("obsidian");
946
+ function getObjectValueConstructor() {
947
+ return import_obsidian81.ObjectValue;
948
+ }
949
+
950
+ // src/obsidian/implementations/constructors/augmentations/values/getRegExpValueConstructor.ts
951
+ var import_obsidian82 = require("obsidian");
952
+ function getRegExpValueConstructor() {
953
+ return import_obsidian82.RegExpValue;
954
+ }
955
+
956
+ // src/obsidian/implementations/constructors/augmentations/values/getRelativeDateValueConstructor.ts
957
+ var import_obsidian83 = require("obsidian");
958
+ function getRelativeDateValueConstructor() {
959
+ return import_obsidian83.RelativeDateValue;
960
+ }
961
+
962
+ // src/obsidian/implementations/constructors/augmentations/values/getStringValueConstructor.ts
963
+ var import_obsidian84 = require("obsidian");
964
+ function getStringValueConstructor() {
965
+ return import_obsidian84.StringValue;
966
+ }
967
+
968
+ // src/obsidian/implementations/constructors/augmentations/values/getTagValueConstructor.ts
969
+ var import_obsidian85 = require("obsidian");
970
+ function getTagValueConstructor() {
971
+ return import_obsidian85.TagValue;
972
+ }
973
+
974
+ // src/obsidian/implementations/constructors/augmentations/values/getUrlValueConstructor.ts
975
+ var import_obsidian86 = require("obsidian");
976
+ function getUrlValueConstructor() {
977
+ return import_obsidian86.UrlValue;
978
+ }
979
+
980
+ // src/obsidian/implementations/constructors/augmentations/values/getValueConstructor.ts
981
+ var import_obsidian87 = require("obsidian");
982
+ function getValueConstructor() {
983
+ return import_obsidian87.Value;
984
+ }
985
+
986
+ // src/obsidian/implementations/constructors/augmentations/views/getEditableFileViewConstructor.ts
987
+ var import_obsidian88 = require("obsidian");
988
+ function getEditableFileViewConstructor() {
989
+ return import_obsidian88.EditableFileView;
990
+ }
991
+
992
+ // src/obsidian/implementations/constructors/augmentations/views/getMarkdownViewConstructor.ts
993
+ var import_obsidian89 = require("obsidian");
994
+ function getMarkdownViewConstructor() {
995
+ return import_obsidian89.MarkdownView;
996
+ }
997
+
998
+ // src/obsidian/implementations/constructors/internals/getAppMenuBarManagerConstructor.ts
999
+ function getAppMenuBarManagerConstructor(app) {
1000
+ return app.appMenuBarManager.constructor;
1001
+ }
1002
+
1003
+ // src/obsidian/implementations/constructors/internals/getAppSettingConstructor.ts
1004
+ function getAppSettingConstructor(app) {
1005
+ return app.setting.constructor;
1006
+ }
1007
+
1008
+ // src/obsidian/implementations/constructors/internals/getCliConstructor.ts
1009
+ function getCliConstructor(app) {
1010
+ return app.cli.constructor;
1011
+ }
1012
+
1013
+ // src/obsidian/implementations/constructors/internals/getCommandsConstructor.ts
1014
+ function getCommandsConstructor(app) {
1015
+ return app.commands.constructor;
1016
+ }
1017
+
1018
+ // src/obsidian/implementations/constructors/internals/getCustomCSSConstructor.ts
1019
+ function getCustomCSSConstructor(app) {
1020
+ return app.customCss.constructor;
1021
+ }
1022
+
1023
+ // src/obsidian/implementations/constructors/internals/getDragManagerConstructor.ts
1024
+ function getDragManagerConstructor(app) {
1025
+ return app.dragManager.constructor;
1026
+ }
1027
+
1028
+ // src/obsidian/implementations/constructors/internals/getEditorSuggestsConstructor.ts
1029
+ function getEditorSuggestsConstructor(app) {
1030
+ return app.workspace.editorSuggest.constructor;
1031
+ }
1032
+
1033
+ // src/obsidian/implementations/constructors/internals/getEmbedRegistryConstructor.ts
1034
+ function getEmbedRegistryConstructor(app) {
1035
+ return app.embedRegistry.constructor;
1036
+ }
1037
+
1038
+ // src/obsidian/implementations/constructors/internals/getFoldManagerConstructor.ts
1039
+ function getFoldManagerConstructor(app) {
1040
+ return app.foldManager.constructor;
1041
+ }
1042
+
1043
+ // src/obsidian/implementations/constructors/internals/getFrameDomConstructor.ts
1044
+ function getFrameDomConstructor() {
1045
+ return window.frameDom.constructor;
1046
+ }
1047
+
1048
+ // src/obsidian/implementations/constructors/internals/getHotkeyManagerConstructor.ts
1049
+ function getHotkeyManagerConstructor(app) {
1050
+ return app.hotkeyManager.constructor;
1051
+ }
1052
+
1053
+ // src/obsidian/implementations/constructors/internals/getMetadataTypeManagerConstructor.ts
1054
+ function getMetadataTypeManagerConstructor(app) {
1055
+ return app.metadataTypeManager.constructor;
1056
+ }
1057
+
1058
+ // src/obsidian/implementations/constructors/internals/getObsidianDOMConstructor.ts
1059
+ function getObsidianDOMConstructor(app) {
1060
+ return app.dom.constructor;
1061
+ }
1062
+
1063
+ // src/obsidian/implementations/constructors/internals/getObsidianSearchQueryConstructor.ts
1064
+ function getObsidianSearchQueryConstructor(app) {
1065
+ const leaf = app.workspace.createLeafInTabGroup();
1066
+ try {
1067
+ const viewCreator = app.viewRegistry.getViewCreatorByType(ViewType.FileExplorer);
1068
+ if (!viewCreator) {
1069
+ throw new Error("View creator not found");
1070
+ }
1071
+ const view = viewCreator(leaf);
1072
+ view.onSearchChanged("probe");
1073
+ if (!view.searchQuery) {
1074
+ throw new Error("The probe query did not compile.");
1075
+ }
1076
+ return view.searchQuery.constructor;
1077
+ } finally {
1078
+ leaf.detach();
1079
+ }
1080
+ }
1081
+
1082
+ // src/obsidian/implementations/constructors/internals/getPluginsConstructor.ts
1083
+ function getPluginsConstructor(app) {
1084
+ return app.plugins.constructor;
1085
+ }
1086
+
1087
+ // src/obsidian/implementations/constructors/internals/getRecentFileTrackerConstructor.ts
1088
+ function getRecentFileTrackerConstructor(app) {
1089
+ return app.workspace.recentFileTracker.constructor;
1090
+ }
1091
+
1092
+ // src/obsidian/implementations/constructors/internals/getShareReceiverConstructor.ts
1093
+ function getShareReceiverConstructor(app) {
1094
+ return app.shareReceiver.constructor;
1095
+ }
1096
+
1097
+ // src/obsidian/implementations/constructors/internals/getStatusBarConstructor.ts
1098
+ function getStatusBarConstructor(app) {
1099
+ return app.statusBar.constructor;
1100
+ }
1101
+
1102
+ // src/obsidian/implementations/constructors/internals/getViewRegistryConstructor.ts
1103
+ function getViewRegistryConstructor(app) {
1104
+ return app.viewRegistry.constructor;
1105
+ }
1106
+
1107
+ // src/obsidian/implementations/constructors/internals/getWorkspaceLeafHistoryConstructor.ts
1108
+ function getWorkspaceLeafHistoryConstructor(app) {
1109
+ const leaf = app.workspace.getMostRecentLeaf();
1110
+ if (!leaf) {
1111
+ throw new Error("No workspace leaf available to extract WorkspaceLeafHistory constructor");
1112
+ }
1113
+ return leaf.history.constructor;
1114
+ }
1115
+
1116
+ // src/obsidian/implementations/constructors/internals/internal-plugins/bases/getBasesContextConstructor.ts
1117
+ function getBasesContextConstructor(app) {
1118
+ const basesPlugin = app.internalPlugins.getPluginById(InternalPluginName.Bases);
1119
+ if (!basesPlugin) {
1120
+ throw new Error(`The ${InternalPluginName.Bases} plugin is not loaded.`);
1121
+ }
1122
+ const queryControllerConstructor = getQueryControllerConstructor();
1123
+ const queryController = new queryControllerConstructor(app, basesPlugin.instance, createDiv());
1124
+ queryController.query = {};
1125
+ const basesContext = queryController.buildBasesContext();
1126
+ return basesContext.constructor;
1127
+ }
1128
+
1129
+ // src/obsidian/implementations/constructors/internals/internal-plugins/bases/getBasesQueryConstructor.ts
1130
+ var import_obsidian91 = require("obsidian");
1131
+
1132
+ // src/obsidian/implementations/functions/getBasesControllerFromRender.ts
1133
+ var import_obsidian90 = require("obsidian");
1134
+ async function getBasesControllerFromRender(app, content, sourcePath, component) {
1135
+ const containerEl = createDiv();
1136
+ containerEl.style.position = "absolute";
1137
+ containerEl.style.left = "-9999px";
1138
+ containerEl.style.width = "600px";
1139
+ document.body.appendChild(containerEl);
1140
+ component.register(() => {
1141
+ containerEl.remove();
1142
+ });
1143
+ await import_obsidian90.MarkdownRenderer.render(app, `\`\`\`base
1144
+ ${content}
1145
+ \`\`\`
1146
+ `, containerEl, sourcePath, component);
1147
+ const queue = [component];
1148
+ const seen = /* @__PURE__ */ new Set();
1149
+ while (queue.length > 0) {
1150
+ const node = queue.shift();
1151
+ if (!node || seen.has(node)) {
1152
+ continue;
1153
+ }
1154
+ seen.add(node);
1155
+ if (node.results instanceof Map && "query" in node) {
1156
+ return node;
1157
+ }
1158
+ for (const child of node._children ?? []) {
1159
+ queue.push(child);
1160
+ }
1161
+ }
1162
+ throw new Error("Could not locate the QueryController in the rendered component tree.");
1163
+ }
1164
+
1165
+ // src/obsidian/implementations/constructors/internals/internal-plugins/bases/getBasesQueryConstructor.ts
1166
+ async function getBasesQueryConstructor(app) {
1167
+ const component = new import_obsidian91.Component();
1168
+ try {
1169
+ const controller = await getBasesControllerFromRender(app, "views: []\n", "getBasesQueryConstructor.base", component);
1170
+ const query = controller.query;
1171
+ if (!query) {
1172
+ throw new Error("The rendered base did not produce a query.");
1173
+ }
1174
+ return query.constructor;
1175
+ } finally {
1176
+ component.unload();
1177
+ }
1178
+ }
1179
+
1180
+ // src/obsidian/implementations/constructors/internals/internal-plugins/getInternalPluginConstructor.ts
1181
+ function getInternalPluginConstructor(app) {
1182
+ const anyPlugin = Object.values(app.internalPlugins.plugins)[0];
1183
+ if (!anyPlugin) {
1184
+ throw new Error("No internal plugin found");
1185
+ }
1186
+ return anyPlugin.constructor;
1187
+ }
1188
+
1189
+ // src/obsidian/implementations/constructors/internals/internal-plugins/getInternalPluginsConstructor.ts
1190
+ function getInternalPluginsConstructor(app) {
1191
+ return app.internalPlugins.constructor;
1192
+ }
1193
+
1194
+ // src/obsidian/implementations/constructors/internals/views/getViewConstructorByViewType.ts
1195
+ function getViewConstructorByViewType(app, viewType) {
1196
+ const leaf = app.workspace.createLeafInTabGroup();
1197
+ try {
1198
+ const viewCreator = app.viewRegistry.getViewCreatorByType(viewType);
1199
+ if (!viewCreator) {
1200
+ throw new Error("View creator not found");
1201
+ }
1202
+ const view = viewCreator(leaf);
1203
+ return view.constructor;
1204
+ } finally {
1205
+ leaf.detach();
1206
+ }
1207
+ }
1208
+
1209
+ // src/obsidian/implementations/constructors/internals/views/getAllPropertiesViewConstructor.ts
1210
+ function getAllPropertiesViewConstructor(app) {
1211
+ return getViewConstructorByViewType(app, ViewType.AllProperties);
1212
+ }
1213
+
1214
+ // src/obsidian/implementations/constructors/internals/views/getAudioViewConstructor.ts
1215
+ function getAudioViewConstructor(app) {
1216
+ return getViewConstructorByViewType(app, ViewType.Audio);
1217
+ }
1218
+
1219
+ // src/obsidian/implementations/constructors/internals/views/getBacklinkViewConstructor.ts
1220
+ function getBacklinkViewConstructor(app) {
1221
+ return getViewConstructorByViewType(app, ViewType.Backlink);
1222
+ }
1223
+
1224
+ // src/obsidian/implementations/constructors/internals/views/getBasesViewConstructor.ts
1225
+ function getBasesViewConstructor(app) {
1226
+ return getViewConstructorByViewType(app, ViewType.Bases);
1227
+ }
1228
+
1229
+ // src/obsidian/implementations/constructors/internals/views/getBookmarksViewConstructor.ts
1230
+ function getBookmarksViewConstructor(app) {
1231
+ return getViewConstructorByViewType(app, ViewType.Bookmarks);
1232
+ }
1233
+
1234
+ // src/obsidian/implementations/constructors/internals/views/getCanvasViewConstructor.ts
1235
+ function getCanvasViewConstructor(app) {
1236
+ return getViewConstructorByViewType(app, ViewType.Canvas);
1237
+ }
1238
+
1239
+ // src/obsidian/implementations/constructors/internals/views/getEmptyViewConstructor.ts
1240
+ function getEmptyViewConstructor(app) {
1241
+ return getViewConstructorByViewType(app, ViewType.Empty);
1242
+ }
1243
+
1244
+ // src/obsidian/implementations/constructors/internals/views/getFileExplorerViewConstructor.ts
1245
+ function getFileExplorerViewConstructor(app) {
1246
+ return getViewConstructorByViewType(app, ViewType.FileExplorer);
1247
+ }
1248
+
1249
+ // src/obsidian/implementations/constructors/internals/views/getFilePropertiesViewConstructor.ts
1250
+ function getFilePropertiesViewConstructor(app) {
1251
+ return getViewConstructorByViewType(app, ViewType.FileProperties);
1252
+ }
1253
+
1254
+ // src/obsidian/implementations/constructors/internals/views/getGraphViewConstructor.ts
1255
+ function getGraphViewConstructor(app) {
1256
+ return getViewConstructorByViewType(app, ViewType.Graph);
1257
+ }
1258
+
1259
+ // src/obsidian/implementations/constructors/internals/views/getImageViewConstructor.ts
1260
+ function getImageViewConstructor(app) {
1261
+ return getViewConstructorByViewType(app, ViewType.Image);
1262
+ }
1263
+
1264
+ // src/obsidian/implementations/constructors/internals/views/getLocalGraphViewConstructor.ts
1265
+ function getLocalGraphViewConstructor(app) {
1266
+ return getViewConstructorByViewType(app, ViewType.LocalGraph);
1267
+ }
1268
+
1269
+ // src/obsidian/implementations/constructors/internals/views/getOutgoingLinkViewConstructor.ts
1270
+ function getOutgoingLinkViewConstructor(app) {
1271
+ return getViewConstructorByViewType(app, ViewType.OutgoingLink);
1272
+ }
1273
+
1274
+ // src/obsidian/implementations/constructors/internals/views/getOutlineViewConstructor.ts
1275
+ function getOutlineViewConstructor(app) {
1276
+ return getViewConstructorByViewType(app, ViewType.Outline);
1277
+ }
1278
+
1279
+ // src/obsidian/implementations/constructors/internals/views/getPdfViewConstructor.ts
1280
+ function getPdfViewConstructor(app) {
1281
+ return getViewConstructorByViewType(app, ViewType.Pdf);
1282
+ }
1283
+
1284
+ // src/obsidian/implementations/constructors/internals/views/getReleaseNotesViewConstructor.ts
1285
+ function getReleaseNotesViewConstructor(app) {
1286
+ return getViewConstructorByViewType(app, ViewType.ReleaseNotes);
1287
+ }
1288
+
1289
+ // src/obsidian/implementations/constructors/internals/views/getSearchViewConstructor.ts
1290
+ function getSearchViewConstructor(app) {
1291
+ return getViewConstructorByViewType(app, ViewType.Search);
1292
+ }
1293
+
1294
+ // src/obsidian/implementations/constructors/internals/views/getSyncViewConstructor.ts
1295
+ function getSyncViewConstructor(app) {
1296
+ return getViewConstructorByViewType(app, ViewType.Sync);
1297
+ }
1298
+
1299
+ // src/obsidian/implementations/constructors/internals/views/getTagViewConstructor.ts
1300
+ function getTagViewConstructor(app) {
1301
+ return getViewConstructorByViewType(app, ViewType.Tag);
1302
+ }
1303
+
1304
+ // src/obsidian/implementations/constructors/internals/views/getVideoViewConstructor.ts
1305
+ function getVideoViewConstructor(app) {
1306
+ return getViewConstructorByViewType(app, ViewType.Video);
1307
+ }
1308
+
1309
+ // src/obsidian/implementations/constructors/internals/views/getWebviewerHistoryViewConstructor.ts
1310
+ function getWebviewerHistoryViewConstructor(app) {
1311
+ return getViewConstructorByViewType(app, ViewType.WebviewerHistory);
1312
+ }
1313
+
1314
+ // src/obsidian/implementations/constructors/internals/views/getWebviewerViewConstructor.ts
1315
+ function getWebviewerViewConstructor(app) {
1316
+ return getViewConstructorByViewType(app, ViewType.Webviewer);
1317
+ }
1318
+
1319
+ // src/obsidian/implementations/constructors/internals/workspace/getWorkspaceProtocolHandlerConstructor.ts
1320
+ function getWorkspaceProtocolHandlerConstructor(app) {
1321
+ return app.workspace.protocolHandler.constructor;
1322
+ }
1323
+
1324
+ // src/obsidian/implementations/utils/PathUtils.ts
1325
+ function parentFolderPath(path) {
1326
+ return path.replace(/\/?[^/]*$/, "") || "/";
1327
+ }
1328
+
1329
+ // src/obsidian/implementations/functions/createTFolderInstance.ts
1330
+ function createTFolderInstance(app, path) {
1331
+ let folder = app.vault.getFolderByPath(path);
1332
+ if (folder) {
1333
+ return folder;
1334
+ }
1335
+ folder = new (getTFolderConstructor())(app.vault, path);
1336
+ folder.parent = createTFolderInstance(app, parentFolderPath(path));
1337
+ folder.deleted = true;
1338
+ return folder;
1339
+ }
1340
+
1341
+ // src/obsidian/implementations/functions/createTFileInstance.ts
1342
+ function createTFileInstance(app, path) {
1343
+ let file = app.vault.getFileByPath(path);
1344
+ if (file) {
1345
+ return file;
1346
+ }
1347
+ file = new (getTFileConstructor())(app.vault, path);
1348
+ file.parent = createTFolderInstance(app, parentFolderPath(path));
1349
+ file.deleted = true;
1350
+ return file;
1351
+ }
1352
+
1353
+ // src/obsidian/implementations/functions/evaluateBaseHeadless.ts
1354
+ var import_obsidian92 = require("obsidian");
1355
+ async function evaluateBaseHeadless(app, baseOrContent, sourcePath) {
1356
+ const SCAN_POLL_INTERVAL_IN_MILLISECONDS = 50;
1357
+ const SCAN_TIMEOUT_IN_MILLISECONDS = 3e4;
1358
+ let content;
1359
+ let querySourcePath;
1360
+ if (sourcePath === void 0) {
1361
+ const file = typeof baseOrContent === "string" ? app.vault.getAbstractFileByPath(baseOrContent) : baseOrContent;
1362
+ if (!(file instanceof import_obsidian92.TFile)) {
1363
+ throw new Error(`No .base file exists at '${String(baseOrContent)}'.`);
1364
+ }
1365
+ if (file.extension !== "base") {
1366
+ throw new Error(`'${file.path}' is not a .base file.`);
1367
+ }
1368
+ content = await app.vault.cachedRead(file);
1369
+ querySourcePath = file.path;
1370
+ } else {
1371
+ if (typeof baseOrContent !== "string") {
1372
+ throw new Error("Pass the .base file on its own, without a source path.");
1373
+ }
1374
+ content = baseOrContent;
1375
+ querySourcePath = sourcePath;
1376
+ }
1377
+ const component = new import_obsidian92.Component();
1378
+ try {
1379
+ const controller = await getBasesControllerFromRender(app, content, querySourcePath, component);
1380
+ const startTime = performance.now();
1381
+ while (controller.initialScan) {
1382
+ if (performance.now() - startTime > SCAN_TIMEOUT_IN_MILLISECONDS) {
1383
+ throw new Error("Timed out waiting for the base initial scan to settle.");
1384
+ }
1385
+ await new Promise((resolve) => {
1386
+ window.setTimeout(resolve, SCAN_POLL_INTERVAL_IN_MILLISECONDS);
1387
+ });
1388
+ }
1389
+ return Array.from(controller.results.values());
1390
+ } finally {
1391
+ component.unload();
1392
+ }
1393
+ }
1394
+
1395
+ // src/obsidian/implementations/functions/getDataAdapterEx.ts
1396
+ function getDataAdapterEx(app) {
1397
+ return app.vault.adapter;
1398
+ }
1399
+
1400
+ // src/obsidian/implementations/functions/getPlatformEx.ts
1401
+ var import_obsidian93 = require("obsidian");
1402
+ function getPlatformEx() {
1403
+ return import_obsidian93.Platform;
1404
+ }
1405
+
1406
+ // src/obsidian/implementations/functions/loadMermaid.ts
1407
+ var import_obsidian94 = require("obsidian");
1408
+ async function loadMermaid() {
1409
+ return await (0, import_obsidian94.loadMermaid)();
1410
+ }
1411
+
1412
+ // src/obsidian/implementations/functions/loadPdfJs.ts
1413
+ var import_obsidian95 = require("obsidian");
1414
+ async function loadPdfJs() {
1415
+ return await (0, import_obsidian95.loadPdfJs)();
1416
+ }
1417
+
1418
+ // src/obsidian/implementations/functions/loadPrism.ts
1419
+ var import_obsidian96 = require("obsidian");
1420
+ async function loadPrism() {
1421
+ return await (0, import_obsidian96.loadPrism)();
1422
+ }
1423
+
1424
+ // src/obsidian/implementations/functions/onLayoutReadyEx.ts
1425
+ function onLayoutReadyEx(workspace, callback) {
1426
+ workspace.onLayoutReady(() => callback(workspace));
1427
+ }
1428
+
1429
+ // src/obsidian/implementations/type-guards/getSearchMatcherGuards.ts
1430
+ function getSearchMatcherGuards(app) {
1431
+ const Query = getObsidianSearchQueryConstructor(app);
1432
+ return {
1433
+ and: guard("alpha bravo"),
1434
+ case: guard("match-case:alpha"),
1435
+ comparison: guard("[alpha:>bravo]", "value"),
1436
+ content: guard("content:alpha"),
1437
+ file: guard("file:alpha"),
1438
+ negation: guard("-alpha"),
1439
+ or: guard("alpha OR bravo"),
1440
+ path: guard("path:alpha"),
1441
+ property: guard("[alpha]"),
1442
+ quotedText: guard('"alpha"'),
1443
+ regex: guard("/alpha/"),
1444
+ tag: guard("tag:alpha"),
1445
+ text: guard("alpha")
1446
+ };
1447
+ function guard(query, child) {
1448
+ const probe = new Query(app, query, false).matcher;
1449
+ if (!probe) {
1450
+ throw new Error("The matcher probe did not compile.");
1451
+ }
1452
+ if (child && !(child in probe)) {
1453
+ throw new Error("The matcher probe has no value node.");
1454
+ }
1455
+ const node = child && child in probe ? probe[child] : probe;
1456
+ if (!node || typeof node !== "object") {
1457
+ throw new Error("The matcher probe has no value matcher.");
1458
+ }
1459
+ const prototype = Object.getPrototypeOf(node);
1460
+ return (matcher) => Object.getPrototypeOf(matcher) === prototype;
1461
+ }
1462
+ }
1463
+
1464
+ // src/obsidian/implementations/type-guards/isReferenceCache.ts
1465
+ function isReferenceCache(reference) {
1466
+ return !!reference.position;
1467
+ }
1468
+
1469
+ // src/obsidian/implementations/type-guards/isEmbedCache.ts
1470
+ function isEmbedCache(reference) {
1471
+ return isReferenceCache(reference) && reference.original[0] === "!";
1472
+ }
1473
+
1474
+ // src/obsidian/implementations/type-guards/isFrontmatterLinkCache.ts
1475
+ function isFrontmatterLinkCache(reference) {
1476
+ return !!reference.key;
1477
+ }
1478
+
1479
+ // src/obsidian/implementations/type-guards/isLayoutReady.ts
1480
+ function isLayoutReady(workspace) {
1481
+ return workspace.layoutReady;
1482
+ }
1483
+
1484
+ // src/obsidian/implementations/type-guards/isLinkCache.ts
1485
+ function isLinkCache(reference) {
1486
+ return isReferenceCache(reference) && reference.original[0] !== "!";
1487
+ }
1488
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9pbmRleC50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NsYXNzZXMvQ3VzdG9tQXJyYXlEaWN0SW1wbC50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0YW50cy9GaWxlRXh0ZW5zaW9uLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RhbnRzL0ludGVybmFsUGx1Z2luTmFtZS50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0YW50cy9WaWV3VHlwZS50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2Jhc2VzL2dldEJhc2VzRW50cnlDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2Jhc2VzL2dldEJhc2VzRW50cnlHcm91cENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvYmFzZXMvZ2V0QmFzZXNRdWVyeVJlc3VsdENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvYmFzZXMvZ2V0QmFzZXNWaWV3Q29uZmlnQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9iYXNlcy9nZXRRdWVyeUNvbnRyb2xsZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldEFwcENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0Q2FwYWNpdG9yQWRhcHRlckNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0Q29uZmlybWF0aW9uTW9kYWxDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldEVkaXRvckNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0RXZlbnRzQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRGaWxlTWFuYWdlckNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0RmlsZVN5c3RlbUFkYXB0ZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldEZ1enp5U3VnZ2VzdE1vZGFsQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRIb3ZlclBvcG92ZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldEtleW1hcENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0TWFya2Rvd25QcmV2aWV3UmVuZGVyZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldE1hcmtkb3duUHJldmlld1ZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldE1hcmtkb3duUmVuZGVyQ2hpbGRDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldE1hcmtkb3duUmVuZGVyZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldE1lbnVDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldE1lbnVJdGVtQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRNZW51U2VwYXJhdG9yQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRNZXRhZGF0YUNhY2hlQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRNb2RhbENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0Tm90aWNlQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRSZW5kZXJDb250ZXh0Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRTY29wZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0U2VjcmV0U3RvcmFnZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0U2V0dGluZ0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0U2V0dGluZ0dyb3VwQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRTZXR0aW5nUGFnZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0U2V0dGluZ1RhYkNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0VEFic3RyYWN0RmlsZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0VGFza3NDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFRGaWxlQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRURm9sZGVyQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRWYXVsdENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0V29ya3NwYWNlQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VDb250YWluZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFdvcmtzcGFjZUZsb2F0aW5nQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VJdGVtQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VMZWFmQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VNb2JpbGVEcmF3ZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFdvcmtzcGFjZVBhcmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0V29ya3NwYWNlUmliYm9uQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VSb290Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VTaWRlZG9ja0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0V29ya3NwYWNlU3BsaXRDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFdvcmtzcGFjZVRhYnNDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFdvcmtzcGFjZVdpbmRvd0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldEFic3RyYWN0VGV4dENvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldEJhc2VDb21wb25lbnRDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRCdXR0b25Db21wb25lbnRDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRDb2xvckNvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldENvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldENvbmZpcm1hdGlvbkJ1dHRvbkNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldERpc3BsYXlWYWx1ZUNvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldERyb3Bkb3duQ29tcG9uZW50Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9zZXR0aW5ncy9zZXR0aW5nLWNvbXBvbmVudHMvZ2V0RXh0cmFCdXR0b25Db21wb25lbnRDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRNb21lbnRGb3JtYXRDb21wb25lbnRDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRQcm9ncmVzc0JhckNvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldFNlYXJjaENvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldFNlY3JldENvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldFNsaWRlckNvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldFRleHRBcmVhQ29tcG9uZW50Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9zZXR0aW5ncy9zZXR0aW5nLWNvbXBvbmVudHMvZ2V0VGV4dENvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldFRvZ2dsZUNvbXBvbmVudENvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldFZhbHVlQ29tcG9uZW50Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0Qm9vbGVhblZhbHVlQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0RGF0ZVZhbHVlQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0RHVyYXRpb25WYWx1ZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldEZpbGVWYWx1ZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldEhUTUxWYWx1ZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldEljb25WYWx1ZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldEltYWdlVmFsdWVDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXRMaW5rVmFsdWVDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXRMaXN0VmFsdWVDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXROb3ROdWxsVmFsdWVDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXROdWxsVmFsdWVDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXROdW1iZXJWYWx1ZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldE9iamVjdFZhbHVlQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0UmVnRXhwVmFsdWVDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXRSZWxhdGl2ZURhdGVWYWx1ZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldFN0cmluZ1ZhbHVlQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0VGFnVmFsdWVDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXRVcmxWYWx1ZUNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldFZhbHVlQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92aWV3cy9nZXRFZGl0YWJsZUZpbGVWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92aWV3cy9nZXRNYXJrZG93blZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0QXBwTWVudUJhck1hbmFnZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0QXBwU2V0dGluZ0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy9nZXRDbGlDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0Q29tbWFuZHNDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0Q3VzdG9tQ1NTQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldERyYWdNYW5hZ2VyQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldEVkaXRvclN1Z2dlc3RzQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldEVtYmVkUmVnaXN0cnlDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0Rm9sZE1hbmFnZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0RnJhbWVEb21Db25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0SG90a2V5TWFuYWdlckNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy9nZXRNZXRhZGF0YVR5cGVNYW5hZ2VyQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldE9ic2lkaWFuRE9NQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldE9ic2lkaWFuU2VhcmNoUXVlcnlDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0UGx1Z2luc0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy9nZXRSZWNlbnRGaWxlVHJhY2tlckNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy9nZXRTaGFyZVJlY2VpdmVyQ29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldFN0YXR1c0JhckNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy9nZXRWaWV3UmVnaXN0cnlDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0V29ya3NwYWNlTGVhZkhpc3RvcnlDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvaW50ZXJuYWwtcGx1Z2lucy9iYXNlcy9nZXRCYXNlc0NvbnRleHRDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvaW50ZXJuYWwtcGx1Z2lucy9iYXNlcy9nZXRCYXNlc1F1ZXJ5Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9mdW5jdGlvbnMvZ2V0QmFzZXNDb250cm9sbGVyRnJvbVJlbmRlci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvaW50ZXJuYWwtcGx1Z2lucy9nZXRJbnRlcm5hbFBsdWdpbkNvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy9pbnRlcm5hbC1wbHVnaW5zL2dldEludGVybmFsUGx1Z2luc0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRBbGxQcm9wZXJ0aWVzVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRBdWRpb1ZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0QmFja2xpbmtWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldEJhc2VzVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRCb29rbWFya3NWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldENhbnZhc1ZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0RW1wdHlWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldEZpbGVFeHBsb3JlclZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0RmlsZVByb3BlcnRpZXNWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldEdyYXBoVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRJbWFnZVZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0TG9jYWxHcmFwaFZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0T3V0Z29pbmdMaW5rVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRPdXRsaW5lVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRQZGZWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldFJlbGVhc2VOb3Rlc1ZpZXdDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0U2VhcmNoVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRTeW5jVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRUYWdWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldFZpZGVvVmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRXZWJ2aWV3ZXJIaXN0b3J5Vmlld0NvbnN0cnVjdG9yLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRXZWJ2aWV3ZXJWaWV3Q29uc3RydWN0b3IudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3dvcmtzcGFjZS9nZXRXb3Jrc3BhY2VQcm90b2NvbEhhbmRsZXJDb25zdHJ1Y3Rvci50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL3V0aWxzL1BhdGhVdGlscy50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2Z1bmN0aW9ucy9jcmVhdGVURm9sZGVySW5zdGFuY2UudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9mdW5jdGlvbnMvY3JlYXRlVEZpbGVJbnN0YW5jZS50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2Z1bmN0aW9ucy9ldmFsdWF0ZUJhc2VIZWFkbGVzcy50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2Z1bmN0aW9ucy9nZXREYXRhQWRhcHRlckV4LnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvZnVuY3Rpb25zL2dldFBsYXRmb3JtRXgudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9mdW5jdGlvbnMvbG9hZE1lcm1haWQudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy9mdW5jdGlvbnMvbG9hZFBkZkpzLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvZnVuY3Rpb25zL2xvYWRQcmlzbS50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL2Z1bmN0aW9ucy9vbkxheW91dFJlYWR5RXgudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy90eXBlLWd1YXJkcy9nZXRTZWFyY2hNYXRjaGVyR3VhcmRzLnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvdHlwZS1ndWFyZHMvaXNSZWZlcmVuY2VDYWNoZS50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL3R5cGUtZ3VhcmRzL2lzRW1iZWRDYWNoZS50cyIsICIuLi8uLi9zcmMvb2JzaWRpYW4vaW1wbGVtZW50YXRpb25zL3R5cGUtZ3VhcmRzL2lzRnJvbnRtYXR0ZXJMaW5rQ2FjaGUudHMiLCAiLi4vLi4vc3JjL29ic2lkaWFuL2ltcGxlbWVudGF0aW9ucy90eXBlLWd1YXJkcy9pc0xheW91dFJlYWR5LnRzIiwgIi4uLy4uL3NyYy9vYnNpZGlhbi9pbXBsZW1lbnRhdGlvbnMvdHlwZS1ndWFyZHMvaXNMaW5rQ2FjaGUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qIFRISVMgSVMgQSBHRU5FUkFURUQvQlVORExFRCBGSUxFIEJZIEJVSUxEIFNDUklQVCAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2NsYXNzZXMvQ3VzdG9tQXJyYXlEaWN0SW1wbC50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cy9GaWxlRXh0ZW5zaW9uLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RhbnRzL0ludGVybmFsUGx1Z2luTmFtZS50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2Jhc2VzL2dldEJhc2VzRW50cnlDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2Jhc2VzL2dldEJhc2VzRW50cnlHcm91cENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvYmFzZXMvZ2V0QmFzZXNRdWVyeVJlc3VsdENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvYmFzZXMvZ2V0QmFzZXNWaWV3Q29uZmlnQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9iYXNlcy9nZXRRdWVyeUNvbnRyb2xsZXJDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldEFwcENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0Q2FwYWNpdG9yQWRhcHRlckNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0Q29uZmlybWF0aW9uTW9kYWxDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldEVkaXRvckNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0RXZlbnRzQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRGaWxlTWFuYWdlckNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0RmlsZVN5c3RlbUFkYXB0ZXJDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldEZ1enp5U3VnZ2VzdE1vZGFsQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRIb3ZlclBvcG92ZXJDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldEtleW1hcENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0TWFya2Rvd25QcmV2aWV3UmVuZGVyZXJDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldE1hcmtkb3duUHJldmlld1ZpZXdDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldE1hcmtkb3duUmVuZGVyQ2hpbGRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldE1hcmtkb3duUmVuZGVyZXJDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldE1lbnVDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldE1lbnVJdGVtQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRNZW51U2VwYXJhdG9yQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRNZXRhZGF0YUNhY2hlQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRNb2RhbENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0Tm90aWNlQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRSZW5kZXJDb250ZXh0Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRTY29wZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0U2VjcmV0U3RvcmFnZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0U2V0dGluZ0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0U2V0dGluZ0dyb3VwQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRTZXR0aW5nUGFnZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0U2V0dGluZ1RhYkNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0VEFic3RyYWN0RmlsZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0VGFza3NDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFRGaWxlQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRURm9sZGVyQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRWYXVsdENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0V29ya3NwYWNlQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VDb250YWluZXJDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFdvcmtzcGFjZUZsb2F0aW5nQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VJdGVtQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VMZWFmQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VNb2JpbGVEcmF3ZXJDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFdvcmtzcGFjZVBhcmVudENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0V29ya3NwYWNlUmliYm9uQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VSb290Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9nZXRXb3Jrc3BhY2VTaWRlZG9ja0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0V29ya3NwYWNlU3BsaXRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFdvcmtzcGFjZVRhYnNDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFdvcmtzcGFjZVdpbmRvd0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldEFic3RyYWN0VGV4dENvbXBvbmVudENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldEJhc2VDb21wb25lbnRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRCdXR0b25Db21wb25lbnRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRDb2xvckNvbXBvbmVudENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldENvbXBvbmVudENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldENvbmZpcm1hdGlvbkJ1dHRvbkNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldERpc3BsYXlWYWx1ZUNvbXBvbmVudENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldERyb3Bkb3duQ29tcG9uZW50Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9zZXR0aW5ncy9zZXR0aW5nLWNvbXBvbmVudHMvZ2V0RXh0cmFCdXR0b25Db21wb25lbnRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRNb21lbnRGb3JtYXRDb21wb25lbnRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3NldHRpbmdzL3NldHRpbmctY29tcG9uZW50cy9nZXRQcm9ncmVzc0JhckNvbXBvbmVudENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldFNlYXJjaENvbXBvbmVudENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldFNlY3JldENvbXBvbmVudENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldFNsaWRlckNvbXBvbmVudENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldFRleHRBcmVhQ29tcG9uZW50Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy9zZXR0aW5ncy9zZXR0aW5nLWNvbXBvbmVudHMvZ2V0VGV4dENvbXBvbmVudENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldFRvZ2dsZUNvbXBvbmVudENvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvc2V0dGluZ3Mvc2V0dGluZy1jb21wb25lbnRzL2dldFZhbHVlQ29tcG9uZW50Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0Qm9vbGVhblZhbHVlQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0RGF0ZVZhbHVlQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0RHVyYXRpb25WYWx1ZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldEZpbGVWYWx1ZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldEhUTUxWYWx1ZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldEljb25WYWx1ZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldEltYWdlVmFsdWVDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXRMaW5rVmFsdWVDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXRMaXN0VmFsdWVDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXROb3ROdWxsVmFsdWVDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXROdWxsVmFsdWVDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXROdW1iZXJWYWx1ZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldE9iamVjdFZhbHVlQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0UmVnRXhwVmFsdWVDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXRSZWxhdGl2ZURhdGVWYWx1ZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldFN0cmluZ1ZhbHVlQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92YWx1ZXMvZ2V0VGFnVmFsdWVDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL3ZhbHVlcy9nZXRVcmxWYWx1ZUNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvdmFsdWVzL2dldFZhbHVlQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92aWV3cy9nZXRFZGl0YWJsZUZpbGVWaWV3Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvYXVnbWVudGF0aW9ucy92aWV3cy9nZXRNYXJrZG93blZpZXdDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0QXBwTWVudUJhck1hbmFnZXJDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0QXBwU2V0dGluZ0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy9nZXRDbGlDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0Q29tbWFuZHNDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0Q3VzdG9tQ1NTQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldERyYWdNYW5hZ2VyQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldEVkaXRvclN1Z2dlc3RzQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldEVtYmVkUmVnaXN0cnlDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0Rm9sZE1hbmFnZXJDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0RnJhbWVEb21Db25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0SG90a2V5TWFuYWdlckNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy9nZXRNZXRhZGF0YVR5cGVNYW5hZ2VyQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldE9ic2lkaWFuRE9NQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldE9ic2lkaWFuU2VhcmNoUXVlcnlDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0UGx1Z2luc0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy9nZXRSZWNlbnRGaWxlVHJhY2tlckNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy9nZXRTaGFyZVJlY2VpdmVyQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2dldFN0YXR1c0JhckNvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy9nZXRWaWV3UmVnaXN0cnlDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvZ2V0V29ya3NwYWNlTGVhZkhpc3RvcnlDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvaW50ZXJuYWwtcGx1Z2lucy9iYXNlcy9nZXRCYXNlc0NvbnRleHRDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvaW50ZXJuYWwtcGx1Z2lucy9iYXNlcy9nZXRCYXNlc1F1ZXJ5Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvZ2V0SW50ZXJuYWxQbHVnaW5Db25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvaW50ZXJuYWwtcGx1Z2lucy9nZXRJbnRlcm5hbFBsdWdpbnNDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0QWxsUHJvcGVydGllc1ZpZXdDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0QXVkaW9WaWV3Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldEJhY2tsaW5rVmlld0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRCYXNlc1ZpZXdDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0Qm9va21hcmtzVmlld0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRDYW52YXNWaWV3Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldEVtcHR5Vmlld0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRGaWxlRXhwbG9yZXJWaWV3Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldEZpbGVQcm9wZXJ0aWVzVmlld0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRHcmFwaFZpZXdDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0SW1hZ2VWaWV3Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldExvY2FsR3JhcGhWaWV3Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldE91dGdvaW5nTGlua1ZpZXdDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0T3V0bGluZVZpZXdDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0UGRmVmlld0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRSZWxlYXNlTm90ZXNWaWV3Q29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25zdHJ1Y3RvcnMvaW50ZXJuYWxzL3ZpZXdzL2dldFNlYXJjaFZpZXdDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0U3luY1ZpZXdDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0VGFnVmlld0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy92aWV3cy9nZXRWaWRlb1ZpZXdDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0V2Vidmlld2VySGlzdG9yeVZpZXdDb25zdHJ1Y3Rvci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnN0cnVjdG9ycy9pbnRlcm5hbHMvdmlld3MvZ2V0V2Vidmlld2VyVmlld0NvbnN0cnVjdG9yLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uc3RydWN0b3JzL2ludGVybmFscy93b3Jrc3BhY2UvZ2V0V29ya3NwYWNlUHJvdG9jb2xIYW5kbGVyQ29uc3RydWN0b3IudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9mdW5jdGlvbnMvY3JlYXRlVEZpbGVJbnN0YW5jZS50cyc7XG5leHBvcnQgKiBmcm9tICcuL2Z1bmN0aW9ucy9jcmVhdGVURm9sZGVySW5zdGFuY2UudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9mdW5jdGlvbnMvZXZhbHVhdGVCYXNlSGVhZGxlc3MudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9mdW5jdGlvbnMvZ2V0QmFzZXNDb250cm9sbGVyRnJvbVJlbmRlci50cyc7XG5leHBvcnQgKiBmcm9tICcuL2Z1bmN0aW9ucy9nZXREYXRhQWRhcHRlckV4LnRzJztcbmV4cG9ydCAqIGZyb20gJy4vZnVuY3Rpb25zL2dldFBsYXRmb3JtRXgudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9mdW5jdGlvbnMvbG9hZE1lcm1haWQudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9mdW5jdGlvbnMvbG9hZFBkZkpzLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vZnVuY3Rpb25zL2xvYWRQcmlzbS50cyc7XG5leHBvcnQgKiBmcm9tICcuL2Z1bmN0aW9ucy9vbkxheW91dFJlYWR5RXgudHMnO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlLWd1YXJkcy9nZXRTZWFyY2hNYXRjaGVyR3VhcmRzLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZS1ndWFyZHMvaXNFbWJlZENhY2hlLnRzJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZS1ndWFyZHMvaXNGcm9udG1hdHRlckxpbmtDYWNoZS50cyc7XG5leHBvcnQgKiBmcm9tICcuL3R5cGUtZ3VhcmRzL2lzTGF5b3V0UmVhZHkudHMnO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlLWd1YXJkcy9pc0xpbmtDYWNoZS50cyc7XG5leHBvcnQgKiBmcm9tICcuL3R5cGUtZ3VhcmRzL2lzUmVmZXJlbmNlQ2FjaGUudHMnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlscy9QYXRoVXRpbHMudHMnO1xuZXhwb3J0IHR5cGUgKiBmcm9tICcuLi8uLi9pbmRleC5kLnRzJztcbiIsICJpbXBvcnQgdHlwZSB7IEN1c3RvbUFycmF5RGljdCB9IGZyb20gJy4uLy4uL2ludGVybmFscy9jb2xsZWN0aW9ucy9DdXN0b21BcnJheURpY3QuZC50cyc7XG5cbi8qKlxuICogQSBkaWN0aW9uYXJ5IGZyb20gc3RyaW5nIGtleXMgdG8gYXJyYXlzIG9mIHVuaXF1ZSB2YWx1ZXMsIGltcGxlbWVudGluZyB7QGxpbmsgQ3VzdG9tQXJyYXlEaWN0fS5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgY2xhc3MgQ3VzdG9tQXJyYXlEaWN0SW1wbDxUPiBpbXBsZW1lbnRzIEN1c3RvbUFycmF5RGljdDxUPiB7XG4gIC8qKlxuICAgKiBJbnRlcm5hbCBtYXAgc3RvcmluZyBrZXktdG8tYXJyYXkgbWFwcGluZ3MuXG4gICAqL1xuICBwdWJsaWMgZGF0YTogTWFwPHN0cmluZywgVFtdPiA9IG5ldyBNYXAoKTtcblxuICAvKipcbiAgICogQWRkIGEgdmFsdWUgdG8gdGhlIGFycmF5IGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4ga2V5LlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleS5cbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGFkZC5cbiAgICovXG4gIHB1YmxpYyBhZGQoa2V5OiBzdHJpbmcsIHZhbHVlOiBUKTogdm9pZCB7XG4gICAgbGV0IHZhbHVlcyA9IHRoaXMuZ2V0KGtleSk7XG4gICAgaWYgKCF2YWx1ZXMpIHtcbiAgICAgIHZhbHVlcyA9IFtdO1xuICAgICAgdGhpcy5kYXRhLnNldChrZXksIHZhbHVlcyk7XG4gICAgfVxuXG4gICAgaWYgKCF2YWx1ZXMuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICB2YWx1ZXMucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbGwgdmFsdWVzIGZvciB0aGUgZ2l2ZW4ga2V5LlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleSB0byBjbGVhci5cbiAgICovXG4gIHB1YmxpYyBjbGVhcihrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZGF0YS5kZWxldGUoa2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYWxsIGtleXMgYW5kIHRoZWlyIHZhbHVlcy5cbiAgICovXG4gIHB1YmxpYyBjbGVhckFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGEuY2xlYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRoZSBhcnJheSBmb3IgdGhlIGdpdmVuIGtleSBjb250YWlucyB0aGUgc3BlY2lmaWVkIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleS5cbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNoZWNrLlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSB2YWx1ZSBleGlzdHMuXG4gICAqL1xuICBwdWJsaWMgY29udGFpbnMoa2V5OiBzdHJpbmcsIHZhbHVlOiBUKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5nZXQoa2V5KT8uY29udGFpbnModmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgdG90YWwgbnVtYmVyIG9mIHZhbHVlcyBhY3Jvc3MgYWxsIGtleXMuXG4gICAqXG4gICAqIEByZXR1cm5zIFRvdGFsIHZhbHVlIGNvdW50LlxuICAgKi9cbiAgcHVibGljIGNvdW50KCk6IG51bWJlciB7XG4gICAgbGV0IGFucyA9IDA7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgdGhpcy5rZXlzKCkpIHtcbiAgICAgIGFucyArPSB0aGlzLmdldChrZXkpPy5sZW5ndGggPz8gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gYW5zO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgYXJyYXkgb2YgdmFsdWVzIGZvciB0aGUgZ2l2ZW4ga2V5LCBvciBgbnVsbGAgaWYgbm90IGZvdW5kLlxuICAgKlxuICAgKiBAcGFyYW0ga2V5IC0gVGhlIGtleS5cbiAgICogQHJldHVybnMgQXJyYXkgb2YgdmFsdWVzLCBvciBgbnVsbGAuXG4gICAqL1xuICBwdWJsaWMgZ2V0KGtleTogc3RyaW5nKTogbnVsbCB8IFRbXSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5nZXQoa2V5KSB8fCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbGwga2V5cyBpbiB0aGUgZGljdGlvbmFyeS5cbiAgICpcbiAgICogQHJldHVybnMgQXJyYXkgb2Yga2V5cy5cbiAgICovXG4gIHB1YmxpYyBrZXlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmRhdGEua2V5cygpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSBzcGVjaWZpYyB2YWx1ZSBmcm9tIHRoZSBhcnJheSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGtleS5cbiAgICpcbiAgICogQHBhcmFtIGtleSAtIFRoZSBrZXkuXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byByZW1vdmUuXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlKGtleTogc3RyaW5nLCB2YWx1ZTogVCk6IHZvaWQge1xuICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0KGtleSk7XG4gICAgaWYgKCF2YWx1ZXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YWx1ZXMucmVtb3ZlKHZhbHVlKTtcbiAgICBpZiAodmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5jbGVhcihrZXkpO1xuICAgIH1cbiAgfVxufVxuIiwgIi8qKlxuICogQ29uc3RhbnQgbWFwcGluZyBvZiBmaWxlIGV4dGVuc2lvbiBpZGVudGlmaWVycyByZWNvZ25pemVkIGFuZCBzdXBwb3J0ZWQgYnkgT2JzaWRpYW4uXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGNvbnN0IEZpbGVFeHRlbnNpb24gPSB7XG4gIF8zZ3A6ICczZ3AnLFxuICBhdmlmOiAnYXZpZicsXG4gIGJtcDogJ2JtcCcsXG4gIGNhbnZhczogJ2NhbnZhcycsXG4gIGZsYWM6ICdmbGFjJyxcbiAgZ2lmOiAnZ2lmJyxcbiAganBlZzogJ2pwZWcnLFxuICBqcGc6ICdqcGcnLFxuICBtNGE6ICdtNGEnLFxuICBtZDogJ21kJyxcbiAgbWt2OiAnbWt2JyxcbiAgbW92OiAnbW92JyxcbiAgbXAzOiAnbXAzJyxcbiAgbXA0OiAnbXA0JyxcbiAgb2dhOiAnb2dhJyxcbiAgb2dnOiAnb2dnJyxcbiAgb2d2OiAnb2d2JyxcbiAgb3B1czogJ29wdXMnLFxuICBwZGY6ICdwZGYnLFxuICBwbmc6ICdwbmcnLFxuICBzdmc6ICdzdmcnLFxuICB3YXY6ICd3YXYnLFxuICB3ZWJtOiAnd2VibScsXG4gIHdlYnA6ICd3ZWJwJ1xufSBhcyBjb25zdDtcbiIsICIvKipcbiAqIENvbnN0YW50IG1hcHBpbmcgb2YgaW50ZXJuYWwgKGNvcmUpIHBsdWdpbiBuYW1lIGlkZW50aWZpZXJzIGJ1bmRsZWQgd2l0aCBPYnNpZGlhbi5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgY29uc3QgSW50ZXJuYWxQbHVnaW5OYW1lID0ge1xuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IEF1ZGlvIHJlY29yZGVyLlxuICAgKi9cbiAgQXVkaW9SZWNvcmRlcjogJ2F1ZGlvLXJlY29yZGVyJyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBCYWNrbGlua3MuXG4gICAqL1xuICBCYWNrbGluazogJ2JhY2tsaW5rJyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBCYXNlcy5cbiAgICovXG4gIEJhc2VzOiAnYmFzZXMnLFxuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IEJvb2ttYXJrcy5cbiAgICovXG4gIEJvb2ttYXJrczogJ2Jvb2ttYXJrcycsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogQ2FudmFzLlxuICAgKi9cbiAgQ2FudmFzOiAnY2FudmFzJyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBDb21tYW5kIHBhbGV0dGUuXG4gICAqL1xuICBDb21tYW5kUGFsZXR0ZTogJ2NvbW1hbmQtcGFsZXR0ZScsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogRGFpbHkgbm90ZXMuXG4gICAqL1xuICBEYWlseU5vdGVzOiAnZGFpbHktbm90ZXMnLFxuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IChoaWRkZW4pLlxuICAgKi9cbiAgRWRpdG9yU3RhdHVzOiAnZWRpdG9yLXN0YXR1cycsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogRmlsZXMuXG4gICAqL1xuICBGaWxlRXhwbG9yZXI6ICdmaWxlLWV4cGxvcmVyJyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBGaWxlIHJlY292ZXJ5LlxuICAgKi9cbiAgRmlsZVJlY292ZXJ5OiAnZmlsZS1yZWNvdmVyeScsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogRm9vdG5vdGVzLlxuICAgKi9cbiAgRm9vdG5vdGVzOiAnZm9vdG5vdGVzJyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBTZWFyY2guXG4gICAqL1xuICBHbG9iYWxTZWFyY2g6ICdnbG9iYWwtc2VhcmNoJyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBHcmFwaCB2aWV3LlxuICAgKi9cbiAgR3JhcGg6ICdncmFwaCcsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogRm9ybWF0IGNvbnZlcnRlci5cbiAgICovXG4gIE1hcmtkb3duSW1wb3J0ZXI6ICdtYXJrZG93bi1pbXBvcnRlcicsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogTm90ZSBjb21wb3Nlci5cbiAgICovXG4gIE5vdGVDb21wb3NlcjogJ25vdGUtY29tcG9zZXInLFxuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IE91dGdvaW5nIGxpbmtzLlxuICAgKi9cbiAgT3V0Z29pbmdMaW5rOiAnb3V0Z29pbmctbGluaycsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogT3V0bGluZS5cbiAgICovXG4gIE91dGxpbmU6ICdvdXRsaW5lJyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBQYWdlIHByZXZpZXcuXG4gICAqL1xuICBQYWdlUHJldmlldzogJ3BhZ2UtcHJldmlldycsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogUHJvcGVydGllcyB2aWV3LlxuICAgKi9cbiAgUHJvcGVydGllczogJ3Byb3BlcnRpZXMnLFxuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFB1Ymxpc2guXG4gICAqL1xuICBQdWJsaXNoOiAncHVibGlzaCcsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogUmFuZG9tIG5vdGUuXG4gICAqL1xuICBSYW5kb21Ob3RlOiAncmFuZG9tLW5vdGUnLFxuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFNsYXNoIGNvbW1hbmRzLlxuICAgKi9cbiAgU2xhc2hDb21tYW5kOiAnc2xhc2gtY29tbWFuZCcsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogU2xpZGVzLlxuICAgKi9cbiAgU2xpZGVzOiAnc2xpZGVzJyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBRdWljayBTd2l0Y2hlci5cbiAgICovXG4gIFN3aXRjaGVyOiAnc3dpdGNoZXInLFxuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFN5bmMuXG4gICAqL1xuICBTeW5jOiAnc3luYycsXG4gIC8qKlxuICAgKiBQbHVnaW4gbmFtZSBpbiBVSTogVGFncyB2aWV3LlxuICAgKi9cbiAgVGFnUGFuZTogJ3RhZy1wYW5lJyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBUZW1wbGF0ZXMuXG4gICAqL1xuICBUZW1wbGF0ZXM6ICd0ZW1wbGF0ZXMnLFxuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFdlYiB2aWV3ZXIuXG4gICAqL1xuICBXZWJ2aWV3ZXI6ICd3ZWJ2aWV3ZXInLFxuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFdvcmQgY291bnQuXG4gICAqL1xuICBXb3JkQ291bnQ6ICd3b3JkLWNvdW50JyxcbiAgLyoqXG4gICAqIFBsdWdpbiBuYW1lIGluIFVJOiBXb3Jrc3BhY2VzLlxuICAgKi9cbiAgV29ya3NwYWNlczogJ3dvcmtzcGFjZXMnLFxuICAvKipcbiAgICogUGx1Z2luIG5hbWUgaW4gVUk6IFVuaXF1ZSBub3RlIGNyZWF0b3IuXG4gICAqL1xuICBaa1ByZWZpeGVyOiAnemstcHJlZml4ZXInXG59IGFzIGNvbnN0O1xuIiwgImltcG9ydCB7IEludGVybmFsUGx1Z2luTmFtZSB9IGZyb20gJy4vSW50ZXJuYWxQbHVnaW5OYW1lLnRzJztcblxuLyoqXG4gKiBDb25zdGFudCBtYXBwaW5nIG9mIHZpZXcgdHlwZSBpZGVudGlmaWVycyB1c2VkIHRvIG9wZW4gYW5kIG1hbmFnZSBkaWZmZXJlbnQgbGVhZiB2aWV3cyBpbiBPYnNpZGlhbi5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgY29uc3QgVmlld1R5cGUgPSB7XG4gIEFsbFByb3BlcnRpZXM6ICdhbGwtcHJvcGVydGllcycsXG4gIEF1ZGlvOiAnYXVkaW8nLFxuICBCYWNrbGluazogSW50ZXJuYWxQbHVnaW5OYW1lLkJhY2tsaW5rLFxuICBCYXNlczogSW50ZXJuYWxQbHVnaW5OYW1lLkJhc2VzLFxuICBCb29rbWFya3M6IEludGVybmFsUGx1Z2luTmFtZS5Cb29rbWFya3MsXG4gIENhbnZhczogSW50ZXJuYWxQbHVnaW5OYW1lLkNhbnZhcyxcbiAgRW1wdHk6ICdlbXB0eScsXG4gIEZpbGVFeHBsb3JlcjogSW50ZXJuYWxQbHVnaW5OYW1lLkZpbGVFeHBsb3JlcixcbiAgRmlsZVByb3BlcnRpZXM6ICdmaWxlLXByb3BlcnRpZXMnLFxuICBHcmFwaDogSW50ZXJuYWxQbHVnaW5OYW1lLkdyYXBoLFxuICBJbWFnZTogJ2ltYWdlJyxcbiAgTG9jYWxHcmFwaDogJ2xvY2FsZ3JhcGgnLFxuICBNYXJrZG93bjogJ21hcmtkb3duJyxcbiAgT3V0Z29pbmdMaW5rOiBJbnRlcm5hbFBsdWdpbk5hbWUuT3V0Z29pbmdMaW5rLFxuICBPdXRsaW5lOiBJbnRlcm5hbFBsdWdpbk5hbWUuT3V0bGluZSxcbiAgUGRmOiAncGRmJyxcbiAgUmVsZWFzZU5vdGVzOiAncmVsZWFzZS1ub3RlcycsXG4gIFNlYXJjaDogJ3NlYXJjaCcsXG4gIFN5bmM6ICdzeW5jJyxcbiAgVGFnOiAndGFnJyxcbiAgVmlkZW86ICd2aWRlbycsXG4gIFdlYnZpZXdlcjogJ3dlYnZpZXdlcicsXG4gIFdlYnZpZXdlckhpc3Rvcnk6ICd3ZWJ2aWV3ZXItaGlzdG9yeSdcbn0gYXMgY29uc3Q7XG4iLCAiaW1wb3J0IHsgQmFzZXNFbnRyeSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNCYXNlc0VudHJ5fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0Jhc2VzRW50cnl9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCYXNlc0VudHJ5Q29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPEJhc2VzRW50cnk+IHtcbiAgcmV0dXJuIEJhc2VzRW50cnkgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEJhc2VzRW50cnk+O1xufVxuIiwgImltcG9ydCB7IEJhc2VzRW50cnlHcm91cCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNCYXNlc0VudHJ5R3JvdXB9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jQmFzZXNFbnRyeUdyb3VwfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFzZXNFbnRyeUdyb3VwQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPEJhc2VzRW50cnlHcm91cD4ge1xuICByZXR1cm4gQmFzZXNFbnRyeUdyb3VwIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxCYXNlc0VudHJ5R3JvdXA+O1xufVxuIiwgImltcG9ydCB7IEJhc2VzUXVlcnlSZXN1bHQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jQmFzZXNRdWVyeVJlc3VsdH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNCYXNlc1F1ZXJ5UmVzdWx0fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFzZXNRdWVyeVJlc3VsdENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxCYXNlc1F1ZXJ5UmVzdWx0PiB7XG4gIHJldHVybiBCYXNlc1F1ZXJ5UmVzdWx0IGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxCYXNlc1F1ZXJ5UmVzdWx0Pjtcbn1cbiIsICJpbXBvcnQgeyBCYXNlc1ZpZXdDb25maWcgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jQmFzZXNWaWV3Q29uZmlnfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0Jhc2VzVmlld0NvbmZpZ30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJhc2VzVmlld0NvbmZpZ0NvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxCYXNlc1ZpZXdDb25maWc+IHtcbiAgcmV0dXJuIEJhc2VzVmlld0NvbmZpZyBhcyBFeHRyYWN0Q29uc3RydWN0b3I8QmFzZXNWaWV3Q29uZmlnPjtcbn1cbiIsICJpbXBvcnQgeyBRdWVyeUNvbnRyb2xsZXIgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jUXVlcnlDb250cm9sbGVyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1F1ZXJ5Q29udHJvbGxlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFF1ZXJ5Q29udHJvbGxlckNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxRdWVyeUNvbnRyb2xsZXI+IHtcbiAgcmV0dXJuIFF1ZXJ5Q29udHJvbGxlciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8UXVlcnlDb250cm9sbGVyPjtcbn1cbiIsICJpbXBvcnQgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jQXBwfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0FwcH0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEFwcENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxBcHA+IHtcbiAgcmV0dXJuIEFwcCBhcyBFeHRyYWN0Q29uc3RydWN0b3I8QXBwPjtcbn1cbiIsICJpbXBvcnQgeyBDYXBhY2l0b3JBZGFwdGVyIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI0NhcGFjaXRvckFkYXB0ZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jQ2FwYWNpdG9yQWRhcHRlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhcGFjaXRvckFkYXB0ZXJDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8Q2FwYWNpdG9yQWRhcHRlcj4ge1xuICByZXR1cm4gQ2FwYWNpdG9yQWRhcHRlciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8Q2FwYWNpdG9yQWRhcHRlcj47XG59XG4iLCAiaW1wb3J0IHsgQ29uZmlybWF0aW9uTW9kYWwgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jQ29uZmlybWF0aW9uTW9kYWx9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jQ29uZmlybWF0aW9uTW9kYWx9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maXJtYXRpb25Nb2RhbENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxDb25maXJtYXRpb25Nb2RhbD4ge1xuICByZXR1cm4gQ29uZmlybWF0aW9uTW9kYWwgYXMgRXh0cmFjdENvbnN0cnVjdG9yPENvbmZpcm1hdGlvbk1vZGFsPjtcbn1cbiIsICJpbXBvcnQgeyBFZGl0b3IgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jRWRpdG9yfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0VkaXRvcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVkaXRvckNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxFZGl0b3I+IHtcbiAgcmV0dXJuIEVkaXRvciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8RWRpdG9yPjtcbn1cbiIsICJpbXBvcnQgeyBFdmVudHMgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jRXZlbnRzfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0V2ZW50c30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEV2ZW50c0NvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxFdmVudHM+IHtcbiAgcmV0dXJuIEV2ZW50cyBhcyBFeHRyYWN0Q29uc3RydWN0b3I8RXZlbnRzPjtcbn1cbiIsICJpbXBvcnQgeyBGaWxlTWFuYWdlciB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNGaWxlTWFuYWdlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNGaWxlTWFuYWdlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGVNYW5hZ2VyQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPEZpbGVNYW5hZ2VyPiB7XG4gIHJldHVybiBGaWxlTWFuYWdlciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8RmlsZU1hbmFnZXI+O1xufVxuIiwgImltcG9ydCB7IEZpbGVTeXN0ZW1BZGFwdGVyIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI0ZpbGVTeXN0ZW1BZGFwdGVyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0ZpbGVTeXN0ZW1BZGFwdGVyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsZVN5c3RlbUFkYXB0ZXJDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8RmlsZVN5c3RlbUFkYXB0ZXI+IHtcbiAgcmV0dXJuIEZpbGVTeXN0ZW1BZGFwdGVyIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxGaWxlU3lzdGVtQWRhcHRlcj47XG59XG4iLCAiaW1wb3J0IHsgRnV6enlTdWdnZXN0TW9kYWwgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jRnV6enlTdWdnZXN0TW9kYWx9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jRnV6enlTdWdnZXN0TW9kYWx9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGdXp6eVN1Z2dlc3RNb2RhbENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxGdXp6eVN1Z2dlc3RNb2RhbDx1bmtub3duPj4ge1xuICByZXR1cm4gRnV6enlTdWdnZXN0TW9kYWwgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEZ1enp5U3VnZ2VzdE1vZGFsPHVua25vd24+Pjtcbn1cbiIsICJpbXBvcnQgeyBIb3ZlclBvcG92ZXIgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jSG92ZXJQb3BvdmVyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0hvdmVyUG9wb3Zlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEhvdmVyUG9wb3ZlckNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxIb3ZlclBvcG92ZXI+IHtcbiAgcmV0dXJuIEhvdmVyUG9wb3ZlciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8SG92ZXJQb3BvdmVyPjtcbn1cbiIsICJpbXBvcnQgeyBLZXltYXAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jS2V5bWFwfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0tleW1hcH0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEtleW1hcENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxLZXltYXA+IHtcbiAgcmV0dXJuIEtleW1hcCBhcyBFeHRyYWN0Q29uc3RydWN0b3I8S2V5bWFwPjtcbn1cbiIsICJpbXBvcnQgeyBNYXJrZG93blByZXZpZXdSZW5kZXJlciB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNNYXJrZG93blByZXZpZXdSZW5kZXJlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNNYXJrZG93blByZXZpZXdSZW5kZXJlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hcmtkb3duUHJldmlld1JlbmRlcmVyQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPE1hcmtkb3duUHJldmlld1JlbmRlcmVyPiB7XG4gIHJldHVybiBNYXJrZG93blByZXZpZXdSZW5kZXJlciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8TWFya2Rvd25QcmV2aWV3UmVuZGVyZXI+O1xufVxuIiwgImltcG9ydCB7IE1hcmtkb3duUHJldmlld1ZpZXcgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jTWFya2Rvd25QcmV2aWV3Vmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNNYXJrZG93blByZXZpZXdWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFya2Rvd25QcmV2aWV3Vmlld0NvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxNYXJrZG93blByZXZpZXdWaWV3PiB7XG4gIHJldHVybiBNYXJrZG93blByZXZpZXdWaWV3IGFzIHVua25vd24gYXMgRXh0cmFjdENvbnN0cnVjdG9yPE1hcmtkb3duUHJldmlld1ZpZXc+O1xufVxuIiwgImltcG9ydCB7IE1hcmtkb3duUmVuZGVyQ2hpbGQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jTWFya2Rvd25SZW5kZXJDaGlsZH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNNYXJrZG93blJlbmRlckNoaWxkfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFya2Rvd25SZW5kZXJDaGlsZENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxNYXJrZG93blJlbmRlckNoaWxkPiB7XG4gIHJldHVybiBNYXJrZG93blJlbmRlckNoaWxkIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxNYXJrZG93blJlbmRlckNoaWxkPjtcbn1cbiIsICJpbXBvcnQgeyBNYXJrZG93blJlbmRlcmVyIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI01hcmtkb3duUmVuZGVyZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jTWFya2Rvd25SZW5kZXJlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1hcmtkb3duUmVuZGVyZXJDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8TWFya2Rvd25SZW5kZXJlcj4ge1xuICByZXR1cm4gTWFya2Rvd25SZW5kZXJlciBhcyB1bmtub3duIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxNYXJrZG93blJlbmRlcmVyPjtcbn1cbiIsICJpbXBvcnQgeyBNZW51IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI01lbnV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jTWVudX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1lbnVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8TWVudT4ge1xuICByZXR1cm4gTWVudSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8TWVudT47XG59XG4iLCAiaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jTWVudUl0ZW19IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jTWVudUl0ZW19IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNZW51SXRlbUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxNZW51SXRlbT4ge1xuICByZXR1cm4gTWVudUl0ZW0gYXMgdW5rbm93biBhcyBFeHRyYWN0Q29uc3RydWN0b3I8TWVudUl0ZW0+O1xufVxuIiwgImltcG9ydCB7IE1lbnVTZXBhcmF0b3IgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jTWVudVNlcGFyYXRvcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNNZW51U2VwYXJhdG9yfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWVudVNlcGFyYXRvckNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxNZW51U2VwYXJhdG9yPiB7XG4gIHJldHVybiBNZW51U2VwYXJhdG9yIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxNZW51U2VwYXJhdG9yPjtcbn1cbiIsICJpbXBvcnQgeyBNZXRhZGF0YUNhY2hlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI01ldGFkYXRhQ2FjaGV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jTWV0YWRhdGFDYWNoZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1ldGFkYXRhQ2FjaGVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8TWV0YWRhdGFDYWNoZT4ge1xuICByZXR1cm4gTWV0YWRhdGFDYWNoZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8TWV0YWRhdGFDYWNoZT47XG59XG4iLCAiaW1wb3J0IHsgTW9kYWwgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jTW9kYWx9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jTW9kYWx9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNb2RhbENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxNb2RhbD4ge1xuICByZXR1cm4gTW9kYWwgYXMgRXh0cmFjdENvbnN0cnVjdG9yPE1vZGFsPjtcbn1cbiIsICJpbXBvcnQgeyBOb3RpY2UgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jTm90aWNlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI05vdGljZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5vdGljZUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxOb3RpY2U+IHtcbiAgcmV0dXJuIE5vdGljZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8Tm90aWNlPjtcbn1cbiIsICJpbXBvcnQgeyBSZW5kZXJDb250ZXh0IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1JlbmRlckNvbnRleHR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jUmVuZGVyQ29udGV4dH0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlbmRlckNvbnRleHRDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8UmVuZGVyQ29udGV4dD4ge1xuICByZXR1cm4gUmVuZGVyQ29udGV4dCBhcyBFeHRyYWN0Q29uc3RydWN0b3I8UmVuZGVyQ29udGV4dD47XG59XG4iLCAiaW1wb3J0IHsgU2NvcGUgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jU2NvcGV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jU2NvcGV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY29wZUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxTY29wZT4ge1xuICByZXR1cm4gU2NvcGUgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFNjb3BlPjtcbn1cbiIsICJpbXBvcnQgeyBTZWNyZXRTdG9yYWdlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1NlY3JldFN0b3JhZ2V9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jU2VjcmV0U3RvcmFnZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlY3JldFN0b3JhZ2VDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8U2VjcmV0U3RvcmFnZT4ge1xuICByZXR1cm4gU2VjcmV0U3RvcmFnZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8U2VjcmV0U3RvcmFnZT47XG59XG4iLCAiaW1wb3J0IHsgU2V0dGluZyB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNTZXR0aW5nfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1NldHRpbmd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXR0aW5nQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFNldHRpbmc+IHtcbiAgcmV0dXJuIFNldHRpbmcgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFNldHRpbmc+O1xufVxuIiwgImltcG9ydCB7IFNldHRpbmdHcm91cCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNTZXR0aW5nR3JvdXB9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jU2V0dGluZ0dyb3VwfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2V0dGluZ0dyb3VwQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFNldHRpbmdHcm91cD4ge1xuICByZXR1cm4gU2V0dGluZ0dyb3VwIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxTZXR0aW5nR3JvdXA+O1xufVxuIiwgImltcG9ydCB7IFNldHRpbmdQYWdlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1NldHRpbmdQYWdlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1NldHRpbmdQYWdlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2V0dGluZ1BhZ2VDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8U2V0dGluZ1BhZ2U+IHtcbiAgcmV0dXJuIFNldHRpbmdQYWdlIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxTZXR0aW5nUGFnZT47XG59XG4iLCAiaW1wb3J0IHsgU2V0dGluZ1RhYiB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNTZXR0aW5nVGFifSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1NldHRpbmdUYWJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZXR0aW5nVGFiQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFNldHRpbmdUYWI+IHtcbiAgcmV0dXJuIFNldHRpbmdUYWIgYXMgdW5rbm93biBhcyBFeHRyYWN0Q29uc3RydWN0b3I8U2V0dGluZ1RhYj47XG59XG4iLCAiaW1wb3J0IHsgVEFic3RyYWN0RmlsZSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNUQWJzdHJhY3RGaWxlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1RBYnN0cmFjdEZpbGV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUQWJzdHJhY3RGaWxlQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFRBYnN0cmFjdEZpbGU+IHtcbiAgcmV0dXJuIFRBYnN0cmFjdEZpbGUgYXMgdW5rbm93biBhcyBFeHRyYWN0Q29uc3RydWN0b3I8VEFic3RyYWN0RmlsZT47XG59XG4iLCAiaW1wb3J0IHsgVGFza3MgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgQ29uc3RydWN0b3JCYXNlIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9Db25zdHJ1Y3RvckJhc2UuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jVGFza3N9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jVGFza3N9IGNvbnN0cnVjdG9yLlxuICogQHJlbWFyayBDb25zdHJ1Y3RvciBpcyBgbnVsbGAuIFNlZSB7QGxpbmsgaHR0cHM6Ly9mb3J1bS5vYnNpZGlhbi5tZC90L2FwaS1idWctdGFza3MtY2xhc3MvOTg5OTN9LlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYXNrc0NvbnN0cnVjdG9yKCk6IENvbnN0cnVjdG9yQmFzZTxbXSwgVGFza3M+IHtcbiAgcmV0dXJuIFRhc2tzIGFzIENvbnN0cnVjdG9yQmFzZTxbXSwgVGFza3M+O1xufVxuIiwgImltcG9ydCB7IFRGaWxlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1RGaWxlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1RGaWxlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VEZpbGVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8VEZpbGU+IHtcbiAgcmV0dXJuIFRGaWxlIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxURmlsZT47XG59XG4iLCAiaW1wb3J0IHsgVEZvbGRlciB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNURm9sZGVyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1RGb2xkZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRURm9sZGVyQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFRGb2xkZXI+IHtcbiAgcmV0dXJuIFRGb2xkZXIgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFRGb2xkZXI+O1xufVxuIiwgImltcG9ydCB7IFZhdWx0IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1ZhdWx0fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1ZhdWx0fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmF1bHRDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8VmF1bHQ+IHtcbiAgcmV0dXJuIFZhdWx0IGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxWYXVsdD47XG59XG4iLCAiaW1wb3J0IHsgV29ya3NwYWNlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1dvcmtzcGFjZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2V9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXb3Jrc3BhY2VDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8V29ya3NwYWNlPiB7XG4gIHJldHVybiBXb3Jrc3BhY2UgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFdvcmtzcGFjZT47XG59XG4iLCAiaW1wb3J0IHsgV29ya3NwYWNlQ29udGFpbmVyIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1dvcmtzcGFjZUNvbnRhaW5lcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VDb250YWluZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXb3Jrc3BhY2VDb250YWluZXJDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8V29ya3NwYWNlQ29udGFpbmVyPiB7XG4gIHJldHVybiBXb3Jrc3BhY2VDb250YWluZXIgYXMgdW5rbm93biBhcyBFeHRyYWN0Q29uc3RydWN0b3I8V29ya3NwYWNlQ29udGFpbmVyPjtcbn1cbiIsICJpbXBvcnQgeyBXb3Jrc3BhY2VGbG9hdGluZyB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VGbG9hdGluZ30gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VGbG9hdGluZ30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdvcmtzcGFjZUZsb2F0aW5nQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFdvcmtzcGFjZUZsb2F0aW5nPiB7XG4gIHJldHVybiBXb3Jrc3BhY2VGbG9hdGluZyBhcyBFeHRyYWN0Q29uc3RydWN0b3I8V29ya3NwYWNlRmxvYXRpbmc+O1xufVxuIiwgImltcG9ydCB7IFdvcmtzcGFjZUl0ZW0gfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jV29ya3NwYWNlSXRlbX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VJdGVtfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29ya3NwYWNlSXRlbUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VJdGVtPiB7XG4gIHJldHVybiBXb3Jrc3BhY2VJdGVtIGFzIHVua25vd24gYXMgRXh0cmFjdENvbnN0cnVjdG9yPFdvcmtzcGFjZUl0ZW0+O1xufVxuIiwgImltcG9ydCB7IFdvcmtzcGFjZUxlYWYgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jV29ya3NwYWNlTGVhZn0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VMZWFmfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29ya3NwYWNlTGVhZkNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VMZWFmPiB7XG4gIHJldHVybiBXb3Jrc3BhY2VMZWFmIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VMZWFmPjtcbn1cbiIsICJpbXBvcnQgeyBXb3Jrc3BhY2VNb2JpbGVEcmF3ZXIgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jV29ya3NwYWNlTW9iaWxlRHJhd2VyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1dvcmtzcGFjZU1vYmlsZURyYXdlcn0gY29uc3RydWN0b3IuXG4gKiBAcmVtYXJrIENvbnN0cnVjdG9yIGlzIGBudWxsYC4gU2VlIHtAbGluayBodHRwczovL2ZvcnVtLm9ic2lkaWFuLm1kL3QvYXBpLWJ1Zy10YXNrcy1jbGFzcy85ODk5M30uXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdvcmtzcGFjZU1vYmlsZURyYXdlckNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VNb2JpbGVEcmF3ZXI+IHtcbiAgcmV0dXJuIFdvcmtzcGFjZU1vYmlsZURyYXdlciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8V29ya3NwYWNlTW9iaWxlRHJhd2VyPjtcbn1cbiIsICJpbXBvcnQgeyBXb3Jrc3BhY2VQYXJlbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jV29ya3NwYWNlUGFyZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1dvcmtzcGFjZVBhcmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdvcmtzcGFjZVBhcmVudENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VQYXJlbnQ+IHtcbiAgcmV0dXJuIFdvcmtzcGFjZVBhcmVudCBhcyB1bmtub3duIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VQYXJlbnQ+O1xufVxuIiwgImltcG9ydCB7IFdvcmtzcGFjZVJpYmJvbiB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VSaWJib259IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jV29ya3NwYWNlUmliYm9ufSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29ya3NwYWNlUmliYm9uQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFdvcmtzcGFjZVJpYmJvbj4ge1xuICByZXR1cm4gV29ya3NwYWNlUmliYm9uIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VSaWJib24+O1xufVxuIiwgImltcG9ydCB7IFdvcmtzcGFjZVJvb3QgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jV29ya3NwYWNlUm9vdH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VSb290fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29ya3NwYWNlUm9vdENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VSb290PiB7XG4gIHJldHVybiBXb3Jrc3BhY2VSb290IGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VSb290Pjtcbn1cbiIsICJpbXBvcnQgeyBXb3Jrc3BhY2VTaWRlZG9jayB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VTaWRlZG9ja30gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VTaWRlZG9ja30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdvcmtzcGFjZVNpZGVkb2NrQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFdvcmtzcGFjZVNpZGVkb2NrPiB7XG4gIHJldHVybiBXb3Jrc3BhY2VTaWRlZG9jayBhcyBFeHRyYWN0Q29uc3RydWN0b3I8V29ya3NwYWNlU2lkZWRvY2s+O1xufVxuIiwgImltcG9ydCB7IFdvcmtzcGFjZVNwbGl0IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1dvcmtzcGFjZVNwbGl0fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1dvcmtzcGFjZVNwbGl0fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29ya3NwYWNlU3BsaXRDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8V29ya3NwYWNlU3BsaXQ+IHtcbiAgcmV0dXJuIFdvcmtzcGFjZVNwbGl0IGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VTcGxpdD47XG59XG4iLCAiaW1wb3J0IHsgV29ya3NwYWNlVGFicyB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VUYWJzfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1dvcmtzcGFjZVRhYnN9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRXb3Jrc3BhY2VUYWJzQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFdvcmtzcGFjZVRhYnM+IHtcbiAgcmV0dXJuIFdvcmtzcGFjZVRhYnMgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFdvcmtzcGFjZVRhYnM+O1xufVxuIiwgImltcG9ydCB7IFdvcmtzcGFjZVdpbmRvdyB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2VXaW5kb3d9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jV29ya3NwYWNlV2luZG93fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29ya3NwYWNlV2luZG93Q29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFdvcmtzcGFjZVdpbmRvdz4ge1xuICByZXR1cm4gV29ya3NwYWNlV2luZG93IGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxXb3Jrc3BhY2VXaW5kb3c+O1xufVxuIiwgImltcG9ydCB7IEFic3RyYWN0VGV4dENvbXBvbmVudCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNBYnN0cmFjdFRleHRDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jQWJzdHJhY3RUZXh0Q29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWJzdHJhY3RUZXh0Q29tcG9uZW50Q29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFxuICBBYnN0cmFjdFRleHRDb21wb25lbnQ8SFRNTElucHV0RWxlbWVudCB8IEhUTUxUZXh0QXJlYUVsZW1lbnQ+XG4+IHtcbiAgcmV0dXJuIEFic3RyYWN0VGV4dENvbXBvbmVudCBhcyBFeHRyYWN0Q29uc3RydWN0b3I8XG4gICAgQWJzdHJhY3RUZXh0Q29tcG9uZW50PEhUTUxJbnB1dEVsZW1lbnQgfCBIVE1MVGV4dEFyZWFFbGVtZW50PlxuICA+O1xufVxuIiwgImltcG9ydCB7IEJhc2VDb21wb25lbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jQmFzZUNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNCYXNlQ29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFzZUNvbXBvbmVudENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxCYXNlQ29tcG9uZW50PiB7XG4gIHJldHVybiBCYXNlQ29tcG9uZW50IGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxCYXNlQ29tcG9uZW50Pjtcbn1cbiIsICJpbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jQnV0dG9uQ29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0J1dHRvbkNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1dHRvbkNvbXBvbmVudENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxCdXR0b25Db21wb25lbnQ+IHtcbiAgcmV0dXJuIEJ1dHRvbkNvbXBvbmVudCBhcyBFeHRyYWN0Q29uc3RydWN0b3I8QnV0dG9uQ29tcG9uZW50Pjtcbn1cbiIsICJpbXBvcnQgeyBDb2xvckNvbXBvbmVudCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNDb2xvckNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNDb2xvckNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbG9yQ29tcG9uZW50Q29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPENvbG9yQ29tcG9uZW50PiB7XG4gIHJldHVybiBDb2xvckNvbXBvbmVudCBhcyBFeHRyYWN0Q29uc3RydWN0b3I8Q29sb3JDb21wb25lbnQ+O1xufVxuIiwgImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jQ29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29tcG9uZW50Q29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPENvbXBvbmVudD4ge1xuICByZXR1cm4gQ29tcG9uZW50IGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxDb21wb25lbnQ+O1xufVxuIiwgImltcG9ydCB7IENvbmZpcm1hdGlvbkJ1dHRvbiB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNDb25maXJtYXRpb25CdXR0b259IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jQ29uZmlybWF0aW9uQnV0dG9ufSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uZmlybWF0aW9uQnV0dG9uQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPENvbmZpcm1hdGlvbkJ1dHRvbj4ge1xuICByZXR1cm4gQ29uZmlybWF0aW9uQnV0dG9uIGFzIHVua25vd24gYXMgRXh0cmFjdENvbnN0cnVjdG9yPENvbmZpcm1hdGlvbkJ1dHRvbj47XG59XG4iLCAiaW1wb3J0IHsgRGlzcGxheVZhbHVlQ29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI0Rpc3BsYXlWYWx1ZUNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNEaXNwbGF5VmFsdWVDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXNwbGF5VmFsdWVDb21wb25lbnRDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8RGlzcGxheVZhbHVlQ29tcG9uZW50PiB7XG4gIHJldHVybiBEaXNwbGF5VmFsdWVDb21wb25lbnQgYXMgRXh0cmFjdENvbnN0cnVjdG9yPERpc3BsYXlWYWx1ZUNvbXBvbmVudD47XG59XG4iLCAiaW1wb3J0IHsgRHJvcGRvd25Db21wb25lbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jRHJvcGRvd25Db21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jRHJvcGRvd25Db21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREcm9wZG93bkNvbXBvbmVudENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxEcm9wZG93bkNvbXBvbmVudD4ge1xuICByZXR1cm4gRHJvcGRvd25Db21wb25lbnQgYXMgRXh0cmFjdENvbnN0cnVjdG9yPERyb3Bkb3duQ29tcG9uZW50Pjtcbn1cbiIsICJpbXBvcnQgeyBFeHRyYUJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNFeHRyYUJ1dHRvbkNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNFeHRyYUJ1dHRvbkNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEV4dHJhQnV0dG9uQ29tcG9uZW50Q29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPEV4dHJhQnV0dG9uQ29tcG9uZW50PiB7XG4gIHJldHVybiBFeHRyYUJ1dHRvbkNvbXBvbmVudCBhcyBFeHRyYWN0Q29uc3RydWN0b3I8RXh0cmFCdXR0b25Db21wb25lbnQ+O1xufVxuIiwgImltcG9ydCB7IE1vbWVudEZvcm1hdENvbXBvbmVudCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNNb21lbnRGb3JtYXRDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jTW9tZW50Rm9ybWF0Q29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9tZW50Rm9ybWF0Q29tcG9uZW50Q29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPE1vbWVudEZvcm1hdENvbXBvbmVudD4ge1xuICByZXR1cm4gTW9tZW50Rm9ybWF0Q29tcG9uZW50IGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxNb21lbnRGb3JtYXRDb21wb25lbnQ+O1xufVxuIiwgImltcG9ydCB7IFByb2dyZXNzQmFyQ29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1Byb2dyZXNzQmFyQ29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1Byb2dyZXNzQmFyQ29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJvZ3Jlc3NCYXJDb21wb25lbnRDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8UHJvZ3Jlc3NCYXJDb21wb25lbnQ+IHtcbiAgcmV0dXJuIFByb2dyZXNzQmFyQ29tcG9uZW50IGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxQcm9ncmVzc0JhckNvbXBvbmVudD47XG59XG4iLCAiaW1wb3J0IHsgU2VhcmNoQ29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1NlYXJjaENvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNTZWFyY2hDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWFyY2hDb21wb25lbnRDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8U2VhcmNoQ29tcG9uZW50PiB7XG4gIHJldHVybiBTZWFyY2hDb21wb25lbnQgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFNlYXJjaENvbXBvbmVudD47XG59XG4iLCAiaW1wb3J0IHsgU2VjcmV0Q29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1NlY3JldENvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNTZWNyZXRDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWNyZXRDb21wb25lbnRDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8U2VjcmV0Q29tcG9uZW50PiB7XG4gIHJldHVybiBTZWNyZXRDb21wb25lbnQgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFNlY3JldENvbXBvbmVudD47XG59XG4iLCAiaW1wb3J0IHsgU2xpZGVyQ29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1NsaWRlckNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNTbGlkZXJDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTbGlkZXJDb21wb25lbnRDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8U2xpZGVyQ29tcG9uZW50PiB7XG4gIHJldHVybiBTbGlkZXJDb21wb25lbnQgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFNsaWRlckNvbXBvbmVudD47XG59XG4iLCAiaW1wb3J0IHsgVGV4dEFyZWFDb21wb25lbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jVGV4dEFyZWFDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jVGV4dEFyZWFDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUZXh0QXJlYUNvbXBvbmVudENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxUZXh0QXJlYUNvbXBvbmVudD4ge1xuICByZXR1cm4gVGV4dEFyZWFDb21wb25lbnQgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFRleHRBcmVhQ29tcG9uZW50Pjtcbn1cbiIsICJpbXBvcnQgeyBUZXh0Q29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1RleHRDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jVGV4dENvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRleHRDb21wb25lbnRDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8VGV4dENvbXBvbmVudD4ge1xuICByZXR1cm4gVGV4dENvbXBvbmVudCBhcyBFeHRyYWN0Q29uc3RydWN0b3I8VGV4dENvbXBvbmVudD47XG59XG4iLCAiaW1wb3J0IHsgVG9nZ2xlQ29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1RvZ2dsZUNvbXBvbmVudH0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNUb2dnbGVDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUb2dnbGVDb21wb25lbnRDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8VG9nZ2xlQ29tcG9uZW50PiB7XG4gIHJldHVybiBUb2dnbGVDb21wb25lbnQgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFRvZ2dsZUNvbXBvbmVudD47XG59XG4iLCAiaW1wb3J0IHsgVmFsdWVDb21wb25lbnQgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jVmFsdWVDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jVmFsdWVDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWYWx1ZUNvbXBvbmVudENvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxWYWx1ZUNvbXBvbmVudDx1bmtub3duPj4ge1xuICByZXR1cm4gVmFsdWVDb21wb25lbnQgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFZhbHVlQ29tcG9uZW50PHVua25vd24+Pjtcbn1cbiIsICJpbXBvcnQgeyBCb29sZWFuVmFsdWUgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jQm9vbGVhblZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0Jvb2xlYW5WYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJvb2xlYW5WYWx1ZUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxCb29sZWFuVmFsdWU+IHtcbiAgcmV0dXJuIEJvb2xlYW5WYWx1ZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8Qm9vbGVhblZhbHVlPjtcbn1cbiIsICJpbXBvcnQgeyBEYXRlVmFsdWUgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jRGF0ZVZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0RhdGVWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGVWYWx1ZUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxEYXRlVmFsdWU+IHtcbiAgcmV0dXJuIERhdGVWYWx1ZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8RGF0ZVZhbHVlPjtcbn1cbiIsICJpbXBvcnQgeyBEdXJhdGlvblZhbHVlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI0R1cmF0aW9uVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jRHVyYXRpb25WYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldER1cmF0aW9uVmFsdWVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8RHVyYXRpb25WYWx1ZT4ge1xuICByZXR1cm4gRHVyYXRpb25WYWx1ZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8RHVyYXRpb25WYWx1ZT47XG59XG4iLCAiaW1wb3J0IHsgRmlsZVZhbHVlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI0ZpbGVWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNGaWxlVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlVmFsdWVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8RmlsZVZhbHVlPiB7XG4gIHJldHVybiBGaWxlVmFsdWUgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEZpbGVWYWx1ZT47XG59XG4iLCAiaW1wb3J0IHsgSFRNTFZhbHVlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI0hUTUxWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNIVE1MVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRIVE1MVmFsdWVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8SFRNTFZhbHVlPiB7XG4gIHJldHVybiBIVE1MVmFsdWUgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEhUTUxWYWx1ZT47XG59XG4iLCAiaW1wb3J0IHsgSWNvblZhbHVlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI0ljb25WYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNJY29uVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJY29uVmFsdWVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8SWNvblZhbHVlPiB7XG4gIHJldHVybiBJY29uVmFsdWUgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEljb25WYWx1ZT47XG59XG4iLCAiaW1wb3J0IHsgSW1hZ2VWYWx1ZSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNJbWFnZVZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI0ltYWdlVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbWFnZVZhbHVlQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPEltYWdlVmFsdWU+IHtcbiAgcmV0dXJuIEltYWdlVmFsdWUgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEltYWdlVmFsdWU+O1xufVxuIiwgImltcG9ydCB7IExpbmtWYWx1ZSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNMaW5rVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jTGlua1ZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGlua1ZhbHVlQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPExpbmtWYWx1ZT4ge1xuICByZXR1cm4gTGlua1ZhbHVlIGFzIHVua25vd24gYXMgRXh0cmFjdENvbnN0cnVjdG9yPExpbmtWYWx1ZT47XG59XG4iLCAiaW1wb3J0IHsgTGlzdFZhbHVlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI0xpc3RWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNMaXN0VmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMaXN0VmFsdWVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8TGlzdFZhbHVlPiB7XG4gIHJldHVybiBMaXN0VmFsdWUgYXMgRXh0cmFjdENvbnN0cnVjdG9yPExpc3RWYWx1ZT47XG59XG4iLCAiaW1wb3J0IHsgTm90TnVsbFZhbHVlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI05vdE51bGxWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNOb3ROdWxsVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROb3ROdWxsVmFsdWVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8Tm90TnVsbFZhbHVlPiB7XG4gIHJldHVybiBOb3ROdWxsVmFsdWUgYXMgdW5rbm93biBhcyBFeHRyYWN0Q29uc3RydWN0b3I8Tm90TnVsbFZhbHVlPjtcbn1cbiIsICJpbXBvcnQgeyBOdWxsVmFsdWUgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jTnVsbFZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI051bGxWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE51bGxWYWx1ZUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxOdWxsVmFsdWU+IHtcbiAgcmV0dXJuIE51bGxWYWx1ZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8TnVsbFZhbHVlPjtcbn1cbiIsICJpbXBvcnQgeyBOdW1iZXJWYWx1ZSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNOdW1iZXJWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNOdW1iZXJWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE51bWJlclZhbHVlQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPE51bWJlclZhbHVlPiB7XG4gIHJldHVybiBOdW1iZXJWYWx1ZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8TnVtYmVyVmFsdWU+O1xufVxuIiwgImltcG9ydCB7IE9iamVjdFZhbHVlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI09iamVjdFZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI09iamVjdFZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T2JqZWN0VmFsdWVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8T2JqZWN0VmFsdWU+IHtcbiAgcmV0dXJuIE9iamVjdFZhbHVlIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxPYmplY3RWYWx1ZT47XG59XG4iLCAiaW1wb3J0IHsgUmVnRXhwVmFsdWUgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jUmVnRXhwVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jUmVnRXhwVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZWdFeHBWYWx1ZUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxSZWdFeHBWYWx1ZT4ge1xuICByZXR1cm4gUmVnRXhwVmFsdWUgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFJlZ0V4cFZhbHVlPjtcbn1cbiIsICJpbXBvcnQgeyBSZWxhdGl2ZURhdGVWYWx1ZSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNSZWxhdGl2ZURhdGVWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNSZWxhdGl2ZURhdGVWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlbGF0aXZlRGF0ZVZhbHVlQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFJlbGF0aXZlRGF0ZVZhbHVlPiB7XG4gIHJldHVybiBSZWxhdGl2ZURhdGVWYWx1ZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8UmVsYXRpdmVEYXRlVmFsdWU+O1xufVxuIiwgImltcG9ydCB7IFN0cmluZ1ZhbHVlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1N0cmluZ1ZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1N0cmluZ1ZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U3RyaW5nVmFsdWVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8U3RyaW5nVmFsdWU+IHtcbiAgcmV0dXJuIFN0cmluZ1ZhbHVlIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxTdHJpbmdWYWx1ZT47XG59XG4iLCAiaW1wb3J0IHsgVGFnVmFsdWUgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgb2JzaWRpYW4jVGFnVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jVGFnVmFsdWV9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWdWYWx1ZUNvbnN0cnVjdG9yKCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxUYWdWYWx1ZT4ge1xuICByZXR1cm4gVGFnVmFsdWUgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFRhZ1ZhbHVlPjtcbn1cbiIsICJpbXBvcnQgeyBVcmxWYWx1ZSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBvYnNpZGlhbiNVcmxWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNVcmxWYWx1ZX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFVybFZhbHVlQ29uc3RydWN0b3IoKTogRXh0cmFjdENvbnN0cnVjdG9yPFVybFZhbHVlPiB7XG4gIHJldHVybiBVcmxWYWx1ZSBhcyBFeHRyYWN0Q29uc3RydWN0b3I8VXJsVmFsdWU+O1xufVxuIiwgImltcG9ydCB7IFZhbHVlIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1ZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIG9ic2lkaWFuI1ZhbHVlfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsdWVDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8VmFsdWU+IHtcbiAgcmV0dXJuIFZhbHVlIGFzIHVua25vd24gYXMgRXh0cmFjdENvbnN0cnVjdG9yPFZhbHVlPjtcbn1cbiIsICJpbXBvcnQgeyBFZGl0YWJsZUZpbGVWaWV3IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI0VkaXRhYmxlRmlsZVZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgb2JzaWRpYW4jRWRpdGFibGVGaWxlVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVkaXRhYmxlRmlsZVZpZXdDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8RWRpdGFibGVGaWxlVmlldz4ge1xuICByZXR1cm4gRWRpdGFibGVGaWxlVmlldyBhcyBFeHRyYWN0Q29uc3RydWN0b3I8RWRpdGFibGVGaWxlVmlldz47XG59XG4iLCAiaW1wb3J0IHsgTWFya2Rvd25WaWV3IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI01hcmtkb3duVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHJldHVybnMgVGhlIHtAbGluayBvYnNpZGlhbiNNYXJrZG93blZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYXJrZG93blZpZXdDb25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8TWFya2Rvd25WaWV3PiB7XG4gIHJldHVybiBNYXJrZG93blZpZXcgYXMgRXh0cmFjdENvbnN0cnVjdG9yPE1hcmtkb3duVmlldz47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgQXBwTWVudUJhck1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvQXBwTWVudUJhck1hbmFnZXIuZC50cyc7XG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEFwcE1lbnVCYXJNYW5hZ2VyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgQXBwTWVudUJhck1hbmFnZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBcHBNZW51QmFyTWFuYWdlckNvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPEFwcE1lbnVCYXJNYW5hZ2VyPiB7XG4gIHJldHVybiBhcHAuYXBwTWVudUJhck1hbmFnZXIuY29uc3RydWN0b3IgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEFwcE1lbnVCYXJNYW5hZ2VyPjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBBcHBTZXR0aW5nIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0FwcFNldHRpbmcuZC50cyc7XG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEFwcFNldHRpbmd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIHtAbGluayBBcHBTZXR0aW5nfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXBwU2V0dGluZ0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPEFwcFNldHRpbmc+IHtcbiAgcmV0dXJuIGFwcC5zZXR0aW5nLmNvbnN0cnVjdG9yIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxBcHBTZXR0aW5nPjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBDbGkgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY2xpL0NsaS5kLnRzJztcbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgQ2xpfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgQ2xpfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2xpQ29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8Q2xpPiB7XG4gIHJldHVybiBhcHAuY2xpLmNvbnN0cnVjdG9yIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxDbGk+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IENvbW1hbmRzIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbW1hbmRzL0NvbW1hbmRzLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBDb21tYW5kc30gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIENvbW1hbmRzfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29tbWFuZHNDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxDb21tYW5kcz4ge1xuICByZXR1cm4gYXBwLmNvbW1hbmRzLmNvbnN0cnVjdG9yIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxDb21tYW5kcz47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbUNTUyB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jdXN0b20tY3NzL0N1c3RvbUNTUy5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBDdXN0b21DU1N9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIHtAbGluayBDdXN0b21DU1N9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDdXN0b21DU1NDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxDdXN0b21DU1M+IHtcbiAgcmV0dXJuIGFwcC5jdXN0b21Dc3MuY29uc3RydWN0b3IgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEN1c3RvbUNTUz47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IERyYWdNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2RyYWctbWFuYWdlci9EcmFnTWFuYWdlci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBEcmFnTWFuYWdlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIERyYWdNYW5hZ2VyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RHJhZ01hbmFnZXJDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxEcmFnTWFuYWdlcj4ge1xuICByZXR1cm4gYXBwLmRyYWdNYW5hZ2VyLmNvbnN0cnVjdG9yIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxEcmFnTWFuYWdlcj47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IEVkaXRvclN1Z2dlc3RzIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0VkaXRvclN1Z2dlc3RzLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEVkaXRvclN1Z2dlc3RzfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgRWRpdG9yU3VnZ2VzdHN9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFZGl0b3JTdWdnZXN0c0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPEVkaXRvclN1Z2dlc3RzPiB7XG4gIHJldHVybiBhcHAud29ya3NwYWNlLmVkaXRvclN1Z2dlc3QuY29uc3RydWN0b3IgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEVkaXRvclN1Z2dlc3RzPjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgRW1iZWRSZWdpc3RyeSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9lbWJlZC1yZWdpc3RyeS9FbWJlZFJlZ2lzdHJ5LmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEVtYmVkUmVnaXN0cnl9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIHtAbGluayBFbWJlZFJlZ2lzdHJ5fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW1iZWRSZWdpc3RyeUNvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPEVtYmVkUmVnaXN0cnk+IHtcbiAgcmV0dXJuIGFwcC5lbWJlZFJlZ2lzdHJ5LmNvbnN0cnVjdG9yIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxFbWJlZFJlZ2lzdHJ5Pjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgRm9sZE1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvRm9sZE1hbmFnZXIuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgRm9sZE1hbmFnZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIHtAbGluayBGb2xkTWFuYWdlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEZvbGRNYW5hZ2VyQ29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8Rm9sZE1hbmFnZXI+IHtcbiAgcmV0dXJuIGFwcC5mb2xkTWFuYWdlci5jb25zdHJ1Y3RvciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8Rm9sZE1hbmFnZXI+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IEZyYW1lRG9tIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL0ZyYW1lRG9tLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEZyYW1lRG9tfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIEZyYW1lRG9tfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RnJhbWVEb21Db25zdHJ1Y3RvcigpOiBFeHRyYWN0Q29uc3RydWN0b3I8RnJhbWVEb20+IHtcbiAgcmV0dXJuIHdpbmRvdy5mcmFtZURvbS5jb25zdHJ1Y3RvciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8RnJhbWVEb20+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBIb3RrZXlNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2hvdGtleS1tYW5hZ2VyL0hvdGtleU1hbmFnZXIuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgSG90a2V5TWFuYWdlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIEhvdGtleU1hbmFnZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRIb3RrZXlNYW5hZ2VyQ29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8SG90a2V5TWFuYWdlcj4ge1xuICByZXR1cm4gYXBwLmhvdGtleU1hbmFnZXIuY29uc3RydWN0b3IgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEhvdGtleU1hbmFnZXI+O1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBNZXRhZGF0YVR5cGVNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL21ldGFkYXRhLXR5cGUtbWFuYWdlci9NZXRhZGF0YVR5cGVNYW5hZ2VyLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIE1ldGFkYXRhVHlwZU1hbmFnZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIHtAbGluayBNZXRhZGF0YVR5cGVNYW5hZ2VyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWV0YWRhdGFUeXBlTWFuYWdlckNvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPE1ldGFkYXRhVHlwZU1hbmFnZXI+IHtcbiAgcmV0dXJuIGFwcC5tZXRhZGF0YVR5cGVNYW5hZ2VyLmNvbnN0cnVjdG9yIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxNZXRhZGF0YVR5cGVNYW5hZ2VyPjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5ET00gfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvT2JzaWRpYW5ET00uZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgT2JzaWRpYW5ET019IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIHtAbGluayBPYnNpZGlhbkRPTX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE9ic2lkaWFuRE9NQ29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8T2JzaWRpYW5ET00+IHtcbiAgcmV0dXJuIGFwcC5kb20uY29uc3RydWN0b3IgYXMgRXh0cmFjdENvbnN0cnVjdG9yPE9ic2lkaWFuRE9NPjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgRmlsZUV4cGxvcmVyVmlldyB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9pbnRlcm5hbC1wbHVnaW5zL2ZpbGUtZXhwbG9yZXIvRmlsZUV4cGxvcmVyVmlldy5kLnRzJztcbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5TZWFyY2hRdWVyeSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9zZWFyY2gtcXVlcnkvT2JzaWRpYW5TZWFyY2hRdWVyeS5kLnRzJztcblxuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvVmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIE9ic2lkaWFuU2VhcmNoUXVlcnl9IGNvbnN0cnVjdG9yLlxuICpcbiAqIFRoZSBjbGFzcyBoYXMgbm8gcmVhY2hhYmxlIGluc3RhbmNlIHVudGlsIGEgcXVlcnkgaXMgY29tcGlsZWQsIHNvIGEgdGhyb3dhd2F5IGZpbGUgZXhwbG9yZXIgdmlldyBpcyBjcmVhdGVkXG4gKiBvbiBhIHRlbXBvcmFyeSBsZWFmLCBhIHByb2JlIGZpbHRlciBxdWVyeSBpcyBjb21waWxlZCB0aHJvdWdoIGl0LCBhbmQgdGhlIGNvbnN0cnVjdG9yIGlzIHJlYWQgb2ZmIHRoZSByZXN1bHQuXG4gKiBUaGUgbGVhZiBpcyBkZXRhY2hlZCBiZWZvcmUgcmV0dXJuaW5nLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIHtAbGluayBPYnNpZGlhblNlYXJjaFF1ZXJ5fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T2JzaWRpYW5TZWFyY2hRdWVyeUNvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPE9ic2lkaWFuU2VhcmNoUXVlcnk+IHtcbiAgY29uc3QgbGVhZiA9IGFwcC53b3Jrc3BhY2UuY3JlYXRlTGVhZkluVGFiR3JvdXAoKTtcbiAgdHJ5IHtcbiAgICBjb25zdCB2aWV3Q3JlYXRvciA9IGFwcC52aWV3UmVnaXN0cnkuZ2V0Vmlld0NyZWF0b3JCeVR5cGUoVmlld1R5cGUuRmlsZUV4cGxvcmVyKTtcbiAgICBpZiAoIXZpZXdDcmVhdG9yKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZpZXcgY3JlYXRvciBub3QgZm91bmQnKTtcbiAgICB9XG4gICAgY29uc3QgdmlldyA9IHZpZXdDcmVhdG9yKGxlYWYpIGFzIEZpbGVFeHBsb3JlclZpZXc7XG4gICAgdmlldy5vblNlYXJjaENoYW5nZWQoJ3Byb2JlJyk7XG4gICAgaWYgKCF2aWV3LnNlYXJjaFF1ZXJ5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBwcm9iZSBxdWVyeSBkaWQgbm90IGNvbXBpbGUuJyk7XG4gICAgfVxuICAgIHJldHVybiB2aWV3LnNlYXJjaFF1ZXJ5LmNvbnN0cnVjdG9yIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxPYnNpZGlhblNlYXJjaFF1ZXJ5PjtcbiAgfSBmaW5hbGx5IHtcbiAgICBsZWFmLmRldGFjaCgpO1xuICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpbnMgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvcGx1Z2lucy9QbHVnaW5zLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIFBsdWdpbnN9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIHtAbGluayBQbHVnaW5zfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGx1Z2luc0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPFBsdWdpbnM+IHtcbiAgcmV0dXJuIGFwcC5wbHVnaW5zLmNvbnN0cnVjdG9yIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxQbHVnaW5zPjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgUmVjZW50RmlsZVRyYWNrZXIgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvUmVjZW50RmlsZVRyYWNrZXIuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgUmVjZW50RmlsZVRyYWNrZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIHtAbGluayBSZWNlbnRGaWxlVHJhY2tlcn0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlY2VudEZpbGVUcmFja2VyQ29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8UmVjZW50RmlsZVRyYWNrZXI+IHtcbiAgcmV0dXJuIGFwcC53b3Jrc3BhY2UucmVjZW50RmlsZVRyYWNrZXIuY29uc3RydWN0b3IgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFJlY2VudEZpbGVUcmFja2VyPjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgU2hhcmVSZWNlaXZlciB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy9TaGFyZVJlY2VpdmVyLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIFNoYXJlUmVjZWl2ZXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIHtAbGluayBTaGFyZVJlY2VpdmVyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2hhcmVSZWNlaXZlckNvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPFNoYXJlUmVjZWl2ZXI+IHtcbiAgcmV0dXJuIGFwcC5zaGFyZVJlY2VpdmVyLmNvbnN0cnVjdG9yIGFzIEV4dHJhY3RDb25zdHJ1Y3RvcjxTaGFyZVJlY2VpdmVyPjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgU3RhdHVzQmFyIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL1N0YXR1c0Jhci5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBTdGF0dXNCYXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIHtAbGluayBTdGF0dXNCYXJ9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdGF0dXNCYXJDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxTdGF0dXNCYXI+IHtcbiAgcmV0dXJuIGFwcC5zdGF0dXNCYXIuY29uc3RydWN0b3IgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFN0YXR1c0Jhcj47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IFZpZXdSZWdpc3RyeSB9IGZyb20gJy4uLy4uLy4uL2ludGVybmFscy92aWV3LXJlZ2lzdHJ5L1ZpZXdSZWdpc3RyeS5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBWaWV3UmVnaXN0cnl9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIHtAbGluayBWaWV3UmVnaXN0cnl9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3UmVnaXN0cnlDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxWaWV3UmVnaXN0cnk+IHtcbiAgcmV0dXJuIGFwcC52aWV3UmVnaXN0cnkuY29uc3RydWN0b3IgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFZpZXdSZWdpc3RyeT47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IFdvcmtzcGFjZUxlYWZIaXN0b3J5IH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJuYWxzL3dvcmtzcGFjZS1sZWFmLWhpc3RvcnkvV29ya3NwYWNlTGVhZkhpc3RvcnkuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgV29ya3NwYWNlTGVhZkhpc3Rvcnl9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIHtAbGluayBXb3Jrc3BhY2VMZWFmSGlzdG9yeX0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdvcmtzcGFjZUxlYWZIaXN0b3J5Q29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8V29ya3NwYWNlTGVhZkhpc3Rvcnk+IHtcbiAgY29uc3QgbGVhZiA9IGFwcC53b3Jrc3BhY2UuZ2V0TW9zdFJlY2VudExlYWYoKTtcbiAgaWYgKCFsZWFmKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyB3b3Jrc3BhY2UgbGVhZiBhdmFpbGFibGUgdG8gZXh0cmFjdCBXb3Jrc3BhY2VMZWFmSGlzdG9yeSBjb25zdHJ1Y3RvcicpO1xuICB9XG4gIHJldHVybiBsZWFmLmhpc3RvcnkuY29uc3RydWN0b3IgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFdvcmtzcGFjZUxlYWZIaXN0b3J5Pjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgQmFzZXNDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvYmFzZXMvQmFzZXNDb250ZXh0LmQudHMnO1xuaW1wb3J0IHR5cGUgeyBCYXNlc1F1ZXJ5IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvYmFzZXMvQmFzZXNRdWVyeS5kLnRzJztcblxuaW1wb3J0IHsgSW50ZXJuYWxQbHVnaW5OYW1lIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29uc3RhbnRzL0ludGVybmFsUGx1Z2luTmFtZS50cyc7XG5pbXBvcnQgeyBnZXRRdWVyeUNvbnRyb2xsZXJDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uL2F1Z21lbnRhdGlvbnMvYmFzZXMvZ2V0UXVlcnlDb250cm9sbGVyQ29uc3RydWN0b3IudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEJhc2VzQ29udGV4dH0gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIEJhc2VzQ29udGV4dH0gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEJhc2VzQ29udGV4dENvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPEJhc2VzQ29udGV4dD4ge1xuICBjb25zdCBiYXNlc1BsdWdpbiA9IGFwcC5pbnRlcm5hbFBsdWdpbnMuZ2V0UGx1Z2luQnlJZChJbnRlcm5hbFBsdWdpbk5hbWUuQmFzZXMpO1xuICBpZiAoIWJhc2VzUGx1Z2luKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgJHtJbnRlcm5hbFBsdWdpbk5hbWUuQmFzZXN9IHBsdWdpbiBpcyBub3QgbG9hZGVkLmApO1xuICB9XG4gIGNvbnN0IHF1ZXJ5Q29udHJvbGxlckNvbnN0cnVjdG9yID0gZ2V0UXVlcnlDb250cm9sbGVyQ29uc3RydWN0b3IoKTtcbiAgY29uc3QgcXVlcnlDb250cm9sbGVyID0gbmV3IHF1ZXJ5Q29udHJvbGxlckNvbnN0cnVjdG9yKGFwcCwgYmFzZXNQbHVnaW4uaW5zdGFuY2UsIGNyZWF0ZURpdigpKTtcbiAgcXVlcnlDb250cm9sbGVyLnF1ZXJ5ID0ge30gYXMgQmFzZXNRdWVyeTtcbiAgY29uc3QgYmFzZXNDb250ZXh0ID0gcXVlcnlDb250cm9sbGVyLmJ1aWxkQmFzZXNDb250ZXh0KCk7XG4gIHJldHVybiBiYXNlc0NvbnRleHQuY29uc3RydWN0b3IgYXMgRXh0cmFjdENvbnN0cnVjdG9yPEJhc2VzQ29udGV4dD47XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBCYXNlc1F1ZXJ5Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0Jhc2VzUXVlcnlDb25zdHJ1Y3Rvci5kLnRzJztcblxuaW1wb3J0IHsgZ2V0QmFzZXNDb250cm9sbGVyRnJvbVJlbmRlciB9IGZyb20gJy4uLy4uLy4uLy4uL2Z1bmN0aW9ucy9nZXRCYXNlc0NvbnRyb2xsZXJGcm9tUmVuZGVyLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBCYXNlc1F1ZXJ5fSBjb25zdHJ1Y3RvciAodGhlIGAuYmFzZWAgcGFyc2VyLCBleHBvc2luZyB0aGUgc3RhdGljIGBmcm9tU3RyaW5nYCkuXG4gKlxuICogYEJhc2VzUXVlcnlgIGhhcyBubyBwdWJsaWMgYG9ic2lkaWFuYCBleHBvcnQgYW5kIG5vIGxlYWYtZnJlZSBmYWN0b3J5LCBzbyB0aGUgY2xhc3MgaXMgaGFydmVzdGVkIGF0XG4gKiBydW50aW1lOiBhIHRocm93YXdheSBiYXNlIGlzIHJlbmRlcmVkIG9mZi1zY3JlZW4gKHZpYSB7QGxpbmsgZ2V0QmFzZXNDb250cm9sbGVyRnJvbVJlbmRlcn0pIGFuZCB0aGVcbiAqIGNvbnN0cnVjdG9yIGlzIHJlYWQgb2ZmIHRoZSByZXN1bHRpbmcgcXVlcnkuIFRoZSB0aHJvd2F3YXkgcmVuZGVyIGlzIHRvcm4gZG93biBiZWZvcmUgcmV0dXJuaW5nLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIHtAbGluayBCYXNlc1F1ZXJ5fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QmFzZXNRdWVyeUNvbnN0cnVjdG9yKGFwcDogQXBwKTogUHJvbWlzZTxCYXNlc1F1ZXJ5Q29uc3RydWN0b3I+IHtcbiAgY29uc3QgY29tcG9uZW50ID0gbmV3IENvbXBvbmVudCgpO1xuICB0cnkge1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBhd2FpdCBnZXRCYXNlc0NvbnRyb2xsZXJGcm9tUmVuZGVyKGFwcCwgJ3ZpZXdzOiBbXVxcbicsICdnZXRCYXNlc1F1ZXJ5Q29uc3RydWN0b3IuYmFzZScsIGNvbXBvbmVudCk7XG4gICAgY29uc3QgcXVlcnkgPSBjb250cm9sbGVyLnF1ZXJ5O1xuICAgIGlmICghcXVlcnkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHJlbmRlcmVkIGJhc2UgZGlkIG5vdCBwcm9kdWNlIGEgcXVlcnkuJyk7XG4gICAgfVxuICAgIHJldHVybiBxdWVyeS5jb25zdHJ1Y3RvciBhcyB1bmtub3duIGFzIEJhc2VzUXVlcnlDb25zdHJ1Y3RvcjtcbiAgfSBmaW5hbGx5IHtcbiAgICBjb21wb25lbnQudW5sb2FkKCk7XG4gIH1cbn1cbiIsICJpbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgQ29tcG9uZW50LFxuICBRdWVyeUNvbnRyb2xsZXJcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBNYXJrZG93blJlbmRlcmVyIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG4vKipcbiAqIFJlbmRlciBhIGJhc2UgaW50byBhIGRldGFjaGVkLCBvZmYtc2NyZWVuIGVsZW1lbnQgYW5kIHJldHVybiB0aGUgbGl2ZSB7QGxpbmsgb2JzaWRpYW4jUXVlcnlDb250cm9sbGVyfSB0aGF0IGRyaXZlc1xuICogaXQuIFRoaXMgaXMgdGhlIGxlYWYtZnJlZSByb3V0ZSB0byBoZWFkbGVzcyBiYXNlIGV2YWx1YXRpb246IGl0IHJ1bnMgT2JzaWRpYW4ncyBvd24gYmFzZS1lbWJlZCBwcm9jZXNzb3JcbiAqIHZpYSB0aGUgcHVibGljIHtAbGluayBvYnNpZGlhbiNNYXJrZG93blJlbmRlcmVyLnJlbmRlcn0sIHRoZW4gbG9jYXRlcyB0aGUgY29udHJvbGxlciBpbiB0aGUgcmVuZGVyJ3NcbiAqIGNvbXBvbmVudCB0cmVlLlxuICpcbiAqIFRoZSBjYWxsZXIgb3ducyBgY29tcG9uZW50YCdzIGxpZmVjeWNsZSBhbmQgTVVTVCBjYWxsIGBjb21wb25lbnQudW5sb2FkKClgIG9uY2UgZG9uZSB3aXRoIHRoZSBjb250cm9sbGVyXG4gKiAod2hpY2ggYWxzbyBkZXRhY2hlcyB0aGUgcmVuZGVyZWQgZWxlbWVudCkuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gY29udGVudCAtIFRoZSBgLmJhc2VgIGZpbGUgY29udGVudCAodGhlIGJvZHkgb2YgYSBgYmFzZWAgY29kZSBibG9jaykuXG4gKiBAcGFyYW0gc291cmNlUGF0aCAtIFRoZSBwYXRoIHN1cHBseWluZyB0aGUgcXVlcnkncyBmaWxlIGNvbnRleHQuXG4gKiBAcGFyYW0gY29tcG9uZW50IC0gVGhlIGNvbXBvbmVudCB0aGF0IG93bnMgdGhlIHJlbmRlcjsgdGhlIGNhbGxlciB1bmxvYWRzIGl0LlxuICogQHJldHVybnMgVGhlIGxpdmUge0BsaW5rIG9ic2lkaWFuI1F1ZXJ5Q29udHJvbGxlcn0gZm9yIHRoZSByZW5kZXJlZCBiYXNlLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRCYXNlc0NvbnRyb2xsZXJGcm9tUmVuZGVyKFxuICBhcHA6IEFwcCxcbiAgY29udGVudDogc3RyaW5nLFxuICBzb3VyY2VQYXRoOiBzdHJpbmcsXG4gIGNvbXBvbmVudDogQ29tcG9uZW50XG4pOiBQcm9taXNlPFF1ZXJ5Q29udHJvbGxlcj4ge1xuICAvLyBUaGUgYF9jaGlsZHJlbmAgd2FsayBwbHVzIHRoZSBjb250cm9sbGVyJ3MgYHF1ZXJ5YCAvIGByZXN1bHRzYCBhcmUgcnVudGltZSBpbnRlcm5hbHMgbm90IG1vZGVsZWQgb25cbiAgLy8gQ29tcG9uZW50LCBzbyB0aGV5IGFyZSB0eXBlZCBsb2NhbGx5IHB1cmVseSB0byBicmVhZHRoLWZpcnN0IHNlYXJjaCB0aGUgcmVuZGVyIHRyZWUuXG4gIGludGVyZmFjZSBDb21wb25lbnRUcmVlTm9kZSB7XG4gICAgLyoqIFRoZSBjaGlsZCBjb21wb25lbnRzLCBpZiBhbnkuICovXG4gICAgX2NoaWxkcmVuPzogQ29tcG9uZW50VHJlZU5vZGVbXTtcblxuICAgIC8qKiBUaGUgY3VycmVudCBxdWVyeSwgcHJlc2VudCBvbiBhIGNvbnRyb2xsZXIuICovXG4gICAgcXVlcnk/OiB1bmtub3duO1xuXG4gICAgLyoqIFRoZSBxdWVyeSByZXN1bHRzLCBwcmVzZW50IGFzIGEgYE1hcGAgb24gYSBjb250cm9sbGVyLiAqL1xuICAgIHJlc3VsdHM/OiB1bmtub3duO1xuICB9XG5cbiAgLy8gVGhlIGVsZW1lbnQgbXVzdCBiZSBhdHRhY2hlZCB0byB0aGUgZG9jdW1lbnQgKG5vdCBtZXJlbHkgZGV0YWNoZWQpIGZvciB0aGUgYmFzZSdzIGluaXRpYWwgc2NhbiB0byBydW4sXG4gIC8vIHNvIGl0IGlzIHBvc2l0aW9uZWQgb2ZmLXNjcmVlbiByYXRoZXIgdGhhbiBoaWRkZW4uIEl0IGlzIHJlbW92ZWQgd2hlbiB0aGUgY2FsbGVyIHVubG9hZHMgYGNvbXBvbmVudGAuXG4gIGNvbnN0IGNvbnRhaW5lckVsID0gY3JlYXRlRGl2KCk7XG4gIGNvbnRhaW5lckVsLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgY29udGFpbmVyRWwuc3R5bGUubGVmdCA9ICctOTk5OXB4JztcbiAgY29udGFpbmVyRWwuc3R5bGUud2lkdGggPSAnNjAwcHgnO1xuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnRhaW5lckVsKTtcbiAgY29tcG9uZW50LnJlZ2lzdGVyKCgpID0+IHtcbiAgICBjb250YWluZXJFbC5yZW1vdmUoKTtcbiAgfSk7XG5cbiAgYXdhaXQgTWFya2Rvd25SZW5kZXJlci5yZW5kZXIoYXBwLCBgXFxgXFxgXFxgYmFzZVxcbiR7Y29udGVudH1cXG5cXGBcXGBcXGBcXG5gLCBjb250YWluZXJFbCwgc291cmNlUGF0aCwgY29tcG9uZW50KTtcblxuICBjb25zdCBxdWV1ZTogQ29tcG9uZW50VHJlZU5vZGVbXSA9IFtjb21wb25lbnQgYXMgdW5rbm93biBhcyBDb21wb25lbnRUcmVlTm9kZV07XG4gIGNvbnN0IHNlZW4gPSBuZXcgU2V0PENvbXBvbmVudFRyZWVOb2RlPigpO1xuXG4gIHdoaWxlIChxdWV1ZS5sZW5ndGggPiAwKSB7XG4gICAgY29uc3Qgbm9kZSA9IHF1ZXVlLnNoaWZ0KCk7XG4gICAgaWYgKCFub2RlIHx8IHNlZW4uaGFzKG5vZGUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgc2Vlbi5hZGQobm9kZSk7XG5cbiAgICBpZiAobm9kZS5yZXN1bHRzIGluc3RhbmNlb2YgTWFwICYmICdxdWVyeScgaW4gbm9kZSkge1xuICAgICAgcmV0dXJuIG5vZGUgYXMgdW5rbm93biBhcyBRdWVyeUNvbnRyb2xsZXI7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLl9jaGlsZHJlbiA/PyBbXSkge1xuICAgICAgcXVldWUucHVzaChjaGlsZCk7XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgbG9jYXRlIHRoZSBRdWVyeUNvbnRyb2xsZXIgaW4gdGhlIHJlbmRlcmVkIGNvbXBvbmVudCB0cmVlLicpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbFBsdWdpbiB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9pbnRlcm5hbC1wbHVnaW5zL0ludGVybmFsUGx1Z2luLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEludGVybmFsUGx1Z2lufSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgSW50ZXJuYWxQbHVnaW59IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnRlcm5hbFBsdWdpbkNvbnN0cnVjdG9yPEluc3RhbmNlPihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxJbnRlcm5hbFBsdWdpbjxJbnN0YW5jZT4+IHtcbiAgY29uc3QgYW55UGx1Z2luID0gT2JqZWN0LnZhbHVlcyhhcHAuaW50ZXJuYWxQbHVnaW5zLnBsdWdpbnMpWzBdO1xuICBpZiAoIWFueVBsdWdpbikge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gaW50ZXJuYWwgcGx1Z2luIGZvdW5kJyk7XG4gIH1cbiAgcmV0dXJuIGFueVBsdWdpbi5jb25zdHJ1Y3RvciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8SW50ZXJuYWxQbHVnaW48SW5zdGFuY2U+Pjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxQbHVnaW5zIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvSW50ZXJuYWxQbHVnaW5zLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEludGVybmFsUGx1Z2luc30gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIEludGVybmFsUGx1Z2luc30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEludGVybmFsUGx1Z2luc0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPEludGVybmFsUGx1Z2lucz4ge1xuICByZXR1cm4gYXBwLmludGVybmFsUGx1Z2lucy5jb25zdHJ1Y3RvciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8SW50ZXJuYWxQbHVnaW5zPjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgVmlld1R5cGVUeXBlIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL3ZpZXdzL1ZpZXdUeXBlVHlwZS5kLnRzJztcbmltcG9ydCB0eXBlIHsgVmlld1R5cGVWaWV3TWFwcGluZyB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy92aWV3cy9WaWV3VHlwZVZpZXdNYXBwaW5nLmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUgdmlldyBjb25zdHJ1Y3RvciBieSB2aWV3IHR5cGUuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAuXG4gKiBAcGFyYW0gdmlld1R5cGUgLSBUaGUgdmlldyB0eXBlLlxuICogQHJldHVybnMgVGhlIHZpZXcgY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGU8VFZpZXdUeXBlIGV4dGVuZHMgVmlld1R5cGVUeXBlPihcbiAgYXBwOiBBcHAsXG4gIHZpZXdUeXBlOiBUVmlld1R5cGVcbik6IEV4dHJhY3RDb25zdHJ1Y3RvcjxWaWV3VHlwZVZpZXdNYXBwaW5nW1RWaWV3VHlwZV0+IHtcbiAgY29uc3QgbGVhZiA9IGFwcC53b3Jrc3BhY2UuY3JlYXRlTGVhZkluVGFiR3JvdXAoKTtcbiAgdHJ5IHtcbiAgICBjb25zdCB2aWV3Q3JlYXRvciA9IGFwcC52aWV3UmVnaXN0cnkuZ2V0Vmlld0NyZWF0b3JCeVR5cGUodmlld1R5cGUpO1xuICAgIGlmICghdmlld0NyZWF0b3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVmlldyBjcmVhdG9yIG5vdCBmb3VuZCcpO1xuICAgIH1cbiAgICBjb25zdCB2aWV3ID0gdmlld0NyZWF0b3IobGVhZik7XG4gICAgcmV0dXJuIHZpZXcuY29uc3RydWN0b3IgYXMgRXh0cmFjdENvbnN0cnVjdG9yPFZpZXdUeXBlVmlld01hcHBpbmdbVFZpZXdUeXBlXT47XG4gIH0gZmluYWxseSB7XG4gICAgbGVhZi5kZXRhY2goKTtcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBBbGxQcm9wZXJ0aWVzVmlldyB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9pbnRlcm5hbC1wbHVnaW5zL3Byb3BlcnRpZXMvQWxsUHJvcGVydGllc1ZpZXcvQWxsUHJvcGVydGllc1ZpZXcuZC50cyc7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEFsbFByb3BlcnRpZXNWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcC5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgQWxsUHJvcGVydGllc1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBbGxQcm9wZXJ0aWVzVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPEFsbFByb3BlcnRpZXNWaWV3PiB7XG4gIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuQWxsUHJvcGVydGllcyk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IEF1ZGlvVmlldyB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy92aWV3cy9BdWRpb1ZpZXcuZC50cyc7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEF1ZGlvVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIEF1ZGlvVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEF1ZGlvVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPEF1ZGlvVmlldz4ge1xuICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLkF1ZGlvKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgQmFja2xpbmtWaWV3IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvYmFja2xpbmsvQmFja2xpbmtWaWV3LmQudHMnO1xuXG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBCYWNrbGlua1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwLlxuICogQHJldHVybnMgVGhlIHtAbGluayBCYWNrbGlua1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCYWNrbGlua1ZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxCYWNrbGlua1ZpZXc+IHtcbiAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5CYWNrbGluayk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IEJhc2VzVmlldyB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9pbnRlcm5hbC1wbHVnaW5zL2Jhc2VzL0Jhc2VzVmlldy5kLnRzJztcblxuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgQmFzZXNWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcC5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgQmFzZXNWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFzZXNWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8QmFzZXNWaWV3PiB7XG4gIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuQmFzZXMpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBCb29rbWFya3NWaWV3IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvYm9va21hcmtzL0Jvb2ttYXJrc1ZpZXcvQm9va21hcmtzVmlldy5kLnRzJztcblxuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgQm9va21hcmtzVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIEJvb2ttYXJrc1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCb29rbWFya3NWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8Qm9va21hcmtzVmlldz4ge1xuICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLkJvb2ttYXJrcyk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IENhbnZhc1ZpZXcgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvaW50ZXJuYWwtcGx1Z2lucy9jYW52YXMvQ2FudmFzVmlldy5kLnRzJztcblxuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgQ2FudmFzVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIENhbnZhc1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDYW52YXNWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8Q2FudmFzVmlldz4ge1xuICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLkNhbnZhcyk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IEVtcHR5VmlldyB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy92aWV3cy9FbXB0eVZpZXcuZC50cyc7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIEVtcHR5Vmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIEVtcHR5Vmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVtcHR5Vmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPEVtcHR5Vmlldz4ge1xuICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLkVtcHR5KTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgRmlsZUV4cGxvcmVyVmlldyB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9pbnRlcm5hbC1wbHVnaW5zL2ZpbGUtZXhwbG9yZXIvRmlsZUV4cGxvcmVyVmlldy5kLnRzJztcblxuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgRmlsZUV4cGxvcmVyVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIEZpbGVFeHBsb3JlclZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlRXhwbG9yZXJWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8RmlsZUV4cGxvcmVyVmlldz4ge1xuICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLkZpbGVFeHBsb3Jlcik7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IEZpbGVQcm9wZXJ0aWVzVmlldyB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9pbnRlcm5hbC1wbHVnaW5zL3Byb3BlcnRpZXMvRmlsZVByb3BlcnRpZXNWaWV3LmQudHMnO1xuXG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBGaWxlUHJvcGVydGllc1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwLlxuICogQHJldHVybnMgVGhlIHtAbGluayBGaWxlUHJvcGVydGllc1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxlUHJvcGVydGllc1ZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxGaWxlUHJvcGVydGllc1ZpZXc+IHtcbiAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5GaWxlUHJvcGVydGllcyk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IEdyYXBoVmlldyB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9pbnRlcm5hbC1wbHVnaW5zL2dyYXBoL0dyYXBoVmlldy5kLnRzJztcblxuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgR3JhcGhWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcC5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgR3JhcGhWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0R3JhcGhWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8R3JhcGhWaWV3PiB7XG4gIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuR3JhcGgpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBJbWFnZVZpZXcgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvdmlld3MvSW1hZ2VWaWV3LmQudHMnO1xuXG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBJbWFnZVZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwLlxuICogQHJldHVybnMgVGhlIHtAbGluayBJbWFnZVZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbWFnZVZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxJbWFnZVZpZXc+IHtcbiAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5JbWFnZSk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IExvY2FsR3JhcGhWaWV3IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2ludGVybmFsLXBsdWdpbnMvZ3JhcGgvTG9jYWxHcmFwaFZpZXcuZC50cyc7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIExvY2FsR3JhcGhWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcC5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgTG9jYWxHcmFwaFZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2NhbEdyYXBoVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPExvY2FsR3JhcGhWaWV3PiB7XG4gIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuTG9jYWxHcmFwaCk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IE91dGdvaW5nTGlua1ZpZXcgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvaW50ZXJuYWwtcGx1Z2lucy9vdXRnb2luZy1saW5rL091dGdvaW5nTGlua1ZpZXcuZC50cyc7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIE91dGdvaW5nTGlua1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwLlxuICogQHJldHVybnMgVGhlIHtAbGluayBPdXRnb2luZ0xpbmtWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T3V0Z29pbmdMaW5rVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPE91dGdvaW5nTGlua1ZpZXc+IHtcbiAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5PdXRnb2luZ0xpbmspO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBPdXRsaW5lVmlldyB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9pbnRlcm5hbC1wbHVnaW5zL291dGxpbmUvT3V0bGluZVZpZXcvT3V0bGluZVZpZXcuZC50cyc7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIE91dGxpbmVWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcC5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgT3V0bGluZVZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRPdXRsaW5lVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPE91dGxpbmVWaWV3PiB7XG4gIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuT3V0bGluZSk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IFBkZlZpZXcgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvdmlld3MvUGRmVmlldy5kLnRzJztcblxuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgUGRmVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIFBkZlZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQZGZWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8UGRmVmlldz4ge1xuICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLlBkZik7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IFJlbGVhc2VOb3Rlc1ZpZXcgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvdmlld3MvUmVsZWFzZU5vdGVzVmlldy5kLnRzJztcblxuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgUmVsZWFzZU5vdGVzVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHAuXG4gKiBAcmV0dXJucyBUaGUge0BsaW5rIFJlbGVhc2VOb3Rlc1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSZWxlYXNlTm90ZXNWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8UmVsZWFzZU5vdGVzVmlldz4ge1xuICByZXR1cm4gZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZShhcHAsIFZpZXdUeXBlLlJlbGVhc2VOb3Rlcyk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IFNlYXJjaFZpZXcgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvaW50ZXJuYWwtcGx1Z2lucy9nbG9iYWwtc2VhcmNoL1NlYXJjaFZpZXcuZC50cyc7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIFNlYXJjaFZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwLlxuICogQHJldHVybnMgVGhlIHtAbGluayBTZWFyY2hWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VhcmNoVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPFNlYXJjaFZpZXc+IHtcbiAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5TZWFyY2gpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBTeW5jVmlldyB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9pbnRlcm5hbC1wbHVnaW5zL3N5bmMvU3luY1ZpZXcuZC50cyc7XG5cbmltcG9ydCB7IFZpZXdUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL1ZpZXdUeXBlLnRzJztcbmltcG9ydCB7IGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUgfSBmcm9tICcuL2dldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIFN5bmNWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcC5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgU3luY1ZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTeW5jVmlld0NvbnN0cnVjdG9yKGFwcDogQXBwKTogRXh0cmFjdENvbnN0cnVjdG9yPFN5bmNWaWV3PiB7XG4gIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuU3luYyk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgRXh0cmFjdENvbnN0cnVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL2NvbnN0cnVjdG9ycy9FeHRyYWN0Q29uc3RydWN0b3IuZC50cyc7XG5pbXBvcnQgdHlwZSB7IFRhZ1ZpZXcgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvdmlld3MvVGFnVmlldy9UYWdWaWV3LmQudHMnO1xuXG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBUYWdWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcC5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgVGFnVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRhZ1ZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxUYWdWaWV3PiB7XG4gIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuVGFnKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgVmlkZW9WaWV3IH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL3ZpZXdzL1ZpZGVvVmlldy5kLnRzJztcblxuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgVmlkZW9WaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcC5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgVmlkZW9WaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmlkZW9WaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8VmlkZW9WaWV3PiB7XG4gIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuVmlkZW8pO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IEV4dHJhY3RDb25zdHJ1Y3RvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9jb25zdHJ1Y3RvcnMvRXh0cmFjdENvbnN0cnVjdG9yLmQudHMnO1xuaW1wb3J0IHR5cGUgeyBXZWJ2aWV3ZXJIaXN0b3J5VmlldyB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9pbnRlcm5hbC1wbHVnaW5zL3dlYnZpZXdlci9XZWJ2aWV3ZXJIaXN0b3J5Vmlldy5kLnRzJztcblxuaW1wb3J0IHsgVmlld1R5cGUgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvVmlld1R5cGUudHMnO1xuaW1wb3J0IHsgZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZSB9IGZyb20gJy4vZ2V0Vmlld0NvbnN0cnVjdG9yQnlWaWV3VHlwZS50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgV2Vidmlld2VySGlzdG9yeVZpZXd9IGNvbnN0cnVjdG9yLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwLlxuICogQHJldHVybnMgVGhlIHtAbGluayBXZWJ2aWV3ZXJIaXN0b3J5Vmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdlYnZpZXdlckhpc3RvcnlWaWV3Q29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8V2Vidmlld2VySGlzdG9yeVZpZXc+IHtcbiAgcmV0dXJuIGdldFZpZXdDb25zdHJ1Y3RvckJ5Vmlld1R5cGUoYXBwLCBWaWV3VHlwZS5XZWJ2aWV3ZXJIaXN0b3J5KTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgV2Vidmlld2VyVmlldyB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVybmFscy9pbnRlcm5hbC1wbHVnaW5zL3dlYnZpZXdlci9XZWJ2aWV3ZXJWaWV3LmQudHMnO1xuXG5pbXBvcnQgeyBWaWV3VHlwZSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9WaWV3VHlwZS50cyc7XG5pbXBvcnQgeyBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlIH0gZnJvbSAnLi9nZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIHtAbGluayBXZWJ2aWV3ZXJWaWV3fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcC5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgV2Vidmlld2VyVmlld30gY29uc3RydWN0b3IuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFdlYnZpZXdlclZpZXdDb25zdHJ1Y3RvcihhcHA6IEFwcCk6IEV4dHJhY3RDb25zdHJ1Y3RvcjxXZWJ2aWV3ZXJWaWV3PiB7XG4gIHJldHVybiBnZXRWaWV3Q29uc3RydWN0b3JCeVZpZXdUeXBlKGFwcCwgVmlld1R5cGUuV2Vidmlld2VyKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBFeHRyYWN0Q29uc3RydWN0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcm5hbHMvY29uc3RydWN0b3JzL0V4dHJhY3RDb25zdHJ1Y3Rvci5kLnRzJztcbmltcG9ydCB0eXBlIHsgV29ya3NwYWNlUHJvdG9jb2xIYW5kbGVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vaW50ZXJuYWxzL3dvcmtzcGFjZS9Xb3Jrc3BhY2VQcm90b2NvbEhhbmRsZXIuZC50cyc7XG5cbi8qKlxuICogR2V0IHRoZSB7QGxpbmsgV29ya3NwYWNlUHJvdG9jb2xIYW5kbGVyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIFRoZSB7QGxpbmsgV29ya3NwYWNlUHJvdG9jb2xIYW5kbGVyfSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29ya3NwYWNlUHJvdG9jb2xIYW5kbGVyQ29uc3RydWN0b3IoYXBwOiBBcHApOiBFeHRyYWN0Q29uc3RydWN0b3I8V29ya3NwYWNlUHJvdG9jb2xIYW5kbGVyPiB7XG4gIHJldHVybiBhcHAud29ya3NwYWNlLnByb3RvY29sSGFuZGxlci5jb25zdHJ1Y3RvciBhcyBFeHRyYWN0Q29uc3RydWN0b3I8V29ya3NwYWNlUHJvdG9jb2xIYW5kbGVyPjtcbn1cbiIsICIvKipcbiAqIEdldCB0aGUgcGFyZW50IGZvbGRlciBwYXRoIG9mIGEgZ2l2ZW4gcGF0aC5cbiAqXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIGdldCB0aGUgcGFyZW50IGZvbGRlciBwYXRoIG9mLlxuICogQHJldHVybnMgVGhlIHBhcmVudCBmb2xkZXIgcGF0aC5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyZW50Rm9sZGVyUGF0aChwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcGF0aC5yZXBsYWNlKC9cXC8/W14vXSokLywgJycpIHx8ICcvJztcbn1cbiIsICJpbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgVEZvbGRlclxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7IGdldFRGb2xkZXJDb25zdHJ1Y3RvciB9IGZyb20gJy4uL2NvbnN0cnVjdG9ycy9hdWdtZW50YXRpb25zL2dldFRGb2xkZXJDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgeyBwYXJlbnRGb2xkZXJQYXRoIH0gZnJvbSAnLi4vdXRpbHMvUGF0aFV0aWxzLnRzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuZCBwcm9wZXJseSBpbml0aWFsaXplcyB0aGUgaW5zdGFuY2Ugb2Yge0BsaW5rIG9ic2lkaWFuI1RGb2xkZXJ9IGV2ZW4gdGhlIHVuZGVybHlpbmcgZm9sZGVyIGRvZXMgbm90IGV4aXN0LlxuICogVGhpcyBkb2Vzbid0IGNyZWF0ZSB0aGUgbWlzc2luZyBmb2xkZXIgb24gdGhlIGZpbGUgc3lzdGVtLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCB0byB0aGUgZm9sZGVyLlxuICogQHJldHVybnMgVGhlIGNyZWF0ZWQge0BsaW5rIG9ic2lkaWFuI1RGb2xkZXJ9IGluc3RhbmNlLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVURm9sZGVySW5zdGFuY2UoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IFRGb2xkZXIge1xuICBsZXQgZm9sZGVyID0gYXBwLnZhdWx0LmdldEZvbGRlckJ5UGF0aChwYXRoKTtcbiAgaWYgKGZvbGRlcikge1xuICAgIHJldHVybiBmb2xkZXI7XG4gIH1cblxuICBmb2xkZXIgPSBuZXcgKGdldFRGb2xkZXJDb25zdHJ1Y3RvcigpKShhcHAudmF1bHQsIHBhdGgpO1xuICBmb2xkZXIucGFyZW50ID0gY3JlYXRlVEZvbGRlckluc3RhbmNlKGFwcCwgcGFyZW50Rm9sZGVyUGF0aChwYXRoKSk7XG4gIGZvbGRlci5kZWxldGVkID0gdHJ1ZTtcbiAgcmV0dXJuIGZvbGRlcjtcbn1cbiIsICJpbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgVEZpbGVcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBnZXRURmlsZUNvbnN0cnVjdG9yIH0gZnJvbSAnLi4vY29uc3RydWN0b3JzL2F1Z21lbnRhdGlvbnMvZ2V0VEZpbGVDb25zdHJ1Y3Rvci50cyc7XG5pbXBvcnQgeyBwYXJlbnRGb2xkZXJQYXRoIH0gZnJvbSAnLi4vdXRpbHMvUGF0aFV0aWxzLnRzJztcbmltcG9ydCB7IGNyZWF0ZVRGb2xkZXJJbnN0YW5jZSB9IGZyb20gJy4vY3JlYXRlVEZvbGRlckluc3RhbmNlLnRzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuZCBwcm9wZXJseSBpbml0aWFsaXplcyB0aGUgaW5zdGFuY2Ugb2Yge0BsaW5rIG9ic2lkaWFuI1RGaWxlfSBldmVuIHRoZSB1bmRlcmx5aW5nIGZpbGUgZG9lcyBub3QgZXhpc3QuXG4gKiBUaGlzIGRvZXNuJ3QgY3JlYXRlIHRoZSBtaXNzaW5nIGZpbGUgb24gdGhlIGZpbGUgc3lzdGVtLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCB0byB0aGUgZmlsZS5cbiAqIEByZXR1cm5zIFRoZSBjcmVhdGVkIHtAbGluayBvYnNpZGlhbiNURmlsZX0gaW5zdGFuY2UuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRGaWxlSW5zdGFuY2UoYXBwOiBBcHAsIHBhdGg6IHN0cmluZyk6IFRGaWxlIHtcbiAgbGV0IGZpbGUgPSBhcHAudmF1bHQuZ2V0RmlsZUJ5UGF0aChwYXRoKTtcbiAgaWYgKGZpbGUpIHtcbiAgICByZXR1cm4gZmlsZTtcbiAgfVxuXG4gIGZpbGUgPSBuZXcgKGdldFRGaWxlQ29uc3RydWN0b3IoKSkoYXBwLnZhdWx0LCBwYXRoKTtcbiAgZmlsZS5wYXJlbnQgPSBjcmVhdGVURm9sZGVySW5zdGFuY2UoYXBwLCBwYXJlbnRGb2xkZXJQYXRoKHBhdGgpKTtcbiAgZmlsZS5kZWxldGVkID0gdHJ1ZTtcbiAgcmV0dXJuIGZpbGU7XG59XG4iLCAiaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIEJhc2VzRW50cnlcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIFRGaWxlXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgZ2V0QmFzZXNDb250cm9sbGVyRnJvbVJlbmRlciB9IGZyb20gJy4vZ2V0QmFzZXNDb250cm9sbGVyRnJvbVJlbmRlci50cyc7XG5cbi8qKlxuICogRXZhbHVhdGUgYSBgLmJhc2VgIGZpbGUgaW4gaGVhZGxlc3MgbW9kZSBcdTIwMTQgd2l0aCBubyBsZWFmIG9yIG9wZW4gdmlldyBcdTIwMTQgYW5kIHJldHVybiBpdHMgZW50cmllcy5cbiAqXG4gKiBUaGUgZmlsZSBpcyByZWFkIHdpdGgge0BsaW5rIG9ic2lkaWFuI1ZhdWx0LmNhY2hlZFJlYWR9LCBhbmQgaXRzIG93biBwYXRoIHN1cHBsaWVzIHRoZSBxdWVyeSdzIGZpbGUgY29udGV4dC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNvbnN0IGVudHJpZXMgPSBhd2FpdCBldmFsdWF0ZUJhc2VIZWFkbGVzcyhhcHAsICdQcm9qZWN0cy9UYXNrcy5iYXNlJyk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBiYXNlIC0gVGhlIGAuYmFzZWAgZmlsZSwgb3IgaXRzIHZhdWx0IHBhdGguXG4gKiBAcmV0dXJucyBUaGUgZXZhbHVhdGVkIGJhc2UgZW50cmllcy5cbiAqIEB0aHJvd3MgSWYgbm8gZmlsZSBleGlzdHMgYXQgdGhlIGdpdmVuIHBhdGgsIG9yIHRoZSBmaWxlIGlzIG5vdCBhIGAuYmFzZWAgZmlsZS5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXZhbHVhdGVCYXNlSGVhZGxlc3MoYXBwOiBBcHAsIGJhc2U6IHN0cmluZyB8IFRGaWxlKTogUHJvbWlzZTxCYXNlc0VudHJ5W10+O1xuLyoqXG4gKiBFdmFsdWF0ZSBgLmJhc2VgIGNvbnRlbnQgaW4gaGVhZGxlc3MgbW9kZSBcdTIwMTQgd2l0aCBubyBsZWFmIG9yIG9wZW4gdmlldyBcdTIwMTQgYW5kIHJldHVybiBpdHMgZW50cmllcy5cbiAqXG4gKiBVc2UgdGhpcyBmb3JtIGZvciBjb250ZW50IHRoYXQgaXMgbm90IGEgYC5iYXNlYCBmaWxlIG9mIGl0cyBvd24sIHN1Y2ggYXMgdGhlIGJvZHkgb2YgYSBgYmFzZWAgY29kZSBibG9jayBpbiBhXG4gKiBub3RlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogY29uc3QgZW50cmllcyA9IGF3YWl0IGV2YWx1YXRlQmFzZUhlYWRsZXNzKGFwcCwgJ2ZpbHRlcnM6XFxuICBhbmQ6XFxuICAgIC0gZmlsZS5oYXNUYWcoXCJ0YXNrXCIpXFxuJywgJ05vdGVzL1RvZGF5Lm1kJyk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBjb250ZW50IC0gVGhlIGAuYmFzZWAgZmlsZSBjb250ZW50ICh0aGUgYm9keSBvZiBhIGBiYXNlYCBjb2RlIGJsb2NrKS5cbiAqIEBwYXJhbSBzb3VyY2VQYXRoIC0gVGhlIHBhdGggc3VwcGx5aW5nIHRoZSBxdWVyeSdzIGZpbGUgY29udGV4dC5cbiAqIEByZXR1cm5zIFRoZSBldmFsdWF0ZWQgYmFzZSBlbnRyaWVzLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBldmFsdWF0ZUJhc2VIZWFkbGVzcyhhcHA6IEFwcCwgY29udGVudDogc3RyaW5nLCBzb3VyY2VQYXRoOiBzdHJpbmcpOiBQcm9taXNlPEJhc2VzRW50cnlbXT47XG4vKipcbiAqIEV2YWx1YXRlIGEgYmFzZSBpbiBoZWFkbGVzcyBtb2RlIFx1MjAxNCB3aXRoIG5vIGxlYWYgb3Igb3BlbiB2aWV3IFx1MjAxNCBhbmQgcmV0dXJuIGl0cyBlbnRyaWVzLlxuICpcbiAqIEl0IHJlbmRlcnMgdGhlIGJhc2Ugb2ZmLXNjcmVlbiB2aWEge0BsaW5rIGdldEJhc2VzQ29udHJvbGxlckZyb21SZW5kZXJ9LCB3YWl0cyBmb3IgdGhlIGluaXRpYWwgdmF1bHQgc2NhblxuICogdG8gc2V0dGxlLCB0aGVuIHJlYWRzIHRoZSBjb250cm9sbGVyJ3MgcmVzdWx0cy4gRXZlcnl0aGluZyBpcyB0b3JuIGRvd24gYmVmb3JlIHJldHVybmluZy5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBiYXNlT3JDb250ZW50IC0gVGhlIGAuYmFzZWAgZmlsZSBvciBpdHMgdmF1bHQgcGF0aCwgb3IgdGhlIGAuYmFzZWAgY29udGVudCB3aGVuIGBzb3VyY2VQYXRoYCBpcyBnaXZlbi5cbiAqIEBwYXJhbSBzb3VyY2VQYXRoIC0gVGhlIHBhdGggc3VwcGx5aW5nIHRoZSBxdWVyeSdzIGZpbGUgY29udGV4dCwgZ2l2ZW4gb25seSB3aXRoIGAuYmFzZWAgY29udGVudC5cbiAqIEByZXR1cm5zIFRoZSBldmFsdWF0ZWQgYmFzZSBlbnRyaWVzLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBldmFsdWF0ZUJhc2VIZWFkbGVzcyhhcHA6IEFwcCwgYmFzZU9yQ29udGVudDogc3RyaW5nIHwgVEZpbGUsIHNvdXJjZVBhdGg/OiBzdHJpbmcpOiBQcm9taXNlPEJhc2VzRW50cnlbXT4ge1xuICBjb25zdCBTQ0FOX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTID0gNTA7XG4gIGNvbnN0IFNDQU5fVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSAzMDAwMDtcblxuICBsZXQgY29udGVudDogc3RyaW5nO1xuICBsZXQgcXVlcnlTb3VyY2VQYXRoOiBzdHJpbmc7XG5cbiAgaWYgKHNvdXJjZVBhdGggPT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IGZpbGUgPSB0eXBlb2YgYmFzZU9yQ29udGVudCA9PT0gJ3N0cmluZycgPyBhcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKGJhc2VPckNvbnRlbnQpIDogYmFzZU9yQ29udGVudDtcbiAgICBpZiAoIShmaWxlIGluc3RhbmNlb2YgVEZpbGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vIC5iYXNlIGZpbGUgZXhpc3RzIGF0ICcke1N0cmluZyhiYXNlT3JDb250ZW50KX0nLmApO1xuICAgIH1cbiAgICBpZiAoZmlsZS5leHRlbnNpb24gIT09ICdiYXNlJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtmaWxlLnBhdGh9JyBpcyBub3QgYSAuYmFzZSBmaWxlLmApO1xuICAgIH1cbiAgICBjb250ZW50ID0gYXdhaXQgYXBwLnZhdWx0LmNhY2hlZFJlYWQoZmlsZSk7XG4gICAgcXVlcnlTb3VyY2VQYXRoID0gZmlsZS5wYXRoO1xuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2YgYmFzZU9yQ29udGVudCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGFzcyB0aGUgLmJhc2UgZmlsZSBvbiBpdHMgb3duLCB3aXRob3V0IGEgc291cmNlIHBhdGguJyk7XG4gICAgfVxuICAgIGNvbnRlbnQgPSBiYXNlT3JDb250ZW50O1xuICAgIHF1ZXJ5U291cmNlUGF0aCA9IHNvdXJjZVBhdGg7XG4gIH1cblxuICBjb25zdCBjb21wb25lbnQgPSBuZXcgQ29tcG9uZW50KCk7XG4gIHRyeSB7XG4gICAgY29uc3QgY29udHJvbGxlciA9IGF3YWl0IGdldEJhc2VzQ29udHJvbGxlckZyb21SZW5kZXIoYXBwLCBjb250ZW50LCBxdWVyeVNvdXJjZVBhdGgsIGNvbXBvbmVudCk7XG5cbiAgICBjb25zdCBzdGFydFRpbWUgPSBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICB3aGlsZSAoY29udHJvbGxlci5pbml0aWFsU2Nhbikge1xuICAgICAgaWYgKHBlcmZvcm1hbmNlLm5vdygpIC0gc3RhcnRUaW1lID4gU0NBTl9USU1FT1VUX0lOX01JTExJU0VDT05EUykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RpbWVkIG91dCB3YWl0aW5nIGZvciB0aGUgYmFzZSBpbml0aWFsIHNjYW4gdG8gc2V0dGxlLicpO1xuICAgICAgfVxuICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgd2luZG93LnNldFRpbWVvdXQocmVzb2x2ZSwgU0NBTl9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShjb250cm9sbGVyLnJlc3VsdHMudmFsdWVzKCkpO1xuICB9IGZpbmFsbHkge1xuICAgIGNvbXBvbmVudC51bmxvYWQoKTtcbiAgfVxufVxuIiwgImltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IERhdGFBZGFwdGVyRXggfSBmcm9tICcuLi8uLi9pbnRlcm5hbHMvRGF0YUFkYXB0ZXJFeC5kLnRzJztcblxuLyoqXG4gKiBHZXQgdGhlIGluc3RhbmNlIG9mIHRoZSBjdXJyZW50IHtAbGluayBEYXRhQWRhcHRlckV4fS5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIGRhdGEgYWRhcHRlciBleHRlbnNpb24uXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGFBZGFwdGVyRXgoYXBwOiBBcHApOiBEYXRhQWRhcHRlckV4IHtcbiAgcmV0dXJuIGFwcC52YXVsdC5hZGFwdGVyIGFzIERhdGFBZGFwdGVyRXg7XG59XG4iLCAiaW1wb3J0IHsgUGxhdGZvcm0gfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgUGxhdGZvcm1FeCB9IGZyb20gJy4uLy4uL2ludGVybmFscy9QbGF0Zm9ybUV4LmQudHMnO1xuXG4vKipcbiAqIEdldCB0aGUge0BsaW5rIG9ic2lkaWFuI1BsYXRmb3JtfSBjb25zdGFudCBhcyB7QGxpbmsgUGxhdGZvcm1FeH0uXG4gKlxuICogQHJldHVybnMgVGhlIHBsYXRmb3JtIGV4dGVuc2lvbi5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGxhdGZvcm1FeCgpOiBQbGF0Zm9ybUV4IHtcbiAgcmV0dXJuIFBsYXRmb3JtIGFzIFBsYXRmb3JtRXg7XG59XG4iLCAiaW1wb3J0IHsgbG9hZE1lcm1haWQgYXMgbG9hZE1lcm1haWRPcmlnaW5hbCB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBNZXJtYWlkIH0gZnJvbSAnLi4vLi4vLi4vbWVybWFpZC9pbnRlcm5hbHMvTWVybWFpZC5kLnRzJztcblxuLyoqXG4gKiBMb2FkIE1lcm1haWQgYW5kIHJldHVybiBhIHByb21pc2UgdG8gdGhlIGdsb2JhbCBtZXJtYWlkIG9iamVjdC5cbiAqIENhbiBhbHNvIHVzZSBgd2luZG93Lm1lcm1haWRgIGFmdGVyIHRoaXMgcHJvbWlzZSByZXNvbHZlcyB0byBnZXQgdGhlIHNhbWUgcmVmZXJlbmNlLlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBnbG9iYWwgYHdpbmRvdy5tZXJtYWlkYCBvYmplY3QuXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9tZXJtYWlkLmpzLm9yZy8gfCBPZmZpY2lhbCBNZXJtYWlkIGRvY3VtZW50YXRpb259LlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRNZXJtYWlkKCk6IFByb21pc2U8TWVybWFpZD4ge1xuICByZXR1cm4gKGF3YWl0IGxvYWRNZXJtYWlkT3JpZ2luYWwoKSkgYXMgTWVybWFpZDtcbn1cbiIsICJpbXBvcnQgeyBsb2FkUGRmSnMgYXMgbG9hZFBkZkpzT3JpZ2luYWwgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgSW50ZXJvcFBkZkpzTW9kdWxlIGFzIFBkZkpzTW9kdWxlIH0gZnJvbSAnLi4vLi4vLi4vcGRmanMtZGlzdC9pbnRlcm9wL0ludGVyb3BQZGZKc01vZHVsZS5kLnRzJztcblxuLyoqXG4gKiBMb2FkIFBERi5qcyBhbmQgcmV0dXJuIGEgcHJvbWlzZSB0byB0aGUgZ2xvYmFsIHBkZmpzTGliIG9iamVjdC5cbiAqIENhbiBhbHNvIHVzZSBgd2luZG93LnBkZmpzTGliYCBhZnRlciB0aGlzIHByb21pc2UgcmVzb2x2ZXMgdG8gZ2V0IHRoZSBzYW1lIHJlZmVyZW5jZS5cbiAqXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgZ2xvYmFsIGB3aW5kb3cucGRmanNMaWJgIG9iamVjdC5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL21vemlsbGEuZ2l0aHViLmlvL3BkZi5qcy8gfCBPZmZpY2lhbCBQREYuanMgZG9jdW1lbnRhdGlvbn0uXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFBkZkpzKCk6IFByb21pc2U8UGRmSnNNb2R1bGU+IHtcbiAgcmV0dXJuIChhd2FpdCBsb2FkUGRmSnNPcmlnaW5hbCgpKSBhcyBQZGZKc01vZHVsZTtcbn1cbiIsICJpbXBvcnQgeyBsb2FkUHJpc20gYXMgbG9hZFByaXNtT3JpZ2luYWwgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgUHJpc21Nb2R1bGUgfSBmcm9tICcuLi8uLi8uLi9wcmlzbWpzL2ludGVybmFscy9QcmlzbU1vZHVsZS5kLnRzJztcblxuLyoqXG4gKiBMb2FkIFByaXNtLmpzIGFuZCByZXR1cm4gYSBwcm9taXNlIHRvIHRoZSBnbG9iYWwgUHJpc20gb2JqZWN0LlxuICogQ2FuIGFsc28gdXNlIGB3aW5kb3cuUHJpc21gIGFmdGVyIHRoaXMgcHJvbWlzZSByZXNvbHZlcyB0byBnZXQgdGhlIHNhbWUgcmVmZXJlbmNlLlxuICpcbiAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIHRoZSBnbG9iYWwgYHdpbmRvdy5QcmlzbWAgb2JqZWN0LlxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vcHJpc21qcy5jb20vIHwgT2ZmaWNpYWwgUHJpc20gZG9jdW1lbnRhdGlvbn0uXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFByaXNtKCk6IFByb21pc2U8UHJpc21Nb2R1bGU+IHtcbiAgcmV0dXJuIChhd2FpdCBsb2FkUHJpc21PcmlnaW5hbCgpKSBhcyBQcmlzbU1vZHVsZTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IFdvcmtzcGFjZSB9IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHR5cGUgeyBMYXlvdXRSZWFkeVdvcmtzcGFjZSB9IGZyb20gJy4uLy4uL2ludGVybmFscy93b3Jrc3BhY2UvTGF5b3V0UmVhZHlXb3Jrc3BhY2UuZC50cyc7XG5cbi8qKlxuICogUnVuIHRoZSBjYWxsYmFjayBvbmNlIHRoZSB3b3Jrc3BhY2UgbGF5b3V0IGlzIGxvYWRlZCwgcGFzc2luZyBpdCB0aGUgd29ya3NwYWNlIGFzIGEge0BsaW5rIExheW91dFJlYWR5V29ya3NwYWNlfS5cbiAqXG4gKiBMaWtlIHtAbGluayBvYnNpZGlhbiNXb3Jrc3BhY2Uub25MYXlvdXRSZWFkeX0sIGl0IHJ1bnMgdGhlIGNhbGxiYWNrIHJpZ2h0IGF3YXkgaWYgdGhlIGxheW91dCBpcyBhbHJlYWR5IGxvYWRlZCxcbiAqIGFuZCBxdWV1ZXMgaXQgb3RoZXJ3aXNlLiBPYnNpZGlhbiBjYWxscyBhbiBgb25MYXlvdXRSZWFkeWAgY2FsbGJhY2sgd2l0aCBubyBhcmd1bWVudHMsIHNvIHRoaXMgaGVscGVyIGlzIHdoYXRcbiAqIGhhbmRzIHRoZSBjYWxsYmFjayB0aGUgbmFycm93ZWQgd29ya3NwYWNlLlxuICpcbiAqIEBwYXJhbSB3b3Jrc3BhY2UgLSBUaGUgd29ya3NwYWNlLlxuICogQHBhcmFtIGNhbGxiYWNrIC0gVGhlIGNhbGxiYWNrIHRvIHJ1bi5cbiAqXG4gKiBAcHVibGljXG4gKiBAdW5vZmZpY2lhbFxuICovXG5leHBvcnQgZnVuY3Rpb24gb25MYXlvdXRSZWFkeUV4KHdvcmtzcGFjZTogV29ya3NwYWNlLCBjYWxsYmFjazogKHdvcmtzcGFjZTogTGF5b3V0UmVhZHlXb3Jrc3BhY2UpID0+IHVua25vd24pOiB2b2lkIHtcbiAgd29ya3NwYWNlLm9uTGF5b3V0UmVhZHkoKCkgPT4gY2FsbGJhY2sod29ya3NwYWNlIGFzIExheW91dFJlYWR5V29ya3NwYWNlKSk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgU2VhcmNoTWF0Y2hlciB9IGZyb20gJy4uLy4uL2ludGVybmFscy9zZWFyY2gtcXVlcnkvU2VhcmNoTWF0Y2hlci5kLnRzJztcbmltcG9ydCB0eXBlIHsgU2VhcmNoTWF0Y2hlckd1YXJkcyB9IGZyb20gJy4uLy4uL2ludGVybmFscy9zZWFyY2gtcXVlcnkvU2VhcmNoTWF0Y2hlckd1YXJkcy5kLnRzJztcblxuaW1wb3J0IHsgZ2V0T2JzaWRpYW5TZWFyY2hRdWVyeUNvbnN0cnVjdG9yIH0gZnJvbSAnLi4vY29uc3RydWN0b3JzL2ludGVybmFscy9nZXRPYnNpZGlhblNlYXJjaFF1ZXJ5Q29uc3RydWN0b3IudHMnO1xuXG4vKipcbiAqIENyZWF0ZXMgZXhhY3QgcHJvdG90eXBlIGd1YXJkcyBieSBjb21waWxpbmcgcHJvYmUgcXVlcmllcyB3aXRoIHRoZSBydW5uaW5nIGFwcCdzIHBhcnNlci5cbiAqXG4gKiBObyB0cmFuc2xhdGVkIGRlc2NyaXB0aW9ucyBvciBtaW5pZmllZCBuYW1lcyBhcmUgaW5zcGVjdGVkLiBDcmVhdGUgdGhlIGd1YXJkcyBvbmNlIHBlciBhcHA7XG4gKiBlYWNoIHByZWRpY2F0ZSByZWplY3RzIHVua25vd24gbm9kZXMsIGluY2x1ZGluZyBzdWJjbGFzc2VzLiBVbnN1cHBvcnRlZCBub2RlcyBtdXN0IGtlZXAgYWxsIGNhbmRpZGF0ZXMuXG4gKiBQcm9iZSBjb21waWxhdGlvbiBkb2VzIG5vdCBzdGFydCBTZWFyY2ggb3IgY2hhbmdlIGFuIGV4aXN0aW5nIHNlYXJjaCBwYW5lLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwIGluc3RhbmNlLlxuICogQHJldHVybnMgR3VhcmRzIHRpZWQgdG8gdGhpcyBhcHAncyBwYXJzZXIgcHJvdG90eXBlcy5cbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWFyY2hNYXRjaGVyR3VhcmRzKGFwcDogQXBwKTogU2VhcmNoTWF0Y2hlckd1YXJkcyB7XG4gIGNvbnN0IFF1ZXJ5ID0gZ2V0T2JzaWRpYW5TZWFyY2hRdWVyeUNvbnN0cnVjdG9yKGFwcCk7XG4gIHJldHVybiB7XG4gICAgYW5kOiBndWFyZCgnYWxwaGEgYnJhdm8nKSxcbiAgICBjYXNlOiBndWFyZCgnbWF0Y2gtY2FzZTphbHBoYScpLFxuICAgIGNvbXBhcmlzb246IGd1YXJkKCdbYWxwaGE6PmJyYXZvXScsICd2YWx1ZScpLFxuICAgIGNvbnRlbnQ6IGd1YXJkKCdjb250ZW50OmFscGhhJyksXG4gICAgZmlsZTogZ3VhcmQoJ2ZpbGU6YWxwaGEnKSxcbiAgICBuZWdhdGlvbjogZ3VhcmQoJy1hbHBoYScpLFxuICAgIG9yOiBndWFyZCgnYWxwaGEgT1IgYnJhdm8nKSxcbiAgICBwYXRoOiBndWFyZCgncGF0aDphbHBoYScpLFxuICAgIHByb3BlcnR5OiBndWFyZCgnW2FscGhhXScpLFxuICAgIHF1b3RlZFRleHQ6IGd1YXJkKCdcImFscGhhXCInKSxcbiAgICByZWdleDogZ3VhcmQoJy9hbHBoYS8nKSxcbiAgICB0YWc6IGd1YXJkKCd0YWc6YWxwaGEnKSxcbiAgICB0ZXh0OiBndWFyZCgnYWxwaGEnKVxuICB9O1xuXG4gIGZ1bmN0aW9uIGd1YXJkPFQgZXh0ZW5kcyBTZWFyY2hNYXRjaGVyPihxdWVyeTogc3RyaW5nLCBjaGlsZD86ICd2YWx1ZScpOiAobWF0Y2hlcjogU2VhcmNoTWF0Y2hlcikgPT4gbWF0Y2hlciBpcyBUIHtcbiAgICBjb25zdCBwcm9iZSA9IG5ldyBRdWVyeShhcHAsIHF1ZXJ5LCBmYWxzZSkubWF0Y2hlcjtcbiAgICBpZiAoIXByb2JlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtYXRjaGVyIHByb2JlIGRpZCBub3QgY29tcGlsZS4nKTtcbiAgICB9XG4gICAgaWYgKGNoaWxkICYmICEoY2hpbGQgaW4gcHJvYmUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtYXRjaGVyIHByb2JlIGhhcyBubyB2YWx1ZSBub2RlLicpO1xuICAgIH1cbiAgICBjb25zdCBub2RlOiB1bmtub3duID0gY2hpbGQgJiYgY2hpbGQgaW4gcHJvYmUgPyBwcm9iZVtjaGlsZF0gOiBwcm9iZTtcbiAgICBpZiAoIW5vZGUgfHwgdHlwZW9mIG5vZGUgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBtYXRjaGVyIHByb2JlIGhhcyBubyB2YWx1ZSBtYXRjaGVyLicpO1xuICAgIH1cbiAgICBjb25zdCBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Yobm9kZSk7XG4gICAgcmV0dXJuIChtYXRjaGVyKTogbWF0Y2hlciBpcyBUID0+IE9iamVjdC5nZXRQcm90b3R5cGVPZihtYXRjaGVyKSA9PT0gcHJvdG90eXBlO1xuICB9XG59XG4iLCAiaW1wb3J0IHR5cGUge1xuICBSZWZlcmVuY2UsXG4gIFJlZmVyZW5jZUNhY2hlXG59IGZyb20gJ29ic2lkaWFuJztcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcmVmZXJlbmNlIGlzIGEgcmVmZXJlbmNlIGNhY2hlLlxuICpcbiAqIEBwYXJhbSByZWZlcmVuY2UgLSBUaGUgcmVmZXJlbmNlIHRvIGNoZWNrLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgcmVmZXJlbmNlIGlzIGEgcmVmZXJlbmNlIGNhY2hlLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1JlZmVyZW5jZUNhY2hlKHJlZmVyZW5jZTogUmVmZXJlbmNlKTogcmVmZXJlbmNlIGlzIFJlZmVyZW5jZUNhY2hlIHtcbiAgcmV0dXJuICEhKHJlZmVyZW5jZSBhcyBQYXJ0aWFsPFJlZmVyZW5jZUNhY2hlPikucG9zaXRpb247XG59XG4iLCAiaW1wb3J0IHR5cGUge1xuICBFbWJlZENhY2hlLFxuICBSZWZlcmVuY2Vcbn0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBpc1JlZmVyZW5jZUNhY2hlIH0gZnJvbSAnLi9pc1JlZmVyZW5jZUNhY2hlLnRzJztcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcmVmZXJlbmNlIGlzIGFuIGVtYmVkIGNhY2hlLlxuICpcbiAqIEBwYXJhbSByZWZlcmVuY2UgLSBUaGUgcmVmZXJlbmNlIHRvIGNoZWNrLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgcmVmZXJlbmNlIGlzIGFuIGVtYmVkIGNhY2hlLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0VtYmVkQ2FjaGUocmVmZXJlbmNlOiBSZWZlcmVuY2UpOiByZWZlcmVuY2UgaXMgRW1iZWRDYWNoZSB7XG4gIHJldHVybiBpc1JlZmVyZW5jZUNhY2hlKHJlZmVyZW5jZSkgJiYgcmVmZXJlbmNlLm9yaWdpbmFsWzBdID09PSAnISc7XG59XG4iLCAiaW1wb3J0IHR5cGUge1xuICBGcm9udG1hdHRlckxpbmtDYWNoZSxcbiAgUmVmZXJlbmNlXG59IGZyb20gJ29ic2lkaWFuJztcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcmVmZXJlbmNlIGlzIGEgZnJvbnRtYXR0ZXIgbGluayBjYWNoZS5cbiAqXG4gKiBAcGFyYW0gcmVmZXJlbmNlIC0gVGhlIHJlZmVyZW5jZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHJlZmVyZW5jZSBpcyBhIGZyb250bWF0dGVyIGxpbmsgY2FjaGUuXG4gKlxuICogQHB1YmxpY1xuICogQHVub2ZmaWNpYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGUocmVmZXJlbmNlOiBSZWZlcmVuY2UpOiByZWZlcmVuY2UgaXMgRnJvbnRtYXR0ZXJMaW5rQ2FjaGUge1xuICByZXR1cm4gISEocmVmZXJlbmNlIGFzIFBhcnRpYWw8RnJvbnRtYXR0ZXJMaW5rQ2FjaGU+KS5rZXk7XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBXb3Jrc3BhY2UgfSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgTGF5b3V0UmVhZHlXb3Jrc3BhY2UgfSBmcm9tICcuLi8uLi9pbnRlcm5hbHMvd29ya3NwYWNlL0xheW91dFJlYWR5V29ya3NwYWNlLmQudHMnO1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSB3b3Jrc3BhY2UgbGF5b3V0IGlzIGxvYWRlZCwgbmFycm93aW5nIHRoZSB3b3Jrc3BhY2UgdG8ge0BsaW5rIExheW91dFJlYWR5V29ya3NwYWNlfS5cbiAqXG4gKiBAcGFyYW0gd29ya3NwYWNlIC0gVGhlIHdvcmtzcGFjZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIHdvcmtzcGFjZSBsYXlvdXQgaXMgbG9hZGVkLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0xheW91dFJlYWR5KHdvcmtzcGFjZTogV29ya3NwYWNlKTogd29ya3NwYWNlIGlzIExheW91dFJlYWR5V29ya3NwYWNlIHtcbiAgcmV0dXJuIHdvcmtzcGFjZS5sYXlvdXRSZWFkeTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7XG4gIExpbmtDYWNoZSxcbiAgUmVmZXJlbmNlXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgaXNSZWZlcmVuY2VDYWNoZSB9IGZyb20gJy4vaXNSZWZlcmVuY2VDYWNoZS50cyc7XG5cbi8qKlxuICogQ2hlY2sgaWYgdGhlIHJlZmVyZW5jZSBpcyBhIGxpbmsgY2FjaGUuXG4gKlxuICogQHBhcmFtIHJlZmVyZW5jZSAtIFRoZSByZWZlcmVuY2UgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSByZWZlcmVuY2UgaXMgYSBsaW5rIGNhY2hlLlxuICpcbiAqIEBwdWJsaWNcbiAqIEB1bm9mZmljaWFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0xpbmtDYWNoZShyZWZlcmVuY2U6IFJlZmVyZW5jZSk6IHJlZmVyZW5jZSBpcyBMaW5rQ2FjaGUge1xuICByZXR1cm4gaXNSZWZlcmVuY2VDYWNoZShyZWZlcmVuY2UpICYmIHJlZmVyZW5jZS5vcmlnaW5hbFswXSAhPT0gJyEnO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtB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TztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBbUM7QUFZNUIsU0FBUyxtQ0FBMkU7QUFDekYsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBc0M7QUFZL0IsU0FBUyxzQ0FBaUY7QUFDL0YsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBa0M7QUFZM0IsU0FBUyxrQ0FBeUU7QUFDdkYsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBcUM7QUFZOUIsU0FBUyxxQ0FBK0U7QUFDN0YsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBc0M7QUFZL0IsU0FBUyxzQ0FBaUY7QUFDL0YsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBcUM7QUFZOUIsU0FBUyxxQ0FBK0U7QUFDN0YsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBZ0M7QUFZekIsU0FBUyxnQ0FBcUU7QUFDbkYsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBZ0M7QUFZekIsU0FBUyxnQ0FBcUU7QUFDbkYsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBZ0M7QUFZekIsU0FBUyxnQ0FBcUU7QUFDbkYsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBa0M7QUFZM0IsU0FBUyxrQ0FBeUU7QUFDdkYsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBOEI7QUFZdkIsU0FBUyw4QkFBaUU7QUFDL0UsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBZ0M7QUFZekIsU0FBUyxnQ0FBcUU7QUFDbkYsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBK0I7QUFZeEIsU0FBUywrQkFBNEU7QUFDMUYsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBNkI7QUFZdEIsU0FBUyw2QkFBK0Q7QUFDN0UsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBMEI7QUFZbkIsU0FBUywwQkFBeUQ7QUFDdkUsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBOEI7QUFZdkIsU0FBUyw4QkFBaUU7QUFDL0UsU0FBTztBQUNUOzs7QUNkQSxJQUFBQyxvQkFBMEI7QUFZbkIsU0FB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QXlDO0FBQUEsSUFDM0Q7QUFDQSxVQUFNLFlBQVksT0FBTyxlQUFlLElBQUk7QUFDNUMsV0FBTyxDQUFDLFlBQTBCLE9BQU8sZUFBZSxPQUFPLE1BQU07QUFBQSxFQUN2RTtBQUNGOzs7QUN0Q08sU0FBUyxpQkFBaUIsV0FBbUQ7QUFDbEYsU0FBTyxDQUFDLENBQUUsVUFBc0M7QUFDbEQ7OztBQ0FPLFNBQVMsYUFBYSxXQUErQztBQUMxRSxTQUFPLGlCQUFpQixTQUFTLEtBQUssVUFBVSxTQUFTLENBQUMsTUFBTTtBQUNsRTs7O0FDSk8sU0FBUyx1QkFBdUIsV0FBeUQ7QUFDOUYsU0FBTyxDQUFDLENBQUUsVUFBNEM7QUFDeEQ7OztBQ0hPLFNBQVMsY0FBYyxXQUF5RDtBQUNyRixTQUFPLFVBQVU7QUFDbkI7OztBQ0NPLFNBQVMsWUFBWSxXQUE4QztBQUN4RSxTQUFPLGlCQUFpQixTQUFTLEtBQUssVUFBVSxTQUFTLENBQUMsTUFBTTtBQUNsRTsiLAogICJuYW1lcyI6IFsiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAiaW1wb3J0X29ic2lkaWFuIiwgImltcG9ydF9vYnNpZGlhbiIsICJpbXBvcnRfb2JzaWRpYW4iLCAibG9hZE1lcm1haWRPcmlnaW5hbCIsICJpbXBvcnRfb2JzaWRpYW4iLCAibG9hZFBkZkpzT3JpZ2luYWwiLCAiaW1wb3J0X29ic2lkaWFuIiwgImxvYWRQcmlzbU9yaWdpbmFsIl0KfQo=