@fundamental-ngx/core 0.40.4-rc.6 → 0.40.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 (814) hide show
  1. package/esm2020/action-bar/action-bar-actions/action-bar-actions.directive.mjs +3 -3
  2. package/esm2020/action-bar/action-bar-back/action-bar-back.directive.mjs +3 -3
  3. package/esm2020/action-bar/action-bar-description/action-bar-description.directive.mjs +3 -3
  4. package/esm2020/action-bar/action-bar-header/action-bar-header.directive.mjs +3 -3
  5. package/esm2020/action-bar/action-bar-mobile/action-bar-mobile.directive.mjs +3 -3
  6. package/esm2020/action-bar/action-bar-title/action-bar-title.component.mjs +3 -3
  7. package/esm2020/action-bar/action-bar.component.mjs +3 -3
  8. package/esm2020/action-bar/action-bar.module.mjs +4 -4
  9. package/esm2020/action-sheet/action-sheet-body/action-sheet-body.component.mjs +3 -3
  10. package/esm2020/action-sheet/action-sheet-control/action-sheet-control.component.mjs +3 -3
  11. package/esm2020/action-sheet/action-sheet-item/action-sheet-item.component.mjs +3 -3
  12. package/esm2020/action-sheet/action-sheet-mobile/action-sheet-mobile.component.mjs +3 -3
  13. package/esm2020/action-sheet/action-sheet-mobile/action-sheet-mobile.module.mjs +4 -4
  14. package/esm2020/action-sheet/action-sheet.component.mjs +3 -3
  15. package/esm2020/action-sheet/action-sheet.module.mjs +4 -4
  16. package/esm2020/action-sheet/deprecated-action-sheet-compact.directive.mjs +3 -3
  17. package/esm2020/alert/alert-service/alert.service.mjs +3 -3
  18. package/esm2020/alert/alert-utils/alert-container.component.mjs +3 -3
  19. package/esm2020/alert/alert.component.mjs +3 -3
  20. package/esm2020/alert/alert.module.mjs +4 -4
  21. package/esm2020/avatar/avatar.component.mjs +3 -3
  22. package/esm2020/avatar/avatar.module.mjs +4 -4
  23. package/esm2020/avatar-group/avatar-group.component.mjs +3 -3
  24. package/esm2020/avatar-group/avatar-group.module.mjs +4 -4
  25. package/esm2020/avatar-group/directives/avatar-group-focusable-avatar.directive.mjs +3 -3
  26. package/esm2020/avatar-group/directives/avatar-group-item.directive.mjs +3 -3
  27. package/esm2020/avatar-group/directives/avatar-group-overflow-body.directive.mjs +3 -3
  28. package/esm2020/avatar-group/directives/avatar-group-overflow-button-text.directive.mjs +3 -3
  29. package/esm2020/avatar-group/directives/avatar-group-overflow-button.directive.mjs +3 -3
  30. package/esm2020/avatar-group/directives/avatar-group-overflow-item.directive.mjs +3 -3
  31. package/esm2020/avatar-group/directives/avatar-group-popover-control.directive.mjs +3 -3
  32. package/esm2020/bar/bar.component.mjs +3 -3
  33. package/esm2020/bar/bar.module.mjs +4 -4
  34. package/esm2020/bar/button-bar/button-bar.component.mjs +3 -3
  35. package/esm2020/bar/deprecated-bar-button-content-density.directive.mjs +3 -3
  36. package/esm2020/bar/deprecated-bar-content-density.directive.mjs +3 -3
  37. package/esm2020/bar/directives/bar-element.directive.mjs +3 -3
  38. package/esm2020/bar/directives/bar-left.directive.mjs +3 -3
  39. package/esm2020/bar/directives/bar-middle.directive.mjs +3 -3
  40. package/esm2020/bar/directives/bar-right.directive.mjs +3 -3
  41. package/esm2020/breadcrumb/breadcrumb-item.component.mjs +3 -3
  42. package/esm2020/breadcrumb/breadcrumb.component.mjs +3 -3
  43. package/esm2020/breadcrumb/breadcrumb.module.mjs +4 -4
  44. package/esm2020/breadcrumb/deprecated-breadcrumbs-compact.directive.mjs +3 -3
  45. package/esm2020/busy-indicator/busy-indicator-extended/busy-indicator-extended.directive.mjs +3 -3
  46. package/esm2020/busy-indicator/busy-indicator.component.mjs +3 -3
  47. package/esm2020/busy-indicator/busy-indicator.module.mjs +4 -4
  48. package/esm2020/button/base-button.mjs +3 -3
  49. package/esm2020/button/button.component.mjs +3 -3
  50. package/esm2020/button/button.module.mjs +4 -4
  51. package/esm2020/button/deprecated-button-content-density.directive.mjs +3 -3
  52. package/esm2020/calendar/calendar-directives.mjs +3 -3
  53. package/esm2020/calendar/calendar-header/calendar-header.component.mjs +3 -3
  54. package/esm2020/calendar/calendar-views/calendar-aggregated-year-view/calendar-aggregated-year-view.component.mjs +3 -3
  55. package/esm2020/calendar/calendar-views/calendar-day-view/calendar-day-view.component.mjs +3 -3
  56. package/esm2020/calendar/calendar-views/calendar-month-view/calendar-month-view.component.mjs +3 -3
  57. package/esm2020/calendar/calendar-views/calendar-year-view/calendar-year-view.component.mjs +3 -3
  58. package/esm2020/calendar/calendar.component.mjs +3 -3
  59. package/esm2020/calendar/calendar.module.mjs +4 -4
  60. package/esm2020/calendar/calendar.service.mjs +3 -3
  61. package/esm2020/calendar/deprecated-calendar-content-density.directive.mjs +3 -3
  62. package/esm2020/calendar/i18n/calendar-i18n-labels.mjs +3 -3
  63. package/esm2020/card/card-content.component.mjs +3 -3
  64. package/esm2020/card/card-counter.directive.mjs +3 -3
  65. package/esm2020/card/card-footer-action-item.directive.mjs +3 -3
  66. package/esm2020/card/card-footer.component.mjs +3 -3
  67. package/esm2020/card/card-header.component.mjs +3 -3
  68. package/esm2020/card/card-loader.component.mjs +3 -3
  69. package/esm2020/card/card-second-subtitle.directive.mjs +3 -3
  70. package/esm2020/card/card-subtitle.directive.mjs +3 -3
  71. package/esm2020/card/card-title.directive.mjs +3 -3
  72. package/esm2020/card/card.component.mjs +3 -3
  73. package/esm2020/card/card.module.mjs +4 -4
  74. package/esm2020/card/deprecated-card-content-density.directive.mjs +3 -3
  75. package/esm2020/card/kpi/card-kpi-analytics-content.directive.mjs +3 -3
  76. package/esm2020/card/kpi/card-kpi-analytics-label.directive.mjs +3 -3
  77. package/esm2020/card/kpi/card-kpi-analytics.directive.mjs +3 -3
  78. package/esm2020/card/kpi/card-kpi-header.component.mjs +3 -3
  79. package/esm2020/card/kpi/card-kpi-scale-icon.directive.mjs +3 -3
  80. package/esm2020/card/kpi/card-kpi-scale-text.directive.mjs +3 -3
  81. package/esm2020/card/kpi/card-kpi-value.directive.mjs +3 -3
  82. package/esm2020/carousel/carousel-item/carousel-item.component.mjs +3 -3
  83. package/esm2020/carousel/carousel-item.directive.mjs +3 -3
  84. package/esm2020/carousel/carousel.component.mjs +3 -3
  85. package/esm2020/carousel/carousel.directive.mjs +3 -3
  86. package/esm2020/carousel/carousel.module.mjs +4 -4
  87. package/esm2020/carousel/carousel.service.mjs +3 -3
  88. package/esm2020/checkbox/checkbox/checkbox.component.mjs +3 -3
  89. package/esm2020/checkbox/checkbox.module.mjs +4 -4
  90. package/esm2020/checkbox/deprecated-checkbox-content-density.directive.mjs +3 -3
  91. package/esm2020/combobox/combobox-mobile/combobox-mobile.component.mjs +3 -3
  92. package/esm2020/combobox/combobox-mobile/combobox-mobile.module.mjs +4 -4
  93. package/esm2020/combobox/combobox.component.mjs +3 -3
  94. package/esm2020/combobox/combobox.module.mjs +4 -4
  95. package/esm2020/combobox/deprecated-combobox-content-density.directive.mjs +3 -3
  96. package/esm2020/combobox/list-group.pipe.mjs +3 -3
  97. package/esm2020/content-density/classes/deprecated-compact.directive.mjs +3 -3
  98. package/esm2020/content-density/classes/deprecated-condensed.directive.mjs +3 -3
  99. package/esm2020/content-density/classes/deprecated-content-density.directive.mjs +3 -3
  100. package/esm2020/content-density/classes/deprecated-cozy.directive.mjs +3 -3
  101. package/esm2020/content-density/content-density.module.mjs +4 -4
  102. package/esm2020/content-density/directives/content-density.directive.mjs +3 -3
  103. package/esm2020/content-density/providers/local-content-density-storage.mjs +3 -3
  104. package/esm2020/content-density/providers/memory-content-density-storage.mjs +3 -3
  105. package/esm2020/content-density/providers/url-content-density-storage.mjs +3 -3
  106. package/esm2020/content-density/services/content-density-observer.service.mjs +3 -3
  107. package/esm2020/content-density/services/deprecated-content-density.service.mjs +3 -3
  108. package/esm2020/content-density/services/global-content-density.service.mjs +3 -3
  109. package/esm2020/date-picker/date-picker.component.mjs +3 -3
  110. package/esm2020/date-picker/date-picker.module.mjs +4 -4
  111. package/esm2020/date-picker/deprecated-date-picker-compact.directive.mjs +3 -3
  112. package/esm2020/datetime/datetime-format.pipes.mjs +9 -9
  113. package/esm2020/datetime/fd-datetime-adapter.mjs +3 -3
  114. package/esm2020/datetime/fd-datetime-pipes.module.mjs +4 -4
  115. package/esm2020/datetime/fd-datetime.module.mjs +8 -8
  116. package/esm2020/datetime-picker/datetime-picker.component.mjs +3 -3
  117. package/esm2020/datetime-picker/datetime-picker.module.mjs +4 -4
  118. package/esm2020/datetime-picker/deprecated-date-time-picker-content-density.directive.mjs +3 -3
  119. package/esm2020/dialog/base/dialog-base.class.mjs +3 -3
  120. package/esm2020/dialog/base/dialog-base.service.mjs +3 -3
  121. package/esm2020/dialog/base/dialog-footer-base.class.mjs +3 -3
  122. package/esm2020/dialog/base/dialog-header-base.class.mjs +3 -3
  123. package/esm2020/dialog/dialog-body/dialog-body.component.mjs +3 -3
  124. package/esm2020/dialog/dialog-close-button/dialog-close-button.component.mjs +3 -3
  125. package/esm2020/dialog/dialog-container/dialog-container.component.mjs +3 -3
  126. package/esm2020/dialog/dialog-default/dialog-default.component.mjs +3 -3
  127. package/esm2020/dialog/dialog-footer/dialog-footer.component.mjs +3 -3
  128. package/esm2020/dialog/dialog-footer-button/dialog-footer-button.component.mjs +3 -3
  129. package/esm2020/dialog/dialog-header/dialog-header.component.mjs +3 -3
  130. package/esm2020/dialog/dialog-service/dialog.service.mjs +3 -3
  131. package/esm2020/dialog/dialog.component.mjs +3 -3
  132. package/esm2020/dialog/dialog.module.mjs +4 -4
  133. package/esm2020/dialog/directives/dialog-decisive-button.directive.mjs +3 -3
  134. package/esm2020/dialog/directives/dialog-title.directive.mjs +3 -3
  135. package/esm2020/dialog/utils/dialog-config.class.mjs +3 -3
  136. package/esm2020/dialog/utils/dialog-overlay.container.mjs +3 -3
  137. package/esm2020/dialog/utils/dialog-ref.class.mjs +3 -3
  138. package/esm2020/dynamic-page/deprecated-dynamic-page-compact.directive.mjs +3 -3
  139. package/esm2020/dynamic-page/dynamic-page-content/dynamic-page-content.component.mjs +3 -3
  140. package/esm2020/dynamic-page/dynamic-page-footer/dynamic-page-footer.component.mjs +3 -3
  141. package/esm2020/dynamic-page/dynamic-page-header/actions/dynamic-page-base-actions.mjs +3 -3
  142. package/esm2020/dynamic-page/dynamic-page-header/actions/dynamic-page-global-actions.component.mjs +3 -3
  143. package/esm2020/dynamic-page/dynamic-page-header/actions/dynamic-page-layout-actions.component.mjs +3 -3
  144. package/esm2020/dynamic-page/dynamic-page-header/actions/dynamic-page-title-content.component.mjs +4 -4
  145. package/esm2020/dynamic-page/dynamic-page-header/header/dynamic-page-header.component.mjs +3 -3
  146. package/esm2020/dynamic-page/dynamic-page-header/subheader/dynamic-page-subheader.component.mjs +3 -3
  147. package/esm2020/dynamic-page/dynamic-page-wrapper.directive.mjs +3 -3
  148. package/esm2020/dynamic-page/dynamic-page.component.mjs +3 -3
  149. package/esm2020/dynamic-page/dynamic-page.config.mjs +3 -3
  150. package/esm2020/dynamic-page/dynamic-page.module.mjs +4 -4
  151. package/esm2020/dynamic-page/dynamic-page.service.mjs +3 -3
  152. package/esm2020/dynamic-side-content/dynamic-side-content-main.component.mjs +3 -3
  153. package/esm2020/dynamic-side-content/dynamic-side-content-side.component.mjs +3 -3
  154. package/esm2020/dynamic-side-content/dynamic-side-content.component.mjs +3 -3
  155. package/esm2020/dynamic-side-content/dynamic-side-content.module.mjs +4 -4
  156. package/esm2020/facets/content/facet-content.component.mjs +3 -3
  157. package/esm2020/facets/facet/facet.component.mjs +3 -3
  158. package/esm2020/facets/facet-group.component.mjs +3 -3
  159. package/esm2020/facets/facet.module.mjs +4 -4
  160. package/esm2020/feed-input/directives/feed-input-avatar.directive.mjs +3 -3
  161. package/esm2020/feed-input/directives/feed-input-button.directive.mjs +3 -3
  162. package/esm2020/feed-input/directives/feed-input-textarea.directive.mjs +3 -3
  163. package/esm2020/feed-input/feed-input.component.mjs +3 -3
  164. package/esm2020/feed-input/feed-input.module.mjs +4 -4
  165. package/esm2020/feed-list-item/components/feed-list-action/feed-list-action.component.mjs +3 -3
  166. package/esm2020/feed-list-item/components/feed-list-avatar/feed-list-avatar.component.mjs +3 -3
  167. package/esm2020/feed-list-item/components/feed-list-footer/feed-list-footer.component.mjs +3 -3
  168. package/esm2020/feed-list-item/components/item/feed-list-item.component.mjs +3 -3
  169. package/esm2020/feed-list-item/components/list/feed-list.component.mjs +3 -3
  170. package/esm2020/feed-list-item/directives/byline.directive.mjs +3 -3
  171. package/esm2020/feed-list-item/feed-list-item.module.mjs +4 -4
  172. package/esm2020/file-uploader/deprecated-file-uploader-content-density.directive.mjs +3 -3
  173. package/esm2020/file-uploader/directives/file-uploader-dragndrop.directive.mjs +3 -3
  174. package/esm2020/file-uploader/directives/file-uploader-select.directive.mjs +3 -3
  175. package/esm2020/file-uploader/file-uploader.component.mjs +3 -3
  176. package/esm2020/file-uploader/file-uploader.module.mjs +4 -4
  177. package/esm2020/file-uploader/file-uploader.service.mjs +3 -3
  178. package/esm2020/fixed-card-layout/fixed-card-layout-item/fixed-card-layout-item.component.mjs +3 -3
  179. package/esm2020/fixed-card-layout/fixed-card-layout.component.mjs +6 -6
  180. package/esm2020/fixed-card-layout/fixed-card-layout.module.mjs +4 -4
  181. package/esm2020/flexible-column-layout/flexible-column-layout.component.mjs +3 -3
  182. package/esm2020/flexible-column-layout/flexible-column-layout.module.mjs +4 -4
  183. package/esm2020/form/fieldset/fieldset.component.mjs +3 -3
  184. package/esm2020/form/fieldset/fieldset.module.mjs +4 -4
  185. package/esm2020/form/form-control/deprecated-form-control-content-density.directive.mjs +3 -3
  186. package/esm2020/form/form-control/form-control.component.mjs +3 -3
  187. package/esm2020/form/form-control/form-control.module.mjs +4 -4
  188. package/esm2020/form/form-control/input-form-control.directive.mjs +3 -3
  189. package/esm2020/form/form-control/textarea-form-control.directive.mjs +3 -3
  190. package/esm2020/form/form-group/form-group.component.mjs +3 -3
  191. package/esm2020/form/form-group/form-group.module.mjs +4 -4
  192. package/esm2020/form/form-header/form-header.component.mjs +3 -3
  193. package/esm2020/form/form-header/form-header.module.mjs +4 -4
  194. package/esm2020/form/form-input-message-group/form-input-message-group.component.mjs +3 -3
  195. package/esm2020/form/form-input-message-group/form-input-message-group.module.mjs +4 -4
  196. package/esm2020/form/form-item/form-item.component.mjs +3 -3
  197. package/esm2020/form/form-item/form-item.module.mjs +4 -4
  198. package/esm2020/form/form-label/form-label.component.mjs +3 -3
  199. package/esm2020/form/form-label/form-label.module.mjs +4 -4
  200. package/esm2020/form/form-legend/form-legend.directive.mjs +3 -3
  201. package/esm2020/form/form-legend/form-legend.module.mjs +4 -4
  202. package/esm2020/form/form-message/form-message.component.mjs +3 -3
  203. package/esm2020/form/form-message/form-message.module.mjs +4 -4
  204. package/esm2020/form/form-message/popover-form-message.service.mjs +3 -3
  205. package/esm2020/form/form.module.mjs +4 -4
  206. package/esm2020/formatted-text/formatted-text.component.mjs +3 -3
  207. package/esm2020/formatted-text/formatted-text.module.mjs +4 -4
  208. package/esm2020/fundamental-ngx.module.mjs +4 -4
  209. package/esm2020/grid-list/components/grid-list/grid-list-base.component.mjs +3 -3
  210. package/esm2020/grid-list/components/grid-list/grid-list.component.mjs +3 -3
  211. package/esm2020/grid-list/components/grid-list-filter-bar/grid-list-filter-bar.component.mjs +3 -3
  212. package/esm2020/grid-list/components/grid-list-footer/grid-list-footer.component.mjs +3 -3
  213. package/esm2020/grid-list/components/grid-list-group-header/grid-list-group-header.component.mjs +3 -3
  214. package/esm2020/grid-list/components/grid-list-item/grid-list-item.component.mjs +3 -3
  215. package/esm2020/grid-list/components/grid-list-item-footer-bar/grid-list-item-footer-bar.component.mjs +3 -3
  216. package/esm2020/grid-list/components/grid-list-item-toolbar/grid-list-item-toolbar.component.mjs +3 -3
  217. package/esm2020/grid-list/components/grid-list-more-btn/grid-list-more-btn.component.mjs +3 -3
  218. package/esm2020/grid-list/components/grid-list-title-bar/grid-list-title-bar.component.mjs +3 -3
  219. package/esm2020/grid-list/components/grid-list-title-bar/grid-list-title-bar.directive.mjs +3 -3
  220. package/esm2020/grid-list/components/grid-list-title-bar-spacer/grid-list-title-bar-spacer.component.mjs +6 -6
  221. package/esm2020/grid-list/directives/grid-list-item-body.directive.mjs +3 -3
  222. package/esm2020/grid-list/directives/grid-list-item-image.directive.mjs +3 -3
  223. package/esm2020/grid-list/grid-list.module.mjs +4 -4
  224. package/esm2020/icon/icon.component.mjs +3 -3
  225. package/esm2020/icon/icon.module.mjs +4 -4
  226. package/esm2020/illustrated-message/components/illustrated-message-actions/illustrated-message-actions.component.mjs +3 -3
  227. package/esm2020/illustrated-message/components/illustrated-message-figcaption/illustrated-message-figcaption.component.mjs +3 -3
  228. package/esm2020/illustrated-message/directives/illustrated-message-text/illustrated-message-text.directive.mjs +3 -3
  229. package/esm2020/illustrated-message/directives/illustrated-message-title/illustrated-message-title.directive.mjs +3 -3
  230. package/esm2020/illustrated-message/illustrated-message.component.mjs +3 -3
  231. package/esm2020/illustrated-message/illustrated-message.module.mjs +4 -4
  232. package/esm2020/infinite-scroll/infinite-scroll.directive.mjs +3 -3
  233. package/esm2020/infinite-scroll/infinite-scroll.module.mjs +4 -4
  234. package/esm2020/info-label/info-label.component.mjs +3 -3
  235. package/esm2020/info-label/info-label.module.mjs +4 -4
  236. package/esm2020/inline-help/inline-help.directive.mjs +4 -11
  237. package/esm2020/inline-help/inline-help.module.mjs +4 -4
  238. package/esm2020/input-group/deprecated-input-group-compact.directive.mjs +3 -3
  239. package/esm2020/input-group/input-group-directives.mjs +12 -12
  240. package/esm2020/input-group/input-group.component.mjs +3 -3
  241. package/esm2020/input-group/input-group.module.mjs +4 -4
  242. package/esm2020/layout-grid/directives/layout-grid-col.directive.mjs +3 -3
  243. package/esm2020/layout-grid/directives/layout-grid-row.directive.mjs +3 -3
  244. package/esm2020/layout-grid/layout-grid.component.mjs +3 -3
  245. package/esm2020/layout-grid/layout-grid.module.mjs +4 -4
  246. package/esm2020/layout-panel/layout-panel-actions/layout-panel-actions.component.mjs +3 -3
  247. package/esm2020/layout-panel/layout-panel-body/layout-panel-body.component.mjs +3 -3
  248. package/esm2020/layout-panel/layout-panel-description/layout-panel-description.component.mjs +3 -3
  249. package/esm2020/layout-panel/layout-panel-filters/layout-panel-filters.component.mjs +3 -3
  250. package/esm2020/layout-panel/layout-panel-footer/layout-panel-footer.component.mjs +3 -3
  251. package/esm2020/layout-panel/layout-panel-head/layout-panel-head.component.mjs +3 -3
  252. package/esm2020/layout-panel/layout-panel-header/layout-panel-header.component.mjs +3 -3
  253. package/esm2020/layout-panel/layout-panel-title/layout-panel-title.directive.mjs +3 -3
  254. package/esm2020/layout-panel/layout-panel.component.mjs +3 -3
  255. package/esm2020/layout-panel/layout-panel.module.mjs +4 -4
  256. package/esm2020/link/link.component.mjs +3 -3
  257. package/esm2020/link/link.module.mjs +4 -4
  258. package/esm2020/list/deprecated-list-content-density,directive.mjs +3 -3
  259. package/esm2020/list/directives/byline/list-byline-left.directive.mjs +3 -3
  260. package/esm2020/list/directives/byline/list-byline-right.directive.mjs +3 -3
  261. package/esm2020/list/directives/byline/list-byline.directive.mjs +3 -3
  262. package/esm2020/list/directives/byline/list-content.directive.mjs +3 -3
  263. package/esm2020/list/directives/byline/list-thumbnail.directive.mjs +3 -3
  264. package/esm2020/list/directives/list-footer.directive.mjs +3 -3
  265. package/esm2020/list/directives/list-group-header.directive.mjs +3 -3
  266. package/esm2020/list/directives/list-icon.directive.mjs +3 -3
  267. package/esm2020/list/directives/list-link.directive.mjs +3 -3
  268. package/esm2020/list/directives/list-navigation-item-arrow.directive.mjs +7 -13
  269. package/esm2020/list/directives/list-navigation-item-text.directive.mjs +3 -3
  270. package/esm2020/list/directives/list-secondary.directive.mjs +3 -3
  271. package/esm2020/list/directives/list-title-text.directive.mjs +3 -3
  272. package/esm2020/list/directives/list-title.directive.mjs +3 -3
  273. package/esm2020/list/list-focus-item.model.mjs +3 -3
  274. package/esm2020/list/list-item/list-item.component.mjs +3 -3
  275. package/esm2020/list/list-message.directive.mjs +3 -3
  276. package/esm2020/list/list-navigation-item/list-navigation-item.component.mjs +5 -10
  277. package/esm2020/list/list.component.mjs +3 -3
  278. package/esm2020/list/list.module.mjs +4 -4
  279. package/esm2020/menu/directives/deprecated-menu-compact.directive.mjs +3 -3
  280. package/esm2020/menu/directives/menu-addon.directive.mjs +3 -3
  281. package/esm2020/menu/directives/menu-interactive.directive.mjs +3 -3
  282. package/esm2020/menu/directives/menu-shortcut.directive.mjs +3 -3
  283. package/esm2020/menu/directives/menu-title.directive.mjs +3 -3
  284. package/esm2020/menu/directives/menu-trigger.directive.mjs +3 -3
  285. package/esm2020/menu/menu-item/menu-item.component.mjs +6 -6
  286. package/esm2020/menu/menu-keyboard.service.mjs +3 -3
  287. package/esm2020/menu/menu-mobile/menu-mobile.component.mjs +3 -3
  288. package/esm2020/menu/menu-mobile/menu-mobile.module.mjs +4 -4
  289. package/esm2020/menu/menu-separator/menu-separator.component.mjs +3 -3
  290. package/esm2020/menu/menu.component.mjs +3 -3
  291. package/esm2020/menu/menu.module.mjs +4 -4
  292. package/esm2020/menu/services/menu.service.mjs +3 -3
  293. package/esm2020/message-box/directives/message-box-decisive-button.directive.mjs +3 -3
  294. package/esm2020/message-box/message-box-body/message-box-body.component.mjs +3 -3
  295. package/esm2020/message-box/message-box-container/message-box-container.component.mjs +3 -3
  296. package/esm2020/message-box/message-box-default/message-box-default.component.mjs +3 -3
  297. package/esm2020/message-box/message-box-footer/message-box-footer.component.mjs +3 -3
  298. package/esm2020/message-box/message-box-footer-button/message-box-footer-button.component.mjs +3 -3
  299. package/esm2020/message-box/message-box-header/message-box-header.component.mjs +3 -3
  300. package/esm2020/message-box/message-box-semantic-icon/message-box-semantic-icon.component.mjs +3 -3
  301. package/esm2020/message-box/message-box.component.mjs +3 -3
  302. package/esm2020/message-box/message-box.module.mjs +4 -4
  303. package/esm2020/message-box/services/message-box.service.mjs +3 -3
  304. package/esm2020/message-box/utils/message-box-config.class.mjs +3 -3
  305. package/esm2020/message-box/utils/message-box-ref.class.mjs +3 -3
  306. package/esm2020/message-page/message-page-actions/message-page-actions.component.mjs +3 -3
  307. package/esm2020/message-page/message-page-more/message-page-more.component.mjs +3 -3
  308. package/esm2020/message-page/message-page-subtitle/message-page-subtitle.component.mjs +3 -3
  309. package/esm2020/message-page/message-page-title/message-page-title.component.mjs +3 -3
  310. package/esm2020/message-page/message-page.component.mjs +3 -3
  311. package/esm2020/message-page/message-page.module.mjs +4 -4
  312. package/esm2020/message-strip/message-strip.component.mjs +3 -3
  313. package/esm2020/message-strip/message-strip.module.mjs +4 -4
  314. package/esm2020/message-toast/message-toast-service/message-toast.service.mjs +3 -3
  315. package/esm2020/message-toast/message-toast-utils/message-toast-container.component.mjs +3 -3
  316. package/esm2020/message-toast/message-toast.component.mjs +3 -3
  317. package/esm2020/message-toast/message-toast.module.mjs +4 -4
  318. package/esm2020/micro-process-flow/components/micro-process-flow/deprecated-micro-process-flow-content-density.directive.mjs +3 -3
  319. package/esm2020/micro-process-flow/components/micro-process-flow/micro-process-flow.component.mjs +3 -3
  320. package/esm2020/micro-process-flow/components/micro-process-flow-icon/micro-process-flow-icon.component.mjs +3 -3
  321. package/esm2020/micro-process-flow/components/micro-process-flow-item/micro-process-flow-item.component.mjs +3 -3
  322. package/esm2020/micro-process-flow/micro-process-flow-focusable-item.directive.mjs +3 -3
  323. package/esm2020/micro-process-flow/micro-process-flow-intermediary-item.directive.mjs +3 -3
  324. package/esm2020/micro-process-flow/micro-process-flow.module.mjs +4 -4
  325. package/esm2020/multi-combobox/base-multi-combobox.class.mjs +3 -3
  326. package/esm2020/multi-combobox/mobile/mobile-multi-combobox.component.mjs +3 -3
  327. package/esm2020/multi-combobox/mobile/mobile-multi-combobox.module.mjs +4 -4
  328. package/esm2020/multi-combobox/multi-combobox-config.mjs +3 -3
  329. package/esm2020/multi-combobox/multi-combobox.component.mjs +6 -11
  330. package/esm2020/multi-combobox/multi-combobox.module.mjs +4 -4
  331. package/esm2020/multi-input/deprecated-multi-input-compact.directive.mjs +3 -3
  332. package/esm2020/multi-input/multi-input-mobile/multi-input-mobile.component.mjs +3 -3
  333. package/esm2020/multi-input/multi-input-mobile/multi-input-mobile.module.mjs +4 -4
  334. package/esm2020/multi-input/multi-input.component.mjs +3 -3
  335. package/esm2020/multi-input/multi-input.module.mjs +4 -4
  336. package/esm2020/nested-list/deprecated-nested-list-compact.directive.mjs +3 -3
  337. package/esm2020/nested-list/nested-content/nested-list-content.directive.mjs +3 -3
  338. package/esm2020/nested-list/nested-item/nested-item.directive.mjs +3 -3
  339. package/esm2020/nested-list/nested-link/nested-link.directive.mjs +3 -3
  340. package/esm2020/nested-list/nested-list/nested-list.directive.mjs +3 -3
  341. package/esm2020/nested-list/nested-list-directives.mjs +12 -12
  342. package/esm2020/nested-list/nested-list-keyboard.service.mjs +3 -3
  343. package/esm2020/nested-list/nested-list-popover/nested-list-popover.component.mjs +3 -3
  344. package/esm2020/nested-list/nested-list-state.service.mjs +3 -3
  345. package/esm2020/nested-list/nested-list.module.mjs +4 -4
  346. package/esm2020/nested-list/prepared-nested-list/prepared-nested-list.component.mjs +3 -3
  347. package/esm2020/notification/directives/notification-footer-content.directive.mjs +3 -3
  348. package/esm2020/notification/directives/notification-indicator.directive.mjs +3 -3
  349. package/esm2020/notification/directives/notification-limit-description.directive.mjs +3 -3
  350. package/esm2020/notification/directives/notification-limit-title.directive.mjs +3 -3
  351. package/esm2020/notification/directives/notification-paragraph.directive.mjs +3 -3
  352. package/esm2020/notification/directives/notification-separator.directive.mjs +3 -3
  353. package/esm2020/notification/directives/notification-title.directive.mjs +3 -3
  354. package/esm2020/notification/notification/notification.component.mjs +3 -3
  355. package/esm2020/notification/notification-actions/notification-actions.component.mjs +3 -3
  356. package/esm2020/notification/notification-body/notification-body.component.mjs +3 -3
  357. package/esm2020/notification/notification-content/notification-content.component.mjs +3 -3
  358. package/esm2020/notification/notification-footer/notification-footer.component.mjs +3 -3
  359. package/esm2020/notification/notification-group/notification-group.component.mjs +3 -3
  360. package/esm2020/notification/notification-group-header/notification-group-header.component.mjs +3 -3
  361. package/esm2020/notification/notification-group-list/notification-group-list.component.mjs +3 -3
  362. package/esm2020/notification/notification-header/notification-header.component.mjs +3 -3
  363. package/esm2020/notification/notification-limit/notification-limit.component.mjs +3 -3
  364. package/esm2020/notification/notification-service/notification.service.mjs +3 -3
  365. package/esm2020/notification/notification-utils/notification-container.mjs +3 -3
  366. package/esm2020/notification/notification-utils/notification-group-base.mjs +3 -3
  367. package/esm2020/notification/notification.module.mjs +4 -4
  368. package/esm2020/object-identifier/object-identifier.component.mjs +3 -3
  369. package/esm2020/object-identifier/object-identifier.module.mjs +4 -4
  370. package/esm2020/object-marker/object-marker.component.mjs +3 -3
  371. package/esm2020/object-marker/object-marker.module.mjs +4 -4
  372. package/esm2020/object-number/object-number.component.mjs +3 -3
  373. package/esm2020/object-number/object-number.module.mjs +4 -4
  374. package/esm2020/object-status/object-status.component.mjs +3 -3
  375. package/esm2020/object-status/object-status.module.mjs +4 -4
  376. package/esm2020/overflow-layout/directives/overflow-expand.directive.mjs +3 -3
  377. package/esm2020/overflow-layout/directives/overflow-item-container-ref.directive.mjs +3 -3
  378. package/esm2020/overflow-layout/directives/overflow-item-ref.directive.mjs +3 -3
  379. package/esm2020/overflow-layout/directives/overflow-layout-focusable-item.directive.mjs +3 -3
  380. package/esm2020/overflow-layout/directives/overflow-layout-item-container.directive.mjs +3 -3
  381. package/esm2020/overflow-layout/directives/overflow-layout-item.directive.mjs +3 -3
  382. package/esm2020/overflow-layout/directives/overflow-layout-popover-content.directive.mjs +3 -3
  383. package/esm2020/overflow-layout/overflow-layout.component.mjs +3 -3
  384. package/esm2020/overflow-layout/overflow-layout.module.mjs +4 -4
  385. package/esm2020/overflow-layout/overflow-layout.service.mjs +22 -18
  386. package/esm2020/pagination/deprecated-pagination-compact.directive.mjs +3 -3
  387. package/esm2020/pagination/pagination.component.mjs +3 -3
  388. package/esm2020/pagination/pagination.module.mjs +4 -4
  389. package/esm2020/pagination/pagination.service.mjs +3 -3
  390. package/esm2020/panel/deprecated-panel-compact.directive.mjs +3 -3
  391. package/esm2020/panel/panel-content/panel-content.directive.mjs +3 -3
  392. package/esm2020/panel/panel-title/panel-title.directive.mjs +3 -3
  393. package/esm2020/panel/panel.component.mjs +3 -3
  394. package/esm2020/panel/panel.module.mjs +4 -4
  395. package/esm2020/popover/base/base-popover.class.mjs +4 -8
  396. package/esm2020/popover/popover-body/popover-body-directives/popover-body-footer.directive.mjs +3 -3
  397. package/esm2020/popover/popover-body/popover-body-directives/popover-body-header.directive.mjs +3 -3
  398. package/esm2020/popover/popover-body/popover-body.component.mjs +5 -9
  399. package/esm2020/popover/popover-container/popover-container.directive.mjs +3 -3
  400. package/esm2020/popover/popover-control/popover-control.component.mjs +3 -3
  401. package/esm2020/popover/popover-mobile/popover-mobile.component.mjs +3 -3
  402. package/esm2020/popover/popover-mobile/popover-mobile.module.mjs +4 -4
  403. package/esm2020/popover/popover-service/popover.service.mjs +4 -6
  404. package/esm2020/popover/popover-trigger.directive.mjs +3 -3
  405. package/esm2020/popover/popover.component.mjs +3 -3
  406. package/esm2020/popover/popover.module.mjs +4 -4
  407. package/esm2020/product-switch/product-switch/product-switch.component.mjs +3 -3
  408. package/esm2020/product-switch/product-switch-body/product-switch-body.component.mjs +3 -3
  409. package/esm2020/product-switch/product-switch.module.mjs +4 -4
  410. package/esm2020/progress-indicator/progress-indicator.component.mjs +3 -3
  411. package/esm2020/progress-indicator/progress-indicator.module.mjs +4 -4
  412. package/esm2020/quick-view/quick-view/quick-view.component.mjs +3 -3
  413. package/esm2020/quick-view/quick-view-group/quick-view-group.component.mjs +3 -3
  414. package/esm2020/quick-view/quick-view-group-item/quick-view-group-item.component.mjs +3 -3
  415. package/esm2020/quick-view/quick-view-group-item-content/quick-view-group-item-content-element.directive.mjs +3 -3
  416. package/esm2020/quick-view/quick-view-group-item-content/quick-view-group-item-content.component.mjs +3 -3
  417. package/esm2020/quick-view/quick-view-group-item-label/quick-view-group-item-label.component.mjs +3 -3
  418. package/esm2020/quick-view/quick-view-group-title/quick-view-group-title.component.mjs +3 -3
  419. package/esm2020/quick-view/quick-view-subheader/quick-view-subheader.component.mjs +3 -3
  420. package/esm2020/quick-view/quick-view-subheader-subtitle/quick-view-subheader-subtitle.component.mjs +3 -3
  421. package/esm2020/quick-view/quick-view-subheader-title/quick-view-subheader-title.component.mjs +3 -3
  422. package/esm2020/quick-view/quick-view-title/quick-view-title.component.mjs +3 -3
  423. package/esm2020/quick-view/quick-view.module.mjs +4 -4
  424. package/esm2020/radio/deprecated-radio-button-compact.directive.mjs +3 -3
  425. package/esm2020/radio/radio-button/radio-button.component.mjs +3 -3
  426. package/esm2020/radio/radio.module.mjs +4 -4
  427. package/esm2020/rating-indicator/components/rating-indicator.component.mjs +3 -3
  428. package/esm2020/rating-indicator/pipes/rating-star-label.pipe.mjs +3 -3
  429. package/esm2020/rating-indicator/rating-indicator.module.mjs +4 -4
  430. package/esm2020/resizable-card-layout/resizable-card-layout/resizable-card-item/resizable-card-item.component.mjs +3 -3
  431. package/esm2020/resizable-card-layout/resizable-card-layout/resizable-card-layout.component.mjs +3 -3
  432. package/esm2020/resizable-card-layout/resizable-card-layout.module.mjs +4 -4
  433. package/esm2020/scroll-spy/scroll-spy.directive.mjs +3 -3
  434. package/esm2020/scroll-spy/scroll-spy.module.mjs +4 -4
  435. package/esm2020/scrollbar/scrollbar.directive.mjs +3 -3
  436. package/esm2020/scrollbar/scrollbar.module.mjs +4 -4
  437. package/esm2020/segmented-button/segmented-button.component.mjs +3 -3
  438. package/esm2020/segmented-button/segmented-button.module.mjs +4 -4
  439. package/esm2020/select/deprecated-select-compact.directive.mjs +3 -3
  440. package/esm2020/select/option/option.component.mjs +3 -3
  441. package/esm2020/select/select-key-manager.service.mjs +3 -3
  442. package/esm2020/select/select-mobile/select-mobile.component.mjs +3 -3
  443. package/esm2020/select/select-mobile/select-mobile.module.mjs +4 -4
  444. package/esm2020/select/select.component.mjs +6 -7
  445. package/esm2020/select/select.module.mjs +4 -4
  446. package/esm2020/shared/services/value-state-message.service.mjs +3 -3
  447. package/esm2020/shellbar/deprecated-shellbar-compact.directive.mjs +3 -3
  448. package/esm2020/shellbar/product-menu/product-menu.component.mjs +3 -3
  449. package/esm2020/shellbar/shellbar-action/shellbar-action.component.mjs +3 -3
  450. package/esm2020/shellbar/shellbar-actions/shellbar-actions.component.mjs +3 -3
  451. package/esm2020/shellbar/shellbar-actions-mobile/shellbar-actions-mobile.component.mjs +3 -3
  452. package/esm2020/shellbar/shellbar-logo/shellbar-logo.component.mjs +3 -3
  453. package/esm2020/shellbar/shellbar-sidenav.directive.mjs +3 -3
  454. package/esm2020/shellbar/shellbar-subtitle/shellbar-subtitle.component.mjs +3 -3
  455. package/esm2020/shellbar/shellbar-title/shellbar-title.component.mjs +3 -3
  456. package/esm2020/shellbar/shellbar.component.mjs +3 -3
  457. package/esm2020/shellbar/shellbar.module.mjs +4 -4
  458. package/esm2020/shellbar/user-menu/shellbar-user-menu.component.mjs +3 -3
  459. package/esm2020/side-navigation/side-navigation-main.directive.mjs +3 -3
  460. package/esm2020/side-navigation/side-navigation-utility.directive.mjs +3 -3
  461. package/esm2020/side-navigation/side-navigation.component.mjs +3 -3
  462. package/esm2020/side-navigation/side-navigation.module.mjs +4 -4
  463. package/esm2020/skeleton/components/skeleton.component.mjs +3 -3
  464. package/esm2020/skeleton/skeleton.module.mjs +4 -4
  465. package/esm2020/slider/deprecated-slider-cozy.directive.mjs +3 -3
  466. package/esm2020/slider/slider-position.directive.mjs +3 -3
  467. package/esm2020/slider/slider.component.mjs +3 -3
  468. package/esm2020/slider/slider.module.mjs +4 -4
  469. package/esm2020/split-button/deprecated-split-button-compact.directive.mjs +3 -3
  470. package/esm2020/split-button/split-button-utils/split-button.directives.mjs +3 -3
  471. package/esm2020/split-button/split-button.component.mjs +3 -3
  472. package/esm2020/split-button/split-button.module.mjs +4 -4
  473. package/esm2020/splitter/splitter-pagination/splitter-pagination.component.mjs +3 -3
  474. package/esm2020/splitter/splitter-pane-container/splitter-pane-container.component.mjs +6 -6
  475. package/esm2020/splitter/splitter-resizer/splitter-resizer.component.mjs +3 -3
  476. package/esm2020/splitter/splitter-split-pane/splitter-split-pane.component.mjs +3 -3
  477. package/esm2020/splitter/splitter.component.mjs +3 -3
  478. package/esm2020/splitter/splitter.module.mjs +4 -4
  479. package/esm2020/status-indicator/status-indicator.component.mjs +3 -3
  480. package/esm2020/status-indicator/status-indicator.module.mjs +4 -4
  481. package/esm2020/step-input/deprecated-step-input-compact.directive.mjs +3 -3
  482. package/esm2020/step-input/step-input.component.mjs +3 -3
  483. package/esm2020/step-input/step-input.module.mjs +4 -4
  484. package/esm2020/switch/deprecated-switch-compact.directive.mjs +3 -3
  485. package/esm2020/switch/switch.component.mjs +3 -3
  486. package/esm2020/switch/switch.module.mjs +4 -4
  487. package/esm2020/table/deprecated-table-compact.directive.mjs +3 -3
  488. package/esm2020/table/deprecated-table-condensed.directive.mjs +3 -3
  489. package/esm2020/table/directives/table-body.directive.mjs +3 -3
  490. package/esm2020/table/directives/table-cell.directive.mjs +3 -3
  491. package/esm2020/table/directives/table-fixed.directive.mjs +3 -3
  492. package/esm2020/table/directives/table-footer.directive.mjs +3 -3
  493. package/esm2020/table/directives/table-header.directive.mjs +3 -3
  494. package/esm2020/table/directives/table-icon.directive.mjs +3 -3
  495. package/esm2020/table/directives/table-inner.directive.mjs +3 -3
  496. package/esm2020/table/directives/table-popover.directive.mjs +3 -3
  497. package/esm2020/table/directives/table-responsive-wrapper.directive.mjs +3 -3
  498. package/esm2020/table/directives/table-row.directive.mjs +3 -3
  499. package/esm2020/table/directives/table-status-indicator.directive.mjs +3 -3
  500. package/esm2020/table/directives/table-text.directive.mjs +3 -3
  501. package/esm2020/table/table-wrapper.component.mjs +3 -3
  502. package/esm2020/table/table.component.mjs +3 -3
  503. package/esm2020/table/table.module.mjs +7 -8
  504. package/esm2020/tabs/deprecated-tabs-compact.directive.mjs +3 -3
  505. package/esm2020/tabs/tab-item/tab-item.directive.mjs +3 -3
  506. package/esm2020/tabs/tab-item-expand/tab-item-expand.component.mjs +3 -3
  507. package/esm2020/tabs/tab-link/tab-link.directive.mjs +3 -3
  508. package/esm2020/tabs/tab-list.component.mjs +3 -3
  509. package/esm2020/tabs/tab-nav/tab-nav.component.mjs +3 -3
  510. package/esm2020/tabs/tab-panel/tab-panel.component.mjs +3 -3
  511. package/esm2020/tabs/tab-utils/tab-directives.mjs +30 -30
  512. package/esm2020/tabs/tabs.module.mjs +4 -4
  513. package/esm2020/text/text.component.mjs +3 -3
  514. package/esm2020/text/text.module.mjs +4 -4
  515. package/esm2020/theming/theming.module.mjs +4 -4
  516. package/esm2020/theming/theming.service.mjs +3 -3
  517. package/esm2020/tile/directives/numeric-content.directives.mjs +27 -27
  518. package/esm2020/tile/directives/tile.directives.mjs +69 -69
  519. package/esm2020/tile/tile.component.mjs +3 -3
  520. package/esm2020/tile/tile.module.mjs +4 -4
  521. package/esm2020/time/deprecated-time-content-density.directive.mjs +3 -3
  522. package/esm2020/time/i18n/time-i18n.mjs +3 -3
  523. package/esm2020/time/time-column/time-column.component.mjs +3 -3
  524. package/esm2020/time/time.component.mjs +3 -3
  525. package/esm2020/time/time.module.mjs +4 -4
  526. package/esm2020/time-picker/deprecated-timepicker-compact.directive.mjs +3 -3
  527. package/esm2020/time-picker/time-picker.component.mjs +3 -3
  528. package/esm2020/time-picker/time-picker.module.mjs +4 -4
  529. package/esm2020/timeline/components/timeline-node/timeline-node.component.mjs +3 -3
  530. package/esm2020/timeline/components/timeline-node-body/timeline-node-body.component.mjs +3 -3
  531. package/esm2020/timeline/components/timeline-node-footer/timeline-node-footer.component.mjs +3 -3
  532. package/esm2020/timeline/components/timeline-node-header/timeline-node-header-info/timeline-node-header-info.component.mjs +3 -3
  533. package/esm2020/timeline/components/timeline-node-header/timeline-node-header.component.mjs +3 -3
  534. package/esm2020/timeline/directives/class-bindings/timeline-header-info-sub-title.directive.mjs +3 -3
  535. package/esm2020/timeline/directives/class-bindings/timeline-node-header-info-text.directive.mjs +3 -3
  536. package/esm2020/timeline/directives/class-bindings/timeline-node-header-info-title.directive.mjs +3 -3
  537. package/esm2020/timeline/directives/timeline-first-list-outlet.directive.mjs +3 -3
  538. package/esm2020/timeline/directives/timeline-node-def.directive.mjs +3 -3
  539. package/esm2020/timeline/directives/timeline-second-list-outlet.directive.mjs +3 -3
  540. package/esm2020/timeline/services/timeline-position-control.service.mjs +3 -3
  541. package/esm2020/timeline/timeline.component.mjs +3 -3
  542. package/esm2020/timeline/timeline.module.mjs +4 -4
  543. package/esm2020/title/title.component.mjs +3 -3
  544. package/esm2020/title/title.module.mjs +4 -4
  545. package/esm2020/token/deprecated-tokenizer-content-density.directive.mjs +3 -3
  546. package/esm2020/token/token-input.directive.mjs +3 -3
  547. package/esm2020/token/token.component.mjs +3 -3
  548. package/esm2020/token/token.module.mjs +4 -4
  549. package/esm2020/token/tokenizer.component.mjs +3 -3
  550. package/esm2020/toolbar/deprecated-toolbar-size.directive.mjs +3 -3
  551. package/esm2020/toolbar/public_api.mjs +4 -3
  552. package/esm2020/toolbar/toolbar-form-label.directive.mjs +3 -3
  553. package/esm2020/toolbar/toolbar-item.directive.mjs +8 -43
  554. package/esm2020/toolbar/toolbar-label.directive.mjs +3 -3
  555. package/esm2020/toolbar/toolbar-overflow-button-menu.directive.mjs +3 -3
  556. package/esm2020/toolbar/toolbar-overflow-button.directive.mjs +3 -3
  557. package/esm2020/toolbar/toolbar-overflow-group.directive.mjs +27 -0
  558. package/esm2020/toolbar/toolbar-overflow-priority.directive.mjs +29 -0
  559. package/esm2020/toolbar/toolbar-separator.component.mjs +3 -3
  560. package/esm2020/toolbar/toolbar-spacer.component.mjs +47 -0
  561. package/esm2020/toolbar/toolbar.component.mjs +277 -159
  562. package/esm2020/toolbar/toolbar.module.mjs +19 -12
  563. package/esm2020/tree/tree-child.component.mjs +3 -3
  564. package/esm2020/tree/tree.component.mjs +3 -3
  565. package/esm2020/tree/tree.module.mjs +4 -4
  566. package/esm2020/upload-collection/upload-collection-button-group/upload-collection-button-group.component.mjs +3 -3
  567. package/esm2020/upload-collection/upload-collection-form-item/upload-collection-form-item.component.mjs +3 -3
  568. package/esm2020/upload-collection/upload-collection-item.directive.mjs +3 -3
  569. package/esm2020/upload-collection/upload-collection-simple.directives.mjs +21 -21
  570. package/esm2020/upload-collection/upload-collection.component.mjs +3 -3
  571. package/esm2020/upload-collection/upload-collection.module.mjs +4 -4
  572. package/esm2020/vertical-navigation/vertical-navigation-group-header.directive.mjs +3 -3
  573. package/esm2020/vertical-navigation/vertical-navigation-main-navigation.component.mjs +3 -3
  574. package/esm2020/vertical-navigation/vertical-navigation.component.mjs +3 -3
  575. package/esm2020/vertical-navigation/vertical-navigation.module.mjs +4 -4
  576. package/esm2020/wizard/deprecated-wizard-compact.directive.mjs +3 -3
  577. package/esm2020/wizard/wizard-content/wizard-content.component.mjs +3 -3
  578. package/esm2020/wizard/wizard-navigation/wizard-navigation.component.mjs +3 -3
  579. package/esm2020/wizard/wizard-next-step/wizard-next-step.component.mjs +3 -3
  580. package/esm2020/wizard/wizard-progress-bar/wizard-progress-bar.directive.mjs +3 -3
  581. package/esm2020/wizard/wizard-step/wizard-step.component.mjs +3 -3
  582. package/esm2020/wizard/wizard-step-indicator/wizard-step-indicator.component.mjs +3 -3
  583. package/esm2020/wizard/wizard.component.mjs +3 -3
  584. package/esm2020/wizard/wizard.module.mjs +4 -4
  585. package/esm2020/wizard/wizard.service.mjs +3 -3
  586. package/fesm2015/fundamental-ngx-core-action-bar.mjs +25 -25
  587. package/fesm2015/fundamental-ngx-core-action-sheet.mjs +26 -26
  588. package/fesm2015/fundamental-ngx-core-alert.mjs +13 -13
  589. package/fesm2015/fundamental-ngx-core-avatar-group.mjs +28 -28
  590. package/fesm2015/fundamental-ngx-core-avatar.mjs +7 -7
  591. package/fesm2015/fundamental-ngx-core-bar.mjs +28 -28
  592. package/fesm2015/fundamental-ngx-core-breadcrumb.mjs +13 -13
  593. package/fesm2015/fundamental-ngx-core-busy-indicator.mjs +10 -10
  594. package/fesm2015/fundamental-ngx-core-button.mjs +13 -13
  595. package/fesm2015/fundamental-ngx-core-calendar.mjs +34 -34
  596. package/fesm2015/fundamental-ngx-core-card.mjs +58 -58
  597. package/fesm2015/fundamental-ngx-core-carousel.mjs +19 -19
  598. package/fesm2015/fundamental-ngx-core-checkbox.mjs +10 -10
  599. package/fesm2015/fundamental-ngx-core-combobox.mjs +20 -20
  600. package/fesm2015/fundamental-ngx-core-content-density.mjs +37 -37
  601. package/fesm2015/fundamental-ngx-core-date-picker.mjs +10 -10
  602. package/fesm2015/fundamental-ngx-core-datetime-picker.mjs +10 -10
  603. package/fesm2015/fundamental-ngx-core-datetime.mjs +24 -24
  604. package/fesm2015/fundamental-ngx-core-dialog.mjs +58 -58
  605. package/fesm2015/fundamental-ngx-core-dynamic-page.mjs +44 -44
  606. package/fesm2015/fundamental-ngx-core-dynamic-page.mjs.map +1 -1
  607. package/fesm2015/fundamental-ngx-core-dynamic-side-content.mjs +13 -13
  608. package/fesm2015/fundamental-ngx-core-facets.mjs +13 -13
  609. package/fesm2015/fundamental-ngx-core-feed-input.mjs +16 -16
  610. package/fesm2015/fundamental-ngx-core-feed-list-item.mjs +22 -22
  611. package/fesm2015/fundamental-ngx-core-file-uploader.mjs +19 -19
  612. package/fesm2015/fundamental-ngx-core-fixed-card-layout.mjs +13 -13
  613. package/fesm2015/fundamental-ngx-core-flexible-column-layout.mjs +7 -7
  614. package/fesm2015/fundamental-ngx-core-form.mjs +79 -79
  615. package/fesm2015/fundamental-ngx-core-formatted-text.mjs +7 -7
  616. package/fesm2015/fundamental-ngx-core-grid-list.mjs +48 -48
  617. package/fesm2015/fundamental-ngx-core-grid-list.mjs.map +1 -1
  618. package/fesm2015/fundamental-ngx-core-icon.mjs +7 -7
  619. package/fesm2015/fundamental-ngx-core-illustrated-message.mjs +19 -19
  620. package/fesm2015/fundamental-ngx-core-infinite-scroll.mjs +7 -7
  621. package/fesm2015/fundamental-ngx-core-info-label.mjs +7 -7
  622. package/fesm2015/fundamental-ngx-core-inline-help.mjs +7 -14
  623. package/fesm2015/fundamental-ngx-core-inline-help.mjs.map +1 -1
  624. package/fesm2015/fundamental-ngx-core-input-group.mjs +22 -22
  625. package/fesm2015/fundamental-ngx-core-layout-grid.mjs +13 -13
  626. package/fesm2015/fundamental-ngx-core-layout-panel.mjs +31 -31
  627. package/fesm2015/fundamental-ngx-core-link.mjs +7 -7
  628. package/fesm2015/fundamental-ngx-core-list.mjs +67 -79
  629. package/fesm2015/fundamental-ngx-core-list.mjs.map +1 -1
  630. package/fesm2015/fundamental-ngx-core-menu.mjs +47 -47
  631. package/fesm2015/fundamental-ngx-core-message-box.mjs +40 -40
  632. package/fesm2015/fundamental-ngx-core-message-page.mjs +19 -19
  633. package/fesm2015/fundamental-ngx-core-message-strip.mjs +7 -7
  634. package/fesm2015/fundamental-ngx-core-message-toast.mjs +13 -13
  635. package/fesm2015/fundamental-ngx-core-micro-process-flow.mjs +22 -22
  636. package/fesm2015/fundamental-ngx-core-multi-combobox.mjs +23 -28
  637. package/fesm2015/fundamental-ngx-core-multi-combobox.mjs.map +1 -1
  638. package/fesm2015/fundamental-ngx-core-multi-input.mjs +17 -17
  639. package/fesm2015/fundamental-ngx-core-nested-list.mjs +43 -43
  640. package/fesm2015/fundamental-ngx-core-notification.mjs +64 -64
  641. package/fesm2015/fundamental-ngx-core-object-identifier.mjs +7 -7
  642. package/fesm2015/fundamental-ngx-core-object-marker.mjs +7 -7
  643. package/fesm2015/fundamental-ngx-core-object-number.mjs +7 -7
  644. package/fesm2015/fundamental-ngx-core-object-status.mjs +7 -7
  645. package/fesm2015/fundamental-ngx-core-overflow-layout.mjs +49 -45
  646. package/fesm2015/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
  647. package/fesm2015/fundamental-ngx-core-pagination.mjs +13 -13
  648. package/fesm2015/fundamental-ngx-core-panel.mjs +16 -16
  649. package/fesm2015/fundamental-ngx-core-popover.mjs +39 -49
  650. package/fesm2015/fundamental-ngx-core-popover.mjs.map +1 -1
  651. package/fesm2015/fundamental-ngx-core-product-switch.mjs +10 -10
  652. package/fesm2015/fundamental-ngx-core-progress-indicator.mjs +7 -7
  653. package/fesm2015/fundamental-ngx-core-quick-view.mjs +37 -37
  654. package/fesm2015/fundamental-ngx-core-radio.mjs +10 -10
  655. package/fesm2015/fundamental-ngx-core-rating-indicator.mjs +10 -10
  656. package/fesm2015/fundamental-ngx-core-resizable-card-layout.mjs +10 -10
  657. package/fesm2015/fundamental-ngx-core-scroll-spy.mjs +7 -7
  658. package/fesm2015/fundamental-ngx-core-scrollbar.mjs +7 -7
  659. package/fesm2015/fundamental-ngx-core-segmented-button.mjs +7 -7
  660. package/fesm2015/fundamental-ngx-core-select.mjs +24 -25
  661. package/fesm2015/fundamental-ngx-core-select.mjs.map +1 -1
  662. package/fesm2015/fundamental-ngx-core-shared.mjs +3 -3
  663. package/fesm2015/fundamental-ngx-core-shellbar.mjs +37 -37
  664. package/fesm2015/fundamental-ngx-core-side-navigation.mjs +13 -13
  665. package/fesm2015/fundamental-ngx-core-skeleton.mjs +7 -7
  666. package/fesm2015/fundamental-ngx-core-slider.mjs +13 -13
  667. package/fesm2015/fundamental-ngx-core-split-button.mjs +13 -13
  668. package/fesm2015/fundamental-ngx-core-splitter.mjs +22 -22
  669. package/fesm2015/fundamental-ngx-core-status-indicator.mjs +7 -7
  670. package/fesm2015/fundamental-ngx-core-step-input.mjs +10 -10
  671. package/fesm2015/fundamental-ngx-core-switch.mjs +10 -10
  672. package/fesm2015/fundamental-ngx-core-table.mjs +55 -55
  673. package/fesm2015/fundamental-ngx-core-table.mjs.map +1 -1
  674. package/fesm2015/fundamental-ngx-core-tabs.mjs +55 -55
  675. package/fesm2015/fundamental-ngx-core-text.mjs +7 -7
  676. package/fesm2015/fundamental-ngx-core-theming.mjs +7 -7
  677. package/fesm2015/fundamental-ngx-core-tile.mjs +103 -103
  678. package/fesm2015/fundamental-ngx-core-time-picker.mjs +10 -10
  679. package/fesm2015/fundamental-ngx-core-time.mjs +16 -16
  680. package/fesm2015/fundamental-ngx-core-timeline.mjs +43 -43
  681. package/fesm2015/fundamental-ngx-core-title.mjs +7 -7
  682. package/fesm2015/fundamental-ngx-core-token.mjs +16 -16
  683. package/fesm2015/fundamental-ngx-core-toolbar.mjs +416 -276
  684. package/fesm2015/fundamental-ngx-core-toolbar.mjs.map +1 -1
  685. package/fesm2015/fundamental-ngx-core-tree.mjs +10 -10
  686. package/fesm2015/fundamental-ngx-core-upload-collection.mjs +37 -37
  687. package/fesm2015/fundamental-ngx-core-vertical-navigation.mjs +13 -13
  688. package/fesm2015/fundamental-ngx-core-wizard.mjs +31 -31
  689. package/fesm2015/fundamental-ngx-core.mjs +4 -4
  690. package/fesm2020/fundamental-ngx-core-action-bar.mjs +25 -25
  691. package/fesm2020/fundamental-ngx-core-action-sheet.mjs +26 -26
  692. package/fesm2020/fundamental-ngx-core-alert.mjs +13 -13
  693. package/fesm2020/fundamental-ngx-core-avatar-group.mjs +28 -28
  694. package/fesm2020/fundamental-ngx-core-avatar.mjs +7 -7
  695. package/fesm2020/fundamental-ngx-core-bar.mjs +28 -28
  696. package/fesm2020/fundamental-ngx-core-breadcrumb.mjs +13 -13
  697. package/fesm2020/fundamental-ngx-core-busy-indicator.mjs +10 -10
  698. package/fesm2020/fundamental-ngx-core-button.mjs +13 -13
  699. package/fesm2020/fundamental-ngx-core-calendar.mjs +34 -34
  700. package/fesm2020/fundamental-ngx-core-card.mjs +58 -58
  701. package/fesm2020/fundamental-ngx-core-carousel.mjs +19 -19
  702. package/fesm2020/fundamental-ngx-core-checkbox.mjs +10 -10
  703. package/fesm2020/fundamental-ngx-core-combobox.mjs +20 -20
  704. package/fesm2020/fundamental-ngx-core-content-density.mjs +37 -37
  705. package/fesm2020/fundamental-ngx-core-date-picker.mjs +10 -10
  706. package/fesm2020/fundamental-ngx-core-datetime-picker.mjs +10 -10
  707. package/fesm2020/fundamental-ngx-core-datetime.mjs +24 -24
  708. package/fesm2020/fundamental-ngx-core-dialog.mjs +58 -58
  709. package/fesm2020/fundamental-ngx-core-dynamic-page.mjs +44 -44
  710. package/fesm2020/fundamental-ngx-core-dynamic-page.mjs.map +1 -1
  711. package/fesm2020/fundamental-ngx-core-dynamic-side-content.mjs +13 -13
  712. package/fesm2020/fundamental-ngx-core-facets.mjs +13 -13
  713. package/fesm2020/fundamental-ngx-core-feed-input.mjs +16 -16
  714. package/fesm2020/fundamental-ngx-core-feed-list-item.mjs +22 -22
  715. package/fesm2020/fundamental-ngx-core-file-uploader.mjs +19 -19
  716. package/fesm2020/fundamental-ngx-core-fixed-card-layout.mjs +13 -13
  717. package/fesm2020/fundamental-ngx-core-flexible-column-layout.mjs +7 -7
  718. package/fesm2020/fundamental-ngx-core-form.mjs +79 -79
  719. package/fesm2020/fundamental-ngx-core-formatted-text.mjs +7 -7
  720. package/fesm2020/fundamental-ngx-core-grid-list.mjs +48 -48
  721. package/fesm2020/fundamental-ngx-core-grid-list.mjs.map +1 -1
  722. package/fesm2020/fundamental-ngx-core-icon.mjs +7 -7
  723. package/fesm2020/fundamental-ngx-core-illustrated-message.mjs +19 -19
  724. package/fesm2020/fundamental-ngx-core-infinite-scroll.mjs +7 -7
  725. package/fesm2020/fundamental-ngx-core-info-label.mjs +7 -7
  726. package/fesm2020/fundamental-ngx-core-inline-help.mjs +7 -14
  727. package/fesm2020/fundamental-ngx-core-inline-help.mjs.map +1 -1
  728. package/fesm2020/fundamental-ngx-core-input-group.mjs +22 -22
  729. package/fesm2020/fundamental-ngx-core-layout-grid.mjs +13 -13
  730. package/fesm2020/fundamental-ngx-core-layout-panel.mjs +31 -31
  731. package/fesm2020/fundamental-ngx-core-link.mjs +7 -7
  732. package/fesm2020/fundamental-ngx-core-list.mjs +67 -78
  733. package/fesm2020/fundamental-ngx-core-list.mjs.map +1 -1
  734. package/fesm2020/fundamental-ngx-core-menu.mjs +47 -47
  735. package/fesm2020/fundamental-ngx-core-message-box.mjs +40 -40
  736. package/fesm2020/fundamental-ngx-core-message-page.mjs +19 -19
  737. package/fesm2020/fundamental-ngx-core-message-strip.mjs +7 -7
  738. package/fesm2020/fundamental-ngx-core-message-toast.mjs +13 -13
  739. package/fesm2020/fundamental-ngx-core-micro-process-flow.mjs +22 -22
  740. package/fesm2020/fundamental-ngx-core-multi-combobox.mjs +22 -27
  741. package/fesm2020/fundamental-ngx-core-multi-combobox.mjs.map +1 -1
  742. package/fesm2020/fundamental-ngx-core-multi-input.mjs +17 -17
  743. package/fesm2020/fundamental-ngx-core-nested-list.mjs +43 -43
  744. package/fesm2020/fundamental-ngx-core-notification.mjs +64 -64
  745. package/fesm2020/fundamental-ngx-core-object-identifier.mjs +7 -7
  746. package/fesm2020/fundamental-ngx-core-object-marker.mjs +7 -7
  747. package/fesm2020/fundamental-ngx-core-object-number.mjs +7 -7
  748. package/fesm2020/fundamental-ngx-core-object-status.mjs +7 -7
  749. package/fesm2020/fundamental-ngx-core-overflow-layout.mjs +49 -45
  750. package/fesm2020/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
  751. package/fesm2020/fundamental-ngx-core-pagination.mjs +13 -13
  752. package/fesm2020/fundamental-ngx-core-panel.mjs +16 -16
  753. package/fesm2020/fundamental-ngx-core-popover.mjs +39 -49
  754. package/fesm2020/fundamental-ngx-core-popover.mjs.map +1 -1
  755. package/fesm2020/fundamental-ngx-core-product-switch.mjs +10 -10
  756. package/fesm2020/fundamental-ngx-core-progress-indicator.mjs +7 -7
  757. package/fesm2020/fundamental-ngx-core-quick-view.mjs +37 -37
  758. package/fesm2020/fundamental-ngx-core-radio.mjs +10 -10
  759. package/fesm2020/fundamental-ngx-core-rating-indicator.mjs +10 -10
  760. package/fesm2020/fundamental-ngx-core-resizable-card-layout.mjs +10 -10
  761. package/fesm2020/fundamental-ngx-core-scroll-spy.mjs +7 -7
  762. package/fesm2020/fundamental-ngx-core-scrollbar.mjs +7 -7
  763. package/fesm2020/fundamental-ngx-core-segmented-button.mjs +7 -7
  764. package/fesm2020/fundamental-ngx-core-select.mjs +24 -25
  765. package/fesm2020/fundamental-ngx-core-select.mjs.map +1 -1
  766. package/fesm2020/fundamental-ngx-core-shared.mjs +3 -3
  767. package/fesm2020/fundamental-ngx-core-shellbar.mjs +37 -37
  768. package/fesm2020/fundamental-ngx-core-side-navigation.mjs +13 -13
  769. package/fesm2020/fundamental-ngx-core-skeleton.mjs +7 -7
  770. package/fesm2020/fundamental-ngx-core-slider.mjs +13 -13
  771. package/fesm2020/fundamental-ngx-core-split-button.mjs +13 -13
  772. package/fesm2020/fundamental-ngx-core-splitter.mjs +22 -22
  773. package/fesm2020/fundamental-ngx-core-status-indicator.mjs +7 -7
  774. package/fesm2020/fundamental-ngx-core-step-input.mjs +10 -10
  775. package/fesm2020/fundamental-ngx-core-switch.mjs +10 -10
  776. package/fesm2020/fundamental-ngx-core-table.mjs +55 -55
  777. package/fesm2020/fundamental-ngx-core-table.mjs.map +1 -1
  778. package/fesm2020/fundamental-ngx-core-tabs.mjs +55 -55
  779. package/fesm2020/fundamental-ngx-core-text.mjs +7 -7
  780. package/fesm2020/fundamental-ngx-core-theming.mjs +7 -7
  781. package/fesm2020/fundamental-ngx-core-tile.mjs +103 -103
  782. package/fesm2020/fundamental-ngx-core-time-picker.mjs +10 -10
  783. package/fesm2020/fundamental-ngx-core-time.mjs +16 -16
  784. package/fesm2020/fundamental-ngx-core-timeline.mjs +43 -43
  785. package/fesm2020/fundamental-ngx-core-title.mjs +7 -7
  786. package/fesm2020/fundamental-ngx-core-token.mjs +16 -16
  787. package/fesm2020/fundamental-ngx-core-toolbar.mjs +416 -275
  788. package/fesm2020/fundamental-ngx-core-toolbar.mjs.map +1 -1
  789. package/fesm2020/fundamental-ngx-core-tree.mjs +10 -10
  790. package/fesm2020/fundamental-ngx-core-upload-collection.mjs +37 -37
  791. package/fesm2020/fundamental-ngx-core-vertical-navigation.mjs +13 -13
  792. package/fesm2020/fundamental-ngx-core-wizard.mjs +31 -31
  793. package/fesm2020/fundamental-ngx-core.mjs +4 -4
  794. package/fundamental-ngx-core-v0.40.5.tgz +0 -0
  795. package/grid-list/components/grid-list-title-bar-spacer/grid-list-title-bar-spacer.component.d.ts +2 -2
  796. package/inline-help/inline-help.directive.d.ts +0 -2
  797. package/list/directives/list-navigation-item-arrow.directive.d.ts +0 -6
  798. package/overflow-layout/overflow-layout.service.d.ts +4 -4
  799. package/package.json +4 -4
  800. package/popover/base/base-popover.class.d.ts +0 -4
  801. package/popover/popover-body/popover-body.component.d.ts +0 -4
  802. package/schematics/add-dependencies/index.js +4 -4
  803. package/table/table.module.d.ts +1 -2
  804. package/toolbar/public_api.d.ts +3 -2
  805. package/toolbar/toolbar-item.directive.d.ts +2 -20
  806. package/toolbar/toolbar-overflow-group.directive.d.ts +14 -0
  807. package/toolbar/toolbar-overflow-priority.directive.d.ts +17 -0
  808. package/toolbar/{toolbar-spacer.directive.d.ts → toolbar-spacer.component.d.ts} +3 -3
  809. package/toolbar/toolbar.component.d.ts +70 -33
  810. package/toolbar/toolbar.module.d.ts +9 -8
  811. package/esm2020/toolbar/abstract-toolbar-item.class.mjs +0 -3
  812. package/esm2020/toolbar/toolbar-spacer.directive.mjs +0 -45
  813. package/fundamental-ngx-core-v0.40.4-rc.6.tgz +0 -0
  814. package/toolbar/abstract-toolbar-item.class.d.ts +0 -8
