ngx-histaff-alpha 2.3.2 → 2.3.4
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/app/libraries/core-contract-seeker/core-contract-seeker/core-contract-seeker.component.mjs +5 -3
- package/esm2022/lib/app/libraries/core-control/core-control/core-control.component.mjs +3 -3
- package/esm2022/lib/app/libraries/core-control-no-grid-buffer/core-control-no-grid-buffer/core-control-no-grid-buffer.component.mjs +2 -2
- package/esm2022/lib/app/libraries/core-currency-input/core-currency-input/core-currency-input.component.mjs +9 -6
- package/esm2022/lib/app/libraries/core-employee-seeker/core-employee-seeker/core-employee-seeker.component.mjs +5 -3
- package/esm2022/lib/app/libraries/core-form/core-form/enum-interfaces.mjs +1 -1
- package/esm2022/lib/app/libraries/core-form-control-seeker/EnumCoreSeekerColumn.mjs +95 -0
- package/esm2022/lib/app/libraries/core-form-control-seeker/core-form-control-seeker/core-form-control-seeker.component.mjs +89 -29
- package/esm2022/lib/app/libraries/core-grid-buffer/core-grid-buffer/core-grid-buffer.component.mjs +1 -1
- package/esm2022/lib/app/libraries/core-job-seeker/core-job-seeker.component.mjs +6 -3
- package/esm2022/lib/app/libraries/core-page-edit/core-page-edit.component.mjs +6 -1
- package/esm2022/lib/app/libraries/core-page-list/core-page-list.component.mjs +2 -2
- package/esm2022/lib/app/libraries/core-page-list-content/core-page-list-content/core-page-list-content.component.mjs +2 -2
- package/esm2022/lib/app/libraries/core-position-concurrent-seeker/core-position-concurrent-seeker/core-position-concurrent-seeker.component.mjs +5 -3
- package/esm2022/lib/app/libraries/core-position-seeker/core-position-seeker/core-position-seeker.component.mjs +5 -3
- package/esm2022/lib/app/libraries/core-table/ICoreTableColumnItem.mjs +1 -1
- package/esm2022/lib/app/libraries/core-table/core-table.component.mjs +7 -5
- package/esm2022/lib/app/libraries/core-wage-seeker/core-wage-seeker/core-wage-seeker.component.mjs +5 -3
- package/esm2022/lib/app/libraries/core-working-seeker/core-working-seeker/core-working-seeker.component.mjs +5 -3
- package/esm2022/lib/app/libraries/decision/decision.component.mjs +4 -2
- package/esm2022/lib/app/libraries/huconcurrently/huconcurrently.component.mjs +6 -4
- package/esm2022/lib/app/libraries/job/job.component.mjs +21 -11
- package/esm2022/lib/app/libraries/position/position.component.mjs +4 -2
- package/esm2022/lib/app/libraries/staffprofile/staffprofile.component.mjs +4 -2
- package/esm2022/lib/app/libraries/wage/wage.component.mjs +4 -64
- package/esm2022/lib/app/root/in-memory/in-memory/in-memory.component.mjs +1 -1
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/ngx-histaff-alpha.mjs +269 -134
- package/fesm2022/ngx-histaff-alpha.mjs.map +1 -1
- package/lib/app/libraries/core-contract-seeker/core-contract-seeker/core-contract-seeker.component.d.ts +3 -1
- package/lib/app/libraries/core-currency-input/core-currency-input/core-currency-input.component.d.ts +3 -2
- package/lib/app/libraries/core-employee-seeker/core-employee-seeker/core-employee-seeker.component.d.ts +3 -1
- package/lib/app/libraries/core-form/core-form/enum-interfaces.d.ts +3 -1
- package/lib/app/libraries/core-form-control-seeker/EnumCoreSeekerColumn.d.ts +87 -0
- package/lib/app/libraries/core-form-control-seeker/core-form-control-seeker/core-form-control-seeker.component.d.ts +16 -2
- package/lib/app/libraries/core-job-seeker/core-job-seeker.component.d.ts +3 -1
- package/lib/app/libraries/core-position-concurrent-seeker/core-position-concurrent-seeker/core-position-concurrent-seeker.component.d.ts +3 -1
- package/lib/app/libraries/core-position-seeker/core-position-seeker/core-position-seeker.component.d.ts +3 -1
- package/lib/app/libraries/core-table/ICoreTableColumnItem.d.ts +8 -0
- package/lib/app/libraries/core-table/core-table.component.d.ts +2 -1
- package/lib/app/libraries/core-wage-seeker/core-wage-seeker/core-wage-seeker.component.d.ts +3 -1
- package/lib/app/libraries/core-working-seeker/core-working-seeker/core-working-seeker.component.d.ts +3 -1
- package/lib/app/libraries/decision/decision.component.d.ts +1 -1
- package/lib/app/libraries/huconcurrently/huconcurrently.component.d.ts +1 -1
- package/lib/app/libraries/job/job.component.d.ts +2 -2
- package/lib/app/libraries/position/position.component.d.ts +1 -1
- package/lib/app/libraries/staffprofile/staffprofile.component.d.ts +1 -1
- package/lib/app/libraries/wage/wage.component.d.ts +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +1 -0
|
@@ -21,6 +21,7 @@ import { MapAvatarToServerPipe } from '../../../app-pipes/map-avatar-to-server.p
|
|
|
21
21
|
import { CorePageEditLiteComponent } from '../../core-page-edit-lite/core-page-edit-lite.component';
|
|
22
22
|
import { CoreJobSeekerComponent } from '../../core-job-seeker/core-job-seeker.component';
|
|
23
23
|
import { CoreStatusStickerComponent } from '../../core-status-sticker/core-status-sticker/core-status-sticker.component';
|
|
24
|
+
import { EnumCoreSeekerColumnJob } from '../EnumCoreSeekerColumn';
|
|
24
25
|
import * as i0 from "@angular/core";
|
|
25
26
|
import * as i1 from "../../alert/alert.service";
|
|
26
27
|
import * as i2 from "../../../services/multi-language.service";
|
|
@@ -30,10 +31,11 @@ import * as i5 from "../../core-contract-seeker/core-contract-seeker/core-contra
|
|
|
30
31
|
import * as i6 from "../../core-working-seeker/core-working-seeker/core-working-seeker.component";
|
|
31
32
|
import * as i7 from "../../core-wage-seeker/core-wage-seeker/core-wage-seeker.component";
|
|
32
33
|
import * as i8 from "../../core-position-seeker/core-position-seeker/core-position-seeker.component";
|
|
33
|
-
import * as i9 from "
|
|
34
|
-
import * as i10 from "
|
|
34
|
+
import * as i9 from "../../core-position-concurrent-seeker/core-position-concurrent-seeker/core-position-concurrent-seeker.component";
|
|
35
|
+
import * as i10 from "../../../services/random-avatar.service";
|
|
36
|
+
import * as i11 from "@angular/common";
|
|
35
37
|
export class CoreFormControlSeekerComponent extends CoreFormControlBaseComponent {
|
|
36
|
-
constructor(alertService, injector, mls, coreJobSeekerComponent, coreEmployeeSeekerComponent, coreContractSeekerComponent, coreWorkingSeekerComponent, coreWageSeekerComponent, corePositionSeekerComponent, ras) {
|
|
38
|
+
constructor(alertService, injector, mls, coreJobSeekerComponent, coreEmployeeSeekerComponent, coreContractSeekerComponent, coreWorkingSeekerComponent, coreWageSeekerComponent, corePositionSeekerComponent, corePositionConcurrentSeekerComponent, ras) {
|
|
37
39
|
super();
|
|
38
40
|
this.alertService = alertService;
|
|
39
41
|
this.injector = injector;
|
|
@@ -44,6 +46,7 @@ export class CoreFormControlSeekerComponent extends CoreFormControlBaseComponent
|
|
|
44
46
|
this.coreWorkingSeekerComponent = coreWorkingSeekerComponent;
|
|
45
47
|
this.coreWageSeekerComponent = coreWageSeekerComponent;
|
|
46
48
|
this.corePositionSeekerComponent = corePositionSeekerComponent;
|
|
49
|
+
this.corePositionConcurrentSeekerComponent = corePositionConcurrentSeekerComponent;
|
|
47
50
|
this.ras = ras;
|
|
48
51
|
this.isDevMode = isDevMode();
|
|
49
52
|
this.onDoubleClick = new EventEmitter();
|
|
@@ -58,44 +61,69 @@ export class CoreFormControlSeekerComponent extends CoreFormControlBaseComponent
|
|
|
58
61
|
caption: EnumTranslateKey.UI_CORE_CONTROL_TABLE_TOOL_DELETE
|
|
59
62
|
}];
|
|
60
63
|
this.hideFooter = false;
|
|
64
|
+
this.indirectBindingLastVirtualId = 0;
|
|
61
65
|
this.excludedIds$ = new BehaviorSubject([]);
|
|
66
|
+
this.excludedColumnsJob = [
|
|
67
|
+
EnumCoreSeekerColumnJob.JOB_FAMILY,
|
|
68
|
+
EnumCoreSeekerColumnJob.JOB_PURPOSE,
|
|
69
|
+
EnumCoreSeekerColumnJob.JOB_NOTE,
|
|
70
|
+
];
|
|
71
|
+
this.excludedColumnsEmployee = [];
|
|
72
|
+
this.excludedColumnsContract = [];
|
|
73
|
+
this.excludedColumnsWorking = [];
|
|
74
|
+
this.excludedColumnsWage = [];
|
|
75
|
+
this.excludedColumnsPosition = [];
|
|
76
|
+
this.excludedColumnsPositionConcurrent = [];
|
|
62
77
|
this.defaultAvatar = ras.get();
|
|
63
78
|
}
|
|
64
79
|
asignMultiModeColumns() {
|
|
65
80
|
switch (this.seekerSourceType) {
|
|
66
81
|
case EnumCoreFormControlSeekerSourceType.JOB_SEEK:
|
|
82
|
+
const jobColumns = this.coreJobSeekerComponent.columns.filter(x => !!x.jobSeekerColumnCode ? !this.excludedColumnsJob.includes(x.jobSeekerColumnCode) : true);
|
|
67
83
|
if (!!this.multiModeExtendedColumns) {
|
|
68
|
-
this.multiModeColumns = [...
|
|
84
|
+
this.multiModeColumns = [...jobColumns, ...this.multiModeExtendedColumns];
|
|
69
85
|
}
|
|
70
86
|
else {
|
|
71
|
-
this.multiModeColumns =
|
|
87
|
+
this.multiModeColumns = jobColumns;
|
|
72
88
|
}
|
|
73
89
|
if (!!!this.multiMode) {
|
|
74
90
|
this.hideFooter = true;
|
|
75
91
|
}
|
|
76
92
|
break;
|
|
77
93
|
case EnumCoreFormControlSeekerSourceType.EMPLOYEE_SEEK:
|
|
94
|
+
const employeeColumns = this.coreEmployeeSeekerComponent.columns.filter(x => !!x.employeeSeekerColumnCode ? !this.excludedColumnsEmployee.includes(x.employeeSeekerColumnCode) : true);
|
|
78
95
|
if (!!this.multiModeExtendedColumns) {
|
|
79
|
-
this.multiModeColumns = [...
|
|
96
|
+
this.multiModeColumns = [...employeeColumns, ...this.multiModeExtendedColumns];
|
|
80
97
|
}
|
|
81
98
|
else {
|
|
82
|
-
this.multiModeColumns =
|
|
99
|
+
this.multiModeColumns = employeeColumns;
|
|
83
100
|
}
|
|
84
101
|
if (!!!this.multiMode) {
|
|
85
102
|
this.hideFooter = true;
|
|
86
103
|
}
|
|
87
104
|
break;
|
|
88
105
|
case EnumCoreFormControlSeekerSourceType.CONTRACT_SEEK:
|
|
89
|
-
|
|
106
|
+
const contractColumns = this.coreContractSeekerComponent.columns.filter(x => !!x.contractSeekerColumnCode ? !this.excludedColumnsContract.includes(x.contractSeekerColumnCode) : true);
|
|
107
|
+
this.multiModeColumns = contractColumns;
|
|
90
108
|
break;
|
|
91
109
|
case EnumCoreFormControlSeekerSourceType.WORKING_SEEK:
|
|
92
|
-
|
|
110
|
+
const workingColumns = this.coreWorkingSeekerComponent.columns.filter(x => !!x.workingSeekerColumnCode ? !this.excludedColumnsWorking.includes(x.workingSeekerColumnCode) : true);
|
|
111
|
+
this.multiModeColumns = workingColumns;
|
|
93
112
|
break;
|
|
94
113
|
case EnumCoreFormControlSeekerSourceType.WAGE_SEEK:
|
|
95
|
-
|
|
114
|
+
const wageColumns = this.coreWageSeekerComponent.columns.filter(x => !!x.wageSeekerColumnCode ? !this.excludedColumnsWage.includes(x.wageSeekerColumnCode) : true);
|
|
115
|
+
this.multiModeColumns = wageColumns;
|
|
96
116
|
break;
|
|
97
117
|
case EnumCoreFormControlSeekerSourceType.POSITION_SEEK:
|
|
98
|
-
|
|
118
|
+
const positionColumns = this.corePositionSeekerComponent.columns.filter(x => !!x.positionSeekerColumnCode ? !this.excludedColumnsPosition.includes(x.positionSeekerColumnCode) : true);
|
|
119
|
+
this.multiModeColumns = positionColumns;
|
|
120
|
+
if (!!!this.multiMode) {
|
|
121
|
+
this.hideFooter = true;
|
|
122
|
+
}
|
|
123
|
+
break;
|
|
124
|
+
case EnumCoreFormControlSeekerSourceType.POSITION_CONCURRENT_SEEK:
|
|
125
|
+
const positionConcurrentColumns = this.corePositionConcurrentSeekerComponent.columns.filter(x => !!x.positionConcurrentSeekerColumnCode ? !this.excludedColumnsPositionConcurrent.includes(x.positionConcurrentSeekerColumnCode) : true);
|
|
126
|
+
this.multiModeColumns = positionConcurrentColumns;
|
|
99
127
|
if (!!!this.multiMode) {
|
|
100
128
|
this.hideFooter = true;
|
|
101
129
|
}
|
|
@@ -148,11 +176,11 @@ export class CoreFormControlSeekerComponent extends CoreFormControlBaseComponent
|
|
|
148
176
|
getByIdObject$: BehaviorSubject<any> (for '${this.ngControl.name}')`);
|
|
149
177
|
}
|
|
150
178
|
}
|
|
151
|
-
if (
|
|
179
|
+
if (!this.boundFrom && !this.multiMode) {
|
|
152
180
|
this.alertService.error(`All _SEEKER controls require input:
|
|
153
181
|
boundFrom: string; (for '${this.ngControl.name}')`, noneAutoClosedAlertOptions);
|
|
154
182
|
}
|
|
155
|
-
if (!!!this.shownFrom) {
|
|
183
|
+
if (!!!this.shownFrom && !this.multiMode) {
|
|
156
184
|
this.alertService.error(`All _SEEKER controls require input:
|
|
157
185
|
shownFrom: string; (for '${this.ngControl.name}')`, noneAutoClosedAlertOptions);
|
|
158
186
|
}
|
|
@@ -177,7 +205,21 @@ export class CoreFormControlSeekerComponent extends CoreFormControlBaseComponent
|
|
|
177
205
|
}
|
|
178
206
|
}));
|
|
179
207
|
if (!!this.objectList$) {
|
|
180
|
-
this.subscriptions.push(this.objectList$.subscribe(x =>
|
|
208
|
+
this.subscriptions.push(this.objectList$.subscribe(x => {
|
|
209
|
+
this.selectedData = x;
|
|
210
|
+
if (this.excludeExistingList) {
|
|
211
|
+
const newExcludedIds = [];
|
|
212
|
+
x.map(i => {
|
|
213
|
+
if (!this.indirectBinding) {
|
|
214
|
+
newExcludedIds.push(i.id);
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
newExcludedIds.push(i[this.bindGridIdTo]);
|
|
218
|
+
}
|
|
219
|
+
});
|
|
220
|
+
this.excludedIds$.next(newExcludedIds);
|
|
221
|
+
}
|
|
222
|
+
}));
|
|
181
223
|
}
|
|
182
224
|
});
|
|
183
225
|
}
|
|
@@ -202,7 +244,7 @@ export class CoreFormControlSeekerComponent extends CoreFormControlBaseComponent
|
|
|
202
244
|
onSelect() {
|
|
203
245
|
if (!!this.multiMode) {
|
|
204
246
|
if (!this.indirectBinding) {
|
|
205
|
-
const filter = this.pendingSelectedData.filter(x => this.selectedData.filter(y => y.id === x.
|
|
247
|
+
const filter = this.pendingSelectedData.filter(x => this.selectedData.filter(y => y.id === x.id).length === 0);
|
|
206
248
|
const newSelectedData = [...this.selectedData, ...filter];
|
|
207
249
|
const newSelectedIds = [];
|
|
208
250
|
newSelectedData.map(x => newSelectedIds.push(x.id));
|
|
@@ -214,17 +256,18 @@ export class CoreFormControlSeekerComponent extends CoreFormControlBaseComponent
|
|
|
214
256
|
this.sourceOpen = false;
|
|
215
257
|
}
|
|
216
258
|
else {
|
|
217
|
-
this.pendingSelectedData.map(
|
|
259
|
+
this.pendingSelectedData.map(x => {
|
|
218
260
|
// gán id của lưới nguồn vào cột cần thiết
|
|
219
261
|
x[this.bindGridIdTo] = x.id;
|
|
220
262
|
// sau đó hoán id này sang giá trị ảo, each "x" item must have an unique id
|
|
221
|
-
|
|
263
|
+
this.indirectBindingLastVirtualId -= 1;
|
|
264
|
+
x.id = this.indirectBindingLastVirtualId; // using nagative value to bypass (loosing of/confusing with) existing ids
|
|
222
265
|
});
|
|
223
266
|
const newSelectedData = [...this.selectedData, ...this.pendingSelectedData];
|
|
224
|
-
const newSelectedIds = [];
|
|
225
|
-
newSelectedData.map(x => newSelectedIds.push(x.id))
|
|
267
|
+
// const newSelectedIds: any[] = [];
|
|
268
|
+
// newSelectedData.map(x => newSelectedIds.push(x.id))
|
|
226
269
|
this.objectList$.next(newSelectedData);
|
|
227
|
-
this.value =
|
|
270
|
+
this.value = newSelectedData;
|
|
228
271
|
this.markAsTouched();
|
|
229
272
|
this.onChange(newSelectedData);
|
|
230
273
|
this.pendingSelectedData = [];
|
|
@@ -303,10 +346,16 @@ export class CoreFormControlSeekerComponent extends CoreFormControlBaseComponent
|
|
|
303
346
|
onToolClick(e) {
|
|
304
347
|
if (e.code === ECoreTableToolCode.delete) {
|
|
305
348
|
const newObjectList = this.objectList$.value.filter(x => x.id !== e.id);
|
|
306
|
-
const newIds = this.value.filter((x) => x !== e.id);
|
|
307
|
-
this.value = newIds;
|
|
308
349
|
this.objectList$.next(newObjectList);
|
|
309
|
-
this.
|
|
350
|
+
if (!this.indirectBinding) {
|
|
351
|
+
const newIds = this.value.filter((x) => x !== e.id);
|
|
352
|
+
this.value = newIds;
|
|
353
|
+
this.onChange(newIds);
|
|
354
|
+
}
|
|
355
|
+
else {
|
|
356
|
+
this.value = newObjectList;
|
|
357
|
+
this.onChange(newObjectList);
|
|
358
|
+
}
|
|
310
359
|
this.markAsTouched();
|
|
311
360
|
}
|
|
312
361
|
}
|
|
@@ -316,6 +365,8 @@ export class CoreFormControlSeekerComponent extends CoreFormControlBaseComponent
|
|
|
316
365
|
this.valueToShow = "";
|
|
317
366
|
}
|
|
318
367
|
onSelectedDataRowDoubleClick(e) {
|
|
368
|
+
if (!this.editBufferData$)
|
|
369
|
+
return;
|
|
319
370
|
console.log("Given row data: ", e);
|
|
320
371
|
if (!e.id) {
|
|
321
372
|
if (isDevMode()) {
|
|
@@ -377,8 +428,11 @@ export class CoreFormControlSeekerComponent extends CoreFormControlBaseComponent
|
|
|
377
428
|
onEditBufferFormCreated(e) {
|
|
378
429
|
this.editBufferForm = e;
|
|
379
430
|
}
|
|
380
|
-
|
|
381
|
-
|
|
431
|
+
isSourceOpen() {
|
|
432
|
+
return this.sourceOpen;
|
|
433
|
+
}
|
|
434
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreFormControlSeekerComponent, deps: [{ token: i1.AlertService }, { token: i0.Injector }, { token: i2.MultiLanguageService }, { token: i3.CoreJobSeekerComponent }, { token: i4.CoreEmployeeSeekerComponent }, { token: i5.CoreContractSeekerComponent }, { token: i6.CoreWorkingSeekerComponent }, { token: i7.CoreWageSeekerComponent }, { token: i8.CorePositionSeekerComponent }, { token: i9.CorePositionConcurrentSeekerComponent }, { token: i10.RandomAvatarService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
435
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.2.3", type: CoreFormControlSeekerComponent, isStandalone: true, selector: "core-form-control-seeker", inputs: { title: "title", showPageHeader: "showPageHeader", preDefinedOuterParam$: "preDefinedOuterParam$", click$: "click$", getByIdObject$: "getByIdObject$", paramMode: "paramMode", multiMode: "multiMode", objectList$: "objectList$", shownSeekerColumns: "shownSeekerColumns", excludeExistingList: "excludeExistingList", indirectBinding: "indirectBinding", bindGridIdTo: "bindGridIdTo", multiModeExtendedColumns: "multiModeExtendedColumns", multiModeExtendedSections: "multiModeExtendedSections", editBufferData$: "editBufferData$", multiModeTableHeight: "multiModeTableHeight", multiModeRowHeight: "multiModeRowHeight", seekerSourceType: "seekerSourceType", boundFrom: "boundFrom", shownFrom: "shownFrom", alsoBindTo: "alsoBindTo", seekerVerifyIgnore: "seekerVerifyIgnore" }, outputs: { onDoubleClick: "onDoubleClick" }, providers: [
|
|
382
436
|
{
|
|
383
437
|
provide: NG_VALUE_ACCESSOR,
|
|
384
438
|
multi: true,
|
|
@@ -390,7 +444,8 @@ export class CoreFormControlSeekerComponent extends CoreFormControlBaseComponent
|
|
|
390
444
|
CoreWorkingSeekerComponent,
|
|
391
445
|
CoreWageSeekerComponent,
|
|
392
446
|
CorePositionSeekerComponent,
|
|
393
|
-
], viewQueries: [{ propertyName: "avatar", first: true, predicate: ["avatar"], descendants: true }, { propertyName: "sticker", first: true, predicate: ["sticker"], descendants: true }, { propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div #container class=\"core-form-control-seeker-container\">\r\n <div class=\"input-wrapper\" [class.d-none]=\"!!multiMode\">\r\n <label #shownText type=\"text\" class=\"text form-control\" [class.form-control-disabled]=\"disabled\">\r\n <span [appTooltip]=\"valueToShow\">{{ valueToShow }}</span>\r\n </label>\r\n @if (!multiMode) {\r\n <div class=\"clear-icon-wrapper\" [class.d-none]=\"!!disabled || !!!value\" (click)=\"onClickClear()\">\r\n <div class=\"flex-wrapper\" [appTooltip]=\"'UI.CORE_CONTOL_COMMON_CLEAR' | translate: lang\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"seeker-icon-wrapper\" [class.form-control-disabled]=\"disabled\" [class.multi-mode]=\"!!multiMode\"\r\n (click)=\"onClickSeek()\">\r\n <div class=\"flex-wrapper\" [class.form-control-disabled]=\"disabled\">\r\n <i class=\"feather-search\"></i>\r\n </div>\r\n </div>\r\n @if (!!multiMode) {\r\n <div class=\"core-tabbe-wrapper\">\r\n <core-table [columns]=\"multiModeColumns\" [data]=\"selectedData\" [showTools]=\"!!!disabled\" [tools]=\"tools\"\r\n [searchSwitchDisabled]=\"true\" (onToolClick)=\"onToolClick($event)\"\r\n (onRowDoubleClick)=\"onSelectedDataRowDoubleClick($event)\"></core-table>\r\n </div>\r\n }\r\n\r\n @if (!!sourceOpen) {\r\n <div class=\"modal-container\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header-panel\">\r\n <core-page-header [title]=\"title\" [hideButtonGroup]=\"true\" *ngIf=\"showPageHeader\"></core-page-header>\r\n </div>\r\n <div class=\"source-container\">\r\n <i class=\"feather-x\" (click)=\"onCancel()\"\r\n [class.d-block]=\"seekerSourceType==='ORGANIZATION_UNIT_SEEK'\"></i>\r\n\r\n\r\n @switch (seekerSourceType) {\r\n @case ('JOB_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"jobSeek\">\r\n </ng-container>\r\n }\r\n @case ('EMPLOYEE_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"employeeSeek\">\r\n </ng-container>\r\n }\r\n @case ('CONTRACT_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"contractSeek\">\r\n </ng-container>\r\n }\r\n @case ('WORKING_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"workingSeek\">\r\n </ng-container>\r\n }\r\n @case ('WAGE_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"wageSeek\">\r\n </ng-container>\r\n }\r\n @case ('ORGANIZATION_UNIT_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"organizationUnitSeek\">\r\n </ng-container>\r\n }\r\n @case ('POSITION_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"positionSeek\">\r\n </ng-container>\r\n }\r\n @case ('POSITION_CONCURRENT_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"positionConcurrentSeek\">\r\n </ng-container>\r\n }\r\n }\r\n\r\n </div>\r\n\r\n @if (!hideFooter) {\r\n <div class=\"footer\">\r\n <div class=\"d-flex-end\">\r\n @if (!!pendingSelectedData?.length) {\r\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"onSelect()\">{{\r\n 'UI_CORE_CONFIRM_DIALOG_BUTTON_SELECT' | translate: lang }}</button>\r\n }\r\n <button class=\"btn btn-secondary\" type=\"button\" (click)=\"onCancel()\">{{\r\n 'UI_CORE_CONFIRM_DIALOG_BUTTON_CANCEL' | translate: lang }}</button>\r\n </div>\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n }\r\n\r\n</div>\r\n\r\n<ng-template #jobSeek>\r\n <core-job-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-job-seeker>\r\n</ng-template>\r\n\r\n<ng-template #employeeSeek>\r\n <core-employee-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-employee-seeker>\r\n</ng-template>\r\n\r\n<ng-template #contractSeek>\r\n <core-contract-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-contract-seeker>\r\n</ng-template>\r\n\r\n<ng-template #workingSeek>\r\n <core-working-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-working-seeker>\r\n</ng-template>\r\n\r\n<ng-template #wageSeek>\r\n <core-wage-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-wage-seeker>\r\n</ng-template>\r\n\r\n<ng-template #positionSeek>\r\n <core-position-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n [seekerVerifyIgnore]=\"seekerVerifyIgnore\" (rowDoubleClick)=\"onRowDoubleClick($event)\"\r\n (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-position-seeker>\r\n</ng-template>\r\n\r\n<ng-template #positionConcurrentSeek>\r\n <core-position-concurrent-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-position-concurrent-seeker>\r\n</ng-template>\r\n\r\n<ng-template #organizationUnitSeek>\r\n <core-org-unit-seeker [excludedIds$]=\"excludedIds$\" (itemDoubleClick)=\"onItemDoubleClick($event)\"></core-org-unit-seeker>\r\n</ng-template>\r\n\r\n<ng-template #avatar let-avatar=\"context.avatar\">\r\n <img *ngIf=\"avatar != null\" [src]=\"avatar | mapAvatarToServer\" class=\"in-table-avatar\" appImageErrorResolver>\r\n <img *ngIf=\"avatar == null\" [src]=\"defaultAvatar\" class=\"in-table-avatar\" appImageErrorResolver>\r\n</ng-template>\r\n<ng-template #sticker let-code=\"context.actflg\">\r\n <core-status-sticker [code]=\"code\" [isTrueCode]=\"true\"></core-status-sticker>\r\n</ng-template>\r\n\r\n<div [class.d-none]=\"!showEditBuffer\">\r\n <core-page-edit-lite [sections]=\"multiModeExtendedSections\" (onFormCreated)=\"onEditBufferFormCreated($event)\"\r\n (submitLogic)=\"onEditBufferSubmit($event)\" (cancelLogic)=\"onEditBufferCancel($event)\"></core-page-edit-lite>\r\n</div>", styles: [".core-form-control-seeker-container{display:block;position:relative;background-color:#fff}.core-form-control-seeker-container>.seeker-icon-wrapper{display:block;position:absolute;background-color:#e9e9e9;right:3px;top:3px;width:29px;height:29px;border-radius:.275rem;cursor:pointer}.core-form-control-seeker-container>.seeker-icon-wrapper>.flex-wrapper{width:29px;height:29px;display:flex;align-items:center;justify-content:center}.core-form-control-seeker-container>.seeker-icon-wrapper>.flex-wrapper>i{color:#848484;font-size:20px}.core-form-control-seeker-container .input-wrapper{height:var(--size-form-control-height)}.core-form-control-seeker-container .input-wrapper label.text span{display:block;height:calc(var(--size-form-control-height) - 12px);line-height:calc(var(--size-form-control-height) - 12px);width:calc(100% - var(--size-form-control-height));overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:inherit}.core-form-control-seeker-container .input-wrapper .clear-icon-wrapper{display:none;position:absolute;background-color:transparent;right:28px;top:3px;width:29px;height:29px;border-radius:.275rem;cursor:pointer}.core-form-control-seeker-container .input-wrapper .clear-icon-wrapper>.flex-wrapper{width:29px;height:29px;display:flex;align-items:center;justify-content:center}.core-form-control-seeker-container .input-wrapper .clear-icon-wrapper>.flex-wrapper>i{color:#848484;font-size:20px}.core-form-control-seeker-container .input-wrapper:hover>.clear-icon-wrapper{display:block}.core-form-control-seeker-container>.seeker-icon-wrapper.multi-mode{position:relative;width:35px;height:35px}.core-form-control-seeker-container>.seeker-icon-wrapper.multi-mode>.flex-wrapper{width:35px;height:35px}.core-form-control-seeker-container .source-container{display:block;background-color:#fff;padding:var(--size-layout-block-cell-spacing);max-width:1200px;max-height:800px;overflow:hidden;border-radius:10px}.core-form-control-seeker-container .source-container i{font-size:20px;cursor:pointer;float:right}.core-form-control-seeker-container .source-container.d-none{display:none}.core-form-control-seeker-container .source-container>caption{display:block;width:100%}.core-form-control-seeker-container .source-container:has(~.footer){border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.core-form-control-seeker-container .footer{background-color:var(--color-bg-main);border-bottom-left-radius:10px;border-bottom-right-radius:10px;padding:var(--size-layout-block-cell-spacing)}.core-form-control-seeker-container .footer button:first-child{margin-right:var(--size-layout-block-cell-spacing)}.core-form-control-seeker-container .core-tabbe-wrapper{margin-top:5px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: MapAvatarToServerPipe, name: "mapAvatarToServer" }, { kind: "component", type: CoreJobSeekerComponent, selector: "core-job-seeker", inputs: ["multiMode", "preDefinedOuterParam$", "excludedIds$"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CorePageEditLiteComponent, selector: "core-page-edit-lite", inputs: ["width", "captionCode", "sections", "submitText", "checkError$"], outputs: ["onFormCreated", "submitLogic", "cancelLogic"] }, { kind: "component", type: CoreTableComponent, selector: "core-table", inputs: ["id", "width", "height", "showCheckbox", "checkboxSize", "outerButtons", "showTools", "tools", "checkingResetFlag", "headerWrap", "headerFirstRowHeight", "headerSecondRowHeight", "wrap", "allowCellScrollY", "loading", "rowHeight", "frozen", "footer", "columns", "data", "selectedIds", "corePageListInstanceNumber", "disableHighlightOnClick", "freeMode", "searchSwitchDisabled", "inlineToolItems", "columnSearchDefaultOpen", "lazyLoading", "noPaddingCell"], outputs: ["onSearching", "onToolClick", "onRowClick", "onRowDoubleClick", "onSelectedIdsChange", "onSelectedDataChange", "onColumnCaptionClick"] }, { kind: "component", type: CoreStatusStickerComponent, selector: "core-status-sticker", inputs: ["code", "isTrueCode"] }, { kind: "component", type: CoreEmployeeSeekerComponent, selector: "core-employee-seeker", inputs: ["multiMode", "preDefinedOuterParam$", "excludedIds$"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CoreContractSeekerComponent, selector: "core-contract-seeker", inputs: ["multiMode", "preDefinedOuterParam$", "excludedIds$"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CoreWorkingSeekerComponent, selector: "core-working-seeker", inputs: ["multiMode", "preDefinedOuterParam$", "excludedIds$"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CoreWageSeekerComponent, selector: "core-wage-seeker", inputs: ["multiMode", "preDefinedOuterParam$", "excludedIds$", "employeeId"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CoreOrgUnitSeekerComponent, selector: "core-org-unit-seeker", inputs: ["excludedIds$"], outputs: ["itemDoubleClick"] }, { kind: "component", type: CorePositionSeekerComponent, selector: "core-position-seeker", inputs: ["multiMode", "preDefinedOuterParam$", "excludedIds$", "seekerVerifyIgnore"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CorePositionConcurrentSeekerComponent, selector: "core-position-concurrent-seeker", inputs: ["multiMode", "preDefinedOuterParam$", "excludedIds$"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CorePageHeaderComponent, selector: "core-page-header", inputs: ["instanceNumber", "shownItems", "title", "hideButtonGroup"], outputs: ["buttonClick"] }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "showAnyway", "position"] }] }); }
|
|
447
|
+
CorePositionConcurrentSeekerComponent,
|
|
448
|
+
], viewQueries: [{ propertyName: "avatar", first: true, predicate: ["avatar"], descendants: true }, { propertyName: "sticker", first: true, predicate: ["sticker"], descendants: true }, { propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div #container class=\"core-form-control-seeker-container\">\r\n <div class=\"input-wrapper\" [class.d-none]=\"!!multiMode\">\r\n <label #shownText type=\"text\" class=\"text form-control\" [class.form-control-disabled]=\"disabled\">\r\n <span [appTooltip]=\"valueToShow\">{{ valueToShow }}</span>\r\n </label>\r\n @if (!multiMode) {\r\n <div class=\"clear-icon-wrapper\" [class.d-none]=\"!!disabled || !!!value\" (click)=\"onClickClear()\">\r\n <div class=\"flex-wrapper\" [appTooltip]=\"'UI.CORE_CONTOL_COMMON_CLEAR' | translate: lang\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"seeker-icon-wrapper\" [class.form-control-disabled]=\"disabled\" [class.multi-mode]=\"!!multiMode\"\r\n (click)=\"onClickSeek()\">\r\n <div class=\"flex-wrapper\" [class.form-control-disabled]=\"disabled\">\r\n <i class=\"feather-search\"></i>\r\n </div>\r\n </div>\r\n @if (!!multiMode) {\r\n <div class=\"core-tabbe-wrapper\">\r\n <core-table [height]=\"multiModeTableHeight\" [columns]=\"multiModeColumns\" [data]=\"selectedData\" [showTools]=\"!!!disabled\" [tools]=\"tools\"\r\n [lazyLoading]=\"true\" [rowHeight]=\"(multiModeRowHeight || 46) + 'px'\" [searchSwitchDisabled]=\"true\" [disableSorting]=\"true\"\r\n (onToolClick)=\"onToolClick($event)\" (onRowDoubleClick)=\"onSelectedDataRowDoubleClick($event)\"></core-table>\r\n </div>\r\n }\r\n\r\n @if (!!sourceOpen) {\r\n <div class=\"modal-container\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header-panel\">\r\n <core-page-header [title]=\"title\" [hideButtonGroup]=\"true\" *ngIf=\"showPageHeader\"></core-page-header>\r\n </div>\r\n <div class=\"source-container\">\r\n <i class=\"feather-x\" (click)=\"onCancel()\"\r\n [class.d-block]=\"seekerSourceType==='ORGANIZATION_UNIT_SEEK'\"></i>\r\n\r\n\r\n @switch (seekerSourceType) {\r\n @case ('JOB_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"jobSeek\">\r\n </ng-container>\r\n }\r\n @case ('EMPLOYEE_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"employeeSeek\">\r\n </ng-container>\r\n }\r\n @case ('CONTRACT_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"contractSeek\">\r\n </ng-container>\r\n }\r\n @case ('WORKING_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"workingSeek\">\r\n </ng-container>\r\n }\r\n @case ('WAGE_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"wageSeek\">\r\n </ng-container>\r\n }\r\n @case ('ORGANIZATION_UNIT_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"organizationUnitSeek\">\r\n </ng-container>\r\n }\r\n @case ('POSITION_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"positionSeek\">\r\n </ng-container>\r\n }\r\n @case ('POSITION_CONCURRENT_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"positionConcurrentSeek\">\r\n </ng-container>\r\n }\r\n }\r\n\r\n </div>\r\n\r\n @if (!hideFooter) {\r\n <div class=\"footer\">\r\n <div class=\"d-flex-end\">\r\n @if (!!pendingSelectedData?.length) {\r\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"onSelect()\">{{\r\n 'UI_CORE_CONFIRM_DIALOG_BUTTON_SELECT' | translate: lang }}</button>\r\n }\r\n <button class=\"btn btn-secondary\" type=\"button\" (click)=\"onCancel()\">{{\r\n 'UI_CORE_CONFIRM_DIALOG_BUTTON_CANCEL' | translate: lang }}</button>\r\n </div>\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n }\r\n\r\n</div>\r\n\r\n<ng-template #jobSeek>\r\n <core-job-seeker [excludedColumns]=\"excludedColumnsJob\" [preDefinedOuterParam$]=\"preDefinedOuterParam$\"\r\n [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\" (rowDoubleClick)=\"onRowDoubleClick($event)\"\r\n (columnsInit)=\"onColumnsInit($event)\" (selectedDataChange)=\"onSelectedDataChange($event)\"></core-job-seeker>\r\n</ng-template>\r\n\r\n<ng-template #employeeSeek>\r\n <core-employee-seeker [excludedColumns]=\"excludedColumnsEmployee\" [preDefinedOuterParam$]=\"preDefinedOuterParam$\"\r\n [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\" (rowDoubleClick)=\"onRowDoubleClick($event)\"\r\n (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-employee-seeker>\r\n</ng-template>\r\n\r\n<ng-template #contractSeek>\r\n <core-contract-seeker [excludedColumns]=\"excludedColumnsContract\" [preDefinedOuterParam$]=\"preDefinedOuterParam$\"\r\n [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\" (rowDoubleClick)=\"onRowDoubleClick($event)\"\r\n (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-contract-seeker>\r\n</ng-template>\r\n\r\n<ng-template #workingSeek>\r\n <core-working-seeker [excludedColumns]=\"excludedColumnsWorking\" [preDefinedOuterParam$]=\"preDefinedOuterParam$\"\r\n [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\" (rowDoubleClick)=\"onRowDoubleClick($event)\"\r\n (columnsInit)=\"onColumnsInit($event)\" (selectedDataChange)=\"onSelectedDataChange($event)\"></core-working-seeker>\r\n</ng-template>\r\n\r\n<ng-template #wageSeek>\r\n <core-wage-seeker [excludedColumns]=\"excludedColumnsWage\" [preDefinedOuterParam$]=\"preDefinedOuterParam$\"\r\n [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\" (rowDoubleClick)=\"onRowDoubleClick($event)\"\r\n (columnsInit)=\"onColumnsInit($event)\" (selectedDataChange)=\"onSelectedDataChange($event)\"></core-wage-seeker>\r\n</ng-template>\r\n\r\n<ng-template #positionSeek>\r\n <core-position-seeker [excludedColumns]=\"excludedColumnsPosition\" [preDefinedOuterParam$]=\"preDefinedOuterParam$\"\r\n [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\" [seekerVerifyIgnore]=\"seekerVerifyIgnore\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-position-seeker>\r\n</ng-template>\r\n\r\n<ng-template #positionConcurrentSeek>\r\n <core-position-concurrent-seeker [excludedColumns]=\"excludedColumnsPositionConcurrent\"\r\n [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-position-concurrent-seeker>\r\n</ng-template>\r\n\r\n<ng-template #organizationUnitSeek>\r\n <core-org-unit-seeker [excludedIds$]=\"excludedIds$\"\r\n (itemDoubleClick)=\"onItemDoubleClick($event)\"></core-org-unit-seeker>\r\n</ng-template>\r\n\r\n<ng-template #avatar let-avatar=\"context.avatar\">\r\n <img *ngIf=\"avatar != null\" [src]=\"avatar | mapAvatarToServer\" class=\"in-table-avatar\" appImageErrorResolver>\r\n <img *ngIf=\"avatar == null\" [src]=\"defaultAvatar\" class=\"in-table-avatar\" appImageErrorResolver>\r\n</ng-template>\r\n<ng-template #sticker let-code=\"context.actflg\">\r\n <core-status-sticker [code]=\"code\" [isTrueCode]=\"true\"></core-status-sticker>\r\n</ng-template>\r\n\r\n<div [class.d-none]=\"!showEditBuffer\">\r\n <core-page-edit-lite [sections]=\"multiModeExtendedSections\" (onFormCreated)=\"onEditBufferFormCreated($event)\"\r\n (submitLogic)=\"onEditBufferSubmit($event)\" (cancelLogic)=\"onEditBufferCancel($event)\"></core-page-edit-lite>\r\n</div>", styles: [".core-form-control-seeker-container{display:block;position:relative;background-color:#fff}.core-form-control-seeker-container>.seeker-icon-wrapper{display:block;position:absolute;background-color:#e9e9e9;right:3px;top:3px;width:29px;height:29px;border-radius:.275rem;cursor:pointer}.core-form-control-seeker-container>.seeker-icon-wrapper>.flex-wrapper{width:29px;height:29px;display:flex;align-items:center;justify-content:center}.core-form-control-seeker-container>.seeker-icon-wrapper>.flex-wrapper>i{color:#848484;font-size:20px}.core-form-control-seeker-container .input-wrapper{height:var(--size-form-control-height)}.core-form-control-seeker-container .input-wrapper label.text span{display:block;height:calc(var(--size-form-control-height) - 12px);line-height:calc(var(--size-form-control-height) - 12px);width:calc(100% - var(--size-form-control-height));overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:inherit}.core-form-control-seeker-container .input-wrapper .clear-icon-wrapper{display:none;position:absolute;background-color:transparent;right:28px;top:3px;width:29px;height:29px;border-radius:.275rem;cursor:pointer}.core-form-control-seeker-container .input-wrapper .clear-icon-wrapper>.flex-wrapper{width:29px;height:29px;display:flex;align-items:center;justify-content:center}.core-form-control-seeker-container .input-wrapper .clear-icon-wrapper>.flex-wrapper>i{color:#848484;font-size:20px}.core-form-control-seeker-container .input-wrapper:hover>.clear-icon-wrapper{display:block}.core-form-control-seeker-container>.seeker-icon-wrapper.multi-mode{position:relative;width:35px;height:35px}.core-form-control-seeker-container>.seeker-icon-wrapper.multi-mode>.flex-wrapper{width:35px;height:35px}.core-form-control-seeker-container .source-container{display:block;background-color:#fff;padding:var(--size-layout-block-cell-spacing);max-width:1200px;max-height:800px;overflow:hidden;border-radius:10px}.core-form-control-seeker-container .source-container i{font-size:20px;cursor:pointer;float:right}.core-form-control-seeker-container .source-container.d-none{display:none}.core-form-control-seeker-container .source-container>caption{display:block;width:100%}.core-form-control-seeker-container .source-container:has(~.footer){border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.core-form-control-seeker-container .footer{background-color:var(--color-bg-main);border-bottom-left-radius:10px;border-bottom-right-radius:10px;padding:var(--size-layout-block-cell-spacing)}.core-form-control-seeker-container .footer button:first-child{margin-right:var(--size-layout-block-cell-spacing)}.core-form-control-seeker-container .core-tabbe-wrapper{margin-top:5px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i11.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: FormsModule }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "pipe", type: MapAvatarToServerPipe, name: "mapAvatarToServer" }, { kind: "component", type: CoreJobSeekerComponent, selector: "core-job-seeker", inputs: ["excludedColumns", "multiMode", "preDefinedOuterParam$", "excludedIds$"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CorePageEditLiteComponent, selector: "core-page-edit-lite", inputs: ["width", "captionCode", "sections", "submitText", "checkError$"], outputs: ["onFormCreated", "submitLogic", "cancelLogic"] }, { kind: "component", type: CoreTableComponent, selector: "core-table", inputs: ["id", "width", "height", "showCheckbox", "checkboxSize", "outerButtons", "showTools", "tools", "checkingResetFlag", "headerWrap", "headerFirstRowHeight", "headerSecondRowHeight", "wrap", "allowCellScrollY", "loading", "rowHeight", "frozen", "footer", "columns", "data", "selectedIds", "corePageListInstanceNumber", "disableHighlightOnClick", "freeMode", "searchSwitchDisabled", "disableSorting", "inlineToolItems", "columnSearchDefaultOpen", "lazyLoading", "noPaddingCell"], outputs: ["onSearching", "onToolClick", "onRowClick", "onRowDoubleClick", "onSelectedIdsChange", "onSelectedDataChange", "onColumnCaptionClick"] }, { kind: "component", type: CoreStatusStickerComponent, selector: "core-status-sticker", inputs: ["code", "isTrueCode"] }, { kind: "component", type: CoreEmployeeSeekerComponent, selector: "core-employee-seeker", inputs: ["excludedColumns", "multiMode", "preDefinedOuterParam$", "excludedIds$"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CoreContractSeekerComponent, selector: "core-contract-seeker", inputs: ["excludedColumns", "multiMode", "preDefinedOuterParam$", "excludedIds$"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CoreWorkingSeekerComponent, selector: "core-working-seeker", inputs: ["excludedColumns", "multiMode", "preDefinedOuterParam$", "excludedIds$"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CoreWageSeekerComponent, selector: "core-wage-seeker", inputs: ["excludedColumns", "multiMode", "preDefinedOuterParam$", "excludedIds$", "employeeId"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CoreOrgUnitSeekerComponent, selector: "core-org-unit-seeker", inputs: ["excludedIds$"], outputs: ["itemDoubleClick"] }, { kind: "component", type: CorePositionSeekerComponent, selector: "core-position-seeker", inputs: ["excludedColumns", "multiMode", "preDefinedOuterParam$", "excludedIds$", "seekerVerifyIgnore"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CorePositionConcurrentSeekerComponent, selector: "core-position-concurrent-seeker", inputs: ["excludedColumns", "multiMode", "preDefinedOuterParam$", "excludedIds$"], outputs: ["rowDoubleClick", "selectedIdsChange", "selectedDataChange", "columnsInit"] }, { kind: "component", type: CorePageHeaderComponent, selector: "core-page-header", inputs: ["instanceNumber", "shownItems", "title", "hideButtonGroup"], outputs: ["buttonClick"] }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "showAnyway", "position"] }] }); }
|
|
394
449
|
}
|
|
395
450
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreFormControlSeekerComponent, decorators: [{
|
|
396
451
|
type: Component,
|
|
@@ -424,8 +479,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
424
479
|
CoreWorkingSeekerComponent,
|
|
425
480
|
CoreWageSeekerComponent,
|
|
426
481
|
CorePositionSeekerComponent,
|
|
427
|
-
], template: "<div #container class=\"core-form-control-seeker-container\">\r\n <div class=\"input-wrapper\" [class.d-none]=\"!!multiMode\">\r\n <label #shownText type=\"text\" class=\"text form-control\" [class.form-control-disabled]=\"disabled\">\r\n <span [appTooltip]=\"valueToShow\">{{ valueToShow }}</span>\r\n </label>\r\n @if (!multiMode) {\r\n <div class=\"clear-icon-wrapper\" [class.d-none]=\"!!disabled || !!!value\" (click)=\"onClickClear()\">\r\n <div class=\"flex-wrapper\" [appTooltip]=\"'UI.CORE_CONTOL_COMMON_CLEAR' | translate: lang\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"seeker-icon-wrapper\" [class.form-control-disabled]=\"disabled\" [class.multi-mode]=\"!!multiMode\"\r\n (click)=\"onClickSeek()\">\r\n <div class=\"flex-wrapper\" [class.form-control-disabled]=\"disabled\">\r\n <i class=\"feather-search\"></i>\r\n </div>\r\n </div>\r\n @if (!!multiMode) {\r\n <div class=\"core-tabbe-wrapper\">\r\n <core-table [columns]=\"multiModeColumns\" [data]=\"selectedData\" [showTools]=\"!!!disabled\" [tools]=\"tools\"\r\n [searchSwitchDisabled]=\"true\" (onToolClick)=\"onToolClick($event)\"\r\n (onRowDoubleClick)=\"onSelectedDataRowDoubleClick($event)\"></core-table>\r\n </div>\r\n }\r\n\r\n @if (!!sourceOpen) {\r\n <div class=\"modal-container\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header-panel\">\r\n <core-page-header [title]=\"title\" [hideButtonGroup]=\"true\" *ngIf=\"showPageHeader\"></core-page-header>\r\n </div>\r\n <div class=\"source-container\">\r\n <i class=\"feather-x\" (click)=\"onCancel()\"\r\n [class.d-block]=\"seekerSourceType==='ORGANIZATION_UNIT_SEEK'\"></i>\r\n\r\n\r\n @switch (seekerSourceType) {\r\n @case ('JOB_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"jobSeek\">\r\n </ng-container>\r\n }\r\n @case ('EMPLOYEE_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"employeeSeek\">\r\n </ng-container>\r\n }\r\n @case ('CONTRACT_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"contractSeek\">\r\n </ng-container>\r\n }\r\n @case ('WORKING_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"workingSeek\">\r\n </ng-container>\r\n }\r\n @case ('WAGE_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"wageSeek\">\r\n </ng-container>\r\n }\r\n @case ('ORGANIZATION_UNIT_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"organizationUnitSeek\">\r\n </ng-container>\r\n }\r\n @case ('POSITION_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"positionSeek\">\r\n </ng-container>\r\n }\r\n @case ('POSITION_CONCURRENT_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"positionConcurrentSeek\">\r\n </ng-container>\r\n }\r\n }\r\n\r\n </div>\r\n\r\n @if (!hideFooter) {\r\n <div class=\"footer\">\r\n <div class=\"d-flex-end\">\r\n @if (!!pendingSelectedData?.length) {\r\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"onSelect()\">{{\r\n 'UI_CORE_CONFIRM_DIALOG_BUTTON_SELECT' | translate: lang }}</button>\r\n }\r\n <button class=\"btn btn-secondary\" type=\"button\" (click)=\"onCancel()\">{{\r\n 'UI_CORE_CONFIRM_DIALOG_BUTTON_CANCEL' | translate: lang }}</button>\r\n </div>\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n }\r\n\r\n</div>\r\n\r\n<ng-template #jobSeek>\r\n <core-job-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-job-seeker>\r\n</ng-template>\r\n\r\n<ng-template #employeeSeek>\r\n <core-employee-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-employee-seeker>\r\n</ng-template>\r\n\r\n<ng-template #contractSeek>\r\n <core-contract-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-contract-seeker>\r\n</ng-template>\r\n\r\n<ng-template #workingSeek>\r\n <core-working-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-working-seeker>\r\n</ng-template>\r\n\r\n<ng-template #wageSeek>\r\n <core-wage-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-wage-seeker>\r\n</ng-template>\r\n\r\n<ng-template #positionSeek>\r\n <core-position-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n [seekerVerifyIgnore]=\"seekerVerifyIgnore\" (rowDoubleClick)=\"onRowDoubleClick($event)\"\r\n (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-position-seeker>\r\n</ng-template>\r\n\r\n<ng-template #positionConcurrentSeek>\r\n <core-position-concurrent-seeker [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-position-concurrent-seeker>\r\n</ng-template>\r\n\r\n<ng-template #organizationUnitSeek>\r\n <core-org-unit-seeker [excludedIds$]=\"excludedIds$\" (itemDoubleClick)=\"onItemDoubleClick($event)\"></core-org-unit-seeker>\r\n</ng-template>\r\n\r\n<ng-template #avatar let-avatar=\"context.avatar\">\r\n <img *ngIf=\"avatar != null\" [src]=\"avatar | mapAvatarToServer\" class=\"in-table-avatar\" appImageErrorResolver>\r\n <img *ngIf=\"avatar == null\" [src]=\"defaultAvatar\" class=\"in-table-avatar\" appImageErrorResolver>\r\n</ng-template>\r\n<ng-template #sticker let-code=\"context.actflg\">\r\n <core-status-sticker [code]=\"code\" [isTrueCode]=\"true\"></core-status-sticker>\r\n</ng-template>\r\n\r\n<div [class.d-none]=\"!showEditBuffer\">\r\n <core-page-edit-lite [sections]=\"multiModeExtendedSections\" (onFormCreated)=\"onEditBufferFormCreated($event)\"\r\n (submitLogic)=\"onEditBufferSubmit($event)\" (cancelLogic)=\"onEditBufferCancel($event)\"></core-page-edit-lite>\r\n</div>", styles: [".core-form-control-seeker-container{display:block;position:relative;background-color:#fff}.core-form-control-seeker-container>.seeker-icon-wrapper{display:block;position:absolute;background-color:#e9e9e9;right:3px;top:3px;width:29px;height:29px;border-radius:.275rem;cursor:pointer}.core-form-control-seeker-container>.seeker-icon-wrapper>.flex-wrapper{width:29px;height:29px;display:flex;align-items:center;justify-content:center}.core-form-control-seeker-container>.seeker-icon-wrapper>.flex-wrapper>i{color:#848484;font-size:20px}.core-form-control-seeker-container .input-wrapper{height:var(--size-form-control-height)}.core-form-control-seeker-container .input-wrapper label.text span{display:block;height:calc(var(--size-form-control-height) - 12px);line-height:calc(var(--size-form-control-height) - 12px);width:calc(100% - var(--size-form-control-height));overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:inherit}.core-form-control-seeker-container .input-wrapper .clear-icon-wrapper{display:none;position:absolute;background-color:transparent;right:28px;top:3px;width:29px;height:29px;border-radius:.275rem;cursor:pointer}.core-form-control-seeker-container .input-wrapper .clear-icon-wrapper>.flex-wrapper{width:29px;height:29px;display:flex;align-items:center;justify-content:center}.core-form-control-seeker-container .input-wrapper .clear-icon-wrapper>.flex-wrapper>i{color:#848484;font-size:20px}.core-form-control-seeker-container .input-wrapper:hover>.clear-icon-wrapper{display:block}.core-form-control-seeker-container>.seeker-icon-wrapper.multi-mode{position:relative;width:35px;height:35px}.core-form-control-seeker-container>.seeker-icon-wrapper.multi-mode>.flex-wrapper{width:35px;height:35px}.core-form-control-seeker-container .source-container{display:block;background-color:#fff;padding:var(--size-layout-block-cell-spacing);max-width:1200px;max-height:800px;overflow:hidden;border-radius:10px}.core-form-control-seeker-container .source-container i{font-size:20px;cursor:pointer;float:right}.core-form-control-seeker-container .source-container.d-none{display:none}.core-form-control-seeker-container .source-container>caption{display:block;width:100%}.core-form-control-seeker-container .source-container:has(~.footer){border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.core-form-control-seeker-container .footer{background-color:var(--color-bg-main);border-bottom-left-radius:10px;border-bottom-right-radius:10px;padding:var(--size-layout-block-cell-spacing)}.core-form-control-seeker-container .footer button:first-child{margin-right:var(--size-layout-block-cell-spacing)}.core-form-control-seeker-container .core-tabbe-wrapper{margin-top:5px}\n"] }]
|
|
428
|
-
}], ctorParameters: () => [{ type: i1.AlertService }, { type: i0.Injector }, { type: i2.MultiLanguageService }, { type: i3.CoreJobSeekerComponent }, { type: i4.CoreEmployeeSeekerComponent }, { type: i5.CoreContractSeekerComponent }, { type: i6.CoreWorkingSeekerComponent }, { type: i7.CoreWageSeekerComponent }, { type: i8.CorePositionSeekerComponent }, { type: i9.RandomAvatarService }], propDecorators: { avatar: [{
|
|
482
|
+
CorePositionConcurrentSeekerComponent,
|
|
483
|
+
], template: "<div #container class=\"core-form-control-seeker-container\">\r\n <div class=\"input-wrapper\" [class.d-none]=\"!!multiMode\">\r\n <label #shownText type=\"text\" class=\"text form-control\" [class.form-control-disabled]=\"disabled\">\r\n <span [appTooltip]=\"valueToShow\">{{ valueToShow }}</span>\r\n </label>\r\n @if (!multiMode) {\r\n <div class=\"clear-icon-wrapper\" [class.d-none]=\"!!disabled || !!!value\" (click)=\"onClickClear()\">\r\n <div class=\"flex-wrapper\" [appTooltip]=\"'UI.CORE_CONTOL_COMMON_CLEAR' | translate: lang\">\r\n <i class=\"feather-x\"></i>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <div class=\"seeker-icon-wrapper\" [class.form-control-disabled]=\"disabled\" [class.multi-mode]=\"!!multiMode\"\r\n (click)=\"onClickSeek()\">\r\n <div class=\"flex-wrapper\" [class.form-control-disabled]=\"disabled\">\r\n <i class=\"feather-search\"></i>\r\n </div>\r\n </div>\r\n @if (!!multiMode) {\r\n <div class=\"core-tabbe-wrapper\">\r\n <core-table [height]=\"multiModeTableHeight\" [columns]=\"multiModeColumns\" [data]=\"selectedData\" [showTools]=\"!!!disabled\" [tools]=\"tools\"\r\n [lazyLoading]=\"true\" [rowHeight]=\"(multiModeRowHeight || 46) + 'px'\" [searchSwitchDisabled]=\"true\" [disableSorting]=\"true\"\r\n (onToolClick)=\"onToolClick($event)\" (onRowDoubleClick)=\"onSelectedDataRowDoubleClick($event)\"></core-table>\r\n </div>\r\n }\r\n\r\n @if (!!sourceOpen) {\r\n <div class=\"modal-container\">\r\n <div class=\"modal-content\">\r\n <div class=\"modal-header-panel\">\r\n <core-page-header [title]=\"title\" [hideButtonGroup]=\"true\" *ngIf=\"showPageHeader\"></core-page-header>\r\n </div>\r\n <div class=\"source-container\">\r\n <i class=\"feather-x\" (click)=\"onCancel()\"\r\n [class.d-block]=\"seekerSourceType==='ORGANIZATION_UNIT_SEEK'\"></i>\r\n\r\n\r\n @switch (seekerSourceType) {\r\n @case ('JOB_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"jobSeek\">\r\n </ng-container>\r\n }\r\n @case ('EMPLOYEE_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"employeeSeek\">\r\n </ng-container>\r\n }\r\n @case ('CONTRACT_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"contractSeek\">\r\n </ng-container>\r\n }\r\n @case ('WORKING_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"workingSeek\">\r\n </ng-container>\r\n }\r\n @case ('WAGE_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"wageSeek\">\r\n </ng-container>\r\n }\r\n @case ('ORGANIZATION_UNIT_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"organizationUnitSeek\">\r\n </ng-container>\r\n }\r\n @case ('POSITION_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"positionSeek\">\r\n </ng-container>\r\n }\r\n @case ('POSITION_CONCURRENT_SEEK') {\r\n <ng-container *ngTemplateOutlet=\"positionConcurrentSeek\">\r\n </ng-container>\r\n }\r\n }\r\n\r\n </div>\r\n\r\n @if (!hideFooter) {\r\n <div class=\"footer\">\r\n <div class=\"d-flex-end\">\r\n @if (!!pendingSelectedData?.length) {\r\n <button class=\"btn btn-primary\" type=\"button\" (click)=\"onSelect()\">{{\r\n 'UI_CORE_CONFIRM_DIALOG_BUTTON_SELECT' | translate: lang }}</button>\r\n }\r\n <button class=\"btn btn-secondary\" type=\"button\" (click)=\"onCancel()\">{{\r\n 'UI_CORE_CONFIRM_DIALOG_BUTTON_CANCEL' | translate: lang }}</button>\r\n </div>\r\n </div>\r\n }\r\n\r\n </div>\r\n </div>\r\n }\r\n\r\n</div>\r\n\r\n<ng-template #jobSeek>\r\n <core-job-seeker [excludedColumns]=\"excludedColumnsJob\" [preDefinedOuterParam$]=\"preDefinedOuterParam$\"\r\n [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\" (rowDoubleClick)=\"onRowDoubleClick($event)\"\r\n (columnsInit)=\"onColumnsInit($event)\" (selectedDataChange)=\"onSelectedDataChange($event)\"></core-job-seeker>\r\n</ng-template>\r\n\r\n<ng-template #employeeSeek>\r\n <core-employee-seeker [excludedColumns]=\"excludedColumnsEmployee\" [preDefinedOuterParam$]=\"preDefinedOuterParam$\"\r\n [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\" (rowDoubleClick)=\"onRowDoubleClick($event)\"\r\n (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-employee-seeker>\r\n</ng-template>\r\n\r\n<ng-template #contractSeek>\r\n <core-contract-seeker [excludedColumns]=\"excludedColumnsContract\" [preDefinedOuterParam$]=\"preDefinedOuterParam$\"\r\n [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\" (rowDoubleClick)=\"onRowDoubleClick($event)\"\r\n (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-contract-seeker>\r\n</ng-template>\r\n\r\n<ng-template #workingSeek>\r\n <core-working-seeker [excludedColumns]=\"excludedColumnsWorking\" [preDefinedOuterParam$]=\"preDefinedOuterParam$\"\r\n [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\" (rowDoubleClick)=\"onRowDoubleClick($event)\"\r\n (columnsInit)=\"onColumnsInit($event)\" (selectedDataChange)=\"onSelectedDataChange($event)\"></core-working-seeker>\r\n</ng-template>\r\n\r\n<ng-template #wageSeek>\r\n <core-wage-seeker [excludedColumns]=\"excludedColumnsWage\" [preDefinedOuterParam$]=\"preDefinedOuterParam$\"\r\n [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\" (rowDoubleClick)=\"onRowDoubleClick($event)\"\r\n (columnsInit)=\"onColumnsInit($event)\" (selectedDataChange)=\"onSelectedDataChange($event)\"></core-wage-seeker>\r\n</ng-template>\r\n\r\n<ng-template #positionSeek>\r\n <core-position-seeker [excludedColumns]=\"excludedColumnsPosition\" [preDefinedOuterParam$]=\"preDefinedOuterParam$\"\r\n [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\" [seekerVerifyIgnore]=\"seekerVerifyIgnore\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-position-seeker>\r\n</ng-template>\r\n\r\n<ng-template #positionConcurrentSeek>\r\n <core-position-concurrent-seeker [excludedColumns]=\"excludedColumnsPositionConcurrent\"\r\n [preDefinedOuterParam$]=\"preDefinedOuterParam$\" [multiMode]=\"multiMode\" [excludedIds$]=\"excludedIds$\"\r\n (rowDoubleClick)=\"onRowDoubleClick($event)\" (columnsInit)=\"onColumnsInit($event)\"\r\n (selectedDataChange)=\"onSelectedDataChange($event)\"></core-position-concurrent-seeker>\r\n</ng-template>\r\n\r\n<ng-template #organizationUnitSeek>\r\n <core-org-unit-seeker [excludedIds$]=\"excludedIds$\"\r\n (itemDoubleClick)=\"onItemDoubleClick($event)\"></core-org-unit-seeker>\r\n</ng-template>\r\n\r\n<ng-template #avatar let-avatar=\"context.avatar\">\r\n <img *ngIf=\"avatar != null\" [src]=\"avatar | mapAvatarToServer\" class=\"in-table-avatar\" appImageErrorResolver>\r\n <img *ngIf=\"avatar == null\" [src]=\"defaultAvatar\" class=\"in-table-avatar\" appImageErrorResolver>\r\n</ng-template>\r\n<ng-template #sticker let-code=\"context.actflg\">\r\n <core-status-sticker [code]=\"code\" [isTrueCode]=\"true\"></core-status-sticker>\r\n</ng-template>\r\n\r\n<div [class.d-none]=\"!showEditBuffer\">\r\n <core-page-edit-lite [sections]=\"multiModeExtendedSections\" (onFormCreated)=\"onEditBufferFormCreated($event)\"\r\n (submitLogic)=\"onEditBufferSubmit($event)\" (cancelLogic)=\"onEditBufferCancel($event)\"></core-page-edit-lite>\r\n</div>", styles: [".core-form-control-seeker-container{display:block;position:relative;background-color:#fff}.core-form-control-seeker-container>.seeker-icon-wrapper{display:block;position:absolute;background-color:#e9e9e9;right:3px;top:3px;width:29px;height:29px;border-radius:.275rem;cursor:pointer}.core-form-control-seeker-container>.seeker-icon-wrapper>.flex-wrapper{width:29px;height:29px;display:flex;align-items:center;justify-content:center}.core-form-control-seeker-container>.seeker-icon-wrapper>.flex-wrapper>i{color:#848484;font-size:20px}.core-form-control-seeker-container .input-wrapper{height:var(--size-form-control-height)}.core-form-control-seeker-container .input-wrapper label.text span{display:block;height:calc(var(--size-form-control-height) - 12px);line-height:calc(var(--size-form-control-height) - 12px);width:calc(100% - var(--size-form-control-height));overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:inherit}.core-form-control-seeker-container .input-wrapper .clear-icon-wrapper{display:none;position:absolute;background-color:transparent;right:28px;top:3px;width:29px;height:29px;border-radius:.275rem;cursor:pointer}.core-form-control-seeker-container .input-wrapper .clear-icon-wrapper>.flex-wrapper{width:29px;height:29px;display:flex;align-items:center;justify-content:center}.core-form-control-seeker-container .input-wrapper .clear-icon-wrapper>.flex-wrapper>i{color:#848484;font-size:20px}.core-form-control-seeker-container .input-wrapper:hover>.clear-icon-wrapper{display:block}.core-form-control-seeker-container>.seeker-icon-wrapper.multi-mode{position:relative;width:35px;height:35px}.core-form-control-seeker-container>.seeker-icon-wrapper.multi-mode>.flex-wrapper{width:35px;height:35px}.core-form-control-seeker-container .source-container{display:block;background-color:#fff;padding:var(--size-layout-block-cell-spacing);max-width:1200px;max-height:800px;overflow:hidden;border-radius:10px}.core-form-control-seeker-container .source-container i{font-size:20px;cursor:pointer;float:right}.core-form-control-seeker-container .source-container.d-none{display:none}.core-form-control-seeker-container .source-container>caption{display:block;width:100%}.core-form-control-seeker-container .source-container:has(~.footer){border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}.core-form-control-seeker-container .footer{background-color:var(--color-bg-main);border-bottom-left-radius:10px;border-bottom-right-radius:10px;padding:var(--size-layout-block-cell-spacing)}.core-form-control-seeker-container .footer button:first-child{margin-right:var(--size-layout-block-cell-spacing)}.core-form-control-seeker-container .core-tabbe-wrapper{margin-top:5px}\n"] }]
|
|
484
|
+
}], ctorParameters: () => [{ type: i1.AlertService }, { type: i0.Injector }, { type: i2.MultiLanguageService }, { type: i3.CoreJobSeekerComponent }, { type: i4.CoreEmployeeSeekerComponent }, { type: i5.CoreContractSeekerComponent }, { type: i6.CoreWorkingSeekerComponent }, { type: i7.CoreWageSeekerComponent }, { type: i8.CorePositionSeekerComponent }, { type: i9.CorePositionConcurrentSeekerComponent }, { type: i10.RandomAvatarService }], propDecorators: { avatar: [{
|
|
429
485
|
type: ViewChild,
|
|
430
486
|
args: ['avatar']
|
|
431
487
|
}], sticker: [{
|
|
@@ -461,6 +517,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
461
517
|
type: Input
|
|
462
518
|
}], editBufferData$: [{
|
|
463
519
|
type: Input
|
|
520
|
+
}], multiModeTableHeight: [{
|
|
521
|
+
type: Input
|
|
522
|
+
}], multiModeRowHeight: [{
|
|
523
|
+
type: Input
|
|
464
524
|
}], seekerSourceType: [{
|
|
465
525
|
type: Input,
|
|
466
526
|
args: [{ required: true }]
|
|
@@ -478,4 +538,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
478
538
|
type: ViewChild,
|
|
479
539
|
args: ['container']
|
|
480
540
|
}] } });
|
|
481
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1mb3JtLWNvbnRyb2wtc2Vla2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLWZvcm0tY29udHJvbC1zZWVrZXIvY29yZS1mb3JtLWNvbnRyb2wtc2Vla2VyL2NvcmUtZm9ybS1jb250cm9sLXNlZWtlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9saWJyYXJpZXMvY29yZS1mb3JtLWNvbnRyb2wtc2Vla2VyL2NvcmUtZm9ybS1jb250cm9sLXNlZWtlci9jb3JlLWZvcm0tY29udHJvbC1zZWVrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWMsS0FBSyxFQUFxQixTQUFTLEVBQUUsU0FBUyxFQUF5QixNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xLLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBQzdHLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRTdGLE9BQU8sRUFBYSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUEyRCxNQUFNLHVDQUF1QyxDQUFDO0FBRTdLLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGdGQUFnRixDQUFDO0FBQzdILE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGdGQUFnRixDQUFDO0FBQzdILE9BQU8s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LGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFHRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBTUcsd0JBQXdCO3NCQUFoQyxLQUFLO2dCQUNHLHlCQUF5QjtzQkFBakMsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUlxQixnQkFBZ0I7c0JBQTFDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUNoQixTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBRUksYUFBYTtzQkFBdEIsTUFBTTtnQkFFaUIsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIGlzRGV2TW9kZSwgVmlld0NoaWxkLCBJbmplY3RvciwgVGVtcGxhdGVSZWYsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENvcmVGb3JtQ29udHJvbEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLWZvcm0tY29udHJvbC1iYXNlL2NvcmUtZm9ybS1jb250cm9sLWJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRW51bUNvcmVGb3JtQ29udHJvbFNlZWtlclNvdXJjZVR5cGUgfSBmcm9tICcuLi9FbnVtQ29yZUZvcm1Db250cm9sU2Vla2VyU291cmNlVHlwZSc7XHJcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJy4uLy4uL2FsZXJ0L2FsZXJ0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1zTW9kdWxlLCBOR19WQUxVRV9BQ0NFU1NPUiwgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBJQ29yZUZvcm1Db250cm9sU2Vla2VyRXh0cmFCaW5kaW5nTW9kZWwsIElDb3JlRm9ybVNlY3Rpb24gfSBmcm9tICcuLi8uLi9jb3JlLWZvcm0vY29yZS1mb3JtL2VudW0taW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7IElPcmdUcmVlSXRlbSB9IGZyb20gJy4uLy4uL2NvcmUtb3JnLXRyZWUvY29yZS1vcmctdHJlZS9JT3JnVHJlZUl0ZW0nO1xyXG5pbXBvcnQgeyBDb3JlVGFibGVDb21wb25lbnQsIEVDb3JlVGFibGVUb29sQ2xhc3MsIEVDb3JlVGFibGVUb29sQ29kZSwgSUNvcmVUYWJsZVRvb2xDbGlja0V2ZW50RW1pdHRlckRhdGEsIElDb3JlVGFibGVUb29sSXRlbSB9IGZyb20gJy4uLy4uL2NvcmUtdGFibGUvY29yZS10YWJsZS5jb21wb25lbnQnO1xyXG5cclxuaW1wb3J0IHsgQ29yZUVtcGxveWVlU2Vla2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1lbXBsb3llZS1zZWVrZXIvY29yZS1lbXBsb3llZS1zZWVrZXIvY29yZS1lbXBsb3llZS1zZWVrZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29yZUNvbnRyYWN0U2Vla2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1jb250cmFjdC1zZWVrZXIvY29yZS1jb250cmFjdC1zZWVrZXIvY29yZS1jb250cmFjdC1zZWVrZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29yZVdvcmtpbmdTZWVrZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLXdvcmtpbmctc2Vla2VyL2NvcmUtd29ya2luZy1zZWVrZXIvY29yZS13b3JraW5nLXNlZWtlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb3JlV2FnZVNlZWtlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtd2FnZS1zZWVrZXIvY29yZS13YWdlLXNlZWtlci9jb3JlLXdhZ2Utc2Vla2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVQb3NpdGlvblNlZWtlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtcG9zaXRpb24tc2Vla2VyL2NvcmUtcG9zaXRpb24tc2Vla2VyL2NvcmUtcG9zaXRpb24tc2Vla2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEVudW1UcmFuc2xhdGVLZXkgfSBmcm9tIFwiYWxwaGEtZ2xvYmFsLWNvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBNdWx0aUxhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL211bHRpLWxhbmd1YWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSYW5kb21BdmF0YXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcmFuZG9tLWF2YXRhci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvYWxlcnRPcHRpb25zJztcclxuaW1wb3J0IHsgSUNvcmVUYWJsZUNvbHVtbkl0ZW0gfSBmcm9tICcuLi8uLi9jb3JlLXRhYmxlL0lDb3JlVGFibGVDb2x1bW5JdGVtJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJy4uLy4uLy4uL2FwcC1waXBlcy90cmFuc2xhdGUucGlwZSc7XHJcbmltcG9ydCB7IENvcmVQb3NpdGlvbkNvbmN1cnJlbnRTZWVrZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLXBvc2l0aW9uLWNvbmN1cnJlbnQtc2Vla2VyL2NvcmUtcG9zaXRpb24tY29uY3VycmVudC1zZWVrZXIvY29yZS1wb3NpdGlvbi1jb25jdXJyZW50LXNlZWtlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb3JlUGFnZUhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtcGFnZS1oZWFkZXIvY29yZS1wYWdlLWhlYWRlci9jb3JlLXBhZ2UtaGVhZGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi90b29sdGlwL3Rvb2x0aXAuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQ29yZU9yZ1VuaXRTZWVrZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLW9yZy11bml0LXNlZWtlci9jb3JlLW9yZy11bml0LXNlZWtlci9jb3JlLW9yZy11bml0LXNlZWtlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBNYXBBdmF0YXJUb1NlcnZlclBpcGUgfSBmcm9tICcuLi8uLi8uLi9hcHAtcGlwZXMvbWFwLWF2YXRhci10by1zZXJ2ZXIucGlwZSc7XHJcbmltcG9ydCB7IENvcmVQYWdlRWRpdExpdGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLXBhZ2UtZWRpdC1saXRlL2NvcmUtcGFnZS1lZGl0LWxpdGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29yZUpvYlNlZWtlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtam9iLXNlZWtlci9jb3JlLWpvYi1zZWVrZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29yZVN0YXR1c1N0aWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLXN0YXR1cy1zdGlja2VyL2NvcmUtc3RhdHVzLXN0aWNrZXIvY29yZS1zdGF0dXMtc3RpY2tlci5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjb3JlLWZvcm0tY29udHJvbC1zZWVrZXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBUcmFuc2xhdGVQaXBlLFxyXG4gICAgTWFwQXZhdGFyVG9TZXJ2ZXJQaXBlLFxyXG4gICAgQ29yZUpvYlNlZWtlckNvbXBvbmVudCxcclxuICAgIENvcmVQYWdlRWRpdExpdGVDb21wb25lbnQsXHJcbiAgICBDb3JlVGFibGVDb21wb25lbnQsXHJcbiAgICBDb3JlU3RhdHVzU3RpY2tlckNvbXBvbmVudCxcclxuICAgIENvcmVFbXBsb3llZVNlZWtlckNvbXBvbmVudCxcclxuICAgIENvcmVDb250cmFjdFNlZWtlckNvbXBvbmVudCxcclxuICAgIENvcmVXb3JraW5nU2Vla2VyQ29tcG9uZW50LFxyXG4gICAgQ29yZVdhZ2VTZWVrZXJDb21wb25lbnQsXHJcbiAgICBDb3JlT3JnVW5pdFNlZWtlckNvbXBvbmVudCxcclxuICAgIENvcmVQb3NpdGlvblNlZWtlckNvbXBvbmVudCxcclxuICAgIENvcmVQb3NpdGlvbkNvbmN1cnJlbnRTZWVrZXJDb21wb25lbnQsXHJcbiAgICBDb3JlUGFnZUhlYWRlckNvbXBvbmVudCxcclxuICAgIFRvb2x0aXBEaXJlY3RpdmVcclxuICBdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jb3JlLWZvcm0tY29udHJvbC1zZWVrZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvcmUtZm9ybS1jb250cm9sLXNlZWtlci5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBDb3JlRm9ybUNvbnRyb2xTZWVrZXJDb21wb25lbnRcclxuICAgIH0sXHJcbiAgICBDb3JlSm9iU2Vla2VyQ29tcG9uZW50LFxyXG4gICAgQ29yZUVtcGxveWVlU2Vla2VyQ29tcG9uZW50LFxyXG4gICAgQ29yZUNvbnRyYWN0U2Vla2VyQ29tcG9uZW50LFxyXG4gICAgQ29yZVdvcmtpbmdTZWVrZXJDb21wb25lbnQsXHJcbiAgICBDb3JlV2FnZVNlZWtlckNvbXBvbmVudCxcclxuICAgIENvcmVQb3NpdGlvblNlZWtlckNvbXBvbmVudCxcclxuICBdXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgQ29yZUZvcm1Db250cm9sU2Vla2VyQ29tcG9uZW50IGV4dGVuZHMgQ29yZUZvcm1Db250cm9sQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuXHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2F2YXRhcicpIGF2YXRhciE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnc3RpY2tlcicpIHN0aWNrZXIhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBuZ0NvbnRyb2whOiBOZ0NvbnRyb2w7XHJcblxyXG4gIGlzRGV2TW9kZSA9IGlzRGV2TW9kZSgpO1xyXG5cclxuICBsYW5nITogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKSB0aXRsZSE6IEVudW1UcmFuc2xhdGVLZXk7XHJcbiAgQElucHV0KCkgc2hvd1BhZ2VIZWFkZXIhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHByZURlZmluZWRPdXRlclBhcmFtJCE6IEJlaGF2aW9yU3ViamVjdDxhbnk+O1xyXG4gIEBJbnB1dCgpIGNsaWNrJCE6IEJlaGF2aW9yU3ViamVjdDxhbnk+IHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIGdldEJ5SWRPYmplY3QkITogQmVoYXZpb3JTdWJqZWN0PGFueT47XHJcbiAgQElucHV0KCkgcGFyYW1Nb2RlITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBtdWx0aU1vZGUhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIG9iamVjdExpc3QkITogQmVoYXZpb3JTdWJqZWN0PGFueVtdPjtcclxuICBASW5wdXQoKSBzaG93blNlZWtlckNvbHVtbnMhOiBzdHJpbmdbXTsgLy8gUmVkdWNlIHZpc2libGUgY29sdW1ucyBmcm9tIGJhc2UgY29tcG9uZW50LlxyXG4gIEBJbnB1dCgpIGV4Y2x1ZGVFeGlzdGluZ0xpc3QhOiBib29sZWFuOyAvLyBmcm9tIDIwMjQtMDUtMTBcclxuXHJcbiAgLyogV2hlbiBvYmplY3RzIGdpdmVuIGJ5IHRoZSBzZWVrZXIgZG91YmxlLWNsaWNrL2NoZWNrIGFyZSBpbmRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGNvbnRyb2wgKi9cclxuICBASW5wdXQoKSBpbmRpcmVjdEJpbmRpbmchOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGJpbmRHcmlkSWRUbyE6IHN0cmluZztcclxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHJcblxyXG4gIC8qIEV4dGVuZGVkIHNpbmNlIDIwMjQtMDMtMjQgKi9cclxuICBASW5wdXQoKSBtdWx0aU1vZGVFeHRlbmRlZENvbHVtbnMhOiBJQ29yZVRhYmxlQ29sdW1uSXRlbVtdO1xyXG4gIEBJbnB1dCgpIG11bHRpTW9kZUV4dGVuZGVkU2VjdGlvbnMhOiBJQ29yZUZvcm1TZWN0aW9uW107XHJcbiAgQElucHV0KCkgZWRpdEJ1ZmZlckRhdGEkITogQmVoYXZpb3JTdWJqZWN0PGFueT47XHJcbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuICAvKiBTVEFSVDogUkVRVUlSRUQgKi9cclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBzZWVrZXJTb3VyY2VUeXBlITogRW51bUNvcmVGb3JtQ29udHJvbFNlZWtlclNvdXJjZVR5cGU7XHJcbiAgQElucHV0KCkgYm91bmRGcm9tITogc3RyaW5nOyAvLyB0YWtlIHRoaXMgZmllbGQgZnJvbSBHZXRCeUlkIHJlc3BvbnNlIGlubmVyQm9keSB0byBiaW5kIHRvIHRoZSB2YWx1ZVxyXG4gIEBJbnB1dCgpIHNob3duRnJvbSE6IHN0cmluZzsgLy8gdGFrZSB0aGlzIGZpZWxkIGZyb20gR2V0QnlJZCByZXNwb25zZSBpbm5lckJvZHkgdG8gYmluZCB0byB0aGUgdGV4dFxyXG4gIC8qIEVORDogUkVRVUlSRUQgd2hlbiBFTVBMT1lFRV9TRUVLRVIgKi9cclxuXHJcbiAgQElucHV0KCkgYWxzb0JpbmRUbyE6IElDb3JlRm9ybUNvbnRyb2xTZWVrZXJFeHRyYUJpbmRpbmdNb2RlbFtdO1xyXG4gIEBJbnB1dCgpIHNlZWtlclZlcmlmeUlnbm9yZSE6IGJvb2xlYW47XHJcblxyXG4gIEBPdXRwdXQoKSBvbkRvdWJsZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIGNvbnRhaW5lciE6IEVsZW1lbnRSZWY7XHJcblxyXG4gIHNvdXJjZU9wZW4hOiBib29sZWFuO1xyXG5cclxuICB2YWx1ZVRvU2hvdyE6IHN0cmluZztcclxuICBwbGFjZWhvbGRlciE6IHN0cmluZztcclxuXHJcbiAgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuXHJcbiAgLyogZm9yIG11bHRpTW9kZSAqL1xyXG4gIHBlbmRpbmdTZWxlY3RlZERhdGE6IGFueVtdID0gW107XHJcbiAgc2VsZWN0ZWREYXRhOiBhbnlbXSA9IFtdO1xyXG4gIG11bHRpTW9kZUNvbHVtbnM6IElDb3JlVGFibGVDb2x1bW5JdGVtW10gPSBbXTtcclxuICBzaG93RWRpdEJ1ZmZlciE6IGJvb2xlYW47XHJcbiAgZWRpdEJ1ZmZlckZvcm0hOiBGb3JtR3JvdXA7XHJcbiAgZWRpdGluZ0lkITogbnVtYmVyO1xyXG4gIHRvb2xzOiBJQ29yZVRhYmxlVG9vbEl0ZW1bXSA9IFt7XHJcbiAgICBjb2RlOiBFQ29yZVRhYmxlVG9vbENvZGUuZGVsZXRlLFxyXG4gICAgY2xhc3M6IEVDb3JlVGFibGVUb29sQ2xhc3MuZGVsZXRlLFxyXG4gICAgY2FwdGlvbjogRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0NPTlRST0xfVEFCTEVfVE9PTF9ERUxFVEVcclxuICB9XTtcclxuXHJcbiAgc2hvd0NsZWFySWNvbiE6IGJvb2xlYW47XHJcbiAgZGVmYXVsdEF2YXRhciE6IHN0cmluZztcclxuICBoaWRlRm9vdGVyOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGV4Y2x1ZGVkSWRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyW10+KFtdKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIG1sczogTXVsdGlMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvcmVKb2JTZWVrZXJDb21wb25lbnQ6IENvcmVKb2JTZWVrZXJDb21wb25lbnQsXHJcbiAgICBwcml2YXRlIGNvcmVFbXBsb3llZVNlZWtlckNvbXBvbmVudDogQ29yZUVtcGxveWVlU2Vla2VyQ29tcG9uZW50LFxyXG4gICAgcHJpdmF0ZSBjb3JlQ29udHJhY3RTZWVrZXJDb21wb25lbnQ6IENvcmVDb250cmFjdFNlZWtlckNvbXBvbmVudCxcclxuICAgIHByaXZhdGUgY29yZVdvcmtpbmdTZWVrZXJDb21wb25lbnQ6IENvcmVXb3JraW5nU2Vla2VyQ29tcG9uZW50LFxyXG4gICAgcHJpdmF0ZSBjb3JlV2FnZVNlZWtlckNvbXBvbmVudDogQ29yZVdhZ2VTZWVrZXJDb21wb25lbnQsXHJcbiAgICBwcml2YXRlIGNvcmVQb3NpdGlvblNlZWtlckNvbXBvbmVudDogQ29yZVBvc2l0aW9uU2Vla2VyQ29tcG9uZW50LFxyXG4gICAgcHJpdmF0ZSByYXM6IFJhbmRvbUF2YXRhclNlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLmRlZmF1bHRBdmF0YXIgPSByYXMuZ2V0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzaWduTXVsdGlNb2RlQ29sdW1ucygpOiB2b2lkIHtcclxuICAgIHN3aXRjaCAodGhpcy5zZWVrZXJTb3VyY2VUeXBlKSB7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVGb3JtQ29udHJvbFNlZWtlclNvdXJjZVR5cGUuSk9CX1NFRUs6XHJcbiAgICAgICAgaWYgKCEhdGhpcy5tdWx0aU1vZGVFeHRlbmRlZENvbHVtbnMpIHtcclxuICAgICAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucyA9IFsuLi50aGlzLmNvcmVKb2JTZWVrZXJDb21wb25lbnQuY29sdW1ucywgLi4udGhpcy5tdWx0aU1vZGVFeHRlbmRlZENvbHVtbnNdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm11bHRpTW9kZUNvbHVtbnMgPSB0aGlzLmNvcmVKb2JTZWVrZXJDb21wb25lbnQuY29sdW1ucztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghISF0aGlzLm11bHRpTW9kZSkge1xyXG4gICAgICAgICAgdGhpcy5oaWRlRm9vdGVyID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVGb3JtQ29udHJvbFNlZWtlclNvdXJjZVR5cGUuRU1QTE9ZRUVfU0VFSzpcclxuICAgICAgICBpZiAoISF0aGlzLm11bHRpTW9kZUV4dGVuZGVkQ29sdW1ucykge1xyXG4gICAgICAgICAgdGhpcy5tdWx0aU1vZGVDb2x1bW5zID0gWy4uLnRoaXMuY29yZUVtcGxveWVlU2Vla2VyQ29tcG9uZW50LmNvbHVtbnMsIC4uLnRoaXMubXVsdGlNb2RlRXh0ZW5kZWRDb2x1bW5zXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5tdWx0aU1vZGVDb2x1bW5zID0gdGhpcy5jb3JlRW1wbG95ZWVTZWVrZXJDb21wb25lbnQuY29sdW1ucztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghISF0aGlzLm11bHRpTW9kZSkge1xyXG4gICAgICAgICAgdGhpcy5oaWRlRm9vdGVyID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVGb3JtQ29udHJvbFNlZWtlclNvdXJjZVR5cGUuQ09OVFJBQ1RfU0VFSzpcclxuICAgICAgICB0aGlzLm11bHRpTW9kZUNvbHVtbnMgPSB0aGlzLmNvcmVDb250cmFjdFNlZWtlckNvbXBvbmVudC5jb2x1bW5zO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlRm9ybUNvbnRyb2xTZWVrZXJTb3VyY2VUeXBlLldPUktJTkdfU0VFSzpcclxuICAgICAgICB0aGlzLm11bHRpTW9kZUNvbHVtbnMgPSB0aGlzLmNvcmVXb3JraW5nU2Vla2VyQ29tcG9uZW50LmNvbHVtbnM7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVGb3JtQ29udHJvbFNlZWtlclNvdXJjZVR5cGUuV0FHRV9TRUVLOlxyXG4gICAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucyA9IHRoaXMuY29yZVdhZ2VTZWVrZXJDb21wb25lbnQuY29sdW1ucztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUZvcm1Db250cm9sU2Vla2VyU291cmNlVHlwZS5QT1NJVElPTl9TRUVLOlxyXG4gICAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucyA9IHRoaXMuY29yZVBvc2l0aW9uU2Vla2VyQ29tcG9uZW50LmNvbHVtbnM7XHJcbiAgICAgICAgaWYgKCEhIXRoaXMubXVsdGlNb2RlKSB7XHJcbiAgICAgICAgICB0aGlzLmhpZGVGb290ZXIgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUZvcm1Db250cm9sU2Vla2VyU291cmNlVHlwZS5PUkdBTklaQVRJT05fVU5JVF9TRUVLOlxyXG4gICAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucyA9IFtdO1xyXG4gICAgICAgIGlmICghISF0aGlzLm11bHRpTW9kZSkge1xyXG4gICAgICAgICAgdGhpcy5oaWRlRm9vdGVyID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcblxyXG4gICAgLypcclxuICAgIElmIHdlIHRyeSB0byBpbmplY3QgTmdDb250cm9sIGRpcmVjdGx5IHdpdGhpbiB0aGUgY29uc3RydWN0b3IsIHdlIHdpbGwgZ2V0IGFuIGVycm9yOiDigJxFcnJvcjogTkcwMjAwOiBDaXJjdWxhciBkZXBlbmRlbmN5IGluIERJIGRldGVjdGVk4oCm4oCdLlxyXG4gICAgVGh1cywgd2UgaW5qZWN0IE5nQ29udHJvbCBpbiB0aGUgT25Jbml0IGxpZmVjeWNsZSBob29rIHZpYSBJbmplY3RvciB3aXRob3V0IGFueSBlcnJvci5cclxuICAgICovXHJcbiAgICB0aGlzLm5nQ29udHJvbCA9IHRoaXMuaW5qZWN0b3IuZ2V0KE5nQ29udHJvbCk7XHJcbiAgICB0aGlzLmFzaWduTXVsdGlNb2RlQ29sdW1ucygpO1xyXG5cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuXHJcbiAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucz8ubWFwKGMgPT4ge1xyXG4gICAgICAgIGlmIChjLmZpZWxkID09PSAnYXZhdGFyJyAmJiAhISFjLnRlbXBsYXRlUmVmKSBjLnRlbXBsYXRlUmVmID0gdGhpcy5hdmF0YXJcclxuICAgICAgICBpZiAoYy5maWVsZCA9PT0gJ2FjdGZsZycgJiYgISEhYy50ZW1wbGF0ZVJlZikgYy50ZW1wbGF0ZVJlZiA9IHRoaXMuc3RpY2tlclxyXG4gICAgICB9KVxyXG5cclxuICAgICAgY29uc3QgZWwgPSB0aGlzLmNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudDtcclxuICAgICAgY29uc3QgaGVpZ2h0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xyXG4gICAgICBlbC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1oZWlnaHQnLCAoaGVpZ2h0IHx8IDUwKSArICdweCcpO1xyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5tbHMubGFuZyQuc3Vic2NyaWJlKHggPT4gdGhpcy5sYW5nID0geClcclxuICAgICAgKVxyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5uZ0NvbnRyb2wuY29udHJvbD8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgIGlmICghISF4KSB0aGlzLnZhbHVlVG9TaG93ID0gXCJcIlxyXG4gICAgICAgIH0pIVxyXG4gICAgICApXHJcblxyXG5cclxuICAgICAgLyogU1RBUlQ6IENIRUNLIElOUFVUUyAqL1xyXG5cclxuXHJcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgIGlmICghISF0aGlzLnNlZWtlclNvdXJjZVR5cGUpIHtcclxuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICBgQ29yZUZvcm1Db250cm9sU2Vla2VyQ29tcG9uZW50IEVycm9yOiBSZXF1aXJlZCBpbnB1dHM6XHJcbiAgICAgICAgICAgICAgICBzZWVrZXJTb3VyY2VUeXBlOiBFbnVtQ29yZUZvcm1Db250cm9sU2Vla2VyU291cmNlVHlwZSAoZm9yICcke3RoaXMubmdDb250cm9sLm5hbWV9JylgXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG5cclxuICAgICAgICAgIGlmICghISF0aGlzLnBhcmFtTW9kZSkge1xyXG5cclxuICAgICAgICAgICAgLy9nZXRCeUlkT2JqZWN0JFxyXG4gICAgICAgICAgICBpZiAoISEhdGhpcy5nZXRCeUlkT2JqZWN0JCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICAgICAgYENvcmVGb3JtQ29udHJvbFNlZWtlckNvbXBvbmVudCBFcnJvcjogUmVxdWlyZWQgaW5wdXRzOlxyXG4gICAgICAgICAgICAgICAgICBnZXRCeUlkT2JqZWN0JDogQmVoYXZpb3JTdWJqZWN0Jmx0O2FueSZndDsgKGZvciAnJHt0aGlzLm5nQ29udHJvbC5uYW1lfScpYFxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoISEhdGhpcy5ib3VuZEZyb20pIHtcclxuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgICAgYEFsbCBfU0VFS0VSIGNvbnRyb2xzIHJlcXVpcmUgaW5wdXQ6XHJcbiAgICAgICAgICAgICAgICAgICAgYm91bmRGcm9tOiBzdHJpbmc7IChmb3IgJyR7dGhpcy5uZ0NvbnRyb2wubmFtZX0nKWAsXHJcbiAgICAgICAgICAgICAgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICghISF0aGlzLnNob3duRnJvbSkge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgICBgQWxsIF9TRUVLRVIgY29udHJvbHMgcmVxdWlyZSBpbnB1dDpcclxuICAgICAgICAgICAgICAgICAgICBzaG93bkZyb206IHN0cmluZzsgKGZvciAnJHt0aGlzLm5nQ29udHJvbC5uYW1lfScpYCxcclxuICAgICAgICAgICAgICBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9uc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICghIXRoaXMuaW5kaXJlY3RCaW5kaW5nKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5iaW5kR3JpZElkVG8pIHtcclxuICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgICAgIGBDb3JlRm9ybUNvbnRyb2xTZWVrZXJDb21wb25lbnQgRXJyb3I6IE7hur91IGluZGlyZWN0QmluZGluZyA9IHRydWUsIGLhuq90IGJ14buZYyBwaOG6o2kgY8OzIHRow6ptIHRodeG7mWMgdMOtbmggYmluZEdyaWRJZFRvICh0csaw4budbmcgJyR7dGhpcy5uZ0NvbnRyb2wubmFtZX0nKWBcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuXHJcbiAgICAgIC8qIEVORDogQ0hFQ0sgSU5QVVRTICovXHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLmdldEJ5SWRPYmplY3QkPy5zdWJzY3JpYmUoeCA9PiB7XHJcblxyXG4gICAgICAgICAgaWYgKCEheCkge1xyXG4gICAgICAgICAgICBpZiAoISEhdGhpcy5tdWx0aU1vZGUpIHtcclxuICAgICAgICAgICAgICB0aGlzLnZhbHVlVG9TaG93ID0geFt0aGlzLnNob3duRnJvbV07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICghISF0aGlzLm11bHRpTW9kZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMudmFsdWVUb1Nob3cgPSBcIlwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG5cclxuICAgICAgaWYgKCEhdGhpcy5vYmplY3RMaXN0JCkge1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgdGhpcy5vYmplY3RMaXN0JC5zdWJzY3JpYmUoeCA9PiB0aGlzLnNlbGVjdGVkRGF0YSA9IHgpXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcblxyXG4gICAgfSlcclxuXHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMubWFwKHggPT4geD8udW5zdWJzY3JpYmUoKSlcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy52YWx1ZSA9IG9iaik7XHJcbiAgICBpZiAoISF0aGlzLm11bHRpTW9kZSkge1xyXG4gICAgICBjb25zb2xlLmdyb3VwKCdXcml0ZSB2YWx1ZSBmb3IgJyArIHRoaXMubmdDb250cm9sLm5hbWUpO1xyXG4gICAgICBjb25zb2xlLmxvZyhcInRoaXMubXVsdGlNb2RlQ29sdW1uc1wiLCB0aGlzLm11bHRpTW9kZUNvbHVtbnMpXHJcbiAgICAgIGNvbnNvbGUubG9nKCdUbyBkbzogQXNzaWduIGFwaSByZXMgdG8gdGhlIHNlbGVjdGVkRGF0YScpXHJcbiAgICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2xpY2tTZWVrKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jbGljayQ/Lm5leHQodHJ1ZSk7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCB0aGlzLnJlYWRvbmx5KSByZXR1cm47XHJcbiAgICB0aGlzLnNvdXJjZU9wZW4gPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3QoKTogdm9pZCB7XHJcbiAgICBpZiAoISF0aGlzLm11bHRpTW9kZSkge1xyXG5cclxuICAgICAgaWYgKCF0aGlzLmluZGlyZWN0QmluZGluZykge1xyXG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMucGVuZGluZ1NlbGVjdGVkRGF0YS5maWx0ZXIoeCA9PiB0aGlzLnNlbGVjdGVkRGF0YS5maWx0ZXIoeSA9PiB5LmlkID09PSB4LklkKS5sZW5ndGggPT09IDApXHJcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0ZWREYXRhID0gWy4uLnRoaXMuc2VsZWN0ZWREYXRhLCAuLi5maWx0ZXJdO1xyXG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGVkSWRzOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgIG5ld1NlbGVjdGVkRGF0YS5tYXAoeCA9PiBuZXdTZWxlY3RlZElkcy5wdXNoKHguaWQpKVxyXG4gICAgICAgIHRoaXMub2JqZWN0TGlzdCQubmV4dChuZXdTZWxlY3RlZERhdGEpO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXdTZWxlY3RlZElkcztcclxuICAgICAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlKG5ld1NlbGVjdGVkSWRzKVxyXG4gICAgICAgIHRoaXMucGVuZGluZ1NlbGVjdGVkRGF0YSA9IFtdO1xyXG4gICAgICAgIHRoaXMuc291cmNlT3BlbiA9IGZhbHNlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucGVuZGluZ1NlbGVjdGVkRGF0YS5tYXAoKHgsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAvLyBnw6FuIGlkIGPhu6dhIGzGsOG7m2kgbmd14buTbiB2w6BvIGPhu5l0IGPhuqduIHRoaeG6v3RcclxuICAgICAgICAgIHhbdGhpcy5iaW5kR3JpZElkVG9dID0geC5pZFxyXG4gICAgICAgICAgLy8gc2F1IMSRw7MgaG/DoW4gaWQgbsOgeSBzYW5nIGdpw6EgdHLhu4sg4bqjbywgZWFjaCBcInhcIiBpdGVtIG11c3QgaGF2ZSBhbiB1bmlxdWUgaWRcclxuICAgICAgICAgIHguaWQgPSAobmV3IERhdGUoKS5nZXRUaW1lKCkgLSBpbmRleCkgKiAoLTEpIC8vICogKC0xKTogdG8gYnlwYXNzIChsb29zaW5nIG9mL2NvbmZ1c2luZyB3aXRoKSBleGlzdGluZyBpbmZvcm1hdGlvblxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0ZWREYXRhID0gWy4uLnRoaXMuc2VsZWN0ZWREYXRhLCAuLi50aGlzLnBlbmRpbmdTZWxlY3RlZERhdGFdO1xyXG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGVkSWRzOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgIG5ld1NlbGVjdGVkRGF0YS5tYXAoeCA9PiBuZXdTZWxlY3RlZElkcy5wdXNoKHguaWQpKVxyXG4gICAgICAgIHRoaXMub2JqZWN0TGlzdCQubmV4dChuZXdTZWxlY3RlZERhdGEpO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXdTZWxlY3RlZElkcztcclxuICAgICAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlKG5ld1NlbGVjdGVkRGF0YSlcclxuICAgICAgICB0aGlzLnBlbmRpbmdTZWxlY3RlZERhdGEgPSBbXTtcclxuICAgICAgICB0aGlzLnNvdXJjZU9wZW4gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DYW5jZWwoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNvdXJjZU9wZW4gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG9uUm93RG91YmxlQ2xpY2soZTogYW55KSB7XHJcbiAgICB0aGlzLndyaXRlVmFsdWUoZVt0aGlzLmJvdW5kRnJvbV0pO1xyXG4gICAgdGhpcy5vbkNoYW5nZShlW3RoaXMuYm91bmRGcm9tXSk7XHJcbiAgICB0aGlzLnZhbHVlVG9TaG93ID0gZVt0aGlzLnNob3duRnJvbV07XHJcbiAgICB0aGlzLnNvdXJjZU9wZW4gPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoISF0aGlzLmFsc29CaW5kVG8pIHtcclxuICAgICAgY29uc3QgZm9ybSA9IHRoaXMubmdDb250cm9sLmNvbnRyb2w/LnBhcmVudDtcclxuICAgICAgaWYgKGZvcm0pIHtcclxuICAgICAgICB0aGlzLmFsc29CaW5kVG8ubWFwKCh4LCBpbmRleCkgPT4ge1xyXG5cclxuICAgICAgICAgIC8qXHJcbiAgICAgICAgICBzdGFydDogVmFsaWRhdGUgRGV2ZWxvcGVyIGlucHV0XHJcbiAgICAgICAgICAqL1xyXG4gICAgICAgICAgaWYgKGlzRGV2TW9kZSgpICYmIGluZGV4ID09PSAwKSB7XHJcbiAgICAgICAgICAgIGlmICghISF4LnRha2VGcm9tKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXCJ0YWtlRnJvbSB3YXMgdW5kZWZpbmVkXCIsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmICghISFlW3gudGFrZUZyb21dKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihgWW91IGV4cGVjdCBhIHZhbHVlIGZyb20gJyR7eC50YWtlRnJvbX0nLCBidXQgdGhlIHNlZWtlciBncmlkIGRvZXMgbm90IGhhdmUgdGhpcyBjb2x1bW5gLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCEhIXguYmluZFRvKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXCJiaW5kVG8gd2FzIHVuZGVmaW5lZFwiLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAoISEhZm9ybS5nZXQoeC5iaW5kVG8pKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihgWW91IGV4cGVjdCB0byBiaW5kIHZhbHVlIHRvICcke3guYmluZFRvfScsIGJ1dCB0aGUgZm9ybSBncm91cCBkb2VzIG5vdCBoYXZlIHRoaXMgY29udHJvbGAsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8qXHJcbiAgICAgICAgICBlbmQ6IFZhbGlkYXRlIERldmVsb3BlciBpbnB1dFxyXG4gICAgICAgICAgKi9cclxuXHJcbiAgICAgICAgICBmb3JtLmdldCh4LmJpbmRUbyk/LnNldFZhbHVlKGVbeC50YWtlRnJvbV0pO1xyXG4gICAgICAgICAgZm9ybS5nZXQoeC5iaW5kVG8pPy5tYXJrQXNUb3VjaGVkO1xyXG4gICAgICAgICAgZm9ybS5nZXQoeC5iaW5kVG8pPy5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uSXRlbURvdWJsZUNsaWNrKGU6IElPcmdUcmVlSXRlbSkge1xyXG4gICAgdGhpcy53cml0ZVZhbHVlKGUuaWQpO1xyXG4gICAgdGhpcy52YWx1ZVRvU2hvdyA9IGUudHJlZSRUaXRsZTtcclxuICAgIHRoaXMub25DaGFuZ2UoZS5pZCk7XHJcbiAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgIHRoaXMuc291cmNlT3BlbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5vbkRvdWJsZUNsaWNrLmVtaXQoZSk7XHJcbiAgfVxyXG5cclxuICBvbkNvbHVtbnNJbml0KGU6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKCEhdGhpcy5tdWx0aU1vZGVFeHRlbmRlZENvbHVtbnMpIHtcclxuICAgICAgdGhpcy5tdWx0aU1vZGVDb2x1bW5zID0gWy4uLmUsIC4uLnRoaXMubXVsdGlNb2RlRXh0ZW5kZWRDb2x1bW5zXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucyA9IGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdGVkRGF0YUNoYW5nZShlOiBhbnkpIHtcclxuICAgIGlmICghIXRoaXMubXVsdGlNb2RlRXh0ZW5kZWRDb2x1bW5zKSB7XHJcbiAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucyA9IFsuLi5lLmNvbHVtbnMsIC4uLnRoaXMubXVsdGlNb2RlRXh0ZW5kZWRDb2x1bW5zXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucyA9IGUuY29sdW1ucztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnBlbmRpbmdTZWxlY3RlZERhdGEgPSBlLmRhdGE7XHJcbiAgfVxyXG5cclxuICBvblRvb2xDbGljayhlOiBJQ29yZVRhYmxlVG9vbENsaWNrRXZlbnRFbWl0dGVyRGF0YSkge1xyXG4gICAgaWYgKGUuY29kZSA9PT0gRUNvcmVUYWJsZVRvb2xDb2RlLmRlbGV0ZSkge1xyXG4gICAgICBjb25zdCBuZXdPYmplY3RMaXN0ID0gdGhpcy5vYmplY3RMaXN0JC52YWx1ZS5maWx0ZXIoeCA9PiB4LmlkICE9PSBlLmlkKVxyXG4gICAgICBjb25zdCBuZXdJZHMgPSB0aGlzLnZhbHVlLmZpbHRlcigoeDogYW55KSA9PiB4ICE9PSBlLmlkKVxyXG5cclxuICAgICAgdGhpcy52YWx1ZSA9IG5ld0lkcztcclxuICAgICAgdGhpcy5vYmplY3RMaXN0JC5uZXh0KG5ld09iamVjdExpc3QpO1xyXG5cclxuICAgICAgdGhpcy5vbkNoYW5nZShuZXdJZHMpO1xyXG4gICAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2xpY2tDbGVhcigpIHtcclxuXHJcbiAgICB0aGlzLndyaXRlVmFsdWUobnVsbCk7XHJcbiAgICB0aGlzLm9uQ2hhbmdlKG51bGwpO1xyXG4gICAgdGhpcy52YWx1ZVRvU2hvdyA9IFwiXCI7XHJcblxyXG4gIH1cclxuXHJcbiAgb25TZWxlY3RlZERhdGFSb3dEb3VibGVDbGljayhlOiBhbnkpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiR2l2ZW4gcm93IGRhdGE6IFwiLCBlKVxyXG4gICAgaWYgKCFlLmlkKSB7XHJcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFwiTm8gJ2lkJyBjb2x1bW5zIGZvdW5kIG9yIGN1cnJlbnQgaWQgd2FzIG51bGxcIiwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5lZGl0QnVmZmVyRm9ybT8uZ2V0KCdpZCcpPy5wYXRjaFZhbHVlKGUuaWQpXHJcbiAgICB9IGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKGV4Lm1lc3NhZ2UsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKCEhdGhpcy5tdWx0aU1vZGVFeHRlbmRlZENvbHVtbnMubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMubXVsdGlNb2RlRXh0ZW5kZWRDb2x1bW5zLm1hcCh4ID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgdGhpcy5lZGl0QnVmZmVyRm9ybT8uZ2V0KHguZmllbGQpPy5wYXRjaFZhbHVlKGVbeC5maWVsZF0pXHJcbiAgICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uOiBhbnkpIHtcclxuICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihleGNlcHRpb24ubWVzc2FnZSwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLmVkaXRpbmdJZCA9IGUuaWQ7XHJcbiAgICAgIH0gY2F0Y2ggKGV4Y2VwdGlvbjogYW55KSB7XHJcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihleGNlcHRpb24ubWVzc2FnZSwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zaG93RWRpdEJ1ZmZlciA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkVkaXRCdWZmZXJTdWJtaXQoZTogYW55KSB7XHJcbiAgICB2YXIgZm9ybURhdGEgPSB0aGlzLmVkaXRCdWZmZXJGb3JtLmdldFJhd1ZhbHVlKCk7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLnNlbGVjdGVkRGF0YT8uZmlsdGVyKHggPT4geC5pZCA9PT0gdGhpcy5lZGl0aW5nSWQpO1xyXG4gICAgICBpZiAoZmlsdGVyPy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICB0aGlzLm11bHRpTW9kZUV4dGVuZGVkQ29sdW1ucz8ubWFwKGMgPT4ge1xyXG4gICAgICAgICAgZmlsdGVyWzBdW2MuZmllbGRdID0gZm9ybURhdGFbYy5maWVsZF07XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmVkaXRCdWZmZXJEYXRhJC5uZXh0KGZvcm1EYXRhKTtcclxuICAgICAgdGhpcy5zaG93RWRpdEJ1ZmZlciA9IGZhbHNlO1xyXG4gICAgfSBjYXRjaCAoZXg6IGFueSkge1xyXG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhleCk7XHJcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoZXgubWVzc2FnZSB8fCAnQW4gZXJyb3Igb2NjdXJlZCB3aGlsZSB0cnlpbmcgdG8gdXBkYXRlIHNlbGVjdGVkRGF0YScsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkVkaXRCdWZmZXJDYW5jZWwoZTogYW55KSB7XHJcbiAgICB0aGlzLnNob3dFZGl0QnVmZmVyID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBvbkVkaXRCdWZmZXJGb3JtQ3JlYXRlZChlOiBGb3JtR3JvdXApIHtcclxuICAgIHRoaXMuZWRpdEJ1ZmZlckZvcm0gPSBlO1xyXG4gIH1cclxuXHJcbn0iLCI8ZGl2ICNjb250YWluZXIgY2xhc3M9XCJjb3JlLWZvcm0tY29udHJvbC1zZWVrZXItY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtd3JhcHBlclwiIFtjbGFzcy5kLW5vbmVdPVwiISFtdWx0aU1vZGVcIj5cclxuICAgICAgICA8bGFiZWwgI3Nob3duVGV4dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwidGV4dCBmb3JtLWNvbnRyb2xcIiBbY2xhc3MuZm9ybS1jb250cm9sLWRpc2FibGVkXT1cImRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIFthcHBUb29sdGlwXT1cInZhbHVlVG9TaG93XCI+e3sgdmFsdWVUb1Nob3cgfX08L3NwYW4+XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICBAaWYgKCFtdWx0aU1vZGUpIHtcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2xlYXItaWNvbi13cmFwcGVyXCIgW2NsYXNzLmQtbm9uZV09XCIhIWRpc2FibGVkIHx8ICEhIXZhbHVlXCIgKGNsaWNrKT1cIm9uQ2xpY2tDbGVhcigpXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LXdyYXBwZXJcIiBbYXBwVG9vbHRpcF09XCInVUkuQ09SRV9DT05UT0xfQ09NTU9OX0NMRUFSJyB8IHRyYW5zbGF0ZTogbGFuZ1wiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmZWF0aGVyLXhcIj48L2k+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInNlZWtlci1pY29uLXdyYXBwZXJcIiBbY2xhc3MuZm9ybS1jb250cm9sLWRpc2FibGVkXT1cImRpc2FibGVkXCIgW2NsYXNzLm11bHRpLW1vZGVdPVwiISFtdWx0aU1vZGVcIlxyXG4gICAgICAgIChjbGljayk9XCJvbkNsaWNrU2VlaygpXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtd3JhcHBlclwiIFtjbGFzcy5mb3JtLWNvbnRyb2wtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmZWF0aGVyLXNlYXJjaFwiPjwvaT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgQGlmICghIW11bHRpTW9kZSkge1xyXG4gICAgPGRpdiBjbGFzcz1cImNvcmUtdGFiYmUtd3JhcHBlclwiPlxyXG4gICAgICAgIDxjb3JlLXRhYmxlIFtjb2x1bW5zXT1cIm11bHRpTW9kZUNvbHVtbnNcIiBbZGF0YV09XCJzZWxlY3RlZERhdGFcIiBbc2hvd1Rvb2xzXT1cIiEhIWRpc2FibGVkXCIgW3Rvb2xzXT1cInRvb2xzXCJcclxuICAgICAgICAgICAgW3NlYXJjaFN3aXRjaERpc2FibGVkXT1cInRydWVcIiAob25Ub29sQ2xpY2spPVwib25Ub29sQ2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChvblJvd0RvdWJsZUNsaWNrKT1cIm9uU2VsZWN0ZWREYXRhUm93RG91YmxlQ2xpY2soJGV2ZW50KVwiPjwvY29yZS10YWJsZT5cclxuICAgIDwvZGl2PlxyXG4gICAgfVxyXG5cclxuICAgIEBpZiAoISFzb3VyY2VPcGVuKSB7XHJcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWwtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlci1wYW5lbFwiPlxyXG4gICAgICAgICAgICAgICAgPGNvcmUtcGFnZS1oZWFkZXIgW3RpdGxlXT1cInRpdGxlXCIgW2hpZGVCdXR0b25Hcm91cF09XCJ0cnVlXCIgKm5nSWY9XCJzaG93UGFnZUhlYWRlclwiPjwvY29yZS1wYWdlLWhlYWRlcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzb3VyY2UtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZlYXRoZXIteFwiIChjbGljayk9XCJvbkNhbmNlbCgpXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZC1ibG9ja109XCJzZWVrZXJTb3VyY2VUeXBlPT09J09SR0FOSVpBVElPTl9VTklUX1NFRUsnXCI+PC9pPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICBAc3dpdGNoIChzZWVrZXJTb3VyY2VUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICBAY2FzZSAoJ0pPQl9TRUVLJykge1xyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImpvYlNlZWtcIj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgQGNhc2UgKCdFTVBMT1lFRV9TRUVLJykge1xyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImVtcGxveWVlU2Vla1wiPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBAY2FzZSAoJ0NPTlRSQUNUX1NFRUsnKSB7XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udHJhY3RTZWVrXCI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIEBjYXNlICgnV09SS0lOR19TRUVLJykge1xyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIndvcmtpbmdTZWVrXCI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIEBjYXNlICgnV0FHRV9TRUVLJykge1xyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIndhZ2VTZWVrXCI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIEBjYXNlICgnT1JHQU5JWkFUSU9OX1VOSVRfU0VFSycpIHtcclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJvcmdhbml6YXRpb25Vbml0U2Vla1wiPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBAY2FzZSAoJ1BPU0lUSU9OX1NFRUsnKSB7XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicG9zaXRpb25TZWVrXCI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIEBjYXNlICgnUE9TSVRJT05fQ09OQ1VSUkVOVF9TRUVLJykge1xyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBvc2l0aW9uQ29uY3VycmVudFNlZWtcIj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICBAaWYgKCFoaWRlRm9vdGVyKSB7XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb290ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgQGlmICghIXBlbmRpbmdTZWxlY3RlZERhdGE/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uU2VsZWN0KClcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnVUlfQ09SRV9DT05GSVJNX0RJQUxPR19CVVRUT05fU0VMRUNUJyB8IHRyYW5zbGF0ZTogbGFuZyB9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uQ2FuY2VsKClcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAnVUlfQ09SRV9DT05GSVJNX0RJQUxPR19CVVRUT05fQ0FOQ0VMJyB8IHRyYW5zbGF0ZTogbGFuZyB9fTwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICB9XHJcblxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjam9iU2Vlaz5cclxuICAgIDxjb3JlLWpvYi1zZWVrZXIgW3ByZURlZmluZWRPdXRlclBhcmFtJF09XCJwcmVEZWZpbmVkT3V0ZXJQYXJhbSRcIiBbbXVsdGlNb2RlXT1cIm11bHRpTW9kZVwiIFtleGNsdWRlZElkcyRdPVwiZXhjbHVkZWRJZHMkXCJcclxuICAgICAgICAocm93RG91YmxlQ2xpY2spPVwib25Sb3dEb3VibGVDbGljaygkZXZlbnQpXCIgKGNvbHVtbnNJbml0KT1cIm9uQ29sdW1uc0luaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgKHNlbGVjdGVkRGF0YUNoYW5nZSk9XCJvblNlbGVjdGVkRGF0YUNoYW5nZSgkZXZlbnQpXCI+PC9jb3JlLWpvYi1zZWVrZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2VtcGxveWVlU2Vlaz5cclxuICAgIDxjb3JlLWVtcGxveWVlLXNlZWtlciBbcHJlRGVmaW5lZE91dGVyUGFyYW0kXT1cInByZURlZmluZWRPdXRlclBhcmFtJFwiIFttdWx0aU1vZGVdPVwibXVsdGlNb2RlXCIgW2V4Y2x1ZGVkSWRzJF09XCJleGNsdWRlZElkcyRcIlxyXG4gICAgICAgIChyb3dEb3VibGVDbGljayk9XCJvblJvd0RvdWJsZUNsaWNrKCRldmVudClcIiAoY29sdW1uc0luaXQpPVwib25Db2x1bW5zSW5pdCgkZXZlbnQpXCJcclxuICAgICAgICAoc2VsZWN0ZWREYXRhQ2hhbmdlKT1cIm9uU2VsZWN0ZWREYXRhQ2hhbmdlKCRldmVudClcIj48L2NvcmUtZW1wbG95ZWUtc2Vla2VyPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNjb250cmFjdFNlZWs+XHJcbiAgICA8Y29yZS1jb250cmFjdC1zZWVrZXIgW3ByZURlZmluZWRPdXRlclBhcmFtJF09XCJwcmVEZWZpbmVkT3V0ZXJQYXJhbSRcIiBbbXVsdGlNb2RlXT1cIm11bHRpTW9kZVwiIFtleGNsdWRlZElkcyRdPVwiZXhjbHVkZWRJZHMkXCJcclxuICAgICAgICAocm93RG91YmxlQ2xpY2spPVwib25Sb3dEb3VibGVDbGljaygkZXZlbnQpXCIgKGNvbHVtbnNJbml0KT1cIm9uQ29sdW1uc0luaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgKHNlbGVjdGVkRGF0YUNoYW5nZSk9XCJvblNlbGVjdGVkRGF0YUNoYW5nZSgkZXZlbnQpXCI+PC9jb3JlLWNvbnRyYWN0LXNlZWtlcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjd29ya2luZ1NlZWs+XHJcbiAgICA8Y29yZS13b3JraW5nLXNlZWtlciBbcHJlRGVmaW5lZE91dGVyUGFyYW0kXT1cInByZURlZmluZWRPdXRlclBhcmFtJFwiIFttdWx0aU1vZGVdPVwibXVsdGlNb2RlXCIgW2V4Y2x1ZGVkSWRzJF09XCJleGNsdWRlZElkcyRcIlxyXG4gICAgICAgIChyb3dEb3VibGVDbGljayk9XCJvblJvd0RvdWJsZUNsaWNrKCRldmVudClcIiAoY29sdW1uc0luaXQpPVwib25Db2x1bW5zSW5pdCgkZXZlbnQpXCJcclxuICAgICAgICAoc2VsZWN0ZWREYXRhQ2hhbmdlKT1cIm9uU2VsZWN0ZWREYXRhQ2hhbmdlKCRldmVudClcIj48L2NvcmUtd29ya2luZy1zZWVrZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3dhZ2VTZWVrPlxyXG4gICAgPGNvcmUtd2FnZS1zZWVrZXIgW3ByZURlZmluZWRPdXRlclBhcmFtJF09XCJwcmVEZWZpbmVkT3V0ZXJQYXJhbSRcIiBbbXVsdGlNb2RlXT1cIm11bHRpTW9kZVwiIFtleGNsdWRlZElkcyRdPVwiZXhjbHVkZWRJZHMkXCJcclxuICAgICAgICAocm93RG91YmxlQ2xpY2spPVwib25Sb3dEb3VibGVDbGljaygkZXZlbnQpXCIgKGNvbHVtbnNJbml0KT1cIm9uQ29sdW1uc0luaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgKHNlbGVjdGVkRGF0YUNoYW5nZSk9XCJvblNlbGVjdGVkRGF0YUNoYW5nZSgkZXZlbnQpXCI+PC9jb3JlLXdhZ2Utc2Vla2VyPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNwb3NpdGlvblNlZWs+XHJcbiAgICA8Y29yZS1wb3NpdGlvbi1zZWVrZXIgW3ByZURlZmluZWRPdXRlclBhcmFtJF09XCJwcmVEZWZpbmVkT3V0ZXJQYXJhbSRcIiBbbXVsdGlNb2RlXT1cIm11bHRpTW9kZVwiIFtleGNsdWRlZElkcyRdPVwiZXhjbHVkZWRJZHMkXCJcclxuICAgICAgICBbc2Vla2VyVmVyaWZ5SWdub3JlXT1cInNlZWtlclZlcmlmeUlnbm9yZVwiIChyb3dEb3VibGVDbGljayk9XCJvblJvd0RvdWJsZUNsaWNrKCRldmVudClcIlxyXG4gICAgICAgIChjb2x1bW5zSW5pdCk9XCJvbkNvbHVtbnNJbml0KCRldmVudClcIlxyXG4gICAgICAgIChzZWxlY3RlZERhdGFDaGFuZ2UpPVwib25TZWxlY3RlZERhdGFDaGFuZ2UoJGV2ZW50KVwiPjwvY29yZS1wb3NpdGlvbi1zZWVrZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3Bvc2l0aW9uQ29uY3VycmVudFNlZWs+XHJcbiAgICA8Y29yZS1wb3NpdGlvbi1jb25jdXJyZW50LXNlZWtlciBbcHJlRGVmaW5lZE91dGVyUGFyYW0kXT1cInByZURlZmluZWRPdXRlclBhcmFtJFwiIFttdWx0aU1vZGVdPVwibXVsdGlNb2RlXCIgW2V4Y2x1ZGVkSWRzJF09XCJleGNsdWRlZElkcyRcIlxyXG4gICAgICAgIChyb3dEb3VibGVDbGljayk9XCJvblJvd0RvdWJsZUNsaWNrKCRldmVudClcIiAoY29sdW1uc0luaXQpPVwib25Db2x1bW5zSW5pdCgkZXZlbnQpXCJcclxuICAgICAgICAoc2VsZWN0ZWREYXRhQ2hhbmdlKT1cIm9uU2VsZWN0ZWREYXRhQ2hhbmdlKCRldmVudClcIj48L2NvcmUtcG9zaXRpb24tY29uY3VycmVudC1zZWVrZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI29yZ2FuaXphdGlvblVuaXRTZWVrPlxyXG4gICAgPGNvcmUtb3JnLXVuaXQtc2Vla2VyIFtleGNsdWRlZElkcyRdPVwiZXhjbHVkZWRJZHMkXCIgKGl0ZW1Eb3VibGVDbGljayk9XCJvbkl0ZW1Eb3VibGVDbGljaygkZXZlbnQpXCI+PC9jb3JlLW9yZy11bml0LXNlZWtlcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjYXZhdGFyIGxldC1hdmF0YXI9XCJjb250ZXh0LmF2YXRhclwiPlxyXG4gICAgPGltZyAqbmdJZj1cImF2YXRhciAhPSBudWxsXCIgW3NyY109XCJhdmF0YXIgfCBtYXBBdmF0YXJUb1NlcnZlclwiIGNsYXNzPVwiaW4tdGFibGUtYXZhdGFyXCIgYXBwSW1hZ2VFcnJvclJlc29sdmVyPlxyXG4gICAgPGltZyAqbmdJZj1cImF2YXRhciA9PSBudWxsXCIgW3NyY109XCJkZWZhdWx0QXZhdGFyXCIgY2xhc3M9XCJpbi10YWJsZS1hdmF0YXJcIiBhcHBJbWFnZUVycm9yUmVzb2x2ZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxuZy10ZW1wbGF0ZSAjc3RpY2tlciBsZXQtY29kZT1cImNvbnRleHQuYWN0ZmxnXCI+XHJcbiAgICA8Y29yZS1zdGF0dXMtc3RpY2tlciBbY29kZV09XCJjb2RlXCIgW2lzVHJ1ZUNvZGVdPVwidHJ1ZVwiPjwvY29yZS1zdGF0dXMtc3RpY2tlcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxkaXYgW2NsYXNzLmQtbm9uZV09XCIhc2hvd0VkaXRCdWZmZXJcIj5cclxuICAgIDxjb3JlLXBhZ2UtZWRpdC1saXRlIFtzZWN0aW9uc109XCJtdWx0aU1vZGVFeHRlbmRlZFNlY3Rpb25zXCIgKG9uRm9ybUNyZWF0ZWQpPVwib25FZGl0QnVmZmVyRm9ybUNyZWF0ZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgKHN1Ym1pdExvZ2ljKT1cIm9uRWRpdEJ1ZmZlclN1Ym1pdCgkZXZlbnQpXCIgKGNhbmNlbExvZ2ljKT1cIm9uRWRpdEJ1ZmZlckNhbmNlbCgkZXZlbnQpXCI+PC9jb3JlLXBhZ2UtZWRpdC1saXRlPlxyXG48L2Rpdj4iXX0=
|
|
541
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1mb3JtLWNvbnRyb2wtc2Vla2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLWZvcm0tY29udHJvbC1zZWVrZXIvY29yZS1mb3JtLWNvbnRyb2wtc2Vla2VyL2NvcmUtZm9ybS1jb250cm9sLXNlZWtlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9saWJyYXJpZXMvY29yZS1mb3JtLWNvbnRyb2wtc2Vla2VyL2NvcmUtZm9ybS1jb250cm9sLXNlZWtlci9jb3JlLWZvcm0tY29udHJvbC1zZWVrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWMsS0FBSyxFQUFxQixTQUFTLEVBQUUsU0FBUyxFQUF5QixNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xLLE9BQU8sRUFBRSxlQUFlLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBQzdHLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRTdGLE9BQU8sRUFBYSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUEyRCxNQUFNLHVDQUF1QyxDQUFDO0FBRTdLLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGdGQUFnRixDQUFDO0FBQzdILE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGdGQUFnRixDQUFDO0FBQzdILE9BQU8s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QW9CO3NCQUE1QixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFJcUIsZ0JBQWdCO3NCQUExQyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFDaEIsU0FBUztzQkFBakIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUdHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUVJLGFBQWE7c0JBQXRCLE1BQU07Z0JBRWlCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBpc0Rldk1vZGUsIFZpZXdDaGlsZCwgSW5qZWN0b3IsIFRlbXBsYXRlUmVmLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb3JlRm9ybUNvbnRyb2xCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1mb3JtLWNvbnRyb2wtYmFzZS9jb3JlLWZvcm0tY29udHJvbC1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEVudW1Db3JlRm9ybUNvbnRyb2xTZWVrZXJTb3VyY2VUeXBlIH0gZnJvbSAnLi4vRW51bUNvcmVGb3JtQ29udHJvbFNlZWtlclNvdXJjZVR5cGUnO1xyXG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hbGVydC9hbGVydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3Jtc01vZHVsZSwgTkdfVkFMVUVfQUNDRVNTT1IsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgSUNvcmVGb3JtQ29udHJvbFNlZWtlckV4dHJhQmluZGluZ01vZGVsLCBJQ29yZUZvcm1TZWN0aW9uIH0gZnJvbSAnLi4vLi4vY29yZS1mb3JtL2NvcmUtZm9ybS9lbnVtLWludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBJT3JnVHJlZUl0ZW0gfSBmcm9tICcuLi8uLi9jb3JlLW9yZy10cmVlL2NvcmUtb3JnLXRyZWUvSU9yZ1RyZWVJdGVtJztcclxuaW1wb3J0IHsgQ29yZVRhYmxlQ29tcG9uZW50LCBFQ29yZVRhYmxlVG9vbENsYXNzLCBFQ29yZVRhYmxlVG9vbENvZGUsIElDb3JlVGFibGVUb29sQ2xpY2tFdmVudEVtaXR0ZXJEYXRhLCBJQ29yZVRhYmxlVG9vbEl0ZW0gfSBmcm9tICcuLi8uLi9jb3JlLXRhYmxlL2NvcmUtdGFibGUuY29tcG9uZW50JztcclxuXHJcbmltcG9ydCB7IENvcmVFbXBsb3llZVNlZWtlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtZW1wbG95ZWUtc2Vla2VyL2NvcmUtZW1wbG95ZWUtc2Vla2VyL2NvcmUtZW1wbG95ZWUtc2Vla2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVDb250cmFjdFNlZWtlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtY29udHJhY3Qtc2Vla2VyL2NvcmUtY29udHJhY3Qtc2Vla2VyL2NvcmUtY29udHJhY3Qtc2Vla2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVXb3JraW5nU2Vla2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS13b3JraW5nLXNlZWtlci9jb3JlLXdvcmtpbmctc2Vla2VyL2NvcmUtd29ya2luZy1zZWVrZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29yZVdhZ2VTZWVrZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLXdhZ2Utc2Vla2VyL2NvcmUtd2FnZS1zZWVrZXIvY29yZS13YWdlLXNlZWtlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb3JlUG9zaXRpb25TZWVrZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLXBvc2l0aW9uLXNlZWtlci9jb3JlLXBvc2l0aW9uLXNlZWtlci9jb3JlLXBvc2l0aW9uLXNlZWtlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBFbnVtVHJhbnNsYXRlS2V5IH0gZnJvbSBcImFscGhhLWdsb2JhbC1jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgTXVsdGlMYW5ndWFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tdWx0aS1sYW5ndWFnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmFuZG9tQXZhdGFyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3JhbmRvbS1hdmF0YXIuc2VydmljZSc7XHJcbmltcG9ydCB7IG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL2FsZXJ0T3B0aW9ucyc7XHJcbmltcG9ydCB7IElDb3JlVGFibGVDb2x1bW5JdGVtIH0gZnJvbSAnLi4vLi4vY29yZS10YWJsZS9JQ29yZVRhYmxlQ29sdW1uSXRlbSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVBpcGUgfSBmcm9tICcuLi8uLi8uLi9hcHAtcGlwZXMvdHJhbnNsYXRlLnBpcGUnO1xyXG5pbXBvcnQgeyBDb3JlUG9zaXRpb25Db25jdXJyZW50U2Vla2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1wb3NpdGlvbi1jb25jdXJyZW50LXNlZWtlci9jb3JlLXBvc2l0aW9uLWNvbmN1cnJlbnQtc2Vla2VyL2NvcmUtcG9zaXRpb24tY29uY3VycmVudC1zZWVrZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29yZVBhZ2VIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLXBhZ2UtaGVhZGVyL2NvcmUtcGFnZS1oZWFkZXIvY29yZS1wYWdlLWhlYWRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vdG9vbHRpcC90b29sdGlwLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IENvcmVPcmdVbml0U2Vla2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1vcmctdW5pdC1zZWVrZXIvY29yZS1vcmctdW5pdC1zZWVrZXIvY29yZS1vcmctdW5pdC1zZWVrZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWFwQXZhdGFyVG9TZXJ2ZXJQaXBlIH0gZnJvbSAnLi4vLi4vLi4vYXBwLXBpcGVzL21hcC1hdmF0YXItdG8tc2VydmVyLnBpcGUnO1xyXG5pbXBvcnQgeyBDb3JlUGFnZUVkaXRMaXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1wYWdlLWVkaXQtbGl0ZS9jb3JlLXBhZ2UtZWRpdC1saXRlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVKb2JTZWVrZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb3JlLWpvYi1zZWVrZXIvY29yZS1qb2Itc2Vla2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVTdGF0dXNTdGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1zdGF0dXMtc3RpY2tlci9jb3JlLXN0YXR1cy1zdGlja2VyL2NvcmUtc3RhdHVzLXN0aWNrZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRW51bUNvcmVTZWVrZXJDb2x1bW5Db250cmFjdCwgRW51bUNvcmVTZWVrZXJDb2x1bW5Kb2IsIEVudW1Db3JlU2Vla2VyQ29sdW1uUG9zaXRpb24sIEVudW1Db3JlU2Vla2VyQ29sdW1uUG9zaXRpb25Db25jdXJyZW50LCBFbnVtQ29yZVNlZWtlckNvbHVtblN0YWZmUHJvZmlsZSwgRW51bUNvcmVTZWVrZXJDb2x1bW5XYWdlLCBFbnVtQ29yZVNlZWtlckNvbHVtbldvcmtpbmcgfSBmcm9tICcuLi9FbnVtQ29yZVNlZWtlckNvbHVtbic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2NvcmUtZm9ybS1jb250cm9sLXNlZWtlcicsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIFRyYW5zbGF0ZVBpcGUsXHJcbiAgICBNYXBBdmF0YXJUb1NlcnZlclBpcGUsXHJcbiAgICBDb3JlSm9iU2Vla2VyQ29tcG9uZW50LFxyXG4gICAgQ29yZVBhZ2VFZGl0TGl0ZUNvbXBvbmVudCxcclxuICAgIENvcmVUYWJsZUNvbXBvbmVudCxcclxuICAgIENvcmVTdGF0dXNTdGlja2VyQ29tcG9uZW50LFxyXG4gICAgQ29yZUVtcGxveWVlU2Vla2VyQ29tcG9uZW50LFxyXG4gICAgQ29yZUNvbnRyYWN0U2Vla2VyQ29tcG9uZW50LFxyXG4gICAgQ29yZVdvcmtpbmdTZWVrZXJDb21wb25lbnQsXHJcbiAgICBDb3JlV2FnZVNlZWtlckNvbXBvbmVudCxcclxuICAgIENvcmVPcmdVbml0U2Vla2VyQ29tcG9uZW50LFxyXG4gICAgQ29yZVBvc2l0aW9uU2Vla2VyQ29tcG9uZW50LFxyXG4gICAgQ29yZVBvc2l0aW9uQ29uY3VycmVudFNlZWtlckNvbXBvbmVudCxcclxuICAgIENvcmVQYWdlSGVhZGVyQ29tcG9uZW50LFxyXG4gICAgVG9vbHRpcERpcmVjdGl2ZVxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvcmUtZm9ybS1jb250cm9sLXNlZWtlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY29yZS1mb3JtLWNvbnRyb2wtc2Vla2VyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICB7XHJcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgICAgdXNlRXhpc3Rpbmc6IENvcmVGb3JtQ29udHJvbFNlZWtlckNvbXBvbmVudFxyXG4gICAgfSxcclxuICAgIENvcmVKb2JTZWVrZXJDb21wb25lbnQsXHJcbiAgICBDb3JlRW1wbG95ZWVTZWVrZXJDb21wb25lbnQsXHJcbiAgICBDb3JlQ29udHJhY3RTZWVrZXJDb21wb25lbnQsXHJcbiAgICBDb3JlV29ya2luZ1NlZWtlckNvbXBvbmVudCxcclxuICAgIENvcmVXYWdlU2Vla2VyQ29tcG9uZW50LFxyXG4gICAgQ29yZVBvc2l0aW9uU2Vla2VyQ29tcG9uZW50LFxyXG4gICAgQ29yZVBvc2l0aW9uQ29uY3VycmVudFNlZWtlckNvbXBvbmVudCxcclxuICBdXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgQ29yZUZvcm1Db250cm9sU2Vla2VyQ29tcG9uZW50IGV4dGVuZHMgQ29yZUZvcm1Db250cm9sQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuXHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2F2YXRhcicpIGF2YXRhciE6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgQFZpZXdDaGlsZCgnc3RpY2tlcicpIHN0aWNrZXIhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBuZ0NvbnRyb2whOiBOZ0NvbnRyb2w7XHJcblxyXG4gIGlzRGV2TW9kZSA9IGlzRGV2TW9kZSgpO1xyXG5cclxuICBsYW5nITogc3RyaW5nO1xyXG5cclxuICBASW5wdXQoKSB0aXRsZSE6IEVudW1UcmFuc2xhdGVLZXk7XHJcbiAgQElucHV0KCkgc2hvd1BhZ2VIZWFkZXIhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHByZURlZmluZWRPdXRlclBhcmFtJCE6IEJlaGF2aW9yU3ViamVjdDxhbnk+O1xyXG4gIEBJbnB1dCgpIGNsaWNrJCE6IEJlaGF2aW9yU3ViamVjdDxhbnk+IHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIGdldEJ5SWRPYmplY3QkITogQmVoYXZpb3JTdWJqZWN0PGFueT47XHJcbiAgQElucHV0KCkgcGFyYW1Nb2RlITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBtdWx0aU1vZGUhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIG9iamVjdExpc3QkITogQmVoYXZpb3JTdWJqZWN0PGFueVtdPjtcclxuICBASW5wdXQoKSBzaG93blNlZWtlckNvbHVtbnMhOiBzdHJpbmdbXTsgLy8gUmVkdWNlIHZpc2libGUgY29sdW1ucyBmcm9tIGJhc2UgY29tcG9uZW50LlxyXG4gIEBJbnB1dCgpIGV4Y2x1ZGVFeGlzdGluZ0xpc3QhOiBib29sZWFuOyAvLyBmcm9tIDIwMjQtMDUtMTBcclxuXHJcbiAgLyogV2hlbiBvYmplY3RzIGdpdmVuIGJ5IHRoZSBzZWVrZXIgZG91YmxlLWNsaWNrL2NoZWNrIGFyZSBpbmRpcmVjdGx5IHJlbGF0ZWQgdG8gdGhlIGNvbnRyb2wgKi9cclxuICBASW5wdXQoKSBpbmRpcmVjdEJpbmRpbmchOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGJpbmRHcmlkSWRUbyE6IHN0cmluZztcclxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuXHJcblxyXG4gIC8qIEV4dGVuZGVkIHNpbmNlIDIwMjQtMDMtMjQgKi9cclxuICBASW5wdXQoKSBtdWx0aU1vZGVFeHRlbmRlZENvbHVtbnMhOiBJQ29yZVRhYmxlQ29sdW1uSXRlbVtdO1xyXG4gIEBJbnB1dCgpIG11bHRpTW9kZUV4dGVuZGVkU2VjdGlvbnMhOiBJQ29yZUZvcm1TZWN0aW9uW107XHJcbiAgQElucHV0KCkgZWRpdEJ1ZmZlckRhdGEkITogQmVoYXZpb3JTdWJqZWN0PGFueT47XHJcbiAgQElucHV0KCkgbXVsdGlNb2RlVGFibGVIZWlnaHQhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgbXVsdGlNb2RlUm93SGVpZ2h0PzogbnVtYmVyO1xyXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuXHJcbiAgLyogU1RBUlQ6IFJFUVVJUkVEICovXHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgc2Vla2VyU291cmNlVHlwZSE6IEVudW1Db3JlRm9ybUNvbnRyb2xTZWVrZXJTb3VyY2VUeXBlO1xyXG4gIEBJbnB1dCgpIGJvdW5kRnJvbSE6IHN0cmluZzsgLy8gdGFrZSB0aGlzIGZpZWxkIGZyb20gR2V0QnlJZCByZXNwb25zZSBpbm5lckJvZHkgdG8gYmluZCB0byB0aGUgdmFsdWVcclxuICBASW5wdXQoKSBzaG93bkZyb20hOiBzdHJpbmc7IC8vIHRha2UgdGhpcyBmaWVsZCBmcm9tIEdldEJ5SWQgcmVzcG9uc2UgaW5uZXJCb2R5IHRvIGJpbmQgdG8gdGhlIHRleHRcclxuICAvKiBFTkQ6IFJFUVVJUkVEIHdoZW4gRU1QTE9ZRUVfU0VFS0VSICovXHJcblxyXG4gIEBJbnB1dCgpIGFsc29CaW5kVG8hOiBJQ29yZUZvcm1Db250cm9sU2Vla2VyRXh0cmFCaW5kaW5nTW9kZWxbXTtcclxuICBASW5wdXQoKSBzZWVrZXJWZXJpZnlJZ25vcmUhOiBib29sZWFuO1xyXG5cclxuICBAT3V0cHV0KCkgb25Eb3VibGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAVmlld0NoaWxkKCdjb250YWluZXInKSBjb250YWluZXIhOiBFbGVtZW50UmVmO1xyXG5cclxuICBzb3VyY2VPcGVuITogYm9vbGVhbjtcclxuXHJcbiAgdmFsdWVUb1Nob3chOiBzdHJpbmc7XHJcbiAgcGxhY2Vob2xkZXIhOiBzdHJpbmc7XHJcblxyXG4gIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcblxyXG4gIC8qIGZvciBtdWx0aU1vZGUgKi9cclxuICBwZW5kaW5nU2VsZWN0ZWREYXRhOiBhbnlbXSA9IFtdO1xyXG4gIHNlbGVjdGVkRGF0YTogYW55W10gPSBbXTtcclxuICBtdWx0aU1vZGVDb2x1bW5zOiBJQ29yZVRhYmxlQ29sdW1uSXRlbVtdID0gW107XHJcbiAgc2hvd0VkaXRCdWZmZXIhOiBib29sZWFuO1xyXG4gIGVkaXRCdWZmZXJGb3JtITogRm9ybUdyb3VwO1xyXG4gIGVkaXRpbmdJZCE6IG51bWJlcjtcclxuICB0b29sczogSUNvcmVUYWJsZVRvb2xJdGVtW10gPSBbe1xyXG4gICAgY29kZTogRUNvcmVUYWJsZVRvb2xDb2RlLmRlbGV0ZSxcclxuICAgIGNsYXNzOiBFQ29yZVRhYmxlVG9vbENsYXNzLmRlbGV0ZSxcclxuICAgIGNhcHRpb246IEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9DT05UUk9MX1RBQkxFX1RPT0xfREVMRVRFXHJcbiAgfV07XHJcblxyXG4gIHNob3dDbGVhckljb24hOiBib29sZWFuO1xyXG4gIGRlZmF1bHRBdmF0YXIhOiBzdHJpbmc7XHJcbiAgaGlkZUZvb3RlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBpbmRpcmVjdEJpbmRpbmdMYXN0VmlydHVhbElkOiBudW1iZXIgPSAwO1xyXG5cclxuICBleGNsdWRlZElkcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcltdPihbXSk7XHJcblxyXG4gIGV4Y2x1ZGVkQ29sdW1uc0pvYjogRW51bUNvcmVTZWVrZXJDb2x1bW5Kb2JbXSA9IFtcclxuICAgIEVudW1Db3JlU2Vla2VyQ29sdW1uSm9iLkpPQl9GQU1JTFksXHJcbiAgICBFbnVtQ29yZVNlZWtlckNvbHVtbkpvYi5KT0JfUFVSUE9TRSxcclxuICAgIEVudW1Db3JlU2Vla2VyQ29sdW1uSm9iLkpPQl9OT1RFLFxyXG4gIF07XHJcbiAgZXhjbHVkZWRDb2x1bW5zRW1wbG95ZWU6IEVudW1Db3JlU2Vla2VyQ29sdW1uU3RhZmZQcm9maWxlW10gPSBbXTtcclxuICBleGNsdWRlZENvbHVtbnNDb250cmFjdDogRW51bUNvcmVTZWVrZXJDb2x1bW5Db250cmFjdFtdID0gW107XHJcbiAgZXhjbHVkZWRDb2x1bW5zV29ya2luZzogRW51bUNvcmVTZWVrZXJDb2x1bW5Xb3JraW5nW10gPSBbXTtcclxuICBleGNsdWRlZENvbHVtbnNXYWdlOiBFbnVtQ29yZVNlZWtlckNvbHVtbldhZ2VbXSA9IFtdO1xyXG4gIGV4Y2x1ZGVkQ29sdW1uc1Bvc2l0aW9uOiBFbnVtQ29yZVNlZWtlckNvbHVtblBvc2l0aW9uW10gPSBbXTtcclxuICBleGNsdWRlZENvbHVtbnNQb3NpdGlvbkNvbmN1cnJlbnQ6IEVudW1Db3JlU2Vla2VyQ29sdW1uUG9zaXRpb25Db25jdXJyZW50W10gPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIG1sczogTXVsdGlMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvcmVKb2JTZWVrZXJDb21wb25lbnQ6IENvcmVKb2JTZWVrZXJDb21wb25lbnQsXHJcbiAgICBwcml2YXRlIGNvcmVFbXBsb3llZVNlZWtlckNvbXBvbmVudDogQ29yZUVtcGxveWVlU2Vla2VyQ29tcG9uZW50LFxyXG4gICAgcHJpdmF0ZSBjb3JlQ29udHJhY3RTZWVrZXJDb21wb25lbnQ6IENvcmVDb250cmFjdFNlZWtlckNvbXBvbmVudCxcclxuICAgIHByaXZhdGUgY29yZVdvcmtpbmdTZWVrZXJDb21wb25lbnQ6IENvcmVXb3JraW5nU2Vla2VyQ29tcG9uZW50LFxyXG4gICAgcHJpdmF0ZSBjb3JlV2FnZVNlZWtlckNvbXBvbmVudDogQ29yZVdhZ2VTZWVrZXJDb21wb25lbnQsXHJcbiAgICBwcml2YXRlIGNvcmVQb3NpdGlvblNlZWtlckNvbXBvbmVudDogQ29yZVBvc2l0aW9uU2Vla2VyQ29tcG9uZW50LFxyXG4gICAgcHJpdmF0ZSBjb3JlUG9zaXRpb25Db25jdXJyZW50U2Vla2VyQ29tcG9uZW50OiBDb3JlUG9zaXRpb25Db25jdXJyZW50U2Vla2VyQ29tcG9uZW50LFxyXG4gICAgcHJpdmF0ZSByYXM6IFJhbmRvbUF2YXRhclNlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLmRlZmF1bHRBdmF0YXIgPSByYXMuZ2V0KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzaWduTXVsdGlNb2RlQ29sdW1ucygpOiB2b2lkIHtcclxuICAgIHN3aXRjaCAodGhpcy5zZWVrZXJTb3VyY2VUeXBlKSB7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVGb3JtQ29udHJvbFNlZWtlclNvdXJjZVR5cGUuSk9CX1NFRUs6XHJcbiAgICAgICAgY29uc3Qgam9iQ29sdW1ucyA9IHRoaXMuY29yZUpvYlNlZWtlckNvbXBvbmVudC5jb2x1bW5zLmZpbHRlcih4ID0+ICEheC5qb2JTZWVrZXJDb2x1bW5Db2RlID8gIXRoaXMuZXhjbHVkZWRDb2x1bW5zSm9iLmluY2x1ZGVzKHguam9iU2Vla2VyQ29sdW1uQ29kZSkgOiB0cnVlKVxyXG4gICAgICAgIGlmICghIXRoaXMubXVsdGlNb2RlRXh0ZW5kZWRDb2x1bW5zKSB7XHJcbiAgICAgICAgICB0aGlzLm11bHRpTW9kZUNvbHVtbnMgPSBbLi4uam9iQ29sdW1ucywgLi4udGhpcy5tdWx0aU1vZGVFeHRlbmRlZENvbHVtbnNdO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm11bHRpTW9kZUNvbHVtbnMgPSBqb2JDb2x1bW5zO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCEhIXRoaXMubXVsdGlNb2RlKSB7XHJcbiAgICAgICAgICB0aGlzLmhpZGVGb290ZXIgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUZvcm1Db250cm9sU2Vla2VyU291cmNlVHlwZS5FTVBMT1lFRV9TRUVLOlxyXG4gICAgICAgIGNvbnN0IGVtcGxveWVlQ29sdW1ucyA9IHRoaXMuY29yZUVtcGxveWVlU2Vla2VyQ29tcG9uZW50LmNvbHVtbnMuZmlsdGVyKHggPT4gISF4LmVtcGxveWVlU2Vla2VyQ29sdW1uQ29kZSA/ICF0aGlzLmV4Y2x1ZGVkQ29sdW1uc0VtcGxveWVlLmluY2x1ZGVzKHguZW1wbG95ZWVTZWVrZXJDb2x1bW5Db2RlKSA6IHRydWUpXHJcbiAgICAgICAgaWYgKCEhdGhpcy5tdWx0aU1vZGVFeHRlbmRlZENvbHVtbnMpIHtcclxuICAgICAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucyA9IFsuLi5lbXBsb3llZUNvbHVtbnMsIC4uLnRoaXMubXVsdGlNb2RlRXh0ZW5kZWRDb2x1bW5zXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5tdWx0aU1vZGVDb2x1bW5zID0gZW1wbG95ZWVDb2x1bW5zO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCEhIXRoaXMubXVsdGlNb2RlKSB7XHJcbiAgICAgICAgICB0aGlzLmhpZGVGb290ZXIgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUZvcm1Db250cm9sU2Vla2VyU291cmNlVHlwZS5DT05UUkFDVF9TRUVLOlxyXG4gICAgICAgIGNvbnN0IGNvbnRyYWN0Q29sdW1ucyA9IHRoaXMuY29yZUNvbnRyYWN0U2Vla2VyQ29tcG9uZW50LmNvbHVtbnMuZmlsdGVyKHggPT4gISF4LmNvbnRyYWN0U2Vla2VyQ29sdW1uQ29kZSA/ICF0aGlzLmV4Y2x1ZGVkQ29sdW1uc0NvbnRyYWN0LmluY2x1ZGVzKHguY29udHJhY3RTZWVrZXJDb2x1bW5Db2RlKSA6IHRydWUpXHJcbiAgICAgICAgdGhpcy5tdWx0aU1vZGVDb2x1bW5zID0gY29udHJhY3RDb2x1bW5zO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlRm9ybUNvbnRyb2xTZWVrZXJTb3VyY2VUeXBlLldPUktJTkdfU0VFSzpcclxuICAgICAgICBjb25zdCB3b3JraW5nQ29sdW1ucyA9IHRoaXMuY29yZVdvcmtpbmdTZWVrZXJDb21wb25lbnQuY29sdW1ucy5maWx0ZXIoeCA9PiAhIXgud29ya2luZ1NlZWtlckNvbHVtbkNvZGUgPyAhdGhpcy5leGNsdWRlZENvbHVtbnNXb3JraW5nLmluY2x1ZGVzKHgud29ya2luZ1NlZWtlckNvbHVtbkNvZGUpIDogdHJ1ZSlcclxuICAgICAgICB0aGlzLm11bHRpTW9kZUNvbHVtbnMgPSB3b3JraW5nQ29sdW1ucztcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUZvcm1Db250cm9sU2Vla2VyU291cmNlVHlwZS5XQUdFX1NFRUs6XHJcbiAgICAgICAgY29uc3Qgd2FnZUNvbHVtbnMgPSB0aGlzLmNvcmVXYWdlU2Vla2VyQ29tcG9uZW50LmNvbHVtbnMuZmlsdGVyKHggPT4gISF4LndhZ2VTZWVrZXJDb2x1bW5Db2RlID8gIXRoaXMuZXhjbHVkZWRDb2x1bW5zV2FnZS5pbmNsdWRlcyh4LndhZ2VTZWVrZXJDb2x1bW5Db2RlKSA6IHRydWUpXHJcbiAgICAgICAgdGhpcy5tdWx0aU1vZGVDb2x1bW5zID0gd2FnZUNvbHVtbnM7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVGb3JtQ29udHJvbFNlZWtlclNvdXJjZVR5cGUuUE9TSVRJT05fU0VFSzpcclxuICAgICAgICBjb25zdCBwb3NpdGlvbkNvbHVtbnMgPSB0aGlzLmNvcmVQb3NpdGlvblNlZWtlckNvbXBvbmVudC5jb2x1bW5zLmZpbHRlcih4ID0+ICEheC5wb3NpdGlvblNlZWtlckNvbHVtbkNvZGUgPyAhdGhpcy5leGNsdWRlZENvbHVtbnNQb3NpdGlvbi5pbmNsdWRlcyh4LnBvc2l0aW9uU2Vla2VyQ29sdW1uQ29kZSkgOiB0cnVlKVxyXG4gICAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucyA9IHBvc2l0aW9uQ29sdW1ucztcclxuICAgICAgICBpZiAoISEhdGhpcy5tdWx0aU1vZGUpIHtcclxuICAgICAgICAgIHRoaXMuaGlkZUZvb3RlciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlRm9ybUNvbnRyb2xTZWVrZXJTb3VyY2VUeXBlLlBPU0lUSU9OX0NPTkNVUlJFTlRfU0VFSzpcclxuICAgICAgICBjb25zdCBwb3NpdGlvbkNvbmN1cnJlbnRDb2x1bW5zID0gdGhpcy5jb3JlUG9zaXRpb25Db25jdXJyZW50U2Vla2VyQ29tcG9uZW50LmNvbHVtbnMuZmlsdGVyKHggPT4gISF4LnBvc2l0aW9uQ29uY3VycmVudFNlZWtlckNvbHVtbkNvZGUgPyAhdGhpcy5leGNsdWRlZENvbHVtbnNQb3NpdGlvbkNvbmN1cnJlbnQuaW5jbHVkZXMoeC5wb3NpdGlvbkNvbmN1cnJlbnRTZWVrZXJDb2x1bW5Db2RlKSA6IHRydWUpXHJcbiAgICAgICAgdGhpcy5tdWx0aU1vZGVDb2x1bW5zID0gcG9zaXRpb25Db25jdXJyZW50Q29sdW1ucztcclxuICAgICAgICBpZiAoISEhdGhpcy5tdWx0aU1vZGUpIHtcclxuICAgICAgICAgIHRoaXMuaGlkZUZvb3RlciA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlRm9ybUNvbnRyb2xTZWVrZXJTb3VyY2VUeXBlLk9SR0FOSVpBVElPTl9VTklUX1NFRUs6XHJcbiAgICAgICAgdGhpcy5tdWx0aU1vZGVDb2x1bW5zID0gW107XHJcbiAgICAgICAgaWYgKCEhIXRoaXMubXVsdGlNb2RlKSB7XHJcbiAgICAgICAgICB0aGlzLmhpZGVGb290ZXIgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICAvKlxyXG4gICAgSWYgd2UgdHJ5IHRvIGluamVjdCBOZ0NvbnRyb2wgZGlyZWN0bHkgd2l0aGluIHRoZSBjb25zdHJ1Y3Rvciwgd2Ugd2lsbCBnZXQgYW4gZXJyb3I6IOKAnEVycm9yOiBORzAyMDA6IENpcmN1bGFyIGRlcGVuZGVuY3kgaW4gREkgZGV0ZWN0ZWTigKbigJ0uXHJcbiAgICBUaHVzLCB3ZSBpbmplY3QgTmdDb250cm9sIGluIHRoZSBPbkluaXQgbGlmZWN5Y2xlIGhvb2sgdmlhIEluamVjdG9yIHdpdGhvdXQgYW55IGVycm9yLlxyXG4gICAgKi9cclxuICAgIHRoaXMubmdDb250cm9sID0gdGhpcy5pbmplY3Rvci5nZXQoTmdDb250cm9sKTtcclxuICAgIHRoaXMuYXNpZ25NdWx0aU1vZGVDb2x1bW5zKCk7XHJcblxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuICAgICAgdGhpcy5tdWx0aU1vZGVDb2x1bW5zPy5tYXAoYyA9PiB7XHJcbiAgICAgICAgaWYgKGMuZmllbGQgPT09ICdhdmF0YXInICYmICEhIWMudGVtcGxhdGVSZWYpIGMudGVtcGxhdGVSZWYgPSB0aGlzLmF2YXRhclxyXG4gICAgICAgIGlmIChjLmZpZWxkID09PSAnYWN0ZmxnJyAmJiAhISFjLnRlbXBsYXRlUmVmKSBjLnRlbXBsYXRlUmVmID0gdGhpcy5zdGlja2VyXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICBjb25zdCBlbCA9IHRoaXMuY29udGFpbmVyPy5uYXRpdmVFbGVtZW50O1xyXG4gICAgICBjb25zdCBoZWlnaHQgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XHJcbiAgICAgIGVsLnN0eWxlLnNldFByb3BlcnR5KCctLWhlaWdodCcsIChoZWlnaHQgfHwgNTApICsgJ3B4Jyk7XHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLm1scy5sYW5nJC5zdWJzY3JpYmUoeCA9PiB0aGlzLmxhbmcgPSB4KVxyXG4gICAgICApXHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLm5nQ29udHJvbC5jb250cm9sPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgaWYgKCEhIXgpIHRoaXMudmFsdWVUb1Nob3cgPSBcIlwiXHJcbiAgICAgICAgfSkhXHJcbiAgICAgIClcclxuXHJcblxyXG4gICAgICAvKiBTVEFSVDogQ0hFQ0sgSU5QVVRTICovXHJcblxyXG5cclxuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgaWYgKCEhIXRoaXMuc2Vla2VyU291cmNlVHlwZSkge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgIGBDb3JlRm9ybUNvbnRyb2xTZWVrZXJDb21wb25lbnQgRXJyb3I6IFJlcXVpcmVkIGlucHV0czpcclxuICAgICAgICAgICAgICAgIHNlZWtlclNvdXJjZVR5cGU6IEVudW1Db3JlRm9ybUNvbnRyb2xTZWVrZXJTb3VyY2VUeXBlIChmb3IgJyR7dGhpcy5uZ0NvbnRyb2wubmFtZX0nKWBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcblxyXG4gICAgICAgICAgaWYgKCEhIXRoaXMucGFyYW1Nb2RlKSB7XHJcblxyXG4gICAgICAgICAgICAvL2dldEJ5SWRPYmplY3QkXHJcbiAgICAgICAgICAgIGlmICghISF0aGlzLmdldEJ5SWRPYmplY3QkKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgICAgICBgQ29yZUZvcm1Db250cm9sU2Vla2VyQ29tcG9uZW50IEVycm9yOiBSZXF1aXJlZCBpbnB1dHM6XHJcbiAgICAgICAgICAgICAgICAgIGdldEJ5SWRPYmplY3QkOiBCZWhhdmlvclN1YmplY3QmbHQ7YW55Jmd0OyAoZm9yICcke3RoaXMubmdDb250cm9sLm5hbWV9JylgXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICghdGhpcy5ib3VuZEZyb20gJiYgIXRoaXMubXVsdGlNb2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICAgIGBBbGwgX1NFRUtFUiBjb250cm9scyByZXF1aXJlIGlucHV0OlxyXG4gICAgICAgICAgICAgICAgICAgIGJvdW5kRnJvbTogc3RyaW5nOyAoZm9yICcke3RoaXMubmdDb250cm9sLm5hbWV9JylgLFxyXG4gICAgICAgICAgICAgIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoISEhdGhpcy5zaG93bkZyb20gJiYgIXRoaXMubXVsdGlNb2RlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICAgIGBBbGwgX1NFRUtFUiBjb250cm9scyByZXF1aXJlIGlucHV0OlxyXG4gICAgICAgICAgICAgICAgICAgIHNob3duRnJvbTogc3RyaW5nOyAoZm9yICcke3RoaXMubmdDb250cm9sLm5hbWV9JylgLFxyXG4gICAgICAgICAgICAgIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKCEhdGhpcy5pbmRpcmVjdEJpbmRpbmcpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmJpbmRHcmlkSWRUbykge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICAgICAgYENvcmVGb3JtQ29udHJvbFNlZWtlckNvbXBvbmVudCBFcnJvcjogTuG6v3UgaW5kaXJlY3RCaW5kaW5nID0gdHJ1ZSwgYuG6r3QgYnXhu5ljIHBo4bqjaSBjw7MgdGjDqm0gdGh14buZYyB0w61uaCBiaW5kR3JpZElkVG8gKHRyxrDhu51uZyAnJHt0aGlzLm5nQ29udHJvbC5uYW1lfScpYFxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG5cclxuICAgICAgLyogRU5EOiBDSEVDSyBJTlBVVFMgKi9cclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMuZ2V0QnlJZE9iamVjdCQ/LnN1YnNjcmliZSh4ID0+IHtcclxuXHJcbiAgICAgICAgICBpZiAoISF4KSB7XHJcbiAgICAgICAgICAgIGlmICghISF0aGlzLm11bHRpTW9kZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMudmFsdWVUb1Nob3cgPSB4W3RoaXMuc2hvd25Gcm9tXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCEhIXRoaXMubXVsdGlNb2RlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy52YWx1ZVRvU2hvdyA9IFwiXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApXHJcblxyXG4gICAgICBpZiAoISF0aGlzLm9iamVjdExpc3QkKSB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICB0aGlzLm9iamVjdExpc3QkLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEgPSB4O1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZXhjbHVkZUV4aXN0aW5nTGlzdCkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IG5ld0V4Y2x1ZGVkSWRzOiBudW1iZXJbXSA9IFtdO1xyXG4gICAgICAgICAgICAgIHgubWFwKGkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmluZGlyZWN0QmluZGluZykge1xyXG4gICAgICAgICAgICAgICAgICBuZXdFeGNsdWRlZElkcy5wdXNoKGkuaWQpXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBuZXdFeGNsdWRlZElkcy5wdXNoKGlbdGhpcy5iaW5kR3JpZElkVG9dKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgdGhpcy5leGNsdWRlZElkcyQubmV4dChuZXdFeGNsdWRlZElkcyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuICAgICAgfVxyXG5cclxuICAgIH0pXHJcblxyXG5cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLm1hcCh4ID0+IHg/LnVuc3Vic2NyaWJlKCkpXHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudmFsdWUgPSBvYmopO1xyXG4gICAgaWYgKCEhdGhpcy5tdWx0aU1vZGUpIHtcclxuICAgICAgY29uc29sZS5ncm91cCgnV3JpdGUgdmFsdWUgZm9yICcgKyB0aGlzLm5nQ29udHJvbC5uYW1lKTtcclxuICAgICAgY29uc29sZS5sb2coXCJ0aGlzLm11bHRpTW9kZUNvbHVtbnNcIiwgdGhpcy5tdWx0aU1vZGVDb2x1bW5zKVxyXG4gICAgICBjb25zb2xlLmxvZygnVG8gZG86IEFzc2lnbiBhcGkgcmVzIHRvIHRoZSBzZWxlY3RlZERhdGEnKVxyXG4gICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrU2VlaygpOiB2b2lkIHtcclxuICAgIHRoaXMuY2xpY2skPy5uZXh0KHRydWUpO1xyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgdGhpcy5yZWFkb25seSkgcmV0dXJuO1xyXG4gICAgdGhpcy5zb3VyY2VPcGVuID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0KCk6IHZvaWQge1xyXG4gICAgaWYgKCEhdGhpcy5tdWx0aU1vZGUpIHtcclxuXHJcbiAgICAgIGlmICghdGhpcy5pbmRpcmVjdEJpbmRpbmcpIHtcclxuICAgICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLnBlbmRpbmdTZWxlY3RlZERhdGEuZmlsdGVyKHggPT4gdGhpcy5zZWxlY3RlZERhdGEuZmlsdGVyKHkgPT4geS5pZCA9PT0geC5pZCkubGVuZ3RoID09PSAwKVxyXG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGVkRGF0YSA9IFsuLi50aGlzLnNlbGVjdGVkRGF0YSwgLi4uZmlsdGVyXTtcclxuICAgICAgICBjb25zdCBuZXdTZWxlY3RlZElkczogYW55W10gPSBbXTtcclxuICAgICAgICBuZXdTZWxlY3RlZERhdGEubWFwKHggPT4gbmV3U2VsZWN0ZWRJZHMucHVzaCh4LmlkKSlcclxuICAgICAgICB0aGlzLm9iamVjdExpc3QkLm5leHQobmV3U2VsZWN0ZWREYXRhKTtcclxuICAgICAgICB0aGlzLnZhbHVlID0gbmV3U2VsZWN0ZWRJZHM7XHJcbiAgICAgICAgdGhpcy5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZShuZXdTZWxlY3RlZElkcylcclxuICAgICAgICB0aGlzLnBlbmRpbmdTZWxlY3RlZERhdGEgPSBbXTtcclxuICAgICAgICB0aGlzLnNvdXJjZU9wZW4gPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnBlbmRpbmdTZWxlY3RlZERhdGEubWFwKHggPT4ge1xyXG4gICAgICAgICAgLy8gZ8OhbiBpZCBj4bunYSBsxrDhu5tpIG5ndeG7k24gdsOgbyBj4buZdCBj4bqnbiB0aGnhur90XHJcbiAgICAgICAgICB4W3RoaXMuYmluZEdyaWRJZFRvXSA9IHguaWRcclxuICAgICAgICAgIC8vIHNhdSDEkcOzIGhvw6FuIGlkIG7DoHkgc2FuZyBnacOhIHRy4buLIOG6o28sIGVhY2ggXCJ4XCIgaXRlbSBtdXN0IGhhdmUgYW4gdW5pcXVlIGlkXHJcbiAgICAgICAgICB0aGlzLmluZGlyZWN0QmluZGluZ0xhc3RWaXJ0dWFsSWQgLT0gMTtcclxuICAgICAgICAgIHguaWQgPSB0aGlzLmluZGlyZWN0QmluZGluZ0xhc3RWaXJ0dWFsSWQ7IC8vIHVzaW5nIG5hZ2F0aXZlIHZhbHVlIHRvIGJ5cGFzcyAobG9vc2luZyBvZi9jb25mdXNpbmcgd2l0aCkgZXhpc3RpbmcgaWRzXHJcbiAgICAgICAgfSlcclxuICAgICAgICBjb25zdCBuZXdTZWxlY3RlZERhdGEgPSBbLi4udGhpcy5zZWxlY3RlZERhdGEsIC4uLnRoaXMucGVuZGluZ1NlbGVjdGVkRGF0YV07XHJcbiAgICAgICAgLy8gY29uc3QgbmV3U2VsZWN0ZWRJZHM6IGFueVtdID0gW107XHJcbiAgICAgICAgLy8gbmV3U2VsZWN0ZWREYXRhLm1hcCh4ID0+IG5ld1NlbGVjdGVkSWRzLnB1c2goeC5pZCkpXHJcbiAgICAgICAgdGhpcy5vYmplY3RMaXN0JC5uZXh0KG5ld1NlbGVjdGVkRGF0YSk7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ld1NlbGVjdGVkRGF0YTtcclxuICAgICAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlKG5ld1NlbGVjdGVkRGF0YSlcclxuICAgICAgICB0aGlzLnBlbmRpbmdTZWxlY3RlZERhdGEgPSBbXTtcclxuICAgICAgICB0aGlzLnNvdXJjZU9wZW4gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DYW5jZWwoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNvdXJjZU9wZW4gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG9uUm93RG91YmxlQ2xpY2soZTogYW55KSB7XHJcbiAgICB0aGlzLndyaXRlVmFsdWUoZVt0aGlzLmJvdW5kRnJvbV0pO1xyXG4gICAgdGhpcy5vbkNoYW5nZShlW3RoaXMuYm91bmRGcm9tXSk7XHJcbiAgICB0aGlzLnZhbHVlVG9TaG93ID0gZVt0aGlzLnNob3duRnJvbV07XHJcbiAgICB0aGlzLnNvdXJjZU9wZW4gPSBmYWxzZTtcclxuXHJcbiAgICBpZiAoISF0aGlzLmFsc29CaW5kVG8pIHtcclxuICAgICAgY29uc3QgZm9ybSA9IHRoaXMubmdDb250cm9sLmNvbnRyb2w/LnBhcmVudDtcclxuICAgICAgaWYgKGZvcm0pIHtcclxuICAgICAgICB0aGlzLmFsc29CaW5kVG8ubWFwKCh4LCBpbmRleCkgPT4ge1xyXG5cclxuICAgICAgICAgIC8qXHJcbiAgICAgICAgICBzdGFydDogVmFsaWRhdGUgRGV2ZWxvcGVyIGlucHV0XHJcbiAgICAgICAgICAqL1xyXG4gICAgICAgICAgaWYgKGlzRGV2TW9kZSgpICYmIGluZGV4ID09PSAwKSB7XHJcbiAgICAgICAgICAgIGlmICghISF4LnRha2VGcm9tKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXCJ0YWtlRnJvbSB3YXMgdW5kZWZpbmVkXCIsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmICghISFlW3gudGFrZUZyb21dKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihgWW91IGV4cGVjdCBhIHZhbHVlIGZyb20gJyR7eC50YWtlRnJvbX0nLCBidXQgdGhlIHNlZWtlciBncmlkIGRvZXMgbm90IGhhdmUgdGhpcyBjb2x1bW5gLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCEhIXguYmluZFRvKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXCJiaW5kVG8gd2FzIHVuZGVmaW5lZFwiLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAoISEhZm9ybS5nZXQoeC5iaW5kVG8pKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihgWW91IGV4cGVjdCB0byBiaW5kIHZhbHVlIHRvICcke3guYmluZFRvfScsIGJ1dCB0aGUgZm9ybSBncm91cCBkb2VzIG5vdCBoYXZlIHRoaXMgY29udHJvbGAsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8qXHJcbiAgICAgICAgICBlbmQ6IFZhbGlkYXRlIERldmVsb3BlciBpbnB1dFxyXG4gICAgICAgICAgKi9cclxuXHJcbiAgICAgICAgICBmb3JtLmdldCh4LmJpbmRUbyk/LnNldFZhbHVlKGVbeC50YWtlRnJvbV0pO1xyXG4gICAgICAgICAgZm9ybS5nZXQoeC5iaW5kVG8pPy5tYXJrQXNUb3VjaGVkO1xyXG4gICAgICAgICAgZm9ybS5nZXQoeC5iaW5kVG8pPy5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uSXRlbURvdWJsZUNsaWNrKGU6IElPcmdUcmVlSXRlbSkge1xyXG4gICAgdGhpcy53cml0ZVZhbHVlKGUuaWQpO1xyXG4gICAgdGhpcy52YWx1ZVRvU2hvdyA9IGUudHJlZSRUaXRsZTtcclxuICAgIHRoaXMub25DaGFuZ2UoZS5pZCk7XHJcbiAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgIHRoaXMuc291cmNlT3BlbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5vbkRvdWJsZUNsaWNrLmVtaXQoZSk7XHJcbiAgfVxyXG5cclxuICBvbkNvbHVtbnNJbml0KGU6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKCEhdGhpcy5tdWx0aU1vZGVFeHRlbmRlZENvbHVtbnMpIHtcclxuICAgICAgdGhpcy5tdWx0aU1vZGVDb2x1bW5zID0gWy4uLmUsIC4uLnRoaXMubXVsdGlNb2RlRXh0ZW5kZWRDb2x1bW5zXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucyA9IGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdGVkRGF0YUNoYW5nZShlOiBhbnkpIHtcclxuICAgIGlmICghIXRoaXMubXVsdGlNb2RlRXh0ZW5kZWRDb2x1bW5zKSB7XHJcbiAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucyA9IFsuLi5lLmNvbHVtbnMsIC4uLnRoaXMubXVsdGlNb2RlRXh0ZW5kZWRDb2x1bW5zXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubXVsdGlNb2RlQ29sdW1ucyA9IGUuY29sdW1ucztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnBlbmRpbmdTZWxlY3RlZERhdGEgPSBlLmRhdGE7XHJcbiAgfVxyXG5cclxuICBvblRvb2xDbGljayhlOiBJQ29yZVRhYmxlVG9vbENsaWNrRXZlbnRFbWl0dGVyRGF0YSkge1xyXG4gICAgaWYgKGUuY29kZSA9PT0gRUNvcmVUYWJsZVRvb2xDb2RlLmRlbGV0ZSkge1xyXG4gICAgICBjb25zdCBuZXdPYmplY3RMaXN0ID0gdGhpcy5vYmplY3RMaXN0JC52YWx1ZS5maWx0ZXIoeCA9PiB4LmlkICE9PSBlLmlkKVxyXG5cclxuICAgICAgdGhpcy5vYmplY3RMaXN0JC5uZXh0KG5ld09iamVjdExpc3QpO1xyXG5cclxuICAgICAgaWYgKCF0aGlzLmluZGlyZWN0QmluZGluZykge1xyXG4gICAgICAgIGNvbnN0IG5ld0lkcyA9IHRoaXMudmFsdWUuZmlsdGVyKCh4OiBhbnkpID0+IHggIT09IGUuaWQpXHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ld0lkcztcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlKG5ld0lkcyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ld09iamVjdExpc3Q7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZShuZXdPYmplY3RMaXN0KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2xpY2tDbGVhcigpIHtcclxuXHJcbiAgICB0aGlzLndyaXRlVmFsdWUobnVsbCk7XHJcbiAgICB0aGlzLm9uQ2hhbmdlKG51bGwpO1xyXG4gICAgdGhpcy52YWx1ZVRvU2hvdyA9IFwiXCI7XHJcblxyXG4gIH1cclxuXHJcbiAgb25TZWxlY3RlZERhdGFSb3dEb3VibGVDbGljayhlOiBhbnkpIHtcclxuXHJcbiAgICBpZiAoIXRoaXMuZWRpdEJ1ZmZlckRhdGEkKSByZXR1cm47XHJcblxyXG4gICAgY29uc29sZS5sb2coXCJHaXZlbiByb3cgZGF0YTogXCIsIGUpXHJcbiAgICBpZiAoIWUuaWQpIHtcclxuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXCJObyAnaWQnIGNvbHVtbnMgZm91bmQgb3IgY3VycmVudCBpZCB3YXMgbnVsbFwiLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLmVkaXRCdWZmZXJGb3JtPy5nZXQoJ2lkJyk/LnBhdGNoVmFsdWUoZS5pZClcclxuICAgIH0gY2F0Y2ggKGV4OiBhbnkpIHtcclxuICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoZXgubWVzc2FnZSwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoISF0aGlzLm11bHRpTW9kZUV4dGVuZGVkQ29sdW1ucy5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5tdWx0aU1vZGVFeHRlbmRlZENvbHVtbnMubWFwKHggPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICB0aGlzLmVkaXRCdWZmZXJGb3JtPy5nZXQoeC5maWVsZCk/LnBhdGNoVmFsdWUoZVt4LmZpZWxkXSlcclxuICAgICAgICB9IGNhdGNoIChleGNlcHRpb246IGFueSkge1xyXG4gICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKGV4Y2VwdGlvbi5tZXNzYWdlLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuZWRpdGluZ0lkID0gZS5pZDtcclxuICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uOiBhbnkpIHtcclxuICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKGV4Y2VwdGlvbi5tZXNzYWdlLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnNob3dFZGl0QnVmZmVyID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRWRpdEJ1ZmZlclN1Ym1pdChlOiBhbnkpIHtcclxuICAgIHZhciBmb3JtRGF0YSA9IHRoaXMuZWRpdEJ1ZmZlckZvcm0uZ2V0UmF3VmFsdWUoKTtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuc2VsZWN0ZWREYXRhPy5maWx0ZXIoeCA9PiB4LmlkID09PSB0aGlzLmVkaXRpbmdJZCk7XHJcbiAgICAgIGlmIChmaWx0ZXI/Lmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgIHRoaXMubXVsdGlNb2RlRXh0ZW5kZWRDb2x1bW5zPy5tYXAoYyA9PiB7XHJcbiAgICAgICAgICBmaWx0ZXJbMF1bYy5maWVsZF0gPSBmb3JtRGF0YVtjLmZpZWxkXTtcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZWRpdEJ1ZmZlckRhdGEkLm5leHQoZm9ybURhdGEpO1xyXG4gICAgICB0aGlzLnNob3dFZGl0QnVmZmVyID0gZmFsc2U7XHJcbiAgICB9IGNhdGNoIChleDogYW55KSB7XHJcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGV4KTtcclxuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihleC5tZXNzYWdlIHx8ICdBbiBlcnJvciBvY2N1cmVkIHdoaWxlIHRyeWluZyB0byB1cGRhdGUgc2VsZWN0ZWREYXRhJywgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRWRpdEJ1ZmZlckNhbmNlbChlOiBhbnkpIHtcclxuICAgIHRoaXMuc2hvd0VkaXRCdWZmZXIgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG9uRWRpdEJ1ZmZlckZvcm1DcmVhdGVkKGU6IEZvcm1Hcm91cCkge1xyXG4gICAgdGhpcy5lZGl0QnVmZmVyRm9ybSA9IGU7XHJcbiAgfVxyXG5cclxuICBpc1NvdXJjZU9wZW4oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zb3VyY2VPcGVuO1xyXG4gIH1cclxuXHJcbn0iLCI8ZGl2ICNjb250YWluZXIgY2xhc3M9XCJjb3JlLWZvcm0tY29udHJvbC1zZWVrZXItY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtd3JhcHBlclwiIFtjbGFzcy5kLW5vbmVdPVwiISFtdWx0aU1vZGVcIj5cclxuICAgICAgICA8bGFiZWwgI3Nob3duVGV4dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwidGV4dCBmb3JtLWNvbnRyb2xcIiBbY2xhc3MuZm9ybS1jb250cm9sLWRpc2FibGVkXT1cImRpc2FibGVkXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIFthcHBUb29sdGlwXT1cInZhbHVlVG9TaG93XCI+e3sgdmFsdWVUb1Nob3cgfX08L3NwYW4+XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICBAaWYgKCFtdWx0aU1vZGUpIHtcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2xlYXItaWNvbi13cmFwcGVyXCIgW2NsYXNzLmQtbm9uZV09XCIhIWRpc2FibGVkIHx8ICEhIXZhbHVlXCIgKGNsaWNrKT1cIm9uQ2xpY2tDbGVhcigpXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LXdyYXBwZXJcIiBbYXBwVG9vbHRpcF09XCInVUkuQ09SRV9DT05UT0xfQ09NTU9OX0NMRUFSJyB8IHRyYW5zbGF0ZTogbGFuZ1wiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmZWF0aGVyLXhcIj48L2k+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cInNlZWtlci1pY29uLXdyYXBwZXJcIiBbY2xhc3MuZm9ybS1jb250cm9sLWRpc2FibGVkXT1cImRpc2FibGVkXCIgW2NsYXNzLm11bHRpLW1vZGVdPVwiISFtdWx0aU1vZGVcIlxyXG4gICAgICAgIChjbGljayk9XCJvbkNsaWNrU2VlaygpXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtd3JhcHBlclwiIFtjbGFzcy5mb3JtLWNvbnRyb2wtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmZWF0aGVyLXNlYXJjaFwiPjwvaT5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgQGlmICghIW11bHRpTW9kZSkge1xyXG4gICAgPGRpdiBjbGFzcz1cImNvcmUtdGFiYmUtd3JhcHBlclwiPlxyXG4gICAgICAgIDxjb3JlLXRhYmxlIFtoZWlnaHRdPVwibXVsdGlNb2RlVGFibGVIZWlnaHRcIiBbY29sdW1uc109XCJtdWx0aU1vZGVDb2x1bW5zXCIgW2RhdGFdPVwic2VsZWN0ZWREYXRhXCIgW3Nob3dUb29sc109XCIhISFkaXNhYmxlZFwiIFt0b29sc109XCJ0b29sc1wiXHJcbiAgICAgICAgICAgIFtsYXp5TG9hZGluZ109XCJ0cnVlXCIgW3Jvd0hlaWdodF09XCIobXVsdGlNb2RlUm93SGVpZ2h0IHx8IDQ2KSArICdweCdcIiBbc2VhcmNoU3dpdGNoRGlzYWJsZWRdPVwidHJ1ZVwiIFtkaXNhYmxlU29ydGluZ109XCJ0cnVlXCJcclxuICAgICAgICAgICAgKG9uVG9vbENsaWNrKT1cIm9uVG9vbENsaWNrKCRldmVudClcIiAob25Sb3dEb3VibGVDbGljayk9XCJvblNlbGVjdGVkRGF0YVJvd0RvdWJsZUNsaWNrKCRldmVudClcIj48L2NvcmUtdGFibGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIH1cclxuXHJcbiAgICBAaWYgKCEhc291cmNlT3Blbikge1xyXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1jb250ZW50XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXItcGFuZWxcIj5cclxuICAgICAgICAgICAgICAgIDxjb3JlLXBhZ2UtaGVhZGVyIFt0aXRsZV09XCJ0aXRsZVwiIFtoaWRlQnV0dG9uR3JvdXBdPVwidHJ1ZVwiICpuZ0lmPVwic2hvd1BhZ2VIZWFkZXJcIj48L2NvcmUtcGFnZS1oZWFkZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic291cmNlLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmZWF0aGVyLXhcIiAoY2xpY2spPVwib25DYW5jZWwoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmQtYmxvY2tdPVwic2Vla2VyU291cmNlVHlwZT09PSdPUkdBTklaQVRJT05fVU5JVF9TRUVLJ1wiPjwvaT5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgQHN3aXRjaCAoc2Vla2VyU291cmNlVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgQGNhc2UgKCdKT0JfU0VFSycpIHtcclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJqb2JTZWVrXCI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIEBjYXNlICgnRU1QTE9ZRUVfU0VFSycpIHtcclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJlbXBsb3llZVNlZWtcIj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgQGNhc2UgKCdDT05UUkFDVF9TRUVLJykge1xyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRyYWN0U2Vla1wiPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBAY2FzZSAoJ1dPUktJTkdfU0VFSycpIHtcclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ3b3JraW5nU2Vla1wiPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBAY2FzZSAoJ1dBR0VfU0VFSycpIHtcclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ3YWdlU2Vla1wiPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBAY2FzZSAoJ09SR0FOSVpBVElPTl9VTklUX1NFRUsnKSB7XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwib3JnYW5pemF0aW9uVW5pdFNlZWtcIj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgQGNhc2UgKCdQT1NJVElPTl9TRUVLJykge1xyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBvc2l0aW9uU2Vla1wiPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBAY2FzZSAoJ1BPU0lUSU9OX0NPTkNVUlJFTlRfU0VFSycpIHtcclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwb3NpdGlvbkNvbmN1cnJlbnRTZWVrXCI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgQGlmICghaGlkZUZvb3Rlcikge1xyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIEBpZiAoISFwZW5kaW5nU2VsZWN0ZWREYXRhPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvblNlbGVjdCgpXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ1VJX0NPUkVfQ09ORklSTV9ESUFMT0dfQlVUVE9OX1NFTEVDVCcgfCB0cmFuc2xhdGU6IGxhbmcgfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tc2Vjb25kYXJ5XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkNhbmNlbCgpXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ1VJX0NPUkVfQ09ORklSTV9ESUFMT0dfQlVUVE9OX0NBTkNFTCcgfCB0cmFuc2xhdGU6IGxhbmcgfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgfVxyXG5cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI2pvYlNlZWs+XHJcbiAgICA8Y29yZS1qb2Itc2Vla2VyIFtleGNsdWRlZENvbHVtbnNdPVwiZXhjbHVkZWRDb2x1bW5zSm9iXCIgW3ByZURlZmluZWRPdXRlclBhcmFtJF09XCJwcmVEZWZpbmVkT3V0ZXJQYXJhbSRcIlxyXG4gICAgICAgIFttdWx0aU1vZGVdPVwibXVsdGlNb2RlXCIgW2V4Y2x1ZGVkSWRzJF09XCJleGNsdWRlZElkcyRcIiAocm93RG91YmxlQ2xpY2spPVwib25Sb3dEb3VibGVDbGljaygkZXZlbnQpXCJcclxuICAgICAgICAoY29sdW1uc0luaXQpPVwib25Db2x1bW5zSW5pdCgkZXZlbnQpXCIgKHNlbGVjdGVkRGF0YUNoYW5nZSk9XCJvblNlbGVjdGVkRGF0YUNoYW5nZSgkZXZlbnQpXCI+PC9jb3JlLWpvYi1zZWVrZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2VtcGxveWVlU2Vlaz5cclxuICAgIDxjb3JlLWVtcGxveWVlLXNlZWtlciBbZXhjbHVkZWRDb2x1bW5zXT1cImV4Y2x1ZGVkQ29sdW1uc0VtcGxveWVlXCIgW3ByZURlZmluZWRPdXRlclBhcmFtJF09XCJwcmVEZWZpbmVkT3V0ZXJQYXJhbSRcIlxyXG4gICAgICAgIFttdWx0aU1vZGVdPVwibXVsdGlNb2RlXCIgW2V4Y2x1ZGVkSWRzJF09XCJleGNsdWRlZElkcyRcIiAocm93RG91YmxlQ2xpY2spPVwib25Sb3dEb3VibGVDbGljaygkZXZlbnQpXCJcclxuICAgICAgICAoY29sdW1uc0luaXQpPVwib25Db2x1bW5zSW5pdCgkZXZlbnQpXCJcclxuICAgICAgICAoc2VsZWN0ZWREYXRhQ2hhbmdlKT1cIm9uU2VsZWN0ZWREYXRhQ2hhbmdlKCRldmVudClcIj48L2NvcmUtZW1wbG95ZWUtc2Vla2VyPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNjb250cmFjdFNlZWs+XHJcbiAgICA8Y29yZS1jb250cmFjdC1zZWVrZXIgW2V4Y2x1ZGVkQ29sdW1uc109XCJleGNsdWRlZENvbHVtbnNDb250cmFjdFwiIFtwcmVEZWZpbmVkT3V0ZXJQYXJhbSRdPVwicHJlRGVmaW5lZE91dGVyUGFyYW0kXCJcclxuICAgICAgICBbbXVsdGlNb2RlXT1cIm11bHRpTW9kZVwiIFtleGNsdWRlZElkcyRdPVwiZXhjbHVkZWRJZHMkXCIgKHJvd0RvdWJsZUNsaWNrKT1cIm9uUm93RG91YmxlQ2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgKGNvbHVtbnNJbml0KT1cIm9uQ29sdW1uc0luaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgKHNlbGVjdGVkRGF0YUNoYW5nZSk9XCJvblNlbGVjdGVkRGF0YUNoYW5nZSgkZXZlbnQpXCI+PC9jb3JlLWNvbnRyYWN0LXNlZWtlcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjd29ya2luZ1NlZWs+XHJcbiAgICA8Y29yZS13b3JraW5nLXNlZWtlciBbZXhjbHVkZWRDb2x1bW5zXT1cImV4Y2x1ZGVkQ29sdW1uc1dvcmtpbmdcIiBbcHJlRGVmaW5lZE91dGVyUGFyYW0kXT1cInByZURlZmluZWRPdXRlclBhcmFtJFwiXHJcbiAgICAgICAgW211bHRpTW9kZV09XCJtdWx0aU1vZGVcIiBbZXhjbHVkZWRJZHMkXT1cImV4Y2x1ZGVkSWRzJFwiIChyb3dEb3VibGVDbGljayk9XCJvblJvd0RvdWJsZUNsaWNrKCRldmVudClcIlxyXG4gICAgICAgIChjb2x1bW5zSW5pdCk9XCJvbkNvbHVtbnNJbml0KCRldmVudClcIiAoc2VsZWN0ZWREYXRhQ2hhbmdlKT1cIm9uU2VsZWN0ZWREYXRhQ2hhbmdlKCRldmVudClcIj48L2NvcmUtd29ya2luZy1zZWVrZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3dhZ2VTZWVrPlxyXG4gICAgPGNvcmUtd2FnZS1zZWVrZXIgW2V4Y2x1ZGVkQ29sdW1uc109XCJleGNsdWRlZENvbHVtbnNXYWdlXCIgW3ByZURlZmluZWRPdXRlclBhcmFtJF09XCJwcmVEZWZpbmVkT3V0ZXJQYXJhbSRcIlxyXG4gICAgICAgIFttdWx0aU1vZGVdPVwibXVsdGlNb2RlXCIgW2V4Y2x1ZGVkSWRzJF09XCJleGNsdWRlZElkcyRcIiAocm93RG91YmxlQ2xpY2spPVwib25Sb3dEb3VibGVDbGljaygkZXZlbnQpXCJcclxuICAgICAgICAoY29sdW1uc0luaXQpPVwib25Db2x1bW5zSW5pdCgkZXZlbnQpXCIgKHNlbGVjdGVkRGF0YUNoYW5nZSk9XCJvblNlbGVjdGVkRGF0YUNoYW5nZSgkZXZlbnQpXCI+PC9jb3JlLXdhZ2Utc2Vla2VyPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNwb3NpdGlvblNlZWs+XHJcbiAgICA8Y29yZS1wb3NpdGlvbi1zZWVrZXIgW2V4Y2x1ZGVkQ29sdW1uc109XCJleGNsdWRlZENvbHVtbnNQb3NpdGlvblwiIFtwcmVEZWZpbmVkT3V0ZXJQYXJhbSRdPVwicHJlRGVmaW5lZE91dGVyUGFyYW0kXCJcclxuICAgICAgICBbbXVsdGlNb2RlXT1cIm11bHRpTW9kZVwiIFtleGNsdWRlZElkcyRdPVwiZXhjbHVkZWRJZHMkXCIgW3NlZWtlclZlcmlmeUlnbm9yZV09XCJzZWVrZXJWZXJpZnlJZ25vcmVcIlxyXG4gICAgICAgIChyb3dEb3VibGVDbGljayk9XCJvblJvd0RvdWJsZUNsaWNrKCRldmVudClcIiAoY29sdW1uc0luaXQpPVwib25Db2x1bW5zSW5pdCgkZXZlbnQpXCJcclxuICAgICAgICAoc2VsZWN0ZWREYXRhQ2hhbmdlKT1cIm9uU2VsZWN0ZWREYXRhQ2hhbmdlKCRldmVudClcIj48L2NvcmUtcG9zaXRpb24tc2Vla2VyPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNwb3NpdGlvbkNvbmN1cnJlbnRTZWVrPlxyXG4gICAgPGNvcmUtcG9zaXRpb24tY29uY3VycmVudC1zZWVrZXIgW2V4Y2x1ZGVkQ29sdW1uc109XCJleGNsdWRlZENvbHVtbnNQb3NpdGlvbkNvbmN1cnJlbnRcIlxyXG4gICAgICAgIFtwcmVEZWZpbmVkT3V0ZXJQYXJhbSRdPVwicHJlRGVmaW5lZE91dGVyUGFyYW0kXCIgW211bHRpTW9kZV09XCJtdWx0aU1vZGVcIiBbZXhjbHVkZWRJZHMkXT1cImV4Y2x1ZGVkSWRzJFwiXHJcbiAgICAgICAgKHJvd0RvdWJsZUNsaWNrKT1cIm9uUm93RG91YmxlQ2xpY2soJGV2ZW50KVwiIChjb2x1bW5zSW5pdCk9XCJvbkNvbHVtbnNJbml0KCRldmVudClcIlxyXG4gICAgICAgIChzZWxlY3RlZERhdGFDaGFuZ2UpPVwib25TZWxlY3RlZERhdGFDaGFuZ2UoJGV2ZW50KVwiPjwvY29yZS1wb3NpdGlvbi1jb25jdXJyZW50LXNlZWtlcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjb3JnYW5pemF0aW9uVW5pdFNlZWs+XHJcbiAgICA8Y29yZS1vcmctdW5pdC1zZWVrZXIgW2V4Y2x1ZGVkSWRzJF09XCJleGNsdWRlZElkcyRcIlxyXG4gICAgICAgIChpdGVtRG91YmxlQ2xpY2spPVwib25JdGVtRG91YmxlQ2xpY2soJGV2ZW50KVwiPjwvY29yZS1vcmctdW5pdC1zZWVrZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2F2YXRhciBsZXQtYXZhdGFyPVwiY29udGV4dC5hdmF0YXJcIj5cclxuICAgIDxpbWcgKm5nSWY9XCJhdmF0YXIgIT0gbnVsbFwiIFtzcmNdPVwiYXZhdGFyIHwgbWFwQXZhdGFyVG9TZXJ2ZXJcIiBjbGFzcz1cImluLXRhYmxlLWF2YXRhclwiIGFwcEltYWdlRXJyb3JSZXNvbHZlcj5cclxuICAgIDxpbWcgKm5nSWY9XCJhdmF0YXIgPT0gbnVsbFwiIFtzcmNdPVwiZGVmYXVsdEF2YXRhclwiIGNsYXNzPVwiaW4tdGFibGUtYXZhdGFyXCIgYXBwSW1hZ2VFcnJvclJlc29sdmVyPlxyXG48L25nLXRlbXBsYXRlPlxyXG48bmctdGVtcGxhdGUgI3N0aWNrZXIgbGV0LWNvZGU9XCJjb250ZXh0LmFjdGZsZ1wiPlxyXG4gICAgPGNvcmUtc3RhdHVzLXN0aWNrZXIgW2NvZGVdPVwiY29kZVwiIFtpc1RydWVDb2RlXT1cInRydWVcIj48L2NvcmUtc3RhdHVzLXN0aWNrZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48ZGl2IFtjbGFzcy5kLW5vbmVdPVwiIXNob3dFZGl0QnVmZmVyXCI+XHJcbiAgICA8Y29yZS1wYWdlLWVkaXQtbGl0ZSBbc2VjdGlvbnNdPVwibXVsdGlNb2RlRXh0ZW5kZWRTZWN0aW9uc1wiIChvbkZvcm1DcmVhdGVkKT1cIm9uRWRpdEJ1ZmZlckZvcm1DcmVhdGVkKCRldmVudClcIlxyXG4gICAgICAgIChzdWJtaXRMb2dpYyk9XCJvbkVkaXRCdWZmZXJTdWJtaXQoJGV2ZW50KVwiIChjYW5jZWxMb2dpYyk9XCJvbkVkaXRCdWZmZXJDYW5jZWwoJGV2ZW50KVwiPjwvY29yZS1wYWdlLWVkaXQtbGl0ZT5cclxuPC9kaXY+Il19
|