@algoux/standard-ranklist-renderer-component-angular 0.6.3 → 0.6.5
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/README.md +11 -0
- package/dist/README.md +11 -0
- package/dist/esm2022/lib/index.mjs +2 -1
- package/dist/esm2022/lib/ranklist/problem-header-cell-template.directive.mjs +18 -0
- package/dist/esm2022/lib/ranklist/ranklist.component.mjs +202 -87
- package/dist/esm2022/lib/types.mjs +1 -1
- package/dist/fesm2022/algoux-standard-ranklist-renderer-component-angular.mjs +217 -87
- package/dist/fesm2022/algoux-standard-ranklist-renderer-component-angular.mjs.map +1 -1
- package/dist/lib/index.d.ts +2 -1
- package/dist/lib/ranklist/problem-header-cell-template.directive.d.ts +20 -0
- package/dist/lib/ranklist/ranklist.component.d.ts +11 -2
- package/dist/lib/types.d.ts +1 -1
- package/package.json +3 -3
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { CommonModule } from '@angular/common';
|
|
2
2
|
import { ChangeDetectionStrategy, Component, ContentChild, EventEmitter, Input, Output, } from '@angular/core';
|
|
3
3
|
import { EnumTheme, formatTimeDuration, numberToAlphabet, resolveStyle, resolveText, resolveUserMarkers, } from '@algoux/standard-ranklist-utils';
|
|
4
|
-
import { calculateDirtPercentage, calculateProblemStatisticsFooter, calculateSEValue, caniuse, formatProblemStatisticsAcceptedMinute, formatProblemStatisticsAverageHardness, formatProblemStatisticsPercent, getMarkerPresentation,
|
|
4
|
+
import { calculateDirtPercentage, calculateProblemStatisticsFooter, calculateSEValue, caniuse, formatProblemStatisticsAcceptedMinute, formatProblemStatisticsAverageHardness, formatProblemStatisticsPercent, getMarkerPresentation, getProblemHeaderBackgroundImageIfStyled, getRankProblemStatusCellClassName, getRankProblemStatusCellPresentation, resolveSrkAssetUrl, shouldShowTimeColumn, srkSupportedVersions, } from '@algoux/standard-ranklist-renderer-component-core';
|
|
5
5
|
import { captureModalTriggerPointFromMouseEvent } from '../modal/modal-interactions';
|
|
6
|
+
import { SrkProblemHeaderCellTemplateDirective, } from './problem-header-cell-template.directive';
|
|
6
7
|
import { SrkStatusCellTemplateDirective, } from './status-cell-template.directive';
|
|
7
8
|
import { SrkUserCellTemplateDirective, } from './user-cell-template.directive';
|
|
8
9
|
import * as i0 from "@angular/core";
|
|
@@ -25,7 +26,9 @@ export class RanklistComponent {
|
|
|
25
26
|
userAvatarPlacement = 'user';
|
|
26
27
|
languages;
|
|
27
28
|
userClick = new EventEmitter();
|
|
29
|
+
problemClick = new EventEmitter();
|
|
28
30
|
solutionClick = new EventEmitter();
|
|
31
|
+
problemHeaderCellTemplate;
|
|
29
32
|
statusCellTemplate;
|
|
30
33
|
userCellTemplate;
|
|
31
34
|
supportedVersions = srkSupportedVersions;
|
|
@@ -122,7 +125,7 @@ export class RanklistComponent {
|
|
|
122
125
|
return `${statistics.accepted} / ${statistics.submitted} (${ratio}%)`;
|
|
123
126
|
}
|
|
124
127
|
problemHeaderBackgroundImage(problem, gradientDirection = 180) {
|
|
125
|
-
return
|
|
128
|
+
return getProblemHeaderBackgroundImageIfStyled(problem.style, this.theme, gradientDirection);
|
|
126
129
|
}
|
|
127
130
|
resolvedUserMarkers(user) {
|
|
128
131
|
return resolveUserMarkers(user, this.data.markers).map((marker) => ({
|
|
@@ -159,17 +162,9 @@ export class RanklistComponent {
|
|
|
159
162
|
if (this.statusColorAsText) {
|
|
160
163
|
classNames.push('srk-prest-status-block-color-text');
|
|
161
164
|
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
else if (status.result === 'AC') {
|
|
166
|
-
classNames.push('srk-prest-status-block-accepted');
|
|
167
|
-
}
|
|
168
|
-
else if (status.result === '?') {
|
|
169
|
-
classNames.push('srk-prest-status-block-frozen');
|
|
170
|
-
}
|
|
171
|
-
else if (status.result === 'RJ') {
|
|
172
|
-
classNames.push('srk-prest-status-block-failed');
|
|
165
|
+
const resultClassName = getRankProblemStatusCellClassName(status, this.data);
|
|
166
|
+
if (resultClassName) {
|
|
167
|
+
classNames.push(resultClassName);
|
|
173
168
|
}
|
|
174
169
|
return classNames.join(' ');
|
|
175
170
|
}
|
|
@@ -182,6 +177,27 @@ export class RanklistComponent {
|
|
|
182
177
|
statusCellTabIndex(status) {
|
|
183
178
|
return this.isStatusClickable(status) ? 0 : null;
|
|
184
179
|
}
|
|
180
|
+
hasProblemClickListener() {
|
|
181
|
+
const emitter = this.problemClick;
|
|
182
|
+
return emitter.observed === true || Boolean(emitter.observers?.length);
|
|
183
|
+
}
|
|
184
|
+
problemHeaderRole() {
|
|
185
|
+
return this.hasProblemClickListener() ? 'button' : null;
|
|
186
|
+
}
|
|
187
|
+
problemHeaderTabIndex() {
|
|
188
|
+
return this.hasProblemClickListener() ? 0 : null;
|
|
189
|
+
}
|
|
190
|
+
buildProblemHeaderCellContext(problem, problemIndex) {
|
|
191
|
+
return {
|
|
192
|
+
$implicit: problem,
|
|
193
|
+
problem,
|
|
194
|
+
problemIndex,
|
|
195
|
+
index: problemIndex,
|
|
196
|
+
ranklist: this.data,
|
|
197
|
+
languages: this.languages,
|
|
198
|
+
onClick: (event) => this.emitProblemClick(event, problem, problemIndex),
|
|
199
|
+
};
|
|
200
|
+
}
|
|
185
201
|
buildUserCellContext(row, rowIndex) {
|
|
186
202
|
return {
|
|
187
203
|
$implicit: row.user,
|
|
@@ -218,6 +234,13 @@ export class RanklistComponent {
|
|
|
218
234
|
event.preventDefault();
|
|
219
235
|
this.emitUserClick(undefined, row, rowIndex);
|
|
220
236
|
}
|
|
237
|
+
activateProblemHeaderFromKeyboard(event, problem, problemIndex) {
|
|
238
|
+
if (!this.hasProblemClickListener()) {
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
event.preventDefault();
|
|
242
|
+
this.emitProblemClick(undefined, problem, problemIndex);
|
|
243
|
+
}
|
|
221
244
|
activateStatusCellFromKeyboard(event, row, rowIndex, status, problemIndex) {
|
|
222
245
|
event.preventDefault();
|
|
223
246
|
this.emitSolutionClick(undefined, row, rowIndex, status, problemIndex);
|
|
@@ -240,6 +263,27 @@ export class RanklistComponent {
|
|
|
240
263
|
ranklist: this.data,
|
|
241
264
|
});
|
|
242
265
|
}
|
|
266
|
+
emitProblemClick(event, problem, problemIndex) {
|
|
267
|
+
if (!this.hasProblemClickListener()) {
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
if (event) {
|
|
271
|
+
event.preventDefault();
|
|
272
|
+
captureModalTriggerPointFromMouseEvent(event, {
|
|
273
|
+
source: 'problem-header',
|
|
274
|
+
context: {
|
|
275
|
+
problemIndex,
|
|
276
|
+
problemAlias: problem.alias || null,
|
|
277
|
+
problemTitle: this.resolveDisplayText(problem.title) || null,
|
|
278
|
+
},
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
this.problemClick.emit({
|
|
282
|
+
problem,
|
|
283
|
+
problemIndex,
|
|
284
|
+
ranklist: this.data,
|
|
285
|
+
});
|
|
286
|
+
}
|
|
243
287
|
emitSolutionClick(event, row, rowIndex, status, problemIndex) {
|
|
244
288
|
const solutions = this.getStatusSolutions(status);
|
|
245
289
|
if (!solutions.length) {
|
|
@@ -329,7 +373,7 @@ export class RanklistComponent {
|
|
|
329
373
|
}
|
|
330
374
|
}
|
|
331
375
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: RanklistComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
332
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: RanklistComponent, isStandalone: true, selector: "srk-ranklist", inputs: { data: "data", theme: "theme", rowBordered: "rowBordered", columnBordered: "columnBordered", rowStriped: "rowStriped", formatSrkAssetUrl: "formatSrkAssetUrl", splitOrganization: "splitOrganization", columnTitles: "columnTitles", statusCellPreset: "statusCellPreset", statusColorAsText: "statusColorAsText", showProblemStatisticsFooter: "showProblemStatisticsFooter", showDirtColumn: "showDirtColumn", showSEColumn: "showSEColumn", emptyStatusPlaceholder: "emptyStatusPlaceholder", userAvatarPlacement: "userAvatarPlacement", languages: "languages" }, outputs: { userClick: "userClick", solutionClick: "solutionClick" }, queries: [{ propertyName: "statusCellTemplate", first: true, predicate: SrkStatusCellTemplateDirective, descendants: true }, { propertyName: "userCellTemplate", first: true, predicate: SrkUserCellTemplateDirective, descendants: true }], ngImport: i0, template: `
|
|
376
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: RanklistComponent, isStandalone: true, selector: "srk-ranklist", inputs: { data: "data", theme: "theme", rowBordered: "rowBordered", columnBordered: "columnBordered", rowStriped: "rowStriped", formatSrkAssetUrl: "formatSrkAssetUrl", splitOrganization: "splitOrganization", columnTitles: "columnTitles", statusCellPreset: "statusCellPreset", statusColorAsText: "statusColorAsText", showProblemStatisticsFooter: "showProblemStatisticsFooter", showDirtColumn: "showDirtColumn", showSEColumn: "showSEColumn", emptyStatusPlaceholder: "emptyStatusPlaceholder", userAvatarPlacement: "userAvatarPlacement", languages: "languages" }, outputs: { userClick: "userClick", problemClick: "problemClick", solutionClick: "solutionClick" }, queries: [{ propertyName: "problemHeaderCellTemplate", first: true, predicate: SrkProblemHeaderCellTemplateDirective, descendants: true }, { propertyName: "statusCellTemplate", first: true, predicate: SrkStatusCellTemplateDirective, descendants: true }, { propertyName: "userCellTemplate", first: true, predicate: SrkUserCellTemplateDirective, descendants: true }], ngImport: i0, template: `
|
|
333
377
|
<div *ngIf="data.type !== 'general'; else versionState">
|
|
334
378
|
srk type "{{ data.type }}" is not supported
|
|
335
379
|
</div>
|
|
@@ -367,38 +411,55 @@ export class RanklistComponent {
|
|
|
367
411
|
<th *ngIf="showTimeColumn()" class="srk--text-right srk--nowrap">
|
|
368
412
|
{{ resolveColumnTitle('time', 'Time') }}
|
|
369
413
|
</th>
|
|
370
|
-
<
|
|
414
|
+
<ng-container
|
|
371
415
|
*ngFor="let problem of data.problems; let problemIndex = index"
|
|
372
|
-
class="srk--nowrap srk-problem-header"
|
|
373
|
-
[style.background-image]="problemHeaderBackgroundImage(problem)"
|
|
374
416
|
>
|
|
375
|
-
<
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
>
|
|
382
|
-
<
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
[
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
<ng-template #unlinkedProblemHeader>
|
|
392
|
-
<span class="srk--display-block">{{ problemAlias(problem, problemIndex) }}</span>
|
|
393
|
-
<span
|
|
394
|
-
*ngIf="problem.statistics"
|
|
395
|
-
class="srk--display-block srk-problem-stats"
|
|
396
|
-
[title]="problemStatsTitle(problem.statistics)"
|
|
417
|
+
<ng-container *ngIf="problemHeaderCellTemplate; else defaultProblemHeader">
|
|
418
|
+
<ng-container
|
|
419
|
+
[ngTemplateOutlet]="problemHeaderCellTemplate.templateRef"
|
|
420
|
+
[ngTemplateOutletContext]="buildProblemHeaderCellContext(problem, problemIndex)"
|
|
421
|
+
/>
|
|
422
|
+
</ng-container>
|
|
423
|
+
<ng-template #defaultProblemHeader>
|
|
424
|
+
<th
|
|
425
|
+
class="srk--nowrap srk-problem-header"
|
|
426
|
+
[class.srk--cursor-pointer]="hasProblemClickListener()"
|
|
427
|
+
[attr.role]="problemHeaderRole()"
|
|
428
|
+
[attr.tabindex]="problemHeaderTabIndex()"
|
|
429
|
+
[style.background-image]="problemHeaderBackgroundImage(problem)"
|
|
430
|
+
(click)="emitProblemClick($event, problem, problemIndex)"
|
|
431
|
+
(keydown.enter)="activateProblemHeaderFromKeyboard($event, problem, problemIndex)"
|
|
432
|
+
(keydown.space)="activateProblemHeaderFromKeyboard($event, problem, problemIndex)"
|
|
397
433
|
>
|
|
398
|
-
|
|
399
|
-
|
|
434
|
+
<a
|
|
435
|
+
*ngIf="problem.link && !hasProblemClickListener(); else unlinkedProblemHeader"
|
|
436
|
+
[href]="problem.link"
|
|
437
|
+
target="_blank"
|
|
438
|
+
rel="noopener noreferrer"
|
|
439
|
+
style="color: unset"
|
|
440
|
+
>
|
|
441
|
+
<span class="srk--display-block">{{ problemAlias(problem, problemIndex) }}</span>
|
|
442
|
+
<span
|
|
443
|
+
*ngIf="problem.statistics"
|
|
444
|
+
class="srk--display-block srk-problem-stats"
|
|
445
|
+
[title]="problemStatsTitle(problem.statistics)"
|
|
446
|
+
>
|
|
447
|
+
{{ problem.statistics.accepted }}
|
|
448
|
+
</span>
|
|
449
|
+
</a>
|
|
450
|
+
<ng-template #unlinkedProblemHeader>
|
|
451
|
+
<span class="srk--display-block">{{ problemAlias(problem, problemIndex) }}</span>
|
|
452
|
+
<span
|
|
453
|
+
*ngIf="problem.statistics"
|
|
454
|
+
class="srk--display-block srk-problem-stats"
|
|
455
|
+
[title]="problemStatsTitle(problem.statistics)"
|
|
456
|
+
>
|
|
457
|
+
{{ problem.statistics.accepted }}
|
|
458
|
+
</span>
|
|
459
|
+
</ng-template>
|
|
460
|
+
</th>
|
|
400
461
|
</ng-template>
|
|
401
|
-
</
|
|
462
|
+
</ng-container>
|
|
402
463
|
<th *ngIf="showDirtColumn" class="srk-dirt-header srk--text-right srk--nowrap">
|
|
403
464
|
{{ resolveColumnTitle('dirt', 'Dirt') }}
|
|
404
465
|
</th>
|
|
@@ -521,9 +582,13 @@ export class RanklistComponent {
|
|
|
521
582
|
<ng-container *ngIf="statusPresentation(status) as presentation">
|
|
522
583
|
<ng-container *ngIf="isNumber(presentation.score); else statusText">
|
|
523
584
|
<span class="srk-prest-status-block-score">{{ presentation.score }}</span>
|
|
524
|
-
<
|
|
525
|
-
|
|
526
|
-
|
|
585
|
+
<ng-container *ngIf="presentation.scoreDetails !== undefined">
|
|
586
|
+
<span [textContent]="statusSeparator"></span>
|
|
587
|
+
<span
|
|
588
|
+
class="srk-prest-status-block-score-details"
|
|
589
|
+
[textContent]="presentation.scoreDetails"
|
|
590
|
+
></span>
|
|
591
|
+
</ng-container>
|
|
527
592
|
</ng-container>
|
|
528
593
|
<ng-template #statusText>
|
|
529
594
|
<ng-container *ngIf="presentation.secondary !== undefined; else singleStatus">
|
|
@@ -546,12 +611,24 @@ export class RanklistComponent {
|
|
|
546
611
|
(keydown.space)="activateStatusCellFromKeyboard($event, row, rowIndex, status, problemIndex)"
|
|
547
612
|
>
|
|
548
613
|
<ng-container *ngIf="statusPresentation(status) as presentation">
|
|
549
|
-
<ng-container *ngIf="presentation.
|
|
550
|
-
<span class="srk-prest-status-block-
|
|
551
|
-
<
|
|
552
|
-
|
|
614
|
+
<ng-container *ngIf="isNumber(presentation.score); else failedStatusText">
|
|
615
|
+
<span class="srk-prest-status-block-score">{{ presentation.score }}</span>
|
|
616
|
+
<ng-container *ngIf="presentation.scoreDetails !== undefined">
|
|
617
|
+
<span [textContent]="statusSeparator"></span>
|
|
618
|
+
<span
|
|
619
|
+
class="srk-prest-status-block-score-details"
|
|
620
|
+
[textContent]="presentation.scoreDetails"
|
|
621
|
+
></span>
|
|
622
|
+
</ng-container>
|
|
553
623
|
</ng-container>
|
|
554
|
-
<ng-template #
|
|
624
|
+
<ng-template #failedStatusText>
|
|
625
|
+
<ng-container *ngIf="presentation.secondary !== undefined; else singleStatus">
|
|
626
|
+
<span class="srk-prest-status-block-primary">{{ presentation.primary || '' }}</span>
|
|
627
|
+
<span [textContent]="statusSeparator"></span>
|
|
628
|
+
<span class="srk-prest-status-block-secondary">{{ presentation.secondary }}</span>
|
|
629
|
+
</ng-container>
|
|
630
|
+
<ng-template #singleStatus>{{ presentation.primary }}</ng-template>
|
|
631
|
+
</ng-template>
|
|
555
632
|
</ng-container>
|
|
556
633
|
</td>
|
|
557
634
|
</ng-template>
|
|
@@ -690,38 +767,55 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
690
767
|
<th *ngIf="showTimeColumn()" class="srk--text-right srk--nowrap">
|
|
691
768
|
{{ resolveColumnTitle('time', 'Time') }}
|
|
692
769
|
</th>
|
|
693
|
-
<
|
|
770
|
+
<ng-container
|
|
694
771
|
*ngFor="let problem of data.problems; let problemIndex = index"
|
|
695
|
-
class="srk--nowrap srk-problem-header"
|
|
696
|
-
[style.background-image]="problemHeaderBackgroundImage(problem)"
|
|
697
772
|
>
|
|
698
|
-
<
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
>
|
|
705
|
-
<
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
[
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
<ng-template #unlinkedProblemHeader>
|
|
715
|
-
<span class="srk--display-block">{{ problemAlias(problem, problemIndex) }}</span>
|
|
716
|
-
<span
|
|
717
|
-
*ngIf="problem.statistics"
|
|
718
|
-
class="srk--display-block srk-problem-stats"
|
|
719
|
-
[title]="problemStatsTitle(problem.statistics)"
|
|
773
|
+
<ng-container *ngIf="problemHeaderCellTemplate; else defaultProblemHeader">
|
|
774
|
+
<ng-container
|
|
775
|
+
[ngTemplateOutlet]="problemHeaderCellTemplate.templateRef"
|
|
776
|
+
[ngTemplateOutletContext]="buildProblemHeaderCellContext(problem, problemIndex)"
|
|
777
|
+
/>
|
|
778
|
+
</ng-container>
|
|
779
|
+
<ng-template #defaultProblemHeader>
|
|
780
|
+
<th
|
|
781
|
+
class="srk--nowrap srk-problem-header"
|
|
782
|
+
[class.srk--cursor-pointer]="hasProblemClickListener()"
|
|
783
|
+
[attr.role]="problemHeaderRole()"
|
|
784
|
+
[attr.tabindex]="problemHeaderTabIndex()"
|
|
785
|
+
[style.background-image]="problemHeaderBackgroundImage(problem)"
|
|
786
|
+
(click)="emitProblemClick($event, problem, problemIndex)"
|
|
787
|
+
(keydown.enter)="activateProblemHeaderFromKeyboard($event, problem, problemIndex)"
|
|
788
|
+
(keydown.space)="activateProblemHeaderFromKeyboard($event, problem, problemIndex)"
|
|
720
789
|
>
|
|
721
|
-
|
|
722
|
-
|
|
790
|
+
<a
|
|
791
|
+
*ngIf="problem.link && !hasProblemClickListener(); else unlinkedProblemHeader"
|
|
792
|
+
[href]="problem.link"
|
|
793
|
+
target="_blank"
|
|
794
|
+
rel="noopener noreferrer"
|
|
795
|
+
style="color: unset"
|
|
796
|
+
>
|
|
797
|
+
<span class="srk--display-block">{{ problemAlias(problem, problemIndex) }}</span>
|
|
798
|
+
<span
|
|
799
|
+
*ngIf="problem.statistics"
|
|
800
|
+
class="srk--display-block srk-problem-stats"
|
|
801
|
+
[title]="problemStatsTitle(problem.statistics)"
|
|
802
|
+
>
|
|
803
|
+
{{ problem.statistics.accepted }}
|
|
804
|
+
</span>
|
|
805
|
+
</a>
|
|
806
|
+
<ng-template #unlinkedProblemHeader>
|
|
807
|
+
<span class="srk--display-block">{{ problemAlias(problem, problemIndex) }}</span>
|
|
808
|
+
<span
|
|
809
|
+
*ngIf="problem.statistics"
|
|
810
|
+
class="srk--display-block srk-problem-stats"
|
|
811
|
+
[title]="problemStatsTitle(problem.statistics)"
|
|
812
|
+
>
|
|
813
|
+
{{ problem.statistics.accepted }}
|
|
814
|
+
</span>
|
|
815
|
+
</ng-template>
|
|
816
|
+
</th>
|
|
723
817
|
</ng-template>
|
|
724
|
-
</
|
|
818
|
+
</ng-container>
|
|
725
819
|
<th *ngIf="showDirtColumn" class="srk-dirt-header srk--text-right srk--nowrap">
|
|
726
820
|
{{ resolveColumnTitle('dirt', 'Dirt') }}
|
|
727
821
|
</th>
|
|
@@ -844,9 +938,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
844
938
|
<ng-container *ngIf="statusPresentation(status) as presentation">
|
|
845
939
|
<ng-container *ngIf="isNumber(presentation.score); else statusText">
|
|
846
940
|
<span class="srk-prest-status-block-score">{{ presentation.score }}</span>
|
|
847
|
-
<
|
|
848
|
-
|
|
849
|
-
|
|
941
|
+
<ng-container *ngIf="presentation.scoreDetails !== undefined">
|
|
942
|
+
<span [textContent]="statusSeparator"></span>
|
|
943
|
+
<span
|
|
944
|
+
class="srk-prest-status-block-score-details"
|
|
945
|
+
[textContent]="presentation.scoreDetails"
|
|
946
|
+
></span>
|
|
947
|
+
</ng-container>
|
|
850
948
|
</ng-container>
|
|
851
949
|
<ng-template #statusText>
|
|
852
950
|
<ng-container *ngIf="presentation.secondary !== undefined; else singleStatus">
|
|
@@ -869,12 +967,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
869
967
|
(keydown.space)="activateStatusCellFromKeyboard($event, row, rowIndex, status, problemIndex)"
|
|
870
968
|
>
|
|
871
969
|
<ng-container *ngIf="statusPresentation(status) as presentation">
|
|
872
|
-
<ng-container *ngIf="presentation.
|
|
873
|
-
<span class="srk-prest-status-block-
|
|
874
|
-
<
|
|
875
|
-
|
|
970
|
+
<ng-container *ngIf="isNumber(presentation.score); else failedStatusText">
|
|
971
|
+
<span class="srk-prest-status-block-score">{{ presentation.score }}</span>
|
|
972
|
+
<ng-container *ngIf="presentation.scoreDetails !== undefined">
|
|
973
|
+
<span [textContent]="statusSeparator"></span>
|
|
974
|
+
<span
|
|
975
|
+
class="srk-prest-status-block-score-details"
|
|
976
|
+
[textContent]="presentation.scoreDetails"
|
|
977
|
+
></span>
|
|
978
|
+
</ng-container>
|
|
876
979
|
</ng-container>
|
|
877
|
-
<ng-template #
|
|
980
|
+
<ng-template #failedStatusText>
|
|
981
|
+
<ng-container *ngIf="presentation.secondary !== undefined; else singleStatus">
|
|
982
|
+
<span class="srk-prest-status-block-primary">{{ presentation.primary || '' }}</span>
|
|
983
|
+
<span [textContent]="statusSeparator"></span>
|
|
984
|
+
<span class="srk-prest-status-block-secondary">{{ presentation.secondary }}</span>
|
|
985
|
+
</ng-container>
|
|
986
|
+
<ng-template #singleStatus>{{ presentation.primary }}</ng-template>
|
|
987
|
+
</ng-template>
|
|
878
988
|
</ng-container>
|
|
879
989
|
</td>
|
|
880
990
|
</ng-template>
|
|
@@ -1003,8 +1113,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
1003
1113
|
type: Input
|
|
1004
1114
|
}], userClick: [{
|
|
1005
1115
|
type: Output
|
|
1116
|
+
}], problemClick: [{
|
|
1117
|
+
type: Output
|
|
1006
1118
|
}], solutionClick: [{
|
|
1007
1119
|
type: Output
|
|
1120
|
+
}], problemHeaderCellTemplate: [{
|
|
1121
|
+
type: ContentChild,
|
|
1122
|
+
args: [SrkProblemHeaderCellTemplateDirective]
|
|
1008
1123
|
}], statusCellTemplate: [{
|
|
1009
1124
|
type: ContentChild,
|
|
1010
1125
|
args: [SrkStatusCellTemplateDirective]
|
|
@@ -1012,4 +1127,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
1012
1127
|
type: ContentChild,
|
|
1013
1128
|
args: [SrkUserCellTemplateDirective]
|
|
1014
1129
|
}] } });
|
|
1015
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFua2xpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9yYW5rbGlzdC9yYW5rbGlzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsU0FBUyxFQUNULGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsWUFBWSxFQUNaLFdBQVcsRUFDWCxrQkFBa0IsR0FDbkIsTUFBTSxpQ0FBaUMsQ0FBQztBQUV6QyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGdDQUFnQyxFQUNoQyxnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLHFDQUFxQyxFQUNyQyxzQ0FBc0MsRUFDdEMsOEJBQThCLEVBQzlCLHFCQUFxQixFQUNyQiwrQkFBK0IsRUFDL0Isb0NBQW9DLEVBQ3BDLGtCQUFrQixFQUNsQixvQkFBb0IsRUFDcEIsb0JBQW9CLEdBQ3JCLE1BQU0sbURBQW1ELENBQUM7QUFPM0QsT0FBTyxFQUFFLHNDQUFzQyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFRckYsT0FBTyxFQUNMLDhCQUE4QixHQUUvQixNQUFNLGtDQUFrQyxDQUFDO0FBQzFDLE9BQU8sRUFDTCw0QkFBNEIsR0FFN0IsTUFBTSxnQ0FBZ0MsQ0FBQzs7O0FBbVV4QyxNQUFNLE9BQU8saUJBQWlCO0lBQ0QsSUFBSSxDQUFrQjtJQUN4QyxLQUFLLEdBQWMsU0FBUyxDQUFDLEtBQUssQ0FBQztJQUNuQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQ3BCLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDdkIsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUNuQixpQkFBaUIsQ0FBMEM7SUFD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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBUVDtpQkFDRjs4QkFFNEIsSUFBSTtzQkFBOUIsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBQ2hCLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRywyQkFBMkI7c0JBQW5DLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFFSSxTQUFTO3NCQUFsQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBR1Asa0JBQWtCO3NCQURqQixZQUFZO3VCQUFDLDhCQUE4QjtnQkFJNUMsZ0JBQWdCO3NCQURmLFlBQVk7dUJBQUMsNEJBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgKiBhcyBzcmsgZnJvbSAnQGFsZ291eC9zdGFuZGFyZC1yYW5rbGlzdCc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgRW51bVRoZW1lLFxuICBmb3JtYXRUaW1lRHVyYXRpb24sXG4gIG51bWJlclRvQWxwaGFiZXQsXG4gIHJlc29sdmVTdHlsZSxcbiAgcmVzb2x2ZVRleHQsXG4gIHJlc29sdmVVc2VyTWFya2Vycyxcbn0gZnJvbSAnQGFsZ291eC9zdGFuZGFyZC1yYW5rbGlzdC11dGlscyc7XG5pbXBvcnQgdHlwZSB7IFRoZW1lQ29sb3IgfSBmcm9tICdAYWxnb3V4L3N0YW5kYXJkLXJhbmtsaXN0LXV0aWxzJztcbmltcG9ydCB7XG4gIGNhbGN1bGF0ZURpcnRQZXJjZW50YWdlLFxuICBjYWxjdWxhdGVQcm9ibGVtU3RhdGlzdGljc0Zvb3RlcixcbiAgY2FsY3VsYXRlU0VWYWx1ZSxcbiAgY2FuaXVzZSxcbiAgZm9ybWF0UHJvYmxlbVN0YXRpc3RpY3NBY2NlcHRlZE1pbnV0ZSxcbiAgZm9ybWF0UHJvYmxlbVN0YXRpc3RpY3NBdmVyYWdlSGFyZG5lc3MsXG4gIGZvcm1hdFByb2JsZW1TdGF0aXN0aWNzUGVyY2VudCxcbiAgZ2V0TWFya2VyUHJlc2VudGF0aW9uLFxuICBnZXRQcm9ibGVtSGVhZGVyQmFja2dyb3VuZEltYWdlLFxuICBnZXRSYW5rUHJvYmxlbVN0YXR1c0NlbGxQcmVzZW50YXRpb24sXG4gIHJlc29sdmVTcmtBc3NldFVybCxcbiAgc2hvdWxkU2hvd1RpbWVDb2x1bW4sXG4gIHNya1N1cHBvcnRlZFZlcnNpb25zLFxufSBmcm9tICdAYWxnb3V4L3N0YW5kYXJkLXJhbmtsaXN0LXJlbmRlcmVyLWNvbXBvbmVudC1jb3JlJztcbmltcG9ydCB0eXBlIHtcbiAgUHJvYmxlbVN0YXRpc3RpY3NGb290ZXIsXG4gIFJhbmtsaXN0Q29sdW1uVGl0bGVzLFxuICBSYW5rbGlzdFN0YXR1c0NlbGxQcmVzZXQsXG4gIFJhbmtsaXN0VXNlckF2YXRhclBsYWNlbWVudCxcbn0gZnJvbSAnQGFsZ291eC9zdGFuZGFyZC1yYW5rbGlzdC1yZW5kZXJlci1jb21wb25lbnQtY29yZSc7XG5pbXBvcnQgeyBjYXB0dXJlTW9kYWxUcmlnZ2VyUG9pbnRGcm9tTW91c2VFdmVudCB9IGZyb20gJy4uL21vZGFsL21vZGFsLWludGVyYWN0aW9ucyc7XG5pbXBvcnQgdHlwZSB7XG4gIFJhbmtWYWx1ZSxcbiAgU29sdXRpb25DbGlja1BheWxvYWQsXG4gIFN0YXRpY1JhbmtsaXN0LFxuICBTdGF0aWNSYW5rbGlzdFJvdyxcbiAgVXNlckNsaWNrUGF5bG9hZCxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgU3JrU3RhdHVzQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLFxuICB0eXBlIFN0YXR1c0NlbGxUZW1wbGF0ZUNvbnRleHQsXG59IGZyb20gJy4vc3RhdHVzLWNlbGwtdGVtcGxhdGUuZGlyZWN0aXZlJztcbmltcG9ydCB7XG4gIFNya1VzZXJDZWxsVGVtcGxhdGVEaXJlY3RpdmUsXG4gIHR5cGUgVXNlckNlbGxUZW1wbGF0ZUNvbnRleHQsXG59IGZyb20gJy4vdXNlci1jZWxsLXRlbXBsYXRlLmRpcmVjdGl2ZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Nyay1yYW5rbGlzdCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2ICpuZ0lmPVwiZGF0YS50eXBlICE9PSAnZ2VuZXJhbCc7IGVsc2UgdmVyc2lvblN0YXRlXCI+XG4gICAgICBzcmsgdHlwZSBcInt7IGRhdGEudHlwZSB9fVwiIGlzIG5vdCBzdXBwb3J0ZWRcbiAgICA8L2Rpdj5cblxuICAgIDxuZy10ZW1wbGF0ZSAjdmVyc2lvblN0YXRlPlxuICAgICAgPGRpdiAqbmdJZj1cIiFpc1N1cHBvcnRlZFZlcnNpb24oKTsgZWxzZSByYW5rbGlzdFRhYmxlXCI+XG4gICAgICAgIHNyayB2ZXJzaW9uIFwie3sgZGF0YS52ZXJzaW9uIH19XCIgaXMgbm90IHN1cHBvcnRlZCAoY3VycmVudCBzdXBwb3J0ZWQ6IHt7IHN1cHBvcnRlZFZlcnNpb25zIH19KVxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy10ZW1wbGF0ZSAjcmFua2xpc3RUYWJsZT5cbiAgICAgIDxkaXYgY2xhc3M9XCJzcmstY29tbW9uLXRhYmxlIHNyay1tYWluXCI+XG4gICAgICAgIDx0YWJsZVxuICAgICAgICAgIFtjbGFzcy5zcmstdGFibGUtcm93LWJvcmRlcmVkXT1cInJvd0JvcmRlcmVkXCJcbiAgICAgICAgICBbY2xhc3Muc3JrLXRhYmxlLWNvbHVtbi1ib3JkZXJlZF09XCJjb2x1bW5Cb3JkZXJlZFwiXG4gICAgICAgICAgW2NsYXNzLnNyay10YWJsZS1yb3ctc3RyaXBlZF09XCJyb3dTdHJpcGVkXCJcbiAgICAgICAgPlxuICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHNlcmllc0l0ZW0gb2YgZGF0YS5zZXJpZXM7IGxldCBzZXJpZXNJbmRleCA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNyay1zZXJpZXMtaGVhZGVyIHNyay0tdGV4dC1yaWdodCBzcmstLW5vd3JhcFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnNyay1zZXJpZXMtc2VnbWVudGVkLWNvbHVtbl09XCJpc1Nlcmllc1NlZ21lbnRlZENvbHVtbihzZXJpZXNJdGVtKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyByZXNvbHZlU2VyaWVzQ29sdW1uVGl0bGUoc2VyaWVzSXRlbSwgc2VyaWVzSW5kZXgpIH19XG4gICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgIDx0aFxuICAgICAgICAgICAgICAgICpuZ0lmPVwic3BsaXRPcmdhbml6YXRpb25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3JrLW9yZ2FuaXphdGlvbi1oZWFkZXIgc3JrLS10ZXh0LWxlZnQgc3JrLS1ub3dyYXBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgcmVzb2x2ZUNvbHVtblRpdGxlKCdvcmdhbml6YXRpb24nLCAnT3JnYW5pemF0aW9uJykgfX1cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgPHRoIGNsYXNzPVwic3JrLS10ZXh0LWxlZnQgc3JrLS1ub3dyYXBcIj57eyByZXNvbHZlQ29sdW1uVGl0bGUoJ3VzZXInLCAnTmFtZScpIH19PC90aD5cbiAgICAgICAgICAgICAgPHRoIGNsYXNzPVwic3JrLS10ZXh0LXJpZ2h0IHNyay0tbm93cmFwXCI+e3sgcmVzb2x2ZUNvbHVtblRpdGxlKCdzY29yZScsICdTY29yZScpIH19PC90aD5cbiAgICAgICAgICAgICAgPHRoICpuZ0lmPVwic2hvd1RpbWVDb2x1bW4oKVwiIGNsYXNzPVwic3JrLS10ZXh0LXJpZ2h0IHNyay0tbm93cmFwXCI+XG4gICAgICAgICAgICAgICAge3sgcmVzb2x2ZUNvbHVtblRpdGxlKCd0aW1lJywgJ1RpbWUnKSB9fVxuICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcHJvYmxlbSBvZiBkYXRhLnByb2JsZW1zOyBsZXQgcHJvYmxlbUluZGV4ID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3JrLS1ub3dyYXAgc3JrLXByb2JsZW0taGVhZGVyXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1pbWFnZV09XCJwcm9ibGVtSGVhZGVyQmFja2dyb3VuZEltYWdlKHByb2JsZW0pXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInByb2JsZW0ubGluazsgZWxzZSB1bmxpbmtlZFByb2JsZW1IZWFkZXJcIlxuICAgICAgICAgICAgICAgICAgW2hyZWZdPVwicHJvYmxlbS5saW5rXCJcbiAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY29sb3I6IHVuc2V0XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyay0tZGlzcGxheS1ibG9ja1wiPnt7IHByb2JsZW1BbGlhcyhwcm9ibGVtLCBwcm9ibGVtSW5kZXgpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJwcm9ibGVtLnN0YXRpc3RpY3NcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNyay0tZGlzcGxheS1ibG9jayBzcmstcHJvYmxlbS1zdGF0c1wiXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJwcm9ibGVtU3RhdHNUaXRsZShwcm9ibGVtLnN0YXRpc3RpY3MpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgcHJvYmxlbS5zdGF0aXN0aWNzLmFjY2VwdGVkIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdW5saW5rZWRQcm9ibGVtSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzcmstLWRpc3BsYXktYmxvY2tcIj57eyBwcm9ibGVtQWxpYXMocHJvYmxlbSwgcHJvYmxlbUluZGV4KSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicHJvYmxlbS5zdGF0aXN0aWNzXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzcmstLWRpc3BsYXktYmxvY2sgc3JrLXByb2JsZW0tc3RhdHNcIlxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwicHJvYmxlbVN0YXRzVGl0bGUocHJvYmxlbS5zdGF0aXN0aWNzKVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7IHByb2JsZW0uc3RhdGlzdGljcy5hY2NlcHRlZCB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgIDx0aCAqbmdJZj1cInNob3dEaXJ0Q29sdW1uXCIgY2xhc3M9XCJzcmstZGlydC1oZWFkZXIgc3JrLS10ZXh0LXJpZ2h0IHNyay0tbm93cmFwXCI+XG4gICAgICAgICAgICAgICAge3sgcmVzb2x2ZUNvbHVtblRpdGxlKCdkaXJ0JywgJ0RpcnQnKSB9fVxuICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICA8dGggKm5nSWY9XCJzaG93U0VDb2x1bW5cIiBjbGFzcz1cInNyay1zZS1oZWFkZXIgc3JrLS10ZXh0LXJpZ2h0IHNyay0tbm93cmFwXCI+XG4gICAgICAgICAgICAgICAge3sgcmVzb2x2ZUNvbHVtblRpdGxlKCdzZScsICdTRScpIH19XG4gICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCByb3cgb2YgZGF0YS5yb3dzOyBsZXQgcm93SW5kZXggPSBpbmRleFwiPlxuICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcmFua1ZhbHVlIG9mIGdldFJhbmtWYWx1ZXMocm93KTsgbGV0IHNlcmllc0luZGV4ID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3JrLS10ZXh0LXJpZ2h0IHNyay0tbm93cmFwXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRTZXJpZXNTZWdtZW50Q2xhc3MocmFua1ZhbHVlLCBkYXRhLnNlcmllc1tzZXJpZXNJbmRleF0pXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Muc3JrLXNlcmllcy1zZWdtZW50ZWQtY29sdW1uXT1cImlzU2VyaWVzU2VnbWVudGVkQ29sdW1uKGRhdGEuc2VyaWVzW3Nlcmllc0luZGV4XSlcIlxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cImdldFNlcmllc1NlZ21lbnRTdHlsZShyYW5rVmFsdWUsIGRhdGEuc2VyaWVzW3Nlcmllc0luZGV4XSlcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgZ2V0UmFua1RleHQocmFua1ZhbHVlLCByb3cpIH19XG4gICAgICAgICAgICAgIDwvdGQ+XG5cbiAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzcGxpdE9yZ2FuaXphdGlvblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzcmstb3JnYW5pemF0aW9uLWNlbGwgc3JrLS10ZXh0LWxlZnQgc3JrLS1ub3dyYXBcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5zcmstb3JnYW5pemF0aW9uLWNlbGwtYXZhdGFyXT1cInNob3dBdmF0YXJJbk9yZ2FuaXphdGlvbigpICYmICEhcm93LnVzZXIuYXZhdGFyXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcmstb3JnYW5pemF0aW9uLWNlbGwtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dBdmF0YXJJbk9yZ2FuaXphdGlvbigpICYmIHJvdy51c2VyLmF2YXRhclwiIGNsYXNzPVwic3JrLXVzZXItYXZhdGFyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImZvcm1hdEFzc2V0VXJsKHJvdy51c2VyLmF2YXRhciwgJ3VzZXIuYXZhdGFyJylcIlxuICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlVzZXIgQXZhdGFyXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzcmstb3JnYW5pemF0aW9uLW5hbWUtdGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJyb3cudXNlci5vcmdhbml6YXRpb24gPyByZXNvbHZlRGlzcGxheVRleHQocm93LnVzZXIub3JnYW5pemF0aW9uKSA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgW3RleHRDb250ZW50XT1cInJvdy51c2VyLm9yZ2FuaXphdGlvbiA/IHJlc29sdmVEaXNwbGF5VGV4dChyb3cudXNlci5vcmdhbml6YXRpb24pIDogJydcIlxuICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC90ZD5cblxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidXNlckNlbGxUZW1wbGF0ZTsgZWxzZSBkZWZhdWx0VXNlckNlbGxcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ1c2VyQ2VsbFRlbXBsYXRlLnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJidWlsZFVzZXJDZWxsQ29udGV4dChyb3csIHJvd0luZGV4KVwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFVzZXJDZWxsPlxuICAgICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzcmstLXRleHQtbGVmdCBzcmstLW5vd3JhcCBzcmstdXNlci1jZWxsIHNyay0tY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImVtaXRVc2VyQ2xpY2soJGV2ZW50LCByb3csIHJvd0luZGV4KVwiXG4gICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJhY3RpdmF0ZVVzZXJDZWxsRnJvbUtleWJvYXJkKCRldmVudCwgcm93LCByb3dJbmRleClcIlxuICAgICAgICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwiYWN0aXZhdGVVc2VyQ2VsbEZyb21LZXlib2FyZCgkZXZlbnQsIHJvdywgcm93SW5kZXgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3JrLXVzZXItY2VsbC1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJyb3cudXNlci5hdmF0YXIgJiYgIXNob3dBdmF0YXJJbk9yZ2FuaXphdGlvbigpXCIgY2xhc3M9XCJzcmstdXNlci1hdmF0YXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImZvcm1hdEFzc2V0VXJsKHJvdy51c2VyLmF2YXRhciwgJ3VzZXIuYXZhdGFyJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiVXNlciBBdmF0YXJcIlxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3JrLXVzZXItYm9keVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcmstdXNlci1uYW1lLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzcmstdXNlci1uYW1lLXRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwicmVzb2x2ZURpc3BsYXlUZXh0KHJvdy51c2VyLm5hbWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgcmVzb2x2ZURpc3BsYXlUZXh0KHJvdy51c2VyLm5hbWUpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyay1tYXJrZXItZG90LWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG1hcmtlciBvZiByZXNvbHZlZFVzZXJNYXJrZXJzKHJvdy51c2VyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzcmstbWFya2VyIHNyay1tYXJrZXItZG90IHNyay0tYy10b29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJtYXJrZXIucHJlc2VudGF0aW9uLmNsYXNzTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwibWFya2VyLnByZXNlbnRhdGlvbi5zdHlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10b29sdGlwXT1cInJlc29sdmVEaXNwbGF5VGV4dChtYXJrZXIubWFya2VyLmxhYmVsKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicm93LnVzZXIub3JnYW5pemF0aW9uICYmICFzcGxpdE9yZ2FuaXphdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNyay11c2VyLXNlY29uZGFyeS10ZXh0IHNyay0tdGV4dC1lbGxpcHNpc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIlwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgcmVzb2x2ZURpc3BsYXlUZXh0KHJvdy51c2VyLm9yZ2FuaXphdGlvbikgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJzcmstLXRleHQtcmlnaHQgc3JrLS1ub3dyYXBcIj57eyByb3cuc2NvcmUudmFsdWUgfX08L3RkPlxuICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJzaG93VGltZUNvbHVtbigpXCIgY2xhc3M9XCJzcmstLXRleHQtcmlnaHQgc3JrLS1ub3dyYXBcIj5cbiAgICAgICAgICAgICAgICB7eyByb3cuc2NvcmUudGltZSA/IGZvcm1hdFRpbWUocm93LnNjb3JlLnRpbWUpIDogJy0nIH19XG4gICAgICAgICAgICAgIDwvdGQ+XG5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc3RhdHVzIG9mIHJvdy5zdGF0dXNlczsgbGV0IHByb2JsZW1JbmRleCA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0YXR1c0NlbGxUZW1wbGF0ZTsgZWxzZSBkZWZhdWx0U3RhdHVzQ2VsbFwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJzdGF0dXNDZWxsVGVtcGxhdGUudGVtcGxhdGVSZWZcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiYnVpbGRTdGF0dXNDZWxsQ29udGV4dChyb3csIHJvd0luZGV4LCBzdGF0dXMsIHByb2JsZW1JbmRleClcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRTdGF0dXNDZWxsPlxuICAgICAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic3RhdHVzLnJlc3VsdCA9PT0gJ0ZCJyB8fCBzdGF0dXMucmVzdWx0ID09PSAnQUMnOyBlbHNlIGZhaWxlZE9yRnJvemVuU3RhdHVzXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic3RhdHVzQ2VsbENsYXNzKHN0YXR1cylcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci5yb2xlXT1cInN0YXR1c0NlbGxSb2xlKHN0YXR1cylcIlxuICAgICAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJzdGF0dXNDZWxsVGFiSW5kZXgoc3RhdHVzKVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJlbWl0U29sdXRpb25DbGljaygkZXZlbnQsIHJvdywgcm93SW5kZXgsIHN0YXR1cywgcHJvYmxlbUluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImFjdGl2YXRlU3RhdHVzQ2VsbEZyb21LZXlib2FyZCgkZXZlbnQsIHJvdywgcm93SW5kZXgsIHN0YXR1cywgcHJvYmxlbUluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cImFjdGl2YXRlU3RhdHVzQ2VsbEZyb21LZXlib2FyZCgkZXZlbnQsIHJvdywgcm93SW5kZXgsIHN0YXR1cywgcHJvYmxlbUluZGV4KVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzdGF0dXNDb2xvckFzVGV4dCAmJiBzdGF0dXMucmVzdWx0ID09PSAnRkInXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNyay1wcmVzdC1zdGF0dXMtYmxvY2stZmItc3RhclwiXG4gICAgICAgICAgICAgICAgICAgICAgW3RleHRDb250ZW50XT1cImZpcnN0Qmxvb2RTdGFyXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0YXR1c1ByZXNlbnRhdGlvbihzdGF0dXMpIGFzIHByZXNlbnRhdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc051bWJlcihwcmVzZW50YXRpb24uc2NvcmUpOyBlbHNlIHN0YXR1c1RleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3JrLXByZXN0LXN0YXR1cy1ibG9jay1zY29yZVwiPnt7IHByZXNlbnRhdGlvbi5zY29yZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3JrLXByZXN0LXN0YXR1cy1ibG9jay1zY29yZS1kZXRhaWxzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHByZXNlbnRhdGlvbi5zY29yZURldGFpbHMgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3N0YXR1c1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicHJlc2VudGF0aW9uLnNlY29uZGFyeSAhPT0gdW5kZWZpbmVkOyBlbHNlIHNpbmdsZVN0YXR1c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyay1wcmVzdC1zdGF0dXMtYmxvY2stcHJpbWFyeVwiPnt7IHByZXNlbnRhdGlvbi5wcmltYXJ5IHx8ICcnIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbdGV4dENvbnRlbnRdPVwic3RhdHVzU2VwYXJhdG9yXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyay1wcmVzdC1zdGF0dXMtYmxvY2stc2Vjb25kYXJ5XCI+e3sgcHJlc2VudGF0aW9uLnNlY29uZGFyeSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzaW5nbGVTdGF0dXM+e3sgcHJlc2VudGF0aW9uLnByaW1hcnkgfX08L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZmFpbGVkT3JGcm96ZW5TdGF0dXM+XG4gICAgICAgICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic3RhdHVzLnJlc3VsdCA9PT0gJz8nIHx8IHN0YXR1cy5yZXN1bHQgPT09ICdSSic7IGVsc2UgZW1wdHlTdGF0dXNcIlxuICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInN0YXR1c0NlbGxDbGFzcyhzdGF0dXMpXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5yb2xlXT1cInN0YXR1c0NlbGxSb2xlKHN0YXR1cylcIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cInN0YXR1c0NlbGxUYWJJbmRleChzdGF0dXMpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZW1pdFNvbHV0aW9uQ2xpY2soJGV2ZW50LCByb3csIHJvd0luZGV4LCBzdGF0dXMsIHByb2JsZW1JbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImFjdGl2YXRlU3RhdHVzQ2VsbEZyb21LZXlib2FyZCgkZXZlbnQsIHJvdywgcm93SW5kZXgsIHN0YXR1cywgcHJvYmxlbUluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwiYWN0aXZhdGVTdGF0dXNDZWxsRnJvbUtleWJvYXJkKCRldmVudCwgcm93LCByb3dJbmRleCwgc3RhdHVzLCBwcm9ibGVtSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdGF0dXNQcmVzZW50YXRpb24oc3RhdHVzKSBhcyBwcmVzZW50YXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwcmVzZW50YXRpb24uc2Vjb25kYXJ5ICE9PSB1bmRlZmluZWQ7IGVsc2Ugc2luZ2xlU3RhdHVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3JrLXByZXN0LXN0YXR1cy1ibG9jay1wcmltYXJ5XCI+e3sgcHJlc2VudGF0aW9uLnByaW1hcnkgfHwgJycgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFt0ZXh0Q29udGVudF09XCJzdGF0dXNTZXBhcmF0b3JcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3JrLXByZXN0LXN0YXR1cy1ibG9jay1zZWNvbmRhcnlcIj57eyBwcmVzZW50YXRpb24uc2Vjb25kYXJ5IH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3NpbmdsZVN0YXR1cz57eyBwcmVzZW50YXRpb24ucHJpbWFyeSB9fTwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNlbXB0eVN0YXR1cz5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwic3JrLXN0YXR1cy1wbGFjZWhvbGRlci1jZWxsIHNyay0tdGV4dC1jZW50ZXIgc3JrLS1ub3dyYXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBlbXB0eVN0YXR1c1BsYWNlaG9sZGVyIH19XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInNob3dEaXJ0Q29sdW1uXCIgY2xhc3M9XCJzcmstZGlydC1jZWxsIHNyay0tdGV4dC1yaWdodCBzcmstLW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgIHt7IGNhbGN1bGF0ZURpcnRQZXJjZW50YWdlKHJvdykgfX1cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkICpuZ0lmPVwic2hvd1NFQ29sdW1uXCIgY2xhc3M9XCJzcmstc2UtY2VsbCBzcmstLXRleHQtcmlnaHQgc3JrLS1ub3dyYXBcIj5cbiAgICAgICAgICAgICAgICB7eyBjYWxjdWxhdGVTRVZhbHVlKHJvdywgcHJvYmxlbVN0YXRpc3RpY3MpIH19XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgPHRmb290ICpuZ0lmPVwic2hvd1Byb2JsZW1TdGF0aXN0aWNzRm9vdGVyXCI+XG4gICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGZvb3RlclJvdyBvZiBwcm9ibGVtU3RhdGlzdGljc0Zvb3RlclJvd3NcIlxuICAgICAgICAgICAgICBjbGFzcz1cInNyay1wcm9ibGVtLXN0YXRpc3RpY3MtZm9vdGVyLXJvd1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3JrLXByb2JsZW0tc3RhdGlzdGljcy1mb290ZXItbGFiZWxzIHNyay0tdGV4dC1yaWdodCBzcmstLW5vd3JhcFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuY29sc3Bhbl09XCJsZWZ0Rm9vdGVyQ29sdW1uQ291bnQoKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzcmstcHJvYmxlbS1zdGF0aXN0aWNzLWZvb3Rlci1sYWJlbCBzcmstLWMtdG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5kYXRhLXRvb2x0aXBdPVwiZm9vdGVyUm93LnRvb2x0aXBcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IGZvb3RlclJvdy5sYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHN0YXQgb2YgcHJvYmxlbVN0YXRpc3RpY3NcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3JrLXByb2JsZW0tc3RhdGlzdGljcy1mb290ZXItY2VsbCBzcmstLXRleHQtY2VudGVyIHNyay0tbm93cmFwXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3JrLXByb2JsZW0tc3RhdGlzdGljcy1mb290ZXItcHJpbWFyeVwiPlxuICAgICAgICAgICAgICAgICAge3sgZ2V0UHJvYmxlbVN0YXRpc3RpY3NGb290ZXJDZWxsUHJpbWFyeShmb290ZXJSb3cua2V5LCBzdGF0KSB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0UHJvYmxlbVN0YXRpc3RpY3NGb290ZXJDZWxsU2Vjb25kYXJ5KGZvb3RlclJvdy5rZXksIHN0YXQpICE9PSB1bmRlZmluZWRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPiA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyay1wcm9ibGVtLXN0YXRpc3RpY3MtZm9vdGVyLXNlY29uZGFyeVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBnZXRQcm9ibGVtU3RhdGlzdGljc0Zvb3RlckNlbGxTZWNvbmRhcnkoZm9vdGVyUm93LmtleSwgc3RhdCkgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93RGlydENvbHVtblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzcmstcHJvYmxlbS1zdGF0aXN0aWNzLWZvb3Rlci1jZWxsIHNyay1leHRyYS1zdGF0aXN0aWNzLWZvb3Rlci1jZWxsIHNyay1kaXJ0LWZvb3Rlci1jZWxsIHNyay0tbm93cmFwXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3JrLXByb2JsZW0tc3RhdGlzdGljcy1mb290ZXItcHJpbWFyeVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93U0VDb2x1bW5cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3JrLXByb2JsZW0tc3RhdGlzdGljcy1mb290ZXItY2VsbCBzcmstZXh0cmEtc3RhdGlzdGljcy1mb290ZXItY2VsbCBzcmstc2UtZm9vdGVyLWNlbGwgc3JrLS1ub3dyYXBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzcmstcHJvYmxlbS1zdGF0aXN0aWNzLWZvb3Rlci1wcmltYXJ5XCI+PC9zcGFuPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDx0ciBjbGFzcz1cInNyay1wcm9ibGVtLXN0YXRpc3RpY3MtZm9vdGVyLXJvdyBzcmstcHJvYmxlbS1zdGF0aXN0aWNzLWZvb3Rlci1wcm9ibGVtLWxhYmVsLXJvd1wiPlxuICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNyay1wcm9ibGVtLXN0YXRpc3RpY3MtZm9vdGVyLWxhYmVscyBzcmstLXRleHQtcmlnaHQgc3JrLS1ub3dyYXBcIlxuICAgICAgICAgICAgICAgIFthdHRyLmNvbHNwYW5dPVwibGVmdEZvb3RlckNvbHVtbkNvdW50KClcIlxuICAgICAgICAgICAgICA+PC90ZD5cbiAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHByb2JsZW0gb2YgZGF0YS5wcm9ibGVtczsgbGV0IHByb2JsZW1JbmRleCA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNyay1wcm9ibGVtLXN0YXRpc3RpY3MtZm9vdGVyLWNlbGwgc3JrLXByb2JsZW0tc3RhdGlzdGljcy1mb290ZXItcHJvYmxlbS1oZWFkZXIgc3JrLXByb2JsZW0taGVhZGVyIHNyay0tdGV4dC1jZW50ZXIgc3JrLS1ub3dyYXBcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWltYWdlXT1cInByb2JsZW1IZWFkZXJCYWNrZ3JvdW5kSW1hZ2UocHJvYmxlbSwgMClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzcmstLWRpc3BsYXktYmxvY2tcIj57eyBwcm9ibGVtQWxpYXMocHJvYmxlbSwgcHJvYmxlbUluZGV4KSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93RGlydENvbHVtblwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzcmstcHJvYmxlbS1zdGF0aXN0aWNzLWZvb3Rlci1jZWxsIHNyay1leHRyYS1zdGF0aXN0aWNzLWZvb3Rlci1jZWxsIHNyay1kaXJ0LWZvb3Rlci1jZWxsIHNyay0tbm93cmFwXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3JrLXByb2JsZW0tc3RhdGlzdGljcy1mb290ZXItcHJpbWFyeVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93U0VDb2x1bW5cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3JrLXByb2JsZW0tc3RhdGlzdGljcy1mb290ZXItY2VsbCBzcmstZXh0cmEtc3RhdGlzdGljcy1mb290ZXItY2VsbCBzcmstc2UtZm9vdGVyLWNlbGwgc3JrLS1ub3dyYXBcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzcmstcHJvYmxlbS1zdGF0aXN0aWNzLWZvb3Rlci1wcmltYXJ5XCI+PC9zcGFuPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L3Rmb290PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgUmFua2xpc3RDb21wb25lbnQge1xuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBkYXRhITogU3RhdGljUmFua2xpc3Q7XG4gIEBJbnB1dCgpIHRoZW1lOiBFbnVtVGhlbWUgPSBFbnVtVGhlbWUubGlnaHQ7XG4gIEBJbnB1dCgpIHJvd0JvcmRlcmVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNvbHVtbkJvcmRlcmVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIHJvd1N0cmlwZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgZm9ybWF0U3JrQXNzZXRVcmw/OiAodXJsOiBzdHJpbmcsIGZpZWxkOiBzdHJpbmcpID0+IHN0cmluZztcbiAgQElucHV0KCkgc3BsaXRPcmdhbml6YXRpb24gPSBmYWxzZTtcbiAgQElucHV0KCkgY29sdW1uVGl0bGVzPzogUmFua2xpc3RDb2x1bW5UaXRsZXM7XG4gIEBJbnB1dCgpIHN0YXR1c0NlbGxQcmVzZXQ6IFJhbmtsaXN0U3RhdHVzQ2VsbFByZXNldCA9ICdjbGFzc2ljJztcbiAgQElucHV0KCkgc3RhdHVzQ29sb3JBc1RleHQgPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd1Byb2JsZW1TdGF0aXN0aWNzRm9vdGVyID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNob3dEaXJ0Q29sdW1uID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNob3dTRUNvbHVtbiA9IGZhbHNlO1xuICBASW5wdXQoKSBlbXB0eVN0YXR1c1BsYWNlaG9sZGVyOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgdXNlckF2YXRhclBsYWNlbWVudDogUmFua2xpc3RVc2VyQXZhdGFyUGxhY2VtZW50ID0gJ3VzZXInO1xuICBASW5wdXQoKSBsYW5ndWFnZXM/OiByZWFkb25seSBzdHJpbmdbXTtcblxuICBAT3V0cHV0KCkgdXNlckNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxVc2VyQ2xpY2tQYXlsb2FkPigpO1xuICBAT3V0cHV0KCkgc29sdXRpb25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8U29sdXRpb25DbGlja1BheWxvYWQ+KCk7XG5cbiAgQENvbnRlbnRDaGlsZChTcmtTdGF0dXNDZWxsVGVtcGxhdGVEaXJlY3RpdmUpXG4gIHN0YXR1c0NlbGxUZW1wbGF0ZT86IFNya1N0YXR1c0NlbGxUZW1wbGF0ZURpcmVjdGl2ZTtcblxuICBAQ29udGVudENoaWxkKFNya1VzZXJDZWxsVGVtcGxhdGVEaXJlY3RpdmUpXG4gIHVzZXJDZWxsVGVtcGxhdGU/OiBTcmtVc2VyQ2VsbFRlbXBsYXRlRGlyZWN0aXZlO1xuXG4gIHJlYWRvbmx5IHN1cHBvcnRlZFZlcnNpb25zID0gc3JrU3VwcG9ydGVkVmVyc2lvbnM7XG4gIHJlYWRvbmx5IGZpcnN0Qmxvb2RTdGFyID0gJ1xcdTI2MDUnO1xuICByZWFkb25seSBzdGF0dXNTZXBhcmF0b3IgPSAnICc7XG4gIHJlYWRvbmx5IHByb2JsZW1TdGF0aXN0aWNzRm9vdGVyUm93cyA9IFtcbiAgICB7XG4gICAgICBrZXk6ICdhY2NlcHRlZCcsXG4gICAgICBsYWJlbDogJ0FjY2VwdGVkJyxcbiAgICAgIHRvb2x0aXA6ICdOdW1iZXIgb2YgcGFydGljaXBhbnRzIHdobyBzb2x2ZWQgdGhpcyBwcm9ibGVtJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ2F0dGVtcHRlZCcsXG4gICAgICBsYWJlbDogJ0F0dGVtcHRlZCcsXG4gICAgICB0b29sdGlwOiAnTnVtYmVyIG9mIHBhcnRpY2lwYW50cyB3aG8gYXR0ZW1wdGVkIHRoaXMgcHJvYmxlbScsXG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6ICdzdWJtaXR0ZWQnLFxuICAgICAgbGFiZWw6ICdTdWJtaXR0ZWQnLFxuICAgICAgdG9vbHRpcDogJ1RvdGFsIG51bWJlciBvZiB2YWxpZCBzdWJtaXNzaW9ucyBmb3IgdGhpcyBwcm9ibGVtJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ2RpcnQnLFxuICAgICAgbGFiZWw6ICdEaXJ0JyxcbiAgICAgIHRvb2x0aXA6ICdXcm9uZyBzdWJtaXNzaW9ucyBhbW9uZyBwYXJ0aWNpcGFudHMgd2hvIHNvbHZlZCB0aGlzIHByb2JsZW0nLFxuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAnc2UnLFxuICAgICAgbGFiZWw6ICdTRScsXG4gICAgICB0b29sdGlwOiAnQXZlcmFnZSBoYXJkbmVzcywgY2FsY3VsYXRlZCBhcyAocGFydGljaXBhbnRzIC0gYWNjZXB0ZWQpIC8gcGFydGljaXBhbnRzJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ2ZpcnN0QWNjZXB0ZWQnLFxuICAgICAgbGFiZWw6ICdGQiBhdCcsXG4gICAgICB0b29sdGlwOiAnRmlyc3QgQmxvb2QgYXQsIGFsc28ga25vd24gYXMgZmlyc3Qgc29sdmUgdGltZSwgaW4gbWludXRlcycsXG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6ICdsYXN0QWNjZXB0ZWQnLFxuICAgICAgbGFiZWw6ICdMQiBhdCcsXG4gICAgICB0b29sdGlwOiAnTGFzdCBCbG9vZCBhdCwgYWxzbyBrbm93biBhcyBsYXN0IHNvbHZlIHRpbWUsIGluIG1pbnV0ZXMnLFxuICAgIH0sXG4gIF07XG4gIHByaXZhdGUgcHJvYmxlbVN0YXRpc3RpY3NTb3VyY2U/OiBTdGF0aWNSYW5rbGlzdDtcbiAgcHJpdmF0ZSBwcm9ibGVtU3RhdGlzdGljc0NhY2hlPzogUHJvYmxlbVN0YXRpc3RpY3NGb290ZXJbXTtcblxuICBnZXQgcHJvYmxlbVN0YXRpc3RpY3MoKSB7XG4gICAgaWYgKCF0aGlzLnNob3dQcm9ibGVtU3RhdGlzdGljc0Zvb3RlciAmJiAhdGhpcy5zaG93U0VDb2x1bW4pIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJvYmxlbVN0YXRpc3RpY3NTb3VyY2UgIT09IHRoaXMuZGF0YSB8fCAhdGhpcy5wcm9ibGVtU3RhdGlzdGljc0NhY2hlKSB7XG4gICAgICB0aGlzLnByb2JsZW1TdGF0aXN0aWNzU291cmNlID0gdGhpcy5kYXRhO1xuICAgICAgdGhpcy5wcm9ibGVtU3RhdGlzdGljc0NhY2hlID0gY2FsY3VsYXRlUHJvYmxlbVN0YXRpc3RpY3NGb290ZXIodGhpcy5kYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucHJvYmxlbVN0YXRpc3RpY3NDYWNoZTtcbiAgfVxuXG4gIGlzU3VwcG9ydGVkVmVyc2lvbigpIHtcbiAgICByZXR1cm4gY2FuaXVzZSh0aGlzLmRhdGEudmVyc2lvbik7XG4gIH1cblxuICBzaG93VGltZUNvbHVtbigpIHtcbiAgICByZXR1cm4gc2hvdWxkU2hvd1RpbWVDb2x1bW4odGhpcy5kYXRhLnJvd3MpO1xuICB9XG5cbiAgc2hvd0F2YXRhckluT3JnYW5pemF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnNwbGl0T3JnYW5pemF0aW9uICYmIHRoaXMudXNlckF2YXRhclBsYWNlbWVudCA9PT0gJ29yZ2FuaXphdGlvbic7XG4gIH1cblxuICBsZWZ0Rm9vdGVyQ29sdW1uQ291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5zZXJpZXMubGVuZ3RoICsgMSArIDEgKyAodGhpcy5zaG93VGltZUNvbHVtbigpID8gMSA6IDApICsgKHRoaXMuc3BsaXRPcmdhbml6YXRpb24gPyAxIDogMCk7XG4gIH1cblxuICBnZXRSYW5rVmFsdWVzKHJvdzogU3RhdGljUmFua2xpc3RSb3cpOiBSYW5rVmFsdWVbXSB7XG4gICAgcmV0dXJuIHJvdy5yYW5rVmFsdWVzIHx8IHRoaXMuZGF0YS5zZXJpZXMubWFwKCgpID0+ICh7IHJhbms6IG51bGwsIHNlZ21lbnRJbmRleDogbnVsbCB9KSk7XG4gIH1cblxuICBnZXRSYW5rVGV4dChyYW5rVmFsdWU6IFJhbmtWYWx1ZSwgcm93OiBTdGF0aWNSYW5rbGlzdFJvdykge1xuICAgIHJldHVybiByYW5rVmFsdWUucmFuayA/IHJhbmtWYWx1ZS5yYW5rIDogcm93LnVzZXIub2ZmaWNpYWwgPT09IGZhbHNlID8gJ++8iicgOiAnJztcbiAgfVxuXG4gIHJlc29sdmVEaXNwbGF5VGV4dCh0ZXh0OiBQYXJhbWV0ZXJzPHR5cGVvZiByZXNvbHZlVGV4dD5bMF0pIHtcbiAgICByZXR1cm4gcmVzb2x2ZVRleHQodGV4dCwgdGhpcy5sYW5ndWFnZXMpO1xuICB9XG5cbiAgcmVzb2x2ZVNlcmllc0NvbHVtblRpdGxlKHNlcmllczogc3JrLlJhbmtTZXJpZXMsIGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBzZXJpZXNUaXRsZXMgPSB0aGlzLmNvbHVtblRpdGxlcz8uc2VyaWVzO1xuICAgIGlmICh0eXBlb2Ygc2VyaWVzVGl0bGVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gc2VyaWVzVGl0bGVzKHNlcmllcywgaW5kZXgpID8/IHNlcmllcy50aXRsZTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc2VyaWVzVGl0bGVzKSkge1xuICAgICAgcmV0dXJuIHNlcmllc1RpdGxlc1tpbmRleF0gPz8gc2VyaWVzLnRpdGxlO1xuICAgIH1cbiAgICByZXR1cm4gc2VyaWVzLnRpdGxlO1xuICB9XG5cbiAgcmVzb2x2ZUNvbHVtblRpdGxlKGtleTogRXhjbHVkZTxrZXlvZiBSYW5rbGlzdENvbHVtblRpdGxlcywgJ3Nlcmllcyc+LCBmYWxsYmFjazogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uVGl0bGVzPy5ba2V5XSA/PyBmYWxsYmFjaztcbiAgfVxuXG4gIHByb2JsZW1BbGlhcyhwcm9ibGVtOiBzcmsuUHJvYmxlbSwgcHJvYmxlbUluZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gcHJvYmxlbS5hbGlhcyB8fCBudW1iZXJUb0FscGhhYmV0KHByb2JsZW1JbmRleCk7XG4gIH1cblxuICBwcm9ibGVtU3RhdHNUaXRsZShzdGF0aXN0aWNzOiBzcmsuUHJvYmxlbVN0YXRpc3RpY3MpIHtcbiAgICBjb25zdCByYXRpbyA9IHN0YXRpc3RpY3Muc3VibWl0dGVkID8gKChzdGF0aXN0aWNzLmFjY2VwdGVkIC8gc3RhdGlzdGljcy5zdWJtaXR0ZWQpICogMTAwKS50b0ZpeGVkKDEpIDogMDtcbiAgICByZXR1cm4gYCR7c3RhdGlzdGljcy5hY2NlcHRlZH0gLyAke3N0YXRpc3RpY3Muc3VibWl0dGVkfSAoJHtyYXRpb30lKWA7XG4gIH1cblxuICBwcm9ibGVtSGVhZGVyQmFja2dyb3VuZEltYWdlKHByb2JsZW06IHNyay5Qcm9ibGVtLCBncmFkaWVudERpcmVjdGlvbiA9IDE4MCkge1xuICAgIHJldHVybiBnZXRQcm9ibGVtSGVhZGVyQmFja2dyb3VuZEltYWdlKHByb2JsZW0uc3R5bGUsIHRoaXMudGhlbWUsIGdyYWRpZW50RGlyZWN0aW9uKTtcbiAgfVxuXG4gIHJlc29sdmVkVXNlck1hcmtlcnModXNlcjogc3JrLlVzZXIpIHtcbiAgICByZXR1cm4gcmVzb2x2ZVVzZXJNYXJrZXJzKHVzZXIsIHRoaXMuZGF0YS5tYXJrZXJzKS5tYXAoKG1hcmtlcikgPT4gKHtcbiAgICAgIG1hcmtlcixcbiAgICAgIHByZXNlbnRhdGlvbjogZ2V0TWFya2VyUHJlc2VudGF0aW9uKG1hcmtlciwgdGhpcy50aGVtZSksXG4gICAgfSkpO1xuICB9XG5cbiAgZm9ybWF0QXNzZXRVcmwodXJsOiBzdHJpbmcsIGZpZWxkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gcmVzb2x2ZVNya0Fzc2V0VXJsKHVybCwgZmllbGQsIHRoaXMuZm9ybWF0U3JrQXNzZXRVcmwpO1xuICB9XG5cbiAgZm9ybWF0VGltZSh0aW1lOiBQYXJhbWV0ZXJzPHR5cGVvZiBmb3JtYXRUaW1lRHVyYXRpb24+WzBdKSB7XG4gICAgcmV0dXJuIGZvcm1hdFRpbWVEdXJhdGlvbih0aW1lLCAnbWluJywgTWF0aC5mbG9vcik7XG4gIH1cblxuICBjYWxjdWxhdGVEaXJ0UGVyY2VudGFnZShyb3c6IFN0YXRpY1JhbmtsaXN0Um93KSB7XG4gICAgcmV0dXJuIGNhbGN1bGF0ZURpcnRQZXJjZW50YWdlKHJvdyk7XG4gIH1cblxuICBjYWxjdWxhdGVTRVZhbHVlKHJvdzogU3RhdGljUmFua2xpc3RSb3csIHByb2JsZW1TdGF0aXN0aWNzOiBQcm9ibGVtU3RhdGlzdGljc0Zvb3RlcltdKSB7XG4gICAgcmV0dXJuIGNhbGN1bGF0ZVNFVmFsdWUocm93LCBwcm9ibGVtU3RhdGlzdGljcyk7XG4gIH1cblxuICBzdGF0dXNQcmVzZW50YXRpb24oc3RhdHVzOiBzcmsuUmFua1Byb2JsZW1TdGF0dXMpIHtcbiAgICByZXR1cm4gZ2V0UmFua1Byb2JsZW1TdGF0dXNDZWxsUHJlc2VudGF0aW9uKHN0YXR1cywgdGhpcy5kYXRhLCB0aGlzLnN0YXR1c0NlbGxQcmVzZXQpO1xuICB9XG5cbiAgaXNOdW1iZXIodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBudW1iZXIge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInO1xuICB9XG5cbiAgZ2V0U3RhdHVzU29sdXRpb25zKHN0YXR1czogc3JrLlJhbmtQcm9ibGVtU3RhdHVzKSB7XG4gICAgcmV0dXJuIFsuLi4oc3RhdHVzLnNvbHV0aW9ucyB8fCBbXSldLnJldmVyc2UoKTtcbiAgfVxuXG4gIHN0YXR1c0NlbGxDbGFzcyhzdGF0dXM6IHNyay5SYW5rUHJvYmxlbVN0YXR1cykge1xuICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBbJ3Nyay1wcmVzdC1zdGF0dXMtYmxvY2snLCAnc3JrLS10ZXh0LWNlbnRlcicsICdzcmstLW5vd3JhcCddO1xuICAgIGlmICh0aGlzLmlzU3RhdHVzQ2xpY2thYmxlKHN0YXR1cykpIHtcbiAgICAgIGNsYXNzTmFtZXMucHVzaCgnc3JrLS1jdXJzb3ItcG9pbnRlcicpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdGF0dXNDb2xvckFzVGV4dCkge1xuICAgICAgY2xhc3NOYW1lcy5wdXNoKCdzcmstcHJlc3Qtc3RhdHVzLWJsb2NrLWNvbG9yLXRleHQnKTtcbiAgICB9XG4gICAgaWYgKHN0YXR1cy5yZXN1bHQgPT09ICdGQicpIHtcbiAgICAgIGNsYXNzTmFtZXMucHVzaCgnc3JrLXByZXN0LXN0YXR1cy1ibG9jay1mYicpO1xuICAgIH0gZWxzZSBpZiAoc3RhdHVzLnJlc3VsdCA9PT0gJ0FDJykge1xuICAgICAgY2xhc3NOYW1lcy5wdXNoKCdzcmstcHJlc3Qtc3RhdHVzLWJsb2NrLWFjY2VwdGVkJyk7XG4gICAgfSBlbHNlIGlmIChzdGF0dXMucmVzdWx0ID09PSAnPycpIHtcbiAgICAgIGNsYXNzTmFtZXMucHVzaCgnc3JrLXByZXN0LXN0YXR1cy1ibG9jay1mcm96ZW4nKTtcbiAgICB9IGVsc2UgaWYgKHN0YXR1cy5yZXN1bHQgPT09ICdSSicpIHtcbiAgICAgIGNsYXNzTmFtZXMucHVzaCgnc3JrLXByZXN0LXN0YXR1cy1ibG9jay1mYWlsZWQnKTtcbiAgICB9XG4gICAgcmV0dXJuIGNsYXNzTmFtZXMuam9pbignICcpO1xuICB9XG5cbiAgaXNTdGF0dXNDbGlja2FibGUoc3RhdHVzOiBzcmsuUmFua1Byb2JsZW1TdGF0dXMpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTdGF0dXNTb2x1dGlvbnMoc3RhdHVzKS5sZW5ndGggPiAwO1xuICB9XG5cbiAgc3RhdHVzQ2VsbFJvbGUoc3RhdHVzOiBzcmsuUmFua1Byb2JsZW1TdGF0dXMpIHtcbiAgICByZXR1cm4gdGhpcy5pc1N0YXR1c0NsaWNrYWJsZShzdGF0dXMpID8gJ2J1dHRvbicgOiBudWxsO1xuICB9XG5cbiAgc3RhdHVzQ2VsbFRhYkluZGV4KHN0YXR1czogc3JrLlJhbmtQcm9ibGVtU3RhdHVzKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNTdGF0dXNDbGlja2FibGUoc3RhdHVzKSA/IDAgOiBudWxsO1xuICB9XG5cbiAgYnVpbGRVc2VyQ2VsbENvbnRleHQocm93OiBTdGF0aWNSYW5rbGlzdFJvdywgcm93SW5kZXg6IG51bWJlcik6IFVzZXJDZWxsVGVtcGxhdGVDb250ZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgJGltcGxpY2l0OiByb3cudXNlcixcbiAgICAgIHVzZXI6IHJvdy51c2VyLFxuICAgICAgcm93LFxuICAgICAgcm93SW5kZXgsXG4gICAgICByYW5rbGlzdDogdGhpcy5kYXRhLFxuICAgICAgbWFya2VyczogdGhpcy5kYXRhLm1hcmtlcnMsXG4gICAgICBoaWRlT3JnYW5pemF0aW9uOiB0aGlzLnNwbGl0T3JnYW5pemF0aW9uLFxuICAgICAgaGlkZUF2YXRhcjogdGhpcy5zaG93QXZhdGFySW5Pcmdhbml6YXRpb24oKSxcbiAgICAgIGxhbmd1YWdlczogdGhpcy5sYW5ndWFnZXMsXG4gICAgICBvbkNsaWNrOiAoZXZlbnQ/OiBNb3VzZUV2ZW50KSA9PiB0aGlzLmVtaXRVc2VyQ2xpY2soZXZlbnQsIHJvdywgcm93SW5kZXgpLFxuICAgIH07XG4gIH1cblxuICBidWlsZFN0YXR1c0NlbGxDb250ZXh0KFxuICAgIHJvdzogU3RhdGljUmFua2xpc3RSb3csXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBzdGF0dXM6IHNyay5SYW5rUHJvYmxlbVN0YXR1cyxcbiAgICBwcm9ibGVtSW5kZXg6IG51bWJlcixcbiAgKTogU3RhdHVzQ2VsbFRlbXBsYXRlQ29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRpbXBsaWNpdDogc3RhdHVzLFxuICAgICAgc3RhdHVzLFxuICAgICAgcHJvYmxlbTogdGhpcy5kYXRhLnByb2JsZW1zW3Byb2JsZW1JbmRleF0sXG4gICAgICBwcm9ibGVtSW5kZXgsXG4gICAgICB1c2VyOiByb3cudXNlcixcbiAgICAgIHJvdyxcbiAgICAgIHJvd0luZGV4LFxuICAgICAgcmFua2xpc3Q6IHRoaXMuZGF0YSxcbiAgICAgIHNvbHV0aW9uczogdGhpcy5nZXRTdGF0dXNTb2x1dGlvbnMoc3RhdHVzKSxcbiAgICAgIHN0YXR1c0NlbGxQcmVzZXQ6IHRoaXMuc3RhdHVzQ2VsbFByZXNldCxcbiAgICAgIHN0YXR1c0NvbG9yQXNUZXh0OiB0aGlzLnN0YXR1c0NvbG9yQXNUZXh0LFxuICAgICAgZW1wdHlTdGF0dXNQbGFjZWhvbGRlcjogdGhpcy5lbXB0eVN0YXR1c1BsYWNlaG9sZGVyLFxuICAgICAgbGFuZ3VhZ2VzOiB0aGlzLmxhbmd1YWdlcyxcbiAgICAgIG9uQ2xpY2s6IChldmVudD86IE1vdXNlRXZlbnQpID0+IHRoaXMuZW1pdFNvbHV0aW9uQ2xpY2soZXZlbnQsIHJvdywgcm93SW5kZXgsIHN0YXR1cywgcHJvYmxlbUluZGV4KSxcbiAgICB9O1xuICB9XG5cbiAgYWN0aXZhdGVVc2VyQ2VsbEZyb21LZXlib2FyZChldmVudDogRXZlbnQsIHJvdzogU3RhdGljUmFua2xpc3RSb3csIHJvd0luZGV4OiBudW1iZXIpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuZW1pdFVzZXJDbGljayh1bmRlZmluZWQsIHJvdywgcm93SW5kZXgpO1xuICB9XG5cbiAgYWN0aXZhdGVTdGF0dXNDZWxsRnJvbUtleWJvYXJkKFxuICAgIGV2ZW50OiBFdmVudCxcbiAgICByb3c6IFN0YXRpY1JhbmtsaXN0Um93LFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgc3RhdHVzOiBzcmsuUmFua1Byb2JsZW1TdGF0dXMsXG4gICAgcHJvYmxlbUluZGV4OiBudW1iZXIsXG4gICkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5lbWl0U29sdXRpb25DbGljayh1bmRlZmluZWQsIHJvdywgcm93SW5kZXgsIHN0YXR1cywgcHJvYmxlbUluZGV4KTtcbiAgfVxuXG4gIGVtaXRVc2VyQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQgfCB1bmRlZmluZWQsIHJvdzogU3RhdGljUmFua2xpc3RSb3csIHJvd0luZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGNhcHR1cmVNb2RhbFRyaWdnZXJQb2ludEZyb21Nb3VzZUV2ZW50KGV2ZW50LCB7XG4gICAgICAgIHNvdXJjZTogJ3VzZXItY2VsbCcsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICByb3dJbmRleCxcbiAgICAgICAgICB1c2VySWQ6IHJvdy51c2VyLmlkIHx8IG51bGwsXG4gICAgICAgICAgdXNlck5hbWU6IHRoaXMucmVzb2x2ZURpc3BsYXlUZXh0KHJvdy51c2VyLm5hbWUpLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMudXNlckNsaWNrLmVtaXQoe1xuICAgICAgdXNlcjogcm93LnVzZXIsXG4gICAgICByb3csXG4gICAgICByb3dJbmRleCxcbiAgICAgIHJhbmtsaXN0OiB0aGlzLmRhdGEsXG4gICAgfSk7XG4gIH1cblxuICBlbWl0U29sdXRpb25DbGljayhcbiAgICBldmVudDogTW91c2VFdmVudCB8IHVuZGVmaW5lZCxcbiAgICByb3c6IFN0YXRpY1JhbmtsaXN0Um93LFxuICAgIHJvd0luZGV4OiBudW1iZXIsXG4gICAgc3RhdHVzOiBzcmsuUmFua1Byb2JsZW1TdGF0dXMsXG4gICAgcHJvYmxlbUluZGV4OiBudW1iZXIsXG4gICkge1xuICAgIGNvbnN0IHNvbHV0aW9ucyA9IHRoaXMuZ2V0U3RhdHVzU29sdXRpb25zKHN0YXR1cyk7XG4gICAgaWYgKCFzb2x1dGlvbnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChldmVudCkge1xuICAgICAgY2FwdHVyZU1vZGFsVHJpZ2dlclBvaW50RnJvbU1vdXNlRXZlbnQoZXZlbnQsIHtcbiAgICAgICAgc291cmNlOiAnc3RhdHVzLWNlbGwnLFxuICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgcm93SW5kZXgsXG4gICAgICAgICAgcHJvYmxlbUluZGV4LFxuICAgICAgICAgIHByb2JsZW1BbGlhczogdGhpcy5kYXRhLnByb2JsZW1zW3Byb2JsZW1JbmRleF0/LmFsaWFzIHx8IG51bGwsXG4gICAgICAgICAgcHJvYmxlbVRpdGxlOiB0aGlzLmRhdGEucHJvYmxlbXNbcHJvYmxlbUluZGV4XSA/IHRoaXMucmVzb2x2ZURpc3BsYXlUZXh0KHRoaXMuZGF0YS5wcm9ibGVtc1twcm9ibGVtSW5kZXhdLnRpdGxlKSA6IG51bGwsXG4gICAgICAgICAgdXNlcklkOiByb3cudXNlci5pZCB8fCBudWxsLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuc29sdXRpb25DbGljay5lbWl0KHtcbiAgICAgIHVzZXI6IHJvdy51c2VyLFxuICAgICAgcm93LFxuICAgICAgcm93SW5kZXgsXG4gICAgICBwcm9ibGVtSW5kZXgsXG4gICAgICBwcm9ibGVtOiB0aGlzLmRhdGEucHJvYmxlbXNbcHJvYmxlbUluZGV4XSxcbiAgICAgIHN0YXR1cyxcbiAgICAgIHNvbHV0aW9ucyxcbiAgICAgIHJhbmtsaXN0OiB0aGlzLmRhdGEsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVTZXJpZXNTZWdtZW50KHJhbmtWYWx1ZTogUmFua1ZhbHVlLCBzZXJpZXM6IHNyay5SYW5rU2VyaWVzIHwgdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgaW5kZXggPSByYW5rVmFsdWUuc2VnbWVudEluZGV4IHx8IHJhbmtWYWx1ZS5zZWdtZW50SW5kZXggPT09IDAgPyByYW5rVmFsdWUuc2VnbWVudEluZGV4IDogLTE7XG4gICAgcmV0dXJuIChzZXJpZXM/LnNlZ21lbnRzIHx8IFtdKVtpbmRleF0gfHwge307XG4gIH1cblxuICBpc1Nlcmllc1NlZ21lbnRlZENvbHVtbihzZXJpZXM6IHNyay5SYW5rU2VyaWVzIHwgdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIChzZXJpZXM/LnNlZ21lbnRzIHx8IFtdKS5zb21lKChzZWdtZW50KSA9PiB0eXBlb2Ygc2VnbWVudC5zdHlsZSA9PT0gJ3N0cmluZycpO1xuICB9XG5cbiAgZ2V0U2VyaWVzU2VnbWVudENsYXNzKHJhbmtWYWx1ZTogUmFua1ZhbHVlLCBzZXJpZXM6IHNyay5SYW5rU2VyaWVzIHwgdW5kZWZpbmVkKSB7XG4gICAgY29uc3Qgc2VnbWVudFN0eWxlID0gdGhpcy5yZXNvbHZlU2VyaWVzU2VnbWVudChyYW5rVmFsdWUsIHNlcmllcykuc3R5bGU7XG4gICAgcmV0dXJuIHR5cGVvZiBzZWdtZW50U3R5bGUgPT09ICdzdHJpbmcnID8gYHNyay1wcmVzZXQtc2VyaWVzLXNlZ21lbnQtJHtzZWdtZW50U3R5bGV9YCA6ICcnO1xuICB9XG5cbiAgZ2V0U2VyaWVzU2VnbWVudFN0eWxlKHJhbmtWYWx1ZTogUmFua1ZhbHVlLCBzZXJpZXM6IHNyay5SYW5rU2VyaWVzIHwgdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgZW1wdHlDb2xvcjogVGhlbWVDb2xvciA9IHtcbiAgICAgIFtFbnVtVGhlbWUubGlnaHRdOiB1bmRlZmluZWQsXG4gICAgICBbRW51bVRoZW1lLmRhcmtdOiB1bmRlZmluZWQsXG4gICAgfTtcbiAgICBjb25zdCBzZWdtZW50U3R5bGUgPSB0aGlzLnJlc29sdmVTZXJpZXNTZWdtZW50KHJhbmtWYWx1ZSwgc2VyaWVzKS5zdHlsZTtcbiAgICBpZiAoIXNlZ21lbnRTdHlsZSB8fCB0eXBlb2Ygc2VnbWVudFN0eWxlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgICBjb25zdCBzdHlsZSA9IHJlc29sdmVTdHlsZShzZWdtZW50U3R5bGUpO1xuICAgIGNvbnN0IHRleHRDb2xvciA9IHN0eWxlLnRleHRDb2xvciB8fCBlbXB0eUNvbG9yO1xuICAgIGNvbnN0IGJhY2tncm91bmRDb2xvciA9IHN0eWxlLmJhY2tncm91bmRDb2xvciB8fCBlbXB0eUNvbG9yO1xuICAgIHJldHVybiB7XG4gICAgICBjb2xvcjogdGV4dENvbG9yW3RoaXMudGhlbWVdLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiBiYWNrZ3JvdW5kQ29sb3JbdGhpcy50aGVtZV0sXG4gICAgfTtcbiAgfVxuXG4gIGdldFByb2JsZW1TdGF0aXN0aWNzRm9vdGVyQ2VsbFByaW1hcnkoa2V5OiBzdHJpbmcsIHN0YXQ6IFByb2JsZW1TdGF0aXN0aWNzRm9vdGVyKSB7XG4gICAgc3dpdGNoIChrZXkpIHtcbiAgICAgIGNhc2UgJ2FjY2VwdGVkJzpcbiAgICAgICAgcmV0dXJuIHN0YXQuYWNjZXB0ZWQ7XG4gICAgICBjYXNlICdhdHRlbXB0ZWQnOlxuICAgICAgICByZXR1cm4gc3RhdC5hdHRlbXB0ZWQ7XG4gICAgICBjYXNlICdzdWJtaXR0ZWQnOlxuICAgICAgICByZXR1cm4gc3RhdC5zdWJtaXR0ZWQ7XG4gICAgICBjYXNlICdkaXJ0JzpcbiAgICAgICAgcmV0dXJuIHN0YXQuZGlydDtcbiAgICAgIGNhc2UgJ3NlJzpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFByb2JsZW1TdGF0aXN0aWNzQXZlcmFnZUhhcmRuZXNzKHN0YXQpO1xuICAgICAgY2FzZSAnZmlyc3RBY2NlcHRlZCc6XG4gICAgICAgIHJldHVybiBmb3JtYXRQcm9ibGVtU3RhdGlzdGljc0FjY2VwdGVkTWludXRlKHN0YXQuZmlyc3RBY2NlcHRlZFRpbWUpO1xuICAgICAgY2FzZSAnbGFzdEFjY2VwdGVkJzpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFByb2JsZW1TdGF0aXN0aWNzQWNjZXB0ZWRNaW51dGUoc3RhdC5sYXN0QWNjZXB0ZWRUaW1lKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICBnZXRQcm9ibGVtU3RhdGlzdGljc0Zvb3RlckNlbGxTZWNvbmRhcnkoa2V5OiBzdHJpbmcsIHN0YXQ6IFByb2JsZW1TdGF0aXN0aWNzRm9vdGVyKSB7XG4gICAgc3dpdGNoIChrZXkpIHtcbiAgICAgIGNhc2UgJ2FjY2VwdGVkJzpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFByb2JsZW1TdGF0aXN0aWNzUGVyY2VudChzdGF0LmFjY2VwdGVkLCBzdGF0LnBhcnRpY2lwYW50Q291bnQpO1xuICAgICAgY2FzZSAnYXR0ZW1wdGVkJzpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFByb2JsZW1TdGF0aXN0aWNzUGVyY2VudChzdGF0LmF0dGVtcHRlZCwgc3RhdC5wYXJ0aWNpcGFudENvdW50KTtcbiAgICAgIGNhc2UgJ2RpcnQnOlxuICAgICAgICByZXR1cm4gZm9ybWF0UHJvYmxlbVN0YXRpc3RpY3NQZXJjZW50KHN0YXQuZGlydCwgc3RhdC5kaXJ0U3VibWl0dGVkKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
1130
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFua2xpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9yYW5rbGlzdC9yYW5rbGlzdC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsU0FBUyxFQUNULGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsWUFBWSxFQUNaLFdBQVcsRUFDWCxrQkFBa0IsR0FDbkIsTUFBTSxpQ0FBaUMsQ0FBQztBQUV6QyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLGdDQUFnQyxFQUNoQyxnQkFBZ0IsRUFDaEIsT0FBTyxFQUNQLHFDQUFxQyxFQUNyQyxzQ0FBc0MsRUFDdEMsOEJBQThCLEVBQzlCLHFCQUFxQixFQUNyQix1Q0FBdUMsRUFDdkMsaUNBQWlDLEVBQ2pDLG9DQUFvQyxFQUNwQyxrQkFBa0IsRUFDbEIsb0JBQW9CLEVBQ3BCLG9CQUFvQixHQUNyQixNQUFNLG1EQUFtRCxDQUFDO0FBTzNELE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBU3JGLE9BQU8sRUFDTCxxQ0FBcUMsR0FFdEMsTUFBTSwwQ0FBMEMsQ0FBQztBQUNsRCxPQUFPLEVBQ0wsOEJBQThCLEdBRS9CLE1BQU0sa0NBQWtDLENBQUM7QUFDMUMsT0FBTyxFQUNMLDRCQUE0QixHQUU3QixNQUFNLGdDQUFnQyxDQUFDOzs7QUFvV3hDLE1BQU0sT0FBTyxpQkFBaUI7SUFDRCxJQUFJLENBQWtCO0lBQ3hDLEtBQUssR0FBYyxTQUFTLENBQUMsS0FBSyxDQUFDO0lBQ25DLFdBQVcsR0FBRyxLQUFLLENBQUM7SUFDcEIsY0FBYyxHQUFH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WUFBWTtzQkFBckIsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUdQLHlCQUF5QjtzQkFEeEIsWUFBWTt1QkFBQyxxQ0FBcUM7Z0JBSW5ELGtCQUFrQjtzQkFEakIsWUFBWTt1QkFBQyw4QkFBOEI7Z0JBSTVDLGdCQUFnQjtzQkFEZixZQUFZO3VCQUFDLDRCQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlICogYXMgc3JrIGZyb20gJ0BhbGdvdXgvc3RhbmRhcmQtcmFua2xpc3QnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEVudW1UaGVtZSxcbiAgZm9ybWF0VGltZUR1cmF0aW9uLFxuICBudW1iZXJUb0FscGhhYmV0LFxuICByZXNvbHZlU3R5bGUsXG4gIHJlc29sdmVUZXh0LFxuICByZXNvbHZlVXNlck1hcmtlcnMsXG59IGZyb20gJ0BhbGdvdXgvc3RhbmRhcmQtcmFua2xpc3QtdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBUaGVtZUNvbG9yIH0gZnJvbSAnQGFsZ291eC9zdGFuZGFyZC1yYW5rbGlzdC11dGlscyc7XG5pbXBvcnQge1xuICBjYWxjdWxhdGVEaXJ0UGVyY2VudGFnZSxcbiAgY2FsY3VsYXRlUHJvYmxlbVN0YXRpc3RpY3NGb290ZXIsXG4gIGNhbGN1bGF0ZVNFVmFsdWUsXG4gIGNhbml1c2UsXG4gIGZvcm1hdFByb2JsZW1TdGF0aXN0aWNzQWNjZXB0ZWRNaW51dGUsXG4gIGZvcm1hdFByb2JsZW1TdGF0aXN0aWNzQXZlcmFnZUhhcmRuZXNzLFxuICBmb3JtYXRQcm9ibGVtU3RhdGlzdGljc1BlcmNlbnQsXG4gIGdldE1hcmtlclByZXNlbnRhdGlvbixcbiAgZ2V0UHJvYmxlbUhlYWRlckJhY2tncm91bmRJbWFnZUlmU3R5bGVkLFxuICBnZXRSYW5rUHJvYmxlbVN0YXR1c0NlbGxDbGFzc05hbWUsXG4gIGdldFJhbmtQcm9ibGVtU3RhdHVzQ2VsbFByZXNlbnRhdGlvbixcbiAgcmVzb2x2ZVNya0Fzc2V0VXJsLFxuICBzaG91bGRTaG93VGltZUNvbHVtbixcbiAgc3JrU3VwcG9ydGVkVmVyc2lvbnMsXG59IGZyb20gJ0BhbGdvdXgvc3RhbmRhcmQtcmFua2xpc3QtcmVuZGVyZXItY29tcG9uZW50LWNvcmUnO1xuaW1wb3J0IHR5cGUge1xuICBQcm9ibGVtU3RhdGlzdGljc0Zvb3RlcixcbiAgUmFua2xpc3RDb2x1bW5UaXRsZXMsXG4gIFJhbmtsaXN0U3RhdHVzQ2VsbFByZXNldCxcbiAgUmFua2xpc3RVc2VyQXZhdGFyUGxhY2VtZW50LFxufSBmcm9tICdAYWxnb3V4L3N0YW5kYXJkLXJhbmtsaXN0LXJlbmRlcmVyLWNvbXBvbmVudC1jb3JlJztcbmltcG9ydCB7IGNhcHR1cmVNb2RhbFRyaWdnZXJQb2ludEZyb21Nb3VzZUV2ZW50IH0gZnJvbSAnLi4vbW9kYWwvbW9kYWwtaW50ZXJhY3Rpb25zJztcbmltcG9ydCB0eXBlIHtcbiAgUHJvYmxlbUNsaWNrUGF5bG9hZCxcbiAgUmFua1ZhbHVlLFxuICBTb2x1dGlvbkNsaWNrUGF5bG9hZCxcbiAgU3RhdGljUmFua2xpc3QsXG4gIFN0YXRpY1JhbmtsaXN0Um93LFxuICBVc2VyQ2xpY2tQYXlsb2FkLFxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge1xuICBTcmtQcm9ibGVtSGVhZGVyQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLFxuICB0eXBlIFByb2JsZW1IZWFkZXJDZWxsVGVtcGxhdGVDb250ZXh0LFxufSBmcm9tICcuL3Byb2JsZW0taGVhZGVyLWNlbGwtdGVtcGxhdGUuZGlyZWN0aXZlJztcbmltcG9ydCB7XG4gIFNya1N0YXR1c0NlbGxUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgdHlwZSBTdGF0dXNDZWxsVGVtcGxhdGVDb250ZXh0LFxufSBmcm9tICcuL3N0YXR1cy1jZWxsLXRlbXBsYXRlLmRpcmVjdGl2ZSc7XG5pbXBvcnQge1xuICBTcmtVc2VyQ2VsbFRlbXBsYXRlRGlyZWN0aXZlLFxuICB0eXBlIFVzZXJDZWxsVGVtcGxhdGVDb250ZXh0LFxufSBmcm9tICcuL3VzZXItY2VsbC10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzcmstcmFua2xpc3QnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiAqbmdJZj1cImRhdGEudHlwZSAhPT0gJ2dlbmVyYWwnOyBlbHNlIHZlcnNpb25TdGF0ZVwiPlxuICAgICAgc3JrIHR5cGUgXCJ7eyBkYXRhLnR5cGUgfX1cIiBpcyBub3Qgc3VwcG9ydGVkXG4gICAgPC9kaXY+XG5cbiAgICA8bmctdGVtcGxhdGUgI3ZlcnNpb25TdGF0ZT5cbiAgICAgIDxkaXYgKm5nSWY9XCIhaXNTdXBwb3J0ZWRWZXJzaW9uKCk7IGVsc2UgcmFua2xpc3RUYWJsZVwiPlxuICAgICAgICBzcmsgdmVyc2lvbiBcInt7IGRhdGEudmVyc2lvbiB9fVwiIGlzIG5vdCBzdXBwb3J0ZWQgKGN1cnJlbnQgc3VwcG9ydGVkOiB7eyBzdXBwb3J0ZWRWZXJzaW9ucyB9fSlcbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8bmctdGVtcGxhdGUgI3JhbmtsaXN0VGFibGU+XG4gICAgICA8ZGl2IGNsYXNzPVwic3JrLWNvbW1vbi10YWJsZSBzcmstbWFpblwiPlxuICAgICAgICA8dGFibGVcbiAgICAgICAgICBbY2xhc3Muc3JrLXRhYmxlLXJvdy1ib3JkZXJlZF09XCJyb3dCb3JkZXJlZFwiXG4gICAgICAgICAgW2NsYXNzLnNyay10YWJsZS1jb2x1bW4tYm9yZGVyZWRdPVwiY29sdW1uQm9yZGVyZWRcIlxuICAgICAgICAgIFtjbGFzcy5zcmstdGFibGUtcm93LXN0cmlwZWRdPVwicm93U3RyaXBlZFwiXG4gICAgICAgID5cbiAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgIDx0aFxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzZXJpZXNJdGVtIG9mIGRhdGEuc2VyaWVzOyBsZXQgc2VyaWVzSW5kZXggPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzcmstc2VyaWVzLWhlYWRlciBzcmstLXRleHQtcmlnaHQgc3JrLS1ub3dyYXBcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5zcmstc2VyaWVzLXNlZ21lbnRlZC1jb2x1bW5dPVwiaXNTZXJpZXNTZWdtZW50ZWRDb2x1bW4oc2VyaWVzSXRlbSlcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgcmVzb2x2ZVNlcmllc0NvbHVtblRpdGxlKHNlcmllc0l0ZW0sIHNlcmllc0luZGV4KSB9fVxuICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgICAqbmdJZj1cInNwbGl0T3JnYW5pemF0aW9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNyay1vcmdhbml6YXRpb24taGVhZGVyIHNyay0tdGV4dC1sZWZ0IHNyay0tbm93cmFwXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IHJlc29sdmVDb2x1bW5UaXRsZSgnb3JnYW5pemF0aW9uJywgJ09yZ2FuaXphdGlvbicpIH19XG4gICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cInNyay0tdGV4dC1sZWZ0IHNyay0tbm93cmFwXCI+e3sgcmVzb2x2ZUNvbHVtblRpdGxlKCd1c2VyJywgJ05hbWUnKSB9fTwvdGg+XG4gICAgICAgICAgICAgIDx0aCBjbGFzcz1cInNyay0tdGV4dC1yaWdodCBzcmstLW5vd3JhcFwiPnt7IHJlc29sdmVDb2x1bW5UaXRsZSgnc2NvcmUnLCAnU2NvcmUnKSB9fTwvdGg+XG4gICAgICAgICAgICAgIDx0aCAqbmdJZj1cInNob3dUaW1lQ29sdW1uKClcIiBjbGFzcz1cInNyay0tdGV4dC1yaWdodCBzcmstLW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgIHt7IHJlc29sdmVDb2x1bW5UaXRsZSgndGltZScsICdUaW1lJykgfX1cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBwcm9ibGVtIG9mIGRhdGEucHJvYmxlbXM7IGxldCBwcm9ibGVtSW5kZXggPSBpbmRleFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicHJvYmxlbUhlYWRlckNlbGxUZW1wbGF0ZTsgZWxzZSBkZWZhdWx0UHJvYmxlbUhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJwcm9ibGVtSGVhZGVyQ2VsbFRlbXBsYXRlLnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImJ1aWxkUHJvYmxlbUhlYWRlckNlbGxDb250ZXh0KHByb2JsZW0sIHByb2JsZW1JbmRleClcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRQcm9ibGVtSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3JrLS1ub3dyYXAgc3JrLXByb2JsZW0taGVhZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnNyay0tY3Vyc29yLXBvaW50ZXJdPVwiaGFzUHJvYmxlbUNsaWNrTGlzdGVuZXIoKVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLnJvbGVdPVwicHJvYmxlbUhlYWRlclJvbGUoKVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cInByb2JsZW1IZWFkZXJUYWJJbmRleCgpXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtaW1hZ2VdPVwicHJvYmxlbUhlYWRlckJhY2tncm91bmRJbWFnZShwcm9ibGVtKVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJlbWl0UHJvYmxlbUNsaWNrKCRldmVudCwgcHJvYmxlbSwgcHJvYmxlbUluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImFjdGl2YXRlUHJvYmxlbUhlYWRlckZyb21LZXlib2FyZCgkZXZlbnQsIHByb2JsZW0sIHByb2JsZW1JbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJhY3RpdmF0ZVByb2JsZW1IZWFkZXJGcm9tS2V5Ym9hcmQoJGV2ZW50LCBwcm9ibGVtLCBwcm9ibGVtSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInByb2JsZW0ubGluayAmJiAhaGFzUHJvYmxlbUNsaWNrTGlzdGVuZXIoKTsgZWxzZSB1bmxpbmtlZFByb2JsZW1IZWFkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cInByb2JsZW0ubGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICByZWw9XCJub29wZW5lciBub3JlZmVycmVyXCJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImNvbG9yOiB1bnNldFwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyay0tZGlzcGxheS1ibG9ja1wiPnt7IHByb2JsZW1BbGlhcyhwcm9ibGVtLCBwcm9ibGVtSW5kZXgpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInByb2JsZW0uc3RhdGlzdGljc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNyay0tZGlzcGxheS1ibG9jayBzcmstcHJvYmxlbS1zdGF0c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwicHJvYmxlbVN0YXRzVGl0bGUocHJvYmxlbS5zdGF0aXN0aWNzKVwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgcHJvYmxlbS5zdGF0aXN0aWNzLmFjY2VwdGVkIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdW5saW5rZWRQcm9ibGVtSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3JrLS1kaXNwbGF5LWJsb2NrXCI+e3sgcHJvYmxlbUFsaWFzKHByb2JsZW0sIHByb2JsZW1JbmRleCkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicHJvYmxlbS5zdGF0aXN0aWNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3JrLS1kaXNwbGF5LWJsb2NrIHNyay1wcm9ibGVtLXN0YXRzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJwcm9ibGVtU3RhdHNUaXRsZShwcm9ibGVtLnN0YXRpc3RpY3MpXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBwcm9ibGVtLnN0YXRpc3RpY3MuYWNjZXB0ZWQgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8dGggKm5nSWY9XCJzaG93RGlydENvbHVtblwiIGNsYXNzPVwic3JrLWRpcnQtaGVhZGVyIHNyay0tdGV4dC1yaWdodCBzcmstLW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgIHt7IHJlc29sdmVDb2x1bW5UaXRsZSgnZGlydCcsICdEaXJ0JykgfX1cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgPHRoICpuZ0lmPVwic2hvd1NFQ29sdW1uXCIgY2xhc3M9XCJzcmstc2UtaGVhZGVyIHNyay0tdGV4dC1yaWdodCBzcmstLW5vd3JhcFwiPlxuICAgICAgICAgICAgICAgIHt7IHJlc29sdmVDb2x1bW5UaXRsZSgnc2UnLCAnU0UnKSB9fVxuICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgcm93IG9mIGRhdGEucm93czsgbGV0IHJvd0luZGV4ID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHJhbmtWYWx1ZSBvZiBnZXRSYW5rVmFsdWVzKHJvdyk7IGxldCBzZXJpZXNJbmRleCA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNyay0tdGV4dC1yaWdodCBzcmstLW5vd3JhcFwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0U2VyaWVzU2VnbWVudENsYXNzKHJhbmtWYWx1ZSwgZGF0YS5zZXJpZXNbc2VyaWVzSW5kZXhdKVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLnNyay1zZXJpZXMtc2VnbWVudGVkLWNvbHVtbl09XCJpc1Nlcmllc1NlZ21lbnRlZENvbHVtbihkYXRhLnNlcmllc1tzZXJpZXNJbmRleF0pXCJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJnZXRTZXJpZXNTZWdtZW50U3R5bGUocmFua1ZhbHVlLCBkYXRhLnNlcmllc1tzZXJpZXNJbmRleF0pXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGdldFJhbmtUZXh0KHJhbmtWYWx1ZSwgcm93KSB9fVxuICAgICAgICAgICAgICA8L3RkPlxuXG4gICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgICpuZ0lmPVwic3BsaXRPcmdhbml6YXRpb25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3JrLW9yZ2FuaXphdGlvbi1jZWxsIHNyay0tdGV4dC1sZWZ0IHNyay0tbm93cmFwXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Muc3JrLW9yZ2FuaXphdGlvbi1jZWxsLWF2YXRhcl09XCJzaG93QXZhdGFySW5Pcmdhbml6YXRpb24oKSAmJiAhIXJvdy51c2VyLmF2YXRhclwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3JrLW9yZ2FuaXphdGlvbi1jZWxsLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93QXZhdGFySW5Pcmdhbml6YXRpb24oKSAmJiByb3cudXNlci5hdmF0YXJcIiBjbGFzcz1cInNyay11c2VyLWF2YXRhclwiPlxuICAgICAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJmb3JtYXRBc3NldFVybChyb3cudXNlci5hdmF0YXIsICd1c2VyLmF2YXRhcicpXCJcbiAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJVc2VyIEF2YXRhclwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3JrLW9yZ2FuaXphdGlvbi1uYW1lLXRleHRcIlxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwicm93LnVzZXIub3JnYW5pemF0aW9uID8gcmVzb2x2ZURpc3BsYXlUZXh0KHJvdy51c2VyLm9yZ2FuaXphdGlvbikgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgIFt0ZXh0Q29udGVudF09XCJyb3cudXNlci5vcmdhbml6YXRpb24gPyByZXNvbHZlRGlzcGxheVRleHQocm93LnVzZXIub3JnYW5pemF0aW9uKSA6ICcnXCJcbiAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvdGQ+XG5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInVzZXJDZWxsVGVtcGxhdGU7IGVsc2UgZGVmYXVsdFVzZXJDZWxsXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidXNlckNlbGxUZW1wbGF0ZS50ZW1wbGF0ZVJlZlwiXG4gICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiYnVpbGRVc2VyQ2VsbENvbnRleHQocm93LCByb3dJbmRleClcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRVc2VyQ2VsbD5cbiAgICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3JrLS10ZXh0LWxlZnQgc3JrLS1ub3dyYXAgc3JrLXVzZXItY2VsbCBzcmstLWN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJlbWl0VXNlckNsaWNrKCRldmVudCwgcm93LCByb3dJbmRleClcIlxuICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiYWN0aXZhdGVVc2VyQ2VsbEZyb21LZXlib2FyZCgkZXZlbnQsIHJvdywgcm93SW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgIChrZXlkb3duLnNwYWNlKT1cImFjdGl2YXRlVXNlckNlbGxGcm9tS2V5Ym9hcmQoJGV2ZW50LCByb3csIHJvd0luZGV4KVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNyay11c2VyLWNlbGwtY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicm93LnVzZXIuYXZhdGFyICYmICFzaG93QXZhdGFySW5Pcmdhbml6YXRpb24oKVwiIGNsYXNzPVwic3JrLXVzZXItYXZhdGFyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJmb3JtYXRBc3NldFVybChyb3cudXNlci5hdmF0YXIsICd1c2VyLmF2YXRhcicpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlVzZXIgQXZhdGFyXCJcbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNyay11c2VyLWJvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3JrLXVzZXItbmFtZS1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3JrLXVzZXItbmFtZS10ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cInJlc29sdmVEaXNwbGF5VGV4dChyb3cudXNlci5uYW1lKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHJlc29sdmVEaXNwbGF5VGV4dChyb3cudXNlci5uYW1lKSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzcmstbWFya2VyLWRvdC1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBtYXJrZXIgb2YgcmVzb2x2ZWRVc2VyTWFya2Vycyhyb3cudXNlcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3JrLW1hcmtlciBzcmstbWFya2VyLWRvdCBzcmstLWMtdG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwibWFya2VyLnByZXNlbnRhdGlvbi5jbGFzc05hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIm1hcmtlci5wcmVzZW50YXRpb24uc3R5bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtdG9vbHRpcF09XCJyZXNvbHZlRGlzcGxheVRleHQobWFya2VyLm1hcmtlci5sYWJlbClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInJvdy51c2VyLm9yZ2FuaXphdGlvbiAmJiAhc3BsaXRPcmdhbml6YXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzcmstdXNlci1zZWNvbmRhcnktdGV4dCBzcmstLXRleHQtZWxsaXBzaXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IHJlc29sdmVEaXNwbGF5VGV4dChyb3cudXNlci5vcmdhbml6YXRpb24pIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwic3JrLS10ZXh0LXJpZ2h0IHNyay0tbm93cmFwXCI+e3sgcm93LnNjb3JlLnZhbHVlIH19PC90ZD5cbiAgICAgICAgICAgICAgPHRkICpuZ0lmPVwic2hvd1RpbWVDb2x1bW4oKVwiIGNsYXNzPVwic3JrLS10ZXh0LXJpZ2h0IHNyay0tbm93cmFwXCI+XG4gICAgICAgICAgICAgICAge3sgcm93LnNjb3JlLnRpbWUgPyBmb3JtYXRUaW1lKHJvdy5zY29yZS50aW1lKSA6ICctJyB9fVxuICAgICAgICAgICAgICA8L3RkPlxuXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHN0YXR1cyBvZiByb3cuc3RhdHVzZXM7IGxldCBwcm9ibGVtSW5kZXggPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdGF0dXNDZWxsVGVtcGxhdGU7IGVsc2UgZGVmYXVsdFN0YXR1c0NlbGxcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwic3RhdHVzQ2VsbFRlbXBsYXRlLnRlbXBsYXRlUmVmXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImJ1aWxkU3RhdHVzQ2VsbENvbnRleHQocm93LCByb3dJbmRleCwgc3RhdHVzLCBwcm9ibGVtSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0U3RhdHVzQ2VsbD5cbiAgICAgICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInN0YXR1cy5yZXN1bHQgPT09ICdGQicgfHwgc3RhdHVzLnJlc3VsdCA9PT0gJ0FDJzsgZWxzZSBmYWlsZWRPckZyb3plblN0YXR1c1wiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInN0YXR1c0NlbGxDbGFzcyhzdGF0dXMpXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIucm9sZV09XCJzdGF0dXNDZWxsUm9sZShzdGF0dXMpXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwic3RhdHVzQ2VsbFRhYkluZGV4KHN0YXR1cylcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZW1pdFNvbHV0aW9uQ2xpY2soJGV2ZW50LCByb3csIHJvd0luZGV4LCBzdGF0dXMsIHByb2JsZW1JbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJhY3RpdmF0ZVN0YXR1c0NlbGxGcm9tS2V5Ym9hcmQoJGV2ZW50LCByb3csIHJvd0luZGV4LCBzdGF0dXMsIHByb2JsZW1JbmRleClcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJhY3RpdmF0ZVN0YXR1c0NlbGxGcm9tS2V5Ym9hcmQoJGV2ZW50LCByb3csIHJvd0luZGV4LCBzdGF0dXMsIHByb2JsZW1JbmRleClcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic3RhdHVzQ29sb3JBc1RleHQgJiYgc3RhdHVzLnJlc3VsdCA9PT0gJ0ZCJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzcmstcHJlc3Qtc3RhdHVzLWJsb2NrLWZiLXN0YXJcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0Q29udGVudF09XCJmaXJzdEJsb29kU3RhclwiXG4gICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdGF0dXNQcmVzZW50YXRpb24oc3RhdHVzKSBhcyBwcmVzZW50YXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNOdW1iZXIocHJlc2VudGF0aW9uLnNjb3JlKTsgZWxzZSBzdGF0dXNUZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyay1wcmVzdC1zdGF0dXMtYmxvY2stc2NvcmVcIj57eyBwcmVzZW50YXRpb24uc2NvcmUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicHJlc2VudGF0aW9uLnNjb3JlRGV0YWlscyAhPT0gdW5kZWZpbmVkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFt0ZXh0Q29udGVudF09XCJzdGF0dXNTZXBhcmF0b3JcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzcmstcHJlc3Qtc3RhdHVzLWJsb2NrLXNjb3JlLWRldGFpbHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0Q29udGVudF09XCJwcmVzZW50YXRpb24uc2NvcmVEZXRhaWxzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc3RhdHVzVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwcmVzZW50YXRpb24uc2Vjb25kYXJ5ICE9PSB1bmRlZmluZWQ7IGVsc2Ugc2luZ2xlU3RhdHVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3JrLXByZXN0LXN0YXR1cy1ibG9jay1wcmltYXJ5XCI+e3sgcHJlc2VudGF0aW9uLnByaW1hcnkgfHwgJycgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFt0ZXh0Q29udGVudF09XCJzdGF0dXNTZXBhcmF0b3JcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3JrLXByZXN0LXN0YXR1cy1ibG9jay1zZWNvbmRhcnlcIj57eyBwcmVzZW50YXRpb24uc2Vjb25kYXJ5IH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3NpbmdsZVN0YXR1cz57eyBwcmVzZW50YXRpb24ucHJpbWFyeSB9fTwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNmYWlsZWRPckZyb3plblN0YXR1cz5cbiAgICAgICAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzdGF0dXMucmVzdWx0ID09PSAnPycgfHwgc3RhdHVzLnJlc3VsdCA9PT0gJ1JKJzsgZWxzZSBlbXB0eVN0YXR1c1wiXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic3RhdHVzQ2VsbENsYXNzKHN0YXR1cylcIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnJvbGVdPVwic3RhdHVzQ2VsbFJvbGUoc3RhdHVzKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwic3RhdHVzQ2VsbFRhYkluZGV4KHN0YXR1cylcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJlbWl0U29sdXRpb25DbGljaygkZXZlbnQsIHJvdywgcm93SW5kZXgsIHN0YXR1cywgcHJvYmxlbUluZGV4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiYWN0aXZhdGVTdGF0dXNDZWxsRnJvbUtleWJvYXJkKCRldmVudCwgcm93LCByb3dJbmRleCwgc3RhdHVzLCBwcm9ibGVtSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5zcGFjZSk9XCJhY3RpdmF0ZVN0YXR1c0NlbGxGcm9tS2V5Ym9hcmQoJGV2ZW50LCByb3csIHJvd0luZGV4LCBzdGF0dXMsIHByb2JsZW1JbmRleClcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0YXR1c1ByZXNlbnRhdGlvbihzdGF0dXMpIGFzIHByZXNlbnRhdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTnVtYmVyKHByZXNlbnRhdGlvbi5zY29yZSk7IGVsc2UgZmFpbGVkU3RhdHVzVGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyay1wcmVzdC1zdGF0dXMtYmxvY2stc2NvcmVcIj57eyBwcmVzZW50YXRpb24uc2NvcmUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwcmVzZW50YXRpb24uc2NvcmVEZXRhaWxzICE9PSB1bmRlZmluZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbdGV4dENvbnRlbnRdPVwic3RhdHVzU2VwYXJhdG9yXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNyay1wcmVzdC1zdGF0dXMtYmxvY2stc2NvcmUtZGV0YWlsc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dENvbnRlbnRdPVwicHJlc2VudGF0aW9uLnNjb3JlRGV0YWlsc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZmFpbGVkU3RhdHVzVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInByZXNlbnRhdGlvbi5zZWNvbmRhcnkgIT09IHVuZGVmaW5lZDsgZWxzZSBzaW5nbGVTdGF0dXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyay1wcmVzdC1zdGF0dXMtYmxvY2stcHJpbWFyeVwiPnt7IHByZXNlbnRhdGlvbi5wcmltYXJ5IHx8ICcnIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFt0ZXh0Q29udGVudF09XCJzdGF0dXNTZXBhcmF0b3JcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzcmstcHJlc3Qtc3RhdHVzLWJsb2NrLXNlY29uZGFyeVwiPnt7IHByZXNlbnRhdGlvbi5zZWNvbmRhcnkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3NpbmdsZVN0YXR1cz57eyBwcmVzZW50YXRpb24ucHJpbWFyeSB9fTwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHlTdGF0dXM+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInNyay1zdGF0dXMtcGxhY2Vob2xkZXItY2VsbCBzcmstLXRleHQtY2VudGVyIHNyay0tbm93cmFwXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgZW1wdHlTdGF0dXNQbGFjZWhvbGRlciB9fVxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICA8dGQgKm5nSWY9XCJzaG93RGlydENvbHVtblwiIGNsYXNzPVwic3JrLWRpcnQtY2VsbCBzcmstLXRleHQtcmlnaHQgc3JrLS1ub3dyYXBcIj5cbiAgICAgICAgICAgICAgICB7eyBjYWxjdWxhdGVEaXJ0UGVyY2VudGFnZShyb3cpIH19XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZCAqbmdJZj1cInNob3dTRUNvbHVtblwiIGNsYXNzPVwic3JrLXNlLWNlbGwgc3JrLS10ZXh0LXJpZ2h0IHNyay0tbm93cmFwXCI+XG4gICAgICAgICAgICAgICAge3sgY2FsY3VsYXRlU0VWYWx1ZShyb3csIHByb2JsZW1TdGF0aXN0aWNzKSB9fVxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgIDx0Zm9vdCAqbmdJZj1cInNob3dQcm9ibGVtU3RhdGlzdGljc0Zvb3RlclwiPlxuICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBmb290ZXJSb3cgb2YgcHJvYmxlbVN0YXRpc3RpY3NGb290ZXJSb3dzXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzcmstcHJvYmxlbS1zdGF0aXN0aWNzLWZvb3Rlci1yb3dcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNyay1wcm9ibGVtLXN0YXRpc3RpY3MtZm9vdGVyLWxhYmVscyBzcmstLXRleHQtcmlnaHQgc3JrLS1ub3dyYXBcIlxuICAgICAgICAgICAgICAgIFthdHRyLmNvbHNwYW5dPVwibGVmdEZvb3RlckNvbHVtbkNvdW50KClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwic3JrLXByb2JsZW0tc3RhdGlzdGljcy1mb290ZXItbGFiZWwgc3JrLS1jLXRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS10b29sdGlwXT1cImZvb3RlclJvdy50b29sdGlwXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyBmb290ZXJSb3cubGFiZWwgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzdGF0IG9mIHByb2JsZW1TdGF0aXN0aWNzXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNyay1wcm9ibGVtLXN0YXRpc3RpY3MtZm9vdGVyLWNlbGwgc3JrLS10ZXh0LWNlbnRlciBzcmstLW5vd3JhcFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyay1wcm9ibGVtLXN0YXRpc3RpY3MtZm9vdGVyLXByaW1hcnlcIj5cbiAgICAgICAgICAgICAgICAgIHt7IGdldFByb2JsZW1TdGF0aXN0aWNzRm9vdGVyQ2VsbFByaW1hcnkoZm9vdGVyUm93LmtleSwgc3RhdCkgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImdldFByb2JsZW1TdGF0aXN0aWNzRm9vdGVyQ2VsbFNlY29uZGFyeShmb290ZXJSb3cua2V5LCBzdGF0KSAhPT0gdW5kZWZpbmVkXCI+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj4gPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzcmstcHJvYmxlbS1zdGF0aXN0aWNzLWZvb3Rlci1zZWNvbmRhcnlcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgZ2V0UHJvYmxlbVN0YXRpc3RpY3NGb290ZXJDZWxsU2Vjb25kYXJ5KGZvb3RlclJvdy5rZXksIHN0YXQpIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd0RpcnRDb2x1bW5cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3JrLXByb2JsZW0tc3RhdGlzdGljcy1mb290ZXItY2VsbCBzcmstZXh0cmEtc3RhdGlzdGljcy1mb290ZXItY2VsbCBzcmstZGlydC1mb290ZXItY2VsbCBzcmstLW5vd3JhcFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyay1wcm9ibGVtLXN0YXRpc3RpY3MtZm9vdGVyLXByaW1hcnlcIj48L3NwYW4+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd1NFQ29sdW1uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNyay1wcm9ibGVtLXN0YXRpc3RpY3MtZm9vdGVyLWNlbGwgc3JrLWV4dHJhLXN0YXRpc3RpY3MtZm9vdGVyLWNlbGwgc3JrLXNlLWZvb3Rlci1jZWxsIHNyay0tbm93cmFwXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3JrLXByb2JsZW0tc3RhdGlzdGljcy1mb290ZXItcHJpbWFyeVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8dHIgY2xhc3M9XCJzcmstcHJvYmxlbS1zdGF0aXN0aWNzLWZvb3Rlci1yb3cgc3JrLXByb2JsZW0tc3RhdGlzdGljcy1mb290ZXItcHJvYmxlbS1sYWJlbC1yb3dcIj5cbiAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzcmstcHJvYmxlbS1zdGF0aXN0aWNzLWZvb3Rlci1sYWJlbHMgc3JrLS10ZXh0LXJpZ2h0IHNyay0tbm93cmFwXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5jb2xzcGFuXT1cImxlZnRGb290ZXJDb2x1bW5Db3VudCgpXCJcbiAgICAgICAgICAgICAgPjwvdGQ+XG4gICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBwcm9ibGVtIG9mIGRhdGEucHJvYmxlbXM7IGxldCBwcm9ibGVtSW5kZXggPSBpbmRleFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzcmstcHJvYmxlbS1zdGF0aXN0aWNzLWZvb3Rlci1jZWxsIHNyay1wcm9ibGVtLXN0YXRpc3RpY3MtZm9vdGVyLXByb2JsZW0taGVhZGVyIHNyay1wcm9ibGVtLWhlYWRlciBzcmstLXRleHQtY2VudGVyIHNyay0tbm93cmFwXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZC1pbWFnZV09XCJwcm9ibGVtSGVhZGVyQmFja2dyb3VuZEltYWdlKHByb2JsZW0sIDApXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3JrLS1kaXNwbGF5LWJsb2NrXCI+e3sgcHJvYmxlbUFsaWFzKHByb2JsZW0sIHByb2JsZW1JbmRleCkgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd0RpcnRDb2x1bW5cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3JrLXByb2JsZW0tc3RhdGlzdGljcy1mb290ZXItY2VsbCBzcmstZXh0cmEtc3RhdGlzdGljcy1mb290ZXItY2VsbCBzcmstZGlydC1mb290ZXItY2VsbCBzcmstLW5vd3JhcFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyay1wcm9ibGVtLXN0YXRpc3RpY3MtZm9vdGVyLXByaW1hcnlcIj48L3NwYW4+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd1NFQ29sdW1uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNyay1wcm9ibGVtLXN0YXRpc3RpY3MtZm9vdGVyLWNlbGwgc3JrLWV4dHJhLXN0YXRpc3RpY3MtZm9vdGVyLWNlbGwgc3JrLXNlLWZvb3Rlci1jZWxsIHNyay0tbm93cmFwXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3JrLXByb2JsZW0tc3RhdGlzdGljcy1mb290ZXItcHJpbWFyeVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgPC90Zm9vdD5cbiAgICAgICAgPC90YWJsZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIGAsXG59KVxuZXhwb3J0IGNsYXNzIFJhbmtsaXN0Q29tcG9uZW50IHtcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgZGF0YSE6IFN0YXRpY1JhbmtsaXN0O1xuICBASW5wdXQoKSB0aGVtZTogRW51bVRoZW1lID0gRW51bVRoZW1lLmxpZ2h0O1xuICBASW5wdXQoKSByb3dCb3JkZXJlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBjb2x1bW5Cb3JkZXJlZCA9IGZhbHNlO1xuICBASW5wdXQoKSByb3dTdHJpcGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIGZvcm1hdFNya0Fzc2V0VXJsPzogKHVybDogc3RyaW5nLCBmaWVsZDogc3RyaW5nKSA9PiBzdHJpbmc7XG4gIEBJbnB1dCgpIHNwbGl0T3JnYW5pemF0aW9uID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNvbHVtblRpdGxlcz86IFJhbmtsaXN0Q29sdW1uVGl0bGVzO1xuICBASW5wdXQoKSBzdGF0dXNDZWxsUHJlc2V0OiBSYW5rbGlzdFN0YXR1c0NlbGxQcmVzZXQgPSAnY2xhc3NpYyc7XG4gIEBJbnB1dCgpIHN0YXR1c0NvbG9yQXNUZXh0ID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNob3dQcm9ibGVtU3RhdGlzdGljc0Zvb3RlciA9IGZhbHNlO1xuICBASW5wdXQoKSBzaG93RGlydENvbHVtbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzaG93U0VDb2x1bW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZW1wdHlTdGF0dXNQbGFjZWhvbGRlcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIHVzZXJBdmF0YXJQbGFjZW1lbnQ6IFJhbmtsaXN0VXNlckF2YXRhclBsYWNlbWVudCA9ICd1c2VyJztcbiAgQElucHV0KCkgbGFuZ3VhZ2VzPzogcmVhZG9ubHkgc3RyaW5nW107XG5cbiAgQE91dHB1dCgpIHVzZXJDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8VXNlckNsaWNrUGF5bG9hZD4oKTtcbiAgQE91dHB1dCgpIHByb2JsZW1DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8UHJvYmxlbUNsaWNrUGF5bG9hZD4oKTtcbiAgQE91dHB1dCgpIHNvbHV0aW9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPFNvbHV0aW9uQ2xpY2tQYXlsb2FkPigpO1xuXG4gIEBDb250ZW50Q2hpbGQoU3JrUHJvYmxlbUhlYWRlckNlbGxUZW1wbGF0ZURpcmVjdGl2ZSlcbiAgcHJvYmxlbUhlYWRlckNlbGxUZW1wbGF0ZT86IFNya1Byb2JsZW1IZWFkZXJDZWxsVGVtcGxhdGVEaXJlY3RpdmU7XG5cbiAgQENvbnRlbnRDaGlsZChTcmtTdGF0dXNDZWxsVGVtcGxhdGVEaXJlY3RpdmUpXG4gIHN0YXR1c0NlbGxUZW1wbGF0ZT86IFNya1N0YXR1c0NlbGxUZW1wbGF0ZURpcmVjdGl2ZTtcblxuICBAQ29udGVudENoaWxkKFNya1VzZXJDZWxsVGVtcGxhdGVEaXJlY3RpdmUpXG4gIHVzZXJDZWxsVGVtcGxhdGU/OiBTcmtVc2VyQ2VsbFRlbXBsYXRlRGlyZWN0aXZlO1xuXG4gIHJlYWRvbmx5IHN1cHBvcnRlZFZlcnNpb25zID0gc3JrU3VwcG9ydGVkVmVyc2lvbnM7XG4gIHJlYWRvbmx5IGZpcnN0Qmxvb2RTdGFyID0gJ1xcdTI2MDUnO1xuICByZWFkb25seSBzdGF0dXNTZXBhcmF0b3IgPSAnICc7XG4gIHJlYWRvbmx5IHByb2JsZW1TdGF0aXN0aWNzRm9vdGVyUm93cyA9IFtcbiAgICB7XG4gICAgICBrZXk6ICdhY2NlcHRlZCcsXG4gICAgICBsYWJlbDogJ0FjY2VwdGVkJyxcbiAgICAgIHRvb2x0aXA6ICdOdW1iZXIgb2YgcGFydGljaXBhbnRzIHdobyBzb2x2ZWQgdGhpcyBwcm9ibGVtJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ2F0dGVtcHRlZCcsXG4gICAgICBsYWJlbDogJ0F0dGVtcHRlZCcsXG4gICAgICB0b29sdGlwOiAnTnVtYmVyIG9mIHBhcnRpY2lwYW50cyB3aG8gYXR0ZW1wdGVkIHRoaXMgcHJvYmxlbScsXG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6ICdzdWJtaXR0ZWQnLFxuICAgICAgbGFiZWw6ICdTdWJtaXR0ZWQnLFxuICAgICAgdG9vbHRpcDogJ1RvdGFsIG51bWJlciBvZiB2YWxpZCBzdWJtaXNzaW9ucyBmb3IgdGhpcyBwcm9ibGVtJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ2RpcnQnLFxuICAgICAgbGFiZWw6ICdEaXJ0JyxcbiAgICAgIHRvb2x0aXA6ICdXcm9uZyBzdWJtaXNzaW9ucyBhbW9uZyBwYXJ0aWNpcGFudHMgd2hvIHNvbHZlZCB0aGlzIHByb2JsZW0nLFxuICAgIH0sXG4gICAge1xuICAgICAga2V5OiAnc2UnLFxuICAgICAgbGFiZWw6ICdTRScsXG4gICAgICB0b29sdGlwOiAnQXZlcmFnZSBoYXJkbmVzcywgY2FsY3VsYXRlZCBhcyAocGFydGljaXBhbnRzIC0gYWNjZXB0ZWQpIC8gcGFydGljaXBhbnRzJyxcbiAgICB9LFxuICAgIHtcbiAgICAgIGtleTogJ2ZpcnN0QWNjZXB0ZWQnLFxuICAgICAgbGFiZWw6ICdGQiBhdCcsXG4gICAgICB0b29sdGlwOiAnRmlyc3QgQmxvb2QgYXQsIGFsc28ga25vd24gYXMgZmlyc3Qgc29sdmUgdGltZSwgaW4gbWludXRlcycsXG4gICAgfSxcbiAgICB7XG4gICAgICBrZXk6ICdsYXN0QWNjZXB0ZWQnLFxuICAgICAgbGFiZWw6ICdMQiBhdCcsXG4gICAgICB0b29sdGlwOiAnTGFzdCBCbG9vZCBhdCwgYWxzbyBrbm93biBhcyBsYXN0IHNvbHZlIHRpbWUsIGluIG1pbnV0ZXMnLFxuICAgIH0sXG4gIF07XG4gIHByaXZhdGUgcHJvYmxlbVN0YXRpc3RpY3NTb3VyY2U/OiBTdGF0aWNSYW5rbGlzdDtcbiAgcHJpdmF0ZSBwcm9ibGVtU3RhdGlzdGljc0NhY2hlPzogUHJvYmxlbVN0YXRpc3RpY3NGb290ZXJbXTtcblxuICBnZXQgcHJvYmxlbVN0YXRpc3RpY3MoKSB7XG4gICAgaWYgKCF0aGlzLnNob3dQcm9ibGVtU3RhdGlzdGljc0Zvb3RlciAmJiAhdGhpcy5zaG93U0VDb2x1bW4pIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJvYmxlbVN0YXRpc3RpY3NTb3VyY2UgIT09IHRoaXMuZGF0YSB8fCAhdGhpcy5wcm9ibGVtU3RhdGlzdGljc0NhY2hlKSB7XG4gICAgICB0aGlzLnByb2JsZW1TdGF0aXN0aWNzU291cmNlID0gdGhpcy5kYXRhO1xuICAgICAgdGhpcy5wcm9ibGVtU3RhdGlzdGljc0NhY2hlID0gY2FsY3VsYXRlUHJvYmxlbVN0YXRpc3RpY3NGb290ZXIodGhpcy5kYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucHJvYmxlbVN0YXRpc3RpY3NDYWNoZTtcbiAgfVxuXG4gIGlzU3VwcG9ydGVkVmVyc2lvbigpIHtcbiAgICByZXR1cm4gY2FuaXVzZSh0aGlzLmRhdGEudmVyc2lvbik7XG4gIH1cblxuICBzaG93VGltZUNvbHVtbigpIHtcbiAgICByZXR1cm4gc2hvdWxkU2hvd1RpbWVDb2x1bW4odGhpcy5kYXRhLnJvd3MpO1xuICB9XG5cbiAgc2hvd0F2YXRhckluT3JnYW5pemF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnNwbGl0T3JnYW5pemF0aW9uICYmIHRoaXMudXNlckF2YXRhclBsYWNlbWVudCA9PT0gJ29yZ2FuaXphdGlvbic7XG4gIH1cblxuICBsZWZ0Rm9vdGVyQ29sdW1uQ291bnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5zZXJpZXMubGVuZ3RoICsgMSArIDEgKyAodGhpcy5zaG93VGltZUNvbHVtbigpID8gMSA6IDApICsgKHRoaXMuc3BsaXRPcmdhbml6YXRpb24gPyAxIDogMCk7XG4gIH1cblxuICBnZXRSYW5rVmFsdWVzKHJvdzogU3RhdGljUmFua2xpc3RSb3cpOiBSYW5rVmFsdWVbXSB7XG4gICAgcmV0dXJuIHJvdy5yYW5rVmFsdWVzIHx8IHRoaXMuZGF0YS5zZXJpZXMubWFwKCgpID0+ICh7IHJhbms6IG51bGwsIHNlZ21lbnRJbmRleDogbnVsbCB9KSk7XG4gIH1cblxuICBnZXRSYW5rVGV4dChyYW5rVmFsdWU6IFJhbmtWYWx1ZSwgcm93OiBTdGF0aWNSYW5rbGlzdFJvdykge1xuICAgIHJldHVybiByYW5rVmFsdWUucmFuayA/IHJhbmtWYWx1ZS5yYW5rIDogcm93LnVzZXIub2ZmaWNpYWwgPT09IGZhbHNlID8gJ++8iicgOiAnJztcbiAgfVxuXG4gIHJlc29sdmVEaXNwbGF5VGV4dCh0ZXh0OiBQYXJhbWV0ZXJzPHR5cGVvZiByZXNvbHZlVGV4dD5bMF0pIHtcbiAgICByZXR1cm4gcmVzb2x2ZVRleHQodGV4dCwgdGhpcy5sYW5ndWFnZXMpO1xuICB9XG5cbiAgcmVzb2x2ZVNlcmllc0NvbHVtblRpdGxlKHNlcmllczogc3JrLlJhbmtTZXJpZXMsIGluZGV4OiBudW1iZXIpIHtcbiAgICBjb25zdCBzZXJpZXNUaXRsZXMgPSB0aGlzLmNvbHVtblRpdGxlcz8uc2VyaWVzO1xuICAgIGlmICh0eXBlb2Ygc2VyaWVzVGl0bGVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gc2VyaWVzVGl0bGVzKHNlcmllcywgaW5kZXgpID8/IHNlcmllcy50aXRsZTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoc2VyaWVzVGl0bGVzKSkge1xuICAgICAgcmV0dXJuIHNlcmllc1RpdGxlc1tpbmRleF0gPz8gc2VyaWVzLnRpdGxlO1xuICAgIH1cbiAgICByZXR1cm4gc2VyaWVzLnRpdGxlO1xuICB9XG5cbiAgcmVzb2x2ZUNvbHVtblRpdGxlKGtleTogRXhjbHVkZTxrZXlvZiBSYW5rbGlzdENvbHVtblRpdGxlcywgJ3Nlcmllcyc+LCBmYWxsYmFjazogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uVGl0bGVzPy5ba2V5XSA/PyBmYWxsYmFjaztcbiAgfVxuXG4gIHByb2JsZW1BbGlhcyhwcm9ibGVtOiBzcmsuUHJvYmxlbSwgcHJvYmxlbUluZGV4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gcHJvYmxlbS5hbGlhcyB8fCBudW1iZXJUb0FscGhhYmV0KHByb2JsZW1JbmRleCk7XG4gIH1cblxuICBwcm9ibGVtU3RhdHNUaXRsZShzdGF0aXN0aWNzOiBzcmsuUHJvYmxlbVN0YXRpc3RpY3MpIHtcbiAgICBjb25zdCByYXRpbyA9IHN0YXRpc3RpY3Muc3VibWl0dGVkID8gKChzdGF0aXN0aWNzLmFjY2VwdGVkIC8gc3RhdGlzdGljcy5zdWJtaXR0ZWQpICogMTAwKS50b0ZpeGVkKDEpIDogMDtcbiAgICByZXR1cm4gYCR7c3RhdGlzdGljcy5hY2NlcHRlZH0gLyAke3N0YXRpc3RpY3Muc3VibWl0dGVkfSAoJHtyYXRpb30lKWA7XG4gIH1cblxuICBwcm9ibGVtSGVhZGVyQmFja2dyb3VuZEltYWdlKHByb2JsZW06IHNyay5Qcm9ibGVtLCBncmFkaWVudERpcmVjdGlvbiA9IDE4MCkge1xuICAgIHJldHVybiBnZXRQcm9ibGVtSGVhZGVyQmFja2dyb3VuZEltYWdlSWZTdHlsZWQocHJvYmxlbS5zdHlsZSwgdGhpcy50aGVtZSwgZ3JhZGllbnREaXJlY3Rpb24pO1xuICB9XG5cbiAgcmVzb2x2ZWRVc2VyTWFya2Vycyh1c2VyOiBzcmsuVXNlcikge1xuICAgIHJldHVybiByZXNvbHZlVXNlck1hcmtlcnModXNlciwgdGhpcy5kYXRhLm1hcmtlcnMpLm1hcCgobWFya2VyKSA9PiAoe1xuICAgICAgbWFya2VyLFxuICAgICAgcHJlc2VudGF0aW9uOiBnZXRNYXJrZXJQcmVzZW50YXRpb24obWFya2VyLCB0aGlzLnRoZW1lKSxcbiAgICB9KSk7XG4gIH1cblxuICBmb3JtYXRBc3NldFVybCh1cmw6IHN0cmluZywgZmllbGQ6IHN0cmluZykge1xuICAgIHJldHVybiByZXNvbHZlU3JrQXNzZXRVcmwodXJsLCBmaWVsZCwgdGhpcy5mb3JtYXRTcmtBc3NldFVybCk7XG4gIH1cblxuICBmb3JtYXRUaW1lKHRpbWU6IFBhcmFtZXRlcnM8dHlwZW9mIGZvcm1hdFRpbWVEdXJhdGlvbj5bMF0pIHtcbiAgICByZXR1cm4gZm9ybWF0VGltZUR1cmF0aW9uKHRpbWUsICdtaW4nLCBNYXRoLmZsb29yKTtcbiAgfVxuXG4gIGNhbGN1bGF0ZURpcnRQZXJjZW50YWdlKHJvdzogU3RhdGljUmFua2xpc3RSb3cpIHtcbiAgICByZXR1cm4gY2FsY3VsYXRlRGlydFBlcmNlbnRhZ2Uocm93KTtcbiAgfVxuXG4gIGNhbGN1bGF0ZVNFVmFsdWUocm93OiBTdGF0aWNSYW5rbGlzdFJvdywgcHJvYmxlbVN0YXRpc3RpY3M6IFByb2JsZW1TdGF0aXN0aWNzRm9vdGVyW10pIHtcbiAgICByZXR1cm4gY2FsY3VsYXRlU0VWYWx1ZShyb3csIHByb2JsZW1TdGF0aXN0aWNzKTtcbiAgfVxuXG4gIHN0YXR1c1ByZXNlbnRhdGlvbihzdGF0dXM6IHNyay5SYW5rUHJvYmxlbVN0YXR1cykge1xuICAgIHJldHVybiBnZXRSYW5rUHJvYmxlbVN0YXR1c0NlbGxQcmVzZW50YXRpb24oc3RhdHVzLCB0aGlzLmRhdGEsIHRoaXMuc3RhdHVzQ2VsbFByZXNldCk7XG4gIH1cblxuICBpc051bWJlcih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIG51bWJlciB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcic7XG4gIH1cblxuICBnZXRTdGF0dXNTb2x1dGlvbnMoc3RhdHVzOiBzcmsuUmFua1Byb2JsZW1TdGF0dXMpIHtcbiAgICByZXR1cm4gWy4uLihzdGF0dXMuc29sdXRpb25zIHx8IFtdKV0ucmV2ZXJzZSgpO1xuICB9XG5cbiAgc3RhdHVzQ2VsbENsYXNzKHN0YXR1czogc3JrLlJhbmtQcm9ibGVtU3RhdHVzKSB7XG4gICAgY29uc3QgY2xhc3NOYW1lcyA9IFsnc3JrLXByZXN0LXN0YXR1cy1ibG9jaycsICdzcmstLXRleHQtY2VudGVyJywgJ3Nyay0tbm93cmFwJ107XG4gICAgaWYgKHRoaXMuaXNTdGF0dXNDbGlja2FibGUoc3RhdHVzKSkge1xuICAgICAgY2xhc3NOYW1lcy5wdXNoKCdzcmstLWN1cnNvci1wb2ludGVyJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnN0YXR1c0NvbG9yQXNUZXh0KSB7XG4gICAgICBjbGFzc05hbWVzLnB1c2goJ3Nyay1wcmVzdC1zdGF0dXMtYmxvY2stY29sb3ItdGV4dCcpO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHRDbGFzc05hbWUgPSBnZXRSYW5rUHJvYmxlbVN0YXR1c0NlbGxDbGFzc05hbWUoc3RhdHVzLCB0aGlzLmRhdGEpO1xuICAgIGlmIChyZXN1bHRDbGFzc05hbWUpIHtcbiAgICAgIGNsYXNzTmFtZXMucHVzaChyZXN1bHRDbGFzc05hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gY2xhc3NOYW1lcy5qb2luKCcgJyk7XG4gIH1cblxuICBpc1N0YXR1c0NsaWNrYWJsZShzdGF0dXM6IHNyay5SYW5rUHJvYmxlbVN0YXR1cykge1xuICAgIHJldHVybiB0aGlzLmdldFN0YXR1c1NvbHV0aW9ucyhzdGF0dXMpLmxlbmd0aCA+IDA7XG4gIH1cblxuICBzdGF0dXNDZWxsUm9sZShzdGF0dXM6IHNyay5SYW5rUHJvYmxlbVN0YXR1cykge1xuICAgIHJldHVybiB0aGlzLmlzU3RhdHVzQ2xpY2thYmxlKHN0YXR1cykgPyAnYnV0dG9uJyA6IG51bGw7XG4gIH1cblxuICBzdGF0dXNDZWxsVGFiSW5kZXgoc3RhdHVzOiBzcmsuUmFua1Byb2JsZW1TdGF0dXMpIHtcbiAgICByZXR1cm4gdGhpcy5pc1N0YXR1c0NsaWNrYWJsZShzdGF0dXMpID8gMCA6IG51bGw7XG4gIH1cblxuICBoYXNQcm9ibGVtQ2xpY2tMaXN0ZW5lcigpIHtcbiAgICBjb25zdCBlbWl0dGVyID0gdGhpcy5wcm9ibGVtQ2xpY2sgYXMgRXZlbnRFbWl0dGVyPFByb2JsZW1DbGlja1BheWxvYWQ+ICYge1xuICAgICAgb2JzZXJ2ZWQ/OiBib29sZWFuO1xuICAgICAgb2JzZXJ2ZXJzPzogdW5rbm93bltdO1xuICAgIH07XG4gICAgcmV0dXJuIGVtaXR0ZXIub2JzZXJ2ZWQgPT09IHRydWUgfHwgQm9vbGVhbihlbWl0dGVyLm9ic2VydmVycz8ubGVuZ3RoKTtcbiAgfVxuXG4gIHByb2JsZW1IZWFkZXJSb2xlKCkge1xuICAgIHJldHVybiB0aGlzLmhhc1Byb2JsZW1DbGlja0xpc3RlbmVyKCkgPyAnYnV0dG9uJyA6IG51bGw7XG4gIH1cblxuICBwcm9ibGVtSGVhZGVyVGFiSW5kZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzUHJvYmxlbUNsaWNrTGlzdGVuZXIoKSA/IDAgOiBudWxsO1xuICB9XG5cbiAgYnVpbGRQcm9ibGVtSGVhZGVyQ2VsbENvbnRleHQocHJvYmxlbTogc3JrLlByb2JsZW0sIHByb2JsZW1JbmRleDogbnVtYmVyKTogUHJvYmxlbUhlYWRlckNlbGxUZW1wbGF0ZUNvbnRleHQge1xuICAgIHJldHVybiB7XG4gICAgICAkaW1wbGljaXQ6IHByb2JsZW0sXG4gICAgICBwcm9ibGVtLFxuICAgICAgcHJvYmxlbUluZGV4LFxuICAgICAgaW5kZXg6IHByb2JsZW1JbmRleCxcbiAgICAgIHJhbmtsaXN0OiB0aGlzLmRhdGEsXG4gICAgICBsYW5ndWFnZXM6IHRoaXMubGFuZ3VhZ2VzLFxuICAgICAgb25DbGljazogKGV2ZW50PzogTW91c2VFdmVudCkgPT4gdGhpcy5lbWl0UHJvYmxlbUNsaWNrKGV2ZW50LCBwcm9ibGVtLCBwcm9ibGVtSW5kZXgpLFxuICAgIH07XG4gIH1cblxuICBidWlsZFVzZXJDZWxsQ29udGV4dChyb3c6IFN0YXRpY1JhbmtsaXN0Um93LCByb3dJbmRleDogbnVtYmVyKTogVXNlckNlbGxUZW1wbGF0ZUNvbnRleHQge1xuICAgIHJldHVybiB7XG4gICAgICAkaW1wbGljaXQ6IHJvdy51c2VyLFxuICAgICAgdXNlcjogcm93LnVzZXIsXG4gICAgICByb3csXG4gICAgICByb3dJbmRleCxcbiAgICAgIHJhbmtsaXN0OiB0aGlzLmRhdGEsXG4gICAgICBtYXJrZXJzOiB0aGlzLmRhdGEubWFya2VycyxcbiAgICAgIGhpZGVPcmdhbml6YXRpb246IHRoaXMuc3BsaXRPcmdhbml6YXRpb24sXG4gICAgICBoaWRlQXZhdGFyOiB0aGlzLnNob3dBdmF0YXJJbk9yZ2FuaXphdGlvbigpLFxuICAgICAgbGFuZ3VhZ2VzOiB0aGlzLmxhbmd1YWdlcyxcbiAgICAgIG9uQ2xpY2s6IChldmVudD86IE1vdXNlRXZlbnQpID0+IHRoaXMuZW1pdFVzZXJDbGljayhldmVudCwgcm93LCByb3dJbmRleCksXG4gICAgfTtcbiAgfVxuXG4gIGJ1aWxkU3RhdHVzQ2VsbENvbnRleHQoXG4gICAgcm93OiBTdGF0aWNSYW5rbGlzdFJvdyxcbiAgICByb3dJbmRleDogbnVtYmVyLFxuICAgIHN0YXR1czogc3JrLlJhbmtQcm9ibGVtU3RhdHVzLFxuICAgIHByb2JsZW1JbmRleDogbnVtYmVyLFxuICApOiBTdGF0dXNDZWxsVGVtcGxhdGVDb250ZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgJGltcGxpY2l0OiBzdGF0dXMsXG4gICAgICBzdGF0dXMsXG4gICAgICBwcm9ibGVtOiB0aGlzLmRhdGEucHJvYmxlbXNbcHJvYmxlbUluZGV4XSxcbiAgICAgIHByb2JsZW1JbmRleCxcbiAgICAgIHVzZXI6IHJvdy51c2VyLFxuICAgICAgcm93LFxuICAgICAgcm93SW5kZXgsXG4gICAgICByYW5rbGlzdDogdGhpcy5kYXRhLFxuICAgICAgc29sdXRpb25zOiB0aGlzLmdldFN0YXR1c1NvbHV0aW9ucyhzdGF0dXMpLFxuICAgICAgc3RhdHVzQ2VsbFByZXNldDogdGhpcy5zdGF0dXNDZWxsUHJlc2V0LFxuICAgICAgc3RhdHVzQ29sb3JBc1RleHQ6IHRoaXMuc3RhdHVzQ29sb3JBc1RleHQsXG4gICAgICBlbXB0eVN0YXR1c1BsYWNlaG9sZGVyOiB0aGlzLmVtcHR5U3RhdHVzUGxhY2Vob2xkZXIsXG4gICAgICBsYW5ndWFnZXM6IHRoaXMubGFuZ3VhZ2VzLFxuICAgICAgb25DbGljazogKGV2ZW50PzogTW91c2VFdmVudCkgPT4gdGhpcy5lbWl0U29sdXRpb25DbGljayhldmVudCwgcm93LCByb3dJbmRleCwgc3RhdHVzLCBwcm9ibGVtSW5kZXgpLFxuICAgIH07XG4gIH1cblxuICBhY3RpdmF0ZVVzZXJDZWxsRnJvbUtleWJvYXJkKGV2ZW50OiBFdmVudCwgcm93OiBTdGF0aWNSYW5rbGlzdFJvdywgcm93SW5kZXg6IG51bWJlcikge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5lbWl0VXNlckNsaWNrKHVuZGVmaW5lZCwgcm93LCByb3dJbmRleCk7XG4gIH1cblxuICBhY3RpdmF0ZVByb2JsZW1IZWFkZXJGcm9tS2V5Ym9hcmQoZXZlbnQ6IEV2ZW50LCBwcm9ibGVtOiBzcmsuUHJvYmxlbSwgcHJvYmxlbUluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoIXRoaXMuaGFzUHJvYmxlbUNsaWNrTGlzdGVuZXIoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuZW1pdFByb2JsZW1DbGljayh1bmRlZmluZWQsIHByb2JsZW0sIHByb2JsZW1JbmRleCk7XG4gIH1cblxuICBhY3RpdmF0ZVN0YXR1c0NlbGxGcm9tS2V5Ym9hcmQoXG4gICAgZXZlbnQ6IEV2ZW50LFxuICAgIHJvdzogU3RhdGljUmFua2xpc3RSb3csXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBzdGF0dXM6IHNyay5SYW5rUHJvYmxlbVN0YXR1cyxcbiAgICBwcm9ibGVtSW5kZXg6IG51bWJlcixcbiAgKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmVtaXRTb2x1dGlvbkNsaWNrKHVuZGVmaW5lZCwgcm93LCByb3dJbmRleCwgc3RhdHVzLCBwcm9ibGVtSW5kZXgpO1xuICB9XG5cbiAgZW1pdFVzZXJDbGljayhldmVudDogTW91c2VFdmVudCB8IHVuZGVmaW5lZCwgcm93OiBTdGF0aWNSYW5rbGlzdFJvdywgcm93SW5kZXg6IG51bWJlcikge1xuICAgIGlmIChldmVudCkge1xuICAgICAgY2FwdHVyZU1vZGFsVHJpZ2dlclBvaW50RnJvbU1vdXNlRXZlbnQoZXZlbnQsIHtcbiAgICAgICAgc291cmNlOiAndXNlci1jZWxsJyxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIHJvd0luZGV4LFxuICAgICAgICAgIHVzZXJJZDogcm93LnVzZXIuaWQgfHwgbnVsbCxcbiAgICAgICAgICB1c2VyTmFtZTogdGhpcy5yZXNvbHZlRGlzcGxheVRleHQocm93LnVzZXIubmFtZSksXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy51c2VyQ2xpY2suZW1pdCh7XG4gICAgICB1c2VyOiByb3cudXNlcixcbiAgICAgIHJvdyxcbiAgICAgIHJvd0luZGV4LFxuICAgICAgcmFua2xpc3Q6IHRoaXMuZGF0YSxcbiAgICB9KTtcbiAgfVxuXG4gIGVtaXRQcm9ibGVtQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQgfCB1bmRlZmluZWQsIHByb2JsZW06IHNyay5Qcm9ibGVtLCBwcm9ibGVtSW5kZXg6IG51bWJlcikge1xuICAgIGlmICghdGhpcy5oYXNQcm9ibGVtQ2xpY2tMaXN0ZW5lcigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChldmVudCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNhcHR1cmVNb2RhbFRyaWdnZXJQb2ludEZyb21Nb3VzZUV2ZW50KGV2ZW50LCB7XG4gICAgICAgIHNvdXJjZTogJ3Byb2JsZW0taGVhZGVyJyxcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIHByb2JsZW1JbmRleCxcbiAgICAgICAgICBwcm9ibGVtQWxpYXM6IHByb2JsZW0uYWxpYXMgfHwgbnVsbCxcbiAgICAgICAgICBwcm9ibGVtVGl0bGU6IHRoaXMucmVzb2x2ZURpc3BsYXlUZXh0KHByb2JsZW0udGl0bGUpIHx8IG51bGwsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5wcm9ibGVtQ2xpY2suZW1pdCh7XG4gICAgICBwcm9ibGVtLFxuICAgICAgcHJvYmxlbUluZGV4LFxuICAgICAgcmFua2xpc3Q6IHRoaXMuZGF0YSxcbiAgICB9KTtcbiAgfVxuXG4gIGVtaXRTb2x1dGlvbkNsaWNrKFxuICAgIGV2ZW50OiBNb3VzZUV2ZW50IHwgdW5kZWZpbmVkLFxuICAgIHJvdzogU3RhdGljUmFua2xpc3RSb3csXG4gICAgcm93SW5kZXg6IG51bWJlcixcbiAgICBzdGF0dXM6IHNyay5SYW5rUHJvYmxlbVN0YXR1cyxcbiAgICBwcm9ibGVtSW5kZXg6IG51bWJlcixcbiAgKSB7XG4gICAgY29uc3Qgc29sdXRpb25zID0gdGhpcy5nZXRTdGF0dXNTb2x1dGlvbnMoc3RhdHVzKTtcbiAgICBpZiAoIXNvbHV0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBjYXB0dXJlTW9kYWxUcmlnZ2VyUG9pbnRGcm9tTW91c2VFdmVudChldmVudCwge1xuICAgICAgICBzb3VyY2U6ICdzdGF0dXMtY2VsbCcsXG4gICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICByb3dJbmRleCxcbiAgICAgICAgICBwcm9ibGVtSW5kZXgsXG4gICAgICAgICAgcHJvYmxlbUFsaWFzOiB0aGlzLmRhdGEucHJvYmxlbXNbcHJvYmxlbUluZGV4XT8uYWxpYXMgfHwgbnVsbCxcbiAgICAgICAgICBwcm9ibGVtVGl0bGU6IHRoaXMuZGF0YS5wcm9ibGVtc1twcm9ibGVtSW5kZXhdID8gdGhpcy5yZXNvbHZlRGlzcGxheVRleHQodGhpcy5kYXRhLnByb2JsZW1zW3Byb2JsZW1JbmRleF0udGl0bGUpIDogbnVsbCxcbiAgICAgICAgICB1c2VySWQ6IHJvdy51c2VyLmlkIHx8IG51bGwsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5zb2x1dGlvbkNsaWNrLmVtaXQoe1xuICAgICAgdXNlcjogcm93LnVzZXIsXG4gICAgICByb3csXG4gICAgICByb3dJbmRleCxcbiAgICAgIHByb2JsZW1JbmRleCxcbiAgICAgIHByb2JsZW06IHRoaXMuZGF0YS5wcm9ibGVtc1twcm9ibGVtSW5kZXhdLFxuICAgICAgc3RhdHVzLFxuICAgICAgc29sdXRpb25zLFxuICAgICAgcmFua2xpc3Q6IHRoaXMuZGF0YSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVNlcmllc1NlZ21lbnQocmFua1ZhbHVlOiBSYW5rVmFsdWUsIHNlcmllczogc3JrLlJhbmtTZXJpZXMgfCB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBpbmRleCA9IHJhbmtWYWx1ZS5zZWdtZW50SW5kZXggfHwgcmFua1ZhbHVlLnNlZ21lbnRJbmRleCA9PT0gMCA/IHJhbmtWYWx1ZS5zZWdtZW50SW5kZXggOiAtMTtcbiAgICByZXR1cm4gKHNlcmllcz8uc2VnbWVudHMgfHwgW10pW2luZGV4XSB8fCB7fTtcbiAgfVxuXG4gIGlzU2VyaWVzU2VnbWVudGVkQ29sdW1uKHNlcmllczogc3JrLlJhbmtTZXJpZXMgfCB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gKHNlcmllcz8uc2VnbWVudHMgfHwgW10pLnNvbWUoKHNlZ21lbnQpID0+IHR5cGVvZiBzZWdtZW50LnN0eWxlID09PSAnc3RyaW5nJyk7XG4gIH1cblxuICBnZXRTZXJpZXNTZWdtZW50Q2xhc3MocmFua1ZhbHVlOiBSYW5rVmFsdWUsIHNlcmllczogc3JrLlJhbmtTZXJpZXMgfCB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBzZWdtZW50U3R5bGUgPSB0aGlzLnJlc29sdmVTZXJpZXNTZWdtZW50KHJhbmtWYWx1ZSwgc2VyaWVzKS5zdHlsZTtcbiAgICByZXR1cm4gdHlwZW9mIHNlZ21lbnRTdHlsZSA9PT0gJ3N0cmluZycgPyBgc3JrLXByZXNldC1zZXJpZXMtc2VnbWVudC0ke3NlZ21lbnRTdHlsZX1gIDogJyc7XG4gIH1cblxuICBnZXRTZXJpZXNTZWdtZW50U3R5bGUocmFua1ZhbHVlOiBSYW5rVmFsdWUsIHNlcmllczogc3JrLlJhbmtTZXJpZXMgfCB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBlbXB0eUNvbG9yOiBUaGVtZUNvbG9yID0ge1xuICAgICAgW0VudW1UaGVtZS5saWdodF06IHVuZGVmaW5lZCxcbiAgICAgIFtFbnVtVGhlbWUuZGFya106IHVuZGVmaW5lZCxcbiAgICB9O1xuICAgIGNvbnN0IHNlZ21lbnRTdHlsZSA9IHRoaXMucmVzb2x2ZVNlcmllc1NlZ21lbnQocmFua1ZhbHVlLCBzZXJpZXMpLnN0eWxlO1xuICAgIGlmICghc2VnbWVudFN0eWxlIHx8IHR5cGVvZiBzZWdtZW50U3R5bGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IHN0eWxlID0gcmVzb2x2ZVN0eWxlKHNlZ21lbnRTdHlsZSk7XG4gICAgY29uc3QgdGV4dENvbG9yID0gc3R5bGUudGV4dENvbG9yIHx8IGVtcHR5Q29sb3I7XG4gICAgY29uc3QgYmFja2dyb3VuZENvbG9yID0gc3R5bGUuYmFja2dyb3VuZENvbG9yIHx8IGVtcHR5Q29sb3I7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbG9yOiB0ZXh0Q29sb3JbdGhpcy50aGVtZV0sXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IGJhY2tncm91bmRDb2xvclt0aGlzLnRoZW1lXSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0UHJvYmxlbVN0YXRpc3RpY3NGb290ZXJDZWxsUHJpbWFyeShrZXk6IHN0cmluZywgc3RhdDogUHJvYmxlbVN0YXRpc3RpY3NGb290ZXIpIHtcbiAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgY2FzZSAnYWNjZXB0ZWQnOlxuICAgICAgICByZXR1cm4gc3RhdC5hY2NlcHRlZDtcbiAgICAgIGNhc2UgJ2F0dGVtcHRlZCc6XG4gICAgICAgIHJldHVybiBzdGF0LmF0dGVtcHRlZDtcbiAgICAgIGNhc2UgJ3N1Ym1pdHRlZCc6XG4gICAgICAgIHJldHVybiBzdGF0LnN1Ym1pdHRlZDtcbiAgICAgIGNhc2UgJ2RpcnQnOlxuICAgICAgICByZXR1cm4gc3RhdC5kaXJ0O1xuICAgICAgY2FzZSAnc2UnOlxuICAgICAgICByZXR1cm4gZm9ybWF0UHJvYmxlbVN0YXRpc3RpY3NBdmVyYWdlSGFyZG5lc3Moc3RhdCk7XG4gICAgICBjYXNlICdmaXJzdEFjY2VwdGVkJzpcbiAgICAgICAgcmV0dXJuIGZvcm1hdFByb2JsZW1TdGF0aXN0aWNzQWNjZXB0ZWRNaW51dGUoc3RhdC5maXJzdEFjY2VwdGVkVGltZSk7XG4gICAgICBjYXNlICdsYXN0QWNjZXB0ZWQnOlxuICAgICAgICByZXR1cm4gZm9ybWF0UHJvYmxlbVN0YXRpc3RpY3NBY2NlcHRlZE1pbnV0ZShzdGF0Lmxhc3RBY2NlcHRlZFRpbWUpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gIGdldFByb2JsZW1TdGF0aXN0aWNzRm9vdGVyQ2VsbFNlY29uZGFyeShrZXk6IHN0cmluZywgc3RhdDogUHJvYmxlbVN0YXRpc3RpY3NGb290ZXIpIHtcbiAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgY2FzZSAnYWNjZXB0ZWQnOlxuICAgICAgICByZXR1cm4gZm9ybWF0UHJvYmxlbVN0YXRpc3RpY3NQZXJjZW50KHN0YXQuYWNjZXB0ZWQsIHN0YXQucGFydGljaXBhbnRDb3VudCk7XG4gICAgICBjYXNlICdhdHRlbXB0ZWQnOlxuICAgICAgICByZXR1cm4gZm9ybWF0UHJvYmxlbVN0YXRpc3RpY3NQZXJjZW50KHN0YXQuYXR0ZW1wdGVkLCBzdGF0LnBhcnRpY2lwYW50Q291bnQpO1xuICAgICAgY2FzZSAnZGlydCc6XG4gICAgICAgIHJldHVybiBmb3JtYXRQcm9ibGVtU3RhdGlzdGljc1BlcmNlbnQoc3RhdC5kaXJ0LCBzdGF0LmRpcnRTdWJtaXR0ZWQpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|