@elderbyte/ngx-starter 14.5.3 → 14.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (317) hide show
  1. package/esm2020/lib/common/data/data-context/data-context-active-page.mjs +1 -1
  2. package/esm2020/lib/common/data/data-context/data-context-base.mjs +2 -2
  3. package/esm2020/lib/common/data/data-context/data-context-continuable-base.mjs +1 -1
  4. package/esm2020/lib/common/data/data-context/data-context.mjs +1 -1
  5. package/esm2020/lib/common/data/datasource/data-source-adapter.mjs +1 -1
  6. package/esm2020/lib/common/data/datasource/data-source-processor.mjs +1 -1
  7. package/esm2020/lib/common/data/datasource/data-source.mjs +1 -1
  8. package/esm2020/lib/common/data/datasource/fetcher/delegate-data-source.mjs +1 -1
  9. package/esm2020/lib/common/data/datasource/local/local-list-data-source.mjs +1 -1
  10. package/esm2020/lib/common/data/datasource/local/local-paged-data-source.mjs +1 -1
  11. package/esm2020/lib/common/data/datasource/rest/rest-client.mjs +2 -2
  12. package/esm2020/lib/common/data/filters/filter-context.mjs +141 -0
  13. package/esm2020/lib/common/data/filters/filter.mjs +109 -0
  14. package/esm2020/lib/common/data/http-params-builder.mjs +2 -2
  15. package/esm2020/lib/common/data/public_api.mjs +3 -3
  16. package/esm2020/lib/common/data/required-filter-evaluator.mjs +1 -1
  17. package/esm2020/lib/common/data/token-chunk-request.mjs +1 -1
  18. package/esm2020/lib/common/enums/elder-enum-translation.service.mjs +3 -3
  19. package/esm2020/lib/common/forms/elder-form-field-control-base.directive.mjs +3 -3
  20. package/esm2020/lib/common/forms/elder-from-field-base.mjs +3 -3
  21. package/esm2020/lib/common/forms/elder-from-field-entity-base.mjs +3 -3
  22. package/esm2020/lib/common/forms/elder-from-field-multi-entity-base.mjs +3 -3
  23. package/esm2020/lib/common/forms/form-field-base.component.mjs +3 -3
  24. package/esm2020/lib/common/forms/multi-model-base.component.mjs +3 -3
  25. package/esm2020/lib/common/forms/template-composite-control.mjs +3 -3
  26. package/esm2020/lib/common/forms/value-accessor-base.mjs +3 -3
  27. package/esm2020/lib/common/http/http-client-builder.service.mjs +3 -3
  28. package/esm2020/lib/common/http/http-client-pristine.mjs +3 -3
  29. package/esm2020/lib/common/http/transfer/data-transfer-factory.mjs +3 -3
  30. package/esm2020/lib/common/url/elder-url-fragment-params.service.mjs +3 -3
  31. package/esm2020/lib/common/utils/filter-util.mjs +1 -1
  32. package/esm2020/lib/components/access-denied/elder-access-denied.component.mjs +3 -3
  33. package/esm2020/lib/components/access-denied/elder-access-denied.module.mjs +4 -4
  34. package/esm2020/lib/components/auditing/audited-entity/elder-audited-entity.component.mjs +8 -5
  35. package/esm2020/lib/components/auditing/elder-audit.module.mjs +4 -4
  36. package/esm2020/lib/components/button-group/elder-button-group/elder-button-group.component.mjs +3 -3
  37. package/esm2020/lib/components/button-group/elder-button-group.module.mjs +4 -4
  38. package/esm2020/lib/components/card-organizer/card-organizer/elder-card-organizer.component.mjs +3 -3
  39. package/esm2020/lib/components/card-organizer/card-organizer/elder-stack-card.directive.mjs +3 -3
  40. package/esm2020/lib/components/card-organizer/card-stack/elder-card-stack.component.mjs +3 -3
  41. package/esm2020/lib/components/card-organizer/elder-card-organizer.module.mjs +4 -4
  42. package/esm2020/lib/components/cards/elder-card/elder-card-header/elder-card-header.component.mjs +3 -3
  43. package/esm2020/lib/components/cards/elder-card/elder-card.component.mjs +18 -18
  44. package/esm2020/lib/components/cards/elder-card/elder-card.module.mjs +4 -4
  45. package/esm2020/lib/components/connectivity/elder-connectivity.module.mjs +4 -4
  46. package/esm2020/lib/components/connectivity/elder-connectivity.service.mjs +3 -3
  47. package/esm2020/lib/components/connectivity/offline-indicator/elder-offline-indicator.component.mjs +3 -3
  48. package/esm2020/lib/components/containers/elder-containers.module.mjs +4 -4
  49. package/esm2020/lib/components/containers/elder-scroll-container/elder-scroll-container.component.mjs +3 -3
  50. package/esm2020/lib/components/csv/elder-csv-export-btn/elder-csv-export-btn.component.mjs +4 -4
  51. package/esm2020/lib/components/csv/elder-csv-stream-exporter-builder.service.mjs +3 -3
  52. package/esm2020/lib/components/csv/elder-csv-stream-exporter.mjs +1 -1
  53. package/esm2020/lib/components/csv/elder-csv.module.mjs +4 -4
  54. package/esm2020/lib/components/currency/elder-currency.module.mjs +4 -4
  55. package/esm2020/lib/components/currency/elder-currency.pipe.mjs +3 -3
  56. package/esm2020/lib/components/data-transfer/elder-data-transfer.module.mjs +4 -4
  57. package/esm2020/lib/components/data-transfer/elder-data-transfer.service.mjs +3 -3
  58. package/esm2020/lib/components/data-transfer/http-data-transfer/http-data-transfer.component.mjs +3 -3
  59. package/esm2020/lib/components/data-transfer/http-data-transfer-aggregate/http-data-transfer-aggregate.component.mjs +3 -3
  60. package/esm2020/lib/components/data-transfer/http-data-transfer-indicator/http-data-transfer-indicator.component.mjs +3 -3
  61. package/esm2020/lib/components/data-transfer/http-data-transfer-overview/http-data-transfer-overview.component.mjs +3 -3
  62. package/esm2020/lib/components/data-view/base/elder-data-view-base.mjs +3 -3
  63. package/esm2020/lib/components/data-view/base/elder-data-view-options.mjs +1 -1
  64. package/esm2020/lib/components/data-view/common/data-context-state-indicator/data-context-state-indicator.component.mjs +3 -3
  65. package/esm2020/lib/components/data-view/common/elder-data-common.module.mjs +4 -4
  66. package/esm2020/lib/components/data-view/common/elder-data-toolbar/elder-data-toolbar.component.mjs +6 -6
  67. package/esm2020/lib/components/data-view/common/elder-single-sort/elder-single-sort.component.mjs +3 -3
  68. package/esm2020/lib/components/data-view/common/selection/data-context-selection.directive.mjs +3 -3
  69. package/esm2020/lib/components/data-view/common/selection/elder-selection-master-checkbox/elder-selection-master-checkbox.component.mjs +3 -3
  70. package/esm2020/lib/components/data-view/grid/elder-grid/elder-grid.component.mjs +9 -9
  71. package/esm2020/lib/components/data-view/grid/elder-grid.module.mjs +4 -4
  72. package/esm2020/lib/components/data-view/simple/elder-simple-selection-view/elder-simple-selection-view.component.mjs +3 -3
  73. package/esm2020/lib/components/data-view/simple/elder-simple-selection-view/elder-simple-selection-view.module.mjs +4 -4
  74. package/esm2020/lib/components/data-view/table/activation/elder-table-activation.directive.mjs +3 -3
  75. package/esm2020/lib/components/data-view/table/elder-number-cell.directive.mjs +3 -3
  76. package/esm2020/lib/components/data-view/table/elder-paginator-intl.mjs +3 -3
  77. package/esm2020/lib/components/data-view/table/elder-table/elder-table-toolbar.directive.mjs +3 -3
  78. package/esm2020/lib/components/data-view/table/elder-table/elder-table.component.mjs +3 -3
  79. package/esm2020/lib/components/data-view/table/elder-table-column.directive.mjs +3 -3
  80. package/esm2020/lib/components/data-view/table/elder-table-extension.directive.mjs +3 -3
  81. package/esm2020/lib/components/data-view/table/elder-table-root.directive.mjs +3 -3
  82. package/esm2020/lib/components/data-view/table/elder-table-row.directive.mjs +3 -3
  83. package/esm2020/lib/components/data-view/table/elder-table-sort.directive.mjs +3 -3
  84. package/esm2020/lib/components/data-view/table/elder-table.module.mjs +4 -4
  85. package/esm2020/lib/components/data-view/table/model/elder-table-model.mjs +3 -3
  86. package/esm2020/lib/components/dialogs/confirm-dialog/elder-confirm-dialog.component.mjs +3 -3
  87. package/esm2020/lib/components/dialogs/elder-dialog.module.mjs +7 -7
  88. package/esm2020/lib/components/dialogs/elder-dialog.service.mjs +3 -3
  89. package/esm2020/lib/components/dialogs/question-dialog/elder-question-dialog.component.mjs +3 -3
  90. package/esm2020/lib/components/dialogs/selection-dialog/elder-selection-dialog/elder-selection-dialog.component.mjs +3 -3
  91. package/esm2020/lib/components/dialogs/selection-dialog/elder-selection-dialog.directive.mjs +3 -3
  92. package/esm2020/lib/components/errors/elder-error.module.mjs +4 -4
  93. package/esm2020/lib/components/errors/exception-detail/elder-exception-detail.component.mjs +3 -3
  94. package/esm2020/lib/components/expand-toggle-button/elder-expand-toggle-button.component.mjs +3 -3
  95. package/esm2020/lib/components/expand-toggle-button/elder-expand-toggle-button.module.mjs +4 -4
  96. package/esm2020/lib/components/files/blob-viewer/elder-blob-viewer.component.mjs +3 -3
  97. package/esm2020/lib/components/files/elder-file-drop-zone.directive.mjs +3 -3
  98. package/esm2020/lib/components/files/elder-file-select.directive.mjs +3 -3
  99. package/esm2020/lib/components/files/elder-file.module.mjs +4 -4
  100. package/esm2020/lib/components/files/file-select/file-select.component.mjs +3 -3
  101. package/esm2020/lib/components/files/file-upload/file-upload.component.mjs +3 -3
  102. package/esm2020/lib/components/forms/clipboard/elder-clipboard.service.mjs +3 -3
  103. package/esm2020/lib/components/forms/directives/base/elder-class-hostbinding-base.mjs +3 -3
  104. package/esm2020/lib/components/forms/directives/elder-clipboard-put.directive.mjs +3 -3
  105. package/esm2020/lib/components/forms/directives/elder-delayed-focus.directive.mjs +3 -3
  106. package/esm2020/lib/components/forms/directives/elder-form-field-dense.directive.mjs +3 -3
  107. package/esm2020/lib/components/forms/directives/elder-form-field-label.directive.mjs +3 -3
  108. package/esm2020/lib/components/forms/directives/elder-form-field-no-hint.directive.mjs +3 -3
  109. package/esm2020/lib/components/forms/directives/elder-form-field-no-spinner.directive.mjs +3 -3
  110. package/esm2020/lib/components/forms/directives/elder-forms-directives.module.mjs +13 -13
  111. package/esm2020/lib/components/forms/directives/elder-input-pattern.directive.mjs +3 -3
  112. package/esm2020/lib/components/forms/directives/elder-key-event.directive.mjs +3 -3
  113. package/esm2020/lib/components/forms/directives/elder-max.directive.mjs +3 -3
  114. package/esm2020/lib/components/forms/directives/elder-min.directive.mjs +3 -3
  115. package/esm2020/lib/components/forms/directives/elder-next-focusable.directive.mjs +3 -3
  116. package/esm2020/lib/components/forms/directives/elder-plug-parent-form.directive.mjs +3 -3
  117. package/esm2020/lib/components/forms/directives/elder-stop-event-propagation.directive.mjs +3 -3
  118. package/esm2020/lib/components/forms/directives/elder-tab-focus-trap.directive.mjs +3 -3
  119. package/esm2020/lib/components/forms/directives/elder-touched.directive.mjs +3 -3
  120. package/esm2020/lib/components/forms/directives/elder-triple-state-checkbox.directive.mjs +3 -3
  121. package/esm2020/lib/components/forms/directives/validation/elder-multiple-of.validator.mjs +3 -3
  122. package/esm2020/lib/components/forms/directives/validation/elder-required-ignore-zero.validator.mjs +3 -3
  123. package/esm2020/lib/components/forms/elder-forms.module.mjs +4 -4
  124. package/esm2020/lib/components/forms/search/elder-search-context.directive.mjs +35 -21
  125. package/esm2020/lib/components/forms/search/elder-search-input.directive.mjs +9 -15
  126. package/esm2020/lib/components/forms/search/elder-search.module.mjs +4 -4
  127. package/esm2020/lib/components/forms/search/search-box/elder-search-box.component.mjs +3 -3
  128. package/esm2020/lib/components/forms/search/search-box/elder-search-panel.component.mjs +3 -3
  129. package/esm2020/lib/components/global-search/elder-global-search.component.mjs +3 -3
  130. package/esm2020/lib/components/global-search/elder-global-search.module.mjs +4 -4
  131. package/esm2020/lib/components/global-search/elder-global-search.service.mjs +3 -3
  132. package/esm2020/lib/components/graph/elder-progress-bar/elder-progress-bar.component.mjs +3 -3
  133. package/esm2020/lib/components/graph/elder-progress-bar/elder-progress-bar.module.mjs +4 -4
  134. package/esm2020/lib/components/headers/elder-header/elder-header.component.mjs +3 -3
  135. package/esm2020/lib/components/headers/elder-header.module.mjs +4 -4
  136. package/esm2020/lib/components/http-support/elder-http-client.service.mjs +4 -4
  137. package/esm2020/lib/components/i18n/entities/elder-i18n-entities.module.mjs +4 -4
  138. package/esm2020/lib/components/i18n/entities/elder-localized-input/elder-localized-input.component.mjs +3 -3
  139. package/esm2020/lib/components/i18n/entities/elder-localized-input-dialog/elder-localized-input-dialog.component.mjs +3 -3
  140. package/esm2020/lib/components/i18n/entities/elder-localized-input-dialog.service.mjs +3 -3
  141. package/esm2020/lib/components/i18n/entities/elder-localized-input-table/elder-localized-input-table.component.mjs +3 -3
  142. package/esm2020/lib/components/i18n/entities/elder-localized-text-column.directive.mjs +3 -3
  143. package/esm2020/lib/components/i18n/entities/elder-localized-texts.directive.mjs +3 -3
  144. package/esm2020/lib/components/i18n/entities/picker/i18n-pick-async.pipe.mjs +3 -3
  145. package/esm2020/lib/components/i18n/entities/picker/i18n-pick.pipe.mjs +3 -3
  146. package/esm2020/lib/components/i18n/entities/picker/localisation-picker.service.mjs +3 -3
  147. package/esm2020/lib/components/i18n/language/elder-language-interceptor.mjs +3 -3
  148. package/esm2020/lib/components/i18n/language/elder-language.module.mjs +4 -4
  149. package/esm2020/lib/components/i18n/language/elder-language.service.mjs +3 -3
  150. package/esm2020/lib/components/i18n/language/language-switcher/elder-language-switcher.component.mjs +3 -3
  151. package/esm2020/lib/components/i18n/locales/elder-locales-de-ch.module.mjs +4 -4
  152. package/esm2020/lib/components/iframes/data-view/data-view-iframe/data-view-iframe.component.mjs +3 -3
  153. package/esm2020/lib/components/iframes/data-view/data-view-iframe-adapter.directive.mjs +3 -3
  154. package/esm2020/lib/components/iframes/elder-iframe.module.mjs +4 -4
  155. package/esm2020/lib/components/iframes/iframe-close.directive.mjs +3 -3
  156. package/esm2020/lib/components/iframes/iframe-dialog/iframe-dialog.component.mjs +3 -3
  157. package/esm2020/lib/components/iframes/iframe-host/iframe-host.component.mjs +3 -3
  158. package/esm2020/lib/components/iframes/iframe-side-content/iframe-side-content.component.mjs +3 -3
  159. package/esm2020/lib/components/iframes/iframe.service.mjs +3 -3
  160. package/esm2020/lib/components/infinitescroll/elder-infinite-autocomplete.directive.mjs +3 -3
  161. package/esm2020/lib/components/infinitescroll/elder-infinite-scroll.directive.mjs +3 -3
  162. package/esm2020/lib/components/infinitescroll/elder-infinite-scroll.module.mjs +7 -7
  163. package/esm2020/lib/components/input/autocomplete/elder-autocomplete/elder-autocomplete-option-selected.mjs +9 -0
  164. package/esm2020/lib/components/input/autocomplete/elder-autocomplete/elder-autocomplete.component.mjs +42 -27
  165. package/esm2020/lib/components/input/autocomplete/elder-autocomplete-many.directive.mjs +197 -0
  166. package/esm2020/lib/components/input/autocomplete/elder-autocomplete.directive.mjs +12 -12
  167. package/esm2020/lib/components/input/autocomplete/elder-autocomplete.module.mjs +22 -11
  168. package/esm2020/lib/components/input/autocomplete/many/word-position-finder.mjs +58 -0
  169. package/esm2020/lib/components/labels/elder-labels.module.mjs +4 -4
  170. package/esm2020/lib/components/labels/labels-input/labels-input.component.mjs +3 -3
  171. package/esm2020/lib/components/measures/dimensions-input/elder-dimensions-input.component.mjs +3 -3
  172. package/esm2020/lib/components/measures/directives/elder-unit-select.directive.mjs +5 -5
  173. package/esm2020/lib/components/measures/elder-measures.module.mjs +8 -8
  174. package/esm2020/lib/components/measures/elder-quantity-transform.pipe.mjs +3 -3
  175. package/esm2020/lib/components/measures/elder-quantity.pipe.mjs +3 -3
  176. package/esm2020/lib/components/measures/elder-unit.service.mjs +3 -3
  177. package/esm2020/lib/components/measures/quantity-input/elder-quantity-input.component.mjs +3 -3
  178. package/esm2020/lib/components/measures/util/elder-quantity.service.mjs +3 -3
  179. package/esm2020/lib/components/navigation/bread-crumbs/bread-crumbs/elder-bread-crumbs.component.mjs +3 -3
  180. package/esm2020/lib/components/navigation/bread-crumbs/elder-bread-crumbs.module.mjs +4 -4
  181. package/esm2020/lib/components/navigation/nav/elder-nav.module.mjs +4 -4
  182. package/esm2020/lib/components/navigation/nav/nav-group/elder-nav-group.component.mjs +3 -3
  183. package/esm2020/lib/components/navigation/nav/nav-link/elder-nav-link.component.mjs +3 -3
  184. package/esm2020/lib/components/navigation/nav/nav-list/elder-nav-list.component.mjs +3 -3
  185. package/esm2020/lib/components/navigation/toolbar/elder-toolbar-column.directive.mjs +3 -3
  186. package/esm2020/lib/components/navigation/toolbar/elder-toolbar.module.mjs +4 -4
  187. package/esm2020/lib/components/navigation/toolbar/elder-toolbar.service.mjs +3 -3
  188. package/esm2020/lib/components/navigation/toolbar/toolbar/elder-toolbar.component.mjs +3 -3
  189. package/esm2020/lib/components/navigation/toolbar/toolbar-title/elder-toolbar-title.component.mjs +3 -3
  190. package/esm2020/lib/components/navigation/toolbar/toolbar-title/elder-toolbar-title.service.mjs +3 -3
  191. package/esm2020/lib/components/overlays/elder-overlay-origin.directive.mjs +3 -3
  192. package/esm2020/lib/components/overlays/elder-overlay-trigger.directive.mjs +3 -3
  193. package/esm2020/lib/components/overlays/elder-overlay.component.mjs +3 -3
  194. package/esm2020/lib/components/overlays/elder-overlay.module.mjs +4 -4
  195. package/esm2020/lib/components/panels/card-panel/elder-card-panel.component.mjs +3 -3
  196. package/esm2020/lib/components/panels/elder-dialog-panel/elder-dialog-panel.component.mjs +3 -3
  197. package/esm2020/lib/components/panels/elder-panel.module.mjs +4 -4
  198. package/esm2020/lib/components/panels/flat/elder-panel.component.mjs +3 -3
  199. package/esm2020/lib/components/public_api.mjs +1 -2
  200. package/esm2020/lib/components/select/auto/elder-auto-select-first.directive.mjs +3 -3
  201. package/esm2020/lib/components/select/elder-select-base.mjs +5 -5
  202. package/esm2020/lib/components/select/elder-select-chip.directive.mjs +9 -9
  203. package/esm2020/lib/components/select/elder-select-on-tab.directive.mjs +3 -3
  204. package/esm2020/lib/components/select/elder-select-value.directive.mjs +3 -3
  205. package/esm2020/lib/components/select/elder-select.module.mjs +4 -4
  206. package/esm2020/lib/components/select/multi/elder-multi-select-base.mjs +3 -3
  207. package/esm2020/lib/components/select/multi/elder-multi-select-chips/elder-multi-select-chips.component.mjs +3 -3
  208. package/esm2020/lib/components/select/multi/elder-multi-select-form-field.mjs +3 -3
  209. package/esm2020/lib/components/select/popup/selection-model-popup.directive.mjs +4 -4
  210. package/esm2020/lib/components/select/popup/templated-selection-dialog/templated-selection-dialog.component.mjs +3 -3
  211. package/esm2020/lib/components/select/single/elder-clear-select.directive.mjs +3 -3
  212. package/esm2020/lib/components/select/single/elder-select/elder-select.component.mjs +10 -9
  213. package/esm2020/lib/components/select/single/elder-select-form-field.mjs +3 -3
  214. package/esm2020/lib/components/select-chip-list/chip-list-select/elder-chip-list-select.component.mjs +3 -3
  215. package/esm2020/lib/components/select-chip-list/elder-chip-list-select.module.mjs +4 -4
  216. package/esm2020/lib/components/select-list/elder-select-list.module.mjs +4 -4
  217. package/esm2020/lib/components/select-list/select-list/elder-select-list.component.mjs +3 -3
  218. package/esm2020/lib/components/select-list/select-list-item/elder-select-list-item.component.mjs +3 -3
  219. package/esm2020/lib/components/shell/drawers/elder-route-outlet-drawer.service.mjs +3 -3
  220. package/esm2020/lib/components/shell/drawers/elder-router-outlet.service.mjs +3 -3
  221. package/esm2020/lib/components/shell/elder-shell-slot.directive.mjs +3 -3
  222. package/esm2020/lib/components/shell/elder-shell.module.mjs +4 -4
  223. package/esm2020/lib/components/shell/elder-shell.service.mjs +3 -3
  224. package/esm2020/lib/components/shell/header/elder-app-header/elder-app-header.component.mjs +3 -3
  225. package/esm2020/lib/components/shell/shell/elder-shell.component.mjs +12 -12
  226. package/esm2020/lib/components/shell/shell-navigation-toggle/elder-shell-navigation-toggle.component.mjs +3 -3
  227. package/esm2020/lib/components/tabs/elder-tab/elder-tab.directive.mjs +3 -3
  228. package/esm2020/lib/components/tabs/elder-tab-group-routing/elder-tab-group-routing.directive.mjs +3 -3
  229. package/esm2020/lib/components/tabs/elder-tab.module.mjs +4 -4
  230. package/esm2020/lib/components/theme/elder-theme-applier.directive.mjs +3 -3
  231. package/esm2020/lib/components/theme/elder-theme-preference.service.mjs +3 -3
  232. package/esm2020/lib/components/theme/elder-theme-toggle/elder-theme-toggle.component.mjs +3 -3
  233. package/esm2020/lib/components/theme/elder-theme.directive.mjs +3 -3
  234. package/esm2020/lib/components/theme/elder-theme.module.mjs +4 -4
  235. package/esm2020/lib/components/theme/elder-theme.service.mjs +3 -3
  236. package/esm2020/lib/components/time/date-adapters/custom-date-adapter.mjs +3 -3
  237. package/esm2020/lib/components/time/duration/elder-duration-input/elder-duration-input.component.mjs +3 -3
  238. package/esm2020/lib/components/time/elder-date-switcher/elder-date-switcher.component.mjs +3 -3
  239. package/esm2020/lib/components/time/elder-date-time-input/elder-date-time-input.component.mjs +3 -3
  240. package/esm2020/lib/components/time/elder-interval-input/elder-interval-input.component.mjs +3 -3
  241. package/esm2020/lib/components/time/elder-local-date-input/elder-local-date-input.component.mjs +3 -3
  242. package/esm2020/lib/components/time/elder-local-time-input/elder-local-time-input.component.mjs +3 -3
  243. package/esm2020/lib/components/time/elder-time.module.mjs +8 -8
  244. package/esm2020/lib/components/time/period/elder-period-input/elder-period-input.component.mjs +3 -3
  245. package/esm2020/lib/components/toasts/elder-toast.module.mjs +4 -4
  246. package/esm2020/lib/components/toasts/elder-toast.service.mjs +9 -9
  247. package/esm2020/lib/components/toasts/standard-toast/standard-toast.component.mjs +3 -3
  248. package/esm2020/lib/components/url-fragment/elder-url-fragment.module.mjs +4 -4
  249. package/esm2020/lib/components/url-fragment/url-fragment-switcher/elder-url-fragment-switcher.component.mjs +3 -3
  250. package/esm2020/lib/components/viewers/elder-svg-viewer/elder-svg-viewer.component.mjs +3 -3
  251. package/esm2020/lib/components/viewers/elder-viewers.module.mjs +4 -4
  252. package/esm2020/lib/features/event-source/elder-event-source.service.mjs +3 -3
  253. package/esm2020/lib/features/kafent/access-token-provider.mjs +3 -3
  254. package/esm2020/lib/features/kafent/kafent-config.mjs +3 -3
  255. package/esm2020/lib/features/kafent/kafent-event-stream.mjs +3 -3
  256. package/esm2020/lib/features/kafent/kafent-event.service.mjs +3 -3
  257. package/esm2020/lib/features/kafent/kafent.module.mjs +4 -4
  258. package/esm2020/lib/features/kafent/sse/kafent-event-stream-sse.service.mjs +3 -3
  259. package/esm2020/lib/pipes/bytes.pipe.mjs +3 -3
  260. package/esm2020/lib/pipes/elder-pipes.module.mjs +10 -10
  261. package/esm2020/lib/pipes/elder-repeat.pipe.mjs +3 -3
  262. package/esm2020/lib/pipes/elder-round.pipe.mjs +3 -3
  263. package/esm2020/lib/pipes/elder-safe-url.pipe.mjs +3 -3
  264. package/esm2020/lib/pipes/elder-truncate.pipe.mjs +3 -3
  265. package/esm2020/lib/pipes/iso-duration.pipe.mjs +3 -3
  266. package/esm2020/lib/pipes/iso-interval-parse.pipe.mjs +3 -3
  267. package/esm2020/lib/pipes/iso-interval.pipe.mjs +3 -3
  268. package/esm2020/lib/pipes/time-ago.pipe.mjs +3 -3
  269. package/esm2020/lib/pipes/time-duration.pipe.mjs +3 -3
  270. package/esm2020/lib/pipes/weight.pipe.mjs +3 -3
  271. package/fesm2015/elderbyte-ngx-starter.mjs +1290 -1115
  272. package/fesm2015/elderbyte-ngx-starter.mjs.map +1 -1
  273. package/fesm2020/elderbyte-ngx-starter.mjs +1287 -1115
  274. package/fesm2020/elderbyte-ngx-starter.mjs.map +1 -1
  275. package/lib/common/data/data-context/data-context-active-page.d.ts +1 -1
  276. package/lib/common/data/data-context/data-context-base.d.ts +2 -2
  277. package/lib/common/data/data-context/data-context-continuable-base.d.ts +1 -1
  278. package/lib/common/data/data-context/data-context.d.ts +2 -2
  279. package/lib/common/data/datasource/data-source-adapter.d.ts +1 -1
  280. package/lib/common/data/datasource/data-source-processor.d.ts +1 -1
  281. package/lib/common/data/datasource/data-source.d.ts +1 -1
  282. package/lib/common/data/datasource/fetcher/delegate-data-source.d.ts +1 -1
  283. package/lib/common/data/datasource/local/local-list-data-source.d.ts +1 -1
  284. package/lib/common/data/datasource/local/local-paged-data-source.d.ts +1 -1
  285. package/lib/common/data/datasource/rest/rest-client.d.ts +1 -1
  286. package/lib/common/data/{filter-context.d.ts → filters/filter-context.d.ts} +3 -1
  287. package/lib/common/data/{filter.d.ts → filters/filter.d.ts} +15 -3
  288. package/lib/common/data/http-params-builder.d.ts +1 -1
  289. package/lib/common/data/public_api.d.ts +2 -2
  290. package/lib/common/data/required-filter-evaluator.d.ts +2 -2
  291. package/lib/common/data/token-chunk-request.d.ts +1 -1
  292. package/lib/common/utils/filter-util.d.ts +1 -1
  293. package/lib/components/auditing/audited-entity/elder-audited-entity.component.d.ts +2 -1
  294. package/lib/components/csv/elder-csv-export-btn/elder-csv-export-btn.component.d.ts +1 -1
  295. package/lib/components/csv/elder-csv-stream-exporter.d.ts +1 -1
  296. package/lib/components/data-view/base/elder-data-view-options.d.ts +1 -1
  297. package/lib/components/forms/search/elder-search-context.directive.d.ts +15 -12
  298. package/lib/components/forms/search/elder-search-input.directive.d.ts +6 -7
  299. package/lib/components/http-support/elder-http-client.service.d.ts +1 -1
  300. package/lib/components/input/autocomplete/elder-autocomplete/elder-autocomplete-option-selected.d.ts +8 -0
  301. package/lib/components/input/autocomplete/elder-autocomplete/elder-autocomplete.component.d.ts +14 -14
  302. package/lib/components/{multi-autocomplete/elder-multi-autocomplete.component.d.ts → input/autocomplete/elder-autocomplete-many.directive.d.ts} +46 -27
  303. package/lib/components/input/autocomplete/elder-autocomplete.directive.d.ts +2 -2
  304. package/lib/components/input/autocomplete/elder-autocomplete.module.d.ts +11 -7
  305. package/lib/components/{multi-autocomplete/word-position.d.ts → input/autocomplete/many/word-position-finder.d.ts} +0 -0
  306. package/lib/components/public_api.d.ts +0 -1
  307. package/lib/components/select/elder-select-base.d.ts +1 -1
  308. package/lib/components/select/popup/selection-model-popup.directive.d.ts +1 -1
  309. package/lib/components/select/single/elder-select/elder-select.component.d.ts +2 -1
  310. package/package.json +1 -1
  311. package/esm2020/lib/common/data/filter-context.mjs +0 -129
  312. package/esm2020/lib/common/data/filter.mjs +0 -72
  313. package/esm2020/lib/components/multi-autocomplete/elder-multi-auto-complete.module.mjs +0 -30
  314. package/esm2020/lib/components/multi-autocomplete/elder-multi-autocomplete.component.mjs +0 -122
  315. package/esm2020/lib/components/multi-autocomplete/word-position.mjs +0 -38
  316. package/lib/components/multi-autocomplete/elder-multi-auto-complete.module.d.ts +0 -14
  317. package/src/lib/components/multi-autocomplete/elder-multi-autocomplete.component.scss +0 -0
