igniteui-angular 17.0.4 → 17.0.5

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 (397) hide show
  1. package/esm2022/lib/accordion/accordion.component.mjs +3 -3
  2. package/esm2022/lib/accordion/accordion.module.mjs +4 -4
  3. package/esm2022/lib/accordion/public_api.mjs +12 -3
  4. package/esm2022/lib/action-strip/action-strip.component.mjs +6 -6
  5. package/esm2022/lib/action-strip/action-strip.module.mjs +4 -4
  6. package/esm2022/lib/action-strip/grid-actions/grid-action-button.component.mjs +3 -3
  7. package/esm2022/lib/action-strip/grid-actions/grid-actions-base.directive.mjs +3 -3
  8. package/esm2022/lib/action-strip/grid-actions/grid-editing-actions.component.mjs +3 -3
  9. package/esm2022/lib/action-strip/grid-actions/grid-pinning-actions.component.mjs +3 -3
  10. package/esm2022/lib/action-strip/public_api.mjs +3 -2
  11. package/esm2022/lib/avatar/avatar.component.mjs +3 -3
  12. package/esm2022/lib/avatar/avatar.module.mjs +4 -4
  13. package/esm2022/lib/badge/badge.component.mjs +3 -3
  14. package/esm2022/lib/badge/badge.module.mjs +4 -4
  15. package/esm2022/lib/banner/banner.component.mjs +3 -3
  16. package/esm2022/lib/banner/banner.directives.mjs +3 -3
  17. package/esm2022/lib/banner/banner.module.mjs +4 -4
  18. package/esm2022/lib/buttonGroup/buttonGroup.component.mjs +3 -3
  19. package/esm2022/lib/buttonGroup/buttongroup.module.mjs +4 -4
  20. package/esm2022/lib/calendar/calendar-base.mjs +3 -3
  21. package/esm2022/lib/calendar/calendar.component.mjs +3 -3
  22. package/esm2022/lib/calendar/calendar.directives.mjs +15 -15
  23. package/esm2022/lib/calendar/calendar.module.mjs +4 -4
  24. package/esm2022/lib/calendar/days-view/day-item.component.mjs +3 -3
  25. package/esm2022/lib/calendar/days-view/days-view.component.mjs +3 -3
  26. package/esm2022/lib/calendar/days-view/daysview-navigation.service.mjs +3 -3
  27. package/esm2022/lib/calendar/month-picker/month-picker-base.mjs +3 -3
  28. package/esm2022/lib/calendar/month-picker/month-picker.component.mjs +3 -3
  29. package/esm2022/lib/calendar/months-view/months-view.component.mjs +3 -3
  30. package/esm2022/lib/calendar/months-view.pipe.mjs +6 -6
  31. package/esm2022/lib/calendar/years-view/years-view.component.mjs +6 -6
  32. package/esm2022/lib/card/card.component.mjs +27 -27
  33. package/esm2022/lib/card/card.module.mjs +4 -4
  34. package/esm2022/lib/carousel/carousel.component.mjs +6 -6
  35. package/esm2022/lib/carousel/carousel.directives.mjs +9 -9
  36. package/esm2022/lib/carousel/carousel.module.mjs +4 -4
  37. package/esm2022/lib/carousel/slide.component.mjs +3 -3
  38. package/esm2022/lib/checkbox/checkbox.component.mjs +3 -3
  39. package/esm2022/lib/checkbox/checkbox.module.mjs +4 -4
  40. package/esm2022/lib/chips/chip.component.mjs +3 -3
  41. package/esm2022/lib/chips/chips-area.component.mjs +3 -3
  42. package/esm2022/lib/chips/chips.module.mjs +4 -4
  43. package/esm2022/lib/combo/combo-add-item.component.mjs +3 -3
  44. package/esm2022/lib/combo/combo-dropdown.component.mjs +3 -3
  45. package/esm2022/lib/combo/combo-item.component.mjs +3 -3
  46. package/esm2022/lib/combo/combo.api.mjs +3 -3
  47. package/esm2022/lib/combo/combo.common.mjs +3 -3
  48. package/esm2022/lib/combo/combo.component.mjs +3 -3
  49. package/esm2022/lib/combo/combo.directives.mjs +24 -24
  50. package/esm2022/lib/combo/combo.module.mjs +4 -4
  51. package/esm2022/lib/combo/combo.pipes.mjs +6 -6
  52. package/esm2022/lib/core/density.mjs +3 -3
  53. package/esm2022/lib/core/navigation/directives.mjs +6 -6
  54. package/esm2022/lib/core/navigation/nav.service.mjs +3 -3
  55. package/esm2022/lib/core/selection.mjs +3 -3
  56. package/esm2022/lib/core/touch.mjs +3 -3
  57. package/esm2022/lib/core/utils.mjs +3 -3
  58. package/esm2022/lib/date-common/calendar-container/calendar-container.component.mjs +3 -3
  59. package/esm2022/lib/date-common/picker-base.directive.mjs +3 -3
  60. package/esm2022/lib/date-common/picker-icons.common.mjs +9 -9
  61. package/esm2022/lib/date-picker/date-picker.component.mjs +3 -3
  62. package/esm2022/lib/date-picker/date-picker.module.mjs +4 -4
  63. package/esm2022/lib/date-range-picker/date-range-picker-inputs.common.mjs +15 -15
  64. package/esm2022/lib/date-range-picker/date-range-picker.component.mjs +3 -3
  65. package/esm2022/lib/date-range-picker/date-range-picker.module.mjs +4 -4
  66. package/esm2022/lib/dialog/dialog.component.mjs +3 -3
  67. package/esm2022/lib/dialog/dialog.directives.mjs +6 -6
  68. package/esm2022/lib/dialog/dialog.module.mjs +4 -4
  69. package/esm2022/lib/directives/autocomplete/autocomplete.directive.mjs +3 -3
  70. package/esm2022/lib/directives/autocomplete/autocomplete.module.mjs +4 -4
  71. package/esm2022/lib/directives/button/button.directive.mjs +3 -3
  72. package/esm2022/lib/directives/button/button.module.mjs +4 -4
  73. package/esm2022/lib/directives/date-time-editor/date-time-editor.directive.mjs +3 -3
  74. package/esm2022/lib/directives/date-time-editor/date-time-editor.module.mjs +4 -4
  75. package/esm2022/lib/directives/divider/divider.directive.mjs +3 -3
  76. package/esm2022/lib/directives/divider/divider.module.mjs +4 -4
  77. package/esm2022/lib/directives/drag-drop/drag-drop.directive.mjs +12 -12
  78. package/esm2022/lib/directives/drag-drop/drag-drop.module.mjs +4 -4
  79. package/esm2022/lib/directives/filter/filter.directive.mjs +6 -6
  80. package/esm2022/lib/directives/filter/filter.module.mjs +4 -4
  81. package/esm2022/lib/directives/focus/focus.directive.mjs +3 -3
  82. package/esm2022/lib/directives/focus/focus.module.mjs +4 -4
  83. package/esm2022/lib/directives/focus-trap/focus-trap.directive.mjs +3 -3
  84. package/esm2022/lib/directives/focus-trap/focus-trap.module.mjs +4 -4
  85. package/esm2022/lib/directives/for-of/base.helper.component.mjs +3 -3
  86. package/esm2022/lib/directives/for-of/display.container.mjs +3 -3
  87. package/esm2022/lib/directives/for-of/for_of.directive.mjs +7 -8
  88. package/esm2022/lib/directives/for-of/for_of.module.mjs +4 -4
  89. package/esm2022/lib/directives/for-of/for_of.sync.service.mjs +6 -6
  90. package/esm2022/lib/directives/for-of/horizontal.virtual.helper.component.mjs +3 -3
  91. package/esm2022/lib/directives/for-of/virtual.helper.component.mjs +3 -3
  92. package/esm2022/lib/directives/form-control/form-control.directive.mjs +3 -3
  93. package/esm2022/lib/directives/form-control/form-control.module.mjs +4 -4
  94. package/esm2022/lib/directives/hint/hint.directive.mjs +3 -3
  95. package/esm2022/lib/directives/input/input.directive.mjs +3 -3
  96. package/esm2022/lib/directives/label/label.directive.mjs +3 -3
  97. package/esm2022/lib/directives/layout/layout.directive.mjs +6 -6
  98. package/esm2022/lib/directives/layout/layout.module.mjs +4 -4
  99. package/esm2022/lib/directives/mask/mask-parsing.service.mjs +3 -3
  100. package/esm2022/lib/directives/mask/mask.directive.mjs +3 -3
  101. package/esm2022/lib/directives/mask/mask.module.mjs +4 -4
  102. package/esm2022/lib/directives/notification/notifications.directive.mjs +3 -3
  103. package/esm2022/lib/directives/prefix/prefix.directive.mjs +3 -3
  104. package/esm2022/lib/directives/radio/radio-group.directive.mjs +3 -3
  105. package/esm2022/lib/directives/radio/radio-group.module.mjs +4 -4
  106. package/esm2022/lib/directives/ripple/ripple.directive.mjs +3 -3
  107. package/esm2022/lib/directives/ripple/ripple.module.mjs +4 -4
  108. package/esm2022/lib/directives/scroll-inertia/scroll_inertia.directive.mjs +3 -3
  109. package/esm2022/lib/directives/scroll-inertia/scroll_inertia.module.mjs +4 -4
  110. package/esm2022/lib/directives/suffix/suffix.directive.mjs +3 -3
  111. package/esm2022/lib/directives/template-outlet/template_outlet.directive.mjs +3 -3
  112. package/esm2022/lib/directives/text-highlight/text-highlight.directive.mjs +3 -3
  113. package/esm2022/lib/directives/text-highlight/text-highlight.module.mjs +4 -4
  114. package/esm2022/lib/directives/text-selection/text-selection.directive.mjs +3 -3
  115. package/esm2022/lib/directives/text-selection/text-selection.module.mjs +4 -4
  116. package/esm2022/lib/directives/toggle/toggle.directive.mjs +9 -9
  117. package/esm2022/lib/directives/toggle/toggle.module.mjs +4 -4
  118. package/esm2022/lib/directives/tooltip/tooltip-target.directive.mjs +3 -3
  119. package/esm2022/lib/directives/tooltip/tooltip.component.mjs +3 -3
  120. package/esm2022/lib/directives/tooltip/tooltip.directive.mjs +3 -3
  121. package/esm2022/lib/directives/tooltip/tooltip.module.mjs +4 -4
  122. package/esm2022/lib/drop-down/drop-down-group.component.mjs +3 -3
  123. package/esm2022/lib/drop-down/drop-down-item.base.mjs +3 -3
  124. package/esm2022/lib/drop-down/drop-down-item.component.mjs +3 -3
  125. package/esm2022/lib/drop-down/drop-down-navigation.directive.mjs +3 -3
  126. package/esm2022/lib/drop-down/drop-down.base.mjs +3 -3
  127. package/esm2022/lib/drop-down/drop-down.component.mjs +3 -3
  128. package/esm2022/lib/drop-down/drop-down.module.mjs +4 -4
  129. package/esm2022/lib/expansion-panel/expansion-panel-body.component.mjs +3 -3
  130. package/esm2022/lib/expansion-panel/expansion-panel-header.component.mjs +3 -3
  131. package/esm2022/lib/expansion-panel/expansion-panel.common.mjs +3 -3
  132. package/esm2022/lib/expansion-panel/expansion-panel.component.mjs +3 -3
  133. package/esm2022/lib/expansion-panel/expansion-panel.directives.mjs +9 -9
  134. package/esm2022/lib/expansion-panel/expansion-panel.module.mjs +4 -4
  135. package/esm2022/lib/expansion-panel/toggle-animation-component.mjs +3 -3
  136. package/esm2022/lib/grids/api.service.mjs +3 -3
  137. package/esm2022/lib/grids/cell.component.mjs +3 -3
  138. package/esm2022/lib/grids/column-actions/column-actions-base.directive.mjs +3 -3
  139. package/esm2022/lib/grids/column-actions/column-actions.component.mjs +12 -12
  140. package/esm2022/lib/grids/column-actions/column-hiding.directive.mjs +3 -3
  141. package/esm2022/lib/grids/column-actions/column-pinning.directive.mjs +3 -3
  142. package/esm2022/lib/grids/columns/column-group.component.mjs +3 -3
  143. package/esm2022/lib/grids/columns/column-layout.component.mjs +3 -3
  144. package/esm2022/lib/grids/columns/column.component.mjs +3 -3
  145. package/esm2022/lib/grids/columns/templates.directive.mjs +24 -24
  146. package/esm2022/lib/grids/columns/validators.directive.mjs +21 -21
  147. package/esm2022/lib/grids/common/crud.service.mjs +3 -3
  148. package/esm2022/lib/grids/common/pipes.mjs +54 -54
  149. package/esm2022/lib/grids/filtering/advanced-filtering/advanced-filtering-dialog.component.mjs +3 -3
  150. package/esm2022/lib/grids/filtering/base/grid-filtering-cell.component.mjs +3 -3
  151. package/esm2022/lib/grids/filtering/base/grid-filtering-row.component.mjs +3 -3
  152. package/esm2022/lib/grids/filtering/excel-style/base-filtering.component.mjs +3 -3
  153. package/esm2022/lib/grids/filtering/excel-style/excel-style-clear-filters.component.mjs +3 -3
  154. package/esm2022/lib/grids/filtering/excel-style/excel-style-conditional-filter.component.mjs +3 -3
  155. package/esm2022/lib/grids/filtering/excel-style/excel-style-custom-dialog.component.mjs +3 -3
  156. package/esm2022/lib/grids/filtering/excel-style/excel-style-date-expression.component.mjs +3 -3
  157. package/esm2022/lib/grids/filtering/excel-style/excel-style-default-expression.component.mjs +3 -3
  158. package/esm2022/lib/grids/filtering/excel-style/excel-style-filtering.component.mjs +9 -9
  159. package/esm2022/lib/grids/filtering/excel-style/excel-style-header.component.mjs +3 -3
  160. package/esm2022/lib/grids/filtering/excel-style/excel-style-hiding.component.mjs +3 -3
  161. package/esm2022/lib/grids/filtering/excel-style/excel-style-moving.component.mjs +3 -3
  162. package/esm2022/lib/grids/filtering/excel-style/excel-style-pinning.component.mjs +3 -3
  163. package/esm2022/lib/grids/filtering/excel-style/excel-style-search.component.mjs +6 -6
  164. package/esm2022/lib/grids/filtering/excel-style/excel-style-selecting.component.mjs +3 -3
  165. package/esm2022/lib/grids/filtering/excel-style/excel-style-sorting.component.mjs +3 -3
  166. package/esm2022/lib/grids/filtering/grid-filtering.service.mjs +3 -3
  167. package/esm2022/lib/grids/grid/expandable-cell.component.mjs +3 -3
  168. package/esm2022/lib/grids/grid/grid-api.service.mjs +3 -3
  169. package/esm2022/lib/grids/grid/grid-row.component.mjs +3 -3
  170. package/esm2022/lib/grids/grid/grid-validation.service.mjs +3 -3
  171. package/esm2022/lib/grids/grid/grid.component.mjs +3 -3
  172. package/esm2022/lib/grids/grid/grid.details.pipe.mjs +3 -3
  173. package/esm2022/lib/grids/grid/grid.module.mjs +4 -4
  174. package/esm2022/lib/grids/grid/grid.pipes.mjs +12 -12
  175. package/esm2022/lib/grids/grid/grid.summary.pipe.mjs +3 -3
  176. package/esm2022/lib/grids/grid/groupby-row.component.mjs +3 -3
  177. package/esm2022/lib/grids/grid/public_api.mjs +86 -6
  178. package/esm2022/lib/grids/grid-base.directive.mjs +3 -3
  179. package/esm2022/lib/grids/grid-footer/grid-footer.component.mjs +3 -3
  180. package/esm2022/lib/grids/grid-mrl-navigation.service.mjs +3 -3
  181. package/esm2022/lib/grids/grid-navigation.service.mjs +3 -3
  182. package/esm2022/lib/grids/grid.common.mjs +3 -3
  183. package/esm2022/lib/grids/grid.directives.mjs +33 -33
  184. package/esm2022/lib/grids/grid.rowEdit.directive.mjs +15 -15
  185. package/esm2022/lib/grids/grouping/grid-group-by-area.component.mjs +3 -3
  186. package/esm2022/lib/grids/grouping/group-by-area.directive.mjs +6 -6
  187. package/esm2022/lib/grids/grouping/tree-grid-group-by-area.component.mjs +3 -3
  188. package/esm2022/lib/grids/headers/grid-header-group.component.mjs +3 -3
  189. package/esm2022/lib/grids/headers/grid-header-row.component.mjs +3 -3
  190. package/esm2022/lib/grids/headers/grid-header.component.mjs +3 -3
  191. package/esm2022/lib/grids/headers/pipes.mjs +9 -9
  192. package/esm2022/lib/grids/hierarchical-grid/hierarchical-cell.component.mjs +3 -3
  193. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid-api.service.mjs +3 -3
  194. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid-base.directive.mjs +3 -3
  195. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid-navigation.service.mjs +3 -3
  196. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid.component.mjs +6 -6
  197. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid.module.mjs +4 -4
  198. package/esm2022/lib/grids/hierarchical-grid/hierarchical-grid.pipes.mjs +6 -6
  199. package/esm2022/lib/grids/hierarchical-grid/hierarchical-row.component.mjs +3 -3
  200. package/esm2022/lib/grids/hierarchical-grid/public_api.mjs +81 -7
  201. package/esm2022/lib/grids/hierarchical-grid/row-island-api.service.mjs +3 -3
  202. package/esm2022/lib/grids/hierarchical-grid/row-island.component.mjs +3 -3
  203. package/esm2022/lib/grids/moving/moving.drag.directive.mjs +3 -3
  204. package/esm2022/lib/grids/moving/moving.drop.directive.mjs +3 -3
  205. package/esm2022/lib/grids/moving/moving.service.mjs +3 -3
  206. package/esm2022/lib/grids/pivot-grid/pivot-data-selector.component.mjs +3 -3
  207. package/esm2022/lib/grids/pivot-grid/pivot-filtering.service.mjs +3 -3
  208. package/esm2022/lib/grids/pivot-grid/pivot-grid-navigation.service.mjs +3 -3
  209. package/esm2022/lib/grids/pivot-grid/pivot-grid.component.mjs +3 -3
  210. package/esm2022/lib/grids/pivot-grid/pivot-grid.directives.mjs +3 -3
  211. package/esm2022/lib/grids/pivot-grid/pivot-grid.module.mjs +4 -4
  212. package/esm2022/lib/grids/pivot-grid/pivot-grid.pipes.mjs +30 -30
  213. package/esm2022/lib/grids/pivot-grid/pivot-header-row.component.mjs +3 -3
  214. package/esm2022/lib/grids/pivot-grid/pivot-row-dimension-content.component.mjs +3 -3
  215. package/esm2022/lib/grids/pivot-grid/pivot-row-dimension-header-group.component.mjs +3 -3
  216. package/esm2022/lib/grids/pivot-grid/pivot-row-dimension-header.component.mjs +3 -3
  217. package/esm2022/lib/grids/pivot-grid/pivot-row.component.mjs +3 -3
  218. package/esm2022/lib/grids/pivot-grid/public_api.mjs +70 -3
  219. package/esm2022/lib/grids/resizing/pivot-grid/pivot-resize-handle.directive.mjs +3 -3
  220. package/esm2022/lib/grids/resizing/pivot-grid/pivot-resizer.component.mjs +3 -3
  221. package/esm2022/lib/grids/resizing/pivot-grid/pivot-resizing.service.mjs +3 -3
  222. package/esm2022/lib/grids/resizing/resize-handle.directive.mjs +3 -3
  223. package/esm2022/lib/grids/resizing/resizer.component.mjs +3 -3
  224. package/esm2022/lib/grids/resizing/resizer.directive.mjs +3 -3
  225. package/esm2022/lib/grids/resizing/resizing.service.mjs +3 -3
  226. package/esm2022/lib/grids/row-drag.directive.mjs +9 -9
  227. package/esm2022/lib/grids/row.directive.mjs +3 -3
  228. package/esm2022/lib/grids/selection/drag-select.directive.mjs +3 -3
  229. package/esm2022/lib/grids/selection/row-selectors.mjs +9 -9
  230. package/esm2022/lib/grids/selection/selection.service.mjs +3 -3
  231. package/esm2022/lib/grids/state.directive.mjs +6 -6
  232. package/esm2022/lib/grids/summaries/grid-root-summary.pipe.mjs +3 -3
  233. package/esm2022/lib/grids/summaries/grid-summary.service.mjs +3 -3
  234. package/esm2022/lib/grids/summaries/summary-cell.component.mjs +3 -3
  235. package/esm2022/lib/grids/summaries/summary-row.component.mjs +3 -3
  236. package/esm2022/lib/grids/toolbar/common.mjs +15 -15
  237. package/esm2022/lib/grids/toolbar/grid-toolbar-advanced-filtering.component.mjs +3 -3
  238. package/esm2022/lib/grids/toolbar/grid-toolbar-exporter.component.mjs +3 -3
  239. package/esm2022/lib/grids/toolbar/grid-toolbar-hiding.component.mjs +3 -3
  240. package/esm2022/lib/grids/toolbar/grid-toolbar-pinning.component.mjs +3 -3
  241. package/esm2022/lib/grids/toolbar/grid-toolbar.base.mjs +6 -6
  242. package/esm2022/lib/grids/toolbar/grid-toolbar.component.mjs +3 -3
  243. package/esm2022/lib/grids/tree-grid/public_api.mjs +81 -7
  244. package/esm2022/lib/grids/tree-grid/tree-cell.component.mjs +3 -3
  245. package/esm2022/lib/grids/tree-grid/tree-grid-api.service.mjs +3 -3
  246. package/esm2022/lib/grids/tree-grid/tree-grid-row.component.mjs +3 -3
  247. package/esm2022/lib/grids/tree-grid/tree-grid-selection.service.mjs +3 -3
  248. package/esm2022/lib/grids/tree-grid/tree-grid.component.mjs +3 -3
  249. package/esm2022/lib/grids/tree-grid/tree-grid.directives.mjs +3 -3
  250. package/esm2022/lib/grids/tree-grid/tree-grid.filtering.pipe.mjs +3 -3
  251. package/esm2022/lib/grids/tree-grid/tree-grid.grouping.pipe.mjs +3 -3
  252. package/esm2022/lib/grids/tree-grid/tree-grid.module.mjs +4 -4
  253. package/esm2022/lib/grids/tree-grid/tree-grid.pipes.mjs +21 -21
  254. package/esm2022/lib/grids/tree-grid/tree-grid.summary.pipe.mjs +3 -3
  255. package/esm2022/lib/icon/icon.component.mjs +3 -3
  256. package/esm2022/lib/icon/icon.module.mjs +4 -4
  257. package/esm2022/lib/icon/icon.service.mjs +3 -3
  258. package/esm2022/lib/input-group/input-group.component.mjs +3 -3
  259. package/esm2022/lib/input-group/input-group.module.mjs +4 -4
  260. package/esm2022/lib/list/list-item.component.mjs +3 -3
  261. package/esm2022/lib/list/list.common.mjs +15 -15
  262. package/esm2022/lib/list/list.component.mjs +18 -18
  263. package/esm2022/lib/list/list.module.mjs +4 -4
  264. package/esm2022/lib/navbar/navbar.component.mjs +9 -9
  265. package/esm2022/lib/navbar/navbar.module.mjs +4 -4
  266. package/esm2022/lib/navigation-drawer/navigation-drawer.component.mjs +3 -3
  267. package/esm2022/lib/navigation-drawer/navigation-drawer.directives.mjs +9 -9
  268. package/esm2022/lib/navigation-drawer/navigation-drawer.module.mjs +4 -4
  269. package/esm2022/lib/paginator/paginator-interfaces.mjs +3 -3
  270. package/esm2022/lib/paginator/paginator.component.mjs +12 -12
  271. package/esm2022/lib/paginator/paginator.module.mjs +4 -4
  272. package/esm2022/lib/progressbar/progressbar.common.mjs +6 -6
  273. package/esm2022/lib/progressbar/progressbar.component.mjs +9 -9
  274. package/esm2022/lib/progressbar/progressbar.module.mjs +4 -4
  275. package/esm2022/lib/query-builder/query-builder-header.component.mjs +3 -3
  276. package/esm2022/lib/query-builder/query-builder.component.mjs +6 -6
  277. package/esm2022/lib/query-builder/query-builder.module.mjs +4 -4
  278. package/esm2022/lib/radio/radio.component.mjs +3 -3
  279. package/esm2022/lib/select/select-group.component.mjs +3 -3
  280. package/esm2022/lib/select/select-item.component.mjs +3 -3
  281. package/esm2022/lib/select/select-navigation.directive.mjs +3 -3
  282. package/esm2022/lib/select/select.component.mjs +12 -12
  283. package/esm2022/lib/select/select.module.mjs +4 -4
  284. package/esm2022/lib/services/animation/angular-animation-service.mjs +3 -3
  285. package/esm2022/lib/services/csv/csv-exporter.mjs +3 -3
  286. package/esm2022/lib/services/direction/directionality.mjs +3 -3
  287. package/esm2022/lib/services/excel/excel-exporter.mjs +3 -3
  288. package/esm2022/lib/services/overlay/overlay.mjs +3 -3
  289. package/esm2022/lib/services/transaction/transaction-factory.service.mjs +6 -6
  290. package/esm2022/lib/simple-combo/simple-combo.component.mjs +3 -3
  291. package/esm2022/lib/simple-combo/simple-combo.module.mjs +4 -4
  292. package/esm2022/lib/slider/label/thumb-label.component.mjs +3 -3
  293. package/esm2022/lib/slider/slider.common.mjs +9 -9
  294. package/esm2022/lib/slider/slider.component.mjs +3 -3
  295. package/esm2022/lib/slider/slider.module.mjs +4 -4
  296. package/esm2022/lib/slider/thumb/thumb-slider.component.mjs +3 -3
  297. package/esm2022/lib/slider/ticks/tick.pipe.mjs +3 -3
  298. package/esm2022/lib/slider/ticks/ticks.component.mjs +3 -3
  299. package/esm2022/lib/snackbar/snackbar.component.mjs +3 -3
  300. package/esm2022/lib/snackbar/snackbar.module.mjs +4 -4
  301. package/esm2022/lib/splitter/splitter-pane/splitter-pane.component.mjs +3 -3
  302. package/esm2022/lib/splitter/splitter.component.mjs +6 -6
  303. package/esm2022/lib/splitter/splitter.module.mjs +4 -4
  304. package/esm2022/lib/stepper/step/step.component.mjs +3 -3
  305. package/esm2022/lib/stepper/stepper.component.mjs +3 -3
  306. package/esm2022/lib/stepper/stepper.directive.mjs +21 -21
  307. package/esm2022/lib/stepper/stepper.module.mjs +4 -4
  308. package/esm2022/lib/stepper/stepper.service.mjs +3 -3
  309. package/esm2022/lib/switch/switch.component.mjs +3 -3
  310. package/esm2022/lib/switch/switch.module.mjs +4 -4
  311. package/esm2022/lib/tabs/bottom-nav/bottom-nav-content.component.mjs +3 -3
  312. package/esm2022/lib/tabs/bottom-nav/bottom-nav-header.component.mjs +3 -3
  313. package/esm2022/lib/tabs/bottom-nav/bottom-nav-item.component.mjs +3 -3
  314. package/esm2022/lib/tabs/bottom-nav/bottom-nav.component.mjs +3 -3
  315. package/esm2022/lib/tabs/bottom-nav/bottom-nav.directives.mjs +6 -6
  316. package/esm2022/lib/tabs/bottom-nav/bottom-nav.module.mjs +4 -4
  317. package/esm2022/lib/tabs/tab-content.directive.mjs +3 -3
  318. package/esm2022/lib/tabs/tab-header.directive.mjs +3 -3
  319. package/esm2022/lib/tabs/tab-item.directive.mjs +3 -3
  320. package/esm2022/lib/tabs/tabs/tab-content.component.mjs +3 -3
  321. package/esm2022/lib/tabs/tabs/tab-header.component.mjs +3 -3
  322. package/esm2022/lib/tabs/tabs/tab-item.component.mjs +3 -3
  323. package/esm2022/lib/tabs/tabs/tabs.component.mjs +3 -3
  324. package/esm2022/lib/tabs/tabs/tabs.directives.mjs +6 -6
  325. package/esm2022/lib/tabs/tabs/tabs.module.mjs +4 -4
  326. package/esm2022/lib/tabs/tabs.directive.mjs +3 -3
  327. package/esm2022/lib/time-picker/time-picker.component.mjs +3 -3
  328. package/esm2022/lib/time-picker/time-picker.directives.mjs +6 -6
  329. package/esm2022/lib/time-picker/time-picker.module.mjs +4 -4
  330. package/esm2022/lib/time-picker/time-picker.pipes.mjs +6 -6
  331. package/esm2022/lib/toast/toast.component.mjs +3 -3
  332. package/esm2022/lib/toast/toast.module.mjs +4 -4
  333. package/esm2022/lib/tree/tree-navigation.service.mjs +3 -3
  334. package/esm2022/lib/tree/tree-node/tree-node.component.mjs +6 -6
  335. package/esm2022/lib/tree/tree-selection.service.mjs +3 -3
  336. package/esm2022/lib/tree/tree.component.mjs +9 -9
  337. package/esm2022/lib/tree/tree.module.mjs +4 -4
  338. package/esm2022/lib/tree/tree.service.mjs +3 -3
  339. package/fesm2022/igniteui-angular.mjs +1875 -1582
  340. package/fesm2022/igniteui-angular.mjs.map +1 -1
  341. package/migrations/common/ServerHost.d.ts +1 -1
  342. package/migrations/common/UpdateChanges.d.ts +1 -1
  343. package/migrations/common/UpdateChanges.js +4 -4
  344. package/migrations/common/filterSourceDirs.d.ts +1 -1
  345. package/migrations/common/tsUtils.d.ts +2 -3
  346. package/migrations/common/tsUtils.js +1 -5
  347. package/migrations/common/util.d.ts +4 -3
  348. package/migrations/common/util.js +6 -3
  349. package/migrations/migration-collection.json +1 -0
  350. package/migrations/update-10_1_0/index.d.ts +1 -1
  351. package/migrations/update-10_2_0/index.d.ts +1 -1
  352. package/migrations/update-11_0_0/index.d.ts +1 -1
  353. package/migrations/update-11_0_0/index.js +2 -1
  354. package/migrations/update-11_1_0/index.d.ts +2 -2
  355. package/migrations/update-12_0_0/index.d.ts +1 -1
  356. package/migrations/update-12_0_0/index.js +2 -1
  357. package/migrations/update-12_1_0/index.d.ts +1 -1
  358. package/migrations/update-12_1_0/index.js +2 -1
  359. package/migrations/update-13_0_0/index.d.ts +2 -2
  360. package/migrations/update-13_0_0/index.js +2 -1
  361. package/migrations/update-13_1_0/index.d.ts +1 -1
  362. package/migrations/update-13_1_0/index.js +2 -1
  363. package/migrations/update-13_2_0/index.d.ts +1 -1
  364. package/migrations/update-14_1_0/index.d.ts +1 -1
  365. package/migrations/update-15_0_0/index.d.ts +1 -1
  366. package/migrations/update-15_0_11/index.d.ts +1 -1
  367. package/migrations/update-15_0_4/index.d.ts +1 -1
  368. package/migrations/update-15_1_0/index.d.ts +2 -2
  369. package/migrations/update-15_1_0/index.js +2 -1
  370. package/migrations/update-16_0_0/index.d.ts +1 -1
  371. package/migrations/update-16_1_0/index.d.ts +1 -1
  372. package/migrations/update-16_1_0/index.js +2 -1
  373. package/migrations/update-17_0_0/index.d.ts +1 -1
  374. package/migrations/update-17_0_0/index.js +2 -1
  375. package/migrations/update-6/index.d.ts +1 -1
  376. package/migrations/update-6_01/index.d.ts +1 -1
  377. package/migrations/update-6_02/index.d.ts +1 -1
  378. package/migrations/update-6_1/index.d.ts +1 -1
  379. package/migrations/update-6_2/index.d.ts +1 -1
  380. package/migrations/update-6_2_1/index.d.ts +1 -1
  381. package/migrations/update-7_0_2/index.d.ts +1 -1
  382. package/migrations/update-7_2_0/index.d.ts +1 -1
  383. package/migrations/update-7_3_4/index.d.ts +1 -1
  384. package/migrations/update-8_2_0/index.d.ts +1 -1
  385. package/migrations/update-8_2_3/index.d.ts +1 -1
  386. package/migrations/update-8_2_6/index.d.ts +1 -1
  387. package/migrations/update-9_0_0/index.d.ts +1 -1
  388. package/migrations/update-9_0_1/index.d.ts +1 -1
  389. package/migrations/update-9_1_0/index.d.ts +1 -1
  390. package/package.json +1 -1
  391. package/schematics/collection.json +1 -0
  392. package/schematics/ng-add/add-normalize.d.ts +1 -1
  393. package/schematics/ng-add/index.d.ts +2 -2
  394. package/schematics/tsconfig.tsbuildinfo +1 -1
  395. package/schematics/utils/dependency-handler.d.ts +2 -2
  396. package/schematics/utils/package-handler.d.ts +1 -1
  397. package/schematics/utils/util.d.ts +1 -1
