tango-app-ui-store-builder 1.2.4 → 1.2.6

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 (64) hide show
  1. package/esm2022/lib/components/collection-update-ai/collection-update-ai.component.mjs +3 -2
  2. package/esm2022/lib/components/collection-update-ai/find-replace-layout/prepare-template/prepare-template.component.mjs +3 -2
  3. package/esm2022/lib/components/collection-update-ai/find-replace-layout/review-replace/review-replace.component.mjs +3 -2
  4. package/esm2022/lib/components/create-fixture/create-fixture.component.mjs +41 -4
  5. package/esm2022/lib/components/custom-select/custom-select.component.mjs +14 -5
  6. package/esm2022/lib/components/fixture-template/template-assign-stores/preview-modal/preview-modal.component.mjs +3 -2
  7. package/esm2022/lib/components/fixture-template/template-assign-stores/template-assign-stores.component.mjs +3 -2
  8. package/esm2022/lib/components/fixture-template-table/find-and-replace/find-and-replace.component.mjs +3 -2
  9. package/esm2022/lib/components/fixture-template-table/fixture-template-table.component.mjs +2 -3
  10. package/esm2022/lib/components/fixture-template-tree/fixture-template-tree.component.mjs +3 -2
  11. package/esm2022/lib/components/manage-plano/verification-table/verification-table.component.mjs +2 -3
  12. package/esm2022/lib/components/manage-store-plano/manage-store-plano.component.mjs +87 -13
  13. package/esm2022/lib/components/manage-store-plano/plano-rollout/plano-rollout.component.mjs +4 -3
  14. package/esm2022/lib/components/manage-store-plano/template-basic-details/template-basic-details.component.mjs +114 -4
  15. package/esm2022/lib/components/manage-store-plano/zone-verification-feedback/zone-verification-feedback.component.mjs +7 -2
  16. package/esm2022/lib/components/onboard-store-plano/onboard-fixture/onboard-fixture.component.mjs +3 -3
  17. package/esm2022/lib/components/onboard-store-plano/onboard-store-plano.component.mjs +255 -25
  18. package/esm2022/lib/components/plano-configurations/plano-configurations.component.mjs +162 -3
  19. package/esm2022/lib/components/plano-library/fixture-library/fixture-library.component.mjs +3 -4
  20. package/esm2022/lib/components/plano-library/vm-library/vm-library.component.mjs +3 -4
  21. package/esm2022/lib/components/plano-tools/cad-files/cad-files.component.mjs +88 -0
  22. package/esm2022/lib/components/plano-tools/cad-render/cad-render.component.mjs +4 -5
  23. package/esm2022/lib/components/plano-tools/move-bucket/move-bucket.component.mjs +239 -0
  24. package/esm2022/lib/components/plano-tools/plano-data-export/plano-data-export.component.mjs +98 -3
  25. package/esm2022/lib/components/plano-tools/plano-migrate/plano-migrate.component.mjs +5 -4
  26. package/esm2022/lib/components/plano-tools/store-exports/store-exports.component.mjs +135 -33
  27. package/esm2022/lib/components/plano-tools/swap-template/swap-template.component.mjs +325 -0
  28. package/esm2022/lib/components/plano-tools/tools-parent/tools-parent.component.mjs +3 -3
  29. package/esm2022/lib/components/planogram/merch-compliance/merch-compliance.component.mjs +3 -2
  30. package/esm2022/lib/components/planogram/merch-compliance/product-locator/product-locator.component.mjs +3 -2
  31. package/esm2022/lib/components/planogram/plano-analytics/plano-analytics.component.mjs +3 -2
  32. package/esm2022/lib/components/planogram/plano-details-parent/plano-details-parent.component.mjs +1 -1
  33. package/esm2022/lib/components/planogram/plano-overview/plano-comparison/plano-comparison.component.mjs +3 -2
  34. package/esm2022/lib/components/planogram/plano-overview/plano-overview.component.mjs +3 -2
  35. package/esm2022/lib/components/planogram/plano-table/plano-table.component.mjs +2 -3
  36. package/esm2022/lib/components/popups/delete-confirmation/delete-confirmation.component.mjs +10 -3
  37. package/esm2022/lib/components/store-plano/store-plano-tree-view/store-plano-tree-view.component.mjs +3 -4
  38. package/esm2022/lib/components/store-plano/store-plano.component.mjs +4 -3
  39. package/esm2022/lib/data/fixture-template.data.mjs +12 -1
  40. package/esm2022/lib/functions/plano.function.mjs +13 -1
  41. package/esm2022/lib/services/store-builder.service.mjs +35 -1
  42. package/esm2022/lib/tango-store-builder-routing.module.mjs +16 -1
  43. package/esm2022/lib/tango-store-builder.module.mjs +10 -1
  44. package/fesm2022/tango-app-ui-store-builder.mjs +1914 -401
  45. package/fesm2022/tango-app-ui-store-builder.mjs.map +1 -1
  46. package/lib/components/create-fixture/create-fixture.component.d.ts +3 -0
  47. package/lib/components/custom-select/custom-select.component.d.ts +5 -2
  48. package/lib/components/manage-plano/rollout-table/rollout-table.component.d.ts +4 -4
  49. package/lib/components/manage-plano/verification-table/verification-table.component.d.ts +5 -5
  50. package/lib/components/manage-store-plano/manage-store-plano.component.d.ts +7 -1
  51. package/lib/components/manage-store-plano/template-basic-details/template-basic-details.component.d.ts +14 -1
  52. package/lib/components/onboard-store-plano/onboard-store-plano.component.d.ts +19 -2
  53. package/lib/components/plano-configurations/plano-configurations.component.d.ts +19 -1
  54. package/lib/components/plano-tools/cad-files/cad-files.component.d.ts +30 -0
  55. package/lib/components/plano-tools/move-bucket/move-bucket.component.d.ts +64 -0
  56. package/lib/components/plano-tools/plano-data-export/plano-data-export.component.d.ts +26 -0
  57. package/lib/components/plano-tools/store-exports/store-exports.component.d.ts +28 -3
  58. package/lib/components/plano-tools/swap-template/swap-template.component.d.ts +83 -0
  59. package/lib/components/popups/delete-confirmation/delete-confirmation.component.d.ts +3 -1
  60. package/lib/data/fixture-template.data.d.ts +8 -0
  61. package/lib/functions/plano.function.d.ts +1 -0
  62. package/lib/services/store-builder.service.d.ts +26 -0
  63. package/lib/tango-store-builder.module.d.ts +56 -53
  64. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  import { Component } from '@angular/core';
2
- import { debounceTime, distinctUntilChanged, filter, firstValueFrom, Subject, takeUntil } from 'rxjs';
2
+ import { debounceTime, distinctUntilChanged, firstValueFrom, Subject, takeUntil } from 'rxjs';
3
3
  import { VMBulkUploadComponent } from './popups/vm-bulk-upload/vm-bulk-upload.component';
4
4
  import { DeleteConfirmationComponent } from '../../popups/delete-confirmation/delete-confirmation.component';
5
5
  import { CannotPerformComponent } from '../../popups/cannot-perform/cannot-perform.component';
@@ -68,8 +68,7 @@ export class VmLibraryComponent {
68
68
  this.setPageData();
69
69
  this.gs.environment.pipe(takeUntil(this.destroy$)).subscribe((env) => this.imgCDN = env.planogramCDN);
70
70
  this.gs.dataRangeValue.pipe(takeUntil(this.destroy$), // Subscription will be cancelled on component destroy.
71
- debounceTime(200), // To avoid immediate frequent calls.
72
- filter(data => !!data), // Filtering null/undefined.
71
+ debounceTime(200), // To avoid immediate frequent calls.
73
72
  distinctUntilChanged() // Emitting only different values. (Ignores same clientId).
74
73
  ).subscribe((data) => {
75
74
  this.isPageLoading = true;
@@ -397,4 +396,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
397
396
  type: Component,
398
397
  args: [{ selector: 'lib-vm-library', template: "<section id=\"vm-library\" class=\"content-wrapper\">\r\n <!-- VM View header -->\r\n <div\r\n *ngIf=\"vmList.length !== 0 || searchTerm || isFilterApplied\"\r\n class=\"d-flex justify-content-between align-items-center mb-5\"\r\n >\r\n <div>\r\n <h4>VM Library Lists</h4>\r\n <span>{{ totalItems }} - Total VM</span>\r\n </div>\r\n\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <div style=\"position: relative\">\r\n <input\r\n type=\"text\"\r\n [(ngModel)]=\"searchTerm\"\r\n (change)=\"onSearch()\"\r\n style=\"padding-left: 3rem; padding-right: 3rem\"\r\n class=\"form-control\"\r\n name=\"search\"\r\n autocomplete=\"off\"\r\n placeholder=\"Search\"\r\n />\r\n\r\n <span class=\"search-icon\">\r\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <circle cx=\"8\" cy=\"8\" r=\"6\" stroke=\"currentColor\" stroke-width=\"2\" />\r\n <line x1=\"13\" y1=\"13\" x2=\"16\" y2=\"16\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n </svg>\r\n </span>\r\n\r\n <button *ngIf=\"searchTerm\" type=\"button\" aria-label=\"Clear\" (click)=\"searchTerm = ''; onSearch()\" class=\"clear-search\">\r\n <svg width=\"64px\" height=\"64px\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g>\r\n <g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g>\r\n <g id=\"SVGRepo_iconCarrier\">\r\n <path d=\"M9 9L15 15\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n <path d=\"M15 9L9 15\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path>\r\n <circle\r\n cx=\"12\"\r\n cy=\"12\"\r\n r=\"9\"\r\n stroke=\"#667085\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n ></circle>\r\n </g>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <button\r\n type=\"button\"\r\n [routerLink]=\"['/manage/planogram/create-library-vm']\"\r\n [queryParams]=\"{ isEdit: true }\"\r\n class=\"btn btn-primary d-inline-flex align-items-center me-2\"\r\n >\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M10.0001 4.16663V15.8333M4.16675 9.99996H15.8334\"\r\n stroke=\"white\"\r\n stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n <span class=\"ms-2 text-white\">Create </span>\r\n </button>\r\n\r\n <!-- <button type=\"button\" (click)=\"openBulkUploadModal()\" class=\"btn btn-outline text-nowrap\">\r\n <svg class=\"me-2\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n Bulk Upload\r\n </button> -->\r\n\r\n <button type=\"button\" [disabled]=\"vmList.length <= 0\" (click)=\"exportVMList()\" class=\"btn btn-outline text-nowrap\">\r\n <svg class=\"me-2\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n Export\r\n </button>\r\n\r\n <lib-filters [dataObject]=\"filterObject\" (appliedFilters)=\"applyFilters($event)\"></lib-filters>\r\n\r\n <div class=\"d-flex align-items-center gap-2\">\r\n <div class=\"toggle-button me-2\" [ngClass]=\"{ selected: viewMode === 'list' }\" (click)=\"toggleViewMode('list')\">\r\n <svg width=\"19\" height=\"18\" viewBox=\"0 0 19 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M6.24078 4.54639H15.8906M6.24078 9.00017H15.8906M6.24078 13.4539H15.8906M2.5293 4.54639H2.53672M2.5293 9.00017H2.53672M2.5293 13.4539H2.53672\"\r\n [attr.stroke]=\"viewMode === 'list' ? '#009BF3' : '#344054'\"\r\n stroke-width=\"1.48756\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n\r\n <div class=\"toggle-button\" [ngClass]=\"{ selected: viewMode === 'grid' }\" (click)=\"toggleViewMode('grid')\">\r\n <svg width=\"19\" height=\"18\" viewBox=\"0 0 19 18\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M7.91886 2.31934H2.72278V7.51541H7.91886V2.31934Z\"\r\n [attr.stroke]=\"viewMode === 'grid' ? '#009BF3' : '#344054'\"\r\n stroke-width=\"1.48756\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M16.0841 2.31934H10.888V7.51541H16.0841V2.31934Z\"\r\n [attr.stroke]=\"viewMode === 'grid' ? '#009BF3' : '#344054'\"\r\n stroke-width=\"1.48756\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M16.0841 10.4846H10.888V15.6807H16.0841V10.4846Z\"\r\n [attr.stroke]=\"viewMode === 'grid' ? '#009BF3' : '#344054'\"\r\n stroke-width=\"1.48756\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M7.91886 10.4846H2.72278V15.6807H7.91886V10.4846Z\"\r\n [attr.stroke]=\"viewMode === 'grid' ? '#009BF3' : '#344054'\"\r\n stroke-width=\"1.48756\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"isPageLoading; else contentPart\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-template #contentPart>\r\n <div *ngIf=\"vmList.length === 0\">\r\n @if(searchTerm || isFilterApplied){\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 my-6\">\r\n <div class=\"card-body d-flex justify-content-center align-items-center flex-column\">\r\n <img class=\"img-src\" src=\"./assets/tango/Icons/Nodata1.svg\" alt=\"\" />\r\n <div class=\"nodatamaintext mt-3\">No data found</div>\r\n <div class=\"nodatasubtext\">There is no result for matching filter and search</div>\r\n </div>\r\n </div>\r\n </div>\r\n }@else {\r\n <div class=\"row g-0 py-12\">\r\n <!-- Single VM Creation -->\r\n <div class=\"col-md-12 pe-md-3\">\r\n <div class=\"d-flex flex-column align-items-center p-10\">\r\n <div class=\"text-center mb-8\">\r\n <div class=\"mb-5\">\r\n <svg\r\n style=\"width: 80px; height: 80px\"\r\n width=\"56\"\r\n height=\"56\"\r\n viewBox=\"0 0 56 56\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" fill=\"#DAF1FF\" />\r\n <rect x=\"4\" y=\"4\" width=\"48\" height=\"48\" rx=\"24\" stroke=\"#EAF8FF\" stroke-width=\"8\" />\r\n <path\r\n d=\"M28 24V32M24 28H32M38 28C38 33.5228 33.5228 38 28 38C22.4772 38 18 33.5228 18 28C18 22.4772 22.4772 18 28 18C33.5228 18 38 22.4772 38 28Z\"\r\n stroke=\"#00A3FF\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n <h3 class=\"card-title mb-3\">Create a VM manually</h3>\r\n <p class=\"card-tagline mb-0\">You can create a single VM manually by step by step</p>\r\n </div>\r\n <button\r\n [routerLink]=\"['/manage/planogram/create-library-vm']\"\r\n [queryParams]=\"{ isEdit: true }\"\r\n type=\"button\"\r\n class=\"btn btn-outline d-inline-flex align-items-center\"\r\n >\r\n <svg class=\"me-2\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M12 5V19M5 12H19\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n Create Manually\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Bulk VM Creation -->\r\n <!-- <div class=\"col-md-6 ps-md-3 border-start\">\r\n <div class=\"d-flex flex-column align-items-center p-10\">\r\n <div class=\"text-center mb-8\">\r\n <div class=\"mb-5\">\r\n <svg\r\n style=\"width: 80px; height: 80px\"\r\n width=\"56\"\r\n height=\"56\"\r\n viewBox=\"0 0 95 94\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <rect x=\"7.5\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" fill=\"#DAF1FF\" />\r\n <rect x=\"7.5\" y=\"7\" width=\"80\" height=\"80\" rx=\"40\" stroke=\"#EAF8FF\" stroke-width=\"13.3333\" />\r\n <path\r\n d=\"M62.5 52V58.6667C62.5 59.5507 62.1488 60.3986 61.5237 61.0237C60.8986 61.6488 60.0507 62 59.1667 62H35.8333C34.9493 62 34.1014 61.6488 33.4763 61.0237C32.8512 60.3986 32.5 59.5507 32.5 58.6667V52M55.8333 40.3333L47.5 32M47.5 32L39.1667 40.3333M47.5 32V52\"\r\n stroke=\"#00A3FF\"\r\n stroke-width=\"3.33333\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n </div>\r\n <h3 class=\"card-title mb-3\">Create VM using excel template</h3>\r\n <p class=\"card-tagline mb-0\">You can add a single or multiple VM using the template below</p>\r\n </div>\r\n <div class=\"d-flex flex-column gap-2 mb-6\" style=\"width: fit-content\">\r\n <p class=\"card-description mb-0\">\r\n Step1 - <a class=\"download-link fw-medium\" (click)=\"downloadVMTemplate()\">Download the template here</a>\r\n </p>\r\n <p class=\"card-description mb-0\">Step2 - Add your data to the Template File</p>\r\n <p class=\"card-description mb-0\">Step3 - Upload it below for processing</p>\r\n </div>\r\n <button class=\"btn btn-primary d-inline-flex align-items-center\" (click)=\"openBulkUploadModal()\">\r\n <svg class=\"me-2\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n Upload\r\n </button>\r\n </div>\r\n </div> -->\r\n </div>\r\n }\r\n </div>\r\n\r\n <div *ngIf=\"vmList.length != 0\">\r\n <!-- VM list view -->\r\n <section id=\"list-view\" *ngIf=\"viewMode === 'list'; else gridView\">\r\n <div class=\"table-responsive\">\r\n <table class=\"w-100 table bottom-border text-nowrap\">\r\n <thead>\r\n <tr>\r\n <th>\r\n <span (click)=\"onSortTable('vmName')\" class=\"cursor-pointer\">\r\n VM name\r\n <i\r\n class=\"fa ms-1 mt-1\"\r\n [ngStyle]=\"{ color: sortedColumn === 'vmName' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'vmName' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n </span>\r\n </th>\r\n <th>\r\n <span (click)=\"onSortTable('brand')\" class=\"cursor-pointer\">\r\n Brand\r\n <i\r\n class=\"fa ms-1 mt-1\"\r\n [ngStyle]=\"{ color: sortedColumn === 'brand' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'brand' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n </span>\r\n </th>\r\n <th class=\"text-center\">\r\n <span (click)=\"onSortTable('vmType')\" class=\"cursor-pointer\">\r\n Type\r\n <i\r\n class=\"fa ms-1 mt-1\"\r\n [ngStyle]=\"{ color: sortedColumn === 'vmType' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'vmType' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n </span>\r\n </th>\r\n <th class=\"text-center\">\r\n <span (click)=\"onSortTable('vmWidth')\" class=\"cursor-pointer\">\r\n Width\r\n <i\r\n class=\"fa ms-1 mt-1\"\r\n [ngStyle]=\"{ color: sortedColumn === 'vmWidth' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'vmWidth' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n </span>\r\n </th>\r\n <th class=\"text-center\">\r\n <span (click)=\"onSortTable('vmHeight')\" class=\"cursor-pointer\">\r\n Height\r\n <i\r\n class=\"fa ms-1 mt-1\"\r\n [ngStyle]=\"{ color: sortedColumn === 'vmHeight' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'vmHeight' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n </span>\r\n </th>\r\n <!-- <th>\r\n <span (click)=\"onSortTable('vmPlacement')\" class=\"cursor-pointer\">\r\n Placements\r\n <i\r\n class=\"fa ms-1 mt-1\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'vmPlacement' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n </span>\r\n </th> -->\r\n <th class=\"text-center\">\r\n <span (click)=\"onSortTable('templateCount')\" class=\"cursor-pointer\">\r\n No of assigned\r\n <i\r\n class=\"fa ms-1 mt-1\"\r\n [ngStyle]=\"{ color: sortedColumn === 'templateCount' ? '#009BF3' : '' }\"\r\n [ngClass]=\"sortOrder === 1 && sortedColumn === 'templateCount' ? 'fa-arrow-up' : 'fa-arrow-down'\"\r\n aria-hidden=\"true\"\r\n ></i>\r\n </span>\r\n </th>\r\n <th class=\"text-center\">Status</th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let vm of vmList\">\r\n <td style=\"max-width: 300px\">\r\n <div class=\"d-flex align-items-center\">\r\n <div class=\"thumbnail\">\r\n <img [src]=\"vm.imgUrl\" alt=\"Vm Image\" (error)=\"onImgError($event)\" />\r\n </div>\r\n <a\r\n [routerLink]=\"['/manage/planogram/create-library-vm']\"\r\n [queryParams]=\"{ vmId: vm.id }\"\r\n class=\"text-decoration-underline ellipsis\"\r\n [ngbTooltip]=\"vm.name\"\r\n >\r\n {{ vm.name }}\r\n </a>\r\n </div>\r\n </td>\r\n <td>{{ vm?.brand ?? \"-\" }}</td>\r\n <td>{{ vm?.type ?? \"-\" }}</td>\r\n <td class=\"text-center\">{{ vm.width.value }}{{ vm.width.unit }}</td>\r\n <td class=\"text-center\">{{ vm.height.value }}{{ vm.height.unit }}</td>\r\n <!-- <td>{{ vm.placement }}</td> -->\r\n <td class=\"text-center\">{{ vm.noOfAssigned }}</td>\r\n <td class=\"text-center\">\r\n <div class=\"badge\" [ngClass]=\"vm.status\" placement=\"start\" [ngbTooltip]=\"getTooltipText(vm.status)\">\r\n {{ vm.status | titlecase }}\r\n </div>\r\n </td>\r\n <td>\r\n <div class=\"dropdown\">\r\n <button class=\"btn btn-link p-0\" type=\"button\" data-bs-toggle=\"dropdown\">\r\n <ng-container *ngTemplateOutlet=\"verticalDots\"></ng-container>\r\n </button>\r\n <ul class=\"dropdown-menu\">\r\n <li>\r\n <a class=\"dropdown-item cursor-pointer\" (click)=\"onEdit(vm.id, vm.noOfAssigned)\"> Edit </a>\r\n </li>\r\n <li><a class=\"dropdown-item cursor-pointer\" (click)=\"onDuplicate(vm.id)\">Duplicate</a></li>\r\n <li>\r\n <a class=\"dropdown-item cursor-pointer text-danger\" (click)=\"onDelete(vm.id, vm.noOfAssigned)\">Delete</a>\r\n </li>\r\n </ul>\r\n </div>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </section>\r\n\r\n <!-- VM grid viw -->\r\n <ng-template #gridView>\r\n <section id=\"grid-view\" class=\"table-responsive\">\r\n <div class=\"row gx-6 gy-4 m-0\">\r\n <div class=\"col-md-4\" *ngFor=\"let vm of vmList\">\r\n <div class=\"card\" (click)=\"onClickCard($event, vm)\">\r\n <div class=\"card-img\">\r\n <img [src]=\"vm.imgUrl\" alt=\"Vm Image\" (error)=\"onImgError($event)\" />\r\n <div class=\"card-action dropdown\" (click)=\"$event.stopPropagation()\">\r\n <button class=\"btn btn-light\" style=\"padding: 12px 21px !important\" type=\"button\" data-bs-toggle=\"dropdown\">\r\n <ng-container *ngTemplateOutlet=\"verticalDots\"></ng-container>\r\n </button>\r\n <ul class=\"dropdown-menu\">\r\n <li>\r\n <a\r\n class=\"dropdown-item cursor-pointer\"\r\n (click)=\"onEdit(vm.id, vm.noOfAssigned); $event.stopPropagation()\"\r\n >\r\n Edit\r\n </a>\r\n </li>\r\n <li>\r\n <a class=\"dropdown-item cursor-pointer\" (click)=\"onDuplicate(vm.id); $event.stopPropagation()\">\r\n Duplicate\r\n </a>\r\n </li>\r\n <li>\r\n <a\r\n class=\"dropdown-item cursor-pointer text-danger\"\r\n (click)=\"onDelete(vm.id, vm.noOfAssigned); $event.stopPropagation()\"\r\n >\r\n Delete\r\n </a>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <h3 class=\"ellipsis\" [ngbTooltip]=\"vm.name\">\r\n {{ vm.name }}\r\n </h3>\r\n <div class=\"badge\" [ngClass]=\"vm.status\" placement=\"start\" [ngbTooltip]=\"getTooltipText(vm.status)\">\r\n {{ vm.status | titlecase }}\r\n </div>\r\n </div>\r\n <div class=\"card-tagline\">\r\n {{ vm.width.value }}{{ vm.width.unit }} x {{ vm.height.value }}{{ vm.height.unit }}\r\n <span *ngIf=\"vm?.type\">&#8226;</span>\r\n {{ vm.type }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </ng-template>\r\n\r\n <!-- Pagination -->\r\n <lib-pagination\r\n [itemsPerPage]=\"limit\"\r\n [currentPage]=\"offset\"\r\n [totalItems]=\"totalItems\"\r\n [paginationSizes]=\"paginationSizes\"\r\n [pageSize]=\"paginationSize()\"\r\n (pageChange)=\"onPageChange($event)\"\r\n (pageSizeChange)=\"onPageSizeChange($event)\"\r\n >\r\n </lib-pagination>\r\n </div>\r\n </ng-template>\r\n</section>\r\n\r\n<ng-template #verticalDots>\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"4\" height=\"18\" viewBox=\"0 0 4 18\" fill=\"none\">\r\n <path\r\n d=\"M1 9C1 9.55228 1.44771 10 2 10C2.55228 10 3 9.55228 3 9C3 8.44772 2.55228 8 2 8C1.44771 8 1 8.44772 1 9Z\"\r\n stroke=\"#101828\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M0.999999 16C0.999999 16.5523 1.44771 17 2 17C2.55228 17 3 16.5523 3 16C3 15.4477 2.55228 15 2 15C1.44771 15 0.999999 15.4477 0.999999 16Z\"\r\n stroke=\"#101828\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n <path\r\n d=\"M1 2C1 2.55228 1.44772 3 2 3C2.55228 3 3 2.55228 3 2C3 1.44772 2.55228 1 2 1C1.44772 1 1 1.44772 1 2Z\"\r\n stroke=\"#101828\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\"\r\n />\r\n </svg>\r\n</ng-template>\r\n", styles: [".nodatamaintext{font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-align:center;color:#101828}.nodatasubtext[_ngcontent-ng-c2141490359]{font-family:Inter;font-size:14px;font-weight:400;line-height:20px;text-align:center;color:#667085}.table-responsive{min-height:calc(100vh - 495px)}.download-link{color:var(--Primary-800, #008edf);font-size:14px;font-weight:500;line-height:20px;text-decoration-line:underline;text-decoration-style:solid;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font;cursor:pointer}h3.card-title{color:#101828;font-size:18px;font-weight:600;line-height:28px}p.card-tagline{color:#101828;font-size:14px;font-weight:500;line-height:20px}p.card-description{color:#344054;font-size:14px;font-weight:400;line-height:20px}#list-view .thumbnail{height:40px;width:40px;background:#f2f4f7;margin-right:12px;border-radius:8px}#list-view td{vertical-align:middle}#grid-view .card{box-shadow:0 4px 10px #0000000d;border:1px solid rgb(223,225,231);background:#fff;border-radius:12px;padding:12px;height:100%;transition:all .2s ease}#grid-view .card:hover{cursor:pointer;box-shadow:0 10px 10px #0001;transition:all .2s ease}#grid-view .card-img{margin-bottom:12px;background:#d0d5dd;height:200px;border-radius:6px}#grid-view .card-action{position:absolute;top:20px;right:20px}#grid-view .card-tagline{color:#475467;font-weight:500;font-size:14px;line-height:20px}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;color:#027a48;background:#ecfdf3}.badge.inactive{background:#f2f4f7;color:#344054}.badge.cluster{background:#f2f4f7;color:#344054}.badge.published{background:#ecfdf3;color:#027a48}.badge.yet-to-publish{background:#f8f9fc;color:#363f72}.indicator{border-radius:16px;padding:2px 8px;display:flex;justify-content:center;align-items:center;white-space:nowrap;width:fit-content;text-align:center;font-size:14px;font-weight:500}.indicator.short{height:14px!important;width:14px!important;border-radius:50%!important;padding:0!important}.indicator.yetToComplete{background:#f2f4f7;color:#667085}.indicator.yetToComplete path{fill:#667085}.indicator.draft{background:#f2f4f7;color:#667085}.indicator.draft path{fill:#667085}.indicator.yetToAssign{background:#eaecf5;color:#344054}.indicator.yetToAssign path{fill:#344054}.indicator.taskAssigned{background:#e0eaff;color:#7a5af8}.indicator.taskAssigned path{fill:#7a5af8}.indicator.reviewPending{background:#fef0c7;color:#f79009}.indicator.reviewPending path{fill:#f79009}.indicator.allocationPending{background:#fef0c7;color:#f79009}.indicator.allocationPending path{fill:#f79009}.indicator.flagged{background:var(--Error-50, #fef3f2);color:var(--Error-700, #b42318)}.indicator.completed{background:#d1fadf;color:#12b76a}.indicator.completed path{fill:#12b76a}.toggle-button{width:40px;height:40px;display:flex;justify-content:center;align-items:center;border-radius:8px;background:#fff;border:.89px solid rgb(208,213,221);box-shadow:0 .89px 1.78px #1018280d;transition:all ease .3s}.toggle-button:hover{cursor:pointer}.toggle-button.selected{transition:all ease .3s;background:#eaf8ff;box-shadow:0 0 0 3.56px #d5effe!important;border:.89px solid rgb(234,248,255)}.disabled-click{pointer-events:none;cursor:not-allowed!important;opacity:.6}.search-icon{position:absolute;left:14px;top:50%;transform:translateY(-50%);pointer-events:none;color:#888;display:flex;align-items:center;height:1.5rem}.clear-search{position:absolute;right:14px;top:50%;transform:translateY(-50%);background:none;border:none;padding:0;cursor:pointer;display:flex;align-items:center;height:1.5rem;width:1.5rem}.restrict-interaction{-webkit-user-select:none;user-select:none;pointer-events:none}.btn .spinner{height:22px;animation:spin .9s linear infinite}.btn .spinner .path{stroke-width:4px;stroke:#071437;stroke-linecap:round;stroke-dasharray:80;stroke-dashoffset:60}@keyframes spin{to{transform:rotate(360deg)}}.header{background:#fff;padding:12px;border-radius:12px;display:flex;align-items:center;justify-content:space-between}.btn{padding:.775rem 1.5rem!important;font-size:1.1rem!important}.badge{font-weight:500;font-size:12px;line-height:18px;text-align:center;padding:2px 8px;border-radius:16px}.badge.active{color:#027a48;background:#ecfdf3}.badge.inactive{background:#f2f4f7!important;color:#344054!important}.badge.draft{color:#009bf3;background:#eaf8ff}.builder{height:75vh}.builder .cols{background:#fff;border-radius:12px;padding:24px 24px 12px;max-height:75vh;overflow-y:auto}.shelf-container{border-radius:8px;background:var(--Gray-50, #f9fafb);padding:8px 16px;margin-bottom:12px}.counter-container{display:flex;align-items:center;justify-content:center;border-radius:8px;background-color:#fff;padding:10px;border:.49px solid #d0d5dd}.counter-container span{margin:0 18px;font-weight:500;font-size:14px;text-align:center;vertical-align:middle;width:18px}.disable-counter{color:var(--bs-gray-500)!important;background-color:var(--bs-gray-200)!important;border-color:var(--bs-gray-300)!important;pointer-events:none;opacity:1}.disabled-click{pointer-events:none;opacity:.85}.wall-viewport{display:flex;align-items:center;justify-content:center;flex-direction:column;margin-bottom:30px;max-width:345px;min-width:234px;text-align:center}.wall-viewport .wrapper{width:100%;max-width:345px}.wall-viewport .header-info,.wall-viewport .footer-info,.wall-viewport .body-info{width:100%;border:2px solid #f2f4f7;border-bottom:4px solid #ffffff;background:#f2f4f7;max-width:230px;display:flex;align-items:center;justify-content:center;justify-content:start;padding:12px;gap:4px}.wall-viewport .header-info p,.wall-viewport .footer-info p,.wall-viewport .body-info p{margin:0}.wall-viewport .header-info{margin-top:40px}.wall-viewport .sub-footer{border:1px solid #98a2b3;height:100%}.wall-viewport .header-block,.wall-viewport .footer-block{border:1px solid #98a2b3;height:95px;padding:8px;background-color:#f2f4f7;width:100%;display:flex;justify-content:center;align-items:center}.wall-viewport .header-block p,.wall-viewport .footer-block p{color:var(--Gray-600, #475467);font-size:18px;font-weight:600;white-space:normal;word-wrap:break-word;margin:0;background-color:#f2f4f7}.wall-viewport .body-block{width:100%}.wall-viewport .body-block .shelfContainer .block{border:1px solid #98a2b3;border-top:none}.wall-viewport .body-block .shelfContainer:first-child .block{border-top:1px solid #98a2b3}.wall-viewport .body-block .block{padding:10px;width:100%;max-width:345px;overflow-x:auto;min-height:52px}.wall-viewport .body-block .tray,.wall-viewport .body-block .shelf{display:flex;gap:4px}.wall-viewport .body-block .tray .product,.wall-viewport .body-block .shelf .product{border:1px solid rgba(152,162,179,.2901960784);min-width:50px}.wall-viewport .body-block .tray .product{min-height:20px}.wall-viewport .body-block .shelf .product{min-height:30px}.wall-viewport .body-block .vmonly-placeholder{background-image:repeating-linear-gradient(45deg,rgba(152,162,179,.2901960784) 0,rgba(152,162,179,.2901960784) .7px,transparent .7px,transparent 8px),repeating-linear-gradient(-45deg,rgba(152,162,179,.2901960784) 0,rgba(152,162,179,.2901960784) .7px,transparent .7px,transparent 8px)}.wall-viewport .body-block .hide-product{border-color:transparent!important}.wall-viewport .body-block .hide-scroll{overflow-x:hidden!important}.horizontal-dimension{display:flex;align-items:center;justify-content:center;height:30px;position:relative}.horizontal-dimension .arrow{width:12px;height:12px;background-size:contain;background-repeat:no-repeat;background-position:center}.horizontal-dimension .arrow.left{transform:rotate(180deg);background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.horizontal-dimension .arrow.right{transform:rotate(0);background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.horizontal-dimension .line{flex:1;background-color:#eaecf0;position:relative;display:flex;align-items:center;justify-content:center;height:1px}.horizontal-dimension .line span{position:absolute;top:-12px;color:#667085;font-weight:500;font-size:14px;background-color:#fff;padding:0 4px}.vertical-dimension{display:flex;flex-direction:column;align-items:center;width:30px;position:relative}.vertical-dimension .arrow{width:12px;height:12px;background-size:contain;background-repeat:no-repeat;background-position:center}.vertical-dimension .arrow.up{transform:rotate(-90deg);margin-top:20px;background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.vertical-dimension .arrow.down{transform:rotate(90deg);margin-bottom:26px;background-image:url(\"data:image/svg+xml,%3Csvg fill='%23EAECF0' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 330 330'%3E%3Cpath d='M250.606,154.389l-150-149.996c-5.857-5.858-15.355-5.858-21.213,0.001c-5.857,5.858-5.857,15.355,0.001,21.213l139.393,139.39L79.393,304.394c-5.857,5.858-5.857,15.355,0.001,21.213C82.322,328.536,86.161,330,90,330s7.678-1.464,10.607-4.394l149.999-150.004c2.814-2.813,4.394-6.628,4.394-10.606C255,161.018,253.42,157.202,250.606,154.389z'/%3E%3C/svg%3E\")}.vertical-dimension .line{flex:1;background-color:#eaecf0;position:relative;display:flex;align-items:center;justify-content:center;width:1px}.vertical-dimension .line span{writing-mode:vertical-rl;text-orientation:mixed;transform:rotate(180deg);color:#667085;font-weight:500;font-size:14px;background-color:#fff;padding:2px 4px}.info-card{padding:12px;background:#fff;border:1px solid #d0d5dd;border-radius:8px;box-shadow:0 1px 2px #1018280f,0 1px 3px #1018281a}.info-card h3{font-weight:600;font-size:18px;line-height:28px;vertical-align:middle}.info-card p{font-weight:500;font-size:14px;line-height:20px;color:#667085;margin:0}.checkbox input[type=checkbox]{width:16px!important;height:16px!important;margin:5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-600, #d0d5dd)!important;box-shadow:none;font-size:.5em;text-align:center;line-height:1em;background:#fff}.checkbox input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00a3ff)!important;background-color:var(--primary-50, #eaf8ff)}.checkbox input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00a3ff;border-right:2px solid #00a3ff;display:inline-block;width:.5em;padding-left:3px;padding-top:10px;padding-right:0}.nav-pills{display:inline-flex;gap:4px}.nav-pills .nav-item .nav-link{border-radius:0;color:#667085;font-size:14px;font-weight:500;padding:8px 16px;border:none}.nav-pills .nav-item .nav-link:hover{background-color:#00000005}.nav-pills .nav-item .nav-link.active{background-color:#eaf8ff;color:#009bf3;border-bottom:3px solid #009bf3}.content-wrapper{background:#fff;border-radius:12px;min-height:calc(100vh - 400px);height:100%;padding:16px 24px;display:flex;flex-direction:column}.loader .shimmer{height:150px}.filter-tab{border:1px solid rgb(234,236,240);background:#fff;box-shadow:0 1px 2px #1018280d;border-radius:8px;padding:18px;transition:all ease .2s}.filter-tab:hover{cursor:pointer}.filter-tab.selected{background:#f6fcff;border:1px solid rgb(107,202,255);box-shadow:0 1px 2px #1018280d}.filter-tab h3{color:#000;font-size:20px;font-weight:600;line-height:30px;margin:0}.filter-tab p{color:var(--Gray-500, #667085);font-size:14px;font-weight:500;line-height:20px;margin:0}.ellipsis{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#list-view .thumbnail img,#list-view .card-img img{width:40px;height:100%;object-fit:contain;display:block;border-radius:10px}#grid-view .thumbnail img,#grid-view .card-img img{width:100%;height:100%;object-fit:contain;display:block;border-radius:10px}\n"] }]
399
398
  }], ctorParameters: () => [{ type: i1.NgbModal }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i3.StoreBuilderService }, { type: i4.PlanoDataService }, { type: i5.GlobalStateService }, { type: i6.ToastService }, { type: i5.PageInfoService }] });
