@posiwise/admin-module 0.0.77 → 0.0.79

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 (91) hide show
  1. package/esm2022/lib/admin-module.routing.mjs +26 -1
  2. package/esm2022/lib/admin.module.mjs +20 -5
  3. package/esm2022/lib/components/TOS/terms-of-service/terms-of-service.component.mjs +12 -8
  4. package/esm2022/lib/components/TOS/terms-of-service-details/terms-of-service-details.component.mjs +3 -3
  5. package/esm2022/lib/components/config/global-config-list/global-config-list.component.mjs +11 -7
  6. package/esm2022/lib/components/contact-us/contact-us-list/contact-us-list.component.mjs +4 -3
  7. package/esm2022/lib/components/credentials/credentials/credentials.component.mjs +11 -7
  8. package/esm2022/lib/components/credentials/subscription-credentials/subscription-credentials.component.mjs +9 -6
  9. package/esm2022/lib/components/domain-config/domain-config-details/domain-config-build/domain-config-build.component.mjs +3 -3
  10. package/esm2022/lib/components/domain-config/domain-config-details/domain-config-integrations/domain-config-integrations.component.mjs +3 -3
  11. package/esm2022/lib/components/domain-config/domain-config-details/domain-config-interface/domain-config-interface.component.mjs +3 -3
  12. package/esm2022/lib/components/domain-config/domain-config-details/domain-config-organization/domain-config-organization.component.mjs +3 -3
  13. package/esm2022/lib/components/domain-config/domain-config-details/domain-config-security/domain-config-security.component.mjs +3 -3
  14. package/esm2022/lib/components/domain-config/domain-config-details/domain-config-social/domain-config-social.component.mjs +3 -3
  15. package/esm2022/lib/components/domain-config/domain-config-list/domain-config-list.component.mjs +4 -3
  16. package/esm2022/lib/components/faqs/faqs-list/faqs-list.component.mjs +4 -3
  17. package/esm2022/lib/components/feedback-questions/feedback-questions-list/feedback-questions-list.component.mjs +3 -3
  18. package/esm2022/lib/components/incidents/add-edit-incident/add-edit-incident.component.mjs +156 -0
  19. package/esm2022/lib/components/incidents/incidents-list/incidents-list.component.mjs +94 -0
  20. package/esm2022/lib/components/incidents/incidents-tabs/incidents-tabs.component.mjs +25 -0
  21. package/esm2022/lib/components/login-notifications/login-notifications-list/login-notifications-list.component.mjs +4 -3
  22. package/esm2022/lib/components/newsletters/newsletter-users-list/newsletter-users-list.component.mjs +3 -3
  23. package/esm2022/lib/components/newsletters/newsletters-items/newsletters-items.component.mjs +4 -3
  24. package/esm2022/lib/components/newsletters/newsletters-list/newsletters-list.component.mjs +4 -3
  25. package/esm2022/lib/components/permissions/permissions-list/permissions-list.component.mjs +13 -8
  26. package/esm2022/lib/components/permissions/roles-list/roles-list.component.mjs +13 -8
  27. package/esm2022/lib/components/products/product-details/product-details.component.mjs +14 -4
  28. package/esm2022/lib/components/products/products-list/products-list.component.mjs +4 -3
  29. package/esm2022/lib/components/subscriptions/subscription-agents-list/subscription-agents-list.component.mjs +4 -3
  30. package/esm2022/lib/components/subscriptions/subscription-product-details/subscription-product-details.component.mjs +7 -7
  31. package/esm2022/lib/components/subscriptions/subscription-products/subscription-products.component.mjs +4 -3
  32. package/esm2022/lib/components/subscriptions/subscription-users/subscription-users.component.mjs +57 -20
  33. package/esm2022/lib/components/subscriptions/subscriptions-insight/subscription-insight-nps/subscription-insight-nps.component.mjs +3 -3
  34. package/esm2022/lib/components/subscriptions/subscriptions-list/subscriptions-list.component.mjs +21 -14
  35. package/esm2022/lib/components/tags/tags-category/tags-category.component.mjs +11 -6
  36. package/esm2022/lib/components/tags/tags-list/tags-list.component.mjs +5 -3
  37. package/esm2022/lib/components/tips/tips-list/tips-list.component.mjs +3 -3
  38. package/esm2022/lib/components/tracking/ahoy-events/ahoy-events.component.mjs +60 -17
  39. package/esm2022/lib/components/tracking/ahoy-messages/ahoy-messages.component.mjs +62 -17
  40. package/esm2022/lib/components/tracking/ahoy-visits/ahoy-visits.component.mjs +61 -16
  41. package/esm2022/lib/components/tracking/events/events.component.mjs +62 -16
  42. package/esm2022/lib/components/tracking/versions/versions.component.mjs +58 -17
  43. package/esm2022/lib/components/users/users-list/users-list.component.mjs +13 -7
  44. package/esm2022/lib/shared/routers/routers.mjs +3 -2
  45. package/fesm2022/posiwise-admin-module.mjs +715 -155
  46. package/fesm2022/posiwise-admin-module.mjs.map +1 -1
  47. package/lib/admin.module.d.ts +26 -22
  48. package/lib/components/TOS/terms-of-service/terms-of-service.component.d.ts +2 -0
  49. package/lib/components/config/global-config-list/global-config-list.component.d.ts +2 -0
  50. package/lib/components/credentials/credentials/credentials.component.d.ts +2 -0
  51. package/lib/components/credentials/subscription-credentials/subscription-credentials.component.d.ts +1 -0
  52. package/lib/components/domain-config/domain-config-details/domain-config-build/domain-config-build.component.d.ts +1 -0
  53. package/lib/components/domain-config/domain-config-details/domain-config-core/domain-config-core.component.d.ts +1 -0
  54. package/lib/components/domain-config/domain-config-details/domain-config-details.component.d.ts +1 -0
  55. package/lib/components/domain-config/domain-config-details/domain-config-integrations/domain-config-integrations.component.d.ts +1 -0
  56. package/lib/components/domain-config/domain-config-details/domain-config-interface/domain-config-interface.component.d.ts +1 -0
  57. package/lib/components/domain-config/domain-config-details/domain-config-organization/domain-config-organization.component.d.ts +1 -0
  58. package/lib/components/domain-config/domain-config-details/domain-config-security/domain-config-security.component.d.ts +1 -0
  59. package/lib/components/domain-config/domain-config-details/domain-config-social/domain-config-social.component.d.ts +1 -0
  60. package/lib/components/domain-config/domain-config-list/domain-config-list.component.d.ts +1 -0
  61. package/lib/components/feedback-questions/feedback-questions-details/feedback-questions-details.component.d.ts +1 -0
  62. package/lib/components/feedback-questions/feedback-questions-list/feedback-questions-list.component.d.ts +1 -0
  63. package/lib/components/incidents/add-edit-incident/add-edit-incident.component.d.ts +60 -0
  64. package/lib/components/incidents/incidents-list/incidents-list.component.d.ts +57 -0
  65. package/lib/components/incidents/incidents-tabs/incidents-tabs.component.d.ts +7 -0
  66. package/lib/components/login-notifications/login-notification-details/login-notification-details.component.d.ts +1 -0
  67. package/lib/components/login-notifications/login-notifications-list/login-notifications-list.component.d.ts +1 -0
  68. package/lib/components/newsletters/newsletter-details/newsletter-details.component.d.ts +1 -0
  69. package/lib/components/newsletters/newsletter-item-details/newsletter-item-details.component.d.ts +1 -0
  70. package/lib/components/newsletters/newsletters-items/newsletters-items.component.d.ts +1 -0
  71. package/lib/components/newsletters/newsletters-list/newsletters-list.component.d.ts +1 -0
  72. package/lib/components/permissions/permissions-details/permissions-details.component.d.ts +1 -0
  73. package/lib/components/permissions/permissions-list/permissions-list.component.d.ts +2 -0
  74. package/lib/components/permissions/roles-list/roles-list.component.d.ts +2 -0
  75. package/lib/components/products/product-details/product-details.component.d.ts +2 -0
  76. package/lib/components/products/products-list/products-list.component.d.ts +1 -0
  77. package/lib/components/subscriptions/subscription-product-details/subscription-product-details.component.d.ts +1 -0
  78. package/lib/components/subscriptions/subscription-products/subscription-products.component.d.ts +1 -0
  79. package/lib/components/subscriptions/subscription-users/subscription-users.component.d.ts +15 -2
  80. package/lib/components/subscriptions/subscriptions-list/subscriptions-list.component.d.ts +2 -0
  81. package/lib/components/tags/tags-category/tags-category.component.d.ts +2 -0
  82. package/lib/components/tags/tags-list/tags-list.component.d.ts +1 -0
  83. package/lib/components/tips/tips-list/tips-list.component.d.ts +1 -0
  84. package/lib/components/tracking/ahoy-events/ahoy-events.component.d.ts +13 -2
  85. package/lib/components/tracking/ahoy-messages/ahoy-messages.component.d.ts +13 -2
  86. package/lib/components/tracking/ahoy-visits/ahoy-visits.component.d.ts +13 -2
  87. package/lib/components/tracking/events/events.component.d.ts +16 -2
  88. package/lib/components/tracking/versions/versions.component.d.ts +12 -2
  89. package/lib/components/users/users-list/users-list.component.d.ts +3 -0
  90. package/lib/shared/routers/routers.d.ts +1 -0
  91. package/package.json +1 -1
@@ -63,6 +63,7 @@ export class FaqListComponent extends AppBaseComponent {
63
63
  return this.form.controls;
64
64
  }
65
65
  getFaqs() {
66
+ this.isLoaded = false;
66
67
  this.categories = [];
67
68
  this.faqHashMap = {};
68
69
  const params = {
@@ -282,13 +283,13 @@ export class FaqListComponent extends AppBaseComponent {
282
283
  super.ngOnDestroy();
283
284
  }
284
285
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: FaqListComponent, deps: [{ token: i1.CommonService }, { token: i2.AdminService }, { token: i1.ProductService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component }); }
285
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.6", type: FaqListComponent, selector: "pw-admin-faq-list", viewQueries: [{ propertyName: "editForm", first: true, predicate: ["editForm"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"row\"\n [class.custom-disable-wrapper]=\"buttonBusy\">\n <div class=\"col-12 d-flex flex-wrap justify-content-between align-items-center my-3\"\n *rbacAllow=\"'Pages.Admin.FAQ.Create'\">\n <h2 class=\"card-title p-0 float-start\">FAQ</h2>\n <a href=\"javascript:void(0)\"\n *ngIf=\"showList\"\n (click)=\"showList = !showList\"\n class=\"btn btn-sm btn-outline-primary float-end\"\n role=\"button\"\n aria-expanded=\"false\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Label.AddNew' | transloco }} FAQ\n </a>\n </div>\n</div>\n<!-- Add FAQ Section -->\n<div *ngIf=\"!showList\"\n [class.custom-disable-wrapper]=\"buttonBusy\">\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\"\n (ngSubmit)=\"onSubmit()\">\n <div class=\"row\">\n <pw-input-container class=\"col-12\"\n [label]=\"'Admin.Faq.Question' | transloco\"\n name=\"question\"\n [errorMsg]=\"'Admin.Faq.Validation.FieldRequired' | transloco\">\n <input type=\"text\"\n formControlName=\"question\"\n 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\"\n [label]=\"'Admin.Faq.Answer' | transloco\"\n name=\"answer\"\n [errorMsg]=\"'Admin.Faq.Validation.FieldRequired' | transloco\">\n <quill-editor [styles]=\"{ height: '200px'}\"\n 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\"\n [tooltipText]=\"'Admin.Faq.Tooltip.Category' | transloco\"\n [label]=\"'Admin.Faq.Category' | transloco\"\n name=\"category\"\n [errorMsg]=\"'Admin.Faq.Validation.FieldRequired' | transloco\">\n <p-dropdown [options]=\"categories\"\n class=\"dropdown-bg-transparent\"\n (onChange)=\"onChange($event)\"\n placeholder=\"Select\"\n formControlName=\"category\"\n id=\"category-dropdown\"\n [style]=\"{ width: '100%' }\">\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-lg-2\"\n *rbacAllow=\"'SubscriptionSuperAdmin'\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Faq.Tooltip.Product' | transloco\"\n [label]=\"'Admin.Faq.Product' | transloco\"\n name=\"product_id\"\n [errorMsg]=\"'Admin.Faq.Validation.FieldRequired' | transloco\">\n <p-dropdown [options]=\"productList\"\n class=\"dropdown-bg-transparent\"\n 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\"\n [tooltipText]=\"'Admin.Faq.Tooltip.Features' | transloco\"\n [label]=\"'Admin.Faq.Features' | transloco\"\n name=\"feature_keys\">\n <p-multiSelect [options]=\"featureKeysList\"\n placeholder=\"Select feature keys\"\n [showHeader]=\"true\"\n [showToggleAll]=\"true\"\n formControlName=\"feature_keys\"\n 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\"\n [tooltipText]=\"'Admin.Faq.Tooltip.Position' | transloco\"\n [label]=\"'Admin.Faq.Position' | transloco\"\n name=\"position\"\n [errorMsg]=\"'Admin.Faq.Validation.FieldRequired' | transloco\">\n <div class=\"position\">\n <input type=\"number\"\n min=\"0\"\n formControlName=\"position\"\n 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}}\n <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Visible' | transloco\"\n 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}}\n <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Public' | transloco\"\n 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\n </div>\n <div class=\"row\"\n *rbacAllow=\"'SuperAdmin'\">\n <div class=\"col-4 col-lg-2\">\n <label class=\"text-warning\">{{ 'Admin.Faq.SharedFaq' | transloco}}\n <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.SharedFaq' | transloco\"\n tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch name=\"is_shared_faq\"\n 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}}\n <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.AdminFaq' | transloco\"\n tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch formControlName=\"is_admin_faq\"\n 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}}\n <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.BuildFaq' | transloco\"\n tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch formControlName=\"is_build_faq\"\n 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\"\n class=\"btn btn-outline-default me-2\"\n data-bs-toggle=\"collapse\"\n href=\"#faqCollapse\"\n role=\"button\"\n aria-expanded=\"false\"\n aria-controls=\"faqCollapse\"\n (click)=\"\n form.reset(); showList = !showList; isProductEnabled = true\n \">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button class=\"btn btn-primary\"\n [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\"\n *ngIf=\"showList\"\n [class.custom-disable-wrapper]=\"buttonBusy\">\n <div class=\"col-12 px-0\">\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <p-table [value]=\"faqs\"\n *ngIf=\"isLoaded\"\n [class.hideTable]=\"totalRecordsUnFilter === 0\">\n <ng-template pTemplate=\"caption\">\n <div class=\"search-filter\">\n <div class=\"col-sm-4\">\n <p-multiSelect [showToggleAll]=\"true\"\n [options]=\"featureKeysList\"\n (onChange)=\"onProductChange($event)\"\n placeholder=\"Search by Feature keys\"\n [showHeader]=\"true\"\n maxSelectedLabels=\"2\"\n 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\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search FAQ...\"\n (input)=\"filterFaq()\"\n 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\"\n class=\"actions-list-two\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-faq>\n <tr>\n <td data-head=\"Question\">{{ faq.question }}\n\n </td>\n <td data-head=\"Answer\">{{(faq.answer|removeHtml)|textTruncate: 200}}\n </td>\n <td data-head=\"Position\">{{faq.position}}</td>\n <td data-head=\"Category\">\n <span [appDynamicBadge]=\"{ itemsArray: categoryForBadges, item: faq?.category }\"\n color=\"cyan\"\n class=\"badge ms-1\">\n <span [pTooltip]=\"faq?.feature_keys?.join(',')\"\n tooltipPosition=\"top\">{{ faqHashMap[faq?.category]?.name }}</span>\n </span>\n <span class=\"ms-1 badge bg-warning\"\n *ngIf=\"faq.is_shared_faq || faq.is_admin_faq || faq.is_build_faq\">Super FAQ</span>\n </td>\n <td data-head=\"Visible\">\n <span [appDynamicBadge]=\"{ itemsArray: [true, false], item: faq?.visible }\"\n 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 }\"\n 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\"\n class=\"me-2 me-sm-2\">\n <i\n class=\"fa fa-edit edit-icon\"\n (click)=\"onEdit(faq)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n <li ngbTooltip=\"Delete\"\n class=\"me-2 me-sm-2\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"onDelete(faq)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n <li ngbTooltip=\"View faq\" *ngIf=\"faq?.visible\">\n <a [routerLink]=\"['/',slug,'faq',faq.id]\"\n 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=\"6\">\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\"\n class=\"form-control\"\n required\n [(ngModel)]=\"currentFaq.question\"\n name=\"question\"\n #question=\"ngModel\" />\n <small class=\"form-text text-muted danger\"\n *ngIf=\"!question.valid && (question.dirty || question.touched)\">\n 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' }\"\n [(ngModel)]=\"currentFaq.answer\"\n name=\"answer\"\n required\n #answer=\"ngModel\"></quill-editor>\n <small class=\"form-text text-muted danger\"\n *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}}\n <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Category' | transloco\"\n tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <p-dropdown [options]=\"categories\"\n name=\"category\"\n [required]=\"true\"\n [(ngModel)]=\"currentFaq.category\"\n (onChange)=\"onChange($event)\"\n [style]=\"{ width: '100%' }\"\n class=\"custom-dropdown\">\n </p-dropdown>\n </div>\n <div class=\"col-lg-2\"\n *rbacAllow=\"'SubscriptionSuperAdmin'\">\n <label>{{ 'Admin.Faq.Product' | transloco}}\n <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Product' | transloco\"\n tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <p-dropdown [options]=\"productList\"\n name=\"product_id\"\n [(ngModel)]=\"currentFaq.product_id\"\n [style]=\"{ width: '100%' }\"\n 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 }}\n <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Features' | transloco\"\n tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label>\n <p-multiSelect [options]=\"featureKeysList\"\n [showHeader]=\"true\"\n [showToggleAll]=\"true\"\n [(ngModel)]=\"currentFaq.feature_keys\"\n [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 }}\n <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Position' | transloco\"\n tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label>\n <input type=\"number\"\n name=\"position\"\n class=\"form-control\"\n required\n [(ngModel)]=\"currentFaq.position\" />\n </div>\n <div class=\"col-4 col-lg-1\">\n <label>{{ 'Admin.Faq.Visible' | transloco}}\n <span class=\"tooltip-wrap \"\n [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Visible' | transloco\"\n tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label>\n <div>\n <ui-switch class=\"visible\"\n [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}}\n <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Public' | transloco\"\n tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label>\n <div>\n <ui-switch class=\"public\"\n [checked]=\"currentFaq.public\"\n (valueChange)=\"onPublicValueChange(currentFaq, $event)\">\n </ui-switch>\n </div>\n </div>\n </div>\n <div class=\"row\"\n *rbacAllow=\"'SuperAdmin'\">\n <div class=\"col-4 col-lg-2\">\n <label class=\"text-warning\">{{ 'Admin.Faq.SharedFaq' | transloco}}\n <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.SharedFaq' | transloco\"\n tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch [checked]=\"currentFaq.is_shared_faq\"\n 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}}\n <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.AdminFaq' | transloco\"\n tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch [checked]=\"currentFaq.is_admin_faq\"\n 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}}\n <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.BuildFaq' | transloco\"\n tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch [checked]=\"currentFaq.is_build_faq\"\n 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\"\n *ngIf=\"!faq.isEdit\"\n (click)=\"onDelete(faq)\">\n Delete\n </button>\n </ng-container>\n <button class=\"btn btn-outline-default me-2\"\n *ngIf=\"faq.isEdit\"\n data-bs-toggle=\"collapse\"\n data-bs-target=\"#collapseEdit\"\n aria-expanded=\"false\"\n aria-controls=\"collapseEdit\"\n (click)=\"faq.isEdit = !faq.isEdit; onCancel()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <ng-container *rbacAllow=\"'Pages.Admin.FAQ.Edit'\">\n <button class=\"btn btn-primary me-2\"\n *ngIf=\"!faq.isEdit\"\n (click)=\"onEdit(faq)\">\n {{ 'Button.Edit' | transloco }}\n </button>\n <button class=\"btn btn-primary me-2\"\n [buttonBusy]=\"buttonBusy\"\n *ngIf=\"faq.isEdit\"\n (click)=\"onUpdate(currentFaq)\">\n {{ 'Button.Update' | transloco }}\n </button>\n </ng-container>\n </div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <pw-no-data [message]=\"'Admin.Faq.NoDataMessage' | transloco\"\n *ngIf=\"totalRecordsUnFilter === 0\">\n </pw-no-data>\n <pw-no-data message=\"No Result\"\n *ngIf=\"faqs.length === 0\"> </pw-no-data>\n </div>\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}[_nghost-ng-c3617506782]{display:block!important}\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", "filterPlaceholder", "filterLocale", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "dropdownIcon", "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", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "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]" }, { 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"] }, { 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" }] }); }
286
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.6", 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 my-3\"\n *rbacAllow=\"'Pages.Admin.FAQ.Create'\">\n <h2 class=\"card-title p-0 float-start\">FAQ</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\">\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]=\"totalRecordsUnFilter === 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=\"No Result\" *ngIf=\"faqs.length === 0\"> </pw-no-data>\n <pw-no-data [withImage]=\"true\" [message]=\"'Admin.Faq.NoDataMessage' | transloco\"\n *ngIf=\"totalRecordsUnFilter === 0\">\n </pw-no-data>\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage' | transloco\" [description]=\"'Search.NoDataDescription' | transloco\"\n *ngIf=\"faqs.length === 0\"> </pw-no-data>\n </div>\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", "filterPlaceholder", "filterLocale", "inputId", "dataKey", "filterBy", "filterFields", "autofocus", "resetFilterOnHide", "dropdownIcon", "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", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "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]" }, { 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" }] }); }
286
287
  }
