@bizdoc/core 2.3.23 → 2.3.26
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/esm2022/lib/admin/architecture/declarations.mjs +10 -9
- package/esm2022/lib/admin/architecture/designer-element.component.mjs +4 -4
- package/esm2022/lib/admin/architecture/designer.component.mjs +124 -89
- package/esm2022/lib/admin/form/workflow/workflow.component.mjs +3 -3
- package/esm2022/lib/admin/patterns/patterns.component.mjs +3 -3
- package/esm2022/lib/admin/permissions/permissions.component.mjs +3 -3
- package/esm2022/lib/admin/positions/positions.component.mjs +3 -3
- package/esm2022/lib/browse/browse.mobile.component.mjs +3 -3
- package/esm2022/lib/browse/browse.pane.component.mjs +3 -3
- package/esm2022/lib/browse/filter/filter.component.mjs +3 -3
- package/esm2022/lib/compose/compose.mobile.component.mjs +3 -3
- package/esm2022/lib/compose/compose.pane.component.mjs +3 -3
- package/esm2022/lib/compose/form.component.mjs +2 -2
- package/esm2022/lib/core/inputs/combination-picker-body.mjs +3 -3
- package/esm2022/lib/core/popup/popup.component.mjs +2 -2
- package/esm2022/lib/system.module.mjs +3 -1
- package/fesm2022/bizdoc-core.mjs +144 -112
- package/fesm2022/bizdoc-core.mjs.map +1 -1
- package/lib/admin/architecture/declarations.d.ts +4 -1
- package/lib/admin/architecture/designer-element.component.d.ts +3 -2
- package/lib/admin/architecture/designer.component.d.ts +22 -9
- package/package.json +1 -1
@@ -1,6 +1,6 @@
|
|
1
1
|
import { __decorate } from "tslib";
|
2
2
|
import { moveItemInArray } from "@angular/cdk/drag-drop";
|
3
|
-
import { Component, HostListener, Injector } from "@angular/core";
|
3
|
+
import { Component, HostListener, Injector, TemplateRef, ViewChild } from "@angular/core";
|
4
4
|
import { itemAnimation } from "../../core/animations";
|
5
5
|
import { OpenPolicy } from "../../core/configuration";
|
6
6
|
import { BizDoc } from "../../core/decorators";
|
@@ -24,75 +24,97 @@ import { UtilityDesignComponent } from "./elements/utility.component";
|
|
24
24
|
import { ViewDesignComponent } from "./elements/view.component";
|
25
25
|
import { WidgetDesignComponent } from "./elements/widget.component";
|
26
26
|
import { SourceDesignComponent } from "./elements/source.component";
|
27
|
+
import { debounceTime } from "rxjs";
|
27
28
|
import * as i0 from "@angular/core";
|
28
29
|
import * as i1 from "../../core/slots/router.service";
|
29
|
-
import * as i2 from "
|
30
|
-
import * as i3 from "../../core/
|
31
|
-
import * as i4 from "../../core/
|
32
|
-
import * as i5 from "
|
33
|
-
import * as i6 from "
|
34
|
-
import * as i7 from "
|
35
|
-
import * as i8 from "@angular/
|
36
|
-
import * as i9 from "
|
37
|
-
import * as i10 from "@angular/
|
38
|
-
import * as i11 from "@angular/material/
|
39
|
-
import * as i12 from "@angular/material/
|
40
|
-
import * as i13 from "@angular/material/
|
41
|
-
import * as i14 from "@angular/material/
|
42
|
-
import * as i15 from "@angular/material/
|
43
|
-
import * as i16 from "
|
44
|
-
import * as i17 from "
|
45
|
-
import * as i18 from "
|
46
|
-
import * as i19 from "
|
30
|
+
import * as i2 from "@angular/forms";
|
31
|
+
import * as i3 from "../../core/translate.service";
|
32
|
+
import * as i4 from "../../core/prompt.service";
|
33
|
+
import * as i5 from "../../core/session.service";
|
34
|
+
import * as i6 from "../../core/popup/popup.service";
|
35
|
+
import * as i7 from "../utility-ref";
|
36
|
+
import * as i8 from "@angular/common";
|
37
|
+
import * as i9 from "../../core/none.component";
|
38
|
+
import * as i10 from "@angular/cdk/drag-drop";
|
39
|
+
import * as i11 from "@angular/material/card";
|
40
|
+
import * as i12 from "@angular/material/core";
|
41
|
+
import * as i13 from "@angular/material/progress-bar";
|
42
|
+
import * as i14 from "@angular/material/toolbar";
|
43
|
+
import * as i15 from "@angular/material/form-field";
|
44
|
+
import * as i16 from "@angular/material/select";
|
45
|
+
import * as i17 from "@angular/material/button";
|
46
|
+
import * as i18 from "@angular/material/input";
|
47
|
+
import * as i19 from "@angular/material/icon";
|
48
|
+
import * as i20 from "@angular/material/menu";
|
49
|
+
import * as i21 from "../../core/popup/tooltip.directive";
|
50
|
+
import * as i22 from "../../core/pipes/localized-string.pipe";
|
51
|
+
import * as i23 from "../../core/pipes/sort.pipe";
|
52
|
+
import * as i24 from "../../core/pipes/translate.pipe";
|
47
53
|
/** */
|
48
54
|
let ConfigurationDesignerComponent = class ConfigurationDesignerComponent {
|
49
|
-
constructor(_panes, _translate, _ps, _session, _element, _injector, _ref) {
|
55
|
+
constructor(_panes, _fb, _translate, _ps, _session, _element, _injector, _popup, _ref) {
|
50
56
|
this._panes = _panes;
|
57
|
+
this._fb = _fb;
|
51
58
|
this._translate = _translate;
|
52
59
|
this._ps = _ps;
|
53
60
|
this._session = _session;
|
54
61
|
this._element = _element;
|
55
62
|
this._injector = _injector;
|
63
|
+
this._popup = _popup;
|
56
64
|
this._ref = _ref;
|
65
|
+
this.searchBy = 0;
|
57
66
|
this.loading = true;
|
58
67
|
this.saving = false;
|
59
68
|
this.dirty = false;
|
69
|
+
this.form = this._fb.group({
|
70
|
+
contains: this._fb.control(null),
|
71
|
+
sections: this._fb.control(null),
|
72
|
+
family: this._fb.control(null)
|
73
|
+
});
|
60
74
|
}
|
61
75
|
ngOnInit() {
|
62
76
|
this._ref.populate().subscribe(r => {
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
77
|
+
try {
|
78
|
+
this.model = r;
|
79
|
+
this.sections = [
|
80
|
+
{ elements: r.forms, type: 'Forms', comp: FormDesignComponent, templates: r.tForms },
|
81
|
+
{ elements: r.actions, type: 'Actions', comp: ActionDesignerComponent, templates: r.tActions },
|
82
|
+
{ elements: r.reports, type: 'Reports', comp: ReportDesignerComponent, templates: r.tReports },
|
83
|
+
{ elements: r.widgets, type: 'Widgets', comp: WidgetDesignComponent, templates: r.tWidgets },
|
84
|
+
{ elements: r.views, type: 'Views', comp: ViewDesignComponent, templates: r.tViews },
|
85
|
+
{ elements: r.guides, type: 'Guides', comp: GuideDesignComponent, templates: [{ title: this._translate.get('Guide') }] },
|
86
|
+
{ elements: r.cubes, type: 'Cubes', comp: CubeDesignComponent, templates: r.tCubes },
|
87
|
+
//{ elements: r.jobs, type: 'Jobs', comp: JobDesignComponent },
|
88
|
+
{ elements: r.sources, type: 'Sources', comp: SourceDesignComponent },
|
89
|
+
{ elements: r.folders, type: 'Folders', comp: FolderDesignComponent, templates: [{ title: this._translate.get('Folder') }] },
|
90
|
+
{ elements: r.roles, type: 'Roles', comp: RoleDesignComponent, templates: [{ title: this._translate.get('Role') }] },
|
91
|
+
{ elements: r.states, type: 'States', comp: StateDesignComponent, templates: [{ title: this._translate.get('State') }] },
|
92
|
+
{ elements: r.utilities, type: 'Tools', comp: UtilityDesignComponent, templates: r.tUtilities },
|
93
|
+
{ elements: r.types, type: 'Types', comp: TypeDesignComponent, templates: r.tTypes },
|
94
|
+
{ elements: r.nodes, type: 'Nodes', comp: NodeDesignerComponent, templates: r.tNodes },
|
95
|
+
{ elements: r.attributes, type: 'Attributes', comp: AttributeDesignComponent, templates: r.tAttributes },
|
96
|
+
{ elements: r.policies, type: 'Policies', comp: PolicyDesignComponent, templates: r.tPolicies },
|
97
|
+
{ elements: r.controls, type: 'Controls', comp: ControlDesignComponent },
|
98
|
+
{ elements: r.rules, type: 'Rules', comp: RuleDesignComponent, templates: r.tRules },
|
99
|
+
];
|
100
|
+
this.families = [];
|
101
|
+
this.sections.forEach(s => {
|
102
|
+
s.hide = false;
|
103
|
+
s.title = this._translate.get(s.type);
|
104
|
+
s.elements.forEach(e => {
|
105
|
+
if (!e.options)
|
106
|
+
e.options = {};
|
107
|
+
if (e.family && this.families.indexOf(e.family) < 0)
|
108
|
+
this.families.push(e.family);
|
109
|
+
e.hide = false;
|
110
|
+
e.injector = this._createInjector(e, 'widget');
|
111
|
+
});
|
93
112
|
});
|
94
|
-
|
95
|
-
|
113
|
+
this.loading = false;
|
114
|
+
}
|
115
|
+
catch (e) {
|
116
|
+
console.log(e);
|
117
|
+
}
|
96
118
|
});
|
97
119
|
// typing keydown listener
|
98
120
|
this._element.nativeElement.focus();
|
@@ -114,7 +136,7 @@ let ConfigurationDesignerComponent = class ConfigurationDesignerComponent {
|
|
114
136
|
moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);
|
115
137
|
}
|
116
138
|
/**
|
117
|
-
* Ctrl-s save
|
139
|
+
* Ctrl-s save
|
118
140
|
* @param event
|
119
141
|
*/
|
120
142
|
handleKeyboardEvent(event) {
|
@@ -123,13 +145,8 @@ let ConfigurationDesignerComponent = class ConfigurationDesignerComponent {
|
|
123
145
|
event.preventDefault();
|
124
146
|
event.stopPropagation();
|
125
147
|
}
|
126
|
-
else if (this.
|
148
|
+
else if (this.searchBy && event.key === 'Escape')
|
127
149
|
this.clearSearch();
|
128
|
-
else if (event.code.startsWith('Key') || event.key == 'Space') {
|
129
|
-
clearTimeout(this._typingTimer);
|
130
|
-
this._searchBy = this._searchBy ? this._searchBy + event.key.toLowerCase() : event.key.toLowerCase();
|
131
|
-
this._typingTimer = setTimeout(() => this._filter(this._searchBy), 150);
|
132
|
-
}
|
133
150
|
}
|
134
151
|
clearSearch() {
|
135
152
|
clearTimeout(this._typingTimer);
|
@@ -137,36 +154,48 @@ let ConfigurationDesignerComponent = class ConfigurationDesignerComponent {
|
|
137
154
|
s.hide = false;
|
138
155
|
s.elements.forEach(e => e.hide = false);
|
139
156
|
});
|
140
|
-
this.
|
141
|
-
this.searchBy =
|
157
|
+
this.form.setValue({}, { emitEvent: false });
|
158
|
+
this.searchBy = 0;
|
142
159
|
}
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
160
|
+
/**
|
161
|
+
*
|
162
|
+
* @param evt
|
163
|
+
*/
|
164
|
+
filter(evt) {
|
165
|
+
const subscribe = this.form.valueChanges.pipe(debounceTime(150)).
|
166
|
+
subscribe(e => {
|
167
|
+
const { contains, sections, family } = e;
|
168
|
+
this.sections.forEach(s => {
|
169
|
+
if (sections && sections.length && sections.indexOf(s.type) < 0) {
|
170
|
+
s.hide = true;
|
171
|
+
return;
|
152
172
|
}
|
173
|
+
let none = true;
|
174
|
+
s.elements.
|
175
|
+
forEach(e => {
|
176
|
+
if ((!contains || (extractString(e.title) || e.name).toLowerCase().
|
177
|
+
indexOf(contains) > -1)
|
178
|
+
&& (!family || e.family === family)) {
|
179
|
+
e.hide = false;
|
180
|
+
none = false;
|
181
|
+
}
|
182
|
+
else
|
183
|
+
e.hide = true;
|
184
|
+
});
|
185
|
+
if (none)
|
186
|
+
s.hide = (!s.templates || !s.templates.length ||
|
187
|
+
!s.templates.find(t => (!contains ||
|
188
|
+
t.title.toLowerCase().indexOf(contains) > -1) &&
|
189
|
+
(!family || t.family === family)));
|
153
190
|
else
|
154
|
-
e.hide = true;
|
155
|
-
});
|
156
|
-
if (none) {
|
157
|
-
if (s.title.toLowerCase().indexOf(value) > -1) {
|
158
|
-
s.elements.
|
159
|
-
forEach(e => e.hide = false);
|
160
191
|
s.hide = false;
|
161
|
-
|
162
|
-
|
163
|
-
s.hide = true;
|
164
|
-
}
|
165
|
-
else
|
166
|
-
s.hide = false;
|
192
|
+
});
|
193
|
+
this.searchBy += 1;
|
167
194
|
});
|
168
|
-
this.
|
169
|
-
|
195
|
+
this._popup.open(this.filters, evt.target, {
|
196
|
+
data: this.form
|
197
|
+
}).closed().
|
198
|
+
subscribe(subscribe.unsubscribe);
|
170
199
|
}
|
171
200
|
/**
|
172
201
|
*
|
@@ -189,6 +218,9 @@ let ConfigurationDesignerComponent = class ConfigurationDesignerComponent {
|
|
189
218
|
this._open(element, section, 'add').then(() => {
|
190
219
|
// add to array
|
191
220
|
section.elements.splice(position + 1, 0, element);
|
221
|
+
// force render on search more
|
222
|
+
if (this.searchBy)
|
223
|
+
this.searchBy += 1;
|
192
224
|
});
|
193
225
|
}
|
194
226
|
_open(element, section, mode) {
|
@@ -310,8 +342,8 @@ let ConfigurationDesignerComponent = class ConfigurationDesignerComponent {
|
|
310
342
|
collection.forEach(s => s.forEach(e => delete e.draft));
|
311
343
|
}
|
312
344
|
}
|
313
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ConfigurationDesignerComponent, deps: [{ token: i1.PanesRouter }, { token: i2.
|
314
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: ConfigurationDesignerComponent, selector: "ng-component", host: { attributes: { "tabindex": "0" }, listeners: { "keydown": "handleKeyboardEvent($event)" } }, ngImport: i0, template: "<mat-toolbar>\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!dirty || loading || saving\" [bizdocTooltip]=\"'Save'|translate\"><mat-icon>save</mat-icon></button>\n <span class=\"divider\"></span>\n <button mat-icon-button (click)=\"clearSearch()\" [disabled]=\"!searchBy\" [bizdocTooltip]=\"'Clear'|translate\"><mat-icon>search_off</mat-icon></button>\n</mat-toolbar>\n<mat-progress-bar [mode]=\"loading ? 'buffer' : 'indeterminate'\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\n@if (loading) {\n <bizdoc-none title=\"SettingThingsUp\" subtitle=\"PleaseWait\" icon=\"architecture\"></bizdoc-none>\n}\n<div>\n @for (s of sections | filterBy:'hide': false: searchBy; track s) {\n <section>\n <h2 class=\"mat-h1\">{{s.title}}</h2>\n <!--<hr />-->\n <div class=\"elements\" cdkDropList cdkDropListOrientation=\"horizontal\" [cdkDropListData]=\"s.elements\" (cdkDropListDropped)=\"drop($event)\">\n @for (e of s.elements | filterBy:'hide': false: searchBy; track e) {\n <mat-card [class.disabled]=\"e.disabled\" cdkDrag cdkDragRootElement=\".mat-mdc-card-title\">\n <!-- @item-->\n <mat-card-header>\n <mat-card-title>\n {{e.title|localizedString}}\n <span class=\"divider\"></span>\n @if (e.help) {\n <mat-icon [bizdocTooltip]=\"e.help\" [bizdocTooltipDuration]=\"6000\">help_outline</mat-icon>\n }\n </mat-card-title>\n <mat-card-subtitle>\n {{e.name}}\n </mat-card-subtitle>\n </mat-card-header>\n <mat-card-content>\n <ng-container *ngComponentOutlet=\"s.comp; injector: e.injector\"></ng-container>\n </mat-card-content>\n <mat-card-actions class=\"row\">\n @if (!e.copyOf) {\n <button mat-icon-button (click)=\"copy(s, e)\" [bizdocTooltip]=\"'Copy'|translate\"><mat-icon>file_copy</mat-icon></button>\n }\n @if (e.draft || e.empty) {\n <button mat-icon-button (click)=\"remove(s, e)\" [bizdocTooltip]=\"'Discard'|translate\"><mat-icon>delete</mat-icon></button>\n }\n <button mat-icon-button (click)=\"toggleDisabled(e)\" [bizdocTooltip]=\"(e.disabled ? 'Enable' : 'Disable')|translate\"><mat-icon>{{e.disabled ? 'visibility' : 'visibility_off'}}</mat-icon></button>\n <span class=\"divider\"></span>\n <button mat-icon-button (click)=\"edit(s, e)\" [bizdocTooltip]=\"'Settings'|translate\"><mat-icon>settings</mat-icon></button>\n </mat-card-actions>\n </mat-card>\n }\n @if (s.templates?.length) {\n <div class=\"add-element\" matRipple (click)=\"add(s, menuTrigger, $event)\">\n <span [matMenuTriggerFor]=\"templateMenu\" #menuTrigger=\"matMenuTrigger\"></span>\n <button mat-icon-button><mat-icon [bizdocTooltip]=\"'New'|translate\" disableRipple=\"true\">add</mat-icon></button>\n <mat-menu #templateMenu>\n @for (t of s.templates; track t) {\n <button mat-menu-item (click)=\"create(s, t)\">\n @if (t.family) {\n <span>\n {{t.family}}\n - \n </span>\n }\n <span>\n {{t.title}}\n </span>\n </button>\n }\n </mat-menu>\n </div>\n }\n </div>\n </section>\n }\n</div>\n", styles: [":host{outline:none}section h2{margin:10px}section .elements{display:flex;flex-wrap:wrap}section .elements .disabled{opacity:.5;background-color:transparent}section .add-element{border:2px dashed gray;min-width:126px;min-height:126px;border-radius:3px;margin:1px 0 6px;text-align:center}section .add-element button{top:50%;transform:translateY(-50%)}:host ::ng-deep .mat-mdc-card{margin:6px;display:flex;flex-direction:column}:host ::ng-deep .mat-mdc-card button{opacity:.1}:host ::ng-deep .mat-mdc-card:hover button{opacity:1}:host ::ng-deep .mat-mdc-card-header-text{width:100%}:host ::ng-deep .mat-mdc-card-title{display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;align-items:center}.divider{min-width:3px}:host ::ng-deep .mat-mdc-card-content{flex:1}\n"], dependencies: [{ kind: "directive", type: i6.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "component", type: i7.NoneComponent, selector: "bizdoc-none", inputs: ["title", "subtitle", "icon"] }, { kind: "directive", type: i8.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i8.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "component", type: i9.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i9.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i9.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i9.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i9.MatCardSubtitle, selector: "mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]" }, { kind: "directive", type: i9.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: i10.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "component", type: i11.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i12.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i13.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: i14.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i15.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i15.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i15.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i16.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: i17.LocalizedStringPipe, name: "localizedString" }, { kind: "pipe", type: i18.FilterPipe, name: "filterBy" }, { kind: "pipe", type: i19.TranslatePipe, name: "translate" }], animations: [itemAnimation] }); }
|
345
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ConfigurationDesignerComponent, deps: [{ token: i1.PanesRouter }, { token: i2.FormBuilder }, { token: i3.TranslateService }, { token: i4.PromptService }, { token: i5.SessionService }, { token: i0.ElementRef }, { token: i0.Injector }, { token: i6.Popup }, { token: i7.UtilityRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
346
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.2", type: ConfigurationDesignerComponent, selector: "ng-component", host: { attributes: { "tabindex": "0" }, listeners: { "keydown": "handleKeyboardEvent($event)" } }, viewQueries: [{ propertyName: "filters", first: true, predicate: ["filters"], descendants: true, read: TemplateRef }], ngImport: i0, template: "<mat-toolbar>\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!dirty || loading || saving\" [bizdocTooltip]=\"'Save'|translate\"><mat-icon>save</mat-icon></button>\n <span class=\"divider\"></span>\n <button mat-icon-button (click)=\"filter($event)\" [bizdocTooltip]=\"'Filter'|translate\"><mat-icon>filter_list</mat-icon></button>\n</mat-toolbar>\n<mat-progress-bar [mode]=\"loading ? 'buffer' : 'indeterminate'\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\n@if (loading) {\n <bizdoc-none title=\"SettingThingsUp\" subtitle=\"PleaseWait\" icon=\"architecture\"></bizdoc-none>\n}\n<div>\n @for (s of sections | filterBy:'hide': false: searchBy; track s) {\n <section>\n <h2 class=\"mat-h1\">{{s.title}}</h2>\n <!--<hr />-->\n <div class=\"elements\" cdkDropList cdkDropListOrientation=\"horizontal\" [cdkDropListData]=\"s.elements\" (cdkDropListDropped)=\"drop($event)\">\n @for (e of s.elements | filterBy:'hide': false: searchBy; track e) {\n <mat-card [class.disabled]=\"e.disabled\" cdkDrag cdkDragRootElement=\".mat-mdc-card-title\">\n <!-- @item-->\n <mat-card-header>\n <mat-card-title>\n {{e.title|localizedString}}\n <span class=\"divider\"></span>\n @if (e.help) {\n <mat-icon [bizdocTooltip]=\"e.help\" [bizdocTooltipDuration]=\"6000\">help_outline</mat-icon>\n }\n </mat-card-title>\n <mat-card-subtitle>\n {{e.name}}\n </mat-card-subtitle>\n </mat-card-header>\n <mat-card-content>\n <ng-container *ngComponentOutlet=\"s.comp; injector: e.injector\"></ng-container>\n </mat-card-content>\n <mat-card-actions class=\"row\">\n @if (!e.copyOf) {\n <button mat-icon-button (click)=\"copy(s, e)\" [bizdocTooltip]=\"'Copy'|translate\"><mat-icon>file_copy</mat-icon></button>\n }\n @if (e.draft || e.empty) {\n <button mat-icon-button (click)=\"remove(s, e)\" [bizdocTooltip]=\"'Discard'|translate\"><mat-icon>delete</mat-icon></button>\n }\n <button mat-icon-button (click)=\"toggleDisabled(e)\" [bizdocTooltip]=\"(e.disabled ? 'Enable' : 'Disable')|translate\"><mat-icon>{{e.disabled ? 'visibility' : 'visibility_off'}}</mat-icon></button>\n <span class=\"divider\"></span>\n <button mat-icon-button (click)=\"edit(s, e)\" [bizdocTooltip]=\"'Settings'|translate\"><mat-icon>settings</mat-icon></button>\n </mat-card-actions>\n </mat-card>\n }\n @if (s.templates?.length) {\n <div class=\"add-element\" matRipple (click)=\"add(s, menuTrigger, $event)\">\n <span [matMenuTriggerFor]=\"templateMenu\" #menuTrigger=\"matMenuTrigger\"></span>\n <button mat-icon-button><mat-icon [bizdocTooltip]=\"'New'|translate\" disableRipple=\"true\">add</mat-icon></button>\n <mat-menu #templateMenu>\n @for (t of s.templates; track t) {\n <button mat-menu-item (click)=\"create(s, t)\">\n @if (t.family) {\n <span>\n {{t.family}}\n - \n </span>\n }\n <span>\n {{t.title}}\n </span>\n </button>\n }\n </mat-menu>\n </div>\n }\n </div>\n </section>\n }\n</div>\n<!-- search filters -->\n<ng-template #filters>\n <form autocomplete=\"off\" class=\"column gap\" [formGroup]=\"form\">\n <mat-form-field subscriptSizing=\"dynamic\">\n <input matInput formControlName=\"contains\" autocomplete=\"off\" placeholder=\"{{'Contains' | translate}}\" #contains>\n @if (form.value.contains) {\n <button matSuffix mat-icon-button aria-label=\"\" (click)=\"form.controls.contains.setValue(null)\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n <mat-form-field subscriptSizing=\"dynamic\">\n <mat-label>{{'Categories'|translate}}</mat-label>\n <mat-select formControlName=\"sections\" multiple>\n @for (c of sections; track c) {\n <mat-option [value]=\"c.type\">{{c.title}}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n @if(families.length) {\n <mat-form-field subscriptSizing=\"dynamic\">\n <mat-label>{{'Families'|translate}}</mat-label>\n <mat-select formControlName=\"family\">\n <mat-option>{{'All'|translate}}</mat-option>\n @for (f of families; track f) {\n <mat-option [value]=\"f\">{{f}}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n </form>\n</ng-template>\n", styles: [":host{outline:none}section h2{margin:10px}section .elements{display:flex;flex-wrap:wrap}section .elements .disabled{opacity:.5;background-color:transparent}section .add-element{border:2px dashed gray;min-width:126px;min-height:126px;border-radius:3px;margin:1px 0 6px;text-align:center}section .add-element button{top:50%;transform:translateY(-50%)}:host ::ng-deep .mat-mdc-card{margin:6px;display:flex;flex-direction:column}:host ::ng-deep .mat-mdc-card button{opacity:.1}:host ::ng-deep .mat-mdc-card:hover button{opacity:1}:host ::ng-deep .mat-mdc-card-header-text{width:100%}:host ::ng-deep .mat-mdc-card-title{display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;align-items:center}.divider{min-width:3px}:host ::ng-deep .mat-mdc-card-content{flex:1}\n"], dependencies: [{ kind: "directive", type: i8.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i9.NoneComponent, selector: "bizdoc-none", inputs: ["title", "subtitle", "icon"] }, { kind: "directive", type: i10.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i10.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "component", type: i11.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i11.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { kind: "directive", type: i11.MatCardContent, selector: "mat-card-content" }, { kind: "component", type: i11.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i11.MatCardSubtitle, selector: "mat-card-subtitle, [mat-card-subtitle], [matCardSubtitle]" }, { kind: "directive", type: i11.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { kind: "directive", type: i12.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "component", type: i13.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: i14.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "component", type: i12.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i15.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i15.MatLabel, selector: "mat-label" }, { kind: "directive", type: i15.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: i16.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i17.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: i18.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i19.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i20.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i20.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i20.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i21.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { kind: "pipe", type: i22.LocalizedStringPipe, name: "localizedString" }, { kind: "pipe", type: i23.FilterPipe, name: "filterBy" }, { kind: "pipe", type: i24.TranslatePipe, name: "translate" }], animations: [itemAnimation] }); }
|
315
347
|
};
|
316
348
|
ConfigurationDesignerComponent = __decorate([
|
317
349
|
BizDoc({ selector: 'bizdoc-configuration-designer' })
|
@@ -319,8 +351,11 @@ ConfigurationDesignerComponent = __decorate([
|
|
319
351
|
export { ConfigurationDesignerComponent };
|
320
352
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ConfigurationDesignerComponent, decorators: [{
|
321
353
|
type: Component,
|
322
|
-
args: [{ animations: [itemAnimation], host: { tabindex: '0' }, template: "<mat-toolbar>\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!dirty || loading || saving\" [bizdocTooltip]=\"'Save'|translate\"><mat-icon>save</mat-icon></button>\n <span class=\"divider\"></span>\n <button mat-icon-button (click)=\"
|
323
|
-
}], ctorParameters: () => [{ type: i1.PanesRouter }, { type: i2.
|
354
|
+
args: [{ animations: [itemAnimation], host: { tabindex: '0' }, template: "<mat-toolbar>\n <button mat-icon-button (click)=\"save()\" [disabled]=\"!dirty || loading || saving\" [bizdocTooltip]=\"'Save'|translate\"><mat-icon>save</mat-icon></button>\n <span class=\"divider\"></span>\n <button mat-icon-button (click)=\"filter($event)\" [bizdocTooltip]=\"'Filter'|translate\"><mat-icon>filter_list</mat-icon></button>\n</mat-toolbar>\n<mat-progress-bar [mode]=\"loading ? 'buffer' : 'indeterminate'\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\n@if (loading) {\n <bizdoc-none title=\"SettingThingsUp\" subtitle=\"PleaseWait\" icon=\"architecture\"></bizdoc-none>\n}\n<div>\n @for (s of sections | filterBy:'hide': false: searchBy; track s) {\n <section>\n <h2 class=\"mat-h1\">{{s.title}}</h2>\n <!--<hr />-->\n <div class=\"elements\" cdkDropList cdkDropListOrientation=\"horizontal\" [cdkDropListData]=\"s.elements\" (cdkDropListDropped)=\"drop($event)\">\n @for (e of s.elements | filterBy:'hide': false: searchBy; track e) {\n <mat-card [class.disabled]=\"e.disabled\" cdkDrag cdkDragRootElement=\".mat-mdc-card-title\">\n <!-- @item-->\n <mat-card-header>\n <mat-card-title>\n {{e.title|localizedString}}\n <span class=\"divider\"></span>\n @if (e.help) {\n <mat-icon [bizdocTooltip]=\"e.help\" [bizdocTooltipDuration]=\"6000\">help_outline</mat-icon>\n }\n </mat-card-title>\n <mat-card-subtitle>\n {{e.name}}\n </mat-card-subtitle>\n </mat-card-header>\n <mat-card-content>\n <ng-container *ngComponentOutlet=\"s.comp; injector: e.injector\"></ng-container>\n </mat-card-content>\n <mat-card-actions class=\"row\">\n @if (!e.copyOf) {\n <button mat-icon-button (click)=\"copy(s, e)\" [bizdocTooltip]=\"'Copy'|translate\"><mat-icon>file_copy</mat-icon></button>\n }\n @if (e.draft || e.empty) {\n <button mat-icon-button (click)=\"remove(s, e)\" [bizdocTooltip]=\"'Discard'|translate\"><mat-icon>delete</mat-icon></button>\n }\n <button mat-icon-button (click)=\"toggleDisabled(e)\" [bizdocTooltip]=\"(e.disabled ? 'Enable' : 'Disable')|translate\"><mat-icon>{{e.disabled ? 'visibility' : 'visibility_off'}}</mat-icon></button>\n <span class=\"divider\"></span>\n <button mat-icon-button (click)=\"edit(s, e)\" [bizdocTooltip]=\"'Settings'|translate\"><mat-icon>settings</mat-icon></button>\n </mat-card-actions>\n </mat-card>\n }\n @if (s.templates?.length) {\n <div class=\"add-element\" matRipple (click)=\"add(s, menuTrigger, $event)\">\n <span [matMenuTriggerFor]=\"templateMenu\" #menuTrigger=\"matMenuTrigger\"></span>\n <button mat-icon-button><mat-icon [bizdocTooltip]=\"'New'|translate\" disableRipple=\"true\">add</mat-icon></button>\n <mat-menu #templateMenu>\n @for (t of s.templates; track t) {\n <button mat-menu-item (click)=\"create(s, t)\">\n @if (t.family) {\n <span>\n {{t.family}}\n - \n </span>\n }\n <span>\n {{t.title}}\n </span>\n </button>\n }\n </mat-menu>\n </div>\n }\n </div>\n </section>\n }\n</div>\n<!-- search filters -->\n<ng-template #filters>\n <form autocomplete=\"off\" class=\"column gap\" [formGroup]=\"form\">\n <mat-form-field subscriptSizing=\"dynamic\">\n <input matInput formControlName=\"contains\" autocomplete=\"off\" placeholder=\"{{'Contains' | translate}}\" #contains>\n @if (form.value.contains) {\n <button matSuffix mat-icon-button aria-label=\"\" (click)=\"form.controls.contains.setValue(null)\">\n <mat-icon>close</mat-icon>\n </button>\n }\n </mat-form-field>\n <mat-form-field subscriptSizing=\"dynamic\">\n <mat-label>{{'Categories'|translate}}</mat-label>\n <mat-select formControlName=\"sections\" multiple>\n @for (c of sections; track c) {\n <mat-option [value]=\"c.type\">{{c.title}}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n @if(families.length) {\n <mat-form-field subscriptSizing=\"dynamic\">\n <mat-label>{{'Families'|translate}}</mat-label>\n <mat-select formControlName=\"family\">\n <mat-option>{{'All'|translate}}</mat-option>\n @for (f of families; track f) {\n <mat-option [value]=\"f\">{{f}}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n }\n </form>\n</ng-template>\n", styles: [":host{outline:none}section h2{margin:10px}section .elements{display:flex;flex-wrap:wrap}section .elements .disabled{opacity:.5;background-color:transparent}section .add-element{border:2px dashed gray;min-width:126px;min-height:126px;border-radius:3px;margin:1px 0 6px;text-align:center}section .add-element button{top:50%;transform:translateY(-50%)}:host ::ng-deep .mat-mdc-card{margin:6px;display:flex;flex-direction:column}:host ::ng-deep .mat-mdc-card button{opacity:.1}:host ::ng-deep .mat-mdc-card:hover button{opacity:1}:host ::ng-deep .mat-mdc-card-header-text{width:100%}:host ::ng-deep .mat-mdc-card-title{display:flex;-ms-flex-direction:row;-webkit-flex-direction:row;flex-direction:row;align-items:center}.divider{min-width:3px}:host ::ng-deep .mat-mdc-card-content{flex:1}\n"] }]
|
355
|
+
}], ctorParameters: () => [{ type: i1.PanesRouter }, { type: i2.FormBuilder }, { type: i3.TranslateService }, { type: i4.PromptService }, { type: i5.SessionService }, { type: i0.ElementRef }, { type: i0.Injector }, { type: i6.Popup }, { type: i7.UtilityRef }], propDecorators: { filters: [{
|
356
|
+
type: ViewChild,
|
357
|
+
args: ['filters', { read: TemplateRef }]
|
358
|
+
}], handleKeyboardEvent: [{
|
324
359
|
type: HostListener,
|
325
360
|
args: ['keydown', ['$event']]
|
326
361
|
}] } });
|
@@ -331,4 +366,4 @@ function extractString(str) {
|
|
331
366
|
for (var p in str)
|
332
367
|
return str[p];
|
333
368
|
}
|
334
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9hZG1pbi9hcmNoaXRlY3R1cmUvZGVzaWduZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9hZG1pbi9hcmNoaXRlY3R1cmUvZGVzaWduZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBZSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV0RSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxRQUFRLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFdEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRXRELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQU16RCxPQUFPLEVBQTZDLFdBQVcsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFjLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDMUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDdEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDcEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDaEUsT0FBTyxFQUFF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QUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDekgsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDN0osQ0FBQyxRQUNNLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsRUFBRTtRQUV6RSxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksRUFBRSxPQUFPLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUMzQyxXQUFXO1FBQ1gsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDekQsT0FBTyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFFNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7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UUFDckMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7SUFDcEIsQ0FBQztJQUNELElBQUk7UUFDRixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNuQixNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDdEssTUFBTSxLQUFLLEdBQUc7WUFDWixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUN2QixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNuQixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUN2QixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNuQixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNyQixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUN2QixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNuQixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNuQixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUN6QixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUNyQixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNuQixTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVMsQ0FBQztZQUMzQixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNuQixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNuQixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUN2QixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUN6QixVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQztTQUM5QixDQUFDO1FBQ0YsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQ2YsS0FBWSxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ3RCLElBQUksRUFBRSxHQUFHLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQy9CLEtBQUssQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ3pILElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO2dCQUNwQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQTtnQkFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN0QyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTtnQkFDYixJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQTtZQUNyQixDQUFDO1NBQ0YsQ0FBQyxDQUFDO1FBQ0wsU0FBUyxLQUFLLENBQUMsUUFBd0I7WUFDckMsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUN0QixNQUFNLE9BQU8sR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pCLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQztnQkFDeEIsT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFDO2dCQUN6QixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxTQUFTLEtBQUssQ0FBQyxHQUFHLFVBQTRCO1lBQzVDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMxRCxDQUFDO0lBQ0gsQ0FBQzs4R0F6UlUsOEJBQThCO2tHQUE5Qiw4QkFBOEIsd0pDNUMzQyw0akhBdUVBLGlwSkQvQmMsQ0FBQyxhQUFhLENBQUM7O0FBSWhCLDhCQUE4QjtJQUQxQyxNQUFNLENBQUMsRUFBRSxRQUFRLEVBQUUsK0JBQStCLEVBQUUsQ0FBQztHQUN6Qyw4QkFBOEIsQ0EwUjFDOzsyRkExUlksOEJBQThCO2tCQVAxQyxTQUFTO2lDQUdJLENBQUMsYUFBYSxDQUFDLFFBQ3JCLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRTtpUEFrRnZCLG1CQUFtQjtzQkFEbEIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUM7O0FBcU5yQyxTQUFTLGFBQWEsQ0FBQyxHQUFvQjtJQUN6QyxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUM7UUFBRSxPQUFPLEdBQUcsQ0FBQzs7UUFDekIsS0FBSyxJQUFJLENBQUMsSUFBSSxHQUFHO1lBQUUsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENka0RyYWdEcm9wLCBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2RyYWctZHJvcFwiO1xyXG5pbXBvcnQgeyBDb21wb25lbnRUeXBlIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9wb3J0YWxcIjtcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIsIEluamVjdG9yLCBPbkluaXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBNYXRNZW51VHJpZ2dlciB9IGZyb20gXCJAYW5ndWxhci9tYXRlcmlhbC9tZW51XCI7XHJcbmltcG9ydCB7IGl0ZW1BbmltYXRpb24gfSBmcm9tIFwiLi4vLi4vY29yZS9hbmltYXRpb25zXCI7XHJcbmltcG9ydCB7IFV0aWxpdHlDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29yZS9iYXNlXCI7XHJcbmltcG9ydCB7IE9wZW5Qb2xpY3kgfSBmcm9tIFwiLi4vLi4vY29yZS9jb25maWd1cmF0aW9uXCI7XHJcbmltcG9ydCB7IEJpekRvYyB9IGZyb20gXCIuLi8uLi9jb3JlL2RlY29yYXRvcnNcIjtcclxuaW1wb3J0IHsgY2xlYW51cCwgaXNTdHJpbmcgfSBmcm9tIFwiLi4vLi4vY29yZS9mdW5jdGlvbnNcIjtcclxuaW1wb3J0IHsgUHJvbXB0U2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL3Byb21wdC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFNlc3Npb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvc2Vzc2lvbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFBhbmVzUm91dGVyIH0gZnJvbSBcIi4uLy4uL2NvcmUvc2xvdHMvcm91dGVyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL3RyYW5zbGF0ZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFV0aWxpdHlSZWYgfSBmcm9tIFwiLi4vdXRpbGl0eS1yZWZcIjtcclxuaW1wb3J0IHsgRWxlbWVudE1vZGVsLCBEZXNpZ25lck1vZGVsLCBUZW1wbGF0ZUluZm8sIHByb2dyYW1OYW1lLCBEZXNpZ25lclJlZiwgY2xvbmUsIERlc2lnbk1vZGUgfSBmcm9tIFwiLi9kZWNsYXJhdGlvbnNcIjtcclxuaW1wb3J0IHsgRGVzaWduZXJUeXBlRWxlbWVudENvbXBvbmVudCB9IGZyb20gXCIuL2Rlc2lnbmVyLmJhc2VcIjtcclxuaW1wb3J0IHsgQWN0aW9uRGVzaWduZXJDb21wb25lbnQgfSBmcm9tIFwiLi9lbGVtZW50cy9hY3Rpb24uY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEF0dHJpYnV0ZURlc2lnbkNvbXBvbmVudCB9IGZyb20gXCIuL2VsZW1lbnRzL2F0dHJpYnV0ZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgQ29udHJvbERlc2lnbkNvbXBvbmVudCB9IGZyb20gXCIuL2VsZW1lbnRzL2NvbnRyb2wuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEN1YmVEZXNpZ25Db21wb25lbnQgfSBmcm9tIFwiLi9lbGVtZW50cy9jdWJlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBGb2xkZXJEZXNpZ25Db21wb25lbnQgfSBmcm9tIFwiLi9lbGVtZW50cy9mb2xkZXIuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEZvcm1EZXNpZ25Db21wb25lbnQgfSBmcm9tIFwiLi9lbGVtZW50cy9mb3JtLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBHdWlkZURlc2lnbkNvbXBvbmVudCB9IGZyb20gXCIuL2VsZW1lbnRzL2d1aWRlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBOb2RlRGVzaWduZXJDb21wb25lbnQgfSBmcm9tIFwiLi9lbGVtZW50cy9ub2RlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBQb2xpY3lEZXNpZ25Db21wb25lbnQgfSBmcm9tIFwiLi9lbGVtZW50cy9wb2xpY3kuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFJlcG9ydERlc2lnbmVyQ29tcG9uZW50IH0gZnJvbSBcIi4vZWxlbWVudHMvcmVwb3J0LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBSb2xlRGVzaWduQ29tcG9uZW50IH0gZnJvbSBcIi4vZWxlbWVudHMvcm9sZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgUnVsZURlc2lnbkNvbXBvbmVudCB9IGZyb20gXCIuL2VsZW1lbnRzL3J1bGUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFN0YXRlRGVzaWduQ29tcG9uZW50IH0gZnJvbSBcIi4vZWxlbWVudHMvc3RhdGUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFR5cGVEZXNpZ25Db21wb25lbnQgfSBmcm9tIFwiLi9lbGVtZW50cy90eXBlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBVdGlsaXR5RGVzaWduQ29tcG9uZW50IH0gZnJvbSBcIi4vZWxlbWVudHMvdXRpbGl0eS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgVmlld0Rlc2lnbkNvbXBvbmVudCB9IGZyb20gXCIuL2VsZW1lbnRzL3ZpZXcuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFdpZGdldERlc2lnbkNvbXBvbmVudCB9IGZyb20gXCIuL2VsZW1lbnRzL3dpZGdldC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgSm9iRGVzaWduQ29tcG9uZW50IH0gZnJvbSBcIi4vZWxlbWVudHMvam9iLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBTb3VyY2VEZXNpZ25Db21wb25lbnQgfSBmcm9tIFwiLi9lbGVtZW50cy9zb3VyY2UuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IExvY2FsaXplZFN0cmluZyB9IGZyb20gXCIuLi8uLi9jb3JlL21vZGVsc1wiO1xyXG4vKiogKi9cclxuQENvbXBvbmVudCh7XHJcbiAgdGVtcGxhdGVVcmw6ICdkZXNpZ25lci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJ2Rlc2lnbmVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgYW5pbWF0aW9uczogW2l0ZW1BbmltYXRpb25dLFxyXG4gIGhvc3Q6IHsgdGFiaW5kZXg6ICcwJyB9XHJcbn0pXHJcbkBCaXpEb2MoeyBzZWxlY3RvcjogJ2JpemRvYy1jb25maWd1cmF0aW9uLWRlc2lnbmVyJyB9KVxyXG5leHBvcnQgY2xhc3MgQ29uZmlndXJhdGlvbkRlc2lnbmVyQ29tcG9uZW50IGltcGxlbWVudHMgVXRpbGl0eUNvbXBvbmVudCwgT25Jbml0IHtcclxuICBzZWFyY2hCeTogc3RyaW5nO1xyXG4gIHByaXZhdGUgX3NlYXJjaEJ5OiBzdHJpbmc7XHJcbiAgbG9hZGluZyA9IHRydWU7XHJcbiAgc2F2aW5nID0gZmFsc2U7XHJcbiAgZGlydHkgPSBmYWxzZTtcclxuICBtb2RlbDogRGVzaWduZXJNb2RlbDtcclxuICBwcml2YXRlIF90eXBpbmdUaW1lcjogYW55O1xyXG4gIHByaXZhdGUgX2NsZWFyVGltZXI6IGFueTtcclxuICBzZWN0aW9uczogU2VjdGlvbltdO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfcGFuZXM6IFBhbmVzUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfcHM6IFByb21wdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zZXNzaW9uOiBTZXNzaW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX2VsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+LFxyXG4gICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yLFxyXG4gICAgcHJpdmF0ZSBfcmVmOiBVdGlsaXR5UmVmPGJvb2xlYW4sIERlc2lnbmVyTW9kZWwsIERlc2lnbmVyTW9kZWw+KSB7IH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3JlZi5wb3B1bGF0ZSgpLnN1YnNjcmliZShyID0+IHtcclxuICAgICAgdGhpcy5tb2RlbCA9IHI7XHJcbiAgICAgIHRoaXMuc2VjdGlvbnMgPSBbXHJcbiAgICAgICAgeyBlbGVtZW50czogci5mb3JtcywgdHlwZTogJ0Zvcm1zJywgY29tcDogRm9ybURlc2lnbkNvbXBvbmVudCwgdGVtcGxhdGVzOiByLnRGb3JtcyB9LFxyXG4gICAgICAgIHsgZWxlbWVudHM6IHIuYWN0aW9ucywgdHlwZTogJ0FjdGlvbnMnLCBjb21wOiBBY3Rpb25EZXNpZ25lckNvbXBvbmVudCwgdGVtcGxhdGVzOiByLnRBY3Rpb25zIH0sXHJcbiAgICAgICAgeyBlbGVtZW50czogci5yZXBvcnRzLCB0eXBlOiAnUmVwb3J0cycsIGNvbXA6IFJlcG9ydERlc2lnbmVyQ29tcG9uZW50LCB0ZW1wbGF0ZXM6IHIudFJlcG9ydHMgfSxcclxuICAgICAgICB7IGVsZW1lbnRzOiByLndpZGdldHMsIHR5cGU6ICdXaWRnZXRzJywgY29tcDogV2lkZ2V0RGVzaWduQ29tcG9uZW50LCB0ZW1wbGF0ZXM6IHIudFdpZGdldHMgfSxcclxuICAgICAgICB7IGVsZW1lbnRzOiByLnZpZXdzLCB0eXBlOiAnVmlld3MnLCBjb21wOiBWaWV3RGVzaWduQ29tcG9uZW50LCB0ZW1wbGF0ZXM6IHIudFZpZXdzIH0sXHJcbiAgICAgICAgeyBlbGVtZW50czogci5ndWlkZXMsIHR5cGU6ICdHdWlkZXMnLCBjb21wOiBHdWlkZURlc2lnbkNvbXBvbmVudCwgdGVtcGxhdGVzOiBbeyB0aXRsZTogdGhpcy5fdHJhbnNsYXRlLmdldCgnR3VpZGUnKSB9XSB9LFxyXG4gICAgICAgIHsgZWxlbWVudHM6IHIuY3ViZXMsIHR5cGU6ICdDdWJlcycsIGNvbXA6IEN1YmVEZXNpZ25Db21wb25lbnQsIHRlbXBsYXRlczogci50Q3ViZXMgfSxcclxuICAgICAgICAvL3sgZWxlbWVudHM6IHIuam9icywgdHlwZTogJ0pvYnMnLCBjb21wOiBKb2JEZXNpZ25Db21wb25lbnQsIHRlbXBsYXRlczogW10gfSxcclxuICAgICAgICB7IGVsZW1lbnRzOiByLnNvdXJjZXMsIHR5cGU6ICdTb3VyY2VzJywgY29tcDogU291cmNlRGVzaWduQ29tcG9uZW50LCB0ZW1wbGF0ZXM6IFtdIH0sXHJcbiAgICAgICAgeyBlbGVtZW50czogci5mb2xkZXJzLCB0eXBlOiAnRm9sZGVycycsIGNvbXA6IEZvbGRlckRlc2lnbkNvbXBvbmVudCwgdGVtcGxhdGVzOiBbeyB0aXRsZTogdGhpcy5fdHJhbnNsYXRlLmdldCgnRm9sZGVyJykgfV0gfSxcclxuICAgICAgICB7IGVsZW1lbnRzOiByLnJvbGVzLCB0eXBlOiAnUm9sZXMnLCBjb21wOiBSb2xlRGVzaWduQ29tcG9uZW50LCB0ZW1wbGF0ZXM6IFt7IHRpdGxlOiB0aGlzLl90cmFuc2xhdGUuZ2V0KCdSb2xlJykgfV0gfSxcclxuICAgICAgICB7IGVsZW1lbnRzOiByLnN0YXRlcywgdHlwZTogJ1N0YXRlcycsIGNvbXA6IFN0YXRlRGVzaWduQ29tcG9uZW50LCB0ZW1wbGF0ZXM6IFt7IHRpdGxlOiB0aGlzLl90cmFuc2xhdGUuZ2V0KCdTdGF0ZScpIH1dIH0sXHJcbiAgICAgICAgeyBlbGVtZW50czogci51dGlsaXRpZXMsIHR5cGU6ICdUb29scycsIGNvbXA6IFV0aWxpdHlEZXNpZ25Db21wb25lbnQsIHRlbXBsYXRlczogci50VXRpbGl0aWVzIH0sXHJcbiAgICAgICAgeyBlbGVtZW50czogci50eXBlcywgdHlwZTogJ1R5cGVzJywgY29tcDogVHlwZURlc2lnbkNvbXBvbmVudCwgdGVtcGxhdGVzOiByLnRUeXBlcyB9LFxyXG4gICAgICAgIHsgZWxlbWVudHM6IHIubm9kZXMsIHR5cGU6ICdOb2RlcycsIGNvbXA6IE5vZGVEZXNpZ25lckNvbXBvbmVudCwgdGVtcGxhdGVzOiByLnROb2RlcyB9LFxyXG4gICAgICAgIHsgZWxlbWVudHM6IHIuYXR0cmlidXRlcywgdHlwZTogJ0F0dHJpYnV0ZXMnLCBjb21wOiBBdHRyaWJ1dGVEZXNpZ25Db21wb25lbnQsIHRlbXBsYXRlczogci50QXR0cmlidXRlcyB9LFxyXG4gICAgICAgIHsgZWxlbWVudHM6IHIucG9saWNpZXMsIHR5cGU6ICdQb2xpY2llcycsIGNvbXA6IFBvbGljeURlc2lnbkNvbXBvbmVudCwgdGVtcGxhdGVzOiByLnRQb2xpY2llcyB9LFxyXG4gICAgICAgIHsgZWxlbWVudHM6IHIuY29udHJvbHMsIHR5cGU6ICdDb250cm9scycsIGNvbXA6IENvbnRyb2xEZXNpZ25Db21wb25lbnQsIHRlbXBsYXRlczogW10gfSxcclxuICAgICAgICB7IGVsZW1lbnRzOiByLnJ1bGVzLCB0eXBlOiAnUnVsZXMnLCBjb21wOiBSdWxlRGVzaWduQ29tcG9uZW50LCB0ZW1wbGF0ZXM6IHIudFJ1bGVzIH0sXHJcbiAgICAgIF07XHJcbiAgICAgIHRoaXMuc2VjdGlvbnMuZm9yRWFjaChzID0+IHtcclxuICAgICAgICBzLmhpZGUgPSBmYWxzZTtcclxuICAgICAgICBzLnRpdGxlID0gdGhpcy5fdHJhbnNsYXRlLmdldChzLnR5cGUpO1xyXG4gICAgICAgIHMuZWxlbWVudHMuZm9yRWFjaChlID0+IHtcclxuICAgICAgICAgIGlmICghZS5vcHRpb25zKSBlLm9wdGlvbnMgPSB7fTtcclxuICAgICAgICAgIGUuaGlkZSA9IGZhbHNlO1xyXG4gICAgICAgICAgZS5pbmplY3RvciA9IHRoaXMuX2NyZWF0ZUluamVjdG9yKGUsICd3aWRnZXQnKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfSk7XHJcbiAgICAvLyB0eXBpbmcga2V5ZG93biBsaXN0ZW5lclxyXG4gICAgdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgfVxyXG4gIGRyb3AoZXZlbnQ6IENka0RyYWdEcm9wPEVsZW1lbnRNb2RlbFtdPikge1xyXG4gICAgY29uc3QgcmFuZ2UgPSBldmVudC5jb250YWluZXIuZGF0YS5zbGljZShcclxuICAgICAgTWF0aC5taW4oZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KSxcclxuICAgICAgTWF0aC5tYXgoZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KVxyXG4gICAgKSwgZmlsZSA9IHJhbmdlWzBdLmNvbmZpZ3VyYXRpb25GaWxlO1xyXG4gICAgaWZcclxuICAgICAgLy8gYWNyb3NzIGZpbGVzXHJcbiAgICAgIChyYW5nZS5zbGljZSgxKS5zb21lKGUgPT4gZS5jb25maWd1cmF0aW9uRmlsZSAhPT0gZmlsZSkpIHtcclxuICAgICAgLy8gc3RhcnQgb3JkaW5hbFxyXG4gICAgICBsZXQgaSA9IGV2ZW50LmNvbnRhaW5lci5kYXRhW2V2ZW50LmN1cnJlbnRJbmRleF0ub3JkaW5hbCB8fCAtMTtcclxuICAgICAgLy8gc2V0IG9yZGluYWwgdG8gaXRlbXMgaW4gcmFuZ2VcclxuICAgICAgcmFuZ2UuZm9yRWFjaChlID0+IGUub3JkaW5hbCA9IGkrKyk7XHJcbiAgICAgIC8vIGluY3JlYXNlIG90aGVyIGhpZ2hlciB0aGFuIGxhc3QgaW4gcmFuZ2VcclxuICAgICAgZXZlbnQuY29udGFpbmVyLmRhdGEuZmlsdGVyKGUgPT4gZS5vcmRpbmFsICYmIGUub3JkaW5hbCA+IGkpLmZvckVhY2goZSA9PiBlLm9yZGluYWwgKz0gMSk7XHJcbiAgICB9IGVsc2UgLy8gbmF0aXZlIG9yZGVyIGluIGNvbGxlY3Rpb25cclxuICAgICAgcmFuZ2UuZm9yRWFjaChlID0+IGUub3JkaW5hbCA9IG51bGwpO1xyXG4gICAgbW92ZUl0ZW1JbkFycmF5KGV2ZW50LmNvbnRhaW5lci5kYXRhLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDdHJsLXMgc2F2ZSwgc2VhcmNoXHJcbiAgICogQHBhcmFtIGV2ZW50XHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlS2V5Ym9hcmRFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgaWYgKGV2ZW50LmN0cmxLZXkgJiYgKGV2ZW50LmtleSA9PT0gJ1MnIHx8IGV2ZW50LmtleSA9PT0gJ3MnKSkge1xyXG4gICAgICB0aGlzLmRpcnR5ICYmIHRoaXMuc2F2ZSgpO1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5fc2VhcmNoQnkgJiYgZXZlbnQua2V5ID09PSAnRXNjYXBlJykgdGhpcy5jbGVhclNlYXJjaCgpO1xyXG4gICAgZWxzZSBpZiAoZXZlbnQuY29kZS5zdGFydHNXaXRoKCdLZXknKSB8fCBldmVudC5rZXkgPT0gJ1NwYWNlJykge1xyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fdHlwaW5nVGltZXIpO1xyXG4gICAgICB0aGlzLl9zZWFyY2hCeSA9IHRoaXMuX3NlYXJjaEJ5ID8gdGhpcy5fc2VhcmNoQnkgKyBldmVudC5rZXkudG9Mb3dlckNhc2UoKSA6IGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICB0aGlzLl90eXBpbmdUaW1lciA9IHNldFRpbWVvdXQoKCkgPT5cclxuICAgICAgICB0aGlzLl9maWx0ZXIodGhpcy5fc2VhcmNoQnkpLCAxNTApO1xyXG4gICAgfVxyXG4gIH1cclxuICBjbGVhclNlYXJjaCgpIHtcclxuICAgIGNsZWFyVGltZW91dCh0aGlzLl90eXBpbmdUaW1lcik7XHJcbiAgICB0aGlzLnNlY3Rpb25zLmZvckVhY2gocyA9PiB7XHJcbiAgICAgIHMuaGlkZSA9IGZhbHNlO1xyXG4gICAgICBzLmVsZW1lbnRzLmZvckVhY2goZSA9PiBlLmhpZGUgPSBmYWxzZSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX3NlYXJjaEJ5ID0gbnVsbDtcclxuICAgIHRoaXMuc2VhcmNoQnkgPSBudWxsO1xyXG4gIH1cclxuICBwcml2YXRlIF9maWx0ZXIodmFsdWUpIHtcclxuICAgIHRoaXMuc2VjdGlvbnMuZm9yRWFjaChzID0+IHtcclxuICAgICAgbGV0IG5vbmUgPSB0cnVlO1xyXG4gICAgICBzLmVsZW1lbnRzLlxyXG4gICAgICAgIGZvckVhY2goZSA9PiB7XHJcbiAgICAgICAgICBpZiAoKGV4dHJhY3RTdHJpbmcoZS50aXRsZSkgfHwgZS5uYW1lKS50b0xvd2VyQ2FzZSgpLlxyXG4gICAgICAgICAgICBpbmRleE9mKHZhbHVlKSA+IC0xKSB7XHJcbiAgICAgICAgICAgIGUuaGlkZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBub25lID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIGUuaGlkZSA9IHRydWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIGlmIChub25lKSB7XHJcbiAgICAgICAgaWYgKHMudGl0bGUudG9Mb3dlckNhc2UoKS5pbmRleE9mKHZhbHVlKSA+IC0xKSB7XHJcbiAgICAgICAgICBzLmVsZW1lbnRzLlxyXG4gICAgICAgICAgICBmb3JFYWNoKGUgPT4gZS5oaWRlID0gZmFsc2UpO1xyXG5cclxuICAgICAgICAgIHMuaGlkZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlXHJcbiAgICAgICAgICBzLmhpZGUgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2VcclxuICAgICAgICBzLmhpZGUgPSBmYWxzZTtcclxuXHJcbiAgICB9KTtcclxuICAgIHRoaXMuc2VhcmNoQnkgPSB2YWx1ZTtcclxuICAgIC8vdGhpcy5fdHlwaW5nVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX3NlYXJjaEJ5ID0gbnVsbCwgNDAwMCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBzZWN0aW9uXHJcbiAgICogQHBhcmFtIGVsZW1lbnRcclxuICAgKiBAcGFyYW0gcG9zaXRpb25cclxuICAgKi9cclxuICBwcml2YXRlIF9pbnNlcnQoc2VjdGlvbjogU2VjdGlvbiwgZWxlbWVudDogRWxlbWVudE1vZGVsLCBwb3NpdGlvbjogbnVtYmVyKSB7XHJcbiAgICAvLyByZXNvbHZlIG5hbWUgJiB0aXRsZVxyXG4gICAgbGV0IGkgPSBlbGVtZW50Lm5hbWUubGFzdEluZGV4T2YoJ18nKSxcclxuICAgICAgaiA9IChleHRyYWN0U3RyaW5nKGVsZW1lbnQudGl0bGUpKS5sYXN0SW5kZXhPZignICcpLFxyXG4gICAgICBuID0gMCwgbmFtZSwgdGl0bGU7XHJcbiAgICBkbyB7XHJcbiAgICAgIG4rKztcclxuICAgICAgbmFtZSA9IChpIDwgMCB8fCBpc05hTihwYXJzZUludChlbGVtZW50Lm5hbWUuc3Vic3RyaW5nKGkgKyAxKSkpID8gZWxlbWVudC5uYW1lIDogZWxlbWVudC5uYW1lLnN1YnN0cmluZygwLCBpKSkgKyAnXycgKyBuO1xyXG4gICAgICB0aXRsZSA9IChqIDwgMCB8fCBpc05hTihwYXJzZUludChleHRyYWN0U3RyaW5nKGVsZW1lbnQudGl0bGUpLnN1YnN0cmluZyhqICsgMSkpKSA/IGVsZW1lbnQudGl0bGUgOiBleHRyYWN0U3RyaW5nKGVsZW1lbnQudGl0bGUpLnN1YnN0cmluZygwLCBqKSkgKyAnICcgKyBuO1xyXG4gICAgfVxyXG4gICAgd2hpbGUgKHNlY3Rpb24uZWxlbWVudHMuZmluZChlID0+IGUubmFtZSA9PT0gbmFtZSB8fCBlLnRpdGxlID09PSB0aXRsZSkpO1xyXG5cclxuICAgIGVsZW1lbnQubmFtZSA9IG5hbWUsIGVsZW1lbnQudGl0bGUgPSB0aXRsZTtcclxuICAgIC8vIGluamVjdG9yXHJcbiAgICBjb25zdCBpbmplY3RvciA9IHRoaXMuX2NyZWF0ZUluamVjdG9yKGVsZW1lbnQsICd3aWRnZXQnKTtcclxuICAgIGVsZW1lbnQuaW5qZWN0b3IgPSBpbmplY3RvcjtcclxuXHJcbiAgICB0aGlzLl9vcGVuKGVsZW1lbnQsIHNlY3Rpb24sICdhZGQnKS50aGVuKCgpID0+IHtcclxuICAgICAgLy8gYWRkIHRvIGFycmF5XHJcbiAgICAgIHNlY3Rpb24uZWxlbWVudHMuc3BsaWNlKHBvc2l0aW9uICsgMSwgMCwgZWxlbWVudCk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfb3BlbihlbGVtZW50OiBFbGVtZW50TW9kZWwsXHJcbiAgICBzZWN0aW9uOiBTZWN0aW9uLFxyXG4gICAgbW9kZTogRGVzaWduTW9kZSkge1xyXG4gICAgbGV0IGVjbG9uZSA9IHsgLi4uZWxlbWVudCB9O1xyXG4gICAgZGVsZXRlIGVjbG9uZS5pbmplY3RvcjtcclxuICAgIGVjbG9uZSA9IGNsb25lKGVjbG9uZSk7IC8vIGRlZXBcclxuICAgIGNvbnN0IGluamVjdG9yID0gdGhpcy5fY3JlYXRlSW5qZWN0b3IoZWNsb25lLCBtb2RlKTtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxyXG4gICAgICB0aGlzLl9wYW5lcy5uYXZpZ2F0ZTxEZXNpZ25lclR5cGVFbGVtZW50Q29tcG9uZW50PihzZWN0aW9uLmNvbXAsIHtcclxuICAgICAgICBwb2xpY3k6IG1vZGUgPT09ICdhZGQnID8gT3BlblBvbGljeS5EaWFsb2cgfCBPcGVuUG9saWN5LlN0cmV0Y2ggOlxyXG4gICAgICAgICAgT3BlblBvbGljeS5UYWIgfCBPcGVuUG9saWN5LlRvZ2dsZSB8IE9wZW5Qb2xpY3kuRGVmZXIsXHJcbiAgICAgICAgZ3JvdXA6IHRoaXMuX3RyYW5zbGF0ZS5nZXQoc2VjdGlvbi50aXRsZSksXHJcbiAgICAgICAgLy90aXRsZSxcclxuICAgICAgICBpbmplY3RvcjogaW5qZWN0b3JcclxuICAgICAgfSkudGhlbihwYW5lID0+IHtcclxuICAgICAgICBwYW5lLmluc3RhbmNlLmRlc2lnbmVyLm9uU2F2ZS5zdWJzY3JpYmUoZWwgPT4ge1xyXG4gICAgICAgICAgaWYgKGVsKSB7XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudCwgZWwpO1xyXG4gICAgICAgICAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmVzb2x2ZShlbCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHJlamVjdCgpO1xyXG4gICAgICAgICAgcGFuZS5jbG9zZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHBhbmUuY2xvc2VkKCkuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpKTtcclxuICAgICAgfSkpO1xyXG4gIH1cclxuICBwcml2YXRlIF9jcmVhdGVJbmplY3RvcihlbGVtZW50OiBFbGVtZW50TW9kZWw8YW55PiwgbW9kZTogRGVzaWduTW9kZSkge1xyXG4gICAgY29uc3QgcmVmID0gbmV3IERlc2lnbmVyUmVmKHRoaXMubW9kZWwsIGVsZW1lbnQsIG1vZGUpO1xyXG5cclxuICAgIGNvbnN0IGluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcclxuICAgICAgcHJvdmlkZXJzOiBbe1xyXG4gICAgICAgIHByb3ZpZGU6IERlc2lnbmVyUmVmLCB1c2VWYWx1ZTogcmVmXHJcbiAgICAgIH1dLCBwYXJlbnQ6IHRoaXMuX2luamVjdG9yXHJcbiAgICB9KTtcclxuICAgIHJldHVybiBpbmplY3RvcjtcclxuICB9XHJcbiAgYWRkKHNlY3Rpb246IFNlY3Rpb24sIG1lbnU6IE1hdE1lbnVUcmlnZ2VyLCBldnQ6IEV2ZW50KSB7XHJcbiAgICBpZiAoc2VjdGlvbi50ZW1wbGF0ZXMubGVuZ3RoID4gMSlcclxuICAgICAgbWVudS5vcGVuTWVudSgpO1xyXG4gICAgZWxzZVxyXG4gICAgICB0aGlzLmNyZWF0ZShzZWN0aW9uLCBzZWN0aW9uLnRlbXBsYXRlc1swXSk7XHJcbiAgICBldnQucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcbiAgY3JlYXRlKHNlY3Rpb246IFNlY3Rpb24sIHRlbXBsYXRlOiBUZW1wbGF0ZUluZm8pIHtcclxuICAgIGNvbnN0IGVsZW1lbnQgPSB7XHJcbiAgICAgIC4uLnRlbXBsYXRlLFxyXG4gICAgICBuYW1lOiBwcm9ncmFtTmFtZSh0ZW1wbGF0ZS5rZXkgfHwgdGVtcGxhdGUudGl0bGUpLFxyXG4gICAgICBkcmFmdDogdHJ1ZSxcclxuICAgICAgaGlkZTogZmFsc2UsXHJcbiAgICAgIG9wdGlvbnM6IHt9XHJcbiAgICB9IGFzIEVsZW1lbnRNb2RlbDtcclxuICAgIHRoaXMuX2luc2VydChzZWN0aW9uLCBlbGVtZW50LCBzZWN0aW9uLmVsZW1lbnRzLmxlbmd0aCk7XHJcbiAgfVxyXG4gIHJlbW92ZShzZWN0aW9uOiBTZWN0aW9uLCBlbGVtZW50OiBFbGVtZW50TW9kZWwpIHtcclxuICAgIHNlY3Rpb24uZWxlbWVudHMucmVtb3ZlKGVsZW1lbnQpO1xyXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgfVxyXG4gIGNvcHkoc2VjdGlvbjogU2VjdGlvbiwgZWxlbWVudDogRWxlbWVudE1vZGVsKSB7XHJcbiAgICBsZXQgZWNsb25lID0ge1xyXG4gICAgICAuLi5lbGVtZW50LFxyXG4gICAgICBjb3B5T2Y6IGVsZW1lbnQubmFtZSxcclxuICAgICAgZHJhZnQ6IHRydWVcclxuICAgIH07XHJcbiAgICBkZWxldGUgZWNsb25lLmluamVjdG9yO1xyXG4gICAgZGVsZXRlIGVjbG9uZS5yZXNvdXJjZVR5cGU7XHJcbiAgICBlY2xvbmUgPSBjbG9uZShlY2xvbmUpOyAvLyBkZWVwXHJcbiAgICB0aGlzLl9pbnNlcnQoc2VjdGlvbiwgZWNsb25lLCBzZWN0aW9uLmVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCkpO1xyXG4gIH1cclxuICBlZGl0KHNlY3Rpb246IFNlY3Rpb24sIGVsZW1lbnQ6IEVsZW1lbnRNb2RlbCkge1xyXG4gICAgdGhpcy5fb3BlbihlbGVtZW50LCBzZWN0aW9uLCAnZWRpdCcpO1xyXG4gIH1cclxuICB0b2dnbGVEaXNhYmxlZChlbGVtZW50OiBFbGVtZW50TW9kZWwpIHtcclxuICAgIGVsZW1lbnQuZGlzYWJsZWQgPSAhZWxlbWVudC5kaXNhYmxlZDtcclxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gIH1cclxuICBzYXZlKCkge1xyXG4gICAgdGhpcy5zYXZpbmcgPSB0cnVlO1xyXG4gICAgY29uc3QgeyBjb250cm9scywgYXR0cmlidXRlcywgcG9saWNpZXMsIGFjdGlvbnMsIGN1YmVzLCBmb2xkZXJzLCBmb3JtcywgZ3VpZGVzLCByZXBvcnRzLCByb2xlcywgcnVsZXMsIHN0YXRlcywgdHlwZXMsIHV0aWxpdGllcywgdmlld3MsIHdpZGdldHMsIG5vZGVzIH0gPSB0aGlzLm1vZGVsO1xyXG4gICAgY29uc3QgbW9kZWwgPSB7XHJcbiAgICAgIGFjdGlvbnM6IHN0cmlwKGFjdGlvbnMpLFxyXG4gICAgICBjdWJlczogc3RyaXAoY3ViZXMpLFxyXG4gICAgICBmb2xkZXJzOiBzdHJpcChmb2xkZXJzKSxcclxuICAgICAgZm9ybXM6IHN0cmlwKGZvcm1zKSxcclxuICAgICAgZ3VpZGVzOiBzdHJpcChndWlkZXMpLFxyXG4gICAgICByZXBvcnRzOiBzdHJpcChyZXBvcnRzKSxcclxuICAgICAgcm9sZXM6IHN0cmlwKHJvbGVzKSxcclxuICAgICAgcnVsZXM6IHN0cmlwKHJ1bGVzKSxcclxuICAgICAgcG9saWNpZXM6IHN0cmlwKHBvbGljaWVzKSxcclxuICAgICAgc3RhdGVzOiBzdHJpcChzdGF0ZXMpLFxyXG4gICAgICB0eXBlczogc3RyaXAodHlwZXMpLFxyXG4gICAgICB1dGlsaXRpZXM6IHN0cmlwKHV0aWxpdGllcyksXHJcbiAgICAgIHZpZXdzOiBzdHJpcCh2aWV3cyksXHJcbiAgICAgIG5vZGVzOiBzdHJpcChub2RlcyksXHJcbiAgICAgIHdpZGdldHM6IHN0cmlwKHdpZGdldHMpLFxyXG4gICAgICBjb250cm9sczogc3RyaXAoY29udHJvbHMpLFxyXG4gICAgICBhdHRyaWJ1dGVzOiBzdHJpcChhdHRyaWJ1dGVzKVxyXG4gICAgfTtcclxuICAgIHRoaXMuX3JlZi5leGVjdXRlKFxyXG4gICAgICBtb2RlbCBhcyBhbnkpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5fcHMudG9hc3QoJ0NoYW5nZXNTYXZlZCcpO1xyXG4gICAgICAgICAgYXBwbHkocG9saWNpZXMsIGFjdGlvbnMsIGN1YmVzLCBmb2xkZXJzLCBmb3JtcywgZ3VpZGVzLCByZXBvcnRzLCByb2xlcywgcnVsZXMsIHN0YXRlcywgdHlwZXMsIHV0aWxpdGllcywgdmlld3MsIHdpZGdldHMpO1xyXG4gICAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuZGlydHkgPSBmYWxzZVxyXG4gICAgICAgICAgdGhpcy5fc2Vzc2lvbi5yZWZyZXNoKCkuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgfSwgZXJyb3I6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX3BzLmVycm9yKCk7XHJcbiAgICAgICAgICB0aGlzLnNhdmluZyA9IGZhbHNlXHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIGZ1bmN0aW9uIHN0cmlwKGVsZW1lbnRzOiBFbGVtZW50TW9kZWxbXSkge1xyXG4gICAgICByZXR1cm4gZWxlbWVudHMubWFwKGUgPT4ge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB7IC4uLmUgfTtcclxuICAgICAgICBkZWxldGUgZWxlbWVudC5pbmplY3RvcjtcclxuICAgICAgICBkZWxldGUgZWxlbWVudC5hcmd1bWVudHM7XHJcbiAgICAgICAgcmV0dXJuIGNsZWFudXAoZWxlbWVudCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gYXBwbHkoLi4uY29sbGVjdGlvbjogRWxlbWVudE1vZGVsW11bXSkge1xyXG4gICAgICBjb2xsZWN0aW9uLmZvckVhY2gocyA9PiBzLmZvckVhY2goZSA9PiBkZWxldGUgZS5kcmFmdCkpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5pbnRlcmZhY2UgU2VjdGlvbiB7XHJcbiAgY29tcDogQ29tcG9uZW50VHlwZTxhbnk+O1xyXG4gIHR5cGU6IHN0cmluZztcclxuICB0aXRsZT86IHN0cmluZztcclxuICBlbGVtZW50czogRWxlbWVudE1vZGVsW107XHJcbiAgdGVtcGxhdGVzOiBUZW1wbGF0ZUluZm9bXTtcclxuICBoaWRlPzogYm9vbGVhbjtcclxufVxyXG5mdW5jdGlvbiBleHRyYWN0U3RyaW5nKHN0cjogTG9jYWxpemVkU3RyaW5nKSB7XHJcbiAgaWYgKGlzU3RyaW5nKHN0cikpIHJldHVybiBzdHI7XHJcbiAgZWxzZSBmb3IgKHZhciBwIGluIHN0cikgcmV0dXJuIHN0cltwXTtcclxufVxyXG4iLCI8bWF0LXRvb2xiYXI+XG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJzYXZlKClcIiBbZGlzYWJsZWRdPVwiIWRpcnR5IHx8IGxvYWRpbmcgfHwgc2F2aW5nXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ1NhdmUnfHRyYW5zbGF0ZVwiPjxtYXQtaWNvbj5zYXZlPC9tYXQtaWNvbj48L2J1dHRvbj5cbiAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiY2xlYXJTZWFyY2goKVwiIFtkaXNhYmxlZF09XCIhc2VhcmNoQnlcIiBbYml6ZG9jVG9vbHRpcF09XCInQ2xlYXInfHRyYW5zbGF0ZVwiPjxtYXQtaWNvbj5zZWFyY2hfb2ZmPC9tYXQtaWNvbj48L2J1dHRvbj5cbjwvbWF0LXRvb2xiYXI+XG48bWF0LXByb2dyZXNzLWJhciBbbW9kZV09XCJsb2FkaW5nID8gJ2J1ZmZlcicgOiAnaW5kZXRlcm1pbmF0ZSdcIiBbc3R5bGUudmlzaWJpbGl0eV09XCJsb2FkaW5nID8gJ3Zpc2libGUnOidoaWRkZW4nXCI+PC9tYXQtcHJvZ3Jlc3MtYmFyPlxuQGlmIChsb2FkaW5nKSB7XG4gIDxiaXpkb2Mtbm9uZSB0aXRsZT1cIlNldHRpbmdUaGluZ3NVcFwiIHN1YnRpdGxlPVwiUGxlYXNlV2FpdFwiIGljb249XCJhcmNoaXRlY3R1cmVcIj48L2JpemRvYy1ub25lPlxufVxuPGRpdj5cbiAgQGZvciAocyBvZiBzZWN0aW9ucyB8IGZpbHRlckJ5OidoaWRlJzogZmFsc2U6IHNlYXJjaEJ5OyB0cmFjayBzKSB7XG4gICAgPHNlY3Rpb24+XG4gICAgICA8aDIgY2xhc3M9XCJtYXQtaDFcIj57e3MudGl0bGV9fTwvaDI+XG4gICAgICA8IS0tPGhyIC8+LS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiZWxlbWVudHNcIiBjZGtEcm9wTGlzdCBjZGtEcm9wTGlzdE9yaWVudGF0aW9uPVwiaG9yaXpvbnRhbFwiIFtjZGtEcm9wTGlzdERhdGFdPVwicy5lbGVtZW50c1wiIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQpXCI+XG4gICAgICAgIEBmb3IgKGUgb2Ygcy5lbGVtZW50cyB8IGZpbHRlckJ5OidoaWRlJzogZmFsc2U6IHNlYXJjaEJ5OyB0cmFjayBlKSB7XG4gICAgICAgICAgPG1hdC1jYXJkIFtjbGFzcy5kaXNhYmxlZF09XCJlLmRpc2FibGVkXCIgY2RrRHJhZyBjZGtEcmFnUm9vdEVsZW1lbnQ9XCIubWF0LW1kYy1jYXJkLXRpdGxlXCI+XG4gICAgICAgICAgICA8IS0tIEBpdGVtLS0+XG4gICAgICAgICAgICA8bWF0LWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICA8bWF0LWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAge3tlLnRpdGxlfGxvY2FsaXplZFN0cmluZ319XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIEBpZiAoZS5oZWxwKSB7XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gW2JpemRvY1Rvb2x0aXBdPVwiZS5oZWxwXCIgW2JpemRvY1Rvb2x0aXBEdXJhdGlvbl09XCI2MDAwXCI+aGVscF9vdXRsaW5lPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvbWF0LWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgIDxtYXQtY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICB7e2UubmFtZX19XG4gICAgICAgICAgICAgIDwvbWF0LWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICA8L21hdC1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgIDxtYXQtY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0NvbXBvbmVudE91dGxldD1cInMuY29tcDsgaW5qZWN0b3I6IGUuaW5qZWN0b3JcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbWF0LWNhcmQtY29udGVudD5cbiAgICAgICAgICAgIDxtYXQtY2FyZC1hY3Rpb25zIGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgIEBpZiAoIWUuY29weU9mKSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImNvcHkocywgZSlcIiBbYml6ZG9jVG9vbHRpcF09XCInQ29weSd8dHJhbnNsYXRlXCI+PG1hdC1pY29uPmZpbGVfY29weTwvbWF0LWljb24+PC9idXR0b24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgQGlmIChlLmRyYWZ0IHx8IGUuZW1wdHkpIHtcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwicmVtb3ZlKHMsIGUpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0Rpc2NhcmQnfHRyYW5zbGF0ZVwiPjxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPjwvYnV0dG9uPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJ0b2dnbGVEaXNhYmxlZChlKVwiIFtiaXpkb2NUb29sdGlwXT1cIihlLmRpc2FibGVkID8gJ0VuYWJsZScgOiAnRGlzYWJsZScpfHRyYW5zbGF0ZVwiPjxtYXQtaWNvbj57e2UuZGlzYWJsZWQgPyAndmlzaWJpbGl0eScgOiAndmlzaWJpbGl0eV9vZmYnfX08L21hdC1pY29uPjwvYnV0dG9uPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XG4gICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJlZGl0KHMsIGUpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ1NldHRpbmdzJ3x0cmFuc2xhdGVcIj48bWF0LWljb24+c2V0dGluZ3M8L21hdC1pY29uPjwvYnV0dG9uPlxuICAgICAgICAgICAgPC9tYXQtY2FyZC1hY3Rpb25zPlxuICAgICAgICAgIDwvbWF0LWNhcmQ+XG4gICAgICAgIH1cbiAgICAgICAgQGlmIChzLnRlbXBsYXRlcz8ubGVuZ3RoKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImFkZC1lbGVtZW50XCIgbWF0UmlwcGxlIChjbGljayk9XCJhZGQocywgbWVudVRyaWdnZXIsICRldmVudClcIj5cbiAgICAgICAgICAgIDxzcGFuIFttYXRNZW51VHJpZ2dlckZvcl09XCJ0ZW1wbGF0ZU1lbnVcIiAjbWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiPjwvc3Bhbj5cbiAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uPjxtYXQtaWNvbiBbYml6ZG9jVG9vbHRpcF09XCInTmV3J3x0cmFuc2xhdGVcIiBkaXNhYmxlUmlwcGxlPVwidHJ1ZVwiPmFkZDwvbWF0LWljb24+PC9idXR0b24+XG4gICAgICAgICAgICA8bWF0LW1lbnUgI3RlbXBsYXRlTWVudT5cbiAgICAgICAgICAgICAgQGZvciAodCBvZiBzLnRlbXBsYXRlczsgdHJhY2sgdCkge1xuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiY3JlYXRlKHMsIHQpXCI+XG4gICAgICAgICAgICAgICAgICBAaWYgKHQuZmFtaWx5KSB7XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIHt7dC5mYW1pbHl9fVxuICAgICAgICAgICAgICAgICAgICAgICZuYnNwOy0mbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgIHt7dC50aXRsZX19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvbWF0LW1lbnU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgIDwvc2VjdGlvbj5cbiAgfVxuPC9kaXY+XG4iXX0=
|
369
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzaWduZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9hZG1pbi9hcmNoaXRlY3R1cmUvZGVzaWduZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9hZG1pbi9hcmNoaXRlY3R1cmUvZGVzaWduZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBZSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV0RSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxRQUFRLEVBQVUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU5RyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFdEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBT3pELE9BQU8sRUFBNkMsV0FBVyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQWMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4SCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIs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QUFFLFNBQVMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRTtvQkFDcEgsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUU7b0JBQ3hILEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsc0JBQXNCLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUU7b0JBQy9GLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsbUJBQW1CLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7b0JBQ3BGLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUU7b0JBQ3RGLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsd0JBQXdCLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxXQUFXLEVBQUU7b0JBQ3hHLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUU7b0JBQy9GLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUs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QUNGLENBQUMsRUFBRSxDQUFDO1lBQ0osSUFBSSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDekgsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDN0osQ0FBQyxRQUNNLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsRUFBRTtRQUV6RSxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksRUFBRSxPQUFPLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUMzQyxXQUFXO1FBQ1gsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDekQsT0FBTyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFFNUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUss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QUFDO2dCQUN6QixPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxTQUFTLEtBQUssQ0FBQyxHQUFHLFVBQTRCO1lBQzVDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMxRCxDQUFDO0lBQ0gsQ0FBQzs4R0FoVFUsOEJBQThCO2tHQUE5Qiw4QkFBOEIsdU9BQ1gsV0FBVyw2QkNoRDNDLDZ4SkF1R0EsMjdORDVEYyxDQUFDLGFBQWEsQ0FBQzs7QUFJaEIsOEJBQThCO0lBRDFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsRUFBRSwrQkFBK0IsRUFBRSxDQUFDO0dBQ3pDLDhCQUE4QixDQWlUMUM7OzJGQWpUWSw4QkFBOEI7a0JBUDFDLFNBQVM7aUNBR0ksQ0FBQyxhQUFhLENBQUMsUUFDckIsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFOytSQUlzQixPQUFPO3NCQUFuRCxTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBNkYzQyxtQkFBbUI7c0JBRGxCLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDOztBQTZOckMsU0FBUyxhQUFhLENBQUMsR0FBb0I7SUFDekMsSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDO1FBQUUsT0FBTyxHQUFHLENBQUM7O1FBQ3pCLEtBQUssSUFBSSxDQUFDLElBQUksR0FBRztZQUFFLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9kcmFnLWRyb3BcIjtcclxuaW1wb3J0IHsgQ29tcG9uZW50VHlwZSB9IGZyb20gXCJAYW5ndWxhci9jZGsvcG9ydGFsXCI7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBJbmplY3RvciwgT25Jbml0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgTWF0TWVudVRyaWdnZXIgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudVwiO1xyXG5pbXBvcnQgeyBpdGVtQW5pbWF0aW9uIH0gZnJvbSBcIi4uLy4uL2NvcmUvYW5pbWF0aW9uc1wiO1xyXG5pbXBvcnQgeyBVdGlsaXR5Q29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvcmUvYmFzZVwiO1xyXG5pbXBvcnQgeyBPcGVuUG9saWN5IH0gZnJvbSBcIi4uLy4uL2NvcmUvY29uZmlndXJhdGlvblwiO1xyXG5pbXBvcnQgeyBCaXpEb2MgfSBmcm9tIFwiLi4vLi4vY29yZS9kZWNvcmF0b3JzXCI7XHJcbmltcG9ydCB7IGNsZWFudXAsIGlzU3RyaW5nIH0gZnJvbSBcIi4uLy4uL2NvcmUvZnVuY3Rpb25zXCI7XHJcbmltcG9ydCB7IFByb21wdFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9wcm9tcHQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBTZXNzaW9uU2VydmljZSB9IGZyb20gXCIuLi8uLi9jb3JlL3Nlc3Npb24uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBQYW5lc1JvdXRlciB9IGZyb20gXCIuLi8uLi9jb3JlL3Nsb3RzL3JvdXRlci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS90cmFuc2xhdGUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBQb3B1cCB9IGZyb20gJy4uLy4uL2NvcmUvcG9wdXAvcG9wdXAuc2VydmljZSc7XHJcbmltcG9ydCB7IFV0aWxpdHlSZWYgfSBmcm9tIFwiLi4vdXRpbGl0eS1yZWZcIjtcclxuaW1wb3J0IHsgRWxlbWVudE1vZGVsLCBEZXNpZ25lck1vZGVsLCBUZW1wbGF0ZUluZm8sIHByb2dyYW1OYW1lLCBEZXNpZ25lclJlZiwgY2xvbmUsIERlc2lnbk1vZGUgfSBmcm9tIFwiLi9kZWNsYXJhdGlvbnNcIjtcclxuaW1wb3J0IHsgRGVzaWduZXJUeXBlRWxlbWVudENvbXBvbmVudCB9IGZyb20gXCIuL2Rlc2lnbmVyLmJhc2VcIjtcclxuaW1wb3J0IHsgQWN0aW9uRGVzaWduZXJDb21wb25lbnQgfSBmcm9tIFwiLi9lbGVtZW50cy9hY3Rpb24uY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEF0dHJpYnV0ZURlc2lnbkNvbXBvbmVudCB9IGZyb20gXCIuL2VsZW1lbnRzL2F0dHJpYnV0ZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgQ29udHJvbERlc2lnbkNvbXBvbmVudCB9IGZyb20gXCIuL2VsZW1lbnRzL2NvbnRyb2wuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEN1YmVEZXNpZ25Db21wb25lbnQgfSBmcm9tIFwiLi9lbGVtZW50cy9jdWJlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBGb2xkZXJEZXNpZ25Db21wb25lbnQgfSBmcm9tIFwiLi9lbGVtZW50cy9mb2xkZXIuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEZvcm1EZXNpZ25Db21wb25lbnQgfSBmcm9tIFwiLi9lbGVtZW50cy9mb3JtLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBHdWlkZURlc2lnbkNvbXBvbmVudCB9IGZyb20gXCIuL2VsZW1lbnRzL2d1aWRlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBOb2RlRGVzaWduZXJDb21wb25lbnQgfSBmcm9tIFwiLi9lbGVtZW50cy9ub2RlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBQb2xpY3lEZXNpZ25Db21wb25lbnQgfSBmcm9tIFwiLi9lbGVtZW50cy9wb2xpY3kuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFJlcG9ydERlc2lnbmVyQ29tcG9uZW50IH0gZnJvbSBcIi4vZWxlbWVudHMvcmVwb3J0LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBSb2xlRGVzaWduQ29tcG9uZW50IH0gZnJvbSBcIi4vZWxlbWVudHMvcm9sZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgUnVsZURlc2lnbkNvbXBvbmVudCB9IGZyb20gXCIuL2VsZW1lbnRzL3J1bGUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFN0YXRlRGVzaWduQ29tcG9uZW50IH0gZnJvbSBcIi4vZWxlbWVudHMvc3RhdGUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFR5cGVEZXNpZ25Db21wb25lbnQgfSBmcm9tIFwiLi9lbGVtZW50cy90eXBlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBVdGlsaXR5RGVzaWduQ29tcG9uZW50IH0gZnJvbSBcIi4vZWxlbWVudHMvdXRpbGl0eS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgVmlld0Rlc2lnbkNvbXBvbmVudCB9IGZyb20gXCIuL2VsZW1lbnRzL3ZpZXcuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFdpZGdldERlc2lnbkNvbXBvbmVudCB9IGZyb20gXCIuL2VsZW1lbnRzL3dpZGdldC5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgSm9iRGVzaWduQ29tcG9uZW50IH0gZnJvbSBcIi4vZWxlbWVudHMvam9iLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBTb3VyY2VEZXNpZ25Db21wb25lbnQgfSBmcm9tIFwiLi9lbGVtZW50cy9zb3VyY2UuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IExvY2FsaXplZFN0cmluZyB9IGZyb20gXCIuLi8uLi9jb3JlL21vZGVsc1wiO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBkZWJvdW5jZVRpbWUsIHRha2VVbnRpbCB9IGZyb20gXCJyeGpzXCI7XHJcbi8qKiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICB0ZW1wbGF0ZVVybDogJ2Rlc2lnbmVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnZGVzaWduZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICBhbmltYXRpb25zOiBbaXRlbUFuaW1hdGlvbl0sXHJcbiAgaG9zdDogeyB0YWJpbmRleDogJzAnIH1cclxufSlcclxuQEJpekRvYyh7IHNlbGVjdG9yOiAnYml6ZG9jLWNvbmZpZ3VyYXRpb24tZGVzaWduZXInIH0pXHJcbmV4cG9ydCBjbGFzcyBDb25maWd1cmF0aW9uRGVzaWduZXJDb21wb25lbnQgaW1wbGVtZW50cyBVdGlsaXR5Q29tcG9uZW50LCBPbkluaXQge1xyXG4gIEBWaWV3Q2hpbGQoJ2ZpbHRlcnMnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pIGZpbHRlcnM6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgc2VhcmNoQnkgPSAwO1xyXG4gIGxvYWRpbmcgPSB0cnVlO1xyXG4gIHNhdmluZyA9IGZhbHNlO1xyXG4gIGRpcnR5ID0gZmFsc2U7XHJcbiAgbW9kZWw6IERlc2lnbmVyTW9kZWw7XHJcbiAgc2VjdGlvbnM6IFNlY3Rpb25bXTtcclxuICBmYW1pbGllczogc3RyaW5nW107XHJcbiAgcmVhZG9ubHkgZm9ybSA9IHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgIGNvbnRhaW5zOiB0aGlzLl9mYi5jb250cm9sPHN0cmluZz4obnVsbCksXHJcbiAgICBzZWN0aW9uczogdGhpcy5fZmIuY29udHJvbDxzdHJpbmdbXT4obnVsbCksXHJcbiAgICBmYW1pbHk6IHRoaXMuX2ZiLmNvbnRyb2w8c3RyaW5nPihudWxsKVxyXG4gIH0pO1xyXG4gIHByaXZhdGUgX3R5cGluZ1RpbWVyOiBhbnk7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9wYW5lczogUGFuZXNSb3V0ZXIsXHJcbiAgICBwcml2YXRlIF9mYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIF90cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9wczogUHJvbXB0U2VydmljZSxcclxuICAgIHByaXZhdGUgX3Nlc3Npb246IFNlc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4sXHJcbiAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIF9wb3B1cDogUG9wdXAsXHJcbiAgICBwcml2YXRlIF9yZWY6IFV0aWxpdHlSZWY8Ym9vbGVhbiwgRGVzaWduZXJNb2RlbCwgRGVzaWduZXJNb2RlbD4pIHsgfVxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fcmVmLnBvcHVsYXRlKCkuc3Vic2NyaWJlKHIgPT4ge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMubW9kZWwgPSByO1xyXG4gICAgICAgIHRoaXMuc2VjdGlvbnMgPSBbXHJcbiAgICAgICAgICB7IGVsZW1lbnRzOiByLmZvcm1zLCB0eXBlOiAnRm9ybXMnLCBjb21wOiBGb3JtRGVzaWduQ29tcG9uZW50LCB0ZW1wbGF0ZXM6IHIudEZvcm1zIH0sXHJcbiAgICAgICAgICB7IGVsZW1lbnRzOiByLmFjdGlvbnMsIHR5cGU6ICdBY3Rpb25zJywgY29tcDogQWN0aW9uRGVzaWduZXJDb21wb25lbnQsIHRlbXBsYXRlczogci50QWN0aW9ucyB9LFxyXG4gICAgICAgICAgeyBlbGVtZW50czogci5yZXBvcnRzLCB0eXBlOiAnUmVwb3J0cycsIGNvbXA6IFJlcG9ydERlc2lnbmVyQ29tcG9uZW50LCB0ZW1wbGF0ZXM6IHIudFJlcG9ydHMgfSxcclxuICAgICAgICAgIHsgZWxlbWVudHM6IHIud2lkZ2V0cywgdHlwZTogJ1dpZGdldHMnLCBjb21wOiBXaWRnZXREZXNpZ25Db21wb25lbnQsIHRlbXBsYXRlczogci50V2lkZ2V0cyB9LFxyXG4gICAgICAgICAgeyBlbGVtZW50czogci52aWV3cywgdHlwZTogJ1ZpZXdzJywgY29tcDogVmlld0Rlc2lnbkNvbXBvbmVudCwgdGVtcGxhdGVzOiByLnRWaWV3cyB9LFxyXG4gICAgICAgICAgeyBlbGVtZW50czogci5ndWlkZXMsIHR5cGU6ICdHdWlkZXMnLCBjb21wOiBHdWlkZURlc2lnbkNvbXBvbmVudCwgdGVtcGxhdGVzOiBbeyB0aXRsZTogdGhpcy5fdHJhbnNsYXRlLmdldCgnR3VpZGUnKSB9XSB9LFxyXG4gICAgICAgICAgeyBlbGVtZW50czogci5jdWJlcywgdHlwZTogJ0N1YmVzJywgY29tcDogQ3ViZURlc2lnbkNvbXBvbmVudCwgdGVtcGxhdGVzOiByLnRDdWJlcyB9LFxyXG4gICAgICAgICAgLy97IGVsZW1lbnRzOiByLmpvYnMsIHR5cGU6ICdKb2JzJywgY29tcDogSm9iRGVzaWduQ29tcG9uZW50IH0sXHJcbiAgICAgICAgICB7IGVsZW1lbnRzOiByLnNvdXJjZXMsIHR5cGU6ICdTb3VyY2VzJywgY29tcDogU291cmNlRGVzaWduQ29tcG9uZW50IH0sXHJcbiAgICAgICAgICB7IGVsZW1lbnRzOiByLmZvbGRlcnMsIHR5cGU6ICdGb2xkZXJzJywgY29tcDogRm9sZGVyRGVzaWduQ29tcG9uZW50LCB0ZW1wbGF0ZXM6IFt7IHRpdGxlOiB0aGlzLl90cmFuc2xhdGUuZ2V0KCdGb2xkZXInKSB9XSB9LFxyXG4gICAgICAgICAgeyBlbGVtZW50czogci5yb2xlcywgdHlwZTogJ1JvbGVzJywgY29tcDogUm9sZURlc2lnbkNvbXBvbmVudCwgdGVtcGxhdGVzOiBbeyB0aXRsZTogdGhpcy5fdHJhbnNsYXRlLmdldCgnUm9sZScpIH1dIH0sXHJcbiAgICAgICAgICB7IGVsZW1lbnRzOiByLnN0YXRlcywgdHlwZTogJ1N0YXRlcycsIGNvbXA6IFN0YXRlRGVzaWduQ29tcG9uZW50LCB0ZW1wbGF0ZXM6IFt7IHRpdGxlOiB0aGlzLl90cmFuc2xhdGUuZ2V0KCdTdGF0ZScpIH1dIH0sXHJcbiAgICAgICAgICB7IGVsZW1lbnRzOiByLnV0aWxpdGllcywgdHlwZTogJ1Rvb2xzJywgY29tcDogVXRpbGl0eURlc2lnbkNvbXBvbmVudCwgdGVtcGxhdGVzOiByLnRVdGlsaXRpZXMgfSxcclxuICAgICAgICAgIHsgZWxlbWVudHM6IHIudHlwZXMsIHR5cGU6ICdUeXBlcycsIGNvbXA6IFR5cGVEZXNpZ25Db21wb25lbnQsIHRlbXBsYXRlczogci50VHlwZXMgfSxcclxuICAgICAgICAgIHsgZWxlbWVudHM6IHIubm9kZXMsIHR5cGU6ICdOb2RlcycsIGNvbXA6IE5vZGVEZXNpZ25lckNvbXBvbmVudCwgdGVtcGxhdGVzOiByLnROb2RlcyB9LFxyXG4gICAgICAgICAgeyBlbGVtZW50czogci5hdHRyaWJ1dGVzLCB0eXBlOiAnQXR0cmlidXRlcycsIGNvbXA6IEF0dHJpYnV0ZURlc2lnbkNvbXBvbmVudCwgdGVtcGxhdGVzOiByLnRBdHRyaWJ1dGVzIH0sXHJcbiAgICAgICAgICB7IGVsZW1lbnRzOiByLnBvbGljaWVzLCB0eXBlOiAnUG9saWNpZXMnLCBjb21wOiBQb2xpY3lEZXNpZ25Db21wb25lbnQsIHRlbXBsYXRlczogci50UG9saWNpZXMgfSxcclxuICAgICAgICAgIHsgZWxlbWVudHM6IHIuY29udHJvbHMsIHR5cGU6ICdDb250cm9scycsIGNvbXA6IENvbnRyb2xEZXNpZ25Db21wb25lbnQgfSxcclxuICAgICAgICAgIHsgZWxlbWVudHM6IHIucnVsZXMsIHR5cGU6ICdSdWxlcycsIGNvbXA6IFJ1bGVEZXNpZ25Db21wb25lbnQsIHRlbXBsYXRlczogci50UnVsZXMgfSxcclxuICAgICAgICBdO1xyXG4gICAgICAgIHRoaXMuZmFtaWxpZXMgPSBbXTtcclxuICAgICAgICB0aGlzLnNlY3Rpb25zLmZvckVhY2gocyA9PiB7XHJcbiAgICAgICAgICBzLmhpZGUgPSBmYWxzZTtcclxuICAgICAgICAgIHMudGl0bGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KHMudHlwZSk7XHJcbiAgICAgICAgICBzLmVsZW1lbnRzLmZvckVhY2goZSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghZS5vcHRpb25zKSBlLm9wdGlvbnMgPSB7fTtcclxuICAgICAgICAgICAgaWYgKGUuZmFtaWx5ICYmIHRoaXMuZmFtaWxpZXMuaW5kZXhPZihlLmZhbWlseSkgPCAwKVxyXG4gICAgICAgICAgICAgIHRoaXMuZmFtaWxpZXMucHVzaChlLmZhbWlseSk7XHJcbiAgICAgICAgICAgIGUuaGlkZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBlLmluamVjdG9yID0gdGhpcy5fY3JlYXRlSW5qZWN0b3IoZSwgJ3dpZGdldCcpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcblxyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgLy8gdHlwaW5nIGtleWRvd24gbGlzdGVuZXJcclxuICAgIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gIH1cclxuICBkcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxFbGVtZW50TW9kZWxbXT4pIHtcclxuICAgIGNvbnN0IHJhbmdlID0gZXZlbnQuY29udGFpbmVyLmRhdGEuc2xpY2UoXHJcbiAgICAgIE1hdGgubWluKGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleCksXHJcbiAgICAgIE1hdGgubWF4KGV2ZW50LnByZXZpb3VzSW5kZXgsIGV2ZW50LmN1cnJlbnRJbmRleClcclxuICAgICksIGZpbGUgPSByYW5nZVswXS5jb25maWd1cmF0aW9uRmlsZTtcclxuICAgIGlmXHJcbiAgICAgIC8vIGFjcm9zcyBmaWxlc1xyXG4gICAgICAocmFuZ2Uuc2xpY2UoMSkuc29tZShlID0+IGUuY29uZmlndXJhdGlvbkZpbGUgIT09IGZpbGUpKSB7XHJcbiAgICAgIC8vIHN0YXJ0IG9yZGluYWxcclxuICAgICAgbGV0IGkgPSBldmVudC5jb250YWluZXIuZGF0YVtldmVudC5jdXJyZW50SW5kZXhdLm9yZGluYWwgfHwgLTE7XHJcbiAgICAgIC8vIHNldCBvcmRpbmFsIHRvIGl0ZW1zIGluIHJhbmdlXHJcbiAgICAgIHJhbmdlLmZvckVhY2goZSA9PiBlLm9yZGluYWwgPSBpKyspO1xyXG4gICAgICAvLyBpbmNyZWFzZSBvdGhlciBoaWdoZXIgdGhhbiBsYXN0IGluIHJhbmdlXHJcbiAgICAgIGV2ZW50LmNvbnRhaW5lci5kYXRhLmZpbHRlcihlID0+IGUub3JkaW5hbCAmJiBlLm9yZGluYWwgPiBpKS5mb3JFYWNoKGUgPT4gZS5vcmRpbmFsICs9IDEpO1xyXG4gICAgfSBlbHNlIC8vIG5hdGl2ZSBvcmRlciBpbiBjb2xsZWN0aW9uXHJcbiAgICAgIHJhbmdlLmZvckVhY2goZSA9PiBlLm9yZGluYWwgPSBudWxsKTtcclxuICAgIG1vdmVJdGVtSW5BcnJheShldmVudC5jb250YWluZXIuZGF0YSwgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQ3RybC1zIHNhdmVcclxuICAgKiBAcGFyYW0gZXZlbnRcclxuICAgKi9cclxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcclxuICBoYW5kbGVLZXlib2FyZEV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAoZXZlbnQuY3RybEtleSAmJiAoZXZlbnQua2V5ID09PSAnUycgfHwgZXZlbnQua2V5ID09PSAncycpKSB7XHJcbiAgICAgIHRoaXMuZGlydHkgJiYgdGhpcy5zYXZlKCk7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5zZWFyY2hCeSAmJiBldmVudC5rZXkgPT09ICdFc2NhcGUnKSB0aGlzLmNsZWFyU2VhcmNoKCk7XHJcbiAgfVxyXG4gIGNsZWFyU2VhcmNoKCkge1xyXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3R5cGluZ1RpbWVyKTtcclxuICAgIHRoaXMuc2VjdGlvbnMuZm9yRWFjaChzID0+IHtcclxuICAgICAgcy5oaWRlID0gZmFsc2U7XHJcbiAgICAgIHMuZWxlbWVudHMuZm9yRWFjaChlID0+IGUuaGlkZSA9IGZhbHNlKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5mb3JtLnNldFZhbHVlKHt9IGFzIGFueSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgdGhpcy5zZWFyY2hCeSA9IDA7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBldnRcclxuICAgKi9cclxuICBmaWx0ZXIoZXZ0OiBFdmVudCkge1xyXG4gICAgY29uc3Qgc3Vic2NyaWJlID1cclxuICAgICAgdGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSgxNTApKS5cclxuICAgICAgICBzdWJzY3JpYmUoZSA9PiB7XHJcbiAgICAgICAgICBjb25zdCB7IGNvbnRhaW5zLCBzZWN0aW9ucywgZmFtaWx5IH0gPSBlO1xyXG4gICAgICAgICAgdGhpcy5zZWN0aW9ucy5mb3JFYWNoKHMgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc2VjdGlvbnMgJiYgc2VjdGlvbnMubGVuZ3RoICYmIHNlY3Rpb25zLmluZGV4T2Yocy50eXBlKSA8IDApIHtcclxuICAgICAgICAgICAgICBzLmhpZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgbm9uZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHMuZWxlbWVudHMuXHJcbiAgICAgICAgICAgICAgZm9yRWFjaChlID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICgoIWNvbnRhaW5zIHx8IChleHRyYWN0U3RyaW5nKGUudGl0bGUpIHx8IGUubmFtZSkudG9Mb3dlckNhc2UoKS5cclxuICAgICAgICAgICAgICAgICAgaW5kZXhPZihjb250YWlucykgPiAtMSlcclxuICAgICAgICAgICAgICAgICAgJiYgKCFmYW1pbHkgfHwgZS5mYW1pbHkgPT09IGZhbWlseSkpIHtcclxuICAgICAgICAgICAgICAgICAgZS5oaWRlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgIG5vbmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgZS5oaWRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKG5vbmUpXHJcbiAgICAgICAgICAgICAgcy5oaWRlID0gKCFzLnRlbXBsYXRlcyB8fCAhcy50ZW1wbGF0ZXMubGVuZ3RoIHx8XHJcbiAgICAgICAgICAgICAgICAhcy50ZW1wbGF0ZXMuZmluZCh0ID0+ICghY29udGFpbnMgfHxcclxuICAgICAgICAgICAgICAgICAgdC50aXRsZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoY29udGFpbnMpID4gLTEpICYmXHJcbiAgICAgICAgICAgICAgICAgICghZmFtaWx5IHx8IHQuZmFtaWx5ID09PSBmYW1pbHkpKSk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICBzLmhpZGUgPSBmYWxzZTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hCeSArPSAxO1xyXG4gICAgICAgIH0pO1xyXG4gICAgdGhpcy5fcG9wdXAub3Blbih0aGlzLmZpbHRlcnMsIGV2dC50YXJnZXQgYXMgSFRNTEVsZW1lbnQsIHtcclxuICAgICAgZGF0YTogdGhpcy5mb3JtXHJcbiAgICB9KS5jbG9zZWQoKS5cclxuICAgICAgc3Vic2NyaWJlKHN1YnNjcmliZS51bnN1YnNjcmliZSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBzZWN0aW9uXHJcbiAgICogQHBhcmFtIGVsZW1lbnRcclxuICAgKiBAcGFyYW0gcG9zaXRpb25cclxuICAgKi9cclxuICBwcml2YXRlIF9pbnNlcnQoc2VjdGlvbjogU2VjdGlvbiwgZWxlbWVudDogRWxlbWVudE1vZGVsLCBwb3NpdGlvbjogbnVtYmVyKSB7XHJcbiAgICAvLyByZXNvbHZlIG5hbWUgJiB0aXRsZVxyXG4gICAgbGV0IGkgPSBlbGVtZW50Lm5hbWUubGFzdEluZGV4T2YoJ18nKSxcclxuICAgICAgaiA9IChleHRyYWN0U3RyaW5nKGVsZW1lbnQudGl0bGUpKS5sYXN0SW5kZXhPZignICcpLFxyXG4gICAgICBuID0gMCwgbmFtZSwgdGl0bGU7XHJcbiAgICBkbyB7XHJcbiAgICAgIG4rKztcclxuICAgICAgbmFtZSA9IChpIDwgMCB8fCBpc05hTihwYXJzZUludChlbGVtZW50Lm5hbWUuc3Vic3RyaW5nKGkgKyAxKSkpID8gZWxlbWVudC5uYW1lIDogZWxlbWVudC5uYW1lLnN1YnN0cmluZygwLCBpKSkgKyAnXycgKyBuO1xyXG4gICAgICB0aXRsZSA9IChqIDwgMCB8fCBpc05hTihwYXJzZUludChleHRyYWN0U3RyaW5nKGVsZW1lbnQudGl0bGUpLnN1YnN0cmluZyhqICsgMSkpKSA/IGVsZW1lbnQudGl0bGUgOiBleHRyYWN0U3RyaW5nKGVsZW1lbnQudGl0bGUpLnN1YnN0cmluZygwLCBqKSkgKyAnICcgKyBuO1xyXG4gICAgfVxyXG4gICAgd2hpbGUgKHNlY3Rpb24uZWxlbWVudHMuZmluZChlID0+IGUubmFtZSA9PT0gbmFtZSB8fCBlLnRpdGxlID09PSB0aXRsZSkpO1xyXG5cclxuICAgIGVsZW1lbnQubmFtZSA9IG5hbWUsIGVsZW1lbnQudGl0bGUgPSB0aXRsZTtcclxuICAgIC8vIGluamVjdG9yXHJcbiAgICBjb25zdCBpbmplY3RvciA9IHRoaXMuX2NyZWF0ZUluamVjdG9yKGVsZW1lbnQsICd3aWRnZXQnKTtcclxuICAgIGVsZW1lbnQuaW5qZWN0b3IgPSBpbmplY3RvcjtcclxuXHJcbiAgICB0aGlzLl9vcGVuKGVsZW1lbnQsIHNlY3Rpb24sICdhZGQnKS50aGVuKCgpID0+IHtcclxuICAgICAgLy8gYWRkIHRvIGFycmF5XHJcbiAgICAgIHNlY3Rpb24uZWxlbWVudHMuc3BsaWNlKHBvc2l0aW9uICsgMSwgMCwgZWxlbWVudCk7XHJcbiAgICAgIC8vIGZvcmNlIHJlbmRlciBvbiBzZWFyY2ggbW9yZVxyXG4gICAgICBpZiAodGhpcy5zZWFyY2hCeSkgdGhpcy5zZWFyY2hCeSArPSAxO1xyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX29wZW4oZWxlbWVudDogRWxlbWVudE1vZGVsLFxyXG4gICAgc2VjdGlvbjogU2VjdGlvbixcclxuICAgIG1vZGU6IERlc2lnbk1vZGUpIHtcclxuICAgIGxldCBlY2xvbmUgPSB7IC4uLmVsZW1lbnQgfTtcclxuICAgIGRlbGV0ZSBlY2xvbmUuaW5qZWN0b3I7XHJcbiAgICBlY2xvbmUgPSBjbG9uZShlY2xvbmUpOyAvLyBkZWVwXHJcbiAgICBjb25zdCBpbmplY3RvciA9IHRoaXMuX2NyZWF0ZUluamVjdG9yKGVjbG9uZSwgbW9kZSk7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cclxuICAgICAgdGhpcy5fcGFuZXMubmF2aWdhdGU8RGVzaWduZXJUeXBlRWxlbWVudENvbXBvbmVudD4oc2VjdGlvbi5jb21wLCB7XHJcbiAgICAgICAgcG9saWN5OiBtb2RlID09PSAnYWRkJyA/IE9wZW5Qb2xpY3kuRGlhbG9nIHwgT3BlblBvbGljeS5TdHJldGNoIDpcclxuICAgICAgICAgIE9wZW5Qb2xpY3kuVGFiIHwgT3BlblBvbGljeS5Ub2dnbGUgfCBPcGVuUG9saWN5LkRlZmVyLFxyXG4gICAgICAgIGdyb3VwOiB0aGlzLl90cmFuc2xhdGUuZ2V0KHNlY3Rpb24udGl0bGUpLFxyXG4gICAgICAgIC8vdGl0bGUsXHJcbiAgICAgICAgaW5qZWN0b3I6IGluamVjdG9yXHJcbiAgICAgIH0pLnRoZW4ocGFuZSA9PiB7XHJcbiAgICAgICAgcGFuZS5pbnN0YW5jZS5kZXNpZ25lci5vblNhdmUuc3Vic2NyaWJlKGVsID0+IHtcclxuICAgICAgICAgIGlmIChlbCkge1xyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGVsZW1lbnQsIGVsKTtcclxuICAgICAgICAgICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgICAgICAgICAgIHJlc29sdmUoZWwpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSByZWplY3QoKTtcclxuICAgICAgICAgIHBhbmUuY2xvc2UoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBwYW5lLmNsb3NlZCgpLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKSk7XHJcbiAgICAgIH0pKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfY3JlYXRlSW5qZWN0b3IoZWxlbWVudDogRWxlbWVudE1vZGVsPGFueT4sIG1vZGU6IERlc2lnbk1vZGUpIHtcclxuICAgIGNvbnN0IHJlZiA9IG5ldyBEZXNpZ25lclJlZih0aGlzLm1vZGVsLCBlbGVtZW50LCBtb2RlKTtcclxuXHJcbiAgICBjb25zdCBpbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XHJcbiAgICAgIHByb3ZpZGVyczogW3tcclxuICAgICAgICBwcm92aWRlOiBEZXNpZ25lclJlZiwgdXNlVmFsdWU6IHJlZlxyXG4gICAgICB9XSwgcGFyZW50OiB0aGlzLl9pbmplY3RvclxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gaW5qZWN0b3I7XHJcbiAgfVxyXG4gIGFkZChzZWN0aW9uOiBTZWN0aW9uLCBtZW51OiBNYXRNZW51VHJpZ2dlciwgZXZ0OiBFdmVudCkge1xyXG4gICAgaWYgKHNlY3Rpb24udGVtcGxhdGVzLmxlbmd0aCA+IDEpXHJcbiAgICAgIG1lbnUub3Blbk1lbnUoKTtcclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5jcmVhdGUoc2VjdGlvbiwgc2VjdGlvbi50ZW1wbGF0ZXNbMF0pO1xyXG4gICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG4gIGNyZWF0ZShzZWN0aW9uOiBTZWN0aW9uLCB0ZW1wbGF0ZTogVGVtcGxhdGVJbmZvKSB7XHJcbiAgICBjb25zdCBlbGVtZW50ID0ge1xyXG4gICAgICAuLi50ZW1wbGF0ZSxcclxuICAgICAgbmFtZTogcHJvZ3JhbU5hbWUodGVtcGxhdGUua2V5IHx8IHRlbXBsYXRlLnRpdGxlKSxcclxuICAgICAgZHJhZnQ6IHRydWUsXHJcbiAgICAgIGhpZGU6IGZhbHNlLFxyXG4gICAgICBvcHRpb25zOiB7fVxyXG4gICAgfSBhcyBFbGVtZW50TW9kZWw7XHJcbiAgICB0aGlzLl9pbnNlcnQoc2VjdGlvbiwgZWxlbWVudCwgc2VjdGlvbi5lbGVtZW50cy5sZW5ndGgpO1xyXG4gIH1cclxuICByZW1vdmUoc2VjdGlvbjogU2VjdGlvbiwgZWxlbWVudDogRWxlbWVudE1vZGVsKSB7XHJcbiAgICBzZWN0aW9uLmVsZW1lbnRzLnJlbW92ZShlbGVtZW50KTtcclxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gIH1cclxuICBjb3B5KHNlY3Rpb246IFNlY3Rpb24sIGVsZW1lbnQ6IEVsZW1lbnRNb2RlbCkge1xyXG4gICAgbGV0IGVjbG9uZSA9IHtcclxuICAgICAgLi4uZWxlbWVudCxcclxuICAgICAgY29weU9mOiBlbGVtZW50Lm5hbWUsXHJcbiAgICAgIGRyYWZ0OiB0cnVlXHJcbiAgICB9O1xyXG4gICAgZGVsZXRlIGVjbG9uZS5pbmplY3RvcjtcclxuICAgIGRlbGV0ZSBlY2xvbmUucmVzb3VyY2VUeXBlO1xyXG4gICAgZWNsb25lID0gY2xvbmUoZWNsb25lKTsgLy8gZGVlcFxyXG4gICAgdGhpcy5faW5zZXJ0KHNlY3Rpb24sIGVjbG9uZSwgc2VjdGlvbi5lbGVtZW50cy5pbmRleE9mKGVsZW1lbnQpKTtcclxuICB9XHJcbiAgZWRpdChzZWN0aW9uOiBTZWN0aW9uLCBlbGVtZW50OiBFbGVtZW50TW9kZWwpIHtcclxuICAgIHRoaXMuX29wZW4oZWxlbWVudCwgc2VjdGlvbiwgJ2VkaXQnKTtcclxuICB9XHJcbiAgdG9nZ2xlRGlzYWJsZWQoZWxlbWVudDogRWxlbWVudE1vZGVsKSB7XHJcbiAgICBlbGVtZW50LmRpc2FibGVkID0gIWVsZW1lbnQuZGlzYWJsZWQ7XHJcbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuICB9XHJcbiAgc2F2ZSgpIHtcclxuICAgIHRoaXMuc2F2aW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0IHsgY29udHJvbHMsIGF0dHJpYnV0ZXMsIHBvbGljaWVzLCBhY3Rpb25zLCBjdWJlcywgZm9sZGVycywgZm9ybXMsIGd1aWRlcywgcmVwb3J0cywgcm9sZXMsIHJ1bGVzLCBzdGF0ZXMsIHR5cGVzLCB1dGlsaXRpZXMsIHZpZXdzLCB3aWRnZXRzLCBub2RlcyB9ID0gdGhpcy5tb2RlbDtcclxuICAgIGNvbnN0IG1vZGVsID0ge1xyXG4gICAgICBhY3Rpb25zOiBzdHJpcChhY3Rpb25zKSxcclxuICAgICAgY3ViZXM6IHN0cmlwKGN1YmVzKSxcclxuICAgICAgZm9sZGVyczogc3RyaXAoZm9sZGVycyksXHJcbiAgICAgIGZvcm1zOiBzdHJpcChmb3JtcyksXHJcbiAgICAgIGd1aWRlczogc3RyaXAoZ3VpZGVzKSxcclxuICAgICAgcmVwb3J0czogc3RyaXAocmVwb3J0cyksXHJcbiAgICAgIHJvbGVzOiBzdHJpcChyb2xlcyksXHJcbiAgICAgIHJ1bGVzOiBzdHJpcChydWxlcyksXHJcbiAgICAgIHBvbGljaWVzOiBzdHJpcChwb2xpY2llcyksXHJcbiAgICAgIHN0YXRlczogc3RyaXAoc3RhdGVzKSxcclxuICAgICAgdHlwZXM6IHN0cmlwKHR5cGVzKSxcclxuICAgICAgdXRpbGl0aWVzOiBzdHJpcCh1dGlsaXRpZXMpLFxyXG4gICAgICB2aWV3czogc3RyaXAodmlld3MpLFxyXG4gICAgICBub2Rlczogc3RyaXAobm9kZXMpLFxyXG4gICAgICB3aWRnZXRzOiBzdHJpcCh3aWRnZXRzKSxcclxuICAgICAgY29udHJvbHM6IHN0cmlwKGNvbnRyb2xzKSxcclxuICAgICAgYXR0cmlidXRlczogc3RyaXAoYXR0cmlidXRlcylcclxuICAgIH07XHJcbiAgICB0aGlzLl9yZWYuZXhlY3V0ZShcclxuICAgICAgbW9kZWwgYXMgYW55KS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuX3BzLnRvYXN0KCdDaGFuZ2VzU2F2ZWQnKTtcclxuICAgICAgICAgIGFwcGx5KHBvbGljaWVzLCBhY3Rpb25zLCBjdWJlcywgZm9sZGVycywgZm9ybXMsIGd1aWRlcywgcmVwb3J0cywgcm9sZXMsIHJ1bGVzLCBzdGF0ZXMsIHR5cGVzLCB1dGlsaXRpZXMsIHZpZXdzLCB3aWRnZXRzKTtcclxuICAgICAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmRpcnR5ID0gZmFsc2VcclxuICAgICAgICAgIHRoaXMuX3Nlc3Npb24ucmVmcmVzaCgpLnN1YnNjcmliZSgpO1xyXG4gICAgICAgIH0sIGVycm9yOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9wcy5lcnJvcigpO1xyXG4gICAgICAgICAgdGhpcy5zYXZpbmcgPSBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICBmdW5jdGlvbiBzdHJpcChlbGVtZW50czogRWxlbWVudE1vZGVsW10pIHtcclxuICAgICAgcmV0dXJuIGVsZW1lbnRzLm1hcChlID0+IHtcclxuICAgICAgICBjb25zdCBlbGVtZW50ID0geyAuLi5lIH07XHJcbiAgICAgICAgZGVsZXRlIGVsZW1lbnQuaW5qZWN0b3I7XHJcbiAgICAgICAgZGVsZXRlIGVsZW1lbnQuYXJndW1lbnRzO1xyXG4gICAgICAgIHJldHVybiBjbGVhbnVwKGVsZW1lbnQpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFwcGx5KC4uLmNvbGxlY3Rpb246IEVsZW1lbnRNb2RlbFtdW10pIHtcclxuICAgICAgY29sbGVjdGlvbi5mb3JFYWNoKHMgPT4gcy5mb3JFYWNoKGUgPT4gZGVsZXRlIGUuZHJhZnQpKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuaW50ZXJmYWNlIFNlY3Rpb24ge1xyXG4gIGNvbXA6IENvbXBvbmVudFR5cGU8YW55PjtcclxuICB0eXBlOiBzdHJpbmc7XHJcbiAgdGl0bGU/OiBzdHJpbmc7XHJcbiAgZWxlbWVudHM6IEVsZW1lbnRNb2RlbFtdO1xyXG4gIHRlbXBsYXRlcz86IFRlbXBsYXRlSW5mb1tdO1xyXG4gIGhpZGU/OiBib29sZWFuO1xyXG59XHJcbmZ1bmN0aW9uIGV4dHJhY3RTdHJpbmcoc3RyOiBMb2NhbGl6ZWRTdHJpbmcpIHtcclxuICBpZiAoaXNTdHJpbmcoc3RyKSkgcmV0dXJuIHN0cjtcclxuICBlbHNlIGZvciAodmFyIHAgaW4gc3RyKSByZXR1cm4gc3RyW3BdO1xyXG59XHJcbiIsIjxtYXQtdG9vbGJhcj5cbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInNhdmUoKVwiIFtkaXNhYmxlZF09XCIhZGlydHkgfHwgbG9hZGluZyB8fCBzYXZpbmdcIiBbYml6ZG9jVG9vbHRpcF09XCInU2F2ZSd8dHJhbnNsYXRlXCI+PG1hdC1pY29uPnNhdmU8L21hdC1pY29uPjwvYnV0dG9uPlxuICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJmaWx0ZXIoJGV2ZW50KVwiIFtiaXpkb2NUb29sdGlwXT1cIidGaWx0ZXInfHRyYW5zbGF0ZVwiPjxtYXQtaWNvbj5maWx0ZXJfbGlzdDwvbWF0LWljb24+PC9idXR0b24+XG48L21hdC10b29sYmFyPlxuPG1hdC1wcm9ncmVzcy1iYXIgW21vZGVdPVwibG9hZGluZyA/ICdidWZmZXInIDogJ2luZGV0ZXJtaW5hdGUnXCIgW3N0eWxlLnZpc2liaWxpdHldPVwibG9hZGluZyA/ICd2aXNpYmxlJzonaGlkZGVuJ1wiPjwvbWF0LXByb2dyZXNzLWJhcj5cbkBpZiAobG9hZGluZykge1xuICA8Yml6ZG9jLW5vbmUgdGl0bGU9XCJTZXR0aW5nVGhpbmdzVXBcIiBzdWJ0aXRsZT1cIlBsZWFzZVdhaXRcIiBpY29uPVwiYXJjaGl0ZWN0dXJlXCI+PC9iaXpkb2Mtbm9uZT5cbn1cbjxkaXY+XG4gIEBmb3IgKHMgb2Ygc2VjdGlvbnMgfCBmaWx0ZXJCeTonaGlkZSc6IGZhbHNlOiBzZWFyY2hCeTsgdHJhY2sgcykge1xuICAgIDxzZWN0aW9uPlxuICAgICAgPGgyIGNsYXNzPVwibWF0LWgxXCI+e3tzLnRpdGxlfX08L2gyPlxuICAgICAgPCEtLTxociAvPi0tPlxuICAgICAgPGRpdiBjbGFzcz1cImVsZW1lbnRzXCIgY2RrRHJvcExpc3QgY2RrRHJvcExpc3RPcmllbnRhdGlvbj1cImhvcml6b250YWxcIiBbY2RrRHJvcExpc3REYXRhXT1cInMuZWxlbWVudHNcIiAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyb3AoJGV2ZW50KVwiPlxuICAgICAgICBAZm9yIChlIG9mIHMuZWxlbWVudHMgfCBmaWx0ZXJCeTonaGlkZSc6IGZhbHNlOiBzZWFyY2hCeTsgdHJhY2sgZSkge1xuICAgICAgICAgIDxtYXQtY2FyZCBbY2xhc3MuZGlzYWJsZWRdPVwiZS5kaXNhYmxlZFwiIGNka0RyYWcgY2RrRHJhZ1Jvb3RFbGVtZW50PVwiLm1hdC1tZGMtY2FyZC10aXRsZVwiPlxuICAgICAgICAgICAgPCEtLSBAaXRlbS0tPlxuICAgICAgICAgICAgPG1hdC1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgPG1hdC1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgIHt7ZS50aXRsZXxsb2NhbGl6ZWRTdHJpbmd9fVxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICBAaWYgKGUuaGVscCkge1xuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIFtiaXpkb2NUb29sdGlwXT1cImUuaGVscFwiIFtiaXpkb2NUb29sdGlwRHVyYXRpb25dPVwiNjAwMFwiPmhlbHBfb3V0bGluZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L21hdC1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICA8bWF0LWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAge3tlLm5hbWV9fVxuICAgICAgICAgICAgICA8L21hdC1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgPC9tYXQtY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICA8bWF0LWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdDb21wb25lbnRPdXRsZXQ9XCJzLmNvbXA7IGluamVjdG9yOiBlLmluamVjdG9yXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICA8bWF0LWNhcmQtYWN0aW9ucyBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICBAaWYgKCFlLmNvcHlPZikge1xuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJjb3B5KHMsIGUpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0NvcHknfHRyYW5zbGF0ZVwiPjxtYXQtaWNvbj5maWxlX2NvcHk8L21hdC1pY29uPjwvYnV0dG9uPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIEBpZiAoZS5kcmFmdCB8fCBlLmVtcHR5KSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInJlbW92ZShzLCBlKVwiIFtiaXpkb2NUb29sdGlwXT1cIidEaXNjYXJkJ3x0cmFuc2xhdGVcIj48bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj48L2J1dHRvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwidG9nZ2xlRGlzYWJsZWQoZSlcIiBbYml6ZG9jVG9vbHRpcF09XCIoZS5kaXNhYmxlZCA/ICdFbmFibGUnIDogJ0Rpc2FibGUnKXx0cmFuc2xhdGVcIj48bWF0LWljb24+e3tlLmRpc2FibGVkID8gJ3Zpc2liaWxpdHknIDogJ3Zpc2liaWxpdHlfb2ZmJ319PC9tYXQtaWNvbj48L2J1dHRvbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiZWRpdChzLCBlKVwiIFtiaXpkb2NUb29sdGlwXT1cIidTZXR0aW5ncyd8dHJhbnNsYXRlXCI+PG1hdC1pY29uPnNldHRpbmdzPC9tYXQtaWNvbj48L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbWF0LWNhcmQtYWN0aW9ucz5cbiAgICAgICAgICA8L21hdC1jYXJkPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAocy50ZW1wbGF0ZXM/Lmxlbmd0aCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZGQtZWxlbWVudFwiIG1hdFJpcHBsZSAoY2xpY2spPVwiYWRkKHMsIG1lbnVUcmlnZ2VyLCAkZXZlbnQpXCI+XG4gICAgICAgICAgICA8c3BhbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwidGVtcGxhdGVNZW51XCIgI21lbnVUcmlnZ2VyPVwibWF0TWVudVRyaWdnZXJcIj48L3NwYW4+XG4gICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbj48bWF0LWljb24gW2JpemRvY1Rvb2x0aXBdPVwiJ05ldyd8dHJhbnNsYXRlXCIgZGlzYWJsZVJpcHBsZT1cInRydWVcIj5hZGQ8L21hdC1pY29uPjwvYnV0dG9uPlxuICAgICAgICAgICAgPG1hdC1tZW51ICN0ZW1wbGF0ZU1lbnU+XG4gICAgICAgICAgICAgIEBmb3IgKHQgb2Ygcy50ZW1wbGF0ZXM7IHRyYWNrIHQpIHtcbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImNyZWF0ZShzLCB0KVwiPlxuICAgICAgICAgICAgICAgICAgQGlmICh0LmZhbWlseSkge1xuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICB7e3QuZmFtaWx5fX1cbiAgICAgICAgICAgICAgICAgICAgICAmbmJzcDstJm5ic3A7XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICB7e3QudGl0bGV9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L21hdC1tZW51PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG4gIH1cbjwvZGl2PlxuPCEtLSBzZWFyY2ggZmlsdGVycyAtLT5cbjxuZy10ZW1wbGF0ZSAjZmlsdGVycz5cbiAgPGZvcm0gYXV0b2NvbXBsZXRlPVwib2ZmXCIgY2xhc3M9XCJjb2x1bW4gZ2FwXCIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cbiAgICAgIDxpbnB1dCBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJjb250YWluc1wiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIHBsYWNlaG9sZGVyPVwie3snQ29udGFpbnMnIHwgdHJhbnNsYXRlfX1cIiAjY29udGFpbnM+XG4gICAgICBAaWYgKGZvcm0udmFsdWUuY29udGFpbnMpIHtcbiAgICAgIDxidXR0b24gbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiXCIgKGNsaWNrKT1cImZvcm0uY29udHJvbHMuY29udGFpbnMuc2V0VmFsdWUobnVsbClcIj5cbiAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgfVxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPG1hdC1mb3JtLWZpZWxkIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cbiAgICAgIDxtYXQtbGFiZWw+e3snQ2F0ZWdvcmllcyd8dHJhbnNsYXRlfX08L21hdC1sYWJlbD5cbiAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInNlY3Rpb25zXCIgbXVsdGlwbGU+XG4gICAgICAgIEBmb3IgKGMgb2Ygc2VjdGlvbnM7IHRyYWNrIGMpIHtcbiAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImMudHlwZVwiPnt7Yy50aXRsZX19PC9tYXQtb3B0aW9uPlxuICAgICAgICB9XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICBAaWYoZmFtaWxpZXMubGVuZ3RoKSB7XG4gICAgPG1hdC1mb3JtLWZpZWxkIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIj5cbiAgICAgIDxtYXQtbGFiZWw+e3snRmFtaWxpZXMnfHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XG4gICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJmYW1pbHlcIj5cbiAgICAgICAgPG1hdC1vcHRpb24+e3snQWxsJ3x0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgQGZvciAoZiBvZiBmYW1pbGllczsgdHJhY2sgZikge1xuICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiZlwiPnt7Zn19PC9tYXQtb3B0aW9uPlxuICAgICAgICB9XG4gICAgICA8L21hdC1zZWxlY3Q+XG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICB9XG4gIDwvZm9ybT5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|