@tilde-nlp/ngx-translate 7.0.73 → 7.0.74

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.
@@ -2,7 +2,7 @@ import { CommonModule } from '@angular/common';
2
2
  import { Component, inject, input, signal } from '@angular/core';
3
3
  import { MatMenuModule } from '@angular/material/menu';
4
4
  import { TranslateModule } from '@ngx-translate/core';
5
- import { AlertService, OpenCloseButtonModule } from '@tilde-nlp/ngx-common';
5
+ import { AlertService, LLMActions, OpenCloseButtonModule, PlausibleHelper } from '@tilde-nlp/ngx-common';
6
6
  import { LLMRephraseUseCase, LLMService, LLMWritingStyle } from '@tilde-nlp/ngx-services';
7
7
  import { marked } from 'marked';
8
8
  import { finalize } from 'rxjs';
@@ -43,6 +43,7 @@ export class RephraseComponent {
43
43
  this.markedRephrasedText.set('');
44
44
  this.setSelectedWritingStyle(style);
45
45
  this.isLoading.set(true);
46
+ this.rephrasePlausible();
46
47
  this.#llm
47
48
  .rephrase({
48
49
  useCase: LLMRephraseUseCase.General,
@@ -63,11 +64,18 @@ export class RephraseComponent {
63
64
  copyRephraseText() {
64
65
  this.#clipboard.copy(this.rephrasedText());
65
66
  this.#alerts.success('TLD_TRANSLATE.REPHRASE.COPIED');
67
+ this.copyPlausible();
66
68
  }
67
69
  setSelectedWritingStyle(style) {
68
70
  this.selectedRephrasingStyle.set(style);
69
71
  localStorage.setItem(this.rephraseStyleLocalStorageKey, style);
70
72
  }
73
+ rephrasePlausible() {
74
+ PlausibleHelper.customEvent(LLMActions.REPHRASE.toLowerCase(), { writingStyle: this.selectedRephrasingStyle() });
75
+ }
76
+ copyPlausible() {
77
+ PlausibleHelper.customEvent(LLMActions.REPHRASE.toLowerCase(), { action: 'copy' });
78
+ }
71
79
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RephraseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
72
80
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: RephraseComponent, isStandalone: true, selector: "tld-rephrase", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, language: { classPropertyName: "language", publicName: "language", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<lib-open-close-button\r\n\t[ngClass.lt-sm]=\"'mobile'\"\r\n\tclass=\"rephrase-menu-btn\"\r\n\t#state=\"matMenuTrigger\"\r\n\t[matMenuTriggerFor]=\"rephraseStylesMenu\"\r\n\t[isOpened]=\"state.menuOpen\"\r\n\t[disabled]=\"disabled()\"\r\n>\r\n\t<span class=\"rephrase-title\">{{ \"TLD_TRANSLATE.REPHRASE.TITLE\" | translate }} ({{ selectedRephrasingStyle() ?? \"TLD_TRANSLATE.REPHRASE.CHOOSE_LABEL\" | translate }})</span>\r\n</lib-open-close-button>\r\n\r\n<mat-menu #rephraseStylesMenu=\"matMenu\" class=\"rephrase-menu\">\r\n\t@for (style of rephraseStyles; track style) {\r\n\t<button mat-menu-item (click)=\"rephrase(style)\">\r\n\t\t{{ \"TLD_TRANSLATE.REPHRASE.STYLES.\" + (style | uppercase) | translate }}\r\n\t</button>\r\n\t}\r\n</mat-menu>\r\n\r\n@if (isLoading()) {\r\n<p class=\"rephrasing\">{{ \"TLD_TRANSLATE.REPHRASE.LOADING\" | translate }}<span class=\"dot-loading\">...</span></p>\r\n} @if(!selectedRephrasingStyle()) {\r\n<p class=\"rephrase-hint\">{{ \"TLD_TRANSLATE.REPHRASE.HINT\" | translate }}</p>\r\n}\r\n\r\n<p [innerHTML]=\"markedRephrasedText()\"></p>\r\n\r\n@if (rephrasedText()) {\r\n<button mat-icon-button [ngClass.lt-sm]=\"'rephrase-mobile'\" class=\"rephrase-copy-btn\" (click)=\"copyRephraseText()\" [matTooltip]=\"'TOOLTIPS.COPY' | translate\">\r\n\t<span class=\"material-icons\" aria-hidden=\"false\" [attr.aria-label]=\"'ARIA_LABELS.COPY' | translate\"> content_copy </span>\r\n</button>\r\n}\r\n", styles: ["p{margin-top:16px}.rephrase-menu-btn:not(.mobile){margin-left:-8px}.rephrase-title{font-size:16px;color:var(--base-30)}.rephrase-hint,.rephrasing{font-style:italic;color:var(--base-40)}.rephrase-copy-btn{position:absolute;right:-45px;top:20px}.rephrase-mobile{right:-46px}.mobile.rephrase-menu-btn{display:block;width:fit-content}::ng-deep .cdk-overlay-container .rephrase-menu{margin:8px!important;min-width:175px!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1.UpperCasePipe, name: "uppercase" }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i2.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: OpenCloseButtonModule }, { kind: "component", type: i3.OpenCloseButtonComponent, selector: "lib-open-close-button", inputs: ["disableFocusOnAction", "disabled", "isIcon", "ariaLabelCode", "isOpened"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: FlexLayoutModule }, { kind: "directive", type: i7.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }] });
73
81
  }
@@ -84,4 +92,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
84
92
  FlexLayoutModule,
85
93
  ], template: "<lib-open-close-button\r\n\t[ngClass.lt-sm]=\"'mobile'\"\r\n\tclass=\"rephrase-menu-btn\"\r\n\t#state=\"matMenuTrigger\"\r\n\t[matMenuTriggerFor]=\"rephraseStylesMenu\"\r\n\t[isOpened]=\"state.menuOpen\"\r\n\t[disabled]=\"disabled()\"\r\n>\r\n\t<span class=\"rephrase-title\">{{ \"TLD_TRANSLATE.REPHRASE.TITLE\" | translate }} ({{ selectedRephrasingStyle() ?? \"TLD_TRANSLATE.REPHRASE.CHOOSE_LABEL\" | translate }})</span>\r\n</lib-open-close-button>\r\n\r\n<mat-menu #rephraseStylesMenu=\"matMenu\" class=\"rephrase-menu\">\r\n\t@for (style of rephraseStyles; track style) {\r\n\t<button mat-menu-item (click)=\"rephrase(style)\">\r\n\t\t{{ \"TLD_TRANSLATE.REPHRASE.STYLES.\" + (style | uppercase) | translate }}\r\n\t</button>\r\n\t}\r\n</mat-menu>\r\n\r\n@if (isLoading()) {\r\n<p class=\"rephrasing\">{{ \"TLD_TRANSLATE.REPHRASE.LOADING\" | translate }}<span class=\"dot-loading\">...</span></p>\r\n} @if(!selectedRephrasingStyle()) {\r\n<p class=\"rephrase-hint\">{{ \"TLD_TRANSLATE.REPHRASE.HINT\" | translate }}</p>\r\n}\r\n\r\n<p [innerHTML]=\"markedRephrasedText()\"></p>\r\n\r\n@if (rephrasedText()) {\r\n<button mat-icon-button [ngClass.lt-sm]=\"'rephrase-mobile'\" class=\"rephrase-copy-btn\" (click)=\"copyRephraseText()\" [matTooltip]=\"'TOOLTIPS.COPY' | translate\">\r\n\t<span class=\"material-icons\" aria-hidden=\"false\" [attr.aria-label]=\"'ARIA_LABELS.COPY' | translate\"> content_copy </span>\r\n</button>\r\n}\r\n", styles: ["p{margin-top:16px}.rephrase-menu-btn:not(.mobile){margin-left:-8px}.rephrase-title{font-size:16px;color:var(--base-30)}.rephrase-hint,.rephrasing{font-style:italic;color:var(--base-40)}.rephrase-copy-btn{position:absolute;right:-45px;top:20px}.rephrase-mobile{right:-46px}.mobile.rephrase-menu-btn{display:block;width:fit-content}::ng-deep .cdk-overlay-container .rephrase-menu{margin:8px!important;min-width:175px!important}\n"] }]
86
94
  }] });
87
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwaHJhc2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGxkLXRyYW5zbGF0ZS9zcmMvbGliL21vZHVsZXMvdGxkLXRleHQvY29tcG9uZW50cy9yZXBocmFzZS9yZXBocmFzZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bGQtdHJhbnNsYXRlL3NyYy9saWIvbW9kdWxlcy90bGQtdGV4dC9jb21wb25lbnRzL3JlcGhyYXNlL3JlcGhyYXNlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzVFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDMUYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNoQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixD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LEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEUsQ0FBQzt3R0FoRVcsaUJBQWlCOzRGQUFqQixpQkFBaUIsMmNDOUI5Qiw4NUNBZ0NBLG9lRGRFLFlBQVksMkZBQ1osYUFBYSw2dkJBQ2IscUJBQXFCLGdOQUNyQixlQUFlLDJGQUNmLGVBQWUsMklBQ2YsYUFBYSw4QkFDYixnQkFBZ0IsNFRBQ2hCLGdCQUFnQjs7NEZBS0wsaUJBQWlCO2tCQWhCN0IsU0FBUzsrQkFDQyxjQUFjLGNBQ1osSUFBSSxXQUNQO3dCQUNSLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixxQkFBcUI7d0JBQ3JCLGVBQWU7d0JBQ2YsZUFBZTt3QkFDZixhQUFhO3dCQUNiLGdCQUFnQjt3QkFDaEIsZ0JBQWdCO3FCQUNoQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0LCBpbnB1dCwgT25Jbml0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlLCBPcGVuQ2xvc2VCdXR0b25Nb2R1bGUgfSBmcm9tICdAdGlsZGUtbmxwL25neC1jb21tb24nO1xyXG5pbXBvcnQgeyBMTE1SZXBocmFzZVVzZUNhc2UsIExMTVNlcnZpY2UsIExMTVdyaXRpbmdTdHlsZSB9IGZyb20gJ0B0aWxkZS1ubHAvbmd4LXNlcnZpY2VzJztcclxuaW1wb3J0IHsgbWFya2VkIH0gZnJvbSAnbWFya2VkJztcclxuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ2xpcGJvYXJkIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NsaXBib2FyZCc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBGbGV4TGF5b3V0TW9kdWxlIH0gZnJvbSAnQG5nYnJhY2tldC9uZ3gtbGF5b3V0JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAndGxkLXJlcGhyYXNlJyxcclxuXHRzdGFuZGFsb25lOiB0cnVlLFxyXG5cdGltcG9ydHM6IFtcclxuXHRcdENvbW1vbk1vZHVsZSxcclxuXHRcdE1hdE1lbnVNb2R1bGUsXHJcblx0XHRPcGVuQ2xvc2VCdXR0b25Nb2R1bGUsXHJcblx0XHRUcmFuc2xhdGVNb2R1bGUsXHJcblx0XHRNYXRCdXR0b25Nb2R1bGUsXHJcblx0XHRNYXRJY29uTW9kdWxlLFxyXG5cdFx0TWF0VG9vbHRpcE1vZHVsZSxcclxuXHRcdEZsZXhMYXlvdXRNb2R1bGUsXHJcblx0XSxcclxuXHR0ZW1wbGF0ZVVybDogJy4vcmVwaHJhc2UuY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsOiAnLi9yZXBocmFzZS5jb21wb25lbnQuc2NzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZXBocmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblx0dGV4dCA9IGlucHV0KCcnKTtcclxuXHRsYW5ndWFnZSA9IGlucHV0KCcnKTtcclxuXHRkaXNhYmxlZCA9IGlucHV0KGZhbHNlKTtcclxuXHJcblx0aXNMb2FkaW5nID0gc2lnbmFsKGZhbHNlKTtcclxuXHJcblx0cmVhZG9ubHkgI2xsbSA9IGluamVjdChMTE1TZXJ2aWNlKTtcclxuXHRyZWFkb25seSAjY2xpcGJvYXJkID0gaW5qZWN0KENsaXBib2FyZCk7XHJcblx0cmVhZG9ubHkgI2FsZXJ0cyA9IGluamVjdChBbGVydFNlcnZpY2UpO1xyXG5cclxuXHRyZWFkb25seSByZXBocmFzZVN0eWxlTG9jYWxTdG9yYWdlS2V5ID0gJ1JFUEhSQVNFX1NUWUxFJztcclxuXHJcblx0cmVwaHJhc2VTdHlsZXM6IExMTVdyaXRpbmdTdHlsZVtdID0gT2JqZWN0LnZhbHVlcyhMTE1Xcml0aW5nU3R5bGUpO1xyXG5cdHNlbGVjdGVkUmVwaHJhc2luZ1N0eWxlID0gc2lnbmFsPExMTVdyaXRpbmdTdHlsZSB8IG51bGw+KG51bGwpO1xyXG5cclxuXHRyZXBocmFzZWRUZXh0ID0gc2lnbmFsKCcnKTtcclxuXHRtYXJrZWRSZXBocmFzZWRUZXh0ID0gc2lnbmFsKCcnKTtcclxuXHJcblx0bmdPbkluaXQoKTogdm9pZCB7XHJcblx0XHR0aGlzLnNlbGVjdGVkUmVwaHJhc2luZ1N0eWxlLnNldCgobG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5yZXBocmFzZVN0eWxlTG9jYWxTdG9yYWdlS2V5KSBhcyBMTE1Xcml0aW5nU3R5bGUpID8/IG51bGwpO1xyXG5cclxuXHRcdGlmICh0aGlzLnNlbGVjdGVkUmVwaHJhc2luZ1N0eWxlKCkpIHtcclxuXHRcdFx0dGhpcy5yZXBocmFzZSh0aGlzLnNlbGVjdGVkUmVwaHJhc2luZ1N0eWxlKCkpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmVwaHJhc2Uoc3R5bGU6IExMTVdyaXRpbmdTdHlsZSk6IHZvaWQge1xyXG5cdFx0dGhpcy5yZXBocmFzZWRUZXh0LnNldCgnJyk7XHJcblx0XHR0aGlzLm1hcmtlZFJlcGhyYXNlZFRleHQuc2V0KCcnKTtcclxuXHJcblx0XHR0aGlzLnNldFNlbGVjdGVkV3JpdGluZ1N0eWxlKHN0eWxlKTtcclxuXHJcblx0XHR0aGlzLmlzTG9hZGluZy5zZXQodHJ1ZSk7XHJcblxyXG5cdFx0dGhpcy4jbGxtXHJcblx0XHRcdC5yZXBocmFzZSh7XHJcblx0XHRcdFx0dXNlQ2FzZTogTExNUmVwaHJhc2VVc2VDYXNlLkdlbmVyYWwsXHJcblx0XHRcdFx0bGFuZ3VhZ2U6IHRoaXMubGFuZ3VhZ2UoKSxcclxuXHRcdFx0XHRzdHlsZTogdGhpcy5zZWxlY3RlZFJlcGhyYXNpbmdTdHlsZSgpLFxyXG5cdFx0XHRcdHRleHQ6IHRoaXMudGV4dCgpLFxyXG5cdFx0XHR9KVxyXG5cdFx0XHQucGlwZShcclxuXHRcdFx0XHRmaW5hbGl6ZSgoKSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLmlzTG9hZGluZy5zZXQoZmFsc2UpO1xyXG5cdFx0XHRcdH0pXHJcblx0XHRcdClcclxuXHRcdFx0LnN1YnNjcmliZSh7XHJcblx0XHRcdFx0bmV4dDogKHRleHQpID0+IHtcclxuXHRcdFx0XHRcdHRoaXMucmVwaHJhc2VkVGV4dC5zZXQodGV4dCk7XHJcblx0XHRcdFx0XHR0aGlzLm1hcmtlZFJlcGhyYXNlZFRleHQuc2V0KG1hcmtlZC5wYXJzZSh0ZXh0KSBhcyBzdHJpbmcpO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdH0pO1xyXG5cdH1cclxuXHJcblx0Y29weVJlcGhyYXNlVGV4dCgpIHtcclxuXHRcdHRoaXMuI2NsaXBib2FyZC5jb3B5KHRoaXMucmVwaHJhc2VkVGV4dCgpKTtcclxuXHRcdHRoaXMuI2FsZXJ0cy5zdWNjZXNzKCdUTERfVFJBTlNMQVRFLlJFUEhSQVNFLkNPUElFRCcpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzZXRTZWxlY3RlZFdyaXRpbmdTdHlsZShzdHlsZTogTExNV3JpdGluZ1N0eWxlKTogdm9pZCB7XHJcblx0XHR0aGlzLnNlbGVjdGVkUmVwaHJhc2luZ1N0eWxlLnNldChzdHlsZSk7XHJcblxyXG5cdFx0bG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5yZXBocmFzZVN0eWxlTG9jYWxTdG9yYWdlS2V5LCBzdHlsZSk7XHJcblx0fVxyXG59XHJcbiIsIjxsaWItb3Blbi1jbG9zZS1idXR0b25cclxuXHRbbmdDbGFzcy5sdC1zbV09XCInbW9iaWxlJ1wiXHJcblx0Y2xhc3M9XCJyZXBocmFzZS1tZW51LWJ0blwiXHJcblx0I3N0YXRlPVwibWF0TWVudVRyaWdnZXJcIlxyXG5cdFttYXRNZW51VHJpZ2dlckZvcl09XCJyZXBocmFzZVN0eWxlc01lbnVcIlxyXG5cdFtpc09wZW5lZF09XCJzdGF0ZS5tZW51T3BlblwiXHJcblx0W2Rpc2FibGVkXT1cImRpc2FibGVkKClcIlxyXG4+XHJcblx0PHNwYW4gY2xhc3M9XCJyZXBocmFzZS10aXRsZVwiPnt7IFwiVExEX1RSQU5TTEFURS5SRVBIUkFTRS5USVRMRVwiIHwgdHJhbnNsYXRlIH19ICh7eyBzZWxlY3RlZFJlcGhyYXNpbmdTdHlsZSgpID8/IFwiVExEX1RSQU5TTEFURS5SRVBIUkFTRS5DSE9PU0VfTEFCRUxcIiB8IHRyYW5zbGF0ZSB9fSk8L3NwYW4+XHJcbjwvbGliLW9wZW4tY2xvc2UtYnV0dG9uPlxyXG5cclxuPG1hdC1tZW51ICNyZXBocmFzZVN0eWxlc01lbnU9XCJtYXRNZW51XCIgY2xhc3M9XCJyZXBocmFzZS1tZW51XCI+XHJcblx0QGZvciAoc3R5bGUgb2YgcmVwaHJhc2VTdHlsZXM7IHRyYWNrIHN0eWxlKSB7XHJcblx0PGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJyZXBocmFzZShzdHlsZSlcIj5cclxuXHRcdHt7IFwiVExEX1RSQU5TTEFURS5SRVBIUkFTRS5TVFlMRVMuXCIgKyAoc3R5bGUgfCB1cHBlcmNhc2UpIHwgdHJhbnNsYXRlIH19XHJcblx0PC9idXR0b24+XHJcblx0fVxyXG48L21hdC1tZW51PlxyXG5cclxuQGlmIChpc0xvYWRpbmcoKSkge1xyXG48cCBjbGFzcz1cInJlcGhyYXNpbmdcIj57eyBcIlRMRF9UUkFOU0xBVEUuUkVQSFJBU0UuTE9BRElOR1wiIHwgdHJhbnNsYXRlIH19PHNwYW4gY2xhc3M9XCJkb3QtbG9hZGluZ1wiPi4uLjwvc3Bhbj48L3A+XHJcbn0gQGlmKCFzZWxlY3RlZFJlcGhyYXNpbmdTdHlsZSgpKSB7XHJcbjxwIGNsYXNzPVwicmVwaHJhc2UtaGludFwiPnt7IFwiVExEX1RSQU5TTEFURS5SRVBIUkFTRS5ISU5UXCIgfCB0cmFuc2xhdGUgfX08L3A+XHJcbn1cclxuXHJcbjxwIFtpbm5lckhUTUxdPVwibWFya2VkUmVwaHJhc2VkVGV4dCgpXCI+PC9wPlxyXG5cclxuQGlmIChyZXBocmFzZWRUZXh0KCkpIHtcclxuPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gW25nQ2xhc3MubHQtc21dPVwiJ3JlcGhyYXNlLW1vYmlsZSdcIiBjbGFzcz1cInJlcGhyYXNlLWNvcHktYnRuXCIgKGNsaWNrKT1cImNvcHlSZXBocmFzZVRleHQoKVwiIFttYXRUb29sdGlwXT1cIidUT09MVElQUy5DT1BZJyB8IHRyYW5zbGF0ZVwiPlxyXG5cdDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIiBhcmlhLWhpZGRlbj1cImZhbHNlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInQVJJQV9MQUJFTFMuQ09QWScgfCB0cmFuc2xhdGVcIj4gY29udGVudF9jb3B5IDwvc3Bhbj5cclxuPC9idXR0b24+XHJcbn1cclxuIl19
95
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwaHJhc2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGxkLXRyYW5zbGF0ZS9zcmMvbGliL21vZHVsZXMvdGxkLXRleHQvY29tcG9uZW50cy9yZXBocmFzZS9yZXBocmFzZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bGQtdHJhbnNsYXRlL3NyYy9saWIvbW9kdWxlcy90bGQtdGV4dC9jb21wb25lbnRzL3JlcGhyYXNlL3JlcGhyYXNlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUscUJBQXFCLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDekcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMxRixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGdCQUFn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Q0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFeEMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVPLGlCQUFpQjtRQUN4QixlQUFlLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2xILENBQUM7SUFFTyxhQUFhO1FBQ3BCLGVBQWUsQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7d0dBM0VXLGlCQUFpQjs0RkFBakIsaUJBQWlCLDJjQzlCOUIsODVDQWdDQSxvZURkRSxZQUFZLDJGQUNaLGFBQWEsNnZCQUNiLHFCQUFxQixnTkFDckIsZUFBZSwyRkFDZixlQUFlLDJJQUNmLGFBQWEsOEJBQ2IsZ0JBQWdCLDRUQUNoQixnQkFBZ0I7OzRGQUtMLGlCQUFpQjtrQkFoQjdCLFNBQVM7K0JBQ0MsY0FBYyxjQUNaLElBQUksV0FDUDt3QkFDUixZQUFZO3dCQUNaLGFBQWE7d0JBQ2IscUJBQXFCO3dCQUNyQixlQUFlO3dCQUNmLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixnQkFBZ0I7d0JBQ2hCLGdCQUFnQjtxQkFDaEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgaW5wdXQsIE9uSW5pdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdE1lbnVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcclxuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IEFsZXJ0U2VydmljZSwgTExNQWN0aW9ucywgT3BlbkNsb3NlQnV0dG9uTW9kdWxlLCBQbGF1c2libGVIZWxwZXIgfSBmcm9tICdAdGlsZGUtbmxwL25neC1jb21tb24nO1xyXG5pbXBvcnQgeyBMTE1SZXBocmFzZVVzZUNhc2UsIExMTVNlcnZpY2UsIExMTVdyaXRpbmdTdHlsZSB9IGZyb20gJ0B0aWxkZS1ubHAvbmd4LXNlcnZpY2VzJztcclxuaW1wb3J0IHsgbWFya2VkIH0gZnJvbSAnbWFya2VkJztcclxuaW1wb3J0IHsgZmluYWxpemUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ2xpcGJvYXJkIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NsaXBib2FyZCc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBGbGV4TGF5b3V0TW9kdWxlIH0gZnJvbSAnQG5nYnJhY2tldC9uZ3gtbGF5b3V0JztcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAndGxkLXJlcGhyYXNlJyxcclxuXHRzdGFuZGFsb25lOiB0cnVlLFxyXG5cdGltcG9ydHM6IFtcclxuXHRcdENvbW1vbk1vZHVsZSxcclxuXHRcdE1hdE1lbnVNb2R1bGUsXHJcblx0XHRPcGVuQ2xvc2VCdXR0b25Nb2R1bGUsXHJcblx0XHRUcmFuc2xhdGVNb2R1bGUsXHJcblx0XHRNYXRCdXR0b25Nb2R1bGUsXHJcblx0XHRNYXRJY29uTW9kdWxlLFxyXG5cdFx0TWF0VG9vbHRpcE1vZHVsZSxcclxuXHRcdEZsZXhMYXlvdXRNb2R1bGUsXHJcblx0XSxcclxuXHR0ZW1wbGF0ZVVybDogJy4vcmVwaHJhc2UuY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsOiAnLi9yZXBocmFzZS5jb21wb25lbnQuc2NzcycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZXBocmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblx0dGV4dCA9IGlucHV0KCcnKTtcclxuXHRsYW5ndWFnZSA9IGlucHV0KCcnKTtcclxuXHRkaXNhYmxlZCA9IGlucHV0KGZhbHNlKTtcclxuXHJcblx0aXNMb2FkaW5nID0gc2lnbmFsKGZhbHNlKTtcclxuXHJcblx0cmVhZG9ubHkgI2xsbSA9IGluamVjdChMTE1TZXJ2aWNlKTtcclxuXHRyZWFkb25seSAjY2xpcGJvYXJkID0gaW5qZWN0KENsaXBib2FyZCk7XHJcblx0cmVhZG9ubHkgI2FsZXJ0cyA9IGluamVjdChBbGVydFNlcnZpY2UpO1xyXG5cclxuXHRyZWFkb25seSByZXBocmFzZVN0eWxlTG9jYWxTdG9yYWdlS2V5ID0gJ1JFUEhSQVNFX1NUWUxFJztcclxuXHJcblx0cmVwaHJhc2VTdHlsZXM6IExMTVdyaXRpbmdTdHlsZVtdID0gT2JqZWN0LnZhbHVlcyhMTE1Xcml0aW5nU3R5bGUpO1xyXG5cdHNlbGVjdGVkUmVwaHJhc2luZ1N0eWxlID0gc2lnbmFsPExMTVdyaXRpbmdTdHlsZSB8IG51bGw+KG51bGwpO1xyXG5cclxuXHRyZXBocmFzZWRUZXh0ID0gc2lnbmFsKCcnKTtcclxuXHRtYXJrZWRSZXBocmFzZWRUZXh0ID0gc2lnbmFsKCcnKTtcclxuXHJcblx0bmdPbkluaXQoKTogdm9pZCB7XHJcblx0XHR0aGlzLnNlbGVjdGVkUmVwaHJhc2luZ1N0eWxlLnNldCgobG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5yZXBocmFzZVN0eWxlTG9jYWxTdG9yYWdlS2V5KSBhcyBMTE1Xcml0aW5nU3R5bGUpID8/IG51bGwpO1xyXG5cclxuXHRcdGlmICh0aGlzLnNlbGVjdGVkUmVwaHJhc2luZ1N0eWxlKCkpIHtcclxuXHRcdFx0dGhpcy5yZXBocmFzZSh0aGlzLnNlbGVjdGVkUmVwaHJhc2luZ1N0eWxlKCkpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmVwaHJhc2Uoc3R5bGU6IExMTVdyaXRpbmdTdHlsZSk6IHZvaWQge1xyXG5cdFx0dGhpcy5yZXBocmFzZWRUZXh0LnNldCgnJyk7XHJcblx0XHR0aGlzLm1hcmtlZFJlcGhyYXNlZFRleHQuc2V0KCcnKTtcclxuXHJcblx0XHR0aGlzLnNldFNlbGVjdGVkV3JpdGluZ1N0eWxlKHN0eWxlKTtcclxuXHJcblx0XHR0aGlzLmlzTG9hZGluZy5zZXQodHJ1ZSk7XHJcblxyXG5cdFx0dGhpcy5yZXBocmFzZVBsYXVzaWJsZSgpO1xyXG5cclxuXHRcdHRoaXMuI2xsbVxyXG5cdFx0XHQucmVwaHJhc2Uoe1xyXG5cdFx0XHRcdHVzZUNhc2U6IExMTVJlcGhyYXNlVXNlQ2FzZS5HZW5lcmFsLFxyXG5cdFx0XHRcdGxhbmd1YWdlOiB0aGlzLmxhbmd1YWdlKCksXHJcblx0XHRcdFx0c3R5bGU6IHRoaXMuc2VsZWN0ZWRSZXBocmFzaW5nU3R5bGUoKSxcclxuXHRcdFx0XHR0ZXh0OiB0aGlzLnRleHQoKSxcclxuXHRcdFx0fSlcclxuXHRcdFx0LnBpcGUoXHJcblx0XHRcdFx0ZmluYWxpemUoKCkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5pc0xvYWRpbmcuc2V0KGZhbHNlKTtcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHQpXHJcblx0XHRcdC5zdWJzY3JpYmUoe1xyXG5cdFx0XHRcdG5leHQ6ICh0ZXh0KSA9PiB7XHJcblx0XHRcdFx0XHR0aGlzLnJlcGhyYXNlZFRleHQuc2V0KHRleHQpO1xyXG5cdFx0XHRcdFx0dGhpcy5tYXJrZWRSZXBocmFzZWRUZXh0LnNldChtYXJrZWQucGFyc2UodGV4dCkgYXMgc3RyaW5nKTtcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHR9KTtcclxuXHR9XHJcblxyXG5cdGNvcHlSZXBocmFzZVRleHQoKSB7XHJcblx0XHR0aGlzLiNjbGlwYm9hcmQuY29weSh0aGlzLnJlcGhyYXNlZFRleHQoKSk7XHJcblx0XHR0aGlzLiNhbGVydHMuc3VjY2VzcygnVExEX1RSQU5TTEFURS5SRVBIUkFTRS5DT1BJRUQnKTtcclxuXHRcdHRoaXMuY29weVBsYXVzaWJsZSgpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBzZXRTZWxlY3RlZFdyaXRpbmdTdHlsZShzdHlsZTogTExNV3JpdGluZ1N0eWxlKTogdm9pZCB7XHJcblx0XHR0aGlzLnNlbGVjdGVkUmVwaHJhc2luZ1N0eWxlLnNldChzdHlsZSk7XHJcblxyXG5cdFx0bG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5yZXBocmFzZVN0eWxlTG9jYWxTdG9yYWdlS2V5LCBzdHlsZSk7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHJlcGhyYXNlUGxhdXNpYmxlKCk6IHZvaWQge1xyXG5cdFx0UGxhdXNpYmxlSGVscGVyLmN1c3RvbUV2ZW50KExMTUFjdGlvbnMuUkVQSFJBU0UudG9Mb3dlckNhc2UoKSwgeyB3cml0aW5nU3R5bGU6IHRoaXMuc2VsZWN0ZWRSZXBocmFzaW5nU3R5bGUoKSB9KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY29weVBsYXVzaWJsZSgpOiB2b2lkIHtcclxuXHRcdFBsYXVzaWJsZUhlbHBlci5jdXN0b21FdmVudChMTE1BY3Rpb25zLlJFUEhSQVNFLnRvTG93ZXJDYXNlKCksIHsgYWN0aW9uOiAnY29weScgfSk7XHJcblx0fVxyXG59XHJcbiIsIjxsaWItb3Blbi1jbG9zZS1idXR0b25cclxuXHRbbmdDbGFzcy5sdC1zbV09XCInbW9iaWxlJ1wiXHJcblx0Y2xhc3M9XCJyZXBocmFzZS1tZW51LWJ0blwiXHJcblx0I3N0YXRlPVwibWF0TWVudVRyaWdnZXJcIlxyXG5cdFttYXRNZW51VHJpZ2dlckZvcl09XCJyZXBocmFzZVN0eWxlc01lbnVcIlxyXG5cdFtpc09wZW5lZF09XCJzdGF0ZS5tZW51T3BlblwiXHJcblx0W2Rpc2FibGVkXT1cImRpc2FibGVkKClcIlxyXG4+XHJcblx0PHNwYW4gY2xhc3M9XCJyZXBocmFzZS10aXRsZVwiPnt7IFwiVExEX1RSQU5TTEFURS5SRVBIUkFTRS5USVRMRVwiIHwgdHJhbnNsYXRlIH19ICh7eyBzZWxlY3RlZFJlcGhyYXNpbmdTdHlsZSgpID8/IFwiVExEX1RSQU5TTEFURS5SRVBIUkFTRS5DSE9PU0VfTEFCRUxcIiB8IHRyYW5zbGF0ZSB9fSk8L3NwYW4+XHJcbjwvbGliLW9wZW4tY2xvc2UtYnV0dG9uPlxyXG5cclxuPG1hdC1tZW51ICNyZXBocmFzZVN0eWxlc01lbnU9XCJtYXRNZW51XCIgY2xhc3M9XCJyZXBocmFzZS1tZW51XCI+XHJcblx0QGZvciAoc3R5bGUgb2YgcmVwaHJhc2VTdHlsZXM7IHRyYWNrIHN0eWxlKSB7XHJcblx0PGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJyZXBocmFzZShzdHlsZSlcIj5cclxuXHRcdHt7IFwiVExEX1RSQU5TTEFURS5SRVBIUkFTRS5TVFlMRVMuXCIgKyAoc3R5bGUgfCB1cHBlcmNhc2UpIHwgdHJhbnNsYXRlIH19XHJcblx0PC9idXR0b24+XHJcblx0fVxyXG48L21hdC1tZW51PlxyXG5cclxuQGlmIChpc0xvYWRpbmcoKSkge1xyXG48cCBjbGFzcz1cInJlcGhyYXNpbmdcIj57eyBcIlRMRF9UUkFOU0xBVEUuUkVQSFJBU0UuTE9BRElOR1wiIHwgdHJhbnNsYXRlIH19PHNwYW4gY2xhc3M9XCJkb3QtbG9hZGluZ1wiPi4uLjwvc3Bhbj48L3A+XHJcbn0gQGlmKCFzZWxlY3RlZFJlcGhyYXNpbmdTdHlsZSgpKSB7XHJcbjxwIGNsYXNzPVwicmVwaHJhc2UtaGludFwiPnt7IFwiVExEX1RSQU5TTEFURS5SRVBIUkFTRS5ISU5UXCIgfCB0cmFuc2xhdGUgfX08L3A+XHJcbn1cclxuXHJcbjxwIFtpbm5lckhUTUxdPVwibWFya2VkUmVwaHJhc2VkVGV4dCgpXCI+PC9wPlxyXG5cclxuQGlmIChyZXBocmFzZWRUZXh0KCkpIHtcclxuPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gW25nQ2xhc3MubHQtc21dPVwiJ3JlcGhyYXNlLW1vYmlsZSdcIiBjbGFzcz1cInJlcGhyYXNlLWNvcHktYnRuXCIgKGNsaWNrKT1cImNvcHlSZXBocmFzZVRleHQoKVwiIFttYXRUb29sdGlwXT1cIidUT09MVElQUy5DT1BZJyB8IHRyYW5zbGF0ZVwiPlxyXG5cdDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIiBhcmlhLWhpZGRlbj1cImZhbHNlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInQVJJQV9MQUJFTFMuQ09QWScgfCB0cmFuc2xhdGVcIj4gY29udGVudF9jb3B5IDwvc3Bhbj5cclxuPC9idXR0b24+XHJcbn1cclxuIl19
@@ -2,7 +2,7 @@ import { Component, computed, EventEmitter, Input, Output, signal, ViewChild } f
2
2
  import { Subject } from 'rxjs';