@@ -1,52 +1,45 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, ElementRef, forwardRef, Inject, Input, NgZone, Optional, QueryList, SkipSelf, ViewChild, ViewEncapsulation } from '@angular/core';
2
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, ElementRef, forwardRef, Inject, Input, Optional, QueryList, Renderer2, SkipSelf, ViewChild, ViewEncapsulation } from '@angular/core';
3
3
  import { DYNAMIC_PAGE_HEADER_TOKEN } from '@fundamental-ngx/core/shared';
4
- import { applyCssClass, DestroyedService, OVERFLOW_PRIORITY_SCORE, ResizeObserverService } from '@fundamental-ngx/cdk/utils';
5
- import { BehaviorSubject, combineLatest, map, startWith, takeUntil } from 'rxjs';
4
+ import { applyCssClass, OVERFLOW_PRIORITY_SCORE, DestroyedService } from '@fundamental-ngx/cdk/utils';
5
+ import { fromEvent, of, Subscription } from 'rxjs';
6
+ import { debounceTime, delay, distinctUntilChanged, filter, takeUntil } from 'rxjs/operators';
7
+ import { ToolbarItemDirective } from './toolbar-item.directive';
6
8
  import { TitleToken } from '@fundamental-ngx/core/title';
7
9
  import { ContentDensityMode, ContentDensityObserver, contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';
8
- import { ToolbarItem } from './abstract-toolbar-item.class';
9
10
  import * as i0 from "@angular/core";
10
11
  import * as i1 from "@fundamental-ngx/core/content-density";
11
12
  import * as i2 from "@fundamental-ngx/cdk/utils";
12
13
  import * as i3 from "@angular/common";
13
14
  import * as i4 from "@fundamental-ngx/core/button";
14
15
  import * as i5 from "@fundamental-ngx/core/popover";
15
- import * as i6 from "./toolbar-spacer.directive";
16
- import * as i7 from "./toolbar-separator.component";
17
16
  const ELEMENT_MARGIN = 8;
18
17
  const OVERFLOW_SPACE = 50 + 2 * ELEMENT_MARGIN;
19
18
  const MAX_CONTENT_SIZE = 99999999;
20
19
  export class ToolbarComponent {
21
- /** Determines if overflow button should be visible
22
- * Default value: false
23
- */
24
- set shouldOverflow(val) {
25
- this._shouldOverflow = val;
26
- this.shouldOverflow$.next(val);
27
- }
28
- get shouldOverflow() {
29
- return this._shouldOverflow;
30
- }
31
20
  /** @hidden */
32
- set titleComponent(title) {
33
- this._titleComponent$.next(title);
21
+ get _toolbarWidth() {
22
+ return this.toolbar.nativeElement.clientWidth - OVERFLOW_SPACE;
34
23
  }
35
- get titleComponent() {
36
- return this._titleComponent$.value;
24
+ /** @hidden */
25
+ get _overflowBody() {
26
+ return this.overflowBody && this.overflowBody.nativeElement;
37
27
  }
38
28
  /** @hidden */
39
- get _toolbarWidth() {
40
- return this.toolbar.nativeElement.clientWidth - OVERFLOW_SPACE;
29
+ get _toolbar() {
30
+ return this.toolbar.nativeElement;
41
31
  }
42
32
  /** @hidden */
43
- constructor(_cd, _contentDensityObserver, _destroy$, resizeObserverService, ngZone, _dynamicPageHeader) {
33
+ constructor(_cd, _renderer, _contentDensityObserver, _destroy$, _dynamicPageHeader) {
44
34
  this._cd = _cd;
35
+ this._renderer = _renderer;
45
36
  this._contentDensityObserver = _contentDensityObserver;
46
37
  this._destroy$ = _destroy$;
47
- this.resizeObserverService = resizeObserverService;
48
- this.ngZone = ngZone;
49
38
  this._dynamicPageHeader = _dynamicPageHeader;
39
+ /** Determines if overflow button should be visible
40
+ * Default value: false
41
+ */
42
+ this.shouldOverflow = false;
50
43
  /** Determines the type of toolbar
51
44
  * Available options: 'solid' | 'transparent' | 'auto' | 'info'
52
45
  * Default value: 'solid'
@@ -67,74 +60,36 @@ export class ToolbarComponent {
67
60
  /** Tabindex of the toolbar element, to be used when fdType="info" */
68
61
  this.tabindex = -1;
69
62
  /** @hidden */
70
- this.overflownItems = [];
63
+ this.titleComponent = null;
71
64
  /** @hidden */
72
- this._titleComponent$ = new BehaviorSubject(null);
65
+ this.overflowVisibility = of(false);
73
66
  /** @hidden */
74
- this._refreshOverflow$ = new BehaviorSubject(undefined);
67
+ this._subscriptions = new Subscription();
75
68
  /** @hidden */
76
- this._shouldOverflow = false;
69
+ this._overflowElements = [];
77
70
  /** @hidden */
78
- this._initialised = false;
71
+ this._normalElements = [];
79
72
  /** @hidden */
80
- this.shouldOverflow$ = new BehaviorSubject(false);
73
+ this._disappearElements = [];
74
+ /** @hidden */
75
+ this._initialised = false;
81
76
  _contentDensityObserver.subscribe();
82
77
  }
83
78
  /** @hidden */
79
+ ngOnInit() {
80
+ fromEvent(window, 'resize')
81
+ .pipe(filter(() => this.shouldOverflow), debounceTime(50), distinctUntilChanged(), takeUntil(this._destroy$))
82
+ .subscribe(() => this._onResize());
83
+ }
84
+ /** @hidden */
84
85
  ngAfterViewInit() {
85
- this.overflowItems$ = combineLatest([
86
- this.resizeObserverService.observe(this.toolbar.nativeElement).pipe(map(() => this._toolbarWidth)),
87
- this.toolbarItems.changes.pipe(startWith(this.toolbarItems), map((toolbarItems) => toolbarItems.toArray())),
88
- this._titleComponent$.pipe(map((titleComponent) => {
89
- if (!titleComponent) {
90
- return this.titleElement?.nativeElement;
91
- }
92
- return titleComponent.elementRef.nativeElement;
93
- })),
94
- this.shouldOverflow$,
95
- this._refreshOverflow$
96
- ]).pipe(map(([toolbarWidth, toolbarItems, titleElement, shouldOverflow]) => {
97
- if (shouldOverflow) {
98
- const _sortedByPriorityAndGroupItems = this._getSortedByPriorityAndGroupItems(toolbarItems);
99
- const overflowItems = [];
100
- _sortedByPriorityAndGroupItems.reduce((_contentWidth, toolbarItem) => {
101
- const itemWidth = toolbarItem.width;
102
- const itemPriority = toolbarItem.priority;
103
- const shouldItemBeRemovedByWidth = itemWidth + _contentWidth > toolbarWidth;
104
- const shouldAlwaysBeInOverflow = itemPriority === "always" /* OverflowPriorityEnum.ALWAYS */ || this.forceOverflow;
105
- const shouldNeverBeInOverflow = itemPriority === "never" /* OverflowPriorityEnum.NEVER */;
106
- if ((shouldItemBeRemovedByWidth && !shouldNeverBeInOverflow) || shouldAlwaysBeInOverflow) {
107
- overflowItems.push(toolbarItem);
108
- return shouldAlwaysBeInOverflow ? _contentWidth : MAX_CONTENT_SIZE;
109
- }
110
- else {
111
- return _contentWidth + itemWidth;
112
- }
113
- }, titleElement?.clientWidth || 0);
114
- // Hide orphans
115
- for (const toolbarItem of overflowItems) {
116
- const groupedCollection = this._getGroupedCollection(toolbarItems);
117
- const groupedCollectionPriorities = this._getGroupedCollectionPriority(groupedCollection);
118
- const group = toolbarItem.group;
119
- const itemPriority = toolbarItem.priority;
120
- if (group !== 0 && itemPriority !== "disappear" /* OverflowPriorityEnum.DISAPPEAR */) {
121
- const itemsFromCurrentGroup = this._getElementsFromCurrentGroup(group, groupedCollection, groupedCollectionPriorities) || [];
122
- itemsFromCurrentGroup.forEach((i) => {
123
- if (overflowItems.indexOf(i) === -1) {
124
- overflowItems.push(i);
125
- }
126
- });
127
- }
128
- }
129
- return overflowItems.sort((a, b) => this._sortPriorities(a.priority, b.priority));
130
- }
131
- return [];
132
- }), takeUntil(this._destroy$));
133
- this.overflowItems$.subscribe((items) => {
134
- this.overflownItems = items;
135
- this._cd.detectChanges();
136
- });
86
+ if (this.shouldOverflow) {
87
+ of(true)
88
+ .pipe(delay(5), takeUntil(this._destroy$))
89
+ .subscribe(() => this._collapseItems());
90
+ }
137
91
  this._initialised = true;
92
+ this._listenForItemChanges();
138
93
  this.buildComponentCssClass();
139
94
  }
140
95
  /** @hidden */
@@ -148,6 +103,10 @@ export class ToolbarComponent {
148
103
  this.buildComponentCssClass();
149
104
  }
150
105
  }
106
+ /** @hidden */
107
+ ngOnDestroy() {
108
+ this._subscriptions.unsubscribe();
109
+ }
151
110
  /** Change detection reference */
152
111
  detectChanges() {
153
112
  this._cd.detectChanges();
@@ -169,81 +128,117 @@ export class ToolbarComponent {
169
128
  }
170
129
  /** Method triggering collapsible toolbar */
171
130
  updateCollapsibleItems() {
172
- this._refreshOverflow$.next();
131
+ if (this._initialised) {
132
+ this._onResize();
133
+ }
173
134
  }
174
- /** @hidden Get group number with the lowest priority.
175
- * Uses for detecting a group of elements which would be hidden from the toolbar.
176
- * */
177
- _getLowestPriorityFromGroup(itemGroup, groupedCollectionPriority) {
178
- const priority = groupedCollectionPriority;
179
- if (!priority || !OVERFLOW_PRIORITY_SCORE.get(priority[itemGroup])) {
180
- return itemGroup;
135
+ /** @hidden */
136
+ _onResize() {
137
+ this._reset();
138
+ if (this.shouldOverflow) {
139
+ this._collapseItems();
181
140
  }
182
- const groups = Object.keys(priority);
183
- return groups.reduce((lowestGroup, currentGroup) => {
184
- const lowestGroupPriority = priority[lowestGroup];
185
- const currentGroupPriority = priority[currentGroup];
186
- if (OVERFLOW_PRIORITY_SCORE.get(currentGroupPriority) < OVERFLOW_PRIORITY_SCORE.get(lowestGroupPriority)) {
187
- return +currentGroup;
141
+ this._cd.detectChanges();
142
+ }
143
+ // shouldOverflow items
144
+ /** @hidden */
145
+ _collapseItems() {
146
+ this._groupedCollection = this._getGroupedCollection();
147
+ this._groupedCollectionPriority = this._getGroupedCollectionPriority();
148
+ const _sortedByPriorityAndGroupItems = this._getSortedByPriorityAndGroupItems();
149
+ _sortedByPriorityAndGroupItems.reduce((_contentWidth, toolbarItem) => {
150
+ const itemWidth = this._getElementWidthWithMargin(toolbarItem);
151
+ const itemGroup = this._getElementGroup(toolbarItem);
152
+ const itemPriority = this._getElementPriority(toolbarItem);
153
+ const shouldItemBeRemovedByWidth = this._shouldToolbarItemBeRemovedByWidth(itemWidth, _contentWidth);
154
+ const shouldAlwaysBeInOverflow = itemPriority === "always" /* OverflowPriorityEnum.ALWAYS */ || this.forceOverflow;
155
+ const shouldNeverBeInOverflow = itemPriority === "never" /* OverflowPriorityEnum.NEVER */;
156
+ if ((shouldItemBeRemovedByWidth && !shouldNeverBeInOverflow) || shouldAlwaysBeInOverflow) {
157
+ if (itemGroup) {
158
+ this._hideElementsFromCurrentGroup(itemGroup);
159
+ }
160
+ else {
161
+ this._hideElementWithoutGroup(toolbarItem, itemPriority);
162
+ }
163
+ return shouldAlwaysBeInOverflow ? _contentWidth : MAX_CONTENT_SIZE;
188
164
  }
189
- return lowestGroup;
190
- }, itemGroup);
165
+ else {
166
+ this._normalElements.push(toolbarItem);
167
+ return _contentWidth + itemWidth;
168
+ }
169
+ }, 0);
170
+ this._collapseLastSpacerElement(this._overflowElements, this._normalElements);
171
+ this._addToolbarItemToOverflow(this._overflowElements);
172
+ this._disappearElements.forEach(this._removeToolbarItemFromDOM.bind(this));
173
+ this._normalElements = [...this._getOrderedItemsFollowingQuery(this._normalElements)];
174
+ this._overflowElements = [...this._getOrderedItemsFollowingQuery(this._overflowElements)];
175
+ this.toolbarItems.forEach((item) => this._changeItemVisibilityState(item.elementRef.nativeElement, true));
176
+ this._changeOverflowVisibleState(this._overflowElements.length > 0);
177
+ this._cd.markForCheck();
178
+ }
179
+ /** @hidden */
180
+ _shouldToolbarItemBeRemovedByWidth(itemWidth, contentWidth) {
181
+ return contentWidth + itemWidth > this._toolbarWidth;
182
+ }
183
+ /** @hidden */
184
+ _getElementWidthWithMargin(toolbarItem) {
185
+ return (toolbarItem.elementRef.nativeElement && toolbarItem.elementRef.nativeElement.offsetWidth + ELEMENT_MARGIN);
186
+ }
187
+ /** @hidden */
188
+ _listenForItemChanges() {
189
+ this.toolbarItems.changes.pipe(filter(() => this.shouldOverflow)).subscribe(() => this._onResize());
191
190
  }
192
191
  /** @hidden */
193
- _getElementsFromCurrentGroup(itemGroup, groupedCollection, groupedCollectionPriority) {
194
- const lowestPriorityFromGroup = this._getLowestPriorityFromGroup(itemGroup, groupedCollectionPriority);
195
- if (!groupedCollection || !groupedCollectionPriority) {
196
- return [];
192
+ _getElementPriority(toolbarItem) {
193
+ const priority = toolbarItem.elementRef.nativeElement && toolbarItem.elementRef.nativeElement.attributes.fdOverflowPriority;
194
+ return (priority && priority.value) || "high" /* OverflowPriorityEnum.HIGH */;
195
+ }
196
+ /** @hidden */
197
+ _getElementGroup(toolbarItem) {
198
+ const itemGroup = toolbarItem.elementRef.nativeElement && toolbarItem.elementRef.nativeElement.attributes.fdOverflowGroup;
199
+ return (itemGroup && itemGroup.value) || 0;
200
+ }
201
+ /** @hidden */
202
+ _hideElementsFromCurrentGroup(itemGroup) {
203
+ const lowestPriorityFromGroup = this._getLowestPriorityFromGroup(itemGroup);
204
+ if (!this._groupedCollection || !this._groupedCollectionPriority) {
205
+ return;
197
206
  }
198
- let itemsToRemove = groupedCollection[lowestPriorityFromGroup];
199
- delete groupedCollection[lowestPriorityFromGroup];
200
- delete groupedCollectionPriority[lowestPriorityFromGroup];
207
+ let itemsToRemove = this._groupedCollection[lowestPriorityFromGroup];
208
+ delete this._groupedCollection[lowestPriorityFromGroup];
209
+ delete this._groupedCollectionPriority[lowestPriorityFromGroup];
201
210
  if (lowestPriorityFromGroup !== itemGroup) {
202
- itemsToRemove = [...itemsToRemove, ...groupedCollection[itemGroup]];
203
- delete groupedCollection[itemGroup];
204
- delete groupedCollectionPriority[itemGroup];
211
+ itemsToRemove = [...itemsToRemove, ...this._groupedCollection[itemGroup]];
212
+ delete this._groupedCollection[itemGroup];
213
+ delete this._groupedCollectionPriority[itemGroup];
205
214
  }
206
- return itemsToRemove;
207
- }
208
- /** @hidden Get the object with grouped arrays of elements. */
209
- _getGroupedCollection(toolbarItems) {
210
- return toolbarItems.reduce((acc, item) => {
211
- const itemPrio = item.priority;
212
- const itemGroup = item.group;
213
- if (itemPrio === "never" /* OverflowPriorityEnum.NEVER */ ||
214
- itemPrio === "always" /* OverflowPriorityEnum.ALWAYS */ ||
215
- itemGroup === 0) {
216
- return acc;
215
+ itemsToRemove?.forEach((item) => {
216
+ this._removeItemFromArray(this._normalElements, item);
217
+ const isDisappear = this._getElementPriority(item) === "disappear" /* OverflowPriorityEnum.DISAPPEAR */;
218
+ if (isDisappear) {
219
+ this._disappearElements.push(item);
217
220
  }
218
- if (!acc[itemGroup]) {
219
- acc[itemGroup] = [];
221
+ if (this._overflowElements.indexOf(item) === -1 && !isDisappear) {
222
+ this._overflowElements.push(item);
220
223
  }
221
- acc[itemGroup].push(item);
222
- return acc;
223
- }, {});
224
- }
225
- /** @hidden Get the object with the highest priority for each group of elements. */
226
- _getGroupedCollectionPriority(groupedCollection) {
227
- const groups = Object.keys(groupedCollection);
228
- return groups.reduce((acc, itemGroup) => {
229
- const sortedPriorities = groupedCollection[itemGroup]
230
- .map((i) => i.priority)
231
- .filter((prio) => prio !== "always" /* OverflowPriorityEnum.ALWAYS */ && prio !== "never" /* OverflowPriorityEnum.NEVER */)
232
- .sort(this._sortPriorities);
233
- acc[itemGroup] = sortedPriorities[0];
234
- return acc;
235
- }, {});
224
+ });
236
225
  }
237
- /** @hidden Sort priorities of elements/groups. */
238
- _sortPriorities(a, b) {
239
- return OVERFLOW_PRIORITY_SCORE.get(b) - OVERFLOW_PRIORITY_SCORE.get(a);
226
+ /** @hidden */
227
+ _hideElementWithoutGroup(toolbarItem, itemPriority) {
228
+ const isDisappear = itemPriority === "disappear" /* OverflowPriorityEnum.DISAPPEAR */;
229
+ if (isDisappear) {
230
+ this._disappearElements.push(toolbarItem);
231
+ }
232
+ else {
233
+ this._overflowElements.push(toolbarItem);
234
+ }
240
235
  }
241
236
  /** @hidden Sort by group and priority and initial position */
242
- _getSortedByPriorityAndGroupItems(toolbarItems) {
243
- const notSorted = toolbarItems.map((element, index) => ({ element, index }));
237
+ _getSortedByPriorityAndGroupItems() {
238
+ const notSorted = this.toolbarItems.toArray().map((element, index) => ({ element, index }));
244
239
  const groups = notSorted.reduce((gr, item) => {
245
- let groupId = item.element.group;
246
- const itemPrio = item.element.priority;
240
+ let groupId = this._getElementGroup(item.element);
241
+ const itemPrio = this._getElementPriority(item.element);
247
242
  if (itemPrio === "never" /* OverflowPriorityEnum.NEVER */ || itemPrio === "always" /* OverflowPriorityEnum.ALWAYS */) {
248
243
  groupId = 0;
249
244
  }
@@ -262,7 +257,7 @@ export class ToolbarComponent {
262
257
  let maxPriority = 0;
263
258
  for (const item of groups[g]) {
264
259
  minIndex = Math.min(minIndex, item.index);
265
- maxPriority = Math.max(maxPriority, OVERFLOW_PRIORITY_SCORE.get(item.element.priority) ?? -Infinity);
260
+ maxPriority = Math.max(maxPriority, OVERFLOW_PRIORITY_SCORE.get(this._getElementPriority(item.element)) ?? -Infinity);
266
261
  }
267
262
  return { group: groups[g].map(({ element }) => element), minIndex, maxPriority };
268
263
  })
@@ -270,44 +265,164 @@ export class ToolbarComponent {
270
265
  ? []
271
266
  : groups[0].map((item) => ({
272
267
  group: [item.element],
273
- maxPriority: OVERFLOW_PRIORITY_SCORE.get(item.element.priority),
268
+ maxPriority: OVERFLOW_PRIORITY_SCORE.get(this._getElementPriority(item.element)),
274
269
  minIndex: item.index
275
270
  })))
276
271
  .sort((a, b) => b.maxPriority - a.maxPriority || a.minIndex - b.minIndex)
277
272
  .reduce((arr, i) => arr.concat(i.group), []);
278
273
  }
274
+ /** @hidden Get the object with grouped arrays of elements. */
275
+ _getGroupedCollection() {
276
+ const collection = (this.toolbarItems &&
277
+ this.toolbarItems.reduce((acc, item) => {
278
+ const itemPrio = this._getElementPriority(item);
279
+ if (itemPrio === "never" /* OverflowPriorityEnum.NEVER */ || itemPrio === "always" /* OverflowPriorityEnum.ALWAYS */) {
280
+ return acc;
281
+ }
282
+ const itemGroup = this._getElementGroup(item);
283
+ acc[itemGroup] && acc[itemGroup].length ? acc[itemGroup].push(item) : (acc[itemGroup] = [item]);
284
+ return acc;
285
+ }, {})) ||
286
+ {};
287
+ delete collection[0];
288
+ return collection;
289
+ }
290
+ /** @hidden Get the object with the highest priority for each group of elements. */
291
+ _getGroupedCollectionPriority() {
292
+ if (!this._groupedCollection) {
293
+ return {};
294
+ }
295
+ const groups = Object.keys(this._groupedCollection);
296
+ return groups.reduce((acc, itemGroup) => {
297
+ const sortedPriorities = this._groupedCollection[itemGroup].map(this._getElementPriority)
298
+ .filter((prio) => prio !== "always" /* OverflowPriorityEnum.ALWAYS */ && prio !== "never" /* OverflowPriorityEnum.NEVER */)
299
+ .sort(this._sortPriorities.bind(this));
300
+ acc[itemGroup] = sortedPriorities[0];
301
+ return acc;
302
+ }, {});
303
+ }
304
+ /** @hidden Get group number with the lowest priority.
305
+ * Uses for detecting a group of elements which would be hidden from the toolbar.
306
+ * */
307
+ _getLowestPriorityFromGroup(itemGroup) {
308
+ const priority = this._groupedCollectionPriority;
309
+ if (!priority || !OVERFLOW_PRIORITY_SCORE.get(priority[itemGroup])) {
310
+ return itemGroup;
311
+ }
312
+ const groups = Object.keys(priority);
313
+ return groups.reduce((lowestGroup, currentGroup) => {
314
+ const lowestGroupPriority = priority[lowestGroup];
315
+ const currentGroupPriority = priority[currentGroup];
316
+ if (OVERFLOW_PRIORITY_SCORE.get(currentGroupPriority) < OVERFLOW_PRIORITY_SCORE.get(lowestGroupPriority)) {
317
+ return +currentGroup;
318
+ }
319
+ return lowestGroup;
320
+ }, itemGroup);
321
+ }
322
+ /** @hidden */
323
+ _removeItemFromArray(toolbarItems, toolbarItem) {
324
+ const itemIndex = toolbarItems.indexOf(toolbarItem);
325
+ return itemIndex >= 0 ? toolbarItems.splice(itemIndex, 1)[0] : null;
326
+ }
327
+ /** @hidden */
328
+ _removeToolbarItemFromDOM(toolbarItem) {
329
+ if (toolbarItem.elementRef.nativeElement && toolbarItem.elementRef.nativeElement.parentNode) {
330
+ // IE11 workaround element.remove() is not supported
331
+ this._renderer.removeChild(this.elementRef().nativeElement, toolbarItem.elementRef.nativeElement);
332
+ }
333
+ }
334
+ /** @hidden */
335
+ _addToolbarItemToOverflow(toolbarItems) {
336
+ toolbarItems.forEach((x) => {
337
+ if (this._overflowBody) {
338
+ this._overflowBody.appendChild(x.elementRef.nativeElement);
339
+ }
340
+ });
341
+ }
342
+ /** @hidden */
343
+ _reset() {
344
+ this._normalElements.forEach(this._removeToolbarItemFromDOM.bind(this));
345
+ this._overflowElements.forEach(this._removeToolbarItemFromDOM.bind(this));
346
+ if (this.overflowSpacer) {
347
+ this.toolbarItems.map((x) => {
348
+ this._renderer.insertBefore(this._toolbar, x.elementRef.nativeElement, this.overflowSpacer.nativeElement);
349
+ });
350
+ }
351
+ this._overflowElements = [];
352
+ this._normalElements = [];
353
+ this._disappearElements = [];
354
+ this._groupedCollection = null;
355
+ this._groupedCollectionPriority = null;
356
+ this._changeOverflowVisibleState(false);
357
+ }
358
+ /** @hidden */
359
+ _changeOverflowVisibleState(visible) {
360
+ this.overflowVisibility = of(visible).pipe(debounceTime(1));
361
+ }
362
+ /** @hidden */
363
+ _changeItemVisibilityState(element, visible) {
364
+ const fadeIn = 'fd-toolbar-fade-in';
365
+ const fadeOut = 'fd-toolbar-fade-out';
366
+ if (visible) {
367
+ element.classList.add(fadeIn);
368
+ element.classList.remove(fadeOut);
369
+ return;
370
+ }
371
+ element.classList.add(fadeOut);
372
+ element.classList.remove(fadeIn);
373
+ }
374
+ /** @hidden Sort priorities of elements/groups. */
375
+ _sortPriorities(a, b) {
376
+ return OVERFLOW_PRIORITY_SCORE.get(b) - OVERFLOW_PRIORITY_SCORE.get(a);
377
+ }
378
+ /** @hidden */
379
+ _collapseLastSpacerElement(overflowElements, normalElements) {
380
+ if (!normalElements || normalElements.length < 1) {
381
+ return;
382
+ }
383
+ const isSpacer = (element) => element.elementRef.nativeElement.classList.contains('fd-toolbar__spacer');
384
+ let lastItem = normalElements[normalElements.length - 1];
385
+ while (isSpacer(lastItem) && normalElements.length > 0) {
386
+ overflowElements.push(normalElements.pop());
387
+ lastItem = normalElements[normalElements.length - 1];
388
+ }
389
+ }
390
+ /** @hidden */
391
+ _getOrderedItemsFollowingQuery(toolbarItems) {
392
+ const queryArray = this.toolbarItems.toArray();
393
+ const sortMethod = (a, b) => queryArray.findIndex((_item) => _item === a) > queryArray.findIndex((_item) => _item === b) ? 1 : -1;
394
+ return toolbarItems.sort(sortMethod);
395
+ }
279
396
  }
280
- ToolbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ToolbarComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.ContentDensityObserver }, { token: i2.DestroyedService }, { token: i2.ResizeObserverService }, { token: i0.NgZone }, { token: DYNAMIC_PAGE_HEADER_TOKEN, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component });
281
- ToolbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: ToolbarComponent, selector: "fd-toolbar", inputs: { titleId: "titleId", class: "class", shouldOverflow: "shouldOverflow", fdType: "fdType", hasTitle: "hasTitle", title: "title", active: "active", clearBorder: "clearBorder", forceOverflow: "forceOverflow", tabindex: "tabindex" }, providers: [
397
+ ToolbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: ToolbarComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i1.ContentDensityObserver }, { token: i2.DestroyedService }, { token: DYNAMIC_PAGE_HEADER_TOKEN, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Component });
398
+ ToolbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.1", type: ToolbarComponent, selector: "fd-toolbar", inputs: { class: "class", shouldOverflow: "shouldOverflow", fdType: "fdType", hasTitle: "hasTitle", title: "title", active: "active", clearBorder: "clearBorder", forceOverflow: "forceOverflow", tabindex: "tabindex" }, providers: [
282
399
  contentDensityObserverProviders({
283
400
  defaultContentDensity: ContentDensityMode.COMPACT
284
401
  }),
285
402
  DestroyedService
286
- ], queries: [{ propertyName: "titleComponent", first: true, predicate: TitleToken, descendants: true }, { propertyName: "toolbarItems", predicate: i0.forwardRef(function () { return ToolbarItem; }) }], viewQueries: [{ propertyName: "toolbar", first: true, predicate: ["toolbar"], descendants: true }, { propertyName: "titleElement", first: true, predicate: ["titleElement"], descendants: true }], ngImport: i0, template: "<div #toolbar [tabindex]=\"tabindex\" [class.fd-toolbar--cozy]=\"_contentDensityObserver.isCozy$ | async\">\n <h4 *ngIf=\"title\" class=\"fd-title fd-title--h4 fd-toolbar__title\" [id]=\"titleId\" #titleElement>{{ title }}</h4>\n\n <ng-content></ng-content>\n\n <ng-container *ngIf=\"overflownItems.length > 0\">\n <fd-toolbar-spacer></fd-toolbar-spacer>\n <fd-toolbar-separator></fd-toolbar-separator>\n <fd-popover placement=\"bottom-end\" [noArrow]=\"true\" class=\"fd-popover\">\n <fd-popover-control>\n <button\n fd-button\n title=\"More\"\n aria-label=\"More\"\n aria-haspopup=\"true\"\n fdType=\"transparent\"\n glyph=\"overflow\"\n ></button>\n </fd-popover-control>\n\n <fd-popover-body>\n <div class=\"fd-toolbar__overflow\">\n <ng-container *ngFor=\"let overflowedItem of overflownItems\">\n <fdk-dynamic-portal\n [domElement]=\"overflowedItem.element\"\n [style.display]=\"overflowedItem.priority === 'disappear' ? 'none' : 'flex'\"\n [style.flex-direction]=\"overflowedItem.priority === 'disappear' ? undefined : 'column'\"\n >\n </fdk-dynamic-portal>\n </ng-container>\n </div>\n </fd-popover-body>\n </fd-popover>\n </ng-container>\n</div>\n", styles: ["/*!\n * Fundamental Library Styles v0.28.3\n * Copyright (c) 2023 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-toolbar>*~:not(.fd-toolbar__spacer){margin-left:.5rem}.fd-toolbar>*~[dir=rtl]:not(.fd-toolbar__spacer),[dir=rtl] .fd-toolbar>*~:not(.fd-toolbar__spacer){margin-left:0;margin-right:.5rem}.fd-toolbar{-webkit-box-sizing:border-box;align-items:center;border:0;border-bottom:.0625rem solid var(--sapGroup_TitleBorderColor);box-sizing:border-box;color:var(--sapTextColor);display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:2rem;line-height:var(--sapContent_LineHeight);margin:0;padding:0 .5rem}.fd-toolbar:after,.fd-toolbar:before{box-sizing:inherit;font-size:inherit}.fd-toolbar>.fd-toolbar__spacer+:not(.fd-toolbar__spacer){margin-left:0;margin-right:0}.fd-toolbar--title{background-color:var(--sapGroup_TitleBackground)!important;height:2.75rem;padding:0 .5rem 0 1rem}.fd-toolbar--clear{border-bottom:none}.fd-toolbar--auto{background-color:var(--fdToolbar_Auto_Background)}.fd-toolbar--solid{background-color:var(--fdToolbar_Solid_Background)}.fd-toolbar--transparent{background-color:var(--sapToolbar_Background)}.fd-toolbar--fade-in{-webkit-transition:visibility 0s linear 0s,opacity 1s;opacity:1;transition:visibility 0s linear 0s,opacity 1s;visibility:visible}.fd-toolbar--fade-out{-webkit-transition:visibility 0s linear 1s,opacity 1ms;opacity:0;transition:visibility 0s linear 1s,opacity 1ms;visibility:hidden}.fd-toolbar--info{background-color:var(--sapInfobar_NonInteractive_Background);color:var(--sapList_TextColor);outline:none;padding-left:.5rem;padding-right:1rem;position:relative}.fd-toolbar--info.fd-toolbar--active{background-color:var(--sapInfobar_Background);color:var(--sapInfobar_TextColor)}.fd-toolbar--info.fd-toolbar--active.is-hover,.fd-toolbar--info.fd-toolbar--active:hover{background-color:var(--sapInfobar_Hover_Background)}.fd-toolbar--info.fd-toolbar--active.is-active,.fd-toolbar--info.fd-toolbar--active:active{background-color:var(--sapInfobar_Active_Background)}.fd-toolbar--info[dir=rtl],[dir=rtl] .fd-toolbar--info{padding-left:1rem;padding-right:.5rem}.fd-toolbar--info.is-focus:after,.fd-toolbar--info:focus:after{border-color:var(--sapContent_FocusColor);border-style:var(--sapContent_FocusStyle);border-width:var(--sapContent_FocusWidth);content:\"\";inset:.0625rem;pointer-events:none;position:absolute}.fd-toolbar--info.is-focus,.fd-toolbar--info:focus{z-index:5}.fd-toolbar--info.is-focus:after,.fd-toolbar--info:focus:after{border-color:var(--fdToolbar_Info_Outline_Color)}.fd-toolbar--info [class*=sap-icon]{color:var(--sapInfobar_TextColor);font-size:1rem;height:1rem;line-height:1rem}.fd-toolbar__spacer{-webkit-box-sizing:border-box;-webkit-box-flex:1;-ms-flex:1 auto;border:0;box-sizing:border-box;color:var(--sapTextColor);flex:1 auto;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:100%;line-height:var(--sapContent_LineHeight);margin:0;padding:0}.fd-toolbar__spacer:after,.fd-toolbar__spacer:before{box-sizing:inherit;font-size:inherit}.fd-toolbar__spacer--fixed{-webkit-box-flex:0;-ms-flex:none;display:inline-block;flex:none}.fd-toolbar__separator{-webkit-box-sizing:border-box;background-color:var(--sapToolbar_SeparatorColor);border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:1.5rem;line-height:var(--sapContent_LineHeight);margin:0;padding:0;width:.0625rem}.fd-toolbar__separator:after,.fd-toolbar__separator:before{box-sizing:inherit;font-size:inherit}.fd-toolbar__overflow{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;flex-direction:column;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;max-height:50vh;max-width:20rem;overflow:auto;padding:.1875rem .375rem}.fd-toolbar__overflow:after,.fd-toolbar__overflow:before{box-sizing:inherit;font-size:inherit}.fd-toolbar__overflow .fd-toolbar__overflow-button{justify-content:flex-start;margin:.1875rem 0;text-align:left;width:auto}.fd-toolbar__overflow .fd-toolbar__overflow-button[dir=rtl],[dir=rtl] .fd-toolbar__overflow .fd-toolbar__overflow-button{text-align:right}.fd-toolbar__overflow .fd-toolbar__overflow-button--menu{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;-webkit-box-pack:justify;-ms-flex-pack:justify;align-items:center;display:flex;justify-content:center;justify-content:space-between;max-width:100%}.fd-toolbar__overflow .fd-toolbar__separator{-webkit-box-sizing:border-box;background-color:var(--sapToolbar_SeparatorColor);border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:.0625rem;line-height:var(--sapContent_LineHeight);margin:.1875rem;padding:0;width:auto}.fd-toolbar__overflow .fd-toolbar__separator:after,.fd-toolbar__overflow .fd-toolbar__separator:before{box-sizing:inherit;font-size:inherit}.fd-toolbar__overflow .fd-toolbar__overflow-form-label,.fd-toolbar__overflow .fd-toolbar__overflow-label{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;overflow:hidden;padding:0;text-overflow:ellipsis;white-space:nowrap}.fd-toolbar__overflow .fd-toolbar__overflow-form-label:after,.fd-toolbar__overflow .fd-toolbar__overflow-form-label:before,.fd-toolbar__overflow .fd-toolbar__overflow-label:after,.fd-toolbar__overflow .fd-toolbar__overflow-label:before{box-sizing:inherit;font-size:inherit}.fd-toolbar__overflow .fd-toolbar__overflow-form-label--text,.fd-toolbar__overflow .fd-toolbar__overflow-label--text{margin-top:.4375rem}.fd-toolbar__title{color:var(--sapGroup_TitleTextColor);font-size:var(--sapGroup_Title_FontSize)}.fd-toolbar--cozy{height:2.75rem;min-height:2.75rem}.fd-toolbar--cozy.fd-toolbar--info{height:2rem;min-height:2rem}.fd-toolbar--cozy .fd-toolbar__overflow{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;padding:.25rem .5rem}.fd-toolbar--cozy .fd-toolbar__overflow:after,.fd-toolbar--cozy .fd-toolbar__overflow:before{box-sizing:inherit;font-size:inherit}.fd-toolbar>*{flex-shrink:0}fdk-dynamic-portal:not(:last-of-type) [fd-toolbar-item]{margin-bottom:.25rem}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i5.PopoverControlComponent, selector: "fd-popover-control" }, { kind: "component", type: i5.PopoverBodyComponent, selector: "fd-popover-body" }, { kind: "component", type: i5.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig"] }, { kind: "component", type: i2.DynamicPortalComponent, selector: "fdk-dynamic-portal", inputs: ["domElement", "component", "template"] }, { kind: "directive", type: i6.ToolbarSpacerDirective, selector: "fd-toolbar-spacer", inputs: ["width", "class", "fixed"] }, { kind: "component", type: i7.ToolbarSeparatorComponent, selector: "fd-toolbar-separator" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
403
+ ], queries: [{ propertyName: "titleComponent", first: true, predicate: TitleToken, descendants: true }, { propertyName: "toolbarItems", predicate: i0.forwardRef(function () { return ToolbarItemDirective; }) }], viewQueries: [{ propertyName: "toolbar", first: true, predicate: ["toolbar"], descendants: true }, { propertyName: "overflowBody", first: true, predicate: ["overflowBody"], descendants: true }, { propertyName: "overflowSpacer", first: true, predicate: ["overflowSpacer"], descendants: true }], ngImport: i0, template: "<div #toolbar [tabindex]=\"tabindex\" [class.fd-toolbar--cozy]=\"_contentDensityObserver.isCozy$ | async\">\n <h4 *ngIf=\"title\" class=\"fd-title fd-title--h4 fd-toolbar__title\">{{ title }}</h4>\n\n <ng-content></ng-content>\n\n <ng-container *ngIf=\"shouldOverflow\">\n <span #overflowSpacer class=\"fd-toolbar__spacer\"></span>\n\n <span class=\"fd-toolbar__separator\" *ngIf=\"overflowVisibility | async\"></span>\n\n <fd-popover placement=\"bottom-end\" [noArrow]=\"true\" class=\"fd-popover\">\n <fd-popover-control>\n <button\n *ngIf=\"overflowVisibility | async\"\n fd-button\n title=\"More\"\n aria-label=\"More\"\n aria-haspopup=\"true\"\n fdType=\"transparent\"\n glyph=\"overflow\"\n ></button>\n </fd-popover-control>\n\n <fd-popover-body>\n <div class=\"fd-toolbar__overflow\" #overflowBody></div>\n </fd-popover-body>\n </fd-popover>\n </ng-container>\n</div>\n", styles: ["/*!\n * Fundamental Library Styles v0.28.3\n * Copyright (c) 2023 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-toolbar>*~:not(.fd-toolbar__spacer){margin-left:.5rem}.fd-toolbar>*~[dir=rtl]:not(.fd-toolbar__spacer),[dir=rtl] .fd-toolbar>*~:not(.fd-toolbar__spacer){margin-left:0;margin-right:.5rem}.fd-toolbar{-webkit-box-sizing:border-box;align-items:center;border:0;border-bottom:.0625rem solid var(--sapGroup_TitleBorderColor);box-sizing:border-box;color:var(--sapTextColor);display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:2rem;line-height:var(--sapContent_LineHeight);margin:0;padding:0 .5rem}.fd-toolbar:after,.fd-toolbar:before{box-sizing:inherit;font-size:inherit}.fd-toolbar>.fd-toolbar__spacer+:not(.fd-toolbar__spacer){margin-left:0;margin-right:0}.fd-toolbar--title{background-color:var(--sapGroup_TitleBackground)!important;height:2.75rem;padding:0 .5rem 0 1rem}.fd-toolbar--clear{border-bottom:none}.fd-toolbar--auto{background-color:var(--fdToolbar_Auto_Background)}.fd-toolbar--solid{background-color:var(--fdToolbar_Solid_Background)}.fd-toolbar--transparent{background-color:var(--sapToolbar_Background)}.fd-toolbar--fade-in{-webkit-transition:visibility 0s linear 0s,opacity 1s;opacity:1;transition:visibility 0s linear 0s,opacity 1s;visibility:visible}.fd-toolbar--fade-out{-webkit-transition:visibility 0s linear 1s,opacity 1ms;opacity:0;transition:visibility 0s linear 1s,opacity 1ms;visibility:hidden}.fd-toolbar--info{background-color:var(--sapInfobar_NonInteractive_Background);color:var(--sapList_TextColor);outline:none;padding-left:.5rem;padding-right:1rem;position:relative}.fd-toolbar--info.fd-toolbar--active{background-color:var(--sapInfobar_Background);color:var(--sapInfobar_TextColor)}.fd-toolbar--info.fd-toolbar--active.is-hover,.fd-toolbar--info.fd-toolbar--active:hover{background-color:var(--sapInfobar_Hover_Background)}.fd-toolbar--info.fd-toolbar--active.is-active,.fd-toolbar--info.fd-toolbar--active:active{background-color:var(--sapInfobar_Active_Background)}.fd-toolbar--info[dir=rtl],[dir=rtl] .fd-toolbar--info{padding-left:1rem;padding-right:.5rem}.fd-toolbar--info.is-focus:after,.fd-toolbar--info:focus:after{border-color:var(--sapContent_FocusColor);border-style:var(--sapContent_FocusStyle);border-width:var(--sapContent_FocusWidth);content:\"\";inset:.0625rem;pointer-events:none;position:absolute}.fd-toolbar--info.is-focus,.fd-toolbar--info:focus{z-index:5}.fd-toolbar--info.is-focus:after,.fd-toolbar--info:focus:after{border-color:var(--fdToolbar_Info_Outline_Color)}.fd-toolbar--info [class*=sap-icon]{color:var(--sapInfobar_TextColor);font-size:1rem;height:1rem;line-height:1rem}.fd-toolbar__spacer{-webkit-box-sizing:border-box;-webkit-box-flex:1;-ms-flex:1 auto;border:0;box-sizing:border-box;color:var(--sapTextColor);flex:1 auto;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:100%;line-height:var(--sapContent_LineHeight);margin:0;padding:0}.fd-toolbar__spacer:after,.fd-toolbar__spacer:before{box-sizing:inherit;font-size:inherit}.fd-toolbar__spacer--fixed{-webkit-box-flex:0;-ms-flex:none;display:inline-block;flex:none}.fd-toolbar__separator{-webkit-box-sizing:border-box;background-color:var(--sapToolbar_SeparatorColor);border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:1.5rem;line-height:var(--sapContent_LineHeight);margin:0;padding:0;width:.0625rem}.fd-toolbar__separator:after,.fd-toolbar__separator:before{box-sizing:inherit;font-size:inherit}.fd-toolbar__overflow{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;flex-direction:column;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;max-height:50vh;max-width:20rem;overflow:auto;padding:.1875rem .375rem}.fd-toolbar__overflow:after,.fd-toolbar__overflow:before{box-sizing:inherit;font-size:inherit}.fd-toolbar__overflow .fd-toolbar__overflow-button{justify-content:flex-start;margin:.1875rem 0;text-align:left;width:auto}.fd-toolbar__overflow .fd-toolbar__overflow-button[dir=rtl],[dir=rtl] .fd-toolbar__overflow .fd-toolbar__overflow-button{text-align:right}.fd-toolbar__overflow .fd-toolbar__overflow-button--menu{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;-webkit-box-pack:justify;-ms-flex-pack:justify;align-items:center;display:flex;justify-content:center;justify-content:space-between;max-width:100%}.fd-toolbar__overflow .fd-toolbar__separator{-webkit-box-sizing:border-box;background-color:var(--sapToolbar_SeparatorColor);border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:.0625rem;line-height:var(--sapContent_LineHeight);margin:.1875rem;padding:0;width:auto}.fd-toolbar__overflow .fd-toolbar__separator:after,.fd-toolbar__overflow .fd-toolbar__separator:before{box-sizing:inherit;font-size:inherit}.fd-toolbar__overflow .fd-toolbar__overflow-form-label,.fd-toolbar__overflow .fd-toolbar__overflow-label{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;overflow:hidden;padding:0;text-overflow:ellipsis;white-space:nowrap}.fd-toolbar__overflow .fd-toolbar__overflow-form-label:after,.fd-toolbar__overflow .fd-toolbar__overflow-form-label:before,.fd-toolbar__overflow .fd-toolbar__overflow-label:after,.fd-toolbar__overflow .fd-toolbar__overflow-label:before{box-sizing:inherit;font-size:inherit}.fd-toolbar__overflow .fd-toolbar__overflow-form-label--text,.fd-toolbar__overflow .fd-toolbar__overflow-label--text{margin-top:.4375rem}.fd-toolbar__title{color:var(--sapGroup_TitleTextColor);font-size:var(--sapGroup_Title_FontSize)}.fd-toolbar--cozy{height:2.75rem;min-height:2.75rem}.fd-toolbar--cozy.fd-toolbar--info{height:2rem;min-height:2rem}.fd-toolbar--cozy .fd-toolbar__overflow{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;padding:.25rem .5rem}.fd-toolbar--cozy .fd-toolbar__overflow:after,.fd-toolbar--cozy .fd-toolbar__overflow:before{box-sizing:inherit;font-size:inherit}.fd-toolbar>*{flex-shrink:0}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i5.PopoverControlComponent, selector: "fd-popover-control" }, { kind: "component", type: i5.PopoverBodyComponent, selector: "fd-popover-body" }, { kind: "component", type: i5.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
287
404
  __decorate([
288
405
  applyCssClass,
289
406
  __metadata("design:type", Function),
290
407
  __metadata("design:paramtypes", []),
291
408
  __metadata("design:returntype", Array)
292
409
  ], ToolbarComponent.prototype, "buildComponentCssClass", null);
293
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: ToolbarComponent, decorators: [{
410
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: ToolbarComponent, decorators: [{
294
411
  type: Component,
295
412
  args: [{ selector: 'fd-toolbar', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
296
413
  contentDensityObserverProviders({
297
414
  defaultContentDensity: ContentDensityMode.COMPACT
298
415
  }),
299
416
  DestroyedService
300
- ], template: "<div #toolbar [tabindex]=\"tabindex\" [class.fd-toolbar--cozy]=\"_contentDensityObserver.isCozy$ | async\">\n <h4 *ngIf=\"title\" class=\"fd-title fd-title--h4 fd-toolbar__title\" [id]=\"titleId\" #titleElement>{{ title }}</h4>\n\n <ng-content></ng-content>\n\n <ng-container *ngIf=\"overflownItems.length > 0\">\n <fd-toolbar-spacer></fd-toolbar-spacer>\n <fd-toolbar-separator></fd-toolbar-separator>\n <fd-popover placement=\"bottom-end\" [noArrow]=\"true\" class=\"fd-popover\">\n <fd-popover-control>\n <button\n fd-button\n title=\"More\"\n aria-label=\"More\"\n aria-haspopup=\"true\"\n fdType=\"transparent\"\n glyph=\"overflow\"\n ></button>\n </fd-popover-control>\n\n <fd-popover-body>\n <div class=\"fd-toolbar__overflow\">\n <ng-container *ngFor=\"let overflowedItem of overflownItems\">\n <fdk-dynamic-portal\n [domElement]=\"overflowedItem.element\"\n [style.display]=\"overflowedItem.priority === 'disappear' ? 'none' : 'flex'\"\n [style.flex-direction]=\"overflowedItem.priority === 'disappear' ? undefined : 'column'\"\n >\n </fdk-dynamic-portal>\n </ng-container>\n </div>\n </fd-popover-body>\n </fd-popover>\n </ng-container>\n</div>\n", styles: ["/*!\n * Fundamental Library Styles v0.28.3\n * Copyright (c) 2023 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-toolbar>*~:not(.fd-toolbar__spacer){margin-left:.5rem}.fd-toolbar>*~[dir=rtl]:not(.fd-toolbar__spacer),[dir=rtl] .fd-toolbar>*~:not(.fd-toolbar__spacer){margin-left:0;margin-right:.5rem}.fd-toolbar{-webkit-box-sizing:border-box;align-items:center;border:0;border-bottom:.0625rem solid var(--sapGroup_TitleBorderColor);box-sizing:border-box;color:var(--sapTextColor);display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:2rem;line-height:var(--sapContent_LineHeight);margin:0;padding:0 .5rem}.fd-toolbar:after,.fd-toolbar:before{box-sizing:inherit;font-size:inherit}.fd-toolbar>.fd-toolbar__spacer+:not(.fd-toolbar__spacer){margin-left:0;margin-right:0}.fd-toolbar--title{background-color:var(--sapGroup_TitleBackground)!important;height:2.75rem;padding:0 .5rem 0 1rem}.fd-toolbar--clear{border-bottom:none}.fd-toolbar--auto{background-color:var(--fdToolbar_Auto_Background)}.fd-toolbar--solid{background-color:var(--fdToolbar_Solid_Background)}.fd-toolbar--transparent{background-color:var(--sapToolbar_Background)}.fd-toolbar--fade-in{-webkit-transition:visibility 0s linear 0s,opacity 1s;opacity:1;transition:visibility 0s linear 0s,opacity 1s;visibility:visible}.fd-toolbar--fade-out{-webkit-transition:visibility 0s linear 1s,opacity 1ms;opacity:0;transition:visibility 0s linear 1s,opacity 1ms;visibility:hidden}.fd-toolbar--info{background-color:var(--sapInfobar_NonInteractive_Background);color:var(--sapList_TextColor);outline:none;padding-left:.5rem;padding-right:1rem;position:relative}.fd-toolbar--info.fd-toolbar--active{background-color:var(--sapInfobar_Background);color:var(--sapInfobar_TextColor)}.fd-toolbar--info.fd-toolbar--active.is-hover,.fd-toolbar--info.fd-toolbar--active:hover{background-color:var(--sapInfobar_Hover_Background)}.fd-toolbar--info.fd-toolbar--active.is-active,.fd-toolbar--info.fd-toolbar--active:active{background-color:var(--sapInfobar_Active_Background)}.fd-toolbar--info[dir=rtl],[dir=rtl] .fd-toolbar--info{padding-left:1rem;padding-right:.5rem}.fd-toolbar--info.is-focus:after,.fd-toolbar--info:focus:after{border-color:var(--sapContent_FocusColor);border-style:var(--sapContent_FocusStyle);border-width:var(--sapContent_FocusWidth);content:\"\";inset:.0625rem;pointer-events:none;position:absolute}.fd-toolbar--info.is-focus,.fd-toolbar--info:focus{z-index:5}.fd-toolbar--info.is-focus:after,.fd-toolbar--info:focus:after{border-color:var(--fdToolbar_Info_Outline_Color)}.fd-toolbar--info [class*=sap-icon]{color:var(--sapInfobar_TextColor);font-size:1rem;height:1rem;line-height:1rem}.fd-toolbar__spacer{-webkit-box-sizing:border-box;-webkit-box-flex:1;-ms-flex:1 auto;border:0;box-sizing:border-box;color:var(--sapTextColor);flex:1 auto;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:100%;line-height:var(--sapContent_LineHeight);margin:0;padding:0}.fd-toolbar__spacer:after,.fd-toolbar__spacer:before{box-sizing:inherit;font-size:inherit}.fd-toolbar__spacer--fixed{-webkit-box-flex:0;-ms-flex:none;display:inline-block;flex:none}.fd-toolbar__separator{-webkit-box-sizing:border-box;background-color:var(--sapToolbar_SeparatorColor);border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:1.5rem;line-height:var(--sapContent_LineHeight);margin:0;padding:0;width:.0625rem}.fd-toolbar__separator:after,.fd-toolbar__separator:before{box-sizing:inherit;font-size:inherit}.fd-toolbar__overflow{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;flex-direction:column;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;max-height:50vh;max-width:20rem;overflow:auto;padding:.1875rem .375rem}.fd-toolbar__overflow:after,.fd-toolbar__overflow:before{box-sizing:inherit;font-size:inherit}.fd-toolbar__overflow .fd-toolbar__overflow-button{justify-content:flex-start;margin:.1875rem 0;text-align:left;width:auto}.fd-toolbar__overflow .fd-toolbar__overflow-button[dir=rtl],[dir=rtl] .fd-toolbar__overflow .fd-toolbar__overflow-button{text-align:right}.fd-toolbar__overflow .fd-toolbar__overflow-button--menu{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;-webkit-box-pack:justify;-ms-flex-pack:justify;align-items:center;display:flex;justify-content:center;justify-content:space-between;max-width:100%}.fd-toolbar__overflow .fd-toolbar__separator{-webkit-box-sizing:border-box;background-color:var(--sapToolbar_SeparatorColor);border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:.0625rem;line-height:var(--sapContent_LineHeight);margin:.1875rem;padding:0;width:auto}.fd-toolbar__overflow .fd-toolbar__separator:after,.fd-toolbar__overflow .fd-toolbar__separator:before{box-sizing:inherit;font-size:inherit}.fd-toolbar__overflow .fd-toolbar__overflow-form-label,.fd-toolbar__overflow .fd-toolbar__overflow-label{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;overflow:hidden;padding:0;text-overflow:ellipsis;white-space:nowrap}.fd-toolbar__overflow .fd-toolbar__overflow-form-label:after,.fd-toolbar__overflow .fd-toolbar__overflow-form-label:before,.fd-toolbar__overflow .fd-toolbar__overflow-label:after,.fd-toolbar__overflow .fd-toolbar__overflow-label:before{box-sizing:inherit;font-size:inherit}.fd-toolbar__overflow .fd-toolbar__overflow-form-label--text,.fd-toolbar__overflow .fd-toolbar__overflow-label--text{margin-top:.4375rem}.fd-toolbar__title{color:var(--sapGroup_TitleTextColor);font-size:var(--sapGroup_Title_FontSize)}.fd-toolbar--cozy{height:2.75rem;min-height:2.75rem}.fd-toolbar--cozy.fd-toolbar--info{height:2rem;min-height:2rem}.fd-toolbar--cozy .fd-toolbar__overflow{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;padding:.25rem .5rem}.fd-toolbar--cozy .fd-toolbar__overflow:after,.fd-toolbar--cozy .fd-toolbar__overflow:before{box-sizing:inherit;font-size:inherit}.fd-toolbar>*{flex-shrink:0}fdk-dynamic-portal:not(:last-of-type) [fd-toolbar-item]{margin-bottom:.25rem}\n"] }]
301
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.ContentDensityObserver }, { type: i2.DestroyedService }, { type: i2.ResizeObserverService }, { type: i0.NgZone }, { type: undefined, decorators: [{
417
+ ], template: "<div #toolbar [tabindex]=\"tabindex\" [class.fd-toolbar--cozy]=\"_contentDensityObserver.isCozy$ | async\">\n <h4 *ngIf=\"title\" class=\"fd-title fd-title--h4 fd-toolbar__title\">{{ title }}</h4>\n\n <ng-content></ng-content>\n\n <ng-container *ngIf=\"shouldOverflow\">\n <span #overflowSpacer class=\"fd-toolbar__spacer\"></span>\n\n <span class=\"fd-toolbar__separator\" *ngIf=\"overflowVisibility | async\"></span>\n\n <fd-popover placement=\"bottom-end\" [noArrow]=\"true\" class=\"fd-popover\">\n <fd-popover-control>\n <button\n *ngIf=\"overflowVisibility | async\"\n fd-button\n title=\"More\"\n aria-label=\"More\"\n aria-haspopup=\"true\"\n fdType=\"transparent\"\n glyph=\"overflow\"\n ></button>\n </fd-popover-control>\n\n <fd-popover-body>\n <div class=\"fd-toolbar__overflow\" #overflowBody></div>\n </fd-popover-body>\n </fd-popover>\n </ng-container>\n</div>\n", styles: ["/*!\n * Fundamental Library Styles v0.28.3\n * Copyright (c) 2023 SAP SE or an SAP affiliate company.\n * Licensed under Apache License 2.0 (https://github.com/SAP/fundamental-styles/blob/main/LICENSE)\n */.fd-toolbar>*~:not(.fd-toolbar__spacer){margin-left:.5rem}.fd-toolbar>*~[dir=rtl]:not(.fd-toolbar__spacer),[dir=rtl] .fd-toolbar>*~:not(.fd-toolbar__spacer){margin-left:0;margin-right:.5rem}.fd-toolbar{-webkit-box-sizing:border-box;align-items:center;border:0;border-bottom:.0625rem solid var(--sapGroup_TitleBorderColor);box-sizing:border-box;color:var(--sapTextColor);display:flex;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:2rem;line-height:var(--sapContent_LineHeight);margin:0;padding:0 .5rem}.fd-toolbar:after,.fd-toolbar:before{box-sizing:inherit;font-size:inherit}.fd-toolbar>.fd-toolbar__spacer+:not(.fd-toolbar__spacer){margin-left:0;margin-right:0}.fd-toolbar--title{background-color:var(--sapGroup_TitleBackground)!important;height:2.75rem;padding:0 .5rem 0 1rem}.fd-toolbar--clear{border-bottom:none}.fd-toolbar--auto{background-color:var(--fdToolbar_Auto_Background)}.fd-toolbar--solid{background-color:var(--fdToolbar_Solid_Background)}.fd-toolbar--transparent{background-color:var(--sapToolbar_Background)}.fd-toolbar--fade-in{-webkit-transition:visibility 0s linear 0s,opacity 1s;opacity:1;transition:visibility 0s linear 0s,opacity 1s;visibility:visible}.fd-toolbar--fade-out{-webkit-transition:visibility 0s linear 1s,opacity 1ms;opacity:0;transition:visibility 0s linear 1s,opacity 1ms;visibility:hidden}.fd-toolbar--info{background-color:var(--sapInfobar_NonInteractive_Background);color:var(--sapList_TextColor);outline:none;padding-left:.5rem;padding-right:1rem;position:relative}.fd-toolbar--info.fd-toolbar--active{background-color:var(--sapInfobar_Background);color:var(--sapInfobar_TextColor)}.fd-toolbar--info.fd-toolbar--active.is-hover,.fd-toolbar--info.fd-toolbar--active:hover{background-color:var(--sapInfobar_Hover_Background)}.fd-toolbar--info.fd-toolbar--active.is-active,.fd-toolbar--info.fd-toolbar--active:active{background-color:var(--sapInfobar_Active_Background)}.fd-toolbar--info[dir=rtl],[dir=rtl] .fd-toolbar--info{padding-left:1rem;padding-right:.5rem}.fd-toolbar--info.is-focus:after,.fd-toolbar--info:focus:after{border-color:var(--sapContent_FocusColor);border-style:var(--sapContent_FocusStyle);border-width:var(--sapContent_FocusWidth);content:\"\";inset:.0625rem;pointer-events:none;position:absolute}.fd-toolbar--info.is-focus,.fd-toolbar--info:focus{z-index:5}.fd-toolbar--info.is-focus:after,.fd-toolbar--info:focus:after{border-color:var(--fdToolbar_Info_Outline_Color)}.fd-toolbar--info [class*=sap-icon]{color:var(--sapInfobar_TextColor);font-size:1rem;height:1rem;line-height:1rem}.fd-toolbar__spacer{-webkit-box-sizing:border-box;-webkit-box-flex:1;-ms-flex:1 auto;border:0;box-sizing:border-box;color:var(--sapTextColor);flex:1 auto;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:100%;line-height:var(--sapContent_LineHeight);margin:0;padding:0}.fd-toolbar__spacer:after,.fd-toolbar__spacer:before{box-sizing:inherit;font-size:inherit}.fd-toolbar__spacer--fixed{-webkit-box-flex:0;-ms-flex:none;display:inline-block;flex:none}.fd-toolbar__separator{-webkit-box-sizing:border-box;background-color:var(--sapToolbar_SeparatorColor);border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:1.5rem;line-height:var(--sapContent_LineHeight);margin:0;padding:0;width:.0625rem}.fd-toolbar__separator:after,.fd-toolbar__separator:before{box-sizing:inherit;font-size:inherit}.fd-toolbar__overflow{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);display:flex;flex-direction:column;font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;max-height:50vh;max-width:20rem;overflow:auto;padding:.1875rem .375rem}.fd-toolbar__overflow:after,.fd-toolbar__overflow:before{box-sizing:inherit;font-size:inherit}.fd-toolbar__overflow .fd-toolbar__overflow-button{justify-content:flex-start;margin:.1875rem 0;text-align:left;width:auto}.fd-toolbar__overflow .fd-toolbar__overflow-button[dir=rtl],[dir=rtl] .fd-toolbar__overflow .fd-toolbar__overflow-button{text-align:right}.fd-toolbar__overflow .fd-toolbar__overflow-button--menu{-webkit-box-pack:center;-ms-flex-pack:center;-webkit-box-align:center;-ms-flex-align:center;-webkit-box-pack:justify;-ms-flex-pack:justify;align-items:center;display:flex;justify-content:center;justify-content:space-between;max-width:100%}.fd-toolbar__overflow .fd-toolbar__separator{-webkit-box-sizing:border-box;background-color:var(--sapToolbar_SeparatorColor);border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;height:.0625rem;line-height:var(--sapContent_LineHeight);margin:.1875rem;padding:0;width:auto}.fd-toolbar__overflow .fd-toolbar__separator:after,.fd-toolbar__overflow .fd-toolbar__separator:before{box-sizing:inherit;font-size:inherit}.fd-toolbar__overflow .fd-toolbar__overflow-form-label,.fd-toolbar__overflow .fd-toolbar__overflow-label{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;overflow:hidden;padding:0;text-overflow:ellipsis;white-space:nowrap}.fd-toolbar__overflow .fd-toolbar__overflow-form-label:after,.fd-toolbar__overflow .fd-toolbar__overflow-form-label:before,.fd-toolbar__overflow .fd-toolbar__overflow-label:after,.fd-toolbar__overflow .fd-toolbar__overflow-label:before{box-sizing:inherit;font-size:inherit}.fd-toolbar__overflow .fd-toolbar__overflow-form-label--text,.fd-toolbar__overflow .fd-toolbar__overflow-label--text{margin-top:.4375rem}.fd-toolbar__title{color:var(--sapGroup_TitleTextColor);font-size:var(--sapGroup_Title_FontSize)}.fd-toolbar--cozy{height:2.75rem;min-height:2.75rem}.fd-toolbar--cozy.fd-toolbar--info{height:2rem;min-height:2rem}.fd-toolbar--cozy .fd-toolbar__overflow{-webkit-box-sizing:border-box;border:0;box-sizing:border-box;color:var(--sapTextColor);font-family:var(--sapFontFamily);font-size:var(--sapFontSize);font-weight:400;forced-color-adjust:none;line-height:var(--sapContent_LineHeight);margin:0;padding:.25rem .5rem}.fd-toolbar--cozy .fd-toolbar__overflow:after,.fd-toolbar--cozy .fd-toolbar__overflow:before{box-sizing:inherit;font-size:inherit}.fd-toolbar>*{flex-shrink:0}\n"] }]
418
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i1.ContentDensityObserver }, { type: i2.DestroyedService }, { type: undefined, decorators: [{
302
419
  type: Optional
303
420
  }, {
304
421
  type: SkipSelf
305
422
  }, {
306
423
  type: Inject,
307
424
  args: [DYNAMIC_PAGE_HEADER_TOKEN]
308
- }] }]; }, propDecorators: { titleId: [{
309
- type: Input
310
- }], class: [{
425
+ }] }]; }, propDecorators: { class: [{
311
426
  type: Input
312
427
  }], shouldOverflow: [{
313
428
  type: Input
@@ -328,14 +443,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImpor
328
443
  }], toolbar: [{
329
444
  type: ViewChild,
330
445
  args: ['toolbar']
331
- }], titleElement: [{
446
+ }], overflowBody: [{
447
+ type: ViewChild,
448
+ args: ['overflowBody']
449
+ }], overflowSpacer: [{
332
450
  type: ViewChild,
333
- args: ['titleElement']
451
+ args: ['overflowSpacer']
334
452
  }], toolbarItems: [{
335
453
  type: ContentChildren,
336
- args: [forwardRef(() => ToolbarItem)]
454
+ args: [forwardRef(() => ToolbarItemDirective)]
337
455
  }], titleComponent: [{
338
456
  type: ContentChild,
339
457
  args: [TitleToken]
340
458
  }], buildComponentCssClass: [] } });
341
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbGJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi90b29sYmFyL3Rvb2xiYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdG9vbGJhci90b29sYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBSUgsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFFBQVEsRUFDUixTQUFTLEVBQ1QsUUFBUSxFQUNSLFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHlCQUF5QixFQUFxQixNQUFNLDhCQUE4QixDQUFDO0FBRTVGLE9BQU8sRUFDSCxhQUFhLEVBRWIsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUV2QixxQkFBcUIsRUFDeEIsTUFBTSw0QkFBNEIsQ0FBQztBQUNwQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQWMsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3RixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUNILGtCQUFrQixFQUNsQixzQkFBc0IsRUFDdEIsK0JBQStCLEVBQ2xDLE1BQU0sdUNBQXVDLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7Ozs7Ozs7QUFFNUQsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLE1BQU0sY0FBYyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsY0FBYyxDQUFDO0FBQy9DLE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxD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Z0JBQWdCO2tCQWI1QixTQUFTOytCQUNJLFlBQVksaUJBR1AsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxhQUNwQzt3QkFDUCwrQkFBK0IsQ0FBQzs0QkFDNUIscUJBQXFCLEVBQUUsa0JBQWtCLENBQUMsT0FBTzt5QkFDcEQsQ0FBQzt3QkFDRixnQkFBZ0I7cUJBQ25COzswQkFvSEksUUFBUTs7MEJBQUksUUFBUTs7MEJBQUksTUFBTTsyQkFBQyx5QkFBeUI7NENBN0c3RCxPQUFPO3NCQUROLEtBQUs7Z0JBTU4sS0FBSztzQkFESixLQUFLO2dCQU9GLGNBQWM7c0JBRGpCLEtBQUs7Z0JBZU4sTUFBTTtzQkFETCxLQUFLO2dCQUlOLFFBQVE7c0JBRFAsS0FBSztnQkFLTixLQUFLO3NCQURKLEtBQUs7Z0JBT04sTUFBTTtzQkFETCxLQUFLO2dCQU9OLFdBQVc7c0JBRFYsS0FBSztnQkFLTixhQUFhO3NCQURaLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLE9BQU87c0JBRE4sU0FBUzt1QkFBQyxTQUFTO2dCQUtwQixZQUFZO3NCQURYLFNBQVM7dUJBQUMsY0FBYztnQkFLekIsWUFBWTtzQkFEWCxlQUFlO3VCQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUM7Z0JBSzFDLGNBQWM7c0JBRGpCLFlBQVk7dUJBQUMsVUFBVTtnQkErSXhCLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdDaGVja2VkLFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgT3B0aW9uYWwsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNraXBTZWxmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERZTkFNSUNfUEFHRV9IRUFERVJfVE9LRU4sIER5bmFtaWNQYWdlSGVhZGVyIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3NoYXJlZCc7XG5cbmltcG9ydCB7XG4gICAgYXBwbHlDc3NDbGFzcyxcbiAgICBDc3NDbGFzc0J1aWxkZXIsXG4gICAgRGVzdHJveWVkU2VydmljZSxcbiAgICBPVkVSRkxPV19QUklPUklUWV9TQ09SRSxcbiAgICBPdmVyZmxvd1ByaW9yaXR5LFxuICAgIFJlc2l6ZU9ic2VydmVyU2VydmljZVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG1hcCwgT2JzZXJ2YWJsZSwgc3RhcnRXaXRoLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFRpdGxlVG9rZW4gfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvdGl0bGUnO1xuaW1wb3J0IHtcbiAgICBDb250ZW50RGVuc2l0eU1vZGUsXG4gICAgQ29udGVudERlbnNpdHlPYnNlcnZlcixcbiAgICBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jb250ZW50LWRlbnNpdHknO1xuaW1wb3J0IHsgVG9vbGJhckl0ZW0gfSBmcm9tICcuL2Fic3RyYWN0LXRvb2xiYXItaXRlbS5jbGFzcyc7XG5cbmNvbnN0IEVMRU1FTlRfTUFSR0lOID0gODtcbmNvbnN0IE9WRVJGTE9XX1NQQUNFID0gNTAgKyAyICogRUxFTUVOVF9NQVJHSU47XG5jb25zdCBNQVhfQ09OVEVOVF9TSVpFID0gOTk5OTk5OTk7XG5cbmV4cG9ydCB0eXBlIFRvb2xiYXJUeXBlID0gJ3NvbGlkJyB8ICd0cmFuc3BhcmVudCcgfCAnYXV0bycgfCAnaW5mbyc7XG5cbmV4cG9ydCBjb25zdCBlbnVtIE92ZXJmbG93UHJpb3JpdHlFbnVtIHtcbiAgICBBTFdBWVMgPSAnYWx3YXlzJyxcbiAgICBORVZFUiA9ICduZXZlcicsXG4gICAgTE9XID0gJ2xvdycsXG4gICAgSElHSCA9ICdoaWdoJyxcbiAgICBESVNBUFBFQVIgPSAnZGlzYXBwZWFyJ1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLXRvb2xiYXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90b29sYmFyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi90b29sYmFyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgY29udGVudERlbnNpdHlPYnNlcnZlclByb3ZpZGVycyh7XG4gICAgICAgICAgICBkZWZhdWx0Q29udGVudERlbnNpdHk6IENvbnRlbnREZW5zaXR5TW9kZS5DT01QQUNUXG4gICAgICAgIH0pLFxuICAgICAgICBEZXN0cm95ZWRTZXJ2aWNlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBUb29sYmFyQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgQWZ0ZXJWaWV3Q2hlY2tlZCwgQ3NzQ2xhc3NCdWlsZGVyLCBBZnRlckNvbnRlbnRJbml0IHtcbiAgICAvKipcbiAgICAgKiBUaGUgSUQgb2YgdGhlIHRvb2xiYXIgdGl0bGVcbiAgICAgKiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGl0bGVJZDogc3RyaW5nO1xuXG4gICAgLyoqIFByb3BlcnR5IGFsbG93cyB1c2VyIHRvIHBhc3MgYWRkaXRpb25hbCBjbGFzc1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgY2xhc3M6IHN0cmluZztcblxuICAgIC8qKiBEZXRlcm1pbmVzIGlmIG92ZXJmbG93IGJ1dHRvbiBzaG91bGQgYmUgdmlzaWJsZVxuICAgICAqIERlZmF1bHQgdmFsdWU6IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc2hvdWxkT3ZlcmZsb3codmFsOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX3Nob3VsZE92ZXJmbG93ID0gdmFsO1xuICAgICAgICB0aGlzLnNob3VsZE92ZXJmbG93JC5uZXh0KHZhbCk7XG4gICAgfVxuXG4gICAgZ2V0IHNob3VsZE92ZXJmbG93KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2hvdWxkT3ZlcmZsb3c7XG4gICAgfVxuXG4gICAgLyoqIERldGVybWluZXMgdGhlIHR5cGUgb2YgdG9vbGJhclxuICAgICAqIEF2YWlsYWJsZSBvcHRpb25zOiAnc29saWQnIHwgJ3RyYW5zcGFyZW50JyB8ICdhdXRvJyB8ICdpbmZvJ1xuICAgICAqIERlZmF1bHQgdmFsdWU6ICdzb2xpZCdcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGZkVHlwZTogVG9vbGJhclR5cGUgPSAnc29saWQnO1xuICAgIC8qKiBAZGVwcmVjYXRlZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGFzVGl0bGUgPSBmYWxzZTtcblxuICAgIC8qKiBUaGUgdGl0bGUgZm9yIHRoZSB0b29sYmFyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGl0bGU6IHN0cmluZztcblxuICAgIC8qKiBEZXRlcm1pbmVzIGlmIHRvb2xiYXIgc2hvdWxkIGhhcyBhY3RpdmUgc3RhdGUgKG9ubHkgd2hlbiBmZFR5cGUgPT0gJ2luZm8nKVxuICAgICAqIERlZmF1bHQgdmFsdWU6IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBhY3RpdmUgPSBmYWxzZTtcblxuICAgIC8qKiBEZXRlcm1pbmVzIGlmIHRvb2xiYXIgc2hvdWxkIGNsZWFyIGJvcmRlciBib3R0b21cbiAgICAgKiBEZWZhdWx0IHZhbHVlOiBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgY2xlYXJCb3JkZXIgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIGFsbCBpdGVtcyBzaG91bGQgYmUgaW5zaWRlIG92ZXJmbG93ICovXG4gICAgQElucHV0KClcbiAgICBmb3JjZU92ZXJmbG93ID0gZmFsc2U7XG5cbiAgICAvKiogVGFiaW5kZXggb2YgdGhlIHRvb2xiYXIgZWxlbWVudCwgdG8gYmUgdXNlZCB3aGVuIGZkVHlwZT1cImluZm9cIiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGFiaW5kZXggPSAtMTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgndG9vbGJhcicpXG4gICAgdG9vbGJhcjogRWxlbWVudFJlZjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgndGl0bGVFbGVtZW50JylcbiAgICB0aXRsZUVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTEhlYWRFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihmb3J3YXJkUmVmKCgpID0+IFRvb2xiYXJJdGVtKSlcbiAgICB0b29sYmFySXRlbXM6IFF1ZXJ5TGlzdDxUb29sYmFySXRlbT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGQoVGl0bGVUb2tlbilcbiAgICBzZXQgdGl0bGVDb21wb25lbnQodGl0bGU6IFRpdGxlVG9rZW4gfCBudWxsKSB7XG4gICAgICAgIHRoaXMuX3RpdGxlQ29tcG9uZW50JC5uZXh0KHRpdGxlKTtcbiAgICB9XG5cbiAgICBnZXQgdGl0bGVDb21wb25lbnQoKTogVGl0bGVUb2tlbiB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGl0bGVDb21wb25lbnQkLnZhbHVlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgb3ZlcmZsb3dJdGVtcyQ6IE9ic2VydmFibGU8VG9vbGJhckl0ZW1bXT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG92ZXJmbG93bkl0ZW1zOiBUb29sYmFySXRlbVtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3RpdGxlQ29tcG9uZW50JDogQmVoYXZpb3JTdWJqZWN0PFRpdGxlVG9rZW4gfCBudWxsPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VGl0bGVUb2tlbiB8IG51bGw+KG51bGwpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZWZyZXNoT3ZlcmZsb3ckID0gbmV3IEJlaGF2aW9yU3ViamVjdDx2b2lkPih1bmRlZmluZWQpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIGdldCBfdG9vbGJhcldpZHRoKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAodGhpcy50b29sYmFyLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLmNsaWVudFdpZHRoIC0gT1ZFUkZMT1dfU1BBQ0U7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zaG91bGRPdmVyZmxvdyA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0aWFsaXNlZCA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIHNob3VsZE92ZXJmbG93JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICByZWFkb25seSBfY29udGVudERlbnNpdHlPYnNlcnZlcjogQ29udGVudERlbnNpdHlPYnNlcnZlcixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSQ6IERlc3Ryb3llZFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVzaXplT2JzZXJ2ZXJTZXJ2aWNlOiBSZXNpemVPYnNlcnZlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIEBJbmplY3QoRFlOQU1JQ19QQUdFX0hFQURFUl9UT0tFTikgcHJpdmF0ZSBfZHluYW1pY1BhZ2VIZWFkZXI/OiBEeW5hbWljUGFnZUhlYWRlclxuICAgICkge1xuICAgICAgICBfY29udGVudERlbnNpdHlPYnNlcnZlci5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vdmVyZmxvd0l0ZW1zJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlclNlcnZpY2Uub2JzZXJ2ZSh0aGlzLnRvb2xiYXIubmF0aXZlRWxlbWVudCkucGlwZShtYXAoKCkgPT4gdGhpcy5fdG9vbGJhcldpZHRoKSksXG4gICAgICAgICAgICB0aGlzLnRvb2xiYXJJdGVtcy5jaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICAgICAgc3RhcnRXaXRoKHRoaXMudG9vbGJhckl0ZW1zKSxcbiAgICAgICAgICAgICAgICBtYXAoKHRvb2xiYXJJdGVtcykgPT4gdG9vbGJhckl0ZW1zLnRvQXJyYXkoKSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0aGlzLl90aXRsZUNvbXBvbmVudCQucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKHRpdGxlQ29tcG9uZW50KTogSFRNTEVsZW1lbnQgfCBudWxsID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aXRsZUNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGl0bGVFbGVtZW50Py5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aXRsZUNvbXBvbmVudC5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICB0aGlzLnNob3VsZE92ZXJmbG93JCxcbiAgICAgICAgICAgIHRoaXMuX3JlZnJlc2hPdmVyZmxvdyRcbiAgICAgICAgXSkucGlwZShcbiAgICAgICAgICAgIG1hcCgoW3Rvb2xiYXJXaWR0aCwgdG9vbGJhckl0ZW1zLCB0aXRsZUVsZW1lbnQsIHNob3VsZE92ZXJmbG93XSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGRPdmVyZmxvdykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBfc29ydGVkQnlQcmlvcml0eUFuZEdyb3VwSXRlbXMgPSB0aGlzLl9nZXRTb3J0ZWRCeVByaW9yaXR5QW5kR3JvdXBJdGVtcyh0b29sYmFySXRlbXMpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvdmVyZmxvd0l0ZW1zOiBUb29sYmFySXRlbVtdID0gW107XG4gICAgICAgICAgICAgICAgICAgIF9zb3J0ZWRCeVByaW9yaXR5QW5kR3JvdXBJdGVtcy5yZWR1Y2UoKF9jb250ZW50V2lkdGgsIHRvb2xiYXJJdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtV2lkdGggPSB0b29sYmFySXRlbS53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1Qcmlvcml0eSA9IHRvb2xiYXJJdGVtLnByaW9yaXR5O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkSXRlbUJlUmVtb3ZlZEJ5V2lkdGggPSBpdGVtV2lkdGggKyBfY29udGVudFdpZHRoID4gdG9vbGJhcldpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkQWx3YXlzQmVJbk92ZXJmbG93ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtUHJpb3JpdHkgPT09IE92ZXJmbG93UHJpb3JpdHlFbnVtLkFMV0FZUyB8fCB0aGlzLmZvcmNlT3ZlcmZsb3c7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaG91bGROZXZlckJlSW5PdmVyZmxvdyA9IGl0ZW1Qcmlvcml0eSA9PT0gT3ZlcmZsb3dQcmlvcml0eUVudW0uTkVWRVI7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHNob3VsZEl0ZW1CZVJlbW92ZWRCeVdpZHRoICYmICFzaG91bGROZXZlckJlSW5PdmVyZmxvdykgfHwgc2hvdWxkQWx3YXlzQmVJbk92ZXJmbG93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dJdGVtcy5wdXNoKHRvb2xiYXJJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2hvdWxkQWx3YXlzQmVJbk92ZXJmbG93ID8gX2NvbnRlbnRXaWR0aCA6IE1BWF9DT05URU5UX1NJWkU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGVudFdpZHRoICsgaXRlbVdpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LCB0aXRsZUVsZW1lbnQ/LmNsaWVudFdpZHRoIHx8IDApO1xuICAgICAgICAgICAgICAgICAgICAvLyBIaWRlIG9ycGhhbnNcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB0b29sYmFySXRlbSBvZiBvdmVyZmxvd0l0ZW1zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cGVkQ29sbGVjdGlvbiA9IHRoaXMuX2dldEdyb3VwZWRDb2xsZWN0aW9uKHRvb2xiYXJJdGVtcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBncm91cGVkQ29sbGVjdGlvblByaW9yaXRpZXMgPSB0aGlzLl9nZXRHcm91cGVkQ29sbGVjdGlvblByaW9yaXR5KGdyb3VwZWRDb2xsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gdG9vbGJhckl0ZW0uZ3JvdXA7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtUHJpb3JpdHkgPSB0b29sYmFySXRlbS5wcmlvcml0eTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChncm91cCAhPT0gMCAmJiBpdGVtUHJpb3JpdHkgIT09IE92ZXJmbG93UHJpb3JpdHlFbnVtLkRJU0FQUEVBUikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1zRnJvbUN1cnJlbnRHcm91cCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2dldEVsZW1lbnRzRnJvbUN1cnJlbnRHcm91cChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBlZENvbGxlY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cGVkQ29sbGVjdGlvblByaW9yaXRpZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB8fCBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtc0Zyb21DdXJyZW50R3JvdXAuZm9yRWFjaCgoaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3ZlcmZsb3dJdGVtcy5pbmRleE9mKGkpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3dJdGVtcy5wdXNoKGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG92ZXJmbG93SXRlbXMuc29ydCgoYSwgYikgPT4gdGhpcy5fc29ydFByaW9yaXRpZXMoYS5wcmlvcml0eSwgYi5wcmlvcml0eSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5vdmVyZmxvd0l0ZW1zJC5zdWJzY3JpYmUoKGl0ZW1zKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm92ZXJmbG93bkl0ZW1zID0gaXRlbXM7XG4gICAgICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9pbml0aWFsaXNlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuYnVpbGRDb21wb25lbnRDc3NDbGFzcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudGl0bGVDb21wb25lbnQpIHtcbiAgICAgICAgICAgIHRoaXMudGl0bGVDb21wb25lbnQuZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdmZC10b29sYmFyX190aXRsZScpO1xuICAgICAgICAgICAgdGhpcy5idWlsZENvbXBvbmVudENzc0NsYXNzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQ2hhbmdlIGRldGVjdGlvbiByZWZlcmVuY2UgKi9cbiAgICBkZXRlY3RDaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBlbGVtZW50UmVmKCk6IEVsZW1lbnRSZWYge1xuICAgICAgICByZXR1cm4gdGhpcy50b29sYmFyO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQGFwcGx5Q3NzQ2xhc3NcbiAgICBidWlsZENvbXBvbmVudENzc0NsYXNzKCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICdmZC10b29sYmFyJyxcbiAgICAgICAgICAgIGBmZC10b29sYmFyLS0ke3RoaXMuZmRUeXBlfWAsXG4gICAgICAgICAgICBgJHt0aGlzLmFjdGl2ZSAmJiB0aGlzLmZkVHlwZSA9PT0gJ2luZm8nID8gJ2ZkLXRvb2xiYXItLWFjdGl2ZScgOiAnJ31gLFxuICAgICAgICAgICAgYCR7dGhpcy5oYXNUaXRsZSB8fCB0aGlzLnRpdGxlIHx8IHRoaXMudGl0bGVDb21wb25lbnQgPyAnZmQtdG9vbGJhci0tdGl0bGUnIDogJyd9YCxcbiAgICAgICAgICAgIGAke3RoaXMuY2xlYXJCb3JkZXIgPyAnZmQtdG9vbGJhci0tY2xlYXInIDogJyd9YCxcbiAgICAgICAgICAgIGAke3RoaXMuX2R5bmFtaWNQYWdlSGVhZGVyID8gJ2ZkLWR5bmFtaWMtcGFnZV9fdG9vbGJhcicgOiAnJ31gXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCB0cmlnZ2VyaW5nIGNvbGxhcHNpYmxlIHRvb2xiYXIgICovXG4gICAgdXBkYXRlQ29sbGFwc2libGVJdGVtcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVmcmVzaE92ZXJmbG93JC5uZXh0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gR2V0IGdyb3VwIG51bWJlciB3aXRoIHRoZSBsb3dlc3QgcHJpb3JpdHkuXG4gICAgICogIFVzZXMgZm9yIGRldGVjdGluZyBhIGdyb3VwIG9mIGVsZW1lbnRzIHdoaWNoIHdvdWxkIGJlIGhpZGRlbiBmcm9tIHRoZSB0b29sYmFyLlxuICAgICAqICAqL1xuICAgIHByaXZhdGUgX2dldExvd2VzdFByaW9yaXR5RnJvbUdyb3VwKFxuICAgICAgICBpdGVtR3JvdXA6IG51bWJlcixcbiAgICAgICAgZ3JvdXBlZENvbGxlY3Rpb25Qcmlvcml0eT86IFJlY29yZDxudW1iZXIsIE92ZXJmbG93UHJpb3JpdHk+XG4gICAgKTogbnVtYmVyIHtcbiAgICAgICAgY29uc3QgcHJpb3JpdHkgPSBncm91cGVkQ29sbGVjdGlvblByaW9yaXR5O1xuICAgICAgICBpZiAoIXByaW9yaXR5IHx8ICFPVkVSRkxPV19QUklPUklUWV9TQ09SRS5nZXQocHJpb3JpdHlbaXRlbUdyb3VwXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtR3JvdXA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBncm91cHMgPSBPYmplY3Qua2V5cyhwcmlvcml0eSk7XG5cbiAgICAgICAgcmV0dXJuIGdyb3Vwcy5yZWR1Y2UoKGxvd2VzdEdyb3VwLCBjdXJyZW50R3JvdXApID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxvd2VzdEdyb3VwUHJpb3JpdHkgPSBwcmlvcml0eVtsb3dlc3RHcm91cF07XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50R3JvdXBQcmlvcml0eSA9IHByaW9yaXR5W2N1cnJlbnRHcm91cF07XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgT1ZFUkZMT1dfUFJJT1JJVFlfU0NPUkUuZ2V0KGN1cnJlbnRHcm91cFByaW9yaXR5KSEgPCBPVkVSRkxPV19QUklPUklUWV9TQ09SRS5nZXQobG93ZXN0R3JvdXBQcmlvcml0eSkhXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gK2N1cnJlbnRHcm91cDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGxvd2VzdEdyb3VwO1xuICAgICAgICB9LCBpdGVtR3JvdXAgYXMgbnVtYmVyKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldEVsZW1lbnRzRnJvbUN1cnJlbnRHcm91cChcbiAgICAgICAgaXRlbUdyb3VwOiBudW1iZXIsXG4gICAgICAgIGdyb3VwZWRDb2xsZWN0aW9uPzogUmVjb3JkPG51bWJlciwgVG9vbGJhckl0ZW1bXT4sXG4gICAgICAgIGdyb3VwZWRDb2xsZWN0aW9uUHJpb3JpdHk/OiBSZWNvcmQ8bnVtYmVyLCBPdmVyZmxvd1ByaW9yaXR5PlxuICAgICk6IFRvb2xiYXJJdGVtW10ge1xuICAgICAgICBjb25zdCBsb3dlc3RQcmlvcml0eUZyb21Hcm91cCA9IHRoaXMuX2dldExvd2VzdFByaW9yaXR5RnJvbUdyb3VwKGl0ZW1Hcm91cCwgZ3JvdXBlZENvbGxlY3Rpb25Qcmlvcml0eSk7XG4gICAgICAgIGlmICghZ3JvdXBlZENvbGxlY3Rpb24gfHwgIWdyb3VwZWRDb2xsZWN0aW9uUHJpb3JpdHkpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaXRlbXNUb1JlbW92ZSA9IGdyb3VwZWRDb2xsZWN0aW9uW2xvd2VzdFByaW9yaXR5RnJvbUdyb3VwXTtcblxuICAgICAgICBkZWxldGUgZ3JvdXBlZENvbGxlY3Rpb25bbG93ZXN0UHJpb3JpdHlGcm9tR3JvdXBdO1xuICAgICAgICBkZWxldGUgZ3JvdXBlZENvbGxlY3Rpb25Qcmlvcml0eVtsb3dlc3RQcmlvcml0eUZyb21Hcm91cF07XG5cbiAgICAgICAgaWYgKGxvd2VzdFByaW9yaXR5RnJvbUdyb3VwICE9PSBpdGVtR3JvdXApIHtcbiAgICAgICAgICAgIGl0ZW1zVG9SZW1vdmUgPSBbLi4uaXRlbXNUb1JlbW92ZSwgLi4uZ3JvdXBlZENvbGxlY3Rpb25baXRlbUdyb3VwXV07XG4gICAgICAgICAgICBkZWxldGUgZ3JvdXBlZENvbGxlY3Rpb25baXRlbUdyb3VwXTtcbiAgICAgICAgICAgIGRlbGV0ZSBncm91cGVkQ29sbGVjdGlvblByaW9yaXR5W2l0ZW1Hcm91cF07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXRlbXNUb1JlbW92ZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBHZXQgdGhlIG9iamVjdCB3aXRoIGdyb3VwZWQgYXJyYXlzIG9mIGVsZW1lbnRzLiAqL1xuICAgIHByaXZhdGUgX2dldEdyb3VwZWRDb2xsZWN0aW9uKHRvb2xiYXJJdGVtczogVG9vbGJhckl0ZW1bXSk6IFJlY29yZDxudW1iZXIsIFRvb2xiYXJJdGVtW10+IHtcbiAgICAgICAgcmV0dXJuIHRvb2xiYXJJdGVtcy5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbVByaW8gPSBpdGVtLnByaW9yaXR5O1xuICAgICAgICAgICAgY29uc3QgaXRlbUdyb3VwID0gaXRlbS5ncm91cDtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBpdGVtUHJpbyA9PT0gT3ZlcmZsb3dQcmlvcml0eUVudW0uTkVWRVIgfHxcbiAgICAgICAgICAgICAgICBpdGVtUHJpbyA9PT0gT3ZlcmZsb3dQcmlvcml0eUVudW0uQUxXQVlTIHx8XG4gICAgICAgICAgICAgICAgaXRlbUdyb3VwID09PSAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFhY2NbaXRlbUdyb3VwXSkge1xuICAgICAgICAgICAgICAgIGFjY1tpdGVtR3JvdXBdID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhY2NbaXRlbUdyb3VwXS5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwge30pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEdldCB0aGUgb2JqZWN0IHdpdGggdGhlIGhpZ2hlc3QgcHJpb3JpdHkgZm9yIGVhY2ggZ3JvdXAgb2YgZWxlbWVudHMuICovXG4gICAgcHJpdmF0ZSBfZ2V0R3JvdXBlZENvbGxlY3Rpb25Qcmlvcml0eShcbiAgICAgICAgZ3JvdXBlZENvbGxlY3Rpb246IFJlY29yZDxudW1iZXIsIFRvb2xiYXJJdGVtW10+XG4gICAgKTogUmVjb3JkPG51bWJlciwgT3ZlcmZsb3dQcmlvcml0eT4ge1xuICAgICAgICBjb25zdCBncm91cHMgPSBPYmplY3Qua2V5cyhncm91cGVkQ29sbGVjdGlvbik7XG5cbiAgICAgICAgcmV0dXJuIGdyb3Vwcy5yZWR1Y2UoKGFjYywgaXRlbUdyb3VwKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzb3J0ZWRQcmlvcml0aWVzID0gZ3JvdXBlZENvbGxlY3Rpb24hW2l0ZW1Hcm91cF1cbiAgICAgICAgICAgICAgICAubWFwKChpKSA9PiBpLnByaW9yaXR5KVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHByaW8pID0+IHByaW8gIT09IE92ZXJmbG93UHJpb3JpdHlFbnVtLkFMV0FZUyAmJiBwcmlvICE9PSBPdmVyZmxvd1ByaW9yaXR5RW51bS5ORVZFUilcbiAgICAgICAgICAgICAgICAuc29ydCh0aGlzLl9zb3J0UHJpb3JpdGllcyk7XG5cbiAgICAgICAgICAgIGFjY1tpdGVtR3JvdXBdID0gc29ydGVkUHJpb3JpdGllc1swXTtcblxuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwge30pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFNvcnQgcHJpb3JpdGllcyBvZiBlbGVtZW50cy9ncm91cHMuICovXG4gICAgcHJpdmF0ZSBfc29ydFByaW9yaXRpZXMoYTogT3ZlcmZsb3dQcmlvcml0eSwgYjogT3ZlcmZsb3dQcmlvcml0eSk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBPVkVSRkxPV19QUklPUklUWV9TQ09SRS5nZXQoYikhIC0gT1ZFUkZMT1dfUFJJT1JJVFlfU0NPUkUuZ2V0KGEpITtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBTb3J0IGJ5IGdyb3VwIGFuZCBwcmlvcml0eSBhbmQgaW5pdGlhbCBwb3NpdGlvbiAqL1xuICAgIHByaXZhdGUgX2dldFNvcnRlZEJ5UHJpb3JpdHlBbmRHcm91cEl0ZW1zKHRvb2xiYXJJdGVtczogVG9vbGJhckl0ZW1bXSk6IFRvb2xiYXJJdGVtW10ge1xuICAgICAgICBjb25zdCBub3RTb3J0ZWQgPSB0b29sYmFySXRlbXMubWFwKChlbGVtZW50LCBpbmRleCkgPT4gKHsgZWxlbWVudCwgaW5kZXggfSkpO1xuXG4gICAgICAgIGNvbnN0IGdyb3VwcyA9IG5vdFNvcnRlZC5yZWR1Y2UoKGdyLCBpdGVtKSA9PiB7XG4gICAgICAgICAgICBsZXQgZ3JvdXBJZCA9IGl0ZW0uZWxlbWVudC5ncm91cDtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1QcmlvID0gaXRlbS5lbGVtZW50LnByaW9yaXR5O1xuICAgICAgICAgICAgaWYgKGl0ZW1QcmlvID09PSBPdmVyZmxvd1ByaW9yaXR5RW51bS5ORVZFUiB8fCBpdGVtUHJpbyA9PT0gT3ZlcmZsb3dQcmlvcml0eUVudW0uQUxXQVlTKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBJZCA9IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghZ3JbZ3JvdXBJZF0pIHtcbiAgICAgICAgICAgICAgICBncltncm91cElkXSA9IFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBncltncm91cElkXS5wdXNoKGl0ZW0pO1xuXG4gICAgICAgICAgICByZXR1cm4gZ3I7XG4gICAgICAgIH0sIHt9KTtcblxuICAgICAgICBjb25zdCBncm91cElkcyA9IE9iamVjdC5rZXlzKGdyb3VwcylcbiAgICAgICAgICAgIC5tYXAoKGcpID0+IHBhcnNlSW50KGcsIDEwKSlcbiAgICAgICAgICAgIC5maWx0ZXIoKGcpID0+IGcgIT09IDApO1xuXG4gICAgICAgIHJldHVybiBncm91cElkc1xuICAgICAgICAgICAgLm1hcCgoZykgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBtaW5JbmRleCA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSO1xuICAgICAgICAgICAgICAgIGxldCBtYXhQcmlvcml0eSA9IDA7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGdyb3Vwc1tnXSkge1xuICAgICAgICAgICAgICAgICAgICBtaW5JbmRleCA9IE1hdGgubWluKG1pbkluZGV4LCBpdGVtLmluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgbWF4UHJpb3JpdHkgPSBNYXRoLm1heChcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heFByaW9yaXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgT1ZFUkZMT1dfUFJJT1JJVFlfU0NPUkUuZ2V0KGl0ZW0uZWxlbWVudC5wcmlvcml0eSkgPz8gLUluZmluaXR5XG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZ3JvdXA6IGdyb3Vwc1tnXS5tYXAoKHsgZWxlbWVudCB9KSA9PiBlbGVtZW50KSwgbWluSW5kZXgsIG1heFByaW9yaXR5IH07XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNvbmNhdChcbiAgICAgICAgICAgICAgICAhZ3JvdXBzWzBdXG4gICAgICAgICAgICAgICAgICAgID8gW11cbiAgICAgICAgICAgICAgICAgICAgOiBncm91cHNbMF0ubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cDogW2l0ZW0uZWxlbWVudF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG1heFByaW9yaXR5OiBPVkVSRkxPV19QUklPUklUWV9TQ09SRS5nZXQoaXRlbS5lbGVtZW50LnByaW9yaXR5KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWluSW5kZXg6IGl0ZW0uaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBiLm1heFByaW9yaXR5IC0gYS5tYXhQcmlvcml0eSB8fCBhLm1pbkluZGV4IC0gYi5taW5JbmRleClcbiAgICAgICAgICAgIC5yZWR1Y2UoKGFyciwgaSkgPT4gYXJyLmNvbmNhdChpLmdyb3VwKSwgW10pO1xuICAgIH1cbn1cbiIsIjxkaXYgI3Rvb2xiYXIgW3RhYmluZGV4XT1cInRhYmluZGV4XCIgW2NsYXNzLmZkLXRvb2xiYXItLWNvenldPVwiX2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXIuaXNDb3p5JCB8IGFzeW5jXCI+XG4gICAgPGg0ICpuZ0lmPVwidGl0bGVcIiBjbGFzcz1cImZkLXRpdGxlIGZkLXRpdGxlLS1oNCBmZC10b29sYmFyX190aXRsZVwiIFtpZF09XCJ0aXRsZUlkXCIgI3RpdGxlRWxlbWVudD57eyB0aXRsZSB9fTwvaDQ+XG5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3ZlcmZsb3duSXRlbXMubGVuZ3RoID4gMFwiPlxuICAgICAgICA8ZmQtdG9vbGJhci1zcGFjZXI+PC9mZC10b29sYmFyLXNwYWNlcj5cbiAgICAgICAgPGZkLXRvb2xiYXItc2VwYXJhdG9yPjwvZmQtdG9vbGJhci1zZXBhcmF0b3I+XG4gICAgICAgIDxmZC1wb3BvdmVyIHBsYWNlbWVudD1cImJvdHRvbS1lbmRcIiBbbm9BcnJvd109XCJ0cnVlXCIgY2xhc3M9XCJmZC1wb3BvdmVyXCI+XG4gICAgICAgICAgICA8ZmQtcG9wb3Zlci1jb250cm9sPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiTW9yZVwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJNb3JlXCJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgIGdseXBoPVwib3ZlcmZsb3dcIlxuICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZmQtcG9wb3Zlci1jb250cm9sPlxuXG4gICAgICAgICAgICA8ZmQtcG9wb3Zlci1ib2R5PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZC10b29sYmFyX19vdmVyZmxvd1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBvdmVyZmxvd2VkSXRlbSBvZiBvdmVyZmxvd25JdGVtc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGZkay1keW5hbWljLXBvcnRhbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkb21FbGVtZW50XT1cIm92ZXJmbG93ZWRJdGVtLmVsZW1lbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cIm92ZXJmbG93ZWRJdGVtLnByaW9yaXR5ID09PSAnZGlzYXBwZWFyJyA/ICdub25lJyA6ICdmbGV4J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmZsZXgtZGlyZWN0aW9uXT1cIm92ZXJmbG93ZWRJdGVtLnByaW9yaXR5ID09PSAnZGlzYXBwZWFyJyA/IHVuZGVmaW5lZCA6ICdjb2x1bW4nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZmRrLWR5bmFtaWMtcG9ydGFsPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZmQtcG9wb3Zlci1ib2R5PlxuICAgICAgICA8L2ZkLXBvcG92ZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cbiJdfQ==
459
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbGJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi90b29sYmFyL3Rvb2xiYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdG9vbGJhci90b29sYmFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBSUgsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsVUFBVSxFQUNWLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLFNBQVMsRUFDVCxTQUFTLEVBQ1QsUUFBUSxFQUNSLFNBQVMsRUFDVCxpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHlCQUF5QixFQUFxQixNQUFNLDhCQUE4QixDQUFDO0FBRTVGLE9BQU8sRUFDSCxhQUFhLEVBRWIsdUJBQXVCLEVBRXZCLGdCQUFnQixFQUNuQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxTQUFTLEVBQWMsRUFBRSxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pELE9BQU8sRUFDSCxrQkFBa0IsRUFDbEIsc0JBQXNCLEVBQ3RCLCtCQUErQixFQUNsQyxNQUFNLHVDQUF1QyxDQUFDOzs7Ozs7O0FBRS9DLE1BQU0sY0FBYyxHQUFHLENBQUMsQ0FBQztBQUN6QixNQUFNLGNBQWMsR0FBRyxFQUFFLEdB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VUFBVSxxR0FKVSxvQkFBb0IsdVVDbEkxRCxxbkNBNkJBO0FEbU5JO0lBQUMsYUFBYTs7Ozs4REFVYjsyRkF0TFEsZ0JBQWdCO2tCQWI1QixTQUFTOytCQUNJLFlBQVksaUJBR1AsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSxhQUNwQzt3QkFDUCwrQkFBK0IsQ0FBQzs0QkFDNUIscUJBQXFCLEVBQUUsa0JBQWtCLENBQUMsT0FBTzt5QkFDcEQsQ0FBQzt3QkFDRixnQkFBZ0I7cUJBQ25COzswQkFvSEksUUFBUTs7MEJBQUksUUFBUTs7MEJBQUksTUFBTTsyQkFBQyx5QkFBeUI7NENBNUc3RCxLQUFLO3NCQURKLEtBQUs7Z0JBT04sY0FBYztzQkFEYixLQUFLO2dCQVFOLE1BQU07c0JBREwsS0FBSztnQkFLTixRQUFRO3NCQURQLEtBQUs7Z0JBS04sS0FBSztzQkFESixLQUFLO2dCQU9OLE1BQU07c0JBREwsS0FBSztnQkFPTixXQUFXO3NCQURWLEtBQUs7Z0JBS04sYUFBYTtzQkFEWixLQUFLO2dCQUtOLFFBQVE7c0JBRFAsS0FBSztnQkFLTixPQUFPO3NCQUROLFNBQVM7dUJBQUMsU0FBUztnQkFLcEIsWUFBWTtzQkFEWCxTQUFTO3VCQUFDLGNBQWM7Z0JBS3pCLGNBQWM7c0JBRGIsU0FBUzt1QkFBQyxnQkFBZ0I7Z0JBSzNCLFlBQVk7c0JBRFgsZUFBZTt1QkFBQyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsb0JBQW9CLENBQUM7Z0JBS3ZELGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxVQUFVO2dCQTJHeEIsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIEFmdGVyVmlld0NoZWNrZWQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIGZvcndhcmRSZWYsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgUXVlcnlMaXN0LFxuICAgIFJlbmRlcmVyMixcbiAgICBTa2lwU2VsZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEWU5BTUlDX1BBR0VfSEVBREVSX1RPS0VOLCBEeW5hbWljUGFnZUhlYWRlciB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9zaGFyZWQnO1xuXG5pbXBvcnQge1xuICAgIGFwcGx5Q3NzQ2xhc3MsXG4gICAgQ3NzQ2xhc3NCdWlsZGVyLFxuICAgIE9WRVJGTE9XX1BSSU9SSVRZX1NDT1JFLFxuICAgIE92ZXJmbG93UHJpb3JpdHksXG4gICAgRGVzdHJveWVkU2VydmljZVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIE9ic2VydmFibGUsIG9mLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGVsYXksIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFRvb2xiYXJJdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi90b29sYmFyLWl0ZW0uZGlyZWN0aXZlJztcbmltcG9ydCB7IFRpdGxlVG9rZW4gfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvdGl0bGUnO1xuaW1wb3J0IHtcbiAgICBDb250ZW50RGVuc2l0eU1vZGUsXG4gICAgQ29udGVudERlbnNpdHlPYnNlcnZlcixcbiAgICBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzXG59IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jb250ZW50LWRlbnNpdHknO1xuXG5jb25zdCBFTEVNRU5UX01BUkdJTiA9IDg7XG5jb25zdCBPVkVSRkxPV19TUEFDRSA9IDUwICsgMiAqIEVMRU1FTlRfTUFSR0lOO1xuY29uc3QgTUFYX0NPTlRFTlRfU0laRSA9IDk5OTk5OTk5O1xuXG5leHBvcnQgdHlwZSBUb29sYmFyVHlwZSA9ICdzb2xpZCcgfCAndHJhbnNwYXJlbnQnIHwgJ2F1dG8nIHwgJ2luZm8nO1xuXG5leHBvcnQgY29uc3QgZW51bSBPdmVyZmxvd1ByaW9yaXR5RW51bSB7XG4gICAgQUxXQVlTID0gJ2Fsd2F5cycsXG4gICAgTkVWRVIgPSAnbmV2ZXInLFxuICAgIExPVyA9ICdsb3cnLFxuICAgIEhJR0ggPSAnaGlnaCcsXG4gICAgRElTQVBQRUFSID0gJ2Rpc2FwcGVhcidcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC10b29sYmFyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdG9vbGJhci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdG9vbGJhci5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnMoe1xuICAgICAgICAgICAgZGVmYXVsdENvbnRlbnREZW5zaXR5OiBDb250ZW50RGVuc2l0eU1vZGUuQ09NUEFDVFxuICAgICAgICB9KSxcbiAgICAgICAgRGVzdHJveWVkU2VydmljZVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgVG9vbGJhckNvbXBvbmVudFxuICAgIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0NoZWNrZWQsIENzc0NsYXNzQnVpbGRlciwgQWZ0ZXJDb250ZW50SW5pdFxue1xuICAgIC8qKiBQcm9wZXJ0eSBhbGxvd3MgdXNlciB0byBwYXNzIGFkZGl0aW9uYWwgY2xhc3NcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGNsYXNzOiBzdHJpbmc7XG5cbiAgICAvKiogRGV0ZXJtaW5lcyBpZiBvdmVyZmxvdyBidXR0b24gc2hvdWxkIGJlIHZpc2libGVcbiAgICAgKiBEZWZhdWx0IHZhbHVlOiBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2hvdWxkT3ZlcmZsb3cgPSBmYWxzZTtcblxuICAgIC8qKiBEZXRlcm1pbmVzIHRoZSB0eXBlIG9mIHRvb2xiYXJcbiAgICAgKiBBdmFpbGFibGUgb3B0aW9uczogJ3NvbGlkJyB8ICd0cmFuc3BhcmVudCcgfCAnYXV0bycgfCAnaW5mbydcbiAgICAgKiBEZWZhdWx0IHZhbHVlOiAnc29saWQnXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBmZFR5cGU6IFRvb2xiYXJUeXBlID0gJ3NvbGlkJztcblxuICAgIC8qKiBAZGVwcmVjYXRlZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgaGFzVGl0bGUgPSBmYWxzZTtcblxuICAgIC8qKiBUaGUgdGl0bGUgZm9yIHRoZSB0b29sYmFyLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGl0bGU6IHN0cmluZztcblxuICAgIC8qKiBEZXRlcm1pbmVzIGlmIHRvb2xiYXIgc2hvdWxkIGhhcyBhY3RpdmUgc3RhdGUgKG9ubHkgd2hlbiBmZFR5cGUgPT0gJ2luZm8nKVxuICAgICAqIERlZmF1bHQgdmFsdWU6IGZhbHNlXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBhY3RpdmUgPSBmYWxzZTtcblxuICAgIC8qKiBEZXRlcm1pbmVzIGlmIHRvb2xiYXIgc2hvdWxkIGNsZWFyIGJvcmRlciBib3R0b21cbiAgICAgKiBEZWZhdWx0IHZhbHVlOiBmYWxzZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgY2xlYXJCb3JkZXIgPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIGFsbCBpdGVtcyBzaG91bGQgYmUgaW5zaWRlIG92ZXJmbG93ICovXG4gICAgQElucHV0KClcbiAgICBmb3JjZU92ZXJmbG93ID0gZmFsc2U7XG5cbiAgICAvKiogVGFiaW5kZXggb2YgdGhlIHRvb2xiYXIgZWxlbWVudCwgdG8gYmUgdXNlZCB3aGVuIGZkVHlwZT1cImluZm9cIiAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGFiaW5kZXggPSAtMTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgndG9vbGJhcicpXG4gICAgdG9vbGJhcjogRWxlbWVudFJlZjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnb3ZlcmZsb3dCb2R5JylcbiAgICBvdmVyZmxvd0JvZHk6IEVsZW1lbnRSZWY7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ292ZXJmbG93U3BhY2VyJylcbiAgICBvdmVyZmxvd1NwYWNlcjogRWxlbWVudFJlZjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihmb3J3YXJkUmVmKCgpID0+IFRvb2xiYXJJdGVtRGlyZWN0aXZlKSlcbiAgICB0b29sYmFySXRlbXM6IFF1ZXJ5TGlzdDxUb29sYmFySXRlbURpcmVjdGl2ZT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGQoVGl0bGVUb2tlbilcbiAgICB0aXRsZUNvbXBvbmVudDogVGl0bGVUb2tlbiB8IG51bGwgPSBudWxsO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBvdmVyZmxvd1Zpc2liaWxpdHk6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSBvZihmYWxzZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3N1YnNjcmlwdGlvbnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgZ2V0IF90b29sYmFyV2lkdGgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnRvb2xiYXIubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuY2xpZW50V2lkdGggLSBPVkVSRkxPV19TUEFDRTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgZ2V0IF9vdmVyZmxvd0JvZHkoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5vdmVyZmxvd0JvZHkgJiYgKHRoaXMub3ZlcmZsb3dCb2R5Lm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBnZXQgX3Rvb2xiYXIoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy50b29sYmFyLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9vdmVyZmxvd0VsZW1lbnRzOiBUb29sYmFySXRlbURpcmVjdGl2ZVtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX25vcm1hbEVsZW1lbnRzOiBUb29sYmFySXRlbURpcmVjdGl2ZVtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2Rpc2FwcGVhckVsZW1lbnRzOiBUb29sYmFySXRlbURpcmVjdGl2ZVtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dyb3VwZWRDb2xsZWN0aW9uOiB7IFtrZXk6IG51bWJlcl06IFRvb2xiYXJJdGVtRGlyZWN0aXZlW10gfSB8IG51bGw7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dyb3VwZWRDb2xsZWN0aW9uUHJpb3JpdHk6IHsgW2tleTogbnVtYmVyXTogT3ZlcmZsb3dQcmlvcml0eSB9IHwgbnVsbDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5pdGlhbGlzZWQgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgcmVhZG9ubHkgX2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXI6IENvbnRlbnREZW5zaXR5T2JzZXJ2ZXIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kkOiBEZXN0cm95ZWRTZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBAU2tpcFNlbGYoKSBASW5qZWN0KERZTkFNSUNfUEFHRV9IRUFERVJfVE9LRU4pIHByaXZhdGUgX2R5bmFtaWNQYWdlSGVhZGVyPzogRHluYW1pY1BhZ2VIZWFkZXJcbiAgICApIHtcbiAgICAgICAgX2NvbnRlbnREZW5zaXR5T2JzZXJ2ZXIuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5zaG91bGRPdmVyZmxvdyksXG4gICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDUwKSxcbiAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fb25SZXNpemUoKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNob3VsZE92ZXJmbG93KSB7XG4gICAgICAgICAgICBvZih0cnVlKVxuICAgICAgICAgICAgICAgIC5waXBlKGRlbGF5KDUpLCB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fY29sbGFwc2VJdGVtcygpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pbml0aWFsaXNlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX2xpc3RlbkZvckl0ZW1DaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuYnVpbGRDb21wb25lbnRDc3NDbGFzcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmJ1aWxkQ29tcG9uZW50Q3NzQ2xhc3MoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudGl0bGVDb21wb25lbnQpIHtcbiAgICAgICAgICAgIHRoaXMudGl0bGVDb21wb25lbnQuZWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdmZC10b29sYmFyX190aXRsZScpO1xuICAgICAgICAgICAgdGhpcy5idWlsZENvbXBvbmVudENzc0NsYXNzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqIENoYW5nZSBkZXRlY3Rpb24gcmVmZXJlbmNlICovXG4gICAgZGV0ZWN0Q2hhbmdlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZWxlbWVudFJlZigpOiBFbGVtZW50UmVmIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9vbGJhcjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBhcHBseUNzc0NsYXNzXG4gICAgYnVpbGRDb21wb25lbnRDc3NDbGFzcygpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnZmQtdG9vbGJhcicsXG4gICAgICAgICAgICBgZmQtdG9vbGJhci0tJHt0aGlzLmZkVHlwZX1gLFxuICAgICAgICAgICAgYCR7dGhpcy5hY3RpdmUgJiYgdGhpcy5mZFR5cGUgPT09ICdpbmZvJyA/ICdmZC10b29sYmFyLS1hY3RpdmUnIDogJyd9YCxcbiAgICAgICAgICAgIGAke3RoaXMuaGFzVGl0bGUgfHwgdGhpcy50aXRsZSB8fCB0aGlzLnRpdGxlQ29tcG9uZW50ID8gJ2ZkLXRvb2xiYXItLXRpdGxlJyA6ICcnfWAsXG4gICAgICAgICAgICBgJHt0aGlzLmNsZWFyQm9yZGVyID8gJ2ZkLXRvb2xiYXItLWNsZWFyJyA6ICcnfWAsXG4gICAgICAgICAgICBgJHt0aGlzLl9keW5hbWljUGFnZUhlYWRlciA/ICdmZC1keW5hbWljLXBhZ2VfX3Rvb2xiYXInIDogJyd9YFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIC8qKiBNZXRob2QgdHJpZ2dlcmluZyBjb2xsYXBzaWJsZSB0b29sYmFyICAqL1xuICAgIHVwZGF0ZUNvbGxhcHNpYmxlSXRlbXMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9pbml0aWFsaXNlZCkge1xuICAgICAgICAgICAgdGhpcy5fb25SZXNpemUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfb25SZXNpemUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Jlc2V0KCk7XG4gICAgICAgIGlmICh0aGlzLnNob3VsZE92ZXJmbG93KSB7XG4gICAgICAgICAgICB0aGlzLl9jb2xsYXBzZUl0ZW1zKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8vIHNob3VsZE92ZXJmbG93IGl0ZW1zXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jb2xsYXBzZUl0ZW1zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9ncm91cGVkQ29sbGVjdGlvbiA9IHRoaXMuX2dldEdyb3VwZWRDb2xsZWN0aW9uKCk7XG4gICAgICAgIHRoaXMuX2dyb3VwZWRDb2xsZWN0aW9uUHJpb3JpdHkgPSB0aGlzLl9nZXRHcm91cGVkQ29sbGVjdGlvblByaW9yaXR5KCk7XG4gICAgICAgIGNvbnN0IF9zb3J0ZWRCeVByaW9yaXR5QW5kR3JvdXBJdGVtcyA9IHRoaXMuX2dldFNvcnRlZEJ5UHJpb3JpdHlBbmRHcm91cEl0ZW1zKCk7XG5cbiAgICAgICAgX3NvcnRlZEJ5UHJpb3JpdHlBbmRHcm91cEl0ZW1zLnJlZHVjZSgoX2NvbnRlbnRXaWR0aCwgdG9vbGJhckl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1XaWR0aCA9IHRoaXMuX2dldEVsZW1lbnRXaWR0aFdpdGhNYXJnaW4odG9vbGJhckl0ZW0pO1xuICAgICAgICAgICAgY29uc3QgaXRlbUdyb3VwID0gdGhpcy5fZ2V0RWxlbWVudEdyb3VwKHRvb2xiYXJJdGVtKTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1Qcmlvcml0eSA9IHRoaXMuX2dldEVsZW1lbnRQcmlvcml0eSh0b29sYmFySXRlbSk7XG4gICAgICAgICAgICBjb25zdCBzaG91bGRJdGVtQmVSZW1vdmVkQnlXaWR0aCA9IHRoaXMuX3Nob3VsZFRvb2xiYXJJdGVtQmVSZW1vdmVkQnlXaWR0aChpdGVtV2lkdGgsIF9jb250ZW50V2lkdGgpO1xuICAgICAgICAgICAgY29uc3Qgc2hvdWxkQWx3YXlzQmVJbk92ZXJmbG93ID0gaXRlbVByaW9yaXR5ID09PSBPdmVyZmxvd1ByaW9yaXR5RW51bS5BTFdBWVMgfHwgdGhpcy5mb3JjZU92ZXJmbG93O1xuICAgICAgICAgICAgY29uc3Qgc2hvdWxkTmV2ZXJCZUluT3ZlcmZsb3cgPSBpdGVtUHJpb3JpdHkgPT09IE92ZXJmbG93UHJpb3JpdHlFbnVtLk5FVkVSO1xuICAgICAgICAgICAgaWYgKChzaG91bGRJdGVtQmVSZW1vdmVkQnlXaWR0aCAmJiAhc2hvdWxkTmV2ZXJCZUluT3ZlcmZsb3cpIHx8IHNob3VsZEFsd2F5c0JlSW5PdmVyZmxvdykge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtR3JvdXApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faGlkZUVsZW1lbnRzRnJvbUN1cnJlbnRHcm91cChpdGVtR3JvdXApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2hpZGVFbGVtZW50V2l0aG91dEdyb3VwKHRvb2xiYXJJdGVtLCBpdGVtUHJpb3JpdHkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc2hvdWxkQWx3YXlzQmVJbk92ZXJmbG93ID8gX2NvbnRlbnRXaWR0aCA6IE1BWF9DT05URU5UX1NJWkU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX25vcm1hbEVsZW1lbnRzLnB1c2godG9vbGJhckl0ZW0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBfY29udGVudFdpZHRoICsgaXRlbVdpZHRoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCAwKTtcblxuICAgICAgICB0aGlzLl9jb2xsYXBzZUxhc3RTcGFjZXJFbGVtZW50KHRoaXMuX292ZXJmbG93RWxlbWVudHMsIHRoaXMuX25vcm1hbEVsZW1lbnRzKTtcbiAgICAgICAgdGhpcy5fYWRkVG9vbGJhckl0ZW1Ub092ZXJmbG93KHRoaXMuX292ZXJmbG93RWxlbWVudHMpO1xuICAgICAgICB0aGlzLl9kaXNhcHBlYXJFbGVtZW50cy5mb3JFYWNoKHRoaXMuX3JlbW92ZVRvb2xiYXJJdGVtRnJvbURPTS5iaW5kKHRoaXMpKTtcblxuICAgICAgICB0aGlzLl9ub3JtYWxFbGVtZW50cyA9IFsuLi50aGlzLl9nZXRPcmRlcmVkSXRlbXNGb2xsb3dpbmdRdWVyeSh0aGlzLl9ub3JtYWxFbGVtZW50cyldO1xuICAgICAgICB0aGlzLl9vdmVyZmxvd0VsZW1lbnRzID0gWy4uLnRoaXMuX2dldE9yZGVyZWRJdGVtc0ZvbGxvd2luZ1F1ZXJ5KHRoaXMuX292ZXJmbG93RWxlbWVudHMpXTtcblxuICAgICAgICB0aGlzLnRvb2xiYXJJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB0aGlzLl9jaGFuZ2VJdGVtVmlzaWJpbGl0eVN0YXRlKGl0ZW0uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCB0cnVlKSk7XG5cbiAgICAgICAgdGhpcy5fY2hhbmdlT3ZlcmZsb3dWaXNpYmxlU3RhdGUodGhpcy5fb3ZlcmZsb3dFbGVtZW50cy5sZW5ndGggPiAwKTtcblxuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Nob3VsZFRvb2xiYXJJdGVtQmVSZW1vdmVkQnlXaWR0aChpdGVtV2lkdGg6IG51bWJlciwgY29udGVudFdpZHRoOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGNvbnRlbnRXaWR0aCArIGl0ZW1XaWR0aCA+IHRoaXMuX3Rvb2xiYXJXaWR0aDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldEVsZW1lbnRXaWR0aFdpdGhNYXJnaW4odG9vbGJhckl0ZW06IFRvb2xiYXJJdGVtRGlyZWN0aXZlKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRvb2xiYXJJdGVtLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCAmJiB0b29sYmFySXRlbS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggKyBFTEVNRU5UX01BUkdJTlxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuRm9ySXRlbUNoYW5nZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudG9vbGJhckl0ZW1zLmNoYW5nZXMucGlwZShmaWx0ZXIoKCkgPT4gdGhpcy5zaG91bGRPdmVyZmxvdykpLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9vblJlc2l6ZSgpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldEVsZW1lbnRQcmlvcml0eSh0b29sYmFySXRlbTogVG9vbGJhckl0ZW1EaXJlY3RpdmUpOiBPdmVyZmxvd1ByaW9yaXR5IHtcbiAgICAgICAgY29uc3QgcHJpb3JpdHkgPVxuICAgICAgICAgICAgdG9vbGJhckl0ZW0uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50ICYmIHRvb2xiYXJJdGVtLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5hdHRyaWJ1dGVzLmZkT3ZlcmZsb3dQcmlvcml0eTtcblxuICAgICAgICByZXR1cm4gKHByaW9yaXR5ICYmIHByaW9yaXR5LnZhbHVlKSB8fCBPdmVyZmxvd1ByaW9yaXR5RW51bS5ISUdIO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0RWxlbWVudEdyb3VwKHRvb2xiYXJJdGVtOiBUb29sYmFySXRlbURpcmVjdGl2ZSk6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IGl0ZW1Hcm91cCA9XG4gICAgICAgICAgICB0b29sYmFySXRlbS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgJiYgdG9vbGJhckl0ZW0uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmF0dHJpYnV0ZXMuZmRPdmVyZmxvd0dyb3VwO1xuXG4gICAgICAgIHJldHVybiAoaXRlbUdyb3VwICYmIGl0ZW1Hcm91cC52YWx1ZSkgfHwgMDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2hpZGVFbGVtZW50c0Zyb21DdXJyZW50R3JvdXAoaXRlbUdyb3VwOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbG93ZXN0UHJpb3JpdHlGcm9tR3JvdXAgPSB0aGlzLl9nZXRMb3dlc3RQcmlvcml0eUZyb21Hcm91cChpdGVtR3JvdXApO1xuICAgICAgICBpZiAoIXRoaXMuX2dyb3VwZWRDb2xsZWN0aW9uIHx8ICF0aGlzLl9ncm91cGVkQ29sbGVjdGlvblByaW9yaXR5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGl0ZW1zVG9SZW1vdmUgPSB0aGlzLl9ncm91cGVkQ29sbGVjdGlvbltsb3dlc3RQcmlvcml0eUZyb21Hcm91cF07XG5cbiAgICAgICAgZGVsZXRlIHRoaXMuX2dyb3VwZWRDb2xsZWN0aW9uW2xvd2VzdFByaW9yaXR5RnJvbUdyb3VwXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX2dyb3VwZWRDb2xsZWN0aW9uUHJpb3JpdHlbbG93ZXN0UHJpb3JpdHlGcm9tR3JvdXBdO1xuXG4gICAgICAgIGlmIChsb3dlc3RQcmlvcml0eUZyb21Hcm91cCAhPT0gaXRlbUdyb3VwKSB7XG4gICAgICAgICAgICBpdGVtc1RvUmVtb3ZlID0gWy4uLml0ZW1zVG9SZW1vdmUsIC4uLnRoaXMuX2dyb3VwZWRDb2xsZWN0aW9uW2l0ZW1Hcm91cF1dO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2dyb3VwZWRDb2xsZWN0aW9uW2l0ZW1Hcm91cF07XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5fZ3JvdXBlZENvbGxlY3Rpb25Qcmlvcml0eVtpdGVtR3JvdXBdO1xuICAgICAgICB9XG5cbiAgICAgICAgaXRlbXNUb1JlbW92ZT8uZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fcmVtb3ZlSXRlbUZyb21BcnJheSh0aGlzLl9ub3JtYWxFbGVtZW50cywgaXRlbSk7XG4gICAgICAgICAgICBjb25zdCBpc0Rpc2FwcGVhciA9IHRoaXMuX2dldEVsZW1lbnRQcmlvcml0eShpdGVtKSA9PT0gT3ZlcmZsb3dQcmlvcml0eUVudW0uRElTQVBQRUFSO1xuICAgICAgICAgICAgaWYgKGlzRGlzYXBwZWFyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGlzYXBwZWFyRWxlbWVudHMucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuX292ZXJmbG93RWxlbWVudHMuaW5kZXhPZihpdGVtKSA9PT0gLTEgJiYgIWlzRGlzYXBwZWFyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb3ZlcmZsb3dFbGVtZW50cy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2hpZGVFbGVtZW50V2l0aG91dEdyb3VwKHRvb2xiYXJJdGVtOiBUb29sYmFySXRlbURpcmVjdGl2ZSwgaXRlbVByaW9yaXR5OiBPdmVyZmxvd1ByaW9yaXR5KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlzRGlzYXBwZWFyID0gaXRlbVByaW9yaXR5ID09PSBPdmVyZmxvd1ByaW9yaXR5RW51bS5ESVNBUFBFQVI7XG4gICAgICAgIGlmIChpc0Rpc2FwcGVhcikge1xuICAgICAgICAgICAgdGhpcy5fZGlzYXBwZWFyRWxlbWVudHMucHVzaCh0b29sYmFySXRlbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9vdmVyZmxvd0VsZW1lbnRzLnB1c2godG9vbGJhckl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gU29ydCBieSBncm91cCBhbmQgcHJpb3JpdHkgYW5kIGluaXRpYWwgcG9zaXRpb24gKi9cbiAgICBwcml2YXRlIF9nZXRTb3J0ZWRCeVByaW9yaXR5QW5kR3JvdXBJdGVtcygpOiBUb29sYmFySXRlbURpcmVjdGl2ZVtdIHtcbiAgICAgICAgY29uc3Qgbm90U29ydGVkID0gdGhpcy50b29sYmFySXRlbXMudG9BcnJheSgpLm1hcCgoZWxlbWVudCwgaW5kZXgpID0+ICh7IGVsZW1lbnQsIGluZGV4IH0pKTtcblxuICAgICAgICBjb25zdCBncm91cHMgPSBub3RTb3J0ZWQucmVkdWNlKChnciwgaXRlbSkgPT4ge1xuICAgICAgICAgICAgbGV0IGdyb3VwSWQgPSB0aGlzLl9nZXRFbGVtZW50R3JvdXAoaXRlbS5lbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1QcmlvID0gdGhpcy5fZ2V0RWxlbWVudFByaW9yaXR5KGl0ZW0uZWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoaXRlbVByaW8gPT09IE92ZXJmbG93UHJpb3JpdHlFbnVtLk5FVkVSIHx8IGl0ZW1QcmlvID09PSBPdmVyZmxvd1ByaW9yaXR5RW51bS5BTFdBWVMpIHtcbiAgICAgICAgICAgICAgICBncm91cElkID0gMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFncltncm91cElkXSkge1xuICAgICAgICAgICAgICAgIGdyW2dyb3VwSWRdID0gW107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdyW2dyb3VwSWRdLnB1c2goaXRlbSk7XG5cbiAgICAgICAgICAgIHJldHVybiBncjtcbiAgICAgICAgfSwge30pO1xuXG4gICAgICAgIGNvbnN0IGdyb3VwSWRzID0gT2JqZWN0LmtleXMoZ3JvdXBzKVxuICAgICAgICAgICAgLm1hcCgoZykgPT4gcGFyc2VJbnQoZywgMTApKVxuICAgICAgICAgICAgLmZpbHRlcigoZykgPT4gZyAhPT0gMCk7XG5cbiAgICAgICAgcmV0dXJuIGdyb3VwSWRzXG4gICAgICAgICAgICAubWFwKChnKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IG1pbkluZGV4ID0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7XG4gICAgICAgICAgICAgICAgbGV0IG1heFByaW9yaXR5ID0gMDtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZ3JvdXBzW2ddKSB7XG4gICAgICAgICAgICAgICAgICAgIG1pbkluZGV4ID0gTWF0aC5taW4obWluSW5kZXgsIGl0ZW0uaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBtYXhQcmlvcml0eSA9IE1hdGgubWF4KFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4UHJpb3JpdHksXG4gICAgICAgICAgICAgICAgICAgICAgICBPVkVSRkxPV19QUklPUklUWV9TQ09SRS5nZXQodGhpcy5fZ2V0RWxlbWVudFByaW9yaXR5KGl0ZW0uZWxlbWVudCkpID8/IC1JbmZpbml0eVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB7IGdyb3VwOiBncm91cHNbZ10ubWFwKCh7IGVsZW1lbnQgfSkgPT4gZWxlbWVudCksIG1pbkluZGV4LCBtYXhQcmlvcml0eSB9O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jb25jYXQoXG4gICAgICAgICAgICAgICAgIWdyb3Vwc1swXVxuICAgICAgICAgICAgICAgICAgICA/IFtdXG4gICAgICAgICAgICAgICAgICAgIDogZ3JvdXBzWzBdLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXA6IFtpdGVtLmVsZW1lbnRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhQcmlvcml0eTogT1ZFUkZMT1dfUFJJT1JJVFlfU0NPUkUuZ2V0KHRoaXMuX2dldEVsZW1lbnRQcmlvcml0eShpdGVtLmVsZW1lbnQpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWluSW5kZXg6IGl0ZW0uaW5kZXhcbiAgICAgICAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBiLm1heFByaW9yaXR5IC0gYS5tYXhQcmlvcml0eSB8fCBhLm1pbkluZGV4IC0gYi5taW5JbmRleClcbiAgICAgICAgICAgIC5yZWR1Y2UoKGFyciwgaSkgPT4gYXJyLmNvbmNhdChpLmdyb3VwKSwgW10pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEdldCB0aGUgb2JqZWN0IHdpdGggZ3JvdXBlZCBhcnJheXMgb2YgZWxlbWVudHMuICovXG4gICAgcHJpdmF0ZSBfZ2V0R3JvdXBlZENvbGxlY3Rpb24oKTogeyBba2V5OiBudW1iZXJdOiBUb29sYmFySXRlbURpcmVjdGl2ZVtdIH0ge1xuICAgICAgICBjb25zdCBjb2xsZWN0aW9uID1cbiAgICAgICAgICAgICh0aGlzLnRvb2xiYXJJdGVtcyAmJlxuICAgICAgICAgICAgICAgIHRoaXMudG9vbGJhckl0ZW1zLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1QcmlvID0gdGhpcy5fZ2V0RWxlbWVudFByaW9yaXR5KGl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbVByaW8gPT09IE92ZXJmbG93UHJpb3JpdHlFbnVtLk5FVkVSIHx8IGl0ZW1QcmlvID09PSBPdmVyZmxvd1ByaW9yaXR5RW51bS5BTFdBWVMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtR3JvdXAgPSB0aGlzLl9nZXRFbGVtZW50R3JvdXAoaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIGFjY1tpdGVtR3JvdXBdICYmIGFjY1tpdGVtR3JvdXBdLmxlbmd0aCA/IGFjY1tpdGVtR3JvdXBdLnB1c2goaXRlbSkgOiAoYWNjW2l0ZW1Hcm91cF0gPSBbaXRlbV0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICAgICAgfSwge30pKSB8fFxuICAgICAgICAgICAge307XG5cbiAgICAgICAgZGVsZXRlIGNvbGxlY3Rpb25bMF07XG5cbiAgICAgICAgcmV0dXJuIGNvbGxlY3Rpb247XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gR2V0IHRoZSBvYmplY3Qgd2l0aCB0aGUgaGlnaGVzdCBwcmlvcml0eSBmb3IgZWFjaCBncm91cCBvZiBlbGVtZW50cy4gKi9cbiAgICBwcml2YXRlIF9nZXRHcm91cGVkQ29sbGVjdGlvblByaW9yaXR5KCk6IHsgW2tleTogbnVtYmVyXTogT3ZlcmZsb3dQcmlvcml0eSB9IHtcbiAgICAgICAgaWYgKCF0aGlzLl9ncm91cGVkQ29sbGVjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZ3JvdXBzID0gT2JqZWN0LmtleXModGhpcy5fZ3JvdXBlZENvbGxlY3Rpb24pO1xuXG4gICAgICAgIHJldHVybiBncm91cHMucmVkdWNlKChhY2MsIGl0ZW1Hcm91cCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc29ydGVkUHJpb3JpdGllcyA9IHRoaXMuX2dyb3VwZWRDb2xsZWN0aW9uIVtpdGVtR3JvdXBdLm1hcCh0aGlzLl9nZXRFbGVtZW50UHJpb3JpdHkpXG4gICAgICAgICAgICAgICAgLmZpbHRlcigocHJpbykgPT4gcHJpbyAhPT0gT3ZlcmZsb3dQcmlvcml0eUVudW0uQUxXQVlTICYmIHByaW8gIT09IE92ZXJmbG93UHJpb3JpdHlFbnVtLk5FVkVSKVxuICAgICAgICAgICAgICAgIC5zb3J0KHRoaXMuX3NvcnRQcmlvcml0aWVzLmJpbmQodGhpcykpO1xuXG4gICAgICAgICAgICBhY2NbaXRlbUdyb3VwXSA9IHNvcnRlZFByaW9yaXRpZXNbMF07XG5cbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBHZXQgZ3JvdXAgbnVtYmVyIHdpdGggdGhlIGxvd2VzdCBwcmlvcml0eS5cbiAgICAgKiAgVXNlcyBmb3IgZGV0ZWN0aW5nIGEgZ3JvdXAgb2YgZWxlbWVudHMgd2hpY2ggd291bGQgYmUgaGlkZGVuIGZyb20gdGhlIHRvb2xiYXIuXG4gICAgICogICovXG4gICAgcHJpdmF0ZSBfZ2V0TG93ZXN0UHJpb3JpdHlGcm9tR3JvdXAoaXRlbUdyb3VwOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBwcmlvcml0eSA9IHRoaXMuX2dyb3VwZWRDb2xsZWN0aW9uUHJpb3JpdHk7XG4gICAgICAgIGlmICghcHJpb3JpdHkgfHwgIU9WRVJGTE9XX1BSSU9SSVRZX1NDT1JFLmdldChwcmlvcml0eVtpdGVtR3JvdXBdKSkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1Hcm91cDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGdyb3VwcyA9IE9iamVjdC5rZXlzKHByaW9yaXR5KTtcblxuICAgICAgICByZXR1cm4gZ3JvdXBzLnJlZHVjZSgobG93ZXN0R3JvdXAsIGN1cnJlbnRHcm91cCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbG93ZXN0R3JvdXBQcmlvcml0eSA9IHByaW9yaXR5W2xvd2VzdEdyb3VwXTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRHcm91cFByaW9yaXR5ID0gcHJpb3JpdHlbY3VycmVudEdyb3VwXTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBPVkVSRkxPV19QUklPUklUWV9TQ09SRS5nZXQoY3VycmVudEdyb3VwUHJpb3JpdHkpISA8IE9WRVJGTE9XX1BSSU9SSVRZX1NDT1JFLmdldChsb3dlc3RHcm91cFByaW9yaXR5KSFcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiArY3VycmVudEdyb3VwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbG93ZXN0R3JvdXA7XG4gICAgICAgIH0sIGl0ZW1Hcm91cCBhcyBudW1iZXIpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVtb3ZlSXRlbUZyb21BcnJheShcbiAgICAgICAgdG9vbGJhckl0ZW1zOiBUb29sYmFySXRlbURpcmVjdGl2ZVtdLFxuICAgICAgICB0b29sYmFySXRlbTogVG9vbGJhckl0ZW1EaXJlY3RpdmVcbiAgICApOiBUb29sYmFySXRlbURpcmVjdGl2ZSB8IG51bGwge1xuICAgICAgICBjb25zdCBpdGVtSW5kZXggPSB0b29sYmFySXRlbXMuaW5kZXhPZih0b29sYmFySXRlbSk7XG5cbiAgICAgICAgcmV0dXJuIGl0ZW1JbmRleCA+PSAwID8gdG9vbGJhckl0ZW1zLnNwbGljZShpdGVtSW5kZXgsIDEpWzBdIDogbnVsbDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3JlbW92ZVRvb2xiYXJJdGVtRnJvbURPTSh0b29sYmFySXRlbTogVG9vbGJhckl0ZW1EaXJlY3RpdmUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRvb2xiYXJJdGVtLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCAmJiB0b29sYmFySXRlbS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgLy8gSUUxMSB3b3JrYXJvdW5kIGVsZW1lbnQucmVtb3ZlKCkgaXMgbm90IHN1cHBvcnRlZFxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5lbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudCwgdG9vbGJhckl0ZW0uZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYWRkVG9vbGJhckl0ZW1Ub092ZXJmbG93KHRvb2xiYXJJdGVtczogVG9vbGJhckl0ZW1EaXJlY3RpdmVbXSk6IHZvaWQge1xuICAgICAgICB0b29sYmFySXRlbXMuZm9yRWFjaCgoeCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuX292ZXJmbG93Qm9keSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX292ZXJmbG93Qm9keS5hcHBlbmRDaGlsZCh4LmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVzZXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX25vcm1hbEVsZW1lbnRzLmZvckVhY2godGhpcy5fcmVtb3ZlVG9vbGJhckl0ZW1Gcm9tRE9NLmJpbmQodGhpcykpO1xuICAgICAgICB0aGlzLl9vdmVyZmxvd0VsZW1lbnRzLmZvckVhY2godGhpcy5fcmVtb3ZlVG9vbGJhckl0ZW1Gcm9tRE9NLmJpbmQodGhpcykpO1xuXG4gICAgICAgIGlmICh0aGlzLm92ZXJmbG93U3BhY2VyKSB7XG4gICAgICAgICAgICB0aGlzLnRvb2xiYXJJdGVtcy5tYXAoKHgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9yZW5kZXJlci5pbnNlcnRCZWZvcmUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Rvb2xiYXIsXG4gICAgICAgICAgICAgICAgICAgIHguZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm92ZXJmbG93U3BhY2VyLm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9vdmVyZmxvd0VsZW1lbnRzID0gW107XG4gICAgICAgIHRoaXMuX25vcm1hbEVsZW1lbnRzID0gW107XG4gICAgICAgIHRoaXMuX2Rpc2FwcGVhckVsZW1lbnRzID0gW107XG5cbiAgICAgICAgdGhpcy5fZ3JvdXBlZENvbGxlY3Rpb24gPSBudWxsO1xuICAgICAgICB0aGlzLl9ncm91cGVkQ29sbGVjdGlvblByaW9yaXR5ID0gbnVsbDtcblxuICAgICAgICB0aGlzLl9jaGFuZ2VPdmVyZmxvd1Zpc2libGVTdGF0ZShmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jaGFuZ2VPdmVyZmxvd1Zpc2libGVTdGF0ZSh2aXNpYmxlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMub3ZlcmZsb3dWaXNpYmlsaXR5ID0gb2YodmlzaWJsZSkucGlwZShkZWJvdW5jZVRpbWUoMSkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2hhbmdlSXRlbVZpc2liaWxpdHlTdGF0ZShlbGVtZW50OiBIVE1MRWxlbWVudCwgdmlzaWJsZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBjb25zdCBmYWRlSW4gPSAnZmQtdG9vbGJhci1mYWRlLWluJztcbiAgICAgICAgY29uc3QgZmFkZU91dCA9ICdmZC10b29sYmFyLWZhZGUtb3V0JztcblxuICAgICAgICBpZiAodmlzaWJsZSkge1xuICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGZhZGVJbik7XG4gICAgICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoZmFkZU91dCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoZmFkZU91dCk7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShmYWRlSW4pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFNvcnQgcHJpb3JpdGllcyBvZiBlbGVtZW50cy9ncm91cHMuICovXG4gICAgcHJpdmF0ZSBfc29ydFByaW9yaXRpZXMoYTogT3ZlcmZsb3dQcmlvcml0eSwgYjogT3ZlcmZsb3dQcmlvcml0eSk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBPVkVSRkxPV19QUklPUklUWV9TQ09SRS5nZXQoYikhIC0gT1ZFUkZMT1dfUFJJT1JJVFlfU0NPUkUuZ2V0KGEpITtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NvbGxhcHNlTGFzdFNwYWNlckVsZW1lbnQoXG4gICAgICAgIG92ZXJmbG93RWxlbWVudHM6IFRvb2xiYXJJdGVtRGlyZWN0aXZlW10sXG4gICAgICAgIG5vcm1hbEVsZW1lbnRzOiBUb29sYmFySXRlbURpcmVjdGl2ZVtdXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGlmICghbm9ybWFsRWxlbWVudHMgfHwgbm9ybWFsRWxlbWVudHMubGVuZ3RoIDwgMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNTcGFjZXIgPSAoZWxlbWVudDogVG9vbGJhckl0ZW1EaXJlY3RpdmUpOiBib29sZWFuID0+XG4gICAgICAgICAgICBlbGVtZW50LmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2ZkLXRvb2xiYXJfX3NwYWNlcicpO1xuXG4gICAgICAgIGxldCBsYXN0SXRlbTogVG9vbGJhckl0ZW1EaXJlY3RpdmUgPSBub3JtYWxFbGVtZW50c1tub3JtYWxFbGVtZW50cy5sZW5ndGggLSAxXTtcblxuICAgICAgICB3aGlsZSAoaXNTcGFjZXIobGFzdEl0ZW0pICYmIG5vcm1hbEVsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIG92ZXJmbG93RWxlbWVudHMucHVzaChub3JtYWxFbGVtZW50cy5wb3AoKSEpO1xuICAgICAgICAgICAgbGFzdEl0ZW0gPSBub3JtYWxFbGVtZW50c1tub3JtYWxFbGVtZW50cy5sZW5ndGggLSAxXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ2V0T3JkZXJlZEl0ZW1zRm9sbG93aW5nUXVlcnkodG9vbGJhckl0ZW1zOiBUb29sYmFySXRlbURpcmVjdGl2ZVtdKTogVG9vbGJhckl0ZW1EaXJlY3RpdmVbXSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5QXJyYXkgPSB0aGlzLnRvb2xiYXJJdGVtcy50b0FycmF5KCk7XG4gICAgICAgIGNvbnN0IHNvcnRNZXRob2QgPSAoYTogVG9vbGJhckl0ZW1EaXJlY3RpdmUsIGI6IFRvb2xiYXJJdGVtRGlyZWN0aXZlKTogbnVtYmVyID0+XG4gICAgICAgICAgICBxdWVyeUFycmF5LmZpbmRJbmRleCgoX2l0ZW0pID0+IF9pdGVtID09PSBhKSA+IHF1ZXJ5QXJyYXkuZmluZEluZGV4KChfaXRlbSkgPT4gX2l0ZW0gPT09IGIpID8gMSA6IC0xO1xuICAgICAgICByZXR1cm4gdG9vbGJhckl0ZW1zLnNvcnQoc29ydE1ldGhvZCk7XG4gICAgfVxufVxuIiwiPGRpdiAjdG9vbGJhciBbdGFiaW5kZXhdPVwidGFiaW5kZXhcIiBbY2xhc3MuZmQtdG9vbGJhci0tY296eV09XCJfY29udGVudERlbnNpdHlPYnNlcnZlci5pc0NvenkkIHwgYXN5bmNcIj5cbiAgICA8aDQgKm5nSWY9XCJ0aXRsZVwiIGNsYXNzPVwiZmQtdGl0bGUgZmQtdGl0bGUtLWg0IGZkLXRvb2xiYXJfX3RpdGxlXCI+e3sgdGl0bGUgfX08L2g0PlxuXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3VsZE92ZXJmbG93XCI+XG4gICAgICAgIDxzcGFuICNvdmVyZmxvd1NwYWNlciBjbGFzcz1cImZkLXRvb2xiYXJfX3NwYWNlclwiPjwvc3Bhbj5cblxuICAgICAgICA8c3BhbiBjbGFzcz1cImZkLXRvb2xiYXJfX3NlcGFyYXRvclwiICpuZ0lmPVwib3ZlcmZsb3dWaXNpYmlsaXR5IHwgYXN5bmNcIj48L3NwYW4+XG5cbiAgICAgICAgPGZkLXBvcG92ZXIgcGxhY2VtZW50PVwiYm90dG9tLWVuZFwiIFtub0Fycm93XT1cInRydWVcIiBjbGFzcz1cImZkLXBvcG92ZXJcIj5cbiAgICAgICAgICAgIDxmZC1wb3BvdmVyLWNvbnRyb2w+XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIm92ZXJmbG93VmlzaWJpbGl0eSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPVwiTW9yZVwiXG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJNb3JlXCJcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgIGdseXBoPVwib3ZlcmZsb3dcIlxuICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZmQtcG9wb3Zlci1jb250cm9sPlxuXG4gICAgICAgICAgICA8ZmQtcG9wb3Zlci1ib2R5PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZC10b29sYmFyX19vdmVyZmxvd1wiICNvdmVyZmxvd0JvZHk+PC9kaXY+XG4gICAgICAgICAgICA8L2ZkLXBvcG92ZXItYm9keT5cbiAgICAgICAgPC9mZC1wb3BvdmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4iXX0=