@@ -45,9 +45,9 @@ export * from './elder-input-pattern.directive';
45
45
  // eslint-disable-next-line @angular-eslint/directive-class-suffix
46
46
  export class ElderTouchedDirectiveLegacy extends ElderTouchedDirective {
47
47
  }
48
- ElderTouchedDirectiveLegacy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderTouchedDirectiveLegacy, deps: null, target: i0.ɵɵFactoryTarget.Directive });
49
- ElderTouchedDirectiveLegacy.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.0", type: ElderTouchedDirectiveLegacy, selector: "[touched]", usesInheritance: true, ngImport: i0 });
50
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderTouchedDirectiveLegacy, decorators: [{
48
+ ElderTouchedDirectiveLegacy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderTouchedDirectiveLegacy, deps: null, target: i0.ɵɵFactoryTarget.Directive });
49
+ ElderTouchedDirectiveLegacy.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.0", type: ElderTouchedDirectiveLegacy, selector: "[touched]", usesInheritance: true, ngImport: i0 });
50
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderTouchedDirectiveLegacy, decorators: [{
51
51
  type: Directive,
52
52
  args: [{ selector: '[touched]' }]
53
53
  }] });
@@ -58,9 +58,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
58
58
  // eslint-disable-next-line @angular-eslint/directive-class-suffix