287
288
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: FaqListComponent, decorators: [{
288
289
  type: Component,
289
- args: [{ selector: 'pw-admin-faq-list', template: "<div class=\"row\"\n [class.custom-disable-wrapper]=\"buttonBusy\">\n <div class=\"col-12 d-flex flex-wrap justify-content-between align-items-center my-3\"\n *rbacAllow=\"'Pages.Admin.FAQ.Create'\">\n <h2 class=\"card-title p-0 float-start\">FAQ</h2>\n <a href=\"javascript:void(0)\"\n *ngIf=\"showList\"\n (click)=\"showList = !showList\"\n class=\"btn btn-sm btn-outline-primary float-end\"\n role=\"button\"\n aria-expanded=\"false\">\n <i class=\"fa fa-plus-circle\" aria-hidden=\"true\"></i>\n {{ 'Label.AddNew' | transloco }} FAQ\n </a>\n </div>\n</div>\n<!-- Add FAQ Section -->\n<div *ngIf=\"!showList\"\n [class.custom-disable-wrapper]=\"buttonBusy\">\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\"\n (ngSubmit)=\"onSubmit()\">\n <div class=\"row\">\n <pw-input-container class=\"col-12\"\n [label]=\"'Admin.Faq.Question' | transloco\"\n name=\"question\"\n [errorMsg]=\"'Admin.Faq.Validation.FieldRequired' | transloco\">\n <input type=\"text\"\n formControlName=\"question\"\n 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\"\n [label]=\"'Admin.Faq.Answer' | transloco\"\n name=\"answer\"\n [errorMsg]=\"'Admin.Faq.Validation.FieldRequired' | transloco\">\n <quill-editor [styles]=\"{ height: '200px'}\"\n 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\"\n [tooltipText]=\"'Admin.Faq.Tooltip.Category' | transloco\"\n [label]=\"'Admin.Faq.Category' | transloco\"\n name=\"category\"\n [errorMsg]=\"'Admin.Faq.Validation.FieldRequired' | transloco\">\n <p-dropdown [options]=\"categories\"\n class=\"dropdown-bg-transparent\"\n (onChange)=\"onChange($event)\"\n placeholder=\"Select\"\n formControlName=\"category\"\n id=\"category-dropdown\"\n [style]=\"{ width: '100%' }\">\n </p-dropdown>\n </pw-input-container>\n </div>\n <div class=\"col-lg-2\"\n *rbacAllow=\"'SubscriptionSuperAdmin'\">\n <pw-input-container [showTooltip]=\"true\"\n [tooltipText]=\"'Admin.Faq.Tooltip.Product' | transloco\"\n [label]=\"'Admin.Faq.Product' | transloco\"\n name=\"product_id\"\n [errorMsg]=\"'Admin.Faq.Validation.FieldRequired' | transloco\">\n <p-dropdown [options]=\"productList\"\n class=\"dropdown-bg-transparent\"\n 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\"\n [tooltipText]=\"'Admin.Faq.Tooltip.Features' | transloco\"\n [label]=\"'Admin.Faq.Features' | transloco\"\n name=\"feature_keys\">\n <p-multiSelect [options]=\"featureKeysList\"\n placeholder=\"Select feature keys\"\n [showHeader]=\"true\"\n [showToggleAll]=\"true\"\n formControlName=\"feature_keys\"\n 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\"\n [tooltipText]=\"'Admin.Faq.Tooltip.Position' | transloco\"\n [label]=\"'Admin.Faq.Position' | transloco\"\n name=\"position\"\n [errorMsg]=\"'Admin.Faq.Validation.FieldRequired' | transloco\">\n <div class=\"position\">\n <input type=\"number\"\n min=\"0\"\n formControlName=\"position\"\n 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}}\n <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Visible' | transloco\"\n 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}}\n <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Public' | transloco\"\n 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\n </div>\n <div class=\"row\"\n *rbacAllow=\"'SuperAdmin'\">\n <div class=\"col-4 col-lg-2\">\n <label class=\"text-warning\">{{ 'Admin.Faq.SharedFaq' | transloco}}\n <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.SharedFaq' | transloco\"\n tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch name=\"is_shared_faq\"\n 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}}\n <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.AdminFaq' | transloco\"\n tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch formControlName=\"is_admin_faq\"\n 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}}\n <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.BuildFaq' | transloco\"\n tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch formControlName=\"is_build_faq\"\n 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\"\n class=\"btn btn-outline-default me-2\"\n data-bs-toggle=\"collapse\"\n href=\"#faqCollapse\"\n role=\"button\"\n aria-expanded=\"false\"\n aria-controls=\"faqCollapse\"\n (click)=\"\n form.reset(); showList = !showList; isProductEnabled = true\n \">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <button class=\"btn btn-primary\"\n [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\"\n *ngIf=\"showList\"\n [class.custom-disable-wrapper]=\"buttonBusy\">\n <div class=\"col-12 px-0\">\n <div class=\"w-100 text-center mt-3\"\n *ngIf=\"!isLoaded\">\n <p-progressSpinner strokeWidth=\"2\"> </p-progressSpinner>\n </div>\n <p-table [value]=\"faqs\"\n *ngIf=\"isLoaded\"\n [class.hideTable]=\"totalRecordsUnFilter === 0\">\n <ng-template pTemplate=\"caption\">\n <div class=\"search-filter\">\n <div class=\"col-sm-4\">\n <p-multiSelect [showToggleAll]=\"true\"\n [options]=\"featureKeysList\"\n (onChange)=\"onProductChange($event)\"\n placeholder=\"Search by Feature keys\"\n [showHeader]=\"true\"\n maxSelectedLabels=\"2\"\n 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\"\n [(ngModel)]=\"searchText\"\n pInputText\n size=\"50\"\n placeholder=\"Search FAQ...\"\n (input)=\"filterFaq()\"\n 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\"\n class=\"actions-list-two\">{{ 'Label.Actions' | transloco }}</th>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"body\"\n let-faq>\n <tr>\n <td data-head=\"Question\">{{ faq.question }}\n\n </td>\n <td data-head=\"Answer\">{{(faq.answer|removeHtml)|textTruncate: 200}}\n </td>\n <td data-head=\"Position\">{{faq.position}}</td>\n <td data-head=\"Category\">\n <span [appDynamicBadge]=\"{ itemsArray: categoryForBadges, item: faq?.category }\"\n color=\"cyan\"\n class=\"badge ms-1\">\n <span [pTooltip]=\"faq?.feature_keys?.join(',')\"\n tooltipPosition=\"top\">{{ faqHashMap[faq?.category]?.name }}</span>\n </span>\n <span class=\"ms-1 badge bg-warning\"\n *ngIf=\"faq.is_shared_faq || faq.is_admin_faq || faq.is_build_faq\">Super FAQ</span>\n </td>\n <td data-head=\"Visible\">\n <span [appDynamicBadge]=\"{ itemsArray: [true, false], item: faq?.visible }\"\n 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 }\"\n 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\"\n class=\"me-2 me-sm-2\">\n <i\n class=\"fa fa-edit edit-icon\"\n (click)=\"onEdit(faq)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n <li ngbTooltip=\"Delete\"\n class=\"me-2 me-sm-2\">\n <i\n class=\"fa fa-trash delete-icon\"\n (click)=\"onDelete(faq)\"\n aria-hidden=\"true\"\n ></i>\n </li>\n <li ngbTooltip=\"View faq\" *ngIf=\"faq?.visible\">\n <a [routerLink]=\"['/',slug,'faq',faq.id]\"\n 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=\"6\">\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\"\n class=\"form-control\"\n required\n [(ngModel)]=\"currentFaq.question\"\n name=\"question\"\n #question=\"ngModel\" />\n <small class=\"form-text text-muted danger\"\n *ngIf=\"!question.valid && (question.dirty || question.touched)\">\n 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' }\"\n [(ngModel)]=\"currentFaq.answer\"\n name=\"answer\"\n required\n #answer=\"ngModel\"></quill-editor>\n <small class=\"form-text text-muted danger\"\n *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}}\n <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Category' | transloco\"\n tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <p-dropdown [options]=\"categories\"\n name=\"category\"\n [required]=\"true\"\n [(ngModel)]=\"currentFaq.category\"\n (onChange)=\"onChange($event)\"\n [style]=\"{ width: '100%' }\"\n class=\"custom-dropdown\">\n </p-dropdown>\n </div>\n <div class=\"col-lg-2\"\n *rbacAllow=\"'SubscriptionSuperAdmin'\">\n <label>{{ 'Admin.Faq.Product' | transloco}}\n <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Product' | transloco\"\n tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <p-dropdown [options]=\"productList\"\n name=\"product_id\"\n [(ngModel)]=\"currentFaq.product_id\"\n [style]=\"{ width: '100%' }\"\n 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 }}\n <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Features' | transloco\"\n tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label>\n <p-multiSelect [options]=\"featureKeysList\"\n [showHeader]=\"true\"\n [showToggleAll]=\"true\"\n [(ngModel)]=\"currentFaq.feature_keys\"\n [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 }}\n <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Position' | transloco\"\n tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label>\n <input type=\"number\"\n name=\"position\"\n class=\"form-control\"\n required\n [(ngModel)]=\"currentFaq.position\" />\n </div>\n <div class=\"col-4 col-lg-1\">\n <label>{{ 'Admin.Faq.Visible' | transloco}}\n <span class=\"tooltip-wrap \"\n [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Visible' | transloco\"\n tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label>\n <div>\n <ui-switch class=\"visible\"\n [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}}\n <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.Public' | transloco\"\n tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label>\n <div>\n <ui-switch class=\"public\"\n [checked]=\"currentFaq.public\"\n (valueChange)=\"onPublicValueChange(currentFaq, $event)\">\n </ui-switch>\n </div>\n </div>\n </div>\n <div class=\"row\"\n *rbacAllow=\"'SuperAdmin'\">\n <div class=\"col-4 col-lg-2\">\n <label class=\"text-warning\">{{ 'Admin.Faq.SharedFaq' | transloco}}\n <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.SharedFaq' | transloco\"\n tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch [checked]=\"currentFaq.is_shared_faq\"\n 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}}\n <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.AdminFaq' | transloco\"\n tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch [checked]=\"currentFaq.is_admin_faq\"\n 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}}\n <span class=\"tooltip-wrap\"\n [appendTo]=\"'body'\"\n [pTooltip]=\"'Admin.Faq.Tooltip.BuildFaq' | transloco\"\n tooltipPosition=\"top\">\n <i class=\"fas fa-info-circle\"></i>\n </span>\n </label><br />\n <ui-switch [checked]=\"currentFaq.is_build_faq\"\n 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\"\n *ngIf=\"!faq.isEdit\"\n (click)=\"onDelete(faq)\">\n Delete\n </button>\n </ng-container>\n <button class=\"btn btn-outline-default me-2\"\n *ngIf=\"faq.isEdit\"\n data-bs-toggle=\"collapse\"\n data-bs-target=\"#collapseEdit\"\n aria-expanded=\"false\"\n aria-controls=\"collapseEdit\"\n (click)=\"faq.isEdit = !faq.isEdit; onCancel()\">\n {{ 'Button.Cancel' | transloco }}\n </button>\n <ng-container *rbacAllow=\"'Pages.Admin.FAQ.Edit'\">\n <button class=\"btn btn-primary me-2\"\n *ngIf=\"!faq.isEdit\"\n (click)=\"onEdit(faq)\">\n {{ 'Button.Edit' | transloco }}\n </button>\n <button class=\"btn btn-primary me-2\"\n [buttonBusy]=\"buttonBusy\"\n *ngIf=\"faq.isEdit\"\n (click)=\"onUpdate(currentFaq)\">\n {{ 'Button.Update' | transloco }}\n </button>\n </ng-container>\n </div>\n </td>\n </tr>\n </ng-template>\n </p-table>\n <pw-no-data [message]=\"'Admin.Faq.NoDataMessage' | transloco\"\n *ngIf=\"totalRecordsUnFilter === 0\">\n </pw-no-data>\n <pw-no-data message=\"No Result\"\n *ngIf=\"faqs.length === 0\"> </pw-no-data>\n </div>\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}[_nghost-ng-c3617506782]{display:block!important}\n"] }]
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 my-3\"\n *rbacAllow=\"'Pages.Admin.FAQ.Create'\">\n <h2 class=\"card-title p-0 float-start\">FAQ</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\">\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]=\"totalRecordsUnFilter === 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=\"No Result\" *ngIf=\"faqs.length === 0\"> </pw-no-data>\n <pw-no-data [withImage]=\"true\" [message]=\"'Admin.Faq.NoDataMessage' | transloco\"\n *ngIf=\"totalRecordsUnFilter === 0\">\n </pw-no-data>\n <pw-no-data [withImage]=\"true\" [message]=\"'Search.NoDataMessage' | transloco\" [description]=\"'Search.NoDataDescription' | transloco\"\n *ngIf=\"faqs.length === 0\"> </pw-no-data>\n </div>\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"] }]
290
291
  }], ctorParameters: () => [{ type: i1.CommonService }, { type: i2.AdminService }, { type: i1.ProductService }, { type: i0.Injector }], propDecorators: { editForm: [{
291
292
  type: ViewChild,
292
293
  args: ['editForm', { static: false }]
293
294
  }] } });