3
3
  import { distinctUntilChanged, finalize, takeUntil } from 'rxjs/operators';
4
4
  import { AudioErrorCase } from '../../../tld-audio/models';
5
- import { ConversionHelper, HashHelper, ResolutionHelper } from '@tilde-nlp/ngx-common';
5
+ import { ConversionHelper, HashHelper, PlausibleHelper, ResolutionHelper, LLMActions } from '@tilde-nlp/ngx-common';
6
6
  import { LLMSummaryUseCase } from '@tilde-nlp/ngx-services';
7
7
  import { marked } from 'marked';
8
8
  import * as i0 from "@angular/core";
@@ -218,6 +218,7 @@ export class TldTranslateTextComponent {
218
218
  copySummarizedText() {
219
219
  this.clipboard.copy(this.summarizedText);
220
220
  this.alerts.success("TLD_TRANSLATE.SUMMARY.COPIED");
221
+ this.summaryCopyPlausible();
221
222
  }
222
223
  refresh() {
223
224
  this.translateTextService.onTranslateButtonClick();
@@ -242,6 +243,7 @@ export class TldTranslateTextComponent {
242
243
  this.markedSummarizedText = marked.parse(response);
243
244
  },
244
245
  });
246
+ this.summaryPlausible();
245
247
  }
246
248
  switchFocusFromCopy(event) {
247
249
  const copyMessageCloseButton = document.getElementById(this.copyMessageCloseButtonId)?.getElementsByTagName("button")?.item(0);
@@ -327,6 +329,12 @@ export class TldTranslateTextComponent {
327
329
  const uploadButton = document.querySelector('.upload-button');
328
330
  uploadButton.click();
329
331
  }
332
+ summaryPlausible() {
333
+ PlausibleHelper.customEvent(LLMActions.SUMMARY.toLowerCase(), { action: 'summary' });
334
+ }
335
+ summaryCopyPlausible() {
336
+ PlausibleHelper.customEvent(LLMActions.SUMMARY.toLowerCase(), { action: 'copy' });
337
+ }
330
338
  scroll(elementClassName) {
331
339
  setTimeout(() => {
332
340
  const container = document.querySelector('.translated-source');
@@ -354,4 +362,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
354
362
  }], onFileChange: [{
355
363
  type: Output
356
364
  }] } });