@@ -149,7 +149,7 @@ export class IgxGridStateDirective {
149
149
  Object.assign(ref1.instance, colState);
150
150
  ref1.instance.grid = context.currGrid;
151
151
  if (ref1.instance.parent) {
152
- const columnGroup = newColumns.find(e => e.header === ref1.instance.parent);
152
+ const columnGroup = newColumns.find(e => e.header === ref1.instance.parent && e.columnGroup);
153
153
  columnGroup.children.reset([...columnGroup.children.toArray(), ref1.instance]);
154
154
  ref1.instance.parent = columnGroup;
155
155
  }
@@ -161,7 +161,7 @@ export class IgxGridStateDirective {
161
161
  Object.assign(ref.instance, colState);
162
162
  ref.instance.grid = context.currGrid;
163
163
  if (ref.instance.parent) {
164
- const columnGroup = newColumns.find(e => e.header === ref.instance.parent);
164
+ const columnGroup = newColumns.find(e => e.header === ref.instance.parent && e.columnGroup);
165
165
  if (columnGroup) {
166
166
  ref.instance.parent = columnGroup;
167
167
  columnGroup.children.reset([...columnGroup.children.toArray(), ref.instance]);
@@ -610,10 +610,10 @@ export class IgxGridStateDirective {
610
610
  const feature = this.FEATURES[key];
611
611
  return feature;
612
612
  }
613
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: IgxGridStateDirective, deps: [{ token: IGX_GRID_BASE, host: true, optional: true }, { token: i0.ViewContainerRef }, { token: i0.EnvironmentInjector }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive }); }
614
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.3", type: IgxGridStateDirective, isStandalone: true, selector: "[igxGridState]", inputs: { options: ["igxGridState", "options"] }, outputs: { stateParsed: "stateParsed" }, ngImport: i0 }); }
613
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxGridStateDirective, deps: [{ token: IGX_GRID_BASE, host: true, optional: true }, { token: i0.ViewContainerRef }, { token: i0.EnvironmentInjector }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Directive }); }
614
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.5", type: IgxGridStateDirective, isStandalone: true, selector: "[igxGridState]", inputs: { options: ["igxGridState", "options"] }, outputs: { stateParsed: "stateParsed" }, ngImport: i0 }); }
615
615
  }
