@fundamental-ngx/core 0.37.0-rc.2 → 0.37.0-rc.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (373) hide show
  1. package/carousel/carousel-item/carousel-item.component.d.ts +2 -3
  2. package/carousel/carousel.component.d.ts +4 -3
  3. package/dynamic-page/dynamic-page-header/subheader/dynamic-page-subheader.component.d.ts +4 -0
  4. package/esm2020/action-bar/action-bar.component.mjs +2 -2
  5. package/esm2020/action-sheet/action-sheet.component.mjs +3 -3
  6. package/esm2020/alert/alert.component.mjs +2 -2
  7. package/esm2020/avatar/avatar.component.mjs +7 -3
  8. package/esm2020/avatar-group/avatar-group.component.mjs +2 -2
  9. package/esm2020/bar/bar.component.mjs +2 -2
  10. package/esm2020/breadcrumb/breadcrumb.component.mjs +2 -2
  11. package/esm2020/busy-indicator/busy-indicator.component.mjs +2 -2
  12. package/esm2020/button/button.component.mjs +2 -2
  13. package/esm2020/calendar/calendar.component.mjs +2 -2
  14. package/esm2020/card/card.component.mjs +2 -2
  15. package/esm2020/carousel/carousel-item/carousel-item.component.mjs +5 -7
  16. package/esm2020/carousel/carousel.component.mjs +31 -27
  17. package/esm2020/checkbox/checkbox/checkbox.component.mjs +2 -2
  18. package/esm2020/combobox/combobox.component.mjs +1 -1
  19. package/esm2020/date-picker/date-picker.component.mjs +1 -1
  20. package/esm2020/datetime-picker/datetime-picker.component.mjs +1 -1
  21. package/esm2020/dialog/dialog.component.mjs +2 -2
  22. package/esm2020/dynamic-page/dynamic-page-header/subheader/dynamic-page-subheader.component.mjs +7 -3
  23. package/esm2020/dynamic-page/dynamic-page.component.mjs +2 -2
  24. package/esm2020/dynamic-side-content/dynamic-side-content.component.mjs +2 -2
  25. package/esm2020/facets/facet/facet.component.mjs +2 -2
  26. package/esm2020/feed-input/feed-input.component.mjs +2 -2
  27. package/esm2020/feed-list-item/components/list/feed-list.component.mjs +2 -2
  28. package/esm2020/file-uploader/file-uploader.component.mjs +8 -12
  29. package/esm2020/fixed-card-layout/fixed-card-layout.component.mjs +2 -2
  30. package/esm2020/flexible-column-layout/flexible-column-layout.component.mjs +2 -2
  31. package/esm2020/form/fieldset/fieldset.component.mjs +2 -2
  32. package/esm2020/form/form-control/form-control.component.mjs +2 -2
  33. package/esm2020/form/form-group/form-group.component.mjs +2 -2
  34. package/esm2020/form/form-header/form-header.component.mjs +2 -2
  35. package/esm2020/form/form-input-message-group/form-input-message-group.component.mjs +3 -3
  36. package/esm2020/form/form-item/form-item.component.mjs +2 -2
  37. package/esm2020/form/form-label/form-label.component.mjs +2 -2
  38. package/esm2020/form/form-message/form-message.component.mjs +2 -2
  39. package/esm2020/grid-list/components/grid-list/grid-list.component.mjs +2 -2
  40. package/esm2020/icon/icon.component.mjs +2 -2
  41. package/esm2020/illustrated-message/illustrated-message.component.mjs +2 -2
  42. package/esm2020/info-label/info-label.component.mjs +2 -2
  43. package/esm2020/inline-help/inline-help.directive.mjs +3 -3
  44. package/esm2020/input-group/input-group.component.mjs +2 -2
  45. package/esm2020/layout-grid/layout-grid.component.mjs +2 -2
  46. package/esm2020/layout-panel/layout-panel.component.mjs +2 -2
  47. package/esm2020/link/link.component.mjs +2 -2
  48. package/esm2020/list/list.component.mjs +2 -2
  49. package/esm2020/menu/menu-item/menu-item.component.mjs +43 -7
  50. package/esm2020/menu/menu.component.mjs +44 -33
  51. package/esm2020/menu/services/menu.service.mjs +14 -13
  52. package/esm2020/message-box/message-box.component.mjs +2 -2
  53. package/esm2020/message-page/message-page.component.mjs +2 -2
  54. package/esm2020/message-strip/message-strip.component.mjs +2 -2
  55. package/esm2020/message-toast/message-toast.component.mjs +2 -2
  56. package/esm2020/multi-input/multi-input.component.mjs +1 -1
  57. package/esm2020/nested-list/nested-list-popover/nested-list-popover.component.mjs +1 -1
  58. package/esm2020/notification/notification/notification.component.mjs +2 -2
  59. package/esm2020/object-identifier/object-identifier.component.mjs +2 -2
  60. package/esm2020/object-marker/object-marker.component.mjs +2 -2
  61. package/esm2020/object-number/object-number.component.mjs +2 -2
  62. package/esm2020/object-status/object-status.component.mjs +2 -2
  63. package/esm2020/overflow-layout/overflow-layout.component.mjs +1 -1
  64. package/esm2020/pagination/pagination.component.mjs +2 -2
  65. package/esm2020/panel/panel.component.mjs +2 -2
  66. package/esm2020/popover/base/base-popover.class.mjs +10 -2
  67. package/esm2020/popover/popover-body/popover-body.component.mjs +36 -35
  68. package/esm2020/popover/popover-service/popover.service.mjs +3 -1
  69. package/esm2020/product-switch/product-switch/product-switch.component.mjs +1 -1
  70. package/esm2020/product-switch/product-switch-body/product-switch-body.component.mjs +2 -2
  71. package/esm2020/progress-indicator/progress-indicator.component.mjs +2 -2
  72. package/esm2020/quick-view/quick-view/quick-view.component.mjs +2 -2
  73. package/esm2020/radio/radio-button/radio-button.component.mjs +2 -2
  74. package/esm2020/rating-indicator/components/rating-indicator.component.mjs +2 -2
  75. package/esm2020/resizable-card-layout/resizable-card-layout/resizable-card-item/resizable-card-item.component.mjs +2 -2
  76. package/esm2020/resizable-card-layout/resizable-card-layout/resizable-card-layout.component.mjs +2 -2
  77. package/esm2020/scrollbar/scrollbar.component.mjs +2 -2
  78. package/esm2020/segmented-button/segmented-button.component.mjs +2 -2
  79. package/esm2020/select/select.component.mjs +2 -2
  80. package/esm2020/shared/interfaces/popover-position.mjs +1 -28
  81. package/esm2020/shellbar/product-menu/product-menu.component.mjs +1 -1
  82. package/esm2020/shellbar/shellbar.component.mjs +2 -2
  83. package/esm2020/shellbar/user-menu/shellbar-user-menu.component.mjs +1 -1
  84. package/esm2020/side-navigation/side-navigation.component.mjs +2 -2
  85. package/esm2020/slider/slider.component.mjs +2 -2
  86. package/esm2020/split-button/split-button.component.mjs +8 -8
  87. package/esm2020/splitter/splitter.component.mjs +2 -2
  88. package/esm2020/status-indicator/status-indicator.component.mjs +2 -2
  89. package/esm2020/step-input/step-input.component.mjs +2 -2
  90. package/esm2020/switch/switch.component.mjs +2 -2
  91. package/esm2020/table/table-wrapper.component.mjs +2 -2
  92. package/esm2020/table/table.component.mjs +2 -2
  93. package/esm2020/tabs/tab-list.component.mjs +2 -2
  94. package/esm2020/tabs/tab-nav/tab-nav.component.mjs +2 -2
  95. package/esm2020/text/text.component.mjs +2 -2
  96. package/esm2020/tile/tile.component.mjs +2 -2
  97. package/esm2020/time/time.component.mjs +2 -2
  98. package/esm2020/time-picker/time-picker.component.mjs +1 -1
  99. package/esm2020/title/title.component.mjs +2 -2
  100. package/esm2020/token/token.component.mjs +2 -2
  101. package/esm2020/token/tokenizer.component.mjs +2 -2
  102. package/esm2020/toolbar/toolbar.component.mjs +2 -2
  103. package/esm2020/tree/tree-child.component.mjs +2 -2
  104. package/esm2020/tree/tree.component.mjs +2 -2
  105. package/esm2020/upload-collection/upload-collection.component.mjs +2 -2
  106. package/esm2020/vertical-navigation/vertical-navigation-main-navigation.component.mjs +2 -2
  107. package/esm2020/vertical-navigation/vertical-navigation.component.mjs +2 -2
  108. package/esm2020/wizard/wizard.component.mjs +2 -2
  109. package/fesm2015/fundamental-ngx-core-action-bar.mjs +2 -2
  110. package/fesm2015/fundamental-ngx-core-action-sheet.mjs +2 -2
  111. package/fesm2015/fundamental-ngx-core-action-sheet.mjs.map +1 -1
  112. package/fesm2015/fundamental-ngx-core-alert.mjs +2 -2
  113. package/fesm2015/fundamental-ngx-core-avatar-group.mjs +2 -2
  114. package/fesm2015/fundamental-ngx-core-avatar.mjs +6 -2
  115. package/fesm2015/fundamental-ngx-core-avatar.mjs.map +1 -1
  116. package/fesm2015/fundamental-ngx-core-bar.mjs +2 -2
  117. package/fesm2015/fundamental-ngx-core-breadcrumb.mjs +2 -2
  118. package/fesm2015/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
  119. package/fesm2015/fundamental-ngx-core-busy-indicator.mjs +2 -2
  120. package/fesm2015/fundamental-ngx-core-button.mjs +2 -2
  121. package/fesm2015/fundamental-ngx-core-button.mjs.map +1 -1
  122. package/fesm2015/fundamental-ngx-core-calendar.mjs +2 -2
  123. package/fesm2015/fundamental-ngx-core-card.mjs +2 -2
  124. package/fesm2015/fundamental-ngx-core-carousel.mjs +32 -30
  125. package/fesm2015/fundamental-ngx-core-carousel.mjs.map +1 -1
  126. package/fesm2015/fundamental-ngx-core-checkbox.mjs +2 -2
  127. package/fesm2015/fundamental-ngx-core-combobox.mjs +1 -1
  128. package/fesm2015/fundamental-ngx-core-combobox.mjs.map +1 -1
  129. package/fesm2015/fundamental-ngx-core-date-picker.mjs +1 -1
  130. package/fesm2015/fundamental-ngx-core-date-picker.mjs.map +1 -1
  131. package/fesm2015/fundamental-ngx-core-datetime-picker.mjs +1 -1
  132. package/fesm2015/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
  133. package/fesm2015/fundamental-ngx-core-dialog.mjs +2 -2
  134. package/fesm2015/fundamental-ngx-core-dynamic-page.mjs +8 -4
  135. package/fesm2015/fundamental-ngx-core-dynamic-page.mjs.map +1 -1
  136. package/fesm2015/fundamental-ngx-core-dynamic-side-content.mjs +2 -2
  137. package/fesm2015/fundamental-ngx-core-facets.mjs +2 -2
  138. package/fesm2015/fundamental-ngx-core-feed-input.mjs +2 -2
  139. package/fesm2015/fundamental-ngx-core-feed-input.mjs.map +1 -1
  140. package/fesm2015/fundamental-ngx-core-feed-list-item.mjs +2 -2
  141. package/fesm2015/fundamental-ngx-core-file-uploader.mjs +6 -10
  142. package/fesm2015/fundamental-ngx-core-file-uploader.mjs.map +1 -1
  143. package/fesm2015/fundamental-ngx-core-fixed-card-layout.mjs +2 -2
  144. package/fesm2015/fundamental-ngx-core-flexible-column-layout.mjs +2 -2
  145. package/fesm2015/fundamental-ngx-core-form.mjs +16 -16
  146. package/fesm2015/fundamental-ngx-core-form.mjs.map +1 -1
  147. package/fesm2015/fundamental-ngx-core-grid-list.mjs +2 -2
  148. package/fesm2015/fundamental-ngx-core-icon.mjs +2 -2
  149. package/fesm2015/fundamental-ngx-core-icon.mjs.map +1 -1
  150. package/fesm2015/fundamental-ngx-core-illustrated-message.mjs +2 -2
  151. package/fesm2015/fundamental-ngx-core-info-label.mjs +2 -2
  152. package/fesm2015/fundamental-ngx-core-info-label.mjs.map +1 -1
  153. package/fesm2015/fundamental-ngx-core-inline-help.mjs +2 -2
  154. package/fesm2015/fundamental-ngx-core-inline-help.mjs.map +1 -1
  155. package/fesm2015/fundamental-ngx-core-input-group.mjs +2 -2
  156. package/fesm2015/fundamental-ngx-core-layout-grid.mjs +2 -2
  157. package/fesm2015/fundamental-ngx-core-layout-panel.mjs +2 -2
  158. package/fesm2015/fundamental-ngx-core-link.mjs +2 -2
  159. package/fesm2015/fundamental-ngx-core-link.mjs.map +1 -1
  160. package/fesm2015/fundamental-ngx-core-list.mjs +2 -2
  161. package/fesm2015/fundamental-ngx-core-list.mjs.map +1 -1
  162. package/fesm2015/fundamental-ngx-core-menu.mjs +99 -49
  163. package/fesm2015/fundamental-ngx-core-menu.mjs.map +1 -1
  164. package/fesm2015/fundamental-ngx-core-message-box.mjs +2 -2
  165. package/fesm2015/fundamental-ngx-core-message-page.mjs +2 -2
  166. package/fesm2015/fundamental-ngx-core-message-strip.mjs +2 -2
  167. package/fesm2015/fundamental-ngx-core-message-toast.mjs +2 -2
  168. package/fesm2015/fundamental-ngx-core-multi-input.mjs +1 -1
  169. package/fesm2015/fundamental-ngx-core-multi-input.mjs.map +1 -1
  170. package/fesm2015/fundamental-ngx-core-nested-list.mjs +1 -1
  171. package/fesm2015/fundamental-ngx-core-nested-list.mjs.map +1 -1
  172. package/fesm2015/fundamental-ngx-core-notification.mjs +2 -2
  173. package/fesm2015/fundamental-ngx-core-object-identifier.mjs +2 -2
  174. package/fesm2015/fundamental-ngx-core-object-marker.mjs +2 -2
  175. package/fesm2015/fundamental-ngx-core-object-marker.mjs.map +1 -1
  176. package/fesm2015/fundamental-ngx-core-object-number.mjs +2 -2
  177. package/fesm2015/fundamental-ngx-core-object-status.mjs +2 -2
  178. package/fesm2015/fundamental-ngx-core-object-status.mjs.map +1 -1
  179. package/fesm2015/fundamental-ngx-core-overflow-layout.mjs +1 -1
  180. package/fesm2015/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
  181. package/fesm2015/fundamental-ngx-core-pagination.mjs +2 -2
  182. package/fesm2015/fundamental-ngx-core-panel.mjs +2 -2
  183. package/fesm2015/fundamental-ngx-core-popover.mjs +47 -35
  184. package/fesm2015/fundamental-ngx-core-popover.mjs.map +1 -1
  185. package/fesm2015/fundamental-ngx-core-product-switch.mjs +3 -3
  186. package/fesm2015/fundamental-ngx-core-product-switch.mjs.map +1 -1
  187. package/fesm2015/fundamental-ngx-core-progress-indicator.mjs +2 -2
  188. package/fesm2015/fundamental-ngx-core-progress-indicator.mjs.map +1 -1
  189. package/fesm2015/fundamental-ngx-core-quick-view.mjs +2 -2
  190. package/fesm2015/fundamental-ngx-core-quick-view.mjs.map +1 -1
  191. package/fesm2015/fundamental-ngx-core-radio.mjs +2 -2
  192. package/fesm2015/fundamental-ngx-core-rating-indicator.mjs +2 -2
  193. package/fesm2015/fundamental-ngx-core-rating-indicator.mjs.map +1 -1
  194. package/fesm2015/fundamental-ngx-core-resizable-card-layout.mjs +4 -4
  195. package/fesm2015/fundamental-ngx-core-scrollbar.mjs +2 -2
  196. package/fesm2015/fundamental-ngx-core-segmented-button.mjs +2 -2
  197. package/fesm2015/fundamental-ngx-core-select.mjs +2 -2
  198. package/fesm2015/fundamental-ngx-core-select.mjs.map +1 -1
  199. package/fesm2015/fundamental-ngx-core-shared.mjs +1 -28
  200. package/fesm2015/fundamental-ngx-core-shared.mjs.map +1 -1
  201. package/fesm2015/fundamental-ngx-core-shellbar.mjs +4 -4
  202. package/fesm2015/fundamental-ngx-core-shellbar.mjs.map +1 -1
  203. package/fesm2015/fundamental-ngx-core-side-navigation.mjs +2 -2
  204. package/fesm2015/fundamental-ngx-core-side-navigation.mjs.map +1 -1
  205. package/fesm2015/fundamental-ngx-core-slider.mjs +2 -2
  206. package/fesm2015/fundamental-ngx-core-slider.mjs.map +1 -1
  207. package/fesm2015/fundamental-ngx-core-split-button.mjs +7 -7
  208. package/fesm2015/fundamental-ngx-core-split-button.mjs.map +1 -1
  209. package/fesm2015/fundamental-ngx-core-splitter.mjs +2 -2
  210. package/fesm2015/fundamental-ngx-core-status-indicator.mjs +2 -2
  211. package/fesm2015/fundamental-ngx-core-status-indicator.mjs.map +1 -1
  212. package/fesm2015/fundamental-ngx-core-step-input.mjs +2 -2
  213. package/fesm2015/fundamental-ngx-core-switch.mjs +2 -2
  214. package/fesm2015/fundamental-ngx-core-table.mjs +4 -4
  215. package/fesm2015/fundamental-ngx-core-tabs.mjs +4 -4
  216. package/fesm2015/fundamental-ngx-core-tabs.mjs.map +1 -1
  217. package/fesm2015/fundamental-ngx-core-text.mjs +2 -2
  218. package/fesm2015/fundamental-ngx-core-tile.mjs +2 -2
  219. package/fesm2015/fundamental-ngx-core-time-picker.mjs +1 -1
  220. package/fesm2015/fundamental-ngx-core-time-picker.mjs.map +1 -1
  221. package/fesm2015/fundamental-ngx-core-time.mjs +2 -2
  222. package/fesm2015/fundamental-ngx-core-title.mjs +2 -2
  223. package/fesm2015/fundamental-ngx-core-token.mjs +4 -4
  224. package/fesm2015/fundamental-ngx-core-token.mjs.map +1 -1
  225. package/fesm2015/fundamental-ngx-core-toolbar.mjs +2 -2
  226. package/fesm2015/fundamental-ngx-core-toolbar.mjs.map +1 -1
  227. package/fesm2015/fundamental-ngx-core-tree.mjs +3 -3
  228. package/fesm2015/fundamental-ngx-core-tree.mjs.map +1 -1
  229. package/fesm2015/fundamental-ngx-core-upload-collection.mjs +2 -2
  230. package/fesm2015/fundamental-ngx-core-upload-collection.mjs.map +1 -1
  231. package/fesm2015/fundamental-ngx-core-vertical-navigation.mjs +4 -4
  232. package/fesm2015/fundamental-ngx-core-wizard.mjs +2 -2
  233. package/fesm2020/fundamental-ngx-core-action-bar.mjs +2 -2
  234. package/fesm2020/fundamental-ngx-core-action-sheet.mjs +2 -2
  235. package/fesm2020/fundamental-ngx-core-action-sheet.mjs.map +1 -1
  236. package/fesm2020/fundamental-ngx-core-alert.mjs +2 -2
  237. package/fesm2020/fundamental-ngx-core-avatar-group.mjs +2 -2
  238. package/fesm2020/fundamental-ngx-core-avatar.mjs +6 -2
  239. package/fesm2020/fundamental-ngx-core-avatar.mjs.map +1 -1
  240. package/fesm2020/fundamental-ngx-core-bar.mjs +2 -2
  241. package/fesm2020/fundamental-ngx-core-breadcrumb.mjs +2 -2
  242. package/fesm2020/fundamental-ngx-core-breadcrumb.mjs.map +1 -1
  243. package/fesm2020/fundamental-ngx-core-busy-indicator.mjs +2 -2
  244. package/fesm2020/fundamental-ngx-core-button.mjs +2 -2
  245. package/fesm2020/fundamental-ngx-core-button.mjs.map +1 -1
  246. package/fesm2020/fundamental-ngx-core-calendar.mjs +2 -2
  247. package/fesm2020/fundamental-ngx-core-card.mjs +2 -2
  248. package/fesm2020/fundamental-ngx-core-carousel.mjs +32 -30
  249. package/fesm2020/fundamental-ngx-core-carousel.mjs.map +1 -1
  250. package/fesm2020/fundamental-ngx-core-checkbox.mjs +2 -2
  251. package/fesm2020/fundamental-ngx-core-combobox.mjs +1 -1
  252. package/fesm2020/fundamental-ngx-core-combobox.mjs.map +1 -1
  253. package/fesm2020/fundamental-ngx-core-date-picker.mjs +1 -1
  254. package/fesm2020/fundamental-ngx-core-date-picker.mjs.map +1 -1
  255. package/fesm2020/fundamental-ngx-core-datetime-picker.mjs +1 -1
  256. package/fesm2020/fundamental-ngx-core-datetime-picker.mjs.map +1 -1
  257. package/fesm2020/fundamental-ngx-core-dialog.mjs +2 -2
  258. package/fesm2020/fundamental-ngx-core-dynamic-page.mjs +8 -4
  259. package/fesm2020/fundamental-ngx-core-dynamic-page.mjs.map +1 -1
  260. package/fesm2020/fundamental-ngx-core-dynamic-side-content.mjs +2 -2
  261. package/fesm2020/fundamental-ngx-core-facets.mjs +2 -2
  262. package/fesm2020/fundamental-ngx-core-feed-input.mjs +2 -2
  263. package/fesm2020/fundamental-ngx-core-feed-input.mjs.map +1 -1
  264. package/fesm2020/fundamental-ngx-core-feed-list-item.mjs +2 -2
  265. package/fesm2020/fundamental-ngx-core-file-uploader.mjs +6 -10
  266. package/fesm2020/fundamental-ngx-core-file-uploader.mjs.map +1 -1
  267. package/fesm2020/fundamental-ngx-core-fixed-card-layout.mjs +2 -2
  268. package/fesm2020/fundamental-ngx-core-flexible-column-layout.mjs +2 -2
  269. package/fesm2020/fundamental-ngx-core-form.mjs +16 -16
  270. package/fesm2020/fundamental-ngx-core-form.mjs.map +1 -1
  271. package/fesm2020/fundamental-ngx-core-grid-list.mjs +2 -2
  272. package/fesm2020/fundamental-ngx-core-icon.mjs +2 -2
  273. package/fesm2020/fundamental-ngx-core-icon.mjs.map +1 -1
  274. package/fesm2020/fundamental-ngx-core-illustrated-message.mjs +2 -2
  275. package/fesm2020/fundamental-ngx-core-info-label.mjs +2 -2
  276. package/fesm2020/fundamental-ngx-core-info-label.mjs.map +1 -1
  277. package/fesm2020/fundamental-ngx-core-inline-help.mjs +2 -2
  278. package/fesm2020/fundamental-ngx-core-inline-help.mjs.map +1 -1
  279. package/fesm2020/fundamental-ngx-core-input-group.mjs +2 -2
  280. package/fesm2020/fundamental-ngx-core-layout-grid.mjs +2 -2
  281. package/fesm2020/fundamental-ngx-core-layout-panel.mjs +2 -2
  282. package/fesm2020/fundamental-ngx-core-link.mjs +2 -2
  283. package/fesm2020/fundamental-ngx-core-link.mjs.map +1 -1
  284. package/fesm2020/fundamental-ngx-core-list.mjs +2 -2
  285. package/fesm2020/fundamental-ngx-core-list.mjs.map +1 -1
  286. package/fesm2020/fundamental-ngx-core-menu.mjs +97 -49
  287. package/fesm2020/fundamental-ngx-core-menu.mjs.map +1 -1
  288. package/fesm2020/fundamental-ngx-core-message-box.mjs +2 -2
  289. package/fesm2020/fundamental-ngx-core-message-page.mjs +2 -2
  290. package/fesm2020/fundamental-ngx-core-message-strip.mjs +2 -2
  291. package/fesm2020/fundamental-ngx-core-message-toast.mjs +2 -2
  292. package/fesm2020/fundamental-ngx-core-multi-input.mjs +1 -1
  293. package/fesm2020/fundamental-ngx-core-multi-input.mjs.map +1 -1
  294. package/fesm2020/fundamental-ngx-core-nested-list.mjs +1 -1
  295. package/fesm2020/fundamental-ngx-core-nested-list.mjs.map +1 -1
  296. package/fesm2020/fundamental-ngx-core-notification.mjs +2 -2
  297. package/fesm2020/fundamental-ngx-core-object-identifier.mjs +2 -2
  298. package/fesm2020/fundamental-ngx-core-object-marker.mjs +2 -2
  299. package/fesm2020/fundamental-ngx-core-object-marker.mjs.map +1 -1
  300. package/fesm2020/fundamental-ngx-core-object-number.mjs +2 -2
  301. package/fesm2020/fundamental-ngx-core-object-status.mjs +2 -2
  302. package/fesm2020/fundamental-ngx-core-object-status.mjs.map +1 -1
  303. package/fesm2020/fundamental-ngx-core-overflow-layout.mjs +1 -1
  304. package/fesm2020/fundamental-ngx-core-overflow-layout.mjs.map +1 -1
  305. package/fesm2020/fundamental-ngx-core-pagination.mjs +2 -2
  306. package/fesm2020/fundamental-ngx-core-panel.mjs +2 -2
  307. package/fesm2020/fundamental-ngx-core-popover.mjs +47 -35
  308. package/fesm2020/fundamental-ngx-core-popover.mjs.map +1 -1
  309. package/fesm2020/fundamental-ngx-core-product-switch.mjs +3 -3
  310. package/fesm2020/fundamental-ngx-core-product-switch.mjs.map +1 -1
  311. package/fesm2020/fundamental-ngx-core-progress-indicator.mjs +2 -2
  312. package/fesm2020/fundamental-ngx-core-progress-indicator.mjs.map +1 -1
  313. package/fesm2020/fundamental-ngx-core-quick-view.mjs +2 -2
  314. package/fesm2020/fundamental-ngx-core-quick-view.mjs.map +1 -1
  315. package/fesm2020/fundamental-ngx-core-radio.mjs +2 -2
  316. package/fesm2020/fundamental-ngx-core-rating-indicator.mjs +2 -2
  317. package/fesm2020/fundamental-ngx-core-rating-indicator.mjs.map +1 -1
  318. package/fesm2020/fundamental-ngx-core-resizable-card-layout.mjs +4 -4
  319. package/fesm2020/fundamental-ngx-core-scrollbar.mjs +2 -2
  320. package/fesm2020/fundamental-ngx-core-segmented-button.mjs +2 -2
  321. package/fesm2020/fundamental-ngx-core-select.mjs +2 -2
  322. package/fesm2020/fundamental-ngx-core-select.mjs.map +1 -1
  323. package/fesm2020/fundamental-ngx-core-shared.mjs +1 -28
  324. package/fesm2020/fundamental-ngx-core-shared.mjs.map +1 -1
  325. package/fesm2020/fundamental-ngx-core-shellbar.mjs +4 -4
  326. package/fesm2020/fundamental-ngx-core-shellbar.mjs.map +1 -1
  327. package/fesm2020/fundamental-ngx-core-side-navigation.mjs +2 -2
  328. package/fesm2020/fundamental-ngx-core-side-navigation.mjs.map +1 -1
  329. package/fesm2020/fundamental-ngx-core-slider.mjs +2 -2
  330. package/fesm2020/fundamental-ngx-core-slider.mjs.map +1 -1
  331. package/fesm2020/fundamental-ngx-core-split-button.mjs +7 -7
  332. package/fesm2020/fundamental-ngx-core-split-button.mjs.map +1 -1
  333. package/fesm2020/fundamental-ngx-core-splitter.mjs +2 -2
  334. package/fesm2020/fundamental-ngx-core-status-indicator.mjs +2 -2
  335. package/fesm2020/fundamental-ngx-core-status-indicator.mjs.map +1 -1
  336. package/fesm2020/fundamental-ngx-core-step-input.mjs +2 -2
  337. package/fesm2020/fundamental-ngx-core-switch.mjs +2 -2
  338. package/fesm2020/fundamental-ngx-core-table.mjs +4 -4
  339. package/fesm2020/fundamental-ngx-core-tabs.mjs +4 -4
  340. package/fesm2020/fundamental-ngx-core-tabs.mjs.map +1 -1
  341. package/fesm2020/fundamental-ngx-core-text.mjs +2 -2
  342. package/fesm2020/fundamental-ngx-core-tile.mjs +2 -2
  343. package/fesm2020/fundamental-ngx-core-time-picker.mjs +1 -1
  344. package/fesm2020/fundamental-ngx-core-time-picker.mjs.map +1 -1
  345. package/fesm2020/fundamental-ngx-core-time.mjs +2 -2
  346. package/fesm2020/fundamental-ngx-core-title.mjs +2 -2
  347. package/fesm2020/fundamental-ngx-core-token.mjs +4 -4
  348. package/fesm2020/fundamental-ngx-core-token.mjs.map +1 -1
  349. package/fesm2020/fundamental-ngx-core-toolbar.mjs +2 -2
  350. package/fesm2020/fundamental-ngx-core-toolbar.mjs.map +1 -1
  351. package/fesm2020/fundamental-ngx-core-tree.mjs +3 -3
  352. package/fesm2020/fundamental-ngx-core-tree.mjs.map +1 -1
  353. package/fesm2020/fundamental-ngx-core-upload-collection.mjs +2 -2
  354. package/fesm2020/fundamental-ngx-core-upload-collection.mjs.map +1 -1
  355. package/fesm2020/fundamental-ngx-core-vertical-navigation.mjs +4 -4
  356. package/fesm2020/fundamental-ngx-core-wizard.mjs +2 -2
  357. package/file-uploader/file-uploader.component.d.ts +0 -2
  358. package/fundamental-ngx-core-v0.37.0-rc.21.tgz +0 -0
  359. package/menu/menu-item/menu-item.component.d.ts +27 -7
  360. package/menu/menu.component.d.ts +15 -10
  361. package/menu/services/menu.service.d.ts +3 -3
  362. package/package.json +11 -8
  363. package/popover/base/base-popover.class.d.ts +5 -1
  364. package/popover/popover-body/popover-body.component.d.ts +7 -10
  365. package/schematics/migrations/migration-0-37/index.js +14 -1
  366. package/schematics/migrations/migration-0-37/index.js.map +1 -1
  367. package/schematics/migrations/migration-0-37/index.ts +18 -1
  368. package/schematics/ng-add/index.js +6 -6
  369. package/schematics/ng-add/index.js.map +1 -1
  370. package/schematics/ng-add/index.ts +4 -4
  371. package/shared/interfaces/popover-position.d.ts +0 -8
  372. package/styles/fundamental-ngx-core.css +1 -0
  373. package/fundamental-ngx-core-v0.37.0-rc.2.tgz +0 -0