294
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFxcy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9mYXFzL2ZhcXMtbGlzdC9mYXFzLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hZG1pbi1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL2ZhcXMvZmFxcy1saXN0L2ZhcXMtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xGLE9BQU8sRUFBb0IsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxPQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxJQUFJLE1BQU0sYUFBYSxDQUFDO0FBRS9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFXLEdBQUcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU83RixNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsZ0JBQWdCO0lBcURsRCxZQUNZLGFBQTRCLEVBQzVCLFlBQTBCLEVBQzFCLGNBQThCLEVBQ3RDLFFBQWtCO1FBRWxCLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUxSLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGlCQUFZLEdBQVosWUFBWSxDQUFj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QUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdG9yLCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUdyb3VwLCBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgZ3JvdXBCeSBmcm9tICdsb2Rhc2gvZ3JvdXBCeSc7XG5pbXBvcnQgc3dhbCBmcm9tICdzd2VldGFsZXJ0Mic7XG5cbmltcG9ydCB7IEFkbWluU2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9hZG1pbi1tb2R1bGUtdXRpbHMnO1xuaW1wb3J0IHsgQXBwQWRtaW4gfSBmcm9tICdAcG9zaXdpc2UvYWRtaW4tbW9kdWxlLXV0aWxzJztcbmltcG9ydCB7IEFwcEJhc2VDb21wb25lbnQgfSBmcm9tICdAcG9zaXdpc2UvYXBwLWJhc2UtY29tcG9uZW50JztcbmltcG9ydCB7IFByb2R1Y3QsIEZBUSB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tdXRpbGl0aWVzJztcbmltcG9ydCB7IENvbW1vblNlcnZpY2UsIFBlcm1pc3Npb25TZXJ2aWNlLCBQcm9kdWN0U2VydmljZSB9IGZyb20gJ0Bwb3Npd2lzZS9jb21tb24tc2VydmljZXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3B3LWFkbWluLWZhcS1saXN0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZmFxcy1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9mYXFzLWxpc3QuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBGYXFMaXN0Q29tcG9uZW50IGV4dGVuZHMgQXBwQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuXG4gICAgZmFxczogRkFRW10gPSBbXTtcblxuICAgIGZhcUxpc3Q6IEZBUVtdID0gW107XG5cbiAgICBiYWNrVXBGQVE6IEZBUVtdID0gW107XG5cbiAgICBzdWJtaXR0ZWQgPSBmYWxzZTtcblxuICAgIGlzTG9hZGVkID0gZmFsc2U7XG5cbiAgICBAVmlld0NoaWxkKCdlZGl0Rm9ybScsIHsgc3RhdGljOiBmYWxzZSB9KSBlZGl0Rm9ybTogTmdGb3JtO1xuXG4gICAgY3VycmVudEZhcTogYW55O1xuXG4gICAgY2F0ZWdvcmllcyA9IFtdO1xuXG4gICAgaXNQcm9kdWN0RW5hYmxlZCA9IHRydWU7XG5cbiAgICBwcm9kdWN0TGlzdDogYW55ID0gW107XG5cbiAgICBzZWFyY2hUZXh0OiBzdHJpbmc7XG5cbiAgICBhbGxQcm9kdWN0czogUHJvZHVjdFtdID0gW107XG5cbiAgICBhbGxGYXFzID0gW107XG5cbiAgICBzaG93TGlzdCA9IHRydWU7XG5cbiAgICBzaG93RmlsdGVycyA9IHRydWU7XG5cbiAgICBkZWZhdWx0VmFsdWUgPSBudWxsO1xuXG4gICAgdG90YWxSZWNvcmRzVW5GaWx0ZXI6IG51bWJlcjtcblxuICAgIHRvdGFsUmVjb3JkczogbnVtYmVyO1xuXG4gICAgc3Vic2NyaXB0aW9uSWQ6IG51bWJlcjtcblxuICAgIGZlYXR1cmVLZXlzTGlzdCA9IFtdO1xuXG4gICAgc2VsZWN0ZWRGZWF0dXJlS2V5cyA9IFtdO1xuXG4gICAgYnV0dG9uQnVzeSA9IGZhbHNlO1xuXG4gICAgY2F0ZWdvcnlGb3JCYWRnZXMgPSBbXTtcblxuICAgIHNsdWc6IGFueTtcblxuICAgIGZhcUhhc2hNYXAgPSB7fTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGNvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgYWRtaW5TZXJ2aWNlOiBBZG1pblNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcHJvZHVjdFNlcnZpY2U6IFByb2R1Y3RTZXJ2aWNlLFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3JcbiAgICApIHtcbiAgICAgICAgc3VwZXIoaW5qZWN0b3IpO1xuICAgICAgICB0aGlzLmZvcm0gPSBBcHBBZG1pbi5nZXRGYXFGb3JtKCk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc2x1ZyA9IFBlcm1pc3Npb25TZXJ2aWNlLnNlbGVjdGVkU3Vic2NyaXB0aW9uPy5zbHVnO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbklkID0gUGVybWlzc2lvblNlcnZpY2Uuc2VsZWN0ZWRTdWJzY3JpcHRpb24/LmlkO1xuICAgICAgICB0aGlzLmdldENhdGVnb3JpZXMoKTtcbiAgICAgICAgdGhpcy5nZXRGYXFzKCk7XG4gICAgfVxuXG4gICAgZ2V0IGYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY29udHJvbHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGYXFzKCkge1xuICAgICAgICB0aGlzLmNhdGVnb3JpZXMgPSBbXTtcbiAgICAgICAgdGhpcy5mYXFIYXNoTWFwID0ge307XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbl9pZDogdGhpcy5zdWJzY3JpcHRpb25JZCxcbiAgICAgICAgICAgIGZlYXR1cmVfa2V5OiB0aGlzLnNlbGVjdGVkRmVhdHVyZUtleXMuam9pbignLCcpIHx8ICcnXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZS5nZXRGYXEocGFyYW1zKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmZhcXMgPSByZXNwb25zZS5mYXFzO1xuICAgICAgICAgICAgdGhpcy5hbGxGYXFzID0gcmVzcG9uc2UuZmFxcztcbiAgICAgICAgICAgIHRoaXMudG90YWxSZWNvcmRzID0gcmVzcG9uc2Uub2JqZWN0X2NvdW50O1xuICAgICAgICAgICAgdGhpcy50b3RhbFJlY29yZHNVbkZpbHRlciA9IHJlc3BvbnNlLnVuZmlsdGVyZWRfY291bnQ7XG4gICAgICAgICAgICB0aGlzLmZhcXMgPSB0aGlzLmZhcXMubWFwKHggPT4ge1xuICAgICAgICAgICAgICAgIHguaXNFZGl0ID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmJhY2tVcEZBUSA9IFsuLi50aGlzLmZhcXNdO1xuICAgICAgICAgICAgcmVzcG9uc2U/LmF2YWlsYWJsZV9jYXRlZ29yeT8uZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZhcUhhc2hNYXBbeC5rZXldID0geDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gcmVzcG9uc2UuYXZhaWxhYmxlX2NhdGVnb3J5O1xuICAgICAgICAgICAgdGhpcy5jYXRlZ29yeUZvckJhZGdlcyA9IHJlc3BvbnNlLmF2YWlsYWJsZV9jYXRlZ29yeS5tYXAoeCA9PiB4LmtleSk7XG4gICAgICAgICAgICBjYXRlZ29yaWVzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXRlZ29yaWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogZWxlbWVudC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZWxlbWVudC5rZXlcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5hbGxGYXFzID0gdGhpcy5mYXFzO1xuICAgICAgICAgICAgdGhpcy5mYXFMaXN0ID0gdGhpcy5mYXFzO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvblN1Ym1pdCgpIHtcbiAgICAgICAgdGhpcy5mb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgICAgaWYgKHRoaXMuZm9ybS52YWxpZCkge1xuICAgICAgICAgICAgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5mYXFzID0gdGhpcy5hbGxGYXFzO1xuICAgICAgICAgICAgdGhpcy5hZGROZXcoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ2FuY2VsKCkge1xuICAgICAgICB0aGlzLmZhcXMgPSB0aGlzLmFsbEZhcXM7XG4gICAgICAgIHRoaXMuc2hvd0ZpbHRlcnMgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKiBGdW5jdGlvbiB0byBmaWx0ZXIgZmFxIGxpc3QgKi9cbiAgICBmaWx0ZXJGYXEoKSB7XG4gICAgICAgIGlmICh0aGlzLnNlYXJjaFRleHQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlYXJjaGVkTGlzdCA9IHRoaXMuZmFxTGlzdC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgZmFxID0+XG4gICAgICAgICAgICAgICAgICAgIGZhcVsncXVlc3Rpb24nXS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc2VhcmNoVGV4dC50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgICAgICAgICAgICAgICBmYXFbJ2Fuc3dlciddLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5mYXFzID0gc2VhcmNoZWRMaXN0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mYXFzID0gdGhpcy5mYXFMaXN0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkTmV3KCkge1xuICAgICAgICB0aGlzLmJ1dHRvbkJ1c3kgPSB0cnVlO1xuICAgICAgICB0aGlzLmFkbWluU2VydmljZVxuICAgICAgICAgICAgLnBvc3RGYXEodGhpcy5mb3JtLnZhbHVlLCB0aGlzLnN1YnNjcmlwdGlvbklkKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IG5ldyBGQVEocmVzcG9uc2UuaWQsIHJlc3BvbnNlLnF1ZXN0aW9uLCByZXNwb25zZS5hbnN3ZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0RmFxcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmFxcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5yZXNldCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNQcm9kdWN0RW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgJCgnW2hyZWY9XCIjZmFxQ29sbGFwc2VcIl0nKS50cmlnZ2VyKCdjbGljaycpO1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2Vzcyh0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgnQWRtaW4uRmFxLkFkZGVkTWVzc2FnZScpKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYWRkKCgpID0+ICh0aGlzLmJ1dHRvbkJ1c3kgPSBmYWxzZSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q2F0ZWdvcmllcygpIHtcbiAgICAgICAgdGhpcy5wcm9kdWN0U2VydmljZVxuICAgICAgICAgICAgLmdldFByb2R1Y3RzKHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb25faWQ6IHRoaXMuc3Vic2NyaXB0aW9uSWRcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3AgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXNwLnByb2R1Y3RzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWxsUHJvZHVjdHMgPSByZXNwLnByb2R1Y3RzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2R1Y3RMaXN0ID0gdGhpcy5ncm91cFByb2R1Y3RzKHJlc3AucHJvZHVjdHMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2R1Y3RMaXN0LnVuc2hpZnQoeyBsYWJlbDogJ1NlbGVjdCBQcm9kdWN0JywgdmFsdWU6IG51bGwgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ3Byb2R1Y3RfaWQnKS5zZXRWYWx1ZSh0aGlzLnByb2R1Y3RMaXN0WzBdLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmVhdHVyZUtleXMgPSBBcnJheS5mcm9tKFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFNldChyZXNwLnByb2R1Y3RzLm1hcChpdGVtID0+IGl0ZW0/LmZlYXR1cmVfa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mZWF0dXJlS2V5c0xpc3QgPSBmZWF0dXJlS2V5cy5tYXAoZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlbGVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNvcnRPYmoob2JqKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopXG4gICAgICAgICAgICAuc29ydCgpXG4gICAgICAgICAgICAucmVkdWNlKChyZXN1bHQsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gb2JqW2tleV07XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSwge30pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ3JvdXBQcm9kdWN0cyhwcm9kdWN0cykge1xuICAgICAgICBpZiAocHJvZHVjdHMgJiYgcHJvZHVjdHM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcHJvZHVjdHMgPSBwcm9kdWN0cy5maWx0ZXIoeCA9PiB4LmRlcGVuZGVuY3lfcHJvZHVjdHM/Lmxlbmd0aCA8IDEgJiYgeC5hY3RpdmUpO1xuICAgICAgICAgICAgcHJvZHVjdHMgPSBncm91cEJ5KHByb2R1Y3RzLCAnY3VycmVuY3knKTtcbiAgICAgICAgICAgIHByb2R1Y3RzID0gdGhpcy5zb3J0T2JqKHByb2R1Y3RzKTtcbiAgICAgICAgICAgIGxldCBncm91cGVkQXJyYXkgPSBbXTtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICAgICAgZm9yIChjb25zdCBwIGluIHByb2R1Y3RzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHAgaW4gcHJvZHVjdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwcm9kdWN0c1twXS5zb3J0KFxuICAgICAgICAgICAgICAgICAgICAgICAgKGEsIGIpID0+IE51bWJlcihiLnByaWNlX3Blcl91bml0KSAtIE51bWJlcihhLnByaWNlX3Blcl91bml0KVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBncm91cGVkQXJyYXkucHVzaCguLi52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ3JvdXBlZEFycmF5ID0gZ3JvdXBlZEFycmF5Lm1hcCh4ID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogeC5pZCxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGAke3gubmFtZX0gfCAke3gucmVnaW9ufSB8ICR7eC5iaWxsaW5nX2ZyZXF1ZW5jeX0gfCAke3gubWluX3VuaXRzfSB4ICR7KFxuICAgICAgICAgICAgICAgICAgICAgICAgeC5wcmljZV9wZXJfdW5pdCAvIDEwMFxuICAgICAgICAgICAgICAgICAgICApLnRvRml4ZWQoMil9IHwgJHt4LmN1cnJlbmN5fWBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBncm91cGVkQXJyYXk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgb25Qcm9kdWN0Q2hhbmdlKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICB0aGlzLnNlbGVjdGVkRmVhdHVyZUtleXMgPSBldmVudC52YWx1ZTtcbiAgICAgICAgdGhpcy5nZXRGYXFzKCk7XG4gICAgfVxuXG4gICAgb25DaGFuZ2UoaXRlbSkge1xuICAgICAgICB0aGlzLmlzUHJvZHVjdEVuYWJsZWQgPSBpdGVtLnZhbHVlICE9PSAncHJvZHVjdCc7XG4gICAgICAgIGlmICh0aGlzLmlzUHJvZHVjdEVuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ3Byb2R1Y3RfaWQnKS5zZXRWYWx1ZShudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ3Byb2R1Y3RfaWQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uVXBkYXRlKGZvcm0pIHtcbiAgICAgICAgdGhpcy5zaG93RmlsdGVycyA9IHRydWU7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICBpZDogdGhpcy5jdXJyZW50RmFxLmlkLFxuICAgICAgICAgICAgcXVlc3Rpb246IGZvcm1bJ3F1ZXN0aW9uJ10sXG4gICAgICAgICAgICBhbnN3ZXI6IGZvcm1bJ2Fuc3dlciddLFxuICAgICAgICAgICAgY2F0ZWdvcnk6IGZvcm1bJ2NhdGVnb3J5J10sXG4gICAgICAgICAgICBwb3NpdGlvbjogZm9ybVsncG9zaXRpb24nXSxcbiAgICAgICAgICAgIHByb2R1Y3RfaWQ6IGZvcm1bJ3Byb2R1Y3RfaWQnXSxcbiAgICAgICAgICAgIGZlYXR1cmVfa2V5czogZm9ybVsnZmVhdHVyZV9rZXlzJ10sXG4gICAgICAgICAgICBpc19zaGFyZWRfZmFxOiBmb3JtWydpc19zaGFyZWRfZmFxJ10sXG4gICAgICAgICAgICBpc19hZG1pbl9mYXE6IGZvcm1bJ2lzX2FkbWluX2ZhcSddLFxuICAgICAgICAgICAgaXNfYnVpbGRfZmFxOiBmb3JtWydpc19idWlsZF9mYXEnXVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmJ1dHRvbkJ1c3kgPSB0cnVlO1xuICAgICAgICB0aGlzLmFkbWluU2VydmljZVxuICAgICAgICAgICAgLnB1dEZhcShkYXRhLCB0aGlzLnN1YnNjcmlwdGlvbklkKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogcmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRGYXEgPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRGYXFzKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2Vzcyh0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgnQWRtaW4uRmFxLlVwZGF0ZWRNZXNzYWdlJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYWRkKCgpID0+ICh0aGlzLmJ1dHRvbkJ1c3kgPSBmYWxzZSkpO1xuICAgIH1cblxuICAgIG9uRWRpdChmYXE6IEZBUSkge1xuICAgICAgICB0aGlzLmZhcXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGl0ZW0uaXNFZGl0ID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICBmYXEuaXNFZGl0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaG93RmlsdGVycyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZhcXMgPSB0aGlzLmZhcXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5pZCA9PT0gZmFxLmlkKTtcbiAgICAgICAgaWYgKGZhcS5wcm9kdWN0X2lkID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlzUHJvZHVjdEVuYWJsZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc1Byb2R1Y3RFbmFibGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50RmFxID0geyAuLi5mYXEgfTtcbiAgICB9XG5cbiAgICBvbkRlbGV0ZShmYXE6IEZBUSkge1xuICAgICAgICBzd2FsLmZpcmUoe1xuICAgICAgICAgICAgdGl0bGU6ICdEZWxldGUnLFxuXG4gICAgICAgICAgICBodG1sOiBgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZT9gLFxuICAgICAgICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogdHJ1ZSxcbiAgICAgICAgICAgIHJldmVyc2VCdXR0b25zOiB0cnVlLFxuICAgICAgICAgICAgaWNvbjogJ3dhcm5pbmcnXG4gICAgICAgIH0pLnRoZW4ocmVwID0+IHtcbiAgICAgICAgICAgIGlmIChyZXAudmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkbWluU2VydmljZS5kZWxldGVGYXEoZmFxLmlkLCB0aGlzLnN1YnNjcmlwdGlvbklkKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3ModGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGUoJ0FkbWluLkZhcS5EZWxldGVkTWVzc2FnZScpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRGYXFzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uVmFsdWVDaGFuZ2UoZmFxOiBGQVEsIHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICBpZDogZmFxLmlkLFxuICAgICAgICAgICAgdmlzaWJsZTogdmFsdWVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmFkbWluU2VydmljZS5wdXRGYXEoZGF0YSwgdGhpcy5zdWJzY3JpcHRpb25JZCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2Vzcyh0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgnQWRtaW4uRmFxLlVwZGF0ZWRNZXNzYWdlJykpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvblB1YmxpY1ZhbHVlQ2hhbmdlKGZhcTogRkFRLCB2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAgICAgaWQ6IGZhcS5pZCxcbiAgICAgICAgICAgIHB1YmxpYzogdmFsdWVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmFkbWluU2VydmljZS5wdXRGYXEoZGF0YSwgdGhpcy5zdWJzY3JpcHRpb25JZCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2Vzcyh0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgnQWRtaW4uRmFxLlVwZGF0ZWRNZXNzYWdlJykpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkRpc2NhcmQoZmFxOiBGQVEpIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuYmFja1VwRkFRLmZpbmQoeCA9PiB4LmlkID09PSBmYXEuaWQpO1xuICAgICAgICB0aGlzLmN1cnJlbnRGYXEgPSB7IC4uLml0ZW0gfTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicm93XCJcbiAgW2NsYXNzLmN1c3RvbS1kaXNhYmxlLXdyYXBwZXJdPVwiYnV0dG9uQnVzeVwiPlxuICA8ZGl2IGNsYXNzPVwiY29sLTEyIGQtZmxleCBmbGV4LXdyYXAganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG15LTNcIlxuICAgICpyYmFjQWxsb3c9XCInUGFnZXMuQWRtaW4uRkFRLkNyZWF0ZSdcIj5cbiAgICA8aDIgY2xhc3M9XCJjYXJkLXRpdGxlIHAtMCBmbG9hdC1zdGFydFwiPkZBUTwvaDI+XG4gICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiXG4gICAgICAqbmdJZj1cInNob3dMaXN0XCJcbiAgICAgIChjbGljayk9XCJzaG93TGlzdCA9ICFzaG93TGlzdFwiXG4gICAgICBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeSBmbG9hdC1lbmRcIlxuICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIj5cbiAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGx1cy1jaXJjbGVcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICB7eyAnTGFiZWwuQWRkTmV3JyB8IHRyYW5zbG9jbyB9fSBGQVFcbiAgICA8L2E+XG4gIDwvZGl2PlxuPC9kaXY+XG48IS0tIEFkZCBGQVEgU2VjdGlvbiAtLT5cbjxkaXYgKm5nSWY9XCIhc2hvd0xpc3RcIlxuICBbY2xhc3MuY3VzdG9tLWRpc2FibGUtd3JhcHBlcl09XCJidXR0b25CdXN5XCI+XG4gIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyXCI+XG4gICAgICA8aDQgY2xhc3M9XCJmdy1ib2xkIG1iLTRcIj57eyAnTGFiZWwuQWRkTmV3JyB8IHRyYW5zbG9jbyB9fSBGQVE8L2g0PlxuICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCJcbiAgICAgICAgKG5nU3VibWl0KT1cIm9uU3VibWl0KClcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgY2xhc3M9XCJjb2wtMTJcIlxuICAgICAgICAgICAgW2xhYmVsXT1cIidBZG1pbi5GYXEuUXVlc3Rpb24nIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgIG5hbWU9XCJxdWVzdGlvblwiXG4gICAgICAgICAgICBbZXJyb3JNc2ddPVwiJ0FkbWluLkZhcS5WYWxpZGF0aW9uLkZpZWxkUmVxdWlyZWQnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJxdWVzdGlvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydxdWVzdGlvbiddLmVycm9ycyB9XCIgLz5cbiAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIGNsYXNzPVwiY29sLTEyXCJcbiAgICAgICAgICAgIFtsYWJlbF09XCInQWRtaW4uRmFxLkFuc3dlcicgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgbmFtZT1cImFuc3dlclwiXG4gICAgICAgICAgICBbZXJyb3JNc2ddPVwiJ0FkbWluLkZhcS5WYWxpZGF0aW9uLkZpZWxkUmVxdWlyZWQnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICA8cXVpbGwtZWRpdG9yIFtzdHlsZXNdPVwieyBoZWlnaHQ6ICcyMDBweCd9XCJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYW5zd2VyXCIgY2xhc3M9XCJxdWlsbEVkaXRvclwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOiBzdWJtaXR0ZWQgJiYgZlsnYW5zd2VyJ10uZXJyb3JzIH1cIj5cbiAgICAgICAgICAgIDwvcXVpbGwtZWRpdG9yPlxuICAgICAgICAgIDwvcHctaW5wdXQtY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlblwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMlwiPlxuICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFt0b29sdGlwVGV4dF09XCInQWRtaW4uRmFxLlRvb2x0aXAuQ2F0ZWdvcnknIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cIidBZG1pbi5GYXEuQ2F0ZWdvcnknIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgbmFtZT1cImNhdGVnb3J5XCJcbiAgICAgICAgICAgICAgW2Vycm9yTXNnXT1cIidBZG1pbi5GYXEuVmFsaWRhdGlvbi5GaWVsZFJlcXVpcmVkJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICA8cC1kcm9wZG93biBbb3B0aW9uc109XCJjYXRlZ29yaWVzXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWJnLXRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3RcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNhdGVnb3J5XCJcbiAgICAgICAgICAgICAgICBpZD1cImNhdGVnb3J5LWRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgICBbc3R5bGVdPVwieyB3aWR0aDogJzEwMCUnIH1cIj5cbiAgICAgICAgICAgICAgPC9wLWRyb3Bkb3duPlxuICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0yXCJcbiAgICAgICAgICAgICpyYmFjQWxsb3c9XCInU3Vic2NyaXB0aW9uU3VwZXJBZG1pbidcIj5cbiAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLkZhcS5Ub29sdGlwLlByb2R1Y3QnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgW2xhYmVsXT1cIidBZG1pbi5GYXEuUHJvZHVjdCcgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICBuYW1lPVwicHJvZHVjdF9pZFwiXG4gICAgICAgICAgICAgIFtlcnJvck1zZ109XCInQWRtaW4uRmFxLlZhbGlkYXRpb24uRmllbGRSZXF1aXJlZCcgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICAgICAgPHAtZHJvcGRvd24gW29wdGlvbnNdPVwicHJvZHVjdExpc3RcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24tYmctdHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInByb2R1Y3RfaWRcIlxuICAgICAgICAgICAgICAgIFtzdHlsZV09XCJ7IHdpZHRoOiAnMTAwJScgfVwiPlxuICAgICAgICAgICAgICA8L3AtZHJvcGRvd24+XG4gICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIEZlYXR1cmVzIGtleXMtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTJcIj5cbiAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIlxuICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLkZhcS5Ub29sdGlwLkZlYXR1cmVzJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCInQWRtaW4uRmFxLkZlYXR1cmVzJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgIG5hbWU9XCJmZWF0dXJlX2tleXNcIj5cbiAgICAgICAgICAgICAgPHAtbXVsdGlTZWxlY3QgW29wdGlvbnNdPVwiZmVhdHVyZUtleXNMaXN0XCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBmZWF0dXJlIGtleXNcIlxuICAgICAgICAgICAgICAgIFtzaG93SGVhZGVyXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtzaG93VG9nZ2xlQWxsXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImZlYXR1cmVfa2V5c1wiXG4gICAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCI+PC9wLW11bHRpU2VsZWN0PlxuICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0yXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtzaG93VG9vbHRpcF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLkZhcS5Ub29sdGlwLlBvc2l0aW9uJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidBZG1pbi5GYXEuUG9zaXRpb24nIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICBuYW1lPVwicG9zaXRpb25cIlxuICAgICAgICAgICAgICAgIFtlcnJvck1zZ109XCInQWRtaW4uRmFxLlZhbGlkYXRpb24uRmllbGRSZXF1aXJlZCcgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9zaXRpb25cIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgICAgICAgbWluPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInBvc2l0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBjb2wtbGctMlwiPlxuICAgICAgICAgICAgPGxhYmVsPnt7ICdBZG1pbi5GYXEuVmlzaWJsZScgfCB0cmFuc2xvY299fVxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvb2x0aXAtd3JhcFwiXG4gICAgICAgICAgICAgICAgW2FwcGVuZFRvXT1cIidib2R5J1wiXG4gICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIidBZG1pbi5GYXEuVG9vbHRpcC5WaXNpYmxlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtaW5mby1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGFiZWw+PGJyIC8+XG4gICAgICAgICAgICA8dWktc3dpdGNoIGZvcm1Db250cm9sTmFtZT1cInZpc2libGVcIj48L3VpLXN3aXRjaD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgY29sLWxnLTJcIj5cbiAgICAgICAgICAgIDxsYWJlbD57eyAnQWRtaW4uRmFxLlB1YmxpYycgfCB0cmFuc2xvY299fVxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvb2x0aXAtd3JhcFwiXG4gICAgICAgICAgICAgICAgW2FwcGVuZFRvXT1cIidib2R5J1wiXG4gICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIidBZG1pbi5GYXEuVG9vbHRpcC5QdWJsaWMnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1pbmZvLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9sYWJlbD48YnIgLz5cbiAgICAgICAgICAgIDx1aS1zd2l0Y2ggZm9ybUNvbnRyb2xOYW1lPVwicHVibGljXCI+PC91aS1zd2l0Y2g+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIlxuICAgICAgICAgICpyYmFjQWxsb3c9XCInU3VwZXJBZG1pbidcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgY29sLWxnLTJcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInRleHQtd2FybmluZ1wiPnt7ICdBZG1pbi5GYXEuU2hhcmVkRmFxJyB8IHRyYW5zbG9jb319XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9vbHRpcC13cmFwXCJcbiAgICAgICAgICAgICAgICBbYXBwZW5kVG9dPVwiJ2JvZHknXCJcbiAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiJ0FkbWluLkZhcS5Ub29sdGlwLlNoYXJlZEZhcScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWluZm8tY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2xhYmVsPjxiciAvPlxuICAgICAgICAgICAgPHVpLXN3aXRjaCBuYW1lPVwiaXNfc2hhcmVkX2ZhcVwiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImlzX3NoYXJlZF9mYXFcIj48L3VpLXN3aXRjaD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgY29sLWxnLTJcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInRleHQtd2FybmluZ1wiPnt7ICdBZG1pbi5GYXEuQWRtaW5GYXEnIHwgdHJhbnNsb2NvfX1cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b29sdGlwLXdyYXBcIlxuICAgICAgICAgICAgICAgIFthcHBlbmRUb109XCInYm9keSdcIlxuICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCInQWRtaW4uRmFxLlRvb2x0aXAuQWRtaW5GYXEnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1pbmZvLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9sYWJlbD48YnIgLz5cbiAgICAgICAgICAgIDx1aS1zd2l0Y2ggZm9ybUNvbnRyb2xOYW1lPVwiaXNfYWRtaW5fZmFxXCJcbiAgICAgICAgICAgICAgbmFtZT1cImlzX2FkbWluX2ZhcVwiPjwvdWktc3dpdGNoPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBjb2wtbGctMlwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidGV4dC13YXJuaW5nXCI+e3sgJ0FkbWluLkZhcS5CdWlsZEZhcScgfCB0cmFuc2xvY299fVxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvb2x0aXAtd3JhcFwiXG4gICAgICAgICAgICAgICAgW2FwcGVuZFRvXT1cIidib2R5J1wiXG4gICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIidBZG1pbi5GYXEuVG9vbHRpcC5CdWlsZEZhcScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWluZm8tY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2xhYmVsPjxiciAvPlxuICAgICAgICAgICAgPHVpLXN3aXRjaCBmb3JtQ29udHJvbE5hbWU9XCJpc19idWlsZF9mYXFcIlxuICAgICAgICAgICAgICBuYW1lPVwiaXNfYnVpbGRfZmFxXCI+PC91aS1zd2l0Y2g+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBtdC00XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItMyB0ZXh0LWVuZFwiPlxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLWRlZmF1bHQgbWUtMlwiXG4gICAgICAgICAgICAgICAgZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiXG4gICAgICAgICAgICAgICAgaHJlZj1cIiNmYXFDb2xsYXBzZVwiXG4gICAgICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICBhcmlhLWNvbnRyb2xzPVwiZmFxQ29sbGFwc2VcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtLnJlc2V0KCk7IHNob3dMaXN0ID0gIXNob3dMaXN0OyBpc1Byb2R1Y3RFbmFibGVkID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgICAge3sgJ0J1dHRvbi5DYW5jZWwnIHwgdHJhbnNsb2NvIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICBbYnV0dG9uQnVzeV09XCJidXR0b25CdXN5XCI+e3sgJ0J1dHRvbi5TYXZlJyB8IHRyYW5zbG9jbyB9fTwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9mb3JtPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuPCEtLSBGQVEgTGlzdC9FZGl0IC0tPlxuPGRpdiBjbGFzcz1cInJvdyBmYXFsaXN0IHByaW1lbmctZGF0YXRhYmxlLWNvbnRhaW5lciBtdC0wXCJcbiAgKm5nSWY9XCJzaG93TGlzdFwiXG4gIFtjbGFzcy5jdXN0b20tZGlzYWJsZS13cmFwcGVyXT1cImJ1dHRvbkJ1c3lcIj5cbiAgPGRpdiBjbGFzcz1cImNvbC0xMiBweC0wXCI+XG4gICAgPGRpdiBjbGFzcz1cInctMTAwIHRleHQtY2VudGVyIG10LTNcIlxuICAgICAgKm5nSWY9XCIhaXNMb2FkZWRcIj5cbiAgICAgIDxwLXByb2dyZXNzU3Bpbm5lciBzdHJva2VXaWR0aD1cIjJcIj4gPC9wLXByb2dyZXNzU3Bpbm5lcj5cbiAgICA8L2Rpdj5cbiAgICA8cC10YWJsZSBbdmFsdWVdPVwiZmFxc1wiXG4gICAgICAqbmdJZj1cImlzTG9hZGVkXCJcbiAgICAgIFtjbGFzcy5oaWRlVGFibGVdPVwidG90YWxSZWNvcmRzVW5GaWx0ZXIgPT09IDBcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJjYXB0aW9uXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtZmlsdGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS00XCI+XG4gICAgICAgICAgICA8cC1tdWx0aVNlbGVjdCBbc2hvd1RvZ2dsZUFsbF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW29wdGlvbnNdPVwiZmVhdHVyZUtleXNMaXN0XCJcbiAgICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uUHJvZHVjdENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggYnkgRmVhdHVyZSBrZXlzXCJcbiAgICAgICAgICAgICAgW3Nob3dIZWFkZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIG1heFNlbGVjdGVkTGFiZWxzPVwiMlwiXG4gICAgICAgICAgICAgIGFwcGVuZFRvPVwiYm9keVwiPlxuICAgICAgICAgICAgPC9wLW11bHRpU2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWVuZFwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zZWFyY2ggbXQtMiBtZS0yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXh0XCJcbiAgICAgICAgICAgICAgcElucHV0VGV4dFxuICAgICAgICAgICAgICBzaXplPVwiNTBcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBGQVEuLi5cIlxuICAgICAgICAgICAgICAoaW5wdXQpPVwiZmlsdGVyRmFxKClcIlxuICAgICAgICAgICAgICBjbGFzcz1cIm13LTkwXCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImhlYWRlclwiPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiPnt7ICdBZG1pbi5GYXEuUXVlc3Rpb24nIHwgdHJhbnNsb2NvIH19PC90aD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCI+e3sgJ0FkbWluLkZhcS5BbnN3ZXInIHwgdHJhbnNsb2NvIH19PC90aD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCI+e3sgJ0FkbWluLkZhcS5Qb3NpdGlvbicgfCB0cmFuc2xvY28gfX08L3RoPlxuICAgICAgICAgIDx0aCBzY29wZT1cInRydWVcIj57eyAnQWRtaW4uRmFxLkNhdGVnb3J5JyB8IHRyYW5zbG9jbyB9fTwvdGg+XG4gICAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiPnt7ICdBZG1pbi5GYXEuVmlzaWJsZScgfCB0cmFuc2xvY28gfX08L3RoPlxuICAgICAgICAgIDx0aCBzY29wZT1cInRydWVcIj57eyAnQWRtaW4uRmFxLlB1YmxpYycgfCB0cmFuc2xvY28gfX08L3RoPlxuICAgICAgICAgIDx0aCBzY29wZT1cInRydWVcIlxuICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb25zLWxpc3QtdHdvXCI+e3sgJ0xhYmVsLkFjdGlvbnMnIHwgdHJhbnNsb2NvIH19PC90aD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiYm9keVwiXG4gICAgICAgIGxldC1mYXE+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQgZGF0YS1oZWFkPVwiUXVlc3Rpb25cIj57eyBmYXEucXVlc3Rpb24gfX1cblxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkIGRhdGEtaGVhZD1cIkFuc3dlclwiPnt7KGZhcS5hbnN3ZXJ8cmVtb3ZlSHRtbCl8dGV4dFRydW5jYXRlOiAyMDB9fVxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkIGRhdGEtaGVhZD1cIlBvc2l0aW9uXCI+e3tmYXEucG9zaXRpb259fTwvdGQ+XG4gICAgICAgICAgPHRkIGRhdGEtaGVhZD1cIkNhdGVnb3J5XCI+XG4gICAgICAgICAgICA8c3BhbiBbYXBwRHluYW1pY0JhZGdlXT1cInsgaXRlbXNBcnJheTogY2F0ZWdvcnlGb3JCYWRnZXMsIGl0ZW06IGZhcT8uY2F0ZWdvcnkgfVwiXG4gICAgICAgICAgICAgIGNvbG9yPVwiY3lhblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2UgbXMtMVwiPlxuICAgICAgICAgICAgICA8c3BhbiBbcFRvb2x0aXBdPVwiZmFxPy5mZWF0dXJlX2tleXM/LmpvaW4oJywnKVwiXG4gICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+e3sgZmFxSGFzaE1hcFtmYXE/LmNhdGVnb3J5XT8ubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtMSBiYWRnZSBiZy13YXJuaW5nXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJmYXEuaXNfc2hhcmVkX2ZhcSB8fCBmYXEuaXNfYWRtaW5fZmFxIHx8IGZhcS5pc19idWlsZF9mYXFcIj5TdXBlciBGQVE8L3NwYW4+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQgZGF0YS1oZWFkPVwiVmlzaWJsZVwiPlxuICAgICAgICAgICAgPHNwYW4gW2FwcER5bmFtaWNCYWRnZV09XCJ7IGl0ZW1zQXJyYXk6IFt0cnVlLCBmYWxzZV0sIGl0ZW06IGZhcT8udmlzaWJsZSB9XCJcbiAgICAgICAgICAgICAgY29sb3I9XCJzdWNjZXNzLWRhbmdlclwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYmFkZ2VcIj57eyBmYXE/LnZpc2libGUgfX08L3NwYW4+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQgZGF0YS1oZWFkPVwiUHVibGljXCI+XG4gICAgICAgICAgICA8c3BhbiBbYXBwRHluYW1pY0JhZGdlXT1cInsgaXRlbXNBcnJheTogW3RydWUsIGZhbHNlXSwgaXRlbTogZmFxPy5wdWJsaWMgfVwiXG4gICAgICAgICAgICAgIGNvbG9yPVwic3VjY2Vzcy1kYW5nZXJcIlxuICAgICAgICAgICAgICBjbGFzcz1cImJhZGdlXCI+e3sgZmFxPy5wdWJsaWMgfX08L3NwYW4+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8dGQgZGF0YS1oZWFkPVwiQWN0aW9uXCI+XG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJsaXN0LXVuc3R5bGVkIGxpc3QtaW5saW5lXCI+XG4gICAgICAgICAgICAgIDxsaSBuZ2JUb29sdGlwPVwiRWRpdFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtZS0yIG1lLXNtLTJcIj5cbiAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmEgZmEtZWRpdCBlZGl0LWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkVkaXQoZmFxKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDxsaSBuZ2JUb29sdGlwPVwiRGVsZXRlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1lLTIgbWUtc20tMlwiPlxuICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYSBmYS10cmFzaCBkZWxldGUtaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGVsZXRlKGZhcSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8bGkgbmdiVG9vbHRpcD1cIlZpZXcgZmFxXCIgKm5nSWY9XCJmYXE/LnZpc2libGVcIj5cbiAgICAgICAgICAgICAgICA8YSBbcm91dGVyTGlua109XCJbJy8nLHNsdWcsJ2ZhcScsZmFxLmlkXVwiXG4gICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIj5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZXllXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyICpuZ0lmPVwiZmFxLmlzRWRpdFwiPlxuICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiNlwiPlxuICAgICAgICAgICAgPGZvcm0gKG5nU3VibWl0KT1cIm9uU3VibWl0KClcIlxuICAgICAgICAgICAgICAjZWRpdEZvcm09XCJuZ0Zvcm1cIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwibmFtZVwiPnt7ICdBZG1pbi5GYXEuUXVlc3Rpb24nIHwgdHJhbnNsb2NvIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY3VycmVudEZhcS5xdWVzdGlvblwiXG4gICAgICAgICAgICAgICAgICBuYW1lPVwicXVlc3Rpb25cIlxuICAgICAgICAgICAgICAgICAgI3F1ZXN0aW9uPVwibmdNb2RlbFwiIC8+XG4gICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiZm9ybS10ZXh0IHRleHQtbXV0ZWQgZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIXF1ZXN0aW9uLnZhbGlkICYmIChxdWVzdGlvbi5kaXJ0eSB8fCBxdWVzdGlvbi50b3VjaGVkKVwiPlxuICAgICAgICAgICAgICAgICAgUGxlYXNlIGVudGVyIGEgcXVlc3Rpb248L3NtYWxsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ0FkbWluLkZhcS5BbnN3ZXInIHwgdHJhbnNsb2NvIH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8cXVpbGwtZWRpdG9yIFtzdHlsZXNdPVwieyBoZWlnaHQ6ICcyMDBweCcgfVwiXG4gICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImN1cnJlbnRGYXEuYW5zd2VyXCJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJhbnN3ZXJcIlxuICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICNhbnN3ZXI9XCJuZ01vZGVsXCI+PC9xdWlsbC1lZGl0b3I+XG4gICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiZm9ybS10ZXh0IHRleHQtbXV0ZWQgZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWFuc3dlci52YWxpZCAmJiAoYW5zd2VyLmRpcnR5IHx8IGFuc3dlci50b3VjaGVkKVwiPlxuICAgICAgICAgICAgICAgICAgUGxlYXNlIGVudGVyIGFuIGFuc3dlcjwvc21hbGw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG5vLWd1dHRlcnMganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnQWRtaW4uRmFxLkNhdGVnb3J5JyB8IHRyYW5zbG9jb319XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9vbHRpcC13cmFwXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXBwZW5kVG9dPVwiJ2JvZHknXCJcbiAgICAgICAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiJ0FkbWluLkZhcS5Ub29sdGlwLkNhdGVnb3J5JyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtaW5mby1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+PGJyIC8+XG4gICAgICAgICAgICAgICAgICA8cC1kcm9wZG93biBbb3B0aW9uc109XCJjYXRlZ29yaWVzXCJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cImNhdGVnb3J5XCJcbiAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImN1cnJlbnRGYXEuY2F0ZWdvcnlcIlxuICAgICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJ7IHdpZHRoOiAnMTAwJScgfVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3VzdG9tLWRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgICA8L3AtZHJvcGRvd24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0yXCJcbiAgICAgICAgICAgICAgICAgICpyYmFjQWxsb3c9XCInU3Vic2NyaXB0aW9uU3VwZXJBZG1pbidcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnQWRtaW4uRmFxLlByb2R1Y3QnIHwgdHJhbnNsb2NvfX1cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b29sdGlwLXdyYXBcIlxuICAgICAgICAgICAgICAgICAgICAgIFthcHBlbmRUb109XCInYm9keSdcIlxuICAgICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCInQWRtaW4uRmFxLlRvb2x0aXAuUHJvZHVjdCcgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWluZm8tY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPjxiciAvPlxuICAgICAgICAgICAgICAgICAgPHAtZHJvcGRvd24gW29wdGlvbnNdPVwicHJvZHVjdExpc3RcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwicHJvZHVjdF9pZFwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY3VycmVudEZhcS5wcm9kdWN0X2lkXCJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cInsgd2lkdGg6ICcxMDAlJyB9XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjdXN0b20tZHJvcGRvd25cIj5cbiAgICAgICAgICAgICAgICAgIDwvcC1kcm9wZG93bj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIGZlYXR1cmUga2V5cyAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJcIj57eyAnQWRtaW4uRmFxLkZlYXR1cmVzJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9vbHRpcC13cmFwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthcHBlbmRUb109XCInYm9keSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIidBZG1pbi5GYXEuVG9vbHRpcC5GZWF0dXJlcycgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1pbmZvLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0IFtvcHRpb25zXT1cImZlYXR1cmVLZXlzTGlzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgW3Nob3dIZWFkZXJdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3Nob3dUb2dnbGVBbGxdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50RmFxLmZlYXR1cmVfa2V5c1wiXG4gICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcbiAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRUbz1cImJvZHlcIj48L3AtbXVsdGlTZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJcIj57eyAnQWRtaW4uRmFxLlBvc2l0aW9uJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvb2x0aXAtd3JhcFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2FwcGVuZFRvXT1cIidib2R5J1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIidBZG1pbi5GYXEuVG9vbHRpcC5Qb3NpdGlvbicgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWluZm8tY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwicG9zaXRpb25cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY3VycmVudEZhcS5wb3NpdGlvblwiIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IGNvbC1sZy0xXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ0FkbWluLkZhcS5WaXNpYmxlJyB8IHRyYW5zbG9jb319XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidG9vbHRpcC13cmFwIFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2FwcGVuZFRvXT1cIidib2R5J1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIidBZG1pbi5GYXEuVG9vbHRpcC5WaXNpYmxlJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtaW5mby1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8dWktc3dpdGNoIGNsYXNzPVwidmlzaWJsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiY3VycmVudEZhcS52aXNpYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25WYWx1ZUNoYW5nZShjdXJyZW50RmFxLCAkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvdWktc3dpdGNoPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IGNvbC1sZy0xXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ0FkbWluLkZhcS5QdWJsaWMnIHwgdHJhbnNsb2NvfX1cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b29sdGlwLXdyYXBcIlxuICAgICAgICAgICAgICAgICAgICAgIFthcHBlbmRUb109XCInYm9keSdcIlxuICAgICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCInQWRtaW4uRmFxLlRvb2x0aXAuUHVibGljJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtaW5mby1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8dWktc3dpdGNoIGNsYXNzPVwicHVibGljXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJjdXJyZW50RmFxLnB1YmxpY1wiXG4gICAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uUHVibGljVmFsdWVDaGFuZ2UoY3VycmVudEZhcSwgJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICA8L3VpLXN3aXRjaD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiXG4gICAgICAgICAgICAgICAgKnJiYWNBbGxvdz1cIidTdXBlckFkbWluJ1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBjb2wtbGctMlwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidGV4dC13YXJuaW5nXCI+e3sgJ0FkbWluLkZhcS5TaGFyZWRGYXEnIHwgdHJhbnNsb2NvfX1cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b29sdGlwLXdyYXBcIlxuICAgICAgICAgICAgICAgICAgICAgIFthcHBlbmRUb109XCInYm9keSdcIlxuICAgICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCInQWRtaW4uRmFxLlRvb2x0aXAuU2hhcmVkRmFxJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtaW5mby1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+PGJyIC8+XG4gICAgICAgICAgICAgICAgICA8dWktc3dpdGNoIFtjaGVja2VkXT1cImN1cnJlbnRGYXEuaXNfc2hhcmVkX2ZhcVwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJpc19zaGFyZWRfZmFxXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50RmFxLmlzX3NoYXJlZF9mYXFcIj48L3VpLXN3aXRjaD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgY29sLWxnLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInRleHQtd2FybmluZ1wiPnt7ICdBZG1pbi5GYXEuQWRtaW5GYXEnIHwgdHJhbnNsb2NvfX1cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0b29sdGlwLXdyYXBcIlxuICAgICAgICAgICAgICAgICAgICAgIFthcHBlbmRUb109XCInYm9keSdcIlxuICAgICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCInQWRtaW4uRmFxLlRvb2x0aXAuQWRtaW5GYXEnIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1pbmZvLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD48YnIgLz5cbiAgICAgICAgICAgICAgICAgIDx1aS1zd2l0Y2ggW2NoZWNrZWRdPVwiY3VycmVudEZhcS5pc19hZG1pbl9mYXFcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwiaXNfYWRtaW5fZmFxXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50RmFxLmlzX2FkbWluX2ZhcVwiPjwvdWktc3dpdGNoPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBjb2wtbGctMlwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidGV4dC13YXJuaW5nXCI+e3sgJ0FkbWluLkZhcS5CdWlsZEZhcScgfCB0cmFuc2xvY299fVxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvb2x0aXAtd3JhcFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2FwcGVuZFRvXT1cIidib2R5J1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIidBZG1pbi5GYXEuVG9vbHRpcC5CdWlsZEZhcScgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWluZm8tY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPjxiciAvPlxuICAgICAgICAgICAgICAgICAgPHVpLXN3aXRjaCBbY2hlY2tlZF09XCJjdXJyZW50RmFxLmlzX2J1aWxkX2ZhcVwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJpc19idWlsZF9mYXFcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImN1cnJlbnRGYXEuaXNfYnVpbGRfZmFxXCI+PC91aS1zd2l0Y2g+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZW5kXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKnJiYWNBbGxvdz1cIidQYWdlcy5BZG1pbi5GQVEuRGVsZXRlJ1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtZGFuZ2VyIG1lLTJcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZmFxLmlzRWRpdFwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGUoZmFxKVwiPlxuICAgICAgICAgICAgICAgICAgRGVsZXRlXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLWRlZmF1bHQgbWUtMlwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJmYXEuaXNFZGl0XCJcbiAgICAgICAgICAgICAgICBkYXRhLWJzLXRvZ2dsZT1cImNvbGxhcHNlXCJcbiAgICAgICAgICAgICAgICBkYXRhLWJzLXRhcmdldD1cIiNjb2xsYXBzZUVkaXRcIlxuICAgICAgICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgYXJpYS1jb250cm9scz1cImNvbGxhcHNlRWRpdFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImZhcS5pc0VkaXQgPSAhZmFxLmlzRWRpdDsgb25DYW5jZWwoKVwiPlxuICAgICAgICAgICAgICAgIHt7ICdCdXR0b24uQ2FuY2VsJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqcmJhY0FsbG93PVwiJ1BhZ2VzLkFkbWluLkZBUS5FZGl0J1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbWUtMlwiXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIiFmYXEuaXNFZGl0XCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkVkaXQoZmFxKVwiPlxuICAgICAgICAgICAgICAgICAge3sgJ0J1dHRvbi5FZGl0JyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbWUtMlwiXG4gICAgICAgICAgICAgICAgICBbYnV0dG9uQnVzeV09XCJidXR0b25CdXN5XCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmFxLmlzRWRpdFwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25VcGRhdGUoY3VycmVudEZhcSlcIj5cbiAgICAgICAgICAgICAgICAgIHt7ICdCdXR0b24uVXBkYXRlJyB8IHRyYW5zbG9jbyB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvcC10YWJsZT5cbiAgICA8cHctbm8tZGF0YSBbbWVzc2FnZV09XCInQWRtaW4uRmFxLk5vRGF0YU1lc3NhZ2UnIHwgdHJhbnNsb2NvXCJcbiAgICAgICpuZ0lmPVwidG90YWxSZWNvcmRzVW5GaWx0ZXIgPT09IDBcIj5cbiAgICA8L3B3LW5vLWRhdGE+XG4gICAgPHB3LW5vLWRhdGEgbWVzc2FnZT1cIk5vIFJlc3VsdFwiXG4gICAgICAqbmdJZj1cImZhcXMubGVuZ3RoID09PSAwXCI+IDwvcHctbm8tZGF0YT5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
295
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFxcy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYWRtaW4tbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9mYXFzL2ZhcXMtbGlzdC9mYXFzLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hZG1pbi1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL2ZhcXMvZmFxcy1saXN0L2ZhcXMtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xGLE9BQU8sRUFBb0IsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxPQUFPLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxJQUFJLE1BQU0sYUFBYSxDQUFDO0FBRS9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDaEUsT0FBTyxFQUFXLEdBQUcsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzFELE9BQU8sRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU83RixNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsZ0JBQWdCO0lBbURsRCxZQUNZLGFBQTRCLEVBQzVCLFlBQTBCLEVBQzFCLGNBQThCLEVBQ3RDLFFBQWtCO1FBRWxCLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUxSLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGlCQUFZLEdBQVosWUFBWSxDQUFj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SSxtQkFBbUI7aUtBaUJhLFFBQVE7c0JBQWpELFNBQVM7dUJBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0b3IsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtR3JvdXAsIE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCBncm91cEJ5IGZyb20gJ2xvZGFzaC9ncm91cEJ5JztcbmltcG9ydCBzd2FsIGZyb20gJ3N3ZWV0YWxlcnQyJztcblxuaW1wb3J0IHsgQWRtaW5TZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2FkbWluLW1vZHVsZS11dGlscyc7XG5pbXBvcnQgeyBBcHBBZG1pbiB9IGZyb20gJ0Bwb3Npd2lzZS9hZG1pbi1tb2R1bGUtdXRpbHMnO1xuaW1wb3J0IHsgQXBwQmFzZUNvbXBvbmVudCB9IGZyb20gJ0Bwb3Npd2lzZS9hcHAtYmFzZS1jb21wb25lbnQnO1xuaW1wb3J0IHsgUHJvZHVjdCwgRkFRIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi11dGlsaXRpZXMnO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSwgUGVybWlzc2lvblNlcnZpY2UsIFByb2R1Y3RTZXJ2aWNlIH0gZnJvbSAnQHBvc2l3aXNlL2NvbW1vbi1zZXJ2aWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncHctYWRtaW4tZmFxLWxpc3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9mYXFzLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2ZhcXMtbGlzdC5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEZhcUxpc3RDb21wb25lbnQgZXh0ZW5kcyBBcHBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIGZvcm06IFVudHlwZWRGb3JtR3JvdXA7XG5cbiAgICBmYXFzOiBGQVFbXSA9IFtdO1xuXG4gICAgZmFxTGlzdDogRkFRW10gPSBbXTtcblxuICAgIGJhY2tVcEZBUTogRkFRW10gPSBbXTtcblxuICAgIHN1Ym1pdHRlZCA9IGZhbHNlO1xuXG4gICAgaXNMb2FkZWQgPSBmYWxzZTtcblxuICAgIEBWaWV3Q2hpbGQoJ2VkaXRGb3JtJywgeyBzdGF0aWM6IGZhbHNlIH0pIGVkaXRGb3JtOiBOZ0Zvcm07XG5cbiAgICBjdXJyZW50RmFxOiBhbnk7XG5cbiAgICBjYXRlZ29yaWVzID0gW107XG5cbiAgICBpc1Byb2R1Y3RFbmFibGVkID0gdHJ1ZTtcblxuICAgIHByb2R1Y3RMaXN0OiBhbnkgPSBbXTtcblxuICAgIHNlYXJjaFRleHQ6IHN0cmluZztcblxuICAgIGFsbFByb2R1Y3RzOiBQcm9kdWN0W10gPSBbXTtcblxuICAgIGFsbEZhcXMgPSBbXTtcblxuICAgIHNob3dMaXN0ID0gdHJ1ZTtcblxuICAgIHNob3dGaWx0ZXJzID0gdHJ1ZTtcblxuICAgIGRlZmF1bHRWYWx1ZSA9IG51bGw7XG5cbiAgICB0b3RhbFJlY29yZHNVbkZpbHRlcjogbnVtYmVyO1xuXG4gICAgdG90YWxSZWNvcmRzOiBudW1iZXI7XG5cbiAgICBzdWJzY3JpcHRpb25JZDogbnVtYmVyO1xuXG4gICAgZmVhdHVyZUtleXNMaXN0ID0gW107XG5cbiAgICBzZWxlY3RlZEZlYXR1cmVLZXlzID0gW107XG5cbiAgICBidXR0b25CdXN5ID0gZmFsc2U7XG5cbiAgICBjYXRlZ29yeUZvckJhZGdlcyA9IFtdO1xuXG4gICAgc2x1ZzogYW55O1xuICAgIGZhcUhhc2hNYXAgPSB7fTtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGFkbWluU2VydmljZTogQWRtaW5TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHByb2R1Y3RTZXJ2aWNlOiBQcm9kdWN0U2VydmljZSxcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICAgICAgdGhpcy5mb3JtID0gQXBwQWRtaW4uZ2V0RmFxRm9ybSgpO1xuICAgIH1cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zbHVnID0gUGVybWlzc2lvblNlcnZpY2Uuc2VsZWN0ZWRTdWJzY3JpcHRpb24/LnNsdWc7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uSWQgPSBQZXJtaXNzaW9uU2VydmljZS5zZWxlY3RlZFN1YnNjcmlwdGlvbj8uaWQ7XG4gICAgICAgIHRoaXMuZ2V0Q2F0ZWdvcmllcygpO1xuICAgICAgICB0aGlzLmdldEZhcXMoKTtcbiAgICB9XG4gICAgZ2V0IGYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0uY29udHJvbHM7XG4gICAgfVxuICAgIHByaXZhdGUgZ2V0RmFxcygpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNhdGVnb3JpZXMgPSBbXTtcbiAgICAgICAgdGhpcy5mYXFIYXNoTWFwID0ge307XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbl9pZDogdGhpcy5zdWJzY3JpcHRpb25JZCxcbiAgICAgICAgICAgIGZlYXR1cmVfa2V5OiB0aGlzLnNlbGVjdGVkRmVhdHVyZUtleXMuam9pbignLCcpIHx8ICcnXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY29tbW9uU2VydmljZS5nZXRGYXEocGFyYW1zKS5zdWJzY3JpYmUocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmZhcXMgPSByZXNwb25zZS5mYXFzO1xuICAgICAgICAgICAgdGhpcy5hbGxGYXFzID0gcmVzcG9uc2UuZmFxcztcbiAgICAgICAgICAgIHRoaXMudG90YWxSZWNvcmRzID0gcmVzcG9uc2Uub2JqZWN0X2NvdW50O1xuICAgICAgICAgICAgdGhpcy50b3RhbFJlY29yZHNVbkZpbHRlciA9IHJlc3BvbnNlLnVuZmlsdGVyZWRfY291bnQ7XG4gICAgICAgICAgICB0aGlzLmZhcXMgPSB0aGlzLmZhcXMubWFwKHggPT4ge1xuICAgICAgICAgICAgICAgIHguaXNFZGl0ID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLmJhY2tVcEZBUSA9IFsuLi50aGlzLmZhcXNdO1xuICAgICAgICAgICAgcmVzcG9uc2U/LmF2YWlsYWJsZV9jYXRlZ29yeT8uZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZhcUhhc2hNYXBbeC5rZXldID0geDtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gcmVzcG9uc2UuYXZhaWxhYmxlX2NhdGVnb3J5O1xuICAgICAgICAgICAgdGhpcy5jYXRlZ29yeUZvckJhZGdlcyA9IHJlc3BvbnNlLmF2YWlsYWJsZV9jYXRlZ29yeS5tYXAoeCA9PiB4LmtleSk7XG4gICAgICAgICAgICBjYXRlZ29yaWVzLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYXRlZ29yaWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogZWxlbWVudC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZWxlbWVudC5rZXlcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5hbGxGYXFzID0gdGhpcy5mYXFzO1xuICAgICAgICAgICAgdGhpcy5mYXFMaXN0ID0gdGhpcy5mYXFzO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvblN1Ym1pdCgpIHtcbiAgICAgICAgdGhpcy5mb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgICAgaWYgKHRoaXMuZm9ybS52YWxpZCkge1xuICAgICAgICAgICAgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5mYXFzID0gdGhpcy5hbGxGYXFzO1xuICAgICAgICAgICAgdGhpcy5hZGROZXcoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ2FuY2VsKCkge1xuICAgICAgICB0aGlzLmZhcXMgPSB0aGlzLmFsbEZhcXM7XG4gICAgICAgIHRoaXMuc2hvd0ZpbHRlcnMgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKiBGdW5jdGlvbiB0byBmaWx0ZXIgZmFxIGxpc3QgKi9cbiAgICBmaWx0ZXJGYXEoKSB7XG4gICAgICAgIGlmICh0aGlzLnNlYXJjaFRleHQpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlYXJjaGVkTGlzdCA9IHRoaXMuZmFxTGlzdC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgZmFxID0+XG4gICAgICAgICAgICAgICAgICAgIGZhcVsncXVlc3Rpb24nXS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMuc2VhcmNoVGV4dC50b0xvd2VyQ2FzZSgpKSB8fFxuICAgICAgICAgICAgICAgICAgICBmYXFbJ2Fuc3dlciddLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5zZWFyY2hUZXh0LnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5mYXFzID0gc2VhcmNoZWRMaXN0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mYXFzID0gdGhpcy5mYXFMaXN0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkTmV3KCkge1xuICAgICAgICB0aGlzLmJ1dHRvbkJ1c3kgPSB0cnVlO1xuICAgICAgICB0aGlzLmFkbWluU2VydmljZVxuICAgICAgICAgICAgLnBvc3RGYXEodGhpcy5mb3JtLnZhbHVlLCB0aGlzLnN1YnNjcmlwdGlvbklkKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IG5ldyBGQVEocmVzcG9uc2UuaWQsIHJlc3BvbnNlLnF1ZXN0aW9uLCByZXNwb25zZS5hbnN3ZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0RmFxcygpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmFxcy51bnNoaWZ0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5yZXNldCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNQcm9kdWN0RW5hYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgJCgnW2hyZWY9XCIjZmFxQ29sbGFwc2VcIl0nKS50cmlnZ2VyKCdjbGljaycpO1xuICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2Vzcyh0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgnQWRtaW4uRmFxLkFkZGVkTWVzc2FnZScpKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYWRkKCgpID0+ICh0aGlzLmJ1dHRvbkJ1c3kgPSBmYWxzZSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q2F0ZWdvcmllcygpIHtcbiAgICAgICAgdGhpcy5wcm9kdWN0U2VydmljZVxuICAgICAgICAgICAgLmdldFByb2R1Y3RzKHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb25faWQ6IHRoaXMuc3Vic2NyaXB0aW9uSWRcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHJlc3AgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZXNwLnByb2R1Y3RzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWxsUHJvZHVjdHMgPSByZXNwLnByb2R1Y3RzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2R1Y3RMaXN0ID0gdGhpcy5ncm91cFByb2R1Y3RzKHJlc3AucHJvZHVjdHMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2R1Y3RMaXN0LnVuc2hpZnQoeyBsYWJlbDogJ1NlbGVjdCBQcm9kdWN0JywgdmFsdWU6IG51bGwgfSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ3Byb2R1Y3RfaWQnKS5zZXRWYWx1ZSh0aGlzLnByb2R1Y3RMaXN0WzBdLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmVhdHVyZUtleXMgPSBBcnJheS5mcm9tKFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFNldChyZXNwLnByb2R1Y3RzLm1hcChpdGVtID0+IGl0ZW0/LmZlYXR1cmVfa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mZWF0dXJlS2V5c0xpc3QgPSBmZWF0dXJlS2V5cy5tYXAoZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBlbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlbGVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNvcnRPYmoob2JqKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopXG4gICAgICAgICAgICAuc29ydCgpXG4gICAgICAgICAgICAucmVkdWNlKChyZXN1bHQsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gb2JqW2tleV07XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSwge30pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ3JvdXBQcm9kdWN0cyhwcm9kdWN0cykge1xuICAgICAgICBpZiAocHJvZHVjdHMgJiYgcHJvZHVjdHM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcHJvZHVjdHMgPSBwcm9kdWN0cy5maWx0ZXIoeCA9PiB4LmRlcGVuZGVuY3lfcHJvZHVjdHM/Lmxlbmd0aCA8IDEgJiYgeC5hY3RpdmUpO1xuICAgICAgICAgICAgcHJvZHVjdHMgPSBncm91cEJ5KHByb2R1Y3RzLCAnY3VycmVuY3knKTtcbiAgICAgICAgICAgIHByb2R1Y3RzID0gdGhpcy5zb3J0T2JqKHByb2R1Y3RzKTtcbiAgICAgICAgICAgIGxldCBncm91cGVkQXJyYXkgPSBbXTtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICAgICAgZm9yIChjb25zdCBwIGluIHByb2R1Y3RzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHAgaW4gcHJvZHVjdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwcm9kdWN0c1twXS5zb3J0KFxuICAgICAgICAgICAgICAgICAgICAgICAgKGEsIGIpID0+IE51bWJlcihiLnByaWNlX3Blcl91bml0KSAtIE51bWJlcihhLnByaWNlX3Blcl91bml0KVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBncm91cGVkQXJyYXkucHVzaCguLi52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZ3JvdXBlZEFycmF5ID0gZ3JvdXBlZEFycmF5Lm1hcCh4ID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogeC5pZCxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGAke3gubmFtZX0gfCAke3gucmVnaW9ufSB8ICR7eC5iaWxsaW5nX2ZyZXF1ZW5jeX0gfCAke3gubWluX3VuaXRzfSB4ICR7KFxuICAgICAgICAgICAgICAgICAgICAgICAgeC5wcmljZV9wZXJfdW5pdCAvIDEwMFxuICAgICAgICAgICAgICAgICAgICApLnRvRml4ZWQoMil9IHwgJHt4LmN1cnJlbmN5fWBcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHJldHVybiBncm91cGVkQXJyYXk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgb25Qcm9kdWN0Q2hhbmdlKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuc2VhcmNoVGV4dCA9ICcnO1xuICAgICAgICB0aGlzLnNlbGVjdGVkRmVhdHVyZUtleXMgPSBldmVudC52YWx1ZTtcbiAgICAgICAgdGhpcy5nZXRGYXFzKCk7XG4gICAgfVxuXG4gICAgb25DaGFuZ2UoaXRlbSkge1xuICAgICAgICB0aGlzLmlzUHJvZHVjdEVuYWJsZWQgPSBpdGVtLnZhbHVlICE9PSAncHJvZHVjdCc7XG4gICAgICAgIGlmICh0aGlzLmlzUHJvZHVjdEVuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ3Byb2R1Y3RfaWQnKS5zZXRWYWx1ZShudWxsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybS5nZXQoJ3Byb2R1Y3RfaWQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uVXBkYXRlKGZvcm0pIHtcbiAgICAgICAgdGhpcy5zaG93RmlsdGVycyA9IHRydWU7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICBpZDogdGhpcy5jdXJyZW50RmFxLmlkLFxuICAgICAgICAgICAgcXVlc3Rpb246IGZvcm1bJ3F1ZXN0aW9uJ10sXG4gICAgICAgICAgICBhbnN3ZXI6IGZvcm1bJ2Fuc3dlciddLFxuICAgICAgICAgICAgY2F0ZWdvcnk6IGZvcm1bJ2NhdGVnb3J5J10sXG4gICAgICAgICAgICBwb3NpdGlvbjogZm9ybVsncG9zaXRpb24nXSxcbiAgICAgICAgICAgIHByb2R1Y3RfaWQ6IGZvcm1bJ3Byb2R1Y3RfaWQnXSxcbiAgICAgICAgICAgIGZlYXR1cmVfa2V5czogZm9ybVsnZmVhdHVyZV9rZXlzJ10sXG4gICAgICAgICAgICBpc19zaGFyZWRfZmFxOiBmb3JtWydpc19zaGFyZWRfZmFxJ10sXG4gICAgICAgICAgICBpc19hZG1pbl9mYXE6IGZvcm1bJ2lzX2FkbWluX2ZhcSddLFxuICAgICAgICAgICAgaXNfYnVpbGRfZmFxOiBmb3JtWydpc19idWlsZF9mYXEnXVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmJ1dHRvbkJ1c3kgPSB0cnVlO1xuICAgICAgICB0aGlzLmFkbWluU2VydmljZVxuICAgICAgICAgICAgLnB1dEZhcShkYXRhLCB0aGlzLnN1YnNjcmlwdGlvbklkKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogcmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRGYXEgPSByZXNwb25zZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRGYXFzKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2Vzcyh0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgnQWRtaW4uRmFxLlVwZGF0ZWRNZXNzYWdlJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYWRkKCgpID0+ICh0aGlzLmJ1dHRvbkJ1c3kgPSBmYWxzZSkpO1xuICAgIH1cblxuICAgIG9uRWRpdChmYXE6IEZBUSkge1xuICAgICAgICB0aGlzLmZhcXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGl0ZW0uaXNFZGl0ID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICBmYXEuaXNFZGl0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaG93RmlsdGVycyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmZhcXMgPSB0aGlzLmZhcXMuZmlsdGVyKGl0ZW0gPT4gaXRlbS5pZCA9PT0gZmFxLmlkKTtcbiAgICAgICAgaWYgKGZhcS5wcm9kdWN0X2lkID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlzUHJvZHVjdEVuYWJsZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc1Byb2R1Y3RFbmFibGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50RmFxID0geyAuLi5mYXEgfTtcbiAgICB9XG5cbiAgICBvbkRlbGV0ZShmYXE6IEZBUSkge1xuICAgICAgICBzd2FsLmZpcmUoe1xuICAgICAgICAgICAgdGl0bGU6ICdEZWxldGUnLFxuXG4gICAgICAgICAgICBodG1sOiBgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZT9gLFxuICAgICAgICAgICAgc2hvd0NhbmNlbEJ1dHRvbjogdHJ1ZSxcbiAgICAgICAgICAgIHJldmVyc2VCdXR0b25zOiB0cnVlLFxuICAgICAgICAgICAgaWNvbjogJ3dhcm5pbmcnXG4gICAgICAgIH0pLnRoZW4ocmVwID0+IHtcbiAgICAgICAgICAgIGlmIChyZXAudmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkbWluU2VydmljZS5kZWxldGVGYXEoZmFxLmlkLCB0aGlzLnN1YnNjcmlwdGlvbklkKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0LnN1Y2Nlc3ModGhpcy50cmFuc2xhdGlvbi50cmFuc2xhdGUoJ0FkbWluLkZhcS5EZWxldGVkTWVzc2FnZScpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRGYXFzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9uVmFsdWVDaGFuZ2UoZmFxOiBGQVEsIHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICBpZDogZmFxLmlkLFxuICAgICAgICAgICAgdmlzaWJsZTogdmFsdWVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmFkbWluU2VydmljZS5wdXRGYXEoZGF0YSwgdGhpcy5zdWJzY3JpcHRpb25JZCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2Vzcyh0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgnQWRtaW4uRmFxLlVwZGF0ZWRNZXNzYWdlJykpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvblB1YmxpY1ZhbHVlQ2hhbmdlKGZhcTogRkFRLCB2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAgICAgaWQ6IGZhcS5pZCxcbiAgICAgICAgICAgIHB1YmxpYzogdmFsdWVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmFkbWluU2VydmljZS5wdXRGYXEoZGF0YSwgdGhpcy5zdWJzY3JpcHRpb25JZCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudG9hc3Quc3VjY2Vzcyh0aGlzLnRyYW5zbGF0aW9uLnRyYW5zbGF0ZSgnQWRtaW4uRmFxLlVwZGF0ZWRNZXNzYWdlJykpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkRpc2NhcmQoZmFxOiBGQVEpIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuYmFja1VwRkFRLmZpbmQoeCA9PiB4LmlkID09PSBmYXEuaWQpO1xuICAgICAgICB0aGlzLmN1cnJlbnRGYXEgPSB7IC4uLml0ZW0gfTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwicm93XCIgW2NsYXNzLmN1c3RvbS1kaXNhYmxlLXdyYXBwZXJdPVwiYnV0dG9uQnVzeVwiPlxuICA8ZGl2IGNsYXNzPVwiY29sLTEyIGQtZmxleCBmbGV4LXdyYXAganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG15LTNcIlxuICAgICpyYmFjQWxsb3c9XCInUGFnZXMuQWRtaW4uRkFRLkNyZWF0ZSdcIj5cbiAgICA8aDIgY2xhc3M9XCJjYXJkLXRpdGxlIHAtMCBmbG9hdC1zdGFydFwiPkZBUTwvaDI+XG4gICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiICpuZ0lmPVwic2hvd0xpc3RcIiAoY2xpY2spPVwic2hvd0xpc3QgPSAhc2hvd0xpc3RcIlxuICAgICAgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXByaW1hcnkgZmxvYXQtZW5kXCIgcm9sZT1cImJ1dHRvblwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiPlxuICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wbHVzLWNpcmNsZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4ge3sgJ0xhYmVsLkFkZE5ldycgfCB0cmFuc2xvY28gfX0gRkFRIDwvYT5cbiAgPC9kaXY+XG48L2Rpdj5cbjwhLS0gQWRkIEZBUSBTZWN0aW9uIC0tPlxuPGRpdiAqbmdJZj1cIiFzaG93TGlzdFwiIFtjbGFzcy5jdXN0b20tZGlzYWJsZS13cmFwcGVyXT1cImJ1dHRvbkJ1c3lcIj5cbiAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtMTJcIj5cbiAgICAgIDxoNCBjbGFzcz1cImZ3LWJvbGQgbWItNFwiPnt7ICdMYWJlbC5BZGROZXcnIHwgdHJhbnNsb2NvIH19IEZBUTwvaDQ+XG4gICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIiAobmdTdWJtaXQpPVwib25TdWJtaXQoKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBjbGFzcz1cImNvbC0xMlwiIFtsYWJlbF09XCInQWRtaW4uRmFxLlF1ZXN0aW9uJyB8IHRyYW5zbG9jb1wiIG5hbWU9XCJxdWVzdGlvblwiXG4gICAgICAgICAgICBbZXJyb3JNc2ddPVwiJ0FkbWluLkZhcS5WYWxpZGF0aW9uLkZpZWxkUmVxdWlyZWQnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJxdWVzdGlvblwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6IHN1Ym1pdHRlZCAmJiBmWydxdWVzdGlvbiddLmVycm9ycyB9XCIgLz5cbiAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIGNsYXNzPVwiY29sLTEyIHF1aWxsLWVkaXRvclwiXG4gICAgICAgICAgICBbbGFiZWxdPVwiJ0FkbWluLkZhcS5BbnN3ZXInIHwgdHJhbnNsb2NvXCJcbiAgICAgICAgICAgIG5hbWU9XCJhbnN3ZXJcIlxuICAgICAgICAgICAgW2Vycm9yTXNnXT1cIidBZG1pbi5GYXEuVmFsaWRhdGlvbi5GaWVsZFJlcXVpcmVkJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgPHF1aWxsLWVkaXRvciBbc3R5bGVzXT1cInsgaGVpZ2h0OiAnMjAwcHgnfVwiIGZvcm1Db250cm9sTmFtZT1cImFuc3dlclwiIGNsYXNzPVwicXVpbGxFZGl0b3JcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzogc3VibWl0dGVkICYmIGZbJ2Fuc3dlciddLmVycm9ycyB9XCI+XG4gICAgICAgICAgICA8L3F1aWxsLWVkaXRvcj5cbiAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3cganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTJcIj5cbiAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIiBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLkZhcS5Ub29sdGlwLkNhdGVnb3J5JyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgIFtsYWJlbF09XCInQWRtaW4uRmFxLkNhdGVnb3J5JyB8IHRyYW5zbG9jb1wiIG5hbWU9XCJjYXRlZ29yeVwiXG4gICAgICAgICAgICAgIFtlcnJvck1zZ109XCInQWRtaW4uRmFxLlZhbGlkYXRpb24uRmllbGRSZXF1aXJlZCcgfCB0cmFuc2xvY29cIj5cbiAgICAgICAgICAgICAgPHAtZHJvcGRvd24gW29wdGlvbnNdPVwiY2F0ZWdvcmllc1wiIGNsYXNzPVwiZHJvcGRvd24tYmctdHJhbnNwYXJlbnRcIiAob25DaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3RcIiBmb3JtQ29udHJvbE5hbWU9XCJjYXRlZ29yeVwiIGlkPVwiY2F0ZWdvcnktZHJvcGRvd25cIiBbc3R5bGVdPVwieyB3aWR0aDogJzEwMCUnIH1cIj5cbiAgICAgICAgICAgICAgPC9wLWRyb3Bkb3duPlxuICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0yXCIgKnJiYWNBbGxvdz1cIidTdWJzY3JpcHRpb25TdXBlckFkbWluJ1wiPlxuICAgICAgICAgICAgPHB3LWlucHV0LWNvbnRhaW5lciBbc2hvd1Rvb2x0aXBdPVwidHJ1ZVwiIFt0b29sdGlwVGV4dF09XCInQWRtaW4uRmFxLlRvb2x0aXAuUHJvZHVjdCcgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0FkbWluLkZhcS5Qcm9kdWN0JyB8IHRyYW5zbG9jb1wiIG5hbWU9XCJwcm9kdWN0X2lkXCJcbiAgICAgICAgICAgICAgW2Vycm9yTXNnXT1cIidBZG1pbi5GYXEuVmFsaWRhdGlvbi5GaWVsZFJlcXVpcmVkJyB8IHRyYW5zbG9jb1wiPlxuICAgICAgICAgICAgICA8cC1kcm9wZG93biBbb3B0aW9uc109XCJwcm9kdWN0TGlzdFwiIGNsYXNzPVwiZHJvcGRvd24tYmctdHJhbnNwYXJlbnRcIiBmb3JtQ29udHJvbE5hbWU9XCJwcm9kdWN0X2lkXCJcbiAgICAgICAgICAgICAgICBbc3R5bGVdPVwieyB3aWR0aDogJzEwMCUnIH1cIj5cbiAgICAgICAgICAgICAgPC9wLWRyb3Bkb3duPlxuICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSBGZWF0dXJlcyBrZXlzLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0yXCI+XG4gICAgICAgICAgICA8cHctaW5wdXQtY29udGFpbmVyIFtzaG93VG9vbHRpcF09XCJ0cnVlXCIgW3Rvb2x0aXBUZXh0XT1cIidBZG1pbi5GYXEuVG9vbHRpcC5GZWF0dXJlcycgfCB0cmFuc2xvY29cIlxuICAgICAgICAgICAgICBbbGFiZWxdPVwiJ0FkbWluLkZhcS5GZWF0dXJlcycgfCB0cmFuc2xvY29cIiBuYW1lPVwiZmVhdHVyZV9rZXlzXCI+XG4gICAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0IFtvcHRpb25zXT1cImZlYXR1cmVLZXlzTGlzdFwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IGZlYXR1cmUga2V5c1wiIFtzaG93SGVhZGVyXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtzaG93VG9nZ2xlQWxsXT1cInRydWVcIiBmb3JtQ29udHJvbE5hbWU9XCJmZWF0dXJlX2tleXNcIiBhcHBlbmRUbz1cImJvZHlcIj48L3AtbXVsdGlTZWxlY3Q+XG4gICAgICAgICAgICA8L3B3LWlucHV0LWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgIDxwdy1pbnB1dC1jb250YWluZXIgW3Nob3dUb29sdGlwXT1cInRydWVcIiBbdG9vbHRpcFRleHRdPVwiJ0FkbWluLkZhcS5Ub29sdGlwLlBvc2l0aW9uJyB8IHRyYW5zbG9jb1wiXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cIidBZG1pbi5GYXEuUG9zaXRpb24nIHwgdHJhbnNsb2NvXCIgbmFtZT1cInBvc2l0aW9uXCJcbiAgICAgICAgICAgICAgICBbZXJyb3JNc2ddPVwiJ0FkbWluLkZhcS5WYWxpZGF0aW9uLkZpZWxkUmVxdWlyZWQnIHwgdHJhbnNsb2NvXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIG1pbj1cIjBcIiBmb3JtQ29udHJvbE5hbWU9XCJwb3NpdGlvblwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9wdy1pbnB1dC1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgY29sLWxnLTJcIj5cbiAgICAgICAgICAgIDxsYWJlbD57eyAnQWRtaW4uRmFxLlZpc2libGUnIHwgdHJhbnNsb2NvfX0gPHNwYW4gY2xhc3M9XCJ0b29sdGlwLXdyYXBcIiBbYXBwZW5kVG9dPVwiJ2JvZHknXCJcbiAgICAgICAgICAgICAgICBbcFRvb2x0aXBdPVwiJ0FkbWluLkZhcS5Ub29sdGlwLlZpc2libGUnIHwgdHJhbnNsb2NvXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtaW5mby1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGFiZWw+PGJyIC8+XG4gICAgICAgICAgICA8dWktc3dpdGNoIGZvcm1Db250cm9sTmFtZT1cInZpc2libGVcIj48L3VpLXN3aXRjaD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgY29sLWxnLTJcIj5cbiAgICAgICAgICAgIDxsYWJlbD57eyAnQWRtaW4uRmFxLlB1YmxpYycgfCB0cmFuc2xvY299fSA8c3BhbiBjbGFzcz1cInRvb2x0aXAtd3JhcFwiIFthcHBlbmRUb109XCInYm9keSdcIlxuICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCInQWRtaW4uRmFxLlRvb2x0aXAuUHVibGljJyB8IHRyYW5zbG9jb1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWluZm8tY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2xhYmVsPjxiciAvPlxuICAgICAgICAgICAgPHVpLXN3aXRjaCBmb3JtQ29udHJvbE5hbWU9XCJwdWJsaWNcIj48L3VpLXN3aXRjaD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIiAqcmJhY0FsbG93PVwiJ1N1cGVyQWRtaW4nXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IGNvbC1sZy0yXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ZXh0LXdhcm5pbmdcIj57eyAnQWRtaW4uRmFxLlNoYXJlZEZhcScgfCB0cmFuc2xvY299fSA8c3BhbiBjbGFzcz1cInRvb2x0aXAtd3JhcFwiXG4gICAgICAgICAgICAgICAgW2FwcGVuZFRvXT1cIidib2R5J1wiIFtwVG9vbHRpcF09XCInQWRtaW4uRmFxLlRvb2x0aXAuU2hhcmVkRmFxJyB8IHRyYW5zbG9jb1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWluZm8tY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2xhYmVsPjxiciAvPlxuICAgICAgICAgICAgPHVpLXN3aXRjaCBuYW1lPVwiaXNfc2hhcmVkX2ZhcVwiIGZvcm1Db250cm9sTmFtZT1cImlzX3NoYXJlZF9mYXFcIj48L3VpLXN3aXRjaD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgY29sLWxnLTJcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInRleHQtd2FybmluZ1wiPnt7ICdBZG1pbi5GYXEuQWRtaW5GYXEnIHwgdHJhbnNsb2NvfX0gPHNwYW4gY2xhc3M9XCJ0b29sdGlwLXdyYXBcIlxuICAgICAgICAgICAgICAgIFthcHBlbmRUb109XCInYm9keSdcIiBbcFRvb2x0aXBdPVwiJ0FkbWluLkZhcS5Ub29sdGlwLkFkbWluRmFxJyB8IHRyYW5zbG9jb1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWluZm8tY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2xhYmVsPjxiciAvPlxuICAgICAgICAgICAgPHVpLXN3aXRjaCBmb3JtQ29udHJvbE5hbWU9XCJpc19hZG1pbl9mYXFcIiBuYW1lPVwiaXNfYWRtaW5fZmFxXCI+PC91aS1zd2l0Y2g+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC00IGNvbC1sZy0yXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ0ZXh0LXdhcm5pbmdcIj57eyAnQWRtaW4uRmFxLkJ1aWxkRmFxJyB8IHRyYW5zbG9jb319IDxzcGFuIGNsYXNzPVwidG9vbHRpcC13cmFwXCJcbiAgICAgICAgICAgICAgICBbYXBwZW5kVG9dPVwiJ2JvZHknXCIgW3BUb29sdGlwXT1cIidBZG1pbi5GYXEuVG9vbHRpcC5CdWlsZEZhcScgfCB0cmFuc2xvY29cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1pbmZvLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9sYWJlbD48YnIgLz5cbiAgICAgICAgICAgIDx1aS1zd2l0Y2ggZm9ybUNvbnRyb2xOYW1lPVwiaXNfYnVpbGRfZmFxXCIgbmFtZT1cImlzX2J1aWxkX2ZhcVwiPjwvdWktc3dpdGNoPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbXQtNFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTMgdGV4dC1lbmRcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtZGVmYXVsdCBtZS0yXCIgZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiIGhyZWY9XCIjZmFxQ29sbGFwc2VcIlxuICAgICAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIiBhcmlhLWV4cGFuZGVkPVwiZmFsc2VcIiBhcmlhLWNvbnRyb2xzPVwiZmFxQ29sbGFwc2VcIiAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybS5yZXNldCgpOyBzaG93TGlzdCA9ICFzaG93TGlzdDsgaXNQcm9kdWN0RW5hYmxlZCA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiPiB7eyAnQnV0dG9uLkNhbmNlbCcgfCB0cmFuc2xvY28gfX0gPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBbYnV0dG9uQnVzeV09XCJidXR0b25CdXN5XCI+e3sgJ0J1dHRvbi5TYXZlJyB8IHRyYW5zbG9jbyB9fTwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9mb3JtPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuPCEtLSBGQVEgTGlzdC9FZGl0IC0tPlxuPGRpdiBjbGFzcz1cInJvdyBmYXFsaXN0IHByaW1lbmctZGF0YXRhYmxlLWNvbnRhaW5lciBtdC0wXCIgKm5nSWY9XCJzaG93TGlzdFwiIFtjbGFzcy5jdXN0b20tZGlzYWJsZS13cmFwcGVyXT1cImJ1dHRvbkJ1c3lcIj5cbiAgPGRpdiBjbGFzcz1cImNvbC0xMiBweC0wXCI+XG4gICAgPGRpdiBjbGFzcz1cInctMTAwIHRleHQtY2VudGVyIG10LTNcIiAqbmdJZj1cIiFpc0xvYWRlZFwiPlxuICAgICAgPHAtcHJvZ3Jlc3NTcGlubmVyIHN0cm9rZVdpZHRoPVwiMlwiPiA8L3AtcHJvZ3Jlc3NTcGlubmVyPlxuICAgIDwvZGl2PlxuICAgIDxwLXRhYmxlIFt2YWx1ZV09XCJmYXFzXCIgW2NsYXNzLmhpZGVUYWJsZV09XCJ0b3RhbFJlY29yZHNVbkZpbHRlciA9PT0gMFwiPlxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImNhcHRpb25cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1maWx0ZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTRcIj5cbiAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0IFtzaG93VG9nZ2xlQWxsXT1cInRydWVcIiBbb3B0aW9uc109XCJmZWF0dXJlS2V5c0xpc3RcIiAob25DaGFuZ2UpPVwib25Qcm9kdWN0Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBieSBGZWF0dXJlIGtleXNcIiBbc2hvd0hlYWRlcl09XCJ0cnVlXCIgbWF4U2VsZWN0ZWRMYWJlbHM9XCIyXCIgYXBwZW5kVG89XCJib2R5XCI+XG4gICAgICAgICAgICA8L3AtbXVsdGlTZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZW5kXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNlYXJjaCBtdC0yIG1lLTJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cInNlYXJjaFRleHRcIiBwSW5wdXRUZXh0IHNpemU9XCI1MFwiIHBsYWNlaG9sZGVyPVwiU2VhcmNoIEZBUS4uLlwiXG4gICAgICAgICAgICAgIChpbnB1dCk9XCJmaWx0ZXJGYXEoKVwiIGNsYXNzPVwibXctOTBcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPVwiaGVhZGVyXCI+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCI+e3sgJ0FkbWluLkZhcS5RdWVzdGlvbicgfCB0cmFuc2xvY28gfX08L3RoPlxuICAgICAgICAgIDx0aCBzY29wZT1cInRydWVcIj57eyAnQWRtaW4uRmFxLkFuc3dlcicgfCB0cmFuc2xvY28gfX08L3RoPlxuICAgICAgICAgIDx0aCBzY29wZT1cInRydWVcIj57eyAnQWRtaW4uRmFxLlBvc2l0aW9uJyB8IHRyYW5zbG9jbyB9fTwvdGg+XG4gICAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiPnt7ICdBZG1pbi5GYXEuQ2F0ZWdvcnknIHwgdHJhbnNsb2NvIH19PC90aD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJ0cnVlXCI+e3sgJ0FkbWluLkZhcS5WaXNpYmxlJyB8IHRyYW5zbG9jbyB9fTwvdGg+XG4gICAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiPnt7ICdBZG1pbi5GYXEuUHVibGljJyB8IHRyYW5zbG9jbyB9fTwvdGg+XG4gICAgICAgICAgPHRoIHNjb3BlPVwidHJ1ZVwiIGNsYXNzPVwiYWN0aW9ucy1saXN0LXR3b1wiPnt7ICdMYWJlbC5BY3Rpb25zJyB8IHRyYW5zbG9jbyB9fTwvdGg+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImJvZHlcIiBsZXQtZmFxPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkIGRhdGEtaGVhZD1cIlF1ZXN0aW9uXCI+e3sgZmFxLnF1ZXN0aW9uIH19IDwvdGQ+XG4gICAgICAgICAgPHRkIGRhdGEtaGVhZD1cIkFuc3dlclwiPnt7KGZhcS5hbnN3ZXJ8cmVtb3ZlSHRtbCl8dGV4dFRydW5jYXRlOiAyMDB9fSA8L3RkPlxuICAgICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJQb3NpdGlvblwiPnt7ZmFxLnBvc2l0aW9ufX08L3RkPlxuICAgICAgICAgIDx0ZCBkYXRhLWhlYWQ9XCJDYXRlZ29yeVwiPlxuICAgICAgICAgICAgPHNwYW4gW2FwcER5bmFtaWNCYWRnZV09XCJ7IGl0ZW1zQXJyYXk6IGNhdGVnb3J5Rm9yQmFkZ2VzLCBpdGVtOiBmYXE/LmNhdGVnb3J5IH1cIiBjb2xvcj1cImN5YW5cIlxuICAgICAgICAgICAgICBjbGFzcz1cImJhZGdlIG1zLTFcIj5cbiAgICAgICAgICAgICAgPHNwYW4gW3BUb29sdGlwXT1cImZhcT8uZmVhdHVyZV9rZXlzPy5qb2luKCcsJylcIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj57eyBmYXFIYXNoTWFwW2ZhcT8uY2F0ZWdvcnldPy5uYW1lXG4gICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTEgYmFkZ2UgYmctd2FybmluZ1wiICpuZ0lmPVwiZmFxLmlzX3NoYXJlZF9mYXEgfHwgZmFxLmlzX2FkbWluX2ZhcSB8fCBmYXEuaXNfYnVpbGRfZmFxXCI+U3VwZXJcbiAgICAgICAgICAgICAgRkFRPC9zcGFuPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkIGRhdGEtaGVhZD1cIlZpc2libGVcIj5cbiAgICAgICAgICAgIDxzcGFuIFthcHBEeW5hbWljQmFkZ2VdPVwieyBpdGVtc0FycmF5OiBbdHJ1ZSwgZmFsc2VdLCBpdGVtOiBmYXE/LnZpc2libGUgfVwiIGNvbG9yPVwic3VjY2Vzcy1kYW5nZXJcIlxuICAgICAgICAgICAgICBjbGFzcz1cImJhZGdlXCI+e3sgZmFxPy52aXNpYmxlIH19PC9zcGFuPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkIGRhdGEtaGVhZD1cIlB1YmxpY1wiPlxuICAgICAgICAgICAgPHNwYW4gW2FwcER5bmFtaWNCYWRnZV09XCJ7IGl0ZW1zQXJyYXk6IFt0cnVlLCBmYWxzZV0sIGl0ZW06IGZhcT8ucHVibGljIH1cIiBjb2xvcj1cInN1Y2Nlc3MtZGFuZ2VyXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJiYWRnZVwiPnt7IGZhcT8ucHVibGljIH19PC9zcGFuPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPHRkIGRhdGEtaGVhZD1cIkFjdGlvblwiPlxuICAgICAgICAgICAgPHVsIGNsYXNzPVwibGlzdC11bnN0eWxlZCBsaXN0LWlubGluZVwiPlxuICAgICAgICAgICAgICA8bGkgbmdiVG9vbHRpcD1cIkVkaXRcIiBjbGFzcz1cIm1lLTIgbWUtc20tMlwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZWRpdCBlZGl0LWljb25cIiAoY2xpY2spPVwib25FZGl0KGZhcSlcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDxsaSBuZ2JUb29sdGlwPVwiRGVsZXRlXCIgY2xhc3M9XCJtZS0yIG1lLXNtLTJcIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRyYXNoIGRlbGV0ZS1pY29uXCIgKGNsaWNrKT1cIm9uRGVsZXRlKGZhcSlcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgIDxsaSBuZ2JUb29sdGlwPVwiVmlldyBmYXFcIiAqbmdJZj1cImZhcT8udmlzaWJsZVwiPlxuICAgICAgICAgICAgICAgIDxhIFtyb3V0ZXJMaW5rXT1cIlsnLycsc2x1ZywnZmFxJyxmYXEuaWRdXCIgdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWV5ZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0ciAqbmdJZj1cImZhcS5pc0VkaXRcIj5cbiAgICAgICAgICA8dGQgY29sc3Bhbj1cIjdcIj5cbiAgICAgICAgICAgIDxmb3JtIChuZ1N1Ym1pdCk9XCJvblN1Ym1pdCgpXCJcbiAgICAgICAgICAgICAgI2VkaXRGb3JtPVwibmdGb3JtXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cIm5hbWVcIj57eyAnQWRtaW4uRmFxLlF1ZXN0aW9uJyB8IHRyYW5zbG9jbyB9fTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiByZXF1aXJlZCBbKG5nTW9kZWwpXT1cImN1cnJlbnRGYXEucXVlc3Rpb25cIiBuYW1lPVwicXVlc3Rpb25cIlxuICAgICAgICAgICAgICAgICAgI3F1ZXN0aW9uPVwibmdNb2RlbFwiIC8+XG4gICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiZm9ybS10ZXh0IHRleHQtbXV0ZWQgZGFuZ2VyXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIXF1ZXN0aW9uLnZhbGlkICYmIChxdWVzdGlvbi5kaXJ0eSB8fCBxdWVzdGlvbi50b3VjaGVkKVwiPiBQbGVhc2UgZW50ZXIgYSBxdWVzdGlvbjwvc21hbGw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnQWRtaW4uRmFxLkFuc3dlcicgfCB0cmFuc2xvY28gfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxxdWlsbC1lZGl0b3IgW3N0eWxlc109XCJ7IGhlaWdodDogJzIwMHB4JyB9XCIgWyhuZ01vZGVsKV09XCJjdXJyZW50RmFxLmFuc3dlclwiIG5hbWU9XCJhbnN3ZXJcIiByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgI2Fuc3dlcj1cIm5nTW9kZWxcIj48L3F1aWxsLWVkaXRvcj5cbiAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJmb3JtLXRleHQgdGV4dC1tdXRlZCBkYW5nZXJcIiAqbmdJZj1cIiFhbnN3ZXIudmFsaWQgJiYgKGFuc3dlci5kaXJ0eSB8fCBhbnN3ZXIudG91Y2hlZClcIj5cbiAgICAgICAgICAgICAgICAgIFBsZWFzZSBlbnRlciBhbiBhbnN3ZXI8L3NtYWxsPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBuby1ndXR0ZXJzIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0yXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWw+e3sgJ0FkbWluLkZhcS5DYXRlZ29yeScgfCB0cmFuc2xvY299fSA8c3BhbiBjbGFzcz1cInRvb2x0aXAtd3JhcFwiIFthcHBlbmRUb109XCInYm9keSdcIlxuICAgICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCInQWRtaW4uRmFxLlRvb2x0aXAuQ2F0ZWdvcnknIHwgdHJhbnNsb2NvXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtaW5mby1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+PGJyIC8+XG4gICAgICAgICAgICAgICAgICA8cC1kcm9wZG93biBbb3B0aW9uc109XCJjYXRlZ29yaWVzXCIgbmFtZT1cImNhdGVnb3J5XCIgW3JlcXVpcmVkXT1cInRydWVcIiBbKG5nTW9kZWwpXT1cImN1cnJlbnRGYXEuY2F0ZWdvcnlcIlxuICAgICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25DaGFuZ2UoJGV2ZW50KVwiIFtzdHlsZV09XCJ7IHdpZHRoOiAnMTAwJScgfVwiIGNsYXNzPVwiY3VzdG9tLWRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgICA8L3AtZHJvcGRvd24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0yXCIgKnJiYWNBbGxvdz1cIidTdWJzY3JpcHRpb25TdXBlckFkbWluJ1wiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdBZG1pbi5GYXEuUHJvZHVjdCcgfCB0cmFuc2xvY299fSA8c3BhbiBjbGFzcz1cInRvb2x0aXAtd3JhcFwiIFthcHBlbmRUb109XCInYm9keSdcIlxuICAgICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCInQWRtaW4uRmFxLlRvb2x0aXAuUHJvZHVjdCcgfCB0cmFuc2xvY29cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1pbmZvLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD48YnIgLz5cbiAgICAgICAgICAgICAgICAgIDxwLWRyb3Bkb3duIFtvcHRpb25zXT1cInByb2R1Y3RMaXN0XCIgbmFtZT1cInByb2R1Y3RfaWRcIiBbKG5nTW9kZWwpXT1cImN1cnJlbnRGYXEucHJvZHVjdF9pZFwiXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJ7IHdpZHRoOiAnMTAwJScgfVwiIGNsYXNzPVwiY3VzdG9tLWRyb3Bkb3duXCI+XG4gICAgICAgICAgICAgICAgICA8L3AtZHJvcGRvd24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSBmZWF0dXJlIGtleXMgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0yXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiXCI+e3sgJ0FkbWluLkZhcS5GZWF0dXJlcycgfCB0cmFuc2xvY28gfX0gPHNwYW4gY2xhc3M9XCJ0b29sdGlwLXdyYXBcIiBbYXBwZW5kVG9dPVwiJ2JvZHknXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCInQWRtaW4uRmFxLlRvb2x0aXAuRmVhdHVyZXMnIHwgdHJhbnNsb2NvXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1pbmZvLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxwLW11bHRpU2VsZWN0IFtvcHRpb25zXT1cImZlYXR1cmVLZXlzTGlzdFwiIFtzaG93SGVhZGVyXT1cInRydWVcIiBbc2hvd1RvZ2dsZUFsbF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImN1cnJlbnRGYXEuZmVhdHVyZV9rZXlzXCIgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcbiAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRUbz1cImJvZHlcIj48L3AtbXVsdGlTZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJcIj57eyAnQWRtaW4uRmFxLlBvc2l0aW9uJyB8IHRyYW5zbG9jbyB9fSA8c3BhbiBjbGFzcz1cInRvb2x0aXAtd3JhcFwiIFthcHBlbmRUb109XCInYm9keSdcIlxuICAgICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCInQWRtaW4uRmFxLlRvb2x0aXAuUG9zaXRpb24nIHwgdHJhbnNsb2NvXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtaW5mby1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIG5hbWU9XCJwb3NpdGlvblwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjdXJyZW50RmFxLnBvc2l0aW9uXCIgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgY29sLWxnLTFcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnQWRtaW4uRmFxLlZpc2libGUnIHwgdHJhbnNsb2NvfX0gPHNwYW4gY2xhc3M9XCJ0b29sdGlwLXdyYXAgXCIgW2FwcGVuZFRvXT1cIidib2R5J1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3BUb29sdGlwXT1cIidBZG1pbi5GYXEuVG9vbHRpcC5WaXNpYmxlJyB8IHRyYW5zbG9jb1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWluZm8tY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPHVpLXN3aXRjaCBjbGFzcz1cInZpc2libGVcIiBbY2hlY2tlZF09XCJjdXJyZW50RmFxLnZpc2libGVcIlxuICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvblZhbHVlQ2hhbmdlKGN1cnJlbnRGYXEsICRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgPC91aS1zd2l0Y2g+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgY29sLWxnLTFcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnQWRtaW4uRmFxLlB1YmxpYycgfCB0cmFuc2xvY299fSA8c3BhbiBjbGFzcz1cInRvb2x0aXAtd3JhcFwiIFthcHBlbmRUb109XCInYm9keSdcIlxuICAgICAgICAgICAgICAgICAgICAgIFtwVG9vbHRpcF09XCInQWRtaW4uRmFxLlRvb2x0aXAuUHVibGljJyB8IHRyYW5zbG9jb1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWluZm8tY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPHVpLXN3aXRjaCBjbGFzcz1cInB1YmxpY1wiIFtjaGVja2VkXT1cImN1cnJlbnRGYXEucHVibGljXCJcbiAgICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25QdWJsaWNWYWx1ZUNoYW5nZShjdXJyZW50RmFxLCAkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvdWktc3dpdGNoPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgKnJiYWNBbGxvdz1cIidTdXBlckFkbWluJ1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBjb2wtbGctMlwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidGV4dC13YXJuaW5nXCI+e3sgJ0FkbWluLkZhcS5TaGFyZWRGYXEnIHwgdHJhbnNsb2NvfX0gPHNwYW4gY2xhc3M9XCJ0b29sdGlwLXdyYXBcIlxuICAgICAgICAgICAgICAgICAgICAgIFthcHBlbmRUb109XCInYm9keSdcIiBbcFRvb2x0aXBdPVwiJ0FkbWluLkZhcS5Ub29sdGlwLlNoYXJlZEZhcScgfCB0cmFuc2xvY29cIiB0b29sdGlwUG9zaXRpb249XCJ0b3BcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1pbmZvLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD48YnIgLz5cbiAgICAgICAgICAgICAgICAgIDx1aS1zd2l0Y2ggW2NoZWNrZWRdPVwiY3VycmVudEZhcS5pc19zaGFyZWRfZmFxXCIgbmFtZT1cImlzX3NoYXJlZF9mYXFcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImN1cnJlbnRGYXEuaXNfc2hhcmVkX2ZhcVwiPjwvdWktc3dpdGNoPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNCBjb2wtbGctMlwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidGV4dC13YXJuaW5nXCI+e3sgJ0FkbWluLkZhcS5BZG1pbkZhcScgfCB0cmFuc2xvY299fSA8c3BhbiBjbGFzcz1cInRvb2x0aXAtd3JhcFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2FwcGVuZFRvXT1cIidib2R5J1wiIFtwVG9vbHRpcF09XCInQWRtaW4uRmFxLlRvb2x0aXAuQWRtaW5GYXEnIHwgdHJhbnNsb2NvXCIgdG9vbHRpcFBvc2l0aW9uPVwidG9wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtaW5mby1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+PGJyIC8+XG4gICAgICAgICAgICAgICAgICA8dWktc3dpdGNoIFtjaGVja2VkXT1cImN1cnJlbnRGYXEuaXNfYWRtaW5fZmFxXCIgbmFtZT1cImlzX2FkbWluX2ZhcVwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY3VycmVudEZhcS5pc19hZG1pbl9mYXFcIj48L3VpLXN3aXRjaD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTQgY29sLWxnLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInRleHQtd2FybmluZ1wiPnt7ICdBZG1pbi5GYXEuQnVpbGRGYXEnIHwgdHJhbnNsb2NvfX0gPHNwYW4gY2xhc3M9XCJ0b29sdGlwLXdyYXBcIlxuICAgICAgICAgICAgICAgICAgICAgIFthcHBlbmRUb109XCInYm9keSdcIiBbcFRvb2x0aXBdPVwiJ0FkbWluLkZhcS5Ub29sdGlwLkJ1aWxkRmFxJyB8IHRyYW5zbG9jb1wiIHRvb2x0aXBQb3NpdGlvbj1cInRvcFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWluZm8tY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPjxiciAvPlxuICAgICAgICAgICAgICAgICAgPHVpLXN3aXRjaCBbY2hlY2tlZF09XCJjdXJyZW50RmFxLmlzX2J1aWxkX2ZhcVwiIG5hbWU9XCJpc19idWlsZF9mYXFcIlxuICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImN1cnJlbnRGYXEuaXNfYnVpbGRfZmFxXCI+PC91aS1zd2l0Y2g+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtZW5kXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKnJiYWNBbGxvdz1cIidQYWdlcy5BZG1pbi5GQVEuRGVsZXRlJ1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtZGFuZ2VyIG1lLTJcIiAqbmdJZj1cIiFmYXEuaXNFZGl0XCIgKGNsaWNrKT1cIm9uRGVsZXRlKGZhcSlcIj4gRGVsZXRlXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLWRlZmF1bHQgbWUtMlwiICpuZ0lmPVwiZmFxLmlzRWRpdFwiIGRhdGEtYnMtdG9nZ2xlPVwiY29sbGFwc2VcIlxuICAgICAgICAgICAgICAgIGRhdGEtYnMtdGFyZ2V0PVwiI2NvbGxhcHNlRWRpdFwiIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiIGFyaWEtY29udHJvbHM9XCJjb2xsYXBzZUVkaXRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJmYXEuaXNFZGl0ID0gIWZhcS5pc0VkaXQ7IG9uQ2FuY2VsKClcIj4ge3sgJ0J1dHRvbi5DYW5jZWwnIHwgdHJhbnNsb2NvIH19IDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpyYmFjQWxsb3c9XCInUGFnZXMuQWRtaW4uRkFRLkVkaXQnXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBtZS0yXCIgKm5nSWY9XCIhZmFxLmlzRWRpdFwiIChjbGljayk9XCJvbkVkaXQoZmFxKVwiPiB7eyAnQnV0dG9uLkVkaXQnIHxcbiAgICAgICAgICAgICAgICAgIHRyYW5zbG9jbyB9fSA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1lLTJcIiBbYnV0dG9uQnVzeV09XCJidXR0b25CdXN5XCIgKm5nSWY9XCJmYXEuaXNFZGl0XCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblVwZGF0ZShjdXJyZW50RmFxKVwiPiB7eyAnQnV0dG9uLlVwZGF0ZScgfCB0cmFuc2xvY28gfX0gPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9wLXRhYmxlPlxuICAgIDxwdy1uby1kYXRhIFt3aXRoSW1hZ2VdPVwidHJ1ZVwiIG1lc3NhZ2U9XCJObyBSZXN1bHRcIiAqbmdJZj1cImZhcXMubGVuZ3RoID09PSAwXCI+IDwvcHctbm8tZGF0YT5cbiAgICA8cHctbm8tZGF0YSBbd2l0aEltYWdlXT1cInRydWVcIiBbbWVzc2FnZV09XCInQWRtaW4uRmFxLk5vRGF0YU1lc3NhZ2UnIHwgdHJhbnNsb2NvXCJcbiAgICAgICpuZ0lmPVwidG90YWxSZWNvcmRzVW5GaWx0ZXIgPT09IDBcIj5cbiAgICA8L3B3LW5vLWRhdGE+XG4gICAgPHB3LW5vLWRhdGEgW3dpdGhJbWFnZV09XCJ0cnVlXCIgW21lc3NhZ2VdPVwiJ1NlYXJjaC5Ob0RhdGFNZXNzYWdlJyB8IHRyYW5zbG9jb1wiIFtkZXNjcmlwdGlvbl09XCInU2VhcmNoLk5vRGF0YURlc2NyaXB0aW9uJyB8IHRyYW5zbG9jb1wiXG4gICAgICAqbmdJZj1cImZhcXMubGVuZ3RoID09PSAwXCI+IDwvcHctbm8tZGF0YT5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==