@cuby-ui/core 0.0.236 → 0.0.237

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.
@@ -10,7 +10,7 @@ export declare class CuiButtonComponent implements CuiButtonOptions, OnInit {
10
10
  protected readonly AppearanceIconColors: Record<CuiButtonOptions['appearance'], string>;
11
11
  protected readonly COLOR_BASE_500 = "var(--cui-base-500)";
12
12
  protected readonly BUTTON_ICONS_COLOR_BASE_500: CuiButtonOptions['appearance'][];
13
- protected _appearance: "action" | "secondary" | "outlined" | "outlined-gray" | "ghost" | "flat" | "destructive" | "link";
13
+ protected _appearance: "link" | "flat" | "action" | "secondary" | "outlined" | "outlined-gray" | "ghost" | "destructive";
14
14
  protected iconColor: string;
15
15
  protected _size: "xxs" | "xs" | "sm" | "md";
16
16
  protected iconDimensions: {
@@ -64,6 +64,7 @@ export class CuiUtilityInfoComponent {
64
64
  });
65
65
  this.heading = null;
66
66
  this.title = input.required();
67
+ this.description = input.required();
67
68
  this.framerId = input.required();
68
69
  this.baseResourceUrl = input.required();
69
70
  this.config = input.required();
@@ -107,13 +108,13 @@ export class CuiUtilityInfoComponent {
107
108
  if (!title) {
108
109
  return;
109
110
  }
110
- this.initTitleSubscriptions();
111
+ this.initFormSubscriptions();
111
112
  this.initFrameFragments();
112
113
  effectRef.destroy();
113
114
  });
114
115
  }
115
- initTitleSubscriptions() {
116
- this.form.patchValue({ title: this.title() });
116
+ initFormSubscriptions() {
117
+ this.form.setValue({ title: this.title(), description: this.description() }, { emitEvent: false });
117
118
  this.form.statusChanges
118
119
  .pipe(takeUntilDestroyed(this.destroy))
119
120
  .subscribe(() => this.isFormValidChanged.emit(this.checkFormValidation()));
@@ -227,7 +228,7 @@ export class CuiUtilityInfoComponent {
227
228
  return !this.isDescriptionEmpty() && !this.form.invalid;
228
229
  }
229
230
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiUtilityInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
230
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CuiUtilityInfoComponent, isStandalone: true, selector: "cui-utility-info", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: true, transformFunction: null }, framerId: { classPropertyName: "framerId", publicName: "framerId", isSignal: true, isRequired: true, transformFunction: null }, baseResourceUrl: { classPropertyName: "baseResourceUrl", publicName: "baseResourceUrl", isSignal: true, isRequired: true, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { formChanged: "formChanged", isFormValidChanged: "isFormValidChanged" }, ngImport: i0, template: "<ng-container *transloco=\"let t\">\r\n <section class=\"content\">\r\n <cui-form-field>\r\n <label cuiLabel [isRequired]=\"true\" [for]=\"titleId\">\r\n {{ t('TITLE') }}\r\n </label>\r\n <cui-input-text\r\n [cuiTextFieldId]=\"titleId\"\r\n [cuiTextFieldPlaceholder]=\"t('ADD_TITLE')\"\r\n [cuiTextFieldIsError]=\"isTitleError\"\r\n [formControl]=\"form.controls.title\"\r\n />\r\n @if (isTitleError) {\r\n <cui-general-control-error-hint [control]=\"form.controls.title\" [isVisible]=\"true\" />\r\n }\r\n </cui-form-field>\r\n <cui-form-field>\r\n <label cuiLabel [isRequired]=\"true\" [for]=\"descriptionId\">\r\n {{ t('SHORT_DESCRIPTION') }}\r\n </label>\r\n <cui-input-text\r\n [cuiTextFieldId]=\"descriptionId\"\r\n cuiTextFieldPlaceholder=\"{{t('SHORT_DESCRIPTION')}}...\"\r\n [cuiTextFieldIsError]=\"isDescriptionError\"\r\n [formControl]=\"form.controls.description\"\r\n />\r\n @if (isDescriptionError) {\r\n <cui-general-control-error-hint [control]=\"form.controls.description\" [isVisible]=\"true\" />\r\n }\r\n </cui-form-field>\r\n <section class=\"file\">\r\n <span class=\"title\">{{ t('THUMBNAIL') }}</span>\r\n <div class=\"content__upload\">\r\n <div class=\"content__upload-file\">\r\n @if (thumbnail()?.name; as fileId) {\r\n <div class=\"image\">\r\n <span class=\"image__name\">{{ thumbnail()?.name }}</span>\r\n <!-- TODO: ngSrc -->\r\n <img class=\"image__view\" [src]=\"thumbnailUrl()\" height=\"120\" width=\"184\" alt=\"Thumbnail\" />\r\n </div>\r\n }\r\n <div class=\"content__info\">\r\n <button type=\"button\" cuiButton appearance=\"outlined-gray\" size=\"xxs\" icon=\"cuiIconUpload\"\r\n (click)=\"onSelectFile()\">\r\n {{ uploadButtonName() }}\r\n </button>\r\n @if (thumbnail()?.name) {\r\n <button class=\"content__remove-button\" cuiButton appearance=\"link\" size=\"sm\" type=\"button\"\r\n (click)=\"onRemoveThumbnail()\">\r\n {{ t('REMOVE') }}\r\n </button>\r\n }\r\n\r\n <span class=\"content__accepted\">\r\n {{ t('ACCEPTED') }}: JPG, JPEG, PNG, MP4 {{ t('UP_TO') }} 20MB\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n @if (editorId(); as editorId) {\r\n <cui-editor-block\r\n [title]=\"form.controls.title.value || title()\"\r\n [config]=\"config()\"\r\n [editorId]=\"editorId\"\r\n [required]=\"true\"\r\n (editorEmpty)=\"onEditorEmpty($event)\"\r\n ></cui-editor-block>\r\n }\r\n </section>\r\n</ng-container>\r\n", styles: ["::ng-deep cui-dialog:has(.instruction-description-modal){inset:0;margin:auto;transform:none!important}:host{display:block}.title{font-weight:500;font-size:14px;line-height:20px;display:flex;gap:2px}.title_required{color:var(--cui-danger)}.content{display:flex;flex-direction:column;gap:16px;padding:16px 24px}.content__upload{padding:12px 16px;border-radius:8px;border:1px solid var(--cui-base-200);background:var(--cui-base-10)}.content__info{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.content__accepted{color:var(--cui-base-500)}.content__upload-file{display:flex;align-items:center;gap:8px}.content__upload-file input[type=file]{display:none}.content__remove-button ::ng-deep .c-content{color:var(--cui-danger)!important}.file{display:flex;flex-direction:column;gap:4px}.description_invalid{border:1px solid var(--cui-danger)}.image{position:relative;display:inline-block}.image__view{border-radius:8px;object-fit:cover}.image__name{position:absolute;top:6px;left:14px;color:var(--cui-base-0);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:170px;z-index:1}.image:after{content:\"\";position:absolute;top:0;left:0;width:100%;height:100%;background-color:#0003;z-index:0;pointer-events:none;border-radius:8px}.button-save{margin-left:auto}.instruction-description-modal{text-transform:none}.empty{padding:16px;color:var(--cui-base-500);text-align:center}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CuiAccordionModule) }, { kind: "ngmodule", type: i0.forwardRef(() => CuiButtonModule) }, { kind: "component", type: i0.forwardRef(() => i1.CuiButtonComponent), selector: "button[cuiButton], a[cuiButton]", inputs: ["shape", "disabled", "isLoaderShown", "icon", "iconRight", "appearance", "size"] }, { kind: "ngmodule", type: i0.forwardRef(() => CuiFormFieldModule) }, { kind: "component", type: i0.forwardRef(() => i2.CuiFormFieldComponent), selector: "cui-form-field" }, { kind: "ngmodule", type: i0.forwardRef(() => CuiHintModule) }, { kind: "ngmodule", type: i0.forwardRef(() => CuiInputModule) }, { kind: "component", type: i0.forwardRef(() => i3.CuiInputTextComponent), selector: "cui-input-text" }, { kind: "directive", type: i0.forwardRef(() => i4.CuiTextFieldIdDirective), selector: "[cuiTextFieldId]", inputs: ["cuiTextFieldId"] }, { kind: "directive", type: i0.forwardRef(() => i5.CuiTextFieldPlaceholderDirective), selector: "[cuiTextFieldPlaceholder]", inputs: ["cuiTextFieldPlaceholder"] }, { kind: "directive", type: i0.forwardRef(() => i6.CuiTextFieldIsErrorDirective), selector: "[cuiTextFieldIsError]", inputs: ["cuiTextFieldIsError"] }, { kind: "ngmodule", type: i0.forwardRef(() => CuiLabelModule) }, { kind: "component", type: i0.forwardRef(() => i7.CuiLabelComponent), selector: "label[cuiLabel]", inputs: ["isRequired"] }, { kind: "component", type: i0.forwardRef(() => CuiEditorBlockComponent), selector: "cui-editor-block", inputs: ["title", "editorId", "config", "required"], outputs: ["editorEmpty"] }, { kind: "component", type: i0.forwardRef(() => CuiGeneralControlErrorHintComponent), selector: "cui-general-control-error-hint", inputs: ["control", "isVisible"] }, { kind: "ngmodule", type: i0.forwardRef(() => ReactiveFormsModule) }, { kind: "directive", type: i0.forwardRef(() => i8.NgControlStatus), selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i0.forwardRef(() => i8.FormControlDirective), selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i0.forwardRef(() => TranslocoDirective), selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
231
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CuiUtilityInfoComponent, isStandalone: true, selector: "cui-utility-info", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: true, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: true, transformFunction: null }, framerId: { classPropertyName: "framerId", publicName: "framerId", isSignal: true, isRequired: true, transformFunction: null }, baseResourceUrl: { classPropertyName: "baseResourceUrl", publicName: "baseResourceUrl", isSignal: true, isRequired: true, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { formChanged: "formChanged", isFormValidChanged: "isFormValidChanged" }, ngImport: i0, template: "<ng-container *transloco=\"let t\">\r\n <section class=\"content\">\r\n <cui-form-field>\r\n <label cuiLabel [isRequired]=\"true\" [for]=\"titleId\">\r\n {{ t('TITLE') }}\r\n </label>\r\n <cui-input-text\r\n [cuiTextFieldId]=\"titleId\"\r\n [cuiTextFieldPlaceholder]=\"t('ADD_TITLE')\"\r\n [cuiTextFieldIsError]=\"isTitleError\"\r\n [formControl]=\"form.controls.title\"\r\n />\r\n @if (isTitleError) {\r\n <cui-general-control-error-hint [control]=\"form.controls.title\" [isVisible]=\"true\" />\r\n }\r\n </cui-form-field>\r\n <cui-form-field>\r\n <label cuiLabel [isRequired]=\"true\" [for]=\"descriptionId\">\r\n {{ t('SHORT_DESCRIPTION') }}\r\n </label>\r\n <cui-input-text\r\n [cuiTextFieldId]=\"descriptionId\"\r\n cuiTextFieldPlaceholder=\"{{t('SHORT_DESCRIPTION')}}...\"\r\n [cuiTextFieldIsError]=\"isDescriptionError\"\r\n [formControl]=\"form.controls.description\"\r\n />\r\n @if (isDescriptionError) {\r\n <cui-general-control-error-hint [control]=\"form.controls.description\" [isVisible]=\"true\" />\r\n }\r\n </cui-form-field>\r\n <section class=\"file\">\r\n <span class=\"title\">{{ t('THUMBNAIL') }}</span>\r\n <div class=\"content__upload\">\r\n <div class=\"content__upload-file\">\r\n @if (thumbnail()?.name; as fileId) {\r\n <div class=\"image\">\r\n <span class=\"image__name\">{{ thumbnail()?.name }}</span>\r\n <!-- TODO: ngSrc -->\r\n <img class=\"image__view\" [src]=\"thumbnailUrl()\" height=\"120\" width=\"184\" alt=\"Thumbnail\" />\r\n </div>\r\n }\r\n <div class=\"content__info\">\r\n <button type=\"button\" cuiButton appearance=\"outlined-gray\" size=\"xxs\" icon=\"cuiIconUpload\"\r\n (click)=\"onSelectFile()\">\r\n {{ uploadButtonName() }}\r\n </button>\r\n @if (thumbnail()?.name) {\r\n <button class=\"content__remove-button\" cuiButton appearance=\"link\" size=\"sm\" type=\"button\"\r\n (click)=\"onRemoveThumbnail()\">\r\n {{ t('REMOVE') }}\r\n </button>\r\n }\r\n\r\n <span class=\"content__accepted\">\r\n {{ t('ACCEPTED') }}: JPG, JPEG, PNG, MP4 {{ t('UP_TO') }} 20MB\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n @if (editorId(); as editorId) {\r\n <cui-editor-block\r\n [title]=\"form.controls.title.value || title()\"\r\n [config]=\"config()\"\r\n [editorId]=\"editorId\"\r\n [required]=\"true\"\r\n (editorEmpty)=\"onEditorEmpty($event)\"\r\n ></cui-editor-block>\r\n }\r\n </section>\r\n</ng-container>\r\n", styles: ["::ng-deep cui-dialog:has(.instruction-description-modal){inset:0;margin:auto;transform:none!important}:host{display:block}.title{font-weight:500;font-size:14px;line-height:20px;display:flex;gap:2px}.title_required{color:var(--cui-danger)}.content{display:flex;flex-direction:column;gap:16px;padding:16px 24px}.content__upload{padding:12px 16px;border-radius:8px;border:1px solid var(--cui-base-200);background:var(--cui-base-10)}.content__info{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.content__accepted{color:var(--cui-base-500)}.content__upload-file{display:flex;align-items:center;gap:8px}.content__upload-file input[type=file]{display:none}.content__remove-button ::ng-deep .c-content{color:var(--cui-danger)!important}.file{display:flex;flex-direction:column;gap:4px}.description_invalid{border:1px solid var(--cui-danger)}.image{position:relative;display:inline-block}.image__view{border-radius:8px;object-fit:cover}.image__name{position:absolute;top:6px;left:14px;color:var(--cui-base-0);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:170px;z-index:1}.image:after{content:\"\";position:absolute;top:0;left:0;width:100%;height:100%;background-color:#0003;z-index:0;pointer-events:none;border-radius:8px}.button-save{margin-left:auto}.instruction-description-modal{text-transform:none}.empty{padding:16px;color:var(--cui-base-500);text-align:center}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CuiAccordionModule) }, { kind: "ngmodule", type: i0.forwardRef(() => CuiButtonModule) }, { kind: "component", type: i0.forwardRef(() => i1.CuiButtonComponent), selector: "button[cuiButton], a[cuiButton]", inputs: ["shape", "disabled", "isLoaderShown", "icon", "iconRight", "appearance", "size"] }, { kind: "ngmodule", type: i0.forwardRef(() => CuiFormFieldModule) }, { kind: "component", type: i0.forwardRef(() => i2.CuiFormFieldComponent), selector: "cui-form-field" }, { kind: "ngmodule", type: i0.forwardRef(() => CuiHintModule) }, { kind: "ngmodule", type: i0.forwardRef(() => CuiInputModule) }, { kind: "component", type: i0.forwardRef(() => i3.CuiInputTextComponent), selector: "cui-input-text" }, { kind: "directive", type: i0.forwardRef(() => i4.CuiTextFieldIdDirective), selector: "[cuiTextFieldId]", inputs: ["cuiTextFieldId"] }, { kind: "directive", type: i0.forwardRef(() => i5.CuiTextFieldPlaceholderDirective), selector: "[cuiTextFieldPlaceholder]", inputs: ["cuiTextFieldPlaceholder"] }, { kind: "directive", type: i0.forwardRef(() => i6.CuiTextFieldIsErrorDirective), selector: "[cuiTextFieldIsError]", inputs: ["cuiTextFieldIsError"] }, { kind: "ngmodule", type: i0.forwardRef(() => CuiLabelModule) }, { kind: "component", type: i0.forwardRef(() => i7.CuiLabelComponent), selector: "label[cuiLabel]", inputs: ["isRequired"] }, { kind: "component", type: i0.forwardRef(() => CuiEditorBlockComponent), selector: "cui-editor-block", inputs: ["title", "editorId", "config", "required"], outputs: ["editorEmpty"] }, { kind: "component", type: i0.forwardRef(() => CuiGeneralControlErrorHintComponent), selector: "cui-general-control-error-hint", inputs: ["control", "isVisible"] }, { kind: "ngmodule", type: i0.forwardRef(() => ReactiveFormsModule) }, { kind: "directive", type: i0.forwardRef(() => i8.NgControlStatus), selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i0.forwardRef(() => i8.FormControlDirective), selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i0.forwardRef(() => TranslocoDirective), selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
231
232
  }
232
233
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiUtilityInfoComponent, decorators: [{
233
234
  type: Component,
@@ -245,4 +246,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
245
246
  CuiTooltip
246
247
  ], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *transloco=\"let t\">\r\n <section class=\"content\">\r\n <cui-form-field>\r\n <label cuiLabel [isRequired]=\"true\" [for]=\"titleId\">\r\n {{ t('TITLE') }}\r\n </label>\r\n <cui-input-text\r\n [cuiTextFieldId]=\"titleId\"\r\n [cuiTextFieldPlaceholder]=\"t('ADD_TITLE')\"\r\n [cuiTextFieldIsError]=\"isTitleError\"\r\n [formControl]=\"form.controls.title\"\r\n />\r\n @if (isTitleError) {\r\n <cui-general-control-error-hint [control]=\"form.controls.title\" [isVisible]=\"true\" />\r\n }\r\n </cui-form-field>\r\n <cui-form-field>\r\n <label cuiLabel [isRequired]=\"true\" [for]=\"descriptionId\">\r\n {{ t('SHORT_DESCRIPTION') }}\r\n </label>\r\n <cui-input-text\r\n [cuiTextFieldId]=\"descriptionId\"\r\n cuiTextFieldPlaceholder=\"{{t('SHORT_DESCRIPTION')}}...\"\r\n [cuiTextFieldIsError]=\"isDescriptionError\"\r\n [formControl]=\"form.controls.description\"\r\n />\r\n @if (isDescriptionError) {\r\n <cui-general-control-error-hint [control]=\"form.controls.description\" [isVisible]=\"true\" />\r\n }\r\n </cui-form-field>\r\n <section class=\"file\">\r\n <span class=\"title\">{{ t('THUMBNAIL') }}</span>\r\n <div class=\"content__upload\">\r\n <div class=\"content__upload-file\">\r\n @if (thumbnail()?.name; as fileId) {\r\n <div class=\"image\">\r\n <span class=\"image__name\">{{ thumbnail()?.name }}</span>\r\n <!-- TODO: ngSrc -->\r\n <img class=\"image__view\" [src]=\"thumbnailUrl()\" height=\"120\" width=\"184\" alt=\"Thumbnail\" />\r\n </div>\r\n }\r\n <div class=\"content__info\">\r\n <button type=\"button\" cuiButton appearance=\"outlined-gray\" size=\"xxs\" icon=\"cuiIconUpload\"\r\n (click)=\"onSelectFile()\">\r\n {{ uploadButtonName() }}\r\n </button>\r\n @if (thumbnail()?.name) {\r\n <button class=\"content__remove-button\" cuiButton appearance=\"link\" size=\"sm\" type=\"button\"\r\n (click)=\"onRemoveThumbnail()\">\r\n {{ t('REMOVE') }}\r\n </button>\r\n }\r\n\r\n <span class=\"content__accepted\">\r\n {{ t('ACCEPTED') }}: JPG, JPEG, PNG, MP4 {{ t('UP_TO') }} 20MB\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n @if (editorId(); as editorId) {\r\n <cui-editor-block\r\n [title]=\"form.controls.title.value || title()\"\r\n [config]=\"config()\"\r\n [editorId]=\"editorId\"\r\n [required]=\"true\"\r\n (editorEmpty)=\"onEditorEmpty($event)\"\r\n ></cui-editor-block>\r\n }\r\n </section>\r\n</ng-container>\r\n", styles: ["::ng-deep cui-dialog:has(.instruction-description-modal){inset:0;margin:auto;transform:none!important}:host{display:block}.title{font-weight:500;font-size:14px;line-height:20px;display:flex;gap:2px}.title_required{color:var(--cui-danger)}.content{display:flex;flex-direction:column;gap:16px;padding:16px 24px}.content__upload{padding:12px 16px;border-radius:8px;border:1px solid var(--cui-base-200);background:var(--cui-base-10)}.content__info{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.content__accepted{color:var(--cui-base-500)}.content__upload-file{display:flex;align-items:center;gap:8px}.content__upload-file input[type=file]{display:none}.content__remove-button ::ng-deep .c-content{color:var(--cui-danger)!important}.file{display:flex;flex-direction:column;gap:4px}.description_invalid{border:1px solid var(--cui-danger)}.image{position:relative;display:inline-block}.image__view{border-radius:8px;object-fit:cover}.image__name{position:absolute;top:6px;left:14px;color:var(--cui-base-0);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:170px;z-index:1}.image:after{content:\"\";position:absolute;top:0;left:0;width:100%;height:100%;background-color:#0003;z-index:0;pointer-events:none;border-radius:8px}.button-save{margin-left:auto}.instruction-description-modal{text-transform:none}.empty{padding:16px;color:var(--cui-base-500);text-align:center}\n"] }]
247
248
  }], ctorParameters: () => [] });
