@wavemaker/app-ng-runtime 11.8.0-next.141688 → 11.8.0-next.141689

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 (99) hide show
  1. package/build-task/bundles/index.umd.js +4 -4
  2. package/build-task/esm2022/advanced/carousel/carousel-template/carousel-template.build.mjs +3 -3
  3. package/build-task/esm2022/containers/repeat-template.build.mjs +3 -3
  4. package/build-task/fesm2022/index.mjs +4 -4
  5. package/build-task/fesm2022/index.mjs.map +1 -1
  6. package/components/advanced/carousel/bundles/index.umd.js +3 -2
  7. package/components/advanced/carousel/carousel-template/carousel-template.directive.d.ts +1 -1
  8. package/components/advanced/carousel/esm2022/carousel-template/carousel-template.directive.mjs +4 -3
  9. package/components/advanced/carousel/fesm2022/index.mjs +3 -2
  10. package/components/advanced/carousel/fesm2022/index.mjs.map +1 -1
  11. package/components/base/bundles/index.umd.js +45 -32
  12. package/components/base/directives/show-in-device.directive.d.ts +3 -6
  13. package/components/base/esm2022/directives/show-in-device.directive.mjs +12 -14
  14. package/components/base/esm2022/public_api.mjs +2 -1
  15. package/components/base/esm2022/widgets/common/base/base-field-validations.mjs +5 -7
  16. package/components/base/esm2022/widgets/common/base/base.component.mjs +22 -15
  17. package/components/base/esm2022/widgets/common/lazy-load/lazy-load.directive.mjs +13 -6
  18. package/components/base/esm2022/widgets/common/repeat-template/repeat-template.directive.mjs +4 -3
  19. package/components/base/fesm2022/index.mjs +45 -33
  20. package/components/base/fesm2022/index.mjs.map +1 -1
  21. package/components/base/public_api.d.ts +1 -0
  22. package/components/base/widgets/common/base/base.component.d.ts +18 -1
  23. package/components/base/widgets/common/lazy-load/lazy-load.directive.d.ts +2 -2
  24. package/components/base/widgets/common/repeat-template/repeat-template.directive.d.ts +1 -1
  25. package/components/basic/search/bundles/index.umd.js +10 -9
  26. package/components/basic/search/esm2022/search.component.mjs +11 -10
  27. package/components/basic/search/fesm2022/index.mjs +10 -9
  28. package/components/basic/search/fesm2022/index.mjs.map +1 -1
  29. package/components/data/form/bundles/index.umd.js +1 -1
  30. package/components/data/form/esm2022/form.component.mjs +2 -2
  31. package/components/data/form/fesm2022/index.mjs +1 -1
  32. package/components/data/form/fesm2022/index.mjs.map +1 -1
  33. package/components/data/list/bundles/index.umd.js +10 -7
  34. package/components/data/list/esm2022/list-item.directive.mjs +6 -1
  35. package/components/data/list/esm2022/list.component.mjs +7 -8
  36. package/components/data/list/fesm2022/index.mjs +11 -8
  37. package/components/data/list/fesm2022/index.mjs.map +1 -1
  38. package/components/data/list/list-item.directive.d.ts +4 -0
  39. package/components/data/pagination/bundles/index.umd.js +10 -9
  40. package/components/data/pagination/esm2022/pagination.component.mjs +11 -10
  41. package/components/data/pagination/fesm2022/index.mjs +10 -9
  42. package/components/data/pagination/fesm2022/index.mjs.map +1 -1
  43. package/components/data/table/bundles/index.umd.js +3 -1
  44. package/components/data/table/esm2022/table.component.mjs +4 -2
  45. package/components/data/table/fesm2022/index.mjs +3 -1
  46. package/components/data/table/fesm2022/index.mjs.map +1 -1
  47. package/components/input/color-picker/bundles/index.umd.js +2 -2
  48. package/components/input/color-picker/esm2022/color-picker.component.mjs +3 -3
  49. package/components/input/color-picker/fesm2022/index.mjs +2 -2
  50. package/components/input/color-picker/fesm2022/index.mjs.map +1 -1
  51. package/components/input/default/bundles/index.umd.js +37 -32
  52. package/components/input/default/esm2022/checkbox/checkbox.component.mjs +6 -5
  53. package/components/input/default/esm2022/select/select.component.mjs +6 -5
  54. package/components/input/default/esm2022/text/base/base-input.mjs +3 -2
  55. package/components/input/default/esm2022/text/calendar/input-calendar.component.mjs +5 -4
  56. package/components/input/default/esm2022/text/color/input-color.component.mjs +5 -4
  57. package/components/input/default/fesm2022/index.mjs +37 -32
  58. package/components/input/default/fesm2022/index.mjs.map +1 -1
  59. package/components/input/default/text/base/base-input.d.ts +1 -0
  60. package/components/input/epoch/bundles/index.umd.js +13 -11
  61. package/components/input/epoch/esm2022/date/date.component.mjs +2 -2
  62. package/components/input/epoch/esm2022/date-time/date-time.component.mjs +6 -5
  63. package/components/input/epoch/esm2022/time/time.component.mjs +6 -5
  64. package/components/input/epoch/fesm2022/index.mjs +13 -11
  65. package/components/input/epoch/fesm2022/index.mjs.map +1 -1
  66. package/components/input/rating/bundles/index.umd.js +12 -10
  67. package/components/input/rating/esm2022/rating.component.mjs +13 -11
  68. package/components/input/rating/fesm2022/index.mjs +12 -10
  69. package/components/input/rating/fesm2022/index.mjs.map +1 -1
  70. package/components/input/slider/bundles/index.umd.js +4 -3
  71. package/components/input/slider/esm2022/slider.component.mjs +5 -4
  72. package/components/input/slider/fesm2022/index.mjs +4 -3
  73. package/components/input/slider/fesm2022/index.mjs.map +1 -1
  74. package/components/navigation/menu/bundles/index.umd.js +10 -12
  75. package/components/navigation/menu/esm2022/menu.module.mjs +3 -2
  76. package/components/navigation/menu/esm2022/nav/nav-item/nav-item.directive.mjs +3 -2
  77. package/components/navigation/menu/esm2022/nav/nav.component.mjs +8 -12
  78. package/components/navigation/menu/fesm2022/index.mjs +11 -13
  79. package/components/navigation/menu/fesm2022/index.mjs.map +1 -1
  80. package/components/navigation/menu/nav/nav-item/nav-item.directive.d.ts +1 -1
  81. package/components/navigation/menu/nav/nav.component.d.ts +1 -2
  82. package/core/bundles/index.umd.js +23 -0
  83. package/core/esm2022/public_api.mjs +2 -1
  84. package/core/esm2022/services/custom-icons-loader.service.mjs +26 -0
  85. package/core/fesm2022/index.mjs +25 -3
  86. package/core/fesm2022/index.mjs.map +1 -1
  87. package/core/public_api.d.ts +1 -0
  88. package/core/services/custom-icons-loader.service.d.ts +7 -0
  89. package/package-lock.json +2 -2
  90. package/package.json +1 -1
  91. package/runtime/base/bundles/index.umd.js +19 -8
  92. package/runtime/base/components/app-component/app.component.d.ts +3 -1
  93. package/runtime/base/directives/accessroles.directive.d.ts +4 -3
  94. package/runtime/base/esm2022/components/app-component/app.component.mjs +9 -5
  95. package/runtime/base/esm2022/directives/accessroles.directive.mjs +14 -7
  96. package/runtime/base/esm2022/services/i18n.service.mjs +2 -2
  97. package/runtime/base/fesm2022/index.mjs +20 -9
  98. package/runtime/base/fesm2022/index.mjs.map +1 -1
  99. package/scripts/datatable/datatable.js +1 -1
@@ -9,6 +9,7 @@ import * as i2 from "@angular/forms";
9
9
  import * as i3 from "ngx-bootstrap/pagination";
10
10
  const _c0 = ["wmPagination", ""];
11
11
  const _c1 = a0 => ({ "disabled": a0 });
12
+ const _c2 = () => ({ standalone: true });
12
13
  function PaginationComponent_ul_0_li_31_Template(rf, ctx) { if (rf & 1) {
13
14
  i0.ɵɵelementStart(0, "li", 23)(1, "a", 24);
14
15
  i0.ɵɵtext(2);
@@ -65,36 +66,36 @@ function PaginationComponent_ul_0_Template(rf, ctx) { if (rf & 1) {
65
66
  const ctx_r1 = i0.ɵɵnextContext();
66
67
  i0.ɵɵclassMapInterpolate1("pagination advanced ", ctx_r1.navigationClass, "");
67
68
  i0.ɵɵadvance();
68
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(25, _c1, ctx_r1.isDisableFirst));
69
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(26, _c1, ctx_r1.isDisableFirst));
69
70
  i0.ɵɵadvance();
70
71
  i0.ɵɵproperty("title", ctx_r1.appLocale.LABEL_FIRST);
71
72
  i0.ɵɵattribute("aria-disabled", ctx_r1.isDisableFirst);
72
73
  i0.ɵɵadvance(4);
73
74
  i0.ɵɵtextInterpolate1("Go to first page ", ctx_r1.isDisableFirst ? " , Disabled" : "", "");
74
75
  i0.ɵɵadvance();
75
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(27, _c1, ctx_r1.isDisablePrevious));
76
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(28, _c1, ctx_r1.isDisablePrevious));
76
77
  i0.ɵɵadvance();
77
78
  i0.ɵɵproperty("title", ctx_r1.appLocale.LABEL_PREVIOUS);
78
79
  i0.ɵɵattribute("aria-disabled", ctx_r1.isDisablePrevious);
79
80
  i0.ɵɵadvance(4);
80
81
  i0.ɵɵtextInterpolate1("Go to previous page ", ctx_r1.isDisablePrevious ? ", Disabled" : "", "");
81
82
  i0.ɵɵadvance(3);
82
- i0.ɵɵproperty("disabled", ctx_r1.isDisableCurrent);
83
83
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.dn.currentPage);
84
+ i0.ɵɵproperty("disabled", ctx_r1.isDisableCurrent)("ngModelOptions", i0.ɵɵpureFunction0(30, _c2));
84
85
  i0.ɵɵattribute("aria-label", "Showing Page " + ctx_r1.dn.currentPage + " of " + ctx_r1.pageCount);
85
86
  i0.ɵɵadvance(2);
86
87
  i0.ɵɵproperty("hidden", ctx_r1.isDisableCount);
87
88
  i0.ɵɵadvance();
88
89
  i0.ɵɵtextInterpolate1(" / ", ctx_r1.pageCount, "");
89
90
  i0.ɵɵadvance();
90
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(29, _c1, ctx_r1.isDisableNext));
91
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(31, _c1, ctx_r1.isDisableNext));
91
92
  i0.ɵɵadvance();
92
93
  i0.ɵɵproperty("title", ctx_r1.appLocale.LABEL_NEXT);
93
94
  i0.ɵɵattribute("aria-disabled", ctx_r1.isDisableNext);
94
95
  i0.ɵɵadvance(4);
95
96
  i0.ɵɵtextInterpolate1("Go to next page ", ctx_r1.isDisableNext ? " , Disabled" : "", "");
96
97
  i0.ɵɵadvance();
97
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(31, _c1, ctx_r1.isDisableLast));
98
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(33, _c1, ctx_r1.isDisableLast));
98
99
  i0.ɵɵadvance();
99
100
  i0.ɵɵproperty("title", ctx_r1.appLocale.LABEL_LAST);
100
101
  i0.ɵɵattribute("aria-disabled", ctx_r1.isDisableLast);
@@ -153,7 +154,7 @@ function PaginationComponent_pagination_2_Template(rf, ctx) { if (rf & 1) {
153
154
  const pageTemplate_r5 = i0.ɵɵreference(5);
154
155
  const prevTemplate_r6 = i0.ɵɵreference(7);
155
156
  const nextTemplate_r7 = i0.ɵɵreference(9);
156
- i0.ɵɵproperty("ngClass", ctx_r1.navigationClass)("itemsPerPage", ctx_r1.maxResults)("totalItems", ctx_r1.dataSize)("ngModel", ctx_r1.dn.currentPage)("boundaryLinks", ctx_r1.boundarylinks)("maxSize", ctx_r1.maxsize)("directionLinks", ctx_r1.directionlinks)("customPreviousTemplate", prevTemplate_r6)("customNextTemplate", nextTemplate_r7)("customPageTemplate", pageTemplate_r5);
157
+ i0.ɵɵproperty("ngClass", ctx_r1.navigationClass)("itemsPerPage", ctx_r1.maxResults)("totalItems", ctx_r1.dataSize)("ngModelOptions", i0.ɵɵpureFunction0(12, _c2))("ngModel", ctx_r1.dn.currentPage)("boundaryLinks", ctx_r1.boundarylinks)("maxSize", ctx_r1.maxsize)("directionLinks", ctx_r1.directionlinks)("customPreviousTemplate", prevTemplate_r6)("customNextTemplate", nextTemplate_r7)("customPageTemplate", pageTemplate_r5);
157
158
  i0.ɵɵattribute("aria-label", "Showing Page " + ctx_r1.dn.currentPage + " of " + ctx_r1.pageCount + " pages");
158
159
  } }
159
160
  function PaginationComponent_ul_3_Template(rf, ctx) { if (rf & 1) {
@@ -734,8 +735,8 @@ export class PaginationComponent extends StylableComponent {
734
735
  static { this.ɵfac = function PaginationComponent_Factory(t) { return new (t || PaginationComponent)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(WidgetRef, 4), i0.ɵɵdirectiveInject('EXPLICIT_CONTEXT', 8)); }; }
735
736
  static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PaginationComponent, selectors: [["", "wmPagination", ""]], outputs: { resultEmitter: "resultEmitter", maxResultsEmitter: "maxResultsEmitter" }, features: [i0.ɵɵProvidersFeature([
736
737
  provideAsWidgetRef(PaginationComponent)
737
- ]), i0.ɵɵInheritDefinitionFeature], attrs: _c0, decls: 10, vars: 4, consts: [["pageTemplate", ""], ["prevTemplate", ""], ["nextTemplate", ""], [3, "class", 4, "ngIf"], ["class", "pagination basic", "role", "navigation", "firstText", "Firtst", "lastText", "Last", 3, "ngClass", "itemsPerPage", "totalItems", "ngModel", "boundaryLinks", "maxSize", "directionLinks", "customPreviousTemplate", "customNextTemplate", "customPageTemplate", "pageChanged", 4, "ngIf"], ["class", "pagination", 4, "ngIf"], [3, "ngClass"], ["name", "first", "href", "javascript:void(0);", 3, "click", "title"], ["aria-hidden", "true"], [1, "wi", "wi-first-page"], [1, "sr-only"], ["name", "prev", "href", "javascript:void(0);", 3, "click", "title"], [1, "wi", "wi-chevron-left"], [1, "pagecount", "disabled"], ["href", "javascript:void(0);"], ["type", "number", 1, "form-control", 3, "ngModelChange", "keydown", "change", "disabled", "ngModel"], [1, "disabled"], [3, "hidden"], ["name", "next", "href", "javascript:void(0);", 3, "click", "title"], [1, "wi", "wi-chevron-right"], ["name", "last", "href", "javascript:void(0);", 3, "click", "title"], [1, "wi", "wi-last-page"], ["class", "totalcount disabled", 4, "ngIf"], [1, "totalcount", "disabled"], ["href", "javascript:void(0);", "tabindex", "-1", "aria-disabled", "true"], [1, "previous", 3, "ngClass"], ["href", "javascript:void(0);", 3, "click"], [1, "next", 3, "ngClass"], ["role", "navigation", "firstText", "Firtst", "lastText", "Last", 1, "pagination", "basic", 3, "pageChanged", "ngClass", "itemsPerPage", "totalItems", "ngModel", "boundaryLinks", "maxSize", "directionLinks", "customPreviousTemplate", "customNextTemplate", "customPageTemplate"], [1, "pagination"], [1, "totalcount", "disabled", "basiccount"], ["class", "sr-only", 4, "ngIf"]], template: function PaginationComponent_Template(rf, ctx) { if (rf & 1) {
738
- i0.ɵɵtemplate(0, PaginationComponent_ul_0_Template, 32, 33, "ul", 3)(1, PaginationComponent_ul_1_Template, 15, 15, "ul", 3)(2, PaginationComponent_pagination_2_Template, 1, 11, "pagination", 4)(3, PaginationComponent_ul_3_Template, 4, 2, "ul", 5)(4, PaginationComponent_ng_template_4_Template, 4, 4, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor)(6, PaginationComponent_ng_template_6_Template, 2, 2, "ng-template", null, 1, i0.ɵɵtemplateRefExtractor)(8, PaginationComponent_ng_template_8_Template, 2, 2, "ng-template", null, 2, i0.ɵɵtemplateRefExtractor);
738
+ ]), i0.ɵɵInheritDefinitionFeature], attrs: _c0, decls: 10, vars: 4, consts: [["pageTemplate", ""], ["prevTemplate", ""], ["nextTemplate", ""], [3, "class", 4, "ngIf"], ["class", "pagination basic", "role", "navigation", "firstText", "Firtst", "lastText", "Last", 3, "ngClass", "itemsPerPage", "totalItems", "ngModelOptions", "ngModel", "boundaryLinks", "maxSize", "directionLinks", "customPreviousTemplate", "customNextTemplate", "customPageTemplate", "pageChanged", 4, "ngIf"], ["class", "pagination", 4, "ngIf"], [3, "ngClass"], ["name", "first", "href", "javascript:void(0);", 3, "click", "title"], ["aria-hidden", "true"], [1, "wi", "wi-first-page"], [1, "sr-only"], ["name", "prev", "href", "javascript:void(0);", 3, "click", "title"], [1, "wi", "wi-chevron-left"], [1, "pagecount", "disabled"], ["href", "javascript:void(0);"], ["type", "number", 1, "form-control", 3, "ngModelChange", "keydown", "change", "ngModel", "disabled", "ngModelOptions"], [1, "disabled"], [3, "hidden"], ["name", "next", "href", "javascript:void(0);", 3, "click", "title"], [1, "wi", "wi-chevron-right"], ["name", "last", "href", "javascript:void(0);", 3, "click", "title"], [1, "wi", "wi-last-page"], ["class", "totalcount disabled", 4, "ngIf"], [1, "totalcount", "disabled"], ["href", "javascript:void(0);", "tabindex", "-1", "aria-disabled", "true"], [1, "previous", 3, "ngClass"], ["href", "javascript:void(0);", 3, "click"], [1, "next", 3, "ngClass"], ["role", "navigation", "firstText", "Firtst", "lastText", "Last", 1, "pagination", "basic", 3, "pageChanged", "ngClass", "itemsPerPage", "totalItems", "ngModelOptions", "ngModel", "boundaryLinks", "maxSize", "directionLinks", "customPreviousTemplate", "customNextTemplate", "customPageTemplate"], [1, "pagination"], [1, "totalcount", "disabled", "basiccount"], ["class", "sr-only", 4, "ngIf"]], template: function PaginationComponent_Template(rf, ctx) { if (rf & 1) {
739
+ i0.ɵɵtemplate(0, PaginationComponent_ul_0_Template, 32, 35, "ul", 3)(1, PaginationComponent_ul_1_Template, 15, 15, "ul", 3)(2, PaginationComponent_pagination_2_Template, 1, 13, "pagination", 4)(3, PaginationComponent_ul_3_Template, 4, 2, "ul", 5)(4, PaginationComponent_ng_template_4_Template, 4, 4, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor)(6, PaginationComponent_ng_template_6_Template, 2, 2, "ng-template", null, 1, i0.ɵɵtemplateRefExtractor)(8, PaginationComponent_ng_template_8_Template, 2, 2, "ng-template", null, 2, i0.ɵɵtemplateRefExtractor);
739
740
  } if (rf & 2) {
740
741
  i0.ɵɵproperty("ngIf", ctx.navcontrols === "Classic");
741
742
  i0.ɵɵadvance();
@@ -750,7 +751,7 @@ export class PaginationComponent extends StylableComponent {
750
751
  type: Component,
751
752
  args: [{ selector: '[wmPagination]', providers: [
752
753
  provideAsWidgetRef(PaginationComponent)
753
- ], template: "\n<ul class=\"pagination advanced {{navigationClass}}\" *ngIf=\"navcontrols === 'Classic'\">\n <li [ngClass]=\"{'disabled':isDisableFirst}\">\n <a [title]=\"appLocale.LABEL_FIRST\" name=\"first\" href=\"javascript:void(0);\"\n [attr.aria-disabled]=\"isDisableFirst\"\n (click)=\"navigatePage('first', $event)\">\n <span aria-hidden=\"true\"><i class=\"wi wi-first-page\"></i></span>\n <span class=\"sr-only\">Go to first page {{ isDisableFirst ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n <li [ngClass]=\"{'disabled':isDisablePrevious}\">\n <a [title]=\"appLocale.LABEL_PREVIOUS\" name=\"prev\" href=\"javascript:void(0);\"\n [attr.aria-disabled]=\"isDisablePrevious\"\n (click)=\"navigatePage('prev', $event)\">\n <span aria-hidden=\"true\"><i class=\"wi wi-chevron-left\"></i></span>\n <span class=\"sr-only\">Go to previous page {{ isDisablePrevious ? ', Disabled' : ''}}</span>\n </a>\n </li>\n <li class=\"pagecount disabled\">\n <a href=\"javascript:void(0);\">\n <input type=\"number\" [disabled]=\"isDisableCurrent\" [(ngModel)]=\"dn.currentPage\" [attr.aria-label]=\"'Showing Page ' + dn.currentPage + ' of ' + pageCount\"\n (keydown)=\"onKeyDown($event)\" (change)=\"onModelChange($event)\" class=\"form-control\"/>\n </a>\n </li>\n <li class=\"disabled\">\n <a [hidden]=\"isDisableCount\"> / {{pageCount}}</a>\n </li>\n <li [ngClass]=\"{'disabled':isDisableNext}\">\n <a [title]=\"appLocale.LABEL_NEXT\" name=\"next\" href=\"javascript:void(0);\"\n [attr.aria-disabled]=\"isDisableNext\"\n (click)=\"navigatePage('next', $event)\">\n <span aria-hidden=\"true\"><i class=\"wi wi-chevron-right\"></i></span>\n <span class=\"sr-only\">Go to next page {{ isDisableNext ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n <li [ngClass]=\"{'disabled':isDisableLast}\">\n <a [title]=\"appLocale.LABEL_LAST\" name=\"last\" href=\"javascript:void(0);\"\n [attr.aria-disabled]=\"isDisableLast\"\n (click)=\"navigatePage('last', $event)\">\n <span aria-hidden=\"true\"><i class=\"wi wi-last-page\"></i></span>\n <span class=\"sr-only\">Go to last page {{ isDisableLast ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n <li *ngIf=\"showrecordcount\" class=\"totalcount disabled\">\n <a href=\"javascript:void(0);\" tabindex=\"-1\" aria-disabled=\"true\">{{appLocale.LABEL_TOTAL_RECORDS}}: {{dataSize}}</a>\n </li>\n</ul>\n<ul class=\"pager {{navigationClass}}\" *ngIf=\"navcontrols === 'Pager'\">\n <li class=\"previous\" [ngClass]=\"{'disabled':isDisablePrevious}\">\n <a href=\"javascript:void(0);\" (click)=\"navigatePage('prev', $event)\"\n [attr.aria-disabled]=\"isDisablePrevious\">\n <span aria-hidden=\"true\"><i class=\"wi wi-chevron-left\"></i></span>\n {{appLocale.LABEL_PREVIOUS}}\n <span class=\"sr-only\">{{ isDisablePrevious ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n <li class=\"next\" [ngClass]=\"{'disabled':isDisableNext}\">\n <a href=\"javascript:void(0);\" (click)=\"navigatePage('next', $event)\"\n [attr.aria-disabled]=\"isDisableNext\">\n <span aria-hidden=\"true\"><i class=\"wi wi-chevron-right\"></i></span>\n {{appLocale.LABEL_NEXT}}\n <span class=\"sr-only\">{{ isDisableNext ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n</ul>\n\n<pagination class=\"pagination basic\" [ngClass]=\"navigationClass\" *ngIf=\"navcontrols === 'Basic'\" role=\"navigation\"\n [itemsPerPage]=\"maxResults\" [totalItems]=\"dataSize\"\n [ngModel]=\"dn.currentPage\" (pageChanged)=\"pageChanged($event)\"\n [attr.aria-label]=\"'Showing Page ' + dn.currentPage + ' of ' + pageCount + ' pages'\"\n [boundaryLinks]=\"boundarylinks\" [maxSize]=\"maxsize\"\n [directionLinks]=\"directionlinks\"\n firstText=\"Firtst\" lastText=\"Last\"\n [customPreviousTemplate]=\"prevTemplate\"\n [customNextTemplate]=\"nextTemplate\"\n [customPageTemplate]=\"pageTemplate\"></pagination>\n\n<ul *ngIf=\"navcontrols === 'Basic' && showrecordcount\" class=\"pagination\">\n <li class=\"totalcount disabled basiccount\">\n <a href=\"javascript:void(0);\" tabindex=\"-1\" aria-disabled=\"true\">{{appLocale.LABEL_TOTAL_RECORDS}}: {{dataSize}}</a>\n </li>\n</ul>\n\n<ng-template #pageTemplate let-page>\n <span class=\"sr-only\" [attr.data-isacitvepage]=\"page.active\">{{'Page '}}</span>\n {{page.number}}\n <span class=\"sr-only\" *ngIf=\"page.active\"> {{', Showing page ' + page.number + ' of ' + pageCount}}</span>\n</ng-template>\n<ng-template #prevTemplate let-disabled=\"disabled\">\n <span class=\"sr-only\" [attr.data-isdisabled]=\"disabled\">Go to Previous page {{disabled ? ', Disabled' : ''}}</span>\n</ng-template>\n<ng-template #nextTemplate let-disabled=\"disabled\">\n <span class=\"sr-only\" [attr.data-isdisabled]=\"disabled\">Go to Next page {{disabled ? ', Disabled' : ''}}</span>\n</ng-template>\n" }]
754
+ ], template: "\n<ul class=\"pagination advanced {{navigationClass}}\" *ngIf=\"navcontrols === 'Classic'\">\n <li [ngClass]=\"{'disabled':isDisableFirst}\">\n <a [title]=\"appLocale.LABEL_FIRST\" name=\"first\" href=\"javascript:void(0);\"\n [attr.aria-disabled]=\"isDisableFirst\"\n (click)=\"navigatePage('first', $event)\">\n <span aria-hidden=\"true\"><i class=\"wi wi-first-page\"></i></span>\n <span class=\"sr-only\">Go to first page {{ isDisableFirst ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n <li [ngClass]=\"{'disabled':isDisablePrevious}\">\n <a [title]=\"appLocale.LABEL_PREVIOUS\" name=\"prev\" href=\"javascript:void(0);\"\n [attr.aria-disabled]=\"isDisablePrevious\"\n (click)=\"navigatePage('prev', $event)\">\n <span aria-hidden=\"true\"><i class=\"wi wi-chevron-left\"></i></span>\n <span class=\"sr-only\">Go to previous page {{ isDisablePrevious ? ', Disabled' : ''}}</span>\n </a>\n </li>\n <li class=\"pagecount disabled\">\n <a href=\"javascript:void(0);\">\n <input [(ngModel)]=\"dn.currentPage\" [attr.aria-label]=\"'Showing Page ' + dn.currentPage + ' of ' + pageCount\" [disabled]=\"isDisableCurrent\"\n [ngModelOptions]=\"{standalone: true}\"\n type=\"number\"\n (keydown)=\"onKeyDown($event)\" (change)=\"onModelChange($event)\" class=\"form-control\"/>\n </a>\n </li>\n <li class=\"disabled\">\n <a [hidden]=\"isDisableCount\"> / {{pageCount}}</a>\n </li>\n <li [ngClass]=\"{'disabled':isDisableNext}\">\n <a [title]=\"appLocale.LABEL_NEXT\" name=\"next\" href=\"javascript:void(0);\"\n [attr.aria-disabled]=\"isDisableNext\"\n (click)=\"navigatePage('next', $event)\">\n <span aria-hidden=\"true\"><i class=\"wi wi-chevron-right\"></i></span>\n <span class=\"sr-only\">Go to next page {{ isDisableNext ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n <li [ngClass]=\"{'disabled':isDisableLast}\">\n <a [title]=\"appLocale.LABEL_LAST\" name=\"last\" href=\"javascript:void(0);\"\n [attr.aria-disabled]=\"isDisableLast\"\n (click)=\"navigatePage('last', $event)\">\n <span aria-hidden=\"true\"><i class=\"wi wi-last-page\"></i></span>\n <span class=\"sr-only\">Go to last page {{ isDisableLast ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n <li *ngIf=\"showrecordcount\" class=\"totalcount disabled\">\n <a href=\"javascript:void(0);\" tabindex=\"-1\" aria-disabled=\"true\">{{appLocale.LABEL_TOTAL_RECORDS}}: {{dataSize}}</a>\n </li>\n</ul>\n<ul class=\"pager {{navigationClass}}\" *ngIf=\"navcontrols === 'Pager'\">\n <li class=\"previous\" [ngClass]=\"{'disabled':isDisablePrevious}\">\n <a href=\"javascript:void(0);\" (click)=\"navigatePage('prev', $event)\"\n [attr.aria-disabled]=\"isDisablePrevious\">\n <span aria-hidden=\"true\"><i class=\"wi wi-chevron-left\"></i></span>\n {{appLocale.LABEL_PREVIOUS}}\n <span class=\"sr-only\">{{ isDisablePrevious ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n <li class=\"next\" [ngClass]=\"{'disabled':isDisableNext}\">\n <a href=\"javascript:void(0);\" (click)=\"navigatePage('next', $event)\"\n [attr.aria-disabled]=\"isDisableNext\">\n <span aria-hidden=\"true\"><i class=\"wi wi-chevron-right\"></i></span>\n {{appLocale.LABEL_NEXT}}\n <span class=\"sr-only\">{{ isDisableNext ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n</ul>\n\n<pagination class=\"pagination basic\" [ngClass]=\"navigationClass\" *ngIf=\"navcontrols === 'Basic'\" role=\"navigation\"\n [itemsPerPage]=\"maxResults\" [totalItems]=\"dataSize\"\n (pageChanged)=\"pageChanged($event)\" [ngModelOptions]=\"{standalone:true}\" [ngModel]=\"dn.currentPage\"\n [attr.aria-label]=\"'Showing Page ' + dn.currentPage + ' of ' + pageCount + ' pages'\"\n [boundaryLinks]=\"boundarylinks\" [maxSize]=\"maxsize\"\n [directionLinks]=\"directionlinks\"\n firstText=\"Firtst\" lastText=\"Last\"\n [customPreviousTemplate]=\"prevTemplate\"\n [customNextTemplate]=\"nextTemplate\"\n [customPageTemplate]=\"pageTemplate\"></pagination>\n\n<ul *ngIf=\"navcontrols === 'Basic' && showrecordcount\" class=\"pagination\">\n <li class=\"totalcount disabled basiccount\">\n <a href=\"javascript:void(0);\" tabindex=\"-1\" aria-disabled=\"true\">{{appLocale.LABEL_TOTAL_RECORDS}}: {{dataSize}}</a>\n </li>\n</ul>\n\n<ng-template #pageTemplate let-page>\n <span class=\"sr-only\" [attr.data-isacitvepage]=\"page.active\">{{'Page '}}</span>\n {{page.number}}\n <span class=\"sr-only\" *ngIf=\"page.active\"> {{', Showing page ' + page.number + ' of ' + pageCount}}</span>\n</ng-template>\n<ng-template #prevTemplate let-disabled=\"disabled\">\n <span class=\"sr-only\" [attr.data-isdisabled]=\"disabled\">Go to Previous page {{disabled ? ', Disabled' : ''}}</span>\n</ng-template>\n<ng-template #nextTemplate let-disabled=\"disabled\">\n <span class=\"sr-only\" [attr.data-isdisabled]=\"disabled\">Go to Next page {{disabled ? ', Disabled' : ''}}</span>\n</ng-template>\n" }]
754
755
  }], () => [{ type: i0.Injector }, { type: undefined, decorators: [{
755
756
  type: SkipSelf
756
757
  }, {
@@ -767,4 +768,4 @@ export class PaginationComponent extends StylableComponent {
767
768
  type: Output
768
769
  }] }); })();