357
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxkLXRyYW5zbGF0ZS10ZXh0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RsZC10cmFuc2xhdGUvc3JjL2xpYi9tb2R1bGVzL3RsZC10ZXh0L2NvbXBvbmVudHMvdGxkLXRyYW5zbGF0ZS10ZXh0L3RsZC10cmFuc2xhdGUtdGV4dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bGQtdHJhbnNsYXRlL3NyYy9saWIvbW9kdWxlcy90bGQtdGV4dC9jb21wb25lbnRzL3RsZC10cmFuc2xhdGUtdGV4dC90bGQtdHJhbnNsYXRlLXRleHQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkgsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxjQUFjLEVBQTZCLE1BQU0sMkJBQTJCLENBQUM7QUFRdEYsT0FBTyxFQUE0QixnQkFBZ0IsRUFBbUIsVUFBVSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFbEksT0FBTyxFQUFjLGlCQUFpQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTaEMsTUFBTSxPQUFPLHlCQUF5QjtJQTRHakI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQXJIVyxlQUFl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OzRGQUF6Qix5QkFBeUIsK1dDeEJ0Qyw2eFRBb01BOzs0RkQ1S2EseUJBQXlCO2tCQUxyQyxTQUFTOytCQUNFLG9CQUFvQjt5YUFLQSxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQjtnQkFDTixnQkFBZ0I7c0JBQXJDLFNBQVM7dUJBQUMsU0FBUztnQkFDWCxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0ksWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENsaXBib2FyZCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jbGlwYm9hcmQnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBzaWduYWwsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaW5hbGl6ZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBBdWRpb0Vycm9yQ2FzZSwgSVRyYW5zY3JpcHRpb25VcGRhdGVNb2RlbCB9IGZyb20gJy4uLy4uLy4uL3RsZC1hdWRpby9tb2RlbHMnO1xyXG5pbXBvcnQgeyBJRGljdGF0ZUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi8uLi8uLi90bGQtYXVkaW8vbW9kZWxzL2RpY3RhdGUtY29uZmlndXJhdGlvbmkubW9kZWwnO1xyXG5pbXBvcnQgeyBBdWRpb1JlY29yZFNlcnZpY2UsIFRsZFZvaWNlSW5wdXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vdGxkLWF1ZGlvL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgVGxkVHJhbnNsYXRlU3lzdGVtTWFuYWdlbWVudFNlcnZpY2UsIFRsZFRyYW5zbGF0ZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi90bGQtY29tbW9uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgVGxkU2Nyb2xsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3RsZC1jb21tb24vc2VydmljZXMvc2Nyb2xsL3RsZC1zY3JvbGwuc2VydmljZSc7XHJcbmltcG9ydCB7IFRsZFRyYW5zbGF0ZUZpbGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vdGxkLWRvY3VtZW50L3NlcnZpY2VzJztcclxuaW1wb3J0IHsgVGxkVHJhbnNsYXRlVGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90bGQtdHJhbnNsYXRlLXRleHQuc2VydmljZSc7XHJcbmltcG9ydCB7IFRsZFRyYW5zbGF0ZVNvdXJjZUNvbXBvbmVudCB9IGZyb20gJy4uL3RsZC10cmFuc2xhdGUtc291cmNlL3RsZC10cmFuc2xhdGUtc291cmNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFjdGl2ZURhdGEsIEFsZXJ0U2VydmljZSwgQ29udmVyc2lvbkhlbHBlciwgRmlsZVVwbG9hZEVycm9yLCBIYXNoSGVscGVyLCBSZXNvbHV0aW9uSGVscGVyIH0gZnJvbSAnQHRpbGRlLW5scC9uZ3gtY29tbW9uJztcclxuaW1wb3J0IHsgVGxkRGljdGF0ZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3RsZC1hdWRpbyc7XHJcbmltcG9ydCB7IExMTVNlcnZpY2UsIExMTVN1bW1hcnlVc2VDYXNlIH0gZnJvbSAnQHRpbGRlLW5scC9uZ3gtc2VydmljZXMnO1xyXG5pbXBvcnQgeyBtYXJrZWQgfSBmcm9tICdtYXJrZWQnO1xyXG5pbXBvcnQgeyBLZXljbG9ha1NlcnZpY2UgfSBmcm9tICdrZXljbG9hay1hbmd1bGFyJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3RsZC10cmFuc2xhdGUtdGV4dCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RsZC10cmFuc2xhdGUtdGV4dC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGxkLXRyYW5zbGF0ZS10ZXh0LmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIFRsZFRyYW5zbGF0ZVRleHRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZChcInNvdXJjZUNvbXBvbmVudFwiKSBzb3VyY2VDb21wb25lbnQ6IFRsZFRyYW5zbGF0ZVNvdXJjZUNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwiZGljdGF0ZVwiKSBkaWN0YXRlQ29tcG9uZW50OiBUbGREaWN0YXRlQ29tcG9uZW50O1xyXG4gIEBJbnB1dCgpIGZpbGVQcmV2aWV3UHJvZ3Jlc3M6IG51bWJlcjtcclxuICBAT3V0cHV0KCkgb25GaWxlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RmlsZVtdPiA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsZVtdPigpO1xyXG5cclxuICBhY3RpdmVEYXRhID0gc2lnbmFsPEFjdGl2ZURhdGEgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XHJcbiAgZ2V0IHN5c3RlbUlkKCkgeyByZXR1cm4gdGhpcy5hY3RpdmVEYXRhKCk/LnN5c3RlbUlkOyB9O1xyXG4gIC8vcGFyYW1zIGZyb20gY29uZmlnIHNlcnZpY2UuXHJcbiAgZ2V0IGFsbG93ZWRGaWxlVHlwZXMoKTogc3RyaW5nW10geyByZXR1cm4gdGhpcy5jb25maWcuZmlsZUNvbmZpZy5hbGxvd2VkRmlsZVR5cGVzOyB9O1xyXG4gIGdldCBleHRlbmRlZEZpbGVUeXBlcygpOiBzdHJpbmdbXSB7IHJldHVybiB0aGlzLmNvbmZpZy5maWxlQ29uZmlnLmV4dGVuZGVkRmlsZVR5cGVzOyB9O1xyXG4gIGdldCBhcHBJZCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5jb25maWcuY29yZUNvbmZpZy5hcHBJZDsgfTtcclxuICBnZXQgaGlnaGxpZ2h0KCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5jb25maWcudGV4dENvbmZpZy5oaWdobGlnaHQ7IH07XHJcbiAgZ2V0IGZpbGVVcGxvYWQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmNvbmZpZy5maWxlQ29uZmlnLmZpbGVVcGxvYWQgJiYgIXRoaXMuaXNNb2JpbGUgJiYgISh0aGlzLmlzRGljdGF0aW5nIHx8IHRoaXMuYXVkaW9TZXJ2aWNlPy5pc1JlY29yZGluZyB8fCB0aGlzLnZvaWNlSW5wdXRTZXJ2aWNlLmlzUHJvY2Vzc2luZykgJiYgIXRoaXMuc291cmNlPy5sZW5ndGggfTtcclxuICBnZXQgaXNBdXRoKCkgeyByZXR1cm4gdGhpcy5jb25maWcuY29yZUNvbmZpZy5pc0F1dGg7IH07XHJcbiAgZ2V0IG1heEZpbGVVcGxvYWRTaXplKCk6IG51bWJlciB7IHJldHVybiB0aGlzLmNvbmZpZy5maWxlQ29uZmlnLm1heFNpemU7IH07XHJcbiAgZ2V0IG11bHRpcGxlRmlsZXMoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmNvbmZpZy5maWxlQ29uZmlnLm51bWJlck9mRmlsZXNBbGxvd2VkID4gMTsgfTtcclxuICBnZXQgdXBkYXRlVHJhbnNsYXRpb25VcmwoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuY29uZmlnLnRleHRDb25maWcudXBkYXRlVHJhbnNsYXRpb25Vcmw7IH07XHJcbiAgZ2V0IGFsbG93V2Vic2l0ZVRyYW5zbGF0aW9uKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5jb25maWcudGV4dENvbmZpZy5hbGxvd1dlYnNpdGVUcmFuc2xhdGlvbjsgfTtcclxuICBnZXQgYXV0b1JlZGlyZWN0VG9XZWJUcmFuc2xhdGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmNvbmZpZy50ZXh0Q29uZmlnLmF1dG9SZWRpcmVjdFRvV2ViVHJhbnNsYXRlOyB9O1xyXG4gIGdldCB3ZWJXaWRnZXRSZWRpcmVjdFVybFByZWZpeCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5jb25maWcudGV4dENvbmZpZy53ZWJXaWRnZXRSZWRpcmVjdFVybFByZWZpeDsgfTtcclxuICBnZXQgd2ViV2lkZ2V0UmVkaXJlY3RVcmxQb3NmaXgoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuY29uZmlnLnRleHRDb25maWcud2ViV2lkZ2V0UmVkaXJlY3RVcmxQb3NmaXg7IH07XHJcbiAgZ2V0IHRleHRhcmVhRGlzYWJsZWQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmF1ZGlvU2VydmljZS5pc1JlY29yZGluZyB8fCB0aGlzLnZvaWNlSW5wdXRTZXJ2aWNlLmlzUHJvY2Vzc2luZyB8fCB0aGlzLmlzRGljdGF0aW5nIHx8IHRoaXMudGxkU3lzdGVtLm5vU3lzdGVtc0Vycm9yIH07XHJcbiAgZ2V0IGZpbGVVcGxvYWREaXNhYmxlZCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMudGxkU3lzdGVtLm5vU3lzdGVtc0Vycm9yIH07XHJcbiAgZ2V0IGlzRGljdGF0aW5nKCkgeyByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5pc0RpY3RhdGluZzsgfTtcclxuICBnZXQgc291cmNlTGFuZ3VhZ2UoKSB7IHJldHVybiB0aGlzLmFjdGl2ZURhdGEoKT8uc291cmNlTGFuZy5sYW5nOyB9XHJcbiAgZ2V0IHRhcmdldExhbmd1YWdlKCkgeyByZXR1cm4gdGhpcy5hY3RpdmVEYXRhKCk/LnRhcmdldExhbmcubGFuZzsgfVxyXG4gIGdldCBoYXNUcmFuc2xhdGVkUGFyYWdyYXBocygpIHsgcmV0dXJuIHRoaXMudGFyZ2V0UGFyYWdyYXBocz8ubGVuZ3RoID4gMCB9XHJcbiAgZ2V0IGlzRW1wdHlUYXJnZXQoKSB7IHJldHVybiAhdGhpcy5oYXNUcmFuc2xhdGVkUGFyYWdyYXBocyAmJiAhdGhpcy51cmxUb1RyYW5zbGF0ZSAmJiAhdGhpcy5oYXNEaWN0aW9uYXJ5IH1cclxuICBnZXQgc2hvd1RhcmdldFBsYWNlaG9sZGVyKCkgeyByZXR1cm4gdGhpcy5jb25maWcudGV4dENvbmZpZy5zaG93VGFyZ2V0UGxhY2Vob2xkZXIgfVxyXG4gIGdldCBzaG93RXh0ZW5zaW9uUG9wdXAoKSB7IHJldHVybiB0aGlzLmNvbmZpZy50ZXh0Q29uZmlnLnNob3dFeHRlbnNpb25Qb3B1cCAmJiB0aGlzLnZpc2libGVFeHRlbnNpb25Db3VudCA8IHRoaXMuYWxsb3dlZEZpbGVUeXBlcy5sZW5ndGggfVxyXG4gIGdldCB2aXNpYmxlRXh0ZW5zaW9uQ291bnQoKSB7IHJldHVybiB0aGlzLmNvbmZpZy50ZXh0Q29uZmlnLnZpc2libGVFeHRlbnNpb25Db3VudCB9O1xyXG4gIGdldCB0ZXh0VG9TcGVlY2hUYXJnZXRTZXR0aW5ncygpIHsgcmV0dXJuIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UudGV4dFRvU3BlZWNoVGFyZ2V0U2V0dGluZ3MgfTtcclxuICBnZXQgdGV4dFRvU3BlZWNoU291cmNlU2V0dGluZ3MoKSB7IHJldHVybiB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnRleHRUb1NwZWVjaFNvdXJjZVNldHRpbmdzIH07XHJcbiAgZ2V0IHVwbG9hZEljb25OYW1lKCkgeyByZXR1cm4gdGhpcy5jb25maWcuY29yZUNvbmZpZy51cGxvYWRJY29uTmFtZSB9O1xyXG4gIGdldCBpc0xsbUVuYWJsZWQoKSB7IHJldHVybiB0aGlzLmNvbmZpZy5sbG1Db25maWcuaXNFbmFibGVkIH07XHJcblxyXG4gIGF1ZGlvSW5wdXRWaXNpYmxlID0gY29tcHV0ZWQoKCkgPT4geyByZXR1cm4gdGhpcy5jb25maWcuc3BlZWNoQ29uZmlnLm9ubGluZUFzcj8uZW5hYmxlZCAmJiB0aGlzLm9ubGluZUFzclN5c3RlbUlkKCk7IH0pO1xyXG4gIHRhcmdldFNlbnRlbmNlU2VsZWN0OiBib29sZWFuID0gdHJ1ZTtcclxuICBnZXQgdXJsVG9UcmFuc2xhdGUoKSB7IHJldHVybiB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnVybFRvVHJhbnNsYXRlOyB9O1xyXG5cclxuICBvbmxpbmVBc3JTeXN0ZW1JZCA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGNvbnN0IG9ubGluZVN5c3RlbXMgPSB0aGlzLnRsZFN5c3RlbS5vbmxpbmVBU3JTeXN0ZW1zKCk7XHJcbiAgICBjb25zdCBhY3RpdmUgPSB0aGlzLmFjdGl2ZURhdGEoKTtcclxuXHJcbiAgICBpZiAoIXRoaXMuY29uZmlnLnNwZWVjaENvbmZpZy5vbmxpbmVBc3I/LmVuYWJsZWQgJiYgb25saW5lU3lzdGVtcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9ubGluZVN5c3RlbXMuZmluZCgob25saW5lU3lzdGVtKSA9PiBvbmxpbmVTeXN0ZW0ubGFuZ3VhZ2UgPT09IGFjdGl2ZT8uc291cmNlTGFuZy5sYW5nKT8uc3lzdGVtSWQ7XHJcbiAgfSk7XHJcblxyXG4gIGFsbG93ZWRUeXBlc1dpdGhvdXREb3RzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICByZWFkb25seSBjb3B5TWVzc2FnZUlkID0gXCJ0bGQtY29weS1zdWNjZXNzXCI7XHJcbiAgcmVhZG9ubHkgY29weU1lc3NhZ2VDbG9zZUJ1dHRvbklkID0gXCJ0bGQtY29weS1zdWNjZXNzLWNsb3NlXCI7XHJcbiAgcmVhZG9ubHkgY29weUJ1dHRvbklkID0gXCJ0bGQtY29weS10by1jbGlwYm9hcmRcIjtcclxuXHJcbiAgZ2V0IHRyYW5zbGF0ZWRUZXh0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS50cmFuc2xhdGVkVGV4dDtcclxuICB9XHJcblxyXG4gIGdldCBmaXJzdFBhcmFncmFwaFRyYW5zbGF0ZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5maXJzdFBhcmFncmFwaFRyYW5zbGF0ZWQ7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNUcmFuc2xhdGluZygpIHtcclxuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLmlzVHJhbnNsYXRpbmc7XHJcbiAgfVxyXG5cclxuICBnZXQgdHJhbnNsYXRpb25FcnJvcigpIHtcclxuICAgIHJldHVybiB0aGlzLnNvdXJjZSAmJiAhdGhpcy5pc1RyYW5zbGF0aW5nO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzVGV4dFN1bW1hcml6YWJsZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnNvdXJjZVRleHQ/Lmxlbmd0aCA+IDMwMDtcclxuICB9XHJcblxyXG4gIGdldCBoYXNEaWN0aW9uYXJ5KCkgeyByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5oYXNEaWN0aW9uYXJ5OyB9XHJcbiAgZ2V0IGRpY3Rpb25hcnlFbnRyeSgpIHsgcmV0dXJuIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UuZGljdGlvbmFyeUVudHJ5OyB9XHJcbiAgZ2V0IHNvdXJjZSgpIHsgcmV0dXJuIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2Uuc291cmNlVGV4dDsgfVxyXG4gIGdldCB0cmFuc2xhdGVVcmxSZWRpcmVjdCgpIHsgcmV0dXJuIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UudHJhbnNsYXRlVXJsUmVkaXJlY3Q7IH1cclxuICBnZXQgc2hvd1Byb2dyZXNzSW5kaWNhdG9yKCkgeyByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5zaG91bGRTaG93UHJvZ3Jlc3NJbmRpY2F0b3I7IH1cclxuICBnZXQgcGFyYWdyYXBocygpIHsgcmV0dXJuIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UucGFyYWdyYXBoczsgfTtcclxuICBnZXQgc291cmNlUGFyYWdyYXBocygpIHsgcmV0dXJuIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2Uuc291cmNlUGFyYWdyYXBoczsgfVxyXG4gIGdldCB0YXJnZXRQYXJhZ3JhcGhzKCkgeyByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS50YXJnZXRQYXJhZ3JhcGhzOyB9XHJcblxyXG4gIGdldCB0YXJnZXRXcmFwcGVyT3ZlcmZsb3coKSB7XHJcbiAgICBjb25zdCB0YXJnZXRXcmFwcGVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnRhcmdldC1tYWluJyk7XHJcbiAgICBjb25zdCB0YXJnZXRXcmFwcGVyT3ZlcmZsb3cgPSB0YXJnZXRXcmFwcGVyLnNjcm9sbEhlaWdodCA+IHRhcmdldFdyYXBwZXIuY2xpZW50SGVpZ2h0O1xyXG4gICAgcmV0dXJuIHRhcmdldFdyYXBwZXJPdmVyZmxvdztcclxuICB9XHJcblxyXG4gIGRpY3RhdGVDb25maWc6IElEaWN0YXRlQ29uZmlndXJhdGlvbjtcclxuICB2aXNpYmxlRXh0ZW5zaW9uczogc3RyaW5nO1xyXG4gIG1heFNpemVNQjogbnVtYmVyO1xyXG5cclxuICBpc1JlcGhyYXNlQWN0aXZlITogYm9vbGVhbjtcclxuICBpc1N1bW1hcmF6aW5nITogYm9vbGVhbjtcclxuICBzdW1tYXJpemVkVGV4dCE6IHN0cmluZztcclxuICBtYXJrZWRTdW1tYXJpemVkVGV4dCE6IHN0cmluZztcclxuICBzdW1tYXJpemVGZWF0dXJlTG9jYWxTdG9yYWdlS2V5ITogc3RyaW5nO1xyXG4gIHJlcGhyYXNlRmVhdHVyZUxvY2FsU3RvcmFnZUtleSE6IHN0cmluZztcclxuICBpc01vYmlsZSE6IGJvb2xlYW47XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlVGV4dFNlcnZpY2U6IFRsZFRyYW5zbGF0ZVRleHRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjbGlwYm9hcmQ6IENsaXBib2FyZCxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWxlcnRzOiBBbGVydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogVGxkVHJhbnNsYXRlQ29uZmlnU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGxkU2Nyb2xsU2VydmljZTogVGxkU2Nyb2xsU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGxkU3lzdGVtOiBUbGRUcmFuc2xhdGVTeXN0ZW1NYW5hZ2VtZW50U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXVkaW9TZXJ2aWNlOiBBdWRpb1JlY29yZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHZvaWNlSW5wdXRTZXJ2aWNlOiBUbGRWb2ljZUlucHV0U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZmlsZVNlcnZpY2U6IFRsZFRyYW5zbGF0ZUZpbGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBsbG1TZXJ2aWNlOiBMTE1TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBrZXljbG9hazogS2V5Y2xvYWtTZXJ2aWNlXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzTW9iaWxlID0gUmVzb2x1dGlvbkhlbHBlci5pc01vYmlsZVJlcygpO1xyXG4gICAgXHJcbiAgICB0aGlzLnN1bW1hcml6ZUZlYXR1cmVMb2NhbFN0b3JhZ2VLZXkgPSB0aGlzLmtleWNsb2FrLmdldEtleWNsb2FrSW5zdGFuY2UoKT8udG9rZW5QYXJzZWQgPyBgc3VtbWFyaXplRmVhdHVyZURpYWxvZ1Nob3duXyR7SGFzaEhlbHBlci5oYXNoU3RyaW5nKHRoaXMua2V5Y2xvYWsuZ2V0S2V5Y2xvYWtJbnN0YW5jZSgpLnRva2VuUGFyc2VkLmVtYWlsKX1gIDogJ3N1bW1hcml6ZUZlYXR1cmVEaWFsb2dTaG93bic7XHJcbiAgICB0aGlzLnJlcGhyYXNlRmVhdHVyZUxvY2FsU3RvcmFnZUtleSA9IHRoaXMua2V5Y2xvYWsuZ2V0S2V5Y2xvYWtJbnN0YW5jZSgpPy50b2tlblBhcnNlZCA/IGByZXBocmFzZUZlYXR1cmVEaWFsb2dTaG93bl8ke0hhc2hIZWxwZXIuaGFzaFN0cmluZyh0aGlzLmtleWNsb2FrLmdldEtleWNsb2FrSW5zdGFuY2UoKS50b2tlblBhcnNlZC5lbWFpbCl9YCA6ICdyZXBocmFzZUZlYXR1cmVEaWFsb2dTaG93bic7XHJcblxyXG4gICAgdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5saXN0ZW5PbkNoYW5nZXMoKTtcclxuICAgIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2Uuc291cmNlQ2hhbmdlLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuY2xlYXJTdW1tYXJpemUoKTtcclxuICAgICAgdGhpcy5pc1JlcGhyYXNlQWN0aXZlID0gZmFsc2U7XHJcbiAgICB9KVxyXG4gICAgdGhpcy5kaWN0YXRlQ29uZmlnID0ge1xyXG4gICAgICBtYXhMZW5ndGg6IHRoaXMuY29uZmlnLnNwZWVjaENvbmZpZz8ub25saW5lQXNyPy5tYXhpbXVtUmVjb3JkVGltZSxcclxuICAgICAgYXBpVXJsOiB0aGlzLmNvbmZpZy5zcGVlY2hDb25maWcub25saW5lQXNyPy51cmwsXHJcbiAgICAgIGFwaUtleTogdGhpcy5jb25maWcuc3BlZWNoQ29uZmlnLmFwaUtleVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudmlzaWJsZUV4dGVuc2lvbnMgPSB0aGlzLmFsbG93ZWRGaWxlVHlwZXMuc2xpY2UoMCwgdGhpcy52aXNpYmxlRXh0ZW5zaW9uQ291bnQpLmpvaW4oXCIsIFwiKTtcclxuICAgIHRoaXMuYWxsb3dlZEZpbGVUeXBlcy5mb3JFYWNoKChlbCkgPT4gdGhpcy5hbGxvd2VkVHlwZXNXaXRob3V0RG90cy5wdXNoKGVsLnJlcGxhY2UoJy4nLCAnJykpKTtcclxuXHJcbiAgICB0aGlzLm1heFNpemVNQiA9IENvbnZlcnNpb25IZWxwZXIuYnl0ZXNUb01iKHRoaXMuY29uZmlnLmZpbGVDb25maWcubWF4U2l6ZSk7XHJcblxyXG4gICAgdGhpcy50bGRTeXN0ZW0uZ2V0QWN0aXZlRGF0YSgpLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKHgsIHkpID0+IHggJiYgeSAmJiB4Lmxhbmd1YWdlSWQgPT0geS5sYW5ndWFnZUlkKSlcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChzeXN0KSA9PiB7XHJcbiAgICAgICAgaWYgKCFzeXN0KSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWN0aXZlRGF0YS5zZXQoc3lzdCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZURhdGEoKS5yZXRyYW5zbGF0ZSkge1xyXG4gICAgICAgICAgdGhpcy5jbGVhclN1bW1hcml6ZSgpO1xyXG4gICAgICAgICAgdGhpcy5pc1JlcGhyYXNlQWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnJldHJhbnNsYXRlKHsgc3lzdGVtQ2hhbmdlZDogdHJ1ZSB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuXHJcbiAgICB0aGlzLnRsZFNjcm9sbFNlcnZpY2Uuc3Vic2NyaWJlVG9TY3JvbGwoKTtcclxuXHJcbiAgICBpZiAodGhpcy5jb25maWcuc3BlZWNoQ29uZmlnLm9ubGluZUFzcj8uZW5hYmxlZCkge1xyXG4gICAgICB0aGlzLmF1ZGlvU2VydmljZS5vblJlY29yZFN0YXJ0LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UuY2hhbmdlU291cmNlKHsgcGhyYXNlOiBcIlwiIH0pO1xyXG4gICAgICB9KVxyXG5cclxuICAgICAgdGhpcy52b2ljZUlucHV0U2VydmljZS5vblRyYW5zY3JpYnRpb25UZXh0VXBkYXRlZC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAuc3Vic2NyaWJlKChldmVudDogSVRyYW5zY3JpcHRpb25VcGRhdGVNb2RlbCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5jaGFuZ2VTb3VyY2UoeyBwaHJhc2U6IGV2ZW50LnRleHQsIHN3YXBTeXN0ZW1zOiBmYWxzZSwgZGlzYWJsZUF1dG9tYXRpY1RyYW5zbGF0aW9uOiAhZXZlbnQuY29tcGxldGVkIH0pO1xyXG4gICAgICAgICAgaWYgKGV2ZW50LmNvbXBsZXRlZCAmJiAoIWV2ZW50LnRleHQgfHwgZXZlbnQudGV4dCA9PT0gXCJcIikpIHtcclxuICAgICAgICAgICAgdGhpcy5hbGVydHMud2FybmluZyhgRVJST1JTLkFVRElPLiR7QXVkaW9FcnJvckNhc2UuTk9fVEVYVF9SRUNPR05JWkVEfWApXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvcHkoKSB7XHJcbiAgICB0aGlzLmNsaXBib2FyZC5jb3B5KHRoaXMudHJhbnNsYXRlZFRleHQpO1xyXG4gICAgdGhpcy5hbGVydHMuc3VjY2VzcyhcIlRMRF9UUkFOU0xBVEUuVEVYVF9DT1BJRURcIiwgeyBpZDogdGhpcy5jb3B5TWVzc2FnZUlkLCBjbG9zZUJ1dHRvbklkOiB0aGlzLmNvcHlNZXNzYWdlQ2xvc2VCdXR0b25JZCwgcGFyZW50SWQ6IHRoaXMuY29weUJ1dHRvbklkIH0pO1xyXG4gIH1cclxuXHJcbiAgY29weVN1bW1hcml6ZWRUZXh0KCkge1xyXG4gICAgdGhpcy5jbGlwYm9hcmQuY29weSh0aGlzLnN1bW1hcml6ZWRUZXh0KTtcclxuICAgIHRoaXMuYWxlcnRzLnN1Y2Nlc3MoXCJUTERfVFJBTlNMQVRFLlNVTU1BUlkuQ09QSUVEXCIpO1xyXG4gIH1cclxuXHJcbiAgcmVmcmVzaCgpIHtcclxuICAgIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2Uub25UcmFuc2xhdGVCdXR0b25DbGljaygpO1xyXG4gICAgdGhpcy5jbGVhclN1bW1hcml6ZSgpO1xyXG4gICAgdGhpcy5pc1JlcGhyYXNlQWN0aXZlID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzaG93UmVwaHJhc2VPcHRpb25zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pc1JlcGhyYXNlQWN0aXZlID0gdHJ1ZTtcclxuICAgIHRoaXMuc2Nyb2xsKCcucmVwaHJhc2Utd3JhcHBlcicpO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlU3VtbWFyeSgpIHtcclxuICAgIHRoaXMuc3VtbWFyaXplZFRleHQgPSAnJztcclxuICAgIHRoaXMubWFya2VkU3VtbWFyaXplZFRleHQgPSAnJztcclxuICAgIHRoaXMuaXNTdW1tYXJhemluZyA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5zY3JvbGwoJy5zdW1tYXJ5LXdyYXBwZXInKTtcclxuXHJcbiAgICB0aGlzLmxsbVNlcnZpY2VcclxuICAgICAgLnN1bW1hcml6ZSh7IGxhbmd1YWdlOiB0aGlzLnRhcmdldExhbmd1YWdlLCB0ZXh0OiB0aGlzLnRyYW5zbGF0ZWRUZXh0LCB1c2VDYXNlOiBMTE1TdW1tYXJ5VXNlQ2FzZS5CcmllZiB9KVxyXG4gICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiAodGhpcy5pc1N1bW1hcmF6aW5nID0gZmFsc2UpKSlcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnN1bW1hcml6ZWRUZXh0ID0gcmVzcG9uc2U7XHJcbiAgICAgICAgICB0aGlzLm1hcmtlZFN1bW1hcml6ZWRUZXh0ID0gbWFya2VkLnBhcnNlKHJlc3BvbnNlKSBhcyBzdHJpbmc7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBzd2l0Y2hGb2N1c0Zyb21Db3B5KGV2ZW50KSB7XHJcbiAgICBjb25zdCBjb3B5TWVzc2FnZUNsb3NlQnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5jb3B5TWVzc2FnZUNsb3NlQnV0dG9uSWQpPy5nZXRFbGVtZW50c0J5VGFnTmFtZShcImJ1dHRvblwiKT8uaXRlbSgwKTtcclxuICAgIGlmIChjb3B5TWVzc2FnZUNsb3NlQnV0dG9uKSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIGNvcHlNZXNzYWdlQ2xvc2VCdXR0b24uZm9jdXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZpbGVDaGFuZ2UoZmlsZXM6IEZpbGVbXSkge1xyXG4gICAgdGhpcy5vbkZpbGVDaGFuZ2UuZW1pdChmaWxlcyk7XHJcbiAgfVxyXG5cclxuICBmaWxlVXBsb2FkRXJyb3IoZXJyb3I6IGFueSkge1xyXG4gICAgdGhpcy5maWxlU2VydmljZS5maWxlVXBsb2FkRXJyb3IoZXJyb3IgYXMgRmlsZVVwbG9hZEVycm9yKTtcclxuICB9XHJcblxyXG4gIG5hdmlnYXRlVG9UcmFuc2xhdGVkVXJsKCkge1xyXG4gICAgd2luZG93LmxvY2F0aW9uLnJlcGxhY2UodGhpcy50cmFuc2xhdGVVcmxSZWRpcmVjdCk7XHJcbiAgfVxyXG5cclxuICBkaWN0YXRlU3RhcnRTdG9wKGlzRGljdGF0aW5nOiBib29sZWFuKSB7XHJcbiAgICBjb25zdCBwaHJhc2UgPSBgJHt0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnNvdXJjZVRleHR9JHt0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnNvdXJjZVRleHQ/Lmxlbmd0aCA+IDAgPyBcIiBcIiA6IFwiXCJ9JHt0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnNvdXJjZVRleHRIeXBvdGhlc2lzfWA7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLmlzRGljdGF0aW5nID0gaXNEaWN0YXRpbmc7XHJcbiAgICAvLyBUcmFuc2xhdGlvbiBoYXMgZW5kZWQuXHJcbiAgICBpZiAoIWlzRGljdGF0aW5nKSB7XHJcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5zcGVlY2hDb25maWcub25saW5lQXNyLnB1bmN0dWF0aW9uTWVzc2FnZSAmJiBwaHJhc2U/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLmFsZXJ0cy53YXJuaW5nKFwiQVVESU8uUFVOQ1RVQVRJT05fTUVTU0FHRVwiKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5jaGFuZ2VTb3VyY2UoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgcGhyYXNlLFxyXG4gICAgICAgICAgZGlzYWJsZUF1dG9tYXRpY1RyYW5zbGF0aW9uOiB0aGlzLmlzRGljdGF0aW5nIHx8IHRoaXMuY29uZmlnLmF1ZGlvQ29uZmlnLmRpc2FibGVBdXRvbWF0aWNUcmFuc2xhdGlvblxyXG4gICAgICAgIH0pO1xyXG4gICAgICB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLmNoYW5nZVNvdXJjZUh5cG90aGVzaXMoXCJcIik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5jbGVhclNvdXJjZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGljdGF0ZVJlc3VsdChyZXN1bHQ6IHN0cmluZykge1xyXG4gICAgdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5jaGFuZ2VTb3VyY2VIeXBvdGhlc2lzKFwiXCIpO1xyXG4gICAgdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5jaGFuZ2VTb3VyY2UoeyBwaHJhc2U6IHJlc3VsdCwgZGlzYWJsZUF1dG9tYXRpY1RyYW5zbGF0aW9uOiB0aGlzLmlzRGljdGF0aW5nIH0pXHJcbiAgfVxyXG5cclxuICBkaWN0YXRlUGFydGlhbFJlc3VsdChwYXJ0aWFsUmVzdWx0OiBzdHJpbmcpIHtcclxuICAgIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UuY2hhbmdlU291cmNlSHlwb3RoZXNpcyhwYXJ0aWFsUmVzdWx0KTtcclxuICB9XHJcblxyXG4gIGRpY3RhdGVFcnJvcihlcnJvcjogQXVkaW9FcnJvckNhc2UpIHtcclxuICAgIGlmIChlcnJvciA9PT0gQXVkaW9FcnJvckNhc2UuTUFYX1RJTUVfRVhDRUVERUQpIHtcclxuICAgICAgbGV0IHRpbWVTdHJpbmcgPSBcIlwiO1xyXG4gICAgICBjb25zdCBtYXhMZW5ndGhUaW1lID0gbmV3IERhdGUoMCwgMCwgMCwgMCwgMCwgdGhpcy5jb25maWcuc3BlZWNoQ29uZmlnLm9ubGluZUFzci5tYXhpbXVtUmVjb3JkVGltZSk7XHJcblxyXG4gICAgICBjb25zdCBtaW51dGVzID0gbWF4TGVuZ3RoVGltZS5nZXRNaW51dGVzKCk7XHJcbiAgICAgIGlmIChtaW51dGVzID4gMCkge1xyXG4gICAgICAgIHRpbWVTdHJpbmcgKz0gYCR7bWludXRlc30gbWludXRlc2A7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHNlY29uZHMgPSBtYXhMZW5ndGhUaW1lLmdldFNlY29uZHMoKTtcclxuICAgICAgaWYgKHNlY29uZHMgPiAwKSB7XHJcbiAgICAgICAgdGltZVN0cmluZyArPSBgJHtzZWNvbmRzfSBzZWNvbmRzYFxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYWxlcnRzLndhcm5pbmcoYEVSUk9SUy5BVURJTy4ke2Vycm9yfWAsIHsgdGltZVN0cmluZyB9KTtcclxuICAgIH0gZWxzZSBpZiAoZXJyb3IgPT09IEF1ZGlvRXJyb3JDYXNlLk5PX1NQRUVDSCkge1xyXG4gICAgICB0aGlzLmFsZXJ0cy53YXJuaW5nKGBFUlJPUlMuQVVESU8uJHtlcnJvcn1gKTtcclxuICAgIH0gZWxzZSBpZiAoZXJyb3IgPT09IEF1ZGlvRXJyb3JDYXNlLk1JQ19OT1RfQUxMT1dFRCkge1xyXG4gICAgICB0aGlzLmFsZXJ0cy53YXJuaW5nKGBFUlJPUlMuQVVESU8uJHtlcnJvcn1gKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWxlcnRzLnVuaGFuZGVsZWRFcnJvcih7IEVycm9yQ29kZTogZXJyb3IgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbGVhclNvdXJjZSgpIHtcclxuICAgIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UuY2xlYXJTb3VyY2UoKTtcclxuICAgIHRoaXMuY2xlYXJTdW1tYXJpemUoKTtcclxuICAgIHRoaXMuaXNSZXBocmFzZUFjdGl2ZSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnN0b3BMaXN0ZW5pbmdUb0NoYW5nZXMoKTtcclxuICAgIHRoaXMudGxkU2Nyb2xsU2VydmljZS51bnN1YnNjcmliZVRvU2Nyb2xsKCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQobnVsbClcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIGNsb3NlUHJvZ3Jlc3NJbmRpY2F0b3IoKSB7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLmhpZGVQcm9ncmVzc0luZGljYXRvcigpO1xyXG4gICAgdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5zdG9wVHJhbnNsYXRpb24oKTtcclxuICB9XHJcblxyXG4gIG9wZW5GaWxlVXBsb2FkKCk6IHZvaWQge1xyXG4gICAgY29uc3QgdXBsb2FkQnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnVwbG9hZC1idXR0b24nKSBhcyBIVE1MRWxlbWVudDtcclxuICAgIHVwbG9hZEJ1dHRvbi5jbGljaygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzY3JvbGwoZWxlbWVudENsYXNzTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnRyYW5zbGF0ZWQtc291cmNlJyk7XHJcbiAgICAgIGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKGVsZW1lbnRDbGFzc05hbWUpLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ2NlbnRlcicgfSk7XHJcbiAgICB9LCAxMDApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhclN1bW1hcml6ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3VtbWFyaXplZFRleHQgPSBudWxsO1xyXG4gICAgdGhpcy5tYXJrZWRTdW1tYXJpemVkVGV4dCA9IG51bGw7XHJcbiAgfVxyXG59XHJcbiIsIjwhLS0gTk9URS4gdGxkLXNvdXJjZS1hbmQtdGFyZ2V0LXdyYXBwZXIgdXNlcyBtdWx0aXBsZSBjb250ZW50IHByb2plY3Rpb25zLCBzbyBtaWdodCBzZWVtIGNvbmZ1c2luZyBmaXJzdCwgYnV0IGVsZW1lbnRzIGFyZSBkaXNwbGF5ZWQgYXQgdGhlaXIgcGxhY2VzIGJhc2VkIG9uIHRsZC1zb3VyY2UtYW5kLXRhcmdldC13cmFwcGVyIGNvbXBvbmVudFxyXG5odHRwczovL2FuZ3VsYXIuaW8vZ3VpZGUvY29udGVudC1wcm9qZWN0aW9uI211bHRpLXNsb3QtY29udGVudC1wcm9qZWN0aW9uXHJcbi0tPlxyXG48dGxkLXNvdXJjZS1hbmQtdGFyZ2V0LXdyYXBwZXJcclxuXHRbdGV4dFRvU3BlZWNoU291cmNlU2V0dGluZ3NdPVwidGV4dFRvU3BlZWNoU291cmNlU2V0dGluZ3NcIlxyXG5cdFtjbGVhclNvdXJjZVZpc2libGVdPVwic291cmNlPy5sZW5ndGggPiAwXCJcclxuXHQob25Tb3VyY2VDbGVhcik9XCJjbGVhclNvdXJjZSgpXCJcclxuXHRbY2xlYXJEaXNhYmxlZF09XCJ0ZXh0YXJlYURpc2FibGVkXCJcclxuXHRbY2xlYXJTb3VyY2VUb29sdGlwXT1cIidUTERfVFJBTlNMQVRFLkNMRUFSX1NPVVJDRV9UT09MVElQJ1wiXHJcblx0W25nQ2xhc3NdPVwieyAnaGlnaGxpZ2h0LWFjdGl2ZSc6IGhpZ2hsaWdodCwgJ2VtcHR5LXRhcmdldCc6IGlzRW1wdHlUYXJnZXQgfVwiXHJcbj5cclxuXHQ8ZGl2IHNvdXJjZU1haW4gY2xhc3M9XCJzb3VyY2UtbWFpblwiIGZ4TGF5b3V0PVwiY29sdW1uXCI+XHJcblx0XHQ8dGxkLXRyYW5zbGF0ZS1zb3VyY2UgW3RleHRhcmVhRGlzYWJsZWRdPVwidGV4dGFyZWFEaXNhYmxlZFwiICNzb3VyY2VDb21wb25lbnQgZnhGbGV4IFtzb3VyY2VQYXJhZ3JhcGhzXT1cInNvdXJjZVBhcmFncmFwaHNcIj48L3RsZC10cmFuc2xhdGUtc291cmNlPlxyXG5cdDwvZGl2PlxyXG5cdDxuZy1jb250YWluZXIgZGljdGF0aW9uICpuZ0lmPVwiYXVkaW9JbnB1dFZpc2libGUoKVwiPlxyXG5cdFx0PHRsZC1kaWN0YXRlXHJcblx0XHRcdCNkaWN0YXRlXHJcblx0XHRcdFtjb25maWd1cmF0aW9uXT1cImRpY3RhdGVDb25maWdcIlxyXG5cdFx0XHRbbmdDbGFzc109XCJ7ICdmdWxsLXdpZHRoJzogIWZpbGVVcGxvYWQgfVwiXHJcblx0XHRcdChpc0RpY3RhdGluZyk9XCJkaWN0YXRlU3RhcnRTdG9wKCRldmVudClcIlxyXG5cdFx0XHQocmVzdWx0KT1cImRpY3RhdGVSZXN1bHQoJGV2ZW50KVwiXHJcblx0XHRcdChwYXJ0aWFsUmVzdWx0KT1cImRpY3RhdGVQYXJ0aWFsUmVzdWx0KCRldmVudClcIlxyXG5cdFx0XHQob25FcnJvcik9XCJkaWN0YXRlRXJyb3IoJGV2ZW50KVwiXHJcblx0XHRcdFtzeXN0ZW1JZF09XCJvbmxpbmVBc3JTeXN0ZW1JZCgpXCJcclxuXHRcdD5cclxuXHRcdDwvdGxkLWRpY3RhdGU+XHJcblx0PC9uZy1jb250YWluZXI+XHJcblxyXG5cdDxidXR0b24gY29tcGFjdFVwbG9hZCBtYXQtaWNvbi1idXR0b24gW21hdFRvb2x0aXBdPVwiJ1RPT0xUSVBTLlVQTE9BRCcgfCB0cmFuc2xhdGVcIiBbZGlzYWJsZWRdPVwiZmlsZVVwbG9hZERpc2FibGVkXCIgKGNsaWNrKT1cIm9wZW5GaWxlVXBsb2FkKClcIj5cclxuXHRcdDxtYXQtaWNvbiBbc3ZnSWNvbl09XCIndXBsb2FkJ1wiPjwvbWF0LWljb24+XHJcblx0PC9idXR0b24+XHJcblxyXG5cdDxuZy1jb250YWluZXIgc291cmNlQWN0aW9ucz5cclxuXHRcdDxkaXYgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiIFtjbGFzcy5iYXNpYy1wYWRkaW5nXT1cImZpbGVVcGxvYWRcIiBmeExheW91dEdhcD1cIjFlbVwiPlxyXG5cdFx0XHQ8ZGl2IFtjbGFzcy5oaWRkZW5dPVwiIWZpbGVVcGxvYWRcIiBjbGFzcz1cImZpbGUtdXBsb2FkLXdyYXBwZXJcIj5cclxuXHRcdFx0XHQ8bGliLWZpbGUtdXBsb2FkXHJcblx0XHRcdFx0XHQoZmlsZUNoYW5nZSk9XCJmaWxlQ2hhbmdlKCRldmVudClcIlxyXG5cdFx0XHRcdFx0W2FjY2VwdF09XCJhbGxvd2VkRmlsZVR5cGVzXCJcclxuXHRcdFx0XHRcdFttYXhTaXplXT1cIm1heEZpbGVVcGxvYWRTaXplXCJcclxuXHRcdFx0XHRcdFt1cGxvYWRJY29uTmFtZV09XCJ1cGxvYWRJY29uTmFtZVwiXHJcblx0XHRcdFx0XHRbZXh0ZW5kZWRBY2NlcHRMaXN0XT1cImV4dGVuZGVkRmlsZVR5cGVzXCJcclxuXHRcdFx0XHRcdFttdWx0aXBsZV09XCJtdWx0aXBsZUZpbGVzXCJcclxuXHRcdFx0XHRcdChlcnJvckV2ZW50KT1cImZpbGVVcGxvYWRFcnJvcigkZXZlbnQpXCJcclxuXHRcdFx0XHRcdFtmaWxlUHJldmlld1Byb2dyZXNzXT1cImZpbGVQcmV2aWV3UHJvZ3Jlc3NcIlxyXG5cdFx0XHRcdFx0W2Rpc2FibGVkXT1cImZpbGVVcGxvYWREaXNhYmxlZFwiXHJcblx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJ1cGxvYWQtZmlsZS10ZXh0XCI+XHJcblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiaW5mb1wiPlxyXG5cdFx0XHRcdFx0XHRcdDxzcGFuIFtpbm5lckhUTUxdPVwiJ0ZJTEVfVVBMT0FELlVQTE9BRCcgfCB0cmFuc2xhdGVcIiBjbGFzcz1cImFjY2VudC1jb2xvclwiPjwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHQ8c3Bhbj4mbmJzcDs8L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0PHNwYW4gW2lubmVySFRNTF09XCInRklMRV9VUExPQUQuRFJBR19BTkRfRFJPUCcgfCB0cmFuc2xhdGVcIiBmeEhpZGUubHQtc20+PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdDxzcGFuIFtpbm5lckhUTUxdPVwiJ0ZJTEVfVVBMT0FELicgKyAobXVsdGlwbGVGaWxlcyA/ICdGSUxFUycgOiAnRklMRScpIHwgdHJhbnNsYXRlXCIgW25nQ2xhc3MubHQtc21dPVwiJ2FjY2VudC1jb2xvcidcIj48L3NwYW4+XHJcblx0XHRcdFx0XHRcdDwvc3Bhbj5cclxuXHJcblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZmlsZS11cGxvYWQtZXh0ZW5zaW9ucyB0ZXh0LW1cIj5cclxuXHRcdFx0XHRcdFx0XHQoJm5ic3A7PHNwYW4+e3sgdmlzaWJsZUV4dGVuc2lvbnMgfX0uPC9zcGFuPiZuYnNwO1xyXG5cdFx0XHRcdFx0XHRcdDxzcGFuICpuZ0lmPVwibWF4U2l6ZU1CXCIgY2xhc3M9XCJmaWxlLXVwbG9hZC1tYXgtc2l6ZVwiIFtpbm5lckhUTUxdPVwiJ0ZJTEVfVVBMT0FELkxJTUlUU19NQicgfCB0cmFuc2xhdGUgOiB7IG1heFNpemVNQjogbWF4U2l6ZU1CIH1cIj48L3NwYW4+Jm5ic3A7KVxyXG5cdFx0XHRcdFx0XHQ8L3NwYW4+XHJcblx0XHRcdFx0XHQ8L3NwYW4+XHJcblx0XHRcdFx0PC9saWItZmlsZS11cGxvYWQ+XHJcblx0XHRcdFx0PGxpYi1vcGVuLWV4dGVuc2lvbi1kaWFsb2cgKm5nSWY9XCJzaG93RXh0ZW5zaW9uUG9wdXBcIiBbZXh0ZW5zaW9uc109XCJhbGxvd2VkVHlwZXNXaXRob3V0RG90c1wiPiA8L2xpYi1vcGVuLWV4dGVuc2lvbi1kaWFsb2c+XHJcblx0XHRcdDwvZGl2PlxyXG5cdFx0PC9kaXY+XHJcblx0PC9uZy1jb250YWluZXI+XHJcblxyXG5cdDxkaXYgdGFyZ2V0TWFpbiBjbGFzcz1cInRhcmdldC1tYWluXCI+XHJcblx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiaXNFbXB0eVRhcmdldDsgZWxzZSB0cmFuc2xhdGVkVGV4dEJsb2NrXCI+XHJcblx0XHRcdDxwICpuZ0lmPVwic2hvd1RhcmdldFBsYWNlaG9sZGVyXCIgY2xhc3M9XCJkZXNjcmlwdGlvbi10ZXh0IHRhcmdldC1lbXB0eVwiIFtpbm5lckh0bWxdPVwiJ1RMRF9UUkFOU0xBVEUuVEFSR0VUX0RFU0NSSVBUSU9OJyB8IHRyYW5zbGF0ZVwiPjwvcD5cclxuXHRcdDwvbmctY29udGFpbmVyPlxyXG5cdDwvZGl2PlxyXG5cclxuXHQ8bmctY29udGFpbmVyIHRhcmdldEFjdGlvbnM+XHJcblx0XHQ8ZGl2IGNsYXNzPVwidGxkLXRyYW5zbGF0ZS10YXJnZXQtZm9vdGVyIGJhc2ljLXBhZGRpbmdcIiAqbmdJZj1cInNob3dQcm9ncmVzc0luZGljYXRvclwiPlxyXG5cdFx0XHQ8cHJvZ3Jlc3MtaW5kaWNhdG9yIChvbkNsb3NlKT1cImNsb3NlUHJvZ3Jlc3NJbmRpY2F0b3IoKVwiICpuZ0lmPVwic2hvd1Byb2dyZXNzSW5kaWNhdG9yXCI+PC9wcm9ncmVzcy1pbmRpY2F0b3I+XHJcblx0XHQ8L2Rpdj5cclxuXHQ8L25nLWNvbnRhaW5lcj5cclxuPC90bGQtc291cmNlLWFuZC10YXJnZXQtd3JhcHBlcj5cclxuXHJcbjwhLS0gdGVtcGxhdGVzIHVzZWQgZm9yIGVsc2UgYmxvY2tzIGluIHRhcmdldCBjb250YWluZXIgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjdHJhbnNsYXRlZFRleHRCbG9jaz5cclxuXHQ8ZGl2IFtjbGFzcy50cmFuc2xhdGVkLXNvdXJjZS1vdmVyZmxvd109XCJ0YXJnZXRXcmFwcGVyT3ZlcmZsb3dcIiBjbGFzcz1cInRyYW5zbGF0ZWQtc291cmNlXCI+XHJcblx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiIXVybFRvVHJhbnNsYXRlXCI+XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJ0YXJnZXQtd3JhcHBlci1hY3Rpb24tYnV0dG9uc1wiPlxyXG5cdFx0XHRcdDxidXR0b25cclxuXHRcdFx0XHRcdG1hdC1pY29uLWJ1dHRvblxyXG5cdFx0XHRcdFx0Km5nSWY9XCJmaXJzdFBhcmFncmFwaFRyYW5zbGF0ZWRcIlxyXG5cdFx0XHRcdFx0Y2xhc3M9XCJ0bGQtY29weS10cmFuc2xhdGlvblwiXHJcblx0XHRcdFx0XHQoY2xpY2spPVwiY29weSgpXCJcclxuXHRcdFx0XHRcdFttYXRUb29sdGlwXT1cIidUT09MVElQUy5DT1BZJyB8IHRyYW5zbGF0ZVwiXHJcblx0XHRcdFx0XHRbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImNvcHlNZXNzYWdlSWRcIlxyXG5cdFx0XHRcdFx0W2F0dHIuSWRdPVwiY29weUJ1dHRvbklkXCJcclxuXHRcdFx0XHRcdChrZXlkb3duLlRhYik9XCJzd2l0Y2hGb2N1c0Zyb21Db3B5KCRldmVudClcIlxyXG5cdFx0XHRcdD5cclxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIiBhcmlhLWhpZGRlbj1cImZhbHNlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInQVJJQV9MQUJFTFMuQ09QWScgfCB0cmFuc2xhdGVcIj4gY29udGVudF9jb3B5IDwvc3Bhbj5cclxuXHRcdFx0XHQ8L2J1dHRvbj5cclxuXHJcblx0XHRcdFx0PGJ1dHRvblxyXG5cdFx0XHRcdFx0bWF0LWljb24tYnV0dG9uXHJcblx0XHRcdFx0XHQqbmdJZj1cImZpcnN0UGFyYWdyYXBoVHJhbnNsYXRlZCB8fCB0cmFuc2xhdGlvbkVycm9yXCJcclxuXHRcdFx0XHRcdGNsYXNzPVwidGxkLXJlZnJlc2gtdHJhbnNsYXRpb25cIlxyXG5cdFx0XHRcdFx0W21hdFRvb2x0aXBdPVwiJ1RPT0xUSVBTLlJFRlJFU0gnIHwgdHJhbnNsYXRlXCJcclxuXHRcdFx0XHRcdChjbGljayk9XCJyZWZyZXNoKClcIlxyXG5cdFx0XHRcdD5cclxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIiBhcmlhLWhpZGRlbj1cImZhbHNlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInQVJJQV9MQUJFTFMuUkVGUkVTSCcgfCB0cmFuc2xhdGVcIj4gcmVmcmVzaCA8L3NwYW4+XHJcblx0XHRcdFx0PC9idXR0b24+XHJcblxyXG5cdFx0XHRcdDxkaXYgW21hdFRvb2x0aXBdPVwiJ1RMRF9UUkFOU0xBVEUuUkVQSFJBU0UuVE9PTFRJUCcgfCB0cmFuc2xhdGVcIj5cclxuXHRcdFx0XHRcdEBpZiAoaXNMbG1FbmFibGVkICYmIGZpcnN0UGFyYWdyYXBoVHJhbnNsYXRlZCkge1xyXG5cdFx0XHRcdFx0PGxpYi1uZXctZmVhdHVyZS1kaWFsb2ctd3JhcHBlclxyXG5cdFx0XHRcdFx0XHQjcmVwaHJhc2VGZWF0dXJlXHJcblx0XHRcdFx0XHRcdFt0aXRsZUxvY2FsaXphdGlvbktleV09XCInVExEX1RSQU5TTEFURS5SRVBIUkFTRS5ORVdfRkVBVFVSRS5USVRMRSdcIlxyXG5cdFx0XHRcdFx0XHRbZGVzY3JpcHRpb25Mb2NhbGl6YXRpb25LZXldPVwiJ1RMRF9UUkFOU0xBVEUuUkVQSFJBU0UuTkVXX0ZFQVRVUkUuREVTQ1JJUFRJT04nXCJcclxuXHRcdFx0XHRcdFx0W2Nsb3NlTG9jYWxpemF0aW9uS2V5XT1cIidUTERfVFJBTlNMQVRFLlJFUEhSQVNFLk5FV19GRUFUVVJFLkNMT1NFJ1wiXHJcblx0XHRcdFx0XHRcdFtmZWF0dXJlQ2xhc3NOYW1lXT1cIid0bGQtcmVwaHJhc2UnXCJcclxuXHRcdFx0XHRcdFx0W2ZlYXR1cmVMb2NhbFN0b3JhZ2VLZXldPVwicmVwaHJhc2VGZWF0dXJlTG9jYWxTdG9yYWdlS2V5XCJcclxuXHRcdFx0XHRcdFx0W3RpbWVvdXRdPVwiMTAwMFwiXHJcblx0XHRcdFx0XHRcdFttYXhXaWR0aF09XCJpc01vYmlsZSA/IDMyMCA6IDQwMFwiXHJcblx0XHRcdFx0XHQ+PC9saWItbmV3LWZlYXR1cmUtZGlhbG9nLXdyYXBwZXI+XHJcblx0XHRcdFx0XHRcdDxidXR0b25cclxuXHRcdFx0XHRcdFx0XHRtYXQtaWNvbi1idXR0b25cclxuXHRcdFx0XHRcdFx0XHRjbGFzcz1cInRsZC1yZXBocmFzZVwiXHJcblx0XHRcdFx0XHRcdFx0W2NsYXNzLnJlcGhyYXNlLWZlYXR1cmUtYWN0aXZlXT1cInJlcGhyYXNlRmVhdHVyZT8uZmVhdHVyZUFjdGl2ZSgpXCJcclxuXHRcdFx0XHRcdFx0XHRbZGlzYWJsZWRdPVwiaXNUcmFuc2xhdGluZyB8fCBpc1N1bW1hcmF6aW5nXCJcclxuXHRcdFx0XHRcdFx0XHQoY2xpY2spPVwic2hvd1JlcGhyYXNlT3B0aW9ucygpXCJcclxuXHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdDxtYXQtaWNvbiBbc3ZnSWNvbl09XCIncmVwaHJhc2UnXCIgYXJpYS1oaWRkZW49XCJmYWxzZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0FSSUFfTEFCRUxTLlJFUEhSQVNFJyB8IHRyYW5zbGF0ZVwiPjwvbWF0LWljb24+XHJcblx0XHRcdFx0XHRcdDwvYnV0dG9uPlxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cclxuXHRcdFx0XHQ8ZGl2IFttYXRUb29sdGlwXT1cIihpc1RleHRTdW1tYXJpemFibGUgPyAnVE9PTFRJUFMuQ1JFQVRFX1NVTU1BUlknIDogJ1RMRF9UUkFOU0xBVEUuU1VNTUFSWS5ESVNBQkxFRCcpIHwgdHJhbnNsYXRlXCI+XHJcblx0XHRcdFx0XHRAaWYgKGlzTGxtRW5hYmxlZCAmJiBmaXJzdFBhcmFncmFwaFRyYW5zbGF0ZWQpIHtcclxuXHRcdFx0XHRcdDxsaWItbmV3LWZlYXR1cmUtZGlhbG9nLXdyYXBwZXJcclxuXHRcdFx0XHRcdFx0I3N1bW1hcml6ZUZlYXR1cmVcclxuXHRcdFx0XHRcdFx0W3RpdGxlTG9jYWxpemF0aW9uS2V5XT1cIidUTERfVFJBTlNMQVRFLlNVTU1BUlkuTkVXX0ZFQVRVUkUuVElUTEUnXCJcclxuXHRcdFx0XHRcdFx0W2Rlc2NyaXB0aW9uTG9jYWxpemF0aW9uS2V5XT1cIidUTERfVFJBTlNMQVRFLlNVTU1BUlkuTkVXX0ZFQVRVUkUuREVTQ1JJUFRJT04nXCJcclxuXHRcdFx0XHRcdFx0W2Nsb3NlTG9jYWxpemF0aW9uS2V5XT1cIidUTERfVFJBTlNMQVRFLlNVTU1BUlkuTkVXX0ZFQVRVUkUuQ0xPU0UnXCJcclxuXHRcdFx0XHRcdFx0W2ZlYXR1cmVDbGFzc05hbWVdPVwiJ3RsZC1jcmVhdGUtc3VtbWFyeSdcIlxyXG5cdFx0XHRcdFx0XHRbZmVhdHVyZUxvY2FsU3RvcmFnZUtleV09XCJzdW1tYXJpemVGZWF0dXJlTG9jYWxTdG9yYWdlS2V5XCJcclxuXHRcdFx0XHRcdFx0W3RpbWVvdXRdPVwiMTAwMFwiXHJcblx0XHRcdFx0XHQ+PC9saWItbmV3LWZlYXR1cmUtZGlhbG9nLXdyYXBwZXI+XHJcblxyXG5cdFx0XHRcdFx0PGJ1dHRvblxyXG5cdFx0XHRcdFx0XHRtYXQtaWNvbi1idXR0b25cclxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJ0bGQtY3JlYXRlLXN1bW1hcnlcIlxyXG5cdFx0XHRcdFx0XHRbY2xhc3Muc3VtbWFyaXplLWZlYXR1cmUtYWN0aXZlXT1cInN1bW1hcml6ZUZlYXR1cmU/LmZlYXR1cmVBY3RpdmUoKVwiXHJcblx0XHRcdFx0XHRcdFtkaXNhYmxlZF09XCJpc1RyYW5zbGF0aW5nIHx8IGlzU3VtbWFyYXppbmcgfHwgIWlzVGV4dFN1bW1hcml6YWJsZVwiXHJcblx0XHRcdFx0XHRcdChjbGljayk9XCJjcmVhdGVTdW1tYXJ5KClcIlxyXG5cdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHQ8bWF0LWljb24gW3N2Z0ljb25dPVwiJ3N1bW1hcml6ZSdcIiBhcmlhLWhpZGRlbj1cImZhbHNlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInQVJJQV9MQUJFTFMuQ1JFQVRFX1NVTU1BUlknIHwgdHJhbnNsYXRlXCI+PC9tYXQtaWNvbj5cclxuXHRcdFx0XHRcdDwvYnV0dG9uPlxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDx0bGQtdGV4dC10by1zcGVlY2ggKm5nSWY9XCJ0ZXh0VG9TcGVlY2hUYXJnZXRTZXR0aW5ncyAmJiBmaXJzdFBhcmFncmFwaFRyYW5zbGF0ZWRcIiBbc2V0dGluZ3NdPVwidGV4dFRvU3BlZWNoVGFyZ2V0U2V0dGluZ3NcIj4gPC90bGQtdGV4dC10by1zcGVlY2g+XHJcblx0XHRcdDwvZGl2PlxyXG5cclxuXHRcdFx0PGRpdiBjbGFzcz1cImhpZ2hsaWdodC10cmVlLXdyYXBwZXJcIj5cclxuXHRcdFx0XHQ8dGxkLWhpZ2hsaWdodC10cmVlICpuZ0Zvcj1cImxldCBwYXJhZ3JhcGggb2YgdGFyZ2V0UGFyYWdyYXBoc1wiIFtoaWdobGlnaHRdPVwiaGlnaGxpZ2h0XCIgW3RyZWVdPVwicGFyYWdyYXBoXCI+IDwvdGxkLWhpZ2hsaWdodC10cmVlPlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHJcblx0XHRcdDxkaXYgKm5nSWY9XCJpc1N1bW1hcmF6aW5nIHx8IHN1bW1hcml6ZWRUZXh0XCIgY2xhc3M9XCJzdW1tYXJ5LXdyYXBwZXJcIj5cclxuXHRcdFx0XHQ8cCBjbGFzcz1cInN1bW1hcnktdGl0bGVcIj57eyBcIlRMRF9UUkFOU0xBVEUuU1VNTUFSWS5USVRMRVwiIHwgdHJhbnNsYXRlIH19PC9wPlxyXG5cclxuXHRcdFx0XHQ8cCAqbmdJZj1cImlzU3VtbWFyYXppbmdcIiBjbGFzcz1cImNyZWF0aW5nLXByb2dyZXNzXCI+e3sgXCJUTERfVFJBTlNMQVRFLlNVTU1BUlkuQ1JFQVRJTkdcIiB8IHRyYW5zbGF0ZSB9fTxzcGFuIGNsYXNzPVwiZG90LWxvYWRpbmdcIj4uLi48L3NwYW4+PC9wPlxyXG5cclxuXHRcdFx0XHQ8cCBbaW5uZXJIVE1MXT1cIm1hcmtlZFN1bW1hcml6ZWRUZXh0XCI+PC9wPlxyXG5cclxuXHRcdFx0XHQ8YnV0dG9uXHJcblx0XHRcdFx0XHRtYXQtaWNvbi1idXR0b25cclxuXHRcdFx0XHRcdCpuZ0lmPVwic3VtbWFyaXplZFRleHRcIlxyXG5cdFx0XHRcdFx0W25nQ2xhc3MubHQtc21dPVwiJ3N1bW1hcnktbW9iaWxlJ1wiXHJcblx0XHRcdFx0XHRjbGFzcz1cInN1bW1hcnktY29weS1idG5cIlxyXG5cdFx0XHRcdFx0KGNsaWNrKT1cImNvcHlTdW1tYXJpemVkVGV4dCgpXCJcclxuXHRcdFx0XHRcdFttYXRUb29sdGlwXT1cIidUT09MVElQUy5DT1BZJyB8IHRyYW5zbGF0ZVwiXHJcblx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiIGFyaWEtaGlkZGVuPVwiZmFsc2VcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidBUklBX0xBQkVMUy5DT1BZJyB8IHRyYW5zbGF0ZVwiPiBjb250ZW50X2NvcHkgPC9zcGFuPlxyXG5cdFx0XHRcdDwvYnV0dG9uPlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHJcblx0XHRcdDxkaXYgKm5nSWY9XCJpc1JlcGhyYXNlQWN0aXZlXCIgY2xhc3M9XCJyZXBocmFzZS13cmFwcGVyXCI+XHJcblx0XHRcdFx0PHRsZC1yZXBocmFzZSBbdGV4dF09XCJ0cmFuc2xhdGVkVGV4dFwiIFtkaXNhYmxlZF09XCJpc1RyYW5zbGF0aW5nXCIgW2xhbmd1YWdlXT1cInRhcmdldExhbmd1YWdlXCI+PC90bGQtcmVwaHJhc2U+XHJcblx0XHRcdDwvZGl2Plx0XHJcblxyXG5cdFx0XHQ8ZGl2ICpuZ0lmPVwiZmlyc3RQYXJhZ3JhcGhUcmFuc2xhdGVkICYmIGRpY3Rpb25hcnlFbnRyeVwiIGNsYXNzPVwiZGljdGlvbmFyeS13cmFwcGVyXCI+XHJcblx0XHRcdFx0PHRsZC1kaWN0aW9uYXJ5IFtkaWN0aW9uYXJ5XT1cImRpY3Rpb25hcnlFbnRyeVwiPjwvdGxkLWRpY3Rpb25hcnk+XHJcblx0XHRcdDwvZGl2PlxyXG5cdFx0PC9uZy1jb250YWluZXI+XHJcblxyXG5cdFx0PGRpdiAqbmdJZj1cInVybFRvVHJhbnNsYXRlXCIgY2xhc3M9XCJ0YXJnZXQtdXJsLWNvbnRhaW5lclwiPlxyXG5cdFx0XHQ8YSBbYXR0ci5ocmVmXT1cInRyYW5zbGF0ZVVybFJlZGlyZWN0XCIgdGFyZ2V0PVwiX2JsYW5rXCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiIGNsYXNzPVwiZ28tdG8td2VidHJhbnNsYXRlXCI+XHJcblx0XHRcdFx0e3sgdXJsVG9UcmFuc2xhdGUgfX1cclxuXHRcdFx0XHQ8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCIgY29sb3I9XCJhY2NlbnRcIiBhcmlhLWhpZGRlbj1cImZhbHNlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInQVJJQV9MQUJFTFMuT1BFTl9JTl9ORVcnXCI+IG9wZW5faW5fbmV3IDwvc3Bhbj5cclxuXHRcdFx0PC9hPlxyXG5cdFx0PC9kaXY+XHJcblx0PC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
365
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxkLXRyYW5zbGF0ZS10ZXh0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RsZC10cmFuc2xhdGUvc3JjL2xpYi9tb2R1bGVzL3RsZC10ZXh0L2NvbXBvbmVudHMvdGxkLXRyYW5zbGF0ZS10ZXh0L3RsZC10cmFuc2xhdGUtdGV4dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bGQtdHJhbnNsYXRlL3NyYy9saWIvbW9kdWxlcy90bGQtdGV4dC9jb21wb25lbnRzL3RsZC10cmFuc2xhdGUtdGV4dC90bGQtdHJhbnNsYXRlLXRleHQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkgsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxjQUFjLEVBQTZCLE1BQU0sMkJBQTJCLENBQUM7QUFRdEYsT0FBTyxFQUE0QixnQkFBZ0IsRUFBbUIsVUFBVSxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUUvSixPQUFPLEVBQWMsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVNoQyxNQUFNLE9BQU8seUJBQXlCO0lBNEdqQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7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R0FBRyxFQUFFO1lBQ2QsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQy9ELFNBQVMsQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxjQUFjLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3BHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFTyxjQUFjO1FBQ3BCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7SUFDbkMsQ0FBQzt3R0E3VVUseUJBQXlCOzRGQUF6Qix5QkFBeUIsK1dDeEJ0Qyw2eFRBb01BOzs0RkQ1S2EseUJBQXlCO2tCQUxyQyxTQUFTOytCQUNFLG9CQUFvQjt5YUFLQSxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQjtnQkFDTixnQkFBZ0I7c0JBQXJDLFNBQVM7dUJBQUMsU0FBUztnQkFDWCxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0ksWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENsaXBib2FyZCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jbGlwYm9hcmQnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBzaWduYWwsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaW5hbGl6ZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBBdWRpb0Vycm9yQ2FzZSwgSVRyYW5zY3JpcHRpb25VcGRhdGVNb2RlbCB9IGZyb20gJy4uLy4uLy4uL3RsZC1hdWRpby9tb2RlbHMnO1xyXG5pbXBvcnQgeyBJRGljdGF0ZUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi8uLi8uLi90bGQtYXVkaW8vbW9kZWxzL2RpY3RhdGUtY29uZmlndXJhdGlvbmkubW9kZWwnO1xyXG5pbXBvcnQgeyBBdWRpb1JlY29yZFNlcnZpY2UsIFRsZFZvaWNlSW5wdXRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vdGxkLWF1ZGlvL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgVGxkVHJhbnNsYXRlU3lzdGVtTWFuYWdlbWVudFNlcnZpY2UsIFRsZFRyYW5zbGF0ZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi90bGQtY29tbW9uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgVGxkU2Nyb2xsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3RsZC1jb21tb24vc2VydmljZXMvc2Nyb2xsL3RsZC1zY3JvbGwuc2VydmljZSc7XHJcbmltcG9ydCB7IFRsZFRyYW5zbGF0ZUZpbGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vdGxkLWRvY3VtZW50L3NlcnZpY2VzJztcclxuaW1wb3J0IHsgVGxkVHJhbnNsYXRlVGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90bGQtdHJhbnNsYXRlLXRleHQuc2VydmljZSc7XHJcbmltcG9ydCB7IFRsZFRyYW5zbGF0ZVNvdXJjZUNvbXBvbmVudCB9IGZyb20gJy4uL3RsZC10cmFuc2xhdGUtc291cmNlL3RsZC10cmFuc2xhdGUtc291cmNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFjdGl2ZURhdGEsIEFsZXJ0U2VydmljZSwgQ29udmVyc2lvbkhlbHBlciwgRmlsZVVwbG9hZEVycm9yLCBIYXNoSGVscGVyLCBQbGF1c2libGVIZWxwZXIsIFJlc29sdXRpb25IZWxwZXIsIExMTUFjdGlvbnMgfSBmcm9tICdAdGlsZGUtbmxwL25neC1jb21tb24nO1xyXG5pbXBvcnQgeyBUbGREaWN0YXRlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vdGxkLWF1ZGlvJztcclxuaW1wb3J0IHsgTExNU2VydmljZSwgTExNU3VtbWFyeVVzZUNhc2UgfSBmcm9tICdAdGlsZGUtbmxwL25neC1zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IG1hcmtlZCB9IGZyb20gJ21hcmtlZCc7XHJcbmltcG9ydCB7IEtleWNsb2FrU2VydmljZSB9IGZyb20gJ2tleWNsb2FrLWFuZ3VsYXInO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndGxkLXRyYW5zbGF0ZS10ZXh0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGxkLXRyYW5zbGF0ZS10ZXh0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90bGQtdHJhbnNsYXRlLXRleHQuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGxkVHJhbnNsYXRlVGV4dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBAVmlld0NoaWxkKFwic291cmNlQ29tcG9uZW50XCIpIHNvdXJjZUNvbXBvbmVudDogVGxkVHJhbnNsYXRlU291cmNlQ29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoXCJkaWN0YXRlXCIpIGRpY3RhdGVDb21wb25lbnQ6IFRsZERpY3RhdGVDb21wb25lbnQ7XHJcbiAgQElucHV0KCkgZmlsZVByZXZpZXdQcm9ncmVzczogbnVtYmVyO1xyXG4gIEBPdXRwdXQoKSBvbkZpbGVDaGFuZ2U6IEV2ZW50RW1pdHRlcjxGaWxlW10+ID0gbmV3IEV2ZW50RW1pdHRlcjxGaWxlW10+KCk7XHJcblxyXG4gIGFjdGl2ZURhdGEgPSBzaWduYWw8QWN0aXZlRGF0YSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcclxuICBnZXQgc3lzdGVtSWQoKSB7IHJldHVybiB0aGlzLmFjdGl2ZURhdGEoKT8uc3lzdGVtSWQ7IH07XHJcbiAgLy9wYXJhbXMgZnJvbSBjb25maWcgc2VydmljZS5cclxuICBnZXQgYWxsb3dlZEZpbGVUeXBlcygpOiBzdHJpbmdbXSB7IHJldHVybiB0aGlzLmNvbmZpZy5maWxlQ29uZmlnLmFsbG93ZWRGaWxlVHlwZXM7IH07XHJcbiAgZ2V0IGV4dGVuZGVkRmlsZVR5cGVzKCk6IHN0cmluZ1tdIHsgcmV0dXJuIHRoaXMuY29uZmlnLmZpbGVDb25maWcuZXh0ZW5kZWRGaWxlVHlwZXM7IH07XHJcbiAgZ2V0IGFwcElkKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmNvbmZpZy5jb3JlQ29uZmlnLmFwcElkOyB9O1xyXG4gIGdldCBoaWdobGlnaHQoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmNvbmZpZy50ZXh0Q29uZmlnLmhpZ2hsaWdodDsgfTtcclxuICBnZXQgZmlsZVVwbG9hZCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuY29uZmlnLmZpbGVDb25maWcuZmlsZVVwbG9hZCAmJiAhdGhpcy5pc01vYmlsZSAmJiAhKHRoaXMuaXNEaWN0YXRpbmcgfHwgdGhpcy5hdWRpb1NlcnZpY2U/LmlzUmVjb3JkaW5nIHx8IHRoaXMudm9pY2VJbnB1dFNlcnZpY2UuaXNQcm9jZXNzaW5nKSAmJiAhdGhpcy5zb3VyY2U/Lmxlbmd0aCB9O1xyXG4gIGdldCBpc0F1dGgoKSB7IHJldHVybiB0aGlzLmNvbmZpZy5jb3JlQ29uZmlnLmlzQXV0aDsgfTtcclxuICBnZXQgbWF4RmlsZVVwbG9hZFNpemUoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuY29uZmlnLmZpbGVDb25maWcubWF4U2l6ZTsgfTtcclxuICBnZXQgbXVsdGlwbGVGaWxlcygpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuY29uZmlnLmZpbGVDb25maWcubnVtYmVyT2ZGaWxlc0FsbG93ZWQgPiAxOyB9O1xyXG4gIGdldCB1cGRhdGVUcmFuc2xhdGlvblVybCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5jb25maWcudGV4dENvbmZpZy51cGRhdGVUcmFuc2xhdGlvblVybDsgfTtcclxuICBnZXQgYWxsb3dXZWJzaXRlVHJhbnNsYXRpb24oKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmNvbmZpZy50ZXh0Q29uZmlnLmFsbG93V2Vic2l0ZVRyYW5zbGF0aW9uOyB9O1xyXG4gIGdldCBhdXRvUmVkaXJlY3RUb1dlYlRyYW5zbGF0ZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuY29uZmlnLnRleHRDb25maWcuYXV0b1JlZGlyZWN0VG9XZWJUcmFuc2xhdGU7IH07XHJcbiAgZ2V0IHdlYldpZGdldFJlZGlyZWN0VXJsUHJlZml4KCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmNvbmZpZy50ZXh0Q29uZmlnLndlYldpZGdldFJlZGlyZWN0VXJsUHJlZml4OyB9O1xyXG4gIGdldCB3ZWJXaWRnZXRSZWRpcmVjdFVybFBvc2ZpeCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5jb25maWcudGV4dENvbmZpZy53ZWJXaWRnZXRSZWRpcmVjdFVybFBvc2ZpeDsgfTtcclxuICBnZXQgdGV4dGFyZWFEaXNhYmxlZCgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuYXVkaW9TZXJ2aWNlLmlzUmVjb3JkaW5nIHx8IHRoaXMudm9pY2VJbnB1dFNlcnZpY2UuaXNQcm9jZXNzaW5nIHx8IHRoaXMuaXNEaWN0YXRpbmcgfHwgdGhpcy50bGRTeXN0ZW0ubm9TeXN0ZW1zRXJyb3IgfTtcclxuICBnZXQgZmlsZVVwbG9hZERpc2FibGVkKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy50bGRTeXN0ZW0ubm9TeXN0ZW1zRXJyb3IgfTtcclxuICBnZXQgaXNEaWN0YXRpbmcoKSB7IHJldHVybiB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLmlzRGljdGF0aW5nOyB9O1xyXG4gIGdldCBzb3VyY2VMYW5ndWFnZSgpIHsgcmV0dXJuIHRoaXMuYWN0aXZlRGF0YSgpPy5zb3VyY2VMYW5nLmxhbmc7IH1cclxuICBnZXQgdGFyZ2V0TGFuZ3VhZ2UoKSB7IHJldHVybiB0aGlzLmFjdGl2ZURhdGEoKT8udGFyZ2V0TGFuZy5sYW5nOyB9XHJcbiAgZ2V0IGhhc1RyYW5zbGF0ZWRQYXJhZ3JhcGhzKCkgeyByZXR1cm4gdGhpcy50YXJnZXRQYXJhZ3JhcGhzPy5sZW5ndGggPiAwIH1cclxuICBnZXQgaXNFbXB0eVRhcmdldCgpIHsgcmV0dXJuICF0aGlzLmhhc1RyYW5zbGF0ZWRQYXJhZ3JhcGhzICYmICF0aGlzLnVybFRvVHJhbnNsYXRlICYmICF0aGlzLmhhc0RpY3Rpb25hcnkgfVxyXG4gIGdldCBzaG93VGFyZ2V0UGxhY2Vob2xkZXIoKSB7IHJldHVybiB0aGlzLmNvbmZpZy50ZXh0Q29uZmlnLnNob3dUYXJnZXRQbGFjZWhvbGRlciB9XHJcbiAgZ2V0IHNob3dFeHRlbnNpb25Qb3B1cCgpIHsgcmV0dXJuIHRoaXMuY29uZmlnLnRleHRDb25maWcuc2hvd0V4dGVuc2lvblBvcHVwICYmIHRoaXMudmlzaWJsZUV4dGVuc2lvbkNvdW50IDwgdGhpcy5hbGxvd2VkRmlsZVR5cGVzLmxlbmd0aCB9XHJcbiAgZ2V0IHZpc2libGVFeHRlbnNpb25Db3VudCgpIHsgcmV0dXJuIHRoaXMuY29uZmlnLnRleHRDb25maWcudmlzaWJsZUV4dGVuc2lvbkNvdW50IH07XHJcbiAgZ2V0IHRleHRUb1NwZWVjaFRhcmdldFNldHRpbmdzKCkgeyByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS50ZXh0VG9TcGVlY2hUYXJnZXRTZXR0aW5ncyB9O1xyXG4gIGdldCB0ZXh0VG9TcGVlY2hTb3VyY2VTZXR0aW5ncygpIHsgcmV0dXJuIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UudGV4dFRvU3BlZWNoU291cmNlU2V0dGluZ3MgfTtcclxuICBnZXQgdXBsb2FkSWNvbk5hbWUoKSB7IHJldHVybiB0aGlzLmNvbmZpZy5jb3JlQ29uZmlnLnVwbG9hZEljb25OYW1lIH07XHJcbiAgZ2V0IGlzTGxtRW5hYmxlZCgpIHsgcmV0dXJuIHRoaXMuY29uZmlnLmxsbUNvbmZpZy5pc0VuYWJsZWQgfTtcclxuXHJcbiAgYXVkaW9JbnB1dFZpc2libGUgPSBjb21wdXRlZCgoKSA9PiB7IHJldHVybiB0aGlzLmNvbmZpZy5zcGVlY2hDb25maWcub25saW5lQXNyPy5lbmFibGVkICYmIHRoaXMub25saW5lQXNyU3lzdGVtSWQoKTsgfSk7XHJcbiAgdGFyZ2V0U2VudGVuY2VTZWxlY3Q6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGdldCB1cmxUb1RyYW5zbGF0ZSgpIHsgcmV0dXJuIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UudXJsVG9UcmFuc2xhdGU7IH07XHJcblxyXG4gIG9ubGluZUFzclN5c3RlbUlkID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgY29uc3Qgb25saW5lU3lzdGVtcyA9IHRoaXMudGxkU3lzdGVtLm9ubGluZUFTclN5c3RlbXMoKTtcclxuICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuYWN0aXZlRGF0YSgpO1xyXG5cclxuICAgIGlmICghdGhpcy5jb25maWcuc3BlZWNoQ29uZmlnLm9ubGluZUFzcj8uZW5hYmxlZCAmJiBvbmxpbmVTeXN0ZW1zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb25saW5lU3lzdGVtcy5maW5kKChvbmxpbmVTeXN0ZW0pID0+IG9ubGluZVN5c3RlbS5sYW5ndWFnZSA9PT0gYWN0aXZlPy5zb3VyY2VMYW5nLmxhbmcpPy5zeXN0ZW1JZDtcclxuICB9KTtcclxuXHJcbiAgYWxsb3dlZFR5cGVzV2l0aG91dERvdHM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIHJlYWRvbmx5IGNvcHlNZXNzYWdlSWQgPSBcInRsZC1jb3B5LXN1Y2Nlc3NcIjtcclxuICByZWFkb25seSBjb3B5TWVzc2FnZUNsb3NlQnV0dG9uSWQgPSBcInRsZC1jb3B5LXN1Y2Nlc3MtY2xvc2VcIjtcclxuICByZWFkb25seSBjb3B5QnV0dG9uSWQgPSBcInRsZC1jb3B5LXRvLWNsaXBib2FyZFwiO1xyXG5cclxuICBnZXQgdHJhbnNsYXRlZFRleHQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnRyYW5zbGF0ZWRUZXh0O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGZpcnN0UGFyYWdyYXBoVHJhbnNsYXRlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLmZpcnN0UGFyYWdyYXBoVHJhbnNsYXRlZDtcclxuICB9XHJcblxyXG4gIGdldCBpc1RyYW5zbGF0aW5nKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UuaXNUcmFuc2xhdGluZztcclxuICB9XHJcblxyXG4gIGdldCB0cmFuc2xhdGlvbkVycm9yKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc291cmNlICYmICF0aGlzLmlzVHJhbnNsYXRpbmc7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNUZXh0U3VtbWFyaXphYmxlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2Uuc291cmNlVGV4dD8ubGVuZ3RoID4gMzAwO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGhhc0RpY3Rpb25hcnkoKSB7IHJldHVybiB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLmhhc0RpY3Rpb25hcnk7IH1cclxuICBnZXQgZGljdGlvbmFyeUVudHJ5KCkgeyByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5kaWN0aW9uYXJ5RW50cnk7IH1cclxuICBnZXQgc291cmNlKCkgeyByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5zb3VyY2VUZXh0OyB9XHJcbiAgZ2V0IHRyYW5zbGF0ZVVybFJlZGlyZWN0KCkgeyByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS50cmFuc2xhdGVVcmxSZWRpcmVjdDsgfVxyXG4gIGdldCBzaG93UHJvZ3Jlc3NJbmRpY2F0b3IoKSB7IHJldHVybiB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnNob3VsZFNob3dQcm9ncmVzc0luZGljYXRvcjsgfVxyXG4gIGdldCBwYXJhZ3JhcGhzKCkgeyByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5wYXJhZ3JhcGhzOyB9O1xyXG4gIGdldCBzb3VyY2VQYXJhZ3JhcGhzKCkgeyByZXR1cm4gdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5zb3VyY2VQYXJhZ3JhcGhzOyB9XHJcbiAgZ2V0IHRhcmdldFBhcmFncmFwaHMoKSB7IHJldHVybiB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnRhcmdldFBhcmFncmFwaHM7IH1cclxuXHJcbiAgZ2V0IHRhcmdldFdyYXBwZXJPdmVyZmxvdygpIHtcclxuICAgIGNvbnN0IHRhcmdldFdyYXBwZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcudGFyZ2V0LW1haW4nKTtcclxuICAgIGNvbnN0IHRhcmdldFdyYXBwZXJPdmVyZmxvdyA9IHRhcmdldFdyYXBwZXIuc2Nyb2xsSGVpZ2h0ID4gdGFyZ2V0V3JhcHBlci5jbGllbnRIZWlnaHQ7XHJcbiAgICByZXR1cm4gdGFyZ2V0V3JhcHBlck92ZXJmbG93O1xyXG4gIH1cclxuXHJcbiAgZGljdGF0ZUNvbmZpZzogSURpY3RhdGVDb25maWd1cmF0aW9uO1xyXG4gIHZpc2libGVFeHRlbnNpb25zOiBzdHJpbmc7XHJcbiAgbWF4U2l6ZU1COiBudW1iZXI7XHJcblxyXG4gIGlzUmVwaHJhc2VBY3RpdmUhOiBib29sZWFuO1xyXG4gIGlzU3VtbWFyYXppbmchOiBib29sZWFuO1xyXG4gIHN1bW1hcml6ZWRUZXh0ITogc3RyaW5nO1xyXG4gIG1hcmtlZFN1bW1hcml6ZWRUZXh0ITogc3RyaW5nO1xyXG4gIHN1bW1hcml6ZUZlYXR1cmVMb2NhbFN0b3JhZ2VLZXkhOiBzdHJpbmc7XHJcbiAgcmVwaHJhc2VGZWF0dXJlTG9jYWxTdG9yYWdlS2V5ITogc3RyaW5nO1xyXG4gIGlzTW9iaWxlITogYm9vbGVhbjtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVUZXh0U2VydmljZTogVGxkVHJhbnNsYXRlVGV4dFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNsaXBib2FyZDogQ2xpcGJvYXJkLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGVydHM6IEFsZXJ0U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBUbGRUcmFuc2xhdGVDb25maWdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0bGRTY3JvbGxTZXJ2aWNlOiBUbGRTY3JvbGxTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0bGRTeXN0ZW06IFRsZFRyYW5zbGF0ZVN5c3RlbU1hbmFnZW1lbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBhdWRpb1NlcnZpY2U6IEF1ZGlvUmVjb3JkU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgdm9pY2VJbnB1dFNlcnZpY2U6IFRsZFZvaWNlSW5wdXRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBmaWxlU2VydmljZTogVGxkVHJhbnNsYXRlRmlsZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxsbVNlcnZpY2U6IExMTVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGtleWNsb2FrOiBLZXljbG9ha1NlcnZpY2VcclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNNb2JpbGUgPSBSZXNvbHV0aW9uSGVscGVyLmlzTW9iaWxlUmVzKCk7XHJcbiAgICBcclxuICAgIHRoaXMuc3VtbWFyaXplRmVhdHVyZUxvY2FsU3RvcmFnZUtleSA9IHRoaXMua2V5Y2xvYWsuZ2V0S2V5Y2xvYWtJbnN0YW5jZSgpPy50b2tlblBhcnNlZCA/IGBzdW1tYXJpemVGZWF0dXJlRGlhbG9nU2hvd25fJHtIYXNoSGVscGVyLmhhc2hTdHJpbmcodGhpcy5rZXljbG9hay5nZXRLZXljbG9ha0luc3RhbmNlKCkudG9rZW5QYXJzZWQuZW1haWwpfWAgOiAnc3VtbWFyaXplRmVhdHVyZURpYWxvZ1Nob3duJztcclxuICAgIHRoaXMucmVwaHJhc2VGZWF0dXJlTG9jYWxTdG9yYWdlS2V5ID0gdGhpcy5rZXljbG9hay5nZXRLZXljbG9ha0luc3RhbmNlKCk/LnRva2VuUGFyc2VkID8gYHJlcGhyYXNlRmVhdHVyZURpYWxvZ1Nob3duXyR7SGFzaEhlbHBlci5oYXNoU3RyaW5nKHRoaXMua2V5Y2xvYWsuZ2V0S2V5Y2xvYWtJbnN0YW5jZSgpLnRva2VuUGFyc2VkLmVtYWlsKX1gIDogJ3JlcGhyYXNlRmVhdHVyZURpYWxvZ1Nob3duJztcclxuXHJcbiAgICB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLmxpc3Rlbk9uQ2hhbmdlcygpO1xyXG4gICAgdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5zb3VyY2VDaGFuZ2Uuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5jbGVhclN1bW1hcml6ZSgpO1xyXG4gICAgICB0aGlzLmlzUmVwaHJhc2VBY3RpdmUgPSBmYWxzZTtcclxuICAgIH0pXHJcbiAgICB0aGlzLmRpY3RhdGVDb25maWcgPSB7XHJcbiAgICAgIG1heExlbmd0aDogdGhpcy5jb25maWcuc3BlZWNoQ29uZmlnPy5vbmxpbmVBc3I/Lm1heGltdW1SZWNvcmRUaW1lLFxyXG4gICAgICBhcGlVcmw6IHRoaXMuY29uZmlnLnNwZWVjaENvbmZpZy5vbmxpbmVBc3I/LnVybCxcclxuICAgICAgYXBpS2V5OiB0aGlzLmNvbmZpZy5zcGVlY2hDb25maWcuYXBpS2V5XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy52aXNpYmxlRXh0ZW5zaW9ucyA9IHRoaXMuYWxsb3dlZEZpbGVUeXBlcy5zbGljZSgwLCB0aGlzLnZpc2libGVFeHRlbnNpb25Db3VudCkuam9pbihcIiwgXCIpO1xyXG4gICAgdGhpcy5hbGxvd2VkRmlsZVR5cGVzLmZvckVhY2goKGVsKSA9PiB0aGlzLmFsbG93ZWRUeXBlc1dpdGhvdXREb3RzLnB1c2goZWwucmVwbGFjZSgnLicsICcnKSkpO1xyXG5cclxuICAgIHRoaXMubWF4U2l6ZU1CID0gQ29udmVyc2lvbkhlbHBlci5ieXRlc1RvTWIodGhpcy5jb25maWcuZmlsZUNvbmZpZy5tYXhTaXplKTtcclxuXHJcbiAgICB0aGlzLnRsZFN5c3RlbS5nZXRBY3RpdmVEYXRhKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgoeCwgeSkgPT4geCAmJiB5ICYmIHgubGFuZ3VhZ2VJZCA9PSB5Lmxhbmd1YWdlSWQpKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHN5c3QpID0+IHtcclxuICAgICAgICBpZiAoIXN5c3QpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRhLnNldChzeXN0KTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlRGF0YSgpLnJldHJhbnNsYXRlKSB7XHJcbiAgICAgICAgICB0aGlzLmNsZWFyU3VtbWFyaXplKCk7XHJcbiAgICAgICAgICB0aGlzLmlzUmVwaHJhc2VBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UucmV0cmFuc2xhdGUoeyBzeXN0ZW1DaGFuZ2VkOiB0cnVlIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG5cclxuICAgIHRoaXMudGxkU2Nyb2xsU2VydmljZS5zdWJzY3JpYmVUb1Njcm9sbCgpO1xyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZy5zcGVlY2hDb25maWcub25saW5lQXNyPy5lbmFibGVkKSB7XHJcbiAgICAgIHRoaXMuYXVkaW9TZXJ2aWNlLm9uUmVjb3JkU3RhcnQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5jaGFuZ2VTb3VyY2UoeyBwaHJhc2U6IFwiXCIgfSk7XHJcbiAgICAgIH0pXHJcblxyXG4gICAgICB0aGlzLnZvaWNlSW5wdXRTZXJ2aWNlLm9uVHJhbnNjcmlidGlvblRleHRVcGRhdGVkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBJVHJhbnNjcmlwdGlvblVwZGF0ZU1vZGVsKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLmNoYW5nZVNvdXJjZSh7IHBocmFzZTogZXZlbnQudGV4dCwgc3dhcFN5c3RlbXM6IGZhbHNlLCBkaXNhYmxlQXV0b21hdGljVHJhbnNsYXRpb246ICFldmVudC5jb21wbGV0ZWQgfSk7XHJcbiAgICAgICAgICBpZiAoZXZlbnQuY29tcGxldGVkICYmICghZXZlbnQudGV4dCB8fCBldmVudC50ZXh0ID09PSBcIlwiKSkge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0cy53YXJuaW5nKGBFUlJPUlMuQVVESU8uJHtBdWRpb0Vycm9yQ2FzZS5OT19URVhUX1JFQ09HTklaRUR9YClcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29weSgpIHtcclxuICAgIHRoaXMuY2xpcGJvYXJkLmNvcHkodGhpcy50cmFuc2xhdGVkVGV4dCk7XHJcbiAgICB0aGlzLmFsZXJ0cy5zdWNjZXNzKFwiVExEX1RSQU5TTEFURS5URVhUX0NPUElFRFwiLCB7IGlkOiB0aGlzLmNvcHlNZXNzYWdlSWQsIGNsb3NlQnV0dG9uSWQ6IHRoaXMuY29weU1lc3NhZ2VDbG9zZUJ1dHRvbklkLCBwYXJlbnRJZDogdGhpcy5jb3B5QnV0dG9uSWQgfSk7XHJcbiAgfVxyXG5cclxuICBjb3B5U3VtbWFyaXplZFRleHQoKSB7XHJcbiAgICB0aGlzLmNsaXBib2FyZC5jb3B5KHRoaXMuc3VtbWFyaXplZFRleHQpO1xyXG4gICAgdGhpcy5hbGVydHMuc3VjY2VzcyhcIlRMRF9UUkFOU0xBVEUuU1VNTUFSWS5DT1BJRURcIik7XHJcbiAgICB0aGlzLnN1bW1hcnlDb3B5UGxhdXNpYmxlKCk7XHJcbiAgfVxyXG5cclxuICByZWZyZXNoKCkge1xyXG4gICAgdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5vblRyYW5zbGF0ZUJ1dHRvbkNsaWNrKCk7XHJcbiAgICB0aGlzLmNsZWFyU3VtbWFyaXplKCk7XHJcbiAgICB0aGlzLmlzUmVwaHJhc2VBY3RpdmUgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHNob3dSZXBocmFzZU9wdGlvbnMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmlzUmVwaHJhc2VBY3RpdmUgPSB0cnVlO1xyXG4gICAgdGhpcy5zY3JvbGwoJy5yZXBocmFzZS13cmFwcGVyJyk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVTdW1tYXJ5KCkge1xyXG4gICAgdGhpcy5zdW1tYXJpemVkVGV4dCA9ICcnO1xyXG4gICAgdGhpcy5tYXJrZWRTdW1tYXJpemVkVGV4dCA9ICcnO1xyXG4gICAgdGhpcy5pc1N1bW1hcmF6aW5nID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnNjcm9sbCgnLnN1bW1hcnktd3JhcHBlcicpO1xyXG5cclxuICAgIHRoaXMubGxtU2VydmljZVxyXG4gICAgICAuc3VtbWFyaXplKHsgbGFuZ3VhZ2U6IHRoaXMudGFyZ2V0TGFuZ3VhZ2UsIHRleHQ6IHRoaXMudHJhbnNsYXRlZFRleHQsIHVzZUNhc2U6IExMTVN1bW1hcnlVc2VDYXNlLkJyaWVmIH0pXHJcbiAgICAgIC5waXBlKGZpbmFsaXplKCgpID0+ICh0aGlzLmlzU3VtbWFyYXppbmcgPSBmYWxzZSkpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHRoaXMuc3VtbWFyaXplZFRleHQgPSByZXNwb25zZTtcclxuICAgICAgICAgIHRoaXMubWFya2VkU3VtbWFyaXplZFRleHQgPSBtYXJrZWQucGFyc2UocmVzcG9uc2UpIGFzIHN0cmluZztcclxuICAgICAgICB9LFxyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLnN1bW1hcnlQbGF1c2libGUoKTtcclxuICB9XHJcblxyXG4gIHN3aXRjaEZvY3VzRnJvbUNvcHkoZXZlbnQpIHtcclxuICAgIGNvbnN0IGNvcHlNZXNzYWdlQ2xvc2VCdXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmNvcHlNZXNzYWdlQ2xvc2VCdXR0b25JZCk/LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiYnV0dG9uXCIpPy5pdGVtKDApO1xyXG4gICAgaWYgKGNvcHlNZXNzYWdlQ2xvc2VCdXR0b24pIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgY29weU1lc3NhZ2VDbG9zZUJ1dHRvbi5mb2N1cygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZmlsZUNoYW5nZShmaWxlczogRmlsZVtdKSB7XHJcbiAgICB0aGlzLm9uRmlsZUNoYW5nZS5lbWl0KGZpbGVzKTtcclxuICB9XHJcblxyXG4gIGZpbGVVcGxvYWRFcnJvcihlcnJvcjogYW55KSB7XHJcbiAgICB0aGlzLmZpbGVTZXJ2aWNlLmZpbGVVcGxvYWRFcnJvcihlcnJvciBhcyBGaWxlVXBsb2FkRXJyb3IpO1xyXG4gIH1cclxuXHJcbiAgbmF2aWdhdGVUb1RyYW5zbGF0ZWRVcmwoKSB7XHJcbiAgICB3aW5kb3cubG9jYXRpb24ucmVwbGFjZSh0aGlzLnRyYW5zbGF0ZVVybFJlZGlyZWN0KTtcclxuICB9XHJcblxyXG4gIGRpY3RhdGVTdGFydFN0b3AoaXNEaWN0YXRpbmc6IGJvb2xlYW4pIHtcclxuICAgIGNvbnN0IHBocmFzZSA9IGAke3RoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2Uuc291cmNlVGV4dH0ke3RoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2Uuc291cmNlVGV4dD8ubGVuZ3RoID4gMCA/IFwiIFwiIDogXCJcIn0ke3RoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2Uuc291cmNlVGV4dEh5cG90aGVzaXN9YDtcclxuICAgIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UuaXNEaWN0YXRpbmcgPSBpc0RpY3RhdGluZztcclxuICAgIC8vIFRyYW5zbGF0aW9uIGhhcyBlbmRlZC5cclxuICAgIGlmICghaXNEaWN0YXRpbmcpIHtcclxuICAgICAgaWYgKHRoaXMuY29uZmlnLnNwZWVjaENvbmZpZy5vbmxpbmVBc3IucHVuY3R1YXRpb25NZXNzYWdlICYmIHBocmFzZT8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuYWxlcnRzLndhcm5pbmcoXCJBVURJTy5QVU5DVFVBVElPTl9NRVNTQUdFXCIpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLmNoYW5nZVNvdXJjZShcclxuICAgICAgICB7XHJcbiAgICAgICAgICBwaHJhc2UsXHJcbiAgICAgICAgICBkaXNhYmxlQXV0b21hdGljVHJhbnNsYXRpb246IHRoaXMuaXNEaWN0YXRpbmcgfHwgdGhpcy5jb25maWcuYXVkaW9Db25maWcuZGlzYWJsZUF1dG9tYXRpY1RyYW5zbGF0aW9uXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UuY2hhbmdlU291cmNlSHlwb3RoZXNpcyhcIlwiKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLmNsZWFyU291cmNlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkaWN0YXRlUmVzdWx0KHJlc3VsdDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLmNoYW5nZVNvdXJjZUh5cG90aGVzaXMoXCJcIik7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLmNoYW5nZVNvdXJjZSh7IHBocmFzZTogcmVzdWx0LCBkaXNhYmxlQXV0b21hdGljVHJhbnNsYXRpb246IHRoaXMuaXNEaWN0YXRpbmcgfSlcclxuICB9XHJcblxyXG4gIGRpY3RhdGVQYXJ0aWFsUmVzdWx0KHBhcnRpYWxSZXN1bHQ6IHN0cmluZykge1xyXG4gICAgdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5jaGFuZ2VTb3VyY2VIeXBvdGhlc2lzKHBhcnRpYWxSZXN1bHQpO1xyXG4gIH1cclxuXHJcbiAgZGljdGF0ZUVycm9yKGVycm9yOiBBdWRpb0Vycm9yQ2FzZSkge1xyXG4gICAgaWYgKGVycm9yID09PSBBdWRpb0Vycm9yQ2FzZS5NQVhfVElNRV9FWENFRURFRCkge1xyXG4gICAgICBsZXQgdGltZVN0cmluZyA9IFwiXCI7XHJcbiAgICAgIGNvbnN0IG1heExlbmd0aFRpbWUgPSBuZXcgRGF0ZSgwLCAwLCAwLCAwLCAwLCB0aGlzLmNvbmZpZy5zcGVlY2hDb25maWcub25saW5lQXNyLm1heGltdW1SZWNvcmRUaW1lKTtcclxuXHJcbiAgICAgIGNvbnN0IG1pbnV0ZXMgPSBtYXhMZW5ndGhUaW1lLmdldE1pbnV0ZXMoKTtcclxuICAgICAgaWYgKG1pbnV0ZXMgPiAwKSB7XHJcbiAgICAgICAgdGltZVN0cmluZyArPSBgJHttaW51dGVzfSBtaW51dGVzYDtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3Qgc2Vjb25kcyA9IG1heExlbmd0aFRpbWUuZ2V0U2Vjb25kcygpO1xyXG4gICAgICBpZiAoc2Vjb25kcyA+IDApIHtcclxuICAgICAgICB0aW1lU3RyaW5nICs9IGAke3NlY29uZHN9IHNlY29uZHNgXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5hbGVydHMud2FybmluZyhgRVJST1JTLkFVRElPLiR7ZXJyb3J9YCwgeyB0aW1lU3RyaW5nIH0pO1xyXG4gICAgfSBlbHNlIGlmIChlcnJvciA9PT0gQXVkaW9FcnJvckNhc2UuTk9fU1BFRUNIKSB7XHJcbiAgICAgIHRoaXMuYWxlcnRzLndhcm5pbmcoYEVSUk9SUy5BVURJTy4ke2Vycm9yfWApO1xyXG4gICAgfSBlbHNlIGlmIChlcnJvciA9PT0gQXVkaW9FcnJvckNhc2UuTUlDX05PVF9BTExPV0VEKSB7XHJcbiAgICAgIHRoaXMuYWxlcnRzLndhcm5pbmcoYEVSUk9SUy5BVURJTy4ke2Vycm9yfWApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hbGVydHMudW5oYW5kZWxlZEVycm9yKHsgRXJyb3JDb2RlOiBlcnJvciB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsZWFyU291cmNlKCkge1xyXG4gICAgdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5jbGVhclNvdXJjZSgpO1xyXG4gICAgdGhpcy5jbGVhclN1bW1hcml6ZSgpO1xyXG4gICAgdGhpcy5pc1JlcGhyYXNlQWN0aXZlID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2Uuc3RvcExpc3RlbmluZ1RvQ2hhbmdlcygpO1xyXG4gICAgdGhpcy50bGRTY3JvbGxTZXJ2aWNlLnVuc3Vic2NyaWJlVG9TY3JvbGwoKTtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dChudWxsKVxyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VQcm9ncmVzc0luZGljYXRvcigpIHtcclxuICAgIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UuaGlkZVByb2dyZXNzSW5kaWNhdG9yKCk7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnN0b3BUcmFuc2xhdGlvbigpO1xyXG4gIH1cclxuXHJcbiAgb3BlbkZpbGVVcGxvYWQoKTogdm9pZCB7XHJcbiAgICBjb25zdCB1cGxvYWRCdXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcudXBsb2FkLWJ1dHRvbicpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgdXBsb2FkQnV0dG9uLmNsaWNrKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN1bW1hcnlQbGF1c2libGUoKTogdm9pZCB7XHJcbiAgICBQbGF1c2libGVIZWxwZXIuY3VzdG9tRXZlbnQoTExNQWN0aW9ucy5TVU1NQVJZLnRvTG93ZXJDYXNlKCksIHsgYWN0aW9uOiAnc3VtbWFyeScgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN1bW1hcnlDb3B5UGxhdXNpYmxlKCk6IHZvaWQge1xyXG4gICAgUGxhdXNpYmxlSGVscGVyLmN1c3RvbUV2ZW50KExMTUFjdGlvbnMuU1VNTUFSWS50b0xvd2VyQ2FzZSgpLCB7IGFjdGlvbjogJ2NvcHknIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzY3JvbGwoZWxlbWVudENsYXNzTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnRyYW5zbGF0ZWQtc291cmNlJyk7XHJcbiAgICAgIGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKGVsZW1lbnRDbGFzc05hbWUpLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ2NlbnRlcicgfSk7XHJcbiAgICB9LCAxMDApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhclN1bW1hcml6ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3VtbWFyaXplZFRleHQgPSBudWxsO1xyXG4gICAgdGhpcy5tYXJrZWRTdW1tYXJpemVkVGV4dCA9IG51bGw7XHJcbiAgfVxyXG59XHJcbiIsIjwhLS0gTk9URS4gdGxkLXNvdXJjZS1hbmQtdGFyZ2V0LXdyYXBwZXIgdXNlcyBtdWx0aXBsZSBjb250ZW50IHByb2plY3Rpb25zLCBzbyBtaWdodCBzZWVtIGNvbmZ1c2luZyBmaXJzdCwgYnV0IGVsZW1lbnRzIGFyZSBkaXNwbGF5ZWQgYXQgdGhlaXIgcGxhY2VzIGJhc2VkIG9uIHRsZC1zb3VyY2UtYW5kLXRhcmdldC13cmFwcGVyIGNvbXBvbmVudFxyXG5odHRwczovL2FuZ3VsYXIuaW8vZ3VpZGUvY29udGVudC1wcm9qZWN0aW9uI211bHRpLXNsb3QtY29udGVudC1wcm9qZWN0aW9uXHJcbi0tPlxyXG48dGxkLXNvdXJjZS1hbmQtdGFyZ2V0LXdyYXBwZXJcclxuXHRbdGV4dFRvU3BlZWNoU291cmNlU2V0dGluZ3NdPVwidGV4dFRvU3BlZWNoU291cmNlU2V0dGluZ3NcIlxyXG5cdFtjbGVhclNvdXJjZVZpc2libGVdPVwic291cmNlPy5sZW5ndGggPiAwXCJcclxuXHQob25Tb3VyY2VDbGVhcik9XCJjbGVhclNvdXJjZSgpXCJcclxuXHRbY2xlYXJEaXNhYmxlZF09XCJ0ZXh0YXJlYURpc2FibGVkXCJcclxuXHRbY2xlYXJTb3VyY2VUb29sdGlwXT1cIidUTERfVFJBTlNMQVRFLkNMRUFSX1NPVVJDRV9UT09MVElQJ1wiXHJcblx0W25nQ2xhc3NdPVwieyAnaGlnaGxpZ2h0LWFjdGl2ZSc6IGhpZ2hsaWdodCwgJ2VtcHR5LXRhcmdldCc6IGlzRW1wdHlUYXJnZXQgfVwiXHJcbj5cclxuXHQ8ZGl2IHNvdXJjZU1haW4gY2xhc3M9XCJzb3VyY2UtbWFpblwiIGZ4TGF5b3V0PVwiY29sdW1uXCI+XHJcblx0XHQ8dGxkLXRyYW5zbGF0ZS1zb3VyY2UgW3RleHRhcmVhRGlzYWJsZWRdPVwidGV4dGFyZWFEaXNhYmxlZFwiICNzb3VyY2VDb21wb25lbnQgZnhGbGV4IFtzb3VyY2VQYXJhZ3JhcGhzXT1cInNvdXJjZVBhcmFncmFwaHNcIj48L3RsZC10cmFuc2xhdGUtc291cmNlPlxyXG5cdDwvZGl2PlxyXG5cdDxuZy1jb250YWluZXIgZGljdGF0aW9uICpuZ0lmPVwiYXVkaW9JbnB1dFZpc2libGUoKVwiPlxyXG5cdFx0PHRsZC1kaWN0YXRlXHJcblx0XHRcdCNkaWN0YXRlXHJcblx0XHRcdFtjb25maWd1cmF0aW9uXT1cImRpY3RhdGVDb25maWdcIlxyXG5cdFx0XHRbbmdDbGFzc109XCJ7ICdmdWxsLXdpZHRoJzogIWZpbGVVcGxvYWQgfVwiXHJcblx0XHRcdChpc0RpY3RhdGluZyk9XCJkaWN0YXRlU3RhcnRTdG9wKCRldmVudClcIlxyXG5cdFx0XHQocmVzdWx0KT1cImRpY3RhdGVSZXN1bHQoJGV2ZW50KVwiXHJcblx0XHRcdChwYXJ0aWFsUmVzdWx0KT1cImRpY3RhdGVQYXJ0aWFsUmVzdWx0KCRldmVudClcIlxyXG5cdFx0XHQob25FcnJvcik9XCJkaWN0YXRlRXJyb3IoJGV2ZW50KVwiXHJcblx0XHRcdFtzeXN0ZW1JZF09XCJvbmxpbmVBc3JTeXN0ZW1JZCgpXCJcclxuXHRcdD5cclxuXHRcdDwvdGxkLWRpY3RhdGU+XHJcblx0PC9uZy1jb250YWluZXI+XHJcblxyXG5cdDxidXR0b24gY29tcGFjdFVwbG9hZCBtYXQtaWNvbi1idXR0b24gW21hdFRvb2x0aXBdPVwiJ1RPT0xUSVBTLlVQTE9BRCcgfCB0cmFuc2xhdGVcIiBbZGlzYWJsZWRdPVwiZmlsZVVwbG9hZERpc2FibGVkXCIgKGNsaWNrKT1cIm9wZW5GaWxlVXBsb2FkKClcIj5cclxuXHRcdDxtYXQtaWNvbiBbc3ZnSWNvbl09XCIndXBsb2FkJ1wiPjwvbWF0LWljb24+XHJcblx0PC9idXR0b24+XHJcblxyXG5cdDxuZy1jb250YWluZXIgc291cmNlQWN0aW9ucz5cclxuXHRcdDxkaXYgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiIFtjbGFzcy5iYXNpYy1wYWRkaW5nXT1cImZpbGVVcGxvYWRcIiBmeExheW91dEdhcD1cIjFlbVwiPlxyXG5cdFx0XHQ8ZGl2IFtjbGFzcy5oaWRkZW5dPVwiIWZpbGVVcGxvYWRcIiBjbGFzcz1cImZpbGUtdXBsb2FkLXdyYXBwZXJcIj5cclxuXHRcdFx0XHQ8bGliLWZpbGUtdXBsb2FkXHJcblx0XHRcdFx0XHQoZmlsZUNoYW5nZSk9XCJmaWxlQ2hhbmdlKCRldmVudClcIlxyXG5cdFx0XHRcdFx0W2FjY2VwdF09XCJhbGxvd2VkRmlsZVR5cGVzXCJcclxuXHRcdFx0XHRcdFttYXhTaXplXT1cIm1heEZpbGVVcGxvYWRTaXplXCJcclxuXHRcdFx0XHRcdFt1cGxvYWRJY29uTmFtZV09XCJ1cGxvYWRJY29uTmFtZVwiXHJcblx0XHRcdFx0XHRbZXh0ZW5kZWRBY2NlcHRMaXN0XT1cImV4dGVuZGVkRmlsZVR5cGVzXCJcclxuXHRcdFx0XHRcdFttdWx0aXBsZV09XCJtdWx0aXBsZUZpbGVzXCJcclxuXHRcdFx0XHRcdChlcnJvckV2ZW50KT1cImZpbGVVcGxvYWRFcnJvcigkZXZlbnQpXCJcclxuXHRcdFx0XHRcdFtmaWxlUHJldmlld1Byb2dyZXNzXT1cImZpbGVQcmV2aWV3UHJvZ3Jlc3NcIlxyXG5cdFx0XHRcdFx0W2Rpc2FibGVkXT1cImZpbGVVcGxvYWREaXNhYmxlZFwiXHJcblx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJ1cGxvYWQtZmlsZS10ZXh0XCI+XHJcblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiaW5mb1wiPlxyXG5cdFx0XHRcdFx0XHRcdDxzcGFuIFtpbm5lckhUTUxdPVwiJ0ZJTEVfVVBMT0FELlVQTE9BRCcgfCB0cmFuc2xhdGVcIiBjbGFzcz1cImFjY2VudC1jb2xvclwiPjwvc3Bhbj5cclxuXHRcdFx0XHRcdFx0XHQ8c3Bhbj4mbmJzcDs8L3NwYW4+XHJcblx0XHRcdFx0XHRcdFx0PHNwYW4gW2lubmVySFRNTF09XCInRklMRV9VUExPQUQuRFJBR19BTkRfRFJPUCcgfCB0cmFuc2xhdGVcIiBmeEhpZGUubHQtc20+PC9zcGFuPlxyXG5cdFx0XHRcdFx0XHRcdDxzcGFuIFtpbm5lckhUTUxdPVwiJ0ZJTEVfVVBMT0FELicgKyAobXVsdGlwbGVGaWxlcyA/ICdGSUxFUycgOiAnRklMRScpIHwgdHJhbnNsYXRlXCIgW25nQ2xhc3MubHQtc21dPVwiJ2FjY2VudC1jb2xvcidcIj48L3NwYW4+XHJcblx0XHRcdFx0XHRcdDwvc3Bhbj5cclxuXHJcblx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwiZmlsZS11cGxvYWQtZXh0ZW5zaW9ucyB0ZXh0LW1cIj5cclxuXHRcdFx0XHRcdFx0XHQoJm5ic3A7PHNwYW4+e3sgdmlzaWJsZUV4dGVuc2lvbnMgfX0uPC9zcGFuPiZuYnNwO1xyXG5cdFx0XHRcdFx0XHRcdDxzcGFuICpuZ0lmPVwibWF4U2l6ZU1CXCIgY2xhc3M9XCJmaWxlLXVwbG9hZC1tYXgtc2l6ZVwiIFtpbm5lckhUTUxdPVwiJ0ZJTEVfVVBMT0FELkxJTUlUU19NQicgfCB0cmFuc2xhdGUgOiB7IG1heFNpemVNQjogbWF4U2l6ZU1CIH1cIj48L3NwYW4+Jm5ic3A7KVxyXG5cdFx0XHRcdFx0XHQ8L3NwYW4+XHJcblx0XHRcdFx0XHQ8L3NwYW4+XHJcblx0XHRcdFx0PC9saWItZmlsZS11cGxvYWQ+XHJcblx0XHRcdFx0PGxpYi1vcGVuLWV4dGVuc2lvbi1kaWFsb2cgKm5nSWY9XCJzaG93RXh0ZW5zaW9uUG9wdXBcIiBbZXh0ZW5zaW9uc109XCJhbGxvd2VkVHlwZXNXaXRob3V0RG90c1wiPiA8L2xpYi1vcGVuLWV4dGVuc2lvbi1kaWFsb2c+XHJcblx0XHRcdDwvZGl2PlxyXG5cdFx0PC9kaXY+XHJcblx0PC9uZy1jb250YWluZXI+XHJcblxyXG5cdDxkaXYgdGFyZ2V0TWFpbiBjbGFzcz1cInRhcmdldC1tYWluXCI+XHJcblx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiaXNFbXB0eVRhcmdldDsgZWxzZSB0cmFuc2xhdGVkVGV4dEJsb2NrXCI+XHJcblx0XHRcdDxwICpuZ0lmPVwic2hvd1RhcmdldFBsYWNlaG9sZGVyXCIgY2xhc3M9XCJkZXNjcmlwdGlvbi10ZXh0IHRhcmdldC1lbXB0eVwiIFtpbm5lckh0bWxdPVwiJ1RMRF9UUkFOU0xBVEUuVEFSR0VUX0RFU0NSSVBUSU9OJyB8IHRyYW5zbGF0ZVwiPjwvcD5cclxuXHRcdDwvbmctY29udGFpbmVyPlxyXG5cdDwvZGl2PlxyXG5cclxuXHQ8bmctY29udGFpbmVyIHRhcmdldEFjdGlvbnM+XHJcblx0XHQ8ZGl2IGNsYXNzPVwidGxkLXRyYW5zbGF0ZS10YXJnZXQtZm9vdGVyIGJhc2ljLXBhZGRpbmdcIiAqbmdJZj1cInNob3dQcm9ncmVzc0luZGljYXRvclwiPlxyXG5cdFx0XHQ8cHJvZ3Jlc3MtaW5kaWNhdG9yIChvbkNsb3NlKT1cImNsb3NlUHJvZ3Jlc3NJbmRpY2F0b3IoKVwiICpuZ0lmPVwic2hvd1Byb2dyZXNzSW5kaWNhdG9yXCI+PC9wcm9ncmVzcy1pbmRpY2F0b3I+XHJcblx0XHQ8L2Rpdj5cclxuXHQ8L25nLWNvbnRhaW5lcj5cclxuPC90bGQtc291cmNlLWFuZC10YXJnZXQtd3JhcHBlcj5cclxuXHJcbjwhLS0gdGVtcGxhdGVzIHVzZWQgZm9yIGVsc2UgYmxvY2tzIGluIHRhcmdldCBjb250YWluZXIgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjdHJhbnNsYXRlZFRleHRCbG9jaz5cclxuXHQ8ZGl2IFtjbGFzcy50cmFuc2xhdGVkLXNvdXJjZS1vdmVyZmxvd109XCJ0YXJnZXRXcmFwcGVyT3ZlcmZsb3dcIiBjbGFzcz1cInRyYW5zbGF0ZWQtc291cmNlXCI+XHJcblx0XHQ8bmctY29udGFpbmVyICpuZ0lmPVwiIXVybFRvVHJhbnNsYXRlXCI+XHJcblx0XHRcdDxkaXYgY2xhc3M9XCJ0YXJnZXQtd3JhcHBlci1hY3Rpb24tYnV0dG9uc1wiPlxyXG5cdFx0XHRcdDxidXR0b25cclxuXHRcdFx0XHRcdG1hdC1pY29uLWJ1dHRvblxyXG5cdFx0XHRcdFx0Km5nSWY9XCJmaXJzdFBhcmFncmFwaFRyYW5zbGF0ZWRcIlxyXG5cdFx0XHRcdFx0Y2xhc3M9XCJ0bGQtY29weS10cmFuc2xhdGlvblwiXHJcblx0XHRcdFx0XHQoY2xpY2spPVwiY29weSgpXCJcclxuXHRcdFx0XHRcdFttYXRUb29sdGlwXT1cIidUT09MVElQUy5DT1BZJyB8IHRyYW5zbGF0ZVwiXHJcblx0XHRcdFx0XHRbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImNvcHlNZXNzYWdlSWRcIlxyXG5cdFx0XHRcdFx0W2F0dHIuSWRdPVwiY29weUJ1dHRvbklkXCJcclxuXHRcdFx0XHRcdChrZXlkb3duLlRhYik9XCJzd2l0Y2hGb2N1c0Zyb21Db3B5KCRldmVudClcIlxyXG5cdFx0XHRcdD5cclxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIiBhcmlhLWhpZGRlbj1cImZhbHNlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInQVJJQV9MQUJFTFMuQ09QWScgfCB0cmFuc2xhdGVcIj4gY29udGVudF9jb3B5IDwvc3Bhbj5cclxuXHRcdFx0XHQ8L2J1dHRvbj5cclxuXHJcblx0XHRcdFx0PGJ1dHRvblxyXG5cdFx0XHRcdFx0bWF0LWljb24tYnV0dG9uXHJcblx0XHRcdFx0XHQqbmdJZj1cImZpcnN0UGFyYWdyYXBoVHJhbnNsYXRlZCB8fCB0cmFuc2xhdGlvbkVycm9yXCJcclxuXHRcdFx0XHRcdGNsYXNzPVwidGxkLXJlZnJlc2gtdHJhbnNsYXRpb25cIlxyXG5cdFx0XHRcdFx0W21hdFRvb2x0aXBdPVwiJ1RPT0xUSVBTLlJFRlJFU0gnIHwgdHJhbnNsYXRlXCJcclxuXHRcdFx0XHRcdChjbGljayk9XCJyZWZyZXNoKClcIlxyXG5cdFx0XHRcdD5cclxuXHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnNcIiBhcmlhLWhpZGRlbj1cImZhbHNlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInQVJJQV9MQUJFTFMuUkVGUkVTSCcgfCB0cmFuc2xhdGVcIj4gcmVmcmVzaCA8L3NwYW4+XHJcblx0XHRcdFx0PC9idXR0b24+XHJcblxyXG5cdFx0XHRcdDxkaXYgW21hdFRvb2x0aXBdPVwiJ1RMRF9UUkFOU0xBVEUuUkVQSFJBU0UuVE9PTFRJUCcgfCB0cmFuc2xhdGVcIj5cclxuXHRcdFx0XHRcdEBpZiAoaXNMbG1FbmFibGVkICYmIGZpcnN0UGFyYWdyYXBoVHJhbnNsYXRlZCkge1xyXG5cdFx0XHRcdFx0PGxpYi1uZXctZmVhdHVyZS1kaWFsb2ctd3JhcHBlclxyXG5cdFx0XHRcdFx0XHQjcmVwaHJhc2VGZWF0dXJlXHJcblx0XHRcdFx0XHRcdFt0aXRsZUxvY2FsaXphdGlvbktleV09XCInVExEX1RSQU5TTEFURS5SRVBIUkFTRS5ORVdfRkVBVFVSRS5USVRMRSdcIlxyXG5cdFx0XHRcdFx0XHRbZGVzY3JpcHRpb25Mb2NhbGl6YXRpb25LZXldPVwiJ1RMRF9UUkFOU0xBVEUuUkVQSFJBU0UuTkVXX0ZFQVRVUkUuREVTQ1JJUFRJT04nXCJcclxuXHRcdFx0XHRcdFx0W2Nsb3NlTG9jYWxpemF0aW9uS2V5XT1cIidUTERfVFJBTlNMQVRFLlJFUEhSQVNFLk5FV19GRUFUVVJFLkNMT1NFJ1wiXHJcblx0XHRcdFx0XHRcdFtmZWF0dXJlQ2xhc3NOYW1lXT1cIid0bGQtcmVwaHJhc2UnXCJcclxuXHRcdFx0XHRcdFx0W2ZlYXR1cmVMb2NhbFN0b3JhZ2VLZXldPVwicmVwaHJhc2VGZWF0dXJlTG9jYWxTdG9yYWdlS2V5XCJcclxuXHRcdFx0XHRcdFx0W3RpbWVvdXRdPVwiMTAwMFwiXHJcblx0XHRcdFx0XHRcdFttYXhXaWR0aF09XCJpc01vYmlsZSA/IDMyMCA6IDQwMFwiXHJcblx0XHRcdFx0XHQ+PC9saWItbmV3LWZlYXR1cmUtZGlhbG9nLXdyYXBwZXI+XHJcblx0XHRcdFx0XHRcdDxidXR0b25cclxuXHRcdFx0XHRcdFx0XHRtYXQtaWNvbi1idXR0b25cclxuXHRcdFx0XHRcdFx0XHRjbGFzcz1cInRsZC1yZXBocmFzZVwiXHJcblx0XHRcdFx0XHRcdFx0W2NsYXNzLnJlcGhyYXNlLWZlYXR1cmUtYWN0aXZlXT1cInJlcGhyYXNlRmVhdHVyZT8uZmVhdHVyZUFjdGl2ZSgpXCJcclxuXHRcdFx0XHRcdFx0XHRbZGlzYWJsZWRdPVwiaXNUcmFuc2xhdGluZyB8fCBpc1N1bW1hcmF6aW5nXCJcclxuXHRcdFx0XHRcdFx0XHQoY2xpY2spPVwic2hvd1JlcGhyYXNlT3B0aW9ucygpXCJcclxuXHRcdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRcdDxtYXQtaWNvbiBbc3ZnSWNvbl09XCIncmVwaHJhc2UnXCIgYXJpYS1oaWRkZW49XCJmYWxzZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0FSSUFfTEFCRUxTLlJFUEhSQVNFJyB8IHRyYW5zbGF0ZVwiPjwvbWF0LWljb24+XHJcblx0XHRcdFx0XHRcdDwvYnV0dG9uPlxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cclxuXHRcdFx0XHQ8ZGl2IFttYXRUb29sdGlwXT1cIihpc1RleHRTdW1tYXJpemFibGUgPyAnVE9PTFRJUFMuQ1JFQVRFX1NVTU1BUlknIDogJ1RMRF9UUkFOU0xBVEUuU1VNTUFSWS5ESVNBQkxFRCcpIHwgdHJhbnNsYXRlXCI+XHJcblx0XHRcdFx0XHRAaWYgKGlzTGxtRW5hYmxlZCAmJiBmaXJzdFBhcmFncmFwaFRyYW5zbGF0ZWQpIHtcclxuXHRcdFx0XHRcdDxsaWItbmV3LWZlYXR1cmUtZGlhbG9nLXdyYXBwZXJcclxuXHRcdFx0XHRcdFx0I3N1bW1hcml6ZUZlYXR1cmVcclxuXHRcdFx0XHRcdFx0W3RpdGxlTG9jYWxpemF0aW9uS2V5XT1cIidUTERfVFJBTlNMQVRFLlNVTU1BUlkuTkVXX0ZFQVRVUkUuVElUTEUnXCJcclxuXHRcdFx0XHRcdFx0W2Rlc2NyaXB0aW9uTG9jYWxpemF0aW9uS2V5XT1cIidUTERfVFJBTlNMQVRFLlNVTU1BUlkuTkVXX0ZFQVRVUkUuREVTQ1JJUFRJT04nXCJcclxuXHRcdFx0XHRcdFx0W2Nsb3NlTG9jYWxpemF0aW9uS2V5XT1cIidUTERfVFJBTlNMQVRFLlNVTU1BUlkuTkVXX0ZFQVRVUkUuQ0xPU0UnXCJcclxuXHRcdFx0XHRcdFx0W2ZlYXR1cmVDbGFzc05hbWVdPVwiJ3RsZC1jcmVhdGUtc3VtbWFyeSdcIlxyXG5cdFx0XHRcdFx0XHRbZmVhdHVyZUxvY2FsU3RvcmFnZUtleV09XCJzdW1tYXJpemVGZWF0dXJlTG9jYWxTdG9yYWdlS2V5XCJcclxuXHRcdFx0XHRcdFx0W3RpbWVvdXRdPVwiMTAwMFwiXHJcblx0XHRcdFx0XHQ+PC9saWItbmV3LWZlYXR1cmUtZGlhbG9nLXdyYXBwZXI+XHJcblxyXG5cdFx0XHRcdFx0PGJ1dHRvblxyXG5cdFx0XHRcdFx0XHRtYXQtaWNvbi1idXR0b25cclxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJ0bGQtY3JlYXRlLXN1bW1hcnlcIlxyXG5cdFx0XHRcdFx0XHRbY2xhc3Muc3VtbWFyaXplLWZlYXR1cmUtYWN0aXZlXT1cInN1bW1hcml6ZUZlYXR1cmU/LmZlYXR1cmVBY3RpdmUoKVwiXHJcblx0XHRcdFx0XHRcdFtkaXNhYmxlZF09XCJpc1RyYW5zbGF0aW5nIHx8IGlzU3VtbWFyYXppbmcgfHwgIWlzVGV4dFN1bW1hcml6YWJsZVwiXHJcblx0XHRcdFx0XHRcdChjbGljayk9XCJjcmVhdGVTdW1tYXJ5KClcIlxyXG5cdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHQ8bWF0LWljb24gW3N2Z0ljb25dPVwiJ3N1bW1hcml6ZSdcIiBhcmlhLWhpZGRlbj1cImZhbHNlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInQVJJQV9MQUJFTFMuQ1JFQVRFX1NVTU1BUlknIHwgdHJhbnNsYXRlXCI+PC9tYXQtaWNvbj5cclxuXHRcdFx0XHRcdDwvYnV0dG9uPlxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdDwvZGl2PlxyXG5cdFx0XHRcdDx0bGQtdGV4dC10by1zcGVlY2ggKm5nSWY9XCJ0ZXh0VG9TcGVlY2hUYXJnZXRTZXR0aW5ncyAmJiBmaXJzdFBhcmFncmFwaFRyYW5zbGF0ZWRcIiBbc2V0dGluZ3NdPVwidGV4dFRvU3BlZWNoVGFyZ2V0U2V0dGluZ3NcIj4gPC90bGQtdGV4dC10by1zcGVlY2g+XHJcblx0XHRcdDwvZGl2PlxyXG5cclxuXHRcdFx0PGRpdiBjbGFzcz1cImhpZ2hsaWdodC10cmVlLXdyYXBwZXJcIj5cclxuXHRcdFx0XHQ8dGxkLWhpZ2hsaWdodC10cmVlICpuZ0Zvcj1cImxldCBwYXJhZ3JhcGggb2YgdGFyZ2V0UGFyYWdyYXBoc1wiIFtoaWdobGlnaHRdPVwiaGlnaGxpZ2h0XCIgW3RyZWVdPVwicGFyYWdyYXBoXCI+IDwvdGxkLWhpZ2hsaWdodC10cmVlPlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHJcblx0XHRcdDxkaXYgKm5nSWY9XCJpc1N1bW1hcmF6aW5nIHx8IHN1bW1hcml6ZWRUZXh0XCIgY2xhc3M9XCJzdW1tYXJ5LXdyYXBwZXJcIj5cclxuXHRcdFx0XHQ8cCBjbGFzcz1cInN1bW1hcnktdGl0bGVcIj57eyBcIlRMRF9UUkFOU0xBVEUuU1VNTUFSWS5USVRMRVwiIHwgdHJhbnNsYXRlIH19PC9wPlxyXG5cclxuXHRcdFx0XHQ8cCAqbmdJZj1cImlzU3VtbWFyYXppbmdcIiBjbGFzcz1cImNyZWF0aW5nLXByb2dyZXNzXCI+e3sgXCJUTERfVFJBTlNMQVRFLlNVTU1BUlkuQ1JFQVRJTkdcIiB8IHRyYW5zbGF0ZSB9fTxzcGFuIGNsYXNzPVwiZG90LWxvYWRpbmdcIj4uLi48L3NwYW4+PC9wPlxyXG5cclxuXHRcdFx0XHQ8cCBbaW5uZXJIVE1MXT1cIm1hcmtlZFN1bW1hcml6ZWRUZXh0XCI+PC9wPlxyXG5cclxuXHRcdFx0XHQ8YnV0dG9uXHJcblx0XHRcdFx0XHRtYXQtaWNvbi1idXR0b25cclxuXHRcdFx0XHRcdCpuZ0lmPVwic3VtbWFyaXplZFRleHRcIlxyXG5cdFx0XHRcdFx0W25nQ2xhc3MubHQtc21dPVwiJ3N1bW1hcnktbW9iaWxlJ1wiXHJcblx0XHRcdFx0XHRjbGFzcz1cInN1bW1hcnktY29weS1idG5cIlxyXG5cdFx0XHRcdFx0KGNsaWNrKT1cImNvcHlTdW1tYXJpemVkVGV4dCgpXCJcclxuXHRcdFx0XHRcdFttYXRUb29sdGlwXT1cIidUT09MVElQUy5DT1BZJyB8IHRyYW5zbGF0ZVwiXHJcblx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29uc1wiIGFyaWEtaGlkZGVuPVwiZmFsc2VcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidBUklBX0xBQkVMUy5DT1BZJyB8IHRyYW5zbGF0ZVwiPiBjb250ZW50X2NvcHkgPC9zcGFuPlxyXG5cdFx0XHRcdDwvYnV0dG9uPlxyXG5cdFx0XHQ8L2Rpdj5cclxuXHJcblx0XHRcdDxkaXYgKm5nSWY9XCJpc1JlcGhyYXNlQWN0aXZlXCIgY2xhc3M9XCJyZXBocmFzZS13cmFwcGVyXCI+XHJcblx0XHRcdFx0PHRsZC1yZXBocmFzZSBbdGV4dF09XCJ0cmFuc2xhdGVkVGV4dFwiIFtkaXNhYmxlZF09XCJpc1RyYW5zbGF0aW5nXCIgW2xhbmd1YWdlXT1cInRhcmdldExhbmd1YWdlXCI+PC90bGQtcmVwaHJhc2U+XHJcblx0XHRcdDwvZGl2Plx0XHJcblxyXG5cdFx0XHQ8ZGl2ICpuZ0lmPVwiZmlyc3RQYXJhZ3JhcGhUcmFuc2xhdGVkICYmIGRpY3Rpb25hcnlFbnRyeVwiIGNsYXNzPVwiZGljdGlvbmFyeS13cmFwcGVyXCI+XHJcblx0XHRcdFx0PHRsZC1kaWN0aW9uYXJ5IFtkaWN0aW9uYXJ5XT1cImRpY3Rpb25hcnlFbnRyeVwiPjwvdGxkLWRpY3Rpb25hcnk+XHJcblx0XHRcdDwvZGl2PlxyXG5cdFx0PC9uZy1jb250YWluZXI+XHJcblxyXG5cdFx0PGRpdiAqbmdJZj1cInVybFRvVHJhbnNsYXRlXCIgY2xhc3M9XCJ0YXJnZXQtdXJsLWNvbnRhaW5lclwiPlxyXG5cdFx0XHQ8YSBbYXR0ci5ocmVmXT1cInRyYW5zbGF0ZVVybFJlZGlyZWN0XCIgdGFyZ2V0PVwiX2JsYW5rXCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiIGNsYXNzPVwiZ28tdG8td2VidHJhbnNsYXRlXCI+XHJcblx0XHRcdFx0e3sgdXJsVG9UcmFuc2xhdGUgfX1cclxuXHRcdFx0XHQ8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zXCIgY29sb3I9XCJhY2NlbnRcIiBhcmlhLWhpZGRlbj1cImZhbHNlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInQVJJQV9MQUJFTFMuT1BFTl9JTl9ORVcnXCI+IG9wZW5faW5fbmV3IDwvc3Bhbj5cclxuXHRcdFx0PC9hPlxyXG5cdFx0PC9kaXY+XHJcblx0PC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
@@ -1,7 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Injectable, Optional, Inject, inject, signal, Pipe, Component, EventEmitter, ViewChild, Input, Output, NgModule, input, computed, HostListener } from '@angular/core';
3
3
  import * as i5 from '@tilde-nlp/ngx-common';
