@posiwise/admin-module 0.0.81 → 0.0.83

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.
Files changed (35) hide show
  1. package/esm2022/lib/admin-module.routing.mjs +3 -3
  2. package/esm2022/lib/components/TOS/terms-of-service/terms-of-service.component.mjs +3 -3
  3. package/esm2022/lib/components/config/global-config-list/global-config-list.component.mjs +3 -3
  4. package/esm2022/lib/components/contact-us/contact-us-list/contact-us-list.component.mjs +3 -3
  5. package/esm2022/lib/components/credentials/credentials/credentials.component.mjs +3 -3
  6. package/esm2022/lib/components/credentials/subscription-credentials/subscription-credentials.component.mjs +3 -3
  7. package/esm2022/lib/components/domain-config/domain-config-list/domain-config-list.component.mjs +3 -3
  8. package/esm2022/lib/components/faqs/faqs-list/faqs-list.component.mjs +4 -3
  9. package/esm2022/lib/components/feedback-questions/feedback-questions-list/feedback-questions-list.component.mjs +3 -3
  10. package/esm2022/lib/components/incidents/add-edit-incident/add-edit-incident.component.mjs +57 -53
  11. package/esm2022/lib/components/incidents/incidents-list/incidents-list.component.mjs +3 -3
  12. package/esm2022/lib/components/login-notifications/login-notifications-list/login-notifications-list.component.mjs +3 -3
  13. package/esm2022/lib/components/newsletters/newsletter-users-list/newsletter-users-list.component.mjs +3 -3
  14. package/esm2022/lib/components/newsletters/newsletters-items/newsletters-items.component.mjs +3 -3
  15. package/esm2022/lib/components/newsletters/newsletters-list/newsletters-list.component.mjs +3 -3
  16. package/esm2022/lib/components/products/products-list/products-list.component.mjs +3 -3
  17. package/esm2022/lib/components/products/users-list-for-product/users-list-for-product.component.mjs +3 -3
  18. package/esm2022/lib/components/subscriptions/subscription-agents-list/subscription-agents-list.component.mjs +3 -3
  19. package/esm2022/lib/components/subscriptions/subscription-products/subscription-products.component.mjs +3 -3
  20. package/esm2022/lib/components/subscriptions/subscription-users/subscription-users.component.mjs +3 -3
  21. package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-nps/subscription-insight-nps.component.mjs +3 -3
  22. package/esm2022/lib/components/subscriptions/subscriptions-list/subscriptions-list.component.mjs +3 -3
  23. package/esm2022/lib/components/tags/tags-list/tags-list.component.mjs +3 -3
  24. package/esm2022/lib/components/tips/tips-list/tips-list.component.mjs +3 -3
  25. package/esm2022/lib/components/tracking/ahoy-events/ahoy-events.component.mjs +9 -8
  26. package/esm2022/lib/components/tracking/ahoy-messages/ahoy-messages.component.mjs +9 -10
  27. package/esm2022/lib/components/tracking/ahoy-visits/ahoy-visits.component.mjs +8 -9
  28. package/esm2022/lib/components/tracking/events/events.component.mjs +8 -9
  29. package/esm2022/lib/components/tracking/versions/versions.component.mjs +10 -7
  30. package/esm2022/lib/components/users/users-list/users-list.component.mjs +3 -3
  31. package/esm2022/lib/shared/routers/routers.mjs +2 -2
  32. package/fesm2022/posiwise-admin-module.mjs +122 -121
  33. package/fesm2022/posiwise-admin-module.mjs.map +1 -1
  34. package/lib/components/tracking/versions/versions.component.d.ts +1 -0
  35. package/package.json +1 -1
@@ -71,6 +71,7 @@ export class FaqListComponent extends AppBaseComponent {
71
71
  feature_key: this.selectedFeatureKeys.join(',') || ''
72
72
  };
