@coreui/angular-pro 5.0.0-alpha.13 → 5.0.0-alpha.15

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 (70) hide show
  1. package/esm2022/lib/accordion/accordion/accordion.component.mjs +22 -16
  2. package/esm2022/lib/alert/alert.component.mjs +30 -38
  3. package/esm2022/lib/breadcrumb/breadcrumb-item/breadcrumb-item.component.mjs +7 -6
  4. package/esm2022/lib/breadcrumb/breadcrumb-router/breadcrumb-router.component.mjs +4 -4
  5. package/esm2022/lib/calendar/calendar/calendar.component.mjs +4 -4
  6. package/esm2022/lib/calendar/calendar-month/calendar-day.directive.mjs +1 -1
  7. package/esm2022/lib/calendar/calendar-month/calendar-month.component.mjs +4 -9
  8. package/esm2022/lib/calendar/calendar-navigation/calendar-navigation.component.mjs +4 -4
  9. package/esm2022/lib/carousel/carousel-control/carousel-control.component.mjs +3 -4
  10. package/esm2022/lib/carousel/carousel-indicators/carousel-indicators.component.mjs +3 -4
  11. package/esm2022/lib/carousel/carousel-item/carousel-item.component.mjs +7 -8
  12. package/esm2022/lib/collapse/collapse.directive.mjs +30 -40
  13. package/esm2022/lib/date-picker/date-picker.component.mjs +5 -7
  14. package/esm2022/lib/date-range-picker/date-range-picker/date-range-picker.component.mjs +5 -7
  15. package/esm2022/lib/dropdown/dropdown/dropdown.component.mjs +26 -34
  16. package/esm2022/lib/element-cover/element-cover.component.mjs +4 -4
  17. package/esm2022/lib/form/form-check/form-check-input.directive.mjs +10 -8
  18. package/esm2022/lib/loading-button/loading-button.component.mjs +15 -21
  19. package/esm2022/lib/multi-select/multi-select/multi-select.component.mjs +2 -2
  20. package/esm2022/lib/multi-select/multi-select-native-select/multi-select-native-select.component.mjs +8 -7
  21. package/esm2022/lib/multi-select/multi-select-optgroup/multi-select-optgroup.component.mjs +6 -12
  22. package/esm2022/lib/placeholder/placeholder.directive.mjs +11 -18
  23. package/esm2022/lib/shared/theme.directive.mjs +3 -2
  24. package/esm2022/lib/sidebar/sidebar/sidebar.component.mjs +34 -46
  25. package/esm2022/lib/sidebar/sidebar-brand/sidebar-brand.component.mjs +4 -4
  26. package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-label.component.mjs +4 -4
  27. package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav-link.component.mjs +17 -18
  28. package/esm2022/lib/sidebar/sidebar-nav/sidebar-nav.component.mjs +6 -11
  29. package/esm2022/lib/smart-pagination/smart-pagination.component.mjs +20 -24
  30. package/esm2022/lib/smart-table/smart-table/smart-table.component.mjs +4 -6
  31. package/esm2022/lib/smart-table/smart-table-filter/smart-table-filter.component.mjs +4 -4
  32. package/esm2022/lib/smart-table/smart-table-head/smart-table-head.component.mjs +7 -12
  33. package/esm2022/lib/smart-table/smart-table-items-per-page-selector/smart-table-items-per-page-selector.component.mjs +3 -5
  34. package/esm2022/lib/tabs/tab-content/tab-content.component.mjs +7 -7
  35. package/esm2022/lib/tabs/tab-content-ref.directive.mjs +12 -9
  36. package/esm2022/lib/tabs/tab-pane/tab-pane.component.mjs +5 -6
  37. package/esm2022/lib/time-picker/time-picker-roll-col/time-picker-roll-am-pm.component.mjs +9 -8
  38. package/esm2022/lib/time-picker/time-picker-roll-col/time-picker-roll-col.component.mjs +9 -8
  39. package/esm2022/lib/time-picker/time-picker.component.mjs +5 -7
  40. package/esm2022/lib/time-picker/time-picker.module.mjs +2 -4
  41. package/esm2022/lib/toast/toast/toast.component.mjs +11 -9
  42. package/esm2022/lib/toast/toast-header/toast-header.component.mjs +3 -4
  43. package/esm2022/lib/widget/widget-stat-a/widget-stat-a.component.mjs +4 -4
  44. package/esm2022/lib/widget/widget-stat-b/widget-stat-b.component.mjs +4 -4
  45. package/esm2022/lib/widget/widget-stat-c/widget-stat-c.component.mjs +5 -5
  46. package/esm2022/lib/widget/widget-stat-d/widget-stat-d.component.mjs +4 -4
  47. package/esm2022/lib/widget/widget-stat-e/widget-stat-e.component.mjs +4 -4
  48. package/esm2022/lib/widget/widget-stat-f/widget-stat-f.component.mjs +4 -4
  49. package/fesm2022/coreui-angular-pro.mjs +313 -363
  50. package/fesm2022/coreui-angular-pro.mjs.map +1 -1
  51. package/lib/accordion/accordion/accordion.component.d.ts +4 -6
  52. package/lib/alert/alert.component.d.ts +8 -12
  53. package/lib/breadcrumb/breadcrumb-item/breadcrumb-item.component.d.ts +1 -0
  54. package/lib/carousel/carousel-item/carousel-item.component.d.ts +1 -2
  55. package/lib/collapse/collapse.directive.d.ts +13 -13
  56. package/lib/dropdown/dropdown/dropdown.component.d.ts +8 -12
  57. package/lib/form/form-check/form-check-input.directive.d.ts +4 -3
  58. package/lib/loading-button/loading-button.component.d.ts +4 -5
  59. package/lib/multi-select/multi-select-native-select/multi-select-native-select.component.d.ts +3 -1
  60. package/lib/multi-select/multi-select-optgroup/multi-select-optgroup.component.d.ts +2 -5
  61. package/lib/placeholder/placeholder.directive.d.ts +3 -7
  62. package/lib/sidebar/sidebar/sidebar.component.d.ts +13 -11
  63. package/lib/smart-pagination/smart-pagination.component.d.ts +4 -8
  64. package/lib/smart-table/smart-table-head/smart-table-head.component.d.ts +1 -0
  65. package/lib/tabs/tab-content/tab-content.component.d.ts +1 -0
  66. package/lib/tabs/tab-content-ref.directive.d.ts +4 -2
  67. package/lib/time-picker/time-picker-roll-col/time-picker-roll-am-pm.component.d.ts +2 -0
  68. package/lib/time-picker/time-picker-roll-col/time-picker-roll-col.component.d.ts +2 -0
  69. package/lib/toast/toast/toast.component.d.ts +3 -2
  70. package/package.json +1 -1