616
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: IgxGridStateDirective, decorators: [{
616
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxGridStateDirective, decorators: [{
617
617
  type: Directive,
618
618
  args: [{
619
619
  selector: '[igxGridState]',
@@ -632,4 +632,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImpor
632
632
  type: Input,
633
633
  args: ['igxGridState']
634
634
  }] } });
635
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL3N0YXRlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFvQixNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQWlDLE1BQU0sZUFBZSxDQUFDO0FBQ2pLLE9BQU8sRUFBRSx3QkFBd0IsRUFBNkIsTUFBTSwrQ0FBK0MsQ0FBQztBQUVwSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUczRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQ0gsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUsdUJBQXVCLEVBQzlFLHlCQUF5QixFQUF1QiwyQkFBMkIsRUFDOUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUdoRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUl6RCxPQUFPLEVBQVksYUFBYSxFQUFrQixNQUFNLHlCQUF5QixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRTFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFtRnZELE1BQU0sT0FBTyxxQkFBcUI7SUErVTlCOzs7Ozs7OztPQVFHO0lBQ0gsSUFDVyxPQUFPO1FBQ2YsT0FBTyxJ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QVc7c0JBRGpCLE1BQU07Z0JBYUksT0FBTztzQkFEakIsS0FBSzt1QkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBPcHRpb25hbCwgSW5wdXQsIEhvc3QsIFZpZXdDb250YWluZXJSZWYsIEluamVjdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIGNyZWF0ZUNvbXBvbmVudCwgRW52aXJvbm1lbnRJbmplY3RvciwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSwgSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctZXhwcmVzc2lvbnMtdHJlZSc7XG5pbXBvcnQgeyBJRmlsdGVyaW5nRXhwcmVzc2lvbiB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctZXhwcmVzc2lvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSWd4Q29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi9jb2x1bW5zL2NvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4Q29sdW1uR3JvdXBDb21wb25lbnQgfSBmcm9tICcuL2NvbHVtbnMvY29sdW1uLWdyb3VwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJR3JvdXBpbmdFeHByZXNzaW9uIH0gZnJvbSAnLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwaW5nLWV4cHJlc3Npb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IElQYWdpbmdTdGF0ZSB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9wYWdpbmctc3RhdGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IEdyaWRDb2x1bW5EYXRhVHlwZSB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9kYXRhLXV0aWwnO1xuaW1wb3J0IHtcbiAgICBJZ3hCb29sZWFuRmlsdGVyaW5nT3BlcmFuZCwgSWd4TnVtYmVyRmlsdGVyaW5nT3BlcmFuZCwgSWd4RGF0ZUZpbHRlcmluZ09wZXJhbmQsXG4gICAgSWd4U3RyaW5nRmlsdGVyaW5nT3BlcmFuZCwgSUZpbHRlcmluZ09wZXJhdGlvbiwgSWd4RGF0ZVRpbWVGaWx0ZXJpbmdPcGVyYW5kXG59IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctY29uZGl0aW9uJztcbmltcG9ydCB7IElHcm91cEJ5RXhwYW5kU3RhdGUgfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvZ3JvdXBieS1leHBhbmQtc3RhdGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IElHcm91cGluZ1N0YXRlIH0gZnJvbSAnLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwYnktc3RhdGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IElneEdyaWRDb21wb25lbnQgfSBmcm9tICcuL2dyaWQvZ3JpZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudCB9IGZyb20gJy4vaGllcmFyY2hpY2FsLWdyaWQvaGllcmFyY2hpY2FsLWdyaWQuY29tcG9uZW50JztcbmltcG9ydCB7IEdyaWRTZWxlY3Rpb25SYW5nZSB9IGZyb20gJy4vY29tbW9uL3R5cGVzJztcbmltcG9ydCB7IElTb3J0aW5nRXhwcmVzc2lvbiB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9zb3J0aW5nLXN0cmF0ZWd5JztcbmltcG9ydCB7IEdyaWRUeXBlLCBJR1hfR1JJRF9CQVNFLCBJUGlubmluZ0NvbmZpZyB9IGZyb20gJy4vY29tbW9uL2dyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IElneFBpdm90R3JpZENvbXBvbmVudCB9IGZyb20gJy4vcGl2b3QtZ3JpZC9waXZvdC1ncmlkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJUGl2b3RDb25maWd1cmF0aW9uLCBJUGl2b3REaW1lbnNpb24gfSBmcm9tICcuL3Bpdm90LWdyaWQvcGl2b3QtZ3JpZC5pbnRlcmZhY2UnXG5pbXBvcnQgeyBQaXZvdFV0aWwgfSBmcm9tICcuL3Bpdm90LWdyaWQvcGl2b3QtdXRpbCc7XG5pbXBvcnQgeyBJZ3hQaXZvdERhdGVEaW1lbnNpb24gfSBmcm9tICcuL3Bpdm90LWdyaWQvcGl2b3QtZ3JpZC1kaW1lbnNpb25zJztcbmltcG9ydCB7IGNsb25lQXJyYXksIGNsb25lVmFsdWUgfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcblxuZXhwb3J0IGludGVyZmFjZSBJR3JpZFN0YXRlIHtcbiAgICBjb2x1bW5zPzogSUNvbHVtblN0YXRlW107XG4gICAgZmlsdGVyaW5nPzogSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTtcbiAgICBhZHZhbmNlZEZpbHRlcmluZz86IElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU7XG4gICAgcGFnaW5nPzogSVBhZ2luZ1N0YXRlO1xuICAgIG1vdmluZz86IGJvb2xlYW47XG4gICAgc29ydGluZz86IElTb3J0aW5nRXhwcmVzc2lvbltdO1xuICAgIGdyb3VwQnk/OiBJR3JvdXBpbmdTdGF0ZTtcbiAgICBjZWxsU2VsZWN0aW9uPzogR3JpZFNlbGVjdGlvblJhbmdlW107XG4gICAgcm93U2VsZWN0aW9uPzogYW55W107XG4gICAgY29sdW1uU2VsZWN0aW9uPzogc3RyaW5nW107XG4gICAgcm93UGlubmluZz86IGFueVtdO1xuICAgIHBpbm5pbmdDb25maWc/OiBJUGlubmluZ0NvbmZpZztcbiAgICBleHBhbnNpb24/OiBhbnlbXTtcbiAgICByb3dJc2xhbmRzPzogSUdyaWRTdGF0ZUNvbGxlY3Rpb25bXTtcbiAgICBpZD86IHN0cmluZztcbiAgICBwaXZvdENvbmZpZ3VyYXRpb24/OiBJUGl2b3RDb25maWd1cmF0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElHcmlkU3RhdGVDb2xsZWN0aW9uIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIHBhcmVudFJvd0lEOiBhbnk7XG4gICAgc3RhdGU6IElHcmlkU3RhdGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUdyaWRTdGF0ZU9wdGlvbnMge1xuICAgIGNvbHVtbnM/OiBib29sZWFuO1xuICAgIGZpbHRlcmluZz86IGJvb2xlYW47XG4gICAgYWR2YW5jZWRGaWx0ZXJpbmc/OiBib29sZWFuO1xuICAgIHNvcnRpbmc/OiBib29sZWFuO1xuICAgIGdyb3VwQnk/OiBib29sZWFuO1xuICAgIHBhZ2luZz86IGJvb2xlYW47XG4gICAgY2VsbFNlbGVjdGlvbj86IGJvb2xlYW47XG4gICAgcm93U2VsZWN0aW9uPzogYm9vbGVhbjtcbiAgICBjb2x1bW5TZWxlY3Rpb24/OiBib29sZWFuO1xuICAgIHJvd1Bpbm5pbmc/OiBib29sZWFuO1xuICAgIHBpbm5pbmdDb25maWc/OiBib29sZWFuO1xuICAgIGV4cGFuc2lvbj86IGJvb2xlYW47XG4gICAgcm93SXNsYW5kcz86IGJvb2xlYW47XG4gICAgbW92aW5nPzogYm9vbGVhbjtcbiAgICBwaXZvdENvbmZpZ3VyYXRpb24/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDb2x1bW5TdGF0ZSB7XG4gICAgcGlubmVkOiBib29sZWFuO1xuICAgIHNvcnRhYmxlOiBib29sZWFuO1xuICAgIGZpbHRlcmFibGU6IGJvb2xlYW47XG4gICAgZWRpdGFibGU6IGJvb2xlYW47XG4gICAgc29ydGluZ0lnbm9yZUNhc2U6IGJvb2xlYW47XG4gICAgZmlsdGVyaW5nSWdub3JlQ2FzZTogYm9vbGVhbjtcbiAgICBoZWFkZXJDbGFzc2VzOiBzdHJpbmc7XG4gICAgaGVhZGVyR3JvdXBDbGFzc2VzOiBzdHJpbmc7XG4gICAgbWF4V2lkdGg6IHN0cmluZztcbiAgICBncm91cGFibGU6IGJvb2xlYW47XG4gICAgbW92YWJsZTogYm9vbGVhbjtcbiAgICBoaWRkZW46IGJvb2xlYW47XG4gICAgZGF0YVR5cGU6IEdyaWRDb2x1bW5EYXRhVHlwZTtcbiAgICBoYXNTdW1tYXJ5OiBib29sZWFuO1xuICAgIGZpZWxkOiBzdHJpbmc7XG4gICAgd2lkdGg6IGFueTtcbiAgICBoZWFkZXI6IHN0cmluZztcbiAgICByZXNpemFibGU6IGJvb2xlYW47XG4gICAgc2VhcmNoYWJsZTogYm9vbGVhbjtcbiAgICBjb2x1bW5Hcm91cDogYm9vbGVhbjtcbiAgICBwYXJlbnQ6IGFueTtcbiAgICBkaXNhYmxlSGlkaW5nOiBib29sZWFuO1xuICAgIGRpc2FibGVQaW5uaW5nOiBib29sZWFuO1xufVxuXG5leHBvcnQgdHlwZSBHcmlkRmVhdHVyZXMgPSBrZXlvZiBJR3JpZFN0YXRlT3B0aW9ucztcblxuaW50ZXJmYWNlIEZlYXR1cmUge1xuICAgIGdldEZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSkgPT4gSUdyaWRTdGF0ZTtcbiAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCBzdGF0ZTogSUNvbHVtblN0YXRlW10gfCBJUGFnaW5nU3RhdGUgfCBib29sZWFuIHwgSVNvcnRpbmdFeHByZXNzaW9uW10gfFxuICAgICAgICBJR3JvdXBpbmdTdGF0ZSB8IElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgfCBHcmlkU2VsZWN0aW9uUmFuZ2VbXSB8IElQaW5uaW5nQ29uZmlnIHwgSVBpdm90Q29uZmlndXJhdGlvbiB8IGFueVtdKSA9PiB2b2lkO1xufVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tpZ3hHcmlkU3RhdGVdJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIElneEdyaWRTdGF0ZURpcmVjdGl2ZSB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfb3B0aW9uczogSUdyaWRTdGF0ZU9wdGlvbnMgfCAnJztcblxuICAgIHByaXZhdGUgZmVhdHVyZUtleXM6IEdyaWRGZWF0dXJlc1tdID0gW107XG4gICAgcHJpdmF0ZSBzdGF0ZTogSUdyaWRTdGF0ZTtcbiAgICBwcml2YXRlIGN1cnJHcmlkOiBHcmlkVHlwZTtcbiAgICBwcml2YXRlIF9vcHRpb25zOiBJR3JpZFN0YXRlT3B0aW9ucyA9IHtcbiAgICAgICAgY29sdW1uczogdHJ1ZSxcbiAgICAgICAgZmlsdGVyaW5nOiB0cnVlLFxuICAgICAgICBhZHZhbmNlZEZpbHRlcmluZzogdHJ1ZSxcbiAgICAgICAgc29ydGluZzogdHJ1ZSxcbiAgICAgICAgZ3JvdXBCeTogdHJ1ZSxcbiAgICAgICAgcGFnaW5nOiB0cnVlLFxuICAgICAgICBjZWxsU2VsZWN0aW9uOiB0cnVlLFxuICAgICAgICByb3dTZWxlY3Rpb246IHRydWUsXG4gICAgICAgIGNvbHVtblNlbGVjdGlvbjogdHJ1ZSxcbiAgICAgICAgcm93UGlubmluZzogdHJ1ZSxcbiAgICAgICAgZXhwYW5zaW9uOiB0cnVlLFxuICAgICAgICBtb3Zpbmc6IHRydWUsXG4gICAgICAgIHJvd0lzbGFuZHM6IHRydWUsXG4gICAgICAgIHBpdm90Q29uZmlndXJhdGlvbjogdHJ1ZVxuICAgIH07XG4gICAgcHJpdmF0ZSBGRUFUVVJFUyA9IHtcbiAgICAgICAgc29ydGluZzogIHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNvcnRpbmdTdGF0ZSA9IGNvbnRleHQuY3VyckdyaWQuc29ydGluZ0V4cHJlc3Npb25zO1xuICAgICAgICAgICAgICAgIHNvcnRpbmdTdGF0ZS5mb3JFYWNoKHMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcy5zdHJhdGVneTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHMub3duZXI7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgc29ydGluZzogc29ydGluZ1N0YXRlIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IElTb3J0aW5nRXhwcmVzc2lvbltdKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMgPSBzdGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZmlsdGVyaW5nOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJpbmdTdGF0ZSA9IGNvbnRleHQuY3VyckdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlO1xuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJpbmdTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgZmlsdGVyaW5nU3RhdGUub3duZXI7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBmaWx0ZXJpbmdTdGF0ZS5maWx0ZXJpbmdPcGVyYW5kcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIChpdGVtIGFzIElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpLm93bmVyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7IGZpbHRlcmluZzogZmlsdGVyaW5nU3RhdGUgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCBzdGF0ZTogRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyVHJlZSA9IGNvbnRleHQuY3JlYXRlRXhwcmVzc2lvbnNUcmVlRnJvbU9iamVjdChzdGF0ZSk7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5maWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgPSBmaWx0ZXJUcmVlIGFzIEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgYWR2YW5jZWRGaWx0ZXJpbmc6IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmluZ1N0YXRlID0gY29udGV4dC5jdXJyR3JpZC5hZHZhbmNlZEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTtcbiAgICAgICAgICAgICAgICBsZXQgYWR2YW5jZWRGaWx0ZXJpbmc6IGFueTtcbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyaW5nU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGZpbHRlcmluZ1N0YXRlLm93bmVyO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZmlsdGVyaW5nU3RhdGUuZmlsdGVyaW5nT3BlcmFuZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSAoaXRlbSBhcyBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKS5vd25lcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlZEZpbHRlcmluZyA9IGZpbHRlcmluZ1N0YXRlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFkdmFuY2VkRmlsdGVyaW5nID0ge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7IGFkdmFuY2VkRmlsdGVyaW5nIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlclRyZWUgPSBjb250ZXh0LmNyZWF0ZUV4cHJlc3Npb25zVHJlZUZyb21PYmplY3Qoc3RhdGUpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQuYWR2YW5jZWRGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgPSBmaWx0ZXJUcmVlIGFzIEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY29sdW1uczoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JpZENvbHVtbnM6IElDb2x1bW5TdGF0ZVtdID0gY29udGV4dC5jdXJyR3JpZC5jb2x1bW5zLm1hcCgoYykgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgcGlubmVkOiBjLnBpbm5lZCxcbiAgICAgICAgICAgICAgICAgICAgc29ydGFibGU6IGMuc29ydGFibGUsXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcmFibGU6IGMuZmlsdGVyYWJsZSxcbiAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IGMuZWRpdGFibGUsXG4gICAgICAgICAgICAgICAgICAgIHNvcnRpbmdJZ25vcmVDYXNlOiBjLnNvcnRpbmdJZ25vcmVDYXNlLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJpbmdJZ25vcmVDYXNlOiBjLmZpbHRlcmluZ0lnbm9yZUNhc2UsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlckNsYXNzZXM6IGMuaGVhZGVyQ2xhc3NlcyxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyR3JvdXBDbGFzc2VzOiBjLmhlYWRlckdyb3VwQ2xhc3NlcyxcbiAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IGMubWF4V2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGdyb3VwYWJsZTogYy5ncm91cGFibGUsXG4gICAgICAgICAgICAgICAgICAgIG1vdmFibGU6IGMubW92YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgaGlkZGVuOiBjLmhpZGRlbixcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IGMuZGF0YVR5cGUsXG4gICAgICAgICAgICAgICAgICAgIGhhc1N1bW1hcnk6IGMuaGFzU3VtbWFyeSxcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGMuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBjLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXI6IGMuaGVhZGVyLFxuICAgICAgICAgICAgICAgICAgICByZXNpemFibGU6IGMucmVzaXphYmxlLFxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hhYmxlOiBjLnNlYXJjaGFibGUsXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGU6IGMuc2VsZWN0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBjLnBhcmVudCA/IGMucGFyZW50LmhlYWRlciA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkdyb3VwOiBjLmNvbHVtbkdyb3VwLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlSGlkaW5nOiBjLmRpc2FibGVIaWRpbmcsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVQaW5uaW5nOiBjLmRpc2FibGVQaW5uaW5nXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGNvbHVtbnM6IGdyaWRDb2x1bW5zIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IElDb2x1bW5TdGF0ZVtdKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Q29sdW1ucyA9IFtdO1xuICAgICAgICAgICAgICAgIHN0YXRlLmZvckVhY2goKGNvbFN0YXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc0NvbHVtbkdyb3VwID0gY29sU3RhdGUuY29sdW1uR3JvdXA7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjb2xTdGF0ZS5jb2x1bW5Hcm91cDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0NvbHVtbkdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWYxID0gY3JlYXRlQ29tcG9uZW50KElneENvbHVtbkdyb3VwQ29tcG9uZW50LCB7IGVudmlyb25tZW50SW5qZWN0b3I6IHRoaXMuZW52SW5qZWN0b3IsIGVsZW1lbnRJbmplY3RvcjogdGhpcy5pbmplY3RvciB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ocmVmMS5pbnN0YW5jZSwgY29sU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVmMS5pbnN0YW5jZS5ncmlkID0gY29udGV4dC5jdXJyR3JpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWYxLmluc3RhbmNlLnBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbkdyb3VwOiBJZ3hDb2x1bW5Hcm91cENvbXBvbmVudCA9IG5ld0NvbHVtbnMuZmluZChlID0+IGUuaGVhZGVyID09PSByZWYxLmluc3RhbmNlLnBhcmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uR3JvdXAuY2hpbGRyZW4ucmVzZXQoWy4uLmNvbHVtbkdyb3VwLmNoaWxkcmVuLnRvQXJyYXkoKSwgcmVmMS5pbnN0YW5jZV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZjEuaW5zdGFuY2UucGFyZW50ID0gY29sdW1uR3JvdXA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZWYxLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbHVtbnMucHVzaChyZWYxLmluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZiA9IGNyZWF0ZUNvbXBvbmVudChJZ3hDb2x1bW5Db21wb25lbnQsIHsgZW52aXJvbm1lbnRJbmplY3RvcjogdGhpcy5lbnZJbmplY3RvciwgZWxlbWVudEluamVjdG9yOiB0aGlzLmluamVjdG9yfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHJlZi5pbnN0YW5jZSwgY29sU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVmLmluc3RhbmNlLmdyaWQgPSBjb250ZXh0LmN1cnJHcmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZi5pbnN0YW5jZS5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5Hcm91cDogSWd4Q29sdW1uR3JvdXBDb21wb25lbnQgPSBuZXdDb2x1bW5zLmZpbmQoZSA9PiBlLmhlYWRlciA9PT0gcmVmLmluc3RhbmNlLnBhcmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbkdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZi5pbnN0YW5jZS5wYXJlbnQgPSBjb2x1bW5Hcm91cDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uR3JvdXAuY2hpbGRyZW4ucmVzZXQoWy4uLmNvbHVtbkdyb3VwLmNoaWxkcmVuLnRvQXJyYXkoKSwgcmVmLmluc3RhbmNlXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbHVtbnMucHVzaChyZWYuaW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC51cGRhdGVDb2x1bW5zKG5ld0NvbHVtbnMpO1xuICAgICAgICAgICAgICAgIG5ld0NvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgICAgICAgICAoY29udGV4dC5jdXJyR3JpZCBhcyBhbnkpLmNvbHVtbkluaXQuZW1pdChjb2wpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBncm91cEJ5OiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBncmlkID0gY29udGV4dC5jdXJyR3JpZCBhcyBJZ3hHcmlkQ29tcG9uZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwaW5nRXhwcmVzc2lvbnMgPSBncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnM7XG4gICAgICAgICAgICAgICAgZ3JvdXBpbmdFeHByZXNzaW9ucy5mb3JFYWNoKGV4cHIgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgZXhwci5zdHJhdGVneTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBhbnNpb25TdGF0ZSA9IGdyaWQuZ3JvdXBpbmdFeHBhbnNpb25TdGF0ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cHNFeHBhbmRlZCA9IGdyaWQuZ3JvdXBzRXhwYW5kZWQ7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4geyBncm91cEJ5OiB7IGV4cHJlc3Npb25zOiBncm91cGluZ0V4cHJlc3Npb25zLCBleHBhbnNpb246IGV4cGFuc2lvblN0YXRlLCBkZWZhdWx0RXhwYW5kZWQ6IGdyb3Vwc0V4cGFuZGVkfSAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCBzdGF0ZTogSUdyb3VwaW5nU3RhdGUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBncmlkID0gY29udGV4dC5jdXJyR3JpZCBhcyBJZ3hHcmlkQ29tcG9uZW50O1xuICAgICAgICAgICAgICAgIGdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucyA9IHN0YXRlLmV4cHJlc3Npb25zIGFzIElHcm91cGluZ0V4cHJlc3Npb25bXTtcbiAgICAgICAgICAgICAgICBpZiAoZ3JpZC5ncm91cHNFeHBhbmRlZCAhPT0gc3RhdGUuZGVmYXVsdEV4cGFuZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGdyaWQudG9nZ2xlQWxsR3JvdXBSb3dzKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZ3JpZC5ncm91cGluZ0V4cGFuc2lvblN0YXRlID0gc3RhdGUuZXhwYW5zaW9uIGFzIElHcm91cEJ5RXhwYW5kU3RhdGVbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHBhZ2luZzoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFnaW5nU3RhdGUgPSBjb250ZXh0LmN1cnJHcmlkLnBhZ2luZ1N0YXRlO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHBhZ2luZzogcGFnaW5nU3RhdGUgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCBzdGF0ZTogSVBhZ2luZ1N0YXRlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LmN1cnJHcmlkLnBhZ2luYXRvcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmN1cnJHcmlkLnBlclBhZ2UgIT09IHN0YXRlLnJlY29yZHNQZXJQYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQucGVyUGFnZSA9IHN0YXRlLnJlY29yZHNQZXJQYWdlO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQucGFnZSA9IHN0YXRlLmluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtb3Zpbmc6IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IG1vdmluZzogY29udGV4dC5jdXJyR3JpZC5tb3ZpbmcgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCBzdGF0ZTogYm9vbGVhbik6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQubW92aW5nID0gc3RhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJvd1NlbGVjdGlvbjoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gY29udGV4dC5jdXJyR3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmdldFNlbGVjdGVkUm93cygpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHJvd1NlbGVjdGlvbjogc2VsZWN0aW9uIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IGFueVtdKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5zZWxlY3RSb3dzKHN0YXRlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2VsbFNlbGVjdGlvbjoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gY29udGV4dC5jdXJyR3JpZC5nZXRTZWxlY3RlZFJhbmdlcygpLm1hcChyYW5nZSA9PlxuICAgICAgICAgICAgICAgICAgICAoeyByb3dTdGFydDogcmFuZ2Uucm93U3RhcnQsIHJvd0VuZDogcmFuZ2Uucm93RW5kLCBjb2x1bW5TdGFydDogcmFuZ2UuY29sdW1uU3RhcnQsIGNvbHVtbkVuZDogcmFuZ2UuY29sdW1uRW5kIH0pKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBjZWxsU2VsZWN0aW9uOiBzZWxlY3Rpb24gfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCBzdGF0ZTogR3JpZFNlbGVjdGlvblJhbmdlW10pOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5mb3JFYWNoKHIgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByYW5nZSA9IHsgcm93U3RhcnQ6IHIucm93U3RhcnQsIHJvd0VuZDogci5yb3dFbmQsIGNvbHVtblN0YXJ0OiByLmNvbHVtblN0YXJ0LCBjb2x1bW5FbmQ6IHIuY29sdW1uRW5kfTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5zZWxlY3RSYW5nZShyYW5nZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNvbHVtblNlbGVjdGlvbjoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gY29udGV4dC5jdXJyR3JpZC5zZWxlY3RlZENvbHVtbnMoKS5tYXAoYyA9PiBjLmZpZWxkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBjb2x1bW5TZWxlY3Rpb246IHNlbGVjdGlvbiB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBzdHJpbmdbXSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQuZGVzZWxlY3RBbGxDb2x1bW5zKCk7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5zZWxlY3RDb2x1bW5zKHN0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcm93UGlubmluZzoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGlubmVkID0gY29udGV4dC5jdXJyR3JpZC5waW5uZWRSb3dzPy5tYXAoeCA9PiB4LmtleSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcm93UGlubmluZzogcGlubmVkIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IGFueVtdKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gY2xlYXIgY3VycmVudCBzdGF0ZS5cbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLnBpbm5lZFJvd3MuZm9yRWFjaChyb3cgPT4gcm93LnVucGluKCkpO1xuICAgICAgICAgICAgICAgIHN0YXRlLmZvckVhY2gocm93SUQgPT4gY29udGV4dC5jdXJyR3JpZC5waW5Sb3cocm93SUQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcGlubmluZ0NvbmZpZzoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiAoeyBwaW5uaW5nQ29uZmlnOiBjb250ZXh0LmN1cnJHcmlkLnBpbm5pbmcgfSksXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCBzdGF0ZTogSVBpbm5pbmdDb25maWcpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLnBpbm5pbmcgPSBzdGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXhwYW5zaW9uOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBhbnNpb25TdGF0ZXMgPSBBcnJheS5mcm9tKGNvbnRleHQuY3VyckdyaWQuZXhwYW5zaW9uU3RhdGVzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBleHBhbnNpb246IGV4cGFuc2lvblN0YXRlcyB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBhbnlbXSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGFuc2lvblN0YXRlcyA9IG5ldyBNYXA8YW55LCBib29sZWFuPihzdGF0ZSk7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5leHBhbnNpb25TdGF0ZXMgPSBleHBhbnNpb25TdGF0ZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJvd0lzbGFuZHM6IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZShjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEdyaWRTdGF0ZXM6IElHcmlkU3RhdGVDb2xsZWN0aW9uW10gPSBbXTtcbiAgICAgICAgICAgICAgICBjb25zdCByb3dJc2xhbmRzID0gKGNvbnRleHQuY3VyckdyaWQgYXMgYW55KS5hbGxMYXlvdXRMaXN0O1xuICAgICAgICAgICAgICAgIGlmIChyb3dJc2xhbmRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd0lzbGFuZHMuZm9yRWFjaChyb3dJc2xhbmQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRHcmlkcyA9IHJvd0lzbGFuZC5yb3dJc2xhbmRBUEkuZ2V0Q2hpbGRHcmlkcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRHcmlkcy5mb3JFYWNoKGNoR3JpZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50Um93SUQgPSB0aGlzLmdldFBhcmVudFJvd0lEKGNoR3JpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZCA9IGNoR3JpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5jdXJyR3JpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEdyaWRTdGF0ZSA9IGNvbnRleHQuYnVpbGRTdGF0ZShjb250ZXh0LmZlYXR1cmVLZXlzKSBhcyBJR3JpZFN0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEdyaWRTdGF0ZXMucHVzaCh7IGlkOiBgJHtyb3dJc2xhbmQuaWR9YCwgcGFyZW50Um93SUQsIHN0YXRlOiBjaGlsZEdyaWRTdGF0ZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQgPSBjb250ZXh0LmdyaWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcm93SXNsYW5kczogY2hpbGRHcmlkU3RhdGVzIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZShjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgICAgICAgICBjb25zdCByb3dJc2xhbmRzID0gKGNvbnRleHQuY3VyckdyaWQgYXMgYW55KS5hbGxMYXlvdXRMaXN0O1xuICAgICAgICAgICAgICAgIGlmIChyb3dJc2xhbmRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd0lzbGFuZHMuZm9yRWFjaChyb3dJc2xhbmQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRHcmlkcyA9IHJvd0lzbGFuZC5yb3dJc2xhbmRBUEkuZ2V0Q2hpbGRHcmlkcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRHcmlkcy5mb3JFYWNoKGNoR3JpZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50Um93SUQgPSB0aGlzLmdldFBhcmVudFJvd0lEKGNoR3JpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZCA9IGNoR3JpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEdyaWRTdGF0ZSA9IHN0YXRlLmZpbmQoc3QgPT4gc3QuaWQgPT09IHJvd0lzbGFuZC5pZCAmJiBzdC5wYXJlbnRSb3dJRCA9PT0gcGFyZW50Um93SUQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZEdyaWRTdGF0ZSAmJiBjb250ZXh0LmN1cnJHcmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVzdG9yZUdyaWRTdGF0ZShjaGlsZEdyaWRTdGF0ZS5zdGF0ZSwgY29udGV4dC5mZWF0dXJlS2V5cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkID0gY29udGV4dC5ncmlkO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVHJhdmVyc2VzIHRoZSBoaWVyYXJjaHkgdXAgdG8gdGhlIHJvb3QgZ3JpZCB0byByZXR1cm4gdGhlIElEIG9mIHRoZSBleHBhbmRlZCByb3cuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGdldFBhcmVudFJvd0lEOiAoZ3JpZDogSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBjaGlsZEdyaWQ7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGdyaWQucGFyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkR3JpZCA9IGdyaWQ7XG4gICAgICAgICAgICAgICAgICAgIGdyaWQgPSBncmlkLnBhcmVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdyaWQuZ3JpZEFQSS5nZXRQYXJlbnRSb3dJZChjaGlsZEdyaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBwaXZvdENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZShjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25maWcgPSAoY29udGV4dC5jdXJyR3JpZCBhcyBJZ3hQaXZvdEdyaWRDb21wb25lbnQpLnBpdm90Q29uZmlndXJhdGlvbjtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbmZpZyB8fCAhKGNvbnRleHQuY3VyckdyaWQgaW5zdGFuY2VvZiBJZ3hQaXZvdEdyaWRDb21wb25lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHBpdm90Q29uZmlndXJhdGlvbjogdW5kZWZpbmVkIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZ0NvcHkgPSBjbG9uZVZhbHVlKGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgY29uZmlnQ29weS5yb3dzID0gY2xvbmVBcnJheShjb25maWcucm93cywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgY29uZmlnQ29weS5jb2x1bW5zID0gY2xvbmVBcnJheShjb25maWcuY29sdW1ucywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgY29uZmlnQ29weS5maWx0ZXJzID0gY2xvbmVBcnJheShjb25maWcuZmlsdGVycywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGltcyA9ICBbLi4uKGNvbmZpZ0NvcHkucm93cyB8fCBbXSksIC4uLihjb25maWdDb3B5LmNvbHVtbnMgfHwgW10pLCAuLi4oY29uZmlnQ29weS5maWx0ZXJzIHx8IFtdKV07XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZURpbWVuc2lvbnMgPSBkaW1zLmZpbHRlcih4ID0+IGNvbnRleHQuaXNEYXRlRGltZW5zaW9uKHgpKTtcbiAgICAgICAgICAgICAgICBkYXRlRGltZW5zaW9ucz8uZm9yRWFjaChkaW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBkbyBub3Qgc2VyaWFsaXplIHRoZSBncmlkIHJlc291cmNlIHN0cmluZ3MuIFRoaXMgd291bGQgcG9sbHV0ZSB0aGUgb2JqZWN0IHdpdGggdW5uZWNlc3NhcnkgZGF0YS5cbiAgICAgICAgICAgICAgICAgICAgKGRpbSBhcyBJZ3hQaXZvdERhdGVEaW1lbnNpb24pLnJlc291cmNlU3RyaW5ncyA9IHt9O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHBpdm90Q29uZmlndXJhdGlvbjogY29uZmlnQ29weSB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGUoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCBzdGF0ZTogYW55KTogdm9pZCB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29uZmlnOiBJUGl2b3RDb25maWd1cmF0aW9uID0gc3RhdGU7XG4gICAgICAgICAgICAgICAgaWYgKCFjb25maWcgfHwgIShjb250ZXh0LmN1cnJHcmlkIGluc3RhbmNlb2YgSWd4UGl2b3RHcmlkQ29tcG9uZW50KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRleHQucmVzdG9yZVZhbHVlcyhjb25maWcsIGNvbnRleHQuY3VyckdyaWQgYXMgSWd4UGl2b3RHcmlkQ29tcG9uZW50KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnJlc3RvcmVEaW1lbnNpb25zKGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgKGNvbnRleHQuY3VyckdyaWQgYXMgSWd4UGl2b3RHcmlkQ29tcG9uZW50KS5waXZvdENvbmZpZ3VyYXRpb24gPSBjb25maWc7XG4gICAgICAgICAgICB9LFxuXG5cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiAgRXZlbnQgZW1pdHRlZCB3aGVuIHNldCBzdGF0ZSBpcyBjYWxsZWQgd2l0aCBhIHN0cmluZy5cbiAgICAgKiBSZXR1cm5zIHRoZSBwYXJzZWQgc3RhdGUgb2JqZWN0IHNvIHRoYXQgaXQgY2FuIGJlIGZ1cnRoZXIgbW9kaWZpZWQgYmVmb3JlIGFwcGx5aW5nIHRvIHRoZSBncmlkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLnN0YXRlLnN0YXRlUGFyc2VkLnN1YnNjcmliZShwYXJzZWRTdGF0ZSA9PiBwYXJzZWRTdGF0ZS5zb3J0aW5nLmZvckVhY2goeCA9PiB4LnN0cmF0ZWd5ID0gTm9vcFNvcnRpbmdTdHJhdGVneS5pbnN0YW5jZSgpfSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHN0YXRlUGFyc2VkID0gbmV3IEV2ZW50RW1pdHRlcjxJR3JpZFN0YXRlPigpO1xuXG4gICAgLyoqXG4gICAgICogIEFuIG9iamVjdCB3aXRoIG9wdGlvbnMgZGV0ZXJtaW5pbmcgaWYgYSBjZXJ0YWluIGZlYXR1cmUgc3RhdGUgc2hvdWxkIGJlIHNhdmVkLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWdyaWQgW2lneEdyaWRTdGF0ZV09XCJvcHRpb25zXCI+PC9pZ3gtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogcHVibGljIG9wdGlvbnMgPSB7c2VsZWN0aW9uOiBmYWxzZSwgYWR2YW5jZWRGaWx0ZXJpbmc6IGZhbHNlfTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoJ2lneEdyaWRTdGF0ZScpXG4gICAgcHVibGljIGdldCBvcHRpb25zKCk6IElHcmlkU3RhdGVPcHRpb25zIHtcbiAgICAgICByZXR1cm4gdGhpcy5fb3B0aW9ucztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IG9wdGlvbnModmFsdWU6IElHcmlkU3RhdGVPcHRpb25zKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5fb3B0aW9ucywgdmFsdWUpO1xuICAgICAgICBpZiAoISh0aGlzLmdyaWQgaW5zdGFuY2VvZiBJZ3hHcmlkQ29tcG9uZW50KSkge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX29wdGlvbnMuZ3JvdXBCeTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9vcHRpb25zLnJvd0lzbGFuZHM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBIb3N0KCkgQE9wdGlvbmFsKCkgQEluamVjdChJR1hfR1JJRF9CQVNFKSBwdWJsaWMgZ3JpZDogR3JpZFR5cGUsXG4gICAgICAgIHByaXZhdGUgdmlld1JlZjogVmlld0NvbnRhaW5lclJlZiwgcHJpdmF0ZSBlbnZJbmplY3RvcjogRW52aXJvbm1lbnRJbmplY3RvciwgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yKSB7IH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHN0YXRlIG9mIGEgZmVhdHVyZSBvciBzdGF0ZXMgb2YgYWxsIGdyaWQgZmVhdHVyZXMsIHVubGVzcyBhIGNlcnRhaW4gZmVhdHVyZSBpcyBkaXNhYmxlZCB0aHJvdWdoIHRoZSBgb3B0aW9uc2AgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYHNlcmlhbGl6ZWAgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSByZXR1cm5lZCBvYmplY3Qgd2lsbCBiZSBzZXJpYWxpemVkIHRvIEpTT04gc3RyaW5nLiBEZWZhdWx0IHZhbHVlIGlzIHRydWUuXG4gICAgICogQHBhcmFtIGBmZWF0dXJlYCBzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncyBkZXRlcm1pbmluZyB0aGUgZmVhdHVyZXMgdG8gYmUgYWRkZWQgaW4gdGhlIHN0YXRlLiBJZiBza2lwcGVkLCBhbGwgZmVhdHVyZXMgYXJlIGFkZGVkLlxuICAgICAqIEByZXR1cm5zIFJldHVybnMgdGhlIHNlcmlhbGl6ZWQgdG8gSlNPTiBzdHJpbmcgSUdyaWRTdGF0ZSBvYmplY3QsIG9yIHRoZSBub24tc2VyaWFsaXplZCBJR3JpZFN0YXRlIG9iamVjdC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1ncmlkIFtpZ3hHcmlkU3RhdGVdPVwib3B0aW9uc1wiPjwvaWd4LWdyaWQ+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSBwdWJsaWMgc3RhdGU7XG4gICAgICogbGV0IHN0YXRlID0gdGhpcy5zdGF0ZS5nZXRTdGF0ZSgpOyAvLyByZXR1cm5zIHN0cmluZ1xuICAgICAqIGxldCBzdGF0ZSA9IHRoaXMuc3RhdGUoZmFsc2UpIC8vIHJldHVybnMgYElHcmlkU3RhdGVgIG9iamVjdFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRTdGF0ZShzZXJpYWxpemUgPSB0cnVlLCBmZWF0dXJlcz86IEdyaWRGZWF0dXJlcyB8IEdyaWRGZWF0dXJlc1tdKTogSUdyaWRTdGF0ZSB8IHN0cmluZyAge1xuICAgICAgICBsZXQgc3RhdGU6IElHcmlkU3RhdGUgfCBzdHJpbmc7XG4gICAgICAgIHRoaXMuY3VyckdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZSA9IHRoaXMuYnVpbGRTdGF0ZShmZWF0dXJlcykgYXMgSUdyaWRTdGF0ZTtcbiAgICAgICAgaWYgKHNlcmlhbGl6ZSkge1xuICAgICAgICAgICAgc3RhdGUgPSBKU09OLnN0cmluZ2lmeShzdGF0ZSwgdGhpcy5zdHJpbmdpZnlDYWxsYmFjaykgYXMgc3RyaW5nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXN0b3JlcyBncmlkIGZlYXR1cmVzJyBzdGF0ZSBiYXNlZCBvbiB0aGUgSUdyaWRTdGF0ZSBvYmplY3QgcGFzc2VkIGFzIGFuIGFyZ3VtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIElHcmlkU3RhdGUgb2JqZWN0IHRvIHJlc3RvcmUgc3RhdGUgZnJvbS5cbiAgICAgKiBAcmV0dXJuc1xuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWdyaWQgW2lneEdyaWRTdGF0ZV09XCJvcHRpb25zXCI+PC9pZ3gtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIHB1YmxpYyBzdGF0ZTtcbiAgICAgKiB0aGlzLnN0YXRlLnNldFN0YXRlKGdyaWRTdGF0ZSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldFN0YXRlKHN0YXRlOiBJR3JpZFN0YXRlIHwgc3RyaW5nLCBmZWF0dXJlcz86IEdyaWRGZWF0dXJlcyB8IEdyaWRGZWF0dXJlc1tdKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEpTT04ucGFyc2Uoc3RhdGUpIGFzIElHcmlkU3RhdGU7XG4gICAgICAgICAgICB0aGlzLnN0YXRlUGFyc2VkLmVtaXQoc3RhdGUpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICB0aGlzLmN1cnJHcmlkID0gdGhpcy5ncmlkO1xuICAgICAgICB0aGlzLnJlc3RvcmVHcmlkU3RhdGUoc3RhdGUsIGZlYXR1cmVzKTtcbiAgICAgICAgdGhpcy5ncmlkLmNkci5kZXRlY3RDaGFuZ2VzKCk7IC8vIFRPRE9cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCdWlsZHMgYW4gSUdyaWRTdGF0ZSBvYmplY3QuXG4gICAgICovXG4gICAgcHJpdmF0ZSBidWlsZFN0YXRlKGtleXM/OiBHcmlkRmVhdHVyZXMgfCBHcmlkRmVhdHVyZXNbXSk6IElHcmlkU3RhdGUge1xuICAgICAgICB0aGlzLmFwcGx5RmVhdHVyZXMoa2V5cyk7XG4gICAgICAgIGxldCBncmlkU3RhdGUgPSB7fSBhcyBJR3JpZFN0YXRlO1xuICAgICAgICB0aGlzLmZlYXR1cmVLZXlzLmZvckVhY2goZiA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zW2ZdKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEodGhpcy5ncmlkIGluc3RhbmNlb2YgSWd4R3JpZENvbXBvbmVudCkgJiYgZiA9PT0gJ2dyb3VwQnknKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZmVhdHVyZSA9IHRoaXMuZ2V0RmVhdHVyZShmKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlU3RhdGU6IElHcmlkU3RhdGUgPSBmZWF0dXJlLmdldEZlYXR1cmVTdGF0ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICBncmlkU3RhdGUgPSBPYmplY3QuYXNzaWduKGdyaWRTdGF0ZSwgZmVhdHVyZVN0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBncmlkU3RhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG1ldGhvZCB0aGF0IGNhbGxzIGNvcnJlc3BvbmRpbmcgbWV0aG9kcyB0byByZXN0b3JlIGZlYXR1cmVzIGZyb20gdGhlIHBhc3NlZCBJR3JpZFN0YXRlIG9iamVjdC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlc3RvcmVHcmlkU3RhdGUoc3RhdGU6IElHcmlkU3RhdGUsIGZlYXR1cmVzPzogR3JpZEZlYXR1cmVzIHwgR3JpZEZlYXR1cmVzW10pIHtcbiAgICAgICAgdGhpcy5hcHBseUZlYXR1cmVzKGZlYXR1cmVzKTtcbiAgICAgICAgdGhpcy5yZXN0b3JlRmVhdHVyZXMoc3RhdGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzdG9yZUZlYXR1cmVzKHN0YXRlOiBJR3JpZFN0YXRlKSB7XG4gICAgICAgIHRoaXMuZmVhdHVyZUtleXMuZm9yRWFjaChmID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnNbZl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlU3RhdGUgPSBzdGF0ZVtmXTtcbiAgICAgICAgICAgICAgICBpZiAoZiA9PT0gJ21vdmluZycgfHwgZmVhdHVyZVN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZlYXR1cmUgPSB0aGlzLmdldEZlYXR1cmUoZik7XG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmUucmVzdG9yZUZlYXR1cmVTdGF0ZSh0aGlzLCBmZWF0dXJlU3RhdGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGNvbGxlY3Rpb24gb2YgYWxsIGdyaWQgZmVhdHVyZXMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBhcHBseUZlYXR1cmVzKGtleXM/OiBHcmlkRmVhdHVyZXMgfCBHcmlkRmVhdHVyZXNbXSkge1xuICAgICAgICB0aGlzLmZlYXR1cmVLZXlzID0gW107XG4gICAgICAgIGlmICgha2V5cykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5vcHRpb25zKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZUtleXMucHVzaChrZXkgYXMgR3JpZEZlYXR1cmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGtleXMpKSB7XG4gICAgICAgICAgICB0aGlzLmZlYXR1cmVLZXlzID0gWy4uLmtleXMgYXMgR3JpZEZlYXR1cmVzW11dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mZWF0dXJlS2V5cy5wdXNoKGtleXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgcmVzdG9yZXMgY29tcGxleCBvYmplY3RzIGluIHRoZSBwaXZvdCBkaW1lbnNpb25zXG4gICAgICogTGlrZSB0aGUgSWd4UGl2b3REYXRlRGltZW5zaW9uIGFuZCBmaWx0ZXJzLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVzdG9yZURpbWVuc2lvbnMoY29uZmlnOiBJUGl2b3RDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb25zID0gW2NvbmZpZy5yb3dzLCBjb25maWcuY29sdW1ucywgY29uZmlnLmZpbHRlcnNdO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbGxlY3Rpb24gb2YgY29sbGVjdGlvbnMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjb2xsZWN0aW9uPy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaW0gPSBjb2xsZWN0aW9uW2luZGV4XTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0RhdGVEaW1lbnNpb24oZGltKSkge1xuICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdG9yZURhdGVEaW1lbnNpb24oZGltIGFzIElneFBpdm90RGF0ZURpbWVuc2lvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHJlc3RvcmUgY29tcGxleCBmaWx0ZXJzXG4gICAgICAgICAgICAgICAgaWYgKGRpbS5maWx0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGltLmZpbHRlciA9IHRoaXMuY3JlYXRlRXhwcmVzc2lvbnNUcmVlRnJvbU9iamVjdChkaW0uZmlsdGVyIGFzIEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCByZXN0b3JlcyB0aGUgSWd4UGl2b3REYXRlRGltZW5zaW9uIHdpdGggaXRzIGRlZmF1bHQgZnVuY3Rpb25zIGFuZCByZXNvdXJjZSBzdHJpbmdzLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVzdG9yZURhdGVEaW1lbnNpb24oZGltOiBJZ3hQaXZvdERhdGVEaW1lbnNpb24pIHtcbiAgICAgICAgY29uc3QgZGF0ZURpbSA9IG5ldyBJZ3hQaXZvdERhdGVEaW1lbnNpb24oKGRpbSBhcyBhbnkpLl9iYXNlRGltZW5zaW9uLCAoZGltIGFzIGFueSkuX29wdGlvbnMpO1xuICAgICAgICAvLyByZXN0b3JlIGZ1bmN0aW9ucyBhbmQgcmVzb3VyY2Ugc3RyaW5nc1xuICAgICAgICBkaW0ucmVzb3VyY2VTdHJpbmdzID0gZGF0ZURpbS5yZXNvdXJjZVN0cmluZ3M7XG4gICAgICAgIGRpbS5tZW1iZXJGdW5jdGlvbiA9IGRhdGVEaW0ubWVtYmVyRnVuY3Rpb247XG4gICAgICAgIGxldCBjdXJyRGltOiBJUGl2b3REaW1lbnNpb24gPSBkaW07XG4gICAgICAgIGxldCBvcmlnaW5EaW06IElQaXZvdERpbWVuc2lvbiA9IGRhdGVEaW07XG4gICAgICAgIHdoaWxlIChjdXJyRGltLmNoaWxkTGV2ZWwpIHtcbiAgICAgICAgICAgIGN1cnJEaW0gPSBjdXJyRGltLmNoaWxkTGV2ZWw7XG4gICAgICAgICAgICBvcmlnaW5EaW0gPSBvcmlnaW5EaW0uY2hpbGRMZXZlbDtcbiAgICAgICAgICAgIGN1cnJEaW0ubWVtYmVyRnVuY3Rpb24gPSBvcmlnaW5EaW0ubWVtYmVyRnVuY3Rpb247XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGlmIHRoaXMgaXMgYSBJZ3hQaXZvdERhdGVEaW1lbnNpb24uXG4gICAgICovXG4gICAgcHJpdmF0ZSBpc0RhdGVEaW1lbnNpb24oZGltOiBJUGl2b3REaW1lbnNpb24pIHtcbiAgICAgICAgcmV0dXJuIChkaW0gYXMgYW55KS5fYmFzZURpbWVuc2lvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCByZXN0b3JlcyBjb21wbGV4IG9iamVjdHMgaW4gdGhlIHBpdm90IHZhbHVlcy5cbiAgICAgKiBMaWtlIHRoZSBkZWZhdWx0IGFnZ3JlZ2F0b3IgbWV0aG9kcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlc3RvcmVWYWx1ZXMoY29uZmlnOiBJUGl2b3RDb25maWd1cmF0aW9uLCBncmlkOiBJZ3hQaXZvdEdyaWRDb21wb25lbnQpIHtcbiAgICAgICAgLy8gcmVzdG9yZSBhZ2dyZWdhdG9yIGZ1bmMgaWYgaXQgbWF0Y2hlcyB0aGUgZGVmYXVsdCBhZ2dyZWdhdG9ycyBrZXkgYW5kIGxhYmVsXG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGNvbmZpZy52YWx1ZXM7XG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICBjb25zdCBhZ2dyZWdhdGVMaXN0ID0gdmFsdWUuYWdncmVnYXRlTGlzdDtcbiAgICAgICAgICAgIGNvbnN0IGFnZ3JlZ2F0b3JzID0gUGl2b3RVdGlsLmdldEFnZ3JlZ2F0b3JzRm9yVmFsdWUodmFsdWUsIGdyaWQpO1xuICAgICAgICAgICAgdmFsdWUuYWdncmVnYXRlLmFnZ3JlZ2F0b3IgPSBhZ2dyZWdhdG9ycy5maW5kKHggPT4geC5rZXkgPT09IHZhbHVlLmFnZ3JlZ2F0ZS5rZXkgJiYgeC5sYWJlbCA9PT0gdmFsdWUuYWdncmVnYXRlLmxhYmVsKT8uYWdncmVnYXRvcjtcbiAgICAgICAgICAgIGlmIChhZ2dyZWdhdGVMaXN0KSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBhZyBvZiBhZ2dyZWdhdGVMaXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGFnLmFnZ3JlZ2F0b3IgPSBhZ2dyZWdhdG9ycy5maW5kKHggPT4geC5rZXkgPT09IGFnLmtleSAmJiB4LmxhYmVsID09PSBhZy5sYWJlbCk/LmFnZ3JlZ2F0b3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgYnVpbGRzIGEgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlIGZyb20gYSBwcm92aWRlZCBvYmplY3QuXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVFeHByZXNzaW9uc1RyZWVGcm9tT2JqZWN0KGV4cHJUcmVlT2JqZWN0OiBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpOiBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUge1xuICAgICAgICBpZiAoIWV4cHJUcmVlT2JqZWN0IHx8ICFleHByVHJlZU9iamVjdC5maWx0ZXJpbmdPcGVyYW5kcykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBleHByZXNzaW9uc1RyZWUgPSBuZXcgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKGV4cHJUcmVlT2JqZWN0Lm9wZXJhdG9yLCBleHByVHJlZU9iamVjdC5maWVsZE5hbWUpO1xuXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBleHByVHJlZU9iamVjdC5maWx0ZXJpbmdPcGVyYW5kcykge1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgaXRlbSBpcyBhbiBleHByZXNzaW9ucyB0cmVlIG9yIGEgc2luZ2xlIGV4cHJlc3Npb24uXG4gICAgICAgICAgICBpZiAoKGl0ZW0gYXMgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKS5maWx0ZXJpbmdPcGVyYW5kcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1YlRyZWUgPSB0aGlzLmNyZWF0ZUV4cHJlc3Npb25zVHJlZUZyb21PYmplY3QoKGl0ZW0gYXMgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKSk7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbnNUcmVlLmZpbHRlcmluZ09wZXJhbmRzLnB1c2goc3ViVHJlZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cHIgPSBpdGVtIGFzIElGaWx0ZXJpbmdFeHByZXNzaW9uO1xuICAgICAgICAgICAgICAgIGxldCBkYXRhVHlwZTogc3RyaW5nO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJHcmlkIGluc3RhbmNlb2YgSWd4UGl2b3RHcmlkQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlID0gdGhpcy5jdXJyR3JpZC5hbGxEaW1lbnNpb25zLmZpbmQoeCA9PiB4Lm1lbWJlck5hbWUgPT09IGV4cHIuZmllbGROYW1lKS5kYXRhVHlwZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY3VyckdyaWQuY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlID0gdGhpcy5jdXJyR3JpZC5jb2x1bW5zLmZpbmQoYyA9PiBjLmZpZWxkID09PSBleHByLmZpZWxkTmFtZSkuZGF0YVR5cGU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlLmNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGUgPSB0aGlzLnN0YXRlLmNvbHVtbnMuZmluZChjID0+IGMuZmllbGQgPT09IGV4cHIuZmllbGROYW1lKS5kYXRhVHlwZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gd2hlbiBFU0YsIHZhbHVlcyBhcmUgc3RvcmVkIGluIFNldC5cbiAgICAgICAgICAgICAgICAvLyBGaXJzdCB0aG9zZSB2YWx1ZXMgYXJlIGNvbnZlcnRlZCB0byBhbiBhcnJheSBiZWZvcmUgcmV0dXJuaW5nIHN0cmluZyBpbiB0aGUgc3RyaW5naWZ5Q2FsbGJhY2tcbiAgICAgICAgICAgICAgICAvLyBub3cgd2UgbmVlZCB0byBjb252ZXJ0IHRob3NlIGJhY2sgdG8gU2V0XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXhwci5zZWFyY2hWYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cHIuc2VhcmNoVmFsID0gbmV3IFNldChleHByLnNlYXJjaFZhbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwci5zZWFyY2hWYWwgPSBleHByLnNlYXJjaFZhbCAmJiAoZGF0YVR5cGUgPT09ICdkYXRlJyB8fCBkYXRhVHlwZSA9PT0gJ2RhdGVUaW1lJykgPyBuZXcgRGF0ZShEYXRlLnBhcnNlKGV4cHIuc2VhcmNoVmFsKSkgOiBleHByLnNlYXJjaFZhbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBjb25kaXRpb24gPSB0aGlzLmdlbmVyYXRlRmlsdGVyaW5nQ29uZGl0aW9uKGRhdGFUeXBlLCBleHByLmNvbmRpdGlvbi5uYW1lKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJHcmlkLmNvbHVtbnMuZmluZChjID0+IGMuZmllbGQgPT09IGV4cHIuZmllbGROYW1lKS5maWx0ZXJzLmNvbmRpdGlvbihleHByLmNvbmRpdGlvbi5uYW1lKTtcblxuICAgICAgICAgICAgICAgIGlmIChjb25kaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwci5jb25kaXRpb24gPSBjb25kaXRpb247XG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5wdXNoKGV4cHIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleHByZXNzaW9uc1RyZWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZmlsdGVyaW5nIGxvZ2ljIGZ1bmN0aW9uIGZvciBhIGdpdmVuIGRhdGFUeXBlIGFuZCBjb25kaXRpb24gKGNvbnRhaW5zLCBncmVhdGVyVGhhbiwgZXRjLilcbiAgICAgKi9cbiAgICBwcml2YXRlIGdlbmVyYXRlRmlsdGVyaW5nQ29uZGl0aW9uKGRhdGFUeXBlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IElGaWx0ZXJpbmdPcGVyYXRpb24ge1xuICAgICAgICBsZXQgZmlsdGVycztcbiAgICAgICAgc3dpdGNoIChkYXRhVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuQm9vbGVhbjpcbiAgICAgICAgICAgICAgICBmaWx0ZXJzID0gSWd4Qm9vbGVhbkZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLk51bWJlcjpcbiAgICAgICAgICAgICAgICBmaWx0ZXJzID0gSWd4TnVtYmVyRmlsdGVyaW5nT3BlcmFuZC5pbnN0YW5jZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZTpcbiAgICAgICAgICAgICAgICBmaWx0ZXJzID0gSWd4RGF0ZUZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLkRhdGVUaW1lOlxuICAgICAgICAgICAgICAgIGZpbHRlcnMgPSBJZ3hEYXRlVGltZUZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLlN0cmluZzpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgZmlsdGVycyA9IElneFN0cmluZ0ZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsdGVycy5jb25kaXRpb24obmFtZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdHJpbmdpZnlDYWxsYmFjayhrZXk6IHN0cmluZywgdmFsOiBhbnkpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ3NlYXJjaFZhbCcgJiYgdmFsIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh2YWwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGZWF0dXJlKGtleTogc3RyaW5nKTogRmVhdHVyZSB7XG4gICAgICAgIGNvbnN0IGZlYXR1cmU6IEZlYXR1cmUgPSB0aGlzLkZFQVRVUkVTW2tleV07XG4gICAgICAgIHJldHVybiBmZWF0dXJlO1xuICAgIH1cbn1cbiJdfQ==
635
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL2dyaWRzL3N0YXRlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFvQixNQUFNLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQWlDLE1BQU0sZUFBZSxDQUFDO0FBQ2pLLE9BQU8sRUFBRSx3QkFBd0IsRUFBNkIsTUFBTSwrQ0FBK0MsQ0FBQztBQUVwSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUczRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQ0gsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUsdUJBQXVCLEVBQzlFLHlCQUF5QixFQUF1QiwyQkFBMkIsRUFDOUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUdoRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUl6RCxPQUFPLEVBQVksYUFBYSxFQUFrQixNQUFNLHlCQUF5QixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRTFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFtRnZELE1BQU0sT0FBTyxxQkFBcUI7SUErVTlCOzs7Ozs7OztPQVFHO0lBQ0gsSUFDVyxPQUFPO1FBQ2YsT0FBTyxJ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SSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLGFBQWE7aUlBN0J0QyxXQUFXO3NCQURqQixNQUFNO2dCQWFJLE9BQU87c0JBRGpCLEtBQUs7dUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgT3B0aW9uYWwsIElucHV0LCBIb3N0LCBWaWV3Q29udGFpbmVyUmVmLCBJbmplY3QsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBjcmVhdGVDb21wb25lbnQsIEVudmlyb25tZW50SW5qZWN0b3IsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUsIElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWV4cHJlc3Npb25zLXRyZWUnO1xuaW1wb3J0IHsgSUZpbHRlcmluZ0V4cHJlc3Npb24gfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWV4cHJlc3Npb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IElneENvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4vY29sdW1ucy9jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IElneENvbHVtbkdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi9jb2x1bW5zL2NvbHVtbi1ncm91cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSUdyb3VwaW5nRXhwcmVzc2lvbiB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9ncm91cGluZy1leHByZXNzaW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJUGFnaW5nU3RhdGUgfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvcGFnaW5nLXN0YXRlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBHcmlkQ29sdW1uRGF0YVR5cGUgfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvZGF0YS11dGlsJztcbmltcG9ydCB7XG4gICAgSWd4Qm9vbGVhbkZpbHRlcmluZ09wZXJhbmQsIElneE51bWJlckZpbHRlcmluZ09wZXJhbmQsIElneERhdGVGaWx0ZXJpbmdPcGVyYW5kLFxuICAgIElneFN0cmluZ0ZpbHRlcmluZ09wZXJhbmQsIElGaWx0ZXJpbmdPcGVyYXRpb24sIElneERhdGVUaW1lRmlsdGVyaW5nT3BlcmFuZFxufSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWNvbmRpdGlvbic7XG5pbXBvcnQgeyBJR3JvdXBCeUV4cGFuZFN0YXRlIH0gZnJvbSAnLi4vZGF0YS1vcGVyYXRpb25zL2dyb3VwYnktZXhwYW5kLXN0YXRlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJR3JvdXBpbmdTdGF0ZSB9IGZyb20gJy4uL2RhdGEtb3BlcmF0aW9ucy9ncm91cGJ5LXN0YXRlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJZ3hHcmlkQ29tcG9uZW50IH0gZnJvbSAnLi9ncmlkL2dyaWQuY29tcG9uZW50JztcbmltcG9ydCB7IElneEhpZXJhcmNoaWNhbEdyaWRDb21wb25lbnQgfSBmcm9tICcuL2hpZXJhcmNoaWNhbC1ncmlkL2hpZXJhcmNoaWNhbC1ncmlkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHcmlkU2VsZWN0aW9uUmFuZ2UgfSBmcm9tICcuL2NvbW1vbi90eXBlcyc7XG5pbXBvcnQgeyBJU29ydGluZ0V4cHJlc3Npb24gfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvc29ydGluZy1zdHJhdGVneSc7XG5pbXBvcnQgeyBHcmlkVHlwZSwgSUdYX0dSSURfQkFTRSwgSVBpbm5pbmdDb25maWcgfSBmcm9tICcuL2NvbW1vbi9ncmlkLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJZ3hQaXZvdEdyaWRDb21wb25lbnQgfSBmcm9tICcuL3Bpdm90LWdyaWQvcGl2b3QtZ3JpZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSVBpdm90Q29uZmlndXJhdGlvbiwgSVBpdm90RGltZW5zaW9uIH0gZnJvbSAnLi9waXZvdC1ncmlkL3Bpdm90LWdyaWQuaW50ZXJmYWNlJ1xuaW1wb3J0IHsgUGl2b3RVdGlsIH0gZnJvbSAnLi9waXZvdC1ncmlkL3Bpdm90LXV0aWwnO1xuaW1wb3J0IHsgSWd4UGl2b3REYXRlRGltZW5zaW9uIH0gZnJvbSAnLi9waXZvdC1ncmlkL3Bpdm90LWdyaWQtZGltZW5zaW9ucyc7XG5pbXBvcnQgeyBjbG9uZUFycmF5LCBjbG9uZVZhbHVlIH0gZnJvbSAnLi4vY29yZS91dGlscyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUdyaWRTdGF0ZSB7XG4gICAgY29sdW1ucz86IElDb2x1bW5TdGF0ZVtdO1xuICAgIGZpbHRlcmluZz86IElGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU7XG4gICAgYWR2YW5jZWRGaWx0ZXJpbmc/OiBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlO1xuICAgIHBhZ2luZz86IElQYWdpbmdTdGF0ZTtcbiAgICBtb3Zpbmc/OiBib29sZWFuO1xuICAgIHNvcnRpbmc/OiBJU29ydGluZ0V4cHJlc3Npb25bXTtcbiAgICBncm91cEJ5PzogSUdyb3VwaW5nU3RhdGU7XG4gICAgY2VsbFNlbGVjdGlvbj86IEdyaWRTZWxlY3Rpb25SYW5nZVtdO1xuICAgIHJvd1NlbGVjdGlvbj86IGFueVtdO1xuICAgIGNvbHVtblNlbGVjdGlvbj86IHN0cmluZ1tdO1xuICAgIHJvd1Bpbm5pbmc/OiBhbnlbXTtcbiAgICBwaW5uaW5nQ29uZmlnPzogSVBpbm5pbmdDb25maWc7XG4gICAgZXhwYW5zaW9uPzogYW55W107XG4gICAgcm93SXNsYW5kcz86IElHcmlkU3RhdGVDb2xsZWN0aW9uW107XG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgcGl2b3RDb25maWd1cmF0aW9uPzogSVBpdm90Q29uZmlndXJhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJR3JpZFN0YXRlQ29sbGVjdGlvbiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBwYXJlbnRSb3dJRDogYW55O1xuICAgIHN0YXRlOiBJR3JpZFN0YXRlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElHcmlkU3RhdGVPcHRpb25zIHtcbiAgICBjb2x1bW5zPzogYm9vbGVhbjtcbiAgICBmaWx0ZXJpbmc/OiBib29sZWFuO1xuICAgIGFkdmFuY2VkRmlsdGVyaW5nPzogYm9vbGVhbjtcbiAgICBzb3J0aW5nPzogYm9vbGVhbjtcbiAgICBncm91cEJ5PzogYm9vbGVhbjtcbiAgICBwYWdpbmc/OiBib29sZWFuO1xuICAgIGNlbGxTZWxlY3Rpb24/OiBib29sZWFuO1xuICAgIHJvd1NlbGVjdGlvbj86IGJvb2xlYW47XG4gICAgY29sdW1uU2VsZWN0aW9uPzogYm9vbGVhbjtcbiAgICByb3dQaW5uaW5nPzogYm9vbGVhbjtcbiAgICBwaW5uaW5nQ29uZmlnPzogYm9vbGVhbjtcbiAgICBleHBhbnNpb24/OiBib29sZWFuO1xuICAgIHJvd0lzbGFuZHM/OiBib29sZWFuO1xuICAgIG1vdmluZz86IGJvb2xlYW47XG4gICAgcGl2b3RDb25maWd1cmF0aW9uPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ29sdW1uU3RhdGUge1xuICAgIHBpbm5lZDogYm9vbGVhbjtcbiAgICBzb3J0YWJsZTogYm9vbGVhbjtcbiAgICBmaWx0ZXJhYmxlOiBib29sZWFuO1xuICAgIGVkaXRhYmxlOiBib29sZWFuO1xuICAgIHNvcnRpbmdJZ25vcmVDYXNlOiBib29sZWFuO1xuICAgIGZpbHRlcmluZ0lnbm9yZUNhc2U6IGJvb2xlYW47XG4gICAgaGVhZGVyQ2xhc3Nlczogc3RyaW5nO1xuICAgIGhlYWRlckdyb3VwQ2xhc3Nlczogc3RyaW5nO1xuICAgIG1heFdpZHRoOiBzdHJpbmc7XG4gICAgZ3JvdXBhYmxlOiBib29sZWFuO1xuICAgIG1vdmFibGU6IGJvb2xlYW47XG4gICAgaGlkZGVuOiBib29sZWFuO1xuICAgIGRhdGFUeXBlOiBHcmlkQ29sdW1uRGF0YVR5cGU7XG4gICAgaGFzU3VtbWFyeTogYm9vbGVhbjtcbiAgICBmaWVsZDogc3RyaW5nO1xuICAgIHdpZHRoOiBhbnk7XG4gICAgaGVhZGVyOiBzdHJpbmc7XG4gICAgcmVzaXphYmxlOiBib29sZWFuO1xuICAgIHNlYXJjaGFibGU6IGJvb2xlYW47XG4gICAgY29sdW1uR3JvdXA6IGJvb2xlYW47XG4gICAgcGFyZW50OiBhbnk7XG4gICAgZGlzYWJsZUhpZGluZzogYm9vbGVhbjtcbiAgICBkaXNhYmxlUGlubmluZzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IHR5cGUgR3JpZEZlYXR1cmVzID0ga2V5b2YgSUdyaWRTdGF0ZU9wdGlvbnM7XG5cbmludGVyZmFjZSBGZWF0dXJlIHtcbiAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpID0+IElHcmlkU3RhdGU7XG4gICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IElDb2x1bW5TdGF0ZVtdIHwgSVBhZ2luZ1N0YXRlIHwgYm9vbGVhbiB8IElTb3J0aW5nRXhwcmVzc2lvbltdIHxcbiAgICAgICAgSUdyb3VwaW5nU3RhdGUgfCBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlIHwgR3JpZFNlbGVjdGlvblJhbmdlW10gfCBJUGlubmluZ0NvbmZpZyB8IElQaXZvdENvbmZpZ3VyYXRpb24gfCBhbnlbXSkgPT4gdm9pZDtcbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbaWd4R3JpZFN0YXRlXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUge1xuICAgIHByaXZhdGUgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX29wdGlvbnM6IElHcmlkU3RhdGVPcHRpb25zIHwgJyc7XG5cbiAgICBwcml2YXRlIGZlYXR1cmVLZXlzOiBHcmlkRmVhdHVyZXNbXSA9IFtdO1xuICAgIHByaXZhdGUgc3RhdGU6IElHcmlkU3RhdGU7XG4gICAgcHJpdmF0ZSBjdXJyR3JpZDogR3JpZFR5cGU7XG4gICAgcHJpdmF0ZSBfb3B0aW9uczogSUdyaWRTdGF0ZU9wdGlvbnMgPSB7XG4gICAgICAgIGNvbHVtbnM6IHRydWUsXG4gICAgICAgIGZpbHRlcmluZzogdHJ1ZSxcbiAgICAgICAgYWR2YW5jZWRGaWx0ZXJpbmc6IHRydWUsXG4gICAgICAgIHNvcnRpbmc6IHRydWUsXG4gICAgICAgIGdyb3VwQnk6IHRydWUsXG4gICAgICAgIHBhZ2luZzogdHJ1ZSxcbiAgICAgICAgY2VsbFNlbGVjdGlvbjogdHJ1ZSxcbiAgICAgICAgcm93U2VsZWN0aW9uOiB0cnVlLFxuICAgICAgICBjb2x1bW5TZWxlY3Rpb246IHRydWUsXG4gICAgICAgIHJvd1Bpbm5pbmc6IHRydWUsXG4gICAgICAgIGV4cGFuc2lvbjogdHJ1ZSxcbiAgICAgICAgbW92aW5nOiB0cnVlLFxuICAgICAgICByb3dJc2xhbmRzOiB0cnVlLFxuICAgICAgICBwaXZvdENvbmZpZ3VyYXRpb246IHRydWVcbiAgICB9O1xuICAgIHByaXZhdGUgRkVBVFVSRVMgPSB7XG4gICAgICAgIHNvcnRpbmc6ICB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzb3J0aW5nU3RhdGUgPSBjb250ZXh0LmN1cnJHcmlkLnNvcnRpbmdFeHByZXNzaW9ucztcbiAgICAgICAgICAgICAgICBzb3J0aW5nU3RhdGUuZm9yRWFjaChzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHMuc3RyYXRlZ3k7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzLm93bmVyO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHNvcnRpbmc6IHNvcnRpbmdTdGF0ZSB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBJU29ydGluZ0V4cHJlc3Npb25bXSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQuc29ydGluZ0V4cHJlc3Npb25zID0gc3RhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGZpbHRlcmluZzoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyaW5nU3RhdGUgPSBjb250ZXh0LmN1cnJHcmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZTtcbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyaW5nU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGZpbHRlcmluZ1N0YXRlLm93bmVyO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZmlsdGVyaW5nU3RhdGUuZmlsdGVyaW5nT3BlcmFuZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSAoaXRlbSBhcyBJRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKS5vd25lcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyBmaWx0ZXJpbmc6IGZpbHRlcmluZ1N0YXRlIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlclRyZWUgPSBjb250ZXh0LmNyZWF0ZUV4cHJlc3Npb25zVHJlZUZyb21PYmplY3Qoc3RhdGUpO1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlID0gZmlsdGVyVHJlZSBhcyBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGFkdmFuY2VkRmlsdGVyaW5nOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJpbmdTdGF0ZSA9IGNvbnRleHQuY3VyckdyaWQuYWR2YW5jZWRGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU7XG4gICAgICAgICAgICAgICAgbGV0IGFkdmFuY2VkRmlsdGVyaW5nOiBhbnk7XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlcmluZ1N0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBmaWx0ZXJpbmdTdGF0ZS5vd25lcjtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGZpbHRlcmluZ1N0YXRlLmZpbHRlcmluZ09wZXJhbmRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgKGl0ZW0gYXMgSUZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSkub3duZXI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYWR2YW5jZWRGaWx0ZXJpbmcgPSBmaWx0ZXJpbmdTdGF0ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhZHZhbmNlZEZpbHRlcmluZyA9IHt9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyBhZHZhbmNlZEZpbHRlcmluZyB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJUcmVlID0gY29udGV4dC5jcmVhdGVFeHByZXNzaW9uc1RyZWVGcm9tT2JqZWN0KHN0YXRlKTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlID0gZmlsdGVyVHJlZSBhcyBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNvbHVtbnM6IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyaWRDb2x1bW5zOiBJQ29sdW1uU3RhdGVbXSA9IGNvbnRleHQuY3VyckdyaWQuY29sdW1ucy5tYXAoKGMpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIHBpbm5lZDogYy5waW5uZWQsXG4gICAgICAgICAgICAgICAgICAgIHNvcnRhYmxlOiBjLnNvcnRhYmxlLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJhYmxlOiBjLmZpbHRlcmFibGUsXG4gICAgICAgICAgICAgICAgICAgIGVkaXRhYmxlOiBjLmVkaXRhYmxlLFxuICAgICAgICAgICAgICAgICAgICBzb3J0aW5nSWdub3JlQ2FzZTogYy5zb3J0aW5nSWdub3JlQ2FzZSxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyaW5nSWdub3JlQ2FzZTogYy5maWx0ZXJpbmdJZ25vcmVDYXNlLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJDbGFzc2VzOiBjLmhlYWRlckNsYXNzZXMsXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlckdyb3VwQ2xhc3NlczogYy5oZWFkZXJHcm91cENsYXNzZXMsXG4gICAgICAgICAgICAgICAgICAgIG1heFdpZHRoOiBjLm1heFdpZHRoLFxuICAgICAgICAgICAgICAgICAgICBncm91cGFibGU6IGMuZ3JvdXBhYmxlLFxuICAgICAgICAgICAgICAgICAgICBtb3ZhYmxlOiBjLm1vdmFibGUsXG4gICAgICAgICAgICAgICAgICAgIGhpZGRlbjogYy5oaWRkZW4sXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBjLmRhdGFUeXBlLFxuICAgICAgICAgICAgICAgICAgICBoYXNTdW1tYXJ5OiBjLmhhc1N1bW1hcnksXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBjLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogYy53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyOiBjLmhlYWRlcixcbiAgICAgICAgICAgICAgICAgICAgcmVzaXphYmxlOiBjLnJlc2l6YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoYWJsZTogYy5zZWFyY2hhYmxlLFxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RhYmxlOiBjLnNlbGVjdGFibGUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogYy5wYXJlbnQgPyBjLnBhcmVudC5oZWFkZXIgOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5Hcm91cDogYy5jb2x1bW5Hcm91cCxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUhpZGluZzogYy5kaXNhYmxlSGlkaW5nLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlUGlubmluZzogYy5kaXNhYmxlUGlubmluZ1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBjb2x1bW5zOiBncmlkQ29sdW1ucyB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBJQ29sdW1uU3RhdGVbXSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NvbHVtbnMgPSBbXTtcbiAgICAgICAgICAgICAgICBzdGF0ZS5mb3JFYWNoKChjb2xTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoYXNDb2x1bW5Hcm91cCA9IGNvbFN0YXRlLmNvbHVtbkdyb3VwO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgY29sU3RhdGUuY29sdW1uR3JvdXA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNDb2x1bW5Hcm91cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmMSA9IGNyZWF0ZUNvbXBvbmVudChJZ3hDb2x1bW5Hcm91cENvbXBvbmVudCwgeyBlbnZpcm9ubWVudEluamVjdG9yOiB0aGlzLmVudkluamVjdG9yLCBlbGVtZW50SW5qZWN0b3I6IHRoaXMuaW5qZWN0b3IgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHJlZjEuaW5zdGFuY2UsIGNvbFN0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZjEuaW5zdGFuY2UuZ3JpZCA9IGNvbnRleHQuY3VyckdyaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVmMS5pbnN0YW5jZS5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5Hcm91cDogSWd4Q29sdW1uR3JvdXBDb21wb25lbnQgPSBuZXdDb2x1bW5zLmZpbmQoZSA9PiBlLmhlYWRlciA9PT0gcmVmMS5pbnN0YW5jZS5wYXJlbnQgICYmIGUuY29sdW1uR3JvdXApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkdyb3VwLmNoaWxkcmVuLnJlc2V0KFsuLi5jb2x1bW5Hcm91cC5jaGlsZHJlbi50b0FycmF5KCksIHJlZjEuaW5zdGFuY2VdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWYxLmluc3RhbmNlLnBhcmVudCA9IGNvbHVtbkdyb3VwO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmMS5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDb2x1bW5zLnB1c2gocmVmMS5pbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWYgPSBjcmVhdGVDb21wb25lbnQoSWd4Q29sdW1uQ29tcG9uZW50LCB7IGVudmlyb25tZW50SW5qZWN0b3I6IHRoaXMuZW52SW5qZWN0b3IsIGVsZW1lbnRJbmplY3RvcjogdGhpcy5pbmplY3Rvcn0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihyZWYuaW5zdGFuY2UsIGNvbFN0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZi5pbnN0YW5jZS5ncmlkID0gY29udGV4dC5jdXJyR3JpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWYuaW5zdGFuY2UucGFyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sdW1uR3JvdXA6IElneENvbHVtbkdyb3VwQ29tcG9uZW50ID0gbmV3Q29sdW1ucy5maW5kKGUgPT4gZS5oZWFkZXIgPT09IHJlZi5pbnN0YW5jZS5wYXJlbnQgJiYgZS5jb2x1bW5Hcm91cCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbkdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZi5pbnN0YW5jZS5wYXJlbnQgPSBjb2x1bW5Hcm91cDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uR3JvdXAuY2hpbGRyZW4ucmVzZXQoWy4uLmNvbHVtbkdyb3VwLmNoaWxkcmVuLnRvQXJyYXkoKSwgcmVmLmluc3RhbmNlXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NvbHVtbnMucHVzaChyZWYuaW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC51cGRhdGVDb2x1bW5zKG5ld0NvbHVtbnMpO1xuICAgICAgICAgICAgICAgIG5ld0NvbHVtbnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgICAgICAgICAoY29udGV4dC5jdXJyR3JpZCBhcyBhbnkpLmNvbHVtbkluaXQuZW1pdChjb2wpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBncm91cEJ5OiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBncmlkID0gY29udGV4dC5jdXJyR3JpZCBhcyBJZ3hHcmlkQ29tcG9uZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwaW5nRXhwcmVzc2lvbnMgPSBncmlkLmdyb3VwaW5nRXhwcmVzc2lvbnM7XG4gICAgICAgICAgICAgICAgZ3JvdXBpbmdFeHByZXNzaW9ucy5mb3JFYWNoKGV4cHIgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgZXhwci5zdHJhdGVneTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBhbnNpb25TdGF0ZSA9IGdyaWQuZ3JvdXBpbmdFeHBhbnNpb25TdGF0ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBncm91cHNFeHBhbmRlZCA9IGdyaWQuZ3JvdXBzRXhwYW5kZWQ7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4geyBncm91cEJ5OiB7IGV4cHJlc3Npb25zOiBncm91cGluZ0V4cHJlc3Npb25zLCBleHBhbnNpb246IGV4cGFuc2lvblN0YXRlLCBkZWZhdWx0RXhwYW5kZWQ6IGdyb3Vwc0V4cGFuZGVkfSAgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCBzdGF0ZTogSUdyb3VwaW5nU3RhdGUpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBncmlkID0gY29udGV4dC5jdXJyR3JpZCBhcyBJZ3hHcmlkQ29tcG9uZW50O1xuICAgICAgICAgICAgICAgIGdyaWQuZ3JvdXBpbmdFeHByZXNzaW9ucyA9IHN0YXRlLmV4cHJlc3Npb25zIGFzIElHcm91cGluZ0V4cHJlc3Npb25bXTtcbiAgICAgICAgICAgICAgICBpZiAoZ3JpZC5ncm91cHNFeHBhbmRlZCAhPT0gc3RhdGUuZGVmYXVsdEV4cGFuZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGdyaWQudG9nZ2xlQWxsR3JvdXBSb3dzKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZ3JpZC5ncm91cGluZ0V4cGFuc2lvblN0YXRlID0gc3RhdGUuZXhwYW5zaW9uIGFzIElHcm91cEJ5RXhwYW5kU3RhdGVbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHBhZ2luZzoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFnaW5nU3RhdGUgPSBjb250ZXh0LmN1cnJHcmlkLnBhZ2luZ1N0YXRlO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHBhZ2luZzogcGFnaW5nU3RhdGUgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCBzdGF0ZTogSVBhZ2luZ1N0YXRlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LmN1cnJHcmlkLnBhZ2luYXRvcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LmN1cnJHcmlkLnBlclBhZ2UgIT09IHN0YXRlLnJlY29yZHNQZXJQYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQucGVyUGFnZSA9IHN0YXRlLnJlY29yZHNQZXJQYWdlO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQucGFnZSA9IHN0YXRlLmluZGV4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBtb3Zpbmc6IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSk6IElHcmlkU3RhdGUgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IG1vdmluZzogY29udGV4dC5jdXJyR3JpZC5tb3ZpbmcgfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCBzdGF0ZTogYm9vbGVhbik6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQubW92aW5nID0gc3RhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJvd1NlbGVjdGlvbjoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gY29udGV4dC5jdXJyR3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmdldFNlbGVjdGVkUm93cygpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHJvd1NlbGVjdGlvbjogc2VsZWN0aW9uIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IGFueVtdKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5zZWxlY3RSb3dzKHN0YXRlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY2VsbFNlbGVjdGlvbjoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gY29udGV4dC5jdXJyR3JpZC5nZXRTZWxlY3RlZFJhbmdlcygpLm1hcChyYW5nZSA9PlxuICAgICAgICAgICAgICAgICAgICAoeyByb3dTdGFydDogcmFuZ2Uucm93U3RhcnQsIHJvd0VuZDogcmFuZ2Uucm93RW5kLCBjb2x1bW5TdGFydDogcmFuZ2UuY29sdW1uU3RhcnQsIGNvbHVtbkVuZDogcmFuZ2UuY29sdW1uRW5kIH0pKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBjZWxsU2VsZWN0aW9uOiBzZWxlY3Rpb24gfTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCBzdGF0ZTogR3JpZFNlbGVjdGlvblJhbmdlW10pOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5mb3JFYWNoKHIgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByYW5nZSA9IHsgcm93U3RhcnQ6IHIucm93U3RhcnQsIHJvd0VuZDogci5yb3dFbmQsIGNvbHVtblN0YXJ0OiByLmNvbHVtblN0YXJ0LCBjb2x1bW5FbmQ6IHIuY29sdW1uRW5kfTtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5zZWxlY3RSYW5nZShyYW5nZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNvbHVtblNlbGVjdGlvbjoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gY29udGV4dC5jdXJyR3JpZC5zZWxlY3RlZENvbHVtbnMoKS5tYXAoYyA9PiBjLmZpZWxkKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBjb2x1bW5TZWxlY3Rpb246IHNlbGVjdGlvbiB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBzdHJpbmdbXSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQuZGVzZWxlY3RBbGxDb2x1bW5zKCk7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5zZWxlY3RDb2x1bW5zKHN0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcm93UGlubmluZzoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGlubmVkID0gY29udGV4dC5jdXJyR3JpZC5waW5uZWRSb3dzPy5tYXAoeCA9PiB4LmtleSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcm93UGlubmluZzogcGlubmVkIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZTogKGNvbnRleHQ6IElneEdyaWRTdGF0ZURpcmVjdGl2ZSwgc3RhdGU6IGFueVtdKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gY2xlYXIgY3VycmVudCBzdGF0ZS5cbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLnBpbm5lZFJvd3MuZm9yRWFjaChyb3cgPT4gcm93LnVucGluKCkpO1xuICAgICAgICAgICAgICAgIHN0YXRlLmZvckVhY2gocm93SUQgPT4gY29udGV4dC5jdXJyR3JpZC5waW5Sb3cocm93SUQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcGlubmluZ0NvbmZpZzoge1xuICAgICAgICAgICAgZ2V0RmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlKTogSUdyaWRTdGF0ZSA9PiAoeyBwaW5uaW5nQ29uZmlnOiBjb250ZXh0LmN1cnJHcmlkLnBpbm5pbmcgfSksXG4gICAgICAgICAgICByZXN0b3JlRmVhdHVyZVN0YXRlOiAoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCBzdGF0ZTogSVBpbm5pbmdDb25maWcpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkLnBpbm5pbmcgPSBzdGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXhwYW5zaW9uOiB7XG4gICAgICAgICAgICBnZXRGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleHBhbnNpb25TdGF0ZXMgPSBBcnJheS5mcm9tKGNvbnRleHQuY3VyckdyaWQuZXhwYW5zaW9uU3RhdGVzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBleHBhbnNpb246IGV4cGFuc2lvblN0YXRlcyB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGU6IChjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBhbnlbXSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGFuc2lvblN0YXRlcyA9IG5ldyBNYXA8YW55LCBib29sZWFuPihzdGF0ZSk7XG4gICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZC5leHBhbnNpb25TdGF0ZXMgPSBleHBhbnNpb25TdGF0ZXM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJvd0lzbGFuZHM6IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZShjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEdyaWRTdGF0ZXM6IElHcmlkU3RhdGVDb2xsZWN0aW9uW10gPSBbXTtcbiAgICAgICAgICAgICAgICBjb25zdCByb3dJc2xhbmRzID0gKGNvbnRleHQuY3VyckdyaWQgYXMgYW55KS5hbGxMYXlvdXRMaXN0O1xuICAgICAgICAgICAgICAgIGlmIChyb3dJc2xhbmRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd0lzbGFuZHMuZm9yRWFjaChyb3dJc2xhbmQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRHcmlkcyA9IHJvd0lzbGFuZC5yb3dJc2xhbmRBUEkuZ2V0Q2hpbGRHcmlkcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRHcmlkcy5mb3JFYWNoKGNoR3JpZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50Um93SUQgPSB0aGlzLmdldFBhcmVudFJvd0lEKGNoR3JpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZCA9IGNoR3JpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC5jdXJyR3JpZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEdyaWRTdGF0ZSA9IGNvbnRleHQuYnVpbGRTdGF0ZShjb250ZXh0LmZlYXR1cmVLZXlzKSBhcyBJR3JpZFN0YXRlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZEdyaWRTdGF0ZXMucHVzaCh7IGlkOiBgJHtyb3dJc2xhbmQuaWR9YCwgcGFyZW50Um93SUQsIHN0YXRlOiBjaGlsZEdyaWRTdGF0ZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRleHQuY3VyckdyaWQgPSBjb250ZXh0LmdyaWQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgcm93SXNsYW5kczogY2hpbGRHcmlkU3RhdGVzIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVzdG9yZUZlYXR1cmVTdGF0ZShjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHN0YXRlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgICAgICAgICBjb25zdCByb3dJc2xhbmRzID0gKGNvbnRleHQuY3VyckdyaWQgYXMgYW55KS5hbGxMYXlvdXRMaXN0O1xuICAgICAgICAgICAgICAgIGlmIChyb3dJc2xhbmRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd0lzbGFuZHMuZm9yRWFjaChyb3dJc2xhbmQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRHcmlkcyA9IHJvd0lzbGFuZC5yb3dJc2xhbmRBUEkuZ2V0Q2hpbGRHcmlkcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRHcmlkcy5mb3JFYWNoKGNoR3JpZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50Um93SUQgPSB0aGlzLmdldFBhcmVudFJvd0lEKGNoR3JpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jdXJyR3JpZCA9IGNoR3JpZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEdyaWRTdGF0ZSA9IHN0YXRlLmZpbmQoc3QgPT4gc3QuaWQgPT09IHJvd0lzbGFuZC5pZCAmJiBzdC5wYXJlbnRSb3dJRCA9PT0gcGFyZW50Um93SUQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZEdyaWRTdGF0ZSAmJiBjb250ZXh0LmN1cnJHcmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVzdG9yZUdyaWRTdGF0ZShjaGlsZEdyaWRTdGF0ZS5zdGF0ZSwgY29udGV4dC5mZWF0dXJlS2V5cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250ZXh0LmN1cnJHcmlkID0gY29udGV4dC5ncmlkO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogVHJhdmVyc2VzIHRoZSBoaWVyYXJjaHkgdXAgdG8gdGhlIHJvb3QgZ3JpZCB0byByZXR1cm4gdGhlIElEIG9mIHRoZSBleHBhbmRlZCByb3cuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGdldFBhcmVudFJvd0lEOiAoZ3JpZDogSWd4SGllcmFyY2hpY2FsR3JpZENvbXBvbmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBjaGlsZEdyaWQ7XG4gICAgICAgICAgICAgICAgd2hpbGUgKGdyaWQucGFyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkR3JpZCA9IGdyaWQ7XG4gICAgICAgICAgICAgICAgICAgIGdyaWQgPSBncmlkLnBhcmVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdyaWQuZ3JpZEFQSS5nZXRQYXJlbnRSb3dJZChjaGlsZEdyaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBwaXZvdENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgIGdldEZlYXR1cmVTdGF0ZShjb250ZXh0OiBJZ3hHcmlkU3RhdGVEaXJlY3RpdmUpOiBJR3JpZFN0YXRlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25maWcgPSAoY29udGV4dC5jdXJyR3JpZCBhcyBJZ3hQaXZvdEdyaWRDb21wb25lbnQpLnBpdm90Q29uZmlndXJhdGlvbjtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbmZpZyB8fCAhKGNvbnRleHQuY3VyckdyaWQgaW5zdGFuY2VvZiBJZ3hQaXZvdEdyaWRDb21wb25lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHBpdm90Q29uZmlndXJhdGlvbjogdW5kZWZpbmVkIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZ0NvcHkgPSBjbG9uZVZhbHVlKGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgY29uZmlnQ29weS5yb3dzID0gY2xvbmVBcnJheShjb25maWcucm93cywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgY29uZmlnQ29weS5jb2x1bW5zID0gY2xvbmVBcnJheShjb25maWcuY29sdW1ucywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgY29uZmlnQ29weS5maWx0ZXJzID0gY2xvbmVBcnJheShjb25maWcuZmlsdGVycywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZGltcyA9ICBbLi4uKGNvbmZpZ0NvcHkucm93cyB8fCBbXSksIC4uLihjb25maWdDb3B5LmNvbHVtbnMgfHwgW10pLCAuLi4oY29uZmlnQ29weS5maWx0ZXJzIHx8IFtdKV07XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZURpbWVuc2lvbnMgPSBkaW1zLmZpbHRlcih4ID0+IGNvbnRleHQuaXNEYXRlRGltZW5zaW9uKHgpKTtcbiAgICAgICAgICAgICAgICBkYXRlRGltZW5zaW9ucz8uZm9yRWFjaChkaW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBkbyBub3Qgc2VyaWFsaXplIHRoZSBncmlkIHJlc291cmNlIHN0cmluZ3MuIFRoaXMgd291bGQgcG9sbHV0ZSB0aGUgb2JqZWN0IHdpdGggdW5uZWNlc3NhcnkgZGF0YS5cbiAgICAgICAgICAgICAgICAgICAgKGRpbSBhcyBJZ3hQaXZvdERhdGVEaW1lbnNpb24pLnJlc291cmNlU3RyaW5ncyA9IHt9O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHBpdm90Q29uZmlndXJhdGlvbjogY29uZmlnQ29weSB9O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlc3RvcmVGZWF0dXJlU3RhdGUoY29udGV4dDogSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCBzdGF0ZTogYW55KTogdm9pZCB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29uZmlnOiBJUGl2b3RDb25maWd1cmF0aW9uID0gc3RhdGU7XG4gICAgICAgICAgICAgICAgaWYgKCFjb25maWcgfHwgIShjb250ZXh0LmN1cnJHcmlkIGluc3RhbmNlb2YgSWd4UGl2b3RHcmlkQ29tcG9uZW50KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRleHQucmVzdG9yZVZhbHVlcyhjb25maWcsIGNvbnRleHQuY3VyckdyaWQgYXMgSWd4UGl2b3RHcmlkQ29tcG9uZW50KTtcbiAgICAgICAgICAgICAgICBjb250ZXh0LnJlc3RvcmVEaW1lbnNpb25zKGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgKGNvbnRleHQuY3VyckdyaWQgYXMgSWd4UGl2b3RHcmlkQ29tcG9uZW50KS5waXZvdENvbmZpZ3VyYXRpb24gPSBjb25maWc7XG4gICAgICAgICAgICB9LFxuXG5cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiAgRXZlbnQgZW1pdHRlZCB3aGVuIHNldCBzdGF0ZSBpcyBjYWxsZWQgd2l0aCBhIHN0cmluZy5cbiAgICAgKiBSZXR1cm5zIHRoZSBwYXJzZWQgc3RhdGUgb2JqZWN0IHNvIHRoYXQgaXQgY2FuIGJlIGZ1cnRoZXIgbW9kaWZpZWQgYmVmb3JlIGFwcGx5aW5nIHRvIHRoZSBncmlkLlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiB0aGlzLnN0YXRlLnN0YXRlUGFyc2VkLnN1YnNjcmliZShwYXJzZWRTdGF0ZSA9PiBwYXJzZWRTdGF0ZS5zb3J0aW5nLmZvckVhY2goeCA9PiB4LnN0cmF0ZWd5ID0gTm9vcFNvcnRpbmdTdHJhdGVneS5pbnN0YW5jZSgpfSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHN0YXRlUGFyc2VkID0gbmV3IEV2ZW50RW1pdHRlcjxJR3JpZFN0YXRlPigpO1xuXG4gICAgLyoqXG4gICAgICogIEFuIG9iamVjdCB3aXRoIG9wdGlvbnMgZGV0ZXJtaW5pbmcgaWYgYSBjZXJ0YWluIGZlYXR1cmUgc3RhdGUgc2hvdWxkIGJlIHNhdmVkLlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWdyaWQgW2lneEdyaWRTdGF0ZV09XCJvcHRpb25zXCI+PC9pZ3gtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogcHVibGljIG9wdGlvbnMgPSB7c2VsZWN0aW9uOiBmYWxzZSwgYWR2YW5jZWRGaWx0ZXJpbmc6IGZhbHNlfTtcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoJ2lneEdyaWRTdGF0ZScpXG4gICAgcHVibGljIGdldCBvcHRpb25zKCk6IElHcmlkU3RhdGVPcHRpb25zIHtcbiAgICAgICByZXR1cm4gdGhpcy5fb3B0aW9ucztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IG9wdGlvbnModmFsdWU6IElHcmlkU3RhdGVPcHRpb25zKSB7XG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5fb3B0aW9ucywgdmFsdWUpO1xuICAgICAgICBpZiAoISh0aGlzLmdyaWQgaW5zdGFuY2VvZiBJZ3hHcmlkQ29tcG9uZW50KSkge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX29wdGlvbnMuZ3JvdXBCeTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9vcHRpb25zLnJvd0lzbGFuZHM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBIb3N0KCkgQE9wdGlvbmFsKCkgQEluamVjdChJR1hfR1JJRF9CQVNFKSBwdWJsaWMgZ3JpZDogR3JpZFR5cGUsXG4gICAgICAgIHByaXZhdGUgdmlld1JlZjogVmlld0NvbnRhaW5lclJlZiwgcHJpdmF0ZSBlbnZJbmplY3RvcjogRW52aXJvbm1lbnRJbmplY3RvciwgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yKSB7IH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHN0YXRlIG9mIGEgZmVhdHVyZSBvciBzdGF0ZXMgb2YgYWxsIGdyaWQgZmVhdHVyZXMsIHVubGVzcyBhIGNlcnRhaW4gZmVhdHVyZSBpcyBkaXNhYmxlZCB0aHJvdWdoIHRoZSBgb3B0aW9uc2AgcHJvcGVydHkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYHNlcmlhbGl6ZWAgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSByZXR1cm5lZCBvYmplY3Qgd2lsbCBiZSBzZXJpYWxpemVkIHRvIEpTT04gc3RyaW5nLiBEZWZhdWx0IHZhbHVlIGlzIHRydWUuXG4gICAgICogQHBhcmFtIGBmZWF0dXJlYCBzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncyBkZXRlcm1pbmluZyB0aGUgZmVhdHVyZXMgdG8gYmUgYWRkZWQgaW4gdGhlIHN0YXRlLiBJZiBza2lwcGVkLCBhbGwgZmVhdHVyZXMgYXJlIGFkZGVkLlxuICAgICAqIEByZXR1cm5zIFJldHVybnMgdGhlIHNlcmlhbGl6ZWQgdG8gSlNPTiBzdHJpbmcgSUdyaWRTdGF0ZSBvYmplY3QsIG9yIHRoZSBub24tc2VyaWFsaXplZCBJR3JpZFN0YXRlIG9iamVjdC5cbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1ncmlkIFtpZ3hHcmlkU3RhdGVdPVwib3B0aW9uc1wiPjwvaWd4LWdyaWQ+XG4gICAgICogYGBgXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIEBWaWV3Q2hpbGQoSWd4R3JpZFN0YXRlRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSBwdWJsaWMgc3RhdGU7XG4gICAgICogbGV0IHN0YXRlID0gdGhpcy5zdGF0ZS5nZXRTdGF0ZSgpOyAvLyByZXR1cm5zIHN0cmluZ1xuICAgICAqIGxldCBzdGF0ZSA9IHRoaXMuc3RhdGUoZmFsc2UpIC8vIHJldHVybnMgYElHcmlkU3RhdGVgIG9iamVjdFxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXRTdGF0ZShzZXJpYWxpemUgPSB0cnVlLCBmZWF0dXJlcz86IEdyaWRGZWF0dXJlcyB8IEdyaWRGZWF0dXJlc1tdKTogSUdyaWRTdGF0ZSB8IHN0cmluZyAge1xuICAgICAgICBsZXQgc3RhdGU6IElHcmlkU3RhdGUgfCBzdHJpbmc7XG4gICAgICAgIHRoaXMuY3VyckdyaWQgPSB0aGlzLmdyaWQ7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZSA9IHRoaXMuYnVpbGRTdGF0ZShmZWF0dXJlcykgYXMgSUdyaWRTdGF0ZTtcbiAgICAgICAgaWYgKHNlcmlhbGl6ZSkge1xuICAgICAgICAgICAgc3RhdGUgPSBKU09OLnN0cmluZ2lmeShzdGF0ZSwgdGhpcy5zdHJpbmdpZnlDYWxsYmFjaykgYXMgc3RyaW5nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGF0ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXN0b3JlcyBncmlkIGZlYXR1cmVzJyBzdGF0ZSBiYXNlZCBvbiB0aGUgSUdyaWRTdGF0ZSBvYmplY3QgcGFzc2VkIGFzIGFuIGFyZ3VtZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIElHcmlkU3RhdGUgb2JqZWN0IHRvIHJlc3RvcmUgc3RhdGUgZnJvbS5cbiAgICAgKiBAcmV0dXJuc1xuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWdyaWQgW2lneEdyaWRTdGF0ZV09XCJvcHRpb25zXCI+PC9pZ3gtZ3JpZD5cbiAgICAgKiBgYGBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogQFZpZXdDaGlsZChJZ3hHcmlkU3RhdGVEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIHB1YmxpYyBzdGF0ZTtcbiAgICAgKiB0aGlzLnN0YXRlLnNldFN0YXRlKGdyaWRTdGF0ZSk7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIHNldFN0YXRlKHN0YXRlOiBJR3JpZFN0YXRlIHwgc3RyaW5nLCBmZWF0dXJlcz86IEdyaWRGZWF0dXJlcyB8IEdyaWRGZWF0dXJlc1tdKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEpTT04ucGFyc2Uoc3RhdGUpIGFzIElHcmlkU3RhdGU7XG4gICAgICAgICAgICB0aGlzLnN0YXRlUGFyc2VkLmVtaXQoc3RhdGUpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICB0aGlzLmN1cnJHcmlkID0gdGhpcy5ncmlkO1xuICAgICAgICB0aGlzLnJlc3RvcmVHcmlkU3RhdGUoc3RhdGUsIGZlYXR1cmVzKTtcbiAgICAgICAgdGhpcy5ncmlkLmNkci5kZXRlY3RDaGFuZ2VzKCk7IC8vIFRPRE9cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBCdWlsZHMgYW4gSUdyaWRTdGF0ZSBvYmplY3QuXG4gICAgICovXG4gICAgcHJpdmF0ZSBidWlsZFN0YXRlKGtleXM/OiBHcmlkRmVhdHVyZXMgfCBHcmlkRmVhdHVyZXNbXSk6IElHcmlkU3RhdGUge1xuICAgICAgICB0aGlzLmFwcGx5RmVhdHVyZXMoa2V5cyk7XG4gICAgICAgIGxldCBncmlkU3RhdGUgPSB7fSBhcyBJR3JpZFN0YXRlO1xuICAgICAgICB0aGlzLmZlYXR1cmVLZXlzLmZvckVhY2goZiA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zW2ZdKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEodGhpcy5ncmlkIGluc3RhbmNlb2YgSWd4R3JpZENvbXBvbmVudCkgJiYgZiA9PT0gJ2dyb3VwQnknKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZmVhdHVyZSA9IHRoaXMuZ2V0RmVhdHVyZShmKTtcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlU3RhdGU6IElHcmlkU3RhdGUgPSBmZWF0dXJlLmdldEZlYXR1cmVTdGF0ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICBncmlkU3RhdGUgPSBPYmplY3QuYXNzaWduKGdyaWRTdGF0ZSwgZmVhdHVyZVN0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBncmlkU3RhdGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG1ldGhvZCB0aGF0IGNhbGxzIGNvcnJlc3BvbmRpbmcgbWV0aG9kcyB0byByZXN0b3JlIGZlYXR1cmVzIGZyb20gdGhlIHBhc3NlZCBJR3JpZFN0YXRlIG9iamVjdC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlc3RvcmVHcmlkU3RhdGUoc3RhdGU6IElHcmlkU3RhdGUsIGZlYXR1cmVzPzogR3JpZEZlYXR1cmVzIHwgR3JpZEZlYXR1cmVzW10pIHtcbiAgICAgICAgdGhpcy5hcHBseUZlYXR1cmVzKGZlYXR1cmVzKTtcbiAgICAgICAgdGhpcy5yZXN0b3JlRmVhdHVyZXMoc3RhdGUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzdG9yZUZlYXR1cmVzKHN0YXRlOiBJR3JpZFN0YXRlKSB7XG4gICAgICAgIHRoaXMuZmVhdHVyZUtleXMuZm9yRWFjaChmID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnNbZl0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlU3RhdGUgPSBzdGF0ZVtmXTtcbiAgICAgICAgICAgICAgICBpZiAoZiA9PT0gJ21vdmluZycgfHwgZmVhdHVyZVN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZlYXR1cmUgPSB0aGlzLmdldEZlYXR1cmUoZik7XG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmUucmVzdG9yZUZlYXR1cmVTdGF0ZSh0aGlzLCBmZWF0dXJlU3RhdGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGNvbGxlY3Rpb24gb2YgYWxsIGdyaWQgZmVhdHVyZXMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBhcHBseUZlYXR1cmVzKGtleXM/OiBHcmlkRmVhdHVyZXMgfCBHcmlkRmVhdHVyZXNbXSkge1xuICAgICAgICB0aGlzLmZlYXR1cmVLZXlzID0gW107XG4gICAgICAgIGlmICgha2V5cykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5vcHRpb25zKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmVhdHVyZUtleXMucHVzaChrZXkgYXMgR3JpZEZlYXR1cmVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGtleXMpKSB7XG4gICAgICAgICAgICB0aGlzLmZlYXR1cmVLZXlzID0gWy4uLmtleXMgYXMgR3JpZEZlYXR1cmVzW11dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5mZWF0dXJlS2V5cy5wdXNoKGtleXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgcmVzdG9yZXMgY29tcGxleCBvYmplY3RzIGluIHRoZSBwaXZvdCBkaW1lbnNpb25zXG4gICAgICogTGlrZSB0aGUgSWd4UGl2b3REYXRlRGltZW5zaW9uIGFuZCBmaWx0ZXJzLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVzdG9yZURpbWVuc2lvbnMoY29uZmlnOiBJUGl2b3RDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb25zID0gW2NvbmZpZy5yb3dzLCBjb25maWcuY29sdW1ucywgY29uZmlnLmZpbHRlcnNdO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbGxlY3Rpb24gb2YgY29sbGVjdGlvbnMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjb2xsZWN0aW9uPy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaW0gPSBjb2xsZWN0aW9uW2luZGV4XTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0RhdGVEaW1lbnNpb24oZGltKSkge1xuICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdG9yZURhdGVEaW1lbnNpb24oZGltIGFzIElneFBpdm90RGF0ZURpbWVuc2lvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHJlc3RvcmUgY29tcGxleCBmaWx0ZXJzXG4gICAgICAgICAgICAgICAgaWYgKGRpbS5maWx0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGltLmZpbHRlciA9IHRoaXMuY3JlYXRlRXhwcmVzc2lvbnNUcmVlRnJvbU9iamVjdChkaW0uZmlsdGVyIGFzIEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCByZXN0b3JlcyB0aGUgSWd4UGl2b3REYXRlRGltZW5zaW9uIHdpdGggaXRzIGRlZmF1bHQgZnVuY3Rpb25zIGFuZCByZXNvdXJjZSBzdHJpbmdzLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVzdG9yZURhdGVEaW1lbnNpb24oZGltOiBJZ3hQaXZvdERhdGVEaW1lbnNpb24pIHtcbiAgICAgICAgY29uc3QgZGF0ZURpbSA9IG5ldyBJZ3hQaXZvdERhdGVEaW1lbnNpb24oKGRpbSBhcyBhbnkpLl9iYXNlRGltZW5zaW9uLCAoZGltIGFzIGFueSkuX29wdGlvbnMpO1xuICAgICAgICAvLyByZXN0b3JlIGZ1bmN0aW9ucyBhbmQgcmVzb3VyY2Ugc3RyaW5nc1xuICAgICAgICBkaW0ucmVzb3VyY2VTdHJpbmdzID0gZGF0ZURpbS5yZXNvdXJjZVN0cmluZ3M7XG4gICAgICAgIGRpbS5tZW1iZXJGdW5jdGlvbiA9IGRhdGVEaW0ubWVtYmVyRnVuY3Rpb247XG4gICAgICAgIGxldCBjdXJyRGltOiBJUGl2b3REaW1lbnNpb24gPSBkaW07XG4gICAgICAgIGxldCBvcmlnaW5EaW06IElQaXZvdERpbWVuc2lvbiA9IGRhdGVEaW07XG4gICAgICAgIHdoaWxlIChjdXJyRGltLmNoaWxkTGV2ZWwpIHtcbiAgICAgICAgICAgIGN1cnJEaW0gPSBjdXJyRGltLmNoaWxkTGV2ZWw7XG4gICAgICAgICAgICBvcmlnaW5EaW0gPSBvcmlnaW5EaW0uY2hpbGRMZXZlbDtcbiAgICAgICAgICAgIGN1cnJEaW0ubWVtYmVyRnVuY3Rpb24gPSBvcmlnaW5EaW0ubWVtYmVyRnVuY3Rpb247XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGlmIHRoaXMgaXMgYSBJZ3hQaXZvdERhdGVEaW1lbnNpb24uXG4gICAgICovXG4gICAgcHJpdmF0ZSBpc0RhdGVEaW1lbnNpb24oZGltOiBJUGl2b3REaW1lbnNpb24pIHtcbiAgICAgICAgcmV0dXJuIChkaW0gYXMgYW55KS5fYmFzZURpbWVuc2lvbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCByZXN0b3JlcyBjb21wbGV4IG9iamVjdHMgaW4gdGhlIHBpdm90IHZhbHVlcy5cbiAgICAgKiBMaWtlIHRoZSBkZWZhdWx0IGFnZ3JlZ2F0b3IgbWV0aG9kcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlc3RvcmVWYWx1ZXMoY29uZmlnOiBJUGl2b3RDb25maWd1cmF0aW9uLCBncmlkOiBJZ3hQaXZvdEdyaWRDb21wb25lbnQpIHtcbiAgICAgICAgLy8gcmVzdG9yZSBhZ2dyZWdhdG9yIGZ1bmMgaWYgaXQgbWF0Y2hlcyB0aGUgZGVmYXVsdCBhZ2dyZWdhdG9ycyBrZXkgYW5kIGxhYmVsXG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGNvbmZpZy52YWx1ZXM7XG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICBjb25zdCBhZ2dyZWdhdGVMaXN0ID0gdmFsdWUuYWdncmVnYXRlTGlzdDtcbiAgICAgICAgICAgIGNvbnN0IGFnZ3JlZ2F0b3JzID0gUGl2b3RVdGlsLmdldEFnZ3JlZ2F0b3JzRm9yVmFsdWUodmFsdWUsIGdyaWQpO1xuICAgICAgICAgICAgdmFsdWUuYWdncmVnYXRlLmFnZ3JlZ2F0b3IgPSBhZ2dyZWdhdG9ycy5maW5kKHggPT4geC5rZXkgPT09IHZhbHVlLmFnZ3JlZ2F0ZS5rZXkgJiYgeC5sYWJlbCA9PT0gdmFsdWUuYWdncmVnYXRlLmxhYmVsKT8uYWdncmVnYXRvcjtcbiAgICAgICAgICAgIGlmIChhZ2dyZWdhdGVMaXN0KSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBhZyBvZiBhZ2dyZWdhdGVMaXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGFnLmFnZ3JlZ2F0b3IgPSBhZ2dyZWdhdG9ycy5maW5kKHggPT4geC5rZXkgPT09IGFnLmtleSAmJiB4LmxhYmVsID09PSBhZy5sYWJlbCk/LmFnZ3JlZ2F0b3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgYnVpbGRzIGEgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlIGZyb20gYSBwcm92aWRlZCBvYmplY3QuXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVFeHByZXNzaW9uc1RyZWVGcm9tT2JqZWN0KGV4cHJUcmVlT2JqZWN0OiBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUpOiBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUge1xuICAgICAgICBpZiAoIWV4cHJUcmVlT2JqZWN0IHx8ICFleHByVHJlZU9iamVjdC5maWx0ZXJpbmdPcGVyYW5kcykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBleHByZXNzaW9uc1RyZWUgPSBuZXcgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKGV4cHJUcmVlT2JqZWN0Lm9wZXJhdG9yLCBleHByVHJlZU9iamVjdC5maWVsZE5hbWUpO1xuXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBleHByVHJlZU9iamVjdC5maWx0ZXJpbmdPcGVyYW5kcykge1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgaXRlbSBpcyBhbiBleHByZXNzaW9ucyB0cmVlIG9yIGEgc2luZ2xlIGV4cHJlc3Npb24uXG4gICAgICAgICAgICBpZiAoKGl0ZW0gYXMgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKS5maWx0ZXJpbmdPcGVyYW5kcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1YlRyZWUgPSB0aGlzLmNyZWF0ZUV4cHJlc3Npb25zVHJlZUZyb21PYmplY3QoKGl0ZW0gYXMgRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKSk7XG4gICAgICAgICAgICAgICAgZXhwcmVzc2lvbnNUcmVlLmZpbHRlcmluZ09wZXJhbmRzLnB1c2goc3ViVHJlZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cHIgPSBpdGVtIGFzIElGaWx0ZXJpbmdFeHByZXNzaW9uO1xuICAgICAgICAgICAgICAgIGxldCBkYXRhVHlwZTogc3RyaW5nO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmN1cnJHcmlkIGluc3RhbmNlb2YgSWd4UGl2b3RHcmlkQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlID0gdGhpcy5jdXJyR3JpZC5hbGxEaW1lbnNpb25zLmZpbmQoeCA9PiB4Lm1lbWJlck5hbWUgPT09IGV4cHIuZmllbGROYW1lKS5kYXRhVHlwZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY3VyckdyaWQuY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlID0gdGhpcy5jdXJyR3JpZC5jb2x1bW5zLmZpbmQoYyA9PiBjLmZpZWxkID09PSBleHByLmZpZWxkTmFtZSkuZGF0YVR5cGU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlLmNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGUgPSB0aGlzLnN0YXRlLmNvbHVtbnMuZmluZChjID0+IGMuZmllbGQgPT09IGV4cHIuZmllbGROYW1lKS5kYXRhVHlwZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gd2hlbiBFU0YsIHZhbHVlcyBhcmUgc3RvcmVkIGluIFNldC5cbiAgICAgICAgICAgICAgICAvLyBGaXJzdCB0aG9zZSB2YWx1ZXMgYXJlIGNvbnZlcnRlZCB0byBhbiBhcnJheSBiZWZvcmUgcmV0dXJuaW5nIHN0cmluZyBpbiB0aGUgc3RyaW5naWZ5Q2FsbGJhY2tcbiAgICAgICAgICAgICAgICAvLyBub3cgd2UgbmVlZCB0byBjb252ZXJ0IHRob3NlIGJhY2sgdG8gU2V0XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZXhwci5zZWFyY2hWYWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIGV4cHIuc2VhcmNoVmFsID0gbmV3IFNldChleHByLnNlYXJjaFZhbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwci5zZWFyY2hWYWwgPSBleHByLnNlYXJjaFZhbCAmJiAoZGF0YVR5cGUgPT09ICdkYXRlJyB8fCBkYXRhVHlwZSA9PT0gJ2RhdGVUaW1lJykgPyBuZXcgRGF0ZShEYXRlLnBhcnNlKGV4cHIuc2VhcmNoVmFsKSkgOiBleHByLnNlYXJjaFZhbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBjb25kaXRpb24gPSB0aGlzLmdlbmVyYXRlRmlsdGVyaW5nQ29uZGl0aW9uKGRhdGFUeXBlLCBleHByLmNvbmRpdGlvbi5uYW1lKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJHcmlkLmNvbHVtbnMuZmluZChjID0+IGMuZmllbGQgPT09IGV4cHIuZmllbGROYW1lKS5maWx0ZXJzLmNvbmRpdGlvbihleHByLmNvbmRpdGlvbi5uYW1lKTtcblxuICAgICAgICAgICAgICAgIGlmIChjb25kaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgZXhwci5jb25kaXRpb24gPSBjb25kaXRpb247XG4gICAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5wdXNoKGV4cHIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBleHByZXNzaW9uc1RyZWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZmlsdGVyaW5nIGxvZ2ljIGZ1bmN0aW9uIGZvciBhIGdpdmVuIGRhdGFUeXBlIGFuZCBjb25kaXRpb24gKGNvbnRhaW5zLCBncmVhdGVyVGhhbiwgZXRjLilcbiAgICAgKi9cbiAgICBwcml2YXRlIGdlbmVyYXRlRmlsdGVyaW5nQ29uZGl0aW9uKGRhdGFUeXBlOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IElGaWx0ZXJpbmdPcGVyYXRpb24ge1xuICAgICAgICBsZXQgZmlsdGVycztcbiAgICAgICAgc3dpdGNoIChkYXRhVHlwZSkge1xuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuQm9vbGVhbjpcbiAgICAgICAgICAgICAgICBmaWx0ZXJzID0gSWd4Qm9vbGVhbkZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLk51bWJlcjpcbiAgICAgICAgICAgICAgICBmaWx0ZXJzID0gSWd4TnVtYmVyRmlsdGVyaW5nT3BlcmFuZC5pbnN0YW5jZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBHcmlkQ29sdW1uRGF0YVR5cGUuRGF0ZTpcbiAgICAgICAgICAgICAgICBmaWx0ZXJzID0gSWd4RGF0ZUZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLkRhdGVUaW1lOlxuICAgICAgICAgICAgICAgIGZpbHRlcnMgPSBJZ3hEYXRlVGltZUZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgR3JpZENvbHVtbkRhdGFUeXBlLlN0cmluZzpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgZmlsdGVycyA9IElneFN0cmluZ0ZpbHRlcmluZ09wZXJhbmQuaW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsdGVycy5jb25kaXRpb24obmFtZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdHJpbmdpZnlDYWxsYmFjayhrZXk6IHN0cmluZywgdmFsOiBhbnkpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ3NlYXJjaFZhbCcgJiYgdmFsIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh2YWwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGZWF0dXJlKGtleTogc3RyaW5nKTogRmVhdHVyZSB7XG4gICAgICAgIGNvbnN0IGZlYXR1cmU6IEZlYXR1cmUgPSB0aGlzLkZFQVRVUkVTW2tleV07XG4gICAgICAgIHJldHVybiBmZWF0dXJlO1xuICAgIH1cbn1cbiJdfQ==
@@ -10,10 +10,10 @@ export class IgxSummaryDataPipe {
10
10
  const summaryService = this.grid.summaryService;
11
11
  return summaryService.calculateSummaries(summaryService.rootSummaryID, this.grid.gridAPI.get_summary_data());
12
12
  }
13
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: IgxSummaryDataPipe, deps: [{ token: IGX_GRID_BASE }], target: i0.ɵɵFactoryTarget.Pipe }); }
14
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.0.3", ngImport: i0, type: IgxSummaryDataPipe, isStandalone: true, name: "igxGridSummaryDataPipe" }); }
13
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxSummaryDataPipe, deps: [{ token: IGX_GRID_BASE }], target: i0.ɵɵFactoryTarget.Pipe }); }
14
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.0.5", ngImport: i0, type: IgxSummaryDataPipe, isStandalone: true, name: "igxGridSummaryDataPipe" }); }
15
15
  }
