cps-ui-kit 0.165.0 → 17.1.0

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 (166) hide show
  1. package/esm2022/lib/components/cps-autocomplete/cps-autocomplete.component.mjs +824 -0
  2. package/esm2022/lib/components/cps-button/cps-button.component.mjs +190 -0
  3. package/esm2022/lib/components/cps-button-toggle/cps-button-toggle.component.mjs +235 -0
  4. package/esm2022/lib/components/cps-checkbox/cps-checkbox.component.mjs +149 -0
  5. package/esm2022/lib/components/cps-chip/cps-chip.component.mjs +94 -0
  6. package/esm2022/lib/components/cps-datepicker/cps-datepicker.component.mjs +382 -0
  7. package/esm2022/lib/components/cps-expansion-panel/cps-expansion-panel.component.mjs +209 -0
  8. package/esm2022/lib/components/cps-file-upload/cps-file-upload.component.mjs +138 -0
  9. package/esm2022/lib/components/cps-icon/cps-icon.component.mjs +193 -0
  10. package/esm2022/lib/components/cps-info-circle/cps-info-circle.component.mjs +61 -0
  11. package/esm2022/lib/components/cps-input/cps-input.component.mjs +386 -0
  12. package/{esm2020 → esm2022}/lib/components/cps-loader/cps-loader.component.mjs +5 -5
  13. package/esm2022/lib/components/cps-menu/cps-menu.component.mjs +552 -0
  14. package/esm2022/lib/components/cps-paginator/cps-paginator.component.mjs +114 -0
  15. package/esm2022/lib/components/cps-paginator/pipes/cps-paginate.pipe.mjs +30 -0
  16. package/{esm2020 → esm2022}/lib/components/cps-progress-circular/cps-progress-circular.component.mjs +4 -4
  17. package/{esm2020 → esm2022}/lib/components/cps-progress-linear/cps-progress-linear.component.mjs +4 -4
  18. package/{esm2020 → esm2022}/lib/components/cps-radio-group/cps-radio/cps-radio.component.mjs +7 -7
  19. package/esm2022/lib/components/cps-radio-group/cps-radio-button/cps-radio-button.component.mjs +55 -0
  20. package/esm2022/lib/components/cps-radio-group/cps-radio-group.component.mjs +158 -0
  21. package/esm2022/lib/components/cps-select/cps-select.component.mjs +615 -0
  22. package/esm2022/lib/components/cps-sidebar-menu/cps-sidebar-menu.component.mjs +110 -0
  23. package/{esm2020 → esm2022}/lib/components/cps-tab-group/cps-tab/cps-tab.component.mjs +4 -4
  24. package/esm2022/lib/components/cps-tab-group/cps-tab-group.component.mjs +303 -0
  25. package/esm2022/lib/components/cps-table/components/internal/cps-sort-icon/cps-sort-icon.component.mjs +79 -0
  26. package/esm2022/lib/components/cps-table/components/internal/table-column-filter/table-column-filter.component.mjs +408 -0
  27. package/esm2022/lib/components/cps-table/components/internal/table-column-filter-constraint/table-column-filter-constraint.component.mjs +149 -0
  28. package/esm2022/lib/components/cps-table/components/internal/table-row-menu/table-row-menu.component.mjs +88 -0
  29. package/esm2022/lib/components/cps-table/cps-table.component.mjs +941 -0
  30. package/esm2022/lib/components/cps-table/directives/cps-table-column-filter.directive.mjs +181 -0
  31. package/{esm2020 → esm2022}/lib/components/cps-table/directives/cps-table-column-sortable.directive.mjs +5 -5
  32. package/{esm2020 → esm2022}/lib/components/cps-table/directives/cps-table-header-selectable.directive.mjs +5 -5
  33. package/{esm2020 → esm2022}/lib/components/cps-table/directives/cps-table-row-selectable.directive.mjs +5 -5
  34. package/esm2022/lib/components/cps-table/directives/internal/table-unsort.directive.mjs +220 -0
  35. package/esm2022/lib/components/cps-tag/cps-tag.component.mjs +136 -0
  36. package/esm2022/lib/components/cps-textarea/cps-textarea.component.mjs +291 -0
  37. package/esm2022/lib/components/cps-timepicker/cps-timepicker.component.mjs +351 -0
  38. package/esm2022/lib/components/cps-tree-autocomplete/cps-tree-autocomplete.component.mjs +251 -0
  39. package/esm2022/lib/components/cps-tree-select/cps-tree-select.component.mjs +87 -0
  40. package/esm2022/lib/components/cps-tree-table/cps-tree-table.component.mjs +1196 -0
  41. package/{esm2020 → esm2022}/lib/components/cps-tree-table/directives/cps-tree-table-column-filter.directive.mjs +5 -5
  42. package/{esm2020 → esm2022}/lib/components/cps-tree-table/directives/cps-tree-table-column-sortable.directive.mjs +5 -5
  43. package/{esm2020 → esm2022}/lib/components/cps-tree-table/directives/cps-tree-table-header-selectable.directive.mjs +5 -5
  44. package/{esm2020 → esm2022}/lib/components/cps-tree-table/directives/cps-tree-table-row-selectable.directive.mjs +5 -5
  45. package/esm2022/lib/components/cps-tree-table/directives/cps-tree-table-row-toggler.directive.mjs +43 -0
  46. package/esm2022/lib/components/cps-tree-table/directives/internal/tree-table-unsort.directive.mjs +354 -0
  47. package/esm2022/lib/components/internal/cps-base-tree-dropdown/cps-base-tree-dropdown.component.mjs +619 -0
  48. package/esm2022/lib/directives/cps-tooltip/cps-tooltip.directive.mjs +257 -0
  49. package/{esm2020 → esm2022}/lib/pipes/internal/check-option-selected.pipe.mjs +4 -4
  50. package/esm2022/lib/pipes/internal/combine-labels.pipe.mjs +25 -0
  51. package/{esm2020 → esm2022}/lib/pipes/internal/label-by-value.pipe.mjs +4 -4
  52. package/esm2022/lib/services/cps-dialog/cps-dialog.service.mjs +99 -0
  53. package/{esm2020 → esm2022}/lib/services/cps-dialog/internal/components/cps-confirmation/cps-confirmation.component.mjs +5 -5
  54. package/esm2022/lib/services/cps-dialog/internal/components/cps-dialog/cps-dialog.component.mjs +470 -0
  55. package/{esm2020 → esm2022}/lib/services/cps-dialog/internal/directives/cps-dialog-content.directive.mjs +5 -5
  56. package/esm2022/lib/services/cps-dialog/utils/cps-dialog-config.mjs +3 -0
  57. package/esm2022/lib/services/cps-notification/cps-notification.service.mjs +126 -0
  58. package/esm2022/lib/services/cps-notification/internal/components/cps-notification-container/cps-notification-container.component.mjs +91 -0
  59. package/{esm2020 → esm2022}/lib/services/cps-notification/internal/components/cps-toast/cps-toast.component.mjs +23 -23
  60. package/esm2022/lib/utils/colors-utils.mjs +57 -0
  61. package/esm2022/lib/utils/internal/size-utils.mjs +24 -0
  62. package/{esm2020 → esm2022}/public-api.mjs +2 -2
  63. package/{fesm2020 → fesm2022}/cps-ui-kit.mjs +481 -391
  64. package/fesm2022/cps-ui-kit.mjs.map +1 -0
  65. package/lib/components/cps-autocomplete/cps-autocomplete.component.d.ts +2 -2
  66. package/lib/components/cps-button/cps-button.component.d.ts +1 -1
  67. package/lib/components/cps-button-toggle/cps-button-toggle.component.d.ts +2 -2
  68. package/lib/components/cps-checkbox/cps-checkbox.component.d.ts +2 -2
  69. package/lib/components/cps-chip/cps-chip.component.d.ts +1 -1
  70. package/lib/components/cps-datepicker/cps-datepicker.component.d.ts +2 -2
  71. package/lib/components/cps-expansion-panel/cps-expansion-panel.component.d.ts +1 -1
  72. package/lib/components/cps-file-upload/cps-file-upload.component.d.ts +1 -1
  73. package/lib/components/cps-icon/cps-icon.component.d.ts +1 -1
  74. package/lib/components/cps-info-circle/cps-info-circle.component.d.ts +2 -2
  75. package/lib/components/cps-input/cps-input.component.d.ts +2 -2
  76. package/lib/components/cps-loader/cps-loader.component.d.ts +1 -1
  77. package/lib/components/cps-menu/cps-menu.component.d.ts +1 -1
  78. package/lib/components/cps-paginator/cps-paginator.component.d.ts +1 -1
  79. package/lib/components/cps-progress-circular/cps-progress-circular.component.d.ts +1 -1
  80. package/lib/components/cps-progress-linear/cps-progress-linear.component.d.ts +1 -1
  81. package/lib/components/cps-radio-group/cps-radio/cps-radio.component.d.ts +1 -1
  82. package/lib/components/cps-radio-group/cps-radio-button/cps-radio-button.component.d.ts +1 -1
  83. package/lib/components/cps-radio-group/cps-radio-group.component.d.ts +2 -2
  84. package/lib/components/cps-select/cps-select.component.d.ts +2 -2
  85. package/lib/components/cps-sidebar-menu/cps-sidebar-menu.component.d.ts +1 -1
  86. package/lib/components/cps-tab-group/cps-tab/cps-tab.component.d.ts +1 -1
  87. package/lib/components/cps-tab-group/cps-tab-group.component.d.ts +1 -1
  88. package/lib/components/cps-table/components/internal/cps-sort-icon/cps-sort-icon.component.d.ts +1 -1
  89. package/lib/components/cps-table/components/internal/table-column-filter/table-column-filter.component.d.ts +1 -1
  90. package/lib/components/cps-table/components/internal/table-column-filter-constraint/table-column-filter-constraint.component.d.ts +1 -1
  91. package/lib/components/cps-table/components/internal/table-row-menu/table-row-menu.component.d.ts +1 -1
  92. package/lib/components/cps-table/cps-table.component.d.ts +1 -1
  93. package/lib/components/cps-table/directives/cps-table-column-filter.directive.d.ts +1 -1
  94. package/lib/components/cps-table/directives/cps-table-column-sortable.directive.d.ts +1 -1
  95. package/lib/components/cps-table/directives/cps-table-row-selectable.directive.d.ts +1 -1
  96. package/lib/components/cps-tag/cps-tag.component.d.ts +1 -1
  97. package/lib/components/cps-textarea/cps-textarea.component.d.ts +2 -2
  98. package/lib/components/cps-timepicker/cps-timepicker.component.d.ts +2 -2
  99. package/lib/components/cps-tree-autocomplete/cps-tree-autocomplete.component.d.ts +1 -1
  100. package/lib/components/cps-tree-select/cps-tree-select.component.d.ts +1 -1
  101. package/lib/components/cps-tree-table/cps-tree-table.component.d.ts +4 -4
  102. package/lib/components/cps-tree-table/directives/cps-tree-table-column-filter.directive.d.ts +1 -1
  103. package/lib/components/cps-tree-table/directives/cps-tree-table-column-sortable.directive.d.ts +1 -1
  104. package/lib/components/cps-tree-table/directives/cps-tree-table-row-selectable.directive.d.ts +1 -1
  105. package/lib/components/cps-tree-table/directives/cps-tree-table-row-toggler.directive.d.ts +1 -1
  106. package/lib/components/internal/cps-base-tree-dropdown/cps-base-tree-dropdown.component.d.ts +2 -2
  107. package/lib/directives/{cps-tooltip.directive.d.ts → cps-tooltip/cps-tooltip.directive.d.ts} +2 -2
  108. package/lib/services/cps-dialog/cps-dialog.service.d.ts +13 -0
  109. package/lib/services/cps-dialog/utils/cps-dialog-config.d.ts +1 -1
  110. package/lib/services/cps-notification/cps-notification.service.d.ts +32 -0
  111. package/lib/services/cps-notification/internal/components/cps-notification-container/cps-notification-container.component.d.ts +1 -1
  112. package/lib/services/cps-notification/internal/components/cps-toast/cps-toast.component.d.ts +1 -1
  113. package/package.json +12 -18
  114. package/public-api.d.ts +1 -1
  115. package/esm2020/lib/components/cps-autocomplete/cps-autocomplete.component.mjs +0 -824
  116. package/esm2020/lib/components/cps-button/cps-button.component.mjs +0 -190
  117. package/esm2020/lib/components/cps-button-toggle/cps-button-toggle.component.mjs +0 -235
  118. package/esm2020/lib/components/cps-checkbox/cps-checkbox.component.mjs +0 -149
  119. package/esm2020/lib/components/cps-chip/cps-chip.component.mjs +0 -94
  120. package/esm2020/lib/components/cps-datepicker/cps-datepicker.component.mjs +0 -382
  121. package/esm2020/lib/components/cps-expansion-panel/cps-expansion-panel.component.mjs +0 -209
  122. package/esm2020/lib/components/cps-file-upload/cps-file-upload.component.mjs +0 -138
  123. package/esm2020/lib/components/cps-icon/cps-icon.component.mjs +0 -193
  124. package/esm2020/lib/components/cps-info-circle/cps-info-circle.component.mjs +0 -61
  125. package/esm2020/lib/components/cps-input/cps-input.component.mjs +0 -386
  126. package/esm2020/lib/components/cps-menu/cps-menu.component.mjs +0 -552
  127. package/esm2020/lib/components/cps-paginator/cps-paginator.component.mjs +0 -113
  128. package/esm2020/lib/components/cps-paginator/pipes/cps-paginate.pipe.mjs +0 -30
  129. package/esm2020/lib/components/cps-radio-group/cps-radio-button/cps-radio-button.component.mjs +0 -55
  130. package/esm2020/lib/components/cps-radio-group/cps-radio-group.component.mjs +0 -158
  131. package/esm2020/lib/components/cps-select/cps-select.component.mjs +0 -615
  132. package/esm2020/lib/components/cps-sidebar-menu/cps-sidebar-menu.component.mjs +0 -110
  133. package/esm2020/lib/components/cps-tab-group/cps-tab-group.component.mjs +0 -299
  134. package/esm2020/lib/components/cps-table/components/internal/cps-sort-icon/cps-sort-icon.component.mjs +0 -79
  135. package/esm2020/lib/components/cps-table/components/internal/table-column-filter/table-column-filter.component.mjs +0 -408
  136. package/esm2020/lib/components/cps-table/components/internal/table-column-filter-constraint/table-column-filter-constraint.component.mjs +0 -148
  137. package/esm2020/lib/components/cps-table/components/internal/table-row-menu/table-row-menu.component.mjs +0 -88
  138. package/esm2020/lib/components/cps-table/cps-table.component.mjs +0 -940
  139. package/esm2020/lib/components/cps-table/directives/cps-table-column-filter.directive.mjs +0 -181
  140. package/esm2020/lib/components/cps-table/directives/internal/table-unsort.directive.mjs +0 -210
  141. package/esm2020/lib/components/cps-tag/cps-tag.component.mjs +0 -136
  142. package/esm2020/lib/components/cps-textarea/cps-textarea.component.mjs +0 -291
  143. package/esm2020/lib/components/cps-timepicker/cps-timepicker.component.mjs +0 -351
  144. package/esm2020/lib/components/cps-tree-autocomplete/cps-tree-autocomplete.component.mjs +0 -250
  145. package/esm2020/lib/components/cps-tree-select/cps-tree-select.component.mjs +0 -87
  146. package/esm2020/lib/components/cps-tree-table/cps-tree-table.component.mjs +0 -1192
  147. package/esm2020/lib/components/cps-tree-table/directives/cps-tree-table-row-toggler.directive.mjs +0 -43
  148. package/esm2020/lib/components/cps-tree-table/directives/internal/tree-table-unsort.directive.mjs +0 -334
  149. package/esm2020/lib/components/internal/cps-base-tree-dropdown/cps-base-tree-dropdown.component.mjs +0 -616
  150. package/esm2020/lib/directives/cps-tooltip.directive.mjs +0 -257
  151. package/esm2020/lib/pipes/internal/combine-labels.pipe.mjs +0 -25
  152. package/esm2020/lib/services/cps-dialog/cps-dialog.service.mjs +0 -86
  153. package/esm2020/lib/services/cps-dialog/internal/components/cps-dialog/cps-dialog.component.mjs +0 -470
  154. package/esm2020/lib/services/cps-dialog/utils/cps-dialog-config.mjs +0 -3
  155. package/esm2020/lib/services/cps-notification/cps-notification.service.mjs +0 -94
  156. package/esm2020/lib/services/cps-notification/internal/components/cps-notification-container/cps-notification-container.component.mjs +0 -91
  157. package/esm2020/lib/utils/colors-utils.mjs +0 -57
  158. package/esm2020/lib/utils/internal/size-utils.mjs +0 -24
  159. package/fesm2015/cps-ui-kit.mjs +0 -12086
  160. package/fesm2015/cps-ui-kit.mjs.map +0 -1
  161. package/fesm2020/cps-ui-kit.mjs.map +0 -1
  162. /package/{esm2020 → esm2022}/cps-ui-kit.mjs +0 -0
  163. /package/{esm2020 → esm2022}/lib/components/cps-table/cps-column-filter-types.mjs +0 -0
  164. /package/{esm2020 → esm2022}/lib/services/cps-dialog/utils/cps-dialog-ref.mjs +0 -0
  165. /package/{esm2020 → esm2022}/lib/services/cps-notification/utils/cps-notification-config.mjs +0 -0
  166. /package/{esm2020 → esm2022}/lib/services/cps-notification/utils/internal/cps-notification-data.mjs +0 -0