@@ -1,11 +1,15 @@
1
- import { Component, EventEmitter, HostBinding, Input, Output } from '@angular/core';
2
- import { NgClass, NgForOf, NgIf } from '@angular/common';
3
- import { coerceNumberProperty } from '@angular/cdk/coercion';
1
+ import { Component, EventEmitter, HostBinding, Input, numberAttribute, Output } from '@angular/core';
2
+ import { NgClass } from '@angular/common';
4
3
  import { PageItemDirective, PageLinkDirective } from '../pagination';
5
4
  import * as i0 from "@angular/core";
6
5
  export class SmartPaginationComponent {
7
6
  constructor() {
8
- this._activePage = 1;
7
+ /**
8
+ * Current page number. [docs]
9
+ * @default 1
10
+ * @type number
11
+ */
12
+ this.activePage = 1;
9
13
  /**
10
14
  * Event triggered on activePage change.
11
15
  * @type EventEmitter<number>
@@ -68,24 +72,13 @@ export class SmartPaginationComponent {
68
72
  */
69
73
  this.role = 'navigation';
70
74
  }
71
- /**
72
- * Current page number. [docs]
73
- * @default 1
74
- * @type number
75
- */
76
- set activePage(value) {
77
- this._activePage = coerceNumberProperty(value);
78
- }
79
- get activePage() {
80
- return this._activePage;
81
- }
82
75
  /**
83
76
  * Maximum items number. [docs]
84
77
  * @default 5
85
78
  * @type number
86
79
  */
87
80
  set limit(value) {
88
- this._limit = coerceNumberProperty(value);
81
+ this._limit = value;
89
82
  }
90
83
  get limit() {
91
84
  return this._limit;
@@ -95,7 +88,7 @@ export class SmartPaginationComponent {
95
88
  * @type number
96
89
  */
97
90
  set pages(value) {
98
- this._pages = coerceNumberProperty(value);
91
+ this._pages = value;
99
92
  }
100
93
  get pages() {
101
94
  return this._pages;
@@ -155,13 +148,14 @@ export class SmartPaginationComponent {
155
148
  }
156
149
  }
157
150
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.0", ngImport: i0, type: SmartPaginationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
158
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.0", type: SmartPaginationComponent, isStandalone: true, selector: "c-smart-pagination", inputs: { activePage: "activePage", arrows: "arrows", doubleArrows: "doubleArrows", dots: "dots", limit: "limit", pages: "pages", firstButton: "firstButton", lastButton: "lastButton", nextButton: "nextButton", previousButton: "previousButton", align: "align", size: "size", role: "role" }, outputs: { activePageChange: "activePageChange" }, host: { properties: { "attr.role": "this.role" } }, exportAs: ["cSmartPagination"], ngImport: i0, template: "<ul [ngClass]=\"paginationClass\">\n <li *ngIf=\"doubleArrows\" cPageItem>\n <button\n (click)=\"setPage(1)\"\n [disabled]=\"activePage === 1\"\n aria-label=\"First page\"\n cPageLink\n >\n <span aria-hidden=\"true\">{{firstButton}}</span>\n </button>\n </li>\n <li *ngIf=\"arrows\" cPageItem>\n <button\n (click)=\"setPage(activePage - 1)\"\n [disabled]=\"activePage === 1\"\n aria-label=\"Previous page\"\n cPageLink\n >\n <span aria-hidden=\"true\">{{previousButton}}</span>\n </button>\n </li>\n <li *ngIf=\"beforeDots\" cPageItem>\n <a cPageLink disabled role=\"separator\">\n ...\n </a>\n </li>\n <li *ngFor=\"let item of items; index as i\" [active]=\"activePage === item\" cPageItem>\n <button\n (click)=\"setPage(item)\"\n [title]=\"(activePage === item ? 'Current page ' : 'Go to page ') + (item).toString()\"\n cPageLink\n >\n {{item}}\n </button>\n </li>\n <li *ngIf=\"afterDots\" cPageItem>\n <a cPageLink disabled role=\"separator\">\n ...\n </a>\n </li>\n <li *ngIf=\"arrows\" cPageItem>\n <button\n (click)=\"setPage(activePage + 1)\"\n [disabled]=\"activePage === pages\"\n aria-label=\"Next page\"\n cPageLink\n >\n <span aria-hidden=\"true\">{{nextButton}}</span>\n </button>\n </li>\n <li *ngIf=\"doubleArrows\" cPageItem>\n <button\n (click)=\"setPage(pages)\"\n [disabled]=\"activePage === pages\"\n aria-label=\"Last page\"\n cPageLink\n >\n <span aria-hidden=\"true\">{{lastButton}}</span>\n </button>\n </li>\n</ul>\n", dependencies: [{ kind: "directive", type: PageItemDirective, selector: "[cPageItem]", inputs: ["active", "disabled"] }, { kind: "directive", type: PageLinkDirective, selector: "[cPageLink]" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] }); }
151
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.0", type: SmartPaginationComponent, isStandalone: true, selector: "c-smart-pagination", inputs: { activePage: ["activePage", "activePage", numberAttribute], arrows: "arrows", doubleArrows: "doubleArrows", dots: "dots", limit: ["limit", "limit", numberAttribute], pages: ["pages", "pages", numberAttribute], firstButton: "firstButton", lastButton: "lastButton", nextButton: "nextButton", previousButton: "previousButton", align: "align", size: "size", role: "role" }, outputs: { activePageChange: "activePageChange" }, host: { properties: { "attr.role": "this.role" } }, exportAs: ["cSmartPagination"], ngImport: i0, template: "<ul [ngClass]=\"paginationClass\">\n @if (doubleArrows) {\n <li cPageItem>\n <button\n (click)=\"setPage(1)\"\n [disabled]=\"activePage === 1\"\n aria-label=\"First page\"\n cPageLink\n >\n <span aria-hidden=\"true\">{{ firstButton }}</span>\n </button>\n </li>\n }\n @if (arrows) {\n <li cPageItem>\n <button\n (click)=\"setPage(activePage - 1)\"\n [disabled]=\"activePage === 1\"\n aria-label=\"Previous page\"\n cPageLink\n >\n <span aria-hidden=\"true\">{{ previousButton }}</span>\n </button>\n </li>\n }\n @if (beforeDots) {\n <li cPageItem>\n <a cPageLink disabled role=\"separator\">\n ...\n </a>\n </li>\n }\n @for (item of items; track item; let i = $index) {\n <li [active]=\"activePage === item\" cPageItem>\n <button\n (click)=\"setPage(item)\"\n [title]=\"(activePage === item ? 'Current page ' : 'Go to page ') + (item).toString()\"\n cPageLink\n >\n {{ item }}\n </button>\n </li>\n }\n @if (afterDots) {\n <li cPageItem>\n <a cPageLink disabled role=\"separator\">\n ...\n </a>\n </li>\n }\n @if (arrows) {\n <li cPageItem>\n <button\n (click)=\"setPage(activePage + 1)\"\n [disabled]=\"activePage === pages\"\n aria-label=\"Next page\"\n cPageLink\n >\n <span aria-hidden=\"true\">{{ nextButton }}</span>\n </button>\n </li>\n }\n @if (doubleArrows) {\n <li cPageItem>\n <button\n (click)=\"setPage(pages)\"\n [disabled]=\"activePage === pages\"\n aria-label=\"Last page\"\n cPageLink\n >\n <span aria-hidden=\"true\">{{ lastButton }}</span>\n </button>\n </li>\n }\n</ul>\n", dependencies: [{ kind: "directive", type: PageItemDirective, selector: "[cPageItem]", inputs: ["active", "disabled"] }, { kind: "directive", type: PageLinkDirective, selector: "[cPageLink]" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] }); }
159
152
  }
