@coolon/angular-ui-powerups 16.1.0-aplpha.58 → 16.1.0-aplpha.6

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 (266) hide show
  1. package/assets/activities/input-activities.scss +2 -10
  2. package/assets/form.scss +27 -45
  3. package/assets/table.scss +18 -15
  4. package/assets/tabs.scss +6 -2
  5. package/esm2022/lib/angular-ui-powerups.module.mjs +5 -5
  6. package/esm2022/lib/components/alignment.mjs +1 -1
  7. package/esm2022/lib/components/busy-overlay/busy-overlay.component.mjs +11 -6
  8. package/esm2022/lib/components/cards/abstract-card-container.component.mjs +4 -4
  9. package/esm2022/lib/components/cards/card-container/card-container.component.mjs +4 -4
  10. package/esm2022/lib/components/commands/command/command.component.mjs +7 -4
  11. package/esm2022/lib/components/commands/command-face/command-face.component.mjs +5 -13
  12. package/esm2022/lib/components/commands/command-face.mjs +1 -1
  13. package/esm2022/lib/components/commands/flex.component.mjs +4 -4
  14. package/esm2022/lib/components/commands/group/command-container.mjs +1 -1
  15. package/esm2022/lib/components/commands/group/popup-aware.component.mjs +1 -1
  16. package/esm2022/lib/components/commands/group/popup-container.mjs +1 -1
  17. package/esm2022/lib/components/commands/group/popup-menu/abstract-popup-menu.component.mjs +13 -13
  18. package/esm2022/lib/components/commands/group/popup-menu/more-menu.component.mjs +4 -4
  19. package/esm2022/lib/components/commands/group/popup-menu/popup-menu-renderer/popup-menu-renderer.component.mjs +4 -4
  20. package/esm2022/lib/components/commands/group/popup-menu/popup-menu.component.mjs +5 -5
  21. package/esm2022/lib/components/commands/group/tool-bar/tool-bar.component.mjs +18 -11
  22. package/esm2022/lib/components/commands/separator.component.mjs +4 -4
  23. package/esm2022/lib/components/components.module.mjs +21 -33
  24. package/esm2022/lib/components/disposable-component.mjs +40 -11
  25. package/esm2022/lib/components/empty-state/empty-state.component.mjs +9 -5
  26. package/esm2022/lib/components/exports.mjs +2 -6
  27. package/esm2022/lib/components/focus-container/focus-container.component.mjs +4 -4
  28. package/esm2022/lib/components/focusable.component.mjs +5 -5
  29. package/esm2022/lib/components/forms/abstract-input.component.mjs +17 -64
  30. package/esm2022/lib/components/forms/abstract-list-input.component.mjs +4 -4
  31. package/esm2022/lib/components/forms/abstract-value-input.component.mjs +4 -4
  32. package/esm2022/lib/components/forms/autocomplete-input/autocomplete-input.component.mjs +6 -5
  33. package/esm2022/lib/components/forms/checkbox-input/checkbox-input.component.mjs +4 -4
  34. package/esm2022/lib/components/forms/multiple-select-input/multiple-select-input.component.mjs +6 -6
  35. package/esm2022/lib/components/forms/number-input/number-input.component.mjs +4 -4
  36. package/esm2022/lib/components/forms/password-input/password-input.component.mjs +4 -4
  37. package/esm2022/lib/components/forms/select-input/select-input.component.mjs +11 -12
  38. package/esm2022/lib/components/forms/string-input/string-input.component.mjs +5 -5
  39. package/esm2022/lib/components/forms/text-input/text-input.component.mjs +4 -4
  40. package/esm2022/lib/components/icon/icon.component.mjs +5 -8
  41. package/esm2022/lib/components/labelled-value/labelled-value.component.mjs +4 -4
  42. package/esm2022/lib/components/loading-container/loading-container.component.mjs +11 -6
  43. package/esm2022/lib/components/noop/noop.component.mjs +7 -5
  44. package/esm2022/lib/components/resize-aware.component.mjs +27 -64
  45. package/esm2022/lib/components/scroll-container/scroll-container.component.mjs +5 -5
  46. package/esm2022/lib/components/section-header/section-header.component.mjs +4 -4
  47. package/esm2022/lib/components/switch-case/switch-case.component.mjs +11 -11
  48. package/esm2022/lib/components/tables/abstract-table-model.mjs +23 -23
  49. package/esm2022/lib/components/tables/abstract-table.component.mjs +7 -21
  50. package/esm2022/lib/components/tables/column/column-list-model.mjs +44 -0
  51. package/esm2022/lib/components/tables/column/column-model.mjs +6 -17
  52. package/esm2022/lib/components/tables/column/column-template/column-template.directive.mjs +4 -4
  53. package/esm2022/lib/components/tables/column/custom-template-column-model.mjs +3 -3
  54. package/esm2022/lib/components/tables/column/custom-value-column-model.mjs +5 -5
  55. package/esm2022/lib/components/tables/column/editor-controls-column-model.mjs +5 -5
  56. package/esm2022/lib/components/tables/column/list-propery-column-model.mjs +5 -6
  57. package/esm2022/lib/components/tables/column/property-column-model.mjs +5 -5
  58. package/esm2022/lib/components/tables/column/selection-column-model.mjs +3 -3
  59. package/esm2022/lib/components/tables/editor/edit-row-controls/edit-row-controls.component.mjs +6 -6
  60. package/esm2022/lib/components/tables/editor/edit-session.mjs +2 -4
  61. package/esm2022/lib/components/tables/editor/editable-cell-renderer.mjs +1 -1
  62. package/esm2022/lib/components/tables/filter/column-text-search-formatter.mjs +1 -1
  63. package/esm2022/lib/components/tables/filter/enable-cell-text-search.decorator.mjs +2 -3
  64. package/esm2022/lib/components/tables/filter/table-filter-model.mjs +2 -4
  65. package/esm2022/lib/components/tables/filter/text-search-predicate.mjs +2 -16
  66. package/esm2022/lib/components/tables/paginator/paginator.component.mjs +4 -4
  67. package/esm2022/lib/components/tables/renderer/cell-editors.mjs +1 -1
  68. package/esm2022/lib/components/tables/renderer/cell-portal-ref.mjs +3 -1
  69. package/esm2022/lib/components/tables/renderer/default-cell-renderer/default-cell-renderer.component.mjs +7 -5
  70. package/esm2022/lib/components/tables/renderer/default-header-cell-renderer/default-header-cell-renderer.component.mjs +7 -5
  71. package/esm2022/lib/components/tables/renderer/select-header-cell/selection-header-cell.component.mjs +4 -4
  72. package/esm2022/lib/components/tables/renderer/selection-cell/selection-cell.component.mjs +3 -3
  73. package/esm2022/lib/components/tables/renderer/table-body/table-body.component.mjs +48 -185
  74. package/esm2022/lib/components/tables/renderer/table-cell/table-cell.component.mjs +4 -4
  75. package/esm2022/lib/components/tables/renderer/table-header-cell/table-header-cell.component.mjs +7 -5
  76. package/esm2022/lib/components/tables/renderer/table-more-menu/table-more-menu-popup/table-more-menu-popup.component.mjs +4 -4
  77. package/esm2022/lib/components/tables/renderer/table-more-menu/table-more-menu.component.mjs +5 -10
  78. package/esm2022/lib/components/tables/table/table-model.mjs +1 -1
  79. package/esm2022/lib/components/tables/table/table.component.mjs +69 -14
  80. package/esm2022/lib/components/tables/table-row-menu/table-row-menu.component.mjs +4 -4
  81. package/esm2022/lib/components/tables/tree-table/decorated-tree-node.mjs +1 -1
  82. package/esm2022/lib/components/tables/tree-table/flattened-tree-list-model.mjs +1 -1
  83. package/esm2022/lib/components/tables/tree-table/tree-expansion-model.mjs +1 -1
  84. package/esm2022/lib/components/tables/tree-table/tree-inheritance-icon/tree-inheritance-icon.component.mjs +7 -5
  85. package/esm2022/lib/components/tables/tree-table/tree-label-cell-renderer/tree-label-cell-renderer.component.mjs +4 -4
  86. package/esm2022/lib/components/tables/tree-table/tree-label-column-model.mjs +4 -4
  87. package/esm2022/lib/components/tables/tree-table/tree-table-component.mjs +7 -10
  88. package/esm2022/lib/components/tables/tree-table/tree-table-model.mjs +2 -2
  89. package/esm2022/lib/components/text/markdown/markdown.component.mjs +5 -5
  90. package/esm2022/lib/components/track.mjs +1 -1
  91. package/esm2022/lib/components/types/bounds.class.mjs +1 -1
  92. package/esm2022/lib/components/vertical-focus-container/vertical-focus-container.component.mjs +4 -4
  93. package/esm2022/lib/directives/command.directive.mjs +5 -5
  94. package/esm2022/lib/directives/directives.module.mjs +6 -6
  95. package/esm2022/lib/directives/exports.mjs +1 -2
  96. package/esm2022/lib/directives/focus-binding-factory.mjs +4 -4
  97. package/esm2022/lib/directives/focus-binding.directive.mjs +5 -5
  98. package/esm2022/lib/directives/focus-binding.mjs +1 -1
  99. package/esm2022/lib/directives/garbage-collector.directive.mjs +4 -5
  100. package/esm2022/lib/directives/highlight-text-model.directive.mjs +4 -4
  101. package/esm2022/lib/directives/highlight.pipe.mjs +4 -4
  102. package/esm2022/lib/interaction/abstract-interaction-context.mjs +1 -1
  103. package/esm2022/lib/interaction/activity-ref.mjs +2 -2
  104. package/esm2022/lib/interaction/activity.mjs +7 -7
  105. package/esm2022/lib/interaction/alert.mjs +1 -1
  106. package/esm2022/lib/interaction/components/abstract-confirm-dialog.component.mjs +4 -4
  107. package/esm2022/lib/interaction/components/abstract-dialog.component.mjs +6 -5
  108. package/esm2022/lib/interaction/components/activity-actions/activity-actions.component.mjs +5 -5
  109. package/esm2022/lib/interaction/components/activity-body/activity-body.component.mjs +4 -4
  110. package/esm2022/lib/interaction/components/activity-container/activity-container.component.mjs +4 -4
  111. package/esm2022/lib/interaction/components/activity-container/activity-outlet/activity-outlet.component.mjs +6 -4
  112. package/esm2022/lib/interaction/components/activity-title/activity-title.component.mjs +3 -3
  113. package/esm2022/lib/interaction/components/activity-triggers/abstract-activity-trigger.component.mjs +3 -3
  114. package/esm2022/lib/interaction/components/activity-triggers/inline-activity-trigger/inline-activity-trigger.component.mjs +4 -4
  115. package/esm2022/lib/interaction/components/activity-triggers/modal-activity-trigger/modal-activity-trigger.component.mjs +4 -4
  116. package/esm2022/lib/interaction/components/activity-triggers/popup-activity-trigger/popup-activity-trigger.component.mjs +4 -4
  117. package/esm2022/lib/interaction/components/add-card-activity/add-card-activity.component.mjs +4 -4
  118. package/esm2022/lib/interaction/components/add-item-interaction-context/add-item-interaction-context.component.mjs +4 -4
  119. package/esm2022/lib/interaction/components/alert-dialog/alert-dialog.component.mjs +4 -4
  120. package/esm2022/lib/interaction/components/confirm-then-dialog/confirm-then-dialog.component.mjs +4 -4
  121. package/esm2022/lib/interaction/components/confirm-then-execute-dialog/confirm-then-execute-dialog.component.mjs +4 -4
  122. package/esm2022/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.mjs +4 -4
  123. package/esm2022/lib/interaction/components/editors/edit-context.mjs +1 -1
  124. package/esm2022/lib/interaction/components/editors/inline-string-editor/inline-editor-model.mjs +2 -2
  125. package/esm2022/lib/interaction/components/editors/inline-string-editor/inline-string-editor.component.mjs +5 -5
  126. package/esm2022/lib/interaction/components/inplace-interaction-context/in-place-interaction-context.component.mjs +4 -4
  127. package/esm2022/lib/interaction/components/input-activities/input-activity.mjs +4 -5
  128. package/esm2022/lib/interaction/components/input-activities/select-input-activity.mjs +4 -7
  129. package/esm2022/lib/interaction/components/input-activities/string-input-activity.mjs +6 -11
  130. package/esm2022/lib/interaction/components/popup-interaction-context/popup-interaction-context.component.mjs +5 -6
  131. package/esm2022/lib/interaction/confirm.mjs +1 -1
  132. package/esm2022/lib/interaction/directives/interaction-context-trigger-for.directive.mjs +5 -5
  133. package/esm2022/lib/interaction/in-place-interaction-context.mjs +1 -1
  134. package/esm2022/lib/interaction/interaction-context.mjs +1 -1
  135. package/esm2022/lib/interaction/interaction.module.mjs +19 -19
  136. package/esm2022/lib/interaction/route-synchronisation-adapter.mjs +1 -1
  137. package/esm2022/lib/interaction/services/interaction-service-routing-adapter.mjs +1 -1
  138. package/esm2022/lib/interaction/services/interaction.service.mjs +6 -6
  139. package/esm2022/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context-factory.mjs +6 -5
  140. package/esm2022/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context.mjs +2 -1
  141. package/esm2022/lib/interaction/services/modal-interaction-context.factory.mjs +1 -1
  142. package/esm2022/lib/place/components/abstract-place-navigation.component.mjs +5 -15
  143. package/esm2022/lib/place/components/list-place-nav/list-place-nav.component.mjs +4 -4
  144. package/esm2022/lib/place/components/not-authorised-notice/not-authorised-notice.component.mjs +7 -5
  145. package/esm2022/lib/place/components/place-outlet/place-outlet.component.mjs +5 -5
  146. package/esm2022/lib/place/components/place-outlet/route-animations.mjs +1 -1
  147. package/esm2022/lib/place/components/side-place-navigation/side-place-navigation.component.mjs +6 -6
  148. package/esm2022/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.mjs +4 -4
  149. package/esm2022/lib/place/guards/consolidated-param-map.mjs +1 -1
  150. package/esm2022/lib/place/guards/noop-auth-guard.service.mjs +7 -5
  151. package/esm2022/lib/place/guards/place.guard.mjs +5 -5
  152. package/esm2022/lib/place/navigation/place-component-deactivation-handler.mjs +1 -1
  153. package/esm2022/lib/place/navigation/session/abstract-pop-state-navigation.mjs +1 -1
  154. package/esm2022/lib/place/navigation/session/event-cleanup/event-clean-up-session.mjs +1 -1
  155. package/esm2022/lib/place/navigation/session/event-cleanup/wait-until-leaving-interaction-transition-cancelled.mjs +1 -1
  156. package/esm2022/lib/place/navigation/session/event-cleanup/wait-until-link-triggered-navigation-interaction-cancelation-type-determined.mjs +1 -1
  157. package/esm2022/lib/place/navigation/session/event-cleanup/wait-until-popstate-during-can-deactivate-transition-finishes.mjs +1 -1
  158. package/esm2022/lib/place/navigation/session/interactions/navigating-during-interaction.mjs +2 -2
  159. package/esm2022/lib/place/navigation/session/interactions/pop-state-during-interaction-navigation.mjs +1 -1
  160. package/esm2022/lib/place/navigation/session/interactions/remove-last-interaction-from-url-navigation-session.mjs +3 -3
  161. package/esm2022/lib/place/navigation/session/interactions/synchronise-interaction-context-ids-with-route.mjs +5 -2
  162. package/esm2022/lib/place/navigation/session/navigating.mjs +2 -2
  163. package/esm2022/lib/place/navigation/session/navigation-context.mjs +1 -1
  164. package/esm2022/lib/place/navigation/session/navigation-session.mjs +1 -1
  165. package/esm2022/lib/place/navigation/session/pop-state-navigation.mjs +1 -1
  166. package/esm2022/lib/place/place-access-guard.mjs +1 -1
  167. package/esm2022/lib/place/place-component.mjs +43 -30
  168. package/esm2022/lib/place/place-config.mjs +1 -1
  169. package/esm2022/lib/place/place-definition.mjs +1 -1
  170. package/esm2022/lib/place/place-history.mjs +7 -5
  171. package/esm2022/lib/place/place-router.mjs +18 -20
  172. package/esm2022/lib/place/place.decorator.mjs +1 -1
  173. package/esm2022/lib/place/place.module.mjs +5 -5
  174. package/esm2022/lib/place/route/formatter.mjs +2 -2
  175. package/esm2022/lib/place/route/json-types.mjs +1 -1
  176. package/esm2022/lib/place/route/parameter-decorators.mjs +50 -54
  177. package/esm2022/lib/place/route/parameter-definition.mjs +1 -1
  178. package/esm2022/lib/place/route/parameter-sanitiser.mjs +1 -1
  179. package/esm2022/lib/place/route/parameter-snapshot.mjs +1 -1
  180. package/esm2022/lib/place/route/visit-segment-sanitiser.mjs +1 -1
  181. package/esm2022/lib/place/url-service.mjs +4 -4
  182. package/esm2022/lib/place/url-snapshot.mjs +1 -1
  183. package/esm2022/lib/place/visit-segment.mjs +1 -1
  184. package/esm2022/lib/place/visit.mjs +1 -1
  185. package/esm2022/lib/services/markdown/markdown.service.mjs +7 -5
  186. package/esm2022/lib/services/markdown/pill-plugin.mjs +3 -1
  187. package/esm2022/lib/services/visibility-service.mjs +7 -7
  188. package/fesm2022/coolon-angular-ui-powerups.mjs +1705 -2035
  189. package/fesm2022/coolon-angular-ui-powerups.mjs.map +1 -1
  190. package/lib/components/busy-overlay/busy-overlay.component.d.ts +4 -1
  191. package/lib/components/commands/command/command.component.d.ts +3 -2
  192. package/lib/components/commands/command-face/command-face.component.d.ts +0 -2
  193. package/lib/components/commands/group/popup-menu/abstract-popup-menu.component.d.ts +2 -2
  194. package/lib/components/commands/group/tool-bar/tool-bar.component.d.ts +7 -3
  195. package/lib/components/components.module.d.ts +21 -23
  196. package/lib/components/disposable-component.d.ts +8 -3
  197. package/lib/components/empty-state/empty-state.component.d.ts +4 -1
  198. package/lib/components/exports.d.ts +1 -5
  199. package/lib/components/forms/abstract-input.component.d.ts +5 -13
  200. package/lib/components/forms/select-input/select-input.component.d.ts +3 -4
  201. package/lib/components/loading-container/loading-container.component.d.ts +4 -1
  202. package/lib/components/noop/noop.component.d.ts +1 -0
  203. package/lib/components/resize-aware.component.d.ts +6 -25
  204. package/lib/components/switch-case/switch-case.component.d.ts +4 -4
  205. package/lib/components/tables/abstract-table-model.d.ts +5 -7
  206. package/lib/components/tables/abstract-table.component.d.ts +4 -5
  207. package/lib/components/tables/column/column-list-model.d.ts +13 -0
  208. package/lib/components/tables/column/column-model.d.ts +2 -6
  209. package/lib/components/tables/column/custom-template-column-model.d.ts +1 -2
  210. package/lib/components/tables/column/custom-value-column-model.d.ts +1 -2
  211. package/lib/components/tables/column/editor-controls-column-model.d.ts +1 -2
  212. package/lib/components/tables/column/list-propery-column-model.d.ts +1 -2
  213. package/lib/components/tables/column/property-column-model.d.ts +1 -2
  214. package/lib/components/tables/column/selection-column-model.d.ts +1 -2
  215. package/lib/components/tables/editor/edit-row-controls/edit-row-controls.component.d.ts +3 -3
  216. package/lib/components/tables/editor/editable-cell-renderer.d.ts +1 -1
  217. package/lib/components/tables/filter/enable-cell-text-search.decorator.d.ts +1 -1
  218. package/lib/components/tables/filter/text-search-predicate.d.ts +0 -9
  219. package/lib/components/tables/renderer/cell-portal-ref.d.ts +3 -2
  220. package/lib/components/tables/renderer/default-cell-renderer/default-cell-renderer.component.d.ts +1 -0
  221. package/lib/components/tables/renderer/default-header-cell-renderer/default-header-cell-renderer.component.d.ts +1 -0
  222. package/lib/components/tables/renderer/table-body/table-body.component.d.ts +18 -19
  223. package/lib/components/tables/renderer/table-header-cell/table-header-cell.component.d.ts +1 -0
  224. package/lib/components/tables/renderer/table-more-menu/table-more-menu.component.d.ts +1 -2
  225. package/lib/components/tables/table/table.component.d.ts +12 -6
  226. package/lib/components/tables/tree-table/tree-expansion-model.d.ts +2 -2
  227. package/lib/components/tables/tree-table/tree-inheritance-icon/tree-inheritance-icon.component.d.ts +1 -0
  228. package/lib/components/tables/tree-table/tree-label-column-model.d.ts +1 -2
  229. package/lib/components/tables/tree-table/tree-table-component.d.ts +2 -5
  230. package/lib/components/text/markdown/markdown.component.d.ts +1 -1
  231. package/lib/directives/exports.d.ts +0 -1
  232. package/lib/interaction/activity-ref.d.ts +2 -2
  233. package/lib/interaction/activity.d.ts +2 -2
  234. package/lib/interaction/components/activity-container/activity-outlet/activity-outlet.component.d.ts +3 -2
  235. package/lib/interaction/components/editors/edit-context.d.ts +1 -1
  236. package/lib/interaction/components/input-activities/string-input-activity.d.ts +1 -1
  237. package/lib/interaction/directives/interaction-context-trigger-for.directive.d.ts +3 -3
  238. package/lib/interaction/interaction.module.d.ts +1 -1
  239. package/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context-factory.d.ts +2 -1
  240. package/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context.d.ts +2 -1
  241. package/lib/place/components/abstract-place-navigation.component.d.ts +0 -1
  242. package/lib/place/components/not-authorised-notice/not-authorised-notice.component.d.ts +1 -0
  243. package/lib/place/guards/noop-auth-guard.service.d.ts +1 -0
  244. package/lib/place/navigation/session/interactions/remove-last-interaction-from-url-navigation-session.d.ts +1 -0
  245. package/lib/place/place-component.d.ts +13 -3
  246. package/lib/place/place-history.d.ts +1 -0
  247. package/lib/place/place-router.d.ts +2 -2
  248. package/lib/place/place.decorator.d.ts +1 -1
  249. package/lib/place/route/json-types.d.ts +3 -1
  250. package/lib/place/visit-segment.d.ts +4 -4
  251. package/lib/place/visit.d.ts +2 -2
  252. package/lib/services/markdown/markdown.service.d.ts +1 -0
  253. package/lib/services/visibility-service.d.ts +1 -1
  254. package/package.json +19 -17
  255. package/esm2022/lib/components/forms/form-field.mjs +0 -2
  256. package/esm2022/lib/components/forms/search-input/search-input.component.mjs +0 -33
  257. package/esm2022/lib/components/loadable-component.mjs +0 -49
  258. package/esm2022/lib/components/tables/column/column-manager.mjs +0 -81
  259. package/esm2022/lib/components/tables/column/column-order-manager.mjs +0 -19
  260. package/esm2022/lib/directives/resize-observer.directive.mjs +0 -40
  261. package/lib/components/forms/form-field.d.ts +0 -5
  262. package/lib/components/forms/search-input/search-input.component.d.ts +0 -10
  263. package/lib/components/loadable-component.d.ts +0 -17
  264. package/lib/components/tables/column/column-manager.d.ts +0 -19
  265. package/lib/components/tables/column/column-order-manager.d.ts +0 -20
  266. package/lib/directives/resize-observer.directive.d.ts +0 -16
@@ -1,8 +1,8 @@
1
1
  import { Injector } from "@angular/core";
2
- import { assert, DelegatingListModel, DirtyTrackingForm, Dsl, EventListenerList, GarbageCollector, MutableListModel, proxify, ProxyRegistry, SelectionModel, ValueModel } from "@coolon/pectin";
2
+ import { assert, DelegatingListModel, DirtyTrackingForm, Dsl, EventListenerList, GarbageCollector, MutableListModel, SelectionModel, ValueModel, proxify, ProxyRegistry } from "@coolon/pectin";
3
3
  import { lang } from "@coolon/typescript-utilities";
4
4
  import { isFunction, isNil } from "lodash-es";
5
- import { ColumnManager } from "./column/column-manager";
5
+ import { ColumnListModel } from "./column/column-list-model";
6
6
  import { CustomTemplateColumnModel } from "./column/custom-template-column-model";
7
7
  import { CustomValueColumnModel } from "./column/custom-value-column-model";
8
8
  import { EditorControlColumnModel } from "./column/editor-controls-column-model";
@@ -28,7 +28,7 @@ export class AbstractTableModel extends GarbageCollector {
28
28
  _dataSource$ = this.registerDisposable(new DelegatingListModel());
29
29
  _filteredRows$ = this.registerDisposable(new DelegatingListModel());
30
30
  _visibleRows$ = this.registerDisposable(new DelegatingListModel());
31
- columnManager = this.registerDisposable(new ColumnManager());
31
+ _columnList = this.registerDisposable(new ColumnListModel());
32
32
  _editorSessions = new MutableListModel();
33
33
  _rowsBeingEdited$;
34
34
  saveCommandFactory;
@@ -58,15 +58,15 @@ export class AbstractTableModel extends GarbageCollector {
58
58
  });
59
59
  this._editorSessionByRowId = chain(this._editorSessions).indexBy("rowId");
60
60
  this.editing$ = chain(this._editorSessions).count().isGreaterThan(0);
61
- this.textSearchPredicate$ = chain(this.visibleColumns$).reduce(columns => {
61
+ this.textSearchPredicate$ = chain(this.visibleColumns).reduce(columns => {
62
62
  return (row, regex) => {
63
63
  return (!regex || !!columns.find(c => regex.test(c.getSearchTextFor(row))));
64
64
  };
65
65
  });
66
66
  this.firstEditableColumn$ = chain(this.columns).select(c => c.hasEditorPortal()).first();
67
- this.firstVisibleColumn$ = chain(this.visibleColumns$).first();
68
- this.lastVisibleColumn$ = chain(this.visibleColumns$).last();
69
- this.rowSelectionDisabledOnAllColumns$ = chain(this.columnManager.visibleColumns$).select(column => column.isRowSelectionEnabled()).count().equals(0);
67
+ this.firstVisibleColumn$ = chain(this._columnList).first();
68
+ this.lastVisibleColumn$ = chain(this._columnList).last();
69
+ this.rowSelectionDisabledOnAllColumns$ = chain(this._columnList).select(column => column.isRowSelectionEnabled()).count().equals(0);
70
70
  this.dataSourceEmpty$ = chain(this.dataSource$).isEmpty();
71
71
  this.selectedItems$ = this.selectionModelProxy.selectedItems$;
72
72
  this.leadSelection$ = this.selectionModelProxy.leadSelection$;
@@ -144,18 +144,18 @@ export class AbstractTableModel extends GarbageCollector {
144
144
  });
145
145
  }
146
146
  get columns() {
147
- return this.columnManager.allColumns$;
147
+ return this._columnList.allColumns$;
148
148
  }