@@ -1,5 +1,5 @@
1
1
  import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, ElementRef, EventEmitter, Inject, InjectionToken, Input, Optional, Output, QueryList, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';
2
- import { defer, fromEvent, Subscription, timer } from 'rxjs';
2
+ import { defer, fromEvent, Subject, Subscription, timer } from 'rxjs';
3
3
  import { filter, switchMap, takeUntil } from 'rxjs/operators';
4
4
  import { MenuTitleDirective } from '../directives/menu-title.directive';
5
5
  import { MenuInteractiveDirective } from '../directives/menu-interactive.directive';
@@ -30,6 +30,13 @@ export class MenuItemComponent {
30
30
  this._hoverSubscriptions = new Subscription();
31
31
  }
32
32
  /** @hidden */
33
+ ngOnInit() {
34
+ if (this.parentSubmenu) {
35
+ this._submenu = this.parentSubmenu;
36
+ this._submenu._registerItem(this);
37
+ }
38
+ }
39
+ /** @hidden */
33
40
  ngAfterContentInit() {
34
41
  this._setMenuService();
35
42
  this._initialiseItemState();
@@ -48,12 +55,15 @@ export class MenuItemComponent {
48
55
  }
49
56
  /** @hidden */
50
57
  ngOnDestroy() {
58
+ if (this.parentSubmenu) {
59
+ this._submenu?._unregisterItem(this);
60
+ }
51
61
  this._subscriptions.unsubscribe();
52
62
  this._hoverSubscriptions.unsubscribe();
53
63
  }
54
64
  /** Whether menu item has popup (desktop mode) */
55
65
  get hasPopup() {
56
- return !!this.submenu && (!this.menuService?.menu || !this.menuService?.menu.mobile);
66
+ return !!this.submenu && (!this.menuService?.menuComponent || !this.menuService?.menuComponent.mobile);
57
67
  }
58
68
  /** Focuses Menu Item interactive element */
59
69
  focus() {
@@ -86,7 +96,7 @@ export class MenuItemComponent {
86
96
  const hoverSubscriptions = new Subscription();
87
97
  const mouseEnter$ = fromEvent(this.menuInteractive.elementRef.nativeElement, 'mouseenter');
88
98
  const mouseLeave$ = fromEvent(this.menuInteractive.elementRef.nativeElement, 'mouseleave');
89
- const timerFactory$ = defer(() => timer(this.menuService ? this.menuService.menu.openOnHoverTime : 0).pipe(takeUntil(mouseLeave$)));
99
+ const timerFactory$ = defer(() => timer(this.menuService ? this.menuService.menuComponent.openOnHoverTime : 0).pipe(takeUntil(mouseLeave$)));
90
100
  // Set active on hover
91
101
  hoverSubscriptions.add(mouseEnter$
92
102
  .pipe(filter(() => !!this.menuService), switchMap(() => timerFactory$))
@@ -133,7 +143,7 @@ export class MenuItemComponent {
133
143
  }
134
144
  }
135
145
  MenuItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: MenuItemComponent, deps: [{ token: i0.ElementRef }, { token: i1.MenuService, optional: true }, { token: i0.ChangeDetectorRef }, { token: SUBMENU, optional: true }], target: i0.ɵɵFactoryTarget.Component });
136
- MenuItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: MenuItemComponent, selector: "li[fd-menu-item]", inputs: { disabled: "disabled", itemId: "itemId", submenu: "submenu" }, outputs: { onSelect: "onSelect" }, host: { attributes: { "attr.role": "menuitem" }, properties: { "class.fd-menu__item": "true" } }, queries: [{ propertyName: "menuItemTitle", first: true, predicate: MenuTitleDirective, descendants: true }, { propertyName: "menuInteractive", first: true, predicate: MenuInteractiveDirective, descendants: true }], exportAs: ["fd-menu-item"], usesOnChanges: true, ngImport: i0, template: "<ng-content></ng-content>\n\n<ng-container *ngIf=\"hasPopup && submenu\">\n <ul\n class=\"fd-menu__sublist\"\n role=\"menu\"\n [attr.id]=\"itemId\"\n [attr.aria-hidden]=\"!submenuVisible\"\n [attr.aria-label]=\"submenu.ariaLabel\"\n [attr.aria-labelledby]=\"submenu.ariaLabelledby\"\n >\n <ng-container *ngTemplateOutlet=\"submenu.templateRef\"></ng-container>\n </ul>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
146
+ MenuItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: MenuItemComponent, selector: "li[fd-menu-item]", inputs: { disabled: "disabled", itemId: "itemId", submenu: "submenu", parentSubmenu: "parentSubmenu" }, outputs: { onSelect: "onSelect" }, host: { attributes: { "attr.role": "menuitem" }, properties: { "class.fd-menu__item": "true" } }, queries: [{ propertyName: "menuItemTitle", first: true, predicate: MenuTitleDirective, descendants: true }, { propertyName: "menuInteractive", first: true, predicate: MenuInteractiveDirective, descendants: true }], exportAs: ["fd-menu-item"], usesOnChanges: true, ngImport: i0, template: "<ng-content></ng-content>\n\n<ng-container *ngIf=\"hasPopup && submenu\">\n <ul\n class=\"fd-menu__sublist\"\n role=\"menu\"\n [attr.id]=\"itemId\"\n [attr.aria-hidden]=\"!submenuVisible\"\n [attr.aria-label]=\"submenu.ariaLabel\"\n [attr.aria-labelledby]=\"submenu.ariaLabelledby\"\n >\n <ng-container *ngTemplateOutlet=\"submenu.templateRef\"></ng-container>\n </ul>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
137
147
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: MenuItemComponent, decorators: [{
138
148
  type: Component,
139
149
  args: [{ selector: 'li[fd-menu-item]', exportAs: 'fd-menu-item', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
@@ -153,6 +163,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
153
163
  type: Input
154
164
  }], submenu: [{
155
165
  type: Input
166
+ }], parentSubmenu: [{
167
+ type: Input
156
168
  }],
157
169
  // eslint-disable-next-line @angular-eslint/no-output-on-prefix
158
170
  onSelect: [{
@@ -165,9 +177,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
165
177
  args: [MenuInteractiveDirective]
166
178
  }] } });