160
153
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImport: i0, type: SmartPaginationComponent, decorators: [{
161
154
  type: Component,
162
- args: [{ selector: 'c-smart-pagination', exportAs: 'cSmartPagination', standalone: true, imports: [PageItemDirective, PageLinkDirective, NgClass, NgIf, NgForOf], template: "<ul [ngClass]=\"paginationClass\">\n <li *ngIf=\"doubleArrows\" cPageItem>\n <button\n (click)=\"setPage(1)\"\n [disabled]=\"activePage === 1\"\n aria-label=\"First page\"\n cPageLink\n >\n <span aria-hidden=\"true\">{{firstButton}}</span>\n </button>\n </li>\n <li *ngIf=\"arrows\" cPageItem>\n <button\n (click)=\"setPage(activePage - 1)\"\n [disabled]=\"activePage === 1\"\n aria-label=\"Previous page\"\n cPageLink\n >\n <span aria-hidden=\"true\">{{previousButton}}</span>\n </button>\n </li>\n <li *ngIf=\"beforeDots\" cPageItem>\n <a cPageLink disabled role=\"separator\">\n ...\n </a>\n </li>\n <li *ngFor=\"let item of items; index as i\" [active]=\"activePage === item\" cPageItem>\n <button\n (click)=\"setPage(item)\"\n [title]=\"(activePage === item ? 'Current page ' : 'Go to page ') + (item).toString()\"\n cPageLink\n >\n {{item}}\n </button>\n </li>\n <li *ngIf=\"afterDots\" cPageItem>\n <a cPageLink disabled role=\"separator\">\n ...\n </a>\n </li>\n <li *ngIf=\"arrows\" cPageItem>\n <button\n (click)=\"setPage(activePage + 1)\"\n [disabled]=\"activePage === pages\"\n aria-label=\"Next page\"\n cPageLink\n >\n <span aria-hidden=\"true\">{{nextButton}}</span>\n </button>\n </li>\n <li *ngIf=\"doubleArrows\" cPageItem>\n <button\n (click)=\"setPage(pages)\"\n [disabled]=\"activePage === pages\"\n aria-label=\"Last page\"\n cPageLink\n >\n <span aria-hidden=\"true\">{{lastButton}}</span>\n </button>\n </li>\n</ul>\n" }]
163
- }], ctorParameters: () => [], propDecorators: { activePage: [{
164
- type: Input
155
+ args: [{ selector: 'c-smart-pagination', exportAs: 'cSmartPagination', standalone: true, imports: [PageItemDirective, PageLinkDirective, NgClass], template: "<ul [ngClass]=\"paginationClass\">\n @if (doubleArrows) {\n <li cPageItem>\n <button\n (click)=\"setPage(1)\"\n [disabled]=\"activePage === 1\"\n aria-label=\"First page\"\n cPageLink\n >\n <span aria-hidden=\"true\">{{ firstButton }}</span>\n </button>\n </li>\n }\n @if (arrows) {\n <li cPageItem>\n <button\n (click)=\"setPage(activePage - 1)\"\n [disabled]=\"activePage === 1\"\n aria-label=\"Previous page\"\n cPageLink\n >\n <span aria-hidden=\"true\">{{ previousButton }}</span>\n </button>\n </li>\n }\n @if (beforeDots) {\n <li cPageItem>\n <a cPageLink disabled role=\"separator\">\n ...\n </a>\n </li>\n }\n @for (item of items; track item; let i = $index) {\n <li [active]=\"activePage === item\" cPageItem>\n <button\n (click)=\"setPage(item)\"\n [title]=\"(activePage === item ? 'Current page ' : 'Go to page ') + (item).toString()\"\n cPageLink\n >\n {{ item }}\n </button>\n </li>\n }\n @if (afterDots) {\n <li cPageItem>\n <a cPageLink disabled role=\"separator\">\n ...\n </a>\n </li>\n }\n @if (arrows) {\n <li cPageItem>\n <button\n (click)=\"setPage(activePage + 1)\"\n [disabled]=\"activePage === pages\"\n aria-label=\"Next page\"\n cPageLink\n >\n <span aria-hidden=\"true\">{{ nextButton }}</span>\n </button>\n </li>\n }\n @if (doubleArrows) {\n <li cPageItem>\n <button\n (click)=\"setPage(pages)\"\n [disabled]=\"activePage === pages\"\n aria-label=\"Last page\"\n cPageLink\n >\n <span aria-hidden=\"true\">{{ lastButton }}</span>\n </button>\n </li>\n }\n</ul>\n" }]
156
+ }], propDecorators: { activePage: [{
157
+ type: Input,
158
+ args: [{ transform: numberAttribute }]
165
159
  }], activePageChange: [{
166
160
  type: Output
167
161
  }], arrows: [{
@@ -171,9 +165,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImpor
171
165
  }], dots: [{
172
166
  type: Input
173
167
  }], limit: [{
174
- type: Input
168
+ type: Input,
169
+ args: [{ transform: numberAttribute }]
175
170
  }], pages: [{
176
- type: Input
171
+ type: Input,
172
+ args: [{ transform: numberAttribute }]
177
173
  }], firstButton: [{
178
174
  type: Input
179
175
  }], lastButton: [{
@@ -192,4 +188,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImpor
192
188
  }, {
193
189
  type: Input
194
190
  }] } });