4
- import { SystemService, AlertService, LAST_USED_SYSTEM_LOCAL_STORAGE_KEY, SortHelper, OpenCloseButtonComponent, CloseButtonModule, SortTranslationsModule, OpenCloseButtonModule, LanguageTranslateModule, InlineMessageType, InlineMessageIconPosition, InlineMessageModule, AuthHeadersHelper, ConversionHelper, FileExtensionHelper, FileExtensions, NotificationMessageType, FileUploadModule, HtmlHelper, ResolutionHelper, HashHelper, ExtensionDialogModule, NewFeatureDialogWrapperComponent, FilterWithHighlightPipe, DomainTranslatePipe, FilterWithHighlightModule, ClickOutsideModule, TerminologyModule, SortDomainsPipe, NotificationMessageModule, CompanyProductModule, StatusDisplayModule, ALERT_CONFIGURATION_TOKEN } from '@tilde-nlp/ngx-common';
4
+ import { SystemService, AlertService, LAST_USED_SYSTEM_LOCAL_STORAGE_KEY, SortHelper, OpenCloseButtonComponent, CloseButtonModule, SortTranslationsModule, OpenCloseButtonModule, LanguageTranslateModule, InlineMessageType, InlineMessageIconPosition, InlineMessageModule, AuthHeadersHelper, ConversionHelper, FileExtensionHelper, FileExtensions, NotificationMessageType, FileUploadModule, HtmlHelper, PlausibleHelper, LLMActions, ResolutionHelper, HashHelper, ExtensionDialogModule, NewFeatureDialogWrapperComponent, FilterWithHighlightPipe, DomainTranslatePipe, FilterWithHighlightModule, ClickOutsideModule, TerminologyModule, SortDomainsPipe, NotificationMessageModule, CompanyProductModule, StatusDisplayModule, ALERT_CONFIGURATION_TOKEN } from '@tilde-nlp/ngx-common';
5
5
  import { ReplaySubject, Subject, BehaviorSubject, of, timer, throwError, forkJoin, finalize, takeUntil as takeUntil$1 } from 'rxjs';