73
73
  this.commonService.getFaq(params).subscribe(response => {
74
+ console.log('response', response);
74
75
  this.isLoaded = true;
75
76
  this.faqs = response.faqs;
76
77
  this.allFaqs = response.faqs;
@@ -283,13 +284,13 @@ export class FaqListComponent extends AppBaseComponent {
283
284
  super.ngOnDestroy();
284
285
  }
285
286
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: FaqListComponent, deps: [{ token: i1.CommonService }, { token: i2.AdminService }, { token: i1.ProductService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
286
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: FaqListComponent, selector: "pw-admin-faq-list", viewQueries: [{ propertyName: "editForm", first: true, predicate: ["editForm"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"row\" [class.custom-disable-wrapper]=\"buttonBusy\">\n <div class=\"col-12 d-flex flex-wrap justify-content-between align-items-center\"\n *ngIf=\"showList\">\n <h2 class=\"card-title p-0 float-start\">Frequently Asked Questions</h2>\n <a href=\"javascript:void(0)\" *ngIf=\"showList\" (click)=\"showList = !showList\"\n class=\"btn btn-sm btn-outline-primary float-end\" role=\"button\" aria-expanded=\"false\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> {{ 'Label.AddNew' | transloco }} FAQ </a>\n </div>\n</div>\n<!-- Add FAQ Section -->\n<div *ngIf=\"!showList\" [class.custom-disable-wrapper]=\"buttonBusy\" class=\"p-2\">\n <div class=\"row\">\n <div class=\"col-12\">\n <h4 class=\"fw-bold mb-4\">{{ 'Label.AddNew' | transloco }} FAQ</h4>\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\">\n <div class=\"row\">\n <pw-input-container class=\"col-12\" [label]=\"'Admin.Faq.Question' | transloco\" name=\"question\"\n [errorMsg]=\"'Admin.Faq.Validation.FieldRequired' | transloco\">\n <input type=\"text\" formControlName=\"question\" class=\"form-control\"\n [ngClass]=\"{ 'is-invalid': submitted && f['question'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"row\">\n <pw-input-container class=\"col-12 quill-editor\"\n [label]=\"'Admin.Faq.Answer' | transloco\"\n name=\"answer\"\n [errorMsg]=\"'Admin.Faq.Validation.FieldRequired' | transloco\">\n <quill-editor [styles]=\"{ height: '200px'}\" formControlName=\"answer\" class=\"quillEditor\"\n [ngClass]=\"{ 'is-invalid': submitted && f['answer'].errors }\">\n </quill-editor>\n </pw-input-container>\n </div>\n <div class=\"row justify-content-between\">\n <div class=\"col-lg-2\">\n <pw-input-container [showTooltip]=\"true\" [tooltipText]=\"'Admin.Faq.Tooltip.Category' | transloco\"\n [label]=\"'Admin.Faq.Category' | transloco\" name=\"category\"\n [errorMsg]=\"'Admin.Faq.Validation.FieldRequired' | transloco\">\n <p-dropdown [options]=\"categories\" class=\"dropdown-bg-transparent\" (onChange)=\"onChange($event)\"\n placeholder=\"Select\" formControlName=\"category\" id=\"category-dropdown\" [style]=\"{ width: '100%' }\">\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-lg-2\" *rbacAllow=\"'SubscriptionSuperAdmin'\">\n <pw-input-container [showTooltip]=\"true\" [tooltipText]=\"'Admin.Faq.Tooltip.Product' | transloco\"\n [label]=\"'Admin.Faq.Product' | transloco\" name=\"product_id\"\n [errorMsg]=\"'Admin.Faq.Validation.FieldRequired' | transloco\">\n <p-dropdown [options]=\"productList\" class=\"dropdown-bg-transparent\" formControlName=\"product_id\"\n [style]=\"{ width: '100%' }\">\n </p-dropdown>\n </pw-input-container>\n </div>\n <!-- Features keys-->\n <div class=\"col-lg-2\">\n <pw-input-container [showTooltip]=\"true\" [tooltipText]=\"'Admin.Faq.Tooltip.Features' | transloco\"\n [label]=\"'Admin.Faq.Features' | transloco\" name=\"feature_keys\">\n <p-multiSelect [options]=\"featureKeysList\" placeholder=\"Select feature keys\" [showHeader]=\"true\"\n [showToggleAll]=\"true\" formControlName=\"feature_keys\" appendTo=\"body\"></p-multiSelect>\n </pw-input-container>\n </div>\n <div class=\"col-lg-2\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\" [tooltipText]=\"'Admin.Faq.Tooltip.Position' | transloco\"\n [label]=\"'Admin.Faq.Position' | transloco\" name=\"position\"\n [errorMsg]=\"'Admin.Faq.Validation.FieldRequired' | transloco\">\n <div class=\"position\">\n <input type=\"number\" min=\"0\" formControlName=\"position\" class=\"form-control\" />\n </div>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-4 col-lg-2\">\n <label>{{ 'Admin.Faq.Visible' | transloco}} <span class=\"tooltip-wrap\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Visible' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch formControlName=\"visible\"></ui-switch>\n </div>\n <div class=\"col-4 col-lg-2\">\n <label>{{ 'Admin.Faq.Public' | transloco}} <span class=\"tooltip-wrap\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Public' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch formControlName=\"public\"></ui-switch>\n </div>\n </div>\n <div class=\"row\" *rbacAllow=\"'SuperAdmin'\">\n <div class=\"col-4 col-lg-2\">\n <label class=\"text-warning\">{{ 'Admin.Faq.SharedFaq' | transloco}} <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\" [pTooltip]=\"'Admin.Faq.Tooltip.SharedFaq' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch name=\"is_shared_faq\" formControlName=\"is_shared_faq\"></ui-switch>\n </div>\n <div class=\"col-4 col-lg-2\">\n <label class=\"text-warning\">{{ 'Admin.Faq.AdminFaq' | transloco}} <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\" [pTooltip]=\"'Admin.Faq.Tooltip.AdminFaq' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch formControlName=\"is_admin_faq\" name=\"is_admin_faq\"></ui-switch>\n </div>\n <div class=\"col-4 col-lg-2\">\n <label class=\"text-warning\">{{ 'Admin.Faq.BuildFaq' | transloco}} <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\" [pTooltip]=\"'Admin.Faq.Tooltip.BuildFaq' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch formControlName=\"is_build_faq\" name=\"is_build_faq\"></ui-switch>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-12 mt-4\">\n <div class=\"mb-3 text-end\">\n <button type=\"button\" class=\"btn btn-outline-default me-2\" data-bs-toggle=\"collapse\" href=\"#faqCollapse\"\n role=\"button\" aria-expanded=\"false\" aria-controls=\"faqCollapse\" (click)=\"\n form.reset(); showList = !showList; isProductEnabled = true\n \"> {{ 'Button.Cancel' | transloco }} </button>\n <button class=\"btn btn-primary\" [buttonBusy]=\"buttonBusy\">{{ 'Button.Save' | transloco }}</button>\n </div>\n </div>\n </div>\n </form>\n </div>\n </div>\n</div>\n<!-- FAQ List/Edit -->\n<div class=\"row faqlist primeng-datatable-container mt-0\" *ngIf=\"showList\" [class.custom-disable-wrapper]=\"buttonBusy\">\n <div class=\"col-12 px-0\">\n <div class=\"w-100 text-center mt-3\" *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <p-table [value]=\"faqs\" [class.hideTable]=\"faqs.length === 0\">\n <ng-template pTemplate=\"caption\">\n <div class=\"search-filter\">\n <div class=\"col-sm-4\">\n <p-multiSelect [showToggleAll]=\"true\" [options]=\"featureKeysList\" (onChange)=\"onProductChange($event)\"\n placeholder=\"Search by Feature keys\" [showHeader]=\"true\" maxSelectedLabels=\"2\" appendTo=\"body\">\n </p-multiSelect>\n </div>\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\" [(ngModel)]=\"searchText\" pInputText size=\"50\" placeholder=\"Search FAQ...\"\n (input)=\"filterFaq()\" class=\"mw-90\" />\n </div>\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Admin.Faq.Question' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Faq.Answer' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Faq.Position' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Faq.Category' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Faq.Visible' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Faq.Public' | transloco }}</th>\n <th scope=\"true\" class=\"actions-list-two\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-faq>\n <tr>\n <td data-head=\"Question\">{{ faq.question }} </td>\n <td data-head=\"Answer\">{{(faq.answer|removeHtml)|textTruncate: 200}} </td>\n <td data-head=\"Position\">{{faq.position}}</td>\n <td data-head=\"Category\">\n <span [appDynamicBadge]=\"{ itemsArray: categoryForBadges, item: faq?.category }\" color=\"cyan\"\n class=\"badge ms-1\">\n <span [pTooltip]=\"faq?.feature_keys?.join(',')\" tooltipPosition=\"top\">{{ faqHashMap[faq?.category]?.name\n }}</span>\n </span>\n <span class=\"ms-1 badge bg-warning\" *ngIf=\"faq.is_shared_faq || faq.is_admin_faq || faq.is_build_faq\">Super\n FAQ</span>\n </td>\n <td data-head=\"Visible\">\n <span [appDynamicBadge]=\"{ itemsArray: [true, false], item: faq?.visible }\" color=\"success-danger\"\n class=\"badge\">{{ faq?.visible }}</span>\n </td>\n <td data-head=\"Public\">\n <span [appDynamicBadge]=\"{ itemsArray: [true, false], item: faq?.public }\" color=\"success-danger\"\n class=\"badge\">{{ faq?.public }}</span>\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <li ngbTooltip=\"Edit\" class=\"me-2 me-sm-2\">\n <i class=\"fa fa-edit edit-icon\" (click)=\"onEdit(faq)\" aria-hidden=\"true\"></i>\n </li>\n <li ngbTooltip=\"Delete\" class=\"me-2 me-sm-2\">\n <i class=\"fa fa-trash delete-icon\" (click)=\"onDelete(faq)\" aria-hidden=\"true\"></i>\n </li>\n <li ngbTooltip=\"View faq\" *ngIf=\"faq?.visible\">\n <a [routerLink]=\"['/',slug,'faq',faq.id]\" target=\"_blank\">\n <i class=\"fa fa-eye\" aria-hidden=\"true\"></i>\n </a>\n </li>\n </ul>\n </td>\n </tr>\n <tr *ngIf=\"faq.isEdit\">\n <td colspan=\"7\">\n <form (ngSubmit)=\"onSubmit()\"\n #editForm=\"ngForm\">\n <div class=\"mb-3\">\n <label for=\"name\">{{ 'Admin.Faq.Question' | transloco }}</label>\n <input type=\"text\" class=\"form-control\" required [(ngModel)]=\"currentFaq.question\" name=\"question\"\n #question=\"ngModel\" />\n <small class=\"form-text text-muted danger\"\n *ngIf=\"!question.valid && (question.dirty || question.touched)\"> Please enter a question</small>\n </div>\n <div class=\"mb-3\">\n <label>{{ 'Admin.Faq.Answer' | transloco }}</label>\n <quill-editor [styles]=\"{ height: '200px' }\" [(ngModel)]=\"currentFaq.answer\" name=\"answer\" required\n #answer=\"ngModel\"></quill-editor>\n <small class=\"form-text text-muted danger\" *ngIf=\"!answer.valid && (answer.dirty || answer.touched)\">\n Please enter an answer</small>\n </div>\n <div class=\"row no-gutters justify-content-between\">\n <div class=\"col-lg-2\">\n <label>{{ 'Admin.Faq.Category' | transloco}} <span class=\"tooltip-wrap\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Category' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <p-dropdown [options]=\"categories\" name=\"category\" [required]=\"true\" [(ngModel)]=\"currentFaq.category\"\n (onChange)=\"onChange($event)\" [style]=\"{ width: '100%' }\" class=\"custom-dropdown\">\n </p-dropdown>\n </div>\n <div class=\"col-lg-2\" *rbacAllow=\"'SubscriptionSuperAdmin'\">\n <label>{{ 'Admin.Faq.Product' | transloco}} <span class=\"tooltip-wrap\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Product' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <p-dropdown [options]=\"productList\" name=\"product_id\" [(ngModel)]=\"currentFaq.product_id\"\n [style]=\"{ width: '100%' }\" class=\"custom-dropdown\">\n </p-dropdown>\n </div>\n <!-- feature keys -->\n <div class=\"col-lg-2\">\n <div class=\"mb-3\">\n <label for=\"\">{{ 'Admin.Faq.Features' | transloco }} <span class=\"tooltip-wrap\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Features' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label>\n <p-multiSelect [options]=\"featureKeysList\" [showHeader]=\"true\" [showToggleAll]=\"true\"\n [(ngModel)]=\"currentFaq.feature_keys\" [ngModelOptions]=\"{ standalone: true }\"\n appendTo=\"body\"></p-multiSelect>\n </div>\n </div>\n <div class=\"col-lg-2\">\n <label for=\"\">{{ 'Admin.Faq.Position' | transloco }} <span class=\"tooltip-wrap\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Position' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label>\n <input type=\"number\" name=\"position\" class=\"form-control\" required\n [(ngModel)]=\"currentFaq.position\" />\n </div>\n <div class=\"col-4 col-lg-1\">\n <label>{{ 'Admin.Faq.Visible' | transloco}} <span class=\"tooltip-wrap \" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Visible' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label>\n <div>\n <ui-switch class=\"visible\" [checked]=\"currentFaq.visible\"\n (valueChange)=\"onValueChange(currentFaq, $event)\">\n </ui-switch>\n </div>\n </div>\n <div class=\"col-4 col-lg-1\">\n <label>{{ 'Admin.Faq.Public' | transloco}} <span class=\"tooltip-wrap\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Public' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label>\n <div>\n <ui-switch class=\"public\" [checked]=\"currentFaq.public\"\n (valueChange)=\"onPublicValueChange(currentFaq, $event)\">\n </ui-switch>\n </div>\n </div>\n </div>\n <div class=\"row\" *rbacAllow=\"'SuperAdmin'\">\n <div class=\"col-4 col-lg-2\">\n <label class=\"text-warning\">{{ 'Admin.Faq.SharedFaq' | transloco}} <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\" [pTooltip]=\"'Admin.Faq.Tooltip.SharedFaq' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch [checked]=\"currentFaq.is_shared_faq\" name=\"is_shared_faq\"\n [(ngModel)]=\"currentFaq.is_shared_faq\"></ui-switch>\n </div>\n <div class=\"col-4 col-lg-2\">\n <label class=\"text-warning\">{{ 'Admin.Faq.AdminFaq' | transloco}} <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\" [pTooltip]=\"'Admin.Faq.Tooltip.AdminFaq' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch [checked]=\"currentFaq.is_admin_faq\" name=\"is_admin_faq\"\n [(ngModel)]=\"currentFaq.is_admin_faq\"></ui-switch>\n </div>\n <div class=\"col-4 col-lg-2\">\n <label class=\"text-warning\">{{ 'Admin.Faq.BuildFaq' | transloco}} <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\" [pTooltip]=\"'Admin.Faq.Tooltip.BuildFaq' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch [checked]=\"currentFaq.is_build_faq\" name=\"is_build_faq\"\n [(ngModel)]=\"currentFaq.is_build_faq\"></ui-switch>\n </div>\n </div>\n </form>\n <div class=\"text-end\">\n <ng-container *rbacAllow=\"'Pages.Admin.FAQ.Delete'\">\n <button class=\"btn btn-outline-danger me-2\" *ngIf=\"!faq.isEdit\" (click)=\"onDelete(faq)\"> Delete\n </button>\n </ng-container>\n <button class=\"btn btn-outline-default me-2\" *ngIf=\"faq.isEdit\" data-bs-toggle=\"collapse\"\n data-bs-target=\"#collapseEdit\" aria-expanded=\"false\" aria-controls=\"collapseEdit\"\n (click)=\"faq.isEdit = !faq.isEdit; onCancel()\"> {{ 'Button.Cancel' | transloco }} </button>\n <ng-container *rbacAllow=\"'Pages.Admin.FAQ.Edit'\">\n <button class=\"btn btn-primary me-2\" *ngIf=\"!faq.isEdit\" (click)=\"onEdit(faq)\"> {{ 'Button.Edit' |\n transloco }} </button>\n <button class=\"btn btn-primary me-2\" [buttonBusy]=\"buttonBusy\" *ngIf=\"faq.isEdit\"\n (click)=\"onUpdate(currentFaq)\"> {{ 'Button.Update' | transloco }} </button>\n </ng-container>\n </div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage' | transloco\"\n [description]=\"'Search.NoDataDescription' | transloco\" *ngIf=\"totalRecordsUnFiltered === 0\"> </pw-no-data>\n </div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Admin.Faq.NoDataMessage' | transloco\" *ngIf=\"faqs.length === 0\">\n </pw-no-data>\n</div>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.faq-item{background-color:#eee;border:1px dashed rgba(0,0,0,.1);border-radius:3px;margin-top:10px;transition:all .2s ease-in-out}.faq-item h5{padding:0 15px 0 0;position:relative}.faq-item h5 a:before{position:absolute;right:-24px;top:3px}input.warning{border-color:red}@media only screen and (max-width: 1024px){.faq-item h5 a{font-size:16px}.faq-item button.btn{font-size:14px}.panel-collapse .card-block{font-size:14px;margin-bottom:20px;padding:0 8px}}.actions{min-width:80px}@media only screen and (max-width: 768px){.faq-item h5 a{font-size:14px}.faq-item button.btn,.panel-collapse .card-block{font-size:12px}}.tooltip-wrap{vertical-align:top}.custom-dropdown,.custom-multiselect{position:absolute!important;width:inherit!important;z-index:9999!important}.p-dropdown-items-wrapper{max-height:142px}.fa-eye{font-size:15px}quill-editor,[_nghost-ng-c3617506782]{display:block!important}.quill-editor label{display:block}\n"], dependencies: [{ kind: "component", type: i3.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { 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.MultiSelect, selector: "p-multiSelect", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "directive", type: i8.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i10.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: i10.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i10.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i10.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i10.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i11.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: "directive", type: i12.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i13.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i14.InputContainerComponent, selector: "pw-input-container", inputs: ["name", "label", "labelClass", "tooltipPosition", "required", "errorMsg", "isReadOnly", "showTooltip", "tooltipText", "showTriangle", "afterLabel", "showAfterLabel", "showTriangleText"] }, { kind: "component", type: i14.NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "directive", type: i15.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "directive", type: i15.DynamicBadgeDirective, selector: "[appDynamicBadge]", inputs: ["appDynamicBadge", "color"] }, { kind: "directive", type: i15.RbacAllowDirective, selector: "[rbacAllow]", inputs: ["rbacAllow"] }, { kind: "directive", type: i16.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i10.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i10.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i17.QuillEditorComponent, selector: "quill-editor" }, { kind: "pipe", type: i18.TranslocoPipe, name: "transloco" }, { kind: "pipe", type: i19.RemoveHtmlPipe, name: "removeHtml" }, { kind: "pipe", type: i19.TextTruncatePipe, name: "textTruncate" }] }); }
287
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: FaqListComponent, selector: "pw-admin-faq-list", viewQueries: [{ propertyName: "editForm", first: true, predicate: ["editForm"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"row\" [class.custom-disable-wrapper]=\"buttonBusy\">\n <div class=\"col-12 d-flex flex-wrap justify-content-between align-items-center\"\n *ngIf=\"showList\">\n <h2 class=\"card-title p-0 float-start\">Frequently Asked Questions</h2>\n <a href=\"javascript:void(0)\" *ngIf=\"showList\" (click)=\"showList = !showList\"\n class=\"btn btn-sm btn-outline-primary float-end\" role=\"button\" aria-expanded=\"false\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> {{ 'Label.AddNew' | transloco }} FAQ </a>\n </div>\n</div>\n<!-- Add FAQ Section -->\n<div *ngIf=\"!showList\" [class.custom-disable-wrapper]=\"buttonBusy\" class=\"p-2\">\n <div class=\"row\">\n <div class=\"col-12\">\n <h4 class=\"fw-bold mb-4\">{{ 'Label.AddNew' | transloco }} FAQ</h4>\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\">\n <div class=\"row\">\n <pw-input-container class=\"col-12\" [label]=\"'Admin.Faq.Question' | transloco\" name=\"question\"\n [errorMsg]=\"'Admin.Faq.Validation.FieldRequired' | transloco\">\n <input type=\"text\" formControlName=\"question\" class=\"form-control\"\n [ngClass]=\"{ 'is-invalid': submitted && f['question'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"row\">\n <pw-input-container class=\"col-12 quill-editor\"\n [label]=\"'Admin.Faq.Answer' | transloco\"\n name=\"answer\"\n [errorMsg]=\"'Admin.Faq.Validation.FieldRequired' | transloco\">\n <quill-editor [styles]=\"{ height: '200px'}\" formControlName=\"answer\" class=\"quillEditor\"\n [ngClass]=\"{ 'is-invalid': submitted && f['answer'].errors }\">\n </quill-editor>\n </pw-input-container>\n </div>\n <div class=\"row justify-content-between\">\n <div class=\"col-lg-2\">\n <pw-input-container [showTooltip]=\"true\" [tooltipText]=\"'Admin.Faq.Tooltip.Category' | transloco\"\n [label]=\"'Admin.Faq.Category' | transloco\" name=\"category\"\n [errorMsg]=\"'Admin.Faq.Validation.FieldRequired' | transloco\">\n <p-dropdown [options]=\"categories\" class=\"dropdown-bg-transparent\" (onChange)=\"onChange($event)\"\n placeholder=\"Select\" formControlName=\"category\" id=\"category-dropdown\" [style]=\"{ width: '100%' }\">\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-lg-2\" *rbacAllow=\"'SubscriptionSuperAdmin'\">\n <pw-input-container [showTooltip]=\"true\" [tooltipText]=\"'Admin.Faq.Tooltip.Product' | transloco\"\n [label]=\"'Admin.Faq.Product' | transloco\" name=\"product_id\"\n [errorMsg]=\"'Admin.Faq.Validation.FieldRequired' | transloco\">\n <p-dropdown [options]=\"productList\" class=\"dropdown-bg-transparent\" formControlName=\"product_id\"\n [style]=\"{ width: '100%' }\">\n </p-dropdown>\n </pw-input-container>\n </div>\n <!-- Features keys-->\n <div class=\"col-lg-2\">\n <pw-input-container [showTooltip]=\"true\" [tooltipText]=\"'Admin.Faq.Tooltip.Features' | transloco\"\n [label]=\"'Admin.Faq.Features' | transloco\" name=\"feature_keys\">\n <p-multiSelect [options]=\"featureKeysList\" placeholder=\"Select feature keys\" [showHeader]=\"true\"\n [showToggleAll]=\"true\" formControlName=\"feature_keys\" appendTo=\"body\"></p-multiSelect>\n </pw-input-container>\n </div>\n <div class=\"col-lg-2\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\" [tooltipText]=\"'Admin.Faq.Tooltip.Position' | transloco\"\n [label]=\"'Admin.Faq.Position' | transloco\" name=\"position\"\n [errorMsg]=\"'Admin.Faq.Validation.FieldRequired' | transloco\">\n <div class=\"position\">\n <input type=\"number\" min=\"0\" formControlName=\"position\" class=\"form-control\" />\n </div>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-4 col-lg-2\">\n <label>{{ 'Admin.Faq.Visible' | transloco}} <span class=\"tooltip-wrap\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Visible' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch formControlName=\"visible\"></ui-switch>\n </div>\n <div class=\"col-4 col-lg-2\">\n <label>{{ 'Admin.Faq.Public' | transloco}} <span class=\"tooltip-wrap\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Public' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch formControlName=\"public\"></ui-switch>\n </div>\n </div>\n <div class=\"row\" *rbacAllow=\"'SuperAdmin'\">\n <div class=\"col-4 col-lg-2\">\n <label class=\"text-warning\">{{ 'Admin.Faq.SharedFaq' | transloco}} <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\" [pTooltip]=\"'Admin.Faq.Tooltip.SharedFaq' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch name=\"is_shared_faq\" formControlName=\"is_shared_faq\"></ui-switch>\n </div>\n <div class=\"col-4 col-lg-2\">\n <label class=\"text-warning\">{{ 'Admin.Faq.AdminFaq' | transloco}} <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\" [pTooltip]=\"'Admin.Faq.Tooltip.AdminFaq' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch formControlName=\"is_admin_faq\" name=\"is_admin_faq\"></ui-switch>\n </div>\n <div class=\"col-4 col-lg-2\">\n <label class=\"text-warning\">{{ 'Admin.Faq.BuildFaq' | transloco}} <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\" [pTooltip]=\"'Admin.Faq.Tooltip.BuildFaq' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch formControlName=\"is_build_faq\" name=\"is_build_faq\"></ui-switch>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-12 mt-4\">\n <div class=\"mb-3 text-end\">\n <button type=\"button\" class=\"btn btn-outline-default me-2\" data-bs-toggle=\"collapse\" href=\"#faqCollapse\"\n role=\"button\" aria-expanded=\"false\" aria-controls=\"faqCollapse\" (click)=\"\n form.reset(); showList = !showList; isProductEnabled = true\n \"> {{ 'Button.Cancel' | transloco }} </button>\n <button class=\"btn btn-primary\" [buttonBusy]=\"buttonBusy\">{{ 'Button.Save' | transloco }}</button>\n </div>\n </div>\n </div>\n </form>\n </div>\n </div>\n</div>\n<!-- FAQ List/Edit -->\n<div class=\"row faqlist primeng-datatable-container mt-0\" [class.custom-disable-wrapper]=\"buttonBusy\">\n <div class=\"col-12 px-0\">\n <div class=\"w-100 text-center mt-3\" *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <p-table [value]=\"faqs\">\n <ng-template pTemplate=\"caption\">\n <div class=\"search-filter\">\n <div class=\"col-sm-4\">\n <p-multiSelect [showToggleAll]=\"true\" [options]=\"featureKeysList\" (onChange)=\"onProductChange($event)\"\n placeholder=\"Search by Feature keys\" [showHeader]=\"true\" maxSelectedLabels=\"2\" appendTo=\"body\">\n </p-multiSelect>\n </div>\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\" [(ngModel)]=\"searchText\" pInputText size=\"50\" placeholder=\"Search FAQ...\"\n (input)=\"filterFaq()\" class=\"mw-90\" />\n </div>\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Admin.Faq.Question' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Faq.Answer' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Faq.Position' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Faq.Category' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Faq.Visible' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Faq.Public' | transloco }}</th>\n <th scope=\"true\" class=\"actions-list-two\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-faq>\n <tr>\n <td data-head=\"Question\">{{ faq.question }} </td>\n <td data-head=\"Answer\">{{(faq.answer|removeHtml)|textTruncate: 200}} </td>\n <td data-head=\"Position\">{{faq.position}}</td>\n <td data-head=\"Category\">\n <span [appDynamicBadge]=\"{ itemsArray: categoryForBadges, item: faq?.category }\" color=\"cyan\"\n class=\"badge ms-1\">\n <span [pTooltip]=\"faq?.feature_keys?.join(',')\" tooltipPosition=\"top\">{{ faqHashMap[faq?.category]?.name\n }}</span>\n </span>\n <span class=\"ms-1 badge bg-warning\" *ngIf=\"faq.is_shared_faq || faq.is_admin_faq || faq.is_build_faq\">Super\n FAQ</span>\n </td>\n <td data-head=\"Visible\">\n <span [appDynamicBadge]=\"{ itemsArray: [true, false], item: faq?.visible }\" color=\"success-danger\"\n class=\"badge\">{{ faq?.visible }}</span>\n </td>\n <td data-head=\"Public\">\n <span [appDynamicBadge]=\"{ itemsArray: [true, false], item: faq?.public }\" color=\"success-danger\"\n class=\"badge\">{{ faq?.public }}</span>\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <li ngbTooltip=\"Edit\" class=\"me-2 me-sm-2\">\n <i class=\"fa fa-edit edit-icon\" (click)=\"onEdit(faq)\" aria-hidden=\"true\"></i>\n </li>\n <li ngbTooltip=\"Delete\" class=\"me-2 me-sm-2\">\n <i class=\"fa fa-trash delete-icon\" (click)=\"onDelete(faq)\" aria-hidden=\"true\"></i>\n </li>\n <li ngbTooltip=\"View faq\" *ngIf=\"faq?.visible\">\n <a [routerLink]=\"['/',slug,'faq',faq.id]\" target=\"_blank\">\n <i class=\"fa fa-eye\" aria-hidden=\"true\"></i>\n </a>\n </li>\n </ul>\n </td>\n </tr>\n <tr *ngIf=\"faq.isEdit\">\n <td colspan=\"7\">\n <form (ngSubmit)=\"onSubmit()\"\n #editForm=\"ngForm\">\n <div class=\"mb-3\">\n <label for=\"name\">{{ 'Admin.Faq.Question' | transloco }}</label>\n <input type=\"text\" class=\"form-control\" required [(ngModel)]=\"currentFaq.question\" name=\"question\"\n #question=\"ngModel\" />\n <small class=\"form-text text-muted danger\"\n *ngIf=\"!question.valid && (question.dirty || question.touched)\"> Please enter a question</small>\n </div>\n <div class=\"mb-3\">\n <label>{{ 'Admin.Faq.Answer' | transloco }}</label>\n <quill-editor [styles]=\"{ height: '200px' }\" [(ngModel)]=\"currentFaq.answer\" name=\"answer\" required\n #answer=\"ngModel\"></quill-editor>\n <small class=\"form-text text-muted danger\" *ngIf=\"!answer.valid && (answer.dirty || answer.touched)\">\n Please enter an answer</small>\n </div>\n <div class=\"row no-gutters justify-content-between\">\n <div class=\"col-lg-2\">\n <label>{{ 'Admin.Faq.Category' | transloco}} <span class=\"tooltip-wrap\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Category' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <p-dropdown [options]=\"categories\" name=\"category\" [required]=\"true\" [(ngModel)]=\"currentFaq.category\"\n (onChange)=\"onChange($event)\" [style]=\"{ width: '100%' }\" class=\"custom-dropdown\">\n </p-dropdown>\n </div>\n <div class=\"col-lg-2\" *rbacAllow=\"'SubscriptionSuperAdmin'\">\n <label>{{ 'Admin.Faq.Product' | transloco}} <span class=\"tooltip-wrap\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Product' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <p-dropdown [options]=\"productList\" name=\"product_id\" [(ngModel)]=\"currentFaq.product_id\"\n [style]=\"{ width: '100%' }\" class=\"custom-dropdown\">\n </p-dropdown>\n </div>\n <!-- feature keys -->\n <div class=\"col-lg-2\">\n <div class=\"mb-3\">\n <label for=\"\">{{ 'Admin.Faq.Features' | transloco }} <span class=\"tooltip-wrap\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Features' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label>\n <p-multiSelect [options]=\"featureKeysList\" [showHeader]=\"true\" [showToggleAll]=\"true\"\n [(ngModel)]=\"currentFaq.feature_keys\" [ngModelOptions]=\"{ standalone: true }\"\n appendTo=\"body\"></p-multiSelect>\n </div>\n </div>\n <div class=\"col-lg-2\">\n <label for=\"\">{{ 'Admin.Faq.Position' | transloco }} <span class=\"tooltip-wrap\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Position' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label>\n <input type=\"number\" name=\"position\" class=\"form-control\" required\n [(ngModel)]=\"currentFaq.position\" />\n </div>\n <div class=\"col-4 col-lg-1\">\n <label>{{ 'Admin.Faq.Visible' | transloco}} <span class=\"tooltip-wrap \" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Visible' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label>\n <div>\n <ui-switch class=\"visible\" [checked]=\"currentFaq.visible\"\n (valueChange)=\"onValueChange(currentFaq, $event)\">\n </ui-switch>\n </div>\n </div>\n <div class=\"col-4 col-lg-1\">\n <label>{{ 'Admin.Faq.Public' | transloco}} <span class=\"tooltip-wrap\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Public' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label>\n <div>\n <ui-switch class=\"public\" [checked]=\"currentFaq.public\"\n (valueChange)=\"onPublicValueChange(currentFaq, $event)\">\n </ui-switch>\n </div>\n </div>\n </div>\n <div class=\"row\" *rbacAllow=\"'SuperAdmin'\">\n <div class=\"col-4 col-lg-2\">\n <label class=\"text-warning\">{{ 'Admin.Faq.SharedFaq' | transloco}} <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\" [pTooltip]=\"'Admin.Faq.Tooltip.SharedFaq' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch [checked]=\"currentFaq.is_shared_faq\" name=\"is_shared_faq\"\n [(ngModel)]=\"currentFaq.is_shared_faq\"></ui-switch>\n </div>\n <div class=\"col-4 col-lg-2\">\n <label class=\"text-warning\">{{ 'Admin.Faq.AdminFaq' | transloco}} <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\" [pTooltip]=\"'Admin.Faq.Tooltip.AdminFaq' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch [checked]=\"currentFaq.is_admin_faq\" name=\"is_admin_faq\"\n [(ngModel)]=\"currentFaq.is_admin_faq\"></ui-switch>\n </div>\n <div class=\"col-4 col-lg-2\">\n <label class=\"text-warning\">{{ 'Admin.Faq.BuildFaq' | transloco}} <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\" [pTooltip]=\"'Admin.Faq.Tooltip.BuildFaq' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch [checked]=\"currentFaq.is_build_faq\" name=\"is_build_faq\"\n [(ngModel)]=\"currentFaq.is_build_faq\"></ui-switch>\n </div>\n </div>\n </form>\n <div class=\"text-end\">\n <ng-container *rbacAllow=\"'Pages.Admin.FAQ.Delete'\">\n <button class=\"btn btn-outline-danger me-2\" *ngIf=\"!faq.isEdit\" (click)=\"onDelete(faq)\"> Delete\n </button>\n </ng-container>\n <button class=\"btn btn-outline-default me-2\" *ngIf=\"faq.isEdit\" data-bs-toggle=\"collapse\"\n data-bs-target=\"#collapseEdit\" aria-expanded=\"false\" aria-controls=\"collapseEdit\"\n (click)=\"faq.isEdit = !faq.isEdit; onCancel()\"> {{ 'Button.Cancel' | transloco }} </button>\n <ng-container *rbacAllow=\"'Pages.Admin.FAQ.Edit'\">\n <button class=\"btn btn-primary me-2\" *ngIf=\"!faq.isEdit\" (click)=\"onEdit(faq)\"> {{ 'Button.Edit' |\n transloco }} </button>\n <button class=\"btn btn-primary me-2\" [buttonBusy]=\"buttonBusy\" *ngIf=\"faq.isEdit\"\n (click)=\"onUpdate(currentFaq)\"> {{ 'Button.Update' | transloco }} </button>\n </ng-container>\n </div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"faqs.length === 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage' | transloco\" [description]=\"'Search.NoDataDescription' | transloco\" >\n </pw-no-data>\n </div>\n </div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Admin.Faq.NoDataMessage' | transloco\" *ngIf=\"totalRecordsUnFiltered === 0\">\n </pw-no-data>\n</div>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.faq-item{background-color:#eee;border:1px dashed rgba(0,0,0,.1);border-radius:3px;margin-top:10px;transition:all .2s ease-in-out}.faq-item h5{padding:0 15px 0 0;position:relative}.faq-item h5 a:before{position:absolute;right:-24px;top:3px}input.warning{border-color:red}@media only screen and (max-width: 1024px){.faq-item h5 a{font-size:16px}.faq-item button.btn{font-size:14px}.panel-collapse .card-block{font-size:14px;margin-bottom:20px;padding:0 8px}}.actions{min-width:80px}@media only screen and (max-width: 768px){.faq-item h5 a{font-size:14px}.faq-item button.btn,.panel-collapse .card-block{font-size:12px}}.tooltip-wrap{vertical-align:top}.custom-dropdown,.custom-multiselect{position:absolute!important;width:inherit!important;z-index:9999!important}.p-dropdown-items-wrapper{max-height:142px}.fa-eye{font-size:15px}quill-editor,[_nghost-ng-c3617506782]{display:block!important}.quill-editor label{display:block}\n"], dependencies: [{ kind: "component", type: i3.Table, selector: "p-table", inputs: ["frozenColumns", "frozenValue", "style", "styleClass", "tableStyle", "tableStyleClass", "paginator", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "paginatorDropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showJumpToPageInput", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "selectionMode", "selectionPageOnly", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "rowSelectable", "rowTrackBy", "lazy", "lazyLoadOnInit", "compareSelectionBy", "csvSeparator", "exportFilename", "filters", "globalFilterFields", "filterDelay", "filterLocale", "expandedRowKeys", "editingRowKeys", "rowExpandMode", "scrollable", "scrollDirection", "rowGroupMode", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "responsive", "contextMenu", "resizableColumns", "columnResizeMode", "reorderableColumns", "loading", "loadingIcon", "showLoader", "rowHover", "customSort", "showInitialSortBadge", "autoLayout", "exportFunction", "exportHeader", "stateKey", "stateStorage", "editMode", "groupRowsBy", "groupRowsByOrder", "responsiveLayout", "breakpoint", "paginatorLocale", "value", "columns", "first", "rows", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "selectAll", "virtualRowHeight"], outputs: ["contextMenuSelectionChange", "selectAllChange", "selectionChange", "onRowSelect", "onRowUnselect", "onPage", "onSort", "onFilter", "onLazyLoad", "onRowExpand", "onRowCollapse", "onContextMenuSelect", "onColResize", "onColReorder", "onRowReorder", "onEditInit", "onEditComplete", "onEditCancel", "onHeaderCheckboxToggle", "sortFunction", "firstChange", "rowsChange", "onStateSave", "onStateRestore"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i5.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { 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.MultiSelect, selector: "p-multiSelect", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "directive", type: i8.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i10.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i10.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: i10.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i10.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i10.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i10.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i10.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i11.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: "directive", type: i12.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i13.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i14.InputContainerComponent, selector: "pw-input-container", inputs: ["name", "label", "labelClass", "tooltipPosition", "required", "errorMsg", "isReadOnly", "showTooltip", "tooltipText", "showTriangle", "afterLabel", "showAfterLabel", "showTriangleText"] }, { kind: "component", type: i14.NoDataComponent, selector: "pw-no-data", inputs: ["message", "description", "withImage"] }, { kind: "directive", type: i15.ButtonBusyDirective, selector: "[buttonBusy]", inputs: ["buttonBusy", "busyText"] }, { kind: "directive", type: i15.DynamicBadgeDirective, selector: "[appDynamicBadge]", inputs: ["appDynamicBadge", "color"] }, { kind: "directive", type: i15.RbacAllowDirective, selector: "[rbacAllow]", inputs: ["rbacAllow"] }, { kind: "directive", type: i16.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "tooltipContext", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "directive", type: i10.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i10.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i17.QuillEditorComponent, selector: "quill-editor" }, { kind: "pipe", type: i18.TranslocoPipe, name: "transloco" }, { kind: "pipe", type: i19.RemoveHtmlPipe, name: "removeHtml" }, { kind: "pipe", type: i19.TextTruncatePipe, name: "textTruncate" }] }); }
287
288
  }
288
289
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: FaqListComponent, decorators: [{
289
290
  type: Component,
290
- args: [{ selector: 'pw-admin-faq-list', template: "<div class=\"row\" [class.custom-disable-wrapper]=\"buttonBusy\">\n <div class=\"col-12 d-flex flex-wrap justify-content-between align-items-center\"\n *ngIf=\"showList\">\n <h2 class=\"card-title p-0 float-start\">Frequently Asked Questions</h2>\n <a href=\"javascript:void(0)\" *ngIf=\"showList\" (click)=\"showList = !showList\"\n class=\"btn btn-sm btn-outline-primary float-end\" role=\"button\" aria-expanded=\"false\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> {{ 'Label.AddNew' | transloco }} FAQ </a>\n </div>\n</div>\n<!-- Add FAQ Section -->\n<div *ngIf=\"!showList\" [class.custom-disable-wrapper]=\"buttonBusy\" class=\"p-2\">\n <div class=\"row\">\n <div class=\"col-12\">\n <h4 class=\"fw-bold mb-4\">{{ 'Label.AddNew' | transloco }} FAQ</h4>\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\">\n <div class=\"row\">\n <pw-input-container class=\"col-12\" [label]=\"'Admin.Faq.Question' | transloco\" name=\"question\"\n [errorMsg]=\"'Admin.Faq.Validation.FieldRequired' | transloco\">\n <input type=\"text\" formControlName=\"question\" class=\"form-control\"\n [ngClass]=\"{ 'is-invalid': submitted && f['question'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"row\">\n <pw-input-container class=\"col-12 quill-editor\"\n [label]=\"'Admin.Faq.Answer' | transloco\"\n name=\"answer\"\n [errorMsg]=\"'Admin.Faq.Validation.FieldRequired' | transloco\">\n <quill-editor [styles]=\"{ height: '200px'}\" formControlName=\"answer\" class=\"quillEditor\"\n [ngClass]=\"{ 'is-invalid': submitted && f['answer'].errors }\">\n </quill-editor>\n </pw-input-container>\n </div>\n <div class=\"row justify-content-between\">\n <div class=\"col-lg-2\">\n <pw-input-container [showTooltip]=\"true\" [tooltipText]=\"'Admin.Faq.Tooltip.Category' | transloco\"\n [label]=\"'Admin.Faq.Category' | transloco\" name=\"category\"\n [errorMsg]=\"'Admin.Faq.Validation.FieldRequired' | transloco\">\n <p-dropdown [options]=\"categories\" class=\"dropdown-bg-transparent\" (onChange)=\"onChange($event)\"\n placeholder=\"Select\" formControlName=\"category\" id=\"category-dropdown\" [style]=\"{ width: '100%' }\">\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-lg-2\" *rbacAllow=\"'SubscriptionSuperAdmin'\">\n <pw-input-container [showTooltip]=\"true\" [tooltipText]=\"'Admin.Faq.Tooltip.Product' | transloco\"\n [label]=\"'Admin.Faq.Product' | transloco\" name=\"product_id\"\n [errorMsg]=\"'Admin.Faq.Validation.FieldRequired' | transloco\">\n <p-dropdown [options]=\"productList\" class=\"dropdown-bg-transparent\" formControlName=\"product_id\"\n [style]=\"{ width: '100%' }\">\n </p-dropdown>\n </pw-input-container>\n </div>\n <!-- Features keys-->\n <div class=\"col-lg-2\">\n <pw-input-container [showTooltip]=\"true\" [tooltipText]=\"'Admin.Faq.Tooltip.Features' | transloco\"\n [label]=\"'Admin.Faq.Features' | transloco\" name=\"feature_keys\">\n <p-multiSelect [options]=\"featureKeysList\" placeholder=\"Select feature keys\" [showHeader]=\"true\"\n [showToggleAll]=\"true\" formControlName=\"feature_keys\" appendTo=\"body\"></p-multiSelect>\n </pw-input-container>\n </div>\n <div class=\"col-lg-2\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\" [tooltipText]=\"'Admin.Faq.Tooltip.Position' | transloco\"\n [label]=\"'Admin.Faq.Position' | transloco\" name=\"position\"\n [errorMsg]=\"'Admin.Faq.Validation.FieldRequired' | transloco\">\n <div class=\"position\">\n <input type=\"number\" min=\"0\" formControlName=\"position\" class=\"form-control\" />\n </div>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-4 col-lg-2\">\n <label>{{ 'Admin.Faq.Visible' | transloco}} <span class=\"tooltip-wrap\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Visible' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch formControlName=\"visible\"></ui-switch>\n </div>\n <div class=\"col-4 col-lg-2\">\n <label>{{ 'Admin.Faq.Public' | transloco}} <span class=\"tooltip-wrap\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Public' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch formControlName=\"public\"></ui-switch>\n </div>\n </div>\n <div class=\"row\" *rbacAllow=\"'SuperAdmin'\">\n <div class=\"col-4 col-lg-2\">\n <label class=\"text-warning\">{{ 'Admin.Faq.SharedFaq' | transloco}} <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\" [pTooltip]=\"'Admin.Faq.Tooltip.SharedFaq' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch name=\"is_shared_faq\" formControlName=\"is_shared_faq\"></ui-switch>\n </div>\n <div class=\"col-4 col-lg-2\">\n <label class=\"text-warning\">{{ 'Admin.Faq.AdminFaq' | transloco}} <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\" [pTooltip]=\"'Admin.Faq.Tooltip.AdminFaq' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch formControlName=\"is_admin_faq\" name=\"is_admin_faq\"></ui-switch>\n </div>\n <div class=\"col-4 col-lg-2\">\n <label class=\"text-warning\">{{ 'Admin.Faq.BuildFaq' | transloco}} <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\" [pTooltip]=\"'Admin.Faq.Tooltip.BuildFaq' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch formControlName=\"is_build_faq\" name=\"is_build_faq\"></ui-switch>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-12 mt-4\">\n <div class=\"mb-3 text-end\">\n <button type=\"button\" class=\"btn btn-outline-default me-2\" data-bs-toggle=\"collapse\" href=\"#faqCollapse\"\n role=\"button\" aria-expanded=\"false\" aria-controls=\"faqCollapse\" (click)=\"\n form.reset(); showList = !showList; isProductEnabled = true\n \"> {{ 'Button.Cancel' | transloco }} </button>\n <button class=\"btn btn-primary\" [buttonBusy]=\"buttonBusy\">{{ 'Button.Save' | transloco }}</button>\n </div>\n </div>\n </div>\n </form>\n </div>\n </div>\n</div>\n<!-- FAQ List/Edit -->\n<div class=\"row faqlist primeng-datatable-container mt-0\" *ngIf=\"showList\" [class.custom-disable-wrapper]=\"buttonBusy\">\n <div class=\"col-12 px-0\">\n <div class=\"w-100 text-center mt-3\" *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <p-table [value]=\"faqs\" [class.hideTable]=\"faqs.length === 0\">\n <ng-template pTemplate=\"caption\">\n <div class=\"search-filter\">\n <div class=\"col-sm-4\">\n <p-multiSelect [showToggleAll]=\"true\" [options]=\"featureKeysList\" (onChange)=\"onProductChange($event)\"\n placeholder=\"Search by Feature keys\" [showHeader]=\"true\" maxSelectedLabels=\"2\" appendTo=\"body\">\n </p-multiSelect>\n </div>\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\" [(ngModel)]=\"searchText\" pInputText size=\"50\" placeholder=\"Search FAQ...\"\n (input)=\"filterFaq()\" class=\"mw-90\" />\n </div>\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Admin.Faq.Question' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Faq.Answer' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Faq.Position' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Faq.Category' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Faq.Visible' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Faq.Public' | transloco }}</th>\n <th scope=\"true\" class=\"actions-list-two\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-faq>\n <tr>\n <td data-head=\"Question\">{{ faq.question }} </td>\n <td data-head=\"Answer\">{{(faq.answer|removeHtml)|textTruncate: 200}} </td>\n <td data-head=\"Position\">{{faq.position}}</td>\n <td data-head=\"Category\">\n <span [appDynamicBadge]=\"{ itemsArray: categoryForBadges, item: faq?.category }\" color=\"cyan\"\n class=\"badge ms-1\">\n <span [pTooltip]=\"faq?.feature_keys?.join(',')\" tooltipPosition=\"top\">{{ faqHashMap[faq?.category]?.name\n }}</span>\n </span>\n <span class=\"ms-1 badge bg-warning\" *ngIf=\"faq.is_shared_faq || faq.is_admin_faq || faq.is_build_faq\">Super\n FAQ</span>\n </td>\n <td data-head=\"Visible\">\n <span [appDynamicBadge]=\"{ itemsArray: [true, false], item: faq?.visible }\" color=\"success-danger\"\n class=\"badge\">{{ faq?.visible }}</span>\n </td>\n <td data-head=\"Public\">\n <span [appDynamicBadge]=\"{ itemsArray: [true, false], item: faq?.public }\" color=\"success-danger\"\n class=\"badge\">{{ faq?.public }}</span>\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <li ngbTooltip=\"Edit\" class=\"me-2 me-sm-2\">\n <i class=\"fa fa-edit edit-icon\" (click)=\"onEdit(faq)\" aria-hidden=\"true\"></i>\n </li>\n <li ngbTooltip=\"Delete\" class=\"me-2 me-sm-2\">\n <i class=\"fa fa-trash delete-icon\" (click)=\"onDelete(faq)\" aria-hidden=\"true\"></i>\n </li>\n <li ngbTooltip=\"View faq\" *ngIf=\"faq?.visible\">\n <a [routerLink]=\"['/',slug,'faq',faq.id]\" target=\"_blank\">\n <i class=\"fa fa-eye\" aria-hidden=\"true\"></i>\n </a>\n </li>\n </ul>\n </td>\n </tr>\n <tr *ngIf=\"faq.isEdit\">\n <td colspan=\"7\">\n <form (ngSubmit)=\"onSubmit()\"\n #editForm=\"ngForm\">\n <div class=\"mb-3\">\n <label for=\"name\">{{ 'Admin.Faq.Question' | transloco }}</label>\n <input type=\"text\" class=\"form-control\" required [(ngModel)]=\"currentFaq.question\" name=\"question\"\n #question=\"ngModel\" />\n <small class=\"form-text text-muted danger\"\n *ngIf=\"!question.valid && (question.dirty || question.touched)\"> Please enter a question</small>\n </div>\n <div class=\"mb-3\">\n <label>{{ 'Admin.Faq.Answer' | transloco }}</label>\n <quill-editor [styles]=\"{ height: '200px' }\" [(ngModel)]=\"currentFaq.answer\" name=\"answer\" required\n #answer=\"ngModel\"></quill-editor>\n <small class=\"form-text text-muted danger\" *ngIf=\"!answer.valid && (answer.dirty || answer.touched)\">\n Please enter an answer</small>\n </div>\n <div class=\"row no-gutters justify-content-between\">\n <div class=\"col-lg-2\">\n <label>{{ 'Admin.Faq.Category' | transloco}} <span class=\"tooltip-wrap\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Category' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <p-dropdown [options]=\"categories\" name=\"category\" [required]=\"true\" [(ngModel)]=\"currentFaq.category\"\n (onChange)=\"onChange($event)\" [style]=\"{ width: '100%' }\" class=\"custom-dropdown\">\n </p-dropdown>\n </div>\n <div class=\"col-lg-2\" *rbacAllow=\"'SubscriptionSuperAdmin'\">\n <label>{{ 'Admin.Faq.Product' | transloco}} <span class=\"tooltip-wrap\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Product' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <p-dropdown [options]=\"productList\" name=\"product_id\" [(ngModel)]=\"currentFaq.product_id\"\n [style]=\"{ width: '100%' }\" class=\"custom-dropdown\">\n </p-dropdown>\n </div>\n <!-- feature keys -->\n <div class=\"col-lg-2\">\n <div class=\"mb-3\">\n <label for=\"\">{{ 'Admin.Faq.Features' | transloco }} <span class=\"tooltip-wrap\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Features' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label>\n <p-multiSelect [options]=\"featureKeysList\" [showHeader]=\"true\" [showToggleAll]=\"true\"\n [(ngModel)]=\"currentFaq.feature_keys\" [ngModelOptions]=\"{ standalone: true }\"\n appendTo=\"body\"></p-multiSelect>\n </div>\n </div>\n <div class=\"col-lg-2\">\n <label for=\"\">{{ 'Admin.Faq.Position' | transloco }} <span class=\"tooltip-wrap\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Position' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label>\n <input type=\"number\" name=\"position\" class=\"form-control\" required\n [(ngModel)]=\"currentFaq.position\" />\n </div>\n <div class=\"col-4 col-lg-1\">\n <label>{{ 'Admin.Faq.Visible' | transloco}} <span class=\"tooltip-wrap \" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Visible' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label>\n <div>\n <ui-switch class=\"visible\" [checked]=\"currentFaq.visible\"\n (valueChange)=\"onValueChange(currentFaq, $event)\">\n </ui-switch>\n </div>\n </div>\n <div class=\"col-4 col-lg-1\">\n <label>{{ 'Admin.Faq.Public' | transloco}} <span class=\"tooltip-wrap\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Public' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label>\n <div>\n <ui-switch class=\"public\" [checked]=\"currentFaq.public\"\n (valueChange)=\"onPublicValueChange(currentFaq, $event)\">\n </ui-switch>\n </div>\n </div>\n </div>\n <div class=\"row\" *rbacAllow=\"'SuperAdmin'\">\n <div class=\"col-4 col-lg-2\">\n <label class=\"text-warning\">{{ 'Admin.Faq.SharedFaq' | transloco}} <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\" [pTooltip]=\"'Admin.Faq.Tooltip.SharedFaq' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch [checked]=\"currentFaq.is_shared_faq\" name=\"is_shared_faq\"\n [(ngModel)]=\"currentFaq.is_shared_faq\"></ui-switch>\n </div>\n <div class=\"col-4 col-lg-2\">\n <label class=\"text-warning\">{{ 'Admin.Faq.AdminFaq' | transloco}} <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\" [pTooltip]=\"'Admin.Faq.Tooltip.AdminFaq' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch [checked]=\"currentFaq.is_admin_faq\" name=\"is_admin_faq\"\n [(ngModel)]=\"currentFaq.is_admin_faq\"></ui-switch>\n </div>\n <div class=\"col-4 col-lg-2\">\n <label class=\"text-warning\">{{ 'Admin.Faq.BuildFaq' | transloco}} <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\" [pTooltip]=\"'Admin.Faq.Tooltip.BuildFaq' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch [checked]=\"currentFaq.is_build_faq\" name=\"is_build_faq\"\n [(ngModel)]=\"currentFaq.is_build_faq\"></ui-switch>\n </div>\n </div>\n </form>\n <div class=\"text-end\">\n <ng-container *rbacAllow=\"'Pages.Admin.FAQ.Delete'\">\n <button class=\"btn btn-outline-danger me-2\" *ngIf=\"!faq.isEdit\" (click)=\"onDelete(faq)\"> Delete\n </button>\n </ng-container>\n <button class=\"btn btn-outline-default me-2\" *ngIf=\"faq.isEdit\" data-bs-toggle=\"collapse\"\n data-bs-target=\"#collapseEdit\" aria-expanded=\"false\" aria-controls=\"collapseEdit\"\n (click)=\"faq.isEdit = !faq.isEdit; onCancel()\"> {{ 'Button.Cancel' | transloco }} </button>\n <ng-container *rbacAllow=\"'Pages.Admin.FAQ.Edit'\">\n <button class=\"btn btn-primary me-2\" *ngIf=\"!faq.isEdit\" (click)=\"onEdit(faq)\"> {{ 'Button.Edit' |\n transloco }} </button>\n <button class=\"btn btn-primary me-2\" [buttonBusy]=\"buttonBusy\" *ngIf=\"faq.isEdit\"\n (click)=\"onUpdate(currentFaq)\"> {{ 'Button.Update' | transloco }} </button>\n </ng-container>\n </div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage' | transloco\"\n [description]=\"'Search.NoDataDescription' | transloco\" *ngIf=\"totalRecordsUnFiltered === 0\"> </pw-no-data>\n </div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Admin.Faq.NoDataMessage' | transloco\" *ngIf=\"faqs.length === 0\">\n </pw-no-data>\n</div>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.faq-item{background-color:#eee;border:1px dashed rgba(0,0,0,.1);border-radius:3px;margin-top:10px;transition:all .2s ease-in-out}.faq-item h5{padding:0 15px 0 0;position:relative}.faq-item h5 a:before{position:absolute;right:-24px;top:3px}input.warning{border-color:red}@media only screen and (max-width: 1024px){.faq-item h5 a{font-size:16px}.faq-item button.btn{font-size:14px}.panel-collapse .card-block{font-size:14px;margin-bottom:20px;padding:0 8px}}.actions{min-width:80px}@media only screen and (max-width: 768px){.faq-item h5 a{font-size:14px}.faq-item button.btn,.panel-collapse .card-block{font-size:12px}}.tooltip-wrap{vertical-align:top}.custom-dropdown,.custom-multiselect{position:absolute!important;width:inherit!important;z-index:9999!important}.p-dropdown-items-wrapper{max-height:142px}.fa-eye{font-size:15px}quill-editor,[_nghost-ng-c3617506782]{display:block!important}.quill-editor label{display:block}\n"] }]
291
+ args: [{ selector: 'pw-admin-faq-list', template: "<div class=\"row\" [class.custom-disable-wrapper]=\"buttonBusy\">\n <div class=\"col-12 d-flex flex-wrap justify-content-between align-items-center\"\n *ngIf=\"showList\">\n <h2 class=\"card-title p-0 float-start\">Frequently Asked Questions</h2>\n <a href=\"javascript:void(0)\" *ngIf=\"showList\" (click)=\"showList = !showList\"\n class=\"btn btn-sm btn-outline-primary float-end\" role=\"button\" aria-expanded=\"false\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i> {{ 'Label.AddNew' | transloco }} FAQ </a>\n </div>\n</div>\n<!-- Add FAQ Section -->\n<div *ngIf=\"!showList\" [class.custom-disable-wrapper]=\"buttonBusy\" class=\"p-2\">\n <div class=\"row\">\n <div class=\"col-12\">\n <h4 class=\"fw-bold mb-4\">{{ 'Label.AddNew' | transloco }} FAQ</h4>\n <form [formGroup]=\"form\" (ngSubmit)=\"onSubmit()\">\n <div class=\"row\">\n <pw-input-container class=\"col-12\" [label]=\"'Admin.Faq.Question' | transloco\" name=\"question\"\n [errorMsg]=\"'Admin.Faq.Validation.FieldRequired' | transloco\">\n <input type=\"text\" formControlName=\"question\" class=\"form-control\"\n [ngClass]=\"{ 'is-invalid': submitted && f['question'].errors }\" />\n </pw-input-container>\n </div>\n <div class=\"row\">\n <pw-input-container class=\"col-12 quill-editor\"\n [label]=\"'Admin.Faq.Answer' | transloco\"\n name=\"answer\"\n [errorMsg]=\"'Admin.Faq.Validation.FieldRequired' | transloco\">\n <quill-editor [styles]=\"{ height: '200px'}\" formControlName=\"answer\" class=\"quillEditor\"\n [ngClass]=\"{ 'is-invalid': submitted && f['answer'].errors }\">\n </quill-editor>\n </pw-input-container>\n </div>\n <div class=\"row justify-content-between\">\n <div class=\"col-lg-2\">\n <pw-input-container [showTooltip]=\"true\" [tooltipText]=\"'Admin.Faq.Tooltip.Category' | transloco\"\n [label]=\"'Admin.Faq.Category' | transloco\" name=\"category\"\n [errorMsg]=\"'Admin.Faq.Validation.FieldRequired' | transloco\">\n <p-dropdown [options]=\"categories\" class=\"dropdown-bg-transparent\" (onChange)=\"onChange($event)\"\n placeholder=\"Select\" formControlName=\"category\" id=\"category-dropdown\" [style]=\"{ width: '100%' }\">\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-lg-2\" *rbacAllow=\"'SubscriptionSuperAdmin'\">\n <pw-input-container [showTooltip]=\"true\" [tooltipText]=\"'Admin.Faq.Tooltip.Product' | transloco\"\n [label]=\"'Admin.Faq.Product' | transloco\" name=\"product_id\"\n [errorMsg]=\"'Admin.Faq.Validation.FieldRequired' | transloco\">\n <p-dropdown [options]=\"productList\" class=\"dropdown-bg-transparent\" formControlName=\"product_id\"\n [style]=\"{ width: '100%' }\">\n </p-dropdown>\n </pw-input-container>\n </div>\n <!-- Features keys-->\n <div class=\"col-lg-2\">\n <pw-input-container [showTooltip]=\"true\" [tooltipText]=\"'Admin.Faq.Tooltip.Features' | transloco\"\n [label]=\"'Admin.Faq.Features' | transloco\" name=\"feature_keys\">\n <p-multiSelect [options]=\"featureKeysList\" placeholder=\"Select feature keys\" [showHeader]=\"true\"\n [showToggleAll]=\"true\" formControlName=\"feature_keys\" appendTo=\"body\"></p-multiSelect>\n </pw-input-container>\n </div>\n <div class=\"col-lg-2\">\n <div class=\"mb-3\">\n <pw-input-container [showTooltip]=\"true\" [tooltipText]=\"'Admin.Faq.Tooltip.Position' | transloco\"\n [label]=\"'Admin.Faq.Position' | transloco\" name=\"position\"\n [errorMsg]=\"'Admin.Faq.Validation.FieldRequired' | transloco\">\n <div class=\"position\">\n <input type=\"number\" min=\"0\" formControlName=\"position\" class=\"form-control\" />\n </div>\n </pw-input-container>\n </div>\n </div>\n <div class=\"col-4 col-lg-2\">\n <label>{{ 'Admin.Faq.Visible' | transloco}} <span class=\"tooltip-wrap\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Visible' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch formControlName=\"visible\"></ui-switch>\n </div>\n <div class=\"col-4 col-lg-2\">\n <label>{{ 'Admin.Faq.Public' | transloco}} <span class=\"tooltip-wrap\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Public' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch formControlName=\"public\"></ui-switch>\n </div>\n </div>\n <div class=\"row\" *rbacAllow=\"'SuperAdmin'\">\n <div class=\"col-4 col-lg-2\">\n <label class=\"text-warning\">{{ 'Admin.Faq.SharedFaq' | transloco}} <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\" [pTooltip]=\"'Admin.Faq.Tooltip.SharedFaq' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch name=\"is_shared_faq\" formControlName=\"is_shared_faq\"></ui-switch>\n </div>\n <div class=\"col-4 col-lg-2\">\n <label class=\"text-warning\">{{ 'Admin.Faq.AdminFaq' | transloco}} <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\" [pTooltip]=\"'Admin.Faq.Tooltip.AdminFaq' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch formControlName=\"is_admin_faq\" name=\"is_admin_faq\"></ui-switch>\n </div>\n <div class=\"col-4 col-lg-2\">\n <label class=\"text-warning\">{{ 'Admin.Faq.BuildFaq' | transloco}} <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\" [pTooltip]=\"'Admin.Faq.Tooltip.BuildFaq' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch formControlName=\"is_build_faq\" name=\"is_build_faq\"></ui-switch>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-12 mt-4\">\n <div class=\"mb-3 text-end\">\n <button type=\"button\" class=\"btn btn-outline-default me-2\" data-bs-toggle=\"collapse\" href=\"#faqCollapse\"\n role=\"button\" aria-expanded=\"false\" aria-controls=\"faqCollapse\" (click)=\"\n form.reset(); showList = !showList; isProductEnabled = true\n \"> {{ 'Button.Cancel' | transloco }} </button>\n <button class=\"btn btn-primary\" [buttonBusy]=\"buttonBusy\">{{ 'Button.Save' | transloco }}</button>\n </div>\n </div>\n </div>\n </form>\n </div>\n </div>\n</div>\n<!-- FAQ List/Edit -->\n<div class=\"row faqlist primeng-datatable-container mt-0\" [class.custom-disable-wrapper]=\"buttonBusy\">\n <div class=\"col-12 px-0\">\n <div class=\"w-100 text-center mt-3\" *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <p-table [value]=\"faqs\">\n <ng-template pTemplate=\"caption\">\n <div class=\"search-filter\">\n <div class=\"col-sm-4\">\n <p-multiSelect [showToggleAll]=\"true\" [options]=\"featureKeysList\" (onChange)=\"onProductChange($event)\"\n placeholder=\"Search by Feature keys\" [showHeader]=\"true\" maxSelectedLabels=\"2\" appendTo=\"body\">\n </p-multiSelect>\n </div>\n <div class=\"text-end\">\n <i class=\"fa fa-search mt-2 me-2\" aria-hidden=\"true\"></i>\n <input type=\"text\" [(ngModel)]=\"searchText\" pInputText size=\"50\" placeholder=\"Search FAQ...\"\n (input)=\"filterFaq()\" class=\"mw-90\" />\n </div>\n </div>\n </ng-template>\n <ng-template pTemplate=\"header\">\n <tr>\n <th scope=\"true\">{{ 'Admin.Faq.Question' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Faq.Answer' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Faq.Position' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Faq.Category' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Faq.Visible' | transloco }}</th>\n <th scope=\"true\">{{ 'Admin.Faq.Public' | transloco }}</th>\n <th scope=\"true\" class=\"actions-list-two\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\" let-faq>\n <tr>\n <td data-head=\"Question\">{{ faq.question }} </td>\n <td data-head=\"Answer\">{{(faq.answer|removeHtml)|textTruncate: 200}} </td>\n <td data-head=\"Position\">{{faq.position}}</td>\n <td data-head=\"Category\">\n <span [appDynamicBadge]=\"{ itemsArray: categoryForBadges, item: faq?.category }\" color=\"cyan\"\n class=\"badge ms-1\">\n <span [pTooltip]=\"faq?.feature_keys?.join(',')\" tooltipPosition=\"top\">{{ faqHashMap[faq?.category]?.name\n }}</span>\n </span>\n <span class=\"ms-1 badge bg-warning\" *ngIf=\"faq.is_shared_faq || faq.is_admin_faq || faq.is_build_faq\">Super\n FAQ</span>\n </td>\n <td data-head=\"Visible\">\n <span [appDynamicBadge]=\"{ itemsArray: [true, false], item: faq?.visible }\" color=\"success-danger\"\n class=\"badge\">{{ faq?.visible }}</span>\n </td>\n <td data-head=\"Public\">\n <span [appDynamicBadge]=\"{ itemsArray: [true, false], item: faq?.public }\" color=\"success-danger\"\n class=\"badge\">{{ faq?.public }}</span>\n </td>\n <td data-head=\"Action\">\n <ul class=\"list-unstyled list-inline\">\n <li ngbTooltip=\"Edit\" class=\"me-2 me-sm-2\">\n <i class=\"fa fa-edit edit-icon\" (click)=\"onEdit(faq)\" aria-hidden=\"true\"></i>\n </li>\n <li ngbTooltip=\"Delete\" class=\"me-2 me-sm-2\">\n <i class=\"fa fa-trash delete-icon\" (click)=\"onDelete(faq)\" aria-hidden=\"true\"></i>\n </li>\n <li ngbTooltip=\"View faq\" *ngIf=\"faq?.visible\">\n <a [routerLink]=\"['/',slug,'faq',faq.id]\" target=\"_blank\">\n <i class=\"fa fa-eye\" aria-hidden=\"true\"></i>\n </a>\n </li>\n </ul>\n </td>\n </tr>\n <tr *ngIf=\"faq.isEdit\">\n <td colspan=\"7\">\n <form (ngSubmit)=\"onSubmit()\"\n #editForm=\"ngForm\">\n <div class=\"mb-3\">\n <label for=\"name\">{{ 'Admin.Faq.Question' | transloco }}</label>\n <input type=\"text\" class=\"form-control\" required [(ngModel)]=\"currentFaq.question\" name=\"question\"\n #question=\"ngModel\" />\n <small class=\"form-text text-muted danger\"\n *ngIf=\"!question.valid && (question.dirty || question.touched)\"> Please enter a question</small>\n </div>\n <div class=\"mb-3\">\n <label>{{ 'Admin.Faq.Answer' | transloco }}</label>\n <quill-editor [styles]=\"{ height: '200px' }\" [(ngModel)]=\"currentFaq.answer\" name=\"answer\" required\n #answer=\"ngModel\"></quill-editor>\n <small class=\"form-text text-muted danger\" *ngIf=\"!answer.valid && (answer.dirty || answer.touched)\">\n Please enter an answer</small>\n </div>\n <div class=\"row no-gutters justify-content-between\">\n <div class=\"col-lg-2\">\n <label>{{ 'Admin.Faq.Category' | transloco}} <span class=\"tooltip-wrap\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Category' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <p-dropdown [options]=\"categories\" name=\"category\" [required]=\"true\" [(ngModel)]=\"currentFaq.category\"\n (onChange)=\"onChange($event)\" [style]=\"{ width: '100%' }\" class=\"custom-dropdown\">\n </p-dropdown>\n </div>\n <div class=\"col-lg-2\" *rbacAllow=\"'SubscriptionSuperAdmin'\">\n <label>{{ 'Admin.Faq.Product' | transloco}} <span class=\"tooltip-wrap\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Product' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <p-dropdown [options]=\"productList\" name=\"product_id\" [(ngModel)]=\"currentFaq.product_id\"\n [style]=\"{ width: '100%' }\" class=\"custom-dropdown\">\n </p-dropdown>\n </div>\n <!-- feature keys -->\n <div class=\"col-lg-2\">\n <div class=\"mb-3\">\n <label for=\"\">{{ 'Admin.Faq.Features' | transloco }} <span class=\"tooltip-wrap\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Features' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label>\n <p-multiSelect [options]=\"featureKeysList\" [showHeader]=\"true\" [showToggleAll]=\"true\"\n [(ngModel)]=\"currentFaq.feature_keys\" [ngModelOptions]=\"{ standalone: true }\"\n appendTo=\"body\"></p-multiSelect>\n </div>\n </div>\n <div class=\"col-lg-2\">\n <label for=\"\">{{ 'Admin.Faq.Position' | transloco }} <span class=\"tooltip-wrap\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Position' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label>\n <input type=\"number\" name=\"position\" class=\"form-control\" required\n [(ngModel)]=\"currentFaq.position\" />\n </div>\n <div class=\"col-4 col-lg-1\">\n <label>{{ 'Admin.Faq.Visible' | transloco}} <span class=\"tooltip-wrap \" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Visible' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label>\n <div>\n <ui-switch class=\"visible\" [checked]=\"currentFaq.visible\"\n (valueChange)=\"onValueChange(currentFaq, $event)\">\n </ui-switch>\n </div>\n </div>\n <div class=\"col-4 col-lg-1\">\n <label>{{ 'Admin.Faq.Public' | transloco}} <span class=\"tooltip-wrap\" [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Public' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label>\n <div>\n <ui-switch class=\"public\" [checked]=\"currentFaq.public\"\n (valueChange)=\"onPublicValueChange(currentFaq, $event)\">\n </ui-switch>\n </div>\n </div>\n </div>\n <div class=\"row\" *rbacAllow=\"'SuperAdmin'\">\n <div class=\"col-4 col-lg-2\">\n <label class=\"text-warning\">{{ 'Admin.Faq.SharedFaq' | transloco}} <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\" [pTooltip]=\"'Admin.Faq.Tooltip.SharedFaq' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch [checked]=\"currentFaq.is_shared_faq\" name=\"is_shared_faq\"\n [(ngModel)]=\"currentFaq.is_shared_faq\"></ui-switch>\n </div>\n <div class=\"col-4 col-lg-2\">\n <label class=\"text-warning\">{{ 'Admin.Faq.AdminFaq' | transloco}} <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\" [pTooltip]=\"'Admin.Faq.Tooltip.AdminFaq' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch [checked]=\"currentFaq.is_admin_faq\" name=\"is_admin_faq\"\n [(ngModel)]=\"currentFaq.is_admin_faq\"></ui-switch>\n </div>\n <div class=\"col-4 col-lg-2\">\n <label class=\"text-warning\">{{ 'Admin.Faq.BuildFaq' | transloco}} <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\" [pTooltip]=\"'Admin.Faq.Tooltip.BuildFaq' | transloco\" tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch [checked]=\"currentFaq.is_build_faq\" name=\"is_build_faq\"\n [(ngModel)]=\"currentFaq.is_build_faq\"></ui-switch>\n </div>\n </div>\n </form>\n <div class=\"text-end\">\n <ng-container *rbacAllow=\"'Pages.Admin.FAQ.Delete'\">\n <button class=\"btn btn-outline-danger me-2\" *ngIf=\"!faq.isEdit\" (click)=\"onDelete(faq)\"> Delete\n </button>\n </ng-container>\n <button class=\"btn btn-outline-default me-2\" *ngIf=\"faq.isEdit\" data-bs-toggle=\"collapse\"\n data-bs-target=\"#collapseEdit\" aria-expanded=\"false\" aria-controls=\"collapseEdit\"\n (click)=\"faq.isEdit = !faq.isEdit; onCancel()\"> {{ 'Button.Cancel' | transloco }} </button>\n <ng-container *rbacAllow=\"'Pages.Admin.FAQ.Edit'\">\n <button class=\"btn btn-primary me-2\" *ngIf=\"!faq.isEdit\" (click)=\"onEdit(faq)\"> {{ 'Button.Edit' |\n transloco }} </button>\n <button class=\"btn btn-primary me-2\" [buttonBusy]=\"buttonBusy\" *ngIf=\"faq.isEdit\"\n (click)=\"onUpdate(currentFaq)\"> {{ 'Button.Update' | transloco }} </button>\n </ng-container>\n </div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <div *ngIf=\"faqs.length === 0\">\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage' | transloco\" [description]=\"'Search.NoDataDescription' | transloco\" >\n </pw-no-data>\n </div>\n </div>\n <pw-no-data [withImage]=\"true\" [message]=\"'Admin.Faq.NoDataMessage' | transloco\" *ngIf=\"totalRecordsUnFiltered === 0\">\n </pw-no-data>\n</div>\n", styles: [":root{--first: rgb(23 105 225);--second: rgb(54 194 131);--third: rgb(255 171 0);--text: rgb(34 34 34);--tabs_bg: rgb(23 105 225);--tabs_text: rgb(255 255 255);--titles: rgb(34 34 34);--sidebar_bg: rgb(0, 48, 63);--sidebar_text: rgb(255 255 255)}.faq-item{background-color:#eee;border:1px dashed rgba(0,0,0,.1);border-radius:3px;margin-top:10px;transition:all .2s ease-in-out}.faq-item h5{padding:0 15px 0 0;position:relative}.faq-item h5 a:before{position:absolute;right:-24px;top:3px}input.warning{border-color:red}@media only screen and (max-width: 1024px){.faq-item h5 a{font-size:16px}.faq-item button.btn{font-size:14px}.panel-collapse .card-block{font-size:14px;margin-bottom:20px;padding:0 8px}}.actions{min-width:80px}@media only screen and (max-width: 768px){.faq-item h5 a{font-size:14px}.faq-item button.btn,.panel-collapse .card-block{font-size:12px}}.tooltip-wrap{vertical-align:top}.custom-dropdown,.custom-multiselect{position:absolute!important;width:inherit!important;z-index:9999!important}.p-dropdown-items-wrapper{max-height:142px}.fa-eye{font-size:15px}quill-editor,[_nghost-ng-c3617506782]{display:block!important}.quill-editor label{display:block}\n"] }]
291
292
  }], ctorParameters: () => [{ type: i1.CommonService }, { type: i2.AdminService }, { type: i1.ProductService }, { type: i0.Injector }], propDecorators: { editForm: [{
292
293
  type: ViewChild,
293
294
  args: ['editForm', { static: false }]
294
295
  }] } });
295
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFxcy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9mYXFzL2ZhcXMtbGlzdC9mYXFzLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hZG1pbi1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL2ZhcXMvZmFxcy1saXN0L2ZhcXMtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xGLE9BQU8sRUFBb0IsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxPQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxJQUFJLE1BQU0sYUFBYSxDQUFDO0FBRS9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFXLEdBQUcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU83RixNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsZ0JBQWdCO0lBcURsRCxZQUNZLGFBQTRCLEVBQzVCLFlBQTBCLEVBQzFCLGNBQThCLEVBQ3RDLFFBQWtCO1FBRWxCLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUxSLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGlCQUFZLEdBQVosWUFBWSxDQUFj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SSxtQkFBbUI7aUtBaUJhLFFBQVE7c0JBQWpELFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0b3IsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtR3JvdXAsIE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCBncm91cEJ5IGZyb20gJ2xvZGFzaC9ncm91cEJ5JztcbmltcG9ydCBzd2FsIGZyb20gJ3N3ZWV0YWxlcnQyJztcblxuaW1wb3J0IHsgQWRtaW5TZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2FkbWluLW1vZHVsZS11dGlscyc7XG5pbXBvcnQgeyBBcHBBZG1pbiB9IGZyb20gJ0Bwb3Npd2lzZS9hZG1pbi1tb2R1bGUtdXRpbHMnO1xuaW1wb3J0IHsgQXBwQmFzZUNvbXBvbmVudCB9IGZyb20gJ0Bwb3Npd2lzZS9hcHAtYmFzZS1jb21wb25lbnQnO1xuaW1wb3J0IHsgUHJvZHVjdCwgRkFRIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi11dGlsaXRpZXMnO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSwgUGVybWlzc2lvblNlcnZpY2UsIFByb2R1Y3RTZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi1zZXJ2aWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncHctYWRtaW4tZmFxLWxpc3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9mYXFzLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2ZhcXMtbGlzdC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEZhcUxpc3RDb21wb25lbnQgZXh0ZW5kcyBBcHBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIGZvcm06IFVudHlwZWRGb3JtR3JvdXA7XG5cbiAgICBmYXFzOiBGQVFbXSA9IFtdO1xuXG4gICAgZmFxTGlzdDogRkFRW10gPSBbXTtcblxuICAgIGJhY2tVcEZBUTogRkFRW10gPSBbXTtcblxuICAgIHN1Ym1pdHRlZCA9IGZhbHNlO1xuXG4gICAgaXNMb2FkZWQgPSBmYWxzZTtcblxuICAgIEBWaWV3Q2hpbGQoJ2VkaXRGb3JtJywgeyBzdGF0aWM6IGZhbHNlIH0pIGVkaXRGb3JtOiBOZ0Zvcm07XG5cbiAgICBjdXJyZW50RmFxOiBhbnk7XG5cbiAgICBjYXRlZ29yaWVzID0gW107XG5cbiAgICBpc1Byb2R1Y3RFbmFibGVkID0gdHJ1ZTtcblxuICAgIHByb2R1Y3RMaXN0OiBhbnkgPSBbXTtcblxuICAgIHNlYXJjaFRleHQ6IHN0cmluZztcblxuICAgIGFsbFByb2R1Y3RzOiBQcm9kdWN0W10gPSBbXTtcblxuICAgIGFsbEZhcXMgPSBbXTtcblxuICAgIHNob3dMaXN0ID0gdHJ1ZTtcblxuICAgIHNob3dGaWx0ZXJzID0gdHJ1ZTtcblxuICAgIGRlZmF1bHRWYWx1ZSA9IG51bGw7XG5cbiAgICB0b3RhbFJlY29yZHNVbkZpbHRlcmVkOiBudW1iZXI7XG5cbiAgICB0b3RhbFJlY29yZHM6IG51bWJlcjtcblxuICAgIHN1YnNjcmlwdGlvbklkOiBudW1iZXI7XG5cbiAgICBmZWF0dXJlS2V5c0xpc3QgPSBbXTtcblxuICAgIHNlbGVjdGVkRmVhdHVyZUtleXMgPSBbXTtcblxuICAgIGJ1dHRvbkJ1c3kgPSBmYWxzZTtcblxuICAgIGNhdGVnb3J5Rm9yQmFkZ2VzID0gW107XG5cbiAgICBzbHVnOiBhbnk7XG5cbiAgICBmYXFIYXNoTWFwID0ge307XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGFkbWluU2VydmljZTogQWRtaW5TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHByb2R1Y3RTZXJ2aWNlOiBQcm9kdWN0U2VydmljZSxcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICAgICAgdGhpcy5mb3JtID0gQXBwQWRtaW4uZ2V0RmFxRm9ybSgpO1xuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zbHVnID0gUGVybWlzc2lvblNlcnZpY2Uuc2VsZWN0ZWRTdWJzY3JpcHRpb24/LnNsdWc7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uSWQgPSBQZXJtaXNzaW9uU2VydmljZS5zZWxlY3RlZFN1YnNjcmlwdGlvbj8uaWQ7XG4gICAgICAgIHRoaXMuZ2V0Q2F0ZWdvcmllcygpO1xuICAgICAgICB0aGlzLmdldEZhcXMoKTtcbiAgICB9XG4gICAgZ2V0IGYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY29udHJvbHM7XG4gICAgfVxuICAgIHByaXZhdGUgZ2V0RmFxcygpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNhdGVnb3JpZXMgPSBbXTtcbiAgICAgICAgdGhpcy5mYXFIYXNoTWFwID0ge307XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbl9pZDogdGhpcy5zdWJzY3JpcHRpb25JZCxcbiAgICAgICAgICAgIGZlYXR1cmVfa2V5OiB0aGlzLnNlbGVjdGVkRmVhdHVyZUtleXMuam9pbignLCcpIHx8ICcnXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZS5nZXRGYXEocGFyYW1zKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmZhcXMgPSByZXNwb25zZS5mYXFzO1xuICAgICAgICAgICAgdGhpcy5hbGxGYXFzID0gcmVzcG9uc2UuZmFxcztcbiAgICAgICAgICAgIHRoaXMudG90YWxSZWNvcmRzID0gcmVzcG9uc2Uub2JqZWN0X2NvdW50O1xuICAgICAgICAgICAgdGhpcy50b3RhbFJlY29yZHNVbkZpbHRlcmVkID0gcmVzcG9uc2UudW5maWx0ZXJlZF9jb3VudDtcbiAgICAgICAgICAgIHRoaXMuZmFxcyA9IHRoaXMuZmFxcy5tYXAoeCA9PiB7XG4gICAgICAgICAgICAgICAgeC5pc0VkaXQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuYmFja1VwRkFRID0gWy4uLnRoaXMuZmFxc107XG4gICAgICAgICAgICByZXNwb25zZT8uYXZhaWxhYmxlX2NhdGVnb3J5Py5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZmFxSGFzaE1hcFt4LmtleV0gPSB4O1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSByZXNwb25zZS5hdmFpbGFibGVfY2F0ZWdvcnk7XG4gICAgICAgICAgICB0aGlzLmNhdGVnb3J5Rm9yQmFkZ2VzID0gcmVzcG9uc2UuYXZhaWxhYmxlX2NhdGVnb3J5Lm1hcCh4ID0+IHgua2V5KTtcbiAgICAgICAgICAgIGNhdGVnb3JpZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhdGVnb3JpZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlbGVtZW50Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlbGVtZW50LmtleVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmFsbEZhcXMgPSB0aGlzLmZhcXM7XG4gICAgICAgICAgICB0aGlzLmZhcUxpc3QgPSB0aGlzLmZhcXM7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uU3VibWl0KCkge1xuICAgICAgICB0aGlzLmZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgICBpZiAodGhpcy5mb3JtLnZhbGlkKSB7XG4gICAgICAgICAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmZhcXMgPSB0aGlzLmFsbEZhcXM7XG4gICAgICAgICAgICB0aGlzLmFkZE5ldygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25DYW5jZWwoKSB7XG4gICAgICAgIHRoaXMuZmFxcyA9IHRoaXMuYWxsRmFxcztcbiAgICAgICAgdGhpcy5zaG93RmlsdGVycyA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIGZpbHRlciBmYXEgbGlzdCAqL1xuICAgIGZpbHRlckZhcSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoVGV4dCkge1xuICAgICAgICAgICAgY29uc3Qgc2VhcmNoZWRMaXN0ID0gdGhpcy5mYXFMaXN0LmZpbHRlcihcbiAgICAgICAgICAgICAgICBmYXEgPT5cbiAgICAgICAgICAgICAgICAgICAgZmFxWydxdWVzdGlvbiddLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICAgICAgICAgICAgICAgIGZhcVsnYW5zd2VyJ10udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnNlYXJjaFRleHQudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmZhcXMgPSBzZWFyY2hlZExpc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZhcXMgPSB0aGlzLmZhcUxpc3Q7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGROZXcoKSB7XG4gICAgICAgIHRoaXMuYnV0dG9uQnVzeSA9IHRydWU7XG4gICAgICAgIHRoaXMuYWRtaW5TZXJ2aWNlXG4gICAgICAgICAgICAucG9zdEZhcSh0aGlzLmZvcm0udmFsdWUsIHRoaXMuc3Vic2NyaXB0aW9uSWQpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gbmV3IEZBUShyZXNwb25zZS5pZCwgcmVzcG9uc2UucXVlc3Rpb24sIHJlc3BvbnNlLmFuc3dlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRGYXFzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5mYXFzLnVuc2hpZnQoaXRlbSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1Byb2R1Y3RFbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAkKCdbaHJlZj1cIiNmYXFDb2xsYXBzZVwiXScpLnRyaWdnZXIoJ2NsaWNrJyk7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlKCdBZG1pbi5GYXEuQWRkZWRNZXNzYWdlJykpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hZGQoKCkgPT4gKHRoaXMuYnV0dG9uQnVzeSA9IGZhbHNlKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDYXRlZ29yaWVzKCkge1xuICAgICAgICB0aGlzLnByb2R1Y3RTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0UHJvZHVjdHMoe1xuICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbl9pZDogdGhpcy5zdWJzY3JpcHRpb25JZFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzcCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3AucHJvZHVjdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGxQcm9kdWN0cyA9IHJlc3AucHJvZHVjdHM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjdExpc3QgPSB0aGlzLmdyb3VwUHJvZHVjdHMocmVzcC5wcm9kdWN0cyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjdExpc3QudW5zaGlmdCh7IGxhYmVsOiAnU2VsZWN0IFByb2R1Y3QnLCB2YWx1ZTogbnVsbCB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgncHJvZHVjdF9pZCcpLnNldFZhbHVlKHRoaXMucHJvZHVjdExpc3RbMF0udmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlS2V5cyA9IEFycmF5LmZyb20oXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgU2V0KHJlc3AucHJvZHVjdHMubWFwKGl0ZW0gPT4gaXRlbT8uZmVhdHVyZV9rZXkpKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZlYXR1cmVLZXlzTGlzdCA9IGZlYXR1cmVLZXlzLm1hcChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc29ydE9iaihvYmopIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iailcbiAgICAgICAgICAgIC5zb3J0KClcbiAgICAgICAgICAgIC5yZWR1Y2UoKHJlc3VsdCwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBvYmpba2V5XTtcblxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9LCB7fSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBncm91cFByb2R1Y3RzKHByb2R1Y3RzKSB7XG4gICAgICAgIGlmIChwcm9kdWN0cyAmJiBwcm9kdWN0cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBwcm9kdWN0cyA9IHByb2R1Y3RzLmZpbHRlcih4ID0+IHguZGVwZW5kZW5jeV9wcm9kdWN0cz8ubGVuZ3RoIDwgMSAmJiB4LmFjdGl2ZSk7XG4gICAgICAgICAgICBwcm9kdWN0cyA9IGdyb3VwQnkocHJvZHVjdHMsICdjdXJyZW5jeScpO1xuICAgICAgICAgICAgcHJvZHVjdHMgPSB0aGlzLnNvcnRPYmoocHJvZHVjdHMpO1xuICAgICAgICAgICAgbGV0IGdyb3VwZWRBcnJheSA9IFtdO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHAgaW4gcHJvZHVjdHMpIHtcbiAgICAgICAgICAgICAgICBpZiAocCBpbiBwcm9kdWN0cykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHByb2R1Y3RzW3BdLnNvcnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAoYSwgYikgPT4gTnVtYmVyKGIucHJpY2VfcGVyX3VuaXQpIC0gTnVtYmVyKGEucHJpY2VfcGVyX3VuaXQpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwZWRBcnJheS5wdXNoKC4uLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBncm91cGVkQXJyYXkgPSBncm91cGVkQXJyYXkubWFwKHggPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB4LmlkLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogYCR7eC5uYW1lfSB8ICR7eC5yZWdpb259IHwgJHt4LmJpbGxpbmdfZnJlcXVlbmN5fSB8ICR7eC5taW5fdW5pdHN9IHggJHsoXG4gICAgICAgICAgICAgICAgICAgICAgICB4LnByaWNlX3Blcl91bml0IC8gMTAwXG4gICAgICAgICAgICAgICAgICAgICkudG9GaXhlZCgyKX0gfCAke3guY3VycmVuY3l9YFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIGdyb3VwZWRBcnJheTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBvblByb2R1Y3RDaGFuZ2UoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGZWF0dXJlS2V5cyA9IGV2ZW50LnZhbHVlO1xuICAgICAgICB0aGlzLmdldEZhcXMoKTtcbiAgICB9XG5cbiAgICBvbkNoYW5nZShpdGVtKSB7XG4gICAgICAgIHRoaXMuaXNQcm9kdWN0RW5hYmxlZCA9IGl0ZW0udmFsdWUgIT09ICdwcm9kdWN0JztcbiAgICAgICAgaWYgKHRoaXMuaXNQcm9kdWN0RW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgncHJvZHVjdF9pZCcpLnNldFZhbHVlKG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgncHJvZHVjdF9pZCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25VcGRhdGUoZm9ybSkge1xuICAgICAgICB0aGlzLnNob3dGaWx0ZXJzID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgIGlkOiB0aGlzLmN1cnJlbnRGYXEuaWQsXG4gICAgICAgICAgICBxdWVzdGlvbjogZm9ybVsncXVlc3Rpb24nXSxcbiAgICAgICAgICAgIGFuc3dlcjogZm9ybVsnYW5zd2VyJ10sXG4gICAgICAgICAgICBjYXRlZ29yeTogZm9ybVsnY2F0ZWdvcnknXSxcbiAgICAgICAgICAgIHBvc2l0aW9uOiBmb3JtWydwb3NpdGlvbiddLFxuICAgICAgICAgICAgcHJvZHVjdF9pZDogZm9ybVsncHJvZHVjdF9pZCddLFxuICAgICAgICAgICAgZmVhdHVyZV9rZXlzOiBmb3JtWydmZWF0dXJlX2tleXMnXSxcbiAgICAgICAgICAgIGlzX3NoYXJlZF9mYXE6IGZvcm1bJ2lzX3NoYXJlZF9mYXEnXSxcbiAgICAgICAgICAgIGlzX2FkbWluX2ZhcTogZm9ybVsnaXNfYWRtaW5fZmFxJ10sXG4gICAgICAgICAgICBpc19idWlsZF9mYXE6IGZvcm1bJ2lzX2J1aWxkX2ZhcSddXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuYnV0dG9uQnVzeSA9IHRydWU7XG4gICAgICAgIHRoaXMuYWRtaW5TZXJ2aWNlXG4gICAgICAgICAgICAucHV0RmFxKGRhdGEsIHRoaXMuc3Vic2NyaXB0aW9uSWQpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiByZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEZhcSA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEZhcXMoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlKCdBZG1pbi5GYXEuVXBkYXRlZE1lc3NhZ2UnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hZGQoKCkgPT4gKHRoaXMuYnV0dG9uQnVzeSA9IGZhbHNlKSk7XG4gICAgfVxuXG4gICAgb25FZGl0KGZhcTogRkFRKSB7XG4gICAgICAgIHRoaXMuZmFxcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgaXRlbS5pc0VkaXQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZhcS5pc0VkaXQgPSB0cnVlO1xuICAgICAgICB0aGlzLnNob3dGaWx0ZXJzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZmFxcyA9IHRoaXMuZmFxcy5maWx0ZXIoaXRlbSA9PiBpdGVtLmlkID09PSBmYXEuaWQpO1xuICAgICAgICBpZiAoZmFxLnByb2R1Y3RfaWQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaXNQcm9kdWN0RW5hYmxlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzUHJvZHVjdEVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cnJlbnRGYXEgPSB7IC4uLmZhcSB9O1xuICAgIH1cblxuICAgIG9uRGVsZXRlKGZhcTogRkFRKSB7XG4gICAgICAgIHN3YWwuZmlyZSh7XG4gICAgICAgICAgICB0aXRsZTogJ0RlbGV0ZScsXG5cbiAgICAgICAgICAgIGh0bWw6IGBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlP2AsXG4gICAgICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiB0cnVlLFxuICAgICAgICAgICAgcmV2ZXJzZUJ1dHRvbnM6IHRydWUsXG4gICAgICAgICAgICBpY29uOiAnd2FybmluZydcbiAgICAgICAgfSkudGhlbihyZXAgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRtaW5TZXJ2aWNlLmRlbGV0ZUZhcShmYXEuaWQsIHRoaXMuc3Vic2NyaXB0aW9uSWQpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2Vzcyh0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgnQWRtaW4uRmFxLkRlbGV0ZWRNZXNzYWdlJykpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEZhcXMoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25WYWx1ZUNoYW5nZShmYXE6IEZBUSwgdmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgIGlkOiBmYXEuaWQsXG4gICAgICAgICAgICB2aXNpYmxlOiB2YWx1ZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuYWRtaW5TZXJ2aWNlLnB1dEZhcShkYXRhLCB0aGlzLnN1YnNjcmlwdGlvbklkKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlKCdBZG1pbi5GYXEuVXBkYXRlZE1lc3NhZ2UnKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uUHVibGljVmFsdWVDaGFuZ2UoZmFxOiBGQVEsIHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICBpZDogZmFxLmlkLFxuICAgICAgICAgICAgcHVibGljOiB2YWx1ZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuYWRtaW5TZXJ2aWNlLnB1dEZhcShkYXRhLCB0aGlzLnN1YnNjcmlwdGlvbklkKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlKCdBZG1pbi5GYXEuVXBkYXRlZE1lc3NhZ2UnKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uRGlzY2FyZChmYXE6IEZBUSkge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5iYWNrVXBGQVEuZmluZCh4ID0+IHguaWQgPT09IGZhcS5pZCk7XG4gICAgICAgIHRoaXMuY3VycmVudEZhcSA9IHsgLi4uaXRlbSB9O1xuICAgIH1cblxuICAgIG92ZXJyaWRlIG5nT25EZXN0cm95KCkge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJyb3dcIiBbY2xhc3MuY3VzdG9tLWRpc2FibGUtd3JhcHBlcl09XCJidXR0b25CdXN5XCI+XG4gIDxkaXYgY2xhc3M9XCJjb2wtMTIgZC1mbGV4IGZsZXgtd3JhcCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICpuZ0lmPVwic2hvd0xpc3RcIj5cbiAgICA8aDIgY2xhc3M9XCJjYXJkLXRpdGxlIHAtMCBmbG9hdC1zdGFydFwiPkZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zPC9oMj5cbiAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgKm5nSWY9XCJzaG93TGlzdFwiIChjbGljayk9XCJzaG93TGlzdCA9ICFzaG93TGlzdFwiXG4gICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeSBmbG9hdC1lbmRcIiByb2xlPVwiYnV0dG9uXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCI+XG4gICAgICA8aSBjbGFzcz1cImZhIGZhLXBsdXMtY2lyY2xlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiB7eyAnTGFiZWwuQWRkTmV3JyB8IHRyYW5zbG9jbyB9fSBGQVEgPC9hPlxuICA8L2Rpdj5cbjwvZGl2PlxuPCEtLSBBZGQgRkFRIFNlY3Rpb24gLS0+XG48ZGl2ICpuZ0lmPVwiIXNob3dMaXN0XCIgW2NsYXNzLmN1c3RvbS1kaXNhYmxlLXdyYXBwZXJdPVwiYnV0dG9uQnVzeVwiIGNsYXNzPVwicC0yXCI+XG4gIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICA8aDQgY2xhc3M9XCJmdy1ib2xkIG1iLTRcIj57eyAnTGFiZWwuQWRkTmV3JyB8IHRyYW5zbG9jbyB9fSBGQVE8L2g0PlxuICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCIgKG5nU3VibWl0KT1cIm9uU3VibWl0KClcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgY2xhc3M9XCJjb2wtMTJcIiBbbGFiZWxdPVwiJ0FkbWluLkZhcS5RdWVzdGlvbicgfCB0cmFuc2xvY29cIiBuYW1lPVwicXVlc3Rpb25cIlxuICAgICAgICAgICAgW2Vycm9yTXNnXT1cIidBZG1pbi5GYXEuVmFsaWRhdGlvbi5GaWVsZFJlcXVpcmVkJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwicXVlc3Rpb25cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsncXVlc3Rpb24nXS5lcnJvcnMgfVwiIC8+XG4gICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBjbGFzcz1cImNvbC0xMiBxdWlsbC1lZGl0b3JcIlxuICAgICAgICAgICAgW2xhYmVsXT1cIidBZG1pbi5GYXEuQW5zd2VyJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICBuYW1lPVwiYW5zd2VyXCJcbiAgICAgICAgICAgIFtlcnJvck1zZ109XCInQWRtaW4uRmFxLlZhbGlkYXRpb24uRmllbGRSZXF1aXJlZCcgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICAgIDxxdWlsbC1lZGl0b3IgW3N0eWxlc109XCJ7IGhlaWdodDogJzIwMHB4J31cIiBmb3JtQ29udHJvbE5hbWU9XCJhbnN3ZXJcIiBjbGFzcz1cInF1aWxsRWRpdG9yXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydhbnN3ZXInXS5lcnJvcnMgfVwiPlxuICAgICAgICAgICAgPC9xdWlsbC1lZGl0b3I+XG4gICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0yXCI+XG4gICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtzaG93VG9vbHRpcF09XCJ0cnVlXCIgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5GYXEuVG9vbHRpcC5DYXRlZ29yeScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0FkbWluLkZhcS5DYXRlZ29yeScgfCB0cmFuc2xvY29cIiBuYW1lPVwiY2F0ZWdvcnlcIlxuICAgICAgICAgICAgICBbZXJyb3JNc2ddPVwiJ0FkbWluLkZhcS5WYWxpZGF0aW9uLkZpZWxkUmVxdWlyZWQnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICAgIDxwLWRyb3Bkb3duIFtvcHRpb25zXT1cImNhdGVnb3JpZXNcIiBjbGFzcz1cImRyb3Bkb3duLWJnLXRyYW5zcGFyZW50XCIgKG9uQ2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0XCIgZm9ybUNvbnRyb2xOYW1lPVwiY2F0ZWdvcnlcIiBpZD1cImNhdGVnb3J5LWRyb3Bkb3duXCIgW3N0eWxlXT1cInsgd2lkdGg6ICcxMDAlJyB9XCI+XG4gICAgICAgICAgICAgIDwvcC1kcm9wZG93bj5cbiAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMlwiICpyYmFjQWxsb3c9XCInU3Vic2NyaXB0aW9uU3VwZXJBZG1pbidcIj5cbiAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIiBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLkZhcS5Ub29sdGlwLlByb2R1Y3QnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cIidBZG1pbi5GYXEuUHJvZHVjdCcgfCB0cmFuc2xvY29cIiBuYW1lPVwicHJvZHVjdF9pZFwiXG4gICAgICAgICAgICAgIFtlcnJvck1zZ109XCInQWRtaW4uRmFxLlZhbGlkYXRpb24uRmllbGRSZXF1aXJlZCcgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICAgICAgPHAtZHJvcGRvd24gW29wdGlvbnNdPVwicHJvZHVjdExpc3RcIiBjbGFzcz1cImRyb3Bkb3duLWJnLXRyYW5zcGFyZW50XCIgZm9ybUNvbnRyb2xOYW1lPVwicHJvZHVjdF9pZFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlXT1cInsgd2lkdGg6ICcxMDAlJyB9XCI+XG4gICAgICAgICAgICAgIDwvcC1kcm9wZG93bj5cbiAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gRmVhdHVyZXMga2V5cy0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMlwiPlxuICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiIFt0b29sdGlwVGV4dF09XCInQWRtaW4uRmFxLlRvb2x0aXAuRmVhdHVyZXMnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cIidBZG1pbi5GYXEuRmVhdHVyZXMnIHwgdHJhbnNsb2NvXCIgbmFtZT1cImZlYXR1cmVfa2V5c1wiPlxuICAgICAgICAgICAgICA8cC1tdWx0aVNlbGVjdCBbb3B0aW9uc109XCJmZWF0dXJlS2V5c0xpc3RcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBmZWF0dXJlIGtleXNcIiBbc2hvd0hlYWRlcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbc2hvd1RvZ2dsZUFsbF09XCJ0cnVlXCIgZm9ybUNvbnRyb2xOYW1lPVwiZmVhdHVyZV9rZXlzXCIgYXBwZW5kVG89XCJib2R5XCI+PC9wLW11bHRpU2VsZWN0PlxuICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0yXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtzaG93VG9vbHRpcF09XCJ0cnVlXCIgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5GYXEuVG9vbHRpcC5Qb3NpdGlvbicgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCInQWRtaW4uRmFxLlBvc2l0aW9uJyB8IHRyYW5zbG9jb1wiIG5hbWU9XCJwb3NpdGlvblwiXG4gICAgICAgICAgICAgICAgW2Vycm9yTXNnXT1cIidBZG1pbi5GYXEuVmFsaWRhdGlvbi5GaWVsZFJlcXVpcmVkJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvblwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBtaW49XCIwXCIgZm9ybUNvbnRyb2xOYW1lPVwicG9zaXRpb25cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IGNvbC1sZy0yXCI+XG4gICAgICAgICAgICA8bGFiZWw+e3sgJ0FkbWluLkZhcS5WaXNpYmxlJyB8IHRyYW5zbG9jb319IDxzcGFuIGNsYXNzPVwidG9vbHRpcC13cmFwXCIgW2FwcGVuZFRvXT1cIidib2R5J1wiXG4gICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIidBZG1pbi5GYXEuVG9vbHRpcC5WaXNpYmxlJyB8IHRyYW5zbG9jb1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWluZm8tY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2xhYmVsPjxiciAvPlxuICAgICAgICAgICAgPHVpLXN3aXRjaCBmb3JtQ29udHJvbE5hbWU9XCJ2aXNpYmxlXCI+PC91aS1zd2l0Y2g+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IGNvbC1sZy0yXCI+XG4gICAgICAgICAgICA8bGFiZWw+e3sgJ0FkbWluLkZhcS5QdWJsaWMnIHwgdHJhbnNsb2NvfX0gPHNwYW4gY2xhc3M9XCJ0b29sdGlwLXdyYXBcIiBbYXBwZW5kVG9dPVwiJ2JvZHknXCJcbiAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiJ0FkbWluLkZhcS5Ub29sdGlwLlB1YmxpYycgfCB0cmFuc2xvY29cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1pbmZvLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9sYWJlbD48YnIgLz5cbiAgICAgICAgICAgIDx1aS1zd2l0Y2ggZm9ybUNvbnRyb2xOYW1lPVwicHVibGljXCI+PC91aS1zd2l0Y2g+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKnJiYWNBbGxvdz1cIidTdXBlckFkbWluJ1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBjb2wtbGctMlwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidGV4dC13YXJuaW5nXCI+e3sgJ0FkbWluLkZhcS5TaGFyZWRGYXEnIHwgdHJhbnNsb2NvfX0gPHNwYW4gY2xhc3M9XCJ0b29sdGlwLXdyYXBcIlxuICAgICAgICAgICAgICAgIFthcHBlbmRUb109XCInYm9keSdcIiBbcFRvb2x0aXBdPVwiJ0FkbWluLkZhcS5Ub29sdGlwLlNoYXJlZEZhcScgfCB0cmFuc2xvY29cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1pbmZvLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9sYWJlbD48YnIgLz5cbiAgICAgICAgICAgIDx1aS1zd2l0Y2ggbmFtZT1cImlzX3NoYXJlZF9mYXFcIiBmb3JtQ29udHJvbE5hbWU9XCJpc19zaGFyZWRfZmFxXCI+PC91aS1zd2l0Y2g+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IGNvbC1sZy0yXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ZXh0LXdhcm5pbmdcIj57eyAnQWRtaW4uRmFxLkFkbWluRmFxJyB8IHRyYW5zbG9jb319IDxzcGFuIGNsYXNzPVwidG9vbHRpcC13cmFwXCJcbiAgICAgICAgICAgICAgICBbYXBwZW5kVG9dPVwiJ2JvZHknXCIgW3BUb29sdGlwXT1cIidBZG1pbi5GYXEuVG9vbHRpcC5BZG1pbkZhcScgfCB0cmFuc2xvY29cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1pbmZvLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9sYWJlbD48YnIgLz5cbiAgICAgICAgICAgIDx1aS1zd2l0Y2ggZm9ybUNvbnRyb2xOYW1lPVwiaXNfYWRtaW5fZmFxXCIgbmFtZT1cImlzX2FkbWluX2ZhcVwiPjwvdWktc3dpdGNoPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBjb2wtbGctMlwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidGV4dC13YXJuaW5nXCI+e3sgJ0FkbWluLkZhcS5CdWlsZEZhcScgfCB0cmFuc2xvY299fSA8c3BhbiBjbGFzcz1cInRvb2x0aXAtd3JhcFwiXG4gICAgICAgICAgICAgICAgW2FwcGVuZFRvXT1cIidib2R5J1wiIFtwVG9vbHRpcF09XCInQWRtaW4uRmFxLlRvb2x0aXAuQnVpbGRGYXEnIHwgdHJhbnNsb2NvXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtaW5mby1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGFiZWw+PGJyIC8+XG4gICAgICAgICAgICA8dWktc3dpdGNoIGZvcm1Db250cm9sTmFtZT1cImlzX2J1aWxkX2ZhcVwiIG5hbWU9XCJpc19idWlsZF9mYXFcIj48L3VpLXN3aXRjaD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG10LTRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIHRleHQtZW5kXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLWRlZmF1bHQgbWUtMlwiIGRhdGEtYnMtdG9nZ2xlPVwiY29sbGFwc2VcIiBocmVmPVwiI2ZhcUNvbGxhcHNlXCJcbiAgICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCIgYXJpYS1jb250cm9scz1cImZhcUNvbGxhcHNlXCIgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0ucmVzZXQoKTsgc2hvd0xpc3QgPSAhc2hvd0xpc3Q7IGlzUHJvZHVjdEVuYWJsZWQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj4ge3sgJ0J1dHRvbi5DYW5jZWwnIHwgdHJhbnNsb2NvIH19IDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgW2J1dHRvbkJ1c3ldPVwiYnV0dG9uQnVzeVwiPnt7ICdCdXR0b24uU2F2ZScgfCB0cmFuc2xvY28gfX08L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZm9ybT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbjwhLS0gRkFRIExpc3QvRWRpdCAtLT5cbjxkaXYgY2xhc3M9XCJyb3cgZmFxbGlzdCBwcmltZW5nLWRhdGF0YWJsZS1jb250YWluZXIgbXQtMFwiICpuZ0lmPVwic2hvd0xpc3RcIiBbY2xhc3MuY3VzdG9tLWRpc2FibGUtd3JhcHBlcl09XCJidXR0b25CdXN5XCI+XG4gIDxkaXYgY2xhc3M9XCJjb2wtMTIgcHgtMFwiPlxuICAgIDxkaXYgY2xhc3M9XCJ3LTEwMCB0ZXh0LWNlbnRlciBtdC0zXCIgKm5nSWY9XCIhaXNMb2FkZWRcIj5cbiAgICAgIDxwLXByb2dyZXNzU3Bpbm5lciBzdHJva2VXaWR0aD1cIjJcIj4gPC9wLXByb2dyZXNzU3Bpbm5lcj5cbiAgICA8L2Rpdj5cbiAgICA8cC10YWJsZSBbdmFsdWVdPVwiZmFxc1wiIFtjbGFzcy5oaWRlVGFibGVdPVwiZmFxcy5sZW5ndGggPT09IDBcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjYXB0aW9uXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtZmlsdGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS00XCI+XG4gICAgICAgICAgICA8cC1tdWx0aVNlbGVjdCBbc2hvd1RvZ2dsZUFsbF09XCJ0cnVlXCIgW29wdGlvbnNdPVwiZmVhdHVyZUtleXNMaXN0XCIgKG9uQ2hhbmdlKT1cIm9uUHJvZHVjdENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggYnkgRmVhdHVyZSBrZXlzXCIgW3Nob3dIZWFkZXJdPVwidHJ1ZVwiIG1heFNlbGVjdGVkTGFiZWxzPVwiMlwiIGFwcGVuZFRvPVwiYm9keVwiPlxuICAgICAgICAgICAgPC9wLW11bHRpU2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWVuZFwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zZWFyY2ggbXQtMiBtZS0yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0XCIgcElucHV0VGV4dCBzaXplPVwiNTBcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaCBGQVEuLi5cIlxuICAgICAgICAgICAgICAoaW5wdXQpPVwiZmlsdGVyRmFxKClcIiBjbGFzcz1cIm13LTkwXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiPnt7ICdBZG1pbi5GYXEuUXVlc3Rpb24nIHwgdHJhbnNsb2NvIH19PC90aD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCI+e3sgJ0FkbWluLkZhcS5BbnN3ZXInIHwgdHJhbnNsb2NvIH19PC90aD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCI+e3sgJ0FkbWluLkZhcS5Qb3NpdGlvbicgfCB0cmFuc2xvY28gfX08L3RoPlxuICAgICAgICAgIDx0aCBzY29wZT1cInRydWVcIj57eyAnQWRtaW4uRmFxLkNhdGVnb3J5JyB8IHRyYW5zbG9jbyB9fTwvdGg+XG4gICAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiPnt7ICdBZG1pbi5GYXEuVmlzaWJsZScgfCB0cmFuc2xvY28gfX08L3RoPlxuICAgICAgICAgIDx0aCBzY29wZT1cInRydWVcIj57eyAnQWRtaW4uRmFxLlB1YmxpYycgfCB0cmFuc2xvY28gfX08L3RoPlxuICAgICAgICAgIDx0aCBzY29wZT1cInRydWVcIiBjbGFzcz1cImFjdGlvbnMtbGlzdC10d29cIj57eyAnTGFiZWwuQWN0aW9ucycgfCB0cmFuc2xvY28gfX08L3RoPlxuICAgICAgICA8L3RyPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJib2R5XCIgbGV0LWZhcT5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJRdWVzdGlvblwiPnt7IGZhcS5xdWVzdGlvbiB9fSA8L3RkPlxuICAgICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJBbnN3ZXJcIj57eyhmYXEuYW5zd2VyfHJlbW92ZUh0bWwpfHRleHRUcnVuY2F0ZTogMjAwfX0gPC90ZD5cbiAgICAgICAgICA8dGQgZGF0YS1oZWFkPVwiUG9zaXRpb25cIj57e2ZhcS5wb3NpdGlvbn19PC90ZD5cbiAgICAgICAgICA8dGQgZGF0YS1oZWFkPVwiQ2F0ZWdvcnlcIj5cbiAgICAgICAgICAgIDxzcGFuIFthcHBEeW5hbWljQmFkZ2VdPVwieyBpdGVtc0FycmF5OiBjYXRlZ29yeUZvckJhZGdlcywgaXRlbTogZmFxPy5jYXRlZ29yeSB9XCIgY29sb3I9XCJjeWFuXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJiYWRnZSBtcy0xXCI+XG4gICAgICAgICAgICAgIDxzcGFuIFtwVG9vbHRpcF09XCJmYXE/LmZlYXR1cmVfa2V5cz8uam9pbignLCcpXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+e3sgZmFxSGFzaE1hcFtmYXE/LmNhdGVnb3J5XT8ubmFtZVxuICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0xIGJhZGdlIGJnLXdhcm5pbmdcIiAqbmdJZj1cImZhcS5pc19zaGFyZWRfZmFxIHx8IGZhcS5pc19hZG1pbl9mYXEgfHwgZmFxLmlzX2J1aWxkX2ZhcVwiPlN1cGVyXG4gICAgICAgICAgICAgIEZBUTwvc3Bhbj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJWaXNpYmxlXCI+XG4gICAgICAgICAgICA8c3BhbiBbYXBwRHluYW1pY0JhZGdlXT1cInsgaXRlbXNBcnJheTogW3RydWUsIGZhbHNlXSwgaXRlbTogZmFxPy52aXNpYmxlIH1cIiBjb2xvcj1cInN1Y2Nlc3MtZGFuZ2VyXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJiYWRnZVwiPnt7IGZhcT8udmlzaWJsZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJQdWJsaWNcIj5cbiAgICAgICAgICAgIDxzcGFuIFthcHBEeW5hbWljQmFkZ2VdPVwieyBpdGVtc0FycmF5OiBbdHJ1ZSwgZmFsc2VdLCBpdGVtOiBmYXE/LnB1YmxpYyB9XCIgY29sb3I9XCJzdWNjZXNzLWRhbmdlclwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2VcIj57eyBmYXE/LnB1YmxpYyB9fTwvc3Bhbj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJBY3Rpb25cIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cImxpc3QtdW5zdHlsZWQgbGlzdC1pbmxpbmVcIj5cbiAgICAgICAgICAgICAgPGxpIG5nYlRvb2x0aXA9XCJFZGl0XCIgY2xhc3M9XCJtZS0yIG1lLXNtLTJcIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWVkaXQgZWRpdC1pY29uXCIgKGNsaWNrKT1cIm9uRWRpdChmYXEpXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8bGkgbmdiVG9vbHRpcD1cIkRlbGV0ZVwiIGNsYXNzPVwibWUtMiBtZS1zbS0yXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10cmFzaCBkZWxldGUtaWNvblwiIChjbGljayk9XCJvbkRlbGV0ZShmYXEpXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8bGkgbmdiVG9vbHRpcD1cIlZpZXcgZmFxXCIgKm5nSWY9XCJmYXE/LnZpc2libGVcIj5cbiAgICAgICAgICAgICAgICA8YSBbcm91dGVyTGlua109XCJbJy8nLHNsdWcsJ2ZhcScsZmFxLmlkXVwiIHRhcmdldD1cIl9ibGFua1wiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1leWVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHIgKm5nSWY9XCJmYXEuaXNFZGl0XCI+XG4gICAgICAgICAgPHRkIGNvbHNwYW49XCI3XCI+XG4gICAgICAgICAgICA8Zm9ybSAobmdTdWJtaXQpPVwib25TdWJtaXQoKVwiXG4gICAgICAgICAgICAgICNlZGl0Rm9ybT1cIm5nRm9ybVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJuYW1lXCI+e3sgJ0FkbWluLkZhcS5RdWVzdGlvbicgfCB0cmFuc2xvY28gfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcmVxdWlyZWQgWyhuZ01vZGVsKV09XCJjdXJyZW50RmFxLnF1ZXN0aW9uXCIgbmFtZT1cInF1ZXN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICNxdWVzdGlvbj1cIm5nTW9kZWxcIiAvPlxuICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImZvcm0tdGV4dCB0ZXh0LW11dGVkIGRhbmdlclwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIiFxdWVzdGlvbi52YWxpZCAmJiAocXVlc3Rpb24uZGlydHkgfHwgcXVlc3Rpb24udG91Y2hlZClcIj4gUGxlYXNlIGVudGVyIGEgcXVlc3Rpb248L3NtYWxsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ0FkbWluLkZhcS5BbnN3ZXInIHwgdHJhbnNsb2NvIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8cXVpbGwtZWRpdG9yIFtzdHlsZXNdPVwieyBoZWlnaHQ6ICcyMDBweCcgfVwiIFsobmdNb2RlbCldPVwiY3VycmVudEZhcS5hbnN3ZXJcIiBuYW1lPVwiYW5zd2VyXCIgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICNhbnN3ZXI9XCJuZ01vZGVsXCI+PC9xdWlsbC1lZGl0b3I+XG4gICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiZm9ybS10ZXh0IHRleHQtbXV0ZWQgZGFuZ2VyXCIgKm5nSWY9XCIhYW5zd2VyLnZhbGlkICYmIChhbnN3ZXIuZGlydHkgfHwgYW5zd2VyLnRvdWNoZWQpXCI+XG4gICAgICAgICAgICAgICAgICBQbGVhc2UgZW50ZXIgYW4gYW5zd2VyPC9zbWFsbD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbm8tZ3V0dGVycyBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMlwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdBZG1pbi5GYXEuQ2F0ZWdvcnknIHwgdHJhbnNsb2NvfX0gPHNwYW4gY2xhc3M9XCJ0b29sdGlwLXdyYXBcIiBbYXBwZW5kVG9dPVwiJ2JvZHknXCJcbiAgICAgICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiJ0FkbWluLkZhcS5Ub29sdGlwLkNhdGVnb3J5JyB8IHRyYW5zbG9jb1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWluZm8tY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPjxiciAvPlxuICAgICAgICAgICAgICAgICAgPHAtZHJvcGRvd24gW29wdGlvbnNdPVwiY2F0ZWdvcmllc1wiIG5hbWU9XCJjYXRlZ29yeVwiIFtyZXF1aXJlZF09XCJ0cnVlXCIgWyhuZ01vZGVsKV09XCJjdXJyZW50RmFxLmNhdGVnb3J5XCJcbiAgICAgICAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudClcIiBbc3R5bGVdPVwieyB3aWR0aDogJzEwMCUnIH1cIiBjbGFzcz1cImN1c3RvbS1kcm9wZG93blwiPlxuICAgICAgICAgICAgICAgICAgPC9wLWRyb3Bkb3duPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMlwiICpyYmFjQWxsb3c9XCInU3Vic2NyaXB0aW9uU3VwZXJBZG1pbidcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnQWRtaW4uRmFxLlByb2R1Y3QnIHwgdHJhbnNsb2NvfX0gPHNwYW4gY2xhc3M9XCJ0b29sdGlwLXdyYXBcIiBbYXBwZW5kVG9dPVwiJ2JvZHknXCJcbiAgICAgICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiJ0FkbWluLkZhcS5Ub29sdGlwLlByb2R1Y3QnIHwgdHJhbnNsb2NvXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtaW5mby1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+PGJyIC8+XG4gICAgICAgICAgICAgICAgICA8cC1kcm9wZG93biBbb3B0aW9uc109XCJwcm9kdWN0TGlzdFwiIG5hbWU9XCJwcm9kdWN0X2lkXCIgWyhuZ01vZGVsKV09XCJjdXJyZW50RmFxLnByb2R1Y3RfaWRcIlxuICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwieyB3aWR0aDogJzEwMCUnIH1cIiBjbGFzcz1cImN1c3RvbS1kcm9wZG93blwiPlxuICAgICAgICAgICAgICAgICAgPC9wLWRyb3Bkb3duPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwhLS0gZmVhdHVyZSBrZXlzIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMlwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cIlwiPnt7ICdBZG1pbi5GYXEuRmVhdHVyZXMnIHwgdHJhbnNsb2NvIH19IDxzcGFuIGNsYXNzPVwidG9vbHRpcC13cmFwXCIgW2FwcGVuZFRvXT1cIidib2R5J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiJ0FkbWluLkZhcS5Ub29sdGlwLkZlYXR1cmVzJyB8IHRyYW5zbG9jb1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtaW5mby1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8cC1tdWx0aVNlbGVjdCBbb3B0aW9uc109XCJmZWF0dXJlS2V5c0xpc3RcIiBbc2hvd0hlYWRlcl09XCJ0cnVlXCIgW3Nob3dUb2dnbGVBbGxdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50RmFxLmZlYXR1cmVfa2V5c1wiIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCI+PC9wLW11bHRpU2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0yXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiXCI+e3sgJ0FkbWluLkZhcS5Qb3NpdGlvbicgfCB0cmFuc2xvY28gfX0gPHNwYW4gY2xhc3M9XCJ0b29sdGlwLXdyYXBcIiBbYXBwZW5kVG9dPVwiJ2JvZHknXCJcbiAgICAgICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiJ0FkbWluLkZhcS5Ub29sdGlwLlBvc2l0aW9uJyB8IHRyYW5zbG9jb1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWluZm8tY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBuYW1lPVwicG9zaXRpb25cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY3VycmVudEZhcS5wb3NpdGlvblwiIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IGNvbC1sZy0xXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ0FkbWluLkZhcS5WaXNpYmxlJyB8IHRyYW5zbG9jb319IDxzcGFuIGNsYXNzPVwidG9vbHRpcC13cmFwIFwiIFthcHBlbmRUb109XCInYm9keSdcIlxuICAgICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCInQWRtaW4uRmFxLlRvb2x0aXAuVmlzaWJsZScgfCB0cmFuc2xvY29cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1pbmZvLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDx1aS1zd2l0Y2ggY2xhc3M9XCJ2aXNpYmxlXCIgW2NoZWNrZWRdPVwiY3VycmVudEZhcS52aXNpYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25WYWx1ZUNoYW5nZShjdXJyZW50RmFxLCAkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvdWktc3dpdGNoPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IGNvbC1sZy0xXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ0FkbWluLkZhcS5QdWJsaWMnIHwgdHJhbnNsb2NvfX0gPHNwYW4gY2xhc3M9XCJ0b29sdGlwLXdyYXBcIiBbYXBwZW5kVG9dPVwiJ2JvZHknXCJcbiAgICAgICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiJ0FkbWluLkZhcS5Ub29sdGlwLlB1YmxpYycgfCB0cmFuc2xvY29cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1pbmZvLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDx1aS1zd2l0Y2ggY2xhc3M9XCJwdWJsaWNcIiBbY2hlY2tlZF09XCJjdXJyZW50RmFxLnB1YmxpY1wiXG4gICAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uUHVibGljVmFsdWVDaGFuZ2UoY3VycmVudEZhcSwgJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICA8L3VpLXN3aXRjaD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiICpyYmFjQWxsb3c9XCInU3VwZXJBZG1pbidcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgY29sLWxnLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInRleHQtd2FybmluZ1wiPnt7ICdBZG1pbi5GYXEuU2hhcmVkRmFxJyB8IHRyYW5zbG9jb319IDxzcGFuIGNsYXNzPVwidG9vbHRpcC13cmFwXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXBwZW5kVG9dPVwiJ2JvZHknXCIgW3BUb29sdGlwXT1cIidBZG1pbi5GYXEuVG9vbHRpcC5TaGFyZWRGYXEnIHwgdHJhbnNsb2NvXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtaW5mby1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+PGJyIC8+XG4gICAgICAgICAgICAgICAgICA8dWktc3dpdGNoIFtjaGVja2VkXT1cImN1cnJlbnRGYXEuaXNfc2hhcmVkX2ZhcVwiIG5hbWU9XCJpc19zaGFyZWRfZmFxXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50RmFxLmlzX3NoYXJlZF9mYXFcIj48L3VpLXN3aXRjaD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgY29sLWxnLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInRleHQtd2FybmluZ1wiPnt7ICdBZG1pbi5GYXEuQWRtaW5GYXEnIHwgdHJhbnNsb2NvfX0gPHNwYW4gY2xhc3M9XCJ0b29sdGlwLXdyYXBcIlxuICAgICAgICAgICAgICAgICAgICAgIFthcHBlbmRUb109XCInYm9keSdcIiBbcFRvb2x0aXBdPVwiJ0FkbWluLkZhcS5Ub29sdGlwLkFkbWluRmFxJyB8IHRyYW5zbG9jb1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWluZm8tY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPjxiciAvPlxuICAgICAgICAgICAgICAgICAgPHVpLXN3aXRjaCBbY2hlY2tlZF09XCJjdXJyZW50RmFxLmlzX2FkbWluX2ZhcVwiIG5hbWU9XCJpc19hZG1pbl9mYXFcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImN1cnJlbnRGYXEuaXNfYWRtaW5fZmFxXCI+PC91aS1zd2l0Y2g+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IGNvbC1sZy0yXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ZXh0LXdhcm5pbmdcIj57eyAnQWRtaW4uRmFxLkJ1aWxkRmFxJyB8IHRyYW5zbG9jb319IDxzcGFuIGNsYXNzPVwidG9vbHRpcC13cmFwXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXBwZW5kVG9dPVwiJ2JvZHknXCIgW3BUb29sdGlwXT1cIidBZG1pbi5GYXEuVG9vbHRpcC5CdWlsZEZhcScgfCB0cmFuc2xvY29cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1pbmZvLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD48YnIgLz5cbiAgICAgICAgICAgICAgICAgIDx1aS1zd2l0Y2ggW2NoZWNrZWRdPVwiY3VycmVudEZhcS5pc19idWlsZF9mYXFcIiBuYW1lPVwiaXNfYnVpbGRfZmFxXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50RmFxLmlzX2J1aWxkX2ZhcVwiPjwvdWktc3dpdGNoPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWVuZFwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpyYmFjQWxsb3c9XCInUGFnZXMuQWRtaW4uRkFRLkRlbGV0ZSdcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLWRhbmdlciBtZS0yXCIgKm5nSWY9XCIhZmFxLmlzRWRpdFwiIChjbGljayk9XCJvbkRlbGV0ZShmYXEpXCI+IERlbGV0ZVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1kZWZhdWx0IG1lLTJcIiAqbmdJZj1cImZhcS5pc0VkaXRcIiBkYXRhLWJzLXRvZ2dsZT1cImNvbGxhcHNlXCJcbiAgICAgICAgICAgICAgICBkYXRhLWJzLXRhcmdldD1cIiNjb2xsYXBzZUVkaXRcIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIiBhcmlhLWNvbnRyb2xzPVwiY29sbGFwc2VFZGl0XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZmFxLmlzRWRpdCA9ICFmYXEuaXNFZGl0OyBvbkNhbmNlbCgpXCI+IHt7ICdCdXR0b24uQ2FuY2VsJyB8IHRyYW5zbG9jbyB9fSA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqcmJhY0FsbG93PVwiJ1BhZ2VzLkFkbWluLkZBUS5FZGl0J1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbWUtMlwiICpuZ0lmPVwiIWZhcS5pc0VkaXRcIiAoY2xpY2spPVwib25FZGl0KGZhcSlcIj4ge3sgJ0J1dHRvbi5FZGl0JyB8XG4gICAgICAgICAgICAgICAgICB0cmFuc2xvY28gfX0gPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtZS0yXCIgW2J1dHRvbkJ1c3ldPVwiYnV0dG9uQnVzeVwiICpuZ0lmPVwiZmFxLmlzRWRpdFwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25VcGRhdGUoY3VycmVudEZhcSlcIj4ge3sgJ0J1dHRvbi5VcGRhdGUnIHwgdHJhbnNsb2NvIH19IDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvcC10YWJsZT5cbiAgICA8cHctbm8tZGF0YSBbd2l0aEltYWdlXT1cInRydWVcIiBbbWVzc2FnZV09XCInU2VhcmNoLk5vRGF0YU1lc3NhZ2UnIHwgdHJhbnNsb2NvXCJcbiAgICAgIFtkZXNjcmlwdGlvbl09XCInU2VhcmNoLk5vRGF0YURlc2NyaXB0aW9uJyB8IHRyYW5zbG9jb1wiICpuZ0lmPVwidG90YWxSZWNvcmRzVW5GaWx0ZXJlZCA9PT0gMFwiPiA8L3B3LW5vLWRhdGE+XG4gIDwvZGl2PlxuICA8cHctbm8tZGF0YSBbd2l0aEltYWdlXT1cInRydWVcIiBbbWVzc2FnZV09XCInQWRtaW4uRmFxLk5vRGF0YU1lc3NhZ2UnIHwgdHJhbnNsb2NvXCIgKm5nSWY9XCJmYXFzLmxlbmd0aCA9PT0gMFwiPlxuICA8L3B3LW5vLWRhdGE+XG48L2Rpdj5cbiJdfQ==
296
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFxcy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9mYXFzL2ZhcXMtbGlzdC9mYXFzLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hZG1pbi1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL2ZhcXMvZmFxcy1saXN0L2ZhcXMtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xGLE9BQU8sRUFBb0IsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxPQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxJQUFJLE1BQU0sYUFBYSxDQUFDO0FBRS9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFXLEdBQUcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU83RixNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsZ0JBQWdCO0lBcURsRCxZQUNZLGFBQTRCLEVBQzVCLFlBQTBCLEVBQzFCLGNBQThCLEVBQ3RDLFFBQWtCO1FBRWxCLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUxSLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGlCQUFZLEdBQVosWUFBWSxDQUFj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Z0Isc0xDaEI3Qiw4M21CQXFWQTs7NEZEclVhLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDSSxtQkFBbUI7aUtBaUJhLFFBQVE7c0JBQWpELFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0b3IsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtR3JvdXAsIE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCBncm91cEJ5IGZyb20gJ2xvZGFzaC9ncm91cEJ5JztcbmltcG9ydCBzd2FsIGZyb20gJ3N3ZWV0YWxlcnQyJztcblxuaW1wb3J0IHsgQWRtaW5TZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2FkbWluLW1vZHVsZS11dGlscyc7XG5pbXBvcnQgeyBBcHBBZG1pbiB9IGZyb20gJ0Bwb3Npd2lzZS9hZG1pbi1tb2R1bGUtdXRpbHMnO1xuaW1wb3J0IHsgQXBwQmFzZUNvbXBvbmVudCB9IGZyb20gJ0Bwb3Npd2lzZS9hcHAtYmFzZS1jb21wb25lbnQnO1xuaW1wb3J0IHsgUHJvZHVjdCwgRkFRIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi11dGlsaXRpZXMnO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSwgUGVybWlzc2lvblNlcnZpY2UsIFByb2R1Y3RTZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi1zZXJ2aWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncHctYWRtaW4tZmFxLWxpc3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9mYXFzLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2ZhcXMtbGlzdC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEZhcUxpc3RDb21wb25lbnQgZXh0ZW5kcyBBcHBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIGZvcm06IFVudHlwZWRGb3JtR3JvdXA7XG5cbiAgICBmYXFzOiBGQVFbXSA9IFtdO1xuXG4gICAgZmFxTGlzdDogRkFRW10gPSBbXTtcblxuICAgIGJhY2tVcEZBUTogRkFRW10gPSBbXTtcblxuICAgIHN1Ym1pdHRlZCA9IGZhbHNlO1xuXG4gICAgaXNMb2FkZWQgPSBmYWxzZTtcblxuICAgIEBWaWV3Q2hpbGQoJ2VkaXRGb3JtJywgeyBzdGF0aWM6IGZhbHNlIH0pIGVkaXRGb3JtOiBOZ0Zvcm07XG5cbiAgICBjdXJyZW50RmFxOiBhbnk7XG5cbiAgICBjYXRlZ29yaWVzID0gW107XG5cbiAgICBpc1Byb2R1Y3RFbmFibGVkID0gdHJ1ZTtcblxuICAgIHByb2R1Y3RMaXN0OiBhbnkgPSBbXTtcblxuICAgIHNlYXJjaFRleHQ6IHN0cmluZztcblxuICAgIGFsbFByb2R1Y3RzOiBQcm9kdWN0W10gPSBbXTtcblxuICAgIGFsbEZhcXMgPSBbXTtcblxuICAgIHNob3dMaXN0ID0gdHJ1ZTtcblxuICAgIHNob3dGaWx0ZXJzID0gdHJ1ZTtcblxuICAgIGRlZmF1bHRWYWx1ZSA9IG51bGw7XG5cbiAgICB0b3RhbFJlY29yZHNVbkZpbHRlcmVkOiBudW1iZXI7XG5cbiAgICB0b3RhbFJlY29yZHM6IG51bWJlcjtcblxuICAgIHN1YnNjcmlwdGlvbklkOiBudW1iZXI7XG5cbiAgICBmZWF0dXJlS2V5c0xpc3QgPSBbXTtcblxuICAgIHNlbGVjdGVkRmVhdHVyZUtleXMgPSBbXTtcblxuICAgIGJ1dHRvbkJ1c3kgPSBmYWxzZTtcblxuICAgIGNhdGVnb3J5Rm9yQmFkZ2VzID0gW107XG5cbiAgICBzbHVnOiBhbnk7XG5cbiAgICBmYXFIYXNoTWFwID0ge307XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGFkbWluU2VydmljZTogQWRtaW5TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHByb2R1Y3RTZXJ2aWNlOiBQcm9kdWN0U2VydmljZSxcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICAgICAgdGhpcy5mb3JtID0gQXBwQWRtaW4uZ2V0RmFxRm9ybSgpO1xuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zbHVnID0gUGVybWlzc2lvblNlcnZpY2Uuc2VsZWN0ZWRTdWJzY3JpcHRpb24/LnNsdWc7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uSWQgPSBQZXJtaXNzaW9uU2VydmljZS5zZWxlY3RlZFN1YnNjcmlwdGlvbj8uaWQ7XG4gICAgICAgIHRoaXMuZ2V0Q2F0ZWdvcmllcygpO1xuICAgICAgICB0aGlzLmdldEZhcXMoKTtcbiAgICB9XG4gICAgZ2V0IGYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY29udHJvbHM7XG4gICAgfVxuICAgIHByaXZhdGUgZ2V0RmFxcygpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNhdGVnb3JpZXMgPSBbXTtcbiAgICAgICAgdGhpcy5mYXFIYXNoTWFwID0ge307XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbl9pZDogdGhpcy5zdWJzY3JpcHRpb25JZCxcbiAgICAgICAgICAgIGZlYXR1cmVfa2V5OiB0aGlzLnNlbGVjdGVkRmVhdHVyZUtleXMuam9pbignLCcpIHx8ICcnXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZS5nZXRGYXEocGFyYW1zKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ3Jlc3BvbnNlJywgcmVzcG9uc2UpO1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmZhcXMgPSByZXNwb25zZS5mYXFzO1xuICAgICAgICAgICAgdGhpcy5hbGxGYXFzID0gcmVzcG9uc2UuZmFxcztcbiAgICAgICAgICAgIHRoaXMudG90YWxSZWNvcmRzID0gcmVzcG9uc2Uub2JqZWN0X2NvdW50O1xuICAgICAgICAgICAgdGhpcy50b3RhbFJlY29yZHNVbkZpbHRlcmVkID0gcmVzcG9uc2UudW5maWx0ZXJlZF9jb3VudDtcbiAgICAgICAgICAgIHRoaXMuZmFxcyA9IHRoaXMuZmFxcy5tYXAoeCA9PiB7XG4gICAgICAgICAgICAgICAgeC5pc0VkaXQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMuYmFja1VwRkFRID0gWy4uLnRoaXMuZmFxc107XG4gICAgICAgICAgICByZXNwb25zZT8uYXZhaWxhYmxlX2NhdGVnb3J5Py5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZmFxSGFzaE1hcFt4LmtleV0gPSB4O1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSByZXNwb25zZS5hdmFpbGFibGVfY2F0ZWdvcnk7XG4gICAgICAgICAgICB0aGlzLmNhdGVnb3J5Rm9yQmFkZ2VzID0gcmVzcG9uc2UuYXZhaWxhYmxlX2NhdGVnb3J5Lm1hcCh4ID0+IHgua2V5KTtcbiAgICAgICAgICAgIGNhdGVnb3JpZXMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNhdGVnb3JpZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlbGVtZW50Lm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlbGVtZW50LmtleVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmFsbEZhcXMgPSB0aGlzLmZhcXM7XG4gICAgICAgICAgICB0aGlzLmZhcUxpc3QgPSB0aGlzLmZhcXM7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uU3VibWl0KCkge1xuICAgICAgICB0aGlzLmZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgICAgICBpZiAodGhpcy5mb3JtLnZhbGlkKSB7XG4gICAgICAgICAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmZhcXMgPSB0aGlzLmFsbEZhcXM7XG4gICAgICAgICAgICB0aGlzLmFkZE5ldygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25DYW5jZWwoKSB7XG4gICAgICAgIHRoaXMuZmFxcyA9IHRoaXMuYWxsRmFxcztcbiAgICAgICAgdGhpcy5zaG93RmlsdGVycyA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqIEZ1bmN0aW9uIHRvIGZpbHRlciBmYXEgbGlzdCAqL1xuICAgIGZpbHRlckZhcSgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VhcmNoVGV4dCkge1xuICAgICAgICAgICAgY29uc3Qgc2VhcmNoZWRMaXN0ID0gdGhpcy5mYXFMaXN0LmZpbHRlcihcbiAgICAgICAgICAgICAgICBmYXEgPT5cbiAgICAgICAgICAgICAgICAgICAgZmFxWydxdWVzdGlvbiddLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICAgICAgICAgICAgICAgIGZhcVsnYW5zd2VyJ10udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLnNlYXJjaFRleHQudG9Mb3dlckNhc2UoKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmZhcXMgPSBzZWFyY2hlZExpc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZhcXMgPSB0aGlzLmZhcUxpc3Q7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZGROZXcoKSB7XG4gICAgICAgIHRoaXMuYnV0dG9uQnVzeSA9IHRydWU7XG4gICAgICAgIHRoaXMuYWRtaW5TZXJ2aWNlXG4gICAgICAgICAgICAucG9zdEZhcSh0aGlzLmZvcm0udmFsdWUsIHRoaXMuc3Vic2NyaXB0aW9uSWQpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gbmV3IEZBUShyZXNwb25zZS5pZCwgcmVzcG9uc2UucXVlc3Rpb24sIHJlc3BvbnNlLmFuc3dlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRGYXFzKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5mYXFzLnVuc2hpZnQoaXRlbSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1Byb2R1Y3RFbmFibGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAkKCdbaHJlZj1cIiNmYXFDb2xsYXBzZVwiXScpLnRyaWdnZXIoJ2NsaWNrJyk7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlKCdBZG1pbi5GYXEuQWRkZWRNZXNzYWdlJykpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hZGQoKCkgPT4gKHRoaXMuYnV0dG9uQnVzeSA9IGZhbHNlKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDYXRlZ29yaWVzKCkge1xuICAgICAgICB0aGlzLnByb2R1Y3RTZXJ2aWNlXG4gICAgICAgICAgICAuZ2V0UHJvZHVjdHMoe1xuICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbl9pZDogdGhpcy5zdWJzY3JpcHRpb25JZFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzcCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3AucHJvZHVjdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGxQcm9kdWN0cyA9IHJlc3AucHJvZHVjdHM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjdExpc3QgPSB0aGlzLmdyb3VwUHJvZHVjdHMocmVzcC5wcm9kdWN0cyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjdExpc3QudW5zaGlmdCh7IGxhYmVsOiAnU2VsZWN0IFByb2R1Y3QnLCB2YWx1ZTogbnVsbCB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgncHJvZHVjdF9pZCcpLnNldFZhbHVlKHRoaXMucHJvZHVjdExpc3RbMF0udmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlS2V5cyA9IEFycmF5LmZyb20oXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgU2V0KHJlc3AucHJvZHVjdHMubWFwKGl0ZW0gPT4gaXRlbT8uZmVhdHVyZV9rZXkpKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZlYXR1cmVLZXlzTGlzdCA9IGZlYXR1cmVLZXlzLm1hcChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc29ydE9iaihvYmopIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iailcbiAgICAgICAgICAgIC5zb3J0KClcbiAgICAgICAgICAgIC5yZWR1Y2UoKHJlc3VsdCwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBvYmpba2V5XTtcblxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9LCB7fSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBncm91cFByb2R1Y3RzKHByb2R1Y3RzKSB7XG4gICAgICAgIGlmIChwcm9kdWN0cyAmJiBwcm9kdWN0cz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBwcm9kdWN0cyA9IHByb2R1Y3RzLmZpbHRlcih4ID0+IHguZGVwZW5kZW5jeV9wcm9kdWN0cz8ubGVuZ3RoIDwgMSAmJiB4LmFjdGl2ZSk7XG4gICAgICAgICAgICBwcm9kdWN0cyA9IGdyb3VwQnkocHJvZHVjdHMsICdjdXJyZW5jeScpO1xuICAgICAgICAgICAgcHJvZHVjdHMgPSB0aGlzLnNvcnRPYmoocHJvZHVjdHMpO1xuICAgICAgICAgICAgbGV0IGdyb3VwZWRBcnJheSA9IFtdO1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHAgaW4gcHJvZHVjdHMpIHtcbiAgICAgICAgICAgICAgICBpZiAocCBpbiBwcm9kdWN0cykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHByb2R1Y3RzW3BdLnNvcnQoXG4gICAgICAgICAgICAgICAgICAgICAgICAoYSwgYikgPT4gTnVtYmVyKGIucHJpY2VfcGVyX3VuaXQpIC0gTnVtYmVyKGEucHJpY2VfcGVyX3VuaXQpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGdyb3VwZWRBcnJheS5wdXNoKC4uLnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBncm91cGVkQXJyYXkgPSBncm91cGVkQXJyYXkubWFwKHggPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB4LmlkLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogYCR7eC5uYW1lfSB8ICR7eC5yZWdpb259IHwgJHt4LmJpbGxpbmdfZnJlcXVlbmN5fSB8ICR7eC5taW5fdW5pdHN9IHggJHsoXG4gICAgICAgICAgICAgICAgICAgICAgICB4LnByaWNlX3Blcl91bml0IC8gMTAwXG4gICAgICAgICAgICAgICAgICAgICkudG9GaXhlZCgyKX0gfCAke3guY3VycmVuY3l9YFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIGdyb3VwZWRBcnJheTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBvblByb2R1Y3RDaGFuZ2UoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGZWF0dXJlS2V5cyA9IGV2ZW50LnZhbHVlO1xuICAgICAgICB0aGlzLmdldEZhcXMoKTtcbiAgICB9XG5cbiAgICBvbkNoYW5nZShpdGVtKSB7XG4gICAgICAgIHRoaXMuaXNQcm9kdWN0RW5hYmxlZCA9IGl0ZW0udmFsdWUgIT09ICdwcm9kdWN0JztcbiAgICAgICAgaWYgKHRoaXMuaXNQcm9kdWN0RW5hYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgncHJvZHVjdF9pZCcpLnNldFZhbHVlKG51bGwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mb3JtLmdldCgncHJvZHVjdF9pZCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25VcGRhdGUoZm9ybSkge1xuICAgICAgICB0aGlzLnNob3dGaWx0ZXJzID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgIGlkOiB0aGlzLmN1cnJlbnRGYXEuaWQsXG4gICAgICAgICAgICBxdWVzdGlvbjogZm9ybVsncXVlc3Rpb24nXSxcbiAgICAgICAgICAgIGFuc3dlcjogZm9ybVsnYW5zd2VyJ10sXG4gICAgICAgICAgICBjYXRlZ29yeTogZm9ybVsnY2F0ZWdvcnknXSxcbiAgICAgICAgICAgIHBvc2l0aW9uOiBmb3JtWydwb3NpdGlvbiddLFxuICAgICAgICAgICAgcHJvZHVjdF9pZDogZm9ybVsncHJvZHVjdF9pZCddLFxuICAgICAgICAgICAgZmVhdHVyZV9rZXlzOiBmb3JtWydmZWF0dXJlX2tleXMnXSxcbiAgICAgICAgICAgIGlzX3NoYXJlZF9mYXE6IGZvcm1bJ2lzX3NoYXJlZF9mYXEnXSxcbiAgICAgICAgICAgIGlzX2FkbWluX2ZhcTogZm9ybVsnaXNfYWRtaW5fZmFxJ10sXG4gICAgICAgICAgICBpc19idWlsZF9mYXE6IGZvcm1bJ2lzX2J1aWxkX2ZhcSddXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuYnV0dG9uQnVzeSA9IHRydWU7XG4gICAgICAgIHRoaXMuYWRtaW5TZXJ2aWNlXG4gICAgICAgICAgICAucHV0RmFxKGRhdGEsIHRoaXMuc3Vic2NyaXB0aW9uSWQpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiByZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEZhcSA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEZhcXMoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlKCdBZG1pbi5GYXEuVXBkYXRlZE1lc3NhZ2UnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hZGQoKCkgPT4gKHRoaXMuYnV0dG9uQnVzeSA9IGZhbHNlKSk7XG4gICAgfVxuXG4gICAgb25FZGl0KGZhcTogRkFRKSB7XG4gICAgICAgIHRoaXMuZmFxcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgaXRlbS5pc0VkaXQgPSBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZhcS5pc0VkaXQgPSB0cnVlO1xuICAgICAgICB0aGlzLnNob3dGaWx0ZXJzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZmFxcyA9IHRoaXMuZmFxcy5maWx0ZXIoaXRlbSA9PiBpdGVtLmlkID09PSBmYXEuaWQpO1xuICAgICAgICBpZiAoZmFxLnByb2R1Y3RfaWQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuaXNQcm9kdWN0RW5hYmxlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzUHJvZHVjdEVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cnJlbnRGYXEgPSB7IC4uLmZhcSB9O1xuICAgIH1cblxuICAgIG9uRGVsZXRlKGZhcTogRkFRKSB7XG4gICAgICAgIHN3YWwuZmlyZSh7XG4gICAgICAgICAgICB0aXRsZTogJ0RlbGV0ZScsXG5cbiAgICAgICAgICAgIGh0bWw6IGBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlP2AsXG4gICAgICAgICAgICBzaG93Q2FuY2VsQnV0dG9uOiB0cnVlLFxuICAgICAgICAgICAgcmV2ZXJzZUJ1dHRvbnM6IHRydWUsXG4gICAgICAgICAgICBpY29uOiAnd2FybmluZydcbiAgICAgICAgfSkudGhlbihyZXAgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRtaW5TZXJ2aWNlLmRlbGV0ZUZhcShmYXEuaWQsIHRoaXMuc3Vic2NyaXB0aW9uSWQpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2Vzcyh0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgnQWRtaW4uRmFxLkRlbGV0ZWRNZXNzYWdlJykpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldEZhcXMoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25WYWx1ZUNoYW5nZShmYXE6IEZBUSwgdmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgIGlkOiBmYXEuaWQsXG4gICAgICAgICAgICB2aXNpYmxlOiB2YWx1ZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuYWRtaW5TZXJ2aWNlLnB1dEZhcShkYXRhLCB0aGlzLnN1YnNjcmlwdGlvbklkKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlKCdBZG1pbi5GYXEuVXBkYXRlZE1lc3NhZ2UnKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uUHVibGljVmFsdWVDaGFuZ2UoZmFxOiBGQVEsIHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICBpZDogZmFxLmlkLFxuICAgICAgICAgICAgcHVibGljOiB2YWx1ZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuYWRtaW5TZXJ2aWNlLnB1dEZhcShkYXRhLCB0aGlzLnN1YnNjcmlwdGlvbklkKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy50b2FzdC5zdWNjZXNzKHRoaXMudHJhbnNsYXRpb24udHJhbnNsYXRlKCdBZG1pbi5GYXEuVXBkYXRlZE1lc3NhZ2UnKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uRGlzY2FyZChmYXE6IEZBUSkge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5iYWNrVXBGQVEuZmluZCh4ID0+IHguaWQgPT09IGZhcS5pZCk7XG4gICAgICAgIHRoaXMuY3VycmVudEZhcSA9IHsgLi4uaXRlbSB9O1xuICAgIH1cblxuICAgIG92ZXJyaWRlIG5nT25EZXN0cm95KCkge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJyb3dcIiBbY2xhc3MuY3VzdG9tLWRpc2FibGUtd3JhcHBlcl09XCJidXR0b25CdXN5XCI+XG4gIDxkaXYgY2xhc3M9XCJjb2wtMTIgZC1mbGV4IGZsZXgtd3JhcCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIlxuICAgICpuZ0lmPVwic2hvd0xpc3RcIj5cbiAgICA8aDIgY2xhc3M9XCJjYXJkLXRpdGxlIHAtMCBmbG9hdC1zdGFydFwiPkZyZXF1ZW50bHkgQXNrZWQgUXVlc3Rpb25zPC9oMj5cbiAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgKm5nSWY9XCJzaG93TGlzdFwiIChjbGljayk9XCJzaG93TGlzdCA9ICFzaG93TGlzdFwiXG4gICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeSBmbG9hdC1lbmRcIiByb2xlPVwiYnV0dG9uXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCI+XG4gICAgICA8aSBjbGFzcz1cImZhIGZhLXBsdXMtY2lyY2xlXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPiB7eyAnTGFiZWwuQWRkTmV3JyB8IHRyYW5zbG9jbyB9fSBGQVEgPC9hPlxuICA8L2Rpdj5cbjwvZGl2PlxuPCEtLSBBZGQgRkFRIFNlY3Rpb24gLS0+XG48ZGl2ICpuZ0lmPVwiIXNob3dMaXN0XCIgW2NsYXNzLmN1c3RvbS1kaXNhYmxlLXdyYXBwZXJdPVwiYnV0dG9uQnVzeVwiIGNsYXNzPVwicC0yXCI+XG4gIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICA8aDQgY2xhc3M9XCJmdy1ib2xkIG1iLTRcIj57eyAnTGFiZWwuQWRkTmV3JyB8IHRyYW5zbG9jbyB9fSBGQVE8L2g0PlxuICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCIgKG5nU3VibWl0KT1cIm9uU3VibWl0KClcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgY2xhc3M9XCJjb2wtMTJcIiBbbGFiZWxdPVwiJ0FkbWluLkZhcS5RdWVzdGlvbicgfCB0cmFuc2xvY29cIiBuYW1lPVwicXVlc3Rpb25cIlxuICAgICAgICAgICAgW2Vycm9yTXNnXT1cIidBZG1pbi5GYXEuVmFsaWRhdGlvbi5GaWVsZFJlcXVpcmVkJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgZm9ybUNvbnRyb2xOYW1lPVwicXVlc3Rpb25cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsncXVlc3Rpb24nXS5lcnJvcnMgfVwiIC8+XG4gICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBjbGFzcz1cImNvbC0xMiBxdWlsbC1lZGl0b3JcIlxuICAgICAgICAgICAgW2xhYmVsXT1cIidBZG1pbi5GYXEuQW5zd2VyJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICBuYW1lPVwiYW5zd2VyXCJcbiAgICAgICAgICAgIFtlcnJvck1zZ109XCInQWRtaW4uRmFxLlZhbGlkYXRpb24uRmllbGRSZXF1aXJlZCcgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICAgIDxxdWlsbC1lZGl0b3IgW3N0eWxlc109XCJ7IGhlaWdodDogJzIwMHB4J31cIiBmb3JtQ29udHJvbE5hbWU9XCJhbnN3ZXJcIiBjbGFzcz1cInF1aWxsRWRpdG9yXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydhbnN3ZXInXS5lcnJvcnMgfVwiPlxuICAgICAgICAgICAgPC9xdWlsbC1lZGl0b3I+XG4gICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0yXCI+XG4gICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtzaG93VG9vbHRpcF09XCJ0cnVlXCIgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5GYXEuVG9vbHRpcC5DYXRlZ29yeScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0FkbWluLkZhcS5DYXRlZ29yeScgfCB0cmFuc2xvY29cIiBuYW1lPVwiY2F0ZWdvcnlcIlxuICAgICAgICAgICAgICBbZXJyb3JNc2ddPVwiJ0FkbWluLkZhcS5WYWxpZGF0aW9uLkZpZWxkUmVxdWlyZWQnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICAgIDxwLWRyb3Bkb3duIFtvcHRpb25zXT1cImNhdGVnb3JpZXNcIiBjbGFzcz1cImRyb3Bkb3duLWJnLXRyYW5zcGFyZW50XCIgKG9uQ2hhbmdlKT1cIm9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0XCIgZm9ybUNvbnRyb2xOYW1lPVwiY2F0ZWdvcnlcIiBpZD1cImNhdGVnb3J5LWRyb3Bkb3duXCIgW3N0eWxlXT1cInsgd2lkdGg6ICcxMDAlJyB9XCI+XG4gICAgICAgICAgICAgIDwvcC1kcm9wZG93bj5cbiAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMlwiICpyYmFjQWxsb3c9XCInU3Vic2NyaXB0aW9uU3VwZXJBZG1pbidcIj5cbiAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIiBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLkZhcS5Ub29sdGlwLlByb2R1Y3QnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cIidBZG1pbi5GYXEuUHJvZHVjdCcgfCB0cmFuc2xvY29cIiBuYW1lPVwicHJvZHVjdF9pZFwiXG4gICAgICAgICAgICAgIFtlcnJvck1zZ109XCInQWRtaW4uRmFxLlZhbGlkYXRpb24uRmllbGRSZXF1aXJlZCcgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICAgICAgPHAtZHJvcGRvd24gW29wdGlvbnNdPVwicHJvZHVjdExpc3RcIiBjbGFzcz1cImRyb3Bkb3duLWJnLXRyYW5zcGFyZW50XCIgZm9ybUNvbnRyb2xOYW1lPVwicHJvZHVjdF9pZFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlXT1cInsgd2lkdGg6ICcxMDAlJyB9XCI+XG4gICAgICAgICAgICAgIDwvcC1kcm9wZG93bj5cbiAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gRmVhdHVyZXMga2V5cy0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMlwiPlxuICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiIFt0b29sdGlwVGV4dF09XCInQWRtaW4uRmFxLlRvb2x0aXAuRmVhdHVyZXMnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cIidBZG1pbi5GYXEuRmVhdHVyZXMnIHwgdHJhbnNsb2NvXCIgbmFtZT1cImZlYXR1cmVfa2V5c1wiPlxuICAgICAgICAgICAgICA8cC1tdWx0aVNlbGVjdCBbb3B0aW9uc109XCJmZWF0dXJlS2V5c0xpc3RcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBmZWF0dXJlIGtleXNcIiBbc2hvd0hlYWRlcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbc2hvd1RvZ2dsZUFsbF09XCJ0cnVlXCIgZm9ybUNvbnRyb2xOYW1lPVwiZmVhdHVyZV9rZXlzXCIgYXBwZW5kVG89XCJib2R5XCI+PC9wLW11bHRpU2VsZWN0PlxuICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0yXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtzaG93VG9vbHRpcF09XCJ0cnVlXCIgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5GYXEuVG9vbHRpcC5Qb3NpdGlvbicgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCInQWRtaW4uRmFxLlBvc2l0aW9uJyB8IHRyYW5zbG9jb1wiIG5hbWU9XCJwb3NpdGlvblwiXG4gICAgICAgICAgICAgICAgW2Vycm9yTXNnXT1cIidBZG1pbi5GYXEuVmFsaWRhdGlvbi5GaWVsZFJlcXVpcmVkJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvblwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBtaW49XCIwXCIgZm9ybUNvbnRyb2xOYW1lPVwicG9zaXRpb25cIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IGNvbC1sZy0yXCI+XG4gICAgICAgICAgICA8bGFiZWw+e3sgJ0FkbWluLkZhcS5WaXNpYmxlJyB8IHRyYW5zbG9jb319IDxzcGFuIGNsYXNzPVwidG9vbHRpcC13cmFwXCIgW2FwcGVuZFRvXT1cIidib2R5J1wiXG4gICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIidBZG1pbi5GYXEuVG9vbHRpcC5WaXNpYmxlJyB8IHRyYW5zbG9jb1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWluZm8tY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2xhYmVsPjxiciAvPlxuICAgICAgICAgICAgPHVpLXN3aXRjaCBmb3JtQ29udHJvbE5hbWU9XCJ2aXNpYmxlXCI+PC91aS1zd2l0Y2g+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IGNvbC1sZy0yXCI+XG4gICAgICAgICAgICA8bGFiZWw+e3sgJ0FkbWluLkZhcS5QdWJsaWMnIHwgdHJhbnNsb2NvfX0gPHNwYW4gY2xhc3M9XCJ0b29sdGlwLXdyYXBcIiBbYXBwZW5kVG9dPVwiJ2JvZHknXCJcbiAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiJ0FkbWluLkZhcS5Ub29sdGlwLlB1YmxpYycgfCB0cmFuc2xvY29cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1pbmZvLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9sYWJlbD48YnIgLz5cbiAgICAgICAgICAgIDx1aS1zd2l0Y2ggZm9ybUNvbnRyb2xOYW1lPVwicHVibGljXCI+PC91aS1zd2l0Y2g+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKnJiYWNBbGxvdz1cIidTdXBlckFkbWluJ1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBjb2wtbGctMlwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidGV4dC13YXJuaW5nXCI+e3sgJ0FkbWluLkZhcS5TaGFyZWRGYXEnIHwgdHJhbnNsb2NvfX0gPHNwYW4gY2xhc3M9XCJ0b29sdGlwLXdyYXBcIlxuICAgICAgICAgICAgICAgIFthcHBlbmRUb109XCInYm9keSdcIiBbcFRvb2x0aXBdPVwiJ0FkbWluLkZhcS5Ub29sdGlwLlNoYXJlZEZhcScgfCB0cmFuc2xvY29cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1pbmZvLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9sYWJlbD48YnIgLz5cbiAgICAgICAgICAgIDx1aS1zd2l0Y2ggbmFtZT1cImlzX3NoYXJlZF9mYXFcIiBmb3JtQ29udHJvbE5hbWU9XCJpc19zaGFyZWRfZmFxXCI+PC91aS1zd2l0Y2g+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IGNvbC1sZy0yXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ZXh0LXdhcm5pbmdcIj57eyAnQWRtaW4uRmFxLkFkbWluRmFxJyB8IHRyYW5zbG9jb319IDxzcGFuIGNsYXNzPVwidG9vbHRpcC13cmFwXCJcbiAgICAgICAgICAgICAgICBbYXBwZW5kVG9dPVwiJ2JvZHknXCIgW3BUb29sdGlwXT1cIidBZG1pbi5GYXEuVG9vbHRpcC5BZG1pbkZhcScgfCB0cmFuc2xvY29cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1pbmZvLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9sYWJlbD48YnIgLz5cbiAgICAgICAgICAgIDx1aS1zd2l0Y2ggZm9ybUNvbnRyb2xOYW1lPVwiaXNfYWRtaW5fZmFxXCIgbmFtZT1cImlzX2FkbWluX2ZhcVwiPjwvdWktc3dpdGNoPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBjb2wtbGctMlwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidGV4dC13YXJuaW5nXCI+e3sgJ0FkbWluLkZhcS5CdWlsZEZhcScgfCB0cmFuc2xvY299fSA8c3BhbiBjbGFzcz1cInRvb2x0aXAtd3JhcFwiXG4gICAgICAgICAgICAgICAgW2FwcGVuZFRvXT1cIidib2R5J1wiIFtwVG9vbHRpcF09XCInQWRtaW4uRmFxLlRvb2x0aXAuQnVpbGRGYXEnIHwgdHJhbnNsb2NvXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtaW5mby1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGFiZWw+PGJyIC8+XG4gICAgICAgICAgICA8dWktc3dpdGNoIGZvcm1Db250cm9sTmFtZT1cImlzX2J1aWxkX2ZhcVwiIG5hbWU9XCJpc19idWlsZF9mYXFcIj48L3VpLXN3aXRjaD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG10LTRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zIHRleHQtZW5kXCI+XG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLWRlZmF1bHQgbWUtMlwiIGRhdGEtYnMtdG9nZ2xlPVwiY29sbGFwc2VcIiBocmVmPVwiI2ZhcUNvbGxhcHNlXCJcbiAgICAgICAgICAgICAgICByb2xlPVwiYnV0dG9uXCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCIgYXJpYS1jb250cm9scz1cImZhcUNvbGxhcHNlXCIgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0ucmVzZXQoKTsgc2hvd0xpc3QgPSAhc2hvd0xpc3Q7IGlzUHJvZHVjdEVuYWJsZWQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIj4ge3sgJ0J1dHRvbi5DYW5jZWwnIHwgdHJhbnNsb2NvIH19IDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgW2J1dHRvbkJ1c3ldPVwiYnV0dG9uQnVzeVwiPnt7ICdCdXR0b24uU2F2ZScgfCB0cmFuc2xvY28gfX08L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZm9ybT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbjwhLS0gRkFRIExpc3QvRWRpdCAtLT5cbjxkaXYgY2xhc3M9XCJyb3cgZmFxbGlzdCBwcmltZW5nLWRhdGF0YWJsZS1jb250YWluZXIgbXQtMFwiIFtjbGFzcy5jdXN0b20tZGlzYWJsZS13cmFwcGVyXT1cImJ1dHRvbkJ1c3lcIj5cbiAgPGRpdiBjbGFzcz1cImNvbC0xMiBweC0wXCI+XG4gICAgPGRpdiBjbGFzcz1cInctMTAwIHRleHQtY2VudGVyIG10LTNcIiAqbmdJZj1cIiFpc0xvYWRlZFwiPlxuICAgICAgPHAtcHJvZ3Jlc3NTcGlubmVyIHN0cm9rZVdpZHRoPVwiMlwiPiA8L3AtcHJvZ3Jlc3NTcGlubmVyPlxuICAgIDwvZGl2PlxuICAgIDxwLXRhYmxlIFt2YWx1ZV09XCJmYXFzXCI+XG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiY2FwdGlvblwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWZpbHRlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNFwiPlxuICAgICAgICAgICAgPHAtbXVsdGlTZWxlY3QgW3Nob3dUb2dnbGVBbGxdPVwidHJ1ZVwiIFtvcHRpb25zXT1cImZlYXR1cmVLZXlzTGlzdFwiIChvbkNoYW5nZSk9XCJvblByb2R1Y3RDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoIGJ5IEZlYXR1cmUga2V5c1wiIFtzaG93SGVhZGVyXT1cInRydWVcIiBtYXhTZWxlY3RlZExhYmVscz1cIjJcIiBhcHBlbmRUbz1cImJvZHlcIj5cbiAgICAgICAgICAgIDwvcC1tdWx0aVNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1lbmRcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoIG10LTIgbWUtMlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwic2VhcmNoVGV4dFwiIHBJbnB1dFRleHQgc2l6ZT1cIjUwXCIgcGxhY2Vob2xkZXI9XCJTZWFyY2ggRkFRLi4uXCJcbiAgICAgICAgICAgICAgKGlucHV0KT1cImZpbHRlckZhcSgpXCIgY2xhc3M9XCJtdy05MFwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJoZWFkZXJcIj5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0aCBzY29wZT1cInRydWVcIj57eyAnQWRtaW4uRmFxLlF1ZXN0aW9uJyB8IHRyYW5zbG9jbyB9fTwvdGg+XG4gICAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiPnt7ICdBZG1pbi5GYXEuQW5zd2VyJyB8IHRyYW5zbG9jbyB9fTwvdGg+XG4gICAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiPnt7ICdBZG1pbi5GYXEuUG9zaXRpb24nIHwgdHJhbnNsb2NvIH19PC90aD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCI+e3sgJ0FkbWluLkZhcS5DYXRlZ29yeScgfCB0cmFuc2xvY28gfX08L3RoPlxuICAgICAgICAgIDx0aCBzY29wZT1cInRydWVcIj57eyAnQWRtaW4uRmFxLlZpc2libGUnIHwgdHJhbnNsb2NvIH19PC90aD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCI+e3sgJ0FkbWluLkZhcS5QdWJsaWMnIHwgdHJhbnNsb2NvIH19PC90aD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCIgY2xhc3M9XCJhY3Rpb25zLWxpc3QtdHdvXCI+e3sgJ0xhYmVsLkFjdGlvbnMnIHwgdHJhbnNsb2NvIH19PC90aD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiIGxldC1mYXE+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQgZGF0YS1oZWFkPVwiUXVlc3Rpb25cIj57eyBmYXEucXVlc3Rpb24gfX0gPC90ZD5cbiAgICAgICAgICA8dGQgZGF0YS1oZWFkPVwiQW5zd2VyXCI+e3soZmFxLmFuc3dlcnxyZW1vdmVIdG1sKXx0ZXh0VHJ1bmNhdGU6IDIwMH19IDwvdGQ+XG4gICAgICAgICAgPHRkIGRhdGEtaGVhZD1cIlBvc2l0aW9uXCI+e3tmYXEucG9zaXRpb259fTwvdGQ+XG4gICAgICAgICAgPHRkIGRhdGEtaGVhZD1cIkNhdGVnb3J5XCI+XG4gICAgICAgICAgICA8c3BhbiBbYXBwRHluYW1pY0JhZGdlXT1cInsgaXRlbXNBcnJheTogY2F0ZWdvcnlGb3JCYWRnZXMsIGl0ZW06IGZhcT8uY2F0ZWdvcnkgfVwiIGNvbG9yPVwiY3lhblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2UgbXMtMVwiPlxuICAgICAgICAgICAgICA8c3BhbiBbcFRvb2x0aXBdPVwiZmFxPy5mZWF0dXJlX2tleXM/LmpvaW4oJywnKVwiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPnt7IGZhcUhhc2hNYXBbZmFxPy5jYXRlZ29yeV0/Lm5hbWVcbiAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtMSBiYWRnZSBiZy13YXJuaW5nXCIgKm5nSWY9XCJmYXEuaXNfc2hhcmVkX2ZhcSB8fCBmYXEuaXNfYWRtaW5fZmFxIHx8IGZhcS5pc19idWlsZF9mYXFcIj5TdXBlclxuICAgICAgICAgICAgICBGQVE8L3NwYW4+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQgZGF0YS1oZWFkPVwiVmlzaWJsZVwiPlxuICAgICAgICAgICAgPHNwYW4gW2FwcER5bmFtaWNCYWRnZV09XCJ7IGl0ZW1zQXJyYXk6IFt0cnVlLCBmYWxzZV0sIGl0ZW06IGZhcT8udmlzaWJsZSB9XCIgY29sb3I9XCJzdWNjZXNzLWRhbmdlclwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2VcIj57eyBmYXE/LnZpc2libGUgfX08L3NwYW4+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQgZGF0YS1oZWFkPVwiUHVibGljXCI+XG4gICAgICAgICAgICA8c3BhbiBbYXBwRHluYW1pY0JhZGdlXT1cInsgaXRlbXNBcnJheTogW3RydWUsIGZhbHNlXSwgaXRlbTogZmFxPy5wdWJsaWMgfVwiIGNvbG9yPVwic3VjY2Vzcy1kYW5nZXJcIlxuICAgICAgICAgICAgICBjbGFzcz1cImJhZGdlXCI+e3sgZmFxPy5wdWJsaWMgfX08L3NwYW4+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQgZGF0YS1oZWFkPVwiQWN0aW9uXCI+XG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LXVuc3R5bGVkIGxpc3QtaW5saW5lXCI+XG4gICAgICAgICAgICAgIDxsaSBuZ2JUb29sdGlwPVwiRWRpdFwiIGNsYXNzPVwibWUtMiBtZS1zbS0yXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1lZGl0IGVkaXQtaWNvblwiIChjbGljayk9XCJvbkVkaXQoZmFxKVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPGxpIG5nYlRvb2x0aXA9XCJEZWxldGVcIiBjbGFzcz1cIm1lLTIgbWUtc20tMlwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJhc2ggZGVsZXRlLWljb25cIiAoY2xpY2spPVwib25EZWxldGUoZmFxKVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgPGxpIG5nYlRvb2x0aXA9XCJWaWV3IGZhcVwiICpuZ0lmPVwiZmFxPy52aXNpYmxlXCI+XG4gICAgICAgICAgICAgICAgPGEgW3JvdXRlckxpbmtdPVwiWycvJyxzbHVnLCdmYXEnLGZhcS5pZF1cIiB0YXJnZXQ9XCJfYmxhbmtcIj5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZXllXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyICpuZ0lmPVwiZmFxLmlzRWRpdFwiPlxuICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiN1wiPlxuICAgICAgICAgICAgPGZvcm0gKG5nU3VibWl0KT1cIm9uU3VibWl0KClcIlxuICAgICAgICAgICAgICAjZWRpdEZvcm09XCJuZ0Zvcm1cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwibmFtZVwiPnt7ICdBZG1pbi5GYXEuUXVlc3Rpb24nIHwgdHJhbnNsb2NvIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHJlcXVpcmVkIFsobmdNb2RlbCldPVwiY3VycmVudEZhcS5xdWVzdGlvblwiIG5hbWU9XCJxdWVzdGlvblwiXG4gICAgICAgICAgICAgICAgICAjcXVlc3Rpb249XCJuZ01vZGVsXCIgLz5cbiAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJmb3JtLXRleHQgdGV4dC1tdXRlZCBkYW5nZXJcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhcXVlc3Rpb24udmFsaWQgJiYgKHF1ZXN0aW9uLmRpcnR5IHx8IHF1ZXN0aW9uLnRvdWNoZWQpXCI+IFBsZWFzZSBlbnRlciBhIHF1ZXN0aW9uPC9zbWFsbD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdBZG1pbi5GYXEuQW5zd2VyJyB8IHRyYW5zbG9jbyB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPHF1aWxsLWVkaXRvciBbc3R5bGVzXT1cInsgaGVpZ2h0OiAnMjAwcHgnIH1cIiBbKG5nTW9kZWwpXT1cImN1cnJlbnRGYXEuYW5zd2VyXCIgbmFtZT1cImFuc3dlclwiIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAjYW5zd2VyPVwibmdNb2RlbFwiPjwvcXVpbGwtZWRpdG9yPlxuICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImZvcm0tdGV4dCB0ZXh0LW11dGVkIGRhbmdlclwiICpuZ0lmPVwiIWFuc3dlci52YWxpZCAmJiAoYW5zd2VyLmRpcnR5IHx8IGFuc3dlci50b3VjaGVkKVwiPlxuICAgICAgICAgICAgICAgICAgUGxlYXNlIGVudGVyIGFuIGFuc3dlcjwvc21hbGw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG5vLWd1dHRlcnMganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnQWRtaW4uRmFxLkNhdGVnb3J5JyB8IHRyYW5zbG9jb319IDxzcGFuIGNsYXNzPVwidG9vbHRpcC13cmFwXCIgW2FwcGVuZFRvXT1cIidib2R5J1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIidBZG1pbi5GYXEuVG9vbHRpcC5DYXRlZ29yeScgfCB0cmFuc2xvY29cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1pbmZvLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD48YnIgLz5cbiAgICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duIFtvcHRpb25zXT1cImNhdGVnb3JpZXNcIiBuYW1lPVwiY2F0ZWdvcnlcIiBbcmVxdWlyZWRdPVwidHJ1ZVwiIFsobmdNb2RlbCldPVwiY3VycmVudEZhcS5jYXRlZ29yeVwiXG4gICAgICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvbkNoYW5nZSgkZXZlbnQpXCIgW3N0eWxlXT1cInsgd2lkdGg6ICcxMDAlJyB9XCIgY2xhc3M9XCJjdXN0b20tZHJvcGRvd25cIj5cbiAgICAgICAgICAgICAgICAgIDwvcC1kcm9wZG93bj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTJcIiAqcmJhY0FsbG93PVwiJ1N1YnNjcmlwdGlvblN1cGVyQWRtaW4nXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ0FkbWluLkZhcS5Qcm9kdWN0JyB8IHRyYW5zbG9jb319IDxzcGFuIGNsYXNzPVwidG9vbHRpcC13cmFwXCIgW2FwcGVuZFRvXT1cIidib2R5J1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIidBZG1pbi5GYXEuVG9vbHRpcC5Qcm9kdWN0JyB8IHRyYW5zbG9jb1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWluZm8tY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPjxiciAvPlxuICAgICAgICAgICAgICAgICAgPHAtZHJvcGRvd24gW29wdGlvbnNdPVwicHJvZHVjdExpc3RcIiBuYW1lPVwicHJvZHVjdF9pZFwiIFsobmdNb2RlbCldPVwiY3VycmVudEZhcS5wcm9kdWN0X2lkXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cInsgd2lkdGg6ICcxMDAlJyB9XCIgY2xhc3M9XCJjdXN0b20tZHJvcGRvd25cIj5cbiAgICAgICAgICAgICAgICAgIDwvcC1kcm9wZG93bj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIGZlYXR1cmUga2V5cyAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJcIj57eyAnQWRtaW4uRmFxLkZlYXR1cmVzJyB8IHRyYW5zbG9jbyB9fSA8c3BhbiBjbGFzcz1cInRvb2x0aXAtd3JhcFwiIFthcHBlbmRUb109XCInYm9keSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIidBZG1pbi5GYXEuVG9vbHRpcC5GZWF0dXJlcycgfCB0cmFuc2xvY29cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWluZm8tY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgPHAtbXVsdGlTZWxlY3QgW29wdGlvbnNdPVwiZmVhdHVyZUtleXNMaXN0XCIgW3Nob3dIZWFkZXJdPVwidHJ1ZVwiIFtzaG93VG9nZ2xlQWxsXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY3VycmVudEZhcS5mZWF0dXJlX2tleXNcIiBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIlxuICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvPVwiYm9keVwiPjwvcC1tdWx0aVNlbGVjdD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMlwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cIlwiPnt7ICdBZG1pbi5GYXEuUG9zaXRpb24nIHwgdHJhbnNsb2NvIH19IDxzcGFuIGNsYXNzPVwidG9vbHRpcC13cmFwXCIgW2FwcGVuZFRvXT1cIidib2R5J1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIidBZG1pbi5GYXEuVG9vbHRpcC5Qb3NpdGlvbicgfCB0cmFuc2xvY29cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1pbmZvLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgbmFtZT1cInBvc2l0aW9uXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImN1cnJlbnRGYXEucG9zaXRpb25cIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBjb2wtbGctMVwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdBZG1pbi5GYXEuVmlzaWJsZScgfCB0cmFuc2xvY299fSA8c3BhbiBjbGFzcz1cInRvb2x0aXAtd3JhcCBcIiBbYXBwZW5kVG9dPVwiJ2JvZHknXCJcbiAgICAgICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiJ0FkbWluLkZhcS5Ub29sdGlwLlZpc2libGUnIHwgdHJhbnNsb2NvXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtaW5mby1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8dWktc3dpdGNoIGNsYXNzPVwidmlzaWJsZVwiIFtjaGVja2VkXT1cImN1cnJlbnRGYXEudmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2UoY3VycmVudEZhcSwgJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICA8L3VpLXN3aXRjaD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBjb2wtbGctMVwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdBZG1pbi5GYXEuUHVibGljJyB8IHRyYW5zbG9jb319IDxzcGFuIGNsYXNzPVwidG9vbHRpcC13cmFwXCIgW2FwcGVuZFRvXT1cIidib2R5J1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIidBZG1pbi5GYXEuVG9vbHRpcC5QdWJsaWMnIHwgdHJhbnNsb2NvXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtaW5mby1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8dWktc3dpdGNoIGNsYXNzPVwicHVibGljXCIgW2NoZWNrZWRdPVwiY3VycmVudEZhcS5wdWJsaWNcIlxuICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvblB1YmxpY1ZhbHVlQ2hhbmdlKGN1cnJlbnRGYXEsICRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgPC91aS1zd2l0Y2g+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqcmJhY0FsbG93PVwiJ1N1cGVyQWRtaW4nXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IGNvbC1sZy0yXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ZXh0LXdhcm5pbmdcIj57eyAnQWRtaW4uRmFxLlNoYXJlZEZhcScgfCB0cmFuc2xvY299fSA8c3BhbiBjbGFzcz1cInRvb2x0aXAtd3JhcFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2FwcGVuZFRvXT1cIidib2R5J1wiIFtwVG9vbHRpcF09XCInQWRtaW4uRmFxLlRvb2x0aXAuU2hhcmVkRmFxJyB8IHRyYW5zbG9jb1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWluZm8tY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPjxiciAvPlxuICAgICAgICAgICAgICAgICAgPHVpLXN3aXRjaCBbY2hlY2tlZF09XCJjdXJyZW50RmFxLmlzX3NoYXJlZF9mYXFcIiBuYW1lPVwiaXNfc2hhcmVkX2ZhcVwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY3VycmVudEZhcS5pc19zaGFyZWRfZmFxXCI+PC91aS1zd2l0Y2g+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IGNvbC1sZy0yXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ZXh0LXdhcm5pbmdcIj57eyAnQWRtaW4uRmFxLkFkbWluRmFxJyB8IHRyYW5zbG9jb319IDxzcGFuIGNsYXNzPVwidG9vbHRpcC13cmFwXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXBwZW5kVG9dPVwiJ2JvZHknXCIgW3BUb29sdGlwXT1cIidBZG1pbi5GYXEuVG9vbHRpcC5BZG1pbkZhcScgfCB0cmFuc2xvY29cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1pbmZvLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD48YnIgLz5cbiAgICAgICAgICAgICAgICAgIDx1aS1zd2l0Y2ggW2NoZWNrZWRdPVwiY3VycmVudEZhcS5pc19hZG1pbl9mYXFcIiBuYW1lPVwiaXNfYWRtaW5fZmFxXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50RmFxLmlzX2FkbWluX2ZhcVwiPjwvdWktc3dpdGNoPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBjb2wtbGctMlwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidGV4dC13YXJuaW5nXCI+e3sgJ0FkbWluLkZhcS5CdWlsZEZhcScgfCB0cmFuc2xvY299fSA8c3BhbiBjbGFzcz1cInRvb2x0aXAtd3JhcFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2FwcGVuZFRvXT1cIidib2R5J1wiIFtwVG9vbHRpcF09XCInQWRtaW4uRmFxLlRvb2x0aXAuQnVpbGRGYXEnIHwgdHJhbnNsb2NvXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtaW5mby1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+PGJyIC8+XG4gICAgICAgICAgICAgICAgICA8dWktc3dpdGNoIFtjaGVja2VkXT1cImN1cnJlbnRGYXEuaXNfYnVpbGRfZmFxXCIgbmFtZT1cImlzX2J1aWxkX2ZhcVwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY3VycmVudEZhcS5pc19idWlsZF9mYXFcIj48L3VpLXN3aXRjaD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1lbmRcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqcmJhY0FsbG93PVwiJ1BhZ2VzLkFkbWluLkZBUS5EZWxldGUnXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tb3V0bGluZS1kYW5nZXIgbWUtMlwiICpuZ0lmPVwiIWZhcS5pc0VkaXRcIiAoY2xpY2spPVwib25EZWxldGUoZmFxKVwiPiBEZWxldGVcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtZGVmYXVsdCBtZS0yXCIgKm5nSWY9XCJmYXEuaXNFZGl0XCIgZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiXG4gICAgICAgICAgICAgICAgZGF0YS1icy10YXJnZXQ9XCIjY29sbGFwc2VFZGl0XCIgYXJpYS1leHBhbmRlZD1cImZhbHNlXCIgYXJpYS1jb250cm9scz1cImNvbGxhcHNlRWRpdFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImZhcS5pc0VkaXQgPSAhZmFxLmlzRWRpdDsgb25DYW5jZWwoKVwiPiB7eyAnQnV0dG9uLkNhbmNlbCcgfCB0cmFuc2xvY28gfX0gPC9idXR0b24+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKnJiYWNBbGxvdz1cIidQYWdlcy5BZG1pbi5GQVEuRWRpdCdcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1lLTJcIiAqbmdJZj1cIiFmYXEuaXNFZGl0XCIgKGNsaWNrKT1cIm9uRWRpdChmYXEpXCI+IHt7ICdCdXR0b24uRWRpdCcgfFxuICAgICAgICAgICAgICAgICAgdHJhbnNsb2NvIH19IDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbWUtMlwiIFtidXR0b25CdXN5XT1cImJ1dHRvbkJ1c3lcIiAqbmdJZj1cImZhcS5pc0VkaXRcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uVXBkYXRlKGN1cnJlbnRGYXEpXCI+IHt7ICdCdXR0b24uVXBkYXRlJyB8IHRyYW5zbG9jbyB9fSA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L3AtdGFibGU+XG4gICAgPGRpdiAqbmdJZj1cImZhcXMubGVuZ3RoID09PSAwXCI+XG4gICAgICA8cHctbm8tZGF0YSBbd2l0aEltYWdlXT1cInRydWVcIiBbbWVzc2FnZV09XCInU2VhcmNoLk5vRGF0YU1lc3NhZ2UnIHwgdHJhbnNsb2NvXCIgW2Rlc2NyaXB0aW9uXT1cIidTZWFyY2guTm9EYXRhRGVzY3JpcHRpb24nIHwgdHJhbnNsb2NvXCIgPlxuICAgICAgPC9wdy1uby1kYXRhPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPHB3LW5vLWRhdGEgW3dpdGhJbWFnZV09XCJ0cnVlXCIgW21lc3NhZ2VdPVwiJ0FkbWluLkZhcS5Ob0RhdGFNZXNzYWdlJyB8IHRyYW5zbG9jb1wiICpuZ0lmPVwidG90YWxSZWNvcmRzVW5GaWx0ZXJlZCA9PT0gMFwiPlxuICA8L3B3LW5vLWRhdGE+XG48L2Rpdj5cbiJdfQ==