59
59
  export class ElderPlugParentFormDirectiveLegacy extends ElderPlugParentFormDirective {
60
60
  }
61
- ElderPlugParentFormDirectiveLegacy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderPlugParentFormDirectiveLegacy, deps: null, target: i0.ɵɵFactoryTarget.Directive });
62
- ElderPlugParentFormDirectiveLegacy.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.0", type: ElderPlugParentFormDirectiveLegacy, selector: "[plugParentForm]", usesInheritance: true, ngImport: i0 });
63
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderPlugParentFormDirectiveLegacy, decorators: [{
61
+ ElderPlugParentFormDirectiveLegacy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderPlugParentFormDirectiveLegacy, deps: null, target: i0.ɵɵFactoryTarget.Directive });
62
+ ElderPlugParentFormDirectiveLegacy.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.0", type: ElderPlugParentFormDirectiveLegacy, selector: "[plugParentForm]", usesInheritance: true, ngImport: i0 });
63
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderPlugParentFormDirectiveLegacy, decorators: [{
64
64
  type: Directive,
65
65
  args: [{ selector: '[plugParentForm]' }]
66
66
  }] });
@@ -71,16 +71,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
71
71
  // eslint-disable-next-line @angular-eslint/directive-class-suffix
72
72
  export class ElderStopEventPropagationDirectiveLegacy extends ElderStopEventPropagationDirective {
73
73
  }
74
- ElderStopEventPropagationDirectiveLegacy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderStopEventPropagationDirectiveLegacy, deps: null, target: i0.ɵɵFactoryTarget.Directive });
75
- ElderStopEventPropagationDirectiveLegacy.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.0", type: ElderStopEventPropagationDirectiveLegacy, selector: "[ebsStopEventPropagation]", usesInheritance: true, ngImport: i0 });
76
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderStopEventPropagationDirectiveLegacy, decorators: [{
74
+ ElderStopEventPropagationDirectiveLegacy.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderStopEventPropagationDirectiveLegacy, deps: null, target: i0.ɵɵFactoryTarget.Directive });
75
+ ElderStopEventPropagationDirectiveLegacy.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.0", type: ElderStopEventPropagationDirectiveLegacy, selector: "[ebsStopEventPropagation]", usesInheritance: true, ngImport: i0 });
76
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderStopEventPropagationDirectiveLegacy, decorators: [{
77
77
  type: Directive,
78
78
  args: [{ selector: '[ebsStopEventPropagation]' }]
79
79
  }] });
80
80
  export class ElderFormsDirectivesModule {
81
81
  }
82
- ElderFormsDirectivesModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderFormsDirectivesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
83
- ElderFormsDirectivesModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.1.0", ngImport: i0, type: ElderFormsDirectivesModule, declarations: [ElderDelayedFocusDirective,
82
+ ElderFormsDirectivesModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderFormsDirectivesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
83
+ ElderFormsDirectivesModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.0", ngImport: i0, type: ElderFormsDirectivesModule, declarations: [ElderDelayedFocusDirective,
84
84
  ElderTouchedDirective, ElderTouchedDirectiveLegacy, ElderPlugParentFormDirective, ElderPlugParentFormDirectiveLegacy, ElderStopEventPropagationDirective, ElderStopEventPropagationDirectiveLegacy, ElderMinDirective,
85
85
  ElderMaxDirective,
86
86
  ElderFormFieldLabelDirective,
@@ -109,8 +109,8 @@ ElderFormsDirectivesModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.
109
109
  ElderTabFocusTrapDirective,
110
110
  ElderFormFieldNoHintDirective,
111
111
  ElderInputPatternDirective] });