167
179
  export class SubmenuComponent {
180
+ constructor() {
181
+ /** @hidden */
182
+ this._registeredItems = [];
183
+ /** @hidden */
184
+ this._menuItemsChange$ = new Subject();
185
+ }
186
+ /** @hidden */
187
+ get menuItems() {
188
+ return this._projectedItems.length ? this._projectedItems.toArray() : this._registeredItems;
189
+ }
190
+ /** @hidden */
191
+ ngAfterContentInit() {
192
+ this._projectedItems.changes.subscribe(() => this._menuItemsChange$.next());
193
+ }
194
+ /** @hidden method for manually registering item when it's not visible for @ContentChildren */
195
+ _registerItem(item) {
196
+ this._registeredItems.push(item);
197
+ this._menuItemsChange$.next();
198
+ }
199
+ /** @hidden method for manually unregistering item when it's not visible for @ContentChildren */
200
+ _unregisterItem(item) {
201
+ this._registeredItems = this._registeredItems.filter((i) => i !== item);
202
+ this._menuItemsChange$.next();
203
+ }
168
204
  }
169
205
  SubmenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.3", ngImport: i0, type: SubmenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
170
- SubmenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: SubmenuComponent, selector: "fd-submenu", inputs: { ariaLabel: "ariaLabel", ariaLabelledby: "ariaLabelledby" }, providers: [{ provide: SUBMENU, useExisting: SubmenuComponent }], queries: [{ propertyName: "menuItems", predicate: MenuItemComponent }], viewQueries: [{ propertyName: "templateRef", first: true, predicate: TemplateRef, descendants: true }], exportAs: ["fdSubmenu"], ngImport: i0, template: `
206
+ SubmenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.3", type: SubmenuComponent, selector: "fd-submenu", inputs: { ariaLabel: "ariaLabel", ariaLabelledby: "ariaLabelledby" }, providers: [{ provide: SUBMENU, useExisting: SubmenuComponent }], queries: [{ propertyName: "_projectedItems", predicate: MenuItemComponent }], viewQueries: [{ propertyName: "templateRef", first: true, predicate: TemplateRef, descendants: true }], exportAs: ["fdSubmenu"], ngImport: i0, template: `
171
207
  <ng-template>