769
770
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PaginationComponent, { className: "PaginationComponent", filePath: "pagination.component.ts", lineNumber: 41 }); })();
770
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvZGF0YS9wYWdpbmF0aW9uL3NyYy9wYWdpbmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL3BhZ2luYXRpb24vc3JjL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFpQixRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFbkgsT0FBTyxFQUNILFVBQVUsRUFDVixNQUFNLEVBQ04sWUFBWSxFQUNaLFVBQVUsRUFDVixRQUFRLEVBQ1IsU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1osTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxnQ0FBZ0MsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ2hLLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUMsTUFBTSxXQUFXLENBQUM7Ozs7Ozs7O0lDOEJuRSxBQURKLDhCQUF3RCxZQUNhO0lBQUEsWUFBK0M7SUFDcEgsQUFEb0gsaUJBQUksRUFDbkg7OztJQURnRSxlQUErQztJQUEvQywwRkFBK0M7Ozs7SUF6Q2hILEFBREosQUFESiwwQkFBc0YsWUFDdEMsV0FHRztJQUF4QywrS0FBUyxvQkFBYSxPQUFPLFNBQVMsS0FBQztJQUN0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QUFLLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN4QyxDQUFDO0lBQ0wsQ0FBQztJQUVELGVBQWU7UUFDWCxNQUFNLGNBQWMsR0FBSSxJQUFJLENBQUMsYUFBNEIsQ0FBQztRQUMxRCxjQUFjLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDL0IsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzVCLENBQUMsQ0FBQztJQUNOLENBQUM7b0ZBcGpCUSxtQkFBbUIsMERBd0VtQixTQUFTLDJCQUF5QixrQkFBa0I7b0VBeEUxRixtQkFBbUIsK0pBSmpCO2dCQUNQLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDO2FBQzFDO1lDcURMLEFBSEEsQUFMQSxBQU5BLEFBWEEsQUFuQkEsQUE5Q0Esb0VBQXNGLHVEQThDaEIsc0VBNEJ0QixxREFFMEIsd0dBTXRDLHdHQUtlLHdHQUdBOztZQTFGRSxvREFBK0I7WUE4QzdDLGNBQTZCO1lBQTdCLGtEQUE2QjtZQW1CRixjQUE2QjtZQUE3QixrREFBNkI7WUFXMUYsY0FBZ0Q7WUFBaEQseUVBQWdEOzs7aUZEckN4QyxtQkFBbUI7Y0FQL0IsU0FBUzsyQkFDSSxnQkFBZ0IsYUFFZjtvQkFDUCxrQkFBa0IscUJBQXFCO2lCQUMxQzs7c0JBMEUyQixRQUFROztzQkFBSSxNQUFNO3VCQUFDLFNBQVM7O3NCQUFrQixNQUFNO3VCQUFDLGtCQUFrQjs7c0JBQUcsUUFBUTtxQkF0RXBHLGFBQWE7a0JBQXRCLE1BQU07WUFDRyxpQkFBaUI7a0JBQTFCLE1BQU07O2tGQUhFLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5qZWN0b3IsIE91dHB1dCwgU2tpcFNlbGYsIEFmdGVyVmlld0luaXQsIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtcbiAgICAkYXBwRGlnZXN0LFxuICAgICR3YXRjaCxcbiAgICBBcHBDb25zdGFudHMsXG4gICAgRGF0YVNvdXJjZSxcbiAgICBkZWJvdW5jZSxcbiAgICBpc0RlZmluZWQsXG4gICAgc3dpdGNoQ2xhc3MsXG4gICAgdHJpZ2dlckZuXG59IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7IERFQk9VTkNFX1RJTUVTLCBnZXRPcmRlckJ5RXhwciwgcHJvdmlkZUFzV2lkZ2V0UmVmLCBTdHlsYWJsZUNvbXBvbmVudCwgc3R5bGVyLCBXaWRnZXRSZWYsIHVuc3VwcG9ydGVkU3RhdGVQZXJzaXN0ZW5jZVR5cGVzfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcbmltcG9ydCB7IHJlZ2lzdGVyUHJvcHMgfSBmcm9tICcuL3BhZ2luYXRpb24ucHJvcHMnO1xuaW1wb3J0IHtmb3JFYWNoLCBnZXQsIGlzQXJyYXksIGlzRW1wdHksIGlzTnVsbCwgaXNTdHJpbmd9IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuY29uc3QgREVGQVVMVF9DTFMgPSAnYXBwLWRhdGFuYXZpZ2F0b3IgY2xlYXJmaXgnO1xuY29uc3QgV0lER0VUX0NPTkZJRyA9IHt3aWRnZXRUeXBlOiAnd20tcGFnaW5hdGlvbicsIGhvc3RDbGFzczogREVGQVVMVF9DTFN9O1xuXG5jb25zdCBzaXplQ2xhc3NlcyA9IHtcbiAgICAnUGFnZXInOiB7XG4gICAgICAgICdzbWFsbCc6ICdwYWdlci1zbScsXG4gICAgICAgICdsYXJnZSc6ICdwYWdlci1sZydcbiAgICB9LFxuICAgICdCYXNpYyc6IHtcbiAgICAgICAgJ3NtYWxsJzogJ3BhZ2luYXRpb24tc20nLFxuICAgICAgICAnbGFyZ2UnOiAncGFnaW5hdGlvbi1sZydcbiAgICB9LFxuICAgICdDbGFzc2ljJzoge1xuICAgICAgICAnc21hbGwnOiAncGFnaW5hdGlvbi1zbScsXG4gICAgICAgICdsYXJnZSc6ICdwYWdpbmF0aW9uLWxnJ1xuICAgIH1cbn07XG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ1t3bVBhZ2luYXRpb25dJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcGFnaW5hdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHByb3ZpZGVBc1dpZGdldFJlZihQYWdpbmF0aW9uQ29tcG9uZW50KVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgUGFnaW5hdGlvbkNvbXBvbmVudCBleHRlbmRzIFN0eWxhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgc3RhdGljIGluaXRpYWxpemVQcm9wcyA9IHJlZ2lzdGVyUHJvcHMoKTtcbiAgICBAT3V0cHV0KCkgcmVzdWx0RW1pdHRlcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIG1heFJlc3VsdHNFbWl0dGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIGRhdGFzb3VyY2U7XG4gICAgbWF4UmVzdWx0cztcbiAgICBuYXZpZ2F0aW9uc2l6ZTtcbiAgICBzaG93cmVjb3JkY291bnQ7XG5cbiAgICBuYXZjb250cm9scztcbiAgICBuYXZpZ2F0aW9uO1xuXG4gICAgYm91bmRhcnlsaW5rcztcbiAgICBkaXJlY3Rpb25saW5rcztcblxuICAgIG5hdmlnYXRpb25DbGFzcztcbiAgICBkbiA9IHtcbiAgICAgICAgY3VycmVudFBhZ2U6IDFcbiAgICB9O1xuXG4gICAgcGFnZUNvdW50ID0gMDtcbiAgICBpc0Rpc2FibGVOZXh0ID0gdHJ1ZTtcbiAgICBpc0Rpc2FibGVQcmV2aW91cyA9IHRydWU7XG4gICAgaXNEaXNhYmxlRmlyc3QgPSB0cnVlO1xuICAgIGlzRGlzYWJsZUxhc3QgPSB0cnVlO1xuICAgIGlzRGlzYWJsZUN1cnJlbnQ7XG4gICAgZGF0YVNpemU7XG4gICAgcHJldnNob3dyZWNvcmRjb3VudDtcbiAgICBpc0Rpc2FibGVDb3VudDtcbiAgICBmaXJzdFJvdztcbiAgICByZXN1bHQ7XG4gICAgX19mdWxsRGF0YTtcbiAgICBkYXRhc2V0O1xuICAgIG9wdGlvbnM7XG4gICAgc3RhdGVoYW5kbGVyO1xuICAgIGZpbHRlckZpZWxkcztcbiAgICBzb3J0T3B0aW9ucztcbiAgICBiaW5kZGF0YXNldDtcbiAgICBwYWdpbmF0aW9uO1xuICAgIGxvZ2ljYWxPcDtcblxuICAgIHByaXZhdGUgX2RlYm91bmNlZEFwcGx5RGF0YXNldCA9IGRlYm91bmNlKCgpID0+IHRoaXMud2lkZ2V0LmRhdGFzZXQgPSB0aGlzLmRhdGFzZXQsIERFQk9VTkNFX1RJTUVTLlBBR0lOQVRJT05fREVCT1VOQ0VfVElNRSk7XG4gICAgcHJpdmF0ZSBfZGVib3VuY2VkUGFnZUNoYW5nZWQgPSBkZWJvdW5jZShldmVudCA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gZXZlbnQgJiYgZXZlbnQucGFnZTtcbiAgICAgICAgLy8gRG8gbm90IGNhbGwgZ29Ub1BhZ2UgaWYgcGFnZSBoYXMgbm90IGNoYW5nZWRcbiAgICAgICAgaWYgKGN1cnJlbnRQYWdlICE9PSB0aGlzLmRuLmN1cnJlbnRQYWdlKSB7XG4gICAgICAgICAgICBjb25zdCBpbnN0ID0gKHRoaXMgYXMgYW55KS5wYXJlbnQgfHwgdGhpcztcbiAgICAgICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSBjdXJyZW50UGFnZTtcbiAgICAgICAgICAgIGluc3QuaW52b2tlRXZlbnRDYWxsYmFjaygncGFnaW5hdGlvbmNoYW5nZScsIHskZXZlbnQ6IHVuZGVmaW5lZCwgJGluZGV4OiB0aGlzLmRuLmN1cnJlbnRQYWdlfSk7XG4gICAgICAgICAgICB0aGlzLmdvVG9QYWdlKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5uYXZpZ2F0aW9uID09PSAnQmFzaWMnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0QXJpYUZvckJhc2ljTmF2aWdhdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwgREVCT1VOQ0VfVElNRVMuUEFHSU5BVElPTl9ERUJPVU5DRV9USU1FKTtcblxuICAgIHByaXZhdGUgX3NldEFyaWFGb3JCYXNpY05hdmlnYXRpb24oKSB7XG4gICAgICAgIGZvckVhY2godGhpcy5uYXRpdmVFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdhJyksIChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgnaHJlZicsICdqYXZhc2NyaXB0OnZvaWQoMCk7Jyk7XG4gICAgICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSBpdGVtLnF1ZXJ5U2VsZWN0b3IoJ3NwYW4nKTtcbiAgICAgICAgICAgIGlmIChjaGlsZE5vZGU/LmRhdGFzZXQuaXNhY2l0dmVwYWdlID09PSBcInRydWVcIikge1xuICAgICAgICAgICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKCdhcmlhLWN1cnJlbnQnLCAndHJ1ZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYoY2hpbGROb2RlPy5kYXRhc2V0LmlzZGlzYWJsZWQgPT09IFwidHJ1ZVwiKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGlzYWJsZWQnLCAndHJ1ZScpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdGVtLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1kaXNhYmxlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihpbmo6IEluamVjdG9yLCBAU2tpcFNlbGYoKSBASW5qZWN0KFdpZGdldFJlZikgcHVibGljIHBhcmVudCwgQEluamVjdCgnRVhQTElDSVRfQ09OVEVYVCcpIEBPcHRpb25hbCgpIGV4cGxpY2l0Q29udGV4dDogYW55KSB7XG4gICAgICAgIHN1cGVyKGluaiwgV0lER0VUX0NPTkZJRywgZXhwbGljaXRDb250ZXh0KTtcbiAgICAgICAgc3R5bGVyKHRoaXMubmF0aXZlRWxlbWVudCwgdGhpcyk7XG4gICAgfVxuXG4gICAgc2V0UmVzdWx0KHJlc3VsdCkge1xuICAgICAgICAvLyBUT0RPOiBFbWl0IGV2ZW50IG9ubHkgaWYgcmVzdWx0IGlzIGNoYW5nZWRcbiAgICAgICAgdGhpcy5yZXN1bHQgPSByZXN1bHQ7XG4gICAgICAgIHRoaXMucmVzdWx0RW1pdHRlci5lbWl0KHRoaXMucmVzdWx0KTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgbmF2aWdhdGlvbkNsYXNzIGJhc2VkIG9uIG5hdmlnYXRpb24gYW5kIG5hdmlnYXRpb25TaXplIHByb3BzXG4gICAgcHJpdmF0ZSB1cGRhdGVOYXZTaXplKCkge1xuICAgICAgICBjb25zdCBzaXplQ2xzID0gc2l6ZUNsYXNzZXNbdGhpcy5uYXZjb250cm9sc107XG4gICAgICAgIGlmIChzaXplQ2xzICYmIHRoaXMubmF2aWdhdGlvbnNpemUpIHtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbkNsYXNzID0gc2l6ZUNsc1t0aGlzLm5hdmlnYXRpb25zaXplXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbkNsYXNzID0gJyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBGdW5jdGlvbiB0byByZXNldCB0aGUgcGFnaW5nIHZhbHVlcyB0byBkZWZhdWx0LlxuICAgIHJlc2V0UGFnZU5hdmlnYXRpb24oKSB7XG4gICAgICAgIHRoaXMucGFnZUNvdW50ID0gMDtcbiAgICAgICAgdGhpcy5kbi5jdXJyZW50UGFnZSA9IDE7XG4gICAgICAgIHRoaXMuZGF0YVNpemUgPSAwO1xuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gY2FsY3VsYXRlIHRoZSBwYWdpbmcgdmFsdWVzLiovXG4gICAgY2FsY3VsYXRlUGFnaW5nVmFsdWVzKCkge1xuICAgICAgICB0aGlzLnBhZ2VDb3VudCA9ICh0aGlzLmRhdGFTaXplID4gdGhpcy5tYXhSZXN1bHRzKSA/IChNYXRoLmNlaWwodGhpcy5kYXRhU2l6ZSAvIHRoaXMubWF4UmVzdWx0cykpIDogKHRoaXMuZGF0YVNpemUgPCAwID8gMCA6IDEpO1xuICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gdGhpcy5kbi5jdXJyZW50UGFnZSB8fCAxO1xuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gc2V0IGRlZmF1bHQgdmFsdWVzIHRvIHRoZSBwYWdpbmcgcGFyYW1ldGVycyovXG4gICAgc2V0RGVmYXVsdFBhZ2luZ1ZhbHVlcyhkYXRhU2l6ZSwgbWF4UmVzdWx0cywgY3VycmVudFBhZ2UpIHtcbiAgICAgICAgLypJZiBuZWl0aGVyICdkYXRhU2l6ZScgbm9yICdtYXhSZXN1bHRzJyBpcyBzZXQsIHRoZW4gc2V0IGRlZmF1bHQgdmFsdWVzIHRvIHRoZSBwYWdpbmcgcGFyYW1ldGVycy4qL1xuICAgICAgICBpZiAoIWRhdGFTaXplICYmICFtYXhSZXN1bHRzKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2VDb3VudCA9IDE7XG4gICAgICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gMTtcbiAgICAgICAgICAgIHRoaXMubWF4UmVzdWx0cyA9IGRhdGFTaXplO1xuICAgICAgICAgICAgdGhpcy5kYXRhU2l6ZSA9IGRhdGFTaXplO1xuICAgICAgICB9IGVsc2UgeyAvKkVsc2UsIHNldCB0aGUgc3BlY2lmaWVkIHZhbHVlcyBhbmQgcmVjYWxjdWxhdGUgcGFnaW5nIHBhcmFtZXRlcnMuKi9cbiAgICAgICAgICAgIHRoaXMubWF4UmVzdWx0cyA9IG1heFJlc3VsdHMgfHwgdGhpcy5tYXhSZXN1bHRzO1xuICAgICAgICAgICAgdGhpcy5kYXRhU2l6ZSA9IGlzRGVmaW5lZChkYXRhU2l6ZSkgPyBkYXRhU2l6ZSA6IHRoaXMuZGF0YVNpemU7XG4gICAgICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gY3VycmVudFBhZ2UgfHwgdGhpcy5kbi5jdXJyZW50UGFnZTtcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlUGFnaW5nVmFsdWVzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tYXhSZXN1bHRzRW1pdHRlci5lbWl0KHRoaXMubWF4UmVzdWx0cyk7XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBjaGVjayB0aGUgZGF0YVNpemUgYW5kIG1hbmlwdWxhdGUgdGhlIG5hdmlnYXRvciBhY2NvcmRpbmdseS4qL1xuICAgIGNoZWNrRGF0YVNpemUoZGF0YVNpemUsIG51bWJlck9mRWxlbWVudHM/LCBzaXplPykge1xuICAgICAgICAvKklmIHRoZSBkYXRhU2l6ZSBpcyAtMSBvciBJbnRlZ2VyLk1BWF9WQUxVRSggd2hpY2ggaXMgMjE0NzQ4MzY0NyksIHRoZW4gdGhlIHRvdGFsIG51bWJlciBvZiByZWNvcmRzIGlzIG5vdCBrbm93bi5cbiAgICAgICAgICogSGVuY2UsXG4gICAgICAgICAqIDEuIEhpZGUgdGhlICdUb3RhbCBSZWNvcmQgQ291bnQnLlxuICAgICAgICAgKiAyLiBEaXNhYmxlIHRoZSAnR29Ub0xhc3RQYWdlJyBsaW5rIGFzIHRoZSBwYWdlIG51bWJlciBvZiB0aGUgbGFzdCBwYWdlIGlzIG5vdCBrbm93bi4qL1xuICAgICAgICBpZiAoZGF0YVNpemUgPT09IC0xIHx8IGRhdGFTaXplID09PSBBcHBDb25zdGFudHMuSU5UX01BWF9WQUxVRSkge1xuICAgICAgICAgICAgdGhpcy5wcmV2c2hvd3JlY29yZGNvdW50ID0gdGhpcy5zaG93cmVjb3JkY291bnQ7XG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZUxhc3QgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVDb3VudCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnNob3dyZWNvcmRjb3VudCA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gSWYgbnVtYmVyIG9mIHJlY29yZHMgaW4gY3VycmVudCBwYWdlIGlzIGxlc3MgdGhhbiB0aGUgbWF4IHJlY29yZHMgc2l6ZSwgdGhpcyBpcyB0aGUgbGFzdCBwYWdlLiBTbyBkaXNhYmxlIG5leHQgYnV0dG9uLlxuICAgICAgICAgICAgaWYgKG51bWJlck9mRWxlbWVudHMgPCBzaXplKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVOZXh0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlQ291bnQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2hvd3JlY29yZGNvdW50ID0gdGhpcy5wcmV2c2hvd3JlY29yZGNvdW50IHx8IHRoaXMuc2hvd3JlY29yZGNvdW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBkaXNhYmxlIG5hdmlnYXRpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgYW5kIHRvdGFsIHBhZ2VzLiovXG4gICAgZGlzYWJsZU5hdmlnYXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGlzQ3VycmVudFBhZ2VGaXJzdCA9ICh0aGlzLmRuLmN1cnJlbnRQYWdlID09PSAxKSxcbiAgICAgICAgICAgIGlzQ3VycmVudFBhZ2VMYXN0ID0gKHRoaXMuZG4uY3VycmVudFBhZ2UgPT09IHRoaXMucGFnZUNvdW50KTtcbiAgICAgICAgaWYgKCF0aGlzLnBhZ2luYXRpb24/Lm5leHQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlRmlyc3QgPSB0aGlzLmlzRGlzYWJsZVByZXZpb3VzID0gaXNDdXJyZW50UGFnZUZpcnN0O1xuICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVOZXh0ID0gdGhpcy5pc0Rpc2FibGVMYXN0ID0gaXNDdXJyZW50UGFnZUxhc3Q7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBXTVMtMTg4Njc6IEluIGNhc2Ugb2Ygc2VydmVyIHNpZGUgcGFnaW5hdGlvbiwgZm9yIHBhZ2VyIHR5cGUgcGFnaW5hdGlvbiBkZXBlbmQgb24gcHJldiBhbmQgbmV4dCBmbGFncyB3aGljaCBhcmUgc2V0IGJ5IGRldmVsb3BlclxuICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVGaXJzdCA9IHRoaXMuaXNEaXNhYmxlUHJldmlvdXMgPSAhdGhpcy5wYWdpbmF0aW9uLnByZXY7XG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZU5leHQgPSB0aGlzLmlzRGlzYWJsZUxhc3QgPSAhdGhpcy5wYWdpbmF0aW9uLm5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0Rpc2FibGVDdXJyZW50ID0gaXNDdXJyZW50UGFnZUZpcnN0ICYmIGlzQ3VycmVudFBhZ2VMYXN0O1xuICAgICAgICAvLyBJbiBjYXNlIG9mIGNsaWVudCBzaWRlIHBhZ2luYXRpb24sIHdoZW4gbG9hZCBtb3JlIHJlYWNoZXMgbGFzdCBwYWdlIGhpZGUgdGhlIG9uLWRlbWFuZCBncmlkIGVsZVxuICAgICAgICBpZiAodGhpcy5kYXRhc2V0ICYmIHRoaXMuZGF0YXNldC5sZW5ndGggJiYgdGhpcy5pc0Rpc2FibGVOZXh0ICYmIHRoaXMucGFyZW50Lm9uRGVtYW5kTG9hZCAmJiB0aGlzLnBhcmVudC53aWRnZXRUeXBlID09PSAnd20tdGFibGUnKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5jYWxsRGF0YUdyaWRNZXRob2QoJ2hpZGVMb2FkaW5nSW5kaWNhdG9yJywgdGhpcy5pc0Rpc2FibGVOZXh0LCB0aGlzLnBhcmVudC5pbmZTY3JvbGwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBjaGVjayBpZiB0aGUgdmFyaWFibGUgYm91bmQgdG8gdGhlIGRhdGEtbmF2aWdhdG9yIGhhcyBwYWdpbmcuKi9cbiAgICBpc0RhdGFTb3VyY2VIYXNQYWdpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFzb3VyY2UgJiYgdGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uSVNfUEFHRUFCTEUpO1xuICAgIH1cblxuICAgIC8vIFNldCB0aGUgcmVzdWx0IGZvciBjbGllbnQgc2lkZSBwYWdpbmF0aW9uXG4gICAgc2V0Tm9uUGFnZWFibGVEYXRhKG5ld1ZhbCkge1xuICAgICAgICBsZXQgZGF0YVNpemUsXG4gICAgICAgICAgICBtYXhSZXN1bHRzLFxuICAgICAgICAgICAgY3VycmVudFBhZ2UsXG4gICAgICAgICAgICBzdGFydEluZGV4O1xuICAgICAgICBkYXRhU2l6ZSA9IGlzQXJyYXkobmV3VmFsKSA/IG5ld1ZhbC5sZW5ndGggOiAoaXNFbXB0eShuZXdWYWwpID8gMCA6IDEpO1xuICAgICAgICBtYXhSZXN1bHRzID0gKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMubWF4UmVzdWx0cykgfHwgZGF0YVNpemU7XG5cbiAgICAgICAgLy8gRm9yIHN0YXRpYyB2YXJpYWJsZSwga2VlcCB0aGUgY3VycmVudCBwYWdlLiBGb3Igb3RoZXIgdmFyaWFibGVzIHdpdGhvdXQgcGFnaW5hdGlvbiByZXNldCB0aGUgcGFnZSB0byAxXG4gICAgICAgIC8vIEZpeCBmb3IgW1dNUy0yMzI2M106IGdyaWRPcHRpb25zLmlzTmV4dFBhZ2VEYXRhIGZsYWcgaXMgZmFsc2Ugd2hlbiBkYXRhc2V0IGlzIGNoYW5nZWQgZnJvbSBzY3JpcHQsIHNvIHNldHRpbmcgY3VycmVudCBwYWdlIHRvIDFcbiAgICAgICAgaWYgKHRoaXMuZGF0YXNvdXJjZSAmJiAodGhpcy5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uSVNfQVBJX0FXQVJFKSB8fCAodGhpcy5wYXJlbnQud2lkZ2V0VHlwZSA9PT0gJ3dtLXRhYmxlJyAmJiAodGhpcy5wYXJlbnQuZ3JpZE9wdGlvbnMuaXNOYXZUeXBlU2Nyb2xsT3JPbmRlbWFuZCgpICYmIChnZXQodGhpcy5wYXJlbnQsICdncmlkT3B0aW9ucy5sYXN0QWN0aW9uUGVyZm9ybWVkJykgPT09IHRoaXMucGFyZW50LmdyaWRPcHRpb25zLkFDVElPTlMuREFUQVNFVF9VUERBVEUgfHwgIWdldCh0aGlzLnBhcmVudCwgJ2dyaWRPcHRpb25zLmlzTmV4dFBhZ2VEYXRhJykpKSkpKSB7XG4gICAgICAgICAgICBjdXJyZW50UGFnZSA9IDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdXJyZW50UGFnZSA9IHRoaXMuZG4uY3VycmVudFBhZ2UgfHwgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdFBhZ2luZ1ZhbHVlcyhkYXRhU2l6ZSwgbWF4UmVzdWx0cywgY3VycmVudFBhZ2UpO1xuICAgICAgICB0aGlzLmRpc2FibGVOYXZpZ2F0aW9uKCk7XG5cbiAgICAgICAgc3RhcnRJbmRleCA9ICh0aGlzLmRuLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLm1heFJlc3VsdHM7XG4gICAgICAgIHRoaXMuc2V0UmVzdWx0KGlzQXJyYXkobmV3VmFsKSA/IG5ld1ZhbC5zbGljZShzdGFydEluZGV4LCBzdGFydEluZGV4ICsgdGhpcy5tYXhSZXN1bHRzKSA6IG5ld1ZhbCk7XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBzZXQgdGhlIHZhbHVlcyBuZWVkZWQgZm9yIHBhZ2luYXRpb24qL1xuICAgIHByaXZhdGUgc2V0UGFnaW5nVmFsdWVzKG5ld1ZhbCkge1xuICAgICAgICBsZXQgZGF0YVNpemUsXG4gICAgICAgICAgICBtYXhSZXN1bHRzLFxuICAgICAgICAgICAgY3VycmVudFBhZ2UsXG4gICAgICAgICAgICBkYXRhU291cmNlO1xuICAgICAgICBsZXQgdmFyaWFibGVPcHRpb25zOiBhbnkgPSB7fTtcbiAgICAgICAgLy8gU3RvcmUgdGhlIGRhdGEgaW4gX19mdWxsRGF0YS4gVGhpcyBpcyB1c2VkIGZvciBjbGllbnQgc2lkZSBzZWFyY2hpbmcgd2l0dmFoIG91dCBtb2RpZnlpbmcgdGhlIGFjdHVhbCBkYXRhc2V0LlxuICAgICAgICB0aGlzLl9fZnVsbERhdGEgPSBuZXdWYWw7XG4gICAgICAgIC8qQ2hlY2sgZm9yIHNhbml0eSovXG4gICAgICAgIGlmICh0aGlzLmJpbmRkYXRhc2V0KSB7XG4gICAgICAgICAgICBkYXRhU291cmNlID0gdGhpcy5kYXRhc291cmNlIHx8IHt9O1xuICAgICAgICAgICAgdmFyaWFibGVPcHRpb25zID0gZGF0YVNvdXJjZS5fb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgICAgIC8qQ2hlY2sgZm9yIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgZGF0YSBzZXQqL1xuICAgICAgICAgICAgaWYgKG5ld1ZhbCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRGF0YVNvdXJjZUhhc1BhZ2luZygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvbiA9IHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9QQUdJTkdfT1BUSU9OUykgfHwge307XG4gICAgICAgICAgICAgICAgICAgIC8vIElmIFwiZmlsdGVyRmllbGRzXCIgYW5kIFwic29ydE9wdGlvbnNcIiBoYXZlIGJlZW4gc2V0LCB0aGVuIHNldCB0aGVtIHNvIHRoYXQgdGhlIGZpbHRlcnMgY2FuIGJlIHJldGFpbmVkIHdoaWxlIGZldGNoaW5nIGRhdGEgdXBvbiBwYWdlIG5hdmlnYXRpb24uXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyRmllbGRzID0gdmFyaWFibGVPcHRpb25zLmZpbHRlckZpZWxkcyB8fCB7fTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dpY2FsT3AgPSB2YXJpYWJsZU9wdGlvbnMubG9naWNhbE9wIHx8ICcnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvcnRPcHRpb25zID0gdmFyaWFibGVPcHRpb25zLm9yZGVyQnkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIChpc0FycmF5KHRoaXMucGFnaW5hdGlvbi5zb3J0KSA/IGdldE9yZGVyQnlFeHByKHRoaXMucGFnaW5hdGlvbi5zb3J0KSA6ICcnKTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVNpemUgPSB0aGlzLnBhZ2luYXRpb24udG90YWxFbGVtZW50cztcbiAgICAgICAgICAgICAgICAgICAgbWF4UmVzdWx0cyA9IHRoaXMucGFnaW5hdGlvbi5zaXplO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wYWdpbmF0aW9uLm51bWJlck9mRWxlbWVudHMgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHRoaXMucGFnaW5hdGlvbi5udW1iZXIpKSB7IC8vIG51bWJlciBpcyBwYWdlIG51bWJlciByZWNlaXZlZCBmcm9tIGJhY2tlbmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdpbmF0aW9uLm51bWJlciArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFnZSA9IHRoaXMuZG4uY3VycmVudFBhZ2UgfHwgMTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlID0gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvKiBTZW5kaW5nIHBhZ2VDb3VudCB1bmRlZmluZWQgdG8gY2FsY3VsYXRlIGl0IGFnYWluIGZvciBxdWVyeS4qL1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldERlZmF1bHRQYWdpbmdWYWx1ZXMoZGF0YVNpemUsIG1heFJlc3VsdHMsIGN1cnJlbnRQYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlTmF2aWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrRGF0YVNpemUoZGF0YVNpemUsIHRoaXMucGFnaW5hdGlvbi5udW1iZXJPZkVsZW1lbnRzLCB0aGlzLnBhZ2luYXRpb24uc2l6ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0UmVzdWx0KG5ld1ZhbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghaXNTdHJpbmcobmV3VmFsKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldE5vblBhZ2VhYmxlRGF0YShuZXdWYWwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRSZXN1bHQobmV3VmFsKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0UGFnZU5hdmlnYXRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm5hdmlnYXRpb24gPT09ICdCYXNpYycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZXRBcmlhRm9yQmFzaWNOYXZpZ2F0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAobmV3VmFsICYmICFpc1N0cmluZyhuZXdWYWwpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXROb25QYWdlYWJsZURhdGEobmV3VmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIGN1cnJlbnQgcGFnZSBpcyB0aGUgZmlyc3QgcGFnZSovXG4gICAgaXNGaXJzdFBhZ2UoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5kbi5jdXJyZW50UGFnZSA9PT0gMSB8fCAhdGhpcy5kbi5jdXJyZW50UGFnZSk7XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBjaGVjayBpZiB0aGUgY3VycmVudCBwYWdlIGlzIHRoZSBsYXN0IHBhZ2UqL1xuICAgIGlzTGFzdFBhZ2UoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5kbi5jdXJyZW50UGFnZSA9PT0gdGhpcy5wYWdlQ291bnQpO1xuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gbmF2aWdhdGUgdG8gdGhlIGxhc3QgcGFnZSovXG4gICAgZ29Ub0xhc3RQYWdlKGlzUmVmcmVzaCwgZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0xhc3RQYWdlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VDb3VudDtcbiAgICAgICAgICAgIHRoaXMuZ29Ub1BhZ2UoZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc1JlZnJlc2gpIHtcbiAgICAgICAgICAgIHRoaXMuZ29Ub1BhZ2UoZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gbmF2aWdhdGUgdG8gdGhlIGZpcnN0IHBhZ2UqL1xuICAgIGdvVG9GaXJzdFBhZ2UoaXNSZWZyZXNoLCBldmVudCwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRmlyc3RQYWdlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSAxO1xuICAgICAgICAgICAgdGhpcy5nb1RvUGFnZShldmVudCwgY2FsbGJhY2spO1xuICAgICAgICB9IGVsc2UgaWYgKGlzUmVmcmVzaCkge1xuICAgICAgICAgICAgdGhpcy5nb1RvUGFnZShldmVudCwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBuYXZpZ2F0ZSB0byB0aGUgY3VycmVudCBwYWdlKi9cbiAgICBnb1RvUGFnZShldmVudD8sIGNhbGxiYWNrPykge1xuICAgICAgICB0aGlzLmZpcnN0Um93ID0gKHRoaXMuZG4uY3VycmVudFBhZ2UgLSAxKSAqIHRoaXMubWF4UmVzdWx0cztcbiAgICAgICAgY29uc3QgbW9kZSA9IHRoaXMucGFyZW50LnN0YXRlUGVyc2lzdGVuY2UuY29tcHV0ZU1vZGUodGhpcy5zdGF0ZWhhbmRsZXIpO1xuICAgICAgICBpZiAobW9kZSAmJiBtb2RlLnRvTG93ZXJDYXNlKCkgIT09ICdub25lJyAmJiAodGhpcy5wYXJlbnQud2lkZ2V0VHlwZSA9PT0gJ3dtLXRhYmxlJyB8fCB0aGlzLnBhcmVudC53aWRnZXRUeXBlID09PSAnd20tbGlzdCcpKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5fc2VsZWN0ZWRJdGVtc0V4aXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRmlyc3RQYWdlKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5zdGF0ZVBlcnNpc3RlbmNlLnJlbW92ZVdpZGdldFN0YXRlKHRoaXMucGFyZW50LCAncGFnaW5hdGlvbicpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodW5zdXBwb3J0ZWRTdGF0ZVBlcnNpc3RlbmNlVHlwZXMuaW5kZXhPZih0aGlzLnBhcmVudC5uYXZpZ2F0aW9uKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuc3RhdGVQZXJzaXN0ZW5jZS5zZXRXaWRnZXRTdGF0ZSh0aGlzLnBhcmVudCwge3BhZ2luYXRpb246IHRoaXMuZG4uY3VycmVudFBhZ2V9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucGFyZW50LndpZGdldFR5cGUgPT09ICd3bS1saXN0JyB8fHRoaXMucGFyZW50LndpZGdldFR5cGUgPT09ICd3bS10YWJsZScgKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignUmV0YWluIFN0YXRlIGhhbmRsaW5nIG9uIFdpZGdldCAnICsgdGhpcy5wYXJlbnQubmFtZSArICcgaXMgbm90IHN1cHBvcnRlZCBmb3IgY3VycmVudCBwYWdpbmF0aW9uIHR5cGUuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGNhbGwgZ2V0UGFnZURhdGEgYWZ0ZXIgY2hlY2tpbmcgc3RhdGUgY29uZmlnIHNvIHRoYXQgU3RhdGljIFZhcmlhYmxlcyBjYW4gdXNlIGl0XG4gICAgICAgIHRoaXMuZ2V0UGFnZURhdGEoZXZlbnQsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIGJlIGludm9rZWQgYWZ0ZXIgdGhlIGRhdGEgb2YgdGhlIHBhZ2UgaGFzIGJlZW4gZmV0Y2hlZC4qL1xuICAgIG9uUGFnZURhdGFSZWFkeShldmVudCwgZGF0YSwgY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlTmF2aWdhdGlvbigpO1xuICAgICAgICB0aGlzLmludm9rZVNldFJlY29yZChldmVudCwgZGF0YSk7XG4gICAgICAgIHRyaWdnZXJGbihjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBnZXQgZGF0YSBmb3IgdGhlIGN1cnJlbnQgcGFnZSovXG4gICAgZ2V0UGFnZURhdGEoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGxldCBkYXRhLFxuICAgICAgICAgICAgc3RhcnRJbmRleDtcblxuICAgICAgICBpZiAodGhpcy5pc0RhdGFTb3VyY2VIYXNQYWdpbmcoKSkge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJbiB0YWJsZSBjb21wb25lbnQsIGluIGNhc2Ugb2Ygb24gZGVtYW5kIGFuZCBzY3JvbGwgcGFnaW5hdGlvblxuICAgICAgICAgICAgICogV2hlbiB0aGVyZSBpcyBhIGNoYW5nZSBpbiBkYXRhIGl0ZW0gd2hpY2ggaXMgbm90IGluIGN1cnJlbnQgcGFnZVxuICAgICAgICAgICAgICogRmV0Y2ggdGhlIGl0ZW1zIG9mIHRoZSBwYWdlIHdoZXJlIHRoZSBjaGFuZ2UgaXMgbWFkZVxuICAgICAgICAgICAgICogKi9cbiAgICAgICAgICAgIGxldCBwYWdlSW5kZXggPSB0aGlzLmRuLmN1cnJlbnRQYWdlO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNFZGl0Tm90SW5DdXJyZW50UGFnZSgpICYmIHRoaXMucGFyZW50LmdyaWRPcHRpb25zLmxhc3RBY3Rpb25QZXJmb3JtZWQgIT09ICdkZWxldGUnKSB7XG4gICAgICAgICAgICAgICAgcGFnZUluZGV4ID0gdGhpcy5wYXJlbnQuYWN0aW9uUm93UGFnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkxJU1RfUkVDT1JEUywge1xuICAgICAgICAgICAgICAgICdwYWdlJzogcGFnZUluZGV4LFxuICAgICAgICAgICAgICAgICdmaWx0ZXJGaWVsZHMnOiB0aGlzLmZpbHRlckZpZWxkcyxcbiAgICAgICAgICAgICAgICAnb3JkZXJCeSc6IHRoaXMuc29ydE9wdGlvbnMsXG4gICAgICAgICAgICAgICAgJ2xvZ2ljYWxPcCc6IHRoaXMubG9naWNhbE9wLFxuICAgICAgICAgICAgICAgICdtYXRjaE1vZGUnOiAnYW55d2hlcmVpZ25vcmVjYXNlJ1xuICAgICAgICAgICAgfSkudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblBhZ2VEYXRhUmVhZHkoZXZlbnQsIHJlc3BvbnNlICYmIHJlc3BvbnNlLmRhdGEsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAkYXBwRGlnZXN0KCk7XG4gICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgLy8gSWYgZXJyb3IgaXMgdW5kZWZpbmVkLCBkbyBub3Qgc2hvdyBhbnkgbWVzc2FnZSBhcyB0aGlzIG1heSBiZSBkaXNjYXJkZWQgcmVxdWVzdFxuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAvLyBUT0RPOiBIYW5kbGUgRXJyb3JcbiAgICAgICAgICAgICAgICAgICAgLy8gd21Ub2FzdGVyLnNob3coJ2Vycm9yJywgJ0VSUk9SJywgJ1VuYWJsZSB0byBnZXQgZGF0YSBvZiBwYWdlIC0nICsgdGhpcy5kbi5jdXJyZW50UGFnZSArICc6JyArIGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRWRpdE5vdEluQ3VycmVudFBhZ2UoKSkge1xuICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXggPSAodGhpcy5wYXJlbnQuYWN0aW9uUm93UGFnZSAtIDEpICogdGhpcy5tYXhSZXN1bHRzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gKHRoaXMuZG4uY3VycmVudFBhZ2UgLSAxKSAqIHRoaXMubWF4UmVzdWx0cztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRhdGEgPSBpc0FycmF5KHRoaXMuX19mdWxsRGF0YSkgPyB0aGlzLl9fZnVsbERhdGEuc2xpY2Uoc3RhcnRJbmRleCwgc3RhcnRJbmRleCArIHRoaXMubWF4UmVzdWx0cykgOiB0aGlzLl9fZnVsbERhdGE7XG4gICAgICAgICAgICB0aGlzLnNldFJlc3VsdChkYXRhKTtcbiAgICAgICAgICAgIHRoaXMub25QYWdlRGF0YVJlYWR5KGV2ZW50LCBkYXRhLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKlxuICAgIEZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBlZGl0IGFjdGlvbiBpcyBwZXJmb3JtZWQgb24gdGhlIHByZXZpb3VzIHBhZ2UgZGF0YSBvZiB0aGUgdGFibGVcbiAgICAqL1xuICAgIGlzRWRpdE5vdEluQ3VycmVudFBhZ2UoKSB7XG4gICAgICAgIGNvbnN0IHBhZ2VJbmRleCA9IHRoaXMuZG4uY3VycmVudFBhZ2U7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmVudC53aWRnZXRUeXBlID09PSAnd20tdGFibGUnICYmIHBhZ2VJbmRleCA9PT0gdGhpcy5wYXJlbnQuY3VycmVudFBhZ2UgJiZcbiAgICAgICAgICAgIHRoaXMucGFyZW50LmFjdGlvblJvd1BhZ2UgJiYgdGhpcy5wYXJlbnQuYWN0aW9uUm93UGFnZSA8IHBhZ2VJbmRleDtcbiAgICB9XG5cbiAgICBpbnZva2VTZXRSZWNvcmQoZXZlbnQsIGRhdGEpIHtcbiAgICAgICAgLy8gVHJpZ2dlciB0aGUgZXZlbnQgaGFuZGxlciBpZiBleGlzdHMuXG4gICAgICAgIGNvbnN0IHBhZ2VJbmZvID0ge1xuICAgICAgICAgICAgY3VycmVudFBhZ2U6IHRoaXMuZG4uY3VycmVudFBhZ2UsXG4gICAgICAgICAgICBzaXplOiB0aGlzLm1heFJlc3VsdHMsXG4gICAgICAgICAgICB0b3RhbEVsZW1lbnRzOiB0aGlzLmRhdGFTaXplLFxuICAgICAgICAgICAgdG90YWxQYWdlczogdGhpcy5wYWdlQ291bnRcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5pbnZva2VFdmVudENhbGxiYWNrKCdzZXRyZWNvcmQnLCB7JGV2ZW50OiBldmVudCwgJGRhdGE6IGRhdGEsICRpbmRleDogdGhpcy5kbi5jdXJyZW50UGFnZSwgcGFnZUluZm8sIGRhdGF9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW52b2tlRXZlbnRDYWxsYmFjaygnc2V0cmVjb3JkJywgeyRldmVudDogZXZlbnQsICRkYXRhOiBkYXRhLCAkaW5kZXg6IHRoaXMuZG4uY3VycmVudFBhZ2UsIHBhZ2VJbmZvLCBkYXRhfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoZSBwYWdlIGlucHV0LlxuICAgICBJbiBjYXNlIG9mIGludmFsaWQgaW5wdXQsIG5hdmlnYXRlIHRvIHRoZSBhcHByb3ByaWF0ZSBwYWdlOyBhbHNvIHJldHVybiBmYWxzZS5cbiAgICAgSW4gY2FzZSBvZiB2YWxpZCBpbnB1dCwgcmV0dXJuIHRydWUuKi9cbiAgICB2YWxpZGF0ZUN1cnJlbnRQYWdlKGV2ZW50LCBjYWxsYmFjaz8pIHtcbiAgICAgICAgLypJZiB0aGUgdmFsdWUgZW50ZXJlZCBpcyBncmVhdGVyIHRoYW4gdGhlIGxhc3QgcGFnZSBudW1iZXIgb3IgaW52YWxpZCB2YWx1ZSwgdGhlbiBoaWdobGlnaHRpbmcgdGhlIGZpZWxkIHNob3dpbmcgZXJyb3IuKi9cbiAgICAgICAgaWYgKGV2ZW50ICYmIChpc05hTih0aGlzLmRuLmN1cnJlbnRQYWdlKSB8fCB0aGlzLmRuLmN1cnJlbnRQYWdlIDw9IDAgfHwgKHRoaXMucGFnZUNvdW50ICYmICh0aGlzLmRuLmN1cnJlbnRQYWdlID4gdGhpcy5wYWdlQ291bnQgfHwgaXNOdWxsKHRoaXMuZG4uY3VycmVudFBhZ2UpKSkpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kbi5jdXJyZW50UGFnZSA8PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kbi5jdXJyZW50UGFnZSA9IDE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZG4uY3VycmVudFBhZ2UgPiB0aGlzLnBhZ2VDb3VudCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VDb3VudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBvbk1vZGVsQ2hhbmdlKGV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy52YWxpZGF0ZUN1cnJlbnRQYWdlKGV2ZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ29Ub1BhZ2UoZXZlbnQpO1xuICAgIH1cblxuICAgIG9uS2V5RG93bihldmVudCkge1xuICAgICAgICBjb25zdCB0YXJnZXRFbGUgPSAkKGV2ZW50LnRhcmdldCkuY2xvc2VzdCgnYScpO1xuICAgICAgICBpZiAoZXZlbnQuY29kZSA9PT0gJ0tleUUnKSB7XG4gICAgICAgICAgICB0YXJnZXRFbGUuYWRkQ2xhc3MoJ25nLWludmFsaWQnKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0YXJnZXRFbGUucmVtb3ZlQ2xhc3MoJ25nLWludmFsaWQnKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcGFnZUNoYW5nZWQoZXZlbnQ6IGFueSkge1xuICAgICAgIHRoaXMuX2RlYm91bmNlZFBhZ2VDaGFuZ2VkKGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIG5hdmlnYXRlIHRvIHRoZSByZXNwZWN0aXZlIHBhZ2VzLiovXG4gICAgbmF2aWdhdGVQYWdlKGluZGV4LCBldmVudCwgaXNSZWZyZXNoLCBjYWxsYmFjaykge1xuICAgICAgICAvLyB3aGVuIG5hdmlnYXRlZCB0byBuZXh0IHBhZ2UgdHVybiBvbiB0aGUgaXNEYXRhTG9hZGluZyBmbGFnIHRvIHNob3cgdGhlIGxvYWRpbmcgaW5kaWNhdG9yXG4gICAgICAgIGlmIChpc0RlZmluZWQodGhpcy5wYXJlbnQuaXNEYXRhTG9hZGluZykgJiYgIXRoaXMuaXNEaXNhYmxlTmV4dCkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQuaXNEYXRhTG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICAvLyBJbiBjYXNlIG9mIGluZmluaXRlIHNjcm9sbCBjYWxsaW5nIHRoZSBzaG93TG9hZGluZ0luZGljYXRvciBtZXRob2QgdG8gdXBkYXRlIHRoZSBsb2FkaW5nIG1lc3NhZ2UgaW1tZWRpYXRlbHkgd2hlbiBuYXZpZ2F0ZWQgdG8gbmV4dCBwYWdlXG4gICAgICAgICAgICBpZiAodGhpcy5wYXJlbnQuaW5mU2Nyb2xsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQudmFyaWFibGVJbmZsaWdodCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuY2FsbERhdGFHcmlkTWV0aG9kKCdzaG93TG9hZGluZ0luZGljYXRvcicsIHRoaXMucGFyZW50LmxvYWRpbmdkYXRhbXNnLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyByZXNldCB0aGUgbGFzdCBhY3Rpb24gcGVyZm9ybWVkIHRvIFwic2Nyb2xsXCIgYW5kIGlzRGF0YXNldFVwZGF0ZWQgdG8gZmFsc2VcbiAgICAgICAgaWYgKHRoaXMucGFyZW50LndpZGdldFR5cGUgPT09ICd3bS10YWJsZScgJiYgdGhpcy5wYXJlbnQuZ3JpZE9wdGlvbnMuaXNOYXZUeXBlU2Nyb2xsT3JPbmRlbWFuZCgpKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5ncmlkT3B0aW9ucy5zZXRMYXN0QWN0aW9uUGVyZm9ybWVkKHRoaXMucGFyZW50LmdyaWRPcHRpb25zLkFDVElPTlMuREVGQVVMVCk7XG4gICAgICAgICAgICB0aGlzLnBhcmVudC5ncmlkT3B0aW9ucy5zZXRJc0RhdGFzZXRVcGRhdGVkKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3BhZ2luYXRpb25jaGFuZ2UnLCB7JGV2ZW50OiB1bmRlZmluZWQsICRpbmRleDogdGhpcy5kbi5jdXJyZW50UGFnZX0pO1xuXG4gICAgICAgIC8vIENvbnZlcnQgdGhlIGN1cnJlbnQgcGFnZSB0byBhIHZhbGlkIHBhZ2UgbnVtYmVyLlxuICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gK3RoaXMuZG4uY3VycmVudFBhZ2U7XG5cbiAgICAgICAgc3dpdGNoIChpbmRleCkge1xuICAgICAgICAgICAgY2FzZSAnZmlyc3QnOlxuICAgICAgICAgICAgICAgIHRoaXMuZ29Ub0ZpcnN0UGFnZShpc1JlZnJlc2gsIGV2ZW50LCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSAncHJldic6XG4gICAgICAgICAgICAgICAgLypSZXR1cm4gaWYgYWxyZWFkeSBvbiB0aGUgZmlyc3QgcGFnZS4qL1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5wYWdpbmF0aW9uPy5uZXh0ICYmICh0aGlzLmlzRmlyc3RQYWdlKCkgfHwgIXRoaXMudmFsaWRhdGVDdXJyZW50UGFnZShldmVudCwgY2FsbGJhY2spKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBhZ2luYXRpb24/Lm5leHQpIHsgLy8gV01TLTE4ODY3OiBGb3Igc2VydmVyIHNpZGUgcGFnaW5hdGlvbiwgc2tpcHBpbmcgdGhlIHJlZ3VsYXIgZmxvdyBhbmQgZW5hYmxpbmcgaXNOZXh0IGZsYWcgaW4gcGFnaW5hdGlvbiBtZXRhZGF0YVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFzb3VyY2UucGFnaW5hdGlvbi5pc05leHQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlLnBhZ2luYXRpb24uaXNQcmV2ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLypEZWNyZW1lbnQgdGhlIGN1cnJlbnQgcGFnZSBieSAxLiovXG4gICAgICAgICAgICAgICAgdGhpcy5kbi5jdXJyZW50UGFnZSAtPSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbmV4dCc6XG4gICAgICAgICAgICAgICAgLypSZXR1cm4gaWYgYWxyZWFkeSBvbiB0aGUgbGFzdCBwYWdlLiovXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnBhZ2luYXRpb24/Lm5leHQgJiYgKHRoaXMuaXNMYXN0UGFnZSgpIHx8ICF0aGlzLnZhbGlkYXRlQ3VycmVudFBhZ2UoZXZlbnQsIGNhbGxiYWNrKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wYWdpbmF0aW9uPy5uZXh0KSB7IC8vIFdNUy0xODg2NzogRm9yIHNlcnZlciBzaWRlIHBhZ2luYXRpb24sIHNraXBwaW5nIHRoZSByZWd1bGFyIGZsb3cgYW5kIGVuYWJsaW5nIGlzUHJldiBmbGFnIGluIHBhZ2luYXRpb24gbWV0YWRhdGFcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlLnBhZ2luYXRpb24uaXNOZXh0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlLnBhZ2luYXRpb24uaXNQcmV2ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qSW5jcmVtZW50IHRoZSBjdXJyZW50IHBhZ2UgYnkgMS4qL1xuICAgICAgICAgICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgKz0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2xhc3QnOlxuICAgICAgICAgICAgICAgIHRoaXMuZ29Ub0xhc3RQYWdlKGlzUmVmcmVzaCwgZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgLypOYXZpZ2F0ZSB0byB0aGUgY3VycmVudCBwYWdlLiovXG4gICAgICAgIHRoaXMuZ29Ub1BhZ2UoZXZlbnQsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBzZXRCaW5kRGF0YVNldChiaW5kZGF0YXNldCwgcGFyZW50LCBkYXRhU291cmNlLCBkYXRhc2V0PywgYmluZGRhdGFzb3VyY2U/LCBkYXRhc2V0Qm91bmRFeHByPywgc3RhdGVoYW5kbGVyPykge1xuICAgICAgICBjb25zdCBwYXJ0cyA9IGJpbmRkYXRhc2V0LnNwbGl0KCcuJyk7XG4gICAgICAgIGxldCBiaW5kUGFnaW5nT3B0aW9ucztcbiAgICAgICAgdGhpcy5zdGF0ZWhhbmRsZXIgPSBzdGF0ZWhhbmRsZXI7XG4gICAgICAgIGlmIChwYXJ0c1swXSA9PT0gJ1ZhcmlhYmxlcycgfHwgcGFydHNbMF0gPT09ICdXaWRnZXRzJykge1xuICAgICAgICAgICAgYmluZFBhZ2luZ09wdGlvbnMgPSBgJHtwYXJ0c1swXX0uJHtwYXJ0c1sxXX0ucGFnaW5hdGlvbmA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFiaW5kZGF0YXNvdXJjZSAmJiBkYXRhc2V0ICYmICFkYXRhc2V0Qm91bmRFeHByKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFzZXQgPSBkYXRhc2V0O1xuICAgICAgICAgICAgdGhpcy5fZGVib3VuY2VkQXBwbHlEYXRhc2V0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5iaW5kZGF0YXNldCA9IGJpbmRkYXRhc2V0O1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIC8vIHdhdGNoaW5nIGZvciBkYXRhc2V0IGNoYW5nZXMgZXZlbiB3aGVuIGRhdGFzZXQgaXMgYm91bmQgdG8gXCJpdGVtLlwiIChpLmUuIGJ5IGNoZWNraW5nIGZvciBkYXRhc2V0Qm91bmRFeHByKVxuICAgICAgICAgICAgLy8gaXRlbSBjb250ZXh0IGlzIHBhc3NlZCBhcyBkYXRhU291cmNlIGhlcmVcbiAgICAgICAgICAgIC8vIFtUb2RvLUNTUF06IGNoZWNrIGlmIHNhbWUgZXhwciBmbiBpcyBnZW5lcmF0ZWQgYnkgcGFyZW50IHdpZGdldCAobGlzdCwgdGFibGUpXG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKFxuICAgICAgICAgICAgICAgICR3YXRjaChcbiAgICAgICAgICAgICAgICAgICAgYmluZGRhdGFzZXQsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudCxcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldEJvdW5kRXhwciA/IGRhdGFTb3VyY2UgOiB7fSxcbiAgICAgICAgICAgICAgICAgICAgbnYgPT4gIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChudikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YXNldCA9IG52O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlYm91bmNlZEFwcGx5RGF0YXNldCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdNUy0xOTI4NTogU2V0dGluZyBkYXRhc2V0IG9uIHByb3h5IG9ubHkgdG8gaGFuZGxlIHByb3BlcnR5Y2hhbmdlIGhhbmRsZXIgY2FsbCBmb3IgdW5kZWZpbmVkIGNhc2VzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53aWRnZXQuZGF0YXNldCA9IG52O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gUmVnaXN0ZXIgYSB3YXRjaCBvbiBwYWdpbmcgb3B0aW9ucy4gQ2FsbCBkYXRhc2V0IHByb3BlcnR5IGNoYW5nZSBoYW5kbGVyIGV2ZW4gaWYgcGFnaW5nIG9wdGlvbnMgY2hhbmdlcyB0byByZWZsZWN0IHBhZ2luYXRpb24gc3RhdGVcbiAgICAgICAgICAgIGlmICghYmluZFBhZ2luZ09wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL1tUb2RvLUNTUF06IGVpdGhlciBnZW5lcmF0ZSB3YXRjaCBleHByIGZuIG9yIHJlZ2lzdGVyIGFuIGV2ZW50IGZyb20gdGhlIGRhdGFzb3VyY2UgaXRzZWxmXG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyKFxuICAgICAgICAgICAgICAgICR3YXRjaChcbiAgICAgICAgICAgICAgICAgICAgYmluZFBhZ2luZ09wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudCxcbiAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgICgpID0+IHRoaXMuX2RlYm91bmNlZEFwcGx5RGF0YXNldCgpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGFwcGx5IGRhdGFzb3VyY2Ugb25seSB3aGVuIGRhdGFzZXQgaXMgbm90IGJvdW5kIHRvIFwiaXRlbS5GSUVMRFwiXG4gICAgICAgIGlmICghZGF0YXNldEJvdW5kRXhwcikge1xuICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlID0gZGF0YVNvdXJjZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCB0aGUgZGF0YXNvdXJjZSBvZiBwYWdpbmF0aW9uIGZyb20gdGhlIHBhcmVudCB3aWRnZXRcbiAgICBzZXREYXRhU291cmNlKGRhdGFTb3VyY2UpIHtcbiAgICAgICAgdGhpcy5kYXRhc291cmNlID0gZGF0YVNvdXJjZTtcbiAgICB9XG5cbiAgICBvblByb3BlcnR5Q2hhbmdlKGtleTogc3RyaW5nLCBudiwgb3YpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ2RhdGFzZXQnKSB7XG4gICAgICAgICAgICBsZXQgZGF0YTtcbiAgICAgICAgICAgIGlmICh0aGlzLnBhcmVudCAmJiB0aGlzLnBhcmVudC5vbkRhdGFOYXZpZ2F0b3JEYXRhU2V0Q2hhbmdlKSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IHRoaXMucGFyZW50Lm9uRGF0YU5hdmlnYXRvckRhdGFTZXRDaGFuZ2UobnYpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gbnY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTZXQgbGFzdCBhY3Rpb24gcGVyZm9ybWVkIHRvIFwiZGF0YXNldF91cGRhdGVcIiB3aGVuZXZlciBkYXRhc2V0IGlzIGNoYW5nZWQgaW4gdGFibGUgY29tcG9uZW50XG4gICAgICAgICAgICBpZiAodGhpcy5wYXJlbnQud2lkZ2V0VHlwZSA9PT0gJ3dtLXRhYmxlJykge1xuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50Ll90cmlnZ2VyZWRCeVVzZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFdoZW4gdGhlIGRhdGFzZXQgaXMgbm90IGluIGN1cnJlbnQgcGFnZSwgYnV0IGluIHByZXZpb3VzIG9uZXMgZGlyZWN0bHkgc2V0IHRoZSByZXN1bHQgd2l0aG91dCBzZXR0aW5nIHBhZ2UgdmFsdWVzXG4gICAgICAgICAgICBpZiAodGhpcy5pc0VkaXROb3RJbkN1cnJlbnRQYWdlKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFJlc3VsdChkYXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRQYWdpbmdWYWx1ZXMoZGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnbmF2aWdhdGlvbicpIHtcbiAgICAgICAgICAgIGlmIChudiA9PT0gJ0FkdmFuY2VkJykgeyAvLyBTdXBwb3J0IGZvciBvbGRlciBwcm9qZWN0cyB3aGVyZSBuYXZpZ2F0aW9uIHR5cGUgd2FzIGFkdmFuY2VkIGluc3RlYWQgb2YgY2xhc2ljXG4gICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uID0gJ0NsYXNzaWMnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy51cGRhdGVOYXZTaXplKCk7XG4gICAgICAgICAgICB0aGlzLm5hdmNvbnRyb2xzID0gbnY7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnbmF2aWdhdGlvbnNpemUnKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU5hdlNpemUoKTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICduYXZpZ2F0aW9uYWxpZ24nKSB7XG4gICAgICAgICAgICBzd2l0Y2hDbGFzcyh0aGlzLm5hdGl2ZUVsZW1lbnQsIGB0ZXh0LSR7bnZ9YCwgYHRleHQtJHtvdn1gKTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09ICdtYXhSZXN1bHRzJykge1xuICAgICAgICAgICAgdGhpcy5zZXRQYWdpbmdWYWx1ZXModGhpcy5kYXRhc2V0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN1cGVyLm9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBudiwgb3YpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBjb25zdCBwYWdpbmF0aW9uRWxlbSA9ICB0aGlzLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIHBhZ2luYXRpb25FbGVtLm9uY2xpY2sgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9O1xuICAgIH1cbn1cbiIsIlxuPHVsIGNsYXNzPVwicGFnaW5hdGlvbiBhZHZhbmNlZCB7e25hdmlnYXRpb25DbGFzc319XCIgKm5nSWY9XCJuYXZjb250cm9scyA9PT0gJ0NsYXNzaWMnXCI+XG4gICAgPGxpIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOmlzRGlzYWJsZUZpcnN0fVwiPlxuICAgICAgICA8YSBbdGl0bGVdPVwiYXBwTG9jYWxlLkxBQkVMX0ZJUlNUXCIgbmFtZT1cImZpcnN0XCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImlzRGlzYWJsZUZpcnN0XCJcbiAgICAgICAgICAgKGNsaWNrKT1cIm5hdmlnYXRlUGFnZSgnZmlyc3QnLCAkZXZlbnQpXCI+XG4gICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj48aSBjbGFzcz1cIndpIHdpLWZpcnN0LXBhZ2VcIj48L2k+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+R28gdG8gZmlyc3QgcGFnZSB7eyBpc0Rpc2FibGVGaXJzdCA/ICcgLCBEaXNhYmxlZCcgOiAnJ319PC9zcGFuPlxuICAgICAgICA8L2E+XG4gICAgPC9saT5cbiAgICA8bGkgW25nQ2xhc3NdPVwieydkaXNhYmxlZCc6aXNEaXNhYmxlUHJldmlvdXN9XCI+XG4gICAgICAgIDxhIFt0aXRsZV09XCJhcHBMb2NhbGUuTEFCRUxfUFJFVklPVVNcIiBuYW1lPVwicHJldlwiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXNEaXNhYmxlUHJldmlvdXNcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm5hdmlnYXRlUGFnZSgncHJldicsICRldmVudClcIj5cbiAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxpIGNsYXNzPVwid2kgd2ktY2hldnJvbi1sZWZ0XCI+PC9pPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkdvIHRvIHByZXZpb3VzIHBhZ2Uge3sgaXNEaXNhYmxlUHJldmlvdXMgPyAnLCBEaXNhYmxlZCcgOiAnJ319PC9zcGFuPlxuICAgICAgICA8L2E+XG4gICAgPC9saT5cbiAgICA8bGkgY2xhc3M9XCJwYWdlY291bnQgZGlzYWJsZWRcIj5cbiAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgW2Rpc2FibGVkXT1cImlzRGlzYWJsZUN1cnJlbnRcIiBbKG5nTW9kZWwpXT1cImRuLmN1cnJlbnRQYWdlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInU2hvd2luZyBQYWdlICcgKyBkbi5jdXJyZW50UGFnZSArICcgb2YgJyArIHBhZ2VDb3VudFwiXG4gICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiIChjaGFuZ2UpPVwib25Nb2RlbENoYW5nZSgkZXZlbnQpXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIi8+XG4gICAgICAgIDwvYT5cbiAgICA8L2xpPlxuICAgIDxsaSBjbGFzcz1cImRpc2FibGVkXCI+XG4gICAgICAgIDxhIFtoaWRkZW5dPVwiaXNEaXNhYmxlQ291bnRcIj4gLyB7e3BhZ2VDb3VudH19PC9hPlxuICAgIDwvbGk+XG4gICAgPGxpIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOmlzRGlzYWJsZU5leHR9XCI+XG4gICAgICAgIDxhIFt0aXRsZV09XCJhcHBMb2NhbGUuTEFCRUxfTkVYVFwiIG5hbWU9XCJuZXh0XCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImlzRGlzYWJsZU5leHRcIlxuICAgICAgICAgICAoY2xpY2spPVwibmF2aWdhdGVQYWdlKCduZXh0JywgJGV2ZW50KVwiPlxuICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+PGkgY2xhc3M9XCJ3aSB3aS1jaGV2cm9uLXJpZ2h0XCI+PC9pPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkdvIHRvIG5leHQgcGFnZSB7eyBpc0Rpc2FibGVOZXh0ID8gJyAsIERpc2FibGVkJyA6ICcnfX08L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICA8L2xpPlxuICAgIDxsaSBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJzppc0Rpc2FibGVMYXN0fVwiPlxuICAgICAgICA8YSBbdGl0bGVdPVwiYXBwTG9jYWxlLkxBQkVMX0xBU1RcIiBuYW1lPVwibGFzdFwiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc0Rpc2FibGVMYXN0XCJcbiAgICAgICAgICAgKGNsaWNrKT1cIm5hdmlnYXRlUGFnZSgnbGFzdCcsICRldmVudClcIj5cbiAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxpIGNsYXNzPVwid2kgd2ktbGFzdC1wYWdlXCI+PC9pPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkdvIHRvIGxhc3QgcGFnZSB7eyBpc0Rpc2FibGVMYXN0ID8gJyAsIERpc2FibGVkJyA6ICcnfX08L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICA8L2xpPlxuICAgIDxsaSAqbmdJZj1cInNob3dyZWNvcmRjb3VudFwiIGNsYXNzPVwidG90YWxjb3VudCBkaXNhYmxlZFwiPlxuICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIHRhYmluZGV4PVwiLTFcIiBhcmlhLWRpc2FibGVkPVwidHJ1ZVwiPnt7YXBwTG9jYWxlLkxBQkVMX1RPVEFMX1JFQ09SRFN9fToge3tkYXRhU2l6ZX19PC9hPlxuICAgIDwvbGk+XG48L3VsPlxuPHVsIGNsYXNzPVwicGFnZXIge3tuYXZpZ2F0aW9uQ2xhc3N9fVwiICpuZ0lmPVwibmF2Y29udHJvbHMgPT09ICdQYWdlcidcIj5cbiAgICA8bGkgY2xhc3M9XCJwcmV2aW91c1wiIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOmlzRGlzYWJsZVByZXZpb3VzfVwiPlxuICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIChjbGljayk9XCJuYXZpZ2F0ZVBhZ2UoJ3ByZXYnLCAkZXZlbnQpXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc0Rpc2FibGVQcmV2aW91c1wiPlxuICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+PGkgY2xhc3M9XCJ3aSB3aS1jaGV2cm9uLWxlZnRcIj48L2k+PC9zcGFuPlxuICAgICAgICAgICAge3thcHBMb2NhbGUuTEFCRUxfUFJFVklPVVN9fVxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+e3sgaXNEaXNhYmxlUHJldmlvdXMgPyAnICwgRGlzYWJsZWQnIDogJyd9fTwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgIDwvbGk+XG4gICAgPGxpIGNsYXNzPVwibmV4dFwiIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOmlzRGlzYWJsZU5leHR9XCI+XG4gICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCIgKGNsaWNrKT1cIm5hdmlnYXRlUGFnZSgnbmV4dCcsICRldmVudClcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImlzRGlzYWJsZU5leHRcIj5cbiAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxpIGNsYXNzPVwid2kgd2ktY2hldnJvbi1yaWdodFwiPjwvaT48L3NwYW4+XG4gICAgICAgICAgICB7e2FwcExvY2FsZS5MQUJFTF9ORVhUfX1cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPnt7IGlzRGlzYWJsZU5leHQgPyAnICwgRGlzYWJsZWQnIDogJyd9fTwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgIDwvbGk+XG48L3VsPlxuXG48cGFnaW5hdGlvbiBjbGFzcz1cInBhZ2luYXRpb24gYmFzaWNcIiBbbmdDbGFzc109XCJuYXZpZ2F0aW9uQ2xhc3NcIiAqbmdJZj1cIm5hdmNvbnRyb2xzID09PSAnQmFzaWMnXCIgcm9sZT1cIm5hdmlnYXRpb25cIlxuICAgICAgICAgICAgW2l0ZW1zUGVyUGFnZV09XCJtYXhSZXN1bHRzXCIgW3RvdGFsSXRlbXNdPVwiZGF0YVNpemVcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwiZG4uY3VycmVudFBhZ2VcIiAocGFnZUNoYW5nZWQpPVwicGFnZUNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidTaG93aW5nIFBhZ2UgJyArIGRuLmN1cnJlbnRQYWdlICsgJyBvZiAnICsgcGFnZUNvdW50ICsgJyBwYWdlcydcIlxuICAgICAgICAgICAgW2JvdW5kYXJ5TGlua3NdPVwiYm91bmRhcnlsaW5rc1wiIFttYXhTaXplXT1cIm1heHNpemVcIlxuICAgICAgICAgICAgW2RpcmVjdGlvbkxpbmtzXT1cImRpcmVjdGlvbmxpbmtzXCJcbiAgICAgICAgICAgIGZpcnN0VGV4dD1cIkZpcnRzdFwiIGxhc3RUZXh0PVwiTGFzdFwiXG4gICAgICAgICAgICBbY3VzdG9tUHJldmlvdXNUZW1wbGF0ZV09XCJwcmV2VGVtcGxhdGVcIlxuICAgICAgICAgICAgW2N1c3RvbU5leHRUZW1wbGF0ZV09XCJuZXh0VGVtcGxhdGVcIlxuICAgICAgICAgICAgW2N1c3RvbVBhZ2VUZW1wbGF0ZV09XCJwYWdlVGVtcGxhdGVcIj48L3BhZ2luYXRpb24+XG5cbjx1bCAqbmdJZj1cIm5hdmNvbnRyb2xzID09PSAnQmFzaWMnICYmIHNob3dyZWNvcmRjb3VudFwiIGNsYXNzPVwicGFnaW5hdGlvblwiPlxuICAgIDxsaSBjbGFzcz1cInRvdGFsY291bnQgZGlzYWJsZWQgYmFzaWNjb3VudFwiPlxuICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIHRhYmluZGV4PVwiLTFcIiBhcmlhLWRpc2FibGVkPVwidHJ1ZVwiPnt7YXBwTG9jYWxlLkxBQkVMX1RPVEFMX1JFQ09SRFN9fToge3tkYXRhU2l6ZX19PC9hPlxuICAgIDwvbGk+XG48L3VsPlxuXG48bmctdGVtcGxhdGUgI3BhZ2VUZW1wbGF0ZSBsZXQtcGFnZT5cbiAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIiBbYXR0ci5kYXRhLWlzYWNpdHZlcGFnZV09XCJwYWdlLmFjdGl2ZVwiPnt7J1BhZ2UgJ319PC9zcGFuPlxuICAgIHt7cGFnZS5udW1iZXJ9fVxuICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiICpuZ0lmPVwicGFnZS5hY3RpdmVcIj4ge3snLCBTaG93aW5nIHBhZ2UgJyArIHBhZ2UubnVtYmVyICsgJyBvZiAnICsgcGFnZUNvdW50fX08L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNwcmV2VGVtcGxhdGUgbGV0LWRpc2FibGVkPVwiZGlzYWJsZWRcIj5cbiAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIiBbYXR0ci5kYXRhLWlzZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5HbyB0byBQcmV2aW91cyBwYWdlIHt7ZGlzYWJsZWQgPyAnLCBEaXNhYmxlZCcgOiAnJ319PC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjbmV4dFRlbXBsYXRlIGxldC1kaXNhYmxlZD1cImRpc2FibGVkXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCIgW2F0dHIuZGF0YS1pc2Rpc2FibGVkXT1cImRpc2FibGVkXCI+R28gdG8gTmV4dCBwYWdlIHt7ZGlzYWJsZWQgPyAnLCBEaXNhYmxlZCcgOiAnJ319PC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
771
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21wb25lbnRzL3dpZGdldHMvZGF0YS9wYWdpbmF0aW9uL3NyYy9wYWdpbmF0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL3BhZ2luYXRpb24vc3JjL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFpQixRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFbkgsT0FBTyxFQUNILFVBQVUsRUFDVixNQUFNLEVBQ04sWUFBWSxFQUNaLFVBQVUsRUFDVixRQUFRLEVBQ1IsU0FBUyxFQUNULFdBQVcsRUFDWCxTQUFTLEVBQ1osTUFBTSxVQUFVLENBQUM7QUFDbEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxnQ0FBZ0MsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ2hLLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUMsTUFBTSxXQUFXLENBQUM7Ozs7Ozs7OztJQ2dDbkUsQUFESiw4QkFBd0QsWUFDYTtJQUFBLFlBQStDO0lBQ3BILEFBRG9ILGlCQUFJLEVBQ25IOzs7SUFEZ0UsZUFBK0M7SUFBL0MsMEZBQStDOzs7O0lBM0NoSCxBQURKLEFBREosMEJBQXNGLFlBQ3RDLFdBR0c7SUFBeEMsK0tBQVMsb0JBQWEsT0FBTyxTQUFTLEtBQUM7SUFD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O1FBQ3ZDLENBQUM7YUFBTSxDQUFDO1lBQ0osS0FBSyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDeEMsQ0FBQztJQUNMLENBQUM7SUFFRCxlQUFlO1FBQ1gsTUFBTSxjQUFjLEdBQUksSUFBSSxDQUFDLGFBQTRCLENBQUM7UUFDMUQsY0FBYyxDQUFDLE9BQU8sR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQy9CLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM1QixDQUFDLENBQUM7SUFDTixDQUFDO29GQXBqQlEsbUJBQW1CLDBEQXdFbUIsU0FBUywyQkFBeUIsa0JBQWtCO29FQXhFMUYsbUJBQW1CLCtKQUpqQjtnQkFDUCxrQkFBa0IsQ0FBQyxtQkFBbUIsQ0FBQzthQUMxQztZQ3VETCxBQUhBLEFBTEEsQUFOQSxBQVhBLEFBbkJBLEFBaERBLG9FQUFzRix1REFnRGhCLHNFQTRCdEIscURBRTBCLHdHQU10Qyx3R0FLZSx3R0FHQTs7WUE1RkUsb0RBQStCO1lBZ0Q3QyxjQUE2QjtZQUE3QixrREFBNkI7WUFtQkYsY0FBNkI7WUFBN0Isa0RBQTZCO1lBVzFGLGNBQWdEO1lBQWhELHlFQUFnRDs7O2lGRHZDeEMsbUJBQW1CO2NBUC9CLFNBQVM7MkJBQ0ksZ0JBQWdCLGFBRWY7b0JBQ1Asa0JBQWtCLHFCQUFxQjtpQkFDMUM7O3NCQTBFMkIsUUFBUTs7c0JBQUksTUFBTTt1QkFBQyxTQUFTOztzQkFBa0IsTUFBTTt1QkFBQyxrQkFBa0I7O3NCQUFHLFFBQVE7cUJBdEVwRyxhQUFhO2tCQUF0QixNQUFNO1lBQ0csaUJBQWlCO2tCQUExQixNQUFNOztrRkFIRSxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIEluamVjdG9yLCBPdXRwdXQsIFNraXBTZWxmLCBBZnRlclZpZXdJbml0LCBPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gICAgJGFwcERpZ2VzdCxcbiAgICAkd2F0Y2gsXG4gICAgQXBwQ29uc3RhbnRzLFxuICAgIERhdGFTb3VyY2UsXG4gICAgZGVib3VuY2UsXG4gICAgaXNEZWZpbmVkLFxuICAgIHN3aXRjaENsYXNzLFxuICAgIHRyaWdnZXJGblxufSBmcm9tICdAd20vY29yZSc7XG5pbXBvcnQgeyBERUJPVU5DRV9USU1FUywgZ2V0T3JkZXJCeUV4cHIsIHByb3ZpZGVBc1dpZGdldFJlZiwgU3R5bGFibGVDb21wb25lbnQsIHN0eWxlciwgV2lkZ2V0UmVmLCB1bnN1cHBvcnRlZFN0YXRlUGVyc2lzdGVuY2VUeXBlc30gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5pbXBvcnQgeyByZWdpc3RlclByb3BzIH0gZnJvbSAnLi9wYWdpbmF0aW9uLnByb3BzJztcbmltcG9ydCB7Zm9yRWFjaCwgZ2V0LCBpc0FycmF5LCBpc0VtcHR5LCBpc051bGwsIGlzU3RyaW5nfSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmNvbnN0IERFRkFVTFRfQ0xTID0gJ2FwcC1kYXRhbmF2aWdhdG9yIGNsZWFyZml4JztcbmNvbnN0IFdJREdFVF9DT05GSUcgPSB7d2lkZ2V0VHlwZTogJ3dtLXBhZ2luYXRpb24nLCBob3N0Q2xhc3M6IERFRkFVTFRfQ0xTfTtcblxuY29uc3Qgc2l6ZUNsYXNzZXMgPSB7XG4gICAgJ1BhZ2VyJzoge1xuICAgICAgICAnc21hbGwnOiAncGFnZXItc20nLFxuICAgICAgICAnbGFyZ2UnOiAncGFnZXItbGcnXG4gICAgfSxcbiAgICAnQmFzaWMnOiB7XG4gICAgICAgICdzbWFsbCc6ICdwYWdpbmF0aW9uLXNtJyxcbiAgICAgICAgJ2xhcmdlJzogJ3BhZ2luYXRpb24tbGcnXG4gICAgfSxcbiAgICAnQ2xhc3NpYyc6IHtcbiAgICAgICAgJ3NtYWxsJzogJ3BhZ2luYXRpb24tc20nLFxuICAgICAgICAnbGFyZ2UnOiAncGFnaW5hdGlvbi1sZydcbiAgICB9XG59O1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdbd21QYWdpbmF0aW9uXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3BhZ2luYXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBwcm92aWRlQXNXaWRnZXRSZWYoUGFnaW5hdGlvbkNvbXBvbmVudClcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIFBhZ2luYXRpb25Db21wb25lbnQgZXh0ZW5kcyBTdHlsYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICAgIHN0YXRpYyBpbml0aWFsaXplUHJvcHMgPSByZWdpc3RlclByb3BzKCk7XG4gICAgQE91dHB1dCgpIHJlc3VsdEVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBtYXhSZXN1bHRzRW1pdHRlcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBkYXRhc291cmNlO1xuICAgIG1heFJlc3VsdHM7XG4gICAgbmF2aWdhdGlvbnNpemU7XG4gICAgc2hvd3JlY29yZGNvdW50O1xuXG4gICAgbmF2Y29udHJvbHM7XG4gICAgbmF2aWdhdGlvbjtcblxuICAgIGJvdW5kYXJ5bGlua3M7XG4gICAgZGlyZWN0aW9ubGlua3M7XG5cbiAgICBuYXZpZ2F0aW9uQ2xhc3M7XG4gICAgZG4gPSB7XG4gICAgICAgIGN1cnJlbnRQYWdlOiAxXG4gICAgfTtcblxuICAgIHBhZ2VDb3VudCA9IDA7XG4gICAgaXNEaXNhYmxlTmV4dCA9IHRydWU7XG4gICAgaXNEaXNhYmxlUHJldmlvdXMgPSB0cnVlO1xuICAgIGlzRGlzYWJsZUZpcnN0ID0gdHJ1ZTtcbiAgICBpc0Rpc2FibGVMYXN0ID0gdHJ1ZTtcbiAgICBpc0Rpc2FibGVDdXJyZW50O1xuICAgIGRhdGFTaXplO1xuICAgIHByZXZzaG93cmVjb3JkY291bnQ7XG4gICAgaXNEaXNhYmxlQ291bnQ7XG4gICAgZmlyc3RSb3c7XG4gICAgcmVzdWx0O1xuICAgIF9fZnVsbERhdGE7XG4gICAgZGF0YXNldDtcbiAgICBvcHRpb25zO1xuICAgIHN0YXRlaGFuZGxlcjtcbiAgICBmaWx0ZXJGaWVsZHM7XG4gICAgc29ydE9wdGlvbnM7XG4gICAgYmluZGRhdGFzZXQ7XG4gICAgcGFnaW5hdGlvbjtcbiAgICBsb2dpY2FsT3A7XG5cbiAgICBwcml2YXRlIF9kZWJvdW5jZWRBcHBseURhdGFzZXQgPSBkZWJvdW5jZSgoKSA9PiB0aGlzLndpZGdldC5kYXRhc2V0ID0gdGhpcy5kYXRhc2V0LCBERUJPVU5DRV9USU1FUy5QQUdJTkFUSU9OX0RFQk9VTkNFX1RJTUUpO1xuICAgIHByaXZhdGUgX2RlYm91bmNlZFBhZ2VDaGFuZ2VkID0gZGVib3VuY2UoZXZlbnQgPT4ge1xuICAgICAgICBjb25zdCBjdXJyZW50UGFnZSA9IGV2ZW50ICYmIGV2ZW50LnBhZ2U7XG4gICAgICAgIC8vIERvIG5vdCBjYWxsIGdvVG9QYWdlIGlmIHBhZ2UgaGFzIG5vdCBjaGFuZ2VkXG4gICAgICAgIGlmIChjdXJyZW50UGFnZSAhPT0gdGhpcy5kbi5jdXJyZW50UGFnZSkge1xuICAgICAgICAgICAgY29uc3QgaW5zdCA9ICh0aGlzIGFzIGFueSkucGFyZW50IHx8IHRoaXM7XG4gICAgICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gY3VycmVudFBhZ2U7XG4gICAgICAgICAgICBpbnN0Lmludm9rZUV2ZW50Q2FsbGJhY2soJ3BhZ2luYXRpb25jaGFuZ2UnLCB7JGV2ZW50OiB1bmRlZmluZWQsICRpbmRleDogdGhpcy5kbi5jdXJyZW50UGFnZX0pO1xuICAgICAgICAgICAgdGhpcy5nb1RvUGFnZSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMubmF2aWdhdGlvbiA9PT0gJ0Jhc2ljJykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NldEFyaWFGb3JCYXNpY05hdmlnYXRpb24oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIERFQk9VTkNFX1RJTUVTLlBBR0lOQVRJT05fREVCT1VOQ0VfVElNRSk7XG5cbiAgICBwcml2YXRlIF9zZXRBcmlhRm9yQmFzaWNOYXZpZ2F0aW9uKCkge1xuICAgICAgICBmb3JFYWNoKHRoaXMubmF0aXZlRWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYScpLCAoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaXRlbS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCAnamF2YXNjcmlwdDp2b2lkKDApOycpO1xuICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlID0gaXRlbS5xdWVyeVNlbGVjdG9yKCdzcGFuJyk7XG4gICAgICAgICAgICBpZiAoY2hpbGROb2RlPy5kYXRhc2V0LmlzYWNpdHZlcGFnZSA9PT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgICAgICAgICBpdGVtLnNldEF0dHJpYnV0ZSgnYXJpYS1jdXJyZW50JywgJ3RydWUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKGNoaWxkTm9kZT8uZGF0YXNldC5pc2Rpc2FibGVkID09PSBcInRydWVcIikge1xuICAgICAgICAgICAgICAgIGl0ZW0uc2V0QXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJywgJ3RydWUnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXRlbS5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtZGlzYWJsZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoaW5qOiBJbmplY3RvciwgQFNraXBTZWxmKCkgQEluamVjdChXaWRnZXRSZWYpIHB1YmxpYyBwYXJlbnQsIEBJbmplY3QoJ0VYUExJQ0lUX0NPTlRFWFQnKSBAT3B0aW9uYWwoKSBleHBsaWNpdENvbnRleHQ6IGFueSkge1xuICAgICAgICBzdXBlcihpbmosIFdJREdFVF9DT05GSUcsIGV4cGxpY2l0Q29udGV4dCk7XG4gICAgICAgIHN0eWxlcih0aGlzLm5hdGl2ZUVsZW1lbnQsIHRoaXMpO1xuICAgIH1cblxuICAgIHNldFJlc3VsdChyZXN1bHQpIHtcbiAgICAgICAgLy8gVE9ETzogRW1pdCBldmVudCBvbmx5IGlmIHJlc3VsdCBpcyBjaGFuZ2VkXG4gICAgICAgIHRoaXMucmVzdWx0ID0gcmVzdWx0O1xuICAgICAgICB0aGlzLnJlc3VsdEVtaXR0ZXIuZW1pdCh0aGlzLnJlc3VsdCk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIG5hdmlnYXRpb25DbGFzcyBiYXNlZCBvbiBuYXZpZ2F0aW9uIGFuZCBuYXZpZ2F0aW9uU2l6ZSBwcm9wc1xuICAgIHByaXZhdGUgdXBkYXRlTmF2U2l6ZSgpIHtcbiAgICAgICAgY29uc3Qgc2l6ZUNscyA9IHNpemVDbGFzc2VzW3RoaXMubmF2Y29udHJvbHNdO1xuICAgICAgICBpZiAoc2l6ZUNscyAmJiB0aGlzLm5hdmlnYXRpb25zaXplKSB7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25DbGFzcyA9IHNpemVDbHNbdGhpcy5uYXZpZ2F0aW9uc2l6ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25DbGFzcyA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gRnVuY3Rpb24gdG8gcmVzZXQgdGhlIHBhZ2luZyB2YWx1ZXMgdG8gZGVmYXVsdC5cbiAgICByZXNldFBhZ2VOYXZpZ2F0aW9uKCkge1xuICAgICAgICB0aGlzLnBhZ2VDb3VudCA9IDA7XG4gICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSAxO1xuICAgICAgICB0aGlzLmRhdGFTaXplID0gMDtcbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSB0aGUgcGFnaW5nIHZhbHVlcy4qL1xuICAgIGNhbGN1bGF0ZVBhZ2luZ1ZhbHVlcygpIHtcbiAgICAgICAgdGhpcy5wYWdlQ291bnQgPSAodGhpcy5kYXRhU2l6ZSA+IHRoaXMubWF4UmVzdWx0cykgPyAoTWF0aC5jZWlsKHRoaXMuZGF0YVNpemUgLyB0aGlzLm1heFJlc3VsdHMpKSA6ICh0aGlzLmRhdGFTaXplIDwgMCA/IDAgOiAxKTtcbiAgICAgICAgdGhpcy5kbi5jdXJyZW50UGFnZSA9IHRoaXMuZG4uY3VycmVudFBhZ2UgfHwgMTtcbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIHNldCBkZWZhdWx0IHZhbHVlcyB0byB0aGUgcGFnaW5nIHBhcmFtZXRlcnMqL1xuICAgIHNldERlZmF1bHRQYWdpbmdWYWx1ZXMoZGF0YVNpemUsIG1heFJlc3VsdHMsIGN1cnJlbnRQYWdlKSB7XG4gICAgICAgIC8qSWYgbmVpdGhlciAnZGF0YVNpemUnIG5vciAnbWF4UmVzdWx0cycgaXMgc2V0LCB0aGVuIHNldCBkZWZhdWx0IHZhbHVlcyB0byB0aGUgcGFnaW5nIHBhcmFtZXRlcnMuKi9cbiAgICAgICAgaWYgKCFkYXRhU2l6ZSAmJiAhbWF4UmVzdWx0cykge1xuICAgICAgICAgICAgdGhpcy5wYWdlQ291bnQgPSAxO1xuICAgICAgICAgICAgdGhpcy5kbi5jdXJyZW50UGFnZSA9IDE7XG4gICAgICAgICAgICB0aGlzLm1heFJlc3VsdHMgPSBkYXRhU2l6ZTtcbiAgICAgICAgICAgIHRoaXMuZGF0YVNpemUgPSBkYXRhU2l6ZTtcbiAgICAgICAgfSBlbHNlIHsgLypFbHNlLCBzZXQgdGhlIHNwZWNpZmllZCB2YWx1ZXMgYW5kIHJlY2FsY3VsYXRlIHBhZ2luZyBwYXJhbWV0ZXJzLiovXG4gICAgICAgICAgICB0aGlzLm1heFJlc3VsdHMgPSBtYXhSZXN1bHRzIHx8IHRoaXMubWF4UmVzdWx0cztcbiAgICAgICAgICAgIHRoaXMuZGF0YVNpemUgPSBpc0RlZmluZWQoZGF0YVNpemUpID8gZGF0YVNpemUgOiB0aGlzLmRhdGFTaXplO1xuICAgICAgICAgICAgdGhpcy5kbi5jdXJyZW50UGFnZSA9IGN1cnJlbnRQYWdlIHx8IHRoaXMuZG4uY3VycmVudFBhZ2U7XG4gICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZVBhZ2luZ1ZhbHVlcygpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWF4UmVzdWx0c0VtaXR0ZXIuZW1pdCh0aGlzLm1heFJlc3VsdHMpO1xuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gY2hlY2sgdGhlIGRhdGFTaXplIGFuZCBtYW5pcHVsYXRlIHRoZSBuYXZpZ2F0b3IgYWNjb3JkaW5nbHkuKi9cbiAgICBjaGVja0RhdGFTaXplKGRhdGFTaXplLCBudW1iZXJPZkVsZW1lbnRzPywgc2l6ZT8pIHtcbiAgICAgICAgLypJZiB0aGUgZGF0YVNpemUgaXMgLTEgb3IgSW50ZWdlci5NQVhfVkFMVUUoIHdoaWNoIGlzIDIxNDc0ODM2NDcpLCB0aGVuIHRoZSB0b3RhbCBudW1iZXIgb2YgcmVjb3JkcyBpcyBub3Qga25vd24uXG4gICAgICAgICAqIEhlbmNlLFxuICAgICAgICAgKiAxLiBIaWRlIHRoZSAnVG90YWwgUmVjb3JkIENvdW50Jy5cbiAgICAgICAgICogMi4gRGlzYWJsZSB0aGUgJ0dvVG9MYXN0UGFnZScgbGluayBhcyB0aGUgcGFnZSBudW1iZXIgb2YgdGhlIGxhc3QgcGFnZSBpcyBub3Qga25vd24uKi9cbiAgICAgICAgaWYgKGRhdGFTaXplID09PSAtMSB8fCBkYXRhU2l6ZSA9PT0gQXBwQ29uc3RhbnRzLklOVF9NQVhfVkFMVUUpIHtcbiAgICAgICAgICAgIHRoaXMucHJldnNob3dyZWNvcmRjb3VudCA9IHRoaXMuc2hvd3JlY29yZGNvdW50O1xuICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVMYXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlQ291bnQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zaG93cmVjb3JkY291bnQgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIElmIG51bWJlciBvZiByZWNvcmRzIGluIGN1cnJlbnQgcGFnZSBpcyBsZXNzIHRoYW4gdGhlIG1heCByZWNvcmRzIHNpemUsIHRoaXMgaXMgdGhlIGxhc3QgcGFnZS4gU28gZGlzYWJsZSBuZXh0IGJ1dHRvbi5cbiAgICAgICAgICAgIGlmIChudW1iZXJPZkVsZW1lbnRzIDwgc2l6ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlTmV4dCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZUNvdW50ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNob3dyZWNvcmRjb3VudCA9IHRoaXMucHJldnNob3dyZWNvcmRjb3VudCB8fCB0aGlzLnNob3dyZWNvcmRjb3VudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gZGlzYWJsZSBuYXZpZ2F0aW9uIGJhc2VkIG9uIHRoZSBjdXJyZW50IGFuZCB0b3RhbCBwYWdlcy4qL1xuICAgIGRpc2FibGVOYXZpZ2F0aW9uKCkge1xuICAgICAgICBjb25zdCBpc0N1cnJlbnRQYWdlRmlyc3QgPSAodGhpcy5kbi5jdXJyZW50UGFnZSA9PT0gMSksXG4gICAgICAgICAgICBpc0N1cnJlbnRQYWdlTGFzdCA9ICh0aGlzLmRuLmN1cnJlbnRQYWdlID09PSB0aGlzLnBhZ2VDb3VudCk7XG4gICAgICAgIGlmICghdGhpcy5wYWdpbmF0aW9uPy5uZXh0KSB7XG4gICAgICAgICAgICB0aGlzLmlzRGlzYWJsZUZpcnN0ID0gdGhpcy5pc0Rpc2FibGVQcmV2aW91cyA9IGlzQ3VycmVudFBhZ2VGaXJzdDtcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlTmV4dCA9IHRoaXMuaXNEaXNhYmxlTGFzdCA9IGlzQ3VycmVudFBhZ2VMYXN0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gV01TLTE4ODY3OiBJbiBjYXNlIG9mIHNlcnZlciBzaWRlIHBhZ2luYXRpb24sIGZvciBwYWdlciB0eXBlIHBhZ2luYXRpb24gZGVwZW5kIG9uIHByZXYgYW5kIG5leHQgZmxhZ3Mgd2hpY2ggYXJlIHNldCBieSBkZXZlbG9wZXJcbiAgICAgICAgICAgIHRoaXMuaXNEaXNhYmxlRmlyc3QgPSB0aGlzLmlzRGlzYWJsZVByZXZpb3VzID0gIXRoaXMucGFnaW5hdGlvbi5wcmV2O1xuICAgICAgICAgICAgdGhpcy5pc0Rpc2FibGVOZXh0ID0gdGhpcy5pc0Rpc2FibGVMYXN0ID0gIXRoaXMucGFnaW5hdGlvbi5uZXh0O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNEaXNhYmxlQ3VycmVudCA9IGlzQ3VycmVudFBhZ2VGaXJzdCAmJiBpc0N1cnJlbnRQYWdlTGFzdDtcbiAgICAgICAgLy8gSW4gY2FzZSBvZiBjbGllbnQgc2lkZSBwYWdpbmF0aW9uLCB3aGVuIGxvYWQgbW9yZSByZWFjaGVzIGxhc3QgcGFnZSBoaWRlIHRoZSBvbi1kZW1hbmQgZ3JpZCBlbGVcbiAgICAgICAgaWYgKHRoaXMuZGF0YXNldCAmJiB0aGlzLmRhdGFzZXQubGVuZ3RoICYmIHRoaXMuaXNEaXNhYmxlTmV4dCAmJiB0aGlzLnBhcmVudC5vbkRlbWFuZExvYWQgJiYgdGhpcy5wYXJlbnQud2lkZ2V0VHlwZSA9PT0gJ3dtLXRhYmxlJykge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQuY2FsbERhdGFHcmlkTWV0aG9kKCdoaWRlTG9hZGluZ0luZGljYXRvcicsIHRoaXMuaXNEaXNhYmxlTmV4dCwgdGhpcy5wYXJlbnQuaW5mU2Nyb2xsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIHZhcmlhYmxlIGJvdW5kIHRvIHRoZSBkYXRhLW5hdmlnYXRvciBoYXMgcGFnaW5nLiovXG4gICAgaXNEYXRhU291cmNlSGFzUGFnaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhc291cmNlICYmIHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLklTX1BBR0VBQkxFKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgdGhlIHJlc3VsdCBmb3IgY2xpZW50IHNpZGUgcGFnaW5hdGlvblxuICAgIHNldE5vblBhZ2VhYmxlRGF0YShuZXdWYWwpIHtcbiAgICAgICAgbGV0IGRhdGFTaXplLFxuICAgICAgICAgICAgbWF4UmVzdWx0cyxcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlLFxuICAgICAgICAgICAgc3RhcnRJbmRleDtcbiAgICAgICAgZGF0YVNpemUgPSBpc0FycmF5KG5ld1ZhbCkgPyBuZXdWYWwubGVuZ3RoIDogKGlzRW1wdHkobmV3VmFsKSA/IDAgOiAxKTtcbiAgICAgICAgbWF4UmVzdWx0cyA9ICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLm1heFJlc3VsdHMpIHx8IGRhdGFTaXplO1xuXG4gICAgICAgIC8vIEZvciBzdGF0aWMgdmFyaWFibGUsIGtlZXAgdGhlIGN1cnJlbnQgcGFnZS4gRm9yIG90aGVyIHZhcmlhYmxlcyB3aXRob3V0IHBhZ2luYXRpb24gcmVzZXQgdGhlIHBhZ2UgdG8gMVxuICAgICAgICAvLyBGaXggZm9yIFtXTVMtMjMyNjNdOiBncmlkT3B0aW9ucy5pc05leHRQYWdlRGF0YSBmbGFnIGlzIGZhbHNlIHdoZW4gZGF0YXNldCBpcyBjaGFuZ2VkIGZyb20gc2NyaXB0LCBzbyBzZXR0aW5nIGN1cnJlbnQgcGFnZSB0byAxXG4gICAgICAgIGlmICh0aGlzLmRhdGFzb3VyY2UgJiYgKHRoaXMuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLklTX0FQSV9BV0FSRSkgfHwgKHRoaXMucGFyZW50LndpZGdldFR5cGUgPT09ICd3bS10YWJsZScgJiYgKHRoaXMucGFyZW50LmdyaWRPcHRpb25zLmlzTmF2VHlwZVNjcm9sbE9yT25kZW1hbmQoKSAmJiAoZ2V0KHRoaXMucGFyZW50LCAnZ3JpZE9wdGlvbnMubGFzdEFjdGlvblBlcmZvcm1lZCcpID09PSB0aGlzLnBhcmVudC5ncmlkT3B0aW9ucy5BQ1RJT05TLkRBVEFTRVRfVVBEQVRFIHx8ICFnZXQodGhpcy5wYXJlbnQsICdncmlkT3B0aW9ucy5pc05leHRQYWdlRGF0YScpKSkpKSkge1xuICAgICAgICAgICAgY3VycmVudFBhZ2UgPSAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3VycmVudFBhZ2UgPSB0aGlzLmRuLmN1cnJlbnRQYWdlIHx8IDE7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldERlZmF1bHRQYWdpbmdWYWx1ZXMoZGF0YVNpemUsIG1heFJlc3VsdHMsIGN1cnJlbnRQYWdlKTtcbiAgICAgICAgdGhpcy5kaXNhYmxlTmF2aWdhdGlvbigpO1xuXG4gICAgICAgIHN0YXJ0SW5kZXggPSAodGhpcy5kbi5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5tYXhSZXN1bHRzO1xuICAgICAgICB0aGlzLnNldFJlc3VsdChpc0FycmF5KG5ld1ZhbCkgPyBuZXdWYWwuc2xpY2Uoc3RhcnRJbmRleCwgc3RhcnRJbmRleCArIHRoaXMubWF4UmVzdWx0cykgOiBuZXdWYWwpO1xuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gc2V0IHRoZSB2YWx1ZXMgbmVlZGVkIGZvciBwYWdpbmF0aW9uKi9cbiAgICBwcml2YXRlIHNldFBhZ2luZ1ZhbHVlcyhuZXdWYWwpIHtcbiAgICAgICAgbGV0IGRhdGFTaXplLFxuICAgICAgICAgICAgbWF4UmVzdWx0cyxcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlLFxuICAgICAgICAgICAgZGF0YVNvdXJjZTtcbiAgICAgICAgbGV0IHZhcmlhYmxlT3B0aW9uczogYW55ID0ge307XG4gICAgICAgIC8vIFN0b3JlIHRoZSBkYXRhIGluIF9fZnVsbERhdGEuIFRoaXMgaXMgdXNlZCBmb3IgY2xpZW50IHNpZGUgc2VhcmNoaW5nIHdpdHZhaCBvdXQgbW9kaWZ5aW5nIHRoZSBhY3R1YWwgZGF0YXNldC5cbiAgICAgICAgdGhpcy5fX2Z1bGxEYXRhID0gbmV3VmFsO1xuICAgICAgICAvKkNoZWNrIGZvciBzYW5pdHkqL1xuICAgICAgICBpZiAodGhpcy5iaW5kZGF0YXNldCkge1xuICAgICAgICAgICAgZGF0YVNvdXJjZSA9IHRoaXMuZGF0YXNvdXJjZSB8fCB7fTtcbiAgICAgICAgICAgIHZhcmlhYmxlT3B0aW9ucyA9IGRhdGFTb3VyY2UuX29wdGlvbnMgfHwge307XG4gICAgICAgICAgICAvKkNoZWNrIGZvciBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGRhdGEgc2V0Ki9cbiAgICAgICAgICAgIGlmIChuZXdWYWwpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0RhdGFTb3VyY2VIYXNQYWdpbmcoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2luYXRpb24gPSB0aGlzLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5HRVRfUEFHSU5HX09QVElPTlMpIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiBcImZpbHRlckZpZWxkc1wiIGFuZCBcInNvcnRPcHRpb25zXCIgaGF2ZSBiZWVuIHNldCwgdGhlbiBzZXQgdGhlbSBzbyB0aGF0IHRoZSBmaWx0ZXJzIGNhbiBiZSByZXRhaW5lZCB3aGlsZSBmZXRjaGluZyBkYXRhIHVwb24gcGFnZSBuYXZpZ2F0aW9uLlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckZpZWxkcyA9IHZhcmlhYmxlT3B0aW9ucy5maWx0ZXJGaWVsZHMgfHwge307XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9naWNhbE9wID0gdmFyaWFibGVPcHRpb25zLmxvZ2ljYWxPcCB8fCAnJztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3J0T3B0aW9ucyA9IHZhcmlhYmxlT3B0aW9ucy5vcmRlckJ5IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAoaXNBcnJheSh0aGlzLnBhZ2luYXRpb24uc29ydCkgPyBnZXRPcmRlckJ5RXhwcih0aGlzLnBhZ2luYXRpb24uc29ydCkgOiAnJyk7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFTaXplID0gdGhpcy5wYWdpbmF0aW9uLnRvdGFsRWxlbWVudHM7XG4gICAgICAgICAgICAgICAgICAgIG1heFJlc3VsdHMgPSB0aGlzLnBhZ2luYXRpb24uc2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucGFnaW5hdGlvbi5udW1iZXJPZkVsZW1lbnRzID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRGVmaW5lZCh0aGlzLnBhZ2luYXRpb24ubnVtYmVyKSkgeyAvLyBudW1iZXIgaXMgcGFnZSBudW1iZXIgcmVjZWl2ZWQgZnJvbSBiYWNrZW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kbi5jdXJyZW50UGFnZSA9IHRoaXMucGFnaW5hdGlvbi5udW1iZXIgKyAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhZ2UgPSB0aGlzLmRuLmN1cnJlbnRQYWdlIHx8IDE7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFnZSA9IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLyogU2VuZGluZyBwYWdlQ291bnQgdW5kZWZpbmVkIHRvIGNhbGN1bGF0ZSBpdCBhZ2FpbiBmb3IgcXVlcnkuKi9cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0UGFnaW5nVmFsdWVzKGRhdGFTaXplLCBtYXhSZXN1bHRzLCBjdXJyZW50UGFnZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzYWJsZU5hdmlnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja0RhdGFTaXplKGRhdGFTaXplLCB0aGlzLnBhZ2luYXRpb24ubnVtYmVyT2ZFbGVtZW50cywgdGhpcy5wYWdpbmF0aW9uLnNpemUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFJlc3VsdChuZXdWYWwpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWlzU3RyaW5nKG5ld1ZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXROb25QYWdlYWJsZURhdGEobmV3VmFsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmVzdWx0KG5ld1ZhbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldFBhZ2VOYXZpZ2F0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5uYXZpZ2F0aW9uID09PSAnQmFzaWMnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0QXJpYUZvckJhc2ljTmF2aWdhdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKG5ld1ZhbCAmJiAhaXNTdHJpbmcobmV3VmFsKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0Tm9uUGFnZWFibGVEYXRhKG5ld1ZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBjdXJyZW50IHBhZ2UgaXMgdGhlIGZpcnN0IHBhZ2UqL1xuICAgIGlzRmlyc3RQYWdlKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuZG4uY3VycmVudFBhZ2UgPT09IDEgfHwgIXRoaXMuZG4uY3VycmVudFBhZ2UpO1xuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIGN1cnJlbnQgcGFnZSBpcyB0aGUgbGFzdCBwYWdlKi9cbiAgICBpc0xhc3RQYWdlKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuZG4uY3VycmVudFBhZ2UgPT09IHRoaXMucGFnZUNvdW50KTtcbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIG5hdmlnYXRlIHRvIHRoZSBsYXN0IHBhZ2UqL1xuICAgIGdvVG9MYXN0UGFnZShpc1JlZnJlc2gsIGV2ZW50LCBjYWxsYmFjaykge1xuICAgICAgICBpZiAoIXRoaXMuaXNMYXN0UGFnZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlQ291bnQ7XG4gICAgICAgICAgICB0aGlzLmdvVG9QYWdlKGV2ZW50LCBjYWxsYmFjayk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNSZWZyZXNoKSB7XG4gICAgICAgICAgICB0aGlzLmdvVG9QYWdlKGV2ZW50LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKkZ1bmN0aW9uIHRvIG5hdmlnYXRlIHRvIHRoZSBmaXJzdCBwYWdlKi9cbiAgICBnb1RvRmlyc3RQYWdlKGlzUmVmcmVzaCwgZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0ZpcnN0UGFnZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gMTtcbiAgICAgICAgICAgIHRoaXMuZ29Ub1BhZ2UoZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc1JlZnJlc2gpIHtcbiAgICAgICAgICAgIHRoaXMuZ29Ub1BhZ2UoZXZlbnQsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gbmF2aWdhdGUgdG8gdGhlIGN1cnJlbnQgcGFnZSovXG4gICAgZ29Ub1BhZ2UoZXZlbnQ/LCBjYWxsYmFjaz8pIHtcbiAgICAgICAgdGhpcy5maXJzdFJvdyA9ICh0aGlzLmRuLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLm1heFJlc3VsdHM7XG4gICAgICAgIGNvbnN0IG1vZGUgPSB0aGlzLnBhcmVudC5zdGF0ZVBlcnNpc3RlbmNlLmNvbXB1dGVNb2RlKHRoaXMuc3RhdGVoYW5kbGVyKTtcbiAgICAgICAgaWYgKG1vZGUgJiYgbW9kZS50b0xvd2VyQ2FzZSgpICE9PSAnbm9uZScgJiYgKHRoaXMucGFyZW50LndpZGdldFR5cGUgPT09ICd3bS10YWJsZScgfHwgdGhpcy5wYXJlbnQud2lkZ2V0VHlwZSA9PT0gJ3dtLWxpc3QnKSkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQuX3NlbGVjdGVkSXRlbXNFeGlzdCA9IHRydWU7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0ZpcnN0UGFnZSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuc3RhdGVQZXJzaXN0ZW5jZS5yZW1vdmVXaWRnZXRTdGF0ZSh0aGlzLnBhcmVudCwgJ3BhZ2luYXRpb24nKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHVuc3VwcG9ydGVkU3RhdGVQZXJzaXN0ZW5jZVR5cGVzLmluZGV4T2YodGhpcy5wYXJlbnQubmF2aWdhdGlvbikgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LnN0YXRlUGVyc2lzdGVuY2Uuc2V0V2lkZ2V0U3RhdGUodGhpcy5wYXJlbnQsIHtwYWdpbmF0aW9uOiB0aGlzLmRuLmN1cnJlbnRQYWdlfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBhcmVudC53aWRnZXRUeXBlID09PSAnd20tbGlzdCcgfHx0aGlzLnBhcmVudC53aWRnZXRUeXBlID09PSAnd20tdGFibGUnICkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1JldGFpbiBTdGF0ZSBoYW5kbGluZyBvbiBXaWRnZXQgJyArIHRoaXMucGFyZW50Lm5hbWUgKyAnIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGN1cnJlbnQgcGFnaW5hdGlvbiB0eXBlLicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBjYWxsIGdldFBhZ2VEYXRhIGFmdGVyIGNoZWNraW5nIHN0YXRlIGNvbmZpZyBzbyB0aGF0IFN0YXRpYyBWYXJpYWJsZXMgY2FuIHVzZSBpdFxuICAgICAgICB0aGlzLmdldFBhZ2VEYXRhKGV2ZW50LCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBiZSBpbnZva2VkIGFmdGVyIHRoZSBkYXRhIG9mIHRoZSBwYWdlIGhhcyBiZWVuIGZldGNoZWQuKi9cbiAgICBvblBhZ2VEYXRhUmVhZHkoZXZlbnQsIGRhdGEsIGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuZGlzYWJsZU5hdmlnYXRpb24oKTtcbiAgICAgICAgdGhpcy5pbnZva2VTZXRSZWNvcmQoZXZlbnQsIGRhdGEpO1xuICAgICAgICB0cmlnZ2VyRm4oY2FsbGJhY2spO1xuICAgIH1cblxuICAgIC8qRnVuY3Rpb24gdG8gZ2V0IGRhdGEgZm9yIHRoZSBjdXJyZW50IHBhZ2UqL1xuICAgIGdldFBhZ2VEYXRhKGV2ZW50LCBjYWxsYmFjaykge1xuICAgICAgICBsZXQgZGF0YSxcbiAgICAgICAgICAgIHN0YXJ0SW5kZXg7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNEYXRhU291cmNlSGFzUGFnaW5nKCkpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSW4gdGFibGUgY29tcG9uZW50LCBpbiBjYXNlIG9mIG9uIGRlbWFuZCBhbmQgc2Nyb2xsIHBhZ2luYXRpb25cbiAgICAgICAgICAgICAqIFdoZW4gdGhlcmUgaXMgYSBjaGFuZ2UgaW4gZGF0YSBpdGVtIHdoaWNoIGlzIG5vdCBpbiBjdXJyZW50IHBhZ2VcbiAgICAgICAgICAgICAqIEZldGNoIHRoZSBpdGVtcyBvZiB0aGUgcGFnZSB3aGVyZSB0aGUgY2hhbmdlIGlzIG1hZGVcbiAgICAgICAgICAgICAqICovXG4gICAgICAgICAgICBsZXQgcGFnZUluZGV4ID0gdGhpcy5kbi5jdXJyZW50UGFnZTtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRWRpdE5vdEluQ3VycmVudFBhZ2UoKSAmJiB0aGlzLnBhcmVudC5ncmlkT3B0aW9ucy5sYXN0QWN0aW9uUGVyZm9ybWVkICE9PSAnZGVsZXRlJykge1xuICAgICAgICAgICAgICAgIHBhZ2VJbmRleCA9IHRoaXMucGFyZW50LmFjdGlvblJvd1BhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5MSVNUX1JFQ09SRFMsIHtcbiAgICAgICAgICAgICAgICAncGFnZSc6IHBhZ2VJbmRleCxcbiAgICAgICAgICAgICAgICAnZmlsdGVyRmllbGRzJzogdGhpcy5maWx0ZXJGaWVsZHMsXG4gICAgICAgICAgICAgICAgJ29yZGVyQnknOiB0aGlzLnNvcnRPcHRpb25zLFxuICAgICAgICAgICAgICAgICdsb2dpY2FsT3AnOiB0aGlzLmxvZ2ljYWxPcCxcbiAgICAgICAgICAgICAgICAnbWF0Y2hNb2RlJzogJ2FueXdoZXJlaWdub3JlY2FzZSdcbiAgICAgICAgICAgIH0pLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub25QYWdlRGF0YVJlYWR5KGV2ZW50LCByZXNwb25zZSAmJiByZXNwb25zZS5kYXRhLCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgJGFwcERpZ2VzdCgpO1xuICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgIC8vIElmIGVycm9yIGlzIHVuZGVmaW5lZCwgZG8gbm90IHNob3cgYW55IG1lc3NhZ2UgYXMgdGhpcyBtYXkgYmUgZGlzY2FyZGVkIHJlcXVlc3RcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogSGFuZGxlIEVycm9yXG4gICAgICAgICAgICAgICAgICAgIC8vIHdtVG9hc3Rlci5zaG93KCdlcnJvcicsICdFUlJPUicsICdVbmFibGUgdG8gZ2V0IGRhdGEgb2YgcGFnZSAtJyArIHRoaXMuZG4uY3VycmVudFBhZ2UgKyAnOicgKyBlcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0VkaXROb3RJbkN1cnJlbnRQYWdlKCkpIHtcbiAgICAgICAgICAgICAgICBzdGFydEluZGV4ID0gKHRoaXMucGFyZW50LmFjdGlvblJvd1BhZ2UgLSAxKSAqIHRoaXMubWF4UmVzdWx0cztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RhcnRJbmRleCA9ICh0aGlzLmRuLmN1cnJlbnRQYWdlIC0gMSkgKiB0aGlzLm1heFJlc3VsdHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkYXRhID0gaXNBcnJheSh0aGlzLl9fZnVsbERhdGEpID8gdGhpcy5fX2Z1bGxEYXRhLnNsaWNlKHN0YXJ0SW5kZXgsIHN0YXJ0SW5kZXggKyB0aGlzLm1heFJlc3VsdHMpIDogdGhpcy5fX2Z1bGxEYXRhO1xuICAgICAgICAgICAgdGhpcy5zZXRSZXN1bHQoZGF0YSk7XG4gICAgICAgICAgICB0aGlzLm9uUGFnZURhdGFSZWFkeShldmVudCwgZGF0YSwgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLypcbiAgICBGdW5jdGlvbiB0byBjaGVjayBpZiB0aGUgZWRpdCBhY3Rpb24gaXMgcGVyZm9ybWVkIG9uIHRoZSBwcmV2aW91cyBwYWdlIGRhdGEgb2YgdGhlIHRhYmxlXG4gICAgKi9cbiAgICBpc0VkaXROb3RJbkN1cnJlbnRQYWdlKCkge1xuICAgICAgICBjb25zdCBwYWdlSW5kZXggPSB0aGlzLmRuLmN1cnJlbnRQYWdlO1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQud2lkZ2V0VHlwZSA9PT0gJ3dtLXRhYmxlJyAmJiBwYWdlSW5kZXggPT09IHRoaXMucGFyZW50LmN1cnJlbnRQYWdlICYmXG4gICAgICAgICAgICB0aGlzLnBhcmVudC5hY3Rpb25Sb3dQYWdlICYmIHRoaXMucGFyZW50LmFjdGlvblJvd1BhZ2UgPCBwYWdlSW5kZXg7XG4gICAgfVxuXG4gICAgaW52b2tlU2V0UmVjb3JkKGV2ZW50LCBkYXRhKSB7XG4gICAgICAgIC8vIFRyaWdnZXIgdGhlIGV2ZW50IGhhbmRsZXIgaWYgZXhpc3RzLlxuICAgICAgICBjb25zdCBwYWdlSW5mbyA9IHtcbiAgICAgICAgICAgIGN1cnJlbnRQYWdlOiB0aGlzLmRuLmN1cnJlbnRQYWdlLFxuICAgICAgICAgICAgc2l6ZTogdGhpcy5tYXhSZXN1bHRzLFxuICAgICAgICAgICAgdG90YWxFbGVtZW50czogdGhpcy5kYXRhU2l6ZSxcbiAgICAgICAgICAgIHRvdGFsUGFnZXM6IHRoaXMucGFnZUNvdW50XG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLnBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQuaW52b2tlRXZlbnRDYWxsYmFjaygnc2V0cmVjb3JkJywgeyRldmVudDogZXZlbnQsICRkYXRhOiBkYXRhLCAkaW5kZXg6IHRoaXMuZG4uY3VycmVudFBhZ2UsIHBhZ2VJbmZvLCBkYXRhfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmludm9rZUV2ZW50Q2FsbGJhY2soJ3NldHJlY29yZCcsIHskZXZlbnQ6IGV2ZW50LCAkZGF0YTogZGF0YSwgJGluZGV4OiB0aGlzLmRuLmN1cnJlbnRQYWdlLCBwYWdlSW5mbywgZGF0YX0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byB2YWxpZGF0ZSB0aGUgcGFnZSBpbnB1dC5cbiAgICAgSW4gY2FzZSBvZiBpbnZhbGlkIGlucHV0LCBuYXZpZ2F0ZSB0byB0aGUgYXBwcm9wcmlhdGUgcGFnZTsgYWxzbyByZXR1cm4gZmFsc2UuXG4gICAgIEluIGNhc2Ugb2YgdmFsaWQgaW5wdXQsIHJldHVybiB0cnVlLiovXG4gICAgdmFsaWRhdGVDdXJyZW50UGFnZShldmVudCwgY2FsbGJhY2s/KSB7XG4gICAgICAgIC8qSWYgdGhlIHZhbHVlIGVudGVyZWQgaXMgZ3JlYXRlciB0aGFuIHRoZSBsYXN0IHBhZ2UgbnVtYmVyIG9yIGludmFsaWQgdmFsdWUsIHRoZW4gaGlnaGxpZ2h0aW5nIHRoZSBmaWVsZCBzaG93aW5nIGVycm9yLiovXG4gICAgICAgIGlmIChldmVudCAmJiAoaXNOYU4odGhpcy5kbi5jdXJyZW50UGFnZSkgfHwgdGhpcy5kbi5jdXJyZW50UGFnZSA8PSAwIHx8ICh0aGlzLnBhZ2VDb3VudCAmJiAodGhpcy5kbi5jdXJyZW50UGFnZSA+IHRoaXMucGFnZUNvdW50IHx8IGlzTnVsbCh0aGlzLmRuLmN1cnJlbnRQYWdlKSkpKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZG4uY3VycmVudFBhZ2UgPD0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgPSAxO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRuLmN1cnJlbnRQYWdlID4gdGhpcy5wYWdlQ291bnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlQ291bnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgb25Nb2RlbENoYW5nZShldmVudCkge1xuICAgICAgICBpZiAoIXRoaXMudmFsaWRhdGVDdXJyZW50UGFnZShldmVudCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdvVG9QYWdlKGV2ZW50KTtcbiAgICB9XG5cbiAgICBvbktleURvd24oZXZlbnQpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0RWxlID0gJChldmVudC50YXJnZXQpLmNsb3Nlc3QoJ2EnKTtcbiAgICAgICAgaWYgKGV2ZW50LmNvZGUgPT09ICdLZXlFJykge1xuICAgICAgICAgICAgdGFyZ2V0RWxlLmFkZENsYXNzKCduZy1pbnZhbGlkJyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGFyZ2V0RWxlLnJlbW92ZUNsYXNzKCduZy1pbnZhbGlkJyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHBhZ2VDaGFuZ2VkKGV2ZW50OiBhbnkpIHtcbiAgICAgICB0aGlzLl9kZWJvdW5jZWRQYWdlQ2hhbmdlZChldmVudCk7XG4gICAgfVxuXG4gICAgLypGdW5jdGlvbiB0byBuYXZpZ2F0ZSB0byB0aGUgcmVzcGVjdGl2ZSBwYWdlcy4qL1xuICAgIG5hdmlnYXRlUGFnZShpbmRleCwgZXZlbnQsIGlzUmVmcmVzaCwgY2FsbGJhY2spIHtcbiAgICAgICAgLy8gd2hlbiBuYXZpZ2F0ZWQgdG8gbmV4dCBwYWdlIHR1cm4gb24gdGhlIGlzRGF0YUxvYWRpbmcgZmxhZyB0byBzaG93IHRoZSBsb2FkaW5nIGluZGljYXRvclxuICAgICAgICBpZiAoaXNEZWZpbmVkKHRoaXMucGFyZW50LmlzRGF0YUxvYWRpbmcpICYmICF0aGlzLmlzRGlzYWJsZU5leHQpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50LmlzRGF0YUxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiBpbmZpbml0ZSBzY3JvbGwgY2FsbGluZyB0aGUgc2hvd0xvYWRpbmdJbmRpY2F0b3IgbWV0aG9kIHRvIHVwZGF0ZSB0aGUgbG9hZGluZyBtZXNzYWdlIGltbWVkaWF0ZWx5IHdoZW4gbmF2aWdhdGVkIHRvIG5leHQgcGFnZVxuICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50LmluZlNjcm9sbCkge1xuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LnZhcmlhYmxlSW5mbGlnaHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LmNhbGxEYXRhR3JpZE1ldGhvZCgnc2hvd0xvYWRpbmdJbmRpY2F0b3InLCB0aGlzLnBhcmVudC5sb2FkaW5nZGF0YW1zZywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVzZXQgdGhlIGxhc3QgYWN0aW9uIHBlcmZvcm1lZCB0byBcInNjcm9sbFwiIGFuZCBpc0RhdGFzZXRVcGRhdGVkIHRvIGZhbHNlXG4gICAgICAgIGlmICh0aGlzLnBhcmVudC53aWRnZXRUeXBlID09PSAnd20tdGFibGUnICYmIHRoaXMucGFyZW50LmdyaWRPcHRpb25zLmlzTmF2VHlwZVNjcm9sbE9yT25kZW1hbmQoKSkge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQuZ3JpZE9wdGlvbnMuc2V0TGFzdEFjdGlvblBlcmZvcm1lZCh0aGlzLnBhcmVudC5ncmlkT3B0aW9ucy5BQ1RJT05TLkRFRkFVTFQpO1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQuZ3JpZE9wdGlvbnMuc2V0SXNEYXRhc2V0VXBkYXRlZChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnZva2VFdmVudENhbGxiYWNrKCdwYWdpbmF0aW9uY2hhbmdlJywgeyRldmVudDogdW5kZWZpbmVkLCAkaW5kZXg6IHRoaXMuZG4uY3VycmVudFBhZ2V9KTtcblxuICAgICAgICAvLyBDb252ZXJ0IHRoZSBjdXJyZW50IHBhZ2UgdG8gYSB2YWxpZCBwYWdlIG51bWJlci5cbiAgICAgICAgdGhpcy5kbi5jdXJyZW50UGFnZSA9ICt0aGlzLmRuLmN1cnJlbnRQYWdlO1xuXG4gICAgICAgIHN3aXRjaCAoaW5kZXgpIHtcbiAgICAgICAgICAgIGNhc2UgJ2ZpcnN0JzpcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9GaXJzdFBhZ2UoaXNSZWZyZXNoLCBldmVudCwgY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgJ3ByZXYnOlxuICAgICAgICAgICAgICAgIC8qUmV0dXJuIGlmIGFscmVhZHkgb24gdGhlIGZpcnN0IHBhZ2UuKi9cbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMucGFnaW5hdGlvbj8ubmV4dCAmJiAodGhpcy5pc0ZpcnN0UGFnZSgpIHx8ICF0aGlzLnZhbGlkYXRlQ3VycmVudFBhZ2UoZXZlbnQsIGNhbGxiYWNrKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wYWdpbmF0aW9uPy5uZXh0KSB7IC8vIFdNUy0xODg2NzogRm9yIHNlcnZlciBzaWRlIHBhZ2luYXRpb24sIHNraXBwaW5nIHRoZSByZWd1bGFyIGZsb3cgYW5kIGVuYWJsaW5nIGlzTmV4dCBmbGFnIGluIHBhZ2luYXRpb24gbWV0YWRhdGFcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhc291cmNlLnBhZ2luYXRpb24uaXNOZXh0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5wYWdpbmF0aW9uLmlzUHJldiA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8qRGVjcmVtZW50IHRoZSBjdXJyZW50IHBhZ2UgYnkgMS4qL1xuICAgICAgICAgICAgICAgIHRoaXMuZG4uY3VycmVudFBhZ2UgLT0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ25leHQnOlxuICAgICAgICAgICAgICAgIC8qUmV0dXJuIGlmIGFscmVhZHkgb24gdGhlIGxhc3QgcGFnZS4qL1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5wYWdpbmF0aW9uPy5uZXh0ICYmICh0aGlzLmlzTGFzdFBhZ2UoKSB8fCAhdGhpcy52YWxpZGF0ZUN1cnJlbnRQYWdlKGV2ZW50LCBjYWxsYmFjaykpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucGFnaW5hdGlvbj8ubmV4dCkgeyAvLyBXTVMtMTg4Njc6IEZvciBzZXJ2ZXIgc2lkZSBwYWdpbmF0aW9uLCBza2lwcGluZyB0aGUgcmVndWxhciBmbG93IGFuZCBlbmFibGluZyBpc1ByZXYgZmxhZyBpbiBwYWdpbmF0aW9uIG1ldGFkYXRhXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5wYWdpbmF0aW9uLmlzTmV4dCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZS5wYWdpbmF0aW9uLmlzUHJldiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvKkluY3JlbWVudCB0aGUgY3VycmVudCBwYWdlIGJ5IDEuKi9cbiAgICAgICAgICAgICAgICB0aGlzLmRuLmN1cnJlbnRQYWdlICs9IDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdsYXN0JzpcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9MYXN0UGFnZShpc1JlZnJlc2gsIGV2ZW50LCBjYWxsYmFjayk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIC8qTmF2aWdhdGUgdG8gdGhlIGN1cnJlbnQgcGFnZS4qL1xuICAgICAgICB0aGlzLmdvVG9QYWdlKGV2ZW50LCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgc2V0QmluZERhdGFTZXQoYmluZGRhdGFzZXQsIHBhcmVudCwgZGF0YVNvdXJjZSwgZGF0YXNldD8sIGJpbmRkYXRhc291cmNlPywgZGF0YXNldEJvdW5kRXhwcj8sIHN0YXRlaGFuZGxlcj8pIHtcbiAgICAgICAgY29uc3QgcGFydHMgPSBiaW5kZGF0YXNldC5zcGxpdCgnLicpO1xuICAgICAgICBsZXQgYmluZFBhZ2luZ09wdGlvbnM7XG4gICAgICAgIHRoaXMuc3RhdGVoYW5kbGVyID0gc3RhdGVoYW5kbGVyO1xuICAgICAgICBpZiAocGFydHNbMF0gPT09ICdWYXJpYWJsZXMnIHx8IHBhcnRzWzBdID09PSAnV2lkZ2V0cycpIHtcbiAgICAgICAgICAgIGJpbmRQYWdpbmdPcHRpb25zID0gYCR7cGFydHNbMF19LiR7cGFydHNbMV19LnBhZ2luYXRpb25gO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYmluZGRhdGFzb3VyY2UgJiYgZGF0YXNldCAmJiAhZGF0YXNldEJvdW5kRXhwcikge1xuICAgICAgICAgICAgdGhpcy5kYXRhc2V0ID0gZGF0YXNldDtcbiAgICAgICAgICAgIHRoaXMuX2RlYm91bmNlZEFwcGx5RGF0YXNldCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYmluZGRhdGFzZXQgPSBiaW5kZGF0YXNldDtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAvLyB3YXRjaGluZyBmb3IgZGF0YXNldCBjaGFuZ2VzIGV2ZW4gd2hlbiBkYXRhc2V0IGlzIGJvdW5kIHRvIFwiaXRlbS5cIiAoaS5lLiBieSBjaGVja2luZyBmb3IgZGF0YXNldEJvdW5kRXhwcilcbiAgICAgICAgICAgIC8vIGl0ZW0gY29udGV4dCBpcyBwYXNzZWQgYXMgZGF0YVNvdXJjZSBoZXJlXG4gICAgICAgICAgICAvLyBbVG9kby1DU1BdOiBjaGVjayBpZiBzYW1lIGV4cHIgZm4gaXMgZ2VuZXJhdGVkIGJ5IHBhcmVudCB3aWRnZXQgKGxpc3QsIHRhYmxlKVxuICAgICAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcihcbiAgICAgICAgICAgICAgICAkd2F0Y2goXG4gICAgICAgICAgICAgICAgICAgIGJpbmRkYXRhc2V0LFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQsXG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXRCb3VuZEV4cHIgPyBkYXRhU291cmNlIDoge30sXG4gICAgICAgICAgICAgICAgICAgIG52ID0+ICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobnYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFzZXQgPSBudjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWJvdW5jZWRBcHBseURhdGFzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXTVMtMTkyODU6IFNldHRpbmcgZGF0YXNldCBvbiBwcm94eSBvbmx5IHRvIGhhbmRsZSBwcm9wZXJ0eWNoYW5nZSBoYW5kbGVyIGNhbGwgZm9yIHVuZGVmaW5lZCBjYXNlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2lkZ2V0LmRhdGFzZXQgPSBudjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vIFJlZ2lzdGVyIGEgd2F0Y2ggb24gcGFnaW5nIG9wdGlvbnMuIENhbGwgZGF0YXNldCBwcm9wZXJ0eSBjaGFuZ2UgaGFuZGxlciBldmVuIGlmIHBhZ2luZyBvcHRpb25zIGNoYW5nZXMgdG8gcmVmbGVjdCBwYWdpbmF0aW9uIHN0YXRlXG4gICAgICAgICAgICBpZiAoIWJpbmRQYWdpbmdPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9bVG9kby1DU1BdOiBlaXRoZXIgZ2VuZXJhdGUgd2F0Y2ggZXhwciBmbiBvciByZWdpc3RlciBhbiBldmVudCBmcm9tIHRoZSBkYXRhc291cmNlIGl0c2VsZlxuICAgICAgICAgICAgdGhpcy5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lcihcbiAgICAgICAgICAgICAgICAkd2F0Y2goXG4gICAgICAgICAgICAgICAgICAgIGJpbmRQYWdpbmdPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQsXG4gICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICAoKSA9PiB0aGlzLl9kZWJvdW5jZWRBcHBseURhdGFzZXQoKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBhcHBseSBkYXRhc291cmNlIG9ubHkgd2hlbiBkYXRhc2V0IGlzIG5vdCBib3VuZCB0byBcIml0ZW0uRklFTERcIlxuICAgICAgICBpZiAoIWRhdGFzZXRCb3VuZEV4cHIpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YXNvdXJjZSA9IGRhdGFTb3VyY2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgdGhlIGRhdGFzb3VyY2Ugb2YgcGFnaW5hdGlvbiBmcm9tIHRoZSBwYXJlbnQgd2lkZ2V0XG4gICAgc2V0RGF0YVNvdXJjZShkYXRhU291cmNlKSB7XG4gICAgICAgIHRoaXMuZGF0YXNvdXJjZSA9IGRhdGFTb3VyY2U7XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXk6IHN0cmluZywgbnYsIG92KSB7XG4gICAgICAgIGlmIChrZXkgPT09ICdkYXRhc2V0Jykge1xuICAgICAgICAgICAgbGV0IGRhdGE7XG4gICAgICAgICAgICBpZiAodGhpcy5wYXJlbnQgJiYgdGhpcy5wYXJlbnQub25EYXRhTmF2aWdhdG9yRGF0YVNldENoYW5nZSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSB0aGlzLnBhcmVudC5vbkRhdGFOYXZpZ2F0b3JEYXRhU2V0Q2hhbmdlKG52KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IG52O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU2V0IGxhc3QgYWN0aW9uIHBlcmZvcm1lZCB0byBcImRhdGFzZXRfdXBkYXRlXCIgd2hlbmV2ZXIgZGF0YXNldCBpcyBjaGFuZ2VkIGluIHRhYmxlIGNvbXBvbmVudFxuICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50LndpZGdldFR5cGUgPT09ICd3bS10YWJsZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5fdHJpZ2dlcmVkQnlVc2VyID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBXaGVuIHRoZSBkYXRhc2V0IGlzIG5vdCBpbiBjdXJyZW50IHBhZ2UsIGJ1dCBpbiBwcmV2aW91cyBvbmVzIGRpcmVjdGx5IHNldCB0aGUgcmVzdWx0IHdpdGhvdXQgc2V0dGluZyBwYWdlIHZhbHVlc1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNFZGl0Tm90SW5DdXJyZW50UGFnZSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRSZXN1bHQoZGF0YSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UGFnaW5nVmFsdWVzKGRhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ25hdmlnYXRpb24nKSB7XG4gICAgICAgICAgICBpZiAobnYgPT09ICdBZHZhbmNlZCcpIHsgLy8gU3VwcG9ydCBmb3Igb2xkZXIgcHJvamVjdHMgd2hlcmUgbmF2aWdhdGlvbiB0eXBlIHdhcyBhZHZhbmNlZCBpbnN0ZWFkIG9mIGNsYXNpY1xuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbiA9ICdDbGFzc2ljJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudXBkYXRlTmF2U2l6ZSgpO1xuICAgICAgICAgICAgdGhpcy5uYXZjb250cm9scyA9IG52O1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ25hdmlnYXRpb25zaXplJykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVOYXZTaXplKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnbmF2aWdhdGlvbmFsaWduJykge1xuICAgICAgICAgICAgc3dpdGNoQ2xhc3ModGhpcy5uYXRpdmVFbGVtZW50LCBgdGV4dC0ke252fWAsIGB0ZXh0LSR7b3Z9YCk7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnbWF4UmVzdWx0cycpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UGFnaW5nVmFsdWVzKHRoaXMuZGF0YXNldCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdXBlci5vblByb3BlcnR5Q2hhbmdlKGtleSwgbnYsIG92KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgY29uc3QgcGFnaW5hdGlvbkVsZW0gPSAgdGhpcy5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBwYWdpbmF0aW9uRWxlbS5vbmNsaWNrID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCJcbjx1bCBjbGFzcz1cInBhZ2luYXRpb24gYWR2YW5jZWQge3tuYXZpZ2F0aW9uQ2xhc3N9fVwiICpuZ0lmPVwibmF2Y29udHJvbHMgPT09ICdDbGFzc2ljJ1wiPlxuICAgIDxsaSBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJzppc0Rpc2FibGVGaXJzdH1cIj5cbiAgICAgICAgPGEgW3RpdGxlXT1cImFwcExvY2FsZS5MQUJFTF9GSVJTVFwiIG5hbWU9XCJmaXJzdFwiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc0Rpc2FibGVGaXJzdFwiXG4gICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVBhZ2UoJ2ZpcnN0JywgJGV2ZW50KVwiPlxuICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+PGkgY2xhc3M9XCJ3aSB3aS1maXJzdC1wYWdlXCI+PC9pPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkdvIHRvIGZpcnN0IHBhZ2Uge3sgaXNEaXNhYmxlRmlyc3QgPyAnICwgRGlzYWJsZWQnIDogJyd9fTwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgIDwvbGk+XG4gICAgPGxpIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOmlzRGlzYWJsZVByZXZpb3VzfVwiPlxuICAgICAgICA8YSBbdGl0bGVdPVwiYXBwTG9jYWxlLkxBQkVMX1BSRVZJT1VTXCIgbmFtZT1cInByZXZcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImlzRGlzYWJsZVByZXZpb3VzXCJcbiAgICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVBhZ2UoJ3ByZXYnLCAkZXZlbnQpXCI+XG4gICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj48aSBjbGFzcz1cIndpIHdpLWNoZXZyb24tbGVmdFwiPjwvaT48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5HbyB0byBwcmV2aW91cyBwYWdlIHt7IGlzRGlzYWJsZVByZXZpb3VzID8gJywgRGlzYWJsZWQnIDogJyd9fTwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgIDwvbGk+XG4gICAgPGxpIGNsYXNzPVwicGFnZWNvdW50IGRpc2FibGVkXCI+XG4gICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCI+XG4gICAgICAgICAgICA8aW5wdXQgWyhuZ01vZGVsKV09XCJkbi5jdXJyZW50UGFnZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1Nob3dpbmcgUGFnZSAnICsgZG4uY3VycmVudFBhZ2UgKyAnIG9mICcgKyBwYWdlQ291bnRcIiBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlQ3VycmVudFwiXG4gICAgICAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiXG4gICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiIChjaGFuZ2UpPVwib25Nb2RlbENoYW5nZSgkZXZlbnQpXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIi8+XG4gICAgICAgIDwvYT5cbiAgICA8L2xpPlxuICAgIDxsaSBjbGFzcz1cImRpc2FibGVkXCI+XG4gICAgICAgIDxhIFtoaWRkZW5dPVwiaXNEaXNhYmxlQ291bnRcIj4gLyB7e3BhZ2VDb3VudH19PC9hPlxuICAgIDwvbGk+XG4gICAgPGxpIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOmlzRGlzYWJsZU5leHR9XCI+XG4gICAgICAgIDxhIFt0aXRsZV09XCJhcHBMb2NhbGUuTEFCRUxfTkVYVFwiIG5hbWU9XCJuZXh0XCIgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImlzRGlzYWJsZU5leHRcIlxuICAgICAgICAgICAoY2xpY2spPVwibmF2aWdhdGVQYWdlKCduZXh0JywgJGV2ZW50KVwiPlxuICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+PGkgY2xhc3M9XCJ3aSB3aS1jaGV2cm9uLXJpZ2h0XCI+PC9pPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkdvIHRvIG5leHQgcGFnZSB7eyBpc0Rpc2FibGVOZXh0ID8gJyAsIERpc2FibGVkJyA6ICcnfX08L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICA8L2xpPlxuICAgIDxsaSBbbmdDbGFzc109XCJ7J2Rpc2FibGVkJzppc0Rpc2FibGVMYXN0fVwiPlxuICAgICAgICA8YSBbdGl0bGVdPVwiYXBwTG9jYWxlLkxBQkVMX0xBU1RcIiBuYW1lPVwibGFzdFwiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc0Rpc2FibGVMYXN0XCJcbiAgICAgICAgICAgKGNsaWNrKT1cIm5hdmlnYXRlUGFnZSgnbGFzdCcsICRldmVudClcIj5cbiAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxpIGNsYXNzPVwid2kgd2ktbGFzdC1wYWdlXCI+PC9pPjwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPkdvIHRvIGxhc3QgcGFnZSB7eyBpc0Rpc2FibGVMYXN0ID8gJyAsIERpc2FibGVkJyA6ICcnfX08L3NwYW4+XG4gICAgICAgIDwvYT5cbiAgICA8L2xpPlxuICAgIDxsaSAqbmdJZj1cInNob3dyZWNvcmRjb3VudFwiIGNsYXNzPVwidG90YWxjb3VudCBkaXNhYmxlZFwiPlxuICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIHRhYmluZGV4PVwiLTFcIiBhcmlhLWRpc2FibGVkPVwidHJ1ZVwiPnt7YXBwTG9jYWxlLkxBQkVMX1RPVEFMX1JFQ09SRFN9fToge3tkYXRhU2l6ZX19PC9hPlxuICAgIDwvbGk+XG48L3VsPlxuPHVsIGNsYXNzPVwicGFnZXIge3tuYXZpZ2F0aW9uQ2xhc3N9fVwiICpuZ0lmPVwibmF2Y29udHJvbHMgPT09ICdQYWdlcidcIj5cbiAgICA8bGkgY2xhc3M9XCJwcmV2aW91c1wiIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOmlzRGlzYWJsZVByZXZpb3VzfVwiPlxuICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIChjbGljayk9XCJuYXZpZ2F0ZVBhZ2UoJ3ByZXYnLCAkZXZlbnQpXCJcbiAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpc0Rpc2FibGVQcmV2aW91c1wiPlxuICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+PGkgY2xhc3M9XCJ3aSB3aS1jaGV2cm9uLWxlZnRcIj48L2k+PC9zcGFuPlxuICAgICAgICAgICAge3thcHBMb2NhbGUuTEFCRUxfUFJFVklPVVN9fVxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+e3sgaXNEaXNhYmxlUHJldmlvdXMgPyAnICwgRGlzYWJsZWQnIDogJyd9fTwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgIDwvbGk+XG4gICAgPGxpIGNsYXNzPVwibmV4dFwiIFtuZ0NsYXNzXT1cInsnZGlzYWJsZWQnOmlzRGlzYWJsZU5leHR9XCI+XG4gICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMCk7XCIgKGNsaWNrKT1cIm5hdmlnYXRlUGFnZSgnbmV4dCcsICRldmVudClcIlxuICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImlzRGlzYWJsZU5leHRcIj5cbiAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjxpIGNsYXNzPVwid2kgd2ktY2hldnJvbi1yaWdodFwiPjwvaT48L3NwYW4+XG4gICAgICAgICAgICB7e2FwcExvY2FsZS5MQUJFTF9ORVhUfX1cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPnt7IGlzRGlzYWJsZU5leHQgPyAnICwgRGlzYWJsZWQnIDogJyd9fTwvc3Bhbj5cbiAgICAgICAgPC9hPlxuICAgIDwvbGk+XG48L3VsPlxuXG48cGFnaW5hdGlvbiBjbGFzcz1cInBhZ2luYXRpb24gYmFzaWNcIiBbbmdDbGFzc109XCJuYXZpZ2F0aW9uQ2xhc3NcIiAqbmdJZj1cIm5hdmNvbnRyb2xzID09PSAnQmFzaWMnXCIgcm9sZT1cIm5hdmlnYXRpb25cIlxuICAgICAgICAgICAgW2l0ZW1zUGVyUGFnZV09XCJtYXhSZXN1bHRzXCIgW3RvdGFsSXRlbXNdPVwiZGF0YVNpemVcIlxuICAgICAgICAgICAgKHBhZ2VDaGFuZ2VkKT1cInBhZ2VDaGFuZ2VkKCRldmVudClcIiBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6dHJ1ZX1cIiBbbmdNb2RlbF09XCJkbi5jdXJyZW50UGFnZVwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidTaG93aW5nIFBhZ2UgJyArIGRuLmN1cnJlbnRQYWdlICsgJyBvZiAnICsgcGFnZUNvdW50ICsgJyBwYWdlcydcIlxuICAgICAgICAgICAgW2JvdW5kYXJ5TGlua3NdPVwiYm91bmRhcnlsaW5rc1wiIFttYXhTaXplXT1cIm1heHNpemVcIlxuICAgICAgICAgICAgW2RpcmVjdGlvbkxpbmtzXT1cImRpcmVjdGlvbmxpbmtzXCJcbiAgICAgICAgICAgIGZpcnN0VGV4dD1cIkZpcnRzdFwiIGxhc3RUZXh0PVwiTGFzdFwiXG4gICAgICAgICAgICBbY3VzdG9tUHJldmlvdXNUZW1wbGF0ZV09XCJwcmV2VGVtcGxhdGVcIlxuICAgICAgICAgICAgW2N1c3RvbU5leHRUZW1wbGF0ZV09XCJuZXh0VGVtcGxhdGVcIlxuICAgICAgICAgICAgW2N1c3RvbVBhZ2VUZW1wbGF0ZV09XCJwYWdlVGVtcGxhdGVcIj48L3BhZ2luYXRpb24+XG5cbjx1bCAqbmdJZj1cIm5hdmNvbnRyb2xzID09PSAnQmFzaWMnICYmIHNob3dyZWNvcmRjb3VudFwiIGNsYXNzPVwicGFnaW5hdGlvblwiPlxuICAgIDxsaSBjbGFzcz1cInRvdGFsY291bnQgZGlzYWJsZWQgYmFzaWNjb3VudFwiPlxuICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApO1wiIHRhYmluZGV4PVwiLTFcIiBhcmlhLWRpc2FibGVkPVwidHJ1ZVwiPnt7YXBwTG9jYWxlLkxBQkVMX1RPVEFMX1JFQ09SRFN9fToge3tkYXRhU2l6ZX19PC9hPlxuICAgIDwvbGk+XG48L3VsPlxuXG48bmctdGVtcGxhdGUgI3BhZ2VUZW1wbGF0ZSBsZXQtcGFnZT5cbiAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIiBbYXR0ci5kYXRhLWlzYWNpdHZlcGFnZV09XCJwYWdlLmFjdGl2ZVwiPnt7J1BhZ2UgJ319PC9zcGFuPlxuICAgIHt7cGFnZS5udW1iZXJ9fVxuICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiICpuZ0lmPVwicGFnZS5hY3RpdmVcIj4ge3snLCBTaG93aW5nIHBhZ2UgJyArIHBhZ2UubnVtYmVyICsgJyBvZiAnICsgcGFnZUNvdW50fX08L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNwcmV2VGVtcGxhdGUgbGV0LWRpc2FibGVkPVwiZGlzYWJsZWRcIj5cbiAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIiBbYXR0ci5kYXRhLWlzZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5HbyB0byBQcmV2aW91cyBwYWdlIHt7ZGlzYWJsZWQgPyAnLCBEaXNhYmxlZCcgOiAnJ319PC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjbmV4dFRlbXBsYXRlIGxldC1kaXNhYmxlZD1cImRpc2FibGVkXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCIgW2F0dHIuZGF0YS1pc2Rpc2FibGVkXT1cImRpc2FibGVkXCI+R28gdG8gTmV4dCBwYWdlIHt7ZGlzYWJsZWQgPyAnLCBEaXNhYmxlZCcgOiAnJ319PC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -31,6 +31,7 @@ const registerProps = () => {
31
31
 
32
32
  const _c0 = ["wmPagination", ""];
33
33
  const _c1 = a0 => ({ "disabled": a0 });
34
+ const _c2 = () => ({ standalone: true });
34
35
  function PaginationComponent_ul_0_li_31_Template(rf, ctx) { if (rf & 1) {
35
36
  i0.ɵɵelementStart(0, "li", 23)(1, "a", 24);
36
37
  i0.ɵɵtext(2);
@@ -87,36 +88,36 @@ function PaginationComponent_ul_0_Template(rf, ctx) { if (rf & 1) {
87
88
  const ctx_r1 = i0.ɵɵnextContext();
88
89
  i0.ɵɵclassMapInterpolate1("pagination advanced ", ctx_r1.navigationClass, "");
89
90
  i0.ɵɵadvance();
90
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(25, _c1, ctx_r1.isDisableFirst));
91
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(26, _c1, ctx_r1.isDisableFirst));
91
92
  i0.ɵɵadvance();
92
93
  i0.ɵɵproperty("title", ctx_r1.appLocale.LABEL_FIRST);
93
94
  i0.ɵɵattribute("aria-disabled", ctx_r1.isDisableFirst);
94
95
  i0.ɵɵadvance(4);
95
96
  i0.ɵɵtextInterpolate1("Go to first page ", ctx_r1.isDisableFirst ? " , Disabled" : "", "");
96
97
  i0.ɵɵadvance();
97
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(27, _c1, ctx_r1.isDisablePrevious));
98
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(28, _c1, ctx_r1.isDisablePrevious));
98
99
  i0.ɵɵadvance();
99
100
  i0.ɵɵproperty("title", ctx_r1.appLocale.LABEL_PREVIOUS);
100
101
  i0.ɵɵattribute("aria-disabled", ctx_r1.isDisablePrevious);
101
102
  i0.ɵɵadvance(4);
102
103
  i0.ɵɵtextInterpolate1("Go to previous page ", ctx_r1.isDisablePrevious ? ", Disabled" : "", "");
103
104
  i0.ɵɵadvance(3);
104
- i0.ɵɵproperty("disabled", ctx_r1.isDisableCurrent);
105
105
  i0.ɵɵtwoWayProperty("ngModel", ctx_r1.dn.currentPage);
106
+ i0.ɵɵproperty("disabled", ctx_r1.isDisableCurrent)("ngModelOptions", i0.ɵɵpureFunction0(30, _c2));
106
107
  i0.ɵɵattribute("aria-label", "Showing Page " + ctx_r1.dn.currentPage + " of " + ctx_r1.pageCount);
107
108
  i0.ɵɵadvance(2);
108
109
  i0.ɵɵproperty("hidden", ctx_r1.isDisableCount);
109
110
  i0.ɵɵadvance();
110
111
  i0.ɵɵtextInterpolate1(" / ", ctx_r1.pageCount, "");
111
112
  i0.ɵɵadvance();
112
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(29, _c1, ctx_r1.isDisableNext));
113
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(31, _c1, ctx_r1.isDisableNext));
113
114
  i0.ɵɵadvance();
