@energycap/components 0.39.36-ECAP-26840-date-input.20241121-0843 → 0.39.36-ECAP-26840-date-input.20241121-1605

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.
@@ -114,6 +114,8 @@ export class DateInputComponent extends FormControlBase {
114
114
  this.calendarSelection = selection;
115
115
  if (isCalendarSelectionSingleDate(selection)) {
116
116
  this.formModel.setValue(selection);
117
+ this.isCalendarOpen = false;
118
+ this.focusInput();
117
119
  }
118
120
  }
119
121
  onTextboxBlur() {
@@ -152,7 +154,7 @@ export class DateInputComponent extends FormControlBase {
152
154
  this.onTextboxValueChanges();
153
155
  // Sync the initial disabled status and value of the textbox
154
156
  this.syncTextboxControlDisabledStatus(this.formModel.status);
155
- this.textboxControl.setValue(this.dateDisplayPipe.transform(this.formModel.value), { emitEvent: false });
157
+ this.textboxControl.setValue(this.dateDisplayPipe.transform(this.formModel.value, true), { emitEvent: false });
156
158
  this.calendarSelection = this.formModel.value;
157
159
  }
158
160
  onFormModelStatusChanges() {
@@ -173,7 +175,7 @@ export class DateInputComponent extends FormControlBase {
173
175
  // Update the calendar selection textbox value with a formatted date when the form model changes.
174
176
  // This is usually triggered by programmatic changes to the form model by a parent component.
175
177
  this.formModel.valueChanges.pipe(distinctUntilChanged((a, b) => moment(a).isSame(b, 'day')), takeUntil(this.componentDestroyed)).subscribe(value => {
176
- const displayValue = this.dateDisplayPipe.transform(value);
178
+ const displayValue = this.dateDisplayPipe.transform(value, true);
177
179
  // Don't emit an event when setting the textbox value to avoid circular updates between the textbox and form model.
178
180
  this.textboxControl.setValue(displayValue, { emitEvent: false });
179
181
  this.calendarSelection = value;
@@ -250,4 +252,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
250
252
  type: ViewChild,
251
253
  args: ['overlay']
252
254
  }] } });