149
- get visibleColumns$() {
150
- return this.columnManager.visibleColumns$;
149
+ get visibleColumns() {
150
+ return this._columnList.readonly$;
151
151
  }
152
152
  pluck(property, options) {
153
153
  const columnId = options?.columnId || property.toString();
154
- return this.addColumn(new PropertyColumnModel(columnId, this.columnManager, property, () => this.getColumnTextProperties(columnId)));
154
+ return this.addColumn(new PropertyColumnModel(columnId, property, () => this.getColumnTextProperties(columnId)));
155
155
  }
156
156
  pluckList(property, options) {
157
157
  const columnId = options?.columnId || property.toString();
158
- return this.addColumn(new ListPropertyColumnModel(columnId, this.columnManager, property, () => this.getColumnTextProperties(columnId)));
158
+ return this.addColumn(new ListPropertyColumnModel(columnId, property, () => this.getColumnTextProperties(columnId)));
159
159
  }
160
160
  // TODO: clean this up and assign the selection model on teh table directly.
161
161
  // tableModel.useSelectionModel(model) and have the seleciton column automatically
@@ -164,10 +164,10 @@ export class AbstractTableModel extends GarbageCollector {
164
164
  _addSelectionColumn(selectionModel, visible) {
165
165
  assert.isNil(this.selectionColumnModel);
166
166
  const columnId = "selection-column";
167
- this.selectionColumnModel = new SelectionColumnModel(columnId, this.columnManager, () => this.getColumnTextProperties(columnId), this.selectionModelProxy);
167
+ this.selectionColumnModel = new SelectionColumnModel(columnId, () => this.getColumnTextProperties(columnId), this.selectionModelProxy);
168
168
  this.selectionColumnModel.useSelectionModel(selectionModel);
169
169
  this.addRowClass("aup-row-selected", row => this.selectionColumnModel.isSelected(row));
170
- const selectionColumnModel = this.addColumn(this.selectionColumnModel, { before: null }); // first column
170
+ const selectionColumnModel = this.addColumn(this.selectionColumnModel, 0);
171
171
  if (!isNil(visible)) {
172
172
  selectionColumnModel.visibleWhile(visible instanceof ValueModel ? visible : ValueModel.constant(visible));
173
173
  }
@@ -179,17 +179,17 @@ export class AbstractTableModel extends GarbageCollector {
179
179
  this._createForm = formFactory;
180
180
  }
181
181
  const columnId = "editControls";
182
- return this.addColumn(new EditorControlColumnModel(columnId, this.columnManager, saveCommandFactory, () => this.getColumnTextProperties(columnId)));
182
+ return this.addColumn(new EditorControlColumnModel(columnId, saveCommandFactory, () => this.getColumnTextProperties(columnId)));
183
183
  }
184
184
  addCustomColumn(columnId, dataAccessor) {
185
- return this.addColumn(new CustomValueColumnModel(columnId, this.columnManager, () => this.getColumnTextProperties(columnId), dataAccessor));
185
+ return this.addColumn(new CustomValueColumnModel(columnId, () => this.getColumnTextProperties(columnId), dataAccessor));
186
186
  }
187
187
  addComponentColumn(columnId, component, onComponentInitOrOptions) {
188
- return this.addColumn(new CustomValueColumnModel(columnId, this.columnManager, () => this.getColumnTextProperties(columnId), row => row)).cellRenderer(component, onComponentInitOrOptions);
188
+ return this.addColumn(new CustomValueColumnModel(columnId, () => this.getColumnTextProperties(columnId), row => row)).cellRenderer(component, onComponentInitOrOptions);
189
189
  }
190
- addMoreMenu(componentClass, initialiseCallback) {
190
+ addMoreMenu(componentClass) {
191
191
  return this.addComponentColumn("more-menu", TableMoreMenuComponent, (component) => {
192
- component.configurePopupComponentType(componentClass, initialiseCallback);
192
+ component.configurePopupComponentType(componentClass);
193
193
  }).columnTextProperties({
194
194
  headerText() {
195
195
  return "";
@@ -197,7 +197,7 @@ export class AbstractTableModel extends GarbageCollector {
197
197
  });
198
198
  }
199
199
  addTemplateColumn(columnId) {
200
- return this.addColumn(new CustomTemplateColumnModel(columnId, this.columnManager, () => this.getColumnTextProperties(columnId)));
200
+ return this.addColumn(new CustomTemplateColumnModel(columnId, () => this.getColumnTextProperties(columnId)));
201
201
  }
202
202
  addRowClass(className, predicate) {
203
203
  this.rowClassNamePredicates.push(new RowClass(className, predicate));
@@ -211,8 +211,8 @@ export class AbstractTableModel extends GarbageCollector {
211
211
  });
212
212
  return classNames;
213
213
  }
214
- addColumn(column, position) {
215
- return this.columnManager.addColumn(column, position);
214
+ addColumn(column, index) {
215
+ return this._columnList.addColumn(column, index);
216
216
  }
217
217
  columnTextProperties(columnTextProperties) {
218
218
  this._columnTextPropertiesLookup = columnTextProperties;
@@ -261,4 +261,4 @@ export class AbstractTableModel extends GarbageCollector {
261
261
  }
262
262
  }
263
263
  ProxyRegistry.registerOneTimeBinding(AbstractTableModel);
264
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtdGFibGUtbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdWktcG93ZXJ1cHMvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlcy9hYnN0cmFjdC10YWJsZS1tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFDTCxNQUFNLEVBSU4sbUJBQW1CLEVBQ25CLGlCQUFpQixFQUVqQixHQUFHLEVBQ0gsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUdoQixnQkFBZ0IsRUFFaEIsT0FBTyxFQUNQLGFBQWEsRUFDYixjQUFjLEVBRWQsVUFBVSxFQUVYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBRWxELE9BQU8sRUFBQyxVQUFVLEVBQUUsS0FBSyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQzVDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUl0RCxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUNoRixPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUMxRSxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvRSxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUMzRSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUNyRSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFFbEQsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFNaEYsT0FBTyxF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QUMsR0FBRyxDQUFDLENBQUM7U0FDckI7YUFBTTtZQUNMLGdCQUFnQjtZQUNoQiw2RUFBNkU7WUFDN0Usd0VBQXdFO1lBQ3hFLHVEQUF1RDtZQUN2RCxzRUFBc0U7WUFDdEUsS0FBSztTQUNOO1FBRUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7Q0FFRjtBQUNELGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnRUeXBlfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL292ZXJsYXlcIjtcbmltcG9ydCB7SW5qZWN0b3J9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICBhc3NlcnQsXG4gIEJvb2xlYW5WYWx1ZU1vZGVsQ2hhaW4sXG4gIENvbW1hbmQsXG4gIENvbnN0cnVjdGFibGUsXG4gIERlbGVnYXRpbmdMaXN0TW9kZWwsXG4gIERpcnR5VHJhY2tpbmdGb3JtLFxuICBEaXNwb3NhYmxlLFxuICBEc2wsXG4gIEV2ZW50TGlzdGVuZXJMaXN0LFxuICBHYXJiYWdlQ29sbGVjdG9yLFxuICBMaXN0TW9kZWwsXG4gIE1hcE1vZGVsQ2hhaW4sXG4gIE11dGFibGVMaXN0TW9kZWwsXG4gIFByb3hpZmllZCxcbiAgcHJveGlmeSxcbiAgUHJveHlSZWdpc3RyeSxcbiAgU2VsZWN0aW9uTW9kZWwsXG4gIFR5cGVzLFxuICBWYWx1ZU1vZGVsLFxuICBWYWx1ZU1vZGVsQ2hhaW5cbn0gZnJvbSBcIkBjb29sb24vcGVjdGluXCI7XG5pbXBvcnQge2xhbmd9IGZyb20gXCJAY29vbG9uL3R5cGVzY3JpcHQtdXRpbGl0aWVzXCI7XG5cbmltcG9ydCB7aXNGdW5jdGlvbiwgaXNOaWx9IGZyb20gXCJsb2Rhc2gtZXNcIjtcbmltcG9ydCB7Q29sdW1uTWFuYWdlcn0gZnJvbSBcIi4vY29sdW1uL2NvbHVtbi1tYW5hZ2VyXCI7XG5pbXBvcnQge0NlbGxSZW5kZXJlck9wdGlvbnMsIENvbHVtbk1vZGVsLCBPbkNvbXBvbmVudEluaXR9IGZyb20gXCIuL2NvbHVtbi9jb2x1bW4tbW9kZWxcIjtcbmltcG9ydCB7Q29sdW1uT3JkZXJNYW5hZ2VyfSBmcm9tIFwiLi9jb2x1bW4vY29sdW1uLW9yZGVyLW1hbmFnZXJcIjtcbmltcG9ydCB7Q29sdW1uVGV4dFByb3BlcnRpZXN9IGZyb20gXCIuL2NvbHVtbi9jb2x1bW4tdGV4dC1wcm9wZXJ0aWVzXCI7XG5pbXBvcnQge0N1c3RvbVRlbXBsYXRlQ29sdW1uTW9kZWx9IGZyb20gXCIuL2NvbHVtbi9jdXN0b20tdGVtcGxhdGUtY29sdW1uLW1vZGVsXCI7XG5pbXBvcnQge0N1c3RvbVZhbHVlQ29sdW1uTW9kZWx9IGZyb20gXCIuL2NvbHVtbi9jdXN0b20tdmFsdWUtY29sdW1uLW1vZGVsXCI7XG5pbXBvcnQge0VkaXRvckNvbnRyb2xDb2x1bW5Nb2RlbH0gZnJvbSBcIi4vY29sdW1uL2VkaXRvci1jb250cm9scy1jb2x1bW4tbW9kZWxcIjtcbmltcG9ydCB7TGlzdFByb3BlcnR5Q29sdW1uTW9kZWx9IGZyb20gXCIuL2NvbHVtbi9saXN0LXByb3BlcnktY29sdW1uLW1vZGVsXCI7XG5pbXBvcnQge1Byb3BlcnR5Q29sdW1uTW9kZWx9IGZyb20gXCIuL2NvbHVtbi9wcm9wZXJ0eS1jb2x1bW4tbW9kZWxcIjtcbmltcG9ydCB7U2VsZWN0aW9uQ29sdW1uTW9kZWx9IGZyb20gXCIuL2NvbHVtbi9zZWxlY3Rpb24tY29sdW1uLW1vZGVsXCI7XG5pbXBvcnQge0VkaXRTZXNzaW9ufSBmcm9tIFwiLi9lZGl0b3IvZWRpdC1zZXNzaW9uXCI7XG5cbmltcG9ydCB7Q29sdW1uVGV4dFNlYXJjaEZvcm1hdHRlcn0gZnJvbSBcIi4vZmlsdGVyL2NvbHVtbi10ZXh0LXNlYXJjaC1mb3JtYXR0ZXJcIjtcbmltcG9ydCB7VGV4dFNlYXJjaFByZWRpY2F0ZX0gZnJvbSBcIi4vZmlsdGVyL3RleHQtc2VhcmNoLXByZWRpY2F0ZVwiO1xuaW1wb3J0IHtDZWxsUmVuZGVyZXJ9IGZyb20gXCIuL3JlbmRlcmVyL2NlbGwtcmVuZGVyZXJcIjtcbmltcG9ydCB7XG4gIFRhYmxlTW9yZU1lbnVQb3B1cENvbXBvbmVudFxufSBmcm9tIFwiLi9yZW5kZXJlci90YWJsZS1tb3JlLW1lbnUvdGFibGUtbW9yZS1tZW51LXBvcHVwL3RhYmxlLW1vcmUtbWVudS1wb3B1cC5jb21wb25lbnRcIjtcbmltcG9ydCB7VGFibGVNb3JlTWVudUNvbXBvbmVudH0gZnJvbSBcIi4vcmVuZGVyZXIvdGFibGUtbW9yZS1tZW51L3RhYmxlLW1vcmUtbWVudS5jb21wb25lbnRcIjtcbmltcG9ydCBEZWZhdWx0QXJyYXlGb3JtYXR0ZXIgPSBDb2x1bW5UZXh0U2VhcmNoRm9ybWF0dGVyLkRlZmF1bHRBcnJheUZvcm1hdHRlcjtcbmltcG9ydCBEZWZhdWx0VmFsdWVGb3JtYXR0ZXIgPSBDb2x1bW5UZXh0U2VhcmNoRm9ybWF0dGVyLkRlZmF1bHRWYWx1ZUZvcm1hdHRlcjtcblxuLy8gZXhwb3J0IHR5cGUgU3RyaW5nUHJvcGVydGllc09mPFQ+ID0geyBbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIHN0cmluZyA/IEsgOiBuZXZlciB9W2tleW9mIFRdO1xuLy8gZXhwb3J0IHR5cGUgTnVtYmVyUHJvcGVydGllc09mPFQ+ID0geyBbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIG51bWJlciA/IEsgOiBuZXZlciB9W2tleW9mIFRdO1xuXG5jbGFzcyBSb3dDbGFzczxSb3c+IHtcbiAgY29uc3RydWN0b3IocmVhZG9ubHkgY2xhc3NOYW1lOiBzdHJpbmcsXG4gICAgICAgICAgICAgIHJlYWRvbmx5IG1hdGNoZXM6IChyb3c6IFJvdykgPT4gYm9vbGVhbikge1xuICB9XG59XG5cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0VGFibGVNb2RlbDxSb3c+IGV4dGVuZHMgR2FyYmFnZUNvbGxlY3RvciB7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9kYXRhU291cmNlJCA9IHRoaXMucmVnaXN0ZXJEaXNwb3NhYmxlKG5ldyBEZWxlZ2F0aW5nTGlzdE1vZGVsPFJvdz4oKSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBfZmlsdGVyZWRSb3dzJCA9IHRoaXMucmVnaXN0ZXJEaXNwb3NhYmxlKG5ldyBEZWxlZ2F0aW5nTGlzdE1vZGVsPFJvdz4oKSk7XG4gIHByb3RlY3RlZCByZWFkb25seSBfdmlzaWJsZVJvd3MkID0gdGhpcy5yZWdpc3RlckRpc3Bvc2FibGUobmV3IERlbGVnYXRpbmdMaXN0TW9kZWw8Um93PigpKTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29sdW1uTWFuYWdlciA9IHRoaXMucmVnaXN0ZXJEaXNwb3NhYmxlKG5ldyBDb2x1bW5NYW5hZ2VyPFJvdz4oKSk7XG5cbiAgcHJpdmF0ZSBfZWRpdG9yU2Vzc2lvbnMgPSBuZXcgTXV0YWJsZUxpc3RNb2RlbDxFZGl0U2Vzc2lvbjxSb3c+PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yb3dzQmVpbmdFZGl0ZWQkOiBNdXRhYmxlTGlzdE1vZGVsPFJvdz47XG4gIHByaXZhdGUgc2F2ZUNvbW1hbmRGYWN0b3J5OiBDb21tYW5kLkZhY3Rvcnk8RGlydHlUcmFja2luZ0Zvcm08Um93PiwgYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4+O1xuICBwcml2YXRlIF9lZGl0b3JTZXNzaW9uQnlSb3dJZDogTWFwTW9kZWxDaGFpbjxhbnksIEVkaXRTZXNzaW9uPFJvdz4+O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcm93Q2xhc3NOYW1lUHJlZGljYXRlczogUm93Q2xhc3M8Um93PltdID0gW107XG5cbiAgcHJpdmF0ZSBfY29sdW1uVGV4dFByb3BlcnRpZXNMb29rdXA6IHsgW2NvbHVtbk5hbWU6IHN0cmluZ106IENvbHVtblRleHRQcm9wZXJ0aWVzIH07XG5cbiAgcmVhZG9ubHkgZWRpdGluZyQ6IEJvb2xlYW5WYWx1ZU1vZGVsQ2hhaW47XG4gIHJlYWRvbmx5IGZpcnN0RWRpdGFibGVDb2x1bW4kOiBWYWx1ZU1vZGVsQ2hhaW48Q29sdW1uTW9kZWw8Um93Pj47XG4gIHByaXZhdGUgc2VsZWN0aW9uQ29sdW1uTW9kZWw6IFNlbGVjdGlvbkNvbHVtbk1vZGVsPFJvdz47XG4gIHByaXZhdGUgcm93U2VsZWN0aW9uRGlzYWJsZWRPbkFsbENvbHVtbnMkOiBCb29sZWFuVmFsdWVNb2RlbENoYWluO1xuICBwcml2YXRlIHJlYWRvbmx5IHJvd0NsaWNrTGlzdGVuZXJzID0gbmV3IEV2ZW50TGlzdGVuZXJMaXN0PChyb3c6IFJvdykgPT4gdm9pZD4oKTtcbiAgcmVhZG9ubHkgZmlyc3RWaXNpYmxlQ29sdW1uJDogVmFsdWVNb2RlbDxDb2x1bW5Nb2RlbDxSb3c+PjtcbiAgcmVhZG9ubHkgbGFzdFZpc2libGVDb2x1bW4kOiBWYWx1ZU1vZGVsPENvbHVtbk1vZGVsPFJvdz4+O1xuXG4gIHByaXZhdGUgX2NyZWF0ZUZvcm06IChyb3c6IFJvdykgPT4gRGlydHlUcmFja2luZ0Zvcm08Um93PiA9IChyb3cpID0+IG5ldyBEaXJ0eVRyYWNraW5nRm9ybTxSb3c+KCk7XG4gIHJlYWRvbmx5IHRleHRTZWFyY2hQcmVkaWNhdGUkOiBWYWx1ZU1vZGVsPFRleHRTZWFyY2hQcmVkaWNhdGU8Um93Pj47XG4gIHByb3RlY3RlZCBpZGVudGl0eU9mOiAoaXRlbTogUm93KSA9PiBhbnk7XG4gIHJlYWRvbmx5IGRhdGFTb3VyY2VFbXB0eSQ6IFZhbHVlTW9kZWw8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgc2VsZWN0aW9uTW9kZWxQcm94eSA9IHByb3hpZnkoU2VsZWN0aW9uTW9kZWw8Um93PikgYXMgUHJveGlmaWVkPFNlbGVjdGlvbk1vZGVsPFJvdz4+O1xuXG4gIHJlYWRvbmx5IHNlbGVjdGVkSXRlbXMkOiBMaXN0TW9kZWw8Um93PjtcbiAgcmVhZG9ubHkgbGVhZFNlbGVjdGlvbiQ6IFZhbHVlTW9kZWw8Um93PjtcbiAgcmVhZG9ubHkgaGFzU2VsZWN0aW9uJDogQm9vbGVhblZhbHVlTW9kZWxDaGFpbjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBjb25zdCB7Y2hhaW59ID0gRHNsLmRpc3Bvc2VXaXRoKHRoaXMpO1xuICAgIHRoaXMuX3Jvd3NCZWluZ0VkaXRlZCQgPSBuZXcgTXV0YWJsZUxpc3RNb2RlbDxSb3c+KFtdLCB7XG4gICAgICBpZGVudGlmaWVkV2l0aDogcm93ID0+IHRoaXMuaWRlbnRpdHlPZihyb3cpXG4gICAgfSk7XG4gICAgdGhpcy5fZWRpdG9yU2Vzc2lvbkJ5Um93SWQgPSBjaGFpbih0aGlzLl9lZGl0b3JTZXNzaW9ucykuaW5kZXhCeShcInJvd0lkXCIpO1xuICAgIHRoaXMuZWRpdGluZyQgPSBjaGFpbih0aGlzLl9lZGl0b3JTZXNzaW9ucykuY291bnQoKS5pc0dyZWF0ZXJUaGFuKDApO1xuXG4gICAgdGhpcy50ZXh0U2VhcmNoUHJlZGljYXRlJCA9IGNoYWluKHRoaXMudmlzaWJsZUNvbHVtbnMkKS5yZWR1Y2UoY29sdW1ucyA9PiB7XG4gICAgICByZXR1cm4gKHJvdzogUm93LCByZWdleDogUmVnRXhwKSA9PiB7XG4gICAgICAgIHJldHVybiAoIXJlZ2V4IHx8ICEhY29sdW1ucy5maW5kKGMgPT4gcmVnZXgudGVzdChjLmdldFNlYXJjaFRleHRGb3Iocm93KSkpKTtcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5maXJzdEVkaXRhYmxlQ29sdW1uJCA9IGNoYWluKHRoaXMuY29sdW1ucykuc2VsZWN0KGMgPT4gYy5oYXNFZGl0b3JQb3J0YWwoKSkuZmlyc3QoKTtcbiAgICB0aGlzLmZpcnN0VmlzaWJsZUNvbHVtbiQgPSBjaGFpbih0aGlzLnZpc2libGVDb2x1bW5zJCkuZmlyc3QoKTtcbiAgICB0aGlzLmxhc3RWaXNpYmxlQ29sdW1uJCA9IGNoYWluKHRoaXMudmlzaWJsZUNvbHVtbnMkKS5sYXN0KCk7XG5cbiAgICB0aGlzLnJvd1NlbGVjdGlvbkRpc2FibGVkT25BbGxDb2x1bW5zJCA9IGNoYWluKHRoaXMuY29sdW1uTWFuYWdlci52aXNpYmxlQ29sdW1ucyQpLnNlbGVjdChjb2x1bW4gPT4gY29sdW1uLmlzUm93U2VsZWN0aW9uRW5hYmxlZCgpKS5jb3VudCgpLmVxdWFscygwKTtcblxuICAgIHRoaXMuZGF0YVNvdXJjZUVtcHR5JCA9IGNoYWluKHRoaXMuZGF0YVNvdXJjZSQpLmlzRW1wdHkoKTtcblxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyQgPSB0aGlzLnNlbGVjdGlvbk1vZGVsUHJveHkuc2VsZWN0ZWRJdGVtcyQ7XG4gICAgdGhpcy5sZWFkU2VsZWN0aW9uJCA9IHRoaXMuc2VsZWN0aW9uTW9kZWxQcm94eS5sZWFkU2VsZWN0aW9uJDtcbiAgICB0aGlzLmhhc1NlbGVjdGlvbiQgPSBjaGFpbih0aGlzLnNlbGVjdGVkSXRlbXMkKS5pc05vdEVtcHR5KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0RGF0YVNvdXJjZShkYXRhU291cmNlJCkge1xuICAgIHRoaXMuX2RhdGFTb3VyY2UkLnNldERlbGVnYXRlKGRhdGFTb3VyY2UkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2RvOiBtYWtlIHRoaXMgZm9yY2Ugb25lIHRhYmxlIGF0IGEgdGltZVxuICAgKiBAcGFyYW0gaW5qZWN0b3JcbiAgICogQHBhcmFtIGlkZW50aXR5T2ZcbiAgICogQHBhcmFtIHJlc3RcbiAgICovXG4gIGluaXRpYWxpc2UoaW5qZWN0b3I6IEluamVjdG9yLCBpZGVudGl0eU9mOiAoaXRlbTogUm93KSA9PiBhbnkpIHtcbiAgICAvLyBub3Qgc3VyZSBpZiBJIHNob3VsZCBkZWZpbmUgdGhlc2UgYXQgdGhlIG1vZHVsZSBsZXZlbCBvciBub3QuLi5cbiAgICBjb25zdCBjdXN0b21JbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge3Byb3ZpZGU6IERlZmF1bHRWYWx1ZUZvcm1hdHRlcn0sXG4gICAgICAgIHtwcm92aWRlOiBEZWZhdWx0QXJyYXlGb3JtYXR0ZXJ9XG4gICAgICBdLFxuICAgICAgcGFyZW50OiBpbmplY3RvclxuICAgIH0pO1xuICAgIHRoaXMuY29sdW1ucy52YWx1ZS5mb3JFYWNoKGMgPT4gYy5pbml0aWFsaXNlKGN1c3RvbUluamVjdG9yKSk7XG4gICAgdGhpcy5pZGVudGl0eU9mID0gaWRlbnRpdHlPZjtcbiAgfVxuXG4gIGdldCBkYXRhU291cmNlJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZSQucmVhZG9ubHkkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHJvd3MgdGhhdCBhcmUgdmlzaWJsZSBhZnRlciBhbnkgZmlsdGVycyBhcmUgYXBwbGllZC4gIElmIHRoZXJlIGFyZVxuICAgKiBubyBmaWx0ZXJzIHRoZW4gdGhpcyB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoZSByb290IGRhdGFzZXQuXG4gICAqL1xuICBnZXQgZmlsdGVyZWRSb3dzJCgpOiBMaXN0TW9kZWw8Um93PiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlcmVkUm93cyQucmVhZG9ubHkkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHJvd3MgYXJlIGN1cnJlbnRseSB2aXNpYmxlIHRvIHRoZSB1c2VyLiAgSS5lLiB0aGUgY3VycmVudCBwYWdlIGluIGEgcGFnZWQgdGFibGUgb3IgdGhlXG4gICAqIGV4cGFuZGVkIHJvd3MgaW4gYSB0cmVlIHRhYmxlLlxuICAgKi9cbiAgZ2V0IHZpc2libGVSb3dzJCgpOiBMaXN0TW9kZWw8Um93PiB7XG4gICAgcmV0dXJuIHRoaXMuX3Zpc2libGVSb3dzJC5yZWFkb25seSQ7XG4gIH1cblxuICBnZXQgcm93c0JlaW5nRWRpdGVkJCgpOiBMaXN0TW9kZWw8Um93PiB7XG4gICAgcmV0dXJuIHRoaXMuX3Jvd3NCZWluZ0VkaXRlZCQucmVhZG9ubHkkO1xuICB9XG5cblxuICBzdGFydEVkaXRTZXNzaW9uKHJvdzogUm93KTogRWRpdFNlc3Npb248Um93PiB7XG4gICAgY29uc3Qgcm93SWQgPSB0aGlzLmlkZW50aXR5T2Yocm93KTtcbiAgICBpZiAodGhpcy5fcm93c0JlaW5nRWRpdGVkJC5xdWVyeSgpLmluZGV4T2Yocm93KSA+IC0xKSB7XG4gICAgICByZXR1cm4gbGFuZy5pbGxlZ2FsU3RhdGUoYFJvdyB3aXRoIGlkPSR7cm93SWR9IGFscmVhZHkgYmVpbmcgZWRpdGVkYCk7XG4gICAgfVxuXG4gICAgLy8gdG9kbzogcGFzcyB0aGUgZmFjdG9yaWVzIHRvIHRoZSBlZGl0IHNlc3Npb24gc28gd2UgY2FuIG1ha2UgdGhlIHdob2xlIGxvdCBwbHVnZ2FibGU/XG4gICAgY29uc3QgZm9ybSA9IHRoaXMuX2NyZWF0ZUZvcm0ocm93KTtcbiAgICBjb25zdCBzYXZlQ29tbWFuZCA9IHRoaXMuc2F2ZUNvbW1hbmRGYWN0b3J5LmNyZWF0ZShmb3JtLCB7ZGlzcG9zZWRXaXRoOiB0aGlzfSk7XG4gICAgY29uc3QgZWRpdFNlc3Npb24gPSBuZXcgRWRpdFNlc3Npb248Um93Pihyb3dJZCwgcm93LCBmb3JtLCBzYXZlQ29tbWFuZCk7XG4gICAgY29uc3Qge3doZW59ID0gRHNsLmRpc3Bvc2VXaXRoKGVkaXRTZXNzaW9uKTtcbiAgICB3aGVuKGVkaXRTZXNzaW9uLmxpdmVSb3dWYWx1ZSQpLmNoYW5nZXMoKGVkaXRlZFZhbHVlKSA9PiB7XG4gICAgICB0aGlzLl9yb3dzQmVpbmdFZGl0ZWQkLnJlcGxhY2VPclB1c2goZWRpdGVkVmFsdWUpO1xuICAgIH0sIHtpbml0aWFsVmFsdWU6IFwidHJpZ2dlckNoYW5nZVVubGVzc05pbFwifSk7XG5cbiAgICB0aGlzLl9lZGl0b3JTZXNzaW9ucy5wdXNoKGVkaXRTZXNzaW9uKTtcbiAgICBlZGl0U2Vzc2lvbi5vbkRpc3Bvc2UoKCkgPT4ge1xuICAgICAgdGhpcy5fcm93c0JlaW5nRWRpdGVkJC5yZW1vdmUoZWRpdFNlc3Npb24ubGl2ZVJvd1ZhbHVlJC52YWx1ZSk7XG4gICAgICB0aGlzLl9lZGl0b3JTZXNzaW9ucy5yZW1vdmUoZWRpdFNlc3Npb24pO1xuICAgIH0pO1xuICAgIHJldHVybiBlZGl0U2Vzc2lvbjtcbiAgfVxuXG4gIGdldEVkaXRTZXNzaW9uRm9yKHJvdzogUm93KTogRWRpdFNlc3Npb248Um93PiB7XG4gICAgcmV0dXJuIHRoaXMuX2VkaXRvclNlc3Npb25CeVJvd0lkLmdldCh0aGlzLmlkZW50aXR5T2Yocm93KSk7XG4gIH1cblxuICBjYW5jZWxBbGxFZGl0b3JTZXNzaW9ucygpIHtcbiAgICB0aGlzLl9lZGl0b3JTZXNzaW9ucy5ydW5JblRyYW5zYWN0aW9uKChkcmFmdCkgPT4ge1xuICAgICAgdGhpcy5fcm93c0JlaW5nRWRpdGVkJC5ydW5JblRyYW5zYWN0aW9uKCgpID0+IHtcbiAgICAgICAgZHJhZnQudmFsdWUuZm9yRWFjaChzZXNzaW9uID0+IHNlc3Npb24uZGlzcG9zZSgpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cblxuICBnZXQgY29sdW1ucygpOiBMaXN0TW9kZWw8Q29sdW1uTW9kZWw8Um93Pj4ge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbk1hbmFnZXIuYWxsQ29sdW1ucyQ7XG4gIH1cblxuICBnZXQgdmlzaWJsZUNvbHVtbnMkKCk6IExpc3RNb2RlbDxDb2x1bW5Nb2RlbDxSb3c+PiB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uTWFuYWdlci52aXNpYmxlQ29sdW1ucyQ7XG4gIH1cblxuICBwbHVjazxQIGV4dGVuZHMgVHlwZXMuVmFsdWVQcm9wZXJ0aWVzT2Y8Um93Pj4ocHJvcGVydHk6IFAsIG9wdGlvbnM/OiB7IGNvbHVtbklkOiBzdHJpbmcgfSk6IFByb3BlcnR5Q29sdW1uTW9kZWw8Um93LCBQPiB7XG4gICAgY29uc3QgY29sdW1uSWQgPSBvcHRpb25zPy5jb2x1bW5JZCB8fCBwcm9wZXJ0eS50b1N0cmluZygpO1xuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihuZXcgUHJvcGVydHlDb2x1bW5Nb2RlbDxSb3csIFA+KGNvbHVtbklkLCB0aGlzLmNvbHVtbk1hbmFnZXIsIHByb3BlcnR5LCAoKSA9PiB0aGlzLmdldENvbHVtblRleHRQcm9wZXJ0aWVzKGNvbHVtbklkKSkpO1xuICB9XG5cbiAgcGx1Y2tMaXN0PFAgZXh0ZW5kcyBUeXBlcy5BcnJheVByb3BlcnRpZXNPZjxSb3c+Pihwcm9wZXJ0eTogUCwgb3B0aW9ucz86IHsgY29sdW1uSWQ6IHN0cmluZyB9KTogTGlzdFByb3BlcnR5Q29sdW1uTW9kZWw8Um93LCBQPiB7XG4gICAgY29uc3QgY29sdW1uSWQgPSBvcHRpb25zPy5jb2x1bW5JZCB8fCBwcm9wZXJ0eS50b1N0cmluZygpO1xuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihuZXcgTGlzdFByb3BlcnR5Q29sdW1uTW9kZWw8Um93LCBQPihjb2x1bW5JZCwgdGhpcy5jb2x1bW5NYW5hZ2VyLCBwcm9wZXJ0eSwgKCkgPT4gdGhpcy5nZXRDb2x1bW5UZXh0UHJvcGVydGllcyhjb2x1bW5JZCkpKTtcbiAgfVxuXG4gIC8vIFRPRE86IGNsZWFuIHRoaXMgdXAgYW5kIGFzc2lnbiB0aGUgc2VsZWN0aW9uIG1vZGVsIG9uIHRlaCB0YWJsZSBkaXJlY3RseS5cbiAgLy8gICAgICAgdGFibGVNb2RlbC51c2VTZWxlY3Rpb25Nb2RlbChtb2RlbCkgYW5kIGhhdmUgdGhlIHNlbGVjaXRvbiBjb2x1bW4gYXV0b21hdGljYWxseVxuICAvLyAgICAgICBhZGRlZC4gIE5lZWQgdG8gbG9vayBhdCBob3cgd2UncmUgdXNpbmcgdGhlIHZpc2liaWxpdHkgY29udHJvbHMgYXMgd2VsbC5cbiAgLy8gICAgICAgU2hvdWxkIGFsc28gbGF6eSBjcmVhdGUgdGhlIHNlbGVjdGlvbiBjb2x1bW4gbW9kZWwgaWYgc29tZW9uZSBhY2Nlc3NlcyBpdC5cbiAgcHJvdGVjdGVkIF9hZGRTZWxlY3Rpb25Db2x1bW4oc2VsZWN0aW9uTW9kZWw/OiBTZWxlY3Rpb25Nb2RlbDxSb3c+LCB2aXNpYmxlPzogVmFsdWVNb2RlbDxib29sZWFuPiB8IGJvb2xlYW4pOiBTZWxlY3Rpb25Db2x1bW5Nb2RlbDxSb3c+IHtcbiAgICBhc3NlcnQuaXNOaWwodGhpcy5zZWxlY3Rpb25Db2x1bW5Nb2RlbCk7XG4gICAgY29uc3QgY29sdW1uSWQgPSBcInNlbGVjdGlvbi1jb2x1bW5cIjtcbiAgICB0aGlzLnNlbGVjdGlvbkNvbHVtbk1vZGVsID0gbmV3IFNlbGVjdGlvbkNvbHVtbk1vZGVsPFJvdz4oY29sdW1uSWQsIHRoaXMuY29sdW1uTWFuYWdlciwgKCkgPT4gdGhpcy5nZXRDb2x1bW5UZXh0UHJvcGVydGllcyhjb2x1bW5JZCksIHRoaXMuc2VsZWN0aW9uTW9kZWxQcm94eSk7XG4gICAgdGhpcy5zZWxlY3Rpb25Db2x1bW5Nb2RlbC51c2VTZWxlY3Rpb25Nb2RlbChzZWxlY3Rpb25Nb2RlbClcbiAgICB0aGlzLmFkZFJvd0NsYXNzKFwiYXVwLXJvdy1zZWxlY3RlZFwiLCByb3cgPT4gdGhpcy5zZWxlY3Rpb25Db2x1bW5Nb2RlbC5pc1NlbGVjdGVkKHJvdykpO1xuICAgIGNvbnN0IHNlbGVjdGlvbkNvbHVtbk1vZGVsID0gdGhpcy5hZGRDb2x1bW4odGhpcy5zZWxlY3Rpb25Db2x1bW5Nb2RlbCwge2JlZm9yZTogbnVsbH0pOyAvLyBmaXJzdCBjb2x1bW5cbiAgICBpZiAoIWlzTmlsKHZpc2libGUpKSB7XG4gICAgICBzZWxlY3Rpb25Db2x1bW5Nb2RlbC52aXNpYmxlV2hpbGUodmlzaWJsZSBpbnN0YW5jZW9mIFZhbHVlTW9kZWwgPyB2aXNpYmxlIDogVmFsdWVNb2RlbC5jb25zdGFudCh2aXNpYmxlKSk7XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3Rpb25Db2x1bW5Nb2RlbDtcbiAgfVxuXG5cbiAgYWRkRWRpdENvbnRyb2xzKHNhdmVDb21tYW5kRmFjdG9yeTogQ29tbWFuZC5GYWN0b3J5PERpcnR5VHJhY2tpbmdGb3JtPFJvdz4sIGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+PiwgZm9ybUZhY3Rvcnk/OiAocm93OiBSb3cpID0+IERpcnR5VHJhY2tpbmdGb3JtPFJvdz4pOiBFZGl0b3JDb250cm9sQ29sdW1uTW9kZWw8Um93PiB7XG4gICAgdGhpcy5zYXZlQ29tbWFuZEZhY3RvcnkgPSBzYXZlQ29tbWFuZEZhY3Rvcnk7XG4gICAgaWYgKGlzRnVuY3Rpb24oZm9ybUZhY3RvcnkpKSB7XG4gICAgICB0aGlzLl9jcmVhdGVGb3JtID0gZm9ybUZhY3Rvcnk7XG4gICAgfVxuICAgIGNvbnN0IGNvbHVtbklkID0gXCJlZGl0Q29udHJvbHNcIjtcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4obmV3IEVkaXRvckNvbnRyb2xDb2x1bW5Nb2RlbDxSb3c+KGNvbHVtbklkLCB0aGlzLmNvbHVtbk1hbmFnZXIsIHNhdmVDb21tYW5kRmFjdG9yeSwgKCkgPT4gdGhpcy5nZXRDb2x1bW5UZXh0UHJvcGVydGllcyhjb2x1bW5JZCkpKTtcbiAgfVxuXG4gIGFkZEN1c3RvbUNvbHVtbjxWPihjb2x1bW5JZDogc3RyaW5nLCBkYXRhQWNjZXNzb3I6IChyb3c6IFJvdykgPT4gVik6IEN1c3RvbVZhbHVlQ29sdW1uTW9kZWw8Um93LCBWPiB7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKG5ldyBDdXN0b21WYWx1ZUNvbHVtbk1vZGVsPFJvdywgVj4oY29sdW1uSWQsIHRoaXMuY29sdW1uTWFuYWdlciwgKCkgPT4gdGhpcy5nZXRDb2x1bW5UZXh0UHJvcGVydGllcyhjb2x1bW5JZCksIGRhdGFBY2Nlc3NvcikpO1xuICB9XG5cbiAgYWRkQ29tcG9uZW50Q29sdW1uPEMgZXh0ZW5kcyBDZWxsUmVuZGVyZXI8UGFydGlhbDxSb3c+Pj4oY29sdW1uSWQ6IHN0cmluZywgY29tcG9uZW50OiBDb21wb25lbnRUeXBlPEM+LCBvbkluaXQ/OiBPbkNvbXBvbmVudEluaXQ8Qz4pOiBDdXN0b21WYWx1ZUNvbHVtbk1vZGVsPFJvdywgUm93PlxuICBhZGRDb21wb25lbnRDb2x1bW48QyBleHRlbmRzIENlbGxSZW5kZXJlcjxQYXJ0aWFsPFJvdz4+Pihjb2x1bW5JZDogc3RyaW5nLCBjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8Qz4sIG9wdGlvbnM/OiBDZWxsUmVuZGVyZXJPcHRpb25zPFJvdywgQz4pOiBDdXN0b21WYWx1ZUNvbHVtbk1vZGVsPFJvdywgUm93PlxuICBhZGRDb21wb25lbnRDb2x1bW48QyBleHRlbmRzIENlbGxSZW5kZXJlcjxQYXJ0aWFsPFJvdz4+Pihjb2x1bW5JZDogc3RyaW5nLCBjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8Qz4sIG9uQ29tcG9uZW50SW5pdE9yT3B0aW9ucz86IE9uQ29tcG9uZW50SW5pdDxDPiB8IENlbGxSZW5kZXJlck9wdGlvbnM8Um93LCBDPik6IEN1c3RvbVZhbHVlQ29sdW1uTW9kZWw8Um93LCBSb3c+IHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4obmV3IEN1c3RvbVZhbHVlQ29sdW1uTW9kZWw8Um93LCBSb3c+KGNvbHVtbklkLCB0aGlzLmNvbHVtbk1hbmFnZXIsICgpID0+IHRoaXMuZ2V0Q29sdW1uVGV4dFByb3BlcnRpZXMoY29sdW1uSWQpLCByb3cgPT4gcm93KSkuY2VsbFJlbmRlcmVyKGNvbXBvbmVudCwgb25Db21wb25lbnRJbml0T3JPcHRpb25zKTtcbiAgfVxuXG4gIGFkZE1vcmVNZW51PEMgZXh0ZW5kcyBUYWJsZU1vcmVNZW51UG9wdXBDb21wb25lbnQ8Um93Pj4oY29tcG9uZW50Q2xhc3M6IENvbnN0cnVjdGFibGU8Qz4sIGluaXRpYWxpc2VDYWxsYmFjaz86IChjb21wb25lbnQ6QykgPT4gdm9pZCkge1xuICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudENvbHVtbihcIm1vcmUtbWVudVwiLCBUYWJsZU1vcmVNZW51Q29tcG9uZW50LCAoY29tcG9uZW50OlRhYmxlTW9yZU1lbnVDb21wb25lbnQ8Um93PikgPT4ge1xuICAgICAgY29tcG9uZW50LmNvbmZpZ3VyZVBvcHVwQ29tcG9uZW50VHlwZShjb21wb25lbnRDbGFzcywgaW5pdGlhbGlzZUNhbGxiYWNrKTtcbiAgICB9KS5jb2x1bW5UZXh0UHJvcGVydGllcyh7XG4gICAgICBoZWFkZXJUZXh0KCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBcIlwiXG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuXG4gIGFkZFRlbXBsYXRlQ29sdW1uPFY+KGNvbHVtbklkOiBzdHJpbmcpOiBDdXN0b21UZW1wbGF0ZUNvbHVtbk1vZGVsPFJvdz4ge1xuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihuZXcgQ3VzdG9tVGVtcGxhdGVDb2x1bW5Nb2RlbDxSb3c+KGNvbHVtbklkLCB0aGlzLmNvbHVtbk1hbmFnZXIsICgpID0+IHRoaXMuZ2V0Q29sdW1uVGV4dFByb3BlcnRpZXMoY29sdW1uSWQpKSk7XG4gIH1cblxuICBhZGRSb3dDbGFzcyhjbGFzc05hbWU6IHN0cmluZywgcHJlZGljYXRlOiAocm93OiBSb3cpID0+IGJvb2xlYW4pIHtcbiAgICB0aGlzLnJvd0NsYXNzTmFtZVByZWRpY2F0ZXMucHVzaChuZXcgUm93Q2xhc3M8Um93PihjbGFzc05hbWUsIHByZWRpY2F0ZSkpO1xuICB9XG5cbiAgZ2V0Um93Q2xhc3Nlcyhyb3c6IFJvdyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjbGFzc05hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHRoaXMucm93Q2xhc3NOYW1lUHJlZGljYXRlcy5mb3JFYWNoKGkgPT4ge1xuICAgICAgaWYgKGkubWF0Y2hlcyhyb3cpKSB7XG4gICAgICAgIGNsYXNzTmFtZXMucHVzaChpLmNsYXNzTmFtZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGNsYXNzTmFtZXM7XG4gIH1cblxuXG4gIHByb3RlY3RlZCBhZGRDb2x1bW48QyBleHRlbmRzIENvbHVtbk1vZGVsPFJvdz4+KGNvbHVtbjogQywgcG9zaXRpb24/OiBDb2x1bW5PcmRlck1hbmFnZXIuUG9zaXRpb24pOiBDIHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5NYW5hZ2VyLmFkZENvbHVtbihjb2x1bW4sIHBvc2l0aW9uKTtcbiAgfVxuXG4gIGNvbHVtblRleHRQcm9wZXJ0aWVzKGNvbHVtblRleHRQcm9wZXJ0aWVzOiB7IFtjb2x1bW5OYW1lOiBzdHJpbmddOiBDb2x1bW5UZXh0UHJvcGVydGllcyB9KSB7XG4gICAgdGhpcy5fY29sdW1uVGV4dFByb3BlcnRpZXNMb29rdXAgPSBjb2x1bW5UZXh0UHJvcGVydGllcztcbiAgfVxuXG4gIGdldENvbHVtblRleHRQcm9wZXJ0aWVzKGNvbHVtbklkOiBzdHJpbmcpOiBDb2x1bW5UZXh0UHJvcGVydGllcyB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtblRleHRQcm9wZXJ0aWVzTG9va3VwID8gdGhpcy5fY29sdW1uVGV4dFByb3BlcnRpZXNMb29rdXBbY29sdW1uSWRdIDogdW5kZWZpbmVkO1xuICB9XG5cblxuICBpc1Jvd1NlbGVjdGlvbkVuYWJsZWRGb3IoY29sdW1uOiBDb2x1bW5Nb2RlbDxSb3c+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNSb3dTZWxlY3Rpb25FbmFibGVkKCkgJiYgY29sdW1uLmlzUm93U2VsZWN0aW9uRW5hYmxlZCgpO1xuICB9XG5cbiAgaXNSb3dTZWxlY3Rpb25FbmFibGVkKCkge1xuICAgIHJldHVybiB0aGlzLmhhc1VzZXJTZWxlY3Rpb25Nb2RlbFRoYXRJc0VuYWJsZWQoKSAmJiAhdGhpcy5yb3dTZWxlY3Rpb25EaXNhYmxlZE9uQWxsQ29sdW1ucyQudmFsdWU7XG4gIH1cblxuICBoYXNVc2VyU2VsZWN0aW9uTW9kZWxUaGF0SXNFbmFibGVkKCkge1xuICAgIGNvbnN0IHVzZXJTZWxlY3Rpb25Nb2RlbCA9IHRoaXMuc2VsZWN0aW9uQ29sdW1uTW9kZWw/LnNlbGVjdGlvbk1vZGVsLmdldFByb3h5VGFyZ2V0KCk7XG4gICAgcmV0dXJuICEhdXNlclNlbGVjdGlvbk1vZGVsICYmIHVzZXJTZWxlY3Rpb25Nb2RlbC5lbmFibGVkJC52YWx1ZTtcbiAgfVxuXG4gIGdldFNlbGVjdGlvbk1vZGVsKCk6IFNlbGVjdGlvbk1vZGVsPFJvdz4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbkNvbHVtbk1vZGVsPy5zZWxlY3Rpb25Nb2RlbDtcbiAgfVxuXG4gIGlzSG92ZXJFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzUm93U2VsZWN0aW9uRW5hYmxlZCgpIHx8IHRoaXMucm93Q2xpY2tMaXN0ZW5lcnMubGlzdGVuZXJDb3VudCA+IDA7XG4gIH1cblxuICBpc0N1cnNvckVuYWJsZWQoY29sdW1uOiBDb2x1bW5Nb2RlbDxSb3c+KSB7XG4gICAgcmV0dXJuIHRoaXMuaXNSb3dTZWxlY3Rpb25FbmFibGVkRm9yKGNvbHVtbikgfHwgdGhpcy5yb3dDbGlja0xpc3RlbmVycy5saXN0ZW5lckNvdW50ID4gMDtcbiAgfVxuXG4gIHNlbGVjdFJvdyhyb3c6IFJvdykge1xuICAgIHRoaXMuc2VsZWN0aW9uQ29sdW1uTW9kZWw/LnNlbGVjdFJvdyhyb3cpO1xuICB9XG5cbiAgb25Sb3dDbGlja2VkKGNhbGxiYWNrOiAocm93OiBSb3cpID0+IHZvaWQpOiBEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5yb3dDbGlja0xpc3RlbmVycy5hZGQoY2FsbGJhY2spO1xuICB9XG5cbiAgX25vdGlmeUNlbGxDbGlja2VkKGNvbHVtbk1vZGVsOiBDb2x1bW5Nb2RlbDxSb3c+LCByb3c6IFJvdykge1xuICAgIGlmICh0aGlzLmlzUm93U2VsZWN0aW9uRW5hYmxlZEZvcihjb2x1bW5Nb2RlbCkpIHtcbiAgICAgIHRoaXMuc2VsZWN0Um93KHJvdyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKHtcbiAgICAgIC8vICAgaGFzRW5hYmxlZFVzZXJTZWxlY3Rpb25Nb2RlbDogdGhpcy5oYXNVc2VyU2VsZWN0aW9uTW9kZWxUaGF0SXNFbmFibGVkKCksXG4gICAgICAvLyAgIGFsbFNlbGVjdGlvbkRpc2FibGVkOiB0aGlzLnJvd1NlbGVjdGlvbkRpc2FibGVkT25BbGxDb2x1bW5zJC52YWx1ZSxcbiAgICAgIC8vICAgcm93U2VsZWN0aW9uRW5hYmxlZDogdGhpcy5pc1Jvd1NlbGVjdGlvbkVuYWJsZWQoKSxcbiAgICAgIC8vICAgcm93U2VsZWN0aW9uRW5hYmxlZEZvckNvbHVtbjogY29sdW1uTW9kZWwuaXNSb3dTZWxlY3Rpb25FbmFibGVkKClcbiAgICAgIC8vIH0pXG4gICAgfVxuXG4gICAgdGhpcy5yb3dDbGlja0xpc3RlbmVycy5maXJlKGwgPT4gbChyb3cpKTtcbiAgfVxuXG59XG5Qcm94eVJlZ2lzdHJ5LnJlZ2lzdGVyT25lVGltZUJpbmRpbmcoQWJzdHJhY3RUYWJsZU1vZGVsKVxuIl19
264
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtdGFibGUtbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdWktcG93ZXJ1cHMvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlcy9hYnN0cmFjdC10YWJsZS1tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFDTCxNQUFNLEVBSU4sbUJBQW1CLEVBQ25CLGlCQUFpQixFQUVqQixHQUFHLEVBQ0gsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUVoQixnQkFBZ0IsRUFDaEIsY0FBYyxFQUdkLFVBQVUsRUFDTyxPQUFPLEVBQWEsYUFBYSxFQUNuRCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVwRCxPQUFPLEVBQUMsVUFBVSxFQUFFLEtBQUssRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUU1QyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFHM0QsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFDaEYsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDMUUsT0FBTyxFQUFDLHdCQUF3QixFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFDL0UsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sb0NBQW9DLENBQUM7QUFDM0UsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDbkUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFDckUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBR2xELE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBS2hGLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHNEQUFzRCxDQUFDO0FBRTVGLElBQU8scUJBQXFCLEdBQUcseUJBQXlCLENBQUMscUJBQXFCLENBQUM7QUFDL0UsSUFBTyxxQkFBcUIsR0FBRyx5QkFBeUIsQ0FBQyxxQkFBcUIsQ0FBQztBQUUvRSxvR0FBb0c7QUFDcEcsb0dBQW9HO0FBRXBHLE1BQU0sUUFBUTtJQUNTO0lBQ0E7SUFEckIsWUFBcUIsU0FBaUIsRUFDakIsT0FBOEI7UUFEOUIsY0FBUyxHQUFULFNBQVMsQ0FBUTtRQUNqQixZQUFPLEdBQVAsT0FBTyxDQUF1QjtJQUNuRCxDQUFDO0NBQ0Y7QUFHRCxNQUFNLE9BQWdCLGtCQUF3QixTQUFRLGdCQUFnQjtJQUVqRCxZQUFZLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksbUJBQW1CLEVBQU8sQ0FBQyxDQUFDO0lBQ3ZFLGNBQWMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxtQkFBbUIsRUFBTyxDQUFDLENBQUM7SUFDekUsYUFBYSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLG1CQUFtQixFQUFPLENBQUMsQ0FBQztJQUUxRSxXQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksZUFBZSxFQUFPLENBQUMsQ0FBQztJQUUzRSxlQUFlLEdBQUcsSUFBSSxnQkFBZ0IsRUFBb0IsQ0FBQztJQUNsRCxpQkFBaUIsQ0FBd0I7SUFDbEQsa0JBQWtCLENBQXNFO0lBQ3hGLHFCQUFxQixDQUF1QztJQUVuRCxzQkFBc0IsR0FBb0IsRUFBRSxDQUFDO0lBRXRELDJCQUEyQixDQUFpRDtJQUUzRSxRQUFRLENBQXlCO0lBQ2pDLG9CQUFvQixDQUFvQztJQUN6RCxvQkFBb0IsQ0FBNEI7SUFDaEQsaUNBQWlDLENBQXlCO0lBQ2pELGlCQUFpQixHQUFHLElBQUksaUJBQWlCLEVBQXNCLENBQUM7SUFDeEUsbUJBQW1CLENBQStCO0lBQ2xELGtCQUFrQixDQUErQjtJQUVsRCxXQUFXLEdBQXlDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLGlCQUFpQixFQUFPLENBQUM7SUFDekYsb0JBQW9CLENBQXVDO0lBQzFELFVBQVUsQ0FBcUI7SUFDaEMsZ0JBQWdCLENBQXNCO0lBQzlCLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxDQUFBLGNBQW1CLENBQUEsQ0FBbUMsQ0FBQztJQUU3RixjQUFjLENBQWlCO0lBQy9CLGNBQWMsQ0FBa0I7SUFDaEMsYUFBYSxDQUF5QjtJQUUvQztRQUNFLEtBQUssRUFBRSxDQUFDO1FBQ1IsTUFBTSxFQUFDLEtBQUssRUFBQyxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksZ0JBQWdCLENBQU0sRUFBRSxFQUFFO1lBQ3JELGNBQWMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1NBQzVDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXJFLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN0RSxPQUFPLENBQUMsR0FBUSxFQUFFLEtBQWEsRUFBRSxFQUFFO2dCQUNqQyxPQUFPLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5RSxDQUFDLENBQUE7UUFDSCxDQUFDLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3pGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzNELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1FBRXpELElBQUksQ0FBQyxpQ0FBaUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXBJLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRTFELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGNBQWMsQ0FBQztRQUM5RCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxjQUFjLENBQUM7UUFDOUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQy9ELENBQUM7SUFFUyxhQUFhLENBQUMsV0FBVztRQUNqQyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxVQUFVLENBQUMsUUFBa0IsRUFBRSxVQUE4QjtRQUMzRCxrRUFBa0U7UUFDbEUsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUNyQyxTQUFTLEVBQUU7Z0JBQ1QsRUFBQyxPQUFPLEVBQUUscUJBQXFCLEVBQUM7Z0JBQ2hDLEVBQUMsT0FBTyxFQUFFLHFCQUFxQixFQUFDO2FBQ2pDO1lBQ0QsTUFBTSxFQUFFLFFBQVE7U0FDakIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDO0lBQ3ZDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFJLGdCQUFnQjtRQUNsQixPQUFPLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUM7SUFDMUMsQ0FBQztJQUVELGdCQUFnQixDQUFDLEdBQVE7UUFDdkIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDcEQsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsS0FBSyx1QkFBdUIsQ0FBQyxDQUFDO1NBQ3ZFO1FBRUQsdUZBQXVGO1FBQ3ZGLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbkMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBQyxZQUFZLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztRQUMvRSxNQUFNLFdBQVcsR0FBRyxJQUFJLFdBQVcsQ0FBTSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUN4RSxNQUFNLEVBQUMsSUFBSSxFQUFDLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ3RELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEQsQ0FBQyxFQUFFLEVBQUMsWUFBWSxFQUFFLHdCQUF3QixFQUFDLENBQUMsQ0FBQztRQUU3QyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN2QyxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUN6QixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQsaUJBQWlCLENBQUMsR0FBUTtRQUN4QixPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzlELENBQUM7SUFFRCx1QkFBdUI7UUFDckIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQzlDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUU7Z0JBQzNDLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDcEQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFHRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsS0FBSyxDQUF5QyxRQUFXLEVBQUUsT0FBOEI7UUFDdkYsTUFBTSxRQUFRLEdBQUcsT0FBTyxFQUFFLFFBQVEsSUFBSSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDMUQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksbUJBQW1CLENBQVMsUUFBUSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNILENBQUM7SUFFRCxTQUFTLENBQXlDLFFBQVcsRUFBRSxPQUE4QjtRQUMzRixNQUFNLFFBQVEsR0FBRyxPQUFPLEVBQUUsUUFBUSxJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMxRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSx1QkFBdUIsQ0FBUyxRQUFRLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0gsQ0FBQztJQUVELDRFQUE0RTtJQUM1RSx3RkFBd0Y7SUFDeEYsaUZBQWlGO0lBQ2pGLG1GQUFtRjtJQUN6RSxtQkFBbUIsQ0FBQyxjQUFvQyxFQUFFLE9BQXVDO1FBQ3pHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDeEMsTUFBTSxRQUFRLEdBQUcsa0JBQWtCLENBQUM7UUFDcEMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksb0JBQW9CLENBQU0sUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUM1SSxJQUFJLENBQUMsb0JBQW9CLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLENBQUE7UUFDM0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN2RixNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDbkIsb0JBQW9CLENBQUMsWUFBWSxDQUFDLE9BQU8sWUFBWSxVQUFVLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1NBQzNHO1FBQ0QsT0FBTyxvQkFBb0IsQ0FBQztJQUM5QixDQUFDO0lBR0QsZUFBZSxDQUFDLGtCQUF1RixFQUFFLFdBQWtEO1FBQ3pKLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztRQUM3QyxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUMzQixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztTQUNoQztRQUNELE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQztRQUNoQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSx3QkFBd0IsQ0FBTSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2SSxDQUFDO0lBRUQsZUFBZSxDQUFJLFFBQWdCLEVBQUUsWUFBNkI7UUFDaEUsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksc0JBQXNCLENBQVMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO0lBQ2xJLENBQUM7SUFJRCxrQkFBa0IsQ0FBdUMsUUFBZ0IsRUFBRSxTQUEyQixFQUFFLHdCQUEyRTtRQUNqTCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxzQkFBc0IsQ0FBVyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLHdCQUF3QixDQUFDLENBQUM7SUFDcEwsQ0FBQztJQUVELFdBQVcsQ0FBQyxjQUErRDtRQUN6RSxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsc0JBQXNCLEVBQUUsQ0FBQyxTQUFxQyxFQUFFLEVBQUU7WUFDNUcsU0FBUyxDQUFDLDJCQUEyQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3hELENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDO1lBQ3RCLFVBQVU7Z0JBQ1IsT0FBTyxFQUFFLENBQUE7WUFDWCxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUdELGlCQUFpQixDQUFJLFFBQWdCO1FBQ25DLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLHlCQUF5QixDQUFNLFFBQVEsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3BILENBQUM7SUFFRCxXQUFXLENBQUMsU0FBaUIsRUFBRSxTQUFnQztRQUM3RCxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFNLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCxhQUFhLENBQUMsR0FBUTtRQUNwQixNQUFNLFVBQVUsR0FBYSxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN0QyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2xCLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQzlCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBR1MsU0FBUyxDQUE2QixNQUFTLEVBQUUsS0FBYztRQUN2RSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsb0JBQW9CLENBQUMsb0JBQW9FO1FBQ3ZGLElBQUksQ0FBQywyQkFBMkIsR0FBRyxvQkFBb0IsQ0FBQztJQUMxRCxDQUFDO0lBRUQsdUJBQXVCLENBQUMsUUFBZ0I7UUFDdEMsT0FBTyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQ25HLENBQUM7SUFHRCx3QkFBd0IsQ0FBQyxNQUF3QjtRQUMvQyxPQUFPLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQ3hFLENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsa0NBQWtDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxpQ0FBaUMsQ0FBQyxLQUFLLENBQUM7SUFDcEcsQ0FBQztJQUVELGtDQUFrQztRQUNoQyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxjQUFjLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEYsT0FBTyxDQUFDLENBQUMsa0JBQWtCLElBQUksa0JBQWtCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUNuRSxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsY0FBYyxDQUFDO0lBQ25ELENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMscUJBQXFCLEVBQUUsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRUQsZUFBZSxDQUFDLE1BQXdCO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO0lBQzNGLENBQUM7SUFFRCxTQUFTLENBQUMsR0FBUTtRQUNoQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCxZQUFZLENBQUMsUUFBNEI7UUFDdkMsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxXQUE2QixFQUFFLEdBQVE7UUFDeEQsSUFBSSxJQUFJLENBQUMsd0JBQXdCLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDOUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNyQjthQUFNO1lBQ0wsZ0JBQWdCO1lBQ2hCLDZFQUE2RTtZQUM3RSx3RUFBd0U7WUFDeEUsdURBQXVEO1lBQ3ZELHNFQUFzRTtZQUN0RSxLQUFLO1NBQ047UUFFRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0MsQ0FBQztDQUVGO0FBQ0QsYUFBYSxDQUFDLHNCQUFzQixDQUFDLGtCQUFrQixDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudFR5cGV9IGZyb20gXCJAYW5ndWxhci9jZGsvb3ZlcmxheVwiO1xuaW1wb3J0IHtJbmplY3Rvcn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7XG4gIGFzc2VydCxcbiAgQm9vbGVhblZhbHVlTW9kZWxDaGFpbixcbiAgQ2FuSWRlbnRpZnksXG4gIENvbW1hbmQsIENvbnN0cnVjdGFibGUsXG4gIERlbGVnYXRpbmdMaXN0TW9kZWwsXG4gIERpcnR5VHJhY2tpbmdGb3JtLFxuICBEaXNwb3NhYmxlLFxuICBEc2wsXG4gIEV2ZW50TGlzdGVuZXJMaXN0LFxuICBHYXJiYWdlQ29sbGVjdG9yLFxuICBMaXN0TW9kZWwsIE1hcE1vZGVsQ2hhaW4sXG4gIE11dGFibGVMaXN0TW9kZWwsXG4gIFNlbGVjdGlvbk1vZGVsLFxuICBQcm94aWZ5LFxuICBUeXBlcyxcbiAgVmFsdWVNb2RlbCxcbiAgVmFsdWVNb2RlbENoYWluLCBwcm94aWZ5LCBQcm94aWZpZWQsIFByb3h5UmVnaXN0cnlcbn0gZnJvbSBcIkBjb29sb24vcGVjdGluXCI7XG5pbXBvcnQgeyBsYW5nIH0gZnJvbSBcIkBjb29sb24vdHlwZXNjcmlwdC11dGlsaXRpZXNcIjtcblxuaW1wb3J0IHtpc0Z1bmN0aW9uLCBpc05pbH0gZnJvbSBcImxvZGFzaC1lc1wiO1xuaW1wb3J0IHtBYnN0cmFjdFRhYmxlQ29tcG9uZW50fSBmcm9tIFwiLi9hYnN0cmFjdC10YWJsZS5jb21wb25lbnRcIjtcbmltcG9ydCB7Q29sdW1uTGlzdE1vZGVsfSBmcm9tIFwiLi9jb2x1bW4vY29sdW1uLWxpc3QtbW9kZWxcIjtcbmltcG9ydCB7Q2VsbFJlbmRlcmVyT3B0aW9ucywgQ29sdW1uTW9kZWwsIE9uQ29tcG9uZW50SW5pdH0gZnJvbSBcIi4vY29sdW1uL2NvbHVtbi1tb2RlbFwiO1xuaW1wb3J0IHtDb2x1bW5UZXh0UHJvcGVydGllc30gZnJvbSBcIi4vY29sdW1uL2NvbHVtbi10ZXh0LXByb3BlcnRpZXNcIjtcbmltcG9ydCB7Q3VzdG9tVGVtcGxhdGVDb2x1bW5Nb2RlbH0gZnJvbSBcIi4vY29sdW1uL2N1c3RvbS10ZW1wbGF0ZS1jb2x1bW4tbW9kZWxcIjtcbmltcG9ydCB7Q3VzdG9tVmFsdWVDb2x1bW5Nb2RlbH0gZnJvbSBcIi4vY29sdW1uL2N1c3RvbS12YWx1ZS1jb2x1bW4tbW9kZWxcIjtcbmltcG9ydCB7RWRpdG9yQ29udHJvbENvbHVtbk1vZGVsfSBmcm9tIFwiLi9jb2x1bW4vZWRpdG9yLWNvbnRyb2xzLWNvbHVtbi1tb2RlbFwiO1xuaW1wb3J0IHtMaXN0UHJvcGVydHlDb2x1bW5Nb2RlbH0gZnJvbSBcIi4vY29sdW1uL2xpc3QtcHJvcGVyeS1jb2x1bW4tbW9kZWxcIjtcbmltcG9ydCB7UHJvcGVydHlDb2x1bW5Nb2RlbH0gZnJvbSBcIi4vY29sdW1uL3Byb3BlcnR5LWNvbHVtbi1tb2RlbFwiO1xuaW1wb3J0IHtTZWxlY3Rpb25Db2x1bW5Nb2RlbH0gZnJvbSBcIi4vY29sdW1uL3NlbGVjdGlvbi1jb2x1bW4tbW9kZWxcIjtcbmltcG9ydCB7RWRpdFNlc3Npb259IGZyb20gXCIuL2VkaXRvci9lZGl0LXNlc3Npb25cIjtcbmltcG9ydCB7Q2VsbFJlbmRlcmVyfSBmcm9tIFwiLi9yZW5kZXJlci9jZWxsLXJlbmRlcmVyXCI7XG5cbmltcG9ydCB7Q29sdW1uVGV4dFNlYXJjaEZvcm1hdHRlcn0gZnJvbSBcIi4vZmlsdGVyL2NvbHVtbi10ZXh0LXNlYXJjaC1mb3JtYXR0ZXJcIjtcbmltcG9ydCB7VGV4dFNlYXJjaFByZWRpY2F0ZX0gZnJvbSBcIi4vZmlsdGVyL3RleHQtc2VhcmNoLXByZWRpY2F0ZVwiO1xuaW1wb3J0IHtcbiAgVGFibGVNb3JlTWVudVBvcHVwQ29tcG9uZW50XG59IGZyb20gXCIuL3JlbmRlcmVyL3RhYmxlLW1vcmUtbWVudS90YWJsZS1tb3JlLW1lbnUtcG9wdXAvdGFibGUtbW9yZS1tZW51LXBvcHVwLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtUYWJsZU1vcmVNZW51Q29tcG9uZW50fSBmcm9tIFwiLi9yZW5kZXJlci90YWJsZS1tb3JlLW1lbnUvdGFibGUtbW9yZS1tZW51LmNvbXBvbmVudFwiO1xuaW1wb3J0IHtUYWJsZU1vZGVsfSBmcm9tIFwiLi90YWJsZS90YWJsZS1tb2RlbFwiO1xuaW1wb3J0IERlZmF1bHRBcnJheUZvcm1hdHRlciA9IENvbHVtblRleHRTZWFyY2hGb3JtYXR0ZXIuRGVmYXVsdEFycmF5Rm9ybWF0dGVyO1xuaW1wb3J0IERlZmF1bHRWYWx1ZUZvcm1hdHRlciA9IENvbHVtblRleHRTZWFyY2hGb3JtYXR0ZXIuRGVmYXVsdFZhbHVlRm9ybWF0dGVyO1xuXG4vLyBleHBvcnQgdHlwZSBTdHJpbmdQcm9wZXJ0aWVzT2Y8VD4gPSB7IFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgc3RyaW5nID8gSyA6IG5ldmVyIH1ba2V5b2YgVF07XG4vLyBleHBvcnQgdHlwZSBOdW1iZXJQcm9wZXJ0aWVzT2Y8VD4gPSB7IFtLIGluIGtleW9mIFRdOiBUW0tdIGV4dGVuZHMgbnVtYmVyID8gSyA6IG5ldmVyIH1ba2V5b2YgVF07XG5cbmNsYXNzIFJvd0NsYXNzPFJvdz4ge1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSBjbGFzc05hbWU6IHN0cmluZyxcbiAgICAgICAgICAgICAgcmVhZG9ubHkgbWF0Y2hlczogKHJvdzogUm93KSA9PiBib29sZWFuKSB7XG4gIH1cbn1cblxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RUYWJsZU1vZGVsPFJvdz4gZXh0ZW5kcyBHYXJiYWdlQ29sbGVjdG9yIHtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2RhdGFTb3VyY2UkID0gdGhpcy5yZWdpc3RlckRpc3Bvc2FibGUobmV3IERlbGVnYXRpbmdMaXN0TW9kZWw8Um93PigpKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9maWx0ZXJlZFJvd3MkID0gdGhpcy5yZWdpc3RlckRpc3Bvc2FibGUobmV3IERlbGVnYXRpbmdMaXN0TW9kZWw8Um93PigpKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF92aXNpYmxlUm93cyQgPSB0aGlzLnJlZ2lzdGVyRGlzcG9zYWJsZShuZXcgRGVsZWdhdGluZ0xpc3RNb2RlbDxSb3c+KCkpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbHVtbkxpc3QgPSB0aGlzLnJlZ2lzdGVyRGlzcG9zYWJsZShuZXcgQ29sdW1uTGlzdE1vZGVsPFJvdz4oKSk7XG5cbiAgcHJpdmF0ZSBfZWRpdG9yU2Vzc2lvbnMgPSBuZXcgTXV0YWJsZUxpc3RNb2RlbDxFZGl0U2Vzc2lvbjxSb3c+PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yb3dzQmVpbmdFZGl0ZWQkOiBNdXRhYmxlTGlzdE1vZGVsPFJvdz47XG4gIHByaXZhdGUgc2F2ZUNvbW1hbmRGYWN0b3J5OiBDb21tYW5kLkZhY3Rvcnk8RGlydHlUcmFja2luZ0Zvcm08Um93PiwgYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4+O1xuICBwcml2YXRlIF9lZGl0b3JTZXNzaW9uQnlSb3dJZDogTWFwTW9kZWxDaGFpbjxhbnksIEVkaXRTZXNzaW9uPFJvdz4+O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcm93Q2xhc3NOYW1lUHJlZGljYXRlczogUm93Q2xhc3M8Um93PltdID0gW107XG5cbiAgcHJpdmF0ZSBfY29sdW1uVGV4dFByb3BlcnRpZXNMb29rdXA6IHsgW2NvbHVtbk5hbWU6IHN0cmluZ106IENvbHVtblRleHRQcm9wZXJ0aWVzIH07XG5cbiAgcmVhZG9ubHkgZWRpdGluZyQ6IEJvb2xlYW5WYWx1ZU1vZGVsQ2hhaW47XG4gIHJlYWRvbmx5IGZpcnN0RWRpdGFibGVDb2x1bW4kOiBWYWx1ZU1vZGVsQ2hhaW48Q29sdW1uTW9kZWw8Um93Pj47XG4gIHByaXZhdGUgc2VsZWN0aW9uQ29sdW1uTW9kZWw6IFNlbGVjdGlvbkNvbHVtbk1vZGVsPFJvdz47XG4gIHByaXZhdGUgcm93U2VsZWN0aW9uRGlzYWJsZWRPbkFsbENvbHVtbnMkOiBCb29sZWFuVmFsdWVNb2RlbENoYWluO1xuICBwcml2YXRlIHJlYWRvbmx5IHJvd0NsaWNrTGlzdGVuZXJzID0gbmV3IEV2ZW50TGlzdGVuZXJMaXN0PChyb3c6IFJvdykgPT4gdm9pZD4oKTtcbiAgcmVhZG9ubHkgZmlyc3RWaXNpYmxlQ29sdW1uJDogVmFsdWVNb2RlbDxDb2x1bW5Nb2RlbDxSb3c+PjtcbiAgcmVhZG9ubHkgbGFzdFZpc2libGVDb2x1bW4kOiBWYWx1ZU1vZGVsPENvbHVtbk1vZGVsPFJvdz4+O1xuXG4gIHByaXZhdGUgX2NyZWF0ZUZvcm06IChyb3c6IFJvdykgPT4gRGlydHlUcmFja2luZ0Zvcm08Um93PiA9IChyb3cpID0+IG5ldyBEaXJ0eVRyYWNraW5nRm9ybTxSb3c+KCk7XG4gIHJlYWRvbmx5IHRleHRTZWFyY2hQcmVkaWNhdGUkOiBWYWx1ZU1vZGVsPFRleHRTZWFyY2hQcmVkaWNhdGU8Um93Pj47XG4gIHByb3RlY3RlZCBpZGVudGl0eU9mOiAoaXRlbTogUm93KSA9PiBhbnk7XG4gIHJlYWRvbmx5IGRhdGFTb3VyY2VFbXB0eSQ6IFZhbHVlTW9kZWw8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgc2VsZWN0aW9uTW9kZWxQcm94eSA9IHByb3hpZnkoU2VsZWN0aW9uTW9kZWw8Um93PikgYXMgUHJveGlmaWVkPFNlbGVjdGlvbk1vZGVsPFJvdz4+O1xuXG4gIHJlYWRvbmx5IHNlbGVjdGVkSXRlbXMkOiBMaXN0TW9kZWw8Um93PjtcbiAgcmVhZG9ubHkgbGVhZFNlbGVjdGlvbiQ6IFZhbHVlTW9kZWw8Um93PjtcbiAgcmVhZG9ubHkgaGFzU2VsZWN0aW9uJDogQm9vbGVhblZhbHVlTW9kZWxDaGFpbjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBjb25zdCB7Y2hhaW59ID0gRHNsLmRpc3Bvc2VXaXRoKHRoaXMpO1xuICAgIHRoaXMuX3Jvd3NCZWluZ0VkaXRlZCQgPSBuZXcgTXV0YWJsZUxpc3RNb2RlbDxSb3c+KFtdLCB7XG4gICAgICBpZGVudGlmaWVkV2l0aDogcm93ID0+IHRoaXMuaWRlbnRpdHlPZihyb3cpXG4gICAgfSk7XG4gICAgdGhpcy5fZWRpdG9yU2Vzc2lvbkJ5Um93SWQgPSBjaGFpbih0aGlzLl9lZGl0b3JTZXNzaW9ucykuaW5kZXhCeShcInJvd0lkXCIpO1xuICAgIHRoaXMuZWRpdGluZyQgPSBjaGFpbih0aGlzLl9lZGl0b3JTZXNzaW9ucykuY291bnQoKS5pc0dyZWF0ZXJUaGFuKDApO1xuXG4gICAgdGhpcy50ZXh0U2VhcmNoUHJlZGljYXRlJCA9IGNoYWluKHRoaXMudmlzaWJsZUNvbHVtbnMpLnJlZHVjZShjb2x1bW5zID0+IHtcbiAgICAgIHJldHVybiAocm93OiBSb3csIHJlZ2V4OiBSZWdFeHApID0+IHtcbiAgICAgICAgcmV0dXJuICghcmVnZXggfHwgISFjb2x1bW5zLmZpbmQoYyA9PiByZWdleC50ZXN0KGMuZ2V0U2VhcmNoVGV4dEZvcihyb3cpKSkpO1xuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLmZpcnN0RWRpdGFibGVDb2x1bW4kID0gY2hhaW4odGhpcy5jb2x1bW5zKS5zZWxlY3QoYyA9PiBjLmhhc0VkaXRvclBvcnRhbCgpKS5maXJzdCgpO1xuICAgIHRoaXMuZmlyc3RWaXNpYmxlQ29sdW1uJCA9IGNoYWluKHRoaXMuX2NvbHVtbkxpc3QpLmZpcnN0KCk7XG4gICAgdGhpcy5sYXN0VmlzaWJsZUNvbHVtbiQgPSBjaGFpbih0aGlzLl9jb2x1bW5MaXN0KS5sYXN0KCk7XG5cbiAgICB0aGlzLnJvd1NlbGVjdGlvbkRpc2FibGVkT25BbGxDb2x1bW5zJCA9IGNoYWluKHRoaXMuX2NvbHVtbkxpc3QpLnNlbGVjdChjb2x1bW4gPT4gY29sdW1uLmlzUm93U2VsZWN0aW9uRW5hYmxlZCgpKS5jb3VudCgpLmVxdWFscygwKTtcblxuICAgIHRoaXMuZGF0YVNvdXJjZUVtcHR5JCA9IGNoYWluKHRoaXMuZGF0YVNvdXJjZSQpLmlzRW1wdHkoKTtcblxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyQgPSB0aGlzLnNlbGVjdGlvbk1vZGVsUHJveHkuc2VsZWN0ZWRJdGVtcyQ7XG4gICAgdGhpcy5sZWFkU2VsZWN0aW9uJCA9IHRoaXMuc2VsZWN0aW9uTW9kZWxQcm94eS5sZWFkU2VsZWN0aW9uJDtcbiAgICB0aGlzLmhhc1NlbGVjdGlvbiQgPSBjaGFpbih0aGlzLnNlbGVjdGVkSXRlbXMkKS5pc05vdEVtcHR5KCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0RGF0YVNvdXJjZShkYXRhU291cmNlJCkge1xuICAgIHRoaXMuX2RhdGFTb3VyY2UkLnNldERlbGVnYXRlKGRhdGFTb3VyY2UkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2RvOiBtYWtlIHRoaXMgZm9yY2Ugb25lIHRhYmxlIGF0IGEgdGltZVxuICAgKiBAcGFyYW0gaW5qZWN0b3JcbiAgICogQHBhcmFtIGlkZW50aXR5T2ZcbiAgICogQHBhcmFtIHJlc3RcbiAgICovXG4gIGluaXRpYWxpc2UoaW5qZWN0b3I6IEluamVjdG9yLCBpZGVudGl0eU9mOiAoaXRlbTogUm93KSA9PiBhbnkpIHtcbiAgICAvLyBub3Qgc3VyZSBpZiBJIHNob3VsZCBkZWZpbmUgdGhlc2UgYXQgdGhlIG1vZHVsZSBsZXZlbCBvciBub3QuLi5cbiAgICBjb25zdCBjdXN0b21JbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge3Byb3ZpZGU6IERlZmF1bHRWYWx1ZUZvcm1hdHRlcn0sXG4gICAgICAgIHtwcm92aWRlOiBEZWZhdWx0QXJyYXlGb3JtYXR0ZXJ9XG4gICAgICBdLFxuICAgICAgcGFyZW50OiBpbmplY3RvclxuICAgIH0pO1xuICAgIHRoaXMuY29sdW1ucy52YWx1ZS5mb3JFYWNoKGMgPT4gYy5pbml0aWFsaXNlKGN1c3RvbUluamVjdG9yKSk7XG4gICAgdGhpcy5pZGVudGl0eU9mID0gaWRlbnRpdHlPZjtcbiAgfVxuXG4gIGdldCBkYXRhU291cmNlJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZSQucmVhZG9ubHkkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHJvd3MgdGhhdCBhcmUgdmlzaWJsZSBhZnRlciBhbnkgZmlsdGVycyBhcmUgYXBwbGllZC4gIElmIHRoZXJlIGFyZVxuICAgKiBubyBmaWx0ZXJzIHRoZW4gdGhpcyB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoZSByb290IGRhdGFzZXQuXG4gICAqL1xuICBnZXQgZmlsdGVyZWRSb3dzJCgpOiBMaXN0TW9kZWw8Um93PiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpbHRlcmVkUm93cyQucmVhZG9ubHkkO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHJvd3MgYXJlIGN1cnJlbnRseSB2aXNpYmxlIHRvIHRoZSB1c2VyLiAgSS5lLiB0aGUgY3VycmVudCBwYWdlIGluIGEgcGFnZWQgdGFibGUgb3IgdGhlXG4gICAqIGV4cGFuZGVkIHJvd3MgaW4gYSB0cmVlIHRhYmxlLlxuICAgKi9cbiAgZ2V0IHZpc2libGVSb3dzJCgpOiBMaXN0TW9kZWw8Um93PiB7XG4gICAgcmV0dXJuIHRoaXMuX3Zpc2libGVSb3dzJC5yZWFkb25seSQ7XG4gIH1cblxuICBnZXQgcm93c0JlaW5nRWRpdGVkJCgpOiBMaXN0TW9kZWw8Um93PiB7XG4gICAgcmV0dXJuIHRoaXMuX3Jvd3NCZWluZ0VkaXRlZCQucmVhZG9ubHkkO1xuICB9XG5cbiAgc3RhcnRFZGl0U2Vzc2lvbihyb3c6IFJvdyk6IEVkaXRTZXNzaW9uPFJvdz4ge1xuICAgIGNvbnN0IHJvd0lkID0gdGhpcy5pZGVudGl0eU9mKHJvdyk7XG4gICAgaWYgKHRoaXMuX3Jvd3NCZWluZ0VkaXRlZCQucXVlcnkoKS5pbmRleE9mKHJvdykgPiAtMSkge1xuICAgICAgcmV0dXJuIGxhbmcuaWxsZWdhbFN0YXRlKGBSb3cgd2l0aCBpZD0ke3Jvd0lkfSBhbHJlYWR5IGJlaW5nIGVkaXRlZGApO1xuICAgIH1cblxuICAgIC8vIHRvZG86IHBhc3MgdGhlIGZhY3RvcmllcyB0byB0aGUgZWRpdCBzZXNzaW9uIHNvIHdlIGNhbiBtYWtlIHRoZSB3aG9sZSBsb3QgcGx1Z2dhYmxlP1xuICAgIGNvbnN0IGZvcm0gPSB0aGlzLl9jcmVhdGVGb3JtKHJvdyk7XG4gICAgY29uc3Qgc2F2ZUNvbW1hbmQgPSB0aGlzLnNhdmVDb21tYW5kRmFjdG9yeS5jcmVhdGUoZm9ybSwge2Rpc3Bvc2VkV2l0aDogdGhpc30pO1xuICAgIGNvbnN0IGVkaXRTZXNzaW9uID0gbmV3IEVkaXRTZXNzaW9uPFJvdz4ocm93SWQsIHJvdywgZm9ybSwgc2F2ZUNvbW1hbmQpO1xuICAgIGNvbnN0IHt3aGVufSA9IERzbC5kaXNwb3NlV2l0aChlZGl0U2Vzc2lvbik7XG4gICAgd2hlbihlZGl0U2Vzc2lvbi5saXZlUm93VmFsdWUkKS5jaGFuZ2VzKChlZGl0ZWRWYWx1ZSkgPT4ge1xuICAgICAgdGhpcy5fcm93c0JlaW5nRWRpdGVkJC5yZXBsYWNlT3JQdXNoKGVkaXRlZFZhbHVlKTtcbiAgICB9LCB7aW5pdGlhbFZhbHVlOiBcInRyaWdnZXJDaGFuZ2VVbmxlc3NOaWxcIn0pO1xuXG4gICAgdGhpcy5fZWRpdG9yU2Vzc2lvbnMucHVzaChlZGl0U2Vzc2lvbik7XG4gICAgZWRpdFNlc3Npb24ub25EaXNwb3NlKCgpID0+IHtcbiAgICAgIHRoaXMuX3Jvd3NCZWluZ0VkaXRlZCQucmVtb3ZlKGVkaXRTZXNzaW9uLmxpdmVSb3dWYWx1ZSQudmFsdWUpO1xuICAgICAgdGhpcy5fZWRpdG9yU2Vzc2lvbnMucmVtb3ZlKGVkaXRTZXNzaW9uKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZWRpdFNlc3Npb247XG4gIH1cblxuICBnZXRFZGl0U2Vzc2lvbkZvcihyb3c6IFJvdyk6IEVkaXRTZXNzaW9uPFJvdz4ge1xuICAgIHJldHVybiB0aGlzLl9lZGl0b3JTZXNzaW9uQnlSb3dJZC5nZXQodGhpcy5pZGVudGl0eU9mKHJvdykpO1xuICB9XG5cbiAgY2FuY2VsQWxsRWRpdG9yU2Vzc2lvbnMoKSB7XG4gICAgdGhpcy5fZWRpdG9yU2Vzc2lvbnMucnVuSW5UcmFuc2FjdGlvbigoZHJhZnQpID0+IHtcbiAgICAgIHRoaXMuX3Jvd3NCZWluZ0VkaXRlZCQucnVuSW5UcmFuc2FjdGlvbigoKSA9PiB7XG4gICAgICAgIGRyYWZ0LnZhbHVlLmZvckVhY2goc2Vzc2lvbiA9PiBzZXNzaW9uLmRpc3Bvc2UoKSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG5cbiAgZ2V0IGNvbHVtbnMoKTogTGlzdE1vZGVsPENvbHVtbk1vZGVsPFJvdz4+IHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1uTGlzdC5hbGxDb2x1bW5zJDtcbiAgfVxuXG4gIGdldCB2aXNpYmxlQ29sdW1ucygpOiBMaXN0TW9kZWw8Q29sdW1uTW9kZWw8Um93Pj4ge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5MaXN0LnJlYWRvbmx5JDtcbiAgfVxuXG4gIHBsdWNrPFAgZXh0ZW5kcyBUeXBlcy5WYWx1ZVByb3BlcnRpZXNPZjxSb3c+Pihwcm9wZXJ0eTogUCwgb3B0aW9ucz86IHsgY29sdW1uSWQ6IHN0cmluZyB9KTogUHJvcGVydHlDb2x1bW5Nb2RlbDxSb3csIFA+IHtcbiAgICBjb25zdCBjb2x1bW5JZCA9IG9wdGlvbnM/LmNvbHVtbklkIHx8IHByb3BlcnR5LnRvU3RyaW5nKCk7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKG5ldyBQcm9wZXJ0eUNvbHVtbk1vZGVsPFJvdywgUD4oY29sdW1uSWQsIHByb3BlcnR5LCAoKSA9PiB0aGlzLmdldENvbHVtblRleHRQcm9wZXJ0aWVzKGNvbHVtbklkKSkpO1xuICB9XG5cbiAgcGx1Y2tMaXN0PFAgZXh0ZW5kcyBUeXBlcy5BcnJheVByb3BlcnRpZXNPZjxSb3c+Pihwcm9wZXJ0eTogUCwgb3B0aW9ucz86IHsgY29sdW1uSWQ6IHN0cmluZyB9KTogTGlzdFByb3BlcnR5Q29sdW1uTW9kZWw8Um93LCBQPiB7XG4gICAgY29uc3QgY29sdW1uSWQgPSBvcHRpb25zPy5jb2x1bW5JZCB8fCBwcm9wZXJ0eS50b1N0cmluZygpO1xuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihuZXcgTGlzdFByb3BlcnR5Q29sdW1uTW9kZWw8Um93LCBQPihjb2x1bW5JZCwgcHJvcGVydHksICgpID0+IHRoaXMuZ2V0Q29sdW1uVGV4dFByb3BlcnRpZXMoY29sdW1uSWQpKSk7XG4gIH1cblxuICAvLyBUT0RPOiBjbGVhbiB0aGlzIHVwIGFuZCBhc3NpZ24gdGhlIHNlbGVjdGlvbiBtb2RlbCBvbiB0ZWggdGFibGUgZGlyZWN0bHkuXG4gIC8vICAgICAgIHRhYmxlTW9kZWwudXNlU2VsZWN0aW9uTW9kZWwobW9kZWwpIGFuZCBoYXZlIHRoZSBzZWxlY2l0b24gY29sdW1uIGF1dG9tYXRpY2FsbHlcbiAgLy8gICAgICAgYWRkZWQuICBOZWVkIHRvIGxvb2sgYXQgaG93IHdlJ3JlIHVzaW5nIHRoZSB2aXNpYmlsaXR5IGNvbnRyb2xzIGFzIHdlbGwuXG4gIC8vICAgICAgIFNob3VsZCBhbHNvIGxhenkgY3JlYXRlIHRoZSBzZWxlY3Rpb24gY29sdW1uIG1vZGVsIGlmIHNvbWVvbmUgYWNjZXNzZXMgaXQuXG4gIHByb3RlY3RlZCBfYWRkU2VsZWN0aW9uQ29sdW1uKHNlbGVjdGlvbk1vZGVsPzogU2VsZWN0aW9uTW9kZWw8Um93PiwgdmlzaWJsZT86IFZhbHVlTW9kZWw8Ym9vbGVhbj4gfCBib29sZWFuKTogU2VsZWN0aW9uQ29sdW1uTW9kZWw8Um93PiB7XG4gICAgYXNzZXJ0LmlzTmlsKHRoaXMuc2VsZWN0aW9uQ29sdW1uTW9kZWwpO1xuICAgIGNvbnN0IGNvbHVtbklkID0gXCJzZWxlY3Rpb24tY29sdW1uXCI7XG4gICAgdGhpcy5zZWxlY3Rpb25Db2x1bW5Nb2RlbCA9IG5ldyBTZWxlY3Rpb25Db2x1bW5Nb2RlbDxSb3c+KGNvbHVtbklkLCAoKSA9PiB0aGlzLmdldENvbHVtblRleHRQcm9wZXJ0aWVzKGNvbHVtbklkKSwgdGhpcy5zZWxlY3Rpb25Nb2RlbFByb3h5KTtcbiAgICB0aGlzLnNlbGVjdGlvbkNvbHVtbk1vZGVsLnVzZVNlbGVjdGlvbk1vZGVsKHNlbGVjdGlvbk1vZGVsKVxuICAgIHRoaXMuYWRkUm93Q2xhc3MoXCJhdXAtcm93LXNlbGVjdGVkXCIsIHJvdyA9PiB0aGlzLnNlbGVjdGlvbkNvbHVtbk1vZGVsLmlzU2VsZWN0ZWQocm93KSk7XG4gICAgY29uc3Qgc2VsZWN0aW9uQ29sdW1uTW9kZWwgPSB0aGlzLmFkZENvbHVtbih0aGlzLnNlbGVjdGlvbkNvbHVtbk1vZGVsLCAwKTtcbiAgICBpZiAoIWlzTmlsKHZpc2libGUpKSB7XG4gICAgICBzZWxlY3Rpb25Db2x1bW5Nb2RlbC52aXNpYmxlV2hpbGUodmlzaWJsZSBpbnN0YW5jZW9mIFZhbHVlTW9kZWwgPyB2aXNpYmxlIDogVmFsdWVNb2RlbC5jb25zdGFudCh2aXNpYmxlKSk7XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3Rpb25Db2x1bW5Nb2RlbDtcbiAgfVxuXG5cbiAgYWRkRWRpdENvbnRyb2xzKHNhdmVDb21tYW5kRmFjdG9yeTogQ29tbWFuZC5GYWN0b3J5PERpcnR5VHJhY2tpbmdGb3JtPFJvdz4sIGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+PiwgZm9ybUZhY3Rvcnk/OiAocm93OiBSb3cpID0+IERpcnR5VHJhY2tpbmdGb3JtPFJvdz4pOiBFZGl0b3JDb250cm9sQ29sdW1uTW9kZWw8Um93PiB7XG4gICAgdGhpcy5zYXZlQ29tbWFuZEZhY3RvcnkgPSBzYXZlQ29tbWFuZEZhY3Rvcnk7XG4gICAgaWYgKGlzRnVuY3Rpb24oZm9ybUZhY3RvcnkpKSB7XG4gICAgICB0aGlzLl9jcmVhdGVGb3JtID0gZm9ybUZhY3Rvcnk7XG4gICAgfVxuICAgIGNvbnN0IGNvbHVtbklkID0gXCJlZGl0Q29udHJvbHNcIjtcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4obmV3IEVkaXRvckNvbnRyb2xDb2x1bW5Nb2RlbDxSb3c+KGNvbHVtbklkLCBzYXZlQ29tbWFuZEZhY3RvcnksICgpID0+IHRoaXMuZ2V0Q29sdW1uVGV4dFByb3BlcnRpZXMoY29sdW1uSWQpKSk7XG4gIH1cblxuICBhZGRDdXN0b21Db2x1bW48Vj4oY29sdW1uSWQ6IHN0cmluZywgZGF0YUFjY2Vzc29yOiAocm93OiBSb3cpID0+IFYpOiBDdXN0b21WYWx1ZUNvbHVtbk1vZGVsPFJvdywgVj4ge1xuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihuZXcgQ3VzdG9tVmFsdWVDb2x1bW5Nb2RlbDxSb3csIFY+KGNvbHVtbklkLCAoKSA9PiB0aGlzLmdldENvbHVtblRleHRQcm9wZXJ0aWVzKGNvbHVtbklkKSwgZGF0YUFjY2Vzc29yKSk7XG4gIH1cblxuICBhZGRDb21wb25lbnRDb2x1bW48QyBleHRlbmRzIENlbGxSZW5kZXJlcjxQYXJ0aWFsPFJvdz4+Pihjb2x1bW5JZDogc3RyaW5nLCBjb21wb25lbnQ6IENvbXBvbmVudFR5cGU8Qz4sIG9uSW5pdD86IE9uQ29tcG9uZW50SW5pdDxDPik6IEN1c3RvbVZhbHVlQ29sdW1uTW9kZWw8Um93LCBSb3c+XG4gIGFkZENvbXBvbmVudENvbHVtbjxDIGV4dGVuZHMgQ2VsbFJlbmRlcmVyPFBhcnRpYWw8Um93Pj4+KGNvbHVtbklkOiBzdHJpbmcsIGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxDPiwgb3B0aW9ucz86IENlbGxSZW5kZXJlck9wdGlvbnM8Um93LCBDPik6IEN1c3RvbVZhbHVlQ29sdW1uTW9kZWw8Um93LCBSb3c+XG4gIGFkZENvbXBvbmVudENvbHVtbjxDIGV4dGVuZHMgQ2VsbFJlbmRlcmVyPFBhcnRpYWw8Um93Pj4+KGNvbHVtbklkOiBzdHJpbmcsIGNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxDPiwgb25Db21wb25lbnRJbml0T3JPcHRpb25zPzogT25Db21wb25lbnRJbml0PEM+IHwgQ2VsbFJlbmRlcmVyT3B0aW9uczxSb3csIEM+KTogQ3VzdG9tVmFsdWVDb2x1bW5Nb2RlbDxSb3csIFJvdz4ge1xuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihuZXcgQ3VzdG9tVmFsdWVDb2x1bW5Nb2RlbDxSb3csIFJvdz4oY29sdW1uSWQsICgpID0+IHRoaXMuZ2V0Q29sdW1uVGV4dFByb3BlcnRpZXMoY29sdW1uSWQpLCByb3cgPT4gcm93KSkuY2VsbFJlbmRlcmVyKGNvbXBvbmVudCwgb25Db21wb25lbnRJbml0T3JPcHRpb25zKTtcbiAgfVxuXG4gIGFkZE1vcmVNZW51KGNvbXBvbmVudENsYXNzOiBDb25zdHJ1Y3RhYmxlPFRhYmxlTW9yZU1lbnVQb3B1cENvbXBvbmVudDxSb3c+Pikge1xuICAgIHJldHVybiB0aGlzLmFkZENvbXBvbmVudENvbHVtbihcIm1vcmUtbWVudVwiLCBUYWJsZU1vcmVNZW51Q29tcG9uZW50LCAoY29tcG9uZW50OlRhYmxlTW9yZU1lbnVDb21wb25lbnQ8Um93PikgPT4ge1xuICAgICAgY29tcG9uZW50LmNvbmZpZ3VyZVBvcHVwQ29tcG9uZW50VHlwZShjb21wb25lbnRDbGFzcyk7XG4gICAgfSkuY29sdW1uVGV4dFByb3BlcnRpZXMoe1xuICAgICAgaGVhZGVyVGV4dCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gXCJcIlxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cblxuICBhZGRUZW1wbGF0ZUNvbHVtbjxWPihjb2x1bW5JZDogc3RyaW5nKTogQ3VzdG9tVGVtcGxhdGVDb2x1bW5Nb2RlbDxSb3c+IHtcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4obmV3IEN1c3RvbVRlbXBsYXRlQ29sdW1uTW9kZWw8Um93Pihjb2x1bW5JZCwgKCkgPT4gdGhpcy5nZXRDb2x1bW5UZXh0UHJvcGVydGllcyhjb2x1bW5JZCkpKTtcbiAgfVxuXG4gIGFkZFJvd0NsYXNzKGNsYXNzTmFtZTogc3RyaW5nLCBwcmVkaWNhdGU6IChyb3c6IFJvdykgPT4gYm9vbGVhbikge1xuICAgIHRoaXMucm93Q2xhc3NOYW1lUHJlZGljYXRlcy5wdXNoKG5ldyBSb3dDbGFzczxSb3c+KGNsYXNzTmFtZSwgcHJlZGljYXRlKSk7XG4gIH1cblxuICBnZXRSb3dDbGFzc2VzKHJvdzogUm93KTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGNsYXNzTmFtZXM6IHN0cmluZ1tdID0gW107XG4gICAgdGhpcy5yb3dDbGFzc05hbWVQcmVkaWNhdGVzLmZvckVhY2goaSA9PiB7XG4gICAgICBpZiAoaS5tYXRjaGVzKHJvdykpIHtcbiAgICAgICAgY2xhc3NOYW1lcy5wdXNoKGkuY2xhc3NOYW1lKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY2xhc3NOYW1lcztcbiAgfVxuXG5cbiAgcHJvdGVjdGVkIGFkZENvbHVtbjxDIGV4dGVuZHMgQ29sdW1uTW9kZWw8Um93Pj4oY29sdW1uOiBDLCBpbmRleD86IG51bWJlcik6IEMge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5MaXN0LmFkZENvbHVtbihjb2x1bW4sIGluZGV4KTtcbiAgfVxuXG4gIGNvbHVtblRleHRQcm9wZXJ0aWVzKGNvbHVtblRleHRQcm9wZXJ0aWVzOiB7IFtjb2x1bW5OYW1lOiBzdHJpbmddOiBDb2x1bW5UZXh0UHJvcGVydGllcyB9KSB7XG4gICAgdGhpcy5fY29sdW1uVGV4dFByb3BlcnRpZXNMb29rdXAgPSBjb2x1bW5UZXh0UHJvcGVydGllcztcbiAgfVxuXG4gIGdldENvbHVtblRleHRQcm9wZXJ0aWVzKGNvbHVtbklkOiBzdHJpbmcpOiBDb2x1bW5UZXh0UHJvcGVydGllcyB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtblRleHRQcm9wZXJ0aWVzTG9va3VwID8gdGhpcy5fY29sdW1uVGV4dFByb3BlcnRpZXNMb29rdXBbY29sdW1uSWRdIDogdW5kZWZpbmVkO1xuICB9XG5cblxuICBpc1Jvd1NlbGVjdGlvbkVuYWJsZWRGb3IoY29sdW1uOiBDb2x1bW5Nb2RlbDxSb3c+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNSb3dTZWxlY3Rpb25FbmFibGVkKCkgJiYgY29sdW1uLmlzUm93U2VsZWN0aW9uRW5hYmxlZCgpO1xuICB9XG5cbiAgaXNSb3dTZWxlY3Rpb25FbmFibGVkKCkge1xuICAgIHJldHVybiB0aGlzLmhhc1VzZXJTZWxlY3Rpb25Nb2RlbFRoYXRJc0VuYWJsZWQoKSAmJiAhdGhpcy5yb3dTZWxlY3Rpb25EaXNhYmxlZE9uQWxsQ29sdW1ucyQudmFsdWU7XG4gIH1cblxuICBoYXNVc2VyU2VsZWN0aW9uTW9kZWxUaGF0SXNFbmFibGVkKCkge1xuICAgIGNvbnN0IHVzZXJTZWxlY3Rpb25Nb2RlbCA9IHRoaXMuc2VsZWN0aW9uQ29sdW1uTW9kZWw/LnNlbGVjdGlvbk1vZGVsLmdldFByb3h5VGFyZ2V0KCk7XG4gICAgcmV0dXJuICEhdXNlclNlbGVjdGlvbk1vZGVsICYmIHVzZXJTZWxlY3Rpb25Nb2RlbC5lbmFibGVkJC52YWx1ZTtcbiAgfVxuXG4gIGdldFNlbGVjdGlvbk1vZGVsKCk6IFNlbGVjdGlvbk1vZGVsPFJvdz4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbkNvbHVtbk1vZGVsPy5zZWxlY3Rpb25Nb2RlbDtcbiAgfVxuXG4gIGlzSG92ZXJFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzUm93U2VsZWN0aW9uRW5hYmxlZCgpIHx8IHRoaXMucm93Q2xpY2tMaXN0ZW5lcnMubGlzdGVuZXJDb3VudCA+IDA7XG4gIH1cblxuICBpc0N1cnNvckVuYWJsZWQoY29sdW1uOiBDb2x1bW5Nb2RlbDxSb3c+KSB7XG4gICAgcmV0dXJuIHRoaXMuaXNSb3dTZWxlY3Rpb25FbmFibGVkRm9yKGNvbHVtbikgfHwgdGhpcy5yb3dDbGlja0xpc3RlbmVycy5saXN0ZW5lckNvdW50ID4gMDtcbiAgfVxuXG4gIHNlbGVjdFJvdyhyb3c6IFJvdykge1xuICAgIHRoaXMuc2VsZWN0aW9uQ29sdW1uTW9kZWw/LnNlbGVjdFJvdyhyb3cpO1xuICB9XG5cbiAgb25Sb3dDbGlja2VkKGNhbGxiYWNrOiAocm93OiBSb3cpID0+IHZvaWQpOiBEaXNwb3NhYmxlIHtcbiAgICByZXR1cm4gdGhpcy5yb3dDbGlja0xpc3RlbmVycy5hZGQoY2FsbGJhY2spO1xuICB9XG5cbiAgX25vdGlmeUNlbGxDbGlja2VkKGNvbHVtbk1vZGVsOiBDb2x1bW5Nb2RlbDxSb3c+LCByb3c6IFJvdykge1xuICAgIGlmICh0aGlzLmlzUm93U2VsZWN0aW9uRW5hYmxlZEZvcihjb2x1bW5Nb2RlbCkpIHtcbiAgICAgIHRoaXMuc2VsZWN0Um93KHJvdyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKHtcbiAgICAgIC8vICAgaGFzRW5hYmxlZFVzZXJTZWxlY3Rpb25Nb2RlbDogdGhpcy5oYXNVc2VyU2VsZWN0aW9uTW9kZWxUaGF0SXNFbmFibGVkKCksXG4gICAgICAvLyAgIGFsbFNlbGVjdGlvbkRpc2FibGVkOiB0aGlzLnJvd1NlbGVjdGlvbkRpc2FibGVkT25BbGxDb2x1bW5zJC52YWx1ZSxcbiAgICAgIC8vICAgcm93U2VsZWN0aW9uRW5hYmxlZDogdGhpcy5pc1Jvd1NlbGVjdGlvbkVuYWJsZWQoKSxcbiAgICAgIC8vICAgcm93U2VsZWN0aW9uRW5hYmxlZEZvckNvbHVtbjogY29sdW1uTW9kZWwuaXNSb3dTZWxlY3Rpb25FbmFibGVkKClcbiAgICAgIC8vIH0pXG4gICAgfVxuXG4gICAgdGhpcy5yb3dDbGlja0xpc3RlbmVycy5maXJlKGwgPT4gbChyb3cpKTtcbiAgfVxuXG59XG5Qcm94eVJlZ2lzdHJ5LnJlZ2lzdGVyT25lVGltZUJpbmRpbmcoQWJzdHJhY3RUYWJsZU1vZGVsKVxuIl19
@@ -1,6 +1,6 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
2
  import { Component, HostBinding, Injector, Input } from "@angular/core";
3
- import { DelegatingListModel, DelegatingValueModel, Dsl, MutableValueModel, Proxify, proxify, StoreInValueModel, ValueModel } from "@coolon/pectin";
3
+ import { DelegatingListModel, DelegatingValueModel, Dsl, MutableValueModel, StoreInValueModel, Proxify, ValueModel, proxify } from "@coolon/pectin";
4
4
  import { lang } from '@coolon/typescript-utilities';
5
5
  import { DisposableComponent } from "../disposable-component";
6
6
  import { CustomTemplateColumnModel } from "./column/custom-template-column-model";
@@ -72,17 +72,12 @@ export class AbstractTableComponent extends DisposableComponent {
72
72
  #showHeader_accessor_storage = true;
73
73
  get showHeader() { return this.#showHeader_accessor_storage; }
74
74
  set showHeader(value) { this.#showHeader_accessor_storage = value; }
75
- #enableScrolling$_accessor_storage = proxify((ValueModel));
76
75
  /**
77
76
  * Set to true to enable scrolling. Once enabled the table will have 0 implicit height. You will either
78
77
  * need to set it explicitly e.g. height: 400px; or by using flex or grid layout to make it fill it's
79
78
  * containment area.
80
79
  */
81
- get enableScrolling$() { return this.#enableScrolling$_accessor_storage; }
82
- set enableScrolling$(value) { this.#enableScrolling$_accessor_storage = value; }
83
- #enableScrolling_accessor_storage = false;
84
- get enableScrolling() { return this.#enableScrolling_accessor_storage; }
85
- set enableScrolling(value) { this.#enableScrolling_accessor_storage = value; }
80
+ enableScrolling = false;
86
81
  columns;
87
82
  columnIds;
88
83
  columnsById;
@@ -101,6 +96,7 @@ export class AbstractTableComponent extends DisposableComponent {
101
96
  super();
102
97
  this.injector = injector;
103
98
  const { chain, when } = Dsl.disposeWith(this);
99
+ this._visibleRows$.setDelegate(this._dataSource$);
104
100
  when(chain(this._dataSource$).first()).becomesTruthy(it => {
105
101
  if (it === this.identityOf(it)) {
106
102
  console.warn("Table model identity function is using reference equality. This can cause lots of table re-rendering", {
@@ -135,8 +131,8 @@ export class AbstractTableComponent extends DisposableComponent {
135
131
  column.setTemplate(templateRef, viewContainer, fillCell, padChild);
136
132
  }
137
133
  }
138
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AbstractTableComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
139
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.9", type: AbstractTableComponent, selector: "aup-abstract-table", inputs: { showHeader$: "showHeader$", showHeader: "showHeader", enableScrolling$: "enableScrolling$", enableScrolling: "enableScrolling" }, host: { properties: { "class": "this.baseCssClass" } }, usesInheritance: true, ngImport: i0, template: '', isInline: true });
134
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: AbstractTableComponent, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Component });
135
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.7", type: AbstractTableComponent, selector: "aup-abstract-table", inputs: { showHeader$: "showHeader$", showHeader: "showHeader", enableScrolling: "enableScrolling" }, host: { properties: { "class": "this.baseCssClass" } }, usesInheritance: true, ngImport: i0, template: '', isInline: true });
140
136
  }
141
137
  __decorate([
142
138
  Proxify(),
@@ -146,15 +142,7 @@ __decorate([
146
142
  StoreInValueModel(),
147
143
  __metadata("design:type", Object)
148
144
  ], AbstractTableComponent.prototype, "showHeader", null);
149
- __decorate([
150
- Proxify(),
151
- __metadata("design:type", ValueModel)
152
- ], AbstractTableComponent.prototype, "enableScrolling$", null);
153
- __decorate([
154
- StoreInValueModel(),
155
- __metadata("design:type", Boolean)
156
- ], AbstractTableComponent.prototype, "enableScrolling", null);
157
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: AbstractTableComponent, decorators: [{
145
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImport: i0, type: AbstractTableComponent, decorators: [{
158
146
  type: Component,
159
147
  args: [{
160
148
  selector: 'aup-abstract-table',
@@ -164,12 +152,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
164
152
  type: Input
165
153
  }], showHeader: [{
166
154
  type: Input
167
- }], enableScrolling$: [{
168
- type: Input
169
155
  }], enableScrolling: [{
170
156
  type: Input
171
157
  }], baseCssClass: [{
172
158
  type: HostBinding,
173
159
  args: ['class']
174
160
  }] } });
175
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXMvYWJzdHJhY3QtdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUF3QyxNQUFNLGVBQWUsQ0FBQztBQUM3RyxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQixHQUFHLEVBR0gsaUJBQWlCLEVBQ2pCLE9BQU8sRUFDUCxPQUFPLEVBQ1AsaUJBQWlCLEVBQ2pCLFVBQVUsRUFDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUc1RCxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQzs7QUFFaEY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwREc7QUFLSCxNQUFNLE9BQU8sc0JBQTRCLFNBQVEsbUJBQW1CO0lBMEM3QztJQXZDWixnQ0FBYyxPQUFPLENBQUMsQ0FBQSxVQUFtQixDQUFBLENBQUMsQ0FBQztJQUEzQyxJQUFBLFdBQVcsaURBQWdDO0lBQTNDLElBQUEsV0FBVyx1REFBZ0M7SUFHM0MsK0JBQWEsSUFBSSxDQUFDO0lBQWxCLElBQUEsVUFBVSxnREFBUTtJQUFsQixJQUFBLFVBQVUsc0RBQVE7SUFRbEIscUNBQXVDLE9BQU8sQ0FBQyxDQUFBLFVBQW1CLENBQUEsQ0FBQyxDQUFDO0lBTjdFOzs7O09BSUc7SUFFTSxJQUFBLGdCQUFnQixzREFBb0Q7SUFBcEUsSUFBQSxnQkFBZ0IsNERBQW9EO0lBR3BFLG9DQUEyQixLQUFLLENBQUM7SUFBakMsSUFBQSxlQUFlLHFEQUFrQjtJQUFqQyxJQUFBLGVBQWUsMkRBQWtCO0lBRzFDLE9BQU8sQ0FBbUM7SUFDMUMsU0FBUyxDQUF5QjtJQUMxQixXQUFXLENBQTBDO0lBRXBELGVBQWUsQ0FBcUI7SUFFN0Msa0VBQWtFO0lBQ2pELFlBQVksR0FBRyxJQUFJLGlCQUFpQixDQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELFNBQVMsR0FBRyxJQUFJLGlCQUFpQixDQUFTLEVBQUUsQ0FBQyxDQUFDO0lBRTVDLGFBQWEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxtQkFBbUIsRUFBTyxDQUFDLENBQUM7SUFDbEYsY0FBYyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLG9CQUFvQixFQUFVLENBQUMsQ0FBQztJQUVuRSxZQUFZLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksbUJBQW1CLEVBQU8sQ0FBQyxDQUFBO0lBR3pGLFlBQVksR0FBRyxxQkFBcUIsQ0FBQztJQUU1QixPQUFPLEdBQUcsQ0FBQyxLQUFhLEVBQUUsSUFBUyxFQUFFLEVBQUU7UUFDOUMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDekQsQ0FBQyxDQUFDO0lBRUYsWUFBcUIsUUFBa0I7UUFDckMsS0FBSyxFQUFFLENBQUM7UUFEVyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBRXJDLE1BQU0sRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFDLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU1QyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUN4RCxJQUFJLEVBQUUsS0FBSyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFO2dCQUM5QixPQUFPLENBQUMsSUFBSSxDQUFDLHVHQUF1RyxFQUFFO29CQUNwSCxPQUFPLEVBQUUsRUFBRTtpQkFDWixDQUFDLENBQUM7YUFDSjtRQUNILENBQUMsRUFBRSxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFRCxVQUFVLENBQUMsR0FBUTtRQUNqQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFUSxRQUFRO1FBQ2YsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sRUFBQyxLQUFLLEVBQUMsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsSUFBSSxDQUFDLFlBQVksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFBO1NBQ2pEO1FBQ0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDakQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBRSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUM7SUFDdEMsQ0FBQztJQUVTLFFBQVE7UUFDaEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsc0JBQXNCLENBQUMsUUFBZ0IsRUFBRSxXQUE2QixFQUFFLGFBQStCLEVBQUUsUUFBaUIsRUFBRSxRQUFpQjtRQUMzSSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QyxJQUFJLE1BQU0sWUFBWSx5QkFBeUIsRUFBRTtZQUMvQyxNQUFNLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1NBQ3BFO0lBQ0gsQ0FBQzt1R0FwRlUsc0JBQXNCOzJGQUF0QixzQkFBc0IscVJBRnZCLEVBQUU7O0FBS0g7SUFEQyxPQUFPLEVBQUU7O3lEQUNpQztBQUczQztJQURDLGlCQUFpQixFQUFFOzt3REFDRjtBQVFsQjtJQURDLE9BQU8sRUFBRTs4QkFDTyxVQUFVOzhEQUF5QztBQUdwRTtJQURDLGlCQUFpQixFQUFFOzs2REFDYTsyRkFqQi9CLHNCQUFzQjtrQkFKbEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixRQUFRLEVBQUUsRUFBRTtpQkFDYjsrRkFJVSxXQUFXO3NCQURuQixLQUFLO2dCQUlHLFVBQVU7c0JBRGxCLEtBQUs7Z0JBU0csZ0JBQWdCO3NCQUR4QixLQUFLO2dCQUlHLGVBQWU7c0JBRHZCLEtBQUs7Z0JBb0JOLFlBQVk7c0JBRFgsV0FBVzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIEhvc3RCaW5kaW5nLCBJbmplY3RvciwgSW5wdXQsIE9uSW5pdCwgVGVtcGxhdGVSZWYsIFZpZXdDb250YWluZXJSZWZ9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICBEZWxlZ2F0aW5nTGlzdE1vZGVsLFxuICBEZWxlZ2F0aW5nVmFsdWVNb2RlbCxcbiAgRHNsLFxuICBMaXN0TW9kZWxDaGFpbixcbiAgTWFwTW9kZWxDaGFpbixcbiAgTXV0YWJsZVZhbHVlTW9kZWwsXG4gIFByb3hpZnksXG4gIHByb3hpZnksXG4gIFN0b3JlSW5WYWx1ZU1vZGVsLFxuICBWYWx1ZU1vZGVsXG59IGZyb20gXCJAY29vbG9uL3BlY3RpblwiO1xuaW1wb3J0IHtsYW5nfSBmcm9tICdAY29vbG9uL3R5cGVzY3JpcHQtdXRpbGl0aWVzJztcbmltcG9ydCB7RGlzcG9zYWJsZUNvbXBvbmVudH0gZnJvbSBcIi4uL2Rpc3Bvc2FibGUtY29tcG9uZW50XCI7XG5pbXBvcnQge0Fic3RyYWN0VGFibGVNb2RlbH0gZnJvbSAnLi9hYnN0cmFjdC10YWJsZS1tb2RlbCc7XG5pbXBvcnQge0NvbHVtbk1vZGVsfSBmcm9tICcuL2NvbHVtbi9jb2x1bW4tbW9kZWwnO1xuaW1wb3J0IHtDdXN0b21UZW1wbGF0ZUNvbHVtbk1vZGVsfSBmcm9tIFwiLi9jb2x1bW4vY3VzdG9tLXRlbXBsYXRlLWNvbHVtbi1tb2RlbFwiO1xuXG4vKipcbiAqIENyZWF0ZSB5b3VyIG1vZGVsOlxuICogQGV4YW1wbGVcbiAqIHRoaXMuaGVyb1RhYmxlTW9kZWwgPSBuZXcgVGFibGVNb2RlbChoZXJvTGlzdCwgdGFibGUgPT4ge1xuICogICB0YWJsZS5wbHVjayhcImZpcnN0TmFtZVwiKTtcbiAqICAgdGFibGUucGx1Y2soXCJsYXN0TmFtZVwiKTtcbiAqICAgdGFibGUuYWRkQ3VzdG9tQ29sdW1uKFwiZnVsbE5hbWVcIiwgaGVybyA9PiBgJHtoZXJvLmZpcnN0TmFtZX0gJHtoZXJvLmxhc3ROYW1lfWApO1xuICogfSk7XG4gKlxuICogQ3JlYXRlIHlvdXIgdGFibGVcbiAqIEBleGFtcGxlXG4gKiA8YXVwLXRhYmxlIFt0YWJsZU1vZGVsXT1cImhlcm9UYWJsZU1vZGVsXCI+PC9hdXAtdGFibGU+XG4gKlxuICogQ29sdW1uIHRlbXBsYXRlc1xuICogQGV4YW1wbGVcbiAqIHRoaXMuaGVyb1RhYmxlTW9kZWwgPSBuZXcgVGFibGVNb2RlbChoZXJvTGlzdCwgdGFibGUgPT4ge1xuICogICB0YWJsZS5wbHVjayhcImZpcnN0TmFtZVwiKTtcbiAqICAgdGFibGUucGx1Y2soXCJsYXN0TmFtZVwiKTtcbiAqICAgdGFibGUuYWRkVGVtcGxhdGVDb2x1bW4oXCJzcGVjaWFsQ29sdW1uXCIpO1xuICogfSk7XG4gKiA8YXVwLXRhYmxlIFt0YWJsZU1vZGVsXT1cImhlcm9UYWJsZU1vZGVsXCI+XG4gKiAgIDxkaXYgKmF1cENvbHVtblRlbXBsYXRlPVwibGV0IGhlcm87IGNvbHVtbklkOiAnc3BlY2lhbENvbHVtbic7IGZpbGxDZWxsOiB0cnVlOyBwYWRDaGlsZDpmYWxzZVwiPlxuICogICAgIHt7aGVyby5uYW1lfX1cbiAqICAgPC9kaXY+XG4gKiA8L2F1cC10YWJsZT5cbiAqXG4gKiBTdHlsaW5nXG4gKiBAZXhhbXBsZVxuICogIC8vIGdsb2JhbCBzZXR0aW5nc1xuICogOnJvb3Qge1xuICogICAtLWF1cC10YWJsZS1jb2x1bW4tZ2FwOiAxMHB4OyAvLyBkZWZhdWx0cyB0byAyNHB4XG4gKiAgIC0tYXVwLXRhYmxlLXJvdy1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMDUpXG4gKiAgIC0tYXVwLXRhYmxlLXJvdy1zZWxlY3RlZC1iYWNrZ3JvdW5kLWNvbG9yOiByZWJlY2NhcHVycGxlOyAvLyBkZWZhdWx0cyB0byB0cmFuc3BhcmVudFxuICogICAtLWF1cC10YWJsZS1maXJzdC1jb2x1bW4tcGFkZGluZy1sZWZ0OiAxOHB4IC8vIGRlZmF1bHRzIHRvIC0tY29sdW1uLWdhcFxuICogICAtLWF1cC10YWJsZS1sYXN0LWNvbHVtbi1wYWRkaW5nLXJpZ2h0OiAxOHB4IC8vIGRlZmF1bHRzIHRvIC0tY29sdW1uLWdhcFxuICogfVxuICpcbiAqIC8vIHBlciB0YWJsZSBzZXR0aW5ncy5cbiAqIGF1cC10YWJsZSB7XG4gKiAgIC0tY29sdW1uLWdhcDogMTBweDsgLy8gZGVmYXVsdHMgdG8gMjRweFxuICogICAtLXJvdy1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yLCByZ2JhKDAsIDAsIDAsIDAuMDUpXG4gKiAgIC0tcm93LXNlbGVjdGVkLWJhY2tncm91bmQtY29sb3I6IHJlYmVjY2FwdXJwbGU7IC8vIGRlZmF1bHRzIHRvIHRyYW5zcGFyZW50XG4gKiAgIC0tZmlyc3QtY29sdW1uLXBhZGRpbmctbGVmdDogMThweCAvLyBkZWZhdWx0cyB0byAtLWNvbHVtbi1nYXBcbiAqICAgLS1sYXN0LWNvbHVtbi1wYWRkaW5nLXJpZ2h0OiAxOHB4IC8vIGRlZmF1bHRzIHRvIC0tY29sdW1uLWdhcFxuICpcbiAqICAgYXVwLXRhYmxlLWhlYWRlci1jZWxsLXJlbmRlcmVyLFxuICogICBhdXAtdGFibGUtY2VsbC1yZW5kZXJlciB7XG4gKiAgICAgJi5hdXAtY29sLW15LWRhc2hlcmlzZWQtY29sdW1uLWlkIHtcbiAqICAgICAgIC8vIGRvIHN0dWZmXG4gKiAgICAgfVxuICogICAgICYuZmlyc3QtdmlzaWJsZS1jb2x1bW4ge1xuICogICAgICAgLy8gZG8gc3R1ZmZcbiAqICAgICB9XG4gKiAgICAgJi5sYXN0LXZpc2libGUtY29sdW1uIHtcbiAqICAgICAgIC8vIGRvIHN0dWZmXG4gKiAgICAgfVxuICogICB9XG4gKiB9XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2F1cC1hYnN0cmFjdC10YWJsZScsXG4gIHRlbXBsYXRlOiAnJ1xufSlcbmV4cG9ydCBjbGFzcyBBYnN0cmFjdFRhYmxlQ29tcG9uZW50PFJvdz4gZXh0ZW5kcyBEaXNwb3NhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBASW5wdXQoKSBAUHJveGlmeSgpXG4gIGFjY2Vzc29yIHNob3dIZWFkZXIkID0gcHJveGlmeShWYWx1ZU1vZGVsPGJvb2xlYW4+KTtcblxuICBASW5wdXQoKSBAU3RvcmVJblZhbHVlTW9kZWwoKVxuICBhY2Nlc3NvciBzaG93SGVhZGVyID0gdHJ1ZTtcblxuICAvKipcbiAgICogU2V0IHRvIHRydWUgdG8gZW5hYmxlIHNjcm9sbGluZy4gIE9uY2UgZW5hYmxlZCB0aGUgdGFibGUgd2lsbCBoYXZlIDAgaW1wbGljaXQgaGVpZ2h0LiAgWW91IHdpbGwgZWl0aGVyXG4gICAqIG5lZWQgdG8gc2V0IGl0IGV4cGxpY2l0bHkgZS5nLiBoZWlnaHQ6IDQwMHB4OyBvciBieSB1c2luZyBmbGV4IG9yIGdyaWQgbGF5b3V0IHRvIG1ha2UgaXQgZmlsbCBpdCdzXG4gICAqIGNvbnRhaW5tZW50IGFyZWEuXG4gICAqL1xuICBASW5wdXQoKSBAUHJveGlmeSgpXG4gIGFjY2Vzc29yIGVuYWJsZVNjcm9sbGluZyQ6VmFsdWVNb2RlbDxib29sZWFuPiA9IHByb3hpZnkoVmFsdWVNb2RlbDxib29sZWFuPik7XG5cbiAgQElucHV0KCkgQFN0b3JlSW5WYWx1ZU1vZGVsKClcbiAgYWNjZXNzb3IgZW5hYmxlU2Nyb2xsaW5nOiBib29sZWFuID0gZmFsc2U7XG5cblxuICBjb2x1bW5zOiBMaXN0TW9kZWxDaGFpbjxDb2x1bW5Nb2RlbDxSb3c+PjtcbiAgY29sdW1uSWRzOiBMaXN0TW9kZWxDaGFpbjxzdHJpbmc+O1xuICBwcml2YXRlIGNvbHVtbnNCeUlkOiBNYXBNb2RlbENoYWluPHN0cmluZywgQ29sdW1uTW9kZWw8Um93Pj47XG5cbiAgcmVhZG9ubHkgdmlzaWJsZVJvd0NvdW50OiBWYWx1ZU1vZGVsPG51bWJlcj47XG5cbiAgLy8gVE9ETzogc3VwcG9ydCB1c2VyIGRlZmluZWQgaGVhZGVyIGFuZCByb3cgaGVpZ2h0cyB2aWEgY3NzIHZhcnMuXG4gIHByaXZhdGUgcmVhZG9ubHkgaGVhZGVySGVpZ2h0ID0gbmV3IE11dGFibGVWYWx1ZU1vZGVsPG51bWJlcj4oNTYpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJvd0hlaWdodCA9IG5ldyBNdXRhYmxlVmFsdWVNb2RlbDxudW1iZXI+KDQ4KTtcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3Zpc2libGVSb3dzJCA9IHRoaXMucmVnaXN0ZXJEaXNwb3NhYmxlKG5ldyBEZWxlZ2F0aW5nTGlzdE1vZGVsPFJvdz4oKSk7XG4gIHJlYWRvbmx5IGhpZ2hsaWdodFRleHQkID0gdGhpcy5yZWdpc3RlckRpc3Bvc2FibGUobmV3IERlbGVnYXRpbmdWYWx1ZU1vZGVsPHN0cmluZz4oKSk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9kYXRhU291cmNlJCA9IHRoaXMucmVnaXN0ZXJEaXNwb3NhYmxlKG5ldyBEZWxlZ2F0aW5nTGlzdE1vZGVsPFJvdz4oKSlcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgYmFzZUNzc0NsYXNzID0gJ2F1cC10YWJsZS1jb21wb25lbnQnO1xuXG4gIHJlYWRvbmx5IHRyYWNrQnkgPSAoaW5kZXg6IG51bWJlciwgaXRlbTogUm93KSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuaWRlbnRpdHlPZiA/IHRoaXMuaWRlbnRpdHlPZihpdGVtKSA6IGluZGV4O1xuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgIHN1cGVyKCk7XG4gICAgY29uc3Qge2NoYWluLCB3aGVufSA9IERzbC5kaXNwb3NlV2l0aCh0aGlzKTtcbiAgICBcbiAgICB3aGVuKGNoYWluKHRoaXMuX2RhdGFTb3VyY2UkKS5maXJzdCgpKS5iZWNvbWVzVHJ1dGh5KGl0ID0+IHtcbiAgICAgIGlmIChpdCA9PT0gdGhpcy5pZGVudGl0eU9mKGl0KSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJUYWJsZSBtb2RlbCBpZGVudGl0eSBmdW5jdGlvbiBpcyB1c2luZyByZWZlcmVuY2UgZXF1YWxpdHkuICBUaGlzIGNhbiBjYXVzZSBsb3RzIG9mIHRhYmxlIHJlLXJlbmRlcmluZ1wiLCB7XG4gICAgICAgICAgcm93VHlwZTogaXRcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSwge29uY2U6IHRydWV9KTtcbiAgfVxuXG4gIGlkZW50aXR5T2Yocm93OiBSb3cpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlJC5pZGVudGl0eU9mKHJvdyk7XG4gIH1cblxuICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgIGNvbnN0IHtjaGFpbn0gPSBEc2wuZGlzcG9zZVdpdGgodGhpcyk7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzLmdldE1vZGVsKCk7XG4gICAgaWYgKCFtb2RlbCkge1xuICAgICAgbGFuZy5pbGxlZ2FsU3RhdGUoXCJhdXAtdGFibGUgdGFibGVNb2RlbCBpcyBuaWxcIilcbiAgICB9XG4gICAgdGhpcy5jb2x1bW5zQnlJZCA9IGNoYWluKG1vZGVsLmNvbHVtbnMpLmluZGV4QnkoJ2NvbHVtbklkJyk7XG4gICAgdGhpcy5fZGF0YVNvdXJjZSQuc2V0RGVsZWdhdGUobW9kZWwuZGF0YVNvdXJjZSQpO1xuICAgIG1vZGVsLmluaXRpYWxpc2UodGhpcy5pbmplY3RvciwgKHJvdykgPT4gIHRoaXMuaWRlbnRpdHlPZihyb3cpKTtcbiAgfVxuXG4gIGdldCB2aXNpYmxlUm93cyQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Zpc2libGVSb3dzJC5yZWFkb25seSQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0TW9kZWwoKTogQWJzdHJhY3RUYWJsZU1vZGVsPFJvdz4ge1xuICAgIHJldHVybiBsYW5nLmFic3RyYWN0TWV0aG9kKHRoaXMuY29uc3RydWN0b3IpO1xuICB9XG5cbiAgcmVnaXN0ZXJDb2x1bW5UZW1wbGF0ZShjb2x1bW5JZDogc3RyaW5nLCB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55Piwgdmlld0NvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZiwgZmlsbENlbGw6IGJvb2xlYW4sIHBhZENoaWxkOiBib29sZWFuKSB7XG4gICAgY29uc3QgY29sdW1uID0gdGhpcy5jb2x1bW5zQnlJZC5nZXQoY29sdW1uSWQpO1xuICAgIGlmIChjb2x1bW4gaW5zdGFuY2VvZiBDdXN0b21UZW1wbGF0ZUNvbHVtbk1vZGVsKSB7XG4gICAgICBjb2x1bW4uc2V0VGVtcGxhdGUodGVtcGxhdGVSZWYsIHZpZXdDb250YWluZXIsIGZpbGxDZWxsLCBwYWRDaGlsZCk7XG4gICAgfVxuICB9XG5cbn1cbiJdfQ==
161
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtdGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXMvYWJzdHJhY3QtdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUF3QyxNQUFNLGVBQWUsQ0FBQztBQUM3RyxPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLG9CQUFvQixFQUNwQixHQUFHLEVBSUgsaUJBQWlCLEVBRWpCLGlCQUFpQixFQUNqQixPQUFPLEVBQ1AsVUFBVSxFQUFFLE9BQU8sRUFDcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDbEQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFHNUQsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sdUNBQXVDLENBQUM7O0FBR2hGOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMERHO0FBS0gsTUFBTSxPQUFPLHNCQUE0QixTQUFRLG1CQUFtQjtJQXVDN0M7SUFwQ1osZ0NBQWMsT0FBTyxDQUFDLENBQUEsVUFBbUIsQ0FBQSxDQUFDLENBQUM7SUFBM0MsSUFBQSxXQUFXLGlEQUFnQztJQUEzQyxJQUFBLFdBQVcsdURBQWdDO0lBRzNDLCtCQUFhLElBQUksQ0FBQztJQUFsQixJQUFBLFVBQVUsZ0RBQVE7SUFBbEIsSUFBQSxVQUFVLHNEQUFRO0lBRTNCOzs7O09BSUc7SUFFSCxlQUFlLEdBQUcsS0FBSyxDQUFDO0lBR3hCLE9BQU8sQ0FBbUM7SUFDMUMsU0FBUyxDQUF5QjtJQUMxQixXQUFXLENBQTBDO0lBRXBE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QUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUMsSUFBSSxNQUFNLFlBQVkseUJBQXlCLEVBQUU7WUFDL0MsTUFBTSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztTQUNwRTtJQUNILENBQUM7dUdBbkZVLHNCQUFzQjsyRkFBdEIsc0JBQXNCLCtPQUZ2QixFQUFFOztBQUtIO0lBREMsT0FBTyxFQUFFOzt5REFDaUM7QUFHM0M7SUFEQyxpQkFBaUIsRUFBRTs7d0RBQ0Y7MkZBTmhCLHNCQUFzQjtrQkFKbEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixRQUFRLEVBQUUsRUFBRTtpQkFDYjsrRkFJVSxXQUFXO3NCQURuQixLQUFLO2dCQUlHLFVBQVU7c0JBRGxCLEtBQUs7Z0JBU04sZUFBZTtzQkFEZCxLQUFLO2dCQW9CTixZQUFZO3NCQURYLFdBQVc7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBIb3N0QmluZGluZywgSW5qZWN0b3IsIElucHV0LCBPbkluaXQsIFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtcbiAgRGVsZWdhdGluZ0xpc3RNb2RlbCxcbiAgRGVsZWdhdGluZ1ZhbHVlTW9kZWwsXG4gIERzbCxcbiAgTGlzdE1vZGVsLFxuICBMaXN0TW9kZWxDaGFpbixcbiAgTWFwTW9kZWxDaGFpbixcbiAgTXV0YWJsZVZhbHVlTW9kZWwsXG4gIFN0b3JlSW5MaXN0TW9kZWwsXG4gIFN0b3JlSW5WYWx1ZU1vZGVsLFxuICBQcm94aWZ5LFxuICBWYWx1ZU1vZGVsLCBwcm94aWZ5XG59IGZyb20gXCJAY29vbG9uL3BlY3RpblwiO1xuaW1wb3J0IHtsYW5nfSBmcm9tICdAY29vbG9uL3R5cGVzY3JpcHQtdXRpbGl0aWVzJztcbmltcG9ydCB7RGlzcG9zYWJsZUNvbXBvbmVudH0gZnJvbSBcIi4uL2Rpc3Bvc2FibGUtY29tcG9uZW50XCI7XG5pbXBvcnQge0Fic3RyYWN0VGFibGVNb2RlbH0gZnJvbSAnLi9hYnN0cmFjdC10YWJsZS1tb2RlbCc7XG5pbXBvcnQge0NvbHVtbk1vZGVsfSBmcm9tICcuL2NvbHVtbi9jb2x1bW4tbW9kZWwnO1xuaW1wb3J0IHtDdXN0b21UZW1wbGF0ZUNvbHVtbk1vZGVsfSBmcm9tIFwiLi9jb2x1bW4vY3VzdG9tLXRlbXBsYXRlLWNvbHVtbi1tb2RlbFwiO1xuaW1wb3J0IHtUYWJsZUZpbHRlck1vZGVsfSBmcm9tIFwiLi9maWx0ZXIvdGFibGUtZmlsdGVyLW1vZGVsXCI7XG5cbi8qKlxuICogQ3JlYXRlIHlvdXIgbW9kZWw6XG4gKiBAZXhhbXBsZVxuICogdGhpcy5oZXJvVGFibGVNb2RlbCA9IG5ldyBUYWJsZU1vZGVsKGhlcm9MaXN0LCB0YWJsZSA9PiB7XG4gKiAgIHRhYmxlLnBsdWNrKFwiZmlyc3ROYW1lXCIpO1xuICogICB0YWJsZS5wbHVjayhcImxhc3ROYW1lXCIpO1xuICogICB0YWJsZS5hZGRDdXN0b21Db2x1bW4oXCJmdWxsTmFtZVwiLCBoZXJvID0+IGAke2hlcm8uZmlyc3ROYW1lfSAke2hlcm8ubGFzdE5hbWV9YCk7XG4gKiB9KTtcbiAqXG4gKiBDcmVhdGUgeW91ciB0YWJsZVxuICogQGV4YW1wbGVcbiAqIDxhdXAtdGFibGUgW3RhYmxlTW9kZWxdPVwiaGVyb1RhYmxlTW9kZWxcIj48L2F1cC10YWJsZT5cbiAqXG4gKiBDb2x1bW4gdGVtcGxhdGVzXG4gKiBAZXhhbXBsZVxuICogdGhpcy5oZXJvVGFibGVNb2RlbCA9IG5ldyBUYWJsZU1vZGVsKGhlcm9MaXN0LCB0YWJsZSA9PiB7XG4gKiAgIHRhYmxlLnBsdWNrKFwiZmlyc3ROYW1lXCIpO1xuICogICB0YWJsZS5wbHVjayhcImxhc3ROYW1lXCIpO1xuICogICB0YWJsZS5hZGRUZW1wbGF0ZUNvbHVtbihcInNwZWNpYWxDb2x1bW5cIik7XG4gKiB9KTtcbiAqIDxhdXAtdGFibGUgW3RhYmxlTW9kZWxdPVwiaGVyb1RhYmxlTW9kZWxcIj5cbiAqICAgPGRpdiAqYXVwQ29sdW1uVGVtcGxhdGU9XCJsZXQgaGVybzsgY29sdW1uSWQ6ICdzcGVjaWFsQ29sdW1uJzsgZmlsbENlbGw6IHRydWU7IHBhZENoaWxkOmZhbHNlXCI+XG4gKiAgICAge3toZXJvLm5hbWV9fVxuICogICA8L2Rpdj5cbiAqIDwvYXVwLXRhYmxlPlxuICpcbiAqIFN0eWxpbmdcbiAqIEBleGFtcGxlXG4gKiAgLy8gZ2xvYmFsIHNldHRpbmdzXG4gKiA6cm9vdCB7XG4gKiAgIC0tYXVwLXRhYmxlLWNvbHVtbi1nYXA6IDEwcHg7IC8vIGRlZmF1bHRzIHRvIDI0cHhcbiAqICAgLS1hdXAtdGFibGUtcm93LWhvdmVyLWJhY2tncm91bmQtY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4wNSlcbiAqICAgLS1hdXAtdGFibGUtcm93LXNlbGVjdGVkLWJhY2tncm91bmQtY29sb3I6IHJlYmVjY2FwdXJwbGU7IC8vIGRlZmF1bHRzIHRvIHRyYW5zcGFyZW50XG4gKiAgIC0tYXVwLXRhYmxlLWZpcnN0LWNvbHVtbi1wYWRkaW5nLWxlZnQ6IDE4cHggLy8gZGVmYXVsdHMgdG8gLS1jb2x1bW4tZ2FwXG4gKiAgIC0tYXVwLXRhYmxlLWxhc3QtY29sdW1uLXBhZGRpbmctcmlnaHQ6IDE4cHggLy8gZGVmYXVsdHMgdG8gLS1jb2x1bW4tZ2FwXG4gKiB9XG4gKlxuICogLy8gcGVyIHRhYmxlIHNldHRpbmdzLlxuICogYXVwLXRhYmxlIHtcbiAqICAgLS1jb2x1bW4tZ2FwOiAxMHB4OyAvLyBkZWZhdWx0cyB0byAyNHB4XG4gKiAgIC0tcm93LWhvdmVyLWJhY2tncm91bmQtY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4wNSlcbiAqICAgLS1yb3ctc2VsZWN0ZWQtYmFja2dyb3VuZC1jb2xvcjogcmViZWNjYXB1cnBsZTsgLy8gZGVmYXVsdHMgdG8gdHJhbnNwYXJlbnRcbiAqICAgLS1maXJzdC1jb2x1bW4tcGFkZGluZy1sZWZ0OiAxOHB4IC8vIGRlZmF1bHRzIHRvIC0tY29sdW1uLWdhcFxuICogICAtLWxhc3QtY29sdW1uLXBhZGRpbmctcmlnaHQ6IDE4cHggLy8gZGVmYXVsdHMgdG8gLS1jb2x1bW4tZ2FwXG4gKlxuICogICBhdXAtdGFibGUtaGVhZGVyLWNlbGwtcmVuZGVyZXIsXG4gKiAgIGF1cC10YWJsZS1jZWxsLXJlbmRlcmVyIHtcbiAqICAgICAmLmF1cC1jb2wtbXktZGFzaGVyaXNlZC1jb2x1bW4taWQge1xuICogICAgICAgLy8gZG8gc3R1ZmZcbiAqICAgICB9XG4gKiAgICAgJi5maXJzdC12aXNpYmxlLWNvbHVtbiB7XG4gKiAgICAgICAvLyBkbyBzdHVmZlxuICogICAgIH1cbiAqICAgICAmLmxhc3QtdmlzaWJsZS1jb2x1bW4ge1xuICogICAgICAgLy8gZG8gc3R1ZmZcbiAqICAgICB9XG4gKiAgIH1cbiAqIH1cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXVwLWFic3RyYWN0LXRhYmxlJyxcbiAgdGVtcGxhdGU6ICcnXG59KVxuZXhwb3J0IGNsYXNzIEFic3RyYWN0VGFibGVDb21wb25lbnQ8Um93PiBleHRlbmRzIERpc3Bvc2FibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dCgpIEBQcm94aWZ5KClcbiAgYWNjZXNzb3Igc2hvd0hlYWRlciQgPSBwcm94aWZ5KFZhbHVlTW9kZWw8Ym9vbGVhbj4pO1xuXG4gIEBJbnB1dCgpIEBTdG9yZUluVmFsdWVNb2RlbCgpXG4gIGFjY2Vzc29yIHNob3dIZWFkZXIgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBTZXQgdG8gdHJ1ZSB0byBlbmFibGUgc2Nyb2xsaW5nLiAgT25jZSBlbmFibGVkIHRoZSB0YWJsZSB3aWxsIGhhdmUgMCBpbXBsaWNpdCBoZWlnaHQuICBZb3Ugd2lsbCBlaXRoZXJcbiAgICogbmVlZCB0byBzZXQgaXQgZXhwbGljaXRseSBlLmcuIGhlaWdodDogNDAwcHg7IG9yIGJ5IHVzaW5nIGZsZXggb3IgZ3JpZCBsYXlvdXQgdG8gbWFrZSBpdCBmaWxsIGl0J3NcbiAgICogY29udGFpbm1lbnQgYXJlYS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGVuYWJsZVNjcm9sbGluZyA9IGZhbHNlO1xuXG5cbiAgY29sdW1uczogTGlzdE1vZGVsQ2hhaW48Q29sdW1uTW9kZWw8Um93Pj47XG4gIGNvbHVtbklkczogTGlzdE1vZGVsQ2hhaW48c3RyaW5nPjtcbiAgcHJpdmF0ZSBjb2x1bW5zQnlJZDogTWFwTW9kZWxDaGFpbjxzdHJpbmcsIENvbHVtbk1vZGVsPFJvdz4+O1xuXG4gIHJlYWRvbmx5IHZpc2libGVSb3dDb3VudDogVmFsdWVNb2RlbDxudW1iZXI+O1xuXG4gIC8vIFRPRE86IHN1cHBvcnQgdXNlciBkZWZpbmVkIGhlYWRlciBhbmQgcm93IGhlaWdodHMgdmlhIGNzcyB2YXJzLlxuICBwcml2YXRlIHJlYWRvbmx5IGhlYWRlckhlaWdodCA9IG5ldyBNdXRhYmxlVmFsdWVNb2RlbDxudW1iZXI+KDU2KTtcbiAgcHJpdmF0ZSByZWFkb25seSByb3dIZWlnaHQgPSBuZXcgTXV0YWJsZVZhbHVlTW9kZWw8bnVtYmVyPig0OCk7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF92aXNpYmxlUm93cyQgPSB0aGlzLnJlZ2lzdGVyRGlzcG9zYWJsZShuZXcgRGVsZWdhdGluZ0xpc3RNb2RlbDxSb3c+KCkpO1xuICByZWFkb25seSBoaWdobGlnaHRUZXh0JCA9IHRoaXMucmVnaXN0ZXJEaXNwb3NhYmxlKG5ldyBEZWxlZ2F0aW5nVmFsdWVNb2RlbDxzdHJpbmc+KCkpO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBfZGF0YVNvdXJjZSQgPSB0aGlzLnJlZ2lzdGVyRGlzcG9zYWJsZShuZXcgRGVsZWdhdGluZ0xpc3RNb2RlbDxSb3c+KCkpXG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gIGJhc2VDc3NDbGFzcyA9ICdhdXAtdGFibGUtY29tcG9uZW50JztcblxuICByZWFkb25seSB0cmFja0J5ID0gKGluZGV4OiBudW1iZXIsIGl0ZW06IFJvdykgPT4ge1xuICAgIHJldHVybiB0aGlzLmlkZW50aXR5T2YgPyB0aGlzLmlkZW50aXR5T2YoaXRlbSkgOiBpbmRleDtcbiAgfTtcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICBzdXBlcigpO1xuICAgIGNvbnN0IHtjaGFpbiwgd2hlbn0gPSBEc2wuZGlzcG9zZVdpdGgodGhpcyk7XG5cbiAgICB0aGlzLl92aXNpYmxlUm93cyQuc2V0RGVsZWdhdGUodGhpcy5fZGF0YVNvdXJjZSQpO1xuXG4gICAgd2hlbihjaGFpbih0aGlzLl9kYXRhU291cmNlJCkuZmlyc3QoKSkuYmVjb21lc1RydXRoeShpdCA9PiB7XG4gICAgICBpZiAoaXQgPT09IHRoaXMuaWRlbnRpdHlPZihpdCkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiVGFibGUgbW9kZWwgaWRlbnRpdHkgZnVuY3Rpb24gaXMgdXNpbmcgcmVmZXJlbmNlIGVxdWFsaXR5LiAgVGhpcyBjYW4gY2F1c2UgbG90cyBvZiB0YWJsZSByZS1yZW5kZXJpbmdcIiwge1xuICAgICAgICAgIHJvd1R5cGU6IGl0XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sIHtvbmNlOiB0cnVlfSk7XG4gIH1cblxuICBpZGVudGl0eU9mKHJvdzogUm93KTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YVNvdXJjZSQuaWRlbnRpdHlPZihyb3cpO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICBjb25zdCB7Y2hhaW59ID0gRHNsLmRpc3Bvc2VXaXRoKHRoaXMpO1xuICAgIGNvbnN0IG1vZGVsID0gdGhpcy5nZXRNb2RlbCgpO1xuICAgIGlmICghbW9kZWwpIHtcbiAgICAgIGxhbmcuaWxsZWdhbFN0YXRlKFwiYXVwLXRhYmxlIHRhYmxlTW9kZWwgaXMgbmlsXCIpXG4gICAgfVxuICAgIHRoaXMuY29sdW1uc0J5SWQgPSBjaGFpbihtb2RlbC5jb2x1bW5zKS5pbmRleEJ5KCdjb2x1bW5JZCcpO1xuICAgIHRoaXMuX2RhdGFTb3VyY2UkLnNldERlbGVnYXRlKG1vZGVsLmRhdGFTb3VyY2UkKTtcbiAgICBtb2RlbC5pbml0aWFsaXNlKHRoaXMuaW5qZWN0b3IsIChyb3cpID0+ICB0aGlzLmlkZW50aXR5T2Yocm93KSk7XG4gIH1cblxuICBnZXQgdmlzaWJsZVJvd3MkKCkge1xuICAgIHJldHVybiB0aGlzLl92aXNpYmxlUm93cyQucmVhZG9ubHkkO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldE1vZGVsKCk6IEFic3RyYWN0VGFibGVNb2RlbDxSb3c+IHtcbiAgICByZXR1cm4gbGFuZy5hYnN0cmFjdE1ldGhvZCh0aGlzLmNvbnN0cnVjdG9yKTtcbiAgfVxuXG4gIHJlZ2lzdGVyQ29sdW1uVGVtcGxhdGUoY29sdW1uSWQ6IHN0cmluZywgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4sIHZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsIGZpbGxDZWxsOiBib29sZWFuLCBwYWRDaGlsZDogYm9vbGVhbikge1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuY29sdW1uc0J5SWQuZ2V0KGNvbHVtbklkKTtcbiAgICBpZiAoY29sdW1uIGluc3RhbmNlb2YgQ3VzdG9tVGVtcGxhdGVDb2x1bW5Nb2RlbCkge1xuICAgICAgY29sdW1uLnNldFRlbXBsYXRlKHRlbXBsYXRlUmVmLCB2aWV3Q29udGFpbmVyLCBmaWxsQ2VsbCwgcGFkQ2hpbGQpO1xuICAgIH1cbiAgfVxuXG59XG4iXX0=
@@ -0,0 +1,44 @@
1
+ import { AbstractComputedListModel, Dsl, lang, MutableListModel } from '@coolon/pectin';
2
+ import { isNil } from 'lodash';
3
+ export class ColumnListModel extends AbstractComputedListModel {
4
+ _allColumns$ = new MutableListModel();
5
+ columnsById$;
6
+ constructor() {
7
+ super();
8
+ const { chain } = Dsl.disposeWith(this);
9
+ this.columnsById$ = chain(this._allColumns$).indexBy('columnId');
10
+ }
11
+ get allColumns$() {
12
+ return this._allColumns$.readonly$;
13
+ }
14
+ getColumn(id) {
15
+ return this.columnsById$.get(id);
16
+ }
17
+ hasColumn(id) {
18
+ return !!this.columnsById$.get(id);
19
+ }
20
+ hasMatchingColumn(row, regex) {
21
+ // only search the visible columns
22
+ return !!this.value.find(c => regex.test(c.getSearchTextFor(row)));
23
+ }
24
+ addColumn(column, index) {
25
+ if (this.hasColumn(column.columnId)) {
26
+ lang.illegalState(`Column with id=${column.columnId} already exists`);
27
+ }
28
+ this.registerDisposable(column);
29
+ this.runInTransaction(() => {
30
+ if (!isNil(index)) {
31
+ this._allColumns$.insert(index, column);
32
+ }
33
+ else {
34
+ this._allColumns$.push(column);
35
+ }
36
+ this.registerDisposable(this.trackSource(column.visible$));
37
+ });
38
+ return column;
39
+ }
40
+ doComputeValue() {
41
+ return this._allColumns$.value.filter(c => c.visible$.value);
42
+ }
43
+ }
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLWxpc3QtbW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdWktcG93ZXJ1cHMvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlcy9jb2x1bW4vY29sdW1uLWxpc3QtbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHlCQUF5QixFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQTRCLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEgsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUcvQixNQUFNLE9BQU8sZUFBcUIsU0FBUSx5QkFBb0Q7SUFFM0UsWUFBWSxHQUFHLElBQUksZ0JBQWdCLEVBQW9CLENBQUM7SUFDeEQsWUFBWSxDQUEwQztJQUV2RTtRQUNFLEtBQUssRUFBRSxDQUFDO1FBQ1IsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsU0FBUyxDQUFDLEVBQVU7UUFDbEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQsU0FBUyxDQUFDLEVBQVU7UUFDbEIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELGlCQUFpQixDQUFDLEdBQVEsRUFBRSxLQUFhO1FBQ3ZDLGtDQUFrQztRQUNsQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsU0FBUyxDQUE2QixNQUFTLEVBQUUsS0FBYztRQUM3RCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ25DLElBQUksQ0FBQyxZQUFZLENBQUMsa0JBQWtCLE1BQU0sQ0FBQyxRQUFRLGlCQUFpQixDQUFDLENBQUM7U0FDdkU7UUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRTtZQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7YUFDekM7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDaEM7WUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9ELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29tcHV0ZWRMaXN0TW9kZWwsIERzbCwgbGFuZywgTGlzdE1vZGVsLCBNYXBNb2RlbENoYWluLCBNdXRhYmxlTGlzdE1vZGVsIH0gZnJvbSAnQGNvb2xvbi9wZWN0aW4nO1xuXG5pbXBvcnQgeyBpc05pbCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBDb2x1bW5Nb2RlbCB9IGZyb20gJy4vY29sdW1uLW1vZGVsJztcblxuZXhwb3J0IGNsYXNzIENvbHVtbkxpc3RNb2RlbDxSb3c+IGV4dGVuZHMgQWJzdHJhY3RDb21wdXRlZExpc3RNb2RlbDxDb2x1bW5Nb2RlbDxSb3c+LCBib29sZWFuPiB7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfYWxsQ29sdW1ucyQgPSBuZXcgTXV0YWJsZUxpc3RNb2RlbDxDb2x1bW5Nb2RlbDxSb3c+PigpO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbHVtbnNCeUlkJDogTWFwTW9kZWxDaGFpbjxzdHJpbmcsIENvbHVtbk1vZGVsPFJvdz4+O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgY29uc3QgeyBjaGFpbiB9ID0gRHNsLmRpc3Bvc2VXaXRoKHRoaXMpO1xuICAgIHRoaXMuY29sdW1uc0J5SWQkID0gY2hhaW4odGhpcy5fYWxsQ29sdW1ucyQpLmluZGV4QnkoJ2NvbHVtbklkJyk7XG4gIH1cblxuICBnZXQgYWxsQ29sdW1ucyQoKTogTGlzdE1vZGVsPENvbHVtbk1vZGVsPFJvdz4+IHtcbiAgICByZXR1cm4gdGhpcy5fYWxsQ29sdW1ucyQucmVhZG9ubHkkO1xuICB9XG5cbiAgZ2V0Q29sdW1uKGlkOiBzdHJpbmcpOiBDb2x1bW5Nb2RlbDxSb3c+IHtcbiAgICByZXR1cm4gdGhpcy5jb2x1bW5zQnlJZCQuZ2V0KGlkKTtcbiAgfVxuXG4gIGhhc0NvbHVtbihpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5jb2x1bW5zQnlJZCQuZ2V0KGlkKTtcbiAgfVxuXG4gIGhhc01hdGNoaW5nQ29sdW1uKHJvdzogUm93LCByZWdleDogUmVnRXhwKTogYm9vbGVhbiB7XG4gICAgLy8gb25seSBzZWFyY2ggdGhlIHZpc2libGUgY29sdW1uc1xuICAgIHJldHVybiAhIXRoaXMudmFsdWUuZmluZChjID0+IHJlZ2V4LnRlc3QoYy5nZXRTZWFyY2hUZXh0Rm9yKHJvdykpKTtcbiAgfVxuXG4gIGFkZENvbHVtbjxDIGV4dGVuZHMgQ29sdW1uTW9kZWw8Um93Pj4oY29sdW1uOiBDLCBpbmRleD86IG51bWJlcik6IEMge1xuICAgIGlmICh0aGlzLmhhc0NvbHVtbihjb2x1bW4uY29sdW1uSWQpKSB7XG4gICAgICBsYW5nLmlsbGVnYWxTdGF0ZShgQ29sdW1uIHdpdGggaWQ9JHtjb2x1bW4uY29sdW1uSWR9IGFscmVhZHkgZXhpc3RzYCk7XG4gICAgfVxuICAgIHRoaXMucmVnaXN0ZXJEaXNwb3NhYmxlKGNvbHVtbik7XG4gICAgdGhpcy5ydW5JblRyYW5zYWN0aW9uKCgpID0+IHtcbiAgICAgIGlmICghaXNOaWwoaW5kZXgpKSB7XG4gICAgICAgIHRoaXMuX2FsbENvbHVtbnMkLmluc2VydChpbmRleCwgY29sdW1uKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2FsbENvbHVtbnMkLnB1c2goY29sdW1uKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVnaXN0ZXJEaXNwb3NhYmxlKHRoaXMudHJhY2tTb3VyY2UoY29sdW1uLnZpc2libGUkKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGNvbHVtbjtcbiAgfVxuXG4gIGRvQ29tcHV0ZVZhbHVlKCk6IENvbHVtbk1vZGVsPFJvdz5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX2FsbENvbHVtbnMkLnZhbHVlLmZpbHRlcihjID0+IGMudmlzaWJsZSQudmFsdWUpO1xuICB9XG59XG4iXX0=
@@ -1,13 +1,12 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
2
  import { ComponentRef } from "@angular/core";
3
3
  import { DelegatingValueModel, Dsl, Functions, GarbageCollector } from "@coolon/pectin";
4
- import { assert, lang, Stringy } from "@coolon/typescript-utilities";
4
+ import { lang, assert, Stringy } from "@coolon/typescript-utilities";
5
5
  import { Memoize } from "@typescript-plus/fast-memoize-decorator";
6
- import { ColumnTextSearchFormatter } from "../filter/column-text-search-formatter";
7
6
  import { CellHeaderPortalRef } from "../renderer/cell-portal-ref";
8
7
  import { DefaultHeaderCellRendererComponent } from "../renderer/default-header-cell-renderer/default-header-cell-renderer.component";
8
+ import { ColumnTextSearchFormatter } from "../filter/column-text-search-formatter";
9
9
  const noop = () => {
10
- // noop
11
10
  };
12
11
  class ColumnTextSearchWrapper extends ColumnTextSearchFormatter.Delegate {
13
12
  _delegate;
@@ -18,8 +17,8 @@ class ColumnTextSearchWrapper extends ColumnTextSearchFormatter.Delegate {
18
17
  }
19
18
  }
20
19
  format(row) {
21
- const value = this._map(row);
22
- const result = this._delegate ? this._delegate.format(value) : "";
20
+ let value = this._map(row);
21
+ let result = this._delegate ? this._delegate.format(value) : "";
23
22
  // console.log({format: row, value, text:result})
24
23
  return result;
25
24
  }
@@ -30,7 +29,6 @@ class ColumnTextSearchWrapper extends ColumnTextSearchFormatter.Delegate {
30
29
  }
31
30
  export class ColumnModel extends GarbageCollector {
32
31
  columnId;
33
- order;
34
32
  textPropertiesProvider;
35
33
  _columnTextProperties;
36
34
  _columnHeaderPortalRef;
@@ -44,10 +42,9 @@ export class ColumnModel extends GarbageCollector {
44
42
  dasherisedColumnId;
45
43
  textSearchDelegate = new ColumnTextSearchWrapper();
46
44
  visible$;
47
- constructor(columnId, order, textPropertiesProvider) {
45
+ constructor(columnId, textPropertiesProvider) {
48
46
  super();
49
47
  this.columnId = columnId;
50
- this.order = order;
51
48
  this.textPropertiesProvider = textPropertiesProvider;
52
49
  const { valueOf } = Dsl.disposeWith(this);
53
50
  this.installHeaderRenderer();
@@ -92,14 +89,6 @@ export class ColumnModel extends GarbageCollector {
92
89
  this._columnTextProperties = columnTextProperties;
93
90
  return this;
94
91
  }
95
- positionAfter(column) {
96
- this.order.position(this, { after: column });
97
- return this;
98
- }
99
- positionBefore(column) {
100
- this.order.position(this, { before: column });
101
- return this;
102
- }
103
92
  getSearchTextFor(row) {
104
93
  return this.textSearchDelegate.format(row);
105
94
  }
@@ -198,4 +187,4 @@ __decorate([
198
187
  (function (ColumnModel) {
199
188
  ColumnModel.CELL_RENDERER_COMPONENT_ROW_CACHE = Symbol('aup-cell-renderer:row-data-cache');
200
189
  })(ColumnModel || (ColumnModel = {}));
201
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLW1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXMvY29sdW1uL2NvbHVtbi1tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsT0FBTyxFQUFDLFlBQVksRUFBVyxNQUFNLGVBQWUsQ0FBQztBQUNyRCxPQUFPLEVBQVUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBQzNHLE9BQU8sRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUVoRSxPQUFPLEVBQUMseUJBQXlCLEVBQUMsTUFBTSx3Q0FBd0MsQ0FBQztBQUNqRixPQUFPLEVBQXNCLG1CQUFtQixFQUF3QixNQUFNLDZCQUE2QixDQUFDO0FBQzVHLE9BQU8sRUFDTCxrQ0FBa0MsRUFDbkMsTUFBTSxpRkFBaUYsQ0FBQztBQVF6RixNQUFNLElBQUksR0FBRyxHQUFHLEVBQUU7SUFDaEIsT0FBTztBQUNULENBQUMsQ0FBQztBQW9CRixNQUFNLHVCQUE2QixTQUFRLHlCQUF5QixDQUFDLFFBQWE7SUFDeEUsU0FBUyxDQUFpQztJQUMxQyxJQUFJLEdBQXFCLFNBQVMsQ0FBQyxRQUFRLENBQUM7SUFFcEQsVUFBVSxDQUFDLFFBQWtCO1FBQzNCLElBQUksSUFBSSxDQUFDLFNBQVMsWUFBWSx5QkFBeUIsQ0FBQyxRQUFRLEVBQUU7WUFDaEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDckM7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLEdBQVE7UUFDYixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDbEUsaURBQWlEO1FBQ2pELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxXQUFXLENBQUksU0FBdUMsRUFBRSxNQUF1QjtRQUM3RSxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDO0lBQzNDLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxXQUFpQixTQUFRLGdCQUFnQjtJQW9CL0I7SUFBbUM7SUFBbUM7SUFsQm5GLHFCQUFxQixDQUF1QjtJQUU1QyxzQkFBc0IsQ0FBZ0M7SUFDdEQsc0JBQXNCLENBQWtDO0lBQ3hELG9CQUFvQixDQUFnQztJQUVwRCxtQkFBbUIsR0FBRyxJQUFJLENBQUM7SUFDM0IsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUVkLG1CQUFtQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLG9CQUFvQixFQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDckcsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksb0JBQW9CLEVBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNwRyxhQUFhLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksb0JBQW9CLEVBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztJQUNsSCxrQkFBa0IsQ0FBUztJQUVuQixrQkFBa0IsR0FBRyxJQUFJLHVCQUF1QixFQUFPLENBQUM7SUFFaEUsUUFBUSxDQUFzQjtJQUV2QyxZQUFxQixRQUFnQixFQUFtQixLQUF5QixFQUFVLHNCQUEwRDtRQUNuSixLQUFLLEVBQUUsQ0FBQztRQURXLGFBQVEsR0FBUixRQUFRLENBQVE7UUFBbUIsVUFBSyxHQUFMLEtBQUssQ0FBb0I7UUFBVSwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQW9DO1FBRW5KLE1BQU0sRUFBQyxPQUFPLEVBQUMsR0FBRyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3hFLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FDekIsSUFBSSxDQUFDLGFBQWEsRUFDbEIsSUFBSSxDQUFDLGtCQUFrQixDQUN4QixDQUFDLFNBQVMsRUFBRSxDQUFBO0lBQ2YsQ0FBQztJQUVTLHFCQUFxQjtRQUM3QixJQUFJLENBQUMsa0JBQWtCLENBQUMsa0NBQWtDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDaEYsU0FBUyxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBR0QsYUFBYTtRQUNYLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDckYsQ0FBQztJQUVELFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO0lBQzdCLENBQUM7SUFFRCxZQUFZLENBQUMsT0FBNEI7UUFDdkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDeEMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRVMsb0JBQW9CLENBQUMsT0FBNEI7UUFDekQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRVMsbUJBQW1CLENBQUMsT0FBNEI7UUFDeEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRVMsb0JBQW9CO1FBQzVCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBR0QsdUJBQXVCO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixJQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ3JFLENBQUM7SUFFRDs7O09BR0c7SUFDSCxjQUFjLENBQUMsb0JBQTBDO1FBQ3ZELE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELG9CQUFvQixDQUFDLG9CQUEwQztRQUM3RCxJQUFJLENBQUMscUJBQXFCLEdBQUcsb0JBQW9CLENBQUM7UUFDbEQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQXdCO1FBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFDLEtBQUssRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFDO1FBQzNDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUF3QjtRQUNyQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBQyxNQUFNLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQztRQUM1QyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxHQUFRO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUM5QyxDQUFDO0lBSUQseUJBQXlCLENBQUMsU0FBeUMsRUFBRSxNQUF5QjtRQUM1RixNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3pCLGdEQUFnRDtRQUNoRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN2RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFHUyx1QkFBdUIsQ0FBSSxNQUFxQztRQUN4RSxJQUFJLENBQUMsc0JBQXNCLEdBQUcsTUFBTSxDQUFDO0lBQ3ZDLENBQUM7SUFFUyxxQkFBcUIsQ0FBSSxNQUF1QztRQUN4RSxJQUFJLENBQUMsc0JBQXNCLEdBQUcsTUFBTSxDQUFDO0lBQ3ZDLENBQUM7SUFFUyxtQkFBbUIsQ0FBSSxVQUF1QztRQUN0RSxJQUFJLENBQUMsb0JBQW9CLEdBQUcsVUFBVSxDQUFDO0lBQ3pDLENBQUM7SUFFRCxrQkFBa0IsQ0FBSSxhQUErQixFQUFFLFdBQTZEO1FBQ2xILElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLG1CQUFtQixDQUFTLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDO1FBQzFGLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSTtRQUNkLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxNQUFNO1FBQ0osT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDO0lBQ3JDLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUFTO1FBQ3hCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxVQUFVLENBQUMsSUFBUztRQUNsQixJQUFJLENBQUMsc0JBQXNCLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN2RCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRTtZQUMxQixJQUFJLENBQUMsb0JBQW9CLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztTQUN0RDtJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUE4QixFQUFFLEdBQStCO1FBQzlFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBNkIsRUFBRSxHQUErQjtRQUMvRSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsV0FBVztJQUNYLGdCQUFnQixDQUFDLElBQTZCLEVBQUUsR0FBK0I7UUFDN0UsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELG1CQUFtQixDQUFDLElBQTZCO1FBQy9DLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVTLGlCQUFpQixDQUFDLGdCQUF5QjtRQUNuRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsZ0JBQWdCLENBQUM7UUFDNUMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQscUJBQXFCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ2xDLENBQUM7SUFFUyxZQUFZLENBQUMsR0FBK0I7UUFDcEQsSUFBSSxHQUFHLFlBQVksWUFBWSxFQUFFO1lBQy9CLE9BQU8sR0FBRyxDQUFDLFFBQVEsQ0FBQztTQUNyQjthQUFNO1lBQ0wsT0FBTyxDQUFDLEtBQUssQ0FBQyw2Q0FBNkMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNsRSxJQUFJLENBQUMsWUFBWSxDQUFDLCtDQUErQyxHQUFHLEVBQUUsQ0FBQyxDQUFBO1NBQ3hFO0lBQ0gsQ0FBQztJQUNTLDBCQUEwQixDQUFDLEdBQStCO1FBQ2xFLElBQUksR0FBRyxZQUFZLFlBQVksRUFBRTtZQUMvQixPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUM7U0FDckI7YUFBTTtZQUNMLE9BQU8sR0FBRyxDQUFDO1NBQ1o7SUFDSCxDQUFDO0lBRUQsVUFBVSxDQUFDLFFBQWtCO1FBQzNCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDL0MsQ0FBQztDQUNGO0FBMUpDO0lBREMsT0FBTyxFQUFFOzs7O2dEQUdUO0FBd0JEO0lBREMsT0FBTyxFQUFFOzs7OzBEQUdUO0FBZ0lILFdBQWlCLFdBQVc7SUFDYiw2Q0FBaUMsR0FBRyxNQUFNLENBQUMsa0NBQWtDLENBQUMsQ0FBQztBQUU5RixDQUFDLEVBSGdCLFdBQVcsS0FBWCxXQUFXLFFBRzNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnRUeXBlfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL292ZXJsYXlcIjtcbmltcG9ydCB7Q2RrUG9ydGFsT3V0bGV0QXR0YWNoZWRSZWZ9IGZyb20gXCJAYW5ndWxhci9jZGsvcG9ydGFsXCI7XG5pbXBvcnQge0NvbXBvbmVudFJlZiwgSW5qZWN0b3J9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge0NvbW1hbmQsIERlbGVnYXRpbmdWYWx1ZU1vZGVsLCBEc2wsIEZ1bmN0aW9ucywgR2FyYmFnZUNvbGxlY3RvciwgVmFsdWVNb2RlbH0gZnJvbSBcIkBjb29sb24vcGVjdGluXCI7XG5pbXBvcnQge2Fzc2VydCwgbGFuZywgU3RyaW5neX0gZnJvbSBcIkBjb29sb24vdHlwZXNjcmlwdC11dGlsaXRpZXNcIjtcbmltcG9ydCB7TWVtb2l6ZX0gZnJvbSBcIkB0eXBlc2NyaXB0LXBsdXMvZmFzdC1tZW1vaXplLWRlY29yYXRvclwiO1xuaW1wb3J0IHtFZGl0U2Vzc2lvbn0gZnJvbSBcIi4uL2VkaXRvci9lZGl0LXNlc3Npb25cIjtcbmltcG9ydCB7Q29sdW1uVGV4dFNlYXJjaEZvcm1hdHRlcn0gZnJvbSBcIi4uL2ZpbHRlci9jb2x1bW4tdGV4dC1zZWFyY2gtZm9ybWF0dGVyXCI7XG5pbXBvcnQge0NlbGxFZGl0b3JQb3J0YWxSZWYsIENlbGxIZWFkZXJQb3J0YWxSZWYsIENlbGxSZW5kZXJlclBvcnRhbFJlZn0gZnJvbSBcIi4uL3JlbmRlcmVyL2NlbGwtcG9ydGFsLXJlZlwiO1xuaW1wb3J0IHtcbiAgRGVmYXVsdEhlYWRlckNlbGxSZW5kZXJlckNvbXBvbmVudFxufSBmcm9tIFwiLi4vcmVuZGVyZXIvZGVmYXVsdC1oZWFkZXItY2VsbC1yZW5kZXJlci9kZWZhdWx0LWhlYWRlci1jZWxsLXJlbmRlcmVyLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtUYWJsZUNlbGxDb21wb25lbnR9IGZyb20gXCIuLi9yZW5kZXJlci90YWJsZS1jZWxsL3RhYmxlLWNlbGwuY29tcG9uZW50XCI7XG5pbXBvcnQge1RhYmxlSGVhZGVyQ2VsbENvbXBvbmVudH0gZnJvbSBcIi4uL3JlbmRlcmVyL3RhYmxlLWhlYWRlci1jZWxsL3RhYmxlLWhlYWRlci1jZWxsLmNvbXBvbmVudFwiO1xuaW1wb3J0IHtDb2x1bW5NYW5hZ2VyfSBmcm9tIFwiLi9jb2x1bW4tbWFuYWdlclwiO1xuaW1wb3J0IHtDb2x1bW5PcmRlck1hbmFnZXJ9IGZyb20gXCIuL2NvbHVtbi1vcmRlci1tYW5hZ2VyXCI7XG5pbXBvcnQge0NvbHVtblRleHRQcm9wZXJ0aWVzfSBmcm9tIFwiLi9jb2x1bW4tdGV4dC1wcm9wZXJ0aWVzXCI7XG5cblxuY29uc3Qgbm9vcCA9ICgpID0+IHtcbiAgLy8gbm9vcFxufTtcblxuZXhwb3J0IGludGVyZmFjZSBSb3dEYXRhPFJvdz4ge1xuICByb3c6IFJvdztcbiAgZWRpdFNlc3Npb24/OiBFZGl0U2Vzc2lvbjxSb3c+O1xuICBlZGl0Um93Q29tbWFuZDogQ29tbWFuZDx2b2lkPjtcbn1cblxuZXhwb3J0IHR5cGUgT25Db21wb25lbnRJbml0PEM+ID0gKGNvbXBvbmVudDogQykgPT4gdm9pZDtcblxuZXhwb3J0IGludGVyZmFjZSBDZWxsUmVuZGVyZXJPcHRpb25zPFJvdywgRT4ge1xuICBvbkNvbXBvbmVudEluaXQ/OiAoY29tcG9uZW50OiBFKSA9PiB2b2lkO1xuICBvblJvd1VwZGF0ZT86IChjb21wb25lbnQ6IEUsIHJvdzogUm93KSA9PiB2b2lkO1xufVxuXG5cbmV4cG9ydCBpbnRlcmZhY2UgTXV0YWJsZUNlbGxSZW5kZXJlck9wdGlvbnM8Um93LCBFLCBQIGV4dGVuZHMga2V5b2YgUm93PiBleHRlbmRzIENlbGxSZW5kZXJlck9wdGlvbnM8Um93LCBFPiB7XG4gIG9uVmFsdWVFZGl0OiAocm93OiBSb3csIGlzOiBSb3dbUF0sIHdhczogUm93W1BdKSA9PiB2b2lkO1xufVxuXG5jbGFzcyBDb2x1bW5UZXh0U2VhcmNoV3JhcHBlcjxSb3c+IGV4dGVuZHMgQ29sdW1uVGV4dFNlYXJjaEZvcm1hdHRlci5EZWxlZ2F0ZTxSb3c+e1xuICBwcml2YXRlIF9kZWxlZ2F0ZTogQ29sdW1uVGV4dFNlYXJjaEZvcm1hdHRlcjxhbnk+O1xuICBwcml2YXRlIF9tYXA6IChyb3c6Um93KSA9PiBhbnkgPSBGdW5jdGlvbnMuaWRlbnRpdHk7XG5cbiAgaW5pdGlhbGlzZShpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICBpZiAodGhpcy5fZGVsZWdhdGUgaW5zdGFuY2VvZiBDb2x1bW5UZXh0U2VhcmNoRm9ybWF0dGVyLkRlbGVnYXRlKSB7XG4gICAgICB0aGlzLl9kZWxlZ2F0ZS5pbml0aWFsaXNlKGluamVjdG9yKTtcbiAgICB9XG4gIH1cblxuICBmb3JtYXQocm93OiBSb3cpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fbWFwKHJvdyk7XG4gICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fZGVsZWdhdGUgPyB0aGlzLl9kZWxlZ2F0ZS5mb3JtYXQodmFsdWUpIDogXCJcIjtcbiAgICAvLyBjb25zb2xlLmxvZyh7Zm9ybWF0OiByb3csIHZhbHVlLCB0ZXh0OnJlc3VsdH0pXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHNldERlbGVnYXRlPFQ+KGZvcm1hdHRlcjogQ29sdW1uVGV4dFNlYXJjaEZvcm1hdHRlcjxUPiwgbWFwcGVyPzogKHJvdzpSb3cpID0+IFQpIHtcbiAgICB0aGlzLl9kZWxlZ2F0ZSA9IGZvcm1hdHRlcjtcbiAgICB0aGlzLl9tYXAgPSBtYXBwZXIgPz8gRnVuY3Rpb25zLmlkZW50aXR5O1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBDb2x1bW5Nb2RlbDxSb3c+IGV4dGVuZHMgR2FyYmFnZUNvbGxlY3RvciB7XG5cbiAgcHJpdmF0ZSBfY29sdW1uVGV4dFByb3BlcnRpZXM6IENvbHVtblRleHRQcm9wZXJ0aWVzO1xuXG4gIHByaXZhdGUgX2NvbHVtbkhlYWRlclBvcnRhbFJlZjogQ2VsbEhlYWRlclBvcnRhbFJlZjxSb3csIGFueT47XG4gIHByaXZhdGUgX2NlbGxSZW5kZXJlclBvcnRhbFJlZjogQ2VsbFJlbmRlcmVyUG9ydGFsUmVmPFJvdywgYW55PjtcbiAgcHJpdmF0ZSBfY2VsbEVkaXRvclBvcnRhbFJlZjogQ2VsbEVkaXRvclBvcnRhbFJlZjxSb3csIGFueT47XG5cbiAgcHJpdmF0ZSBfZW5hYmxlUm93U2VsZWN0aW9uID0gdHJ1ZTtcbiAgcHJpdmF0ZSBfZmxleCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX2RlZmF1bHRWaXNpYmlsaXR5JCA9IHRoaXMucmVnaXN0ZXJEaXNwb3NhYmxlKG5ldyBEZWxlZ2F0aW5nVmFsdWVNb2RlbDxib29sZWFuPigpLndpdGhEZWZhdWx0KHRydWUpKTtcbiAgcHJpdmF0ZSBfbWFzdGVyVmlzaWJpbGl0eSQgPSB0aGlzLnJlZ2lzdGVyRGlzcG9zYWJsZShuZXcgRGVsZWdhdGluZ1ZhbHVlTW9kZWw8Ym9vbGVhbj4oKS53aXRoRGVmYXVsdCh0cnVlKSk7XG4gIHByaXZhdGUgX3VzZXJWaXNpYmxlJCA9IHRoaXMucmVnaXN0ZXJEaXNwb3NhYmxlKG5ldyBEZWxlZ2F0aW5nVmFsdWVNb2RlbDxib29sZWFuPigpLndpdGhEZWZhdWx0KHRoaXMuX2RlZmF1bHRWaXNpYmlsaXR5JCkpO1xuICByZWFkb25seSBkYXNoZXJpc2VkQ29sdW1uSWQ6IHN0cmluZztcblxuICBwcml2YXRlIHJlYWRvbmx5IHRleHRTZWFyY2hEZWxlZ2F0ZSA9IG5ldyBDb2x1bW5UZXh0U2VhcmNoV3JhcHBlcjxSb3c+KCk7XG5cbiAgcmVhZG9ubHkgdmlzaWJsZSQ6IFZhbHVlTW9kZWw8Ym9vbGVhbj47XG5cbiAgY29uc3RydWN0b3IocmVhZG9ubHkgY29sdW1uSWQ6IHN0cmluZywgcHJpdmF0ZSByZWFkb25seSBvcmRlcjogQ29sdW1uT3JkZXJNYW5hZ2VyLCBwcml2YXRlIHRleHRQcm9wZXJ0aWVzUHJvdmlkZXI6IENvbHVtbk1vZGVsLlRleHRQcm9wZXJ0aWVzUHJvdmlkZXIpIHtcbiAgICBzdXBlcigpO1xuICAgIGNvbnN0IHt2YWx1ZU9mfSA9IERzbC5kaXNwb3NlV2l0aCh0aGlzKTtcbiAgICB0aGlzLmluc3RhbGxIZWFkZXJSZW5kZXJlcigpO1xuICAgIHRoaXMuZGFzaGVyaXNlZENvbHVtbklkID0gU3RyaW5neS5mcm9tKGNvbHVtbklkKS5kYXNoZXJpemUoKS50b1N0cmluZygpO1xuICAgIHRoaXMudmlzaWJsZSQgPSB2YWx1ZU9mLmFsbChcbiAgICAgIHRoaXMuX3VzZXJWaXNpYmxlJCxcbiAgICAgIHRoaXMuX21hc3RlclZpc2liaWxpdHkkXG4gICAgKS5hcmVUcnV0aHkoKVxuICB9XG5cbiAgcHJvdGVjdGVkIGluc3RhbGxIZWFkZXJSZW5kZXJlcigpIHtcbiAgICB0aGlzLmNlbGxIZWFkZXJSZW5kZXJlcihEZWZhdWx0SGVhZGVyQ2VsbFJlbmRlcmVyQ29tcG9uZW50LCAoY29tcG9uZW50LCBjb2x1bW4pID0+IHtcbiAgICAgIGNvbXBvbmVudC5oZWFkZXJUZXh0ID0gY29sdW1uLmdldEhlYWRlclRleHQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIEBNZW1vaXplKClcbiAgZ2V0SGVhZGVyVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldENvbHVtblRleHRQcm9wZXJ0aWVzKCk/LmhlYWRlclRleHQoKSA/PyB0aGlzLmdldERlZmF1bHRIZWFkZXJUZXh0KCk7XG4gIH1cblxuICBpc1Zpc2libGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZSQudmFsdWU7XG4gIH1cblxuICB2aXNpYmxlV2hpbGUodmlzaWJsZTogVmFsdWVNb2RlbDxib29sZWFuPik6IHRoaXMge1xuICAgIHRoaXMuX3VzZXJWaXNpYmxlJC5zZXREZWxlZ2F0ZSh2aXNpYmxlKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXREZWZhdWx0VmlzaWJpbGl0eSh2aXNpYmxlOiBWYWx1ZU1vZGVsPGJvb2xlYW4+KSB7XG4gICAgdGhpcy5fZGVmYXVsdFZpc2liaWxpdHkkLnNldERlbGVnYXRlKHZpc2libGUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldE1hc3RlclZpc2liaWxpdHkodmlzaWJsZTogVmFsdWVNb2RlbDxib29sZWFuPikge1xuICAgIHRoaXMuX21hc3RlclZpc2liaWxpdHkkLnNldERlbGVnYXRlKHZpc2libGUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldERlZmF1bHRIZWFkZXJUZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbklkO1xuICB9XG5cbiAgQE1lbW9pemUoKVxuICBnZXRDb2x1bW5UZXh0UHJvcGVydGllcygpOiBDb2x1bW5UZXh0UHJvcGVydGllcyB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtblRleHRQcm9wZXJ0aWVzID8/IHRoaXMudGV4dFByb3BlcnRpZXNQcm92aWRlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHVzZSAjY29sdW1uVGV4dFByb3BlcnRpZXMgaW5zdGVhZFxuICAgKiBAcGFyYW0gY29sdW1uVGV4dFByb3BlcnRpZXNcbiAgICovXG4gIHRleHRQcm9wZXJ0aWVzKGNvbHVtblRleHRQcm9wZXJ0aWVzOiBDb2x1bW5UZXh0UHJvcGVydGllcyk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmNvbHVtblRleHRQcm9wZXJ0aWVzKGNvbHVtblRleHRQcm9wZXJ0aWVzKTtcbiAgfVxuXG4gIGNvbHVtblRleHRQcm9wZXJ0aWVzKGNvbHVtblRleHRQcm9wZXJ0aWVzOiBDb2x1bW5UZXh0UHJvcGVydGllcyk6IHRoaXMge1xuICAgIHRoaXMuX2NvbHVtblRleHRQcm9wZXJ0aWVzID0gY29sdW1uVGV4dFByb3BlcnRpZXM7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwb3NpdGlvbkFmdGVyKGNvbHVtbjogQ29sdW1uTW9kZWw8YW55Pik6dGhpcyB7XG4gICAgdGhpcy5vcmRlci5wb3NpdGlvbih0aGlzLCB7YWZ0ZXI6IGNvbHVtbn0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcG9zaXRpb25CZWZvcmUoY29sdW1uOiBDb2x1bW5Nb2RlbDxhbnk+KTp0aGlzIHtcbiAgICB0aGlzLm9yZGVyLnBvc2l0aW9uKHRoaXMsIHtiZWZvcmU6IGNvbHVtbn0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZ2V0U2VhcmNoVGV4dEZvcihyb3c6IFJvdyk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gdGhpcy50ZXh0U2VhcmNoRGVsZWdhdGUuZm9ybWF0KHJvdylcbiAgfVxuXG4gIGNvbmZpZ3VyZUNvbHVtblRleHRTZWFyY2goZm9ybWF0dGVyOiBDb2x1bW5UZXh0U2VhcmNoRm9ybWF0dGVyPFJvdz4pOnRoaXNcbiAgY29uZmlndXJlQ29sdW1uVGV4dFNlYXJjaDxUPihmb3JtYXR0ZXI6IENvbHVtblRleHRTZWFyY2hGb3JtYXR0ZXI8VD4sIG1hcHBlcjogKHJvdzpSb3cpID0+IFQpOnRoaXNcbiAgY29uZmlndXJlQ29sdW1uVGV4dFNlYXJjaChmb3JtYXR0ZXI6IENvbHVtblRleHRTZWFyY2hGb3JtYXR0ZXI8YW55PiwgbWFwcGVyPzogKHJvdzpSb3cpID0+IGFueSk6dGhpcyB7XG4gICAgYXNzZXJ0Lm5vdE5pbChmb3JtYXR0ZXIpO1xuICAgIC8vIGNvbnNvbGUubG9nKHtjb2w6IHRoaXMuY29sdW1uSWQsIGZvcm1hdHRlcn0pO1xuICAgIHRoaXMudGV4dFNlYXJjaERlbGVnYXRlLnNldERlbGVnYXRlKGZvcm1hdHRlciwgbWFwcGVyKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG5cbiAgcHJvdGVjdGVkIGNvbmZpZ3VyZUhlYWRlclJlbmRlcmVyPEM+KGNvbmZpZzogQ2VsbEhlYWRlclBvcnRhbFJlZjxSb3csIGFueT4pOiB2b2lkIHtcbiAgICB0aGlzLl9jb2x1bW5IZWFkZXJQb3J0YWxSZWYgPSBjb25maWc7XG4gIH1cblxuICBwcm90ZWN0ZWQgY29uZmlndXJlQ2VsbFJlbmRlcmVyPEM+KGNvbmZpZzogQ2VsbFJlbmRlcmVyUG9ydGFsUmVmPFJvdywgYW55Pik6IHZvaWQge1xuICAgIHRoaXMuX2NlbGxSZW5kZXJlclBvcnRhbFJlZiA9IGNvbmZpZztcbiAgfVxuXG4gIHByb3RlY3RlZCBjb25maWd1cmVDZWxsRWRpdG9yPEU+KGNlbGxFZGl0b3I6IENlbGxFZGl0b3JQb3J0YWxSZWY8Um93LCBFPik6IHZvaWQge1xuICAgIHRoaXMuX2NlbGxFZGl0b3JQb3J0YWxSZWYgPSBjZWxsRWRpdG9yO1xuICB9XG5cbiAgY2VsbEhlYWRlclJlbmRlcmVyPEM+KGNvbXBvbmVudFR5cGU6IENvbXBvbmVudFR5cGU8Qz4sIGluaXRpYWxpc2VyOiAoY29tcG9uZW50OiBDLCBjb2x1bW46IENvbHVtbk1vZGVsPFJvdz4pID0+IHZvaWQpOiB0aGlzIHtcbiAgICB0aGlzLmNvbmZpZ3VyZUhlYWRlclJlbmRlcmVyKG5ldyBDZWxsSGVhZGVyUG9ydGFsUmVmPFJvdywgQz4oY29tcG9uZW50VHlwZSwgaW5pdGlhbGlzZXIpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGZsZXgoZmxleCA9IHRydWUpIHtcbiAgICB0aGlzLl9mbGV4ID0gZmxleDtcbiAgfVxuXG4gIGlzRmxleCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZmxleDtcbiAgfVxuXG4gIGhhc0VkaXRvclBvcnRhbCgpIHtcbiAgICByZXR1cm4gISF0aGlzLl9jZWxsRWRpdG9yUG9ydGFsUmVmO1xuICB9XG5cbiAgYXR0YWNoSGVhZGVyQ2VsbChob3N0OiBhbnkpIHtcbiAgICB0aGlzLl9jb2x1bW5IZWFkZXJQb3J0YWxSZWYuaW5pdGlhbGlzZUhvc3QoaG9zdCwgdGhpcyk7XG4gIH1cblxuICBhdHRhY2hDZWxsKGhvc3Q6IGFueSkge1xuICAgIHRoaXMuX2NlbGxSZW5kZXJlclBvcnRhbFJlZi5pbml0aWFsaXNlSG9zdChob3N0LCB0aGlzKTtcbiAgICBpZiAodGhpcy5oYXNFZGl0b3JQb3J0YWwoKSkge1xuICAgICAgdGhpcy5fY2VsbEVkaXRvclBvcnRhbFJlZi5pbml0aWFsaXNlSG9zdChob3N0LCB0aGlzKTtcbiAgICB9XG4gIH1cblxuICBvbkhlYWRlckF0dGFjaGVkKGhvc3Q6IFRhYmxlSGVhZGVyQ2VsbENvbXBvbmVudCwgcmVmOiBDZGtQb3J0YWxPdXRsZXRBdHRhY2hlZFJlZikge1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuZ2V0Q29tcG9uZW50KHJlZik7XG4gICAgdGhpcy5fY29sdW1uSGVhZGVyUG9ydGFsUmVmLm9uUG9ydGFsQXR0YWNoZWQoaG9zdCwgY29tcG9uZW50KTtcbiAgfVxuXG4gIG9uUmVuZGVyZXJBdHRhY2hlZChob3N0OiBUYWJsZUNlbGxDb21wb25lbnQ8Um93PiwgcmVmOiBDZGtQb3J0YWxPdXRsZXRBdHRhY2hlZFJlZikge1xuICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuZ2V0Q29tcG9uZW50T3JFbWJlZGRlZFZpZXcocmVmKTtcbiAgICB0aGlzLl9jZWxsUmVuZGVyZXJQb3J0YWxSZWYub25Qb3J0YWxBdHRhY2hlZChob3N0LCBjb21wb25lbnQpO1xuICB9XG5cbiAgLy8gQFRyYWNlKClcbiAgb25FZGl0b3JBdHRhY2hlZChob3N0OiBUYWJsZUNlbGxDb21wb25lbnQ8Um93PiwgcmVmOiBDZGtQb3J0YWxPdXRsZXRBdHRhY2hlZFJlZikge1xuICAgIHRoaXMuX2NlbGxFZGl0b3JQb3J0YWxSZWYub25Qb3J0YWxBdHRhY2hlZChob3N0LCB0aGlzLmdldENvbXBvbmVudChyZWYpKTtcbiAgfVxuXG4gIHVwZGF0ZVBvcnRhbENvbnRlbnQoaG9zdDogVGFibGVDZWxsQ29tcG9uZW50PFJvdz4pIHtcbiAgICB0aGlzLl9jZWxsUmVuZGVyZXJQb3J0YWxSZWYucHVzaFN0YXRlKGhvc3QpO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9zZWxlY3RSb3dPbkNsaWNrKHNlbGVjdFJvd09uQ2xpY2s6IGJvb2xlYW4pOiB0aGlzIHtcbiAgICB0aGlzLl9lbmFibGVSb3dTZWxlY3Rpb24gPSBzZWxlY3RSb3dPbkNsaWNrO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgaXNSb3dTZWxlY3Rpb25FbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9lbmFibGVSb3dTZWxlY3Rpb247XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Q29tcG9uZW50KHJlZjogQ2RrUG9ydGFsT3V0bGV0QXR0YWNoZWRSZWYpOiBhbnkge1xuICAgIGlmIChyZWYgaW5zdGFuY2VvZiBDb21wb25lbnRSZWYpIHtcbiAgICAgIHJldHVybiByZWYuaW5zdGFuY2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJoZWFkZXJzIG9ubHkgc3VwcG9ydCBjb21wb25lbnQgcG9ydGFscywgZ290XCIsIHJlZik7XG4gICAgICBsYW5nLmlsbGVnYWxTdGF0ZShgaGVhZGVycyBvbmx5IHN1cHBvcnQgY29tcG9uZW50IHBvcnRhbHMsIGdvdCAke3JlZn1gKVxuICAgIH1cbiAgfVxuICBwcm90ZWN0ZWQgZ2V0Q29tcG9uZW50T3JFbWJlZGRlZFZpZXcocmVmOiBDZGtQb3J0YWxPdXRsZXRBdHRhY2hlZFJlZik6IGFueSB7XG4gICAgaWYgKHJlZiBpbnN0YW5jZW9mIENvbXBvbmVudFJlZikge1xuICAgICAgcmV0dXJuIHJlZi5pbnN0YW5jZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlZjtcbiAgICB9XG4gIH1cblxuICBpbml0aWFsaXNlKGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgIHRoaXMudGV4dFNlYXJjaERlbGVnYXRlLmluaXRpYWxpc2UoaW5qZWN0b3IpO1xuICB9XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ29sdW1uTW9kZWwge1xuICBleHBvcnQgY29uc3QgQ0VMTF9SRU5ERVJFUl9DT01QT05FTlRfUk9XX0NBQ0hFID0gU3ltYm9sKCdhdXAtY2VsbC1yZW5kZXJlcjpyb3ctZGF0YS1jYWNoZScpO1xuICBleHBvcnQgdHlwZSBUZXh0UHJvcGVydGllc1Byb3ZpZGVyID0gKCkgPT4gQ29sdW1uVGV4dFByb3BlcnRpZXNcbn1cblxuIl19
190
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLW1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvY29tcG9uZW50cy90YWJsZXMvY29sdW1uL2NvbHVtbi1tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBRUEsT0FBTyxFQUFFLFlBQVksRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBR0wsb0JBQW9CLEVBQ3BCLEdBQUcsRUFDSCxTQUFTLEVBQ1QsZ0JBQWdCLEVBR2pCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDckUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRWxFLE9BQU8sRUFBdUIsbUJBQW1CLEVBQXlCLE1BQU0sNkJBQTZCLENBQUM7QUFDOUcsT0FBTyxFQUNMLGtDQUFrQyxFQUNuQyxNQUFNLGlGQUFpRixDQUFDO0FBR3pGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBSW5GLE1BQU0sSUFBSSxHQUFHLEdBQUcsRUFBRTtBQUNsQixDQUFDLENBQUM7QUFvQkYsTUFBTSx1QkFBNkIsU0FBUSx5QkFBeUIsQ0FBQyxRQUFhO0lBQ3hFLFNBQVMsQ0FBaUM7SUFDMUMsSUFBSSxHQUFxQixTQUFTLENBQUMsUUFBUSxDQUFDO0lBRXBELFVBQVUsQ0FBQyxRQUFrQjtRQUMzQixJQUFJLElBQUksQ0FBQyxTQUFTLFlBQVkseUJBQXlCLENBQUMsUUFBUSxFQUFFO1lBQ2hFLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ3JDO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxHQUFRO1FBQ2IsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFH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SUFEQyxPQUFPLEVBQUU7Ozs7MERBR1Q7QUFzSEgsV0FBaUIsV0FBVztJQUNiLDZDQUFpQyxHQUFHLE1BQU0sQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDO0FBRTlGLENBQUMsRUFIZ0IsV0FBVyxLQUFYLFdBQVcsUUFHM0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRUeXBlIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9vdmVybGF5XCI7XG5pbXBvcnQgeyBDZGtQb3J0YWxPdXRsZXRBdHRhY2hlZFJlZiB9IGZyb20gXCJAYW5ndWxhci9jZGsvcG9ydGFsXCI7XG5pbXBvcnQgeyBDb21wb25lbnRSZWYsIEluamVjdG9yIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7XG4gIEJvb2xlYW5WYWx1ZU1vZGVsQ2hhaW4sXG4gIENvbW1hbmQsXG4gIERlbGVnYXRpbmdWYWx1ZU1vZGVsLFxuICBEc2wsXG4gIEZ1bmN0aW9ucyxcbiAgR2FyYmFnZUNvbGxlY3RvcixcbiAgVHJhY2UsXG4gIFZhbHVlTW9kZWxcbn0gZnJvbSBcIkBjb29sb24vcGVjdGluXCI7XG5pbXBvcnQgeyBsYW5nLCBhc3NlcnQsIFN0cmluZ3kgfSBmcm9tIFwiQGNvb2xvbi90eXBlc2NyaXB0LXV0aWxpdGllc1wiO1xuaW1wb3J0IHsgTWVtb2l6ZSB9IGZyb20gXCJAdHlwZXNjcmlwdC1wbHVzL2Zhc3QtbWVtb2l6ZS1kZWNvcmF0b3JcIjtcbmltcG9ydCB7IEVkaXRTZXNzaW9uIH0gZnJvbSBcIi4uL2VkaXRvci9lZGl0LXNlc3Npb25cIjtcbmltcG9ydCB7IENlbGxFZGl0b3JQb3J0YWxSZWYsIENlbGxIZWFkZXJQb3J0YWxSZWYsIENlbGxSZW5kZXJlclBvcnRhbFJlZiB9IGZyb20gXCIuLi9yZW5kZXJlci9jZWxsLXBvcnRhbC1yZWZcIjtcbmltcG9ydCB7XG4gIERlZmF1bHRIZWFkZXJDZWxsUmVuZGVyZXJDb21wb25lbnRcbn0gZnJvbSBcIi4uL3JlbmRlcmVyL2RlZmF1bHQtaGVhZGVyLWNlbGwtcmVuZGVyZXIvZGVmYXVsdC1oZWFkZXItY2VsbC1yZW5kZXJlci5jb21wb25lbnRcIjtcbmltcG9ydCB7IFRhYmxlQ2VsbENvbXBvbmVudCB9IGZyb20gXCIuLi9yZW5kZXJlci90YWJsZS1jZWxsL3RhYmxlLWNlbGwuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBUYWJsZUhlYWRlckNlbGxDb21wb25lbnQgfSBmcm9tIFwiLi4vcmVuZGVyZXIvdGFibGUtaGVhZGVyLWNlbGwvdGFibGUtaGVhZGVyLWNlbGwuY29tcG9uZW50XCI7XG5pbXBvcnQgeyBDb2x1bW5UZXh0U2VhcmNoRm9ybWF0dGVyIH0gZnJvbSBcIi4uL2ZpbHRlci9jb2x1bW4tdGV4dC1zZWFyY2gtZm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBDb2x1bW5UZXh0UHJvcGVydGllcyB9IGZyb20gXCIuL2NvbHVtbi10ZXh0LXByb3BlcnRpZXNcIjtcblxuXG5jb25zdCBub29wID0gKCkgPT4ge1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBSb3dEYXRhPFJvdz4ge1xuICByb3c6IFJvdztcbiAgZWRpdFNlc3Npb24/OiBFZGl0U2Vzc2lvbjxSb3c+O1xuICBlZGl0Um93Q29tbWFuZDogQ29tbWFuZDx2b2lkPjtcbn1cblxuZXhwb3J0IHR5cGUgT25Db21wb25lbnRJbml0PEM+ID0gKGNvbXBvbmVudDogQykgPT4gdm9pZDtcblxuZXhwb3J0IGludGVyZmFjZSBDZWxsUmVuZGVyZXJPcHRpb25zPFJvdywgRT4ge1xuICBvbkNvbXBvbmVudEluaXQ/OiAoY29tcG9uZW50OiBFKSA9PiB2b2lkO1xuICBvblJvd1VwZGF0ZT86IChjb21wb25lbnQ6IEUsIHJvdzogUm93KSA9PiB2b2lkO1xufVxuXG5cbmV4cG9ydCBpbnRlcmZhY2UgTXV0YWJsZUNlbGxSZW5kZXJlck9wdGlvbnM8Um93LCBFLCBQIGV4dGVuZHMga2V5b2YgUm93PiBleHRlbmRzIENlbGxSZW5kZXJlck9wdGlvbnM8Um93LCBFPiB7XG4gIG9uVmFsdWVFZGl0OiAocm93OiBSb3csIGlzOiBSb3dbUF0sIHdhczogUm93W1BdKSA9PiB2b2lkO1xufVxuXG5jbGFzcyBDb2x1bW5UZXh0U2VhcmNoV3JhcHBlcjxSb3c+IGV4dGVuZHMgQ29sdW1uVGV4dFNlYXJjaEZvcm1hdHRlci5EZWxlZ2F0ZTxSb3c+e1xuICBwcml2YXRlIF9kZWxlZ2F0ZTogQ29sdW1uVGV4dFNlYXJjaEZvcm1hdHRlcjxhbnk+O1xuICBwcml2YXRlIF9tYXA6IChyb3c6Um93KSA9PiBhbnkgPSBGdW5jdGlvbnMuaWRlbnRpdHk7XG5cbiAgaW5pdGlhbGlzZShpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICBpZiAodGhpcy5fZGVsZWdhdGUgaW5zdGFuY2VvZiBDb2x1bW5UZXh0U2VhcmNoRm9ybWF0dGVyLkRlbGVnYXRlKSB7XG4gICAgICB0aGlzLl9kZWxlZ2F0ZS5pbml0aWFsaXNlKGluamVjdG9yKTtcbiAgICB9XG4gIH1cblxuICBmb3JtYXQocm93OiBSb3cpOiBzdHJpbmcge1xuICAgIGxldCB2YWx1ZSA9IHRoaXMuX21hcChyb3cpO1xuICAgIGxldCByZXN1bHQgPSB0aGlzLl9kZWxlZ2F0ZSA/IHRoaXMuX2RlbGVnYXRlLmZvcm1hdCh2YWx1ZSkgOiBcIlwiO1xuICAgIC8vIGNvbnNvbGUubG9nKHtmb3JtYXQ6IHJvdywgdmFsdWUsIHRleHQ6cmVzdWx0fSlcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc2V0RGVsZWdhdGU8VD4oZm9ybWF0dGVyOiBDb2x1bW5UZXh0U2VhcmNoRm9ybWF0dGVyPFQ+LCBtYXBwZXI/OiAocm93OlJvdykgPT4gVCkge1xuICAgIHRoaXMuX2RlbGVnYXRlID0gZm9ybWF0dGVyO1xuICAgIHRoaXMuX21hcCA9IG1hcHBlciA/PyBGdW5jdGlvbnMuaWRlbnRpdHk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENvbHVtbk1vZGVsPFJvdz4gZXh0ZW5kcyBHYXJiYWdlQ29sbGVjdG9yIHtcblxuICBwcml2YXRlIF9jb2x1bW5UZXh0UHJvcGVydGllczogQ29sdW1uVGV4dFByb3BlcnRpZXM7XG5cbiAgcHJpdmF0ZSBfY29sdW1uSGVhZGVyUG9ydGFsUmVmOiBDZWxsSGVhZGVyUG9ydGFsUmVmPFJvdywgYW55PjtcbiAgcHJpdmF0ZSBfY2VsbFJlbmRlcmVyUG9ydGFsUmVmOiBDZWxsUmVuZGVyZXJQb3J0YWxSZWY8Um93LCBhbnk+O1xuICBwcml2YXRlIF9jZWxsRWRpdG9yUG9ydGFsUmVmOiBDZWxsRWRpdG9yUG9ydGFsUmVmPFJvdywgYW55PjtcblxuICBwcml2YXRlIF9lbmFibGVSb3dTZWxlY3Rpb24gPSB0cnVlO1xuICBwcml2YXRlIF9mbGV4ID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfZGVmYXVsdFZpc2liaWxpdHkkID0gdGhpcy5yZWdpc3RlckRpc3Bvc2FibGUobmV3IERlbGVnYXRpbmdWYWx1ZU1vZGVsPGJvb2xlYW4+KCkud2l0aERlZmF1bHQodHJ1ZSkpO1xuICBwcml2YXRlIF9tYXN0ZXJWaXNpYmlsaXR5JCA9IHRoaXMucmVnaXN0ZXJEaXNwb3NhYmxlKG5ldyBEZWxlZ2F0aW5nVmFsdWVNb2RlbDxib29sZWFuPigpLndpdGhEZWZhdWx0KHRydWUpKTtcbiAgcHJpdmF0ZSBfdXNlclZpc2libGUkID0gdGhpcy5yZWdpc3RlckRpc3Bvc2FibGUobmV3IERlbGVnYXRpbmdWYWx1ZU1vZGVsPGJvb2xlYW4+KCkud2l0aERlZmF1bHQodGhpcy5fZGVmYXVsdFZpc2liaWxpdHkkKSk7XG4gIHJlYWRvbmx5IGRhc2hlcmlzZWRDb2x1bW5JZDogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgdGV4dFNlYXJjaERlbGVnYXRlID0gbmV3IENvbHVtblRleHRTZWFyY2hXcmFwcGVyPFJvdz4oKTtcblxuICByZWFkb25seSB2aXNpYmxlJDogVmFsdWVNb2RlbDxib29sZWFuPjtcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBjb2x1bW5JZDogc3RyaW5nLCBwcml2YXRlIHRleHRQcm9wZXJ0aWVzUHJvdmlkZXI6IENvbHVtbk1vZGVsLlRleHRQcm9wZXJ0aWVzUHJvdmlkZXIpIHtcbiAgICBzdXBlcigpO1xuICAgIGNvbnN0IHt2YWx1ZU9mfSA9IERzbC5kaXNwb3NlV2l0aCh0aGlzKTtcbiAgICB0aGlzLmluc3RhbGxIZWFkZXJSZW5kZXJlcigpO1xuICAgIHRoaXMuZGFzaGVyaXNlZENvbHVtbklkID0gU3RyaW5neS5mcm9tKGNvbHVtbklkKS5kYXNoZXJpemUoKS50b1N0cmluZygpO1xuICAgIHRoaXMudmlzaWJsZSQgPSB2YWx1ZU9mLmFsbChcbiAgICAgIHRoaXMuX3VzZXJWaXNpYmxlJCxcbiAgICAgIHRoaXMuX21hc3RlclZpc2liaWxpdHkkXG4gICAgKS5hcmVUcnV0aHkoKVxuICB9XG5cbiAgcHJvdGVjdGVkIGluc3RhbGxIZWFkZXJSZW5kZXJlcigpIHtcbiAgICB0aGlzLmNlbGxIZWFkZXJSZW5kZXJlcihEZWZhdWx0SGVhZGVyQ2VsbFJlbmRlcmVyQ29tcG9uZW50LCAoY29tcG9uZW50LCBjb2x1bW4pID0+IHtcbiAgICAgIGNvbXBvbmVudC5oZWFkZXJUZXh0ID0gY29sdW1uLmdldEhlYWRlclRleHQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIEBNZW1vaXplKClcbiAgZ2V0SGVhZGVyVGV4dCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldENvbHVtblRleHRQcm9wZXJ0aWVzKCk/LmhlYWRlclRleHQoKSA/PyB0aGlzLmdldERlZmF1bHRIZWFkZXJUZXh0KCk7XG4gIH1cblxuICBpc1Zpc2libGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZSQudmFsdWU7XG4gIH1cblxuICB2aXNpYmxlV2hpbGUodmlzaWJsZTogVmFsdWVNb2RlbDxib29sZWFuPik6IHRoaXMge1xuICAgIHRoaXMuX3VzZXJWaXNpYmxlJC5zZXREZWxlZ2F0ZSh2aXNpYmxlKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXREZWZhdWx0VmlzaWJpbGl0eSh2aXNpYmxlOiBWYWx1ZU1vZGVsPGJvb2xlYW4+KSB7XG4gICAgdGhpcy5fZGVmYXVsdFZpc2liaWxpdHkkLnNldERlbGVnYXRlKHZpc2libGUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldE1hc3RlclZpc2liaWxpdHkodmlzaWJsZTogVmFsdWVNb2RlbDxib29sZWFuPikge1xuICAgIHRoaXMuX21hc3RlclZpc2liaWxpdHkkLnNldERlbGVnYXRlKHZpc2libGUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldERlZmF1bHRIZWFkZXJUZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmNvbHVtbklkO1xuICB9XG5cbiAgQE1lbW9pemUoKVxuICBnZXRDb2x1bW5UZXh0UHJvcGVydGllcygpOiBDb2x1bW5UZXh0UHJvcGVydGllcyB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtblRleHRQcm9wZXJ0aWVzID8/IHRoaXMudGV4dFByb3BlcnRpZXNQcm92aWRlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIHVzZSAjY29sdW1uVGV4dFByb3BlcnRpZXMgaW5zdGVhZFxuICAgKiBAcGFyYW0gY29sdW1uVGV4dFByb3BlcnRpZXNcbiAgICovXG4gIHRleHRQcm9wZXJ0aWVzKGNvbHVtblRleHRQcm9wZXJ0aWVzOiBDb2x1bW5UZXh0UHJvcGVydGllcyk6IHRoaXMge1xuICAgIHJldHVybiB0aGlzLmNvbHVtblRleHRQcm9wZXJ0aWVzKGNvbHVtblRleHRQcm9wZXJ0aWVzKTtcbiAgfVxuXG4gIGNvbHVtblRleHRQcm9wZXJ0aWVzKGNvbHVtblRleHRQcm9wZXJ0aWVzOiBDb2x1bW5UZXh0UHJvcGVydGllcyk6IHRoaXMge1xuICAgIHRoaXMuX2NvbHVtblRleHRQcm9wZXJ0aWVzID0gY29sdW1uVGV4dFByb3BlcnRpZXM7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnZXRTZWFyY2hUZXh0Rm9yKHJvdzogUm93KTogc3RyaW5nIHtcbiAgICAgIHJldHVybiB0aGlzLnRleHRTZWFyY2hEZWxlZ2F0ZS5mb3JtYXQocm93KVxuICB9XG5cbiAgY29uZmlndXJlQ29sdW1uVGV4dFNlYXJjaChmb3JtYXR0ZXI6IENvbHVtblRleHRTZWFyY2hGb3JtYXR0ZXI8Um93Pik6dGhpc1xuICBjb25maWd1cmVDb2x1bW5UZXh0U2VhcmNoPFQ+KGZvcm1hdHRlcjogQ29sdW1uVGV4dFNlYXJjaEZvcm1hdHRlcjxUPiwgbWFwcGVyOiAocm93OlJvdykgPT4gVCk6dGhpc1xuICBjb25maWd1cmVDb2x1bW5UZXh0U2VhcmNoKGZvcm1hdHRlcjogQ29sdW1uVGV4dFNlYXJjaEZvcm1hdHRlcjxhbnk+LCBtYXBwZXI/OiAocm93OlJvdykgPT4gYW55KTp0aGlzIHtcbiAgICBhc3NlcnQubm90TmlsKGZvcm1hdHRlcik7XG4gICAgLy8gY29uc29sZS5sb2coe2NvbDogdGhpcy5jb2x1bW5JZCwgZm9ybWF0dGVyfSk7XG4gICAgdGhpcy50ZXh0U2VhcmNoRGVsZWdhdGUuc2V0RGVsZWdhdGUoZm9ybWF0dGVyLCBtYXBwZXIpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cblxuICBwcm90ZWN0ZWQgY29uZmlndXJlSGVhZGVyUmVuZGVyZXI8Qz4oY29uZmlnOiBDZWxsSGVhZGVyUG9ydGFsUmVmPFJvdywgYW55Pik6IHZvaWQge1xuICAgIHRoaXMuX2NvbHVtbkhlYWRlclBvcnRhbFJlZiA9IGNvbmZpZztcbiAgfVxuXG4gIHByb3RlY3RlZCBjb25maWd1cmVDZWxsUmVuZGVyZXI8Qz4oY29uZmlnOiBDZWxsUmVuZGVyZXJQb3J0YWxSZWY8Um93LCBhbnk+KTogdm9pZCB7XG4gICAgdGhpcy5fY2VsbFJlbmRlcmVyUG9ydGFsUmVmID0gY29uZmlnO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNvbmZpZ3VyZUNlbGxFZGl0b3I8RT4oY2VsbEVkaXRvcjogQ2VsbEVkaXRvclBvcnRhbFJlZjxSb3csIEU+KTogdm9pZCB7XG4gICAgdGhpcy5fY2VsbEVkaXRvclBvcnRhbFJlZiA9IGNlbGxFZGl0b3I7XG4gIH1cblxuICBjZWxsSGVhZGVyUmVuZGVyZXI8Qz4oY29tcG9uZW50VHlwZTogQ29tcG9uZW50VHlwZTxDPiwgaW5pdGlhbGlzZXI6IChjb21wb25lbnQ6IEMsIGNvbHVtbjogQ29sdW1uTW9kZWw8Um93PikgPT4gdm9pZCk6IHRoaXMge1xuICAgIHRoaXMuY29uZmlndXJlSGVhZGVyUmVuZGVyZXIobmV3IENlbGxIZWFkZXJQb3J0YWxSZWY8Um93LCBDPihjb21wb25lbnRUeXBlLCBpbml0aWFsaXNlcikpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZmxleChmbGV4ID0gdHJ1ZSkge1xuICAgIHRoaXMuX2ZsZXggPSBmbGV4O1xuICB9XG5cbiAgaXNGbGV4KCkge1xuICAgIHJldHVybiB0aGlzLl9mbGV4O1xuICB9XG5cbiAgaGFzRWRpdG9yUG9ydGFsKCkge1xuICAgIHJldHVybiAhIXRoaXMuX2NlbGxFZGl0b3JQb3J0YWxSZWY7XG4gIH1cblxuICBhdHRhY2hIZWFkZXJDZWxsKGhvc3Q6IGFueSkge1xuICAgIHRoaXMuX2NvbHVtbkhlYWRlclBvcnRhbFJlZi5pbml0aWFsaXNlSG9zdChob3N0LCB0aGlzKTtcbiAgfVxuXG4gIGF0dGFjaENlbGwoaG9zdDogYW55KSB7XG4gICAgdGhpcy5fY2VsbFJlbmRlcmVyUG9ydGFsUmVmLmluaXRpYWxpc2VIb3N0KGhvc3QsIHRoaXMpO1xuICAgIGlmICh0aGlzLmhhc0VkaXRvclBvcnRhbCgpKSB7XG4gICAgICB0aGlzLl9jZWxsRWRpdG9yUG9ydGFsUmVmLmluaXRpYWxpc2VIb3N0KGhvc3QsIHRoaXMpO1xuICAgIH1cbiAgfVxuXG4gIG9uSGVhZGVyQXR0YWNoZWQoaG9zdDogVGFibGVIZWFkZXJDZWxsQ29tcG9uZW50LCByZWY6IENka1BvcnRhbE91dGxldEF0dGFjaGVkUmVmKSB7XG4gICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5nZXRDb21wb25lbnQocmVmKTtcbiAgICB0aGlzLl9jb2x1bW5IZWFkZXJQb3J0YWxSZWYub25Qb3J0YWxBdHRhY2hlZChob3N0LCBjb21wb25lbnQpO1xuICB9XG5cbiAgb25SZW5kZXJlckF0dGFjaGVkKGhvc3Q6IFRhYmxlQ2VsbENvbXBvbmVudDxSb3c+LCByZWY6IENka1BvcnRhbE91dGxldEF0dGFjaGVkUmVmKSB7XG4gICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5nZXRDb21wb25lbnRPckVtYmVkZGVkVmlldyhyZWYpO1xuICAgIHRoaXMuX2NlbGxSZW5kZXJlclBvcnRhbFJlZi5vblBvcnRhbEF0dGFjaGVkKGhvc3QsIGNvbXBvbmVudCk7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBvbkVkaXRvckF0dGFjaGVkKGhvc3Q6IFRhYmxlQ2VsbENvbXBvbmVudDxSb3c+LCByZWY6IENka1BvcnRhbE91dGxldEF0dGFjaGVkUmVmKSB7XG4gICAgdGhpcy5fY2VsbEVkaXRvclBvcnRhbFJlZi5vblBvcnRhbEF0dGFjaGVkKGhvc3QsIHRoaXMuZ2V0Q29tcG9uZW50KHJlZikpO1xuICB9XG5cbiAgdXBkYXRlUG9ydGFsQ29udGVudChob3N0OiBUYWJsZUNlbGxDb21wb25lbnQ8Um93Pikge1xuICAgIHRoaXMuX2NlbGxSZW5kZXJlclBvcnRhbFJlZi5wdXNoU3RhdGUoaG9zdCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgX3NlbGVjdFJvd09uQ2xpY2soc2VsZWN0Um93T25DbGljazogYm9vbGVhbik6IHRoaXMge1xuICAgIHRoaXMuX2VuYWJsZVJvd1NlbGVjdGlvbiA9IHNlbGVjdFJvd09uQ2xpY2s7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBpc1Jvd1NlbGVjdGlvbkVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2VuYWJsZVJvd1NlbGVjdGlvbjtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRDb21wb25lbnQocmVmOiBDZGtQb3J0YWxPdXRsZXRBdHRhY2hlZFJlZik6IGFueSB7XG4gICAgaWYgKHJlZiBpbnN0YW5jZW9mIENvbXBvbmVudFJlZikge1xuICAgICAgcmV0dXJuIHJlZi5pbnN0YW5jZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihcImhlYWRlcnMgb25seSBzdXBwb3J0IGNvbXBvbmVudCBwb3J0YWxzLCBnb3RcIiwgcmVmKTtcbiAgICAgIGxhbmcuaWxsZWdhbFN0YXRlKGBoZWFkZXJzIG9ubHkgc3VwcG9ydCBjb21wb25lbnQgcG9ydGFscywgZ290ICR7cmVmfWApXG4gICAgfVxuICB9XG4gIHByb3RlY3RlZCBnZXRDb21wb25lbnRPckVtYmVkZGVkVmlldyhyZWY6IENka1BvcnRhbE91dGxldEF0dGFjaGVkUmVmKTogYW55IHtcbiAgICBpZiAocmVmIGluc3RhbmNlb2YgQ29tcG9uZW50UmVmKSB7XG4gICAgICByZXR1cm4gcmVmLmluc3RhbmNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVmO1xuICAgIH1cbiAgfVxuXG4gIGluaXRpYWxpc2UoaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgdGhpcy50ZXh0U2VhcmNoRGVsZWdhdGUuaW5pdGlhbGlzZShpbmplY3Rvcik7XG4gIH1cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBDb2x1bW5Nb2RlbCB7XG4gIGV4cG9ydCBjb25zdCBDRUxMX1JFTkRFUkVSX0NPTVBPTkVOVF9ST1dfQ0FDSEUgPSBTeW1ib2woJ2F1cC1jZWxsLXJlbmRlcmVyOnJvdy1kYXRhLWNhY2hlJyk7XG4gIGV4cG9ydCB0eXBlIFRleHRQcm9wZXJ0aWVzUHJvdmlkZXIgPSAoKSA9PiBDb2x1bW5UZXh0UHJvcGVydGllc1xufVxuXG4iXX0=