ngx-render-material-forms 2.5.3 → 2.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -48,6 +48,8 @@ export class MaterialSelectComponent extends MaterialComponent {
48
48
  this.storeDependentItems = [];
49
49
  this.executionFlag = false;
50
50
  this.apiCounter = 0;
51
+ this.optionsInitialized = false;
52
+ this.lastOptionsHash = '';
51
53
  }
52
54
  onInputChange(event) {
53
55
  if (this.instance.component.key.toLowerCase() === 'vendorproductid' && event.target.value === '') {
@@ -340,21 +342,60 @@ export class MaterialSelectComponent extends MaterialComponent {
340
342
  });
341
343
  }
342
344
  if (this.checkVendorRefItems(this.instance) && checkInvokeFromLibrary) {
343
- this.storeDependentItems = [];
344
- this.secondDropdownItems = this.commonService.getDropdownItems();
345
- if (this.secondDropdownItems?.length) {
346
- this.secondDropdownItems.forEach((renderElement, index, array) => {
347
- this.storeDependentItems.push({ label: renderElement['text'], value: this.commonService.onlyNumbers(renderElement['value']) ? renderElement['value'] + ' ' : renderElement['value'] });
345
+ // this.storeDependentItems = [];
346
+ // this.secondDropdownItems = this.commonService.getDropdownItems();
347
+ // if (this.secondDropdownItems?.length) {
348
+ // this.secondDropdownItems.forEach((renderElement, index, array) => {
349
+ // this.storeDependentItems.push({ label: renderElement['text'], value: this.commonService.onlyNumbers(renderElement['value']) ? renderElement['value'] + ' ' : renderElement['value'] });
350
+ // });
351
+ // }
352
+ // if (!this.commonService.getDropDownFlag()) {
353
+ // this.storeDependentItems = this.instance.component.data.values;
354
+ // }
355
+ // this.filteredOptions = Promise.resolve(this.storeDependentItems);
356
+ // this.selectOptions = Promise.resolve(this.storeDependentItems);
357
+ // this.selectOptions.then(result => {
358
+ // this.filteredOptionsLength = result.length
359
+ // });
360
+ const incomingItems = this.commonService.getDropdownItems();
361
+ const seen = new Set();
362
+ const newOptions = [];
363
+ if (incomingItems?.length) {
364
+ incomingItems.forEach(item => {
365
+ const rawValue = this.commonService.onlyNumbers(item['value']) ? item['value'] + ' ' : item['value'];
366
+ const label = item['text']?.trim();
367
+ const key = `${label}-${rawValue}`;
368
+ if (!seen.has(key)) {
369
+ seen.add(key);
370
+ newOptions.push({ label, value: rawValue });
371
+ }
348
372
  });
349
373
  }
350
- if (!this.commonService.getDropDownFlag()) {
351
- this.storeDependentItems = this.instance.component.data.values;
374
+ // compare hashes to avoid unnecessary reassignments
375
+ const newHash = JSON.stringify(newOptions);
376
+ if (newHash !== this.lastOptionsHash) {
377
+ this.lastOptionsHash = newHash;
378
+ this.storeDependentItems = newOptions;
379
+ if (!this.commonService.getDropDownFlag()) {
380
+ this.storeDependentItems = this.instance.component.data.values;
381
+ }
382
+ this.filteredOptions = Promise.resolve(this.storeDependentItems);
383
+ this.selectOptions = Promise.resolve(this.storeDependentItems);
384
+ this.selectOptions.then(result => {
385
+ this.filteredOptionsLength = result.length;
386
+ });
387
+ // scroll to selected item
388
+ setTimeout(() => {
389
+ const panel = this.selectElem?.panel?.nativeElement;
390
+ if (panel && this.storeDependentItems?.length) {
391
+ const selectedIndex = this.storeDependentItems.findIndex(item => this.compareObjects(item.value, this.control.value));
392
+ if (selectedIndex >= 0) {
393
+ const optionHeight = 48;
394
+ panel.scrollTop = selectedIndex * optionHeight;
395
+ }
396
+ }
397
+ }, 200);
352
398
  }
353
- this.filteredOptions = Promise.resolve(this.storeDependentItems);
354
- this.selectOptions = Promise.resolve(this.storeDependentItems);
355
- this.selectOptions.then(result => {
356
- this.filteredOptionsLength = result.length;
357
- });
358
399
  }
359
400
  }
360
401
  });
@@ -531,7 +572,7 @@ MaterialSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0"
531
572
  <mat-error *ngIf="isError()" >{{ getErrorMessage() }}</mat-error>
532
573
  </mat-form-field>
533
574
  </ng-template>
534
- `, isInline: true, styles: [".example-viewport{height:200px}.product-picker{overflow-x:hidden}.virtual-full-view{height:auto!important;white-space:normal!important;line-height:1.4!important;text-overflow:initial!important;min-height:48px!important;overflow:visible!important;overflow:initial!important;padding-top:10px!important;padding-bottom:10px!important}::ng-deep .product-picker .cdk-virtual-scroll-content-wrapper{width:100%!important}.virtual-full-view .mat-pseudo-checkbox{align-self:top!important}.virtual-full-view.mat-active{background:none}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatPrefix, selector: "[matPrefix]" }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix]" }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i9.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "component", type: i10.MatSelectSearchComponent, selector: "ngx-mat-select-search", inputs: ["placeholderLabel", "type", "closeIcon", "closeSvgIcon", "noEntriesFoundLabel", "indexAndLengthScreenReaderText", "clearSearchInput", "searching", "disableInitialFocus", "enableClearOnEscapePressed", "preventHomeEndKeyPropagation", "disableScrollToActiveOnOptionsChanged", "ariaLabel", "showToggleAllCheckbox", "toggleAllCheckboxChecked", "toggleAllCheckboxIndeterminate", "toggleAllCheckboxTooltipMessage", "toogleAllCheckboxTooltipPosition", "hideClearSearchButton", "alwaysRestoreSelectedOptionsMulti"], outputs: ["toggleAll"] }, { kind: "directive", type: i10.MatSelectSearchClearDirective, selector: "[ngxMatSelectSearchClear]" }, { kind: "component", type: i11.FormioFormFieldComponent, selector: "mat-formio-form-field", inputs: ["labelTemplate", "renderTopLabel", "showDescription", "renderElementOnly", "instance", "componentTemplate"] }, { kind: "component", type: i12.LabelComponent, selector: "span[matFormioLabel]", inputs: ["instance"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] });
575
+ `, isInline: true, styles: [".example-viewport{height:200px}.product-picker{overflow-x:hidden}.virtual-full-view{height:auto!important;white-space:normal!important;line-height:1.4!important;text-overflow:initial!important;min-height:48px!important;overflow:visible!important;overflow:initial!important;padding-top:10px!important;padding-bottom:10px!important}::ng-deep .product-picker .cdk-virtual-scroll-content-wrapper{width:100%!important}.virtual-full-view .mat-pseudo-checkbox{align-self:top!important}.mat-option.virtual-full-view.mat-active{background:none}.mat-option.virtual-full-view.mat-selected .mat-option-text span{color:#000000de}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatPrefix, selector: "[matPrefix]" }, { kind: "directive", type: i5.MatSuffix, selector: "[matSuffix]" }, { kind: "component", type: i6.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i9.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "component", type: i10.MatSelectSearchComponent, selector: "ngx-mat-select-search", inputs: ["placeholderLabel", "type", "closeIcon", "closeSvgIcon", "noEntriesFoundLabel", "indexAndLengthScreenReaderText", "clearSearchInput", "searching", "disableInitialFocus", "enableClearOnEscapePressed", "preventHomeEndKeyPropagation", "disableScrollToActiveOnOptionsChanged", "ariaLabel", "showToggleAllCheckbox", "toggleAllCheckboxChecked", "toggleAllCheckboxIndeterminate", "toggleAllCheckboxTooltipMessage", "toogleAllCheckboxTooltipPosition", "hideClearSearchButton", "alwaysRestoreSelectedOptionsMulti"], outputs: ["toggleAll"] }, { kind: "directive", type: i10.MatSelectSearchClearDirective, selector: "[ngxMatSelectSearchClear]" }, { kind: "component", type: i11.FormioFormFieldComponent, selector: "mat-formio-form-field", inputs: ["labelTemplate", "renderTopLabel", "showDescription", "renderElementOnly", "instance", "componentTemplate"] }, { kind: "component", type: i12.LabelComponent, selector: "span[matFormioLabel]", inputs: ["instance"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] });
535
576
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: MaterialSelectComponent, decorators: [{
536
577
  type: Component,
537
578
  args: [{ selector: 'mat-formio-select', template: `
@@ -575,7 +616,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
575
616
  <mat-error *ngIf="isError()" >{{ getErrorMessage() }}</mat-error>
576
617
  </mat-form-field>
577
618
  </ng-template>
578
- `, styles: [".example-viewport{height:200px}.product-picker{overflow-x:hidden}.virtual-full-view{height:auto!important;white-space:normal!important;line-height:1.4!important;text-overflow:initial!important;min-height:48px!important;overflow:visible!important;overflow:initial!important;padding-top:10px!important;padding-bottom:10px!important}::ng-deep .product-picker .cdk-virtual-scroll-content-wrapper{width:100%!important}.virtual-full-view .mat-pseudo-checkbox{align-self:top!important}.virtual-full-view.mat-active{background:none}\n"] }]
619
+ `, styles: [".example-viewport{height:200px}.product-picker{overflow-x:hidden}.virtual-full-view{height:auto!important;white-space:normal!important;line-height:1.4!important;text-overflow:initial!important;min-height:48px!important;overflow:visible!important;overflow:initial!important;padding-top:10px!important;padding-bottom:10px!important}::ng-deep .product-picker .cdk-virtual-scroll-content-wrapper{width:100%!important}.virtual-full-view .mat-pseudo-checkbox{align-self:top!important}.mat-option.virtual-full-view.mat-active{background:none}.mat-option.virtual-full-view.mat-selected .mat-option-text span{color:#000000de}\n"] }]
579
620
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1.HttpClient }, { type: i2.CommonService }]; }, propDecorators: { multiSelect: [{
580
621
  type: ViewChild,
581
622
  args: ['multiSelect', { static: true }]
@@ -593,4 +634,4 @@ SelectComponent.prototype.setItems = function (...args) {
593
634
  }
594
635
  };
595
636
  export { SelectComponent };
596
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZW5kZXItbWF0ZXJpYWwtZm9ybXMvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0MsU0FBUyxFQUE0QyxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakksT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxlQUFlLE1BQU0sc0NBQXNDLENBQUM7QUFDbkUsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQVUsU0FBUyxFQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUYsT0FBTyxFQUFjLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQWdGL0QsTUFBTSxPQUFPLHVCQUF3QixTQUFRLGlCQUFpQjtJQThCNUQsWUFBbUIsT0FBbUIsRUFBUyxHQUFzQixFQUFTLElBQWdCLEVBQVMsYUFBNEI7UUFDakksS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztRQURILFlBQU8sR0FBUCxPQUFPLENBQVk7UUFBUyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUFTLFNBQUksR0FBSixJQUFJLENBQVk7UUFBUyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQXpCNUgscUJBQWdCLEdBQWdCLElBQUksV0FBVyxFQUFFLENBQUM7UUFDbEQsMkJBQXNCLEdBQWdCLElBQUksV0FBVyxFQUFFLENBQUM7UUFFckQsZUFBVSxHQUFHLElBQUksT0FBTyxFQUFF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QUFDLENBQUM7QUFFRixPQUFPLEVBQUUsZUFBZSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkRlc3Ryb3ksIE9uSW5pdCwgUmVuZGVyZXIyLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0ZXJpYWxDb21wb25lbnQgfSBmcm9tICcuLi9NYXRlcmlhbENvbXBvbmVudCc7XHJcbmltcG9ydCBTZWxlY3RDb21wb25lbnQgZnJvbSAnZm9ybWlvanMvY29tcG9uZW50cy9zZWxlY3QvU2VsZWN0LmpzJztcclxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgTWF0U2VsZWN0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcclxuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24uc2VydmljZSc7XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbWF0LWZvcm1pby1zZWxlY3QnLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8bWF0LWZvcm1pby1mb3JtLWZpZWxkIFtpbnN0YW5jZV09XCJpbnN0YW5jZVwiIFtjb21wb25lbnRUZW1wbGF0ZV09XCJjb21wb25lbnRUZW1wbGF0ZVwiPjwvbWF0LWZvcm1pby1mb3JtLWZpZWxkPlxyXG4gICAgPG5nLXRlbXBsYXRlICNjb21wb25lbnRUZW1wbGF0ZSBsZXQtaGFzTGFiZWw+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZpbGw+XHJcblxyXG4gICAgICAgIDxtYXQtbGFiZWwgKm5nSWY9XCJoYXNMYWJlbFwiPlxyXG4gICAgICAgICAgPHNwYW4gW2luc3RhbmNlXT1cImluc3RhbmNlXCIgbWF0Rm9ybWlvTGFiZWw+PC9zcGFuPlxyXG4gICAgICAgIDwvbWF0LWxhYmVsPlxyXG5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cImluc3RhbmNlLmNvbXBvbmVudC5wcmVmaXhcIiBtYXRQcmVmaXg+XHJcbiAgICAgICAgICB7eyBpbnN0YW5jZS5jb21wb25lbnQucHJlZml4IH19Jm5ic3A7XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDxtYXQtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwiaW5zdGFuY2UuY29tcG9uZW50Lm11bHRpcGxlXCJcclxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcclxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJpbnN0YW5jZS5jb21wb25lbnQucGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkNoYW5nZSgpXCJcclxuICAgICAgICAgICAgICAgIFtjb21wYXJlV2l0aF09XCJjb21wYXJlT2JqZWN0c1wiXHJcbiAgICAgICAgICAgICAgICAjcHJvZHVjdFNlbGVjdFxyXG4gICAgICAgICAgICAgICAgW3BhbmVsQ2xhc3NdPVwiYWRkQ3VzdG9tQ2xhc3MoaW5zdGFuY2UuY29tcG9uZW50LmtleSlcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8bWF0LW9wdGlvbj5cclxuICAgICAgICA8bmd4LW1hdC1zZWxlY3Qtc2VhcmNoIFtzZWFyY2hpbmddPVwiaW5zdGFuY2UuY29tcG9uZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAndmVuZG9ycHJvZHVjdGlkJyA/IHNlYXJjaGluZyA6IGZhbHNlXCIgKGlucHV0KT1cIm9uSW5wdXRDaGFuZ2UoJGV2ZW50KVwiIHBsYWNlaG9sZGVyTGFiZWw9XCJUeXBlIHRvIHNlYXJjaFwiIFtmb3JtQ29udHJvbF09XCJ3ZWJzaXRlTXVsdGlGaWx0ZXJDdHJsXCI+IFxyXG4gICAgICAgIDxtYXQtaWNvbiBuZ3hNYXRTZWxlY3RTZWFyY2hDbGVhciAoY2xpY2spPVwiY2xlYXJQcm9kdWN0cygpXCI+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgIDwvbmd4LW1hdC1zZWxlY3Qtc2VhcmNoPlxyXG4gICAgICA8L21hdC1vcHRpb24+XHJcblxyXG4gICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGZpbHRlcmVkT3B0aW9ucyB8IGFzeW5jXCIgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiIGNsYXNzPVwidmlydHVhbC1mdWxsLXZpZXdcIj5cclxuICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwib3B0aW9uLmxhYmVsXCI+PC9zcGFuPlxyXG4gICAgICAgIDwvbWF0LW9wdGlvbj4gICBcclxuICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0lmPVwiIWZpbHRlcmVkT3B0aW9uc0xlbmd0aFwiIGRpc2FibGVkPlxyXG4gICAgICAgICAgICA8c3Bhbj5Ob3RoaW5nIHdhcyBmb3VuZDwvc3Bhbj5cclxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8L21hdC1zZWxlY3Q+XHJcblxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaW5zdGFuY2UuY29tcG9uZW50LnN1ZmZpeFwiIG1hdFN1ZmZpeD5cclxuICAgICAgICAgIHt7IGluc3RhbmNlLmNvbXBvbmVudC5zdWZmaXggfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiaXNFcnJvcigpXCIgPnt7IGdldEVycm9yTWVzc2FnZSgpIH19PC9tYXQtZXJyb3I+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYFxyXG4gIC5leGFtcGxlLXZpZXdwb3J0IHtcclxuICAgIGhlaWdodDogMjAwcHg7XHJcbiAgfVxyXG4gIFxyXG4gIC5wcm9kdWN0LXBpY2tlciB7XHJcbiAgICBvdmVyZmxvdy14OiBoaWRkZW47IC8qIERpc2FibGUgaG9yaXpvbnRhbCBzY3JvbGxpbmcgKi9cclxuICB9XHJcblxyXG4gIC52aXJ0dWFsLWZ1bGwtdmlldyB7XHJcbiAgICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDtcclxuICAgIHdoaXRlLXNwYWNlOiBub3JtYWwgIWltcG9ydGFudDtcclxuICAgIGxpbmUtaGVpZ2h0OiAxLjQgIWltcG9ydGFudDtcclxuICAgIHRleHQtb3ZlcmZsb3c6IGluaXRpYWwgIWltcG9ydGFudDtcclxuICAgIG1pbi1oZWlnaHQ6IDQ4cHggIWltcG9ydGFudDtcclxuICAgIG92ZXJmbG93OiBpbml0aWFsICFpbXBvcnRhbnQ7XHJcbiAgICBwYWRkaW5nLXRvcDogMTBweCAhaW1wb3J0YW50O1xyXG4gICAgcGFkZGluZy1ib3R0b206IDEwcHggIWltcG9ydGFudDtcclxuICB9XHJcblxyXG4gIDo6bmctZGVlcCAucHJvZHVjdC1waWNrZXIgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXIge1xyXG4gICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xyXG4gIH1cclxuXHJcbiAgLnZpcnR1YWwtZnVsbC12aWV3IC5tYXQtcHNldWRvLWNoZWNrYm94IHtcclxuICAgIGFsaWduLXNlbGY6IHRvcCAhaW1wb3J0YW50O1xyXG4gIH1cclxuICBcclxuICAudmlydHVhbC1mdWxsLXZpZXcubWF0LWFjdGl2ZXtcclxuICAgYmFja2dyb3VuZDogbm9uZTsgIFxyXG4gIH1cclxuXHJcbmBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYXRlcmlhbFNlbGVjdENvbXBvbmVudCBleHRlbmRzIE1hdGVyaWFsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIHNlbGVjdE9wdGlvbnM6IFByb21pc2U8YW55W10+O1xyXG4gIGZpbHRlcmVkT3B0aW9uczogUHJvbWlzZTxhbnlbXT47XHJcbiAgZmlsdGVyZWRPcHRpb25zTGVuZ3RoOiBudW1iZXI7XHJcbiAgc2VsZWN0T3B0aW9uc1Jlc29sdmU6IGFueTtcclxuICBwdWJsaWMgd2Vic2l0ZU11bHRpQ3RybDogRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcclxuICBwdWJsaWMgd2Vic2l0ZU11bHRpRmlsdGVyQ3RybDogRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcclxuICBAVmlld0NoaWxkKCdtdWx0aVNlbGVjdCcsIHsgc3RhdGljOiB0cnVlIH0pIG11bHRpU2VsZWN0OiBNYXRTZWxlY3Q7XHJcbiAgcHJvdGVjdGVkIF9vbkRlc3Ryb3kgPSBuZXcgU3ViamVjdCgpO1xyXG4gIEBWaWV3Q2hpbGQoJ3Byb2R1Y3RTZWxlY3QnKSBzZWxlY3RFbGVtOiBNYXRTZWxlY3Q7XHJcbiAgLy8gVmFyaWFibGVzIHRvIHRyYWNrIHBhZ2luYXRpb25cclxuICBwYWdlTnVtYmVyID0gMTtcclxuICBwYWdlU2l6ZSA9IDIwO1xyXG4gIHRvdGFsUGFnZXMgPSAwO1xyXG4gIHNlYXJjaFF1ZXJ5ID0gJyc7XHJcbiAgcHJvZHVjdHNsb2FkaW5nRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBzZWFyY2hpbmcgPSBmYWxzZTtcclxuICBwcm9kdWN0TGlzdDogYW55W10gPSBbXTtcclxuICBzZWxlY3RlZFZhbHVlOiBhbnkgPSAnJztcclxuICBzZWFyY2hJdGVtID0gXCJcIjtcclxuICAvLyBWYXJpYWJsZSB0byBob2xkIHRoZSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgcGFuZWwgZWxlbWVudFxyXG4gIHByaXZhdGUgY3VycmVudFBhbmVsRWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcclxuICBvcGVuQ291bnRlcjogbnVtYmVyID0gMVxyXG4gIGZpcnN0RHJvcGRvd25JdGVtczogYW55ID0gW107XHJcbiAgc2Vjb25kRHJvcGRvd25JdGVtczogYW55ID0gW107XHJcbiAgc3RvcmVWYWx1ZTogYW55ID0gW11cclxuICBzdG9yZURlcGVuZGVudEl0ZW1zOiBhbnkgPSBbXTtcclxuICBleGVjdXRpb25GbGFnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBhcGlDb3VudGVyOiBudW1iZXIgPSAwO1xyXG4gIGNoZWNrQXR0cmlidXRlOiBhbnk7XHJcbiAgY29uc3RydWN0b3IocHVibGljIGVsZW1lbnQ6IEVsZW1lbnRSZWYsIHB1YmxpYyByZWY6IENoYW5nZURldGVjdG9yUmVmLCBwdWJsaWMgaHR0cDogSHR0cENsaWVudCwgcHVibGljIGNvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2UpIHtcclxuICAgIHN1cGVyKGVsZW1lbnQsIHJlZik7XHJcbiAgfVxyXG5cclxuICBvbklucHV0Q2hhbmdlKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmluc3RhbmNlLmNvbXBvbmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3ZlbmRvcnByb2R1Y3RpZCcgJiYgZXZlbnQudGFyZ2V0LnZhbHVlID09PSAnJykge1xyXG4gICAgICB0aGlzLm9uQ2xlYXJBbGwoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsZWFyUHJvZHVjdHMoKSB7XHJcbiAgICBpZiAodGhpcy5pbnN0YW5jZS5jb21wb25lbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICd2ZW5kb3Jwcm9kdWN0aWQnKSB7XHJcbiAgICAgIHRoaXMub25DbGVhckFsbCgpO1xyXG4gICAgICB0aGlzLnNlYXJjaEl0ZW0gPSBcIlwiO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyUGFuZWxTY3JvbGxFdmVudChzZWxlY3RFbGVtOiBNYXRTZWxlY3QpIHtcclxuICAgIGlmIChzZWxlY3RFbGVtICYmIHNlbGVjdEVsZW0/LnBhbmVsKSB7XHJcbiAgICAgIC8vIGNvbnN0IHBhbmVsRWxlbWVudCA9IHNlbGVjdEVsZW0ucGFuZWwubmF0aXZlRWxlbWVudDtcclxuICAgICAgdGhpcy5jdXJyZW50UGFuZWxFbGVtZW50ID0gc2VsZWN0RWxlbS5wYW5lbC5uYXRpdmVFbGVtZW50O1xyXG4gICAgICB0aGlzLmN1cnJlbnRQYW5lbEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vblNjcm9sbC5iaW5kKHRoaXMpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZEN1c3RvbUNsYXNzKGtleSkge1xyXG4gICAgcmV0dXJuICd3YWxrbWVfc2VsZWN0XycgKyBrZXk7XHJcbiAgfVxyXG5cclxuICBvblNjcm9sbChldmVudCkge1xyXG4gICAgaWYgKHRoaXMuaW5zdGFuY2UuY29tcG9uZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAndmVuZG9ycHJvZHVjdGlkJykge1xyXG4gICAgICBjb25zdCBzY3JvbGxFbGVtZW50ID0gZXZlbnQudGFyZ2V0O1xyXG4gICAgICBpZiAoIXNjcm9sbEVsZW1lbnQpIHJldHVybjsgLy8gRW5zdXJlIHNjcm9sbEVsZW1lbnQgaXMgbm90IHVuZGVmaW5lZFxyXG4gICAgICBjb25zdCB0cmFja0hlaWdodCA9IHNjcm9sbEVsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsRWxlbWVudC5vZmZzZXRIZWlnaHQ7XHJcbiAgICAgIGlmIChpc05hTih0cmFja0hlaWdodCkgfHwgdHJhY2tIZWlnaHQgPD0gMCkgcmV0dXJuOyAvLyBDaGVjayBpZiB0cmFja0hlaWdodCBpcyB2YWxpZFxyXG4gICAgICBpZiAodGhpcy5vcGVuQ291bnRlciA8IDIpIHtcclxuICAgICAgICBjb25zdCByZXRyaWV2ZWRPYmplY3QgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdzdG9yYWdlT2JqZWN0JykpO1xyXG4gICAgICAgIHRoaXMudG90YWxQYWdlcyA9IE51bWJlcihyZXRyaWV2ZWRPYmplY3Q/LnRvdGFsUGFnZXMpO1xyXG4gICAgICAgIHRoaXMucHJvZHVjdHNsb2FkaW5nRmxhZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0TGlzdCA9IHJldHJpZXZlZE9iamVjdD8uZGF0YVNvdXJjZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5wcm9kdWN0c2xvYWRpbmdGbGFnICYmIE1hdGguZmxvb3Ioc2Nyb2xsRWxlbWVudD8uc2Nyb2xsVG9wIC8gdHJhY2tIZWlnaHQgKiAxMDApID4gNTApIHtcclxuICAgICAgICB0aGlzLnByb2R1Y3RzbG9hZGluZ0ZsYWcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm9wZW5Db3VudGVyID0gdGhpcy5vcGVuQ291bnRlciArIDE7XHJcbiAgICAgICAgaWYgKHRoaXMucGFnZU51bWJlciA8IHRoaXMudG90YWxQYWdlcykge1xyXG4gICAgICAgICAgdGhpcy5wYWdlTnVtYmVyID0gdGhpcy5wYWdlTnVtYmVyICsgMTtcclxuICAgICAgICAgIHRoaXMuc2VhcmNoaW5nID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMubG9hZERhdGEodGhpcy5wYWdlTnVtYmVyLCB0aGlzLnBhZ2VTaXplLCB0aGlzLnNlYXJjaFF1ZXJ5KVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnByb2R1Y3RzbG9hZGluZ0ZsYWcgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEZ1bmN0aW9uIHRvIGdldCB2YWx1ZSBieSBrZXkgZnJvbSB0aGUgYXJyYXlcclxuICBnZXRWYWx1ZUJ5S2V5KGRhdGEsIGtleSkge1xyXG4gICAgaWYgKCFkYXRhIHx8IGRhdGEubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBudWxsOyAvLyBSZXR1cm4gbnVsbCBpZiBkYXRhIGlzIGVtcHR5IG9yIHVuZGVmaW5lZFxyXG4gICAgfVxyXG4gICAgY29uc3QgaXRlbSA9IGRhdGEuZmluZChrdiA9PiBrdi5rZXkudG9Mb3dlckNhc2UoKSA9PT0ga2V5LnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgcmV0dXJuIGl0ZW0gPyBpdGVtLnZhbHVlIDogbnVsbDtcclxuICB9XHJcblxyXG5cclxuICBsb2FkRGF0YShwYWdlTnVtYmVyLCBwYWdlU2l6ZSwgc2VhcmNoUXVlcnkpIHtcclxuICAgIGNvbnN0IHBhcmFtc0RhdGEgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdwcm9kdWN0UGlja2VyUGFyYW1zJykpO1xyXG4gICAgY29uc3QgaW5jbHVkZURlc2NyaXB0aW9uID0gdGhpcy5nZXRWYWx1ZUJ5S2V5KHBhcmFtc0RhdGEsICdpbmNsdWRlRGVzY3JpcHRpb24nKTtcclxuICAgIGNvbnN0IHZlbmRvcklkID0gdGhpcy5nZXRWYWx1ZUJ5S2V5KHBhcmFtc0RhdGEsICd2ZW5kb3JJZCcpO1xyXG4gICAgY29uc3Qgb25seUFjdGl2ZSA9IHRoaXMuZ2V0VmFsdWVCeUtleShwYXJhbXNEYXRhLCAnb25seUFjdGl2ZScpO1xyXG4gICAgY29uc3QgaW5jbHVkZUNvdW50cnkgPSB0aGlzLmdldFZhbHVlQnlLZXkocGFyYW1zRGF0YSwgJ2ZpbHRlclByb2R1Y3RCYXNlZE9uQ3VzdG9tZXJDb3VudHJ5Jyk7XHJcbiAgICBjb25zdCBwcm9ncmFtSWQgPSB0aGlzLmdldFZhbHVlQnlLZXkocGFyYW1zRGF0YSwgXCJwcm9ncmFtSWRcIik7XHJcbiAgICB2YXIgY3VycmVudFVzZXIgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjdXJyZW50VXNlcicpKTtcclxuICAgIGxldCBoZWFkZXJzO1xyXG4gICAgaWYgKGN1cnJlbnRVc2VyICYmIGN1cnJlbnRVc2VyLlRva2VucyAmJiBjdXJyZW50VXNlci5Ub2tlbnMuQWNjZXNzVG9rZW4pIHtcclxuICAgICAgdmFyIGFjY2Vzc1Rva2VuID0gY3VycmVudFVzZXIuVG9rZW5zLkFjY2Vzc1Rva2VuO1xyXG4gICAgICBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcclxuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxyXG4gICAgICAgICdBdXRob3JpemF0aW9uJzogJ0JlYXJlciAnICsgYWNjZXNzVG9rZW5cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdVc2VyIG5vdCBhdXRoZW50aWNhdGVkIG9yIHRva2VucyBtaXNzaW5nLicpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGVudmVuZG9ySWQgPSB0aGlzLmNvbW1vblNlcnZpY2Uuc2NydW1ibGUodmVuZG9ySWQpXHJcbiAgICBjb25zdCBlbnBhZ2VOdW1iZXIgPSB0aGlzLmNvbW1vblNlcnZpY2Uuc2NydW1ibGUocGFnZU51bWJlcilcclxuICAgIGNvbnN0IGVucGFnZVNpemUgPSB0aGlzLmNvbW1vblNlcnZpY2Uuc2NydW1ibGUocGFnZVNpemUpO1xyXG4gICAgY29uc3QgZW5zZWFyY2hRdWVyeSA9IHRoaXMuY29tbW9uU2VydmljZS5zY3J1bWJsZShzZWFyY2hRdWVyeSk7XHJcbiAgICBjb25zdCBlbmNvZGVJbmNsdWRlQ291bnRyeSA9IHRoaXMuY29tbW9uU2VydmljZS5zY3J1bWJsZShpbmNsdWRlQ291bnRyeSk7XHJcbiAgICBsZXQgZW5hY3RpdmUgPSB0aGlzLmNvbW1vblNlcnZpY2Uuc2NydW1ibGUob25seUFjdGl2ZSk7XHJcbiAgICBjb25zdCBlbnByb2dyYW1JZCA9IHRoaXMuY29tbW9uU2VydmljZS5zY3J1bWJsZShwcm9ncmFtSWQpO1xyXG4gICAgLy9DaGVjayBpZiBlbmFjdGl2ZSBpcyB1bmRlZmluZWQsIG51bGwsIG9yIGJsYW5rXHJcbiAgICBpZiAoZW5hY3RpdmUgPT09IHVuZGVmaW5lZCB8fCBlbmFjdGl2ZSA9PT0gbnVsbCB8fCBlbmFjdGl2ZSA9PT0gJycpIHtcclxuICAgICAgZW5hY3RpdmUgPSB0aGlzLmNvbW1vblNlcnZpY2Uuc2NydW1ibGUodHJ1ZSk7IC8vIFNldCBkZWZhdWx0IHZhbHVlIHRvIHRydWVcclxuICAgIH1cclxuXHJcbiAgICAvLyBTY3J1bWJsZSBhbmQgaGFuZGxlIHRoZSBpbmNsdWRlRGVzY3JpcHRpb24gcGFyYW1ldGVyXHJcbiAgICBsZXQgZW5kZXNjcmlwdGlvbiA9IHRoaXMuY29tbW9uU2VydmljZS5zY3J1bWJsZShpbmNsdWRlRGVzY3JpcHRpb24pO1xyXG4gICAgaWYgKCFlbmRlc2NyaXB0aW9uKSB7XHJcbiAgICAgIGVuZGVzY3JpcHRpb24gPSB0aGlzLmNvbW1vblNlcnZpY2Uuc2NydW1ibGUoZmFsc2UpOyAgLy8gU2V0IHRvICdmYWxzZScgaWYgdW5kZWZpbmVkLCBudWxsLCBvciBibGFua1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGJhc2VVcmxNYXBwaW5nID0ge1xyXG4gICAgICAnYkc5allXeG9iM04wJzogJ2h0dHA6Ly9sb2NhbGhvc3Q6NTg1MDQnLFxyXG4gICAgICAnYkdsdVkyOXNiaTUyWVhKMGIzQnBZUzVqYjIwPSc6ICdodHRwczovL2xpbmNvbG4tYXBpLnZhcnRvcGlhLmNvbScsXHJcbiAgICAgICdjM1JoWjJVdWRtRnlkRzl3YVdFdVkyOXQnOiAnaHR0cHM6Ly9zdGFnZS1hcGkudmFydG9waWEuY29tJyxcclxuICAgICAgJ2JYa3VkbUZ5ZEc5d2FXRXVZMjl0JzogJ2h0dHBzOi8vcmVhZ2FuLWFwaS52YXJ0b3BpYS5jb20nLFxyXG4gICAgICAnYW1GamEzTnZiaTUyWVhKMGIzQnBZUzVqYjIwPSc6ICdodHRwczovL2phY2tzb24tYXBpLnZhcnRvcGlhLmNvbScsXHJcbiAgICAgICdkV0YwTG5aaGNuUnZjR2xoTG1OdmJRPT0nOiAnaHR0cHM6Ly91YXQtYXBpLnZhcnRvcGlhLmNvbSdcclxuICAgIH07XHJcbiAgICAvLyBHZXQgdGhlIGN1cnJlbnQgaG9zdG5hbWVcclxuICAgIGNvbnN0IGhvc3RuYW1lID0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lO1xyXG4gICAgY29uc3QgYmFzZUFwaVVybCA9IGJhc2VVcmxNYXBwaW5nW2J0b2EoaG9zdG5hbWUpXSB8fCBudWxsO1xyXG4gICAgaW50ZXJmYWNlIFZlbmRvclByb2R1Y3RzUmVzcG9uc2Uge1xyXG4gICAgICBjb2RlOiBudW1iZXI7XHJcbiAgICAgIGRhdGE6IGFueTtcclxuICAgICAgbWVzc2FnZTogc3RyaW5nO1xyXG4gICAgICBzdGF0dXNDb2RlOiBudW1iZXI7XHJcbiAgICB9XHJcbiAgICBsZXQgdXJsID0gYCR7YmFzZUFwaVVybH0vYXBpL1ZlbmRvckZvcm1CdWlsZGVyL0dldFZlbmRvclByb2R1Y3RzP3ZlbmRvcklkPSR7ZW52ZW5kb3JJZH0mcGFnZU51bWJlcj0ke2VucGFnZU51bWJlcn0mcGFnZVNpemU9JHtlbnBhZ2VTaXplfSZzZWFyY2g9JHtlbnNlYXJjaFF1ZXJ5fSZvbmx5QWN0aXZlPSR7ZW5hY3RpdmV9JmluY2x1ZGVEZXNjcmlwdGlvbj0ke2VuZGVzY3JpcHRpb259YDtcclxuICAgIGlmIChlbnByb2dyYW1JZCAmJiBwcm9ncmFtSWQpIHtcclxuICAgICAgdXJsICs9IGAmcHJvZ3JhbUlkPSR7ZW5wcm9ncmFtSWR9YDtcclxuICAgIH1cclxuICAgIC8vIE9ubHkgYWRkIGluY2x1ZGVDb3VudHJ5SWQgaWYgaXQgaGFzIGEgdmFsaWQgdmFsdWVcclxuICAgIGlmIChlbmNvZGVJbmNsdWRlQ291bnRyeSAhPT0gbnVsbCAmJiBlbmNvZGVJbmNsdWRlQ291bnRyeSAhPT0gdW5kZWZpbmVkICYmIHRoaXMuaXNGaWx0ZXJQcm9kdWN0QmFzZWRPbkN1c3RvbWVyQ291bnRyeVZhbGlkKHRoaXMuaW5zdGFuY2UuY29tcG9uZW50LmRhdGEpKSB7XHJcbiAgICAgIHVybCArPSBgJmZpbHRlclByb2R1Y3RCYXNlZE9uQ3VzdG9tZXJDb3VudHJ5PSR7ZW5jb2RlSW5jbHVkZUNvdW50cnl9YDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmh0dHAuZ2V0PFZlbmRvclByb2R1Y3RzUmVzcG9uc2U+KHVybCwgeyBoZWFkZXJzIH0pLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XHJcbiAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5jb2RlID09PSAyMDApIHtcclxuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZS5jb21wb25lbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICd2ZW5kb3Jwcm9kdWN0aWQnKSB7XHJcbiAgICAgICAgICB0aGlzLnRvdGFsUGFnZXMgPSByZXNwb25zZT8uZGF0YT8udG90YWxQYWdlcztcclxuICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZS5kYXRhLmRhdGFTb3VyY2U7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9uc0xlbmd0aCA9IGRhdGEubGVuZ3RoO1xyXG4gICAgICAgICAgaWYgKHRoaXMucHJvZHVjdExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBkYXRhLm1hcChpdGVtID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gaXRlbVxyXG4gICAgICAgICAgICB9KS5mb3JFYWNoKGkgPT4gdGhpcy5wcm9kdWN0TGlzdC5wdXNoKGkpKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wcm9kdWN0TGlzdCA9IGRhdGE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBVcGRhdGUgZmlsdGVyZWRPcHRpb25zIHdpdGggdHJhbnNmb3JtZWREYXRhXHJcbiAgICAgICAgICB2YXIgYWxsUHJvZHVjdExpc3QgPSB0aGlzLnRyYW5zZm9ybVJlc3BvbnNlRGF0YSh0aGlzLnByb2R1Y3RMaXN0KTtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gUHJvbWlzZS5yZXNvbHZlKGFsbFByb2R1Y3RMaXN0KTtcclxuICAgICAgICAgIHRoaXMuc2VhcmNoaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnByb2R1Y3RzbG9hZGluZ0ZsYWcgPSB0cnVlO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZSA9IHRoaXMuc2VsZWN0RWxlbT8ucGFuZWw/Lm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGlmIChlbGUpIHtcclxuICAgICAgICAgICAgICBjb25zdCB0cmFja0hlaWdodCA9IGVsZS5zY3JvbGxIZWlnaHQgLSBlbGUub2Zmc2V0SGVpZ2h0XHJcbiAgICAgICAgICAgICAgY29uc3QgbWlkZGxlUG9zaXRpb24gPSB0cmFja0hlaWdodCAvIDIgLSA1MDtcclxuICAgICAgICAgICAgICBlbGUuc2Nyb2xsVG8oeyB0b3A6IG1pZGRsZVBvc2l0aW9uLCBiZWhhdmlvcjogJ2F1dG8nIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdQYW5lbCBlbGVtZW50IGlzIG5vdCBhdmFpbGFibGUgeWV0LicpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgfSwgMjUwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIFV0aWxpdHkgZnVuY3Rpb24gdG8gdHJhbnNmb3JtIHJlc3BvbnNlIGRhdGFcclxuICB0cmFuc2Zvcm1SZXNwb25zZURhdGEoZGF0YTogQXJyYXk8eyB0ZXh0OiBhbnksIHZhbHVlOiBhbnksIGRhdGU6IGFueSB9PiB8IG51bGwgfCB1bmRlZmluZWQpOiBBcnJheTx7IGxhYmVsOiBzdHJpbmcsIHZhbHVlOiBudW1iZXIsIGRhdGU6IHN0cmluZyB9PiB7XHJcbiAgICAvLyBDaGVjayBpZiBkYXRhIGlzIG5vdCBudWxsLCB1bmRlZmluZWQsIGFuZCBpcyBhbiBhcnJheSB3aXRoIGVsZW1lbnRzXHJcbiAgICBpZiAoZGF0YSAmJiBBcnJheS5pc0FycmF5KGRhdGEpICYmIGRhdGEubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXR1cm4gZGF0YS5tYXAoaXRlbSA9PiAoe1xyXG4gICAgICAgIGxhYmVsOiBpdGVtLnRleHQsXHJcbiAgICAgICAgdmFsdWU6IGl0ZW0udmFsdWUsXHJcbiAgICAgICAgZGF0ZTogaXRlbS5kYXRlXHJcbiAgICAgIH0pKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFJldHVybiBhbiBlbXB0eSBhcnJheSBpZiBkYXRhIGlzIG51bGwsIHVuZGVmaW5lZCwgb3IgZW1wdHlcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG5cclxuICBmaWx0ZXJXZWJzaXRlTXVsdGkoKSB7XHJcbiAgICBpZiAoIXRoaXMuc2VsZWN0T3B0aW9ucykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgc2VhcmNoID0gdGhpcy53ZWJzaXRlTXVsdGlGaWx0ZXJDdHJsLnZhbHVlO1xyXG4gICAgc2VhcmNoID0gc2VhcmNoLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMuc2VsZWN0T3B0aW9ucy50aGVuKChvcHRpb25zKSA9PiB7XHJcbiAgICAgIGNvbnN0IGZpbHRlcmVkID0gb3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4gb3B0aW9uLmxhYmVsLnJlcGxhY2UoLzxcXC8/c3BhbltePl0qPi9nLCBcIlwiKS50b0xvd2VyQ2FzZSgpLmluZGV4T2Yoc2VhcmNoKSAhPT0gLTEpO1xyXG4gICAgICB0aGlzLmZpbHRlcmVkT3B0aW9uc0xlbmd0aCA9IGZpbHRlcmVkLmxlbmd0aDtcclxuICAgICAgcmV0dXJuIGZpbHRlcmVkO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLl9vbkRlc3Ryb3kubmV4dCgnJyk7XHJcbiAgICB0aGlzLl9vbkRlc3Ryb3kuY29tcGxldGUoKTtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRQYW5lbEVsZW1lbnQpIHtcclxuICAgICAgdGhpcy5jdXJyZW50UGFuZWxFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwuYmluZCh0aGlzKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLypFbmQqL1xyXG4gIHNldEluc3RhbmNlKGluc3RhbmNlOiBhbnkpIHtcclxuICAgIHN1cGVyLnNldEluc3RhbmNlKGluc3RhbmNlKTtcclxuICAgIHRoaXMuaW5zdGFuY2UudHJpZ2dlclVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgb25DbGVhckFsbCgpIHtcclxuICAgIGlmICh0aGlzLmluc3RhbmNlLmNvbXBvbmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3ZlbmRvcnByb2R1Y3RpZCcpIHtcclxuICAgICAgdGhpcy5wYWdlTnVtYmVyID0gMTtcclxuICAgICAgdGhpcy5wYWdlU2l6ZSA9IDIwO1xyXG4gICAgICB0aGlzLnNlYXJjaFF1ZXJ5ID0gJyc7XHJcbiAgICAgIHRoaXMuc2VhcmNoaW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucHJvZHVjdExpc3QgPSBbXTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gJyc7XHJcbiAgICAgIHRoaXMubG9hZERhdGEodGhpcy5wYWdlTnVtYmVyLCB0aGlzLnBhZ2VTaXplLCB0aGlzLnNlYXJjaFF1ZXJ5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZVNlY29uZERyb3Bkb3duKHZhbHVlOiBhbnkpIHtcclxuICAgIGNvbnN0IHBhcmFtc0RhdGEgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjYXNjYWRpbmdEcm9wZG93bnNQYXJhbXNvbmUnKSk7XHJcbiAgICBjb25zdCB2ZW5kb3JJZCA9IHRoaXMuZ2V0VmFsdWVCeUtleShwYXJhbXNEYXRhLCAndmVuZG9ySWQnKTtcclxuICAgIGNvbnN0IGRlYWxJZCA9IHRoaXMuZ2V0VmFsdWVCeUtleShwYXJhbXNEYXRhLCAnZGVhbElkJyk7XHJcbiAgICBjb25zdCBpc0VkaXQgPSB0aGlzLmdldFZhbHVlQnlLZXkocGFyYW1zRGF0YSwgJ2lzRWRpdCcpO1xyXG4gICAgbGV0IGZpbmFsUGFyYW1zO1xyXG4gICAgdGhpcy5pbnN0YW5jZT8ucGFyZW50Py5jb21wb25lbnRzPy5sZW5ndGggJiYgdGhpcy5pbnN0YW5jZS5wYXJlbnQuY29tcG9uZW50cy5mb3JFYWNoKGl0ZW1zID0+IHtcclxuICAgICAgaWYgKHRoaXMuY2hlY2tWZW5kb3JSZWZJdGVtcyhpdGVtcykpIHtcclxuICAgICAgICBjb25zdCBhcGlFbmRQb2ludCA9IGl0ZW1zPy5jb21wb25lbnQ/LnNlbGVjdFZhbHVlcztcclxuICAgICAgICBpZiAoYXBpRW5kUG9pbnQgIT0gJycpIHtcclxuICAgICAgICAgIHZhciBwYXJhbWV0ZXJzID0gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgXCJrZXlcIjogXCJ1c2VySWRcIixcclxuICAgICAgICAgICAgICBcInZhbHVlXCI6IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2N1cnJlbnRVc2VyJykpLlVzZXJJZFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgXCJrZXlcIjogXCJ2ZW5kb3JJZFwiLFxyXG4gICAgICAgICAgICAgIFwidmFsdWVcIjogdmVuZG9ySWRcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIFwia2V5XCI6IFwibG9naW5Vc2VySWRcIixcclxuICAgICAgICAgICAgICBcInZhbHVlXCI6IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2N1cnJlbnRVc2VyJykpLlVzZXJJZFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgXCJrZXlcIjogXCJjb3VudHJ5XCIsXHJcbiAgICAgICAgICAgICAgXCJ2YWx1ZVwiOiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUudHJpbSgpIDogJydcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIFwia2V5XCI6IFwiZGF0YVZhbHVlXCIsXHJcbiAgICAgICAgICAgICAgXCJ2YWx1ZVwiOiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUudHJpbSgpIDogJydcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIFwia2V5XCI6IFwiZGVhbElkXCIsXHJcbiAgICAgICAgICAgICAgXCJ2YWx1ZVwiOiBkZWFsSWRcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIFwia2V5XCI6IFwiaXNFZGl0XCIsXHJcbiAgICAgICAgICAgICAgXCJ2YWx1ZVwiOiBpc0VkaXRcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIFwia2V5XCI6IFwicmVmZXJlbmNlTGlzdE5hbWVcIixcclxuICAgICAgICAgICAgICBcInZhbHVlXCI6IGl0ZW1zPy5jb21wb25lbnQ/LmtleVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgXCJrZXlcIjogXCJyZWZlcmVuY2VMaXN0RmllbGROYW1lXCIsXHJcbiAgICAgICAgICAgICAgXCJ2YWx1ZVwiOiB0aGlzLmluc3RhbmNlPy5jb21wb25lbnQ/LmtleVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICBdXHJcbiAgICAgICAgICBmaW5hbFBhcmFtcyA9IHBhcmFtZXRlcnM/LmZpbHRlcihmMSA9PiBpdGVtcz8uY29tcG9uZW50Py5kYXRhPy5oZWFkZXJzLnNvbWUoZjIgPT4gZjEua2V5ID09PSBmMi5rZXkpKTtcclxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpbmFsUGFyYW1zKSkge1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGZpbmFsUGFyYW1zLmZpbmRJbmRleChwYXJhbSA9PiBwYXJhbS5rZXkgPT09ICdkYXRhVmFsdWUnKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgICAgICAgIC8vIElmIHRoZSBvYmplY3QgZXhpc3RzLCB1cGRhdGUgaXRzIHZhbHVlXHJcbiAgICAgICAgICAgICAgZmluYWxQYXJhbXNbaW5kZXhdLnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgLy8gSWYgdGhlIG9iamVjdCBkb2Vzbid0IGV4aXN0LCBhZGQgaXQgdG8gdGhlIGFycmF5XHJcbiAgICAgICAgICAgICAgZmluYWxQYXJhbXMucHVzaCh7IGtleTogJ2RhdGFWYWx1ZScsIHZhbHVlOiB2YWx1ZSB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNlY29uZERyb3Bkb3duSXRlbXMgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlLnNldERyb3Bkb3duSXRlbXModGhpcy5zZWNvbmREcm9wZG93bkl0ZW1zKTtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlLmluaXRpYWxpemVBcGlQYXRoKGFwaUVuZFBvaW50LCBmaW5hbFBhcmFtcykuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlY29uZERyb3Bkb3duSXRlbXMgPSByZXNwb25zZS5kYXRhO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlLnNldERyb3Bkb3duSXRlbXModGhpcy5zZWNvbmREcm9wZG93bkl0ZW1zKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICBpZiAodGhpcy5lbGVtZW50ICYmIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50ICYmIHRoaXMuaW5zdGFuY2UpIHtcclxuICAgICAgLy8gQWRkIGN1c3RvbSBjbGFzc2VzIHRvIGVsZW1lbnRzLlxyXG4gICAgICBpZiAodGhpcy5pbnN0YW5jZS5jb21wb25lbnQuY3VzdG9tQ2xhc3MpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKHRoaXMuaW5zdGFuY2UuY29tcG9uZW50LmN1c3RvbUNsYXNzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxlY3RFbGVtLm9wZW5lZENoYW5nZS5zdWJzY3JpYmUoYXN5bmMgKGlzT3BlbjogYm9vbGVhbikgPT4ge1xyXG4gICAgICBsZXQgaSA9IDBcclxuICAgICAgaWYgKGlzT3Blbikge1xyXG4gICAgICAgIGNvbnN0IG5ld1Byb2R1Y3RQaWNrZXJGbGFnID0gdGhpcy5pbnN0YW5jZT8uY29tcG9uZW50Py5hdHRyaWJ1dGVzO1xyXG4gICAgICAgIGxldCBjaGVja0ludm9rZUZyb21MaWJyYXJ5ID0gdGhpcy5jb21tb25TZXJ2aWNlLmNoZWNrSXNBdHRyaWJ1dGVUcnVlKG5ld1Byb2R1Y3RQaWNrZXJGbGFnLCBcImludm9rZUZyb21MaWJyYXJ5XCIpXHJcbiAgICAgICAgY29uc3QgZmlyc3RMZXZlbCA9ICh0aGlzLmdldFZlbmRvclJlZkxpc3QodGhpcy5pbnN0YW5jZSkgJiYgY2hlY2tJbnZva2VGcm9tTGlicmFyeSk7XHJcbiAgICAgICAgaWYgKGZpcnN0TGV2ZWwpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0RWxlbS52YWx1ZUNoYW5nZS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlLnNldERyb3BEb3duRmxhZyh0cnVlKTtcclxuICAgICAgICAgICAgaWYgKGkgPT09IDApIHtcclxuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlY29uZERyb3Bkb3duKHJlcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaSsrXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG5cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tWZW5kb3JSZWZJdGVtcyh0aGlzLmluc3RhbmNlKSAmJiBjaGVja0ludm9rZUZyb21MaWJyYXJ5KSB7XHJcbiAgICAgICAgICB0aGlzLnN0b3JlRGVwZW5kZW50SXRlbXMgPSBbXTtcclxuICAgICAgICAgIHRoaXMuc2Vjb25kRHJvcGRvd25JdGVtcyA9IHRoaXMuY29tbW9uU2VydmljZS5nZXREcm9wZG93bkl0ZW1zKCk7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWNvbmREcm9wZG93bkl0ZW1zPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWNvbmREcm9wZG93bkl0ZW1zLmZvckVhY2goKHJlbmRlckVsZW1lbnQsIGluZGV4LCBhcnJheSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuc3RvcmVEZXBlbmRlbnRJdGVtcy5wdXNoKHsgbGFiZWw6IHJlbmRlckVsZW1lbnRbJ3RleHQnXSwgdmFsdWU6IHRoaXMuY29tbW9uU2VydmljZS5vbmx5TnVtYmVycyhyZW5kZXJFbGVtZW50Wyd2YWx1ZSddKSA/IHJlbmRlckVsZW1lbnRbJ3ZhbHVlJ10gKyAnICcgOiByZW5kZXJFbGVtZW50Wyd2YWx1ZSddIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICghdGhpcy5jb21tb25TZXJ2aWNlLmdldERyb3BEb3duRmxhZygpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmVEZXBlbmRlbnRJdGVtcyA9IHRoaXMuaW5zdGFuY2UuY29tcG9uZW50LmRhdGEudmFsdWVzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBQcm9taXNlLnJlc29sdmUodGhpcy5zdG9yZURlcGVuZGVudEl0ZW1zKTtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0T3B0aW9ucyA9IFByb21pc2UucmVzb2x2ZSh0aGlzLnN0b3JlRGVwZW5kZW50SXRlbXMpO1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RPcHRpb25zLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnNMZW5ndGggPSByZXN1bHQubGVuZ3RoXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLmluc3RhbmNlLmNvbXBvbmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3ZlbmRvcnByb2R1Y3RpZCcpIHtcclxuICAgICAgdGhpcy5zZWxlY3RFbGVtLm9wZW5lZENoYW5nZS5zdWJzY3JpYmUoKGlzT3BlbjogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIGlmIChpc09wZW4pIHtcclxuICAgICAgICAgIHRoaXMucGFnZU51bWJlciA9IDE7XHJcbiAgICAgICAgICB0aGlzLnBhZ2VTaXplID0gMjA7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hRdWVyeT8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWFyY2hJdGVtPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy53ZWJzaXRlTXVsdGlGaWx0ZXJDdHJsLnNldFZhbHVlKHRoaXMuc2VhcmNoSXRlbSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyB0aGlzLnNlYXJjaFF1ZXJ5ID0gJyc7XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgLy90aGlzLmxvYWREYXRhKHRoaXMucGFnZU51bWJlciwgdGhpcy5wYWdlU2l6ZSwgdGhpcy5zZWFyY2hRdWVyeSk7XHJcbiAgICAgICAgICB0aGlzLnJlZ2lzdGVyUGFuZWxTY3JvbGxFdmVudCh0aGlzLnNlbGVjdEVsZW0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnJlbW92ZVBhbmVsU2Nyb2xsRXZlbnQoKTtcclxuICAgICAgICAgIHRoaXMuc2VhcmNoaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAvLyB0aGlzLnNlbGVjdGVkVmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XHJcbiAgICAgICAgICAvLyBpZiAodGhpcy5zZWxlY3RlZFZhbHVlPy50b1N0cmluZygpLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAvLyAgIHRoaXMucHJvZHVjdExpc3QgPSBbXTtcclxuICAgICAgICAgIC8vICAgdGhpcy5wYWdlTnVtYmVyID0gMTtcclxuICAgICAgICAgIC8vICAgdGhpcy5wYWdlU2l6ZSA9IDIwO1xyXG4gICAgICAgICAgLy8gICB0aGlzLnNlYXJjaFF1ZXJ5ID0gJyc7XHJcbiAgICAgICAgICAvLyAgIHRoaXMubG9hZERhdGEodGhpcy5wYWdlTnVtYmVyLCB0aGlzLnBhZ2VTaXplLCB0aGlzLnNlYXJjaFF1ZXJ5KTtcclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlUGFuZWxTY3JvbGxFdmVudCgpIHtcclxuICAgIC8vIFJlbW92ZSB0aGUgc2Nyb2xsIGV2ZW50IGxpc3RlbmVyXHJcbiAgICBpZiAodGhpcy5jdXJyZW50UGFuZWxFbGVtZW50KSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFBhbmVsRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLm9uU2Nyb2xsLmJpbmQodGhpcykpO1xyXG4gICAgICB0aGlzLmN1cnJlbnRQYW5lbEVsZW1lbnQgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIC8qbmV3IGxvZ2ljICovXHJcbiAgICBpZiAodGhpcy5pbnN0YW5jZS5jb21wb25lbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICd2ZW5kb3Jwcm9kdWN0aWQnKSB7XHJcbiAgICAgIHRoaXMud2Vic2l0ZU11bHRpRmlsdGVyQ3RybC52YWx1ZUNoYW5nZXNcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIGRlYm91bmNlVGltZSgxMDAwKSwgLy8gVGltZSBpbiBtaWxsaXNlY29uZHMgYmV0d2VlbiBrZXkgZXZlbnRzXHJcbiAgICAgICAgICAvLyAgdGFwKCgpID0+IHRoaXMuc2VhcmNoaW5nID0gdHJ1ZSksXHJcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoc2VhcmNoUXVlcnkpID0+IHtcclxuICAgICAgICAgIGlmIChzZWFyY2hRdWVyeSAhPSAnJykge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5wYWdlTnVtYmVyID0gMTtcclxuICAgICAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IDIwO1xyXG4gICAgICAgICAgICB0aGlzLnByb2R1Y3RMaXN0ID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hRdWVyeSA9IHNlYXJjaFF1ZXJ5O1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaEl0ZW0gPSBzZWFyY2hRdWVyeVxyXG4gICAgICAgICAgICB0aGlzLmxvYWREYXRhKHRoaXMucGFnZU51bWJlciwgdGhpcy5wYWdlU2l6ZSwgc2VhcmNoUXVlcnkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy53ZWJzaXRlTXVsdGlGaWx0ZXJDdHJsLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcldlYnNpdGVNdWx0aSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLypFbmQgKi9cclxuICAgIHRoaXMuc2VsZWN0T3B0aW9ucyA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgIHRoaXMuc2VsZWN0T3B0aW9uc1Jlc29sdmUgPSByZXNvbHZlO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnNlbGVjdE9wdGlvbnMudGhlbigob3B0aW9ucykgPT4ge1xyXG4gICAgICB0aGlzLmZpbHRlcmVkT3B0aW9uc0xlbmd0aCA9IG9wdGlvbnMubGVuZ3RoO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLnNlbGVjdE9wdGlvbnM7XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdGlvbkNoYW5nZShldmVudDogYW55LCBzdWJtaXREYXRhOiBhbnksIGF0dHJpYnV0ZXM6IGFueSkge1xyXG5cclxuICB9XHJcblxyXG4gIGNoZWNrVmVuZG9yUmVmSXRlbXMoaW5zdGFuY2UpIHtcclxuICAgIGNvbnN0IHNlbGVjdFZhbHVlcyA9IGluc3RhbmNlLmNvbXBvbmVudFsnc2VsZWN0VmFsdWVzJ107XHJcbiAgICBjb25zdCBkYXRhVXJsID0gaW5zdGFuY2UuY29tcG9uZW50WydkYXRhJ10/LnVybDtcclxuICAgIGNvbnN0IGlzU2VsZWN0VmFsdWVzVmFsaWQgPSBzZWxlY3RWYWx1ZXMgIT0gbnVsbCAmJiBzZWxlY3RWYWx1ZXMgIT09ICcnICYmIHNlbGVjdFZhbHVlcyAhPT0gdW5kZWZpbmVkO1xyXG4gICAgY29uc3QgaXNEYXRhVXJsSW52YWxpZCA9IGRhdGFVcmwgPT0gbnVsbCB8fCBkYXRhVXJsID09PSAnJyB8fCBkYXRhVXJsID09PSB1bmRlZmluZWQ7XHJcbiAgICBpbnN0YW5jZS5jb21wb25lbnQuZGVmYXVsdFZhbHVlID0gXCJcIjtcclxuICAgIHJldHVybiBpc1NlbGVjdFZhbHVlc1ZhbGlkICYmIGlzRGF0YVVybEludmFsaWQ7XHJcbiAgfVxyXG5cclxuICBnZXRWZW5kb3JSZWZMaXN0KGluc3RhbmNlKSB7XHJcbiAgICBjb25zdCBkYXRhVXJsID0gaW5zdGFuY2UuY29tcG9uZW50WydkYXRhJ10/LnVybDtcclxuICAgIGNvbnN0IGlzU2VsZWN0VmFsdWVzVmFsaWQgPSBkYXRhVXJsICE9IG51bGwgJiYgZGF0YVVybCAhPT0gJycgJiYgZGF0YVVybCAhPT0gdW5kZWZpbmVkO1xyXG4gICAgcmV0dXJuIGlzU2VsZWN0VmFsdWVzVmFsaWQ7XHJcbiAgfVxyXG5cclxuICBpc0Vycm9yKCkge1xyXG4gICAgaWYgKHRoaXMuaW5zdGFuY2UuZXJyb3IpIHtcclxuICAgICAgdGhpcy5jb250cm9sLnNldEVycm9ycyh0aGlzLmluc3RhbmNlLmNvbXBvbmVudC52YWxpZGF0ZSk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldEVycm9yTWVzc2FnZSgpIHtcclxuICAgIGlmICh0aGlzLmluc3RhbmNlLmVycm9yICYmIHRoaXMuaW5zdGFuY2UuZXJyb3IubWVzc2FnZXMpIHtcclxuICAgICAgY29uc3QgeyBtZXNzYWdlcyB9ID0gdGhpcy5pbnN0YW5jZS5lcnJvcjtcclxuICAgICAgaWYgKG1lc3NhZ2VzLmxlbmd0aCkge1xyXG4gICAgICAgIGZvciAoY29uc3QgbXNnIG9mIG1lc3NhZ2VzKSB7XHJcbiAgICAgICAgICBpZiAobXNnLmNvbnRleHQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UgJiYgdGhpcy5pbnN0YW5jZS5wYXJlbnQgJiYgdGhpcy5pbnN0YW5jZS5wYXJlbnQuX2RhdGEpIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZS5wYXJlbnQuX2RhdGEuc3VibWl0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2wubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbnN0YW5jZS5lcnJvciA/IHRoaXMuaW5zdGFuY2UuZXJyb3IubWVzc2FnZSA6ICcnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29tcGFyZU9iamVjdHMobzE6IGFueSwgbzI6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIF8uaXNFcXVhbChvMSwgbzIpO1xyXG4gIH1cclxuXHJcbiAgaXNGaWx0ZXJQcm9kdWN0QmFzZWRPbkN1c3RvbWVyQ291bnRyeVZhbGlkKGRhdGEpIHtcclxuICAgIGlmIChkYXRhICYmIGRhdGEuaGVhZGVycyAmJiBBcnJheS5pc0FycmF5KGRhdGEuaGVhZGVycykpIHtcclxuICAgICAgY29uc3QgaGVhZGVyID0gZGF0YS5oZWFkZXJzLmZpbmQoaCA9PiBoLmtleSA9PT0gJ2ZpbHRlclByb2R1Y3RCYXNlZE9uQ3VzdG9tZXJDb3VudHJ5Jyk7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBoZWFkZXIgJiZcclxuICAgICAgICBoZWFkZXIudmFsdWUgIT09IG51bGwgJiZcclxuICAgICAgICBoZWFkZXIudmFsdWUgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgIGhlYWRlci52YWx1ZS50cmltKCkgIT09IFwiXCIgJiZcclxuICAgICAgICBoZWFkZXIudmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCkgPT09IFwidHJ1ZVwiXHJcbiAgICAgICkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxufVxyXG5TZWxlY3RDb21wb25lbnQuTWF0ZXJpYWxDb21wb25lbnQgPSBNYXRlcmlhbFNlbGVjdENvbXBvbmVudDtcclxuXHJcbi8vIE1ha2Ugc3VyZSB3ZSBkZXRlY3QgY2hhbmdlcyB3aGVuIG5ldyBpdGVtcyBtYWtlIHRoZWlyIHdheSBpbnRvIHRoZSBzZWxlY3QgZHJvcGRvd24uXHJcbmNvbnN0IHNldEl0ZW1zID0gU2VsZWN0Q29tcG9uZW50LnByb3RvdHlwZS5zZXRJdGVtcztcclxuU2VsZWN0Q29tcG9uZW50LnByb3RvdHlwZS5zZXRJdGVtcyA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XHJcbiAgc2V0SXRlbXMuY2FsbCh0aGlzLCAuLi5hcmdzKTtcclxuICBpZiAodGhpcy5tYXRlcmlhbENvbXBvbmVudCAmJiB0aGlzLm1hdGVyaWFsQ29tcG9uZW50LnNlbGVjdE9wdGlvbnNSZXNvbHZlKSB7XHJcbiAgICB0aGlzLm1hdGVyaWFsQ29tcG9uZW50LnNlbGVjdE9wdGlvbnNSZXNvbHZlKHRoaXMuc2VsZWN0T3B0aW9ucyk7XHJcbiAgfVxyXG59O1xyXG5cclxuZXhwb3J0IHsgU2VsZWN0Q29tcG9uZW50IH07Il19
637
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1yZW5kZXItbWF0ZXJpYWwtZm9ybXMvc3JjL2xpYi9jb21wb25lbnRzL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0MsU0FBUyxFQUE0QyxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakksT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxlQUFlLE1BQU0sc0NBQXNDLENBQUM7QUFDbkUsT0FBTyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQVUsU0FBUyxFQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUYsT0FBTyxFQUFjLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQW9GL0QsTUFBTSxPQUFPLHVCQUF3QixTQUFRLGlCQUFpQjtJQWdDNUQsWUFBbUIsT0FBbUIsRUFBUyxHQUFzQixFQUFTLElBQWdCLEVBQVMsYUFBNEI7UUFDakksS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztRQURILFlBQU8sR0FBUCxPQUFPLENBQVk7UUFBUyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUFTLFNBQUksR0FBSixJQUFJLENBQVk7UUFBUyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQTNCNUgscUJBQWdCLEdBQWdCLElBQUksV0FBVyxFQUFFLENBQUM7UUFDbEQsMkJBQXNCLEdBQWdCLElBQUksV0FBVyxFQUFFLENBQUM7UUFFckQsZUFBVSxHQUFHLElBQUksT0FBTyxFQUFF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O0lBQ3BELFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUM7SUFDN0IsSUFBSSxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLG9CQUFvQixFQUFFO1FBQ3pFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7S0FDakU7QUFDSCxDQUFDLENBQUM7QUFFRixPQUFPLEVBQUUsZUFBZSxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBPbkRlc3Ryb3ksIE9uSW5pdCwgUmVuZGVyZXIyLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0ZXJpYWxDb21wb25lbnQgfSBmcm9tICcuLi9NYXRlcmlhbENvbXBvbmVudCc7XHJcbmltcG9ydCBTZWxlY3RDb21wb25lbnQgZnJvbSAnZm9ybWlvanMvY29tcG9uZW50cy9zZWxlY3QvU2VsZWN0LmpzJztcclxuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgTWF0U2VsZWN0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcclxuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24uc2VydmljZSc7XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbWF0LWZvcm1pby1zZWxlY3QnLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8bWF0LWZvcm1pby1mb3JtLWZpZWxkIFtpbnN0YW5jZV09XCJpbnN0YW5jZVwiIFtjb21wb25lbnRUZW1wbGF0ZV09XCJjb21wb25lbnRUZW1wbGF0ZVwiPjwvbWF0LWZvcm1pby1mb3JtLWZpZWxkPlxyXG4gICAgPG5nLXRlbXBsYXRlICNjb21wb25lbnRUZW1wbGF0ZSBsZXQtaGFzTGFiZWw+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZpbGw+XHJcblxyXG4gICAgICAgIDxtYXQtbGFiZWwgKm5nSWY9XCJoYXNMYWJlbFwiPlxyXG4gICAgICAgICAgPHNwYW4gW2luc3RhbmNlXT1cImluc3RhbmNlXCIgbWF0Rm9ybWlvTGFiZWw+PC9zcGFuPlxyXG4gICAgICAgIDwvbWF0LWxhYmVsPlxyXG5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cImluc3RhbmNlLmNvbXBvbmVudC5wcmVmaXhcIiBtYXRQcmVmaXg+XHJcbiAgICAgICAgICB7eyBpbnN0YW5jZS5jb21wb25lbnQucHJlZml4IH19Jm5ic3A7XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDxtYXQtc2VsZWN0XHJcbiAgICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwiaW5zdGFuY2UuY29tcG9uZW50Lm11bHRpcGxlXCJcclxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcclxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJpbnN0YW5jZS5jb21wb25lbnQucGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkNoYW5nZSgpXCJcclxuICAgICAgICAgICAgICAgIFtjb21wYXJlV2l0aF09XCJjb21wYXJlT2JqZWN0c1wiXHJcbiAgICAgICAgICAgICAgICAjcHJvZHVjdFNlbGVjdFxyXG4gICAgICAgICAgICAgICAgW3BhbmVsQ2xhc3NdPVwiYWRkQ3VzdG9tQ2xhc3MoaW5zdGFuY2UuY29tcG9uZW50LmtleSlcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8bWF0LW9wdGlvbj5cclxuICAgICAgICA8bmd4LW1hdC1zZWxlY3Qtc2VhcmNoIFtzZWFyY2hpbmddPVwiaW5zdGFuY2UuY29tcG9uZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAndmVuZG9ycHJvZHVjdGlkJyA/IHNlYXJjaGluZyA6IGZhbHNlXCIgKGlucHV0KT1cIm9uSW5wdXRDaGFuZ2UoJGV2ZW50KVwiIHBsYWNlaG9sZGVyTGFiZWw9XCJUeXBlIHRvIHNlYXJjaFwiIFtmb3JtQ29udHJvbF09XCJ3ZWJzaXRlTXVsdGlGaWx0ZXJDdHJsXCI+IFxyXG4gICAgICAgIDxtYXQtaWNvbiBuZ3hNYXRTZWxlY3RTZWFyY2hDbGVhciAoY2xpY2spPVwiY2xlYXJQcm9kdWN0cygpXCI+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgIDwvbmd4LW1hdC1zZWxlY3Qtc2VhcmNoPlxyXG4gICAgICA8L21hdC1vcHRpb24+XHJcblxyXG4gICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGZpbHRlcmVkT3B0aW9ucyB8IGFzeW5jXCIgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiIGNsYXNzPVwidmlydHVhbC1mdWxsLXZpZXdcIj5cclxuICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwib3B0aW9uLmxhYmVsXCI+PC9zcGFuPlxyXG4gICAgICAgIDwvbWF0LW9wdGlvbj4gICBcclxuICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0lmPVwiIWZpbHRlcmVkT3B0aW9uc0xlbmd0aFwiIGRpc2FibGVkPlxyXG4gICAgICAgICAgICA8c3Bhbj5Ob3RoaW5nIHdhcyBmb3VuZDwvc3Bhbj5cclxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8L21hdC1zZWxlY3Q+XHJcblxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaW5zdGFuY2UuY29tcG9uZW50LnN1ZmZpeFwiIG1hdFN1ZmZpeD5cclxuICAgICAgICAgIHt7IGluc3RhbmNlLmNvbXBvbmVudC5zdWZmaXggfX1cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiaXNFcnJvcigpXCIgPnt7IGdldEVycm9yTWVzc2FnZSgpIH19PC9tYXQtZXJyb3I+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBbYFxyXG4gIC5leGFtcGxlLXZpZXdwb3J0IHtcclxuICAgIGhlaWdodDogMjAwcHg7XHJcbiAgfVxyXG4gIFxyXG4gIC5wcm9kdWN0LXBpY2tlciB7XHJcbiAgICBvdmVyZmxvdy14OiBoaWRkZW47IC8qIERpc2FibGUgaG9yaXpvbnRhbCBzY3JvbGxpbmcgKi9cclxuICB9XHJcblxyXG4gIC52aXJ0dWFsLWZ1bGwtdmlldyB7XHJcbiAgICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDtcclxuICAgIHdoaXRlLXNwYWNlOiBub3JtYWwgIWltcG9ydGFudDtcclxuICAgIGxpbmUtaGVpZ2h0OiAxLjQgIWltcG9ydGFudDtcclxuICAgIHRleHQtb3ZlcmZsb3c6IGluaXRpYWwgIWltcG9ydGFudDtcclxuICAgIG1pbi1oZWlnaHQ6IDQ4cHggIWltcG9ydGFudDtcclxuICAgIG92ZXJmbG93OiBpbml0aWFsICFpbXBvcnRhbnQ7XHJcbiAgICBwYWRkaW5nLXRvcDogMTBweCAhaW1wb3J0YW50O1xyXG4gICAgcGFkZGluZy1ib3R0b206IDEwcHggIWltcG9ydGFudDtcclxuICB9XHJcblxyXG4gIDo6bmctZGVlcCAucHJvZHVjdC1waWNrZXIgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXIge1xyXG4gICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xyXG4gIH1cclxuXHJcbiAgLnZpcnR1YWwtZnVsbC12aWV3IC5tYXQtcHNldWRvLWNoZWNrYm94IHtcclxuICAgIGFsaWduLXNlbGY6IHRvcCAhaW1wb3J0YW50O1xyXG4gIH1cclxuICBcclxuICAubWF0LW9wdGlvbi52aXJ0dWFsLWZ1bGwtdmlldy5tYXQtYWN0aXZlIHtcclxuICAgYmFja2dyb3VuZDogbm9uZSA7XHJcbiAgfVxyXG5cclxuLm1hdC1vcHRpb24udmlydHVhbC1mdWxsLXZpZXcubWF0LXNlbGVjdGVkIC5tYXQtb3B0aW9uLXRleHQgc3BhbntcclxuICAgIGNvbG9yOnJnYmEoMCwwLDAsLjg3KTtcclxufVxyXG5cclxuYF1cclxufSlcclxuZXhwb3J0IGNsYXNzIE1hdGVyaWFsU2VsZWN0Q29tcG9uZW50IGV4dGVuZHMgTWF0ZXJpYWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgc2VsZWN0T3B0aW9uczogUHJvbWlzZTxhbnlbXT47XHJcbiAgZmlsdGVyZWRPcHRpb25zOiBQcm9taXNlPGFueVtdPjtcclxuICBmaWx0ZXJlZE9wdGlvbnNMZW5ndGg6IG51bWJlcjtcclxuICBzZWxlY3RPcHRpb25zUmVzb2x2ZTogYW55O1xyXG4gIHB1YmxpYyB3ZWJzaXRlTXVsdGlDdHJsOiBGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xyXG4gIHB1YmxpYyB3ZWJzaXRlTXVsdGlGaWx0ZXJDdHJsOiBGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgpO1xyXG4gIEBWaWV3Q2hpbGQoJ211bHRpU2VsZWN0JywgeyBzdGF0aWM6IHRydWUgfSkgbXVsdGlTZWxlY3Q6IE1hdFNlbGVjdDtcclxuICBwcm90ZWN0ZWQgX29uRGVzdHJveSA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgQFZpZXdDaGlsZCgncHJvZHVjdFNlbGVjdCcpIHNlbGVjdEVsZW06IE1hdFNlbGVjdDtcclxuICAvLyBWYXJpYWJsZXMgdG8gdHJhY2sgcGFnaW5hdGlvblxyXG4gIHBhZ2VOdW1iZXIgPSAxO1xyXG4gIHBhZ2VTaXplID0gMjA7XHJcbiAgdG90YWxQYWdlcyA9IDA7XHJcbiAgc2VhcmNoUXVlcnkgPSAnJztcclxuICBwcm9kdWN0c2xvYWRpbmdGbGFnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHNlYXJjaGluZyA9IGZhbHNlO1xyXG4gIHByb2R1Y3RMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIHNlbGVjdGVkVmFsdWU6IGFueSA9ICcnO1xyXG4gIHNlYXJjaEl0ZW0gPSBcIlwiO1xyXG4gIC8vIFZhcmlhYmxlIHRvIGhvbGQgdGhlIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBwYW5lbCBlbGVtZW50XHJcbiAgcHJpdmF0ZSBjdXJyZW50UGFuZWxFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xyXG4gIG9wZW5Db3VudGVyOiBudW1iZXIgPSAxXHJcbiAgZmlyc3REcm9wZG93bkl0ZW1zOiBhbnkgPSBbXTtcclxuICBzZWNvbmREcm9wZG93bkl0ZW1zOiBhbnkgPSBbXTtcclxuICBzdG9yZVZhbHVlOiBhbnkgPSBbXVxyXG4gIHN0b3JlRGVwZW5kZW50SXRlbXM6IGFueSA9IFtdO1xyXG4gIGV4ZWN1dGlvbkZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIGFwaUNvdW50ZXI6IG51bWJlciA9IDA7XHJcbiAgY2hlY2tBdHRyaWJ1dGU6IGFueTtcclxuICBvcHRpb25zSW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBsYXN0T3B0aW9uc0hhc2g6IHN0cmluZyA9ICcnO1xyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBlbGVtZW50OiBFbGVtZW50UmVmLCBwdWJsaWMgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHVibGljIGh0dHA6IEh0dHBDbGllbnQsIHB1YmxpYyBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlKSB7XHJcbiAgICBzdXBlcihlbGVtZW50LCByZWYpO1xyXG4gIH1cclxuXHJcbiAgb25JbnB1dENoYW5nZShldmVudDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5pbnN0YW5jZS5jb21wb25lbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICd2ZW5kb3Jwcm9kdWN0aWQnICYmIGV2ZW50LnRhcmdldC52YWx1ZSA9PT0gJycpIHtcclxuICAgICAgdGhpcy5vbkNsZWFyQWxsKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbGVhclByb2R1Y3RzKCkge1xyXG4gICAgaWYgKHRoaXMuaW5zdGFuY2UuY29tcG9uZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAndmVuZG9ycHJvZHVjdGlkJykge1xyXG4gICAgICB0aGlzLm9uQ2xlYXJBbGwoKTtcclxuICAgICAgdGhpcy5zZWFyY2hJdGVtID0gXCJcIjtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZWdpc3RlclBhbmVsU2Nyb2xsRXZlbnQoc2VsZWN0RWxlbTogTWF0U2VsZWN0KSB7XHJcbiAgICBpZiAoc2VsZWN0RWxlbSAmJiBzZWxlY3RFbGVtPy5wYW5lbCkge1xyXG4gICAgICAvLyBjb25zdCBwYW5lbEVsZW1lbnQgPSBzZWxlY3RFbGVtLnBhbmVsLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgIHRoaXMuY3VycmVudFBhbmVsRWxlbWVudCA9IHNlbGVjdEVsZW0ucGFuZWwubmF0aXZlRWxlbWVudDtcclxuICAgICAgdGhpcy5jdXJyZW50UGFuZWxFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwuYmluZCh0aGlzKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRDdXN0b21DbGFzcyhrZXkpIHtcclxuICAgIHJldHVybiAnd2Fsa21lX3NlbGVjdF8nICsga2V5O1xyXG4gIH1cclxuXHJcbiAgb25TY3JvbGwoZXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmluc3RhbmNlLmNvbXBvbmVudC5rZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3ZlbmRvcnByb2R1Y3RpZCcpIHtcclxuICAgICAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGV2ZW50LnRhcmdldDtcclxuICAgICAgaWYgKCFzY3JvbGxFbGVtZW50KSByZXR1cm47IC8vIEVuc3VyZSBzY3JvbGxFbGVtZW50IGlzIG5vdCB1bmRlZmluZWRcclxuICAgICAgY29uc3QgdHJhY2tIZWlnaHQgPSBzY3JvbGxFbGVtZW50LnNjcm9sbEhlaWdodCAtIHNjcm9sbEVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xyXG4gICAgICBpZiAoaXNOYU4odHJhY2tIZWlnaHQpIHx8IHRyYWNrSGVpZ2h0IDw9IDApIHJldHVybjsgLy8gQ2hlY2sgaWYgdHJhY2tIZWlnaHQgaXMgdmFsaWRcclxuICAgICAgaWYgKHRoaXMub3BlbkNvdW50ZXIgPCAyKSB7XHJcbiAgICAgICAgY29uc3QgcmV0cmlldmVkT2JqZWN0ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnc3RvcmFnZU9iamVjdCcpKTtcclxuICAgICAgICB0aGlzLnRvdGFsUGFnZXMgPSBOdW1iZXIocmV0cmlldmVkT2JqZWN0Py50b3RhbFBhZ2VzKTtcclxuICAgICAgICB0aGlzLnByb2R1Y3RzbG9hZGluZ0ZsYWcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucHJvZHVjdExpc3QgPSByZXRyaWV2ZWRPYmplY3Q/LmRhdGFTb3VyY2U7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMucHJvZHVjdHNsb2FkaW5nRmxhZyAmJiBNYXRoLmZsb29yKHNjcm9sbEVsZW1lbnQ/LnNjcm9sbFRvcCAvIHRyYWNrSGVpZ2h0ICogMTAwKSA+IDUwKSB7XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0c2xvYWRpbmdGbGFnID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5vcGVuQ291bnRlciA9IHRoaXMub3BlbkNvdW50ZXIgKyAxO1xyXG4gICAgICAgIGlmICh0aGlzLnBhZ2VOdW1iZXIgPCB0aGlzLnRvdGFsUGFnZXMpIHtcclxuICAgICAgICAgIHRoaXMucGFnZU51bWJlciA9IHRoaXMucGFnZU51bWJlciArIDE7XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaGluZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmxvYWREYXRhKHRoaXMucGFnZU51bWJlciwgdGhpcy5wYWdlU2l6ZSwgdGhpcy5zZWFyY2hRdWVyeSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5wcm9kdWN0c2xvYWRpbmdGbGFnID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuc2VhcmNoaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBGdW5jdGlvbiB0byBnZXQgdmFsdWUgYnkga2V5IGZyb20gdGhlIGFycmF5XHJcbiAgZ2V0VmFsdWVCeUtleShkYXRhLCBrZXkpIHtcclxuICAgIGlmICghZGF0YSB8fCBkYXRhLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gbnVsbDsgLy8gUmV0dXJuIG51bGwgaWYgZGF0YSBpcyBlbXB0eSBvciB1bmRlZmluZWRcclxuICAgIH1cclxuICAgIGNvbnN0IGl0ZW0gPSBkYXRhLmZpbmQoa3YgPT4ga3Yua2V5LnRvTG93ZXJDYXNlKCkgPT09IGtleS50b0xvd2VyQ2FzZSgpKTtcclxuICAgIHJldHVybiBpdGVtID8gaXRlbS52YWx1ZSA6IG51bGw7XHJcbiAgfVxyXG5cclxuXHJcbiAgbG9hZERhdGEocGFnZU51bWJlciwgcGFnZVNpemUsIHNlYXJjaFF1ZXJ5KSB7XHJcbiAgICBjb25zdCBwYXJhbXNEYXRhID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgncHJvZHVjdFBpY2tlclBhcmFtcycpKTtcclxuICAgIGNvbnN0IGluY2x1ZGVEZXNjcmlwdGlvbiA9IHRoaXMuZ2V0VmFsdWVCeUtleShwYXJhbXNEYXRhLCAnaW5jbHVkZURlc2NyaXB0aW9uJyk7XHJcbiAgICBjb25zdCB2ZW5kb3JJZCA9IHRoaXMuZ2V0VmFsdWVCeUtleShwYXJhbXNEYXRhLCAndmVuZG9ySWQnKTtcclxuICAgIGNvbnN0IG9ubHlBY3RpdmUgPSB0aGlzLmdldFZhbHVlQnlLZXkocGFyYW1zRGF0YSwgJ29ubHlBY3RpdmUnKTtcclxuICAgIGNvbnN0IGluY2x1ZGVDb3VudHJ5ID0gdGhpcy5nZXRWYWx1ZUJ5S2V5KHBhcmFtc0RhdGEsICdmaWx0ZXJQcm9kdWN0QmFzZWRPbkN1c3RvbWVyQ291bnRyeScpO1xyXG4gICAgY29uc3QgcHJvZ3JhbUlkID0gdGhpcy5nZXRWYWx1ZUJ5S2V5KHBhcmFtc0RhdGEsIFwicHJvZ3JhbUlkXCIpO1xyXG4gICAgdmFyIGN1cnJlbnRVc2VyID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY3VycmVudFVzZXInKSk7XHJcbiAgICBsZXQgaGVhZGVycztcclxuICAgIGlmIChjdXJyZW50VXNlciAmJiBjdXJyZW50VXNlci5Ub2tlbnMgJiYgY3VycmVudFVzZXIuVG9rZW5zLkFjY2Vzc1Rva2VuKSB7XHJcbiAgICAgIHZhciBhY2Nlc3NUb2tlbiA9IGN1cnJlbnRVc2VyLlRva2Vucy5BY2Nlc3NUb2tlbjtcclxuICAgICAgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XHJcbiAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcclxuICAgICAgICAnQXV0aG9yaXphdGlvbic6ICdCZWFyZXIgJyArIGFjY2Vzc1Rva2VuXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS5lcnJvcignVXNlciBub3QgYXV0aGVudGljYXRlZCBvciB0b2tlbnMgbWlzc2luZy4nKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBlbnZlbmRvcklkID0gdGhpcy5jb21tb25TZXJ2aWNlLnNjcnVtYmxlKHZlbmRvcklkKVxyXG4gICAgY29uc3QgZW5wYWdlTnVtYmVyID0gdGhpcy5jb21tb25TZXJ2aWNlLnNjcnVtYmxlKHBhZ2VOdW1iZXIpXHJcbiAgICBjb25zdCBlbnBhZ2VTaXplID0gdGhpcy5jb21tb25TZXJ2aWNlLnNjcnVtYmxlKHBhZ2VTaXplKTtcclxuICAgIGNvbnN0IGVuc2VhcmNoUXVlcnkgPSB0aGlzLmNvbW1vblNlcnZpY2Uuc2NydW1ibGUoc2VhcmNoUXVlcnkpO1xyXG4gICAgY29uc3QgZW5jb2RlSW5jbHVkZUNvdW50cnkgPSB0aGlzLmNvbW1vblNlcnZpY2Uuc2NydW1ibGUoaW5jbHVkZUNvdW50cnkpO1xyXG4gICAgbGV0IGVuYWN0aXZlID0gdGhpcy5jb21tb25TZXJ2aWNlLnNjcnVtYmxlKG9ubHlBY3RpdmUpO1xyXG4gICAgY29uc3QgZW5wcm9ncmFtSWQgPSB0aGlzLmNvbW1vblNlcnZpY2Uuc2NydW1ibGUocHJvZ3JhbUlkKTtcclxuICAgIC8vQ2hlY2sgaWYgZW5hY3RpdmUgaXMgdW5kZWZpbmVkLCBudWxsLCBvciBibGFua1xyXG4gICAgaWYgKGVuYWN0aXZlID09PSB1bmRlZmluZWQgfHwgZW5hY3RpdmUgPT09IG51bGwgfHwgZW5hY3RpdmUgPT09ICcnKSB7XHJcbiAgICAgIGVuYWN0aXZlID0gdGhpcy5jb21tb25TZXJ2aWNlLnNjcnVtYmxlKHRydWUpOyAvLyBTZXQgZGVmYXVsdCB2YWx1ZSB0byB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2NydW1ibGUgYW5kIGhhbmRsZSB0aGUgaW5jbHVkZURlc2NyaXB0aW9uIHBhcmFtZXRlclxyXG4gICAgbGV0IGVuZGVzY3JpcHRpb24gPSB0aGlzLmNvbW1vblNlcnZpY2Uuc2NydW1ibGUoaW5jbHVkZURlc2NyaXB0aW9uKTtcclxuICAgIGlmICghZW5kZXNjcmlwdGlvbikge1xyXG4gICAgICBlbmRlc2NyaXB0aW9uID0gdGhpcy5jb21tb25TZXJ2aWNlLnNjcnVtYmxlKGZhbHNlKTsgIC8vIFNldCB0byAnZmFsc2UnIGlmIHVuZGVmaW5lZCwgbnVsbCwgb3IgYmxhbmtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBiYXNlVXJsTWFwcGluZyA9IHtcclxuICAgICAgJ2JHOWpZV3hvYjNOMCc6ICdodHRwOi8vbG9jYWxob3N0OjU4NTA0JyxcclxuICAgICAgJ2JHbHVZMjlzYmk1MllYSjBiM0JwWVM1amIyMD0nOiAnaHR0cHM6Ly9saW5jb2xuLWFwaS52YXJ0b3BpYS5jb20nLFxyXG4gICAgICAnYzNSaFoyVXVkbUZ5ZEc5d2FXRXVZMjl0JzogJ2h0dHBzOi8vc3RhZ2UtYXBpLnZhcnRvcGlhLmNvbScsXHJcbiAgICAgICdiWGt1ZG1GeWRHOXdhV0V1WTI5dCc6ICdodHRwczovL3JlYWdhbi1hcGkudmFydG9waWEuY29tJyxcclxuICAgICAgJ2FtRmphM052Ymk1MllYSjBiM0JwWVM1amIyMD0nOiAnaHR0cHM6Ly9qYWNrc29uLWFwaS52YXJ0b3BpYS5jb20nLFxyXG4gICAgICAnZFdGMExuWmhjblJ2Y0dsaExtTnZiUT09JzogJ2h0dHBzOi8vdWF0LWFwaS52YXJ0b3BpYS5jb20nXHJcbiAgICB9O1xyXG4gICAgLy8gR2V0IHRoZSBjdXJyZW50IGhvc3RuYW1lXHJcbiAgICBjb25zdCBob3N0bmFtZSA9IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZTtcclxuICAgIGNvbnN0IGJhc2VBcGlVcmwgPSBiYXNlVXJsTWFwcGluZ1tidG9hKGhvc3RuYW1lKV0gfHwgbnVsbDtcclxuICAgIGludGVyZmFjZSBWZW5kb3JQcm9kdWN0c1Jlc3BvbnNlIHtcclxuICAgICAgY29kZTogbnVtYmVyO1xyXG4gICAgICBkYXRhOiBhbnk7XHJcbiAgICAgIG1lc3NhZ2U6IHN0cmluZztcclxuICAgICAgc3RhdHVzQ29kZTogbnVtYmVyO1xyXG4gICAgfVxyXG4gICAgbGV0IHVybCA9IGAke2Jhc2VBcGlVcmx9L2FwaS9WZW5kb3JGb3JtQnVpbGRlci9HZXRWZW5kb3JQcm9kdWN0cz92ZW5kb3JJZD0ke2VudmVuZG9ySWR9JnBhZ2VOdW1iZXI9JHtlbnBhZ2VOdW1iZXJ9JnBhZ2VTaXplPSR7ZW5wYWdlU2l6ZX0mc2VhcmNoPSR7ZW5zZWFyY2hRdWVyeX0mb25seUFjdGl2ZT0ke2VuYWN0aXZlfSZpbmNsdWRlRGVzY3JpcHRpb249JHtlbmRlc2NyaXB0aW9ufWA7XHJcbiAgICBpZiAoZW5wcm9ncmFtSWQgJiYgcHJvZ3JhbUlkKSB7XHJcbiAgICAgIHVybCArPSBgJnByb2dyYW1JZD0ke2VucHJvZ3JhbUlkfWA7XHJcbiAgICB9XHJcbiAgICAvLyBPbmx5IGFkZCBpbmNsdWRlQ291bnRyeUlkIGlmIGl0IGhhcyBhIHZhbGlkIHZhbHVlXHJcbiAgICBpZiAoZW5jb2RlSW5jbHVkZUNvdW50cnkgIT09IG51bGwgJiYgZW5jb2RlSW5jbHVkZUNvdW50cnkgIT09IHVuZGVmaW5lZCAmJiB0aGlzLmlzRmlsdGVyUHJvZHVjdEJhc2VkT25DdXN0b21lckNvdW50cnlWYWxpZCh0aGlzLmluc3RhbmNlLmNvbXBvbmVudC5kYXRhKSkge1xyXG4gICAgICB1cmwgKz0gYCZmaWx0ZXJQcm9kdWN0QmFzZWRPbkN1c3RvbWVyQ291bnRyeT0ke2VuY29kZUluY2x1ZGVDb3VudHJ5fWA7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5odHRwLmdldDxWZW5kb3JQcm9kdWN0c1Jlc3BvbnNlPih1cmwsIHsgaGVhZGVycyB9KS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xyXG4gICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UuY29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UuY29tcG9uZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAndmVuZG9ycHJvZHVjdGlkJykge1xyXG4gICAgICAgICAgdGhpcy50b3RhbFBhZ2VzID0gcmVzcG9uc2U/LmRhdGE/LnRvdGFsUGFnZXM7XHJcbiAgICAgICAgICBjb25zdCBkYXRhID0gcmVzcG9uc2UuZGF0YS5kYXRhU291cmNlO1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnNMZW5ndGggPSBkYXRhLmxlbmd0aDtcclxuICAgICAgICAgIGlmICh0aGlzLnByb2R1Y3RMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZGF0YS5tYXAoaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1cclxuICAgICAgICAgICAgfSkuZm9yRWFjaChpID0+IHRoaXMucHJvZHVjdExpc3QucHVzaChpKSlcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJvZHVjdExpc3QgPSBkYXRhO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gVXBkYXRlIGZpbHRlcmVkT3B0aW9ucyB3aXRoIHRyYW5zZm9ybWVkRGF0YVxyXG4gICAgICAgICAgdmFyIGFsbFByb2R1Y3RMaXN0ID0gdGhpcy50cmFuc2Zvcm1SZXNwb25zZURhdGEodGhpcy5wcm9kdWN0TGlzdCk7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IFByb21pc2UucmVzb2x2ZShhbGxQcm9kdWN0TGlzdCk7XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5wcm9kdWN0c2xvYWRpbmdGbGFnID0gdHJ1ZTtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBlbGUgPSB0aGlzLnNlbGVjdEVsZW0/LnBhbmVsPy5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgICAgICBpZiAoZWxlKSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgdHJhY2tIZWlnaHQgPSBlbGUuc2Nyb2xsSGVpZ2h0IC0gZWxlLm9mZnNldEhlaWdodFxyXG4gICAgICAgICAgICAgIGNvbnN0IG1pZGRsZVBvc2l0aW9uID0gdHJhY2tIZWlnaHQgLyAyIC0gNTA7XHJcbiAgICAgICAgICAgICAgZWxlLnNjcm9sbFRvKHsgdG9wOiBtaWRkbGVQb3NpdGlvbiwgYmVoYXZpb3I6ICdhdXRvJyB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnUGFuZWwgZWxlbWVudCBpcyBub3QgYXZhaWxhYmxlIHlldC4nKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH0sIDI1MCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyBVdGlsaXR5IGZ1bmN0aW9uIHRvIHRyYW5zZm9ybSByZXNwb25zZSBkYXRhXHJcbiAgdHJhbnNmb3JtUmVzcG9uc2VEYXRhKGRhdGE6IEFycmF5PHsgdGV4dDogYW55LCB2YWx1ZTogYW55LCBkYXRlOiBhbnkgfT4gfCBudWxsIHwgdW5kZWZpbmVkKTogQXJyYXk8eyBsYWJlbDogc3RyaW5nLCB2YWx1ZTogbnVtYmVyLCBkYXRlOiBzdHJpbmcgfT4ge1xyXG4gICAgLy8gQ2hlY2sgaWYgZGF0YSBpcyBub3QgbnVsbCwgdW5kZWZpbmVkLCBhbmQgaXMgYW4gYXJyYXkgd2l0aCBlbGVtZW50c1xyXG4gICAgaWYgKGRhdGEgJiYgQXJyYXkuaXNBcnJheShkYXRhKSAmJiBkYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgcmV0dXJuIGRhdGEubWFwKGl0ZW0gPT4gKHtcclxuICAgICAgICBsYWJlbDogaXRlbS50ZXh0LFxyXG4gICAgICAgIHZhbHVlOiBpdGVtLnZhbHVlLFxyXG4gICAgICAgIGRhdGU6IGl0ZW0uZGF0ZVxyXG4gICAgICB9KSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBSZXR1cm4gYW4gZW1wdHkgYXJyYXkgaWYgZGF0YSBpcyBudWxsLCB1bmRlZmluZWQsIG9yIGVtcHR5XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuXHJcbiAgZmlsdGVyV2Vic2l0ZU11bHRpKCkge1xyXG4gICAgaWYgKCF0aGlzLnNlbGVjdE9wdGlvbnMpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IHNlYXJjaCA9IHRoaXMud2Vic2l0ZU11bHRpRmlsdGVyQ3RybC52YWx1ZTtcclxuICAgIHNlYXJjaCA9IHNlYXJjaC50b0xvd2VyQ2FzZSgpO1xyXG4gICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLnNlbGVjdE9wdGlvbnMudGhlbigob3B0aW9ucykgPT4ge1xyXG4gICAgICBjb25zdCBmaWx0ZXJlZCA9IG9wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+IG9wdGlvbi5sYWJlbC5yZXBsYWNlKC88XFwvP3NwYW5bXj5dKj4vZywgXCJcIikudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaCkgIT09IC0xKTtcclxuICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnNMZW5ndGggPSBmaWx0ZXJlZC5sZW5ndGg7XHJcbiAgICAgIHJldHVybiBmaWx0ZXJlZDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5fb25EZXN0cm95Lm5leHQoJycpO1xyXG4gICAgdGhpcy5fb25EZXN0cm95LmNvbXBsZXRlKCk7XHJcbiAgICBpZiAodGhpcy5jdXJyZW50UGFuZWxFbGVtZW50KSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFBhbmVsRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLm9uU2Nyb2xsLmJpbmQodGhpcykpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qRW5kKi9cclxuICBzZXRJbnN0YW5jZShpbnN0YW5jZTogYW55KSB7XHJcbiAgICBzdXBlci5zZXRJbnN0YW5jZShpbnN0YW5jZSk7XHJcbiAgICB0aGlzLmluc3RhbmNlLnRyaWdnZXJVcGRhdGUoKTtcclxuICB9XHJcblxyXG4gIG9uQ2xlYXJBbGwoKSB7XHJcbiAgICBpZiAodGhpcy5pbnN0YW5jZS5jb21wb25lbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICd2ZW5kb3Jwcm9kdWN0aWQnKSB7XHJcbiAgICAgIHRoaXMucGFnZU51bWJlciA9IDE7XHJcbiAgICAgIHRoaXMucGFnZVNpemUgPSAyMDtcclxuICAgICAgdGhpcy5zZWFyY2hRdWVyeSA9ICcnO1xyXG4gICAgICB0aGlzLnNlYXJjaGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnByb2R1Y3RMaXN0ID0gW107XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9ICcnO1xyXG4gICAgICB0aGlzLmxvYWREYXRhKHRoaXMucGFnZU51bWJlciwgdGhpcy5wYWdlU2l6ZSwgdGhpcy5zZWFyY2hRdWVyeSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVTZWNvbmREcm9wZG93bih2YWx1ZTogYW55KSB7XHJcbiAgICBjb25zdCBwYXJhbXNEYXRhID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnY2FzY2FkaW5nRHJvcGRvd25zUGFyYW1zb25lJykpO1xyXG4gICAgY29uc3QgdmVuZG9ySWQgPSB0aGlzLmdldFZhbHVlQnlLZXkocGFyYW1zRGF0YSwgJ3ZlbmRvcklkJyk7XHJcbiAgICBjb25zdCBkZWFsSWQgPSB0aGlzLmdldFZhbHVlQnlLZXkocGFyYW1zRGF0YSwgJ2RlYWxJZCcpO1xyXG4gICAgY29uc3QgaXNFZGl0ID0gdGhpcy5nZXRWYWx1ZUJ5S2V5KHBhcmFtc0RhdGEsICdpc0VkaXQnKTtcclxuICAgIGxldCBmaW5hbFBhcmFtcztcclxuICAgIHRoaXMuaW5zdGFuY2U/LnBhcmVudD8uY29tcG9uZW50cz8ubGVuZ3RoICYmIHRoaXMuaW5zdGFuY2UucGFyZW50LmNvbXBvbmVudHMuZm9yRWFjaChpdGVtcyA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmNoZWNrVmVuZG9yUmVmSXRlbXMoaXRlbXMpKSB7XHJcbiAgICAgICAgY29uc3QgYXBpRW5kUG9pbnQgPSBpdGVtcz8uY29tcG9uZW50Py5zZWxlY3RWYWx1ZXM7XHJcbiAgICAgICAgaWYgKGFwaUVuZFBvaW50ICE9ICcnKSB7XHJcbiAgICAgICAgICB2YXIgcGFyYW1ldGVycyA9IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIFwia2V5XCI6IFwidXNlcklkXCIsXHJcbiAgICAgICAgICAgICAgXCJ2YWx1ZVwiOiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjdXJyZW50VXNlcicpKS5Vc2VySWRcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIFwia2V5XCI6IFwidmVuZG9ySWRcIixcclxuICAgICAgICAgICAgICBcInZhbHVlXCI6IHZlbmRvcklkXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBcImtleVwiOiBcImxvZ2luVXNlcklkXCIsXHJcbiAgICAgICAgICAgICAgXCJ2YWx1ZVwiOiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdjdXJyZW50VXNlcicpKS5Vc2VySWRcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIFwia2V5XCI6IFwiY291bnRyeVwiLFxyXG4gICAgICAgICAgICAgIFwidmFsdWVcIjogdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlLnRyaW0oKSA6ICcnXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBcImtleVwiOiBcImRhdGFWYWx1ZVwiLFxyXG4gICAgICAgICAgICAgIFwidmFsdWVcIjogdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlLnRyaW0oKSA6ICcnXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBcImtleVwiOiBcImRlYWxJZFwiLFxyXG4gICAgICAgICAgICAgIFwidmFsdWVcIjogZGVhbElkXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBcImtleVwiOiBcImlzRWRpdFwiLFxyXG4gICAgICAgICAgICAgIFwidmFsdWVcIjogaXNFZGl0XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBcImtleVwiOiBcInJlZmVyZW5jZUxpc3ROYW1lXCIsXHJcbiAgICAgICAgICAgICAgXCJ2YWx1ZVwiOiBpdGVtcz8uY29tcG9uZW50Py5rZXlcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIFwia2V5XCI6IFwicmVmZXJlbmNlTGlzdEZpZWxkTmFtZVwiLFxyXG4gICAgICAgICAgICAgIFwidmFsdWVcIjogdGhpcy5pbnN0YW5jZT8uY29tcG9uZW50Py5rZXlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgXVxyXG4gICAgICAgICAgZmluYWxQYXJhbXMgPSBwYXJhbWV0ZXJzPy5maWx0ZXIoZjEgPT4gaXRlbXM/LmNvbXBvbmVudD8uZGF0YT8uaGVhZGVycy5zb21lKGYyID0+IGYxLmtleSA9PT0gZjIua2V5KSk7XHJcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaW5hbFBhcmFtcykpIHtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBmaW5hbFBhcmFtcy5maW5kSW5kZXgocGFyYW0gPT4gcGFyYW0ua2V5ID09PSAnZGF0YVZhbHVlJyk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAvLyBJZiB0aGUgb2JqZWN0IGV4aXN0cywgdXBkYXRlIGl0cyB2YWx1ZVxyXG4gICAgICAgICAgICAgIGZpbmFsUGFyYW1zW2luZGV4XS52YWx1ZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIC8vIElmIHRoZSBvYmplY3QgZG9lc24ndCBleGlzdCwgYWRkIGl0IHRvIHRoZSBhcnJheVxyXG4gICAgICAgICAgICAgIGZpbmFsUGFyYW1zLnB1c2goeyBrZXk6ICdkYXRhVmFsdWUnLCB2YWx1ZTogdmFsdWUgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zZWNvbmREcm9wZG93bkl0ZW1zID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZS5zZXREcm9wZG93bkl0ZW1zKHRoaXMuc2Vjb25kRHJvcGRvd25JdGVtcyk7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZS5pbml0aWFsaXplQXBpUGF0aChhcGlFbmRQb2ludCwgZmluYWxQYXJhbXMpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWNvbmREcm9wZG93bkl0ZW1zID0gcmVzcG9uc2UuZGF0YTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZS5zZXREcm9wZG93bkl0ZW1zKHRoaXMuc2Vjb25kRHJvcGRvd25JdGVtcyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgaWYgKHRoaXMuZWxlbWVudCAmJiB0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCAmJiB0aGlzLmluc3RhbmNlKSB7XHJcbiAgICAgIC8vIEFkZCBjdXN0b20gY2xhc3NlcyB0byBlbGVtZW50cy5cclxuICAgICAgaWYgKHRoaXMuaW5zdGFuY2UuY29tcG9uZW50LmN1c3RvbUNsYXNzKSB7XHJcbiAgICAgICAgdGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCh0aGlzLmluc3RhbmNlLmNvbXBvbmVudC5jdXN0b21DbGFzcyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuc2VsZWN0RWxlbS5vcGVuZWRDaGFuZ2Uuc3Vic2NyaWJlKGFzeW5jIChpc09wZW46IGJvb2xlYW4pID0+IHtcclxuICAgICAgbGV0IGkgPSAwXHJcbiAgICAgIGlmIChpc09wZW4pIHtcclxuICAgICAgICBjb25zdCBuZXdQcm9kdWN0UGlja2VyRmxhZyA9IHRoaXMuaW5zdGFuY2U/LmNvbXBvbmVudD8uYXR0cmlidXRlcztcclxuICAgICAgICBsZXQgY2hlY2tJbnZva2VGcm9tTGlicmFyeSA9IHRoaXMuY29tbW9uU2VydmljZS5jaGVja0lzQXR0cmlidXRlVHJ1ZShuZXdQcm9kdWN0UGlja2VyRmxhZywgXCJpbnZva2VGcm9tTGlicmFyeVwiKVxyXG4gICAgICAgIGNvbnN0IGZpcnN0TGV2ZWwgPSAodGhpcy5nZXRWZW5kb3JSZWZMaXN0KHRoaXMuaW5zdGFuY2UpICYmIGNoZWNrSW52b2tlRnJvbUxpYnJhcnkpO1xyXG4gICAgICAgIGlmIChmaXJzdExldmVsKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdEVsZW0udmFsdWVDaGFuZ2Uuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZS5zZXREcm9wRG93bkZsYWcodHJ1ZSk7XHJcbiAgICAgICAgICAgIGlmIChpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVTZWNvbmREcm9wZG93bihyZXMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGkrK1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrVmVuZG9yUmVmSXRlbXModGhpcy5pbnN0YW5jZSkgJiYgY2hlY2tJbnZva2VGcm9tTGlicmFyeSkge1xyXG4gICAgICAgICAgLy8gdGhpcy5zdG9yZURlcGVuZGVudEl0ZW1zID0gW107XHJcbiAgICAgICAgICAvLyB0aGlzLnNlY29uZERyb3Bkb3duSXRlbXMgPSB0aGlzLmNvbW1vblNlcnZpY2UuZ2V0RHJvcGRvd25JdGVtcygpO1xyXG4gICAgICAgICAgLy8gaWYgKHRoaXMuc2Vjb25kRHJvcGRvd25JdGVtcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAvLyAgIHRoaXMuc2Vjb25kRHJvcGRvd25JdGVtcy5mb3JFYWNoKChyZW5kZXJFbGVtZW50LCBpbmRleCwgYXJyYXkpID0+IHtcclxuICAgICAgICAgIC8vICAgICB0aGlzLnN0b3JlRGVwZW5kZW50SXRlbXMucHVzaCh7IGxhYmVsOiByZW5kZXJFbGVtZW50Wyd0ZXh0J10sIHZhbHVlOiB0aGlzLmNvbW1vblNlcnZpY2Uub25seU51bWJlcnMocmVuZGVyRWxlbWVudFsndmFsdWUnXSkgPyByZW5kZXJFbGVtZW50Wyd2YWx1ZSddICsgJyAnIDogcmVuZGVyRWxlbWVudFsndmFsdWUnXSB9KTtcclxuICAgICAgICAgIC8vICAgfSk7XHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAvLyBpZiAoIXRoaXMuY29tbW9uU2VydmljZS5nZXREcm9wRG93bkZsYWcoKSkge1xyXG4gICAgICAgICAgLy8gICB0aGlzLnN0b3JlRGVwZW5kZW50SXRlbXMgPSB0aGlzLmluc3RhbmNlLmNvbXBvbmVudC5kYXRhLnZhbHVlcztcclxuICAgICAgICAgIC8vIH1cclxuICAgICAgICAgIC8vIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gUHJvbWlzZS5yZXNvbHZlKHRoaXMuc3RvcmVEZXBlbmRlbnRJdGVtcyk7XHJcbiAgICAgICAgICAvLyB0aGlzLnNlbGVjdE9wdGlvbnMgPSBQcm9taXNlLnJlc29sdmUodGhpcy5zdG9yZURlcGVuZGVudEl0ZW1zKTtcclxuICAgICAgICAgIC8vIHRoaXMuc2VsZWN0T3B0aW9ucy50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAvLyAgIHRoaXMuZmlsdGVyZWRPcHRpb25zTGVuZ3RoID0gcmVzdWx0Lmxlbmd0aFxyXG4gICAgICAgICAgLy8gfSk7XHJcbiAgICAgICAgICBjb25zdCBpbmNvbWluZ0l0ZW1zID0gdGhpcy5jb21tb25TZXJ2aWNlLmdldERyb3Bkb3duSXRlbXMoKTtcclxuICAgICAgICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0KCk7XHJcbiAgICAgICAgICBjb25zdCBuZXdPcHRpb25zID0gW107XHJcbiAgICAgICAgICBpZiAoaW5jb21pbmdJdGVtcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGluY29taW5nSXRlbXMuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCByYXdWYWx1ZSA9IHRoaXMuY29tbW9uU2VydmljZS5vbmx5TnVtYmVycyhpdGVtWyd2YWx1ZSddKSA/IGl0ZW1bJ3ZhbHVlJ10gKyAnICcgOiBpdGVtWyd2YWx1ZSddO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gaXRlbVsndGV4dCddPy50cmltKCk7XHJcbiAgICAgICAgICAgICAgY29uc3Qga2V5ID0gYCR7bGFiZWx9LSR7cmF3VmFsdWV9YDtcclxuICAgICAgICAgICAgICBpZiAoIXNlZW4uaGFzKGtleSkpIHtcclxuICAgICAgICAgICAgICAgIHNlZW4uYWRkKGtleSk7XHJcbiAgICAgICAgICAgICAgICBuZXdPcHRpb25zLnB1c2goeyBsYWJlbCwgdmFsdWU6IHJhd1ZhbHVlIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gY29tcGFyZSBoYXNoZXMgdG8gYXZvaWQgdW5uZWNlc3NhcnkgcmVhc3NpZ25tZW50c1xyXG4gICAgICAgICAgY29uc3QgbmV3SGFzaCA9IEpTT04uc3RyaW5naWZ5KG5ld09wdGlvbnMpO1xyXG4gICAgICAgICAgaWYgKG5ld0hhc2ggIT09IHRoaXMubGFzdE9wdGlvbnNIYXNoKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGFzdE9wdGlvbnNIYXNoID0gbmV3SGFzaDtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmVEZXBlbmRlbnRJdGVtcyA9IG5ld09wdGlvbnM7XHJcblxyXG4gICAgICAgICAgICBpZiAoIXRoaXMuY29tbW9uU2VydmljZS5nZXREcm9wRG93bkZsYWcoKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc3RvcmVEZXBlbmRlbnRJdGVtcyA9IHRoaXMuaW5zdGFuY2UuY29tcG9uZW50LmRhdGEudmFsdWVzO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IFByb21pc2UucmVzb2x2ZSh0aGlzLnN0b3JlRGVwZW5kZW50SXRlbXMpO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdE9wdGlvbnMgPSBQcm9taXNlLnJlc29sdmUodGhpcy5zdG9yZURlcGVuZGVudEl0ZW1zKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0T3B0aW9ucy50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnNMZW5ndGggPSByZXN1bHQubGVuZ3RoO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vIHNjcm9sbCB0byBzZWxlY3RlZCBpdGVtXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHBhbmVsID0gdGhpcy5zZWxlY3RFbGVtPy5wYW5lbD8ubmF0aXZlRWxlbWVudDtcclxuICAgICAgICAgICAgICBpZiAocGFuZWwgJiYgdGhpcy5zdG9yZURlcGVuZGVudEl0ZW1zPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSW5kZXggPSB0aGlzLnN0b3JlRGVwZW5kZW50SXRlbXMuZmluZEluZGV4KGl0ZW0gPT5cclxuICAgICAgICAgICAgICAgICAgdGhpcy5jb21wYXJlT2JqZWN0cyhpdGVtLnZhbHVlLCB0aGlzLmNvbnRyb2wudmFsdWUpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkSW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25IZWlnaHQgPSA0ODtcclxuICAgICAgICAgICAgICAgICAgcGFuZWwuc2Nyb2xsVG9wID0gc2VsZWN0ZWRJbmRleCAqIG9wdGlvbkhlaWdodDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIDIwMCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5pbnN0YW5jZS5jb21wb25lbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICd2ZW5kb3Jwcm9kdWN0aWQnKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0RWxlbS5vcGVuZWRDaGFuZ2Uuc3Vic2NyaWJlKChpc09wZW46IGJvb2xlYW4pID0+IHtcclxuICAgICAgICBpZiAoaXNPcGVuKSB7XHJcbiAgICAgICAgICB0aGlzLnBhZ2VOdW1iZXIgPSAxO1xyXG4gICAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IDIwO1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2VhcmNoUXVlcnk/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VhcmNoSXRlbT8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMud2Vic2l0ZU11bHRpRmlsdGVyQ3RybC5zZXRWYWx1ZSh0aGlzLnNlYXJjaEl0ZW0pO1xyXG4gICAgICAgICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gdGhpcy5zZWFyY2hRdWVyeSA9ICcnO1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIC8vdGhpcy5sb2FkRGF0YSh0aGlzLnBhZ2VOdW1iZXIsIHRoaXMucGFnZVNpemUsIHRoaXMuc2VhcmNoUXVlcnkpO1xyXG4gICAgICAgICAgdGhpcy5yZWdpc3RlclBhbmVsU2Nyb2xsRXZlbnQodGhpcy5zZWxlY3RFbGVtKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5yZW1vdmVQYW5lbFNjcm9sbEV2ZW50KCk7XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgLy8gdGhpcy5zZWxlY3RlZFZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgLy8gaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZT8udG9TdHJpbmcoKS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgLy8gICB0aGlzLnByb2R1Y3RMaXN0ID0gW107XHJcbiAgICAgICAgICAvLyAgIHRoaXMucGFnZU51bWJlciA9IDE7XHJcbiAgICAgICAgICAvLyAgIHRoaXMucGFnZVNpemUgPSAyMDtcclxuICAgICAgICAgIC8vICAgdGhpcy5zZWFyY2hRdWVyeSA9ICcnO1xyXG4gICAgICAgICAgLy8gICB0aGlzLmxvYWREYXRhKHRoaXMucGFnZU51bWJlciwgdGhpcy5wYWdlU2l6ZSwgdGhpcy5zZWFyY2hRdWVyeSk7XHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZVBhbmVsU2Nyb2xsRXZlbnQoKSB7XHJcbiAgICAvLyBSZW1vdmUgdGhlIHNjcm9sbCBldmVudCBsaXN0ZW5lclxyXG4gICAgaWYgKHRoaXMuY3VycmVudFBhbmVsRWxlbWVudCkge1xyXG4gICAgICB0aGlzLmN1cnJlbnRQYW5lbEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vblNjcm9sbC5iaW5kKHRoaXMpKTtcclxuICAgICAgdGhpcy5jdXJyZW50UGFuZWxFbGVtZW50ID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICAvKm5ldyBsb2dpYyAqL1xyXG4gICAgaWYgKHRoaXMuaW5zdGFuY2UuY29tcG9uZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAndmVuZG9ycHJvZHVjdGlkJykge1xyXG4gICAgICB0aGlzLndlYnNpdGVNdWx0aUZpbHRlckN0cmwudmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoMTAwMCksIC8vIFRpbWUgaW4gbWlsbGlzZWNvbmRzIGJldHdlZW4ga2V5IGV2ZW50c1xyXG4gICAgICAgICAgLy8gIHRhcCgoKSA9PiB0aGlzLnNlYXJjaGluZyA9IHRydWUpLFxyXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHNlYXJjaFF1ZXJ5KSA9PiB7XHJcbiAgICAgICAgICBpZiAoc2VhcmNoUXVlcnkgIT0gJycpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucGFnZU51bWJlciA9IDE7XHJcbiAgICAgICAgICAgIHRoaXMucGFnZVNpemUgPSAyMDtcclxuICAgICAgICAgICAgdGhpcy5wcm9kdWN0TGlzdCA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoUXVlcnkgPSBzZWFyY2hRdWVyeTtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hJdGVtID0gc2VhcmNoUXVlcnlcclxuICAgICAgICAgICAgdGhpcy5sb2FkRGF0YSh0aGlzLnBhZ2VOdW1iZXIsIHRoaXMucGFnZVNpemUsIHNlYXJjaFF1ZXJ5KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMud2Vic2l0ZU11bHRpRmlsdGVyQ3RybC52YWx1ZUNoYW5nZXNcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJXZWJzaXRlTXVsdGkoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIC8qRW5kICovXHJcbiAgICB0aGlzLnNlbGVjdE9wdGlvbnMgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xyXG4gICAgICB0aGlzLnNlbGVjdE9wdGlvbnNSZXNvbHZlID0gcmVzb2x2ZTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5zZWxlY3RPcHRpb25zLnRoZW4oKG9wdGlvbnMpID0+IHtcclxuICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnNMZW5ndGggPSBvcHRpb25zLmxlbmd0aDtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5zZWxlY3RPcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3Rpb25DaGFuZ2UoZXZlbnQ6IGFueSwgc3VibWl0RGF0YTogYW55LCBhdHRyaWJ1dGVzOiBhbnkpIHtcclxuXHJcbiAgfVxyXG5cclxuICBjaGVja1ZlbmRvclJlZkl0ZW1zKGluc3RhbmNlKSB7XHJcbiAgICBjb25zdCBzZWxlY3RWYWx1ZXMgPSBpbnN0YW5jZS5jb21wb25lbnRbJ3NlbGVjdFZhbHVlcyddO1xyXG4gICAgY29uc3QgZGF0YVVybCA9IGluc3RhbmNlLmNvbXBvbmVudFsnZGF0YSddPy51cmw7XHJcbiAgICBjb25zdCBpc1NlbGVjdFZhbHVlc1ZhbGlkID0gc2VsZWN0VmFsdWVzICE9IG51bGwgJiYgc2VsZWN0VmFsdWVzICE9PSAnJyAmJiBzZWxlY3RWYWx1ZXMgIT09IHVuZGVmaW5lZDtcclxuICAgIGNvbnN0IGlzRGF0YVVybEludmFsaWQgPSBkYXRhVXJsID09IG51bGwgfHwgZGF0YVVybCA9PT0gJycgfHwgZGF0YVVybCA9PT0gdW5kZWZpbmVkO1xyXG4gICAgaW5zdGFuY2UuY29tcG9uZW50LmRlZmF1bHRWYWx1ZSA9IFwiXCI7XHJcbiAgICByZXR1cm4gaXNTZWxlY3RWYWx1ZXNWYWxpZCAmJiBpc0RhdGFVcmxJbnZhbGlkO1xyXG4gIH1cclxuXHJcbiAgZ2V0VmVuZG9yUmVmTGlzdChpbnN0YW5jZSkge1xyXG4gICAgY29uc3QgZGF0YVVybCA9IGluc3RhbmNlLmNvbXBvbmVudFsnZGF0YSddPy51cmw7XHJcbiAgICBjb25zdCBpc1NlbGVjdFZhbHVlc1ZhbGlkID0gZGF0YVVybCAhPSBudWxsICYmIGRhdGFVcmwgIT09ICcnICYmIGRhdGFVcmwgIT09IHVuZGVmaW5lZDtcclxuICAgIHJldHVybiBpc1NlbGVjdFZhbHVlc1ZhbGlkO1xyXG4gIH1cclxuXHJcbiAgaXNFcnJvcigpIHtcclxuICAgIGlmICh0aGlzLmluc3RhbmNlLmVycm9yKSB7XHJcbiAgICAgIHRoaXMuY29udHJvbC5zZXRFcnJvcnModGhpcy5pbnN0YW5jZS5jb21wb25lbnQudmFsaWRhdGUpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRFcnJvck1lc3NhZ2UoKSB7XHJcbiAgICBpZiAodGhpcy5pbnN0YW5jZS5lcnJvciAmJiB0aGlzLmluc3RhbmNlLmVycm9yLm1lc3NhZ2VzKSB7XHJcbiAgICAgIGNvbnN0IHsgbWVzc2FnZXMgfSA9IHRoaXMuaW5zdGFuY2UuZXJyb3I7XHJcbiAgICAgIGlmIChtZXNzYWdlcy5sZW5ndGgpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IG1zZyBvZiBtZXNzYWdlcykge1xyXG4gICAgICAgICAgaWYgKG1zZy5jb250ZXh0KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmluc3RhbmNlICYmIHRoaXMuaW5zdGFuY2UucGFyZW50ICYmIHRoaXMuaW5zdGFuY2UucGFyZW50Ll9kYXRhKSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UucGFyZW50Ll9kYXRhLnN1Ym1pdCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb250cm9sLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFuY2UuZXJyb3IgPyB0aGlzLmluc3RhbmNlLmVycm9yLm1lc3NhZ2UgOiAnJztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbXBhcmVPYmplY3RzKG8xOiBhbnksIG8yOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBfLmlzRXF1YWwobzEsIG8yKTtcclxuICB9XHJcblxyXG4gIGlzRmlsdGVyUHJvZHVjdEJhc2VkT25DdXN0b21lckNvdW50cnlWYWxpZChkYXRhKSB7XHJcbiAgICBpZiAoZGF0YSAmJiBkYXRhLmhlYWRlcnMgJiYgQXJyYXkuaXNBcnJheShkYXRhLmhlYWRlcnMpKSB7XHJcbiAgICAgIGNvbnN0IGhlYWRlciA9IGRhdGEuaGVhZGVycy5maW5kKGggPT4gaC5rZXkgPT09ICdmaWx0ZXJQcm9kdWN0QmFzZWRPbkN1c3RvbWVyQ291bnRyeScpO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgaGVhZGVyICYmXHJcbiAgICAgICAgaGVhZGVyLnZhbHVlICE9PSBudWxsICYmXHJcbiAgICAgICAgaGVhZGVyLnZhbHVlICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICBoZWFkZXIudmFsdWUudHJpbSgpICE9PSBcIlwiICYmXHJcbiAgICAgICAgaGVhZGVyLnZhbHVlLnRyaW0oKS50b0xvd2VyQ2FzZSgpID09PSBcInRydWVcIlxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbn1cclxuU2VsZWN0Q29tcG9uZW50Lk1hdGVyaWFsQ29tcG9uZW50ID0gTWF0ZXJpYWxTZWxlY3RDb21wb25lbnQ7XHJcblxyXG4vLyBNYWtlIHN1cmUgd2UgZGV0ZWN0IGNoYW5nZXMgd2hlbiBuZXcgaXRlbXMgbWFrZSB0aGVpciB3YXkgaW50byB0aGUgc2VsZWN0IGRyb3Bkb3duLlxyXG5jb25zdCBzZXRJdGVtcyA9IFNlbGVjdENvbXBvbmVudC5wcm90b3R5cGUuc2V0SXRlbXM7XHJcblNlbGVjdENvbXBvbmVudC5wcm90b3R5cGUuc2V0SXRlbXMgPSBmdW5jdGlvbiAoLi4uYXJncykge1xyXG4gIHNldEl0ZW1zLmNhbGwodGhpcywgLi4uYXJncyk7XHJcbiAgaWYgKHRoaXMubWF0ZXJpYWxDb21wb25lbnQgJiYgdGhpcy5tYXRlcmlhbENvbXBvbmVudC5zZWxlY3RPcHRpb25zUmVzb2x2ZSkge1xyXG4gICAgdGhpcy5tYXRlcmlhbENvbXBvbmVudC5zZWxlY3RPcHRpb25zUmVzb2x2ZSh0aGlzLnNlbGVjdE9wdGlvbnMpO1xyXG4gIH1cclxufTtcclxuXHJcbmV4cG9ydCB7IFNlbGVjdENvbXBvbmVudCB9OyJdfQ==
@@ -2841,6 +2841,8 @@ class MaterialSelectComponent extends MaterialComponent {
2841
2841
  this.storeDependentItems = [];
2842
2842
  this.executionFlag = false;
2843
2843
  this.apiCounter = 0;
2844
+ this.optionsInitialized = false;
2845
+ this.lastOptionsHash = '';
2844
2846
  }
2845
2847
  onInputChange(event) {
2846
2848
  if (this.instance.component.key.toLowerCase() === 'vendorproductid' && event.target.value === '') {
@@ -3122,7 +3124,7 @@ class MaterialSelectComponent extends MaterialComponent {
3122
3124
  }
3123
3125
  }
3124
3126
  this.selectElem.openedChange.subscribe((isOpen) => __awaiter(this, void 0, void 0, function* () {
3125
- var _a, _b, _c;
3127
+ var _a, _b;
3126
3128
  let i = 0;
3127
3129
  if (isOpen) {
3128
3130
  const newProductPickerFlag = (_b = (_a = this.instance) === null || _a === void 0 ? void 0 : _a.component) === null || _b === void 0 ? void 0 : _b.attributes;
@@ -3138,21 +3140,62 @@ class MaterialSelectComponent extends MaterialComponent {
3138
3140
  });
3139
3141
  }
3140
3142
  if (this.checkVendorRefItems(this.instance) && checkInvokeFromLibrary) {
3141
- this.storeDependentItems = [];
3142
- this.secondDropdownItems = this.commonService.getDropdownItems();
3143
- if ((_c = this.secondDropdownItems) === null || _c === void 0 ? void 0 : _c.length) {
3144
- this.secondDropdownItems.forEach((renderElement, index, array) => {
3145
- this.storeDependentItems.push({ label: renderElement['text'], value: this.commonService.onlyNumbers(renderElement['value']) ? renderElement['value'] + ' ' : renderElement['value'] });
3143
+ // this.storeDependentItems = [];
3144
+ // this.secondDropdownItems = this.commonService.getDropdownItems();
3145
+ // if (this.secondDropdownItems?.length) {
3146
+ // this.secondDropdownItems.forEach((renderElement, index, array) => {
3147
+ // this.storeDependentItems.push({ label: renderElement['text'], value: this.commonService.onlyNumbers(renderElement['value']) ? renderElement['value'] + ' ' : renderElement['value'] });
3148
+ // });
3149
+ // }
3150
+ // if (!this.commonService.getDropDownFlag()) {
3151
+ // this.storeDependentItems = this.instance.component.data.values;
3152
+ // }
3153
+ // this.filteredOptions = Promise.resolve(this.storeDependentItems);
3154
+ // this.selectOptions = Promise.resolve(this.storeDependentItems);
3155
+ // this.selectOptions.then(result => {
3156
+ // this.filteredOptionsLength = result.length
3157
+ // });
3158
+ const incomingItems = this.commonService.getDropdownItems();
3159
+ const seen = new Set();
3160
+ const newOptions = [];
3161
+ if (incomingItems === null || incomingItems === void 0 ? void 0 : incomingItems.length) {
3162
+ incomingItems.forEach(item => {
3163
+ var _a;
3164
+ const rawValue = this.commonService.onlyNumbers(item['value']) ? item['value'] + ' ' : item['value'];
3165
+ const label = (_a = item['text']) === null || _a === void 0 ? void 0 : _a.trim();
3166
+ const key = `${label}-${rawValue}`;
3167
+ if (!seen.has(key)) {
3168
+ seen.add(key);
3169
+ newOptions.push({ label, value: rawValue });
3170
+ }
3146
3171
  });
3147
3172
  }
3148
- if (!this.commonService.getDropDownFlag()) {
3149
- this.storeDependentItems = this.instance.component.data.values;
3173
+ // compare hashes to avoid unnecessary reassignments
3174
+ const newHash = JSON.stringify(newOptions);
3175
+ if (newHash !== this.lastOptionsHash) {
3176
+ this.lastOptionsHash = newHash;
3177
+ this.storeDependentItems = newOptions;
3178
+ if (!this.commonService.getDropDownFlag()) {
3179
+ this.storeDependentItems = this.instance.component.data.values;
3180
+ }
3181
+ this.filteredOptions = Promise.resolve(this.storeDependentItems);
3182
+ this.selectOptions = Promise.resolve(this.storeDependentItems);
3183
+ this.selectOptions.then(result => {
3184
+ this.filteredOptionsLength = result.length;
3185
+ });
3186
+ // scroll to selected item
3187
+ setTimeout(() => {
3188
+ var _a, _b, _c;
3189
+ const panel = (_b = (_a = this.selectElem) === null || _a === void 0 ? void 0 : _a.panel) === null || _b === void 0 ? void 0 : _b.nativeElement;
3190
+ if (panel && ((_c = this.storeDependentItems) === null || _c === void 0 ? void 0 : _c.length)) {
3191
+ const selectedIndex = this.storeDependentItems.findIndex(item => this.compareObjects(item.value, this.control.value));
3192
+ if (selectedIndex >= 0) {
3193
+ const optionHeight = 48;
3194
+ panel.scrollTop = selectedIndex * optionHeight;
3195
+ }
3196
+ }
3197
+ }, 200);
3150
3198
  }
3151
- this.filteredOptions = Promise.resolve(this.storeDependentItems);
3152
- this.selectOptions = Promise.resolve(this.storeDependentItems);
3153
- this.selectOptions.then(result => {
3154
- this.filteredOptionsLength = result.length;
3155
- });
3156
3199
  }
3157
3200
  }
3158
3201
  }));
@@ -3332,7 +3375,7 @@ MaterialSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0"
3332
3375
  <mat-error *ngIf="isError()" >{{ getErrorMessage() }}</mat-error>
3333
3376
  </mat-form-field>
3334
3377
  </ng-template>
3335
- `, isInline: true, styles: [".example-viewport{height:200px}.product-picker{overflow-x:hidden}.virtual-full-view{height:auto!important;white-space:normal!important;line-height:1.4!important;text-overflow:initial!important;min-height:48px!important;overflow:visible!important;overflow:initial!important;padding-top:10px!important;padding-bottom:10px!important}::ng-deep .product-picker .cdk-virtual-scroll-content-wrapper{width:100%!important}.virtual-full-view .mat-pseudo-checkbox{align-self:top!important}.virtual-full-view.mat-active{background:none}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatPrefix, selector: "[matPrefix]" }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix]" }, { kind: "component", type: i4$3.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i5$1.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i4$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "component", type: i10.MatSelectSearchComponent, selector: "ngx-mat-select-search", inputs: ["placeholderLabel", "type", "closeIcon", "closeSvgIcon", "noEntriesFoundLabel", "indexAndLengthScreenReaderText", "clearSearchInput", "searching", "disableInitialFocus", "enableClearOnEscapePressed", "preventHomeEndKeyPropagation", "disableScrollToActiveOnOptionsChanged", "ariaLabel", "showToggleAllCheckbox", "toggleAllCheckboxChecked", "toggleAllCheckboxIndeterminate", "toggleAllCheckboxTooltipMessage", "toogleAllCheckboxTooltipPosition", "hideClearSearchButton", "alwaysRestoreSelectedOptionsMulti"], outputs: ["toggleAll"] }, { kind: "directive", type: i10.MatSelectSearchClearDirective, selector: "[ngxMatSelectSearchClear]" }, { kind: "component", type: FormioFormFieldComponent, selector: "mat-formio-form-field", inputs: ["labelTemplate", "renderTopLabel", "showDescription", "renderElementOnly", "instance", "componentTemplate"] }, { kind: "component", type: LabelComponent, selector: "span[matFormioLabel]", inputs: ["instance"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] });
3378
+ `, isInline: true, styles: [".example-viewport{height:200px}.product-picker{overflow-x:hidden}.virtual-full-view{height:auto!important;white-space:normal!important;line-height:1.4!important;text-overflow:initial!important;min-height:48px!important;overflow:visible!important;overflow:initial!important;padding-top:10px!important;padding-bottom:10px!important}::ng-deep .product-picker .cdk-virtual-scroll-content-wrapper{width:100%!important}.virtual-full-view .mat-pseudo-checkbox{align-self:top!important}.mat-option.virtual-full-view.mat-active{background:none}.mat-option.virtual-full-view.mat-selected .mat-option-text span{color:#000000de}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatPrefix, selector: "[matPrefix]" }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix]" }, { kind: "component", type: i4$3.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i5$1.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i4$1.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "component", type: i10.MatSelectSearchComponent, selector: "ngx-mat-select-search", inputs: ["placeholderLabel", "type", "closeIcon", "closeSvgIcon", "noEntriesFoundLabel", "indexAndLengthScreenReaderText", "clearSearchInput", "searching", "disableInitialFocus", "enableClearOnEscapePressed", "preventHomeEndKeyPropagation", "disableScrollToActiveOnOptionsChanged", "ariaLabel", "showToggleAllCheckbox", "toggleAllCheckboxChecked", "toggleAllCheckboxIndeterminate", "toggleAllCheckboxTooltipMessage", "toogleAllCheckboxTooltipPosition", "hideClearSearchButton", "alwaysRestoreSelectedOptionsMulti"], outputs: ["toggleAll"] }, { kind: "directive", type: i10.MatSelectSearchClearDirective, selector: "[ngxMatSelectSearchClear]" }, { kind: "component", type: FormioFormFieldComponent, selector: "mat-formio-form-field", inputs: ["labelTemplate", "renderTopLabel", "showDescription", "renderElementOnly", "instance", "componentTemplate"] }, { kind: "component", type: LabelComponent, selector: "span[matFormioLabel]", inputs: ["instance"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }] });
3336
3379
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: MaterialSelectComponent, decorators: [{
3337
3380
  type: Component,
3338
3381
  args: [{ selector: 'mat-formio-select', template: `
@@ -3376,7 +3419,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
3376
3419
  <mat-error *ngIf="isError()" >{{ getErrorMessage() }}</mat-error>
3377
3420
  </mat-form-field>
3378
3421
  </ng-template>
3379
- `, styles: [".example-viewport{height:200px}.product-picker{overflow-x:hidden}.virtual-full-view{height:auto!important;white-space:normal!important;line-height:1.4!important;text-overflow:initial!important;min-height:48px!important;overflow:visible!important;overflow:initial!important;padding-top:10px!important;padding-bottom:10px!important}::ng-deep .product-picker .cdk-virtual-scroll-content-wrapper{width:100%!important}.virtual-full-view .mat-pseudo-checkbox{align-self:top!important}.virtual-full-view.mat-active{background:none}\n"] }]
3422
+ `, styles: [".example-viewport{height:200px}.product-picker{overflow-x:hidden}.virtual-full-view{height:auto!important;white-space:normal!important;line-height:1.4!important;text-overflow:initial!important;min-height:48px!important;overflow:visible!important;overflow:initial!important;padding-top:10px!important;padding-bottom:10px!important}::ng-deep .product-picker .cdk-virtual-scroll-content-wrapper{width:100%!important}.virtual-full-view .mat-pseudo-checkbox{align-self:top!important}.mat-option.virtual-full-view.mat-active{background:none}.mat-option.virtual-full-view.mat-selected .mat-option-text span{color:#000000de}\n"] }]
3380
3423
  }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1$2.HttpClient }, { type: CommonService }]; }, propDecorators: { multiSelect: [{
3381
3424
  type: ViewChild,
3382
3425
  args: ['multiSelect', { static: true }]