@@ -0,0 +1,354 @@
1
+ import { Directive, Host, Self, Optional } from '@angular/core';
2
+ import { ObjectUtils } from 'primeng/utils';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "primeng/treetable";
5
+ export class TreeTableUnsortDirective {
6
+ constructor(pTreeTable) {
7
+ this.pTreeTable = pTreeTable;
8
+ pTreeTable.sort = (event) => {
9
+ if (pTreeTable.sortMode === 'single') {
10
+ if (pTreeTable.sortField === event.field &&
11
+ pTreeTable.sortOrder === -1) {
12
+ event.field = '_defaultSortOrder';
13
+ }
14
+ pTreeTable._sortOrder =
15
+ pTreeTable.sortField === event.field
16
+ ? pTreeTable.sortOrder * -1
17
+ : pTreeTable.defaultSortOrder;
18
+ pTreeTable._sortField = event.field;
19
+ pTreeTable.sortSingle();
20
+ }
21
+ if (pTreeTable.sortMode === 'multiple') {
22
+ let resetIndex = false;
23
+ const sortMeta = pTreeTable.getSortMeta(event.field);
24
+ // Todo: Use explicit type in the whole block
25
+ if (sortMeta) {
26
+ for (let i = 0; i < pTreeTable._multiSortMeta.length; i++) {
27
+ if (pTreeTable._multiSortMeta[i].field === sortMeta.field) {
28
+ pTreeTable._multiSortMeta.splice(i, 1);
29
+ }
30
+ }
31
+ if (sortMeta.order === 1) {
32
+ sortMeta.order = sortMeta.order * -1;
33
+ pTreeTable.multiSortMeta.push(sortMeta);
34
+ }
35
+ if (pTreeTable._multiSortMeta?.length === 0) {
36
+ pTreeTable.multiSortMeta.push({
37
+ field: '_defaultSortOrder',
38
+ order: pTreeTable.defaultSortOrder
39
+ });
40
+ resetIndex = true;
41
+ }
42
+ }
43
+ else {
44
+ if (!pTreeTable.multiSortMeta) {
45
+ pTreeTable._multiSortMeta = [];
46
+ }
47
+ pTreeTable.multiSortMeta.push({
48
+ field: event.field,
49
+ order: pTreeTable.defaultSortOrder
50
+ });
51
+ }
52
+ pTreeTable.sortMultiple();
53
+ if (resetIndex)
54
+ pTreeTable._multiSortMeta = [];
55
+ }
56
+ };
57
+ pTreeTable.sortNodes = (nodes) => {
58
+ if (!nodes || nodes.length === 0) {
59
+ return;
60
+ }
61
+ // Replace with explicit type
62
+ this._syncNodesParams(pTreeTable.filteredNodes, nodes);
63
+ if (pTreeTable.customSort) {
64
+ pTreeTable.sortFunction.emit({
65
+ data: nodes,
66
+ mode: pTreeTable.sortMode,
67
+ // Todo: Use explicit type
68
+ field: pTreeTable.sortField,
69
+ order: pTreeTable.sortOrder
70
+ });
71
+ }
72
+ else {
73
+ const isUnsort = pTreeTable.sortField === '_defaultSortOrder';
74
+ nodes.sort((node1, node2) => {
75
+ const value1 = isUnsort
76
+ ? node1._defaultSortOrder
77
+ : ObjectUtils.resolveFieldData(node1.data, pTreeTable.sortField);
78
+ const value2 = isUnsort
79
+ ? node2._defaultSortOrder
80
+ : ObjectUtils.resolveFieldData(node2.data, pTreeTable.sortField);
81
+ let result = null;
82
+ if (value1 == null && value2 != null)
83
+ result = -1;
84
+ else if (value1 != null && value2 == null)
85
+ result = 1;
86
+ else if (value1 == null && value2 == null)
87
+ result = 0;
88
+ else if (typeof value1 === 'string' && typeof value2 === 'string')
89
+ result = value1.localeCompare(value2, undefined, { numeric: true });
90
+ else
91
+ result = value1 < value2 ? -1 : value1 > value2 ? 1 : 0;
92
+ return pTreeTable.sortOrder * result;
93
+ });
94
+ }
95
+ for (const node of nodes) {
96
+ // Todo: Use explicit type
97
+ pTreeTable.sortNodes(node.children);
98
+ }
99
+ };
100
+ pTreeTable.sortMultipleNodes = (nodes) => {
101
+ if (!nodes || nodes.length === 0) {
102
+ return;
103
+ }
104
+ // Replace with explicit type
105
+ this._syncNodesParams(pTreeTable.filteredNodes, nodes);
106
+ if (pTreeTable.customSort) {
107
+ pTreeTable.sortFunction.emit({
108
+ data: pTreeTable.value,
109
+ mode: pTreeTable.sortMode,
110
+ multiSortMeta: pTreeTable.multiSortMeta
111
+ });
112
+ }
113
+ else {
114
+ nodes.sort((node1, node2) => {
115
+ return pTreeTable.multisortField(node1, node2,
116
+ // Replace with explicit type
117
+ pTreeTable.multiSortMeta, 0);
118
+ });
119
+ }
120
+ for (const node of nodes) {
121
+ // Replace with explicit type
122
+ pTreeTable.sortMultipleNodes(node.children);
123
+ }
124
+ };
125
+ pTreeTable.multisortField = (node1, node2, multiSortMeta, index) => {
126
+ if (ObjectUtils.isEmpty(pTreeTable.multiSortMeta) ||
127
+ ObjectUtils.isEmpty(multiSortMeta[index])) {
128
+ return 0;
129
+ }
130
+ const isUnsort = multiSortMeta[index].field === '_defaultSortOrder';
131
+ const value1 = isUnsort
132
+ ? // Todo: Use explicit type
133
+ node1._defaultSortOrder
134
+ : ObjectUtils.resolveFieldData(node1.data, multiSortMeta[index].field);
135
+ const value2 = isUnsort
136
+ ? // Todo: Use explicit type
137
+ node2._defaultSortOrder
138
+ : ObjectUtils.resolveFieldData(node2.data, multiSortMeta[index].field);
139
+ let result = 0;
140
+ if (value1 == null && value2 != null)
141
+ result = -1;
142
+ else if (value1 != null && value2 == null)
143
+ result = 1;
144
+ else if (value1 == null && value2 == null)
145
+ result = 0;
146
+ if (typeof value1 === 'string' || value1 instanceof String) {
147
+ if (value1.localeCompare && value1 !== value2) {
148
+ return (multiSortMeta[index].order *
149
+ value1.localeCompare(value2, undefined, { numeric: true }));
150
+ }
151
+ }
152
+ else {
153
+ result = value1 < value2 ? -1 : 1;
154
+ }
155
+ if (value1 === value2) {
156
+ return multiSortMeta.length - 1 > index
157
+ ? pTreeTable.multisortField(node1, node2, multiSortMeta, index + 1)
158
+ : 0;
159
+ }
160
+ return multiSortMeta[index].order * result;
161
+ };
162
+ pTreeTable._filter = () => {
163
+ if (pTreeTable.lazy) {
164
+ pTreeTable.onLazyLoad.emit(pTreeTable.createLazyLoadMetadata());
165
+ }
166
+ else {
167
+ if (!pTreeTable.value) {
168
+ return;
169
+ }
170
+ if (!pTreeTable.hasFilter()) {
171
+ pTreeTable.filteredNodes = null;
172
+ if (pTreeTable.paginator) {
173
+ pTreeTable.totalRecords = pTreeTable.value
174
+ ? pTreeTable.value.length
175
+ : 0;
176
+ }
177
+ }
178
+ else {
179
+ let globalFilterFieldsArray;
180
+ if (pTreeTable.filters.global) {
181
+ if (!pTreeTable.columns && !pTreeTable.globalFilterFields)
182
+ throw new Error('Global filtering requires dynamic columns or globalFilterFields to be defined.');
183
+ else
184
+ globalFilterFieldsArray =
185
+ pTreeTable.globalFilterFields || pTreeTable.columns;
186
+ }
187
+ // Replace with explicit type
188
+ this._syncNodesParams(pTreeTable.filteredNodes, pTreeTable.value);
189
+ pTreeTable.filteredNodes = [];
190
+ const isStrictMode = pTreeTable.filterMode === 'strict';
191
+ let isValueChanged = false;
192
+ for (const [idx, node] of pTreeTable.value.entries()) {
193
+ let copyNode = { ...node };
194
+ let localMatch = true;
195
+ let globalMatch = false;
196
+ let paramsWithoutNode;
197
+ for (const prop in pTreeTable.filters) {
198
+ if (
199
+ // eslint-disable-next-line no-prototype-builtins
200
+ pTreeTable.filters.hasOwnProperty(prop) &&
201
+ prop !== 'global') {
202
+ const filterMeta = pTreeTable.filters[prop];
203
+ const filterField = prop;
204
+ const filterValue = filterMeta?.value;
205
+ const filterMatchMode = filterMeta?.matchMode || 'startsWith';
206
+ const filterConstraint = pTreeTable.filterService.filters[filterMatchMode];
207
+ paramsWithoutNode = {
208
+ filterField,
209
+ filterValue,
210
+ filterConstraint,
211
+ isStrictMode
212
+ };
213
+ if ((isStrictMode &&
214
+ !(pTreeTable.findFilteredNodes(copyNode, paramsWithoutNode) ||
215
+ // Replace with explicit type
216
+ pTreeTable.isFilterMatched(copyNode, paramsWithoutNode))) ||
217
+ (!isStrictMode &&
218
+ !(
219
+ // Replace with explicit type
220
+ (pTreeTable.isFilterMatched(copyNode, paramsWithoutNode) ||
221
+ pTreeTable.findFilteredNodes(copyNode, paramsWithoutNode))))) {
222
+ localMatch = false;
223
+ }
224
+ if (!localMatch) {
225
+ break;
226
+ }
227
+ }
228
+ }
229
+ if (pTreeTable.filters.global &&
230
+ !globalMatch &&
231
+ globalFilterFieldsArray) {
232
+ for (let j = 0; j < globalFilterFieldsArray.length; j++) {
233
+ const copyNodeForGlobal = { ...copyNode };
234
+ const filterField = globalFilterFieldsArray[j].field ||
235
+ globalFilterFieldsArray[j];
236
+ const filterValue = pTreeTable.filters.global.value;
237
+ const filterConstraint = pTreeTable.filterService.filters[pTreeTable.filters.global
238
+ .matchMode];
239
+ paramsWithoutNode = {
240
+ filterField,
241
+ filterValue,
242
+ filterConstraint,
243
+ isStrictMode
244
+ };
245
+ if ((isStrictMode &&
246
+ (pTreeTable.findFilteredNodes(copyNodeForGlobal, paramsWithoutNode) ||
247
+ pTreeTable.isFilterMatched(copyNodeForGlobal,
248
+ // Replace with explicit type
249
+ paramsWithoutNode))) ||
250
+ (!isStrictMode &&
251
+ (pTreeTable.isFilterMatched(copyNodeForGlobal,
252
+ // Replace with explicit type
253
+ paramsWithoutNode) ||
254
+ pTreeTable.findFilteredNodes(copyNodeForGlobal, paramsWithoutNode)))) {
255
+ globalMatch = true;
256
+ copyNode = copyNodeForGlobal;
257
+ }
258
+ }
259
+ }
260
+ let matches = localMatch;
261
+ if (pTreeTable.filters.global) {
262
+ matches = localMatch && globalMatch;
263
+ }
264
+ if (matches) {
265
+ // Replace with explicit type
266
+ copyNode._idx = idx;
267
+ pTreeTable.filteredNodes.push(copyNode);
268
+ }
269
+ isValueChanged =
270
+ isValueChanged ||
271
+ !localMatch ||
272
+ globalMatch ||
273
+ (localMatch && pTreeTable.filteredNodes.length > 0) ||
274
+ (!globalMatch && pTreeTable.filteredNodes.length === 0);
275
+ }
276
+ if (!isValueChanged) {
277
+ pTreeTable.filteredNodes = null;
278
+ }
279
+ if (pTreeTable.paginator) {
280
+ pTreeTable.totalRecords = pTreeTable.filteredNodes
281
+ ? pTreeTable.filteredNodes.length
282
+ : pTreeTable.value
283
+ ? pTreeTable.value.length
284
+ : 0;
285
+ }
286
+ }
287
+ }
288
+ pTreeTable.first = 0;
289
+ const filteredValue = pTreeTable.filteredNodes || pTreeTable.value;
290
+ pTreeTable.onFilter.emit({
291
+ filters: pTreeTable.filters,
292
+ filteredValue
293
+ });
294
+ pTreeTable.tableService.onUIUpdate(filteredValue);
295
+ pTreeTable.updateSerializedValue();
296
+ if (pTreeTable.scrollable) {
297
+ pTreeTable.resetScrollTop();
298
+ }
299
+ };
300
+ pTreeTable.findFilteredNodes = (node, paramsWithoutNode) => {
301
+ if (node) {
302
+ let matched = false;
303
+ if (node.children) {
304
+ const childNodes = [...node.children];
305
+ node.children = [];
306
+ for (const [idx, childNode] of childNodes.entries()) {
307
+ const copyChildNode = { ...childNode };
308
+ if (pTreeTable.isFilterMatched(copyChildNode, paramsWithoutNode)) {
309
+ matched = true;
310
+ // Replace with explicit type
311
+ copyChildNode._idx = idx;
312
+ node.children.push(copyChildNode);
313
+ }
314
+ }
315
+ }
316
+ if (matched) {
317
+ return true;
318
+ }
319
+ }
320
+ };
321
+ }
322
+ _syncNodesParams(from, to) {
323
+ if (!from || !to)
324
+ return;
325
+ from.forEach((source) => {
326
+ const idx = source._idx;
327
+ if (typeof idx === 'number') {
328
+ const target = to[idx];
329
+ delete source._idx;
330
+ if (target) {
331
+ target.expanded = source.expanded;
332
+ target.partialSelected = source.partialSelected;
333
+ this._syncNodesParams(source.children, target.children);
334
+ }
335
+ }
336
+ });
337
+ }
338
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: TreeTableUnsortDirective, deps: [{ token: i1.TreeTable, host: true, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Directive }); }
339
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.1.2", type: TreeTableUnsortDirective, isStandalone: true, selector: "[ttWithUnsort]", ngImport: i0 }); }
340
+ }
341
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: TreeTableUnsortDirective, decorators: [{
342
+ type: Directive,
343
+ args: [{
344
+ standalone: true,
345
+ selector: '[ttWithUnsort]'
346
+ }]
347
+ }], ctorParameters: () => [{ type: i1.TreeTable, decorators: [{
348
+ type: Host
349
+ }, {
350
+ type: Self
351
+ }, {
352
+ type: Optional
353
+ }] }] });
354
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS10YWJsZS11bnNvcnQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY3BzLXVpLWtpdC9zcmMvbGliL2NvbXBvbmVudHMvY3BzLXRyZWUtdGFibGUvZGlyZWN0aXZlcy9pbnRlcm5hbC90cmVlLXRhYmxlLXVuc29ydC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFNNUMsTUFBTSxPQUFPLHdCQUF3QjtJQUNuQyxZQUErQyxVQUFxQjtRQUFyQixlQUFVLEdBQVYsVUFBVSxDQUFXO1FBQ2xFLFVBQVUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUMvQixJQUFJLFVBQVUsQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7Z0JBQ3JDLElBQ0UsVUFBVSxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUMsS0FBSztvQkFDcEMsVUFBVSxDQUFDLFNBQVMsS0FBSyxDQUFDLENBQUMsRUFDM0IsQ0FBQztvQkFDRCxLQUFLLENBQUMsS0FBSyxHQUFHLG1CQUFtQixDQUFDO2dCQUNwQyxDQUFDO2dCQUVELFVBQVUsQ0FBQyxVQUFVO29CQUNuQixVQUFVLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxLQUFLO3dCQUNsQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7d0JBQzNCLENBQUMsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ2xDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztnQkFDcEMsVUFBVSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzFCLENBQUM7WUFDRCxJQUFJ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QUM7b0JBQ1osT0FBTyxJQUFJLENBQUM7Z0JBQ2QsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRU8sZ0JBQWdCLENBQUMsSUFBdUIsRUFBRSxFQUFxQjtRQUNyRSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRTtZQUFFLE9BQU87UUFFekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3RCLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDeEIsSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDNUIsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN2QixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQ25CLElBQUksTUFBTSxFQUFFLENBQUM7b0JBQ1gsTUFBTSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO29CQUNsQyxNQUFNLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUM7b0JBQ2hELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDMUQsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBOVpVLHdCQUF3QjtrR0FBeEIsd0JBQXdCOzsyRkFBeEIsd0JBQXdCO2tCQUpwQyxTQUFTO21CQUFDO29CQUNULFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsZ0JBQWdCO2lCQUMzQjs7MEJBRWMsSUFBSTs7MEJBQUksSUFBSTs7MEJBQUksUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSG9zdCwgU2VsZiwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyZWVUYWJsZSB9IGZyb20gJ3ByaW1lbmcvdHJlZXRhYmxlJztcbmltcG9ydCB7IE9iamVjdFV0aWxzIH0gZnJvbSAncHJpbWVuZy91dGlscyc7XG5cbkBEaXJlY3RpdmUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ1t0dFdpdGhVbnNvcnRdJ1xufSlcbmV4cG9ydCBjbGFzcyBUcmVlVGFibGVVbnNvcnREaXJlY3RpdmUge1xuICBjb25zdHJ1Y3RvcihASG9zdCgpIEBTZWxmKCkgQE9wdGlvbmFsKCkgcHVibGljIHBUcmVlVGFibGU6IFRyZWVUYWJsZSkge1xuICAgIHBUcmVlVGFibGUuc29ydCA9IChldmVudDogYW55KSA9PiB7XG4gICAgICBpZiAocFRyZWVUYWJsZS5zb3J0TW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHBUcmVlVGFibGUuc29ydEZpZWxkID09PSBldmVudC5maWVsZCAmJlxuICAgICAgICAgIHBUcmVlVGFibGUuc29ydE9yZGVyID09PSAtMVxuICAgICAgICApIHtcbiAgICAgICAgICBldmVudC5maWVsZCA9ICdfZGVmYXVsdFNvcnRPcmRlcic7XG4gICAgICAgIH1cblxuICAgICAgICBwVHJlZVRhYmxlLl9zb3J0T3JkZXIgPVxuICAgICAgICAgIHBUcmVlVGFibGUuc29ydEZpZWxkID09PSBldmVudC5maWVsZFxuICAgICAgICAgICAgPyBwVHJlZVRhYmxlLnNvcnRPcmRlciAqIC0xXG4gICAgICAgICAgICA6IHBUcmVlVGFibGUuZGVmYXVsdFNvcnRPcmRlcjtcbiAgICAgICAgcFRyZWVUYWJsZS5fc29ydEZpZWxkID0gZXZlbnQuZmllbGQ7XG4gICAgICAgIHBUcmVlVGFibGUuc29ydFNpbmdsZSgpO1xuICAgICAgfVxuICAgICAgaWYgKHBUcmVlVGFibGUuc29ydE1vZGUgPT09ICdtdWx0aXBsZScpIHtcbiAgICAgICAgbGV0IHJlc2V0SW5kZXggPSBmYWxzZTtcbiAgICAgICAgY29uc3Qgc29ydE1ldGEgPSBwVHJlZVRhYmxlLmdldFNvcnRNZXRhKGV2ZW50LmZpZWxkKTtcblxuICAgICAgICAvLyBUb2RvOiBVc2UgZXhwbGljaXQgdHlwZSBpbiB0aGUgd2hvbGUgYmxvY2tcbiAgICAgICAgaWYgKHNvcnRNZXRhKSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAocFRyZWVUYWJsZS5fbXVsdGlTb3J0TWV0YSBhcyBhbnkpLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIChwVHJlZVRhYmxlLl9tdWx0aVNvcnRNZXRhIGFzIGFueSlbaV0uZmllbGQgPT09IHNvcnRNZXRhLmZpZWxkXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgKHBUcmVlVGFibGUuX211bHRpU29ydE1ldGEgYXMgYW55KS5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzb3J0TWV0YS5vcmRlciA9PT0gMSkge1xuICAgICAgICAgICAgc29ydE1ldGEub3JkZXIgPSBzb3J0TWV0YS5vcmRlciAqIC0xO1xuICAgICAgICAgICAgKHBUcmVlVGFibGUubXVsdGlTb3J0TWV0YSBhcyBhbnkpLnB1c2goc29ydE1ldGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocFRyZWVUYWJsZS5fbXVsdGlTb3J0TWV0YT8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAocFRyZWVUYWJsZS5tdWx0aVNvcnRNZXRhIGFzIGFueSkucHVzaCh7XG4gICAgICAgICAgICAgIGZpZWxkOiAnX2RlZmF1bHRTb3J0T3JkZXInLFxuICAgICAgICAgICAgICBvcmRlcjogcFRyZWVUYWJsZS5kZWZhdWx0U29ydE9yZGVyXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlc2V0SW5kZXggPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoIXBUcmVlVGFibGUubXVsdGlTb3J0TWV0YSkge1xuICAgICAgICAgICAgcFRyZWVUYWJsZS5fbXVsdGlTb3J0TWV0YSA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgICAocFRyZWVUYWJsZS5tdWx0aVNvcnRNZXRhIGFzIGFueSkucHVzaCh7XG4gICAgICAgICAgICBmaWVsZDogZXZlbnQuZmllbGQsXG4gICAgICAgICAgICBvcmRlcjogcFRyZWVUYWJsZS5kZWZhdWx0U29ydE9yZGVyXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBwVHJlZVRhYmxlLnNvcnRNdWx0aXBsZSgpO1xuICAgICAgICBpZiAocmVzZXRJbmRleCkgcFRyZWVUYWJsZS5fbXVsdGlTb3J0TWV0YSA9IFtdO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBwVHJlZVRhYmxlLnNvcnROb2RlcyA9IChub2RlcykgPT4ge1xuICAgICAgaWYgKCFub2RlcyB8fCBub2Rlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBSZXBsYWNlIHdpdGggZXhwbGljaXQgdHlwZVxuICAgICAgdGhpcy5fc3luY05vZGVzUGFyYW1zKHBUcmVlVGFibGUuZmlsdGVyZWROb2RlcyBhcyBhbnksIG5vZGVzKTtcblxuICAgICAgaWYgKHBUcmVlVGFibGUuY3VzdG9tU29ydCkge1xuICAgICAgICBwVHJlZVRhYmxlLnNvcnRGdW5jdGlvbi5lbWl0KHtcbiAgICAgICAgICBkYXRhOiBub2RlcyxcbiAgICAgICAgICBtb2RlOiBwVHJlZVRhYmxlLnNvcnRNb2RlLFxuICAgICAgICAgIC8vIFRvZG86IFVzZSBleHBsaWNpdCB0eXBlXG4gICAgICAgICAgZmllbGQ6IHBUcmVlVGFibGUuc29ydEZpZWxkIGFzIGFueSxcbiAgICAgICAgICBvcmRlcjogcFRyZWVUYWJsZS5zb3J0T3JkZXJcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBpc1Vuc29ydCA9IHBUcmVlVGFibGUuc29ydEZpZWxkID09PSAnX2RlZmF1bHRTb3J0T3JkZXInO1xuICAgICAgICBub2Rlcy5zb3J0KChub2RlMTogYW55LCBub2RlMjogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgdmFsdWUxID0gaXNVbnNvcnRcbiAgICAgICAgICAgID8gbm9kZTEuX2RlZmF1bHRTb3J0T3JkZXJcbiAgICAgICAgICAgIDogT2JqZWN0VXRpbHMucmVzb2x2ZUZpZWxkRGF0YShub2RlMS5kYXRhLCBwVHJlZVRhYmxlLnNvcnRGaWVsZCk7XG4gICAgICAgICAgY29uc3QgdmFsdWUyID0gaXNVbnNvcnRcbiAgICAgICAgICAgID8gbm9kZTIuX2RlZmF1bHRTb3J0T3JkZXJcbiAgICAgICAgICAgIDogT2JqZWN0VXRpbHMucmVzb2x2ZUZpZWxkRGF0YShub2RlMi5kYXRhLCBwVHJlZVRhYmxlLnNvcnRGaWVsZCk7XG4gICAgICAgICAgbGV0IHJlc3VsdCA9IG51bGw7XG5cbiAgICAgICAgICBpZiAodmFsdWUxID09IG51bGwgJiYgdmFsdWUyICE9IG51bGwpIHJlc3VsdCA9IC0xO1xuICAgICAgICAgIGVsc2UgaWYgKHZhbHVlMSAhPSBudWxsICYmIHZhbHVlMiA9PSBudWxsKSByZXN1bHQgPSAxO1xuICAgICAgICAgIGVsc2UgaWYgKHZhbHVlMSA9PSBudWxsICYmIHZhbHVlMiA9PSBudWxsKSByZXN1bHQgPSAwO1xuICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiB2YWx1ZTEgPT09ICdzdHJpbmcnICYmIHR5cGVvZiB2YWx1ZTIgPT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgcmVzdWx0ID0gdmFsdWUxLmxvY2FsZUNvbXBhcmUodmFsdWUyLCB1bmRlZmluZWQsIHsgbnVtZXJpYzogdHJ1ZSB9KTtcbiAgICAgICAgICBlbHNlIHJlc3VsdCA9IHZhbHVlMSA8IHZhbHVlMiA/IC0xIDogdmFsdWUxID4gdmFsdWUyID8gMSA6IDA7XG5cbiAgICAgICAgICByZXR1cm4gcFRyZWVUYWJsZS5zb3J0T3JkZXIgKiByZXN1bHQ7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcbiAgICAgICAgLy8gVG9kbzogVXNlIGV4cGxpY2l0IHR5cGVcbiAgICAgICAgcFRyZWVUYWJsZS5zb3J0Tm9kZXMobm9kZS5jaGlsZHJlbiBhcyBhbnkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBwVHJlZVRhYmxlLnNvcnRNdWx0aXBsZU5vZGVzID0gKG5vZGVzKSA9PiB7XG4gICAgICBpZiAoIW5vZGVzIHx8IG5vZGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFJlcGxhY2Ugd2l0aCBleHBsaWNpdCB0eXBlXG4gICAgICB0aGlzLl9zeW5jTm9kZXNQYXJhbXMocFRyZWVUYWJsZS5maWx0ZXJlZE5vZGVzIGFzIGFueSwgbm9kZXMpO1xuXG4gICAgICBpZiAocFRyZWVUYWJsZS5jdXN0b21Tb3J0KSB7XG4gICAgICAgIHBUcmVlVGFibGUuc29ydEZ1bmN0aW9uLmVtaXQoe1xuICAgICAgICAgIGRhdGE6IHBUcmVlVGFibGUudmFsdWUsXG4gICAgICAgICAgbW9kZTogcFRyZWVUYWJsZS5zb3J0TW9kZSxcbiAgICAgICAgICBtdWx0aVNvcnRNZXRhOiBwVHJlZVRhYmxlLm11bHRpU29ydE1ldGFcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2Rlcy5zb3J0KChub2RlMTogYW55LCBub2RlMjogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHBUcmVlVGFibGUubXVsdGlzb3J0RmllbGQoXG4gICAgICAgICAgICBub2RlMSxcbiAgICAgICAgICAgIG5vZGUyLFxuICAgICAgICAgICAgLy8gUmVwbGFjZSB3aXRoIGV4cGxpY2l0IHR5cGVcbiAgICAgICAgICAgIHBUcmVlVGFibGUubXVsdGlTb3J0TWV0YSBhcyBhbnksXG4gICAgICAgICAgICAwXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xuICAgICAgICAvLyBSZXBsYWNlIHdpdGggZXhwbGljaXQgdHlwZVxuICAgICAgICBwVHJlZVRhYmxlLnNvcnRNdWx0aXBsZU5vZGVzKG5vZGUuY2hpbGRyZW4gYXMgYW55KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcFRyZWVUYWJsZS5tdWx0aXNvcnRGaWVsZCA9IChub2RlMSwgbm9kZTIsIG11bHRpU29ydE1ldGEsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIE9iamVjdFV0aWxzLmlzRW1wdHkocFRyZWVUYWJsZS5tdWx0aVNvcnRNZXRhKSB8fFxuICAgICAgICBPYmplY3RVdGlscy5pc0VtcHR5KG11bHRpU29ydE1ldGFbaW5kZXhdKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuICAgICAgY29uc3QgaXNVbnNvcnQgPSBtdWx0aVNvcnRNZXRhW2luZGV4XS5maWVsZCA9PT0gJ19kZWZhdWx0U29ydE9yZGVyJztcbiAgICAgIGNvbnN0IHZhbHVlMSA9IGlzVW5zb3J0XG4gICAgICAgID8gLy8gVG9kbzogVXNlIGV4cGxpY2l0IHR5cGVcbiAgICAgICAgICAobm9kZTEgYXMgYW55KS5fZGVmYXVsdFNvcnRPcmRlclxuICAgICAgICA6IE9iamVjdFV0aWxzLnJlc29sdmVGaWVsZERhdGEobm9kZTEuZGF0YSwgbXVsdGlTb3J0TWV0YVtpbmRleF0uZmllbGQpO1xuICAgICAgY29uc3QgdmFsdWUyID0gaXNVbnNvcnRcbiAgICAgICAgPyAvLyBUb2RvOiBVc2UgZXhwbGljaXQgdHlwZVxuICAgICAgICAgIChub2RlMiBhcyBhbnkpLl9kZWZhdWx0U29ydE9yZGVyXG4gICAgICAgIDogT2JqZWN0VXRpbHMucmVzb2x2ZUZpZWxkRGF0YShub2RlMi5kYXRhLCBtdWx0aVNvcnRNZXRhW2luZGV4XS5maWVsZCk7XG4gICAgICBsZXQgcmVzdWx0ID0gMDtcblxuICAgICAgaWYgKHZhbHVlMSA9PSBudWxsICYmIHZhbHVlMiAhPSBudWxsKSByZXN1bHQgPSAtMTtcbiAgICAgIGVsc2UgaWYgKHZhbHVlMSAhPSBudWxsICYmIHZhbHVlMiA9PSBudWxsKSByZXN1bHQgPSAxO1xuICAgICAgZWxzZSBpZiAodmFsdWUxID09IG51bGwgJiYgdmFsdWUyID09IG51bGwpIHJlc3VsdCA9IDA7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlMSA9PT0gJ3N0cmluZycgfHwgdmFsdWUxIGluc3RhbmNlb2YgU3RyaW5nKSB7XG4gICAgICAgIGlmICh2YWx1ZTEubG9jYWxlQ29tcGFyZSAmJiB2YWx1ZTEgIT09IHZhbHVlMikge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBtdWx0aVNvcnRNZXRhW2luZGV4XS5vcmRlciAqXG4gICAgICAgICAgICB2YWx1ZTEubG9jYWxlQ29tcGFyZSh2YWx1ZTIsIHVuZGVmaW5lZCwgeyBudW1lcmljOiB0cnVlIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gdmFsdWUxIDwgdmFsdWUyID8gLTEgOiAxO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWUxID09PSB2YWx1ZTIpIHtcbiAgICAgICAgcmV0dXJuIG11bHRpU29ydE1ldGEubGVuZ3RoIC0gMSA+IGluZGV4XG4gICAgICAgICAgPyBwVHJlZVRhYmxlLm11bHRpc29ydEZpZWxkKG5vZGUxLCBub2RlMiwgbXVsdGlTb3J0TWV0YSwgaW5kZXggKyAxKVxuICAgICAgICAgIDogMDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG11bHRpU29ydE1ldGFbaW5kZXhdLm9yZGVyICogcmVzdWx0O1xuICAgIH07XG5cbiAgICBwVHJlZVRhYmxlLl9maWx0ZXIgPSAoKSA9PiB7XG4gICAgICBpZiAocFRyZWVUYWJsZS5sYXp5KSB7XG4gICAgICAgIHBUcmVlVGFibGUub25MYXp5TG9hZC5lbWl0KHBUcmVlVGFibGUuY3JlYXRlTGF6eUxvYWRNZXRhZGF0YSgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghcFRyZWVUYWJsZS52YWx1ZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcFRyZWVUYWJsZS5oYXNGaWx0ZXIoKSkge1xuICAgICAgICAgIChwVHJlZVRhYmxlLmZpbHRlcmVkTm9kZXMgYXMgYW55KSA9IG51bGw7XG4gICAgICAgICAgaWYgKHBUcmVlVGFibGUucGFnaW5hdG9yKSB7XG4gICAgICAgICAgICBwVHJlZVRhYmxlLnRvdGFsUmVjb3JkcyA9IHBUcmVlVGFibGUudmFsdWVcbiAgICAgICAgICAgICAgPyBwVHJlZVRhYmxlLnZhbHVlLmxlbmd0aFxuICAgICAgICAgICAgICA6IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBnbG9iYWxGaWx0ZXJGaWVsZHNBcnJheTogYW55W10gfCB1bmRlZmluZWQ7XG4gICAgICAgICAgaWYgKHBUcmVlVGFibGUuZmlsdGVycy5nbG9iYWwpIHtcbiAgICAgICAgICAgIGlmICghcFRyZWVUYWJsZS5jb2x1bW5zICYmICFwVHJlZVRhYmxlLmdsb2JhbEZpbHRlckZpZWxkcylcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICdHbG9iYWwgZmlsdGVyaW5nIHJlcXVpcmVzIGR5bmFtaWMgY29sdW1ucyBvciBnbG9iYWxGaWx0ZXJGaWVsZHMgdG8gYmUgZGVmaW5lZC4nXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgIGdsb2JhbEZpbHRlckZpZWxkc0FycmF5ID1cbiAgICAgICAgICAgICAgICBwVHJlZVRhYmxlLmdsb2JhbEZpbHRlckZpZWxkcyB8fCBwVHJlZVRhYmxlLmNvbHVtbnM7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gUmVwbGFjZSB3aXRoIGV4cGxpY2l0IHR5cGVcbiAgICAgICAgICB0aGlzLl9zeW5jTm9kZXNQYXJhbXMoXG4gICAgICAgICAgICBwVHJlZVRhYmxlLmZpbHRlcmVkTm9kZXMgYXMgYW55LFxuICAgICAgICAgICAgcFRyZWVUYWJsZS52YWx1ZVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBwVHJlZVRhYmxlLmZpbHRlcmVkTm9kZXMgPSBbXTtcbiAgICAgICAgICBjb25zdCBpc1N0cmljdE1vZGUgPSBwVHJlZVRhYmxlLmZpbHRlck1vZGUgPT09ICdzdHJpY3QnO1xuICAgICAgICAgIGxldCBpc1ZhbHVlQ2hhbmdlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgZm9yIChjb25zdCBbaWR4LCBub2RlXSBvZiBwVHJlZVRhYmxlLnZhbHVlLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgbGV0IGNvcHlOb2RlID0geyAuLi5ub2RlIH07XG4gICAgICAgICAgICBsZXQgbG9jYWxNYXRjaCA9IHRydWU7XG4gICAgICAgICAgICBsZXQgZ2xvYmFsTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBwYXJhbXNXaXRob3V0Tm9kZTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wIGluIHBUcmVlVGFibGUuZmlsdGVycykge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgICAgICAgICAgIHBUcmVlVGFibGUuZmlsdGVycy5oYXNPd25Qcm9wZXJ0eShwcm9wKSAmJlxuICAgICAgICAgICAgICAgIHByb3AgIT09ICdnbG9iYWwnXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlck1ldGEgPSBwVHJlZVRhYmxlLmZpbHRlcnNbcHJvcF07XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyRmllbGQgPSBwcm9wO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlclZhbHVlID0gZmlsdGVyTWV0YT8udmFsdWU7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyTWF0Y2hNb2RlID0gZmlsdGVyTWV0YT8ubWF0Y2hNb2RlIHx8ICdzdGFydHNXaXRoJztcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJDb25zdHJhaW50ID1cbiAgICAgICAgICAgICAgICAgIHBUcmVlVGFibGUuZmlsdGVyU2VydmljZS5maWx0ZXJzW1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJNYXRjaE1vZGUgYXMga2V5b2YgdHlwZW9mIHBUcmVlVGFibGUuZmlsdGVyU2VydmljZS5maWx0ZXJzXG4gICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIHBhcmFtc1dpdGhvdXROb2RlID0ge1xuICAgICAgICAgICAgICAgICAgZmlsdGVyRmllbGQsXG4gICAgICAgICAgICAgICAgICBmaWx0ZXJWYWx1ZSxcbiAgICAgICAgICAgICAgICAgIGZpbHRlckNvbnN0cmFpbnQsXG4gICAgICAgICAgICAgICAgICBpc1N0cmljdE1vZGVcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIChpc1N0cmljdE1vZGUgJiZcbiAgICAgICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgICAgICBwVHJlZVRhYmxlLmZpbmRGaWx0ZXJlZE5vZGVzKFxuICAgICAgICAgICAgICAgICAgICAgICAgY29weU5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNXaXRob3V0Tm9kZVxuICAgICAgICAgICAgICAgICAgICAgICkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIHdpdGggZXhwbGljaXQgdHlwZVxuICAgICAgICAgICAgICAgICAgICAgIHBUcmVlVGFibGUuaXNGaWx0ZXJNYXRjaGVkKFxuICAgICAgICAgICAgICAgICAgICAgICAgY29weU5vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNXaXRob3V0Tm9kZSBhcyBhbnlcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICkpIHx8XG4gICAgICAgICAgICAgICAgICAoIWlzU3RyaWN0TW9kZSAmJlxuICAgICAgICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgICAgICAgIC8vIFJlcGxhY2Ugd2l0aCBleHBsaWNpdCB0eXBlXG4gICAgICAgICAgICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICAgICAgICAgcFRyZWVUYWJsZS5pc0ZpbHRlck1hdGNoZWQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlOb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNXaXRob3V0Tm9kZSBhcyBhbnlcbiAgICAgICAgICAgICAgICAgICAgICAgICkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBUcmVlVGFibGUuZmluZEZpbHRlcmVkTm9kZXMoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlOb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNXaXRob3V0Tm9kZVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGxvY2FsTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIWxvY2FsTWF0Y2gpIHtcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHBUcmVlVGFibGUuZmlsdGVycy5nbG9iYWwgJiZcbiAgICAgICAgICAgICAgIWdsb2JhbE1hdGNoICYmXG4gICAgICAgICAgICAgIGdsb2JhbEZpbHRlckZpZWxkc0FycmF5XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBnbG9iYWxGaWx0ZXJGaWVsZHNBcnJheS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvcHlOb2RlRm9yR2xvYmFsID0geyAuLi5jb3B5Tm9kZSB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlckZpZWxkID1cbiAgICAgICAgICAgICAgICAgIGdsb2JhbEZpbHRlckZpZWxkc0FycmF5W2pdLmZpZWxkIHx8XG4gICAgICAgICAgICAgICAgICBnbG9iYWxGaWx0ZXJGaWVsZHNBcnJheVtqXTtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IHBUcmVlVGFibGUuZmlsdGVycy5nbG9iYWwudmFsdWU7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyQ29uc3RyYWludCA9XG4gICAgICAgICAgICAgICAgICBwVHJlZVRhYmxlLmZpbHRlclNlcnZpY2UuZmlsdGVyc1tcbiAgICAgICAgICAgICAgICAgICAgcFRyZWVUYWJsZS5maWx0ZXJzLmdsb2JhbFxuICAgICAgICAgICAgICAgICAgICAgIC5tYXRjaE1vZGUgYXMga2V5b2YgdHlwZW9mIHBUcmVlVGFibGUuZmlsdGVyU2VydmljZS5maWx0ZXJzXG4gICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIHBhcmFtc1dpdGhvdXROb2RlID0ge1xuICAgICAgICAgICAgICAgICAgZmlsdGVyRmllbGQsXG4gICAgICAgICAgICAgICAgICBmaWx0ZXJWYWx1ZSxcbiAgICAgICAgICAgICAgICAgIGZpbHRlckNvbnN0cmFpbnQsXG4gICAgICAgICAgICAgICAgICBpc1N0cmljdE1vZGVcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgKGlzU3RyaWN0TW9kZSAmJlxuICAgICAgICAgICAgICAgICAgICAocFRyZWVUYWJsZS5maW5kRmlsdGVyZWROb2RlcyhcbiAgICAgICAgICAgICAgICAgICAgICBjb3B5Tm9kZUZvckdsb2JhbCxcbiAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNXaXRob3V0Tm9kZVxuICAgICAgICAgICAgICAgICAgICApIHx8XG4gICAgICAgICAgICAgICAgICAgICAgcFRyZWVUYWJsZS5pc0ZpbHRlck1hdGNoZWQoXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3B5Tm9kZUZvckdsb2JhbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlcGxhY2Ugd2l0aCBleHBsaWNpdCB0eXBlXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNXaXRob3V0Tm9kZSBhcyBhbnlcbiAgICAgICAgICAgICAgICAgICAgICApKSkgfHxcbiAgICAgICAgICAgICAgICAgICghaXNTdHJpY3RNb2RlICYmXG4gICAgICAgICAgICAgICAgICAgIChwVHJlZVRhYmxlLmlzRmlsdGVyTWF0Y2hlZChcbiAgICAgICAgICAgICAgICAgICAgICBjb3B5Tm9kZUZvckdsb2JhbCxcbiAgICAgICAgICAgICAgICAgICAgICAvLyBSZXBsYWNlIHdpdGggZXhwbGljaXQgdHlwZVxuICAgICAgICAgICAgICAgICAgICAgIHBhcmFtc1dpdGhvdXROb2RlIGFzIGFueVxuICAgICAgICAgICAgICAgICAgICApIHx8XG4gICAgICAgICAgICAgICAgICAgICAgcFRyZWVUYWJsZS5maW5kRmlsdGVyZWROb2RlcyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlOb2RlRm9yR2xvYmFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zV2l0aG91dE5vZGVcbiAgICAgICAgICAgICAgICAgICAgICApKSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGdsb2JhbE1hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgIGNvcHlOb2RlID0gY29weU5vZGVGb3JHbG9iYWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBtYXRjaGVzID0gbG9jYWxNYXRjaDtcbiAgICAgICAgICAgIGlmIChwVHJlZVRhYmxlLmZpbHRlcnMuZ2xvYmFsKSB7XG4gICAgICAgICAgICAgIG1hdGNoZXMgPSBsb2NhbE1hdGNoICYmIGdsb2JhbE1hdGNoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobWF0Y2hlcykge1xuICAgICAgICAgICAgICAvLyBSZXBsYWNlIHdpdGggZXhwbGljaXQgdHlwZVxuICAgICAgICAgICAgICAoY29weU5vZGUgYXMgYW55KS5faWR4ID0gaWR4O1xuICAgICAgICAgICAgICBwVHJlZVRhYmxlLmZpbHRlcmVkTm9kZXMucHVzaChjb3B5Tm9kZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlzVmFsdWVDaGFuZ2VkID1cbiAgICAgICAgICAgICAgaXNWYWx1ZUNoYW5nZWQgfHxcbiAgICAgICAgICAgICAgIWxvY2FsTWF0Y2ggfHxcbiAgICAgICAgICAgICAgZ2xvYmFsTWF0Y2ggfHxcbiAgICAgICAgICAgICAgKGxvY2FsTWF0Y2ggJiYgcFRyZWVUYWJsZS5maWx0ZXJlZE5vZGVzLmxlbmd0aCA+IDApIHx8XG4gICAgICAgICAgICAgICghZ2xvYmFsTWF0Y2ggJiYgcFRyZWVUYWJsZS5maWx0ZXJlZE5vZGVzLmxlbmd0aCA9PT0gMCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFpc1ZhbHVlQ2hhbmdlZCkge1xuICAgICAgICAgICAgKHBUcmVlVGFibGUuZmlsdGVyZWROb2RlcyBhcyBhbnkpID0gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocFRyZWVUYWJsZS5wYWdpbmF0b3IpIHtcbiAgICAgICAgICAgIHBUcmVlVGFibGUudG90YWxSZWNvcmRzID0gcFRyZWVUYWJsZS5maWx0ZXJlZE5vZGVzXG4gICAgICAgICAgICAgID8gcFRyZWVUYWJsZS5maWx0ZXJlZE5vZGVzLmxlbmd0aFxuICAgICAgICAgICAgICA6IHBUcmVlVGFibGUudmFsdWVcbiAgICAgICAgICAgICAgICA/IHBUcmVlVGFibGUudmFsdWUubGVuZ3RoXG4gICAgICAgICAgICAgICAgOiAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwVHJlZVRhYmxlLmZpcnN0ID0gMDtcblxuICAgICAgY29uc3QgZmlsdGVyZWRWYWx1ZSA9IHBUcmVlVGFibGUuZmlsdGVyZWROb2RlcyB8fCBwVHJlZVRhYmxlLnZhbHVlO1xuXG4gICAgICBwVHJlZVRhYmxlLm9uRmlsdGVyLmVtaXQoe1xuICAgICAgICBmaWx0ZXJzOiBwVHJlZVRhYmxlLmZpbHRlcnMsXG4gICAgICAgIGZpbHRlcmVkVmFsdWVcbiAgICAgIH0pO1xuXG4gICAgICBwVHJlZVRhYmxlLnRhYmxlU2VydmljZS5vblVJVXBkYXRlKGZpbHRlcmVkVmFsdWUpO1xuICAgICAgcFRyZWVUYWJsZS51cGRhdGVTZXJpYWxpemVkVmFsdWUoKTtcblxuICAgICAgaWYgKHBUcmVlVGFibGUuc2Nyb2xsYWJsZSkge1xuICAgICAgICBwVHJlZVRhYmxlLnJlc2V0U2Nyb2xsVG9wKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHBUcmVlVGFibGUuZmluZEZpbHRlcmVkTm9kZXMgPSAobm9kZSwgcGFyYW1zV2l0aG91dE5vZGUpOiBhbnkgPT4ge1xuICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgbGV0IG1hdGNoZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICBjb25zdCBjaGlsZE5vZGVzID0gWy4uLm5vZGUuY2hpbGRyZW5dO1xuICAgICAgICAgIG5vZGUuY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgICBmb3IgKGNvbnN0IFtpZHgsIGNoaWxkTm9kZV0gb2YgY2hpbGROb2Rlcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvcHlDaGlsZE5vZGUgPSB7IC4uLmNoaWxkTm9kZSB9O1xuICAgICAgICAgICAgaWYgKHBUcmVlVGFibGUuaXNGaWx0ZXJNYXRjaGVkKGNvcHlDaGlsZE5vZGUsIHBhcmFtc1dpdGhvdXROb2RlKSkge1xuICAgICAgICAgICAgICBtYXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgLy8gUmVwbGFjZSB3aXRoIGV4cGxpY2l0IHR5cGVcbiAgICAgICAgICAgICAgKGNvcHlDaGlsZE5vZGUgYXMgYW55KS5faWR4ID0gaWR4O1xuICAgICAgICAgICAgICBub2RlLmNoaWxkcmVuLnB1c2goY29weUNoaWxkTm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1hdGNoZWQpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIF9zeW5jTm9kZXNQYXJhbXMoZnJvbTogYW55W10gfCB1bmRlZmluZWQsIHRvOiBhbnlbXSB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghZnJvbSB8fCAhdG8pIHJldHVybjtcblxuICAgIGZyb20uZm9yRWFjaCgoc291cmNlKSA9PiB7XG4gICAgICBjb25zdCBpZHggPSBzb3VyY2UuX2lkeDtcbiAgICAgIGlmICh0eXBlb2YgaWR4ID09PSAnbnVtYmVyJykge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0b1tpZHhdO1xuICAgICAgICBkZWxldGUgc291cmNlLl9pZHg7XG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICB0YXJnZXQuZXhwYW5kZWQgPSBzb3VyY2UuZXhwYW5kZWQ7XG4gICAgICAgICAgdGFyZ2V0LnBhcnRpYWxTZWxlY3RlZCA9IHNvdXJjZS5wYXJ0aWFsU2VsZWN0ZWQ7XG4gICAgICAgICAgdGhpcy5fc3luY05vZGVzUGFyYW1zKHNvdXJjZS5jaGlsZHJlbiwgdGFyZ2V0LmNoaWxkcmVuKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iXX0=