@posiwise/admin-module 0.0.175 → 0.0.177

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.
@@ -20,10 +20,11 @@ import * as i8 from "@angular/common";
20
20
  import * as i9 from "@angular/forms";
21
21
  import * as i10 from "ngx-ui-switch";
22
22
  import * as i11 from "primeng/progressspinner";
23
- import * as i12 from "@posiwise/shared-components";
24
- import * as i13 from "@posiwise/directives";
25
- import * as i14 from "ngx-quill";
26
- import * as i15 from "@jsverse/transloco";
23
+ import * as i12 from "@posiwise/utils";
24
+ import * as i13 from "@posiwise/shared-components";
25
+ import * as i14 from "@posiwise/directives";
26
+ import * as i15 from "ngx-quill";
27
+ import * as i16 from "@jsverse/transloco";
27
28
  export class ResourceAdminDetailsComponent extends AppBaseComponent {
28
29
  constructor(modalService, adminService, injector, tagService, subscriptionService) {
29
30
  super(injector);
@@ -364,7 +365,7 @@ export class ResourceAdminDetailsComponent extends AppBaseComponent {
364
365
  super.ngOnDestroy();
365
366
  }
366
367
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ResourceAdminDetailsComponent, deps: [{ token: i1.NgbModal }, { token: i2.AdminService }, { token: i0.Injector }, { token: i3.TagService }, { token: i3.SubscriptionService }], target: i0.ɵɵFactoryTarget.Component }); }
367
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: ResourceAdminDetailsComponent, selector: "pw-resources-details-index", usesInheritance: true, ngImport: i0, template: "<div class=\"container-fluid pw-tab overflow-hidden\">\n <div class=\"dashboard\">\n <div class=\"dashboard-body\">\n\n <div class=\"me-auto col-xs-6 mt-4\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"navigateToResourceList()\"\n class=\"previous\">\n <i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n Add or edit resource\n </h3>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n\n <div class=\"p-2 mt-3\">\n <form [formGroup]=\"form\"\n *ngIf=\"!isLoading\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <!-- Title -->\n <pw-input-container [label]=\"'Label.Title' | transloco\"\n class=\"col-12\"\n name=\"title\"\n [errorMsg]=\"'Resource.Posts.Validation.Title' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"title\"\n [ngClass]=\"{ 'is-invalid': submitted && f['title'].errors }\" />\n </pw-input-container>\n\n <!-- Blurb -->\n <pw-input-container [label]=\"'Resource.Posts.Blurb' | transloco\"\n class=\"col-12\"\n name=\"blurb\"\n class=\"blurb\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'The blurb is used for the metadata.description field'\">\n <textarea class=\"form-control\"\n rows=\"3\"\n formControlName=\"blurb\"\n placeholder=\"Short description for SEO meta description\"></textarea>\n </pw-input-container>\n\n\n <!-- Rich Text Editor -->\n <pw-input-container [label]=\"'Resource.Posts.Body' | transloco\"\n class=\"col-9 col-md-9 col-sm-12\"\n name=\"body\"\n [errorMsg]=\"'Resource.Posts.Validation.Body' | transloco\">\n <quill-editor [styles]=\"{ height: '500px' }\"\n class=\"quillEditor\" [modules]=\"editorConfig\"\n formControlName=\"body\"\n [ngClass]=\"{\n 'w-100': true,\n 'quill-container': true,\n 'is-invalid': submitted && f['body'].errors\n }\">\n </quill-editor>\n </pw-input-container>\n <div class=\"col-12 col-md-3 col-sm-4 my-4\">\n <div class=\"text-center mb-4\">\n <label for=\"coverPicture\">{{ 'Resource.Posts.CoverPicture' | transloco }}</label>\n <div class=\"text-center text-center d-flex flex-column align-items-center\">\n <img [src]=\"(image !== null && !image?.includes('default-photo.jpg') )? image : 'assets/img/resource/blog.png'\"\n (keydown.enter)=\"openModal(content)\"\n (click)=\"openModal(content)\"\n class=\"image w-100\" alt=\"Modal\"\n (error)=\"handleImageError($event, 'assets/img/resource/blog.png')\" />\n <div class=\"d-flex justify-content-between align-items-center mt-2\">\n <a class=\"d-inline-block\" (click)=\"openModal(content)\">\n {{ slug !== 'create' ? 'Edit' : 'Add' }} Picture\n </a>\n <i\n class=\"fa fa-trash delete-icon text-danger ms-2 cursor-pointer\"\n title=\"Remove Image\"\n (click)=\"deleteCoverImage()\"\n (keydown.enter)=\"deleteCoverImage()\"\n *ngIf=\"image && !image.includes('default-photo.jpg')\">\n </i>\n </div>\n </div>\n </div>\n\n <!-- Rectangular Picture -->\n <div class=\"text-center d-flex flex-column align-items-center\">\n <label for=\"rectangularPicture\">Rectangular Picture</label>\n <img\n [src]=\"(rectangularImage !== null && !rectangularImage?.includes('default-photo.jpg')) ? rectangularImage : 'assets/img/resource/blog.png'\"\n (keydown.enter)=\"openRectModal(rectContent)\"\n (click)=\"openRectModal(rectContent)\"\n class=\"image rec-img\"\n [ngClass]=\"{ 'w-100': rectangularImage === null || rectangularImage?.includes('default-photo.jpg') }\"\n alt=\"Uploaded rectangular media preview\"\n (error)=\"handleImageError($event, 'assets/img/resource/blog.png')\" />\n <div class=\"d-flex justify-content-between align-items-center mt-2\">\n <a class=\"d-inline-block\" (click)=\"openRectModal(rectContent)\">\n {{ slug !== 'create' ? 'Edit' : 'Add' }} Picture\n </a>\n <i\n class=\"fa fa-trash delete-icon text-danger ms-2 cursor-pointer\"\n title=\"Remove Image\"\n (click)=\"deleteRectangularImage()\"\n (keydown.enter)=\"deleteRectangularImage()\"\n *ngIf=\"rectangularImage && !rectangularImage.includes('default-photo.jpg')\">\n </i>\n </div>\n\n </div>\n\n </div>\n <pw-input-container [label]=\"'Resource.Posts.CtaText' | transloco\"\n class=\"col-12 col-md-6\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Resource.Posts.Tooltip.CtaText' | transloco\"\n name=\"cta_text\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"cta_text\"\n [ngClass]=\"{ 'is-invalid': submitted && f['title'].errors }\" />\n </pw-input-container>\n\n <pw-input-container [label]=\"'Resource.Posts.ExternalUrl' | transloco\"\n class=\"col-12 col-md-6\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Resource.Posts.Tooltip.ExternalUrl' | transloco\"\n name=\"external_url\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"external_url\"\n [ngClass]=\"{ 'is-invalid': submitted && f['external_url'].errors }\" />\n </pw-input-container>\n\n <pw-input-container [label]=\"'Resource.Posts.Tags' | transloco \" class=\"ui-fluid skills-modal col-12 col-md-6 col-sm-12 tags\"\n [showTooltip]=\"true\" [tooltipText]=\"'Resource.Posts.Tooltip.CtaText' | transloco\" name=\"cta_text\">\n <p-autoComplete [(ngModel)]=\"selectedTags\" class=\"body-bg\" [suggestions]=\"tagsSuggestion\" dataKey=\"id\" field=\"name\"\n (completeMethod)=\"search($event)\" styleClass=\"w-100\" [minLength]=\"1\" [maxlength]=\"10\" [dropdown]=\"true\"\n [ngModelOptions]=\"{ standalone: true }\" placeholder=\"Tags\" [multiple]=\"true\">\n </p-autoComplete>\n </pw-input-container>\n\n <pw-input-container [label]=\"'Author' | transloco\"\n class=\"col-12 col-md-4 col-sm-6\"\n name=\"author_id\"\n [errorMsg]=\"'Please select an author' | transloco\">\n <p-dropdown\n formControlName=\"author_id\"\n [options]=\"availableAuthors\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [placeholder]=\"'Select Author' | transloco\"\n [loading]=\"authorsLoading\"\n [ngClass]=\"{ 'is-invalid': submitted && f['author_id'].errors }\"\n styleClass=\"w-100\">\n <ng-template pTemplate=\"item\" let-author>\n <div>\n <div>{{ author.label }}</div>\n </div>\n </ng-template>\n </p-dropdown>\n </pw-input-container>\n\n\n <!-- WHEN and AUTHOR on same line -->\n <div class=\"col-12 col-md-2 col-sm-6\">\n <div class=\"mb-3\">\n <pw-input-container [label]=\"'Resource.Posts.When' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Resource.Posts.Tooltip.When' | transloco\"\n name=\"when\">\n <div>\n <p-calendar formControlName=\"when\"\n [showIcon]=\"true\"\n dateFormat=\"dd-M-yy\"\n [placeholder]=\"'Select Date'\"\n [ngClass]=\"{'is-invalid': submitted && f['when'].errors}\">\n </p-calendar>\n </div>\n </pw-input-container>\n </div>\n </div>\n\n <!-- Author Dropdown -->\n <!-- Three toggles on next line -->\n <div class=\"col-12\">\n <div class=\"row\">\n <div class=\"col-12 col-md-2 col-sm-6\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\" [tooltipText]=\"'Resource.Posts.Tooltip.ShowCase' | transloco\"\n [label]=\"'Resource.Posts.ShowCase' | transloco\" name=\"showcase\">\n <ui-switch class=\"d-block\" formControlName=\"showcase\" name=\"showcase\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n\n <!--Published At -->\n <div class=\"col-12 col-md-2 col-sm-6\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Resource.Posts.Tooltip.Published' | transloco\"\n [label]=\"'Resource.Posts.Published' | transloco\"\n name=\"published_at\">\n <ui-switch class=\"d-block\"\n formControlName=\"published_at\"\n name=\"published_at\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n\n <!--Accepted At -->\n <div class=\"col-12 col-md-2 col-sm-6 accept-icon\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Resource.Posts.Tooltip.AcceptedByAdmin' | transloco\"\n [label]=\"'Resource.Posts.AcceptedByAdmin' | transloco\"\n name=\"accepted_at\">\n <ui-switch class=\"d-block\"\n formControlName=\"accepted_at\"\n name=\"accepted_at\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n </div>\n </div>\n\n </div>\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"navigateToResourceList()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"submitted\"\n class=\"btn btn-primary\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n\n\n<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Upload Picture</h5>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <small>You can upload a JPG, GIF, or PNG file. (Do not upload pictures containing celebrities,\n nudity, artwork or copyrighted images.)</small>\n <pw-image-cropper #profile\n aspectRatio=\"auto\"\n (imageSelectionEvent)=\"onImageSelection($event)\"\n (closeEvent)=\"onClose()\">\n </pw-image-cropper>\n </div>\n</ng-template>\n\n<ng-template #rectContent let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Upload Picture</h5>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n </button>\n </div>\n\n <div class=\"modal-body\">\n <small>\n You can upload a JPG, GIF, or PNG file. (Do not upload pictures containing celebrities,\n nudity, artwork or copyrighted images.)\n </small>\n\n\n <pw-image-cropper\n #profile\n [aspectRatio]=\"'dynamic'\"\n [dynamicData]=\"getAspectRatio()\"\n (imageSelectionEvent)=\"onRectangularImageSelection($event)\"\n (closeEvent)=\"onClose()\">\n </pw-image-cropper>\n </div>\n</ng-template>\n", styles: [".col-md-6.display-grid{display:grid}body .ui-autocomplete.ui-autocomplete-multiple .ui-autocomplete-multiple-container{width:100%}body .ui-inputtext{padding:0}.comment{border:1px solid rgb(238,238,238)}.is-invalid .ql-container.ql-snow,.is-invalid .ql-toolbar.ql-snow{border-color:#dc3545}.rec-img{max-width:100%;max-height:400px!important}.body-bg span .ui-autocomplete-multiple-container{background-color:#f5f7fa}.p-autocomplete .p-autocomplete-multiple-container .p-autocomplete-token{color:var(--tabs_text)}.tags .info-circle .tooltiptext:after{left:25px!important}.tags .info-circle .tooltiptext{left:-30px!important}.blurb .info-circle .tooltiptext:after{left:50px!important}.blurb .info-circle .tooltiptext{left:-55px!important}.accept-icon .info-circle .tooltiptext:after{left:110px!important}.accept-icon .info-circle .tooltiptext{right:-85px!important}\n"], dependencies: [{ kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i5.AutoComplete, selector: "p-autoComplete", inputs: ["minLength", "delay", "style", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "disabled", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "maxlength", "name", "required", "size", "appendTo", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "showClear", "field", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "overlayOptions", "suggestions", "itemSize", "optionLabel", "optionValue", "id", "searchMessage", "emptySelectionMessage", "selectionMessage", "autoOptionFocus", "selectOnFocus", "searchLocale", "optionDisabled", "focusOnHover", "variant"], outputs: ["completeMethod", "onSelect", "onUnselect", "onFocus", "onBlur", "onDropdownClick", "onClear", "onKeyUp", "onShow", "onHide", "onLazyLoad"] }, { kind: "component", type: i6.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "component", type: i7.Calendar, selector: "p-calendar", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepYearPicker", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i9.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i10.UiSwitchComponent, selector: "ui-switch", inputs: ["size", "color", "switchOffColor", "switchColor", "defaultBgColor", "defaultBoColor", "checkedLabel", "uncheckedLabel", "checkedTextColor", "uncheckedTextColor", "beforeChange", "ariaLabel", "checked", "disabled", "reverse", "loading"], outputs: ["change", "changeEvent", "valueChange"] }, { kind: "component", type: i11.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i12.ProfileImageCropperComponent, selector: "pw-image-cropper", inputs: ["aspectRatio", "dynamicData"], outputs: ["imageSelectionEvent", "closeEvent", "fileChangeEvent"] }, { kind: "component", type: i12.InputContainerComponent, selector: "pw-input-container", inputs: ["name", "label", "labelClass", "tooltipPosition", "required", "errorMsg", "isReadOnly", "showTooltip", "tooltipText", "showTriangle", "afterLabel", "showAfterLabel", "showTriangleText", "isLeftTooltip"] }, { kind: "directive", type: i13.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "directive", type: i13.LazyImgDirective, selector: "img" }, { kind: "directive", type: i9.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i9.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i14.QuillEditorComponent, selector: "quill-editor" }, { kind: "pipe", type: i15.TranslocoPipe, name: "transloco" }], encapsulation: i0.ViewEncapsulation.None }); }
368
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: ResourceAdminDetailsComponent, selector: "pw-resources-details-index", usesInheritance: true, ngImport: i0, template: "<div class=\"container-fluid pw-tab overflow-hidden\">\n <div class=\"dashboard\">\n <div class=\"dashboard-body\">\n\n <div class=\"me-auto col-xs-6 mt-4\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"navigateToResourceList()\"\n class=\"previous\">\n <i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n Add or edit resource\n </h3>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n\n <div class=\"p-2 mt-3\">\n <form [formGroup]=\"form\"\n *ngIf=\"!isLoading\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <!-- Title -->\n <pw-input-container [label]=\"'Label.Title' | transloco\"\n class=\"col-12\"\n name=\"title\"\n [errorMsg]=\"'Resource.Posts.Validation.Title' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"title\"\n [ngClass]=\"{ 'is-invalid': submitted && f['title'].errors }\" />\n </pw-input-container>\n\n <!-- Blurb -->\n <pw-input-container [label]=\"'Resource.Posts.Blurb' | transloco\"\n class=\"col-12\"\n name=\"blurb\"\n class=\"blurb\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'The blurb is used for the metadata.description field'\">\n <textarea class=\"form-control\"\n rows=\"3\"\n formControlName=\"blurb\"\n placeholder=\"Short description for SEO meta description\"></textarea>\n </pw-input-container>\n\n\n <!-- Rich Text Editor -->\n <pw-input-container [label]=\"'Resource.Posts.Body' | transloco\"\n class=\"col-9 col-md-9 col-sm-12\"\n name=\"body\"\n [errorMsg]=\"'Resource.Posts.Validation.Body' | transloco\">\n <quill-editor [styles]=\"{ height: '500px' }\"\n class=\"quillEditor\" [modules]=\"editorConfig\"\n formControlName=\"body\"\n [ngClass]=\"{\n 'w-100': true,\n 'quill-container': true,\n 'is-invalid': submitted && f['body'].errors\n }\">\n </quill-editor>\n </pw-input-container>\n <div class=\"col-12 col-md-3 col-sm-4 my-4\">\n <div class=\"text-center mb-4\">\n <label for=\"coverPicture\">{{ 'Resource.Posts.CoverPicture' | transloco }}</label>\n <div class=\"text-center text-center d-flex flex-column align-items-center\">\n <img [src]=\"(image !== null && !image?.includes('default-photo.jpg') )? image : 'assets/img/resource/blog.png'\"\n (keydown.enter)=\"openModal(content)\"\n (click)=\"openModal(content)\"\n class=\"image w-100\" alt=\"Modal\"\n (error)=\"handleImageError($event, 'assets/img/resource/blog.png')\" />\n <div class=\"d-flex justify-content-between align-items-center mt-2\">\n <a class=\"d-inline-block\" (click)=\"openModal(content)\">\n {{ slug !== 'create' ? 'Edit' : 'Add' }} Picture\n </a>\n <i\n class=\"fa fa-trash delete-icon text-danger ms-2 cursor-pointer\"\n title=\"Remove Image\"\n (click)=\"deleteCoverImage()\"\n (keydown.enter)=\"deleteCoverImage()\"\n *ngIf=\"image && !image.includes('default-photo.jpg')\">\n </i>\n </div>\n </div>\n </div>\n\n <!-- Rectangular Picture -->\n <div class=\"text-center d-flex flex-column align-items-center\">\n <label for=\"rectangularPicture\">Rectangular Picture</label>\n <img\n [src]=\"(rectangularImage !== null && !rectangularImage?.includes('default-photo.jpg')) ? rectangularImage : 'assets/img/resource/blog.png'\"\n (keydown.enter)=\"openRectModal(rectContent)\"\n (click)=\"openRectModal(rectContent)\"\n class=\"image rec-img\"\n [ngClass]=\"{ 'w-100': rectangularImage === null || rectangularImage?.includes('default-photo.jpg') }\"\n alt=\"Uploaded rectangular media preview\"\n (error)=\"handleImageError($event, 'assets/img/resource/blog.png')\" />\n <div class=\"d-flex justify-content-between align-items-center mt-2\">\n <a class=\"d-inline-block\" (click)=\"openRectModal(rectContent)\">\n {{ slug !== 'create' ? 'Edit' : 'Add' }} Picture\n </a>\n <i\n class=\"fa fa-trash delete-icon text-danger ms-2 cursor-pointer\"\n title=\"Remove Image\"\n (click)=\"deleteRectangularImage()\"\n (keydown.enter)=\"deleteRectangularImage()\"\n *ngIf=\"rectangularImage && !rectangularImage.includes('default-photo.jpg')\">\n </i>\n </div>\n\n </div>\n\n </div>\n <pw-input-container [label]=\"'Resource.Posts.CtaText' | transloco\"\n class=\"col-12 col-md-6\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Resource.Posts.Tooltip.CtaText' | transloco\"\n name=\"cta_text\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"cta_text\"\n [ngClass]=\"{ 'is-invalid': submitted && f['title'].errors }\" />\n </pw-input-container>\n\n <pw-input-container [label]=\"'Resource.Posts.ExternalUrl' | transloco\"\n class=\"col-12 col-md-6\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Resource.Posts.Tooltip.ExternalUrl' | transloco\"\n name=\"external_url\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"external_url\"\n [ngClass]=\"{ 'is-invalid': submitted && f['external_url'].errors }\" />\n </pw-input-container>\n\n <pw-input-container [label]=\"'Resource.Posts.Tags' | transloco \" class=\"ui-fluid skills-modal col-12 col-md-6 col-sm-12 tags\"\n [showTooltip]=\"true\" [tooltipText]=\"'Resource.Posts.Tooltip.CtaText' | transloco\" name=\"cta_text\">\n <p-autoComplete [(ngModel)]=\"selectedTags\" class=\"body-bg\" [suggestions]=\"tagsSuggestion\" dataKey=\"id\" field=\"name\"\n (completeMethod)=\"search($event)\" styleClass=\"w-100\" [minLength]=\"1\" [maxlength]=\"10\" [dropdown]=\"true\"\n [ngModelOptions]=\"{ standalone: true }\" placeholder=\"Tags\" [multiple]=\"true\">\n </p-autoComplete>\n </pw-input-container>\n\n <pw-input-container [label]=\"'Author' | transloco\"\n class=\"col-12 col-md-4 col-sm-6\"\n name=\"author_id\"\n [errorMsg]=\"'Please select an author' | transloco\">\n <p-dropdown\n formControlName=\"author_id\"\n [options]=\"availableAuthors\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [placeholder]=\"'Select Author' | transloco\"\n [loading]=\"authorsLoading\"\n [ngClass]=\"{ 'is-invalid': submitted && f['author_id'].errors }\"\n styleClass=\"w-100\">\n <ng-template pTemplate=\"item\" let-author>\n <div>\n <div>{{ author.label }}</div>\n </div>\n </ng-template>\n </p-dropdown>\n </pw-input-container>\n\n\n <!-- WHEN and AUTHOR on same line -->\n <div class=\"col-12 col-md-2 col-sm-6\">\n <div class=\"mb-3\">\n <pw-input-container [label]=\"'Resource.Posts.When' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Resource.Posts.Tooltip.When' | transloco\"\n name=\"when\">\n <div>\n <p-calendar formControlName=\"when\"\n [showIcon]=\"true\"\n dateFormat=\"dd-M-yy\"\n [placeholder]=\"'Select Date'\"\n [ngClass]=\"{'is-invalid': submitted && f['when'].errors}\">\n </p-calendar>\n </div>\n </pw-input-container>\n </div>\n </div>\n\n <!-- Author Dropdown -->\n <!-- Three toggles on next line -->\n <div class=\"col-12\">\n <div class=\"row\">\n <div class=\"col-12 col-md-2 col-sm-6\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\" [tooltipText]=\"'Resource.Posts.Tooltip.ShowCase' | transloco\"\n [label]=\"'Resource.Posts.ShowCase' | transloco\" name=\"showcase\">\n <ui-switch class=\"d-block\" formControlName=\"showcase\" name=\"showcase\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n\n <!--Published At -->\n <div class=\"col-12 col-md-2 col-sm-6\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Resource.Posts.Tooltip.Published' | transloco\"\n [label]=\"'Resource.Posts.Published' | transloco\"\n name=\"published_at\">\n <ui-switch class=\"d-block\"\n formControlName=\"published_at\"\n name=\"published_at\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n\n <!--Accepted At -->\n <div class=\"col-12 col-md-2 col-sm-6 accept-icon\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Resource.Posts.Tooltip.AcceptedByAdmin' | transloco\"\n [label]=\"'Resource.Posts.AcceptedByAdmin' | transloco\"\n name=\"accepted_at\">\n <ui-switch class=\"d-block\"\n formControlName=\"accepted_at\"\n name=\"accepted_at\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n </div>\n </div>\n\n </div>\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"navigateToResourceList()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"submitted\"\n class=\"btn btn-primary\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n\n\n<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Upload Picture</h5>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <small>You can upload a JPG, GIF, or PNG file. (Do not upload pictures containing celebrities,\n nudity, artwork or copyrighted images.)</small>\n <pw-image-cropper #profile\n aspectRatio=\"auto\"\n (imageSelectionEvent)=\"onImageSelection($event)\"\n (closeEvent)=\"onClose()\">\n </pw-image-cropper>\n </div>\n</ng-template>\n\n<ng-template #rectContent let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Upload Picture</h5>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n </button>\n </div>\n\n <div class=\"modal-body\">\n <small>\n You can upload a JPG, GIF, or PNG file. (Do not upload pictures containing celebrities,\n nudity, artwork or copyrighted images.)\n </small>\n\n\n <pw-image-cropper\n #profile\n [aspectRatio]=\"'dynamic'\"\n [dynamicData]=\"getAspectRatio()\"\n (imageSelectionEvent)=\"onRectangularImageSelection($event)\"\n (closeEvent)=\"onClose()\">\n </pw-image-cropper>\n </div>\n</ng-template>\n", styles: [".col-md-6.display-grid{display:grid}body .ui-autocomplete.ui-autocomplete-multiple .ui-autocomplete-multiple-container{width:100%}body .ui-inputtext{padding:0}.comment{border:1px solid rgb(238,238,238)}.is-invalid .ql-container.ql-snow,.is-invalid .ql-toolbar.ql-snow{border-color:#dc3545}.rec-img{max-width:100%;max-height:400px!important}.body-bg span .ui-autocomplete-multiple-container{background-color:#f5f7fa}.p-autocomplete .p-autocomplete-multiple-container .p-autocomplete-token{color:var(--tabs_text)}.tags .info-circle .tooltiptext:after{left:25px!important}.tags .info-circle .tooltiptext{left:-30px!important}.blurb .info-circle .tooltiptext:after{left:50px!important}.blurb .info-circle .tooltiptext{left:-55px!important}.accept-icon .info-circle .tooltiptext:after{left:110px!important}.accept-icon .info-circle .tooltiptext{right:-85px!important}\n"], dependencies: [{ kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i5.AutoComplete, selector: "p-autoComplete", inputs: ["minLength", "delay", "style", "panelStyle", "styleClass", "panelStyleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "readonly", "disabled", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "maxlength", "name", "required", "size", "appendTo", "autoHighlight", "forceSelection", "type", "autoZIndex", "baseZIndex", "ariaLabel", "dropdownAriaLabel", "ariaLabelledBy", "dropdownIcon", "unique", "group", "completeOnFocus", "showClear", "field", "dropdown", "showEmptyMessage", "dropdownMode", "multiple", "tabindex", "dataKey", "emptyMessage", "showTransitionOptions", "hideTransitionOptions", "autofocus", "autocomplete", "optionGroupChildren", "optionGroupLabel", "overlayOptions", "suggestions", "itemSize", "optionLabel", "optionValue", "id", "searchMessage", "emptySelectionMessage", "selectionMessage", "autoOptionFocus", "selectOnFocus", "searchLocale", "optionDisabled", "focusOnHover", "variant"], outputs: ["completeMethod", "onSelect", "onUnselect", "onFocus", "onBlur", "onDropdownClick", "onClear", "onKeyUp", "onShow", "onHide", "onLazyLoad"] }, { kind: "component", type: i6.Dropdown, selector: "p-dropdown", inputs: ["id", "scrollHeight", "filter", "name", "style", "panelStyle", "styleClass", "panelStyleClass", "readonly", "required", "editable", "appendTo", "tabindex", "placeholder", "loadingIcon", "filterPlaceholder", "filterLocale", "variant", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "checkmark", "dropdownIcon", "loading", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "autoDisplayFirst", "group", "showClear", "emptyFilterMessage", "emptyMessage", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "ariaLabel", "ariaLabelledBy", "filterMatchMode", "maxlength", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "focusOnHover", "selectOnFocus", "autoOptionFocus", "autofocusFilter", "disabled", "itemSize", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "filterValue", "options"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onShow", "onHide", "onClear", "onLazyLoad"] }, { kind: "component", type: i7.Calendar, selector: "p-calendar", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepYearPicker", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "directive", type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i9.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i10.UiSwitchComponent, selector: "ui-switch", inputs: ["size", "color", "switchOffColor", "switchColor", "defaultBgColor", "defaultBoColor", "checkedLabel", "uncheckedLabel", "checkedTextColor", "uncheckedTextColor", "beforeChange", "ariaLabel", "checked", "disabled", "reverse", "loading"], outputs: ["change", "changeEvent", "valueChange"] }, { kind: "component", type: i11.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i12.ProfileImageCropperComponent, selector: "pw-image-cropper", inputs: ["aspectRatio", "dynamicData"], outputs: ["imageSelectionEvent", "closeEvent", "fileChangeEvent"] }, { kind: "component", type: i13.InputContainerComponent, selector: "pw-input-container", inputs: ["name", "label", "labelClass", "tooltipPosition", "required", "errorMsg", "isReadOnly", "showTooltip", "tooltipText", "showTriangle", "afterLabel", "showAfterLabel", "showTriangleText", "isLeftTooltip"] }, { kind: "directive", type: i14.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "directive", type: i14.LazyImgDirective, selector: "img" }, { kind: "directive", type: i9.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i9.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i15.QuillEditorComponent, selector: "quill-editor" }, { kind: "pipe", type: i16.TranslocoPipe, name: "transloco" }], encapsulation: i0.ViewEncapsulation.None }); }
368
369
  }
369
370
  __decorate([
370
371
  ValidateForm('form'),
@@ -376,4 +377,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
376
377
  type: Component,
377
378
  args: [{ selector: 'pw-resources-details-index', encapsulation: ViewEncapsulation.None, template: "<div class=\"container-fluid pw-tab overflow-hidden\">\n <div class=\"dashboard\">\n <div class=\"dashboard-body\">\n\n <div class=\"me-auto col-xs-6 mt-4\">\n <a aria-label=\"Navigate to Target\"\n (click)=\"navigateToResourceList()\"\n class=\"previous\">\n <i class=\"fa fa-arrow-alt-circle-left\" aria-hidden=\"true\"></i></a>\n <h3 class=\"m-subheader__title m-subheader__title--separator\">\n Add or edit resource\n </h3>\n </div>\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"isLoading\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n\n <div class=\"p-2 mt-3\">\n <form [formGroup]=\"form\"\n *ngIf=\"!isLoading\"\n (ngSubmit)=\"onSave()\">\n <div class=\"row\">\n <!-- Title -->\n <pw-input-container [label]=\"'Label.Title' | transloco\"\n class=\"col-12\"\n name=\"title\"\n [errorMsg]=\"'Resource.Posts.Validation.Title' | transloco\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"title\"\n [ngClass]=\"{ 'is-invalid': submitted && f['title'].errors }\" />\n </pw-input-container>\n\n <!-- Blurb -->\n <pw-input-container [label]=\"'Resource.Posts.Blurb' | transloco\"\n class=\"col-12\"\n name=\"blurb\"\n class=\"blurb\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'The blurb is used for the metadata.description field'\">\n <textarea class=\"form-control\"\n rows=\"3\"\n formControlName=\"blurb\"\n placeholder=\"Short description for SEO meta description\"></textarea>\n </pw-input-container>\n\n\n <!-- Rich Text Editor -->\n <pw-input-container [label]=\"'Resource.Posts.Body' | transloco\"\n class=\"col-9 col-md-9 col-sm-12\"\n name=\"body\"\n [errorMsg]=\"'Resource.Posts.Validation.Body' | transloco\">\n <quill-editor [styles]=\"{ height: '500px' }\"\n class=\"quillEditor\" [modules]=\"editorConfig\"\n formControlName=\"body\"\n [ngClass]=\"{\n 'w-100': true,\n 'quill-container': true,\n 'is-invalid': submitted && f['body'].errors\n }\">\n </quill-editor>\n </pw-input-container>\n <div class=\"col-12 col-md-3 col-sm-4 my-4\">\n <div class=\"text-center mb-4\">\n <label for=\"coverPicture\">{{ 'Resource.Posts.CoverPicture' | transloco }}</label>\n <div class=\"text-center text-center d-flex flex-column align-items-center\">\n <img [src]=\"(image !== null && !image?.includes('default-photo.jpg') )? image : 'assets/img/resource/blog.png'\"\n (keydown.enter)=\"openModal(content)\"\n (click)=\"openModal(content)\"\n class=\"image w-100\" alt=\"Modal\"\n (error)=\"handleImageError($event, 'assets/img/resource/blog.png')\" />\n <div class=\"d-flex justify-content-between align-items-center mt-2\">\n <a class=\"d-inline-block\" (click)=\"openModal(content)\">\n {{ slug !== 'create' ? 'Edit' : 'Add' }} Picture\n </a>\n <i\n class=\"fa fa-trash delete-icon text-danger ms-2 cursor-pointer\"\n title=\"Remove Image\"\n (click)=\"deleteCoverImage()\"\n (keydown.enter)=\"deleteCoverImage()\"\n *ngIf=\"image && !image.includes('default-photo.jpg')\">\n </i>\n </div>\n </div>\n </div>\n\n <!-- Rectangular Picture -->\n <div class=\"text-center d-flex flex-column align-items-center\">\n <label for=\"rectangularPicture\">Rectangular Picture</label>\n <img\n [src]=\"(rectangularImage !== null && !rectangularImage?.includes('default-photo.jpg')) ? rectangularImage : 'assets/img/resource/blog.png'\"\n (keydown.enter)=\"openRectModal(rectContent)\"\n (click)=\"openRectModal(rectContent)\"\n class=\"image rec-img\"\n [ngClass]=\"{ 'w-100': rectangularImage === null || rectangularImage?.includes('default-photo.jpg') }\"\n alt=\"Uploaded rectangular media preview\"\n (error)=\"handleImageError($event, 'assets/img/resource/blog.png')\" />\n <div class=\"d-flex justify-content-between align-items-center mt-2\">\n <a class=\"d-inline-block\" (click)=\"openRectModal(rectContent)\">\n {{ slug !== 'create' ? 'Edit' : 'Add' }} Picture\n </a>\n <i\n class=\"fa fa-trash delete-icon text-danger ms-2 cursor-pointer\"\n title=\"Remove Image\"\n (click)=\"deleteRectangularImage()\"\n (keydown.enter)=\"deleteRectangularImage()\"\n *ngIf=\"rectangularImage && !rectangularImage.includes('default-photo.jpg')\">\n </i>\n </div>\n\n </div>\n\n </div>\n <pw-input-container [label]=\"'Resource.Posts.CtaText' | transloco\"\n class=\"col-12 col-md-6\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Resource.Posts.Tooltip.CtaText' | transloco\"\n name=\"cta_text\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"cta_text\"\n [ngClass]=\"{ 'is-invalid': submitted && f['title'].errors }\" />\n </pw-input-container>\n\n <pw-input-container [label]=\"'Resource.Posts.ExternalUrl' | transloco\"\n class=\"col-12 col-md-6\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Resource.Posts.Tooltip.ExternalUrl' | transloco\"\n name=\"external_url\">\n <input type=\"text\"\n class=\"form-control\"\n formControlName=\"external_url\"\n [ngClass]=\"{ 'is-invalid': submitted && f['external_url'].errors }\" />\n </pw-input-container>\n\n <pw-input-container [label]=\"'Resource.Posts.Tags' | transloco \" class=\"ui-fluid skills-modal col-12 col-md-6 col-sm-12 tags\"\n [showTooltip]=\"true\" [tooltipText]=\"'Resource.Posts.Tooltip.CtaText' | transloco\" name=\"cta_text\">\n <p-autoComplete [(ngModel)]=\"selectedTags\" class=\"body-bg\" [suggestions]=\"tagsSuggestion\" dataKey=\"id\" field=\"name\"\n (completeMethod)=\"search($event)\" styleClass=\"w-100\" [minLength]=\"1\" [maxlength]=\"10\" [dropdown]=\"true\"\n [ngModelOptions]=\"{ standalone: true }\" placeholder=\"Tags\" [multiple]=\"true\">\n </p-autoComplete>\n </pw-input-container>\n\n <pw-input-container [label]=\"'Author' | transloco\"\n class=\"col-12 col-md-4 col-sm-6\"\n name=\"author_id\"\n [errorMsg]=\"'Please select an author' | transloco\">\n <p-dropdown\n formControlName=\"author_id\"\n [options]=\"availableAuthors\"\n optionLabel=\"label\"\n optionValue=\"value\"\n [placeholder]=\"'Select Author' | transloco\"\n [loading]=\"authorsLoading\"\n [ngClass]=\"{ 'is-invalid': submitted && f['author_id'].errors }\"\n styleClass=\"w-100\">\n <ng-template pTemplate=\"item\" let-author>\n <div>\n <div>{{ author.label }}</div>\n </div>\n </ng-template>\n </p-dropdown>\n </pw-input-container>\n\n\n <!-- WHEN and AUTHOR on same line -->\n <div class=\"col-12 col-md-2 col-sm-6\">\n <div class=\"mb-3\">\n <pw-input-container [label]=\"'Resource.Posts.When' | transloco\"\n [showTooltip]=\"true\"\n [tooltipText]=\"'Resource.Posts.Tooltip.When' | transloco\"\n name=\"when\">\n <div>\n <p-calendar formControlName=\"when\"\n [showIcon]=\"true\"\n dateFormat=\"dd-M-yy\"\n [placeholder]=\"'Select Date'\"\n [ngClass]=\"{'is-invalid': submitted && f['when'].errors}\">\n </p-calendar>\n </div>\n </pw-input-container>\n </div>\n </div>\n\n <!-- Author Dropdown -->\n <!-- Three toggles on next line -->\n <div class=\"col-12\">\n <div class=\"row\">\n <div class=\"col-12 col-md-2 col-sm-6\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\" [tooltipText]=\"'Resource.Posts.Tooltip.ShowCase' | transloco\"\n [label]=\"'Resource.Posts.ShowCase' | transloco\" name=\"showcase\">\n <ui-switch class=\"d-block\" formControlName=\"showcase\" name=\"showcase\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n\n <!--Published At -->\n <div class=\"col-12 col-md-2 col-sm-6\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Resource.Posts.Tooltip.Published' | transloco\"\n [label]=\"'Resource.Posts.Published' | transloco\"\n name=\"published_at\">\n <ui-switch class=\"d-block\"\n formControlName=\"published_at\"\n name=\"published_at\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n\n <!--Accepted At -->\n <div class=\"col-12 col-md-2 col-sm-6 accept-icon\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Resource.Posts.Tooltip.AcceptedByAdmin' | transloco\"\n [label]=\"'Resource.Posts.AcceptedByAdmin' | transloco\"\n name=\"accepted_at\">\n <ui-switch class=\"d-block\"\n formControlName=\"accepted_at\"\n name=\"accepted_at\">\n </ui-switch>\n </pw-input-container>\n </div>\n </div>\n </div>\n </div>\n\n </div>\n <div class=\"row text-end mt-4\">\n <div class=\"col-12\">\n <button type=\"button\"\n class=\"btn btn-outline-default me-2\"\n (click)=\"navigateToResourceList()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button type=\"submit\"\n [buttonBusy]=\"submitted\"\n class=\"btn btn-primary\">\n {{ 'Button.Submit' | transloco }}\n </button>\n </div>\n </div>\n </form>\n </div>\n </div>\n </div>\n</div>\n\n\n<ng-template #content\n let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Upload Picture</h5>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n\n </button>\n </div>\n <div class=\"modal-body\">\n <small>You can upload a JPG, GIF, or PNG file. (Do not upload pictures containing celebrities,\n nudity, artwork or copyrighted images.)</small>\n <pw-image-cropper #profile\n aspectRatio=\"auto\"\n (imageSelectionEvent)=\"onImageSelection($event)\"\n (closeEvent)=\"onClose()\">\n </pw-image-cropper>\n </div>\n</ng-template>\n\n<ng-template #rectContent let-modal>\n <div class=\"modal-header\">\n <h5 class=\"modal-title\">Upload Picture</h5>\n <button type=\"button\"\n class=\"btn-close float-end\"\n aria-label=\"Close\"\n (click)=\"modal.dismiss()\">\n </button>\n </div>\n\n <div class=\"modal-body\">\n <small>\n You can upload a JPG, GIF, or PNG file. (Do not upload pictures containing celebrities,\n nudity, artwork or copyrighted images.)\n </small>\n\n\n <pw-image-cropper\n #profile\n [aspectRatio]=\"'dynamic'\"\n [dynamicData]=\"getAspectRatio()\"\n (imageSelectionEvent)=\"onRectangularImageSelection($event)\"\n (closeEvent)=\"onClose()\">\n </pw-image-cropper>\n </div>\n</ng-template>\n", styles: [".col-md-6.display-grid{display:grid}body .ui-autocomplete.ui-autocomplete-multiple .ui-autocomplete-multiple-container{width:100%}body .ui-inputtext{padding:0}.comment{border:1px solid rgb(238,238,238)}.is-invalid .ql-container.ql-snow,.is-invalid .ql-toolbar.ql-snow{border-color:#dc3545}.rec-img{max-width:100%;max-height:400px!important}.body-bg span .ui-autocomplete-multiple-container{background-color:#f5f7fa}.p-autocomplete .p-autocomplete-multiple-container .p-autocomplete-token{color:var(--tabs_text)}.tags .info-circle .tooltiptext:after{left:25px!important}.tags .info-circle .tooltiptext{left:-30px!important}.blurb .info-circle .tooltiptext:after{left:50px!important}.blurb .info-circle .tooltiptext{left:-55px!important}.accept-icon .info-circle .tooltiptext:after{left:110px!important}.accept-icon .info-circle .tooltiptext{right:-85px!important}\n"] }]
378
379
  }], ctorParameters: () => [{ type: i1.NgbModal }, { type: i2.AdminService }, { type: i0.Injector }, { type: i3.TagService }, { type: i3.SubscriptionService }], propDecorators: { onSave: [] } });
379
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2VzLWFkbWluLWRldGFpbHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hZG1pbi1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3Jlc291cmNlcy9yZXNvdXJjZXMtYWRtaW4tZGV0YWlscy9yZXNvdXJjZXMtYWRtaW4tZGV0YWlscy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FkbWluLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcmVzb3VyY2VzL3Jlc291cmNlcy1hZG1pbi1kZXRhaWxzL3Jlc291cmNlcy1hZG1pbi1kZXRhaWxzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUgsU0FBUyxFQUNULFFBQVEsRUFHUixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDL0YsT0FBTyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQVUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFNUQsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRdEQsTUFBTSxPQUFPLDZCQUNULFNBQVEsZ0JBQWdCO0lBb0R4QixZQUNxQixZQUFzQixFQUN0QixZQUEwQixFQUMzQyxRQUFrQixFQUNELFVBQXNCLEVBQ3RCLG1CQUF3QztRQUV6RCxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7UUFOQyxpQkFBWSxHQUFaLFlBQVksQ0FBVTtRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUUxQixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFwRDdELGNBQVMsR0FBRyxLQUFLLENBQUM7UUFLbEIsU0FBSSxHQUFHO1lBQ0gsRUFBRSxFQUFFLEVBQUU7WUFDTixTQUFTLEVBQUUsSUFBcUI7WUFDaEMsS0FBSyxFQUFFLEVBQUU7WUFDVCxJQUFJLEVBQUUsRUFBRTtZQUNSLElBQUksRUFBRSxFQUFFO1lBQ1IsSUFBSSxFQUFFLEVBQUU7WUFDUixZQUFZLEVBQUUsRUFBRTtZQUNoQixXQUFXLEVBQUUsRUFBRTtZQUNmLE9BQU8sRUFBRTtnQkFDTCxHQUFHLEVBQUUsRUFBRTthQUNWO1lBQ0QsYUFBYSxFQUFFLEVBQUU7U0FDcEIsQ0FBQztRQUlGLFVBQUssR0FBRyxFQUFFLENBQUM7UUFDWCxxQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFFdEIsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFDaEIsaUJBQVksR0FBRyxDQUFDLENBQUM7UUFDakIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUVuQixZQUFPLEdBQXVCLEVBQUUsQ0FBQztRQUNqQyxtQkFBYyxHQUFHLEVBQUUsQ0FBQztRQUNwQixpQkFBWSxHQUFHLEVBQUUsQ0FBQztRQUlsQixjQUFTLEdBQUcsSUFBSSxDQUFDO1FBR2pCLDZCQUE2QjtRQUM3QixxQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDdEIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFDdkIsNkJBQXdCLEdBQUcsS0FBSyxDQUFDO1FBR2pDLFlBQU8sR0FBRyxhQUFhLENBQUM7UUFXcEIsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxZQUFZLEdBQUcsV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVELGVBQWU7UUFDWCxhQUFhLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztRQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxtQkFBbUIsQ0FDekQsR0FBRyxpQkFBaUIsQ0FBQyxlQUFlLEVBQUUsVUFBVSxJQUFJLGlCQUFpQixDQUFDLGVBQWUsRUFBRSxXQUFXLGFBQWEsQ0FDbEgsQ0FBQztRQUNGLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztRQUV0RixJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDekMsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDM0MsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMxQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2pDLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQzNCLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxjQUFjLEdBQUcsaUJBQWlCLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDO1FBQ2hFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDOUIsQ0FBQztJQUVPLFdBQVcsQ0FBQyxJQUFZO1FBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUN2RCxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixJQUFJLENBQUMsRUFBRSxHQUFHLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDdEIsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDNUQsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLEdBQUcsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxFQUFFLE9BQU8sRUFBRSxHQUFHLENBQUM7WUFDcEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFFBQVEsRUFBRSxtQkFBbUIsRUFBRSxHQUFHLENBQUM7WUFDM0QsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUVyRSw2Q0FBNkM7WUFDN0MsSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO2dCQUN0QixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDeEQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDN0MsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGtCQUFrQixDQUFDLE1BQU07UUFDckIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDdEMsQ0FBQztJQUVELFNBQVMsQ0FBQyxPQUFPO1FBQ2IsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQsYUFBYSxDQUFDLE9BQU87UUFDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUNyRixDQUFDO0lBRUQsT0FBTztRQUNILElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQVksRUFBRSxZQUFZO1FBQ3ZDLGFBQWEsQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQUs7UUFDbEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QyxNQUFNLFFBQVEsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDNUQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELDJCQUEyQixDQUFDLEtBQUs7UUFDN0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUM5QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sUUFBUSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sQ0FBQztRQUM1RCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsYUFBYSxDQUFDLE9BQWU7UUFDekIsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQixNQUFNLElBQUksR0FBRyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUIsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUNwQixNQUFNLEtBQUssR0FBRyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoQyxPQUFPLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDVCxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBRUQsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUdELE1BQU07UUFDRixNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDcEIsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDakIsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLO1FBQ0QsTUFBTSxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFcEMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdEQsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUMxQixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdkQsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUMzQixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDWixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7UUFDN0IsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQ3BELENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2hCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUN4QixDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQzVCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO1FBQ3BDLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUM7UUFFZixJQUFJLENBQUMsWUFBWTthQUNaLE9BQU8sQ0FBQyxJQUFJLENBQUM7YUFDYixTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDbEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO1lBQ3hFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQy9CLENBQUMsQ0FBQzthQUNELEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDTixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxjQUFjO1FBQ1YsT0FBTyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7SUFDaEQsQ0FBQztJQUNELFFBQVE7UUFDSixNQUFNLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUVwQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTFCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVPLHdCQUF3QixDQUFDLElBQUk7UUFDakMsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDcEQsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztRQUNwQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGFBQWEsQ0FBQyxJQUFJO1FBQ3RCLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1osSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzdCLENBQUM7YUFBTSxDQUFDO1lBQ0osT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ3hCLENBQUM7SUFDTCxDQUFDO0lBRU8saUJBQWlCLENBQUMsSUFBSTtRQUMxQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM5QyxJQUFJLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzVFLENBQUM7YUFBTSxDQUFDO1lBQ0osT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQzdCLENBQUM7SUFDTCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsSUFBSTtRQUN6QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM3QyxJQUFJLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUNqQixJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzNFLENBQUM7YUFBTSxDQUFDO1lBQ0osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzVCLENBQUM7SUFDTCxDQUFDO0lBRU8sb0JBQW9CLENBQUMsSUFBSTtRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDbkIsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUN2QixDQUFDO0lBQ0wsQ0FBQztJQUVPLGNBQWMsQ0FBQyxJQUFJO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQy9CLENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ2xELElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUM7UUFDM0MsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVLENBQUMsSUFBSTtRQUNYLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUU1QixJQUFJLENBQUMsWUFBWTthQUNaLFVBQVUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQzthQUN6QixTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDO1lBRTFFLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ2xDLENBQUMsQ0FBQzthQUNELEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDTixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxzQkFBc0I7UUFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRTtZQUNyRCxLQUFLLEVBQUU7Z0JBQ0gsR0FBRyxJQUFJLENBQUMsVUFBVTthQUNyQjtTQUNKLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxnQkFBZ0I7UUFDWixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNyQixDQUFDO0lBRUQsc0JBQXNCO1FBQ2xCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDN0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7SUFDaEMsQ0FBQztJQUNPLFdBQVc7UUFDZixJQUFJLENBQUMsVUFBVTthQUNWLGFBQWEsQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQzthQUN6RCxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDbEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLO1FBQ1IsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2QsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQzdCLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FDM0QsQ0FBQztRQUNOLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQzNCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDekIsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUM7SUFDakMsQ0FBQztJQUVELFFBQVEsQ0FBQyxFQUFtQjtRQUN4QixJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQy9CLE1BQU0sSUFBSSxHQUFHO2dCQUNULFdBQVcsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDdEMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO29CQUNmLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUV4QixPQUFPLEdBQUcsQ0FBQztnQkFDZixDQUFDLENBQUM7Z0JBQ0YsSUFBSSxFQUFFLEVBQUU7Z0JBQ1IsVUFBVSxFQUFFLFVBQVUsQ0FBQyxJQUFJO2FBQzlCLENBQUM7WUFFRixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUM5QyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNLLG1CQUFtQjtRQUN2QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMzQixNQUFNLE1BQU0sR0FBVztZQUNuQixJQUFJLEVBQUUsQ0FBQztZQUNQLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLE1BQU0sRUFBRSxFQUFFO1lBQ1YsUUFBUSxFQUFFLEVBQUU7WUFDWixlQUFlLEVBQUUsRUFBRTtTQUN0QixDQUFDO1FBRUYsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUNuRixRQUFRLENBQUMsRUFBRTtZQUNQLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1lBQzVCLElBQUksUUFBUSxFQUFFLE9BQU8sSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDbkQsc0NBQXNDO2dCQUN0QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNwRCxLQUFLLEVBQ0QsR0FBRyxNQUFNLENBQUMsVUFBVSxJQUFJLEVBQUUsSUFBSSxNQUFNLENBQUMsU0FBUyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRTt3QkFDN0QsTUFBTSxDQUFDLEtBQUs7b0JBQ2hCLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRTtvQkFDaEIsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO2lCQUN0QixDQUFDLENBQUMsQ0FBQztnQkFFSiwwRkFBMEY7Z0JBQzFGLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzdELENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQyxFQUNELEtBQUssQ0FBQyxFQUFFO1lBQ0osSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7WUFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQ0osQ0FBQztJQUNOLENBQUM7SUFFUSxXQUFXO1FBQ2hCLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN4QixDQUFDOytHQXpaUSw2QkFBNkI7bUdBQTdCLDZCQUE2Qix5RkMzQjFDLDJpYUE2U0E7O0FEcEdJO0lBREMsWUFBWSxDQUFDLE1BQU0sQ0FBQzs7OzsyREFVcEI7NEZBdkxRLDZCQUE2QjtrQkFOekMsU0FBUzsrQkFDSSw0QkFBNEIsaUJBR3ZCLGlCQUFpQixDQUFDLElBQUk7MExBZ0xyQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENvbXBvbmVudCxcbiAgICBJbmplY3RvcixcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgQWRtaW5TZXJ2aWNlLCBBcHBBZG1pbiB9IGZyb20gJ0Bwb3Npd2lzZS9hZG1pbi1tb2R1bGUtdXRpbHMnO1xuaW1wb3J0IHsgQXBwQmFzZUNvbXBvbmVudCB9IGZyb20gJ0Bwb3Npd2lzZS9hcHAtYmFzZS1jb21wb25lbnQnO1xuaW1wb3J0IHsgUGVybWlzc2lvblNlcnZpY2UsIFN1YnNjcmlwdGlvblNlcnZpY2UsIFRhZ1NlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvY29tbW9uLXNlcnZpY2VzJztcbmltcG9ydCB7IEFETUlOX1JPVVRFUlMsIFBBR0VfU0laRSwgUGFnaW5nLCBUQUdfRU5USVRZIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi11dGlsaXRpZXMnO1xuaW1wb3J0IHsgSGVscGVyU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9oZWxwZXItc2VydmljZSc7XG5pbXBvcnQgeyBRdWlsbEhlbHBlciwgVmFsaWRhdGVGb3JtIH0gZnJvbSAnQHBvc2l3aXNlL3V0aWxzJztcblxuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwdy1yZXNvdXJjZXMtZGV0YWlscy1pbmRleCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Jlc291cmNlcy1hZG1pbi1kZXRhaWxzLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9yZXNvdXJjZXMtYWRtaW4tZGV0YWlscy5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VBZG1pbkRldGFpbHNDb21wb25lbnRcbiAgICBleHRlbmRzIEFwcEJhc2VDb21wb25lbnRcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0XG57XG4gICAgZm9ybTogVW50eXBlZEZvcm1Hcm91cDtcblxuICAgIHN1Ym1pdHRlZCA9IGZhbHNlO1xuXG4gICAgaWQ6IG51bWJlcjtcbiAgICBzbHVnOiBzdHJpbmc7XG5cbiAgICBibG9nID0ge1xuICAgICAgICBpZDogJycsXG4gICAgICAgIGF1dGhvcl9pZDogbnVsbCBhcyBudW1iZXIgfCBudWxsLFxuICAgICAgICB0aXRsZTogJycsXG4gICAgICAgIGJvZHk6ICcnLFxuICAgICAgICB2aWV3OiAnJyxcbiAgICAgICAgc2x1ZzogJycsXG4gICAgICAgIHB1Ymxpc2hlZF9hdDogJycsXG4gICAgICAgIGFjY2VwdGVkX2F0OiAnJyxcbiAgICAgICAgcGljdHVyZToge1xuICAgICAgICAgICAgdXJsOiAnJ1xuICAgICAgICB9LFxuICAgICAgICBwb3N0X2NvbW1lbnRzOiBbXVxuICAgIH07XG5cbiAgICBmaWxlOiBGaWxlO1xuICAgIHJlY3Rhbmd1bGFyRmlsZTogRmlsZTtcbiAgICBpbWFnZSA9ICcnO1xuICAgIHJlY3Rhbmd1bGFySW1hZ2UgPSAnJztcblxuICAgIGFzcGVjdFdpZHRoID0gMztcbiAgICBhc3BlY3RIZWlnaHQgPSAxO1xuICAgIGZyZWVBc3BlY3QgPSBmYWxzZTtcblxuICAgIGFsbFRhZ3M6IHsgbmFtZTogc3RyaW5nIH1bXSA9IFtdO1xuICAgIHRhZ3NTdWdnZXN0aW9uID0gW107XG4gICAgc2VsZWN0ZWRUYWdzID0gW107XG5cbiAgICBzdWJzY3JpcHRpb25JZDogbnVtYmVyO1xuXG4gICAgaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICBpc0Jsb2dBZG1pbjogYm9vbGVhbjtcblxuICAgIC8vIEF1dGhvciBkcm9wZG93biBwcm9wZXJ0aWVzXG4gICAgYXZhaWxhYmxlQXV0aG9ycyA9IFtdO1xuICAgIGF1dGhvcnNMb2FkaW5nID0gZmFsc2U7XG4gICAgaXNTdWJzY3JpcHRpb25TdXBlckFkbWluID0gZmFsc2U7XG5cbiAgICBlZGl0b3JDb25maWc7XG4gICAgcm91dGVycyA9IEFETUlOX1JPVVRFUlM7XG4gICAgZmlsdGVyRGF0YTogeyBzb3VyY2U6IHN0cmluZzsgdmFsdWU6IG51bWJlciB9O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBhZG1pblNlcnZpY2U6IEFkbWluU2VydmljZSxcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHRhZ1NlcnZpY2U6IFRhZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgc3Vic2NyaXB0aW9uU2VydmljZTogU3Vic2NyaXB0aW9uU2VydmljZVxuICAgICkge1xuICAgICAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgICAgIFF1aWxsSGVscGVyLmluaXQoKTtcbiAgICAgICAgdGhpcy5lZGl0b3JDb25maWcgPSBRdWlsbEhlbHBlci5nZXRFZGl0b3JDb25maWcoKTtcbiAgICAgICAgdGhpcy5mb3JtID0gQXBwQWRtaW4uZ2V0UmVzb3VyY2VzRm9ybSgpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgSGVscGVyU2VydmljZS5zdWJzY3JpYmVUb0VkaXRvckNoYW5nZXModGhpcy5mb3JtLCAnYm9keScpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmZpbHRlckRhdGEgPSBoaXN0b3J5LnN0YXRlO1xuICAgICAgICB0aGlzLmlzQmxvZ0FkbWluID0gdGhpcy5wZXJtaXNzaW9uU2VydmljZS5ldmFsdWF0ZVBlcm1pc3Npb25zKFxuICAgICAgICAgICAgYCR7UGVybWlzc2lvblNlcnZpY2Uuc2VsZWN0ZWRQcm9kdWN0Py5wZXJtaXNzaW9ufS4ke1Blcm1pc3Npb25TZXJ2aWNlLnNlbGVjdGVkUHJvZHVjdD8uZmVhdHVyZV9rZXl9LkJsb2cuQWRtaW5gXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuaXNTdWJzY3JpcHRpb25TdXBlckFkbWluID0gdGhpcy5wZXJtaXNzaW9uU2VydmljZS5pc1VzZXJTdWJzY3JpcHRpb25TdXBlckFkbWluKCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzU3Vic2NyaXB0aW9uU3VwZXJBZG1pbikge1xuICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnYXV0aG9yX2lkJykuZGlzYWJsZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzQmxvZ0FkbWluKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdhY2NlcHRlZF9hdCcpLmRpc2FibGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2FjY2VwdGVkX2F0JykuZW5hYmxlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhwYXJhbXNbJ3NsdWcnXSk7XG4gICAgICAgICAgICB0aGlzLnNsdWcgPSBwYXJhbXNbJ3NsdWcnXSA/PyAnJztcbiAgICAgICAgICAgIGlmICh0aGlzLnNsdWcgIT09ICdjcmVhdGUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRCbG9nSXRlbSh0aGlzLnNsdWcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25JZCA9IFBlcm1pc3Npb25TZXJ2aWNlLnNlbGVjdGVkU3Vic2NyaXB0aW9uLmlkO1xuICAgICAgICB0aGlzLmZvcm0uZ2V0KCdzdWJzY3JpcHRpb25faWQnKS5zZXRWYWx1ZSh0aGlzLnN1YnNjcmlwdGlvbklkKTtcbiAgICAgICAgdGhpcy5nZXRQb3N0VGFncygpO1xuICAgICAgICB0aGlzLmdldEF2YWlsYWJsZUF1dGhvcnMoKTtcbiAgICB9XG5cbiAgICBnZXQgZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybS5jb250cm9scztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEJsb2dJdGVtKHNsdWc6IHN0cmluZykge1xuICAgICAgICB0aGlzLmFkbWluU2VydmljZS5nZXRQb3N0QnlTbHVnKHNsdWcpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5pZCA9IHJlc3BvbnNlLmlkO1xuICAgICAgICAgICAgY29uc3Qgd2hlbiA9IHJlc3BvbnNlLndoZW4gPyBuZXcgRGF0ZShyZXNwb25zZS53aGVuKSA6IG51bGw7XG4gICAgICAgICAgICB0aGlzLmJsb2cgPSB7IC4uLnJlc3BvbnNlLCB3aGVuIH07XG4gICAgICAgICAgICB0aGlzLmltYWdlID0gcmVzcG9uc2U/LnBpY3R1cmU/LnVybDtcbiAgICAgICAgICAgIHRoaXMucmVjdGFuZ3VsYXJJbWFnZSA9IHJlc3BvbnNlPy5yZWN0YW5ndWxhcl9waWN0dXJlPy51cmw7XG4gICAgICAgICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh0aGlzLmJsb2cpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFRhZ3MgPSByZXNwb25zZT8udGFncz8ubGVuZ3RoID8gWy4uLnJlc3BvbnNlLnRhZ3NdIDogW107XG5cbiAgICAgICAgICAgIC8vIFNldCBhdXRob3JfaWQgaWYgaXQgZXhpc3RzIGluIHRoZSByZXNwb25zZVxuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmF1dGhvcj8uaWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdhdXRob3JfaWQnKS5zZXRWYWx1ZShyZXNwb25zZS5hdXRob3IuaWQpO1xuICAgICAgICAgICAgICAgIHRoaXMuYmxvZy5hdXRob3JfaWQgPSByZXNwb25zZS5hdXRob3IuaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZpbGVDaGFuZ2VMaXN0ZW5lcigkZXZlbnQpIHtcbiAgICAgICAgW3RoaXMuZmlsZV0gPSAkZXZlbnQudGFyZ2V0LmZpbGVzO1xuICAgIH1cblxuICAgIG9wZW5Nb2RhbChjb250ZW50KSB7XG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oY29udGVudCwgeyBjZW50ZXJlZDogdHJ1ZSwgd2luZG93Q2xhc3M6ICdtb2RhbC1ob2xkZXInIH0pO1xuICAgIH1cblxuICAgIG9wZW5SZWN0TW9kYWwoY29udGVudCkge1xuICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKGNvbnRlbnQsIHsgY2VudGVyZWQ6IHRydWUsIHdpbmRvd0NsYXNzOiAnbW9kYWwtaG9sZGVyJyB9KTtcbiAgICB9XG5cbiAgICBvbkNsb3NlKCkge1xuICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XG4gICAgfVxuXG4gICAgaGFuZGxlSW1hZ2VFcnJvcihldmVudDogRXZlbnQsIGZhbGxiYWNrUGF0aCk6IHZvaWQge1xuICAgICAgICBIZWxwZXJTZXJ2aWNlLmhhbmRsZUltYWdlRmFsbGJhY2tQYXRoKGV2ZW50LCBmYWxsYmFja1BhdGgpO1xuICAgIH1cblxuICAgIG9uSW1hZ2VTZWxlY3Rpb24oZXZlbnQpIHtcbiAgICAgICAgdGhpcy5pbWFnZSA9IGV2ZW50O1xuICAgICAgICBjb25zdCBibG9iID0gdGhpcy5kYXRhVVJMdG9CbG9iKGV2ZW50KTtcbiAgICAgICAgY29uc3QgZmlsZW5hbWUgPSBgJHtEYXRlLnBhcnNlKG5ldyBEYXRlKCkudG9TdHJpbmcoKSl9LnBuZ2A7XG4gICAgICAgIHRoaXMuZmlsZSA9IG5ldyBGaWxlKFtibG9iXSwgZmlsZW5hbWUpO1xuICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XG4gICAgfVxuXG4gICAgb25SZWN0YW5ndWxhckltYWdlU2VsZWN0aW9uKGV2ZW50KSB7XG4gICAgICAgIHRoaXMucmVjdGFuZ3VsYXJJbWFnZSA9IGV2ZW50O1xuICAgICAgICBjb25zdCBibG9iID0gdGhpcy5kYXRhVVJMdG9CbG9iKGV2ZW50KTtcbiAgICAgICAgY29uc3QgZmlsZW5hbWUgPSBgJHtEYXRlLnBhcnNlKG5ldyBEYXRlKCkudG9TdHJpbmcoKSl9LnBuZ2A7XG4gICAgICAgIHRoaXMucmVjdGFuZ3VsYXJGaWxlID0gbmV3IEZpbGUoW2Jsb2JdLCBmaWxlbmFtZSk7XG4gICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLmRpc21pc3NBbGwoKTtcbiAgICB9XG5cbiAgICBkYXRhVVJMdG9CbG9iKGRhdGFVcmw6IHN0cmluZykge1xuICAgICAgICBjb25zdCBhcnIgPSBkYXRhVXJsLnNwbGl0KCcsJyk7XG4gICAgICAgIGNvbnN0IG1pbWUgPSAvXltBLVpdKlthLXpdKjooLio/KTtbQS1aXSovLmV4ZWMoYXJyWzBdKT8uWzFdO1xuICAgICAgICBjb25zdCBiU3RyID0gYXRvYihhcnJbMV0pO1xuICAgICAgICBsZXQgbiA9IGJTdHIubGVuZ3RoO1xuICAgICAgICBjb25zdCB1OGFyciA9IG5ldyBVaW50OEFycmF5KG4pO1xuICAgICAgICB3aGlsZSAobi0tKSB7XG4gICAgICAgICAgICB1OGFycltuXSA9IGJTdHIuY2hhckNvZGVBdChuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgQmxvYihbdThhcnJdLCB7IHR5cGU6IG1pbWUgfSk7XG4gICAgfVxuXG4gICAgQFZhbGlkYXRlRm9ybSgnZm9ybScpXG4gICAgb25TYXZlKCkge1xuICAgICAgICBjb25zdCByYXdIdG1sID0gSGVscGVyU2VydmljZS5TYXZlUmF3SFRNTCgpO1xuICAgICAgICB0aGlzLmZvcm0uY29udHJvbHNbJ2JvZHknXS5zZXRWYWx1ZShyYXdIdG1sKTtcbiAgICAgICAgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5zbHVnICE9PSAnY3JlYXRlJykge1xuICAgICAgICAgICAgdGhpcy5vblVwZGF0ZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vbkFkZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25BZGQoKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7IC4uLnRoaXMuZm9ybS52YWx1ZSB9O1xuXG4gICAgICAgIGlmIChkYXRhLmFjY2VwdGVkX2F0KSB7XG4gICAgICAgICAgICBkYXRhLmFjY2VwdGVkX2F0ID0gbW9tZW50KCkuZm9ybWF0KCdERC1NTU0tWVlZWScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YS5hY2NlcHRlZF9hdCA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRhdGEucHVibGlzaGVkX2F0KSB7XG4gICAgICAgICAgICBkYXRhLnB1Ymxpc2hlZF9hdCA9IG1vbWVudCgpLmZvcm1hdCgnREQtTU1NLVlZWVknKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEucHVibGlzaGVkX2F0ID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5maWxlKSB7XG4gICAgICAgICAgICBkYXRhLnBpY3R1cmUgPSB0aGlzLmZpbGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucmVjdGFuZ3VsYXJGaWxlKSB7XG4gICAgICAgICAgICBkYXRhLnJlY3Rhbmd1bGFyX3BpY3R1cmUgPSB0aGlzLnJlY3Rhbmd1bGFyRmlsZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRhdGEucGljdHVyZSkge1xuICAgICAgICAgICAgZGVsZXRlIGRhdGEucGljdHVyZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGF0YS5yZWN0YW5ndWxhcl9waWN0dXJlKSB7XG4gICAgICAgICAgICBkZWxldGUgZGF0YS5yZWN0YW5ndWxhcl9waWN0dXJlO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVsZXRlIGRhdGEuaWQ7XG5cbiAgICAgICAgdGhpcy5hZG1pblNlcnZpY2VcbiAgICAgICAgICAgIC5hZGRQb3N0KGRhdGEpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3ModGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGUoJ1Jlc291cmNlLkFkZGVkTWVzc2FnZScpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJhY2soKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBvc3RUYWdzKHJlc3BvbnNlLmlkKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYWRkKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdHRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0QXNwZWN0UmF0aW8oKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXNwZWN0V2lkdGggLyB0aGlzLmFzcGVjdEhlaWdodDtcbiAgICB9XG4gICAgb25VcGRhdGUoKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7IC4uLnRoaXMuZm9ybS52YWx1ZSB9O1xuXG4gICAgICAgIHRoaXMuaGFuZGxlUmVjdGFuZ3VsYXJQaWN0dXJlKGRhdGEpO1xuICAgICAgICB0aGlzLmhhbmRsZVBpY3R1cmUoZGF0YSk7XG4gICAgICAgIHRoaXMuaGFuZGxlUHVibGlzaGVkQXQoZGF0YSk7XG4gICAgICAgIHRoaXMuaGFuZGxlQWNjZXB0ZWRBdChkYXRhKTtcbiAgICAgICAgdGhpcy5oYW5kbGVPcHRpb25hbEZpZWxkcyhkYXRhKTtcbiAgICAgICAgdGhpcy5oYW5kbGVSZW1vdmFscyhkYXRhKTtcblxuICAgICAgICB0aGlzLnVwZGF0ZVBvc3QoZGF0YSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVSZWN0YW5ndWxhclBpY3R1cmUoZGF0YSkge1xuICAgICAgICBpZiAodGhpcy5yZWN0YW5ndWxhckZpbGUpIHtcbiAgICAgICAgICAgIGRhdGEucmVjdGFuZ3VsYXJfcGljdHVyZSA9IHRoaXMucmVjdGFuZ3VsYXJGaWxlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVsZXRlIGRhdGEucmVjdGFuZ3VsYXJfcGljdHVyZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlUGljdHVyZShkYXRhKSB7XG4gICAgICAgIGlmICh0aGlzLmZpbGUpIHtcbiAgICAgICAgICAgIGRhdGEucGljdHVyZSA9IHRoaXMuZmlsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSBkYXRhLnBpY3R1cmU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVB1Ymxpc2hlZEF0KGRhdGEpIHtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQoJ3B1Ymxpc2hlZF9hdCcpO1xuICAgICAgICBpZiAoY29udHJvbD8uZGlydHkpIHtcbiAgICAgICAgICAgIGRhdGEucHVibGlzaGVkX2F0ID0gY29udHJvbC52YWx1ZSA/IG1vbWVudCgpLmZvcm1hdCgnREQtTU1NLVlZWVknKSA6ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGVsZXRlIGRhdGEucHVibGlzaGVkX2F0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVBY2NlcHRlZEF0KGRhdGEpIHtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZm9ybS5nZXQoJ2FjY2VwdGVkX2F0Jyk7XG4gICAgICAgIGlmIChjb250cm9sPy5kaXJ0eSkge1xuICAgICAgICAgICAgZGF0YS5hY2NlcHRlZF9hdCA9IGNvbnRyb2wudmFsdWUgPyBtb21lbnQoKS5mb3JtYXQoJ0RELU1NTS1ZWVlZJykgOiAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSBkYXRhLmFjY2VwdGVkX2F0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVPcHRpb25hbEZpZWxkcyhkYXRhKSB7XG4gICAgICAgIGlmICghdGhpcy5mb3JtLmdldCgnd2hlbicpPy52YWx1ZSkge1xuICAgICAgICAgICAgZGF0YS53aGVuID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmZvcm0uZ2V0KCdzaG93Y2FzZScpPy52YWx1ZSkge1xuICAgICAgICAgICAgZGF0YS5zaG93Y2FzZSA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVSZW1vdmFscyhkYXRhKSB7XG4gICAgICAgIGlmICghdGhpcy5maWxlICYmICF0aGlzLmltYWdlKSB7XG4gICAgICAgICAgICBkYXRhLnJlbW92ZV9waWN0dXJlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMucmVjdGFuZ3VsYXJGaWxlICYmICF0aGlzLnJlY3Rhbmd1bGFySW1hZ2UpIHtcbiAgICAgICAgICAgIGRhdGEucmVtb3ZlX3JlY3Rhbmd1bGFyX3BpY3R1cmUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlUG9zdChkYXRhKSB7XG4gICAgICAgIHRoaXMucG9zdFRhZ3ModGhpcy5ibG9nLmlkKTtcblxuICAgICAgICB0aGlzLmFkbWluU2VydmljZVxuICAgICAgICAgICAgLnVwZGF0ZVBvc3QoZGF0YSwgdGhpcy5pZClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2Vzcyh0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgnUmVzb3VyY2UuVXBkYXRlZE1lc3NhZ2UnKSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRlVG9SZXNvdXJjZUxpc3QoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYWRkKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1Ym1pdHRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmF2aWdhdGVUb1Jlc291cmNlTGlzdCgpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvJyArIHRoaXMucm91dGVycy5yZXNvdXJjZXNMaXN0XSwge1xuICAgICAgICAgICAgc3RhdGU6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmZpbHRlckRhdGFcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZGVsZXRlQ292ZXJJbWFnZSgpIHtcbiAgICAgICAgdGhpcy5pbWFnZSA9IG51bGw7XG4gICAgICAgIHRoaXMuZmlsZSA9IG51bGw7XG4gICAgfVxuXG4gICAgZGVsZXRlUmVjdGFuZ3VsYXJJbWFnZSgpIHtcbiAgICAgICAgdGhpcy5yZWN0YW5ndWxhckltYWdlID0gbnVsbDtcbiAgICAgICAgdGhpcy5yZWN0YW5ndWxhckZpbGUgPSBudWxsO1xuICAgIH1cbiAgICBwcml2YXRlIGdldFBvc3RUYWdzKCkge1xuICAgICAgICB0aGlzLnRhZ1NlcnZpY2VcbiAgICAgICAgICAgIC5nZXRUYWdzQnlUeXBlKCdwb3N0X2NhdGVnb3JpZXMnLCB7fSwgdGhpcy5zdWJzY3JpcHRpb25JZClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYWxsVGFncyA9IHJlc3BvbnNlLnRhZ3M7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZWFyY2goZXZlbnQpIHtcbiAgICAgICAgbGV0IHZhbHVlcyA9IFtdO1xuICAgICAgICBpZiAoZXZlbnQucXVlcnkpIHtcbiAgICAgICAgICAgIHZhbHVlcyA9IHRoaXMuYWxsVGFncy5maWx0ZXIoeCA9PlxuICAgICAgICAgICAgICAgIHgubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGV2ZW50LnF1ZXJ5LnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hbGxUYWdzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgdmFsdWVzLnB1c2goZWxlbWVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRhZ3NTdWdnZXN0aW9uID0gdmFsdWVzO1xuICAgIH1cblxuICAgIHBvc3RUYWdzKGlkOiBudW1iZXIgfCBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRUYWdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICAgICAgZW50aXR5X3RhZ3M6IHRoaXMuc2VsZWN0ZWRUYWdzLm1hcChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFnID0ge307XG4gICAgICAgICAgICAgICAgICAgIHRhZ1sndGFnX2lkJ10gPSBpdGVtLmlkO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0YWc7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgc2x1ZzogaWQsXG4gICAgICAgICAgICAgICAgdGFnX2VudGl0eTogVEFHX0VOVElUWS5QT1NUXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB0aGlzLnRhZ1NlcnZpY2UuYWRkVGFncyhkYXRhKS5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGxpc3Qgb2YgbWVtYmVycyBmb3IgdGhlIHN1YnNjcmlwdGlvbiB0byBwb3B1bGF0ZSB0aGUgQXV0aG9yIGRyb3Bkb3duXG4gICAgICogVXNlcyB0aGUgc2FtZSBBUEkgYW5kIHBhdHRlcm4gYXMgRW50ZXJwcmlzZS9NZW1iZXJzIFVJXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRBdmFpbGFibGVBdXRob3JzKCkge1xuICAgICAgICB0aGlzLmF1dGhvcnNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgcGFnaW5nOiBQYWdpbmcgPSB7XG4gICAgICAgICAgICBwYWdlOiAxLFxuICAgICAgICAgICAgcGFnZV9zaXplOiBQQUdFX1NJWkUsXG4gICAgICAgICAgICBzZWFyY2g6ICcnLFxuICAgICAgICAgICAgb3JkZXJfYnk6ICcnLFxuICAgICAgICAgICAgb3JkZXJfZGlyZWN0aW9uOiAnJ1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uU2VydmljZS5nZXRFbnJvbGxlZFN1YnNjcmlwdGlvbih0aGlzLnN1YnNjcmlwdGlvbklkLCBwYWdpbmcpLnN1YnNjcmliZShcbiAgICAgICAgICAgIHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmF1dGhvcnNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlPy5tZW1iZXJzICYmIHJlc3BvbnNlLm1lbWJlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBUcmFuc2Zvcm0gbWVtYmVycyBkYXRhIGZvciBkcm9wZG93blxuICAgICAgICAgICAgICAgICAgICB0aGlzLmF2YWlsYWJsZUF1dGhvcnMgPSByZXNwb25zZS5tZW1iZXJzLm1hcChtZW1iZXIgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAke21lbWJlci5maXJzdF9uYW1lID8/ICcnfSAke21lbWJlci5sYXN0X25hbWUgPz8gJyd9YC50cmltKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1iZXIuZW1haWwsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbWVtYmVyLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZW1haWw6IG1lbWJlci5lbWFpbFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBleGlzdGluZyBhdXRob3JfaWQgZnJvbSB0aGUgYmxvZyBkYXRhLCBzZXQgaXQgbm93IHRoYXQgb3B0aW9ucyBhcmUgbG9hZGVkXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmJsb2c/LmF1dGhvcl9pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnYXV0aG9yX2lkJykuc2V0VmFsdWUodGhpcy5ibG9nLmF1dGhvcl9pZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYXV0aG9yc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBhdXRob3JzOicsIGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiY29udGFpbmVyLWZsdWlkIHB3LXRhYiBvdmVyZmxvdy1oaWRkZW5cIj5cbiAgPGRpdiBjbGFzcz1cImRhc2hib2FyZFwiPlxuICAgIDxkaXYgY2xhc3M9XCJkYXNoYm9hcmQtYm9keVwiPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwibWUtYXV0byBjb2wteHMtNiBtdC00XCI+XG4gICAgICAgIDxhIGFyaWEtbGFiZWw9XCJOYXZpZ2F0ZSB0byBUYXJnZXRcIlxuICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVRvUmVzb3VyY2VMaXN0KClcIlxuICAgICAgICAgIGNsYXNzPVwicHJldmlvdXNcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWFycm93LWFsdC1jaXJjbGUtbGVmdFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XG4gICAgICAgIDxoMyBjbGFzcz1cIm0tc3ViaGVhZGVyX190aXRsZSBtLXN1YmhlYWRlcl9fdGl0bGUtLXNlcGFyYXRvclwiPlxuICAgICAgICAgQWRkIG9yIGVkaXQgcmVzb3VyY2VcbiAgICAgICAgPC9oMz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInctMTAwIHRleHQtY2VudGVyIG10LTNcIlxuICAgICAgKm5nSWY9XCJpc0xvYWRpbmdcIj5cbiAgICAgICAgPHAtcHJvZ3Jlc3NTcGlubmVyIHN0cm9rZVdpZHRoPVwiMlwiPiA8L3AtcHJvZ3Jlc3NTcGlubmVyPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLTIgbXQtM1wiPlxuICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIlxuICAgICAgICAqbmdJZj1cIiFpc0xvYWRpbmdcIlxuICAgICAgICAgIChuZ1N1Ym1pdCk9XCJvblNhdmUoKVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgIDwhLS0gVGl0bGUgLS0+XG4gICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInTGFiZWwuVGl0bGUnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTJcIlxuICAgICAgICAgICAgICBuYW1lPVwidGl0bGVcIlxuICAgICAgICAgICAgICBbZXJyb3JNc2ddPVwiJ1Jlc291cmNlLlBvc3RzLlZhbGlkYXRpb24uVGl0bGUnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInRpdGxlXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ3RpdGxlJ10uZXJyb3JzIH1cIiAvPlxuICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDwhLS0gQmx1cmIgLS0+XG4gICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInUmVzb3VyY2UuUG9zdHMuQmx1cmInIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTJcIlxuICAgICAgICAgICAgICBuYW1lPVwiYmx1cmJcIlxuICAgICAgICAgICAgICBjbGFzcz1cImJsdXJiXCJcbiAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ1RoZSBibHVyYiBpcyB1c2VkIGZvciB0aGUgbWV0YWRhdGEuZGVzY3JpcHRpb24gZmllbGQnXCI+XG4gICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgcm93cz1cIjNcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImJsdXJiXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNob3J0IGRlc2NyaXB0aW9uIGZvciBTRU8gbWV0YSBkZXNjcmlwdGlvblwiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cblxuXG4gICAgICAgICAgICA8IS0tIFJpY2ggVGV4dCBFZGl0b3IgLS0+XG4gICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInUmVzb3VyY2UuUG9zdHMuQm9keScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICBjbGFzcz1cImNvbC05IGNvbC1tZC05IGNvbC1zbS0xMlwiXG4gICAgICAgICAgICAgIG5hbWU9XCJib2R5XCJcbiAgICAgICAgICAgICAgW2Vycm9yTXNnXT1cIidSZXNvdXJjZS5Qb3N0cy5WYWxpZGF0aW9uLkJvZHknIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICAgIDxxdWlsbC1lZGl0b3IgW3N0eWxlc109XCJ7IGhlaWdodDogJzUwMHB4JyB9XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJxdWlsbEVkaXRvclwiIFttb2R1bGVzXT1cImVkaXRvckNvbmZpZ1wiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgJ3ctMTAwJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICdxdWlsbC1jb250YWluZXInOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnYm9keSddLmVycm9yc1xuICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgPC9xdWlsbC1lZGl0b3I+XG4gICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTMgY29sLXNtLTQgbXktNFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgbWItNFwiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJjb3ZlclBpY3R1cmVcIj57eyAnUmVzb3VyY2UuUG9zdHMuQ292ZXJQaWN0dXJlJyB8IHRyYW5zbG9jbyB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHRleHQtY2VudGVyIGQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCIoaW1hZ2UgIT09IG51bGwgJiYgIWltYWdlPy5pbmNsdWRlcygnZGVmYXVsdC1waG90by5qcGcnKSApPyBpbWFnZSA6ICdhc3NldHMvaW1nL3Jlc291cmNlL2Jsb2cucG5nJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib3Blbk1vZGFsKGNvbnRlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3Blbk1vZGFsKGNvbnRlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImltYWdlIHctMTAwXCIgYWx0PVwiTW9kYWxcIlxuICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJoYW5kbGVJbWFnZUVycm9yKCRldmVudCwgJ2Fzc2V0cy9pbWcvcmVzb3VyY2UvYmxvZy5wbmcnKVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkLWlubGluZS1ibG9ja1wiIChjbGljayk9XCJvcGVuTW9kYWwoY29udGVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgc2x1ZyAhPT0gJ2NyZWF0ZScgPyAnRWRpdCcgOiAnQWRkJyB9fSBQaWN0dXJlXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYSBmYS10cmFzaCBkZWxldGUtaWNvbiB0ZXh0LWRhbmdlciBtcy0yIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiUmVtb3ZlIEltYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVDb3ZlckltYWdlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiZGVsZXRlQ292ZXJJbWFnZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaW1hZ2UgJiYgIWltYWdlLmluY2x1ZGVzKCdkZWZhdWx0LXBob3RvLmpwZycpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDwhLS0gUmVjdGFuZ3VsYXIgUGljdHVyZSAtLT5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIGQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicmVjdGFuZ3VsYXJQaWN0dXJlXCI+UmVjdGFuZ3VsYXIgUGljdHVyZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGltZ1xuICAgICAgICAgICAgICAgICAgW3NyY109XCIocmVjdGFuZ3VsYXJJbWFnZSAhPT0gbnVsbCAmJiAhcmVjdGFuZ3VsYXJJbWFnZT8uaW5jbHVkZXMoJ2RlZmF1bHQtcGhvdG8uanBnJykpID8gcmVjdGFuZ3VsYXJJbWFnZSA6ICdhc3NldHMvaW1nL3Jlc291cmNlL2Jsb2cucG5nJ1wiXG4gICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJvcGVuUmVjdE1vZGFsKHJlY3RDb250ZW50KVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlblJlY3RNb2RhbChyZWN0Q29udGVudClcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbWFnZSByZWMtaW1nXCJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3ctMTAwJzogcmVjdGFuZ3VsYXJJbWFnZSA9PT0gbnVsbCB8fCByZWN0YW5ndWxhckltYWdlPy5pbmNsdWRlcygnZGVmYXVsdC1waG90by5qcGcnKSB9XCJcbiAgICAgICAgICAgICAgICAgIGFsdD1cIlVwbG9hZGVkIHJlY3Rhbmd1bGFyIG1lZGlhIHByZXZpZXdcIlxuICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImhhbmRsZUltYWdlRXJyb3IoJGV2ZW50LCAnYXNzZXRzL2ltZy9yZXNvdXJjZS9ibG9nLnBuZycpXCIgLz5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkLWlubGluZS1ibG9ja1wiIChjbGljayk9XCJvcGVuUmVjdE1vZGFsKHJlY3RDb250ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IHNsdWcgIT09ICdjcmVhdGUnID8gJ0VkaXQnIDogJ0FkZCcgfX0gUGljdHVyZVxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYSBmYS10cmFzaCBkZWxldGUtaWNvbiB0ZXh0LWRhbmdlciBtcy0yIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIlJlbW92ZSBJbWFnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZVJlY3Rhbmd1bGFySW1hZ2UoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiZGVsZXRlUmVjdGFuZ3VsYXJJbWFnZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInJlY3Rhbmd1bGFySW1hZ2UgJiYgIXJlY3Rhbmd1bGFySW1hZ2UuaW5jbHVkZXMoJ2RlZmF1bHQtcGhvdG8uanBnJylcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9pPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ1Jlc291cmNlLlBvc3RzLkN0YVRleHQnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTZcIlxuICAgICAgICAgICAgICBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInUmVzb3VyY2UuUG9zdHMuVG9vbHRpcC5DdGFUZXh0JyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgIG5hbWU9XCJjdGFfdGV4dFwiPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjdGFfdGV4dFwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWyd0aXRsZSddLmVycm9ycyB9XCIgLz5cbiAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInUmVzb3VyY2UuUG9zdHMuRXh0ZXJuYWxVcmwnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTZcIlxuICAgICAgICAgICAgICBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInUmVzb3VyY2UuUG9zdHMuVG9vbHRpcC5FeHRlcm5hbFVybCcgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICBuYW1lPVwiZXh0ZXJuYWxfdXJsXCI+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImV4dGVybmFsX3VybFwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydleHRlcm5hbF91cmwnXS5lcnJvcnMgfVwiIC8+XG4gICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ1Jlc291cmNlLlBvc3RzLlRhZ3MnIHwgdHJhbnNsb2NvIFwiIGNsYXNzPVwidWktZmx1aWQgc2tpbGxzLW1vZGFsIGNvbC0xMiBjb2wtbWQtNiBjb2wtc20tMTIgdGFnc1wiXG4gICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCIgW3Rvb2x0aXBUZXh0XT1cIidSZXNvdXJjZS5Qb3N0cy5Ub29sdGlwLkN0YVRleHQnIHwgdHJhbnNsb2NvXCIgbmFtZT1cImN0YV90ZXh0XCI+XG4gICAgICAgICAgICAgIDxwLWF1dG9Db21wbGV0ZSBbKG5nTW9kZWwpXT1cInNlbGVjdGVkVGFnc1wiIGNsYXNzPVwiYm9keS1iZ1wiIFtzdWdnZXN0aW9uc109XCJ0YWdzU3VnZ2VzdGlvblwiIGRhdGFLZXk9XCJpZFwiIGZpZWxkPVwibmFtZVwiXG4gICAgICAgICAgICAgICAgKGNvbXBsZXRlTWV0aG9kKT1cInNlYXJjaCgkZXZlbnQpXCIgc3R5bGVDbGFzcz1cInctMTAwXCIgW21pbkxlbmd0aF09XCIxXCIgW21heGxlbmd0aF09XCIxMFwiIFtkcm9wZG93bl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIiBwbGFjZWhvbGRlcj1cIlRhZ3NcIiBbbXVsdGlwbGVdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICA8L3AtYXV0b0NvbXBsZXRlPlxuICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidBdXRob3InIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTQgY29sLXNtLTZcIlxuICAgICAgICAgICAgICBuYW1lPVwiYXV0aG9yX2lkXCJcbiAgICAgICAgICAgICAgW2Vycm9yTXNnXT1cIidQbGVhc2Ugc2VsZWN0IGFuIGF1dGhvcicgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICAgICAgPHAtZHJvcGRvd25cbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJhdXRob3JfaWRcIlxuICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cImF2YWlsYWJsZUF1dGhvcnNcIlxuICAgICAgICAgICAgICAgIG9wdGlvbkxhYmVsPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgIG9wdGlvblZhbHVlPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInU2VsZWN0IEF1dGhvcicgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIFtsb2FkaW5nXT1cImF1dGhvcnNMb2FkaW5nXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ2F1dGhvcl9pZCddLmVycm9ycyB9XCJcbiAgICAgICAgICAgICAgICBzdHlsZUNsYXNzPVwidy0xMDBcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaXRlbVwiIGxldC1hdXRob3I+XG4gICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2Pnt7IGF1dGhvci5sYWJlbCB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgPC9wLWRyb3Bkb3duPlxuICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG5cblxuICAgICAgICAgICAgPCEtLSBXSEVOIGFuZCBBVVRIT1Igb24gc2FtZSBsaW5lIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtMiBjb2wtc20tNlwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidSZXNvdXJjZS5Qb3N0cy5XaGVuJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ1Jlc291cmNlLlBvc3RzLlRvb2x0aXAuV2hlbicgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgbmFtZT1cIndoZW5cIj5cbiAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxwLWNhbGVuZGFyIGZvcm1Db250cm9sTmFtZT1cIndoZW5cIlxuICAgICAgICAgICAgICAgICAgICAgIFtzaG93SWNvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRlRm9ybWF0PVwiZGQtTS15eVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidTZWxlY3QgRGF0ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWyd3aGVuJ10uZXJyb3JzfVwiPlxuICAgICAgICAgICAgICAgICAgICA8L3AtY2FsZW5kYXI+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBBdXRob3IgRHJvcGRvd24gLS0+XG4gICAgICAgICAgICA8IS0tIFRocmVlIHRvZ2dsZXMgb24gbmV4dCBsaW5lIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtMiBjb2wtc20tNlwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiIFt0b29sdGlwVGV4dF09XCInUmVzb3VyY2UuUG9zdHMuVG9vbHRpcC5TaG93Q2FzZScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInUmVzb3VyY2UuUG9zdHMuU2hvd0Nhc2UnIHwgdHJhbnNsb2NvXCIgbmFtZT1cInNob3djYXNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHVpLXN3aXRjaCBjbGFzcz1cImQtYmxvY2tcIiBmb3JtQ29udHJvbE5hbWU9XCJzaG93Y2FzZVwiIG5hbWU9XCJzaG93Y2FzZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdWktc3dpdGNoPlxuICAgICAgICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPCEtLVB1Ymxpc2hlZCBBdCAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC0yIGNvbC1zbS02XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ1Jlc291cmNlLlBvc3RzLlRvb2x0aXAuUHVibGlzaGVkJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidSZXNvdXJjZS5Qb3N0cy5QdWJsaXNoZWQnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwicHVibGlzaGVkX2F0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHVpLXN3aXRjaCBjbGFzcz1cImQtYmxvY2tcIlxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInB1Ymxpc2hlZF9hdFwiXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInB1Ymxpc2hlZF9hdFwiPlxuICAgICAgICAgICAgICAgICAgICA8L3VpLXN3aXRjaD5cbiAgICAgICAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwhLS1BY2NlcHRlZCBBdCAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC0yIGNvbC1zbS02IGFjY2VwdC1pY29uXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ1Jlc291cmNlLlBvc3RzLlRvb2x0aXAuQWNjZXB0ZWRCeUFkbWluJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidSZXNvdXJjZS5Qb3N0cy5BY2NlcHRlZEJ5QWRtaW4nIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiYWNjZXB0ZWRfYXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dWktc3dpdGNoIGNsYXNzPVwiZC1ibG9ja1wiXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYWNjZXB0ZWRfYXRcIlxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJhY2NlcHRlZF9hdFwiPlxuICAgICAgICAgICAgICAgICAgICA8L3VpLXN3aXRjaD5cbiAgICAgICAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgdGV4dC1lbmQgbXQtNFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMlwiPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLWRlZmF1bHQgbWUtMlwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm5hdmlnYXRlVG9SZXNvdXJjZUxpc3QoKVwiPlxuICAgICAgICAgICAgICAgIHt7ICdCdXR0b24uQ2FuY2VsJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgICAgICBbYnV0dG9uQnVzeV09XCJzdWJtaXR0ZWRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCI+XG4gICAgICAgICAgICAgICAge3sgJ0J1dHRvbi5TdWJtaXQnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZm9ybT5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG5cbjxuZy10ZW1wbGF0ZSAjY29udGVudFxuICBsZXQtbW9kYWw+XG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiPlVwbG9hZCBQaWN0dXJlPC9oNT5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJidG4tY2xvc2UgZmxvYXQtZW5kXCJcbiAgICAgIGFyaWEtbGFiZWw9XCJDbG9zZVwiXG4gICAgICAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XG5cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG4gICAgPHNtYWxsPllvdSBjYW4gdXBsb2FkIGEgSlBHLCBHSUYsIG9yIFBORyBmaWxlLiAoRG8gbm90IHVwbG9hZCBwaWN0dXJlcyBjb250YWluaW5nIGNlbGVicml0aWVzLFxuICAgICAgbnVkaXR5LCBhcnR3b3JrIG9yIGNvcHlyaWdodGVkIGltYWdlcy4pPC9zbWFsbD5cbiAgICA8cHctaW1hZ2UtY3JvcHBlciAjcHJvZmlsZVxuICAgICAgYXNwZWN0UmF0aW89XCJhdXRvXCJcbiAgICAgIChpbWFnZVNlbGVjdGlvbkV2ZW50KT1cIm9uSW1hZ2VTZWxlY3Rpb24oJGV2ZW50KVwiXG4gICAgICAoY2xvc2VFdmVudCk9XCJvbkNsb3NlKClcIj5cbiAgICA8L3B3LWltYWdlLWNyb3BwZXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNyZWN0Q29udGVudCBsZXQtbW9kYWw+XG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1oZWFkZXJcIj5cbiAgICA8aDUgY2xhc3M9XCJtb2RhbC10aXRsZVwiPlVwbG9hZCBQaWN0dXJlPC9oNT5cbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgY2xhc3M9XCJidG4tY2xvc2UgZmxvYXQtZW5kXCJcbiAgICAgIGFyaWEtbGFiZWw9XCJDbG9zZVwiXG4gICAgICAoY2xpY2spPVwibW9kYWwuZGlzbWlzcygpXCI+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XG4gICAgPHNtYWxsPlxuICAgICAgWW91IGNhbiB1cGxvYWQgYSBKUEcsIEdJRiwgb3IgUE5HIGZpbGUuIChEbyBub3QgdXBsb2FkIHBpY3R1cmVzIGNvbnRhaW5pbmcgY2VsZWJyaXRpZXMsXG4gICAgICBudWRpdHksIGFydHdvcmsgb3IgY29weXJpZ2h0ZWQgaW1hZ2VzLilcbiAgICA8L3NtYWxsPlxuXG5cbiAgICA8cHctaW1hZ2UtY3JvcHBlclxuICAgICAgI3Byb2ZpbGVcbiAgICAgIFthc3BlY3RSYXRpb109XCInZHluYW1pYydcIlxuICAgICAgW2R5bmFtaWNEYXRhXT1cImdldEFzcGVjdFJhdGlvKClcIlxuICAgICAgKGltYWdlU2VsZWN0aW9uRXZlbnQpPVwib25SZWN0YW5ndWxhckltYWdlU2VsZWN0aW9uKCRldmVudClcIlxuICAgICAgKGNsb3NlRXZlbnQpPVwib25DbG9zZSgpXCI+XG4gICAgPC9wdy1pbWFnZS1jcm9wcGVyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
380
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2VzLWFkbWluLWRldGFpbHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hZG1pbi1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3Jlc291cmNlcy9yZXNvdXJjZXMtYWRtaW4tZGV0YWlscy9yZXNvdXJjZXMtYWRtaW4tZGV0YWlscy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FkbWluLW1vZHVsZS9zcmMvbGliL2NvbXBvbmVudHMvcmVzb3VyY2VzL3Jlc291cmNlcy1hZG1pbi1kZXRhaWxzL3Jlc291cmNlcy1hZG1pbi1kZXRhaWxzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBRUgsU0FBUyxFQUNULFFBQVEsRUFHUixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDL0YsT0FBTyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQVUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDMUYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFNUQsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBRTVCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUXRELE1BQU0sT0FBTyw2QkFDVCxTQUFRLGdCQUFnQjtJQW9EeEIs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QUFLLEVBQUUsTUFBTSxDQUFDLEVBQUU7b0JBQ2hCLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztpQkFDdEIsQ0FBQyxDQUFDLENBQUM7Z0JBRUosMEZBQTBGO2dCQUMxRixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUM7b0JBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUM3RCxDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUMsRUFDRCxLQUFLLENBQUMsRUFBRTtZQUNKLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1lBQzVCLE9BQU8sQ0FBQyxLQUFLLENBQUMseUJBQXlCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDcEQsQ0FBQyxDQUNKLENBQUM7SUFDTixDQUFDO0lBRVEsV0FBVztRQUNoQixLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDeEIsQ0FBQzsrR0F6WlEsNkJBQTZCO21HQUE3Qiw2QkFBNkIseUZDM0IxQywyaWFBNlNBOztBRHBHSTtJQURDLFlBQVksQ0FBQyxNQUFNLENBQUM7Ozs7MkRBVXBCOzRGQXZMUSw2QkFBNkI7a0JBTnpDLFNBQVM7K0JBQ0ksNEJBQTRCLGlCQUd2QixpQkFBaUIsQ0FBQyxJQUFJOzBMQWdMckMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDb21wb25lbnQsXG4gICAgSW5qZWN0b3IsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IEFkbWluU2VydmljZSwgQXBwQWRtaW4gfSBmcm9tICdAcG9zaXdpc2UvYWRtaW4tbW9kdWxlLXV0aWxzJztcbmltcG9ydCB7IEFwcEJhc2VDb21wb25lbnQgfSBmcm9tICdAcG9zaXdpc2UvYXBwLWJhc2UtY29tcG9uZW50JztcbmltcG9ydCB7IFBlcm1pc3Npb25TZXJ2aWNlLCBTdWJzY3JpcHRpb25TZXJ2aWNlLCBUYWdTZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi1zZXJ2aWNlcyc7XG5pbXBvcnQgeyBBRE1JTl9ST1VURVJTLCBQQUdFX1NJWkUsIFBhZ2luZywgVEFHX0VOVElUWSB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tdXRpbGl0aWVzJztcbmltcG9ydCB7IEhlbHBlclNlcnZpY2UgfSBmcm9tICdAcG9zaXdpc2UvaGVscGVyLXNlcnZpY2UnO1xuaW1wb3J0IHsgUXVpbGxIZWxwZXIsIFZhbGlkYXRlRm9ybSB9IGZyb20gJ0Bwb3Npd2lzZS91dGlscyc7XG5cbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcblxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncHctcmVzb3VyY2VzLWRldGFpbHMtaW5kZXgnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9yZXNvdXJjZXMtYWRtaW4tZGV0YWlscy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vcmVzb3VyY2VzLWFkbWluLWRldGFpbHMuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIFJlc291cmNlQWRtaW5EZXRhaWxzQ29tcG9uZW50XG4gICAgZXh0ZW5kcyBBcHBCYXNlQ29tcG9uZW50XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdFxue1xuICAgIGZvcm06IFVudHlwZWRGb3JtR3JvdXA7XG5cbiAgICBzdWJtaXR0ZWQgPSBmYWxzZTtcblxuICAgIGlkOiBudW1iZXI7XG4gICAgc2x1Zzogc3RyaW5nO1xuXG4gICAgYmxvZyA9IHtcbiAgICAgICAgaWQ6ICcnLFxuICAgICAgICBhdXRob3JfaWQ6IG51bGwgYXMgbnVtYmVyIHwgbnVsbCxcbiAgICAgICAgdGl0bGU6ICcnLFxuICAgICAgICBib2R5OiAnJyxcbiAgICAgICAgdmlldzogJycsXG4gICAgICAgIHNsdWc6ICcnLFxuICAgICAgICBwdWJsaXNoZWRfYXQ6ICcnLFxuICAgICAgICBhY2NlcHRlZF9hdDogJycsXG4gICAgICAgIHBpY3R1cmU6IHtcbiAgICAgICAgICAgIHVybDogJydcbiAgICAgICAgfSxcbiAgICAgICAgcG9zdF9jb21tZW50czogW11cbiAgICB9O1xuXG4gICAgZmlsZTogRmlsZTtcbiAgICByZWN0YW5ndWxhckZpbGU6IEZpbGU7XG4gICAgaW1hZ2UgPSAnJztcbiAgICByZWN0YW5ndWxhckltYWdlID0gJyc7XG5cbiAgICBhc3BlY3RXaWR0aCA9IDM7XG4gICAgYXNwZWN0SGVpZ2h0ID0gMTtcbiAgICBmcmVlQXNwZWN0ID0gZmFsc2U7XG5cbiAgICBhbGxUYWdzOiB7IG5hbWU6IHN0cmluZyB9W10gPSBbXTtcbiAgICB0YWdzU3VnZ2VzdGlvbiA9IFtdO1xuICAgIHNlbGVjdGVkVGFncyA9IFtdO1xuXG4gICAgc3Vic2NyaXB0aW9uSWQ6IG51bWJlcjtcblxuICAgIGlzTG9hZGluZyA9IHRydWU7XG4gICAgaXNCbG9nQWRtaW46IGJvb2xlYW47XG5cbiAgICAvLyBBdXRob3IgZHJvcGRvd24gcHJvcGVydGllc1xuICAgIGF2YWlsYWJsZUF1dGhvcnMgPSBbXTtcbiAgICBhdXRob3JzTG9hZGluZyA9IGZhbHNlO1xuICAgIGlzU3Vic2NyaXB0aW9uU3VwZXJBZG1pbiA9IGZhbHNlO1xuXG4gICAgZWRpdG9yQ29uZmlnO1xuICAgIHJvdXRlcnMgPSBBRE1JTl9ST1VURVJTO1xuICAgIGZpbHRlckRhdGE6IHsgc291cmNlOiBzdHJpbmc7IHZhbHVlOiBudW1iZXIgfTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG1vZGFsU2VydmljZTogTmdiTW9kYWwsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgYWRtaW5TZXJ2aWNlOiBBZG1pblNlcnZpY2UsXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB0YWdTZXJ2aWNlOiBUYWdTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHN1YnNjcmlwdGlvblNlcnZpY2U6IFN1YnNjcmlwdGlvblNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgICAgICBRdWlsbEhlbHBlci5pbml0KCk7XG4gICAgICAgIHRoaXMuZWRpdG9yQ29uZmlnID0gUXVpbGxIZWxwZXIuZ2V0RWRpdG9yQ29uZmlnKCk7XG4gICAgICAgIHRoaXMuZm9ybSA9IEFwcEFkbWluLmdldFJlc291cmNlc0Zvcm0oKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIEhlbHBlclNlcnZpY2Uuc3Vic2NyaWJlVG9FZGl0b3JDaGFuZ2VzKHRoaXMuZm9ybSwgJ2JvZHknKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJEYXRhID0gaGlzdG9yeS5zdGF0ZTtcbiAgICAgICAgdGhpcy5pc0Jsb2dBZG1pbiA9IHRoaXMucGVybWlzc2lvblNlcnZpY2UuZXZhbHVhdGVQZXJtaXNzaW9ucyhcbiAgICAgICAgICAgIGAke1Blcm1pc3Npb25TZXJ2aWNlLnNlbGVjdGVkUHJvZHVjdD8ucGVybWlzc2lvbn0uJHtQZXJtaXNzaW9uU2VydmljZS5zZWxlY3RlZFByb2R1Y3Q/LmZlYXR1cmVfa2V5fS5CbG9nLkFkbWluYFxuICAgICAgICApO1xuICAgICAgICB0aGlzLmlzU3Vic2NyaXB0aW9uU3VwZXJBZG1pbiA9IHRoaXMucGVybWlzc2lvblNlcnZpY2UuaXNVc2VyU3Vic2NyaXB0aW9uU3VwZXJBZG1pbigpO1xuXG4gICAgICAgIGlmICghdGhpcy5pc1N1YnNjcmlwdGlvblN1cGVyQWRtaW4pIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2F1dGhvcl9pZCcpLmRpc2FibGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5pc0Jsb2dBZG1pbikge1xuICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnYWNjZXB0ZWRfYXQnKS5kaXNhYmxlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZvcm0uZ2V0KCdhY2NlcHRlZF9hdCcpLmVuYWJsZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucm91dGUucGFyYW1zLnN1YnNjcmliZShwYXJhbXMgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2cocGFyYW1zWydzbHVnJ10pO1xuICAgICAgICAgICAgdGhpcy5zbHVnID0gcGFyYW1zWydzbHVnJ10gPz8gJyc7XG4gICAgICAgICAgICBpZiAodGhpcy5zbHVnICE9PSAnY3JlYXRlJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0QmxvZ0l0ZW0odGhpcy5zbHVnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uSWQgPSBQZXJtaXNzaW9uU2VydmljZS5zZWxlY3RlZFN1YnNjcmlwdGlvbi5pZDtcbiAgICAgICAgdGhpcy5mb3JtLmdldCgnc3Vic2NyaXB0aW9uX2lkJykuc2V0VmFsdWUodGhpcy5zdWJzY3JpcHRpb25JZCk7XG4gICAgICAgIHRoaXMuZ2V0UG9zdFRhZ3MoKTtcbiAgICAgICAgdGhpcy5nZXRBdmFpbGFibGVBdXRob3JzKCk7XG4gICAgfVxuXG4gICAgZ2V0IGYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY29udHJvbHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRCbG9nSXRlbShzbHVnOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5hZG1pblNlcnZpY2UuZ2V0UG9zdEJ5U2x1ZyhzbHVnKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaWQgPSByZXNwb25zZS5pZDtcbiAgICAgICAgICAgIGNvbnN0IHdoZW4gPSByZXNwb25zZS53aGVuID8gbmV3IERhdGUocmVzcG9uc2Uud2hlbikgOiBudWxsO1xuICAgICAgICAgICAgdGhpcy5ibG9nID0geyAuLi5yZXNwb25zZSwgd2hlbiB9O1xuICAgICAgICAgICAgdGhpcy5pbWFnZSA9IHJlc3BvbnNlPy5waWN0dXJlPy51cmw7XG4gICAgICAgICAgICB0aGlzLnJlY3Rhbmd1bGFySW1hZ2UgPSByZXNwb25zZT8ucmVjdGFuZ3VsYXJfcGljdHVyZT8udXJsO1xuICAgICAgICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUodGhpcy5ibG9nKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWdzID0gcmVzcG9uc2U/LnRhZ3M/Lmxlbmd0aCA/IFsuLi5yZXNwb25zZS50YWdzXSA6IFtdO1xuXG4gICAgICAgICAgICAvLyBTZXQgYXV0aG9yX2lkIGlmIGl0IGV4aXN0cyBpbiB0aGUgcmVzcG9uc2VcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5hdXRob3I/LmlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgnYXV0aG9yX2lkJykuc2V0VmFsdWUocmVzcG9uc2UuYXV0aG9yLmlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJsb2cuYXV0aG9yX2lkID0gcmVzcG9uc2UuYXV0aG9yLmlkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmaWxlQ2hhbmdlTGlzdGVuZXIoJGV2ZW50KSB7XG4gICAgICAgIFt0aGlzLmZpbGVdID0gJGV2ZW50LnRhcmdldC5maWxlcztcbiAgICB9XG5cbiAgICBvcGVuTW9kYWwoY29udGVudCkge1xuICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5vcGVuKGNvbnRlbnQsIHsgY2VudGVyZWQ6IHRydWUsIHdpbmRvd0NsYXNzOiAnbW9kYWwtaG9sZGVyJyB9KTtcbiAgICB9XG5cbiAgICBvcGVuUmVjdE1vZGFsKGNvbnRlbnQpIHtcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbihjb250ZW50LCB7IGNlbnRlcmVkOiB0cnVlLCB3aW5kb3dDbGFzczogJ21vZGFsLWhvbGRlcicgfSk7XG4gICAgfVxuXG4gICAgb25DbG9zZSgpIHtcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xuICAgIH1cblxuICAgIGhhbmRsZUltYWdlRXJyb3IoZXZlbnQ6IEV2ZW50LCBmYWxsYmFja1BhdGgpOiB2b2lkIHtcbiAgICAgICAgSGVscGVyU2VydmljZS5oYW5kbGVJbWFnZUZhbGxiYWNrUGF0aChldmVudCwgZmFsbGJhY2tQYXRoKTtcbiAgICB9XG5cbiAgICBvbkltYWdlU2VsZWN0aW9uKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuaW1hZ2UgPSBldmVudDtcbiAgICAgICAgY29uc3QgYmxvYiA9IHRoaXMuZGF0YVVSTHRvQmxvYihldmVudCk7XG4gICAgICAgIGNvbnN0IGZpbGVuYW1lID0gYCR7RGF0ZS5wYXJzZShuZXcgRGF0ZSgpLnRvU3RyaW5nKCkpfS5wbmdgO1xuICAgICAgICB0aGlzLmZpbGUgPSBuZXcgRmlsZShbYmxvYl0sIGZpbGVuYW1lKTtcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2UuZGlzbWlzc0FsbCgpO1xuICAgIH1cblxuICAgIG9uUmVjdGFuZ3VsYXJJbWFnZVNlbGVjdGlvbihldmVudCkge1xuICAgICAgICB0aGlzLnJlY3Rhbmd1bGFySW1hZ2UgPSBldmVudDtcbiAgICAgICAgY29uc3QgYmxvYiA9IHRoaXMuZGF0YVVSTHRvQmxvYihldmVudCk7XG4gICAgICAgIGNvbnN0IGZpbGVuYW1lID0gYCR7RGF0ZS5wYXJzZShuZXcgRGF0ZSgpLnRvU3RyaW5nKCkpfS5wbmdgO1xuICAgICAgICB0aGlzLnJlY3Rhbmd1bGFyRmlsZSA9IG5ldyBGaWxlKFtibG9iXSwgZmlsZW5hbWUpO1xuICAgICAgICB0aGlzLm1vZGFsU2VydmljZS5kaXNtaXNzQWxsKCk7XG4gICAgfVxuXG4gICAgZGF0YVVSTHRvQmxvYihkYXRhVXJsOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgYXJyID0gZGF0YVVybC5zcGxpdCgnLCcpO1xuICAgICAgICBjb25zdCBtaW1lID0gL15bQS1aXSpbYS16XSo6KC4qPyk7W0EtWl0qLy5leGVjKGFyclswXSk/LlsxXTtcbiAgICAgICAgY29uc3QgYlN0ciA9IGF0b2IoYXJyWzFdKTtcbiAgICAgICAgbGV0IG4gPSBiU3RyLmxlbmd0aDtcbiAgICAgICAgY29uc3QgdThhcnIgPSBuZXcgVWludDhBcnJheShuKTtcbiAgICAgICAgd2hpbGUgKG4tLSkge1xuICAgICAgICAgICAgdThhcnJbbl0gPSBiU3RyLmNoYXJDb2RlQXQobik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IEJsb2IoW3U4YXJyXSwgeyB0eXBlOiBtaW1lIH0pO1xuICAgIH1cblxuICAgIEBWYWxpZGF0ZUZvcm0oJ2Zvcm0nKVxuICAgIG9uU2F2ZSgpIHtcbiAgICAgICAgY29uc3QgcmF3SHRtbCA9IEhlbHBlclNlcnZpY2UuU2F2ZVJhd0hUTUwoKTtcbiAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzWydib2R5J10uc2V0VmFsdWUocmF3SHRtbCk7XG4gICAgICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuc2x1ZyAhPT0gJ2NyZWF0ZScpIHtcbiAgICAgICAgICAgIHRoaXMub25VcGRhdGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub25BZGQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQWRkKCkge1xuICAgICAgICBjb25zdCBkYXRhID0geyAuLi50aGlzLmZvcm0udmFsdWUgfTtcblxuICAgICAgICBpZiAoZGF0YS5hY2NlcHRlZF9hdCkge1xuICAgICAgICAgICAgZGF0YS5hY2NlcHRlZF9hdCA9IG1vbWVudCgpLmZvcm1hdCgnREQtTU1NLVlZWVknKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEuYWNjZXB0ZWRfYXQgPSAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkYXRhLnB1Ymxpc2hlZF9hdCkge1xuICAgICAgICAgICAgZGF0YS5wdWJsaXNoZWRfYXQgPSBtb21lbnQoKS5mb3JtYXQoJ0RELU1NTS1ZWVlZJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhLnB1Ymxpc2hlZF9hdCA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZmlsZSkge1xuICAgICAgICAgICAgZGF0YS5waWN0dXJlID0gdGhpcy5maWxlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnJlY3Rhbmd1bGFyRmlsZSkge1xuICAgICAgICAgICAgZGF0YS5yZWN0YW5ndWxhcl9waWN0dXJlID0gdGhpcy5yZWN0YW5ndWxhckZpbGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkYXRhLnBpY3R1cmUpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBkYXRhLnBpY3R1cmU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRhdGEucmVjdGFuZ3VsYXJfcGljdHVyZSkge1xuICAgICAgICAgICAgZGVsZXRlIGRhdGEucmVjdGFuZ3VsYXJfcGljdHVyZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlbGV0ZSBkYXRhLmlkO1xuXG4gICAgICAgIHRoaXMuYWRtaW5TZXJ2aWNlXG4gICAgICAgICAgICAuYWRkUG9zdChkYXRhKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlKCdSZXNvdXJjZS5BZGRlZE1lc3NhZ2UnKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5iYWNrKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3N0VGFncyhyZXNwb25zZS5pZCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmFkZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJtaXR0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldEFzcGVjdFJhdGlvKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmFzcGVjdFdpZHRoIC8gdGhpcy5hc3BlY3RIZWlnaHQ7XG4gICAgfVxuICAgIG9uVXBkYXRlKCkge1xuICAgICAgICBjb25zdCBkYXRhID0geyAuLi50aGlzLmZvcm0udmFsdWUgfTtcblxuICAgICAgICB0aGlzLmhhbmRsZVJlY3Rhbmd1bGFyUGljdHVyZShkYXRhKTtcbiAgICAgICAgdGhpcy5oYW5kbGVQaWN0dXJlKGRhdGEpO1xuICAgICAgICB0aGlzLmhhbmRsZVB1Ymxpc2hlZEF0KGRhdGEpO1xuICAgICAgICB0aGlzLmhhbmRsZUFjY2VwdGVkQXQoZGF0YSk7XG4gICAgICAgIHRoaXMuaGFuZGxlT3B0aW9uYWxGaWVsZHMoZGF0YSk7XG4gICAgICAgIHRoaXMuaGFuZGxlUmVtb3ZhbHMoZGF0YSk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVQb3N0KGRhdGEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlUmVjdGFuZ3VsYXJQaWN0dXJlKGRhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMucmVjdGFuZ3VsYXJGaWxlKSB7XG4gICAgICAgICAgICBkYXRhLnJlY3Rhbmd1bGFyX3BpY3R1cmUgPSB0aGlzLnJlY3Rhbmd1bGFyRmlsZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSBkYXRhLnJlY3Rhbmd1bGFyX3BpY3R1cmU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZVBpY3R1cmUoZGF0YSkge1xuICAgICAgICBpZiAodGhpcy5maWxlKSB7XG4gICAgICAgICAgICBkYXRhLnBpY3R1cmUgPSB0aGlzLmZpbGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWxldGUgZGF0YS5waWN0dXJlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVQdWJsaXNoZWRBdChkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KCdwdWJsaXNoZWRfYXQnKTtcbiAgICAgICAgaWYgKGNvbnRyb2w/LmRpcnR5KSB7XG4gICAgICAgICAgICBkYXRhLnB1Ymxpc2hlZF9hdCA9IGNvbnRyb2wudmFsdWUgPyBtb21lbnQoKS5mb3JtYXQoJ0RELU1NTS1ZWVlZJykgOiAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSBkYXRhLnB1Ymxpc2hlZF9hdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlQWNjZXB0ZWRBdChkYXRhKSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KCdhY2NlcHRlZF9hdCcpO1xuICAgICAgICBpZiAoY29udHJvbD8uZGlydHkpIHtcbiAgICAgICAgICAgIGRhdGEuYWNjZXB0ZWRfYXQgPSBjb250cm9sLnZhbHVlID8gbW9tZW50KCkuZm9ybWF0KCdERC1NTU0tWVlZWScpIDogJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWxldGUgZGF0YS5hY2NlcHRlZF9hdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlT3B0aW9uYWxGaWVsZHMoZGF0YSkge1xuICAgICAgICBpZiAoIXRoaXMuZm9ybS5nZXQoJ3doZW4nKT8udmFsdWUpIHtcbiAgICAgICAgICAgIGRhdGEud2hlbiA9ICcnO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5mb3JtLmdldCgnc2hvd2Nhc2UnKT8udmFsdWUpIHtcbiAgICAgICAgICAgIGRhdGEuc2hvd2Nhc2UgPSAnJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlUmVtb3ZhbHMoZGF0YSkge1xuICAgICAgICBpZiAoIXRoaXMuZmlsZSAmJiAhdGhpcy5pbWFnZSkge1xuICAgICAgICAgICAgZGF0YS5yZW1vdmVfcGljdHVyZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnJlY3Rhbmd1bGFyRmlsZSAmJiAhdGhpcy5yZWN0YW5ndWxhckltYWdlKSB7XG4gICAgICAgICAgICBkYXRhLnJlbW92ZV9yZWN0YW5ndWxhcl9waWN0dXJlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZVBvc3QoZGF0YSkge1xuICAgICAgICB0aGlzLnBvc3RUYWdzKHRoaXMuYmxvZy5pZCk7XG5cbiAgICAgICAgdGhpcy5hZG1pblNlcnZpY2VcbiAgICAgICAgICAgIC51cGRhdGVQb3N0KGRhdGEsIHRoaXMuaWQpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3ModGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGUoJ1Jlc291cmNlLlVwZGF0ZWRNZXNzYWdlJykpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvUmVzb3VyY2VMaXN0KCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmFkZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJtaXR0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5hdmlnYXRlVG9SZXNvdXJjZUxpc3QoKSB7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnLycgKyB0aGlzLnJvdXRlcnMucmVzb3VyY2VzTGlzdF0sIHtcbiAgICAgICAgICAgIHN0YXRlOiB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5maWx0ZXJEYXRhXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGRlbGV0ZUNvdmVySW1hZ2UoKSB7XG4gICAgICAgIHRoaXMuaW1hZ2UgPSBudWxsO1xuICAgICAgICB0aGlzLmZpbGUgPSBudWxsO1xuICAgIH1cblxuICAgIGRlbGV0ZVJlY3Rhbmd1bGFySW1hZ2UoKSB7XG4gICAgICAgIHRoaXMucmVjdGFuZ3VsYXJJbWFnZSA9IG51bGw7XG4gICAgICAgIHRoaXMucmVjdGFuZ3VsYXJGaWxlID0gbnVsbDtcbiAgICB9XG4gICAgcHJpdmF0ZSBnZXRQb3N0VGFncygpIHtcbiAgICAgICAgdGhpcy50YWdTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0VGFnc0J5VHlwZSgncG9zdF9jYXRlZ29yaWVzJywge30sIHRoaXMuc3Vic2NyaXB0aW9uSWQpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFsbFRhZ3MgPSByZXNwb25zZS50YWdzO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2VhcmNoKGV2ZW50KSB7XG4gICAgICAgIGxldCB2YWx1ZXMgPSBbXTtcbiAgICAgICAgaWYgKGV2ZW50LnF1ZXJ5KSB7XG4gICAgICAgICAgICB2YWx1ZXMgPSB0aGlzLmFsbFRhZ3MuZmlsdGVyKHggPT5cbiAgICAgICAgICAgICAgICB4Lm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhldmVudC5xdWVyeS50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWxsVGFncy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgICAgIHZhbHVlcy5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50YWdzU3VnZ2VzdGlvbiA9IHZhbHVlcztcbiAgICB9XG5cbiAgICBwb3N0VGFncyhpZDogbnVtYmVyIHwgc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVGFncy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAgICAgICAgIGVudGl0eV90YWdzOiB0aGlzLnNlbGVjdGVkVGFncy5tYXAoaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhZyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICB0YWdbJ3RhZ19pZCddID0gaXRlbS5pZDtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFnO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHNsdWc6IGlkLFxuICAgICAgICAgICAgICAgIHRhZ19lbnRpdHk6IFRBR19FTlRJVFkuUE9TVFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgdGhpcy50YWdTZXJ2aWNlLmFkZFRhZ3MoZGF0YSkuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBsaXN0IG9mIG1lbWJlcnMgZm9yIHRoZSBzdWJzY3JpcHRpb24gdG8gcG9wdWxhdGUgdGhlIEF1dGhvciBkcm9wZG93blxuICAgICAqIFVzZXMgdGhlIHNhbWUgQVBJIGFuZCBwYXR0ZXJuIGFzIEVudGVycHJpc2UvTWVtYmVycyBVSVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0QXZhaWxhYmxlQXV0aG9ycygpIHtcbiAgICAgICAgdGhpcy5hdXRob3JzTG9hZGluZyA9IHRydWU7XG4gICAgICAgIGNvbnN0IHBhZ2luZzogUGFnaW5nID0ge1xuICAgICAgICAgICAgcGFnZTogMSxcbiAgICAgICAgICAgIHBhZ2Vfc2l6ZTogUEFHRV9TSVpFLFxuICAgICAgICAgICAgc2VhcmNoOiAnJyxcbiAgICAgICAgICAgIG9yZGVyX2J5OiAnJyxcbiAgICAgICAgICAgIG9yZGVyX2RpcmVjdGlvbjogJydcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvblNlcnZpY2UuZ2V0RW5yb2xsZWRTdWJzY3JpcHRpb24odGhpcy5zdWJzY3JpcHRpb25JZCwgcGFnaW5nKS5zdWJzY3JpYmUoXG4gICAgICAgICAgICByZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdXRob3JzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZT8ubWVtYmVycyAmJiByZXNwb25zZS5tZW1iZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVHJhbnNmb3JtIG1lbWJlcnMgZGF0YSBmb3IgZHJvcGRvd25cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVBdXRob3JzID0gcmVzcG9uc2UubWVtYmVycy5tYXAobWVtYmVyID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgJHttZW1iZXIuZmlyc3RfbmFtZSA/PyAnJ30gJHttZW1iZXIubGFzdF9uYW1lID8/ICcnfWAudHJpbSgpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtYmVyLmVtYWlsLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG1lbWJlci5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtYWlsOiBtZW1iZXIuZW1haWxcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYW4gZXhpc3RpbmcgYXV0aG9yX2lkIGZyb20gdGhlIGJsb2cgZGF0YSwgc2V0IGl0IG5vdyB0aGF0IG9wdGlvbnMgYXJlIGxvYWRlZFxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5ibG9nPy5hdXRob3JfaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ2F1dGhvcl9pZCcpLnNldFZhbHVlKHRoaXMuYmxvZy5hdXRob3JfaWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmF1dGhvcnNMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgYXV0aG9yczonLCBlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lci1mbHVpZCBwdy10YWIgb3ZlcmZsb3ctaGlkZGVuXCI+XG4gIDxkaXYgY2xhc3M9XCJkYXNoYm9hcmRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZGFzaGJvYXJkLWJvZHlcIj5cblxuICAgICAgPGRpdiBjbGFzcz1cIm1lLWF1dG8gY29sLXhzLTYgbXQtNFwiPlxuICAgICAgICA8YSBhcmlhLWxhYmVsPVwiTmF2aWdhdGUgdG8gVGFyZ2V0XCJcbiAgICAgICAgICAoY2xpY2spPVwibmF2aWdhdGVUb1Jlc291cmNlTGlzdCgpXCJcbiAgICAgICAgICBjbGFzcz1cInByZXZpb3VzXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1hcnJvdy1hbHQtY2lyY2xlLWxlZnRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxuICAgICAgICA8aDMgY2xhc3M9XCJtLXN1YmhlYWRlcl9fdGl0bGUgbS1zdWJoZWFkZXJfX3RpdGxlLS1zZXBhcmF0b3JcIj5cbiAgICAgICAgIEFkZCBvciBlZGl0IHJlc291cmNlXG4gICAgICAgIDwvaDM+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCB0ZXh0LWNlbnRlciBtdC0zXCJcbiAgICAgICpuZ0lmPVwiaXNMb2FkaW5nXCI+XG4gICAgICAgIDxwLXByb2dyZXNzU3Bpbm5lciBzdHJva2VXaWR0aD1cIjJcIj4gPC9wLXByb2dyZXNzU3Bpbm5lcj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwicC0yIG10LTNcIj5cbiAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgICAgICAgKm5nSWY9XCIhaXNMb2FkaW5nXCJcbiAgICAgICAgICAobmdTdWJtaXQpPVwib25TYXZlKClcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8IS0tIFRpdGxlIC0tPlxuICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ0xhYmVsLlRpdGxlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyXCJcbiAgICAgICAgICAgICAgbmFtZT1cInRpdGxlXCJcbiAgICAgICAgICAgICAgW2Vycm9yTXNnXT1cIidSZXNvdXJjZS5Qb3N0cy5WYWxpZGF0aW9uLlRpdGxlJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ0aXRsZVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWyd0aXRsZSddLmVycm9ycyB9XCIgLz5cbiAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8IS0tIEJsdXJiIC0tPlxuICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ1Jlc291cmNlLlBvc3RzLkJsdXJiJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyXCJcbiAgICAgICAgICAgICAgbmFtZT1cImJsdXJiXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJibHVyYlwiXG4gICAgICAgICAgICAgIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidUaGUgYmx1cmIgaXMgdXNlZCBmb3IgdGhlIG1ldGFkYXRhLmRlc2NyaXB0aW9uIGZpZWxkJ1wiPlxuICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgIHJvd3M9XCIzXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJibHVyYlwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTaG9ydCBkZXNjcmlwdGlvbiBmb3IgU0VPIG1ldGEgZGVzY3JpcHRpb25cIj48L3RleHRhcmVhPlxuICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG5cblxuICAgICAgICAgICAgPCEtLSBSaWNoIFRleHQgRWRpdG9yIC0tPlxuICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ1Jlc291cmNlLlBvc3RzLkJvZHknIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtOSBjb2wtbWQtOSBjb2wtc20tMTJcIlxuICAgICAgICAgICAgICBuYW1lPVwiYm9keVwiXG4gICAgICAgICAgICAgIFtlcnJvck1zZ109XCInUmVzb3VyY2UuUG9zdHMuVmFsaWRhdGlvbi5Cb2R5JyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICA8cXVpbGwtZWRpdG9yIFtzdHlsZXNdPVwieyBoZWlnaHQ6ICc1MDBweCcgfVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwicXVpbGxFZGl0b3JcIiBbbW9kdWxlc109XCJlZGl0b3JDb25maWdcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImJvZHlcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICd3LTEwMCc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAncXVpbGwtY29udGFpbmVyJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ2JvZHknXS5lcnJvcnNcbiAgICAgICAgICAgICAgICB9XCI+XG4gICAgICAgICAgICAgIDwvcXVpbGwtZWRpdG9yPlxuICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGNvbC1tZC0zIGNvbC1zbS00IG15LTRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIG1iLTRcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiY292ZXJQaWN0dXJlXCI+e3sgJ1Jlc291cmNlLlBvc3RzLkNvdmVyUGljdHVyZScgfCB0cmFuc2xvY28gfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciB0ZXh0LWNlbnRlciBkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiKGltYWdlICE9PSBudWxsICYmICFpbWFnZT8uaW5jbHVkZXMoJ2RlZmF1bHQtcGhvdG8uanBnJykgKT8gaW1hZ2UgOiAnYXNzZXRzL2ltZy9yZXNvdXJjZS9ibG9nLnBuZydcIlxuICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cIm9wZW5Nb2RhbChjb250ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Nb2RhbChjb250ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbWFnZSB3LTEwMFwiIGFsdD1cIk1vZGFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaGFuZGxlSW1hZ2VFcnJvcigkZXZlbnQsICdhc3NldHMvaW1nL3Jlc291cmNlL2Jsb2cucG5nJylcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG10LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZC1pbmxpbmUtYmxvY2tcIiAoY2xpY2spPVwib3Blbk1vZGFsKGNvbnRlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHNsdWcgIT09ICdjcmVhdGUnID8gJ0VkaXQnIDogJ0FkZCcgfX0gUGljdHVyZVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmEgZmEtdHJhc2ggZGVsZXRlLWljb24gdGV4dC1kYW5nZXIgbXMtMiBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIlJlbW92ZSBJbWFnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlQ292ZXJJbWFnZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImRlbGV0ZUNvdmVySW1hZ2UoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImltYWdlICYmICFpbWFnZS5pbmNsdWRlcygnZGVmYXVsdC1waG90by5qcGcnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8IS0tIFJlY3Rhbmd1bGFyIFBpY3R1cmUgLS0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInJlY3Rhbmd1bGFyUGljdHVyZVwiPlJlY3Rhbmd1bGFyIFBpY3R1cmU8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgIFtzcmNdPVwiKHJlY3Rhbmd1bGFySW1hZ2UgIT09IG51bGwgJiYgIXJlY3Rhbmd1bGFySW1hZ2U/LmluY2x1ZGVzKCdkZWZhdWx0LXBob3RvLmpwZycpKSA/IHJlY3Rhbmd1bGFySW1hZ2UgOiAnYXNzZXRzL2ltZy9yZXNvdXJjZS9ibG9nLnBuZydcIlxuICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib3BlblJlY3RNb2RhbChyZWN0Q29udGVudClcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5SZWN0TW9kYWwocmVjdENvbnRlbnQpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW1hZ2UgcmVjLWltZ1wiXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICd3LTEwMCc6IHJlY3Rhbmd1bGFySW1hZ2UgPT09IG51bGwgfHwgcmVjdGFuZ3VsYXJJbWFnZT8uaW5jbHVkZXMoJ2RlZmF1bHQtcGhvdG8uanBnJykgfVwiXG4gICAgICAgICAgICAgICAgICBhbHQ9XCJVcGxvYWRlZCByZWN0YW5ndWxhciBtZWRpYSBwcmV2aWV3XCJcbiAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJoYW5kbGVJbWFnZUVycm9yKCRldmVudCwgJ2Fzc2V0cy9pbWcvcmVzb3VyY2UvYmxvZy5wbmcnKVwiIC8+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtdC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZC1pbmxpbmUtYmxvY2tcIiAoY2xpY2spPVwib3BlblJlY3RNb2RhbChyZWN0Q29udGVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBzbHVnICE9PSAnY3JlYXRlJyA/ICdFZGl0JyA6ICdBZGQnIH19IFBpY3R1cmVcbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmEgZmEtdHJhc2ggZGVsZXRlLWljb24gdGV4dC1kYW5nZXIgbXMtMiBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJSZW1vdmUgSW1hZ2VcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVSZWN0YW5ndWxhckltYWdlKClcIlxuICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cImRlbGV0ZVJlY3Rhbmd1bGFySW1hZ2UoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJyZWN0YW5ndWxhckltYWdlICYmICFyZWN0YW5ndWxhckltYWdlLmluY2x1ZGVzKCdkZWZhdWx0LXBob3RvLmpwZycpXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvaT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidSZXNvdXJjZS5Qb3N0cy5DdGFUZXh0JyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGNvbC1tZC02XCJcbiAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ1Jlc291cmNlLlBvc3RzLlRvb2x0aXAuQ3RhVGV4dCcgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICBuYW1lPVwiY3RhX3RleHRcIj5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY3RhX3RleHRcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsndGl0bGUnXS5lcnJvcnMgfVwiIC8+XG4gICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbbGFiZWxdPVwiJ1Jlc291cmNlLlBvc3RzLkV4dGVybmFsVXJsJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGNvbC1tZC02XCJcbiAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ1Jlc291cmNlLlBvc3RzLlRvb2x0aXAuRXh0ZXJuYWxVcmwnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgbmFtZT1cImV4dGVybmFsX3VybFwiPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJleHRlcm5hbF91cmxcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnZXh0ZXJuYWxfdXJsJ10uZXJyb3JzIH1cIiAvPlxuICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW2xhYmVsXT1cIidSZXNvdXJjZS5Qb3N0cy5UYWdzJyB8IHRyYW5zbG9jbyBcIiBjbGFzcz1cInVpLWZsdWlkIHNraWxscy1tb2RhbCBjb2wtMTIgY29sLW1kLTYgY29sLXNtLTEyIHRhZ3NcIlxuICAgICAgICAgICAgICBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiIFt0b29sdGlwVGV4dF09XCInUmVzb3VyY2UuUG9zdHMuVG9vbHRpcC5DdGFUZXh0JyB8IHRyYW5zbG9jb1wiIG5hbWU9XCJjdGFfdGV4dFwiPlxuICAgICAgICAgICAgICA8cC1hdXRvQ29tcGxldGUgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFRhZ3NcIiBjbGFzcz1cImJvZHktYmdcIiBbc3VnZ2VzdGlvbnNdPVwidGFnc1N1Z2dlc3Rpb25cIiBkYXRhS2V5PVwiaWRcIiBmaWVsZD1cIm5hbWVcIlxuICAgICAgICAgICAgICAgIChjb21wbGV0ZU1ldGhvZCk9XCJzZWFyY2goJGV2ZW50KVwiIHN0eWxlQ2xhc3M9XCJ3LTEwMFwiIFttaW5MZW5ndGhdPVwiMVwiIFttYXhsZW5ndGhdPVwiMTBcIiBbZHJvcGRvd25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCIgcGxhY2Vob2xkZXI9XCJUYWdzXCIgW211bHRpcGxlXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgPC9wLWF1dG9Db21wbGV0ZT5cbiAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInQXV0aG9yJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGNvbC1tZC00IGNvbC1zbS02XCJcbiAgICAgICAgICAgICAgbmFtZT1cImF1dGhvcl9pZFwiXG4gICAgICAgICAgICAgIFtlcnJvck1zZ109XCInUGxlYXNlIHNlbGVjdCBhbiBhdXRob3InIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICAgIDxwLWRyb3Bkb3duXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYXV0aG9yX2lkXCJcbiAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJhdmFpbGFibGVBdXRob3JzXCJcbiAgICAgICAgICAgICAgICBvcHRpb25MYWJlbD1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICBvcHRpb25WYWx1ZT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ1NlbGVjdCBBdXRob3InIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICBbbG9hZGluZ109XCJhdXRob3JzTG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydhdXRob3JfaWQnXS5lcnJvcnMgfVwiXG4gICAgICAgICAgICAgICAgc3R5bGVDbGFzcz1cInctMTAwXCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cIml0ZW1cIiBsZXQtYXV0aG9yPlxuICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj57eyBhdXRob3IubGFiZWwgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvcC1kcm9wZG93bj5cbiAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuXG5cbiAgICAgICAgICAgIDwhLS0gV0hFTiBhbmQgQVVUSE9SIG9uIHNhbWUgbGluZSAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTIgY29sLXNtLTZcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtsYWJlbF09XCInUmVzb3VyY2UuUG9zdHMuV2hlbicgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidSZXNvdXJjZS5Qb3N0cy5Ub29sdGlwLldoZW4nIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJ3aGVuXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8cC1jYWxlbmRhciBmb3JtQ29udHJvbE5hbWU9XCJ3aGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc2hvd0ljb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgZGF0ZUZvcm1hdD1cImRkLU0teXlcIlxuICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInU2VsZWN0IERhdGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnd2hlbiddLmVycm9yc31cIj5cbiAgICAgICAgICAgICAgICAgICAgPC9wLWNhbGVuZGFyPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gQXV0aG9yIERyb3Bkb3duIC0tPlxuICAgICAgICAgICAgPCEtLSBUaHJlZSB0b2dnbGVzIG9uIG5leHQgbGluZSAtLT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgY29sLW1kLTIgY29sLXNtLTZcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIiBbdG9vbHRpcFRleHRdPVwiJ1Jlc291cmNlLlBvc3RzLlRvb2x0aXAuU2hvd0Nhc2UnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiJ1Jlc291cmNlLlBvc3RzLlNob3dDYXNlJyB8IHRyYW5zbG9jb1wiIG5hbWU9XCJzaG93Y2FzZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx1aS1zd2l0Y2ggY2xhc3M9XCJkLWJsb2NrXCIgZm9ybUNvbnRyb2xOYW1lPVwic2hvd2Nhc2VcIiBuYW1lPVwic2hvd2Nhc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8L3VpLXN3aXRjaD5cbiAgICAgICAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwhLS1QdWJsaXNoZWQgQXQgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtMiBjb2wtc20tNlwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidSZXNvdXJjZS5Qb3N0cy5Ub29sdGlwLlB1Ymxpc2hlZCcgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInUmVzb3VyY2UuUG9zdHMuUHVibGlzaGVkJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInB1Ymxpc2hlZF9hdFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDx1aS1zd2l0Y2ggY2xhc3M9XCJkLWJsb2NrXCJcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJwdWJsaXNoZWRfYXRcIlxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJwdWJsaXNoZWRfYXRcIj5cbiAgICAgICAgICAgICAgICAgICAgPC91aS1zd2l0Y2g+XG4gICAgICAgICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8IS0tQWNjZXB0ZWQgQXQgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBjb2wtbWQtMiBjb2wtc20tNiBhY2NlcHQtaWNvblwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBUZXh0XT1cIidSZXNvdXJjZS5Qb3N0cy5Ub29sdGlwLkFjY2VwdGVkQnlBZG1pbicgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInUmVzb3VyY2UuUG9zdHMuQWNjZXB0ZWRCeUFkbWluJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImFjY2VwdGVkX2F0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHVpLXN3aXRjaCBjbGFzcz1cImQtYmxvY2tcIlxuICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImFjY2VwdGVkX2F0XCJcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiYWNjZXB0ZWRfYXRcIj5cbiAgICAgICAgICAgICAgICAgICAgPC91aS1zd2l0Y2g+XG4gICAgICAgICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHRleHQtZW5kIG10LTRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1kZWZhdWx0IG1lLTJcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVRvUmVzb3VyY2VMaXN0KClcIj5cbiAgICAgICAgICAgICAgICB7eyAnQnV0dG9uLkNhbmNlbCcgfCB0cmFuc2xvY28gfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICAgICAgW2J1dHRvbkJ1c3ldPVwic3VibWl0dGVkXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiPlxuICAgICAgICAgICAgICAgIHt7ICdCdXR0b24uU3VibWl0JyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Zvcm0+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuXG48bmctdGVtcGxhdGUgI2NvbnRlbnRcbiAgbGV0LW1vZGFsPlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5VcGxvYWQgUGljdHVyZTwvaDU+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiYnRuLWNsb3NlIGZsb2F0LWVuZFwiXG4gICAgICBhcmlhLWxhYmVsPVwiQ2xvc2VcIlxuICAgICAgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxuXG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgIDxzbWFsbD5Zb3UgY2FuIHVwbG9hZCBhIEpQRywgR0lGLCBvciBQTkcgZmlsZS4gKERvIG5vdCB1cGxvYWQgcGljdHVyZXMgY29udGFpbmluZyBjZWxlYnJpdGllcyxcbiAgICAgIG51ZGl0eSwgYXJ0d29yayBvciBjb3B5cmlnaHRlZCBpbWFnZXMuKTwvc21hbGw+XG4gICAgPHB3LWltYWdlLWNyb3BwZXIgI3Byb2ZpbGVcbiAgICAgIGFzcGVjdFJhdGlvPVwiYXV0b1wiXG4gICAgICAoaW1hZ2VTZWxlY3Rpb25FdmVudCk9XCJvbkltYWdlU2VsZWN0aW9uKCRldmVudClcIlxuICAgICAgKGNsb3NlRXZlbnQpPVwib25DbG9zZSgpXCI+XG4gICAgPC9wdy1pbWFnZS1jcm9wcGVyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjcmVjdENvbnRlbnQgbGV0LW1vZGFsPlxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgPGg1IGNsYXNzPVwibW9kYWwtdGl0bGVcIj5VcGxvYWQgUGljdHVyZTwvaDU+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwiYnRuLWNsb3NlIGZsb2F0LWVuZFwiXG4gICAgICBhcmlhLWxhYmVsPVwiQ2xvc2VcIlxuICAgICAgKGNsaWNrKT1cIm1vZGFsLmRpc21pc3MoKVwiPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgIDxzbWFsbD5cbiAgICAgIFlvdSBjYW4gdXBsb2FkIGEgSlBHLCBHSUYsIG9yIFBORyBmaWxlLiAoRG8gbm90IHVwbG9hZCBwaWN0dXJlcyBjb250YWluaW5nIGNlbGVicml0aWVzLFxuICAgICAgbnVkaXR5LCBhcnR3b3JrIG9yIGNvcHlyaWdodGVkIGltYWdlcy4pXG4gICAgPC9zbWFsbD5cblxuXG4gICAgPHB3LWltYWdlLWNyb3BwZXJcbiAgICAgICNwcm9maWxlXG4gICAgICBbYXNwZWN0UmF0aW9dPVwiJ2R5bmFtaWMnXCJcbiAgICAgIFtkeW5hbWljRGF0YV09XCJnZXRBc3BlY3RSYXRpbygpXCJcbiAgICAgIChpbWFnZVNlbGVjdGlvbkV2ZW50KT1cIm9uUmVjdGFuZ3VsYXJJbWFnZVNlbGVjdGlvbigkZXZlbnQpXCJcbiAgICAgIChjbG9zZUV2ZW50KT1cIm9uQ2xvc2UoKVwiPlxuICAgIDwvcHctaW1hZ2UtY3JvcHBlcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19