248
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0eS1pbmZvLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvd2lkZ2V0cy91dGlsaXR5LWluZm8vdXRpbGl0eS1pbmZvLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvd2lkZ2V0cy91dGlsaXR5LWluZm8vdXRpbGl0eS1pbmZvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixVQUFVLEVBQ1YsTUFBTSxFQUNOLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFFLGtCQUFrQixFQUFrQyxNQUFNLGNBQWMsQ0FBQztBQUNsRixPQUFPLEVBQUUsWUFBWSxFQUFvQixNQUFNLGNBQWMsQ0FBQztBQUM5RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTlELE9BQU8sRUFDSCxrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLGNBQWMsRUFDZCxjQUFjLEVBQ2pCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSx1QkFBdUIsRUFBbUIsTUFBTSxjQUFjLENB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Yzt3QkFDZCxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsdUJBQXVCLENBQUM7d0JBQ3pDLG1DQUFtQzt3QkFDbkMsbUJBQW1CO3dCQUNuQixrQkFBa0I7d0JBQ2xCLFVBQVU7cUJBQ2IsY0FDVyxJQUFJLG1CQUdDLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBjb21wdXRlZCxcclxuICAgIERlc3Ryb3lSZWYsXHJcbiAgICBlZmZlY3QsXHJcbiAgICBmb3J3YXJkUmVmLFxyXG4gICAgaW5qZWN0LFxyXG4gICAgaW5wdXQsXHJcbiAgICBvdXRwdXQsXHJcbiAgICBzaWduYWxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xyXG5pbXBvcnQgeyBOb25OdWxsYWJsZUZvcm1CdWlsZGVyLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDdWlGcmFtZUFwaVNlcnZpY2UsIEZyYWdtZW50VHlwZSwgUmVzb3VyY2VGcmFnbWVudCB9IGZyb20gJ0BjdWJ5LXVpL2FwaSc7XHJcbmltcG9ydCB7IEN1aUlkU2VydmljZSwgdHlwZSBDdWlOdWxsYWJsZSB9IGZyb20gJ0BjdWJ5LXVpL2Nkayc7XHJcbmltcG9ydCB7IFRyYW5zbG9jb0RpcmVjdGl2ZSwgVHJhbnNsb2NvU2VydmljZSB9IGZyb20gJ0Bqc3ZlcnNlL3RyYW5zbG9jbyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgbWFwLCBwYWlyd2lzZSwgc3RhcnRXaXRoIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQge1xyXG4gICAgQ3VpQWNjb3JkaW9uTW9kdWxlLFxyXG4gICAgQ3VpQWxlcnRTZXJ2aWNlLFxyXG4gICAgQ3VpQnV0dG9uTW9kdWxlLFxyXG4gICAgQ3VpRm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgQ3VpSGludE1vZHVsZSxcclxuICAgIEN1aUlucHV0TW9kdWxlLFxyXG4gICAgQ3VpTGFiZWxNb2R1bGVcclxufSBmcm9tICcuLi8uLi9jb21wb25lbnRzJztcclxuaW1wb3J0IHsgQ3VpVG9vbHRpcCB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMnO1xyXG5pbXBvcnQgeyBDdWlFZGl0b3JCbG9ja0NvbXBvbmVudCwgQ3VpRWRpdG9yQ29uZmlnIH0gZnJvbSAnLi4vLi4vZWRpdG9yJztcclxuaW1wb3J0IHsgY3VpQ3JlYXRlRGVmYXVsdFZhbGlkYXRvcnMgfSBmcm9tICcuLi8uLi91dGlscyc7XHJcbmltcG9ydCB7IEN1aUdlbmVyYWxDb250cm9sRXJyb3JIaW50Q29tcG9uZW50IH0gZnJvbSAnLi4vZ2VuZXJhbC1jb250cm9sLWVycm9yLWhpbnQnO1xyXG5pbXBvcnQgeyBDdWlVdGlsaXR5Rm9ybUdyb3VwLCBDdWlVdGlsaXR5Rm9ybVZhbHVlcyB9IGZyb20gJy4vdXRpbGl0eS1pbmZvLm9wdGlvbnMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2N1aS11dGlsaXR5LWluZm8nLFxyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICAgIEN1aUFjY29yZGlvbk1vZHVsZSxcclxuICAgICAgICBDdWlCdXR0b25Nb2R1bGUsXHJcbiAgICAgICAgQ3VpRm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgICAgIEN1aUhpbnRNb2R1bGUsXHJcbiAgICAgICAgQ3VpSW5wdXRNb2R1bGUsXHJcbiAgICAgICAgQ3VpTGFiZWxNb2R1bGUsXHJcbiAgICAgICAgZm9yd2FyZFJlZigoKSA9PiBDdWlFZGl0b3JCbG9ja0NvbXBvbmVudCksXHJcbiAgICAgICAgQ3VpR2VuZXJhbENvbnRyb2xFcnJvckhpbnRDb21wb25lbnQsXHJcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgICAgICBUcmFuc2xvY29EaXJlY3RpdmUsXHJcbiAgICAgICAgQ3VpVG9vbHRpcFxyXG4gICAgXSxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vdXRpbGl0eS1pbmZvLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsOiAnLi91dGlsaXR5LWluZm8uY29tcG9uZW50LnNjc3MnLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIEN1aVV0aWxpdHlJbmZvQ29tcG9uZW50IHtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSA9IGluamVjdChEZXN0cm95UmVmKTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybUJ1aWxkZXIgPSBpbmplY3QoTm9uTnVsbGFibGVGb3JtQnVpbGRlcik7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbG9jb1NlcnZpY2UgPSBpbmplY3QoVHJhbnNsb2NvU2VydmljZSk7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZyYW1lQXBpU2VydmljZSA9IGluamVjdChDdWlGcmFtZUFwaVNlcnZpY2UpO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjdWlBbGVydFNlcnZpY2UgPSBpbmplY3QoQ3VpQWxlcnRTZXJ2aWNlKTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY3VpSWRTZXJ2aWNlID0gaW5qZWN0KEN1aUlkU2VydmljZSk7XHJcblxyXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IENPTlRST0xfREVMQVkgPSA1MDA7XHJcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgTUFYX0ZJTEVfU0laRSA9IDIwOTcxNTIwO1xyXG5cclxuICAgIHByb3RlY3RlZCByZWFkb25seSB0aXRsZUlkID0gdGhpcy5jdWlJZFNlcnZpY2UuZ2VuZXJhdGUoKTtcclxuICAgIHByb3RlY3RlZCByZWFkb25seSBkZXNjcmlwdGlvbklkID0gdGhpcy5jdWlJZFNlcnZpY2UuZ2VuZXJhdGUoKTtcclxuICAgIHByb3RlY3RlZCByZWFkb25seSBmb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cDxDdWlVdGlsaXR5Rm9ybUdyb3VwPih7XHJcbiAgICAgICAgdGl0bGU6IHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbCgnJywgY3VpQ3JlYXRlRGVmYXVsdFZhbGlkYXRvcnMoeyBhc3luY0RlbGF5OiB0aGlzLkNPTlRST0xfREVMQVkgfSkpLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2woJycsIGN1aUNyZWF0ZURlZmF1bHRWYWxpZGF0b3JzKHsgYXN5bmNEZWxheTogdGhpcy5DT05UUk9MX0RFTEFZIH0pKVxyXG4gICAgfSk7XHJcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNEZXNjcmlwdGlvbk1vZGFsT3BlbiA9IHNpZ25hbChmYWxzZSk7XHJcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNEZXNjcmlwdGlvbkVtcHR5ID0gc2lnbmFsKGZhbHNlKTtcclxuICAgIHByb3RlY3RlZCByZWFkb25seSBlZGl0b3JJZCA9IHNpZ25hbDxDdWlOdWxsYWJsZTxzdHJpbmc+PihudWxsKTtcclxuICAgIHByb3RlY3RlZCByZWFkb25seSB0aHVtYm5haWwgPSBzaWduYWw8Q3VpTnVsbGFibGU8UmVzb3VyY2VGcmFnbWVudD4+KG51bGwpO1xyXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHRodW1ibmFpbFVybCA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgICAgICBjb25zdCB0aHVtYm5haWwgPSB0aGlzLnRodW1ibmFpbCgpO1xyXG5cclxuICAgICAgICBpZiAodGh1bWJuYWlsPy5yZXNvdXJjZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGh1bWJuYWlsLnJlc291cmNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZVJlc291cmNlVXJsKCkgKyB0aHVtYm5haWwhLmZpbGVJZCE7XHJcbiAgICB9KTtcclxuICAgIHByb3RlY3RlZCByZWFkb25seSB1cGxvYWRCdXR0b25OYW1lID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHRodW1ibmFpbCA9IHRoaXMudGh1bWJuYWlsKCk7XHJcblxyXG4gICAgICAgIGlmICh0aHVtYm5haWw/Lm5hbWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsb2NvU2VydmljZS50cmFuc2xhdGUoJ1JFUExBQ0VfRklMRScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsb2NvU2VydmljZS50cmFuc2xhdGUoJ1VQTE9BRF9GSUxFJyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBwcm90ZWN0ZWQgaGVhZGluZzogQ3VpTnVsbGFibGU8c3RyaW5nPiA9IG51bGw7XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldCBjb250cm9scygpOiBDdWlVdGlsaXR5Rm9ybUdyb3VwIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtLmNvbnRyb2xzO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXQgaXNUaXRsZUVycm9yKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xzLnRpdGxlLmludmFsaWQgJiYgdGhpcy5jb250cm9scy50aXRsZS5kaXJ0eTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGlzRGVzY3JpcHRpb25FcnJvcigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb250cm9scy5kZXNjcmlwdGlvbi5pbnZhbGlkICYmIHRoaXMuY29udHJvbHMuZGVzY3JpcHRpb24uZGlydHk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlYWRvbmx5IHRpdGxlID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xyXG4gICAgcHVibGljIHJlYWRvbmx5IGZyYW1lcklkID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xyXG4gICAgcHVibGljIHJlYWRvbmx5IGJhc2VSZXNvdXJjZVVybCA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcclxuICAgIHB1YmxpYyByZWFkb25seSBjb25maWcgPSBpbnB1dC5yZXF1aXJlZDxDdWlFZGl0b3JDb25maWc+KCk7XHJcblxyXG4gICAgcHVibGljIHJlYWRvbmx5IGZvcm1DaGFuZ2VkID0gb3V0cHV0PFBhcnRpYWw8Q3VpVXRpbGl0eUZvcm1WYWx1ZXM+PigpO1xyXG4gICAgcHVibGljIHJlYWRvbmx5IGlzRm9ybVZhbGlkQ2hhbmdlZCA9IG91dHB1dDxib29sZWFuPigpO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuaW5pdFV0aWxpdHlFZmZlY3QoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgb25TZWxlY3RGaWxlKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcclxuICAgICAgICBpbnB1dC50eXBlID0gJ2ZpbGUnO1xyXG4gICAgICAgIGlucHV0LmFjY2VwdCA9ICdpbWFnZS9qcGcsIGltYWdlL2pwZWcsIGltYWdlL3BuZywgdmlkZW8vbXA0JztcclxuXHJcbiAgICAgICAgaW5wdXQub25jaGFuZ2UgPSAoKTogdm9pZCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVzID0gaW5wdXQuZmlsZXM7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWZpbGVzPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5nZXRGaWxlKGZpbGVzKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBpbnB1dC5jbGljaygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBvbkVkaXRvckVtcHR5KGlzRW1wdHk6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzRGVzY3JpcHRpb25FbXB0eS5zZXQoaXNFbXB0eSk7XHJcbiAgICAgICAgdGhpcy5pc0Zvcm1WYWxpZENoYW5nZWQuZW1pdCh0aGlzLmNoZWNrRm9ybVZhbGlkYXRpb24oKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIG9uUmVtb3ZlVGh1bWJuYWlsKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGZyYW1lSWQgPSB0aGlzLmZyYW1lcklkKCk7XHJcbiAgICAgICAgY29uc3QgZnJhZ21lbnRJZCA9IHRoaXMudGh1bWJuYWlsKCk/LmlkO1xyXG5cclxuICAgICAgICBpZiAoIWZyYW1lSWQgfHwgIWZyYWdtZW50SWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5mcmFtZUFwaVNlcnZpY2UuZGVsZXRlUmVzb3VyY2UoZnJhbWVJZCwgZnJhZ21lbnRJZCkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy50aHVtYm5haWwudXBkYXRlKChwcmV2KSA9PiAoeyAuLi5wcmV2ISwgZmlsZUlkOiBudWxsLCBuYW1lOiBudWxsLCByZXNvdXJjZTogbnVsbCB9KSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIG9uVG9nZ2xlRGVzY3JpcHRpb25Nb2RhbCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzRGVzY3JpcHRpb25Nb2RhbE9wZW4udXBkYXRlKChwcmV2KSA9PiAhcHJldik7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0VXRpbGl0eUVmZmVjdCgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBlZmZlY3RSZWYgPSBlZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB0aXRsZSA9IHRoaXMudGl0bGUoKTtcclxuXHJcbiAgICAgICAgICAgIGlmICghdGl0bGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5pbml0VGl0bGVTdWJzY3JpcHRpb25zKCk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdEZyYW1lRnJhZ21lbnRzKCk7XHJcbiAgICAgICAgICAgIGVmZmVjdFJlZi5kZXN0cm95KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0VGl0bGVTdWJzY3JpcHRpb25zKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZm9ybS5wYXRjaFZhbHVlKHsgdGl0bGU6IHRoaXMudGl0bGUoKSB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5mb3JtLnN0YXR1c0NoYW5nZXNcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveSkpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5pc0Zvcm1WYWxpZENoYW5nZWQuZW1pdCh0aGlzLmNoZWNrRm9ybVZhbGlkYXRpb24oKSkpO1xyXG5cclxuICAgICAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveSksXHJcbiAgICAgICAgICAgICAgICBzdGFydFdpdGgodGhpcy5mb3JtLnZhbHVlKSxcclxuICAgICAgICAgICAgICAgIHBhaXJ3aXNlKCksXHJcbiAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUodGhpcy5DT05UUk9MX0RFTEFZKSxcclxuICAgICAgICAgICAgICAgIG1hcCgoW3ByZXYsIGN1cnJlbnRdKSA9PiB0aGlzLmNvbXBhcmVGb3JtVmFsdWVzKFtwcmV2LCBjdXJyZW50XSkpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghT2JqZWN0LmtleXModmFsdWUpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm1DaGFuZ2VkLmVtaXQodmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRGcmFtZUZyYWdtZW50cygpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBmcmFtZUlkID0gdGhpcy5mcmFtZXJJZCgpO1xyXG5cclxuICAgICAgICBpZiAoIWZyYW1lSWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5mcmFtZUFwaVNlcnZpY2UuZ2V0RnJhbWUoZnJhbWVJZCkuc3Vic2NyaWJlKChmcmFtZSkgPT4ge1xyXG4gICAgICAgICAgICBmcmFtZS5mcmFnbWVudHMuZm9yRWFjaCgoZnJhZ21lbnQpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChmcmFnbWVudC50eXBlID09PSBGcmFnbWVudFR5cGUualRleHQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRvcklkLnNldChmcmFnbWVudD8uaWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmIChmcmFnbWVudC50eXBlID09PSBGcmFnbWVudFR5cGUucmVzb3VyY2VGaWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRSZXNvdXJjZUZpbGUoZnJhZ21lbnQgYXMgUmVzb3VyY2VGcmFnbWVudCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY29tcGFyZUZvcm1WYWx1ZXMoW3ByZXZHcm91cCwgY3VycmVudEdydW9wXTogUGFydGlhbDxDdWlVdGlsaXR5Rm9ybVZhbHVlcz5bXSk6IFBhcnRpYWw8Q3VpVXRpbGl0eUZvcm1WYWx1ZXM+IHtcclxuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoY3VycmVudEdydW9wKSBhcyAoa2V5b2YgQ3VpVXRpbGl0eUZvcm1Hcm91cClbXTtcclxuICAgICAgICBjb25zdCBjaGFuZ2VkRmllbGRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xyXG5cclxuICAgICAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBwcmV2ID0gcHJldkdyb3VwW2tleV07XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSBjdXJyZW50R3J1b3Bba2V5XTtcclxuXHJcbiAgICAgICAgICAgIGlmIChwcmV2ID09PSBjdXJyZW50IHx8IHRoaXMuY29udHJvbHNba2V5XS5pbnZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNoYW5nZWRGaWVsZHNba2V5XSA9IGN1cnJlbnQ7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBjaGFuZ2VkRmllbGRzO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0UmVzb3VyY2VGaWxlKHJlc291cmNlOiBSZXNvdXJjZUZyYWdtZW50KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5iYXNlUmVzb3VyY2VVcmwoKSArIHJlc291cmNlLmZpbGVJZCE7XHJcblxyXG4gICAgICAgIHRoaXMudGh1bWJuYWlsLnNldChyZXNvdXJjZSk7XHJcblxyXG4gICAgICAgIGlmICghdXJsIHx8IHJlc291cmNlPy5uYW1lPy5zcGxpdCgnLicpLnBvcCgpICE9PSAnbXA0Jykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdldENhcHR1cmVGcm9tVmlkZW8odXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEZpbGUoZmlsZXM6IEZpbGVMaXN0KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZmlsZSA9IGZpbGVzLml0ZW0oMCk7XHJcblxyXG4gICAgICAgIGlmICghZmlsZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZmlsZS5zaXplID4gdGhpcy5NQVhfRklMRV9TSVpFKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VpQWxlcnRTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAub3Blbih0aGlzLnRyYW5zbG9jb1NlcnZpY2UudHJhbnNsYXRlKCdJTlZBTElEX0ZJTEVfU0laRScpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiAnZXJyb3InXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgaXNWaWRlbyA9IGZpbGUubmFtZS5zcGxpdCgnLicpLmF0KC0xKSA9PT0gJ21wNCc7XHJcbiAgICAgICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKTtcclxuXHJcbiAgICAgICAgaWYgKGlzVmlkZW8pIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRDYXB0dXJlRnJvbVZpZGVvKHVybCwgZmlsZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy50aHVtYm5haWwudXBkYXRlKChwcmV2KSA9PiAoeyAuLi5wcmV2ISwgbmFtZTogZmlsZS5uYW1lLCByZXNvdXJjZTogdXJsIH0pKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudXBsb2FkRmlsZShmaWxlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwbG9hZEZpbGUoZmlsZTogRmlsZSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGZyYW1lSWQgPSB0aGlzLmZyYW1lcklkKCk7XHJcbiAgICAgICAgY29uc3QgZnJhZ21lbnRJZCA9IHRoaXMudGh1bWJuYWlsKCk/LmlkO1xyXG5cclxuICAgICAgICBpZiAoIWZyYW1lSWQgfHwgIWZyYWdtZW50SWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgICAgICBmb3JtRGF0YS5hcHBlbmQoJ3Jlc291cmNlJywgZmlsZSk7XHJcblxyXG4gICAgICAgIHRoaXMuZnJhbWVBcGlTZXJ2aWNlLnVwbG9hZFJlc291cmNlKGZvcm1EYXRhLCBmcmFtZUlkLCBmcmFnbWVudElkKS5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldENhcHR1cmVGcm9tVmlkZW8odXJsOiBzdHJpbmcsIGZpbGU/OiBGaWxlKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJykgYXMgSFRNTENhbnZhc0VsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgdmlkZW8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpIGFzIEhUTUxWaWRlb0VsZW1lbnQ7XHJcblxyXG4gICAgICAgIHZpZGVvLnNyYyA9IHVybDtcclxuICAgICAgICB2aWRlby5jdXJyZW50VGltZSA9IDE7XHJcbiAgICAgICAgY2FudmFzLndpZHRoID0gMTg0O1xyXG4gICAgICAgIGNhbnZhcy5oZWlnaHQgPSAxMjA7XHJcblxyXG4gICAgICAgIHZpZGVvLm9ubG9hZGVkZGF0YSA9ICgpOiB2b2lkID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFjb250ZXh0KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKHZpZGVvLCAwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpO1xyXG5cclxuICAgICAgICAgICAgY2FudmFzLnRvQmxvYigoYmxvYikgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFibG9iKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHZpZGVvQ2FwdHVyZVVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRodW1ibmFpbC51cGRhdGUoKHByZXYpID0+ICh7XHJcbiAgICAgICAgICAgICAgICAgICAgLi4ucHJldiEsXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogKGZpbGU/Lm5hbWUgfHwgcHJldj8ubmFtZSkhLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc291cmNlOiB2aWRlb0NhcHR1cmVVcmxcclxuICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdmlkZW8ubG9hZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2hlY2tGb3JtVmFsaWRhdGlvbigpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gIXRoaXMuaXNEZXNjcmlwdGlvbkVtcHR5KCkgJiYgIXRoaXMuZm9ybS5pbnZhbGlkO1xyXG4gICAgfVxyXG59XHJcbiIsIjxuZy1jb250YWluZXIgKnRyYW5zbG9jbz1cImxldCB0XCI+XHJcbiAgPHNlY3Rpb24gY2xhc3M9XCJjb250ZW50XCI+XHJcbiAgICA8Y3VpLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPGxhYmVsIGN1aUxhYmVsIFtpc1JlcXVpcmVkXT1cInRydWVcIiBbZm9yXT1cInRpdGxlSWRcIj5cclxuICAgICAgICAgICAge3sgdCgnVElUTEUnKSB9fVxyXG4gICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgPGN1aS1pbnB1dC10ZXh0XHJcbiAgICAgICAgICAgIFtjdWlUZXh0RmllbGRJZF09XCJ0aXRsZUlkXCJcclxuICAgICAgICAgICAgW2N1aVRleHRGaWVsZFBsYWNlaG9sZGVyXT1cInQoJ0FERF9USVRMRScpXCJcclxuICAgICAgICAgICAgW2N1aVRleHRGaWVsZElzRXJyb3JdPVwiaXNUaXRsZUVycm9yXCJcclxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm0uY29udHJvbHMudGl0bGVcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgQGlmIChpc1RpdGxlRXJyb3IpIHtcclxuICAgICAgICAgICAgPGN1aS1nZW5lcmFsLWNvbnRyb2wtZXJyb3ItaGludCBbY29udHJvbF09XCJmb3JtLmNvbnRyb2xzLnRpdGxlXCIgW2lzVmlzaWJsZV09XCJ0cnVlXCIgLz5cclxuICAgICAgICB9XHJcbiAgICA8L2N1aS1mb3JtLWZpZWxkPlxyXG4gICAgPGN1aS1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDxsYWJlbCBjdWlMYWJlbCBbaXNSZXF1aXJlZF09XCJ0cnVlXCIgW2Zvcl09XCJkZXNjcmlwdGlvbklkXCI+XHJcbiAgICAgICAgICAgIHt7IHQoJ1NIT1JUX0RFU0NSSVBUSU9OJykgfX1cclxuICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICA8Y3VpLWlucHV0LXRleHRcclxuICAgICAgICAgICAgW2N1aVRleHRGaWVsZElkXT1cImRlc2NyaXB0aW9uSWRcIlxyXG4gICAgICAgICAgICBjdWlUZXh0RmllbGRQbGFjZWhvbGRlcj1cInt7dCgnU0hPUlRfREVTQ1JJUFRJT04nKX19Li4uXCJcclxuICAgICAgICAgICAgW2N1aVRleHRGaWVsZElzRXJyb3JdPVwiaXNEZXNjcmlwdGlvbkVycm9yXCJcclxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm0uY29udHJvbHMuZGVzY3JpcHRpb25cIlxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgQGlmIChpc0Rlc2NyaXB0aW9uRXJyb3IpIHtcclxuICAgICAgICAgICAgPGN1aS1nZW5lcmFsLWNvbnRyb2wtZXJyb3ItaGludCBbY29udHJvbF09XCJmb3JtLmNvbnRyb2xzLmRlc2NyaXB0aW9uXCIgW2lzVmlzaWJsZV09XCJ0cnVlXCIgLz5cclxuICAgICAgICB9XHJcbiAgICA8L2N1aS1mb3JtLWZpZWxkPlxyXG4gICAgPHNlY3Rpb24gY2xhc3M9XCJmaWxlXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwidGl0bGVcIj57eyB0KCdUSFVNQk5BSUwnKSB9fTwvc3Bhbj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRfX3VwbG9hZFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50X191cGxvYWQtZmlsZVwiPlxyXG4gICAgICAgICAgQGlmICh0aHVtYm5haWwoKT8ubmFtZTsgYXMgZmlsZUlkKSB7XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW1hZ2VcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbWFnZV9fbmFtZVwiPnt7IHRodW1ibmFpbCgpPy5uYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICA8IS0tIFRPRE86IG5nU3JjIC0tPlxyXG4gICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1hZ2VfX3ZpZXdcIiBbc3JjXT1cInRodW1ibmFpbFVybCgpXCIgaGVpZ2h0PVwiMTIwXCIgd2lkdGg9XCIxODRcIiBhbHQ9XCJUaHVtYm5haWxcIiAvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudF9faW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY3VpQnV0dG9uIGFwcGVhcmFuY2U9XCJvdXRsaW5lZC1ncmF5XCIgc2l6ZT1cInh4c1wiIGljb249XCJjdWlJY29uVXBsb2FkXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvblNlbGVjdEZpbGUoKVwiPlxyXG4gICAgICAgICAgICAgICAge3sgdXBsb2FkQnV0dG9uTmFtZSgpIH19XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIEBpZiAodGh1bWJuYWlsKCk/Lm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJjb250ZW50X19yZW1vdmUtYnV0dG9uXCIgY3VpQnV0dG9uIGFwcGVhcmFuY2U9XCJsaW5rXCIgc2l6ZT1cInNtXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uUmVtb3ZlVGh1bWJuYWlsKClcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyB0KCdSRU1PVkUnKSB9fVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb250ZW50X19hY2NlcHRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IHQoJ0FDQ0VQVEVEJykgfX06IEpQRywgSlBFRywgUE5HLCBNUDQge3sgdCgnVVBfVE8nKSB9fSAyME1CXHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L3NlY3Rpb24+XHJcbiAgICBAaWYgKGVkaXRvcklkKCk7IGFzIGVkaXRvcklkKSB7XHJcbiAgICAgICAgPGN1aS1lZGl0b3ItYmxvY2tcclxuICAgICAgICAgICAgW3RpdGxlXT1cImZvcm0uY29udHJvbHMudGl0bGUudmFsdWUgfHwgdGl0bGUoKVwiXHJcbiAgICAgICAgICAgIFtjb25maWddPVwiY29uZmlnKClcIlxyXG4gICAgICAgICAgICBbZWRpdG9ySWRdPVwiZWRpdG9ySWRcIlxyXG4gICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIChlZGl0b3JFbXB0eSk9XCJvbkVkaXRvckVtcHR5KCRldmVudClcIlxyXG4gICAgICAgID48L2N1aS1lZGl0b3ItYmxvY2s+XHJcbiAgICB9XHJcbiAgPC9zZWN0aW9uPlxyXG48L25nLWNvbnRhaW5lcj5cclxuIl19
249
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0eS1pbmZvLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvd2lkZ2V0cy91dGlsaXR5LWluZm8vdXRpbGl0eS1pbmZvLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvd2lkZ2V0cy91dGlsaXR5LWluZm8vdXRpbGl0eS1pbmZvLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixVQUFVLEVBQ1YsTUFBTSxFQUNOLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFFLGtCQUFrQixFQUFrQyxNQUFNLGNBQWMsQ0FBQztBQUNsRixPQUFPLEVBQUUsWUFBWSxFQUFvQixNQUFNLGNBQWMsQ0FBQztBQUM5RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTlELE9BQU8sRUFDSCxrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLGNBQWMsRUFDZCxjQUFjLEVBQ2pCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSx1QkFBdUIsRUFBbUIsTUFBTSxjQUFjLENB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QUF1QjtrQkFwQm5DLFNBQVM7K0JBQ0ksa0JBQWtCLFdBQ25CO3dCQUNMLGtCQUFrQjt3QkFDbEIsZUFBZTt3QkFDZixrQkFBa0I7d0JBQ2xCLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxjQUFjO3dCQUNkLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx1QkFBdUIsQ0FBQzt3QkFDekMsbUNBQW1DO3dCQUNuQyxtQkFBbUI7d0JBQ25CLGtCQUFrQjt3QkFDbEIsVUFBVTtxQkFDYixjQUNXLElBQUksbUJBR0MsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICAgIENvbXBvbmVudCxcclxuICAgIGNvbXB1dGVkLFxyXG4gICAgRGVzdHJveVJlZixcclxuICAgIGVmZmVjdCxcclxuICAgIGZvcndhcmRSZWYsXHJcbiAgICBpbmplY3QsXHJcbiAgICBpbnB1dCxcclxuICAgIG91dHB1dCxcclxuICAgIHNpZ25hbFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XHJcbmltcG9ydCB7IE5vbk51bGxhYmxlRm9ybUJ1aWxkZXIsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEN1aUZyYW1lQXBpU2VydmljZSwgRnJhZ21lbnRUeXBlLCBSZXNvdXJjZUZyYWdtZW50IH0gZnJvbSAnQGN1YnktdWkvYXBpJztcclxuaW1wb3J0IHsgQ3VpSWRTZXJ2aWNlLCB0eXBlIEN1aU51bGxhYmxlIH0gZnJvbSAnQGN1YnktdWkvY2RrJztcclxuaW1wb3J0IHsgVHJhbnNsb2NvRGlyZWN0aXZlLCBUcmFuc2xvY29TZXJ2aWNlIH0gZnJvbSAnQGpzdmVyc2UvdHJhbnNsb2NvJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBtYXAsIHBhaXJ3aXNlLCBzdGFydFdpdGggfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7XHJcbiAgICBDdWlBY2NvcmRpb25Nb2R1bGUsXHJcbiAgICBDdWlBbGVydFNlcnZpY2UsXHJcbiAgICBDdWlCdXR0b25Nb2R1bGUsXHJcbiAgICBDdWlGb3JtRmllbGRNb2R1bGUsXHJcbiAgICBDdWlIaW50TW9kdWxlLFxyXG4gICAgQ3VpSW5wdXRNb2R1bGUsXHJcbiAgICBDdWlMYWJlbE1vZHVsZVxyXG59IGZyb20gJy4uLy4uL2NvbXBvbmVudHMnO1xyXG5pbXBvcnQgeyBDdWlUb29sdGlwIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XHJcbmltcG9ydCB7IEN1aUVkaXRvckJsb2NrQ29tcG9uZW50LCBDdWlFZGl0b3JDb25maWcgfSBmcm9tICcuLi8uLi9lZGl0b3InO1xyXG5pbXBvcnQgeyBjdWlDcmVhdGVEZWZhdWx0VmFsaWRhdG9ycyB9IGZyb20gJy4uLy4uL3V0aWxzJztcclxuaW1wb3J0IHsgQ3VpR2VuZXJhbENvbnRyb2xFcnJvckhpbnRDb21wb25lbnQgfSBmcm9tICcuLi9nZW5lcmFsLWNvbnRyb2wtZXJyb3ItaGludCc7XHJcbmltcG9ydCB7IEN1aVV0aWxpdHlGb3JtR3JvdXAsIEN1aVV0aWxpdHlGb3JtVmFsdWVzIH0gZnJvbSAnLi91dGlsaXR5LWluZm8ub3B0aW9ucyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnY3VpLXV0aWxpdHktaW5mbycsXHJcbiAgICBpbXBvcnRzOiBbXHJcbiAgICAgICAgQ3VpQWNjb3JkaW9uTW9kdWxlLFxyXG4gICAgICAgIEN1aUJ1dHRvbk1vZHVsZSxcclxuICAgICAgICBDdWlGb3JtRmllbGRNb2R1bGUsXHJcbiAgICAgICAgQ3VpSGludE1vZHVsZSxcclxuICAgICAgICBDdWlJbnB1dE1vZHVsZSxcclxuICAgICAgICBDdWlMYWJlbE1vZHVsZSxcclxuICAgICAgICBmb3J3YXJkUmVmKCgpID0+IEN1aUVkaXRvckJsb2NrQ29tcG9uZW50KSxcclxuICAgICAgICBDdWlHZW5lcmFsQ29udHJvbEVycm9ySGludENvbXBvbmVudCxcclxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgICAgIFRyYW5zbG9jb0RpcmVjdGl2ZSxcclxuICAgICAgICBDdWlUb29sdGlwXHJcbiAgICBdLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi91dGlsaXR5LWluZm8uY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmw6ICcuL3V0aWxpdHktaW5mby5jb21wb25lbnQuc2NzcycsXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3VpVXRpbGl0eUluZm9Db21wb25lbnQge1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95ID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBmb3JtQnVpbGRlciA9IGluamVjdChOb25OdWxsYWJsZUZvcm1CdWlsZGVyKTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsb2NvU2VydmljZSA9IGluamVjdChUcmFuc2xvY29TZXJ2aWNlKTtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZnJhbWVBcGlTZXJ2aWNlID0gaW5qZWN0KEN1aUZyYW1lQXBpU2VydmljZSk7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGN1aUFsZXJ0U2VydmljZSA9IGluamVjdChDdWlBbGVydFNlcnZpY2UpO1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjdWlJZFNlcnZpY2UgPSBpbmplY3QoQ3VpSWRTZXJ2aWNlKTtcclxuXHJcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgQ09OVFJPTF9ERUxBWSA9IDUwMDtcclxuICAgIHByb3RlY3RlZCByZWFkb25seSBNQVhfRklMRV9TSVpFID0gMjA5NzE1MjA7XHJcblxyXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHRpdGxlSWQgPSB0aGlzLmN1aUlkU2VydmljZS5nZW5lcmF0ZSgpO1xyXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlc2NyaXB0aW9uSWQgPSB0aGlzLmN1aUlkU2VydmljZS5nZW5lcmF0ZSgpO1xyXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwPEN1aVV0aWxpdHlGb3JtR3JvdXA+KHtcclxuICAgICAgICB0aXRsZTogdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKCcnLCBjdWlDcmVhdGVEZWZhdWx0VmFsaWRhdG9ycyh7IGFzeW5jRGVsYXk6IHRoaXMuQ09OVFJPTF9ERUxBWSB9KSksXHJcbiAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbCgnJywgY3VpQ3JlYXRlRGVmYXVsdFZhbGlkYXRvcnMoeyBhc3luY0RlbGF5OiB0aGlzLkNPTlRST0xfREVMQVkgfSkpXHJcbiAgICB9KTtcclxuICAgIHByb3RlY3RlZCByZWFkb25seSBpc0Rlc2NyaXB0aW9uTW9kYWxPcGVuID0gc2lnbmFsKGZhbHNlKTtcclxuICAgIHByb3RlY3RlZCByZWFkb25seSBpc0Rlc2NyaXB0aW9uRW1wdHkgPSBzaWduYWwoZmFsc2UpO1xyXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGVkaXRvcklkID0gc2lnbmFsPEN1aU51bGxhYmxlPHN0cmluZz4+KG51bGwpO1xyXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHRodW1ibmFpbCA9IHNpZ25hbDxDdWlOdWxsYWJsZTxSZXNvdXJjZUZyYWdtZW50Pj4obnVsbCk7XHJcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgdGh1bWJuYWlsVXJsID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHRodW1ibmFpbCA9IHRoaXMudGh1bWJuYWlsKCk7XHJcblxyXG4gICAgICAgIGlmICh0aHVtYm5haWw/LnJlc291cmNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aHVtYm5haWwucmVzb3VyY2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5iYXNlUmVzb3VyY2VVcmwoKSArIHRodW1ibmFpbCEuZmlsZUlkITtcclxuICAgIH0pO1xyXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHVwbG9hZEJ1dHRvbk5hbWUgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdGh1bWJuYWlsID0gdGhpcy50aHVtYm5haWwoKTtcclxuXHJcbiAgICAgICAgaWYgKHRodW1ibmFpbD8ubmFtZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xvY29TZXJ2aWNlLnRyYW5zbGF0ZSgnUkVQTEFDRV9GSUxFJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xvY29TZXJ2aWNlLnRyYW5zbGF0ZSgnVVBMT0FEX0ZJTEUnKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHByb3RlY3RlZCBoZWFkaW5nOiBDdWlOdWxsYWJsZTxzdHJpbmc+ID0gbnVsbDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgZ2V0IGNvbnRyb2xzKCk6IEN1aVV0aWxpdHlGb3JtR3JvdXAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY29udHJvbHM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGdldCBpc1RpdGxlRXJyb3IoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbHMudGl0bGUuaW52YWxpZCAmJiB0aGlzLmNvbnRyb2xzLnRpdGxlLmRpcnR5O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBnZXQgaXNEZXNjcmlwdGlvbkVycm9yKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xzLmRlc2NyaXB0aW9uLmludmFsaWQgJiYgdGhpcy5jb250cm9scy5kZXNjcmlwdGlvbi5kaXJ0eTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgdGl0bGUgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgZGVzY3JpcHRpb24gPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgZnJhbWVySWQgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgYmFzZVJlc291cmNlVXJsID0gaW5wdXQucmVxdWlyZWQ8c3RyaW5nPigpO1xyXG4gICAgcHVibGljIHJlYWRvbmx5IGNvbmZpZyA9IGlucHV0LnJlcXVpcmVkPEN1aUVkaXRvckNvbmZpZz4oKTtcclxuXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgZm9ybUNoYW5nZWQgPSBvdXRwdXQ8UGFydGlhbDxDdWlVdGlsaXR5Rm9ybVZhbHVlcz4+KCk7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgaXNGb3JtVmFsaWRDaGFuZ2VkID0gb3V0cHV0PGJvb2xlYW4+KCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5pbml0VXRpbGl0eUVmZmVjdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBvblNlbGVjdEZpbGUoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xyXG4gICAgICAgIGlucHV0LnR5cGUgPSAnZmlsZSc7XHJcbiAgICAgICAgaW5wdXQuYWNjZXB0ID0gJ2ltYWdlL2pwZywgaW1hZ2UvanBlZywgaW1hZ2UvcG5nLCB2aWRlby9tcDQnO1xyXG5cclxuICAgICAgICBpbnB1dC5vbmNoYW5nZSA9ICgpOiB2b2lkID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZmlsZXMgPSBpbnB1dC5maWxlcztcclxuXHJcbiAgICAgICAgICAgIGlmICghZmlsZXM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmdldEZpbGUoZmlsZXMpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGlucHV0LmNsaWNrKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIG9uRWRpdG9yRW1wdHkoaXNFbXB0eTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNEZXNjcmlwdGlvbkVtcHR5LnNldChpc0VtcHR5KTtcclxuICAgICAgICB0aGlzLmlzRm9ybVZhbGlkQ2hhbmdlZC5lbWl0KHRoaXMuY2hlY2tGb3JtVmFsaWRhdGlvbigpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgb25SZW1vdmVUaHVtYm5haWwoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZnJhbWVJZCA9IHRoaXMuZnJhbWVySWQoKTtcclxuICAgICAgICBjb25zdCBmcmFnbWVudElkID0gdGhpcy50aHVtYm5haWwoKT8uaWQ7XHJcblxyXG4gICAgICAgIGlmICghZnJhbWVJZCB8fCAhZnJhZ21lbnRJZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmZyYW1lQXBpU2VydmljZS5kZWxldGVSZXNvdXJjZShmcmFtZUlkLCBmcmFnbWVudElkKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnRodW1ibmFpbC51cGRhdGUoKHByZXYpID0+ICh7IC4uLnByZXYhLCBmaWxlSWQ6IG51bGwsIG5hbWU6IG51bGwsIHJlc291cmNlOiBudWxsIH0pKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgb25Ub2dnbGVEZXNjcmlwdGlvbk1vZGFsKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNEZXNjcmlwdGlvbk1vZGFsT3Blbi51cGRhdGUoKHByZXYpID0+ICFwcmV2KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRVdGlsaXR5RWZmZWN0KCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGVmZmVjdFJlZiA9IGVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gdGhpcy50aXRsZSgpO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aXRsZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmluaXRGb3JtU3Vic2NyaXB0aW9ucygpO1xyXG4gICAgICAgICAgICB0aGlzLmluaXRGcmFtZUZyYWdtZW50cygpO1xyXG4gICAgICAgICAgICBlZmZlY3RSZWYuZGVzdHJveSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdEZvcm1TdWJzY3JpcHRpb25zKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZm9ybS5zZXRWYWx1ZSh7IHRpdGxlOiB0aGlzLnRpdGxlKCksIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uKCkgfSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmZvcm0uc3RhdHVzQ2hhbmdlc1xyXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95KSlcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmlzRm9ybVZhbGlkQ2hhbmdlZC5lbWl0KHRoaXMuY2hlY2tGb3JtVmFsaWRhdGlvbigpKSk7XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybS52YWx1ZUNoYW5nZXNcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95KSxcclxuICAgICAgICAgICAgICAgIHN0YXJ0V2l0aCh0aGlzLmZvcm0udmFsdWUpLFxyXG4gICAgICAgICAgICAgICAgcGFpcndpc2UoKSxcclxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSh0aGlzLkNPTlRST0xfREVMQVkpLFxyXG4gICAgICAgICAgICAgICAgbWFwKChbcHJldiwgY3VycmVudF0pID0+IHRoaXMuY29tcGFyZUZvcm1WYWx1ZXMoW3ByZXYsIGN1cnJlbnRdKSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybUNoYW5nZWQuZW1pdCh2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdEZyYW1lRnJhZ21lbnRzKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGZyYW1lSWQgPSB0aGlzLmZyYW1lcklkKCk7XHJcblxyXG4gICAgICAgIGlmICghZnJhbWVJZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmZyYW1lQXBpU2VydmljZS5nZXRGcmFtZShmcmFtZUlkKS5zdWJzY3JpYmUoKGZyYW1lKSA9PiB7XHJcbiAgICAgICAgICAgIGZyYW1lLmZyYWdtZW50cy5mb3JFYWNoKChmcmFnbWVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZyYWdtZW50LnR5cGUgPT09IEZyYWdtZW50VHlwZS5qVGV4dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9ySWQuc2V0KGZyYWdtZW50Py5pZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGZyYWdtZW50LnR5cGUgPT09IEZyYWdtZW50VHlwZS5yZXNvdXJjZUZpbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFJlc291cmNlRmlsZShmcmFnbWVudCBhcyBSZXNvdXJjZUZyYWdtZW50KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjb21wYXJlRm9ybVZhbHVlcyhbcHJldkdyb3VwLCBjdXJyZW50R3J1b3BdOiBQYXJ0aWFsPEN1aVV0aWxpdHlGb3JtVmFsdWVzPltdKTogUGFydGlhbDxDdWlVdGlsaXR5Rm9ybVZhbHVlcz4ge1xyXG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhjdXJyZW50R3J1b3ApIGFzIChrZXlvZiBDdWlVdGlsaXR5Rm9ybUdyb3VwKVtdO1xyXG4gICAgICAgIGNvbnN0IGNoYW5nZWRGaWVsZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XHJcblxyXG4gICAgICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByZXYgPSBwcmV2R3JvdXBba2V5XTtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IGN1cnJlbnRHcnVvcFtrZXldO1xyXG5cclxuICAgICAgICAgICAgaWYgKHByZXYgPT09IGN1cnJlbnQgfHwgdGhpcy5jb250cm9sc1trZXldLmludmFsaWQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2hhbmdlZEZpZWxkc1trZXldID0gY3VycmVudDtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGNoYW5nZWRGaWVsZHM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRSZXNvdXJjZUZpbGUocmVzb3VyY2U6IFJlc291cmNlRnJhZ21lbnQpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmJhc2VSZXNvdXJjZVVybCgpICsgcmVzb3VyY2UuZmlsZUlkITtcclxuXHJcbiAgICAgICAgdGhpcy50aHVtYm5haWwuc2V0KHJlc291cmNlKTtcclxuXHJcbiAgICAgICAgaWYgKCF1cmwgfHwgcmVzb3VyY2U/Lm5hbWU/LnNwbGl0KCcuJykucG9wKCkgIT09ICdtcDQnKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZ2V0Q2FwdHVyZUZyb21WaWRlbyh1cmwpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0RmlsZShmaWxlczogRmlsZUxpc3QpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBmaWxlID0gZmlsZXMuaXRlbSgwKTtcclxuXHJcbiAgICAgICAgaWYgKCFmaWxlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmaWxlLnNpemUgPiB0aGlzLk1BWF9GSUxFX1NJWkUpIHtcclxuICAgICAgICAgICAgdGhpcy5jdWlBbGVydFNlcnZpY2VcclxuICAgICAgICAgICAgICAgIC5vcGVuKHRoaXMudHJhbnNsb2NvU2VydmljZS50cmFuc2xhdGUoJ0lOVkFMSURfRklMRV9TSVpFJyksIHtcclxuICAgICAgICAgICAgICAgICAgICBzdGF0dXM6ICdlcnJvcidcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBpc1ZpZGVvID0gZmlsZS5uYW1lLnNwbGl0KCcuJykuYXQoLTEpID09PSAnbXA0JztcclxuICAgICAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpO1xyXG5cclxuICAgICAgICBpZiAoaXNWaWRlbykge1xyXG4gICAgICAgICAgICB0aGlzLmdldENhcHR1cmVGcm9tVmlkZW8odXJsLCBmaWxlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnRodW1ibmFpbC51cGRhdGUoKHByZXYpID0+ICh7IC4uLnByZXYhLCBuYW1lOiBmaWxlLm5hbWUsIHJlc291cmNlOiB1cmwgfSkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy51cGxvYWRGaWxlKGZpbGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBsb2FkRmlsZShmaWxlOiBGaWxlKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZnJhbWVJZCA9IHRoaXMuZnJhbWVySWQoKTtcclxuICAgICAgICBjb25zdCBmcmFnbWVudElkID0gdGhpcy50aHVtYm5haWwoKT8uaWQ7XHJcblxyXG4gICAgICAgIGlmICghZnJhbWVJZCB8fCAhZnJhZ21lbnRJZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICAgIGZvcm1EYXRhLmFwcGVuZCgncmVzb3VyY2UnLCBmaWxlKTtcclxuXHJcbiAgICAgICAgdGhpcy5mcmFtZUFwaVNlcnZpY2UudXBsb2FkUmVzb3VyY2UoZm9ybURhdGEsIGZyYW1lSWQsIGZyYWdtZW50SWQpLnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Q2FwdHVyZUZyb21WaWRlbyh1cmw6IHN0cmluZywgZmlsZT86IEZpbGUpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKSBhcyBIVE1MQ2FudmFzRWxlbWVudDtcclxuICAgICAgICBjb25zdCB2aWRlbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJykgYXMgSFRNTFZpZGVvRWxlbWVudDtcclxuXHJcbiAgICAgICAgdmlkZW8uc3JjID0gdXJsO1xyXG4gICAgICAgIHZpZGVvLmN1cnJlbnRUaW1lID0gMTtcclxuICAgICAgICBjYW52YXMud2lkdGggPSAxODQ7XHJcbiAgICAgICAgY2FudmFzLmhlaWdodCA9IDEyMDtcclxuXHJcbiAgICAgICAgdmlkZW8ub25sb2FkZWRkYXRhID0gKCk6IHZvaWQgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoIWNvbnRleHQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UodmlkZW8sIDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7XHJcblxyXG4gICAgICAgICAgICBjYW52YXMudG9CbG9iKChibG9iKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWJsb2IpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgdmlkZW9DYXB0dXJlVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudGh1bWJuYWlsLnVwZGF0ZSgocHJldikgPT4gKHtcclxuICAgICAgICAgICAgICAgICAgICAuLi5wcmV2ISxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAoZmlsZT8ubmFtZSB8fCBwcmV2Py5uYW1lKSEsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2U6IHZpZGVvQ2FwdHVyZVVybFxyXG4gICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB2aWRlby5sb2FkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjaGVja0Zvcm1WYWxpZGF0aW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhdGhpcy5pc0Rlc2NyaXB0aW9uRW1wdHkoKSAmJiAhdGhpcy5mb3JtLmludmFsaWQ7XHJcbiAgICB9XHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lciAqdHJhbnNsb2NvPVwibGV0IHRcIj5cclxuICA8c2VjdGlvbiBjbGFzcz1cImNvbnRlbnRcIj5cclxuICAgIDxjdWktZm9ybS1maWVsZD5cclxuICAgICAgICA8bGFiZWwgY3VpTGFiZWwgW2lzUmVxdWlyZWRdPVwidHJ1ZVwiIFtmb3JdPVwidGl0bGVJZFwiPlxyXG4gICAgICAgICAgICB7eyB0KCdUSVRMRScpIH19XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICA8Y3VpLWlucHV0LXRleHRcclxuICAgICAgICAgICAgW2N1aVRleHRGaWVsZElkXT1cInRpdGxlSWRcIlxyXG4gICAgICAgICAgICBbY3VpVGV4dEZpZWxkUGxhY2Vob2xkZXJdPVwidCgnQUREX1RJVExFJylcIlxyXG4gICAgICAgICAgICBbY3VpVGV4dEZpZWxkSXNFcnJvcl09XCJpc1RpdGxlRXJyb3JcIlxyXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybS5jb250cm9scy50aXRsZVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICBAaWYgKGlzVGl0bGVFcnJvcikge1xyXG4gICAgICAgICAgICA8Y3VpLWdlbmVyYWwtY29udHJvbC1lcnJvci1oaW50IFtjb250cm9sXT1cImZvcm0uY29udHJvbHMudGl0bGVcIiBbaXNWaXNpYmxlXT1cInRydWVcIiAvPlxyXG4gICAgICAgIH1cclxuICAgIDwvY3VpLWZvcm0tZmllbGQ+XHJcbiAgICA8Y3VpLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPGxhYmVsIGN1aUxhYmVsIFtpc1JlcXVpcmVkXT1cInRydWVcIiBbZm9yXT1cImRlc2NyaXB0aW9uSWRcIj5cclxuICAgICAgICAgICAge3sgdCgnU0hPUlRfREVTQ1JJUFRJT04nKSB9fVxyXG4gICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgIDxjdWktaW5wdXQtdGV4dFxyXG4gICAgICAgICAgICBbY3VpVGV4dEZpZWxkSWRdPVwiZGVzY3JpcHRpb25JZFwiXHJcbiAgICAgICAgICAgIGN1aVRleHRGaWVsZFBsYWNlaG9sZGVyPVwie3t0KCdTSE9SVF9ERVNDUklQVElPTicpfX0uLi5cIlxyXG4gICAgICAgICAgICBbY3VpVGV4dEZpZWxkSXNFcnJvcl09XCJpc0Rlc2NyaXB0aW9uRXJyb3JcIlxyXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZm9ybS5jb250cm9scy5kZXNjcmlwdGlvblwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICBAaWYgKGlzRGVzY3JpcHRpb25FcnJvcikge1xyXG4gICAgICAgICAgICA8Y3VpLWdlbmVyYWwtY29udHJvbC1lcnJvci1oaW50IFtjb250cm9sXT1cImZvcm0uY29udHJvbHMuZGVzY3JpcHRpb25cIiBbaXNWaXNpYmxlXT1cInRydWVcIiAvPlxyXG4gICAgICAgIH1cclxuICAgIDwvY3VpLWZvcm0tZmllbGQ+XHJcbiAgICA8c2VjdGlvbiBjbGFzcz1cImZpbGVcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRsZVwiPnt7IHQoJ1RIVU1CTkFJTCcpIH19PC9zcGFuPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGVudF9fdXBsb2FkXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRfX3VwbG9hZC1maWxlXCI+XHJcbiAgICAgICAgICBAaWYgKHRodW1ibmFpbCgpPy5uYW1lOyBhcyBmaWxlSWQpIHtcclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWFnZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImltYWdlX19uYW1lXCI+e3sgdGh1bWJuYWlsKCk/Lm5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwhLS0gVE9ETzogbmdTcmMgLS0+XHJcbiAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWFnZV9fdmlld1wiIFtzcmNdPVwidGh1bWJuYWlsVXJsKClcIiBoZWlnaHQ9XCIxMjBcIiB3aWR0aD1cIjE4NFwiIGFsdD1cIlRodW1ibmFpbFwiIC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50X19pbmZvXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjdWlCdXR0b24gYXBwZWFyYW5jZT1cIm91dGxpbmVkLWdyYXlcIiBzaXplPVwieHhzXCIgaWNvbj1cImN1aUljb25VcGxvYWRcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU2VsZWN0RmlsZSgpXCI+XHJcbiAgICAgICAgICAgICAgICB7eyB1cGxvYWRCdXR0b25OYW1lKCkgfX1cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgQGlmICh0aHVtYm5haWwoKT8ubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNvbnRlbnRfX3JlbW92ZS1idXR0b25cIiBjdWlCdXR0b24gYXBwZWFyYW5jZT1cImxpbmtcIiBzaXplPVwic21cIiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25SZW1vdmVUaHVtYm5haWwoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IHQoJ1JFTU9WRScpIH19XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbnRlbnRfX2FjY2VwdGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgdCgnQUNDRVBURUQnKSB9fTogSlBHLCBKUEVHLCBQTkcsIE1QNCB7eyB0KCdVUF9UTycpIH19IDIwTUJcclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvc2VjdGlvbj5cclxuICAgIEBpZiAoZWRpdG9ySWQoKTsgYXMgZWRpdG9ySWQpIHtcclxuICAgICAgICA8Y3VpLWVkaXRvci1ibG9ja1xyXG4gICAgICAgICAgICBbdGl0bGVdPVwiZm9ybS5jb250cm9scy50aXRsZS52YWx1ZSB8fCB0aXRsZSgpXCJcclxuICAgICAgICAgICAgW2NvbmZpZ109XCJjb25maWcoKVwiXHJcbiAgICAgICAgICAgIFtlZGl0b3JJZF09XCJlZGl0b3JJZFwiXHJcbiAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgKGVkaXRvckVtcHR5KT1cIm9uRWRpdG9yRW1wdHkoJGV2ZW50KVwiXHJcbiAgICAgICAgPjwvY3VpLWVkaXRvci1ibG9jaz5cclxuICAgIH1cclxuICA8L3NlY3Rpb24+XHJcbjwvbmctY29udGFpbmVyPlxyXG4iXX0=
@@ -7886,6 +7886,7 @@ class CuiUtilityInfoComponent {
7886
7886
  });