6
6
  import * as i5$2 from '@tilde-nlp/ngx-services';
7
7
  import { ResourceService, ResourceType, TextToSpeechService, QuotaType, LLMService, LLMWritingStyle, LLMRephraseUseCase, LLMSummaryUseCase } from '@tilde-nlp/ngx-services';
@@ -7898,6 +7898,7 @@ class RephraseComponent {
7898
7898
  this.markedRephrasedText.set('');
7899
7899
  this.setSelectedWritingStyle(style);
7900
7900
  this.isLoading.set(true);
7901
+ this.rephrasePlausible();
7901
7902
  this.#llm
7902
7903
  .rephrase({
7903
7904
  useCase: LLMRephraseUseCase.General,
@@ -7918,11 +7919,18 @@ class RephraseComponent {
7918
7919
  copyRephraseText() {
7919
7920
  this.#clipboard.copy(this.rephrasedText());
7920
7921
  this.#alerts.success('TLD_TRANSLATE.REPHRASE.COPIED');
7922
+ this.copyPlausible();
7921
7923
  }
7922
7924
  setSelectedWritingStyle(style) {
7923
7925
  this.selectedRephrasingStyle.set(style);
7924
7926
  localStorage.setItem(this.rephraseStyleLocalStorageKey, style);
7925
7927
  }
7928
+ rephrasePlausible() {
7929
+ PlausibleHelper.customEvent(LLMActions.REPHRASE.toLowerCase(), { writingStyle: this.selectedRephrasingStyle() });
7930
+ }
7931
+ copyPlausible() {
7932
+ PlausibleHelper.customEvent(LLMActions.REPHRASE.toLowerCase(), { action: 'copy' });
7933
+ }
7926
7934
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RephraseComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
7927
7935
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: RephraseComponent, isStandalone: true, selector: "tld-rephrase", inputs: { text: { classPropertyName: "text", publicName: "text", isSignal: true, isRequired: false, transformFunction: null }, language: { classPropertyName: "language", publicName: "language", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<lib-open-close-button\r\n\t[ngClass.lt-sm]=\"'mobile'\"\r\n\tclass=\"rephrase-menu-btn\"\r\n\t#state=\"matMenuTrigger\"\r\n\t[matMenuTriggerFor]=\"rephraseStylesMenu\"\r\n\t[isOpened]=\"state.menuOpen\"\r\n\t[disabled]=\"disabled()\"\r\n>\r\n\t<span class=\"rephrase-title\">{{ \"TLD_TRANSLATE.REPHRASE.TITLE\" | translate }} ({{ selectedRephrasingStyle() ?? \"TLD_TRANSLATE.REPHRASE.CHOOSE_LABEL\" | translate }})</span>\r\n</lib-open-close-button>\r\n\r\n<mat-menu #rephraseStylesMenu=\"matMenu\" class=\"rephrase-menu\">\r\n\t@for (style of rephraseStyles; track style) {\r\n\t<button mat-menu-item (click)=\"rephrase(style)\">\r\n\t\t{{ \"TLD_TRANSLATE.REPHRASE.STYLES.\" + (style | uppercase) | translate }}\r\n\t</button>\r\n\t}\r\n</mat-menu>\r\n\r\n@if (isLoading()) {\r\n<p class=\"rephrasing\">{{ \"TLD_TRANSLATE.REPHRASE.LOADING\" | translate }}<span class=\"dot-loading\">...</span></p>\r\n} @if(!selectedRephrasingStyle()) {\r\n<p class=\"rephrase-hint\">{{ \"TLD_TRANSLATE.REPHRASE.HINT\" | translate }}</p>\r\n}\r\n\r\n<p [innerHTML]=\"markedRephrasedText()\"></p>\r\n\r\n@if (rephrasedText()) {\r\n<button mat-icon-button [ngClass.lt-sm]=\"'rephrase-mobile'\" class=\"rephrase-copy-btn\" (click)=\"copyRephraseText()\" [matTooltip]=\"'TOOLTIPS.COPY' | translate\">\r\n\t<span class=\"material-icons\" aria-hidden=\"false\" [attr.aria-label]=\"'ARIA_LABELS.COPY' | translate\"> content_copy </span>\r\n</button>\r\n}\r\n", styles: ["p{margin-top:16px}.rephrase-menu-btn:not(.mobile){margin-left:-8px}.rephrase-title{font-size:16px;color:var(--base-30)}.rephrase-hint,.rephrasing{font-style:italic;color:var(--base-40)}.rephrase-copy-btn{position:absolute;right:-45px;top:20px}.rephrase-mobile{right:-46px}.mobile.rephrase-menu-btn{display:block;width:fit-content}::ng-deep .cdk-overlay-container .rephrase-menu{margin:8px!important;min-width:175px!important}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$1.UpperCasePipe, name: "uppercase" }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i6.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i6.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i6.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: OpenCloseButtonModule }, { kind: "component", type: i5.OpenCloseButtonComponent, selector: "lib-open-close-button", inputs: ["disableFocusOnAction", "disabled", "isIcon", "ariaLabelCode", "isOpened"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: FlexLayoutModule }, { kind: "directive", type: i5$1.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }] });
7928
7936
  }
@@ -8128,6 +8136,7 @@ class TldTranslateTextComponent {
8128
8136
  copySummarizedText() {
8129
8137
  this.clipboard.copy(this.summarizedText);
8130
8138
  this.alerts.success("TLD_TRANSLATE.SUMMARY.COPIED");
8139
+ this.summaryCopyPlausible();
8131
8140
  }
8132
8141
  refresh() {
8133
8142
  this.translateTextService.onTranslateButtonClick();
@@ -8152,6 +8161,7 @@ class TldTranslateTextComponent {
8152
8161
  this.markedSummarizedText = marked.parse(response);
8153
8162
  },
8154
8163
  });
8164
+ this.summaryPlausible();
8155
8165
  }
8156
8166
  switchFocusFromCopy(event) {
8157
8167
  const copyMessageCloseButton = document.getElementById(this.copyMessageCloseButtonId)?.getElementsByTagName("button")?.item(0);
@@ -8237,6 +8247,12 @@ class TldTranslateTextComponent {
8237
8247
  const uploadButton = document.querySelector('.upload-button');
8238
8248
  uploadButton.click();
8239
8249
  }
8250
+ summaryPlausible() {
8251
+ PlausibleHelper.customEvent(LLMActions.SUMMARY.toLowerCase(), { action: 'summary' });
8252
+ }
8253
+ summaryCopyPlausible() {
8254
+ PlausibleHelper.customEvent(LLMActions.SUMMARY.toLowerCase(), { action: 'copy' });
8255
+ }
8240
8256
  scroll(elementClassName) {
8241
8257
  setTimeout(() => {
8242
8258
  const container = document.querySelector('.translated-source');