400
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm0tbGlicmFyeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9wbGFuby1saWJyYXJ5L3ZtLWxpYnJhcnkvdm0tbGlicmFyeS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9wbGFuby1saWJyYXJ5L3ZtLWxpYnJhcnkvdm0tbGlicmFyeS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUU3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFnQixTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJcEgsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFHekYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFFN0csT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0RBQXNELENBQUM7QUFDOUYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7Ozs7Ozs7Ozs7QUFRN0YsTUFBTSxPQUFPLGtCQUFrQjtJQThDbkI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQXBEVixRQUFRLENBQVM7SUFFakIsTUFBTSxHQUFvQixFQUFFLENBQUM7SUFFN0IsUUFBUSxHQUE2QixNQUFNLENBQUM7SUFFNUMsWUFBWSxHQUFXLEVBQUUsQ0FBQztJQUMxQixTQUFTLEdBQVcsQ0FBQyxDQUFDO0lBRXRCLFVBQVUsR0FBVyxFQUFFLENBQUM7SUFFeEIsS0FBSyxH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Ozs0RkRuZmEsa0JBQWtCO2tCQU45QixTQUFTOytCQUNFLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgZmlyc3RWYWx1ZUZyb20sIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktc2hhcmVkJztcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlLCBQYWdlSW5mb1NlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktZ2xvYmFsJztcclxuaW1wb3J0IHsgVk1CdWxrVXBsb2FkQ29tcG9uZW50IH0gZnJvbSAnLi9wb3B1cHMvdm0tYnVsay11cGxvYWQvdm0tYnVsay11cGxvYWQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU3RvcmVCdWlsZGVyU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3N0b3JlLWJ1aWxkZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFZtTGlicmFyeUxpc3QsIFZNVHlwZURldGFpbHMgfSBmcm9tICcuLi8uLi8uLi9pbnRlcmZhY2VzL3ZtLWxpYnJhcnkuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgRGVsZXRlQ29uZmlybWF0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vcG9wdXBzL2RlbGV0ZS1jb25maXJtYXRpb24vZGVsZXRlLWNvbmZpcm1hdGlvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQbGFub0RhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcGxhbm8tZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2Fubm90UGVyZm9ybUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BvcHVwcy9jYW5ub3QtcGVyZm9ybS9jYW5ub3QtcGVyZm9ybS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBnZXRRdWVyeVBhcmFtTnVtYmVyLCBnZXRRdWVyeVBhcmFtU3RyaW5nIH0gZnJvbSAnLi4vLi4vLi4vZnVuY3Rpb25zL3BsYW5vLmZ1bmN0aW9uJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXZtLWxpYnJhcnknLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi92bS1saWJyYXJ5LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybDogJy4vdm0tbGlicmFyeS5jb21wb25lbnQuc2NzcydcclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBWbUxpYnJhcnlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgY2xpZW50SWQ6IHN0cmluZztcclxuXHJcbiAgdm1MaXN0OiBWbUxpYnJhcnlMaXN0W10gPSBbXTtcclxuXHJcbiAgdmlld01vZGU6ICdsaXN0JyB8ICdncmlkJyB8IHN0cmluZyA9ICdsaXN0JztcclxuXHJcbiAgc29ydGVkQ29sdW1uOiBzdHJpbmcgPSAnJztcclxuICBzb3J0T3JkZXI6IG51bWJlciA9IDE7XHJcblxyXG4gIHNlYXJjaFRlcm06IHN0cmluZyA9ICcnO1xyXG5cclxuICBsaW1pdDogbnVtYmVyID0gMTA7XHJcbiAgb2Zmc2V0OiBudW1iZXIgPSAxO1xyXG4gIHRvdGFsSXRlbXM6IG51bWJlciA9IDA7XHJcbiAgcGFnaW5hdGlvblNpemVzID0gWzEwLCAyMCwgMzBdO1xyXG5cclxuICBmaWx0ZXJPYmplY3QgPSBbXHJcbiAgICB7XHJcbiAgICAgIERlc2NyaXB0aW9uOiAnU3RhdHVzJyxcclxuICAgICAgSXNzdWVzOiBbXHJcbiAgICAgICAgeyB0ZXh0OiBcIkFjdGl2ZVwiLCBpZDogJ2FjdGl2ZScgfSxcclxuICAgICAgICB7IHRleHQ6IFwiSW5hY3RpdmVcIiwgaWQ6ICdpbmFjdGl2ZScgfSxcclxuICAgICAgICB7IHRleHQ6IFwiRHJhZnRcIiwgaWQ6ICdkcmFmdCcgfSxcclxuICAgICAgXSxcclxuICAgIH1cclxuICBdXHJcblxyXG4gIGFwcGxpZWRGaWx0ZXJzID0ge1xyXG4gICAgc3RhdHVzOiBbXSxcclxuICAgIGJyYW5kOiBbXSxcclxuICAgIHR5cGU6IFtdLFxyXG4gICAgLy8gY2F0ZWdvcnk6IFtdLFxyXG4gIH07XHJcblxyXG4gIGlzRmlsdGVyQXBwbGllZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBpc1BhZ2VMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICBpc0Vycm9yOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGltZ0NETjogc3RyaW5nO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcml2YXRlIGxpYlN1Yj86IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIG5nYk1vZGFsOiBOZ2JNb2RhbCxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgc3RvcmVCdWlsZGVyU2VydmljZTogU3RvcmVCdWlsZGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgcGxhbm9EYXRhU2VydmljZTogUGxhbm9EYXRhU2VydmljZSxcclxuICAgIHByaXZhdGUgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgdG9hc3Q6IFRvYXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgcGFnZUluZm86IFBhZ2VJbmZvU2VydmljZSxcclxuICApIHsgfVxyXG5cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNldFBhZ2VEYXRhKCk7XHJcbiAgICB0aGlzLmdzLmVudmlyb25tZW50LnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKGVudikgPT4gdGhpcy5pbWdDRE4gPSBlbnYucGxhbm9ncmFtQ0ROKVxyXG5cclxuICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLCAvLyBTdWJzY3JpcHRpb24gd2lsbCBiZSBjYW5jZWxsZWQgb24gY29tcG9uZW50IGRlc3Ryb3kuXHJcbiAgICAgIGRlYm91bmNlVGltZSgyMDApLCAvLyBUbyBhdm9pZCBpbW1lZGlhdGUgZnJlcXVlbnQgY2FsbHMuIFxyXG4gICAgICBmaWx0ZXIoZGF0YSA9PiAhIWRhdGEpLCAvLyBGaWx0ZXJpbmcgbnVsbC91bmRlZmluZWQuXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkgLy8gRW1pdHRpbmcgb25seSBkaWZmZXJlbnQgdmFsdWVzLiAoSWdub3JlcyBzYW1lIGNsaWVudElkKS5cclxuICAgICkuc3Vic2NyaWJlKChkYXRhOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5pc1BhZ2VMb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgIGlmIChkYXRhPy5jbGllbnQpIHtcclxuICAgICAgICB0aGlzLmNsaWVudElkID0gZGF0YT8uY2xpZW50O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBoZWFkZXJEYXRhID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaGVhZGVyLWZpbHRlcnMnKSBhcyBzdHJpbmcpO1xyXG4gICAgICAgIHRoaXMuY2xpZW50SWQgPSBoZWFkZXJEYXRhPy5jbGllbnQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuZ2V0QnJhbmRzTGlzdCgpO1xyXG4gICAgICB0aGlzLmdldFZtVHlwZXMoKTtcclxuXHJcbiAgICAgIHRoaXMucm91dGUucXVlcnlQYXJhbU1hcC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHBhcmFtcyA9PiB7XHJcbiAgICAgICAgdGhpcy52aWV3TW9kZSA9IGdldFF1ZXJ5UGFyYW1TdHJpbmcoe1xyXG4gICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAga2V5OiAndmlldycsXHJcbiAgICAgICAgICBmYWxsYmFjazogJ2xpc3QnLFxyXG4gICAgICAgICAgYWxsb3dlZDogWydncmlkJywgJ2xpc3QnXSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWFyY2hUZXJtID0gZ2V0UXVlcnlQYXJhbVN0cmluZyh7XHJcbiAgICAgICAgICBwYXJhbXMsXHJcbiAgICAgICAgICBrZXk6ICdzZWFyY2gnLFxyXG4gICAgICAgICAgZmFsbGJhY2s6ICcnLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuaXNGaWx0ZXJBcHBsaWVkID0gdGhpcy5zZWFyY2hUZXJtID8gdHJ1ZSA6IGZhbHNlO1xyXG5cclxuXHJcbiAgICAgICAgdGhpcy5saW1pdCA9IGdldFF1ZXJ5UGFyYW1OdW1iZXIoe1xyXG4gICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAga2V5OiAnbGltaXQnLFxyXG4gICAgICAgICAgZmFsbGJhY2s6IDEwLFxyXG4gICAgICAgICAgbWluOiAxLFxyXG4gICAgICAgICAgbWF4OiAzMFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLm9mZnNldCA9IGdldFF1ZXJ5UGFyYW1OdW1iZXIoe1xyXG4gICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAga2V5OiAnb2Zmc2V0JyxcclxuICAgICAgICAgIGZhbGxiYWNrOiAwLFxyXG4gICAgICAgICAgbWluOiAwXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuZ2V0Vm1zTGlzdCgpO1xyXG4gICAgICB9KTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldEJyYW5kc0xpc3QoKSB7XHJcbiAgICB0aGlzLnBsYW5vRGF0YVNlcnZpY2UuYnJhbmRzTGlzdC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgIGNvbnN0IGJyYW5kRmlsdGVyT2JqID0gdGhpcy5maWx0ZXJPYmplY3QuZmluZChmID0+IGYuRGVzY3JpcHRpb24gPT09ICdCcmFuZHMnKTtcclxuXHJcbiAgICAgIGlmIChicmFuZEZpbHRlck9iaikge1xyXG4gICAgICAgIGJyYW5kRmlsdGVyT2JqLklzc3VlcyA9IGUubWFwKGIgPT4geyByZXR1cm4geyB0ZXh0OiBiLmJyYW5kTmFtZSA/PyAnJywgaWQ6IGIuYnJhbmROYW1lID8/ICcnIH07IH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyT2JqZWN0LnB1c2goe1xyXG4gICAgICAgICAgRGVzY3JpcHRpb246ICdCcmFuZHMnLFxyXG4gICAgICAgICAgSXNzdWVzOiBlLm1hcChiID0+IHsgcmV0dXJuIHsgdGV4dDogYi5icmFuZE5hbWUgPz8gJycsIGlkOiBiLmJyYW5kTmFtZSA/PyAnJyB9OyB9KVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMucGxhbm9EYXRhU2VydmljZS5mZXRjaEJyYW5kc0xpc3QodGhpcy5jbGllbnRJZCk7XHJcbiAgfVxyXG5cclxuICBzZXRQYWdlRGF0YSgpIHtcclxuICAgIHRoaXMucGFnZUluZm8uc2V0VGl0bGUoXCJWaXN1YWwgTWVyY2hhbmRpc2UgTGlicmFyeVwiKTtcclxuICAgIHRoaXMucGFnZUluZm8uc2V0QnJlYWRjcnVtYnMoW1xyXG4gICAgICB7IHRpdGxlOiBcIlBsYW5vZ3JhbVwiLCBwYXRoOiBcIi9tYW5hZ2UvcGxhbm9ncmFtL21hbmFnZS1wbGFub2dyYW1zXCIsIGlzQWN0aXZlOiBmYWxzZSwgaXNTZXBhcmF0b3I6IGZhbHNlIH0sXHJcbiAgICAgIHsgdGl0bGU6IFwiXCIsIHBhdGg6IFwiXCIsIGlzQWN0aXZlOiBmYWxzZSwgaXNTZXBhcmF0b3I6IHRydWUgfSxcclxuICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Vm1zTGlzdCgpIHtcclxuICAgIHRoaXMubGliU3ViPy51bnN1YnNjcmliZSgpIC8vIENhbmNlbCBwcmV2aW91cyByZXF1ZXN0LlxyXG5cclxuICAgIHRoaXMuaXNQYWdlTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnZtTGlzdCA9IFtdO1xyXG4gICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgIGNsaWVudElkOiB0aGlzLmNsaWVudElkLFxyXG4gICAgICBsaW1pdDogdGhpcy5saW1pdCxcclxuICAgICAgb2Zmc2V0OiB0aGlzLm9mZnNldCxcclxuICAgICAgc29ydENvbHVtbk5hbWU6IHRoaXMuc29ydGVkQ29sdW1uLFxyXG4gICAgICBzb3J0Qnk6IHRoaXMuc29ydE9yZGVyLFxyXG4gICAgICBzZWFyY2hWYWx1ZTogdGhpcy5zZWFyY2hUZXJtLFxyXG4gICAgICBmaWx0ZXI6IHRoaXMuYXBwbGllZEZpbHRlcnMsXHJcbiAgICAgIGV4cG9ydDogZmFsc2UsXHJcbiAgICAgIGVtcHR5RG93bmxvYWQ6IGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5saWJTdWIgPSB0aGlzLnN0b3JlQnVpbGRlclNlcnZpY2UuZ2V0Vm1MaWJyYXJ5TGlzdChwYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzPy5zdGF0dXMgPT09ICdzdWNjZXNzJykge1xyXG4gICAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gcmVzPy5kYXRhPy5jb3VudDtcclxuICAgICAgICAgIHRoaXMudm1MaXN0ID0gcmVzPy5kYXRhPy5kYXRhLm1hcCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgbmFtZTogaXRlbS52bU5hbWUsXHJcbiAgICAgICAgICAgICAgYnJhbmQ6IGl0ZW0udm1CcmFuZCxcclxuICAgICAgICAgICAgICB0eXBlOiBpdGVtLnZtVHlwZSxcclxuICAgICAgICAgICAgICB3aWR0aDogaXRlbS52bVdpZHRoLFxyXG4gICAgICAgICAgICAgIGhlaWdodDogaXRlbS52bUhlaWdodCxcclxuICAgICAgICAgICAgICBwbGFjZW1lbnQ6IGl0ZW0uaXNEb3VibGVTaWRlZCxcclxuICAgICAgICAgICAgICBub09mQXNzaWduZWQ6IGl0ZW0udGVtcGxhdGVJZC5sZW5ndGgsXHJcbiAgICAgICAgICAgICAgc3RhdHVzOiBpdGVtLnN0YXR1cyxcclxuICAgICAgICAgICAgICBpbWdVcmw6IGAke3RoaXMuaW1nQ0ROfSR7aXRlbS52bUltYWdlVXJsfWAsXHJcbiAgICAgICAgICAgICAgaWQ6IGl0ZW0uX2lkXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBpZiAodGhpcy50b3RhbEl0ZW1zIDwgMTApIHtcclxuICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2l6ZXMgPSBbdGhpcy50b3RhbEl0ZW1zXVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2l6ZXMgPSBbMTAsIDIwLCAzMF1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc1BhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0BAIGdldFZtc0xpc3QgW0VSUl06ICcsIGVycilcclxuICAgICAgICB0aGlzLmlzUGFnZUxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuXHJcbiAgICB0aGlzLnRvdGFsSXRlbXMgPSB0aGlzLnZtTGlzdC5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRWbVR5cGVzKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcmVzOiBhbnkgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLnN0b3JlQnVpbGRlclNlcnZpY2UuZ2V0Vm1UeXBlc0xpc3QodGhpcy5jbGllbnRJZCkpO1xyXG4gICAgICBpZiAocmVzPy5kYXRhKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IHZtVHlwZUZpbHRlck9iaiA9IHRoaXMuZmlsdGVyT2JqZWN0LmZpbmQoZiA9PiBmLkRlc2NyaXB0aW9uID09PSAnVk0gVHlwZScpXHJcblxyXG4gICAgICAgIGlmICh2bVR5cGVGaWx0ZXJPYmopIHtcclxuICAgICAgICAgIHZtVHlwZUZpbHRlck9iai5Jc3N1ZXMgPSByZXMuZGF0YS5tYXAoKGI6IFZNVHlwZURldGFpbHMpID0+IHsgcmV0dXJuIHsgdGV4dDogYi52bVR5cGUgPz8gJycsIGlkOiBiLnZtVHlwZSA/PyAnJyB9IH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlck9iamVjdC5wdXNoKHtcclxuICAgICAgICAgICAgRGVzY3JpcHRpb246ICdWTSBUeXBlJyxcclxuICAgICAgICAgICAgSXNzdWVzOiByZXMuZGF0YS5tYXAoKGI6IFZNVHlwZURldGFpbHMpID0+IHsgcmV0dXJuIHsgdGV4dDogYi52bVR5cGUgPz8gJycsIGlkOiBiLnZtVHlwZSA/PyAnJyB9IH0pXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coXCJAQCB+IGdldFZtVHlwZXMgW0VSUl06XCIsIGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRvd25sb2FkVk1UZW1wbGF0ZSgpIHtcclxuICAgIGxldCBwYXlsb2FkID0ge1xyXG4gICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZCxcclxuICAgICAgbGltaXQ6IDEwMDAwLFxyXG4gICAgICBvZmZzZXQ6IDAsXHJcbiAgICAgIHNvcnRDb2x1bW5OYW1lOiAnJyxcclxuICAgICAgc29ydEJ5OiAxLFxyXG4gICAgICBzZWFyY2hWYWx1ZTogJycsXHJcbiAgICAgIGZpbHRlcjoge1xyXG4gICAgICAgIHR5cGU6IFtdLFxyXG4gICAgICAgIHN0YXR1czogW10sXHJcbiAgICAgICAgc2l6ZTogW11cclxuICAgICAgfSxcclxuICAgICAgZXhwb3J0OiB0cnVlLFxyXG4gICAgICBlbXB0eURvd25sb2FkOiB0cnVlXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlLmdldFZtTGlicmFyeUxpc3RUb0V4cG9ydChwYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnN0b3JlQnVpbGRlclNlcnZpY2Uuc2F2ZUFzRXhjZWxGaWxlKHJlcywgJ1ZtIExpYnJhcmllcycpXHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0BAIHZtTGlicmFyeUxpc3RUb0V4cG9ydCBbRVJSXTogJywgZXJyKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZXhwb3J0Vk1MaXN0KCkge1xyXG4gICAgbGV0IHBheWxvYWQgPSB7XHJcbiAgICAgIGNsaWVudElkOiB0aGlzLmNsaWVudElkLFxyXG4gICAgICBsaW1pdDogMTAwMDAsXHJcbiAgICAgIG9mZnNldDogMCxcclxuICAgICAgc29ydENvbHVtbk5hbWU6IHRoaXMuc29ydGVkQ29sdW1uLFxyXG4gICAgICBzb3J0Qnk6IHRoaXMuc29ydE9yZGVyLFxyXG4gICAgICBzZWFyY2hWYWx1ZTogdGhpcy5zZWFyY2hUZXJtLFxyXG4gICAgICBmaWx0ZXI6IHRoaXMuYXBwbGllZEZpbHRlcnMsXHJcbiAgICAgIGV4cG9ydDogdHJ1ZSxcclxuICAgICAgZW1wdHlEb3dubG9hZDogZmFsc2VcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnN0b3JlQnVpbGRlclNlcnZpY2UuZ2V0Vm1MaWJyYXJ5TGlzdFRvRXhwb3J0KHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc3RvcmVCdWlsZGVyU2VydmljZS5zYXZlQXNFeGNlbEZpbGUocmVzLCAnVk1zIGxpc3QnKVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdAQCB2bUxpYnJhcnlMaXN0VG9FeHBvcnQgW0VSUl06ICcsIGVycilcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIG9wZW5CdWxrVXBsb2FkTW9kYWwoKSB7XHJcbiAgICBjb25zdCBtb2RlbFJlZiA9IHRoaXMubmdiTW9kYWwub3BlbihWTUJ1bGtVcGxvYWRDb21wb25lbnQsIHsgY2VudGVyZWQ6IHRydWUgfSk7XHJcbiAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS5jbGllbnRJZCA9IHRoaXMuY2xpZW50SWQ7XHJcbiAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS50b3RhbEl0ZW1Db3VudCA9IHRoaXMudG90YWxJdGVtcztcclxuICAgIG1vZGVsUmVmLnJlc3VsdC50aGVuKChyZXN1bHQpID0+IHtcclxuICAgICAgaWYgKHJlc3VsdCA9PT0gJ3JlZnJlc2gnKSB7XHJcbiAgICAgICAgdGhpcy5nZXRWbXNMaXN0KClcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIG9uU2VhcmNoKCkge1xyXG4gICAgdGhpcy5zb3J0ZWRDb2x1bW4gPSAnJztcclxuICAgIHRoaXMuc29ydE9yZGVyID0gMVxyXG4gICAgdGhpcy5vZmZzZXQgPSAwO1xyXG4gICAgdGhpcy5saW1pdCA9IDEwO1xyXG5cclxuICAgIHRoaXMuaXNGaWx0ZXJBcHBsaWVkID0gdGhpcy5zZWFyY2hUZXJtID8gdHJ1ZSA6IGZhbHNlO1xyXG5cclxuICAgIHRoaXMudXBkYXRlUXVlcnlQYXJhbXMoKTtcclxuICB9XHJcblxyXG4gIG9uU29ydFRhYmxlKGNvbHVtbjogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5zb3J0ZWRDb2x1bW4gPT09IGNvbHVtbikge1xyXG4gICAgICB0aGlzLnNvcnRPcmRlciA9IHRoaXMuc29ydE9yZGVyID09PSAxID8gLTEgOiAxO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zb3J0ZWRDb2x1bW4gPSBjb2x1bW47XHJcbiAgICAgIHRoaXMuc29ydE9yZGVyID0gMTtcclxuICAgIH1cclxuICAgIHRoaXMub2Zmc2V0ID0gMTtcclxuICAgIHRoaXMubGltaXQgPSAxMDtcclxuICAgIHRoaXMuZ2V0Vm1zTGlzdCgpXHJcbiAgfVxyXG5cclxuICBhcHBseUZpbHRlcnMoZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3Qgc3RhdHVzID0gZXZlbnQuZmluZCgoZTogYW55KSA9PiBlLkRlc2NyaXB0aW9uID09ICdTdGF0dXMnKT8uSXNzdWVzPy5tYXAoKGk6IGFueSkgPT4gaT8uaWQpO1xyXG4gICAgY29uc3QgdHlwZSA9IGV2ZW50LmZpbmQoKGU6IGFueSkgPT4gZS5EZXNjcmlwdGlvbiA9PSAnVk0gVHlwZScpPy5Jc3N1ZXM/Lm1hcCgoaTogYW55KSA9PiBpPy5pZCk7XHJcbiAgICBjb25zdCBicmFuZCA9IGV2ZW50LmZpbmQoKGU6IGFueSkgPT4gZS5EZXNjcmlwdGlvbiA9PSAnQnJhbmRzJyk/Lklzc3Vlcz8ubWFwKChpOiBhbnkpID0+IGk/LmlkKTtcclxuICAgIC8vIGNvbnN0IGNhdGVnb3J5ID0gZXZlbnRbMl0/Lklzc3Vlcz8ubWFwKChpOiBhbnkpID0+IGk/LmlkKTtcclxuXHJcbiAgICB0aGlzLmlzRmlsdGVyQXBwbGllZCA9IChzdGF0dXMgfHwgdHlwZSB8fCBicmFuZCk7XHJcbiAgICB0aGlzLmFwcGxpZWRGaWx0ZXJzID0geyB0eXBlLCBzdGF0dXMsIGJyYW5kIH07XHJcbiAgICB0aGlzLm9mZnNldCA9IDE7XHJcbiAgICB0aGlzLmdldFZtc0xpc3QoKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZVZpZXdNb2RlKG1vZGU6ICdsaXN0JyB8ICdncmlkJykge1xyXG4gICAgdGhpcy52aWV3TW9kZSA9IG1vZGU7XHJcbiAgICB0aGlzLnVwZGF0ZVF1ZXJ5UGFyYW1zKCk7XHJcbiAgfVxyXG5cclxuICBwYWdpbmF0aW9uU2l6ZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMudG90YWxJdGVtcyA8IDEwID8gdGhpcy50b3RhbEl0ZW1zIDogdGhpcy5saW1pdDtcclxuICB9XHJcblxyXG4gIG9uUGFnZUNoYW5nZShwYWdlT2Zmc2V0OiBudW1iZXIpIHtcclxuICAgIHRoaXMub2Zmc2V0ID0gTnVtYmVyKHBhZ2VPZmZzZXQpO1xyXG4gICAgdGhpcy51cGRhdGVRdWVyeVBhcmFtcygpO1xyXG4gIH1cclxuXHJcbiAgb25QYWdlU2l6ZUNoYW5nZShwYWdlU2l6ZTogbnVtYmVyLCkge1xyXG4gICAgdGhpcy5vZmZzZXQgPSAxO1xyXG4gICAgdGhpcy5saW1pdCA9IE51bWJlcihwYWdlU2l6ZSk7XHJcbiAgICB0aGlzLnVwZGF0ZVF1ZXJ5UGFyYW1zKCk7XHJcbiAgfVxyXG5cclxuICBnZXRUb29sdGlwVGV4dChzdGF0dXM6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xyXG4gICAgICBjYXNlICdhY3RpdmUnOlxyXG4gICAgICAgIHJldHVybiAnVGhpcyB2bSBpcyBhY3RpdmUgdG8gdGVtcGxhdGVzLic7XHJcbiAgICAgIGNhc2UgJ2luYWN0aXZlJzpcclxuICAgICAgICByZXR1cm4gJ1RoaXMgdm0gaXMgbm90IGFjdGl2ZSB0byB0ZW1wbGF0ZXMuJztcclxuICAgICAgY2FzZSAnZHJhZnQnOlxyXG4gICAgICAgIHJldHVybiAnVGhpcyB2bSBpcyBpbiBkcmFmdCc7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25EdXBsaWNhdGUodm1JZDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnN0b3JlQnVpbGRlclNlcnZpY2UuZHVwbGljYXRlVm1MaWJyYXJ5KHsgdm1JZDogdm1JZCB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzPy5zdGF0dXMgPT09ICdzdWNjZXNzJykge1xyXG4gICAgICAgICAgdGhpcy50b2FzdC5nZXRTdWNjZXNzVG9hc3QocmVzLmRhdGEubWVzc2FnZSk7XHJcbiAgICAgICAgICB0aGlzLmdldFZtc0xpc3QoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KGVycj8uZXJyb3I/LmVycm9yIHx8ICdGYWlsZWQgdG8gZHVwbGljYXRlIFZNJyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJAQCB+IGR1cGxpY2F0ZVZtTGlicmFyeSBbZXJyXTpcIiwgZXJyKTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGFzeW5jIGNvbmZpcm1EZWxldGlvbigpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgIGNvbnN0IG1vZGVsUmVmID0gdGhpcy5uZ2JNb2RhbC5vcGVuKERlbGV0ZUNvbmZpcm1hdGlvbkNvbXBvbmVudCwgeyBjZW50ZXJlZDogdHJ1ZSB9KTtcclxuICAgIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLnRpdGxlID0gJ0RlbGV0ZSBWTSc7XHJcbiAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS5kZXNjcmlwdGlvbiA9ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgdm0gPyc7XHJcblxyXG4gICAgcmV0dXJuIGF3YWl0IG1vZGVsUmVmLnJlc3VsdC50aGVuPGJvb2xlYW4+KChyZXN1bHQpID0+IHJlc3VsdCA9PT0gJ29rJylcclxuICB9XHJcblxyXG4gIGFzeW5jIG9uRGVsZXRlKHZtSWQ6IHN0cmluZywgdXNhZ2VDb3VudDogbnVtYmVyID0gMCkge1xyXG4gICAgaWYgKHVzYWdlQ291bnQpIHtcclxuICAgICAgY29uc3QgbW9kZWxSZWYgPSB0aGlzLm5nYk1vZGFsLm9wZW4oQ2Fubm90UGVyZm9ybUNvbXBvbmVudCwgeyBjZW50ZXJlZDogdHJ1ZSB9KTtcclxuICAgICAgbW9kZWxSZWYuY29tcG9uZW50SW5zdGFuY2UudGl0bGUgPSBgQ2Fu4oCZdCBkZWxldGUgVk0hYDtcclxuICAgICAgbW9kZWxSZWYuY29tcG9uZW50SW5zdGFuY2UuZGVzY3JpcHRpb24gPSBgU2luY2UgdGhpcyBWTSBpcyBsaXZlIGluIFwiJHt1c2FnZUNvdW50fSB0ZW1wbGF0ZXMsXCIgZGVsZXRpbmcgaXMgbm90IGFsbG93ZWQuYDtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9O1xyXG5cclxuICAgIGlmICghYXdhaXQgdGhpcy5jb25maXJtRGVsZXRpb24oKSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuc3RvcmVCdWlsZGVyU2VydmljZS5kZWxldGVWbUxpYnJhcnkoeyB2bUlkOiB2bUlkIH0pLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXM/LnN0YXR1cyA9PT0gJ3N1Y2Nlc3MnKSB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0LmdldFN1Y2Nlc3NUb2FzdChyZXMubWVzc2FnZSk7XHJcbiAgICAgICAgICB0aGlzLmdldFZtc0xpc3QoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KGVycj8uZXJyb3I/LmVycm9yIHx8ICdGYWlsZWQgdG8gZGVsZXRlIFZNJyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJAQCB+IGRlbGV0ZVZtTGlicmFyeSBbZXJyXTpcIiwgZXJyKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgb25JbWdFcnJvcihldmVudDogRXZlbnQpIHtcclxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW1hZ2VFbGVtZW50O1xyXG4gICAgdGFyZ2V0LnNyYyA9ICdhc3NldHMvdGFuZ28vSW1hZ2VzL3ZtLXBsYWNlaG9sZGVyLnBuZyc7XHJcbiAgfVxyXG5cclxuICBvbkVkaXQodm1JZDogc3RyaW5nLCB1c2FnZUNvdW50OiBudW1iZXIgPSAwKSB7XHJcbiAgICBpZiAodXNhZ2VDb3VudCkge1xyXG4gICAgICBjb25zdCBtb2RlbFJlZiA9IHRoaXMubmdiTW9kYWwub3BlbihDYW5ub3RQZXJmb3JtQ29tcG9uZW50LCB7IGNlbnRlcmVkOiB0cnVlIH0pO1xyXG4gICAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS50aXRsZSA9IGBDYW7igJl0IGVkaXQgVk0hYDtcclxuICAgICAgbW9kZWxSZWYuY29tcG9uZW50SW5zdGFuY2UuZGVzY3JpcHRpb24gPSBgU2luY2UgdGhpcyBWTSBpcyBsaXZlIGluIFwiJHt1c2FnZUNvdW50fSB0ZW1wbGF0ZXMsXCIgZWRpdGluZyBpcyBub3QgYWxsb3dlZC5gO1xyXG4gICAgICByZXR1cm5cclxuICAgIH07XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9tYW5hZ2UvcGxhbm9ncmFtL2NyZWF0ZS1saWJyYXJ5LXZtJ10sIHsgcXVlcnlQYXJhbXM6IHsgdm1JZDogdm1JZCwgaXNFZGl0OiB0cnVlIH0gfSk7XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrQ2FyZChldmVudDogYW55LCB2bTogVm1MaWJyYXJ5TGlzdCkge1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbWFuYWdlL3BsYW5vZ3JhbS9jcmVhdGUtbGlicmFyeS12bSddLCB7IHF1ZXJ5UGFyYW1zOiB7IHZtSWQ6IHZtLmlkIH0gfSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVRdWVyeVBhcmFtcygpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7XHJcbiAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUsXHJcbiAgICAgIHF1ZXJ5UGFyYW1zOiB7IHZpZXc6IHRoaXMudmlld01vZGUsIHNlYXJjaDogdGhpcy5zZWFyY2hUZXJtLCBsaW1pdDogdGhpcy5saW1pdCwgb2Zmc2V0OiB0aGlzLm9mZnNldCB9LFxyXG4gICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxyXG4gICAgICByZXBsYWNlVXJsOiB0cnVlLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gICAgdGhpcy5saWJTdWI/LnVuc3Vic2NyaWJlKClcclxuICB9XHJcbn1cclxuIiwiPHNlY3Rpb24gaWQ9XCJ2bS1saWJyYXJ5XCIgY2xhc3M9XCJjb250ZW50LXdyYXBwZXJcIj5cclxuICA8IS0tIFZNIFZpZXcgaGVhZGVyIC0tPlxyXG4gIDxkaXZcclxuICAgICpuZ0lmPVwidm1MaXN0Lmxlbmd0aCAhPT0gMCB8fCBzZWFyY2hUZXJtIHx8IGlzRmlsdGVyQXBwbGllZFwiXHJcbiAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItNVwiXHJcbiAgPlxyXG4gICAgPGRpdj5cclxuICAgICAgPGg0PlZNIExpYnJhcnkgTGlzdHM8L2g0PlxyXG4gICAgICA8c3Bhbj57eyB0b3RhbEl0ZW1zIH19IC0gVG90YWwgVk08L3NwYW4+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICA8ZGl2IHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlXCI+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaFRlcm1cIlxyXG4gICAgICAgICAgKGNoYW5nZSk9XCJvblNlYXJjaCgpXCJcclxuICAgICAgICAgIHN0eWxlPVwicGFkZGluZy1sZWZ0OiAzcmVtOyBwYWRkaW5nLXJpZ2h0OiAzcmVtXCJcclxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcclxuICAgICAgICAgIG5hbWU9XCJzZWFyY2hcIlxyXG4gICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VhcmNoXCJcclxuICAgICAgICAvPlxyXG5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInNlYXJjaC1pY29uXCI+XHJcbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMTggMThcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICA8Y2lyY2xlIGN4PVwiOFwiIGN5PVwiOFwiIHI9XCI2XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIC8+XHJcbiAgICAgICAgICAgIDxsaW5lIHgxPVwiMTNcIiB5MT1cIjEzXCIgeDI9XCIxNlwiIHkyPVwiMTZcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJzZWFyY2hUZXJtXCIgdHlwZT1cImJ1dHRvblwiIGFyaWEtbGFiZWw9XCJDbGVhclwiIChjbGljayk9XCJzZWFyY2hUZXJtID0gJyc7IG9uU2VhcmNoKClcIiBjbGFzcz1cImNsZWFyLXNlYXJjaFwiPlxyXG4gICAgICAgICAgPHN2ZyB3aWR0aD1cIjY0cHhcIiBoZWlnaHQ9XCI2NHB4XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICA8ZyBpZD1cIlNWR1JlcG9fYmdDYXJyaWVyXCIgc3Ryb2tlLXdpZHRoPVwiMFwiPjwvZz5cclxuICAgICAgICAgICAgPGcgaWQ9XCJTVkdSZXBvX3RyYWNlckNhcnJpZXJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L2c+XHJcbiAgICAgICAgICAgIDxnIGlkPVwiU1ZHUmVwb19pY29uQ2FycmllclwiPlxyXG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOSA5TDE1IDE1XCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNSA5TDkgMTVcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiPjwvcGF0aD5cclxuICAgICAgICAgICAgICA8Y2lyY2xlXHJcbiAgICAgICAgICAgICAgICBjeD1cIjEyXCJcclxuICAgICAgICAgICAgICAgIGN5PVwiMTJcIlxyXG4gICAgICAgICAgICAgICAgcj1cIjlcIlxyXG4gICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiXHJcbiAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgID48L2NpcmNsZT5cclxuICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnL21hbmFnZS9wbGFub2dyYW0vY3JlYXRlLWxpYnJhcnktdm0nXVwiXHJcbiAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cInsgaXNFZGl0OiB0cnVlIH1cIlxyXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGQtaW5saW5lLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIG1lLTJcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICBkPVwiTTEwLjAwMDEgNC4xNjY2M1YxNS44MzMzTTQuMTY2NzUgOS45OTk5NkgxNS44MzM0XCJcclxuICAgICAgICAgICAgc3Ryb2tlPVwid2hpdGVcIlxyXG4gICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjY3XCJcclxuICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0yIHRleHQtd2hpdGVcIj5DcmVhdGUgPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgIDwhLS0gPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9wZW5CdWxrVXBsb2FkTW9kYWwoKVwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIHRleHQtbm93cmFwXCI+XHJcbiAgICAgICAgPHN2ZyBjbGFzcz1cIm1lLTJcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICBkPVwiTTE3LjUgMTIuNVYxNS44MzMzQzE3LjUgMTYuMjc1NCAxNy4zMjQ0IDE2LjY5OTMgMTcuMDExOCAxNy4wMTE4QzE2LjY5OTMgMTcuMzI0NCAxNi4yNzU0IDE3LjUgMTUuODMzMyAxNy41SDQuMTY2NjdDMy43MjQ2NCAxNy41IDMuMzAwNzIgMTcuMzI0NCAyLjk4ODE2IDE3LjAxMThDMi42NzU1OSAxNi42OTkzIDIuNSAxNi4yNzU0IDIuNSAxNS44MzMzVjEyLjVNMTQuMTY2NyA2LjY2NjY3TDEwIDIuNU0xMCAyLjVMNS44MzMzMyA2LjY2NjY3TTEwIDIuNVYxMi41XCJcclxuICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcclxuICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS42N1wiXHJcbiAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIEJ1bGsgVXBsb2FkXHJcbiAgICAgIDwvYnV0dG9uPiAtLT5cclxuXHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIFtkaXNhYmxlZF09XCJ2bUxpc3QubGVuZ3RoIDw9IDBcIiAoY2xpY2spPVwiZXhwb3J0Vk1MaXN0KClcIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSB0ZXh0LW5vd3JhcFwiPlxyXG4gICAgICAgIDxzdmcgY2xhc3M9XCJtZS0yXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgZD1cIk0xNy41IDEyLjVWMTUuODMzM0MxNy41IDE2LjI3NTQgMTcuMzI0NCAxNi42OTkzIDE3LjAxMTggMTcuMDExOEMxNi42OTkzIDE3LjMyNDQgMTYuMjc1NCAxNy41IDE1LjgzMzMgMTcuNUg0LjE2NjY3QzMuNzI0NjQgMTcuNSAzLjMwMDcyIDE3LjMyNDQgMi45ODgxNiAxNy4wMTE4QzIuNjc1NTkgMTYuNjk5MyAyLjUgMTYuMjc1NCAyLjUgMTUuODMzM1YxMi41TTE0LjE2NjcgNi42NjY2N0wxMCAyLjVNMTAgMi41TDUuODMzMzMgNi42NjY2N00xMCAyLjVWMTIuNVwiXHJcbiAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXHJcbiAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNjdcIlxyXG4gICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgICBFeHBvcnRcclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8bGliLWZpbHRlcnMgW2RhdGFPYmplY3RdPVwiZmlsdGVyT2JqZWN0XCIgKGFwcGxpZWRGaWx0ZXJzKT1cImFwcGx5RmlsdGVycygkZXZlbnQpXCI+PC9saWItZmlsdGVycz5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRvZ2dsZS1idXR0b24gbWUtMlwiIFtuZ0NsYXNzXT1cInsgc2VsZWN0ZWQ6IHZpZXdNb2RlID09PSAnbGlzdCcgfVwiIChjbGljayk9XCJ0b2dnbGVWaWV3TW9kZSgnbGlzdCcpXCI+XHJcbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTlcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMTkgMThcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICBkPVwiTTYuMjQwNzggNC41NDYzOUgxNS44OTA2TTYuMjQwNzggOS4wMDAxN0gxNS44OTA2TTYuMjQwNzggMTMuNDUzOUgxNS44OTA2TTIuNTI5MyA0LjU0NjM5SDIuNTM2NzJNMi41MjkzIDkuMDAwMTdIMi41MzY3Mk0yLjUyOTMgMTMuNDUzOUgyLjUzNjcyXCJcclxuICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwidmlld01vZGUgPT09ICdsaXN0JyA/ICcjMDA5QkYzJyA6ICcjMzQ0MDU0J1wiXHJcbiAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS40ODc1NlwiXHJcbiAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0b2dnbGUtYnV0dG9uXCIgW25nQ2xhc3NdPVwieyBzZWxlY3RlZDogdmlld01vZGUgPT09ICdncmlkJyB9XCIgKGNsaWNrKT1cInRvZ2dsZVZpZXdNb2RlKCdncmlkJylcIj5cclxuICAgICAgICAgIDxzdmcgd2lkdGg9XCIxOVwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAxOSAxOFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgIGQ9XCJNNy45MTg4NiAyLjMxOTM0SDIuNzIyNzhWNy41MTU0MUg3LjkxODg2VjIuMzE5MzRaXCJcclxuICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwidmlld01vZGUgPT09ICdncmlkJyA/ICcjMDA5QkYzJyA6ICcjMzQ0MDU0J1wiXHJcbiAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS40ODc1NlwiXHJcbiAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgIGQ9XCJNMTYuMDg0MSAyLjMxOTM0SDEwLjg4OFY3LjUxNTQxSDE2LjA4NDFWMi4zMTkzNFpcIlxyXG4gICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJ2aWV3TW9kZSA9PT0gJ2dyaWQnID8gJyMwMDlCRjMnIDogJyMzNDQwNTQnXCJcclxuICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjQ4NzU2XCJcclxuICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgZD1cIk0xNi4wODQxIDEwLjQ4NDZIMTAuODg4VjE1LjY4MDdIMTYuMDg0MVYxMC40ODQ2WlwiXHJcbiAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInZpZXdNb2RlID09PSAnZ3JpZCcgPyAnIzAwOUJGMycgOiAnIzM0NDA1NCdcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNDg3NTZcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICBkPVwiTTcuOTE4ODYgMTAuNDg0NkgyLjcyMjc4VjE1LjY4MDdINy45MTg4NlYxMC40ODQ2WlwiXHJcbiAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInZpZXdNb2RlID09PSAnZ3JpZCcgPyAnIzAwOUJGMycgOiAnIzM0NDA1NCdcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNDg3NTZcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8ZGl2ICpuZ0lmPVwiaXNQYWdlTG9hZGluZzsgZWxzZSBjb250ZW50UGFydFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInJvdyBsb2FkZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPG5nLXRlbXBsYXRlICNjb250ZW50UGFydD5cclxuICAgIDxkaXYgKm5nSWY9XCJ2bUxpc3QubGVuZ3RoID09PSAwXCI+XHJcbiAgICAgIEBpZihzZWFyY2hUZXJtIHx8IGlzRmlsdGVyQXBwbGllZCl7XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyIG15LTZcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctc3JjXCIgc3JjPVwiLi9hc3NldHMvdGFuZ28vSWNvbnMvTm9kYXRhMS5zdmdcIiBhbHQ9XCJcIiAvPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibm9kYXRhbWFpbnRleHQgbXQtM1wiPk5vIGRhdGEgZm91bmQ8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vZGF0YXN1YnRleHRcIj5UaGVyZSBpcyBubyByZXN1bHQgZm9yIG1hdGNoaW5nIGZpbHRlciBhbmQgc2VhcmNoPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIH1AZWxzZSB7XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZy0wIHB5LTEyXCI+XHJcbiAgICAgICAgPCEtLSBTaW5nbGUgVk0gQ3JlYXRpb24gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBwZS1tZC0zXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBwLTEwXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBtYi04XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTVcIj5cclxuICAgICAgICAgICAgICAgIDxzdmdcclxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogODBweDsgaGVpZ2h0OiA4MHB4XCJcclxuICAgICAgICAgICAgICAgICAgd2lkdGg9XCI1NlwiXHJcbiAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjU2XCJcclxuICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCA1NiA1NlwiXHJcbiAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCI0XCIgeT1cIjRcIiB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIiByeD1cIjI0XCIgZmlsbD1cIiNEQUYxRkZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCIyNFwiIHN0cm9rZT1cIiNFQUY4RkZcIiBzdHJva2Utd2lkdGg9XCI4XCIgLz5cclxuICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICBkPVwiTTI4IDI0VjMyTTI0IDI4SDMyTTM4IDI4QzM4IDMzLjUyMjggMzMuNTIyOCAzOCAyOCAzOEMyMi40NzcyIDM4IDE4IDMzLjUyMjggMTggMjhDMTggMjIuNDc3MiAyMi40NzcyIDE4IDI4IDE4QzMzLjUyMjggMTggMzggMjIuNDc3MiAzOCAyOFpcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMEEzRkZcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgbWItM1wiPkNyZWF0ZSBhIFZNIG1hbnVhbGx5PC9oMz5cclxuICAgICAgICAgICAgICA8cCBjbGFzcz1cImNhcmQtdGFnbGluZSBtYi0wXCI+WW91IGNhbiBjcmVhdGUgYSBzaW5nbGUgVk0gbWFudWFsbHkgYnkgc3RlcCBieSBzdGVwPC9wPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cIlsnL21hbmFnZS9wbGFub2dyYW0vY3JlYXRlLWxpYnJhcnktdm0nXVwiXHJcbiAgICAgICAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cInsgaXNFZGl0OiB0cnVlIH1cIlxyXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIGQtaW5saW5lLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJtZS0yXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgZD1cIk0xMiA1VjE5TTUgMTJIMTlcIlxyXG4gICAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgQ3JlYXRlIE1hbnVhbGx5XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwhLS0gQnVsayBWTSBDcmVhdGlvbiAtLT5cclxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBwcy1tZC0zIGJvcmRlci1zdGFydFwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIgcC0xMFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgbWItOFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi01XCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnXHJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDgwcHg7IGhlaWdodDogODBweFwiXHJcbiAgICAgICAgICAgICAgICAgIHdpZHRoPVwiNTZcIlxyXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ9XCI1NlwiXHJcbiAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgOTUgOTRcIlxyXG4gICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiNy41XCIgeT1cIjdcIiB3aWR0aD1cIjgwXCIgaGVpZ2h0PVwiODBcIiByeD1cIjQwXCIgZmlsbD1cIiNEQUYxRkZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiNy41XCIgeT1cIjdcIiB3aWR0aD1cIjgwXCIgaGVpZ2h0PVwiODBcIiByeD1cIjQwXCIgc3Ryb2tlPVwiI0VBRjhGRlwiIHN0cm9rZS13aWR0aD1cIjEzLjMzMzNcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNNjIuNSA1MlY1OC42NjY3QzYyLjUgNTkuNTUwNyA2Mi4xNDg4IDYwLjM5ODYgNjEuNTIzNyA2MS4wMjM3QzYwLjg5ODYgNjEuNjQ4OCA2MC4wNTA3IDYyIDU5LjE2NjcgNjJIMzUuODMzM0MzNC45NDkzIDYyIDM0LjEwMTQgNjEuNjQ4OCAzMy40NzYzIDYxLjAyMzdDMzIuODUxMiA2MC4zOTg2IDMyLjUgNTkuNTUwNyAzMi41IDU4LjY2NjdWNTJNNTUuODMzMyA0MC4zMzMzTDQ3LjUgMzJNNDcuNSAzMkwzOS4xNjY3IDQwLjMzMzNNNDcuNSAzMlY1MlwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAwQTNGRlwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMy4zMzMzM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBtYi0zXCI+Q3JlYXRlIFZNIHVzaW5nIGV4Y2VsIHRlbXBsYXRlPC9oMz5cclxuICAgICAgICAgICAgICA8cCBjbGFzcz1cImNhcmQtdGFnbGluZSBtYi0wXCI+WW91IGNhbiBhZGQgYSBzaW5nbGUgb3IgbXVsdGlwbGUgVk0gdXNpbmcgdGhlIHRlbXBsYXRlIGJlbG93PC9wPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBnYXAtMiBtYi02XCIgc3R5bGU9XCJ3aWR0aDogZml0LWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICA8cCBjbGFzcz1cImNhcmQtZGVzY3JpcHRpb24gbWItMFwiPlxyXG4gICAgICAgICAgICAgICAgU3RlcDEgLSA8YSBjbGFzcz1cImRvd25sb2FkLWxpbmsgZnctbWVkaXVtXCIgKGNsaWNrKT1cImRvd25sb2FkVk1UZW1wbGF0ZSgpXCI+RG93bmxvYWQgdGhlIHRlbXBsYXRlIGhlcmU8L2E+XHJcbiAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwiY2FyZC1kZXNjcmlwdGlvbiBtYi0wXCI+U3RlcDIgLSBBZGQgeW91ciBkYXRhIHRvIHRoZSBUZW1wbGF0ZSBGaWxlPC9wPlxyXG4gICAgICAgICAgICAgIDxwIGNsYXNzPVwiY2FyZC1kZXNjcmlwdGlvbiBtYi0wXCI+U3RlcDMgLSBVcGxvYWQgaXQgYmVsb3cgZm9yIHByb2Nlc3Npbmc8L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGQtaW5saW5lLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCIgKGNsaWNrKT1cIm9wZW5CdWxrVXBsb2FkTW9kYWwoKVwiPlxyXG4gICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJtZS0yXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgZD1cIk0xNy41IDEyLjVWMTUuODMzM0MxNy41IDE2LjI3NTQgMTcuMzI0NCAxNi42OTkzIDE3LjAxMTggMTcuMDExOEMxNi42OTkzIDE3LjMyNDQgMTYuMjc1NCAxNy41IDE1LjgzMzMgMTcuNUg0LjE2NjY3QzMuNzI0NjQgMTcuNSAzLjMwMDcyIDE3LjMyNDQgMi45ODgxNiAxNy4wMTE4QzIuNjc1NTkgMTYuNjk5MyAyLjUgMTYuMjc1NCAyLjUgMTUuODMzM1YxMi41TTE0LjE2NjcgNi42NjY2N0wxMCAyLjVNMTAgMi41TDUuODMzMzMgNi42NjY2N00xMCAyLjVWMTIuNVwiXHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNjdcIlxyXG4gICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICBVcGxvYWRcclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICB9XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwidm1MaXN0Lmxlbmd0aCAhPSAwXCI+XHJcbiAgICAgIDwhLS0gVk0gbGlzdCB2aWV3IC0tPlxyXG4gICAgICA8c2VjdGlvbiBpZD1cImxpc3Qtdmlld1wiICpuZ0lmPVwidmlld01vZGUgPT09ICdsaXN0JzsgZWxzZSBncmlkVmlld1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ3LTEwMCB0YWJsZSBib3R0b20tYm9yZGVyIHRleHQtbm93cmFwXCI+XHJcbiAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICA8dGg+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJvblNvcnRUYWJsZSgndm1OYW1lJylcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgVk0gbmFtZVxyXG4gICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhIG1zLTEgbXQtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGNvbG9yOiBzb3J0ZWRDb2x1bW4gPT09ICd2bU5hbWUnID8gJyMwMDlCRjMnIDogJycgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0T3JkZXIgPT09IDEgJiYgc29ydGVkQ29sdW1uID09PSAndm1OYW1lJyA/ICdmYS1hcnJvdy11cCcgOiAnZmEtYXJyb3ctZG93bidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9pPlxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgPHRoPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwib25Tb3J0VGFibGUoJ2JyYW5kJylcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgQnJhbmRcclxuICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYSBtcy0xIG10LTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBjb2xvcjogc29ydGVkQ29sdW1uID09PSAnYnJhbmQnID8gJyMwMDlCRjMnIDogJycgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0T3JkZXIgPT09IDEgJiYgc29ydGVkQ29sdW1uID09PSAnYnJhbmQnID8gJ2ZhLWFycm93LXVwJyA6ICdmYS1hcnJvdy1kb3duJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgID48L2k+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwib25Tb3J0VGFibGUoJ3ZtVHlwZScpXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFR5cGVcclxuICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYSBtcy0xIG10LTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBjb2xvcjogc29ydGVkQ29sdW1uID09PSAndm1UeXBlJyA/ICcjMDA5QkYzJyA6ICcnIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydE9yZGVyID09PSAxICYmIHNvcnRlZENvbHVtbiA9PT0gJ3ZtVHlwZScgPyAnZmEtYXJyb3ctdXAnIDogJ2ZhLWFycm93LWRvd24nXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvaT5cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJvblNvcnRUYWJsZSgndm1XaWR0aCcpXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFdpZHRoXHJcbiAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmEgbXMtMSBtdC0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgY29sb3I6IHNvcnRlZENvbHVtbiA9PT0gJ3ZtV2lkdGgnID8gJyMwMDlCRjMnIDogJycgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0T3JkZXIgPT09IDEgJiYgc29ydGVkQ29sdW1uID09PSAndm1XaWR0aCcgPyAnZmEtYXJyb3ctdXAnIDogJ2ZhLWFycm93LWRvd24nXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvaT5cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJvblNvcnRUYWJsZSgndm1IZWlnaHQnKVwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICBIZWlnaHRcclxuICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYSBtcy0xIG10LTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBjb2xvcjogc29ydGVkQ29sdW1uID09PSAndm1IZWlnaHQnID8gJyMwMDlCRjMnIDogJycgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0T3JkZXIgPT09IDEgJiYgc29ydGVkQ29sdW1uID09PSAndm1IZWlnaHQnID8gJ2ZhLWFycm93LXVwJyA6ICdmYS1hcnJvdy1kb3duJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgID48L2k+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDx0aD5cclxuICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJvblNvcnRUYWJsZSgndm1QbGFjZW1lbnQnKVwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgUGxhY2VtZW50c1xyXG4gICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZhIG1zLTEgbXQtMVwiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRPcmRlciA9PT0gMSAmJiBzb3J0ZWRDb2x1bW4gPT09ICd2bVBsYWNlbWVudCcgPyAnZmEtYXJyb3ctdXAnIDogJ2ZhLWFycm93LWRvd24nXCJcclxuICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L3RoPiAtLT5cclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJvblNvcnRUYWJsZSgndGVtcGxhdGVDb3VudCcpXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIE5vIG9mIGFzc2lnbmVkXHJcbiAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmEgbXMtMSBtdC0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgY29sb3I6IHNvcnRlZENvbHVtbiA9PT0gJ3RlbXBsYXRlQ291bnQnID8gJyMwMDlCRjMnIDogJycgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0T3JkZXIgPT09IDEgJiYgc29ydGVkQ29sdW1uID09PSAndGVtcGxhdGVDb3VudCcgPyAnZmEtYXJyb3ctdXAnIDogJ2ZhLWFycm93LWRvd24nXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvaT5cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtY2VudGVyXCI+U3RhdHVzPC90aD5cclxuICAgICAgICAgICAgICAgIDx0aD48L3RoPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHZtIG9mIHZtTGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwibWF4LXdpZHRoOiAzMDBweFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aHVtYm5haWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJ2bS5pbWdVcmxcIiBhbHQ9XCJWbSBJbWFnZVwiIChlcnJvcik9XCJvbkltZ0Vycm9yKCRldmVudClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbJy9tYW5hZ2UvcGxhbm9ncmFtL2NyZWF0ZS1saWJyYXJ5LXZtJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cInsgdm1JZDogdm0uaWQgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtZGVjb3JhdGlvbi11bmRlcmxpbmUgZWxsaXBzaXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwidm0ubmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgdm0ubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkPnt7IHZtPy5icmFuZCA/PyBcIi1cIiB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQ+e3sgdm0/LnR5cGUgPz8gXCItXCIgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1jZW50ZXJcIj57eyB2bS53aWR0aC52YWx1ZSB9fXt7IHZtLndpZHRoLnVuaXQgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1jZW50ZXJcIj57eyB2bS5oZWlnaHQudmFsdWUgfX17eyB2bS5oZWlnaHQudW5pdCB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDx0ZD57eyB2bS5wbGFjZW1lbnQgfX08L3RkPiAtLT5cclxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtY2VudGVyXCI+e3sgdm0ubm9PZkFzc2lnbmVkIH19PC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYWRnZVwiIFtuZ0NsYXNzXT1cInZtLnN0YXR1c1wiIHBsYWNlbWVudD1cInN0YXJ0XCIgW25nYlRvb2x0aXBdPVwiZ2V0VG9vbHRpcFRleHQodm0uc3RhdHVzKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IHZtLnN0YXR1cyB8IHRpdGxlY2FzZSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93blwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWxpbmsgcC0wXCIgdHlwZT1cImJ1dHRvblwiIGRhdGEtYnMtdG9nZ2xlPVwiZHJvcGRvd25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ2ZXJ0aWNhbERvdHNcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJkcm9wZG93bi1tZW51XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbSBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvbkVkaXQodm0uaWQsIHZtLm5vT2ZBc3NpZ25lZClcIj4gRWRpdCA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxpPjxhIGNsYXNzPVwiZHJvcGRvd24taXRlbSBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvbkR1cGxpY2F0ZSh2bS5pZClcIj5EdXBsaWNhdGU8L2E+PC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxsaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGN1cnNvci1wb2ludGVyIHRleHQtZGFuZ2VyXCIgKGNsaWNrKT1cIm9uRGVsZXRlKHZtLmlkLCB2bS5ub09mQXNzaWduZWQpXCI+RGVsZXRlPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvc2VjdGlvbj5cclxuXHJcbiAgICAgIDwhLS0gVk0gZ3JpZCB2aXcgLS0+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjZ3JpZFZpZXc+XHJcbiAgICAgICAgPHNlY3Rpb24gaWQ9XCJncmlkLXZpZXdcIiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZ3gtNiBneS00IG0tMFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIiAqbmdGb3I9XCJsZXQgdm0gb2Ygdm1MaXN0XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIiAoY2xpY2spPVwib25DbGlja0NhcmQoJGV2ZW50LCB2bSlcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWltZ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwidm0uaW1nVXJsXCIgYWx0PVwiVm0gSW1hZ2VcIiAoZXJyb3IpPVwib25JbWdFcnJvcigkZXZlbnQpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYWN0aW9uIGRyb3Bkb3duXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLWxpZ2h0XCIgc3R5bGU9XCJwYWRkaW5nOiAxMnB4IDIxcHggIWltcG9ydGFudFwiIHR5cGU9XCJidXR0b25cIiBkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidmVydGljYWxEb3RzXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiZHJvcGRvd24tbWVudVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRWRpdCh2bS5pZCwgdm0ubm9PZkFzc2lnbmVkKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxsaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cIm9uRHVwbGljYXRlKHZtLmlkKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgRHVwbGljYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGN1cnNvci1wb2ludGVyIHRleHQtZGFuZ2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25EZWxldGUodm0uaWQsIHZtLm5vT2ZBc3NpZ25lZCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBEZWxldGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiZWxsaXBzaXNcIiBbbmdiVG9vbHRpcF09XCJ2bS5uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgdm0ubmFtZSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFkZ2VcIiBbbmdDbGFzc109XCJ2bS5zdGF0dXNcIiBwbGFjZW1lbnQ9XCJzdGFydFwiIFtuZ2JUb29sdGlwXT1cImdldFRvb2x0aXBUZXh0KHZtLnN0YXR1cylcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyB2bS5zdGF0dXMgfCB0aXRsZWNhc2UgfX1cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRhZ2xpbmVcIj5cclxuICAgICAgICAgICAgICAgICAge3sgdm0ud2lkdGgudmFsdWUgfX17eyB2bS53aWR0aC51bml0IH19IHgge3sgdm0uaGVpZ2h0LnZhbHVlIH19e3sgdm0uaGVpZ2h0LnVuaXQgfX1cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ2bT8udHlwZVwiPiYjODIyNjs8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHZtLnR5cGUgfX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvc2VjdGlvbj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgIDwhLS0gUGFnaW5hdGlvbiAtLT5cclxuICAgICAgPGxpYi1wYWdpbmF0aW9uXHJcbiAgICAgICAgW2l0ZW1zUGVyUGFnZV09XCJsaW1pdFwiXHJcbiAgICAgICAgW2N1cnJlbnRQYWdlXT1cIm9mZnNldFwiXHJcbiAgICAgICAgW3RvdGFsSXRlbXNdPVwidG90YWxJdGVtc1wiXHJcbiAgICAgICAgW3BhZ2luYXRpb25TaXplc109XCJwYWdpbmF0aW9uU2l6ZXNcIlxyXG4gICAgICAgIFtwYWdlU2l6ZV09XCJwYWdpbmF0aW9uU2l6ZSgpXCJcclxuICAgICAgICAocGFnZUNoYW5nZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgKHBhZ2VTaXplQ2hhbmdlKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgID5cclxuICAgICAgPC9saWItcGFnaW5hdGlvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvc2VjdGlvbj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjdmVydGljYWxEb3RzPlxyXG4gIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiNFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCA0IDE4XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgIDxwYXRoXHJcbiAgICAgIGQ9XCJNMSA5QzEgOS41NTIyOCAxLjQ0NzcxIDEwIDIgMTBDMi41NTIyOCAxMCAzIDkuNTUyMjggMyA5QzMgOC40NDc3MiAyLjU1MjI4IDggMiA4QzEuNDQ3NzEgOCAxIDguNDQ3NzIgMSA5WlwiXHJcbiAgICAgIHN0cm9rZT1cIiMxMDE4MjhcIlxyXG4gICAgICBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgIC8+XHJcbiAgICA8cGF0aFxyXG4gICAgICBkPVwiTTAuOTk5OTk5IDE2QzAuOTk5OTk5IDE2LjU1MjMgMS40NDc3MSAxNyAyIDE3QzIuNTUyMjggMTcgMyAxNi41NTIzIDMgMTZDMyAxNS40NDc3IDIuNTUyMjggMTUgMiAxNUMxLjQ0NzcxIDE1IDAuOTk5OTk5IDE1LjQ0NzcgMC45OTk5OTkgMTZaXCJcclxuICAgICAgc3Ryb2tlPVwiIzEwMTgyOFwiXHJcbiAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxyXG4gICAgLz5cclxuICAgIDxwYXRoXHJcbiAgICAgIGQ9XCJNMSAyQzEgMi41NTIyOCAxLjQ0NzcyIDMgMiAzQzIuNTUyMjggMyAzIDIuNTUyMjggMyAyQzMgMS40NDc3MiAyLjU1MjI4IDEgMiAxQzEuNDQ3NzIgMSAxIDEuNDQ3NzIgMSAyWlwiXHJcbiAgICAgIHN0cm9rZT1cIiMxMDE4MjhcIlxyXG4gICAgICBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgIC8+XHJcbiAgPC9zdmc+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
399
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm0tbGlicmFyeS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9wbGFuby1saWJyYXJ5L3ZtLWxpYnJhcnkvdm0tbGlicmFyeS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1zdG9yZS1idWlsZGVyL3NyYy9saWIvY29tcG9uZW50cy9wbGFuby1saWJyYXJ5L3ZtLWxpYnJhcnkvdm0tbGlicmFyeS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUU3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQWdCLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUk1RyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUd6RixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxnRUFBZ0UsQ0FBQztBQUU3RyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUM5RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7Ozs7OztBQVE3RixNQUFNLE9BQU8sa0JBQWtCO0lBOENuQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBcERWLFFBQVEsQ0FBUztJQUVqQixNQUFNLEdBQW9CLEVBQUUsQ0FBQztJQUU3QixRQUFRLEdBQTZCLE1BQU0sQ0FBQztJQUU1QyxZQUFZLEdBQVcsRUFBRSxDQUFDO0lBQzFCLFNBQVMsR0FBVyxDQUFDLENBQUM7SUFFdEIsVUFBVSxHQUFXLEVBQUUsQ0FBQztJQUV4QixLQUFLLEdBQVcsRUFBRSxD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dCwgT25Jbml0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpcnN0VmFsdWVGcm9tLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLXNoYXJlZCc7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSwgUGFnZUluZm9TZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLWdsb2JhbCc7XHJcbmltcG9ydCB7IFZNQnVsa1VwbG9hZENvbXBvbmVudCB9IGZyb20gJy4vcG9wdXBzL3ZtLWJ1bGstdXBsb2FkL3ZtLWJ1bGstdXBsb2FkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFN0b3JlQnVpbGRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zdG9yZS1idWlsZGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBWbUxpYnJhcnlMaXN0LCBWTVR5cGVEZXRhaWxzIH0gZnJvbSAnLi4vLi4vLi4vaW50ZXJmYWNlcy92bS1saWJyYXJ5LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IERlbGV0ZUNvbmZpcm1hdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3BvcHVwcy9kZWxldGUtY29uZmlybWF0aW9uL2RlbGV0ZS1jb25maXJtYXRpb24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgUGxhbm9EYXRhU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BsYW5vLWRhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7IENhbm5vdFBlcmZvcm1Db21wb25lbnQgfSBmcm9tICcuLi8uLi9wb3B1cHMvY2Fubm90LXBlcmZvcm0vY2Fubm90LXBlcmZvcm0uY29tcG9uZW50JztcclxuaW1wb3J0IHsgZ2V0UXVlcnlQYXJhbU51bWJlciwgZ2V0UXVlcnlQYXJhbVN0cmluZyB9IGZyb20gJy4uLy4uLy4uL2Z1bmN0aW9ucy9wbGFuby5mdW5jdGlvbic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi12bS1saWJyYXJ5JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdm0tbGlicmFyeS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3ZtLWxpYnJhcnkuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgVm1MaWJyYXJ5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIGNsaWVudElkOiBzdHJpbmc7XHJcblxyXG4gIHZtTGlzdDogVm1MaWJyYXJ5TGlzdFtdID0gW107XHJcblxyXG4gIHZpZXdNb2RlOiAnbGlzdCcgfCAnZ3JpZCcgfCBzdHJpbmcgPSAnbGlzdCc7XHJcblxyXG4gIHNvcnRlZENvbHVtbjogc3RyaW5nID0gJyc7XHJcbiAgc29ydE9yZGVyOiBudW1iZXIgPSAxO1xyXG5cclxuICBzZWFyY2hUZXJtOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgbGltaXQ6IG51bWJlciA9IDEwO1xyXG4gIG9mZnNldDogbnVtYmVyID0gMTtcclxuICB0b3RhbEl0ZW1zOiBudW1iZXIgPSAwO1xyXG4gIHBhZ2luYXRpb25TaXplcyA9IFsxMCwgMjAsIDMwXTtcclxuXHJcbiAgZmlsdGVyT2JqZWN0ID0gW1xyXG4gICAge1xyXG4gICAgICBEZXNjcmlwdGlvbjogJ1N0YXR1cycsXHJcbiAgICAgIElzc3VlczogW1xyXG4gICAgICAgIHsgdGV4dDogXCJBY3RpdmVcIiwgaWQ6ICdhY3RpdmUnIH0sXHJcbiAgICAgICAgeyB0ZXh0OiBcIkluYWN0aXZlXCIsIGlkOiAnaW5hY3RpdmUnIH0sXHJcbiAgICAgICAgeyB0ZXh0OiBcIkRyYWZ0XCIsIGlkOiAnZHJhZnQnIH0sXHJcbiAgICAgIF0sXHJcbiAgICB9XHJcbiAgXVxyXG5cclxuICBhcHBsaWVkRmlsdGVycyA9IHtcclxuICAgIHN0YXR1czogW10sXHJcbiAgICBicmFuZDogW10sXHJcbiAgICB0eXBlOiBbXSxcclxuICAgIC8vIGNhdGVnb3J5OiBbXSxcclxuICB9O1xyXG5cclxuICBpc0ZpbHRlckFwcGxpZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgaXNQYWdlTG9hZGluZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgaXNFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBpbWdDRE46IHN0cmluZztcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHJpdmF0ZSBsaWJTdWI/OiBTdWJzY3JpcHRpb247XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBuZ2JNb2RhbDogTmdiTW9kYWwsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHN0b3JlQnVpbGRlclNlcnZpY2U6IFN0b3JlQnVpbGRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHBsYW5vRGF0YVNlcnZpY2U6IFBsYW5vRGF0YVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGdzOiBHbG9iYWxTdGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRvYXN0OiBUb2FzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHBhZ2VJbmZvOiBQYWdlSW5mb1NlcnZpY2UsXHJcbiAgKSB7IH1cclxuXHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZXRQYWdlRGF0YSgpO1xyXG4gICAgdGhpcy5ncy5lbnZpcm9ubWVudC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChlbnYpID0+IHRoaXMuaW1nQ0ROID0gZW52LnBsYW5vZ3JhbUNETilcclxuXHJcbiAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSwgLy8gU3Vic2NyaXB0aW9uIHdpbGwgYmUgY2FuY2VsbGVkIG9uIGNvbXBvbmVudCBkZXN0cm95LlxyXG4gICAgICBkZWJvdW5jZVRpbWUoMjAwKSwgLy8gVG8gYXZvaWQgaW1tZWRpYXRlIGZyZXF1ZW50IGNhbGxzLlxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpIC8vIEVtaXR0aW5nIG9ubHkgZGlmZmVyZW50IHZhbHVlcy4gKElnbm9yZXMgc2FtZSBjbGllbnRJZCkuXHJcbiAgICApLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMuaXNQYWdlTG9hZGluZyA9IHRydWU7XHJcblxyXG4gICAgICBpZiAoZGF0YT8uY2xpZW50KSB7XHJcbiAgICAgICAgdGhpcy5jbGllbnRJZCA9IGRhdGE/LmNsaWVudDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgaGVhZGVyRGF0YSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2hlYWRlci1maWx0ZXJzJykgYXMgc3RyaW5nKTtcclxuICAgICAgICB0aGlzLmNsaWVudElkID0gaGVhZGVyRGF0YT8uY2xpZW50O1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmdldEJyYW5kc0xpc3QoKTtcclxuICAgICAgdGhpcy5nZXRWbVR5cGVzKCk7XHJcblxyXG4gICAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1NYXAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShwYXJhbXMgPT4ge1xyXG4gICAgICAgIHRoaXMudmlld01vZGUgPSBnZXRRdWVyeVBhcmFtU3RyaW5nKHtcclxuICAgICAgICAgIHBhcmFtcyxcclxuICAgICAgICAgIGtleTogJ3ZpZXcnLFxyXG4gICAgICAgICAgZmFsbGJhY2s6ICdsaXN0JyxcclxuICAgICAgICAgIGFsbG93ZWQ6IFsnZ3JpZCcsICdsaXN0J10sXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VhcmNoVGVybSA9IGdldFF1ZXJ5UGFyYW1TdHJpbmcoe1xyXG4gICAgICAgICAgcGFyYW1zLFxyXG4gICAgICAgICAga2V5OiAnc2VhcmNoJyxcclxuICAgICAgICAgIGZhbGxiYWNrOiAnJyxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmlzRmlsdGVyQXBwbGllZCA9IHRoaXMuc2VhcmNoVGVybSA/IHRydWUgOiBmYWxzZTtcclxuXHJcblxyXG4gICAgICAgIHRoaXMubGltaXQgPSBnZXRRdWVyeVBhcmFtTnVtYmVyKHtcclxuICAgICAgICAgIHBhcmFtcyxcclxuICAgICAgICAgIGtleTogJ2xpbWl0JyxcclxuICAgICAgICAgIGZhbGxiYWNrOiAxMCxcclxuICAgICAgICAgIG1pbjogMSxcclxuICAgICAgICAgIG1heDogMzBcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5vZmZzZXQgPSBnZXRRdWVyeVBhcmFtTnVtYmVyKHtcclxuICAgICAgICAgIHBhcmFtcyxcclxuICAgICAgICAgIGtleTogJ29mZnNldCcsXHJcbiAgICAgICAgICBmYWxsYmFjazogMCxcclxuICAgICAgICAgIG1pbjogMFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmdldFZtc0xpc3QoKTtcclxuICAgICAgfSk7XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRCcmFuZHNMaXN0KCkge1xyXG4gICAgdGhpcy5wbGFub0RhdGFTZXJ2aWNlLmJyYW5kc0xpc3QucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICBjb25zdCBicmFuZEZpbHRlck9iaiA9IHRoaXMuZmlsdGVyT2JqZWN0LmZpbmQoZiA9PiBmLkRlc2NyaXB0aW9uID09PSAnQnJhbmRzJyk7XHJcblxyXG4gICAgICBpZiAoYnJhbmRGaWx0ZXJPYmopIHtcclxuICAgICAgICBicmFuZEZpbHRlck9iai5Jc3N1ZXMgPSBlLm1hcChiID0+IHsgcmV0dXJuIHsgdGV4dDogYi5icmFuZE5hbWUgPz8gJycsIGlkOiBiLmJyYW5kTmFtZSA/PyAnJyB9OyB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZpbHRlck9iamVjdC5wdXNoKHtcclxuICAgICAgICAgIERlc2NyaXB0aW9uOiAnQnJhbmRzJyxcclxuICAgICAgICAgIElzc3VlczogZS5tYXAoYiA9PiB7IHJldHVybiB7IHRleHQ6IGIuYnJhbmROYW1lID8/ICcnLCBpZDogYi5icmFuZE5hbWUgPz8gJycgfTsgfSlcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnBsYW5vRGF0YVNlcnZpY2UuZmV0Y2hCcmFuZHNMaXN0KHRoaXMuY2xpZW50SWQpO1xyXG4gIH1cclxuXHJcbiAgc2V0UGFnZURhdGEoKSB7XHJcbiAgICB0aGlzLnBhZ2VJbmZvLnNldFRpdGxlKFwiVmlzdWFsIE1lcmNoYW5kaXNlIExpYnJhcnlcIik7XHJcbiAgICB0aGlzLnBhZ2VJbmZvLnNldEJyZWFkY3J1bWJzKFtcclxuICAgICAgeyB0aXRsZTogXCJQbGFub2dyYW1cIiwgcGF0aDogXCIvbWFuYWdlL3BsYW5vZ3JhbS9tYW5hZ2UtcGxhbm9ncmFtc1wiLCBpc0FjdGl2ZTogZmFsc2UsIGlzU2VwYXJhdG9yOiBmYWxzZSB9LFxyXG4gICAgICB7IHRpdGxlOiBcIlwiLCBwYXRoOiBcIlwiLCBpc0FjdGl2ZTogZmFsc2UsIGlzU2VwYXJhdG9yOiB0cnVlIH0sXHJcbiAgICBdKTtcclxuICB9XHJcblxyXG4gIGdldFZtc0xpc3QoKSB7XHJcbiAgICB0aGlzLmxpYlN1Yj8udW5zdWJzY3JpYmUoKSAvLyBDYW5jZWwgcHJldmlvdXMgcmVxdWVzdC5cclxuXHJcbiAgICB0aGlzLmlzUGFnZUxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy52bUxpc3QgPSBbXTtcclxuICAgIGxldCBwYXlsb2FkID0ge1xyXG4gICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZCxcclxuICAgICAgbGltaXQ6IHRoaXMubGltaXQsXHJcbiAgICAgIG9mZnNldDogdGhpcy5vZmZzZXQsXHJcbiAgICAgIHNvcnRDb2x1bW5OYW1lOiB0aGlzLnNvcnRlZENvbHVtbixcclxuICAgICAgc29ydEJ5OiB0aGlzLnNvcnRPcmRlcixcclxuICAgICAgc2VhcmNoVmFsdWU6IHRoaXMuc2VhcmNoVGVybSxcclxuICAgICAgZmlsdGVyOiB0aGlzLmFwcGxpZWRGaWx0ZXJzLFxyXG4gICAgICBleHBvcnQ6IGZhbHNlLFxyXG4gICAgICBlbXB0eURvd25sb2FkOiBmYWxzZVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubGliU3ViID0gdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlLmdldFZtTGlicmFyeUxpc3QocGF5bG9hZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcz8uc3RhdHVzID09PSAnc3VjY2VzcycpIHtcclxuICAgICAgICAgIHRoaXMudG90YWxJdGVtcyA9IHJlcz8uZGF0YT8uY291bnQ7XHJcbiAgICAgICAgICB0aGlzLnZtTGlzdCA9IHJlcz8uZGF0YT8uZGF0YS5tYXAoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIG5hbWU6IGl0ZW0udm1OYW1lLFxyXG4gICAgICAgICAgICAgIGJyYW5kOiBpdGVtLnZtQnJhbmQsXHJcbiAgICAgICAgICAgICAgdHlwZTogaXRlbS52bVR5cGUsXHJcbiAgICAgICAgICAgICAgd2lkdGg6IGl0ZW0udm1XaWR0aCxcclxuICAgICAgICAgICAgICBoZWlnaHQ6IGl0ZW0udm1IZWlnaHQsXHJcbiAgICAgICAgICAgICAgcGxhY2VtZW50OiBpdGVtLmlzRG91YmxlU2lkZWQsXHJcbiAgICAgICAgICAgICAgbm9PZkFzc2lnbmVkOiBpdGVtLnRlbXBsYXRlSWQubGVuZ3RoLFxyXG4gICAgICAgICAgICAgIHN0YXR1czogaXRlbS5zdGF0dXMsXHJcbiAgICAgICAgICAgICAgaW1nVXJsOiBgJHt0aGlzLmltZ0NETn0ke2l0ZW0udm1JbWFnZVVybH1gLFxyXG4gICAgICAgICAgICAgIGlkOiBpdGVtLl9pZFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgaWYgKHRoaXMudG90YWxJdGVtcyA8IDEwKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvblNpemVzID0gW3RoaXMudG90YWxJdGVtc11cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvblNpemVzID0gWzEwLCAyMCwgMzBdXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaXNQYWdlTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdAQCBnZXRWbXNMaXN0IFtFUlJdOiAnLCBlcnIpXHJcbiAgICAgICAgdGhpcy5pc1BhZ2VMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcblxyXG4gICAgdGhpcy50b3RhbEl0ZW1zID0gdGhpcy52bUxpc3QubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0Vm1UeXBlcygpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlczogYW55ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlLmdldFZtVHlwZXNMaXN0KHRoaXMuY2xpZW50SWQpKTtcclxuICAgICAgaWYgKHJlcz8uZGF0YSkge1xyXG5cclxuICAgICAgICBjb25zdCB2bVR5cGVGaWx0ZXJPYmogPSB0aGlzLmZpbHRlck9iamVjdC5maW5kKGYgPT4gZi5EZXNjcmlwdGlvbiA9PT0gJ1ZNIFR5cGUnKVxyXG5cclxuICAgICAgICBpZiAodm1UeXBlRmlsdGVyT2JqKSB7XHJcbiAgICAgICAgICB2bVR5cGVGaWx0ZXJPYmouSXNzdWVzID0gcmVzLmRhdGEubWFwKChiOiBWTVR5cGVEZXRhaWxzKSA9PiB7IHJldHVybiB7IHRleHQ6IGIudm1UeXBlID8/ICcnLCBpZDogYi52bVR5cGUgPz8gJycgfSB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJPYmplY3QucHVzaCh7XHJcbiAgICAgICAgICAgIERlc2NyaXB0aW9uOiAnVk0gVHlwZScsXHJcbiAgICAgICAgICAgIElzc3VlczogcmVzLmRhdGEubWFwKChiOiBWTVR5cGVEZXRhaWxzKSA9PiB7IHJldHVybiB7IHRleHQ6IGIudm1UeXBlID8/ICcnLCBpZDogYi52bVR5cGUgPz8gJycgfSB9KVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiQEAgfiBnZXRWbVR5cGVzIFtFUlJdOlwiLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkb3dubG9hZFZNVGVtcGxhdGUoKSB7XHJcbiAgICBsZXQgcGF5bG9hZCA9IHtcclxuICAgICAgY2xpZW50SWQ6IHRoaXMuY2xpZW50SWQsXHJcbiAgICAgIGxpbWl0OiAxMDAwMCxcclxuICAgICAgb2Zmc2V0OiAwLFxyXG4gICAgICBzb3J0Q29sdW1uTmFtZTogJycsXHJcbiAgICAgIHNvcnRCeTogMSxcclxuICAgICAgc2VhcmNoVmFsdWU6ICcnLFxyXG4gICAgICBmaWx0ZXI6IHtcclxuICAgICAgICB0eXBlOiBbXSxcclxuICAgICAgICBzdGF0dXM6IFtdLFxyXG4gICAgICAgIHNpemU6IFtdXHJcbiAgICAgIH0sXHJcbiAgICAgIGV4cG9ydDogdHJ1ZSxcclxuICAgICAgZW1wdHlEb3dubG9hZDogdHJ1ZVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RvcmVCdWlsZGVyU2VydmljZS5nZXRWbUxpYnJhcnlMaXN0VG9FeHBvcnQocGF5bG9hZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlLnNhdmVBc0V4Y2VsRmlsZShyZXMsICdWbSBMaWJyYXJpZXMnKVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdAQCB2bUxpYnJhcnlMaXN0VG9FeHBvcnQgW0VSUl06ICcsIGVycilcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGV4cG9ydFZNTGlzdCgpIHtcclxuICAgIGxldCBwYXlsb2FkID0ge1xyXG4gICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZCxcclxuICAgICAgbGltaXQ6IDEwMDAwLFxyXG4gICAgICBvZmZzZXQ6IDAsXHJcbiAgICAgIHNvcnRDb2x1bW5OYW1lOiB0aGlzLnNvcnRlZENvbHVtbixcclxuICAgICAgc29ydEJ5OiB0aGlzLnNvcnRPcmRlcixcclxuICAgICAgc2VhcmNoVmFsdWU6IHRoaXMuc2VhcmNoVGVybSxcclxuICAgICAgZmlsdGVyOiB0aGlzLmFwcGxpZWRGaWx0ZXJzLFxyXG4gICAgICBleHBvcnQ6IHRydWUsXHJcbiAgICAgIGVtcHR5RG93bmxvYWQ6IGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlLmdldFZtTGlicmFyeUxpc3RUb0V4cG9ydChwYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnN0b3JlQnVpbGRlclNlcnZpY2Uuc2F2ZUFzRXhjZWxGaWxlKHJlcywgJ1ZNcyBsaXN0JylcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICBjb25zb2xlLmxvZygnQEAgdm1MaWJyYXJ5TGlzdFRvRXhwb3J0IFtFUlJdOiAnLCBlcnIpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBvcGVuQnVsa1VwbG9hZE1vZGFsKCkge1xyXG4gICAgY29uc3QgbW9kZWxSZWYgPSB0aGlzLm5nYk1vZGFsLm9wZW4oVk1CdWxrVXBsb2FkQ29tcG9uZW50LCB7IGNlbnRlcmVkOiB0cnVlIH0pO1xyXG4gICAgbW9kZWxSZWYuY29tcG9uZW50SW5zdGFuY2UuY2xpZW50SWQgPSB0aGlzLmNsaWVudElkO1xyXG4gICAgbW9kZWxSZWYuY29tcG9uZW50SW5zdGFuY2UudG90YWxJdGVtQ291bnQgPSB0aGlzLnRvdGFsSXRlbXM7XHJcbiAgICBtb2RlbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQgPT09ICdyZWZyZXNoJykge1xyXG4gICAgICAgIHRoaXMuZ2V0Vm1zTGlzdCgpXHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBvblNlYXJjaCgpIHtcclxuICAgIHRoaXMuc29ydGVkQ29sdW1uID0gJyc7XHJcbiAgICB0aGlzLnNvcnRPcmRlciA9IDFcclxuICAgIHRoaXMub2Zmc2V0ID0gMDtcclxuICAgIHRoaXMubGltaXQgPSAxMDtcclxuXHJcbiAgICB0aGlzLmlzRmlsdGVyQXBwbGllZCA9IHRoaXMuc2VhcmNoVGVybSA/IHRydWUgOiBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVF1ZXJ5UGFyYW1zKCk7XHJcbiAgfVxyXG5cclxuICBvblNvcnRUYWJsZShjb2x1bW46IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuc29ydGVkQ29sdW1uID09PSBjb2x1bW4pIHtcclxuICAgICAgdGhpcy5zb3J0T3JkZXIgPSB0aGlzLnNvcnRPcmRlciA9PT0gMSA/IC0xIDogMTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc29ydGVkQ29sdW1uID0gY29sdW1uO1xyXG4gICAgICB0aGlzLnNvcnRPcmRlciA9IDE7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9mZnNldCA9IDE7XHJcbiAgICB0aGlzLmxpbWl0ID0gMTA7XHJcbiAgICB0aGlzLmdldFZtc0xpc3QoKVxyXG4gIH1cclxuXHJcbiAgYXBwbHlGaWx0ZXJzKGV2ZW50OiBhbnkpIHtcclxuICAgIGNvbnN0IHN0YXR1cyA9IGV2ZW50LmZpbmQoKGU6IGFueSkgPT4gZS5EZXNjcmlwdGlvbiA9PSAnU3RhdHVzJyk/Lklzc3Vlcz8ubWFwKChpOiBhbnkpID0+IGk/LmlkKTtcclxuICAgIGNvbnN0IHR5cGUgPSBldmVudC5maW5kKChlOiBhbnkpID0+IGUuRGVzY3JpcHRpb24gPT0gJ1ZNIFR5cGUnKT8uSXNzdWVzPy5tYXAoKGk6IGFueSkgPT4gaT8uaWQpO1xyXG4gICAgY29uc3QgYnJhbmQgPSBldmVudC5maW5kKChlOiBhbnkpID0+IGUuRGVzY3JpcHRpb24gPT0gJ0JyYW5kcycpPy5Jc3N1ZXM/Lm1hcCgoaTogYW55KSA9PiBpPy5pZCk7XHJcbiAgICAvLyBjb25zdCBjYXRlZ29yeSA9IGV2ZW50WzJdPy5Jc3N1ZXM/Lm1hcCgoaTogYW55KSA9PiBpPy5pZCk7XHJcblxyXG4gICAgdGhpcy5pc0ZpbHRlckFwcGxpZWQgPSAoc3RhdHVzIHx8IHR5cGUgfHwgYnJhbmQpO1xyXG4gICAgdGhpcy5hcHBsaWVkRmlsdGVycyA9IHsgdHlwZSwgc3RhdHVzLCBicmFuZCB9O1xyXG4gICAgdGhpcy5vZmZzZXQgPSAxO1xyXG4gICAgdGhpcy5nZXRWbXNMaXN0KCk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVWaWV3TW9kZShtb2RlOiAnbGlzdCcgfCAnZ3JpZCcpIHtcclxuICAgIHRoaXMudmlld01vZGUgPSBtb2RlO1xyXG4gICAgdGhpcy51cGRhdGVRdWVyeVBhcmFtcygpO1xyXG4gIH1cclxuXHJcbiAgcGFnaW5hdGlvblNpemUoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnRvdGFsSXRlbXMgPCAxMCA/IHRoaXMudG90YWxJdGVtcyA6IHRoaXMubGltaXQ7XHJcbiAgfVxyXG5cclxuICBvblBhZ2VDaGFuZ2UocGFnZU9mZnNldDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLm9mZnNldCA9IE51bWJlcihwYWdlT2Zmc2V0KTtcclxuICAgIHRoaXMudXBkYXRlUXVlcnlQYXJhbXMoKTtcclxuICB9XHJcblxyXG4gIG9uUGFnZVNpemVDaGFuZ2UocGFnZVNpemU6IG51bWJlciwpIHtcclxuICAgIHRoaXMub2Zmc2V0ID0gMTtcclxuICAgIHRoaXMubGltaXQgPSBOdW1iZXIocGFnZVNpemUpO1xyXG4gICAgdGhpcy51cGRhdGVRdWVyeVBhcmFtcygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0VG9vbHRpcFRleHQoc3RhdHVzOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoIChzdGF0dXMpIHtcclxuICAgICAgY2FzZSAnYWN0aXZlJzpcclxuICAgICAgICByZXR1cm4gJ1RoaXMgdm0gaXMgYWN0aXZlIHRvIHRlbXBsYXRlcy4nO1xyXG4gICAgICBjYXNlICdpbmFjdGl2ZSc6XHJcbiAgICAgICAgcmV0dXJuICdUaGlzIHZtIGlzIG5vdCBhY3RpdmUgdG8gdGVtcGxhdGVzLic7XHJcbiAgICAgIGNhc2UgJ2RyYWZ0JzpcclxuICAgICAgICByZXR1cm4gJ1RoaXMgdm0gaXMgaW4gZHJhZnQnO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiAnJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uRHVwbGljYXRlKHZtSWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5zdG9yZUJ1aWxkZXJTZXJ2aWNlLmR1cGxpY2F0ZVZtTGlicmFyeSh7IHZtSWQ6IHZtSWQgfSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcz8uc3RhdHVzID09PSAnc3VjY2VzcycpIHtcclxuICAgICAgICAgIHRoaXMudG9hc3QuZ2V0U3VjY2Vzc1RvYXN0KHJlcy5kYXRhLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgdGhpcy5nZXRWbXNMaXN0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChlcnI/LmVycm9yPy5lcnJvciB8fCAnRmFpbGVkIHRvIGR1cGxpY2F0ZSBWTScpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiQEAgfiBkdXBsaWNhdGVWbUxpYnJhcnkgW2Vycl06XCIsIGVycik7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBhc3luYyBjb25maXJtRGVsZXRpb24oKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBjb25zdCBtb2RlbFJlZiA9IHRoaXMubmdiTW9kYWwub3BlbihEZWxldGVDb25maXJtYXRpb25Db21wb25lbnQsIHsgY2VudGVyZWQ6IHRydWUgfSk7XHJcbiAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS50aXRsZSA9ICdEZWxldGUgVk0nO1xyXG4gICAgbW9kZWxSZWYuY29tcG9uZW50SW5zdGFuY2UuZGVzY3JpcHRpb24gPSAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIHZtID8nO1xyXG5cclxuICAgIHJldHVybiBhd2FpdCBtb2RlbFJlZi5yZXN1bHQudGhlbjxib29sZWFuPigocmVzdWx0KSA9PiByZXN1bHQgPT09ICdvaycpXHJcbiAgfVxyXG5cclxuICBhc3luYyBvbkRlbGV0ZSh2bUlkOiBzdHJpbmcsIHVzYWdlQ291bnQ6IG51bWJlciA9IDApIHtcclxuICAgIGlmICh1c2FnZUNvdW50KSB7XHJcbiAgICAgIGNvbnN0IG1vZGVsUmVmID0gdGhpcy5uZ2JNb2RhbC5vcGVuKENhbm5vdFBlcmZvcm1Db21wb25lbnQsIHsgY2VudGVyZWQ6IHRydWUgfSk7XHJcbiAgICAgIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLnRpdGxlID0gYENhbuKAmXQgZGVsZXRlIFZNIWA7XHJcbiAgICAgIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLmRlc2NyaXB0aW9uID0gYFNpbmNlIHRoaXMgVk0gaXMgbGl2ZSBpbiBcIiR7dXNhZ2VDb3VudH0gdGVtcGxhdGVzLFwiIGRlbGV0aW5nIGlzIG5vdCBhbGxvd2VkLmA7XHJcbiAgICAgIHJldHVyblxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAoIWF3YWl0IHRoaXMuY29uZmlybURlbGV0aW9uKCkpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLnN0b3JlQnVpbGRlclNlcnZpY2UuZGVsZXRlVm1MaWJyYXJ5KHsgdm1JZDogdm1JZCB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzPy5zdGF0dXMgPT09ICdzdWNjZXNzJykge1xyXG4gICAgICAgICAgdGhpcy50b2FzdC5nZXRTdWNjZXNzVG9hc3QocmVzLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgdGhpcy5nZXRWbXNMaXN0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChlcnI/LmVycm9yPy5lcnJvciB8fCAnRmFpbGVkIHRvIGRlbGV0ZSBWTScpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiQEAgfiBkZWxldGVWbUxpYnJhcnkgW2Vycl06XCIsIGVycilcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIG9uSW1nRXJyb3IoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEltYWdlRWxlbWVudDtcclxuICAgIHRhcmdldC5zcmMgPSAnYXNzZXRzL3RhbmdvL0ltYWdlcy92bS1wbGFjZWhvbGRlci5wbmcnO1xyXG4gIH1cclxuXHJcbiAgb25FZGl0KHZtSWQ6IHN0cmluZywgdXNhZ2VDb3VudDogbnVtYmVyID0gMCkge1xyXG4gICAgaWYgKHVzYWdlQ291bnQpIHtcclxuICAgICAgY29uc3QgbW9kZWxSZWYgPSB0aGlzLm5nYk1vZGFsLm9wZW4oQ2Fubm90UGVyZm9ybUNvbXBvbmVudCwgeyBjZW50ZXJlZDogdHJ1ZSB9KTtcclxuICAgICAgbW9kZWxSZWYuY29tcG9uZW50SW5zdGFuY2UudGl0bGUgPSBgQ2Fu4oCZdCBlZGl0IFZNIWA7XHJcbiAgICAgIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLmRlc2NyaXB0aW9uID0gYFNpbmNlIHRoaXMgVk0gaXMgbGl2ZSBpbiBcIiR7dXNhZ2VDb3VudH0gdGVtcGxhdGVzLFwiIGVkaXRpbmcgaXMgbm90IGFsbG93ZWQuYDtcclxuICAgICAgcmV0dXJuXHJcbiAgICB9O1xyXG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbWFuYWdlL3BsYW5vZ3JhbS9jcmVhdGUtbGlicmFyeS12bSddLCB7IHF1ZXJ5UGFyYW1zOiB7IHZtSWQ6IHZtSWQsIGlzRWRpdDogdHJ1ZSB9IH0pO1xyXG4gIH1cclxuXHJcbiAgb25DbGlja0NhcmQoZXZlbnQ6IGFueSwgdm06IFZtTGlicmFyeUxpc3QpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL21hbmFnZS9wbGFub2dyYW0vY3JlYXRlLWxpYnJhcnktdm0nXSwgeyBxdWVyeVBhcmFtczogeyB2bUlkOiB2bS5pZCB9IH0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlUXVlcnlQYXJhbXMoKSB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xyXG4gICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxyXG4gICAgICBxdWVyeVBhcmFtczogeyB2aWV3OiB0aGlzLnZpZXdNb2RlLCBzZWFyY2g6IHRoaXMuc2VhcmNoVGVybSwgbGltaXQ6IHRoaXMubGltaXQsIG9mZnNldDogdGhpcy5vZmZzZXQgfSxcclxuICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJyxcclxuICAgICAgcmVwbGFjZVVybDogdHJ1ZSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICAgIHRoaXMubGliU3ViPy51bnN1YnNjcmliZSgpXHJcbiAgfVxyXG59XHJcbiIsIjxzZWN0aW9uIGlkPVwidm0tbGlicmFyeVwiIGNsYXNzPVwiY29udGVudC13cmFwcGVyXCI+XHJcbiAgPCEtLSBWTSBWaWV3IGhlYWRlciAtLT5cclxuICA8ZGl2XHJcbiAgICAqbmdJZj1cInZtTGlzdC5sZW5ndGggIT09IDAgfHwgc2VhcmNoVGVybSB8fCBpc0ZpbHRlckFwcGxpZWRcIlxyXG4gICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG1iLTVcIlxyXG4gID5cclxuICAgIDxkaXY+XHJcbiAgICAgIDxoND5WTSBMaWJyYXJ5IExpc3RzPC9oND5cclxuICAgICAgPHNwYW4+e3sgdG90YWxJdGVtcyB9fSAtIFRvdGFsIFZNPC9zcGFuPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOiByZWxhdGl2ZVwiPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXJtXCJcclxuICAgICAgICAgIChjaGFuZ2UpPVwib25TZWFyY2goKVwiXHJcbiAgICAgICAgICBzdHlsZT1cInBhZGRpbmctbGVmdDogM3JlbTsgcGFkZGluZy1yaWdodDogM3JlbVwiXHJcbiAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXHJcbiAgICAgICAgICBuYW1lPVwic2VhcmNoXCJcclxuICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaFwiXHJcbiAgICAgICAgLz5cclxuXHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzZWFyY2gtaWNvblwiPlxyXG4gICAgICAgICAgPHN2ZyB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjhcIiBjeT1cIjhcIiByPVwiNlwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiAvPlxyXG4gICAgICAgICAgICA8bGluZSB4MT1cIjEzXCIgeTE9XCIxM1wiIHgyPVwiMTZcIiB5Mj1cIjE2XCIgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgPC9zcGFuPlxyXG5cclxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwic2VhcmNoVGVybVwiIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwiQ2xlYXJcIiAoY2xpY2spPVwic2VhcmNoVGVybSA9ICcnOyBvblNlYXJjaCgpXCIgY2xhc3M9XCJjbGVhci1zZWFyY2hcIj5cclxuICAgICAgICAgIDxzdmcgd2lkdGg9XCI2NHB4XCIgaGVpZ2h0PVwiNjRweFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgPGcgaWQ9XCJTVkdSZXBvX2JnQ2FycmllclwiIHN0cm9rZS13aWR0aD1cIjBcIj48L2c+XHJcbiAgICAgICAgICAgIDxnIGlkPVwiU1ZHUmVwb190cmFjZXJDYXJyaWVyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9nPlxyXG4gICAgICAgICAgICA8ZyBpZD1cIlNWR1JlcG9faWNvbkNhcnJpZXJcIj5cclxuICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkgOUwxNSAxNVwiIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTUgOUw5IDE1XCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIj48L3BhdGg+XHJcbiAgICAgICAgICAgICAgPGNpcmNsZVxyXG4gICAgICAgICAgICAgICAgY3g9XCIxMlwiXHJcbiAgICAgICAgICAgICAgICBjeT1cIjEyXCJcclxuICAgICAgICAgICAgICAgIHI9XCI5XCJcclxuICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIlxyXG4gICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICAgICAgICA+PC9jaXJjbGU+XHJcbiAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxidXR0b25cclxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICBbcm91dGVyTGlua109XCJbJy9tYW5hZ2UvcGxhbm9ncmFtL2NyZWF0ZS1saWJyYXJ5LXZtJ11cIlxyXG4gICAgICAgIFtxdWVyeVBhcmFtc109XCJ7IGlzRWRpdDogdHJ1ZSB9XCJcclxuICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBkLWlubGluZS1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtZS0yXCJcclxuICAgICAgPlxyXG4gICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgZD1cIk0xMC4wMDAxIDQuMTY2NjNWMTUuODMzM000LjE2Njc1IDkuOTk5OTZIMTUuODMzNFwiXHJcbiAgICAgICAgICAgIHN0cm9rZT1cIndoaXRlXCJcclxuICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS42N1wiXHJcbiAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibXMtMiB0ZXh0LXdoaXRlXCI+Q3JlYXRlIDwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8IS0tIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvcGVuQnVsa1VwbG9hZE1vZGFsKClcIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSB0ZXh0LW5vd3JhcFwiPlxyXG4gICAgICAgIDxzdmcgY2xhc3M9XCJtZS0yXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgZD1cIk0xNy41IDEyLjVWMTUuODMzM0MxNy41IDE2LjI3NTQgMTcuMzI0NCAxNi42OTkzIDE3LjAxMTggMTcuMDExOEMxNi42OTkzIDE3LjMyNDQgMTYuMjc1NCAxNy41IDE1LjgzMzMgMTcuNUg0LjE2NjY3QzMuNzI0NjQgMTcuNSAzLjMwMDcyIDE3LjMyNDQgMi45ODgxNiAxNy4wMTE4QzIuNjc1NTkgMTYuNjk5MyAyLjUgMTYuMjc1NCAyLjUgMTUuODMzM1YxMi41TTE0LjE2NjcgNi42NjY2N0wxMCAyLjVNMTAgMi41TDUuODMzMzMgNi42NjY2N00xMCAyLjVWMTIuNVwiXHJcbiAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXHJcbiAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNjdcIlxyXG4gICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgICBCdWxrIFVwbG9hZFxyXG4gICAgICA8L2J1dHRvbj4gLS0+XHJcblxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBbZGlzYWJsZWRdPVwidm1MaXN0Lmxlbmd0aCA8PSAwXCIgKGNsaWNrKT1cImV4cG9ydFZNTGlzdCgpXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmUgdGV4dC1ub3dyYXBcIj5cclxuICAgICAgICA8c3ZnIGNsYXNzPVwibWUtMlwiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgIGQ9XCJNMTcuNSAxMi41VjE1LjgzMzNDMTcuNSAxNi4yNzU0IDE3LjMyNDQgMTYuNjk5MyAxNy4wMTE4IDE3LjAxMThDMTYuNjk5MyAxNy4zMjQ0IDE2LjI3NTQgMTcuNSAxNS44MzMzIDE3LjVINC4xNjY2N0MzLjcyNDY0IDE3LjUgMy4zMDA3MiAxNy4zMjQ0IDIuOTg4MTYgMTcuMDExOEMyLjY3NTU5IDE2LjY5OTMgMi41IDE2LjI3NTQgMi41IDE1LjgzMzNWMTIuNU0xNC4xNjY3IDYuNjY2NjdMMTAgMi41TTEwIDIuNUw1LjgzMzMzIDYuNjY2NjdNMTAgMi41VjEyLjVcIlxyXG4gICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxyXG4gICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjY3XCJcclxuICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgRXhwb3J0XHJcbiAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgPGxpYi1maWx0ZXJzIFtkYXRhT2JqZWN0XT1cImZpbHRlck9iamVjdFwiIChhcHBsaWVkRmlsdGVycyk9XCJhcHBseUZpbHRlcnMoJGV2ZW50KVwiPjwvbGliLWZpbHRlcnM+XHJcblxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0b2dnbGUtYnV0dG9uIG1lLTJcIiBbbmdDbGFzc109XCJ7IHNlbGVjdGVkOiB2aWV3TW9kZSA9PT0gJ2xpc3QnIH1cIiAoY2xpY2spPVwidG9nZ2xlVmlld01vZGUoJ2xpc3QnKVwiPlxyXG4gICAgICAgICAgPHN2ZyB3aWR0aD1cIjE5XCIgaGVpZ2h0PVwiMThcIiB2aWV3Qm94PVwiMCAwIDE5IDE4XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgZD1cIk02LjI0MDc4IDQuNTQ2MzlIMTUuODkwNk02LjI0MDc4IDkuMDAwMTdIMTUuODkwNk02LjI0MDc4IDEzLjQ1MzlIMTUuODkwNk0yLjUyOTMgNC41NDYzOUgyLjUzNjcyTTIuNTI5MyA5LjAwMDE3SDIuNTM2NzJNMi41MjkzIDEzLjQ1MzlIMi41MzY3MlwiXHJcbiAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInZpZXdNb2RlID09PSAnbGlzdCcgPyAnIzAwOUJGMycgOiAnIzM0NDA1NCdcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNDg3NTZcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidG9nZ2xlLWJ1dHRvblwiIFtuZ0NsYXNzXT1cInsgc2VsZWN0ZWQ6IHZpZXdNb2RlID09PSAnZ3JpZCcgfVwiIChjbGljayk9XCJ0b2dnbGVWaWV3TW9kZSgnZ3JpZCcpXCI+XHJcbiAgICAgICAgICA8c3ZnIHdpZHRoPVwiMTlcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMTkgMThcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICBkPVwiTTcuOTE4ODYgMi4zMTkzNEgyLjcyMjc4VjcuNTE1NDFINy45MTg4NlYyLjMxOTM0WlwiXHJcbiAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInZpZXdNb2RlID09PSAnZ3JpZCcgPyAnIzAwOUJGMycgOiAnIzM0NDA1NCdcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNDg3NTZcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICBkPVwiTTE2LjA4NDEgMi4zMTkzNEgxMC44ODhWNy41MTU0MUgxNi4wODQxVjIuMzE5MzRaXCJcclxuICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwidmlld01vZGUgPT09ICdncmlkJyA/ICcjMDA5QkYzJyA6ICcjMzQ0MDU0J1wiXHJcbiAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS40ODc1NlwiXHJcbiAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgIGQ9XCJNMTYuMDg0MSAxMC40ODQ2SDEwLjg4OFYxNS42ODA3SDE2LjA4NDFWMTAuNDg0NlpcIlxyXG4gICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJ2aWV3TW9kZSA9PT0gJ2dyaWQnID8gJyMwMDlCRjMnIDogJyMzNDQwNTQnXCJcclxuICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjQ4NzU2XCJcclxuICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgZD1cIk03LjkxODg2IDEwLjQ4NDZIMi43MjI3OFYxNS42ODA3SDcuOTE4ODZWMTAuNDg0NlpcIlxyXG4gICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJ2aWV3TW9kZSA9PT0gJ2dyaWQnID8gJyMwMDlCRjMnIDogJyMzNDQwNTQnXCJcclxuICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjQ4NzU2XCJcclxuICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPGRpdiAqbmdJZj1cImlzUGFnZUxvYWRpbmc7IGVsc2UgY29udGVudFBhcnRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3cgbG9hZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjY29udGVudFBhcnQ+XHJcbiAgICA8ZGl2ICpuZ0lmPVwidm1MaXN0Lmxlbmd0aCA9PT0gMFwiPlxyXG4gICAgICBAaWYoc2VhcmNoVGVybSB8fCBpc0ZpbHRlckFwcGxpZWQpe1xyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMiBteS02XCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLXNyY1wiIHNyYz1cIi4vYXNzZXRzL3RhbmdvL0ljb25zL05vZGF0YTEuc3ZnXCIgYWx0PVwiXCIgLz5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vZGF0YW1haW50ZXh0IG10LTNcIj5ObyBkYXRhIGZvdW5kPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJub2RhdGFzdWJ0ZXh0XCI+VGhlcmUgaXMgbm8gcmVzdWx0IGZvciBtYXRjaGluZyBmaWx0ZXIgYW5kIHNlYXJjaDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICB9QGVsc2Uge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwicm93IGctMCBweS0xMlwiPlxyXG4gICAgICAgIDwhLS0gU2luZ2xlIFZNIENyZWF0aW9uIC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcGUtbWQtM1wiPlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIgcC0xMFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXIgbWItOFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi01XCI+XHJcbiAgICAgICAgICAgICAgICA8c3ZnXHJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDgwcHg7IGhlaWdodDogODBweFwiXHJcbiAgICAgICAgICAgICAgICAgIHdpZHRoPVwiNTZcIlxyXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ9XCI1NlwiXHJcbiAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgNTYgNTZcIlxyXG4gICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCIyNFwiIGZpbGw9XCIjREFGMUZGXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiMjRcIiBzdHJva2U9XCIjRUFGOEZGXCIgc3Ryb2tlLXdpZHRoPVwiOFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgZD1cIk0yOCAyNFYzMk0yNCAyOEgzMk0zOCAyOEMzOCAzMy41MjI4IDMzLjUyMjggMzggMjggMzhDMjIuNDc3MiAzOCAxOCAzMy41MjI4IDE4IDI4QzE4IDIyLjQ3NzIgMjIuNDc3MiAxOCAyOCAxOEMzMy41MjI4IDE4IDM4IDIyLjQ3NzIgMzggMjhaXCJcclxuICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDBBM0ZGXCJcclxuICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIG1iLTNcIj5DcmVhdGUgYSBWTSBtYW51YWxseTwvaDM+XHJcbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjYXJkLXRhZ2xpbmUgbWItMFwiPllvdSBjYW4gY3JlYXRlIGEgc2luZ2xlIFZNIG1hbnVhbGx5IGJ5IHN0ZXAgYnkgc3RlcDwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJbJy9tYW5hZ2UvcGxhbm9ncmFtL2NyZWF0ZS1saWJyYXJ5LXZtJ11cIlxyXG4gICAgICAgICAgICAgIFtxdWVyeVBhcmFtc109XCJ7IGlzRWRpdDogdHJ1ZSB9XCJcclxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBkLWlubGluZS1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwibWUtMlwiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgIGQ9XCJNMTIgNVYxOU01IDEySDE5XCJcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgIENyZWF0ZSBNYW51YWxseVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIEJ1bGsgVk0gQ3JlYXRpb24gLS0+XHJcbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgcHMtbWQtMyBib3JkZXItc3RhcnRcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIHAtMTBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIG1iLThcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItNVwiPlxyXG4gICAgICAgICAgICAgICAgPHN2Z1xyXG4gICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiA4MHB4OyBoZWlnaHQ6IDgwcHhcIlxyXG4gICAgICAgICAgICAgICAgICB3aWR0aD1cIjU2XCJcclxuICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiNTZcIlxyXG4gICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDk1IDk0XCJcclxuICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjcuNVwiIHk9XCI3XCIgd2lkdGg9XCI4MFwiIGhlaWdodD1cIjgwXCIgcng9XCI0MFwiIGZpbGw9XCIjREFGMUZGXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPHJlY3QgeD1cIjcuNVwiIHk9XCI3XCIgd2lkdGg9XCI4MFwiIGhlaWdodD1cIjgwXCIgcng9XCI0MFwiIHN0cm9rZT1cIiNFQUY4RkZcIiBzdHJva2Utd2lkdGg9XCIxMy4zMzMzXCIgLz5cclxuICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICBkPVwiTTYyLjUgNTJWNTguNjY2N0M2Mi41IDU5LjU1MDcgNjIuMTQ4OCA2MC4zOTg2IDYxLjUyMzcgNjEuMDIzN0M2MC44OTg2IDYxLjY0ODggNjAuMDUwNyA2MiA1OS4xNjY3IDYySDM1LjgzMzNDMzQuOTQ5MyA2MiAzNC4xMDE0IDYxLjY0ODggMzMuNDc2MyA2MS4wMjM3QzMyLjg1MTIgNjAuMzk4NiAzMi41IDU5LjU1MDcgMzIuNSA1OC42NjY3VjUyTTU1LjgzMzMgNDAuMzMzM0w0Ny41IDMyTTQ3LjUgMzJMMzkuMTY2NyA0MC4zMzMzTTQ3LjUgMzJWNTJcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMEEzRkZcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjMuMzMzMzNcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgbWItM1wiPkNyZWF0ZSBWTSB1c2luZyBleGNlbCB0ZW1wbGF0ZTwvaDM+XHJcbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjYXJkLXRhZ2xpbmUgbWItMFwiPllvdSBjYW4gYWRkIGEgc2luZ2xlIG9yIG11bHRpcGxlIFZNIHVzaW5nIHRoZSB0ZW1wbGF0ZSBiZWxvdzwvcD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZ2FwLTIgbWItNlwiIHN0eWxlPVwid2lkdGg6IGZpdC1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjYXJkLWRlc2NyaXB0aW9uIG1iLTBcIj5cclxuICAgICAgICAgICAgICAgIFN0ZXAxIC0gPGEgY2xhc3M9XCJkb3dubG9hZC1saW5rIGZ3LW1lZGl1bVwiIChjbGljayk9XCJkb3dubG9hZFZNVGVtcGxhdGUoKVwiPkRvd25sb2FkIHRoZSB0ZW1wbGF0ZSBoZXJlPC9hPlxyXG4gICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICA8cCBjbGFzcz1cImNhcmQtZGVzY3JpcHRpb24gbWItMFwiPlN0ZXAyIC0gQWRkIHlvdXIgZGF0YSB0byB0aGUgVGVtcGxhdGUgRmlsZTwvcD5cclxuICAgICAgICAgICAgICA8cCBjbGFzcz1cImNhcmQtZGVzY3JpcHRpb24gbWItMFwiPlN0ZXAzIC0gVXBsb2FkIGl0IGJlbG93IGZvciBwcm9jZXNzaW5nPC9wPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBkLWlubGluZS1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiIChjbGljayk9XCJvcGVuQnVsa1VwbG9hZE1vZGFsKClcIj5cclxuICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwibWUtMlwiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgIGQ9XCJNMTcuNSAxMi41VjE1LjgzMzNDMTcuNSAxNi4yNzU0IDE3LjMyNDQgMTYuNjk5MyAxNy4wMTE4IDE3LjAxMThDMTYuNjk5MyAxNy4zMjQ0IDE2LjI3NTQgMTcuNSAxNS44MzMzIDE3LjVINC4xNjY2N0MzLjcyNDY0IDE3LjUgMy4zMDA3MiAxNy4zMjQ0IDIuOTg4MTYgMTcuMDExOEMyLjY3NTU5IDE2LjY5OTMgMi41IDE2LjI3NTQgMi41IDE1LjgzMzNWMTIuNU0xNC4xNjY3IDYuNjY2NjdMMTAgMi41TTEwIDIuNUw1LjgzMzMzIDYuNjY2NjdNMTAgMi41VjEyLjVcIlxyXG4gICAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjY3XCJcclxuICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgVXBsb2FkXHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgfVxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cInZtTGlzdC5sZW5ndGggIT0gMFwiPlxyXG4gICAgICA8IS0tIFZNIGxpc3QgdmlldyAtLT5cclxuICAgICAgPHNlY3Rpb24gaWQ9XCJsaXN0LXZpZXdcIiAqbmdJZj1cInZpZXdNb2RlID09PSAnbGlzdCc7IGVsc2UgZ3JpZFZpZXdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxyXG4gICAgICAgICAgPHRhYmxlIGNsYXNzPVwidy0xMDAgdGFibGUgYm90dG9tLWJvcmRlciB0ZXh0LW5vd3JhcFwiPlxyXG4gICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgPHRoPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwib25Tb3J0VGFibGUoJ3ZtTmFtZScpXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFZNIG5hbWVcclxuICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYSBtcy0xIG10LTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBjb2xvcjogc29ydGVkQ29sdW1uID09PSAndm1OYW1lJyA/ICcjMDA5QkYzJyA6ICcnIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydE9yZGVyID09PSAxICYmIHNvcnRlZENvbHVtbiA9PT0gJ3ZtTmFtZScgPyAnZmEtYXJyb3ctdXAnIDogJ2ZhLWFycm93LWRvd24nXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvaT5cclxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgIDx0aD5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cIm9uU29ydFRhYmxlKCdicmFuZCcpXCIgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIEJyYW5kXHJcbiAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmEgbXMtMSBtdC0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgY29sb3I6IHNvcnRlZENvbHVtbiA9PT0gJ2JyYW5kJyA/ICcjMDA5QkYzJyA6ICcnIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydE9yZGVyID09PSAxICYmIHNvcnRlZENvbHVtbiA9PT0gJ2JyYW5kJyA/ICdmYS1hcnJvdy11cCcgOiAnZmEtYXJyb3ctZG93bidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9pPlxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cIm9uU29ydFRhYmxlKCd2bVR5cGUnKVwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICBUeXBlXHJcbiAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmEgbXMtMSBtdC0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgY29sb3I6IHNvcnRlZENvbHVtbiA9PT0gJ3ZtVHlwZScgPyAnIzAwOUJGMycgOiAnJyB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNvcnRPcmRlciA9PT0gMSAmJiBzb3J0ZWRDb2x1bW4gPT09ICd2bVR5cGUnID8gJ2ZhLWFycm93LXVwJyA6ICdmYS1hcnJvdy1kb3duJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgID48L2k+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwib25Tb3J0VGFibGUoJ3ZtV2lkdGgnKVwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICBXaWR0aFxyXG4gICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhIG1zLTEgbXQtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGNvbG9yOiBzb3J0ZWRDb2x1bW4gPT09ICd2bVdpZHRoJyA/ICcjMDA5QkYzJyA6ICcnIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydE9yZGVyID09PSAxICYmIHNvcnRlZENvbHVtbiA9PT0gJ3ZtV2lkdGgnID8gJ2ZhLWFycm93LXVwJyA6ICdmYS1hcnJvdy1kb3duJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgID48L2k+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwib25Tb3J0VGFibGUoJ3ZtSGVpZ2h0JylcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgSGVpZ2h0XHJcbiAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmEgbXMtMSBtdC0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgY29sb3I6IHNvcnRlZENvbHVtbiA9PT0gJ3ZtSGVpZ2h0JyA/ICcjMDA5QkYzJyA6ICcnIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydE9yZGVyID09PSAxICYmIHNvcnRlZENvbHVtbiA9PT0gJ3ZtSGVpZ2h0JyA/ICdmYS1hcnJvdy11cCcgOiAnZmEtYXJyb3ctZG93bidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9pPlxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8dGg+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwib25Tb3J0VGFibGUoJ3ZtUGxhY2VtZW50JylcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIFBsYWNlbWVudHNcclxuICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYSBtcy0xIG10LTFcIlxyXG4gICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJzb3J0T3JkZXIgPT09IDEgJiYgc29ydGVkQ29sdW1uID09PSAndm1QbGFjZW1lbnQnID8gJ2ZhLWFycm93LXVwJyA6ICdmYS1hcnJvdy1kb3duJ1wiXHJcbiAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgID48L2k+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPC90aD4gLS0+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwib25Tb3J0VGFibGUoJ3RlbXBsYXRlQ291bnQnKVwiIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICBObyBvZiBhc3NpZ25lZFxyXG4gICAgICAgICAgICAgICAgICAgIDxpXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhIG1zLTEgbXQtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGNvbG9yOiBzb3J0ZWRDb2x1bW4gPT09ICd0ZW1wbGF0ZUNvdW50JyA/ICcjMDA5QkYzJyA6ICcnIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwic29ydE9yZGVyID09PSAxICYmIHNvcnRlZENvbHVtbiA9PT0gJ3RlbXBsYXRlQ291bnQnID8gJ2ZhLWFycm93LXVwJyA6ICdmYS1hcnJvdy1kb3duJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgID48L2k+XHJcbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlN0YXR1czwvdGg+XHJcbiAgICAgICAgICAgICAgICA8dGg+PC90aD5cclxuICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCB2bSBvZiB2bUxpc3RcIj5cclxuICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cIm1heC13aWR0aDogMzAwcHhcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGh1bWJuYWlsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwidm0uaW1nVXJsXCIgYWx0PVwiVm0gSW1hZ2VcIiAoZXJyb3IpPVwib25JbWdFcnJvcigkZXZlbnQpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiWycvbWFuYWdlL3BsYW5vZ3JhbS9jcmVhdGUtbGlicmFyeS12bSddXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtxdWVyeVBhcmFtc109XCJ7IHZtSWQ6IHZtLmlkIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRlY29yYXRpb24tdW5kZXJsaW5lIGVsbGlwc2lzXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInZtLm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIHt7IHZtLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZD57eyB2bT8uYnJhbmQgPz8gXCItXCIgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkPnt7IHZtPy50eXBlID8/IFwiLVwiIH19PC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtY2VudGVyXCI+e3sgdm0ud2lkdGgudmFsdWUgfX17eyB2bS53aWR0aC51bml0IH19PC90ZD5cclxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtY2VudGVyXCI+e3sgdm0uaGVpZ2h0LnZhbHVlIH19e3sgdm0uaGVpZ2h0LnVuaXQgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8dGQ+e3sgdm0ucGxhY2VtZW50IH19PC90ZD4gLS0+XHJcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPnt7IHZtLm5vT2ZBc3NpZ25lZCB9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFkZ2VcIiBbbmdDbGFzc109XCJ2bS5zdGF0dXNcIiBwbGFjZW1lbnQ9XCJzdGFydFwiIFtuZ2JUb29sdGlwXT1cImdldFRvb2x0aXBUZXh0KHZtLnN0YXR1cylcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyB2bS5zdGF0dXMgfCB0aXRsZWNhc2UgfX1cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd25cIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1saW5rIHAtMFwiIHR5cGU9XCJidXR0b25cIiBkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidmVydGljYWxEb3RzXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPVwiZHJvcGRvd24tbWVudVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25FZGl0KHZtLmlkLCB2bS5ub09mQXNzaWduZWQpXCI+IEVkaXQgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxsaT48YSBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwib25EdXBsaWNhdGUodm0uaWQpXCI+RHVwbGljYXRlPC9hPjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbSBjdXJzb3ItcG9pbnRlciB0ZXh0LWRhbmdlclwiIChjbGljayk9XCJvbkRlbGV0ZSh2bS5pZCwgdm0ubm9PZkFzc2lnbmVkKVwiPkRlbGV0ZTwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L3NlY3Rpb24+XHJcblxyXG4gICAgICA8IS0tIFZNIGdyaWQgdml3IC0tPlxyXG4gICAgICA8bmctdGVtcGxhdGUgI2dyaWRWaWV3PlxyXG4gICAgICAgIDxzZWN0aW9uIGlkPVwiZ3JpZC12aWV3XCIgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGd4LTYgZ3ktNCBtLTBcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCIgKm5nRm9yPVwibGV0IHZtIG9mIHZtTGlzdFwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkXCIgKGNsaWNrKT1cIm9uQ2xpY2tDYXJkKCRldmVudCwgdm0pXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1pbWdcIj5cclxuICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cInZtLmltZ1VybFwiIGFsdD1cIlZtIEltYWdlXCIgKGVycm9yKT1cIm9uSW1nRXJyb3IoJGV2ZW50KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWFjdGlvbiBkcm9wZG93blwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1saWdodFwiIHN0eWxlPVwicGFkZGluZzogMTJweCAyMXB4ICFpbXBvcnRhbnRcIiB0eXBlPVwiYnV0dG9uXCIgZGF0YS1icy10b2dnbGU9XCJkcm9wZG93blwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInZlcnRpY2FsRG90c1wiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxsaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkVkaXQodm0uaWQsIHZtLm5vT2ZBc3NpZ25lZCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICBFZGl0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZHJvcGRvd24taXRlbSBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvbkR1cGxpY2F0ZSh2bS5pZCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIER1cGxpY2F0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGxpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24taXRlbSBjdXJzb3ItcG9pbnRlciB0ZXh0LWRhbmdlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRGVsZXRlKHZtLmlkLCB2bS5ub09mQXNzaWduZWQpOyAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgRGVsZXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cImVsbGlwc2lzXCIgW25nYlRvb2x0aXBdPVwidm0ubmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IHZtLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhZGdlXCIgW25nQ2xhc3NdPVwidm0uc3RhdHVzXCIgcGxhY2VtZW50PVwic3RhcnRcIiBbbmdiVG9vbHRpcF09XCJnZXRUb29sdGlwVGV4dCh2bS5zdGF0dXMpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgdm0uc3RhdHVzIHwgdGl0bGVjYXNlIH19XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10YWdsaW5lXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHZtLndpZHRoLnZhbHVlIH19e3sgdm0ud2lkdGgudW5pdCB9fSB4IHt7IHZtLmhlaWdodC52YWx1ZSB9fXt7IHZtLmhlaWdodC51bml0IH19XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwidm0/LnR5cGVcIj4mIzgyMjY7PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICB7eyB2bS50eXBlIH19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L3NlY3Rpb24+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICA8IS0tIFBhZ2luYXRpb24gLS0+XHJcbiAgICAgIDxsaWItcGFnaW5hdGlvblxyXG4gICAgICAgIFtpdGVtc1BlclBhZ2VdPVwibGltaXRcIlxyXG4gICAgICAgIFtjdXJyZW50UGFnZV09XCJvZmZzZXRcIlxyXG4gICAgICAgIFt0b3RhbEl0ZW1zXT1cInRvdGFsSXRlbXNcIlxyXG4gICAgICAgIFtwYWdpbmF0aW9uU2l6ZXNdPVwicGFnaW5hdGlvblNpemVzXCJcclxuICAgICAgICBbcGFnZVNpemVdPVwicGFnaW5hdGlvblNpemUoKVwiXHJcbiAgICAgICAgKHBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgIChwYWdlU2l6ZUNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICA+XHJcbiAgICAgIDwvbGliLXBhZ2luYXRpb24+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG48L3NlY3Rpb24+XHJcblxyXG48bmctdGVtcGxhdGUgI3ZlcnRpY2FsRG90cz5cclxuICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjRcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgNCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICA8cGF0aFxyXG4gICAgICBkPVwiTTEgOUMxIDkuNTUyMjggMS40NDc3MSAxMCAyIDEwQzIuNTUyMjggMTAgMyA5LjU1MjI4IDMgOUMzIDguNDQ3NzIgMi41NTIyOCA4IDIgOEMxLjQ0NzcxIDggMSA4LjQ0NzcyIDEgOVpcIlxyXG4gICAgICBzdHJva2U9XCIjMTAxODI4XCJcclxuICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAvPlxyXG4gICAgPHBhdGhcclxuICAgICAgZD1cIk0wLjk5OTk5OSAxNkMwLjk5OTk5OSAxNi41NTIzIDEuNDQ3NzEgMTcgMiAxN0MyLjU1MjI4IDE3IDMgMTYuNTUyMyAzIDE2QzMgMTUuNDQ3NyAyLjU1MjI4IDE1IDIgMTVDMS40NDc3MSAxNSAwLjk5OTk5OSAxNS40NDc3IDAuOTk5OTk5IDE2WlwiXHJcbiAgICAgIHN0cm9rZT1cIiMxMDE4MjhcIlxyXG4gICAgICBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgIC8+XHJcbiAgICA8cGF0aFxyXG4gICAgICBkPVwiTTEgMkMxIDIuNTUyMjggMS40NDc3MiAzIDIgM0MyLjU1MjI4IDMgMyAyLjU1MjI4IDMgMkMzIDEuNDQ3NzIgMi41NTIyOCAxIDIgMUMxLjQ0NzcyIDEgMSAxLjQ0NzcyIDEgMlpcIlxyXG4gICAgICBzdHJva2U9XCIjMTAxODI4XCJcclxuICAgICAgc3Ryb2tlLXdpZHRoPVwiMlwiXHJcbiAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAvPlxyXG4gIDwvc3ZnPlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
@@ -0,0 +1,88 @@
1
+ import { Component } from '@angular/core';
2
+ import { Subject, finalize } from 'rxjs';
3
+ import * as FileSaver from 'file-saver';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "../../../services/store-builder.service";
6
+ import * as i2 from "@angular/forms";
7
+ import * as i3 from "@angular/common";
8
+ export class CadFilesComponent {
9
+ sbs;
10
+ storeName = '';
11
+ files = [];
12
+ hasSearched = false;
13
+ isLoading = false;
14
+ downloadingKey = null;
15
+ message = '';
16
+ messageType = 'success';
17
+ destroy$ = new Subject();
18
+ constructor(sbs) {
19
+ this.sbs = sbs;
20
+ }
21
+ onFetch() {
22
+ let storeName = (this.storeName || '').trim();
23
+ if (!storeName) {
24
+ this.showMessage('Please enter a store name.', 'error');
25
+ return;
26
+ }
27
+ this.isLoading = true;
28
+ this.hasSearched = true;
29
+ this.files = [];
30
+ this.message = '';
31
+ this.sbs
32
+ .getCadFiles(storeName)
33
+ .pipe(finalize(() => (this.isLoading = false)))
34
+ .subscribe({
35
+ next: (res) => {
36
+ this.files = res?.data?.files || [];
37
+ },
38
+ error: (err) => {
39
+ this.showMessage(err?.error?.error?.errMsg ||
40
+ err?.error?.error ||
41
+ err?.error?.message ||
42
+ 'Failed to fetch files.', 'error');
43
+ },
44
+ });
45
+ }
46
+ async onDownload(file) {
47
+ if (!file.url) {
48
+ this.showMessage('Download URL is not available for this file.', 'error');
49
+ return;
50
+ }
51
+ this.downloadingKey = file.key;
52
+ try {
53
+ const response = await fetch(file.url);
54
+ if (!response.ok) {
55
+ throw new Error(`HTTP ${response.status}`);
56
+ }
57
+ const blob = await response.blob();
58
+ FileSaver.saveAs(blob, file.name);
59
+ }
60
+ catch {
61
+ this.showMessage(`Failed to download ${file.name}.`, 'error');
62
+ }
63
+ finally {
64
+ this.downloadingKey = null;
65
+ }
66
+ }
67
+ formatSize(bytes) {
68
+ if (bytes == null || isNaN(bytes))
69
+ return '-';
70
+ return (bytes / (1024 * 1024)).toFixed(2) + ' MB';
71
+ }
72
+ showMessage(msg, type) {
73
+ this.message = msg;
74
+ this.messageType = type;
75
+ setTimeout(() => (this.message = ''), 5000);
76
+ }
77
+ ngOnDestroy() {
78
+ this.destroy$.next();
79
+ this.destroy$.complete();
80
+ }
81
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CadFilesComponent, deps: [{ token: i1.StoreBuilderService }], target: i0.ɵɵFactoryTarget.Component });
82
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: CadFilesComponent, selector: "lib-cad-files", ngImport: i0, template: "<section class=\"cad-files p-3\">\n <div class=\"card p-4\">\n <h5 class=\"mb-1\">CAD &amp; Kissflow Files</h5>\n <p class=\"text-muted small mb-3\">\n Enter a store name to list the uploaded CAD and Kissflow files (sorted).\n </p>\n\n <div class=\"d-flex gap-2 align-items-end mb-3 flex-wrap\">\n <div class=\"flex-grow-1\" style=\"min-width: 260px; max-width: 420px;\">\n <label class=\"form-label\">Store Name</label>\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"Enter store name\"\n [(ngModel)]=\"storeName\"\n (keyup.enter)=\"onFetch()\"\n [disabled]=\"isLoading\" />\n </div>\n\n <button\n class=\"btn btn-primary\"\n (click)=\"onFetch()\"\n [disabled]=\"isLoading || !storeName.trim()\">\n {{ isLoading ? 'Fetching...' : 'Fetch Files' }}\n </button>\n </div>\n\n @if (message) {\n <div\n class=\"alert\"\n [class.alert-success]=\"messageType === 'success'\"\n [class.alert-danger]=\"messageType === 'error'\">\n {{ message }}\n </div>\n }\n\n @if (isLoading) {\n <div class=\"text-muted\">Loading files...</div>\n } @else if (hasSearched && files.length === 0) {\n <div class=\"text-muted\">No files found for this store.</div>\n } @else if (files.length > 0) {\n <div class=\"table-responsive\">\n <table class=\"table table-sm align-middle\">\n <thead>\n <tr>\n <th>Name</th>\n <th>Key</th>\n <th>Uploaded At</th>\n <th>Size</th>\n <th class=\"text-end\">Action</th>\n </tr>\n </thead>\n <tbody>\n @for (file of files; track file.key) {\n <tr>\n <td>{{ file.name }}</td>\n <td class=\"text-muted small text-break\">{{ file.key }}</td>\n <td>{{ file.uploadedAt | date: 'medium' }}</td>\n <td>{{ formatSize(file.size) }}</td>\n <td class=\"text-end\">\n <button\n class=\"btn btn-sm btn-outline-primary\"\n (click)=\"onDownload(file)\"\n [disabled]=\"downloadingKey === file.key\">\n {{ downloadingKey === file.key ? 'Downloading...' : 'Download' }}\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n</section>\n", styles: [".cad-files .card{border:1px solid #e0e0e0}.cad-files .table th{font-size:.85rem;color:#475467;font-weight:600}.cad-files .table td{vertical-align:middle}.cad-files .table .text-break{word-break:break-all}\n"], dependencies: [{ kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "pipe", type: i3.DatePipe, name: "date" }] });
83
+ }
84
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CadFilesComponent, decorators: [{
85
+ type: Component,
86
+ args: [{ selector: 'lib-cad-files', template: "<section class=\"cad-files p-3\">\n <div class=\"card p-4\">\n <h5 class=\"mb-1\">CAD &amp; Kissflow Files</h5>\n <p class=\"text-muted small mb-3\">\n Enter a store name to list the uploaded CAD and Kissflow files (sorted).\n </p>\n\n <div class=\"d-flex gap-2 align-items-end mb-3 flex-wrap\">\n <div class=\"flex-grow-1\" style=\"min-width: 260px; max-width: 420px;\">\n <label class=\"form-label\">Store Name</label>\n <input\n type=\"text\"\n class=\"form-control\"\n placeholder=\"Enter store name\"\n [(ngModel)]=\"storeName\"\n (keyup.enter)=\"onFetch()\"\n [disabled]=\"isLoading\" />\n </div>\n\n <button\n class=\"btn btn-primary\"\n (click)=\"onFetch()\"\n [disabled]=\"isLoading || !storeName.trim()\">\n {{ isLoading ? 'Fetching...' : 'Fetch Files' }}\n </button>\n </div>\n\n @if (message) {\n <div\n class=\"alert\"\n [class.alert-success]=\"messageType === 'success'\"\n [class.alert-danger]=\"messageType === 'error'\">\n {{ message }}\n </div>\n }\n\n @if (isLoading) {\n <div class=\"text-muted\">Loading files...</div>\n } @else if (hasSearched && files.length === 0) {\n <div class=\"text-muted\">No files found for this store.</div>\n } @else if (files.length > 0) {\n <div class=\"table-responsive\">\n <table class=\"table table-sm align-middle\">\n <thead>\n <tr>\n <th>Name</th>\n <th>Key</th>\n <th>Uploaded At</th>\n <th>Size</th>\n <th class=\"text-end\">Action</th>\n </tr>\n </thead>\n <tbody>\n @for (file of files; track file.key) {\n <tr>\n <td>{{ file.name }}</td>\n <td class=\"text-muted small text-break\">{{ file.key }}</td>\n <td>{{ file.uploadedAt | date: 'medium' }}</td>\n <td>{{ formatSize(file.size) }}</td>\n <td class=\"text-end\">\n <button\n class=\"btn btn-sm btn-outline-primary\"\n (click)=\"onDownload(file)\"\n [disabled]=\"downloadingKey === file.key\">\n {{ downloadingKey === file.key ? 'Downloading...' : 'Download' }}\n </button>\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n }\n </div>\n</section>\n", styles: [".cad-files .card{border:1px solid #e0e0e0}.cad-files .table th{font-size:.85rem;color:#475467;font-weight:600}.cad-files .table td{vertical-align:middle}.cad-files .table .text-break{word-break:break-all}\n"] }]
87
+ }], ctorParameters: () => [{ type: i1.StoreBuilderService }] });
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FkLWZpbGVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLXN0b3JlLWJ1aWxkZXIvc3JjL2xpYi9jb21wb25lbnRzL3BsYW5vLXRvb2xzL2NhZC1maWxlcy9jYWQtZmlsZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvcGxhbm8tdG9vbHMvY2FkLWZpbGVzL2NhZC1maWxlcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxTQUFTLE1BQU0sWUFBWSxDQUFDOzs7OztBQWdCeEMsTUFBTSxPQUFPLGlCQUFpQjtJQWNSO0lBYnBCLFNBQVMsR0FBVyxFQUFFLENBQUM7SUFFdkIsS0FBSyxHQUFjLEVBQUUsQ0FBQztJQUN0QixXQUFXLEdBQVksS0FBSyxDQUFDO0lBRTdCLFNBQVMsR0FBWSxLQUFLLENBQUM7SUFDM0IsY0FBYyxHQUFrQixJQUFJLENBQUM7SUFFckMsT0FBTyxHQUFXLEVBQUUsQ0FBQztJQUNyQixXQUFXLEdBQXdCLFNBQVMsQ0FBQztJQUU1QixRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQUVoRCxZQUFvQixHQUF3QjtRQUF4QixRQUFHLEdBQUgsR0FBRyxDQUFxQjtJQUFHLENBQUM7SUFFaEQsT0FBTztRQUNMLElBQUksU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM5QyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2QsSUFBSSxDQUFDLFdBQVcsQ0FB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RlUsaUJBQWlCOzRGQUFqQixpQkFBaUIscURDbEI5Qix3Z0ZBMkVBOzs0RkR6RGEsaUJBQWlCO2tCQUw3QixTQUFTOytCQUNFLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgZmluYWxpemUgfSBmcm9tICdyeGpzJztcbmltcG9ydCAqIGFzIEZpbGVTYXZlciBmcm9tICdmaWxlLXNhdmVyJztcbmltcG9ydCB7IFN0b3JlQnVpbGRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9zdG9yZS1idWlsZGVyLnNlcnZpY2UnO1xuXG5pbnRlcmZhY2UgQ2FkRmlsZSB7XG4gIG5hbWU6IHN0cmluZztcbiAga2V5OiBzdHJpbmc7XG4gIHVwbG9hZGVkQXQ6IHN0cmluZztcbiAgc2l6ZTogbnVtYmVyO1xuICB1cmw6IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWNhZC1maWxlcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jYWQtZmlsZXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vY2FkLWZpbGVzLmNvbXBvbmVudC5zY3NzJyxcbn0pXG5leHBvcnQgY2xhc3MgQ2FkRmlsZXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBzdG9yZU5hbWU6IHN0cmluZyA9ICcnO1xuXG4gIGZpbGVzOiBDYWRGaWxlW10gPSBbXTtcbiAgaGFzU2VhcmNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBpc0xvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZG93bmxvYWRpbmdLZXk6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIG1lc3NhZ2U6IHN0cmluZyA9ICcnO1xuICBtZXNzYWdlVHlwZTogJ3N1Y2Nlc3MnIHwgJ2Vycm9yJyA9ICdzdWNjZXNzJztcblxuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHNiczogU3RvcmVCdWlsZGVyU2VydmljZSkge31cblxuICBvbkZldGNoKCkge1xuICAgIGxldCBzdG9yZU5hbWUgPSAodGhpcy5zdG9yZU5hbWUgfHwgJycpLnRyaW0oKTtcbiAgICBpZiAoIXN0b3JlTmFtZSkge1xuICAgICAgdGhpcy5zaG93TWVzc2FnZSgnUGxlYXNlIGVudGVyIGEgc3RvcmUgbmFtZS4nLCAnZXJyb3InKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5oYXNTZWFyY2hlZCA9IHRydWU7XG4gICAgdGhpcy5maWxlcyA9IFtdO1xuICAgIHRoaXMubWVzc2FnZSA9ICcnO1xuXG4gICAgdGhpcy5zYnNcbiAgICAgIC5nZXRDYWRGaWxlcyhzdG9yZU5hbWUpXG4gICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiAodGhpcy5pc0xvYWRpbmcgPSBmYWxzZSkpKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuZmlsZXMgPSByZXM/LmRhdGE/LmZpbGVzIHx8IFtdO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5zaG93TWVzc2FnZShcbiAgICAgICAgICAgIGVycj8uZXJyb3I/LmVycm9yPy5lcnJNc2cgfHxcbiAgICAgICAgICAgICAgZXJyPy5lcnJvcj8uZXJyb3IgfHxcbiAgICAgICAgICAgICAgZXJyPy5lcnJvcj8ubWVzc2FnZSB8fFxuICAgICAgICAgICAgICAnRmFpbGVkIHRvIGZldGNoIGZpbGVzLicsXG4gICAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIG9uRG93bmxvYWQoZmlsZTogQ2FkRmlsZSkge1xuICAgIGlmICghZmlsZS51cmwpIHtcbiAgICAgIHRoaXMuc2hvd01lc3NhZ2UoJ0Rvd25sb2FkIFVSTCBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIGZpbGUuJywgJ2Vycm9yJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kb3dubG9hZGluZ0tleSA9IGZpbGUua2V5O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGZpbGUudXJsKTtcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBIVFRQICR7cmVzcG9uc2Uuc3RhdHVzfWApO1xuICAgICAgfVxuICAgICAgY29uc3QgYmxvYiA9IGF3YWl0IHJlc3BvbnNlLmJsb2IoKTtcbiAgICAgIEZpbGVTYXZlci5zYXZlQXMoYmxvYiwgZmlsZS5uYW1lKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHRoaXMuc2hvd01lc3NhZ2UoYEZhaWxlZCB0byBkb3dubG9hZCAke2ZpbGUubmFtZX0uYCwgJ2Vycm9yJyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuZG93bmxvYWRpbmdLZXkgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGZvcm1hdFNpemUoYnl0ZXM6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKGJ5dGVzID09IG51bGwgfHwgaXNOYU4oYnl0ZXMpKSByZXR1cm4gJy0nO1xuICAgIHJldHVybiAoYnl0ZXMgLyAoMTAyNCAqIDEwMjQpKS50b0ZpeGVkKDIpICsgJyBNQic7XG4gIH1cblxuICBzaG93TWVzc2FnZShtc2c6IHN0cmluZywgdHlwZTogJ3N1Y2Nlc3MnIHwgJ2Vycm9yJykge1xuICAgIHRoaXMubWVzc2FnZSA9IG1zZztcbiAgICB0aGlzLm1lc3NhZ2VUeXBlID0gdHlwZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+ICh0aGlzLm1lc3NhZ2UgPSAnJyksIDUwMDApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG59XG4iLCI8c2VjdGlvbiBjbGFzcz1cImNhZC1maWxlcyBwLTNcIj5cbiAgPGRpdiBjbGFzcz1cImNhcmQgcC00XCI+XG4gICAgPGg1IGNsYXNzPVwibWItMVwiPkNBRCAmYW1wOyBLaXNzZmxvdyBGaWxlczwvaDU+XG4gICAgPHAgY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsIG1iLTNcIj5cbiAgICAgIEVudGVyIGEgc3RvcmUgbmFtZSB0byBsaXN0IHRoZSB1cGxvYWRlZCBDQUQgYW5kIEtpc3NmbG93IGZpbGVzIChzb3J0ZWQpLlxuICAgIDwvcD5cblxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZ2FwLTIgYWxpZ24taXRlbXMtZW5kIG1iLTMgZmxleC13cmFwXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTFcIiBzdHlsZT1cIm1pbi13aWR0aDogMjYwcHg7IG1heC13aWR0aDogNDIwcHg7XCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj5TdG9yZSBOYW1lPC9sYWJlbD5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHN0b3JlIG5hbWVcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwic3RvcmVOYW1lXCJcbiAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwib25GZXRjaCgpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNMb2FkaW5nXCIgLz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgKGNsaWNrKT1cIm9uRmV0Y2goKVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc0xvYWRpbmcgfHwgIXN0b3JlTmFtZS50cmltKClcIj5cbiAgICAgICAge3sgaXNMb2FkaW5nID8gJ0ZldGNoaW5nLi4uJyA6ICdGZXRjaCBGaWxlcycgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgQGlmIChtZXNzYWdlKSB7XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiYWxlcnRcIlxuICAgICAgICBbY2xhc3MuYWxlcnQtc3VjY2Vzc109XCJtZXNzYWdlVHlwZSA9PT0gJ3N1Y2Nlc3MnXCJcbiAgICAgICAgW2NsYXNzLmFsZXJ0LWRhbmdlcl09XCJtZXNzYWdlVHlwZSA9PT0gJ2Vycm9yJ1wiPlxuICAgICAgICB7eyBtZXNzYWdlIH19XG4gICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICBAaWYgKGlzTG9hZGluZykge1xuICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWRcIj5Mb2FkaW5nIGZpbGVzLi4uPC9kaXY+XG4gICAgfSBAZWxzZSBpZiAoaGFzU2VhcmNoZWQgJiYgZmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZFwiPk5vIGZpbGVzIGZvdW5kIGZvciB0aGlzIHN0b3JlLjwvZGl2PlxuICAgIH0gQGVsc2UgaWYgKGZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIHRhYmxlLXNtIGFsaWduLW1pZGRsZVwiPlxuICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgPHRoPk5hbWU8L3RoPlxuICAgICAgICAgICAgICA8dGg+S2V5PC90aD5cbiAgICAgICAgICAgICAgPHRoPlVwbG9hZGVkIEF0PC90aD5cbiAgICAgICAgICAgICAgPHRoPlNpemU8L3RoPlxuICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LWVuZFwiPkFjdGlvbjwvdGg+XG4gICAgICAgICAgICA8L3RyPlxuICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgQGZvciAoZmlsZSBvZiBmaWxlczsgdHJhY2sgZmlsZS5rZXkpIHtcbiAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgIDx0ZD57eyBmaWxlLm5hbWUgfX08L3RkPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGwgdGV4dC1icmVha1wiPnt7IGZpbGUua2V5IH19PC90ZD5cbiAgICAgICAgICAgICAgICA8dGQ+e3sgZmlsZS51cGxvYWRlZEF0IHwgZGF0ZTogJ21lZGl1bScgfX08L3RkPlxuICAgICAgICAgICAgICAgIDx0ZD57eyBmb3JtYXRTaXplKGZpbGUuc2l6ZSkgfX08L3RkPlxuICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtZW5kXCI+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRG93bmxvYWQoZmlsZSlcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZG93bmxvYWRpbmdLZXkgPT09IGZpbGUua2V5XCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGRvd25sb2FkaW5nS2V5ID09PSBmaWxlLmtleSA/ICdEb3dubG9hZGluZy4uLicgOiAnRG93bmxvYWQnIH19XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgIDwvdGFibGU+XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuPC9zZWN0aW9uPlxuIl19