253
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvY29udHJvbHMvZGF0ZS1pbnB1dC9kYXRlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9kYXRlLWlucHV0L2RhdGUtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBYyxXQUFXLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RixPQUFPLEVBQW1CLFdBQVcsRUFBa0MsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFLN0QsT0FBTyxFQUFxQiw2QkFBNkIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7Ozs7Ozs7OztBQVN2RCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsZUFBZTtJQXNDckQsWUFDWSx3QkFBa0QsRUFDbEQsZUFBZ0MsRUFDbEMscUJBQTRDLEVBQzVDLGVBQWdDLEVBQ2hDLEVBQWMsRUFDZCxjQUF1QjtRQUUvQixLQUFLLENBQUMsd0JBQXdCLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFQdkMsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDbEMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1QyxvQkFBZSxHQUFm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Q0FBQztTQUM5QjtJQUNILENBQUM7SUFBQSxDQUFDO0lBRUY7Ozs7OztPQU1HO0lBQ0ssS0FBSyxDQUFDLGNBQWM7UUFDMUIsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLGNBQWMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3JGLE1BQU0sVUFBVSxHQUFHLFVBQVUsRUFBRSxVQUFVLENBQUM7UUFDMUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNsRCxJQUFJLENBQUMsWUFBWSxHQUFHLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBbUJELDhCQUE4QjtJQUN0QixVQUFVO1FBQ2hCLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUN4RCxDQUFDOzsrR0E1UFUsa0JBQWtCO21HQUFsQixrQkFBa0Isc1RDcEIvQix3dUVBaURBOzJGRDdCYSxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsZUFBZTs4UEFPVCxFQUFFO3NCQURqQixXQUFXO3VCQUFDLFNBQVM7O3NCQUNyQixLQUFLO2dCQUdVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBRVUsT0FBTztzQkFBdEIsS0FBSztnQkFDVSxPQUFPO3NCQUF0QixLQUFLO2dCQTJCZ0IsT0FBTztzQkFBNUIsU0FBUzt1QkFBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrQ29ubmVjdGVkT3ZlcmxheSwgT3ZlcmxheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0QmluZGluZywgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUNvbnRyb2wsIEZvcm1Db250cm9sU3RhdHVzLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IERhdGVUaW1lSGVscGVyIH0gZnJvbSAnLi4vLi4vY29yZS9kYXRlLXRpbWUtaGVscGVyJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbk1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS92YWxpZGF0aW9uLW1lc3NhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IERhdGVEaXNwbGF5UGlwZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9kaXNwbGF5L3BpcGVzL2RhdGUtZGlzcGxheS5waXBlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwSGVscGVyIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Zvcm0tZ3JvdXAuaGVscGVyJztcclxuaW1wb3J0IHsgVXNlclByZWZlcmVuY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3VzZXItcHJlZmVyZW5jZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2FsZW5kYXJTZWxlY3Rpb24sIGlzQ2FsZW5kYXJTZWxlY3Rpb25TaW5nbGVEYXRlIH0gZnJvbSAnLi4vY2FsZW5kYXIvY2FsZW5kYXIudHlwZXMnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbEJhc2UgfSBmcm9tICcuLi9mb3JtLWNvbnRyb2wtYmFzZSc7XHJcblxyXG5leHBvcnQgdHlwZSBEYXRlSW5wdXRGb3JtQ29udHJvbCA9IEZvcm1Db250cm9sPERhdGUgfCBudWxsPjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZWMtZGF0ZS1pbnB1dCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RhdGUtaW5wdXQuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGF0ZUlucHV0Q29tcG9uZW50IGV4dGVuZHMgRm9ybUNvbnRyb2xCYXNlIGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcclxuICBASW5wdXQoKSBwdWJsaWMgaWQ6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKiogVGhlIGZvcm0gY29udHJvbCBwcm92aWRlZCBieSB0aGUgaG9zdGluZyBmb3JtLiAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBmb3JtTW9kZWw6IERhdGVJbnB1dEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sPERhdGUgfCBudWxsPihudWxsKTtcclxuXHJcbiAgQElucHV0KCkgcHVibGljIG1pbkRhdGU6IERhdGUgPSBEYXRlVGltZUhlbHBlci5taW5EYXRlUGlja2VyRGF0ZTtcclxuICBASW5wdXQoKSBwdWJsaWMgbWF4RGF0ZTogRGF0ZSA9IERhdGVUaW1lSGVscGVyLm1heERhdGVQaWNrZXJEYXRlO1xyXG5cclxuICAvKiogVGhlIGludGVybmFsIHRleHRib3gncyBmb3JtIGNvbnRyb2wuICovXHJcbiAgcHVibGljIHRleHRib3hDb250cm9sID0gbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwpO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgY3VycmVudCBjYWxlbmRhciBzZWxlY3Rpb24uXHJcbiAgICogVXBkYXRlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBvbiBhIGNhbGVuZGFyIGl0ZW0gb3Igd2hlbiB0aGUgZGF0ZSBlbnRlcmVkIGludG8gdGhlIHRleHRib3ggaXMgcGFyc2VkLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBjYWxlbmRhclNlbGVjdGlvbjogQ2FsZW5kYXJTZWxlY3Rpb24gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgLyoqIENvbnRyb2xzIHdoZXRoZXIgdGhlIGNhbGVuZGFyIG92ZXJsYXkgaXMgb3BlbiBvciBub3QuICovXHJcbiAgcHVibGljIGlzQ2FsZW5kYXJPcGVuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBQbGFjZWhvbGRlciBmb3IgdGhlIHRleHRib3guIFVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUgdXNlcidzIGRhdGUgZGlzcGxheSBwcmVmZXJlbmNlLiAqL1xyXG4gIHB1YmxpYyBwbGFjZWhvbGRlcjogc3RyaW5nID0gJ01NL0REL1lZWVknO1xyXG5cclxuICAvKiogT3ZlcmxheSBzY3JvbGwgc3RyYXRlZ3kgZm9yIHRoZSBjYWxlbmRhciBvdmVybGF5LiBDbG9zZXMgdGhlIGNhbGVuZGFyIG9uIHNjcm9sbC4gKi9cclxuICBwdWJsaWMgb3ZlcmxheVNjcm9sbFN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5U2VydmljZS5zY3JvbGxTdHJhdGVnaWVzLmNsb3NlKCk7XHJcblxyXG4gIC8qKiBcclxuICAgKiBEYXRlIHBhcnNpbmcgZm9ybWF0cyBmb3IgdXNlci1lbnRlcmVkIGRhdGVzLiBEZWZhdWx0cyB0byBtb250aC1maXJzdCBmb3JtYXRzLCBidXQgaXMgdXBkYXRlZCBpbiBvbkluaXRcclxuICAgKiB0byB1c2UgdGhlIHVzZXIncyBwcmVmZXJyZWQgZGF0ZSBmb3JtYXQuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwYXJzZUZvcm1hdHM6IHN0cmluZ1tdID0gRGF0ZVRpbWVIZWxwZXIuZ2V0UGFyc2VGb3JtYXRzKCk7XHJcblxyXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIG92ZXJsYXkgZGlyZWN0aXZlIChzZWUgdGVtcGxhdGUpLiBVc2VkIHRvIGFjY2VzcyB0aGUgb3ZlcmxheSdzIGhvc3QgZWxlbWVudCB0byBjb250cm9sIGZvY3VzLiAqL1xyXG4gIEBWaWV3Q2hpbGQoJ292ZXJsYXknKSBvdmVybGF5PzogQ2RrQ29ubmVjdGVkT3ZlcmxheTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgdmFsaWRhdGlvbk1lc3NhZ2VTZXJ2aWNlOiBWYWxpZGF0aW9uTWVzc2FnZVNlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgZm9ybUdyb3VwSGVscGVyOiBGb3JtR3JvdXBIZWxwZXIsXHJcbiAgICBwcml2YXRlIHVzZXJQcmVmZXJlbmNlU2VydmljZTogVXNlclByZWZlcmVuY2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkYXRlRGlzcGxheVBpcGU6IERhdGVEaXNwbGF5UGlwZSxcclxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIG92ZXJsYXlTZXJ2aWNlOiBPdmVybGF5XHJcbiAgKSB7XHJcbiAgICBzdXBlcih2YWxpZGF0aW9uTWVzc2FnZVNlcnZpY2UsIGZvcm1Hcm91cEhlbHBlcik7XHJcbiAgfVxyXG5cclxuICAvKiogRm9jdXNlcyB0aGUgaW5wdXQgd2hlbmV2ZXIgdGhlIGNhbGVuZGFyIGlzIHNoaWZ0LXRhYmJlZCBvdXQgb2YuICovXHJcbiAgcHVibGljIG9uQ2FsZW5kYXJGb2N1c091dFN0YXJ0KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgdGhpcy5mb2N1c0lucHV0KCk7XHJcbiAgfVxyXG5cclxuICAvKiogQ2xvc2VzIHRoZSBjYWxlbmRhciBhbmQgZm9jdXNlcyB0aGUgaW5wdXQgd2hlbmV2ZXIgdGhlIGNhbGVuZGFyIGlzIHRhYmJlZCBvdXQgb2YuICovXHJcbiAgcHVibGljIG9uQ2FsZW5kYXJGb2N1c091dEVuZChldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIHRoaXMuaXNDYWxlbmRhck9wZW4gPSBmYWxzZTtcclxuICAgIHRoaXMuZm9jdXNJbnB1dCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqIENsb3NlIHRoZSBjYWxlbmRhciBpZiB0aGUgdXNlciBjbGlja3Mgb3V0c2lkZSBvZiB0aGUgY2FsZW5kYXIgYW5kIGRhdGUgaW5wdXQuICovXHJcbiAgcHVibGljIG9uT3ZlcmxheU91dHNpZGVDbGljayhldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgLy8gRG8gbm90IGNsb3NlIHRoZSBjYWxlbmRhciBpZiB0aGUgY2xpY2sgd2FzIHdpdGhpbiB0aGUgZGF0ZSBpbnB1dCBvciBhY3Rpb24gYnV0dG9uXHJcbiAgICBjb25zdCByZWN0ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgY29uc3QgY2xpY2tlZE91dHNpZGVDb250cm9sID0gZXZlbnQuY2xpZW50WSA8IHJlY3QudG9wIHx8XHJcbiAgICAgIGV2ZW50LmNsaWVudFkgPiByZWN0LmJvdHRvbSB8fFxyXG4gICAgICBldmVudC5jbGllbnRYIDwgcmVjdC5sZWZ0IHx8XHJcbiAgICAgIGV2ZW50LmNsaWVudFggPiByZWN0LnJpZ2h0O1xyXG4gICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSB1c2VyIGhpdCBlbnRlciBvbiB0aGUgYWN0aW9uIGJ1dHRvbiBpbnN0ZWFkIG9mIGNsaWNraW5nIHdpdGggdGhlIG1vdXNlLlxyXG4gICAgLy8gSW4gdGhpcyBjYXNlIHRoZSBcImNsaWNrXCIgZXZlbnQgd2lsbCBiZSBvdXRzaWRlIG9mIHRoZSBjb21wb25lbnQgYmVjYXVzZSB0aGUgY2xpZW50eCBhbmQgeSBhcmUgMCxcclxuICAgIC8vIGJ1dCB3ZSBkb24ndCB3YW50IHRvIGNsb3NlIGluIHRoaXMgY2FzZSBiZWNhdXNlIGJ1dHRvbiBjbGlja3MgdHJpZ2dlciBjYWxlbmRhciBvcGVuL2Nsb3NlIHNlcGFyYXRlbHkuXHJcbiAgICBjb25zdCBpc0FjdGlvbkNsaWNrID0gKDxIVE1MRWxlbWVudD5ldmVudC50YXJnZXQpLmlkID09PSBgJHt0aGlzLmlkfV9hY3Rpb25gO1xyXG5cclxuICAgIGlmICghaXNBY3Rpb25DbGljayAmJiBjbGlja2VkT3V0c2lkZUNvbnRyb2wpIHtcclxuICAgICAgdGhpcy5pc0NhbGVuZGFyT3BlbiA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIElmIHRoZSB1c2VyIHRhYnMgb3V0IG9mIHRoZSBmb3JtIGNvbnRyb2wncyBhY3Rpb24gYnV0dG9uIGFuZCB0aGUgY2FsZW5kYXIgaXMgb3BlbiwgZm9jdXMgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGNhbGVuZGFyIG92ZXJsYXkgKi9cclxuICBwdWJsaWMgb25BY3Rpb25LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnVGFiJyAmJiAhZXZlbnQuc2hpZnRLZXkgJiYgdGhpcy5pc0NhbGVuZGFyT3Blbikge1xyXG4gICAgICAvLyBQcmV2ZW50IHRoZSBkZWZhdWx0IHRhYiBhY3Rpb24gc28gdGhlIGZvY3VzIGRvZXNuJ3QgbW92ZSB0byB0aGUgbmV4dCBlbGVtZW50IGluIHRoZSB0YWIgb3JkZXIgYWZ0ZXIgd2UgbWFudWFsbHkgZm9jdXMgdGhlIGNhbGVuZGFyIGJ1dHRvbi5cclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgLy8gRm9jdXMgdGhlIGZpcnN0IGJ1dHRvbiBpbiB0aGUgY2FsZW5kYXIgb3ZlcmxheVxyXG4gICAgICBjb25zdCBmaXJzdEJ1dHRvbjogSFRNTEJ1dHRvbkVsZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkID0gdGhpcy5vdmVybGF5Py5vdmVybGF5UmVmLmhvc3RFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbjpub3QoOmRpc2FibGVkKScpO1xyXG4gICAgICBmaXJzdEJ1dHRvbj8uZm9jdXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblRleHRib3hLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnVGFiJyAmJiBldmVudC5zaGlmdEtleSkge1xyXG4gICAgICAvLyBJZiB0aGUgdXNlciBpcyB0YWJiaW5nIGJhY2t3YXJkcyBmcm9tIHRoZSB0ZXh0Ym94LCBjbG9zZSB0aGUgY2FsZW5kYXIuXHJcbiAgICAgIHRoaXMuaXNDYWxlbmRhck9wZW4gPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBXaGVuZXZlciB0aGUgdXNlciBzZWxlY3RzIGEgZGF0ZSBmcm9tIHRoZSBjYWxlbmRhciwgdXBkYXRlIHRoZSBmb3JtTW9kZWwgd2l0aCB0aGUgc2VsZWN0aW9uICovXHJcbiAgcHVibGljIG9uU2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGlvbjogQ2FsZW5kYXJTZWxlY3Rpb24gfCBudWxsKSB7XHJcbiAgICB0aGlzLmNhbGVuZGFyU2VsZWN0aW9uID0gc2VsZWN0aW9uO1xyXG4gICAgaWYgKGlzQ2FsZW5kYXJTZWxlY3Rpb25TaW5nbGVEYXRlKHNlbGVjdGlvbikpIHtcclxuICAgICAgdGhpcy5mb3JtTW9kZWwuc2V0VmFsdWUoc2VsZWN0aW9uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblRleHRib3hCbHVyKCkge1xyXG4gICAgLy8gUGFyc2UgdGhlIHRleHRib3ggdmFsdWUgaW50byBhIGRhdGUgYW5kIHVwZGF0ZSB0aGUgZm9ybSBtb2RlbFxyXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnRleHRib3hDb250cm9sLnZhbHVlO1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIGNvbnN0IHBhcnNlZERhdGUgPSBtb21lbnQodmFsdWUsIHRoaXMucGFyc2VGb3JtYXRzKTtcclxuICAgICAgaWYgKHBhcnNlZERhdGUuaXNWYWxpZCgpKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtTW9kZWwuc2V0VmFsdWUocGFyc2VkRGF0ZS50b0RhdGUoKSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5mb3JtTW9kZWwuc2V0VmFsdWUobnVsbCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybU1vZGVsLnNldFZhbHVlKG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFVwZGF0ZSB0aGUgZm9ybSBtb2RlbCdzIHRvdWNoZWQgYW5kIGRpcnR5IHN0YXR1cyBiYXNlZCBvbiB0aGUgdGV4dGJveCdzIHN0YXR1cy5cclxuICAgIC8vIFNpbmNlIHRoZSB1c2VyIGludGVyYWN0cyB3aXRoIGEgY29udHJvbCB0aGF0IGlzIGludGVybmFsIHRvIHRoaXMgY29tcG9uZW50LCB0aGVcclxuICAgIC8vIGZvcm0gbW9kZWwncyBzdGF0dXMgd29uJ3QgYmUgdXBkYXRlZCBhdXRvbWF0aWNhbGx5LlxyXG4gICAgaWYgKHRoaXMudGV4dGJveENvbnRyb2wudG91Y2hlZCAmJiAhdGhpcy5mb3JtTW9kZWwudG91Y2hlZCkge1xyXG4gICAgICB0aGlzLmZvcm1Nb2RlbC5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50ZXh0Ym94Q29udHJvbC5kaXJ0eSAmJiAhdGhpcy5mb3JtTW9kZWwuZGlydHkpIHtcclxuICAgICAgdGhpcy5mb3JtTW9kZWwubWFya0FzRGlydHkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgLy8gU2V0dXBcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICB0aGlzLnNldERhdGVGb3JtYXRzKCk7XHJcblxyXG4gICAgdGhpcy5mb3JtTW9kZWwuYWRkVmFsaWRhdG9ycyh0aGlzLmRhdGVWYWxpZGF0b3IpO1xyXG5cclxuICAgIC8vIFN1YnNjcmlwdGlvbnNcclxuICAgIHRoaXMub25Gb3JtTW9kZWxTdGF0dXNDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLm9uRm9ybU1vZGVsVmFsdWVDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLm9uVGV4dGJveFZhbHVlQ2hhbmdlcygpO1xyXG5cclxuICAgIC8vIFN5bmMgdGhlIGluaXRpYWwgZGlzYWJsZWQgc3RhdHVzIGFuZCB2YWx1ZSBvZiB0aGUgdGV4dGJveFxyXG4gICAgdGhpcy5zeW5jVGV4dGJveENvbnRyb2xEaXNhYmxlZFN0YXR1cyh0aGlzLmZvcm1Nb2RlbC5zdGF0dXMpO1xyXG4gICAgdGhpcy50ZXh0Ym94Q29udHJvbC5zZXRWYWx1ZSh0aGlzLmRhdGVEaXNwbGF5UGlwZS50cmFuc2Zvcm0odGhpcy5mb3JtTW9kZWwudmFsdWUpLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB0aGlzLmNhbGVuZGFyU2VsZWN0aW9uID0gdGhpcy5mb3JtTW9kZWwudmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uRm9ybU1vZGVsU3RhdHVzQ2hhbmdlcygpIHtcclxuICAgIC8vIEtlZXAgdGhlIHRleHRib3hDb250cm9sIGRpc2FibGVkIHN0YXR1cyBpbiBzeW5jIHdpdGggdGhlIGZvcm1Nb2RlbFxyXG4gICAgdGhpcy5mb3JtTW9kZWwuc3RhdHVzQ2hhbmdlcy5waXBlKFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5jb21wb25lbnREZXN0cm95ZWQpXHJcbiAgICApLnN1YnNjcmliZShzdGF0dXMgPT4ge1xyXG4gICAgICB0aGlzLnN5bmNUZXh0Ym94Q29udHJvbERpc2FibGVkU3RhdHVzKHN0YXR1cyk7XHJcblxyXG4gICAgICBpZiAodGhpcy5pc0NhbGVuZGFyT3Blbikge1xyXG4gICAgICAgIC8vIEFzIHZhbGlkYXRpb24gbWVzc2FnZXMgYXBwZWFyL2Rpc2FwcGVhciwgdGhlIGRhdGUgaW5wdXQgbWF5IGhhdmUgc2hpZnRlZCB1cCBvciBkb3duIG9uIHRoZSBwYWdlLlxyXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgb3ZlcmxheSBwb3NpdGlvbiB0byBlbnN1cmUgaXQncyBzdGlsbCBhbGlnbmVkIHdpdGggdGhlIHRleHRib3ggYW5kIG5vdCBibG9ja2luZyBpdC5cclxuICAgICAgICAvLyBTZXR0aW1lb3V0IGlzIG5lZWRlZCB0byBlbnN1cmUgdGhlIG92ZXJsYXkgaXMgYmVpbmcgdXBkYXRlZCBhZnRlciB0aGUgbWVzc2FnZSBpcyByZW5kZXJlZC5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMub3ZlcmxheT8ub3ZlcmxheVJlZj8udXBkYXRlUG9zaXRpb24oKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uRm9ybU1vZGVsVmFsdWVDaGFuZ2VzKCkge1xyXG4gICAgLy8gVXBkYXRlIHRoZSBjYWxlbmRhciBzZWxlY3Rpb24gdGV4dGJveCB2YWx1ZSB3aXRoIGEgZm9ybWF0dGVkIGRhdGUgd2hlbiB0aGUgZm9ybSBtb2RlbCBjaGFuZ2VzLlxyXG4gICAgLy8gVGhpcyBpcyB1c3VhbGx5IHRyaWdnZXJlZCBieSBwcm9ncmFtbWF0aWMgY2hhbmdlcyB0byB0aGUgZm9ybSBtb2RlbCBieSBhIHBhcmVudCBjb21wb25lbnQuXHJcbiAgICB0aGlzLmZvcm1Nb2RlbC52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKGEsIGIpID0+IG1vbWVudChhKS5pc1NhbWUoYiwgJ2RheScpKSxcclxuICAgICAgdGFrZVVudGlsKHRoaXMuY29tcG9uZW50RGVzdHJveWVkKVxyXG4gICAgKS5zdWJzY3JpYmUodmFsdWUgPT4ge1xyXG4gICAgICBjb25zdCBkaXNwbGF5VmFsdWUgPSB0aGlzLmRhdGVEaXNwbGF5UGlwZS50cmFuc2Zvcm0odmFsdWUpO1xyXG4gICAgICAvLyBEb24ndCBlbWl0IGFuIGV2ZW50IHdoZW4gc2V0dGluZyB0aGUgdGV4dGJveCB2YWx1ZSB0byBhdm9pZCBjaXJjdWxhciB1cGRhdGVzIGJldHdlZW4gdGhlIHRleHRib3ggYW5kIGZvcm0gbW9kZWwuXHJcbiAgICAgIHRoaXMudGV4dGJveENvbnRyb2wuc2V0VmFsdWUoZGlzcGxheVZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgIHRoaXMuY2FsZW5kYXJTZWxlY3Rpb24gPSB2YWx1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvblRleHRib3hWYWx1ZUNoYW5nZXMoKSB7XHJcbiAgICAvLyBVcGRhdGUgdGhlIGNhbGVuZGFyIHNlbGVjdGlvbiB3aGVuIHRoZSB0ZXh0Ym94IHZhbHVlIGNoYW5nZXMgdG8gdXBkYXRlIHRoZSBjYWxlbmRhci5cclxuICAgIC8vIFdlIGRvbid0IHBhdGNoIHRoZSBmb3JtTW9kZWwgaGVyZSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gdHJpZ2dlciB0aGVcclxuICAgIC8vIGRhdGUgZm9ybWF0dGluZyBsb2dpYyBhbmQgb3ZlcndyaXRlIHRoZSB1c2VyJ3MgaW5wdXQuXHJcbiAgICAvLyBXZSdsbCBkbyB0aGF0IHdoZW4gdGhlIHVzZXIgYmx1cnMgb3V0IG9mIHRoZSB0ZXh0Ym94LiBTZWUgb25UZXh0Ym94Qmx1cigpXHJcbiAgICB0aGlzLnRleHRib3hDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFrZVVudGlsKHRoaXMuY29tcG9uZW50RGVzdHJveWVkKVxyXG4gICAgKS5zdWJzY3JpYmUodmFsdWUgPT4ge1xyXG4gICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICBjb25zdCBwYXJzZWREYXRlID0gbW9tZW50KHZhbHVlLCB0aGlzLnBhcnNlRm9ybWF0cyk7XHJcbiAgICAgICAgaWYgKHBhcnNlZERhdGUuaXNWYWxpZCgpKSB7XHJcbiAgICAgICAgICAvLyBJZiB0aGUgcGFyc2VkIGRhdGUgaXMgYmVmb3JlIHRoZSBtaW5EYXRlLCBzZXQgdGhlIHllYXIgdG8gdGhlIGN1cnJlbnQgeWVhci5cclxuICAgICAgICAgIC8vIFRoaXMgcHJldmVudHMgdGhlIGNhbGVuZGFyIGZyb20gc2hvd2luZyB1bmhlbHBmdWwgZGF0ZXMgaW4gdGhlIGRpc3RhbnQgcGFzdCBhcyB0aGUgdXNlciB0eXBlc1xyXG4gICAgICAgICAgaWYgKHBhcnNlZERhdGUueWVhcigpIDwgdGhpcy5taW5EYXRlLmdldEZ1bGxZZWFyKCkpIHtcclxuICAgICAgICAgICAgcGFyc2VkRGF0ZS5zZXQoJ3llYXInLCBtb21lbnQoKS55ZWFyKCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5jYWxlbmRhclNlbGVjdGlvbiA9IHBhcnNlZERhdGUudG9EYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY2FsZW5kYXJTZWxlY3Rpb24gPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3luY1RleHRib3hDb250cm9sRGlzYWJsZWRTdGF0dXMoc3RhdHVzOiBGb3JtQ29udHJvbFN0YXR1cykge1xyXG4gICAgLy8gVGhlIHRleHRib3ggc2hvdWxkIG9ubHkgYmUgZGlzYWJsZWQgaWYgdGhlIGZvcm0gbW9kZWwgaXMgZGlzYWJsZWQuXHJcbiAgICAvLyBBbGwgb3RoZXIgc3RhdHVzZXMgYXJlIGNvbnNpZGVyZWQgZW5hYmxlZC5cclxuICAgIGlmIChzdGF0dXMgPT09ICdESVNBQkxFRCcgJiYgdGhpcy50ZXh0Ym94Q29udHJvbC5lbmFibGVkKSB7XHJcbiAgICAgIHRoaXMudGV4dGJveENvbnRyb2wuZGlzYWJsZSgpO1xyXG4gICAgfSBlbHNlIGlmIChzdGF0dXMgIT09ICdESVNBQkxFRCcgJiYgdGhpcy50ZXh0Ym94Q29udHJvbC5kaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLnRleHRib3hDb250cm9sLmVuYWJsZSgpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIC8qKiBcclxuICAgKiBVcGRhdGVzIHRoZSBkYXRlIHBhcnNpbmcgZm9ybWF0cyBhbmQgcGxhY2Vob2xkZXIgYmFzZWQgb24gdGhlIHVzZXIncyBkaXNwbGF5IHByZWZlcmVuY2UuXHJcbiAgICogTk9URTogVGhpcyBpcyBhc3luYyBiZWNhdXNlIHdlJ3JlIHJldHJpZXZpbmcgdGhlIHVzZXIncyBwcmVmZXJlbmNlcy4gV2UncmUgbm90IGF3YWl0aW5nIHRoZSByZXN1bHRcclxuICAgKiBiZWNhdXNlIHRoZSBvbmx5IGxvZ2ljIHRoYXQgZGVwZW5kcyBvbiB0aGlzIGlzIHRoZSB0ZXh0IGJveCBkYXRlIHBhcnNpbmcgbG9naWMgYW5kIHBsYWNlaG9sZGVyLlxyXG4gICAqIE91ciBmb3JtcyBzaG91bGQgYWx3YXlzIGJlIGJlaGluZCBhIHBlbmRpbmcgb3ZlcmxheSwgc28gdGhlIHVzZXIgd29uJ3QgYmUgYWJsZSB0byBpbnRlcmFjdCB3aXRoIHRoZVxyXG4gICAqIGZvcm0gdW50aWwgdGhlIHVzZXIgaXMgbG9hZGVkIGFueXdheS5cclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIHNldERhdGVGb3JtYXRzKCkge1xyXG4gICAgY29uc3QgeyBwcmVmZXJlbmNlIH0gPSBhd2FpdCB0aGlzLnVzZXJQcmVmZXJlbmNlU2VydmljZS5nZXRQcmVmZXJlbmNlcygpLnRvUHJvbWlzZSgpO1xyXG4gICAgY29uc3QgZGF0ZUZvcm1hdCA9IHByZWZlcmVuY2U/LmRhdGVGb3JtYXQ7XHJcbiAgICB0aGlzLnBsYWNlaG9sZGVyID0gZGF0ZUZvcm1hdCA/PyB0aGlzLnBsYWNlaG9sZGVyO1xyXG4gICAgdGhpcy5wYXJzZUZvcm1hdHMgPSBEYXRlVGltZUhlbHBlci5nZXRNb21lbnRQYXJzZUZvcm1hdHMoZGF0ZUZvcm1hdCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWYWxpZGF0b3IgdGhhdCBjaGVja3MgaWYgdGhlIGRhdGUgaXMgd2l0aGluIHRoZSBtaW4gYW5kIG1heCBkYXRlIHJhbmdlLlxyXG4gICAqIElmIHRoZSBkYXRlIGlzIG91dHNpZGUgb2YgdGhlIHJhbmdlLCB0aGUgdmFsaWRhdG9yIHJldHVybnMgYW4gZXJyb3IgdGhhdFxyXG4gICAqIHRyaWdnZXJzIHRoZSB2YWxpZGF0aW9uIG1lc3NhZ2Ugc2VydmljZSB0byBzaG93IHRoZSBlcnJvciBpbiB0aGUgbGFiZWwuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBkYXRlVmFsaWRhdG9yOiBWYWxpZGF0b3JGbiA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcclxuICAgIGlmIChjb250cm9sLnZhbHVlKSB7XHJcbiAgICAgIGlmIChjb250cm9sLnZhbHVlIDwgdGhpcy5taW5EYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgbWluRGF0ZTogeyBtaW5WYWx1ZTogdGhpcy5taW5EYXRlIH0gfTtcclxuICAgICAgfSBlbHNlIGlmIChjb250cm9sLnZhbHVlID4gdGhpcy5tYXhEYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgbWF4RGF0ZTogeyBtYXhWYWx1ZTogdGhpcy5tYXhEYXRlIH0gfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH07XHJcblxyXG4gIC8qKiBGb2N1c2VzIHRoZSBkYXRlIGlucHV0LiAqL1xyXG4gIHByaXZhdGUgZm9jdXNJbnB1dCgpIHtcclxuICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpPy5mb2N1cygpO1xyXG4gIH1cclxufVxyXG4iLCI8bGFiZWwgKm5nSWY9XCJsYWJlbFwiPlxyXG4gIDxzcGFuPnt7bGFiZWwgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cclxuICA8c3BhbiAqbmdJZj1cInZhbGlkYXRpb25FcnJvcnMubGVuZ3RoID4gMCAmJiBmb3JtTW9kZWwudG91Y2hlZCAmJiBmb3JtTW9kZWwuaW52YWxpZFwiPiZuYnNwO3t7dmFsaWRhdGlvbkVycm9yc319PC9zcGFuPlxyXG4gIDxlYy1oZWxwLXBvcG92ZXIgaWQ9XCJ7e2lkfX1faGVscFBvcG92ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoZWxwUG9wb3ZlclwiXHJcbiAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtaW5saW5lLWJsb2NrIG15LW4zIG14LW4xXCJcclxuICAgICAgICAgICAgICAgICAgIHRleHQ9XCJ7e2hlbHBQb3BvdmVyIHwgdHJhbnNsYXRlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgY29udGVudFBvc2l0aW9uPVwie3toZWxwUG9wb3ZlclBvc2l0aW9ufX1cIj5cclxuICA8L2VjLWhlbHAtcG9wb3Zlcj5cclxuPC9sYWJlbD5cclxuXHJcbjxlYy1mb3JtLWNvbnRyb2wgaWQ9XCJ7e2lkfX1cIlxyXG4gICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXHJcbiAgICAgICAgICAgICAgICAgW2F1dG9mb2N1c109XCJhdXRvZm9jdXNcIlxyXG4gICAgICAgICAgICAgICAgIFtwZW5kaW5nXT1cInBlbmRpbmdcIlxyXG4gICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXHJcbiAgICAgICAgICAgICAgICAgW2Zvcm1Nb2RlbF09XCJmb3JtTW9kZWxcIlxyXG4gICAgICAgICAgICAgICAgIChhY3Rpb25DbGlja2VkKT1cImlzQ2FsZW5kYXJPcGVuID0gIWlzQ2FsZW5kYXJPcGVuXCJcclxuICAgICAgICAgICAgICAgICAoYWN0aW9uS2V5ZG93bik9XCJvbkFjdGlvbktleWRvd24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgW3Nob3dDbGVhcl09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgYWN0aW9uSWNvbj1cImljb24tZGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgY2RrT3ZlcmxheU9yaWdpblxyXG4gICAgICAgICAgICAgICAgICNvdmVybGF5T3JpZ2luPVwiY2RrT3ZlcmxheU9yaWdpblwiPlxyXG4gIDxpbnB1dCBpZD1cInt7aWR9fV9pbnB1dFwiXHJcbiAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e3BsYWNlaG9sZGVyfX1cIlxyXG4gICAgICAgICBbZm9ybUNvbnRyb2xdPVwidGV4dGJveENvbnRyb2xcIlxyXG4gICAgICAgICAoYmx1cik9XCJvblRleHRib3hCbHVyKClcIlxyXG4gICAgICAgICAoa2V5ZG93bik9XCJvblRleHRib3hLZXlkb3duKCRldmVudClcIj5cclxuPC9lYy1mb3JtLWNvbnRyb2w+XHJcblxyXG48bmctdGVtcGxhdGUgY2RrQ29ubmVjdGVkT3ZlcmxheVxyXG4gICAgICAgICAgICAgI292ZXJsYXk9XCJjZGtDb25uZWN0ZWRPdmVybGF5XCJcclxuICAgICAgICAgICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luXT1cIm92ZXJsYXlPcmlnaW5cIlxyXG4gICAgICAgICAgICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcGVuXT1cImlzQ2FsZW5kYXJPcGVuXCJcclxuICAgICAgICAgICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5U2Nyb2xsU3RyYXRlZ3ldPVwib3ZlcmxheVNjcm9sbFN0cmF0ZWd5XCJcclxuICAgICAgICAgICAgIGNka0Nvbm5lY3RlZE92ZXJsYXlQYW5lbENsYXNzPVwibXktMVwiXHJcbiAgICAgICAgICAgICAob3ZlcmxheU91dHNpZGVDbGljayk9XCJvbk92ZXJsYXlPdXRzaWRlQ2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAoZGV0YWNoKT1cImlzQ2FsZW5kYXJPcGVuID0gZmFsc2VcIj5cclxuICA8ZWMtY2FsZW5kYXIgW2lkXT1cImlkICsgJ19jYWxlbmRhcidcIlxyXG4gICAgICAgICAgICAgICBbbWluRGF0ZV09XCJtaW5EYXRlXCJcclxuICAgICAgICAgICAgICAgW21heERhdGVdPVwibWF4RGF0ZVwiXHJcbiAgICAgICAgICAgICAgIFtzZWxlY3Rpb25dPVwiY2FsZW5kYXJTZWxlY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICBjbGFzcz1cImNhcmQgcHgtMSBwdC0xIHBiLTJcIlxyXG4gICAgICAgICAgICAgICAoZm9jdXNPdXRTdGFydCk9XCJvbkNhbGVuZGFyRm9jdXNPdXRTdGFydCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgKGZvY3VzT3V0RW5kKT1cIm9uQ2FsZW5kYXJGb2N1c091dEVuZCgkZXZlbnQpXCI+XHJcbiAgPC9lYy1jYWxlbmRhcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
255
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3NyYy9saWIvY29udHJvbHMvZGF0ZS1pbnB1dC9kYXRlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9kYXRlLWlucHV0L2RhdGUtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBYyxXQUFXLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RixPQUFPLEVBQW1CLFdBQVcsRUFBa0MsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RixPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFLN0QsT0FBTyxFQUFxQiw2QkFBNkIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7Ozs7Ozs7OztBQVN2RCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsZUFBZTtJQXNDckQsWUFDWSx3QkFBa0QsRUFDbEQsZUFBZ0MsRUFDbEMscUJBQTRDLEVBQzVDLGVBQWdDLEVBQ2hDLEVBQWMsRUFDZCxjQUF1QjtRQUUvQixLQUFLLENBQUMsd0JBQXdCLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFQdkMsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUNsRCxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDbEMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1QyxvQkFBZSxHQUFm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LE1BQU0sS0FBSyxVQUFVLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUU7WUFDaEUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUM5QjtJQUNILENBQUM7SUFBQSxDQUFDO0lBRUY7Ozs7OztPQU1HO0lBQ0ssS0FBSyxDQUFDLGNBQWM7UUFDMUIsTUFBTSxFQUFFLFVBQVUsRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLGNBQWMsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3JGLE1BQU0sVUFBVSxHQUFHLFVBQVUsRUFBRSxVQUFVLENBQUM7UUFDMUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNsRCxJQUFJLENBQUMsWUFBWSxHQUFHLGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBbUJELDhCQUE4QjtJQUN0QixVQUFVO1FBQ2hCLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUN4RCxDQUFDOzsrR0E5UFUsa0JBQWtCO21HQUFsQixrQkFBa0Isc1RDcEIvQix3dUVBaURBOzJGRDdCYSxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsZUFBZTs4UEFPVCxFQUFFO3NCQURqQixXQUFXO3VCQUFDLFNBQVM7O3NCQUNyQixLQUFLO2dCQUdVLFNBQVM7c0JBQXhCLEtBQUs7Z0JBRVUsT0FBTztzQkFBdEIsS0FBSztnQkFDVSxPQUFPO3NCQUF0QixLQUFLO2dCQTJCZ0IsT0FBTztzQkFBNUIsU0FBUzt1QkFBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2RrQ29ubmVjdGVkT3ZlcmxheSwgT3ZlcmxheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0QmluZGluZywgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUNvbnRyb2wsIEZvcm1Db250cm9sU3RhdHVzLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IERhdGVUaW1lSGVscGVyIH0gZnJvbSAnLi4vLi4vY29yZS9kYXRlLXRpbWUtaGVscGVyJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbk1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29yZS92YWxpZGF0aW9uLW1lc3NhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IERhdGVEaXNwbGF5UGlwZSB9IGZyb20gJy4uLy4uL3NoYXJlZC9kaXNwbGF5L3BpcGVzL2RhdGUtZGlzcGxheS5waXBlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwSGVscGVyIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2Zvcm0tZ3JvdXAuaGVscGVyJztcclxuaW1wb3J0IHsgVXNlclByZWZlcmVuY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3VzZXItcHJlZmVyZW5jZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2FsZW5kYXJTZWxlY3Rpb24sIGlzQ2FsZW5kYXJTZWxlY3Rpb25TaW5nbGVEYXRlIH0gZnJvbSAnLi4vY2FsZW5kYXIvY2FsZW5kYXIudHlwZXMnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbEJhc2UgfSBmcm9tICcuLi9mb3JtLWNvbnRyb2wtYmFzZSc7XHJcblxyXG5leHBvcnQgdHlwZSBEYXRlSW5wdXRGb3JtQ29udHJvbCA9IEZvcm1Db250cm9sPERhdGUgfCBudWxsPjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnZWMtZGF0ZS1pbnB1dCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RhdGUtaW5wdXQuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgRGF0ZUlucHV0Q29tcG9uZW50IGV4dGVuZHMgRm9ybUNvbnRyb2xCYXNlIGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcclxuICBASW5wdXQoKSBwdWJsaWMgaWQ6IHN0cmluZyA9ICcnO1xyXG5cclxuICAvKiogVGhlIGZvcm0gY29udHJvbCBwcm92aWRlZCBieSB0aGUgaG9zdGluZyBmb3JtLiAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBmb3JtTW9kZWw6IERhdGVJbnB1dEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sPERhdGUgfCBudWxsPihudWxsKTtcclxuXHJcbiAgQElucHV0KCkgcHVibGljIG1pbkRhdGU6IERhdGUgPSBEYXRlVGltZUhlbHBlci5taW5EYXRlUGlja2VyRGF0ZTtcclxuICBASW5wdXQoKSBwdWJsaWMgbWF4RGF0ZTogRGF0ZSA9IERhdGVUaW1lSGVscGVyLm1heERhdGVQaWNrZXJEYXRlO1xyXG5cclxuICAvKiogVGhlIGludGVybmFsIHRleHRib3gncyBmb3JtIGNvbnRyb2wuICovXHJcbiAgcHVibGljIHRleHRib3hDb250cm9sID0gbmV3IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+KG51bGwpO1xyXG5cclxuICAvKipcclxuICAgKiBUaGUgY3VycmVudCBjYWxlbmRhciBzZWxlY3Rpb24uXHJcbiAgICogVXBkYXRlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBvbiBhIGNhbGVuZGFyIGl0ZW0gb3Igd2hlbiB0aGUgZGF0ZSBlbnRlcmVkIGludG8gdGhlIHRleHRib3ggaXMgcGFyc2VkLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBjYWxlbmRhclNlbGVjdGlvbjogQ2FsZW5kYXJTZWxlY3Rpb24gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgLyoqIENvbnRyb2xzIHdoZXRoZXIgdGhlIGNhbGVuZGFyIG92ZXJsYXkgaXMgb3BlbiBvciBub3QuICovXHJcbiAgcHVibGljIGlzQ2FsZW5kYXJPcGVuID0gZmFsc2U7XHJcblxyXG4gIC8qKiBQbGFjZWhvbGRlciBmb3IgdGhlIHRleHRib3guIFVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUgdXNlcidzIGRhdGUgZGlzcGxheSBwcmVmZXJlbmNlLiAqL1xyXG4gIHB1YmxpYyBwbGFjZWhvbGRlcjogc3RyaW5nID0gJ01NL0REL1lZWVknO1xyXG5cclxuICAvKiogT3ZlcmxheSBzY3JvbGwgc3RyYXRlZ3kgZm9yIHRoZSBjYWxlbmRhciBvdmVybGF5LiBDbG9zZXMgdGhlIGNhbGVuZGFyIG9uIHNjcm9sbC4gKi9cclxuICBwdWJsaWMgb3ZlcmxheVNjcm9sbFN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5U2VydmljZS5zY3JvbGxTdHJhdGVnaWVzLmNsb3NlKCk7XHJcblxyXG4gIC8qKiBcclxuICAgKiBEYXRlIHBhcnNpbmcgZm9ybWF0cyBmb3IgdXNlci1lbnRlcmVkIGRhdGVzLiBEZWZhdWx0cyB0byBtb250aC1maXJzdCBmb3JtYXRzLCBidXQgaXMgdXBkYXRlZCBpbiBvbkluaXRcclxuICAgKiB0byB1c2UgdGhlIHVzZXIncyBwcmVmZXJyZWQgZGF0ZSBmb3JtYXQuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBwYXJzZUZvcm1hdHM6IHN0cmluZ1tdID0gRGF0ZVRpbWVIZWxwZXIuZ2V0UGFyc2VGb3JtYXRzKCk7XHJcblxyXG4gIC8qKiBSZWZlcmVuY2UgdG8gdGhlIG92ZXJsYXkgZGlyZWN0aXZlIChzZWUgdGVtcGxhdGUpLiBVc2VkIHRvIGFjY2VzcyB0aGUgb3ZlcmxheSdzIGhvc3QgZWxlbWVudCB0byBjb250cm9sIGZvY3VzLiAqL1xyXG4gIEBWaWV3Q2hpbGQoJ292ZXJsYXknKSBvdmVybGF5PzogQ2RrQ29ubmVjdGVkT3ZlcmxheTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcm90ZWN0ZWQgdmFsaWRhdGlvbk1lc3NhZ2VTZXJ2aWNlOiBWYWxpZGF0aW9uTWVzc2FnZVNlcnZpY2UsXHJcbiAgICBwcm90ZWN0ZWQgZm9ybUdyb3VwSGVscGVyOiBGb3JtR3JvdXBIZWxwZXIsXHJcbiAgICBwcml2YXRlIHVzZXJQcmVmZXJlbmNlU2VydmljZTogVXNlclByZWZlcmVuY2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkYXRlRGlzcGxheVBpcGU6IERhdGVEaXNwbGF5UGlwZSxcclxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIG92ZXJsYXlTZXJ2aWNlOiBPdmVybGF5XHJcbiAgKSB7XHJcbiAgICBzdXBlcih2YWxpZGF0aW9uTWVzc2FnZVNlcnZpY2UsIGZvcm1Hcm91cEhlbHBlcik7XHJcbiAgfVxyXG5cclxuICAvKiogRm9jdXNlcyB0aGUgaW5wdXQgd2hlbmV2ZXIgdGhlIGNhbGVuZGFyIGlzIHNoaWZ0LXRhYmJlZCBvdXQgb2YuICovXHJcbiAgcHVibGljIG9uQ2FsZW5kYXJGb2N1c091dFN0YXJ0KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgdGhpcy5mb2N1c0lucHV0KCk7XHJcbiAgfVxyXG5cclxuICAvKiogQ2xvc2VzIHRoZSBjYWxlbmRhciBhbmQgZm9jdXNlcyB0aGUgaW5wdXQgd2hlbmV2ZXIgdGhlIGNhbGVuZGFyIGlzIHRhYmJlZCBvdXQgb2YuICovXHJcbiAgcHVibGljIG9uQ2FsZW5kYXJGb2N1c091dEVuZChldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIHRoaXMuaXNDYWxlbmRhck9wZW4gPSBmYWxzZTtcclxuICAgIHRoaXMuZm9jdXNJbnB1dCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqIENsb3NlIHRoZSBjYWxlbmRhciBpZiB0aGUgdXNlciBjbGlja3Mgb3V0c2lkZSBvZiB0aGUgY2FsZW5kYXIgYW5kIGRhdGUgaW5wdXQuICovXHJcbiAgcHVibGljIG9uT3ZlcmxheU91dHNpZGVDbGljayhldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgLy8gRG8gbm90IGNsb3NlIHRoZSBjYWxlbmRhciBpZiB0aGUgY2xpY2sgd2FzIHdpdGhpbiB0aGUgZGF0ZSBpbnB1dCBvciBhY3Rpb24gYnV0dG9uXHJcbiAgICBjb25zdCByZWN0ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgY29uc3QgY2xpY2tlZE91dHNpZGVDb250cm9sID0gZXZlbnQuY2xpZW50WSA8IHJlY3QudG9wIHx8XHJcbiAgICAgIGV2ZW50LmNsaWVudFkgPiByZWN0LmJvdHRvbSB8fFxyXG4gICAgICBldmVudC5jbGllbnRYIDwgcmVjdC5sZWZ0IHx8XHJcbiAgICAgIGV2ZW50LmNsaWVudFggPiByZWN0LnJpZ2h0O1xyXG4gICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSB1c2VyIGhpdCBlbnRlciBvbiB0aGUgYWN0aW9uIGJ1dHRvbiBpbnN0ZWFkIG9mIGNsaWNraW5nIHdpdGggdGhlIG1vdXNlLlxyXG4gICAgLy8gSW4gdGhpcyBjYXNlIHRoZSBcImNsaWNrXCIgZXZlbnQgd2lsbCBiZSBvdXRzaWRlIG9mIHRoZSBjb21wb25lbnQgYmVjYXVzZSB0aGUgY2xpZW50eCBhbmQgeSBhcmUgMCxcclxuICAgIC8vIGJ1dCB3ZSBkb24ndCB3YW50IHRvIGNsb3NlIGluIHRoaXMgY2FzZSBiZWNhdXNlIGJ1dHRvbiBjbGlja3MgdHJpZ2dlciBjYWxlbmRhciBvcGVuL2Nsb3NlIHNlcGFyYXRlbHkuXHJcbiAgICBjb25zdCBpc0FjdGlvbkNsaWNrID0gKDxIVE1MRWxlbWVudD5ldmVudC50YXJnZXQpLmlkID09PSBgJHt0aGlzLmlkfV9hY3Rpb25gO1xyXG5cclxuICAgIGlmICghaXNBY3Rpb25DbGljayAmJiBjbGlja2VkT3V0c2lkZUNvbnRyb2wpIHtcclxuICAgICAgdGhpcy5pc0NhbGVuZGFyT3BlbiA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIElmIHRoZSB1c2VyIHRhYnMgb3V0IG9mIHRoZSBmb3JtIGNvbnRyb2wncyBhY3Rpb24gYnV0dG9uIGFuZCB0aGUgY2FsZW5kYXIgaXMgb3BlbiwgZm9jdXMgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGNhbGVuZGFyIG92ZXJsYXkgKi9cclxuICBwdWJsaWMgb25BY3Rpb25LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnVGFiJyAmJiAhZXZlbnQuc2hpZnRLZXkgJiYgdGhpcy5pc0NhbGVuZGFyT3Blbikge1xyXG4gICAgICAvLyBQcmV2ZW50IHRoZSBkZWZhdWx0IHRhYiBhY3Rpb24gc28gdGhlIGZvY3VzIGRvZXNuJ3QgbW92ZSB0byB0aGUgbmV4dCBlbGVtZW50IGluIHRoZSB0YWIgb3JkZXIgYWZ0ZXIgd2UgbWFudWFsbHkgZm9jdXMgdGhlIGNhbGVuZGFyIGJ1dHRvbi5cclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgLy8gRm9jdXMgdGhlIGZpcnN0IGJ1dHRvbiBpbiB0aGUgY2FsZW5kYXIgb3ZlcmxheVxyXG4gICAgICBjb25zdCBmaXJzdEJ1dHRvbjogSFRNTEJ1dHRvbkVsZW1lbnQgfCBudWxsIHwgdW5kZWZpbmVkID0gdGhpcy5vdmVybGF5Py5vdmVybGF5UmVmLmhvc3RFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbjpub3QoOmRpc2FibGVkKScpO1xyXG4gICAgICBmaXJzdEJ1dHRvbj8uZm9jdXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblRleHRib3hLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnVGFiJyAmJiBldmVudC5zaGlmdEtleSkge1xyXG4gICAgICAvLyBJZiB0aGUgdXNlciBpcyB0YWJiaW5nIGJhY2t3YXJkcyBmcm9tIHRoZSB0ZXh0Ym94LCBjbG9zZSB0aGUgY2FsZW5kYXIuXHJcbiAgICAgIHRoaXMuaXNDYWxlbmRhck9wZW4gPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBXaGVuZXZlciB0aGUgdXNlciBzZWxlY3RzIGEgZGF0ZSBmcm9tIHRoZSBjYWxlbmRhciwgdXBkYXRlIHRoZSBmb3JtTW9kZWwgd2l0aCB0aGUgc2VsZWN0aW9uICovXHJcbiAgcHVibGljIG9uU2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGlvbjogQ2FsZW5kYXJTZWxlY3Rpb24gfCBudWxsKSB7XHJcbiAgICB0aGlzLmNhbGVuZGFyU2VsZWN0aW9uID0gc2VsZWN0aW9uO1xyXG4gICAgaWYgKGlzQ2FsZW5kYXJTZWxlY3Rpb25TaW5nbGVEYXRlKHNlbGVjdGlvbikpIHtcclxuICAgICAgdGhpcy5mb3JtTW9kZWwuc2V0VmFsdWUoc2VsZWN0aW9uKTtcclxuICAgICAgdGhpcy5pc0NhbGVuZGFyT3BlbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmZvY3VzSW5wdXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvblRleHRib3hCbHVyKCkge1xyXG4gICAgLy8gUGFyc2UgdGhlIHRleHRib3ggdmFsdWUgaW50byBhIGRhdGUgYW5kIHVwZGF0ZSB0aGUgZm9ybSBtb2RlbFxyXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnRleHRib3hDb250cm9sLnZhbHVlO1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIGNvbnN0IHBhcnNlZERhdGUgPSBtb21lbnQodmFsdWUsIHRoaXMucGFyc2VGb3JtYXRzKTtcclxuICAgICAgaWYgKHBhcnNlZERhdGUuaXNWYWxpZCgpKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtTW9kZWwuc2V0VmFsdWUocGFyc2VkRGF0ZS50b0RhdGUoKSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5mb3JtTW9kZWwuc2V0VmFsdWUobnVsbCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybU1vZGVsLnNldFZhbHVlKG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFVwZGF0ZSB0aGUgZm9ybSBtb2RlbCdzIHRvdWNoZWQgYW5kIGRpcnR5IHN0YXR1cyBiYXNlZCBvbiB0aGUgdGV4dGJveCdzIHN0YXR1cy5cclxuICAgIC8vIFNpbmNlIHRoZSB1c2VyIGludGVyYWN0cyB3aXRoIGEgY29udHJvbCB0aGF0IGlzIGludGVybmFsIHRvIHRoaXMgY29tcG9uZW50LCB0aGVcclxuICAgIC8vIGZvcm0gbW9kZWwncyBzdGF0dXMgd29uJ3QgYmUgdXBkYXRlZCBhdXRvbWF0aWNhbGx5LlxyXG4gICAgaWYgKHRoaXMudGV4dGJveENvbnRyb2wudG91Y2hlZCAmJiAhdGhpcy5mb3JtTW9kZWwudG91Y2hlZCkge1xyXG4gICAgICB0aGlzLmZvcm1Nb2RlbC5tYXJrQXNUb3VjaGVkKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy50ZXh0Ym94Q29udHJvbC5kaXJ0eSAmJiAhdGhpcy5mb3JtTW9kZWwuZGlydHkpIHtcclxuICAgICAgdGhpcy5mb3JtTW9kZWwubWFya0FzRGlydHkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgLy8gU2V0dXBcclxuICAgIHN1cGVyLm5nT25Jbml0KCk7XHJcbiAgICB0aGlzLnNldERhdGVGb3JtYXRzKCk7XHJcblxyXG4gICAgdGhpcy5mb3JtTW9kZWwuYWRkVmFsaWRhdG9ycyh0aGlzLmRhdGVWYWxpZGF0b3IpO1xyXG5cclxuICAgIC8vIFN1YnNjcmlwdGlvbnNcclxuICAgIHRoaXMub25Gb3JtTW9kZWxTdGF0dXNDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLm9uRm9ybU1vZGVsVmFsdWVDaGFuZ2VzKCk7XHJcbiAgICB0aGlzLm9uVGV4dGJveFZhbHVlQ2hhbmdlcygpO1xyXG5cclxuICAgIC8vIFN5bmMgdGhlIGluaXRpYWwgZGlzYWJsZWQgc3RhdHVzIGFuZCB2YWx1ZSBvZiB0aGUgdGV4dGJveFxyXG4gICAgdGhpcy5zeW5jVGV4dGJveENvbnRyb2xEaXNhYmxlZFN0YXR1cyh0aGlzLmZvcm1Nb2RlbC5zdGF0dXMpO1xyXG4gICAgdGhpcy50ZXh0Ym94Q29udHJvbC5zZXRWYWx1ZSh0aGlzLmRhdGVEaXNwbGF5UGlwZS50cmFuc2Zvcm0odGhpcy5mb3JtTW9kZWwudmFsdWUsIHRydWUpLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB0aGlzLmNhbGVuZGFyU2VsZWN0aW9uID0gdGhpcy5mb3JtTW9kZWwudmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uRm9ybU1vZGVsU3RhdHVzQ2hhbmdlcygpIHtcclxuICAgIC8vIEtlZXAgdGhlIHRleHRib3hDb250cm9sIGRpc2FibGVkIHN0YXR1cyBpbiBzeW5jIHdpdGggdGhlIGZvcm1Nb2RlbFxyXG4gICAgdGhpcy5mb3JtTW9kZWwuc3RhdHVzQ2hhbmdlcy5waXBlKFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5jb21wb25lbnREZXN0cm95ZWQpXHJcbiAgICApLnN1YnNjcmliZShzdGF0dXMgPT4ge1xyXG4gICAgICB0aGlzLnN5bmNUZXh0Ym94Q29udHJvbERpc2FibGVkU3RhdHVzKHN0YXR1cyk7XHJcblxyXG4gICAgICBpZiAodGhpcy5pc0NhbGVuZGFyT3Blbikge1xyXG4gICAgICAgIC8vIEFzIHZhbGlkYXRpb24gbWVzc2FnZXMgYXBwZWFyL2Rpc2FwcGVhciwgdGhlIGRhdGUgaW5wdXQgbWF5IGhhdmUgc2hpZnRlZCB1cCBvciBkb3duIG9uIHRoZSBwYWdlLlxyXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgb3ZlcmxheSBwb3NpdGlvbiB0byBlbnN1cmUgaXQncyBzdGlsbCBhbGlnbmVkIHdpdGggdGhlIHRleHRib3ggYW5kIG5vdCBibG9ja2luZyBpdC5cclxuICAgICAgICAvLyBTZXR0aW1lb3V0IGlzIG5lZWRlZCB0byBlbnN1cmUgdGhlIG92ZXJsYXkgaXMgYmVpbmcgdXBkYXRlZCBhZnRlciB0aGUgbWVzc2FnZSBpcyByZW5kZXJlZC5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMub3ZlcmxheT8ub3ZlcmxheVJlZj8udXBkYXRlUG9zaXRpb24oKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9uRm9ybU1vZGVsVmFsdWVDaGFuZ2VzKCkge1xyXG4gICAgLy8gVXBkYXRlIHRoZSBjYWxlbmRhciBzZWxlY3Rpb24gdGV4dGJveCB2YWx1ZSB3aXRoIGEgZm9ybWF0dGVkIGRhdGUgd2hlbiB0aGUgZm9ybSBtb2RlbCBjaGFuZ2VzLlxyXG4gICAgLy8gVGhpcyBpcyB1c3VhbGx5IHRyaWdnZXJlZCBieSBwcm9ncmFtbWF0aWMgY2hhbmdlcyB0byB0aGUgZm9ybSBtb2RlbCBieSBhIHBhcmVudCBjb21wb25lbnQuXHJcbiAgICB0aGlzLmZvcm1Nb2RlbC52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKGEsIGIpID0+IG1vbWVudChhKS5pc1NhbWUoYiwgJ2RheScpKSxcclxuICAgICAgdGFrZVVudGlsKHRoaXMuY29tcG9uZW50RGVzdHJveWVkKVxyXG4gICAgKS5zdWJzY3JpYmUodmFsdWUgPT4ge1xyXG4gICAgICBjb25zdCBkaXNwbGF5VmFsdWUgPSB0aGlzLmRhdGVEaXNwbGF5UGlwZS50cmFuc2Zvcm0odmFsdWUsIHRydWUpO1xyXG4gICAgICAvLyBEb24ndCBlbWl0IGFuIGV2ZW50IHdoZW4gc2V0dGluZyB0aGUgdGV4dGJveCB2YWx1ZSB0byBhdm9pZCBjaXJjdWxhciB1cGRhdGVzIGJldHdlZW4gdGhlIHRleHRib3ggYW5kIGZvcm0gbW9kZWwuXHJcbiAgICAgIHRoaXMudGV4dGJveENvbnRyb2wuc2V0VmFsdWUoZGlzcGxheVZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgIHRoaXMuY2FsZW5kYXJTZWxlY3Rpb24gPSB2YWx1ZTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBvblRleHRib3hWYWx1ZUNoYW5nZXMoKSB7XHJcbiAgICAvLyBVcGRhdGUgdGhlIGNhbGVuZGFyIHNlbGVjdGlvbiB3aGVuIHRoZSB0ZXh0Ym94IHZhbHVlIGNoYW5nZXMgdG8gdXBkYXRlIHRoZSBjYWxlbmRhci5cclxuICAgIC8vIFdlIGRvbid0IHBhdGNoIHRoZSBmb3JtTW9kZWwgaGVyZSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gdHJpZ2dlciB0aGVcclxuICAgIC8vIGRhdGUgZm9ybWF0dGluZyBsb2dpYyBhbmQgb3ZlcndyaXRlIHRoZSB1c2VyJ3MgaW5wdXQuXHJcbiAgICAvLyBXZSdsbCBkbyB0aGF0IHdoZW4gdGhlIHVzZXIgYmx1cnMgb3V0IG9mIHRoZSB0ZXh0Ym94LiBTZWUgb25UZXh0Ym94Qmx1cigpXHJcbiAgICB0aGlzLnRleHRib3hDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxyXG4gICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcclxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcclxuICAgICAgdGFrZVVudGlsKHRoaXMuY29tcG9uZW50RGVzdHJveWVkKVxyXG4gICAgKS5zdWJzY3JpYmUodmFsdWUgPT4ge1xyXG4gICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICBjb25zdCBwYXJzZWREYXRlID0gbW9tZW50KHZhbHVlLCB0aGlzLnBhcnNlRm9ybWF0cyk7XHJcbiAgICAgICAgaWYgKHBhcnNlZERhdGUuaXNWYWxpZCgpKSB7XHJcbiAgICAgICAgICAvLyBJZiB0aGUgcGFyc2VkIGRhdGUgaXMgYmVmb3JlIHRoZSBtaW5EYXRlLCBzZXQgdGhlIHllYXIgdG8gdGhlIGN1cnJlbnQgeWVhci5cclxuICAgICAgICAgIC8vIFRoaXMgcHJldmVudHMgdGhlIGNhbGVuZGFyIGZyb20gc2hvd2luZyB1bmhlbHBmdWwgZGF0ZXMgaW4gdGhlIGRpc3RhbnQgcGFzdCBhcyB0aGUgdXNlciB0eXBlc1xyXG4gICAgICAgICAgaWYgKHBhcnNlZERhdGUueWVhcigpIDwgdGhpcy5taW5EYXRlLmdldEZ1bGxZZWFyKCkpIHtcclxuICAgICAgICAgICAgcGFyc2VkRGF0ZS5zZXQoJ3llYXInLCBtb21lbnQoKS55ZWFyKCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5jYWxlbmRhclNlbGVjdGlvbiA9IHBhcnNlZERhdGUudG9EYXRlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY2FsZW5kYXJTZWxlY3Rpb24gPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3luY1RleHRib3hDb250cm9sRGlzYWJsZWRTdGF0dXMoc3RhdHVzOiBGb3JtQ29udHJvbFN0YXR1cykge1xyXG4gICAgLy8gVGhlIHRleHRib3ggc2hvdWxkIG9ubHkgYmUgZGlzYWJsZWQgaWYgdGhlIGZvcm0gbW9kZWwgaXMgZGlzYWJsZWQuXHJcbiAgICAvLyBBbGwgb3RoZXIgc3RhdHVzZXMgYXJlIGNvbnNpZGVyZWQgZW5hYmxlZC5cclxuICAgIGlmIChzdGF0dXMgPT09ICdESVNBQkxFRCcgJiYgdGhpcy50ZXh0Ym94Q29udHJvbC5lbmFibGVkKSB7XHJcbiAgICAgIHRoaXMudGV4dGJveENvbnRyb2wuZGlzYWJsZSgpO1xyXG4gICAgfSBlbHNlIGlmIChzdGF0dXMgIT09ICdESVNBQkxFRCcgJiYgdGhpcy50ZXh0Ym94Q29udHJvbC5kaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLnRleHRib3hDb250cm9sLmVuYWJsZSgpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIC8qKiBcclxuICAgKiBVcGRhdGVzIHRoZSBkYXRlIHBhcnNpbmcgZm9ybWF0cyBhbmQgcGxhY2Vob2xkZXIgYmFzZWQgb24gdGhlIHVzZXIncyBkaXNwbGF5IHByZWZlcmVuY2UuXHJcbiAgICogTk9URTogVGhpcyBpcyBhc3luYyBiZWNhdXNlIHdlJ3JlIHJldHJpZXZpbmcgdGhlIHVzZXIncyBwcmVmZXJlbmNlcy4gV2UncmUgbm90IGF3YWl0aW5nIHRoZSByZXN1bHRcclxuICAgKiBiZWNhdXNlIHRoZSBvbmx5IGxvZ2ljIHRoYXQgZGVwZW5kcyBvbiB0aGlzIGlzIHRoZSB0ZXh0IGJveCBkYXRlIHBhcnNpbmcgbG9naWMgYW5kIHBsYWNlaG9sZGVyLlxyXG4gICAqIE91ciBmb3JtcyBzaG91bGQgYWx3YXlzIGJlIGJlaGluZCBhIHBlbmRpbmcgb3ZlcmxheSwgc28gdGhlIHVzZXIgd29uJ3QgYmUgYWJsZSB0byBpbnRlcmFjdCB3aXRoIHRoZVxyXG4gICAqIGZvcm0gdW50aWwgdGhlIHVzZXIgaXMgbG9hZGVkIGFueXdheS5cclxuICAgKi9cclxuICBwcml2YXRlIGFzeW5jIHNldERhdGVGb3JtYXRzKCkge1xyXG4gICAgY29uc3QgeyBwcmVmZXJlbmNlIH0gPSBhd2FpdCB0aGlzLnVzZXJQcmVmZXJlbmNlU2VydmljZS5nZXRQcmVmZXJlbmNlcygpLnRvUHJvbWlzZSgpO1xyXG4gICAgY29uc3QgZGF0ZUZvcm1hdCA9IHByZWZlcmVuY2U/LmRhdGVGb3JtYXQ7XHJcbiAgICB0aGlzLnBsYWNlaG9sZGVyID0gZGF0ZUZvcm1hdCA/PyB0aGlzLnBsYWNlaG9sZGVyO1xyXG4gICAgdGhpcy5wYXJzZUZvcm1hdHMgPSBEYXRlVGltZUhlbHBlci5nZXRNb21lbnRQYXJzZUZvcm1hdHMoZGF0ZUZvcm1hdCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWYWxpZGF0b3IgdGhhdCBjaGVja3MgaWYgdGhlIGRhdGUgaXMgd2l0aGluIHRoZSBtaW4gYW5kIG1heCBkYXRlIHJhbmdlLlxyXG4gICAqIElmIHRoZSBkYXRlIGlzIG91dHNpZGUgb2YgdGhlIHJhbmdlLCB0aGUgdmFsaWRhdG9yIHJldHVybnMgYW4gZXJyb3IgdGhhdFxyXG4gICAqIHRyaWdnZXJzIHRoZSB2YWxpZGF0aW9uIG1lc3NhZ2Ugc2VydmljZSB0byBzaG93IHRoZSBlcnJvciBpbiB0aGUgbGFiZWwuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBkYXRlVmFsaWRhdG9yOiBWYWxpZGF0b3JGbiA9IChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcclxuICAgIGlmIChjb250cm9sLnZhbHVlKSB7XHJcbiAgICAgIGlmIChjb250cm9sLnZhbHVlIDwgdGhpcy5taW5EYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgbWluRGF0ZTogeyBtaW5WYWx1ZTogdGhpcy5taW5EYXRlIH0gfTtcclxuICAgICAgfSBlbHNlIGlmIChjb250cm9sLnZhbHVlID4gdGhpcy5tYXhEYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgbWF4RGF0ZTogeyBtYXhWYWx1ZTogdGhpcy5tYXhEYXRlIH0gfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH07XHJcblxyXG4gIC8qKiBGb2N1c2VzIHRoZSBkYXRlIGlucHV0LiAqL1xyXG4gIHByaXZhdGUgZm9jdXNJbnB1dCgpIHtcclxuICAgIHRoaXMuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpPy5mb2N1cygpO1xyXG4gIH1cclxufVxyXG4iLCI8bGFiZWwgKm5nSWY9XCJsYWJlbFwiPlxyXG4gIDxzcGFuPnt7bGFiZWwgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cclxuICA8c3BhbiAqbmdJZj1cInZhbGlkYXRpb25FcnJvcnMubGVuZ3RoID4gMCAmJiBmb3JtTW9kZWwudG91Y2hlZCAmJiBmb3JtTW9kZWwuaW52YWxpZFwiPiZuYnNwO3t7dmFsaWRhdGlvbkVycm9yc319PC9zcGFuPlxyXG4gIDxlYy1oZWxwLXBvcG92ZXIgaWQ9XCJ7e2lkfX1faGVscFBvcG92ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoZWxwUG9wb3ZlclwiXHJcbiAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtaW5saW5lLWJsb2NrIG15LW4zIG14LW4xXCJcclxuICAgICAgICAgICAgICAgICAgIHRleHQ9XCJ7e2hlbHBQb3BvdmVyIHwgdHJhbnNsYXRlfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgY29udGVudFBvc2l0aW9uPVwie3toZWxwUG9wb3ZlclBvc2l0aW9ufX1cIj5cclxuICA8L2VjLWhlbHAtcG9wb3Zlcj5cclxuPC9sYWJlbD5cclxuXHJcbjxlYy1mb3JtLWNvbnRyb2wgaWQ9XCJ7e2lkfX1cIlxyXG4gICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXHJcbiAgICAgICAgICAgICAgICAgW2F1dG9mb2N1c109XCJhdXRvZm9jdXNcIlxyXG4gICAgICAgICAgICAgICAgIFtwZW5kaW5nXT1cInBlbmRpbmdcIlxyXG4gICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXHJcbiAgICAgICAgICAgICAgICAgW2Zvcm1Nb2RlbF09XCJmb3JtTW9kZWxcIlxyXG4gICAgICAgICAgICAgICAgIChhY3Rpb25DbGlja2VkKT1cImlzQ2FsZW5kYXJPcGVuID0gIWlzQ2FsZW5kYXJPcGVuXCJcclxuICAgICAgICAgICAgICAgICAoYWN0aW9uS2V5ZG93bik9XCJvbkFjdGlvbktleWRvd24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgW3Nob3dDbGVhcl09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgYWN0aW9uSWNvbj1cImljb24tZGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgY2RrT3ZlcmxheU9yaWdpblxyXG4gICAgICAgICAgICAgICAgICNvdmVybGF5T3JpZ2luPVwiY2RrT3ZlcmxheU9yaWdpblwiPlxyXG4gIDxpbnB1dCBpZD1cInt7aWR9fV9pbnB1dFwiXHJcbiAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e3BsYWNlaG9sZGVyfX1cIlxyXG4gICAgICAgICBbZm9ybUNvbnRyb2xdPVwidGV4dGJveENvbnRyb2xcIlxyXG4gICAgICAgICAoYmx1cik9XCJvblRleHRib3hCbHVyKClcIlxyXG4gICAgICAgICAoa2V5ZG93bik9XCJvblRleHRib3hLZXlkb3duKCRldmVudClcIj5cclxuPC9lYy1mb3JtLWNvbnRyb2w+XHJcblxyXG48bmctdGVtcGxhdGUgY2RrQ29ubmVjdGVkT3ZlcmxheVxyXG4gICAgICAgICAgICAgI292ZXJsYXk9XCJjZGtDb25uZWN0ZWRPdmVybGF5XCJcclxuICAgICAgICAgICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luXT1cIm92ZXJsYXlPcmlnaW5cIlxyXG4gICAgICAgICAgICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcGVuXT1cImlzQ2FsZW5kYXJPcGVuXCJcclxuICAgICAgICAgICAgIFtjZGtDb25uZWN0ZWRPdmVybGF5U2Nyb2xsU3RyYXRlZ3ldPVwib3ZlcmxheVNjcm9sbFN0cmF0ZWd5XCJcclxuICAgICAgICAgICAgIGNka0Nvbm5lY3RlZE92ZXJsYXlQYW5lbENsYXNzPVwibXktMVwiXHJcbiAgICAgICAgICAgICAob3ZlcmxheU91dHNpZGVDbGljayk9XCJvbk92ZXJsYXlPdXRzaWRlQ2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAoZGV0YWNoKT1cImlzQ2FsZW5kYXJPcGVuID0gZmFsc2VcIj5cclxuICA8ZWMtY2FsZW5kYXIgW2lkXT1cImlkICsgJ19jYWxlbmRhcidcIlxyXG4gICAgICAgICAgICAgICBbbWluRGF0ZV09XCJtaW5EYXRlXCJcclxuICAgICAgICAgICAgICAgW21heERhdGVdPVwibWF4RGF0ZVwiXHJcbiAgICAgICAgICAgICAgIFtzZWxlY3Rpb25dPVwiY2FsZW5kYXJTZWxlY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICBjbGFzcz1cImNhcmQgcHgtMSBwdC0xIHBiLTJcIlxyXG4gICAgICAgICAgICAgICAoZm9jdXNPdXRTdGFydCk9XCJvbkNhbGVuZGFyRm9jdXNPdXRTdGFydCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgKGZvY3VzT3V0RW5kKT1cIm9uQ2FsZW5kYXJGb2N1c091dEVuZCgkZXZlbnQpXCI+XHJcbiAgPC9lYy1jYWxlbmRhcj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
@@ -4123,6 +4123,8 @@ class DateInputComponent extends FormControlBase {
4123
4123
  this.calendarSelection = selection;
4124
4124
  if (isCalendarSelectionSingleDate(selection)) {
4125
4125
  this.formModel.setValue(selection);
4126
+ this.isCalendarOpen = false;
4127
+ this.focusInput();
4126
4128
  }
4127
4129
  }