16
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: IgxSummaryDataPipe, decorators: [{
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxSummaryDataPipe, decorators: [{
17
17
  type: Pipe,
18
18
  args: [{
19
19
  name: 'igxGridSummaryDataPipe',
@@ -227,10 +227,10 @@ export class IgxGridSummaryService {
227
227
  get isHierarchicalGrid() {
228
228
  return this.grid.nativeElement.tagName.toLowerCase() === 'igx-hierarchical-grid';
229
229
  }
230
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: IgxGridSummaryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
231
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: IgxGridSummaryService }); }
230
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxGridSummaryService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
231
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxGridSummaryService }); }
232
232
  }
233
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: IgxGridSummaryService, decorators: [{
233
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxGridSummaryService, decorators: [{
234
234
  type: Injectable
235
235
  }] });
236
236
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1zdW1tYXJ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvc3VtbWFyaWVzL2dyaWQtc3VtbWFyeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7QUFHakUsY0FBYztBQUVkLE1BQU0sT0FBTyxxQkFBcUI7SUFEbEM7UUFHVyxrQkFBYSxHQUFHLG9CQUFvQixDQUFDO1FBQ3JDLGtCQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLHVCQUFrQixHQUFHLENBQUMsQ0FBQztRQUN2Qix3QkFBbUIsR0FBRyxFQUFFLENBQUM7UUFDekIsc0JBQWlCLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBRXJCLG9CQUFlLEdBQW9DLElBQUksR0FBRyxFQUEyQyxDQUFDO0tBMk9uSDtJQXpPVSxvQkFBb0I7UUFDdkIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVNLGlCQUFpQixDQUFDLElBQUs7UUFDMUIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFO1lBQzVCLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDUCxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzdCLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFF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bmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJZ3hTdW1tYXJ5UmVzdWx0IH0gZnJvbSAnLi9ncmlkLXN1bW1hcnknO1xuaW1wb3J0IHsgRGF0YVV0aWwgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZGF0YS11dGlsJztcbmltcG9ydCB7IGNsb25lQXJyYXksIHJlc29sdmVOZXN0ZWRQYXRoIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBHcmlkVHlwZSwgRmxhdEdyaWRUeXBlLCBUcmVlR3JpZFR5cGUgfSBmcm9tICcuLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuXG4vKiogQGhpZGRlbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIElneEdyaWRTdW1tYXJ5U2VydmljZSB7XG4gICAgcHVibGljIGdyaWQ6IEdyaWRUeXBlO1xuICAgIHB1YmxpYyByb290U3VtbWFyeUlEID0gJ2lneEdyaWRSb290U3VtbWFyeSc7XG4gICAgcHVibGljIHN1bW1hcnlIZWlnaHQgPSAwO1xuICAgIHB1YmxpYyBtYXhTdW1tYXJpZXNMZW5naHQgPSAwO1xuICAgIHB1YmxpYyBncm91cGluZ0V4cHJlc3Npb25zID0gW107XG4gICAgcHVibGljIHJldHJpZ2dlclJvb3RQaXBlID0gMDtcbiAgICBwdWJsaWMgZGVsZXRlT3BlcmF0aW9uID0gZmFsc2U7XG5cbiAgICBwcm90ZWN0ZWQgc3VtbWFyeUNhY2hlTWFwOiBNYXA8c3RyaW5nLCBNYXA8c3RyaW5nLCBhbnlbXT4+ID0gbmV3IE1hcDxzdHJpbmcsIE1hcDxzdHJpbmcsIElneFN1bW1hcnlSZXN1bHRbXT4+KCk7XG5cbiAgICBwdWJsaWMgcmVjYWxjdWxhdGVTdW1tYXJpZXMoKSB7XG4gICAgICAgIHRoaXMucmVzZXRTdW1tYXJ5SGVpZ2h0KCk7XG4gICAgICAgIHRoaXMuZ3JpZC5ub3RpZnlDaGFuZ2VzKHRydWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhclN1bW1hcnlDYWNoZShhcmdzPykge1xuICAgICAgICBpZiAoIXRoaXMuc3VtbWFyeUNhY2hlTWFwLnNpemUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWFyZ3MpIHtcbiAgICAgICAgICAgIHRoaXMuc3VtbWFyeUNhY2hlTWFwLmNsZWFyKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkICYmIHRoaXMuZ3JpZC5yb290U3VtbWFyaWVzRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmV0cmlnZ2VyUm9vdFBpcGUrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJncy5kYXRhKSB7XG4gICAgICAgICAgICBjb25zdCByb3dJRCA9IHRoaXMuZ3JpZC5wcmltYXJ5S2V5ID8gYXJncy5kYXRhW3RoaXMuZ3JpZC5wcmltYXJ5S2V5XSA6IGFyZ3MuZGF0YTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlU3VtbWFyaWVzKHJvd0lEKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJncy5yb3dJRCAhPT0gdW5kZWZpbmVkICYmIGFyZ3Mucm93SUQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGxldCBjb2x1bW5OYW1lID0gYXJncy5jZWxsSUQgPyB0aGlzLmdyaWQuY29sdW1ucy5maW5kKGNvbCA9PiBjb2wuaW5kZXggPT09IGFyZ3MuY2VsbElELmNvbHVtbklEKS5maWVsZCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChjb2x1bW5OYW1lICYmIHRoaXMuZ3JpZC5yb3dFZGl0YWJsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgaXNHcm91cGVkQ29sdW1uID0gKHRoaXMuZ3JpZCBhcyBGbGF0R3JpZFR5cGUpLmdyb3VwaW5nRXhwcmVzc2lvbnMgJiZcbiAgICAgICAgICAgICAgICAodGhpcy5ncmlkIGFzIEZsYXRHcmlkVHlwZSkuZ3JvdXBpbmdFeHByZXNzaW9ucy5tYXAoZXhwciA9PiBleHByLmZpZWxkTmFtZSkuaW5kZXhPZihjb2x1bW5OYW1lKSAhPT0gLTE7XG4gICAgICAgICAgICBpZiAoY29sdW1uTmFtZSAmJiBpc0dyb3VwZWRDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICBjb2x1bW5OYW1lID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZW1vdmVTdW1tYXJpZXMoYXJncy5yb3dJRCwgY29sdW1uTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlU3VtbWFyaWVzKHJvd0lELCBjb2x1bW5OYW1lPykge1xuICAgICAgICB0aGlzLmRlbGV0ZVN1bW1hcnlDYWNoZSh0aGlzLnJvb3RTdW1tYXJ5SUQsIGNvbHVtbk5hbWUpO1xuICAgICAgICBpZiAodGhpcy5zdW1tYXJ5Q2FjaGVNYXAuc2l6ZSA9PT0gMSAmJiB0aGlzLnN1bW1hcnlDYWNoZU1hcC5oYXModGhpcy5yb290U3VtbWFyeUlEKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzVHJlZUdyaWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQgJiYgdGhpcy5kZWxldGVPcGVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZU9wZXJhdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IHRoaXMucmVtb3ZlQ2hpbGRSb3dTdW1tYXJpZXMocm93SUQsIGNvbHVtbk5hbWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3VtbWFyeUNhY2hlTWFwLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yZW1vdmVBbGxUcmVlR3JpZFN1bW1hcmllcyhyb3dJRCwgY29sdW1uTmFtZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0hpZXJhcmNoaWNhbEdyaWQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQgJiYgdGhpcy5kZWxldGVPcGVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZU9wZXJhdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuc3VtbWFyeUNhY2hlTWFwLmNsZWFyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBzdW1tYXJ5SWRzID0gdGhpcy5nZXRTdW1tYXJ5SUQocm93SUQsICh0aGlzLmdyaWQgYXMgRmxhdEdyaWRUeXBlKS5ncm91cGluZ0V4cHJlc3Npb25zKTtcbiAgICAgICAgICAgIHN1bW1hcnlJZHMuZm9yRWFjaChpZCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWxldGVTdW1tYXJ5Q2FjaGUoaWQsIGNvbHVtbk5hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlU3VtbWFyaWVzQ2FjaGVQZXJDb2x1bW4oY29sdW1uTmFtZSkge1xuICAgICAgICB0aGlzLnN1bW1hcnlDYWNoZU1hcC5mb3JFYWNoKChjYWNoZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGNhY2hlLmdldChjb2x1bW5OYW1lKSkge1xuICAgICAgICAgICAgICAgIGNhY2hlLmRlbGV0ZShjb2x1bW5OYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLmdyaWQucm9vdFN1bW1hcmllc0VuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmV0cmlnZ2VyUm9vdFBpcGUrKztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjYWxjTWF4U3VtbWFyeUhlaWdodCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3VtbWFyeUhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3VtbWFyeUhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuZ3JpZC5kYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdW1tYXJ5SGVpZ2h0ID0gMDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbWF4U3VtbWFyeUxlbmd0aCA9IDA7XG4gICAgICAgIHRoaXMuZ3JpZC5jb2x1bW5zLmZpbHRlcigoY29sKSA9PiBjb2wuaGFzU3VtbWFyeSAmJiAhY29sLmhpZGRlbikuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBnZXRDdXJyZW50U3VtbWFyeUNvbHVtbiA9IGNvbHVtbi5zdW1tYXJpZXMub3BlcmF0ZShbXSwgW10sIGNvbHVtbi5maWVsZCkubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKGdldEN1cnJlbnRTdW1tYXJ5Q29sdW1uKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1heFN1bW1hcnlMZW5ndGggPCBnZXRDdXJyZW50U3VtbWFyeUNvbHVtbikge1xuICAgICAgICAgICAgICAgICAgICBtYXhTdW1tYXJ5TGVuZ3RoID0gZ2V0Q3VycmVudFN1bW1hcnlDb2x1bW47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5tYXhTdW1tYXJpZXNMZW5naHQgPSBtYXhTdW1tYXJ5TGVuZ3RoO1xuICAgICAgICB0aGlzLnN1bW1hcnlIZWlnaHQgPSBtYXhTdW1tYXJ5TGVuZ3RoICogdGhpcy5ncmlkLmRlZmF1bHRTdW1tYXJ5SGVpZ2h0O1xuICAgICAgICByZXR1cm4gdGhpcy5zdW1tYXJ5SGVpZ2h0O1xuICAgIH1cblxuICAgIHB1YmxpYyBjYWxjdWxhdGVTdW1tYXJpZXMocm93SUQsIGRhdGEsIGdyb3VwUmVjb3JkKSB7XG4gICAgICAgIGxldCByb3dTdW1tYXJpZXMgPSB0aGlzLnN1bW1hcnlDYWNoZU1hcC5nZXQocm93SUQpO1xuICAgICAgICBpZiAoIXJvd1N1bW1hcmllcykge1xuICAgICAgICAgICAgcm93U3VtbWFyaWVzID0gbmV3IE1hcDxzdHJpbmcsIElneFN1bW1hcnlSZXN1bHRbXT4oKTtcbiAgICAgICAgICAgIHRoaXMuc3VtbWFyeUNhY2hlTWFwLnNldChyb3dJRCwgcm93U3VtbWFyaWVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaGFzU3VtbWFyaXplZENvbHVtbnMgfHwgIWRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybiByb3dTdW1tYXJpZXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmlkLmNvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wuaGFzU3VtbWFyeSkuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXJvd1N1bW1hcmllcy5nZXQoY29sdW1uLmZpZWxkKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1bW1hcnlSZXN1bHQgPSBjb2x1bW4uc3VtbWFyaWVzLm9wZXJhdGUoZGF0YS5tYXAociA9PiByZXNvbHZlTmVzdGVkUGF0aChyLCBjb2x1bW4uZmllbGQpKSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YSwgY29sdW1uLmZpZWxkLCBncm91cFJlY29yZCwgdGhpcy5ncmlkLmxvY2FsZSwgY29sdW1uLnBpcGVBcmdzKTtcbiAgICAgICAgICAgICAgICByb3dTdW1tYXJpZXMuc2V0KGNvbHVtbi5maWVsZCwgc3VtbWFyeVJlc3VsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcm93U3VtbWFyaWVzO1xuICAgIH1cblxuICAgIHB1YmxpYyByZXNldFN1bW1hcnlIZWlnaHQoKSB7XG4gICAgICAgIHRoaXMuc3VtbWFyeUhlaWdodCA9IDA7XG4gICAgICAgIGlmICh0aGlzLmdyaWQpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5zdW1tYXJ5UGlwZVRyaWdnZXIrKztcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWQucm9vdFN1bW1hcmllc0VuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJldHJpZ2dlclJvb3RQaXBlKys7XG4gICAgICAgICAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB0aGlzLmdyaWQubm90aWZ5Q2hhbmdlcyh0cnVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlU3VtbWFyeUNhY2hlKGdyb3VwaW5nQXJncykge1xuICAgICAgICBpZiAodGhpcy5zdW1tYXJ5Q2FjaGVNYXAuc2l6ZSA9PT0gMCB8fCAhdGhpcy5oYXNTdW1tYXJpemVkQ29sdW1ucykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdyb3VwaW5nRXhwcmVzc2lvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmdyb3VwaW5nRXhwcmVzc2lvbnMgPSBncm91cGluZ0FyZ3MuZXhwcmVzc2lvbnMubWFwKHJlY29yZCA9PiByZWNvcmQuZmllbGROYW1lKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZ3JvdXBpbmdBcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5ncm91cGluZ0V4cHJlc3Npb25zID0gW107XG4gICAgICAgICAgICB0aGlzLmNsZWFyU3VtbWFyeUNhY2hlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21wYXJlR3JvdXBpbmdFeHByZXNzaW9ucyh0aGlzLmdyb3VwaW5nRXhwcmVzc2lvbnMsIGdyb3VwaW5nQXJncyk7XG4gICAgICAgIHRoaXMuZ3JvdXBpbmdFeHByZXNzaW9ucyA9IGdyb3VwaW5nQXJncy5leHByZXNzaW9ucy5tYXAocmVjb3JkID0+IHJlY29yZC5maWVsZE5hbWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgaGFzU3VtbWFyaXplZENvbHVtbnMoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHN1bW1hcml6ZWRDb2x1bW5zID0gdGhpcy5ncmlkLmNvbHVtbnMuZmlsdGVyKGNvbCA9PiBjb2wuaGFzU3VtbWFyeSAmJiAhY29sLmhpZGRlbik7XG4gICAgICAgIHJldHVybiBzdW1tYXJpemVkQ29sdW1ucy5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVsZXRlU3VtbWFyeUNhY2hlKGlkLCBjb2x1bW5OYW1lKSB7XG4gICAgICAgIGlmICh0aGlzLnN1bW1hcnlDYWNoZU1hcC5nZXQoaWQpKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJpbmdBcHBsaWVkID0gY29sdW1uTmFtZSAmJiB0aGlzLmdyaWQuZmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlICYmXG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZS5maWx0ZXJpbmdPcGVyYW5kcy5tYXAoKGV4cHIpID0+IGV4cHIuZmllbGROYW1lKS5pbmRleE9mKGNvbHVtbk5hbWUpICE9PSAtMTtcbiAgICAgICAgICAgIGlmIChjb2x1bW5OYW1lICYmIHRoaXMuc3VtbWFyeUNhY2hlTWFwLmdldChpZCkuZ2V0KGNvbHVtbk5hbWUpICYmICFmaWx0ZXJpbmdBcHBsaWVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdW1tYXJ5Q2FjaGVNYXAuZ2V0KGlkKS5kZWxldGUoY29sdW1uTmFtZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc3VtbWFyeUNhY2hlTWFwLmRlbGV0ZShpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaWQgPT09IHRoaXMucm9vdFN1bW1hcnlJRCAmJiB0aGlzLmdyaWQucm9vdFN1bW1hcmllc0VuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJldHJpZ2dlclJvb3RQaXBlKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFN1bW1hcnlJRChyb3dJRCwgZ3JvdXBpbmdFeHByZXNzaW9ucykge1xuICAgICAgICBpZiAoZ3JvdXBpbmdFeHByZXNzaW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdW1tYXJ5SURzID0gW107XG4gICAgICAgIGxldCBkYXRhID0gdGhpcy5ncmlkLmRhdGE7XG4gICAgICAgIGlmICh0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIGRhdGEgPSBEYXRhVXRpbC5tZXJnZVRyYW5zYWN0aW9ucyhcbiAgICAgICAgICAgICAgICBjbG9uZUFycmF5KHRoaXMuZ3JpZC5kYXRhKSxcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQudHJhbnNhY3Rpb25zLmdldEFnZ3JlZ2F0ZWRDaGFuZ2VzKHRydWUpLFxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5wcmltYXJ5S2V5LFxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5kYXRhQ2xvbmVTdHJhdGVneVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb3dEYXRhID0gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyBkYXRhLmZpbmQocmVjID0+IHJlY1t0aGlzLmdyaWQucHJpbWFyeUtleV0gPT09IHJvd0lEKSA6IHJvd0lEO1xuICAgICAgICBsZXQgaWQgPSAneyAnO1xuICAgICAgICBncm91cGluZ0V4cHJlc3Npb25zLmZvckVhY2goZXhwciA9PiB7XG4gICAgICAgICAgICBpZCArPSBgJyR7ZXhwci5maWVsZE5hbWV9JzogJyR7cm93RGF0YVtleHByLmZpZWxkTmFtZV19J2A7XG4gICAgICAgICAgICBzdW1tYXJ5SURzLnB1c2goaWQuY29uY2F0KCcgfScpKTtcbiAgICAgICAgICAgIGlkICs9ICcsICc7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc3VtbWFyeUlEcztcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZUFsbFRyZWVHcmlkU3VtbWFyaWVzKHJvd0lELCBjb2x1bW5OYW1lPykge1xuICAgICAgICBsZXQgcm93ID0gKHRoaXMuZ3JpZCBhcyBUcmVlR3JpZFR5cGUpLnJlY29yZHMuZ2V0KHJvd0lEKTtcbiAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByb3cgPSByb3cuY2hpbGRyZW4gPyByb3cgOiByb3cucGFyZW50O1xuICAgICAgICB3aGlsZSAocm93KSB7XG4gICAgICAgICAgICByb3dJRCA9IHJvdy5rZXk7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZVN1bW1hcnlDYWNoZShyb3dJRCwgY29sdW1uTmFtZSk7XG4gICAgICAgICAgICByb3cgPSByb3cucGFyZW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ETzogcmVtb3ZlIG9ubHkgZGVsZXRlZCByb3dzXG4gICAgLy8gcHJpdmF0ZSByZW1vdmVDaGlsZFJvd1N1bW1hcmllcyhyb3dJRCwgY29sdW1uTmFtZT8pIHtcbiAgICAvLyB9XG5cbiAgICBwcml2YXRlIGNvbXBhcmVHcm91cGluZ0V4cHJlc3Npb25zKGN1cnJlbnQsIGdyb3VwaW5nQXJncykge1xuICAgICAgICBjb25zdCBuZXdFeHByZXNzaW9ucyA9IGdyb3VwaW5nQXJncy5leHByZXNzaW9ucy5tYXAocmVjb3JkID0+IHJlY29yZC5maWVsZE5hbWUpO1xuICAgICAgICBjb25zdCByZW1vdmVkQ29scyA9IGdyb3VwaW5nQXJncy51bmdyb3VwZWRDb2x1bW5zO1xuICAgICAgICBpZiAoY3VycmVudC5sZW5ndGggPD0gbmV3RXhwcmVzc2lvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdFeHByID0gbmV3RXhwcmVzc2lvbnMuc2xpY2UoMCwgY3VycmVudC5sZW5ndGgpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBpZiAoY3VycmVudC50b1N0cmluZygpICE9PSBuZXdFeHByKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhclN1bW1hcnlDYWNoZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgY3VyckV4cHIgPSBjdXJyZW50LnNsaWNlKDAsIG5ld0V4cHJlc3Npb25zLmxlbmd0aCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGlmIChjdXJyRXhwciAhPT0gbmV3RXhwcmVzc2lvbnMudG9TdHJpbmcoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJTdW1tYXJ5Q2FjaGUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZW1vdmVkQ29scy5tYXAoY29sID0+IGNvbC5maWVsZCkuZm9yRWFjaChjb2xOYW1lID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1bW1hcnlDYWNoZU1hcC5mb3JFYWNoKChjYWNoZSwgaWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlkLmluZGV4T2YoY29sTmFtZSkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1bW1hcnlDYWNoZU1hcC5kZWxldGUoaWQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0IGlzVHJlZUdyaWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQubmF0aXZlRWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpZ3gtdHJlZS1ncmlkJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBpc0hpZXJhcmNoaWNhbEdyaWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQubmF0aXZlRWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpZ3gtaGllcmFyY2hpY2FsLWdyaWQnO1xuICAgIH1cblxufVxuIl19
@@ -95,10 +95,10 @@ export class IgxSummaryCellComponent {
95
95
  }