7887
7887
  this.heading = null;
7888
7888
  this.title = input.required();
7889
+ this.description = input.required();
7889
7890
  this.framerId = input.required();
7890
7891
  this.baseResourceUrl = input.required();
7891
7892
  this.config = input.required();
@@ -7929,13 +7930,13 @@ class CuiUtilityInfoComponent {
7929
7930
  if (!title) {
7930
7931
  return;
7931
7932
  }
7932
- this.initTitleSubscriptions();
7933
+ this.initFormSubscriptions();
7933
7934
  this.initFrameFragments();
7934
7935
  effectRef.destroy();
7935
7936
  });
7936
7937
  }
7937
- initTitleSubscriptions() {
7938
- this.form.patchValue({ title: this.title() });
7938
+ initFormSubscriptions() {
7939
+ this.form.setValue({ title: this.title(), description: this.description() }, { emitEvent: false });
7939
7940
  this.form.statusChanges
7940
7941
  .pipe(takeUntilDestroyed(this.destroy))
7941
7942
  .subscribe(() => this.isFormValidChanged.emit(this.checkFormValidation()));
@@ -8049,7 +8050,7 @@ class CuiUtilityInfoComponent {
8049
8050
  return !this.isDescriptionEmpty() && !this.form.invalid;
8050
8051
  }
8051
8052
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiUtilityInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
8052
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CuiUtilityInfoComponent, isStandalone: true, selector: "cui-utility-info", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: true, transformFunction: null }, framerId: { classPropertyName: "framerId", publicName: "framerId", isSignal: true, isRequired: true, transformFunction: null }, baseResourceUrl: { classPropertyName: "baseResourceUrl", publicName: "baseResourceUrl", isSignal: true, isRequired: true, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { formChanged: "formChanged", isFormValidChanged: "isFormValidChanged" }, ngImport: i0, template: "<ng-container *transloco=\"let t\">\r\n <section class=\"content\">\r\n <cui-form-field>\r\n <label cuiLabel [isRequired]=\"true\" [for]=\"titleId\">\r\n {{ t('TITLE') }}\r\n </label>\r\n <cui-input-text\r\n [cuiTextFieldId]=\"titleId\"\r\n [cuiTextFieldPlaceholder]=\"t('ADD_TITLE')\"\r\n [cuiTextFieldIsError]=\"isTitleError\"\r\n [formControl]=\"form.controls.title\"\r\n />\r\n @if (isTitleError) {\r\n <cui-general-control-error-hint [control]=\"form.controls.title\" [isVisible]=\"true\" />\r\n }\r\n </cui-form-field>\r\n <cui-form-field>\r\n <label cuiLabel [isRequired]=\"true\" [for]=\"descriptionId\">\r\n {{ t('SHORT_DESCRIPTION') }}\r\n </label>\r\n <cui-input-text\r\n [cuiTextFieldId]=\"descriptionId\"\r\n cuiTextFieldPlaceholder=\"{{t('SHORT_DESCRIPTION')}}...\"\r\n [cuiTextFieldIsError]=\"isDescriptionError\"\r\n [formControl]=\"form.controls.description\"\r\n />\r\n @if (isDescriptionError) {\r\n <cui-general-control-error-hint [control]=\"form.controls.description\" [isVisible]=\"true\" />\r\n }\r\n </cui-form-field>\r\n <section class=\"file\">\r\n <span class=\"title\">{{ t('THUMBNAIL') }}</span>\r\n <div class=\"content__upload\">\r\n <div class=\"content__upload-file\">\r\n @if (thumbnail()?.name; as fileId) {\r\n <div class=\"image\">\r\n <span class=\"image__name\">{{ thumbnail()?.name }}</span>\r\n <!-- TODO: ngSrc -->\r\n <img class=\"image__view\" [src]=\"thumbnailUrl()\" height=\"120\" width=\"184\" alt=\"Thumbnail\" />\r\n </div>\r\n }\r\n <div class=\"content__info\">\r\n <button type=\"button\" cuiButton appearance=\"outlined-gray\" size=\"xxs\" icon=\"cuiIconUpload\"\r\n (click)=\"onSelectFile()\">\r\n {{ uploadButtonName() }}\r\n </button>\r\n @if (thumbnail()?.name) {\r\n <button class=\"content__remove-button\" cuiButton appearance=\"link\" size=\"sm\" type=\"button\"\r\n (click)=\"onRemoveThumbnail()\">\r\n {{ t('REMOVE') }}\r\n </button>\r\n }\r\n\r\n <span class=\"content__accepted\">\r\n {{ t('ACCEPTED') }}: JPG, JPEG, PNG, MP4 {{ t('UP_TO') }} 20MB\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n @if (editorId(); as editorId) {\r\n <cui-editor-block\r\n [title]=\"form.controls.title.value || title()\"\r\n [config]=\"config()\"\r\n [editorId]=\"editorId\"\r\n [required]=\"true\"\r\n (editorEmpty)=\"onEditorEmpty($event)\"\r\n ></cui-editor-block>\r\n }\r\n </section>\r\n</ng-container>\r\n", styles: ["::ng-deep cui-dialog:has(.instruction-description-modal){inset:0;margin:auto;transform:none!important}:host{display:block}.title{font-weight:500;font-size:14px;line-height:20px;display:flex;gap:2px}.title_required{color:var(--cui-danger)}.content{display:flex;flex-direction:column;gap:16px;padding:16px 24px}.content__upload{padding:12px 16px;border-radius:8px;border:1px solid var(--cui-base-200);background:var(--cui-base-10)}.content__info{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.content__accepted{color:var(--cui-base-500)}.content__upload-file{display:flex;align-items:center;gap:8px}.content__upload-file input[type=file]{display:none}.content__remove-button ::ng-deep .c-content{color:var(--cui-danger)!important}.file{display:flex;flex-direction:column;gap:4px}.description_invalid{border:1px solid var(--cui-danger)}.image{position:relative;display:inline-block}.image__view{border-radius:8px;object-fit:cover}.image__name{position:absolute;top:6px;left:14px;color:var(--cui-base-0);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:170px;z-index:1}.image:after{content:\"\";position:absolute;top:0;left:0;width:100%;height:100%;background-color:#0003;z-index:0;pointer-events:none;border-radius:8px}.button-save{margin-left:auto}.instruction-description-modal{text-transform:none}.empty{padding:16px;color:var(--cui-base-500);text-align:center}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CuiAccordionModule) }, { kind: "ngmodule", type: i0.forwardRef(() => CuiButtonModule) }, { kind: "component", type: i0.forwardRef(() => CuiButtonComponent), selector: "button[cuiButton], a[cuiButton]", inputs: ["shape", "disabled", "isLoaderShown", "icon", "iconRight", "appearance", "size"] }, { kind: "ngmodule", type: i0.forwardRef(() => CuiFormFieldModule) }, { kind: "component", type: i0.forwardRef(() => CuiFormFieldComponent), selector: "cui-form-field" }, { kind: "ngmodule", type: i0.forwardRef(() => CuiHintModule) }, { kind: "ngmodule", type: i0.forwardRef(() => CuiInputModule) }, { kind: "component", type: i0.forwardRef(() => CuiInputTextComponent), selector: "cui-input-text" }, { kind: "directive", type: i0.forwardRef(() => CuiTextFieldIdDirective), selector: "[cuiTextFieldId]", inputs: ["cuiTextFieldId"] }, { kind: "directive", type: i0.forwardRef(() => CuiTextFieldPlaceholderDirective), selector: "[cuiTextFieldPlaceholder]", inputs: ["cuiTextFieldPlaceholder"] }, { kind: "directive", type: i0.forwardRef(() => CuiTextFieldIsErrorDirective), selector: "[cuiTextFieldIsError]", inputs: ["cuiTextFieldIsError"] }, { kind: "ngmodule", type: i0.forwardRef(() => CuiLabelModule) }, { kind: "component", type: i0.forwardRef(() => CuiLabelComponent), selector: "label[cuiLabel]", inputs: ["isRequired"] }, { kind: "component", type: i0.forwardRef(() => CuiEditorBlockComponent), selector: "cui-editor-block", inputs: ["title", "editorId", "config", "required"], outputs: ["editorEmpty"] }, { kind: "component", type: i0.forwardRef(() => CuiGeneralControlErrorHintComponent), selector: "cui-general-control-error-hint", inputs: ["control", "isVisible"] }, { kind: "ngmodule", type: i0.forwardRef(() => ReactiveFormsModule) }, { kind: "directive", type: i0.forwardRef(() => i2$1.NgControlStatus), selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i0.forwardRef(() => i2$1.FormControlDirective), selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i0.forwardRef(() => TranslocoDirective), selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
8053
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CuiUtilityInfoComponent, isStandalone: true, selector: "cui-utility-info", inputs: { title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: true, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: true, transformFunction: null }, framerId: { classPropertyName: "framerId", publicName: "framerId", isSignal: true, isRequired: true, transformFunction: null }, baseResourceUrl: { classPropertyName: "baseResourceUrl", publicName: "baseResourceUrl", isSignal: true, isRequired: true, transformFunction: null }, config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { formChanged: "formChanged", isFormValidChanged: "isFormValidChanged" }, ngImport: i0, template: "<ng-container *transloco=\"let t\">\r\n <section class=\"content\">\r\n <cui-form-field>\r\n <label cuiLabel [isRequired]=\"true\" [for]=\"titleId\">\r\n {{ t('TITLE') }}\r\n </label>\r\n <cui-input-text\r\n [cuiTextFieldId]=\"titleId\"\r\n [cuiTextFieldPlaceholder]=\"t('ADD_TITLE')\"\r\n [cuiTextFieldIsError]=\"isTitleError\"\r\n [formControl]=\"form.controls.title\"\r\n />\r\n @if (isTitleError) {\r\n <cui-general-control-error-hint [control]=\"form.controls.title\" [isVisible]=\"true\" />\r\n }\r\n </cui-form-field>\r\n <cui-form-field>\r\n <label cuiLabel [isRequired]=\"true\" [for]=\"descriptionId\">\r\n {{ t('SHORT_DESCRIPTION') }}\r\n </label>\r\n <cui-input-text\r\n [cuiTextFieldId]=\"descriptionId\"\r\n cuiTextFieldPlaceholder=\"{{t('SHORT_DESCRIPTION')}}...\"\r\n [cuiTextFieldIsError]=\"isDescriptionError\"\r\n [formControl]=\"form.controls.description\"\r\n />\r\n @if (isDescriptionError) {\r\n <cui-general-control-error-hint [control]=\"form.controls.description\" [isVisible]=\"true\" />\r\n }\r\n </cui-form-field>\r\n <section class=\"file\">\r\n <span class=\"title\">{{ t('THUMBNAIL') }}</span>\r\n <div class=\"content__upload\">\r\n <div class=\"content__upload-file\">\r\n @if (thumbnail()?.name; as fileId) {\r\n <div class=\"image\">\r\n <span class=\"image__name\">{{ thumbnail()?.name }}</span>\r\n <!-- TODO: ngSrc -->\r\n <img class=\"image__view\" [src]=\"thumbnailUrl()\" height=\"120\" width=\"184\" alt=\"Thumbnail\" />\r\n </div>\r\n }\r\n <div class=\"content__info\">\r\n <button type=\"button\" cuiButton appearance=\"outlined-gray\" size=\"xxs\" icon=\"cuiIconUpload\"\r\n (click)=\"onSelectFile()\">\r\n {{ uploadButtonName() }}\r\n </button>\r\n @if (thumbnail()?.name) {\r\n <button class=\"content__remove-button\" cuiButton appearance=\"link\" size=\"sm\" type=\"button\"\r\n (click)=\"onRemoveThumbnail()\">\r\n {{ t('REMOVE') }}\r\n </button>\r\n }\r\n\r\n <span class=\"content__accepted\">\r\n {{ t('ACCEPTED') }}: JPG, JPEG, PNG, MP4 {{ t('UP_TO') }} 20MB\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n @if (editorId(); as editorId) {\r\n <cui-editor-block\r\n [title]=\"form.controls.title.value || title()\"\r\n [config]=\"config()\"\r\n [editorId]=\"editorId\"\r\n [required]=\"true\"\r\n (editorEmpty)=\"onEditorEmpty($event)\"\r\n ></cui-editor-block>\r\n }\r\n </section>\r\n</ng-container>\r\n", styles: ["::ng-deep cui-dialog:has(.instruction-description-modal){inset:0;margin:auto;transform:none!important}:host{display:block}.title{font-weight:500;font-size:14px;line-height:20px;display:flex;gap:2px}.title_required{color:var(--cui-danger)}.content{display:flex;flex-direction:column;gap:16px;padding:16px 24px}.content__upload{padding:12px 16px;border-radius:8px;border:1px solid var(--cui-base-200);background:var(--cui-base-10)}.content__info{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.content__accepted{color:var(--cui-base-500)}.content__upload-file{display:flex;align-items:center;gap:8px}.content__upload-file input[type=file]{display:none}.content__remove-button ::ng-deep .c-content{color:var(--cui-danger)!important}.file{display:flex;flex-direction:column;gap:4px}.description_invalid{border:1px solid var(--cui-danger)}.image{position:relative;display:inline-block}.image__view{border-radius:8px;object-fit:cover}.image__name{position:absolute;top:6px;left:14px;color:var(--cui-base-0);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:170px;z-index:1}.image:after{content:\"\";position:absolute;top:0;left:0;width:100%;height:100%;background-color:#0003;z-index:0;pointer-events:none;border-radius:8px}.button-save{margin-left:auto}.instruction-description-modal{text-transform:none}.empty{padding:16px;color:var(--cui-base-500);text-align:center}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CuiAccordionModule) }, { kind: "ngmodule", type: i0.forwardRef(() => CuiButtonModule) }, { kind: "component", type: i0.forwardRef(() => CuiButtonComponent), selector: "button[cuiButton], a[cuiButton]", inputs: ["shape", "disabled", "isLoaderShown", "icon", "iconRight", "appearance", "size"] }, { kind: "ngmodule", type: i0.forwardRef(() => CuiFormFieldModule) }, { kind: "component", type: i0.forwardRef(() => CuiFormFieldComponent), selector: "cui-form-field" }, { kind: "ngmodule", type: i0.forwardRef(() => CuiHintModule) }, { kind: "ngmodule", type: i0.forwardRef(() => CuiInputModule) }, { kind: "component", type: i0.forwardRef(() => CuiInputTextComponent), selector: "cui-input-text" }, { kind: "directive", type: i0.forwardRef(() => CuiTextFieldIdDirective), selector: "[cuiTextFieldId]", inputs: ["cuiTextFieldId"] }, { kind: "directive", type: i0.forwardRef(() => CuiTextFieldPlaceholderDirective), selector: "[cuiTextFieldPlaceholder]", inputs: ["cuiTextFieldPlaceholder"] }, { kind: "directive", type: i0.forwardRef(() => CuiTextFieldIsErrorDirective), selector: "[cuiTextFieldIsError]", inputs: ["cuiTextFieldIsError"] }, { kind: "ngmodule", type: i0.forwardRef(() => CuiLabelModule) }, { kind: "component", type: i0.forwardRef(() => CuiLabelComponent), selector: "label[cuiLabel]", inputs: ["isRequired"] }, { kind: "component", type: i0.forwardRef(() => CuiEditorBlockComponent), selector: "cui-editor-block", inputs: ["title", "editorId", "config", "required"], outputs: ["editorEmpty"] }, { kind: "component", type: i0.forwardRef(() => CuiGeneralControlErrorHintComponent), selector: "cui-general-control-error-hint", inputs: ["control", "isVisible"] }, { kind: "ngmodule", type: i0.forwardRef(() => ReactiveFormsModule) }, { kind: "directive", type: i0.forwardRef(() => i2$1.NgControlStatus), selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i0.forwardRef(() => i2$1.FormControlDirective), selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i0.forwardRef(() => TranslocoDirective), selector: "[transloco]", inputs: ["transloco", "translocoParams", "translocoScope", "translocoRead", "translocoPrefix", "translocoLang", "translocoLoadingTpl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
8053
8054
  }
8054
8055
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CuiUtilityInfoComponent, decorators: [{
8055
8056
  type: Component,