igniteui-angular 17.2.0-beta.2 → 17.2.0

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.
@@ -363,6 +363,7 @@ export class IgxCalendarComponent extends IgxCalendarBaseDirective {
363
363
  event.stopPropagation();
364
364
  this.showActiveDay = false;
365
365
  this.monthViews.forEach(view => view.clearPreviewRange());
366
+ this._onTouchedCallback();
366
367
  }
367
368
  handleArrowKeydown(event, delta) {
368
369
  event.preventDefault();
@@ -900,4 +901,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
900
901
  type: HostListener,
901
902
  args: ['mousedown', ['$event']]
902
903
  }] } });
903
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFDTCxTQUFTLEVBR1QsWUFBWSxFQUdaLGdCQUFnQixFQUNiLFlBQVksR0FDZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkQsT0FBTyxFQUNOLGtDQUFrQyxFQUMvQix1Q0FBdUMsRUFDMUMscUNBQXFDLEVBQ2xDLDhCQUE4QixHQUNqQyxNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxlQUFlLEVBQW1CLE1BQU0sWUFBWSxDQUFDO0FBQzlELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFFLE9BQU8s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TUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFO2dCQVUxQyxVQUFVO3NCQURoQixZQUFZO3VCQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRTtnQkFVN0MsV0FBVztzQkFEakIsU0FBUzt1QkFBQyxhQUFhO2dCQVVqQixXQUFXO3NCQURqQixTQUFTO3VCQUFDLGFBQWE7Z0JBNEliLHVCQUF1QjtzQkFEOUIsWUFBWTt1QkFBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsa0NBQWtDLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVF0SCw0QkFBNEI7c0JBRG5DLFlBQVk7dUJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHVDQUF1QyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFTaEksMEJBQTBCO3NCQURqQyxZQUFZO3VCQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxxQ0FBcUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLHFDQUFxQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBc0MxSCxXQUFXO3NCQURwQixZQUFZO3VCQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdENvbXBvbmVudCxcblx0Q29udGVudENoaWxkLFxuXHRmb3J3YXJkUmVmLFxuXHRIb3N0QmluZGluZyxcblx0SW5wdXQsXG5cdFZpZXdDaGlsZCxcblx0RWxlbWVudFJlZixcblx0QWZ0ZXJWaWV3SW5pdCxcblx0Vmlld0NoaWxkcmVuLFxuXHRRdWVyeUxpc3QsXG5cdE9uRGVzdHJveSxcblx0Ym9vbGVhbkF0dHJpYnV0ZSxcbiAgICBIb3N0TGlzdGVuZXIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCwgTmdTdHlsZSwgTmdGb3IsIERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQge1xuXHRJZ3hDYWxlbmRhckhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIElneENhbGVuZGFySGVhZGVyVGl0bGVUZW1wbGF0ZURpcmVjdGl2ZSxcblx0SWd4Q2FsZW5kYXJTdWJoZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBJZ3hDYWxlbmRhclNjcm9sbFBhZ2VEaXJlY3RpdmUsXG59IGZyb20gJy4vY2FsZW5kYXIuZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBJZ3hDYWxlbmRhclZpZXcsIFNjcm9sbERpcmVjdGlvbiB9IGZyb20gJy4vY2FsZW5kYXInO1xuaW1wb3J0IHsgSWd4TW9udGhzVmlld0NvbXBvbmVudCB9IGZyb20gJy4vbW9udGhzLXZpZXcvbW9udGhzLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IElneFllYXJzVmlld0NvbXBvbmVudCB9IGZyb20gJy4veWVhcnMtdmlldy95ZWFycy12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hEYXlzVmlld0NvbXBvbmVudCB9IGZyb20gJy4vZGF5cy12aWV3L2RheXMtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgaW50ZXJ2YWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCwgZGVib3VuY2UsIHNraXBMYXN0LCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJZ3hNb250aFZpZXdTbG90c0NhbGVuZGFyLCBJZ3hHZXRWaWV3RGF0ZUNhbGVuZGFyIH0gZnJvbSAnLi9tb250aHMtdmlldy5waXBlJztcbmltcG9ydCB7IElneEljb25Db21wb25lbnQgfSBmcm9tICcuLi9pY29uL2ljb24uY29tcG9uZW50JztcbmltcG9ydCB7IGFyZVNhbWVNb250aCwgZm9ybWF0VG9QYXJ0cywgZ2V0Q2xvc2VzdEFjdGl2ZURhdGUsIGlzRGF0ZUluUmFuZ2VzIH0gZnJvbSAnLi9jb21tb24vaGVscGVycyc7XG5pbXBvcnQgeyBDYWxlbmRhckRheSB9IGZyb20gJy4vY29tbW9uL21vZGVsJztcbmltcG9ydCB7IElneENhbGVuZGFyQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4vY2FsZW5kYXItYmFzZSc7XG5pbXBvcnQgeyBLZXlib2FyZE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9jYWxlbmRhci5zZXJ2aWNlcyc7XG5cbmxldCBORVhUX0lEID0gMDtcblxuLyoqXG4gKiBDYWxlbmRhciBwcm92aWRlcyBhIHdheSB0byBkaXNwbGF5IGRhdGUgaW5mb3JtYXRpb24uXG4gKlxuICogQGlneE1vZHVsZSBJZ3hDYWxlbmRhck1vZHVsZVxuICpcbiAqIEBpZ3hUaGVtZSBpZ3gtY2FsZW5kYXItdGhlbWUsIGlneC1pY29uLXRoZW1lXG4gKlxuICogQGlneEtleXdvcmRzIGNhbGVuZGFyLCBkYXRlcGlja2VyLCBzY2hlZHVsZSwgZGF0ZVxuICpcbiAqIEBpZ3hHcm91cCBTY2hlZHVsaW5nXG4gKlxuICogQHJlbWFya3NcbiAqIFRoZSBJZ25pdGUgVUkgQ2FsZW5kYXIgcHJvdmlkZXMgYW4gZWFzeSB3YXkgdG8gZGlzcGxheSBhIGNhbGVuZGFyIGFuZCBhbGxvdyB1c2VycyB0byBzZWxlY3QgZGF0ZXMgdXNpbmcgc2luZ2xlLCBtdWx0aXBsZVxuICogb3IgcmFuZ2Ugc2VsZWN0aW9uLlxuICpcbiAqIEBleGFtcGxlOlxuICogYGBgaHRtbFxuICogPGlneC1jYWxlbmRhciBzZWxlY3Rpb249XCJyYW5nZVwiPjwvaWd4LWNhbGVuZGFyPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuXHRwcm92aWRlcnM6IFtcblx0XHR7XG5cdFx0XHRtdWx0aTogdHJ1ZSxcblx0XHRcdHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuXHRcdFx0dXNlRXhpc3Rpbmc6IElneENhbGVuZGFyQ29tcG9uZW50LFxuXHRcdH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIG11bHRpOiBmYWxzZSxcbiAgICAgICAgICAgIHByb3ZpZGU6IEtleWJvYXJkTmF2aWdhdGlvblNlcnZpY2UsXG4gICAgICAgIH0sXG5cdF0sXG5cdHNlbGVjdG9yOiAnaWd4LWNhbGVuZGFyJyxcblx0dGVtcGxhdGVVcmw6ICdjYWxlbmRhci5jb21wb25lbnQuaHRtbCcsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdGltcG9ydHM6IFtOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0LCBJZ3hDYWxlbmRhclNjcm9sbFBhZ2VEaXJlY3RpdmUsIE5nU3R5bGUsIElneEljb25Db21wb25lbnQsIE5nRm9yLCBJZ3hEYXlzVmlld0NvbXBvbmVudCwgSWd4TW9udGhzVmlld0NvbXBvbmVudCwgSWd4WWVhcnNWaWV3Q29tcG9uZW50LCBEYXRlUGlwZSwgSWd4TW9udGhWaWV3U2xvdHNDYWxlbmRhciwgSWd4R2V0Vmlld0RhdGVDYWxlbmRhcl0sXG59KVxuZXhwb3J0IGNsYXNzIElneENhbGVuZGFyQ29tcG9uZW50IGV4dGVuZHMgSWd4Q2FsZW5kYXJCYXNlRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfYWN0aXZlRGVzY2VuZGFudDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoXCJ3cmFwcGVyXCIpXG4gICAgcHVibGljIHdyYXBwZXI6IEVsZW1lbnRSZWY7XG5cblx0LyoqXG5cdCAqIFNldHMvZ2V0cyB0aGUgYGlkYCBvZiB0aGUgY2FsZW5kYXIuXG5cdCAqXG5cdCAqIEByZW1hcmtzXG5cdCAqIElmIG5vdCBzZXQsIHRoZSBgaWRgIHdpbGwgaGF2ZSB2YWx1ZSBgXCJpZ3gtY2FsZW5kYXItMFwiYC5cblx0ICpcblx0ICogQGV4YW1wbGVcblx0ICogYGBgaHRtbFxuXHQgKiA8aWd4LWNhbGVuZGFyIGlkPVwibXktZmlyc3QtY2FsZW5kYXJcIj48L2lneC1jYWxlbmRhcj5cblx0ICogYGBgXG5cdCAqIEBtZW1iZXJvZiBJZ3hDYWxlbmRhckNvbXBvbmVudFxuXHQgKi9cblx0QEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcblx0QElucHV0KClcblx0cHVibGljIGlkID0gYGlneC1jYWxlbmRhci0keyBORVhUX0lEKysgfWA7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgd2hldGhlciB0aGUgY2FsZW5kYXIgaGFzIGhlYWRlci5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2FsZW5kYXIgW2hhc0hlYWRlcl09XCJmYWxzZVwiPjwvaWd4LWNhbGVuZGFyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBoYXNIZWFkZXIgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHdoZXRoZXIgdGhlIGNhbGVuZGFyIGhlYWRlciB3aWxsIGJlIGluIHZlcnRpY2FsIHBvc2l0aW9uLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2FsZW5kYXIgW3ZlcnRpY2FsXT1cInRydWVcIj48L2lneC1jYWxlbmRhcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgdmVydGljYWwgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG9yaWVudGF0aW9uOiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnID0gJ2hvcml6b250YWwnO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaGVhZGVyT3JpZW50YXRpb246ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCcgPSAnaG9yaXpvbnRhbCc7XG5cblx0LyoqXG5cdCAqIFNldHMvZ2V0cyB0aGUgbnVtYmVyIG9mIG1vbnRoIHZpZXdzIGRpc3BsYXllZC5cblx0ICogRGVmYXVsdCB2YWx1ZSBpcyBgMWAuXG5cdCAqXG5cdCAqIEBleGFtcGxlXG5cdCAqIGBgYGh0bWxcblx0ICogPGlneC1jYWxlbmRhciBbbW9udGhzVmlld051bWJlcl09XCIyXCI+PC9pZ3gtY2FsZW5kYXI+XG5cdCAqIGBgYFxuXHQgKi9cblx0QElucHV0KClcblx0cHVibGljIGdldCBtb250aHNWaWV3TnVtYmVyKCkge1xuXHRcdHJldHVybiB0aGlzLl9tb250aHNWaWV3TnVtYmVyO1xuXHR9XG5cbiAgICBwdWJsaWMgc2V0IG1vbnRoc1ZpZXdOdW1iZXIodmFsOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHZhbCA8IDEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG5cdFx0dGhpcy5fbW9udGhzVmlld051bWJlciA9IHZhbDtcblx0fVxuXG4gICAgLyoqXG4gICAgICogU2hvdy9oaWRlIHdlZWsgbnVtYmVyc1xuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYWxlbmRhciBbc2hvd1dlZWtOdW1iZXJzXT1cInRydWVcIj48L2lneC1jYWxlbmRhcj5cbiAgICAgKiBgYFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBzaG93V2Vla051bWJlcnMgPSBmYWxzZTtcblxuXHQvKipcblx0ICogVGhlIGRlZmF1bHQgY3NzIGNsYXNzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWNhbGVuZGFyLS12ZXJ0aWNhbCcpXG5cdHB1YmxpYyBnZXQgc3R5bGVWZXJ0aWNhbENsYXNzKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmhlYWRlck9yaWVudGF0aW9uID09PSAndmVydGljYWwnO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBkZWZhdWx0IGNzcyBjbGFzcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1jYWxlbmRhcicpXG5cdHB1YmxpYyBzdHlsZUNsYXNzID0gdHJ1ZTtcblxuXHQvKipcblx0ICogTW9udGggYnV0dG9uLCB0aGF0IGRpc3BsYXlzIHRoZSBtb250aHMgdmlldy5cblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdEBWaWV3Q2hpbGRyZW4oJ21vbnRoc0J0bicpXG5cdHB1YmxpYyBtb250aHNCdG5zOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cblx0LyoqXG5cdCAqIFZpZXdDaGlsZCB0aGF0IHJlcHJlc2VudHMgdGhlIGRlY2FkZSB2aWV3LlxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0QFZpZXdDaGlsZCgnZGVjYWRlJywgeyByZWFkOiBJZ3hZZWFyc1ZpZXdDb21wb25lbnQgfSlcblx0cHVibGljIGRhY2FkZVZpZXc6IElneFllYXJzVmlld0NvbXBvbmVudDtcblxuXHQvKipcblx0ICogVmlld0NoaWxkIHRoYXQgcmVwcmVzZW50cyB0aGUgbW9udGhzIHZpZXcuXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRAVmlld0NoaWxkKCdtb250aHMnLCB7IHJlYWQ6IElneE1vbnRoc1ZpZXdDb21wb25lbnQgfSlcblx0cHVibGljIG1vbnRoc1ZpZXc6IElneE1vbnRoc1ZpZXdDb21wb25lbnQ7XG5cblx0LyoqXG5cdCAqIFZpZXdDaGlsZCB0aGF0IHJlcHJlc2VudHMgdGhlIGRheXMgdmlldy5cblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdEBWaWV3Q2hpbGQoJ2RheXMnLCB7IHJlYWQ6IElneERheXNWaWV3Q29tcG9uZW50IH0pXG5cdHB1YmxpYyBkYXlzVmlldzogSWd4RGF5c1ZpZXdDb21wb25lbnQ7XG5cblx0LyoqXG5cdCAqIFZpZXdDaGlsZHJlbmRlbiByZXByZXNlbnRpbmcgYWxsIG9mIHRoZSByZW5kZXJlZCBkYXlzIHZpZXdzLlxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0QFZpZXdDaGlsZHJlbignZGF5cycsIHsgcmVhZDogSWd4RGF5c1ZpZXdDb21wb25lbnQgfSlcblx0cHVibGljIG1vbnRoVmlld3M6IFF1ZXJ5TGlzdDxJZ3hEYXlzVmlld0NvbXBvbmVudD47XG5cblx0LyoqXG5cdCAqIEJ1dHRvbiBmb3IgcHJldmlvdXMgbW9udGguXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRAVmlld0NoaWxkKCdwcmV2UGFnZUJ0bicpXG5cdHB1YmxpYyBwcmV2UGFnZUJ0bjogRWxlbWVudFJlZjtcblxuXHQvKipcblx0ICogQnV0dG9uIGZvciBuZXh0IG1vbnRoLlxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0QFZpZXdDaGlsZCgnbmV4dFBhZ2VCdG4nKVxuXHRwdWJsaWMgbmV4dFBhZ2VCdG46IEVsZW1lbnRSZWY7XG5cblx0LyoqXG5cdCAqIERlbm90ZSBpZiB0aGUgeWVhciB2aWV3IGlzIGFjdGl2ZS5cblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBnZXQgaXNZZWFyVmlldygpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuWWVhcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBoZWFkZXIgdGVtcGxhdGUuXG5cdCAqXG5cdCAqIEBleGFtcGxlXG5cdCAqIGBgYHR5cGVzY3JpcHRcblx0ICogbGV0IGhlYWRlclRpdGxlVGVtcGxhdGUgPSB0aGlzLmNhbGVuZGFyLmhlYWRlclRpdGxlVGVhbXBsYXRlO1xuXHQgKiBgYGBcblx0ICogQG1lbWJlcm9mIElneENhbGVuZGFyQ29tcG9uZW50XG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGhlYWRlclRpdGxlVGVtcGxhdGUoKTogYW55IHtcblx0XHRpZiAodGhpcy5oZWFkZXJUaXRsZVRlbXBsYXRlRGlyZWN0aXZlKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5oZWFkZXJUaXRsZVRlbXBsYXRlRGlyZWN0aXZlLnRlbXBsYXRlO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBoZWFkZXIgdGVtcGxhdGUuXG5cdCAqXG5cdCAqIEBleGFtcGxlXG5cdCAqIGBgYGh0bWxcblx0ICogPGlneC1jYWxlbmRhciBoZWFkZXJUaXRsZVRlbXBsYXRlRGlyZWN0aXZlPVwiaWd4Q2FsZW5kYXJIZWFkZXJUaXRsZVwiPjwvaWd4LWNhbGVuZGFyPlxuXHQgKiBgYGBcblx0ICogQG1lbWJlcm9mIElneENhbGVuZGFyQ29tcG9uZW50XG5cdCAqL1xuXHRwdWJsaWMgc2V0IGhlYWRlclRpdGxlVGVtcGxhdGUoZGlyZWN0aXZlOiBhbnkpIHtcblx0XHR0aGlzLmhlYWRlclRpdGxlVGVtcGxhdGVEaXJlY3RpdmUgPSBkaXJlY3RpdmU7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgaGVhZGVyIHRlbXBsYXRlLlxuXHQgKlxuXHQgKiBAZXhhbXBsZVxuXHQgKiBgYGB0eXBlc2NyaXB0XG5cdCAqIGxldCBoZWFkZXJUZW1wbGF0ZSA9ICB0aGlzLmNhbGVuZGFyLmhlYWRlclRlYW1wbGF0ZTtcblx0ICogYGBgXG5cdCAqIEBtZW1iZXJvZiBJZ3hDYWxlbmRhckNvbXBvbmVudFxuXHQgKi9cblx0cHVibGljIGdldCBoZWFkZXJUZW1wbGF0ZSgpOiBhbnkge1xuXHRcdGlmICh0aGlzLmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5oZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZS50ZW1wbGF0ZTtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgaGVhZGVyIHRlbXBsYXRlLlxuXHQgKlxuXHQgKiBAZXhhbXBsZVxuXHQgKiBgYGBodG1sXG5cdCAqIDxpZ3gtY2FsZW5kYXIgaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmU9XCJpZ3hDYWxlbmRhckhlYWRlclwiPjwvaWd4LWNhbGVuZGFyPlxuXHQgKiBgYGBcblx0ICogQG1lbWJlcm9mIElneENhbGVuZGFyQ29tcG9uZW50XG5cdCAqL1xuXHRwdWJsaWMgc2V0IGhlYWRlclRlbXBsYXRlKGRpcmVjdGl2ZTogYW55KSB7XG5cdFx0dGhpcy5oZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSA9IGRpcmVjdGl2ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBzdWJoZWFkZXIgdGVtcGxhdGUuXG5cdCAqXG5cdCAqIEBleGFtcGxlXG5cdCAqIGBgYHR5cGVzY3JpcHRcblx0ICogbGV0IHN1YmhlYWRlclRlbXBsYXRlID0gdGhpcy5jYWxlbmRhci5zdWJoZWFkZXJUZW1wbGF0ZTtcblx0ICogYGBgXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IHN1YmhlYWRlclRlbXBsYXRlKCk6IGFueSB7XG5cdFx0aWYgKHRoaXMuc3ViaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUpIHtcblx0XHRcdHJldHVybiB0aGlzLnN1YmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLnRlbXBsYXRlO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBzdWJoZWFkZXIgdGVtcGxhdGUuXG5cdCAqXG5cdCAqIEBleGFtcGxlXG5cdCAqIGBgYGh0bWxcblx0ICogPGlneC1jYWxlbmRhciBzdWJoZWFkZXJUZW1wbGF0ZT1cImlneENhbGVuZGFyU3ViaGVhZGVyXCI+PC9pZ3gtY2FsZW5kYXI+XG5cdCAqIGBgYFxuXHQgKiBAbWVtYmVyb2YgSWd4Q2FsZW5kYXJDb21wb25lbnRcblx0ICovXG5cdHB1YmxpYyBzZXQgc3ViaGVhZGVyVGVtcGxhdGUoZGlyZWN0aXZlOiBhbnkpIHtcblx0XHR0aGlzLnN1YmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlID0gZGlyZWN0aXZlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGNvbnRleHQgZm9yIHRoZSB0ZW1wbGF0ZSBtYXJrZWQgd2l0aCB0aGUgYGlneENhbGVuZGFySGVhZGVyYCBkaXJlY3RpdmUuXG5cdCAqXG5cdCAqIEBleGFtcGxlXG5cdCAqIGBgYHR5cGVzY3JpcHRcblx0ICogbGV0IGhlYWRlckNvbnRleHQgPSAgdGhpcy5jYWxlbmRhci5oZWFkZXJDb250ZXh0O1xuXHQgKiBgYGBcblx0ICovXG5cdHB1YmxpYyBnZXQgaGVhZGVyQ29udGV4dCgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZW5lcmF0ZUNvbnRleHQodGhpcy5oZWFkZXJEYXRlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBjb250ZXh0IGZvciB0aGUgdGVtcGxhdGUgbWFya2VkIHdpdGggZWl0aGVyIGBpZ3hDYWxlbmRhclN1YkhlYWRlck1vbnRoYFxuXHQgKiBvciBgaWd4Q2FsZW5kYXJTdWJIZWFkZXJZZWFyYCBkaXJlY3RpdmUuXG5cdCAqXG5cdCAqIEBleGFtcGxlXG5cdCAqIGBgYHR5cGVzY3JpcHRcblx0ICogbGV0IGNvbnRleHQgPSAgdGhpcy5jYWxlbmRhci5jb250ZXh0O1xuXHQgKiBgYGBcblx0ICovXG5cdHB1YmxpYyBnZXQgY29udGV4dCgpIHtcblx0XHRjb25zdCBkYXRlOiBEYXRlID0gdGhpcy52aWV3RGF0ZTtcblx0XHRyZXR1cm4gdGhpcy5nZW5lcmF0ZUNvbnRleHQoZGF0ZSk7XG5cdH1cblxuXHQvKipcblx0ICogRGF0ZSBkaXNwbGF5ZWQgaW4gaGVhZGVyXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGhlYWRlckRhdGUoKTogRGF0ZSB7XG5cdFx0cmV0dXJuIHRoaXMuc2VsZWN0ZWREYXRlcz8uYXQoMCkgPz8gbmV3IERhdGUoKTtcblx0fVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoZm9yd2FyZFJlZigoKSA9PiBJZ3hDYWxlbmRhckhlYWRlclRlbXBsYXRlRGlyZWN0aXZlKSwgeyByZWFkOiBJZ3hDYWxlbmRhckhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcml2YXRlIGhlYWRlclRlbXBsYXRlRGlyZWN0aXZlOiBJZ3hDYWxlbmRhckhlYWRlclRlbXBsYXRlRGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoZm9yd2FyZFJlZigoKSA9PiBJZ3hDYWxlbmRhckhlYWRlclRpdGxlVGVtcGxhdGVEaXJlY3RpdmUpLCB7IHJlYWQ6IElneENhbGVuZGFySGVhZGVyVGl0bGVUZW1wbGF0ZURpcmVjdGl2ZSwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSBoZWFkZXJUaXRsZVRlbXBsYXRlRGlyZWN0aXZlOiBJZ3hDYWxlbmRhckhlYWRlclRpdGxlVGVtcGxhdGVEaXJlY3RpdmU7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICBAQ29udGVudENoaWxkKGZvcndhcmRSZWYoKCkgPT4gSWd4Q2FsZW5kYXJTdWJoZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSksIHsgcmVhZDogSWd4Q2FsZW5kYXJTdWJoZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSBzdWJoZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZTogSWd4Q2FsZW5kYXJTdWJoZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZTtcblxuXHQvKipcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBhY3RpdmVEYXRlID0gQ2FsZW5kYXJEYXkudG9kYXkubmF0aXZlO1xuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHJvdGVjdGVkIHByZXZpZXdSYW5nZURhdGU6IERhdGU7XG5cblx0LyoqXG5cdCAqIFVzZWQgdG8gYXBwbHkgdGhlIGFjdGl2ZSBkYXRlIHdoZW4gdGhlIGNhbGVuZGFyIHZpZXcgaXMgY2hhbmdlZFxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIG5leHREYXRlOiBEYXRlO1xuXG5cdC8qKlxuXHQgKiBEZW5vdGUgaWYgdGhlIGNhbGVuZGFyIHZpZXcgd2FzIGNoYW5nZWQgd2l0aCB0aGUga2V5Ym9hcmRcblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBpc0tleWRvd25UcmlnZ2VyID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwcml2YXRlIF9tb250aHNWaWV3TnVtYmVyID0gMTtcblxuICAgIEBIb3N0TGlzdGVuZXIoJ21vdXNlZG93bicsIFsnJGV2ZW50J10pXG4gICAgcHJvdGVjdGVkIG9uTW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLndyYXBwZXIubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Nob3dBY3RpdmVEYXk6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuICAgIHByb3RlY3RlZCBzZXQgc2hvd0FjdGl2ZURheSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9zaG93QWN0aXZlRGF5ID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IHNob3dBY3RpdmVEYXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaG93QWN0aXZlRGF5O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgYWN0aXZlRGVzY2VuZGFudCgpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSAnbW9udGgnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVEYXRlLmdldFRpbWUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmVEZXNjZW5kYW50ID8/IHRoaXMudmlld0RhdGUuZ2V0VGltZSgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBzZXQgYWN0aXZlRGVzY2VuZGFudChkYXRlOiBEYXRlKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZURlc2NlbmRhbnQgPSBkYXRlLmdldFRpbWUoKTtcbiAgICB9XG5cblx0cHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5rZXlib2FyZE5hdmlnYXRpb25cbiAgICAgICAgICAgIC5hdHRhY2hLZXlib2FyZEhhbmRsZXJzKHRoaXMud3JhcHBlciwgdGhpcylcbiAgICAgICAgICAgIC5zZXQoXCJBcnJvd1VwXCIsIHRoaXMub25BcnJvd1VwKVxuICAgICAgICAgICAgLnNldChcIkFycm93RG93blwiLCB0aGlzLm9uQXJyb3dEb3duKVxuICAgICAgICAgICAgLnNldChcIkFycm93TGVmdFwiLCB0aGlzLm9uQXJyb3dMZWZ0KVxuICAgICAgICAgICAgLnNldChcIkFycm93UmlnaHRcIiwgdGhpcy5vbkFycm93UmlnaHQpXG4gICAgICAgICAgICAuc2V0KFwiRW50ZXJcIiwgdGhpcy5vbkVudGVyKVxuICAgICAgICAgICAgLnNldChcIiBcIiwgdGhpcy5vbkVudGVyKVxuICAgICAgICAgICAgLnNldChcIkhvbWVcIiwgdGhpcy5vbkhvbWUpXG4gICAgICAgICAgICAuc2V0KFwiRW5kXCIsIHRoaXMub25FbmQpXG4gICAgICAgICAgICAuc2V0KFwiUGFnZVVwXCIsIHRoaXMuaGFuZGxlUGFnZVVwKVxuICAgICAgICAgICAgLnNldChcIlBhZ2VEb3duXCIsIHRoaXMuaGFuZGxlUGFnZURvd24pO1xuXG4gICAgICAgIHRoaXMud3JhcHBlci5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgKGV2ZW50OiBGb2N1c0V2ZW50KSA9PiB0aGlzLm9uV3JhcHBlckZvY3VzKGV2ZW50KSk7XG4gICAgICAgIHRoaXMud3JhcHBlci5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoZXZlbnQ6IEZvY3VzRXZlbnQpID0+IHRoaXMub25XcmFwcGVyQmx1cihldmVudCkpO1xuXG4gICAgICAgIHRoaXMuc3RhcnRQYWdlU2Nyb2xsJC5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuc3RvcFBhZ2VTY3JvbGwkKSxcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLnNjcm9sbFBhZ2UkLnBpcGUoXG4gICAgICAgICAgICAgICAgc2tpcExhc3QoMSksXG4gICAgICAgICAgICAgICAgZGVib3VuY2UoKCkgPT4gaW50ZXJ2YWwoMzAwKSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuc3RvcFBhZ2VTY3JvbGwkKVxuICAgICAgICAgICAgKSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLnBhZ2VTY3JvbGxEaXJlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBTY3JvbGxEaXJlY3Rpb24uUFJFVjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJldmlvdXNQYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBTY3JvbGxEaXJlY3Rpb24uTkVYVDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dFBhZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFNjcm9sbERpcmVjdGlvbi5OT05FOlxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5hY3RpdmVWaWV3JC5zdWJzY3JpYmUoKHZpZXcpID0+IHtcblx0XHRcdHRoaXMuYWN0aXZlVmlld0NoYW5nZWQuZW1pdCh2aWV3KTtcblxuICAgICAgICAgICAgdGhpcy52aWV3RGF0ZUNoYW5nZWQuZW1pdCh7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNWYWx1ZTogdGhpcy5wcmV2aW91c1ZpZXdEYXRlLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy52aWV3RGF0ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25XcmFwcGVyRm9jdXMoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5zaG93QWN0aXZlRGF5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5tb250aFZpZXdzLmZvckVhY2godmlldyA9PiB2aWV3LmNoYW5nZVByZXZpZXdSYW5nZSh0aGlzLmFjdGl2ZURhdGUpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uV3JhcHBlckJsdXIoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5zaG93QWN0aXZlRGF5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMubW9udGhWaWV3cy5mb3JFYWNoKHZpZXcgPT4gdmlldy5jbGVhclByZXZpZXdSYW5nZSgpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUFycm93S2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCwgZGVsdGE6IG51bWJlcikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBjb25zdCBkYXRlID0gZ2V0Q2xvc2VzdEFjdGl2ZURhdGUoXG4gICAgICAgICAgICBDYWxlbmRhckRheS5mcm9tKHRoaXMuYWN0aXZlRGF0ZSksXG4gICAgICAgICAgICBkZWx0YSxcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWREYXRlcyxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSBkYXRlLm5hdGl2ZTtcblxuICAgICAgICBjb25zdCBkYXRlcyA9IHRoaXMudmlld0RhdGVzO1xuICAgICAgICBjb25zdCBpc0RhdGVJblZpZXcgPSBkYXRlcy5zb21lKGQgPT4gZC5kYXRlLmVxdWFsVG8odGhpcy5hY3RpdmVEYXRlKSk7XG4gICAgICAgIHRoaXMubW9udGhWaWV3cy5mb3JFYWNoKHZpZXcgPT4gdmlldy5jbGVhclByZXZpZXdSYW5nZSgpKTtcblxuICAgICAgICBpZiAoIWlzRGF0ZUluVmlldykge1xuICAgICAgICAgICAgZGVsdGEgPiAwID8gdGhpcy5uZXh0UGFnZSh0cnVlKSA6IHRoaXMucHJldmlvdXNQYWdlKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVQYWdlVXBEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBkZWx0YTogbnVtYmVyKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGNvbnN0IGRpciA9IGRlbHRhID4gMCA/IFNjcm9sbERpcmVjdGlvbi5ORVhUIDogU2Nyb2xsRGlyZWN0aW9uLlBSRVY7XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3Lk1vbnRoICYmIGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdEYXRlID0gQ2FsZW5kYXJEYXkuZnJvbSh0aGlzLnZpZXdEYXRlKS5hZGQoJ3llYXInLCBkZWx0YSkubmF0aXZlO1xuICAgICAgICAgICAgdGhpcy5yZXNldEFjdGl2ZURhdGUodGhpcy52aWV3RGF0ZSk7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVBhZ2UoZmFsc2UsIGRpcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVBhZ2VVcChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICB0aGlzLmhhbmRsZVBhZ2VVcERvd24oZXZlbnQsIC0xKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVBhZ2VEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIHRoaXMuaGFuZGxlUGFnZVVwRG93bihldmVudCwgMSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkFycm93VXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3Lk1vbnRoKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUFycm93S2V5ZG93bihldmVudCwgLTcpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3LlllYXIpIHtcbiAgICAgICAgICAgIHRoaXMubW9udGhzVmlldy5vbktleWRvd25BcnJvd1VwKGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5EZWNhZGUpIHtcbiAgICAgICAgICAgIHRoaXMuZGFjYWRlVmlldy5vbktleWRvd25BcnJvd1VwKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25BcnJvd0Rvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3Lk1vbnRoKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUFycm93S2V5ZG93bihldmVudCwgNyk7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuWWVhcikge1xuICAgICAgICAgICAgdGhpcy5tb250aHNWaWV3Lm9uS2V5ZG93bkFycm93RG93bihldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuRGVjYWRlKSB7XG4gICAgICAgICAgICB0aGlzLmRhY2FkZVZpZXcub25LZXlkb3duQXJyb3dEb3duKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25BcnJvd0xlZnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3Lk1vbnRoKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUFycm93S2V5ZG93bihldmVudCwgLTEpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3LlllYXIpIHtcbiAgICAgICAgICAgIHRoaXMubW9udGhzVmlldy5vbktleWRvd25BcnJvd0xlZnQoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3LkRlY2FkZSkge1xuICAgICAgICAgICAgdGhpcy5kYWNhZGVWaWV3Lm9uS2V5ZG93bkFycm93TGVmdChldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uQXJyb3dSaWdodChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuTW9udGgpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQXJyb3dLZXlkb3duKGV2ZW50LCAxKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5ZZWFyKSB7XG4gICAgICAgICAgICB0aGlzLm1vbnRoc1ZpZXcub25LZXlkb3duQXJyb3dSaWdodChldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuRGVjYWRlKSB7XG4gICAgICAgICAgICB0aGlzLmRhY2FkZVZpZXcub25LZXlkb3duQXJyb3dSaWdodChldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRW50ZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3Lk1vbnRoKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZURhdGVTZWxlY3Rpb24odGhpcy5hY3RpdmVEYXRlKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5ZZWFyKSB7XG4gICAgICAgICAgICB0aGlzLm1vbnRoc1ZpZXcub25LZXlkb3duRW50ZXIoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3LkRlY2FkZSkge1xuICAgICAgICAgICAgdGhpcy5kYWNhZGVWaWV3Lm9uS2V5ZG93bkVudGVyKGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubW9udGhWaWV3cy5mb3JFYWNoKHZpZXcgPT4gdmlldy5jbGVhclByZXZpZXdSYW5nZSgpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uSG9tZShldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuTW9udGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGVzID0gdGhpcy5tb250aFZpZXdzLnRvQXJyYXkoKVxuICAgICAgICAgICAgICAgIC5mbGF0TWFwKCh2aWV3KSA9PiB2aWV3LmRhdGVzLnRvQXJyYXkoKSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChkKSA9PiBkLmlzQ3VycmVudE1vbnRoICYmIGQuaXNGb2N1c2FibGUpO1xuXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSBkYXRlcy5hdCgwKS5kYXRlLm5hdGl2ZTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5ZZWFyKSB7XG4gICAgICAgICAgICB0aGlzLm1vbnRoc1ZpZXcub25LZXlkb3duSG9tZShldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuRGVjYWRlKSB7XG4gICAgICAgICAgICB0aGlzLmRhY2FkZVZpZXcub25LZXlkb3duSG9tZShldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRW5kKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5Nb250aCkge1xuICAgICAgICAgICAgY29uc3QgZGF0ZXMgPSB0aGlzLm1vbnRoVmlld3MudG9BcnJheSgpXG4gICAgICAgICAgICAgICAgLmZsYXRNYXAoKHZpZXcpID0+IHZpZXcuZGF0ZXMudG9BcnJheSgpKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGQpID0+IGQuaXNDdXJyZW50TW9udGggJiYgZC5pc0ZvY3VzYWJsZSk7XG5cbiAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IGRhdGVzLmF0KC0xKS5kYXRlLm5hdGl2ZTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5ZZWFyKSB7XG4gICAgICAgICAgICB0aGlzLm1vbnRoc1ZpZXcub25LZXlkb3duRW5kKGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5EZWNhZGUpIHtcbiAgICAgICAgICAgIHRoaXMuZGFjYWRlVmlldy5vbktleWRvd25FbmQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBsb2NhbGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vbnRoIGluIHRoZSBtb250aCB2aWV3IGlmIGVuYWJsZWQsXG5cdCAqIG90aGVyd2lzZSByZXR1cm5zIHRoZSBkZWZhdWx0IGBEYXRlLmdldE1vbnRoKClgIHZhbHVlLlxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIGZvcm1hdHRlZE1vbnRoKHZhbHVlOiBEYXRlKTogc3RyaW5nIHtcblx0XHRpZiAodGhpcy5mb3JtYXRWaWV3cy5tb250aCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0dGVyTW9udGguZm9ybWF0KHZhbHVlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYCR7IHZhbHVlLmdldE1vbnRoKCkgfWA7XG5cdH1cblxuXHQvKipcblx0ICogQ2hhbmdlIHRvIHByZXZpb3VzIHBhZ2Vcblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBwcmV2aW91c1BhZ2UoaXNLZXlkb3duVHJpZ2dlciA9IGZhbHNlKSB7XG5cdFx0aWYgKGlzS2V5ZG93blRyaWdnZXIgJiYgdGhpcy5wYWdlU2Nyb2xsRGlyZWN0aW9uID09PSBTY3JvbGxEaXJlY3Rpb24uTkVYVCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuICAgICAgICB0aGlzLmNoYW5nZVBhZ2UoaXNLZXlkb3duVHJpZ2dlciwgU2Nyb2xsRGlyZWN0aW9uLlBSRVYpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoYW5nZSB0byBuZXh0IHBhZ2Vcblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBuZXh0UGFnZShpc0tleWRvd25UcmlnZ2VyID0gZmFsc2UpIHtcblx0XHRpZiAoaXNLZXlkb3duVHJpZ2dlciAmJiB0aGlzLnBhZ2VTY3JvbGxEaXJlY3Rpb24gPT09IFNjcm9sbERpcmVjdGlvbi5QUkVWKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG4gICAgICAgIHRoaXMuY2hhbmdlUGFnZShpc0tleWRvd25UcmlnZ2VyLCBTY3JvbGxEaXJlY3Rpb24uTkVYVCk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hhbmdlcyB0aGUgY3VycmVudCBwYWdlXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuICAgIHByb3RlY3RlZCBjaGFuZ2VQYWdlKGlzS2V5ZG93blRyaWdnZXIgPSBmYWxzZSwgZGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24pIHtcblx0XHR0aGlzLnByZXZpb3VzVmlld0RhdGUgPSB0aGlzLnZpZXdEYXRlO1xuXHRcdHRoaXMuaXNLZXlkb3duVHJpZ2dlciA9IGlzS2V5ZG93blRyaWdnZXI7XG5cbiAgICAgICAgc3dpdGNoICh0aGlzLmFjdGl2ZVZpZXcpIHtcbiAgICAgICAgICAgIGNhc2UgXCJtb250aFwiOlxuICAgICAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFNjcm9sbERpcmVjdGlvbi5QUkVWKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSBDYWxlbmRhckRheS5mcm9tKHRoaXMudmlld0RhdGUpLmFkZCgnbW9udGgnLCAtMSkubmF0aXZlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFNjcm9sbERpcmVjdGlvbi5ORVhUKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSBDYWxlbmRhckRheS5mcm9tKHRoaXMudmlld0RhdGUpLmFkZCgnbW9udGgnLCAxKS5uYXRpdmU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3RGF0ZUNoYW5nZWQuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzVmFsdWU6IHRoaXMucHJldmlvdXNWaWV3RGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFZhbHVlOiB0aGlzLnZpZXdEYXRlXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBcInllYXJcIjpcbiAgICAgICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09PSBTY3JvbGxEaXJlY3Rpb24uUFJFVikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdEYXRlID0gQ2FsZW5kYXJEYXkuZnJvbSh0aGlzLnZpZXdEYXRlKS5hZGQoJ3llYXInLCAtMSkubmF0aXZlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFNjcm9sbERpcmVjdGlvbi5ORVhUKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSBDYWxlbmRhckRheS5mcm9tKHRoaXMudmlld0RhdGUpLmFkZCgneWVhcicsIDEpLm5hdGl2ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBcImRlY2FkZVwiOlxuICAgICAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFNjcm9sbERpcmVjdGlvbi5QUkVWKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSBDYWxlbmRhckRheS5mcm9tKHRoaXMudmlld0RhdGUpLmFkZCgneWVhcicsIC0xNSkubmF0aXZlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFNjcm9sbERpcmVjdGlvbi5ORVhUKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSBDYWxlbmRhckRheS5mcm9tKHRoaXMudmlld0RhdGUpLmFkZCgneWVhcicsIDE1KS5uYXRpdmU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBYWFg6IFdoeSBvbmx5IHdoZW4gaXQncyBub3QgdHJpZ2dlcmVkIGJ5IGtleWJvYXJkP1xuICAgICAgICBpZiAoIXRoaXMuaXNLZXlkb3duVHJpZ2dlcikgdGhpcy5yZXNldEFjdGl2ZURhdGUodGhpcy52aWV3RGF0ZSk7XG4gICAgfVxuXG5cdC8qKlxuXHQgKiBDb250aW5pb3VzIG5hdmlnYXRpb24gdGhyb3VnaCB0aGUgcHJldmlvdXMgcGFnZXNcblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBzdGFydFByZXZQYWdlU2Nyb2xsID0gKGlzS2V5ZG93blRyaWdnZXIgPSBmYWxzZSkgPT4ge1xuXHRcdHRoaXMuc3RhcnRQYWdlU2Nyb2xsJC5uZXh0KCk7XG5cdFx0dGhpcy5wYWdlU2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xsRGlyZWN0aW9uLlBSRVY7XG5cdFx0dGhpcy5wcmV2aW91c1BhZ2UoaXNLZXlkb3duVHJpZ2dlcik7XG5cdH1cblxuXHQvKipcblx0ICogQ29udGluaW91cyBuYXZpZ2F0aW9uIHRocm91Z2ggdGhlIG5leHQgcGFnZXNcblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBzdGFydE5leHRQYWdlU2Nyb2xsID0gKGlzS2V5ZG93blRyaWdnZXIgPSBmYWxzZSkgPT4ge1xuXHRcdHRoaXMuc3RhcnRQYWdlU2Nyb2xsJC5uZXh0KCk7XG5cdFx0dGhpcy5wYWdlU2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xsRGlyZWN0aW9uLk5FWFQ7XG5cdFx0dGhpcy5uZXh0UGFnZShpc0tleWRvd25UcmlnZ2VyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTdG9wIGNvbnRpbnVvdXMgbmF2aWdhdGlvblxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIHN0b3BQYWdlU2Nyb2xsID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG5cdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cblx0XHR0aGlzLnN0b3BQYWdlU2Nyb2xsJC5uZXh0KHRydWUpO1xuXHRcdHRoaXMuc3RvcFBhZ2VTY3JvbGwkLmNvbXBsZXRlKCk7XG5cblx0XHRpZiAodGhpcy5wbGF0Zm9ybS5pc0FjdGl2YXRpb25LZXkoZXZlbnQpKSB7XG5cdFx0XHR0aGlzLnJlc2V0QWN0aXZlRGF0ZSh0aGlzLnZpZXdEYXRlKTtcblx0XHR9XG5cblx0XHR0aGlzLnBhZ2VTY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxEaXJlY3Rpb24uTk9ORTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIG9uQWN0aXZlVmlld0RlY2FkZShldmVudDogTW91c2VFdmVudCwgZGF0ZTogRGF0ZSwgYWN0aXZlVmlld0lkeDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRzdXBlci5hY3RpdmVWaWV3RGVjYWRlKGFjdGl2ZVZpZXdJZHgpO1xuICAgICAgICB0aGlzLnZpZXdEYXRlID0gZGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIG9uQWN0aXZlVmlld0RlY2FkZUtCKGRhdGU6IERhdGUsIGV2ZW50OiBLZXlib2FyZEV2ZW50LCBhY3RpdmVWaWV3SWR4OiBudW1iZXIpIHtcblx0XHRzdXBlci5hY3RpdmVWaWV3RGVjYWRlS0IoZXZlbnQsIGFjdGl2ZVZpZXdJZHgpO1xuXG5cdFx0aWYgKHRoaXMucGxhdGZvcm0uaXNBY3RpdmF0aW9uS2V5KGV2ZW50KSkge1xuICAgICAgICAgICAgdGhpcy52aWV3RGF0ZSA9IGRhdGU7XG4gICAgICAgICAgICB0aGlzLndyYXBwZXIubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cbiAgICBwdWJsaWMgb25ZZWFyc1ZpZXdDbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWQgPyBldmVudC5jb21wb3NlZFBhdGgoKSA6IFtldmVudC50YXJnZXRdO1xuICAgICAgICBjb25zdCB5ZWFycyA9IHRoaXMuZGFjYWRlVmlldy52aWV3SXRlbXMudG9BcnJheSgpO1xuICAgICAgICBjb25zdCB2YWxpZFRhcmdldCA9IHllYXJzLnNvbWUoeWVhciA9PiBwYXRoLmluY2x1ZGVzKHllYXIubmF0aXZlRWxlbWVudCkpO1xuXG4gICAgICAgIGlmICh2YWxpZFRhcmdldCkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gSWd4Q2FsZW5kYXJWaWV3LlllYXI7XG4gICAgICAgIH1cbiAgICB9XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuICAgIHB1YmxpYyBvblllYXJzVmlld0tleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMucGxhdGZvcm0uaXNBY3RpdmF0aW9uS2V5KGV2ZW50KSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gSWd4Q2FsZW5kYXJWaWV3LlllYXI7XG4gICAgICAgIH1cbiAgICB9XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwcm90ZWN0ZWQgZ2V0Rm9ybWF0dGVkRGF0ZSgpOiB7IHdlZWtkYXk6IHN0cmluZzsgbW9udGhkYXk6IHN0cmluZyB9IHtcblx0XHRjb25zdCBkYXRlID0gdGhpcy5oZWFkZXJEYXRlO1xuICAgICAgICBjb25zdCBtb250aEZvcm1hdHRlciA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMubG9jYWxlLCB7IG1vbnRoOiAnc2hvcnQnLCBkYXk6ICdudW1lcmljJyB9KVxuICAgICAgICBjb25zdCBkYXlGb3JtYXR0ZXIgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLmxvY2FsZSwgeyB3ZWVrZGF5OiAnc2hvcnQnIH0pXG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0bW9udGhkYXk6IG1vbnRoRm9ybWF0dGVyLmZvcm1hdChkYXRlKSxcblx0XHRcdHdlZWtkYXk6IGRheUZvcm1hdHRlci5mb3JtYXQoZGF0ZSksXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHJvdGVjdGVkIGdldEZvcm1hdHRlZFJhbmdlKCk6IHsgc3RhcnQ6IHN0cmluZzsgZW5kOiBzdHJpbmcgfSB7XG5cdFx0Y29uc3QgZGF0ZXMgPSB0aGlzLnNlbGVjdGVkRGF0ZXMgYXMgRGF0ZVtdO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHN0YXJ0OiB0aGlzLmZvcm1hdHRlclJhbmdlZGF5LmZvcm1hdChkYXRlcy5hdCgwKSksXG5cdFx0XHRlbmQ6IHRoaXMuZm9ybWF0dGVyUmFuZ2VkYXkuZm9ybWF0KGRhdGVzLmF0KC0xKSlcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuICAgIHByb3RlY3RlZCBnZXQgdmlld0RhdGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb250aFZpZXdzLnRvQXJyYXkoKVxuICAgICAgICAgICAgLmZsYXRNYXAodmlldyA9PiB2aWV3LmRhdGVzLnRvQXJyYXkoKSlcbiAgICAgICAgICAgIC5maWx0ZXIoZCA9PiBkLmlzQ3VycmVudE1vbnRoKTtcbiAgICB9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgaW52b2tlZCBvbiBkYXRlIHNlbGVjdGlvblxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHJvdGVjdGVkIGhhbmRsZURhdGVTZWxlY3Rpb24oZGF0ZTogRGF0ZSkge1xuICAgICAgICBjb25zdCBvdXRPZlJhbmdlID0gIXRoaXMudmlld0RhdGVzLnNvbWUoZCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZC5kYXRlLmVxdWFsVG8oZGF0ZSlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKG91dE9mUmFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSBkYXRlO1xuICAgICAgICB9XG5cblx0XHR0aGlzLnNlbGVjdERhdGUoZGF0ZSk7XG5cbiAgICAgICAgLy8ga2VlcCB2aWV3cyBpbiBzeW5jXG5cdFx0dGhpcy5tb250aFZpZXdzLmZvckVhY2goKG0pID0+IHtcblx0XHRcdG0uc2hpZnRLZXkgPSB0aGlzLnNoaWZ0S2V5O1xuICAgICAgICAgICAgbS5zZWxlY3RlZERhdGVzID0gdGhpcy5zZWxlY3RlZERhdGVzO1xuICAgICAgICAgICAgbS5jZHIubWFya0ZvckNoZWNrKCk7XG5cdFx0fSk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uICE9PSAnc2luZ2xlJykge1xuXHRcdCAgICB0aGlzLnNlbGVjdGVkLmVtaXQodGhpcy5zZWxlY3RlZERhdGVzKTtcbiAgICAgICAgfSBlbHNlIHtcblx0XHQgICAgdGhpcy5zZWxlY3RlZC5lbWl0KHRoaXMuc2VsZWN0ZWREYXRlcy5hdCgwKSk7XG4gICAgICAgIH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlbmFsXG5cdCAqL1xuXHRwdWJsaWMgY2hhbmdlTW9udGgoZGF0ZTogRGF0ZSkge1xuXHRcdHRoaXMucHJldmlvdXNWaWV3RGF0ZSA9IHRoaXMudmlld0RhdGU7XG4gICAgICAgIHRoaXMudmlld0RhdGUgPSBDYWxlbmRhckRheS5mcm9tKGRhdGUpLmFkZCgnbW9udGgnLCAtdGhpcy5hY3RpdmVWaWV3SWR4KS5uYXRpdmU7XG5cdFx0dGhpcy5hY3RpdmVWaWV3ID0gSWd4Q2FsZW5kYXJWaWV3Lk1vbnRoO1xuICAgICAgICB0aGlzLnJlc2V0QWN0aXZlRGF0ZShkYXRlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlbmFsXG5cdCAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBjaGFuZ2VZZWFyKGRhdGU6IERhdGUpIHtcbiAgICAgICAgdGhpcy5wcmV2aW91c1ZpZXdEYXRlID0gdGhpcy52aWV3RGF0ZTtcbiAgICAgICAgdGhpcy52aWV3RGF0ZSA9IENhbGVuZGFyRGF5LmZyb20oZGF0ZSkuYWRkKCdtb250aCcsIC10aGlzLmFjdGl2ZVZpZXdJZHgpLm5hdGl2ZTtcblx0XHR0aGlzLmFjdGl2ZVZpZXcgPSBJZ3hDYWxlbmRhclZpZXcuWWVhcjtcbiAgICB9XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVuYWxcblx0ICovXG5cdHB1YmxpYyB1cGRhdGVZZWFyKGRhdGU6IERhdGUpIHtcblx0XHR0aGlzLnByZXZpb3VzVmlld0RhdGUgPSB0aGlzLnZpZXdEYXRlO1xuICAgICAgICB0aGlzLnZpZXdEYXRlID0gQ2FsZW5kYXJEYXkuZnJvbShkYXRlKS5hZGQoJ3llYXInLCAtdGhpcy5hY3RpdmVWaWV3SWR4KS5uYXRpdmU7XG5cdH1cblxuICAgIHB1YmxpYyB1cGRhdGVBY3RpdmVEZXNjZW5kYW50KGRhdGU6IERhdGUpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVEZXNjZW5kYW50ID0gZGF0ZTtcbiAgICB9XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwdWJsaWMgb25BY3RpdmVWaWV3WWVhcihldmVudDogTW91c2VFdmVudCwgZGF0ZTogRGF0ZSwgYWN0aXZlVmlld0lkeDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHR0aGlzLmFjdGl2ZVZpZXcgPSBJZ3hDYWxlbmRhclZpZXcuWWVhcjtcblx0XHR0aGlzLmFjdGl2ZVZpZXdJZHggPSBhY3RpdmVWaWV3SWR4O1xuICAgICAgICB0aGlzLnZpZXdEYXRlID0gZGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIG9uQWN0aXZlVmlld1llYXJLQihkYXRlOiBEYXRlLCBldmVudDogS2V5Ym9hcmRFdmVudCwgYWN0aXZlVmlld0lkeDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG5cdFx0aWYgKHRoaXMucGxhdGZvcm0uaXNBY3RpdmF0aW9uS2V5KGV2ZW50KSkge1xuXHRcdCAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gSWd4Q2FsZW5kYXJWaWV3LlllYXI7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVZpZXdJZHggPSBhY3RpdmVWaWV3SWR4O1xuICAgICAgICAgICAgdGhpcy52aWV3RGF0ZSA9IGRhdGU7XG5cbiAgICAgICAgICAgIHRoaXMud3JhcHBlci5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERlc2VsZWN0cyBkYXRlKHMpIChiYXNlZCBvbiB0aGUgc2VsZWN0aW9uIHR5cGUpLlxuXHQgKlxuXHQgKiBAZXhhbXBsZVxuXHQgKiBgYGB0eXBlc2NyaXB0XG5cdCAqICB0aGlzLmNhbGVuZGFyLmRlc2VsZWN0RGF0ZShuZXcgRGF0ZShgMjAxOC0wNi0xMmApKTtcblx0ICogYGBgYFxuXHQgKi9cblx0cHVibGljIG92ZXJyaWRlIGRlc2VsZWN0RGF0ZSh2YWx1ZT86IERhdGUgfCBEYXRlW10gfCBzdHJpbmcpIHtcblx0XHRzdXBlci5kZXNlbGVjdERhdGUodmFsdWUpO1xuXG5cdFx0dGhpcy5tb250aFZpZXdzLmZvckVhY2goKG0pID0+IHtcblx0XHRcdG0uc2VsZWN0ZWREYXRlcyA9IHRoaXMuc2VsZWN0ZWREYXRlcztcblx0XHRcdG0ucmFuZ2VTdGFydGVkID0gZmFsc2U7XG4gICAgICAgICAgICBtLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodGhpcy5zZWxlY3RlZERhdGVzKTtcblx0fVxuXG5cblx0LyoqXG5cdCAqIEdldHRlciBmb3IgdGhlIGNvbnRleHQgb2JqZWN0IGluc2lkZSB0aGUgY2FsZW5kYXIgdGVtcGxhdGVzLlxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIGdldENvbnRleHQoaTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBDYWxlbmRhckRheS5mcm9tKHRoaXMudmlld0RhdGUpLmFkZCgnbW9udGgnLCBpKS5uYXRpdmU7XG5cdFx0cmV0dXJuIHRoaXMuZ2VuZXJhdGVDb250ZXh0KGRhdGUsIGkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuICAgIC8vIFRPRE86IFNlZSBpZiB0aGlzIGNhbiBiZSBpbmNvcnBvcmF0ZWQgaW4gdGhlIERheXNWaWV3IGRpcmVjdGx5XG5cdHB1YmxpYyByZXNldEFjdGl2ZURhdGUoZGF0ZTogRGF0ZSkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBDYWxlbmRhckRheS5mcm9tKHRoaXMuYWN0aXZlRGF0ZSkuc2V0KHtcbiAgICAgICAgICAgIG1vbnRoOiBkYXRlLmdldE1vbnRoKCksXG4gICAgICAgICAgICB5ZWFyOiBkYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG91dE9mUmFuZ2UgPVxuICAgICAgICAgICAgIWFyZVNhbWVNb250aChkYXRlLCB0YXJnZXQpIHx8XG4gICAgICAgICAgICBpc0RhdGVJblJhbmdlcyh0YXJnZXQsIHRoaXMuZGlzYWJsZWREYXRlcyk7XG5cbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gb3V0T2ZSYW5nZSA/IGRhdGUgOiB0YXJnZXQubmF0aXZlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMua2V5Ym9hcmROYXZpZ2F0aW9uLmRldGFjaEtleWJvYXJkSGFuZGxlcnMoKTtcbiAgICAgICAgdGhpcy53cmFwcGVyPy5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5vbldyYXBwZXJGb2N1cyk7XG4gICAgICAgIHRoaXMud3JhcHBlcj8ubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5vbldyYXBwZXJCbHVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIGdldFByZXZNb250aChkYXRlOiBEYXRlKTogRGF0ZSB7XG5cdFx0cmV0dXJuIENhbGVuZGFyRGF5LmZyb20oZGF0ZSkuYWRkKCdtb250aCcsIC0xKS5uYXRpdmU7XG5cdH1cblxuXHQvKipcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBnZXROZXh0TW9udGgoZGF0ZTogRGF0ZSwgdmlld0luZGV4OiBudW1iZXIpOiBEYXRlIHtcbiAgICAgICAgcmV0dXJuIENhbGVuZGFyRGF5LmZyb20oZGF0ZSkuYWRkKCdtb250aCcsIHZpZXdJbmRleCkubmF0aXZlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhlbHBlciBtZXRob2QgYnVpbGRpbmcgYW5kIHJldHVybmluZyB0aGUgY29udGV4dCBvYmplY3QgaW5zaWRlIHRoZSBjYWxlbmRhciB0ZW1wbGF0ZXMuXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwcml2YXRlIGdlbmVyYXRlQ29udGV4dCh2YWx1ZTogRGF0ZSB8IERhdGVbXSwgaT86IG51bWJlcikge1xuICAgICAgICBjb25zdCBjb25zdHJ1Y3QgPSAoZGF0ZTogRGF0ZSwgaW5kZXg6IG51bWJlcikgPT4gKHtcbiAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICAuLi5mb3JtYXRUb1BhcnRzKGRhdGUsIHRoaXMubG9jYWxlLCB0aGlzLmZvcm1hdE9wdGlvbnMsIFtcbiAgICAgICAgICAgICAgICBcImVyYVwiLFxuICAgICAgICAgICAgICAgIFwieWVhclwiLFxuICAgICAgICAgICAgICAgIFwibW9udGhcIixcbiAgICAgICAgICAgICAgICBcImRheVwiLFxuICAgICAgICAgICAgICAgIFwid2Vla2RheVwiLFxuICAgICAgICAgICAgXSksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGZvcm1hdE9iamVjdCA9IEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgICAgICAgICA/IHZhbHVlLm1hcCgoZGF0ZSwgaW5kZXgpID0+IGNvbnN0cnVjdChkYXRlLCBpbmRleCkpXG4gICAgICAgICAgICA6IGNvbnN0cnVjdCh2YWx1ZSwgaSk7XG5cbiAgICAgICAgcmV0dXJuIHsgJGltcGxpY2l0OiBmb3JtYXRPYmplY3QgfTtcblx0fVxufVxuIiwiPG5nLXRlbXBsYXRlIGxldC1yZXN1bHQgI2RlZmF1bHRIZWFkZXJUaXRsZT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uID09PSAnc2luZ2xlJ1wiPlxuICAgICAgICA8c3Bhbj57eyByZXNvdXJjZVN0cmluZ3MuaWd4X2NhbGVuZGFyX3NlbGVjdF9kYXRlIH19PC9zcGFuPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3Rpb24gPT09ICdyYW5nZSdcIj5cbiAgICAgICAgPHNwYW4+e3sgcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9yYW5nZV9wbGFjZWhvbGRlciB9fTwvc3Bhbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSBsZXQtcmVzdWx0ICNkZWZhdWx0SGVhZGVyRGF0ZT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uID09PSAnc2luZ2xlJ1wiPlxuICAgICAgICA8c3Bhbj57eyBnZXRGb3JtYXR0ZWREYXRlKCkud2Vla2RheSB9fSwmbmJzcDs8L3NwYW4+XG4gICAgICAgIDxzcGFuPnt7IGdldEZvcm1hdHRlZERhdGUoKS5tb250aGRheSB9fTwvc3Bhbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uID09PSAncmFuZ2UnXCI+XG4gICAgICAgIDxzcGFuPnt7IHNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAwID8gJ1N0YXJ0JyA6IGdldEZvcm1hdHRlZFJhbmdlKCkuc3RhcnR9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4+Jm5ic3A7LSZuYnNwOzwvc3Bhbj5cbiAgICAgICAgPHNwYW4+e3sgc2VsZWN0ZWREYXRlcy5sZW5ndGggPD0gMSA/ICdFbmQnIDogZ2V0Rm9ybWF0dGVkUmFuZ2UoKS5lbmR9fTwvc3Bhbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gTW9udGggLS0+XG48bmctdGVtcGxhdGUgI2RlZmF1bHRNb250aCBsZXQtb2JqPlxuICAgIDxzcGFuXG4gICAgICAgICNtb250aHNCdG5cbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKG9iai5kYXRlIHwgZGF0ZTogJ0xMTEwnKSArICcsICcgKyByZXNvdXJjZVN0cmluZ3MuaWd4X2NhbGVuZGFyX3NlbGVjdF9tb250aFwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uQWN0aXZlVmlld1llYXJLQihvYmouZGF0ZSwgJGV2ZW50LCBvYmouaW5kZXgpXCJcbiAgICAgICAgKG1vdXNlZG93bik9XCJvbkFjdGl2ZVZpZXdZZWFyKCRldmVudCwgb2JqLmRhdGUsIG9iai5pbmRleClcIlxuICAgICAgICBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJfX2RhdGVcIj5cbiAgICAgICAge3sgZm9ybWF0dGVkTW9udGgob2JqLmRhdGUpIH19XG4gICAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBZZWFyIC0tPlxuPG5nLXRlbXBsYXRlICNkZWZhdWx0WWVhciBsZXQtb2JqPlxuICAgIDxzcGFuICpuZ0lmPVwiYWN0aXZlVmlldyA9PT0gJ3llYXInXCIgY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX2FyaWEtb2ZmLXNjcmVlblwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPnt7IGZvcm1hdHRlZFllYXIob2JqLmRhdGUpIH19PC9zcGFuPlxuICAgIDxzcGFuXG4gICAgICAgICN5ZWFyc0J0blxuICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIob2JqLmRhdGUgfCBkYXRlOiAneXl5eScpICsgJywgJyArIHJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfc2VsZWN0X3llYXJcIlxuICAgICAgICAoa2V5ZG93bik9XCJvbkFjdGl2ZVZpZXdEZWNhZGVLQihvYmouZGF0ZSwgJGV2ZW50LCBvYmouaW5kZXgpXCJcbiAgICAgICAgKG1vdXNlZG93bik9XCJvbkFjdGl2ZVZpZXdEZWNhZGUoJGV2ZW50LCBvYmouZGF0ZSwgb2JqLmluZGV4KVwiXG4gICAgICAgIGNsYXNzPVwiaWd4LWNhbGVuZGFyLXBpY2tlcl9fZGF0ZVwiPlxuICAgICAgICB7eyBmb3JtYXR0ZWRZZWFyKG9iai5kYXRlKSB9fVxuICAgIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gTW9udGggWWVhciAtLT5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdE1vbnRoWWVhciBsZXQtb2JqIGxldC1yZXN1bHQ+XG4gICAgPHNwYW4gKm5nSWY9XCJtb250aHNWaWV3TnVtYmVyIDwgMiB8fCBvYmouaW5kZXggPCAxXCIgY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX2FyaWEtb2ZmLXNjcmVlblwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxuICAgICAgICAgICAge3sgbW9udGhzVmlld051bWJlciA+IDEgP1xuICAgICAgICAocmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9maXJzdF9waWNrZXJfb2YucmVwbGFjZSgnezB9JywgbW9udGhzVmlld051bWJlci50b1N0cmluZygpKSArICcgJyArXG4gICAgICAgICAgICAob2JqLmRhdGUgfCBkYXRlOiAnTExMTCB5eXl5JykpIDpcbiAgICAgICAgcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9zZWxlY3RlZF9tb250aF9pcyArIChvYmouZGF0ZSB8IGRhdGU6ICdMTExMIHl5eXknKX19XG4gICAgPC9zcGFuPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkZWZhdWx0TW9udGg7IGNvbnRleHQ6IHskaW1wbGljaXQ6IG9ian1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGVmYXVsdFllYXI7IGNvbnRleHQ6IHskaW1wbGljaXQ6IG9ian1cIj48L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gRGVjYWRlIC0tPlxuPG5nLXRlbXBsYXRlICNkZWZhdWx0RGVjYWRlPlxuICAgIDxzcGFuPnt7IGdldERlY2FkZVJhbmdlKCkuc3RhcnQgfX0gLSB7eyBnZXREZWNhZGVSYW5nZSgpLmVuZCB9fTwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gVE9ETzogTWFrZSBhcnJvd3MgdGVtcGxhdGFibGUgdmlhIGV4dGVybmFsIHRlbXBsYXRlcyBhbmQgYmFzZWQgb24gdGhlbWUgLS0+XG48IS0tIFByZXZpb3VzIGFycm93IGljb24gLS0+XG48bmctdGVtcGxhdGUgI3ByZXZBcnJvdyBsZXQtb2JqPlxuICAgIDxpZ3gtaWNvbiBhcmlhLWhpZGRlbj1cInRydWVcIj5rZXlib2FyZF9hcnJvd19sZWZ0PC9pZ3gtaWNvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gTmV4dCBhcnJvdyBpY29uIC0tPlxuPG5nLXRlbXBsYXRlICNuZXh0QXJyb3cgbGV0LW9iaj5cbiAgICA8aWd4LWljb24gYXJpYS1oaWRkZW49XCJ0cnVlXCI+a2V5Ym9hcmRfYXJyb3dfcmlnaHQ8L2lneC1pY29uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBQcmV2aW91cyBwaWNrZXIgYnV0dG9uIC0tPlxuPG5nLXRlbXBsYXRlICNwcmV2UGFnZUJ1dHRvbiBsZXQtb2JqPlxuICAgIDxkaXZcbiAgICAgICAgI3ByZXZQYWdlQnRuXG4gICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgIGNsYXNzPVwiaWd4LWNhbGVuZGFyLXBpY2tlcl9fcHJldlwiXG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInByZXZOYXZMYWJlbCgoZ2V0UHJldk1vbnRoKHZpZXdEYXRlKSB8IGRhdGU6ICdMTExMJykpXCJcbiAgICAgICAgZGF0YS1hY3Rpb249XCJwcmV2XCJcbiAgICAgICAgaWd4Q2FsZW5kYXJTY3JvbGxQYWdlXG4gICAgICAgIFtzdGFydFNjcm9sbF09XCJzdGFydFByZXZQYWdlU2Nyb2xsXCJcbiAgICAgICAgW3N0b3BTY3JvbGxdPVwic3RvcFBhZ2VTY3JvbGxcIlxuICAgICAgICAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInByZXZBcnJvd1wiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBOZXh0IHBpY2tlciBidXR0b24gLS0+XG48bmctdGVtcGxhdGUgI25leHRQYWdlQnV0dG9uIGxldC1vYmo+XG4gICAgPGRpdlxuICAgICAgICAjbmV4dFBhZ2VCdG5cbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgY2xhc3M9XCJpZ3gtY2FsZW5kYXItcGlja2VyX19uZXh0XCJcbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibmV4dE5hdkxhYmVsKChnZXROZXh0TW9udGgodmlld0RhdGUsIG1vbnRoc1ZpZXdOdW1iZXIpIHwgZGF0ZTogJ0xMTEwnKSlcIlxuICAgICAgICBkYXRhLWFjdGlvbj1cIm5leHRcIlxuICAgICAgICBpZ3hDYWxlbmRhclNjcm9sbFBhZ2VcbiAgICAgICAgW3N0YXJ0U2Nyb2xsXT1cInN0YXJ0TmV4dFBhZ2VTY3JvbGxcIlxuICAgICAgICBbc3RvcFNjcm9sbF09XCJzdG9wUGFnZVNjcm9sbFwiXG4gICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibmV4dEFycm93XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFBJQ0tFUiBJTiBEQVlTIC0tPlxuPG5nLXRlbXBsYXRlICNjYWxlbmRhckRheXNQaWNrZXIgbGV0LWk+XG4gICAgPHNlY3Rpb24gY2xhc3M9XCJpZ3gtY2FsZW5kYXItcGlja2VyXCIgW3N0eWxlLi0tY2FsZW5kYXItcm93LXN0YXJ0XT1cIjEgKyAoMiAqIGkpXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtY2FsZW5kYXItcGlja2VyX19kYXRlc1wiIFthdHRyLmRhdGEtbW9udGhdPVwiaSB8IElneEdldFZpZXdEYXRlOnZpZXdEYXRlOmZhbHNlXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwic3ViaGVhZGVyVGVtcGxhdGUgPyBzdWJoZWFkZXJUZW1wbGF0ZSA6IGRlZmF1bHRNb250aFllYXI7IGNvbnRleHQ6IGdldENvbnRleHQoaSlcIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJpZ3gtY2FsZW5kYXItcGlja2VyX19uYXZcIlxuICAgICAgICAgICAgKm5nSWY9XCJ0aGlzLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcgPyBpID09PSBtb250aHNWaWV3TnVtYmVyIC0gMSA6IGkgPT09IDBcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicHJldlBhZ2VCdXR0b25cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJuZXh0UGFnZUJ1dHRvblwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFBJQ0tFUiBJTiBNT05USFMgLS0+XG48bmctdGVtcGxhdGUgI2NhbGVuZGFyWWVhclBpY2tlcj5cbiAgICA8c2VjdGlvbiBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJfX2RhdGVzXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdWJoZWFkZXJUZW1wbGF0ZSA/IHN1YmhlYWRlclRlbXBsYXRlIDogZGVmYXVsdFllYXI7IGNvbnRleHQ6IGdldENvbnRleHQoMClcIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJfX25hdlwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInByZXZQYWdlQnV0dG9uXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibmV4dFBhZ2VCdXR0b25cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9zZWN0aW9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBQSUNLRVIgSU4gWUVBUlMgLS0+XG48bmctdGVtcGxhdGUgI2NhbGVuZGFyRGVjYWRlUGlja2VyPlxuICAgIDxzZWN0aW9uIGNsYXNzPVwiaWd4LWNhbGVuZGFyLXBpY2tlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWNhbGVuZGFyLXBpY2tlcl9fZGF0ZXNcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdWJoZWFkZXJUZW1wbGF0ZSA/IHN1YmhlYWRlclRlbXBsYXRlIDogZGVmYXVsdERlY2FkZTtcIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJfX25hdlwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInByZXZQYWdlQnV0dG9uXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibmV4dFBhZ2VCdXR0b25cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9zZWN0aW9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuXG48aGVhZGVyXG4gICAgYXJpYS1sYWJlbGxlZGJ5PVwiaWd4LWFyaWEtY2FsZW5kYXItdGl0bGUtbW9udGggaWd4LWFyaWEtY2FsZW5kYXItdGl0bGUteWVhclwiXG4gICAgY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX2hlYWRlclwiXG4gICAgKm5nSWY9XCJzZWxlY3Rpb24gPT09ICdzaW5nbGUnICYmIGhhc0hlYWRlciB8fCBzZWxlY3Rpb24gPT09ICdyYW5nZScgJiYgaGFzSGVhZGVyXCI+XG4gICAgPGg1IGlkPVwiaWd4LWFyaWEtY2FsZW5kYXItdGl0bGUteWVhclwiIGNsYXNzPVwiaWd4LWNhbGVuZGFyX19oZWFkZXIteWVhclwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVGl0bGVUZW1wbGF0ZSA/PyBkZWZhdWx0SGVhZGVyVGl0bGU7IGNvbnRleHQ6IGhlYWRlckNvbnRleHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2g1PlxuICAgIDxoMiBpZD1cImlneC1hcmlhLWNhbGVuZGFyLXRpdGxlLW1vbnRoXCIgY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX2hlYWRlci1kYXRlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJUZW1wbGF0ZSA/IGhlYWRlclRlbXBsYXRlIDogZGVmYXVsdEhlYWRlckRhdGU7IGNvbnRleHQ6IGhlYWRlckNvbnRleHRcIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9oMj5cbjwvaGVhZGVyPlxuXG5cbjxkaXZcbiAgICAjd3JhcHBlclxuICAgIFtzdHlsZS4tLWNhbGVuZGFyLW1vbnRoc109XCJtb250aHNWaWV3TnVtYmVyXCJcbiAgICBbdGFiSW5kZXhdPVwiMFwiXG4gICAgY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX3dyYXBwZXJcIlxuICAgIFtjbGFzcy5pZ3gtY2FsZW5kYXJfX3dyYXBwZXItLXZlcnRpY2FsXT1cIm9yaWVudGF0aW9uID09PSAndmVydGljYWwnXCJcbiAgICBbYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnRdPVwiYWN0aXZlRGVzY2VuZGFudFwiXG4gICAgW2F0dHIuYXJpYS1tdWx0aXNlbGVjdGFibGVdPVwic2VsZWN0aW9uICE9PSAnc2luZ2xlJ1wiXG4gICAgYXJpYS1sYWJlbGxlZGJ5PVwiY2FsZW5kYXItZGVzY1wiXG4gICAgcm9sZT1cImdyaWRcIlxuICAgID5cbiAgICA8Y2FwdGlvbiBpZD1cImNhbGVuZGFyLWRlc2NcIiB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX2FyaWEtb2ZmLXNjcmVlblwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uID09PSAnbXVsdGknXCI+XG4gICAgICAgICAgICB7eyBtb250aHNWaWV3TnVtYmVyICYmIG1vbnRoc1ZpZXdOdW1iZXIgPiAxID9cbiAgICAgICAgICAgIHJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfbXVsdGlfc2VsZWN0aW9uLnJlcGxhY2UoJ3swfScsIG1vbnRoc1ZpZXdOdW1iZXIudG9TdHJpbmcoKSkgOlxuICAgICAgICAgICAgcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9zaW5ndWxhcl9tdWx0aV9zZWxlY3Rpb259fVxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGlvbiA9PT0gJ3JhbmdlJ1wiPlxuICAgICAgICAgICAge3sgbW9udGhzVmlld051bWJlciAmJiBtb250aHNWaWV3TnVtYmVyID4gMSA/XG4gICAgICAgICAgICByZXNvdXJjZVN0cmluZ3MuaWd4X2NhbGVuZGFyX3JhbmdlX3NlbGVjdGlvbi5yZXBsYWNlKCd7MH0nLCBtb250aHNWaWV3TnVtYmVyLnRvU3RyaW5nKCkpIDpcbiAgICAgICAgICAgIHJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfc2luZ3VsYXJfcmFuZ2Vfc2VsZWN0aW9ufX1cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3Rpb24gPT09ICdzaW5nbGUnXCI+XG4gICAgICAgICAgICB7eyBtb250aHNWaWV3TnVtYmVyICYmIG1vbnRoc1ZpZXdOdW1iZXIgPiAxID9cbiAgICAgICAgICAgIHJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfc2luZ2xlX3NlbGVjdGlvbi5yZXBsYWNlKCd7MH0nLCBtb250aHNWaWV3TnVtYmVyLnRvU3RyaW5nKCkpIDpcbiAgICAgICAgICAgIHJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfc2luZ3VsYXJfc2luZ2xlX3NlbGVjdGlvbn19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvY2FwdGlvbj5cbiAgICA8c2VjdGlvblxuICAgICAgICBjbGFzcz1cImlneC1jYWxlbmRhcl9fcGlja2Vyc1wiXG4gICAgICAgIFtjbGFzcy5pZ3gtY2FsZW5kYXJfX3BpY2tlcnMtLWRheXNdPVwiaXNEZWZhdWx0Vmlld1wiXG4gICAgICAgIFtjbGFzcy5pZ3gtY2FsZW5kYXJfX3BpY2tlcnMtLXZlcnRpY2FsXT1cIm9yaWVudGF0aW9uID09PSAndmVydGljYWwnXCJcbiAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0RlZmF1bHRWaWV3XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB2aWV3IG9mIG1vbnRoc1ZpZXdOdW1iZXIgfCBJZ3hNb250aFZpZXdTbG90czsgaW5kZXggYXMgaVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjYWxlbmRhckRheXNQaWNrZXI7IGNvbnRleHQ6IHskaW1wbGljaXQ6IGl9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzWWVhclZpZXdcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjYWxlbmRhclllYXJQaWNrZXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRGVjYWRlVmlld1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNhbGVuZGFyRGVjYWRlUGlja2VyXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvc2VjdGlvbj5cblxuICAgIDxzZWN0aW9uIGNsYXNzPVwiaWd4LWNhbGVuZGFyX19ib2R5XCIgW2NsYXNzLmlneC1jYWxlbmRhcl9fYm9keS0tdmVydGljYWxdPVwib3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCdcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0RlZmF1bHRWaWV3XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB2aWV3IG9mIG1vbnRoc1ZpZXdOdW1iZXIgfCBJZ3hNb250aFZpZXdTbG90czsgaW5kZXggYXMgaVwiPlxuICAgICAgICAgICAgICAgIDxpZ3gtZGF5cy12aWV3XG4gICAgICAgICAgICAgICAgICAgICNkYXlzXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJyb3dncm91cFwiXG4gICAgICAgICAgICAgICAgICAgIFt0YWJJbmRleF09XCItMVwiXG4gICAgICAgICAgICAgICAgICAgIFtzZWxlY3Rpb25dPVwic2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgW2xvY2FsZV09XCJsb2NhbGVcIlxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICBbKGFjdGl2ZURhdGUpXT1cImFjdGl2ZURhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbKHByZXZpZXdSYW5nZURhdGUpXT1cInByZXZpZXdSYW5nZURhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbdmlld0RhdGVdPVwiaSB8IElneEdldFZpZXdEYXRlOiB2aWV3RGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFt3ZWVrU3RhcnRdPVwid2Vla1N0YXJ0XCJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1hdE9wdGlvbnNdPVwiZm9ybWF0T3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtYXRWaWV3c109XCJmb3JtYXRWaWV3c1wiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZERhdGVzXT1cImRpc2FibGVkRGF0ZXNcIlxuICAgICAgICAgICAgICAgICAgICBbc3BlY2lhbERhdGVzXT1cInNwZWNpYWxEYXRlc1wiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS4tLWNhbGVuZGFyLXJvdy1zdGFydF09XCIoaSArIDEpICogMlwiXG4gICAgICAgICAgICAgICAgICAgIFtoaWRlTGVhZGluZ0RheXNdPVwiaGlkZU91dHNpZGVEYXlzIHx8IGkgIT09IDBcIlxuICAgICAgICAgICAgICAgICAgICBbaGlkZVRyYWlsaW5nRGF5c109XCJoaWRlT3V0c2lkZURheXMgfHwgaSAhPT0gbW9udGhzVmlld051bWJlciAtIDFcIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd1dlZWtOdW1iZXJzXT1cInNob3dXZWVrTnVtYmVyc1wiXG4gICAgICAgICAgICAgICAgICAgIFtzaG93QWN0aXZlRGF5XT1cInNob3dBY3RpdmVEYXlcIlxuICAgICAgICAgICAgICAgICAgICBbc3RhbmRhbG9uZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIChzd2lwZXJpZ2h0KT1cInByZXZpb3VzUGFnZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgKHN3aXBlbGVmdCk9XCJuZXh0UGFnZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgKGRhdGVTZWxlY3RlZCk9XCJoYW5kbGVEYXRlU2VsZWN0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCI+XG4gICAgICAgICAgICAgICAgPC9pZ3gtZGF5cy12aWV3PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1llYXJWaWV3XCI+XG4gICAgICAgICAgICA8aWd4LW1vbnRocy12aWV3XG4gICAgICAgICAgICAgICAgI21vbnRoc1xuICAgICAgICAgICAgICAgIHJvbGU9XCJyb3dncm91cFwiXG4gICAgICAgICAgICAgICAgW3RhYkluZGV4XT1cIi0xXCJcbiAgICAgICAgICAgICAgICBbZGF0ZV09XCJ2aWV3RGF0ZVwiXG4gICAgICAgICAgICAgICAgW2xvY2FsZV09XCJsb2NhbGVcIlxuICAgICAgICAgICAgICAgIFtmb3JtYXRWaWV3XT1cImZvcm1hdFZpZXdzLm1vbnRoXCJcbiAgICAgICAgICAgICAgICBbbW9udGhGb3JtYXRdPVwiZm9ybWF0T3B0aW9ucy5tb250aFwiXG4gICAgICAgICAgICAgICAgW3Nob3dBY3RpdmVdPVwic2hvd0FjdGl2ZURheVwiXG4gICAgICAgICAgICAgICAgW3N0YW5kYWxvbmVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIChzd2lwZXJpZ2h0KT1cInByZXZpb3VzUGFnZSgpXCJcbiAgICAgICAgICAgICAgICAoc3dpcGVsZWZ0KT1cIm5leHRQYWdlKClcIlxuICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlZCk9XCJ1cGRhdGVZZWFyKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChhY3RpdmVEYXRlQ2hhbmdlZCk9XCJ1cGRhdGVBY3RpdmVEZXNjZW5kYW50KCRldmVudClcIlxuICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJjaGFuZ2VNb250aCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCI+XG4gICAgICAgICAgICA8L2lneC1tb250aHMtdmlldz5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRGVjYWRlVmlld1wiPlxuICAgICAgICAgICAgPGlneC15ZWFycy12aWV3XG4gICAgICAgICAgICAgICAgI2RlY2FkZVxuICAgICAgICAgICAgICAgIHJvbGU9XCJyb3dncm91cFwiXG4gICAgICAgICAgICAgICAgW3RhYkluZGV4XT1cIi0xXCJcbiAgICAgICAgICAgICAgICBbZGF0ZV09XCJ2aWV3RGF0ZVwiXG4gICAgICAgICAgICAgICAgW2xvY2FsZV09XCJsb2NhbGVcIlxuICAgICAgICAgICAgICAgIFtmb3JtYXRWaWV3XT1cImZvcm1hdFZpZXdzLnllYXJcIlxuICAgICAgICAgICAgICAgIFt5ZWFyRm9ybWF0XT1cImZvcm1hdE9wdGlvbnMueWVhclwiXG4gICAgICAgICAgICAgICAgW3Nob3dBY3RpdmVdPVwic2hvd0FjdGl2ZURheVwiXG4gICAgICAgICAgICAgICAgW3N0YW5kYWxvbmVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIChzd2lwZXJpZ2h0KT1cInByZXZpb3VzUGFnZSgpXCJcbiAgICAgICAgICAgICAgICAoc3dpcGVsZWZ0KT1cIm5leHRQYWdlKClcIlxuICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlZCk9XCJ1cGRhdGVZZWFyKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChhY3RpdmVEYXRlQ2hhbmdlZCk9XCJ1cGRhdGVBY3RpdmVEZXNjZW5kYW50KCRldmVudClcIlxuICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJjaGFuZ2VZZWFyKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICAgICAgICAgIDwvaWd4LXllYXJzLXZpZXc+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvc2VjdGlvbj5cbjwvZGl2PlxuIl19
904
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2NhbGVuZGFyL2NhbGVuZGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2lnbml0ZXVpLWFuZ3VsYXIvc3JjL2xpYi9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLEtBQUssRUFDTCxTQUFTLEVBR1QsWUFBWSxFQUdaLGdCQUFnQixFQUNiLFlBQVksR0FDZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbkQsT0FBTyxFQUNOLGtDQUFrQyxFQUMvQix1Q0FBdUMsRUFDMUMscUNBQXFDLEVBQ2xDLDhCQUE4QixHQUNqQyxNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSxlQUFlLEVBQW1CLE1BQU0sWUFBWSxDQUFDO0FBQzlELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLG9CQUFvQixFQUFFLGNBQWMsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3JHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7QUFFaEUsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO0FBRWhCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBa0JILE1BQU0sT0FBTyxvQkFBcUIsU0FBUSx3QkFBd0I7SUFqQmxFOztRQStCQzs7Ozs7Ozs7Ozs7V0FXRztRQUdJLE9BQUUsR0FBRyxnQkFBaUIsT0FBTyxFQUFHLEVBQUUsQ0FBQztRQUV2Qzs7Ozs7Ozs7V0FRRztRQUVJLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFFeEI7Ozs7Ozs7O1dBUUc7UUFFSSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBR2pCLGdCQUFXLEdBQThCLFlBQVksQ0FBQztRQUd0RCxzQkFBaUIsR0FBOEIsWUFBWSxDQUFDO1FBd0JuRTs7Ozs7OztXQU9HO1FBRUksb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFhbEM7Ozs7O1dBS0c7UUFFSSxlQUFVLEdBQUcsSUFBSSxDQUFDO1FBMk56Qjs7O1dBR0c7UUFDSSxlQUFVLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUM7UUFnQjdDOzs7OztXQUtHO1FBQ0kscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBRWhDOzs7V0FHRztRQUNLLHNCQUFpQixHQUFHLENBQUMsQ0FBQztRQXVXOUI7Ozs7O1dBS0c7UUFDSSx3QkFBbUIsR0FBRyxDQUFDLGdCQUFnQixHQUFHLEtBQUssRUFBRSxFQUFFO1lBQ3pELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsbUJBQW1CLG9DQUF1QixDQUFDO1lBQ2hELElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUE7UUFFRDs7Ozs7V0FLRztRQUNJLHdCQUFtQixHQUFHLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxFQUFFLEVBQUU7WUFDekQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxtQkFBbUIsb0NBQXVCLENBQUM7WUFDaEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQTtRQUVEOzs7OztXQUtHO1FBQ0ksbUJBQWMsR0FBRyxDQUFDLEtBQW9CLEVBQUUsRUFBRTtZQUNoRCxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7WUFFeEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUVoQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN6QyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUNwQztZQUVELElBQUksQ0FBQyxtQkFBbUIsb0NBQXVCLENBQUM7UUFDakQsQ0FBQyxDQUFBO0tBMFJEO0lBeDlCQTs7Ozs7Ozs7T0FRRztJQUNILElBQ1csZ0JBQWdCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO0lBQy9CLENBQUM7SUFFRSxJQUFXLGdCQUFnQixDQUFDLEdBQVc7UUFDbkMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFO1lBQ1QsT0FBTztTQUNWO1FBRVAsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEdBQUcsQ0FBQztJQUM5QixDQUFDO0lBYUQ7Ozs7O09BS0c7SUFDSCxJQUNXLGtCQUFrQjtRQUM1QixPQUFPLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxVQUFVLENBQUM7SUFDOUMsQ0FBQztJQTBFRDs7Ozs7T0FLRztJQUNILElBQVcsVUFBVTtRQUNwQixPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssZUFBZSxDQUFDLElBQUksQ0FBQztJQUNqRCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxJQUFXLG1CQUFtQjtRQUM3QixJQUFJLElBQUksQ0FBQyw0QkFBNEIsRUFBRTtZQUN0QyxPQUFPLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxRQUFRLENBQUM7U0FDbEQ7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILElBQVcsbUJBQW1CLENBQUMsU0FBYztRQUM1QyxJQUFJLENBQUMsNEJBQTRCLEdBQUcsU0FBUyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILElBQVcsY0FBYztRQUN4QixJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtZQUNqQyxPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUM7U0FDN0M7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILElBQVcsY0FBYyxDQUFDLFNBQWM7UUFDdkMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLFNBQVMsQ0FBQztJQUMxQyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILElBQVcsaUJBQWlCO1FBQzNCLElBQUksSUFBSSxDQUFDLDBCQUEwQixFQUFFO1lBQ3BDLE9BQU8sSUFBSSxDQUFDLDBCQUEwQixDQUFDLFFBQVEsQ0FBQztTQUNoRDtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2IsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0gsSUFBVyxpQkFBaUIsQ0FBQyxTQUFjO1FBQzFDLElBQUksQ0FBQywwQkFBMEIsR0FBRyxTQUFTLENBQUM7SUFDN0MsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxJQUFXLGFBQWE7UUFDdkIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxJQUFXLE9BQU87UUFDakIsTUFBTSxJQUFJLEdBQVMsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNqQyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsSUFBVyxVQUFVO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUNoRCxDQUFDO0lBMkRZLFdBQVcsQ0FBQyxLQUFpQjtRQUNuQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUlKOzs7T0FHRztJQUNBLElBQWMsYUFBYSxDQUFDLEtBQWM7UUFDdEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBYyxhQUFhO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUMvQixDQUFDO0lBRUQsSUFBYyxnQkFBZ0I7UUFDMUIsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLE9BQU8sRUFBRTtZQUM3QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDcEM7UUFFRCxPQUFPLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzdELENBQUM7SUFFRCxJQUFjLGdCQUFnQixDQUFDLElBQVU7UUFDckMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBRUcsZUFBZTtRQUNmLElBQUksQ0FBQyxrQkFBa0I7YUFDbEIsc0JBQXNCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUM7YUFDMUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDO2FBQzlCLEdBQUcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQzthQUNsQyxHQUFHLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUM7YUFDbEMsR0FBRyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDO2FBQ3BDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQzthQUMxQixHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUM7YUFDdEIsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDO2FBQ3hCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQzthQUN0QixHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUM7YUFDaEMsR0FBRyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFMUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUMsS0FBaUIsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3hHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQWlCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUV0RyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUN0QixTQUFTLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUMvQixTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ2pDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFDWCxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQzdCLFNBQVMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQ2xDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZixRQUFRLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtnQkFDOUI7b0JBQ0ksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUNwQixNQUFNO2dCQUNWO29CQUNJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDaEIsTUFBTTtnQkFDVix1Q0FBMEI7Z0JBQzFCO29CQUNJLE1BQU07YUFDYjtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRVAsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN6QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXpCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDO2dCQUN0QixhQUFhLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtnQkFDcEMsWUFBWSxFQUFFLElBQUksQ0FBQyxRQUFRO2FBQzlCLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLGNBQWMsQ0FBQyxLQUFpQjtRQUNwQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFeEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVPLGFBQWEsQ0FBQyxLQUFpQjtRQUNuQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFeEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxLQUFvQixFQUFFLEtBQWE7UUFDMUQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV4QixNQUFNLElBQUksR0FBRyxvQkFBb0IsQ0FDN0IsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQ2pDLEtBQUssRUFDTCxJQUFJLENBQUMsYUFBYSxDQUNyQixDQUFDO1FBRUYsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBRTlCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDN0IsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztRQUUxRCxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2YsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM3RDtJQUNMLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxLQUFvQixFQUFFLEtBQWE7UUFDeEQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV4QixNQUFNLEdBQUcsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsbUNBQXNCLENBQUMsa0NBQXFCLENBQUM7UUFFcEUsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLGVBQWUsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRTtZQUM3RCxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDO1lBQzFFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDNUI7YUFBTTtZQUNILElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1NBQy9CO0lBQ0wsQ0FBQztJQUVPLFlBQVksQ0FBQyxLQUFvQjtRQUNyQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVPLGNBQWMsQ0FBQyxLQUFvQjtRQUN2QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTyxTQUFTLENBQUMsS0FBb0I7UUFDbEMsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLGVBQWUsQ0FBQyxLQUFLLEVBQUU7WUFDM0MsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDNUI7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssZUFBZSxDQUFDLElBQUksRUFBRTtZQUMxQyxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzNDO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLGVBQWUsQ0FBQyxNQUFNLEVBQUU7WUFDNUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMzQztJQUNMLENBQUM7SUFFTyxXQUFXLENBQUMsS0FBb0I7UUFDcEMsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLGVBQWUsQ0FBQyxLQUFLLEVBQUU7WUFDM0MsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQzVCO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLGVBQWUsQ0FBQyxJQUFJLEVBQUU7WUFDMUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM3QztRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxlQUFlLENBQUMsTUFBTSxFQUFFO1lBQzVDLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDN0M7SUFDTCxDQUFDO0lBRU8sV0FBVyxDQUFDLEtBQW9CO1FBQ3BDLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxlQUFlLENBQUMsS0FBSyxFQUFFO1lBQzNDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQzVCO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLGVBQWUsQ0FBQyxJQUFJLEVBQUU7WUFDMUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM3QztRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxlQUFlLENBQUMsTUFBTSxFQUFFO1lBQzVDLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDN0M7SUFDTCxDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQW9CO1FBQ3JDLElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxlQUFlLENBQUMsS0FBSyxFQUFFO1lBQzNDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUM1QjtRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxlQUFlLENBQUMsSUFBSSxFQUFFO1lBQzFDLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDOUM7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssZUFBZSxDQUFDLE1BQU0sRUFBRTtZQUM1QyxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzlDO0lBQ0wsQ0FBQztJQUVPLE9BQU8sQ0FBQyxLQUFvQjtRQUNoQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFeEIsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLGVBQWUsQ0FBQyxLQUFLLEVBQUU7WUFDM0MsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMxQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQzVCO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLGVBQWUsQ0FBQyxJQUFJLEVBQUU7WUFDMUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDekM7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssZUFBZSxDQUFDLE1BQU0sRUFBRTtZQUM1QyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN6QztRQUVELElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRU8sTUFBTSxDQUFDLEtBQW9CO1FBQy9CLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV4QixJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssZUFBZSxDQUFDLEtBQUssRUFBRTtZQUMzQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRTtpQkFDbEMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO2lCQUN2QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRXRELElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQzFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDNUI7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssZUFBZSxDQUFDLElBQUksRUFBRTtZQUMxQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN4QztRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxlQUFlLENBQUMsTUFBTSxFQUFFO1lBQzVDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3hDO0lBQ0wsQ0FBQztJQUVPLEtBQUssQ0FBQyxLQUFvQjtRQUM5QixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFeEIsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLGVBQWUsQ0FBQyxLQUFLLEVBQUU7WUFDM0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUU7aUJBQ2xDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztpQkFDdkMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUV0RCxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQzNDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDNUI7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssZUFBZSxDQUFDLElBQUksRUFBRTtZQUMxQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN2QztRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxlQUFlLENBQUMsTUFBTSxFQUFFO1lBQzVDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3ZDO0lBQ0wsQ0FBQztJQUVKOzs7Ozs7T0FNRztJQUNJLGNBQWMsQ0FBQyxLQUFXO1FBQ2hDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUU7WUFDM0IsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN6QztRQUVELE9BQU8sR0FBSSxLQUFLLENBQUMsUUFBUSxFQUFHLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxZQUFZLENBQUMsZ0JBQWdCLEdBQUcsS0FBSztRQUMzQyxJQUFJLGdCQUFnQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsc0NBQXlCLEVBQUU7WUFDMUUsT0FBTztTQUNQO1FBRUssSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0Isb0NBQXVCLENBQUM7SUFDL0QsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksUUFBUSxDQUFDLGdCQUFnQixHQUFHLEtBQUs7UUFDdkMsSUFBSSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsbUJBQW1CLHNDQUF5QixFQUFFO1lBQzFFLE9BQU87U0FDUDtRQUVLLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLG9DQUF1QixDQUFDO0lBQy9ELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNVLFVBQVUsQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLEVBQUUsU0FBMEI7UUFDM0UsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDdEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1FBRW5DLFFBQVEsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNyQixLQUFLLE9BQU87Z0JBQ1IsSUFBSSxTQUFTLHNDQUF5QixFQUFFO29CQUNwQyxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7aUJBQzNFO2dCQUVELElBQUksU0FBUyxzQ0FBeUIsRUFBRTtvQkFDcEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztpQkFDMUU7Z0JBRUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUM7b0JBQ3RCLGFBQWEsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO29CQUNwQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVE7aUJBQzlCLENBQUMsQ0FBQztnQkFFSCxNQUFNO1lBRVYsS0FBSyxNQUFNO2dCQUNQLElBQUksU0FBUyxzQ0FBeUIsRUFBRTtvQkFDcEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO2lCQUMxRTtnQkFFRCxJQUFJLFNBQVMsc0NBQXlCLEVBQUU7b0JBQ3BDLElBQUksQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7aUJBQ3pFO2dCQUVELE1BQU07WUFFVixLQUFLLFFBQVE7Z0JBQ1QsSUFBSSxTQUFTLHNDQUF5QixFQUFFO29CQUNwQyxJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUM7aUJBQzNFO2dCQUVELElBQUksU0FBUyxzQ0FBeUIsRUFBRTtvQkFDcEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQztpQkFDMUU7Z0JBRUQsTUFBTTtTQUNiO1FBRUQscURBQXFEO1FBQ3JELElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCO1lBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQTZDSjs7O09BR0c7SUFDSSxrQkFBa0IsQ0FBQyxLQUFpQixFQUFFLElBQVUsRUFBRSxhQUFxQjtRQUN2RSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFN0IsS0FBSyxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQzVCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxvQkFBb0IsQ0FBQyxJQUFVLEVBQUUsS0FBb0IsRUFBRSxhQUFxQjtRQUNsRixLQUFLLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBRS9DLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDNUM7SUFDRixDQUFDO0lBRUQ7OztPQUdHO0lBQ08sZ0JBQWdCLENBQUMsS0FBaUI7UUFDckMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwRSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsRCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUUxRSxJQUFJLFdBQVcsRUFBRTtZQUNiLElBQUksQ0FBQyxVQUFVLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQztTQUMxQztJQUNMLENBQUM7SUFFSjs7O09BR0c7SUFDTyxrQkFBa0IsQ0FBQyxLQUFvQjtRQUMxQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3RDLElBQUksQ0FBQyxVQUFVLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQztTQUMxQztJQUNMLENBQUM7SUFFSjs7O09BR0c7SUFDTyxnQkFBZ0I7UUFDekIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUN2QixNQUFNLGNBQWMsR0FBRyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUE7UUFDL0YsTUFBTSxZQUFZLEdBQUcsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQTtRQUVyRixPQUFPO1lBQ04sUUFBUSxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ3JDLE9BQU8sRUFBRSxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztTQUNsQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNPLGlCQUFpQjtRQUMxQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBdUIsQ0FBQztRQUUzQyxPQUFPO1lBQ04sS0FBSyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqRCxHQUFHLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDaEQsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDQSxJQUFjLFNBQVM7UUFDbkIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRTthQUMzQixPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQ3JDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUo7Ozs7O09BS0c7SUFDTyxtQkFBbUIsQ0FBQyxJQUFVO1FBQ2pDLE1BQU0sVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDeEMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUMvQixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksVUFBVSxFQUFFO1lBQ1osSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7U0FDeEI7UUFFUCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWhCLHFCQUFxQjtRQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQzdCLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNsQixDQUFDLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7WUFDckMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztRQUVHLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxRQUFRLEVBQUU7WUFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1NBQ3BDO2FBQU07WUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQzFDO0lBQ1IsQ0FBQztJQUVEOzs7T0FHRztJQUNJLFdBQVcsQ0FBQyxJQUFVO1FBQzVCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUN0RixJQUFJLENBQUMsVUFBVSxHQUFHLGVBQWUsQ0FBQyxLQUFLLENBQUM7UUFDbEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ2dCLFVBQVUsQ0FBQyxJQUFVO1FBQ2pDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUN0RixJQUFJLENBQUMsVUFBVSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUM7SUFDckMsQ0FBQztJQUVKOzs7T0FHRztJQUNJLFVBQVUsQ0FBQyxJQUFVO1FBQzNCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxRQUFRLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN0RixDQUFDO0lBRVMsc0JBQXNCLENBQUMsSUFBVTtRQUNwQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO0lBQ2pDLENBQUM7SUFFSjs7O09BR0c7SUFDSSxnQkFBZ0IsQ0FBQyxLQUFpQixFQUFFLElBQVUsRUFBRSxhQUFxQjtRQUNyRSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQzdCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQzVCLENBQUM7SUFFRDs7O09BR0c7SUFDSSxrQkFBa0IsQ0FBQyxJQUFVLEVBQUUsS0FBb0IsRUFBRSxhQUFxQjtRQUMxRSxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFOUIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN0QyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLFVBQVUsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1lBQ25DLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBRXJCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQzVDO0lBQ0YsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDYSxZQUFZLENBQUMsS0FBOEI7UUFDMUQsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUUxQixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQzdCLENBQUMsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUNyQyxDQUFDLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztZQUNkLENBQUMsQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFHRDs7Ozs7T0FLRztJQUNJLFVBQVUsQ0FBQyxDQUFTO1FBQ3BCLE1BQU0sSUFBSSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQzFFLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7T0FHRztJQUNBLGlFQUFpRTtJQUM3RCxlQUFlLENBQUMsSUFBVTtRQUMxQixNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDakQsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDdEIsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUU7U0FDNUIsQ0FBQyxDQUFDO1FBQ0YsTUFBTSxVQUFVLEdBQ1osQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQztZQUMzQixjQUFjLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUUvQyxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzNELENBQUM7SUFFRDs7O09BR0c7SUFDSSxXQUFXO1FBQ1gsSUFBSSxDQUFDLGtCQUFrQixDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDakQsSUFBSSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM5RSxJQUFJLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFFRDs7O09BR0c7SUFDSSxZQUFZLENBQUMsSUFBVTtRQUM3QixPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN2RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksWUFBWSxDQUFDLElBQVUsRUFBRSxTQUFpQjtRQUMxQyxPQUFPLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDcEUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssZUFBZSxDQUFDLEtBQW9CLEVBQUUsQ0FBVTtRQUNqRCxNQUFNLFNBQVMsR0FBRyxDQUFDLElBQVUsRUFBRSxLQUFhLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDOUMsS0FBSyxFQUFFLEtBQUs7WUFDWixJQUFJO1lBQ0osR0FBRyxhQUFhLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDcEQsS0FBSztnQkFDTCxNQUFNO2dCQUNOLE9BQU87Z0JBQ1AsS0FBSztnQkFDTCxTQUFTO2FBQ1osQ0FBQztTQUNMLENBQUMsQ0FBQztRQUVILE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQ3JDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNwRCxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztRQUUxQixPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxDQUFDO0lBQzFDLENBQUM7OEdBbmhDVyxvQkFBb0I7a0dBQXBCLG9CQUFvQiwwR0F1Q1QsZ0JBQWdCLHNDQVloQixnQkFBZ0IscUtBdUNoQixnQkFBZ0IsdU5BMUc1QjtZQUNWO2dCQUNDLEtBQUssRUFBRSxJQUFJO2dCQUNYLE9BQU8sRUFBRSxpQkFBaUI7Z0JBQzFCLFdBQVcsRUFBRSxvQkFBb0I7YUFDakM7WUFDSztnQkFDSSxLQUFLLEVBQUUsS0FBSztnQkFDWixPQUFPLEVBQUUseUJBQXlCO2FBQ3JDO1NBQ1AsbUdBOFRpQyxrQ0FBa0MsNEJBQVcsa0NBQWtDLDhHQU8vRSx1Q0FBdUMsNEJBQVcsdUNBQXVDLDRHQVF6RixxQ0FBcUMsNEJBQVcscUNBQXFDLGlOQXZNMUYscUJBQXFCLCtGQVNyQixzQkFBc0IsMkZBU3hCLG9CQUFvQix1VkFTakIsb0JBQW9CLG9EQ3ZPbkQsNGpaQTBTQSw0Q0RoT1csSUFBSSw2RkFBRSxnQkFBZ0Isb0pBQUUsOEJBQThCLDJHQUFXLGdCQUFnQiwyRkFBRSxLQUFLLG1IQUFFLG9CQUFvQixpVEFBRSxzQkFBc0IsdUhBQUUscUJBQXFCLDRGQUFFLFFBQVEsd0NBQUUseUJBQXlCLHFEQUFFLHNCQUFzQjs7MkZBRXhOLG9CQUFvQjtrQkFqQmhDLFNBQVM7Z0NBQ0U7d0JBQ1Y7NEJBQ0MsS0FBSyxFQUFFLElBQUk7NEJBQ1gsT0FBTyxFQUFFLGlCQUFpQjs0QkFDMUIsV0FBVyxzQkFBc0I7eUJBQ2pDO3dCQUNLOzRCQUNJLEtBQUssRUFBRSxLQUFLOzRCQUNaLE9BQU8sRUFBRSx5QkFBeUI7eUJBQ3JDO3FCQUNQLFlBQ1MsY0FBYyxjQUVaLElBQUksV0FDUCxDQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBRSw4QkFBOEIsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLHNCQUFzQixFQUFFLHFCQUFxQixFQUFFLFFBQVEsRUFBRSx5QkFBeUIsRUFBRSxzQkFBc0IsQ0FBQzs4QkFjM04sT0FBTztzQkFEYixTQUFTO3VCQUFDLFNBQVM7Z0JBaUJoQixFQUFFO3NCQUZSLFdBQVc7dUJBQUMsU0FBUzs7c0JBQ3JCLEtBQUs7Z0JBYUksU0FBUztzQkFEZixLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQWEvQixRQUFRO3NCQURkLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBSS9CLFdBQVc7c0JBRGpCLEtBQUs7Z0JBSUMsaUJBQWlCO3NCQUR2QixLQUFLO2dCQWFFLGdCQUFnQjtzQkFEMUIsS0FBSztnQkFzQkksZUFBZTtzQkFEckIsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFVOUIsa0JBQWtCO3NCQUQ1QixXQUFXO3VCQUFDLDhCQUE4QjtnQkFZcEMsVUFBVTtzQkFEaEIsV0FBVzt1QkFBQyxvQkFBb0I7Z0JBVTFCLFVBQVU7c0JBRGhCLFlBQVk7dUJBQUMsV0FBVztnQkFVbEIsVUFBVTtzQkFEaEIsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUscUJBQXFCLEVBQUU7Z0JBVTdDLFVBQVU7c0JBRGhCLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFFO2dCQVU5QyxRQUFRO3NCQURkLFNBQVM7dUJBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFO2dCQVUxQyxVQUFVO3NCQURoQixZQUFZO3VCQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxvQkFBb0IsRUFBRTtnQkFVN0MsV0FBVztzQkFEakIsU0FBUzt1QkFBQyxhQUFhO2dCQVVqQixXQUFXO3NCQURqQixTQUFTO3VCQUFDLGFBQWE7Z0JBNEliLHVCQUF1QjtzQkFEOUIsWUFBWTt1QkFBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsa0NBQWtDLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxrQ0FBa0MsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQVF0SCw0QkFBNEI7c0JBRG5DLFlBQVk7dUJBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHVDQUF1QyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFTaEksMEJBQTBCO3NCQURqQyxZQUFZO3VCQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxxQ0FBcUMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLHFDQUFxQyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBc0MxSCxXQUFXO3NCQURwQixZQUFZO3VCQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdENvbXBvbmVudCxcblx0Q29udGVudENoaWxkLFxuXHRmb3J3YXJkUmVmLFxuXHRIb3N0QmluZGluZyxcblx0SW5wdXQsXG5cdFZpZXdDaGlsZCxcblx0RWxlbWVudFJlZixcblx0QWZ0ZXJWaWV3SW5pdCxcblx0Vmlld0NoaWxkcmVuLFxuXHRRdWVyeUxpc3QsXG5cdE9uRGVzdHJveSxcblx0Ym9vbGVhbkF0dHJpYnV0ZSxcbiAgICBIb3N0TGlzdGVuZXIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdJZiwgTmdUZW1wbGF0ZU91dGxldCwgTmdTdHlsZSwgTmdGb3IsIERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQge1xuXHRJZ3hDYWxlbmRhckhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIElneENhbGVuZGFySGVhZGVyVGl0bGVUZW1wbGF0ZURpcmVjdGl2ZSxcblx0SWd4Q2FsZW5kYXJTdWJoZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBJZ3hDYWxlbmRhclNjcm9sbFBhZ2VEaXJlY3RpdmUsXG59IGZyb20gJy4vY2FsZW5kYXIuZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBJZ3hDYWxlbmRhclZpZXcsIFNjcm9sbERpcmVjdGlvbiB9IGZyb20gJy4vY2FsZW5kYXInO1xuaW1wb3J0IHsgSWd4TW9udGhzVmlld0NvbXBvbmVudCB9IGZyb20gJy4vbW9udGhzLXZpZXcvbW9udGhzLXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IElneFllYXJzVmlld0NvbXBvbmVudCB9IGZyb20gJy4veWVhcnMtdmlldy95ZWFycy12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJZ3hEYXlzVmlld0NvbXBvbmVudCB9IGZyb20gJy4vZGF5cy12aWV3L2RheXMtdmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgaW50ZXJ2YWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHRha2VVbnRpbCwgZGVib3VuY2UsIHNraXBMYXN0LCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBJZ3hNb250aFZpZXdTbG90c0NhbGVuZGFyLCBJZ3hHZXRWaWV3RGF0ZUNhbGVuZGFyIH0gZnJvbSAnLi9tb250aHMtdmlldy5waXBlJztcbmltcG9ydCB7IElneEljb25Db21wb25lbnQgfSBmcm9tICcuLi9pY29uL2ljb24uY29tcG9uZW50JztcbmltcG9ydCB7IGFyZVNhbWVNb250aCwgZm9ybWF0VG9QYXJ0cywgZ2V0Q2xvc2VzdEFjdGl2ZURhdGUsIGlzRGF0ZUluUmFuZ2VzIH0gZnJvbSAnLi9jb21tb24vaGVscGVycyc7XG5pbXBvcnQgeyBDYWxlbmRhckRheSB9IGZyb20gJy4vY29tbW9uL21vZGVsJztcbmltcG9ydCB7IElneENhbGVuZGFyQmFzZURpcmVjdGl2ZSB9IGZyb20gJy4vY2FsZW5kYXItYmFzZSc7XG5pbXBvcnQgeyBLZXlib2FyZE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9jYWxlbmRhci5zZXJ2aWNlcyc7XG5cbmxldCBORVhUX0lEID0gMDtcblxuLyoqXG4gKiBDYWxlbmRhciBwcm92aWRlcyBhIHdheSB0byBkaXNwbGF5IGRhdGUgaW5mb3JtYXRpb24uXG4gKlxuICogQGlneE1vZHVsZSBJZ3hDYWxlbmRhck1vZHVsZVxuICpcbiAqIEBpZ3hUaGVtZSBpZ3gtY2FsZW5kYXItdGhlbWUsIGlneC1pY29uLXRoZW1lXG4gKlxuICogQGlneEtleXdvcmRzIGNhbGVuZGFyLCBkYXRlcGlja2VyLCBzY2hlZHVsZSwgZGF0ZVxuICpcbiAqIEBpZ3hHcm91cCBTY2hlZHVsaW5nXG4gKlxuICogQHJlbWFya3NcbiAqIFRoZSBJZ25pdGUgVUkgQ2FsZW5kYXIgcHJvdmlkZXMgYW4gZWFzeSB3YXkgdG8gZGlzcGxheSBhIGNhbGVuZGFyIGFuZCBhbGxvdyB1c2VycyB0byBzZWxlY3QgZGF0ZXMgdXNpbmcgc2luZ2xlLCBtdWx0aXBsZVxuICogb3IgcmFuZ2Ugc2VsZWN0aW9uLlxuICpcbiAqIEBleGFtcGxlOlxuICogYGBgaHRtbFxuICogPGlneC1jYWxlbmRhciBzZWxlY3Rpb249XCJyYW5nZVwiPjwvaWd4LWNhbGVuZGFyPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuXHRwcm92aWRlcnM6IFtcblx0XHR7XG5cdFx0XHRtdWx0aTogdHJ1ZSxcblx0XHRcdHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuXHRcdFx0dXNlRXhpc3Rpbmc6IElneENhbGVuZGFyQ29tcG9uZW50LFxuXHRcdH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIG11bHRpOiBmYWxzZSxcbiAgICAgICAgICAgIHByb3ZpZGU6IEtleWJvYXJkTmF2aWdhdGlvblNlcnZpY2UsXG4gICAgICAgIH0sXG5cdF0sXG5cdHNlbGVjdG9yOiAnaWd4LWNhbGVuZGFyJyxcblx0dGVtcGxhdGVVcmw6ICdjYWxlbmRhci5jb21wb25lbnQuaHRtbCcsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdGltcG9ydHM6IFtOZ0lmLCBOZ1RlbXBsYXRlT3V0bGV0LCBJZ3hDYWxlbmRhclNjcm9sbFBhZ2VEaXJlY3RpdmUsIE5nU3R5bGUsIElneEljb25Db21wb25lbnQsIE5nRm9yLCBJZ3hEYXlzVmlld0NvbXBvbmVudCwgSWd4TW9udGhzVmlld0NvbXBvbmVudCwgSWd4WWVhcnNWaWV3Q29tcG9uZW50LCBEYXRlUGlwZSwgSWd4TW9udGhWaWV3U2xvdHNDYWxlbmRhciwgSWd4R2V0Vmlld0RhdGVDYWxlbmRhcl0sXG59KVxuZXhwb3J0IGNsYXNzIElneENhbGVuZGFyQ29tcG9uZW50IGV4dGVuZHMgSWd4Q2FsZW5kYXJCYXNlRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgcHJpdmF0ZSBfYWN0aXZlRGVzY2VuZGFudDogbnVtYmVyO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBWaWV3Q2hpbGQoXCJ3cmFwcGVyXCIpXG4gICAgcHVibGljIHdyYXBwZXI6IEVsZW1lbnRSZWY7XG5cblx0LyoqXG5cdCAqIFNldHMvZ2V0cyB0aGUgYGlkYCBvZiB0aGUgY2FsZW5kYXIuXG5cdCAqXG5cdCAqIEByZW1hcmtzXG5cdCAqIElmIG5vdCBzZXQsIHRoZSBgaWRgIHdpbGwgaGF2ZSB2YWx1ZSBgXCJpZ3gtY2FsZW5kYXItMFwiYC5cblx0ICpcblx0ICogQGV4YW1wbGVcblx0ICogYGBgaHRtbFxuXHQgKiA8aWd4LWNhbGVuZGFyIGlkPVwibXktZmlyc3QtY2FsZW5kYXJcIj48L2lneC1jYWxlbmRhcj5cblx0ICogYGBgXG5cdCAqIEBtZW1iZXJvZiBJZ3hDYWxlbmRhckNvbXBvbmVudFxuXHQgKi9cblx0QEhvc3RCaW5kaW5nKCdhdHRyLmlkJylcblx0QElucHV0KClcblx0cHVibGljIGlkID0gYGlneC1jYWxlbmRhci0keyBORVhUX0lEKysgfWA7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzL2dldHMgd2hldGhlciB0aGUgY2FsZW5kYXIgaGFzIGhlYWRlci5cbiAgICAgKiBEZWZhdWx0IHZhbHVlIGlzIGB0cnVlYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2FsZW5kYXIgW2hhc0hlYWRlcl09XCJmYWxzZVwiPjwvaWd4LWNhbGVuZGFyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBoYXNIZWFkZXIgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogU2V0cy9nZXRzIHdoZXRoZXIgdGhlIGNhbGVuZGFyIGhlYWRlciB3aWxsIGJlIGluIHZlcnRpY2FsIHBvc2l0aW9uLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYGZhbHNlYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtY2FsZW5kYXIgW3ZlcnRpY2FsXT1cInRydWVcIj48L2lneC1jYWxlbmRhcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgdmVydGljYWwgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIG9yaWVudGF0aW9uOiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnID0gJ2hvcml6b250YWwnO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaGVhZGVyT3JpZW50YXRpb246ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCcgPSAnaG9yaXpvbnRhbCc7XG5cblx0LyoqXG5cdCAqIFNldHMvZ2V0cyB0aGUgbnVtYmVyIG9mIG1vbnRoIHZpZXdzIGRpc3BsYXllZC5cblx0ICogRGVmYXVsdCB2YWx1ZSBpcyBgMWAuXG5cdCAqXG5cdCAqIEBleGFtcGxlXG5cdCAqIGBgYGh0bWxcblx0ICogPGlneC1jYWxlbmRhciBbbW9udGhzVmlld051bWJlcl09XCIyXCI+PC9pZ3gtY2FsZW5kYXI+XG5cdCAqIGBgYFxuXHQgKi9cblx0QElucHV0KClcblx0cHVibGljIGdldCBtb250aHNWaWV3TnVtYmVyKCkge1xuXHRcdHJldHVybiB0aGlzLl9tb250aHNWaWV3TnVtYmVyO1xuXHR9XG5cbiAgICBwdWJsaWMgc2V0IG1vbnRoc1ZpZXdOdW1iZXIodmFsOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHZhbCA8IDEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG5cdFx0dGhpcy5fbW9udGhzVmlld051bWJlciA9IHZhbDtcblx0fVxuXG4gICAgLyoqXG4gICAgICogU2hvdy9oaWRlIHdlZWsgbnVtYmVyc1xuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1jYWxlbmRhciBbc2hvd1dlZWtOdW1iZXJzXT1cInRydWVcIj48L2lneC1jYWxlbmRhcj5cbiAgICAgKiBgYFxuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KVxuICAgIHB1YmxpYyBzaG93V2Vla051bWJlcnMgPSBmYWxzZTtcblxuXHQvKipcblx0ICogVGhlIGRlZmF1bHQgY3NzIGNsYXNzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdEBIb3N0QmluZGluZygnY2xhc3MuaWd4LWNhbGVuZGFyLS12ZXJ0aWNhbCcpXG5cdHB1YmxpYyBnZXQgc3R5bGVWZXJ0aWNhbENsYXNzKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmhlYWRlck9yaWVudGF0aW9uID09PSAndmVydGljYWwnO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBkZWZhdWx0IGNzcyBjbGFzcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRASG9zdEJpbmRpbmcoJ2NsYXNzLmlneC1jYWxlbmRhcicpXG5cdHB1YmxpYyBzdHlsZUNsYXNzID0gdHJ1ZTtcblxuXHQvKipcblx0ICogTW9udGggYnV0dG9uLCB0aGF0IGRpc3BsYXlzIHRoZSBtb250aHMgdmlldy5cblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdEBWaWV3Q2hpbGRyZW4oJ21vbnRoc0J0bicpXG5cdHB1YmxpYyBtb250aHNCdG5zOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cblx0LyoqXG5cdCAqIFZpZXdDaGlsZCB0aGF0IHJlcHJlc2VudHMgdGhlIGRlY2FkZSB2aWV3LlxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0QFZpZXdDaGlsZCgnZGVjYWRlJywgeyByZWFkOiBJZ3hZZWFyc1ZpZXdDb21wb25lbnQgfSlcblx0cHVibGljIGRhY2FkZVZpZXc6IElneFllYXJzVmlld0NvbXBvbmVudDtcblxuXHQvKipcblx0ICogVmlld0NoaWxkIHRoYXQgcmVwcmVzZW50cyB0aGUgbW9udGhzIHZpZXcuXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRAVmlld0NoaWxkKCdtb250aHMnLCB7IHJlYWQ6IElneE1vbnRoc1ZpZXdDb21wb25lbnQgfSlcblx0cHVibGljIG1vbnRoc1ZpZXc6IElneE1vbnRoc1ZpZXdDb21wb25lbnQ7XG5cblx0LyoqXG5cdCAqIFZpZXdDaGlsZCB0aGF0IHJlcHJlc2VudHMgdGhlIGRheXMgdmlldy5cblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdEBWaWV3Q2hpbGQoJ2RheXMnLCB7IHJlYWQ6IElneERheXNWaWV3Q29tcG9uZW50IH0pXG5cdHB1YmxpYyBkYXlzVmlldzogSWd4RGF5c1ZpZXdDb21wb25lbnQ7XG5cblx0LyoqXG5cdCAqIFZpZXdDaGlsZHJlbmRlbiByZXByZXNlbnRpbmcgYWxsIG9mIHRoZSByZW5kZXJlZCBkYXlzIHZpZXdzLlxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0QFZpZXdDaGlsZHJlbignZGF5cycsIHsgcmVhZDogSWd4RGF5c1ZpZXdDb21wb25lbnQgfSlcblx0cHVibGljIG1vbnRoVmlld3M6IFF1ZXJ5TGlzdDxJZ3hEYXlzVmlld0NvbXBvbmVudD47XG5cblx0LyoqXG5cdCAqIEJ1dHRvbiBmb3IgcHJldmlvdXMgbW9udGguXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRAVmlld0NoaWxkKCdwcmV2UGFnZUJ0bicpXG5cdHB1YmxpYyBwcmV2UGFnZUJ0bjogRWxlbWVudFJlZjtcblxuXHQvKipcblx0ICogQnV0dG9uIGZvciBuZXh0IG1vbnRoLlxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0QFZpZXdDaGlsZCgnbmV4dFBhZ2VCdG4nKVxuXHRwdWJsaWMgbmV4dFBhZ2VCdG46IEVsZW1lbnRSZWY7XG5cblx0LyoqXG5cdCAqIERlbm90ZSBpZiB0aGUgeWVhciB2aWV3IGlzIGFjdGl2ZS5cblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBnZXQgaXNZZWFyVmlldygpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuWWVhcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBoZWFkZXIgdGVtcGxhdGUuXG5cdCAqXG5cdCAqIEBleGFtcGxlXG5cdCAqIGBgYHR5cGVzY3JpcHRcblx0ICogbGV0IGhlYWRlclRpdGxlVGVtcGxhdGUgPSB0aGlzLmNhbGVuZGFyLmhlYWRlclRpdGxlVGVhbXBsYXRlO1xuXHQgKiBgYGBcblx0ICogQG1lbWJlcm9mIElneENhbGVuZGFyQ29tcG9uZW50XG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGhlYWRlclRpdGxlVGVtcGxhdGUoKTogYW55IHtcblx0XHRpZiAodGhpcy5oZWFkZXJUaXRsZVRlbXBsYXRlRGlyZWN0aXZlKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5oZWFkZXJUaXRsZVRlbXBsYXRlRGlyZWN0aXZlLnRlbXBsYXRlO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBoZWFkZXIgdGVtcGxhdGUuXG5cdCAqXG5cdCAqIEBleGFtcGxlXG5cdCAqIGBgYGh0bWxcblx0ICogPGlneC1jYWxlbmRhciBoZWFkZXJUaXRsZVRlbXBsYXRlRGlyZWN0aXZlPVwiaWd4Q2FsZW5kYXJIZWFkZXJUaXRsZVwiPjwvaWd4LWNhbGVuZGFyPlxuXHQgKiBgYGBcblx0ICogQG1lbWJlcm9mIElneENhbGVuZGFyQ29tcG9uZW50XG5cdCAqL1xuXHRwdWJsaWMgc2V0IGhlYWRlclRpdGxlVGVtcGxhdGUoZGlyZWN0aXZlOiBhbnkpIHtcblx0XHR0aGlzLmhlYWRlclRpdGxlVGVtcGxhdGVEaXJlY3RpdmUgPSBkaXJlY3RpdmU7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgaGVhZGVyIHRlbXBsYXRlLlxuXHQgKlxuXHQgKiBAZXhhbXBsZVxuXHQgKiBgYGB0eXBlc2NyaXB0XG5cdCAqIGxldCBoZWFkZXJUZW1wbGF0ZSA9ICB0aGlzLmNhbGVuZGFyLmhlYWRlclRlYW1wbGF0ZTtcblx0ICogYGBgXG5cdCAqIEBtZW1iZXJvZiBJZ3hDYWxlbmRhckNvbXBvbmVudFxuXHQgKi9cblx0cHVibGljIGdldCBoZWFkZXJUZW1wbGF0ZSgpOiBhbnkge1xuXHRcdGlmICh0aGlzLmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5oZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZS50ZW1wbGF0ZTtcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgaGVhZGVyIHRlbXBsYXRlLlxuXHQgKlxuXHQgKiBAZXhhbXBsZVxuXHQgKiBgYGBodG1sXG5cdCAqIDxpZ3gtY2FsZW5kYXIgaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmU9XCJpZ3hDYWxlbmRhckhlYWRlclwiPjwvaWd4LWNhbGVuZGFyPlxuXHQgKiBgYGBcblx0ICogQG1lbWJlcm9mIElneENhbGVuZGFyQ29tcG9uZW50XG5cdCAqL1xuXHRwdWJsaWMgc2V0IGhlYWRlclRlbXBsYXRlKGRpcmVjdGl2ZTogYW55KSB7XG5cdFx0dGhpcy5oZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSA9IGRpcmVjdGl2ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBzdWJoZWFkZXIgdGVtcGxhdGUuXG5cdCAqXG5cdCAqIEBleGFtcGxlXG5cdCAqIGBgYHR5cGVzY3JpcHRcblx0ICogbGV0IHN1YmhlYWRlclRlbXBsYXRlID0gdGhpcy5jYWxlbmRhci5zdWJoZWFkZXJUZW1wbGF0ZTtcblx0ICogYGBgXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IHN1YmhlYWRlclRlbXBsYXRlKCk6IGFueSB7XG5cdFx0aWYgKHRoaXMuc3ViaGVhZGVyVGVtcGxhdGVEaXJlY3RpdmUpIHtcblx0XHRcdHJldHVybiB0aGlzLnN1YmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLnRlbXBsYXRlO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBzdWJoZWFkZXIgdGVtcGxhdGUuXG5cdCAqXG5cdCAqIEBleGFtcGxlXG5cdCAqIGBgYGh0bWxcblx0ICogPGlneC1jYWxlbmRhciBzdWJoZWFkZXJUZW1wbGF0ZT1cImlneENhbGVuZGFyU3ViaGVhZGVyXCI+PC9pZ3gtY2FsZW5kYXI+XG5cdCAqIGBgYFxuXHQgKiBAbWVtYmVyb2YgSWd4Q2FsZW5kYXJDb21wb25lbnRcblx0ICovXG5cdHB1YmxpYyBzZXQgc3ViaGVhZGVyVGVtcGxhdGUoZGlyZWN0aXZlOiBhbnkpIHtcblx0XHR0aGlzLnN1YmhlYWRlclRlbXBsYXRlRGlyZWN0aXZlID0gZGlyZWN0aXZlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGNvbnRleHQgZm9yIHRoZSB0ZW1wbGF0ZSBtYXJrZWQgd2l0aCB0aGUgYGlneENhbGVuZGFySGVhZGVyYCBkaXJlY3RpdmUuXG5cdCAqXG5cdCAqIEBleGFtcGxlXG5cdCAqIGBgYHR5cGVzY3JpcHRcblx0ICogbGV0IGhlYWRlckNvbnRleHQgPSAgdGhpcy5jYWxlbmRhci5oZWFkZXJDb250ZXh0O1xuXHQgKiBgYGBcblx0ICovXG5cdHB1YmxpYyBnZXQgaGVhZGVyQ29udGV4dCgpIHtcblx0XHRyZXR1cm4gdGhpcy5nZW5lcmF0ZUNvbnRleHQodGhpcy5oZWFkZXJEYXRlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBjb250ZXh0IGZvciB0aGUgdGVtcGxhdGUgbWFya2VkIHdpdGggZWl0aGVyIGBpZ3hDYWxlbmRhclN1YkhlYWRlck1vbnRoYFxuXHQgKiBvciBgaWd4Q2FsZW5kYXJTdWJIZWFkZXJZZWFyYCBkaXJlY3RpdmUuXG5cdCAqXG5cdCAqIEBleGFtcGxlXG5cdCAqIGBgYHR5cGVzY3JpcHRcblx0ICogbGV0IGNvbnRleHQgPSAgdGhpcy5jYWxlbmRhci5jb250ZXh0O1xuXHQgKiBgYGBcblx0ICovXG5cdHB1YmxpYyBnZXQgY29udGV4dCgpIHtcblx0XHRjb25zdCBkYXRlOiBEYXRlID0gdGhpcy52aWV3RGF0ZTtcblx0XHRyZXR1cm4gdGhpcy5nZW5lcmF0ZUNvbnRleHQoZGF0ZSk7XG5cdH1cblxuXHQvKipcblx0ICogRGF0ZSBkaXNwbGF5ZWQgaW4gaGVhZGVyXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwdWJsaWMgZ2V0IGhlYWRlckRhdGUoKTogRGF0ZSB7XG5cdFx0cmV0dXJuIHRoaXMuc2VsZWN0ZWREYXRlcz8uYXQoMCkgPz8gbmV3IERhdGUoKTtcblx0fVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoZm9yd2FyZFJlZigoKSA9PiBJZ3hDYWxlbmRhckhlYWRlclRlbXBsYXRlRGlyZWN0aXZlKSwgeyByZWFkOiBJZ3hDYWxlbmRhckhlYWRlclRlbXBsYXRlRGlyZWN0aXZlLCBzdGF0aWM6IHRydWUgfSlcbiAgICBwcml2YXRlIGhlYWRlclRlbXBsYXRlRGlyZWN0aXZlOiBJZ3hDYWxlbmRhckhlYWRlclRlbXBsYXRlRGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoZm9yd2FyZFJlZigoKSA9PiBJZ3hDYWxlbmRhckhlYWRlclRpdGxlVGVtcGxhdGVEaXJlY3RpdmUpLCB7IHJlYWQ6IElneENhbGVuZGFySGVhZGVyVGl0bGVUZW1wbGF0ZURpcmVjdGl2ZSwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSBoZWFkZXJUaXRsZVRlbXBsYXRlRGlyZWN0aXZlOiBJZ3hDYWxlbmRhckhlYWRlclRpdGxlVGVtcGxhdGVEaXJlY3RpdmU7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICBAQ29udGVudENoaWxkKGZvcndhcmRSZWYoKCkgPT4gSWd4Q2FsZW5kYXJTdWJoZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSksIHsgcmVhZDogSWd4Q2FsZW5kYXJTdWJoZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZSwgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSBzdWJoZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZTogSWd4Q2FsZW5kYXJTdWJoZWFkZXJUZW1wbGF0ZURpcmVjdGl2ZTtcblxuXHQvKipcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBhY3RpdmVEYXRlID0gQ2FsZW5kYXJEYXkudG9kYXkubmF0aXZlO1xuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHJvdGVjdGVkIHByZXZpZXdSYW5nZURhdGU6IERhdGU7XG5cblx0LyoqXG5cdCAqIFVzZWQgdG8gYXBwbHkgdGhlIGFjdGl2ZSBkYXRlIHdoZW4gdGhlIGNhbGVuZGFyIHZpZXcgaXMgY2hhbmdlZFxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIG5leHREYXRlOiBEYXRlO1xuXG5cdC8qKlxuXHQgKiBEZW5vdGUgaWYgdGhlIGNhbGVuZGFyIHZpZXcgd2FzIGNoYW5nZWQgd2l0aCB0aGUga2V5Ym9hcmRcblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBpc0tleWRvd25UcmlnZ2VyID0gZmFsc2U7XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwcml2YXRlIF9tb250aHNWaWV3TnVtYmVyID0gMTtcblxuICAgIEBIb3N0TGlzdGVuZXIoJ21vdXNlZG93bicsIFsnJGV2ZW50J10pXG4gICAgcHJvdGVjdGVkIG9uTW91c2VEb3duKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLndyYXBwZXIubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Nob3dBY3RpdmVEYXk6IGJvb2xlYW47XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuICAgIHByb3RlY3RlZCBzZXQgc2hvd0FjdGl2ZURheSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9zaG93QWN0aXZlRGF5ID0gdmFsdWU7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZ2V0IHNob3dBY3RpdmVEYXkoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zaG93QWN0aXZlRGF5O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgYWN0aXZlRGVzY2VuZGFudCgpOiBudW1iZXIge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSAnbW9udGgnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVEYXRlLmdldFRpbWUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmVEZXNjZW5kYW50ID8/IHRoaXMudmlld0RhdGUuZ2V0VGltZSgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBzZXQgYWN0aXZlRGVzY2VuZGFudChkYXRlOiBEYXRlKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZURlc2NlbmRhbnQgPSBkYXRlLmdldFRpbWUoKTtcbiAgICB9XG5cblx0cHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5rZXlib2FyZE5hdmlnYXRpb25cbiAgICAgICAgICAgIC5hdHRhY2hLZXlib2FyZEhhbmRsZXJzKHRoaXMud3JhcHBlciwgdGhpcylcbiAgICAgICAgICAgIC5zZXQoXCJBcnJvd1VwXCIsIHRoaXMub25BcnJvd1VwKVxuICAgICAgICAgICAgLnNldChcIkFycm93RG93blwiLCB0aGlzLm9uQXJyb3dEb3duKVxuICAgICAgICAgICAgLnNldChcIkFycm93TGVmdFwiLCB0aGlzLm9uQXJyb3dMZWZ0KVxuICAgICAgICAgICAgLnNldChcIkFycm93UmlnaHRcIiwgdGhpcy5vbkFycm93UmlnaHQpXG4gICAgICAgICAgICAuc2V0KFwiRW50ZXJcIiwgdGhpcy5vbkVudGVyKVxuICAgICAgICAgICAgLnNldChcIiBcIiwgdGhpcy5vbkVudGVyKVxuICAgICAgICAgICAgLnNldChcIkhvbWVcIiwgdGhpcy5vbkhvbWUpXG4gICAgICAgICAgICAuc2V0KFwiRW5kXCIsIHRoaXMub25FbmQpXG4gICAgICAgICAgICAuc2V0KFwiUGFnZVVwXCIsIHRoaXMuaGFuZGxlUGFnZVVwKVxuICAgICAgICAgICAgLnNldChcIlBhZ2VEb3duXCIsIHRoaXMuaGFuZGxlUGFnZURvd24pO1xuXG4gICAgICAgIHRoaXMud3JhcHBlci5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgKGV2ZW50OiBGb2N1c0V2ZW50KSA9PiB0aGlzLm9uV3JhcHBlckZvY3VzKGV2ZW50KSk7XG4gICAgICAgIHRoaXMud3JhcHBlci5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCAoZXZlbnQ6IEZvY3VzRXZlbnQpID0+IHRoaXMub25XcmFwcGVyQmx1cihldmVudCkpO1xuXG4gICAgICAgIHRoaXMuc3RhcnRQYWdlU2Nyb2xsJC5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuc3RvcFBhZ2VTY3JvbGwkKSxcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLnNjcm9sbFBhZ2UkLnBpcGUoXG4gICAgICAgICAgICAgICAgc2tpcExhc3QoMSksXG4gICAgICAgICAgICAgICAgZGVib3VuY2UoKCkgPT4gaW50ZXJ2YWwoMzAwKSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuc3RvcFBhZ2VTY3JvbGwkKVxuICAgICAgICAgICAgKSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3dpdGNoICh0aGlzLnBhZ2VTY3JvbGxEaXJlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBTY3JvbGxEaXJlY3Rpb24uUFJFVjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJldmlvdXNQYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBTY3JvbGxEaXJlY3Rpb24uTkVYVDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV4dFBhZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFNjcm9sbERpcmVjdGlvbi5OT05FOlxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5hY3RpdmVWaWV3JC5zdWJzY3JpYmUoKHZpZXcpID0+IHtcblx0XHRcdHRoaXMuYWN0aXZlVmlld0NoYW5nZWQuZW1pdCh2aWV3KTtcblxuICAgICAgICAgICAgdGhpcy52aWV3RGF0ZUNoYW5nZWQuZW1pdCh7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNWYWx1ZTogdGhpcy5wcmV2aW91c1ZpZXdEYXRlLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy52aWV3RGF0ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25XcmFwcGVyRm9jdXMoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5zaG93QWN0aXZlRGF5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5tb250aFZpZXdzLmZvckVhY2godmlldyA9PiB2aWV3LmNoYW5nZVByZXZpZXdSYW5nZSh0aGlzLmFjdGl2ZURhdGUpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uV3JhcHBlckJsdXIoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5zaG93QWN0aXZlRGF5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMubW9udGhWaWV3cy5mb3JFYWNoKHZpZXcgPT4gdmlldy5jbGVhclByZXZpZXdSYW5nZSgpKTtcbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2soKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUFycm93S2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCwgZGVsdGE6IG51bWJlcikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBjb25zdCBkYXRlID0gZ2V0Q2xvc2VzdEFjdGl2ZURhdGUoXG4gICAgICAgICAgICBDYWxlbmRhckRheS5mcm9tKHRoaXMuYWN0aXZlRGF0ZSksXG4gICAgICAgICAgICBkZWx0YSxcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWREYXRlcyxcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSBkYXRlLm5hdGl2ZTtcblxuICAgICAgICBjb25zdCBkYXRlcyA9IHRoaXMudmlld0RhdGVzO1xuICAgICAgICBjb25zdCBpc0RhdGVJblZpZXcgPSBkYXRlcy5zb21lKGQgPT4gZC5kYXRlLmVxdWFsVG8odGhpcy5hY3RpdmVEYXRlKSk7XG4gICAgICAgIHRoaXMubW9udGhWaWV3cy5mb3JFYWNoKHZpZXcgPT4gdmlldy5jbGVhclByZXZpZXdSYW5nZSgpKTtcblxuICAgICAgICBpZiAoIWlzRGF0ZUluVmlldykge1xuICAgICAgICAgICAgZGVsdGEgPiAwID8gdGhpcy5uZXh0UGFnZSh0cnVlKSA6IHRoaXMucHJldmlvdXNQYWdlKHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVQYWdlVXBEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBkZWx0YTogbnVtYmVyKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGNvbnN0IGRpciA9IGRlbHRhID4gMCA/IFNjcm9sbERpcmVjdGlvbi5ORVhUIDogU2Nyb2xsRGlyZWN0aW9uLlBSRVY7XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3Lk1vbnRoICYmIGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdEYXRlID0gQ2FsZW5kYXJEYXkuZnJvbSh0aGlzLnZpZXdEYXRlKS5hZGQoJ3llYXInLCBkZWx0YSkubmF0aXZlO1xuICAgICAgICAgICAgdGhpcy5yZXNldEFjdGl2ZURhdGUodGhpcy52aWV3RGF0ZSk7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZVBhZ2UoZmFsc2UsIGRpcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVBhZ2VVcChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICB0aGlzLmhhbmRsZVBhZ2VVcERvd24oZXZlbnQsIC0xKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVBhZ2VEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIHRoaXMuaGFuZGxlUGFnZVVwRG93bihldmVudCwgMSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkFycm93VXAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3Lk1vbnRoKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUFycm93S2V5ZG93bihldmVudCwgLTcpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3LlllYXIpIHtcbiAgICAgICAgICAgIHRoaXMubW9udGhzVmlldy5vbktleWRvd25BcnJvd1VwKGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5EZWNhZGUpIHtcbiAgICAgICAgICAgIHRoaXMuZGFjYWRlVmlldy5vbktleWRvd25BcnJvd1VwKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25BcnJvd0Rvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3Lk1vbnRoKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUFycm93S2V5ZG93bihldmVudCwgNyk7XG4gICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuWWVhcikge1xuICAgICAgICAgICAgdGhpcy5tb250aHNWaWV3Lm9uS2V5ZG93bkFycm93RG93bihldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuRGVjYWRlKSB7XG4gICAgICAgICAgICB0aGlzLmRhY2FkZVZpZXcub25LZXlkb3duQXJyb3dEb3duKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgb25BcnJvd0xlZnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3Lk1vbnRoKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUFycm93S2V5ZG93bihldmVudCwgLTEpO1xuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3LlllYXIpIHtcbiAgICAgICAgICAgIHRoaXMubW9udGhzVmlldy5vbktleWRvd25BcnJvd0xlZnQoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3LkRlY2FkZSkge1xuICAgICAgICAgICAgdGhpcy5kYWNhZGVWaWV3Lm9uS2V5ZG93bkFycm93TGVmdChldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uQXJyb3dSaWdodChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuTW9udGgpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQXJyb3dLZXlkb3duKGV2ZW50LCAxKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5ZZWFyKSB7XG4gICAgICAgICAgICB0aGlzLm1vbnRoc1ZpZXcub25LZXlkb3duQXJyb3dSaWdodChldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuRGVjYWRlKSB7XG4gICAgICAgICAgICB0aGlzLmRhY2FkZVZpZXcub25LZXlkb3duQXJyb3dSaWdodChldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRW50ZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3Lk1vbnRoKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZURhdGVTZWxlY3Rpb24odGhpcy5hY3RpdmVEYXRlKTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5ZZWFyKSB7XG4gICAgICAgICAgICB0aGlzLm1vbnRoc1ZpZXcub25LZXlkb3duRW50ZXIoZXZlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlVmlldyA9PT0gSWd4Q2FsZW5kYXJWaWV3LkRlY2FkZSkge1xuICAgICAgICAgICAgdGhpcy5kYWNhZGVWaWV3Lm9uS2V5ZG93bkVudGVyKGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubW9udGhWaWV3cy5mb3JFYWNoKHZpZXcgPT4gdmlldy5jbGVhclByZXZpZXdSYW5nZSgpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uSG9tZShldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuTW9udGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGVzID0gdGhpcy5tb250aFZpZXdzLnRvQXJyYXkoKVxuICAgICAgICAgICAgICAgIC5mbGF0TWFwKCh2aWV3KSA9PiB2aWV3LmRhdGVzLnRvQXJyYXkoKSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChkKSA9PiBkLmlzQ3VycmVudE1vbnRoICYmIGQuaXNGb2N1c2FibGUpO1xuXG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSBkYXRlcy5hdCgwKS5kYXRlLm5hdGl2ZTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5ZZWFyKSB7XG4gICAgICAgICAgICB0aGlzLm1vbnRoc1ZpZXcub25LZXlkb3duSG9tZShldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hY3RpdmVWaWV3ID09PSBJZ3hDYWxlbmRhclZpZXcuRGVjYWRlKSB7XG4gICAgICAgICAgICB0aGlzLmRhY2FkZVZpZXcub25LZXlkb3duSG9tZShldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRW5kKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5Nb250aCkge1xuICAgICAgICAgICAgY29uc3QgZGF0ZXMgPSB0aGlzLm1vbnRoVmlld3MudG9BcnJheSgpXG4gICAgICAgICAgICAgICAgLmZsYXRNYXAoKHZpZXcpID0+IHZpZXcuZGF0ZXMudG9BcnJheSgpKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGQpID0+IGQuaXNDdXJyZW50TW9udGggJiYgZC5pc0ZvY3VzYWJsZSk7XG5cbiAgICAgICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IGRhdGVzLmF0KC0xKS5kYXRlLm5hdGl2ZTtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5ZZWFyKSB7XG4gICAgICAgICAgICB0aGlzLm1vbnRoc1ZpZXcub25LZXlkb3duRW5kKGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZVZpZXcgPT09IElneENhbGVuZGFyVmlldy5EZWNhZGUpIHtcbiAgICAgICAgICAgIHRoaXMuZGFjYWRlVmlldy5vbktleWRvd25FbmQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBsb2NhbGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1vbnRoIGluIHRoZSBtb250aCB2aWV3IGlmIGVuYWJsZWQsXG5cdCAqIG90aGVyd2lzZSByZXR1cm5zIHRoZSBkZWZhdWx0IGBEYXRlLmdldE1vbnRoKClgIHZhbHVlLlxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIGZvcm1hdHRlZE1vbnRoKHZhbHVlOiBEYXRlKTogc3RyaW5nIHtcblx0XHRpZiAodGhpcy5mb3JtYXRWaWV3cy5tb250aCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZm9ybWF0dGVyTW9udGguZm9ybWF0KHZhbHVlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYCR7IHZhbHVlLmdldE1vbnRoKCkgfWA7XG5cdH1cblxuXHQvKipcblx0ICogQ2hhbmdlIHRvIHByZXZpb3VzIHBhZ2Vcblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBwcmV2aW91c1BhZ2UoaXNLZXlkb3duVHJpZ2dlciA9IGZhbHNlKSB7XG5cdFx0aWYgKGlzS2V5ZG93blRyaWdnZXIgJiYgdGhpcy5wYWdlU2Nyb2xsRGlyZWN0aW9uID09PSBTY3JvbGxEaXJlY3Rpb24uTkVYVCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuICAgICAgICB0aGlzLmNoYW5nZVBhZ2UoaXNLZXlkb3duVHJpZ2dlciwgU2Nyb2xsRGlyZWN0aW9uLlBSRVYpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoYW5nZSB0byBuZXh0IHBhZ2Vcblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBuZXh0UGFnZShpc0tleWRvd25UcmlnZ2VyID0gZmFsc2UpIHtcblx0XHRpZiAoaXNLZXlkb3duVHJpZ2dlciAmJiB0aGlzLnBhZ2VTY3JvbGxEaXJlY3Rpb24gPT09IFNjcm9sbERpcmVjdGlvbi5QUkVWKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG4gICAgICAgIHRoaXMuY2hhbmdlUGFnZShpc0tleWRvd25UcmlnZ2VyLCBTY3JvbGxEaXJlY3Rpb24uTkVYVCk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hhbmdlcyB0aGUgY3VycmVudCBwYWdlXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuICAgIHByb3RlY3RlZCBjaGFuZ2VQYWdlKGlzS2V5ZG93blRyaWdnZXIgPSBmYWxzZSwgZGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24pIHtcblx0XHR0aGlzLnByZXZpb3VzVmlld0RhdGUgPSB0aGlzLnZpZXdEYXRlO1xuXHRcdHRoaXMuaXNLZXlkb3duVHJpZ2dlciA9IGlzS2V5ZG93blRyaWdnZXI7XG5cbiAgICAgICAgc3dpdGNoICh0aGlzLmFjdGl2ZVZpZXcpIHtcbiAgICAgICAgICAgIGNhc2UgXCJtb250aFwiOlxuICAgICAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFNjcm9sbERpcmVjdGlvbi5QUkVWKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSBDYWxlbmRhckRheS5mcm9tKHRoaXMudmlld0RhdGUpLmFkZCgnbW9udGgnLCAtMSkubmF0aXZlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFNjcm9sbERpcmVjdGlvbi5ORVhUKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSBDYWxlbmRhckRheS5mcm9tKHRoaXMudmlld0RhdGUpLmFkZCgnbW9udGgnLCAxKS5uYXRpdmU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3RGF0ZUNoYW5nZWQuZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzVmFsdWU6IHRoaXMucHJldmlvdXNWaWV3RGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFZhbHVlOiB0aGlzLnZpZXdEYXRlXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBcInllYXJcIjpcbiAgICAgICAgICAgICAgICBpZiAoZGlyZWN0aW9uID09PSBTY3JvbGxEaXJlY3Rpb24uUFJFVikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdEYXRlID0gQ2FsZW5kYXJEYXkuZnJvbSh0aGlzLnZpZXdEYXRlKS5hZGQoJ3llYXInLCAtMSkubmF0aXZlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFNjcm9sbERpcmVjdGlvbi5ORVhUKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSBDYWxlbmRhckRheS5mcm9tKHRoaXMudmlld0RhdGUpLmFkZCgneWVhcicsIDEpLm5hdGl2ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBcImRlY2FkZVwiOlxuICAgICAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFNjcm9sbERpcmVjdGlvbi5QUkVWKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSBDYWxlbmRhckRheS5mcm9tKHRoaXMudmlld0RhdGUpLmFkZCgneWVhcicsIC0xNSkubmF0aXZlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFNjcm9sbERpcmVjdGlvbi5ORVhUKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSBDYWxlbmRhckRheS5mcm9tKHRoaXMudmlld0RhdGUpLmFkZCgneWVhcicsIDE1KS5uYXRpdmU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBYWFg6IFdoeSBvbmx5IHdoZW4gaXQncyBub3QgdHJpZ2dlcmVkIGJ5IGtleWJvYXJkP1xuICAgICAgICBpZiAoIXRoaXMuaXNLZXlkb3duVHJpZ2dlcikgdGhpcy5yZXNldEFjdGl2ZURhdGUodGhpcy52aWV3RGF0ZSk7XG4gICAgfVxuXG5cdC8qKlxuXHQgKiBDb250aW5pb3VzIG5hdmlnYXRpb24gdGhyb3VnaCB0aGUgcHJldmlvdXMgcGFnZXNcblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBzdGFydFByZXZQYWdlU2Nyb2xsID0gKGlzS2V5ZG93blRyaWdnZXIgPSBmYWxzZSkgPT4ge1xuXHRcdHRoaXMuc3RhcnRQYWdlU2Nyb2xsJC5uZXh0KCk7XG5cdFx0dGhpcy5wYWdlU2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xsRGlyZWN0aW9uLlBSRVY7XG5cdFx0dGhpcy5wcmV2aW91c1BhZ2UoaXNLZXlkb3duVHJpZ2dlcik7XG5cdH1cblxuXHQvKipcblx0ICogQ29udGluaW91cyBuYXZpZ2F0aW9uIHRocm91Z2ggdGhlIG5leHQgcGFnZXNcblx0ICpcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBzdGFydE5leHRQYWdlU2Nyb2xsID0gKGlzS2V5ZG93blRyaWdnZXIgPSBmYWxzZSkgPT4ge1xuXHRcdHRoaXMuc3RhcnRQYWdlU2Nyb2xsJC5uZXh0KCk7XG5cdFx0dGhpcy5wYWdlU2Nyb2xsRGlyZWN0aW9uID0gU2Nyb2xsRGlyZWN0aW9uLk5FWFQ7XG5cdFx0dGhpcy5uZXh0UGFnZShpc0tleWRvd25UcmlnZ2VyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTdG9wIGNvbnRpbnVvdXMgbmF2aWdhdGlvblxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIHN0b3BQYWdlU2Nyb2xsID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG5cdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cblx0XHR0aGlzLnN0b3BQYWdlU2Nyb2xsJC5uZXh0KHRydWUpO1xuXHRcdHRoaXMuc3RvcFBhZ2VTY3JvbGwkLmNvbXBsZXRlKCk7XG5cblx0XHRpZiAodGhpcy5wbGF0Zm9ybS5pc0FjdGl2YXRpb25LZXkoZXZlbnQpKSB7XG5cdFx0XHR0aGlzLnJlc2V0QWN0aXZlRGF0ZSh0aGlzLnZpZXdEYXRlKTtcblx0XHR9XG5cblx0XHR0aGlzLnBhZ2VTY3JvbGxEaXJlY3Rpb24gPSBTY3JvbGxEaXJlY3Rpb24uTk9ORTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIG9uQWN0aXZlVmlld0RlY2FkZShldmVudDogTW91c2VFdmVudCwgZGF0ZTogRGF0ZSwgYWN0aXZlVmlld0lkeDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRzdXBlci5hY3RpdmVWaWV3RGVjYWRlKGFjdGl2ZVZpZXdJZHgpO1xuICAgICAgICB0aGlzLnZpZXdEYXRlID0gZGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIG9uQWN0aXZlVmlld0RlY2FkZUtCKGRhdGU6IERhdGUsIGV2ZW50OiBLZXlib2FyZEV2ZW50LCBhY3RpdmVWaWV3SWR4OiBudW1iZXIpIHtcblx0XHRzdXBlci5hY3RpdmVWaWV3RGVjYWRlS0IoZXZlbnQsIGFjdGl2ZVZpZXdJZHgpO1xuXG5cdFx0aWYgKHRoaXMucGxhdGZvcm0uaXNBY3RpdmF0aW9uS2V5KGV2ZW50KSkge1xuICAgICAgICAgICAgdGhpcy52aWV3RGF0ZSA9IGRhdGU7XG4gICAgICAgICAgICB0aGlzLndyYXBwZXIubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cbiAgICBwdWJsaWMgb25ZZWFyc1ZpZXdDbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBjb25zdCBwYXRoID0gZXZlbnQuY29tcG9zZWQgPyBldmVudC5jb21wb3NlZFBhdGgoKSA6IFtldmVudC50YXJnZXRdO1xuICAgICAgICBjb25zdCB5ZWFycyA9IHRoaXMuZGFjYWRlVmlldy52aWV3SXRlbXMudG9BcnJheSgpO1xuICAgICAgICBjb25zdCB2YWxpZFRhcmdldCA9IHllYXJzLnNvbWUoeWVhciA9PiBwYXRoLmluY2x1ZGVzKHllYXIubmF0aXZlRWxlbWVudCkpO1xuXG4gICAgICAgIGlmICh2YWxpZFRhcmdldCkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gSWd4Q2FsZW5kYXJWaWV3LlllYXI7XG4gICAgICAgIH1cbiAgICB9XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuICAgIHB1YmxpYyBvblllYXJzVmlld0tleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMucGxhdGZvcm0uaXNBY3RpdmF0aW9uS2V5KGV2ZW50KSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gSWd4Q2FsZW5kYXJWaWV3LlllYXI7XG4gICAgICAgIH1cbiAgICB9XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwcm90ZWN0ZWQgZ2V0Rm9ybWF0dGVkRGF0ZSgpOiB7IHdlZWtkYXk6IHN0cmluZzsgbW9udGhkYXk6IHN0cmluZyB9IHtcblx0XHRjb25zdCBkYXRlID0gdGhpcy5oZWFkZXJEYXRlO1xuICAgICAgICBjb25zdCBtb250aEZvcm1hdHRlciA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KHRoaXMubG9jYWxlLCB7IG1vbnRoOiAnc2hvcnQnLCBkYXk6ICdudW1lcmljJyB9KVxuICAgICAgICBjb25zdCBkYXlGb3JtYXR0ZXIgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdCh0aGlzLmxvY2FsZSwgeyB3ZWVrZGF5OiAnc2hvcnQnIH0pXG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0bW9udGhkYXk6IG1vbnRoRm9ybWF0dGVyLmZvcm1hdChkYXRlKSxcblx0XHRcdHdlZWtkYXk6IGRheUZvcm1hdHRlci5mb3JtYXQoZGF0ZSksXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHJvdGVjdGVkIGdldEZvcm1hdHRlZFJhbmdlKCk6IHsgc3RhcnQ6IHN0cmluZzsgZW5kOiBzdHJpbmcgfSB7XG5cdFx0Y29uc3QgZGF0ZXMgPSB0aGlzLnNlbGVjdGVkRGF0ZXMgYXMgRGF0ZVtdO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHN0YXJ0OiB0aGlzLmZvcm1hdHRlclJhbmdlZGF5LmZvcm1hdChkYXRlcy5hdCgwKSksXG5cdFx0XHRlbmQ6IHRoaXMuZm9ybWF0dGVyUmFuZ2VkYXkuZm9ybWF0KGRhdGVzLmF0KC0xKSlcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuICAgIHByb3RlY3RlZCBnZXQgdmlld0RhdGVzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb250aFZpZXdzLnRvQXJyYXkoKVxuICAgICAgICAgICAgLmZsYXRNYXAodmlldyA9PiB2aWV3LmRhdGVzLnRvQXJyYXkoKSlcbiAgICAgICAgICAgIC5maWx0ZXIoZCA9PiBkLmlzQ3VycmVudE1vbnRoKTtcbiAgICB9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgaW52b2tlZCBvbiBkYXRlIHNlbGVjdGlvblxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHJvdGVjdGVkIGhhbmRsZURhdGVTZWxlY3Rpb24oZGF0ZTogRGF0ZSkge1xuICAgICAgICBjb25zdCBvdXRPZlJhbmdlID0gIXRoaXMudmlld0RhdGVzLnNvbWUoZCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gZC5kYXRlLmVxdWFsVG8oZGF0ZSlcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKG91dE9mUmFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSBkYXRlO1xuICAgICAgICB9XG5cblx0XHR0aGlzLnNlbGVjdERhdGUoZGF0ZSk7XG5cbiAgICAgICAgLy8ga2VlcCB2aWV3cyBpbiBzeW5jXG5cdFx0dGhpcy5tb250aFZpZXdzLmZvckVhY2goKG0pID0+IHtcblx0XHRcdG0uc2hpZnRLZXkgPSB0aGlzLnNoaWZ0S2V5O1xuICAgICAgICAgICAgbS5zZWxlY3RlZERhdGVzID0gdGhpcy5zZWxlY3RlZERhdGVzO1xuICAgICAgICAgICAgbS5jZHIubWFya0ZvckNoZWNrKCk7XG5cdFx0fSk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uICE9PSAnc2luZ2xlJykge1xuXHRcdCAgICB0aGlzLnNlbGVjdGVkLmVtaXQodGhpcy5zZWxlY3RlZERhdGVzKTtcbiAgICAgICAgfSBlbHNlIHtcblx0XHQgICAgdGhpcy5zZWxlY3RlZC5lbWl0KHRoaXMuc2VsZWN0ZWREYXRlcy5hdCgwKSk7XG4gICAgICAgIH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlbmFsXG5cdCAqL1xuXHRwdWJsaWMgY2hhbmdlTW9udGgoZGF0ZTogRGF0ZSkge1xuXHRcdHRoaXMucHJldmlvdXNWaWV3RGF0ZSA9IHRoaXMudmlld0RhdGU7XG4gICAgICAgIHRoaXMudmlld0RhdGUgPSBDYWxlbmRhckRheS5mcm9tKGRhdGUpLmFkZCgnbW9udGgnLCAtdGhpcy5hY3RpdmVWaWV3SWR4KS5uYXRpdmU7XG5cdFx0dGhpcy5hY3RpdmVWaWV3ID0gSWd4Q2FsZW5kYXJWaWV3Lk1vbnRoO1xuICAgICAgICB0aGlzLnJlc2V0QWN0aXZlRGF0ZShkYXRlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlbmFsXG5cdCAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBjaGFuZ2VZZWFyKGRhdGU6IERhdGUpIHtcbiAgICAgICAgdGhpcy5wcmV2aW91c1ZpZXdEYXRlID0gdGhpcy52aWV3RGF0ZTtcbiAgICAgICAgdGhpcy52aWV3RGF0ZSA9IENhbGVuZGFyRGF5LmZyb20oZGF0ZSkuYWRkKCdtb250aCcsIC10aGlzLmFjdGl2ZVZpZXdJZHgpLm5hdGl2ZTtcblx0XHR0aGlzLmFjdGl2ZVZpZXcgPSBJZ3hDYWxlbmRhclZpZXcuWWVhcjtcbiAgICB9XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVuYWxcblx0ICovXG5cdHB1YmxpYyB1cGRhdGVZZWFyKGRhdGU6IERhdGUpIHtcblx0XHR0aGlzLnByZXZpb3VzVmlld0RhdGUgPSB0aGlzLnZpZXdEYXRlO1xuICAgICAgICB0aGlzLnZpZXdEYXRlID0gQ2FsZW5kYXJEYXkuZnJvbShkYXRlKS5hZGQoJ3llYXInLCAtdGhpcy5hY3RpdmVWaWV3SWR4KS5uYXRpdmU7XG5cdH1cblxuICAgIHB1YmxpYyB1cGRhdGVBY3RpdmVEZXNjZW5kYW50KGRhdGU6IERhdGUpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVEZXNjZW5kYW50ID0gZGF0ZTtcbiAgICB9XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwdWJsaWMgb25BY3RpdmVWaWV3WWVhcihldmVudDogTW91c2VFdmVudCwgZGF0ZTogRGF0ZSwgYWN0aXZlVmlld0lkeDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHR0aGlzLmFjdGl2ZVZpZXcgPSBJZ3hDYWxlbmRhclZpZXcuWWVhcjtcblx0XHR0aGlzLmFjdGl2ZVZpZXdJZHggPSBhY3RpdmVWaWV3SWR4O1xuICAgICAgICB0aGlzLnZpZXdEYXRlID0gZGF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIG9uQWN0aXZlVmlld1llYXJLQihkYXRlOiBEYXRlLCBldmVudDogS2V5Ym9hcmRFdmVudCwgYWN0aXZlVmlld0lkeDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG5cdFx0aWYgKHRoaXMucGxhdGZvcm0uaXNBY3RpdmF0aW9uS2V5KGV2ZW50KSkge1xuXHRcdCAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVWaWV3ID0gSWd4Q2FsZW5kYXJWaWV3LlllYXI7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVZpZXdJZHggPSBhY3RpdmVWaWV3SWR4O1xuICAgICAgICAgICAgdGhpcy52aWV3RGF0ZSA9IGRhdGU7XG5cbiAgICAgICAgICAgIHRoaXMud3JhcHBlci5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERlc2VsZWN0cyBkYXRlKHMpIChiYXNlZCBvbiB0aGUgc2VsZWN0aW9uIHR5cGUpLlxuXHQgKlxuXHQgKiBAZXhhbXBsZVxuXHQgKiBgYGB0eXBlc2NyaXB0XG5cdCAqICB0aGlzLmNhbGVuZGFyLmRlc2VsZWN0RGF0ZShuZXcgRGF0ZShgMjAxOC0wNi0xMmApKTtcblx0ICogYGBgYFxuXHQgKi9cblx0cHVibGljIG92ZXJyaWRlIGRlc2VsZWN0RGF0ZSh2YWx1ZT86IERhdGUgfCBEYXRlW10gfCBzdHJpbmcpIHtcblx0XHRzdXBlci5kZXNlbGVjdERhdGUodmFsdWUpO1xuXG5cdFx0dGhpcy5tb250aFZpZXdzLmZvckVhY2goKG0pID0+IHtcblx0XHRcdG0uc2VsZWN0ZWREYXRlcyA9IHRoaXMuc2VsZWN0ZWREYXRlcztcblx0XHRcdG0ucmFuZ2VTdGFydGVkID0gZmFsc2U7XG4gICAgICAgICAgICBtLmNkci5tYXJrRm9yQ2hlY2soKTtcblx0XHR9KTtcblxuXHRcdHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodGhpcy5zZWxlY3RlZERhdGVzKTtcblx0fVxuXG5cblx0LyoqXG5cdCAqIEdldHRlciBmb3IgdGhlIGNvbnRleHQgb2JqZWN0IGluc2lkZSB0aGUgY2FsZW5kYXIgdGVtcGxhdGVzLlxuXHQgKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIGdldENvbnRleHQoaTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBDYWxlbmRhckRheS5mcm9tKHRoaXMudmlld0RhdGUpLmFkZCgnbW9udGgnLCBpKS5uYXRpdmU7XG5cdFx0cmV0dXJuIHRoaXMuZ2VuZXJhdGVDb250ZXh0KGRhdGUsIGkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuICAgIC8vIFRPRE86IFNlZSBpZiB0aGlzIGNhbiBiZSBpbmNvcnBvcmF0ZWQgaW4gdGhlIERheXNWaWV3IGRpcmVjdGx5XG5cdHB1YmxpYyByZXNldEFjdGl2ZURhdGUoZGF0ZTogRGF0ZSkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBDYWxlbmRhckRheS5mcm9tKHRoaXMuYWN0aXZlRGF0ZSkuc2V0KHtcbiAgICAgICAgICAgIG1vbnRoOiBkYXRlLmdldE1vbnRoKCksXG4gICAgICAgICAgICB5ZWFyOiBkYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG91dE9mUmFuZ2UgPVxuICAgICAgICAgICAgIWFyZVNhbWVNb250aChkYXRlLCB0YXJnZXQpIHx8XG4gICAgICAgICAgICBpc0RhdGVJblJhbmdlcyh0YXJnZXQsIHRoaXMuZGlzYWJsZWREYXRlcyk7XG5cbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gb3V0T2ZSYW5nZSA/IGRhdGUgOiB0YXJnZXQubmF0aXZlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMua2V5Ym9hcmROYXZpZ2F0aW9uLmRldGFjaEtleWJvYXJkSGFuZGxlcnMoKTtcbiAgICAgICAgdGhpcy53cmFwcGVyPy5uYXRpdmVFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgdGhpcy5vbldyYXBwZXJGb2N1cyk7XG4gICAgICAgIHRoaXMud3JhcHBlcj8ubmF0aXZlRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5vbldyYXBwZXJCbHVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAaGlkZGVuXG5cdCAqIEBpbnRlcm5hbFxuXHQgKi9cblx0cHVibGljIGdldFByZXZNb250aChkYXRlOiBEYXRlKTogRGF0ZSB7XG5cdFx0cmV0dXJuIENhbGVuZGFyRGF5LmZyb20oZGF0ZSkuYWRkKCdtb250aCcsIC0xKS5uYXRpdmU7XG5cdH1cblxuXHQvKipcblx0ICogQGhpZGRlblxuXHQgKiBAaW50ZXJuYWxcblx0ICovXG5cdHB1YmxpYyBnZXROZXh0TW9udGgoZGF0ZTogRGF0ZSwgdmlld0luZGV4OiBudW1iZXIpOiBEYXRlIHtcbiAgICAgICAgcmV0dXJuIENhbGVuZGFyRGF5LmZyb20oZGF0ZSkuYWRkKCdtb250aCcsIHZpZXdJbmRleCkubmF0aXZlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhlbHBlciBtZXRob2QgYnVpbGRpbmcgYW5kIHJldHVybmluZyB0aGUgY29udGV4dCBvYmplY3QgaW5zaWRlIHRoZSBjYWxlbmRhciB0ZW1wbGF0ZXMuXG5cdCAqXG5cdCAqIEBoaWRkZW5cblx0ICogQGludGVybmFsXG5cdCAqL1xuXHRwcml2YXRlIGdlbmVyYXRlQ29udGV4dCh2YWx1ZTogRGF0ZSB8IERhdGVbXSwgaT86IG51bWJlcikge1xuICAgICAgICBjb25zdCBjb25zdHJ1Y3QgPSAoZGF0ZTogRGF0ZSwgaW5kZXg6IG51bWJlcikgPT4gKHtcbiAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICAuLi5mb3JtYXRUb1BhcnRzKGRhdGUsIHRoaXMubG9jYWxlLCB0aGlzLmZvcm1hdE9wdGlvbnMsIFtcbiAgICAgICAgICAgICAgICBcImVyYVwiLFxuICAgICAgICAgICAgICAgIFwieWVhclwiLFxuICAgICAgICAgICAgICAgIFwibW9udGhcIixcbiAgICAgICAgICAgICAgICBcImRheVwiLFxuICAgICAgICAgICAgICAgIFwid2Vla2RheVwiLFxuICAgICAgICAgICAgXSksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGZvcm1hdE9iamVjdCA9IEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgICAgICAgICA/IHZhbHVlLm1hcCgoZGF0ZSwgaW5kZXgpID0+IGNvbnN0cnVjdChkYXRlLCBpbmRleCkpXG4gICAgICAgICAgICA6IGNvbnN0cnVjdCh2YWx1ZSwgaSk7XG5cbiAgICAgICAgcmV0dXJuIHsgJGltcGxpY2l0OiBmb3JtYXRPYmplY3QgfTtcblx0fVxufVxuIiwiPG5nLXRlbXBsYXRlIGxldC1yZXN1bHQgI2RlZmF1bHRIZWFkZXJUaXRsZT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uID09PSAnc2luZ2xlJ1wiPlxuICAgICAgICA8c3Bhbj57eyByZXNvdXJjZVN0cmluZ3MuaWd4X2NhbGVuZGFyX3NlbGVjdF9kYXRlIH19PC9zcGFuPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3Rpb24gPT09ICdyYW5nZSdcIj5cbiAgICAgICAgPHNwYW4+e3sgcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9yYW5nZV9wbGFjZWhvbGRlciB9fTwvc3Bhbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSBsZXQtcmVzdWx0ICNkZWZhdWx0SGVhZGVyRGF0ZT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uID09PSAnc2luZ2xlJ1wiPlxuICAgICAgICA8c3Bhbj57eyBnZXRGb3JtYXR0ZWREYXRlKCkud2Vla2RheSB9fSwmbmJzcDs8L3NwYW4+XG4gICAgICAgIDxzcGFuPnt7IGdldEZvcm1hdHRlZERhdGUoKS5tb250aGRheSB9fTwvc3Bhbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uID09PSAncmFuZ2UnXCI+XG4gICAgICAgIDxzcGFuPnt7IHNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAwID8gJ1N0YXJ0JyA6IGdldEZvcm1hdHRlZFJhbmdlKCkuc3RhcnR9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4+Jm5ic3A7LSZuYnNwOzwvc3Bhbj5cbiAgICAgICAgPHNwYW4+e3sgc2VsZWN0ZWREYXRlcy5sZW5ndGggPD0gMSA/ICdFbmQnIDogZ2V0Rm9ybWF0dGVkUmFuZ2UoKS5lbmR9fTwvc3Bhbj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gTW9udGggLS0+XG48bmctdGVtcGxhdGUgI2RlZmF1bHRNb250aCBsZXQtb2JqPlxuICAgIDxzcGFuXG4gICAgICAgICNtb250aHNCdG5cbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiKG9iai5kYXRlIHwgZGF0ZTogJ0xMTEwnKSArICcsICcgKyByZXNvdXJjZVN0cmluZ3MuaWd4X2NhbGVuZGFyX3NlbGVjdF9tb250aFwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uQWN0aXZlVmlld1llYXJLQihvYmouZGF0ZSwgJGV2ZW50LCBvYmouaW5kZXgpXCJcbiAgICAgICAgKG1vdXNlZG93bik9XCJvbkFjdGl2ZVZpZXdZZWFyKCRldmVudCwgb2JqLmRhdGUsIG9iai5pbmRleClcIlxuICAgICAgICBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJfX2RhdGVcIj5cbiAgICAgICAge3sgZm9ybWF0dGVkTW9udGgob2JqLmRhdGUpIH19XG4gICAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBZZWFyIC0tPlxuPG5nLXRlbXBsYXRlICNkZWZhdWx0WWVhciBsZXQtb2JqPlxuICAgIDxzcGFuICpuZ0lmPVwiYWN0aXZlVmlldyA9PT0gJ3llYXInXCIgY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX2FyaWEtb2ZmLXNjcmVlblwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPnt7IGZvcm1hdHRlZFllYXIob2JqLmRhdGUpIH19PC9zcGFuPlxuICAgIDxzcGFuXG4gICAgICAgICN5ZWFyc0J0blxuICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIob2JqLmRhdGUgfCBkYXRlOiAneXl5eScpICsgJywgJyArIHJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfc2VsZWN0X3llYXJcIlxuICAgICAgICAoa2V5ZG93bik9XCJvbkFjdGl2ZVZpZXdEZWNhZGVLQihvYmouZGF0ZSwgJGV2ZW50LCBvYmouaW5kZXgpXCJcbiAgICAgICAgKG1vdXNlZG93bik9XCJvbkFjdGl2ZVZpZXdEZWNhZGUoJGV2ZW50LCBvYmouZGF0ZSwgb2JqLmluZGV4KVwiXG4gICAgICAgIGNsYXNzPVwiaWd4LWNhbGVuZGFyLXBpY2tlcl9fZGF0ZVwiPlxuICAgICAgICB7eyBmb3JtYXR0ZWRZZWFyKG9iai5kYXRlKSB9fVxuICAgIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gTW9udGggWWVhciAtLT5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdE1vbnRoWWVhciBsZXQtb2JqIGxldC1yZXN1bHQ+XG4gICAgPHNwYW4gKm5nSWY9XCJtb250aHNWaWV3TnVtYmVyIDwgMiB8fCBvYmouaW5kZXggPCAxXCIgY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX2FyaWEtb2ZmLXNjcmVlblwiIGFyaWEtbGl2ZT1cInBvbGl0ZVwiPlxuICAgICAgICAgICAge3sgbW9udGhzVmlld051bWJlciA+IDEgP1xuICAgICAgICAocmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9maXJzdF9waWNrZXJfb2YucmVwbGFjZSgnezB9JywgbW9udGhzVmlld051bWJlci50b1N0cmluZygpKSArICcgJyArXG4gICAgICAgICAgICAob2JqLmRhdGUgfCBkYXRlOiAnTExMTCB5eXl5JykpIDpcbiAgICAgICAgcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9zZWxlY3RlZF9tb250aF9pcyArIChvYmouZGF0ZSB8IGRhdGU6ICdMTExMIHl5eXknKX19XG4gICAgPC9zcGFuPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkZWZhdWx0TW9udGg7IGNvbnRleHQ6IHskaW1wbGljaXQ6IG9ian1cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGVmYXVsdFllYXI7IGNvbnRleHQ6IHskaW1wbGljaXQ6IG9ian1cIj48L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gRGVjYWRlIC0tPlxuPG5nLXRlbXBsYXRlICNkZWZhdWx0RGVjYWRlPlxuICAgIDxzcGFuPnt7IGdldERlY2FkZVJhbmdlKCkuc3RhcnQgfX0gLSB7eyBnZXREZWNhZGVSYW5nZSgpLmVuZCB9fTwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gVE9ETzogTWFrZSBhcnJvd3MgdGVtcGxhdGFibGUgdmlhIGV4dGVybmFsIHRlbXBsYXRlcyBhbmQgYmFzZWQgb24gdGhlbWUgLS0+XG48IS0tIFByZXZpb3VzIGFycm93IGljb24gLS0+XG48bmctdGVtcGxhdGUgI3ByZXZBcnJvdyBsZXQtb2JqPlxuICAgIDxpZ3gtaWNvbiBhcmlhLWhpZGRlbj1cInRydWVcIj5rZXlib2FyZF9hcnJvd19sZWZ0PC9pZ3gtaWNvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gTmV4dCBhcnJvdyBpY29uIC0tPlxuPG5nLXRlbXBsYXRlICNuZXh0QXJyb3cgbGV0LW9iaj5cbiAgICA8aWd4LWljb24gYXJpYS1oaWRkZW49XCJ0cnVlXCI+a2V5Ym9hcmRfYXJyb3dfcmlnaHQ8L2lneC1pY29uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBQcmV2aW91cyBwaWNrZXIgYnV0dG9uIC0tPlxuPG5nLXRlbXBsYXRlICNwcmV2UGFnZUJ1dHRvbiBsZXQtb2JqPlxuICAgIDxkaXZcbiAgICAgICAgI3ByZXZQYWdlQnRuXG4gICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgIGNsYXNzPVwiaWd4LWNhbGVuZGFyLXBpY2tlcl9fcHJldlwiXG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInByZXZOYXZMYWJlbCgoZ2V0UHJldk1vbnRoKHZpZXdEYXRlKSB8IGRhdGU6ICdMTExMJykpXCJcbiAgICAgICAgZGF0YS1hY3Rpb249XCJwcmV2XCJcbiAgICAgICAgaWd4Q2FsZW5kYXJTY3JvbGxQYWdlXG4gICAgICAgIFtzdGFydFNjcm9sbF09XCJzdGFydFByZXZQYWdlU2Nyb2xsXCJcbiAgICAgICAgW3N0b3BTY3JvbGxdPVwic3RvcFBhZ2VTY3JvbGxcIlxuICAgICAgICAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInByZXZBcnJvd1wiPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBOZXh0IHBpY2tlciBidXR0b24gLS0+XG48bmctdGVtcGxhdGUgI25leHRQYWdlQnV0dG9uIGxldC1vYmo+XG4gICAgPGRpdlxuICAgICAgICAjbmV4dFBhZ2VCdG5cbiAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgY2xhc3M9XCJpZ3gtY2FsZW5kYXItcGlja2VyX19uZXh0XCJcbiAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibmV4dE5hdkxhYmVsKChnZXROZXh0TW9udGgodmlld0RhdGUsIG1vbnRoc1ZpZXdOdW1iZXIpIHwgZGF0ZTogJ0xMTEwnKSlcIlxuICAgICAgICBkYXRhLWFjdGlvbj1cIm5leHRcIlxuICAgICAgICBpZ3hDYWxlbmRhclNjcm9sbFBhZ2VcbiAgICAgICAgW3N0YXJ0U2Nyb2xsXT1cInN0YXJ0TmV4dFBhZ2VTY3JvbGxcIlxuICAgICAgICBbc3RvcFNjcm9sbF09XCJzdG9wUGFnZVNjcm9sbFwiXG4gICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibmV4dEFycm93XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFBJQ0tFUiBJTiBEQVlTIC0tPlxuPG5nLXRlbXBsYXRlICNjYWxlbmRhckRheXNQaWNrZXIgbGV0LWk+XG4gICAgPHNlY3Rpb24gY2xhc3M9XCJpZ3gtY2FsZW5kYXItcGlja2VyXCIgW3N0eWxlLi0tY2FsZW5kYXItcm93LXN0YXJ0XT1cIjEgKyAoMiAqIGkpXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtY2FsZW5kYXItcGlja2VyX19kYXRlc1wiIFthdHRyLmRhdGEtbW9udGhdPVwiaSB8IElneEdldFZpZXdEYXRlOnZpZXdEYXRlOmZhbHNlXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwic3ViaGVhZGVyVGVtcGxhdGUgPyBzdWJoZWFkZXJUZW1wbGF0ZSA6IGRlZmF1bHRNb250aFllYXI7IGNvbnRleHQ6IGdldENvbnRleHQoaSlcIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJpZ3gtY2FsZW5kYXItcGlja2VyX19uYXZcIlxuICAgICAgICAgICAgKm5nSWY9XCJ0aGlzLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcgPyBpID09PSBtb250aHNWaWV3TnVtYmVyIC0gMSA6IGkgPT09IDBcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicHJldlBhZ2VCdXR0b25cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJuZXh0UGFnZUJ1dHRvblwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L3NlY3Rpb24+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFBJQ0tFUiBJTiBNT05USFMgLS0+XG48bmctdGVtcGxhdGUgI2NhbGVuZGFyWWVhclBpY2tlcj5cbiAgICA8c2VjdGlvbiBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJfX2RhdGVzXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdWJoZWFkZXJUZW1wbGF0ZSA/IHN1YmhlYWRlclRlbXBsYXRlIDogZGVmYXVsdFllYXI7IGNvbnRleHQ6IGdldENvbnRleHQoMClcIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJfX25hdlwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInByZXZQYWdlQnV0dG9uXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibmV4dFBhZ2VCdXR0b25cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9zZWN0aW9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBQSUNLRVIgSU4gWUVBUlMgLS0+XG48bmctdGVtcGxhdGUgI2NhbGVuZGFyRGVjYWRlUGlja2VyPlxuICAgIDxzZWN0aW9uIGNsYXNzPVwiaWd4LWNhbGVuZGFyLXBpY2tlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaWd4LWNhbGVuZGFyLXBpY2tlcl9fZGF0ZXNcIiBhcmlhLWxpdmU9XCJwb2xpdGVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdWJoZWFkZXJUZW1wbGF0ZSA/IHN1YmhlYWRlclRlbXBsYXRlIDogZGVmYXVsdERlY2FkZTtcIj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImlneC1jYWxlbmRhci1waWNrZXJfX25hdlwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInByZXZQYWdlQnV0dG9uXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibmV4dFBhZ2VCdXR0b25cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9zZWN0aW9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuXG48aGVhZGVyXG4gICAgYXJpYS1sYWJlbGxlZGJ5PVwiaWd4LWFyaWEtY2FsZW5kYXItdGl0bGUtbW9udGggaWd4LWFyaWEtY2FsZW5kYXItdGl0bGUteWVhclwiXG4gICAgY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX2hlYWRlclwiXG4gICAgKm5nSWY9XCJzZWxlY3Rpb24gPT09ICdzaW5nbGUnICYmIGhhc0hlYWRlciB8fCBzZWxlY3Rpb24gPT09ICdyYW5nZScgJiYgaGFzSGVhZGVyXCI+XG4gICAgPGg1IGlkPVwiaWd4LWFyaWEtY2FsZW5kYXItdGl0bGUteWVhclwiIGNsYXNzPVwiaWd4LWNhbGVuZGFyX19oZWFkZXIteWVhclwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaGVhZGVyVGl0bGVUZW1wbGF0ZSA/PyBkZWZhdWx0SGVhZGVyVGl0bGU7IGNvbnRleHQ6IGhlYWRlckNvbnRleHRcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L2g1PlxuICAgIDxoMiBpZD1cImlneC1hcmlhLWNhbGVuZGFyLXRpdGxlLW1vbnRoXCIgY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX2hlYWRlci1kYXRlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJUZW1wbGF0ZSA/IGhlYWRlclRlbXBsYXRlIDogZGVmYXVsdEhlYWRlckRhdGU7IGNvbnRleHQ6IGhlYWRlckNvbnRleHRcIj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9oMj5cbjwvaGVhZGVyPlxuXG5cbjxkaXZcbiAgICAjd3JhcHBlclxuICAgIFtzdHlsZS4tLWNhbGVuZGFyLW1vbnRoc109XCJtb250aHNWaWV3TnVtYmVyXCJcbiAgICBbdGFiSW5kZXhdPVwiMFwiXG4gICAgY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX3dyYXBwZXJcIlxuICAgIFtjbGFzcy5pZ3gtY2FsZW5kYXJfX3dyYXBwZXItLXZlcnRpY2FsXT1cIm9yaWVudGF0aW9uID09PSAndmVydGljYWwnXCJcbiAgICBbYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnRdPVwiYWN0aXZlRGVzY2VuZGFudFwiXG4gICAgW2F0dHIuYXJpYS1tdWx0aXNlbGVjdGFibGVdPVwic2VsZWN0aW9uICE9PSAnc2luZ2xlJ1wiXG4gICAgYXJpYS1sYWJlbGxlZGJ5PVwiY2FsZW5kYXItZGVzY1wiXG4gICAgcm9sZT1cImdyaWRcIlxuICAgID5cbiAgICA8Y2FwdGlvbiBpZD1cImNhbGVuZGFyLWRlc2NcIiB0YWJpbmRleD1cIi0xXCIgY2xhc3M9XCJpZ3gtY2FsZW5kYXJfX2FyaWEtb2ZmLXNjcmVlblwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsZWN0aW9uID09PSAnbXVsdGknXCI+XG4gICAgICAgICAgICB7eyBtb250aHNWaWV3TnVtYmVyICYmIG1vbnRoc1ZpZXdOdW1iZXIgPiAxID9cbiAgICAgICAgICAgIHJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfbXVsdGlfc2VsZWN0aW9uLnJlcGxhY2UoJ3swfScsIG1vbnRoc1ZpZXdOdW1iZXIudG9TdHJpbmcoKSkgOlxuICAgICAgICAgICAgcmVzb3VyY2VTdHJpbmdzLmlneF9jYWxlbmRhcl9zaW5ndWxhcl9tdWx0aV9zZWxlY3Rpb259fVxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGlvbiA9PT0gJ3JhbmdlJ1wiPlxuICAgICAgICAgICAge3sgbW9udGhzVmlld051bWJlciAmJiBtb250aHNWaWV3TnVtYmVyID4gMSA/XG4gICAgICAgICAgICByZXNvdXJjZVN0cmluZ3MuaWd4X2NhbGVuZGFyX3JhbmdlX3NlbGVjdGlvbi5yZXBsYWNlKCd7MH0nLCBtb250aHNWaWV3TnVtYmVyLnRvU3RyaW5nKCkpIDpcbiAgICAgICAgICAgIHJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfc2luZ3VsYXJfcmFuZ2Vfc2VsZWN0aW9ufX1cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3Rpb24gPT09ICdzaW5nbGUnXCI+XG4gICAgICAgICAgICB7eyBtb250aHNWaWV3TnVtYmVyICYmIG1vbnRoc1ZpZXdOdW1iZXIgPiAxID9cbiAgICAgICAgICAgIHJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfc2luZ2xlX3NlbGVjdGlvbi5yZXBsYWNlKCd7MH0nLCBtb250aHNWaWV3TnVtYmVyLnRvU3RyaW5nKCkpIDpcbiAgICAgICAgICAgIHJlc291cmNlU3RyaW5ncy5pZ3hfY2FsZW5kYXJfc2luZ3VsYXJfc2luZ2xlX3NlbGVjdGlvbn19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvY2FwdGlvbj5cbiAgICA8c2VjdGlvblxuICAgICAgICBjbGFzcz1cImlneC1jYWxlbmRhcl9fcGlja2Vyc1wiXG4gICAgICAgIFtjbGFzcy5pZ3gtY2FsZW5kYXJfX3BpY2tlcnMtLWRheXNdPVwiaXNEZWZhdWx0Vmlld1wiXG4gICAgICAgIFtjbGFzcy5pZ3gtY2FsZW5kYXJfX3BpY2tlcnMtLXZlcnRpY2FsXT1cIm9yaWVudGF0aW9uID09PSAndmVydGljYWwnXCJcbiAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0RlZmF1bHRWaWV3XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB2aWV3IG9mIG1vbnRoc1ZpZXdOdW1iZXIgfCBJZ3hNb250aFZpZXdTbG90czsgaW5kZXggYXMgaVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjYWxlbmRhckRheXNQaWNrZXI7IGNvbnRleHQ6IHskaW1wbGljaXQ6IGl9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzWWVhclZpZXdcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjYWxlbmRhclllYXJQaWNrZXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRGVjYWRlVmlld1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNhbGVuZGFyRGVjYWRlUGlja2VyXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvc2VjdGlvbj5cblxuICAgIDxzZWN0aW9uIGNsYXNzPVwiaWd4LWNhbGVuZGFyX19ib2R5XCIgW2NsYXNzLmlneC1jYWxlbmRhcl9fYm9keS0tdmVydGljYWxdPVwib3JpZW50YXRpb24gPT09ICd2ZXJ0aWNhbCdcIiByb2xlPVwicHJlc2VudGF0aW9uXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0RlZmF1bHRWaWV3XCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB2aWV3IG9mIG1vbnRoc1ZpZXdOdW1iZXIgfCBJZ3hNb250aFZpZXdTbG90czsgaW5kZXggYXMgaVwiPlxuICAgICAgICAgICAgICAgIDxpZ3gtZGF5cy12aWV3XG4gICAgICAgICAgICAgICAgICAgICNkYXlzXG4gICAgICAgICAgICAgICAgICAgIHJvbGU9XCJyb3dncm91cFwiXG4gICAgICAgICAgICAgICAgICAgIFt0YWJJbmRleF09XCItMVwiXG4gICAgICAgICAgICAgICAgICAgIFtzZWxlY3Rpb25dPVwic2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgW2xvY2FsZV09XCJsb2NhbGVcIlxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICBbKGFjdGl2ZURhdGUpXT1cImFjdGl2ZURhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbKHByZXZpZXdSYW5nZURhdGUpXT1cInByZXZpZXdSYW5nZURhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbdmlld0RhdGVdPVwiaSB8IElneEdldFZpZXdEYXRlOiB2aWV3RGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFt3ZWVrU3RhcnRdPVwid2Vla1N0YXJ0XCJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1hdE9wdGlvbnNdPVwiZm9ybWF0T3B0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAgIFtmb3JtYXRWaWV3c109XCJmb3JtYXRWaWV3c1wiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZERhdGVzXT1cImRpc2FibGVkRGF0ZXNcIlxuICAgICAgICAgICAgICAgICAgICBbc3BlY2lhbERhdGVzXT1cInNwZWNpYWxEYXRlc1wiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS4tLWNhbGVuZGFyLXJvdy1zdGFydF09XCIoaSArIDEpICogMlwiXG4gICAgICAgICAgICAgICAgICAgIFtoaWRlTGVhZGluZ0RheXNdPVwiaGlkZU91dHNpZGVEYXlzIHx8IGkgIT09IDBcIlxuICAgICAgICAgICAgICAgICAgICBbaGlkZVRyYWlsaW5nRGF5c109XCJoaWRlT3V0c2lkZURheXMgfHwgaSAhPT0gbW9udGhzVmlld051bWJlciAtIDFcIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd1dlZWtOdW1iZXJzXT1cInNob3dXZWVrTnVtYmVyc1wiXG4gICAgICAgICAgICAgICAgICAgIFtzaG93QWN0aXZlRGF5XT1cInNob3dBY3RpdmVEYXlcIlxuICAgICAgICAgICAgICAgICAgICBbc3RhbmRhbG9uZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIChzd2lwZXJpZ2h0KT1cInByZXZpb3VzUGFnZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgKHN3aXBlbGVmdCk9XCJuZXh0UGFnZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgKGRhdGVTZWxlY3RlZCk9XCJoYW5kbGVEYXRlU2VsZWN0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCI+XG4gICAgICAgICAgICAgICAgPC9pZ3gtZGF5cy12aWV3PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1llYXJWaWV3XCI+XG4gICAgICAgICAgICA8aWd4LW1vbnRocy12aWV3XG4gICAgICAgICAgICAgICAgI21vbnRoc1xuICAgICAgICAgICAgICAgIHJvbGU9XCJyb3dncm91cFwiXG4gICAgICAgICAgICAgICAgW3RhYkluZGV4XT1cIi0xXCJcbiAgICAgICAgICAgICAgICBbZGF0ZV09XCJ2aWV3RGF0ZVwiXG4gICAgICAgICAgICAgICAgW2xvY2FsZV09XCJsb2NhbGVcIlxuICAgICAgICAgICAgICAgIFtmb3JtYXRWaWV3XT1cImZvcm1hdFZpZXdzLm1vbnRoXCJcbiAgICAgICAgICAgICAgICBbbW9udGhGb3JtYXRdPVwiZm9ybWF0T3B0aW9ucy5tb250aFwiXG4gICAgICAgICAgICAgICAgW3Nob3dBY3RpdmVdPVwic2hvd0FjdGl2ZURheVwiXG4gICAgICAgICAgICAgICAgW3N0YW5kYWxvbmVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIChzd2lwZXJpZ2h0KT1cInByZXZpb3VzUGFnZSgpXCJcbiAgICAgICAgICAgICAgICAoc3dpcGVsZWZ0KT1cIm5leHRQYWdlKClcIlxuICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlZCk9XCJ1cGRhdGVZZWFyKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChhY3RpdmVEYXRlQ2hhbmdlZCk9XCJ1cGRhdGVBY3RpdmVEZXNjZW5kYW50KCRldmVudClcIlxuICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJjaGFuZ2VNb250aCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCI+XG4gICAgICAgICAgICA8L2lneC1tb250aHMtdmlldz5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRGVjYWRlVmlld1wiPlxuICAgICAgICAgICAgPGlneC15ZWFycy12aWV3XG4gICAgICAgICAgICAgICAgI2RlY2FkZVxuICAgICAgICAgICAgICAgIHJvbGU9XCJyb3dncm91cFwiXG4gICAgICAgICAgICAgICAgW3RhYkluZGV4XT1cIi0xXCJcbiAgICAgICAgICAgICAgICBbZGF0ZV09XCJ2aWV3RGF0ZVwiXG4gICAgICAgICAgICAgICAgW2xvY2FsZV09XCJsb2NhbGVcIlxuICAgICAgICAgICAgICAgIFtmb3JtYXRWaWV3XT1cImZvcm1hdFZpZXdzLnllYXJcIlxuICAgICAgICAgICAgICAgIFt5ZWFyRm9ybWF0XT1cImZvcm1hdE9wdGlvbnMueWVhclwiXG4gICAgICAgICAgICAgICAgW3Nob3dBY3RpdmVdPVwic2hvd0FjdGl2ZURheVwiXG4gICAgICAgICAgICAgICAgW3N0YW5kYWxvbmVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgIChzd2lwZXJpZ2h0KT1cInByZXZpb3VzUGFnZSgpXCJcbiAgICAgICAgICAgICAgICAoc3dpcGVsZWZ0KT1cIm5leHRQYWdlKClcIlxuICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlZCk9XCJ1cGRhdGVZZWFyKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChhY3RpdmVEYXRlQ2hhbmdlZCk9XCJ1cGRhdGVBY3RpdmVEZXNjZW5kYW50KCRldmVudClcIlxuICAgICAgICAgICAgICAgIChzZWxlY3RlZCk9XCJjaGFuZ2VZZWFyKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChtb3VzZWRvd24pPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIj5cbiAgICAgICAgICAgIDwvaWd4LXllYXJzLXZpZXc+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvc2VjdGlvbj5cbjwvZGl2PlxuIl19