96
96
  return summary.summaryResult;
97
97
  }
98
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: IgxSummaryCellComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
99
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.0.3", type: IgxSummaryCellComponent, isStandalone: true, selector: "igx-grid-summary-cell", inputs: { summaryResults: "summaryResults", column: "column", firstCellIndentation: "firstCellIndentation", hasSummary: ["hasSummary", "hasSummary", booleanAttribute], density: "density", summaryFormatter: "summaryFormatter", summaryTemplate: "summaryTemplate", active: "active", rowIndex: "rowIndex" }, host: { listeners: { "pointerdown": "activate()" }, properties: { "class.igx-grid-summary--active": "this.active", "attr.data-rowIndex": "this.rowIndex", "attr.data-visibleIndex": "this.visibleColumnIndex", "attr.id": "this.attrCellID" } }, ngImport: i0, template: "<ng-container *ngIf=\"hasSummary\">\n <ng-container *ngTemplateOutlet=\"summaryTemplate ? summaryTemplate : defaultSummary; context: { $implicit: summaryResults }\">\n </ng-container>\n</ng-container>\n <ng-template #defaultSummary>\n <ng-container *ngFor=\"let summary of summaryResults\" >\n <div class=\"igx-grid-summary__item\" [style.height.px]=\"itemHeight\">\n\n <span class=\"igx-grid-summary__label\" [title]=\"summary.label\">{{ translateSummary(summary) }}</span>\n <span class=\"igx-grid-summary__result\" [title]=\"formatSummaryResult(summary)\">\n {{\n formatSummaryResult(summary)\n }}\n </span>\n </div>\n </ng-container>\n </ng-template>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
98
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxSummaryCellComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
99
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.0.5", type: IgxSummaryCellComponent, isStandalone: true, selector: "igx-grid-summary-cell", inputs: { summaryResults: "summaryResults", column: "column", firstCellIndentation: "firstCellIndentation", hasSummary: ["hasSummary", "hasSummary", booleanAttribute], density: "density", summaryFormatter: "summaryFormatter", summaryTemplate: "summaryTemplate", active: "active", rowIndex: "rowIndex" }, host: { listeners: { "pointerdown": "activate()" }, properties: { "class.igx-grid-summary--active": "this.active", "attr.data-rowIndex": "this.rowIndex", "attr.data-visibleIndex": "this.visibleColumnIndex", "attr.id": "this.attrCellID" } }, ngImport: i0, template: "<ng-container *ngIf=\"hasSummary\">\n <ng-container *ngTemplateOutlet=\"summaryTemplate ? summaryTemplate : defaultSummary; context: { $implicit: summaryResults }\">\n </ng-container>\n</ng-container>\n <ng-template #defaultSummary>\n <ng-container *ngFor=\"let summary of summaryResults\" >\n <div class=\"igx-grid-summary__item\" [style.height.px]=\"itemHeight\">\n\n <span class=\"igx-grid-summary__label\" [title]=\"summary.label\">{{ translateSummary(summary) }}</span>\n <span class=\"igx-grid-summary__result\" [title]=\"formatSummaryResult(summary)\">\n {{\n formatSummaryResult(summary)\n }}\n </span>\n </div>\n </ng-container>\n </ng-template>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
100
100
  }
