aril 1.2.21 → 1.2.23

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.
@@ -1,15 +1,15 @@
1
1
  import { Component, EventEmitter, Output, effect, input, signal } from '@angular/core';
2
2
  import { ReactiveFormsModule } from '@angular/forms';
3
3
  import { MultiSelectModule } from 'primeng/multiselect';
4
+ import { TooltipModule } from 'primeng/tooltip';
4
5
  import { TranslocoModule } from '@ngneat/transloco';
5
6
  import { DxSelectBoxModule } from 'devextreme-angular/ui/select-box';
6
- import { firstValueFrom } from 'rxjs';
7
- import DataSource from 'devextreme/data/data_source';
8
7
  import ArrayStore from 'devextreme/data/array_store';
8
+ import DataSource from 'devextreme/data/data_source';
9
+ import { firstValueFrom } from 'rxjs';
9
10
  import { API_CONFIGS } from 'aril/boot/config/api';
10
11
  import { Apps } from 'aril/boot/config/apps';
11
12
  import { BaseInputComponent, DXInputErrorMessagePipe, InputErrorMessagePipe, ValueAccessorDirective } from 'aril/ui/lib';
12
- import { TooltipModule } from 'primeng/tooltip';
13
13
  import * as i0 from "@angular/core";
14
14
  import * as i1 from "@angular/common/http";
15
15
  import * as i2 from "@ngneat/transloco";
@@ -80,6 +80,8 @@ export class EnumPickerComponent extends BaseInputComponent {
80
80
  }
81
81
  });
82
82
  // excludedKeys değişince item listesini yeniden filtrele (cache korunur, refetch yok)
