@tsi-developpement/tsi-shared-ui 1.8.1 → 1.8.2

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.
@@ -38,11 +38,11 @@ export class TsiDatePickerComponent extends TsiInputBase {
38
38
  }
39
39
  //#endregion
40
40
  //#region handle events
41
- onFocusOut(event) {
42
- this._handleDateChange(event);
41
+ onFocusOut() {
42
+ this._handleDateChange();
43
43
  }
44
- onSelect(event) {
45
- this._handleDateChange(event);
44
+ onSelect() {
45
+ this._handleDateChange();
46
46
  }
47
47
  //#endregion
48
48
  ngOnInit() {
@@ -66,18 +66,19 @@ export class TsiDatePickerComponent extends TsiInputBase {
66
66
  }
67
67
  return undefined;
68
68
  }
69
- _updateInputFieldFromStringDate(event) {
70
- this.dateString = event;
69
+ _updateInputFieldFromStringDate() {
71
70
  let date = this.dateString && this.dateString != ''
72
71
  ? this.showTime
73
72
  ? this._dateHelperService.parseDateTimeString(this.dateString)
74
73
  : this._dateHelperService.parseDateString(this.dateString)
75
74
  : undefined;
76
75
  this._value = date;
76
+ }
77
+ onModelChange(event) {
77
78
  this.isDirty = true;
78
79
  }
79
- _handleDateChange(event) {
80
- this._updateInputFieldFromStringDate(event);
80
+ _handleDateChange() {
81
+ this._updateInputFieldFromStringDate();
81
82
  this.inputFieldChange.emit(this.inputField);
82
83
  }
83
84
  _createUtcDate(value) {
@@ -98,11 +99,11 @@ export class TsiDatePickerComponent extends TsiInputBase {
98
99
  this.calendarRef.overlayVisible = false;
99
100
  }
100
101
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiDatePickerComponent, deps: [{ token: i1.DatePipe }, { token: i2.DateHelperService }, { token: i3.PrimeNGConfig }, { token: i4.LayoutService }], target: i0.ɵɵFactoryTarget.Component }); }
101
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiDatePickerComponent, selector: "Tsi-Date-Picker", inputs: { required: "required", showTime: "showTime", showButtonBar: "showButtonBar" }, outputs: { inputFieldChange: "inputFieldChange" }, viewQueries: [{ propertyName: "calendarRef", first: true, predicate: ["calendarRef"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"flex\">\r\n <p-calendar #calendarRef\r\n [dataType]=\"'string'\"\r\n [appendTo]=\"'body'\"\r\n [disabled]=\"disabled\"\r\n [showIcon]=\"true\"\r\n [showButtonBar]=\"showButtonBar\"\r\n [dateFormat]=\"datePickerFormat\"\r\n class=\"{{myStyleClass}}\"\r\n styleClass=\"{{myStyleClass}} border-radius-7\"\r\n inputStyleClass=\"{{myStyleClass}} {{validationStatusCssClass}}\"\r\n [showTime]=\"showTime\"\r\n [showSeconds]=\"showTime\"\r\n [ngModel]=\"dateString\"\r\n (onBlur)=\"onFocusOut($event)\"\r\n (onSelect)=\"onSelect($event)\"\r\n (onFocus)=\"onFocusHandler($event)\"\r\n >\r\n </p-calendar>\r\n <Tsi-Bubble-Info [infoText]=\"infoText\"></Tsi-Bubble-Info>\r\n</div>", styles: [".ColorClass{background-color:#2bff00;text-align:right}.p-datepicker-trigger{border-top-right-radius:7px!important;border-bottom-right-radius:7px!important}\n"], dependencies: [{ kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.Calendar, selector: "p-calendar", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepYearPicker", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "component", type: i7.TsiBubbleInfoComponent, selector: "Tsi-Bubble-Info", inputs: ["infoText"] }], encapsulation: i0.ViewEncapsulation.None }); }
102
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: TsiDatePickerComponent, selector: "Tsi-Date-Picker", inputs: { required: "required", showTime: "showTime", showButtonBar: "showButtonBar" }, outputs: { inputFieldChange: "inputFieldChange" }, viewQueries: [{ propertyName: "calendarRef", first: true, predicate: ["calendarRef"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"flex\">\r\n <p-calendar #calendarRef\r\n [dataType]=\"'string'\"\r\n [appendTo]=\"'body'\"\r\n [disabled]=\"disabled\"\r\n [showIcon]=\"true\"\r\n [showButtonBar]=\"showButtonBar\"\r\n [dateFormat]=\"datePickerFormat\"\r\n class=\"{{myStyleClass}}\"\r\n styleClass=\"{{myStyleClass}} border-radius-7\"\r\n inputStyleClass=\"{{myStyleClass}} {{validationStatusCssClass}}\"\r\n [showTime]=\"showTime\"\r\n [showSeconds]=\"showTime\"\r\n [(ngModel)]=\"dateString\"\r\n (onBlur)=\"onFocusOut()\"\r\n (onSelect)=\"onSelect()\"\r\n (onFocus)=\"onFocusHandler($event)\"\r\n (ngModelChange)=\"onModelChange($event)\"\r\n >\r\n </p-calendar>\r\n <Tsi-Bubble-Info [infoText]=\"infoText\"></Tsi-Bubble-Info>\r\n</div>", styles: [".ColorClass{background-color:#2bff00;text-align:right}.p-datepicker-trigger{border-top-right-radius:7px!important;border-bottom-right-radius:7px!important}\n"], dependencies: [{ kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.Calendar, selector: "p-calendar", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepYearPicker", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "component", type: i7.TsiBubbleInfoComponent, selector: "Tsi-Bubble-Info", inputs: ["infoText"] }], encapsulation: i0.ViewEncapsulation.None }); }
102
103
  }
103
104
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: TsiDatePickerComponent, decorators: [{
104
105
  type: Component,
105
- args: [{ selector: 'Tsi-Date-Picker', encapsulation: ViewEncapsulation.None, template: "<div class=\"flex\">\r\n <p-calendar #calendarRef\r\n [dataType]=\"'string'\"\r\n [appendTo]=\"'body'\"\r\n [disabled]=\"disabled\"\r\n [showIcon]=\"true\"\r\n [showButtonBar]=\"showButtonBar\"\r\n [dateFormat]=\"datePickerFormat\"\r\n class=\"{{myStyleClass}}\"\r\n styleClass=\"{{myStyleClass}} border-radius-7\"\r\n inputStyleClass=\"{{myStyleClass}} {{validationStatusCssClass}}\"\r\n [showTime]=\"showTime\"\r\n [showSeconds]=\"showTime\"\r\n [ngModel]=\"dateString\"\r\n (onBlur)=\"onFocusOut($event)\"\r\n (onSelect)=\"onSelect($event)\"\r\n (onFocus)=\"onFocusHandler($event)\"\r\n >\r\n </p-calendar>\r\n <Tsi-Bubble-Info [infoText]=\"infoText\"></Tsi-Bubble-Info>\r\n</div>", styles: [".ColorClass{background-color:#2bff00;text-align:right}.p-datepicker-trigger{border-top-right-radius:7px!important;border-bottom-right-radius:7px!important}\n"] }]
106
+ args: [{ selector: 'Tsi-Date-Picker', encapsulation: ViewEncapsulation.None, template: "<div class=\"flex\">\r\n <p-calendar #calendarRef\r\n [dataType]=\"'string'\"\r\n [appendTo]=\"'body'\"\r\n [disabled]=\"disabled\"\r\n [showIcon]=\"true\"\r\n [showButtonBar]=\"showButtonBar\"\r\n [dateFormat]=\"datePickerFormat\"\r\n class=\"{{myStyleClass}}\"\r\n styleClass=\"{{myStyleClass}} border-radius-7\"\r\n inputStyleClass=\"{{myStyleClass}} {{validationStatusCssClass}}\"\r\n [showTime]=\"showTime\"\r\n [showSeconds]=\"showTime\"\r\n [(ngModel)]=\"dateString\"\r\n (onBlur)=\"onFocusOut()\"\r\n (onSelect)=\"onSelect()\"\r\n (onFocus)=\"onFocusHandler($event)\"\r\n (ngModelChange)=\"onModelChange($event)\"\r\n >\r\n </p-calendar>\r\n <Tsi-Bubble-Info [infoText]=\"infoText\"></Tsi-Bubble-Info>\r\n</div>", styles: [".ColorClass{background-color:#2bff00;text-align:right}.p-datepicker-trigger{border-top-right-radius:7px!important;border-bottom-right-radius:7px!important}\n"] }]
106
107
  }], ctorParameters: () => [{ type: i1.DatePipe }, { type: i2.DateHelperService }, { type: i3.PrimeNGConfig }, { type: i4.LayoutService }], propDecorators: { calendarRef: [{
107
108
  type: ViewChild,
108
109
  args: ['calendarRef']
@@ -115,4 +116,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
115
116
  }], inputFieldChange: [{
116
117
  type: Output
117
118
  }] } });
118
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWRhdGUtcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9pbnB1dC1jb21wb25lbnRzL3RzaS1kYXRlLXBpY2tlci90c2ktZGF0ZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1jb21wb25lbnRzL2lucHV0LWNvbXBvbmVudHMvdHNpLWRhdGUtcGlja2VyL3RzaS1kYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3RyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFDekYsT0FBTyxFQUFFLFVBQVUsRUFBRSxvQkFBb0IsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHOUcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0NBQStDLENBQUM7Ozs7Ozs7OztBQVNuRixNQUFNLE9BQU8sc0JBQXVCLFNBQVEsWUFBOEI7SUFnQnhFLElBQWEsVUFBVTtRQUNyQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELElBQWEsVUFBVSxDQUFDLEtBQXVCO1FBQzdDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDN0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUks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WUFDeEIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO2FBQ0csQ0FBQztZQUNILE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hFLENBQUM7SUFDSCxDQUFDO0lBQ0QsWUFBWTtJQUVaLDJCQUEyQjtJQUUzQixnQkFBZ0I7UUFDZCxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO0lBQ3ZELENBQUM7SUFFRCxZQUFZO0lBQ1osY0FBYyxDQUFDLEtBQVU7UUFDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQzFDLENBQUM7K0dBdEhVLHNCQUFzQjttR0FBdEIsc0JBQXNCLHFVQ2hCbkMsc3VCQW9CTTs7NEZESk8sc0JBQXNCO2tCQU5sQyxTQUFTOytCQUNFLGlCQUFpQixpQkFFWixpQkFBaUIsQ0FBQyxJQUFJO3FLQUtYLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkFVZixRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFhSSxnQkFBZ0I7c0JBQXpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUHJpbWVOR0NvbmZpZyB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgVHNpSW5wdXRCYXNlIH0gZnJvbSAnLi4vLi4vLi4vdHNpLWJhc2UvdHNpLWlucHV0LWJhc2UvdHNpLWlucHV0LWJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRGF0ZUZvcm1hdCwgRGF0ZVBpY2tlckRhdGVGb3JtYXQsIERhdGVUaW1lRm9ybWF0LCBUaW1lWm9uZUxvY2FsZSB9IGZyb20gJy4uLy4uLy4uL2NvbnN0cy90c2ktY29uc3RzJztcclxuaW1wb3J0IHsgRGF0ZUhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9kYXRlLWhlbHBlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTGF5b3V0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2FwcGxpY2F0aW9uL2FwcC5sYXlvdXQuc2VydmljZSc7XHJcbmltcG9ydCB7IHByaW1lbmdEYXRlTG9jYWxBciB9IGZyb20gJy4uLy4uLy4uL3RzaS1oZWxwZXJzL3ByaW1lbmctdHJhbnNsYXRlLWNvbmZpZyc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdUc2ktRGF0ZS1QaWNrZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90c2ktZGF0ZS1waWNrZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdHNpLWRhdGUtcGlja2VyLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVHNpRGF0ZVBpY2tlckNvbXBvbmVudCBleHRlbmRzIFRzaUlucHV0QmFzZTxEYXRlIHwgdW5kZWZpbmVkPiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2NhbGVuZGFyUmVmJykgY2FsZW5kYXJSZWYhOiBhbnk7XHJcblxyXG4gIC8vI3JlZ2lvbiBsb2NhbCBwcm9wZXJ0aWVzXHJcbiAgcHJpdmF0ZSBfdmFsdWU6IERhdGUgfCB1bmRlZmluZWQ7XHJcblxyXG4gIGRhdGVTdHJpbmc6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBkYXRlUGlja2VyRm9ybWF0OiBzdHJpbmcgPSBEYXRlUGlja2VyRGF0ZUZvcm1hdDtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIGlucHV0c1xyXG4gIEBJbnB1dCgpIHJlcXVpcmVkPzogYm9vbGVhbjtcclxuICBASW5wdXQoKSBzaG93VGltZTogYm9vbGVhbiA9IGZhbHNlOyBcclxuICBASW5wdXQoKSBzaG93QnV0dG9uQmFyOiBib29sZWFuID0gdHJ1ZTsgXHJcblxyXG4gIG92ZXJyaWRlIGdldCBpbnB1dEZpZWxkKCk6IERhdGUgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgc2V0IGlucHV0RmllbGQodmFsdWU6IERhdGUgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWUgPyB0aGlzLl9jcmVhdGVVdGNEYXRlKHZhbHVlKSA6IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuZGF0ZVN0cmluZyA9IHRoaXMuX3RvU3RyaW5nKHRoaXMuaW5wdXRGaWVsZCk7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gb3V0cHV0c1xyXG4gIEBPdXRwdXQoKSBpbnB1dEZpZWxkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gY3RvclxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICovXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfZGF0ZVBpcGU6IERhdGVQaXBlXHJcbiAgICAsIHByaXZhdGUgX2RhdGVIZWxwZXJTZXJ2aWNlIDogRGF0ZUhlbHBlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHByaW1lTkdDb25maWc6IFByaW1lTkdDb25maWcsXHJcbiAgcHJpdmF0ZSBfbGF5b3V0U2VydmljZSA6IExheW91dFNlcnZpY2UpIHtcclxuICAgIHN1cGVyKCk7XHJcblxyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIGhhbmRsZSBldmVudHNcclxuICBvbkZvY3VzT3V0KGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuX2hhbmRsZURhdGVDaGFuZ2UoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3QoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5faGFuZGxlRGF0ZUNoYW5nZShldmVudCk7XHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBzdXBlci5uZ09uSW5pdCgpXHJcbiAgICB0aGlzLl9sYXlvdXRTZXJ2aWNlLmVuYWJsZVJ0bE1vZGVTdWJqZWN0JC5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OihkYXRhKT0+e1xyXG4gICAgICAgIGlmIChkYXRhICYmIGRhdGEgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgdGhpcy5faW5pdEFyYWJpY0xvY2FsKClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gICAgaWYodGhpcy5fbGF5b3V0U2VydmljZS5pc1J0bE1vZGVFbmFibGVkKCkpe1xyXG4gICAgICB0aGlzLl9pbml0QXJhYmljTG9jYWwoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIHByaXZhdGUgbWV0aG9kc1xyXG4gIHByaXZhdGUgX3RvU3RyaW5nKHZhbHVlOiBEYXRlIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmKHZhbHVlKXtcclxuICAgICAgbGV0IGRhdGVTdHJpbmc6IHN0cmluZyB8IHVuZGVmaW5lZFxyXG4gICAgICAgID0gdGhpcy5fZGF0ZVBpcGUudHJhbnNmb3JtKHZhbHVlXHJcbiAgICAgICAgICAgICwgdGhpcy5zaG93VGltZSA/IERhdGVUaW1lRm9ybWF0IDogRGF0ZUZvcm1hdCwgVGltZVpvbmVMb2NhbGVcclxuICAgICAgICAgICkgPz8gdW5kZWZpbmVkIDtcclxuXHJcbiAgICAgIHJldHVybiBkYXRlU3RyaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBfdXBkYXRlSW5wdXRGaWVsZEZyb21TdHJpbmdEYXRlKGV2ZW50IDogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmRhdGVTdHJpbmcgPSBldmVudFxyXG4gICAgbGV0IGRhdGU6IERhdGUgfCB1bmRlZmluZWQgPSB0aGlzLmRhdGVTdHJpbmcgJiYgdGhpcy5kYXRlU3RyaW5nICE9ICcnXHJcbiAgICAgID8gdGhpcy5zaG93VGltZVxyXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5fZGF0ZUhlbHBlclNlcnZpY2UucGFyc2VEYXRlVGltZVN0cmluZyh0aGlzLmRhdGVTdHJpbmcpXHJcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl9kYXRlSGVscGVyU2VydmljZS5wYXJzZURhdGVTdHJpbmcodGhpcy5kYXRlU3RyaW5nKVxyXG4gICAgICA6IHVuZGVmaW5lZDtcclxuICAgIHRoaXMuX3ZhbHVlID0gZGF0ZTtcclxuICAgIHRoaXMuaXNEaXJ0eSA9IHRydWVcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZURhdGVDaGFuZ2UoZXZlbnQgOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuX3VwZGF0ZUlucHV0RmllbGRGcm9tU3RyaW5nRGF0ZShldmVudCk7XHJcbiAgICB0aGlzLmlucHV0RmllbGRDaGFuZ2UuZW1pdCh0aGlzLmlucHV0RmllbGQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY3JlYXRlVXRjRGF0ZSh2YWx1ZTogYW55KTogRGF0ZSB8IHVuZGVmaW5lZHtcclxuICAgIGlmKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSl7XHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIHJldHVybiB0aGlzLl9kYXRlSGVscGVyU2VydmljZS5jcmVhdGVVdGNEYXRlRnJvbVN0cmluZyh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gYWRkIGFyYWJpYyByZWdpb25cclxuXHJcbiAgX2luaXRBcmFiaWNMb2NhbCgpe1xyXG4gICAgdGhpcy5wcmltZU5HQ29uZmlnLnNldFRyYW5zbGF0aW9uKHByaW1lbmdEYXRlTG9jYWxBcilcclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG4gIG9uRm9jdXNIYW5kbGVyKGV2ZW50OiBhbnkpIHtcclxuICAgIHRoaXMuY2FsZW5kYXJSZWYub3ZlcmxheVZpc2libGUgPSBmYWxzZTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImZsZXhcIj5cclxuICAgIDxwLWNhbGVuZGFyICNjYWxlbmRhclJlZlxyXG4gICAgW2RhdGFUeXBlXT1cIidzdHJpbmcnXCJcclxuICAgIFthcHBlbmRUb109XCInYm9keSdcIlxyXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgIFtzaG93SWNvbl09XCJ0cnVlXCJcclxuICAgIFtzaG93QnV0dG9uQmFyXT1cInNob3dCdXR0b25CYXJcIlxyXG4gICAgW2RhdGVGb3JtYXRdPVwiZGF0ZVBpY2tlckZvcm1hdFwiXHJcbiAgICBjbGFzcz1cInt7bXlTdHlsZUNsYXNzfX1cIlxyXG4gICAgc3R5bGVDbGFzcz1cInt7bXlTdHlsZUNsYXNzfX0gYm9yZGVyLXJhZGl1cy03XCJcclxuICAgIGlucHV0U3R5bGVDbGFzcz1cInt7bXlTdHlsZUNsYXNzfX0ge3t2YWxpZGF0aW9uU3RhdHVzQ3NzQ2xhc3N9fVwiXHJcbiAgICBbc2hvd1RpbWVdPVwic2hvd1RpbWVcIlxyXG4gICAgW3Nob3dTZWNvbmRzXT1cInNob3dUaW1lXCJcclxuICAgIFtuZ01vZGVsXT1cImRhdGVTdHJpbmdcIlxyXG4gICAgKG9uQmx1cik9XCJvbkZvY3VzT3V0KCRldmVudClcIlxyXG4gICAgKG9uU2VsZWN0KT1cIm9uU2VsZWN0KCRldmVudClcIlxyXG4gICAgKG9uRm9jdXMpPVwib25Gb2N1c0hhbmRsZXIoJGV2ZW50KVwiXHJcbiAgICA+XHJcbiAgICA8L3AtY2FsZW5kYXI+XHJcbiAgICA8VHNpLUJ1YmJsZS1JbmZvIFtpbmZvVGV4dF09XCJpbmZvVGV4dFwiPjwvVHNpLUJ1YmJsZS1JbmZvPlxyXG48L2Rpdj4iXX0=
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHNpLWRhdGUtcGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9pbnB1dC1jb21wb25lbnRzL3RzaS1kYXRlLXBpY2tlci90c2ktZGF0ZS1waWNrZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHNpLXNoYXJlZC11aS9zcmMvbGliL3RzaS1jb21wb25lbnRzL2lucHV0LWNvbXBvbmVudHMvdHNpLWRhdGUtcGlja2VyL3RzaS1kYXRlLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3RyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFDekYsT0FBTyxFQUFFLFVBQVUsRUFBRSxvQkFBb0IsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHOUcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sK0NBQStDLENBQUM7Ozs7Ozs7OztBQVNuRixNQUFNLE9BQU8sc0JBQXVCLFNBQVEsWUFBOEI7SUFnQnhFLElBQWEsVUFBVTtRQUNyQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELElBQWEsVUFBVSxDQUFDLEtBQXVCO1FBQzdDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDN0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUks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dUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRSxDQUFDO0lBQ0gsQ0FBQztJQUNELFlBQVk7SUFFWiwyQkFBMkI7SUFFM0IsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsQ0FBQTtJQUN2RCxDQUFDO0lBRUQsWUFBWTtJQUNaLGNBQWMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUMxQyxDQUFDOytHQXhIVSxzQkFBc0I7bUdBQXRCLHNCQUFzQixxVUNoQm5DLDZ3QkFxQk07OzRGRExPLHNCQUFzQjtrQkFObEMsU0FBUzsrQkFDRSxpQkFBaUIsaUJBRVosaUJBQWlCLENBQUMsSUFBSTtxS0FLWCxXQUFXO3NCQUFwQyxTQUFTO3VCQUFDLGFBQWE7Z0JBVWYsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBYUksZ0JBQWdCO3NCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFByaW1lTkdDb25maWcgfSBmcm9tICdwcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IFRzaUlucHV0QmFzZSB9IGZyb20gJy4uLy4uLy4uL3RzaS1iYXNlL3RzaS1pbnB1dC1iYXNlL3RzaS1pbnB1dC1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERhdGVGb3JtYXQsIERhdGVQaWNrZXJEYXRlRm9ybWF0LCBEYXRlVGltZUZvcm1hdCwgVGltZVpvbmVMb2NhbGUgfSBmcm9tICcuLi8uLi8uLi9jb25zdHMvdHNpLWNvbnN0cyc7XHJcbmltcG9ydCB7IERhdGVIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZGF0ZS1oZWxwZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IExheW91dFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hcHBsaWNhdGlvbi9hcHAubGF5b3V0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBwcmltZW5nRGF0ZUxvY2FsQXIgfSBmcm9tICcuLi8uLi8uLi90c2ktaGVscGVycy9wcmltZW5nLXRyYW5zbGF0ZS1jb25maWcnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnVHNpLURhdGUtUGlja2VyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdHNpLWRhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIHN0eWxlVXJsczogWycuL3RzaS1kYXRlLXBpY2tlci5jb21wb25lbnQuY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRzaURhdGVQaWNrZXJDb21wb25lbnQgZXh0ZW5kcyBUc2lJbnB1dEJhc2U8RGF0ZSB8IHVuZGVmaW5lZD4gaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBAVmlld0NoaWxkKCdjYWxlbmRhclJlZicpIGNhbGVuZGFyUmVmITogYW55O1xyXG5cclxuICAvLyNyZWdpb24gbG9jYWwgcHJvcGVydGllc1xyXG4gIHByaXZhdGUgX3ZhbHVlOiBEYXRlIHwgdW5kZWZpbmVkO1xyXG5cclxuICBkYXRlU3RyaW5nOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgZGF0ZVBpY2tlckZvcm1hdDogc3RyaW5nID0gRGF0ZVBpY2tlckRhdGVGb3JtYXQ7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBpbnB1dHNcclxuICBASW5wdXQoKSByZXF1aXJlZD86IGJvb2xlYW47XHJcbiAgQElucHV0KCkgc2hvd1RpbWU6IGJvb2xlYW4gPSBmYWxzZTsgXHJcbiAgQElucHV0KCkgc2hvd0J1dHRvbkJhcjogYm9vbGVhbiA9IHRydWU7IFxyXG5cclxuICBvdmVycmlkZSBnZXQgaW5wdXRGaWVsZCgpOiBEYXRlIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIHNldCBpbnB1dEZpZWxkKHZhbHVlOiBEYXRlIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlID8gdGhpcy5fY3JlYXRlVXRjRGF0ZSh2YWx1ZSkgOiB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmRhdGVTdHJpbmcgPSB0aGlzLl90b1N0cmluZyh0aGlzLmlucHV0RmllbGQpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIG91dHB1dHNcclxuICBAT3V0cHV0KCkgaW5wdXRGaWVsZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGF0ZT4oKTtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIGN0b3JcclxuICAvKipcclxuICAgKlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2RhdGVQaXBlOiBEYXRlUGlwZVxyXG4gICAgLCBwcml2YXRlIF9kYXRlSGVscGVyU2VydmljZSA6IERhdGVIZWxwZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwcmltZU5HQ29uZmlnOiBQcmltZU5HQ29uZmlnLFxyXG4gIHByaXZhdGUgX2xheW91dFNlcnZpY2UgOiBMYXlvdXRTZXJ2aWNlKSB7XHJcbiAgICBzdXBlcigpO1xyXG5cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBoYW5kbGUgZXZlbnRzXHJcbiAgb25Gb2N1c091dCgpIHtcclxuICAgIHRoaXMuX2hhbmRsZURhdGVDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0KCkge1xyXG4gICAgdGhpcy5faGFuZGxlRGF0ZUNoYW5nZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgc3VwZXIubmdPbkluaXQoKVxyXG4gICAgdGhpcy5fbGF5b3V0U2VydmljZS5lbmFibGVSdGxNb2RlU3ViamVjdCQuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDooZGF0YSk9PntcclxuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhID09IHRydWUpIHtcclxuICAgICAgICAgIHRoaXMuX2luaXRBcmFiaWNMb2NhbCgpXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG5cclxuICAgIGlmKHRoaXMuX2xheW91dFNlcnZpY2UuaXNSdGxNb2RlRW5hYmxlZCgpKXtcclxuICAgICAgdGhpcy5faW5pdEFyYWJpY0xvY2FsKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBwcml2YXRlIG1ldGhvZHNcclxuICBwcml2YXRlIF90b1N0cmluZyh2YWx1ZTogRGF0ZSB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZih2YWx1ZSl7XHJcbiAgICAgIGxldCBkYXRlU3RyaW5nOiBzdHJpbmcgfCB1bmRlZmluZWRcclxuICAgICAgICA9IHRoaXMuX2RhdGVQaXBlLnRyYW5zZm9ybSh2YWx1ZVxyXG4gICAgICAgICAgICAsIHRoaXMuc2hvd1RpbWUgPyBEYXRlVGltZUZvcm1hdCA6IERhdGVGb3JtYXQsIFRpbWVab25lTG9jYWxlXHJcbiAgICAgICAgICApID8/IHVuZGVmaW5lZCA7XHJcblxyXG4gICAgICByZXR1cm4gZGF0ZVN0cmluZztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgX3VwZGF0ZUlucHV0RmllbGRGcm9tU3RyaW5nRGF0ZSgpOiB2b2lkIHtcclxuICAgIGxldCBkYXRlOiBEYXRlIHwgdW5kZWZpbmVkID0gdGhpcy5kYXRlU3RyaW5nICYmIHRoaXMuZGF0ZVN0cmluZyAhPSAnJ1xyXG4gICAgICA/IHRoaXMuc2hvd1RpbWVcclxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuX2RhdGVIZWxwZXJTZXJ2aWNlLnBhcnNlRGF0ZVRpbWVTdHJpbmcodGhpcy5kYXRlU3RyaW5nKVxyXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5fZGF0ZUhlbHBlclNlcnZpY2UucGFyc2VEYXRlU3RyaW5nKHRoaXMuZGF0ZVN0cmluZylcclxuICAgICAgOiB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLl92YWx1ZSA9IGRhdGU7XHJcbiAgfVxyXG5cclxuICBvbk1vZGVsQ2hhbmdlKGV2ZW50IDogYW55KXtcclxuICAgIHRoaXMuaXNEaXJ0eSA9IHRydWVcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2hhbmRsZURhdGVDaGFuZ2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLl91cGRhdGVJbnB1dEZpZWxkRnJvbVN0cmluZ0RhdGUoKTtcclxuICAgIHRoaXMuaW5wdXRGaWVsZENoYW5nZS5lbWl0KHRoaXMuaW5wdXRGaWVsZCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jcmVhdGVVdGNEYXRlKHZhbHVlOiBhbnkpOiBEYXRlIHwgdW5kZWZpbmVke1xyXG4gICAgaWYodmFsdWUgaW5zdGFuY2VvZiBEYXRlKXtcclxuICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG4gICAgZWxzZXtcclxuICAgICAgcmV0dXJuIHRoaXMuX2RhdGVIZWxwZXJTZXJ2aWNlLmNyZWF0ZVV0Y0RhdGVGcm9tU3RyaW5nKHZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBhZGQgYXJhYmljIHJlZ2lvblxyXG5cclxuICBfaW5pdEFyYWJpY0xvY2FsKCl7XHJcbiAgICB0aGlzLnByaW1lTkdDb25maWcuc2V0VHJhbnNsYXRpb24ocHJpbWVuZ0RhdGVMb2NhbEFyKVxyXG4gIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcbiAgb25Gb2N1c0hhbmRsZXIoZXZlbnQ6IGFueSkge1xyXG4gICAgdGhpcy5jYWxlbmRhclJlZi5vdmVybGF5VmlzaWJsZSA9IGZhbHNlO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZmxleFwiPlxyXG4gICAgPHAtY2FsZW5kYXIgI2NhbGVuZGFyUmVmXHJcbiAgICBbZGF0YVR5cGVdPVwiJ3N0cmluZydcIlxyXG4gICAgW2FwcGVuZFRvXT1cIidib2R5J1wiXHJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgW3Nob3dJY29uXT1cInRydWVcIlxyXG4gICAgW3Nob3dCdXR0b25CYXJdPVwic2hvd0J1dHRvbkJhclwiXHJcbiAgICBbZGF0ZUZvcm1hdF09XCJkYXRlUGlja2VyRm9ybWF0XCJcclxuICAgIGNsYXNzPVwie3tteVN0eWxlQ2xhc3N9fVwiXHJcbiAgICBzdHlsZUNsYXNzPVwie3tteVN0eWxlQ2xhc3N9fSBib3JkZXItcmFkaXVzLTdcIlxyXG4gICAgaW5wdXRTdHlsZUNsYXNzPVwie3tteVN0eWxlQ2xhc3N9fSB7e3ZhbGlkYXRpb25TdGF0dXNDc3NDbGFzc319XCJcclxuICAgIFtzaG93VGltZV09XCJzaG93VGltZVwiXHJcbiAgICBbc2hvd1NlY29uZHNdPVwic2hvd1RpbWVcIlxyXG4gICAgWyhuZ01vZGVsKV09XCJkYXRlU3RyaW5nXCJcclxuICAgIChvbkJsdXIpPVwib25Gb2N1c091dCgpXCJcclxuICAgIChvblNlbGVjdCk9XCJvblNlbGVjdCgpXCJcclxuICAgIChvbkZvY3VzKT1cIm9uRm9jdXNIYW5kbGVyKCRldmVudClcIlxyXG4gICAgKG5nTW9kZWxDaGFuZ2UpPVwib25Nb2RlbENoYW5nZSgkZXZlbnQpXCJcclxuICAgID5cclxuICAgIDwvcC1jYWxlbmRhcj5cclxuICAgIDxUc2ktQnViYmxlLUluZm8gW2luZm9UZXh0XT1cImluZm9UZXh0XCI+PC9Uc2ktQnViYmxlLUluZm8+XHJcbjwvZGl2PiJdfQ==
@@ -82,7 +82,7 @@ export class ReportingComponent {
82
82
  return this._reportingInformation;
83
83
  }
84
84
  get enableToPrintReport() {
85
- return this._inputRegistryService.getAll().every(x => {
85
+ return !this.fromTsiForm || this._inputRegistryService.getAll().every(x => {
86
86
  return !x.isDirty;
87
87
  });
88
88
  }
@@ -605,11 +605,11 @@ export class ReportingComponent {
605
605
  return key;
606
606
  }
607
607
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ReportingComponent, deps: [{ token: i1.TsiModalService }, { token: i2.ReportingService }, { token: i3.IdentityManagerService }, { token: i4.TsiNotificationService }, { token: i5.TsiMessageService }, { token: i6.RecordInfoPopupService }, { token: i7.ErrorResponseManagerService }, { token: i8.LayoutHelperService }, { token: i9.FichierService }, { token: i0.EnvironmentInjector }, { token: i10.MailingService }, { token: i11.InputRegistryService }], target: i0.ɵɵFactoryTarget.Component }); }
608
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ReportingComponent, selector: "app-reporting", inputs: { showImportExportButton: "showImportExportButton", showNoteButton: "showNoteButton", showInfoButton: "showInfoButton", showUploadButton: "showUploadButton", isReportingToolbarDisabled: "isReportingToolbarDisabled", formName: "formName", formEndpoint: "formEndpoint", formEndpointBody: "formEndpointBody", isFormEndpointPaged: "isFormEndpointPaged", filtersHtmlTemplate: "filtersHtmlTemplate", optionalEndpoints: "optionalEndpoints", businessClass: "businessClass", cudComponent: "cudComponent", httpMethodType: "httpMethodType", requestData: "requestData", customReportingMode: "customReportingMode", pagedRequest: "pagedRequest", reportDiscriminator: "reportDiscriminator", nombreDocumentsJoints: "nombreDocumentsJoints", id: "id", configModeButtonId: "configModeButtonId", selectedItemUids: "selectedItemUids", fromTsiForm: "fromTsiForm", customSendMailMode: "customSendMailMode", reportingInformation: "reportingInformation" }, outputs: { onSave: "onSave", refreshData: "refreshData", closedModalFileUpload: "closedModalFileUpload", toggleDesignMode: "toggleDesignMode" }, viewQueries: [{ propertyName: "wrapperRef", first: true, predicate: ["wrapper"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"flex gap-2 mx-2\">\r\n <div\r\n *ngIf=\"(formEndpoint || businessClass) && enableToPrintReport\"\r\n presentationDesignerBase=\"manage_reports_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n [iconSrc]=\"'./assets/icons/icon-printer-group-white.png'\"\r\n [iconWidth]=\"20\"\r\n [tooltipText]=\"'shared_reporting_manage_reports'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"showDialog()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"(formEndpoint || businessClass) && enableToPrintReport\"\r\n presentationDesignerBase=\"print_default_report_button\"\r\n class=\"flex align-items-center justify-content-center btn-wrapper\"\r\n #wrapper\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-print p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_reporting_rightClick'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"onPrintDefault($event)\"\r\n (rightClick)=\"onRightClick($event)\"\r\n >\r\n </Tsi-Button>\r\n <!-- `shared_reporting_print_report` key for `Imprimer` text (replace it as value or tooltip if need it) -->\r\n\r\n <div\r\n *ngIf=\"showContextMenu && enableToPrintReport\"\r\n class=\"context-menu\"\r\n [ngStyle]=\"{\r\n 'top.px': contextMenuPosition.y,\r\n 'left.px': contextMenuPosition.x\r\n }\"\r\n (mouseleave)=\"hideContextMenu()\"\r\n >\r\n <div\r\n *ngFor=\"let report of reports\"\r\n class=\"menu-item\"\r\n (click)=\"onSelectContextOption(report)\"\r\n >\r\n {{ report.name }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"businessClass && showUploadButton\"\r\n presentationDesignerBase=\"attachment_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-paperclip p-button-icon\"\r\n [tooltipText]=\"'shared_actions_attachment'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"showUploadDialog()\"\r\n (dragover)=\"onDragOver($event)\"\r\n (drop)=\"onDrop($event)\"\r\n >\r\n </Tsi-Button>\r\n <span *ngIf=\"nombreDocumentsJoints && nombreDocumentsJoints > 0\" class=\"custom-badge\">\r\n {{ nombreDocumentsJoints }}\r\n </span>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"(formEndpoint || businessClass) && enableToPrintReport\"\r\n presentationDesignerBase=\"send_report_by_email_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-send p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_reporting_send_mail'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"onSendPdf($event)\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n <div\r\n *ngIf=\"businessClass && showImportExportButton\"\r\n presentationDesignerBase=\"import_export_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-arrow-right-arrow-left p-button-icon\"\r\n [tooltipText]=\"'shared_reporting_manage_export_import'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-success hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"showExportImportDialog()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"showNoteButton\"\r\n class=\"flex align-items-center justify-content-center\"\r\n presentationDesignerBase=\"shared_show_notes_button\"\r\n >\r\n <Tsi-Button\r\n id=\"{{ configModeButtonId }}\"\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-comment p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_tsi_component_gestion_des_notes'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-warning hover:shadow-6 h-2rem p-button-icon-only text-white\"\r\n (click)=\"viewNotes()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n <div\r\n *ngIf=\"showInfoButton\"\r\n class=\"flex align-items-center justify-content-center\"\r\n presentationDesignerBase=\"shared_show_info_button\"\r\n >\r\n <Tsi-Button\r\n id=\"'show-info-button'\"\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-info p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_actions_info'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-info hover:shadow-6 h-2rem p-button-icon-only text-white\"\r\n (click)=\"viewInfo($event)\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"showPresentationDesignerConfigButton\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n id=\"{{ configModeButtonId }}\"\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-eye p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_tsi_component_config_show_hide'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-success hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"presentationDesignerConfig()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- <div *ngIf=\"showContextMenu\"\r\n class=\"context-menu\"\r\n [ngStyle]=\"{\r\n 'top.px': contextMenuPosition.y,\r\n 'left.px': contextMenuPosition.x\r\n }\"\r\n (mouseleave)=\"hideContextMenu()\">\r\n <div *ngFor=\"let report of reports\"\r\n class=\"menu-item\"\r\n (click)=\"onSelectContextOption(report)\">\r\n {{report.name}}\r\n </div>\r\n</div> -->\r\n", styles: [".p-fileupload-content{display:none!important}.btn-wrapper{position:relative;display:inline-block}.context-menu{position:absolute;background:#fff;border:.125rem solid #ccc;border-radius:1rem;z-index:1000;box-shadow:0 .25rem .75rem #0003;min-width:15rem;max-height:25rem;padding:.5rem 0;overflow-y:auto}.menu-item{padding:.5rem;cursor:pointer;text-transform:capitalize}.menu-item:hover{background-color:#f0f0f0}::ng-deep .header-title{flex-shrink:1;min-width:100px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin:0 .5rem}.custom-badge{position:absolute;top:10px;right:9%;background:#e90505;color:#fff;padding:2px 6px;font-size:.75rem;border-radius:50%;font-weight:700}\n"], dependencies: [{ kind: "directive", type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i12.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i13.TsiButtonComponent, selector: "Tsi-Button", inputs: ["disabled", "text", "style", "tooltipText", "tooltipPosition", "buttonType", "icon", "styleClass", "iconSrc", "id", "iconWidth", "iconClass"], outputs: ["onClick", "rightClick"] }, { kind: "directive", type: i14.PresentationDesignerDirectiveBase, selector: "[presentationDesignerBase]", inputs: ["presentationDesigner", "presentationDesignerBase"] }] }); }
608
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ReportingComponent, selector: "app-reporting", inputs: { showImportExportButton: "showImportExportButton", showNoteButton: "showNoteButton", showInfoButton: "showInfoButton", showUploadButton: "showUploadButton", isReportingToolbarDisabled: "isReportingToolbarDisabled", formName: "formName", formEndpoint: "formEndpoint", formEndpointBody: "formEndpointBody", isFormEndpointPaged: "isFormEndpointPaged", filtersHtmlTemplate: "filtersHtmlTemplate", optionalEndpoints: "optionalEndpoints", businessClass: "businessClass", cudComponent: "cudComponent", httpMethodType: "httpMethodType", requestData: "requestData", customReportingMode: "customReportingMode", pagedRequest: "pagedRequest", reportDiscriminator: "reportDiscriminator", nombreDocumentsJoints: "nombreDocumentsJoints", id: "id", configModeButtonId: "configModeButtonId", selectedItemUids: "selectedItemUids", fromTsiForm: "fromTsiForm", customSendMailMode: "customSendMailMode", reportingInformation: "reportingInformation" }, outputs: { onSave: "onSave", refreshData: "refreshData", closedModalFileUpload: "closedModalFileUpload", toggleDesignMode: "toggleDesignMode" }, viewQueries: [{ propertyName: "wrapperRef", first: true, predicate: ["wrapper"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"flex gap-2 mx-2\">\r\n <div\r\n *ngIf=\"(formEndpoint || businessClass) && enableToPrintReport\"\r\n presentationDesignerBase=\"manage_reports_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n [iconSrc]=\"'./assets/icons/icon-printer-group-white.png'\"\r\n [iconWidth]=\"20\"\r\n [tooltipText]=\"'shared_reporting_manage_reports'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"showDialog()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"(formEndpoint || businessClass) && enableToPrintReport\"\r\n presentationDesignerBase=\"print_default_report_button\"\r\n class=\"flex align-items-center justify-content-center btn-wrapper\"\r\n #wrapper\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-print p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_reporting_rightClick'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"onPrintDefault($event)\"\r\n (rightClick)=\"onRightClick($event)\"\r\n >\r\n </Tsi-Button>\r\n <!-- `shared_reporting_print_report` key for `Imprimer` text (replace it as value or tooltip if need it) -->\r\n\r\n <div\r\n *ngIf=\"showContextMenu && enableToPrintReport\"\r\n class=\"context-menu\"\r\n [ngStyle]=\"{\r\n 'top.px': contextMenuPosition.y,\r\n 'left.px': contextMenuPosition.x\r\n }\"\r\n (mouseleave)=\"hideContextMenu()\"\r\n >\r\n <div\r\n *ngFor=\"let report of reports\"\r\n class=\"menu-item\"\r\n (click)=\"onSelectContextOption(report)\"\r\n >\r\n {{ report.name }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"(formEndpoint || businessClass) && enableToPrintReport\"\r\n presentationDesignerBase=\"send_report_by_email_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-send p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_reporting_send_mail'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"onSendPdf($event)\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"businessClass && showUploadButton\"\r\n presentationDesignerBase=\"attachment_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-paperclip p-button-icon\"\r\n [tooltipText]=\"'shared_actions_attachment'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"showUploadDialog()\"\r\n (dragover)=\"onDragOver($event)\"\r\n (drop)=\"onDrop($event)\"\r\n >\r\n </Tsi-Button>\r\n <span *ngIf=\"nombreDocumentsJoints && nombreDocumentsJoints > 0\" class=\"custom-badge\">\r\n {{ nombreDocumentsJoints }}\r\n </span>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"businessClass && showImportExportButton\"\r\n presentationDesignerBase=\"import_export_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-arrow-right-arrow-left p-button-icon\"\r\n [tooltipText]=\"'shared_reporting_manage_export_import'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-success hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"showExportImportDialog()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"showNoteButton\"\r\n class=\"flex align-items-center justify-content-center\"\r\n presentationDesignerBase=\"shared_show_notes_button\"\r\n >\r\n <Tsi-Button\r\n id=\"{{ configModeButtonId }}\"\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-comment p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_tsi_component_gestion_des_notes'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-warning hover:shadow-6 h-2rem p-button-icon-only text-white\"\r\n (click)=\"viewNotes()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n <div\r\n *ngIf=\"showInfoButton\"\r\n class=\"flex align-items-center justify-content-center\"\r\n presentationDesignerBase=\"shared_show_info_button\"\r\n >\r\n <Tsi-Button\r\n id=\"'show-info-button'\"\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-info p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_actions_info'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-info hover:shadow-6 h-2rem p-button-icon-only text-white\"\r\n (click)=\"viewInfo($event)\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"showPresentationDesignerConfigButton\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n id=\"{{ configModeButtonId }}\"\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-eye p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_tsi_component_config_show_hide'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-success hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"presentationDesignerConfig()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- <div *ngIf=\"showContextMenu\"\r\n class=\"context-menu\"\r\n [ngStyle]=\"{\r\n 'top.px': contextMenuPosition.y,\r\n 'left.px': contextMenuPosition.x\r\n }\"\r\n (mouseleave)=\"hideContextMenu()\">\r\n <div *ngFor=\"let report of reports\"\r\n class=\"menu-item\"\r\n (click)=\"onSelectContextOption(report)\">\r\n {{report.name}}\r\n </div>\r\n</div> -->\r\n", styles: [".p-fileupload-content{display:none!important}.btn-wrapper{position:relative;display:inline-block}.context-menu{position:absolute;background:#fff;border:.125rem solid #ccc;border-radius:1rem;z-index:1000;box-shadow:0 .25rem .75rem #0003;min-width:15rem;max-height:25rem;padding:.5rem 0;overflow-y:auto}.menu-item{padding:.5rem;cursor:pointer;text-transform:capitalize}.menu-item:hover{background-color:#f0f0f0}::ng-deep .header-title{flex-shrink:1;min-width:100px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin:0 .5rem}.custom-badge{position:absolute;top:10px;right:9%;background:#e90505;color:#fff;padding:2px 6px;font-size:.75rem;border-radius:50%;font-weight:700}\n"], dependencies: [{ kind: "directive", type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i12.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i13.TsiButtonComponent, selector: "Tsi-Button", inputs: ["disabled", "text", "style", "tooltipText", "tooltipPosition", "buttonType", "icon", "styleClass", "iconSrc", "id", "iconWidth", "iconClass"], outputs: ["onClick", "rightClick"] }, { kind: "directive", type: i14.PresentationDesignerDirectiveBase, selector: "[presentationDesignerBase]", inputs: ["presentationDesigner", "presentationDesignerBase"] }] }); }
609
609
  }
610
610
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ReportingComponent, decorators: [{
611
611
  type: Component,
612
- args: [{ selector: 'app-reporting', template: "<div class=\"flex gap-2 mx-2\">\r\n <div\r\n *ngIf=\"(formEndpoint || businessClass) && enableToPrintReport\"\r\n presentationDesignerBase=\"manage_reports_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n [iconSrc]=\"'./assets/icons/icon-printer-group-white.png'\"\r\n [iconWidth]=\"20\"\r\n [tooltipText]=\"'shared_reporting_manage_reports'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"showDialog()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"(formEndpoint || businessClass) && enableToPrintReport\"\r\n presentationDesignerBase=\"print_default_report_button\"\r\n class=\"flex align-items-center justify-content-center btn-wrapper\"\r\n #wrapper\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-print p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_reporting_rightClick'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"onPrintDefault($event)\"\r\n (rightClick)=\"onRightClick($event)\"\r\n >\r\n </Tsi-Button>\r\n <!-- `shared_reporting_print_report` key for `Imprimer` text (replace it as value or tooltip if need it) -->\r\n\r\n <div\r\n *ngIf=\"showContextMenu && enableToPrintReport\"\r\n class=\"context-menu\"\r\n [ngStyle]=\"{\r\n 'top.px': contextMenuPosition.y,\r\n 'left.px': contextMenuPosition.x\r\n }\"\r\n (mouseleave)=\"hideContextMenu()\"\r\n >\r\n <div\r\n *ngFor=\"let report of reports\"\r\n class=\"menu-item\"\r\n (click)=\"onSelectContextOption(report)\"\r\n >\r\n {{ report.name }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"businessClass && showUploadButton\"\r\n presentationDesignerBase=\"attachment_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-paperclip p-button-icon\"\r\n [tooltipText]=\"'shared_actions_attachment'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"showUploadDialog()\"\r\n (dragover)=\"onDragOver($event)\"\r\n (drop)=\"onDrop($event)\"\r\n >\r\n </Tsi-Button>\r\n <span *ngIf=\"nombreDocumentsJoints && nombreDocumentsJoints > 0\" class=\"custom-badge\">\r\n {{ nombreDocumentsJoints }}\r\n </span>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"(formEndpoint || businessClass) && enableToPrintReport\"\r\n presentationDesignerBase=\"send_report_by_email_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-send p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_reporting_send_mail'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"onSendPdf($event)\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n <div\r\n *ngIf=\"businessClass && showImportExportButton\"\r\n presentationDesignerBase=\"import_export_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-arrow-right-arrow-left p-button-icon\"\r\n [tooltipText]=\"'shared_reporting_manage_export_import'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-success hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"showExportImportDialog()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"showNoteButton\"\r\n class=\"flex align-items-center justify-content-center\"\r\n presentationDesignerBase=\"shared_show_notes_button\"\r\n >\r\n <Tsi-Button\r\n id=\"{{ configModeButtonId }}\"\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-comment p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_tsi_component_gestion_des_notes'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-warning hover:shadow-6 h-2rem p-button-icon-only text-white\"\r\n (click)=\"viewNotes()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n <div\r\n *ngIf=\"showInfoButton\"\r\n class=\"flex align-items-center justify-content-center\"\r\n presentationDesignerBase=\"shared_show_info_button\"\r\n >\r\n <Tsi-Button\r\n id=\"'show-info-button'\"\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-info p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_actions_info'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-info hover:shadow-6 h-2rem p-button-icon-only text-white\"\r\n (click)=\"viewInfo($event)\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"showPresentationDesignerConfigButton\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n id=\"{{ configModeButtonId }}\"\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-eye p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_tsi_component_config_show_hide'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-success hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"presentationDesignerConfig()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- <div *ngIf=\"showContextMenu\"\r\n class=\"context-menu\"\r\n [ngStyle]=\"{\r\n 'top.px': contextMenuPosition.y,\r\n 'left.px': contextMenuPosition.x\r\n }\"\r\n (mouseleave)=\"hideContextMenu()\">\r\n <div *ngFor=\"let report of reports\"\r\n class=\"menu-item\"\r\n (click)=\"onSelectContextOption(report)\">\r\n {{report.name}}\r\n </div>\r\n</div> -->\r\n", styles: [".p-fileupload-content{display:none!important}.btn-wrapper{position:relative;display:inline-block}.context-menu{position:absolute;background:#fff;border:.125rem solid #ccc;border-radius:1rem;z-index:1000;box-shadow:0 .25rem .75rem #0003;min-width:15rem;max-height:25rem;padding:.5rem 0;overflow-y:auto}.menu-item{padding:.5rem;cursor:pointer;text-transform:capitalize}.menu-item:hover{background-color:#f0f0f0}::ng-deep .header-title{flex-shrink:1;min-width:100px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin:0 .5rem}.custom-badge{position:absolute;top:10px;right:9%;background:#e90505;color:#fff;padding:2px 6px;font-size:.75rem;border-radius:50%;font-weight:700}\n"] }]
612
+ args: [{ selector: 'app-reporting', template: "<div class=\"flex gap-2 mx-2\">\r\n <div\r\n *ngIf=\"(formEndpoint || businessClass) && enableToPrintReport\"\r\n presentationDesignerBase=\"manage_reports_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n [iconSrc]=\"'./assets/icons/icon-printer-group-white.png'\"\r\n [iconWidth]=\"20\"\r\n [tooltipText]=\"'shared_reporting_manage_reports'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"showDialog()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"(formEndpoint || businessClass) && enableToPrintReport\"\r\n presentationDesignerBase=\"print_default_report_button\"\r\n class=\"flex align-items-center justify-content-center btn-wrapper\"\r\n #wrapper\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-print p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_reporting_rightClick'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"onPrintDefault($event)\"\r\n (rightClick)=\"onRightClick($event)\"\r\n >\r\n </Tsi-Button>\r\n <!-- `shared_reporting_print_report` key for `Imprimer` text (replace it as value or tooltip if need it) -->\r\n\r\n <div\r\n *ngIf=\"showContextMenu && enableToPrintReport\"\r\n class=\"context-menu\"\r\n [ngStyle]=\"{\r\n 'top.px': contextMenuPosition.y,\r\n 'left.px': contextMenuPosition.x\r\n }\"\r\n (mouseleave)=\"hideContextMenu()\"\r\n >\r\n <div\r\n *ngFor=\"let report of reports\"\r\n class=\"menu-item\"\r\n (click)=\"onSelectContextOption(report)\"\r\n >\r\n {{ report.name }}\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"(formEndpoint || businessClass) && enableToPrintReport\"\r\n presentationDesignerBase=\"send_report_by_email_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-send p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_reporting_send_mail'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"onSendPdf($event)\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"businessClass && showUploadButton\"\r\n presentationDesignerBase=\"attachment_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-paperclip p-button-icon\"\r\n [tooltipText]=\"'shared_actions_attachment'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-secondary hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"showUploadDialog()\"\r\n (dragover)=\"onDragOver($event)\"\r\n (drop)=\"onDrop($event)\"\r\n >\r\n </Tsi-Button>\r\n <span *ngIf=\"nombreDocumentsJoints && nombreDocumentsJoints > 0\" class=\"custom-badge\">\r\n {{ nombreDocumentsJoints }}\r\n </span>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"businessClass && showImportExportButton\"\r\n presentationDesignerBase=\"import_export_button\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-arrow-right-arrow-left p-button-icon\"\r\n [tooltipText]=\"'shared_reporting_manage_export_import'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-success hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"showExportImportDialog()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"showNoteButton\"\r\n class=\"flex align-items-center justify-content-center\"\r\n presentationDesignerBase=\"shared_show_notes_button\"\r\n >\r\n <Tsi-Button\r\n id=\"{{ configModeButtonId }}\"\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-comment p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_tsi_component_gestion_des_notes'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-warning hover:shadow-6 h-2rem p-button-icon-only text-white\"\r\n (click)=\"viewNotes()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n <div\r\n *ngIf=\"showInfoButton\"\r\n class=\"flex align-items-center justify-content-center\"\r\n presentationDesignerBase=\"shared_show_info_button\"\r\n >\r\n <Tsi-Button\r\n id=\"'show-info-button'\"\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-info p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_actions_info'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-info hover:shadow-6 h-2rem p-button-icon-only text-white\"\r\n (click)=\"viewInfo($event)\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"showPresentationDesignerConfigButton\"\r\n class=\"flex align-items-center justify-content-center\"\r\n >\r\n <Tsi-Button\r\n id=\"{{ configModeButtonId }}\"\r\n [disabled]=\"isReportingToolbarDisabled\"\r\n type=\"button\"\r\n icon=\"pi pi-eye p-button-icon p-button-icon-left\"\r\n [tooltipText]=\"'shared_tsi_component_config_show_hide'\"\r\n [tooltipPosition]=\"tooltipPosition\"\r\n styleClass=\"p-button-success hover:shadow-6 h-2rem p-button-icon-only\"\r\n (click)=\"presentationDesignerConfig()\"\r\n >\r\n </Tsi-Button>\r\n </div>\r\n\r\n</div>\r\n\r\n<!-- <div *ngIf=\"showContextMenu\"\r\n class=\"context-menu\"\r\n [ngStyle]=\"{\r\n 'top.px': contextMenuPosition.y,\r\n 'left.px': contextMenuPosition.x\r\n }\"\r\n (mouseleave)=\"hideContextMenu()\">\r\n <div *ngFor=\"let report of reports\"\r\n class=\"menu-item\"\r\n (click)=\"onSelectContextOption(report)\">\r\n {{report.name}}\r\n </div>\r\n</div> -->\r\n", styles: [".p-fileupload-content{display:none!important}.btn-wrapper{position:relative;display:inline-block}.context-menu{position:absolute;background:#fff;border:.125rem solid #ccc;border-radius:1rem;z-index:1000;box-shadow:0 .25rem .75rem #0003;min-width:15rem;max-height:25rem;padding:.5rem 0;overflow-y:auto}.menu-item{padding:.5rem;cursor:pointer;text-transform:capitalize}.menu-item:hover{background-color:#f0f0f0}::ng-deep .header-title{flex-shrink:1;min-width:100px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;margin:0 .5rem}.custom-badge{position:absolute;top:10px;right:9%;background:#e90505;color:#fff;padding:2px 6px;font-size:.75rem;border-radius:50%;font-weight:700}\n"] }]
613
613
  }], ctorParameters: () => [{ type: i1.TsiModalService }, { type: i2.ReportingService }, { type: i3.IdentityManagerService }, { type: i4.TsiNotificationService }, { type: i5.TsiMessageService }, { type: i6.RecordInfoPopupService }, { type: i7.ErrorResponseManagerService }, { type: i8.LayoutHelperService }, { type: i9.FichierService }, { type: i0.EnvironmentInjector }, { type: i10.MailingService }, { type: i11.InputRegistryService }], propDecorators: { showImportExportButton: [{
614
614
  type: Input
615
615
  }], showNoteButton: [{
@@ -672,4 +672,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
672
672
  type: ViewChild,
673
673
  args: ['wrapper', { read: ElementRef }]
674
674
  }] } });
675
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0aW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9yZXBvcnRpbmcvcmVwb3J0aW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9yZXBvcnRpbmcvcmVwb3J0aW5nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQXVCLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlJLE9BQU8sRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTNFLE9BQU8sRUFBNkMsT0FBTyxFQUE4QixNQUFNLGNBQWMsQ0FBQztBQUU5RyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFPekQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLDRCQUE0QixFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBR3JMLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIs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c0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBTdGF0dXNDb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEVudmlyb25tZW50SW5qZWN0b3IsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFRvb2x0aXBQb3NpdGlvbiB9IGZyb20gJy4uLy4uL2VudW1zL3Rvb2x0aXBQb3NpdGlvbi5lbnVtJztcclxuaW1wb3J0IHsgU2VnbWVudCB9IGZyb20gJy4uLy4uL2VuZC1wb2ludHMnO1xyXG5pbXBvcnQgeyBNb2RhbFNpemVFbnVtLCBIdHRwTWV0aG9kVHlwZSwgVHNpUmVwb3J0VHlwZSB9IGZyb20gJy4uLy4uL2VudW1zJztcclxuaW1wb3J0IHsgSU1vZGFsU2l6ZSwgSVBhZ2VkUmVxdWVzdCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQgeyBPcHRpb25hbEVuZHBvaW50cywgUmVwb3J0VGVtcGxhdGVSZXNwb25zZSwgRmljaGllciwgUmVwb3J0VG9QcmludCwgU2VhcmNoRmllbGQgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBGaWNoaWVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZpY2hpZXIvZmljaGllci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgcXVlcnlQYXJhbU5hbWVzQ29uc3QgfSBmcm9tICcuLi8uLi9jb25zdHMvcXVlcnlQYXJhbU5hbWVzLmNvbnN0JztcclxuaW1wb3J0IHsgTG9jYWxpemVQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvbG9jYWxpemUucGlwZSc7XHJcbmltcG9ydCB7IExheW91dEhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sYXlvdXQvbGF5b3V0LWhlbHBlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVjb3JkSW5mb1BvcHVwU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlY29yZC1pbmZvLXBvcHVwLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUc2lNZXNzYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vdGlmaWNhdGlvbi90c2ktbWVzc2FnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHNpTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vdGlmaWNhdGlvbi90c2ktbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJZGVudGl0eU1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXV0aG9yaXphdGlvbi9pZGVudGl0eS1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZXBvcnRpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVwb3J0aW5nL3JlcG9ydGluZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgb3Blbk1hbmFnZUltcG9ydEV4cG9ydE1vZGFsLCBvcGVuTWFuYWdlUmVwb3J0aW5nQ29tcG9uZW50LCBvcGVuTW9kYWxVcGxvYWRHcmlkLCBvcGVuTm90ZXNMaXN0LCBvcGVuVHNpUG9wdXBUZXh0Vmlld2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zL21vZGFsLW9wZW4uZnVuY3Rpb24nO1xyXG5pbXBvcnQgeyBEeW5hbWljRGlhbG9nQ29uZmlnLCBEeW5hbWljRGlhbG9nUmVmIH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcclxuaW1wb3J0IHsgRXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpY2F0aW9uL2Vycm9yLXJlc3BvbnNlLW1hbmFnZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEFwcFJvdXRlcyB9IGZyb20gJy4uLy4uL3JvdXRlcy9hcHAucm91dGVzJztcclxuaW1wb3J0IHsgTWFuYWdlUmVwb3J0aW5nUm91dGVzIH0gZnJvbSAnLi4vLi4vcm91dGVzL21hbmFnZS1yZXBvcnRpbmcucm91dGVzJztcclxuaW1wb3J0IHsgVHNpU2VuZE1haWxDb21wb25lbnQgfSBmcm9tICcuLi90c2ktc2VuZC1tYWlsL3RzaS1zZW5kLW1haWwuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTG9jYWxpemF0aW9uS2V5cyB9IGZyb20gJy4uLy4uL2NvbnN0cy9sb2NhbGl6YXRpb24ta2V5JztcclxuaW1wb3J0IHsgRW1haWxJbmZvcm1hdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9hcHBsaWNhdGlvbi9jb25maWd1cmF0aW9uL2VtYWlsLWluZm9ybWF0aW9uJztcclxuaW1wb3J0IHsgTWFpbGluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHBsaWNhdGlvbi9tYWlsaW5nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZXBvcnRpbmdJbmZvcm1hdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9yZXBvcnRpbmcvcmVwb3J0aW5nLWluZm9ybWF0aW9uJztcclxuaW1wb3J0IHsgVHNpTW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbW9kYWwvdHNpLW1vZGFsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJbnB1dFJlZ2lzdHJ5U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZhbGlkYXRpb24vaW5wdXQtcmVnaXN0cnkuc2VydmljZSc7XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXJlcG9ydGluZycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3JlcG9ydGluZy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vcmVwb3J0aW5nLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZXBvcnRpbmdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgLy8jcmVnaW9uIHByb3BlcnRpZXNcclxuICByZXBvcnRUb1ByaW50SWQ6IG51bWJlciB8IHVuZGVmaW5lZDtcclxuICB0b1NlbmRFbWFpbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHB1YmxpYyBsb2NhbGl6ZT8gPSBpbmplY3QoTG9jYWxpemVQaXBlKVxyXG4gIHByaXZhdGUgcmVhZG9ubHkgZXJyb3JNZXNzYWdlS2V5OiBzdHJpbmcgPSAnc2hhcmVkX3JlcG9ydGluZ19lcnJvcl9vY2N1cmVkJztcclxuICBtb2RhbFNpemU6IElNb2RhbFNpemUgPSBNb2RhbFNpemVFbnVtLkxhcmdlO1xyXG4gIHByaXZhdGUgX2RpYWxvZ1JlZj86IER5bmFtaWNEaWFsb2dSZWY7XHJcbiAgcHJpdmF0ZSBfcmVwb3J0RGlzY3JpbWluYXRvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIC8vIHBhcmFtZXRyZTogUGFyYW1ldHJlc0FwcGxpY2F0aW9uUGFpZSA9IG5ldyBQYXJhbWV0cmVzQXBwbGljYXRpb25QYWllKCk7XHJcbiAgQElucHV0KCkgc2hvd0ltcG9ydEV4cG9ydEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd05vdGVCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dJbmZvQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93VXBsb2FkQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgc2hvd1ByZXNlbnRhdGlvbkRlc2lnbmVyQ29uZmlnQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBwcml2YXRlIF9pc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIGdldCBpc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIHNldCBpc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5faXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWQgPSB2YWx1ZTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcbiAgQE91dHB1dCgpIG9uU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIC8vI3JlZ2lvbiBJbnB1dCBwcm9wZXJ0aWVzXHJcbiAgQElucHV0KCkgZm9ybU5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDsgLy9mb3JtSWRlbnRpZmllclxyXG4gIEBJbnB1dCgpIGZvcm1FbmRwb2ludDogc3RyaW5nIHwgdW5kZWZpbmVkOyAvLz0gYCR7R2VzdGlvbkNvbW1lcmNpYWxlU2VnbWVudHMuZmFjdHVyZVZlbnRlfS8xNjVlYzVmZC00ZDM0LTQ1NDYtYWUxNS0wMDQ0ZTcwOGI5ZDlgO1xyXG4gIEBJbnB1dCgpIGZvcm1FbmRwb2ludEJvZHk6IHN0cmluZyB8IHVuZGVmaW5lZDsgLy9mb3JtSWRlbnRpZmllclxyXG4gIEBJbnB1dCgpIGlzRm9ybUVuZHBvaW50UGFnZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBmaWx0ZXJzSHRtbFRlbXBsYXRlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgQElucHV0KCkgb3B0aW9uYWxFbmRwb2ludHM/OiBPcHRpb25hbEVuZHBvaW50cztcclxuICBASW5wdXQoKSBidXNpbmVzc0NsYXNzPzogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGN1ZENvbXBvbmVudDogYW55O1xyXG4gIEBJbnB1dCgpIGh0dHBNZXRob2RUeXBlPzogc3RyaW5nXHJcbiAgQElucHV0KCkgcmVxdWVzdERhdGE/OiBhbnk7XHJcbiAgQElucHV0KCkgY3VzdG9tUmVwb3J0aW5nTW9kZT86IGJvb2xlYW47XHJcbiAgQElucHV0KCkgcGFnZWRSZXF1ZXN0PzogSVBhZ2VkUmVxdWVzdDtcclxuICBASW5wdXQoKVxyXG4gIGdldCByZXBvcnREaXNjcmltaW5hdG9yKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVwb3J0RGlzY3JpbWluYXRvcjtcclxuICB9XHJcblxyXG4gIHNldCByZXBvcnREaXNjcmltaW5hdG9yKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX3JlcG9ydERpc2NyaW1pbmF0b3IgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgcHVibGljIF9ub21icmVEb2N1bWVudHNKb2ludHM6IG51bWJlciA9IDA7XHJcbiAgQElucHV0KClcclxuICBnZXQgbm9tYnJlRG9jdW1lbnRzSm9pbnRzKCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbm9tYnJlRG9jdW1lbnRzSm9pbnRzO1xyXG4gIH1cclxuXHJcbiAgc2V0IG5vbWJyZURvY3VtZW50c0pvaW50cyh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSB7XHJcbiAgICBpZiAodmFsdWUgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuX25vbWJyZURvY3VtZW50c0pvaW50cyA9IDA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9ub21icmVEb2N1bWVudHNKb2ludHMgPSB2YWx1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGlkKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX2lkID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXQgaWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLl9pZDtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGNvbmZpZ01vZGVCdXR0b25JZDogc3RyaW5nID0gJ3Nob3ctaGlkZS1jb25maWctYnV0dG9uJztcclxuXHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRJdGVtVWlkczogQXJyYXk8YW55PiA9IFtdO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBzZWxlY3RlZEl0ZW1VaWRzKGxpc3RVaWRzOiBBcnJheTxhbnk+W10pIHtcclxuICAgIHRoaXMuX3NlbGVjdGVkSXRlbVVpZHMgPSBsaXN0VWlkcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRJdGVtVWlkcygpOiBBcnJheTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZEl0ZW1VaWRzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZnJvbVRzaUZvcm06IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IGZyb21Uc2lGb3JtKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9mcm9tVHNpRm9ybSA9IHZhbHVlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGZyb21Uc2lGb3JtKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Zyb21Uc2lGb3JtXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jdXN0b21TZW5kTWFpbE1vZGU6IGJvb2xlYW4gPSBmYWxzZVxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBjdXN0b21TZW5kTWFpbE1vZGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2N1c3RvbVNlbmRNYWlsTW9kZSA9IHZhbHVlXHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGN1c3RvbVNlbmRNYWlsTW9kZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9jdXN0b21TZW5kTWFpbE1vZGVcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3JlcG9ydGluZ0luZm9ybWF0aW9uPzogUmVwb3J0aW5nSW5mb3JtYXRpb25cclxuXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IHJlcG9ydGluZ0luZm9ybWF0aW9uKHZhbHVlOiBSZXBvcnRpbmdJbmZvcm1hdGlvbiB8IHVuZGVmaW5lZCkge1xyXG4gICAgdGhpcy5fcmVwb3J0aW5nSW5mb3JtYXRpb24gPSB2YWx1ZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCByZXBvcnRpbmdJbmZvcm1hdGlvbigpIHtcclxuICAgIHJldHVybiB0aGlzLl9yZXBvcnRpbmdJbmZvcm1hdGlvblxyXG4gIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBPdXRwdXQgcHJvcGVydGllc1xyXG4gIEBPdXRwdXQoKSByZWZyZXNoRGF0YTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gIEBPdXRwdXQoKSBjbG9zZWRNb2RhbEZpbGVVcGxvYWQ6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICBAT3V0cHV0KCkgdG9nZ2xlRGVzaWduTW9kZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID1cclxuICAgIG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgQFZpZXdDaGlsZCgnd3JhcHBlcicsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxyXG4gIHdyYXBwZXJSZWYhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuXHJcbiAgcmVwb3J0czogUmVwb3J0VGVtcGxhdGVSZXNwb25zZVtdID0gW107XHJcbiAgc2hvd0NvbnRleHRNZW51ID0gZmFsc2U7XHJcbiAgY29udGV4dE1lbnVQb3NpdGlvbiA9IHsgeDogMCwgeTogMCB9O1xyXG5cclxuICB0b29sdGlwUG9zaXRpb24gPSBUb29sdGlwUG9zaXRpb24uVG9wO1xyXG5cclxuICBwdWJsaWMgZ2V0IGVuYWJsZVRvUHJpbnRSZXBvcnQoKXtcclxuICAgIHJldHVybiB0aGlzLl9pbnB1dFJlZ2lzdHJ5U2VydmljZS5nZXRBbGwoKS5ldmVyeSh4ID0+IHtcclxuICAgICAgcmV0dXJuICF4LmlzRGlydHlcclxuICAgIH0pXHJcbiAgfSBcclxuXHJcbiAgZ2V0IGlzUmVwb3J0Rm9yRmljaGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gIXRoaXMuZm9ybUVuZHBvaW50Py5pbmNsdWRlcygnZ2V0YWxscGFnZWQnKTtcclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBjdG9yXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF90c2lNb2RhbFNlcnZpY2U6IFRzaU1vZGFsU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVwb3J0aW5nU2VydmljZTogUmVwb3J0aW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgaWRlbnRpdHlNYW5hZ2VyU2VydmljZTogSWRlbnRpdHlNYW5hZ2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogVHNpTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IFRzaU1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWNvcmRJbmZvUG9wdXBTZXJ2aWNlOiBSZWNvcmRJbmZvUG9wdXBTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlOiBFcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9sYXlvdXRIZWxwZXJTZXJ2aWNlOiBMYXlvdXRIZWxwZXJTZXJ2aWNlLFxyXG4gICAgcHVibGljIF9maWNoaWVyU2VydmljZTogRmljaGllclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9pbmplY3RvcjogRW52aXJvbm1lbnRJbmplY3RvcixcclxuICAgIHByaXZhdGUgX21haWxpbmdTZXJ2aWNlOiBNYWlsaW5nU2VydmljZSxcclxuICAgIHByaXZhdGUgX2lucHV0UmVnaXN0cnlTZXJ2aWNlIDogSW5wdXRSZWdpc3RyeVNlcnZpY2VcclxuICApIHsgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy9oYW5kbGUgTGlmZWN5Y2xlIEhvb2tzXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgLy8jcmVnaW9uIGhhbmRsZSBldmVudHNcclxuICBvblByaW50RGVmYXVsdChldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5mb3JtTmFtZSkge1xyXG4gICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2VcclxuICAgICAgICAuZ2V0RGVmYXVsdFJlcG9ydCh0aGlzLmZvcm1OYW1lLCB0aGlzLnJlcG9ydERpc2NyaW1pbmF0b3IpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAoZGF0YTogUmVwb3J0VGVtcGxhdGVSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcclxuICAgICAgICAgICAgLy8gbGV0IGRlZmF1bHRSZXBvcnRJZDogc3RyaW5nID0gZGF0YTtcclxuICAgICAgICAgICAgdGhpcy5fdmlld1JlcG9ydChkYXRhPy51aWQsIGRhdGEpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAocmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gSHR0cFN0YXR1c0NvZGUuTm90Rm91bmQpIHtcclxuICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmluZm9NZXNzYWdlKFxyXG4gICAgICAgICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfbm9fZGVmYXVsdF9yZXBvcnRfZm91bmQnXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRXhwb3J0UGRmKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmZvcm1OYW1lKSB7XHJcbiAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZS5nZXREZWZhdWx0UmVwb3J0KHRoaXMuZm9ybU5hbWUpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xyXG4gICAgICAgICAgLy8gbGV0IGRlZmF1bHRSZXBvcnRJZDogc3RyaW5nID0gZGF0YTtcclxuICAgICAgICAgIHRoaXMuX2V4cG9ydFBkZihkYXRhLnVpZCwgZGF0YSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKHJlc3BvbnNlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBIdHRwU3RhdHVzQ29kZS5Ob3RGb3VuZCkge1xyXG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmluZm9NZXNzYWdlKFxyXG4gICAgICAgICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX25vX2RlZmF1bHRfcmVwb3J0X2ZvdW5kJ1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25TZW5kUGRmKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmN1c3RvbVNlbmRNYWlsTW9kZSkge1xyXG4gICAgICB0aGlzLnRvU2VuZEVtYWlsID0gdGhpcy5yZXBvcnRpbmdJbmZvcm1hdGlvbj8uZGVzdGluYXRpb25BZGRyZXNzXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmZvcm1OYW1lKSB7XHJcbiAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZVxyXG4gICAgICAgIC5nZXREZWZhdWx0UmVwb3J0KHRoaXMuZm9ybU5hbWUsIHRoaXMucmVwb3J0RGlzY3JpbWluYXRvcilcclxuICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xyXG4gICAgICAgICAgICAvLyBsZXQgZGVmYXVsdFJlcG9ydElkOiBzdHJpbmcgPSBkYXRhO1xyXG4gICAgICAgICAgICB0aGlzLl9zZW5kUGRmKGRhdGEudWlkLCBkYXRhKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKHJlc3BvbnNlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IEh0dHBTdGF0dXNDb2RlLk5vdEZvdW5kKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5pbmZvTWVzc2FnZShcclxuICAgICAgICAgICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX25vX2RlZmF1bHRfcmVwb3J0X2ZvdW5kJ1xyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZW5kUGRmKFxyXG4gICAgaWQ6IHN0cmluZyxcclxuICAgIHJlcG9ydEluZm9ybWF0aW9uPzogUmVwb3J0VGVtcGxhdGVSZXNwb25zZVxyXG4gICk6IHZvaWQge1xyXG4gICAgaWYgKGlkICE9IHVuZGVmaW5lZCAmJiBpZCAhPSBudWxsKSB7XHJcbiAgICAgIGlmICh0aGlzLmZvcm1FbmRwb2ludCAhPSB1bmRlZmluZWQgJiYgdGhpcy5mb3JtRW5kcG9pbnQgIT0gbnVsbCkge1xyXG4gICAgICAgIGlmICghcmVwb3J0SW5mb3JtYXRpb24pIHtcclxuICAgICAgICAgIHJlcG9ydEluZm9ybWF0aW9uID0gdGhpcy5yZXBvcnRzLmZpbmQoKHgpID0+IHgudWlkID09IGlkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBzYXZlU3ViamVjdDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcclxuICAgICAgICBsZXQgbW9kYWxTaXplID0gTW9kYWxTaXplRW51bS5YTWVkaXVtO1xyXG4gICAgICAgIGxldCBjb25mOiBEeW5hbWljRGlhbG9nQ29uZmlnID0ge1xyXG4gICAgICAgICAgZGF0YTogeyBzYXZlU3ViamVjdCwgZW1haWw6IHRoaXMudG9TZW5kRW1haWwgfSxcclxuICAgICAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgICAgICAgd2lkdGg6IG1vZGFsU2l6ZS53aWR0aCxcclxuICAgICAgICAgIGhlaWdodDogbW9kYWxTaXplLmhlaWdodCxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuX2RpYWxvZ1JlZiA9IHRoaXMuX3RzaU1vZGFsU2VydmljZS5vcGVuKFxyXG4gICAgICAgICAgVHNpU2VuZE1haWxDb21wb25lbnQsXHJcbiAgICAgICAgICBjb25mXHJcbiAgICAgICAgKTtcclxuICAgICAgICBzYXZlU3ViamVjdC5zdWJzY3JpYmUoKHZhbDogRW1haWxJbmZvcm1hdGlvbikgPT4ge1xyXG4gICAgICAgICAgaWYgKCF2YWwpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKCF2YWwudG9BZGRyZXNzKSB7XHJcbiAgICAgICAgICAgIHJldHVyblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKCF2YWwuc3ViamVjdCkge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxldCByZXBvcnRUb1ByaW50ID0gdGhpcy5fbmV3UmVwb3J0VG9QcmludChcclxuICAgICAgICAgICAgaWQsXHJcbiAgICAgICAgICAgIHJlcG9ydEluZm9ybWF0aW9uIS5yZXBvcnRUeXBlLFxyXG4gICAgICAgICAgICByZXBvcnRJbmZvcm1hdGlvbiEucmVzdEVuZHBvaW50XHJcbiAgICAgICAgICApXHJcbiAgICAgICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2VcclxuICAgICAgICAgICAgLmV4cG9ydFJlcG9ydEZpbGVUb1BkZihyZXBvcnRUb1ByaW50KVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG5leHQ6IGFzeW5jIChibG9iKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld0ZpbGUgPSBuZXcgRmlsZShbYmxvYl0sICdSZXBvcnQucGRmJywge1xyXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IGJsb2IudHlwZSxcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICBsZXQgYXR0YWNobWVudHM6IEZpbGVbXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICBhdHRhY2htZW50cy5wdXNoKG5ld0ZpbGUpXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuX21haWxpbmdTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAgICAgLnNlbmRNYWlsKFxyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsLnRvQWRkcmVzcyEsXHJcbiAgICAgICAgICAgICAgICAgICAgICB2YWwuc3ViamVjdCEsXHJcbiAgICAgICAgICAgICAgICAgICAgICB2YWwubWVzc2FnZSA/PyBcIlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICB2YWwuY2NBZGRyZXNzXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuaW5mbyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBMb2NhbGl6YXRpb25LZXlzLnNlbnRTdWNjZXNzRnVsbHlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2Uuc2hvd0Vycm9yTWVzc2FnZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZG93bmxvYWRpbmcgdGhlIFBERicsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5fZGlhbG9nUmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuX2Nsb3NlTW9kYWwodmFsKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5pbmZvTWVzc2FnZShcclxuICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19ub19kZWZhdWx0X3JlcG9ydF9mb3VuZCdcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2V4cG9ydFBkZihcclxuICAgIGlkOiBzdHJpbmcsXHJcbiAgICByZXBvcnRJbmZvcm1hdGlvbj86IFJlcG9ydFRlbXBsYXRlUmVzcG9uc2VcclxuICApOiB2b2lkIHtcclxuICAgIGlmIChpZCAhPSB1bmRlZmluZWQgJiYgaWQgIT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5mb3JtRW5kcG9pbnQgIT0gdW5kZWZpbmVkICYmIHRoaXMuZm9ybUVuZHBvaW50ICE9IG51bGwpIHtcclxuICAgICAgICBpZiAoIXJlcG9ydEluZm9ybWF0aW9uKSB7XHJcbiAgICAgICAgICByZXBvcnRJbmZvcm1hdGlvbiA9IHRoaXMucmVwb3J0cy5maW5kKCh4KSA9PiB4LnVpZCA9PSBpZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXJlcG9ydEluZm9ybWF0aW9uIHx8ICFyZXBvcnRJbmZvcm1hdGlvbi5yZXN0RW5kcG9pbnQpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCByZXBvcnRUb1ByaW50ID0gdGhpcy5fbmV3UmVwb3J0VG9QcmludChcclxuICAgICAgICAgIGlkLFxyXG4gICAgICAgICAgcmVwb3J0SW5mb3JtYXRpb24hLnJlcG9ydFR5cGUsXHJcbiAgICAgICAgICByZXBvcnRJbmZvcm1hdGlvbiEucmVzdEVuZHBvaW50XHJcbiAgICAgICAgKVxyXG5cclxuICAgICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2VcclxuICAgICAgICAgIC5leHBvcnRSZXBvcnRGaWxlVG9QZGYocmVwb3J0VG9QcmludClcclxuICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBuZXh0OiAoYmxvYikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xyXG4gICAgICAgICAgICAgICAgYS5ocmVmID0gdXJsO1xyXG4gICAgICAgICAgICAgICAgYS5kb3dubG9hZCA9ICdSZXBvcnQucGRmJztcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7XHJcbiAgICAgICAgICAgICAgICBhLmNsaWNrKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKTtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkb3dubG9hZGluZyB0aGUgUERGJywgZXJyb3IpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19yZWRpcmVjdGVkX3RvX3ByaW50X3JlcG9ydF9zdWNjZXNzZnVsbHknXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5pbmZvTWVzc2FnZShcclxuICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19ub19kZWZhdWx0X3JlcG9ydF9mb3VuZCdcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0Tm9tYnJlRmljaGllcigpIHtcclxuICAgIGlmICh0aGlzLmlkICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5fZmljaGllclNlcnZpY2VcclxuICAgICAgICAuR2V0Tm9tYnJlRmljaGllckpvaW50QnlJZCh0aGlzLmlkID8/IFwiXCIpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9ub21icmVEb2N1bWVudHNKb2ludHMgPSBkYXRhO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAocmVzcG9uc2U6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZS5zaG93RXJyb3JNZXNzYWdlKHJlc3BvbnNlKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBzaG93VXBsb2FkRGlhbG9nKCkge1xyXG5cclxuICAgIGNvbnN0IGNvbmYgPSB7XHJcbiAgICAgIGRhdGE6IHt9LFxyXG4gICAgICBzdHlsZUNsYXNzOiAnJyxcclxuICAgICAgd2lkdGg6IHRoaXMubW9kYWxTaXplIS53aWR0aCxcclxuICAgICAgaGVpZ2h0OiB0aGlzLm1vZGFsU2l6ZSEuaGVpZ2h0LFxyXG4gICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZWYgPSBhd2FpdCBvcGVuTW9kYWxVcGxvYWRHcmlkKHRoaXMuX2luamVjdG9yLCBjb25mKVxyXG5cclxuICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsPzogYW55KSA9PiB0aGlzLl9jbG9zZUZpbGVNYW5hZ2VDb21wb25lbnQoKSk7XHJcbiAgfVxyXG5cclxuICBvbkRyYWdPdmVyKGV2ZW50OiBEcmFnRXZlbnQpIHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICB9XHJcblxyXG4gIG9uRHJvcChldmVudDogRHJhZ0V2ZW50KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgY29uc3QgZmlsZXMgPSBldmVudC5kYXRhVHJhbnNmZXI/LmZpbGVzO1xyXG4gICAgaWYgKGZpbGVzICYmIGZpbGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgZmlsZSA9IGZpbGVzWzBdO1xyXG4gICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xyXG5cclxuICAgICAgcmVhZGVyLm9ubG9hZCA9IChlOiBQcm9ncmVzc0V2ZW50PEZpbGVSZWFkZXI+KSA9PiB7XHJcbiAgICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBlLnRhcmdldD8ucmVzdWx0IGFzIEFycmF5QnVmZmVyO1xyXG4gICAgICAgIGlmICghYXJyYXlCdWZmZXIpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgYmFzZTY0Q29udGVudCA9IHRoaXMuYXJyYXlCdWZmZXJUb0Jhc2U2NChhcnJheUJ1ZmZlcik7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpY2hpZXJUb1NlbmQgPSBuZXcgRmljaGllcigpO1xyXG4gICAgICAgIGZpY2hpZXJUb1NlbmQuZGF0ZUZpY2hpZXIgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIGZpY2hpZXJUb1NlbmQubm9tID0gZmlsZS5uYW1lO1xyXG4gICAgICAgIGZpY2hpZXJUb1NlbmQub2JqZXQgPSAnJztcclxuICAgICAgICBmaWNoaWVyVG9TZW5kLm5vbUZpY2hpZXJDb21wbGV0ID0gZmlsZS5uYW1lO1xyXG4gICAgICAgIGZpY2hpZXJUb1NlbmQuZGVzY3JpcHRpb24gPSAnJztcclxuICAgICAgICBmaWNoaWVyVG9TZW5kLmNvbnRlbnUgPSBiYXNlNjRDb250ZW50O1xyXG4gICAgICAgIGZpY2hpZXJUb1NlbmQudGFibGVMaWVlID0gdGhpcy5idXNpbmVzc0NsYXNzO1xyXG4gICAgICAgIGZpY2hpZXJUb1NlbmQucGtleSA9IHRoaXMuaWQ7XHJcbiAgICAgICAgZmljaGllclRvU2VuZC50eXBlRmljaGllciA9ICc0MzdDMDhENS1DMTY5LTQxNjctOEQzNy1GOEFDNkM5MDVFMjMnOyAvLyBUT0RPOiBNb21vXHJcblxyXG4gICAgICAgIHRoaXMuX2ZpY2hpZXJTZXJ2aWNlLmNyZWF0ZShmaWNoaWVyVG9TZW5kKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2Vzcyh0aGlzLmwoXCJGaWNoaWVyIGVucmVnaXN0csOpICFcIikpO1xyXG4gICAgICAgICAgICB0aGlzLm9uU2F2ZS5lbWl0KCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMubChcIkVycmV1ciBsb3JzIGRlIGzigJllbnJlZ2lzdHJlbWVudCAhXCIpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfTtcclxuXHJcbiAgICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihmaWxlKTtcclxuICAgIH1cclxuICB9XHJcbiAgc2hvd0RpYWxvZygpIHtcclxuICAgIHRoaXMuX29wZW5Nb2RhbCgpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2hvd0V4cG9ydEltcG9ydERpYWxvZygpIHtcclxuICAgIHRoaXMuX2RpYWxvZ1JlZiA9IGF3YWl0IG9wZW5NYW5hZ2VJbXBvcnRFeHBvcnRNb2RhbCh0aGlzLl9pbmplY3RvciwgdGhpcy5idXNpbmVzc0NsYXNzLCB0aGlzLmZvcm1OYW1lLCB0aGlzLnBhZ2VkUmVxdWVzdClcclxuICAgIHRoaXMuX2RpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsPzogYW55KSA9PlxyXG4gICAgICB0aGlzLl9jbG9zZU1vZGFsKHZhbCwgdHJ1ZSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcmVzZW50YXRpb25EZXNpZ25lckNvbmZpZygpIHtcclxuICAgIGlmICh0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLmlzRGVzaWduTW9kZSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuX2xheW91dEhlbHBlclNlcnZpY2UuaXNEZXNpZ25Nb2RlID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAodGhpcy5mcm9tVHNpRm9ybSkge1xyXG4gICAgICB0aGlzLnRvZ2dsZURlc2lnbk1vZGUuZW1pdCh0cnVlKTtcclxuICAgICAgdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5fZGVzaWduTW9kZUZvcm1TdWJqZWN0Lm5leHQodHJ1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLl9kZXNpZ25Nb2RlTGlzdFN1YmplY3QubmV4dCh0cnVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBwcml2YXRlIG1ldGhvZHNcclxuICBwcml2YXRlIF92aWV3UmVwb3J0KFxyXG4gICAgaWQ6IHN0cmluZyxcclxuICAgIHJlcG9ydEluZm9ybWF0aW9uPzogUmVwb3J0VGVtcGxhdGVSZXNwb25zZVxyXG4gICk6IHZvaWQge1xyXG4gICAgaWYgKGlkICE9IHVuZGVmaW5lZCAmJiBpZCAhPSBudWxsKSB7XHJcbiAgICAgIC8vIGNhc2UgdGhlcmUgaXMgZGVmYXVsdCByZXBvcnRcclxuICAgICAgaWYgKHRoaXMuZm9ybUVuZHBvaW50ICE9IHVuZGVmaW5lZCAmJiB0aGlzLmZvcm1FbmRwb2ludCAhPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKCFyZXBvcnRJbmZvcm1hdGlvbikge1xyXG4gICAgICAgICAgcmVwb3J0SW5mb3JtYXRpb24gPSB0aGlzLnJlcG9ydHMuZmluZCgoeCkgPT4geC51aWQgPT0gaWQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFyZXBvcnRJbmZvcm1hdGlvbiB8fCAhcmVwb3J0SW5mb3JtYXRpb24ucmVzdEVuZHBvaW50KSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2VcclxuICAgICAgICAgIC5hZGRSZXBvcnRUb1ByaW50KFxyXG4gICAgICAgICAgICB0aGlzLl9uZXdSZXBvcnRUb1ByaW50KFxyXG4gICAgICAgICAgICAgIGlkLFxyXG4gICAgICAgICAgICAgIHJlcG9ydEluZm9ybWF0aW9uPy5yZXBvcnRUeXBlLFxyXG4gICAgICAgICAgICAgIHJlcG9ydEluZm9ybWF0aW9uPy5yZXN0RW5kcG9pbnRcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoZGF0YSAhPSBudWxsICYmIGRhdGEgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlcG9ydFRvUHJpbnRJZCA9IGRhdGEudWlkO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZS5nZXRSZXBvcnRUZW1wbGF0ZUJ5SWQoaWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRlbmFudFVpZCA9IHRoaXMuaWRlbnRpdHlNYW5hZ2VyU2VydmljZS5wYXJzZU15QXV0aFRva2VuKCk/LnRlbmFudFVpZDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdXJsVmlld2VyID0gXCJcIlxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnJlcG9ydFR5cGUgPT09IFRzaVJlcG9ydFR5cGUuTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdXJsVmlld2VyID0gYCR7U2VnbWVudC5yZXBvcnRpbmdTZXJ2aWNlQmFzZX0vcmVwb3J0LXZpZXdlci8ke3RoaXMucmVwb3J0VG9QcmludElkfT8ke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnRlbmFudFVpZH09JHt0ZW5hbnRVaWR9YDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEucmVwb3J0VHlwZSA9PT0gVHNpUmVwb3J0VHlwZS5EYXNoYm9hcmQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHVybFZpZXdlciA9IGAke1NlZ21lbnQuYXBwQmFzZUhyZWZ9LyR7QXBwUm91dGVzLmFwcH0vJHtBcHBSb3V0ZXMuZGFzaGJvYXJkfS8ke01hbmFnZVJlcG9ydGluZ1JvdXRlcy5kYXNoYm9hcmRWaWV3ZXJ9PyR7cXVlcnlQYXJhbU5hbWVzQ29uc3QucmVwb3J0VG9QcmludH09JHt0aGlzLnJlcG9ydFRvUHJpbnRJZH0mJHtxdWVyeVBhcmFtTmFtZXNDb25zdC50ZW5hbnRVaWR9PSR7dGVuYW50VWlkfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLnJlcG9ydFR5cGUgPT09IFRzaVJlcG9ydFR5cGUuUlRGKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB1cmxWaWV3ZXIgPSBgJHtTZWdtZW50LnJlcG9ydGluZ1NlcnZpY2VCYXNlfS9tYWlsbWVyZ2UtcmVhZG9ubHltb2RlLyR7dGhpcy5yZXBvcnRUb1ByaW50SWR9PyR7cXVlcnlQYXJhbU5hbWVzQ29uc3QudGVuYW50VWlkfT0ke3RlbmFudFVpZH1gO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93Lm9wZW4odXJsVmlld2VyLCAnX2JsYW5rJyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfcmVkaXJlY3RlZF90b19wcmludF9yZXBvcnRfc3VjY2Vzc2Z1bGx5J1xyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4geyB9LFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICAgICAgICAgIH0sXHJcblxyXG4gICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4geyB9LFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIG5vIGRlZmF1bHQgcmVwb3J0XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5pbmZvTWVzc2FnZShcclxuICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19ub19kZWZhdWx0X3JlcG9ydF9mb3VuZCdcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX25ld1JlcG9ydFRvUHJpbnQoXHJcbiAgICB1aWQ6IHN0cmluZyxcclxuICAgIHJlcG9ydFR5cGU6IG51bWJlcixcclxuICAgIHJlc3RFbmRwb2ludD86IHN0cmluZyxcclxuICAgIG1vZHVsZT86IHN0cmluZyxcclxuICAgIG9yZGVyPzogbnVtYmVyLFxyXG4gICAgc2hvcnROYW1lPzogc3RyaW5nLFxyXG4gICAgZGlzcGxheT86IGJvb2xlYW5cclxuICApOiBSZXBvcnRUb1ByaW50IHtcclxuICAgIGxldCB0b2tlbiA9IHRoaXMuaWRlbnRpdHlNYW5hZ2VyU2VydmljZS5nZXRBdXRoVG9rZW4oKTtcclxuICAgIGxldCB1c2VybmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkID1cclxuICAgICAgdGhpcy5pZGVudGl0eU1hbmFnZXJTZXJ2aWNlLnBhcnNlTXlBdXRoVG9rZW4oKS5uYW1lO1xyXG4gICAgaWYgKHVzZXJuYW1lKSB7XHJcbiAgICAgIGlmICh1aWQgJiYgLyp0aGlzLm90aGVyRm9ybUVuZHBvaW50ICYmIHRoaXMub3RoZXJGb3JtTmFtZSAmJiovIHRva2VuKSB7XHJcbiAgICAgICAgbGV0IG5ld1JlcG9ydFRvUHJpbnQ6IFJlcG9ydFRvUHJpbnQgPSB7XHJcbiAgICAgICAgICByZXBvcnRUZW1wbGF0ZVVpZDogdWlkLFxyXG4gICAgICAgICAgcmVzdEVuZHBvaW50OiB0aGlzLmlzUmVwb3J0Rm9yRmljaGVcclxuICAgICAgICAgICAgPyB0aGlzLnJlcG9ydGluZ1NlcnZpY2UuaW5zZXJ0TmV3VWlkSW5SZXN0RW5kUG9pbnQocmVzdEVuZHBvaW50LCB0aGlzLmlkKSA/P1xyXG4gICAgICAgICAgICB0aGlzLmZvcm1FbmRwb2ludFxyXG4gICAgICAgICAgICA6IHRoaXMuZm9ybUVuZHBvaW50LFxyXG4gICAgICAgICAgcmVxdWVzdERhdGE6ICF0aGlzLmN1c3RvbVJlcG9ydGluZ01vZGUgPyB0aGlzLmZvcm1FbmRwb2ludEJvZHkgOiB0aGlzLnJlcXVlc3REYXRhLFxyXG4gICAgICAgICAgZm9ybU5hbWU6IHRoaXMuZm9ybU5hbWUsXHJcbiAgICAgICAgICByZXBvcnRUeXBlOiByZXBvcnRUeXBlLFxyXG4gICAgICAgICAgdXNlcm5hbWU6IHVzZXJuYW1lLFxyXG4gICAgICAgICAgdXNlclRva2VuOiByZXBvcnRUeXBlID09IFRzaVJlcG9ydFR5cGUuRGFzaGJvYXJkID8gdW5kZWZpbmVkIDogdG9rZW4sXHJcbiAgICAgICAgICBpc1BhZ2VkOiB0aGlzLmlzRm9ybUVuZHBvaW50UGFnZWQgPT0gdHJ1ZSA/IHRydWUgOiBmYWxzZSxcclxuICAgICAgICAgIGh0bWxGaWx0ZXJzVGV4dDogdGhpcy5maWx0ZXJzSHRtbFRlbXBsYXRlLFxyXG4gICAgICAgICAgb3B0aW9uYWxFbmRwb2ludHNKc29uOiB0aGlzLm9wdGlvbmFsRW5kcG9pbnRzLFxyXG4gICAgICAgICAgbW9kdWxlOiBtb2R1bGUsXHJcbiAgICAgICAgICBvcmRlcjogb3JkZXIsXHJcbiAgICAgICAgICBzaG9ydE5hbWU6IHNob3J0TmFtZSxcclxuICAgICAgICAgIGRpc3BsYXk6IGRpc3BsYXksXHJcbiAgICAgICAgICBodHRwTWV0aG9kVHlwZTogdGhpcy5nZXRIdHRwTWV0aG9kVHlwZSgpXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ld1JlcG9ydFRvUHJpbnQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgRXJyb3IoXHJcbiAgICAgICAgICAnc29tZSBvZiB0aGUgcmVxdWlyZWQgcHJvcGVydGllcyA6IHVzZXIgdG9rZW4sIGZvcm1OYW1lLCBmb3JtRW5kcG9pbnQgb3Igc2VsZWN0ZWRSZXBvcnQgaGF2ZSBub3QgYmVlbiBzZXQgISdcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBFcnJvcihcInByb3BlcnR5ICdVc2VyTmFtZSAnIG9mIGN1cnJlbnQgdXNlciBoYXZlIG5vdCBiZWVuIHNldCAhXCIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfb3Blbk1vZGFsKCkge1xyXG4gICAgbGV0IGNvbmY6IER5bmFtaWNEaWFsb2dDb25maWc7XHJcbiAgICBjb25mID0ge1xyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgb3RoZXJGb3JtTmFtZTogdGhpcy5mb3JtTmFtZSxcclxuICAgICAgICBvdGhlckZvcm1FbmRwb2ludDogdGhpcy5mb3JtRW5kcG9pbnQsXHJcbiAgICAgICAgZm9ybUVuZHBvaW50Qm9keTogdGhpcy5mb3JtRW5kcG9pbnRCb2R5LFxyXG4gICAgICAgIGlzRm9ybUVuZHBvaW50UGFnZWQ6IHRoaXMuaXNGb3JtRW5kcG9pbnRQYWdlZCxcclxuICAgICAgICBmaWx0ZXJzSHRtbFRlbXBsYXRlOiB0aGlzLmZpbHRlcnNIdG1sVGVtcGxhdGUsXHJcbiAgICAgICAgb3B0aW9uYWxFbmRwb2ludHM6IHRoaXMub3B0aW9uYWxFbmRwb2ludHMsXHJcbiAgICAgICAgYnVzaW5lc3NDbGFzczogdGhpcy5idXNpbmVzc0NsYXNzLFxyXG4gICAgICAgIHJlcG9ydERpc2NyaW1pbmF0b3I6IHRoaXMucmVwb3J0RGlzY3JpbWluYXRvcixcclxuICAgICAgICBpZDogdGhpcy5pZCxcclxuICAgICAgICByZXF1ZXN0RGF0YTogdGhpcy5yZXF1ZXN0RGF0YSxcclxuICAgICAgICBjdXN0b21SZXBvcnRpbmdNb2RlOiB0aGlzLmN1c3RvbVJlcG9ydGluZ01vZGUsXHJcbiAgICAgICAgaHR0cE1ldGhvZFR5cGU6IHRoaXMuZ2V0SHR0cE1ldGhvZFR5cGUoKSxcclxuICAgICAgfSxcclxuICAgICAgc3R5bGVDbGFzczogJycsXHJcbiAgICAgIHdpZHRoOiB0aGlzLm1vZGFsU2l6ZS53aWR0aCxcclxuICAgICAgaGVpZ2h0OiB0aGlzLm1vZGFsU2l6ZS5oZWlnaHQsXHJcbiAgICAgIG1heGltaXphYmxlOiB0cnVlLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLl9kaWFsb2dSZWYgPSBhd2FpdCBvcGVuTWFuYWdlUmVwb3J0aW5nQ29tcG9uZW50KHRoaXMuX2luamVjdG9yLCBjb25mKTtcclxuXHJcbiAgICB0aGlzLl9kaWFsb2dSZWYub25DbG9zZS5zdWJzY3JpYmUoKHZhbD86IGFueSkgPT4gdGhpcy5fY2xvc2VNb2RhbCh2YWwpKTtcclxuICB9XHJcblxyXG4gIGdldEh0dHBNZXRob2RUeXBlKCkge1xyXG4gICAgaWYgKHRoaXMuaXNSZXBvcnRGb3JGaWNoZSAmJiAhdGhpcy5jdXN0b21SZXBvcnRpbmdNb2RlKSB7XHJcbiAgICAgIHJldHVybiBIdHRwTWV0aG9kVHlwZS5HRVQ7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuaHR0cE1ldGhvZFR5cGUgJiYgdGhpcy5jdXN0b21SZXBvcnRpbmdNb2RlKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmh0dHBNZXRob2RUeXBlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIEh0dHBNZXRob2RUeXBlLlBPU1Q7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jbG9zZUZpbGVNYW5hZ2VDb21wb25lbnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNsb3NlZE1vZGFsRmlsZVVwbG9hZC5lbWl0KHRydWUpO1xyXG4gICAgdGhpcy5fZGlhbG9nUmVmPy5kZXN0cm95KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jbG9zZU1vZGFsKHZhbD86IGFueSwgcmVmcmVzaERhdGE6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgdGhpcy5yZWZyZXNoRGF0YS5lbWl0KHJlZnJlc2hEYXRhKTtcclxuICAgIHRoaXMuX2RpYWxvZ1JlZj8uZGVzdHJveSgpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxuXHJcbiAgb25SaWdodENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgIHRoaXMuX2dldEFsbFJlcG9ydHMoZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XHJcbiAgfVxyXG5cclxuICBoaWRlQ29udGV4dE1lbnUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNob3dDb250ZXh0TWVudSA9IGZhbHNlO1xyXG4gICAgdGhpcy5jb250ZXh0TWVudVBvc2l0aW9uID0geyB4OiAwLCB5OiAwIH07XHJcbiAgICAvLyB0aGlzLnJlcG9ydHMgPSBbXTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0Q29udGV4dE9wdGlvbihpdGVtOiBSZXBvcnRUZW1wbGF0ZVJlc3BvbnNlKTogdm9pZCB7XHJcbiAgICB0aGlzLl92aWV3UmVwb3J0KGl0ZW0udWlkKTtcclxuICAgIHRoaXMuaGlkZUNvbnRleHRNZW51KCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRSZXBvcnRzKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5yZXBvcnRzID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXHJcbiAgICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlLmdldFJlcG9ydHMoXHJcbiAgICAgICAgICB0aGlzLmZvcm1OYW1lID8/ICcnLFxyXG4gICAgICAgICAgdGhpcy5yZXBvcnREaXNjcmltaW5hdG9yXHJcbiAgICAgICAgKVxyXG4gICAgICApO1xyXG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgdGhpcy5oaWRlQ29udGV4dE1lbnUoKTtcclxuICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX2dldEFsbFJlcG9ydHMoY2xpY2tYOiBudW1iZXIsIGNsaWNrWTogbnVtYmVyKSB7XHJcbiAgICBhd2FpdCB0aGlzLmdldFJlcG9ydHMoKTtcclxuXHJcbiAgICBpZiAodGhpcy5yZXBvcnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgcmVjdCA9IHRoaXMud3JhcHBlclJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgICAgdGhpcy5jb250ZXh0TWVudVBvc2l0aW9uID0ge1xyXG4gICAgICAgIHg6IGNsaWNrWCAtIHJlY3QubGVmdCxcclxuICAgICAgICB5OiBjbGlja1kgLSByZWN0LnRvcCxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5zaG93Q29udGV4dE1lbnUgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zaG93Q29udGV4dE1lbnUgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcbiAgYXN5bmMgdmlld05vdGVzKCkge1xyXG4gICAgY29uc3QgcmVmID0gYXdhaXQgb3Blbk5vdGVzTGlzdCh0aGlzLl9pbmplY3RvcilcclxuICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsPzogYW55KSA9PiB0aGlzLl9jbG9zZU1vZGFsKHZhbCkpO1xyXG4gIH1cclxuXHJcbiAgdmlld0luZm8oZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuaWQgIT0gdW5kZWZpbmVkICYmIHRoaXMuaWQgIT0gbnVsbCkge1xyXG4gICAgICB0aGlzLnJlY29yZEluZm9Qb3B1cFNlcnZpY2VcclxuICAgICAgICAuZ2V0SW5mbyh0aGlzLmJ1c2luZXNzQ2xhc3MhLCB0aGlzLmlkKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICBhc3luYyAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgbW9kYWxTaXplID0gTW9kYWxTaXplRW51bS5FeHRyYUxhcmdlO1xyXG4gICAgICAgICAgICBsZXQgdGV4dCA9XHJcbiAgICAgICAgICAgICAgJ1VJRCA6ICAnICtcclxuICAgICAgICAgICAgICB0aGlzLmlkICtcclxuICAgICAgICAgICAgICAnPEJSPkNyZWF0ZWQgYnkgOiAgJyArXHJcbiAgICAgICAgICAgICAgZGF0YS5jcmVhdGlvblVzZXIgK1xyXG4gICAgICAgICAgICAgICc8QlI+TW9kaWZpZWQgYnkgOiAnICtcclxuICAgICAgICAgICAgICBkYXRhLm1vZGlmVXNlciArXHJcbiAgICAgICAgICAgICAgJzxCUj5DcmVhdGVkIG9uIDogJyArXHJcbiAgICAgICAgICAgICAgZGF0YS5kYXRlU2Fpc2llICtcclxuICAgICAgICAgICAgICAnPEJSPk1vZGlmaWVkIG9uIDogJyArXHJcbiAgICAgICAgICAgICAgZGF0YS5kYXRlTW9kaWY7XHJcblxyXG4gICAgICAgICAgICBsZXQgY29uZjogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICBVaWQ6IHRoaXMuaWQsXHJcbiAgICAgICAgICAgICAgICBjcmVhdGlvblVzZXI6IGRhdGEuY3JlYXRpb25Vc2VyLFxyXG4gICAgICAgICAgICAgICAgbW9kaWZVc2VyOiBkYXRhLm1vZGlmVXNlcixcclxuICAgICAgICAgICAgICAgIGRhdGVTYWlzaWU6IGRhdGEuZGF0ZVNhaXNpZSxcclxuICAgICAgICAgICAgICAgIGRhdGVNb2RpZjogZGF0YS5kYXRlTW9kaWYsXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICB3aWR0aDogJzkwcmVtJyxcclxuICAgICAgICAgICAgICBoZWlnaHQ6ICc4MHJlbScsXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9kaWFsb2dSZWYgPSBhd2FpdCBvcGVuVHNpUG9wdXBUZXh0Vmlld2VyQ29tcG9uZW50KHRoaXMuX2luamVjdG9yLCBjb25mKVxyXG5cclxuICAgICAgICAgICAgdGhpcy5fZGlhbG9nUmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgdGhpcy5fY2xvc2VNb2RhbCh2YWwpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG5cclxuICBhcnJheUJ1ZmZlclRvQmFzZTY0KGJ1ZmZlcjogQXJyYXlCdWZmZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IGJpbmFyeSA9ICcnO1xyXG4gICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xyXG4gICAgY29uc3QgbGVuID0gYnl0ZXMuYnl0ZUxlbmd0aDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgYmluYXJ5ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJ0b2EoYmluYXJ5KTtcclxuICB9XHJcblxyXG4gIGhpZGUodmFsPzogYW55KSB7XHJcbiAgICBpZiAodGhpcy5fZGlhbG9nUmVmICE9IG51bGwgJiYgdGhpcy5fZGlhbG9nUmVmICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICBpZiAodmFsID09IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5fZGlhbG9nUmVmLmRlc3Ryb3koKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLl9kaWFsb2dSZWYuY2xvc2UodmFsKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbChrZXk6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5sb2NhbGl6ZSAhPSBudWxsXHJcbiAgICAgICYmIHRoaXMubG9jYWxpemUgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmxvY2FsaXplLnRyYW5zZm9ybShrZXkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGtleTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImZsZXggZ2FwLTIgbXgtMlwiPlxyXG4gIDxkaXZcclxuICAgICpuZ0lmPVwiKGZvcm1FbmRwb2ludCB8fCBidXNpbmVzc0NsYXNzKSAmJiBlbmFibGVUb1ByaW50UmVwb3J0XCJcclxuICAgIHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cIm1hbmFnZV9yZXBvcnRzX2J1dHRvblwiXHJcbiAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxyXG4gID5cclxuICAgIDxUc2ktQnV0dG9uXHJcbiAgICAgIFtkaXNhYmxlZF09XCJpc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZFwiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBbaWNvblNyY109XCInLi9hc3NldHMvaWNvbnMvaWNvbi1wcmludGVyLWdyb3VwLXdoaXRlLnBuZydcIlxyXG4gICAgICBbaWNvbldpZHRoXT1cIjIwXCJcclxuICAgICAgW3Rvb2x0aXBUZXh0XT1cIidzaGFyZWRfcmVwb3J0aW5nX21hbmFnZV9yZXBvcnRzJ1wiXHJcbiAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcclxuICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXNlY29uZGFyeSBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCJcclxuICAgICAgKGNsaWNrKT1cInNob3dEaWFsb2coKVwiXHJcbiAgICA+XHJcbiAgICA8L1RzaS1CdXR0b24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXZcclxuICAgICpuZ0lmPVwiKGZvcm1FbmRwb2ludCB8fCBidXNpbmVzc0NsYXNzKSAmJiBlbmFibGVUb1ByaW50UmVwb3J0XCJcclxuICAgIHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cInByaW50X2RlZmF1bHRfcmVwb3J0X2J1dHRvblwiXHJcbiAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgYnRuLXdyYXBwZXJcIlxyXG4gICAgI3dyYXBwZXJcclxuICA+XHJcbiAgICA8VHNpLUJ1dHRvblxyXG4gICAgICBbZGlzYWJsZWRdPVwiaXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWRcIlxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgaWNvbj1cInBpIHBpLXByaW50IHAtYnV0dG9uLWljb24gcC1idXR0b24taWNvbi1sZWZ0XCJcclxuICAgICAgW3Rvb2x0aXBUZXh0XT1cIidzaGFyZWRfcmVwb3J0aW5nX3JpZ2h0Q2xpY2snXCJcclxuICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb25cIlxyXG4gICAgICBzdHlsZUNsYXNzPVwicC1idXR0b24tc2Vjb25kYXJ5IGhvdmVyOnNoYWRvdy02IGgtMnJlbSBwLWJ1dHRvbi1pY29uLW9ubHlcIlxyXG4gICAgICAoY2xpY2spPVwib25QcmludERlZmF1bHQoJGV2ZW50KVwiXHJcbiAgICAgIChyaWdodENsaWNrKT1cIm9uUmlnaHRDbGljaygkZXZlbnQpXCJcclxuICAgID5cclxuICAgIDwvVHNpLUJ1dHRvbj5cclxuICAgIDwhLS0gYHNoYXJlZF9yZXBvcnRpbmdfcHJpbnRfcmVwb3J0YCBrZXkgZm9yIGBJbXByaW1lcmAgdGV4dCAgKHJlcGxhY2UgaXQgYXMgdmFsdWUgb3IgdG9vbHRpcCBpZiBuZWVkIGl0KSAtLT5cclxuXHJcbiAgICA8ZGl2XHJcbiAgICAgICpuZ0lmPVwic2hvd0NvbnRleHRNZW51ICYmIGVuYWJsZVRvUHJpbnRSZXBvcnRcIlxyXG4gICAgICBjbGFzcz1cImNvbnRleHQtbWVudVwiXHJcbiAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAndG9wLnB4JzogY29udGV4dE1lbnVQb3NpdGlvbi55LFxyXG4gICAgICAgICdsZWZ0LnB4JzogY29udGV4dE1lbnVQb3NpdGlvbi54XHJcbiAgICAgIH1cIlxyXG4gICAgICAobW91c2VsZWF2ZSk9XCJoaWRlQ29udGV4dE1lbnUoKVwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICAqbmdGb3I9XCJsZXQgcmVwb3J0IG9mIHJlcG9ydHNcIlxyXG4gICAgICAgIGNsYXNzPVwibWVudS1pdGVtXCJcclxuICAgICAgICAoY2xpY2spPVwib25TZWxlY3RDb250ZXh0T3B0aW9uKHJlcG9ydClcIlxyXG4gICAgICA+XHJcbiAgICAgICAge3sgcmVwb3J0Lm5hbWUgfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdlxyXG4gICAgKm5nSWY9XCJidXNpbmVzc0NsYXNzICYmIHNob3dVcGxvYWRCdXR0b25cIlxyXG4gICAgcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlPVwiYXR0YWNobWVudF9idXR0b25cIlxyXG4gICAgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCJcclxuICA+XHJcbiAgICA8VHNpLUJ1dHRvblxyXG4gICAgICBbZGlzYWJsZWRdPVwiaXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWRcIlxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgaWNvbj1cInBpIHBpLXBhcGVyY2xpcCBwLWJ1dHRvbi1pY29uXCJcclxuICAgICAgW3Rvb2x0aXBUZXh0XT1cIidzaGFyZWRfYWN0aW9uc19hdHRhY2htZW50J1wiXHJcbiAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcclxuICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXNlY29uZGFyeSBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCJcclxuICAgICAgKGNsaWNrKT1cInNob3dVcGxvYWREaWFsb2coKVwiXHJcbiAgICAgIChkcmFnb3Zlcik9XCJvbkRyYWdPdmVyKCRldmVudClcIlxyXG4gICAgICAoZHJvcCk9XCJvbkRyb3AoJGV2ZW50KVwiXHJcbiAgICA+XHJcbiAgICA8L1RzaS1CdXR0b24+XHJcbiAgICA8c3BhbiAqbmdJZj1cIm5vbWJyZURvY3VtZW50c0pvaW50cyAmJiBub21icmVEb2N1bWVudHNKb2ludHMgPiAwXCIgY2xhc3M9XCJjdXN0b20tYmFkZ2VcIj5cclxuICAgICAge3sgbm9tYnJlRG9jdW1lbnRzSm9pbnRzIH19XHJcbiAgICA8L3NwYW4+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXZcclxuICAgICpuZ0lmPVwiKGZvcm1FbmRwb2ludCB8fCBidXNpbmVzc0NsYXNzKSAmJiBlbmFibGVUb1ByaW50UmVwb3J0XCJcclxuICAgIHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cInNlbmRfcmVwb3J0X2J5X2VtYWlsX2J1dHRvblwiXHJcbiAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxyXG4gID5cclxuICAgIDxUc2ktQnV0dG9uXHJcbiAgICAgIFtkaXNhYmxlZF09XCJpc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZFwiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBpY29uPVwicGkgcGktc2VuZCBwLWJ1dHRvbi1pY29uIHAtYnV0dG9uLWljb24tbGVmdFwiXHJcbiAgICAgIFt0b29sdGlwVGV4dF09XCInc2hhcmVkX3JlcG9ydGluZ19zZW5kX21haWwnXCJcclxuICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb25cIlxyXG4gICAgICBzdHlsZUNsYXNzPVwicC1idXR0b24tc2Vjb25kYXJ5IGhvdmVyOnNoYWRvdy02IGgtMnJlbSBwLWJ1dHRvbi1pY29uLW9ubHlcIlxyXG4gICAgICAoY2xpY2spPVwib25TZW5kUGRmKCRldmVudClcIlxyXG4gICAgPlxyXG4gICAgPC9Uc2ktQnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXZcclxuICAgICpuZ0lmPVwiYnVzaW5lc3NDbGFzcyAmJiBzaG93SW1wb3J0RXhwb3J0QnV0dG9uXCJcclxuICAgIHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cImltcG9ydF9leHBvcnRfYnV0dG9uXCJcclxuICAgIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiXHJcbiAgPlxyXG4gICAgPFRzaS1CdXR0b25cclxuICAgICAgW2Rpc2FibGVkXT1cImlzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGljb249XCJwaSBwaS1hcnJvdy1yaWdodC1hcnJvdy1sZWZ0IHAtYnV0dG9uLWljb25cIlxyXG4gICAgICBbdG9vbHRpcFRleHRdPVwiJ3NoYXJlZF9yZXBvcnRpbmdfbWFuYWdlX2V4cG9ydF9pbXBvcnQnXCJcclxuICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb25cIlxyXG4gICAgICBzdHlsZUNsYXNzPVwicC1idXR0b24tc3VjY2VzcyBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCJcclxuICAgICAgKGNsaWNrKT1cInNob3dFeHBvcnRJbXBvcnREaWFsb2coKVwiXHJcbiAgICA+XHJcbiAgICA8L1RzaS1CdXR0b24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXZcclxuICAgICpuZ0lmPVwic2hvd05vdGVCdXR0b25cIlxyXG4gICAgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCJcclxuICAgIHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cInNoYXJlZF9zaG93X25vdGVzX2J1dHRvblwiXHJcbiAgPlxyXG4gICAgPFRzaS1CdXR0b25cclxuICAgICAgaWQ9XCJ7eyBjb25maWdNb2RlQnV0dG9uSWQgfX1cIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiaXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWRcIlxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgaWNvbj1cInBpIHBpLWNvbW1lbnQgcC1idXR0b24taWNvbiBwLWJ1dHRvbi1pY29uLWxlZnRcIlxyXG4gICAgICBbdG9vbHRpcFRleHRdPVwiJ3NoYXJlZF90c2lfY29tcG9uZW50X2dlc3Rpb25fZGVzX25vdGVzJ1wiXHJcbiAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcclxuICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXdhcm5pbmcgaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uLWljb24tb25seSB0ZXh0LXdoaXRlXCJcclxuICAgICAgKGNsaWNrKT1cInZpZXdOb3RlcygpXCJcclxuICAgID5cclxuICAgIDwvVHNpLUJ1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cInNob3dJbmZvQnV0dG9uXCJcclxuICAgIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiXHJcbiAgICBwcmVzZW50YXRpb25EZXNpZ25lckJhc2U9XCJzaGFyZWRfc2hvd19pbmZvX2J1dHRvblwiXHJcbiAgPlxyXG4gICAgPFRzaS1CdXR0b25cclxuICAgICAgaWQ9XCInc2hvdy1pbmZvLWJ1dHRvbidcIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiaXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWRcIlxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgaWNvbj1cInBpIHBpLWluZm8gcC1idXR0b24taWNvbiBwLWJ1dHRvbi1pY29uLWxlZnRcIlxyXG4gICAgICBbdG9vbHRpcFRleHRdPVwiJ3NoYXJlZF9hY3Rpb25zX2luZm8nXCJcclxuICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb25cIlxyXG4gICAgICBzdHlsZUNsYXNzPVwicC1idXR0b24taW5mbyBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5IHRleHQtd2hpdGVcIlxyXG4gICAgICAoY2xpY2spPVwidmlld0luZm8oJGV2ZW50KVwiXHJcbiAgICA+XHJcbiAgICA8L1RzaS1CdXR0b24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXZcclxuICAgICpuZ0lmPVwic2hvd1ByZXNlbnRhdGlvbkRlc2lnbmVyQ29uZmlnQnV0dG9uXCJcclxuICAgIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiXHJcbiAgPlxyXG4gICAgPFRzaS1CdXR0b25cclxuICAgICAgaWQ9XCJ7eyBjb25maWdNb2RlQnV0dG9uSWQgfX1cIlxyXG4gICAgICBbZGlzYWJsZWRdPVwiaXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWRcIlxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgaWNvbj1cInBpIHBpLWV5ZSBwLWJ1dHRvbi1pY29uIHAtYnV0dG9uLWljb24tbGVmdFwiXHJcbiAgICAgIFt0b29sdGlwVGV4dF09XCInc2hhcmVkX3RzaV9jb21wb25lbnRfY29uZmlnX3Nob3dfaGlkZSdcIlxyXG4gICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvblwiXHJcbiAgICAgIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1zdWNjZXNzIGhvdmVyOnNoYWRvdy02IGgtMnJlbSBwLWJ1dHRvbi1pY29uLW9ubHlcIlxyXG4gICAgICAoY2xpY2spPVwicHJlc2VudGF0aW9uRGVzaWduZXJDb25maWcoKVwiXHJcbiAgICA+XHJcbiAgICA8L1RzaS1CdXR0b24+XHJcbiAgPC9kaXY+XHJcblxyXG48L2Rpdj5cclxuXHJcbjwhLS0gPGRpdiAqbmdJZj1cInNob3dDb250ZXh0TWVudVwiXHJcbiAgY2xhc3M9XCJjb250ZXh0LW1lbnVcIlxyXG4gIFtuZ1N0eWxlXT1cIntcclxuICAgICd0b3AucHgnOiBjb250ZXh0TWVudVBvc2l0aW9uLnksXHJcbiAgICAnbGVmdC5weCc6IGNvbnRleHRNZW51UG9zaXRpb24ueFxyXG4gIH1cIlxyXG4gIChtb3VzZWxlYXZlKT1cImhpZGVDb250ZXh0TWVudSgpXCI+XHJcbiAgPGRpdiAqbmdGb3I9XCJsZXQgcmVwb3J0IG9mIHJlcG9ydHNcIlxyXG4gICAgY2xhc3M9XCJtZW51LWl0ZW1cIlxyXG4gICAgKGNsaWNrKT1cIm9uU2VsZWN0Q29udGV4dE9wdGlvbihyZXBvcnQpXCI+XHJcbiAgICB7e3JlcG9ydC5uYW1lfX1cclxuICA8L2Rpdj5cclxuPC9kaXY+IC0tPlxyXG4iXX0=
675
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0aW5nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9yZXBvcnRpbmcvcmVwb3J0aW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RzaS1zaGFyZWQtdWkvc3JjL2xpYi90c2ktY29tcG9uZW50cy9yZXBvcnRpbmcvcmVwb3J0aW5nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekUsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQXVCLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlJLE9BQU8sRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDM0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTNFLE9BQU8sRUFBNkMsT0FBTyxFQUE4QixNQUFNLGNBQWMsQ0FBQztBQUU5RyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFPekQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLDRCQUE0QixFQUFFLG1CQUFtQixFQUFFLGFBQWEsRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBR3JMLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIs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SSxFQUFFLFVBQVUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwU3RhdHVzQ29kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFbnZpcm9ubWVudEluamVjdG9yLCBFdmVudEVtaXR0ZXIsIGluamVjdCwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBmaXJzdFZhbHVlRnJvbSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBUb29sdGlwUG9zaXRpb24gfSBmcm9tICcuLi8uLi9lbnVtcy90b29sdGlwUG9zaXRpb24uZW51bSc7XHJcbmltcG9ydCB7IFNlZ21lbnQgfSBmcm9tICcuLi8uLi9lbmQtcG9pbnRzJztcclxuaW1wb3J0IHsgTW9kYWxTaXplRW51bSwgSHR0cE1ldGhvZFR5cGUsIFRzaVJlcG9ydFR5cGUgfSBmcm9tICcuLi8uLi9lbnVtcyc7XHJcbmltcG9ydCB7IElNb2RhbFNpemUsIElQYWdlZFJlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgT3B0aW9uYWxFbmRwb2ludHMsIFJlcG9ydFRlbXBsYXRlUmVzcG9uc2UsIEZpY2hpZXIsIFJlcG9ydFRvUHJpbnQsIFNlYXJjaEZpZWxkIH0gZnJvbSAnLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgRmljaGllclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9maWNoaWVyL2ZpY2hpZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IHF1ZXJ5UGFyYW1OYW1lc0NvbnN0IH0gZnJvbSAnLi4vLi4vY29uc3RzL3F1ZXJ5UGFyYW1OYW1lcy5jb25zdCc7XHJcbmltcG9ydCB7IExvY2FsaXplUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL2xvY2FsaXplLnBpcGUnO1xyXG5pbXBvcnQgeyBMYXlvdXRIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbGF5b3V0L2xheW91dC1oZWxwZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFJlY29yZEluZm9Qb3B1cFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZWNvcmQtaW5mby1wb3B1cC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVHNpTWVzc2FnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmljYXRpb24vdHNpLW1lc3NhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFRzaU5vdGlmaWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmljYXRpb24vdHNpLW5vdGlmaWNhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSWRlbnRpdHlNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2F1dGhvcml6YXRpb24vaWRlbnRpdHktbWFuYWdlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVwb3J0aW5nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlcG9ydGluZy9yZXBvcnRpbmcuc2VydmljZSc7XHJcbmltcG9ydCB7IG9wZW5NYW5hZ2VJbXBvcnRFeHBvcnRNb2RhbCwgb3Blbk1hbmFnZVJlcG9ydGluZ0NvbXBvbmVudCwgb3Blbk1vZGFsVXBsb2FkR3JpZCwgb3Blbk5vdGVzTGlzdCwgb3BlblRzaVBvcHVwVGV4dFZpZXdlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucy9tb2RhbC1vcGVuLmZ1bmN0aW9uJztcclxuaW1wb3J0IHsgRHluYW1pY0RpYWxvZ0NvbmZpZywgRHluYW1pY0RpYWxvZ1JlZiB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XHJcbmltcG9ydCB7IEVycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vdGlmaWNhdGlvbi9lcnJvci1yZXNwb25zZS1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBcHBSb3V0ZXMgfSBmcm9tICcuLi8uLi9yb3V0ZXMvYXBwLnJvdXRlcyc7XHJcbmltcG9ydCB7IE1hbmFnZVJlcG9ydGluZ1JvdXRlcyB9IGZyb20gJy4uLy4uL3JvdXRlcy9tYW5hZ2UtcmVwb3J0aW5nLnJvdXRlcyc7XHJcbmltcG9ydCB7IFRzaVNlbmRNYWlsQ29tcG9uZW50IH0gZnJvbSAnLi4vdHNpLXNlbmQtbWFpbC90c2ktc2VuZC1tYWlsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IExvY2FsaXphdGlvbktleXMgfSBmcm9tICcuLi8uLi9jb25zdHMvbG9jYWxpemF0aW9uLWtleSc7XHJcbmltcG9ydCB7IEVtYWlsSW5mb3JtYXRpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvYXBwbGljYXRpb24vY29uZmlndXJhdGlvbi9lbWFpbC1pbmZvcm1hdGlvbic7XHJcbmltcG9ydCB7IE1haWxpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXBwbGljYXRpb24vbWFpbGluZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVwb3J0aW5nSW5mb3JtYXRpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvcmVwb3J0aW5nL3JlcG9ydGluZy1pbmZvcm1hdGlvbic7XHJcbmltcG9ydCB7IFRzaU1vZGFsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21vZGFsL3RzaS1tb2RhbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSW5wdXRSZWdpc3RyeVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy92YWxpZGF0aW9uL2lucHV0LXJlZ2lzdHJ5LnNlcnZpY2UnO1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC1yZXBvcnRpbmcnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZXBvcnRpbmcuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3JlcG9ydGluZy5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmVwb3J0aW5nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIC8vI3JlZ2lvbiBwcm9wZXJ0aWVzXHJcbiAgcmVwb3J0VG9QcmludElkOiBudW1iZXIgfCB1bmRlZmluZWQ7XHJcbiAgdG9TZW5kRW1haWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBwdWJsaWMgbG9jYWxpemU/ID0gaW5qZWN0KExvY2FsaXplUGlwZSlcclxuICBwcml2YXRlIHJlYWRvbmx5IGVycm9yTWVzc2FnZUtleTogc3RyaW5nID0gJ3NoYXJlZF9yZXBvcnRpbmdfZXJyb3Jfb2NjdXJlZCc7XHJcbiAgbW9kYWxTaXplOiBJTW9kYWxTaXplID0gTW9kYWxTaXplRW51bS5MYXJnZTtcclxuICBwcml2YXRlIF9kaWFsb2dSZWY/OiBEeW5hbWljRGlhbG9nUmVmO1xyXG4gIHByaXZhdGUgX3JlcG9ydERpc2NyaW1pbmF0b3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICAvLyBwYXJhbWV0cmU6IFBhcmFtZXRyZXNBcHBsaWNhdGlvblBhaWUgPSBuZXcgUGFyYW1ldHJlc0FwcGxpY2F0aW9uUGFpZSgpO1xyXG4gIEBJbnB1dCgpIHNob3dJbXBvcnRFeHBvcnRCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNob3dOb3RlQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBzaG93SW5mb0J1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2hvd1VwbG9hZEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIHNob3dQcmVzZW50YXRpb25EZXNpZ25lckNvbmZpZ0J1dHRvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHJpdmF0ZSBfaXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgaXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBzZXQgaXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2lzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkID0gdmFsdWU7XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG4gIEBPdXRwdXQoKSBvblNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAvLyNyZWdpb24gSW5wdXQgcHJvcGVydGllc1xyXG4gIEBJbnB1dCgpIGZvcm1OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7IC8vZm9ybUlkZW50aWZpZXJcclxuICBASW5wdXQoKSBmb3JtRW5kcG9pbnQ6IHN0cmluZyB8IHVuZGVmaW5lZDsgLy89IGAke0dlc3Rpb25Db21tZXJjaWFsZVNlZ21lbnRzLmZhY3R1cmVWZW50ZX0vMTY1ZWM1ZmQtNGQzNC00NTQ2LWFlMTUtMDA0NGU3MDhiOWQ5YDtcclxuICBASW5wdXQoKSBmb3JtRW5kcG9pbnRCb2R5OiBzdHJpbmcgfCB1bmRlZmluZWQ7IC8vZm9ybUlkZW50aWZpZXJcclxuICBASW5wdXQoKSBpc0Zvcm1FbmRwb2ludFBhZ2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZmlsdGVyc0h0bWxUZW1wbGF0ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpIG9wdGlvbmFsRW5kcG9pbnRzPzogT3B0aW9uYWxFbmRwb2ludHM7XHJcbiAgQElucHV0KCkgYnVzaW5lc3NDbGFzcz86IHN0cmluZztcclxuICBASW5wdXQoKSBjdWRDb21wb25lbnQ6IGFueTtcclxuICBASW5wdXQoKSBodHRwTWV0aG9kVHlwZT86IHN0cmluZ1xyXG4gIEBJbnB1dCgpIHJlcXVlc3REYXRhPzogYW55O1xyXG4gIEBJbnB1dCgpIGN1c3RvbVJlcG9ydGluZ01vZGU/OiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHBhZ2VkUmVxdWVzdD86IElQYWdlZFJlcXVlc3Q7XHJcbiAgQElucHV0KClcclxuICBnZXQgcmVwb3J0RGlzY3JpbWluYXRvcigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlcG9ydERpc2NyaW1pbmF0b3I7XHJcbiAgfVxyXG5cclxuICBzZXQgcmVwb3J0RGlzY3JpbWluYXRvcih2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9yZXBvcnREaXNjcmltaW5hdG9yID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG4gIHB1YmxpYyBfbm9tYnJlRG9jdW1lbnRzSm9pbnRzOiBudW1iZXIgPSAwO1xyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IG5vbWJyZURvY3VtZW50c0pvaW50cygpOiBudW1iZXIgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuX25vbWJyZURvY3VtZW50c0pvaW50cztcclxuICB9XHJcblxyXG4gIHNldCBub21icmVEb2N1bWVudHNKb2ludHModmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCkge1xyXG4gICAgaWYgKHZhbHVlID09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLl9ub21icmVEb2N1bWVudHNKb2ludHMgPSAwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fbm9tYnJlRG9jdW1lbnRzSm9pbnRzID0gdmFsdWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBpZCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcbiAgICB0aGlzLl9pZCA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gdGhpcy5faWQ7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBjb25maWdNb2RlQnV0dG9uSWQ6IHN0cmluZyA9ICdzaG93LWhpZGUtY29uZmlnLWJ1dHRvbic7XHJcblxyXG4gIHByaXZhdGUgX3NlbGVjdGVkSXRlbVVpZHM6IEFycmF5PGFueT4gPSBbXTtcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgc2VsZWN0ZWRJdGVtVWlkcyhsaXN0VWlkczogQXJyYXk8YW55PltdKSB7XHJcbiAgICB0aGlzLl9zZWxlY3RlZEl0ZW1VaWRzID0gbGlzdFVpZHM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkSXRlbVVpZHMoKTogQXJyYXk8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJdGVtVWlkcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Zyb21Uc2lGb3JtOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBmcm9tVHNpRm9ybSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fZnJvbVRzaUZvcm0gPSB2YWx1ZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBmcm9tVHNpRm9ybSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9mcm9tVHNpRm9ybVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY3VzdG9tU2VuZE1haWxNb2RlOiBib29sZWFuID0gZmFsc2VcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgY3VzdG9tU2VuZE1haWxNb2RlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9jdXN0b21TZW5kTWFpbE1vZGUgPSB2YWx1ZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjdXN0b21TZW5kTWFpbE1vZGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fY3VzdG9tU2VuZE1haWxNb2RlXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZXBvcnRpbmdJbmZvcm1hdGlvbj86IFJlcG9ydGluZ0luZm9ybWF0aW9uXHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCByZXBvcnRpbmdJbmZvcm1hdGlvbih2YWx1ZTogUmVwb3J0aW5nSW5mb3JtYXRpb24gfCB1bmRlZmluZWQpIHtcclxuICAgIHRoaXMuX3JlcG9ydGluZ0luZm9ybWF0aW9uID0gdmFsdWVcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgcmVwb3J0aW5nSW5mb3JtYXRpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcmVwb3J0aW5nSW5mb3JtYXRpb25cclxuICB9XHJcblxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gT3V0cHV0IHByb3BlcnRpZXNcclxuICBAT3V0cHV0KCkgcmVmcmVzaERhdGE6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICBAT3V0cHV0KCkgY2xvc2VkTW9kYWxGaWxlVXBsb2FkOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgQE91dHB1dCgpIHRvZ2dsZURlc2lnbk1vZGU6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9XHJcbiAgICBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIEBWaWV3Q2hpbGQoJ3dyYXBwZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcclxuICB3cmFwcGVyUmVmITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcblxyXG4gIHJlcG9ydHM6IFJlcG9ydFRlbXBsYXRlUmVzcG9uc2VbXSA9IFtdO1xyXG4gIHNob3dDb250ZXh0TWVudSA9IGZhbHNlO1xyXG4gIGNvbnRleHRNZW51UG9zaXRpb24gPSB7IHg6IDAsIHk6IDAgfTtcclxuXHJcbiAgdG9vbHRpcFBvc2l0aW9uID0gVG9vbHRpcFBvc2l0aW9uLlRvcDtcclxuXHJcbiAgcHVibGljIGdldCBlbmFibGVUb1ByaW50UmVwb3J0KCl7XHJcbiAgICByZXR1cm4gIXRoaXMuZnJvbVRzaUZvcm0gfHwgdGhpcy5faW5wdXRSZWdpc3RyeVNlcnZpY2UuZ2V0QWxsKCkuZXZlcnkoeCA9PiB7XHJcbiAgICAgIHJldHVybiAheC5pc0RpcnR5XHJcbiAgICB9KVxyXG4gIH0gXHJcblxyXG4gIGdldCBpc1JlcG9ydEZvckZpY2hlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICF0aGlzLmZvcm1FbmRwb2ludD8uaW5jbHVkZXMoJ2dldGFsbHBhZ2VkJyk7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gY3RvclxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfdHNpTW9kYWxTZXJ2aWNlOiBUc2lNb2RhbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlcG9ydGluZ1NlcnZpY2U6IFJlcG9ydGluZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIGlkZW50aXR5TWFuYWdlclNlcnZpY2U6IElkZW50aXR5TWFuYWdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IFRzaU5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBUc2lNZXNzYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVjb3JkSW5mb1BvcHVwU2VydmljZTogUmVjb3JkSW5mb1BvcHVwU2VydmljZSxcclxuICAgIHByaXZhdGUgX2Vycm9yUmVzcG9uc2VNYW5hZ2VyU2VydmljZTogRXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbGF5b3V0SGVscGVyU2VydmljZTogTGF5b3V0SGVscGVyU2VydmljZSxcclxuICAgIHB1YmxpYyBfZmljaGllclNlcnZpY2U6IEZpY2hpZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEVudmlyb25tZW50SW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIF9tYWlsaW5nU2VydmljZTogTWFpbGluZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9pbnB1dFJlZ2lzdHJ5U2VydmljZSA6IElucHV0UmVnaXN0cnlTZXJ2aWNlXHJcbiAgKSB7IH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vaGFuZGxlIExpZmVjeWNsZSBIb29rc1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBoYW5kbGUgZXZlbnRzXHJcbiAgb25QcmludERlZmF1bHQoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZm9ybU5hbWUpIHtcclxuICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgICAgLmdldERlZmF1bHRSZXBvcnQodGhpcy5mb3JtTmFtZSwgdGhpcy5yZXBvcnREaXNjcmltaW5hdG9yKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKGRhdGE6IFJlcG9ydFRlbXBsYXRlUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICAgICAgICAgIC8vIGxldCBkZWZhdWx0UmVwb3J0SWQ6IHN0cmluZyA9IGRhdGE7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdSZXBvcnQoZGF0YT8udWlkLCBkYXRhKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKHJlc3BvbnNlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IEh0dHBTdGF0dXNDb2RlLk5vdEZvdW5kKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5pbmZvTWVzc2FnZShcclxuICAgICAgICAgICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX25vX2RlZmF1bHRfcmVwb3J0X2ZvdW5kJ1xyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkV4cG9ydFBkZihldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5mb3JtTmFtZSkge1xyXG4gICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2UuZ2V0RGVmYXVsdFJlcG9ydCh0aGlzLmZvcm1OYW1lKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcclxuICAgICAgICAgIC8vIGxldCBkZWZhdWx0UmVwb3J0SWQ6IHN0cmluZyA9IGRhdGE7XHJcbiAgICAgICAgICB0aGlzLl9leHBvcnRQZGYoZGF0YS51aWQsIGRhdGEpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChyZXNwb25zZTogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gSHR0cFN0YXR1c0NvZGUuTm90Rm91bmQpIHtcclxuICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5pbmZvTWVzc2FnZShcclxuICAgICAgICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19ub19kZWZhdWx0X3JlcG9ydF9mb3VuZCdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uU2VuZFBkZihldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5jdXN0b21TZW5kTWFpbE1vZGUpIHtcclxuICAgICAgdGhpcy50b1NlbmRFbWFpbCA9IHRoaXMucmVwb3J0aW5nSW5mb3JtYXRpb24/LmRlc3RpbmF0aW9uQWRkcmVzc1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5mb3JtTmFtZSkge1xyXG4gICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2VcclxuICAgICAgICAuZ2V0RGVmYXVsdFJlcG9ydCh0aGlzLmZvcm1OYW1lLCB0aGlzLnJlcG9ydERpc2NyaW1pbmF0b3IpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcclxuICAgICAgICAgICAgLy8gbGV0IGRlZmF1bHRSZXBvcnRJZDogc3RyaW5nID0gZGF0YTtcclxuICAgICAgICAgICAgdGhpcy5fc2VuZFBkZihkYXRhLnVpZCwgZGF0YSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChyZXNwb25zZTogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBIdHRwU3RhdHVzQ29kZS5Ob3RGb3VuZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuaW5mb01lc3NhZ2UoXHJcbiAgICAgICAgICAgICAgICAnc2hhcmVkX3JlcG9ydGluZ19ub19kZWZhdWx0X3JlcG9ydF9mb3VuZCdcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2VuZFBkZihcclxuICAgIGlkOiBzdHJpbmcsXHJcbiAgICByZXBvcnRJbmZvcm1hdGlvbj86IFJlcG9ydFRlbXBsYXRlUmVzcG9uc2VcclxuICApOiB2b2lkIHtcclxuICAgIGlmIChpZCAhPSB1bmRlZmluZWQgJiYgaWQgIT0gbnVsbCkge1xyXG4gICAgICBpZiAodGhpcy5mb3JtRW5kcG9pbnQgIT0gdW5kZWZpbmVkICYmIHRoaXMuZm9ybUVuZHBvaW50ICE9IG51bGwpIHtcclxuICAgICAgICBpZiAoIXJlcG9ydEluZm9ybWF0aW9uKSB7XHJcbiAgICAgICAgICByZXBvcnRJbmZvcm1hdGlvbiA9IHRoaXMucmVwb3J0cy5maW5kKCh4KSA9PiB4LnVpZCA9PSBpZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgc2F2ZVN1YmplY3Q6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgICAgICAgbGV0IG1vZGFsU2l6ZSA9IE1vZGFsU2l6ZUVudW0uWE1lZGl1bTtcclxuICAgICAgICBsZXQgY29uZjogRHluYW1pY0RpYWxvZ0NvbmZpZyA9IHtcclxuICAgICAgICAgIGRhdGE6IHsgc2F2ZVN1YmplY3QsIGVtYWlsOiB0aGlzLnRvU2VuZEVtYWlsIH0sXHJcbiAgICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgICAgICAgIHdpZHRoOiBtb2RhbFNpemUud2lkdGgsXHJcbiAgICAgICAgICBoZWlnaHQ6IG1vZGFsU2l6ZS5oZWlnaHQsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLl9kaWFsb2dSZWYgPSB0aGlzLl90c2lNb2RhbFNlcnZpY2Uub3BlbihcclxuICAgICAgICAgIFRzaVNlbmRNYWlsQ29tcG9uZW50LFxyXG4gICAgICAgICAgY29uZlxyXG4gICAgICAgICk7XHJcbiAgICAgICAgc2F2ZVN1YmplY3Quc3Vic2NyaWJlKCh2YWw6IEVtYWlsSW5mb3JtYXRpb24pID0+IHtcclxuICAgICAgICAgIGlmICghdmFsKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICghdmFsLnRvQWRkcmVzcykge1xyXG4gICAgICAgICAgICByZXR1cm5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICghdmFsLnN1YmplY3QpIHtcclxuICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBsZXQgcmVwb3J0VG9QcmludCA9IHRoaXMuX25ld1JlcG9ydFRvUHJpbnQoXHJcbiAgICAgICAgICAgIGlkLFxyXG4gICAgICAgICAgICByZXBvcnRJbmZvcm1hdGlvbiEucmVwb3J0VHlwZSxcclxuICAgICAgICAgICAgcmVwb3J0SW5mb3JtYXRpb24hLnJlc3RFbmRwb2ludFxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5leHBvcnRSZXBvcnRGaWxlVG9QZGYocmVwb3J0VG9QcmludClcclxuICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuZXh0OiBhc3luYyAoYmxvYikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBuZXdGaWxlID0gbmV3IEZpbGUoW2Jsb2JdLCAnUmVwb3J0LnBkZicsIHtcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBibG9iLnR5cGUsXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgbGV0IGF0dGFjaG1lbnRzOiBGaWxlW10gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgYXR0YWNobWVudHMucHVzaChuZXdGaWxlKVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLl9tYWlsaW5nU2VydmljZVxyXG4gICAgICAgICAgICAgICAgICAgIC5zZW5kTWFpbChcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbC50b0FkZHJlc3MhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsLnN1YmplY3QhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsLm1lc3NhZ2UgPz8gXCJcIixcclxuICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsLmNjQWRkcmVzc1xyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmluZm8oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgTG9jYWxpemF0aW9uS2V5cy5zZW50U3VjY2Vzc0Z1bGx5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXJyb3JSZXNwb25zZU1hbmFnZXJTZXJ2aWNlLnNob3dFcnJvck1lc3NhZ2UoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGRvd25sb2FkaW5nIHRoZSBQREYnLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuX2RpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsPzogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9jbG9zZU1vZGFsKHZhbCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuaW5mb01lc3NhZ2UoXHJcbiAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfbm9fZGVmYXVsdF9yZXBvcnRfZm91bmQnXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9leHBvcnRQZGYoXHJcbiAgICBpZDogc3RyaW5nLFxyXG4gICAgcmVwb3J0SW5mb3JtYXRpb24/OiBSZXBvcnRUZW1wbGF0ZVJlc3BvbnNlXHJcbiAgKTogdm9pZCB7XHJcbiAgICBpZiAoaWQgIT0gdW5kZWZpbmVkICYmIGlkICE9IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZm9ybUVuZHBvaW50ICE9IHVuZGVmaW5lZCAmJiB0aGlzLmZvcm1FbmRwb2ludCAhPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKCFyZXBvcnRJbmZvcm1hdGlvbikge1xyXG4gICAgICAgICAgcmVwb3J0SW5mb3JtYXRpb24gPSB0aGlzLnJlcG9ydHMuZmluZCgoeCkgPT4geC51aWQgPT0gaWQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFyZXBvcnRJbmZvcm1hdGlvbiB8fCAhcmVwb3J0SW5mb3JtYXRpb24ucmVzdEVuZHBvaW50KSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgcmVwb3J0VG9QcmludCA9IHRoaXMuX25ld1JlcG9ydFRvUHJpbnQoXHJcbiAgICAgICAgICBpZCxcclxuICAgICAgICAgIHJlcG9ydEluZm9ybWF0aW9uIS5yZXBvcnRUeXBlLFxyXG4gICAgICAgICAgcmVwb3J0SW5mb3JtYXRpb24hLnJlc3RFbmRwb2ludFxyXG4gICAgICAgIClcclxuXHJcbiAgICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgICAgICAuZXhwb3J0UmVwb3J0RmlsZVRvUGRmKHJlcG9ydFRvUHJpbnQpXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgbmV4dDogKGJsb2IpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICAgICAgICAgICAgICAgIGEuaHJlZiA9IHVybDtcclxuICAgICAgICAgICAgICAgIGEuZG93bmxvYWQgPSAnUmVwb3J0LnBkZic7XHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGEpO1xyXG4gICAgICAgICAgICAgICAgYS5jbGljaygpO1xyXG5cclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSk7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZG93bmxvYWRpbmcgdGhlIFBERicsIGVycm9yKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfcmVkaXJlY3RlZF90b19wcmludF9yZXBvcnRfc3VjY2Vzc2Z1bGx5J1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuaW5mb01lc3NhZ2UoXHJcbiAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfbm9fZGVmYXVsdF9yZXBvcnRfZm91bmQnXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldE5vbWJyZUZpY2hpZXIoKSB7XHJcbiAgICBpZiAodGhpcy5pZCAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuX2ZpY2hpZXJTZXJ2aWNlXHJcbiAgICAgICAgLkdldE5vbWJyZUZpY2hpZXJKb2ludEJ5SWQodGhpcy5pZCA/PyBcIlwiKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fbm9tYnJlRG9jdW1lbnRzSm9pbnRzID0gZGF0YTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKHJlc3BvbnNlOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9lcnJvclJlc3BvbnNlTWFuYWdlclNlcnZpY2Uuc2hvd0Vycm9yTWVzc2FnZShyZXNwb25zZSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgc2hvd1VwbG9hZERpYWxvZygpIHtcclxuXHJcbiAgICBjb25zdCBjb25mID0ge1xyXG4gICAgICBkYXRhOiB7fSxcclxuICAgICAgc3R5bGVDbGFzczogJycsXHJcbiAgICAgIHdpZHRoOiB0aGlzLm1vZGFsU2l6ZSEud2lkdGgsXHJcbiAgICAgIGhlaWdodDogdGhpcy5tb2RhbFNpemUhLmhlaWdodCxcclxuICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVmID0gYXdhaXQgb3Blbk1vZGFsVXBsb2FkR3JpZCh0aGlzLl9pbmplY3RvciwgY29uZilcclxuXHJcbiAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoKHZhbD86IGFueSkgPT4gdGhpcy5fY2xvc2VGaWxlTWFuYWdlQ29tcG9uZW50KCkpO1xyXG4gIH1cclxuXHJcbiAgb25EcmFnT3ZlcihldmVudDogRHJhZ0V2ZW50KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBvbkRyb3AoZXZlbnQ6IERyYWdFdmVudCkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG5cclxuICAgIGNvbnN0IGZpbGVzID0gZXZlbnQuZGF0YVRyYW5zZmVyPy5maWxlcztcclxuICAgIGlmIChmaWxlcyAmJiBmaWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGZpbGUgPSBmaWxlc1swXTtcclxuICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgICAgIHJlYWRlci5vbmxvYWQgPSAoZTogUHJvZ3Jlc3NFdmVudDxGaWxlUmVhZGVyPikgPT4ge1xyXG4gICAgICAgIGNvbnN0IGFycmF5QnVmZmVyID0gZS50YXJnZXQ/LnJlc3VsdCBhcyBBcnJheUJ1ZmZlcjtcclxuICAgICAgICBpZiAoIWFycmF5QnVmZmVyKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IGJhc2U2NENvbnRlbnQgPSB0aGlzLmFycmF5QnVmZmVyVG9CYXNlNjQoYXJyYXlCdWZmZXIpO1xyXG5cclxuICAgICAgICBjb25zdCBmaWNoaWVyVG9TZW5kID0gbmV3IEZpY2hpZXIoKTtcclxuICAgICAgICBmaWNoaWVyVG9TZW5kLmRhdGVGaWNoaWVyID0gbmV3IERhdGUoKTtcclxuICAgICAgICBmaWNoaWVyVG9TZW5kLm5vbSA9IGZpbGUubmFtZTtcclxuICAgICAgICBmaWNoaWVyVG9TZW5kLm9iamV0ID0gJyc7XHJcbiAgICAgICAgZmljaGllclRvU2VuZC5ub21GaWNoaWVyQ29tcGxldCA9IGZpbGUubmFtZTtcclxuICAgICAgICBmaWNoaWVyVG9TZW5kLmRlc2NyaXB0aW9uID0gJyc7XHJcbiAgICAgICAgZmljaGllclRvU2VuZC5jb250ZW51ID0gYmFzZTY0Q29udGVudDtcclxuICAgICAgICBmaWNoaWVyVG9TZW5kLnRhYmxlTGllZSA9IHRoaXMuYnVzaW5lc3NDbGFzcztcclxuICAgICAgICBmaWNoaWVyVG9TZW5kLnBrZXkgPSB0aGlzLmlkO1xyXG4gICAgICAgIGZpY2hpZXJUb1NlbmQudHlwZUZpY2hpZXIgPSAnNDM3QzA4RDUtQzE2OS00MTY3LThEMzctRjhBQzZDOTA1RTIzJzsgLy8gVE9ETzogTW9tb1xyXG5cclxuICAgICAgICB0aGlzLl9maWNoaWVyU2VydmljZS5jcmVhdGUoZmljaGllclRvU2VuZCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3ModGhpcy5sKFwiRmljaGllciBlbnJlZ2lzdHLDqSAhXCIpKTtcclxuICAgICAgICAgICAgdGhpcy5vblNhdmUuZW1pdCgpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmwoXCJFcnJldXIgbG9ycyBkZSBs4oCZZW5yZWdpc3RyZW1lbnQgIVwiKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH07XHJcblxyXG4gICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoZmlsZSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNob3dEaWFsb2coKSB7XHJcbiAgICB0aGlzLl9vcGVuTW9kYWwoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHNob3dFeHBvcnRJbXBvcnREaWFsb2coKSB7XHJcbiAgICB0aGlzLl9kaWFsb2dSZWYgPSBhd2FpdCBvcGVuTWFuYWdlSW1wb3J0RXhwb3J0TW9kYWwodGhpcy5faW5qZWN0b3IsIHRoaXMuYnVzaW5lc3NDbGFzcywgdGhpcy5mb3JtTmFtZSwgdGhpcy5wYWdlZFJlcXVlc3QpXHJcbiAgICB0aGlzLl9kaWFsb2dSZWYub25DbG9zZS5zdWJzY3JpYmUoKHZhbD86IGFueSkgPT5cclxuICAgICAgdGhpcy5fY2xvc2VNb2RhbCh2YWwsIHRydWUpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJlc2VudGF0aW9uRGVzaWduZXJDb25maWcoKSB7XHJcbiAgICBpZiAodGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5pc0Rlc2lnbk1vZGUpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLl9sYXlvdXRIZWxwZXJTZXJ2aWNlLmlzRGVzaWduTW9kZSA9IHRydWU7XHJcblxyXG4gICAgaWYgKHRoaXMuZnJvbVRzaUZvcm0pIHtcclxuICAgICAgdGhpcy50b2dnbGVEZXNpZ25Nb2RlLmVtaXQodHJ1ZSk7XHJcbiAgICAgIHRoaXMuX2xheW91dEhlbHBlclNlcnZpY2UuX2Rlc2lnbk1vZGVGb3JtU3ViamVjdC5uZXh0KHRydWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fbGF5b3V0SGVscGVyU2VydmljZS5fZGVzaWduTW9kZUxpc3RTdWJqZWN0Lm5leHQodHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gcHJpdmF0ZSBtZXRob2RzXHJcbiAgcHJpdmF0ZSBfdmlld1JlcG9ydChcclxuICAgIGlkOiBzdHJpbmcsXHJcbiAgICByZXBvcnRJbmZvcm1hdGlvbj86IFJlcG9ydFRlbXBsYXRlUmVzcG9uc2VcclxuICApOiB2b2lkIHtcclxuICAgIGlmIChpZCAhPSB1bmRlZmluZWQgJiYgaWQgIT0gbnVsbCkge1xyXG4gICAgICAvLyBjYXNlIHRoZXJlIGlzIGRlZmF1bHQgcmVwb3J0XHJcbiAgICAgIGlmICh0aGlzLmZvcm1FbmRwb2ludCAhPSB1bmRlZmluZWQgJiYgdGhpcy5mb3JtRW5kcG9pbnQgIT0gbnVsbCkge1xyXG4gICAgICAgIGlmICghcmVwb3J0SW5mb3JtYXRpb24pIHtcclxuICAgICAgICAgIHJlcG9ydEluZm9ybWF0aW9uID0gdGhpcy5yZXBvcnRzLmZpbmQoKHgpID0+IHgudWlkID09IGlkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghcmVwb3J0SW5mb3JtYXRpb24gfHwgIXJlcG9ydEluZm9ybWF0aW9uLnJlc3RFbmRwb2ludCkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5yZXBvcnRpbmdTZXJ2aWNlXHJcbiAgICAgICAgICAuYWRkUmVwb3J0VG9QcmludChcclxuICAgICAgICAgICAgdGhpcy5fbmV3UmVwb3J0VG9QcmludChcclxuICAgICAgICAgICAgICBpZCxcclxuICAgICAgICAgICAgICByZXBvcnRJbmZvcm1hdGlvbj8ucmVwb3J0VHlwZSxcclxuICAgICAgICAgICAgICByZXBvcnRJbmZvcm1hdGlvbj8ucmVzdEVuZHBvaW50XHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgIClcclxuICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYgKGRhdGEgIT0gbnVsbCAmJiBkYXRhICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXBvcnRUb1ByaW50SWQgPSBkYXRhLnVpZDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlcG9ydGluZ1NlcnZpY2UuZ2V0UmVwb3J0VGVtcGxhdGVCeUlkKGlkKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0ZW5hbnRVaWQgPSB0aGlzLmlkZW50aXR5TWFuYWdlclNlcnZpY2UucGFyc2VNeUF1dGhUb2tlbigpPy50ZW5hbnRVaWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVybFZpZXdlciA9IFwiXCJcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5yZXBvcnRUeXBlID09PSBUc2lSZXBvcnRUeXBlLkxpc3QpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHVybFZpZXdlciA9IGAke1NlZ21lbnQucmVwb3J0aW5nU2VydmljZUJhc2V9L3JlcG9ydC12aWV3ZXIvJHt0aGlzLnJlcG9ydFRvUHJpbnRJZH0/JHtxdWVyeVBhcmFtTmFtZXNDb25zdC50ZW5hbnRVaWR9PSR7dGVuYW50VWlkfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhLnJlcG9ydFR5cGUgPT09IFRzaVJlcG9ydFR5cGUuRGFzaGJvYXJkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB1cmxWaWV3ZXIgPSBgJHtTZWdtZW50LmFwcEJhc2VIcmVmfS8ke0FwcFJvdXRlcy5hcHB9LyR7QXBwUm91dGVzLmRhc2hib2FyZH0vJHtNYW5hZ2VSZXBvcnRpbmdSb3V0ZXMuZGFzaGJvYXJkVmlld2VyfT8ke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnJlcG9ydFRvUHJpbnR9PSR7dGhpcy5yZXBvcnRUb1ByaW50SWR9JiR7cXVlcnlQYXJhbU5hbWVzQ29uc3QudGVuYW50VWlkfT0ke3RlbmFudFVpZH1gO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5yZXBvcnRUeXBlID09PSBUc2lSZXBvcnRUeXBlLlJURikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdXJsVmlld2VyID0gYCR7U2VnbWVudC5yZXBvcnRpbmdTZXJ2aWNlQmFzZX0vbWFpbG1lcmdlLXJlYWRvbmx5bW9kZS8ke3RoaXMucmVwb3J0VG9QcmludElkfT8ke3F1ZXJ5UGFyYW1OYW1lc0NvbnN0LnRlbmFudFVpZH09JHt0ZW5hbnRVaWR9YDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5vcGVuKHVybFZpZXdlciwgJ19ibGFuaycpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAgICAgICAgICAgICAgICdzaGFyZWRfcmVwb3J0aW5nX3JlZGlyZWN0ZWRfdG9fcHJpbnRfcmVwb3J0X3N1Y2Nlc3NmdWxseSdcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKHRoaXMuZXJyb3JNZXNzYWdlS2V5KTtcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHsgfSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuXHJcbiAgICAgICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IodGhpcy5lcnJvck1lc3NhZ2VLZXkpO1xyXG4gICAgICAgICAgICB9LFxyXG5cclxuICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHsgfSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBubyBkZWZhdWx0IHJlcG9ydFxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuaW5mb01lc3NhZ2UoXHJcbiAgICAgICAgJ3NoYXJlZF9yZXBvcnRpbmdfbm9fZGVmYXVsdF9yZXBvcnRfZm91bmQnXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9uZXdSZXBvcnRUb1ByaW50KFxyXG4gICAgdWlkOiBzdHJpbmcsXHJcbiAgICByZXBvcnRUeXBlOiBudW1iZXIsXHJcbiAgICByZXN0RW5kcG9pbnQ/OiBzdHJpbmcsXHJcbiAgICBtb2R1bGU/OiBzdHJpbmcsXHJcbiAgICBvcmRlcj86IG51bWJlcixcclxuICAgIHNob3J0TmFtZT86IHN0cmluZyxcclxuICAgIGRpc3BsYXk/OiBib29sZWFuXHJcbiAgKTogUmVwb3J0VG9QcmludCB7XHJcbiAgICBsZXQgdG9rZW4gPSB0aGlzLmlkZW50aXR5TWFuYWdlclNlcnZpY2UuZ2V0QXV0aFRva2VuKCk7XHJcbiAgICBsZXQgdXNlcm5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCA9XHJcbiAgICAgIHRoaXMuaWRlbnRpdHlNYW5hZ2VyU2VydmljZS5wYXJzZU15QXV0aFRva2VuKCkubmFtZTtcclxuICAgIGlmICh1c2VybmFtZSkge1xyXG4gICAgICBpZiAodWlkICYmIC8qdGhpcy5vdGhlckZvcm1FbmRwb2ludCAmJiB0aGlzLm90aGVyRm9ybU5hbWUgJiYqLyB0b2tlbikge1xyXG4gICAgICAgIGxldCBuZXdSZXBvcnRUb1ByaW50OiBSZXBvcnRUb1ByaW50ID0ge1xyXG4gICAgICAgICAgcmVwb3J0VGVtcGxhdGVVaWQ6IHVpZCxcclxuICAgICAgICAgIHJlc3RFbmRwb2ludDogdGhpcy5pc1JlcG9ydEZvckZpY2hlXHJcbiAgICAgICAgICAgID8gdGhpcy5yZXBvcnRpbmdTZXJ2aWNlLmluc2VydE5ld1VpZEluUmVzdEVuZFBvaW50KHJlc3RFbmRwb2ludCwgdGhpcy5pZCkgPz9cclxuICAgICAgICAgICAgdGhpcy5mb3JtRW5kcG9pbnRcclxuICAgICAgICAgICAgOiB0aGlzLmZvcm1FbmRwb2ludCxcclxuICAgICAgICAgIHJlcXVlc3REYXRhOiAhdGhpcy5jdXN0b21SZXBvcnRpbmdNb2RlID8gdGhpcy5mb3JtRW5kcG9pbnRCb2R5IDogdGhpcy5yZXF1ZXN0RGF0YSxcclxuICAgICAgICAgIGZvcm1OYW1lOiB0aGlzLmZvcm1OYW1lLFxyXG4gICAgICAgICAgcmVwb3J0VHlwZTogcmVwb3J0VHlwZSxcclxuICAgICAgICAgIHVzZXJuYW1lOiB1c2VybmFtZSxcclxuICAgICAgICAgIHVzZXJUb2tlbjogcmVwb3J0VHlwZSA9PSBUc2lSZXBvcnRUeXBlLkRhc2hib2FyZCA/IHVuZGVmaW5lZCA6IHRva2VuLFxyXG4gICAgICAgICAgaXNQYWdlZDogdGhpcy5pc0Zvcm1FbmRwb2ludFBhZ2VkID09IHRydWUgPyB0cnVlIDogZmFsc2UsXHJcbiAgICAgICAgICBodG1sRmlsdGVyc1RleHQ6IHRoaXMuZmlsdGVyc0h0bWxUZW1wbGF0ZSxcclxuICAgICAgICAgIG9wdGlvbmFsRW5kcG9pbnRzSnNvbjogdGhpcy5vcHRpb25hbEVuZHBvaW50cyxcclxuICAgICAgICAgIG1vZHVsZTogbW9kdWxlLFxyXG4gICAgICAgICAgb3JkZXI6IG9yZGVyLFxyXG4gICAgICAgICAgc2hvcnROYW1lOiBzaG9ydE5hbWUsXHJcbiAgICAgICAgICBkaXNwbGF5OiBkaXNwbGF5LFxyXG4gICAgICAgICAgaHR0cE1ldGhvZFR5cGU6IHRoaXMuZ2V0SHR0cE1ldGhvZFR5cGUoKVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHJldHVybiBuZXdSZXBvcnRUb1ByaW50O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRocm93IEVycm9yKFxyXG4gICAgICAgICAgJ3NvbWUgb2YgdGhlIHJlcXVpcmVkIHByb3BlcnRpZXMgOiB1c2VyIHRva2VuLCBmb3JtTmFtZSwgZm9ybUVuZHBvaW50IG9yIHNlbGVjdGVkUmVwb3J0IGhhdmUgbm90IGJlZW4gc2V0ICEnXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgRXJyb3IoXCJwcm9wZXJ0eSAnVXNlck5hbWUgJyBvZiBjdXJyZW50IHVzZXIgaGF2ZSBub3QgYmVlbiBzZXQgIVwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgX29wZW5Nb2RhbCgpIHtcclxuICAgIGxldCBjb25mOiBEeW5hbWljRGlhbG9nQ29uZmlnO1xyXG4gICAgY29uZiA9IHtcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIG90aGVyRm9ybU5hbWU6IHRoaXMuZm9ybU5hbWUsXHJcbiAgICAgICAgb3RoZXJGb3JtRW5kcG9pbnQ6IHRoaXMuZm9ybUVuZHBvaW50LFxyXG4gICAgICAgIGZvcm1FbmRwb2ludEJvZHk6IHRoaXMuZm9ybUVuZHBvaW50Qm9keSxcclxuICAgICAgICBpc0Zvcm1FbmRwb2ludFBhZ2VkOiB0aGlzLmlzRm9ybUVuZHBvaW50UGFnZWQsXHJcbiAgICAgICAgZmlsdGVyc0h0bWxUZW1wbGF0ZTogdGhpcy5maWx0ZXJzSHRtbFRlbXBsYXRlLFxyXG4gICAgICAgIG9wdGlvbmFsRW5kcG9pbnRzOiB0aGlzLm9wdGlvbmFsRW5kcG9pbnRzLFxyXG4gICAgICAgIGJ1c2luZXNzQ2xhc3M6IHRoaXMuYnVzaW5lc3NDbGFzcyxcclxuICAgICAgICByZXBvcnREaXNjcmltaW5hdG9yOiB0aGlzLnJlcG9ydERpc2NyaW1pbmF0b3IsXHJcbiAgICAgICAgaWQ6IHRoaXMuaWQsXHJcbiAgICAgICAgcmVxdWVzdERhdGE6IHRoaXMucmVxdWVzdERhdGEsXHJcbiAgICAgICAgY3VzdG9tUmVwb3J0aW5nTW9kZTogdGhpcy5jdXN0b21SZXBvcnRpbmdNb2RlLFxyXG4gICAgICAgIGh0dHBNZXRob2RUeXBlOiB0aGlzLmdldEh0dHBNZXRob2RUeXBlKCksXHJcbiAgICAgIH0sXHJcbiAgICAgIHN0eWxlQ2xhc3M6ICcnLFxyXG4gICAgICB3aWR0aDogdGhpcy5tb2RhbFNpemUud2lkdGgsXHJcbiAgICAgIGhlaWdodDogdGhpcy5tb2RhbFNpemUuaGVpZ2h0LFxyXG4gICAgICBtYXhpbWl6YWJsZTogdHJ1ZSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5fZGlhbG9nUmVmID0gYXdhaXQgb3Blbk1hbmFnZVJlcG9ydGluZ0NvbXBvbmVudCh0aGlzLl9pbmplY3RvciwgY29uZik7XHJcblxyXG4gICAgdGhpcy5fZGlhbG9nUmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKCh2YWw/OiBhbnkpID0+IHRoaXMuX2Nsb3NlTW9kYWwodmFsKSk7XHJcbiAgfVxyXG5cclxuICBnZXRIdHRwTWV0aG9kVHlwZSgpIHtcclxuICAgIGlmICh0aGlzLmlzUmVwb3J0Rm9yRmljaGUgJiYgIXRoaXMuY3VzdG9tUmVwb3J0aW5nTW9kZSkge1xyXG4gICAgICByZXR1cm4gSHR0cE1ldGhvZFR5cGUuR0VUO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmh0dHBNZXRob2RUeXBlICYmIHRoaXMuY3VzdG9tUmVwb3J0aW5nTW9kZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5odHRwTWV0aG9kVHlwZTtcclxuICAgIH1cclxuICAgIHJldHVybiBIdHRwTWV0aG9kVHlwZS5QT1NUO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2xvc2VGaWxlTWFuYWdlQ29tcG9uZW50KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jbG9zZWRNb2RhbEZpbGVVcGxvYWQuZW1pdCh0cnVlKTtcclxuICAgIHRoaXMuX2RpYWxvZ1JlZj8uZGVzdHJveSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2xvc2VNb2RhbCh2YWw/OiBhbnksIHJlZnJlc2hEYXRhOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcclxuICAgIHRoaXMucmVmcmVzaERhdGEuZW1pdChyZWZyZXNoRGF0YSk7XHJcbiAgICB0aGlzLl9kaWFsb2dSZWY/LmRlc3Ryb3koKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIG9uUmlnaHRDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICB0aGlzLl9nZXRBbGxSZXBvcnRzKGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xyXG4gIH1cclxuXHJcbiAgaGlkZUNvbnRleHRNZW51KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zaG93Q29udGV4dE1lbnUgPSBmYWxzZTtcclxuICAgIHRoaXMuY29udGV4dE1lbnVQb3NpdGlvbiA9IHsgeDogMCwgeTogMCB9O1xyXG4gICAgLy8gdGhpcy5yZXBvcnRzID0gW107XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdENvbnRleHRPcHRpb24oaXRlbTogUmVwb3J0VGVtcGxhdGVSZXNwb25zZSk6IHZvaWQge1xyXG4gICAgdGhpcy5fdmlld1JlcG9ydChpdGVtLnVpZCk7XHJcbiAgICB0aGlzLmhpZGVDb250ZXh0TWVudSgpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0UmVwb3J0cygpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMucmVwb3J0cyA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKFxyXG4gICAgICAgIHRoaXMucmVwb3J0aW5nU2VydmljZS5nZXRSZXBvcnRzKFxyXG4gICAgICAgICAgdGhpcy5mb3JtTmFtZSA/PyAnJyxcclxuICAgICAgICAgIHRoaXMucmVwb3J0RGlzY3JpbWluYXRvclxyXG4gICAgICAgIClcclxuICAgICAgKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgIHRoaXMuaGlkZUNvbnRleHRNZW51KCk7XHJcbiAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcih0aGlzLmVycm9yTWVzc2FnZUtleSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIF9nZXRBbGxSZXBvcnRzKGNsaWNrWDogbnVtYmVyLCBjbGlja1k6IG51bWJlcikge1xyXG4gICAgYXdhaXQgdGhpcy5nZXRSZXBvcnRzKCk7XHJcblxyXG4gICAgaWYgKHRoaXMucmVwb3J0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLndyYXBwZXJSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAgIHRoaXMuY29udGV4dE1lbnVQb3NpdGlvbiA9IHtcclxuICAgICAgICB4OiBjbGlja1ggLSByZWN0LmxlZnQsXHJcbiAgICAgICAgeTogY2xpY2tZIC0gcmVjdC50b3AsXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuc2hvd0NvbnRleHRNZW51ID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2hvd0NvbnRleHRNZW51ID0gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGFzeW5jIHZpZXdOb3RlcygpIHtcclxuICAgIGNvbnN0IHJlZiA9IGF3YWl0IG9wZW5Ob3Rlc0xpc3QodGhpcy5faW5qZWN0b3IpXHJcbiAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoKHZhbD86IGFueSkgPT4gdGhpcy5fY2xvc2VNb2RhbCh2YWwpKTtcclxuICB9XHJcblxyXG4gIHZpZXdJbmZvKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmlkICE9IHVuZGVmaW5lZCAmJiB0aGlzLmlkICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5yZWNvcmRJbmZvUG9wdXBTZXJ2aWNlXHJcbiAgICAgICAgLmdldEluZm8odGhpcy5idXNpbmVzc0NsYXNzISwgdGhpcy5pZClcclxuICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgYXN5bmMgKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgbGV0IG1vZGFsU2l6ZSA9IE1vZGFsU2l6ZUVudW0uRXh0cmFMYXJnZTtcclxuICAgICAgICAgICAgbGV0IHRleHQgPVxyXG4gICAgICAgICAgICAgICdVSUQgOiAgJyArXHJcbiAgICAgICAgICAgICAgdGhpcy5pZCArXHJcbiAgICAgICAgICAgICAgJzxCUj5DcmVhdGVkIGJ5IDogICcgK1xyXG4gICAgICAgICAgICAgIGRhdGEuY3JlYXRpb25Vc2VyICtcclxuICAgICAgICAgICAgICAnPEJSPk1vZGlmaWVkIGJ5IDogJyArXHJcbiAgICAgICAgICAgICAgZGF0YS5tb2RpZlVzZXIgK1xyXG4gICAgICAgICAgICAgICc8QlI+Q3JlYXRlZCBvbiA6ICcgK1xyXG4gICAgICAgICAgICAgIGRhdGEuZGF0ZVNhaXNpZSArXHJcbiAgICAgICAgICAgICAgJzxCUj5Nb2RpZmllZCBvbiA6ICcgK1xyXG4gICAgICAgICAgICAgIGRhdGEuZGF0ZU1vZGlmO1xyXG5cclxuICAgICAgICAgICAgbGV0IGNvbmY6IER5bmFtaWNEaWFsb2dDb25maWcgPSB7XHJcbiAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgVWlkOiB0aGlzLmlkLFxyXG4gICAgICAgICAgICAgICAgY3JlYXRpb25Vc2VyOiBkYXRhLmNyZWF0aW9uVXNlcixcclxuICAgICAgICAgICAgICAgIG1vZGlmVXNlcjogZGF0YS5tb2RpZlVzZXIsXHJcbiAgICAgICAgICAgICAgICBkYXRlU2Fpc2llOiBkYXRhLmRhdGVTYWlzaWUsXHJcbiAgICAgICAgICAgICAgICBkYXRlTW9kaWY6IGRhdGEuZGF0ZU1vZGlmLFxyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgbWF4aW1pemFibGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgd2lkdGg6ICc5MHJlbScsXHJcbiAgICAgICAgICAgICAgaGVpZ2h0OiAnODByZW0nLFxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fZGlhbG9nUmVmID0gYXdhaXQgb3BlblRzaVBvcHVwVGV4dFZpZXdlckNvbXBvbmVudCh0aGlzLl9pbmplY3RvciwgY29uZilcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2RpYWxvZ1JlZi5vbkNsb3NlLnN1YnNjcmliZSgodmFsPzogYW55KSA9PlxyXG4gICAgICAgICAgICAgIHRoaXMuX2Nsb3NlTW9kYWwodmFsKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgYXJyYXlCdWZmZXJUb0Jhc2U2NChidWZmZXI6IEFycmF5QnVmZmVyKTogc3RyaW5nIHtcclxuICAgIGxldCBiaW5hcnkgPSAnJztcclxuICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcclxuICAgIGNvbnN0IGxlbiA9IGJ5dGVzLmJ5dGVMZW5ndGg7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgIGJpbmFyeSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldKTtcclxuICAgIH1cclxuICAgIHJldHVybiBidG9hKGJpbmFyeSk7XHJcbiAgfVxyXG5cclxuICBoaWRlKHZhbD86IGFueSkge1xyXG4gICAgaWYgKHRoaXMuX2RpYWxvZ1JlZiAhPSBudWxsICYmIHRoaXMuX2RpYWxvZ1JlZiAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgaWYgKHZhbCA9PSBmYWxzZSkge1xyXG4gICAgICAgIHRoaXMuX2RpYWxvZ1JlZi5kZXN0cm95KCk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fZGlhbG9nUmVmLmNsb3NlKHZhbCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGwoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMubG9jYWxpemUgIT0gbnVsbFxyXG4gICAgICAmJiB0aGlzLmxvY2FsaXplICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5sb2NhbGl6ZS50cmFuc2Zvcm0oa2V5KTtcclxuICAgIH1cclxuICAgIHJldHVybiBrZXk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGdhcC0yIG14LTJcIj5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cIihmb3JtRW5kcG9pbnQgfHwgYnVzaW5lc3NDbGFzcykgJiYgZW5hYmxlVG9QcmludFJlcG9ydFwiXHJcbiAgICBwcmVzZW50YXRpb25EZXNpZ25lckJhc2U9XCJtYW5hZ2VfcmVwb3J0c19idXR0b25cIlxyXG4gICAgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCJcclxuICA+XHJcbiAgICA8VHNpLUJ1dHRvblxyXG4gICAgICBbZGlzYWJsZWRdPVwiaXNSZXBvcnRpbmdUb29sYmFyRGlzYWJsZWRcIlxyXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgW2ljb25TcmNdPVwiJy4vYXNzZXRzL2ljb25zL2ljb24tcHJpbnRlci1ncm91cC13aGl0ZS5wbmcnXCJcclxuICAgICAgW2ljb25XaWR0aF09XCIyMFwiXHJcbiAgICAgIFt0b29sdGlwVGV4dF09XCInc2hhcmVkX3JlcG9ydGluZ19tYW5hZ2VfcmVwb3J0cydcIlxyXG4gICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvblwiXHJcbiAgICAgIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1zZWNvbmRhcnkgaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uLWljb24tb25seVwiXHJcbiAgICAgIChjbGljayk9XCJzaG93RGlhbG9nKClcIlxyXG4gICAgPlxyXG4gICAgPC9Uc2ktQnV0dG9uPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cIihmb3JtRW5kcG9pbnQgfHwgYnVzaW5lc3NDbGFzcykgJiYgZW5hYmxlVG9QcmludFJlcG9ydFwiXHJcbiAgICBwcmVzZW50YXRpb25EZXNpZ25lckJhc2U9XCJwcmludF9kZWZhdWx0X3JlcG9ydF9idXR0b25cIlxyXG4gICAgY2xhc3M9XCJmbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGJ0bi13cmFwcGVyXCJcclxuICAgICN3cmFwcGVyXHJcbiAgPlxyXG4gICAgPFRzaS1CdXR0b25cclxuICAgICAgW2Rpc2FibGVkXT1cImlzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGljb249XCJwaSBwaS1wcmludCBwLWJ1dHRvbi1pY29uIHAtYnV0dG9uLWljb24tbGVmdFwiXHJcbiAgICAgIFt0b29sdGlwVGV4dF09XCInc2hhcmVkX3JlcG9ydGluZ19yaWdodENsaWNrJ1wiXHJcbiAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcclxuICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXNlY29uZGFyeSBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCJcclxuICAgICAgKGNsaWNrKT1cIm9uUHJpbnREZWZhdWx0KCRldmVudClcIlxyXG4gICAgICAocmlnaHRDbGljayk9XCJvblJpZ2h0Q2xpY2soJGV2ZW50KVwiXHJcbiAgICA+XHJcbiAgICA8L1RzaS1CdXR0b24+XHJcbiAgICA8IS0tIGBzaGFyZWRfcmVwb3J0aW5nX3ByaW50X3JlcG9ydGAga2V5IGZvciBgSW1wcmltZXJgIHRleHQgIChyZXBsYWNlIGl0IGFzIHZhbHVlIG9yIHRvb2x0aXAgaWYgbmVlZCBpdCkgLS0+XHJcblxyXG4gICAgPGRpdlxyXG4gICAgICAqbmdJZj1cInNob3dDb250ZXh0TWVudSAmJiBlbmFibGVUb1ByaW50UmVwb3J0XCJcclxuICAgICAgY2xhc3M9XCJjb250ZXh0LW1lbnVcIlxyXG4gICAgICBbbmdTdHlsZV09XCJ7XHJcbiAgICAgICAgJ3RvcC5weCc6IGNvbnRleHRNZW51UG9zaXRpb24ueSxcclxuICAgICAgICAnbGVmdC5weCc6IGNvbnRleHRNZW51UG9zaXRpb24ueFxyXG4gICAgICB9XCJcclxuICAgICAgKG1vdXNlbGVhdmUpPVwiaGlkZUNvbnRleHRNZW51KClcIlxyXG4gICAgPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgKm5nRm9yPVwibGV0IHJlcG9ydCBvZiByZXBvcnRzXCJcclxuICAgICAgICBjbGFzcz1cIm1lbnUtaXRlbVwiXHJcbiAgICAgICAgKGNsaWNrKT1cIm9uU2VsZWN0Q29udGV4dE9wdGlvbihyZXBvcnQpXCJcclxuICAgICAgPlxyXG4gICAgICAgIHt7IHJlcG9ydC5uYW1lIH19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gICAgPGRpdlxyXG4gICAgKm5nSWY9XCIoZm9ybUVuZHBvaW50IHx8IGJ1c2luZXNzQ2xhc3MpICYmIGVuYWJsZVRvUHJpbnRSZXBvcnRcIlxyXG4gICAgcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlPVwic2VuZF9yZXBvcnRfYnlfZW1haWxfYnV0dG9uXCJcclxuICAgIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiXHJcbiAgPlxyXG4gICAgPFRzaS1CdXR0b25cclxuICAgICAgW2Rpc2FibGVkXT1cImlzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGljb249XCJwaSBwaS1zZW5kIHAtYnV0dG9uLWljb24gcC1idXR0b24taWNvbi1sZWZ0XCJcclxuICAgICAgW3Rvb2x0aXBUZXh0XT1cIidzaGFyZWRfcmVwb3J0aW5nX3NlbmRfbWFpbCdcIlxyXG4gICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvblwiXHJcbiAgICAgIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1zZWNvbmRhcnkgaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uLWljb24tb25seVwiXHJcbiAgICAgIChjbGljayk9XCJvblNlbmRQZGYoJGV2ZW50KVwiXHJcbiAgICA+XHJcbiAgICA8L1RzaS1CdXR0b24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXZcclxuICAgICpuZ0lmPVwiYnVzaW5lc3NDbGFzcyAmJiBzaG93VXBsb2FkQnV0dG9uXCJcclxuICAgIHByZXNlbnRhdGlvbkRlc2lnbmVyQmFzZT1cImF0dGFjaG1lbnRfYnV0dG9uXCJcclxuICAgIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiXHJcbiAgPlxyXG4gICAgPFRzaS1CdXR0b25cclxuICAgICAgW2Rpc2FibGVkXT1cImlzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGljb249XCJwaSBwaS1wYXBlcmNsaXAgcC1idXR0b24taWNvblwiXHJcbiAgICAgIFt0b29sdGlwVGV4dF09XCInc2hhcmVkX2FjdGlvbnNfYXR0YWNobWVudCdcIlxyXG4gICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvblwiXHJcbiAgICAgIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi1zZWNvbmRhcnkgaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uLWljb24tb25seVwiXHJcbiAgICAgIChjbGljayk9XCJzaG93VXBsb2FkRGlhbG9nKClcIlxyXG4gICAgICAoZHJhZ292ZXIpPVwib25EcmFnT3ZlcigkZXZlbnQpXCJcclxuICAgICAgKGRyb3ApPVwib25Ecm9wKCRldmVudClcIlxyXG4gICAgPlxyXG4gICAgPC9Uc2ktQnV0dG9uPlxyXG4gICAgPHNwYW4gKm5nSWY9XCJub21icmVEb2N1bWVudHNKb2ludHMgJiYgbm9tYnJlRG9jdW1lbnRzSm9pbnRzID4gMFwiIGNsYXNzPVwiY3VzdG9tLWJhZGdlXCI+XHJcbiAgICAgIHt7IG5vbWJyZURvY3VtZW50c0pvaW50cyB9fVxyXG4gICAgPC9zcGFuPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cImJ1c2luZXNzQ2xhc3MgJiYgc2hvd0ltcG9ydEV4cG9ydEJ1dHRvblwiXHJcbiAgICBwcmVzZW50YXRpb25EZXNpZ25lckJhc2U9XCJpbXBvcnRfZXhwb3J0X2J1dHRvblwiXHJcbiAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxyXG4gID5cclxuICAgIDxUc2ktQnV0dG9uXHJcbiAgICAgIFtkaXNhYmxlZF09XCJpc1JlcG9ydGluZ1Rvb2xiYXJEaXNhYmxlZFwiXHJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICBpY29uPVwicGkgcGktYXJyb3ctcmlnaHQtYXJyb3ctbGVmdCBwLWJ1dHRvbi1pY29uXCJcclxuICAgICAgW3Rvb2x0aXBUZXh0XT1cIidzaGFyZWRfcmVwb3J0aW5nX21hbmFnZV9leHBvcnRfaW1wb3J0J1wiXHJcbiAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcclxuICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLXN1Y2Nlc3MgaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uLWljb24tb25seVwiXHJcbiAgICAgIChjbGljayk9XCJzaG93RXhwb3J0SW1wb3J0RGlhbG9nKClcIlxyXG4gICAgPlxyXG4gICAgPC9Uc2ktQnV0dG9uPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cInNob3dOb3RlQnV0dG9uXCJcclxuICAgIGNsYXNzPVwiZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiXHJcbiAgICBwcmVzZW50YXRpb25EZXNpZ25lckJhc2U9XCJzaGFyZWRfc2hvd19ub3Rlc19idXR0b25cIlxyXG4gID5cclxuICAgIDxUc2ktQnV0dG9uXHJcbiAgICAgIGlkPVwie3sgY29uZmlnTW9kZUJ1dHRvbklkIH19XCJcclxuICAgICAgW2Rpc2FibGVkXT1cImlzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGljb249XCJwaSBwaS1jb21tZW50IHAtYnV0dG9uLWljb24gcC1idXR0b24taWNvbi1sZWZ0XCJcclxuICAgICAgW3Rvb2x0aXBUZXh0XT1cIidzaGFyZWRfdHNpX2NvbXBvbmVudF9nZXN0aW9uX2Rlc19ub3RlcydcIlxyXG4gICAgICBbdG9vbHRpcFBvc2l0aW9uXT1cInRvb2x0aXBQb3NpdGlvblwiXHJcbiAgICAgIHN0eWxlQ2xhc3M9XCJwLWJ1dHRvbi13YXJuaW5nIGhvdmVyOnNoYWRvdy02IGgtMnJlbSBwLWJ1dHRvbi1pY29uLW9ubHkgdGV4dC13aGl0ZVwiXHJcbiAgICAgIChjbGljayk9XCJ2aWV3Tm90ZXMoKVwiXHJcbiAgICA+XHJcbiAgICA8L1RzaS1CdXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdlxyXG4gICAgKm5nSWY9XCJzaG93SW5mb0J1dHRvblwiXHJcbiAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxyXG4gICAgcHJlc2VudGF0aW9uRGVzaWduZXJCYXNlPVwic2hhcmVkX3Nob3dfaW5mb19idXR0b25cIlxyXG4gID5cclxuICAgIDxUc2ktQnV0dG9uXHJcbiAgICAgIGlkPVwiJ3Nob3ctaW5mby1idXR0b24nXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImlzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGljb249XCJwaSBwaS1pbmZvIHAtYnV0dG9uLWljb24gcC1idXR0b24taWNvbi1sZWZ0XCJcclxuICAgICAgW3Rvb2x0aXBUZXh0XT1cIidzaGFyZWRfYWN0aW9uc19pbmZvJ1wiXHJcbiAgICAgIFt0b29sdGlwUG9zaXRpb25dPVwidG9vbHRpcFBvc2l0aW9uXCJcclxuICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLWluZm8gaG92ZXI6c2hhZG93LTYgaC0ycmVtIHAtYnV0dG9uLWljb24tb25seSB0ZXh0LXdoaXRlXCJcclxuICAgICAgKGNsaWNrKT1cInZpZXdJbmZvKCRldmVudClcIlxyXG4gICAgPlxyXG4gICAgPC9Uc2ktQnV0dG9uPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cInNob3dQcmVzZW50YXRpb25EZXNpZ25lckNvbmZpZ0J1dHRvblwiXHJcbiAgICBjbGFzcz1cImZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIlxyXG4gID5cclxuICAgIDxUc2ktQnV0dG9uXHJcbiAgICAgIGlkPVwie3sgY29uZmlnTW9kZUJ1dHRvbklkIH19XCJcclxuICAgICAgW2Rpc2FibGVkXT1cImlzUmVwb3J0aW5nVG9vbGJhckRpc2FibGVkXCJcclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIGljb249XCJwaSBwaS1leWUgcC1idXR0b24taWNvbiBwLWJ1dHRvbi1pY29uLWxlZnRcIlxyXG4gICAgICBbdG9vbHRpcFRleHRdPVwiJ3NoYXJlZF90c2lfY29tcG9uZW50X2NvbmZpZ19zaG93X2hpZGUnXCJcclxuICAgICAgW3Rvb2x0aXBQb3NpdGlvbl09XCJ0b29sdGlwUG9zaXRpb25cIlxyXG4gICAgICBzdHlsZUNsYXNzPVwicC1idXR0b24tc3VjY2VzcyBob3ZlcjpzaGFkb3ctNiBoLTJyZW0gcC1idXR0b24taWNvbi1vbmx5XCJcclxuICAgICAgKGNsaWNrKT1cInByZXNlbnRhdGlvbkRlc2lnbmVyQ29uZmlnKClcIlxyXG4gICAgPlxyXG4gICAgPC9Uc2ktQnV0dG9uPlxyXG4gIDwvZGl2PlxyXG5cclxuPC9kaXY+XHJcblxyXG48IS0tIDxkaXYgKm5nSWY9XCJzaG93Q29udGV4dE1lbnVcIlxyXG4gIGNsYXNzPVwiY29udGV4dC1tZW51XCJcclxuICBbbmdTdHlsZV09XCJ7XHJcbiAgICAndG9wLnB4JzogY29udGV4dE1lbnVQb3NpdGlvbi55LFxyXG4gICAgJ2xlZnQucHgnOiBjb250ZXh0TWVudVBvc2l0aW9uLnhcclxuICB9XCJcclxuICAobW91c2VsZWF2ZSk9XCJoaWRlQ29udGV4dE1lbnUoKVwiPlxyXG4gIDxkaXYgKm5nRm9yPVwibGV0IHJlcG9ydCBvZiByZXBvcnRzXCJcclxuICAgIGNsYXNzPVwibWVudS1pdGVtXCJcclxuICAgIChjbGljayk9XCJvblNlbGVjdENvbnRleHRPcHRpb24ocmVwb3J0KVwiPlxyXG4gICAge3tyZXBvcnQubmFtZX19XHJcbiAgPC9kaXY+XHJcbjwvZGl2PiAtLT5cclxuIl19