101
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: IgxSummaryCellComponent, decorators: [{
101
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxSummaryCellComponent, decorators: [{
102
102
  type: Component,
103
103
  args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'igx-grid-summary-cell', standalone: true, imports: [NgIf, NgTemplateOutlet, NgFor], template: "<ng-container *ngIf=\"hasSummary\">\n <ng-container *ngTemplateOutlet=\"summaryTemplate ? summaryTemplate : defaultSummary; context: { $implicit: summaryResults }\">\n </ng-container>\n</ng-container>\n <ng-template #defaultSummary>\n <ng-container *ngFor=\"let summary of summaryResults\" >\n <div class=\"igx-grid-summary__item\" [style.height.px]=\"itemHeight\">\n\n <span class=\"igx-grid-summary__label\" [title]=\"summary.label\">{{ translateSummary(summary) }}</span>\n <span class=\"igx-grid-summary__result\" [title]=\"formatSummaryResult(summary)\">\n {{\n formatSummaryResult(summary)\n }}\n </span>\n </div>\n </ng-container>\n </ng-template>\n" }]
104
104
  }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { summaryResults: [{
@@ -66,10 +66,10 @@ export class IgxSummaryRowComponent {
66
66
  $implicit: row
67
67
  };
68
68
  }
69
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: IgxSummaryRowComponent, deps: [{ token: IGX_GRID_BASE }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
70
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.3", type: IgxSummaryRowComponent, isStandalone: true, selector: "igx-grid-summary-row", inputs: { summaries: "summaries", gridID: "gridID", index: "index", firstCellIndentation: "firstCellIndentation" }, host: { properties: { "attr.data-rowIndex": "this.dataRowIndex" } }, providers: [IgxForOfSyncService], viewQueries: [{ propertyName: "virtDirRow", first: true, predicate: ["igxDirRef"], descendants: true, read: IgxGridForOfDirective }, { propertyName: "_summaryCells", predicate: IgxSummaryCellComponent, descendants: true, read: IgxSummaryCellComponent }], ngImport: i0, template: "<ng-container *ngIf=\"summaries.size\">\n <ng-container *ngIf=\"grid.summariesMargin\">\n <div\n class=\"igx-grid__summaries-patch\"\n [style.min-width.px]=\"grid.summariesMargin\"\n [style.flex-basis.px]=\"grid.summariesMargin\"\n (pointerdown)=\"$event.preventDefault()\"\n ></div>\n </ng-container>\n <ng-container *ngIf=\"pinnedColumns.length > 0 && grid.isPinningToStart\">\n <ng-container *ngTemplateOutlet=\"summaryCellTemplate; context: getContext(this)\"></ng-container>\n </ng-container>\n <ng-template igxGridFor let-col [igxGridForOf]=\"unpinnedColumns | igxNotGrouped\" [igxForScrollContainer]=\"grid.parentVirtDir\" let-colIndex=\"index\" [igxForScrollOrientation]=\"'horizontal'\" [igxForContainerSize]=\"grid.unpinnedWidth\" [igxForTrackBy]=\"grid.trackColumnChanges\" [igxForSizePropName]='\"calcPixelWidth\"' #igxDirRef>\n <igx-grid-summary-cell\n class=\"igx-grid-summary igx-grid-summary--fw\"\n role=\"cell\"\n [class.igx-grid-summary--cosy]=\"grid.displayDensity === 'cosy'\"\n [class.igx-grid-summary--compact]=\"grid.displayDensity === 'compact'\"\n [class.igx-grid-summary--empty]=\"!col.hasSummary\"\n [class.igx-grid-summary--pinned-last]=\"col.isLastPinned\"\n [column]=\"col\"\n [rowIndex]=\"index\"\n [firstCellIndentation]=\"firstCellIndentation\"\n [summaryResults]=\"getColumnSummaries(col.field)\"\n [summaryTemplate]=\"col.summaryTemplate\"\n [hasSummary]=\"col.hasSummary\"\n [density]=\"grid.displayDensity\"\n [summaryFormatter]=\"col.summaryFormatter\"\n [active]=\"isCellActive(col.visibleIndex)\"\n [style.max-height.px]=\"minHeight\"\n [style.min-height.px]=\"minHeight\"\n [style.min-width]=\"col.resolvedWidth\"\n [style.max-width]=\"col.resolvedWidth\"\n [style.flex-basis]=\"col.resolvedWidth\">\n </igx-grid-summary-cell>\n </ng-template>\n <ng-container *ngIf=\"pinnedColumns.length > 0 && !grid.isPinningToStart\">\n <ng-container *ngTemplateOutlet=\"summaryCellTemplate; context: getContext(this)\"></ng-container>\n </ng-container>\n</ng-container>\n\n<ng-template #summaryCellTemplate let-col>\n <igx-grid-summary-cell *ngFor=\"let col of pinnedColumns | igxNotGrouped\"\n role=\"cell\"\n class=\"igx-grid-summary igx-grid-summary--fw igx-grid-summary--pinned\"\n [class.igx-grid-summary--cosy]=\"grid.displayDensity === 'cosy'\"\n [class.igx-grid-summary--compact]=\"grid.displayDensity === 'compact'\"\n [class.igx-grid-summary--empty]=\"!col.hasSummary\"\n [class.igx-grid-summary--pinned-first]=\"col.isFirstPinned\"\n [class.igx-grid-summary--pinned-last]=\"col.isLastPinned\"\n [column]=\"col\"\n [firstCellIndentation]=\"firstCellIndentation\"\n [rowIndex]=\"index\"\n [summaryResults]=\"getColumnSummaries(col.field)\"\n [summaryTemplate]=\"col.summaryTemplate\"\n [hasSummary]=\"col.hasSummary\"\n [density]=\"grid.displayDensity\"\n [active]=\"isCellActive(col.visibleIndex)\"\n [style.max-height.px]=\"minHeight\"\n [style.min-height.px]=\"minHeight\"\n [style.min-width]=\"col.resolvedWidth\"\n [style.max-width]=\"col.resolvedWidth\"\n [style.flex-basis]=\"col.resolvedWidth\"\n [style.left]=\"col.rightPinnedOffset\">\n </igx-grid-summary-cell>\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: IgxGridForOfDirective, selector: "[igxGridFor][igxGridForOf]", inputs: ["igxGridForOf", "igxGridForOfUniqueSizeCache", "igxGridForOfVariableSizes"], outputs: ["dataChanging"] }, { kind: "component", type: IgxSummaryCellComponent, selector: "igx-grid-summary-cell", inputs: ["summaryResults", "column", "firstCellIndentation", "hasSummary", "density", "summaryFormatter", "summaryTemplate", "active", "rowIndex"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: IgxGridNotGroupedPipe, name: "igxNotGrouped" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
69
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxSummaryRowComponent, deps: [{ token: IGX_GRID_BASE }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
70
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.5", type: IgxSummaryRowComponent, isStandalone: true, selector: "igx-grid-summary-row", inputs: { summaries: "summaries", gridID: "gridID", index: "index", firstCellIndentation: "firstCellIndentation" }, host: { properties: { "attr.data-rowIndex": "this.dataRowIndex" } }, providers: [IgxForOfSyncService], viewQueries: [{ propertyName: "virtDirRow", first: true, predicate: ["igxDirRef"], descendants: true, read: IgxGridForOfDirective }, { propertyName: "_summaryCells", predicate: IgxSummaryCellComponent, descendants: true, read: IgxSummaryCellComponent }], ngImport: i0, template: "<ng-container *ngIf=\"summaries.size\">\n <ng-container *ngIf=\"grid.summariesMargin\">\n <div\n class=\"igx-grid__summaries-patch\"\n [style.min-width.px]=\"grid.summariesMargin\"\n [style.flex-basis.px]=\"grid.summariesMargin\"\n (pointerdown)=\"$event.preventDefault()\"\n ></div>\n </ng-container>\n <ng-container *ngIf=\"pinnedColumns.length > 0 && grid.isPinningToStart\">\n <ng-container *ngTemplateOutlet=\"summaryCellTemplate; context: getContext(this)\"></ng-container>\n </ng-container>\n <ng-template igxGridFor let-col [igxGridForOf]=\"unpinnedColumns | igxNotGrouped\" [igxForScrollContainer]=\"grid.parentVirtDir\" let-colIndex=\"index\" [igxForScrollOrientation]=\"'horizontal'\" [igxForContainerSize]=\"grid.unpinnedWidth\" [igxForTrackBy]=\"grid.trackColumnChanges\" [igxForSizePropName]='\"calcPixelWidth\"' #igxDirRef>\n <igx-grid-summary-cell\n class=\"igx-grid-summary igx-grid-summary--fw\"\n role=\"cell\"\n [class.igx-grid-summary--cosy]=\"grid.displayDensity === 'cosy'\"\n [class.igx-grid-summary--compact]=\"grid.displayDensity === 'compact'\"\n [class.igx-grid-summary--empty]=\"!col.hasSummary\"\n [class.igx-grid-summary--pinned-last]=\"col.isLastPinned\"\n [column]=\"col\"\n [rowIndex]=\"index\"\n [firstCellIndentation]=\"firstCellIndentation\"\n [summaryResults]=\"getColumnSummaries(col.field)\"\n [summaryTemplate]=\"col.summaryTemplate\"\n [hasSummary]=\"col.hasSummary\"\n [density]=\"grid.displayDensity\"\n [summaryFormatter]=\"col.summaryFormatter\"\n [active]=\"isCellActive(col.visibleIndex)\"\n [style.max-height.px]=\"minHeight\"\n [style.min-height.px]=\"minHeight\"\n [style.min-width]=\"col.resolvedWidth\"\n [style.max-width]=\"col.resolvedWidth\"\n [style.flex-basis]=\"col.resolvedWidth\">\n </igx-grid-summary-cell>\n </ng-template>\n <ng-container *ngIf=\"pinnedColumns.length > 0 && !grid.isPinningToStart\">\n <ng-container *ngTemplateOutlet=\"summaryCellTemplate; context: getContext(this)\"></ng-container>\n </ng-container>\n</ng-container>\n\n<ng-template #summaryCellTemplate let-col>\n <igx-grid-summary-cell *ngFor=\"let col of pinnedColumns | igxNotGrouped\"\n role=\"cell\"\n class=\"igx-grid-summary igx-grid-summary--fw igx-grid-summary--pinned\"\n [class.igx-grid-summary--cosy]=\"grid.displayDensity === 'cosy'\"\n [class.igx-grid-summary--compact]=\"grid.displayDensity === 'compact'\"\n [class.igx-grid-summary--empty]=\"!col.hasSummary\"\n [class.igx-grid-summary--pinned-first]=\"col.isFirstPinned\"\n [class.igx-grid-summary--pinned-last]=\"col.isLastPinned\"\n [column]=\"col\"\n [firstCellIndentation]=\"firstCellIndentation\"\n [rowIndex]=\"index\"\n [summaryResults]=\"getColumnSummaries(col.field)\"\n [summaryTemplate]=\"col.summaryTemplate\"\n [hasSummary]=\"col.hasSummary\"\n [density]=\"grid.displayDensity\"\n [active]=\"isCellActive(col.visibleIndex)\"\n [style.max-height.px]=\"minHeight\"\n [style.min-height.px]=\"minHeight\"\n [style.min-width]=\"col.resolvedWidth\"\n [style.max-width]=\"col.resolvedWidth\"\n [style.flex-basis]=\"col.resolvedWidth\"\n [style.left]=\"col.rightPinnedOffset\">\n </igx-grid-summary-cell>\n</ng-template>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: IgxGridForOfDirective, selector: "[igxGridFor][igxGridForOf]", inputs: ["igxGridForOf", "igxGridForOfUniqueSizeCache", "igxGridForOfVariableSizes"], outputs: ["dataChanging"] }, { kind: "component", type: IgxSummaryCellComponent, selector: "igx-grid-summary-cell", inputs: ["summaryResults", "column", "firstCellIndentation", "hasSummary", "density", "summaryFormatter", "summaryTemplate", "active", "rowIndex"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: IgxGridNotGroupedPipe, name: "igxNotGrouped" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
71
71
  }
72
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: IgxSummaryRowComponent, decorators: [{
72
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: IgxSummaryRowComponent, decorators: [{
73
73
  type: Component,
74
74
  args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'igx-grid-summary-row', providers: [IgxForOfSyncService], standalone: true, imports: [NgIf, NgTemplateOutlet, IgxGridForOfDirective, IgxSummaryCellComponent, NgFor, IgxGridNotGroupedPipe], template: "<ng-container *ngIf=\"summaries.size\">\n <ng-container *ngIf=\"grid.summariesMargin\">\n <div\n class=\"igx-grid__summaries-patch\"\n [style.min-width.px]=\"grid.summariesMargin\"\n [style.flex-basis.px]=\"grid.summariesMargin\"\n (pointerdown)=\"$event.preventDefault()\"\n ></div>\n </ng-container>\n <ng-container *ngIf=\"pinnedColumns.length > 0 && grid.isPinningToStart\">\n <ng-container *ngTemplateOutlet=\"summaryCellTemplate; context: getContext(this)\"></ng-container>\n </ng-container>\n <ng-template igxGridFor let-col [igxGridForOf]=\"unpinnedColumns | igxNotGrouped\" [igxForScrollContainer]=\"grid.parentVirtDir\" let-colIndex=\"index\" [igxForScrollOrientation]=\"'horizontal'\" [igxForContainerSize]=\"grid.unpinnedWidth\" [igxForTrackBy]=\"grid.trackColumnChanges\" [igxForSizePropName]='\"calcPixelWidth\"' #igxDirRef>\n <igx-grid-summary-cell\n class=\"igx-grid-summary igx-grid-summary--fw\"\n role=\"cell\"\n [class.igx-grid-summary--cosy]=\"grid.displayDensity === 'cosy'\"\n [class.igx-grid-summary--compact]=\"grid.displayDensity === 'compact'\"\n [class.igx-grid-summary--empty]=\"!col.hasSummary\"\n [class.igx-grid-summary--pinned-last]=\"col.isLastPinned\"\n [column]=\"col\"\n [rowIndex]=\"index\"\n [firstCellIndentation]=\"firstCellIndentation\"\n [summaryResults]=\"getColumnSummaries(col.field)\"\n [summaryTemplate]=\"col.summaryTemplate\"\n [hasSummary]=\"col.hasSummary\"\n [density]=\"grid.displayDensity\"\n [summaryFormatter]=\"col.summaryFormatter\"\n [active]=\"isCellActive(col.visibleIndex)\"\n [style.max-height.px]=\"minHeight\"\n [style.min-height.px]=\"minHeight\"\n [style.min-width]=\"col.resolvedWidth\"\n [style.max-width]=\"col.resolvedWidth\"\n [style.flex-basis]=\"col.resolvedWidth\">\n </igx-grid-summary-cell>\n </ng-template>\n <ng-container *ngIf=\"pinnedColumns.length > 0 && !grid.isPinningToStart\">\n <ng-container *ngTemplateOutlet=\"summaryCellTemplate; context: getContext(this)\"></ng-container>\n </ng-container>\n</ng-container>\n\n<ng-template #summaryCellTemplate let-col>\n <igx-grid-summary-cell *ngFor=\"let col of pinnedColumns | igxNotGrouped\"\n role=\"cell\"\n class=\"igx-grid-summary igx-grid-summary--fw igx-grid-summary--pinned\"\n [class.igx-grid-summary--cosy]=\"grid.displayDensity === 'cosy'\"\n [class.igx-grid-summary--compact]=\"grid.displayDensity === 'compact'\"\n [class.igx-grid-summary--empty]=\"!col.hasSummary\"\n [class.igx-grid-summary--pinned-first]=\"col.isFirstPinned\"\n [class.igx-grid-summary--pinned-last]=\"col.isLastPinned\"\n [column]=\"col\"\n [firstCellIndentation]=\"firstCellIndentation\"\n [rowIndex]=\"index\"\n [summaryResults]=\"getColumnSummaries(col.field)\"\n [summaryTemplate]=\"col.summaryTemplate\"\n [hasSummary]=\"col.hasSummary\"\n [density]=\"grid.displayDensity\"\n [active]=\"isCellActive(col.visibleIndex)\"\n [style.max-height.px]=\"minHeight\"\n [style.min-height.px]=\"minHeight\"\n [style.min-width]=\"col.resolvedWidth\"\n [style.max-width]=\"col.resolvedWidth\"\n [style.flex-basis]=\"col.resolvedWidth\"\n [style.left]=\"col.rightPinnedOffset\">\n </igx-grid-summary-cell>\n</ng-template>\n" }]
75
75
  }], ctorParameters: () => [{ type: undefined, decorators: [{