83
+ // allowSignalWrites: excludedKeys runtime'da (item'lar yüklendikten sonra) değişince
84
+ // buildGroupedFromRaw/updateSelectionItemsText senkron signal yazar; bu effect içinde izinli olmalı (NG0600).
83
85
  effect(() => {
84
86
  this.excludedKeys();
85
87
  if (this.rawGroups.length > 0) {
@@ -88,7 +90,7 @@ export class EnumPickerComponent extends BaseInputComponent {
88
90
  else if (this.originalSelectionItems.length > 0) {
89
91
  this.updateSelectionItemsText();
90
92
  }
91
- });
93
+ }, { allowSignalWrites: true });
92
94
  this.translocoService.langChanges$.subscribe(() => {
93
95
  if (this.rawGroups.length > 0) {
94
96
  this.buildGroupedFromRaw();
@@ -108,11 +110,12 @@ export class EnumPickerComponent extends BaseInputComponent {
108
110
  const payload = {
109
111
  groupName: this.groupName()
110
112
  };
111
- if (Array.isArray(this.parentSelectionKey())) {
112
- payload.parentSelectionKeys = this.parentSelectionKey();
113
+ const psk = this.parentSelectionKey();
114
+ if (Array.isArray(psk)) {
115
+ payload.parentSelectionKeys = psk;
113
116
  }
114
117
  else {
115
- payload.parentSelectionKey = this.parentSelectionKey();
118
+ payload.parentSelectionKey = psk;
116
119
  }
117
120
  const hostApi = API_CONFIGS.getExternalAppEndpoint(Apps.MNG);
118
121
  try {
@@ -146,7 +149,8 @@ export class EnumPickerComponent extends BaseInputComponent {
146
149
  let groups = [];
147
150
  try {
148
151
  groups =
149
- (await firstValueFrom(this.http.post(hostApi + '/selection-group/load-all', requests))) || [];
152
+ (await firstValueFrom(this.http.post(hostApi + '/selection-group/load-all', requests))) ||
153
+ [];
150
154
  }
151
155
  catch (error) {
152
156
  groups = [];
@@ -268,8 +272,15 @@ export class EnumPickerComponent extends BaseInputComponent {
268
272
  }
269
273
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EnumPickerComponent, decorators: [{
270
274
  type: Component,
271
- args: [{ standalone: true, selector: 'enum-picker[ngModel], enum-picker[formControl], enum-picker[formControlName]', imports: [ReactiveFormsModule, DxSelectBoxModule, DXInputErrorMessagePipe, TranslocoModule, MultiSelectModule, TooltipModule], providers: [InputErrorMessagePipe], hostDirectives: [ValueAccessorDirective], template: "@if (isMultiple()) {\r\n\t<p-multiSelect\r\n\t\t[options]=\"isGrouped() ? (groupedSelectionItems() || []) : (selectionItems() || items() || [])\"\r\n\t\t[group]=\"isGrouped()\"\r\n\t\t[optionValue]=\"itemKey()\"\r\n\t\t[optionLabel]=\"itemText()\"\r\n\t\t[defaultLabel]=\"placeholder()\"\r\n\t\t[selectedItemsLabel]=\"selectedItemsLabel()\"\r\n\t\t[style]=\"style()\"\r\n\t\t[styleClass]=\"styleClass()\"\r\n\t\t[tooltip]=\"tooltip()\"\r\n\t\t[tooltipPosition]=\"tooltipPosition()\"\r\n\t\t[formControl]=\"ngControl.control\"\r\n\t\t(ngModelChange)=\"ngControl.viewToModelUpdate($event)\"\r\n\t\t[maxSelectedLabels]=\"2\"\r\n\t\t[appendTo]=\"appendTo()\"\r\n\t\t[virtualScroll]=\"useVirtualScroll()\"\r\n\t\t[virtualScrollItemSize]=\"virtualScrollItemSize()\"\r\n\t\t[scrollHeight]=\"scrollHeight()\"\r\n\t\t[filter]=\"true\"\r\n\t\t[panelStyle]=\"{ 'max-width': '400px', 'min-width': 'auto' }\">\r\n\t\t@if (isGrouped()) {\r\n\t\t\t<ng-template let-group pTemplate=\"group\">\r\n\t\t\t\t<span>{{ group.label }}</span>\r\n\t\t\t</ng-template>\r\n\t\t}\r\n\t\t<ng-template let-enum pTemplate=\"item\">\r\n\t\t\t<div [pTooltip]=\"enum[itemText()]?.length > textClampCharacters() ? enum[itemText()] : ''\">\r\n\t\t\t\t@if (enum[itemText()]?.length > textClampCharacters()) {\r\n\t\t\t\t\t{{ enum[itemText()].slice(0, textClampCharacters()) }}...\r\n\t\t\t\t} @else {\r\n\t\t\t\t\t{{ enum[itemText()] }}\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t</ng-template>\r\n\t</p-multiSelect>\r\n} @else {\r\n\t<dx-select-box\r\n [dataSource]=\"useVirtualScroll() ? selectBoxDataSource() : (selectionItems() || items() || [])\"\r\n\t\t[valueExpr]=\"itemKey()\"\r\n\t\t[displayExpr]=\"itemText()\"\r\n\t\t[searchEnabled]=\"true\"\r\n\t\t[searchExpr]=\"searchExpr()\"\r\n\t\t[tabIndex]=\"tabindex()\"\r\n\t\t[grouped]=\"grouped()\"\r\n\t\t[placeholder]=\"placeholder()\"\r\n\t\t[showClearButton]=\"showClearButton()\"\r\n\t\t[acceptCustomValue]=\"acceptCustomValue()\"\r\n\t\t(onCustomItemCreating)=\"onCustomItemCreating($event)\"\r\n\t\t[isValid]=\"ngControl?.control?.valid || ngControl?.control?.pristine || ngControl?.control?.disabled || false\"\r\n\t\t[validationError]=\"ngControl?.control?.errors | dxInputErrorMessage: ngControl?.control\"\r\n\t\tvalidationMessagePosition=\"top\"\r\n\t\t[noDataText]=\"translocoService.translate('messages.noDataToDisplay')\"\r\n\t\t[formControl]=\"ngControl.control\"\r\n\t\t(ngModelChange)=\"ngControl.viewToModelUpdate($event)\"\r\n (onSelectionChanged)=\"onSelectionChanged.emit($event.selectedItem);setTitle($event.selectedItem)\"\r\n [inputAttr]=\"{ 'title': selectedItemText }\">\r\n\t</dx-select-box>\r\n}\r\n" }]
275
+ args: [{ standalone: true, selector: 'enum-picker[ngModel], enum-picker[formControl], enum-picker[formControlName]', imports: [
276
+ ReactiveFormsModule,
277
+ DxSelectBoxModule,
278
+ DXInputErrorMessagePipe,
279
+ TranslocoModule,
280
+ MultiSelectModule,
281
+ TooltipModule
282
+ ], providers: [InputErrorMessagePipe], hostDirectives: [ValueAccessorDirective], template: "@if (isMultiple()) {\r\n\t<p-multiSelect\r\n\t\t[options]=\"isGrouped() ? (groupedSelectionItems() || []) : (selectionItems() || items() || [])\"\r\n\t\t[group]=\"isGrouped()\"\r\n\t\t[optionValue]=\"itemKey()\"\r\n\t\t[optionLabel]=\"itemText()\"\r\n\t\t[defaultLabel]=\"placeholder()\"\r\n\t\t[selectedItemsLabel]=\"selectedItemsLabel()\"\r\n\t\t[style]=\"style()\"\r\n\t\t[styleClass]=\"styleClass()\"\r\n\t\t[tooltip]=\"tooltip()\"\r\n\t\t[tooltipPosition]=\"tooltipPosition()\"\r\n\t\t[formControl]=\"ngControl.control\"\r\n\t\t(ngModelChange)=\"ngControl.viewToModelUpdate($event)\"\r\n\t\t[maxSelectedLabels]=\"2\"\r\n\t\t[appendTo]=\"appendTo()\"\r\n\t\t[virtualScroll]=\"useVirtualScroll()\"\r\n\t\t[virtualScrollItemSize]=\"virtualScrollItemSize()\"\r\n\t\t[scrollHeight]=\"scrollHeight()\"\r\n\t\t[filter]=\"true\"\r\n\t\t[panelStyle]=\"{ 'max-width': '400px', 'min-width': 'auto' }\">\r\n\t\t@if (isGrouped()) {\r\n\t\t\t<ng-template let-group pTemplate=\"group\">\r\n\t\t\t\t<span>{{ group.label }}</span>\r\n\t\t\t</ng-template>\r\n\t\t}\r\n\t\t<ng-template let-enum pTemplate=\"item\">\r\n\t\t\t<div [pTooltip]=\"enum[itemText()]?.length > textClampCharacters() ? enum[itemText()] : ''\">\r\n\t\t\t\t@if (enum[itemText()]?.length > textClampCharacters()) {\r\n\t\t\t\t\t{{ enum[itemText()].slice(0, textClampCharacters()) }}...\r\n\t\t\t\t} @else {\r\n\t\t\t\t\t{{ enum[itemText()] }}\r\n\t\t\t\t}\r\n\t\t\t</div>\r\n\t\t</ng-template>\r\n\t</p-multiSelect>\r\n} @else {\r\n\t<dx-select-box\r\n [dataSource]=\"useVirtualScroll() ? selectBoxDataSource() : (selectionItems() || items() || [])\"\r\n\t\t[valueExpr]=\"itemKey()\"\r\n\t\t[displayExpr]=\"itemText()\"\r\n\t\t[searchEnabled]=\"true\"\r\n\t\t[searchExpr]=\"searchExpr()\"\r\n\t\t[tabIndex]=\"tabindex()\"\r\n\t\t[grouped]=\"grouped()\"\r\n\t\t[placeholder]=\"placeholder()\"\r\n\t\t[showClearButton]=\"showClearButton()\"\r\n\t\t[acceptCustomValue]=\"acceptCustomValue()\"\r\n\t\t(onCustomItemCreating)=\"onCustomItemCreating($event)\"\r\n\t\t[isValid]=\"ngControl?.control?.valid || ngControl?.control?.pristine || ngControl?.control?.disabled || false\"\r\n\t\t[validationError]=\"ngControl?.control?.errors | dxInputErrorMessage: ngControl?.control\"\r\n\t\tvalidationMessagePosition=\"top\"\r\n\t\t[noDataText]=\"translocoService.translate('messages.noDataToDisplay')\"\r\n\t\t[formControl]=\"ngControl.control\"\r\n\t\t(ngModelChange)=\"ngControl.viewToModelUpdate($event)\"\r\n (onSelectionChanged)=\"onSelectionChanged.emit($event.selectedItem);setTitle($event.selectedItem)\"\r\n [inputAttr]=\"{ 'title': selectedItemText }\">\r\n\t</dx-select-box>\r\n}\r\n" }]
272
283
  }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.TranslocoService }], propDecorators: { onSelectionChanged: [{
273
284
  type: Output
274
285
  }] } });
275
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC91aS1idXNpbmVzcy9lbnVtUGlja2VyL3NyYy9lbnVtLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcmlsL3VpLWJ1c2luZXNzL2VudW1QaWNrZXIvc3JjL2VudW0tcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsZUFBZSxFQUFvQixNQUFNLG1CQUFtQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdEMsT0FBTyxVQUFVLE1BQU0sNkJBQTZCLENBQUM7QUFDckQsT0FBTyxVQUFVLE1BQU0sNkJBQTZCLENBQUM7QUFFckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3QyxPQUFPLEVBQ04sa0JBQWtCLEVBQ2xCLHVCQUF1QixFQUN2QixxQkFBcUIsRUFDckIsc0JBQXNCLEVBQ3RCLE1BQU0sYUFBYSxDQUFDO0FBR3JCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7OztBQVVoRCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsa0JBQWtCO0lB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LDZHQzlCbkMsMGxGQTJEQSwyQ0Q5QlcsbUJBQW1CLHlUQUFFLGlCQUFpQiw0cUZBQUUsdUJBQXVCLDJEQUFFLGVBQWUsOEJBQUUsaUJBQWlCLDI3Q0FBRSxhQUFhOzs0RkFJaEgsbUJBQW1CO2tCQVIvQixTQUFTO2lDQUNHLElBQUksWUFDTiw4RUFBOEUsV0FFL0UsQ0FBQyxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxDQUFDLGFBQ2xILENBQUMscUJBQXFCLENBQUMsa0JBQ2xCLENBQUMsc0JBQXNCLENBQUM7OEdBbUQ5QixrQkFBa0I7c0JBQTNCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgT3V0cHV0LCBlZmZlY3QsIGlucHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmltcG9ydCB7IE11bHRpU2VsZWN0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy9tdWx0aXNlbGVjdCc7XHJcblxyXG5pbXBvcnQgeyBUcmFuc2xvY29Nb2R1bGUsIFRyYW5zbG9jb1NlcnZpY2UgfSBmcm9tICdAbmduZWF0L3RyYW5zbG9jbyc7XHJcbmltcG9ydCB7IER4U2VsZWN0Qm94TW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL3NlbGVjdC1ib3gnO1xyXG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IERhdGFTb3VyY2UgZnJvbSAnZGV2ZXh0cmVtZS9kYXRhL2RhdGFfc291cmNlJztcclxuaW1wb3J0IEFycmF5U3RvcmUgZnJvbSAnZGV2ZXh0cmVtZS9kYXRhL2FycmF5X3N0b3JlJztcclxuXHJcbmltcG9ydCB7IEFQSV9DT05GSUdTIH0gZnJvbSAnYXJpbC9ib290L2NvbmZpZy9hcGknO1xyXG5pbXBvcnQgeyBBcHBzIH0gZnJvbSAnYXJpbC9ib290L2NvbmZpZy9hcHBzJztcclxuaW1wb3J0IHtcclxuXHRCYXNlSW5wdXRDb21wb25lbnQsXHJcblx0RFhJbnB1dEVycm9yTWVzc2FnZVBpcGUsXHJcblx0SW5wdXRFcnJvck1lc3NhZ2VQaXBlLFxyXG5cdFZhbHVlQWNjZXNzb3JEaXJlY3RpdmVcclxufSBmcm9tICdhcmlsL3VpL2xpYic7XHJcblxyXG5pbXBvcnQgeyBHcm91cGVkU2VsZWN0aW9uSXRlbSwgU2VsZWN0Qm94SXRlbSwgU2VsZWN0aW9uR3JvdXBEVE8sIFNlbGVjdGlvbkl0ZW0sIFNlbGVjdGlvblJlcXVlc3REVE8gfSBmcm9tICcuL2ludGVyZmFjZSc7XHJcbmltcG9ydCB7IFRvb2x0aXBNb2R1bGUgfSBmcm9tICdwcmltZW5nL3Rvb2x0aXAnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c3RhbmRhbG9uZTogdHJ1ZSxcclxuXHRzZWxlY3RvcjogJ2VudW0tcGlja2VyW25nTW9kZWxdLCBlbnVtLXBpY2tlcltmb3JtQ29udHJvbF0sIGVudW0tcGlja2VyW2Zvcm1Db250cm9sTmFtZV0nLFxyXG5cdHRlbXBsYXRlVXJsOiAnLi9lbnVtLXBpY2tlci5jb21wb25lbnQuaHRtbCcsXHJcblx0aW1wb3J0czogW1JlYWN0aXZlRm9ybXNNb2R1bGUsIER4U2VsZWN0Qm94TW9kdWxlLCBEWElucHV0RXJyb3JNZXNzYWdlUGlwZSwgVHJhbnNsb2NvTW9kdWxlLCBNdWx0aVNlbGVjdE1vZHVsZSwgVG9vbHRpcE1vZHVsZV0sXHJcblx0cHJvdmlkZXJzOiBbSW5wdXRFcnJvck1lc3NhZ2VQaXBlXSxcclxuXHRob3N0RGlyZWN0aXZlczogW1ZhbHVlQWNjZXNzb3JEaXJlY3RpdmVdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFbnVtUGlja2VyQ29tcG9uZW50IGV4dGVuZHMgQmFzZUlucHV0Q29tcG9uZW50IHtcclxuXHRzZWxlY3Rpb25JdGVtcyA9IHNpZ25hbDxTZWxlY3RCb3hJdGVtW10gfCBudWxsPihudWxsKTtcclxuXHRzZWxlY3RCb3hEYXRhU291cmNlID0gc2lnbmFsPERhdGFTb3VyY2UgfCBudWxsPihudWxsKTtcclxuXHRncm91cGVkU2VsZWN0aW9uSXRlbXMgPSBzaWduYWw8R3JvdXBlZFNlbGVjdGlvbkl0ZW1bXSB8IG51bGw+KG51bGwpO1xyXG5cdGlzR3JvdXBlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcblx0cHJpdmF0ZSBvcmlnaW5hbFNlbGVjdGlvbkl0ZW1zOiBTZWxlY3Rpb25JdGVtW10gPSBbXTtcclxuXHRwcml2YXRlIHJhd1BhcmVudEl0ZW1zOiBTZWxlY3Rpb25JdGVtW10gPSBbXTtcclxuXHRwcml2YXRlIHJhd0dyb3VwczogeyBwYXJlbnRLZXk6IHN0cmluZzsgaXRlbXM6IFNlbGVjdGlvbkl0ZW1bXSB9W10gPSBbXTtcclxuXHQvKipcclxuXHQgKiBTaW5nbGUgU2VsZWN0IFN0YXRlc1xyXG5cdCAqL1xyXG5cclxuXHRpdGVtS2V5ID0gaW5wdXQoJ2tleScpO1xyXG5cdGl0ZW1UZXh0ID0gaW5wdXQoJ3RleHQnKTtcclxuXHRncm91cE5hbWUgPSBpbnB1dCgnJyk7XHJcblx0cGFyZW50U2VsZWN0aW9uS2V5ID0gaW5wdXQobnVsbCk7XHJcblx0cGFyZW50R3JvdXBOYW1lID0gaW5wdXQ8c3RyaW5nPignJyk7XHJcblx0dGFiaW5kZXggPSBpbnB1dDxudW1iZXI+KDApO1xyXG5cdGl0ZW1zID0gaW5wdXQ8U2VsZWN0Qm94SXRlbVtdPigpO1xyXG5cdGlzTXVsdGlwbGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblx0Ly8gQ3Jvc3MtdmFsaWRhdGlvbiBSZW1vdmVJdGVtIGFjdGlvbiBpbGUgc2V0IGVkaWxpcjsgdmVyaWxlbiBzZWxlY3Rpb25LZXknbGVyaSBpdGVtIGxpc3Rlc2luZGVuIGZpbHRyZWxlci5cclxuXHRleGNsdWRlZEtleXMgPSBpbnB1dDxzdHJpbmdbXT4oW10pO1xyXG5cdHNlbGVjdGVkSXRlbVRleHQgPSAnJztcclxuXHQvKiogKiBAZGVzY3JpcHRpb24gd2hlbiBncm91cGVkID0gdHJ1ZSwgb3B0aW9uIGl0ZW0gc3RydWN0dXJlIHsga2V5OnN0cmluZywgaXRlbXM6W10gfSAqL1xyXG5cdGdyb3VwZWQgPSBpbnB1dChmYWxzZSk7XHJcblx0c2hvd0NsZWFyQnV0dG9uID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XHJcblx0cGxhY2Vob2xkZXIgPSBpbnB1dDxzdHJpbmc+KCcnKTtcclxuXHRzZWFyY2hFeHByID0gaW5wdXQ8c3RyaW5nIHwgc3RyaW5nW10+KCcnKTtcclxuXHRhY2NlcHRDdXN0b21WYWx1ZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHR0ZXh0Q2xhbXBDaGFyYWN0ZXJzID0gaW5wdXQ8bnVtYmVyPig0MCk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFZpcnR1YWwgU2Nyb2xsIFN0YXRlc1xyXG5cdCAqL1xyXG5cdHVzZVZpcnR1YWxTY3JvbGwgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblx0dmlydHVhbFNjcm9sbEl0ZW1TaXplID0gaW5wdXQ8bnVtYmVyPigzMCk7XHJcblx0c2Nyb2xsSGVpZ2h0ID0gaW5wdXQ8c3RyaW5nPignMzAwcHgnKTtcclxuXHJcblx0LyoqXHJcblx0ICogTXVsdGkgU2VsZWN0IFN0YXRlc1xyXG5cdCAqL1xyXG5cclxuXHRzZWxlY3RlZEl0ZW1zTGFiZWwgPSBpbnB1dDxzdHJpbmc+KCd7MH0gIGRlxJ9lciBzZcOnaWxkaScpOyAvLyBkZWZhdWx0IHZhbHVlIC0+ICh7MH0gaXRlbXMgc2VsZWN0ZWRcclxuXHRhcHBlbmRUbyA9IGlucHV0PHN0cmluZz4oJ2JvZHknKTtcclxuXHRzdHlsZSA9IGlucHV0PG9iamVjdD4oe30pO1xyXG5cdHN0eWxlQ2xhc3MgPSBpbnB1dDxzdHJpbmc+KCcnKTtcclxuXHR0b29sdGlwID0gaW5wdXQ8c3RyaW5nPignJyk7XHJcblx0dG9vbHRpcFBvc2l0aW9uID0gaW5wdXQ8YW55PigndG9wJyk7XHJcblxyXG5cdEBPdXRwdXQoKSBvblNlbGVjdGlvbkNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFNlbGVjdEJveEl0ZW0+KCk7XHJcblxyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHJpdmF0ZSByZWFkb25seSBodHRwOiBIdHRwQ2xpZW50LFxyXG5cdFx0cHVibGljIHRyYW5zbG9jb1NlcnZpY2U6IFRyYW5zbG9jb1NlcnZpY2VcclxuXHQpIHtcclxuXHRcdHN1cGVyKCk7XHJcblx0XHRlZmZlY3QoKCkgPT4ge1xyXG5cdFx0XHRjb25zdCBwc2sgPSB0aGlzLnBhcmVudFNlbGVjdGlvbktleSgpIGFzIHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbDtcclxuXHRcdFx0aWYgKHRoaXMuZ3JvdXBOYW1lKCkgfHwgcHNrKSB7XHJcblx0XHRcdFx0aWYgKHRoaXMuaXNNdWx0aXBsZSgpICYmIEFycmF5LmlzQXJyYXkocHNrKSAmJiBwc2subGVuZ3RoID49IDIpIHtcclxuXHRcdFx0XHRcdHRoaXMuZ2V0R3JvdXBlZFNlbGVjdGlvbkl0ZW1zKHBzayk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHRoaXMuZ2V0U2VsZWN0aW9uSXRlbXMoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdC8vIGV4Y2x1ZGVkS2V5cyBkZcSfacWfaW5jZSBpdGVtIGxpc3Rlc2luaSB5ZW5pZGVuIGZpbHRyZWxlIChjYWNoZSBrb3J1bnVyLCByZWZldGNoIHlvaylcclxuXHRcdGVmZmVjdCgoKSA9PiB7XHJcblx0XHRcdHRoaXMuZXhjbHVkZWRLZXlzKCk7XHJcblx0XHRcdGlmICh0aGlzLnJhd0dyb3Vwcy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0dGhpcy5idWlsZEdyb3VwZWRGcm9tUmF3KCk7XHJcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5vcmlnaW5hbFNlbGVjdGlvbkl0ZW1zLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHR0aGlzLnVwZGF0ZVNlbGVjdGlvbkl0ZW1zVGV4dCgpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHJcblx0XHR0aGlzLnRyYW5zbG9jb1NlcnZpY2UubGFuZ0NoYW5nZXMkLnN1YnNjcmliZSgoKSA9PiB7XHJcblx0XHRcdGlmICh0aGlzLnJhd0dyb3Vwcy5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0dGhpcy5idWlsZEdyb3VwZWRGcm9tUmF3KCk7XHJcblx0XHRcdH0gZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25JdGVtcygpICYmICh0aGlzLnNlbGVjdGlvbkl0ZW1zKCkgYXMgU2VsZWN0Qm94SXRlbVtdKT8ubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdHRoaXMudXBkYXRlU2VsZWN0aW9uSXRlbXNUZXh0KCk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0c2V0VGl0bGUoZXZlbnQ/OiBhbnkpIHtcclxuXHRcdGlmIChldmVudCAmJiBldmVudFt0aGlzLml0ZW1UZXh0KCldLmxlbmd0aCA+IDI1KSB7XHJcblx0XHRcdHRoaXMuc2VsZWN0ZWRJdGVtVGV4dCA9IGV2ZW50ID8gZXZlbnRbdGhpcy5pdGVtVGV4dCgpXSA6ICcnO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5vblNlbGVjdGlvbkNoYW5nZWQuZW1pdChldmVudCk7XHJcblx0fVxyXG5cclxuXHRhc3luYyBnZXRTZWxlY3Rpb25JdGVtcygpIHtcclxuXHRcdGNvbnN0IHBheWxvYWQ6IFBhcnRpYWw8U2VsZWN0aW9uUmVxdWVzdERUTz4gPSB7XHJcblx0XHRcdGdyb3VwTmFtZTogdGhpcy5ncm91cE5hbWUoKVxyXG5cdFx0fTtcclxuXHJcblx0XHRpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnBhcmVudFNlbGVjdGlvbktleSgpKSkge1xyXG5cdFx0XHRwYXlsb2FkLnBhcmVudFNlbGVjdGlvbktleXMgPSB0aGlzLnBhcmVudFNlbGVjdGlvbktleSgpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cGF5bG9hZC5wYXJlbnRTZWxlY3Rpb25LZXkgPSB0aGlzLnBhcmVudFNlbGVjdGlvbktleSgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGhvc3RBcGkgPSBBUElfQ09ORklHUy5nZXRFeHRlcm5hbEFwcEVuZHBvaW50KEFwcHMuTU5HKTtcclxuXHJcblx0XHR0cnkge1xyXG5cdFx0XHRjb25zdCBzZWxlY3Rpb25Hcm91cCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG5cdFx0XHRcdHRoaXMuaHR0cC5wb3N0PFNlbGVjdGlvbkdyb3VwRFRPPihob3N0QXBpICsgJy9zZWxlY3Rpb24tZ3JvdXAvbG9hZCcsIHBheWxvYWQpXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHR0aGlzLm9yaWdpbmFsU2VsZWN0aW9uSXRlbXMgPSBzZWxlY3Rpb25Hcm91cD8uc2VsZWN0aW9uSXRlbXMgfHwgW107XHJcblx0XHR9IGNhdGNoIChlcnJvcikge1xyXG5cdFx0XHR0aGlzLm9yaWdpbmFsU2VsZWN0aW9uSXRlbXMgPSBbXTtcclxuXHRcdH1cclxuXHRcdC8vIEZsYXQgbW9kYSBkw7ZuIChhd2FpdCBzb25yYXPEsSDigJQgZWZmZWN0IGNvbnRleHQgZMSxxZ/EsSBvbGR1xJ91IGnDp2luIHNpZ25hbCB5YXrEsW3EsSBnw7x2ZW5saSlcclxuXHRcdHRoaXMucmF3R3JvdXBzID0gW107XHJcblx0XHR0aGlzLnJhd1BhcmVudEl0ZW1zID0gW107XHJcblx0XHR0aGlzLmdyb3VwZWRTZWxlY3Rpb25JdGVtcy5zZXQobnVsbCk7XHJcblx0XHR0aGlzLmlzR3JvdXBlZC5zZXQoZmFsc2UpO1xyXG5cdFx0dGhpcy51cGRhdGVTZWxlY3Rpb25JdGVtc1RleHQoKTtcclxuXHR9XHJcblxyXG5cdC8vIFBhcmVudCAobXVsdGlwbGUpIOKJpTIgc2XDp2lsaXlrZW4gaGVyIHBhcmVudCBpw6dpbiBheXLEsSBpc3RlayBhdMSxbMSxciAobG9hZC1hbGwgYmF0Y2gpXHJcblx0Ly8gdmUgY2hpbGQgaXRlbSdsYXIgcGFyZW50IGJhxZ/EsW5hIGdydXBsYW7EsXIuIEdydXAgYmHFn2zEscSfxLEgcGFyZW50J8SxbiBsb2thbGl6ZSBkaXNwbGF5J2lkaXIuXHJcblx0YXN5bmMgZ2V0R3JvdXBlZFNlbGVjdGlvbkl0ZW1zKHBhcmVudEtleXM6IHN0cmluZ1tdKSB7XHJcblx0XHRjb25zdCBjaGlsZEdyb3VwTmFtZSA9IHRoaXMuZ3JvdXBOYW1lKCk7XHJcblx0XHRjb25zdCBwYXJlbnRHcm91cE5hbWUgPSB0aGlzLnBhcmVudEdyb3VwTmFtZSgpO1xyXG5cdFx0Y29uc3QgaGFzUGFyZW50R3JvdXAgPSAhIXBhcmVudEdyb3VwTmFtZTtcclxuXHJcblx0XHRjb25zdCByZXF1ZXN0czogUGFydGlhbDxTZWxlY3Rpb25SZXF1ZXN0RFRPPltdID0gW107XHJcblx0XHRpZiAoaGFzUGFyZW50R3JvdXApIHtcclxuXHRcdFx0cmVxdWVzdHMucHVzaCh7IGdyb3VwTmFtZTogcGFyZW50R3JvdXBOYW1lIH0pO1xyXG5cdFx0fVxyXG5cdFx0cGFyZW50S2V5cy5mb3JFYWNoKChrZXkpID0+IHtcclxuXHRcdFx0cmVxdWVzdHMucHVzaCh7IGdyb3VwTmFtZTogY2hpbGRHcm91cE5hbWUsIHBhcmVudFNlbGVjdGlvbktleToga2V5IH0pO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0Y29uc3QgaG9zdEFwaSA9IEFQSV9DT05GSUdTLmdldEV4dGVybmFsQXBwRW5kcG9pbnQoQXBwcy5NTkcpO1xyXG5cclxuXHRcdGxldCBncm91cHM6IFNlbGVjdGlvbkdyb3VwRFRPW10gPSBbXTtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGdyb3VwcyA9XHJcblx0XHRcdFx0KGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG5cdFx0XHRcdFx0dGhpcy5odHRwLnBvc3Q8U2VsZWN0aW9uR3JvdXBEVE9bXT4oaG9zdEFwaSArICcvc2VsZWN0aW9uLWdyb3VwL2xvYWQtYWxsJywgcmVxdWVzdHMpXHJcblx0XHRcdFx0KSkgfHwgW107XHJcblx0XHR9IGNhdGNoIChlcnJvcikge1xyXG5cdFx0XHRncm91cHMgPSBbXTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnJhd1BhcmVudEl0ZW1zID0gaGFzUGFyZW50R3JvdXAgPyBncm91cHNbMF0/LnNlbGVjdGlvbkl0ZW1zIHx8IFtdIDogW107XHJcblx0XHRjb25zdCBjaGlsZEdyb3VwcyA9IGhhc1BhcmVudEdyb3VwID8gZ3JvdXBzLnNsaWNlKDEpIDogZ3JvdXBzO1xyXG5cdFx0dGhpcy5yYXdHcm91cHMgPSBwYXJlbnRLZXlzLm1hcCgocGFyZW50S2V5LCBpbmRleCkgPT4gKHtcclxuXHRcdFx0cGFyZW50S2V5LFxyXG5cdFx0XHRpdGVtczogY2hpbGRHcm91cHNbaW5kZXhdPy5zZWxlY3Rpb25JdGVtcyB8fCBbXVxyXG5cdFx0fSkpO1xyXG5cclxuXHRcdHRoaXMuYnVpbGRHcm91cGVkRnJvbVJhdygpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBidWlsZEdyb3VwZWRGcm9tUmF3KCkge1xyXG5cdFx0Y29uc3QgZXhjbHVkZWQgPSBuZXcgU2V0KHRoaXMuZXhjbHVkZWRLZXlzKCkgfHwgW10pO1xyXG5cdFx0Y29uc3QgcGFyZW50RGlzcGxheU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XHJcblx0XHR0aGlzLnJhd1BhcmVudEl0ZW1zLmZvckVhY2goKGl0ZW06IFNlbGVjdGlvbkl0ZW0pID0+IHtcclxuXHRcdFx0cGFyZW50RGlzcGxheU1hcC5zZXQoaXRlbS5zZWxlY3Rpb25LZXksIHRoaXMucmVzb2x2ZURpc3BsYXkoaXRlbSkpO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0Y29uc3QgYnVpbHQ6IEdyb3VwZWRTZWxlY3Rpb25JdGVtW10gPSB0aGlzLnJhd0dyb3Vwcy5tYXAoKGdyb3VwKSA9PiAoe1xyXG5cdFx0XHRsYWJlbDogcGFyZW50RGlzcGxheU1hcC5nZXQoZ3JvdXAucGFyZW50S2V5KSA/PyBncm91cC5wYXJlbnRLZXksXHJcblx0XHRcdGl0ZW1zOiBncm91cC5pdGVtc1xyXG5cdFx0XHRcdC5maWx0ZXIoKGl0ZW06IFNlbGVjdGlvbkl0ZW0pID0+ICFleGNsdWRlZC5oYXMoaXRlbS5zZWxlY3Rpb25LZXkpKVxyXG5cdFx0XHRcdC5tYXAoKGl0ZW06IFNlbGVjdGlvbkl0ZW0pID0+ICh7XHJcblx0XHRcdFx0XHRrZXk6IGl0ZW0uc2VsZWN0aW9uS2V5LFxyXG5cdFx0XHRcdFx0dGV4dDogdGhpcy5yZXNvbHZlRGlzcGxheShpdGVtKVxyXG5cdFx0XHRcdH0pKVxyXG5cdFx0fSkpO1xyXG5cclxuXHRcdHRoaXMuc2VsZWN0aW9uSXRlbXMuc2V0KG51bGwpO1xyXG5cdFx0dGhpcy5zZWxlY3RCb3hEYXRhU291cmNlLnNldChudWxsKTtcclxuXHRcdHRoaXMuZ3JvdXBlZFNlbGVjdGlvbkl0ZW1zLnNldChidWlsdCk7XHJcblx0XHR0aGlzLmlzR3JvdXBlZC5zZXQodHJ1ZSk7XHJcblx0XHR0aGlzLmZpbHRlckN1cnJlbnRWYWx1ZUJ5U2VsZWN0aW9uSXRlbXMoKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcmVzb2x2ZURpc3BsYXkoaXRlbTogU2VsZWN0aW9uSXRlbSk6IHN0cmluZyB7XHJcblx0XHRjb25zdCBsYW5nID0gdGhpcy50cmFuc2xvY29TZXJ2aWNlLmdldEFjdGl2ZUxhbmcoKTtcclxuXHRcdHJldHVybiBpdGVtPy5zZWxlY3Rpb25NdWx0aUxhbmd1YWdlRGlzcGxheXM/LltsYW5nXSB8fCBpdGVtLnNlbGVjdGlvbkRpc3BsYXk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldFZpc2libGVJdGVtcygpOiBTZWxlY3RCb3hJdGVtW10ge1xyXG5cdFx0aWYgKHRoaXMuaXNHcm91cGVkKCkpIHtcclxuXHRcdFx0cmV0dXJuICh0aGlzLmdyb3VwZWRTZWxlY3Rpb25JdGVtcygpIHx8IFtdKS5mbGF0TWFwKChncm91cCkgPT4gZ3JvdXAuaXRlbXMpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRoaXMuc2VsZWN0aW9uSXRlbXMoKSB8fCBbXTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgdXBkYXRlU2VsZWN0aW9uSXRlbXNUZXh0KCkge1xyXG5cdFx0aWYgKCF0aGlzLm9yaWdpbmFsU2VsZWN0aW9uSXRlbXMgfHwgdGhpcy5vcmlnaW5hbFNlbGVjdGlvbkl0ZW1zLmxlbmd0aCA9PT0gMCkge1xyXG5cdFx0XHR0aGlzLnNlbGVjdGlvbkl0ZW1zLnNldChudWxsKTtcclxuXHRcdFx0dGhpcy5zZWxlY3RCb3hEYXRhU291cmNlLnNldChudWxsKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuc2VsZWN0aW9uSXRlbXMuc2V0KG51bGwpO1xyXG5cclxuXHRcdGNvbnN0IGV4Y2x1ZGVkID0gbmV3IFNldCh0aGlzLmV4Y2x1ZGVkS2V5cygpIHx8IFtdKTtcclxuXHRcdGNvbnN0IG1hcHBlZEl0ZW1zID0gdGhpcy5vcmlnaW5hbFNlbGVjdGlvbkl0ZW1zXHJcblx0XHRcdC5maWx0ZXIoKGl0ZW06IFNlbGVjdGlvbkl0ZW0pID0+ICFleGNsdWRlZC5oYXMoaXRlbS5zZWxlY3Rpb25LZXkpKVxyXG5cdFx0XHQubWFwKChpdGVtOiBTZWxlY3Rpb25JdGVtKSA9PiAoe1xyXG5cdFx0XHRcdGtleTogaXRlbS5zZWxlY3Rpb25LZXksXHJcblx0XHRcdFx0dGV4dDogdGhpcy5yZXNvbHZlRGlzcGxheShpdGVtKSxcclxuXHRcdFx0XHRwYXJlbnRTZWxlY3Rpb25LZXk6IGl0ZW0ucGFyZW50U2VsZWN0aW9uS2V5XHJcblx0XHRcdH0pKTtcclxuXHJcblx0XHR0aGlzLnNlbGVjdGlvbkl0ZW1zLnNldChtYXBwZWRJdGVtcyk7XHJcblx0XHR0aGlzLnJlYnVpbGRTZWxlY3RCb3hEYXRhU291cmNlKG1hcHBlZEl0ZW1zKTtcclxuXHRcdHRoaXMuZmlsdGVyQ3VycmVudFZhbHVlQnlTZWxlY3Rpb25JdGVtcygpO1xyXG5cdH1cclxuXHJcblx0Ly8gUGFyZW50IGVudW0gKG11bHRpcGxlKSBkZcSfacWfdGnEn2luZGUgdmV5YSBleGNsdWRlZEtleXMgYWt0aWZrZW5cclxuXHQvLyBmb3JtJ2Rha2kgZ2XDp2Vyc2l6IGtleSdsZXJpIHRlbWl6bGVyIChzZWxlY3Rpb25JdGVtcyB6YXRlbiBmaWx0cmVsZW5tacWfIGhhbGl5bGUgZ2VsaXIpLlxyXG5cdGZpbHRlckN1cnJlbnRWYWx1ZUJ5U2VsZWN0aW9uSXRlbXMoKTogdm9pZCB7XHJcblx0XHRjb25zdCBoYXNFeGNsdWRlZCA9ICh0aGlzLmV4Y2x1ZGVkS2V5cygpIHx8IFtdKS5sZW5ndGggPiAwO1xyXG5cdFx0aWYgKCF0aGlzLnBhcmVudFNlbGVjdGlvbktleSgpICYmICFoYXNFeGNsdWRlZCkgcmV0dXJuO1xyXG5cdFx0Y29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5uZ0NvbnRyb2wuY29udHJvbD8udmFsdWU7XHJcblx0XHRjb25zdCB2YWxpZEtleXMgPSBuZXcgU2V0KFxyXG5cdFx0XHR0aGlzLmdldFZpc2libGVJdGVtcygpLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtW3RoaXMuaXRlbUtleSgpXSlcclxuXHRcdCk7XHJcblxyXG5cdFx0aWYgKHRoaXMuaXNNdWx0aXBsZSgpKSB7XHJcblx0XHRcdC8vIENoaWxkIG11bHRpLXNlbGVjdDogZ2XDp2Vyc2l6IGtleSdsZXJpIGZpbHRyZWxlLCBnZcOnZXJsaWxlcmkgYsSxcmFrXHJcblx0XHRcdGlmICghQXJyYXkuaXNBcnJheShjdXJyZW50VmFsdWUpIHx8IGN1cnJlbnRWYWx1ZS5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHRcdFx0Y29uc3QgZmlsdGVyZWQgPSAoY3VycmVudFZhbHVlIGFzIHN0cmluZ1tdKS5maWx0ZXIoKGtleSkgPT4gdmFsaWRLZXlzLmhhcyhrZXkpKTtcclxuXHRcdFx0aWYgKGZpbHRlcmVkLmxlbmd0aCAhPT0gY3VycmVudFZhbHVlLmxlbmd0aCkge1xyXG5cdFx0XHRcdHRoaXMubmdDb250cm9sLmNvbnRyb2w/LnNldFZhbHVlKGZpbHRlcmVkLCB7IGVtaXRFdmVudDogdHJ1ZSB9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aWYgKCFjdXJyZW50VmFsdWUpIHJldHVybjtcclxuXHJcblx0XHRcdGlmICghdmFsaWRLZXlzLmhhcyhjdXJyZW50VmFsdWUpKSB7XHJcblx0XHRcdFx0dGhpcy5uZ0NvbnRyb2wuY29udHJvbD8ucmVzZXQobnVsbCwgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG9uQ3VzdG9tSXRlbUNyZWF0aW5nKGV2ZW50OiBhbnkpIHtcclxuXHRcdGlmICghZXZlbnQudGV4dCkge1xyXG5cdFx0XHRldmVudC5jdXN0b21JdGVtID0gbnVsbDtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgbmV3SXRlbSA9IHtcclxuXHRcdFx0W3RoaXMuaXRlbUtleSgpXTogZXZlbnQudGV4dCxcclxuXHRcdFx0W3RoaXMuaXRlbVRleHQoKV06IGV2ZW50LnRleHRcclxuXHRcdH07XHJcblx0XHRjb25zdCBjdXJyZW50SXRlbXMgPSB0aGlzLnNlbGVjdGlvbkl0ZW1zKCkgfHwgW107XHJcblx0XHRjb25zdCB1cGRhdGVkSXRlbXMgPSBbLi4uY3VycmVudEl0ZW1zLCBuZXdJdGVtXTtcclxuXHRcdHRoaXMuc2VsZWN0aW9uSXRlbXMuc2V0KHVwZGF0ZWRJdGVtcyk7XHJcblx0XHR0aGlzLnJlYnVpbGRTZWxlY3RCb3hEYXRhU291cmNlKHVwZGF0ZWRJdGVtcyk7XHJcblx0XHRldmVudC5jdXN0b21JdGVtID0gbmV3SXRlbTtcclxuXHR9XHJcblxyXG5cdFx0cHJpdmF0ZSByZWJ1aWxkU2VsZWN0Qm94RGF0YVNvdXJjZShpdGVtczogU2VsZWN0Qm94SXRlbVtdKTogdm9pZCB7XHJcblx0XHRpZiAoIXRoaXMudXNlVmlydHVhbFNjcm9sbCgpKSB7XHJcblx0XHRcdHRoaXMuc2VsZWN0Qm94RGF0YVNvdXJjZS5zZXQobnVsbCk7XHJcblx0XHRcdHJldHVybjtcclxuXHRcdH1cclxuXHRcdHRoaXMuc2VsZWN0Qm94RGF0YVNvdXJjZS5zZXQoXHJcblx0XHRcdG5ldyBEYXRhU291cmNlKHtcclxuXHRcdFx0XHRzdG9yZTogbmV3IEFycmF5U3RvcmUoe1xyXG5cdFx0XHRcdFx0ZGF0YTogaXRlbXMsXHJcblx0XHRcdFx0XHRrZXk6IHRoaXMuaXRlbUtleSgpXHJcblx0XHRcdFx0fSksXHJcblx0XHRcdFx0cGFnaW5hdGU6IHRydWUsXHJcblx0XHRcdFx0cGFnZVNpemU6IDUwXHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG4iLCJAaWYgKGlzTXVsdGlwbGUoKSkge1xyXG5cdDxwLW11bHRpU2VsZWN0XHJcblx0XHRbb3B0aW9uc109XCJpc0dyb3VwZWQoKSA/IChncm91cGVkU2VsZWN0aW9uSXRlbXMoKSB8fCBbXSkgOiAoc2VsZWN0aW9uSXRlbXMoKSB8fCBpdGVtcygpIHx8IFtdKVwiXHJcblx0XHRbZ3JvdXBdPVwiaXNHcm91cGVkKClcIlxyXG5cdFx0W29wdGlvblZhbHVlXT1cIml0ZW1LZXkoKVwiXHJcblx0XHRbb3B0aW9uTGFiZWxdPVwiaXRlbVRleHQoKVwiXHJcblx0XHRbZGVmYXVsdExhYmVsXT1cInBsYWNlaG9sZGVyKClcIlxyXG5cdFx0W3NlbGVjdGVkSXRlbXNMYWJlbF09XCJzZWxlY3RlZEl0ZW1zTGFiZWwoKVwiXHJcblx0XHRbc3R5bGVdPVwic3R5bGUoKVwiXHJcblx0XHRbc3R5bGVDbGFzc109XCJzdHlsZUNsYXNzKClcIlxyXG5cdFx0W3Rvb2x0aXBdPVwidG9vbHRpcCgpXCJcclxuXHRcdFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uKClcIlxyXG5cdFx0W2Zvcm1Db250cm9sXT1cIm5nQ29udHJvbC5jb250cm9sXCJcclxuXHRcdChuZ01vZGVsQ2hhbmdlKT1cIm5nQ29udHJvbC52aWV3VG9Nb2RlbFVwZGF0ZSgkZXZlbnQpXCJcclxuXHRcdFttYXhTZWxlY3RlZExhYmVsc109XCIyXCJcclxuXHRcdFthcHBlbmRUb109XCJhcHBlbmRUbygpXCJcclxuXHRcdFt2aXJ0dWFsU2Nyb2xsXT1cInVzZVZpcnR1YWxTY3JvbGwoKVwiXHJcblx0XHRbdmlydHVhbFNjcm9sbEl0ZW1TaXplXT1cInZpcnR1YWxTY3JvbGxJdGVtU2l6ZSgpXCJcclxuXHRcdFtzY3JvbGxIZWlnaHRdPVwic2Nyb2xsSGVpZ2h0KClcIlxyXG5cdFx0W2ZpbHRlcl09XCJ0cnVlXCJcclxuXHRcdFtwYW5lbFN0eWxlXT1cInsgJ21heC13aWR0aCc6ICc0MDBweCcsICdtaW4td2lkdGgnOiAnYXV0bycgfVwiPlxyXG5cdFx0QGlmIChpc0dyb3VwZWQoKSkge1xyXG5cdFx0XHQ8bmctdGVtcGxhdGUgbGV0LWdyb3VwIHBUZW1wbGF0ZT1cImdyb3VwXCI+XHJcblx0XHRcdFx0PHNwYW4+e3sgZ3JvdXAubGFiZWwgfX08L3NwYW4+XHJcblx0XHRcdDwvbmctdGVtcGxhdGU+XHJcblx0XHR9XHJcblx0XHQ8bmctdGVtcGxhdGUgbGV0LWVudW0gcFRlbXBsYXRlPVwiaXRlbVwiPlxyXG5cdFx0XHQ8ZGl2IFtwVG9vbHRpcF09XCJlbnVtW2l0ZW1UZXh0KCldPy5sZW5ndGggPiB0ZXh0Q2xhbXBDaGFyYWN0ZXJzKCkgPyBlbnVtW2l0ZW1UZXh0KCldIDogJydcIj5cclxuXHRcdFx0XHRAaWYgKGVudW1baXRlbVRleHQoKV0/Lmxlbmd0aCA+IHRleHRDbGFtcENoYXJhY3RlcnMoKSkge1xyXG5cdFx0XHRcdFx0e3sgZW51bVtpdGVtVGV4dCgpXS5zbGljZSgwLCB0ZXh0Q2xhbXBDaGFyYWN0ZXJzKCkpIH19Li4uXHJcblx0XHRcdFx0fSBAZWxzZSB7XHJcblx0XHRcdFx0XHR7eyBlbnVtW2l0ZW1UZXh0KCldIH19XHJcblx0XHRcdFx0fVxyXG5cdFx0XHQ8L2Rpdj5cclxuXHRcdDwvbmctdGVtcGxhdGU+XHJcblx0PC9wLW11bHRpU2VsZWN0PlxyXG59IEBlbHNlIHtcclxuXHQ8ZHgtc2VsZWN0LWJveFxyXG4gICAgW2RhdGFTb3VyY2VdPVwidXNlVmlydHVhbFNjcm9sbCgpID8gc2VsZWN0Qm94RGF0YVNvdXJjZSgpIDogKHNlbGVjdGlvbkl0ZW1zKCkgfHwgaXRlbXMoKSB8fCBbXSlcIlxyXG5cdFx0W3ZhbHVlRXhwcl09XCJpdGVtS2V5KClcIlxyXG5cdFx0W2Rpc3BsYXlFeHByXT1cIml0ZW1UZXh0KClcIlxyXG5cdFx0W3NlYXJjaEVuYWJsZWRdPVwidHJ1ZVwiXHJcblx0XHRbc2VhcmNoRXhwcl09XCJzZWFyY2hFeHByKClcIlxyXG5cdFx0W3RhYkluZGV4XT1cInRhYmluZGV4KClcIlxyXG5cdFx0W2dyb3VwZWRdPVwiZ3JvdXBlZCgpXCJcclxuXHRcdFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlcigpXCJcclxuXHRcdFtzaG93Q2xlYXJCdXR0b25dPVwic2hvd0NsZWFyQnV0dG9uKClcIlxyXG5cdFx0W2FjY2VwdEN1c3RvbVZhbHVlXT1cImFjY2VwdEN1c3RvbVZhbHVlKClcIlxyXG5cdFx0KG9uQ3VzdG9tSXRlbUNyZWF0aW5nKT1cIm9uQ3VzdG9tSXRlbUNyZWF0aW5nKCRldmVudClcIlxyXG5cdFx0W2lzVmFsaWRdPVwibmdDb250cm9sPy5jb250cm9sPy52YWxpZCB8fCBuZ0NvbnRyb2w/LmNvbnRyb2w/LnByaXN0aW5lIHx8IG5nQ29udHJvbD8uY29udHJvbD8uZGlzYWJsZWQgfHwgZmFsc2VcIlxyXG5cdFx0W3ZhbGlkYXRpb25FcnJvcl09XCJuZ0NvbnRyb2w/LmNvbnRyb2w/LmVycm9ycyB8IGR4SW5wdXRFcnJvck1lc3NhZ2U6IG5nQ29udHJvbD8uY29udHJvbFwiXHJcblx0XHR2YWxpZGF0aW9uTWVzc2FnZVBvc2l0aW9uPVwidG9wXCJcclxuXHRcdFtub0RhdGFUZXh0XT1cInRyYW5zbG9jb1NlcnZpY2UudHJhbnNsYXRlKCdtZXNzYWdlcy5ub0RhdGFUb0Rpc3BsYXknKVwiXHJcblx0XHRbZm9ybUNvbnRyb2xdPVwibmdDb250cm9sLmNvbnRyb2xcIlxyXG5cdFx0KG5nTW9kZWxDaGFuZ2UpPVwibmdDb250cm9sLnZpZXdUb01vZGVsVXBkYXRlKCRldmVudClcIlxyXG4gICAgKG9uU2VsZWN0aW9uQ2hhbmdlZCk9XCJvblNlbGVjdGlvbkNoYW5nZWQuZW1pdCgkZXZlbnQuc2VsZWN0ZWRJdGVtKTtzZXRUaXRsZSgkZXZlbnQuc2VsZWN0ZWRJdGVtKVwiXHJcbiAgICBbaW5wdXRBdHRyXT1cInsgJ3RpdGxlJzogc2VsZWN0ZWRJdGVtVGV4dCB9XCI+XHJcblx0PC9keC1zZWxlY3QtYm94PlxyXG59XHJcbiJdfQ==
286
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC91aS1idXNpbmVzcy9lbnVtUGlja2VyL3NyYy9lbnVtLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcmlsL3VpLWJ1c2luZXNzL2VudW1QaWNrZXIvc3JjL2VudW0tcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFaEQsT0FBTyxFQUFFLGVBQWUsRUFBb0IsTUFBTSxtQkFBbUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNyRSxPQUFPLFVBQVUsTUFBTSw2QkFBNkIsQ0FBQztBQUNyRCxPQUFPLFVBQVUsTUFBTSw2QkFBNkIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXRDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0MsT0FBTyxFQUNOLGtCQUFrQixFQUNsQix1QkFBdUIsRUFDdkIscUJBQXFCLEVBQ3JCLHNCQUFzQixFQUN0QixNQUFNLGFBQWEsQ0FBQzs7Ozs7Ozs7OztBQXlCckIsTUFBTSxPQUFPLG1CQUFvQixTQUFRLGtCQUFrQjtJ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LENBQUM7K0dBdlJXLG1CQUFtQjttR0FBbkIsbUJBQW1CLHUrR0FIcEIsQ0FBQyxxQkFBcUIsQ0FBQyw2R0MxQ25DLDBsRkEyREEsMkNEeEJFLG1CQUFtQix5VEFDbkIsaUJBQWlCLDRxRkFDakIsdUJBQXVCLDJEQUN2QixlQUFlLDhCQUNmLGlCQUFpQiwyN0NBQ2pCLGFBQWE7OzRGQUtGLG1CQUFtQjtrQkFmL0IsU0FBUztpQ0FDRyxJQUFJLFlBQ04sOEVBQThFLFdBRS9FO3dCQUNSLG1CQUFtQjt3QkFDbkIsaUJBQWlCO3dCQUNqQix1QkFBdUI7d0JBQ3ZCLGVBQWU7d0JBQ2YsaUJBQWlCO3dCQUNqQixhQUFhO3FCQUNiLGFBQ1UsQ0FBQyxxQkFBcUIsQ0FBQyxrQkFDbEIsQ0FBQyxzQkFBc0IsQ0FBQzs4R0FtRDlCLGtCQUFrQjtzQkFBM0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIGVmZmVjdCwgaW5wdXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuaW1wb3J0IHsgTXVsdGlTZWxlY3RNb2R1bGUgfSBmcm9tICdwcmltZW5nL211bHRpc2VsZWN0JztcclxuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9vbHRpcCc7XHJcblxyXG5pbXBvcnQgeyBUcmFuc2xvY29Nb2R1bGUsIFRyYW5zbG9jb1NlcnZpY2UgfSBmcm9tICdAbmduZWF0L3RyYW5zbG9jbyc7XHJcbmltcG9ydCB7IER4U2VsZWN0Qm94TW9kdWxlIH0gZnJvbSAnZGV2ZXh0cmVtZS1hbmd1bGFyL3VpL3NlbGVjdC1ib3gnO1xyXG5pbXBvcnQgQXJyYXlTdG9yZSBmcm9tICdkZXZleHRyZW1lL2RhdGEvYXJyYXlfc3RvcmUnO1xyXG5pbXBvcnQgRGF0YVNvdXJjZSBmcm9tICdkZXZleHRyZW1lL2RhdGEvZGF0YV9zb3VyY2UnO1xyXG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgQVBJX0NPTkZJR1MgfSBmcm9tICdhcmlsL2Jvb3QvY29uZmlnL2FwaSc7XHJcbmltcG9ydCB7IEFwcHMgfSBmcm9tICdhcmlsL2Jvb3QvY29uZmlnL2FwcHMnO1xyXG5pbXBvcnQge1xyXG5cdEJhc2VJbnB1dENvbXBvbmVudCxcclxuXHREWElucHV0RXJyb3JNZXNzYWdlUGlwZSxcclxuXHRJbnB1dEVycm9yTWVzc2FnZVBpcGUsXHJcblx0VmFsdWVBY2Nlc3NvckRpcmVjdGl2ZVxyXG59IGZyb20gJ2FyaWwvdWkvbGliJztcclxuXHJcbmltcG9ydCB7XHJcblx0R3JvdXBlZFNlbGVjdGlvbkl0ZW0sXHJcblx0U2VsZWN0Qm94SXRlbSxcclxuXHRTZWxlY3Rpb25Hcm91cERUTyxcclxuXHRTZWxlY3Rpb25JdGVtLFxyXG5cdFNlbGVjdGlvblJlcXVlc3REVE9cclxufSBmcm9tICcuL2ludGVyZmFjZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzdGFuZGFsb25lOiB0cnVlLFxyXG5cdHNlbGVjdG9yOiAnZW51bS1waWNrZXJbbmdNb2RlbF0sIGVudW0tcGlja2VyW2Zvcm1Db250cm9sXSwgZW51bS1waWNrZXJbZm9ybUNvbnRyb2xOYW1lXScsXHJcblx0dGVtcGxhdGVVcmw6ICcuL2VudW0tcGlja2VyLmNvbXBvbmVudC5odG1sJyxcclxuXHRpbXBvcnRzOiBbXHJcblx0XHRSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG5cdFx0RHhTZWxlY3RCb3hNb2R1bGUsXHJcblx0XHREWElucHV0RXJyb3JNZXNzYWdlUGlwZSxcclxuXHRcdFRyYW5zbG9jb01vZHVsZSxcclxuXHRcdE11bHRpU2VsZWN0TW9kdWxlLFxyXG5cdFx0VG9vbHRpcE1vZHVsZVxyXG5cdF0sXHJcblx0cHJvdmlkZXJzOiBbSW5wdXRFcnJvck1lc3NhZ2VQaXBlXSxcclxuXHRob3N0RGlyZWN0aXZlczogW1ZhbHVlQWNjZXNzb3JEaXJlY3RpdmVdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFbnVtUGlja2VyQ29tcG9uZW50IGV4dGVuZHMgQmFzZUlucHV0Q29tcG9uZW50IHtcclxuXHRzZWxlY3Rpb25JdGVtcyA9IHNpZ25hbDxTZWxlY3RCb3hJdGVtW10gfCBudWxsPihudWxsKTtcclxuXHRzZWxlY3RCb3hEYXRhU291cmNlID0gc2lnbmFsPERhdGFTb3VyY2UgfCBudWxsPihudWxsKTtcclxuXHRncm91cGVkU2VsZWN0aW9uSXRlbXMgPSBzaWduYWw8R3JvdXBlZFNlbGVjdGlvbkl0ZW1bXSB8IG51bGw+KG51bGwpO1xyXG5cdGlzR3JvdXBlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XHJcblx0cHJpdmF0ZSBvcmlnaW5hbFNlbGVjdGlvbkl0ZW1zOiBTZWxlY3Rpb25JdGVtW10gPSBbXTtcclxuXHRwcml2YXRlIHJhd1BhcmVudEl0ZW1zOiBTZWxlY3Rpb25JdGVtW10gPSBbXTtcclxuXHRwcml2YXRlIHJhd0dyb3VwczogeyBwYXJlbnRLZXk6IHN0cmluZzsgaXRlbXM6IFNlbGVjdGlvbkl0ZW1bXSB9W10gPSBbXTtcclxuXHQvKipcclxuXHQgKiBTaW5nbGUgU2VsZWN0IFN0YXRlc1xyXG5cdCAqL1xyXG5cclxuXHRpdGVtS2V5ID0gaW5wdXQoJ2tleScpO1xyXG5cdGl0ZW1UZXh0ID0gaW5wdXQoJ3RleHQnKTtcclxuXHRncm91cE5hbWUgPSBpbnB1dCgnJyk7XHJcblx0cGFyZW50U2VsZWN0aW9uS2V5ID0gaW5wdXQ8c3RyaW5nIHwgbnVsbD4obnVsbCk7XHJcblx0cGFyZW50R3JvdXBOYW1lID0gaW5wdXQ8c3RyaW5nPignJyk7XHJcblx0dGFiaW5kZXggPSBpbnB1dDxudW1iZXI+KDApO1xyXG5cdGl0ZW1zID0gaW5wdXQ8U2VsZWN0Qm94SXRlbVtdPigpO1xyXG5cdGlzTXVsdGlwbGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblx0Ly8gQ3Jvc3MtdmFsaWRhdGlvbiBSZW1vdmVJdGVtIGFjdGlvbiBpbGUgc2V0IGVkaWxpcjsgdmVyaWxlbiBzZWxlY3Rpb25LZXknbGVyaSBpdGVtIGxpc3Rlc2luZGVuIGZpbHRyZWxlci5cclxuXHRleGNsdWRlZEtleXMgPSBpbnB1dDxzdHJpbmdbXT4oW10pO1xyXG5cdHNlbGVjdGVkSXRlbVRleHQgPSAnJztcclxuXHQvKiogKiBAZGVzY3JpcHRpb24gd2hlbiBncm91cGVkID0gdHJ1ZSwgb3B0aW9uIGl0ZW0gc3RydWN0dXJlIHsga2V5OnN0cmluZywgaXRlbXM6W10gfSAqL1xyXG5cdGdyb3VwZWQgPSBpbnB1dChmYWxzZSk7XHJcblx0c2hvd0NsZWFyQnV0dG9uID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XHJcblx0cGxhY2Vob2xkZXIgPSBpbnB1dDxzdHJpbmc+KCcnKTtcclxuXHRzZWFyY2hFeHByID0gaW5wdXQ8c3RyaW5nIHwgc3RyaW5nW10+KCcnKTtcclxuXHRhY2NlcHRDdXN0b21WYWx1ZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuXHR0ZXh0Q2xhbXBDaGFyYWN0ZXJzID0gaW5wdXQ8bnVtYmVyPig0MCk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFZpcnR1YWwgU2Nyb2xsIFN0YXRlc1xyXG5cdCAqL1xyXG5cdHVzZVZpcnR1YWxTY3JvbGwgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcblx0dmlydHVhbFNjcm9sbEl0ZW1TaXplID0gaW5wdXQ8bnVtYmVyPigzMCk7XHJcblx0c2Nyb2xsSGVpZ2h0ID0gaW5wdXQ8c3RyaW5nPignMzAwcHgnKTtcclxuXHJcblx0LyoqXHJcblx0ICogTXVsdGkgU2VsZWN0IFN0YXRlc1xyXG5cdCAqL1xyXG5cclxuXHRzZWxlY3RlZEl0ZW1zTGFiZWwgPSBpbnB1dDxzdHJpbmc+KCd7MH0gIGRlxJ9lciBzZcOnaWxkaScpOyAvLyBkZWZhdWx0IHZhbHVlIC0+ICh7MH0gaXRlbXMgc2VsZWN0ZWRcclxuXHRhcHBlbmRUbyA9IGlucHV0PHN0cmluZz4oJ2JvZHknKTtcclxuXHRzdHlsZSA9IGlucHV0PG9iamVjdD4oe30pO1xyXG5cdHN0eWxlQ2xhc3MgPSBpbnB1dDxzdHJpbmc+KCcnKTtcclxuXHR0b29sdGlwID0gaW5wdXQ8c3RyaW5nPignJyk7XHJcblx0dG9vbHRpcFBvc2l0aW9uID0gaW5wdXQ8YW55PigndG9wJyk7XHJcblxyXG5cdEBPdXRwdXQoKSBvblNlbGVjdGlvbkNoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFNlbGVjdEJveEl0ZW0+KCk7XHJcblxyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHJpdmF0ZSByZWFkb25seSBodHRwOiBIdHRwQ2xpZW50LFxyXG5cdFx0cHVibGljIHRyYW5zbG9jb1NlcnZpY2U6IFRyYW5zbG9jb1NlcnZpY2VcclxuXHQpIHtcclxuXHRcdHN1cGVyKCk7XHJcblx0XHRlZmZlY3QoKCkgPT4ge1xyXG5cdFx0XHRjb25zdCBwc2sgPSB0aGlzLnBhcmVudFNlbGVjdGlvbktleSgpIGFzIHN0cmluZ1tdIHwgc3RyaW5nIHwgbnVsbDtcclxuXHRcdFx0aWYgKHRoaXMuZ3JvdXBOYW1lKCkgfHwgcHNrKSB7XHJcblx0XHRcdFx0aWYgKHRoaXMuaXNNdWx0aXBsZSgpICYmIEFycmF5LmlzQXJyYXkocHNrKSAmJiBwc2subGVuZ3RoID49IDIpIHtcclxuXHRcdFx0XHRcdHRoaXMuZ2V0R3JvdXBlZFNlbGVjdGlvbkl0ZW1zKHBzayk7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdHRoaXMuZ2V0U2VsZWN0aW9uSXRlbXMoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdC8vIGV4Y2x1ZGVkS2V5cyBkZcSfacWfaW5jZSBpdGVtIGxpc3Rlc2luaSB5ZW5pZGVuIGZpbHRyZWxlIChjYWNoZSBrb3J1bnVyLCByZWZldGNoIHlvaylcclxuXHRcdC8vIGFsbG93U2lnbmFsV3JpdGVzOiBleGNsdWRlZEtleXMgcnVudGltZSdkYSAoaXRlbSdsYXIgecO8a2xlbmRpa3RlbiBzb25yYSkgZGXEn2nFn2luY2VcclxuXHRcdC8vIGJ1aWxkR3JvdXBlZEZyb21SYXcvdXBkYXRlU2VsZWN0aW9uSXRlbXNUZXh0IHNlbmtyb24gc2lnbmFsIHlhemFyOyBidSBlZmZlY3QgacOnaW5kZSBpemlubGkgb2xtYWzEsSAoTkcwNjAwKS5cclxuXHRcdGVmZmVjdChcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHRoaXMuZXhjbHVkZWRLZXlzKCk7XHJcblx0XHRcdFx0aWYgKHRoaXMucmF3R3JvdXBzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdHRoaXMuYnVpbGRHcm91cGVkRnJvbVJhdygpO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAodGhpcy5vcmlnaW5hbFNlbGVjdGlvbkl0ZW1zLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHRcdHRoaXMudXBkYXRlU2VsZWN0aW9uSXRlbXNUZXh0KCk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cclxuXHRcdCk7XHJcblxyXG5cdFx0dGhpcy50cmFuc2xvY29TZXJ2aWNlLmxhbmdDaGFuZ2VzJC5zdWJzY3JpYmUoKCkgPT4ge1xyXG5cdFx0XHRpZiAodGhpcy5yYXdHcm91cHMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdHRoaXMuYnVpbGRHcm91cGVkRnJvbVJhdygpO1xyXG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uSXRlbXMoKSAmJiAodGhpcy5zZWxlY3Rpb25JdGVtcygpIGFzIFNlbGVjdEJveEl0ZW1bXSk/Lmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHR0aGlzLnVwZGF0ZVNlbGVjdGlvbkl0ZW1zVGV4dCgpO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdHNldFRpdGxlKGV2ZW50PzogYW55KSB7XHJcblx0XHRpZiAoZXZlbnQgJiYgZXZlbnRbdGhpcy5pdGVtVGV4dCgpXS5sZW5ndGggPiAyNSkge1xyXG5cdFx0XHR0aGlzLnNlbGVjdGVkSXRlbVRleHQgPSBldmVudCA/IGV2ZW50W3RoaXMuaXRlbVRleHQoKV0gOiAnJztcclxuXHRcdH1cclxuXHRcdHRoaXMub25TZWxlY3Rpb25DaGFuZ2VkLmVtaXQoZXZlbnQpO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgZ2V0U2VsZWN0aW9uSXRlbXMoKSB7XHJcblx0XHRjb25zdCBwYXlsb2FkOiBQYXJ0aWFsPFNlbGVjdGlvblJlcXVlc3REVE8+ID0ge1xyXG5cdFx0XHRncm91cE5hbWU6IHRoaXMuZ3JvdXBOYW1lKClcclxuXHRcdH07XHJcblxyXG5cdFx0Y29uc3QgcHNrID0gdGhpcy5wYXJlbnRTZWxlY3Rpb25LZXkoKSBhcyBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGw7XHJcblx0XHRpZiAoQXJyYXkuaXNBcnJheShwc2spKSB7XHJcblx0XHRcdHBheWxvYWQucGFyZW50U2VsZWN0aW9uS2V5cyA9IHBzaztcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHBheWxvYWQucGFyZW50U2VsZWN0aW9uS2V5ID0gcHNrO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGhvc3RBcGkgPSBBUElfQ09ORklHUy5nZXRFeHRlcm5hbEFwcEVuZHBvaW50KEFwcHMuTU5HKTtcclxuXHJcblx0XHR0cnkge1xyXG5cdFx0XHRjb25zdCBzZWxlY3Rpb25Hcm91cCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG5cdFx0XHRcdHRoaXMuaHR0cC5wb3N0PFNlbGVjdGlvbkdyb3VwRFRPPihob3N0QXBpICsgJy9zZWxlY3Rpb24tZ3JvdXAvbG9hZCcsIHBheWxvYWQpXHJcblx0XHRcdCk7XHJcblxyXG5cdFx0XHR0aGlzLm9yaWdpbmFsU2VsZWN0aW9uSXRlbXMgPSBzZWxlY3Rpb25Hcm91cD8uc2VsZWN0aW9uSXRlbXMgfHwgW107XHJcblx0XHR9IGNhdGNoIChlcnJvcikge1xyXG5cdFx0XHR0aGlzLm9yaWdpbmFsU2VsZWN0aW9uSXRlbXMgPSBbXTtcclxuXHRcdH1cclxuXHRcdC8vIEZsYXQgbW9kYSBkw7ZuIChhd2FpdCBzb25yYXPEsSDigJQgZWZmZWN0IGNvbnRleHQgZMSxxZ/EsSBvbGR1xJ91IGnDp2luIHNpZ25hbCB5YXrEsW3EsSBnw7x2ZW5saSlcclxuXHRcdHRoaXMucmF3R3JvdXBzID0gW107XHJcblx0XHR0aGlzLnJhd1BhcmVudEl0ZW1zID0gW107XHJcblx0XHR0aGlzLmdyb3VwZWRTZWxlY3Rpb25JdGVtcy5zZXQobnVsbCk7XHJcblx0XHR0aGlzLmlzR3JvdXBlZC5zZXQoZmFsc2UpO1xyXG5cdFx0dGhpcy51cGRhdGVTZWxlY3Rpb25JdGVtc1RleHQoKTtcclxuXHR9XHJcblxyXG5cdC8vIFBhcmVudCAobXVsdGlwbGUpIOKJpTIgc2XDp2lsaXlrZW4gaGVyIHBhcmVudCBpw6dpbiBheXLEsSBpc3RlayBhdMSxbMSxciAobG9hZC1hbGwgYmF0Y2gpXHJcblx0Ly8gdmUgY2hpbGQgaXRlbSdsYXIgcGFyZW50IGJhxZ/EsW5hIGdydXBsYW7EsXIuIEdydXAgYmHFn2zEscSfxLEgcGFyZW50J8SxbiBsb2thbGl6ZSBkaXNwbGF5J2lkaXIuXHJcblx0YXN5bmMgZ2V0R3JvdXBlZFNlbGVjdGlvbkl0ZW1zKHBhcmVudEtleXM6IHN0cmluZ1tdKSB7XHJcblx0XHRjb25zdCBjaGlsZEdyb3VwTmFtZSA9IHRoaXMuZ3JvdXBOYW1lKCk7XHJcblx0XHRjb25zdCBwYXJlbnRHcm91cE5hbWUgPSB0aGlzLnBhcmVudEdyb3VwTmFtZSgpO1xyXG5cdFx0Y29uc3QgaGFzUGFyZW50R3JvdXAgPSAhIXBhcmVudEdyb3VwTmFtZTtcclxuXHJcblx0XHRjb25zdCByZXF1ZXN0czogUGFydGlhbDxTZWxlY3Rpb25SZXF1ZXN0RFRPPltdID0gW107XHJcblx0XHRpZiAoaGFzUGFyZW50R3JvdXApIHtcclxuXHRcdFx0cmVxdWVzdHMucHVzaCh7IGdyb3VwTmFtZTogcGFyZW50R3JvdXBOYW1lIH0pO1xyXG5cdFx0fVxyXG5cdFx0cGFyZW50S2V5cy5mb3JFYWNoKChrZXkpID0+IHtcclxuXHRcdFx0cmVxdWVzdHMucHVzaCh7IGdyb3VwTmFtZTogY2hpbGRHcm91cE5hbWUsIHBhcmVudFNlbGVjdGlvbktleToga2V5IH0pO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0Y29uc3QgaG9zdEFwaSA9IEFQSV9DT05GSUdTLmdldEV4dGVybmFsQXBwRW5kcG9pbnQoQXBwcy5NTkcpO1xyXG5cclxuXHRcdGxldCBncm91cHM6IFNlbGVjdGlvbkdyb3VwRFRPW10gPSBbXTtcclxuXHRcdHRyeSB7XHJcblx0XHRcdGdyb3VwcyA9XHJcblx0XHRcdFx0KGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cC5wb3N0PFNlbGVjdGlvbkdyb3VwRFRPW10+KGhvc3RBcGkgKyAnL3NlbGVjdGlvbi1ncm91cC9sb2FkLWFsbCcsIHJlcXVlc3RzKSkpIHx8XHJcblx0XHRcdFx0W107XHJcblx0XHR9IGNhdGNoIChlcnJvcikge1xyXG5cdFx0XHRncm91cHMgPSBbXTtcclxuXHRcdH1cclxuXHJcblx0XHR0aGlzLnJhd1BhcmVudEl0ZW1zID0gaGFzUGFyZW50R3JvdXAgPyBncm91cHNbMF0/LnNlbGVjdGlvbkl0ZW1zIHx8IFtdIDogW107XHJcblx0XHRjb25zdCBjaGlsZEdyb3VwcyA9IGhhc1BhcmVudEdyb3VwID8gZ3JvdXBzLnNsaWNlKDEpIDogZ3JvdXBzO1xyXG5cdFx0dGhpcy5yYXdHcm91cHMgPSBwYXJlbnRLZXlzLm1hcCgocGFyZW50S2V5LCBpbmRleCkgPT4gKHtcclxuXHRcdFx0cGFyZW50S2V5LFxyXG5cdFx0XHRpdGVtczogY2hpbGRHcm91cHNbaW5kZXhdPy5zZWxlY3Rpb25JdGVtcyB8fCBbXVxyXG5cdFx0fSkpO1xyXG5cclxuXHRcdHRoaXMuYnVpbGRHcm91cGVkRnJvbVJhdygpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBidWlsZEdyb3VwZWRGcm9tUmF3KCkge1xyXG5cdFx0Y29uc3QgZXhjbHVkZWQgPSBuZXcgU2V0KHRoaXMuZXhjbHVkZWRLZXlzKCkgfHwgW10pO1xyXG5cdFx0Y29uc3QgcGFyZW50RGlzcGxheU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XHJcblx0XHR0aGlzLnJhd1BhcmVudEl0ZW1zLmZvckVhY2goKGl0ZW06IFNlbGVjdGlvbkl0ZW0pID0+IHtcclxuXHRcdFx0cGFyZW50RGlzcGxheU1hcC5zZXQoaXRlbS5zZWxlY3Rpb25LZXksIHRoaXMucmVzb2x2ZURpc3BsYXkoaXRlbSkpO1xyXG5cdFx0fSk7XHJcblxyXG5cdFx0Y29uc3QgYnVpbHQ6IEdyb3VwZWRTZWxlY3Rpb25JdGVtW10gPSB0aGlzLnJhd0dyb3Vwcy5tYXAoKGdyb3VwKSA9PiAoe1xyXG5cdFx0XHRsYWJlbDogcGFyZW50RGlzcGxheU1hcC5nZXQoZ3JvdXAucGFyZW50S2V5KSA/PyBncm91cC5wYXJlbnRLZXksXHJcblx0XHRcdGl0ZW1zOiBncm91cC5pdGVtc1xyXG5cdFx0XHRcdC5maWx0ZXIoKGl0ZW06IFNlbGVjdGlvbkl0ZW0pID0+ICFleGNsdWRlZC5oYXMoaXRlbS5zZWxlY3Rpb25LZXkpKVxyXG5cdFx0XHRcdC5tYXAoKGl0ZW06IFNlbGVjdGlvbkl0ZW0pID0+ICh7XHJcblx0XHRcdFx0XHRrZXk6IGl0ZW0uc2VsZWN0aW9uS2V5LFxyXG5cdFx0XHRcdFx0dGV4dDogdGhpcy5yZXNvbHZlRGlzcGxheShpdGVtKVxyXG5cdFx0XHRcdH0pKVxyXG5cdFx0fSkpO1xyXG5cclxuXHRcdHRoaXMuc2VsZWN0aW9uSXRlbXMuc2V0KG51bGwpO1xyXG5cdFx0dGhpcy5zZWxlY3RCb3hEYXRhU291cmNlLnNldChudWxsKTtcclxuXHRcdHRoaXMuZ3JvdXBlZFNlbGVjdGlvbkl0ZW1zLnNldChidWlsdCk7XHJcblx0XHR0aGlzLmlzR3JvdXBlZC5zZXQodHJ1ZSk7XHJcblx0XHR0aGlzLmZpbHRlckN1cnJlbnRWYWx1ZUJ5U2VsZWN0aW9uSXRlbXMoKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcmVzb2x2ZURpc3BsYXkoaXRlbTogU2VsZWN0aW9uSXRlbSk6IHN0cmluZyB7XHJcblx0XHRjb25zdCBsYW5nID0gdGhpcy50cmFuc2xvY29TZXJ2aWNlLmdldEFjdGl2ZUxhbmcoKTtcclxuXHRcdHJldHVybiBpdGVtPy5zZWxlY3Rpb25NdWx0aUxhbmd1YWdlRGlzcGxheXM/LltsYW5nXSB8fCBpdGVtLnNlbGVjdGlvbkRpc3BsYXk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldFZpc2libGVJdGVtcygpOiBTZWxlY3RCb3hJdGVtW10ge1xyXG5cdFx0aWYgKHRoaXMuaXNHcm91cGVkKCkpIHtcclxuXHRcdFx0cmV0dXJuICh0aGlzLmdyb3VwZWRTZWxlY3Rpb25JdGVtcygpIHx8IFtdKS5mbGF0TWFwKChncm91cCkgPT4gZ3JvdXAuaXRlbXMpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRoaXMuc2VsZWN0aW9uSXRlbXMoKSB8fCBbXTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgdXBkYXRlU2VsZWN0aW9uSXRlbXNUZXh0KCkge1xyXG5cdFx0aWYgKCF0aGlzLm9yaWdpbmFsU2VsZWN0aW9uSXRlbXMgfHwgdGhpcy5vcmlnaW5hbFNlbGVjdGlvbkl0ZW1zLmxlbmd0aCA9PT0gMCkge1xyXG5cdFx0XHR0aGlzLnNlbGVjdGlvbkl0ZW1zLnNldChudWxsKTtcclxuXHRcdFx0dGhpcy5zZWxlY3RCb3hEYXRhU291cmNlLnNldChudWxsKTtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMuc2VsZWN0aW9uSXRlbXMuc2V0KG51bGwpO1xyXG5cclxuXHRcdGNvbnN0IGV4Y2x1ZGVkID0gbmV3IFNldCh0aGlzLmV4Y2x1ZGVkS2V5cygpIHx8IFtdKTtcclxuXHRcdGNvbnN0IG1hcHBlZEl0ZW1zID0gdGhpcy5vcmlnaW5hbFNlbGVjdGlvbkl0ZW1zXHJcblx0XHRcdC5maWx0ZXIoKGl0ZW06IFNlbGVjdGlvbkl0ZW0pID0+ICFleGNsdWRlZC5oYXMoaXRlbS5zZWxlY3Rpb25LZXkpKVxyXG5cdFx0XHQubWFwKChpdGVtOiBTZWxlY3Rpb25JdGVtKSA9PiAoe1xyXG5cdFx0XHRcdGtleTogaXRlbS5zZWxlY3Rpb25LZXksXHJcblx0XHRcdFx0dGV4dDogdGhpcy5yZXNvbHZlRGlzcGxheShpdGVtKSxcclxuXHRcdFx0XHRwYXJlbnRTZWxlY3Rpb25LZXk6IGl0ZW0ucGFyZW50U2VsZWN0aW9uS2V5XHJcblx0XHRcdH0pKTtcclxuXHJcblx0XHR0aGlzLnNlbGVjdGlvbkl0ZW1zLnNldChtYXBwZWRJdGVtcyk7XHJcblx0XHR0aGlzLnJlYnVpbGRTZWxlY3RCb3hEYXRhU291cmNlKG1hcHBlZEl0ZW1zKTtcclxuXHRcdHRoaXMuZmlsdGVyQ3VycmVudFZhbHVlQnlTZWxlY3Rpb25JdGVtcygpO1xyXG5cdH1cclxuXHJcblx0Ly8gUGFyZW50IGVudW0gKG11bHRpcGxlKSBkZcSfacWfdGnEn2luZGUgdmV5YSBleGNsdWRlZEtleXMgYWt0aWZrZW5cclxuXHQvLyBmb3JtJ2Rha2kgZ2XDp2Vyc2l6IGtleSdsZXJpIHRlbWl6bGVyIChzZWxlY3Rpb25JdGVtcyB6YXRlbiBmaWx0cmVsZW5tacWfIGhhbGl5bGUgZ2VsaXIpLlxyXG5cdGZpbHRlckN1cnJlbnRWYWx1ZUJ5U2VsZWN0aW9uSXRlbXMoKTogdm9pZCB7XHJcblx0XHRjb25zdCBoYXNFeGNsdWRlZCA9ICh0aGlzLmV4Y2x1ZGVkS2V5cygpIHx8IFtdKS5sZW5ndGggPiAwO1xyXG5cdFx0aWYgKCF0aGlzLnBhcmVudFNlbGVjdGlvbktleSgpICYmICFoYXNFeGNsdWRlZCkgcmV0dXJuO1xyXG5cdFx0Y29uc3QgY3VycmVudFZhbHVlID0gdGhpcy5uZ0NvbnRyb2wuY29udHJvbD8udmFsdWU7XHJcblx0XHRjb25zdCB2YWxpZEtleXMgPSBuZXcgU2V0KHRoaXMuZ2V0VmlzaWJsZUl0ZW1zKCkubWFwKChpdGVtOiBhbnkpID0+IGl0ZW1bdGhpcy5pdGVtS2V5KCldKSk7XHJcblxyXG5cdFx0aWYgKHRoaXMuaXNNdWx0aXBsZSgpKSB7XHJcblx0XHRcdC8vIENoaWxkIG11bHRpLXNlbGVjdDogZ2XDp2Vyc2l6IGtleSdsZXJpIGZpbHRyZWxlLCBnZcOnZXJsaWxlcmkgYsSxcmFrXHJcblx0XHRcdGlmICghQXJyYXkuaXNBcnJheShjdXJyZW50VmFsdWUpIHx8IGN1cnJlbnRWYWx1ZS5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHRcdFx0Y29uc3QgZmlsdGVyZWQgPSAoY3VycmVudFZhbHVlIGFzIHN0cmluZ1tdKS5maWx0ZXIoKGtleSkgPT4gdmFsaWRLZXlzLmhhcyhrZXkpKTtcclxuXHRcdFx0aWYgKGZpbHRlcmVkLmxlbmd0aCAhPT0gY3VycmVudFZhbHVlLmxlbmd0aCkge1xyXG5cdFx0XHRcdHRoaXMubmdDb250cm9sLmNvbnRyb2w/LnNldFZhbHVlKGZpbHRlcmVkLCB7IGVtaXRFdmVudDogdHJ1ZSB9KTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aWYgKCFjdXJyZW50VmFsdWUpIHJldHVybjtcclxuXHJcblx0XHRcdGlmICghdmFsaWRLZXlzLmhhcyhjdXJyZW50VmFsdWUpKSB7XHJcblx0XHRcdFx0dGhpcy5uZ0NvbnRyb2wuY29udHJvbD8ucmVzZXQobnVsbCwgeyBlbWl0RXZlbnQ6IHRydWUgfSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG9uQ3VzdG9tSXRlbUNyZWF0aW5nKGV2ZW50OiBhbnkpIHtcclxuXHRcdGlmICghZXZlbnQudGV4dCkge1xyXG5cdFx0XHRldmVudC5jdXN0b21JdGVtID0gbnVsbDtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgbmV3SXRlbSA9IHtcclxuXHRcdFx0W3RoaXMuaXRlbUtleSgpXTogZXZlbnQudGV4dCxcclxuXHRcdFx0W3RoaXMuaXRlbVRleHQoKV06IGV2ZW50LnRleHRcclxuXHRcdH07XHJcblx0XHRjb25zdCBjdXJyZW50SXRlbXMgPSB0aGlzLnNlbGVjdGlvbkl0ZW1zKCkgfHwgW107XHJcblx0XHRjb25zdCB1cGRhdGVkSXRlbXMgPSBbLi4uY3VycmVudEl0ZW1zLCBuZXdJdGVtXTtcclxuXHRcdHRoaXMuc2VsZWN0aW9uSXRlbXMuc2V0KHVwZGF0ZWRJdGVtcyk7XHJcblx0XHR0aGlzLnJlYnVpbGRTZWxlY3RCb3hEYXRhU291cmNlKHVwZGF0ZWRJdGVtcyk7XHJcblx0XHRldmVudC5jdXN0b21JdGVtID0gbmV3SXRlbTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgcmVidWlsZFNlbGVjdEJveERhdGFTb3VyY2UoaXRlbXM6IFNlbGVjdEJveEl0ZW1bXSk6IHZvaWQge1xyXG5cdFx0aWYgKCF0aGlzLnVzZVZpcnR1YWxTY3JvbGwoKSkge1xyXG5cdFx0XHR0aGlzLnNlbGVjdEJveERhdGFTb3VyY2Uuc2V0KG51bGwpO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR0aGlzLnNlbGVjdEJveERhdGFTb3VyY2Uuc2V0KFxyXG5cdFx0XHRuZXcgRGF0YVNvdXJjZSh7XHJcblx0XHRcdFx0c3RvcmU6IG5ldyBBcnJheVN0b3JlKHtcclxuXHRcdFx0XHRcdGRhdGE6IGl0ZW1zLFxyXG5cdFx0XHRcdFx0a2V5OiB0aGlzLml0ZW1LZXkoKVxyXG5cdFx0XHRcdH0pLFxyXG5cdFx0XHRcdHBhZ2luYXRlOiB0cnVlLFxyXG5cdFx0XHRcdHBhZ2VTaXplOiA1MFxyXG5cdFx0XHR9KVxyXG5cdFx0KTtcclxuXHR9XHJcbn1cclxuIiwiQGlmIChpc011bHRpcGxlKCkpIHtcclxuXHQ8cC1tdWx0aVNlbGVjdFxyXG5cdFx0W29wdGlvbnNdPVwiaXNHcm91cGVkKCkgPyAoZ3JvdXBlZFNlbGVjdGlvbkl0ZW1zKCkgfHwgW10pIDogKHNlbGVjdGlvbkl0ZW1zKCkgfHwgaXRlbXMoKSB8fCBbXSlcIlxyXG5cdFx0W2dyb3VwXT1cImlzR3JvdXBlZCgpXCJcclxuXHRcdFtvcHRpb25WYWx1ZV09XCJpdGVtS2V5KClcIlxyXG5cdFx0W29wdGlvbkxhYmVsXT1cIml0ZW1UZXh0KClcIlxyXG5cdFx0W2RlZmF1bHRMYWJlbF09XCJwbGFjZWhvbGRlcigpXCJcclxuXHRcdFtzZWxlY3RlZEl0ZW1zTGFiZWxdPVwic2VsZWN0ZWRJdGVtc0xhYmVsKClcIlxyXG5cdFx0W3N0eWxlXT1cInN0eWxlKClcIlxyXG5cdFx0W3N0eWxlQ2xhc3NdPVwic3R5bGVDbGFzcygpXCJcclxuXHRcdFt0b29sdGlwXT1cInRvb2x0aXAoKVwiXHJcblx0XHRbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvbigpXCJcclxuXHRcdFtmb3JtQ29udHJvbF09XCJuZ0NvbnRyb2wuY29udHJvbFwiXHJcblx0XHQobmdNb2RlbENoYW5nZSk9XCJuZ0NvbnRyb2wudmlld1RvTW9kZWxVcGRhdGUoJGV2ZW50KVwiXHJcblx0XHRbbWF4U2VsZWN0ZWRMYWJlbHNdPVwiMlwiXHJcblx0XHRbYXBwZW5kVG9dPVwiYXBwZW5kVG8oKVwiXHJcblx0XHRbdmlydHVhbFNjcm9sbF09XCJ1c2VWaXJ0dWFsU2Nyb2xsKClcIlxyXG5cdFx0W3ZpcnR1YWxTY3JvbGxJdGVtU2l6ZV09XCJ2aXJ0dWFsU2Nyb2xsSXRlbVNpemUoKVwiXHJcblx0XHRbc2Nyb2xsSGVpZ2h0XT1cInNjcm9sbEhlaWdodCgpXCJcclxuXHRcdFtmaWx0ZXJdPVwidHJ1ZVwiXHJcblx0XHRbcGFuZWxTdHlsZV09XCJ7ICdtYXgtd2lkdGgnOiAnNDAwcHgnLCAnbWluLXdpZHRoJzogJ2F1dG8nIH1cIj5cclxuXHRcdEBpZiAoaXNHcm91cGVkKCkpIHtcclxuXHRcdFx0PG5nLXRlbXBsYXRlIGxldC1ncm91cCBwVGVtcGxhdGU9XCJncm91cFwiPlxyXG5cdFx0XHRcdDxzcGFuPnt7IGdyb3VwLmxhYmVsIH19PC9zcGFuPlxyXG5cdFx0XHQ8L25nLXRlbXBsYXRlPlxyXG5cdFx0fVxyXG5cdFx0PG5nLXRlbXBsYXRlIGxldC1lbnVtIHBUZW1wbGF0ZT1cIml0ZW1cIj5cclxuXHRcdFx0PGRpdiBbcFRvb2x0aXBdPVwiZW51bVtpdGVtVGV4dCgpXT8ubGVuZ3RoID4gdGV4dENsYW1wQ2hhcmFjdGVycygpID8gZW51bVtpdGVtVGV4dCgpXSA6ICcnXCI+XHJcblx0XHRcdFx0QGlmIChlbnVtW2l0ZW1UZXh0KCldPy5sZW5ndGggPiB0ZXh0Q2xhbXBDaGFyYWN0ZXJzKCkpIHtcclxuXHRcdFx0XHRcdHt7IGVudW1baXRlbVRleHQoKV0uc2xpY2UoMCwgdGV4dENsYW1wQ2hhcmFjdGVycygpKSB9fS4uLlxyXG5cdFx0XHRcdH0gQGVsc2Uge1xyXG5cdFx0XHRcdFx0e3sgZW51bVtpdGVtVGV4dCgpXSB9fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0PC9kaXY+XHJcblx0XHQ8L25nLXRlbXBsYXRlPlxyXG5cdDwvcC1tdWx0aVNlbGVjdD5cclxufSBAZWxzZSB7XHJcblx0PGR4LXNlbGVjdC1ib3hcclxuICAgIFtkYXRhU291cmNlXT1cInVzZVZpcnR1YWxTY3JvbGwoKSA/IHNlbGVjdEJveERhdGFTb3VyY2UoKSA6IChzZWxlY3Rpb25JdGVtcygpIHx8IGl0ZW1zKCkgfHwgW10pXCJcclxuXHRcdFt2YWx1ZUV4cHJdPVwiaXRlbUtleSgpXCJcclxuXHRcdFtkaXNwbGF5RXhwcl09XCJpdGVtVGV4dCgpXCJcclxuXHRcdFtzZWFyY2hFbmFibGVkXT1cInRydWVcIlxyXG5cdFx0W3NlYXJjaEV4cHJdPVwic2VhcmNoRXhwcigpXCJcclxuXHRcdFt0YWJJbmRleF09XCJ0YWJpbmRleCgpXCJcclxuXHRcdFtncm91cGVkXT1cImdyb3VwZWQoKVwiXHJcblx0XHRbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIoKVwiXHJcblx0XHRbc2hvd0NsZWFyQnV0dG9uXT1cInNob3dDbGVhckJ1dHRvbigpXCJcclxuXHRcdFthY2NlcHRDdXN0b21WYWx1ZV09XCJhY2NlcHRDdXN0b21WYWx1ZSgpXCJcclxuXHRcdChvbkN1c3RvbUl0ZW1DcmVhdGluZyk9XCJvbkN1c3RvbUl0ZW1DcmVhdGluZygkZXZlbnQpXCJcclxuXHRcdFtpc1ZhbGlkXT1cIm5nQ29udHJvbD8uY29udHJvbD8udmFsaWQgfHwgbmdDb250cm9sPy5jb250cm9sPy5wcmlzdGluZSB8fCBuZ0NvbnRyb2w/LmNvbnRyb2w/LmRpc2FibGVkIHx8IGZhbHNlXCJcclxuXHRcdFt2YWxpZGF0aW9uRXJyb3JdPVwibmdDb250cm9sPy5jb250cm9sPy5lcnJvcnMgfCBkeElucHV0RXJyb3JNZXNzYWdlOiBuZ0NvbnRyb2w/LmNvbnRyb2xcIlxyXG5cdFx0dmFsaWRhdGlvbk1lc3NhZ2VQb3NpdGlvbj1cInRvcFwiXHJcblx0XHRbbm9EYXRhVGV4dF09XCJ0cmFuc2xvY29TZXJ2aWNlLnRyYW5zbGF0ZSgnbWVzc2FnZXMubm9EYXRhVG9EaXNwbGF5JylcIlxyXG5cdFx0W2Zvcm1Db250cm9sXT1cIm5nQ29udHJvbC5jb250cm9sXCJcclxuXHRcdChuZ01vZGVsQ2hhbmdlKT1cIm5nQ29udHJvbC52aWV3VG9Nb2RlbFVwZGF0ZSgkZXZlbnQpXCJcclxuICAgIChvblNlbGVjdGlvbkNoYW5nZWQpPVwib25TZWxlY3Rpb25DaGFuZ2VkLmVtaXQoJGV2ZW50LnNlbGVjdGVkSXRlbSk7c2V0VGl0bGUoJGV2ZW50LnNlbGVjdGVkSXRlbSlcIlxyXG4gICAgW2lucHV0QXR0cl09XCJ7ICd0aXRsZSc6IHNlbGVjdGVkSXRlbVRleHQgfVwiPlxyXG5cdDwvZHgtc2VsZWN0LWJveD5cclxufVxyXG4iXX0=