112
- ElderFormsDirectivesModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderFormsDirectivesModule, imports: [CommonModule, MatFormFieldModule] });
113
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderFormsDirectivesModule, decorators: [{
112
+ ElderFormsDirectivesModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderFormsDirectivesModule, imports: [CommonModule, MatFormFieldModule] });
113
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderFormsDirectivesModule, decorators: [{
114
114
  type: NgModule,
115
115
  args: [{
116
116
  imports: [CommonModule, MatFormFieldModule],
@@ -58,9 +58,9 @@ export class ElderInputPatternDirective {
58
58
  return true;
59
59
  }
60
60
  }
61
- ElderInputPatternDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderInputPatternDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
62
- ElderInputPatternDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.0", type: ElderInputPatternDirective, selector: "textarea[elderInputPattern],input[elderInputPattern]", inputs: { elderInputPattern: "elderInputPattern" }, host: { listeners: { "beforeinput": "onBeforeInput($event)", "paste": "onPasteEvent($event)" } }, ngImport: i0 });
63
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderInputPatternDirective, decorators: [{
61
+ ElderInputPatternDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderInputPatternDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
62
+ ElderInputPatternDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.0", type: ElderInputPatternDirective, selector: "textarea[elderInputPattern],input[elderInputPattern]", inputs: { elderInputPattern: "elderInputPattern" }, host: { listeners: { "beforeinput": "onBeforeInput($event)", "paste": "onPasteEvent($event)" } }, ngImport: i0 });
63
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderInputPatternDirective, decorators: [{
64
64
  type: Directive,
65
65
  args: [{
66
66
  selector: 'textarea[elderInputPattern],input[elderInputPattern]'
@@ -79,9 +79,9 @@ export class ElderKeyEventDirective {
79
79
  }
80
80
  }
81
81
  }
82
- ElderKeyEventDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderKeyEventDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
83
- ElderKeyEventDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.0", type: ElderKeyEventDirective, selector: "[elderKeyEvent]", inputs: { keyFilter: ["elderKeyEventFilter", "keyFilter"], keyDown: ["elderKeyEventDown", "keyDown"], includeChildren: ["elderKeyEventChildren", "includeChildren"], callback: ["elderKeyEventCallback", "callback"] }, outputs: { keyEvent: "onElderKeyEvent" }, host: { listeners: { "window:keyup": "keyupEvent($event)", "window:keydown": "keydownEvent($event)" } }, ngImport: i0 });
84
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderKeyEventDirective, decorators: [{
82
+ ElderKeyEventDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderKeyEventDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
83
+ ElderKeyEventDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.0", type: ElderKeyEventDirective, selector: "[elderKeyEvent]", inputs: { keyFilter: ["elderKeyEventFilter", "keyFilter"], keyDown: ["elderKeyEventDown", "keyDown"], includeChildren: ["elderKeyEventChildren", "includeChildren"], callback: ["elderKeyEventCallback", "callback"] }, outputs: { keyEvent: "onElderKeyEvent" }, host: { listeners: { "window:keyup": "keyupEvent($event)", "window:keydown": "keydownEvent($event)" } }, ngImport: i0 });
84
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderKeyEventDirective, decorators: [{
85
85
  type: Directive,
86
86
  args: [{
87
87
  selector: '[elderKeyEvent]'
@@ -16,14 +16,14 @@ export class ElderMaxDirective {
16
16
  return this._validator(control);
17
17
  }
18
18
  }
19
- ElderMaxDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderMaxDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
20
- ElderMaxDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.0", type: ElderMaxDirective, selector: "[max][formControlName],[max][formControl],[max][ngModel]", inputs: { max: "max" }, providers: [
19
+ ElderMaxDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderMaxDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
20
+ ElderMaxDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.0", type: ElderMaxDirective, selector: "[max][formControlName],[max][formControl],[max][ngModel]", inputs: { max: "max" }, providers: [
21
21
  { provide: NG_VALIDATORS,
22
22
  useExisting: forwardRef(() => ElderMaxDirective),
23
23
  multi: true
24
24
  }
25
25
  ], ngImport: i0 });
26
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderMaxDirective, decorators: [{
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderMaxDirective, decorators: [{
27
27
  type: Directive,
28
28
  args: [{
29
29
  selector: '[max][formControlName],[max][formControl],[max][ngModel]',
@@ -16,14 +16,14 @@ export class ElderMinDirective {
16
16
  return this._validator(control);
17
17
  }
18
18
  }
19
- ElderMinDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderMinDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
20
- ElderMinDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.0", type: ElderMinDirective, selector: "[min][formControlName],[min][formControl],[min][ngModel]", inputs: { min: "min" }, providers: [
19
+ ElderMinDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderMinDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
20
+ ElderMinDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.0", type: ElderMinDirective, selector: "[min][formControlName],[min][formControl],[min][ngModel]", inputs: { min: "min" }, providers: [
21
21
  { provide: NG_VALIDATORS,
22
22
  useExisting: forwardRef(() => ElderMinDirective),
23
23
  multi: true
24
24
  }
25
25
  ], ngImport: i0 });
26
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderMinDirective, decorators: [{
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderMinDirective, decorators: [{
27
27
  type: Directive,
28
28
  args: [{
29
29
  selector: '[min][formControlName],[min][formControl],[min][ngModel]',
@@ -77,9 +77,9 @@ export class ElderNextFocusableDirective {
77
77
  return true;
78
78
  }
79
79
  }
80
- ElderNextFocusableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderNextFocusableDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
81
- ElderNextFocusableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.0", type: ElderNextFocusableDirective, selector: "[elderNextFocusable]", inputs: { nextElement: ["elderNextFocusable", "nextElement"], enabled: ["elderNextFocusableEnabled", "enabled"], nextElements: ["elderNextElements", "nextElements"] }, host: { listeners: { "keydown": "onKeyDown($event)" } }, exportAs: ["elderNextFocusable"], ngImport: i0 });
82
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderNextFocusableDirective, decorators: [{
80
+ ElderNextFocusableDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderNextFocusableDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
81
+ ElderNextFocusableDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.0", type: ElderNextFocusableDirective, selector: "[elderNextFocusable]", inputs: { nextElement: ["elderNextFocusable", "nextElement"], enabled: ["elderNextFocusableEnabled", "enabled"], nextElements: ["elderNextElements", "nextElements"] }, host: { listeners: { "keydown": "onKeyDown($event)" } }, exportAs: ["elderNextFocusable"], ngImport: i0 });
82
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderNextFocusableDirective, decorators: [{
83
83
  type: Directive,
84
84
  args: [{
85
85
  selector: '[elderNextFocusable]',
@@ -9,15 +9,15 @@ import * as i0 from "@angular/core";
9
9
  */
10
10
  export class ElderPlugParentFormDirective {
11
11
  }
12
- ElderPlugParentFormDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderPlugParentFormDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
13
- ElderPlugParentFormDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.0", type: ElderPlugParentFormDirective, selector: "[elderPlugParentForm]", providers: [
12
+ ElderPlugParentFormDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderPlugParentFormDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
13
+ ElderPlugParentFormDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.0", type: ElderPlugParentFormDirective, selector: "[elderPlugParentForm]", providers: [
14
14
  {
15
15
  provide: ControlContainer,
16
16
  useFactory: provideForm,
17
17
  deps: [NgForm]
18
18
  }
19
19
  ], ngImport: i0 });
20
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderPlugParentFormDirective, decorators: [{
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderPlugParentFormDirective, decorators: [{
21
21
  type: Directive,
22
22
  args: [{
23
23
  selector: '[elderPlugParentForm]',
@@ -15,9 +15,9 @@ export class ElderStopEventPropagationDirective {
15
15
  event.stopPropagation();
16
16
  }
17
17
  }
18
- ElderStopEventPropagationDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderStopEventPropagationDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
19
- ElderStopEventPropagationDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.0", type: ElderStopEventPropagationDirective, selector: "[elderStopEventPropagation]", host: { listeners: { "click": "onClick($event)" } }, ngImport: i0 });
20
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderStopEventPropagationDirective, decorators: [{
18
+ ElderStopEventPropagationDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderStopEventPropagationDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
19
+ ElderStopEventPropagationDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.0", type: ElderStopEventPropagationDirective, selector: "[elderStopEventPropagation]", host: { listeners: { "click": "onClick($event)" } }, ngImport: i0 });
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderStopEventPropagationDirective, decorators: [{
21
21
  type: Directive,
22
22
  args: [{
23
23
  selector: '[elderStopEventPropagation]'
@@ -144,9 +144,9 @@ export class ElderTabFocusTrapDirective {
144
144
  return false;
145
145
  }
146
146
  }
147
- ElderTabFocusTrapDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderTabFocusTrapDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
148
- ElderTabFocusTrapDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.0", type: ElderTabFocusTrapDirective, selector: "[elderTabFocusTrap]", inputs: { focusableQuerySelector: "focusableQuerySelector" }, ngImport: i0 });
149
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderTabFocusTrapDirective, decorators: [{
147
+ ElderTabFocusTrapDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderTabFocusTrapDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
148
+ ElderTabFocusTrapDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.0", type: ElderTabFocusTrapDirective, selector: "[elderTabFocusTrap]", inputs: { focusableQuerySelector: "focusableQuerySelector" }, ngImport: i0 });
149
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderTabFocusTrapDirective, decorators: [{
150
150
  type: Directive,
151
151
  args: [{
152
152
  selector: '[elderTabFocusTrap]'
@@ -16,9 +16,9 @@ export class ElderTouchedDirective {
16
16
  }
17
17
  }
18
18
  }
19
- ElderTouchedDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderTouchedDirective, deps: [{ token: i1.NgControl }], target: i0.ɵɵFactoryTarget.Directive });
20
- ElderTouchedDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.0", type: ElderTouchedDirective, selector: "[elderTouched]", ngImport: i0 });
21
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderTouchedDirective, decorators: [{
19
+ ElderTouchedDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderTouchedDirective, deps: [{ token: i1.NgControl }], target: i0.ɵɵFactoryTarget.Directive });
20
+ ElderTouchedDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.0", type: ElderTouchedDirective, selector: "[elderTouched]", ngImport: i0 });
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderTouchedDirective, decorators: [{
22
22
  type: Directive,
23
23
  args: [{
24
24
  selector: '[elderTouched]'
@@ -104,9 +104,9 @@ export class ElderTripleStateCheckboxDirective {
104
104
  }
105
105
  }
106
106
  }
107
- ElderTripleStateCheckboxDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderTripleStateCheckboxDirective, deps: [{ token: i1.MatCheckbox }, { token: i2.NgModel, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
108
- ElderTripleStateCheckboxDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.0", type: ElderTripleStateCheckboxDirective, selector: "mat-checkbox[elderTripleStateCheckbox]", host: { listeners: { "click": "onClick($event)" } }, ngImport: i0 });
109
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderTripleStateCheckboxDirective, decorators: [{
107
+ ElderTripleStateCheckboxDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderTripleStateCheckboxDirective, deps: [{ token: i1.MatCheckbox }, { token: i2.NgModel, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
108
+ ElderTripleStateCheckboxDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.0", type: ElderTripleStateCheckboxDirective, selector: "mat-checkbox[elderTripleStateCheckbox]", host: { listeners: { "click": "onClick($event)" } }, ngImport: i0 });
109
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderTripleStateCheckboxDirective, decorators: [{
110
110
  type: Directive,
111
111
  args: [{
112
112
  selector: 'mat-checkbox[elderTripleStateCheckbox]'
@@ -31,15 +31,15 @@ export class ElderMultipleOfValidator {
31
31
  }
32
32
  }
33
33
  }
34
- ElderMultipleOfValidator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderMultipleOfValidator, deps: [], target: i0.ɵɵFactoryTarget.Directive });
35
- ElderMultipleOfValidator.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.0", type: ElderMultipleOfValidator, selector: "[elderMultipleOf][formControlName],[elderMultipleOf][formControl],[elderMultipleOf][ngModel]", inputs: { elderMultipleOf: "elderMultipleOf" }, providers: [
34
+ ElderMultipleOfValidator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderMultipleOfValidator, deps: [], target: i0.ɵɵFactoryTarget.Directive });
35
+ ElderMultipleOfValidator.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.0", type: ElderMultipleOfValidator, selector: "[elderMultipleOf][formControlName],[elderMultipleOf][formControl],[elderMultipleOf][ngModel]", inputs: { elderMultipleOf: "elderMultipleOf" }, providers: [
36
36
  {
37
37
  provide: NG_VALIDATORS,
38
38
  useExisting: forwardRef(() => ElderMultipleOfValidator),
39
39
  multi: true
40
40
  }
41
41
  ], ngImport: i0 });
42
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderMultipleOfValidator, decorators: [{
42
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderMultipleOfValidator, decorators: [{
43
43
  type: Directive,
44
44
  args: [{
45
45
  selector: '[elderMultipleOf][formControlName],[elderMultipleOf][formControl],[elderMultipleOf][ngModel]',
@@ -47,11 +47,11 @@ export class ElderRequiredIgnoreZeroValidator {
47
47
  return result;
48
48
  }
49
49
  }
50
- ElderRequiredIgnoreZeroValidator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderRequiredIgnoreZeroValidator, deps: [], target: i0.ɵɵFactoryTarget.Directive });
51
- ElderRequiredIgnoreZeroValidator.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.0", type: ElderRequiredIgnoreZeroValidator, selector: "[elderRequiredIgnoreZeroValidator][ngModel]", inputs: { enabled: ["elderRequiredIgnoreZeroValidator", "enabled"], required: "required" }, providers: [
50
+ ElderRequiredIgnoreZeroValidator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderRequiredIgnoreZeroValidator, deps: [], target: i0.ɵɵFactoryTarget.Directive });
51
+ ElderRequiredIgnoreZeroValidator.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.0", type: ElderRequiredIgnoreZeroValidator, selector: "[elderRequiredIgnoreZeroValidator][ngModel]", inputs: { enabled: ["elderRequiredIgnoreZeroValidator", "enabled"], required: "required" }, providers: [
52
52
  { provide: NG_VALIDATORS, useExisting: ElderRequiredIgnoreZeroValidator, multi: true }
53
53
  ], ngImport: i0 });
54
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderRequiredIgnoreZeroValidator, decorators: [{
54
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderRequiredIgnoreZeroValidator, decorators: [{
55
55
  type: Directive,
56
56
  args: [{
57
57
  selector: '[elderRequiredIgnoreZeroValidator][ngModel]',
@@ -8,10 +8,10 @@ export * from './directives/elder-forms-directives.module';
8
8
  export * from './search/elder-search.module';
9
9
  export class ElderFormsModule {
10
10
  }
11
- ElderFormsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderFormsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
12
- ElderFormsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.1.0", ngImport: i0, type: ElderFormsModule, imports: [CommonModule, ElderFormsDirectivesModule, ElderSearchModule], exports: [ElderFormsDirectivesModule, ElderSearchModule] });
13
- ElderFormsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderFormsModule, imports: [CommonModule, ElderFormsDirectivesModule, ElderSearchModule, ElderFormsDirectivesModule, ElderSearchModule] });
14
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderFormsModule, decorators: [{
11
+ ElderFormsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderFormsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
12
+ ElderFormsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.0", ngImport: i0, type: ElderFormsModule, imports: [CommonModule, ElderFormsDirectivesModule, ElderSearchModule], exports: [ElderFormsDirectivesModule, ElderSearchModule] });
13
+ ElderFormsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderFormsModule, imports: [CommonModule, ElderFormsDirectivesModule, ElderSearchModule, ElderFormsDirectivesModule, ElderSearchModule] });
14
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderFormsModule, decorators: [{
15
15
  type: NgModule,
16
16
  args: [{
17
17
  imports: [CommonModule, ElderFormsDirectivesModule, ElderSearchModule],
@@ -1,28 +1,24 @@
1
1
  import { Directive, Input } from '@angular/core';
2
2
  import { LoggerFactory } from '@elderbyte/ts-logger';
3
- import { debounceTime, map, switchMap, takeUntil } from 'rxjs/operators';
3
+ import { combineLatestWith, debounceTime, map, switchMap, takeUntil } from 'rxjs/operators';
4
4
  import { BehaviorSubject } from 'rxjs/internal/BehaviorSubject';
5
5
  import { Subject } from 'rxjs/internal/Subject';
6
6
  import { combineLatest } from 'rxjs';
7
- import { Filter } from '../../../common/data/filter';
7
+ import { Filter } from '../../../common/data/filters/filter';
8
8
  import * as i0 from "@angular/core";
9
9
  /**
10
10
  * The search container manages a group of search-inputs
11
11
  * and holds their values in a central search model.
12
12
  */
13
13
  export class ElderSearchContextDirective {
14
- /***************************************************************************
15
- * *
16
- * Constructor *
17
- * *
18
- **************************************************************************/
19
14
  constructor() {
20
15
  /***************************************************************************
21
16
  * *
22
17
  * Fields *
23
18
  * *
24
19
  **************************************************************************/
25
- this.log = LoggerFactory.getLogger('ElderSearchContextDirective');
20
+ this.forcedFilters$ = new BehaviorSubject([]);
21
+ this.log = LoggerFactory.getLogger(this.constructor.name);
26
22
  this.unsubscribe$ = new Subject();
27
23
  this._searchInputs = new BehaviorSubject([]);
28
24
  this._searchStates = new BehaviorSubject([]);
@@ -33,16 +29,12 @@ export class ElderSearchContextDirective {
33
29
  * Life Cycle *
34
30
  * *
35
31
  **************************************************************************/
36
- ngOnInit() { }
37
32
  ngAfterViewInit() {
38
- this._searchInputs.pipe(takeUntil(this.unsubscribe$), switchMap(inputs => combineLatest(inputs.map(i => i.state$))), debounceTime(5)).subscribe(states => {
33
+ this._searchInputs.pipe(takeUntil(this.unsubscribe$), switchMap(inputs => combineLatest(inputs.map(i => i.state$))), combineLatestWith(this.forcedFilters$), debounceTime(5)).subscribe(([states, forcedFilters]) => {
39
34
  this._searchStates.next(states);
40
- const filters = this.convertToFilters(states);
41
- this._filters.next(filters);
42
- this.log.trace('Search-Model filters updated:', filters);
43
- if (this.filterContext) {
44
- this.filterContext.updateFilters(filters);
45
- }
35
+ const userFilters = this.convertToFilters(states);
36
+ this._filters.next(userFilters);
37
+ this.applyFilters(userFilters, forcedFilters);
46
38
  });
47
39
  }
48
40
  ngOnDestroy() {
@@ -60,6 +52,18 @@ export class ElderSearchContextDirective {
60
52
  get filterContext() {
61
53
  return this._filterContext;
62
54
  }
55
+ /**
56
+ * Forced filters are always merged into the final FilterContext.
57
+ *
58
+ * This means they override user defined filters, but attempt
59
+ * to also keep the users intent (by merging) them.
60
+ */
61
+ set forcedFilters(filters) {
62
+ this.forcedFilters$.next(filters);
63
+ }
64
+ get forcedFilters() {
65
+ return this.forcedFilters$.getValue();
66
+ }
63
67
  get attributes() {
64
68
  return this._searchInputs.asObservable();
65
69
  }
@@ -116,17 +120,27 @@ export class ElderSearchContextDirective {
116
120
  return states
117
121
  .map(s => new Filter(s.queryKey, s.queryValue));
118
122
  }
123
+ applyFilters(userFilters, forcedFilters) {
124
+ const context = this.filterContext;
125
+ if (context) {
126
+ context.updateFilters(userFilters);
127
+ context.mergeFilters(forcedFilters);
128
+ this.log.trace('Search-Model filters updated:', Array.from(context.filtersSnapshot));
129
+ }
130
+ }
119
131
  }
120
- ElderSearchContextDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderSearchContextDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
121
- ElderSearchContextDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.0", type: ElderSearchContextDirective, selector: "[elderSearchContext]", inputs: { filterContext: ["elderSearchContext", "filterContext"] }, exportAs: ["elderSearchContext"], ngImport: i0 });
122
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderSearchContextDirective, decorators: [{
132
+ ElderSearchContextDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderSearchContextDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
133
+ ElderSearchContextDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.0", type: ElderSearchContextDirective, selector: "[elderSearchContext]", inputs: { filterContext: ["elderSearchContext", "filterContext"], forcedFilters: "forcedFilters" }, exportAs: ["elderSearchContext"], ngImport: i0 });
134
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderSearchContextDirective, decorators: [{
123
135
  type: Directive,
124
136
  args: [{
125
137
  selector: '[elderSearchContext]',
126
138
  exportAs: 'elderSearchContext'
127
139
  }]
128
- }], ctorParameters: function () { return []; }, propDecorators: { filterContext: [{
140
+ }], propDecorators: { filterContext: [{
129
141
  type: Input,
130
142
  args: ['elderSearchContext']
143
+ }], forcedFilters: [{
144
+ type: Input
131
145
  }] } });
132
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItc2VhcmNoLWNvbnRleHQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy9mb3Jtcy9zZWFyY2gvZWxkZXItc2VhcmNoLWNvbnRleHQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLEtBQUssRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFDakYsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxZQUFZLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzlDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDbkMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLDZCQUE2QixDQUFDOztBQUtuRDs7O0dBR0c7QUFLSCxNQUFNLE9BQU8sMkJBQTJCO0lBbUJ0Qzs7OztnRkFJNEU7SUFFNUU7UUF0QkE7Ozs7b0ZBSTRFO1FBRTNELFFBQUcsR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFFN0QsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBRW5DLGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZELGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQXFCLEVBQUUsQ0FBQyxDQUFDO1FBQzVELGFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBVyxFQUFFLENBQUMsQ0FBQztJQVk5RCxDQUFDO0lBRUQ7Ozs7Z0ZBSTRF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QUFDLGtCQUFrQjthQUNwQixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7YUFDOUIsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ1gsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7Z0ZBSTRFO0lBRXBFLGdCQUFnQixDQUFDLE1BQTBCO1FBQ2pELE9BQU8sTUFBTTthQUNWLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDcEQsQ0FBQzs7d0hBbEpVLDJCQUEyQjs0R0FBM0IsMkJBQTJCOzJGQUEzQiwyQkFBMkI7a0JBSnZDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHNCQUFzQjtvQkFDaEMsUUFBUSxFQUFFLG9CQUFvQjtpQkFDL0I7MEVBdUVZLGFBQWE7c0JBRHZCLEtBQUs7dUJBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBZnRlclZpZXdJbml0LCBEaXJlY3RpdmUsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0xvZ2dlckZhY3Rvcnl9IGZyb20gJ0BlbGRlcmJ5dGUvdHMtbG9nZ2VyJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcy9pbnRlcm5hbC9PYnNlcnZhYmxlJztcbmltcG9ydCB7ZGVib3VuY2VUaW1lLCBtYXAsIHN3aXRjaE1hcCwgdGFrZVVudGlsfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1NlYXJjaElucHV0fSBmcm9tICcuL21vZGVsL3NlYXJjaC1pbnB1dCc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdH0gZnJvbSAncnhqcy9pbnRlcm5hbC9CZWhhdmlvclN1YmplY3QnO1xuaW1wb3J0IHtTdWJqZWN0fSBmcm9tICdyeGpzL2ludGVybmFsL1N1YmplY3QnO1xuaW1wb3J0IHtjb21iaW5lTGF0ZXN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7RmlsdGVyfSBmcm9tICcuLi8uLi8uLi9jb21tb24vZGF0YS9maWx0ZXInO1xuaW1wb3J0IHtGaWx0ZXJDb250ZXh0fSBmcm9tICcuLi8uLi8uLi9jb21tb24vZGF0YS9maWx0ZXItY29udGV4dCc7XG5pbXBvcnQge1NlYXJjaElucHV0U3RhdGV9IGZyb20gJy4vbW9kZWwvc2VhcmNoLWlucHV0LXN0YXRlJztcblxuXG4vKipcbiAqIFRoZSBzZWFyY2ggY29udGFpbmVyIG1hbmFnZXMgYSBncm91cCBvZiBzZWFyY2gtaW5wdXRzXG4gKiBhbmQgaG9sZHMgdGhlaXIgdmFsdWVzIGluIGEgY2VudHJhbCBzZWFyY2ggbW9kZWwuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tlbGRlclNlYXJjaENvbnRleHRdJyxcbiAgZXhwb3J0QXM6ICdlbGRlclNlYXJjaENvbnRleHQnXG59KVxuZXhwb3J0IGNsYXNzIEVsZGVyU2VhcmNoQ29udGV4dERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBGaWVsZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9nID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0VsZGVyU2VhcmNoQ29udGV4dERpcmVjdGl2ZScpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgdW5zdWJzY3JpYmUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9zZWFyY2hJbnB1dHMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNlYXJjaElucHV0W10+KFtdKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2VhcmNoU3RhdGVzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZWFyY2hJbnB1dFN0YXRlW10+KFtdKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZmlsdGVycyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RmlsdGVyW10+KFtdKTtcblxuICBwcml2YXRlIF9maWx0ZXJDb250ZXh0OiBGaWx0ZXJDb250ZXh0O1xuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBDb25zdHJ1Y3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuXG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogTGlmZSBDeWNsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7IH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX3NlYXJjaElucHV0cy5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSxcbiAgICAgIHN3aXRjaE1hcChpbnB1dHMgPT4gY29tYmluZUxhdGVzdChpbnB1dHMubWFwKGkgPT4gaS5zdGF0ZSQpKSksXG4gICAgICBkZWJvdW5jZVRpbWUoNSlcbiAgICApLnN1YnNjcmliZShzdGF0ZXMgPT4ge1xuXG4gICAgICB0aGlzLl9zZWFyY2hTdGF0ZXMubmV4dChzdGF0ZXMpO1xuXG4gICAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5jb252ZXJ0VG9GaWx0ZXJzKHN0YXRlcyk7XG4gICAgICB0aGlzLl9maWx0ZXJzLm5leHQoZmlsdGVycyk7XG5cbiAgICAgIHRoaXMubG9nLnRyYWNlKCdTZWFyY2gtTW9kZWwgZmlsdGVycyB1cGRhdGVkOicsIGZpbHRlcnMpO1xuXG4gICAgICBpZiAodGhpcy5maWx0ZXJDb250ZXh0KSB7XG4gICAgICAgIHRoaXMuZmlsdGVyQ29udGV4dC51cGRhdGVGaWx0ZXJzKGZpbHRlcnMpO1xuICAgICAgfVxuXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy51bnN1YnNjcmliZSQubmV4dCgpO1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJvcGVydGllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBASW5wdXQoJ2VsZGVyU2VhcmNoQ29udGV4dCcpXG4gIHB1YmxpYyBzZXQgZmlsdGVyQ29udGV4dCh2YWx1ZTogRmlsdGVyQ29udGV4dCkge1xuICAgIHRoaXMuX2ZpbHRlckNvbnRleHQgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZmlsdGVyQ29udGV4dCgpOiBGaWx0ZXJDb250ZXh0IHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyQ29udGV4dDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYXR0cmlidXRlcygpOiBPYnNlcnZhYmxlPFNlYXJjaElucHV0W10+IHtcbiAgICByZXR1cm4gdGhpcy5fc2VhcmNoSW5wdXRzLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBhdHRyaWJ1dGVzU25hcHNob3QoKTogU2VhcmNoSW5wdXRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlYXJjaElucHV0cy5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBzdGF0ZXMkKCk6IE9ic2VydmFibGU8U2VhcmNoSW5wdXRTdGF0ZVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlYXJjaFN0YXRlcy5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3RhdGVzU25hcHNob3QoKTogU2VhcmNoSW5wdXRTdGF0ZVtdIHtcbiAgICByZXR1cm4gdGhpcy5fc2VhcmNoU3RhdGVzLmdldFZhbHVlKCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCB1c2VyIHRvdWNoZWQgYXR0cmlidXRlcy4gKGlnbm9yaW5nIGZhbGxiYWNrcylcbiAgICovXG4gIHB1YmxpYyBnZXQgdXNlckRlZmluZWRBdHRyaWJ1dGVzJCgpOiBPYnNlcnZhYmxlPFNlYXJjaElucHV0U3RhdGVbXT4ge1xuICAgIHJldHVybiB0aGlzLnN0YXRlcyQucGlwZShcbiAgICAgIG1hcChzdGF0ZXMgPT4gc3RhdGVzLmZpbHRlcihzID0+ICFzLnByaXN0aW5lKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgYWN0aXZlIGZpbHRlcnNcbiAgICovXG4gIHB1YmxpYyBnZXQgZmlsdGVycyQoKTogT2JzZXJ2YWJsZTxGaWx0ZXJbXT4ge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJzLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBmaWx0ZXJzU25hcHNob3QoKTogRmlsdGVyW10ge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJzLmdldFZhbHVlKCk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHVibGljIEFQSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBuZXcgc2VhcmNoIG5hbWUgaW4gdGhpcyBjb250YWluZXJcbiAgICovXG4gIHB1YmxpYyByZWdpc3RlcihzZWFyY2hJbnB1dDogU2VhcmNoSW5wdXQpOiB2b2lkIHtcbiAgICB0aGlzLmxvZy5kZWJ1ZygnUmVnaXN0ZXJpbmcgc2VhcmNoIGlucHV0IFsnICsgc2VhcmNoSW5wdXQubmFtZSArICddJyk7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuX3NlYXJjaElucHV0cy5nZXRWYWx1ZSgpO1xuICAgIHRoaXMuX3NlYXJjaElucHV0cy5uZXh0KFsuLi5jdXJyZW50LCBzZWFyY2hJbnB1dF0pO1xuICB9XG5cbiAgcHVibGljIHJlc2V0KCk6IHZvaWQge1xuICAgIHRoaXMuYXR0cmlidXRlc1NuYXBzaG90XG4gICAgICAuZmlsdGVyKGF0dHIgPT4gIWF0dHIucmVhZG9ubHkpXG4gICAgICAuZm9yRWFjaChhID0+IHtcbiAgICAgICAgYS5yZXNldCgpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFByaXZhdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSBjb252ZXJ0VG9GaWx0ZXJzKHN0YXRlczogU2VhcmNoSW5wdXRTdGF0ZVtdKTogRmlsdGVyW10ge1xuICAgIHJldHVybiBzdGF0ZXNcbiAgICAgIC5tYXAocyA9PiBuZXcgRmlsdGVyKHMucXVlcnlLZXksIHMucXVlcnlWYWx1ZSkpO1xuICB9XG5cbn1cblxuIl19
146
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItc2VhcmNoLWNvbnRleHQuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZWxkZXJieXRlL25neC1zdGFydGVyL3NyYy9saWIvY29tcG9uZW50cy9mb3Jtcy9zZWFyY2gvZWxkZXItc2VhcmNoLWNvbnRleHQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLEtBQUssRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFDakYsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxZQUFZLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxRixPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQzlDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDbkMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLHFDQUFxQyxDQUFDOztBQUszRDs7O0dBR0c7QUFLSCxNQUFNLE9BQU8sMkJBQTJCO0lBSnhDO1FBT0U7Ozs7b0ZBSTRFO1FBRXBFLG1CQUFjLEdBQUcsSUFBSSxlQUFlLENBQVcsRUFBRSxDQUFDLENBQUM7UUFFMUMsUUFBRyxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVyRCxpQkFBWSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFbkMsa0JBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBZ0IsRUFBRSxDQUFDLENBQUM7UUFDdkQsa0JBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBcUIsRUFBRSxDQUFDLENBQUM7UUFDNUQsYUFBUSxH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aUJBQy9COzhCQXNEWSxhQUFhO3NCQUR2QixLQUFLO3VCQUFDLG9CQUFvQjtnQkFnQmhCLGFBQWE7c0JBRHZCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyVmlld0luaXQsIERpcmVjdGl2ZSwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TG9nZ2VyRmFjdG9yeX0gZnJvbSAnQGVsZGVyYnl0ZS90cy1sb2dnZXInO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzL2ludGVybmFsL09ic2VydmFibGUnO1xuaW1wb3J0IHtjb21iaW5lTGF0ZXN0V2l0aCwgZGVib3VuY2VUaW1lLCBtYXAsIHN3aXRjaE1hcCwgdGFrZVVudGlsfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1NlYXJjaElucHV0fSBmcm9tICcuL21vZGVsL3NlYXJjaC1pbnB1dCc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdH0gZnJvbSAncnhqcy9pbnRlcm5hbC9CZWhhdmlvclN1YmplY3QnO1xuaW1wb3J0IHtTdWJqZWN0fSBmcm9tICdyeGpzL2ludGVybmFsL1N1YmplY3QnO1xuaW1wb3J0IHtjb21iaW5lTGF0ZXN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7RmlsdGVyfSBmcm9tICcuLi8uLi8uLi9jb21tb24vZGF0YS9maWx0ZXJzL2ZpbHRlcic7XG5pbXBvcnQge0ZpbHRlckNvbnRleHR9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9kYXRhL2ZpbHRlcnMvZmlsdGVyLWNvbnRleHQnO1xuaW1wb3J0IHtTZWFyY2hJbnB1dFN0YXRlfSBmcm9tICcuL21vZGVsL3NlYXJjaC1pbnB1dC1zdGF0ZSc7XG5cblxuLyoqXG4gKiBUaGUgc2VhcmNoIGNvbnRhaW5lciBtYW5hZ2VzIGEgZ3JvdXAgb2Ygc2VhcmNoLWlucHV0c1xuICogYW5kIGhvbGRzIHRoZWlyIHZhbHVlcyBpbiBhIGNlbnRyYWwgc2VhcmNoIG1vZGVsLlxuICovXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZWxkZXJTZWFyY2hDb250ZXh0XScsXG4gIGV4cG9ydEFzOiAnZWxkZXJTZWFyY2hDb250ZXh0J1xufSlcbmV4cG9ydCBjbGFzcyBFbGRlclNlYXJjaENvbnRleHREaXJlY3RpdmUgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEZpZWxkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSBmb3JjZWRGaWx0ZXJzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RmlsdGVyW10+KFtdKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGxvZyA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKHRoaXMuY29uc3RydWN0b3IubmFtZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSB1bnN1YnNjcmliZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlYXJjaElucHV0cyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8U2VhcmNoSW5wdXRbXT4oW10pO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZWFyY2hTdGF0ZXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNlYXJjaElucHV0U3RhdGVbXT4oW10pO1xuICBwcml2YXRlIHJlYWRvbmx5IF9maWx0ZXJzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxGaWx0ZXJbXT4oW10pO1xuXG4gIHByaXZhdGUgX2ZpbHRlckNvbnRleHQ6IEZpbHRlckNvbnRleHQ7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIExpZmUgQ3ljbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9zZWFyY2hJbnB1dHMucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCksXG4gICAgICBzd2l0Y2hNYXAoaW5wdXRzID0+IGNvbWJpbmVMYXRlc3QoaW5wdXRzLm1hcChpID0+IGkuc3RhdGUkKSkpLFxuICAgICAgY29tYmluZUxhdGVzdFdpdGgodGhpcy5mb3JjZWRGaWx0ZXJzJCksXG4gICAgICBkZWJvdW5jZVRpbWUoNSksXG4gICAgKS5zdWJzY3JpYmUoKFtzdGF0ZXMsIGZvcmNlZEZpbHRlcnNdKSA9PiB7XG4gICAgICB0aGlzLl9zZWFyY2hTdGF0ZXMubmV4dChzdGF0ZXMpO1xuICAgICAgY29uc3QgdXNlckZpbHRlcnMgPSB0aGlzLmNvbnZlcnRUb0ZpbHRlcnMoc3RhdGVzKTtcbiAgICAgIHRoaXMuX2ZpbHRlcnMubmV4dCh1c2VyRmlsdGVycyk7XG4gICAgICB0aGlzLmFwcGx5RmlsdGVycyh1c2VyRmlsdGVycywgZm9yY2VkRmlsdGVycyk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy51bnN1YnNjcmliZSQubmV4dCgpO1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogUHJvcGVydGllcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBASW5wdXQoJ2VsZGVyU2VhcmNoQ29udGV4dCcpXG4gIHB1YmxpYyBzZXQgZmlsdGVyQ29udGV4dCh2YWx1ZTogRmlsdGVyQ29udGV4dCkge1xuICAgIHRoaXMuX2ZpbHRlckNvbnRleHQgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZmlsdGVyQ29udGV4dCgpOiBGaWx0ZXJDb250ZXh0IHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyQ29udGV4dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JjZWQgZmlsdGVycyBhcmUgYWx3YXlzIG1lcmdlZCBpbnRvIHRoZSBmaW5hbCBGaWx0ZXJDb250ZXh0LlxuICAgKlxuICAgKiBUaGlzIG1lYW5zIHRoZXkgb3ZlcnJpZGUgdXNlciBkZWZpbmVkIGZpbHRlcnMsIGJ1dCBhdHRlbXB0XG4gICAqIHRvIGFsc28ga2VlcCB0aGUgdXNlcnMgaW50ZW50IChieSBtZXJnaW5nKSB0aGVtLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBmb3JjZWRGaWx0ZXJzKGZpbHRlcnM6IEZpbHRlcltdKXtcbiAgICB0aGlzLmZvcmNlZEZpbHRlcnMkLm5leHQoZmlsdGVycyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGZvcmNlZEZpbHRlcnMoKTogRmlsdGVyW10ge1xuICAgIHJldHVybiB0aGlzLmZvcmNlZEZpbHRlcnMkLmdldFZhbHVlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGF0dHJpYnV0ZXMoKTogT2JzZXJ2YWJsZTxTZWFyY2hJbnB1dFtdPiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlYXJjaElucHV0cy5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYXR0cmlidXRlc1NuYXBzaG90KCk6IFNlYXJjaElucHV0W10ge1xuICAgIHJldHVybiB0aGlzLl9zZWFyY2hJbnB1dHMuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgc3RhdGVzJCgpOiBPYnNlcnZhYmxlPFNlYXJjaElucHV0U3RhdGVbXT4ge1xuICAgIHJldHVybiB0aGlzLl9zZWFyY2hTdGF0ZXMuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHN0YXRlc1NuYXBzaG90KCk6IFNlYXJjaElucHV0U3RhdGVbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlYXJjaFN0YXRlcy5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgdXNlciB0b3VjaGVkIGF0dHJpYnV0ZXMuIChpZ25vcmluZyBmYWxsYmFja3MpXG4gICAqL1xuICBwdWJsaWMgZ2V0IHVzZXJEZWZpbmVkQXR0cmlidXRlcyQoKTogT2JzZXJ2YWJsZTxTZWFyY2hJbnB1dFN0YXRlW10+IHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZXMkLnBpcGUoXG4gICAgICBtYXAoc3RhdGVzID0+IHN0YXRlcy5maWx0ZXIocyA9PiAhcy5wcmlzdGluZSkpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGFjdGl2ZSBmaWx0ZXJzXG4gICAqL1xuICBwdWJsaWMgZ2V0IGZpbHRlcnMkKCk6IE9ic2VydmFibGU8RmlsdGVyW10+IHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVycy5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZmlsdGVyc1NuYXBzaG90KCk6IEZpbHRlcltdIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVycy5nZXRWYWx1ZSgpO1xuICB9XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIFB1YmxpYyBBUEkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVyIGEgbmV3IHNlYXJjaCBuYW1lIGluIHRoaXMgY29udGFpbmVyXG4gICAqL1xuICBwdWJsaWMgcmVnaXN0ZXIoc2VhcmNoSW5wdXQ6IFNlYXJjaElucHV0KTogdm9pZCB7XG4gICAgdGhpcy5sb2cuZGVidWcoJ1JlZ2lzdGVyaW5nIHNlYXJjaCBpbnB1dCBbJyArIHNlYXJjaElucHV0Lm5hbWUgKyAnXScpO1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLl9zZWFyY2hJbnB1dHMuZ2V0VmFsdWUoKTtcbiAgICB0aGlzLl9zZWFyY2hJbnB1dHMubmV4dChbLi4uY3VycmVudCwgc2VhcmNoSW5wdXRdKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLmF0dHJpYnV0ZXNTbmFwc2hvdFxuICAgICAgLmZpbHRlcihhdHRyID0+ICFhdHRyLnJlYWRvbmx5KVxuICAgICAgLmZvckVhY2goYSA9PiB7XG4gICAgICAgIGEucmVzZXQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcml2YXRlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgY29udmVydFRvRmlsdGVycyhzdGF0ZXM6IFNlYXJjaElucHV0U3RhdGVbXSk6IEZpbHRlcltdIHtcbiAgICByZXR1cm4gc3RhdGVzXG4gICAgICAubWFwKHMgPT4gbmV3IEZpbHRlcihzLnF1ZXJ5S2V5LCBzLnF1ZXJ5VmFsdWUpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlGaWx0ZXJzKFxuICAgIHVzZXJGaWx0ZXJzOiBGaWx0ZXJbXSxcbiAgICBmb3JjZWRGaWx0ZXJzOiBGaWx0ZXJbXVxuICApOiB2b2lkIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5maWx0ZXJDb250ZXh0O1xuICAgIGlmIChjb250ZXh0KSB7XG4gICAgICBjb250ZXh0LnVwZGF0ZUZpbHRlcnModXNlckZpbHRlcnMpO1xuICAgICAgY29udGV4dC5tZXJnZUZpbHRlcnMoZm9yY2VkRmlsdGVycyk7XG4gICAgICB0aGlzLmxvZy50cmFjZSgnU2VhcmNoLU1vZGVsIGZpbHRlcnMgdXBkYXRlZDonLCBBcnJheS5mcm9tKGNvbnRleHQuZmlsdGVyc1NuYXBzaG90KSk7XG4gICAgfVxuICB9XG5cbn1cblxuIl19
@@ -21,21 +21,15 @@ export class ElderSearchInputDirective {
21
21
  constructor(searchContext, ngModel) {
22
22
  this.searchContext = searchContext;
23
23
  this.ngModel = ngModel;
24
- /***************************************************************************
25
- * *
26
- * Fields *
27
- * *
28
- **************************************************************************/
29
- this.logger = LoggerFactory.getLogger('ElderSearchInputDirective');
30
24
  this._state = new BehaviorSubject(null);
31
- this.unsubscribe$ = new Subject();
25
+ this.destroy$ = new Subject();
26
+ this.log = LoggerFactory.getLogger(this.constructor.name);
32
27
  }
33
28
  /***************************************************************************
34
29
  * *
35
30
  * Life Cycle *
36
31
  * *
37
32
  **************************************************************************/
38
- ngOnInit() { }
39
33
  ngAfterViewInit() {
40
34
  this._extractedName = this.extractName();
41
35
  this.searchContext.register(this);
@@ -44,8 +38,8 @@ export class ElderSearchInputDirective {
44
38
  });
45
39
  }
46
40
  ngOnDestroy() {
47
- this.unsubscribe$.next();
48
- this.unsubscribe$.complete();
41
+ this.destroy$.next();
42
+ this.destroy$.complete();
49
43
  }
50
44
  /***************************************************************************
51
45
  * *
@@ -91,7 +85,7 @@ export class ElderSearchInputDirective {
91
85
  * *
92
86
  **************************************************************************/
93
87
  stateObservable() {
94
- return this.ngModel.valueChanges.pipe(takeUntil(this.unsubscribe$), startWith(this.ngModel.value), map(value => {
88
+ return this.ngModel.valueChanges.pipe(takeUntil(this.destroy$), startWith(this.ngModel.value), map(value => {
95
89
  const queryValue = this.convertRawModelValueToQueryString(value);
96
90
  const pristine = !this.isAttributeValuePresent(value);
97
91
  return new SearchInputState(this.name, queryValue, this.queryKey || this.name, pristine);
@@ -165,9 +159,9 @@ export class ElderSearchInputDirective {
165
159
  return CollectionUtil.flatten(arrays);
166
160
  }
167
161
  }
168
- ElderSearchInputDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderSearchInputDirective, deps: [{ token: i1.ElderSearchContextDirective }, { token: i2.NgModel, host: true }], target: i0.ɵɵFactoryTarget.Directive });
169
- ElderSearchInputDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.0", type: ElderSearchInputDirective, selector: "[elderSearchInput]", inputs: { queryKey: ["elderSearchInputKey", "queryKey"], valueTransform: ["elderSearchInputTransform", "valueTransform"], resolvePath: ["elderSearchInput", "resolvePath"], fallbackValue: ["elderSearchInputFallback", "fallbackValue"] }, exportAs: ["elderSearchInput"], ngImport: i0 });
170
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ElderSearchInputDirective, decorators: [{
162
+ ElderSearchInputDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderSearchInputDirective, deps: [{ token: i1.ElderSearchContextDirective }, { token: i2.NgModel, host: true }], target: i0.ɵɵFactoryTarget.Directive });
163
+ ElderSearchInputDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.0", type: ElderSearchInputDirective, selector: "[elderSearchInput]", inputs: { queryKey: ["elderSearchInputKey", "queryKey"], valueTransform: ["elderSearchInputTransform", "valueTransform"], resolvePath: ["elderSearchInput", "resolvePath"], fallbackValue: ["elderSearchInputFallback", "fallbackValue"] }, exportAs: ["elderSearchInput"], ngImport: i0 });
164
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: ElderSearchInputDirective, decorators: [{
171
165
  type: Directive,
172
166
  args: [{
173
167
  selector: '[elderSearchInput]',
@@ -188,4 +182,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
188
182
  type: Input,
189
183
  args: ['elderSearchInputFallback']
190
184
  }] } });
191
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItc2VhcmNoLWlucHV0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VsZGVyYnl0ZS9uZ3gtc3RhcnRlci9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvc2VhcmNoL2VsZGVyLXNlYXJjaC1pbnB1dC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFBRSxJQUFJLEVBQ2YsS0FBSyxHQUdOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUtyRCxPQUFPLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDakUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFDMUUsT0FBTyxFQUFDLGVBQWUsRUFBRSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ2hELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQzs7OztBQUVyRTs7R0FFRztBQUtILE1BQU0sT0FBTyx5QkFBeUI7SUF5Q3BDOzs7O2dGQUk0RTtJQUU1RSxZQUNVLGFBQTBDLEVBQ2xDLE9BQWdCO1FBRHhCLGtCQUFhLEdBQWIsYUFBYSxDQUE2QjtRQUNsQyxZQUFPLEdBQVAsT0FBTyxDQUFTO1FBL0NsQzs7OztvRkFJNEU7UUFFM0QsV0FBTSxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUU5RCxXQUFNLEdBQUcsSUFBSSxlQUFlLENBQW1CLElBQUksQ0FBQyxDQUFDO1FBSXJELGlCQUFZLEdBQUcs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QixXQUFXO3NCQURqQixLQUFLO3VCQUFDLGtCQUFrQjtnQkFPbEIsYUFBYTtzQkFEbkIsS0FBSzt1QkFBQywwQkFBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBEaXJlY3RpdmUsIEhvc3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMb2dnZXJGYWN0b3J5IH0gZnJvbSAnQGVsZGVyYnl0ZS90cy1sb2dnZXInO1xuaW1wb3J0IHsgRWxkZXJTZWFyY2hDb250ZXh0RGlyZWN0aXZlIH0gZnJvbSAnLi9lbGRlci1zZWFyY2gtY29udGV4dC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMvaW50ZXJuYWwvT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBOZ01vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtTZWFyY2hJbnB1dH0gZnJvbSAnLi9tb2RlbC9zZWFyY2gtaW5wdXQnO1xuaW1wb3J0IHtmaWx0ZXIsIG1hcCwgc3RhcnRXaXRoLCB0YWtlVW50aWx9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7UHJvcGVydHlQYXRoVXRpbH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL3V0aWxzL3Byb3BlcnR5LXBhdGgtdXRpbCc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1NlYXJjaElucHV0U3RhdGV9IGZyb20gJy4vbW9kZWwvc2VhcmNoLWlucHV0LXN0YXRlJztcbmltcG9ydCB7T2JqZWN0c30gZnJvbSAnLi4vLi4vLi4vY29tbW9uL29iamVjdHMnO1xuaW1wb3J0IHtDb2xsZWN0aW9uVXRpbH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL3V0aWxzL2NvbGxlY3Rpb24tdXRpbCc7XG5cbi8qKlxuICogU2VhcmNoIG5hbWUgYWRhcHRlciBmb3IgaW5wdXQgY29udHJvbHMuXG4gKi9cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tlbGRlclNlYXJjaElucHV0XScsXG4gIGV4cG9ydEFzOiAnZWxkZXJTZWFyY2hJbnB1dCdcbn0pXG5leHBvcnQgY2xhc3MgRWxkZXJTZWFyY2hJbnB1dERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBTZWFyY2hJbnB1dCB7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEZpZWxkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignRWxkZXJTZWFyY2hJbnB1dERpcmVjdGl2ZScpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0YXRlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZWFyY2hJbnB1dFN0YXRlPihudWxsKTtcblxuICBwcml2YXRlIF9leHRyYWN0ZWROYW1lOiBzdHJpbmcgfCBudWxsO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgdW5zdWJzY3JpYmUkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvKipcbiAgICogKE9wdGlvbmFsKSBVc3VhbGx5IHRoZSBjb250cm9sIG5hbWUgaXMgdXNlZCwgdGhpcyBhbGxvd3MgYSBjdXN0b20gcXVlcnkga2V5XG4gICAqL1xuICBASW5wdXQoJ2VsZGVyU2VhcmNoSW5wdXRLZXknKVxuICBwdWJsaWMgcXVlcnlLZXk6IHN0cmluZztcblxuICAvKipcbiAgICogKE9wdGlvbmFsKSBGdW5jdGlvbiB3aGljaCB0cmFuc2Zvcm1zIHRoZSB2YWx1ZSBvYmplY3QgdG8gYSBxdWVyeSBwYXJhbSB2YWx1ZVxuICAgKi9cbiAgQElucHV0KCdlbGRlclNlYXJjaElucHV0VHJhbnNmb3JtJylcbiAgcHVibGljIHZhbHVlVHJhbnNmb3JtOiAoKHZhbHVlOiBhbnkpID0+IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbCk7XG5cbiAgLyoqXG4gICAqIChPcHRpb25hbCwgRGVmYXVsdCkgUGF0aCBvbiB0aGUgdmFsdWUgb2JqZWN0IHRvIHVzZSBhcyBxdWVyeSBwYXJhbSB2YWx1ZVxuICAgKiAgdmFsdWUgPSBcInR5cGUuaWRcIlxuICAgKi9cbiAgQElucHV0KCdlbGRlclNlYXJjaElucHV0JylcbiAgcHVibGljIHJlc29sdmVQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIChPcHRpb25hbCkgVXNlIHRoaXMgdmFsdWUgZm9yIHRoZSBxdWVyeSBpZiBub25lIGlzIHByb3ZpZGVkLlxuICAgKi9cbiAgQElucHV0KCdlbGRlclNlYXJjaElucHV0RmFsbGJhY2snKVxuICBwdWJsaWMgZmFsbGJhY2tWYWx1ZTogc3RyaW5nIHwgc3RyaW5nW107XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIENvbnN0cnVjdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzZWFyY2hDb250ZXh0OiBFbGRlclNlYXJjaENvbnRleHREaXJlY3RpdmUsXG4gICAgQEhvc3QoKSBwcml2YXRlIG5nTW9kZWw6IE5nTW9kZWxcbiAgKSB7XG4gIH1cblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogTGlmZSBDeWNsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHsgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fZXh0cmFjdGVkTmFtZSA9IHRoaXMuZXh0cmFjdE5hbWUoKTtcblxuICAgIHRoaXMuc2VhcmNoQ29udGV4dC5yZWdpc3Rlcih0aGlzKTtcblxuICAgIHRoaXMuc3RhdGVPYnNlcnZhYmxlKCkuc3Vic2NyaWJlKHN0YXRlID0+IHtcbiAgICAgIHRoaXMuZW1pdFN0YXRlKHN0YXRlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnVuc3Vic2NyaWJlJC5uZXh0KCk7XG4gICAgdGhpcy51bnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcm9wZXJ0aWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBnZXQgc3RhdGUkKCk6IE9ic2VydmFibGU8U2VhcmNoSW5wdXRTdGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZS5hc09ic2VydmFibGUoKS5waXBlKFxuICAgICAgZmlsdGVyKHMgPT4gISFzKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHN0YXRlU25hcHNob3QoKTogU2VhcmNoSW5wdXRTdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldFZhbHVlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5xdWVyeUtleSkgeyByZXR1cm4gdGhpcy5xdWVyeUtleTsgfVxuICAgIGlmICh0aGlzLl9leHRyYWN0ZWROYW1lKSB7IHJldHVybiB0aGlzLl9leHRyYWN0ZWROYW1lOyB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIHNlYXJjaCBuYW1lIGtleSBuYW1lLicgK1xuICAgICAgJyBFaXRoZXIgc3BlY2lmeSB0aGUgbmFtZSBwcm9wZXJ0eSBvciBleHBsaWNpdGx5IHNldCBbZWxkZXJTZWFyY2hJbnB1dEtleV0uJyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMubmdNb2RlbC52YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcmVhZG9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubmdNb2RlbC5pc0Rpc2FibGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaGFzRmFsbGJhY2soKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNlYXJjaElucHV0U3RhdGUuaXNWYWx1ZURlZmluZWQodGhpcy5mYWxsYmFja1ZhbHVlKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQdWJsaWMgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLm5nTW9kZWwucmVzZXQoKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcml2YXRlIG1ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgc3RhdGVPYnNlcnZhYmxlKCk6IE9ic2VydmFibGU8U2VhcmNoSW5wdXRTdGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLm5nTW9kZWwudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSQpLFxuICAgICAgc3RhcnRXaXRoKHRoaXMubmdNb2RlbC52YWx1ZSksXG4gICAgICBtYXAodmFsdWUgPT4ge1xuXG4gICAgICAgIGNvbnN0IHF1ZXJ5VmFsdWUgPSB0aGlzLmNvbnZlcnRSYXdNb2RlbFZhbHVlVG9RdWVyeVN0cmluZyh2YWx1ZSk7XG4gICAgICAgIGNvbnN0IHByaXN0aW5lID0gIXRoaXMuaXNBdHRyaWJ1dGVWYWx1ZVByZXNlbnQodmFsdWUpO1xuXG4gICAgICAgIHJldHVybiBuZXcgU2VhcmNoSW5wdXRTdGF0ZShcbiAgICAgICAgICB0aGlzLm5hbWUsXG4gICAgICAgICAgcXVlcnlWYWx1ZSxcbiAgICAgICAgICB0aGlzLnF1ZXJ5S2V5IHx8IHRoaXMubmFtZSxcbiAgICAgICAgICBwcmlzdGluZVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0UmF3TW9kZWxWYWx1ZVRvUXVlcnlTdHJpbmcobW9kZWw6IGFueSk6IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbCB7XG5cbiAgICBsZXQgcXVlcnlWYWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfCBudWxsID0gbnVsbDtcblxuICAgIGlmICh0aGlzLmlzQXR0cmlidXRlVmFsdWVQcmVzZW50KG1vZGVsKSkge1xuICAgICAgLy8gQXR0cmlidXRlIHZhbHVlIGlzIHByZXNlbnRcbiAgICAgIHF1ZXJ5VmFsdWUgPSB0aGlzLnJlc29sdmVWYWx1ZShtb2RlbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmhhc0ZhbGxiYWNrKSB7XG4gICAgICAgIHF1ZXJ5VmFsdWUgPSB0aGlzLmZhbGxiYWNrVmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBxdWVyeVZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0U3RhdGUoc3RhdGU6IFNlYXJjaElucHV0U3RhdGUpOiB2b2lkIHtcbiAgICB0aGlzLl9zdGF0ZS5uZXh0KHN0YXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNBdHRyaWJ1dGVWYWx1ZVByZXNlbnQodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTZWFyY2hJbnB1dFN0YXRlLmlzVmFsdWVEZWZpbmVkKHZhbHVlKVxuICAgICAgJiYgKHZhbHVlICsgJycpLmxlbmd0aCAhPT0gMDsgLy8gPz8/XG4gIH1cblxuXG4gIHByaXZhdGUgcmVzb2x2ZVZhbHVlKHZhbHVlOiBhbnkpOiBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGwge1xuXG4gICAgaWYgKE9iamVjdHMubm9uTnVsbCh2YWx1ZSkpIHtcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5KSB7XG5cbiAgICAgICAgY29uc3QgcmVzb2x2ZWRWYWx1ZXMgPSB2YWx1ZVxuICAgICAgICAgIC5tYXAodiA9PiB0aGlzLnJlc29sdmVTaW5nbGVWYWx1ZSh2KSlcbiAgICAgICAgICAuZmlsdGVyKHYgPT4gT2JqZWN0cy5ub25OdWxsKHYpKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5jb25jYXRJZk5lY2Vzc2FyeShyZXNvbHZlZFZhbHVlcyk7XG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc29sdmVTaW5nbGVWYWx1ZSh2YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICB9XG5cblxuICBwcml2YXRlIHJlc29sdmVTaW5nbGVWYWx1ZSh2YWx1ZTogYW55KTogc3RyaW5nIHwgc3RyaW5nW10gfCBudWxsIHtcbiAgICB2YWx1ZSA9IFByb3BlcnR5UGF0aFV0aWwucmVzb2x2ZVZhbHVlKHZhbHVlLCB0aGlzLnJlc29sdmVQYXRoKTtcbiAgICB2YWx1ZSA9IHRoaXMudmFsdWVUcmFuc2Zvcm0gPyB0aGlzLnZhbHVlVHJhbnNmb3JtKHZhbHVlKSA6IHZhbHVlO1xuXG4gICAgaWYgKE9iamVjdHMubm9uTnVsbCh2YWx1ZSkpIHtcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICAgIC5maWx0ZXIoaSA9PiBPYmplY3RzLm5vbk51bGwoaSkpXG4gICAgICAgICAgLm1hcChpID0+IGkudG9TdHJpbmcoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBleHRyYWN0TmFtZSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5uZ01vZGVsLm5hbWU7XG4gIH1cblxuICBwcml2YXRlIGNvbmNhdElmTmVjZXNzYXJ5KHZhbHVlczogKHN0cmluZyB8IHN0cmluZ1tdKVtdKTogYW55W10ge1xuICAgIGNvbnN0IGFycmF5cyA9IHZhbHVlcy5tYXAodiA9PiB7XG4gICAgICBpZiAodiBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgIHJldHVybiB2O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFt2XTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBDb2xsZWN0aW9uVXRpbC5mbGF0dGVuKGFycmF5cyk7XG4gIH1cblxufVxuIl19
185
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxkZXItc2VhcmNoLWlucHV0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2VsZGVyYnl0ZS9uZ3gtc3RhcnRlci9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvc2VhcmNoL2VsZGVyLXNlYXJjaC1pbnB1dC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFBRSxJQUFJLEVBQ2YsS0FBSyxHQUdOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUtyRCxPQUFPLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDakUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFDMUUsT0FBTyxFQUFDLGVBQWUsRUFBRSxPQUFPLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ2hELE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQzs7OztBQUVyRTs7R0FFRztBQUtILE1BQU0sT0FBTyx5QkFBeUI7SUFzQ3BDOzs7O2dGQUk0RTtJQUU1RSxZQUNVLGFBQTBDLEVBQ2xDLE9BQWdCO1FBRHhCLGtCQUFhLEdBQWIsYUFBYSxDQUE2QjtRQUNsQyxZQUFPLEdBQVAsT0FBTyxDQUFTO1FBYmpCLFdBQU0sR0FBRyxJQUFJLGVBQWUsQ0FBbUIsSUFBSSxDQUFDLENBQUM7UUFFckQsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDL0IsUUFBRyxHQUFHLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcs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QUMsa0JBQWtCO2dCQU9sQixhQUFhO3NCQURuQixLQUFLO3VCQUFDLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIERpcmVjdGl2ZSwgSG9zdCxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExvZ2dlckZhY3RvcnkgfSBmcm9tICdAZWxkZXJieXRlL3RzLWxvZ2dlcic7XG5pbXBvcnQgeyBFbGRlclNlYXJjaENvbnRleHREaXJlY3RpdmUgfSBmcm9tICcuL2VsZGVyLXNlYXJjaC1jb250ZXh0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcy9pbnRlcm5hbC9PYnNlcnZhYmxlJztcbmltcG9ydCB7IE5nTW9kZWwgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1NlYXJjaElucHV0fSBmcm9tICcuL21vZGVsL3NlYXJjaC1pbnB1dCc7XG5pbXBvcnQge2ZpbHRlciwgbWFwLCBzdGFydFdpdGgsIHRha2VVbnRpbH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtQcm9wZXJ0eVBhdGhVdGlsfSBmcm9tICcuLi8uLi8uLi9jb21tb24vdXRpbHMvcHJvcGVydHktcGF0aC11dGlsJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0fSBmcm9tICdyeGpzJztcbmltcG9ydCB7U2VhcmNoSW5wdXRTdGF0ZX0gZnJvbSAnLi9tb2RlbC9zZWFyY2gtaW5wdXQtc3RhdGUnO1xuaW1wb3J0IHtPYmplY3RzfSBmcm9tICcuLi8uLi8uLi9jb21tb24vb2JqZWN0cyc7XG5pbXBvcnQge0NvbGxlY3Rpb25VdGlsfSBmcm9tICcuLi8uLi8uLi9jb21tb24vdXRpbHMvY29sbGVjdGlvbi11dGlsJztcblxuLyoqXG4gKiBTZWFyY2ggbmFtZSBhZGFwdGVyIGZvciBpbnB1dCBjb250cm9scy5cbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2VsZGVyU2VhcmNoSW5wdXRdJyxcbiAgZXhwb3J0QXM6ICdlbGRlclNlYXJjaElucHV0J1xufSlcbmV4cG9ydCBjbGFzcyBFbGRlclNlYXJjaElucHV0RGlyZWN0aXZlIGltcGxlbWVudHMgT25EZXN0cm95LCBBZnRlclZpZXdJbml0LCBTZWFyY2hJbnB1dCB7XG5cbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqIEZpZWxkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgLyoqXG4gICAqIChPcHRpb25hbCkgVXN1YWxseSB0aGUgY29udHJvbCBuYW1lIGlzIHVzZWQsIHRoaXMgYWxsb3dzIGEgY3VzdG9tIHF1ZXJ5IGtleVxuICAgKi9cbiAgQElucHV0KCdlbGRlclNlYXJjaElucHV0S2V5JylcbiAgcHVibGljIHF1ZXJ5S2V5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIChPcHRpb25hbCkgRnVuY3Rpb24gd2hpY2ggdHJhbnNmb3JtcyB0aGUgdmFsdWUgb2JqZWN0IHRvIGEgcXVlcnkgcGFyYW0gdmFsdWVcbiAgICovXG4gIEBJbnB1dCgnZWxkZXJTZWFyY2hJbnB1dFRyYW5zZm9ybScpXG4gIHB1YmxpYyB2YWx1ZVRyYW5zZm9ybTogKCh2YWx1ZTogYW55KSA9PiBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGwpO1xuXG4gIC8qKlxuICAgKiAoT3B0aW9uYWwsIERlZmF1bHQpIFBhdGggb24gdGhlIHZhbHVlIG9iamVjdCB0byB1c2UgYXMgcXVlcnkgcGFyYW0gdmFsdWVcbiAgICogIHZhbHVlID0gXCJ0eXBlLmlkXCJcbiAgICovXG4gIEBJbnB1dCgnZWxkZXJTZWFyY2hJbnB1dCcpXG4gIHB1YmxpYyByZXNvbHZlUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiAoT3B0aW9uYWwpIFVzZSB0aGlzIHZhbHVlIGZvciB0aGUgcXVlcnkgaWYgbm9uZSBpcyBwcm92aWRlZC5cbiAgICovXG4gIEBJbnB1dCgnZWxkZXJTZWFyY2hJbnB1dEZhbGxiYWNrJylcbiAgcHVibGljIGZhbGxiYWNrVmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0YXRlID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTZWFyY2hJbnB1dFN0YXRlPihudWxsKTtcbiAgcHJpdmF0ZSBfZXh0cmFjdGVkTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbG9nID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIodGhpcy5jb25zdHJ1Y3Rvci5uYW1lKTtcblxuICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogQ29uc3RydWN0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNlYXJjaENvbnRleHQ6IEVsZGVyU2VhcmNoQ29udGV4dERpcmVjdGl2ZSxcbiAgICBASG9zdCgpIHByaXZhdGUgbmdNb2RlbDogTmdNb2RlbFxuICApIHtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBMaWZlIEN5Y2xlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cbiAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9leHRyYWN0ZWROYW1lID0gdGhpcy5leHRyYWN0TmFtZSgpO1xuXG4gICAgdGhpcy5zZWFyY2hDb250ZXh0LnJlZ2lzdGVyKHRoaXMpO1xuXG4gICAgdGhpcy5zdGF0ZU9ic2VydmFibGUoKS5zdWJzY3JpYmUoc3RhdGUgPT4ge1xuICAgICAgdGhpcy5lbWl0U3RhdGUoc3RhdGUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcm9wZXJ0aWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyBnZXQgc3RhdGUkKCk6IE9ic2VydmFibGU8U2VhcmNoSW5wdXRTdGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZS5hc09ic2VydmFibGUoKS5waXBlKFxuICAgICAgZmlsdGVyKHMgPT4gISFzKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHN0YXRlU25hcHNob3QoKTogU2VhcmNoSW5wdXRTdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlLmdldFZhbHVlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5xdWVyeUtleSkgeyByZXR1cm4gdGhpcy5xdWVyeUtleTsgfVxuICAgIGlmICh0aGlzLl9leHRyYWN0ZWROYW1lKSB7IHJldHVybiB0aGlzLl9leHRyYWN0ZWROYW1lOyB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIHNlYXJjaCBuYW1lIGtleSBuYW1lLicgK1xuICAgICAgJyBFaXRoZXIgc3BlY2lmeSB0aGUgbmFtZSBwcm9wZXJ0eSBvciBleHBsaWNpdGx5IHNldCBbZWxkZXJTZWFyY2hJbnB1dEtleV0uJyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMubmdNb2RlbC52YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgcmVhZG9ubHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubmdNb2RlbC5pc0Rpc2FibGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaGFzRmFsbGJhY2soKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNlYXJjaElucHV0U3RhdGUuaXNWYWx1ZURlZmluZWQodGhpcy5mYWxsYmFja1ZhbHVlKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQdWJsaWMgQVBJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLm5nTW9kZWwucmVzZXQoKTtcbiAgfVxuXG4gIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlxuICAgKiBQcml2YXRlIG1ldGhvZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpcbiAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG4gIHByaXZhdGUgc3RhdGVPYnNlcnZhYmxlKCk6IE9ic2VydmFibGU8U2VhcmNoSW5wdXRTdGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLm5nTW9kZWwudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICBzdGFydFdpdGgodGhpcy5uZ01vZGVsLnZhbHVlKSxcbiAgICAgIG1hcCh2YWx1ZSA9PiB7XG5cbiAgICAgICAgY29uc3QgcXVlcnlWYWx1ZSA9IHRoaXMuY29udmVydFJhd01vZGVsVmFsdWVUb1F1ZXJ5U3RyaW5nKHZhbHVlKTtcbiAgICAgICAgY29uc3QgcHJpc3RpbmUgPSAhdGhpcy5pc0F0dHJpYnV0ZVZhbHVlUHJlc2VudCh2YWx1ZSk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBTZWFyY2hJbnB1dFN0YXRlKFxuICAgICAgICAgIHRoaXMubmFtZSxcbiAgICAgICAgICBxdWVyeVZhbHVlLFxuICAgICAgICAgIHRoaXMucXVlcnlLZXkgfHwgdGhpcy5uYW1lLFxuICAgICAgICAgIHByaXN0aW5lXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRSYXdNb2RlbFZhbHVlVG9RdWVyeVN0cmluZyhtb2RlbDogYW55KTogc3RyaW5nIHwgc3RyaW5nW10gfCBudWxsIHtcblxuICAgIGxldCBxdWVyeVZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGwgPSBudWxsO1xuXG4gICAgaWYgKHRoaXMuaXNBdHRyaWJ1dGVWYWx1ZVByZXNlbnQobW9kZWwpKSB7XG4gICAgICAvLyBBdHRyaWJ1dGUgdmFsdWUgaXMgcHJlc2VudFxuICAgICAgcXVlcnlWYWx1ZSA9IHRoaXMucmVzb2x2ZVZhbHVlKG1vZGVsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuaGFzRmFsbGJhY2spIHtcbiAgICAgICAgcXVlcnlWYWx1ZSA9IHRoaXMuZmFsbGJhY2tWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHF1ZXJ5VmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGVtaXRTdGF0ZShzdGF0ZTogU2VhcmNoSW5wdXRTdGF0ZSk6IHZvaWQge1xuICAgIHRoaXMuX3N0YXRlLm5leHQoc3RhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0F0dHJpYnV0ZVZhbHVlUHJlc2VudCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFNlYXJjaElucHV0U3RhdGUuaXNWYWx1ZURlZmluZWQodmFsdWUpXG4gICAgICAmJiAodmFsdWUgKyAnJykubGVuZ3RoICE9PSAwOyAvLyA/Pz9cbiAgfVxuXG5cbiAgcHJpdmF0ZSByZXNvbHZlVmFsdWUodmFsdWU6IGFueSk6IHN0cmluZyB8IHN0cmluZ1tdIHwgbnVsbCB7XG4gICAgaWYgKE9iamVjdHMubm9uTnVsbCh2YWx1ZSkpIHtcbiAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEFycmF5KSB7XG5cbiAgICAgICAgY29uc3QgcmVzb2x2ZWRWYWx1ZXMgPSB2YWx1ZVxuICAgICAgICAgIC5tYXAodiA9PiB0aGlzLnJlc29sdmVTaW5nbGVWYWx1ZSh2KSlcbiAgICAgICAgICAuZmlsdGVyKHYgPT4gT2JqZWN0cy5ub25OdWxsKHYpKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5jb25jYXRJZk5lY2Vzc2FyeShyZXNvbHZlZFZhbHVlcyk7XG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc29sdmVTaW5nbGVWYWx1ZSh2YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVNpbmdsZVZhbHVlKHZhbHVlOiBhbnkpOiBzdHJpbmcgfCBzdHJpbmdbXSB8IG51bGwge1xuICAgIHZhbHVlID0gUHJvcGVydHlQYXRoVXRpbC5yZXNvbHZlVmFsdWUodmFsdWUsIHRoaXMucmVzb2x2ZVBhdGgpO1xuICAgIHZhbHVlID0gdGhpcy52YWx1ZVRyYW5zZm9ybSA/IHRoaXMudmFsdWVUcmFuc2Zvcm0odmFsdWUpIDogdmFsdWU7XG5cbiAgICBpZiAoT2JqZWN0cy5ub25OdWxsKHZhbHVlKSkge1xuICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICAgICAgLmZpbHRlcihpID0+IE9iamVjdHMubm9uTnVsbChpKSlcbiAgICAgICAgICAubWFwKGkgPT4gaS50b1N0cmluZygpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGV4dHJhY3ROYW1lKCk6IHN0cmluZyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLm5nTW9kZWwubmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgY29uY2F0SWZOZWNlc3NhcnkodmFsdWVzOiAoc3RyaW5nIHwgc3RyaW5nW10pW10pOiBhbnlbXSB7XG4gICAgY29uc3QgYXJyYXlzID0gdmFsdWVzLm1hcCh2ID0+IHtcbiAgICAgIGlmICh2IGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gW3ZdO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDb2xsZWN0aW9uVXRpbC5mbGF0dGVuKGFycmF5cyk7XG4gIH1cblxufVxuIl19