114
115
  i0.ɵɵproperty("title", ctx_r1.appLocale.LABEL_NEXT);
115
116
  i0.ɵɵattribute("aria-disabled", ctx_r1.isDisableNext);
116
117
  i0.ɵɵadvance(4);
117
118
  i0.ɵɵtextInterpolate1("Go to next page ", ctx_r1.isDisableNext ? " , Disabled" : "", "");
118
119
  i0.ɵɵadvance();
119
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(31, _c1, ctx_r1.isDisableLast));
120
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(33, _c1, ctx_r1.isDisableLast));
120
121
  i0.ɵɵadvance();
121
122
  i0.ɵɵproperty("title", ctx_r1.appLocale.LABEL_LAST);
122
123
  i0.ɵɵattribute("aria-disabled", ctx_r1.isDisableLast);
@@ -175,7 +176,7 @@ function PaginationComponent_pagination_2_Template(rf, ctx) { if (rf & 1) {
175
176
  const pageTemplate_r5 = i0.ɵɵreference(5);
176
177
  const prevTemplate_r6 = i0.ɵɵreference(7);
177
178
  const nextTemplate_r7 = i0.ɵɵreference(9);
178
- i0.ɵɵproperty("ngClass", ctx_r1.navigationClass)("itemsPerPage", ctx_r1.maxResults)("totalItems", ctx_r1.dataSize)("ngModel", ctx_r1.dn.currentPage)("boundaryLinks", ctx_r1.boundarylinks)("maxSize", ctx_r1.maxsize)("directionLinks", ctx_r1.directionlinks)("customPreviousTemplate", prevTemplate_r6)("customNextTemplate", nextTemplate_r7)("customPageTemplate", pageTemplate_r5);
179
+ i0.ɵɵproperty("ngClass", ctx_r1.navigationClass)("itemsPerPage", ctx_r1.maxResults)("totalItems", ctx_r1.dataSize)("ngModelOptions", i0.ɵɵpureFunction0(12, _c2))("ngModel", ctx_r1.dn.currentPage)("boundaryLinks", ctx_r1.boundarylinks)("maxSize", ctx_r1.maxsize)("directionLinks", ctx_r1.directionlinks)("customPreviousTemplate", prevTemplate_r6)("customNextTemplate", nextTemplate_r7)("customPageTemplate", pageTemplate_r5);
179
180
  i0.ɵɵattribute("aria-label", "Showing Page " + ctx_r1.dn.currentPage + " of " + ctx_r1.pageCount + " pages");
180
181
  } }