4128
4130
  onTextboxBlur() {
@@ -4161,7 +4163,7 @@ class DateInputComponent extends FormControlBase {
4161
4163
  this.onTextboxValueChanges();
4162
4164
  // Sync the initial disabled status and value of the textbox
4163
4165
  this.syncTextboxControlDisabledStatus(this.formModel.status);
4164
- this.textboxControl.setValue(this.dateDisplayPipe.transform(this.formModel.value), { emitEvent: false });
4166
+ this.textboxControl.setValue(this.dateDisplayPipe.transform(this.formModel.value, true), { emitEvent: false });
4165
4167
  this.calendarSelection = this.formModel.value;
4166
4168
  }
4167
4169
  onFormModelStatusChanges() {
@@ -4183,7 +4185,7 @@ class DateInputComponent extends FormControlBase {
4183
4185
  // Update the calendar selection textbox value with a formatted date when the form model changes.
4184
4186
  // This is usually triggered by programmatic changes to the form model by a parent component.
4185
4187
  this.formModel.valueChanges.pipe(distinctUntilChanged((a, b) => moment(a).isSame(b, 'day')), takeUntil(this.componentDestroyed)).subscribe(value => {
4186
- const displayValue = this.dateDisplayPipe.transform(value);
4188
+ const displayValue = this.dateDisplayPipe.transform(value, true);
4187
4189
  // Don't emit an event when setting the textbox value to avoid circular updates between the textbox and form model.
4188
4190
  this.textboxControl.setValue(displayValue, { emitEvent: false });
4189
4191
  this.calendarSelection = value;