@ogidor/dashboard 1.0.11 → 1.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/app/dashboard.component.d.ts +18 -4
- package/esm2020/app/dashboard.component.mjs +252 -70
- package/fesm2015/ogidor-dashboard.mjs +252 -70
- package/fesm2015/ogidor-dashboard.mjs.map +1 -1
- package/fesm2020/ogidor-dashboard.mjs +251 -69
- package/fesm2020/ogidor-dashboard.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Component, Input, Output, EventEmitter, ContentChild, TemplateRef,
|
|
1
|
+
import { Component, Input, Output, EventEmitter, ContentChild, TemplateRef, Pipe, HostListener, ViewChild } from '@angular/core';
|
|
2
2
|
import { Subscription } from 'rxjs';
|
|
3
3
|
import { GridCellDirective } from './custom-grid.component';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
@@ -49,10 +49,19 @@ export class DashboardComponent {
|
|
|
49
49
|
this.resolvedTheme = { ...DEFAULT_THEME };
|
|
50
50
|
this.wrapperStyles = {};
|
|
51
51
|
this.pages = [];
|
|
52
|
+
this.visiblePages = [];
|
|
53
|
+
this.hiddenCount = 0;
|
|
52
54
|
this.activePageId = '';
|
|
53
55
|
this.isPoppedOut = false;
|
|
54
|
-
this.
|
|
56
|
+
this.tabSwitcherOpen = false;
|
|
55
57
|
this.subs = new Subscription();
|
|
58
|
+
// Reserved space for the overflow "+N" button and the add "+" button (px)
|
|
59
|
+
this.OVERFLOW_BTN_W = 80;
|
|
60
|
+
this.ADD_BTN_W = 52;
|
|
61
|
+
this.GAP = 6;
|
|
62
|
+
this.PADDING = 12; // 6px each side
|
|
63
|
+
// Cache of measured tab widths (including gap) indexed by page position
|
|
64
|
+
this._tabWidthCache = [];
|
|
56
65
|
}
|
|
57
66
|
ngOnChanges(changes) {
|
|
58
67
|
if (changes['theme'] || changes['initialLayout'])
|
|
@@ -73,11 +82,15 @@ export class DashboardComponent {
|
|
|
73
82
|
this.isPoppedOut = true;
|
|
74
83
|
this.subs.add(this.stateService.pages$.subscribe(pages => {
|
|
75
84
|
this.pages = pages;
|
|
85
|
+
this._tabWidthCache = []; // invalidate cache — page list changed
|
|
76
86
|
if (this.isPoppedOut && hash) {
|
|
77
87
|
if (pages.find(p => p.id === hash))
|
|
78
88
|
this.stateService.setActivePage(hash);
|
|
79
89
|
}
|
|
80
90
|
this.updateActivePage();
|
|
91
|
+
this.recalcVisibleTabs();
|
|
92
|
+
// Second pass after Angular has rendered the updated tab elements
|
|
93
|
+
setTimeout(() => this.recalcVisibleTabs());
|
|
81
94
|
}));
|
|
82
95
|
this.subs.add(this.stateService.activePageId$.subscribe(id => {
|
|
83
96
|
this.activePageId = id;
|
|
@@ -85,18 +98,16 @@ export class DashboardComponent {
|
|
|
85
98
|
}));
|
|
86
99
|
}
|
|
87
100
|
ngAfterViewInit() {
|
|
88
|
-
if (!this.
|
|
101
|
+
if (!this.tabsTrackRef)
|
|
89
102
|
return;
|
|
90
103
|
this.zone.runOutsideAngular(() => {
|
|
91
104
|
this.resizeObserver = new ResizeObserver(() => {
|
|
92
|
-
this.zone.run(() => this.
|
|
105
|
+
this.zone.run(() => this.recalcVisibleTabs());
|
|
93
106
|
});
|
|
94
|
-
this.resizeObserver.observe(this.
|
|
95
|
-
});
|
|
96
|
-
// Also detect scroll so fade hides when scrolled to end
|
|
97
|
-
this.tabsContainerRef.nativeElement.addEventListener('scroll', () => {
|
|
98
|
-
this.zone.run(() => this.checkOverflow());
|
|
107
|
+
this.resizeObserver.observe(this.tabsTrackRef.nativeElement);
|
|
99
108
|
});
|
|
109
|
+
// Initial measurement pass now that the DOM is ready
|
|
110
|
+
setTimeout(() => this.recalcVisibleTabs());
|
|
100
111
|
}
|
|
101
112
|
ngOnDestroy() {
|
|
102
113
|
this.subs.unsubscribe();
|
|
@@ -122,12 +133,82 @@ export class DashboardComponent {
|
|
|
122
133
|
this.stateService.popOutPage(pageId);
|
|
123
134
|
}
|
|
124
135
|
serializeLayout() { return this.stateService.serializeLayout(); }
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
136
|
+
openTabSwitcher() { this.tabSwitcherOpen = true; }
|
|
137
|
+
closeTabSwitcher() { this.tabSwitcherOpen = false; }
|
|
138
|
+
onEscapeKey() { this.closeTabSwitcher(); }
|
|
139
|
+
onSwitcherSelect(pageId) {
|
|
140
|
+
this.stateService.setActivePage(pageId);
|
|
141
|
+
this.closeTabSwitcher();
|
|
142
|
+
}
|
|
143
|
+
onSwitcherPopOut(event, pageId) {
|
|
144
|
+
event.stopPropagation();
|
|
145
|
+
this.stateService.popOutPage(pageId);
|
|
146
|
+
this.closeTabSwitcher();
|
|
147
|
+
}
|
|
148
|
+
onSwitcherRemove(event, pageId) {
|
|
149
|
+
event.stopPropagation();
|
|
150
|
+
if (confirm('Remove this workspace?')) {
|
|
151
|
+
this.stateService.removePage(pageId);
|
|
152
|
+
if (this.pages.length <= 1)
|
|
153
|
+
this.closeTabSwitcher();
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
onSwitcherAdd() {
|
|
157
|
+
const name = prompt('Workspace name:', `Workspace ${this.pages.length + 1}`);
|
|
158
|
+
if (name)
|
|
159
|
+
this.stateService.addPage(name);
|
|
160
|
+
}
|
|
161
|
+
recalcVisibleTabs() {
|
|
162
|
+
if (!this.tabsTrackRef || !this.pages.length) {
|
|
163
|
+
this.visiblePages = this.pages;
|
|
164
|
+
this.hiddenCount = 0;
|
|
165
|
+
this.cdr.markForCheck();
|
|
128
166
|
return;
|
|
129
|
-
|
|
130
|
-
|
|
167
|
+
}
|
|
168
|
+
const track = this.tabsTrackRef.nativeElement;
|
|
169
|
+
const trackW = track.clientWidth;
|
|
170
|
+
// Space always consumed by the add "+" button + padding
|
|
171
|
+
const baseReserved = this.ADD_BTN_W + this.GAP + this.PADDING;
|
|
172
|
+
// Space needed for the overflow "+N" button when shown
|
|
173
|
+
const overflowSlot = this.OVERFLOW_BTN_W + this.GAP;
|
|
174
|
+
// Measure each real tab element currently in the DOM.
|
|
175
|
+
// The DOM always renders all visiblePages tabs, so we may not have all tabs
|
|
176
|
+
// measured yet — fall back to the previous measured cache or a generous estimate.
|
|
177
|
+
const tabEls = Array.from(track.querySelectorAll('.tab'));
|
|
178
|
+
// Build a width map by index (only covers currently visible tabs)
|
|
179
|
+
const measuredWidths = this.pages.map((_, i) => {
|
|
180
|
+
const el = tabEls[i];
|
|
181
|
+
return el ? el.getBoundingClientRect().width + this.GAP : this._tabWidthCache[i] ?? 150 + this.GAP;
|
|
182
|
+
});
|
|
183
|
+
// Update cache for next call
|
|
184
|
+
tabEls.forEach((el, i) => {
|
|
185
|
+
this._tabWidthCache[i] = el.getBoundingClientRect().width + this.GAP;
|
|
186
|
+
});
|
|
187
|
+
// How much space the tabs need in total (no overflow button)
|
|
188
|
+
const totalNeeded = measuredWidths.reduce((s, w) => s + w, 0) - this.GAP; // remove trailing gap
|
|
189
|
+
if (totalNeeded <= trackW - baseReserved) {
|
|
190
|
+
// Everything fits — show all
|
|
191
|
+
this.visiblePages = this.pages;
|
|
192
|
+
this.hiddenCount = 0;
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
// Not everything fits — fill as many as possible while always leaving room for overflow btn
|
|
196
|
+
const budget = trackW - baseReserved - overflowSlot;
|
|
197
|
+
let used = 0;
|
|
198
|
+
let count = 0;
|
|
199
|
+
for (let i = 0; i < this.pages.length; i++) {
|
|
200
|
+
used += measuredWidths[i];
|
|
201
|
+
if (used - this.GAP <= budget) { // -GAP: last item has no trailing gap
|
|
202
|
+
count++;
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
break;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
count = Math.max(1, count);
|
|
209
|
+
this.visiblePages = this.pages.slice(0, count);
|
|
210
|
+
this.hiddenCount = this.pages.length - count;
|
|
211
|
+
}
|
|
131
212
|
this.cdr.markForCheck();
|
|
132
213
|
}
|
|
133
214
|
applyTheme() {
|
|
@@ -158,18 +239,10 @@ export class DashboardComponent {
|
|
|
158
239
|
}
|
|
159
240
|
updateActivePage() {
|
|
160
241
|
this.activePage = this.pages.find(p => p.id === this.activePageId);
|
|
161
|
-
// scroll active tab into view
|
|
162
|
-
setTimeout(() => {
|
|
163
|
-
if (!this.tabsContainerRef)
|
|
164
|
-
return;
|
|
165
|
-
const active = this.tabsContainerRef.nativeElement.querySelector('.tab.active');
|
|
166
|
-
active?.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'nearest' });
|
|
167
|
-
this.checkOverflow();
|
|
168
|
-
});
|
|
169
242
|
}
|
|
170
243
|
}
|
|
171
244
|
DashboardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DashboardComponent, deps: [{ token: i1.DashboardStateService }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
|
172
|
-
DashboardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DashboardComponent, selector: "app-dashboard", inputs: { initialLayout: "initialLayout", theme: "theme" }, outputs: { addWidgetRequested: "addWidgetRequested", editWidgetRequested: "editWidgetRequested" }, queries: [{ propertyName: "cellTemplate", first: true, predicate: GridCellDirective, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "
|
|
245
|
+
DashboardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: DashboardComponent, selector: "app-dashboard", inputs: { initialLayout: "initialLayout", theme: "theme" }, outputs: { addWidgetRequested: "addWidgetRequested", editWidgetRequested: "editWidgetRequested" }, host: { listeners: { "document:keydown.escape": "onEscapeKey()" } }, queries: [{ propertyName: "cellTemplate", first: true, predicate: GridCellDirective, descendants: true, read: TemplateRef }], viewQueries: [{ propertyName: "tabsTrackRef", first: true, predicate: ["tabsTrack"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
|
|
173
246
|
<!-- POPPED-OUT MODE -->
|
|
174
247
|
<ng-container *ngIf="isPoppedOut; else normalMode">
|
|
175
248
|
<div class="popout-wrapper" [ngStyle]="wrapperStyles">
|
|
@@ -198,29 +271,39 @@ DashboardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", ver
|
|
|
198
271
|
|
|
199
272
|
<header class="dashboard-header">
|
|
200
273
|
|
|
201
|
-
<!--
|
|
202
|
-
<div class="tabs-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
</button>
|
|
217
|
-
</div>
|
|
218
|
-
<button class="btn-add-page" (click)="onAddPage()" title="New workspace">
|
|
219
|
-
<i class="la la-plus"></i>
|
|
274
|
+
<!-- Tab bar -->
|
|
275
|
+
<div class="tabs-track" #tabsTrack>
|
|
276
|
+
<!-- Visible tabs -->
|
|
277
|
+
<div
|
|
278
|
+
*ngFor="let page of visiblePages"
|
|
279
|
+
class="tab"
|
|
280
|
+
[class.active]="page.id === activePageId"
|
|
281
|
+
(click)="onSelectPage(page.id)"
|
|
282
|
+
>
|
|
283
|
+
<span class="tab-name">{{ page.name }}</span>
|
|
284
|
+
<button class="tab-action tab-popout" (click)="onPopOut($event, page.id)" title="Open in new window">
|
|
285
|
+
<i class="la la-external-link-alt"></i>
|
|
286
|
+
</button>
|
|
287
|
+
<button class="tab-action tab-close" *ngIf="pages.length > 1" (click)="onRemovePage($event, page.id)" title="Close">
|
|
288
|
+
<i class="la la-times"></i>
|
|
220
289
|
</button>
|
|
221
290
|
</div>
|
|
222
|
-
|
|
223
|
-
|
|
291
|
+
|
|
292
|
+
<!-- Overflow button — shown only when there are hidden tabs -->
|
|
293
|
+
<button
|
|
294
|
+
*ngIf="hiddenCount > 0"
|
|
295
|
+
class="btn-overflow"
|
|
296
|
+
(click)="openTabSwitcher()"
|
|
297
|
+
title="Show all workspaces"
|
|
298
|
+
>
|
|
299
|
+
<span>+{{ hiddenCount }}</span>
|
|
300
|
+
<i class="la la-th-large"></i>
|
|
301
|
+
</button>
|
|
302
|
+
|
|
303
|
+
<!-- Add page button -->
|
|
304
|
+
<button class="btn-add-page" (click)="onAddPage()" title="New workspace">
|
|
305
|
+
<i class="la la-plus"></i>
|
|
306
|
+
</button>
|
|
224
307
|
</div>
|
|
225
308
|
|
|
226
309
|
<button class="btn-add-widget" (click)="addWidgetRequested.emit()" title="Add widget">
|
|
@@ -230,6 +313,49 @@ DashboardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", ver
|
|
|
230
313
|
|
|
231
314
|
</header>
|
|
232
315
|
|
|
316
|
+
<!-- ── Tab-switcher overlay (Chrome mobile style) ── -->
|
|
317
|
+
<div class="tab-switcher-overlay" *ngIf="tabSwitcherOpen" (click)="closeTabSwitcher()">
|
|
318
|
+
<div class="tab-switcher-sheet" (click)="$event.stopPropagation()">
|
|
319
|
+
|
|
320
|
+
<div class="tab-switcher-header">
|
|
321
|
+
<span class="tab-switcher-title">{{ pages.length }} Workspace{{ pages.length !== 1 ? 's' : '' }}</span>
|
|
322
|
+
<button class="tab-switcher-close-btn" (click)="closeTabSwitcher()" title="Close">
|
|
323
|
+
<i class="la la-times"></i>
|
|
324
|
+
</button>
|
|
325
|
+
</div>
|
|
326
|
+
|
|
327
|
+
<div class="tab-switcher-grid">
|
|
328
|
+
<div
|
|
329
|
+
*ngFor="let page of pages"
|
|
330
|
+
class="tab-card"
|
|
331
|
+
[class.active]="page.id === activePageId"
|
|
332
|
+
(click)="onSwitcherSelect(page.id)"
|
|
333
|
+
>
|
|
334
|
+
<div class="tab-card-icon">
|
|
335
|
+
<i class="la la-th-large"></i>
|
|
336
|
+
</div>
|
|
337
|
+
<span class="tab-card-name">{{ page.name }}</span>
|
|
338
|
+
<div class="tab-card-actions">
|
|
339
|
+
<button class="tab-card-btn tab-card-popout" (click)="onSwitcherPopOut($event, page.id)" title="Open in new window">
|
|
340
|
+
<i class="la la-external-link-alt"></i>
|
|
341
|
+
</button>
|
|
342
|
+
<button class="tab-card-btn tab-card-remove" *ngIf="pages.length > 1" (click)="onSwitcherRemove($event, page.id)" title="Close">
|
|
343
|
+
<i class="la la-times"></i>
|
|
344
|
+
</button>
|
|
345
|
+
</div>
|
|
346
|
+
</div>
|
|
347
|
+
</div>
|
|
348
|
+
|
|
349
|
+
<div class="tab-switcher-footer">
|
|
350
|
+
<button class="tab-switcher-add-btn" (click)="onSwitcherAdd()">
|
|
351
|
+
<i class="la la-plus"></i>
|
|
352
|
+
<span>New Workspace</span>
|
|
353
|
+
</button>
|
|
354
|
+
</div>
|
|
355
|
+
|
|
356
|
+
</div>
|
|
357
|
+
</div>
|
|
358
|
+
|
|
233
359
|
<div class="grid-container">
|
|
234
360
|
<app-grid [widgets]="activePage?.widgets || []" (itemChanged)="onItemChanged($event)">
|
|
235
361
|
<ng-template gridCell let-widget="widget">
|
|
@@ -248,7 +374,7 @@ DashboardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", ver
|
|
|
248
374
|
</main>
|
|
249
375
|
</div>
|
|
250
376
|
</ng-template>
|
|
251
|
-
`, isInline: true, styles: [":host{display:flex;flex-direction:column;width:100%;height:100%;min-height:0;--dash-bg: #000000;--dash-panel-bg: #1c1c1e;--dash-card-bg: #2c2c2e;--dash-fore-color: #8e8e93;--dash-accent-color: #0a84ff;--dash-danger-color: #ff453a;--dash-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;--dash-tabs-container-color: rgba(44,44,46,.6);--dash-tab-active-color: #3a3a3c;--dash-tab-active-text: #ffffff;--dash-tab-hover-text: #e5e5ea;--dash-add-widget-text: #ffffff;--dash-popout-title-color: #ffffff;--dash-widget-title-color: #ffffff;--dash-drag-handle-color: rgba(255,255,255,.2);--dash-widget-border-color: rgba(255,255,255,.07);--dash-widget-btn-bg: rgba(255,255,255,.07);--dash-widget-btn-color: rgba(255,255,255,.5);--dash-placeholder-color: #0a84ff;--dash-resize-handle-color: rgba(255,255,255,.25)}.dashboard-wrapper{display:flex;flex:1;min-height:0;overflow:hidden;padding:16px;box-sizing:border-box;background:var(--dash-bg);color:var(--dash-fore-color);font-family:var(--dash-font-family)}.main-content{flex:1;display:flex;flex-direction:column;overflow:hidden;border-radius:40px;padding:20px;background:var(--dash-panel-bg);border:1px solid rgba(255,255,255,.05)}.popout-wrapper{display:flex;flex:1;flex-direction:column;min-height:0;overflow:hidden;padding:16px;box-sizing:border-box;background:var(--dash-bg);color:var(--dash-fore-color);font-family:var(--dash-font-family)}.popout-header{display:flex;align-items:center;margin-bottom:16px;padding:10px 18px;background:var(--dash-panel-bg);border-radius:20px;border:1px solid rgba(255,255,255,.06);flex-shrink:0}.popout-title{font-size:16px;font-weight:700;color:var(--dash-popout-title-color)}.popout-wrapper app-grid{flex:1;min-height:0;overflow:auto}.dashboard-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px;gap:12px;flex-shrink:0}.tabs-
|
|
377
|
+
`, isInline: true, styles: [":host{display:flex;flex-direction:column;width:100%;height:100%;min-height:0;--dash-bg: #000000;--dash-panel-bg: #1c1c1e;--dash-card-bg: #2c2c2e;--dash-fore-color: #8e8e93;--dash-accent-color: #0a84ff;--dash-danger-color: #ff453a;--dash-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;--dash-tabs-container-color: rgba(44,44,46,.6);--dash-tab-active-color: #3a3a3c;--dash-tab-active-text: #ffffff;--dash-tab-hover-text: #e5e5ea;--dash-add-widget-text: #ffffff;--dash-popout-title-color: #ffffff;--dash-widget-title-color: #ffffff;--dash-drag-handle-color: rgba(255,255,255,.2);--dash-widget-border-color: rgba(255,255,255,.07);--dash-widget-btn-bg: rgba(255,255,255,.07);--dash-widget-btn-color: rgba(255,255,255,.5);--dash-placeholder-color: #0a84ff;--dash-resize-handle-color: rgba(255,255,255,.25)}.dashboard-wrapper{display:flex;flex:1;min-height:0;overflow:hidden;padding:16px;box-sizing:border-box;background:var(--dash-bg);color:var(--dash-fore-color);font-family:var(--dash-font-family)}.main-content{flex:1;display:flex;flex-direction:column;overflow:hidden;border-radius:40px;padding:20px;background:var(--dash-panel-bg);border:1px solid rgba(255,255,255,.05);position:relative}.popout-wrapper{display:flex;flex:1;flex-direction:column;min-height:0;overflow:hidden;padding:16px;box-sizing:border-box;background:var(--dash-bg);color:var(--dash-fore-color);font-family:var(--dash-font-family)}.popout-header{display:flex;align-items:center;margin-bottom:16px;padding:10px 18px;background:var(--dash-panel-bg);border-radius:20px;border:1px solid rgba(255,255,255,.06);flex-shrink:0}.popout-title{font-size:16px;font-weight:700;color:var(--dash-popout-title-color)}.popout-wrapper app-grid{flex:1;min-height:0;overflow:auto}.dashboard-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px;gap:12px;flex-shrink:0}.tabs-track{display:flex;align-items:center;gap:6px;flex:1;min-width:0;background:var(--dash-tabs-container-color);backdrop-filter:blur(10px);border-radius:25px;padding:6px;overflow:hidden}.tab{display:flex;align-items:center;gap:4px;padding:8px 14px 8px 18px;border-radius:20px;cursor:pointer;font-size:14px;font-weight:500;color:var(--dash-fore-color);white-space:nowrap;flex-shrink:0;transition:background .2s,color .2s}.tab.active{background:var(--dash-tab-active-color);color:var(--dash-tab-active-text)}.tab:hover:not(.active){color:var(--dash-tab-hover-text);background:rgba(255,255,255,.05)}.tab-name{white-space:nowrap}.tab-action{background:transparent;border:none;color:var(--dash-fore-color);padding:2px;font-size:11px;cursor:pointer;opacity:0;border-radius:50%;width:20px;height:20px;display:flex;align-items:center;justify-content:center;transition:all .2s;flex-shrink:0}.tab:hover .tab-action{opacity:1}.tab-popout:hover{color:var(--dash-accent-color);background:rgba(10,132,255,.18)}.tab-close:hover{color:var(--dash-danger-color);background:rgba(255,69,58,.2)}.btn-overflow{display:inline-flex;align-items:center;gap:5px;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.12);border-radius:20px;padding:7px 13px;cursor:pointer;font-size:13px;font-weight:600;color:var(--dash-tab-active-text);white-space:nowrap;flex-shrink:0;transition:background .2s,border-color .2s}.btn-overflow:hover{background:rgba(10,132,255,.18);border-color:var(--dash-accent-color);color:var(--dash-accent-color)}.btn-add-page{background:transparent;border:none;color:var(--dash-fore-color);padding:8px 14px;cursor:pointer;border-radius:20px;flex-shrink:0;transition:all .2s}.btn-add-page:hover{color:var(--dash-accent-color);background:rgba(10,132,255,.1)}.tab-switcher-overlay{position:absolute;inset:0;z-index:1000;background:rgba(0,0,0,.55);backdrop-filter:blur(4px);display:flex;align-items:flex-start;justify-content:center;padding-top:60px;animation:overlay-in .18s ease}@keyframes overlay-in{0%{opacity:0}to{opacity:1}}.tab-switcher-sheet{background:var(--dash-panel-bg);border:1px solid rgba(255,255,255,.08);border-radius:24px;width:min(520px,calc(100% - 32px));max-height:calc(100% - 80px);display:flex;flex-direction:column;overflow:hidden;animation:sheet-in .22s cubic-bezier(.32,1.2,.5,1)}@keyframes sheet-in{0%{transform:translateY(-16px) scale(.97);opacity:0}to{transform:translateY(0) scale(1);opacity:1}}.tab-switcher-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px 12px;border-bottom:1px solid rgba(255,255,255,.06);flex-shrink:0}.tab-switcher-title{font-size:15px;font-weight:700;color:var(--dash-tab-active-text)}.tab-switcher-close-btn{background:rgba(255,255,255,.07);border:none;color:var(--dash-fore-color);width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:14px;transition:background .15s,color .15s}.tab-switcher-close-btn:hover{background:rgba(255,69,58,.25);color:var(--dash-danger-color)}.tab-switcher-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:10px;padding:16px;overflow-y:auto;scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.15) transparent}.tab-card{display:flex;flex-direction:column;align-items:center;gap:8px;padding:16px 12px 12px;border-radius:16px;background:var(--dash-card-bg);border:1.5px solid transparent;cursor:pointer;transition:border-color .15s,background .15s,transform .12s;position:relative}.tab-card:hover{background:rgba(255,255,255,.06);transform:translateY(-2px)}.tab-card.active{border-color:var(--dash-accent-color);background:rgba(10,132,255,.12)}.tab-card-icon{width:44px;height:44px;border-radius:12px;background:rgba(255,255,255,.07);display:flex;align-items:center;justify-content:center;font-size:20px;color:var(--dash-fore-color)}.tab-card.active .tab-card-icon{background:rgba(10,132,255,.25);color:var(--dash-accent-color)}.tab-card-name{font-size:13px;font-weight:500;color:var(--dash-tab-active-text);text-align:center;word-break:break-word;line-height:1.3}.tab-card-actions{display:flex;gap:4px;opacity:0;transition:opacity .15s}.tab-card:hover .tab-card-actions{opacity:1}.tab-card-btn{background:rgba(255,255,255,.07);border:none;width:26px;height:26px;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:12px;color:var(--dash-fore-color);transition:background .15s,color .15s}.tab-card-popout:hover{background:rgba(10,132,255,.25);color:var(--dash-accent-color)}.tab-card-remove:hover{background:rgba(255,69,58,.25);color:var(--dash-danger-color)}.tab-switcher-footer{padding:12px 16px 16px;border-top:1px solid rgba(255,255,255,.06);flex-shrink:0}.tab-switcher-add-btn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:11px 20px;border-radius:16px;background:rgba(10,132,255,.15);border:1.5px dashed rgba(10,132,255,.4);color:var(--dash-accent-color);font-size:14px;font-weight:600;cursor:pointer;transition:background .15s,border-color .15s}.tab-switcher-add-btn:hover{background:rgba(10,132,255,.25);border-color:var(--dash-accent-color)}.btn-add-widget{display:flex;align-items:center;gap:6px;background:var(--dash-accent-color);border:none;color:var(--dash-add-widget-text);font-size:14px;font-weight:600;padding:10px 20px;border-radius:22px;cursor:pointer;white-space:nowrap;flex-shrink:0;transition:opacity .2s,transform .15s}.btn-add-widget:hover{opacity:.9;transform:translateY(-1px)}.btn-add-widget:active{transform:translateY(0)}.main-content .grid-container{flex:1;overflow:auto;border-radius:24px;min-height:0}app-grid{background:transparent;display:block;height:100%;width:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i3.WidgetRendererComponent, selector: "app-widget-renderer", inputs: ["widget", "theme"], outputs: ["editRequested", "removeRequested"] }, { kind: "component", type: i4.CustomGridComponent, selector: "app-grid", inputs: ["widgets", "columns", "gap", "rowHeight", "minItemCols", "minItemRows"], outputs: ["itemChanged", "layoutChanged"] }, { kind: "directive", type: i4.GridCellDirective, selector: "[gridCell]" }] });
|
|
252
378
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DashboardComponent, decorators: [{
|
|
253
379
|
type: Component,
|
|
254
380
|
args: [{ selector: 'app-dashboard', template: `
|
|
@@ -280,29 +406,39 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
280
406
|
|
|
281
407
|
<header class="dashboard-header">
|
|
282
408
|
|
|
283
|
-
<!--
|
|
284
|
-
<div class="tabs-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
</button>
|
|
299
|
-
</div>
|
|
300
|
-
<button class="btn-add-page" (click)="onAddPage()" title="New workspace">
|
|
301
|
-
<i class="la la-plus"></i>
|
|
409
|
+
<!-- Tab bar -->
|
|
410
|
+
<div class="tabs-track" #tabsTrack>
|
|
411
|
+
<!-- Visible tabs -->
|
|
412
|
+
<div
|
|
413
|
+
*ngFor="let page of visiblePages"
|
|
414
|
+
class="tab"
|
|
415
|
+
[class.active]="page.id === activePageId"
|
|
416
|
+
(click)="onSelectPage(page.id)"
|
|
417
|
+
>
|
|
418
|
+
<span class="tab-name">{{ page.name }}</span>
|
|
419
|
+
<button class="tab-action tab-popout" (click)="onPopOut($event, page.id)" title="Open in new window">
|
|
420
|
+
<i class="la la-external-link-alt"></i>
|
|
421
|
+
</button>
|
|
422
|
+
<button class="tab-action tab-close" *ngIf="pages.length > 1" (click)="onRemovePage($event, page.id)" title="Close">
|
|
423
|
+
<i class="la la-times"></i>
|
|
302
424
|
</button>
|
|
303
425
|
</div>
|
|
304
|
-
|
|
305
|
-
|
|
426
|
+
|
|
427
|
+
<!-- Overflow button — shown only when there are hidden tabs -->
|
|
428
|
+
<button
|
|
429
|
+
*ngIf="hiddenCount > 0"
|
|
430
|
+
class="btn-overflow"
|
|
431
|
+
(click)="openTabSwitcher()"
|
|
432
|
+
title="Show all workspaces"
|
|
433
|
+
>
|
|
434
|
+
<span>+{{ hiddenCount }}</span>
|
|
435
|
+
<i class="la la-th-large"></i>
|
|
436
|
+
</button>
|
|
437
|
+
|
|
438
|
+
<!-- Add page button -->
|
|
439
|
+
<button class="btn-add-page" (click)="onAddPage()" title="New workspace">
|
|
440
|
+
<i class="la la-plus"></i>
|
|
441
|
+
</button>
|
|
306
442
|
</div>
|
|
307
443
|
|
|
308
444
|
<button class="btn-add-widget" (click)="addWidgetRequested.emit()" title="Add widget">
|
|
@@ -312,6 +448,49 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
312
448
|
|
|
313
449
|
</header>
|
|
314
450
|
|
|
451
|
+
<!-- ── Tab-switcher overlay (Chrome mobile style) ── -->
|
|
452
|
+
<div class="tab-switcher-overlay" *ngIf="tabSwitcherOpen" (click)="closeTabSwitcher()">
|
|
453
|
+
<div class="tab-switcher-sheet" (click)="$event.stopPropagation()">
|
|
454
|
+
|
|
455
|
+
<div class="tab-switcher-header">
|
|
456
|
+
<span class="tab-switcher-title">{{ pages.length }} Workspace{{ pages.length !== 1 ? 's' : '' }}</span>
|
|
457
|
+
<button class="tab-switcher-close-btn" (click)="closeTabSwitcher()" title="Close">
|
|
458
|
+
<i class="la la-times"></i>
|
|
459
|
+
</button>
|
|
460
|
+
</div>
|
|
461
|
+
|
|
462
|
+
<div class="tab-switcher-grid">
|
|
463
|
+
<div
|
|
464
|
+
*ngFor="let page of pages"
|
|
465
|
+
class="tab-card"
|
|
466
|
+
[class.active]="page.id === activePageId"
|
|
467
|
+
(click)="onSwitcherSelect(page.id)"
|
|
468
|
+
>
|
|
469
|
+
<div class="tab-card-icon">
|
|
470
|
+
<i class="la la-th-large"></i>
|
|
471
|
+
</div>
|
|
472
|
+
<span class="tab-card-name">{{ page.name }}</span>
|
|
473
|
+
<div class="tab-card-actions">
|
|
474
|
+
<button class="tab-card-btn tab-card-popout" (click)="onSwitcherPopOut($event, page.id)" title="Open in new window">
|
|
475
|
+
<i class="la la-external-link-alt"></i>
|
|
476
|
+
</button>
|
|
477
|
+
<button class="tab-card-btn tab-card-remove" *ngIf="pages.length > 1" (click)="onSwitcherRemove($event, page.id)" title="Close">
|
|
478
|
+
<i class="la la-times"></i>
|
|
479
|
+
</button>
|
|
480
|
+
</div>
|
|
481
|
+
</div>
|
|
482
|
+
</div>
|
|
483
|
+
|
|
484
|
+
<div class="tab-switcher-footer">
|
|
485
|
+
<button class="tab-switcher-add-btn" (click)="onSwitcherAdd()">
|
|
486
|
+
<i class="la la-plus"></i>
|
|
487
|
+
<span>New Workspace</span>
|
|
488
|
+
</button>
|
|
489
|
+
</div>
|
|
490
|
+
|
|
491
|
+
</div>
|
|
492
|
+
</div>
|
|
493
|
+
|
|
315
494
|
<div class="grid-container">
|
|
316
495
|
<app-grid [widgets]="activePage?.widgets || []" (itemChanged)="onItemChanged($event)">
|
|
317
496
|
<ng-template gridCell let-widget="widget">
|
|
@@ -330,7 +509,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
330
509
|
</main>
|
|
331
510
|
</div>
|
|
332
511
|
</ng-template>
|
|
333
|
-
`, styles: [":host{display:flex;flex-direction:column;width:100%;height:100%;min-height:0;--dash-bg: #000000;--dash-panel-bg: #1c1c1e;--dash-card-bg: #2c2c2e;--dash-fore-color: #8e8e93;--dash-accent-color: #0a84ff;--dash-danger-color: #ff453a;--dash-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;--dash-tabs-container-color: rgba(44,44,46,.6);--dash-tab-active-color: #3a3a3c;--dash-tab-active-text: #ffffff;--dash-tab-hover-text: #e5e5ea;--dash-add-widget-text: #ffffff;--dash-popout-title-color: #ffffff;--dash-widget-title-color: #ffffff;--dash-drag-handle-color: rgba(255,255,255,.2);--dash-widget-border-color: rgba(255,255,255,.07);--dash-widget-btn-bg: rgba(255,255,255,.07);--dash-widget-btn-color: rgba(255,255,255,.5);--dash-placeholder-color: #0a84ff;--dash-resize-handle-color: rgba(255,255,255,.25)}.dashboard-wrapper{display:flex;flex:1;min-height:0;overflow:hidden;padding:16px;box-sizing:border-box;background:var(--dash-bg);color:var(--dash-fore-color);font-family:var(--dash-font-family)}.main-content{flex:1;display:flex;flex-direction:column;overflow:hidden;border-radius:40px;padding:20px;background:var(--dash-panel-bg);border:1px solid rgba(255,255,255,.05)}.popout-wrapper{display:flex;flex:1;flex-direction:column;min-height:0;overflow:hidden;padding:16px;box-sizing:border-box;background:var(--dash-bg);color:var(--dash-fore-color);font-family:var(--dash-font-family)}.popout-header{display:flex;align-items:center;margin-bottom:16px;padding:10px 18px;background:var(--dash-panel-bg);border-radius:20px;border:1px solid rgba(255,255,255,.06);flex-shrink:0}.popout-title{font-size:16px;font-weight:700;color:var(--dash-popout-title-color)}.popout-wrapper app-grid{flex:1;min-height:0;overflow:auto}.dashboard-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px;gap:12px;flex-shrink:0}.tabs-
|
|
512
|
+
`, styles: [":host{display:flex;flex-direction:column;width:100%;height:100%;min-height:0;--dash-bg: #000000;--dash-panel-bg: #1c1c1e;--dash-card-bg: #2c2c2e;--dash-fore-color: #8e8e93;--dash-accent-color: #0a84ff;--dash-danger-color: #ff453a;--dash-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;--dash-tabs-container-color: rgba(44,44,46,.6);--dash-tab-active-color: #3a3a3c;--dash-tab-active-text: #ffffff;--dash-tab-hover-text: #e5e5ea;--dash-add-widget-text: #ffffff;--dash-popout-title-color: #ffffff;--dash-widget-title-color: #ffffff;--dash-drag-handle-color: rgba(255,255,255,.2);--dash-widget-border-color: rgba(255,255,255,.07);--dash-widget-btn-bg: rgba(255,255,255,.07);--dash-widget-btn-color: rgba(255,255,255,.5);--dash-placeholder-color: #0a84ff;--dash-resize-handle-color: rgba(255,255,255,.25)}.dashboard-wrapper{display:flex;flex:1;min-height:0;overflow:hidden;padding:16px;box-sizing:border-box;background:var(--dash-bg);color:var(--dash-fore-color);font-family:var(--dash-font-family)}.main-content{flex:1;display:flex;flex-direction:column;overflow:hidden;border-radius:40px;padding:20px;background:var(--dash-panel-bg);border:1px solid rgba(255,255,255,.05);position:relative}.popout-wrapper{display:flex;flex:1;flex-direction:column;min-height:0;overflow:hidden;padding:16px;box-sizing:border-box;background:var(--dash-bg);color:var(--dash-fore-color);font-family:var(--dash-font-family)}.popout-header{display:flex;align-items:center;margin-bottom:16px;padding:10px 18px;background:var(--dash-panel-bg);border-radius:20px;border:1px solid rgba(255,255,255,.06);flex-shrink:0}.popout-title{font-size:16px;font-weight:700;color:var(--dash-popout-title-color)}.popout-wrapper app-grid{flex:1;min-height:0;overflow:auto}.dashboard-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:20px;gap:12px;flex-shrink:0}.tabs-track{display:flex;align-items:center;gap:6px;flex:1;min-width:0;background:var(--dash-tabs-container-color);backdrop-filter:blur(10px);border-radius:25px;padding:6px;overflow:hidden}.tab{display:flex;align-items:center;gap:4px;padding:8px 14px 8px 18px;border-radius:20px;cursor:pointer;font-size:14px;font-weight:500;color:var(--dash-fore-color);white-space:nowrap;flex-shrink:0;transition:background .2s,color .2s}.tab.active{background:var(--dash-tab-active-color);color:var(--dash-tab-active-text)}.tab:hover:not(.active){color:var(--dash-tab-hover-text);background:rgba(255,255,255,.05)}.tab-name{white-space:nowrap}.tab-action{background:transparent;border:none;color:var(--dash-fore-color);padding:2px;font-size:11px;cursor:pointer;opacity:0;border-radius:50%;width:20px;height:20px;display:flex;align-items:center;justify-content:center;transition:all .2s;flex-shrink:0}.tab:hover .tab-action{opacity:1}.tab-popout:hover{color:var(--dash-accent-color);background:rgba(10,132,255,.18)}.tab-close:hover{color:var(--dash-danger-color);background:rgba(255,69,58,.2)}.btn-overflow{display:inline-flex;align-items:center;gap:5px;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.12);border-radius:20px;padding:7px 13px;cursor:pointer;font-size:13px;font-weight:600;color:var(--dash-tab-active-text);white-space:nowrap;flex-shrink:0;transition:background .2s,border-color .2s}.btn-overflow:hover{background:rgba(10,132,255,.18);border-color:var(--dash-accent-color);color:var(--dash-accent-color)}.btn-add-page{background:transparent;border:none;color:var(--dash-fore-color);padding:8px 14px;cursor:pointer;border-radius:20px;flex-shrink:0;transition:all .2s}.btn-add-page:hover{color:var(--dash-accent-color);background:rgba(10,132,255,.1)}.tab-switcher-overlay{position:absolute;inset:0;z-index:1000;background:rgba(0,0,0,.55);backdrop-filter:blur(4px);display:flex;align-items:flex-start;justify-content:center;padding-top:60px;animation:overlay-in .18s ease}@keyframes overlay-in{0%{opacity:0}to{opacity:1}}.tab-switcher-sheet{background:var(--dash-panel-bg);border:1px solid rgba(255,255,255,.08);border-radius:24px;width:min(520px,calc(100% - 32px));max-height:calc(100% - 80px);display:flex;flex-direction:column;overflow:hidden;animation:sheet-in .22s cubic-bezier(.32,1.2,.5,1)}@keyframes sheet-in{0%{transform:translateY(-16px) scale(.97);opacity:0}to{transform:translateY(0) scale(1);opacity:1}}.tab-switcher-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px 12px;border-bottom:1px solid rgba(255,255,255,.06);flex-shrink:0}.tab-switcher-title{font-size:15px;font-weight:700;color:var(--dash-tab-active-text)}.tab-switcher-close-btn{background:rgba(255,255,255,.07);border:none;color:var(--dash-fore-color);width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:14px;transition:background .15s,color .15s}.tab-switcher-close-btn:hover{background:rgba(255,69,58,.25);color:var(--dash-danger-color)}.tab-switcher-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:10px;padding:16px;overflow-y:auto;scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.15) transparent}.tab-card{display:flex;flex-direction:column;align-items:center;gap:8px;padding:16px 12px 12px;border-radius:16px;background:var(--dash-card-bg);border:1.5px solid transparent;cursor:pointer;transition:border-color .15s,background .15s,transform .12s;position:relative}.tab-card:hover{background:rgba(255,255,255,.06);transform:translateY(-2px)}.tab-card.active{border-color:var(--dash-accent-color);background:rgba(10,132,255,.12)}.tab-card-icon{width:44px;height:44px;border-radius:12px;background:rgba(255,255,255,.07);display:flex;align-items:center;justify-content:center;font-size:20px;color:var(--dash-fore-color)}.tab-card.active .tab-card-icon{background:rgba(10,132,255,.25);color:var(--dash-accent-color)}.tab-card-name{font-size:13px;font-weight:500;color:var(--dash-tab-active-text);text-align:center;word-break:break-word;line-height:1.3}.tab-card-actions{display:flex;gap:4px;opacity:0;transition:opacity .15s}.tab-card:hover .tab-card-actions{opacity:1}.tab-card-btn{background:rgba(255,255,255,.07);border:none;width:26px;height:26px;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:12px;color:var(--dash-fore-color);transition:background .15s,color .15s}.tab-card-popout:hover{background:rgba(10,132,255,.25);color:var(--dash-accent-color)}.tab-card-remove:hover{background:rgba(255,69,58,.25);color:var(--dash-danger-color)}.tab-switcher-footer{padding:12px 16px 16px;border-top:1px solid rgba(255,255,255,.06);flex-shrink:0}.tab-switcher-add-btn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;padding:11px 20px;border-radius:16px;background:rgba(10,132,255,.15);border:1.5px dashed rgba(10,132,255,.4);color:var(--dash-accent-color);font-size:14px;font-weight:600;cursor:pointer;transition:background .15s,border-color .15s}.tab-switcher-add-btn:hover{background:rgba(10,132,255,.25);border-color:var(--dash-accent-color)}.btn-add-widget{display:flex;align-items:center;gap:6px;background:var(--dash-accent-color);border:none;color:var(--dash-add-widget-text);font-size:14px;font-weight:600;padding:10px 20px;border-radius:22px;cursor:pointer;white-space:nowrap;flex-shrink:0;transition:opacity .2s,transform .15s}.btn-add-widget:hover{opacity:.9;transform:translateY(-1px)}.btn-add-widget:active{transform:translateY(0)}.main-content .grid-container{flex:1;overflow:auto;border-radius:24px;min-height:0}app-grid{background:transparent;display:block;height:100%;width:100%}\n"] }]
|
|
334
513
|
}], ctorParameters: function () { return [{ type: i1.DashboardStateService }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }]; }, propDecorators: { initialLayout: [{
|
|
335
514
|
type: Input
|
|
336
515
|
}], theme: [{
|
|
@@ -342,8 +521,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
342
521
|
}], cellTemplate: [{
|
|
343
522
|
type: ContentChild,
|
|
344
523
|
args: [GridCellDirective, { read: TemplateRef }]
|
|
345
|
-
}],
|
|
524
|
+
}], tabsTrackRef: [{
|
|
346
525
|
type: ViewChild,
|
|
347
|
-
args: ['
|
|
526
|
+
args: ['tabsTrack']
|
|
527
|
+
}], onEscapeKey: [{
|
|
528
|
+
type: HostListener,
|
|
529
|
+
args: ['document:keydown.escape']
|
|
348
530
|
}] } });
|
|
349
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvZGFzaGJvYXJkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUFvQyxLQUFLLEVBQUUsTUFBTSxFQUMzQyxZQUFZLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFDdEQsU0FBUyxFQUF5QyxJQUFJLEVBQ3ZELE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7OztBQUU1RCxNQUFNLGFBQWEsR0FBNkI7SUFDOUMsZUFBZSxFQUFVLFNBQVM7SUFDbEMsVUFBVSxFQUFlLFNBQVM7SUFDbEMsZUFBZSxFQUFVLFNBQVM7SUFDbEMsU0FBUyxFQUFnQixTQUFTO0lBQ2xDLFdBQVcsRUFBYyxTQUFTO0lBQ2xDLFdBQVcsRUFBYyxTQUFTO0lBQ2xDLFVBQVUsRUFBZSxxRkFBcUY7SUFDOUcsa0JBQWtCLEVBQU8sb0JBQW9CO0lBQzdDLGNBQWMsRUFBVyxTQUFTO0lBQ2xDLGtCQUFrQixFQUFPLFNBQVM7SUFDbEMsaUJBQWlCLEVBQVEsU0FBUztJQUNsQyx3QkFBd0IsRUFBQyxTQUFTO0lBQ2xDLGdCQUFnQixFQUFTLFNBQVM7SUFDbEMsZ0JBQWdCLEVBQVMsU0FBUztJQUNsQyxlQUFlLEVBQVUsdUJBQXVCO0lBQ2hELGlCQUFpQixFQUFRLHdCQUF3QjtJQUNqRCxtQkFBbUIsRUFBTSx3QkFBd0I7SUFDakQsaUJBQWlCLEVBQVEsdUJBQXVCO0lBQ2hELGdCQUFnQixFQUFTLFNBQVM7SUFDbEMsaUJBQWlCLEVBQVEsd0JBQXdCO0NBQ2xELENBQUM7QUFHRixNQUFNLE9BQU8sa0JBQWtCO0lBQzdCLFNBQVMsQ0FBQyxLQUFhLEVBQUUsWUFBb0I7UUFDM0MsT0FBTyxL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aXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgSW5wdXQsIE91dHB1dCwgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLCBFdmVudEVtaXR0ZXIsIENvbnRlbnRDaGlsZCwgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgQ2hhbmdlRGV0ZWN0b3JSZWYsIE5nWm9uZSwgUGlwZSwgUGlwZVRyYW5zZm9ybVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhc2hib2FyZFN0YXRlU2VydmljZSB9IGZyb20gJy4vZGFzaGJvYXJkLXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGFnZSwgV2lkZ2V0LCBEYXNoYm9hcmRUaGVtZSB9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgR3JpZENlbGxEaXJlY3RpdmUgfSBmcm9tICcuL2N1c3RvbS1ncmlkLmNvbXBvbmVudCc7XG5cbmNvbnN0IERFRkFVTFRfVEhFTUU6IFJlcXVpcmVkPERhc2hib2FyZFRoZW1lPiA9IHtcbiAgYmFja2dyb3VuZENvbG9yOiAgICAgICAgICcjMDAwMDAwJyxcbiAgcGFuZWxDb2xvcjogICAgICAgICAgICAgICcjMWMxYzFlJyxcbiAgd2lkZ2V0Q2FyZENvbG9yOiAgICAgICAgICcjMmMyYzJlJyxcbiAgZm9yZUNvbG9yOiAgICAgICAgICAgICAgICcjOGU4ZTkzJyxcbiAgYWNjZW50Q29sb3I6ICAgICAgICAgICAgICcjMGE4NGZmJyxcbiAgZGFuZ2VyQ29sb3I6ICAgICAgICAgICAgICcjZmY0NTNhJyxcbiAgZm9udEZhbWlseTogICAgICAgICAgICAgICctYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFwiU2Vnb2UgVUlcIiwgUm9ib3RvLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmJyxcbiAgdGFic0NvbnRhaW5lckNvbG9yOiAgICAgICdyZ2JhKDQ0LDQ0LDQ2LDAuNiknLFxuICB0YWJBY3RpdmVDb2xvcjogICAgICAgICAgJyMzYTNhM2MnLFxuICB0YWJBY3RpdmVUZXh0Q29sb3I6ICAgICAgJyNmZmZmZmYnLFxuICB0YWJIb3ZlclRleHRDb2xvcjogICAgICAgJyNlNWU1ZWEnLFxuICBhZGRXaWRnZXRCdXR0b25UZXh0Q29sb3I6JyNmZmZmZmYnLFxuICBwb3BvdXRUaXRsZUNvbG9yOiAgICAgICAgJyNmZmZmZmYnLFxuICB3aWRnZXRUaXRsZUNvbG9yOiAgICAgICAgJyNmZmZmZmYnLFxuICBkcmFnSGFuZGxlQ29sb3I6ICAgICAgICAgJ3JnYmEoMjU1LDI1NSwyNTUsMC4yKScsXG4gIHdpZGdldEJvcmRlckNvbG9yOiAgICAgICAncmdiYSgyNTUsMjU1LDI1NSwwLjA3KScsXG4gIHdpZGdldEJ1dHRvbkJnQ29sb3I6ICAgICAncmdiYSgyNTUsMjU1LDI1NSwwLjA3KScsXG4gIHdpZGdldEJ1dHRvbkNvbG9yOiAgICAgICAncmdiYSgyNTUsMjU1LDI1NSwwLjUpJyxcbiAgcGxhY2Vob2xkZXJDb2xvcjogICAgICAgICcjMGE4NGZmJyxcbiAgcmVzaXplSGFuZGxlQ29sb3I6ICAgICAgICdyZ2JhKDI1NSwyNTUsMjU1LDAuMjUpJyxcbn07XG5cbkBQaXBlKHsgbmFtZTogJ292ZXJmbG93QWN0aXZlJyB9KVxuZXhwb3J0IGNsYXNzIE92ZXJmbG93QWN0aXZlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0ocGFnZXM6IFBhZ2VbXSwgYWN0aXZlUGFnZUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcGFnZXMuc29tZShwID0+IHAuaWQgPT09IGFjdGl2ZVBhZ2VJZCk7XG4gIH1cbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWRhc2hib2FyZCcsXG4gIHRlbXBsYXRlOiBgXG4gICAgPCEtLSBQT1BQRUQtT1VUIE1PREUgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzUG9wcGVkT3V0OyBlbHNlIG5vcm1hbE1vZGVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwb3BvdXQtd3JhcHBlclwiIFtuZ1N0eWxlXT1cIndyYXBwZXJTdHlsZXNcIj5cbiAgICAgICAgPGhlYWRlciBjbGFzcz1cInBvcG91dC1oZWFkZXJcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInBvcG91dC10aXRsZVwiPnt7IGFjdGl2ZVBhZ2U/Lm5hbWUgfX08L3NwYW4+XG4gICAgICAgIDwvaGVhZGVyPlxuICAgICAgICA8YXBwLWdyaWQgW3dpZGdldHNdPVwiYWN0aXZlUGFnZT8ud2lkZ2V0cyB8fCBbXVwiIChpdGVtQ2hhbmdlZCk9XCJvbkl0ZW1DaGFuZ2VkKCRldmVudClcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgZ3JpZENlbGwgbGV0LXdpZGdldD1cIndpZGdldFwiPlxuICAgICAgICAgICAgPGFwcC13aWRnZXQtcmVuZGVyZXIgW3dpZGdldF09XCJ3aWRnZXRcIiBbdGhlbWVdPVwicmVzb2x2ZWRUaGVtZVwiXG4gICAgICAgICAgICAgIChlZGl0UmVxdWVzdGVkKT1cImVkaXRXaWRnZXRSZXF1ZXN0ZWQuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKHJlbW92ZVJlcXVlc3RlZCk9XCJvblJlbW92ZVdpZGdldCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjZWxsVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNlbGxUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgd2lkZ2V0OiB3aWRnZXQgfVwiPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvYXBwLXdpZGdldC1yZW5kZXJlcj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2FwcC1ncmlkPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIE5PUk1BTCBNT0RFIC0tPlxuICAgIDxuZy10ZW1wbGF0ZSAjbm9ybWFsTW9kZT5cbiAgICAgIDxkaXYgY2xhc3M9XCJkYXNoYm9hcmQtd3JhcHBlclwiIFtuZ1N0eWxlXT1cIndyYXBwZXJTdHlsZXNcIj5cbiAgICAgICAgPG1haW4gY2xhc3M9XCJtYWluLWNvbnRlbnRcIj5cblxuICAgICAgICAgIDxoZWFkZXIgY2xhc3M9XCJkYXNoYm9hcmQtaGVhZGVyXCI+XG5cbiAgICAgICAgICAgIDwhLS0gVGFicyBwaWxsIOKAlCBzY3JvbGxhYmxlLCBmYWRlcyB3aGVuIG92ZXJmbG93aW5nIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYnMtc2Nyb2xsLXRyYWNrXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJzLWNvbnRhaW5lclwiICN0YWJzQ29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBwYWdlIG9mIHBhZ2VzXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGFiXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwicGFnZS5pZCA9PT0gYWN0aXZlUGFnZUlkXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblNlbGVjdFBhZ2UocGFnZS5pZClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGFiLW5hbWVcIj57eyBwYWdlLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwidGFiLWFjdGlvbiB0YWItcG9wb3V0XCIgKGNsaWNrKT1cIm9uUG9wT3V0KCRldmVudCwgcGFnZS5pZClcIiB0aXRsZT1cIk9wZW4gaW4gbmV3IHdpbmRvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImxhIGxhLWV4dGVybmFsLWxpbmstYWx0XCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwidGFiLWFjdGlvbiB0YWItY2xvc2VcIiAqbmdJZj1cInBhZ2VzLmxlbmd0aCA+IDFcIiAoY2xpY2spPVwib25SZW1vdmVQYWdlKCRldmVudCwgcGFnZS5pZClcIiB0aXRsZT1cIkNsb3NlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibGEgbGEtdGltZXNcIj48L2k+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLWFkZC1wYWdlXCIgKGNsaWNrKT1cIm9uQWRkUGFnZSgpXCIgdGl0bGU9XCJOZXcgd29ya3NwYWNlXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImxhIGxhLXBsdXNcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8IS0tIGZhZGUgaGludCBzaG93biB3aGVuIHNjcm9sbGFibGUgLS0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJzLWZhZGUtcmlnaHRcIiAqbmdJZj1cInRhYnNPdmVyZmxvd1wiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4tYWRkLXdpZGdldFwiIChjbGljayk9XCJhZGRXaWRnZXRSZXF1ZXN0ZWQuZW1pdCgpXCIgdGl0bGU9XCJBZGQgd2lkZ2V0XCI+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwibGEgbGEtcGx1c1wiPjwvaT5cbiAgICAgICAgICAgICAgPHNwYW4+QWRkIFdpZGdldDwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JpZC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxhcHAtZ3JpZCBbd2lkZ2V0c109XCJhY3RpdmVQYWdlPy53aWRnZXRzIHx8IFtdXCIgKGl0ZW1DaGFuZ2VkKT1cIm9uSXRlbUNoYW5nZWQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgZ3JpZENlbGwgbGV0LXdpZGdldD1cIndpZGdldFwiPlxuICAgICAgICAgICAgICAgIDxhcHAtd2lkZ2V0LXJlbmRlcmVyIFt3aWRnZXRdPVwid2lkZ2V0XCIgW3RoZW1lXT1cInJlc29sdmVkVGhlbWVcIlxuICAgICAgICAgICAgICAgICAgKGVkaXRSZXF1ZXN0ZWQpPVwiZWRpdFdpZGdldFJlcXVlc3RlZC5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgKHJlbW92ZVJlcXVlc3RlZCk9XCJvblJlbW92ZVdpZGdldCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2VsbFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2VsbFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgd2lkZ2V0OiB3aWRnZXQgfVwiPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9hcHAtd2lkZ2V0LXJlbmRlcmVyPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9hcHAtZ3JpZD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8L21haW4+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICBgLFxuICBzdHlsZXM6IFtgXG4gICAgOmhvc3Qge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICAtLWRhc2gtYmc6ICAgICAgICAgICAgICAgICAgICAjMDAwMDAwO1xuICAgICAgLS1kYXNoLXBhbmVsLWJnOiAgICAgICAgICAgICAgIzFjMWMxZTtcbiAgICAgIC0tZGFzaC1jYXJkLWJnOiAgICAgICAgICAgICAgICMyYzJjMmU7XG4gICAgICAtLWRhc2gtZm9yZS1jb2xvcjogICAgICAgICAgICAjOGU4ZTkzO1xuICAgICAgLS1kYXNoLWFjY2VudC1jb2xvcjogICAgICAgICAgIzBhODRmZjtcbiAgICAgIC0tZGFzaC1kYW5nZXItY29sb3I6ICAgICAgICAgICNmZjQ1M2E7XG4gICAgICAtLWRhc2gtZm9udC1mYW1pbHk6ICAgICAgICAgICAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFwiU2Vnb2UgVUlcIiwgUm9ib3RvLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICAgICAgLS1kYXNoLXRhYnMtY29udGFpbmVyLWNvbG9yOiAgcmdiYSg0NCw0NCw0NiwwLjYpO1xuICAgICAgLS1kYXNoLXRhYi1hY3RpdmUtY29sb3I6ICAgICAgIzNhM2EzYztcbiAgICAgIC0tZGFzaC10YWItYWN0aXZlLXRleHQ6ICAgICAgICNmZmZmZmY7XG4gICAgICAtLWRhc2gtdGFiLWhvdmVyLXRleHQ6ICAgICAgICAjZTVlNWVhO1xuICAgICAgLS1kYXNoLWFkZC13aWRnZXQtdGV4dDogICAgICAgI2ZmZmZmZjtcbiAgICAgIC0tZGFzaC1wb3BvdXQtdGl0bGUtY29sb3I6ICAgICNmZmZmZmY7XG4gICAgICAtLWRhc2gtd2lkZ2V0LXRpdGxlLWNvbG9yOiAgICAjZmZmZmZmO1xuICAgICAgLS1kYXNoLWRyYWctaGFuZGxlLWNvbG9yOiAgICAgcmdiYSgyNTUsMjU1LDI1NSwwLjIpO1xuICAgICAgLS1kYXNoLXdpZGdldC1ib3JkZXItY29sb3I6ICAgcmdiYSgyNTUsMjU1LDI1NSwwLjA3KTtcbiAgICAgIC0tZGFzaC13aWRnZXQtYnRuLWJnOiAgICAgICAgIHJnYmEoMjU1LDI1NSwyNTUsMC4wNyk7XG4gICAgICAtLWRhc2gtd2lkZ2V0LWJ0bi1jb2xvcjogICAgICByZ2JhKDI1NSwyNTUsMjU1LDAuNSk7XG4gICAgICAtLWRhc2gtcGxhY2Vob2xkZXItY29sb3I6ICAgICAjMGE4NGZmO1xuICAgICAgLS1kYXNoLXJlc2l6ZS1oYW5kbGUtY29sb3I6ICAgcmdiYSgyNTUsMjU1LDI1NSwwLjI1KTtcbiAgICB9XG5cbiAgICAvKiDilIDilIAgTm9ybWFsIGxheW91dCDilIDilIAgKi9cbiAgICAuZGFzaGJvYXJkLXdyYXBwZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIHBhZGRpbmc6IDE2cHg7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tZGFzaC1iZyk7XG4gICAgICBjb2xvcjogdmFyKC0tZGFzaC1mb3JlLWNvbG9yKTtcbiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1kYXNoLWZvbnQtZmFtaWx5KTtcbiAgICB9XG4gICAgLm1haW4tY29udGVudCB7XG4gICAgICBmbGV4OiAxO1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgYm9yZGVyLXJhZGl1czogNDBweDtcbiAgICAgIHBhZGRpbmc6IDIwcHg7XG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1kYXNoLXBhbmVsLWJnKTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4wNSk7XG4gICAgfVxuXG4gICAgLyog4pSA4pSAIFBvcC1vdXQgbGF5b3V0IOKUgOKUgCAqL1xuICAgIC5wb3BvdXQtd3JhcHBlciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleDogMTtcbiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIHBhZGRpbmc6IDE2cHg7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tZGFzaC1iZyk7XG4gICAgICBjb2xvcjogdmFyKC0tZGFzaC1mb3JlLWNvbG9yKTtcbiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1kYXNoLWZvbnQtZmFtaWx5KTtcbiAgICB9XG4gICAgLnBvcG91dC1oZWFkZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICAgICAgcGFkZGluZzogMTBweCAxOHB4O1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tZGFzaC1wYW5lbC1iZyk7XG4gICAgICBib3JkZXItcmFkaXVzOiAyMHB4O1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA2KTtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIH1cbiAgICAucG9wb3V0LXRpdGxlIHsgZm9udC1zaXplOiAxNnB4OyBmb250LXdlaWdodDogNzAwOyBjb2xvcjogdmFyKC0tZGFzaC1wb3BvdXQtdGl0bGUtY29sb3IpOyB9XG4gICAgLnBvcG91dC13cmFwcGVyIGFwcC1ncmlkIHsgZmxleDogMTsgbWluLWhlaWdodDogMDsgb3ZlcmZsb3c6IGF1dG87IH1cblxuICAgIC8qIOKUgOKUgCBIZWFkZXIg4pSA4pSAICovXG4gICAgLmRhc2hib2FyZC1oZWFkZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgICAgZ2FwOiAxMnB4O1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgfVxuXG4gICAgLyogU2Nyb2xsIHRyYWNrIHdyYXBzIHRoZSBwaWxsIGFuZCBzaG93cyBhIGZhZGUgd2hlbiBvdmVyZmxvd2luZyAqL1xuICAgIC50YWJzLXNjcm9sbC10cmFjayB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBmbGV4OiAxO1xuICAgICAgbWluLXdpZHRoOiAwO1xuICAgIH1cbiAgICAudGFicy1jb250YWluZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDhweDtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWRhc2gtdGFicy1jb250YWluZXItY29sb3IpO1xuICAgICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDEwcHgpO1xuICAgICAgYm9yZGVyLXJhZGl1czogMjVweDtcbiAgICAgIHBhZGRpbmc6IDZweDtcbiAgICAgIG92ZXJmbG93LXg6IGF1dG87XG4gICAgICBvdmVyZmxvdy15OiBoaWRkZW47XG4gICAgICBzY3JvbGxiYXItd2lkdGg6IG5vbmU7XG4gICAgfVxuICAgIC50YWJzLWNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXIgeyBkaXNwbGF5OiBub25lOyB9XG5cbiAgICAvKiBGYWRlLW91dCBoaW50IG9uIHJpZ2h0IGVkZ2Ugd2hlbiB0aGVyZSBhcmUgbW9yZSB0YWJzICovXG4gICAgLnRhYnMtZmFkZS1yaWdodCB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDA7IHJpZ2h0OiAwO1xuICAgICAgd2lkdGg6IDYwcHg7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBib3JkZXItcmFkaXVzOiAwIDI1cHggMjVweCAwO1xuICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHRyYW5zcGFyZW50LCB2YXIoLS1kYXNoLXBhbmVsLWJnKSk7XG4gICAgfVxuXG4gICAgLyog4pSA4pSAIEluZGl2aWR1YWwgdGFiIOKUgOKUgCAqL1xuICAgIC50YWIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDRweDtcbiAgICAgIHBhZGRpbmc6IDhweCAxNHB4IDhweCAxOHB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogMjBweDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBjb2xvcjogdmFyKC0tZGFzaC1mb3JlLWNvbG9yKTtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzO1xuICAgIH1cbiAgICAudGFiLmFjdGl2ZSB7IGJhY2tncm91bmQ6IHZhcigtLWRhc2gtdGFiLWFjdGl2ZS1jb2xvcik7IGNvbG9yOiB2YXIoLS1kYXNoLXRhYi1hY3RpdmUtdGV4dCk7IH1cbiAgICAudGFiOmhvdmVyOm5vdCguYWN0aXZlKSB7IGNvbG9yOiB2YXIoLS1kYXNoLXRhYi1ob3Zlci10ZXh0KTsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjA1KTsgfVxuICAgIC50YWItbmFtZSB7IGZsZXg6IDE7IHdoaXRlLXNwYWNlOiBub3dyYXA7IH1cbiAgICAudGFiLWFjdGlvbiB7XG4gICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsgYm9yZGVyOiBub25lOyBjb2xvcjogdmFyKC0tZGFzaC1mb3JlLWNvbG9yKTtcbiAgICAgIHBhZGRpbmc6IDJweDsgZm9udC1zaXplOiAxMXB4OyBjdXJzb3I6IHBvaW50ZXI7IG9wYWNpdHk6IDA7IGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgIHdpZHRoOiAyMHB4OyBoZWlnaHQ6IDIwcHg7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnM7IGZsZXgtc2hyaW5rOiAwO1xuICAgIH1cbiAgICAudGFiOmhvdmVyIC50YWItYWN0aW9uIHsgb3BhY2l0eTogMTsgfVxuICAgIC50YWItcG9wb3V0OmhvdmVyIHsgY29sb3I6IHZhcigtLWRhc2gtYWNjZW50LWNvbG9yKTsgYmFja2dyb3VuZDogcmdiYSgxMCwxMzIsMjU1LDAuMTgpOyB9XG4gICAgLnRhYi1jbG9zZTpob3ZlciAgeyBjb2xvcjogdmFyKC0tZGFzaC1kYW5nZXItY29sb3IpOyAgYmFja2dyb3VuZDogcmdiYSgyNTUsNjksNTgsMC4yKTsgfVxuXG4gICAgLmJ0bi1hZGQtcGFnZSB7XG4gICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsgYm9yZGVyOiBub25lOyBjb2xvcjogdmFyKC0tZGFzaC1mb3JlLWNvbG9yKTtcbiAgICAgIHBhZGRpbmc6IDhweCAxNnB4OyBjdXJzb3I6IHBvaW50ZXI7IGJvcmRlci1yYWRpdXM6IDIwcHg7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzO1xuICAgIH1cbiAgICAuYnRuLWFkZC1wYWdlOmhvdmVyIHsgY29sb3I6IHZhcigtLWRhc2gtYWNjZW50LWNvbG9yKTsgYmFja2dyb3VuZDogcmdiYSgxMCwxMzIsMjU1LDAuMSk7IH1cblxuICAgIC5idG4tYWRkLXdpZGdldCB7XG4gICAgICBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDZweDtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWRhc2gtYWNjZW50LWNvbG9yKTsgYm9yZGVyOiBub25lOyBjb2xvcjogdmFyKC0tZGFzaC1hZGQtd2lkZ2V0LXRleHQpO1xuICAgICAgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNjAwOyBwYWRkaW5nOiAxMHB4IDIwcHg7IGJvcmRlci1yYWRpdXM6IDIycHg7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7IHdoaXRlLXNwYWNlOiBub3dyYXA7IGZsZXgtc2hyaW5rOiAwO1xuICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzLCB0cmFuc2Zvcm0gMC4xNXM7XG4gICAgfVxuICAgIC5idG4tYWRkLXdpZGdldDpob3ZlciAgeyBvcGFjaXR5OiAwLjk7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsgfVxuICAgIC5idG4tYWRkLXdpZGdldDphY3RpdmUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IH1cblxuICAgIC8qIOKUgOKUgCBHcmlkIOKUgOKUgCAqL1xuICAgIC5tYWluLWNvbnRlbnQgLmdyaWQtY29udGFpbmVyIHsgZmxleDogMTsgb3ZlcmZsb3c6IGF1dG87IGJvcmRlci1yYWRpdXM6IDI0cHg7IG1pbi1oZWlnaHQ6IDA7IH1cbiAgICBhcHAtZ3JpZCB7IGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyBkaXNwbGF5OiBibG9jazsgaGVpZ2h0OiAxMDAlOyB3aWR0aDogMTAwJTsgfVxuICBgXVxufSlcbmV4cG9ydCBjbGFzcyBEYXNoYm9hcmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgQElucHV0KCkgaW5pdGlhbExheW91dD86IHN0cmluZztcbiAgQElucHV0KCkgdGhlbWU/OiBEYXNoYm9hcmRUaGVtZTtcblxuICBAT3V0cHV0KCkgYWRkV2lkZ2V0UmVxdWVzdGVkICA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGVkaXRXaWRnZXRSZXF1ZXN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFdpZGdldD4oKTtcblxuICBAQ29udGVudENoaWxkKEdyaWRDZWxsRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIGNlbGxUZW1wbGF0ZT86IFRlbXBsYXRlUmVmPHsgd2lkZ2V0OiBXaWRnZXQgfT47XG5cbiAgQFZpZXdDaGlsZCgndGFic0NvbnRhaW5lcicpIHRhYnNDb250YWluZXJSZWYhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICByZXNvbHZlZFRoZW1lOiBSZXF1aXJlZDxEYXNoYm9hcmRUaGVtZT4gPSB7IC4uLkRFRkFVTFRfVEhFTUUgfTtcbiAgd3JhcHBlclN0eWxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIHBhZ2VzOiBQYWdlW10gPSBbXTtcbiAgYWN0aXZlUGFnZUlkICA9ICcnO1xuICBhY3RpdmVQYWdlPzogUGFnZTtcbiAgaXNQb3BwZWRPdXQgICA9IGZhbHNlO1xuICB0YWJzT3ZlcmZsb3cgID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBzdWJzID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyPzogUmVzaXplT2JzZXJ2ZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHN0YXRlU2VydmljZTogRGFzaGJvYXJkU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHpvbmU6IE5nWm9uZVxuICApIHt9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzWyd0aGVtZSddIHx8IGNoYW5nZXNbJ2luaXRpYWxMYXlvdXQnXSkgdGhpcy5hcHBseVRoZW1lKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmFwcGx5VGhlbWUoKTtcblxuICAgIGlmICh0aGlzLmluaXRpYWxMYXlvdXQpIHtcbiAgICAgIHRyeSB7IHRoaXMuc3RhdGVTZXJ2aWNlLmxvYWRMYXlvdXQoSlNPTi5wYXJzZSh0aGlzLmluaXRpYWxMYXlvdXQpKTsgfVxuICAgICAgY2F0Y2ggKGUpIHsgY29uc29sZS5lcnJvcignW0Rhc2hib2FyZF0gRmFpbGVkIHRvIHBhcnNlIGluaXRpYWxMYXlvdXQnLCBlKTsgfVxuICAgIH1cblxuICAgIGNvbnN0IGhhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaD8ucmVwbGFjZSgnIycsICcnKS50cmltKCk7XG4gICAgaWYgKGhhc2gpIHRoaXMuaXNQb3BwZWRPdXQgPSB0cnVlO1xuXG4gICAgdGhpcy5zdWJzLmFkZCh0aGlzLnN0YXRlU2VydmljZS5wYWdlcyQuc3Vic2NyaWJlKHBhZ2VzID0+IHtcbiAgICAgIHRoaXMucGFnZXMgPSBwYWdlcztcbiAgICAgIGlmICh0aGlzLmlzUG9wcGVkT3V0ICYmIGhhc2gpIHtcbiAgICAgICAgaWYgKHBhZ2VzLmZpbmQocCA9PiBwLmlkID09PSBoYXNoKSkgdGhpcy5zdGF0ZVNlcnZpY2Uuc2V0QWN0aXZlUGFnZShoYXNoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlQWN0aXZlUGFnZSgpO1xuICAgIH0pKTtcbiAgICB0aGlzLnN1YnMuYWRkKHRoaXMuc3RhdGVTZXJ2aWNlLmFjdGl2ZVBhZ2VJZCQuc3Vic2NyaWJlKGlkID0+IHtcbiAgICAgIHRoaXMuYWN0aXZlUGFnZUlkID0gaWQ7XG4gICAgICB0aGlzLnVwZGF0ZUFjdGl2ZVBhZ2UoKTtcbiAgICB9KSk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKCF0aGlzLnRhYnNDb250YWluZXJSZWYpIHJldHVybjtcbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy5jaGVja092ZXJmbG93KCkpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy50YWJzQ29udGFpbmVyUmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH0pO1xuICAgIC8vIEFsc28gZGV0ZWN0IHNjcm9sbCBzbyBmYWRlIGhpZGVzIHdoZW4gc2Nyb2xsZWQgdG8gZW5kXG4gICAgdGhpcy50YWJzQ29udGFpbmVyUmVmLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgKCkgPT4ge1xuICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB0aGlzLmNoZWNrT3ZlcmZsb3coKSk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnN1YnMudW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnJlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gIH1cblxuICBvbkl0ZW1DaGFuZ2VkKHdpZGdldDogV2lkZ2V0KSB7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UudXBkYXRlV2lkZ2V0UG9zaXRpb24oXG4gICAgICB0aGlzLmFjdGl2ZVBhZ2VJZCwgd2lkZ2V0LmlkLCB3aWRnZXQueCwgd2lkZ2V0LnksIHdpZGdldC5jb2xzLCB3aWRnZXQucm93c1xuICAgICk7XG4gIH1cblxuICBvblJlbW92ZVdpZGdldCh3aWRnZXRJZDogc3RyaW5nKSB7IHRoaXMuc3RhdGVTZXJ2aWNlLnJlbW92ZVdpZGdldCh3aWRnZXRJZCk7IH1cbiAgb25TZWxlY3RQYWdlKGlkOiBzdHJpbmcpICAgICAgICAgeyB0aGlzLnN0YXRlU2VydmljZS5zZXRBY3RpdmVQYWdlKGlkKTsgfVxuXG4gIG9uQWRkUGFnZSgpIHtcbiAgICBjb25zdCBuYW1lID0gcHJvbXB0KCdXb3Jrc3BhY2UgbmFtZTonLCBgV29ya3NwYWNlICR7dGhpcy5wYWdlcy5sZW5ndGggKyAxfWApO1xuICAgIGlmIChuYW1lKSB0aGlzLnN0YXRlU2VydmljZS5hZGRQYWdlKG5hbWUpO1xuICB9XG5cbiAgb25SZW1vdmVQYWdlKGV2ZW50OiBFdmVudCwgaWQ6IHN0cmluZykge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmIChjb25maXJtKCdSZW1vdmUgdGhpcyB3b3Jrc3BhY2U/JykpIHRoaXMuc3RhdGVTZXJ2aWNlLnJlbW92ZVBhZ2UoaWQpO1xuICB9XG5cbiAgb25Qb3BPdXQoZXZlbnQ6IEV2ZW50LCBwYWdlSWQ6IHN0cmluZykge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuc3RhdGVTZXJ2aWNlLnBvcE91dFBhZ2UocGFnZUlkKTtcbiAgfVxuXG4gIHNlcmlhbGl6ZUxheW91dCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5zdGF0ZVNlcnZpY2Uuc2VyaWFsaXplTGF5b3V0KCk7IH1cblxuICBwcml2YXRlIGNoZWNrT3ZlcmZsb3coKSB7XG4gICAgY29uc3QgZWwgPSB0aGlzLnRhYnNDb250YWluZXJSZWY/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKCFlbCkgcmV0dXJuO1xuICAgIGNvbnN0IGF0RW5kID0gZWwuc2Nyb2xsTGVmdCArIGVsLmNsaWVudFdpZHRoID49IGVsLnNjcm9sbFdpZHRoIC0gNDtcbiAgICB0aGlzLnRhYnNPdmVyZmxvdyA9ICFhdEVuZCAmJiBlbC5zY3JvbGxXaWR0aCA+IGVsLmNsaWVudFdpZHRoO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVRoZW1lKCkge1xuICAgIHRoaXMucmVzb2x2ZWRUaGVtZSA9IHsgLi4uREVGQVVMVF9USEVNRSwgLi4uKHRoaXMudGhlbWUgPz8ge30pIH07XG4gICAgY29uc3QgdCA9IHRoaXMucmVzb2x2ZWRUaGVtZTtcbiAgICB0aGlzLndyYXBwZXJTdHlsZXMgPSB7XG4gICAgICAnLS1kYXNoLWJnJzogICAgICAgICAgICAgICAgICAgdC5iYWNrZ3JvdW5kQ29sb3IsXG4gICAgICAnLS1kYXNoLXBhbmVsLWJnJzogICAgICAgICAgICAgdC5wYW5lbENvbG9yLFxuICAgICAgJy0tZGFzaC1jYXJkLWJnJzogICAgICAgICAgICAgIHQud2lkZ2V0Q2FyZENvbG9yLFxuICAgICAgJy0tZGFzaC1mb3JlLWNvbG9yJzogICAgICAgICAgIHQuZm9yZUNvbG9yLFxuICAgICAgJy0tZGFzaC1hY2NlbnQtY29sb3InOiAgICAgICAgIHQuYWNjZW50Q29sb3IsXG4gICAgICAnLS1kYXNoLWRhbmdlci1jb2xvcic6ICAgICAgICAgdC5kYW5nZXJDb2xvcixcbiAgICAgICctLWRhc2gtZm9udC1mYW1pbHknOiAgICAgICAgICB0LmZvbnRGYW1pbHksXG4gICAgICAnLS1kYXNoLXRhYnMtY29udGFpbmVyLWNvbG9yJzogdC50YWJzQ29udGFpbmVyQ29sb3IsXG4gICAgICAnLS1kYXNoLXRhYi1hY3RpdmUtY29sb3InOiAgICAgdC50YWJBY3RpdmVDb2xvcixcbiAgICAgICctLWRhc2gtdGFiLWFjdGl2ZS10ZXh0JzogICAgICB0LnRhYkFjdGl2ZVRleHRDb2xvcixcbiAgICAgICctLWRhc2gtdGFiLWhvdmVyLXRleHQnOiAgICAgICB0LnRhYkhvdmVyVGV4dENvbG9yLFxuICAgICAgJy0tZGFzaC1hZGQtd2lkZ2V0LXRleHQnOiAgICAgIHQuYWRkV2lkZ2V0QnV0dG9uVGV4dENvbG9yLFxuICAgICAgJy0tZGFzaC1wb3BvdXQtdGl0bGUtY29sb3InOiAgIHQucG9wb3V0VGl0bGVDb2xvcixcbiAgICAgICctLWRhc2gtd2lkZ2V0LXRpdGxlLWNvbG9yJzogICB0LndpZGdldFRpdGxlQ29sb3IsXG4gICAgICAnLS1kYXNoLWRyYWctaGFuZGxlLWNvbG9yJzogICAgdC5kcmFnSGFuZGxlQ29sb3IsXG4gICAgICAnLS1kYXNoLXdpZGdldC1ib3JkZXItY29sb3InOiAgdC53aWRnZXRCb3JkZXJDb2xvcixcbiAgICAgICctLWRhc2gtd2lkZ2V0LWJ0bi1iZyc6ICAgICAgICB0LndpZGdldEJ1dHRvbkJnQ29sb3IsXG4gICAgICAnLS1kYXNoLXdpZGdldC1idG4tY29sb3InOiAgICAgdC53aWRnZXRCdXR0b25Db2xvcixcbiAgICAgICctLWRhc2gtcGxhY2Vob2xkZXItY29sb3InOiAgICB0LnBsYWNlaG9sZGVyQ29sb3IsXG4gICAgICAnLS1kYXNoLXJlc2l6ZS1oYW5kbGUtY29sb3InOiAgdC5yZXNpemVIYW5kbGVDb2xvcixcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVBY3RpdmVQYWdlKCkge1xuICAgIHRoaXMuYWN0aXZlUGFnZSA9IHRoaXMucGFnZXMuZmluZChwID0+IHAuaWQgPT09IHRoaXMuYWN0aXZlUGFnZUlkKTtcbiAgICAvLyBzY3JvbGwgYWN0aXZlIHRhYiBpbnRvIHZpZXdcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy50YWJzQ29udGFpbmVyUmVmKSByZXR1cm47XG4gICAgICBjb25zdCBhY3RpdmUgPSB0aGlzLnRhYnNDb250YWluZXJSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PignLnRhYi5hY3RpdmUnKTtcbiAgICAgIGFjdGl2ZT8uc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnbmVhcmVzdCcsIGlubGluZTogJ25lYXJlc3QnIH0pO1xuICAgICAgdGhpcy5jaGVja092ZXJmbG93KCk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
531
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvZGFzaGJvYXJkLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUFvQyxLQUFLLEVBQUUsTUFBTSxFQUMzQyxZQUFZLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFDM0IsSUFBSSxFQUMvQixZQUFZLEVBQUUsU0FBUyxFQUN4QixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7QUFFNUQsTUFBTSxhQUFhLEdBQTZCO0lBQzlDLGVBQWUsRUFBVSxTQUFTO0lBQ2xDLFVBQVUsRUFBZSxTQUFTO0lBQ2xDLGVBQWUsRUFBVSxTQUFTO0lBQ2xDLFNBQVMsRUFBZ0IsU0FBUztJQUNsQyxXQUFXLEVBQWMsU0FBUztJQUNsQyxXQUFXLEVBQWMsU0FBUztJQUNsQyxVQUFVLEVBQWUscUZBQXFGO0lBQzlHLGtCQUFrQixFQUFPLG9CQUFvQjtJQUM3QyxjQUFjLEVBQVcsU0FBUztJQUNsQyxrQkFBa0IsRUFBTyxTQUFTO0lBQ2xDLGlCQUFpQixFQUFRLFNBQVM7SUFDbEMsd0JBQXdCLEVBQUMsU0FBUztJQUNsQyxnQkFBZ0IsRUFBUyxTQUFTO0lBQ2xDLGdCQUFnQixFQUFTLFNBQVM7SUFDbEMsZUFBZSxFQUFVLHVCQUF1QjtJQUNoRCxpQkFBaUIsRUFBUSx3QkFBd0I7SUFDakQsbUJBQW1CLEVBQU0sd0JBQXdCO0lBQ2pELGlCQUFpQixFQUFRLHVCQUF1QjtJQUNoRCxnQkFBZ0IsRUFBUyxTQUFTO0lBQ2xDLGlCQUFpQixFQUFRLHdCQUF3QjtDQUNsRCxDQUFDO0FBR0YsTUFBTSxPQUFPLGtCQUFrQjtJQUM3QixTQUFTLENBQUMsS0FBYSxFQUFFLFlBQW9CO1FB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b3J0IHtcbiAgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCwgSW5wdXQsIE91dHB1dCwgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLCBFdmVudEVtaXR0ZXIsIENvbnRlbnRDaGlsZCwgVGVtcGxhdGVSZWYsXG4gIENoYW5nZURldGVjdG9yUmVmLCBOZ1pvbmUsIFBpcGUsIFBpcGVUcmFuc2Zvcm0sXG4gIEhvc3RMaXN0ZW5lciwgVmlld0NoaWxkLCBFbGVtZW50UmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGFzaGJvYXJkU3RhdGVTZXJ2aWNlIH0gZnJvbSAnLi9kYXNoYm9hcmQtc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBQYWdlLCBXaWRnZXQsIERhc2hib2FyZFRoZW1lIH0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBHcmlkQ2VsbERpcmVjdGl2ZSB9IGZyb20gJy4vY3VzdG9tLWdyaWQuY29tcG9uZW50JztcblxuY29uc3QgREVGQVVMVF9USEVNRTogUmVxdWlyZWQ8RGFzaGJvYXJkVGhlbWU+ID0ge1xuICBiYWNrZ3JvdW5kQ29sb3I6ICAgICAgICAgJyMwMDAwMDAnLFxuICBwYW5lbENvbG9yOiAgICAgICAgICAgICAgJyMxYzFjMWUnLFxuICB3aWRnZXRDYXJkQ29sb3I6ICAgICAgICAgJyMyYzJjMmUnLFxuICBmb3JlQ29sb3I6ICAgICAgICAgICAgICAgJyM4ZThlOTMnLFxuICBhY2NlbnRDb2xvcjogICAgICAgICAgICAgJyMwYTg0ZmYnLFxuICBkYW5nZXJDb2xvcjogICAgICAgICAgICAgJyNmZjQ1M2EnLFxuICBmb250RmFtaWx5OiAgICAgICAgICAgICAgJy1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgXCJTZWdvZSBVSVwiLCBSb2JvdG8sIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWYnLFxuICB0YWJzQ29udGFpbmVyQ29sb3I6ICAgICAgJ3JnYmEoNDQsNDQsNDYsMC42KScsXG4gIHRhYkFjdGl2ZUNvbG9yOiAgICAgICAgICAnIzNhM2EzYycsXG4gIHRhYkFjdGl2ZVRleHRDb2xvcjogICAgICAnI2ZmZmZmZicsXG4gIHRhYkhvdmVyVGV4dENvbG9yOiAgICAgICAnI2U1ZTVlYScsXG4gIGFkZFdpZGdldEJ1dHRvblRleHRDb2xvcjonI2ZmZmZmZicsXG4gIHBvcG91dFRpdGxlQ29sb3I6ICAgICAgICAnI2ZmZmZmZicsXG4gIHdpZGdldFRpdGxlQ29sb3I6ICAgICAgICAnI2ZmZmZmZicsXG4gIGRyYWdIYW5kbGVDb2xvcjogICAgICAgICAncmdiYSgyNTUsMjU1LDI1NSwwLjIpJyxcbiAgd2lkZ2V0Qm9yZGVyQ29sb3I6ICAgICAgICdyZ2JhKDI1NSwyNTUsMjU1LDAuMDcpJyxcbiAgd2lkZ2V0QnV0dG9uQmdDb2xvcjogICAgICdyZ2JhKDI1NSwyNTUsMjU1LDAuMDcpJyxcbiAgd2lkZ2V0QnV0dG9uQ29sb3I6ICAgICAgICdyZ2JhKDI1NSwyNTUsMjU1LDAuNSknLFxuICBwbGFjZWhvbGRlckNvbG9yOiAgICAgICAgJyMwYTg0ZmYnLFxuICByZXNpemVIYW5kbGVDb2xvcjogICAgICAgJ3JnYmEoMjU1LDI1NSwyNTUsMC4yNSknLFxufTtcblxuQFBpcGUoeyBuYW1lOiAnb3ZlcmZsb3dBY3RpdmUnIH0pXG5leHBvcnQgY2xhc3MgT3ZlcmZsb3dBY3RpdmVQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG4gIHRyYW5zZm9ybShwYWdlczogUGFnZVtdLCBhY3RpdmVQYWdlSWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBwYWdlcy5zb21lKHAgPT4gcC5pZCA9PT0gYWN0aXZlUGFnZUlkKTtcbiAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZGFzaGJvYXJkJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8IS0tIFBPUFBFRC1PVVQgTU9ERSAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNQb3BwZWRPdXQ7IGVsc2Ugbm9ybWFsTW9kZVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInBvcG91dC13cmFwcGVyXCIgW25nU3R5bGVdPVwid3JhcHBlclN0eWxlc1wiPlxuICAgICAgICA8aGVhZGVyIGNsYXNzPVwicG9wb3V0LWhlYWRlclwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicG9wb3V0LXRpdGxlXCI+e3sgYWN0aXZlUGFnZT8ubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9oZWFkZXI+XG4gICAgICAgIDxhcHAtZ3JpZCBbd2lkZ2V0c109XCJhY3RpdmVQYWdlPy53aWRnZXRzIHx8IFtdXCIgKGl0ZW1DaGFuZ2VkKT1cIm9uSXRlbUNoYW5nZWQoJGV2ZW50KVwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBncmlkQ2VsbCBsZXQtd2lkZ2V0PVwid2lkZ2V0XCI+XG4gICAgICAgICAgICA8YXBwLXdpZGdldC1yZW5kZXJlciBbd2lkZ2V0XT1cIndpZGdldFwiIFt0aGVtZV09XCJyZXNvbHZlZFRoZW1lXCJcbiAgICAgICAgICAgICAgKGVkaXRSZXF1ZXN0ZWQpPVwiZWRpdFdpZGdldFJlcXVlc3RlZC5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAocmVtb3ZlUmVxdWVzdGVkKT1cIm9uUmVtb3ZlV2lkZ2V0KCRldmVudClcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNlbGxUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2VsbFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyB3aWRnZXQ6IHdpZGdldCB9XCI+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9hcHAtd2lkZ2V0LXJlbmRlcmVyPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvYXBwLWdyaWQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0gTk9STUFMIE1PREUgLS0+XG4gICAgPG5nLXRlbXBsYXRlICNub3JtYWxNb2RlPlxuICAgICAgPGRpdiBjbGFzcz1cImRhc2hib2FyZC13cmFwcGVyXCIgW25nU3R5bGVdPVwid3JhcHBlclN0eWxlc1wiPlxuICAgICAgICA8bWFpbiBjbGFzcz1cIm1haW4tY29udGVudFwiPlxuXG4gICAgICAgICAgPGhlYWRlciBjbGFzcz1cImRhc2hib2FyZC1oZWFkZXJcIj5cblxuICAgICAgICAgICAgPCEtLSBUYWIgYmFyIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYnMtdHJhY2tcIiAjdGFic1RyYWNrPlxuICAgICAgICAgICAgICA8IS0tIFZpc2libGUgdGFicyAtLT5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBwYWdlIG9mIHZpc2libGVQYWdlc1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ0YWJcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwicGFnZS5pZCA9PT0gYWN0aXZlUGFnZUlkXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25TZWxlY3RQYWdlKHBhZ2UuaWQpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGFiLW5hbWVcIj57eyBwYWdlLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInRhYi1hY3Rpb24gdGFiLXBvcG91dFwiIChjbGljayk9XCJvblBvcE91dCgkZXZlbnQsIHBhZ2UuaWQpXCIgdGl0bGU9XCJPcGVuIGluIG5ldyB3aW5kb3dcIj5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibGEgbGEtZXh0ZXJuYWwtbGluay1hbHRcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInRhYi1hY3Rpb24gdGFiLWNsb3NlXCIgKm5nSWY9XCJwYWdlcy5sZW5ndGggPiAxXCIgKGNsaWNrKT1cIm9uUmVtb3ZlUGFnZSgkZXZlbnQsIHBhZ2UuaWQpXCIgdGl0bGU9XCJDbG9zZVwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJsYSBsYS10aW1lc1wiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPCEtLSBPdmVyZmxvdyBidXR0b24g4oCUIHNob3duIG9ubHkgd2hlbiB0aGVyZSBhcmUgaGlkZGVuIHRhYnMgLS0+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAqbmdJZj1cImhpZGRlbkNvdW50ID4gMFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tb3ZlcmZsb3dcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuVGFiU3dpdGNoZXIoKVwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJTaG93IGFsbCB3b3Jrc3BhY2VzXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuPit7eyBoaWRkZW5Db3VudCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImxhIGxhLXRoLWxhcmdlXCI+PC9pPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgICA8IS0tIEFkZCBwYWdlIGJ1dHRvbiAtLT5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1hZGQtcGFnZVwiIChjbGljayk9XCJvbkFkZFBhZ2UoKVwiIHRpdGxlPVwiTmV3IHdvcmtzcGFjZVwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibGEgbGEtcGx1c1wiPjwvaT5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1hZGQtd2lkZ2V0XCIgKGNsaWNrKT1cImFkZFdpZGdldFJlcXVlc3RlZC5lbWl0KClcIiB0aXRsZT1cIkFkZCB3aWRnZXRcIj5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJsYSBsYS1wbHVzXCI+PC9pPlxuICAgICAgICAgICAgICA8c3Bhbj5BZGQgV2lkZ2V0PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8L2hlYWRlcj5cblxuICAgICAgICAgIDwhLS0g4pSA4pSAIFRhYi1zd2l0Y2hlciBvdmVybGF5IChDaHJvbWUgbW9iaWxlIHN0eWxlKSDilIDilIAgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1zd2l0Y2hlci1vdmVybGF5XCIgKm5nSWY9XCJ0YWJTd2l0Y2hlck9wZW5cIiAoY2xpY2spPVwiY2xvc2VUYWJTd2l0Y2hlcigpXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFiLXN3aXRjaGVyLXNoZWV0XCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItc3dpdGNoZXItaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YWItc3dpdGNoZXItdGl0bGVcIj57eyBwYWdlcy5sZW5ndGggfX0gV29ya3NwYWNle3sgcGFnZXMubGVuZ3RoICE9PSAxID8gJ3MnIDogJycgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInRhYi1zd2l0Y2hlci1jbG9zZS1idG5cIiAoY2xpY2spPVwiY2xvc2VUYWJTd2l0Y2hlcigpXCIgdGl0bGU9XCJDbG9zZVwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJsYSBsYS10aW1lc1wiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1zd2l0Y2hlci1ncmlkXCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHBhZ2Ugb2YgcGFnZXNcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0YWItY2FyZFwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cInBhZ2UuaWQgPT09IGFjdGl2ZVBhZ2VJZFwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Td2l0Y2hlclNlbGVjdChwYWdlLmlkKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1jYXJkLWljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJsYSBsYS10aC1sYXJnZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0YWItY2FyZC1uYW1lXCI+e3sgcGFnZS5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYi1jYXJkLWFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInRhYi1jYXJkLWJ0biB0YWItY2FyZC1wb3BvdXRcIiAoY2xpY2spPVwib25Td2l0Y2hlclBvcE91dCgkZXZlbnQsIHBhZ2UuaWQpXCIgdGl0bGU9XCJPcGVuIGluIG5ldyB3aW5kb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImxhIGxhLWV4dGVybmFsLWxpbmstYWx0XCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInRhYi1jYXJkLWJ0biB0YWItY2FyZC1yZW1vdmVcIiAqbmdJZj1cInBhZ2VzLmxlbmd0aCA+IDFcIiAoY2xpY2spPVwib25Td2l0Y2hlclJlbW92ZSgkZXZlbnQsIHBhZ2UuaWQpXCIgdGl0bGU9XCJDbG9zZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwibGEgbGEtdGltZXNcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWItc3dpdGNoZXItZm9vdGVyXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInRhYi1zd2l0Y2hlci1hZGQtYnRuXCIgKGNsaWNrKT1cIm9uU3dpdGNoZXJBZGQoKVwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJsYSBsYS1wbHVzXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+TmV3IFdvcmtzcGFjZTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImdyaWQtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8YXBwLWdyaWQgW3dpZGdldHNdPVwiYWN0aXZlUGFnZT8ud2lkZ2V0cyB8fCBbXVwiIChpdGVtQ2hhbmdlZCk9XCJvbkl0ZW1DaGFuZ2VkKCRldmVudClcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGdyaWRDZWxsIGxldC13aWRnZXQ9XCJ3aWRnZXRcIj5cbiAgICAgICAgICAgICAgICA8YXBwLXdpZGdldC1yZW5kZXJlciBbd2lkZ2V0XT1cIndpZGdldFwiIFt0aGVtZV09XCJyZXNvbHZlZFRoZW1lXCJcbiAgICAgICAgICAgICAgICAgIChlZGl0UmVxdWVzdGVkKT1cImVkaXRXaWRnZXRSZXF1ZXN0ZWQuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIChyZW1vdmVSZXF1ZXN0ZWQpPVwib25SZW1vdmVXaWRnZXQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNlbGxUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNlbGxUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHdpZGdldDogd2lkZ2V0IH1cIj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvYXBwLXdpZGdldC1yZW5kZXJlcj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvYXBwLWdyaWQ+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9tYWluPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgYCxcbiAgc3R5bGVzOiBbYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgLS1kYXNoLWJnOiAgICAgICAgICAgICAgICAgICAgIzAwMDAwMDtcbiAgICAgIC0tZGFzaC1wYW5lbC1iZzogICAgICAgICAgICAgICMxYzFjMWU7XG4gICAgICAtLWRhc2gtY2FyZC1iZzogICAgICAgICAgICAgICAjMmMyYzJlO1xuICAgICAgLS1kYXNoLWZvcmUtY29sb3I6ICAgICAgICAgICAgIzhlOGU5MztcbiAgICAgIC0tZGFzaC1hY2NlbnQtY29sb3I6ICAgICAgICAgICMwYTg0ZmY7XG4gICAgICAtLWRhc2gtZGFuZ2VyLWNvbG9yOiAgICAgICAgICAjZmY0NTNhO1xuICAgICAgLS1kYXNoLWZvbnQtZmFtaWx5OiAgICAgICAgICAgLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcIlNlZ29lIFVJXCIsIFJvYm90bywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICAgIC0tZGFzaC10YWJzLWNvbnRhaW5lci1jb2xvcjogIHJnYmEoNDQsNDQsNDYsMC42KTtcbiAgICAgIC0tZGFzaC10YWItYWN0aXZlLWNvbG9yOiAgICAgICMzYTNhM2M7XG4gICAgICAtLWRhc2gtdGFiLWFjdGl2ZS10ZXh0OiAgICAgICAjZmZmZmZmO1xuICAgICAgLS1kYXNoLXRhYi1ob3Zlci10ZXh0OiAgICAgICAgI2U1ZTVlYTtcbiAgICAgIC0tZGFzaC1hZGQtd2lkZ2V0LXRleHQ6ICAgICAgICNmZmZmZmY7XG4gICAgICAtLWRhc2gtcG9wb3V0LXRpdGxlLWNvbG9yOiAgICAjZmZmZmZmO1xuICAgICAgLS1kYXNoLXdpZGdldC10aXRsZS1jb2xvcjogICAgI2ZmZmZmZjtcbiAgICAgIC0tZGFzaC1kcmFnLWhhbmRsZS1jb2xvcjogICAgIHJnYmEoMjU1LDI1NSwyNTUsMC4yKTtcbiAgICAgIC0tZGFzaC13aWRnZXQtYm9yZGVyLWNvbG9yOiAgIHJnYmEoMjU1LDI1NSwyNTUsMC4wNyk7XG4gICAgICAtLWRhc2gtd2lkZ2V0LWJ0bi1iZzogICAgICAgICByZ2JhKDI1NSwyNTUsMjU1LDAuMDcpO1xuICAgICAgLS1kYXNoLXdpZGdldC1idG4tY29sb3I6ICAgICAgcmdiYSgyNTUsMjU1LDI1NSwwLjUpO1xuICAgICAgLS1kYXNoLXBsYWNlaG9sZGVyLWNvbG9yOiAgICAgIzBhODRmZjtcbiAgICAgIC0tZGFzaC1yZXNpemUtaGFuZGxlLWNvbG9yOiAgIHJnYmEoMjU1LDI1NSwyNTUsMC4yNSk7XG4gICAgfVxuXG4gICAgLyog4pSA4pSAIE5vcm1hbCBsYXlvdXQg4pSA4pSAICovXG4gICAgLmRhc2hib2FyZC13cmFwcGVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4OiAxO1xuICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBwYWRkaW5nOiAxNnB4O1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWRhc2gtYmcpO1xuICAgICAgY29sb3I6IHZhcigtLWRhc2gtZm9yZS1jb2xvcik7XG4gICAgICBmb250LWZhbWlseTogdmFyKC0tZGFzaC1mb250LWZhbWlseSk7XG4gICAgfVxuICAgIC5tYWluLWNvbnRlbnQge1xuICAgICAgZmxleDogMTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDQwcHg7XG4gICAgICBwYWRkaW5nOiAyMHB4O1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tZGFzaC1wYW5lbC1iZyk7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDUpO1xuICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIH1cblxuICAgIC8qIOKUgOKUgCBQb3Atb3V0IGxheW91dCDilIDilIAgKi9cbiAgICAucG9wb3V0LXdyYXBwZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXg6IDE7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBwYWRkaW5nOiAxNnB4O1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWRhc2gtYmcpO1xuICAgICAgY29sb3I6IHZhcigtLWRhc2gtZm9yZS1jb2xvcik7XG4gICAgICBmb250LWZhbWlseTogdmFyKC0tZGFzaC1mb250LWZhbWlseSk7XG4gICAgfVxuICAgIC5wb3BvdXQtaGVhZGVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDtcbiAgICAgIHBhZGRpbmc6IDEwcHggMThweDtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWRhc2gtcGFuZWwtYmcpO1xuICAgICAgYm9yZGVyLXJhZGl1czogMjBweDtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4wNik7XG4gICAgICBmbGV4LXNocmluazogMDtcbiAgICB9XG4gICAgLnBvcG91dC10aXRsZSB7IGZvbnQtc2l6ZTogMTZweDsgZm9udC13ZWlnaHQ6IDcwMDsgY29sb3I6IHZhcigtLWRhc2gtcG9wb3V0LXRpdGxlLWNvbG9yKTsgfVxuICAgIC5wb3BvdXQtd3JhcHBlciBhcHAtZ3JpZCB7IGZsZXg6IDE7IG1pbi1oZWlnaHQ6IDA7IG92ZXJmbG93OiBhdXRvOyB9XG5cbiAgICAvKiDilIDilIAgSGVhZGVyIOKUgOKUgCAqL1xuICAgIC5kYXNoYm9hcmQtaGVhZGVyIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICAgIGdhcDogMTJweDtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIH1cblxuICAgIC8qIOKUgOKUgCBUYWIgYmFyIOKUgOKUgCAqL1xuICAgIC50YWJzLXRyYWNrIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA2cHg7XG4gICAgICBmbGV4OiAxO1xuICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tZGFzaC10YWJzLWNvbnRhaW5lci1jb2xvcik7XG4gICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTBweCk7XG4gICAgICBib3JkZXItcmFkaXVzOiAyNXB4O1xuICAgICAgcGFkZGluZzogNnB4O1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB9XG5cbiAgICAvKiDilIDilIAgSW5kaXZpZHVhbCB0YWIg4pSA4pSAICovXG4gICAgLnRhYiB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGdhcDogNHB4O1xuICAgICAgcGFkZGluZzogOHB4IDE0cHggOHB4IDE4cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiAyMHB4O1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1kYXNoLWZvcmUtY29sb3IpO1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjJzLCBjb2xvciAwLjJzO1xuICAgIH1cbiAgICAudGFiLmFjdGl2ZSB7IGJhY2tncm91bmQ6IHZhcigtLWRhc2gtdGFiLWFjdGl2ZS1jb2xvcik7IGNvbG9yOiB2YXIoLS1kYXNoLXRhYi1hY3RpdmUtdGV4dCk7IH1cbiAgICAudGFiOmhvdmVyOm5vdCguYWN0aXZlKSB7IGNvbG9yOiB2YXIoLS1kYXNoLXRhYi1ob3Zlci10ZXh0KTsgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjA1KTsgfVxuICAgIC50YWItbmFtZSB7IHdoaXRlLXNwYWNlOiBub3dyYXA7IH1cbiAgICAudGFiLWFjdGlvbiB7XG4gICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsgYm9yZGVyOiBub25lOyBjb2xvcjogdmFyKC0tZGFzaC1mb3JlLWNvbG9yKTtcbiAgICAgIHBhZGRpbmc6IDJweDsgZm9udC1zaXplOiAxMXB4OyBjdXJzb3I6IHBvaW50ZXI7IG9wYWNpdHk6IDA7IGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICAgIHdpZHRoOiAyMHB4OyBoZWlnaHQ6IDIwcHg7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnM7IGZsZXgtc2hyaW5rOiAwO1xuICAgIH1cbiAgICAudGFiOmhvdmVyIC50YWItYWN0aW9uIHsgb3BhY2l0eTogMTsgfVxuICAgIC50YWItcG9wb3V0OmhvdmVyIHsgY29sb3I6IHZhcigtLWRhc2gtYWNjZW50LWNvbG9yKTsgYmFja2dyb3VuZDogcmdiYSgxMCwxMzIsMjU1LDAuMTgpOyB9XG4gICAgLnRhYi1jbG9zZTpob3ZlciAgeyBjb2xvcjogdmFyKC0tZGFzaC1kYW5nZXItY29sb3IpOyAgYmFja2dyb3VuZDogcmdiYSgyNTUsNjksNTgsMC4yKTsgfVxuXG4gICAgLyog4pSA4pSAIE92ZXJmbG93IFwiK05cIiBidXR0b24g4pSA4pSAICovXG4gICAgLmJ0bi1vdmVyZmxvdyB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDVweDtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wOCk7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMTIpO1xuICAgICAgYm9yZGVyLXJhZGl1czogMjBweDtcbiAgICAgIHBhZGRpbmc6IDdweCAxM3B4O1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1kYXNoLXRhYi1hY3RpdmUtdGV4dCk7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnMsIGJvcmRlci1jb2xvciAwLjJzO1xuICAgIH1cbiAgICAuYnRuLW92ZXJmbG93OmhvdmVyIHsgYmFja2dyb3VuZDogcmdiYSgxMCwxMzIsMjU1LDAuMTgpOyBib3JkZXItY29sb3I6IHZhcigtLWRhc2gtYWNjZW50LWNvbG9yKTsgY29sb3I6IHZhcigtLWRhc2gtYWNjZW50LWNvbG9yKTsgfVxuXG4gICAgLyog4pSA4pSAIEFkZCBwYWdlIGJ1dHRvbiDilIDilIAgKi9cbiAgICAuYnRuLWFkZC1wYWdlIHtcbiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyBib3JkZXI6IG5vbmU7IGNvbG9yOiB2YXIoLS1kYXNoLWZvcmUtY29sb3IpO1xuICAgICAgcGFkZGluZzogOHB4IDE0cHg7IGN1cnNvcjogcG9pbnRlcjsgYm9yZGVyLXJhZGl1czogMjBweDtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnM7XG4gICAgfVxuICAgIC5idG4tYWRkLXBhZ2U6aG92ZXIgeyBjb2xvcjogdmFyKC0tZGFzaC1hY2NlbnQtY29sb3IpOyBiYWNrZ3JvdW5kOiByZ2JhKDEwLDEzMiwyNTUsMC4xKTsgfVxuXG4gICAgLyog4pSA4pSAIFRhYi1zd2l0Y2hlciBvdmVybGF5IOKUgOKUgCAqL1xuICAgIC50YWItc3dpdGNoZXItb3ZlcmxheSB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBpbnNldDogMDtcbiAgICAgIHotaW5kZXg6IDEwMDA7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuNTUpO1xuICAgICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDRweCk7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIHBhZGRpbmctdG9wOiA2MHB4O1xuICAgICAgYW5pbWF0aW9uOiBvdmVybGF5LWluIDAuMThzIGVhc2U7XG4gICAgfVxuICAgIEBrZXlmcmFtZXMgb3ZlcmxheS1pbiB7XG4gICAgICBmcm9tIHsgb3BhY2l0eTogMDsgfVxuICAgICAgdG8gICB7IG9wYWNpdHk6IDE7IH1cbiAgICB9XG5cbiAgICAudGFiLXN3aXRjaGVyLXNoZWV0IHtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWRhc2gtcGFuZWwtYmcpO1xuICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA4KTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDI0cHg7XG4gICAgICB3aWR0aDogbWluKDUyMHB4LCBjYWxjKDEwMCUgLSAzMnB4KSk7XG4gICAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMCUgLSA4MHB4KTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAgIGFuaW1hdGlvbjogc2hlZXQtaW4gMC4yMnMgY3ViaWMtYmV6aWVyKC4zMiwxLjIsLjUsMSk7XG4gICAgfVxuICAgIEBrZXlmcmFtZXMgc2hlZXQtaW4ge1xuICAgICAgZnJvbSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTZweCkgc2NhbGUoMC45Nyk7IG9wYWNpdHk6IDA7IH1cbiAgICAgIHRvICAgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCkgICAgIHNjYWxlKDEpOyAgICBvcGFjaXR5OiAxOyB9XG4gICAgfVxuXG4gICAgLnRhYi1zd2l0Y2hlci1oZWFkZXIge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICBwYWRkaW5nOiAxNnB4IDIwcHggMTJweDtcbiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDYpO1xuICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgfVxuICAgIC50YWItc3dpdGNoZXItdGl0bGUge1xuICAgICAgZm9udC1zaXplOiAxNXB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1kYXNoLXRhYi1hY3RpdmUtdGV4dCk7XG4gICAgfVxuICAgIC50YWItc3dpdGNoZXItY2xvc2UtYnRuIHtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wNyk7XG4gICAgICBib3JkZXI6IG5vbmU7XG4gICAgICBjb2xvcjogdmFyKC0tZGFzaC1mb3JlLWNvbG9yKTtcbiAgICAgIHdpZHRoOiAyOHB4OyBoZWlnaHQ6IDI4cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgICBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMsIGNvbG9yIDAuMTVzO1xuICAgIH1cbiAgICAudGFiLXN3aXRjaGVyLWNsb3NlLWJ0bjpob3ZlciB7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDY5LDU4LDAuMjUpOyBjb2xvcjogdmFyKC0tZGFzaC1kYW5nZXItY29sb3IpOyB9XG5cbiAgICAudGFiLXN3aXRjaGVyLWdyaWQge1xuICAgICAgZGlzcGxheTogZ3JpZDtcbiAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDE0MHB4LCAxZnIpKTtcbiAgICAgIGdhcDogMTBweDtcbiAgICAgIHBhZGRpbmc6IDE2cHg7XG4gICAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgICAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluO1xuICAgICAgc2Nyb2xsYmFyLWNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuMTUpIHRyYW5zcGFyZW50O1xuICAgIH1cblxuICAgIC50YWItY2FyZCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDhweDtcbiAgICAgIHBhZGRpbmc6IDE2cHggMTJweCAxMnB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogMTZweDtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLWRhc2gtY2FyZC1iZyk7XG4gICAgICBib3JkZXI6IDEuNXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMTVzLCBiYWNrZ3JvdW5kIDAuMTVzLCB0cmFuc2Zvcm0gMC4xMnM7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgfVxuICAgIC50YWItY2FyZDpob3ZlciB7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wNik7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTsgfVxuICAgIC50YWItY2FyZC5hY3RpdmUge1xuICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1kYXNoLWFjY2VudC1jb2xvcik7XG4gICAgICBiYWNrZ3JvdW5kOiByZ2JhKDEwLDEzMiwyNTUsMC4xMik7XG4gICAgfVxuICAgIC50YWItY2FyZC1pY29uIHtcbiAgICAgIHdpZHRoOiA0NHB4OyBoZWlnaHQ6IDQ0cHg7XG4gICAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjA3KTtcbiAgICAgIGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgZm9udC1zaXplOiAyMHB4O1xuICAgICAgY29sb3I6IHZhcigtLWRhc2gtZm9yZS1jb2xvcik7XG4gICAgfVxuICAgIC50YWItY2FyZC5hY3RpdmUgLnRhYi1jYXJkLWljb24ge1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgxMCwxMzIsMjU1LDAuMjUpO1xuICAgICAgY29sb3I6IHZhcigtLWRhc2gtYWNjZW50LWNvbG9yKTtcbiAgICB9XG4gICAgLnRhYi1jYXJkLW5hbWUge1xuICAgICAgZm9udC1zaXplOiAxM3B4O1xuICAgICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1kYXNoLXRhYi1hY3RpdmUtdGV4dCk7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuICAgICAgbGluZS1oZWlnaHQ6IDEuMztcbiAgICB9XG4gICAgLnRhYi1jYXJkLWFjdGlvbnMge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGdhcDogNHB4O1xuICAgICAgb3BhY2l0eTogMDtcbiAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXM7XG4gICAgfVxuICAgIC50YWItY2FyZDpob3ZlciAudGFiLWNhcmQtYWN0aW9ucyB7IG9wYWNpdHk6IDE7IH1cbiAgICAudGFiLWNhcmQtYnRuIHtcbiAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wNyk7XG4gICAgICBib3JkZXI6IG5vbmU7XG4gICAgICB3aWR0aDogMjZweDsgaGVpZ2h0OiAyNnB4O1xuICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgICAgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICBmb250LXNpemU6IDEycHg7XG4gICAgICBjb2xvcjogdmFyKC0tZGFzaC1mb3JlLWNvbG9yKTtcbiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMsIGNvbG9yIDAuMTVzO1xuICAgIH1cbiAgICAudGFiLWNhcmQtcG9wb3V0OmhvdmVyIHsgYmFja2dyb3VuZDogcmdiYSgxMCwxMzIsMjU1LDAuMjUpOyBjb2xvcjogdmFyKC0tZGFzaC1hY2NlbnQtY29sb3IpOyB9XG4gICAgLnRhYi1jYXJkLXJlbW92ZTpob3ZlciB7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDY5LDU4LDAuMjUpOyAgY29sb3I6IHZhcigtLWRhc2gtZGFuZ2VyLWNvbG9yKTsgfVxuXG4gICAgLnRhYi1zd2l0Y2hlci1mb290ZXIge1xuICAgICAgcGFkZGluZzogMTJweCAxNnB4IDE2cHg7XG4gICAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA2KTtcbiAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIH1cbiAgICAudGFiLXN3aXRjaGVyLWFkZC1idG4ge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIGdhcDogOHB4O1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBwYWRkaW5nOiAxMXB4IDIwcHg7XG4gICAgICBib3JkZXItcmFkaXVzOiAxNnB4O1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgxMCwxMzIsMjU1LDAuMTUpO1xuICAgICAgYm9yZGVyOiAxLjVweCBkYXNoZWQgcmdiYSgxMCwxMzIsMjU1LDAuNCk7XG4gICAgICBjb2xvcjogdmFyKC0tZGFzaC1hY2NlbnQtY29sb3IpO1xuICAgICAgZm9udC1zaXplOiAxNHB4O1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMsIGJvcmRlci1jb2xvciAwLjE1cztcbiAgICB9XG4gICAgLnRhYi1zd2l0Y2hlci1hZGQtYnRuOmhvdmVyIHsgYmFja2dyb3VuZDogcmdiYSgxMCwxMzIsMjU1LDAuMjUpOyBib3JkZXItY29sb3I6IHZhcigtLWRhc2gtYWNjZW50LWNvbG9yKTsgfVxuXG4gICAgLmJ0bi1hZGQtd2lkZ2V0IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGdhcDogNnB4O1xuICAgICAgYmFja2dyb3VuZDogdmFyKC0tZGFzaC1hY2NlbnQtY29sb3IpOyBib3JkZXI6IG5vbmU7IGNvbG9yOiB2YXIoLS1kYXNoLWFkZC13aWRnZXQtdGV4dCk7XG4gICAgICBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA2MDA7IHBhZGRpbmc6IDEwcHggMjBweDsgYm9yZGVyLXJhZGl1czogMjJweDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjsgd2hpdGUtc3BhY2U6IG5vd3JhcDsgZmxleC1zaHJpbms6IDA7XG4gICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMsIHRyYW5zZm9ybSAwLjE1cztcbiAgICB9XG4gICAgLmJ0bi1hZGQtd2lkZ2V0OmhvdmVyICB7IG9wYWNpdHk6IDAuOTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpOyB9XG4gICAgLmJ0bi1hZGQtd2lkZ2V0OmFjdGl2ZSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsgfVxuXG4gICAgLyog4pSA4pSAIEdyaWQg4pSA4pSAICovXG4gICAgLm1haW4tY29udGVudCAuZ3JpZC1jb250YWluZXIgeyBmbGV4OiAxOyBvdmVyZmxvdzogYXV0bzsgYm9yZGVyLXJhZGl1czogMjRweDsgbWluLWhlaWdodDogMDsgfVxuICAgIGFwcC1ncmlkIHsgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7IGRpc3BsYXk6IGJsb2NrOyBoZWlnaHQ6IDEwMCU7IHdpZHRoOiAxMDAlOyB9XG4gIGBdXG59KVxuZXhwb3J0IGNsYXNzIERhc2hib2FyZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBpbml0aWFsTGF5b3V0Pzogc3RyaW5nO1xuICBASW5wdXQoKSB0aGVtZT86IERhc2hib2FyZFRoZW1lO1xuXG4gIEBPdXRwdXQoKSBhZGRXaWRnZXRSZXF1ZXN0ZWQgID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgZWRpdFdpZGdldFJlcXVlc3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8V2lkZ2V0PigpO1xuXG4gIEBDb250ZW50Q2hpbGQoR3JpZENlbGxEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgY2VsbFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8eyB3aWRnZXQ6IFdpZGdldCB9PjtcblxuICBAVmlld0NoaWxkKCd0YWJzVHJhY2snKSB0YWJzVHJhY2tSZWYhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICByZXNvbHZlZFRoZW1lOiBSZXF1aXJlZDxEYXNoYm9hcmRUaGVtZT4gPSB7IC4uLkRFRkFVTFRfVEhFTUUgfTtcbiAgd3JhcHBlclN0eWxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIHBhZ2VzOiBQYWdlW10gICAgID0gW107XG4gIHZpc2libGVQYWdlczogUGFnZVtdID0gW107XG4gIGhpZGRlbkNvdW50ICAgICAgID0gMDtcbiAgYWN0aXZlUGFnZUlkICAgICAgPSAnJztcbiAgYWN0aXZlUGFnZT86IFBhZ2U7XG4gIGlzUG9wcGVkT3V0ICAgICAgID0gZmFsc2U7XG4gIHRhYlN3aXRjaGVyT3BlbiAgID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBzdWJzID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyPzogUmVzaXplT2JzZXJ2ZXI7XG5cbiAgLy8gUmVzZXJ2ZWQgc3BhY2UgZm9yIHRoZSBvdmVyZmxvdyBcIitOXCIgYnV0dG9uIGFuZCB0aGUgYWRkIFwiK1wiIGJ1dHRvbiAocHgpXG4gIHByaXZhdGUgcmVhZG9ubHkgT1ZFUkZMT1dfQlROX1cgPSA4MDtcbiAgcHJpdmF0ZSByZWFkb25seSBBRERfQlROX1cgICAgICA9IDUyO1xuICBwcml2YXRlIHJlYWRvbmx5IEdBUCAgICAgICAgICAgID0gNjtcbiAgcHJpdmF0ZSByZWFkb25seSBQQURESU5HICAgICAgICA9IDEyOyAvLyA2cHggZWFjaCBzaWRlXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHN0YXRlU2VydmljZTogRGFzaGJvYXJkU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHpvbmU6IE5nWm9uZVxuICApIHt9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzWyd0aGVtZSddIHx8IGNoYW5nZXNbJ2luaXRpYWxMYXlvdXQnXSkgdGhpcy5hcHBseVRoZW1lKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmFwcGx5VGhlbWUoKTtcblxuICAgIGlmICh0aGlzLmluaXRpYWxMYXlvdXQpIHtcbiAgICAgIHRyeSB7IHRoaXMuc3RhdGVTZXJ2aWNlLmxvYWRMYXlvdXQoSlNPTi5wYXJzZSh0aGlzLmluaXRpYWxMYXlvdXQpKTsgfVxuICAgICAgY2F0Y2ggKGUpIHsgY29uc29sZS5lcnJvcignW0Rhc2hib2FyZF0gRmFpbGVkIHRvIHBhcnNlIGluaXRpYWxMYXlvdXQnLCBlKTsgfVxuICAgIH1cblxuICAgIGNvbnN0IGhhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaD8ucmVwbGFjZSgnIycsICcnKS50cmltKCk7XG4gICAgaWYgKGhhc2gpIHRoaXMuaXNQb3BwZWRPdXQgPSB0cnVlO1xuXG4gICAgdGhpcy5zdWJzLmFkZCh0aGlzLnN0YXRlU2VydmljZS5wYWdlcyQuc3Vic2NyaWJlKHBhZ2VzID0+IHtcbiAgICAgIHRoaXMucGFnZXMgPSBwYWdlcztcbiAgICAgIHRoaXMuX3RhYldpZHRoQ2FjaGUgPSBbXTsgLy8gaW52YWxpZGF0ZSBjYWNoZSDigJQgcGFnZSBsaXN0IGNoYW5nZWRcbiAgICAgIGlmICh0aGlzLmlzUG9wcGVkT3V0ICYmIGhhc2gpIHtcbiAgICAgICAgaWYgKHBhZ2VzLmZpbmQocCA9PiBwLmlkID09PSBoYXNoKSkgdGhpcy5zdGF0ZVNlcnZpY2Uuc2V0QWN0aXZlUGFnZShoYXNoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudXBkYXRlQWN0aXZlUGFnZSgpO1xuICAgICAgdGhpcy5yZWNhbGNWaXNpYmxlVGFicygpO1xuICAgICAgLy8gU2Vjb25kIHBhc3MgYWZ0ZXIgQW5ndWxhciBoYXMgcmVuZGVyZWQgdGhlIHVwZGF0ZWQgdGFiIGVsZW1lbnRzXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVjYWxjVmlzaWJsZVRhYnMoKSk7XG4gICAgfSkpO1xuICAgIHRoaXMuc3Vicy5hZGQodGhpcy5zdGF0ZVNlcnZpY2UuYWN0aXZlUGFnZUlkJC5zdWJzY3JpYmUoaWQgPT4ge1xuICAgICAgdGhpcy5hY3RpdmVQYWdlSWQgPSBpZDtcbiAgICAgIHRoaXMudXBkYXRlQWN0aXZlUGFnZSgpO1xuICAgIH0pKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAoIXRoaXMudGFic1RyYWNrUmVmKSByZXR1cm47XG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHRoaXMucmVjYWxjVmlzaWJsZVRhYnMoKSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLnRhYnNUcmFja1JlZi5uYXRpdmVFbGVtZW50KTtcbiAgICB9KTtcbiAgICAvLyBJbml0aWFsIG1lYXN1cmVtZW50IHBhc3Mgbm93IHRoYXQgdGhlIERPTSBpcyByZWFkeVxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZWNhbGNWaXNpYmxlVGFicygpKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuc3Vicy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMucmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTtcbiAgfVxuXG4gIG9uSXRlbUNoYW5nZWQod2lkZ2V0OiBXaWRnZXQpIHtcbiAgICB0aGlzLnN0YXRlU2VydmljZS51cGRhdGVXaWRnZXRQb3NpdGlvbihcbiAgICAgIHRoaXMuYWN0aXZlUGFnZUlkLCB3aWRnZXQuaWQsIHdpZGdldC54LCB3aWRnZXQueSwgd2lkZ2V0LmNvbHMsIHdpZGdldC5yb3dzXG4gICAgKTtcbiAgfVxuXG4gIG9uUmVtb3ZlV2lkZ2V0KHdpZGdldElkOiBzdHJpbmcpIHsgdGhpcy5zdGF0ZVNlcnZpY2UucmVtb3ZlV2lkZ2V0KHdpZGdldElkKTsgfVxuXG4gIG9uU2VsZWN0UGFnZShpZDogc3RyaW5nKSB7IHRoaXMuc3RhdGVTZXJ2aWNlLnNldEFjdGl2ZVBhZ2UoaWQpOyB9XG5cbiAgb25BZGRQYWdlKCkge1xuICAgIGNvbnN0IG5hbWUgPSBwcm9tcHQoJ1dvcmtzcGFjZSBuYW1lOicsIGBXb3Jrc3BhY2UgJHt0aGlzLnBhZ2VzLmxlbmd0aCArIDF9YCk7XG4gICAgaWYgKG5hbWUpIHRoaXMuc3RhdGVTZXJ2aWNlLmFkZFBhZ2UobmFtZSk7XG4gIH1cblxuICBvblJlbW92ZVBhZ2UoZXZlbnQ6IEV2ZW50LCBpZDogc3RyaW5nKSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKGNvbmZpcm0oJ1JlbW92ZSB0aGlzIHdvcmtzcGFjZT8nKSkgdGhpcy5zdGF0ZVNlcnZpY2UucmVtb3ZlUGFnZShpZCk7XG4gIH1cblxuICBvblBvcE91dChldmVudDogRXZlbnQsIHBhZ2VJZDogc3RyaW5nKSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UucG9wT3V0UGFnZShwYWdlSWQpO1xuICB9XG5cbiAgc2VyaWFsaXplTGF5b3V0KCk6IHN0cmluZyB7IHJldHVybiB0aGlzLnN0YXRlU2VydmljZS5zZXJpYWxpemVMYXlvdXQoKTsgfVxuXG4gIG9wZW5UYWJTd2l0Y2hlcigpICB7IHRoaXMudGFiU3dpdGNoZXJPcGVuID0gdHJ1ZTsgfVxuICBjbG9zZVRhYlN3aXRjaGVyKCkgeyB0aGlzLnRhYlN3aXRjaGVyT3BlbiA9IGZhbHNlOyB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bi5lc2NhcGUnKVxuICBvbkVzY2FwZUtleSgpIHsgdGhpcy5jbG9zZVRhYlN3aXRjaGVyKCk7IH1cblxuICBvblN3aXRjaGVyU2VsZWN0KHBhZ2VJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2Uuc2V0QWN0aXZlUGFnZShwYWdlSWQpO1xuICAgIHRoaXMuY2xvc2VUYWJTd2l0Y2hlcigpO1xuICB9XG5cbiAgb25Td2l0Y2hlclBvcE91dChldmVudDogRXZlbnQsIHBhZ2VJZDogc3RyaW5nKSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5zdGF0ZVNlcnZpY2UucG9wT3V0UGFnZShwYWdlSWQpO1xuICAgIHRoaXMuY2xvc2VUYWJTd2l0Y2hlcigpO1xuICB9XG5cbiAgb25Td2l0Y2hlclJlbW92ZShldmVudDogRXZlbnQsIHBhZ2VJZDogc3RyaW5nKSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKGNvbmZpcm0oJ1JlbW92ZSB0aGlzIHdvcmtzcGFjZT8nKSkge1xuICAgICAgdGhpcy5zdGF0ZVNlcnZpY2UucmVtb3ZlUGFnZShwYWdlSWQpO1xuICAgICAgaWYgKHRoaXMucGFnZXMubGVuZ3RoIDw9IDEpIHRoaXMuY2xvc2VUYWJTd2l0Y2hlcigpO1xuICAgIH1cbiAgfVxuXG4gIG9uU3dpdGNoZXJBZGQoKSB7XG4gICAgY29uc3QgbmFtZSA9IHByb21wdCgnV29ya3NwYWNlIG5hbWU6JywgYFdvcmtzcGFjZSAke3RoaXMucGFnZXMubGVuZ3RoICsgMX1gKTtcbiAgICBpZiAobmFtZSkgdGhpcy5zdGF0ZVNlcnZpY2UuYWRkUGFnZShuYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjYWxjVmlzaWJsZVRhYnMoKSB7XG4gICAgaWYgKCF0aGlzLnRhYnNUcmFja1JlZiB8fCAhdGhpcy5wYWdlcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMudmlzaWJsZVBhZ2VzID0gdGhpcy5wYWdlcztcbiAgICAgIHRoaXMuaGlkZGVuQ291bnQgID0gMDtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRyYWNrICAgICAgICA9IHRoaXMudGFic1RyYWNrUmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgdHJhY2tXICAgICAgID0gdHJhY2suY2xpZW50V2lkdGg7XG4gICAgLy8gU3BhY2UgYWx3YXlzIGNvbnN1bWVkIGJ5IHRoZSBhZGQgXCIrXCIgYnV0dG9uICsgcGFkZGluZ1xuICAgIGNvbnN0IGJhc2VSZXNlcnZlZCA9IHRoaXMuQUREX0JUTl9XICsgdGhpcy5HQVAgKyB0aGlzLlBBRERJTkc7XG4gICAgLy8gU3BhY2UgbmVlZGVkIGZvciB0aGUgb3ZlcmZsb3cgXCIrTlwiIGJ1dHRvbiB3aGVuIHNob3duXG4gICAgY29uc3Qgb3ZlcmZsb3dTbG90ID0gdGhpcy5PVkVSRkxPV19CVE5fVyArIHRoaXMuR0FQO1xuXG4gICAgLy8gTWVhc3VyZSBlYWNoIHJlYWwgdGFiIGVsZW1lbnQgY3VycmVudGx5IGluIHRoZSBET00uXG4gICAgLy8gVGhlIERPTSBhbHdheXMgcmVuZGVycyBhbGwgdmlzaWJsZVBhZ2VzIHRhYnMsIHNvIHdlIG1heSBub3QgaGF2ZSBhbGwgdGFic1xuICAgIC8vIG1lYXN1cmVkIHlldCDigJQgZmFsbCBiYWNrIHRvIHRoZSBwcmV2aW91cyBtZWFzdXJlZCBjYWNoZSBvciBhIGdlbmVyb3VzIGVzdGltYXRlLlxuICAgIGNvbnN0IHRhYkVscyA9IEFycmF5LmZyb20odHJhY2sucXVlcnlTZWxlY3RvckFsbDxIVE1MRWxlbWVudD4oJy50YWInKSk7XG4gICAgLy8gQnVpbGQgYSB3aWR0aCBtYXAgYnkgaW5kZXggKG9ubHkgY292ZXJzIGN1cnJlbnRseSB2aXNpYmxlIHRhYnMpXG4gICAgY29uc3QgbWVhc3VyZWRXaWR0aHM6IG51bWJlcltdID0gdGhpcy5wYWdlcy5tYXAoKF8sIGkpID0+IHtcbiAgICAgIGNvbnN0IGVsID0gdGFiRWxzW2ldO1xuICAgICAgcmV0dXJuIGVsID8gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggKyB0aGlzLkdBUCA6IHRoaXMuX3RhYldpZHRoQ2FjaGVbaV0gPz8gMTUwICsgdGhpcy5HQVA7XG4gICAgfSk7XG4gICAgLy8gVXBkYXRlIGNhY2hlIGZvciBuZXh0IGNhbGxcbiAgICB0YWJFbHMuZm9yRWFjaCgoZWwsIGkpID0+IHtcbiAgICAgIHRoaXMuX3RhYldpZHRoQ2FjaGVbaV0gPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCArIHRoaXMuR0FQO1xuICAgIH0pO1xuXG4gICAgLy8gSG93IG11Y2ggc3BhY2UgdGhlIHRhYnMgbmVlZCBpbiB0b3RhbCAobm8gb3ZlcmZsb3cgYnV0dG9uKVxuICAgIGNvbnN0IHRvdGFsTmVlZGVkID0gbWVhc3VyZWRXaWR0aHMucmVkdWNlKChzLCB3KSA9PiBzICsgdywgMCkgLSB0aGlzLkdBUDsgLy8gcmVtb3ZlIHRyYWlsaW5nIGdhcFxuXG4gICAgaWYgKHRvdGFsTmVlZGVkIDw9IHRyYWNrVyAtIGJhc2VSZXNlcnZlZCkge1xuICAgICAgLy8gRXZlcnl0aGluZyBmaXRzIOKAlCBzaG93IGFsbFxuICAgICAgdGhpcy52aXNpYmxlUGFnZXMgPSB0aGlzLnBhZ2VzO1xuICAgICAgdGhpcy5oaWRkZW5Db3VudCAgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBOb3QgZXZlcnl0aGluZyBmaXRzIOKAlCBmaWxsIGFzIG1hbnkgYXMgcG9zc2libGUgd2hpbGUgYWx3YXlzIGxlYXZpbmcgcm9vbSBmb3Igb3ZlcmZsb3cgYnRuXG4gICAgICBjb25zdCBidWRnZXQgPSB0cmFja1cgLSBiYXNlUmVzZXJ2ZWQgLSBvdmVyZmxvd1Nsb3Q7XG4gICAgICBsZXQgdXNlZCAgPSAwO1xuICAgICAgbGV0IGNvdW50ID0gMDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB1c2VkICs9IG1lYXN1cmVkV2lkdGhzW2ldO1xuICAgICAgICBpZiAodXNlZCAtIHRoaXMuR0FQIDw9IGJ1ZGdldCkgeyAgLy8gLUdBUDogbGFzdCBpdGVtIGhhcyBubyB0cmFpbGluZyBnYXBcbiAgICAgICAgICBjb3VudCsrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb3VudCA9IE1hdGgubWF4KDEsIGNvdW50KTtcbiAgICAgIHRoaXMudmlzaWJsZVBhZ2VzID0gdGhpcy5wYWdlcy5zbGljZSgwLCBjb3VudCk7XG4gICAgICB0aGlzLmhpZGRlbkNvdW50ICA9IHRoaXMucGFnZXMubGVuZ3RoIC0gY291bnQ7XG4gICAgfVxuXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvLyBDYWNoZSBvZiBtZWFzdXJlZCB0YWIgd2lkdGhzIChpbmNsdWRpbmcgZ2FwKSBpbmRleGVkIGJ5IHBhZ2UgcG9zaXRpb25cbiAgcHJpdmF0ZSBfdGFiV2lkdGhDYWNoZTogbnVtYmVyW10gPSBbXTtcblxuICBwcml2YXRlIGFwcGx5VGhlbWUoKSB7XG4gICAgdGhpcy5yZXNvbHZlZFRoZW1lID0geyAuLi5ERUZBVUxUX1RIRU1FLCAuLi4odGhpcy50aGVtZSA/PyB7fSkgfTtcbiAgICBjb25zdCB0ID0gdGhpcy5yZXNvbHZlZFRoZW1lO1xuICAgIHRoaXMud3JhcHBlclN0eWxlcyA9IHtcbiAgICAgICctLWRhc2gtYmcnOiAgICAgICAgICAgICAgICAgICB0LmJhY2tncm91bmRDb2xvcixcbiAgICAgICctLWRhc2gtcGFuZWwtYmcnOiAgICAgICAgICAgICB0LnBhbmVsQ29sb3IsXG4gICAgICAnLS1kYXNoLWNhcmQtYmcnOiAgICAgICAgICAgICAgdC53aWRnZXRDYXJkQ29sb3IsXG4gICAgICAnLS1kYXNoLWZvcmUtY29sb3InOiAgICAgICAgICAgdC5mb3JlQ29sb3IsXG4gICAgICAnLS1kYXNoLWFjY2VudC1jb2xvcic6ICAgICAgICAgdC5hY2NlbnRDb2xvcixcbiAgICAgICctLWRhc2gtZGFuZ2VyLWNvbG9yJzogICAgICAgICB0LmRhbmdlckNvbG9yLFxuICAgICAgJy0tZGFzaC1mb250LWZhbWlseSc6ICAgICAgICAgIHQuZm9udEZhbWlseSxcbiAgICAgICctLWRhc2gtdGFicy1jb250YWluZXItY29sb3InOiB0LnRhYnNDb250YWluZXJDb2xvcixcbiAgICAgICctLWRhc2gtdGFiLWFjdGl2ZS1jb2xvcic6ICAgICB0LnRhYkFjdGl2ZUNvbG9yLFxuICAgICAgJy0tZGFzaC10YWItYWN0aXZlLXRleHQnOiAgICAgIHQudGFiQWN0aXZlVGV4dENvbG9yLFxuICAgICAgJy0tZGFzaC10YWItaG92ZXItdGV4dCc6ICAgICAgIHQudGFiSG92ZXJUZXh0Q29sb3IsXG4gICAgICAnLS1kYXNoLWFkZC13aWRnZXQtdGV4dCc6ICAgICAgdC5hZGRXaWRnZXRCdXR0b25UZXh0Q29sb3IsXG4gICAgICAnLS1kYXNoLXBvcG91dC10aXRsZS1jb2xvcic6ICAgdC5wb3BvdXRUaXRsZUNvbG9yLFxuICAgICAgJy0tZGFzaC13aWRnZXQtdGl0bGUtY29sb3InOiAgIHQud2lkZ2V0VGl0bGVDb2xvcixcbiAgICAgICctLWRhc2gtZHJhZy1oYW5kbGUtY29sb3InOiAgICB0LmRyYWdIYW5kbGVDb2xvcixcbiAgICAgICctLWRhc2gtd2lkZ2V0LWJvcmRlci1jb2xvcic6ICB0LndpZGdldEJvcmRlckNvbG9yLFxuICAgICAgJy0tZGFzaC13aWRnZXQtYnRuLWJnJzogICAgICAgIHQud2lkZ2V0QnV0dG9uQmdDb2xvcixcbiAgICAgICctLWRhc2gtd2lkZ2V0LWJ0bi1jb2xvcic6ICAgICB0LndpZGdldEJ1dHRvbkNvbG9yLFxuICAgICAgJy0tZGFzaC1wbGFjZWhvbGRlci1jb2xvcic6ICAgIHQucGxhY2Vob2xkZXJDb2xvcixcbiAgICAgICctLWRhc2gtcmVzaXplLWhhbmRsZS1jb2xvcic6ICB0LnJlc2l6ZUhhbmRsZUNvbG9yLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUFjdGl2ZVBhZ2UoKSB7XG4gICAgdGhpcy5hY3RpdmVQYWdlID0gdGhpcy5wYWdlcy5maW5kKHAgPT4gcC5pZCA9PT0gdGhpcy5hY3RpdmVQYWdlSWQpO1xuICB9XG59XG4iXX0=
|