172
208
  <ng-content></ng-content>
173
209
  </ng-template>
@@ -193,8 +229,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.3", ngImpor
193
229
  }], templateRef: [{
194
230
  type: ViewChild,
195
231
  args: [TemplateRef]
196
- }], menuItems: [{
232
+ }], _projectedItems: [{
197
233
  type: ContentChildren,
198
234
  args: [MenuItemComponent]
199
235
  }] } });
200
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL21lbnUvbWVudS1pdGVtL21lbnUtaXRlbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9tZW51L21lbnUtaXRlbS9tZW51LWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sY0FBYyxFQUNkLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFFVCxXQUFXLEVBQ1gsU0FBUyxFQUNULGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTlELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXhFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOzs7O0FBSXBGLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztBQVVyQixNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxjQUFjLENBQWMsOEJBQThCLENBQUMsQ0FBQztBQWN2RixNQUFNLE9BQU8saUJBQWlCO0lBbUMxQixjQUFjO0lBQ2QsWUFDVyxVQUFzQixFQUNWLFdBQStCLEVBQzFDLGtCQUFxQyxFQUNSLFFBQTRCO1FBSDFELGVBQVUsR0FBVixVQUFVLENBQVk7UUFDVixnQkFBVyxHQUFYLFdB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aEIsZ0JBQWdCO2lHQUFoQixnQkFBZ0IsMkdBSGQsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLENBQUMsb0RBZ0IvQyxpQkFBaUIsMEVBSHZCLFdBQVcseUVBcEJaOzs7O0tBSVQ7MkZBTVEsZ0JBQWdCO2tCQVo1QixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxZQUFZO29CQUN0QixRQUFRLEVBQUU7Ozs7S0FJVDtvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7b0JBQ3JDLFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLGtCQUFrQixFQUFFLENBQUM7b0JBQ2hFLFFBQVEsRUFBRSxXQUFXO2lCQUN4Qjs4QkFJRyxTQUFTO3NCQURSLEtBQUs7Z0JBS04sY0FBYztzQkFEYixLQUFLO2dCQUlrQixXQUFXO3NCQUFsQyxTQUFTO3VCQUFDLFdBQVc7Z0JBR2MsU0FBUztzQkFBNUMsZUFBZTt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0LFxuICAgIEluamVjdGlvblRva2VuLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGRlZmVyLCBmcm9tRXZlbnQsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IE1lbnVUaXRsZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvbWVudS10aXRsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRGVmYXVsdE1lbnVJdGVtIH0gZnJvbSAnLi4vZGVmYXVsdC1tZW51LWl0ZW0uY2xhc3MnO1xuaW1wb3J0IHsgTWVudUludGVyYWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9tZW51LWludGVyYWN0aXZlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBNZW51U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL21lbnUuc2VydmljZSc7XG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9zaGFyZWQnO1xuXG5sZXQgbWVudVVuaXF1ZUlkID0gMDtcblxuZXhwb3J0IGludGVyZmFjZSBCYXNlU3VibWVudSB7XG4gICAgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgbWVudUl0ZW1zOiBRdWVyeUxpc3Q8YW55PjtcbiAgICBtZW51U2VydmljZTogTWVudVNlcnZpY2U7XG4gICAgYXJpYUxhYmVsOiBOdWxsYWJsZTxzdHJpbmc+O1xuICAgIGFyaWFMYWJlbGxlZGJ5OiBOdWxsYWJsZTxzdHJpbmc+O1xufVxuXG5leHBvcnQgY29uc3QgU1VCTUVOVSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxCYXNlU3VibWVudT4oJ1N1Ym1lbnUgY29tcG9uZW50IGRlcGVuZGVuY3knKTtcblxuQENvbXBvbmVudCh7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgICBzZWxlY3RvcjogJ2xpW2ZkLW1lbnUtaXRlbV0nLFxuICAgIGV4cG9ydEFzOiAnZmQtbWVudS1pdGVtJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbWVudS1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ2F0dHIucm9sZSc6ICdtZW51aXRlbScsXG4gICAgICAgICdbY2xhc3MuZmQtbWVudV9faXRlbV0nOiAndHJ1ZSdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIE1lbnVJdGVtQ29tcG9uZW50IGltcGxlbWVudHMgRGVmYXVsdE1lbnVJdGVtLCBPbkNoYW5nZXMsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG4gICAgLyoqIFNldCB0aGUgTWVudSBJdGVtIGFzIGRpc2FibGVkL2VuYWJsZWQgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKiogTWVudSBJdGVtIGlkIGF0dHJpYnV0ZSB2YWx1ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgaXRlbUlkID0gYGZkLW1lbnUtaXRlbS0ke21lbnVVbmlxdWVJZCsrfWA7XG5cbiAgICAvKiogUmVmZXJlbmNlIHRvIHN1Yi1tZW51IGNvbXBvbmVudCAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3VibWVudTogQmFzZVN1Ym1lbnUgfCB1bmRlZmluZWQ7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSBtZW51IGl0ZW0gaXMgc2VsZWN0ZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtb24tcHJlZml4XG4gICAgb25TZWxlY3Q6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuIFJlZmVyZW5jZSB0byB0aGUgTWVudSBJdGVtIHRpdGxlICovXG4gICAgQENvbnRlbnRDaGlsZChNZW51VGl0bGVEaXJlY3RpdmUpXG4gICAgbWVudUl0ZW1UaXRsZTogTWVudVRpdGxlRGlyZWN0aXZlO1xuXG4gICAgLyoqIEBoaWRkZW4gUmVmZXJlbmNlIHRvIHRoZSBNZW51IEl0ZW0gaW50ZXJhY3RpdmUgZWxlbWVudCAqL1xuICAgIEBDb250ZW50Q2hpbGQoTWVudUludGVyYWN0aXZlRGlyZWN0aXZlKVxuICAgIG1lbnVJbnRlcmFjdGl2ZTogTWVudUludGVyYWN0aXZlRGlyZWN0aXZlO1xuXG4gICAgLyoqIEBoaWRkZW4gV2hldGhlciBzdWItbWVudSBpcyBjdXJyZW50bHkgdmlzaWJsZSovXG4gICAgc3VibWVudVZpc2libGUgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9ob3ZlclN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBwdWJsaWMgbWVudVNlcnZpY2U6IE1lbnVTZXJ2aWNlIHwgbnVsbCxcbiAgICAgICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFNVQk1FTlUpIHByaXZhdGUgX3N1Ym1lbnU6IEJhc2VTdWJtZW51IHwgbnVsbFxuICAgICkge31cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZXRNZW51U2VydmljZSgpO1xuICAgICAgICB0aGlzLl9pbml0aWFsaXNlSXRlbVN0YXRlKCk7XG4gICAgICAgIHRoaXMuX2xpc3Rlbk9uTWVudUxpbmtDbGljaygpO1xuICAgICAgICB0aGlzLl9saXN0ZW5Pbk91dGVyRm9jdXMoKTtcbiAgICAgICAgdGhpcy5fbGlzdGVuT25NZW51TW9kZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlc1snZGlzYWJsZWQnXSAmJiAhY2hhbmdlc1snZGlzYWJsZWQnXS5maXJzdENoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5tZW51SW50ZXJhY3RpdmUuc2V0RGlzYWJsZWQodGhpcy5kaXNhYmxlZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXNbJ3N1Ym1lbnUnXSAmJiAhY2hhbmdlc1snc3VibWVudSddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLm1lbnVJbnRlcmFjdGl2ZS5zZXRTdWJtZW51KCEhdGhpcy5zdWJtZW51LCB0aGlzLnN1Ym1lbnUgPyB0aGlzLml0ZW1JZCA6IHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX2hvdmVyU3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKiBXaGV0aGVyIG1lbnUgaXRlbSBoYXMgcG9wdXAgKGRlc2t0b3AgbW9kZSkgICovXG4gICAgZ2V0IGhhc1BvcHVwKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLnN1Ym1lbnUgJiYgKCF0aGlzLm1lbnVTZXJ2aWNlPy5tZW51IHx8ICF0aGlzLm1lbnVTZXJ2aWNlPy5tZW51Lm1vYmlsZSk7XG4gICAgfVxuXG4gICAgLyoqIEZvY3VzZXMgTWVudSBJdGVtIGludGVyYWN0aXZlIGVsZW1lbnQgKi9cbiAgICBmb2N1cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubWVudUludGVyYWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLm1lbnVJbnRlcmFjdGl2ZS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBDbGlja3MgTWVudSBJdGVtIGludGVyYWN0aXZlIGVsZW1lbnQgKi9cbiAgICBjbGljaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubWVudUludGVyYWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLm1lbnVJbnRlcmFjdGl2ZS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xpY2soKTtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gU2V0cyBtZW51IGl0ZW0gYXMgc2VsZWN0ZWQvdW5zZWxlY3RlZCBiYXNlZCBvbiBpc1NlbGVjdGVkIGZsYWcgKi9cbiAgICBzZXRTZWxlY3RlZChpc1NlbGVjdGVkOiBib29sZWFuLCBmcm9tU3BsaXQ/OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMubWVudUludGVyYWN0aXZlLnNldFNlbGVjdGVkKGlzU2VsZWN0ZWQpO1xuICAgICAgICB0aGlzLnN1Ym1lbnVWaXNpYmxlID0gaXNTZWxlY3RlZCAmJiAhIXRoaXMuc3VibWVudTtcbiAgICAgICAgaWYgKCFmcm9tU3BsaXQpIHtcbiAgICAgICAgICAgIHRoaXMub25TZWxlY3QuZW1pdCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIENyZWF0ZXMgY2xpY2sgbGlzdGVuZXIgb24gbWVudSBpdGVtIGludGVyYWN0aXZlIGVsZW1lbnQgKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Pbk1lbnVMaW5rQ2xpY2soKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgZnJvbUV2ZW50KHRoaXMubWVudUludGVyYWN0aXZlLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2NsaWNrJykuc3Vic2NyaWJlKCgpID0+XG4gICAgICAgICAgICAgICAgdGhpcy5tZW51U2VydmljZT8uc2V0QWN0aXZlKHRydWUsIHRoaXMpXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gQ3JlYXRlcyBob3ZlciBsaXN0ZW5lcnMgZm9yIGFjdGl2YXRpbmcvZGVhY3RpdmF0aW5nIG1lbnUgaXRlbSAqL1xuICAgIHByaXZhdGUgX2xpc3Rlbk9uTWVudUxpbmtIb3ZlcigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICBjb25zdCBob3ZlclN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgICAgICBjb25zdCBtb3VzZUVudGVyJDogT2JzZXJ2YWJsZTxNb3VzZUV2ZW50PiA9IGZyb21FdmVudChcbiAgICAgICAgICAgIHRoaXMubWVudUludGVyYWN0aXZlLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICdtb3VzZWVudGVyJ1xuICAgICAgICApO1xuICAgICAgICBjb25zdCBtb3VzZUxlYXZlJDogT2JzZXJ2YWJsZTxNb3VzZUV2ZW50PiA9IGZyb21FdmVudChcbiAgICAgICAgICAgIHRoaXMubWVudUludGVyYWN0aXZlLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgICdtb3VzZWxlYXZlJ1xuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IHRpbWVyRmFjdG9yeSQgPSBkZWZlcigoKSA9PlxuICAgICAgICAgICAgdGltZXIodGhpcy5tZW51U2VydmljZSA/IHRoaXMubWVudVNlcnZpY2UubWVudS5vcGVuT25Ib3ZlclRpbWUgOiAwKS5waXBlKHRha2VVbnRpbChtb3VzZUxlYXZlJCkpXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gU2V0IGFjdGl2ZSBvbiBob3ZlclxuICAgICAgICBob3ZlclN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgbW91c2VFbnRlciRcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+ICEhdGhpcy5tZW51U2VydmljZSksXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aW1lckZhY3RvcnkkKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3VibWVudSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3BlbiBzdWJtZW51XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lbnVTZXJ2aWNlIS5zZXRBY3RpdmUodHJ1ZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnN1Ym1lbnUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENsb3NlIHNpYmxpbmcgc3VibWVudSBpZiBvcGVuZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVudVNlcnZpY2UhLnNldEluYWN0aXZlU2libGluZ01lbnVJdGVtKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gaG92ZXJTdWJzY3JpcHRpb25zO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIEluaXRpYWxpemVzIG1lbnUgbGluayBzdGF0ZSBiYXNlZCBvbiBpdGVtIGluaXRpYWwgc3RhdGUgKi9cbiAgICBwcml2YXRlIF9pbml0aWFsaXNlSXRlbVN0YXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm1lbnVJbnRlcmFjdGl2ZS5zZXRTdWJtZW51KCEhdGhpcy5zdWJtZW51LCB0aGlzLml0ZW1JZCk7XG4gICAgICAgIHRoaXMubWVudUludGVyYWN0aXZlLnNldERpc2FibGVkKHRoaXMuZGlzYWJsZWQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIENoZWNrcyBmb3IgTWVudSBTZXJ2aWNlIGRlcGVuZGVuY3kgYW5kIHBhc3NlcyBpdCBpZiBmdXJ0aGVyICovXG4gICAgcHJpdmF0ZSBfc2V0TWVudVNlcnZpY2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubWVudVNlcnZpY2UgPSB0aGlzLm1lbnVTZXJ2aWNlIHx8IHRoaXMuX3N1Ym1lbnU/Lm1lbnVTZXJ2aWNlIHx8IG51bGw7XG4gICAgICAgIGlmICh0aGlzLnN1Ym1lbnUgJiYgdGhpcy5tZW51U2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5zdWJtZW51Lm1lbnVTZXJ2aWNlID0gdGhpcy5tZW51U2VydmljZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIExpc3RlbiBvbiBtZW51IG1vZGUgYW5kIHNldCBwcm9wZXIgbW9kZSBsaXN0ZW5lcnMgKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Pbk1lbnVNb2RlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm1lbnVTZXJ2aWNlPy5pc01vYmlsZU1vZGUuc3Vic2NyaWJlKChpc01vYmlsZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5faG92ZXJTdWJzY3JpcHRpb25zLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICBpZiAoIWlzTW9iaWxlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5faG92ZXJTdWJzY3JpcHRpb25zID0gdGhpcy5fbGlzdGVuT25NZW51TGlua0hvdmVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFVwZGF0ZXMgZm9jdXNlZCBtZW51IGl0ZW0gb24gb3V0ZXIgZm9jdXMgKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Pbk91dGVyRm9jdXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgICAgICAgZnJvbUV2ZW50KHRoaXMubWVudUludGVyYWN0aXZlLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2ZvY3VzJykuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tZW51U2VydmljZSAmJiB0aGlzLm1lbnVTZXJ2aWNlLmZvY3VzZWROb2RlICE9PSB0aGlzLm1lbnVTZXJ2aWNlLm1lbnVNYXAuZ2V0KHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWVudVNlcnZpY2Uuc2V0Rm9jdXNlZCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1zdWJtZW51JyxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgYCxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogU1VCTUVOVSwgdXNlRXhpc3Rpbmc6IFN1Ym1lbnVDb21wb25lbnQgfV0sXG4gICAgZXhwb3J0QXM6ICdmZFN1Ym1lbnUnXG59KVxuZXhwb3J0IGNsYXNzIFN1Ym1lbnVDb21wb25lbnQgaW1wbGVtZW50cyBCYXNlU3VibWVudSB7XG4gICAgLyoqIEFyaWEtbGFiZWwgZm9yIG5hdmlnYXRpb24gKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFMYWJlbDogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKiBBcmlhLUxhYmVsbGVkYnkgZm9yIGVsZW1lbnQgZGVzY3JpYmluZyBuYXZpZ2F0aW9uICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWxsZWRieTogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKiBAaGlkZGVuIFJlZmVyZW5jZSB0byB0ZW1wbGF0ZSB3aXRoIFN1Ym1lbnUgaXRlbXMgICovXG4gICAgQFZpZXdDaGlsZChUZW1wbGF0ZVJlZikgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiBSZWZlcmVuY2UgdG8gU3VibWVudSBNZW51SXRlbXMgICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihNZW51SXRlbUNvbXBvbmVudCkgbWVudUl0ZW1zOiBRdWVyeUxpc3Q8TWVudUl0ZW1Db21wb25lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gUmVmZXJlbmNlIHRvIE1lbnVTZXJ2aWNlIHVzZWQgYnkgTWVudUl0ZW1zICovXG4gICAgbWVudVNlcnZpY2U6IE1lbnVTZXJ2aWNlO1xufVxuIiwiPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiaGFzUG9wdXAgJiYgc3VibWVudVwiPlxuICAgIDx1bFxuICAgICAgICBjbGFzcz1cImZkLW1lbnVfX3N1Ymxpc3RcIlxuICAgICAgICByb2xlPVwibWVudVwiXG4gICAgICAgIFthdHRyLmlkXT1cIml0ZW1JZFwiXG4gICAgICAgIFthdHRyLmFyaWEtaGlkZGVuXT1cIiFzdWJtZW51VmlzaWJsZVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwic3VibWVudS5hcmlhTGFiZWxcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwic3VibWVudS5hcmlhTGFiZWxsZWRieVwiXG4gICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic3VibWVudS50ZW1wbGF0ZVJlZlwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvdWw+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
236
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL21lbnUvbWVudS1pdGVtL21lbnUtaXRlbS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9tZW51L21lbnUtaXRlbS9tZW51LWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sY0FBYyxFQUNkLEtBQUssRUFJTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFFVCxXQUFXLEVBQ1gsU0FBUyxFQUNULGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBYyxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRixPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUV4RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7OztBQUlwRixJQUFJLFlBQVksR0FBRyxDQUFDLENBQUM7QUFhckIsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLElBQUksY0FBYyxDQUFjLDhCQUE4QixDQUFDLENBQUM7QUFjdkYsTUFBTSxPQUFPLGlCQUFpQjtJQXVDMUIsY0FBYztJQUNkLFlBQ1csVUFBc0IsRUFDVixXQUErQixFQUMxQyxrQkFBcUMsRUFDUixRQUE0QjtRQUgxRCxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ1YsZ0JB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LENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2xDLENBQUM7OzZHQTdDUSxnQkFBZ0I7aUdBQWhCLGdCQUFnQiwyR0FIZCxDQUFDLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQywwREFnQi9DLGlCQUFpQiwwRUFIdkIsV0FBVyx5RUFwQlo7Ozs7S0FJVDsyRkFNUSxnQkFBZ0I7a0JBWjVCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLFlBQVk7b0JBQ3RCLFFBQVEsRUFBRTs7OztLQUlUO29CQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTtvQkFDckMsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsa0JBQWtCLEVBQUUsQ0FBQztvQkFDaEUsUUFBUSxFQUFFLFdBQVc7aUJBQ3hCOzhCQUlHLFNBQVM7c0JBRFIsS0FBSztnQkFLTixjQUFjO3NCQURiLEtBQUs7Z0JBSWtCLFdBQVc7c0JBQWxDLFNBQVM7dUJBQUMsV0FBVztnQkFJdEIsZUFBZTtzQkFEZCxlQUFlO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3QsXG4gICAgSW5qZWN0aW9uVG9rZW4sXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGRlZmVyLCBmcm9tRXZlbnQsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IE1lbnVUaXRsZURpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvbWVudS10aXRsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRGVmYXVsdE1lbnVJdGVtIH0gZnJvbSAnLi4vZGVmYXVsdC1tZW51LWl0ZW0uY2xhc3MnO1xuaW1wb3J0IHsgTWVudUludGVyYWN0aXZlRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9tZW51LWludGVyYWN0aXZlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBNZW51U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL21lbnUuc2VydmljZSc7XG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9zaGFyZWQnO1xuXG5sZXQgbWVudVVuaXF1ZUlkID0gMDtcblxuZXhwb3J0IGludGVyZmFjZSBCYXNlU3VibWVudSB7XG4gICAgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgbWVudUl0ZW1zOiBNZW51SXRlbUNvbXBvbmVudFtdO1xuICAgIG1lbnVTZXJ2aWNlOiBNZW51U2VydmljZTtcbiAgICBhcmlhTGFiZWw6IE51bGxhYmxlPHN0cmluZz47XG4gICAgYXJpYUxhYmVsbGVkYnk6IE51bGxhYmxlPHN0cmluZz47XG4gICAgX21lbnVJdGVtc0NoYW5nZSQ6IE9ic2VydmFibGU8dm9pZD47XG4gICAgX3JlZ2lzdGVySXRlbShpdGVtOiBNZW51SXRlbUNvbXBvbmVudCk6IHZvaWQ7XG4gICAgX3VucmVnaXN0ZXJJdGVtKGl0ZW06IE1lbnVJdGVtQ29tcG9uZW50KTogdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IFNVQk1FTlUgPSBuZXcgSW5qZWN0aW9uVG9rZW48QmFzZVN1Ym1lbnU+KCdTdWJtZW51IGNvbXBvbmVudCBkZXBlbmRlbmN5Jyk7XG5cbkBDb21wb25lbnQoe1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvY29tcG9uZW50LXNlbGVjdG9yXG4gICAgc2VsZWN0b3I6ICdsaVtmZC1tZW51LWl0ZW1dJyxcbiAgICBleHBvcnRBczogJ2ZkLW1lbnUtaXRlbScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL21lbnUtaXRlbS5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBob3N0OiB7XG4gICAgICAgICdhdHRyLnJvbGUnOiAnbWVudWl0ZW0nLFxuICAgICAgICAnW2NsYXNzLmZkLW1lbnVfX2l0ZW1dJzogJ3RydWUnXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBNZW51SXRlbUNvbXBvbmVudCBpbXBsZW1lbnRzIERlZmF1bHRNZW51SXRlbSwgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XG4gICAgLyoqIFNldCB0aGUgTWVudSBJdGVtIGFzIGRpc2FibGVkL2VuYWJsZWQgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVkID0gZmFsc2U7XG5cbiAgICAvKiogTWVudSBJdGVtIGlkIGF0dHJpYnV0ZSB2YWx1ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgaXRlbUlkID0gYGZkLW1lbnUtaXRlbS0ke21lbnVVbmlxdWVJZCsrfWA7XG5cbiAgICAvKiogUmVmZXJlbmNlIHRvIHN1Yi1tZW51IGNvbXBvbmVudCAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3VibWVudTogQmFzZVN1Ym1lbnUgfCB1bmRlZmluZWQ7XG5cbiAgICAvKiogUmVmZXJlbmNlIHRvIHRoZSBwYXJlbnQgc3VibWVudSBpZiBuZXN0ZWQgbWVudXMgY3JlYXRlZCBkeW5hbWljYWxseSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGFyZW50U3VibWVudTogQmFzZVN1Ym1lbnUgfCB1bmRlZmluZWQ7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSBtZW51IGl0ZW0gaXMgc2VsZWN0ZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1vdXRwdXQtb24tcHJlZml4XG4gICAgb25TZWxlY3Q6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuIFJlZmVyZW5jZSB0byB0aGUgTWVudSBJdGVtIHRpdGxlICovXG4gICAgQENvbnRlbnRDaGlsZChNZW51VGl0bGVEaXJlY3RpdmUpXG4gICAgbWVudUl0ZW1UaXRsZTogTWVudVRpdGxlRGlyZWN0aXZlO1xuXG4gICAgLyoqIEBoaWRkZW4gUmVmZXJlbmNlIHRvIHRoZSBNZW51IEl0ZW0gaW50ZXJhY3RpdmUgZWxlbWVudCAqL1xuICAgIEBDb250ZW50Q2hpbGQoTWVudUludGVyYWN0aXZlRGlyZWN0aXZlKVxuICAgIG1lbnVJbnRlcmFjdGl2ZTogTWVudUludGVyYWN0aXZlRGlyZWN0aXZlO1xuXG4gICAgLyoqIEBoaWRkZW4gV2hldGhlciBzdWItbWVudSBpcyBjdXJyZW50bHkgdmlzaWJsZSovXG4gICAgc3VibWVudVZpc2libGUgPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9ob3ZlclN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBwdWJsaWMgbWVudVNlcnZpY2U6IE1lbnVTZXJ2aWNlIHwgbnVsbCxcbiAgICAgICAgcHJpdmF0ZSBfY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KFNVQk1FTlUpIHByaXZhdGUgX3N1Ym1lbnU6IEJhc2VTdWJtZW51IHwgbnVsbFxuICAgICkge31cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnBhcmVudFN1Ym1lbnUpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1Ym1lbnUgPSB0aGlzLnBhcmVudFN1Ym1lbnU7XG4gICAgICAgICAgICB0aGlzLl9zdWJtZW51Ll9yZWdpc3Rlckl0ZW0odGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2V0TWVudVNlcnZpY2UoKTtcbiAgICAgICAgdGhpcy5faW5pdGlhbGlzZUl0ZW1TdGF0ZSgpO1xuICAgICAgICB0aGlzLl9saXN0ZW5Pbk1lbnVMaW5rQ2xpY2soKTtcbiAgICAgICAgdGhpcy5fbGlzdGVuT25PdXRlckZvY3VzKCk7XG4gICAgICAgIHRoaXMuX2xpc3Rlbk9uTWVudU1vZGUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ2Rpc2FibGVkJ10gJiYgIWNoYW5nZXNbJ2Rpc2FibGVkJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMubWVudUludGVyYWN0aXZlLnNldERpc2FibGVkKHRoaXMuZGlzYWJsZWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzWydzdWJtZW51J10gJiYgIWNoYW5nZXNbJ3N1Ym1lbnUnXS5maXJzdENoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5tZW51SW50ZXJhY3RpdmUuc2V0U3VibWVudSghIXRoaXMuc3VibWVudSwgdGhpcy5zdWJtZW51ID8gdGhpcy5pdGVtSWQgOiB1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50U3VibWVudSkge1xuICAgICAgICAgICAgdGhpcy5fc3VibWVudT8uX3VucmVnaXN0ZXJJdGVtKHRoaXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fc3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLl9ob3ZlclN1YnNjcmlwdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogV2hldGhlciBtZW51IGl0ZW0gaGFzIHBvcHVwIChkZXNrdG9wIG1vZGUpICAqL1xuICAgIGdldCBoYXNQb3B1cCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5zdWJtZW51ICYmICghdGhpcy5tZW51U2VydmljZT8ubWVudUNvbXBvbmVudCB8fCAhdGhpcy5tZW51U2VydmljZT8ubWVudUNvbXBvbmVudC5tb2JpbGUpO1xuICAgIH1cblxuICAgIC8qKiBGb2N1c2VzIE1lbnUgSXRlbSBpbnRlcmFjdGl2ZSBlbGVtZW50ICovXG4gICAgZm9jdXMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm1lbnVJbnRlcmFjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5tZW51SW50ZXJhY3RpdmUuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQ2xpY2tzIE1lbnUgSXRlbSBpbnRlcmFjdGl2ZSBlbGVtZW50ICovXG4gICAgY2xpY2soKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm1lbnVJbnRlcmFjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5tZW51SW50ZXJhY3RpdmUuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFNldHMgbWVudSBpdGVtIGFzIHNlbGVjdGVkL3Vuc2VsZWN0ZWQgYmFzZWQgb24gaXNTZWxlY3RlZCBmbGFnICovXG4gICAgc2V0U2VsZWN0ZWQoaXNTZWxlY3RlZDogYm9vbGVhbiwgZnJvbVNwbGl0PzogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLm1lbnVJbnRlcmFjdGl2ZS5zZXRTZWxlY3RlZChpc1NlbGVjdGVkKTtcbiAgICAgICAgdGhpcy5zdWJtZW51VmlzaWJsZSA9IGlzU2VsZWN0ZWQgJiYgISF0aGlzLnN1Ym1lbnU7XG4gICAgICAgIGlmICghZnJvbVNwbGl0KSB7XG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0LmVtaXQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBDcmVhdGVzIGNsaWNrIGxpc3RlbmVyIG9uIG1lbnUgaXRlbSBpbnRlcmFjdGl2ZSBlbGVtZW50ICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuT25NZW51TGlua0NsaWNrKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIGZyb21FdmVudCh0aGlzLm1lbnVJbnRlcmFjdGl2ZS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdjbGljaycpLnN1YnNjcmliZSgoKSA9PlxuICAgICAgICAgICAgICAgIHRoaXMubWVudVNlcnZpY2U/LnNldEFjdGl2ZSh0cnVlLCB0aGlzKVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIENyZWF0ZXMgaG92ZXIgbGlzdGVuZXJzIGZvciBhY3RpdmF0aW5nL2RlYWN0aXZhdGluZyBtZW51IGl0ZW0gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Pbk1lbnVMaW5rSG92ZXIoKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgY29uc3QgaG92ZXJTdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAgICAgY29uc3QgbW91c2VFbnRlciQ6IE9ic2VydmFibGU8TW91c2VFdmVudD4gPSBmcm9tRXZlbnQoXG4gICAgICAgICAgICB0aGlzLm1lbnVJbnRlcmFjdGl2ZS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAnbW91c2VlbnRlcidcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgbW91c2VMZWF2ZSQ6IE9ic2VydmFibGU8TW91c2VFdmVudD4gPSBmcm9tRXZlbnQoXG4gICAgICAgICAgICB0aGlzLm1lbnVJbnRlcmFjdGl2ZS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAnbW91c2VsZWF2ZSdcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCB0aW1lckZhY3RvcnkkID0gZGVmZXIoKCkgPT5cbiAgICAgICAgICAgIHRpbWVyKHRoaXMubWVudVNlcnZpY2UgPyB0aGlzLm1lbnVTZXJ2aWNlLm1lbnVDb21wb25lbnQub3Blbk9uSG92ZXJUaW1lIDogMCkucGlwZSh0YWtlVW50aWwobW91c2VMZWF2ZSQpKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIFNldCBhY3RpdmUgb24gaG92ZXJcbiAgICAgICAgaG92ZXJTdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIG1vdXNlRW50ZXIkXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiAhIXRoaXMubWVudVNlcnZpY2UpLFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGltZXJGYWN0b3J5JClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN1Ym1lbnUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9wZW4gc3VibWVudVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZW51U2VydmljZSEuc2V0QWN0aXZlKHRydWUsIHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zdWJtZW51KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDbG9zZSBzaWJsaW5nIHN1Ym1lbnUgaWYgb3BlbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lbnVTZXJ2aWNlIS5zZXRJbmFjdGl2ZVNpYmxpbmdNZW51SXRlbSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIGhvdmVyU3Vic2NyaXB0aW9ucztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBJbml0aWFsaXplcyBtZW51IGxpbmsgc3RhdGUgYmFzZWQgb24gaXRlbSBpbml0aWFsIHN0YXRlICovXG4gICAgcHJpdmF0ZSBfaW5pdGlhbGlzZUl0ZW1TdGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tZW51SW50ZXJhY3RpdmUuc2V0U3VibWVudSghIXRoaXMuc3VibWVudSwgdGhpcy5pdGVtSWQpO1xuICAgICAgICB0aGlzLm1lbnVJbnRlcmFjdGl2ZS5zZXREaXNhYmxlZCh0aGlzLmRpc2FibGVkKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBDaGVja3MgZm9yIE1lbnUgU2VydmljZSBkZXBlbmRlbmN5IGFuZCBwYXNzZXMgaXQgaWYgZnVydGhlciAqL1xuICAgIHByaXZhdGUgX3NldE1lbnVTZXJ2aWNlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm1lbnVTZXJ2aWNlID0gdGhpcy5tZW51U2VydmljZSB8fCB0aGlzLl9zdWJtZW51Py5tZW51U2VydmljZSB8fCBudWxsO1xuICAgICAgICBpZiAodGhpcy5zdWJtZW51ICYmIHRoaXMubWVudVNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuc3VibWVudS5tZW51U2VydmljZSA9IHRoaXMubWVudVNlcnZpY2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBMaXN0ZW4gb24gbWVudSBtb2RlIGFuZCBzZXQgcHJvcGVyIG1vZGUgbGlzdGVuZXJzICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuT25NZW51TW9kZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tZW51U2VydmljZT8uaXNNb2JpbGVNb2RlLnN1YnNjcmliZSgoaXNNb2JpbGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2hvdmVyU3Vic2NyaXB0aW9ucy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgaWYgKCFpc01vYmlsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2hvdmVyU3Vic2NyaXB0aW9ucyA9IHRoaXMuX2xpc3Rlbk9uTWVudUxpbmtIb3ZlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBVcGRhdGVzIGZvY3VzZWQgbWVudSBpdGVtIG9uIG91dGVyIGZvY3VzICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuT25PdXRlckZvY3VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgICAgICAgIGZyb21FdmVudCh0aGlzLm1lbnVJbnRlcmFjdGl2ZS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdmb2N1cycpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubWVudVNlcnZpY2UgJiYgdGhpcy5tZW51U2VydmljZS5mb2N1c2VkTm9kZSAhPT0gdGhpcy5tZW51U2VydmljZS5tZW51TWFwLmdldCh0aGlzKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1lbnVTZXJ2aWNlLnNldEZvY3VzZWQodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG59XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtc3VibWVudScsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIGAsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IFNVQk1FTlUsIHVzZUV4aXN0aW5nOiBTdWJtZW51Q29tcG9uZW50IH1dLFxuICAgIGV4cG9ydEFzOiAnZmRTdWJtZW51J1xufSlcbmV4cG9ydCBjbGFzcyBTdWJtZW51Q29tcG9uZW50IGltcGxlbWVudHMgQmFzZVN1Ym1lbnUsIEFmdGVyQ29udGVudEluaXQge1xuICAgIC8qKiBBcmlhLWxhYmVsIGZvciBuYXZpZ2F0aW9uICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWw6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKiogQXJpYS1MYWJlbGxlZGJ5IGZvciBlbGVtZW50IGRlc2NyaWJpbmcgbmF2aWdhdGlvbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYUxhYmVsbGVkYnk6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKiogQGhpZGRlbiBSZWZlcmVuY2UgdG8gdGVtcGxhdGUgd2l0aCBTdWJtZW51IGl0ZW1zICAqL1xuICAgIEBWaWV3Q2hpbGQoVGVtcGxhdGVSZWYpIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEBoaWRkZW4gUmVmZXJlbmNlIHRvIFN1Ym1lbnUgTWVudUl0ZW1zICAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oTWVudUl0ZW1Db21wb25lbnQpXG4gICAgX3Byb2plY3RlZEl0ZW1zOiBRdWVyeUxpc3Q8TWVudUl0ZW1Db21wb25lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfcmVnaXN0ZXJlZEl0ZW1zOiBNZW51SXRlbUNvbXBvbmVudFtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiBSZWZlcmVuY2UgdG8gTWVudVNlcnZpY2UgdXNlZCBieSBNZW51SXRlbXMgKi9cbiAgICBtZW51U2VydmljZTogTWVudVNlcnZpY2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9tZW51SXRlbXNDaGFuZ2UkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgZ2V0IG1lbnVJdGVtcygpOiBNZW51SXRlbUNvbXBvbmVudFtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2plY3RlZEl0ZW1zLmxlbmd0aCA/IHRoaXMuX3Byb2plY3RlZEl0ZW1zLnRvQXJyYXkoKSA6IHRoaXMuX3JlZ2lzdGVyZWRJdGVtcztcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcHJvamVjdGVkSXRlbXMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fbWVudUl0ZW1zQ2hhbmdlJC5uZXh0KCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIG1ldGhvZCBmb3IgbWFudWFsbHkgcmVnaXN0ZXJpbmcgaXRlbSB3aGVuIGl0J3Mgbm90IHZpc2libGUgZm9yIEBDb250ZW50Q2hpbGRyZW4gKi9cbiAgICBfcmVnaXN0ZXJJdGVtKGl0ZW06IE1lbnVJdGVtQ29tcG9uZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JlZ2lzdGVyZWRJdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgICB0aGlzLl9tZW51SXRlbXNDaGFuZ2UkLm5leHQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBtZXRob2QgZm9yIG1hbnVhbGx5IHVucmVnaXN0ZXJpbmcgaXRlbSB3aGVuIGl0J3Mgbm90IHZpc2libGUgZm9yIEBDb250ZW50Q2hpbGRyZW4gKi9cbiAgICBfdW5yZWdpc3Rlckl0ZW0oaXRlbTogTWVudUl0ZW1Db21wb25lbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVnaXN0ZXJlZEl0ZW1zID0gdGhpcy5fcmVnaXN0ZXJlZEl0ZW1zLmZpbHRlcigoaSkgPT4gaSAhPT0gaXRlbSk7XG4gICAgICAgIHRoaXMuX21lbnVJdGVtc0NoYW5nZSQubmV4dCgpO1xuICAgIH1cbn1cbiIsIjxuZy1jb250ZW50PjwvbmctY29udGVudD5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc1BvcHVwICYmIHN1Ym1lbnVcIj5cbiAgICA8dWxcbiAgICAgICAgY2xhc3M9XCJmZC1tZW51X19zdWJsaXN0XCJcbiAgICAgICAgcm9sZT1cIm1lbnVcIlxuICAgICAgICBbYXR0ci5pZF09XCJpdGVtSWRcIlxuICAgICAgICBbYXR0ci5hcmlhLWhpZGRlbl09XCIhc3VibWVudVZpc2libGVcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInN1Ym1lbnUuYXJpYUxhYmVsXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cInN1Ym1lbnUuYXJpYUxhYmVsbGVkYnlcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN1Ym1lbnUudGVtcGxhdGVSZWZcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L3VsPlxuPC9uZy1jb250YWluZXI+XG4iXX0=