195
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtcGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL3NtYXJ0LXBhZ2luYXRpb24vc21hcnQtcGFnaW5hdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL3NtYXJ0LXBhZ2luYXRpb24vc21hcnQtcGFnaW5hdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUNqRyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsb0JBQW9CLEVBQWUsTUFBTSx1QkFBdUIsQ0FBQztBQUUxRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBVXJFLE1BQU0sT0FBTyx3QkFBd0I7SUFNbkM7UUFnQlEsZ0JBQVcsR0FBVyxDQUFDLENBQUM7UUFFaEM7OztXQUdHO1FBQ08scUJBQWdCLEdBQXlCLElBQUksWUFBWSxFQUFVLENBQUM7UUFFOUU7Ozs7V0FJRztRQUNNLFdBQU0sR0FBWSxJQUFJLENBQUM7UUFFaEM7Ozs7V0FJRztRQUNNLGlCQUFZLEdBQVksSUFBSSxDQUFDO1FBRXRDOzs7V0FHRztRQUNNLFNBQUksR0FBWSxJQUFJLENBQUM7UUFnQnRCLFdBQU0sR0FBVyxDQUFDLENBQUM7UUFlbkIsV0FBTSxHQUFXLENBQUMsQ0FBQztRQUUzQjs7OztXQUlHO1FBQ00sZ0JBQVcsR0FBK0IsR0FBRyxDQUFDO1FBQ3ZELHNEQUFzRDtRQUV0RDs7OztXQUlHO1FBQ00sZUFBVSxHQUEr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d0IsdWZDZHJDLDZtREE2REEsNENEakRZLGlCQUFpQix3RkFBRSxpQkFBaUIsd0RBQUUsT0FBTyxvRkFBRSxJQUFJLDZGQUFFLE9BQU87OzJGQUUzRCx3QkFBd0I7a0JBUHBDLFNBQVM7K0JBQ0Usb0JBQW9CLFlBRXBCLGtCQUFrQixjQUNoQixJQUFJLFdBQ1AsQ0FBQyxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQzt3REFnQm5FLFVBQVU7c0JBRGIsS0FBSztnQkFlSSxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBT0UsTUFBTTtzQkFBZCxLQUFLO2dCQU9HLFlBQVk7c0JBQXBCLEtBQUs7Z0JBTUcsSUFBSTtzQkFBWixLQUFLO2dCQVFGLEtBQUs7c0JBRFIsS0FBSztnQkFnQkYsS0FBSztzQkFEUixLQUFLO2dCQWdCRyxXQUFXO3NCQUFuQixLQUFLO2dCQVFHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBUUcsVUFBVTtzQkFBbEIsS0FBSztnQkFPRyxjQUFjO3NCQUF0QixLQUFLO2dCQU1HLEtBQUs7c0JBQWIsS0FBSztnQkFNRyxJQUFJO3NCQUFaLEtBQUs7Z0JBUUcsSUFBSTtzQkFEWixXQUFXO3VCQUFDLFdBQVc7O3NCQUN2QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEhvc3RCaW5kaW5nLCBJbnB1dCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmdDbGFzcywgTmdGb3JPZiwgTmdJZiB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBjb2VyY2VOdW1iZXJQcm9wZXJ0eSwgTnVtYmVySW5wdXQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuXG5pbXBvcnQgeyBQYWdlSXRlbURpcmVjdGl2ZSwgUGFnZUxpbmtEaXJlY3RpdmUgfSBmcm9tICcuLi9wYWdpbmF0aW9uJztcbmltcG9ydCB7IElTbWFydFBhZ2luYXRpb24gfSBmcm9tICcuL3NtYXJ0LXBhZ2luYXRpb24udHlwZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Mtc21hcnQtcGFnaW5hdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9zbWFydC1wYWdpbmF0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgZXhwb3J0QXM6ICdjU21hcnRQYWdpbmF0aW9uJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1BhZ2VJdGVtRGlyZWN0aXZlLCBQYWdlTGlua0RpcmVjdGl2ZSwgTmdDbGFzcywgTmdJZiwgTmdGb3JPZl1cbn0pXG5leHBvcnQgY2xhc3MgU21hcnRQYWdpbmF0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgSVNtYXJ0UGFnaW5hdGlvbiB7XG5cbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2FjdGl2ZVBhZ2U6IE51bWJlcklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfcGFnZXM6IE51bWJlcklucHV0O1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbGltaXQ6IE51bWJlcklucHV0O1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgLyoqXG4gICAqIEN1cnJlbnQgcGFnZSBudW1iZXIuIFtkb2NzXVxuICAgKiBAZGVmYXVsdCAxXG4gICAqIEB0eXBlIG51bWJlclxuICAgKi9cbiAgQElucHV0KClcbiAgc2V0IGFjdGl2ZVBhZ2UodmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX2FjdGl2ZVBhZ2UgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgYWN0aXZlUGFnZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmVQYWdlO1xuICB9XG5cbiAgcHJpdmF0ZSBfYWN0aXZlUGFnZTogbnVtYmVyID0gMTtcblxuICAvKipcbiAgICogRXZlbnQgdHJpZ2dlcmVkIG9uIGFjdGl2ZVBhZ2UgY2hhbmdlLlxuICAgKiBAdHlwZSBFdmVudEVtaXR0ZXI8bnVtYmVyPlxuICAgKi9cbiAgQE91dHB1dCgpIGFjdGl2ZVBhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgLyoqXG4gICAqIFNob3cvaGlkZSBhcnJvd3NcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqL1xuICBASW5wdXQoKSBhcnJvd3M6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBTaG93IGRvdWJsZSBhcnJvd3MgYnV0dG9uc1xuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICovXG4gIEBJbnB1dCgpIGRvdWJsZUFycm93czogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFNob3cvaGlkZSBkb3RzLiBbZG9jc11cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KCkgZG90czogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIE1heGltdW0gaXRlbXMgbnVtYmVyLiBbZG9jc11cbiAgICogQGRlZmF1bHQgNVxuICAgKiBAdHlwZSBudW1iZXJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCBsaW1pdCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbGltaXQgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gIH1cblxuICBnZXQgbGltaXQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbGltaXQ7XG4gIH1cblxuICBwcml2YXRlIF9saW1pdDogbnVtYmVyID0gNTtcblxuICAvKipcbiAgICogTnVtYmVyIG9mIHBhZ2VzLiBbZG9jc11cbiAgICogQHR5cGUgbnVtYmVyXG4gICAqL1xuICBASW5wdXQoKVxuICBzZXQgcGFnZXModmFsdWU6IG51bWJlcikge1xuICAgIHRoaXMuX3BhZ2VzID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuICB9XG5cbiAgZ2V0IHBhZ2VzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VzO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGFnZXM6IG51bWJlciA9IDE7XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mICdmaXJzdEJ1dHRvbicgYnV0dG9uLiBbZG9jc11cbiAgICogQGRlZmF1bHQgJyZsYXF1bydcbiAgICogdG9kbyBUZW1wbGF0ZVJlZlxuICAgKi9cbiAgQElucHV0KCkgZmlyc3RCdXR0b24/OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+ID0gJ8KrJztcbiAgLy8gZmlyc3RCdXR0b24/OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+ID0gJyZsYXF1bzsnXG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mICdsYXN0QnV0dG9uJyBidXR0b24uIFtkb2NzXVxuICAgKiBAZGVmYXVsdCAnJnJhcXVvJ1xuICAgKiB0b2RvIFRlbXBsYXRlUmVmXG4gICAqL1xuICBASW5wdXQoKSBsYXN0QnV0dG9uPzogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiA9ICfCuyc7XG4gIC8vIGxhc3RCdXR0b24/OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+ID0gJyZyYXF1bzsnXG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mICduZXh0QnV0dG9uJyBidXR0b24uIFtkb2NzXVxuICAgKiBAZGVmYXVsdCAnJmxzYXF1bydcbiAgICogdG9kbyBUZW1wbGF0ZVJlZlxuICAgKi9cbiAgQElucHV0KCkgbmV4dEJ1dHRvbj86IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4gPSAn4oC6JztcblxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgJ3ByZXZpb3VzQnV0dG9uJyBidXR0b24uIFtkb2NzXVxuICAgKiBAZGVmYXVsdCAnJnJzYXF1bydcbiAgICogdG9kbyBUZW1wbGF0ZVJlZlxuICAgKi9cbiAgQElucHV0KCkgcHJldmlvdXNCdXR0b24/OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+ID0gJ+KAuSc7XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgYWxpZ25tZW50IG9mIHBhZ2luYXRpb24gY29tcG9uZW50cy5cbiAgICogQHZhbHVlcyAnc3RhcnQnLCAnY2VudGVyJywgJ2VuZCdcbiAgICovXG4gIEBJbnB1dCgpIGFsaWduPzogJ3N0YXJ0JyB8ICdjZW50ZXInIHwgJ2VuZCcgfCAnJyA9ICdzdGFydCc7XG5cbiAgLyoqXG4gICAqIFNpemUgdGhlIGNvbXBvbmVudCBzbWFsbCBvciBsYXJnZS5cbiAgICogQHZhbHVlcyAnc20nLCAnbGcnXG4gICAqL1xuICBASW5wdXQoKSBzaXplPzogJ3NtJyB8ICdsZyc7XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgcm9sZSBmb3IgcGFnaW5hdGlvbi4gW2RvY3NdXG4gICAqIEB0eXBlIHN0cmluZ1xuICAgKiBAZGVmYXVsdCAnbmF2aWdhdGlvbidcbiAgICovXG4gIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJylcbiAgQElucHV0KCkgcm9sZSA9ICduYXZpZ2F0aW9uJztcblxuICBnZXQgcGFnaW5hdGlvbkNsYXNzKCk6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhZ2luYXRpb246IHRydWUsXG4gICAgICBbYHBhZ2luYXRpb24tJHt0aGlzLnNpemV9YF06ICEhdGhpcy5zaXplLFxuICAgICAgW2BqdXN0aWZ5LWNvbnRlbnQtJHt0aGlzLmFsaWdufWBdOiAhIXRoaXMuYWxpZ25cbiAgICB9O1xuICB9XG5cbiAgZ2V0IG1heFByZXZJdGVtcygpIHtcbiAgICByZXR1cm4gTWF0aC5mbG9vcigodGhpcy5fbGltaXQgLSAxKSAvIDIpO1xuICB9XG5cbiAgZ2V0IG1heE5leHRJdGVtcygpIHtcbiAgICByZXR1cm4gTWF0aC5jZWlsKCh0aGlzLl9saW1pdCAtIDEpIC8gMik7XG4gIH1cblxuICBnZXQgcmFuZ2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5hY3RpdmVQYWdlICsgdGhpcy5tYXhOZXh0SXRlbXM7XG4gIH1cblxuICBnZXQgbGFzdEl0ZW0oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5yYW5nZSA+PSB0aGlzLl9wYWdlcyA/IHRoaXMuX3BhZ2VzIDogdGhpcy5yYW5nZSAtICh0aGlzLmFmdGVyRG90cyA/IDEgOiAwKTtcbiAgfVxuXG4gIGdldCBjb21wdXRlZExpbWl0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2xpbWl0IC0gKHRoaXMuYWZ0ZXJEb3RzID8gMSA6IDApIC0gKHRoaXMuYmVmb3JlRG90cyA/IDEgOiAwKTtcbiAgfVxuXG4gIGdldCBpdGVtc0xpbWl0KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3BhZ2VzIDwgdGhpcy5jb21wdXRlZExpbWl0ID8gdGhpcy5fcGFnZXMgOiB0aGlzLmNvbXB1dGVkTGltaXQ7XG4gIH1cblxuICBnZXQgc2hvd0RvdHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZG90cyAmJiB0aGlzLl9saW1pdCA+IDQgJiYgdGhpcy5fbGltaXQgPCB0aGlzLl9wYWdlcztcbiAgfVxuXG4gIGdldCBiZWZvcmVEb3RzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNob3dEb3RzICYmIHRoaXMuYWN0aXZlUGFnZSA+IHRoaXMubWF4UHJldkl0ZW1zICsgMTtcbiAgfVxuXG4gIGdldCBhZnRlckRvdHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd0RvdHMgJiYgdGhpcy5hY3RpdmVQYWdlIDwgdGhpcy5fcGFnZXMgLSB0aGlzLm1heE5leHRJdGVtcztcbiAgfVxuXG4gIGdldCBpdGVtcygpIHtcbiAgICBpZiAodGhpcy5hY3RpdmVQYWdlIC0gdGhpcy5tYXhQcmV2SXRlbXMgPD0gMSkge1xuICAgICAgcmV0dXJuIEFycmF5LmZyb20oXG4gICAgICAgIHtcbiAgICAgICAgICBsZW5ndGg6IHRoaXMuaXRlbXNMaW1pdFxuICAgICAgICB9LFxuICAgICAgICAoX2l0ZW0sIGkpID0+IGkgKyAxXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gQXJyYXkuZnJvbShcbiAgICAgICAge1xuICAgICAgICAgIGxlbmd0aDogdGhpcy5pdGVtc0xpbWl0XG4gICAgICAgIH0sXG4gICAgICAgIChfaXRlbSwgaSkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLmxhc3RJdGVtIC0gaTtcbiAgICAgICAgfVxuICAgICAgKS5yZXZlcnNlKCk7XG4gICAgfVxuICB9XG5cbiAgc2V0UGFnZShwYWdlOiBudW1iZXIpIHtcbiAgICBpZiAocGFnZSAhPT0gdGhpcy5hY3RpdmVQYWdlKSB7XG4gICAgICB0aGlzLmFjdGl2ZVBhZ2UgPSBwYWdlO1xuICAgICAgdGhpcy5hY3RpdmVQYWdlQ2hhbmdlLmVtaXQocGFnZSk7XG4gICAgfVxuICB9XG59XG4iLCI8dWwgW25nQ2xhc3NdPVwicGFnaW5hdGlvbkNsYXNzXCI+XG4gIDxsaSAqbmdJZj1cImRvdWJsZUFycm93c1wiIGNQYWdlSXRlbT5cbiAgICA8YnV0dG9uXG4gICAgICAoY2xpY2spPVwic2V0UGFnZSgxKVwiXG4gICAgICBbZGlzYWJsZWRdPVwiYWN0aXZlUGFnZSA9PT0gMVwiXG4gICAgICBhcmlhLWxhYmVsPVwiRmlyc3QgcGFnZVwiXG4gICAgICBjUGFnZUxpbmtcbiAgICA+XG4gICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj57e2ZpcnN0QnV0dG9ufX08L3NwYW4+XG4gICAgPC9idXR0b24+XG4gIDwvbGk+XG4gIDxsaSAqbmdJZj1cImFycm93c1wiIGNQYWdlSXRlbT5cbiAgICA8YnV0dG9uXG4gICAgICAoY2xpY2spPVwic2V0UGFnZShhY3RpdmVQYWdlIC0gMSlcIlxuICAgICAgW2Rpc2FibGVkXT1cImFjdGl2ZVBhZ2UgPT09IDFcIlxuICAgICAgYXJpYS1sYWJlbD1cIlByZXZpb3VzIHBhZ2VcIlxuICAgICAgY1BhZ2VMaW5rXG4gICAgPlxuICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+e3twcmV2aW91c0J1dHRvbn19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2xpPlxuICA8bGkgKm5nSWY9XCJiZWZvcmVEb3RzXCIgY1BhZ2VJdGVtPlxuICAgIDxhIGNQYWdlTGluayBkaXNhYmxlZCByb2xlPVwic2VwYXJhdG9yXCI+XG4gICAgICAuLi5cbiAgICA8L2E+XG4gIDwvbGk+XG4gIDxsaSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBpdGVtczsgaW5kZXggYXMgaVwiIFthY3RpdmVdPVwiYWN0aXZlUGFnZSA9PT0gaXRlbVwiIGNQYWdlSXRlbT5cbiAgICA8YnV0dG9uXG4gICAgICAoY2xpY2spPVwic2V0UGFnZShpdGVtKVwiXG4gICAgICBbdGl0bGVdPVwiKGFjdGl2ZVBhZ2UgPT09IGl0ZW0gPyAnQ3VycmVudCBwYWdlICcgOiAnR28gdG8gcGFnZSAnKSArIChpdGVtKS50b1N0cmluZygpXCJcbiAgICAgIGNQYWdlTGlua1xuICAgID5cbiAgICAgIHt7aXRlbX19XG4gICAgPC9idXR0b24+XG4gIDwvbGk+XG4gIDxsaSAqbmdJZj1cImFmdGVyRG90c1wiIGNQYWdlSXRlbT5cbiAgICA8YSBjUGFnZUxpbmsgZGlzYWJsZWQgcm9sZT1cInNlcGFyYXRvclwiPlxuICAgICAgLi4uXG4gICAgPC9hPlxuICA8L2xpPlxuICA8bGkgKm5nSWY9XCJhcnJvd3NcIiBjUGFnZUl0ZW0+XG4gICAgPGJ1dHRvblxuICAgICAgKGNsaWNrKT1cInNldFBhZ2UoYWN0aXZlUGFnZSArIDEpXCJcbiAgICAgIFtkaXNhYmxlZF09XCJhY3RpdmVQYWdlID09PSBwYWdlc1wiXG4gICAgICBhcmlhLWxhYmVsPVwiTmV4dCBwYWdlXCJcbiAgICAgIGNQYWdlTGlua1xuICAgID5cbiAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPnt7bmV4dEJ1dHRvbn19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2xpPlxuICA8bGkgKm5nSWY9XCJkb3VibGVBcnJvd3NcIiBjUGFnZUl0ZW0+XG4gICAgPGJ1dHRvblxuICAgICAgKGNsaWNrKT1cInNldFBhZ2UocGFnZXMpXCJcbiAgICAgIFtkaXNhYmxlZF09XCJhY3RpdmVQYWdlID09PSBwYWdlc1wiXG4gICAgICBhcmlhLWxhYmVsPVwiTGFzdCBwYWdlXCJcbiAgICAgIGNQYWdlTGlua1xuICAgID5cbiAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPnt7bGFzdEJ1dHRvbn19PC9zcGFuPlxuICAgIDwvYnV0dG9uPlxuICA8L2xpPlxuPC91bD5cbiJdfQ==
191
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtcGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL3NtYXJ0LXBhZ2luYXRpb24vc21hcnQtcGFnaW5hdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL3NtYXJ0LXBhZ2luYXRpb24vc21hcnQtcGFnaW5hdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFDbEgsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTFDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFVckUsTUFBTSxPQUFPLHdCQUF3QjtJQVByQztRQVNFOzs7O1dBSUc7UUFDb0MsZUFBVSxHQUFXLENBQUMsQ0FBQztRQUU5RDs7O1dBR0c7UUFDTyxxQkFBZ0IsR0FBeUIsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUU5RTs7OztXQUlHO1FBQ00sV0FBTSxHQUFZLElBQUksQ0FBQztRQUVoQzs7OztXQUlHO1FBQ00saUJBQVksR0FBWSxJQUFJLENBQUM7UUFFdEM7OztXQUdHO1FBQ00sU0FBSSxHQUFZLElBQUksQ0FBQztRQWdCdEIsV0FBTSxHQUFXLENBQUMsQ0FBQztRQWVuQixXQUFNLEdBQVcsQ0FBQyxDQUFDO1FBRTNCOzs7O1dBSUc7UUFDTSxnQkFBVyxHQUErQixHQUFHLENBQUM7UUFDdkQsc0RBQXNEO1FBRXREOzs7O1dBSUc7UUFDTSxlQUFVLEdBQStCLEdBQUcsQ0FBQztRQUN0RCxxREFBcUQ7UUFFckQ7Ozs7V0FJRztRQUNN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QUFFLGVBQWUsRUFBRTtnQkFNM0IsZ0JBQWdCO3NCQUF6QixNQUFNO2dCQU9FLE1BQU07c0JBQWQsS0FBSztnQkFPRyxZQUFZO3NCQUFwQixLQUFLO2dCQU1HLElBQUk7c0JBQVosS0FBSztnQkFRRixLQUFLO3NCQURSLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO2dCQWdCakMsS0FBSztzQkFEUixLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRTtnQkFnQjVCLFdBQVc7c0JBQW5CLEtBQUs7Z0JBUUcsVUFBVTtzQkFBbEIsS0FBSztnQkFRRyxVQUFVO3NCQUFsQixLQUFLO2dCQU9HLGNBQWM7c0JBQXRCLEtBQUs7Z0JBTUcsS0FBSztzQkFBYixLQUFLO2dCQU1HLElBQUk7c0JBQVosS0FBSztnQkFRRyxJQUFJO3NCQURaLFdBQVc7dUJBQUMsV0FBVzs7c0JBQ3ZCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIElucHV0LCBudW1iZXJBdHRyaWJ1dGUsIE91dHB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nQ2xhc3MgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQgeyBQYWdlSXRlbURpcmVjdGl2ZSwgUGFnZUxpbmtEaXJlY3RpdmUgfSBmcm9tICcuLi9wYWdpbmF0aW9uJztcbmltcG9ydCB7IElTbWFydFBhZ2luYXRpb24gfSBmcm9tICcuL3NtYXJ0LXBhZ2luYXRpb24udHlwZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Mtc21hcnQtcGFnaW5hdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9zbWFydC1wYWdpbmF0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgZXhwb3J0QXM6ICdjU21hcnRQYWdpbmF0aW9uJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1BhZ2VJdGVtRGlyZWN0aXZlLCBQYWdlTGlua0RpcmVjdGl2ZSwgTmdDbGFzc11cbn0pXG5leHBvcnQgY2xhc3MgU21hcnRQYWdpbmF0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgSVNtYXJ0UGFnaW5hdGlvbiB7XG5cbiAgLyoqXG4gICAqIEN1cnJlbnQgcGFnZSBudW1iZXIuIFtkb2NzXVxuICAgKiBAZGVmYXVsdCAxXG4gICAqIEB0eXBlIG51bWJlclxuICAgKi9cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgYWN0aXZlUGFnZTogbnVtYmVyID0gMTtcblxuICAvKipcbiAgICogRXZlbnQgdHJpZ2dlcmVkIG9uIGFjdGl2ZVBhZ2UgY2hhbmdlLlxuICAgKiBAdHlwZSBFdmVudEVtaXR0ZXI8bnVtYmVyPlxuICAgKi9cbiAgQE91dHB1dCgpIGFjdGl2ZVBhZ2VDaGFuZ2U6IEV2ZW50RW1pdHRlcjxudW1iZXI+ID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgLyoqXG4gICAqIFNob3cvaGlkZSBhcnJvd3NcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKiBAdHlwZSBib29sZWFuXG4gICAqL1xuICBASW5wdXQoKSBhcnJvd3M6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBTaG93IGRvdWJsZSBhcnJvd3MgYnV0dG9uc1xuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqIEB0eXBlIGJvb2xlYW5cbiAgICovXG4gIEBJbnB1dCgpIGRvdWJsZUFycm93czogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFNob3cvaGlkZSBkb3RzLiBbZG9jc11cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KCkgZG90czogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIE1heGltdW0gaXRlbXMgbnVtYmVyLiBbZG9jc11cbiAgICogQGRlZmF1bHQgNVxuICAgKiBAdHlwZSBudW1iZXJcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pXG4gIHNldCBsaW1pdCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fbGltaXQgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBsaW1pdCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9saW1pdDtcbiAgfVxuXG4gIHByaXZhdGUgX2xpbWl0OiBudW1iZXIgPSA1O1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgcGFnZXMuIFtkb2NzXVxuICAgKiBAdHlwZSBudW1iZXJcbiAgICovXG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pXG4gIHNldCBwYWdlcyh2YWx1ZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fcGFnZXMgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBwYWdlcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9wYWdlcztcbiAgfVxuXG4gIHByaXZhdGUgX3BhZ2VzOiBudW1iZXIgPSAxO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiAnZmlyc3RCdXR0b24nIGJ1dHRvbi4gW2RvY3NdXG4gICAqIEBkZWZhdWx0ICcmbGFxdW8nXG4gICAqIHRvZG8gVGVtcGxhdGVSZWZcbiAgICovXG4gIEBJbnB1dCgpIGZpcnN0QnV0dG9uPzogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiA9ICfCqyc7XG4gIC8vIGZpcnN0QnV0dG9uPzogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiA9ICcmbGFxdW87J1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiAnbGFzdEJ1dHRvbicgYnV0dG9uLiBbZG9jc11cbiAgICogQGRlZmF1bHQgJyZyYXF1bydcbiAgICogdG9kbyBUZW1wbGF0ZVJlZlxuICAgKi9cbiAgQElucHV0KCkgbGFzdEJ1dHRvbj86IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4gPSAnwrsnO1xuICAvLyBsYXN0QnV0dG9uPzogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiA9ICcmcmFxdW87J1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiAnbmV4dEJ1dHRvbicgYnV0dG9uLiBbZG9jc11cbiAgICogQGRlZmF1bHQgJyZsc2FxdW8nXG4gICAqIHRvZG8gVGVtcGxhdGVSZWZcbiAgICovXG4gIEBJbnB1dCgpIG5leHRCdXR0b24/OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+ID0gJ+KAuic7XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mICdwcmV2aW91c0J1dHRvbicgYnV0dG9uLiBbZG9jc11cbiAgICogQGRlZmF1bHQgJyZyc2FxdW8nXG4gICAqIHRvZG8gVGVtcGxhdGVSZWZcbiAgICovXG4gIEBJbnB1dCgpIHByZXZpb3VzQnV0dG9uPzogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiA9ICfigLknO1xuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGFsaWdubWVudCBvZiBwYWdpbmF0aW9uIGNvbXBvbmVudHMuXG4gICAqIEB2YWx1ZXMgJ3N0YXJ0JywgJ2NlbnRlcicsICdlbmQnXG4gICAqL1xuICBASW5wdXQoKSBhbGlnbj86ICdzdGFydCcgfCAnY2VudGVyJyB8ICdlbmQnIHwgJycgPSAnc3RhcnQnO1xuXG4gIC8qKlxuICAgKiBTaXplIHRoZSBjb21wb25lbnQgc21hbGwgb3IgbGFyZ2UuXG4gICAqIEB2YWx1ZXMgJ3NtJywgJ2xnJ1xuICAgKi9cbiAgQElucHV0KCkgc2l6ZT86ICdzbScgfCAnbGcnO1xuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHJvbGUgZm9yIHBhZ2luYXRpb24uIFtkb2NzXVxuICAgKiBAdHlwZSBzdHJpbmdcbiAgICogQGRlZmF1bHQgJ25hdmlnYXRpb24nXG4gICAqL1xuICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpXG4gIEBJbnB1dCgpIHJvbGUgPSAnbmF2aWdhdGlvbic7XG5cbiAgZ2V0IHBhZ2luYXRpb25DbGFzcygpOiBhbnkge1xuICAgIHJldHVybiB7XG4gICAgICBwYWdpbmF0aW9uOiB0cnVlLFxuICAgICAgW2BwYWdpbmF0aW9uLSR7dGhpcy5zaXplfWBdOiAhIXRoaXMuc2l6ZSxcbiAgICAgIFtganVzdGlmeS1jb250ZW50LSR7dGhpcy5hbGlnbn1gXTogISF0aGlzLmFsaWduXG4gICAgfTtcbiAgfVxuXG4gIGdldCBtYXhQcmV2SXRlbXMoKSB7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoKHRoaXMuX2xpbWl0IC0gMSkgLyAyKTtcbiAgfVxuXG4gIGdldCBtYXhOZXh0SXRlbXMoKSB7XG4gICAgcmV0dXJuIE1hdGguY2VpbCgodGhpcy5fbGltaXQgLSAxKSAvIDIpO1xuICB9XG5cbiAgZ2V0IHJhbmdlKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlUGFnZSArIHRoaXMubWF4TmV4dEl0ZW1zO1xuICB9XG5cbiAgZ2V0IGxhc3RJdGVtKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMucmFuZ2UgPj0gdGhpcy5fcGFnZXMgPyB0aGlzLl9wYWdlcyA6IHRoaXMucmFuZ2UgLSAodGhpcy5hZnRlckRvdHMgPyAxIDogMCk7XG4gIH1cblxuICBnZXQgY29tcHV0ZWRMaW1pdCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9saW1pdCAtICh0aGlzLmFmdGVyRG90cyA/IDEgOiAwKSAtICh0aGlzLmJlZm9yZURvdHMgPyAxIDogMCk7XG4gIH1cblxuICBnZXQgaXRlbXNMaW1pdCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9wYWdlcyA8IHRoaXMuY29tcHV0ZWRMaW1pdCA/IHRoaXMuX3BhZ2VzIDogdGhpcy5jb21wdXRlZExpbWl0O1xuICB9XG5cbiAgZ2V0IHNob3dEb3RzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRvdHMgJiYgdGhpcy5fbGltaXQgPiA0ICYmIHRoaXMuX2xpbWl0IDwgdGhpcy5fcGFnZXM7XG4gIH1cblxuICBnZXQgYmVmb3JlRG90cygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaG93RG90cyAmJiB0aGlzLmFjdGl2ZVBhZ2UgPiB0aGlzLm1heFByZXZJdGVtcyArIDE7XG4gIH1cblxuICBnZXQgYWZ0ZXJEb3RzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNob3dEb3RzICYmIHRoaXMuYWN0aXZlUGFnZSA8IHRoaXMuX3BhZ2VzIC0gdGhpcy5tYXhOZXh0SXRlbXM7XG4gIH1cblxuICBnZXQgaXRlbXMoKSB7XG4gICAgaWYgKHRoaXMuYWN0aXZlUGFnZSAtIHRoaXMubWF4UHJldkl0ZW1zIDw9IDEpIHtcbiAgICAgIHJldHVybiBBcnJheS5mcm9tKFxuICAgICAgICB7XG4gICAgICAgICAgbGVuZ3RoOiB0aGlzLml0ZW1zTGltaXRcbiAgICAgICAgfSxcbiAgICAgICAgKF9pdGVtLCBpKSA9PiBpICsgMVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIEFycmF5LmZyb20oXG4gICAgICAgIHtcbiAgICAgICAgICBsZW5ndGg6IHRoaXMuaXRlbXNMaW1pdFxuICAgICAgICB9LFxuICAgICAgICAoX2l0ZW0sIGkpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5sYXN0SXRlbSAtIGk7XG4gICAgICAgIH1cbiAgICAgICkucmV2ZXJzZSgpO1xuICAgIH1cbiAgfVxuXG4gIHNldFBhZ2UocGFnZTogbnVtYmVyKSB7XG4gICAgaWYgKHBhZ2UgIT09IHRoaXMuYWN0aXZlUGFnZSkge1xuICAgICAgdGhpcy5hY3RpdmVQYWdlID0gcGFnZTtcbiAgICAgIHRoaXMuYWN0aXZlUGFnZUNoYW5nZS5lbWl0KHBhZ2UpO1xuICAgIH1cbiAgfVxufVxuIiwiPHVsIFtuZ0NsYXNzXT1cInBhZ2luYXRpb25DbGFzc1wiPlxuICBAaWYgKGRvdWJsZUFycm93cykge1xuICAgIDxsaSBjUGFnZUl0ZW0+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIChjbGljayk9XCJzZXRQYWdlKDEpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImFjdGl2ZVBhZ2UgPT09IDFcIlxuICAgICAgICBhcmlhLWxhYmVsPVwiRmlyc3QgcGFnZVwiXG4gICAgICAgIGNQYWdlTGlua1xuICAgICAgPlxuICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj57eyBmaXJzdEJ1dHRvbiB9fTwvc3Bhbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbGk+XG4gIH1cbiAgQGlmIChhcnJvd3MpIHtcbiAgICA8bGkgY1BhZ2VJdGVtPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAoY2xpY2spPVwic2V0UGFnZShhY3RpdmVQYWdlIC0gMSlcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiYWN0aXZlUGFnZSA9PT0gMVwiXG4gICAgICAgIGFyaWEtbGFiZWw9XCJQcmV2aW91cyBwYWdlXCJcbiAgICAgICAgY1BhZ2VMaW5rXG4gICAgICA+XG4gICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPnt7IHByZXZpb3VzQnV0dG9uIH19PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9saT5cbiAgfVxuICBAaWYgKGJlZm9yZURvdHMpIHtcbiAgICA8bGkgY1BhZ2VJdGVtPlxuICAgICAgPGEgY1BhZ2VMaW5rIGRpc2FibGVkIHJvbGU9XCJzZXBhcmF0b3JcIj5cbiAgICAgICAgLi4uXG4gICAgICA8L2E+XG4gICAgPC9saT5cbiAgfVxuICBAZm9yIChpdGVtIG9mIGl0ZW1zOyB0cmFjayBpdGVtOyBsZXQgaSA9ICRpbmRleCkge1xuICAgIDxsaSBbYWN0aXZlXT1cImFjdGl2ZVBhZ2UgPT09IGl0ZW1cIiBjUGFnZUl0ZW0+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIChjbGljayk9XCJzZXRQYWdlKGl0ZW0pXCJcbiAgICAgICAgW3RpdGxlXT1cIihhY3RpdmVQYWdlID09PSBpdGVtID8gJ0N1cnJlbnQgcGFnZSAnIDogJ0dvIHRvIHBhZ2UgJykgKyAoaXRlbSkudG9TdHJpbmcoKVwiXG4gICAgICAgIGNQYWdlTGlua1xuICAgICAgPlxuICAgICAgICB7eyBpdGVtIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2xpPlxuICB9XG4gIEBpZiAoYWZ0ZXJEb3RzKSB7XG4gICAgPGxpIGNQYWdlSXRlbT5cbiAgICAgIDxhIGNQYWdlTGluayBkaXNhYmxlZCByb2xlPVwic2VwYXJhdG9yXCI+XG4gICAgICAgIC4uLlxuICAgICAgPC9hPlxuICAgIDwvbGk+XG4gIH1cbiAgQGlmIChhcnJvd3MpIHtcbiAgICA8bGkgY1BhZ2VJdGVtPlxuICAgICAgPGJ1dHRvblxuICAgICAgICAoY2xpY2spPVwic2V0UGFnZShhY3RpdmVQYWdlICsgMSlcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiYWN0aXZlUGFnZSA9PT0gcGFnZXNcIlxuICAgICAgICBhcmlhLWxhYmVsPVwiTmV4dCBwYWdlXCJcbiAgICAgICAgY1BhZ2VMaW5rXG4gICAgICA+XG4gICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPnt7IG5leHRCdXR0b24gfX08L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2xpPlxuICB9XG4gIEBpZiAoZG91YmxlQXJyb3dzKSB7XG4gICAgPGxpIGNQYWdlSXRlbT5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKGNsaWNrKT1cInNldFBhZ2UocGFnZXMpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImFjdGl2ZVBhZ2UgPT09IHBhZ2VzXCJcbiAgICAgICAgYXJpYS1sYWJlbD1cIkxhc3QgcGFnZVwiXG4gICAgICAgIGNQYWdlTGlua1xuICAgICAgPlxuICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj57eyBsYXN0QnV0dG9uIH19PC9zcGFuPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9saT5cbiAgfVxuPC91bD5cbiJdfQ==