181
182
  function PaginationComponent_ul_3_Template(rf, ctx) { if (rf & 1) {
@@ -756,8 +757,8 @@ class PaginationComponent extends StylableComponent {
756
757
  static { this.ɵfac = function PaginationComponent_Factory(t) { return new (t || PaginationComponent)(i0.ɵɵdirectiveInject(i0.Injector), i0.ɵɵdirectiveInject(WidgetRef, 4), i0.ɵɵdirectiveInject('EXPLICIT_CONTEXT', 8)); }; }
757
758
  static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PaginationComponent, selectors: [["", "wmPagination", ""]], outputs: { resultEmitter: "resultEmitter", maxResultsEmitter: "maxResultsEmitter" }, features: [i0.ɵɵProvidersFeature([
758
759
  provideAsWidgetRef(PaginationComponent)
759
- ]), i0.ɵɵInheritDefinitionFeature], attrs: _c0, decls: 10, vars: 4, consts: [["pageTemplate", ""], ["prevTemplate", ""], ["nextTemplate", ""], [3, "class", 4, "ngIf"], ["class", "pagination basic", "role", "navigation", "firstText", "Firtst", "lastText", "Last", 3, "ngClass", "itemsPerPage", "totalItems", "ngModel", "boundaryLinks", "maxSize", "directionLinks", "customPreviousTemplate", "customNextTemplate", "customPageTemplate", "pageChanged", 4, "ngIf"], ["class", "pagination", 4, "ngIf"], [3, "ngClass"], ["name", "first", "href", "javascript:void(0);", 3, "click", "title"], ["aria-hidden", "true"], [1, "wi", "wi-first-page"], [1, "sr-only"], ["name", "prev", "href", "javascript:void(0);", 3, "click", "title"], [1, "wi", "wi-chevron-left"], [1, "pagecount", "disabled"], ["href", "javascript:void(0);"], ["type", "number", 1, "form-control", 3, "ngModelChange", "keydown", "change", "disabled", "ngModel"], [1, "disabled"], [3, "hidden"], ["name", "next", "href", "javascript:void(0);", 3, "click", "title"], [1, "wi", "wi-chevron-right"], ["name", "last", "href", "javascript:void(0);", 3, "click", "title"], [1, "wi", "wi-last-page"], ["class", "totalcount disabled", 4, "ngIf"], [1, "totalcount", "disabled"], ["href", "javascript:void(0);", "tabindex", "-1", "aria-disabled", "true"], [1, "previous", 3, "ngClass"], ["href", "javascript:void(0);", 3, "click"], [1, "next", 3, "ngClass"], ["role", "navigation", "firstText", "Firtst", "lastText", "Last", 1, "pagination", "basic", 3, "pageChanged", "ngClass", "itemsPerPage", "totalItems", "ngModel", "boundaryLinks", "maxSize", "directionLinks", "customPreviousTemplate", "customNextTemplate", "customPageTemplate"], [1, "pagination"], [1, "totalcount", "disabled", "basiccount"], ["class", "sr-only", 4, "ngIf"]], template: function PaginationComponent_Template(rf, ctx) { if (rf & 1) {
760
- i0.ɵɵtemplate(0, PaginationComponent_ul_0_Template, 32, 33, "ul", 3)(1, PaginationComponent_ul_1_Template, 15, 15, "ul", 3)(2, PaginationComponent_pagination_2_Template, 1, 11, "pagination", 4)(3, PaginationComponent_ul_3_Template, 4, 2, "ul", 5)(4, PaginationComponent_ng_template_4_Template, 4, 4, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor)(6, PaginationComponent_ng_template_6_Template, 2, 2, "ng-template", null, 1, i0.ɵɵtemplateRefExtractor)(8, PaginationComponent_ng_template_8_Template, 2, 2, "ng-template", null, 2, i0.ɵɵtemplateRefExtractor);
760
+ ]), i0.ɵɵInheritDefinitionFeature], attrs: _c0, decls: 10, vars: 4, consts: [["pageTemplate", ""], ["prevTemplate", ""], ["nextTemplate", ""], [3, "class", 4, "ngIf"], ["class", "pagination basic", "role", "navigation", "firstText", "Firtst", "lastText", "Last", 3, "ngClass", "itemsPerPage", "totalItems", "ngModelOptions", "ngModel", "boundaryLinks", "maxSize", "directionLinks", "customPreviousTemplate", "customNextTemplate", "customPageTemplate", "pageChanged", 4, "ngIf"], ["class", "pagination", 4, "ngIf"], [3, "ngClass"], ["name", "first", "href", "javascript:void(0);", 3, "click", "title"], ["aria-hidden", "true"], [1, "wi", "wi-first-page"], [1, "sr-only"], ["name", "prev", "href", "javascript:void(0);", 3, "click", "title"], [1, "wi", "wi-chevron-left"], [1, "pagecount", "disabled"], ["href", "javascript:void(0);"], ["type", "number", 1, "form-control", 3, "ngModelChange", "keydown", "change", "ngModel", "disabled", "ngModelOptions"], [1, "disabled"], [3, "hidden"], ["name", "next", "href", "javascript:void(0);", 3, "click", "title"], [1, "wi", "wi-chevron-right"], ["name", "last", "href", "javascript:void(0);", 3, "click", "title"], [1, "wi", "wi-last-page"], ["class", "totalcount disabled", 4, "ngIf"], [1, "totalcount", "disabled"], ["href", "javascript:void(0);", "tabindex", "-1", "aria-disabled", "true"], [1, "previous", 3, "ngClass"], ["href", "javascript:void(0);", 3, "click"], [1, "next", 3, "ngClass"], ["role", "navigation", "firstText", "Firtst", "lastText", "Last", 1, "pagination", "basic", 3, "pageChanged", "ngClass", "itemsPerPage", "totalItems", "ngModelOptions", "ngModel", "boundaryLinks", "maxSize", "directionLinks", "customPreviousTemplate", "customNextTemplate", "customPageTemplate"], [1, "pagination"], [1, "totalcount", "disabled", "basiccount"], ["class", "sr-only", 4, "ngIf"]], template: function PaginationComponent_Template(rf, ctx) { if (rf & 1) {
761
+ i0.ɵɵtemplate(0, PaginationComponent_ul_0_Template, 32, 35, "ul", 3)(1, PaginationComponent_ul_1_Template, 15, 15, "ul", 3)(2, PaginationComponent_pagination_2_Template, 1, 13, "pagination", 4)(3, PaginationComponent_ul_3_Template, 4, 2, "ul", 5)(4, PaginationComponent_ng_template_4_Template, 4, 4, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor)(6, PaginationComponent_ng_template_6_Template, 2, 2, "ng-template", null, 1, i0.ɵɵtemplateRefExtractor)(8, PaginationComponent_ng_template_8_Template, 2, 2, "ng-template", null, 2, i0.ɵɵtemplateRefExtractor);
761
762
  } if (rf & 2) {
762
763
  i0.ɵɵproperty("ngIf", ctx.navcontrols === "Classic");
763
764
  i0.ɵɵadvance();
@@ -772,7 +773,7 @@ class PaginationComponent extends StylableComponent {
772
773
  type: Component,
773
774
  args: [{ selector: '[wmPagination]', providers: [
774
775
  provideAsWidgetRef(PaginationComponent)
775
- ], template: "\n<ul class=\"pagination advanced {{navigationClass}}\" *ngIf=\"navcontrols === 'Classic'\">\n <li [ngClass]=\"{'disabled':isDisableFirst}\">\n <a [title]=\"appLocale.LABEL_FIRST\" name=\"first\" href=\"javascript:void(0);\"\n [attr.aria-disabled]=\"isDisableFirst\"\n (click)=\"navigatePage('first', $event)\">\n <span aria-hidden=\"true\"><i class=\"wi wi-first-page\"></i></span>\n <span class=\"sr-only\">Go to first page {{ isDisableFirst ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n <li [ngClass]=\"{'disabled':isDisablePrevious}\">\n <a [title]=\"appLocale.LABEL_PREVIOUS\" name=\"prev\" href=\"javascript:void(0);\"\n [attr.aria-disabled]=\"isDisablePrevious\"\n (click)=\"navigatePage('prev', $event)\">\n <span aria-hidden=\"true\"><i class=\"wi wi-chevron-left\"></i></span>\n <span class=\"sr-only\">Go to previous page {{ isDisablePrevious ? ', Disabled' : ''}}</span>\n </a>\n </li>\n <li class=\"pagecount disabled\">\n <a href=\"javascript:void(0);\">\n <input type=\"number\" [disabled]=\"isDisableCurrent\" [(ngModel)]=\"dn.currentPage\" [attr.aria-label]=\"'Showing Page ' + dn.currentPage + ' of ' + pageCount\"\n (keydown)=\"onKeyDown($event)\" (change)=\"onModelChange($event)\" class=\"form-control\"/>\n </a>\n </li>\n <li class=\"disabled\">\n <a [hidden]=\"isDisableCount\"> / {{pageCount}}</a>\n </li>\n <li [ngClass]=\"{'disabled':isDisableNext}\">\n <a [title]=\"appLocale.LABEL_NEXT\" name=\"next\" href=\"javascript:void(0);\"\n [attr.aria-disabled]=\"isDisableNext\"\n (click)=\"navigatePage('next', $event)\">\n <span aria-hidden=\"true\"><i class=\"wi wi-chevron-right\"></i></span>\n <span class=\"sr-only\">Go to next page {{ isDisableNext ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n <li [ngClass]=\"{'disabled':isDisableLast}\">\n <a [title]=\"appLocale.LABEL_LAST\" name=\"last\" href=\"javascript:void(0);\"\n [attr.aria-disabled]=\"isDisableLast\"\n (click)=\"navigatePage('last', $event)\">\n <span aria-hidden=\"true\"><i class=\"wi wi-last-page\"></i></span>\n <span class=\"sr-only\">Go to last page {{ isDisableLast ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n <li *ngIf=\"showrecordcount\" class=\"totalcount disabled\">\n <a href=\"javascript:void(0);\" tabindex=\"-1\" aria-disabled=\"true\">{{appLocale.LABEL_TOTAL_RECORDS}}: {{dataSize}}</a>\n </li>\n</ul>\n<ul class=\"pager {{navigationClass}}\" *ngIf=\"navcontrols === 'Pager'\">\n <li class=\"previous\" [ngClass]=\"{'disabled':isDisablePrevious}\">\n <a href=\"javascript:void(0);\" (click)=\"navigatePage('prev', $event)\"\n [attr.aria-disabled]=\"isDisablePrevious\">\n <span aria-hidden=\"true\"><i class=\"wi wi-chevron-left\"></i></span>\n {{appLocale.LABEL_PREVIOUS}}\n <span class=\"sr-only\">{{ isDisablePrevious ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n <li class=\"next\" [ngClass]=\"{'disabled':isDisableNext}\">\n <a href=\"javascript:void(0);\" (click)=\"navigatePage('next', $event)\"\n [attr.aria-disabled]=\"isDisableNext\">\n <span aria-hidden=\"true\"><i class=\"wi wi-chevron-right\"></i></span>\n {{appLocale.LABEL_NEXT}}\n <span class=\"sr-only\">{{ isDisableNext ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n</ul>\n\n<pagination class=\"pagination basic\" [ngClass]=\"navigationClass\" *ngIf=\"navcontrols === 'Basic'\" role=\"navigation\"\n [itemsPerPage]=\"maxResults\" [totalItems]=\"dataSize\"\n [ngModel]=\"dn.currentPage\" (pageChanged)=\"pageChanged($event)\"\n [attr.aria-label]=\"'Showing Page ' + dn.currentPage + ' of ' + pageCount + ' pages'\"\n [boundaryLinks]=\"boundarylinks\" [maxSize]=\"maxsize\"\n [directionLinks]=\"directionlinks\"\n firstText=\"Firtst\" lastText=\"Last\"\n [customPreviousTemplate]=\"prevTemplate\"\n [customNextTemplate]=\"nextTemplate\"\n [customPageTemplate]=\"pageTemplate\"></pagination>\n\n<ul *ngIf=\"navcontrols === 'Basic' && showrecordcount\" class=\"pagination\">\n <li class=\"totalcount disabled basiccount\">\n <a href=\"javascript:void(0);\" tabindex=\"-1\" aria-disabled=\"true\">{{appLocale.LABEL_TOTAL_RECORDS}}: {{dataSize}}</a>\n </li>\n</ul>\n\n<ng-template #pageTemplate let-page>\n <span class=\"sr-only\" [attr.data-isacitvepage]=\"page.active\">{{'Page '}}</span>\n {{page.number}}\n <span class=\"sr-only\" *ngIf=\"page.active\"> {{', Showing page ' + page.number + ' of ' + pageCount}}</span>\n</ng-template>\n<ng-template #prevTemplate let-disabled=\"disabled\">\n <span class=\"sr-only\" [attr.data-isdisabled]=\"disabled\">Go to Previous page {{disabled ? ', Disabled' : ''}}</span>\n</ng-template>\n<ng-template #nextTemplate let-disabled=\"disabled\">\n <span class=\"sr-only\" [attr.data-isdisabled]=\"disabled\">Go to Next page {{disabled ? ', Disabled' : ''}}</span>\n</ng-template>\n" }]
776
+ ], template: "\n<ul class=\"pagination advanced {{navigationClass}}\" *ngIf=\"navcontrols === 'Classic'\">\n <li [ngClass]=\"{'disabled':isDisableFirst}\">\n <a [title]=\"appLocale.LABEL_FIRST\" name=\"first\" href=\"javascript:void(0);\"\n [attr.aria-disabled]=\"isDisableFirst\"\n (click)=\"navigatePage('first', $event)\">\n <span aria-hidden=\"true\"><i class=\"wi wi-first-page\"></i></span>\n <span class=\"sr-only\">Go to first page {{ isDisableFirst ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n <li [ngClass]=\"{'disabled':isDisablePrevious}\">\n <a [title]=\"appLocale.LABEL_PREVIOUS\" name=\"prev\" href=\"javascript:void(0);\"\n [attr.aria-disabled]=\"isDisablePrevious\"\n (click)=\"navigatePage('prev', $event)\">\n <span aria-hidden=\"true\"><i class=\"wi wi-chevron-left\"></i></span>\n <span class=\"sr-only\">Go to previous page {{ isDisablePrevious ? ', Disabled' : ''}}</span>\n </a>\n </li>\n <li class=\"pagecount disabled\">\n <a href=\"javascript:void(0);\">\n <input [(ngModel)]=\"dn.currentPage\" [attr.aria-label]=\"'Showing Page ' + dn.currentPage + ' of ' + pageCount\" [disabled]=\"isDisableCurrent\"\n [ngModelOptions]=\"{standalone: true}\"\n type=\"number\"\n (keydown)=\"onKeyDown($event)\" (change)=\"onModelChange($event)\" class=\"form-control\"/>\n </a>\n </li>\n <li class=\"disabled\">\n <a [hidden]=\"isDisableCount\"> / {{pageCount}}</a>\n </li>\n <li [ngClass]=\"{'disabled':isDisableNext}\">\n <a [title]=\"appLocale.LABEL_NEXT\" name=\"next\" href=\"javascript:void(0);\"\n [attr.aria-disabled]=\"isDisableNext\"\n (click)=\"navigatePage('next', $event)\">\n <span aria-hidden=\"true\"><i class=\"wi wi-chevron-right\"></i></span>\n <span class=\"sr-only\">Go to next page {{ isDisableNext ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n <li [ngClass]=\"{'disabled':isDisableLast}\">\n <a [title]=\"appLocale.LABEL_LAST\" name=\"last\" href=\"javascript:void(0);\"\n [attr.aria-disabled]=\"isDisableLast\"\n (click)=\"navigatePage('last', $event)\">\n <span aria-hidden=\"true\"><i class=\"wi wi-last-page\"></i></span>\n <span class=\"sr-only\">Go to last page {{ isDisableLast ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n <li *ngIf=\"showrecordcount\" class=\"totalcount disabled\">\n <a href=\"javascript:void(0);\" tabindex=\"-1\" aria-disabled=\"true\">{{appLocale.LABEL_TOTAL_RECORDS}}: {{dataSize}}</a>\n </li>\n</ul>\n<ul class=\"pager {{navigationClass}}\" *ngIf=\"navcontrols === 'Pager'\">\n <li class=\"previous\" [ngClass]=\"{'disabled':isDisablePrevious}\">\n <a href=\"javascript:void(0);\" (click)=\"navigatePage('prev', $event)\"\n [attr.aria-disabled]=\"isDisablePrevious\">\n <span aria-hidden=\"true\"><i class=\"wi wi-chevron-left\"></i></span>\n {{appLocale.LABEL_PREVIOUS}}\n <span class=\"sr-only\">{{ isDisablePrevious ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n <li class=\"next\" [ngClass]=\"{'disabled':isDisableNext}\">\n <a href=\"javascript:void(0);\" (click)=\"navigatePage('next', $event)\"\n [attr.aria-disabled]=\"isDisableNext\">\n <span aria-hidden=\"true\"><i class=\"wi wi-chevron-right\"></i></span>\n {{appLocale.LABEL_NEXT}}\n <span class=\"sr-only\">{{ isDisableNext ? ' , Disabled' : ''}}</span>\n </a>\n </li>\n</ul>\n\n<pagination class=\"pagination basic\" [ngClass]=\"navigationClass\" *ngIf=\"navcontrols === 'Basic'\" role=\"navigation\"\n [itemsPerPage]=\"maxResults\" [totalItems]=\"dataSize\"\n (pageChanged)=\"pageChanged($event)\" [ngModelOptions]=\"{standalone:true}\" [ngModel]=\"dn.currentPage\"\n [attr.aria-label]=\"'Showing Page ' + dn.currentPage + ' of ' + pageCount + ' pages'\"\n [boundaryLinks]=\"boundarylinks\" [maxSize]=\"maxsize\"\n [directionLinks]=\"directionlinks\"\n firstText=\"Firtst\" lastText=\"Last\"\n [customPreviousTemplate]=\"prevTemplate\"\n [customNextTemplate]=\"nextTemplate\"\n [customPageTemplate]=\"pageTemplate\"></pagination>\n\n<ul *ngIf=\"navcontrols === 'Basic' && showrecordcount\" class=\"pagination\">\n <li class=\"totalcount disabled basiccount\">\n <a href=\"javascript:void(0);\" tabindex=\"-1\" aria-disabled=\"true\">{{appLocale.LABEL_TOTAL_RECORDS}}: {{dataSize}}</a>\n </li>\n</ul>\n\n<ng-template #pageTemplate let-page>\n <span class=\"sr-only\" [attr.data-isacitvepage]=\"page.active\">{{'Page '}}</span>\n {{page.number}}\n <span class=\"sr-only\" *ngIf=\"page.active\"> {{', Showing page ' + page.number + ' of ' + pageCount}}</span>\n</ng-template>\n<ng-template #prevTemplate let-disabled=\"disabled\">\n <span class=\"sr-only\" [attr.data-isdisabled]=\"disabled\">Go to Previous page {{disabled ? ', Disabled' : ''}}</span>\n</ng-template>\n<ng-template #nextTemplate let-disabled=\"disabled\">\n <span class=\"sr-only\" [attr.data-isdisabled]=\"disabled\">Go to Next page {{disabled ? ', Disabled' : ''}}</span>\n</ng-template>\n" }]
776
777
  }], () => [{ type: i0.Injector }, { type: undefined, decorators: [{
777
778
  type: SkipSelf
778
779
  }, {