@annalib/anna-core 20.2.19 → 20.2.21

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 (160) hide show
  1. package/README.md +28 -28
  2. package/{esm2020 → esm2022}/annalib-anna-core.mjs +4 -4
  3. package/esm2022/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.mjs +14 -0
  4. package/esm2022/lib/anna-core-shared-lib/components/anna-deleted-order-icon-template/anna-deleted-order-icon-template.component.mjs +13 -0
  5. package/esm2022/lib/anna-core-shared-lib/components/anna-est-icon-template/anna-est-icon-template.component.mjs +11 -0
  6. package/esm2022/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.mjs +43 -0
  7. package/esm2022/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.mjs +14 -0
  8. package/esm2022/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.mjs +22 -0
  9. package/esm2022/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.mjs +13 -0
  10. package/esm2022/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.mjs +22 -0
  11. package/esm2022/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.mjs +14 -0
  12. package/esm2022/lib/anna-core-shared-lib/constants/shared.constant.mjs +44 -0
  13. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/directives/digits-only/digits-only.directive.mjs +273 -273
  14. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/directives/fixed-rows-popup-table/fixed-rows-popup-table.directive.mjs +46 -46
  15. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/directives/show-ellipsis-text/show-ellipsis-text.directive.mjs +39 -39
  16. package/esm2022/lib/anna-core-shared-lib/models/anna-generic-data-type.model.mjs +2 -0
  17. package/esm2022/lib/anna-core-shared-lib/models/anna-global-dropdown-config.model.mjs +2 -0
  18. package/esm2022/lib/anna-core-shared-lib/models/anna-non-editable-gt-models.mjs +11 -0
  19. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/models/anna-sort.model.mjs +7 -7
  20. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/models/anna-tooltip.model.mjs +30 -30
  21. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/pipes/annaConvertArrayToCommaSeperatedValue.pipe.mjs +39 -39
  22. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/pipes/annaConvertZeroOrNullOrUndefined.pipe.mjs +27 -27
  23. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/pipes/annaDateFormatter.pipe.mjs +22 -22
  24. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/pipes/annaFilterSearchedText.pipe.mjs +55 -55
  25. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/pipes/annaReplaceChar.pipe.mjs +26 -26
  26. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/pipes/annaTypeOfData.pipe.mjs +17 -17
  27. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/services/anna-date-time-format.service.mjs +208 -208
  28. package/esm2022/lib/anna-core-shared-lib/services/anna-filter.service.mjs +1259 -0
  29. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/services/anna-generic-table.service.mjs +151 -151
  30. package/esm2022/lib/anna-core-shared-lib/services/anna-global-config.service.mjs +135 -0
  31. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/services/anna-number-format.service.mjs +53 -53
  32. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/services/anna-persisting-filter.service.mjs +65 -65
  33. package/{esm2020 → esm2022}/lib/anna-core-shared-lib/services/anna-sort.service.mjs +178 -178
  34. package/esm2022/lib/anna-core.module.mjs +226 -0
  35. package/esm2022/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.mjs +160 -0
  36. package/esm2022/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.mjs +371 -0
  37. package/esm2022/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-checkbox-filter/anna-column-checkbox-filter.component.mjs +252 -0
  38. package/esm2022/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-date-range-filter/anna-column-date-range-filter.component.mjs +185 -0
  39. package/esm2022/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-slider-filter/anna-column-slider-filter.component.mjs +312 -0
  40. package/esm2022/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-time-filter/anna-column-time-filter.component.mjs +298 -0
  41. package/esm2022/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.mjs +845 -0
  42. package/esm2022/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.mjs +64 -0
  43. package/esm2022/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.mjs +352 -0
  44. package/esm2022/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/anna-fixed-row-size-table-virtual-scroll-strategy.directive.mjs +204 -0
  45. package/{esm2020 → esm2022}/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/index.mjs +2 -2
  46. package/esm2022/lib/anna-generic-table-lib/directives/anna-virtual-table/anna-virtual-table.directive.mjs +180 -0
  47. package/{esm2020 → esm2022}/lib/anna-generic-table-lib/directives/anna-virtual-table/index.mjs +2 -2
  48. package/{esm2020 → esm2022}/public-api.mjs +58 -58
  49. package/fesm2022/annalib-anna-core.mjs +6063 -0
  50. package/fesm2022/annalib-anna-core.mjs.map +1 -0
  51. package/index.d.ts +5 -5
  52. package/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.d.ts +8 -8
  53. package/lib/anna-core-shared-lib/components/anna-deleted-order-icon-template/anna-deleted-order-icon-template.component.d.ts +8 -8
  54. package/lib/anna-core-shared-lib/components/anna-est-icon-template/anna-est-icon-template.component.d.ts +5 -5
  55. package/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.d.ts +17 -17
  56. package/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.d.ts +8 -8
  57. package/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.d.ts +11 -11
  58. package/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.d.ts +8 -8
  59. package/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.d.ts +12 -12
  60. package/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.d.ts +8 -8
  61. package/lib/anna-core-shared-lib/constants/shared.constant.d.ts +42 -41
  62. package/lib/anna-core-shared-lib/directives/digits-only/digits-only.directive.d.ts +34 -34
  63. package/lib/anna-core-shared-lib/directives/fixed-rows-popup-table/fixed-rows-popup-table.directive.d.ts +16 -16
  64. package/lib/anna-core-shared-lib/directives/show-ellipsis-text/show-ellipsis-text.directive.d.ts +10 -10
  65. package/lib/anna-core-shared-lib/models/anna-generic-data-type.model.d.ts +16 -16
  66. package/lib/anna-core-shared-lib/models/anna-global-dropdown-config.model.d.ts +97 -97
  67. package/lib/anna-core-shared-lib/models/anna-non-editable-gt-models.d.ts +118 -118
  68. package/lib/anna-core-shared-lib/models/anna-sort.model.d.ts +11 -11
  69. package/lib/anna-core-shared-lib/models/anna-tooltip.model.d.ts +25 -25
  70. package/lib/anna-core-shared-lib/pipes/annaConvertArrayToCommaSeperatedValue.pipe.d.ts +9 -9
  71. package/lib/anna-core-shared-lib/pipes/annaConvertZeroOrNullOrUndefined.pipe.d.ts +9 -9
  72. package/lib/anna-core-shared-lib/pipes/annaDateFormatter.pipe.d.ts +8 -8
  73. package/lib/anna-core-shared-lib/pipes/annaFilterSearchedText.pipe.d.ts +9 -9
  74. package/lib/anna-core-shared-lib/pipes/annaReplaceChar.pipe.d.ts +9 -9
  75. package/lib/anna-core-shared-lib/pipes/annaTypeOfData.pipe.d.ts +7 -7
  76. package/lib/anna-core-shared-lib/services/anna-date-time-format.service.d.ts +28 -28
  77. package/lib/anna-core-shared-lib/services/anna-filter.service.d.ts +154 -154
  78. package/lib/anna-core-shared-lib/services/anna-generic-table.service.d.ts +27 -27
  79. package/lib/anna-core-shared-lib/services/anna-global-config.service.d.ts +21 -21
  80. package/lib/anna-core-shared-lib/services/anna-number-format.service.d.ts +8 -8
  81. package/lib/anna-core-shared-lib/services/anna-persisting-filter.service.d.ts +9 -9
  82. package/lib/anna-core-shared-lib/services/anna-sort.service.d.ts +18 -18
  83. package/lib/anna-core.module.d.ts +45 -45
  84. package/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.d.ts +45 -45
  85. package/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.d.ts +70 -70
  86. package/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-checkbox-filter/anna-column-checkbox-filter.component.d.ts +60 -60
  87. package/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-date-range-filter/anna-column-date-range-filter.component.d.ts +53 -53
  88. package/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-slider-filter/anna-column-slider-filter.component.d.ts +65 -65
  89. package/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-time-filter/anna-column-time-filter.component.d.ts +83 -83
  90. package/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.d.ts +174 -174
  91. package/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.d.ts +17 -17
  92. package/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.d.ts +141 -141
  93. package/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/anna-fixed-row-size-table-virtual-scroll-strategy.directive.d.ts +89 -89
  94. package/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/index.d.ts +1 -1
  95. package/lib/anna-generic-table-lib/directives/anna-virtual-table/anna-virtual-table.directive.d.ts +45 -45
  96. package/lib/anna-generic-table-lib/directives/anna-virtual-table/index.d.ts +1 -1
  97. package/package.json +5 -11
  98. package/public-api.d.ts +42 -42
  99. package/src/lib/anna-common-scss/_animate.scss +27 -27
  100. package/src/lib/anna-common-scss/_application-spacing.scss +7 -7
  101. package/src/lib/anna-common-scss/_bootstrap-tooltip.scss +27 -27
  102. package/src/lib/anna-common-scss/_button.scss +18 -18
  103. package/src/lib/anna-common-scss/_colors.scss +107 -107
  104. package/src/lib/anna-common-scss/_common-order-listing-table.scss +172 -172
  105. package/src/lib/anna-common-scss/_custom-anna-datepicker.scss +14 -14
  106. package/src/lib/anna-common-scss/_customDropdown.scss +123 -123
  107. package/src/lib/anna-common-scss/_dashboard-partials.scss +106 -106
  108. package/src/lib/anna-common-scss/_date-picker-form.scss +87 -87
  109. package/src/lib/anna-common-scss/_easy-filter.scss +138 -138
  110. package/src/lib/anna-common-scss/_edit-filter-popup.scss +70 -70
  111. package/src/lib/anna-common-scss/_filters.scss +712 -712
  112. package/src/lib/anna-common-scss/_font.scss +9 -9
  113. package/src/lib/anna-common-scss/_fonts.scss +86 -86
  114. package/src/lib/anna-common-scss/_generic-modal.scss +63 -63
  115. package/src/lib/anna-common-scss/_generic-table-common.scss +198 -198
  116. package/src/lib/anna-common-scss/_gt-table.scss +425 -425
  117. package/src/lib/anna-common-scss/_legend.scss +11 -11
  118. package/src/lib/anna-common-scss/_mat-button-toggle.scss +38 -38
  119. package/src/lib/anna-common-scss/_mat-menu.scss +17 -17
  120. package/src/lib/anna-common-scss/_mixins.scss +187 -187
  121. package/src/lib/anna-common-scss/_modal.scss +37 -37
  122. package/src/lib/anna-common-scss/_popup-filter-toggle-button.scss +36 -36
  123. package/src/lib/anna-common-scss/_scrollbar.scss +14 -14
  124. package/src/lib/anna-common-scss/_sort.scss +30 -30
  125. package/src/lib/anna-common-scss/_toggle.scss +86 -86
  126. package/src/lib/anna-common-scss/style.scss +1 -1
  127. package/src/lib/anna-common-scss/third-party-lib/_angular-material-mat-radio.scss +25 -25
  128. package/src/lib/anna-common-scss/third-party-lib/_anna-mat-button-toggle-group-size-lg.scss +34 -34
  129. package/src/lib/anna-common-scss/third-party-lib/_mat-autocomplete.scss +31 -31
  130. package/esm2020/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.mjs +0 -14
  131. package/esm2020/lib/anna-core-shared-lib/components/anna-deleted-order-icon-template/anna-deleted-order-icon-template.component.mjs +0 -13
  132. package/esm2020/lib/anna-core-shared-lib/components/anna-est-icon-template/anna-est-icon-template.component.mjs +0 -11
  133. package/esm2020/lib/anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component.mjs +0 -43
  134. package/esm2020/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.mjs +0 -14
  135. package/esm2020/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.mjs +0 -22
  136. package/esm2020/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.mjs +0 -13
  137. package/esm2020/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.mjs +0 -22
  138. package/esm2020/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.mjs +0 -14
  139. package/esm2020/lib/anna-core-shared-lib/constants/shared.constant.mjs +0 -43
  140. package/esm2020/lib/anna-core-shared-lib/models/anna-generic-data-type.model.mjs +0 -2
  141. package/esm2020/lib/anna-core-shared-lib/models/anna-global-dropdown-config.model.mjs +0 -2
  142. package/esm2020/lib/anna-core-shared-lib/models/anna-non-editable-gt-models.mjs +0 -11
  143. package/esm2020/lib/anna-core-shared-lib/services/anna-filter.service.mjs +0 -1259
  144. package/esm2020/lib/anna-core-shared-lib/services/anna-global-config.service.mjs +0 -135
  145. package/esm2020/lib/anna-core.module.mjs +0 -237
  146. package/esm2020/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.mjs +0 -160
  147. package/esm2020/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.mjs +0 -371
  148. package/esm2020/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-checkbox-filter/anna-column-checkbox-filter.component.mjs +0 -252
  149. package/esm2020/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-date-range-filter/anna-column-date-range-filter.component.mjs +0 -185
  150. package/esm2020/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-slider-filter/anna-column-slider-filter.component.mjs +0 -312
  151. package/esm2020/lib/anna-generic-table-lib/components/anna-column-filters/anna-column-time-filter/anna-column-time-filter.component.mjs +0 -298
  152. package/esm2020/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.mjs +0 -840
  153. package/esm2020/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.mjs +0 -64
  154. package/esm2020/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.mjs +0 -352
  155. package/esm2020/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/anna-fixed-row-size-table-virtual-scroll-strategy.directive.mjs +0 -204
  156. package/esm2020/lib/anna-generic-table-lib/directives/anna-virtual-table/anna-virtual-table.directive.mjs +0 -180
  157. package/fesm2015/annalib-anna-core.mjs +0 -6076
  158. package/fesm2015/annalib-anna-core.mjs.map +0 -1
  159. package/fesm2020/annalib-anna-core.mjs +0 -6068
  160. package/fesm2020/annalib-anna-core.mjs.map +0 -1
@@ -0,0 +1,845 @@
1
+ // Angular import statements
2
+ import { Component, Input, ViewChildren, QueryList, Output, EventEmitter, ChangeDetectorRef, ChangeDetectionStrategy, } from '@angular/core';
3
+ // Third party import statements
4
+ import { cloneDeep, isEqual, uniq } from 'lodash-es';
5
+ import { AnnaDateTimeFormatService } from '../../../anna-core-shared-lib/services/anna-date-time-format.service';
6
+ import { radioButtonModel } from '../../../anna-core-shared-lib/models/anna-tooltip.model';
7
+ import { AnnaSortService } from '../../../anna-core-shared-lib/services/anna-sort.service';
8
+ import { AnnaFilterService } from '../../../anna-core-shared-lib/services/anna-filter.service';
9
+ import { BehaviorSubject } from 'rxjs';
10
+ import { NgCircleProgressModule } from 'ng-circle-progress';
11
+ import { AnnaColumnTimeFilterComponent } from '../anna-column-filters/anna-column-time-filter/anna-column-time-filter.component';
12
+ import { AnnaColumnDateRangeFilterComponent } from '../anna-column-filters/anna-column-date-range-filter/anna-column-date-range-filter.component';
13
+ import { AnnaColumnSliderFilterComponent } from '../anna-column-filters/anna-column-slider-filter/anna-column-slider-filter.component';
14
+ import { AnnaColumnCheckboxFilterComponent } from '../anna-column-filters/anna-column-checkbox-filter/anna-column-checkbox-filter.component';
15
+ import { AnnaNoDataComponent } from '../../../anna-core-shared-lib/components/anna-no-data/anna-no-data.component';
16
+ import { MatRadioModule } from '@angular/material/radio';
17
+ import { FormsModule } from '@angular/forms';
18
+ import { AnnaIconColumnComponent } from '../../../anna-core-shared-lib/components/anna-icon-column/anna-icon-column.component';
19
+ import { showEllipsisTextOnHoverDirective } from '../../../anna-core-shared-lib/directives/show-ellipsis-text/show-ellipsis-text.directive';
20
+ import { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';
21
+ import { NgbTooltip } from '@ng-bootstrap/ng-bootstrap';
22
+ import { MatTableModule } from '@angular/material/table';
23
+ import { NgClass, NgStyle, NgFor, NgIf, NgTemplateOutlet, NgSwitch, NgSwitchCase, NgSwitchDefault, AsyncPipe, } from '@angular/common';
24
+ import * as i0 from "@angular/core";
25
+ import * as i1 from "../../../anna-core-shared-lib/services/anna-sort.service";
26
+ import * as i2 from "../../../anna-core-shared-lib/services/anna-date-time-format.service";
27
+ import * as i3 from "../../../anna-core-shared-lib/services/anna-filter.service";
28
+ import * as i4 from "@angular/material/table";
29
+ import * as i5 from "ngx-skeleton-loader";
30
+ import * as i6 from "@angular/forms";
31
+ import * as i7 from "@angular/material/radio";
32
+ import * as i8 from "ng-circle-progress";
33
+ export class AnnaNonEditableGenericTableComponent {
34
+ constructor(cdRef, annaSortService, annaDateTimeFormatService, annaFilterService) {
35
+ this.cdRef = cdRef;
36
+ this.annaSortService = annaSortService;
37
+ this.annaDateTimeFormatService = annaDateTimeFormatService;
38
+ this.annaFilterService = annaFilterService;
39
+ this.maximumRowsWhichCanBeRenderedWithoutScroll = 5;
40
+ this.fixNumberOfRowsForPopup = false;
41
+ this.limit = 30;
42
+ this.includeBorderInTableHeight = true;
43
+ this.clickableRow = false;
44
+ this.setTableHeightWhenRowSizeIsFixed = true;
45
+ this.tableBorderBottomClassRequired = true;
46
+ this.hideSomeTds = false;
47
+ this.tdsHaveRowSpan = false;
48
+ this.multipleTablesPresent = false;
49
+ this.toggleCheckbox = new EventEmitter();
50
+ this.toggleRowCheckbox = new EventEmitter();
51
+ this.toggleHeaderCheckbox = new EventEmitter();
52
+ this.undoIconClicked = new EventEmitter();
53
+ this.filterAppliedToTable = new EventEmitter();
54
+ this.sortingAppliedToTable = new EventEmitter();
55
+ this.rowClicked = new EventEmitter();
56
+ this.radioButtonSelected = new EventEmitter();
57
+ this.columnFilterOpened = new EventEmitter();
58
+ this.columnFilterClosed = new EventEmitter();
59
+ this.gtIconClicked = new EventEmitter();
60
+ this.gtSVGIconClicked = new EventEmitter();
61
+ this.gtTextActionClicked = new EventEmitter();
62
+ this.gtViewDetailClicked = new EventEmitter();
63
+ this.gtInnerHTMLClicked = new EventEmitter();
64
+ this.downloadSpotDetails = new EventEmitter();
65
+ this.clickableDataClicked = new EventEmitter();
66
+ this.totalRowIconClicked = new EventEmitter();
67
+ this.notificationIconHover = new EventEmitter();
68
+ this.notificationIconHoverLeave = new EventEmitter();
69
+ this.editableInputEdited = new EventEmitter();
70
+ this.radioButtonMessageIconClicked = new EventEmitter();
71
+ this.numberOfSkeletonRows = Array(20).fill(0);
72
+ this.noDataWidth = '50%';
73
+ this.filterAlignment = 'bottom auto';
74
+ this.disableColumnClearAllBtn = true;
75
+ this.margin = 5;
76
+ this.tableColumns = [];
77
+ this.totalRowColumns = null;
78
+ this.isScrolledLeft = false;
79
+ this.rowBorderWidth = 2;
80
+ this.marginTop = '';
81
+ this.start = 0;
82
+ this.end = this.limit + this.start;
83
+ this.isNoDataToDisplaySubject$ = new BehaviorSubject(false);
84
+ this.textActionTooltip = [];
85
+ this.tooltipContainingTable = null;
86
+ this.tableBottomBorderClass = null;
87
+ this.showCheckboxesForTimeFilter = false;
88
+ this.setTooltipRadioNames();
89
+ }
90
+ ngAfterViewChecked() {
91
+ this.setMarginLeftForFilterIcon();
92
+ }
93
+ ngOnInit() {
94
+ this.setFilterAlignmentBasedOnScreenResolution();
95
+ }
96
+ detectChanges() {
97
+ this.cdRef.detectChanges();
98
+ }
99
+ ngOnChanges(changes) {
100
+ if (changes &&
101
+ changes['gtDimension'] &&
102
+ changes['gtDimension'].currentValue &&
103
+ this.setTableHeightWhenRowSizeIsFixed) {
104
+ this.setTableHeight();
105
+ this.setTableBottomBorder();
106
+ }
107
+ if (this.showSkeletonLoading) {
108
+ this.tableData = this.numberOfSkeletonRows;
109
+ this.renderedData = this.numberOfSkeletonRows;
110
+ this.isNoDataToDisplaySubject$.next(false);
111
+ this.setTableBottomBorder();
112
+ }
113
+ else if (changes['percentDone'] ||
114
+ changes['downloadInProgress'] ||
115
+ (changes['starredInProgress'] && changes['starredInProgress'].currentValue != undefined)) {
116
+ //no task will be performed
117
+ }
118
+ else {
119
+ this.setInitialRowsForTable();
120
+ this.disableEnableEachColumnTooltipIcon();
121
+ this.tableColumns = this.tableHeaders.filter((x) => x.visible).map((x) => x.headerInfo[0].objectKey);
122
+ if ((this.tableData && this.tableData.length == 0) ||
123
+ (this.tableData.length == 2 && this.checkIfAllTheElementsAreZero())) {
124
+ this.tableData = Array(2).fill(0);
125
+ this.renderedData = cloneDeep(this.tableData);
126
+ this.marginTop = -this.gtDimension.rowHeight - this.gtDimension.rowHeight / 2 + 'px';
127
+ this.isNoDataToDisplaySubject$.next(true);
128
+ }
129
+ else {
130
+ this.isNoDataToDisplaySubject$.next(false);
131
+ }
132
+ this.showSkeletonLoading = false;
133
+ this.setTableBottomBorder();
134
+ }
135
+ //setting table column here as well because while showing skeleton loader, we should show table headers.
136
+ if (changes['tableHeaders'] &&
137
+ !isEqual(changes['tableHeaders'].currentValue, changes['tableHeaders'].previousValue)) {
138
+ this.tableColumns = this.tableHeaders.filter((x) => x.visible).map((x) => x.headerInfo[0].objectKey);
139
+ this.annaSortService.columnSortState = new Map();
140
+ this.annaFilterService.initialValueMap = new Map();
141
+ // this.setColumnSortStateMap();
142
+ this.setActiveStateObject();
143
+ }
144
+ if (changes['totalRowInfo'] && changes['totalRowInfo'].currentValue) {
145
+ this.totalRowColumns = this.totalRowInfo.map((x) => x.colName);
146
+ }
147
+ this.cdRef.detectChanges();
148
+ }
149
+ setFilterAlignmentBasedOnScreenResolution() {
150
+ let viewportHeight = window.innerHeight;
151
+ if (viewportHeight < 740) {
152
+ this.filterAlignment = 'left right';
153
+ }
154
+ else {
155
+ this.filterAlignment = 'bottom left right';
156
+ }
157
+ }
158
+ setTableBottomBorder() {
159
+ if (this.tableBorderBottomClassRequired &&
160
+ this.tableData &&
161
+ this.tableData.length &&
162
+ this.maximumRowsWhichCanBeRenderedWithoutScroll < this.tableData.length) {
163
+ this.tableBottomBorderClass = 'bottom-border';
164
+ }
165
+ else {
166
+ this.tableBottomBorderClass = null;
167
+ }
168
+ }
169
+ checkIfAllTheElementsAreZero() {
170
+ return !this.tableData.some((item) => item != 0);
171
+ }
172
+ setTableHeight() {
173
+ let viewportHeight = window.innerHeight;
174
+ let rowHeight = this.gtDimension.rowHeight;
175
+ let headerHeight = this.gtDimension.headerHeight;
176
+ let dataOnTopHeight = this.gtDimension.dataOnTopHeight;
177
+ let marginFromBottom = this.gtDimension.marginFromBottom;
178
+ let actualTableHeight;
179
+ if (this.fixNumberOfRowsForPopup) {
180
+ let maxNoOfRowsToDisplay = viewportHeight < 740 ? 5 : 10;
181
+ this.maximumRowsWhichCanBeRenderedWithoutScroll = maxNoOfRowsToDisplay;
182
+ actualTableHeight = this.maximumRowsWhichCanBeRenderedWithoutScroll * rowHeight + headerHeight;
183
+ }
184
+ else {
185
+ let minHeightForTable = headerHeight + 3 * rowHeight;
186
+ viewportHeight = viewportHeight <= dataOnTopHeight ? dataOnTopHeight + minHeightForTable : viewportHeight;
187
+ let heightLeftForTable = viewportHeight - dataOnTopHeight - marginFromBottom;
188
+ this.maximumRowsWhichCanBeRenderedWithoutScroll =
189
+ Math.ceil((heightLeftForTable - headerHeight - rowHeight) / rowHeight) + 1;
190
+ actualTableHeight = viewportHeight - dataOnTopHeight - marginFromBottom;
191
+ }
192
+ // let actualTableHeight = heightLeftForTable - ((heightLeftForTable - headerHeight - rowHeight) % rowHeight);
193
+ this.gtDimension.tableHeight = `${actualTableHeight}px`;
194
+ this.numberOfSkeletonRows = this.maximumRowsWhichCanBeRenderedWithoutScroll
195
+ ? Array(this.maximumRowsWhichCanBeRenderedWithoutScroll).fill(0)
196
+ : Array(5).fill(0);
197
+ }
198
+ trackByFn(index) {
199
+ return index;
200
+ }
201
+ setTooltipRadioNames() {
202
+ this.tooltipRadioTextMap = new Map();
203
+ this.tooltipRadioTextMap.set('StartTimeForFilter', 'Start Time');
204
+ this.tooltipRadioTextMap.set('EndTimeForFilter', 'End Time');
205
+ this.tooltipRadioTextMap.set('startTimeForFilter', 'Start Time');
206
+ this.tooltipRadioTextMap.set('endTimeForFilter', 'End Time');
207
+ this.tooltipRadioTextMap.set('start_time_for_filter', 'Start Time');
208
+ this.tooltipRadioTextMap.set('end_time_for_filter', 'End Time');
209
+ this.tooltipRadioTextMap.set('primaryAEName', 'Primary AE');
210
+ this.tooltipRadioTextMap.set('region', 'Region');
211
+ this.tooltipRadioTextMap.set('agencyName', 'Agency');
212
+ this.tooltipRadioTextMap.set('location', 'Location');
213
+ this.tooltipRadioTextMap.set('advertiserName', 'Advertiser');
214
+ this.tooltipRadioTextMap.set('productCode', 'Product Code');
215
+ this.tooltipRadioTextMap.set('flightStartDate', 'Start Date');
216
+ this.tooltipRadioTextMap.set('flightEndDate', 'End Date');
217
+ this.tooltipRadioTextMap.set('orderIdAndRevNumber', 'STN Order#-Rev#');
218
+ this.tooltipRadioTextMap.set('alternateOrderId', 'Alt/Rep Order #');
219
+ this.tooltipRadioTextMap.set('grp', 'GRP');
220
+ this.tooltipRadioTextMap.set('cpp', 'CPP');
221
+ this.tooltipRadioTextMap.set('imps', 'IMPS');
222
+ this.tooltipRadioTextMap.set('cpm', 'CPM');
223
+ this.tooltipRadioTextMap.set('offeredMGs', 'Offered MG');
224
+ this.tooltipRadioTextMap.set('outstandingPE', 'O/S PE');
225
+ this.tooltipRadioTextMap.set('offeredADUs', 'Offered ADUs');
226
+ this.tooltipRadioTextMap.set('udDeficitValue', 'O/S Aud Delta');
227
+ this.tooltipRadioTextMap.set('startEndTimeMulti', 'Time');
228
+ this.tooltipRadioTextMap.set('bookedValue', 'Booked');
229
+ this.tooltipRadioTextMap.set('bookedSpots', 'Spots');
230
+ this.tooltipRadioTextMap.set('UserCreditedValue', 'User Credited');
231
+ this.tooltipRadioTextMap.set('UserUnresolvedValue', 'User Unresolved');
232
+ this.tooltipRadioTextMap.set('BuyerAddedValue', 'Buyer Added');
233
+ this.tooltipRadioTextMap.set('BuyerDeletedValue', 'Buyer Deleted');
234
+ this.tooltipRadioTextMap.set('userChanges', 'User Changes');
235
+ this.tooltipRadioTextMap.set('buyerChanges', 'Buyer Changes');
236
+ this.tooltipRadioTextMap.set('userMG', 'User MG');
237
+ this.tooltipRadioTextMap.set('userADUs', 'User ADUs');
238
+ this.tooltipRadioTextMap.set('inventoryCode', 'Inventory Code');
239
+ this.tooltipRadioTextMap.set('program', 'Program');
240
+ this.tooltipRadioTextMap.set('agency', 'Agency');
241
+ this.tooltipRadioTextMap.set('advertiser', 'Advertiser');
242
+ this.tooltipRadioTextMap.set('startDate', 'Start Date');
243
+ this.tooltipRadioTextMap.set('endDate', 'End Date');
244
+ this.tooltipRadioTextMap.set('date', 'Date');
245
+ this.tooltipRadioTextMap.set('rcvPreempt', '$ Madegood PEs');
246
+ this.tooltipRadioTextMap.set('osPreempt', '$ O/S PEs');
247
+ this.tooltipRadioTextMap.set('rcvUnderDly', 'Recovered UD');
248
+ this.tooltipRadioTextMap.set('osUnderDly', 'O/s Under Dly');
249
+ this.tooltipRadioTextMap.set('primaryAe', 'Primary AE');
250
+ this.tooltipRadioTextMap.set('region', 'Region');
251
+ this.tooltipRadioTextMap.set('revCode1', 'Rev code 1');
252
+ this.tooltipRadioTextMap.set('orderNoRevNo', 'STN Order#-Rev#');
253
+ this.tooltipRadioTextMap.set('revCode2', 'Rev code 2');
254
+ this.tooltipRadioTextMap.set('revCode3', 'Rev code 3');
255
+ this.tooltipRadioTextMap.set('booked', '$ Booked');
256
+ this.tooltipRadioTextMap.set('spots', 'Spots');
257
+ this.tooltipRadioTextMap.set('postedAudPercent', 'Posted %');
258
+ this.tooltipRadioTextMap.set('revision', 'Revision');
259
+ this.tooltipRadioTextMap.set('buyerOrderId', 'ALT/REP Order#');
260
+ this.tooltipRadioTextMap.set('demo', 'Demo');
261
+ this.tooltipRadioTextMap.set('postedAdu', '$ Posted ADUs');
262
+ this.tooltipRadioTextMap.set('scheduledAdu', '$ Scheduled ADUs');
263
+ this.tooltipRadioTextMap.set('audienceDeficit', '$ O/S Audience');
264
+ this.tooltipRadioTextMap.set('postedAudPercent', 'Posted Audience %');
265
+ this.tooltipRadioTextMap.set('potentialUnitsValue', 'POT Units');
266
+ this.tooltipRadioTextMap.set('bookedUnitsValue', 'Booked Eq Units');
267
+ this.tooltipRadioTextMap.set('bookedAmountWithZeroRatingValue', 'Total $ Booked');
268
+ this.tooltipRadioTextMap.set('bookedAmountPercentageWithZeroRatingValue', '% Against All Demos');
269
+ this.tooltipRadioTextMap.set('bookedAmountWithoutZeroRatingValue', '$Booked With Imps(’000)');
270
+ this.tooltipRadioTextMap.set('bookedAmountPercentageWithoutZeroRatingValue', '% Against All Demos');
271
+ this.tooltipRadioTextMap.set('totalBookedAmountValue', 'Total $Booked');
272
+ this.tooltipRadioTextMap.set('averageUnitRateValue', ' AUR');
273
+ this.tooltipRadioTextMap.set('totalBookedAmountWithRatingValue', '$Booked With Rating');
274
+ this.tooltipRadioTextMap.set('averageUnitRateWithRatingValue', 'AUR With Rating');
275
+ this.tooltipRadioTextMap.set('totalBookedAmountWithImpressionValue', '$Booked With IMPS');
276
+ this.tooltipRadioTextMap.set('averageUnitRateWithImpressionValue', 'AUR With IMPS');
277
+ this.tooltipRadioTextMap.set('bookedUnitsWithRatingValue', 'Booked Units With Rating');
278
+ this.tooltipRadioTextMap.set('postedUnitsWithRatingValue', 'Posted Units With Rating');
279
+ this.tooltipRadioTextMap.set('bookedUnitsWithImpressionValue', 'Booked Units With IMPS');
280
+ this.tooltipRadioTextMap.set('postedUnitsWithImpressionValue', 'Posted Units With IMPS');
281
+ this.tooltipRadioTextMap.set('bookedRatings', 'Booked Rating');
282
+ this.tooltipRadioTextMap.set('postedRatings', 'POSTED Rating');
283
+ this.tooltipRadioTextMap.set('PostedRating', 'Posted RTG');
284
+ this.tooltipRadioTextMap.set('bookedImpressions', "Booked IMP('000)");
285
+ this.tooltipRadioTextMap.set('postedImpressions', "Posted IMP('000)");
286
+ this.tooltipRadioTextMap.set('PostedImpressions', "Posted IMP('000)");
287
+ this.tooltipRadioTextMap.set('bookedAverageRating', 'Booked AU Rating');
288
+ this.tooltipRadioTextMap.set('postedAverageRating', 'Posted AU Rating');
289
+ this.tooltipRadioTextMap.set('bookedAverageImpression', 'Booked AU IMPS');
290
+ this.tooltipRadioTextMap.set('postedAverageImpression', 'Posted AU IMPS');
291
+ this.tooltipRadioTextMap.set('bookedCppValue', 'Booked CPP');
292
+ this.tooltipRadioTextMap.set('bookedEffectiveCppValue', 'Effective CPP');
293
+ this.tooltipRadioTextMap.set('bookedCpmValue', 'Booked CPM');
294
+ this.tooltipRadioTextMap.set('bookedEffectiveCpmValue', 'Effective CPM');
295
+ this.tooltipRadioTextMap.set('orderSource', 'Order Route');
296
+ this.tooltipRadioTextMap.set('orderCategory', 'Rev Category');
297
+ this.tooltipRadioTextMap.set('cashOrTrade', 'C/T');
298
+ this.tooltipRadioTextMap.set('revisionStartDate', 'Revision Start Date');
299
+ this.tooltipRadioTextMap.set('name', 'name');
300
+ this.tooltipRadioTextMap.set('role', 'role');
301
+ this.tooltipRadioTextMap.set('stationCount', 'stationCount');
302
+ this.tooltipRadioTextMap.set('stationList', 'stationList');
303
+ this.tooltipRadioTextMap.set('approvedOn', 'Approved On');
304
+ this.tooltipRadioTextMap.set('approvedBy', 'Approved By');
305
+ this.tooltipRadioTextMap.set('ODImps', 'Proj. OD IMPS');
306
+ this.tooltipRadioTextMap.set('UDImps', 'Proj. UD IMPS');
307
+ this.tooltipRadioTextMap.set('ODGrp', 'Proj. OD GRP');
308
+ this.tooltipRadioTextMap.set('UDGrp', 'Proj. UD GRP');
309
+ this.tooltipRadioTextMap.set('udImpsPercent', 'Proj. UD %');
310
+ this.tooltipRadioTextMap.set('udGrpPercent', 'Proj. UD GRP %');
311
+ this.tooltipRadioTextMap.set('odImpsPercent', 'Proj. OD %');
312
+ this.tooltipRadioTextMap.set('odGrpPercent', 'Proj. OD GRP %');
313
+ this.tooltipRadioTextMap.set('RevisionNumber', 'Revision #');
314
+ this.tooltipRadioTextMap.set('RevisionType', 'Revision Type');
315
+ this.tooltipRadioTextMap.set('GeneratedOn', 'Generated On');
316
+ this.tooltipRadioTextMap.set('BookedValueForDisplay', '$ BOOKED');
317
+ this.tooltipRadioTextMap.set('BookedValue', '$ Booked');
318
+ this.tooltipRadioTextMap.set('BookedSpots', 'Spots');
319
+ this.tooltipRadioTextMap.set('BookedGRP', 'GRP');
320
+ this.tooltipRadioTextMap.set('BookedIMPSRevTab', "IMPS'(000)");
321
+ this.tooltipRadioTextMap.set('BookedCPP', 'CPP');
322
+ this.tooltipRadioTextMap.set('BookedCPM', 'CPM');
323
+ this.tooltipRadioTextMap.set('MGsValueForDisplay', '$ MGS');
324
+ this.tooltipRadioTextMap.set('MGsValue', '$ MGS');
325
+ this.tooltipRadioTextMap.set('ADUsValueForDisplay', '$ ADUS');
326
+ this.tooltipRadioTextMap.set('ADUsValue', '$ ADUS');
327
+ this.tooltipRadioTextMap.set('BuyerChangesValueForDisplay', '$ Buyer Change');
328
+ this.tooltipRadioTextMap.set('BuyerChangesValue', '$ Buyer Change');
329
+ this.tooltipRadioTextMap.set('UserChangesValueForDisplay', '$ Seller User Change');
330
+ this.tooltipRadioTextMap.set('UserChangesValue', '$ Seller User Change');
331
+ this.tooltipRadioTextMap.set('SellerLine', 'Seller Line #');
332
+ this.tooltipRadioTextMap.set('BuyerLine', 'Buy Line #');
333
+ this.tooltipRadioTextMap.set('SpotStatus', 'Spot Status');
334
+ this.tooltipRadioTextMap.set('InventoryCode', 'Inventory Code');
335
+ this.tooltipRadioTextMap.set('BuyerProgramName', 'Buyer Program Name');
336
+ this.tooltipRadioTextMap.set('RevenueClass', 'Revenue Class');
337
+ this.tooltipRadioTextMap.set('WeeklyAUR', 'Booked Avg. Rate');
338
+ this.tooltipRadioTextMap.set('BookedRate', 'Booked Rate');
339
+ this.tooltipRadioTextMap.set('BookedRTG', 'Booked RTG');
340
+ this.tooltipRadioTextMap.set('BookedIMPS', "Booked IMP('000)");
341
+ this.tooltipRadioTextMap.set('IMPS', "IMP('000)");
342
+ this.tooltipRadioTextMap.set('AURTG', 'Avg RTG');
343
+ this.tooltipRadioTextMap.set('AUIMPS', "Avg IMP('000)");
344
+ this.tooltipRadioTextMap.set('PostedRatingsOrImpressions', 'Posted RTG');
345
+ this.tooltipRadioTextMap.set('ScheduleFlightWeek', 'Schedule Week');
346
+ this.tooltipRadioTextMap.set('ScheduledDay', 'Scheduled Day');
347
+ this.tooltipRadioTextMap.set('AirStatus', 'Air Status');
348
+ this.tooltipRadioTextMap.set('AirDateAndTime', 'Air Date & Time');
349
+ this.tooltipRadioTextMap.set('AirDate', 'Air Date');
350
+ this.tooltipRadioTextMap.set('NormalizedOrderedRating', 'Normalized Booked RTG');
351
+ this.tooltipRadioTextMap.set('NormalizedOrderedImpressions', "Normalized Booked IMP('000)");
352
+ this.tooltipRadioTextMap.set('NormalizedPostedRating', 'Normalized Posted RTG');
353
+ this.tooltipRadioTextMap.set('NormalizedPostedImpressions', "Normalized Posted IMP('000)");
354
+ this.tooltipRadioTextMap.set('AdId', 'Ad-Id');
355
+ this.tooltipRadioTextMap.set('displayimps', 'IMPS');
356
+ this.tooltipRadioTextMap.set('displayGrp', 'GRP');
357
+ this.tooltipRadioTextMap.set('bookedSpotsForDisplay', 'Spots');
358
+ this.tooltipRadioTextMap.set('displaySpots', 'Spots');
359
+ this.tooltipRadioTextMap.set('estimateNo', 'Estimate#');
360
+ this.tooltipRadioTextMap.set('primaryBuyer', 'Primary Buyer');
361
+ this.tooltipRadioTextMap.set('primaryBuyerName', 'Primary Buyer');
362
+ this.tooltipRadioTextMap.set('secondaryBuyerName', 'Secondary Buyer');
363
+ this.tooltipRadioTextMap.set('secondaryBuyer', 'Secondary Buyer');
364
+ this.tooltipRadioTextMap.set('timeoutDate', 'Timeout Date');
365
+ this.tooltipRadioTextMap.set('DisplaytSpotStatusBI', 'Spot Status');
366
+ this.tooltipRadioTextMap.set('LineSpot', 'Line.Spot');
367
+ this.tooltipRadioTextMap.set('LurWindowName', 'Political Window');
368
+ this.tooltipRadioTextMap.set('udValue', 'Proj. $ UD');
369
+ this.tooltipRadioTextMap.set('odValue', 'Proj. $ OD');
370
+ this.tooltipRadioTextMap.set('OtherAvailableSpotsTableInventoryCode', 'Inventory Code');
371
+ this.tooltipRadioTextMap.set('OtherAvailableSpotsTableBuyerProgramName', 'Buyer Program Name');
372
+ this.tooltipRadioTextMap.set('OtherAvailableSpotsTableStartTime', 'Start Time');
373
+ this.tooltipRadioTextMap.set('OtherAvailableSpotsTableEndTime', 'End Time');
374
+ this.tooltipRadioTextMap.set('OtherAvailableSpotsTableWeeklyAUR', 'Booked Avg. Rate');
375
+ this.tooltipRadioTextMap.set('OtherAvailableSpotsTableDisplayRevenueClass', 'Rev Class');
376
+ this.tooltipRadioTextMap.set('OtherAvailableSpotsTableActualWeekStartDate', 'Week');
377
+ this.tooltipRadioTextMap.set('OtherAvailableSpotsTableWeekDay', 'Day');
378
+ this.tooltipRadioTextMap.set('OtherAvailableSpotsTableDisplayLength', 'Length');
379
+ this.tooltipRadioTextMap.set('ProjectedImpressions', "Projected IMP('000)");
380
+ this.tooltipRadioTextMap.set('ProjectedRtg', 'Projected RTG');
381
+ }
382
+ selectOrUnselectCheckbox(rowData, columnKeys, isCheckboxSelected) {
383
+ rowData[columnKeys] = !rowData[columnKeys];
384
+ this.toggleCheckbox.emit({ rowData, columnKeys, isCheckboxSelected });
385
+ }
386
+ selectOrUnselectRadiobox(rowData, columnKeys, isCheckboxSelected) {
387
+ if (rowData[columnKeys] == isCheckboxSelected)
388
+ return;
389
+ rowData[columnKeys] = isCheckboxSelected;
390
+ this.toggleCheckbox.emit({ rowData, columnKeys, isCheckboxSelected });
391
+ }
392
+ selectUnselectAllRows() {
393
+ this.toggleHeaderCheckbox.emit();
394
+ }
395
+ selectUnselectRow(rowData) {
396
+ this.toggleRowCheckbox.emit(rowData);
397
+ }
398
+ undoCreditedSpot(data) {
399
+ this.undoIconClicked.emit({ data, mgOrCredit: 'Credit' });
400
+ }
401
+ undoMgSpot(data) {
402
+ this.undoIconClicked.emit({ data, mgOrCredit: 'MakeGood' });
403
+ }
404
+ //Sort and Filter Logic begins!
405
+ closeTooltip() {
406
+ if (this.tooltip && this.tooltip.isOpen()) {
407
+ this.tooltip.close();
408
+ }
409
+ this.tooltip = null;
410
+ if (!this.bindValueFuncCalled) {
411
+ this.columnFilterClosed.emit();
412
+ }
413
+ }
414
+ isTooltipActive(header) {
415
+ return this.annaFilterService.isTooltipActive(header, this.annaSortService.columnSortState);
416
+ }
417
+ bindTheValueToToolTip(tooltip, header) {
418
+ this.bindValueFuncCalled = true;
419
+ // if same tooltip opened close it
420
+ if (tooltip == this.tooltip) {
421
+ this.bindValueFuncCalled = false;
422
+ this.closeTooltip();
423
+ }
424
+ else {
425
+ let enabledHeaders = [];
426
+ this.checkIfUniqueValuePresentForTheHeader(header, enabledHeaders);
427
+ this.openTooltip(tooltip, enabledHeaders, header);
428
+ if (window.innerWidth < 1500 &&
429
+ window.innerHeight < 768 &&
430
+ !this.annaFilterService.sliderSet.has(header.filterSortObjectKeys[0])) {
431
+ this.columnFilterOpened.emit();
432
+ }
433
+ this.showCheckboxesForTimeFilter =
434
+ this.gtGeneralConfig.component == 'SPOTDETAILS' ||
435
+ this.gtGeneralConfig.component == 'EXCLUDEINVENTORYPOPUP' ||
436
+ this.gtGeneralConfig.component == 'RATING';
437
+ this.showFilterTooltipTabs = header.filterSortObjectKeys.length > 1;
438
+ this.bindValueFuncCalled = false;
439
+ }
440
+ }
441
+ checkIfUniqueValuePresentForTheHeader(header, enabledHeaders) {
442
+ header.filterSortObjectKeys.forEach((item) => {
443
+ let dataToCheck = this.annaFilterService.getFilterOptionsData(this.tableData, this.clonedTableData, item);
444
+ if (item == 'period') {
445
+ let uniqStartDate = uniq(dataToCheck.map((u) => u['startDate']));
446
+ let uniqEndDate = uniq(dataToCheck.map((u) => u['endDate']));
447
+ if (uniqStartDate.length > 1 || uniqEndDate.length > 1 || this.isTooltipActive([item])) {
448
+ enabledHeaders.push(item);
449
+ }
450
+ }
451
+ else {
452
+ let values = dataToCheck.map((u) => u[item]);
453
+ // if last applied filter is this header, push it alos as enabledHeader
454
+ let activeAndLastlyAppliedHeader = false;
455
+ if (this.annaFilterService.appliedFiltersArray.length > 0 &&
456
+ this.annaFilterService.appliedFiltersArray[this.annaFilterService.appliedFiltersArray.length - 1] ==
457
+ item) {
458
+ activeAndLastlyAppliedHeader = true;
459
+ }
460
+ if (header.filter == 'CHECKBOX' &&
461
+ (uniq(values).filter((n) => n != null).length > 1 || activeAndLastlyAppliedHeader)) {
462
+ enabledHeaders.push(item);
463
+ }
464
+ else if (header.filter != 'CHECKBOX' &&
465
+ (uniq(values).filter((n) => n != null && n != '-').length > 1 || activeAndLastlyAppliedHeader)) {
466
+ enabledHeaders.push(item);
467
+ }
468
+ }
469
+ });
470
+ }
471
+ openTooltip(tooltip, header, columnHeader) {
472
+ this.closeTooltip();
473
+ this.tooltip = tooltip;
474
+ this.tooltip.open();
475
+ //convert key into the header
476
+ this.filterTabObjects = header.map((key, index) => {
477
+ let value = this.tooltipRadioTextMap.has(key) ? this.tooltipRadioTextMap.get(key) : key; //change to display name
478
+ return new radioButtonModel(key, value, columnHeader.isSortRequired[index], columnHeader.isFilterRequired[index]);
479
+ });
480
+ }
481
+ disableEnableEachColumnTooltipIcon() {
482
+ this.tableHeaders.forEach((header) => {
483
+ header.headerInfo.forEach((item) => {
484
+ if (item.showTooltipIcon) {
485
+ let values = [];
486
+ item.disableTooltipIcon = true;
487
+ item.filterSortObjectKeys.forEach((key) => {
488
+ let latestFilters = this.annaFilterService.appliedFiltersArray;
489
+ if (latestFilters.length > 0 &&
490
+ item.disableTooltipIcon &&
491
+ latestFilters[latestFilters.length - 1] == key) {
492
+ item.disableTooltipIcon = false;
493
+ }
494
+ if (item.disableTooltipIcon) {
495
+ if (key == 'period') {
496
+ let uniqStartDate = uniq(this.tableData.map((u) => u['startDate']));
497
+ let uniqEndDate = uniq(this.tableData.map((u) => u['endDate']));
498
+ item.disableTooltipIcon =
499
+ uniqStartDate.length > 1 || uniqEndDate.length > 1 ? false : true;
500
+ }
501
+ else {
502
+ values = this.tableData.map((u) => u[key]);
503
+ if ((item.filter == 'CHECKBOX' && uniq(values).filter((n) => n != null).length > 1) ||
504
+ (item.filter != 'CHECKBOX' &&
505
+ uniq(values).filter((n) => n != null && n != '-').length > 1)) {
506
+ item.disableTooltipIcon = false;
507
+ }
508
+ }
509
+ }
510
+ });
511
+ }
512
+ });
513
+ });
514
+ }
515
+ setMarginLeftForFilterIcon() {
516
+ let elementArr = this.viewChildTableHeaders.toArray();
517
+ elementArr.forEach((item) => {
518
+ let childDivElements = item.nativeElement.children;
519
+ if (childDivElements.length == 2) {
520
+ let firstParagraphOffsetWidth = childDivElements[0]?.children[0]?.offsetWidth
521
+ ? childDivElements[0]?.children[0]?.offsetWidth
522
+ : 0;
523
+ let secondParagraphOffsetWidth = childDivElements[1].children[0]?.offsetWidth
524
+ ? childDivElements[1].children[0]?.offsetWidth
525
+ : 0;
526
+ if (firstParagraphOffsetWidth > secondParagraphOffsetWidth) {
527
+ let diff = firstParagraphOffsetWidth - secondParagraphOffsetWidth;
528
+ if (childDivElements[0].children.length == 2) {
529
+ childDivElements[0].children[1].style.marginLeft = 4 + 'px';
530
+ }
531
+ if (childDivElements[1].children.length == 2) {
532
+ childDivElements[1].children[1].style.marginLeft = diff + 4 + 'px';
533
+ }
534
+ }
535
+ else {
536
+ let diff = secondParagraphOffsetWidth - firstParagraphOffsetWidth;
537
+ if (childDivElements[0].children.length == 2) {
538
+ childDivElements[0].children[1].style.marginLeft = diff + 4 + 'px';
539
+ }
540
+ if (childDivElements[1].children.length == 2) {
541
+ childDivElements[1].children[1].style.marginLeft = 4 + 'px';
542
+ }
543
+ }
544
+ }
545
+ });
546
+ }
547
+ dataRowClicked(rowData) {
548
+ this.rowClicked.emit(rowData);
549
+ }
550
+ radioButtonClicked(data, action, isDisabled) {
551
+ if (!isDisabled) {
552
+ this.radioButtonSelected.emit({ data, action });
553
+ }
554
+ }
555
+ bindTheValueToSellerGroupTooltip(sellerGroupHierarchy, tooltip) {
556
+ if (this.hierarchyTooltip && this.hierarchyTooltip.open) {
557
+ this.hierarchyTooltip.close();
558
+ }
559
+ this.sellerGroupHierarchy = sellerGroupHierarchy;
560
+ this.hierarchyTooltip = tooltip;
561
+ this.hierarchyTooltip.open();
562
+ }
563
+ iconClicked(rowData, iconClass) {
564
+ if ('orderId' in rowData && iconClass.includes('mdi-star')) {
565
+ this.selectedStarredOrderId = rowData.orderId;
566
+ }
567
+ this.gtIconClicked.emit({ data: rowData, iconClass: iconClass });
568
+ }
569
+ svgIconClicked(data) {
570
+ this.gtSVGIconClicked.emit(data);
571
+ }
572
+ textActionClicked(rowData, id, columnHeader) {
573
+ this.gtTextActionClicked.emit({ data: rowData, id: id, columnHeader: columnHeader, isIconClicked: false });
574
+ }
575
+ iconClickedOnStringIconActionType(rowData, id, columnHeader) {
576
+ this.gtTextActionClicked.emit({ data: rowData, id: id, columnHeader: columnHeader, isIconClicked: true });
577
+ }
578
+ innerHTMLCellClicked(event, rowData) {
579
+ this.gtInnerHTMLClicked.emit({ event, rowData });
580
+ }
581
+ viewDetailsClicked(rowData) {
582
+ this.gtViewDetailClicked.emit({ data: rowData });
583
+ }
584
+ setActiveStateObject() {
585
+ this.annaFilterService.isFilterSortActive =
586
+ !this.annaFilterService.resetFilterSortActiveStatus || this.multipleTablesPresent
587
+ ? this.annaFilterService.isFilterSortActive
588
+ : {};
589
+ this.tableHeaders.forEach((item) => {
590
+ item.headerInfo.forEach((header) => {
591
+ if (header.showTooltipIcon) {
592
+ let key = header.filterSortObjectKeys.join(',');
593
+ header.joinedFilterSortObjectKeys = key;
594
+ // ANNA-4113 fix
595
+ if (this.annaFilterService.resetFilterSortActiveStatus) {
596
+ this.annaFilterService.isFilterSortActive[key] = false;
597
+ }
598
+ }
599
+ });
600
+ });
601
+ this.annaFilterService.resetFilterSortActiveStatus = true;
602
+ }
603
+ setIsDifference(value) {
604
+ this.isDifferenceLessThan25Percent = value;
605
+ }
606
+ resetIndex() {
607
+ this.start = 0;
608
+ this.end = this.limit + this.start;
609
+ }
610
+ onTableContainerScroll(e) {
611
+ const tableViewHeight = e.target.offsetHeight; // viewport
612
+ const tableScrollHeight = e.target.scrollHeight; // length of all table
613
+ const scrollLocation = e.target.scrollTop; // how far user scrolled
614
+ this.removeTooltipOnScroll();
615
+ // If the user has scrolled within 150px of the bottom, add more data
616
+ const buffer = 150;
617
+ const limit = tableScrollHeight - tableViewHeight - buffer;
618
+ if (scrollLocation > limit) {
619
+ let data = this.getTableData(this.start, this.end);
620
+ this.renderedData = this.renderedData.concat(data);
621
+ this.updateIndex();
622
+ }
623
+ this.tableContainerScrolled(e);
624
+ }
625
+ getTableData(start, end) {
626
+ return this.tableData.filter((value, index) => index >= start && index < end);
627
+ }
628
+ updateIndex() {
629
+ this.start = this.end;
630
+ this.end = this.limit + this.start;
631
+ }
632
+ setInitialRowsForTable() {
633
+ this.resetIndex();
634
+ this.renderedData = this.getTableData(this.start, this.end);
635
+ this.updateIndex();
636
+ }
637
+ spotDetailsDownloadClicked(parentChildOrTotalRow, rowdata) {
638
+ if (rowdata) {
639
+ this.selectedInventoryIdForDownload = rowdata.inventoryCodeId;
640
+ this.selectedDemographicForDownload = rowdata.demographic;
641
+ }
642
+ else {
643
+ this.selectedInventoryIdForDownload = null;
644
+ this.selectedDemographicForDownload = null;
645
+ }
646
+ this.selectedRowTypeForDownload = parentChildOrTotalRow;
647
+ this.downloadSpotDetails.emit({
648
+ parentChildOrTotalRow: parentChildOrTotalRow,
649
+ inventoryCodeId: this.selectedInventoryIdForDownload,
650
+ demographic: this.selectedDemographicForDownload,
651
+ });
652
+ }
653
+ tableContainerScrolled(event) {
654
+ this.isScrolledLeft = event.target.scrollLeft > 0;
655
+ this.removeTooltipOnScroll();
656
+ }
657
+ mouseEnterOnStringTextActionType(rowData, tooltipKey) {
658
+ this.textActionTooltip = rowData[tooltipKey];
659
+ this.notificationIconHover.emit({ rowData: rowData, type: 'on-enter' });
660
+ }
661
+ mouseEnterOnStringTextActionTypeContainingTable(rowData, tooltipKey) {
662
+ this.tooltipContainingTable = rowData[tooltipKey];
663
+ }
664
+ mouseLeaveTextActionType(rowData) {
665
+ this.notificationIconHoverLeave.emit({ rowData: rowData, type: 'on-leave' });
666
+ }
667
+ mouseEnterOnTextActionType(rowData, tooltipKey) {
668
+ this.textActionTooltip = rowData[tooltipKey];
669
+ }
670
+ onClickableDataClicked(Rowdata, id) {
671
+ this.clickableDataClicked.emit({ data: Rowdata, id: id });
672
+ }
673
+ removeTooltipOnScroll() {
674
+ const elements = document.getElementsByClassName('remarks-info-tooltip');
675
+ // const tooltipElements = document.getElementsByClassName("tooltip");
676
+ const gtTooltip = document.getElementsByClassName('remove-on-scroll-class');
677
+ const tooltipElements = document.getElementsByClassName('tooltip');
678
+ while (elements && elements.length > 0) {
679
+ elements[0].remove();
680
+ }
681
+ while (tooltipElements && tooltipElements.length > 0) {
682
+ tooltipElements[0].remove();
683
+ this.tooltip = null;
684
+ }
685
+ while (gtTooltip && gtTooltip.length > 0) {
686
+ gtTooltip[0].remove();
687
+ }
688
+ }
689
+ iconClickedInTotalRow(colName) {
690
+ this.totalRowIconClicked.emit(colName);
691
+ }
692
+ changesMadeInEditableInputBox(event, editedObject, pasteEvent) {
693
+ let enteredValue = pasteEvent ? event.clipboardData.getData('text') : event.key;
694
+ let dotIndex = editedObject.value.indexOf('.');
695
+ if (event.keyCode != 8 &&
696
+ event.keyCode != 46 &&
697
+ !(event.keyCode >= 37 && event.keyCode <= 40) &&
698
+ ((!editedObject?.allowSpecialCharacters && !/[`0-9.]/.test(enteredValue)) ||
699
+ (editedObject.isDecimalPointCheckRequired &&
700
+ dotIndex >= 0 &&
701
+ event?.target?.selectionStart > dotIndex &&
702
+ editedObject.value.length - (dotIndex + 1) >= editedObject.maxDecimalPointsAllowed))) {
703
+ event.preventDefault();
704
+ }
705
+ }
706
+ editableInputValueChanged(value, row, keyEdited) {
707
+ this.editableInputEdited.emit({ row: row, value: value, keyEdited: keyEdited });
708
+ }
709
+ radioButtonIconClicked(data) {
710
+ this.radioButtonMessageIconClicked.emit(data);
711
+ }
712
+ filterApplied(tableData) {
713
+ this.tableData = tableData;
714
+ this.setInitialRowsForTable();
715
+ this.disableEnableEachColumnTooltipIcon();
716
+ this.filterAppliedToTable.emit(tableData);
717
+ this.closeTooltip();
718
+ }
719
+ sortingApplied(tableData) {
720
+ this.tableData = tableData;
721
+ this.setInitialRowsForTable();
722
+ this.disableEnableEachColumnTooltipIcon();
723
+ this.sortingAppliedToTable.emit(tableData);
724
+ this.closeTooltip();
725
+ }
726
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AnnaNonEditableGenericTableComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.AnnaSortService }, { token: i2.AnnaDateTimeFormatService }, { token: i3.AnnaFilterService }], target: i0.ɵɵFactoryTarget.Component }); }
727
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AnnaNonEditableGenericTableComponent, isStandalone: true, selector: "anna-core-non-editable-generic-table-lib", inputs: { showSkeletonLoading: "showSkeletonLoading", tableHeaders: "tableHeaders", tableData: "tableData", clonedTableData: "clonedTableData", gtGeneralConfig: "gtGeneralConfig", totalRowInfo: "totalRowInfo", gtDimension: "gtDimension", tableClass: "tableClass", maximumRowsWhichCanBeRenderedWithoutScroll: "maximumRowsWhichCanBeRenderedWithoutScroll", fixNumberOfRowsForPopup: "fixNumberOfRowsForPopup", limit: "limit", includeBorderInTableHeight: "includeBorderInTableHeight", downloadInProgress: "downloadInProgress", percentDone: "percentDone", starredInProgress: "starredInProgress", clickableRow: "clickableRow", setTableHeightWhenRowSizeIsFixed: "setTableHeightWhenRowSizeIsFixed", tableBorderBottomClassRequired: "tableBorderBottomClassRequired", hideSomeTds: "hideSomeTds", tdsHaveRowSpan: "tdsHaveRowSpan", multipleTablesPresent: "multipleTablesPresent" }, outputs: { toggleCheckbox: "toggleCheckbox", toggleRowCheckbox: "toggleRowCheckbox", toggleHeaderCheckbox: "toggleHeaderCheckbox", undoIconClicked: "undoIconClicked", filterAppliedToTable: "filterAppliedToTable", sortingAppliedToTable: "sortingAppliedToTable", rowClicked: "rowClicked", radioButtonSelected: "radioButtonSelected", columnFilterOpened: "columnFilterOpened", columnFilterClosed: "columnFilterClosed", gtIconClicked: "gtIconClicked", gtSVGIconClicked: "gtSVGIconClicked", gtTextActionClicked: "gtTextActionClicked", gtViewDetailClicked: "gtViewDetailClicked", gtInnerHTMLClicked: "gtInnerHTMLClicked", downloadSpotDetails: "downloadSpotDetails", clickableDataClicked: "clickableDataClicked", totalRowIconClicked: "totalRowIconClicked", notificationIconHover: "notificationIconHover", notificationIconHoverLeave: "notificationIconHoverLeave", editableInputEdited: "editableInputEdited", radioButtonMessageIconClicked: "radioButtonMessageIconClicked" }, viewQueries: [{ propertyName: "viewChildTableHeaders", predicate: ["tableHeader"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n id=\"generic-table-conatiner\"\n class=\"table-container {{ gtGeneralConfig?.tableOuterContainerName }} {{ tableBottomBorderClass }}\"\n [ngClass]=\"{\n 'scroll-left-shadow-effect': isScrolledLeft,\n 'clickable-row': clickableRow,\n 'no-data-table': (isNoDataToDisplaySubject$ | async)\n }\"\n (scroll)=\"onTableContainerScroll($event)\"\n>\n <div\n [class]=\"gtGeneralConfig.tableContainerName\"\n class=\"horizontal-scroll-for-table-container\"\n [ngStyle]=\"{\n height:\n tableData.length < maximumRowsWhichCanBeRenderedWithoutScroll\n ? 'calc(' +\n (gtDimension.rowHeight * tableData.length +\n (!tableData.length || !gtGeneralConfig.totalRow\n ? gtDimension.headerHeight\n : gtDimension.headerHeight + gtDimension.rowHeight)) +\n 'px)'\n : gtDimension.tableHeight\n }\"\n >\n <table\n class=\"gt\"\n [ngClass]=\"tableClass\"\n mat-table\n [dataSource]=\"renderedData\"\n >\n <tr\n class=\"header-row\"\n mat-header-row\n *matHeaderRowDef=\"tableColumns; sticky: true\"\n [style.height.px]=\"gtDimension.headerHeight\"\n ></tr>\n <tr\n class=\"total-row\"\n mat-header-row\n [style.height.px]=\"gtDimension.rowHeight\"\n *matHeaderRowDef=\"totalRowColumns; sticky: true\"\n [class.hidden]=\"\n showSkeletonLoading ||\n (!showSkeletonLoading && !tableData.length) ||\n (isNoDataToDisplaySubject$ | async) ||\n (!showSkeletonLoading && !gtGeneralConfig.totalRow)\n \"\n ></tr>\n <tr\n [class]=\"rowData.gtClass\"\n [ngClass]=\"{ 'no-border-tr': (isNoDataToDisplaySubject$ | async) }\"\n mat-row\n *matRowDef=\"let rowData; columns: tableColumns\"\n [style.height.px]=\"gtDimension.rowHeight\"\n (click)=\"dataRowClicked(rowData)\"\n ></tr>\n\n <!-- TOTAL ROW -->\n <ng-container\n [matColumnDef]=\"column.colName\"\n *ngFor=\"let column of totalRowInfo; trackBy: trackByFn\"\n >\n <td\n mat-header-cell\n *matHeaderCellDef\n [attr.colspan]=\"column.colspan\"\n class=\"{{ column.class }}\"\n >\n <ng-container *ngIf=\"column['isActionColumn']\">\n <a\n *ngFor=\"let data of column.actionData\"\n [class]=\"data.class\"\n (click)=\"onClickableDataClicked({}, data.id)\"\n >\n {{ data.name }}\n </a>\n </ng-container>\n\n <ng-container *ngIf=\"column['isIconColumn']\">\n <i\n class=\"{{ column?.iconData?.class }}\"\n (click)=\"iconClickedInTotalRow(column?.colName)\"\n >\n </i>\n </ng-container>\n\n <ng-container *ngIf=\"!column['isActionColumn']\">\n <strong class=\"upper-label\">{{ column.data }}</strong>\n <ng-container *ngIf=\"column.lowerData\">\n <br />\n <span\n *ngIf=\"\n column.colName == 'total-potential-booked-unit' &&\n gtGeneralConfig.component == 'RATING';\n else columnLowerData\n \"\n class=\"clickable-data\"\n (click)=\"spotDetailsDownloadClicked('TOTALROW')\"\n [ngClass]=\"{ 'disabled-clickable-data': downloadInProgress }\"\n >{{ column.lowerData }}\n <span class=\"material-icons spot-details-download-icons\">get_app</span>\n <ng-container *ngIf=\"downloadInProgress && selectedRowTypeForDownload == 'TOTALROW'\">\n <ng-container [ngTemplateOutlet]=\"circularProgressBar\"></ng-container>\n </ng-container>\n </span>\n <ng-template #columnLowerData>\n <span class=\"lower-label\">{{ column.lowerData }}</span>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"column.tooltipMessage && gtGeneralConfig.component != 'LUR_VIOLATIONS'\">\n <i\n class=\"{{ column.tooltipIconClass }}\"\n container=\"body\"\n [ngbTooltip]=\"column.tooltipMessage\"\n tooltipClass=\"gt-total-row-tooltip\"\n placement=\"bottom\"\n ></i>\n </ng-container>\n <ng-container *ngIf=\"gtGeneralConfig.component == 'LUR_VIOLATIONS' && column.tooltipMessage\">\n <i\n class=\"mi mdi-info-outline info-label\"\n container=\"body\"\n [ngbTooltip]=\"lurViolationTotalRowToolTip\"\n tooltipClass=\"gt-total-row-tooltip\"\n placement=\"bottom\"\n ></i>\n </ng-container>\n </ng-container>\n </td>\n </ng-container>\n\n <!-- MAIN ROW -->\n <ng-container\n [matColumnDef]=\"columnDef.headerInfo[0].objectKey\"\n *ngFor=\"let columnDef of tableHeaders; trackBy: trackByFn\"\n >\n <th\n #tableHeader\n nowrap\n mat-header-cell\n *matHeaderCellDef\n [style.width]=\"columnDef.width\"\n >\n <div\n class=\"row mx-0\"\n *ngFor=\"let header of columnDef.headerInfo; let j = index\"\n >\n <p\n *ngIf=\"header.typeOfHeaderData === 'STRING'\"\n [ngClass]=\"{ 'upper-label': j === 0, 'lower-label': j === 1 }\"\n >\n <ngx-skeleton-loader\n *ngIf=\"header.name == null\"\n count=\"1\"\n [theme]=\"{\n height: '10px',\n display: 'block',\n width: columnDef.width,\n 'max-width': 'calc(100% - 20px)'\n }\"\n >\n </ngx-skeleton-loader>\n <ng-container *ngIf=\"header.name\">\n {{ header.name }}\n </ng-container>\n\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'impsInfoTooltip'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"impsInfoTooltip\"\n container=\"body\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"\n header.tooltip && header.tooltip.name == 'spotsColumnEquivalizationMessageTooltip'\n \"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n container=\"body\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"spotsColumnEquivalizationMessageTooltip\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'underDeliveryTooltip'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n container=\"body\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"underDeliveryTooltip\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'overDeliveryTooltip'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n container=\"body\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"overDeliveryTooltip\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'ratingInfoTooltip'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"ratingInfoTooltip\"\n container=\"body\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'rateInfoTooltip'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"rateInfoTooltip\"\n container=\"body\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'ongoingRevBookedColumnTooltip'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"ongoingRevBookedColumnTooltip\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'completedRevBookedColumnTooltip'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"completedRevBookedColumnTooltip\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'avgBookedRate'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"avgBookedRate\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'avgBookedRtg'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"avgBookedRtg\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'avgBookedImps'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"avgBookedImps\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'automationTooltip'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"automationTooltip\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'rebateImpact'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"rebateImpact\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'projectedImpsRtg'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"projectedImpsRtg\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n </p>\n\n <ng-container *ngIf=\"header.typeOfHeaderData === 'CHECKBOX'\">\n <span\n *ngIf=\"gtGeneralConfig.isHeaderChecked\"\n class=\"material-icons custom-column-checkbox-checked\"\n (click)=\"selectUnselectAllRows()\"\n >\n check_box\n </span>\n <span\n *ngIf=\"!gtGeneralConfig.isHeaderChecked\"\n class=\"material-icons custom-column-checkbox-unchecked\"\n [ngClass]=\"{ 'disable-checkbox': gtGeneralConfig.disableHeaderCheckbox }\"\n (click)=\"selectUnselectAllRows()\"\n >\n check_box_outline_blank\n </span>\n </ng-container>\n\n <div\n *ngIf=\"gtGeneralConfig.showAllColumnFilter\"\n class=\"sort-filter-container\"\n >\n <ng-container *ngIf=\"header.showTooltipIcon\">\n <!-- Active tooltip Functionality -->\n <ng-container *ngIf=\"header.filter === 'CHECKBOX'\">\n <span\n class=\"mdi mdi-filter-variant\"\n [ngClass]=\"{\n active:\n annaFilterService.isFilterSortActive &&\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\n disabled: header.disableTooltipIcon || showSkeletonLoading\n }\"\n [ngbTooltip]=\"filterTooltip\"\n placement=\"{{ filterAlignment }}\"\n container=\"body\"\n tooltipClass=\"non-edit-checkbox-tooltip\"\n [autoClose]=\"'outside'\"\n triggers=\"manual\"\n #t=\"ngbTooltip\"\n (click)=\"bindTheValueToToolTip(t, header)\"\n (hidden)=\"closeTooltip()\"\n >\n </span\n ><br />\n </ng-container>\n <ng-container *ngIf=\"header.filter === 'SLIDER'\">\n <span\n class=\"mdi mdi-filter-variant\"\n [ngClass]=\"{\n active:\n annaFilterService.isFilterSortActive &&\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\n disabled: header.disableTooltipIcon || showSkeletonLoading\n }\"\n [ngbTooltip]=\"sliderToolTip\"\n placement=\"bottom left-top\"\n container=\"body\"\n tooltipClass=\"non-edit-slider-tooltip\"\n [autoClose]=\"'outside'\"\n triggers=\"manual\"\n #t1=\"ngbTooltip\"\n (click)=\"bindTheValueToToolTip(t1, header)\"\n (hidden)=\"closeTooltip()\"\n >\n </span\n ><br />\n </ng-container>\n <ng-container *ngIf=\"header.filter === 'DATE'\">\n <span\n class=\"mdi mdi-filter-variant\"\n [ngClass]=\"{\n active:\n annaFilterService.isFilterSortActive &&\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\n disabled: header.disableTooltipIcon || showSkeletonLoading\n }\"\n [ngbTooltip]=\"datePickerTooltip\"\n placement=\"bottom auto\"\n container=\"body\"\n tooltipClass=\"non-edit-datepicker-tooltip\"\n [autoClose]=\"'outside'\"\n triggers=\"manual\"\n #t2=\"ngbTooltip\"\n (click)=\"bindTheValueToToolTip(t2, header)\"\n (hidden)=\"closeTooltip()\"\n >\n </span\n ><br />\n </ng-container>\n <ng-container *ngIf=\"header.filter === 'WEEK'\">\n <span\n class=\"mdi mdi-filter-variant\"\n [ngClass]=\"{\n active:\n annaFilterService.isFilterSortActive &&\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\n disabled: header.disableTooltipIcon || showSkeletonLoading\n }\"\n [ngbTooltip]=\"weekPickerToolTip\"\n placement=\"bottom left-top\"\n container=\"body\"\n [autoClose]=\"'outside'\"\n triggers=\"manual\"\n #t3=\"ngbTooltip\"\n (click)=\"bindTheValueToToolTip(t3, header)\"\n (hidden)=\"closeTooltip()\"\n >\n </span\n ><br />\n </ng-container>\n <ng-container *ngIf=\"header.filter === 'TIME'\">\n <span\n class=\"mdi mdi-filter-variant\"\n [ngClass]=\"{\n active:\n annaFilterService.isFilterSortActive &&\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\n disabled: header.disableTooltipIcon || showSkeletonLoading\n }\"\n [ngbTooltip]=\"timeFilterToolTip\"\n placement=\"bottom left-top auto\"\n container=\"body\"\n tooltipClass=\"non-edit-time-tooltip\"\n [autoClose]=\"'outside'\"\n triggers=\"manual\"\n #t4=\"ngbTooltip\"\n (click)=\"bindTheValueToToolTip(t4, header)\"\n (hidden)=\"closeTooltip()\"\n >\n </span\n ><br />\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!header.showTooltipIcon\">\n <span id=\"no-filter-space\"></span><br />\n </ng-container>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'lurViolationInfoTooltip'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"lurViolationInfoTooltip\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n </div>\n </div>\n </th>\n\n <ng-container *matCellDef=\"let ROW_DATA\">\n <td\n mat-cell\n [style.background]=\"ROW_DATA.backgroundColor\"\n [style.border]=\"ROW_DATA.border\"\n class=\"{{ ROW_DATA.rowClass }}\"\n [ngClass]=\"ROW_DATA[columnDef.headerInfo[0].objectKey + 'TdClass']\"\n [attr.rowspan]=\"ROW_DATA[columnDef.headerInfo[0].objectKey + 'Rowspan']\"\n *ngIf=\"\n !hideSomeTds ||\n (hideSomeTds && !ROW_DATA['hide' + columnDef.headerInfo[0].objectKey + 'Td'])\n \"\n >\n <ngx-skeleton-loader\n *ngIf=\"showSkeletonLoading\"\n count=\"1\"\n [theme]=\"{ height: '10px', display: 'block' }\"\n >\n </ngx-skeleton-loader>\n\n <ng-container *ngIf=\"!showSkeletonLoading\">\n <ng-container *ngIf=\"tableData.length > 0 && !(isNoDataToDisplaySubject$ | async)\">\n <ng-container\n *ngFor=\"\n let subline of columnDef.headerInfo;\n let subLineIndex = index;\n trackBy: trackByFn\n \"\n >\n <div showEllipsisTextOnHover>\n <ng-container [ngSwitch]=\"columnDef.headerInfo[subLineIndex].typeOfBodyData\">\n <ng-container *ngSwitchCase=\"'ICON'\">\n <i\n *ngIf=\"\n !(\n starredInProgress &&\n ROW_DATA.orderId == selectedStarredOrderId\n )\n \"\n [class]=\"ROW_DATA.iconClass\"\n (click)=\"iconClicked(ROW_DATA, ROW_DATA.iconClass)\"\n ngbTooltip=\"{{ ROW_DATA.iconTitleText }}\"\n placement=\"bottom\"\n container=\"body\"\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\n ></i>\n <ng-container\n *ngIf=\"\n starredInProgress && ROW_DATA.orderId == selectedStarredOrderId\n \"\n >\n <div class=\"spinner-for-button-directive\"></div>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'ICON_CELL'\">\n <ng-container\n *ngFor=\"\n let action of ROW_DATA[\n columnDef.headerInfo[subLineIndex].actionKey\n ]\n \"\n >\n <i\n *ngIf=\"action.showIcon\"\n [class]=\"action.iconClass\"\n (mouseenter)=\"\n mouseEnterOnStringTextActionType(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].tooltipKey\n )\n \"\n placement=\"bottom auto\"\n container=\"body\"\n [autoClose]=\"true\"\n tooltipClass=\"team-user-tooltip remove-on-scroll-class\"\n [ngbTooltip]=\"action.showTooltip ? userLoggedInDetails : null\"\n (click)=\"\n textActionClicked(\n ROW_DATA,\n action.id,\n columnDef.headerInfo[subLineIndex]\n )\n \"\n [disableTooltip]=\"!action.showTooltip\"\n >\n </i>\n\n <ng-container *ngIf=\"action.showObjectKey\">\n {{ ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey] }}\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'HTML_STRING'\">\n <p\n [innerHTML]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\n (click)=\"innerHTMLCellClicked($event, ROW_DATA)\"\n ></p>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'SVG_ICON'\">\n <anna-core-anna-icon-column\n [componentName]=\"gtGeneralConfig.component\"\n [dataObject]=\"ROW_DATA\"\n [iconToShow]=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n \"\n (onColumnIconClicked)=\"svgIconClicked($event)\"\n ></anna-core-anna-icon-column>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'TEXT_ACTIONS'\">\n <ng-container\n *ngFor=\"\n let text of ROW_DATA[\n columnDef.headerInfo[subLineIndex].actionKey\n ]\n \"\n >\n <button\n *ngIf=\"text.showTooltip\"\n (click)=\"\n textActionClicked(\n ROW_DATA,\n text.id,\n columnDef.headerInfo[subLineIndex]\n )\n \"\n [disabled]=\"text.isDisabled\"\n class=\"{{ text.class }}\"\n (mouseenter)=\"\n mouseEnterOnTextActionType(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].tooltipKey\n )\n \"\n [ngbTooltip]=\"textActionTooltipTemplate\"\n placement=\"auto\"\n container=\"body\"\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\n >\n {{ text.name }}\n </button>\n\n <button\n *ngIf=\"!text.showTooltip\"\n (click)=\"\n textActionClicked(\n ROW_DATA,\n text.id,\n columnDef.headerInfo[subLineIndex]\n )\n \"\n [disabled]=\"text.isDisabled\"\n class=\"{{ text.class }}\"\n >\n {{ text.name }}\n </button>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'CHECKBOX'\">\n <span\n *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\n [ngClass]=\"{\n 'disable-checkbox':\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\n }\"\n class=\"material-icons custom-column-checkbox-checked\"\n (click)=\"\n selectOrUnselectCheckbox(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].objectKey,\n false\n )\n \"\n >\n check_box\n </span>\n <span\n *ngIf=\"!ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\n class=\"material-icons custom-column-checkbox-unchecked\"\n [ngClass]=\"{\n 'disable-checkbox':\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\n }\"\n (click)=\"\n selectOrUnselectCheckbox(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].objectKey,\n true\n )\n \"\n >\n check_box_outline_blank\n </span>\n\n <ng-container\n *ngFor=\"\n let action of ROW_DATA[\n columnDef.headerInfo[subLineIndex].actionKey\n ]\n \"\n >\n <i\n *ngIf=\"action.showIcon\"\n [class]=\"action.iconClass\"\n [ngClass]=\"{ disabled: action.disabledIcon }\"\n (mouseenter)=\"\n mouseEnterOnStringTextActionTypeContainingTable(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].tooltipKey\n )\n \"\n placement=\"bottom auto\"\n container=\"body\"\n [autoClose]=\"true\"\n tooltipClass=\"tooltip-containing-table remove-on-scroll-class\"\n [ngbTooltip]=\"tooltipContainingTableTemplate\"\n >\n </i>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'CLICKABLE_DATA'\">\n <a\n *ngFor=\"\n let text of ROW_DATA[\n columnDef.headerInfo[subLineIndex].actionKey\n ]\n \"\n [class]=\"text.class\"\n (click)=\"onClickableDataClicked(ROW_DATA, text.id)\"\n >\n {{ text.name }}\n </a>\n <span\n *ngIf=\"\n subline.objectKey == 'displayBookedUnits' &&\n gtGeneralConfig.component == 'RATING'\n \"\n class=\"clickable-data\"\n (click)=\"spotDetailsDownloadClicked('DATAROW', ROW_DATA)\"\n [ngClass]=\"{ 'disabled-clickable-data': downloadInProgress }\"\n >{{ ROW_DATA.displayBookedUnits }}\n <span class=\"material-icons spot-details-download-icons\"\n >get_app</span\n >\n <ng-container\n *ngIf=\"\n downloadInProgress &&\n ROW_DATA.inventoryCodeId ==\n selectedInventoryIdForDownload &&\n ROW_DATA.demographic == selectedDemographicForDownload\n \"\n >\n <ng-container\n [ngTemplateOutlet]=\"circularProgressBar\"\n ></ng-container>\n </ng-container>\n </span>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'STRING___ICON_OR_TEXT_ACTION'\">\n <ng-container\n *ngFor=\"\n let action of ROW_DATA[\n columnDef.headerInfo[subLineIndex].actionKey\n ]\n \"\n >\n <span\n [class]=\"action.additionalTextBeforeLinkClass\"\n [innerHtml]=\"action.additionalTextBeforeLink\"\n ngbTooltip=\"{{ action.additionalTextBeforeLink }}\"\n placement=\"bottom\"\n container=\"body\"\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\n [disableTooltip]=\"!action.enableTooltipForAdditionalText\"\n ></span>\n\n <ng-container *ngIf=\"action && action.typeOfData == 'STRING'\">\n {{ action.data }}\n </ng-container>\n\n <a\n [id]=\"action.id\"\n *ngIf=\"action.showLink\"\n (click)=\"\n textActionClicked(\n ROW_DATA,\n action.id,\n columnDef.headerInfo[subLineIndex]\n )\n \"\n [class]=\"action.linkClass\"\n [ngClass]=\"{ disabled: action.disabledLink }\"\n >{{ action.data }}</a\n >\n <span\n ngbTooltip=\"{{ action.additionalTextAfterLink }}\"\n placement=\"bottom\"\n container=\"body\"\n [class]=\"action.additionalTextAfterLinkClass\"\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\n [disableTooltip]=\"!action.enableTooltipForAdditionalAfterText\"\n >\n {{ action.additionalTextAfterLink }}\n </span>\n\n <ng-container *ngIf=\"action.showTooltip\">\n <ng-container *ngIf=\"action.tooltipData.innerHtml\">\n <i\n *ngIf=\"action.showIcon\"\n [class]=\"action.iconClass\"\n [ngClass]=\"{ disabled: action.disabledIcon }\"\n (mouseenter)=\"\n mouseEnterOnStringTextActionTypeContainingTable(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].tooltipKey\n )\n \"\n placement=\"bottom auto\"\n container=\"body\"\n [autoClose]=\"true\"\n tooltipClass=\"tooltip-containing-table remove-on-scroll-class\"\n [ngbTooltip]=\"tooltipContainingTableTemplate\"\n >\n </i>\n </ng-container>\n\n <ng-container *ngIf=\"!action.tooltipData.tooltipTableBody\">\n <i\n *ngIf=\"action.showIcon\"\n [class]=\"action.iconClass\"\n [ngClass]=\"{ disabled: action.disabledIcon }\"\n (click)=\"\n iconClickedOnStringIconActionType(\n ROW_DATA,\n action.id,\n columnDef.headerInfo[subLineIndex]\n )\n \"\n (mouseleave)=\"mouseLeaveTextActionType(ROW_DATA)\"\n (mouseenter)=\"\n mouseEnterOnStringTextActionType(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].tooltipKey\n )\n \"\n [placement]=\"\n action.tooltipPlacement\n ? action.tooltipPlacement\n : 'bottom auto'\n \"\n container=\"body\"\n [autoClose]=\"true\"\n tooltipClass=\"team-user-tooltip remove-on-scroll-class {{\n action.tooltipClass\n }}\"\n [ngbTooltip]=\"userLoggedInDetails\"\n >\n </i>\n <ng-container *ngIf=\"action['showSvgIcon']\">\n <anna-core-anna-est-icon-template\n class=\"float-right\"\n *ngIf=\"action['svgIconName'] == 'anna-icon'\"\n (mouseleave)=\"mouseLeaveTextActionType(ROW_DATA)\"\n (mouseenter)=\"\n mouseEnterOnStringTextActionType(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex]\n .tooltipKey\n )\n \"\n [placement]=\"\n action.tooltipPlacement\n ? action.tooltipPlacement\n : 'bottom auto'\n \"\n tooltipClass=\"team-user-tooltip remove-on-scroll-class {{\n action['tooltipClass']\n }}\"\n [ngbTooltip]=\"userLoggedInDetails\"\n container=\"body\"\n [autoClose]=\"true\"\n >\n </anna-core-anna-est-icon-template>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!action.showTooltip\">\n <i\n *ngIf=\"action.showIcon\"\n [class]=\"action.iconClass\"\n [ngClass]=\"{ disabled: action.disabledIcon }\"\n (click)=\"\n iconClickedOnStringIconActionType(\n ROW_DATA,\n action.id,\n columnDef.headerInfo[subLineIndex]\n )\n \"\n >\n </i>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'STRING_OR_INPUT'\">\n <ng-container\n *ngIf=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]?.type ==\n 'STRING';\n else inputBox\n \"\n >\n <span\n [innerHtml]=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n ?.value\n \"\n ></span>\n </ng-container>\n <ng-template #inputBox>\n <input\n placeholder=\"{{\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n ?.placeholder\n }}\"\n showEllipsisTextOnHover\n class=\"{{\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n .className\n }}\"\n (keydown)=\"\n changesMadeInEditableInputBox(\n $event,\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey],\n false\n )\n \"\n (paste)=\"\n changesMadeInEditableInputBox(\n $event,\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey],\n true\n )\n \"\n (ngModelChange)=\"\n editableInputValueChanged(\n $event,\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].objectKey\n )\n \"\n [ngModel]=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey].value\n \"\n [disabled]=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n .disabled\n \"\n [ngClass]=\"{\n 'red-border':\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n .hasError\n }\"\n />\n\n <i\n *ngIf=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n .showIcon\n \"\n container=\"body\"\n [ngbTooltip]=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n .iconTooltip\n \"\n tooltipClass=\"gt-total-row-tooltip\"\n placement=\"bottom\"\n class=\"{{\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n .iconClass\n }}\"\n >\n </i>\n <ng-container\n *ngIf=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey][\n 'showSvgIcon'\n ]\n \"\n >\n <anna-core-anna-est-icon-template\n class=\"float-right\"\n *ngIf=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey][\n 'svgIconName'\n ] == 'anna-icon'\n \"\n [placement]=\"'bottom auto'\"\n tooltipClass=\"gt-total-row-tooltip\"\n [ngbTooltip]=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n .iconTooltip\n \"\n container=\"body\"\n >\n </anna-core-anna-est-icon-template>\n </ng-container>\n </ng-template>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'HTML'\">\n <span\n [innerHtml]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\n ></span>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'SINGLE_RADIO'\">\n <span\n *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\n [ngClass]=\"{\n 'disable-checkbox':\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\n }\"\n class=\"mdi mdi-radiobox-marked\"\n (click)=\"(null)\"\n >\n </span>\n <span\n *ngIf=\"!ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\n class=\"mdi mdi-radiobox-blank\"\n [ngClass]=\"{\n 'disable-checkbox':\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\n }\"\n (click)=\"\n selectOrUnselectCheckbox(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].objectKey,\n true\n )\n \"\n >\n </span>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'RADIO'\">\n <mat-radio-group\n *ngIf=\"ROW_DATA['RadioButtonConfig']\"\n [ngModel]=\"ROW_DATA[subline.objectKey]\"\n [disabled]=\"ROW_DATA['RadioButtonConfig'][0].isDisabled\"\n >\n <ng-container\n *ngFor=\"\n let radioButton of ROW_DATA['RadioButtonConfig'];\n let last = last\n \"\n >\n <mat-radio-button\n value=\"{{ radioButton.value }}\"\n class=\"{{ radioButton.class }}\"\n (click)=\"\n radioButtonClicked(\n ROW_DATA,\n radioButton.value,\n ROW_DATA['RadioButtonConfig'][0].isDisabled\n )\n \"\n >{{ radioButton.label }}\n </mat-radio-button>\n <i\n class=\" {{ radioButton.iconClass }}\"\n (click)=\"radioButtonIconClicked(ROW_DATA)\"\n ></i>\n <br *ngIf=\"!last\" />\n </ng-container>\n </mat-radio-group>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'STRING_WITH_TOOLTIP'\">\n <ng-container\n *ngFor=\"\n let action of ROW_DATA[\n columnDef.headerInfo[subLineIndex].actionKey\n ]\n \"\n >\n <span> {{ action?.dataToDisplay }}</span>\n <span\n *ngIf=\"action?.showTooltip\"\n [ngbTooltip]=\"textActionTooltipTemplate\"\n (mouseenter)=\"\n mouseEnterOnStringTextActionType(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].tooltipKey\n )\n \"\n [placement]=\"action?.tooltipPosition\"\n container=\"body\"\n [class]=\"action?.tooltipIconClass\"\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\n [disableTooltip]=\"action?.disableTooltip\"\n >\n </span>\n <span> {{ action?.dataToDisplayAfterTooltip }}</span>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <ng-container *ngIf=\"subline.objectKey != 'description'\">\n <span>{{\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n }}</span>\n <i\n *ngIf=\"\n subline.objectKey == 'inventoryCode' &&\n ROW_DATA['isSellerGroup'] &&\n gtGeneralConfig.component == 'RATING'\n \"\n class=\"mi mdi-info-outline seller-tooltip\"\n [ngbTooltip]=\"sellerHierarchyTooltip\"\n placement=\"bottom auto\"\n container=\"body\"\n [autoClose]=\"true\"\n triggers=\"manual\"\n (hidden)=\"closeTooltip()\"\n #info=\"ngbTooltip\"\n tooltipClass=\"hierarchy-tooltip remove-on-scroll-class\"\n (mouseenter)=\"\n bindTheValueToSellerGroupTooltip(\n ROW_DATA.sellerGroupHierarchy,\n info\n )\n \"\n >\n </i>\n\n <i\n *ngIf=\"\n subline.objectKey == 'displayBookedAverageRating' &&\n gtGeneralConfig.component == 'RATING' &&\n ROW_DATA['showRatingAverageIcon']\n \"\n class=\"mi mdi-info-outline seller-tooltip\"\n placement=\"bottom auto\"\n container=\"body\"\n [autoClose]=\"true\"\n (mouseenter)=\"\n setIsDifference(ROW_DATA.isDifferenceLessThan25Percent)\n \"\n tooltipClass=\"posted-avg-tooltip remove-on-scroll-class\"\n [ngbTooltip]=\"postedRatingDifference\"\n >\n </i>\n\n <i\n *ngIf=\"\n subline.objectKey == 'displayBookedAverageImpression' &&\n gtGeneralConfig.component == 'RATING' &&\n ROW_DATA['showImpressionAverageIcon']\n \"\n class=\"mi mdi-info-outline seller-tooltip\"\n placement=\"bottom auto\"\n container=\"body\"\n [autoClose]=\"true\"\n (mouseenter)=\"\n setIsDifference(ROW_DATA.isDifferenceLessThan25Percent)\n \"\n tooltipClass=\"posted-avg-tooltip remove-on-scroll-class\"\n [ngbTooltip]=\"postedImpDifference\"\n >\n </i>\n </ng-container>\n <ng-container *ngIf=\"subline.objectKey == 'description'\">\n <p\n *ngIf=\"\n ROW_DATA.descriptionMessage ||\n ROW_DATA.descriptionEmailReferenceNum\n \"\n >\n <ng-container *ngIf=\"ROW_DATA.descriptionMessage\">\n {{ ROW_DATA.descriptionMessage }}\n <br />\n </ng-container>\n <ng-container\n *ngIf=\"\n ROW_DATA.descriptionEmailReferenceNum != '-' &&\n ROW_DATA.descriptionEmailReferenceNum != ''\n \"\n >\n Email Ref: {{ ROW_DATA.descriptionEmailReferenceNum }}\n <br />\n </ng-container>\n </p>\n <a\n href=\"{{ ROW_DATA.descriptionDetailsUrl }}\"\n target=\"_blank\"\n *ngIf=\"\n ROW_DATA.descriptionDetailsUrlType === 'PDF' ||\n ROW_DATA.descriptionDetailsUrlType === 'EXCEL'\n \"\n >\n <button class=\"btn viewDetailsAndEmailBtn\">Download</button>\n </a>\n <ng-container\n *ngIf=\"ROW_DATA.activityname.toLowerCase() == 'order onboarded'\"\n >\n <a\n *ngIf=\"ROW_DATA.descriptionDetailsUrlType === 'LINK'\"\n (click)=\"viewDetailsClicked(ROW_DATA)\"\n >\n <button class=\"btn viewDetailsAndEmailBtn order-onboarded\">\n View details\n </button>\n </a>\n </ng-container>\n\n <a\n href=\"{{ ROW_DATA.descriptionEmailUrl }}\"\n target=\"_blank\"\n *ngIf=\"\n ROW_DATA.descriptionEmailUrl != '-' &&\n ROW_DATA.descriptionEmailUrl != ''\n \"\n >\n <button class=\"btn viewDetailsAndEmailBtn\">View email</button>\n </a>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"isNoDataToDisplaySubject$ | async\">\n <div>\n {{ null }}\n </div>\n </ng-container>\n </ng-container>\n </td>\n </ng-container>\n </ng-container>\n </table>\n </div>\n <anna-core-no-data-lib\n [width]=\"noDataWidth\"\n [marginTop]=\"marginTop\"\n *ngIf=\"isNoDataToDisplaySubject$ | async\"\n >\n </anna-core-no-data-lib>\n</div>\n\n<!-- Checkbox template -->\n<ng-template #filterTooltip>\n <anna-core-anna-column-checkbox-filter\n [tableData]=\"tableData\"\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\n [isLurAndCsrComponent]=\"false\"\n [clonedTableData]=\"clonedTableData\"\n [filterTabObjects]=\"filterTabObjects\"\n (filterAppliedToTable)=\"filterApplied($event)\"\n (sortingAppliedToTable)=\"sortingApplied($event)\"\n (closeTooltip)=\"closeTooltip()\"\n >\n </anna-core-anna-column-checkbox-filter>\n</ng-template>\n\n<!-- Slider template -->\n<ng-template #sliderToolTip>\n <anna-core-anna-column-slider-filter\n [tableData]=\"tableData\"\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\n [isLurAndCsrComponent]=\"false\"\n [clonedTableData]=\"clonedTableData\"\n [filterTabObjects]=\"filterTabObjects\"\n (filterAppliedToTable)=\"filterApplied($event)\"\n (sortingAppliedToTable)=\"sortingApplied($event)\"\n (closeTooltip)=\"closeTooltip()\"\n >\n </anna-core-anna-column-slider-filter>\n</ng-template>\n\n<!-- Date Picker Template -->\n<ng-template #datePickerTooltip>\n <anna-core-anna-column-date-range-filter\n [tableData]=\"tableData\"\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\n [isLurAndCsrComponent]=\"false\"\n [clonedTableData]=\"clonedTableData\"\n [filterTabObjects]=\"filterTabObjects\"\n (filterAppliedToTable)=\"filterApplied($event)\"\n (sortingAppliedToTable)=\"sortingApplied($event)\"\n (closeTooltip)=\"closeTooltip()\"\n >\n </anna-core-anna-column-date-range-filter>\n</ng-template>\n\n<!-- Week Picker Template -->\n<ng-template #weekPickerToolTip>\n <!-- <div class=\"weekpicker-container\">\n <anna-core-week-calendar-filter-lib\n [week-calendar-config]=\"gtGeneralConfig.multiWeekPickerConfig\"\n (apply)=\"applyWeekFilter($event)\"\n [from-date]=\"calendarMinEnabledDate\"\n [to-date]=\"calendarMaxEnabledDate\"\n >\n </anna-core-week-calendar-filter-lib>\n </div> -->\n</ng-template>\n\n<!-- Time Filter Template -->\n<ng-template #timeFilterToolTip>\n <anna-core-anna-column-time-filter\n [tableData]=\"tableData\"\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\n [isLurAndCsrComponent]=\"false\"\n [showAllTimeRangeCheckboxes]=\"showCheckboxesForTimeFilter\"\n [clonedTableData]=\"clonedTableData\"\n [filterTabObjects]=\"filterTabObjects\"\n (filterAppliedToTable)=\"filterApplied($event)\"\n (sortingAppliedToTable)=\"sortingApplied($event)\"\n (closeTooltip)=\"closeTooltip()\"\n >\n </anna-core-anna-column-time-filter>\n</ng-template>\n\n<ng-template #columnInfoTooltip>\n <p style=\"color: black; white-space: nowrap\">This preemption is rejected and not marked for credit.</p>\n</ng-template>\n\n<ng-template #ratingInfoTooltip>\n <p class=\"first-row\">Shows 'Booked Rating' for Preemptions & MakeGood Offered spot(s).</p>\n <p class=\"second-row\">Shows 'Projected Rating' for ADU Offered spot(s).</p>\n</ng-template>\n\n<ng-template #impsInfoTooltip>\n <p class=\"first-row\">Shows 'Booked IMPS' for Preemptions & MakeGood Offered spot(s).</p>\n <p class=\"second-row\">Shows 'Projected IMPS' for ADU Offered spot(s).</p>\n</ng-template>\n\n<ng-template #spotsColumnEquivalizationMessageTooltip>\n <p class=\"spot-column-tooltip-message\">\n This consists of equivalized spots and un-equivalized Paid Programs & un-equivalized Non-spots.\n </p>\n</ng-template>\n\n<ng-template #underDeliveryTooltip>\n <p class=\"spot-column-tooltip-message\">\n Indicates the Under-delivery percentage based on booked and posted RTG/IMPS.\n </p>\n</ng-template>\n\n<ng-template #overDeliveryTooltip>\n <p class=\"spot-column-tooltip-message\">\n Indicates the Over-delivery percentage based on booked and posted RTG/IMPS.\n </p>\n</ng-template>\n\n<ng-template #rateInfoTooltip>\n <p class=\"first-row\">Shows 'Booked Rate' for Preemptions & MakeGood Offered spot(s).</p>\n <p class=\"second-row\">Shows 'Projected $ Value' for ADU Offered spot(s).</p>\n</ng-template>\n\n<ng-template #sellerHierarchyTooltip>\n <ng-container *ngIf=\"sellerGroupHierarchy.length > 0\">\n <section class=\"hierarchy-table-container\">\n <table class=\"seller-hierarchy-table\">\n <thead>\n <tr>\n <th>#</th>\n <th>Inventory Codes</th>\n <th>Program/Description</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let data of sellerGroupHierarchy; let tooltipIndex = index\">\n <td>{{ tooltipIndex + 1 }}</td>\n <td>\n <span showEllipsisTextOnHover>{{ data.InventoryCode }}</span>\n </td>\n <td>\n <span showEllipsisTextOnHover>{{ data.Program }}</span>\n </td>\n </tr>\n </tbody>\n </table>\n </section>\n </ng-container>\n <ng-container *ngIf=\"sellerGroupHierarchy.length == 0\">\n <span style=\"color: #000\">Seller group not available for this inventory code</span>\n </ng-container>\n</ng-template>\n\n<ng-template #lurViolationInfoTooltip>\n <p class=\"first-row\">The values are for the entire week.</p>\n</ng-template>\n\n<ng-template #postedRatingDifference>\n <p class=\"difference-text\">\n The difference between posted and booked average rating is\n {{ isDifferenceLessThan25Percent ? \"less\" : \"more\" }} than 25%.\n </p>\n</ng-template>\n\n<ng-template #postedImpDifference>\n <p class=\"difference-text\">\n The difference between posted and booked average impression is\n {{ isDifferenceLessThan25Percent ? \"less\" : \"more\" }} than 25%.\n </p>\n</ng-template>\n\n<ng-template #ongoingRevBookedColumnTooltip>\n <p>The Booked $ value, Spots, GRP, CPP, IMPS, CPM corresponds on the last permanent revision generated</p>\n</ng-template>\n\n<ng-template #completedRevBookedColumnTooltip>\n <p>The Booked $ value corresponds on the last permanent revision generated</p>\n</ng-template>\n\n<ng-template #avgBookedRate>\n <p>This is the booked average Rate</p>\n</ng-template>\n\n<ng-template #avgBookedRtg>\n <p>This is the booked average RTG</p>\n</ng-template>\n\n<ng-template #avgBookedImps>\n <p>This is the booked average IMP(\u2019000)</p>\n</ng-template>\n\n<ng-template #projectedImpsRtg>\n <p>\n All projections are derived from the sum of actual posted information until the last posted date and estimates\n for the remaining selected period.\n </p>\n</ng-template>\n\n<ng-template #automationTooltip>\n <p>\n Please get the order business rules approved to activate the order for automation. Only for the\n automation-activated orders, any approved MGs, ADUs, or credited spots on ANNA will be fed into the traffic\n system i.e. ANNA revisions.\n <!-- removed below line as part of enhancmennt in 14.0 releas -->\n <!-- Additionally, ANNA will only enter buyer revisions into traffic for the selected\n Medialine/WOC orders. -->\n </p>\n</ng-template>\n\n<ng-template #rebateImpact>\n <p>Rebate impact value is for the originally ordered spot length and is not equivalized.</p>\n</ng-template>\n\n<ng-template #lurViolationTotalRowToolTip>\n <ul>\n <li>\n <strong>POLITICAL RATE VIOLATIONS:</strong>\n Violations flagged when non-political spots are booked at a rate lower than the minimum booked rate for\n political candidates for the same week, Inventory Code and Revenue Class.\n </li>\n <li>\n <strong>CANDIDATE TO CANDIDATE VIOLATION:</strong>\n Violations flagged when political spots are booked at different rates to other political spots for the same\n week, Inventory Code and Revenue Class.\n </li>\n </ul>\n</ng-template>\n\n<ng-template #circularProgressBar>\n <circle-progress\n [percent]=\"percentDone\"\n [radius]=\"5\"\n [showTitle]=\"false\"\n [showUnits]=\"false\"\n [showSubtitle]=\"false\"\n [outerStrokeWidth]=\"3\"\n [innerStrokeWidth]=\"3\"\n [space]=\"-3\"\n [outerStrokeColor]=\"'#268bff'\"\n [innerStrokeColor]=\"'#d5d5d5'\"\n [animationDuration]=\"10\"\n ></circle-progress>\n</ng-template>\n\n<ng-template #userLoggedInDetails>\n <div class=\"tooltip-div-container\">\n <ng-container *ngFor=\"let data of textActionTooltip\">\n <span *ngIf=\"data.key != 'read'\">\n {{ data.key }} <b> {{ data.value }}</b>\n </span>\n <span *ngIf=\"data.key == 'read'\">\n {{ data.value }}\n </span>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #markAsReadTip>\n <div class=\"notification-tooltip-div-container\">\n <ng-container *ngFor=\"let data of textActionTooltip\">\n {{ data.value }}\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #textActionTooltipTemplate>\n <ng-container *ngFor=\"let data of textActionTooltip\">\n {{ data.key }} <b> {{ data.value }}</b>\n </ng-container>\n</ng-template>\n\n<ng-template #tooltipContainingTableTemplate>\n <div\n *ngIf=\"tooltipContainingTable\"\n [innerHTML]=\"tooltipContainingTable.innerHtml\"\n class=\"notification-tooltip-div-container\"\n >\n <!-- <ul>\n <li *ngFor=\"let headerMsg of tooltipContainingTable.tableHeaderMsg\">\n <b> {{headerMsg}} </b>\n </li>\n </ul>\n\n <table class=\"tooltip-table\">\n <thead>\n <tr>\n <th *ngFor=\"let header of tooltipContainingTable.tooltipTableHeader\">\n {{ header}}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let rows of tooltipContainingTable.tooltipTableBody\">\n <td *ngFor=\"let data of rows\">\n {{ data }}\n </td>\n </tr>\n </tbody>\n </table>\n\n <ul>\n <li style=\"margin-top:10px; padding:0\" *ngFor=\"let footerMsg of tooltipContainingTable.tableFooterMsg\">\n {{ footerMsg }} \n </li>\n </ul> -->\n </div>\n</ng-template>\n<!-- <ng-template #textActionTooltipTemplate>\n <ng-container *ngFor=\"let data of textActionTooltip\">\n {{ data.key }} <b> {{data.value}}</b>\n </ng-container>\n</ng-template> -->\n", styles: [".sort-btn{background:#fff;border:none;border-right:1px solid #1b88ff;text-decoration:underline;font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.07;letter-spacing:normal;color:#1b88ff;cursor:pointer;flex:1;text-align:center}.sort-btn:last-of-type{border-right:none}.sort-btn.active{color:#202b47;text-decoration:none}p.sort-container{margin-top:8px;padding-bottom:8px;border-bottom:1px solid #e6e6e6;margin-bottom:0;display:flex}::ng-deep .tooltip-inner{max-height:22rem;background-color:#fff;border:1px solid white;border-radius:5px;box-shadow:0 2px 2px #0000003d,0 0 2px #0000001f;max-width:251px;width:100%;padding:0!important}::ng-deep .tooltip-inner div.radio-container{flex-wrap:wrap}::ng-deep .md-drppicker{box-shadow:unset!important}::ng-deep .available{color:#999}::ng-deep .bs-tooltip-bottom .arrow:before{border-bottom-color:#fff!important}::ng-deep .bs-tooltip-left .arrow:before{border-left-color:#fff!important}::ng-deep .tooltip.show{opacity:1}.input{text-align:left;margin:5px 10px 5px 5px;display:flex;align-items:center;width:230px;white-space:nowrap}.data{color:#000;font-weight:700;margin-left:5px;margin-right:5px}span.data{display:inline-block;text-overflow:ellipsis;white-space:pre;width:100%;overflow:hidden}.check-box{font-size:14px;cursor:pointer;position:relative;top:-1px}span.mdi-filter.active{color:#000;opacity:1!important;pointer-events:all!important}p{margin-bottom:0;line-height:initial}span.mdi-filter{color:#cbcbcb}::ng-deep .ngx-slider-pointer{top:-5px!important;width:12px!important;height:12px!important;background:#bdbdbd!important;border:1px solid #ffffff!important;box-shadow:0 1px 3px #0000004d!important;border-radius:16px!important}input:focus{outline:none}input::placeholder{color:#c8c8c8}.cancel-btn{background:#c7e1ff;color:#268bff}.apply-btn{background:#268bff;color:#fff;margin-left:.3125rem}div.radio-container{display:flex;white-space:nowrap;justify-content:space-between;background-color:#f4f4f4;border-radius:.125rem;margin:.4375rem .4375rem .25rem}div.radio-container div{flex:1;width:50%}div.radio-container div.full-width{width:100%}div.radio-container input{position:relative;top:.125rem;margin-right:.25rem}div.radio-container label{font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.29;letter-spacing:0;color:#4a4a4a;margin:0;padding-left:.125rem}div.radio-container label:first-of-type{margin-right:.188rem}div.radio-container input[type=radio]{appearance:none;display:inline-block;width:.9375rem;height:.9375rem;padding:.125rem;background-clip:content-box;border:.125rem solid #268bff;background-color:transparent;border-radius:50%}div.radio-container input[type=radio]:checked{background-color:#268bff}.checkbox-filter-buttons-container{padding:0 8px!important}.buttons-container{display:flex;margin:0px auto .4375rem;justify-content:center;padding:0 12px}.buttons-container .button{padding:0 10px;width:100%;margin:8px 0 0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.buttons-container button:last-of-type{background-color:#268bff;color:#fff;margin-left:.5rem}.buttons-container button.disabled{background:#bdbdbd;opacity:.5;color:#4a4a4a}.button{display:inline-block;margin:8px 4px 0 8px;padding:0 16px;border-radius:4px;text-align:center;outline:none;font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.67;letter-spacing:normal;border:none;color:#268bff;background-color:#e5f1ff}.search-box{display:flex;align-items:center;color:#c8c8c8;border:1px solid #e6e6e6;border-radius:.125rem;margin:.25rem .4375rem .188rem;height:1.5rem;padding:.188rem 8px .188rem .5rem}.search-box .search-bar-close{margin-left:auto;float:right}.search-icon{margin:0 4px 0 0;font-size:1.125rem;color:#9b9b9b}.filter-icon{justify-content:right;margin-left:auto;color:#d4d4d4;color:#a1a1a1;font-size:16px;cursor:pointer}.data{margin:0 13px 0 8px;font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.86;letter-spacing:\"\";color:#4a4a4a}.search-input{margin:1px 0 1px 4px;font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;color:#c8c8c8;width:calc(100% - 38px)}.check-box{color:#268bff}.tooltip-data-container{overflow-y:scroll;max-height:8rem}.searchbar{width:100%;display:flex;justify-content:flex-end;align-items:flex-end}.clear-button{opacity:.5;font-family:Roboto;font-size:.9375rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;text-decoration:underline;border:none;background-color:#fff;color:#4a4a4a;margin-left:.625rem;padding:0}.clear-button:focus{outline:none;box-shadow:none}.unchecked{color:#268bff}cdk-virtual-scroll-viewport.dropdown-data-container{max-height:12.3rem;width:100%;overflow-y:auto;overflow-x:hidden}cdk-virtual-scroll-viewport.dropdown-data-container p.input{margin-left:0}cdk-virtual-scroll-viewport.dropdown-data-container p.input span.mi{padding-left:.4375rem}cdk-virtual-scroll-viewport.dropdown-data-container p.input:hover{background-color:#ebebeb;cursor:pointer}cdk-virtual-scroll-viewport.dropdown-data-container::-webkit-scrollbar{width:.188rem}cdk-virtual-scroll-viewport.dropdown-data-container::-webkit-scrollbar-thumb{color:#d3d3d3;background:#d3d3d3}section.min-maxContainer{display:flex;justify-content:center;margin-bottom:-.125rem;margin-top:.5rem;width:100%}section.min-maxContainer input{width:30%;height:1.875rem;border:1px solid lightgray;color:gray}section.min-maxContainer span{display:inline-block;padding-left:.5rem;padding-right:.5rem;position:relative;top:.3125rem;color:#666}.time-container{width:100%;display:flex;padding:0 .75rem}.time-container input.form-control:disabled{background-color:#fff;width:2.813rem}.time-container input.numberInput:focus{box-shadow:none;border-color:#c2cfd6}.time-container .dot{color:#cbcbcb;position:relative;left:-7px;font-size:17px}.time-container div.arrow-container{flex-direction:column;display:flex;margin-top:.375rem;width:9px;height:18px;margin-right:1.1875rem}.time-container div.arrow-container i{color:#000;cursor:pointer;max-height:9px;font-size:25px;width:10px}.time-container div.arrow-container i:before{width:0;height:0;pointer-events:none;position:relative;left:-9px;top:-11px}.mdi-filter{cursor:pointer}.time-label-container{display:flex;justify-content:flex-start}.time-label-container label{margin-bottom:0;color:#4a4a4a;margin-top:.125rem;margin-left:.625rem;font-weight:700}.time-heading{color:#000;font-size:.8125rem;text-align:left;padding-left:.625rem;margin-top:.625rem;font-weight:700}.column-clear-all{width:94%;text-align:center;border:none;font-size:14px;background:none;text-decoration:underline;color:#268bff}.checkbox-container{display:flex;padding-inline:.625rem}.checkbox-container .data{text-align:left}.checkbox-container:first-of-type{margin-top:.625rem;font-weight:500}.column-clear-all{width:94%;text-align:center;border:none;background:none;text-decoration:underline;color:#268bff}.column-clear-all:disabled{opacity:.5;color:#4a4a4a;font-weight:400}.column-clear-all.align-center{text-align:center}span.mdi-filter-variant.disabled{pointer-events:none;opacity:.5}.datepicker-container{width:100%}span.mdi-filter-variant{color:#cbcbcb;cursor:pointer;font-size:.875rem}span.mdi-filter-variant.active{color:#000}p.filter-tab{font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.29;letter-spacing:normal;color:#1b88ff;border-radius:5px;background-color:#f4f4f4;padding-inline:8px;cursor:pointer;overflow:hidden;text-align:center;text-overflow:ellipsis}p.filter-tab.active{color:#fff;background-color:#1b88ff}button.filter-text-btn{background:#fff;text-decoration:underline;font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;border:none;color:#268bff;margin-inline:4px;margin-top:2px}button.filter-text-btn:disabled{color:#b1b1b1;cursor:not-allowed}::ng-deep .non-edit-datepicker-tooltip .tooltip-inner{max-width:310px!important;width:283px!important;overflow-y:initial!important;padding:0!important}input.slider-text::-webkit-outer-spin-button,input.slider-text::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input.slider-text{-moz-appearance:textfield}input.slider-text.red-border{border:1px solid #f44336!important}::ng-deep .checkbox-sort p.sort-container{margin-top:8px!important;padding-bottom:8px!important}i.mdi-close{cursor:pointer}i.mdi-close.disable-close-icon{pointer-events:none;cursor:not-allowed}input.error-border{border:1px solid #f44336!important}::ng-deep .non-edit-checkbox-tooltip .tooltip-inner{width:238px!important;padding:0!important}::ng-deep .non-edit-slider-tooltip .tooltip-inner{width:238px!important;padding:0!important}::ng-deep .non-edit-time-tooltip .tooltip-inner{width:250px!important;padding:0!important}::ng-deep .non-edit-time-tooltip.bs-tooltip-start{padding:.4rem}::ng-deep .non-edit-time-tooltip.bs-tooltip-start .tooltip-arrow{right:0;top:5px!important;width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}::ng-deep .non-edit-time-tooltip.bs-tooltip-start .tooltip-arrow:before{border-left-color:#fff;left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height)}::ng-deep .no-bottom-border p.sort-container{border-bottom:none!important}::ng-deep .ngx-slider-pointer-min:after{display:none}::ng-deep .ngx-slider-pointer-max:after{display:none}::ng-deep .ngx-slider span.ngx-slider-pointer{width:12px;height:12px;top:-5px;background-color:#bdbdbd}::ng-deep .ngx-slider span.ngx-slider-bar{height:3px;background:#ededed}::ng-deep .ngx-slider span.ngx-slider-selection{background:#bdbdbd}::ng-deep .ngx-slider span.ngx-slider-bubble{bottom:-22px;font-size:12px;color:#333}::ng-deep .show-min.ngx-slider span.ngx-slider-model-value{background:#fff;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003}::ng-deep .show-max.ngx-slider span.ngx-slider-model-high{background:#fff;box-shadow:none}::ng-deep .ngx-slider span.ngx-slider-combined{background:#fff;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003}::ng-deep .ngx-slider{top:10px!important;margin:5px 0 2px!important}::ng-deep .ngx-slider-animate{top:0!important}.sidebar-slider{margin-bottom:35px!important;margin-left:5px;margin-right:5px}.slider-placeholder{height:14px}::ng-deep .filter-calendar select.form-select:focus{border-color:#c2cfd6;box-shadow:none}::ng-deep .filter-calendar select.form-select{background-color:#fff}.no-data-case{padding-left:.4375rem!important;font-size:.875rem!important;margin-top:10px!important;cursor:pointer}.check-mark,.unread-mark{cursor:pointer}.on-hover:hover .unread-mark,.notificationHover .check-mark{opacity:0;cursor:pointer}.on-hover:hover .check-mark{opacity:1;cursor:pointer}:host ::ng-deep .gt{table-layout:fixed;margin-bottom:0;width:100%}:host ::ng-deep .gt th,:host ::ng-deep .gt td{padding:2px 8px;line-height:normal}:host ::ng-deep .gt thead tr th .upper-label{font-family:Roboto;font-size:.6875rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:.3px;color:#4a4a4a;margin-bottom:0}:host ::ng-deep .gt thead tr th .lower-label{font-family:Roboto;font-size:.6875rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:.3px;color:#a7a7a7;margin-bottom:0}:host ::ng-deep .gt thead tr th{background-color:#ededed;position:sticky;position:-webkit-sticky;top:0;border-top:none!important;border-bottom:none!important;outline:none!important;box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4}:host ::ng-deep .gt thead tr th br{display:block;content:\"\";margin-top:-8px}:host ::ng-deep .gt thead tr th div.row{display:flex;flex-wrap:nowrap;justify-content:space-between;align-items:center;width:max-content}:host ::ng-deep .gt thead tr th div.sort-filter-container{display:flex;flex-wrap:nowrap;align-items:center;margin-left:.25rem;margin-right:auto}:host ::ng-deep .gt thead tr th span.mdi-filter-variant{font-size:13px!important;top:-1px!important;position:relative}:host ::ng-deep .gt thead tr th:first-of-type{box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4,inset 1px 0 #d4d4d4}:host ::ng-deep .gt tbody tr td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}:host ::ng-deep .gt tbody tr td:nth-of-type(n+2){box-shadow:inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}:host ::ng-deep .gt tbody tr td .upper-label{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:0px;color:#000;display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .gt tbody tr td .lower-label{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:0px;color:#a7a7a7;display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .gt tbody tr br{display:block;content:\"\";margin-top:-8px}:host ::ng-deep .gt tbody tr:nth-of-type(1) td{border-top:none!important}:host ::ng-deep .gt .custom-column-checkbox-checked,:host ::ng-deep .gt .custom-column-checkbox-unchecked{font-size:.875rem;cursor:pointer}:host ::ng-deep .gt .custom-column-checkbox-checked{color:#268bff}:host ::ng-deep .gt .custom-column-checkbox-unchecked{color:#4a4a4a}:host ::ng-deep .bottom-border .gt tbody tr:last-of-type td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4}:host ::ng-deep .bottom-border .gt tbody tr:last-of-type td:nth-of-type(n+2){box-shadow:inset -1px 0 #d4d4d4}.table-container{overflow-x:auto;overflow-y:auto}.rowSelectCheckbox,#selectAllRowsCheckbox{cursor:pointer}.disable-checkbox{color:#dedede!important;pointer-events:none!important}.mdi-warning{color:#f3c639;font-size:16px;line-height:28px}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{opacity:1}.redcolor-status{color:#c62a2a}#no-filter-space{width:.875rem}::ng-deep .mat-button-toggle-appearance-standard .mat-button-toggle-label-content{line-height:1.875rem!important;width:2.625rem;padding:0 .625rem}input.numberInput{margin-right:-.8125rem;padding:0 0 0 .625rem;height:1.875rem}::ng-deep .mat-button-toggle-checked{background-color:#268bff!important;color:#fff!important}::ng-deep .mat-button-toggle-group-appearance-standard{border-radius:0}.hidden{display:none}.no-data-div{margin-top:2.5px}.no-data-div label{margin:0;width:auto;font-weight:500;background-color:#d3d3d3;padding:.3125rem 1.125rem;border-radius:.25rem}.column-values:nth-of-type(2){color:#a7a7a7!important}.custom-column-checkbox-checked,.custom-column-checkbox-unchecked{font-size:.875rem;cursor:pointer}.custom-column-checkbox-checked{color:#268bff}.custom-column-checkbox-unchecked{color:#4a4a4a}.time-filter-checkboxes>div>p{color:#151b1e}::ng-deep .margin-bottom-zero .mat-radio-label{margin-bottom:0}:host ::ng-deep mat-radio-group br{margin-top:0!important}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio__background{width:var(--mat-radio-size);height:var(--mat-radio-size)}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio__inner-circle{border-width:calc(var(--mat-radio-size) / 2)}:host ::ng-deep mat-radio-group mat-radio-button .mdc-form-field>label{margin:0 0 0 4px;padding:0;top:-2px;position:relative}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio--disabled+label{color:var(--primary-text-color-dark)!important}:host ::ng-deep mat-radio-group mat-radio-button.mat-mdc-radio-button .mdc-form-field .mdc-radio{padding:0}:host ::ng-deep mat-radio-group mat-radio-button .mdc-form-field>label{left:-94px;font-size:12px;color:#4a4a4a;position:relative}::ng-deep .reject.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ff0}::ng-deep .reject.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:#ff0}::ng-deep .resubmit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ff0}::ng-deep .resubmit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:#ff0}::ng-deep .noAction.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:green}::ng-deep .noAction.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:green}::ng-deep .approve.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:green}::ng-deep .approve.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:green}::ng-deep .credit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:red}::ng-deep .credit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:red}::ng-deep .mat-radio-button.mat-radio-disabled .mat-radio-outer-circle{border-color:#00000061!important}::ng-deep .mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-inner-circle{background-color:#00000061!important}::ng-deep tr.white-background-row{background:#fff}::ng-deep tr.gray-background-row{background:#e9e9e980!important}.remarks-tooltip,.mdi-information,.mdi-information-outline,.seller-tooltip{font-size:.875rem;color:#268bff;position:relative;top:.1875rem;cursor:pointer}.seller-tooltip{top:-1px;float:right}::ng-deep .remarks-info-tooltip .tooltip-inner{max-width:19.25rem!important}.rating-icon,.lur-violation-icon{color:#268bff;cursor:pointer;position:relative;left:-2px}::ng-deep .rating-info-tooltip .tooltip-inner{max-width:800px!important}.spots-info-icon{color:#268bff;cursor:pointer;margin:1px 2px 0 -14px}.spots-info-icon-ol{color:#268bff;cursor:pointer;margin:1px 4px 0 -2px}::ng-deep .spot-info-tooltip .tooltip-inner{position:relative;max-width:220px!important;background:#fff;word-break:break-word;display:flex}::ng-deep .spot-info-tooltip-for-orderlisting-table .tooltip-inner{max-width:220px!important;background:#fff;word-break:break-word;display:flex}p.first-row{padding:.5rem .5rem 0;color:#000;white-space:nowrap;text-align:left}p.second-row{padding:2px .5rem .5rem;color:#000;white-space:nowrap;text-align:left}::ng-deep .gt-total-row-tooltip{opacity:1!important}::ng-deep .gt-total-row-tooltip .tooltip-inner{color:#000;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;background-color:#fff;padding:4px!important;width:100%;border-radius:2px!important}::ng-deep .gt-total-row-tooltip .arrow:before{border-top-color:#fff!important}.info-label{margin-left:4px;color:#268bff;vertical-align:text-top}::ng-deep .hierarchy-tooltip{max-width:-moz-fit-content;max-width:fit-content;width:310px!important}::ng-deep .hierarchy-tooltip .tooltip-inner{padding:4px!important;max-width:22.75rem;max-height:11.25rem}table.seller-hierarchy-table{table-layout:fixed}table.seller-hierarchy-table tr th{font-family:Roboto;font-size:.75rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:1.67;letter-spacing:normal;color:#5e5e5e;white-space:nowrap;background:#ededed;position:sticky;box-shadow:inset 0 1px #d4d4d4;top:0;z-index:1}table.seller-hierarchy-table tr th:nth-child(1){width:20px}table.seller-hierarchy-table tr th:first-of-type,table.seller-hierarchy-table tr td:first-of-type{width:20px;border-left:1px solid #d4d4d4}table.seller-hierarchy-table tr th:last-of-type,table.seller-hierarchy-table tr td:last-of-type{border-right:1px solid #d4d4d4;width:7.875rem!important}table.seller-hierarchy-table tr th:nth-of-type(2){width:7.75rem!important}table.seller-hierarchy-table tr td{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;color:#4a4a4a;box-shadow:none!important;border-top:1px solid #d4d4d4;border-bottom:1px solid #d4d4d4}table.seller-hierarchy-table tr td:nth-of-type(2),table.seller-hierarchy-table tr td:nth-of-type(3){padding-top:.25rem}table.seller-hierarchy-table tr td span{display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;position:relative}section.hierarchy-table-container{max-height:8.75rem;overflow:auto}section.hierarchy-table-container::-webkit-scrollbar-track{margin-top:1.5rem}.difference-text{padding:.5rem;color:#000;text-align:left}::ng-deep .posted-avg-tooltip .tooltip-inner{width:13.8125rem!important}::ng-deep .drrBooked-info-tooltip{transform:translate(26px,6px)}::ng-deep .drrBooked-info-tooltip .tooltip-inner{max-width:307px!important;width:242px!important;background:#fff;word-break:break-word;display:flex;padding:4px!important;text-align:left}::ng-deep .drrBooked-info-tooltip .tooltip-inner p{color:#000}::ng-deep .drrBooked-info-tooltip .arrow:before{border-right-color:#fff!important}.clickable-data{cursor:pointer;color:#268bff!important;display:flex!important;align-items:center}.clickable-data .spot-details-download-icons{font-size:12px}.disabled-clickable-data{pointer-events:none;color:#d4d4d4!important}.spot-column-tooltip-message{color:#000;width:max-content;text-align:left}div.spinner-for-button-directive{position:relative;left:-1px}.clickable-row table tr.mat-row td{cursor:pointer!important}.tooltip-div-container{text-align:left!important;padding:12px 4px;color:#4a4a4a!important;font-size:12px!important;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}.notification-tooltip-div-container{text-align:left!important;padding:6px 8px;color:#4a4a4a!important;font-size:12px!important;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}.mdi-information,.mdi-information-outline{left:3px;top:1px}.mdi-information-outline{position:static}::ng-deep .team-user-tooltip.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .team-user-tooltip .tooltip-inner{opacity:1!important;width:-moz-fit-content!important;width:fit-content!important;max-width:520px;border-radius:2px;padding:0 4px!important}::ng-deep .team-user-tooltip .tooltip-inner .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:#fff!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .gt-icon-column-tooltip{opacity:1!important}::ng-deep .gt-icon-column-tooltip .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:#fff!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .gt-icon-column-tooltip.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .gt-icon-column-tooltip .tooltip-inner{width:100%}::ng-deep .tooltip-containing-table{opacity:1!important}::ng-deep .tooltip-containing-table .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:#fff!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .tooltip-containing-table.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .tooltip-containing-table li{margin:0!important;padding:0!important}::ng-deep .tooltip-containing-table ul{margin:0!important;padding-left:8px!important}::ng-deep .tooltip-containing-table .tooltip-inner{width:100%;max-width:230px}table.tooltip-table{table-layout:fixed;margin:4px 0 0;width:100%}table.tooltip-table th,table.tooltip-table td{padding:2px 8px;line-height:normal}table.tooltip-table thead tr th:first-of-type{box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4,inset 1px 0 #d4d4d4!important;border:none}table.tooltip-table thead tr th{color:#5e5e5e!important;font-size:12px;font-weight:500;font-family:Roboto;line-height:1.67;background-color:#ededed;border-top:none!important;border-bottom:none!important;outline:none!important;box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4}table.tooltip-table thead tr th div.row{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center}table.tooltip-table tbody tr td{color:#5e5e5e!important;font-size:12px;font-weight:500;font-family:Roboto;line-height:1.67}table.tooltip-table tbody tr td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}table.tooltip-table tbody tr td:nth-of-type(n+2){box-shadow:inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}.bottom-border{border-bottom:1px solid #d4d4d4!important}i.disabled{pointer-events:none!important}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i4.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i4.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i4.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i4.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i4.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i4.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i4.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i4.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i4.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i4.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "popperOptions", "triggers", "positionTarget", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { kind: "ngmodule", type: NgxSkeletonLoaderModule }, { kind: "component", type: i5.NgxSkeletonLoaderComponent, selector: "ngx-skeleton-loader", inputs: ["count", "loadingText", "appearance", "animation", "ariaLabel", "theme"] }, { kind: "directive", type: showEllipsisTextOnHoverDirective, selector: "[showEllipsisTextOnHover]" }, { kind: "directive", type: NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: AnnaIconColumnComponent, selector: "anna-core-anna-icon-column", inputs: ["componentName", "iconToShow", "dataObject"], outputs: ["onColumnIconClicked"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatRadioModule }, { kind: "directive", type: i7.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { kind: "component", type: i7.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { kind: "directive", type: NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: AnnaNoDataComponent, selector: "anna-core-no-data-lib", inputs: ["width", "marginTop"] }, { kind: "component", type: AnnaColumnCheckboxFilterComponent, selector: "anna-core-anna-column-checkbox-filter", inputs: ["showFilterHeaderTabs", "isLurAndCsrComponent", "tableData", "clonedTableData", "filterTabObjects"], outputs: ["filterAppliedToTable", "sortingAppliedToTable", "getSortType", "closeTooltip"] }, { kind: "component", type: AnnaColumnSliderFilterComponent, selector: "anna-core-anna-column-slider-filter", inputs: ["filterTabObjects", "isLurAndCsrComponent", "tableData", "showFilterHeaderTabs", "clonedTableData"], outputs: ["closeTooltip", "filterAppliedToTable", "getSortType", "sortingAppliedToTable"] }, { kind: "component", type: AnnaColumnDateRangeFilterComponent, selector: "anna-core-anna-column-date-range-filter", inputs: ["tableData", "clonedTableData", "filterTabObjects", "isLurAndCsrComponent", "showFilterHeaderTabs"], outputs: ["filterAppliedToTable", "sortingAppliedToTable", "getSortType", "closeTooltip"] }, { kind: "component", type: AnnaColumnTimeFilterComponent, selector: "anna-core-anna-column-time-filter", inputs: ["tableData", "clonedTableData", "filterTabObjects", "showFilterHeaderTabs", "showAllTimeRangeCheckboxes", "isLurAndCsrComponent", "gtGeneralConfig", "showClearAllFilter", "startFromText", "endToText", "isSortAndFilterAbsent"], outputs: ["timeChanges", "filterAppliedToTable", "sortingAppliedToTable", "getSortType", "closeTooltip"] }, { kind: "ngmodule", type: NgCircleProgressModule }, { kind: "component", type: i8.CircleProgressComponent, selector: "circle-progress", inputs: ["name", "class", "backgroundGradient", "backgroundColor", "backgroundGradientStopColor", "backgroundOpacity", "backgroundStroke", "backgroundStrokeWidth", "backgroundPadding", "radius", "space", "percent", "toFixed", "maxPercent", "renderOnClick", "units", "unitsFontSize", "unitsFontWeight", "unitsColor", "outerStrokeGradient", "outerStrokeWidth", "outerStrokeColor", "outerStrokeGradientStopColor", "outerStrokeLinecap", "innerStrokeColor", "innerStrokeWidth", "titleFormat", "title", "titleColor", "titleFontSize", "titleFontWeight", "subtitleFormat", "subtitle", "subtitleColor", "subtitleFontSize", "subtitleFontWeight", "imageSrc", "imageHeight", "imageWidth", "animation", "animateTitle", "animateSubtitle", "animationDuration", "showTitle", "showSubtitle", "showUnits", "showImage", "showBackground", "showInnerStroke", "clockwise", "responsive", "startFromZero", "showZeroOuterStroke", "lazy", "options"], outputs: ["onClick"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
728
+ }
729
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AnnaNonEditableGenericTableComponent, decorators: [{
730
+ type: Component,
731
+ args: [{ selector: 'anna-core-non-editable-generic-table-lib', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
732
+ NgClass,
733
+ NgStyle,
734
+ MatTableModule,
735
+ NgFor,
736
+ NgIf,
737
+ NgTemplateOutlet,
738
+ NgbTooltip,
739
+ NgxSkeletonLoaderModule,
740
+ showEllipsisTextOnHoverDirective,
741
+ NgSwitch,
742
+ NgSwitchCase,
743
+ AnnaIconColumnComponent,
744
+ FormsModule,
745
+ MatRadioModule,
746
+ NgSwitchDefault,
747
+ AnnaNoDataComponent,
748
+ AnnaColumnCheckboxFilterComponent,
749
+ AnnaColumnSliderFilterComponent,
750
+ AnnaColumnDateRangeFilterComponent,
751
+ AnnaColumnTimeFilterComponent,
752
+ NgCircleProgressModule,
753
+ AsyncPipe,
754
+ ], template: "<div\n id=\"generic-table-conatiner\"\n class=\"table-container {{ gtGeneralConfig?.tableOuterContainerName }} {{ tableBottomBorderClass }}\"\n [ngClass]=\"{\n 'scroll-left-shadow-effect': isScrolledLeft,\n 'clickable-row': clickableRow,\n 'no-data-table': (isNoDataToDisplaySubject$ | async)\n }\"\n (scroll)=\"onTableContainerScroll($event)\"\n>\n <div\n [class]=\"gtGeneralConfig.tableContainerName\"\n class=\"horizontal-scroll-for-table-container\"\n [ngStyle]=\"{\n height:\n tableData.length < maximumRowsWhichCanBeRenderedWithoutScroll\n ? 'calc(' +\n (gtDimension.rowHeight * tableData.length +\n (!tableData.length || !gtGeneralConfig.totalRow\n ? gtDimension.headerHeight\n : gtDimension.headerHeight + gtDimension.rowHeight)) +\n 'px)'\n : gtDimension.tableHeight\n }\"\n >\n <table\n class=\"gt\"\n [ngClass]=\"tableClass\"\n mat-table\n [dataSource]=\"renderedData\"\n >\n <tr\n class=\"header-row\"\n mat-header-row\n *matHeaderRowDef=\"tableColumns; sticky: true\"\n [style.height.px]=\"gtDimension.headerHeight\"\n ></tr>\n <tr\n class=\"total-row\"\n mat-header-row\n [style.height.px]=\"gtDimension.rowHeight\"\n *matHeaderRowDef=\"totalRowColumns; sticky: true\"\n [class.hidden]=\"\n showSkeletonLoading ||\n (!showSkeletonLoading && !tableData.length) ||\n (isNoDataToDisplaySubject$ | async) ||\n (!showSkeletonLoading && !gtGeneralConfig.totalRow)\n \"\n ></tr>\n <tr\n [class]=\"rowData.gtClass\"\n [ngClass]=\"{ 'no-border-tr': (isNoDataToDisplaySubject$ | async) }\"\n mat-row\n *matRowDef=\"let rowData; columns: tableColumns\"\n [style.height.px]=\"gtDimension.rowHeight\"\n (click)=\"dataRowClicked(rowData)\"\n ></tr>\n\n <!-- TOTAL ROW -->\n <ng-container\n [matColumnDef]=\"column.colName\"\n *ngFor=\"let column of totalRowInfo; trackBy: trackByFn\"\n >\n <td\n mat-header-cell\n *matHeaderCellDef\n [attr.colspan]=\"column.colspan\"\n class=\"{{ column.class }}\"\n >\n <ng-container *ngIf=\"column['isActionColumn']\">\n <a\n *ngFor=\"let data of column.actionData\"\n [class]=\"data.class\"\n (click)=\"onClickableDataClicked({}, data.id)\"\n >\n {{ data.name }}\n </a>\n </ng-container>\n\n <ng-container *ngIf=\"column['isIconColumn']\">\n <i\n class=\"{{ column?.iconData?.class }}\"\n (click)=\"iconClickedInTotalRow(column?.colName)\"\n >\n </i>\n </ng-container>\n\n <ng-container *ngIf=\"!column['isActionColumn']\">\n <strong class=\"upper-label\">{{ column.data }}</strong>\n <ng-container *ngIf=\"column.lowerData\">\n <br />\n <span\n *ngIf=\"\n column.colName == 'total-potential-booked-unit' &&\n gtGeneralConfig.component == 'RATING';\n else columnLowerData\n \"\n class=\"clickable-data\"\n (click)=\"spotDetailsDownloadClicked('TOTALROW')\"\n [ngClass]=\"{ 'disabled-clickable-data': downloadInProgress }\"\n >{{ column.lowerData }}\n <span class=\"material-icons spot-details-download-icons\">get_app</span>\n <ng-container *ngIf=\"downloadInProgress && selectedRowTypeForDownload == 'TOTALROW'\">\n <ng-container [ngTemplateOutlet]=\"circularProgressBar\"></ng-container>\n </ng-container>\n </span>\n <ng-template #columnLowerData>\n <span class=\"lower-label\">{{ column.lowerData }}</span>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"column.tooltipMessage && gtGeneralConfig.component != 'LUR_VIOLATIONS'\">\n <i\n class=\"{{ column.tooltipIconClass }}\"\n container=\"body\"\n [ngbTooltip]=\"column.tooltipMessage\"\n tooltipClass=\"gt-total-row-tooltip\"\n placement=\"bottom\"\n ></i>\n </ng-container>\n <ng-container *ngIf=\"gtGeneralConfig.component == 'LUR_VIOLATIONS' && column.tooltipMessage\">\n <i\n class=\"mi mdi-info-outline info-label\"\n container=\"body\"\n [ngbTooltip]=\"lurViolationTotalRowToolTip\"\n tooltipClass=\"gt-total-row-tooltip\"\n placement=\"bottom\"\n ></i>\n </ng-container>\n </ng-container>\n </td>\n </ng-container>\n\n <!-- MAIN ROW -->\n <ng-container\n [matColumnDef]=\"columnDef.headerInfo[0].objectKey\"\n *ngFor=\"let columnDef of tableHeaders; trackBy: trackByFn\"\n >\n <th\n #tableHeader\n nowrap\n mat-header-cell\n *matHeaderCellDef\n [style.width]=\"columnDef.width\"\n >\n <div\n class=\"row mx-0\"\n *ngFor=\"let header of columnDef.headerInfo; let j = index\"\n >\n <p\n *ngIf=\"header.typeOfHeaderData === 'STRING'\"\n [ngClass]=\"{ 'upper-label': j === 0, 'lower-label': j === 1 }\"\n >\n <ngx-skeleton-loader\n *ngIf=\"header.name == null\"\n count=\"1\"\n [theme]=\"{\n height: '10px',\n display: 'block',\n width: columnDef.width,\n 'max-width': 'calc(100% - 20px)'\n }\"\n >\n </ngx-skeleton-loader>\n <ng-container *ngIf=\"header.name\">\n {{ header.name }}\n </ng-container>\n\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'impsInfoTooltip'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"impsInfoTooltip\"\n container=\"body\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"\n header.tooltip && header.tooltip.name == 'spotsColumnEquivalizationMessageTooltip'\n \"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n container=\"body\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"spotsColumnEquivalizationMessageTooltip\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'underDeliveryTooltip'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n container=\"body\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"underDeliveryTooltip\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'overDeliveryTooltip'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n container=\"body\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"overDeliveryTooltip\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'ratingInfoTooltip'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"ratingInfoTooltip\"\n container=\"body\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'rateInfoTooltip'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"rateInfoTooltip\"\n container=\"body\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'ongoingRevBookedColumnTooltip'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"ongoingRevBookedColumnTooltip\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'completedRevBookedColumnTooltip'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"completedRevBookedColumnTooltip\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'avgBookedRate'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"avgBookedRate\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'avgBookedRtg'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"avgBookedRtg\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'avgBookedImps'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"avgBookedImps\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'automationTooltip'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"automationTooltip\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'rebateImpact'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"rebateImpact\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'projectedImpsRtg'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"projectedImpsRtg\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n </p>\n\n <ng-container *ngIf=\"header.typeOfHeaderData === 'CHECKBOX'\">\n <span\n *ngIf=\"gtGeneralConfig.isHeaderChecked\"\n class=\"material-icons custom-column-checkbox-checked\"\n (click)=\"selectUnselectAllRows()\"\n >\n check_box\n </span>\n <span\n *ngIf=\"!gtGeneralConfig.isHeaderChecked\"\n class=\"material-icons custom-column-checkbox-unchecked\"\n [ngClass]=\"{ 'disable-checkbox': gtGeneralConfig.disableHeaderCheckbox }\"\n (click)=\"selectUnselectAllRows()\"\n >\n check_box_outline_blank\n </span>\n </ng-container>\n\n <div\n *ngIf=\"gtGeneralConfig.showAllColumnFilter\"\n class=\"sort-filter-container\"\n >\n <ng-container *ngIf=\"header.showTooltipIcon\">\n <!-- Active tooltip Functionality -->\n <ng-container *ngIf=\"header.filter === 'CHECKBOX'\">\n <span\n class=\"mdi mdi-filter-variant\"\n [ngClass]=\"{\n active:\n annaFilterService.isFilterSortActive &&\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\n disabled: header.disableTooltipIcon || showSkeletonLoading\n }\"\n [ngbTooltip]=\"filterTooltip\"\n placement=\"{{ filterAlignment }}\"\n container=\"body\"\n tooltipClass=\"non-edit-checkbox-tooltip\"\n [autoClose]=\"'outside'\"\n triggers=\"manual\"\n #t=\"ngbTooltip\"\n (click)=\"bindTheValueToToolTip(t, header)\"\n (hidden)=\"closeTooltip()\"\n >\n </span\n ><br />\n </ng-container>\n <ng-container *ngIf=\"header.filter === 'SLIDER'\">\n <span\n class=\"mdi mdi-filter-variant\"\n [ngClass]=\"{\n active:\n annaFilterService.isFilterSortActive &&\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\n disabled: header.disableTooltipIcon || showSkeletonLoading\n }\"\n [ngbTooltip]=\"sliderToolTip\"\n placement=\"bottom left-top\"\n container=\"body\"\n tooltipClass=\"non-edit-slider-tooltip\"\n [autoClose]=\"'outside'\"\n triggers=\"manual\"\n #t1=\"ngbTooltip\"\n (click)=\"bindTheValueToToolTip(t1, header)\"\n (hidden)=\"closeTooltip()\"\n >\n </span\n ><br />\n </ng-container>\n <ng-container *ngIf=\"header.filter === 'DATE'\">\n <span\n class=\"mdi mdi-filter-variant\"\n [ngClass]=\"{\n active:\n annaFilterService.isFilterSortActive &&\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\n disabled: header.disableTooltipIcon || showSkeletonLoading\n }\"\n [ngbTooltip]=\"datePickerTooltip\"\n placement=\"bottom auto\"\n container=\"body\"\n tooltipClass=\"non-edit-datepicker-tooltip\"\n [autoClose]=\"'outside'\"\n triggers=\"manual\"\n #t2=\"ngbTooltip\"\n (click)=\"bindTheValueToToolTip(t2, header)\"\n (hidden)=\"closeTooltip()\"\n >\n </span\n ><br />\n </ng-container>\n <ng-container *ngIf=\"header.filter === 'WEEK'\">\n <span\n class=\"mdi mdi-filter-variant\"\n [ngClass]=\"{\n active:\n annaFilterService.isFilterSortActive &&\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\n disabled: header.disableTooltipIcon || showSkeletonLoading\n }\"\n [ngbTooltip]=\"weekPickerToolTip\"\n placement=\"bottom left-top\"\n container=\"body\"\n [autoClose]=\"'outside'\"\n triggers=\"manual\"\n #t3=\"ngbTooltip\"\n (click)=\"bindTheValueToToolTip(t3, header)\"\n (hidden)=\"closeTooltip()\"\n >\n </span\n ><br />\n </ng-container>\n <ng-container *ngIf=\"header.filter === 'TIME'\">\n <span\n class=\"mdi mdi-filter-variant\"\n [ngClass]=\"{\n active:\n annaFilterService.isFilterSortActive &&\n annaFilterService.isFilterSortActive[header.joinedFilterSortObjectKeys],\n disabled: header.disableTooltipIcon || showSkeletonLoading\n }\"\n [ngbTooltip]=\"timeFilterToolTip\"\n placement=\"bottom left-top auto\"\n container=\"body\"\n tooltipClass=\"non-edit-time-tooltip\"\n [autoClose]=\"'outside'\"\n triggers=\"manual\"\n #t4=\"ngbTooltip\"\n (click)=\"bindTheValueToToolTip(t4, header)\"\n (hidden)=\"closeTooltip()\"\n >\n </span\n ><br />\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"!header.showTooltipIcon\">\n <span id=\"no-filter-space\"></span><br />\n </ng-container>\n <i\n *ngIf=\"header.tooltip && header.tooltip.name == 'lurViolationInfoTooltip'\"\n class=\"{{ header['tooltip'].iconClass }}\"\n [ngStyle]=\"{ float: header['tooltip'].iconPosition }\"\n #t=\"ngbTooltip\"\n container=\"body\"\n [ngbTooltip]=\"lurViolationInfoTooltip\"\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\n >\n </i>\n </div>\n </div>\n </th>\n\n <ng-container *matCellDef=\"let ROW_DATA\">\n <td\n mat-cell\n [style.background]=\"ROW_DATA.backgroundColor\"\n [style.border]=\"ROW_DATA.border\"\n class=\"{{ ROW_DATA.rowClass }}\"\n [ngClass]=\"ROW_DATA[columnDef.headerInfo[0].objectKey + 'TdClass']\"\n [attr.rowspan]=\"ROW_DATA[columnDef.headerInfo[0].objectKey + 'Rowspan']\"\n *ngIf=\"\n !hideSomeTds ||\n (hideSomeTds && !ROW_DATA['hide' + columnDef.headerInfo[0].objectKey + 'Td'])\n \"\n >\n <ngx-skeleton-loader\n *ngIf=\"showSkeletonLoading\"\n count=\"1\"\n [theme]=\"{ height: '10px', display: 'block' }\"\n >\n </ngx-skeleton-loader>\n\n <ng-container *ngIf=\"!showSkeletonLoading\">\n <ng-container *ngIf=\"tableData.length > 0 && !(isNoDataToDisplaySubject$ | async)\">\n <ng-container\n *ngFor=\"\n let subline of columnDef.headerInfo;\n let subLineIndex = index;\n trackBy: trackByFn\n \"\n >\n <div showEllipsisTextOnHover>\n <ng-container [ngSwitch]=\"columnDef.headerInfo[subLineIndex].typeOfBodyData\">\n <ng-container *ngSwitchCase=\"'ICON'\">\n <i\n *ngIf=\"\n !(\n starredInProgress &&\n ROW_DATA.orderId == selectedStarredOrderId\n )\n \"\n [class]=\"ROW_DATA.iconClass\"\n (click)=\"iconClicked(ROW_DATA, ROW_DATA.iconClass)\"\n ngbTooltip=\"{{ ROW_DATA.iconTitleText }}\"\n placement=\"bottom\"\n container=\"body\"\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\n ></i>\n <ng-container\n *ngIf=\"\n starredInProgress && ROW_DATA.orderId == selectedStarredOrderId\n \"\n >\n <div class=\"spinner-for-button-directive\"></div>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'ICON_CELL'\">\n <ng-container\n *ngFor=\"\n let action of ROW_DATA[\n columnDef.headerInfo[subLineIndex].actionKey\n ]\n \"\n >\n <i\n *ngIf=\"action.showIcon\"\n [class]=\"action.iconClass\"\n (mouseenter)=\"\n mouseEnterOnStringTextActionType(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].tooltipKey\n )\n \"\n placement=\"bottom auto\"\n container=\"body\"\n [autoClose]=\"true\"\n tooltipClass=\"team-user-tooltip remove-on-scroll-class\"\n [ngbTooltip]=\"action.showTooltip ? userLoggedInDetails : null\"\n (click)=\"\n textActionClicked(\n ROW_DATA,\n action.id,\n columnDef.headerInfo[subLineIndex]\n )\n \"\n [disableTooltip]=\"!action.showTooltip\"\n >\n </i>\n\n <ng-container *ngIf=\"action.showObjectKey\">\n {{ ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey] }}\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'HTML_STRING'\">\n <p\n [innerHTML]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\n (click)=\"innerHTMLCellClicked($event, ROW_DATA)\"\n ></p>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'SVG_ICON'\">\n <anna-core-anna-icon-column\n [componentName]=\"gtGeneralConfig.component\"\n [dataObject]=\"ROW_DATA\"\n [iconToShow]=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n \"\n (onColumnIconClicked)=\"svgIconClicked($event)\"\n ></anna-core-anna-icon-column>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'TEXT_ACTIONS'\">\n <ng-container\n *ngFor=\"\n let text of ROW_DATA[\n columnDef.headerInfo[subLineIndex].actionKey\n ]\n \"\n >\n <button\n *ngIf=\"text.showTooltip\"\n (click)=\"\n textActionClicked(\n ROW_DATA,\n text.id,\n columnDef.headerInfo[subLineIndex]\n )\n \"\n [disabled]=\"text.isDisabled\"\n class=\"{{ text.class }}\"\n (mouseenter)=\"\n mouseEnterOnTextActionType(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].tooltipKey\n )\n \"\n [ngbTooltip]=\"textActionTooltipTemplate\"\n placement=\"auto\"\n container=\"body\"\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\n >\n {{ text.name }}\n </button>\n\n <button\n *ngIf=\"!text.showTooltip\"\n (click)=\"\n textActionClicked(\n ROW_DATA,\n text.id,\n columnDef.headerInfo[subLineIndex]\n )\n \"\n [disabled]=\"text.isDisabled\"\n class=\"{{ text.class }}\"\n >\n {{ text.name }}\n </button>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'CHECKBOX'\">\n <span\n *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\n [ngClass]=\"{\n 'disable-checkbox':\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\n }\"\n class=\"material-icons custom-column-checkbox-checked\"\n (click)=\"\n selectOrUnselectCheckbox(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].objectKey,\n false\n )\n \"\n >\n check_box\n </span>\n <span\n *ngIf=\"!ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\n class=\"material-icons custom-column-checkbox-unchecked\"\n [ngClass]=\"{\n 'disable-checkbox':\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\n }\"\n (click)=\"\n selectOrUnselectCheckbox(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].objectKey,\n true\n )\n \"\n >\n check_box_outline_blank\n </span>\n\n <ng-container\n *ngFor=\"\n let action of ROW_DATA[\n columnDef.headerInfo[subLineIndex].actionKey\n ]\n \"\n >\n <i\n *ngIf=\"action.showIcon\"\n [class]=\"action.iconClass\"\n [ngClass]=\"{ disabled: action.disabledIcon }\"\n (mouseenter)=\"\n mouseEnterOnStringTextActionTypeContainingTable(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].tooltipKey\n )\n \"\n placement=\"bottom auto\"\n container=\"body\"\n [autoClose]=\"true\"\n tooltipClass=\"tooltip-containing-table remove-on-scroll-class\"\n [ngbTooltip]=\"tooltipContainingTableTemplate\"\n >\n </i>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'CLICKABLE_DATA'\">\n <a\n *ngFor=\"\n let text of ROW_DATA[\n columnDef.headerInfo[subLineIndex].actionKey\n ]\n \"\n [class]=\"text.class\"\n (click)=\"onClickableDataClicked(ROW_DATA, text.id)\"\n >\n {{ text.name }}\n </a>\n <span\n *ngIf=\"\n subline.objectKey == 'displayBookedUnits' &&\n gtGeneralConfig.component == 'RATING'\n \"\n class=\"clickable-data\"\n (click)=\"spotDetailsDownloadClicked('DATAROW', ROW_DATA)\"\n [ngClass]=\"{ 'disabled-clickable-data': downloadInProgress }\"\n >{{ ROW_DATA.displayBookedUnits }}\n <span class=\"material-icons spot-details-download-icons\"\n >get_app</span\n >\n <ng-container\n *ngIf=\"\n downloadInProgress &&\n ROW_DATA.inventoryCodeId ==\n selectedInventoryIdForDownload &&\n ROW_DATA.demographic == selectedDemographicForDownload\n \"\n >\n <ng-container\n [ngTemplateOutlet]=\"circularProgressBar\"\n ></ng-container>\n </ng-container>\n </span>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'STRING___ICON_OR_TEXT_ACTION'\">\n <ng-container\n *ngFor=\"\n let action of ROW_DATA[\n columnDef.headerInfo[subLineIndex].actionKey\n ]\n \"\n >\n <span\n [class]=\"action.additionalTextBeforeLinkClass\"\n [innerHtml]=\"action.additionalTextBeforeLink\"\n ngbTooltip=\"{{ action.additionalTextBeforeLink }}\"\n placement=\"bottom\"\n container=\"body\"\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\n [disableTooltip]=\"!action.enableTooltipForAdditionalText\"\n ></span>\n\n <ng-container *ngIf=\"action && action.typeOfData == 'STRING'\">\n {{ action.data }}\n </ng-container>\n\n <a\n [id]=\"action.id\"\n *ngIf=\"action.showLink\"\n (click)=\"\n textActionClicked(\n ROW_DATA,\n action.id,\n columnDef.headerInfo[subLineIndex]\n )\n \"\n [class]=\"action.linkClass\"\n [ngClass]=\"{ disabled: action.disabledLink }\"\n >{{ action.data }}</a\n >\n <span\n ngbTooltip=\"{{ action.additionalTextAfterLink }}\"\n placement=\"bottom\"\n container=\"body\"\n [class]=\"action.additionalTextAfterLinkClass\"\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\n [disableTooltip]=\"!action.enableTooltipForAdditionalAfterText\"\n >\n {{ action.additionalTextAfterLink }}\n </span>\n\n <ng-container *ngIf=\"action.showTooltip\">\n <ng-container *ngIf=\"action.tooltipData.innerHtml\">\n <i\n *ngIf=\"action.showIcon\"\n [class]=\"action.iconClass\"\n [ngClass]=\"{ disabled: action.disabledIcon }\"\n (mouseenter)=\"\n mouseEnterOnStringTextActionTypeContainingTable(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].tooltipKey\n )\n \"\n placement=\"bottom auto\"\n container=\"body\"\n [autoClose]=\"true\"\n tooltipClass=\"tooltip-containing-table remove-on-scroll-class\"\n [ngbTooltip]=\"tooltipContainingTableTemplate\"\n >\n </i>\n </ng-container>\n\n <ng-container *ngIf=\"!action.tooltipData.tooltipTableBody\">\n <i\n *ngIf=\"action.showIcon\"\n [class]=\"action.iconClass\"\n [ngClass]=\"{ disabled: action.disabledIcon }\"\n (click)=\"\n iconClickedOnStringIconActionType(\n ROW_DATA,\n action.id,\n columnDef.headerInfo[subLineIndex]\n )\n \"\n (mouseleave)=\"mouseLeaveTextActionType(ROW_DATA)\"\n (mouseenter)=\"\n mouseEnterOnStringTextActionType(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].tooltipKey\n )\n \"\n [placement]=\"\n action.tooltipPlacement\n ? action.tooltipPlacement\n : 'bottom auto'\n \"\n container=\"body\"\n [autoClose]=\"true\"\n tooltipClass=\"team-user-tooltip remove-on-scroll-class {{\n action.tooltipClass\n }}\"\n [ngbTooltip]=\"userLoggedInDetails\"\n >\n </i>\n <ng-container *ngIf=\"action['showSvgIcon']\">\n <anna-core-anna-est-icon-template\n class=\"float-right\"\n *ngIf=\"action['svgIconName'] == 'anna-icon'\"\n (mouseleave)=\"mouseLeaveTextActionType(ROW_DATA)\"\n (mouseenter)=\"\n mouseEnterOnStringTextActionType(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex]\n .tooltipKey\n )\n \"\n [placement]=\"\n action.tooltipPlacement\n ? action.tooltipPlacement\n : 'bottom auto'\n \"\n tooltipClass=\"team-user-tooltip remove-on-scroll-class {{\n action['tooltipClass']\n }}\"\n [ngbTooltip]=\"userLoggedInDetails\"\n container=\"body\"\n [autoClose]=\"true\"\n >\n </anna-core-anna-est-icon-template>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!action.showTooltip\">\n <i\n *ngIf=\"action.showIcon\"\n [class]=\"action.iconClass\"\n [ngClass]=\"{ disabled: action.disabledIcon }\"\n (click)=\"\n iconClickedOnStringIconActionType(\n ROW_DATA,\n action.id,\n columnDef.headerInfo[subLineIndex]\n )\n \"\n >\n </i>\n </ng-container>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'STRING_OR_INPUT'\">\n <ng-container\n *ngIf=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]?.type ==\n 'STRING';\n else inputBox\n \"\n >\n <span\n [innerHtml]=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n ?.value\n \"\n ></span>\n </ng-container>\n <ng-template #inputBox>\n <input\n placeholder=\"{{\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n ?.placeholder\n }}\"\n showEllipsisTextOnHover\n class=\"{{\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n .className\n }}\"\n (keydown)=\"\n changesMadeInEditableInputBox(\n $event,\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey],\n false\n )\n \"\n (paste)=\"\n changesMadeInEditableInputBox(\n $event,\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey],\n true\n )\n \"\n (ngModelChange)=\"\n editableInputValueChanged(\n $event,\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].objectKey\n )\n \"\n [ngModel]=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey].value\n \"\n [disabled]=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n .disabled\n \"\n [ngClass]=\"{\n 'red-border':\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n .hasError\n }\"\n />\n\n <i\n *ngIf=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n .showIcon\n \"\n container=\"body\"\n [ngbTooltip]=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n .iconTooltip\n \"\n tooltipClass=\"gt-total-row-tooltip\"\n placement=\"bottom\"\n class=\"{{\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n .iconClass\n }}\"\n >\n </i>\n <ng-container\n *ngIf=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey][\n 'showSvgIcon'\n ]\n \"\n >\n <anna-core-anna-est-icon-template\n class=\"float-right\"\n *ngIf=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey][\n 'svgIconName'\n ] == 'anna-icon'\n \"\n [placement]=\"'bottom auto'\"\n tooltipClass=\"gt-total-row-tooltip\"\n [ngbTooltip]=\"\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n .iconTooltip\n \"\n container=\"body\"\n >\n </anna-core-anna-est-icon-template>\n </ng-container>\n </ng-template>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'HTML'\">\n <span\n [innerHtml]=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\n ></span>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'SINGLE_RADIO'\">\n <span\n *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\n [ngClass]=\"{\n 'disable-checkbox':\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\n }\"\n class=\"mdi mdi-radiobox-marked\"\n (click)=\"(null)\"\n >\n </span>\n <span\n *ngIf=\"!ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\n class=\"mdi mdi-radiobox-blank\"\n [ngClass]=\"{\n 'disable-checkbox':\n ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\n }\"\n (click)=\"\n selectOrUnselectCheckbox(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].objectKey,\n true\n )\n \"\n >\n </span>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'RADIO'\">\n <mat-radio-group\n *ngIf=\"ROW_DATA['RadioButtonConfig']\"\n [ngModel]=\"ROW_DATA[subline.objectKey]\"\n [disabled]=\"ROW_DATA['RadioButtonConfig'][0].isDisabled\"\n >\n <ng-container\n *ngFor=\"\n let radioButton of ROW_DATA['RadioButtonConfig'];\n let last = last\n \"\n >\n <mat-radio-button\n value=\"{{ radioButton.value }}\"\n class=\"{{ radioButton.class }}\"\n (click)=\"\n radioButtonClicked(\n ROW_DATA,\n radioButton.value,\n ROW_DATA['RadioButtonConfig'][0].isDisabled\n )\n \"\n >{{ radioButton.label }}\n </mat-radio-button>\n <i\n class=\" {{ radioButton.iconClass }}\"\n (click)=\"radioButtonIconClicked(ROW_DATA)\"\n ></i>\n <br *ngIf=\"!last\" />\n </ng-container>\n </mat-radio-group>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'STRING_WITH_TOOLTIP'\">\n <ng-container\n *ngFor=\"\n let action of ROW_DATA[\n columnDef.headerInfo[subLineIndex].actionKey\n ]\n \"\n >\n <span> {{ action?.dataToDisplay }}</span>\n <span\n *ngIf=\"action?.showTooltip\"\n [ngbTooltip]=\"textActionTooltipTemplate\"\n (mouseenter)=\"\n mouseEnterOnStringTextActionType(\n ROW_DATA,\n columnDef.headerInfo[subLineIndex].tooltipKey\n )\n \"\n [placement]=\"action?.tooltipPosition\"\n container=\"body\"\n [class]=\"action?.tooltipIconClass\"\n tooltipClass=\"gt-icon-column-tooltip remove-on-scroll-class\"\n [disableTooltip]=\"action?.disableTooltip\"\n >\n </span>\n <span> {{ action?.dataToDisplayAfterTooltip }}</span>\n </ng-container>\n </ng-container>\n\n <ng-container *ngSwitchDefault>\n <ng-container *ngIf=\"subline.objectKey != 'description'\">\n <span>{{\n ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\n }}</span>\n <i\n *ngIf=\"\n subline.objectKey == 'inventoryCode' &&\n ROW_DATA['isSellerGroup'] &&\n gtGeneralConfig.component == 'RATING'\n \"\n class=\"mi mdi-info-outline seller-tooltip\"\n [ngbTooltip]=\"sellerHierarchyTooltip\"\n placement=\"bottom auto\"\n container=\"body\"\n [autoClose]=\"true\"\n triggers=\"manual\"\n (hidden)=\"closeTooltip()\"\n #info=\"ngbTooltip\"\n tooltipClass=\"hierarchy-tooltip remove-on-scroll-class\"\n (mouseenter)=\"\n bindTheValueToSellerGroupTooltip(\n ROW_DATA.sellerGroupHierarchy,\n info\n )\n \"\n >\n </i>\n\n <i\n *ngIf=\"\n subline.objectKey == 'displayBookedAverageRating' &&\n gtGeneralConfig.component == 'RATING' &&\n ROW_DATA['showRatingAverageIcon']\n \"\n class=\"mi mdi-info-outline seller-tooltip\"\n placement=\"bottom auto\"\n container=\"body\"\n [autoClose]=\"true\"\n (mouseenter)=\"\n setIsDifference(ROW_DATA.isDifferenceLessThan25Percent)\n \"\n tooltipClass=\"posted-avg-tooltip remove-on-scroll-class\"\n [ngbTooltip]=\"postedRatingDifference\"\n >\n </i>\n\n <i\n *ngIf=\"\n subline.objectKey == 'displayBookedAverageImpression' &&\n gtGeneralConfig.component == 'RATING' &&\n ROW_DATA['showImpressionAverageIcon']\n \"\n class=\"mi mdi-info-outline seller-tooltip\"\n placement=\"bottom auto\"\n container=\"body\"\n [autoClose]=\"true\"\n (mouseenter)=\"\n setIsDifference(ROW_DATA.isDifferenceLessThan25Percent)\n \"\n tooltipClass=\"posted-avg-tooltip remove-on-scroll-class\"\n [ngbTooltip]=\"postedImpDifference\"\n >\n </i>\n </ng-container>\n <ng-container *ngIf=\"subline.objectKey == 'description'\">\n <p\n *ngIf=\"\n ROW_DATA.descriptionMessage ||\n ROW_DATA.descriptionEmailReferenceNum\n \"\n >\n <ng-container *ngIf=\"ROW_DATA.descriptionMessage\">\n {{ ROW_DATA.descriptionMessage }}\n <br />\n </ng-container>\n <ng-container\n *ngIf=\"\n ROW_DATA.descriptionEmailReferenceNum != '-' &&\n ROW_DATA.descriptionEmailReferenceNum != ''\n \"\n >\n Email Ref: {{ ROW_DATA.descriptionEmailReferenceNum }}\n <br />\n </ng-container>\n </p>\n <a\n href=\"{{ ROW_DATA.descriptionDetailsUrl }}\"\n target=\"_blank\"\n *ngIf=\"\n ROW_DATA.descriptionDetailsUrlType === 'PDF' ||\n ROW_DATA.descriptionDetailsUrlType === 'EXCEL'\n \"\n >\n <button class=\"btn viewDetailsAndEmailBtn\">Download</button>\n </a>\n <ng-container\n *ngIf=\"ROW_DATA.activityname.toLowerCase() == 'order onboarded'\"\n >\n <a\n *ngIf=\"ROW_DATA.descriptionDetailsUrlType === 'LINK'\"\n (click)=\"viewDetailsClicked(ROW_DATA)\"\n >\n <button class=\"btn viewDetailsAndEmailBtn order-onboarded\">\n View details\n </button>\n </a>\n </ng-container>\n\n <a\n href=\"{{ ROW_DATA.descriptionEmailUrl }}\"\n target=\"_blank\"\n *ngIf=\"\n ROW_DATA.descriptionEmailUrl != '-' &&\n ROW_DATA.descriptionEmailUrl != ''\n \"\n >\n <button class=\"btn viewDetailsAndEmailBtn\">View email</button>\n </a>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"isNoDataToDisplaySubject$ | async\">\n <div>\n {{ null }}\n </div>\n </ng-container>\n </ng-container>\n </td>\n </ng-container>\n </ng-container>\n </table>\n </div>\n <anna-core-no-data-lib\n [width]=\"noDataWidth\"\n [marginTop]=\"marginTop\"\n *ngIf=\"isNoDataToDisplaySubject$ | async\"\n >\n </anna-core-no-data-lib>\n</div>\n\n<!-- Checkbox template -->\n<ng-template #filterTooltip>\n <anna-core-anna-column-checkbox-filter\n [tableData]=\"tableData\"\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\n [isLurAndCsrComponent]=\"false\"\n [clonedTableData]=\"clonedTableData\"\n [filterTabObjects]=\"filterTabObjects\"\n (filterAppliedToTable)=\"filterApplied($event)\"\n (sortingAppliedToTable)=\"sortingApplied($event)\"\n (closeTooltip)=\"closeTooltip()\"\n >\n </anna-core-anna-column-checkbox-filter>\n</ng-template>\n\n<!-- Slider template -->\n<ng-template #sliderToolTip>\n <anna-core-anna-column-slider-filter\n [tableData]=\"tableData\"\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\n [isLurAndCsrComponent]=\"false\"\n [clonedTableData]=\"clonedTableData\"\n [filterTabObjects]=\"filterTabObjects\"\n (filterAppliedToTable)=\"filterApplied($event)\"\n (sortingAppliedToTable)=\"sortingApplied($event)\"\n (closeTooltip)=\"closeTooltip()\"\n >\n </anna-core-anna-column-slider-filter>\n</ng-template>\n\n<!-- Date Picker Template -->\n<ng-template #datePickerTooltip>\n <anna-core-anna-column-date-range-filter\n [tableData]=\"tableData\"\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\n [isLurAndCsrComponent]=\"false\"\n [clonedTableData]=\"clonedTableData\"\n [filterTabObjects]=\"filterTabObjects\"\n (filterAppliedToTable)=\"filterApplied($event)\"\n (sortingAppliedToTable)=\"sortingApplied($event)\"\n (closeTooltip)=\"closeTooltip()\"\n >\n </anna-core-anna-column-date-range-filter>\n</ng-template>\n\n<!-- Week Picker Template -->\n<ng-template #weekPickerToolTip>\n <!-- <div class=\"weekpicker-container\">\n <anna-core-week-calendar-filter-lib\n [week-calendar-config]=\"gtGeneralConfig.multiWeekPickerConfig\"\n (apply)=\"applyWeekFilter($event)\"\n [from-date]=\"calendarMinEnabledDate\"\n [to-date]=\"calendarMaxEnabledDate\"\n >\n </anna-core-week-calendar-filter-lib>\n </div> -->\n</ng-template>\n\n<!-- Time Filter Template -->\n<ng-template #timeFilterToolTip>\n <anna-core-anna-column-time-filter\n [tableData]=\"tableData\"\n [showFilterHeaderTabs]=\"showFilterTooltipTabs\"\n [isLurAndCsrComponent]=\"false\"\n [showAllTimeRangeCheckboxes]=\"showCheckboxesForTimeFilter\"\n [clonedTableData]=\"clonedTableData\"\n [filterTabObjects]=\"filterTabObjects\"\n (filterAppliedToTable)=\"filterApplied($event)\"\n (sortingAppliedToTable)=\"sortingApplied($event)\"\n (closeTooltip)=\"closeTooltip()\"\n >\n </anna-core-anna-column-time-filter>\n</ng-template>\n\n<ng-template #columnInfoTooltip>\n <p style=\"color: black; white-space: nowrap\">This preemption is rejected and not marked for credit.</p>\n</ng-template>\n\n<ng-template #ratingInfoTooltip>\n <p class=\"first-row\">Shows 'Booked Rating' for Preemptions & MakeGood Offered spot(s).</p>\n <p class=\"second-row\">Shows 'Projected Rating' for ADU Offered spot(s).</p>\n</ng-template>\n\n<ng-template #impsInfoTooltip>\n <p class=\"first-row\">Shows 'Booked IMPS' for Preemptions & MakeGood Offered spot(s).</p>\n <p class=\"second-row\">Shows 'Projected IMPS' for ADU Offered spot(s).</p>\n</ng-template>\n\n<ng-template #spotsColumnEquivalizationMessageTooltip>\n <p class=\"spot-column-tooltip-message\">\n This consists of equivalized spots and un-equivalized Paid Programs & un-equivalized Non-spots.\n </p>\n</ng-template>\n\n<ng-template #underDeliveryTooltip>\n <p class=\"spot-column-tooltip-message\">\n Indicates the Under-delivery percentage based on booked and posted RTG/IMPS.\n </p>\n</ng-template>\n\n<ng-template #overDeliveryTooltip>\n <p class=\"spot-column-tooltip-message\">\n Indicates the Over-delivery percentage based on booked and posted RTG/IMPS.\n </p>\n</ng-template>\n\n<ng-template #rateInfoTooltip>\n <p class=\"first-row\">Shows 'Booked Rate' for Preemptions & MakeGood Offered spot(s).</p>\n <p class=\"second-row\">Shows 'Projected $ Value' for ADU Offered spot(s).</p>\n</ng-template>\n\n<ng-template #sellerHierarchyTooltip>\n <ng-container *ngIf=\"sellerGroupHierarchy.length > 0\">\n <section class=\"hierarchy-table-container\">\n <table class=\"seller-hierarchy-table\">\n <thead>\n <tr>\n <th>#</th>\n <th>Inventory Codes</th>\n <th>Program/Description</th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let data of sellerGroupHierarchy; let tooltipIndex = index\">\n <td>{{ tooltipIndex + 1 }}</td>\n <td>\n <span showEllipsisTextOnHover>{{ data.InventoryCode }}</span>\n </td>\n <td>\n <span showEllipsisTextOnHover>{{ data.Program }}</span>\n </td>\n </tr>\n </tbody>\n </table>\n </section>\n </ng-container>\n <ng-container *ngIf=\"sellerGroupHierarchy.length == 0\">\n <span style=\"color: #000\">Seller group not available for this inventory code</span>\n </ng-container>\n</ng-template>\n\n<ng-template #lurViolationInfoTooltip>\n <p class=\"first-row\">The values are for the entire week.</p>\n</ng-template>\n\n<ng-template #postedRatingDifference>\n <p class=\"difference-text\">\n The difference between posted and booked average rating is\n {{ isDifferenceLessThan25Percent ? \"less\" : \"more\" }} than 25%.\n </p>\n</ng-template>\n\n<ng-template #postedImpDifference>\n <p class=\"difference-text\">\n The difference between posted and booked average impression is\n {{ isDifferenceLessThan25Percent ? \"less\" : \"more\" }} than 25%.\n </p>\n</ng-template>\n\n<ng-template #ongoingRevBookedColumnTooltip>\n <p>The Booked $ value, Spots, GRP, CPP, IMPS, CPM corresponds on the last permanent revision generated</p>\n</ng-template>\n\n<ng-template #completedRevBookedColumnTooltip>\n <p>The Booked $ value corresponds on the last permanent revision generated</p>\n</ng-template>\n\n<ng-template #avgBookedRate>\n <p>This is the booked average Rate</p>\n</ng-template>\n\n<ng-template #avgBookedRtg>\n <p>This is the booked average RTG</p>\n</ng-template>\n\n<ng-template #avgBookedImps>\n <p>This is the booked average IMP(\u2019000)</p>\n</ng-template>\n\n<ng-template #projectedImpsRtg>\n <p>\n All projections are derived from the sum of actual posted information until the last posted date and estimates\n for the remaining selected period.\n </p>\n</ng-template>\n\n<ng-template #automationTooltip>\n <p>\n Please get the order business rules approved to activate the order for automation. Only for the\n automation-activated orders, any approved MGs, ADUs, or credited spots on ANNA will be fed into the traffic\n system i.e. ANNA revisions.\n <!-- removed below line as part of enhancmennt in 14.0 releas -->\n <!-- Additionally, ANNA will only enter buyer revisions into traffic for the selected\n Medialine/WOC orders. -->\n </p>\n</ng-template>\n\n<ng-template #rebateImpact>\n <p>Rebate impact value is for the originally ordered spot length and is not equivalized.</p>\n</ng-template>\n\n<ng-template #lurViolationTotalRowToolTip>\n <ul>\n <li>\n <strong>POLITICAL RATE VIOLATIONS:</strong>\n Violations flagged when non-political spots are booked at a rate lower than the minimum booked rate for\n political candidates for the same week, Inventory Code and Revenue Class.\n </li>\n <li>\n <strong>CANDIDATE TO CANDIDATE VIOLATION:</strong>\n Violations flagged when political spots are booked at different rates to other political spots for the same\n week, Inventory Code and Revenue Class.\n </li>\n </ul>\n</ng-template>\n\n<ng-template #circularProgressBar>\n <circle-progress\n [percent]=\"percentDone\"\n [radius]=\"5\"\n [showTitle]=\"false\"\n [showUnits]=\"false\"\n [showSubtitle]=\"false\"\n [outerStrokeWidth]=\"3\"\n [innerStrokeWidth]=\"3\"\n [space]=\"-3\"\n [outerStrokeColor]=\"'#268bff'\"\n [innerStrokeColor]=\"'#d5d5d5'\"\n [animationDuration]=\"10\"\n ></circle-progress>\n</ng-template>\n\n<ng-template #userLoggedInDetails>\n <div class=\"tooltip-div-container\">\n <ng-container *ngFor=\"let data of textActionTooltip\">\n <span *ngIf=\"data.key != 'read'\">\n {{ data.key }} <b> {{ data.value }}</b>\n </span>\n <span *ngIf=\"data.key == 'read'\">\n {{ data.value }}\n </span>\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #markAsReadTip>\n <div class=\"notification-tooltip-div-container\">\n <ng-container *ngFor=\"let data of textActionTooltip\">\n {{ data.value }}\n </ng-container>\n </div>\n</ng-template>\n\n<ng-template #textActionTooltipTemplate>\n <ng-container *ngFor=\"let data of textActionTooltip\">\n {{ data.key }} <b> {{ data.value }}</b>\n </ng-container>\n</ng-template>\n\n<ng-template #tooltipContainingTableTemplate>\n <div\n *ngIf=\"tooltipContainingTable\"\n [innerHTML]=\"tooltipContainingTable.innerHtml\"\n class=\"notification-tooltip-div-container\"\n >\n <!-- <ul>\n <li *ngFor=\"let headerMsg of tooltipContainingTable.tableHeaderMsg\">\n <b> {{headerMsg}} </b>\n </li>\n </ul>\n\n <table class=\"tooltip-table\">\n <thead>\n <tr>\n <th *ngFor=\"let header of tooltipContainingTable.tooltipTableHeader\">\n {{ header}}\n </th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let rows of tooltipContainingTable.tooltipTableBody\">\n <td *ngFor=\"let data of rows\">\n {{ data }}\n </td>\n </tr>\n </tbody>\n </table>\n\n <ul>\n <li style=\"margin-top:10px; padding:0\" *ngFor=\"let footerMsg of tooltipContainingTable.tableFooterMsg\">\n {{ footerMsg }} \n </li>\n </ul> -->\n </div>\n</ng-template>\n<!-- <ng-template #textActionTooltipTemplate>\n <ng-container *ngFor=\"let data of textActionTooltip\">\n {{ data.key }} <b> {{data.value}}</b>\n </ng-container>\n</ng-template> -->\n", styles: [".sort-btn{background:#fff;border:none;border-right:1px solid #1b88ff;text-decoration:underline;font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.07;letter-spacing:normal;color:#1b88ff;cursor:pointer;flex:1;text-align:center}.sort-btn:last-of-type{border-right:none}.sort-btn.active{color:#202b47;text-decoration:none}p.sort-container{margin-top:8px;padding-bottom:8px;border-bottom:1px solid #e6e6e6;margin-bottom:0;display:flex}::ng-deep .tooltip-inner{max-height:22rem;background-color:#fff;border:1px solid white;border-radius:5px;box-shadow:0 2px 2px #0000003d,0 0 2px #0000001f;max-width:251px;width:100%;padding:0!important}::ng-deep .tooltip-inner div.radio-container{flex-wrap:wrap}::ng-deep .md-drppicker{box-shadow:unset!important}::ng-deep .available{color:#999}::ng-deep .bs-tooltip-bottom .arrow:before{border-bottom-color:#fff!important}::ng-deep .bs-tooltip-left .arrow:before{border-left-color:#fff!important}::ng-deep .tooltip.show{opacity:1}.input{text-align:left;margin:5px 10px 5px 5px;display:flex;align-items:center;width:230px;white-space:nowrap}.data{color:#000;font-weight:700;margin-left:5px;margin-right:5px}span.data{display:inline-block;text-overflow:ellipsis;white-space:pre;width:100%;overflow:hidden}.check-box{font-size:14px;cursor:pointer;position:relative;top:-1px}span.mdi-filter.active{color:#000;opacity:1!important;pointer-events:all!important}p{margin-bottom:0;line-height:initial}span.mdi-filter{color:#cbcbcb}::ng-deep .ngx-slider-pointer{top:-5px!important;width:12px!important;height:12px!important;background:#bdbdbd!important;border:1px solid #ffffff!important;box-shadow:0 1px 3px #0000004d!important;border-radius:16px!important}input:focus{outline:none}input::placeholder{color:#c8c8c8}.cancel-btn{background:#c7e1ff;color:#268bff}.apply-btn{background:#268bff;color:#fff;margin-left:.3125rem}div.radio-container{display:flex;white-space:nowrap;justify-content:space-between;background-color:#f4f4f4;border-radius:.125rem;margin:.4375rem .4375rem .25rem}div.radio-container div{flex:1;width:50%}div.radio-container div.full-width{width:100%}div.radio-container input{position:relative;top:.125rem;margin-right:.25rem}div.radio-container label{font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.29;letter-spacing:0;color:#4a4a4a;margin:0;padding-left:.125rem}div.radio-container label:first-of-type{margin-right:.188rem}div.radio-container input[type=radio]{appearance:none;display:inline-block;width:.9375rem;height:.9375rem;padding:.125rem;background-clip:content-box;border:.125rem solid #268bff;background-color:transparent;border-radius:50%}div.radio-container input[type=radio]:checked{background-color:#268bff}.checkbox-filter-buttons-container{padding:0 8px!important}.buttons-container{display:flex;margin:0px auto .4375rem;justify-content:center;padding:0 12px}.buttons-container .button{padding:0 10px;width:100%;margin:8px 0 0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.buttons-container button:last-of-type{background-color:#268bff;color:#fff;margin-left:.5rem}.buttons-container button.disabled{background:#bdbdbd;opacity:.5;color:#4a4a4a}.button{display:inline-block;margin:8px 4px 0 8px;padding:0 16px;border-radius:4px;text-align:center;outline:none;font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.67;letter-spacing:normal;border:none;color:#268bff;background-color:#e5f1ff}.search-box{display:flex;align-items:center;color:#c8c8c8;border:1px solid #e6e6e6;border-radius:.125rem;margin:.25rem .4375rem .188rem;height:1.5rem;padding:.188rem 8px .188rem .5rem}.search-box .search-bar-close{margin-left:auto;float:right}.search-icon{margin:0 4px 0 0;font-size:1.125rem;color:#9b9b9b}.filter-icon{justify-content:right;margin-left:auto;color:#d4d4d4;color:#a1a1a1;font-size:16px;cursor:pointer}.data{margin:0 13px 0 8px;font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.86;letter-spacing:\"\";color:#4a4a4a}.search-input{margin:1px 0 1px 4px;font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;color:#c8c8c8;width:calc(100% - 38px)}.check-box{color:#268bff}.tooltip-data-container{overflow-y:scroll;max-height:8rem}.searchbar{width:100%;display:flex;justify-content:flex-end;align-items:flex-end}.clear-button{opacity:.5;font-family:Roboto;font-size:.9375rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;text-decoration:underline;border:none;background-color:#fff;color:#4a4a4a;margin-left:.625rem;padding:0}.clear-button:focus{outline:none;box-shadow:none}.unchecked{color:#268bff}cdk-virtual-scroll-viewport.dropdown-data-container{max-height:12.3rem;width:100%;overflow-y:auto;overflow-x:hidden}cdk-virtual-scroll-viewport.dropdown-data-container p.input{margin-left:0}cdk-virtual-scroll-viewport.dropdown-data-container p.input span.mi{padding-left:.4375rem}cdk-virtual-scroll-viewport.dropdown-data-container p.input:hover{background-color:#ebebeb;cursor:pointer}cdk-virtual-scroll-viewport.dropdown-data-container::-webkit-scrollbar{width:.188rem}cdk-virtual-scroll-viewport.dropdown-data-container::-webkit-scrollbar-thumb{color:#d3d3d3;background:#d3d3d3}section.min-maxContainer{display:flex;justify-content:center;margin-bottom:-.125rem;margin-top:.5rem;width:100%}section.min-maxContainer input{width:30%;height:1.875rem;border:1px solid lightgray;color:gray}section.min-maxContainer span{display:inline-block;padding-left:.5rem;padding-right:.5rem;position:relative;top:.3125rem;color:#666}.time-container{width:100%;display:flex;padding:0 .75rem}.time-container input.form-control:disabled{background-color:#fff;width:2.813rem}.time-container input.numberInput:focus{box-shadow:none;border-color:#c2cfd6}.time-container .dot{color:#cbcbcb;position:relative;left:-7px;font-size:17px}.time-container div.arrow-container{flex-direction:column;display:flex;margin-top:.375rem;width:9px;height:18px;margin-right:1.1875rem}.time-container div.arrow-container i{color:#000;cursor:pointer;max-height:9px;font-size:25px;width:10px}.time-container div.arrow-container i:before{width:0;height:0;pointer-events:none;position:relative;left:-9px;top:-11px}.mdi-filter{cursor:pointer}.time-label-container{display:flex;justify-content:flex-start}.time-label-container label{margin-bottom:0;color:#4a4a4a;margin-top:.125rem;margin-left:.625rem;font-weight:700}.time-heading{color:#000;font-size:.8125rem;text-align:left;padding-left:.625rem;margin-top:.625rem;font-weight:700}.column-clear-all{width:94%;text-align:center;border:none;font-size:14px;background:none;text-decoration:underline;color:#268bff}.checkbox-container{display:flex;padding-inline:.625rem}.checkbox-container .data{text-align:left}.checkbox-container:first-of-type{margin-top:.625rem;font-weight:500}.column-clear-all{width:94%;text-align:center;border:none;background:none;text-decoration:underline;color:#268bff}.column-clear-all:disabled{opacity:.5;color:#4a4a4a;font-weight:400}.column-clear-all.align-center{text-align:center}span.mdi-filter-variant.disabled{pointer-events:none;opacity:.5}.datepicker-container{width:100%}span.mdi-filter-variant{color:#cbcbcb;cursor:pointer;font-size:.875rem}span.mdi-filter-variant.active{color:#000}p.filter-tab{font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.29;letter-spacing:normal;color:#1b88ff;border-radius:5px;background-color:#f4f4f4;padding-inline:8px;cursor:pointer;overflow:hidden;text-align:center;text-overflow:ellipsis}p.filter-tab.active{color:#fff;background-color:#1b88ff}button.filter-text-btn{background:#fff;text-decoration:underline;font-family:Roboto;font-size:14px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;border:none;color:#268bff;margin-inline:4px;margin-top:2px}button.filter-text-btn:disabled{color:#b1b1b1;cursor:not-allowed}::ng-deep .non-edit-datepicker-tooltip .tooltip-inner{max-width:310px!important;width:283px!important;overflow-y:initial!important;padding:0!important}input.slider-text::-webkit-outer-spin-button,input.slider-text::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}input.slider-text{-moz-appearance:textfield}input.slider-text.red-border{border:1px solid #f44336!important}::ng-deep .checkbox-sort p.sort-container{margin-top:8px!important;padding-bottom:8px!important}i.mdi-close{cursor:pointer}i.mdi-close.disable-close-icon{pointer-events:none;cursor:not-allowed}input.error-border{border:1px solid #f44336!important}::ng-deep .non-edit-checkbox-tooltip .tooltip-inner{width:238px!important;padding:0!important}::ng-deep .non-edit-slider-tooltip .tooltip-inner{width:238px!important;padding:0!important}::ng-deep .non-edit-time-tooltip .tooltip-inner{width:250px!important;padding:0!important}::ng-deep .non-edit-time-tooltip.bs-tooltip-start{padding:.4rem}::ng-deep .non-edit-time-tooltip.bs-tooltip-start .tooltip-arrow{right:0;top:5px!important;width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}::ng-deep .non-edit-time-tooltip.bs-tooltip-start .tooltip-arrow:before{border-left-color:#fff;left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height)}::ng-deep .no-bottom-border p.sort-container{border-bottom:none!important}::ng-deep .ngx-slider-pointer-min:after{display:none}::ng-deep .ngx-slider-pointer-max:after{display:none}::ng-deep .ngx-slider span.ngx-slider-pointer{width:12px;height:12px;top:-5px;background-color:#bdbdbd}::ng-deep .ngx-slider span.ngx-slider-bar{height:3px;background:#ededed}::ng-deep .ngx-slider span.ngx-slider-selection{background:#bdbdbd}::ng-deep .ngx-slider span.ngx-slider-bubble{bottom:-22px;font-size:12px;color:#333}::ng-deep .show-min.ngx-slider span.ngx-slider-model-value{background:#fff;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003}::ng-deep .show-max.ngx-slider span.ngx-slider-model-high{background:#fff;box-shadow:none}::ng-deep .ngx-slider span.ngx-slider-combined{background:#fff;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003}::ng-deep .ngx-slider{top:10px!important;margin:5px 0 2px!important}::ng-deep .ngx-slider-animate{top:0!important}.sidebar-slider{margin-bottom:35px!important;margin-left:5px;margin-right:5px}.slider-placeholder{height:14px}::ng-deep .filter-calendar select.form-select:focus{border-color:#c2cfd6;box-shadow:none}::ng-deep .filter-calendar select.form-select{background-color:#fff}.no-data-case{padding-left:.4375rem!important;font-size:.875rem!important;margin-top:10px!important;cursor:pointer}.check-mark,.unread-mark{cursor:pointer}.on-hover:hover .unread-mark,.notificationHover .check-mark{opacity:0;cursor:pointer}.on-hover:hover .check-mark{opacity:1;cursor:pointer}:host ::ng-deep .gt{table-layout:fixed;margin-bottom:0;width:100%}:host ::ng-deep .gt th,:host ::ng-deep .gt td{padding:2px 8px;line-height:normal}:host ::ng-deep .gt thead tr th .upper-label{font-family:Roboto;font-size:.6875rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:.3px;color:#4a4a4a;margin-bottom:0}:host ::ng-deep .gt thead tr th .lower-label{font-family:Roboto;font-size:.6875rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:.3px;color:#a7a7a7;margin-bottom:0}:host ::ng-deep .gt thead tr th{background-color:#ededed;position:sticky;position:-webkit-sticky;top:0;border-top:none!important;border-bottom:none!important;outline:none!important;box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4}:host ::ng-deep .gt thead tr th br{display:block;content:\"\";margin-top:-8px}:host ::ng-deep .gt thead tr th div.row{display:flex;flex-wrap:nowrap;justify-content:space-between;align-items:center;width:max-content}:host ::ng-deep .gt thead tr th div.sort-filter-container{display:flex;flex-wrap:nowrap;align-items:center;margin-left:.25rem;margin-right:auto}:host ::ng-deep .gt thead tr th span.mdi-filter-variant{font-size:13px!important;top:-1px!important;position:relative}:host ::ng-deep .gt thead tr th:first-of-type{box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4,inset 1px 0 #d4d4d4}:host ::ng-deep .gt tbody tr td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}:host ::ng-deep .gt tbody tr td:nth-of-type(n+2){box-shadow:inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}:host ::ng-deep .gt tbody tr td .upper-label{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:0px;color:#000;display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .gt tbody tr td .lower-label{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:0px;color:#a7a7a7;display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .gt tbody tr br{display:block;content:\"\";margin-top:-8px}:host ::ng-deep .gt tbody tr:nth-of-type(1) td{border-top:none!important}:host ::ng-deep .gt .custom-column-checkbox-checked,:host ::ng-deep .gt .custom-column-checkbox-unchecked{font-size:.875rem;cursor:pointer}:host ::ng-deep .gt .custom-column-checkbox-checked{color:#268bff}:host ::ng-deep .gt .custom-column-checkbox-unchecked{color:#4a4a4a}:host ::ng-deep .bottom-border .gt tbody tr:last-of-type td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4}:host ::ng-deep .bottom-border .gt tbody tr:last-of-type td:nth-of-type(n+2){box-shadow:inset -1px 0 #d4d4d4}.table-container{overflow-x:auto;overflow-y:auto}.rowSelectCheckbox,#selectAllRowsCheckbox{cursor:pointer}.disable-checkbox{color:#dedede!important;pointer-events:none!important}.mdi-warning{color:#f3c639;font-size:16px;line-height:28px}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{opacity:1}.redcolor-status{color:#c62a2a}#no-filter-space{width:.875rem}::ng-deep .mat-button-toggle-appearance-standard .mat-button-toggle-label-content{line-height:1.875rem!important;width:2.625rem;padding:0 .625rem}input.numberInput{margin-right:-.8125rem;padding:0 0 0 .625rem;height:1.875rem}::ng-deep .mat-button-toggle-checked{background-color:#268bff!important;color:#fff!important}::ng-deep .mat-button-toggle-group-appearance-standard{border-radius:0}.hidden{display:none}.no-data-div{margin-top:2.5px}.no-data-div label{margin:0;width:auto;font-weight:500;background-color:#d3d3d3;padding:.3125rem 1.125rem;border-radius:.25rem}.column-values:nth-of-type(2){color:#a7a7a7!important}.custom-column-checkbox-checked,.custom-column-checkbox-unchecked{font-size:.875rem;cursor:pointer}.custom-column-checkbox-checked{color:#268bff}.custom-column-checkbox-unchecked{color:#4a4a4a}.time-filter-checkboxes>div>p{color:#151b1e}::ng-deep .margin-bottom-zero .mat-radio-label{margin-bottom:0}:host ::ng-deep mat-radio-group br{margin-top:0!important}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio__background{width:var(--mat-radio-size);height:var(--mat-radio-size)}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio__inner-circle{border-width:calc(var(--mat-radio-size) / 2)}:host ::ng-deep mat-radio-group mat-radio-button .mdc-form-field>label{margin:0 0 0 4px;padding:0;top:-2px;position:relative}:host ::ng-deep mat-radio-group mat-radio-button .mdc-radio--disabled+label{color:var(--primary-text-color-dark)!important}:host ::ng-deep mat-radio-group mat-radio-button.mat-mdc-radio-button .mdc-form-field .mdc-radio{padding:0}:host ::ng-deep mat-radio-group mat-radio-button .mdc-form-field>label{left:-94px;font-size:12px;color:#4a4a4a;position:relative}::ng-deep .reject.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ff0}::ng-deep .reject.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:#ff0}::ng-deep .resubmit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ff0}::ng-deep .resubmit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:#ff0}::ng-deep .noAction.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:green}::ng-deep .noAction.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:green}::ng-deep .approve.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:green}::ng-deep .approve.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:green}::ng-deep .credit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:red}::ng-deep .credit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:red}::ng-deep .mat-radio-button.mat-radio-disabled .mat-radio-outer-circle{border-color:#00000061!important}::ng-deep .mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-inner-circle{background-color:#00000061!important}::ng-deep tr.white-background-row{background:#fff}::ng-deep tr.gray-background-row{background:#e9e9e980!important}.remarks-tooltip,.mdi-information,.mdi-information-outline,.seller-tooltip{font-size:.875rem;color:#268bff;position:relative;top:.1875rem;cursor:pointer}.seller-tooltip{top:-1px;float:right}::ng-deep .remarks-info-tooltip .tooltip-inner{max-width:19.25rem!important}.rating-icon,.lur-violation-icon{color:#268bff;cursor:pointer;position:relative;left:-2px}::ng-deep .rating-info-tooltip .tooltip-inner{max-width:800px!important}.spots-info-icon{color:#268bff;cursor:pointer;margin:1px 2px 0 -14px}.spots-info-icon-ol{color:#268bff;cursor:pointer;margin:1px 4px 0 -2px}::ng-deep .spot-info-tooltip .tooltip-inner{position:relative;max-width:220px!important;background:#fff;word-break:break-word;display:flex}::ng-deep .spot-info-tooltip-for-orderlisting-table .tooltip-inner{max-width:220px!important;background:#fff;word-break:break-word;display:flex}p.first-row{padding:.5rem .5rem 0;color:#000;white-space:nowrap;text-align:left}p.second-row{padding:2px .5rem .5rem;color:#000;white-space:nowrap;text-align:left}::ng-deep .gt-total-row-tooltip{opacity:1!important}::ng-deep .gt-total-row-tooltip .tooltip-inner{color:#000;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;background-color:#fff;padding:4px!important;width:100%;border-radius:2px!important}::ng-deep .gt-total-row-tooltip .arrow:before{border-top-color:#fff!important}.info-label{margin-left:4px;color:#268bff;vertical-align:text-top}::ng-deep .hierarchy-tooltip{max-width:-moz-fit-content;max-width:fit-content;width:310px!important}::ng-deep .hierarchy-tooltip .tooltip-inner{padding:4px!important;max-width:22.75rem;max-height:11.25rem}table.seller-hierarchy-table{table-layout:fixed}table.seller-hierarchy-table tr th{font-family:Roboto;font-size:.75rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:1.67;letter-spacing:normal;color:#5e5e5e;white-space:nowrap;background:#ededed;position:sticky;box-shadow:inset 0 1px #d4d4d4;top:0;z-index:1}table.seller-hierarchy-table tr th:nth-child(1){width:20px}table.seller-hierarchy-table tr th:first-of-type,table.seller-hierarchy-table tr td:first-of-type{width:20px;border-left:1px solid #d4d4d4}table.seller-hierarchy-table tr th:last-of-type,table.seller-hierarchy-table tr td:last-of-type{border-right:1px solid #d4d4d4;width:7.875rem!important}table.seller-hierarchy-table tr th:nth-of-type(2){width:7.75rem!important}table.seller-hierarchy-table tr td{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;color:#4a4a4a;box-shadow:none!important;border-top:1px solid #d4d4d4;border-bottom:1px solid #d4d4d4}table.seller-hierarchy-table tr td:nth-of-type(2),table.seller-hierarchy-table tr td:nth-of-type(3){padding-top:.25rem}table.seller-hierarchy-table tr td span{display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;position:relative}section.hierarchy-table-container{max-height:8.75rem;overflow:auto}section.hierarchy-table-container::-webkit-scrollbar-track{margin-top:1.5rem}.difference-text{padding:.5rem;color:#000;text-align:left}::ng-deep .posted-avg-tooltip .tooltip-inner{width:13.8125rem!important}::ng-deep .drrBooked-info-tooltip{transform:translate(26px,6px)}::ng-deep .drrBooked-info-tooltip .tooltip-inner{max-width:307px!important;width:242px!important;background:#fff;word-break:break-word;display:flex;padding:4px!important;text-align:left}::ng-deep .drrBooked-info-tooltip .tooltip-inner p{color:#000}::ng-deep .drrBooked-info-tooltip .arrow:before{border-right-color:#fff!important}.clickable-data{cursor:pointer;color:#268bff!important;display:flex!important;align-items:center}.clickable-data .spot-details-download-icons{font-size:12px}.disabled-clickable-data{pointer-events:none;color:#d4d4d4!important}.spot-column-tooltip-message{color:#000;width:max-content;text-align:left}div.spinner-for-button-directive{position:relative;left:-1px}.clickable-row table tr.mat-row td{cursor:pointer!important}.tooltip-div-container{text-align:left!important;padding:12px 4px;color:#4a4a4a!important;font-size:12px!important;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}.notification-tooltip-div-container{text-align:left!important;padding:6px 8px;color:#4a4a4a!important;font-size:12px!important;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}.mdi-information,.mdi-information-outline{left:3px;top:1px}.mdi-information-outline{position:static}::ng-deep .team-user-tooltip.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .team-user-tooltip.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .team-user-tooltip .tooltip-inner{opacity:1!important;width:-moz-fit-content!important;width:fit-content!important;max-width:520px;border-radius:2px;padding:0 4px!important}::ng-deep .team-user-tooltip .tooltip-inner .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:#fff!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .team-user-tooltip .tooltip-inner.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .gt-icon-column-tooltip{opacity:1!important}::ng-deep .gt-icon-column-tooltip .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:#fff!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .gt-icon-column-tooltip.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .gt-icon-column-tooltip.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .gt-icon-column-tooltip .tooltip-inner{width:100%}::ng-deep .tooltip-containing-table{opacity:1!important}::ng-deep .tooltip-containing-table .tooltip-inner{color:#4a4a4a;text-align:left;padding:8px!important;border-radius:2px;background:#fff!important;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;font-family:Roboto;font-size:12px;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal}::ng-deep .tooltip-containing-table.bs-tooltip-top .arrow:before{border-top:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-left .arrow:before{border-left:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-bottom .arrow:before{border-bottom:6px solid white}::ng-deep .tooltip-containing-table.bs-tooltip-right .arrow:before{border-right:5px solid white}::ng-deep .tooltip-containing-table li{margin:0!important;padding:0!important}::ng-deep .tooltip-containing-table ul{margin:0!important;padding-left:8px!important}::ng-deep .tooltip-containing-table .tooltip-inner{width:100%;max-width:230px}table.tooltip-table{table-layout:fixed;margin:4px 0 0;width:100%}table.tooltip-table th,table.tooltip-table td{padding:2px 8px;line-height:normal}table.tooltip-table thead tr th:first-of-type{box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4,inset 1px 0 #d4d4d4!important;border:none}table.tooltip-table thead tr th{color:#5e5e5e!important;font-size:12px;font-weight:500;font-family:Roboto;line-height:1.67;background-color:#ededed;border-top:none!important;border-bottom:none!important;outline:none!important;box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4}table.tooltip-table thead tr th div.row{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center}table.tooltip-table tbody tr td{color:#5e5e5e!important;font-size:12px;font-weight:500;font-family:Roboto;line-height:1.67}table.tooltip-table tbody tr td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}table.tooltip-table tbody tr td:nth-of-type(n+2){box-shadow:inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}.bottom-border{border-bottom:1px solid #d4d4d4!important}i.disabled{pointer-events:none!important}\n"] }]
755
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.AnnaSortService }, { type: i2.AnnaDateTimeFormatService }, { type: i3.AnnaFilterService }]; }, propDecorators: { showSkeletonLoading: [{
756
+ type: Input
757
+ }], tableHeaders: [{
758
+ type: Input
759
+ }], tableData: [{
760
+ type: Input
761
+ }], clonedTableData: [{
762
+ type: Input
763
+ }], gtGeneralConfig: [{
764
+ type: Input
765
+ }], totalRowInfo: [{
766
+ type: Input
767
+ }], gtDimension: [{
768
+ type: Input
769
+ }], tableClass: [{
770
+ type: Input
771
+ }], maximumRowsWhichCanBeRenderedWithoutScroll: [{
772
+ type: Input
773
+ }], fixNumberOfRowsForPopup: [{
774
+ type: Input
775
+ }], limit: [{
776
+ type: Input
777
+ }], includeBorderInTableHeight: [{
778
+ type: Input
779
+ }], downloadInProgress: [{
780
+ type: Input
781
+ }], percentDone: [{
782
+ type: Input
783
+ }], starredInProgress: [{
784
+ type: Input
785
+ }], clickableRow: [{
786
+ type: Input
787
+ }], setTableHeightWhenRowSizeIsFixed: [{
788
+ type: Input
789
+ }], tableBorderBottomClassRequired: [{
790
+ type: Input
791
+ }], hideSomeTds: [{
792
+ type: Input
793
+ }], tdsHaveRowSpan: [{
794
+ type: Input
795
+ }], multipleTablesPresent: [{
796
+ type: Input
797
+ }], toggleCheckbox: [{
798
+ type: Output
799
+ }], toggleRowCheckbox: [{
800
+ type: Output
801
+ }], toggleHeaderCheckbox: [{
802
+ type: Output
803
+ }], undoIconClicked: [{
804
+ type: Output
805
+ }], filterAppliedToTable: [{
806
+ type: Output
807
+ }], sortingAppliedToTable: [{
808
+ type: Output
809
+ }], rowClicked: [{
810
+ type: Output
811
+ }], radioButtonSelected: [{
812
+ type: Output
813
+ }], columnFilterOpened: [{
814
+ type: Output
815
+ }], columnFilterClosed: [{
816
+ type: Output
817
+ }], gtIconClicked: [{
818
+ type: Output
819
+ }], gtSVGIconClicked: [{
820
+ type: Output
821
+ }], gtTextActionClicked: [{
822
+ type: Output
823
+ }], gtViewDetailClicked: [{
824
+ type: Output
825
+ }], gtInnerHTMLClicked: [{
826
+ type: Output
827
+ }], downloadSpotDetails: [{
828
+ type: Output
829
+ }], clickableDataClicked: [{
830
+ type: Output
831
+ }], totalRowIconClicked: [{
832
+ type: Output
833
+ }], notificationIconHover: [{
834
+ type: Output
835
+ }], notificationIconHoverLeave: [{
836
+ type: Output
837
+ }], editableInputEdited: [{
838
+ type: Output
839
+ }], radioButtonMessageIconClicked: [{
840
+ type: Output
841
+ }], viewChildTableHeaders: [{
842
+ type: ViewChildren,
843
+ args: ['tableHeader']
844
+ }] } });
845
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS1ub24tZWRpdGFibGUtZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbm5hLWNvcmUvc3JjL2xpYi9hbm5hLWdlbmVyaWMtdGFibGUtbGliL2NvbXBvbmVudHMvYW5uYS1ub24tZWRpdGFibGUtZ2VuZXJpYy10YWJsZS9hbm5hLW5vbi1lZGl0YWJsZS1nZW5lcmljLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FubmEtY29yZS9zcmMvbGliL2FubmEtZ2VuZXJpYy10YWJsZS1saWIvY29tcG9uZW50cy9hbm5hLW5vbi1lZGl0YWJsZS1nZW5lcmljLXRhYmxlL2FubmEtbm9uLWVkaXRhYmxlLWdlbmVyaWMtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNEJBQTRCO0FBQzVCLE9BQU8sRUFDSCxTQUFTLEVBRVQsS0FBSyxFQUNMLFlBQVksRUFDWixTQUFTLEVBQ1QsTUFBTSxFQUNOLFlBQVksRUFHWixpQkFBaUIsRUFHakIsdUJBQXVCLEdBQzFCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLGdDQUFnQztBQUNoQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFTckQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sc0VBQXNFLENBQUM7QUFNakgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDM0YsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQy9GLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdkMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0JB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RyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBQ0csMEJBQTBCO3NCQUFuQyxNQUFNO2dCQUNHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFDRyw2QkFBNkI7c0JBQXRDLE1BQU07Z0JBa0NzQixxQkFBcUI7c0JBQWpELFlBQVk7dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbIi8vIEFuZ3VsYXIgaW1wb3J0IHN0YXRlbWVudHNcbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIE9uSW5pdCxcbiAgICBJbnB1dCxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgUXVlcnlMaXN0LFxuICAgIE91dHB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBPbkNoYW5nZXMsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgRWxlbWVudFJlZixcbiAgICBBZnRlclZpZXdDaGVja2VkLFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLy8gVGhpcmQgcGFydHkgaW1wb3J0IHN0YXRlbWVudHNcbmltcG9ydCB7IGNsb25lRGVlcCwgaXNFcXVhbCwgdW5pcSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbi8vc3ViLWVudHJpZXMgb2YgYW5uYSBsaWIgaW1wb3J0IHN0YXRlbWVudFxuaW1wb3J0IHtcbiAgICBJR3RHZW5lcmFsQ29uZmlnLFxuICAgIElHdFRhYmxlSGVhZGVyLFxuICAgIElIZWFkZXJJbmZvLFxuICAgIElUb3RhbFJvd0luZm8sXG59IGZyb20gJy4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL21vZGVscy9hbm5hLW5vbi1lZGl0YWJsZS1ndC1tb2RlbHMnO1xuaW1wb3J0IHsgQW5uYURhdGVUaW1lRm9ybWF0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL3NlcnZpY2VzL2FubmEtZGF0ZS10aW1lLWZvcm1hdC5zZXJ2aWNlJztcbmltcG9ydCB7IElXZWVrQ2FsZW5kYXIgfSBmcm9tICcuLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9tb2RlbHMvYW5uYS1nbG9iYWwtZHJvcGRvd24tY29uZmlnLm1vZGVsJztcbmltcG9ydCB7XG4gICAgR3RDb2x1bW5JY29uRW1pdHRlZERhdGEsXG4gICAgUmF0aW5nU2VsbGVyR3JvdXBIaWVyYXJjaHksXG59IGZyb20gJy4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL21vZGVscy9hbm5hLWdlbmVyaWMtZGF0YS10eXBlLm1vZGVsJztcbmltcG9ydCB7IHJhZGlvQnV0dG9uTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9tb2RlbHMvYW5uYS10b29sdGlwLm1vZGVsJztcbmltcG9ydCB7IEFubmFTb3J0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL3NlcnZpY2VzL2FubmEtc29ydC5zZXJ2aWNlJztcbmltcG9ydCB7IEFubmFGaWx0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vYW5uYS1jb3JlLXNoYXJlZC1saWIvc2VydmljZXMvYW5uYS1maWx0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE5nQ2lyY2xlUHJvZ3Jlc3NNb2R1bGUgfSBmcm9tICduZy1jaXJjbGUtcHJvZ3Jlc3MnO1xuaW1wb3J0IHsgQW5uYUNvbHVtblRpbWVGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuLi9hbm5hLWNvbHVtbi1maWx0ZXJzL2FubmEtY29sdW1uLXRpbWUtZmlsdGVyL2FubmEtY29sdW1uLXRpbWUtZmlsdGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBbm5hQ29sdW1uRGF0ZVJhbmdlRmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vYW5uYS1jb2x1bW4tZmlsdGVycy9hbm5hLWNvbHVtbi1kYXRlLXJhbmdlLWZpbHRlci9hbm5hLWNvbHVtbi1kYXRlLXJhbmdlLWZpbHRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgQW5uYUNvbHVtblNsaWRlckZpbHRlckNvbXBvbmVudCB9IGZyb20gJy4uL2FubmEtY29sdW1uLWZpbHRlcnMvYW5uYS1jb2x1bW4tc2xpZGVyLWZpbHRlci9hbm5hLWNvbHVtbi1zbGlkZXItZmlsdGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBbm5hQ29sdW1uQ2hlY2tib3hGaWx0ZXJDb21wb25lbnQgfSBmcm9tICcuLi9hbm5hLWNvbHVtbi1maWx0ZXJzL2FubmEtY29sdW1uLWNoZWNrYm94LWZpbHRlci9hbm5hLWNvbHVtbi1jaGVja2JveC1maWx0ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEFubmFOb0RhdGFDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9hbm5hLWNvcmUtc2hhcmVkLWxpYi9jb21wb25lbnRzL2FubmEtbm8tZGF0YS9hbm5hLW5vLWRhdGEuY29tcG9uZW50JztcbmltcG9ydCB7IE1hdFJhZGlvTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcmFkaW8nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBbm5hSWNvbkNvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL2NvbXBvbmVudHMvYW5uYS1pY29uLWNvbHVtbi9hbm5hLWljb24tY29sdW1uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBzaG93RWxsaXBzaXNUZXh0T25Ib3ZlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2FubmEtY29yZS1zaGFyZWQtbGliL2RpcmVjdGl2ZXMvc2hvdy1lbGxpcHNpcy10ZXh0L3Nob3ctZWxsaXBzaXMtdGV4dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTmd4U2tlbGV0b25Mb2FkZXJNb2R1bGUgfSBmcm9tICduZ3gtc2tlbGV0b24tbG9hZGVyJztcbmltcG9ydCB7IE5nYlRvb2x0aXAgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5pbXBvcnQgeyBNYXRUYWJsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7XG4gICAgTmdDbGFzcyxcbiAgICBOZ1N0eWxlLFxuICAgIE5nRm9yLFxuICAgIE5nSWYsXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICBOZ1N3aXRjaCxcbiAgICBOZ1N3aXRjaENhc2UsXG4gICAgTmdTd2l0Y2hEZWZhdWx0LFxuICAgIEFzeW5jUGlwZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW50ZXJmYWNlIGtleVZhbHVlVG9vbHRpcFR5cGUge1xuICAgIGtleTogc3RyaW5nO1xuICAgIHZhbHVlOiBzdHJpbmc7XG59XG5pbnRlcmZhY2UgdGFibGVUb29sdGlwVHlwZSB7XG4gICAgdG9vbHRpcFRhYmxlSGVhZGVyOiBzdHJpbmdbXTtcbiAgICB0b29sdGlwVGFibGVCb2R5OiBzdHJpbmdbXVtdO1xuICAgIHRhYmxlSGVhZGVyTXNnOiBzdHJpbmdbXTtcbiAgICB0YWJsZUZvb3Rlck1zZzogc3RyaW5nW107XG4gICAgaW5uZXJIdG1sOiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYW5uYS1jb3JlLW5vbi1lZGl0YWJsZS1nZW5lcmljLXRhYmxlLWxpYicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FubmEtbm9uLWVkaXRhYmxlLWdlbmVyaWMtdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2FubmEtbm9uLWVkaXRhYmxlLWdlbmVyaWMtdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTmdDbGFzcyxcbiAgICAgICAgTmdTdHlsZSxcbiAgICAgICAgTWF0VGFibGVNb2R1bGUsXG4gICAgICAgIE5nRm9yLFxuICAgICAgICBOZ0lmLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBOZ2JUb29sdGlwLFxuICAgICAgICBOZ3hTa2VsZXRvbkxvYWRlck1vZHVsZSxcbiAgICAgICAgc2hvd0VsbGlwc2lzVGV4dE9uSG92ZXJEaXJlY3RpdmUsXG4gICAgICAgIE5nU3dpdGNoLFxuICAgICAgICBOZ1N3aXRjaENhc2UsXG4gICAgICAgIEFubmFJY29uQ29sdW1uQ29tcG9uZW50LFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgTWF0UmFkaW9Nb2R1bGUsXG4gICAgICAgIE5nU3dpdGNoRGVmYXVsdCxcbiAgICAgICAgQW5uYU5vRGF0YUNvbXBvbmVudCxcbiAgICAgICAgQW5uYUNvbHVtbkNoZWNrYm94RmlsdGVyQ29tcG9uZW50LFxuICAgICAgICBBbm5hQ29sdW1uU2xpZGVyRmlsdGVyQ29tcG9uZW50LFxuICAgICAgICBBbm5hQ29sdW1uRGF0ZVJhbmdlRmlsdGVyQ29tcG9uZW50LFxuICAgICAgICBBbm5hQ29sdW1uVGltZUZpbHRlckNvbXBvbmVudCxcbiAgICAgICAgTmdDaXJjbGVQcm9ncmVzc01vZHVsZSxcbiAgICAgICAgQXN5bmNQaXBlLFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFubmFOb25FZGl0YWJsZUdlbmVyaWNUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdDaGVja2VkIHtcbiAgICBASW5wdXQoKSBzaG93U2tlbGV0b25Mb2FkaW5nOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHRhYmxlSGVhZGVyczogSUd0VGFibGVIZWFkZXJbXTtcbiAgICBASW5wdXQoKSB0YWJsZURhdGE6IGFueVtdO1xuICAgIEBJbnB1dCgpIGNsb25lZFRhYmxlRGF0YTogYW55W107XG4gICAgQElucHV0KCkgZ3RHZW5lcmFsQ29uZmlnOiBJR3RHZW5lcmFsQ29uZmlnO1xuICAgIEBJbnB1dCgpIHRvdGFsUm93SW5mbz86IElUb3RhbFJvd0luZm9bXTtcbiAgICBASW5wdXQoKSBndERpbWVuc2lvbjoge1xuICAgICAgICByb3dIZWlnaHQ6IG51bWJlcjtcbiAgICAgICAgaGVhZGVySGVpZ2h0OiBudW1iZXI7XG4gICAgICAgIGRhdGFPblRvcEhlaWdodDogbnVtYmVyO1xuICAgICAgICBtYXJnaW5Gcm9tQm90dG9tOiBudW1iZXI7XG4gICAgICAgIHRhYmxlSGVpZ2h0Pzogc3RyaW5nO1xuICAgIH07XG4gICAgQElucHV0KCkgdGFibGVDbGFzczogc3RyaW5nO1xuICAgIEBJbnB1dCgpIG1heGltdW1Sb3dzV2hpY2hDYW5CZVJlbmRlcmVkV2l0aG91dFNjcm9sbDogbnVtYmVyID0gNTtcbiAgICBASW5wdXQoKSBmaXhOdW1iZXJPZlJvd3NGb3JQb3B1cDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGxpbWl0OiBudW1iZXIgPSAzMDtcbiAgICBASW5wdXQoKSBpbmNsdWRlQm9yZGVySW5UYWJsZUhlaWdodDogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgZG93bmxvYWRJblByb2dyZXNzOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHBlcmNlbnREb25lOiBudW1iZXI7XG4gICAgQElucHV0KCkgc3RhcnJlZEluUHJvZ3Jlc3M6IGJvb2xlYW47XG4gICAgQElucHV0KCkgY2xpY2thYmxlUm93OiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgc2V0VGFibGVIZWlnaHRXaGVuUm93U2l6ZUlzRml4ZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIHRhYmxlQm9yZGVyQm90dG9tQ2xhc3NSZXF1aXJlZDogYm9vbGVhbiA9IHRydWU7XG4gICAgQElucHV0KCkgaGlkZVNvbWVUZHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSB0ZHNIYXZlUm93U3BhbjogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIG11bHRpcGxlVGFibGVzUHJlc2VudDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgpIHRvZ2dsZUNoZWNrYm94ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSB0b2dnbGVSb3dDaGVja2JveCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgdG9nZ2xlSGVhZGVyQ2hlY2tib3ggPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIHVuZG9JY29uQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgZmlsdGVyQXBwbGllZFRvVGFibGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIHNvcnRpbmdBcHBsaWVkVG9UYWJsZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgcm93Q2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgcmFkaW9CdXR0b25TZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgY29sdW1uRmlsdGVyT3BlbmVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBjb2x1bW5GaWx0ZXJDbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIGd0SWNvbkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIGd0U1ZHSWNvbkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIGd0VGV4dEFjdGlvbkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIGd0Vmlld0RldGFpbENsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIGd0SW5uZXJIVE1MQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgZG93bmxvYWRTcG90RGV0YWlscyA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgY2xpY2thYmxlRGF0YUNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIHRvdGFsUm93SWNvbkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIG5vdGlmaWNhdGlvbkljb25Ib3ZlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgbm90aWZpY2F0aW9uSWNvbkhvdmVyTGVhdmUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIGVkaXRhYmxlSW5wdXRFZGl0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIHJhZGlvQnV0dG9uTWVzc2FnZUljb25DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgbnVtYmVyT2ZTa2VsZXRvblJvd3M6IG51bWJlcltdW10gPSBBcnJheSgyMCkuZmlsbCgwKTtcbiAgICB0YWJsZURhdGFXcmFwcGVyOiBhbnlbXTtcbiAgICByb3dDaGVja2VkOiBib29sZWFuO1xuICAgIGlzQWxsUm93c0NoZWNrZWQ6IGJvb2xlYW47XG4gICAgbm9EYXRhV2lkdGg6IHN0cmluZyA9ICc1MCUnO1xuICAgIG1hcmtlZEZvckNyZWRpdFN0YXR1czogc3RyaW5nO1xuICAgIG1hcmtlZEZvck1HU3RhdHVzOiBzdHJpbmc7XG4gICAgZmlsdGVyQWxpZ25tZW50OiBzdHJpbmcgPSAnYm90dG9tIGF1dG8nO1xuXG4gICAgLy9Tb3J0IGFuZCBGaWx0ZXJcbiAgICB0b29sdGlwUmFkaW9UZXh0TWFwOiBNYXA8YW55LCBhbnk+O1xuICAgIGZpbHRlclRhYk9iamVjdHM6IGFueVtdO1xuICAgIHRvb2x0aXA6IGFueTtcbiAgICBkaXNhYmxlQ29sdW1uQ2xlYXJBbGxCdG46IGJvb2xlYW4gPSB0cnVlO1xuICAgIG1hcmdpbiA9IDU7XG5cbiAgICAvL1dlZWsgRmlsdGVyXG4gICAgbXVsdGlXZWVrUGlja2VyQ29uZmlnOiBJV2Vla0NhbGVuZGFyO1xuXG4gICAgdGFibGVDb2x1bW5zOiBzdHJpbmdbXSA9IFtdO1xuICAgIHRvdGFsUm93Q29sdW1uczogc3RyaW5nW10gPSBudWxsO1xuICAgIGJpbmRWYWx1ZUZ1bmNDYWxsZWQ6IGJvb2xlYW47XG5cbiAgICBoaWVyYXJjaHlUb29sdGlwOiB7IG9wZW46ICgpID0+IHZvaWQ7IGNsb3NlOiAoKSA9PiB2b2lkIH07XG4gICAgc2VsbGVyR3JvdXBIaWVyYXJjaHk6IFJhdGluZ1NlbGxlckdyb3VwSGllcmFyY2h5W107XG4gICAgc2hvd0ZpbHRlclRvb2x0aXBUYWJzOiBib29sZWFuOyAvL0NoYW5nZSB0aGUgTmFtZVxuXG4gICAgaXNTY3JvbGxlZExlZnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICByb3dCb3JkZXJXaWR0aDogbnVtYmVyID0gMjtcblxuICAgIHNhbWVUb29sdGlwQ2xpY2tlZDogYm9vbGVhbjtcbiAgICBtYXJnaW5Ub3A6IHN0cmluZyA9ICcnO1xuICAgIEBWaWV3Q2hpbGRyZW4oJ3RhYmxlSGVhZGVyJykgdmlld0NoaWxkVGFibGVIZWFkZXJzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cbiAgICBpc0RpZmZlcmVuY2VMZXNzVGhhbjI1UGVyY2VudDogYm9vbGVhbjtcbiAgICBzdGFydDogbnVtYmVyID0gMDtcbiAgICBlbmQ6IG51bWJlciA9IHRoaXMubGltaXQgKyB0aGlzLnN0YXJ0O1xuICAgIHJlbmRlcmVkRGF0YTogYW55W107XG4gICAgc2VsZWN0ZWRJbnZlbnRvcnlJZEZvckRvd25sb2FkOiBudW1iZXI7XG4gICAgc2VsZWN0ZWREZW1vZ3JhcGhpY0ZvckRvd25sb2FkOiBhbnk7XG4gICAgc2VsZWN0ZWRSb3dUeXBlRm9yRG93bmxvYWQ6IHN0cmluZztcbiAgICBoZWlnaHRPZkNoZWNrYm94VG9vbHRpcEZpbHRlcjogbnVtYmVyO1xuICAgIGlzTm9EYXRhVG9EaXNwbGF5U3ViamVjdCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICBzZWxlY3RlZFN0YXJyZWRPcmRlcklkOiBzdHJpbmc7XG5cbiAgICB0ZXh0QWN0aW9uVG9vbHRpcDoga2V5VmFsdWVUb29sdGlwVHlwZVtdID0gW107XG4gICAgdG9vbHRpcENvbnRhaW5pbmdUYWJsZTogdGFibGVUb29sdGlwVHlwZSA9IG51bGw7XG4gICAgdGFibGVCb3R0b21Cb3JkZXJDbGFzczogc3RyaW5nID0gbnVsbDtcbiAgICBzaG93Q2hlY2tib3hlc0ZvclRpbWVGaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBhbm5hU29ydFNlcnZpY2U6IEFubmFTb3J0U2VydmljZSxcbiAgICAgICAgcHVibGljIGFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2U6IEFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBhbm5hRmlsdGVyU2VydmljZTogQW5uYUZpbHRlclNlcnZpY2UsXG4gICAgKSB7XG4gICAgICAgIHRoaXMuc2V0VG9vbHRpcFJhZGlvTmFtZXMoKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2V0TWFyZ2luTGVmdEZvckZpbHRlckljb24oKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zZXRGaWx0ZXJBbGlnbm1lbnRCYXNlZE9uU2NyZWVuUmVzb2x1dGlvbigpO1xuICAgIH1cblxuICAgIGRldGVjdENoYW5nZXMoKSB7XG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY2hhbmdlcyAmJlxuICAgICAgICAgICAgY2hhbmdlc1snZ3REaW1lbnNpb24nXSAmJlxuICAgICAgICAgICAgY2hhbmdlc1snZ3REaW1lbnNpb24nXS5jdXJyZW50VmFsdWUgJiZcbiAgICAgICAgICAgIHRoaXMuc2V0VGFibGVIZWlnaHRXaGVuUm93U2l6ZUlzRml4ZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnNldFRhYmxlSGVpZ2h0KCk7XG4gICAgICAgICAgICB0aGlzLnNldFRhYmxlQm90dG9tQm9yZGVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2hvd1NrZWxldG9uTG9hZGluZykge1xuICAgICAgICAgICAgdGhpcy50YWJsZURhdGEgPSB0aGlzLm51bWJlck9mU2tlbGV0b25Sb3dzO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlZERhdGEgPSB0aGlzLm51bWJlck9mU2tlbGV0b25Sb3dzO1xuICAgICAgICAgICAgdGhpcy5pc05vRGF0YVRvRGlzcGxheVN1YmplY3QkLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5zZXRUYWJsZUJvdHRvbUJvcmRlcigpO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgY2hhbmdlc1sncGVyY2VudERvbmUnXSB8fFxuICAgICAgICAgICAgY2hhbmdlc1snZG93bmxvYWRJblByb2dyZXNzJ10gfHxcbiAgICAgICAgICAgIChjaGFuZ2VzWydzdGFycmVkSW5Qcm9ncmVzcyddICYmIGNoYW5nZXNbJ3N0YXJyZWRJblByb2dyZXNzJ10uY3VycmVudFZhbHVlICE9IHVuZGVmaW5lZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICAvL25vIHRhc2sgd2lsbCBiZSBwZXJmb3JtZWRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0SW5pdGlhbFJvd3NGb3JUYWJsZSgpO1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlRW5hYmxlRWFjaENvbHVtblRvb2x0aXBJY29uKCk7XG4gICAgICAgICAgICB0aGlzLnRhYmxlQ29sdW1ucyA9IHRoaXMudGFibGVIZWFkZXJzLmZpbHRlcigoeCkgPT4geC52aXNpYmxlKS5tYXAoKHgpID0+IHguaGVhZGVySW5mb1swXS5vYmplY3RLZXkpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICh0aGlzLnRhYmxlRGF0YSAmJiB0aGlzLnRhYmxlRGF0YS5sZW5ndGggPT0gMCkgfHxcbiAgICAgICAgICAgICAgICAodGhpcy50YWJsZURhdGEubGVuZ3RoID09IDIgJiYgdGhpcy5jaGVja0lmQWxsVGhlRWxlbWVudHNBcmVaZXJvKCkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IEFycmF5KDIpLmZpbGwoMCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlZERhdGEgPSBjbG9uZURlZXAodGhpcy50YWJsZURhdGEpO1xuICAgICAgICAgICAgICAgIHRoaXMubWFyZ2luVG9wID0gLXRoaXMuZ3REaW1lbnNpb24ucm93SGVpZ2h0IC0gdGhpcy5ndERpbWVuc2lvbi5yb3dIZWlnaHQgLyAyICsgJ3B4JztcbiAgICAgICAgICAgICAgICB0aGlzLmlzTm9EYXRhVG9EaXNwbGF5U3ViamVjdCQubmV4dCh0cnVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc05vRGF0YVRvRGlzcGxheVN1YmplY3QkLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNob3dTa2VsZXRvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2V0VGFibGVCb3R0b21Cb3JkZXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vc2V0dGluZyB0YWJsZSBjb2x1bW4gaGVyZSBhcyB3ZWxsIGJlY2F1c2Ugd2hpbGUgc2hvd2luZyBza2VsZXRvbiBsb2FkZXIsIHdlIHNob3VsZCBzaG93IHRhYmxlIGhlYWRlcnMuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNoYW5nZXNbJ3RhYmxlSGVhZGVycyddICYmXG4gICAgICAgICAgICAhaXNFcXVhbChjaGFuZ2VzWyd0YWJsZUhlYWRlcnMnXS5jdXJyZW50VmFsdWUsIGNoYW5nZXNbJ3RhYmxlSGVhZGVycyddLnByZXZpb3VzVmFsdWUpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy50YWJsZUNvbHVtbnMgPSB0aGlzLnRhYmxlSGVhZGVycy5maWx0ZXIoKHgpID0+IHgudmlzaWJsZSkubWFwKCh4KSA9PiB4LmhlYWRlckluZm9bMF0ub2JqZWN0S2V5KTtcbiAgICAgICAgICAgIHRoaXMuYW5uYVNvcnRTZXJ2aWNlLmNvbHVtblNvcnRTdGF0ZSA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuaW5pdGlhbFZhbHVlTWFwID0gbmV3IE1hcCgpO1xuICAgICAgICAgICAgLy8gdGhpcy5zZXRDb2x1bW5Tb3J0U3RhdGVNYXAoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlU3RhdGVPYmplY3QoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzWyd0b3RhbFJvd0luZm8nXSAmJiBjaGFuZ2VzWyd0b3RhbFJvd0luZm8nXS5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudG90YWxSb3dDb2x1bW5zID0gdGhpcy50b3RhbFJvd0luZm8ubWFwKCh4KSA9PiB4LmNvbE5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHNldEZpbHRlckFsaWdubWVudEJhc2VkT25TY3JlZW5SZXNvbHV0aW9uKCkge1xuICAgICAgICBsZXQgdmlld3BvcnRIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG4gICAgICAgIGlmICh2aWV3cG9ydEhlaWdodCA8IDc0MCkge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJBbGlnbm1lbnQgPSAnbGVmdCByaWdodCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlckFsaWdubWVudCA9ICdib3R0b20gbGVmdCByaWdodCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRUYWJsZUJvdHRvbUJvcmRlcigpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy50YWJsZUJvcmRlckJvdHRvbUNsYXNzUmVxdWlyZWQgJiZcbiAgICAgICAgICAgIHRoaXMudGFibGVEYXRhICYmXG4gICAgICAgICAgICB0aGlzLnRhYmxlRGF0YS5sZW5ndGggJiZcbiAgICAgICAgICAgIHRoaXMubWF4aW11bVJvd3NXaGljaENhbkJlUmVuZGVyZWRXaXRob3V0U2Nyb2xsIDwgdGhpcy50YWJsZURhdGEubGVuZ3RoXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy50YWJsZUJvdHRvbUJvcmRlckNsYXNzID0gJ2JvdHRvbS1ib3JkZXInO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50YWJsZUJvdHRvbUJvcmRlckNsYXNzID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNoZWNrSWZBbGxUaGVFbGVtZW50c0FyZVplcm8oKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy50YWJsZURhdGEuc29tZSgoaXRlbSkgPT4gaXRlbSAhPSAwKTtcbiAgICB9XG5cbiAgICBzZXRUYWJsZUhlaWdodCgpIHtcbiAgICAgICAgbGV0IHZpZXdwb3J0SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0O1xuICAgICAgICBsZXQgcm93SGVpZ2h0ID0gdGhpcy5ndERpbWVuc2lvbi5yb3dIZWlnaHQ7XG4gICAgICAgIGxldCBoZWFkZXJIZWlnaHQgPSB0aGlzLmd0RGltZW5zaW9uLmhlYWRlckhlaWdodDtcbiAgICAgICAgbGV0IGRhdGFPblRvcEhlaWdodCA9IHRoaXMuZ3REaW1lbnNpb24uZGF0YU9uVG9wSGVpZ2h0O1xuICAgICAgICBsZXQgbWFyZ2luRnJvbUJvdHRvbSA9IHRoaXMuZ3REaW1lbnNpb24ubWFyZ2luRnJvbUJvdHRvbTtcbiAgICAgICAgbGV0IGFjdHVhbFRhYmxlSGVpZ2h0O1xuXG4gICAgICAgIGlmICh0aGlzLmZpeE51bWJlck9mUm93c0ZvclBvcHVwKSB7XG4gICAgICAgICAgICBsZXQgbWF4Tm9PZlJvd3NUb0Rpc3BsYXkgPSB2aWV3cG9ydEhlaWdodCA8IDc0MCA/IDUgOiAxMDtcbiAgICAgICAgICAgIHRoaXMubWF4aW11bVJvd3NXaGljaENhbkJlUmVuZGVyZWRXaXRob3V0U2Nyb2xsID0gbWF4Tm9PZlJvd3NUb0Rpc3BsYXk7XG4gICAgICAgICAgICBhY3R1YWxUYWJsZUhlaWdodCA9IHRoaXMubWF4aW11bVJvd3NXaGljaENhbkJlUmVuZGVyZWRXaXRob3V0U2Nyb2xsICogcm93SGVpZ2h0ICsgaGVhZGVySGVpZ2h0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG1pbkhlaWdodEZvclRhYmxlID0gaGVhZGVySGVpZ2h0ICsgMyAqIHJvd0hlaWdodDtcbiAgICAgICAgICAgIHZpZXdwb3J0SGVpZ2h0ID0gdmlld3BvcnRIZWlnaHQgPD0gZGF0YU9uVG9wSGVpZ2h0ID8gZGF0YU9uVG9wSGVpZ2h0ICsgbWluSGVpZ2h0Rm9yVGFibGUgOiB2aWV3cG9ydEhlaWdodDtcbiAgICAgICAgICAgIGxldCBoZWlnaHRMZWZ0Rm9yVGFibGUgPSB2aWV3cG9ydEhlaWdodCAtIGRhdGFPblRvcEhlaWdodCAtIG1hcmdpbkZyb21Cb3R0b207XG4gICAgICAgICAgICB0aGlzLm1heGltdW1Sb3dzV2hpY2hDYW5CZVJlbmRlcmVkV2l0aG91dFNjcm9sbCA9XG4gICAgICAgICAgICAgICAgTWF0aC5jZWlsKChoZWlnaHRMZWZ0Rm9yVGFibGUgLSBoZWFkZXJIZWlnaHQgLSByb3dIZWlnaHQpIC8gcm93SGVpZ2h0KSArIDE7XG4gICAgICAgICAgICBhY3R1YWxUYWJsZUhlaWdodCA9IHZpZXdwb3J0SGVpZ2h0IC0gZGF0YU9uVG9wSGVpZ2h0IC0gbWFyZ2luRnJvbUJvdHRvbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGxldCBhY3R1YWxUYWJsZUhlaWdodCA9IGhlaWdodExlZnRGb3JUYWJsZSAtICgoaGVpZ2h0TGVmdEZvclRhYmxlIC0gaGVhZGVySGVpZ2h0IC0gcm93SGVpZ2h0KSAlIHJvd0hlaWdodCk7XG5cbiAgICAgICAgdGhpcy5ndERpbWVuc2lvbi50YWJsZUhlaWdodCA9IGAke2FjdHVhbFRhYmxlSGVpZ2h0fXB4YDtcblxuICAgICAgICB0aGlzLm51bWJlck9mU2tlbGV0b25Sb3dzID0gdGhpcy5tYXhpbXVtUm93c1doaWNoQ2FuQmVSZW5kZXJlZFdpdGhvdXRTY3JvbGxcbiAgICAgICAgICAgID8gQXJyYXkodGhpcy5tYXhpbXVtUm93c1doaWNoQ2FuQmVSZW5kZXJlZFdpdGhvdXRTY3JvbGwpLmZpbGwoMClcbiAgICAgICAgICAgIDogQXJyYXkoNSkuZmlsbCgwKTtcbiAgICB9XG5cbiAgICB0cmFja0J5Rm4oaW5kZXg6IG51bWJlcikge1xuICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuXG4gICAgc2V0VG9vbHRpcFJhZGlvTmFtZXMoKSB7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnU3RhcnRUaW1lRm9yRmlsdGVyJywgJ1N0YXJ0IFRpbWUnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnRW5kVGltZUZvckZpbHRlcicsICdFbmQgVGltZScpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdzdGFydFRpbWVGb3JGaWx0ZXInLCAnU3RhcnQgVGltZScpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdlbmRUaW1lRm9yRmlsdGVyJywgJ0VuZCBUaW1lJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ3N0YXJ0X3RpbWVfZm9yX2ZpbHRlcicsICdTdGFydCBUaW1lJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ2VuZF90aW1lX2Zvcl9maWx0ZXInLCAnRW5kIFRpbWUnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgncHJpbWFyeUFFTmFtZScsICdQcmltYXJ5IEFFJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ3JlZ2lvbicsICdSZWdpb24nKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnYWdlbmN5TmFtZScsICdBZ2VuY3knKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnbG9jYXRpb24nLCAnTG9jYXRpb24nKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnYWR2ZXJ0aXNlck5hbWUnLCAnQWR2ZXJ0aXNlcicpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdwcm9kdWN0Q29kZScsICdQcm9kdWN0IENvZGUnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnZmxpZ2h0U3RhcnREYXRlJywgJ1N0YXJ0IERhdGUnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnZmxpZ2h0RW5kRGF0ZScsICdFbmQgRGF0ZScpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdvcmRlcklkQW5kUmV2TnVtYmVyJywgJ1NUTiBPcmRlciMtUmV2IycpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdhbHRlcm5hdGVPcmRlcklkJywgJ0FsdC9SZXAgT3JkZXIgIycpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdncnAnLCAnR1JQJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ2NwcCcsICdDUFAnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnaW1wcycsICdJTVBTJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ2NwbScsICdDUE0nKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnb2ZmZXJlZE1HcycsICdPZmZlcmVkIE1HJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ291dHN0YW5kaW5nUEUnLCAnTy9TIFBFJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ29mZmVyZWRBRFVzJywgJ09mZmVyZWQgQURVcycpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCd1ZERlZmljaXRWYWx1ZScsICdPL1MgQXVkIERlbHRhJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ3N0YXJ0RW5kVGltZU11bHRpJywgJ1RpbWUnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnYm9va2VkVmFsdWUnLCAnQm9va2VkJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ2Jvb2tlZFNwb3RzJywgJ1Nwb3RzJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ1VzZXJDcmVkaXRlZFZhbHVlJywgJ1VzZXIgQ3JlZGl0ZWQnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnVXNlclVucmVzb2x2ZWRWYWx1ZScsICdVc2VyIFVucmVzb2x2ZWQnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnQnV5ZXJBZGRlZFZhbHVlJywgJ0J1eWVyIEFkZGVkJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ0J1eWVyRGVsZXRlZFZhbHVlJywgJ0J1eWVyIERlbGV0ZWQnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgndXNlckNoYW5nZXMnLCAnVXNlciBDaGFuZ2VzJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ2J1eWVyQ2hhbmdlcycsICdCdXllciBDaGFuZ2VzJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ3VzZXJNRycsICdVc2VyIE1HJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ3VzZXJBRFVzJywgJ1VzZXIgQURVcycpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdpbnZlbnRvcnlDb2RlJywgJ0ludmVudG9yeSBDb2RlJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ3Byb2dyYW0nLCAnUHJvZ3JhbScpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdhZ2VuY3knLCAnQWdlbmN5Jyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ2FkdmVydGlzZXInLCAnQWR2ZXJ0aXNlcicpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdzdGFydERhdGUnLCAnU3RhcnQgRGF0ZScpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdlbmREYXRlJywgJ0VuZCBEYXRlJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ2RhdGUnLCAnRGF0ZScpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdyY3ZQcmVlbXB0JywgJyQgTWFkZWdvb2QgUEVzJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ29zUHJlZW1wdCcsICckIE8vUyBQRXMnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgncmN2VW5kZXJEbHknLCAnUmVjb3ZlcmVkIFVEJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ29zVW5kZXJEbHknLCAnTy9zIFVuZGVyIERseScpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdwcmltYXJ5QWUnLCAnUHJpbWFyeSBBRScpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdyZWdpb24nLCAnUmVnaW9uJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ3JldkNvZGUxJywgJ1JldiBjb2RlIDEnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnb3JkZXJOb1Jldk5vJywgJ1NUTiBPcmRlciMtUmV2IycpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdyZXZDb2RlMicsICdSZXYgY29kZSAyJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ3JldkNvZGUzJywgJ1JldiBjb2RlIDMnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnYm9va2VkJywgJyQgQm9va2VkJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ3Nwb3RzJywgJ1Nwb3RzJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ3Bvc3RlZEF1ZFBlcmNlbnQnLCAnUG9zdGVkICUnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgncmV2aXNpb24nLCAnUmV2aXNpb24nKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnYnV5ZXJPcmRlcklkJywgJ0FMVC9SRVAgT3JkZXIjJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ2RlbW8nLCAnRGVtbycpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdwb3N0ZWRBZHUnLCAnJCBQb3N0ZWQgQURVcycpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdzY2hlZHVsZWRBZHUnLCAnJCBTY2hlZHVsZWQgQURVcycpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdhdWRpZW5jZURlZmljaXQnLCAnJCBPL1MgQXVkaWVuY2UnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgncG9zdGVkQXVkUGVyY2VudCcsICdQb3N0ZWQgQXVkaWVuY2UgJScpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdwb3RlbnRpYWxVbml0c1ZhbHVlJywgJ1BPVCBVbml0cycpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdib29rZWRVbml0c1ZhbHVlJywgJ0Jvb2tlZCBFcSBVbml0cycpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdib29rZWRBbW91bnRXaXRoWmVyb1JhdGluZ1ZhbHVlJywgJ1RvdGFsICQgQm9va2VkJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ2Jvb2tlZEFtb3VudFBlcmNlbnRhZ2VXaXRoWmVyb1JhdGluZ1ZhbHVlJywgJyUgQWdhaW5zdCBBbGwgRGVtb3MnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnYm9va2VkQW1vdW50V2l0aG91dFplcm9SYXRpbmdWYWx1ZScsICckQm9va2VkIFdpdGggSW1wcyjigJkwMDApJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ2Jvb2tlZEFtb3VudFBlcmNlbnRhZ2VXaXRob3V0WmVyb1JhdGluZ1ZhbHVlJywgJyUgQWdhaW5zdCBBbGwgRGVtb3MnKTtcblxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCd0b3RhbEJvb2tlZEFtb3VudFZhbHVlJywgJ1RvdGFsICRCb29rZWQnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnYXZlcmFnZVVuaXRSYXRlVmFsdWUnLCAnIEFVUicpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCd0b3RhbEJvb2tlZEFtb3VudFdpdGhSYXRpbmdWYWx1ZScsICckQm9va2VkIFdpdGggUmF0aW5nJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ2F2ZXJhZ2VVbml0UmF0ZVdpdGhSYXRpbmdWYWx1ZScsICdBVVIgV2l0aCBSYXRpbmcnKTtcblxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCd0b3RhbEJvb2tlZEFtb3VudFdpdGhJbXByZXNzaW9uVmFsdWUnLCAnJEJvb2tlZCBXaXRoIElNUFMnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnYXZlcmFnZVVuaXRSYXRlV2l0aEltcHJlc3Npb25WYWx1ZScsICdBVVIgV2l0aCBJTVBTJyk7XG5cbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnYm9va2VkVW5pdHNXaXRoUmF0aW5nVmFsdWUnLCAnQm9va2VkIFVuaXRzIFdpdGggUmF0aW5nJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ3Bvc3RlZFVuaXRzV2l0aFJhdGluZ1ZhbHVlJywgJ1Bvc3RlZCBVbml0cyBXaXRoIFJhdGluZycpO1xuXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ2Jvb2tlZFVuaXRzV2l0aEltcHJlc3Npb25WYWx1ZScsICdCb29rZWQgVW5pdHMgV2l0aCBJTVBTJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ3Bvc3RlZFVuaXRzV2l0aEltcHJlc3Npb25WYWx1ZScsICdQb3N0ZWQgVW5pdHMgV2l0aCBJTVBTJyk7XG5cbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnYm9va2VkUmF0aW5ncycsICdCb29rZWQgUmF0aW5nJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ3Bvc3RlZFJhdGluZ3MnLCAnUE9TVEVEIFJhdGluZycpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdQb3N0ZWRSYXRpbmcnLCAnUG9zdGVkIFJURycpO1xuXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ2Jvb2tlZEltcHJlc3Npb25zJywgXCJCb29rZWQgSU1QKCcwMDApXCIpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdwb3N0ZWRJbXByZXNzaW9ucycsIFwiUG9zdGVkIElNUCgnMDAwKVwiKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnUG9zdGVkSW1wcmVzc2lvbnMnLCBcIlBvc3RlZCBJTVAoJzAwMClcIik7XG5cbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnYm9va2VkQXZlcmFnZVJhdGluZycsICdCb29rZWQgQVUgUmF0aW5nJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ3Bvc3RlZEF2ZXJhZ2VSYXRpbmcnLCAnUG9zdGVkIEFVIFJhdGluZycpO1xuXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ2Jvb2tlZEF2ZXJhZ2VJbXByZXNzaW9uJywgJ0Jvb2tlZCBBVSBJTVBTJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ3Bvc3RlZEF2ZXJhZ2VJbXByZXNzaW9uJywgJ1Bvc3RlZCBBVSBJTVBTJyk7XG5cbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnYm9va2VkQ3BwVmFsdWUnLCAnQm9va2VkIENQUCcpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdib29rZWRFZmZlY3RpdmVDcHBWYWx1ZScsICdFZmZlY3RpdmUgQ1BQJyk7XG5cbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnYm9va2VkQ3BtVmFsdWUnLCAnQm9va2VkIENQTScpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdib29rZWRFZmZlY3RpdmVDcG1WYWx1ZScsICdFZmZlY3RpdmUgQ1BNJyk7XG5cbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnb3JkZXJTb3VyY2UnLCAnT3JkZXIgUm91dGUnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnb3JkZXJDYXRlZ29yeScsICdSZXYgQ2F0ZWdvcnknKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnY2FzaE9yVHJhZGUnLCAnQy9UJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ3JldmlzaW9uU3RhcnREYXRlJywgJ1JldmlzaW9uIFN0YXJ0IERhdGUnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnbmFtZScsICduYW1lJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ3JvbGUnLCAncm9sZScpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdzdGF0aW9uQ291bnQnLCAnc3RhdGlvbkNvdW50Jyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ3N0YXRpb25MaXN0JywgJ3N0YXRpb25MaXN0Jyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ2FwcHJvdmVkT24nLCAnQXBwcm92ZWQgT24nKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnYXBwcm92ZWRCeScsICdBcHByb3ZlZCBCeScpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdPREltcHMnLCAnUHJvai4gT0QgSU1QUycpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdVREltcHMnLCAnUHJvai4gVUQgSU1QUycpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdPREdycCcsICdQcm9qLiBPRCBHUlAnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnVURHcnAnLCAnUHJvai4gVUQgR1JQJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ3VkSW1wc1BlcmNlbnQnLCAnUHJvai4gVUQgJScpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCd1ZEdycFBlcmNlbnQnLCAnUHJvai4gVUQgR1JQICUnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnb2RJbXBzUGVyY2VudCcsICdQcm9qLiBPRCAlJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ29kR3JwUGVyY2VudCcsICdQcm9qLiBPRCBHUlAgJScpO1xuXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ1JldmlzaW9uTnVtYmVyJywgJ1JldmlzaW9uICMnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnUmV2aXNpb25UeXBlJywgJ1JldmlzaW9uIFR5cGUnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnR2VuZXJhdGVkT24nLCAnR2VuZXJhdGVkIE9uJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ0Jvb2tlZFZhbHVlRm9yRGlzcGxheScsICckIEJPT0tFRCcpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdCb29rZWRWYWx1ZScsICckIEJvb2tlZCcpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdCb29rZWRTcG90cycsICdTcG90cycpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdCb29rZWRHUlAnLCAnR1JQJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ0Jvb2tlZElNUFNSZXZUYWInLCBcIklNUFMnKDAwMClcIik7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ0Jvb2tlZENQUCcsICdDUFAnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnQm9va2VkQ1BNJywgJ0NQTScpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdNR3NWYWx1ZUZvckRpc3BsYXknLCAnJCBNR1MnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnTUdzVmFsdWUnLCAnJCBNR1MnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnQURVc1ZhbHVlRm9yRGlzcGxheScsICckIEFEVVMnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnQURVc1ZhbHVlJywgJyQgQURVUycpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdCdXllckNoYW5nZXNWYWx1ZUZvckRpc3BsYXknLCAnJCBCdXllciBDaGFuZ2UnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnQnV5ZXJDaGFuZ2VzVmFsdWUnLCAnJCBCdXllciBDaGFuZ2UnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnVXNlckNoYW5nZXNWYWx1ZUZvckRpc3BsYXknLCAnJCBTZWxsZXIgVXNlciBDaGFuZ2UnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnVXNlckNoYW5nZXNWYWx1ZScsICckIFNlbGxlciBVc2VyIENoYW5nZScpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdTZWxsZXJMaW5lJywgJ1NlbGxlciBMaW5lICMnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnQnV5ZXJMaW5lJywgJ0J1eSBMaW5lICMnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnU3BvdFN0YXR1cycsICdTcG90IFN0YXR1cycpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdJbnZlbnRvcnlDb2RlJywgJ0ludmVudG9yeSBDb2RlJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ0J1eWVyUHJvZ3JhbU5hbWUnLCAnQnV5ZXIgUHJvZ3JhbSBOYW1lJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ1JldmVudWVDbGFzcycsICdSZXZlbnVlIENsYXNzJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ1dlZWtseUFVUicsICdCb29rZWQgQXZnLiBSYXRlJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ0Jvb2tlZFJhdGUnLCAnQm9va2VkIFJhdGUnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnQm9va2VkUlRHJywgJ0Jvb2tlZCBSVEcnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnQm9va2VkSU1QUycsIFwiQm9va2VkIElNUCgnMDAwKVwiKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnSU1QUycsIFwiSU1QKCcwMDApXCIpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdBVVJURycsICdBdmcgUlRHJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ0FVSU1QUycsIFwiQXZnIElNUCgnMDAwKVwiKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnUG9zdGVkUmF0aW5nc09ySW1wcmVzc2lvbnMnLCAnUG9zdGVkIFJURycpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdTY2hlZHVsZUZsaWdodFdlZWsnLCAnU2NoZWR1bGUgV2VlaycpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdTY2hlZHVsZWREYXknLCAnU2NoZWR1bGVkIERheScpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdBaXJTdGF0dXMnLCAnQWlyIFN0YXR1cycpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdBaXJEYXRlQW5kVGltZScsICdBaXIgRGF0ZSAmIFRpbWUnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnQWlyRGF0ZScsICdBaXIgRGF0ZScpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdOb3JtYWxpemVkT3JkZXJlZFJhdGluZycsICdOb3JtYWxpemVkIEJvb2tlZCBSVEcnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnTm9ybWFsaXplZE9yZGVyZWRJbXByZXNzaW9ucycsIFwiTm9ybWFsaXplZCBCb29rZWQgSU1QKCcwMDApXCIpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdOb3JtYWxpemVkUG9zdGVkUmF0aW5nJywgJ05vcm1hbGl6ZWQgUG9zdGVkIFJURycpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdOb3JtYWxpemVkUG9zdGVkSW1wcmVzc2lvbnMnLCBcIk5vcm1hbGl6ZWQgUG9zdGVkIElNUCgnMDAwKVwiKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnQWRJZCcsICdBZC1JZCcpO1xuXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ2Rpc3BsYXlpbXBzJywgJ0lNUFMnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnZGlzcGxheUdycCcsICdHUlAnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnYm9va2VkU3BvdHNGb3JEaXNwbGF5JywgJ1Nwb3RzJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ2Rpc3BsYXlTcG90cycsICdTcG90cycpO1xuXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ2VzdGltYXRlTm8nLCAnRXN0aW1hdGUjJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ3ByaW1hcnlCdXllcicsICdQcmltYXJ5IEJ1eWVyJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ3ByaW1hcnlCdXllck5hbWUnLCAnUHJpbWFyeSBCdXllcicpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdzZWNvbmRhcnlCdXllck5hbWUnLCAnU2Vjb25kYXJ5IEJ1eWVyJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ3NlY29uZGFyeUJ1eWVyJywgJ1NlY29uZGFyeSBCdXllcicpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCd0aW1lb3V0RGF0ZScsICdUaW1lb3V0IERhdGUnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnRGlzcGxheXRTcG90U3RhdHVzQkknLCAnU3BvdCBTdGF0dXMnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnTGluZVNwb3QnLCAnTGluZS5TcG90Jyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ0x1cldpbmRvd05hbWUnLCAnUG9saXRpY2FsIFdpbmRvdycpO1xuXG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ3VkVmFsdWUnLCAnUHJvai4gJCBVRCcpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdvZFZhbHVlJywgJ1Byb2ouICQgT0QnKTtcblxuICAgICAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KCdPdGhlckF2YWlsYWJsZVNwb3RzVGFibGVJbnZlbnRvcnlDb2RlJywgJ0ludmVudG9yeSBDb2RlJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ090aGVyQXZhaWxhYmxlU3BvdHNUYWJsZUJ1eWVyUHJvZ3JhbU5hbWUnLCAnQnV5ZXIgUHJvZ3JhbSBOYW1lJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ090aGVyQXZhaWxhYmxlU3BvdHNUYWJsZVN0YXJ0VGltZScsICdTdGFydCBUaW1lJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ090aGVyQXZhaWxhYmxlU3BvdHNUYWJsZUVuZFRpbWUnLCAnRW5kIFRpbWUnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlV2Vla2x5QVVSJywgJ0Jvb2tlZCBBdmcuIFJhdGUnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlRGlzcGxheVJldmVudWVDbGFzcycsICdSZXYgQ2xhc3MnKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnT3RoZXJBdmFpbGFibGVTcG90c1RhYmxlQWN0dWFsV2Vla1N0YXJ0RGF0ZScsICdXZWVrJyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ090aGVyQXZhaWxhYmxlU3BvdHNUYWJsZVdlZWtEYXknLCAnRGF5Jyk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ090aGVyQXZhaWxhYmxlU3BvdHNUYWJsZURpc3BsYXlMZW5ndGgnLCAnTGVuZ3RoJyk7XG5cbiAgICAgICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldCgnUHJvamVjdGVkSW1wcmVzc2lvbnMnLCBcIlByb2plY3RlZCBJTVAoJzAwMClcIik7XG4gICAgICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoJ1Byb2plY3RlZFJ0ZycsICdQcm9qZWN0ZWQgUlRHJyk7XG4gICAgfVxuXG4gICAgc2VsZWN0T3JVbnNlbGVjdENoZWNrYm94KHJvd0RhdGE6IGFueSwgY29sdW1uS2V5czogYW55LCBpc0NoZWNrYm94U2VsZWN0ZWQ6IGFueSkge1xuICAgICAgICByb3dEYXRhW2NvbHVtbktleXNdID0gIXJvd0RhdGFbY29sdW1uS2V5c107XG4gICAgICAgIHRoaXMudG9nZ2xlQ2hlY2tib3guZW1pdCh7IHJvd0RhdGEsIGNvbHVtbktleXMsIGlzQ2hlY2tib3hTZWxlY3RlZCB9KTtcbiAgICB9XG5cbiAgICBzZWxlY3RPclVuc2VsZWN0UmFkaW9ib3gocm93RGF0YTogYW55LCBjb2x1bW5LZXlzOiBhbnksIGlzQ2hlY2tib3hTZWxlY3RlZDogYm9vbGVhbikge1xuICAgICAgICBpZiAocm93RGF0YVtjb2x1bW5LZXlzXSA9PSBpc0NoZWNrYm94U2VsZWN0ZWQpIHJldHVybjtcbiAgICAgICAgcm93RGF0YVtjb2x1bW5LZXlzXSA9IGlzQ2hlY2tib3hTZWxlY3RlZDtcbiAgICAgICAgdGhpcy50b2dnbGVDaGVja2JveC5lbWl0KHsgcm93RGF0YSwgY29sdW1uS2V5cywgaXNDaGVja2JveFNlbGVjdGVkIH0pO1xuICAgIH1cblxuICAgIHNlbGVjdFVuc2VsZWN0QWxsUm93cygpIHtcbiAgICAgICAgdGhpcy50b2dnbGVIZWFkZXJDaGVja2JveC5lbWl0KCk7XG4gICAgfVxuXG4gICAgc2VsZWN0VW5zZWxlY3RSb3cocm93RGF0YTogYW55KSB7XG4gICAgICAgIHRoaXMudG9nZ2xlUm93Q2hlY2tib3guZW1pdChyb3dEYXRhKTtcbiAgICB9XG5cbiAgICB1bmRvQ3JlZGl0ZWRTcG90KGRhdGE6IGFueSkge1xuICAgICAgICB0aGlzLnVuZG9JY29uQ2xpY2tlZC5lbWl0KHsgZGF0YSwgbWdPckNyZWRpdDogJ0NyZWRpdCcgfSk7XG4gICAgfVxuXG4gICAgdW5kb01nU3BvdChkYXRhOiBhbnkpIHtcbiAgICAgICAgdGhpcy51bmRvSWNvbkNsaWNrZWQuZW1pdCh7IGRhdGEsIG1nT3JDcmVkaXQ6ICdNYWtlR29vZCcgfSk7XG4gICAgfVxuXG4gICAgLy9Tb3J0IGFuZCBGaWx0ZXIgTG9naWMgYmVnaW5zIVxuICAgIGNsb3NlVG9vbHRpcCgpIHtcbiAgICAgICAgaWYgKHRoaXMudG9vbHRpcCAmJiB0aGlzLnRvb2x0aXAuaXNPcGVuKCkpIHtcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcC5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudG9vbHRpcCA9IG51bGw7XG4gICAgICAgIGlmICghdGhpcy5iaW5kVmFsdWVGdW5jQ2FsbGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbkZpbHRlckNsb3NlZC5lbWl0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpc1Rvb2x0aXBBY3RpdmUoaGVhZGVyOiBhbnlbXSkge1xuICAgICAgICByZXR1cm4gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pc1Rvb2x0aXBBY3RpdmUoaGVhZGVyLCB0aGlzLmFubmFTb3J0U2VydmljZS5jb2x1bW5Tb3J0U3RhdGUpO1xuICAgIH1cblxuICAgIGJpbmRUaGVWYWx1ZVRvVG9vbFRpcCh0b29sdGlwOiBhbnksIGhlYWRlcjogSUhlYWRlckluZm8pIHtcbiAgICAgICAgdGhpcy5iaW5kVmFsdWVGdW5jQ2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgLy8gaWYgc2FtZSB0b29sdGlwIG9wZW5lZCBjbG9zZSBpdFxuICAgICAgICBpZiAodG9vbHRpcCA9PSB0aGlzLnRvb2x0aXApIHtcbiAgICAgICAgICAgIHRoaXMuYmluZFZhbHVlRnVuY0NhbGxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jbG9zZVRvb2x0aXAoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBlbmFibGVkSGVhZGVyczogYW55W10gPSBbXTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tJZlVuaXF1ZVZhbHVlUHJlc2VudEZvclRoZUhlYWRlcihoZWFkZXIsIGVuYWJsZWRIZWFkZXJzKTtcbiAgICAgICAgICAgIHRoaXMub3BlblRvb2x0aXAodG9vbHRpcCwgZW5hYmxlZEhlYWRlcnMsIGhlYWRlcik7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB3aW5kb3cuaW5uZXJXaWR0aCA8IDE1MDAgJiZcbiAgICAgICAgICAgICAgICB3aW5kb3cuaW5uZXJIZWlnaHQgPCA3NjggJiZcbiAgICAgICAgICAgICAgICAhdGhpcy5hbm5hRmlsdGVyU2VydmljZS5zbGlkZXJTZXQuaGFzKGhlYWRlci5maWx0ZXJTb3J0T2JqZWN0S2V5c1swXSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uRmlsdGVyT3BlbmVkLmVtaXQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zaG93Q2hlY2tib3hlc0ZvclRpbWVGaWx0ZXIgPVxuICAgICAgICAgICAgICAgIHRoaXMuZ3RHZW5lcmFsQ29uZmlnLmNvbXBvbmVudCA9PSAnU1BPVERFVEFJTFMnIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5ndEdlbmVyYWxDb25maWcuY29tcG9uZW50ID09ICdFWENMVURFSU5WRU5UT1JZUE9QVVAnIHx8XG4gICAgICAgICAgICAgICAgdGhpcy5ndEdlbmVyYWxDb25maWcuY29tcG9uZW50ID09ICdSQVRJTkcnO1xuICAgICAgICAgICAgdGhpcy5zaG93RmlsdGVyVG9vbHRpcFRhYnMgPSBoZWFkZXIuZmlsdGVyU29ydE9iamVjdEtleXMubGVuZ3RoID4gMTtcbiAgICAgICAgICAgIHRoaXMuYmluZFZhbHVlRnVuY0NhbGxlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2hlY2tJZlVuaXF1ZVZhbHVlUHJlc2VudEZvclRoZUhlYWRlcihoZWFkZXI6IElIZWFkZXJJbmZvLCBlbmFibGVkSGVhZGVyczogYW55W10pIHtcbiAgICAgICAgaGVhZGVyLmZpbHRlclNvcnRPYmplY3RLZXlzLmZvckVhY2goKGl0ZW06IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgbGV0IGRhdGFUb0NoZWNrID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5nZXRGaWx0ZXJPcHRpb25zRGF0YSh0aGlzLnRhYmxlRGF0YSwgdGhpcy5jbG9uZWRUYWJsZURhdGEsIGl0ZW0pO1xuICAgICAgICAgICAgaWYgKGl0ZW0gPT0gJ3BlcmlvZCcpIHtcbiAgICAgICAgICAgICAgICBsZXQgdW5pcVN0YXJ0RGF0ZSA9IHVuaXEoZGF0YVRvQ2hlY2subWFwKCh1OiB7IFt4OiBzdHJpbmddOiBhbnkgfSkgPT4gdVsnc3RhcnREYXRlJ10pKTtcbiAgICAgICAgICAgICAgICBsZXQgdW5pcUVuZERhdGUgPSB1bmlxKGRhdGFUb0NoZWNrLm1hcCgodTogeyBbeDogc3RyaW5nXTogYW55IH0pID0+IHVbJ2VuZERhdGUnXSkpO1xuICAgICAgICAgICAgICAgIGlmICh1bmlxU3RhcnREYXRlLmxlbmd0aCA+IDEgfHwgdW5pcUVuZERhdGUubGVuZ3RoID4gMSB8fCB0aGlzLmlzVG9vbHRpcEFjdGl2ZShbaXRlbV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZWRIZWFkZXJzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWVzID0gZGF0YVRvQ2hlY2subWFwKCh1OiB7IFt4OiBzdHJpbmddOiBhbnkgfSkgPT4gdVtpdGVtXSk7XG4gICAgICAgICAgICAgICAgLy8gaWYgbGFzdCBhcHBsaWVkIGZpbHRlciBpcyB0aGlzIGhlYWRlciwgcHVzaCBpdCBhbG9zIGFzIGVuYWJsZWRIZWFkZXJcbiAgICAgICAgICAgICAgICBsZXQgYWN0aXZlQW5kTGFzdGx5QXBwbGllZEhlYWRlciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5hcHBsaWVkRmlsdGVyc0FycmF5Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5hcHBsaWVkRmlsdGVyc0FycmF5W3RoaXMuYW5uYUZpbHRlclNlcnZpY2UuYXBwbGllZEZpbHRlcnNBcnJheS5sZW5ndGggLSAxXSA9PVxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBhY3RpdmVBbmRMYXN0bHlBcHBsaWVkSGVhZGVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXIuZmlsdGVyID09ICdDSEVDS0JPWCcgJiZcbiAgICAgICAgICAgICAgICAgICAgKHVuaXEodmFsdWVzKS5maWx0ZXIoKG4pID0+IG4gIT0gbnVsbCkubGVuZ3RoID4gMSB8fCBhY3RpdmVBbmRMYXN0bHlBcHBsaWVkSGVhZGVyKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBlbmFibGVkSGVhZGVycy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlci5maWx0ZXIgIT0gJ0NIRUNLQk9YJyAmJlxuICAgICAgICAgICAgICAgICAgICAodW5pcSh2YWx1ZXMpLmZpbHRlcigobikgPT4gbiAhPSBudWxsICYmIG4gIT0gJy0nKS5sZW5ndGggPiAxIHx8IGFjdGl2ZUFuZExhc3RseUFwcGxpZWRIZWFkZXIpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIGVuYWJsZWRIZWFkZXJzLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvcGVuVG9vbHRpcCh0b29sdGlwOiBhbnksIGhlYWRlcjogYW55LCBjb2x1bW5IZWFkZXI6IElIZWFkZXJJbmZvKSB7XG4gICAgICAgIHRoaXMuY2xvc2VUb29sdGlwKCk7XG4gICAgICAgIHRoaXMudG9vbHRpcCA9IHRvb2x0aXA7XG4gICAgICAgIHRoaXMudG9vbHRpcC5vcGVuKCk7XG4gICAgICAgIC8vY29udmVydCBrZXkgaW50byB0aGUgaGVhZGVyXG4gICAgICAgIHRoaXMuZmlsdGVyVGFiT2JqZWN0cyA9IGhlYWRlci5tYXAoKGtleTogc3RyaW5nLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuaGFzKGtleSkgPyB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuZ2V0KGtleSkgOiBrZXk7IC8vY2hhbmdlIHRvIGRpc3BsYXkgbmFtZVxuICAgICAgICAgICAgcmV0dXJuIG5ldyByYWRpb0J1dHRvbk1vZGVsKFxuICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICBjb2x1bW5IZWFkZXIuaXNTb3J0UmVxdWlyZWRbaW5kZXhdLFxuICAgICAgICAgICAgICAgIGNvbHVtbkhlYWRlci5pc0ZpbHRlclJlcXVpcmVkW2luZGV4XSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGRpc2FibGVFbmFibGVFYWNoQ29sdW1uVG9vbHRpcEljb24oKSB7XG4gICAgICAgIHRoaXMudGFibGVIZWFkZXJzLmZvckVhY2goKGhlYWRlcikgPT4ge1xuICAgICAgICAgICAgaGVhZGVyLmhlYWRlckluZm8uZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLnNob3dUb29sdGlwSWNvbikge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWVzID0gW107XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZGlzYWJsZVRvb2x0aXBJY29uID0gdHJ1ZTtcblxuICAgICAgICAgICAgICAgICAgICBpdGVtLmZpbHRlclNvcnRPYmplY3RLZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxhdGVzdEZpbHRlcnMgPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmFwcGxpZWRGaWx0ZXJzQXJyYXk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXRlc3RGaWx0ZXJzLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLmRpc2FibGVUb29sdGlwSWNvbiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhdGVzdEZpbHRlcnNbbGF0ZXN0RmlsdGVycy5sZW5ndGggLSAxXSA9PSBrZXlcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZGlzYWJsZVRvb2x0aXBJY29uID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmRpc2FibGVUb29sdGlwSWNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT0gJ3BlcmlvZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVuaXFTdGFydERhdGUgPSB1bmlxKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZURhdGEubWFwKCh1OiB7IFt4OiBzdHJpbmddOiBhbnkgfSkgPT4gdVsnc3RhcnREYXRlJ10pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdW5pcUVuZERhdGUgPSB1bmlxKHRoaXMudGFibGVEYXRhLm1hcCgodTogeyBbeDogc3RyaW5nXTogYW55IH0pID0+IHVbJ2VuZERhdGUnXSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZGlzYWJsZVRvb2x0aXBJY29uID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXFTdGFydERhdGUubGVuZ3RoID4gMSB8fCB1bmlxRW5kRGF0ZS5sZW5ndGggPiAxID8gZmFsc2UgOiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IHRoaXMudGFibGVEYXRhLm1hcCgodTogeyBbeDogc3RyaW5nXTogYW55IH0pID0+IHVba2V5XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpdGVtLmZpbHRlciA9PSAnQ0hFQ0tCT1gnICYmIHVuaXEodmFsdWVzKS5maWx0ZXIoKG4pID0+IG4gIT0gbnVsbCkubGVuZ3RoID4gMSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpdGVtLmZpbHRlciAhPSAnQ0hFQ0tCT1gnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pcSh2YWx1ZXMpLmZpbHRlcigobikgPT4gbiAhPSBudWxsICYmIG4gIT0gJy0nKS5sZW5ndGggPiAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0uZGlzYWJsZVRvb2x0aXBJY29uID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXRNYXJnaW5MZWZ0Rm9yRmlsdGVySWNvbigpIHtcbiAgICAgICAgbGV0IGVsZW1lbnRBcnIgPSB0aGlzLnZpZXdDaGlsZFRhYmxlSGVhZGVycy50b0FycmF5KCk7XG4gICAgICAgIGVsZW1lbnRBcnIuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgbGV0IGNoaWxkRGl2RWxlbWVudHMgPSBpdGVtLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW47XG5cbiAgICAgICAgICAgIGlmIChjaGlsZERpdkVsZW1lbnRzLmxlbmd0aCA9PSAyKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZpcnN0UGFyYWdyYXBoT2Zmc2V0V2lkdGg6IG51bWJlciA9IGNoaWxkRGl2RWxlbWVudHNbMF0/LmNoaWxkcmVuWzBdPy5vZmZzZXRXaWR0aFxuICAgICAgICAgICAgICAgICAgICA/IGNoaWxkRGl2RWxlbWVudHNbMF0/LmNoaWxkcmVuWzBdPy5vZmZzZXRXaWR0aFxuICAgICAgICAgICAgICAgICAgICA6IDA7XG4gICAgICAgICAgICAgICAgbGV0IHNlY29uZFBhcmFncmFwaE9mZnNldFdpZHRoOiBudW1iZXIgPSBjaGlsZERpdkVsZW1lbnRzWzFdLmNoaWxkcmVuWzBdPy5vZmZzZXRXaWR0aFxuICAgICAgICAgICAgICAgICAgICA/IGNoaWxkRGl2RWxlbWVudHNbMV0uY2hpbGRyZW5bMF0/Lm9mZnNldFdpZHRoXG4gICAgICAgICAgICAgICAgICAgIDogMDtcblxuICAgICAgICAgICAgICAgIGlmIChmaXJzdFBhcmFncmFwaE9mZnNldFdpZHRoID4gc2Vjb25kUGFyYWdyYXBoT2Zmc2V0V2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRpZmYgPSBmaXJzdFBhcmFncmFwaE9mZnNldFdpZHRoIC0gc2Vjb25kUGFyYWdyYXBoT2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZERpdkVsZW1lbnRzWzBdLmNoaWxkcmVuLmxlbmd0aCA9PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZERpdkVsZW1lbnRzWzBdLmNoaWxkcmVuWzFdLnN0eWxlLm1hcmdpbkxlZnQgPSA0ICsgJ3B4JztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZERpdkVsZW1lbnRzWzFdLmNoaWxkcmVuLmxlbmd0aCA9PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZERpdkVsZW1lbnRzWzFdLmNoaWxkcmVuWzFdLnN0eWxlLm1hcmdpbkxlZnQgPSBkaWZmICsgNCArICdweCc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZGlmZiA9IHNlY29uZFBhcmFncmFwaE9mZnNldFdpZHRoIC0gZmlyc3RQYXJhZ3JhcGhPZmZzZXRXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkRGl2RWxlbWVudHNbMF0uY2hpbGRyZW4ubGVuZ3RoID09IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkRGl2RWxlbWVudHNbMF0uY2hpbGRyZW5bMV0uc3R5bGUubWFyZ2luTGVmdCA9IGRpZmYgKyA0ICsgJ3B4JztcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZERpdkVsZW1lbnRzWzFdLmNoaWxkcmVuLmxlbmd0aCA9PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZERpdkVsZW1lbnRzWzFdLmNoaWxkcmVuWzFdLnN0eWxlLm1hcmdpbkxlZnQgPSA0ICsgJ3B4JztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZGF0YVJvd0NsaWNrZWQocm93RGF0YTogYW55KSB7XG4gICAgICAgIHRoaXMucm93Q2xpY2tlZC5lbWl0KHJvd0RhdGEpO1xuICAgIH1cblxuICAgIHJhZGlvQnV0dG9uQ2xpY2tlZChkYXRhOiBhbnksIGFjdGlvbjogc3RyaW5nLCBpc0Rpc2FibGVkOiBib29sZWFuKSB7XG4gICAgICAgIGlmICghaXNEaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5yYWRpb0J1dHRvblNlbGVjdGVkLmVtaXQoeyBkYXRhLCBhY3Rpb24gfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBiaW5kVGhlVmFsdWVUb1NlbGxlckdyb3VwVG9vbHRpcChzZWxsZXJHcm91cEhpZXJhcmNoeTogUmF0aW5nU2VsbGVyR3JvdXBIaWVyYXJjaHlbXSwgdG9vbHRpcDogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmhpZXJhcmNoeVRvb2x0aXAgJiYgdGhpcy5oaWVyYXJjaHlUb29sdGlwLm9wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuaGllcmFyY2h5VG9vbHRpcC5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsbGVyR3JvdXBIaWVyYXJjaHkgPSBzZWxsZXJHcm91cEhpZXJhcmNoeTtcbiAgICAgICAgdGhpcy5oaWVyYXJjaHlUb29sdGlwID0gdG9vbHRpcDtcbiAgICAgICAgdGhpcy5oaWVyYXJjaHlUb29sdGlwLm9wZW4oKTtcbiAgICB9XG5cbiAgICBpY29uQ2xpY2tlZChyb3dEYXRhOiBhbnksIGljb25DbGFzczogc3RyaW5nKSB7XG4gICAgICAgIGlmICgnb3JkZXJJZCcgaW4gcm93RGF0YSAmJiBpY29uQ2xhc3MuaW5jbHVkZXMoJ21kaS1zdGFyJykpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTdGFycmVkT3JkZXJJZCA9IHJvd0RhdGEub3JkZXJJZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZ3RJY29uQ2xpY2tlZC5lbWl0KHsgZGF0YTogcm93RGF0YSwgaWNvbkNsYXNzOiBpY29uQ2xhc3MgfSk7XG4gICAgfVxuXG4gICAgc3ZnSWNvbkNsaWNrZWQoZGF0YTogR3RDb2x1bW5JY29uRW1pdHRlZERhdGEpIHtcbiAgICAgICAgdGhpcy5ndFNWR0ljb25DbGlja2VkLmVtaXQoZGF0YSk7XG4gICAgfVxuXG4gICAgdGV4dEFjdGlvbkNsaWNrZWQocm93RGF0YTogYW55LCBpZDogYW55LCBjb2x1bW5IZWFkZXI6IElIZWFkZXJJbmZvKSB7XG4gICAgICAgIHRoaXMuZ3RUZXh0QWN0aW9uQ2xpY2tlZC5lbWl0KHsgZGF0YTogcm93RGF0YSwgaWQ6IGlkLCBjb2x1bW5IZWFkZXI6IGNvbHVtbkhlYWRlciwgaXNJY29uQ2xpY2tlZDogZmFsc2UgfSk7XG4gICAgfVxuXG4gICAgaWNvbkNsaWNrZWRPblN0cmluZ0ljb25BY3Rpb25UeXBlKHJvd0RhdGE6IGFueSwgaWQ6IGFueSwgY29sdW1uSGVhZGVyOiBJSGVhZGVySW5mbykge1xuICAgICAgICB0aGlzLmd0VGV4dEFjdGlvbkNsaWNrZWQuZW1pdCh7IGRhdGE6IHJvd0RhdGEsIGlkOiBpZCwgY29sdW1uSGVhZGVyOiBjb2x1bW5IZWFkZXIsIGlzSWNvbkNsaWNrZWQ6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgaW5uZXJIVE1MQ2VsbENsaWNrZWQoZXZlbnQ6IGFueSwgcm93RGF0YTogYW55KSB7XG4gICAgICAgIHRoaXMuZ3RJbm5lckhUTUxDbGlja2VkLmVtaXQoeyBldmVudCwgcm93RGF0YSB9KTtcbiAgICB9XG5cbiAgICB2aWV3RGV0YWlsc0NsaWNrZWQocm93RGF0YTogYW55KSB7XG4gICAgICAgIHRoaXMuZ3RWaWV3RGV0YWlsQ2xpY2tlZC5lbWl0KHsgZGF0YTogcm93RGF0YSB9KTtcbiAgICB9XG5cbiAgICBzZXRBY3RpdmVTdGF0ZU9iamVjdCgpIHtcbiAgICAgICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmUgPVxuICAgICAgICAgICAgIXRoaXMuYW5uYUZpbHRlclNlcnZpY2UucmVzZXRGaWx0ZXJTb3J0QWN0aXZlU3RhdHVzIHx8IHRoaXMubXVsdGlwbGVUYWJsZXNQcmVzZW50XG4gICAgICAgICAgICAgICAgPyB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmlzRmlsdGVyU29ydEFjdGl2ZVxuICAgICAgICAgICAgICAgIDoge307XG4gICAgICAgIHRoaXMudGFibGVIZWFkZXJzLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGl0ZW0uaGVhZGVySW5mby5mb3JFYWNoKChoZWFkZXIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaGVhZGVyLnNob3dUb29sdGlwSWNvbikge1xuICAgICAgICAgICAgICAgICAgICBsZXQga2V5ID0gaGVhZGVyLmZpbHRlclNvcnRPYmplY3RLZXlzLmpvaW4oJywnKTtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyLmpvaW5lZEZpbHRlclNvcnRPYmplY3RLZXlzID0ga2V5O1xuICAgICAgICAgICAgICAgICAgICAvLyBBTk5BLTQxMTMgZml4XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnJlc2V0RmlsdGVyU29ydEFjdGl2ZVN0YXR1cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmVba2V5XSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnJlc2V0RmlsdGVyU29ydEFjdGl2ZVN0YXR1cyA9IHRydWU7XG4gICAgfVxuXG4gICAgc2V0SXNEaWZmZXJlbmNlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuaXNEaWZmZXJlbmNlTGVzc1RoYW4yNVBlcmNlbnQgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXNldEluZGV4KCkge1xuICAgICAgICB0aGlzLnN0YXJ0ID0gMDtcbiAgICAgICAgdGhpcy5lbmQgPSB0aGlzLmxpbWl0ICsgdGhpcy5zdGFydDtcbiAgICB9XG5cbiAgICBvblRhYmxlQ29udGFpbmVyU2Nyb2xsKGU6IGFueSkge1xuICAgICAgICBjb25zdCB0YWJsZVZpZXdIZWlnaHQgPSBlLnRhcmdldC5vZmZzZXRIZWlnaHQ7IC8vIHZpZXdwb3J0XG4gICAgICAgIGNvbnN0IHRhYmxlU2Nyb2xsSGVpZ2h0ID0gZS50YXJnZXQuc2Nyb2xsSGVpZ2h0OyAvLyBsZW5ndGggb2YgYWxsIHRhYmxlXG4gICAgICAgIGNvbnN0IHNjcm9sbExvY2F0aW9uID0gZS50YXJnZXQuc2Nyb2xsVG9wOyAvLyBob3cgZmFyIHVzZXIgc2Nyb2xsZWRcblxuICAgICAgICB0aGlzLnJlbW92ZVRvb2x0aXBPblNjcm9sbCgpO1xuXG4gICAgICAgIC8vIElmIHRoZSB1c2VyIGhhcyBzY3JvbGxlZCB3aXRoaW4gMTUwcHggb2YgdGhlIGJvdHRvbSwgYWRkIG1vcmUgZGF0YVxuICAgICAgICBjb25zdCBidWZmZXIgPSAxNTA7XG4gICAgICAgIGNvbnN0IGxpbWl0ID0gdGFibGVTY3JvbGxIZWlnaHQgLSB0YWJsZVZpZXdIZWlnaHQgLSBidWZmZXI7XG4gICAgICAgIGlmIChzY3JvbGxMb2NhdGlvbiA+IGxpbWl0KSB7XG4gICAgICAgICAgICBsZXQgZGF0YSA9IHRoaXMuZ2V0VGFibGVEYXRhKHRoaXMuc3RhcnQsIHRoaXMuZW5kKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZWREYXRhID0gdGhpcy5yZW5kZXJlZERhdGEuY29uY2F0KGRhdGEpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVJbmRleCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGFibGVDb250YWluZXJTY3JvbGxlZChlKTtcbiAgICB9XG5cbiAgICBnZXRUYWJsZURhdGEoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVEYXRhLmZpbHRlcigodmFsdWUsIGluZGV4KSA9PiBpbmRleCA+PSBzdGFydCAmJiBpbmRleCA8IGVuZCk7XG4gICAgfVxuXG4gICAgdXBkYXRlSW5kZXgoKSB7XG4gICAgICAgIHRoaXMuc3RhcnQgPSB0aGlzLmVuZDtcbiAgICAgICAgdGhpcy5lbmQgPSB0aGlzLmxpbWl0ICsgdGhpcy5zdGFydDtcbiAgICB9XG5cbiAgICBzZXRJbml0aWFsUm93c0ZvclRhYmxlKCkge1xuICAgICAgICB0aGlzLnJlc2V0SW5kZXgoKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlZERhdGEgPSB0aGlzLmdldFRhYmxlRGF0YSh0aGlzLnN0YXJ0LCB0aGlzLmVuZCk7XG4gICAgICAgIHRoaXMudXBkYXRlSW5kZXgoKTtcbiAgICB9XG5cbiAgICBzcG90RGV0YWlsc0Rvd25sb2FkQ2xpY2tlZChwYXJlbnRDaGlsZE9yVG90YWxSb3c6ICdEQVRBUk9XJyB8ICdUT1RBTFJPVycsIHJvd2RhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKHJvd2RhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbnZlbnRvcnlJZEZvckRvd25sb2FkID0gcm93ZGF0YS5pbnZlbnRvcnlDb2RlSWQ7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGVtb2dyYXBoaWNGb3JEb3dubG9hZCA9IHJvd2RhdGEuZGVtb2dyYXBoaWM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW52ZW50b3J5SWRGb3JEb3dubG9hZCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGVtb2dyYXBoaWNGb3JEb3dubG9hZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3RlZFJvd1R5cGVGb3JEb3dubG9hZCA9IHBhcmVudENoaWxkT3JUb3RhbFJvdztcbiAgICAgICAgdGhpcy5kb3dubG9hZFNwb3REZXRhaWxzLmVtaXQoe1xuICAgICAgICAgICAgcGFyZW50Q2hpbGRPclRvdGFsUm93OiBwYXJlbnRDaGlsZE9yVG90YWxSb3csXG4gICAgICAgICAgICBpbnZlbnRvcnlDb2RlSWQ6IHRoaXMuc2VsZWN0ZWRJbnZlbnRvcnlJZEZvckRvd25sb2FkLFxuICAgICAgICAgICAgZGVtb2dyYXBoaWM6IHRoaXMuc2VsZWN0ZWREZW1vZ3JhcGhpY0ZvckRvd25sb2FkLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0YWJsZUNvbnRhaW5lclNjcm9sbGVkKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgdGhpcy5pc1Njcm9sbGVkTGVmdCA9IGV2ZW50LnRhcmdldC5zY3JvbGxMZWZ0ID4gMDtcbiAgICAgICAgdGhpcy5yZW1vdmVUb29sdGlwT25TY3JvbGwoKTtcbiAgICB9XG5cbiAgICBtb3VzZUVudGVyT25TdHJpbmdUZXh0QWN0aW9uVHlwZShyb3dEYXRhOiBhbnksIHRvb2x0aXBLZXk6IHN0cmluZykge1xuICAgICAgICB0aGlzLnRleHRBY3Rpb25Ub29sdGlwID0gcm93RGF0YVt0b29sdGlwS2V5XTtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25JY29uSG92ZXIuZW1pdCh7IHJvd0RhdGE6IHJvd0RhdGEsIHR5cGU6ICdvbi1lbnRlcicgfSk7XG4gICAgfVxuXG4gICAgbW91c2VFbnRlck9uU3RyaW5nVGV4dEFjdGlvblR5cGVDb250YWluaW5nVGFibGUocm93RGF0YTogYW55LCB0b29sdGlwS2V5OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy50b29sdGlwQ29udGFpbmluZ1RhYmxlID0gcm93RGF0YVt0b29sdGlwS2V5XTtcbiAgICB9XG5cbiAgICBtb3VzZUxlYXZlVGV4dEFjdGlvblR5cGUocm93RGF0YTogYW55KSB7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uSWNvbkhvdmVyTGVhdmUuZW1pdCh7IHJvd0RhdGE6IHJvd0RhdGEsIHR5cGU6ICdvbi1sZWF2ZScgfSk7XG4gICAgfVxuXG4gICAgbW91c2VFbnRlck9uVGV4dEFjdGlvblR5cGUocm93RGF0YTogYW55LCB0b29sdGlwS2V5OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy50ZXh0QWN0aW9uVG9vbHRpcCA9IHJvd0RhdGFbdG9vbHRpcEtleV07XG4gICAgfVxuXG4gICAgb25DbGlja2FibGVEYXRhQ2xpY2tlZChSb3dkYXRhOiBhbnksIGlkOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5jbGlja2FibGVEYXRhQ2xpY2tlZC5lbWl0KHsgZGF0YTogUm93ZGF0YSwgaWQ6IGlkIH0pO1xuICAgIH1cblxuICAgIHJlbW92ZVRvb2x0aXBPblNjcm9sbCgpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdyZW1hcmtzLWluZm8tdG9vbHRpcCcpO1xuICAgICAgICAvLyBjb25zdCB0b29sdGlwRWxlbWVudHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwidG9vbHRpcFwiKTtcbiAgICAgICAgY29uc3QgZ3RUb29sdGlwID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncmVtb3ZlLW9uLXNjcm9sbC1jbGFzcycpO1xuICAgICAgICBjb25zdCB0b29sdGlwRWxlbWVudHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCd0b29sdGlwJyk7XG5cbiAgICAgICAgd2hpbGUgKGVsZW1lbnRzICYmIGVsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGVsZW1lbnRzWzBdLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlICh0b29sdGlwRWxlbWVudHMgJiYgdG9vbHRpcEVsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRvb2x0aXBFbGVtZW50c1swXS5yZW1vdmUoKTtcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGd0VG9vbHRpcCAmJiBndFRvb2x0aXAubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZ3RUb29sdGlwWzBdLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWNvbkNsaWNrZWRJblRvdGFsUm93KGNvbE5hbWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLnRvdGFsUm93SWNvbkNsaWNrZWQuZW1pdChjb2xOYW1lKTtcbiAgICB9XG5cbiAgICBjaGFuZ2VzTWFkZUluRWRpdGFibGVJbnB1dEJveChldmVudDogYW55LCBlZGl0ZWRPYmplY3Q6IGFueSwgcGFzdGVFdmVudDogYm9vbGVhbikge1xuICAgICAgICBsZXQgZW50ZXJlZFZhbHVlID0gcGFzdGVFdmVudCA/IGV2ZW50LmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dCcpIDogZXZlbnQua2V5O1xuICAgICAgICBsZXQgZG90SW5kZXggPSBlZGl0ZWRPYmplY3QudmFsdWUuaW5kZXhPZignLicpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGV2ZW50LmtleUNvZGUgIT0gOCAmJlxuICAgICAgICAgICAgZXZlbnQua2V5Q29kZSAhPSA0NiAmJlxuICAgICAgICAgICAgIShldmVudC5rZXlDb2RlID49IDM3ICYmIGV2ZW50LmtleUNvZGUgPD0gNDApICYmXG4gICAgICAgICAgICAoKCFlZGl0ZWRPYmplY3Q/LmFsbG93U3BlY2lhbENoYXJhY3RlcnMgJiYgIS9bYDAtOS5dLy50ZXN0KGVudGVyZWRWYWx1ZSkpIHx8XG4gICAgICAgICAgICAgICAgKGVkaXRlZE9iamVjdC5pc0RlY2ltYWxQb2ludENoZWNrUmVxdWlyZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgZG90SW5kZXggPj0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBldmVudD8udGFyZ2V0Py5zZWxlY3Rpb25TdGFydCA+IGRvdEluZGV4ICYmXG4gICAgICAgICAgICAgICAgICAgIGVkaXRlZE9iamVjdC52YWx1ZS5sZW5ndGggLSAoZG90SW5kZXggKyAxKSA+PSBlZGl0ZWRPYmplY3QubWF4RGVjaW1hbFBvaW50c0FsbG93ZWQpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlZGl0YWJsZUlucHV0VmFsdWVDaGFuZ2VkKHZhbHVlOiBhbnksIHJvdzogYW55LCBrZXlFZGl0ZWQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLmVkaXRhYmxlSW5wdXRFZGl0ZWQuZW1pdCh7IHJvdzogcm93LCB2YWx1ZTogdmFsdWUsIGtleUVkaXRlZDoga2V5RWRpdGVkIH0pO1xuICAgIH1cblxuICAgIHJhZGlvQnV0dG9uSWNvbkNsaWNrZWQoZGF0YTogYW55KSB7XG4gICAgICAgIHRoaXMucmFkaW9CdXR0b25NZXNzYWdlSWNvbkNsaWNrZWQuZW1pdChkYXRhKTtcbiAgICB9XG5cbiAgICBmaWx0ZXJBcHBsaWVkKHRhYmxlRGF0YTogYW55W10pIHtcbiAgICAgICAgdGhpcy50YWJsZURhdGEgPSB0YWJsZURhdGE7XG4gICAgICAgIHRoaXMuc2V0SW5pdGlhbFJvd3NGb3JUYWJsZSgpO1xuICAgICAgICB0aGlzLmRpc2FibGVFbmFibGVFYWNoQ29sdW1uVG9vbHRpcEljb24oKTtcbiAgICAgICAgdGhpcy5maWx0ZXJBcHBsaWVkVG9UYWJsZS5lbWl0KHRhYmxlRGF0YSk7XG4gICAgICAgIHRoaXMuY2xvc2VUb29sdGlwKCk7XG4gICAgfVxuXG4gICAgc29ydGluZ0FwcGxpZWQodGFibGVEYXRhOiBhbnlbXSkge1xuICAgICAgICB0aGlzLnRhYmxlRGF0YSA9IHRhYmxlRGF0YTtcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsUm93c0ZvclRhYmxlKCk7XG4gICAgICAgIHRoaXMuZGlzYWJsZUVuYWJsZUVhY2hDb2x1bW5Ub29sdGlwSWNvbigpO1xuICAgICAgICB0aGlzLnNvcnRpbmdBcHBsaWVkVG9UYWJsZS5lbWl0KHRhYmxlRGF0YSk7XG4gICAgICAgIHRoaXMuY2xvc2VUb29sdGlwKCk7XG4gICAgfVxufVxuIiwiPGRpdlxuICAgIGlkPVwiZ2VuZXJpYy10YWJsZS1jb25hdGluZXJcIlxuICAgIGNsYXNzPVwidGFibGUtY29udGFpbmVyIHt7IGd0R2VuZXJhbENvbmZpZz8udGFibGVPdXRlckNvbnRhaW5lck5hbWUgfX0ge3sgdGFibGVCb3R0b21Cb3JkZXJDbGFzcyB9fVwiXG4gICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAnc2Nyb2xsLWxlZnQtc2hhZG93LWVmZmVjdCc6IGlzU2Nyb2xsZWRMZWZ0LFxuICAgICAgICAnY2xpY2thYmxlLXJvdyc6IGNsaWNrYWJsZVJvdyxcbiAgICAgICAgJ25vLWRhdGEtdGFibGUnOiAoaXNOb0RhdGFUb0Rpc3BsYXlTdWJqZWN0JCB8IGFzeW5jKVxuICAgIH1cIlxuICAgIChzY3JvbGwpPVwib25UYWJsZUNvbnRhaW5lclNjcm9sbCgkZXZlbnQpXCJcbj5cbiAgICA8ZGl2XG4gICAgICAgIFtjbGFzc109XCJndEdlbmVyYWxDb25maWcudGFibGVDb250YWluZXJOYW1lXCJcbiAgICAgICAgY2xhc3M9XCJob3Jpem9udGFsLXNjcm9sbC1mb3ItdGFibGUtY29udGFpbmVyXCJcbiAgICAgICAgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgaGVpZ2h0OlxuICAgICAgICAgICAgICAgIHRhYmxlRGF0YS5sZW5ndGggPCBtYXhpbXVtUm93c1doaWNoQ2FuQmVSZW5kZXJlZFdpdGhvdXRTY3JvbGxcbiAgICAgICAgICAgICAgICAgICAgPyAnY2FsYygnICtcbiAgICAgICAgICAgICAgICAgICAgICAoZ3REaW1lbnNpb24ucm93SGVpZ2h0ICogdGFibGVEYXRhLmxlbmd0aCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICghdGFibGVEYXRhLmxlbmd0aCB8fCAhZ3RHZW5lcmFsQ29uZmlnLnRvdGFsUm93XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGd0RGltZW5zaW9uLmhlYWRlckhlaWdodFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBndERpbWVuc2lvbi5oZWFkZXJIZWlnaHQgKyBndERpbWVuc2lvbi5yb3dIZWlnaHQpKSArXG4gICAgICAgICAgICAgICAgICAgICAgJ3B4KSdcbiAgICAgICAgICAgICAgICAgICAgOiBndERpbWVuc2lvbi50YWJsZUhlaWdodFxuICAgICAgICB9XCJcbiAgICA+XG4gICAgICAgIDx0YWJsZVxuICAgICAgICAgICAgY2xhc3M9XCJndFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ0YWJsZUNsYXNzXCJcbiAgICAgICAgICAgIG1hdC10YWJsZVxuICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwicmVuZGVyZWREYXRhXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJoZWFkZXItcm93XCJcbiAgICAgICAgICAgICAgICBtYXQtaGVhZGVyLXJvd1xuICAgICAgICAgICAgICAgICptYXRIZWFkZXJSb3dEZWY9XCJ0YWJsZUNvbHVtbnM7IHN0aWNreTogdHJ1ZVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJndERpbWVuc2lvbi5oZWFkZXJIZWlnaHRcIlxuICAgICAgICAgICAgPjwvdHI+XG4gICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInRvdGFsLXJvd1wiXG4gICAgICAgICAgICAgICAgbWF0LWhlYWRlci1yb3dcbiAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImd0RGltZW5zaW9uLnJvd0hlaWdodFwiXG4gICAgICAgICAgICAgICAgKm1hdEhlYWRlclJvd0RlZj1cInRvdGFsUm93Q29sdW1uczsgc3RpY2t5OiB0cnVlXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuaGlkZGVuXT1cIlxuICAgICAgICAgICAgICAgICAgICBzaG93U2tlbGV0b25Mb2FkaW5nIHx8XG4gICAgICAgICAgICAgICAgICAgICghc2hvd1NrZWxldG9uTG9hZGluZyAmJiAhdGFibGVEYXRhLmxlbmd0aCkgfHxcbiAgICAgICAgICAgICAgICAgICAgKGlzTm9EYXRhVG9EaXNwbGF5U3ViamVjdCQgfCBhc3luYykgfHxcbiAgICAgICAgICAgICAgICAgICAgKCFzaG93U2tlbGV0b25Mb2FkaW5nICYmICFndEdlbmVyYWxDb25maWcudG90YWxSb3cpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID48L3RyPlxuICAgICAgICAgICAgPHRyXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cInJvd0RhdGEuZ3RDbGFzc1wiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnbm8tYm9yZGVyLXRyJzogKGlzTm9EYXRhVG9EaXNwbGF5U3ViamVjdCQgfCBhc3luYykgfVwiXG4gICAgICAgICAgICAgICAgbWF0LXJvd1xuICAgICAgICAgICAgICAgICptYXRSb3dEZWY9XCJsZXQgcm93RGF0YTsgY29sdW1uczogdGFibGVDb2x1bW5zXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cImd0RGltZW5zaW9uLnJvd0hlaWdodFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImRhdGFSb3dDbGlja2VkKHJvd0RhdGEpXCJcbiAgICAgICAgICAgID48L3RyPlxuXG4gICAgICAgICAgICA8IS0tIFRPVEFMIFJPVyAtLT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5jb2xOYW1lXCJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIHRvdGFsUm93SW5mbzsgdHJhY2tCeTogdHJhY2tCeUZuXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICAgICAgbWF0LWhlYWRlci1jZWxsXG4gICAgICAgICAgICAgICAgICAgICptYXRIZWFkZXJDZWxsRGVmXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmNvbHNwYW5dPVwiY29sdW1uLmNvbHNwYW5cIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7IGNvbHVtbi5jbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uWydpc0FjdGlvbkNvbHVtbiddXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkYXRhIG9mIGNvbHVtbi5hY3Rpb25EYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiZGF0YS5jbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2thYmxlRGF0YUNsaWNrZWQoe30sIGRhdGEuaWQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBkYXRhLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtblsnaXNJY29uQ29sdW1uJ11cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBjb2x1bW4/Lmljb25EYXRhPy5jbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImljb25DbGlja2VkSW5Ub3RhbFJvdyhjb2x1bW4/LmNvbE5hbWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb2x1bW5bJ2lzQWN0aW9uQ29sdW1uJ11cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmcgY2xhc3M9XCJ1cHBlci1sYWJlbFwiPnt7IGNvbHVtbi5kYXRhIH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmxvd2VyRGF0YVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4uY29sTmFtZSA9PSAndG90YWwtcG90ZW50aWFsLWJvb2tlZC11bml0JyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0R2VuZXJhbENvbmZpZy5jb21wb25lbnQgPT0gJ1JBVElORyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGNvbHVtbkxvd2VyRGF0YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNsaWNrYWJsZS1kYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNwb3REZXRhaWxzRG93bmxvYWRDbGlja2VkKCdUT1RBTFJPVycpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZGlzYWJsZWQtY2xpY2thYmxlLWRhdGEnOiBkb3dubG9hZEluUHJvZ3Jlc3MgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyBjb2x1bW4ubG93ZXJEYXRhIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgc3BvdC1kZXRhaWxzLWRvd25sb2FkLWljb25zXCI+Z2V0X2FwcDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRvd25sb2FkSW5Qcm9ncmVzcyAmJiBzZWxlY3RlZFJvd1R5cGVGb3JEb3dubG9hZCA9PSAnVE9UQUxST1cnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNpcmN1bGFyUHJvZ3Jlc3NCYXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY29sdW1uTG93ZXJEYXRhPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxvd2VyLWxhYmVsXCI+e3sgY29sdW1uLmxvd2VyRGF0YSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLnRvb2x0aXBNZXNzYWdlICYmIGd0R2VuZXJhbENvbmZpZy5jb21wb25lbnQgIT0gJ0xVUl9WSU9MQVRJT05TJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgY29sdW1uLnRvb2x0aXBJY29uQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiY29sdW1uLnRvb2x0aXBNZXNzYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwiZ3QtdG90YWwtcm93LXRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJndEdlbmVyYWxDb25maWcuY29tcG9uZW50ID09ICdMVVJfVklPTEFUSU9OUycgJiYgY29sdW1uLnRvb2x0aXBNZXNzYWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtaSBtZGktaW5mby1vdXRsaW5lIGluZm8tbGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwibHVyVmlvbGF0aW9uVG90YWxSb3dUb29sVGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwiZ3QtdG90YWwtcm93LXRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8IS0tIE1BSU4gUk9XIC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgIFttYXRDb2x1bW5EZWZdPVwiY29sdW1uRGVmLmhlYWRlckluZm9bMF0ub2JqZWN0S2V5XCJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uRGVmIG9mIHRhYmxlSGVhZGVyczsgdHJhY2tCeTogdHJhY2tCeUZuXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgICAgICAgI3RhYmxlSGVhZGVyXG4gICAgICAgICAgICAgICAgICAgIG5vd3JhcFxuICAgICAgICAgICAgICAgICAgICBtYXQtaGVhZGVyLWNlbGxcbiAgICAgICAgICAgICAgICAgICAgKm1hdEhlYWRlckNlbGxEZWZcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbHVtbkRlZi53aWR0aFwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJvdyBteC0wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBoZWFkZXIgb2YgY29sdW1uRGVmLmhlYWRlckluZm87IGxldCBqID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGVhZGVyLnR5cGVPZkhlYWRlckRhdGEgPT09ICdTVFJJTkcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICd1cHBlci1sYWJlbCc6IGogPT09IDAsICdsb3dlci1sYWJlbCc6IGogPT09IDEgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1za2VsZXRvbi1sb2FkZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoZWFkZXIubmFtZSA9PSBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ9XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RoZW1lXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJzEwcHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2Jsb2NrJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBjb2x1bW5EZWYud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWF4LXdpZHRoJzogJ2NhbGMoMTAwJSAtIDIwcHgpJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZ3gtc2tlbGV0b24tbG9hZGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkZXIubmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBoZWFkZXIubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09ICdpbXBzSW5mb1Rvb2x0aXAnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGZsb2F0OiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb24gfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0PVwibmdiVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJpbXBzSW5mb1Rvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcENsYXNzIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09ICdzcG90c0NvbHVtbkVxdWl2YWxpemF0aW9uTWVzc2FnZVRvb2x0aXAnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBmbG9hdDogaGVhZGVyWyd0b29sdGlwJ10uaWNvblBvc2l0aW9uIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3Q9XCJuZ2JUb29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInNwb3RzQ29sdW1uRXF1aXZhbGl6YXRpb25NZXNzYWdlVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBQb3NpdGlvbiB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBDbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhlYWRlci50b29sdGlwICYmIGhlYWRlci50b29sdGlwLm5hbWUgPT0gJ3VuZGVyRGVsaXZlcnlUb29sdGlwJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBmbG9hdDogaGVhZGVyWyd0b29sdGlwJ10uaWNvblBvc2l0aW9uIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3Q9XCJuZ2JUb29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInVuZGVyRGVsaXZlcnlUb29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcENsYXNzIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGVhZGVyLnRvb2x0aXAgJiYgaGVhZGVyLnRvb2x0aXAubmFtZSA9PSAnb3ZlckRlbGl2ZXJ5VG9vbHRpcCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLmljb25DbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgZmxvYXQ6IGhlYWRlclsndG9vbHRpcCddLmljb25Qb3NpdGlvbiB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0PVwibmdiVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJvdmVyRGVsaXZlcnlUb29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcENsYXNzIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGVhZGVyLnRvb2x0aXAgJiYgaGVhZGVyLnRvb2x0aXAubmFtZSA9PSAncmF0aW5nSW5mb1Rvb2x0aXAnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGZsb2F0OiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb24gfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0PVwibmdiVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJyYXRpbmdJbmZvVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwUG9zaXRpb24gfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09ICdyYXRlSW5mb1Rvb2x0aXAnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGZsb2F0OiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb24gfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0PVwibmdiVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJyYXRlSW5mb1Rvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcENsYXNzIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGVhZGVyLnRvb2x0aXAgJiYgaGVhZGVyLnRvb2x0aXAubmFtZSA9PSAnb25nb2luZ1JldkJvb2tlZENvbHVtblRvb2x0aXAnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGZsb2F0OiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb24gfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0PVwibmdiVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJvbmdvaW5nUmV2Qm9va2VkQ29sdW1uVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBQb3NpdGlvbiB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBDbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhlYWRlci50b29sdGlwICYmIGhlYWRlci50b29sdGlwLm5hbWUgPT0gJ2NvbXBsZXRlZFJldkJvb2tlZENvbHVtblRvb2x0aXAnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGZsb2F0OiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb24gfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0PVwibmdiVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJjb21wbGV0ZWRSZXZCb29rZWRDb2x1bW5Ub29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcENsYXNzIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGVhZGVyLnRvb2x0aXAgJiYgaGVhZGVyLnRvb2x0aXAubmFtZSA9PSAnYXZnQm9va2VkUmF0ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLmljb25DbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgZmxvYXQ6IGhlYWRlclsndG9vbHRpcCddLmljb25Qb3NpdGlvbiB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3Q9XCJuZ2JUb29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cImF2Z0Jvb2tlZFJhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwUG9zaXRpb24gfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09ICdhdmdCb29rZWRSdGcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGZsb2F0OiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb24gfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0PVwibmdiVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJhdmdCb29rZWRSdGdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwUG9zaXRpb24gfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09ICdhdmdCb29rZWRJbXBzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBmbG9hdDogaGVhZGVyWyd0b29sdGlwJ10uaWNvblBvc2l0aW9uIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdD1cIm5nYlRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiYXZnQm9va2VkSW1wc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBQb3NpdGlvbiB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBDbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGVhZGVyLnRvb2x0aXAgJiYgaGVhZGVyLnRvb2x0aXAubmFtZSA9PSAnYXV0b21hdGlvblRvb2x0aXAnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGZsb2F0OiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb24gfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0PVwibmdiVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJhdXRvbWF0aW9uVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBQb3NpdGlvbiB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBDbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGVhZGVyLnRvb2x0aXAgJiYgaGVhZGVyLnRvb2x0aXAubmFtZSA9PSAncmViYXRlSW1wYWN0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBmbG9hdDogaGVhZGVyWyd0b29sdGlwJ10uaWNvblBvc2l0aW9uIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdD1cIm5nYlRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwicmViYXRlSW1wYWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcENsYXNzIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09ICdwcm9qZWN0ZWRJbXBzUnRnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgaGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBmbG9hdDogaGVhZGVyWyd0b29sdGlwJ10uaWNvblBvc2l0aW9uIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdD1cIm5nYlRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwicHJvamVjdGVkSW1wc1J0Z1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBQb3NpdGlvbiB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBDbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlci50eXBlT2ZIZWFkZXJEYXRhID09PSAnQ0hFQ0tCT1gnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJndEdlbmVyYWxDb25maWcuaXNIZWFkZXJDaGVja2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBjdXN0b20tY29sdW1uLWNoZWNrYm94LWNoZWNrZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0VW5zZWxlY3RBbGxSb3dzKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWd0R2VuZXJhbENvbmZpZy5pc0hlYWRlckNoZWNrZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGN1c3RvbS1jb2x1bW4tY2hlY2tib3gtdW5jaGVja2VkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZGlzYWJsZS1jaGVja2JveCc6IGd0R2VuZXJhbENvbmZpZy5kaXNhYmxlSGVhZGVyQ2hlY2tib3ggfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RVbnNlbGVjdEFsbFJvd3MoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19ib3hfb3V0bGluZV9ibGFua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJndEdlbmVyYWxDb25maWcuc2hvd0FsbENvbHVtbkZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzb3J0LWZpbHRlci1jb250YWluZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkZXIuc2hvd1Rvb2x0aXBJY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQWN0aXZlIHRvb2x0aXAgRnVuY3Rpb25hbGl0eSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlci5maWx0ZXIgPT09ICdDSEVDS0JPWCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWZpbHRlci12YXJpYW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubmFGaWx0ZXJTZXJ2aWNlLmlzRmlsdGVyU29ydEFjdGl2ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5uYUZpbHRlclNlcnZpY2UuaXNGaWx0ZXJTb3J0QWN0aXZlW2hlYWRlci5qb2luZWRGaWx0ZXJTb3J0T2JqZWN0S2V5c10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBoZWFkZXIuZGlzYWJsZVRvb2x0aXBJY29uIHx8IHNob3dTa2VsZXRvbkxvYWRpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJmaWx0ZXJUb29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ7eyBmaWx0ZXJBbGlnbm1lbnQgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cIm5vbi1lZGl0LWNoZWNrYm94LXRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvQ2xvc2VdPVwiJ291dHNpZGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2Vycz1cIm1hbnVhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3Q9XCJuZ2JUb29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYmluZFRoZVZhbHVlVG9Ub29sVGlwKHQsIGhlYWRlcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoaWRkZW4pPVwiY2xvc2VUb29sdGlwKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PGJyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyLmZpbHRlciA9PT0gJ1NMSURFUidcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWZpbHRlci12YXJpYW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubmFGaWx0ZXJTZXJ2aWNlLmlzRmlsdGVyU29ydEFjdGl2ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5uYUZpbHRlclNlcnZpY2UuaXNGaWx0ZXJTb3J0QWN0aXZlW2hlYWRlci5qb2luZWRGaWx0ZXJTb3J0T2JqZWN0S2V5c10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBoZWFkZXIuZGlzYWJsZVRvb2x0aXBJY29uIHx8IHNob3dTa2VsZXRvbkxvYWRpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJzbGlkZXJUb29sVGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20gbGVmdC10b3BcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cIm5vbi1lZGl0LXNsaWRlci10b29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cIidvdXRzaWRlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcnM9XCJtYW51YWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0MT1cIm5nYlRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJiaW5kVGhlVmFsdWVUb1Rvb2xUaXAodDEsIGhlYWRlcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoaWRkZW4pPVwiY2xvc2VUb29sdGlwKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PGJyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyLmZpbHRlciA9PT0gJ0RBVEUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1maWx0ZXItdmFyaWFudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubmFGaWx0ZXJTZXJ2aWNlLmlzRmlsdGVyU29ydEFjdGl2ZVtoZWFkZXIuam9pbmVkRmlsdGVyU29ydE9iamVjdEtleXNdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogaGVhZGVyLmRpc2FibGVUb29sdGlwSWNvbiB8fCBzaG93U2tlbGV0b25Mb2FkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiZGF0ZVBpY2tlclRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbSBhdXRvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJub24tZWRpdC1kYXRlcGlja2VyLXRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvQ2xvc2VdPVwiJ291dHNpZGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2Vycz1cIm1hbnVhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3QyPVwibmdiVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImJpbmRUaGVWYWx1ZVRvVG9vbFRpcCh0MiwgaGVhZGVyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhpZGRlbik9XCJjbG9zZVRvb2x0aXAoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48YnIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkZXIuZmlsdGVyID09PSAnV0VFSydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWZpbHRlci12YXJpYW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubmFGaWx0ZXJTZXJ2aWNlLmlzRmlsdGVyU29ydEFjdGl2ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5uYUZpbHRlclNlcnZpY2UuaXNGaWx0ZXJTb3J0QWN0aXZlW2hlYWRlci5qb2luZWRGaWx0ZXJTb3J0T2JqZWN0S2V5c10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBoZWFkZXIuZGlzYWJsZVRvb2x0aXBJY29uIHx8IHNob3dTa2VsZXRvbkxvYWRpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJ3ZWVrUGlja2VyVG9vbFRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tIGxlZnQtdG9wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cIidvdXRzaWRlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcnM9XCJtYW51YWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0Mz1cIm5nYlRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJiaW5kVGhlVmFsdWVUb1Rvb2xUaXAodDMsIGhlYWRlcilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoaWRkZW4pPVwiY2xvc2VUb29sdGlwKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PGJyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyLmZpbHRlciA9PT0gJ1RJTUUnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1maWx0ZXItdmFyaWFudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5hRmlsdGVyU2VydmljZS5pc0ZpbHRlclNvcnRBY3RpdmUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubmFGaWx0ZXJTZXJ2aWNlLmlzRmlsdGVyU29ydEFjdGl2ZVtoZWFkZXIuam9pbmVkRmlsdGVyU29ydE9iamVjdEtleXNdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogaGVhZGVyLmRpc2FibGVUb29sdGlwSWNvbiB8fCBzaG93U2tlbGV0b25Mb2FkaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwidGltZUZpbHRlclRvb2xUaXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbSBsZWZ0LXRvcCBhdXRvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJub24tZWRpdC10aW1lLXRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvQ2xvc2VdPVwiJ291dHNpZGUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2Vycz1cIm1hbnVhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3Q0PVwibmdiVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImJpbmRUaGVWYWx1ZVRvVG9vbFRpcCh0NCwgaGVhZGVyKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhpZGRlbik9XCJjbG9zZVRvb2x0aXAoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48YnIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFoZWFkZXIuc2hvd1Rvb2x0aXBJY29uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGlkPVwibm8tZmlsdGVyLXNwYWNlXCI+PC9zcGFuPjxiciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaGVhZGVyLnRvb2x0aXAgJiYgaGVhZGVyLnRvb2x0aXAubmFtZSA9PSAnbHVyVmlvbGF0aW9uSW5mb1Rvb2x0aXAnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGZsb2F0OiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb24gfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0PVwibmdiVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJsdXJWaW9sYXRpb25JbmZvVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBQb3NpdGlvbiB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBDbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L3RoPlxuXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbWF0Q2VsbERlZj1cImxldCBST1dfREFUQVwiPlxuICAgICAgICAgICAgICAgICAgICA8dGRcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1jZWxsXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJST1dfREFUQS5iYWNrZ3JvdW5kQ29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJST1dfREFUQS5ib3JkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ7eyBST1dfREFUQS5yb3dDbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1swXS5vYmplY3RLZXkgKyAnVGRDbGFzcyddXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnJvd3NwYW5dPVwiUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bMF0ub2JqZWN0S2V5ICsgJ1Jvd3NwYW4nXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFoaWRlU29tZVRkcyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoaWRlU29tZVRkcyAmJiAhUk9XX0RBVEFbJ2hpZGUnICsgY29sdW1uRGVmLmhlYWRlckluZm9bMF0ub2JqZWN0S2V5ICsgJ1RkJ10pXG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmd4LXNrZWxldG9uLWxvYWRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2hvd1NrZWxldG9uTG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQ9XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGhlbWVdPVwieyBoZWlnaHQ6ICcxMHB4JywgZGlzcGxheTogJ2Jsb2NrJyB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmd4LXNrZWxldG9uLWxvYWRlcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzaG93U2tlbGV0b25Mb2FkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYmxlRGF0YS5sZW5ndGggPiAwICYmICEoaXNOb0RhdGFUb0Rpc3BsYXlTdWJqZWN0JCB8IGFzeW5jKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3VibGluZSBvZiBjb2x1bW5EZWYuaGVhZGVySW5mbztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3ViTGluZUluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2tCeTogdHJhY2tCeUZuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHNob3dFbGxpcHNpc1RleHRPbkhvdmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0udHlwZU9mQm9keURhdGFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ0lDT04nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFycmVkSW5Qcm9ncmVzcyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEub3JkZXJJZCA9PSBzZWxlY3RlZFN0YXJyZWRPcmRlcklkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJST1dfREFUQS5pY29uQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJpY29uQ2xpY2tlZChST1dfREFUQSwgUk9XX0RBVEEuaWNvbkNsYXNzKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdiVG9vbHRpcD1cInt7IFJPV19EQVRBLmljb25UaXRsZVRleHQgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwiZ3QtaWNvbi1jb2x1bW4tdG9vbHRpcCByZW1vdmUtb24tc2Nyb2xsLWNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnJlZEluUHJvZ3Jlc3MgJiYgUk9XX0RBVEEub3JkZXJJZCA9PSBzZWxlY3RlZFN0YXJyZWRPcmRlcklkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Bpbm5lci1mb3ItYnV0dG9uLWRpcmVjdGl2ZVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidJQ09OX0NFTEwnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhY3Rpb24gb2YgUk9XX0RBVEFbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLmFjdGlvbktleVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGlvbi5zaG93SWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJhY3Rpb24uaWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3VzZUVudGVyT25TdHJpbmdUZXh0QWN0aW9uVHlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLnRvb2x0aXBLZXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tIGF1dG9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9DbG9zZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwidGVhbS11c2VyLXRvb2x0aXAgcmVtb3ZlLW9uLXNjcm9sbC1jbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cImFjdGlvbi5zaG93VG9vbHRpcCA/IHVzZXJMb2dnZWRJbkRldGFpbHMgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFjdGlvbkNsaWNrZWQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVUb29sdGlwXT1cIiFhY3Rpb24uc2hvd1Rvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWN0aW9uLnNob3dPYmplY3RLZXlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ0hUTUxfU1RSSU5HJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIlJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImlubmVySFRNTENlbGxDbGlja2VkKCRldmVudCwgUk9XX0RBVEEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidTVkdfSUNPTidcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhbm5hLWNvcmUtYW5uYS1pY29uLWNvbHVtblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wb25lbnROYW1lXT1cImd0R2VuZXJhbENvbmZpZy5jb21wb25lbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhT2JqZWN0XT1cIlJPV19EQVRBXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNvblRvU2hvd109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25Db2x1bW5JY29uQ2xpY2tlZCk9XCJzdmdJY29uQ2xpY2tlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2FubmEtY29yZS1hbm5hLWljb24tY29sdW1uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInVEVYVF9BQ1RJT05TJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGV4dCBvZiBST1dfREFUQVtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0uYWN0aW9uS2V5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ0ZXh0LnNob3dUb29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFjdGlvbkNsaWNrZWQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0ZXh0LmlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7IHRleHQuY2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdXNlRW50ZXJPblRleHRBY3Rpb25UeXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0udG9vbHRpcEtleVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJ0ZXh0QWN0aW9uVG9vbHRpcFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYXV0b1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJndC1pY29uLWNvbHVtbi10b29sdGlwIHJlbW92ZS1vbi1zY3JvbGwtY2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgdGV4dC5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIXRleHQuc2hvd1Rvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWN0aW9uQ2xpY2tlZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInRleHQuaXNEaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgdGV4dC5jbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0ZXh0Lm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInQ0hFQ0tCT1gnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkaXNhYmxlLWNoZWNrYm94JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0uaXNEaXNhYmxlZEtleV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGN1c3RvbS1jb2x1bW4tY2hlY2tib3gtY2hlY2tlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RPclVuc2VsZWN0Q2hlY2tib3goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfYm94XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIVJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBjdXN0b20tY29sdW1uLWNoZWNrYm94LXVuY2hlY2tlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGlzYWJsZS1jaGVja2JveCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLmlzRGlzYWJsZWRLZXldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RPclVuc2VsZWN0Q2hlY2tib3goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19ib3hfb3V0bGluZV9ibGFua1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhY3Rpb24gb2YgUk9XX0RBVEFbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLmFjdGlvbktleVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGlvbi5zaG93SWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJhY3Rpb24uaWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogYWN0aW9uLmRpc2FibGVkSWNvbiB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3VzZUVudGVyT25TdHJpbmdUZXh0QWN0aW9uVHlwZUNvbnRhaW5pbmdUYWJsZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLnRvb2x0aXBLZXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tIGF1dG9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9DbG9zZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwidG9vbHRpcC1jb250YWluaW5nLXRhYmxlIHJlbW92ZS1vbi1zY3JvbGwtY2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJ0b29sdGlwQ29udGFpbmluZ1RhYmxlVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ0NMSUNLQUJMRV9EQVRBJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRleHQgb2YgUk9XX0RBVEFbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLmFjdGlvbktleVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwidGV4dC5jbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2thYmxlRGF0YUNsaWNrZWQoUk9XX0RBVEEsIHRleHQuaWQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0ZXh0Lm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibGluZS5vYmplY3RLZXkgPT0gJ2Rpc3BsYXlCb29rZWRVbml0cycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RHZW5lcmFsQ29uZmlnLmNvbXBvbmVudCA9PSAnUkFUSU5HJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjbGlja2FibGUtZGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNwb3REZXRhaWxzRG93bmxvYWRDbGlja2VkKCdEQVRBUk9XJywgUk9XX0RBVEEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdkaXNhYmxlZC1jbGlja2FibGUtZGF0YSc6IGRvd25sb2FkSW5Qcm9ncmVzcyB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgUk9XX0RBVEEuZGlzcGxheUJvb2tlZFVuaXRzIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBzcG90LWRldGFpbHMtZG93bmxvYWQtaWNvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+Z2V0X2FwcDwvc3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3dubG9hZEluUHJvZ3Jlc3MgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLmludmVudG9yeUNvZGVJZCA9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkSW52ZW50b3J5SWRGb3JEb3dubG9hZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEuZGVtb2dyYXBoaWMgPT0gc2VsZWN0ZWREZW1vZ3JhcGhpY0ZvckRvd25sb2FkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjaXJjdWxhclByb2dyZXNzQmFyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInU1RSSU5HX19fSUNPTl9PUl9URVhUX0FDVElPTidcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFjdGlvbiBvZiBST1dfREFUQVtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0uYWN0aW9uS2V5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJhY3Rpb24uYWRkaXRpb25hbFRleHRCZWZvcmVMaW5rQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIdG1sXT1cImFjdGlvbi5hZGRpdGlvbmFsVGV4dEJlZm9yZUxpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2JUb29sdGlwPVwie3sgYWN0aW9uLmFkZGl0aW9uYWxUZXh0QmVmb3JlTGluayB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJndC1pY29uLWNvbHVtbi10b29sdGlwIHJlbW92ZS1vbi1zY3JvbGwtY2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZVRvb2x0aXBdPVwiIWFjdGlvbi5lbmFibGVUb29sdGlwRm9yQWRkaXRpb25hbFRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWN0aW9uICYmIGFjdGlvbi50eXBlT2ZEYXRhID09ICdTVFJJTkcnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFjdGlvbi5kYXRhIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiYWN0aW9uLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24uc2hvd0xpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0QWN0aW9uQ2xpY2tlZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24uaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiYWN0aW9uLmxpbmtDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgZGlzYWJsZWQ6IGFjdGlvbi5kaXNhYmxlZExpbmsgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyBhY3Rpb24uZGF0YSB9fTwvYVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ2JUb29sdGlwPVwie3sgYWN0aW9uLmFkZGl0aW9uYWxUZXh0QWZ0ZXJMaW5rIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJhY3Rpb24uYWRkaXRpb25hbFRleHRBZnRlckxpbmtDbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cImd0LWljb24tY29sdW1uLXRvb2x0aXAgcmVtb3ZlLW9uLXNjcm9sbC1jbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlVG9vbHRpcF09XCIhYWN0aW9uLmVuYWJsZVRvb2x0aXBGb3JBZGRpdGlvbmFsQWZ0ZXJUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGFjdGlvbi5hZGRpdGlvbmFsVGV4dEFmdGVyTGluayB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhY3Rpb24uc2hvd1Rvb2x0aXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGlvbi50b29sdGlwRGF0YS5pbm5lckh0bWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24uc2hvd0ljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJhY3Rpb24uaWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBhY3Rpb24uZGlzYWJsZWRJY29uIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3VzZUVudGVyT25TdHJpbmdUZXh0QWN0aW9uVHlwZUNvbnRhaW5pbmdUYWJsZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS50b29sdGlwS2V5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbSBhdXRvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInRvb2x0aXAtY29udGFpbmluZy10YWJsZSByZW1vdmUtb24tc2Nyb2xsLWNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJ0b29sdGlwQ29udGFpbmluZ1RhYmxlVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWFjdGlvbi50b29sdGlwRGF0YS50b29sdGlwVGFibGVCb2R5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aW9uLnNob3dJY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiYWN0aW9uLmljb25DbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogYWN0aW9uLmRpc2FibGVkSWNvbiB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb25DbGlja2VkT25TdHJpbmdJY29uQWN0aW9uVHlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJtb3VzZUxlYXZlVGV4dEFjdGlvblR5cGUoUk9XX0RBVEEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW91c2VFbnRlck9uU3RyaW5nVGV4dEFjdGlvblR5cGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0udG9vbHRpcEtleVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2VtZW50XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24udG9vbHRpcFBsYWNlbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBhY3Rpb24udG9vbHRpcFBsYWNlbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnYm90dG9tIGF1dG8nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInRlYW0tdXNlci10b29sdGlwIHJlbW92ZS1vbi1zY3JvbGwtY2xhc3Mge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLnRvb2x0aXBDbGFzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJ1c2VyTG9nZ2VkSW5EZXRhaWxzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhY3Rpb25bJ3Nob3dTdmdJY29uJ11cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YW5uYS1jb3JlLWFubmEtZXN0LWljb24tdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbG9hdC1yaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWN0aW9uWydzdmdJY29uTmFtZSddID09ICdhbm5hLWljb24nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwibW91c2VMZWF2ZVRleHRBY3Rpb25UeXBlKFJPV19EQVRBKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW91c2VFbnRlck9uU3RyaW5nVGV4dEFjdGlvblR5cGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudG9vbHRpcEtleVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2VtZW50XT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLnRvb2x0aXBQbGFjZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGFjdGlvbi50b29sdGlwUGxhY2VtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnYm90dG9tIGF1dG8nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInRlYW0tdXNlci10b29sdGlwIHJlbW92ZS1vbi1zY3JvbGwtY2xhc3Mge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvblsndG9vbHRpcENsYXNzJ11cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJ1c2VyTG9nZ2VkSW5EZXRhaWxzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvQ2xvc2VdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYW5uYS1jb3JlLWFubmEtZXN0LWljb24tdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWFjdGlvbi5zaG93VG9vbHRpcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhY3Rpb24uc2hvd0ljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cImFjdGlvbi5pY29uQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogYWN0aW9uLmRpc2FibGVkSWNvbiB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uQ2xpY2tlZE9uU3RyaW5nSWNvbkFjdGlvblR5cGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb24uaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInU1RSSU5HX09SX0lOUFVUJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XT8udHlwZSA9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NUUklORyc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaW5wdXRCb3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbm5lckh0bWxdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/LnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNpbnB1dEJveD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPy5wbGFjZWhvbGRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dFbGxpcHNpc1RleHRPbkhvdmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jbGFzc05hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXNNYWRlSW5FZGl0YWJsZUlucHV0Qm94KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRldmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhc3RlKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlc01hZGVJbkVkaXRhYmxlSW5wdXRCb3goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGV2ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdGFibGVJbnB1dFZhbHVlQ2hhbmdlZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV0udmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmRpc2FibGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWQtYm9yZGVyJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmhhc0Vycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNob3dJY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5pY29uVG9vbHRpcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJndC10b3RhbC1yb3ctdG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5pY29uQ2xhc3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaG93U3ZnSWNvbidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhbm5hLWNvcmUtYW5uYS1lc3QtaWNvbi10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbG9hdC1yaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XVtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N2Z0ljb25OYW1lJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gPT0gJ2FubmEtaWNvbidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2VtZW50XT1cIidib3R0b20gYXV0bydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwiZ3QtdG90YWwtcm93LXRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5pY29uVG9vbHRpcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYW5uYS1jb3JlLWFubmEtZXN0LWljb24tdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInSFRNTCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySHRtbF09XCJST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1NJTkdMRV9SQURJTydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rpc2FibGUtY2hlY2tib3gnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5pc0Rpc2FibGVkS2V5XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1yYWRpb2JveC1tYXJrZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIobnVsbClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWRpIG1kaS1yYWRpb2JveC1ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGlzYWJsZS1jaGVja2JveCc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVtjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLmlzRGlzYWJsZWRLZXldXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RPclVuc2VsZWN0Q2hlY2tib3goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1JBRElPJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1yYWRpby1ncm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiUk9XX0RBVEFbJ1JhZGlvQnV0dG9uQ29uZmlnJ11cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIlJPV19EQVRBW3N1YmxpbmUub2JqZWN0S2V5XVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlJPV19EQVRBWydSYWRpb0J1dHRvbkNvbmZpZyddWzBdLmlzRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmFkaW9CdXR0b24gb2YgUk9XX0RBVEFbJ1JhZGlvQnV0dG9uQ29uZmlnJ107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGFzdCA9IGxhc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cInt7IHJhZGlvQnV0dG9uLnZhbHVlIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwie3sgcmFkaW9CdXR0b24uY2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhZGlvQnV0dG9uQ2xpY2tlZChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhZGlvQnV0dG9uLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVsnUmFkaW9CdXR0b25Db25maWcnXVswXS5pc0Rpc2FibGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyByYWRpb0J1dHRvbi5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1yYWRpby1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIiB7eyByYWRpb0J1dHRvbi5pY29uQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJhZGlvQnV0dG9uSWNvbkNsaWNrZWQoUk9XX0RBVEEpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyICpuZ0lmPVwiIWxhc3RcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcmFkaW8tZ3JvdXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidTVFJJTkdfV0lUSF9UT09MVElQJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYWN0aW9uIG9mIFJPV19EQVRBW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5hY3Rpb25LZXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+IHt7IGFjdGlvbj8uZGF0YVRvRGlzcGxheSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFjdGlvbj8uc2hvd1Rvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJ0ZXh0QWN0aW9uVG9vbHRpcFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3VzZUVudGVyT25TdHJpbmdUZXh0QWN0aW9uVHlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLnRvb2x0aXBLZXlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlbWVudF09XCJhY3Rpb24/LnRvb2x0aXBQb3NpdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiYWN0aW9uPy50b29sdGlwSWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwiZ3QtaWNvbi1jb2x1bW4tdG9vbHRpcCByZW1vdmUtb24tc2Nyb2xsLWNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVUb29sdGlwXT1cImFjdGlvbj8uZGlzYWJsZVRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+IHt7IGFjdGlvbj8uZGF0YVRvRGlzcGxheUFmdGVyVG9vbHRpcCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3VibGluZS5vYmplY3RLZXkgIT0gJ2Rlc2NyaXB0aW9uJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJsaW5lLm9iamVjdEtleSA9PSAnaW52ZW50b3J5Q29kZScgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBWydpc1NlbGxlckdyb3VwJ10gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0R2VuZXJhbENvbmZpZy5jb21wb25lbnQgPT0gJ1JBVElORydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtaSBtZGktaW5mby1vdXRsaW5lIHNlbGxlci10b29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwic2VsbGVySGllcmFyY2h5VG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbSBhdXRvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvQ2xvc2VdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJzPVwibWFudWFsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhpZGRlbik9XCJjbG9zZVRvb2x0aXAoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNpbmZvPVwibmdiVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cImhpZXJhcmNoeS10b29sdGlwIHJlbW92ZS1vbi1zY3JvbGwtY2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRUaGVWYWx1ZVRvU2VsbGVyR3JvdXBUb29sdGlwKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLnNlbGxlckdyb3VwSGllcmFyY2h5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmxpbmUub2JqZWN0S2V5ID09ICdkaXNwbGF5Qm9va2VkQXZlcmFnZVJhdGluZycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd0R2VuZXJhbENvbmZpZy5jb21wb25lbnQgPT0gJ1JBVElORycgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBWydzaG93UmF0aW5nQXZlcmFnZUljb24nXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1pIG1kaS1pbmZvLW91dGxpbmUgc2VsbGVyLXRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20gYXV0b1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzRGlmZmVyZW5jZShST1dfREFUQS5pc0RpZmZlcmVuY2VMZXNzVGhhbjI1UGVyY2VudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwicG9zdGVkLWF2Zy10b29sdGlwIHJlbW92ZS1vbi1zY3JvbGwtY2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJwb3N0ZWRSYXRpbmdEaWZmZXJlbmNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmxpbmUub2JqZWN0S2V5ID09ICdkaXNwbGF5Qm9va2VkQXZlcmFnZUltcHJlc3Npb24nICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndEdlbmVyYWxDb25maWcuY29tcG9uZW50ID09ICdSQVRJTkcnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVsnc2hvd0ltcHJlc3Npb25BdmVyYWdlSWNvbiddXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWkgbWRpLWluZm8tb3V0bGluZSBzZWxsZXItdG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbSBhdXRvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvQ2xvc2VdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNEaWZmZXJlbmNlKFJPV19EQVRBLmlzRGlmZmVyZW5jZUxlc3NUaGFuMjVQZXJjZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJwb3N0ZWQtYXZnLXRvb2x0aXAgcmVtb3ZlLW9uLXNjcm9sbC1jbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInBvc3RlZEltcERpZmZlcmVuY2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdWJsaW5lLm9iamVjdEtleSA9PSAnZGVzY3JpcHRpb24nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLmRlc2NyaXB0aW9uTWVzc2FnZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEuZGVzY3JpcHRpb25FbWFpbFJlZmVyZW5jZU51bVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlJPV19EQVRBLmRlc2NyaXB0aW9uTWVzc2FnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgUk9XX0RBVEEuZGVzY3JpcHRpb25NZXNzYWdlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEuZGVzY3JpcHRpb25FbWFpbFJlZmVyZW5jZU51bSAhPSAnLScgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQS5kZXNjcmlwdGlvbkVtYWlsUmVmZXJlbmNlTnVtICE9ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbWFpbCBSZWY6IHt7IFJPV19EQVRBLmRlc2NyaXB0aW9uRW1haWxSZWZlcmVuY2VOdW0gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj1cInt7IFJPV19EQVRBLmRlc2NyaXB0aW9uRGV0YWlsc1VybCB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQS5kZXNjcmlwdGlvbkRldGFpbHNVcmxUeXBlID09PSAnUERGJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEuZGVzY3JpcHRpb25EZXRhaWxzVXJsVHlwZSA9PT0gJ0VYQ0VMJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biB2aWV3RGV0YWlsc0FuZEVtYWlsQnRuXCI+RG93bmxvYWQ8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlJPV19EQVRBLmFjdGl2aXR5bmFtZS50b0xvd2VyQ2FzZSgpID09ICdvcmRlciBvbmJvYXJkZWQnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlJPV19EQVRBLmRlc2NyaXB0aW9uRGV0YWlsc1VybFR5cGUgPT09ICdMSU5LJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidmlld0RldGFpbHNDbGlja2VkKFJPV19EQVRBKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gdmlld0RldGFpbHNBbmRFbWFpbEJ0biBvcmRlci1vbmJvYXJkZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWV3IGRldGFpbHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPVwie3sgUk9XX0RBVEEuZGVzY3JpcHRpb25FbWFpbFVybCB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQS5kZXNjcmlwdGlvbkVtYWlsVXJsICE9ICctJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEuZGVzY3JpcHRpb25FbWFpbFVybCAhPSAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biB2aWV3RGV0YWlsc0FuZEVtYWlsQnRuXCI+VmlldyBlbWFpbDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNOb0RhdGFUb0Rpc3BsYXlTdWJqZWN0JCB8IGFzeW5jXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBudWxsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90YWJsZT5cbiAgICA8L2Rpdj5cbiAgICA8YW5uYS1jb3JlLW5vLWRhdGEtbGliXG4gICAgICAgIFt3aWR0aF09XCJub0RhdGFXaWR0aFwiXG4gICAgICAgIFttYXJnaW5Ub3BdPVwibWFyZ2luVG9wXCJcbiAgICAgICAgKm5nSWY9XCJpc05vRGF0YVRvRGlzcGxheVN1YmplY3QkIHwgYXN5bmNcIlxuICAgID5cbiAgICA8L2FubmEtY29yZS1uby1kYXRhLWxpYj5cbjwvZGl2PlxuXG48IS0tIENoZWNrYm94IHRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlICNmaWx0ZXJUb29sdGlwPlxuICAgIDxhbm5hLWNvcmUtYW5uYS1jb2x1bW4tY2hlY2tib3gtZmlsdGVyXG4gICAgICAgIFt0YWJsZURhdGFdPVwidGFibGVEYXRhXCJcbiAgICAgICAgW3Nob3dGaWx0ZXJIZWFkZXJUYWJzXT1cInNob3dGaWx0ZXJUb29sdGlwVGFic1wiXG4gICAgICAgIFtpc0x1ckFuZENzckNvbXBvbmVudF09XCJmYWxzZVwiXG4gICAgICAgIFtjbG9uZWRUYWJsZURhdGFdPVwiY2xvbmVkVGFibGVEYXRhXCJcbiAgICAgICAgW2ZpbHRlclRhYk9iamVjdHNdPVwiZmlsdGVyVGFiT2JqZWN0c1wiXG4gICAgICAgIChmaWx0ZXJBcHBsaWVkVG9UYWJsZSk9XCJmaWx0ZXJBcHBsaWVkKCRldmVudClcIlxuICAgICAgICAoc29ydGluZ0FwcGxpZWRUb1RhYmxlKT1cInNvcnRpbmdBcHBsaWVkKCRldmVudClcIlxuICAgICAgICAoY2xvc2VUb29sdGlwKT1cImNsb3NlVG9vbHRpcCgpXCJcbiAgICA+XG4gICAgPC9hbm5hLWNvcmUtYW5uYS1jb2x1bW4tY2hlY2tib3gtZmlsdGVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBTbGlkZXIgdGVtcGxhdGUgLS0+XG48bmctdGVtcGxhdGUgI3NsaWRlclRvb2xUaXA+XG4gICAgPGFubmEtY29yZS1hbm5hLWNvbHVtbi1zbGlkZXItZmlsdGVyXG4gICAgICAgIFt0YWJsZURhdGFdPVwidGFibGVEYXRhXCJcbiAgICAgICAgW3Nob3dGaWx0ZXJIZWFkZXJUYWJzXT1cInNob3dGaWx0ZXJUb29sdGlwVGFic1wiXG4gICAgICAgIFtpc0x1ckFuZENzckNvbXBvbmVudF09XCJmYWxzZVwiXG4gICAgICAgIFtjbG9uZWRUYWJsZURhdGFdPVwiY2xvbmVkVGFibGVEYXRhXCJcbiAgICAgICAgW2ZpbHRlclRhYk9iamVjdHNdPVwiZmlsdGVyVGFiT2JqZWN0c1wiXG4gICAgICAgIChmaWx0ZXJBcHBsaWVkVG9UYWJsZSk9XCJmaWx0ZXJBcHBsaWVkKCRldmVudClcIlxuICAgICAgICAoc29ydGluZ0FwcGxpZWRUb1RhYmxlKT1cInNvcnRpbmdBcHBsaWVkKCRldmVudClcIlxuICAgICAgICAoY2xvc2VUb29sdGlwKT1cImNsb3NlVG9vbHRpcCgpXCJcbiAgICA+XG4gICAgPC9hbm5hLWNvcmUtYW5uYS1jb2x1bW4tc2xpZGVyLWZpbHRlcj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gRGF0ZSBQaWNrZXIgVGVtcGxhdGUgLS0+XG48bmctdGVtcGxhdGUgI2RhdGVQaWNrZXJUb29sdGlwPlxuICAgIDxhbm5hLWNvcmUtYW5uYS1jb2x1bW4tZGF0ZS1yYW5nZS1maWx0ZXJcbiAgICAgICAgW3RhYmxlRGF0YV09XCJ0YWJsZURhdGFcIlxuICAgICAgICBbc2hvd0ZpbHRlckhlYWRlclRhYnNdPVwic2hvd0ZpbHRlclRvb2x0aXBUYWJzXCJcbiAgICAgICAgW2lzTHVyQW5kQ3NyQ29tcG9uZW50XT1cImZhbHNlXCJcbiAgICAgICAgW2Nsb25lZFRhYmxlRGF0YV09XCJjbG9uZWRUYWJsZURhdGFcIlxuICAgICAgICBbZmlsdGVyVGFiT2JqZWN0c109XCJmaWx0ZXJUYWJPYmplY3RzXCJcbiAgICAgICAgKGZpbHRlckFwcGxpZWRUb1RhYmxlKT1cImZpbHRlckFwcGxpZWQoJGV2ZW50KVwiXG4gICAgICAgIChzb3J0aW5nQXBwbGllZFRvVGFibGUpPVwic29ydGluZ0FwcGxpZWQoJGV2ZW50KVwiXG4gICAgICAgIChjbG9zZVRvb2x0aXApPVwiY2xvc2VUb29sdGlwKClcIlxuICAgID5cbiAgICA8L2FubmEtY29yZS1hbm5hLWNvbHVtbi1kYXRlLXJhbmdlLWZpbHRlcj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gV2VlayBQaWNrZXIgVGVtcGxhdGUgLS0+XG48bmctdGVtcGxhdGUgI3dlZWtQaWNrZXJUb29sVGlwPlxuICAgIDwhLS0gPGRpdiBjbGFzcz1cIndlZWtwaWNrZXItY29udGFpbmVyXCI+XG4gICAgICAgIDxhbm5hLWNvcmUtd2Vlay1jYWxlbmRhci1maWx0ZXItbGliXG4gICAgICAgICAgICBbd2Vlay1jYWxlbmRhci1jb25maWddPVwiZ3RHZW5lcmFsQ29uZmlnLm11bHRpV2Vla1BpY2tlckNvbmZpZ1wiXG4gICAgICAgICAgICAoYXBwbHkpPVwiYXBwbHlXZWVrRmlsdGVyKCRldmVudClcIlxuICAgICAgICAgICAgW2Zyb20tZGF0ZV09XCJjYWxlbmRhck1pbkVuYWJsZWREYXRlXCJcbiAgICAgICAgICAgIFt0by1kYXRlXT1cImNhbGVuZGFyTWF4RW5hYmxlZERhdGVcIlxuICAgICAgICA+XG4gICAgICAgIDwvYW5uYS1jb3JlLXdlZWstY2FsZW5kYXItZmlsdGVyLWxpYj5cbiAgICA8L2Rpdj4gLS0+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFRpbWUgRmlsdGVyIFRlbXBsYXRlIC0tPlxuPG5nLXRlbXBsYXRlICN0aW1lRmlsdGVyVG9vbFRpcD5cbiAgICA8YW5uYS1jb3JlLWFubmEtY29sdW1uLXRpbWUtZmlsdGVyXG4gICAgICAgIFt0YWJsZURhdGFdPVwidGFibGVEYXRhXCJcbiAgICAgICAgW3Nob3dGaWx0ZXJIZWFkZXJUYWJzXT1cInNob3dGaWx0ZXJUb29sdGlwVGFic1wiXG4gICAgICAgIFtpc0x1ckFuZENzckNvbXBvbmVudF09XCJmYWxzZVwiXG4gICAgICAgIFtzaG93QWxsVGltZVJhbmdlQ2hlY2tib3hlc109XCJzaG93Q2hlY2tib3hlc0ZvclRpbWVGaWx0ZXJcIlxuICAgICAgICBbY2xvbmVkVGFibGVEYXRhXT1cImNsb25lZFRhYmxlRGF0YVwiXG4gICAgICAgIFtmaWx0ZXJUYWJPYmplY3RzXT1cImZpbHRlclRhYk9iamVjdHNcIlxuICAgICAgICAoZmlsdGVyQXBwbGllZFRvVGFibGUpPVwiZmlsdGVyQXBwbGllZCgkZXZlbnQpXCJcbiAgICAgICAgKHNvcnRpbmdBcHBsaWVkVG9UYWJsZSk9XCJzb3J0aW5nQXBwbGllZCgkZXZlbnQpXCJcbiAgICAgICAgKGNsb3NlVG9vbHRpcCk9XCJjbG9zZVRvb2x0aXAoKVwiXG4gICAgPlxuICAgIDwvYW5uYS1jb3JlLWFubmEtY29sdW1uLXRpbWUtZmlsdGVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjb2x1bW5JbmZvVG9vbHRpcD5cbiAgICA8cCBzdHlsZT1cImNvbG9yOiBibGFjazsgd2hpdGUtc3BhY2U6IG5vd3JhcFwiPlRoaXMgcHJlZW1wdGlvbiBpcyByZWplY3RlZCBhbmQgbm90IG1hcmtlZCBmb3IgY3JlZGl0LjwvcD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjcmF0aW5nSW5mb1Rvb2x0aXA+XG4gICAgPHAgY2xhc3M9XCJmaXJzdC1yb3dcIj5TaG93cyAnQm9va2VkIFJhdGluZycgZm9yIFByZWVtcHRpb25zICYgTWFrZUdvb2QgT2ZmZXJlZCBzcG90KHMpLjwvcD5cbiAgICA8cCBjbGFzcz1cInNlY29uZC1yb3dcIj5TaG93cyAnUHJvamVjdGVkIFJhdGluZycgZm9yIEFEVSBPZmZlcmVkIHNwb3QocykuPC9wPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNpbXBzSW5mb1Rvb2x0aXA+XG4gICAgPHAgY2xhc3M9XCJmaXJzdC1yb3dcIj5TaG93cyAnQm9va2VkIElNUFMnIGZvciBQcmVlbXB0aW9ucyAmIE1ha2VHb29kIE9mZmVyZWQgc3BvdChzKS48L3A+XG4gICAgPHAgY2xhc3M9XCJzZWNvbmQtcm93XCI+U2hvd3MgJ1Byb2plY3RlZCBJTVBTJyBmb3IgQURVIE9mZmVyZWQgc3BvdChzKS48L3A+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3Nwb3RzQ29sdW1uRXF1aXZhbGl6YXRpb25NZXNzYWdlVG9vbHRpcD5cbiAgICA8cCBjbGFzcz1cInNwb3QtY29sdW1uLXRvb2x0aXAtbWVzc2FnZVwiPlxuICAgICAgICBUaGlzIGNvbnNpc3RzIG9mIGVxdWl2YWxpemVkIHNwb3RzIGFuZCB1bi1lcXVpdmFsaXplZCBQYWlkIFByb2dyYW1zICYgdW4tZXF1aXZhbGl6ZWQgTm9uLXNwb3RzLlxuICAgIDwvcD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjdW5kZXJEZWxpdmVyeVRvb2x0aXA+XG4gICAgPHAgY2xhc3M9XCJzcG90LWNvbHVtbi10b29sdGlwLW1lc3NhZ2VcIj5cbiAgICAgICAgSW5kaWNhdGVzIHRoZSBVbmRlci1kZWxpdmVyeSBwZXJjZW50YWdlIGJhc2VkIG9uIGJvb2tlZCBhbmQgcG9zdGVkIFJURy9JTVBTLlxuICAgIDwvcD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjb3ZlckRlbGl2ZXJ5VG9vbHRpcD5cbiAgICA8cCBjbGFzcz1cInNwb3QtY29sdW1uLXRvb2x0aXAtbWVzc2FnZVwiPlxuICAgICAgICBJbmRpY2F0ZXMgdGhlIE92ZXItZGVsaXZlcnkgcGVyY2VudGFnZSBiYXNlZCBvbiBib29rZWQgYW5kIHBvc3RlZCBSVEcvSU1QUy5cbiAgICA8L3A+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3JhdGVJbmZvVG9vbHRpcD5cbiAgICA8cCBjbGFzcz1cImZpcnN0LXJvd1wiPlNob3dzICdCb29rZWQgUmF0ZScgZm9yIFByZWVtcHRpb25zICYgTWFrZUdvb2QgT2ZmZXJlZCBzcG90KHMpLjwvcD5cbiAgICA8cCBjbGFzcz1cInNlY29uZC1yb3dcIj5TaG93cyAnUHJvamVjdGVkICQgVmFsdWUnIGZvciBBRFUgT2ZmZXJlZCBzcG90KHMpLjwvcD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjc2VsbGVySGllcmFyY2h5VG9vbHRpcD5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VsbGVyR3JvdXBIaWVyYXJjaHkubGVuZ3RoID4gMFwiPlxuICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImhpZXJhcmNoeS10YWJsZS1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInNlbGxlci1oaWVyYXJjaHktdGFibGVcIj5cbiAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4jPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5JbnZlbnRvcnkgQ29kZXM8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlByb2dyYW0vRGVzY3JpcHRpb248L3RoPlxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IGRhdGEgb2Ygc2VsbGVyR3JvdXBIaWVyYXJjaHk7IGxldCB0b29sdGlwSW5kZXggPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7IHRvb2x0aXBJbmRleCArIDEgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHNob3dFbGxpcHNpc1RleHRPbkhvdmVyPnt7IGRhdGEuSW52ZW50b3J5Q29kZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gc2hvd0VsbGlwc2lzVGV4dE9uSG92ZXI+e3sgZGF0YS5Qcm9ncmFtIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgPC9zZWN0aW9uPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxsZXJHcm91cEhpZXJhcmNoeS5sZW5ndGggPT0gMFwiPlxuICAgICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiAjMDAwXCI+U2VsbGVyIGdyb3VwIG5vdCBhdmFpbGFibGUgZm9yIHRoaXMgaW52ZW50b3J5IGNvZGU8L3NwYW4+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2x1clZpb2xhdGlvbkluZm9Ub29sdGlwPlxuICAgIDxwIGNsYXNzPVwiZmlyc3Qtcm93XCI+VGhlIHZhbHVlcyBhcmUgZm9yIHRoZSBlbnRpcmUgd2Vlay48L3A+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3Bvc3RlZFJhdGluZ0RpZmZlcmVuY2U+XG4gICAgPHAgY2xhc3M9XCJkaWZmZXJlbmNlLXRleHRcIj5cbiAgICAgICAgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBwb3N0ZWQgYW5kIGJvb2tlZCBhdmVyYWdlIHJhdGluZyBpc1xuICAgICAgICB7eyBpc0RpZmZlcmVuY2VMZXNzVGhhbjI1UGVyY2VudCA/IFwibGVzc1wiIDogXCJtb3JlXCIgfX0gdGhhbiAyNSUuXG4gICAgPC9wPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNwb3N0ZWRJbXBEaWZmZXJlbmNlPlxuICAgIDxwIGNsYXNzPVwiZGlmZmVyZW5jZS10ZXh0XCI+XG4gICAgICAgIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gcG9zdGVkIGFuZCBib29rZWQgYXZlcmFnZSBpbXByZXNzaW9uIGlzXG4gICAgICAgIHt7IGlzRGlmZmVyZW5jZUxlc3NUaGFuMjVQZXJjZW50ID8gXCJsZXNzXCIgOiBcIm1vcmVcIiB9fSB0aGFuIDI1JS5cbiAgICA8L3A+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI29uZ29pbmdSZXZCb29rZWRDb2x1bW5Ub29sdGlwPlxuICAgIDxwPlRoZSBCb29rZWQgJCB2YWx1ZSwgU3BvdHMsIEdSUCwgQ1BQLCBJTVBTLCBDUE0gY29ycmVzcG9uZHMgb24gdGhlIGxhc3QgcGVybWFuZW50IHJldmlzaW9uIGdlbmVyYXRlZDwvcD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY29tcGxldGVkUmV2Qm9va2VkQ29sdW1uVG9vbHRpcD5cbiAgICA8cD5UaGUgQm9va2VkICQgdmFsdWUgY29ycmVzcG9uZHMgb24gdGhlIGxhc3QgcGVybWFuZW50IHJldmlzaW9uIGdlbmVyYXRlZDwvcD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYXZnQm9va2VkUmF0ZT5cbiAgICA8cD5UaGlzIGlzIHRoZSBib29rZWQgYXZlcmFnZSBSYXRlPC9wPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNhdmdCb29rZWRSdGc+XG4gICAgPHA+VGhpcyBpcyB0aGUgYm9va2VkIGF2ZXJhZ2UgUlRHPC9wPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNhdmdCb29rZWRJbXBzPlxuICAgIDxwPlRoaXMgaXMgdGhlIGJvb2tlZCBhdmVyYWdlIElNUCjigJkwMDApPC9wPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNwcm9qZWN0ZWRJbXBzUnRnPlxuICAgIDxwPlxuICAgICAgICBBbGwgcHJvamVjdGlvbnMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgc3VtIG9mIGFjdHVhbCBwb3N0ZWQgaW5mb3JtYXRpb24gdW50aWwgdGhlIGxhc3QgcG9zdGVkIGRhdGUgYW5kIGVzdGltYXRlc1xuICAgICAgICBmb3IgdGhlIHJlbWFpbmluZyBzZWxlY3RlZCBwZXJpb2QuXG4gICAgPC9wPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNhdXRvbWF0aW9uVG9vbHRpcD5cbiAgICA8cD5cbiAgICAgICAgUGxlYXNlIGdldCB0aGUgb3JkZXIgYnVzaW5lc3MgcnVsZXMgYXBwcm92ZWQgdG8gYWN0aXZhdGUgdGhlIG9yZGVyIGZvciBhdXRvbWF0aW9uLiBPbmx5IGZvciB0aGVcbiAgICAgICAgYXV0b21hdGlvbi1hY3RpdmF0ZWQgb3JkZXJzLCBhbnkgYXBwcm92ZWQgTUdzLCBBRFVzLCBvciBjcmVkaXRlZCBzcG90cyBvbiBBTk5BIHdpbGwgYmUgZmVkIGludG8gdGhlIHRyYWZmaWNcbiAgICAgICAgc3lzdGVtIGkuZS4gQU5OQSByZXZpc2lvbnMuXG4gICAgICAgIDwhLS0gcmVtb3ZlZCBiZWxvdyBsaW5lIGFzIHBhcnQgb2YgZW5oYW5jbWVubnQgaW4gMTQuMCByZWxlYXMgLS0+XG4gICAgICAgIDwhLS0gQWRkaXRpb25hbGx5LCBBTk5BIHdpbGwgb25seSBlbnRlciBidXllciByZXZpc2lvbnMgaW50byB0cmFmZmljIGZvciB0aGUgc2VsZWN0ZWRcbiAgICAgICAgTWVkaWFsaW5lL1dPQyBvcmRlcnMuIC0tPlxuICAgIDwvcD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjcmViYXRlSW1wYWN0PlxuICAgIDxwPlJlYmF0ZSBpbXBhY3QgdmFsdWUgaXMgZm9yIHRoZSBvcmlnaW5hbGx5IG9yZGVyZWQgc3BvdCBsZW5ndGggYW5kIGlzIG5vdCBlcXVpdmFsaXplZC48L3A+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2x1clZpb2xhdGlvblRvdGFsUm93VG9vbFRpcD5cbiAgICA8dWw+XG4gICAgICAgIDxsaT5cbiAgICAgICAgICAgIDxzdHJvbmc+UE9MSVRJQ0FMIFJBVEUgVklPTEFUSU9OUzo8L3N0cm9uZz5cbiAgICAgICAgICAgIFZpb2xhdGlvbnMgZmxhZ2dlZCB3aGVuIG5vbi1wb2xpdGljYWwgc3BvdHMgYXJlIGJvb2tlZCBhdCBhIHJhdGUgbG93ZXIgdGhhbiB0aGUgbWluaW11bSBib29rZWQgcmF0ZSBmb3JcbiAgICAgICAgICAgIHBvbGl0aWNhbCBjYW5kaWRhdGVzIGZvciB0aGUgc2FtZSB3ZWVrLCBJbnZlbnRvcnkgQ29kZSBhbmQgUmV2ZW51ZSBDbGFzcy5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpPlxuICAgICAgICAgICAgPHN0cm9uZz5DQU5ESURBVEUgVE8gQ0FORElEQVRFIFZJT0xBVElPTjo8L3N0cm9uZz5cbiAgICAgICAgICAgIFZpb2xhdGlvbnMgZmxhZ2dlZCB3aGVuIHBvbGl0aWNhbCBzcG90cyBhcmUgYm9va2VkIGF0IGRpZmZlcmVudCByYXRlcyB0byBvdGhlciBwb2xpdGljYWwgc3BvdHMgZm9yIHRoZSBzYW1lXG4gICAgICAgICAgICB3ZWVrLCBJbnZlbnRvcnkgQ29kZSBhbmQgUmV2ZW51ZSBDbGFzcy5cbiAgICAgICAgPC9saT5cbiAgICA8L3VsPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNjaXJjdWxhclByb2dyZXNzQmFyPlxuICAgIDxjaXJjbGUtcHJvZ3Jlc3NcbiAgICAgICAgW3BlcmNlbnRdPVwicGVyY2VudERvbmVcIlxuICAgICAgICBbcmFkaXVzXT1cIjVcIlxuICAgICAgICBbc2hvd1RpdGxlXT1cImZhbHNlXCJcbiAgICAgICAgW3Nob3dVbml0c109XCJmYWxzZVwiXG4gICAgICAgIFtzaG93U3VidGl0bGVdPVwiZmFsc2VcIlxuICAgICAgICBbb3V0ZXJTdHJva2VXaWR0aF09XCIzXCJcbiAgICAgICAgW2lubmVyU3Ryb2tlV2lkdGhdPVwiM1wiXG4gICAgICAgIFtzcGFjZV09XCItM1wiXG4gICAgICAgIFtvdXRlclN0cm9rZUNvbG9yXT1cIicjMjY4YmZmJ1wiXG4gICAgICAgIFtpbm5lclN0cm9rZUNvbG9yXT1cIicjZDVkNWQ1J1wiXG4gICAgICAgIFthbmltYXRpb25EdXJhdGlvbl09XCIxMFwiXG4gICAgPjwvY2lyY2xlLXByb2dyZXNzPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN1c2VyTG9nZ2VkSW5EZXRhaWxzPlxuICAgIDxkaXYgY2xhc3M9XCJ0b29sdGlwLWRpdi1jb250YWluZXJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZGF0YSBvZiB0ZXh0QWN0aW9uVG9vbHRpcFwiPlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJkYXRhLmtleSAhPSAncmVhZCdcIj5cbiAgICAgICAgICAgICAgICB7eyBkYXRhLmtleSB9fSA8Yj4ge3sgZGF0YS52YWx1ZSB9fTwvYj5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZGF0YS5rZXkgPT0gJ3JlYWQnXCI+XG4gICAgICAgICAgICAgICAge3sgZGF0YS52YWx1ZSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbWFya0FzUmVhZFRpcD5cbiAgICA8ZGl2IGNsYXNzPVwibm90aWZpY2F0aW9uLXRvb2x0aXAtZGl2LWNvbnRhaW5lclwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkYXRhIG9mIHRleHRBY3Rpb25Ub29sdGlwXCI+XG4gICAgICAgICAgICB7eyBkYXRhLnZhbHVlIH19XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0ZXh0QWN0aW9uVG9vbHRpcFRlbXBsYXRlPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRhdGEgb2YgdGV4dEFjdGlvblRvb2x0aXBcIj5cbiAgICAgICAge3sgZGF0YS5rZXkgfX0gPGI+IHt7IGRhdGEudmFsdWUgfX08L2I+XG4gICAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI3Rvb2x0aXBDb250YWluaW5nVGFibGVUZW1wbGF0ZT5cbiAgICA8ZGl2XG4gICAgICAgICpuZ0lmPVwidG9vbHRpcENvbnRhaW5pbmdUYWJsZVwiXG4gICAgICAgIFtpbm5lckhUTUxdPVwidG9vbHRpcENvbnRhaW5pbmdUYWJsZS5pbm5lckh0bWxcIlxuICAgICAgICBjbGFzcz1cIm5vdGlmaWNhdGlvbi10b29sdGlwLWRpdi1jb250YWluZXJcIlxuICAgID5cbiAgICAgICAgPCEtLSA8dWw+XG4gICAgICA8bGkgKm5nRm9yPVwibGV0IGhlYWRlck1zZyBvZiB0b29sdGlwQ29udGFpbmluZ1RhYmxlLnRhYmxlSGVhZGVyTXNnXCI+XG4gICAgICAgIDxiPiB7e2hlYWRlck1zZ319ICA8L2I+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG5cbiAgICA8dGFibGUgY2xhc3M9XCJ0b29sdGlwLXRhYmxlXCI+XG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGggKm5nRm9yPVwibGV0IGhlYWRlciBvZiB0b29sdGlwQ29udGFpbmluZ1RhYmxlLnRvb2x0aXBUYWJsZUhlYWRlclwiPlxuICAgICAgICAgICAge3sgaGVhZGVyfX1cbiAgICAgICAgICA8L3RoPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICAgIDx0Ym9keT5cbiAgICAgICAgPHRyICpuZ0Zvcj1cImxldCByb3dzIG9mIHRvb2x0aXBDb250YWluaW5nVGFibGUudG9vbHRpcFRhYmxlQm9keVwiPlxuICAgICAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgZGF0YSBvZiByb3dzXCI+XG4gICAgICAgICAgICB7eyBkYXRhIH19XG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGJvZHk+XG4gICAgPC90YWJsZT5cblxuICAgIDx1bD5cbiAgICAgIDxsaSBzdHlsZT1cIm1hcmdpbi10b3A6MTBweDsgcGFkZGluZzowXCIgKm5nRm9yPVwibGV0IGZvb3Rlck1zZyBvZiB0b29sdGlwQ29udGFpbmluZ1RhYmxlLnRhYmxlRm9vdGVyTXNnXCI+XG4gICAgICAgIHt7IGZvb3Rlck1zZyB9fSBcbiAgICAgIDwvbGk+XG4gICAgPC91bD4gLS0+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPCEtLSA8bmctdGVtcGxhdGUgI3RleHRBY3Rpb25Ub29sdGlwVGVtcGxhdGU+XG4gICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkYXRhIG9mIHRleHRBY3Rpb25Ub29sdGlwXCI+XG4gICAgICB7eyBkYXRhLmtleSB9fSA8Yj4ge3tkYXRhLnZhbHVlfX08L2I+XG4gICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+IC0tPlxuIl19