@coolon/angular-ui-powerups 16.1.0-aplpha.8 → 16.1.0-aplpha.80

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 (277) hide show
  1. package/assets/activities/input-activities.scss +10 -2
  2. package/assets/form.scss +62 -27
  3. package/assets/table.scss +15 -18
  4. package/assets/tabs.scss +2 -6
  5. package/esm2022/lib/angular-ui-powerups.module.mjs +1 -1
  6. package/esm2022/lib/animations/slide-animations.mjs +6 -1
  7. package/esm2022/lib/components/alignment.mjs +1 -1
  8. package/esm2022/lib/components/busy-overlay/busy-overlay.component.mjs +4 -9
  9. package/esm2022/lib/components/cards/abstract-card-container.component.mjs +1 -1
  10. package/esm2022/lib/components/cards/card-container/card-container.component.mjs +2 -2
  11. package/esm2022/lib/components/commands/command/command.component.mjs +24 -13
  12. package/esm2022/lib/components/commands/command-face/command-face.component.mjs +11 -3
  13. package/esm2022/lib/components/commands/command-face.mjs +11 -11
  14. package/esm2022/lib/components/commands/flex.component.mjs +1 -1
  15. package/esm2022/lib/components/commands/group/command-container.mjs +1 -1
  16. package/esm2022/lib/components/commands/group/popup-aware.component.mjs +1 -1
  17. package/esm2022/lib/components/commands/group/popup-container.mjs +1 -1
  18. package/esm2022/lib/components/commands/group/popup-menu/abstract-popup-menu.component.mjs +11 -11
  19. package/esm2022/lib/components/commands/group/popup-menu/more-menu.component.mjs +1 -1
  20. package/esm2022/lib/components/commands/group/popup-menu/popup-menu-renderer/popup-menu-renderer.component.mjs +1 -1
  21. package/esm2022/lib/components/commands/group/popup-menu/popup-menu.component.mjs +2 -2
  22. package/esm2022/lib/components/commands/group/tool-bar/tool-bar.component.mjs +9 -16
  23. package/esm2022/lib/components/commands/separator.component.mjs +1 -1
  24. package/esm2022/lib/components/components.module.mjs +31 -17
  25. package/esm2022/lib/components/disposable-component.mjs +8 -37
  26. package/esm2022/lib/components/empty-state/empty-state.component.mjs +2 -6
  27. package/esm2022/lib/components/exports.mjs +6 -2
  28. package/esm2022/lib/components/focus-container/focus-container.component.mjs +1 -1
  29. package/esm2022/lib/components/focusable.component.mjs +2 -2
  30. package/esm2022/lib/components/forms/abstract-input.component.mjs +62 -15
  31. package/esm2022/lib/components/forms/abstract-list-input.component.mjs +1 -1
  32. package/esm2022/lib/components/forms/abstract-value-input.component.mjs +1 -1
  33. package/esm2022/lib/components/forms/autocomplete-input/autocomplete-input.component.mjs +3 -4
  34. package/esm2022/lib/components/forms/checkbox-input/checkbox-input.component.mjs +1 -1
  35. package/esm2022/lib/components/forms/form-field.mjs +2 -0
  36. package/esm2022/lib/components/forms/multiple-select-input/multiple-select-input.component.mjs +3 -3
  37. package/esm2022/lib/components/forms/number-input/number-input.component.mjs +49 -10
  38. package/esm2022/lib/components/forms/password-input/password-input.component.mjs +40 -3
  39. package/esm2022/lib/components/forms/search-input/search-input.component.mjs +33 -0
  40. package/esm2022/lib/components/forms/select-input/select-input.component.mjs +12 -11
  41. package/esm2022/lib/components/forms/string-input/string-input.component.mjs +22 -10
  42. package/esm2022/lib/components/forms/text-input/text-input.component.mjs +1 -1
  43. package/esm2022/lib/components/icon/icon.component.mjs +6 -3
  44. package/esm2022/lib/components/labelled-value/labelled-value.component.mjs +1 -1
  45. package/esm2022/lib/components/loadable-component.mjs +49 -0
  46. package/esm2022/lib/components/loading-container/loading-container.component.mjs +4 -9
  47. package/esm2022/lib/components/noop/noop.component.mjs +2 -4
  48. package/esm2022/lib/components/resize-aware.component.mjs +61 -24
  49. package/esm2022/lib/components/scroll-container/scroll-container.component.mjs +2 -2
  50. package/esm2022/lib/components/section-header/section-header.component.mjs +1 -1
  51. package/esm2022/lib/components/switch-case/switch-case.component.mjs +2 -2
  52. package/esm2022/lib/components/tables/abstract-table-model.mjs +40 -23
  53. package/esm2022/lib/components/tables/abstract-table.component.mjs +19 -5
  54. package/esm2022/lib/components/tables/column/column-manager.mjs +81 -0
  55. package/esm2022/lib/components/tables/column/column-model.mjs +18 -7
  56. package/esm2022/lib/components/tables/column/column-order-manager.mjs +19 -0
  57. package/esm2022/lib/components/tables/column/column-template/column-template.directive.mjs +1 -1
  58. package/esm2022/lib/components/tables/column/custom-template-column-model.mjs +3 -3
  59. package/esm2022/lib/components/tables/column/custom-value-column-model.mjs +5 -5
  60. package/esm2022/lib/components/tables/column/editor-controls-column-model.mjs +5 -5
  61. package/esm2022/lib/components/tables/column/list-propery-column-model.mjs +6 -5
  62. package/esm2022/lib/components/tables/column/property-column-model.mjs +5 -5
  63. package/esm2022/lib/components/tables/column/selection-column-model.mjs +3 -3
  64. package/esm2022/lib/components/tables/editor/edit-row-controls/edit-row-controls.component.mjs +6 -6
  65. package/esm2022/lib/components/tables/editor/edit-session.mjs +4 -2
  66. package/esm2022/lib/components/tables/editor/editable-cell-renderer.mjs +1 -1
  67. package/esm2022/lib/components/tables/filter/column-text-search-formatter.mjs +1 -1
  68. package/esm2022/lib/components/tables/filter/enable-cell-text-search.decorator.mjs +3 -2
  69. package/esm2022/lib/components/tables/filter/table-filter-model.mjs +4 -2
  70. package/esm2022/lib/components/tables/filter/text-search-predicate.mjs +16 -2
  71. package/esm2022/lib/components/tables/paginator/paginator.component.mjs +1 -1
  72. package/esm2022/lib/components/tables/renderer/cell-editors.mjs +1 -1
  73. package/esm2022/lib/components/tables/renderer/cell-portal-ref.mjs +1 -3
  74. package/esm2022/lib/components/tables/renderer/default-cell-renderer/default-cell-renderer.component.mjs +4 -6
  75. package/esm2022/lib/components/tables/renderer/default-header-cell-renderer/default-header-cell-renderer.component.mjs +2 -4
  76. package/esm2022/lib/components/tables/renderer/select-header-cell/selection-header-cell.component.mjs +1 -1
  77. package/esm2022/lib/components/tables/renderer/table-body/table-body.component.mjs +212 -37
  78. package/esm2022/lib/components/tables/renderer/table-cell/table-cell.component.mjs +1 -1
  79. package/esm2022/lib/components/tables/renderer/table-header-cell/table-header-cell.component.mjs +2 -4
  80. package/esm2022/lib/components/tables/renderer/table-more-menu/table-more-menu-popup/table-more-menu-popup.component.mjs +1 -1
  81. package/esm2022/lib/components/tables/renderer/table-more-menu/table-more-menu.component.mjs +7 -2
  82. package/esm2022/lib/components/tables/table/table-model.mjs +1 -1
  83. package/esm2022/lib/components/tables/table/table.component.mjs +12 -67
  84. package/esm2022/lib/components/tables/table-row-menu/table-row-menu.component.mjs +1 -1
  85. package/esm2022/lib/components/tables/tree-table/decorated-tree-node.mjs +5 -4
  86. package/esm2022/lib/components/tables/tree-table/flattened-tree-list-model.mjs +1 -1
  87. package/esm2022/lib/components/tables/tree-table/tree-expansion-model.mjs +1 -1
  88. package/esm2022/lib/components/tables/tree-table/tree-inheritance-icon/tree-inheritance-icon.component.mjs +2 -4
  89. package/esm2022/lib/components/tables/tree-table/tree-label-cell-renderer/tree-label-cell-renderer.component.mjs +1 -1
  90. package/esm2022/lib/components/tables/tree-table/tree-label-column-model.mjs +4 -4
  91. package/esm2022/lib/components/tables/tree-table/tree-table-component.mjs +7 -4
  92. package/esm2022/lib/components/tables/tree-table/tree-table-model.mjs +3 -3
  93. package/esm2022/lib/components/text/markdown/markdown.component.mjs +3 -3
  94. package/esm2022/lib/components/track.mjs +1 -1
  95. package/esm2022/lib/components/types/bounds.class.mjs +1 -1
  96. package/esm2022/lib/components/vertical-focus-container/vertical-focus-container.component.mjs +1 -1
  97. package/esm2022/lib/directives/command.directive.mjs +2 -2
  98. package/esm2022/lib/directives/directives.module.mjs +2 -2
  99. package/esm2022/lib/directives/exports.mjs +2 -1
  100. package/esm2022/lib/directives/focus-binding-factory.mjs +1 -1
  101. package/esm2022/lib/directives/focus-binding.directive.mjs +2 -2
  102. package/esm2022/lib/directives/focus-binding.mjs +1 -1
  103. package/esm2022/lib/directives/garbage-collector.directive.mjs +2 -1
  104. package/esm2022/lib/directives/highlight-text-model.directive.mjs +1 -1
  105. package/esm2022/lib/directives/highlight.pipe.mjs +2 -2
  106. package/esm2022/lib/directives/resize-observer.directive.mjs +40 -0
  107. package/esm2022/lib/interaction/abstract-interaction-context.mjs +1 -1
  108. package/esm2022/lib/interaction/activity-ref.mjs +2 -2
  109. package/esm2022/lib/interaction/activity.mjs +4 -4
  110. package/esm2022/lib/interaction/alert.mjs +2 -2
  111. package/esm2022/lib/interaction/components/abstract-confirm-dialog.component.mjs +8 -4
  112. package/esm2022/lib/interaction/components/abstract-dialog.component.mjs +2 -3
  113. package/esm2022/lib/interaction/components/activity-actions/activity-actions.component.mjs +3 -3
  114. package/esm2022/lib/interaction/components/activity-body/activity-body.component.mjs +1 -1
  115. package/esm2022/lib/interaction/components/activity-container/activity-container.component.mjs +28 -11
  116. package/esm2022/lib/interaction/components/activity-container/activity-outlet/activity-outlet.component.mjs +1 -3
  117. package/esm2022/lib/interaction/components/activity-title/activity-title.component.mjs +2 -2
  118. package/esm2022/lib/interaction/components/activity-triggers/inline-activity-trigger/inline-activity-trigger.component.mjs +1 -1
  119. package/esm2022/lib/interaction/components/activity-triggers/modal-activity-trigger/modal-activity-trigger.component.mjs +1 -1
  120. package/esm2022/lib/interaction/components/activity-triggers/popup-activity-trigger/popup-activity-trigger.component.mjs +1 -1
  121. package/esm2022/lib/interaction/components/add-card-activity/add-card-activity.component.mjs +1 -1
  122. package/esm2022/lib/interaction/components/add-item-interaction-context/add-item-interaction-context.component.mjs +1 -1
  123. package/esm2022/lib/interaction/components/alert-dialog/alert-dialog.component.mjs +1 -1
  124. package/esm2022/lib/interaction/components/confirm-then-dialog/confirm-then-dialog.component.mjs +1 -1
  125. package/esm2022/lib/interaction/components/confirm-then-execute-dialog/confirm-then-execute-dialog.component.mjs +1 -1
  126. package/esm2022/lib/interaction/components/confirmation-dialog/confirmation-dialog.component.mjs +1 -1
  127. package/esm2022/lib/interaction/components/editors/edit-context.mjs +1 -1
  128. package/esm2022/lib/interaction/components/editors/inline-string-editor/inline-editor-model.mjs +2 -2
  129. package/esm2022/lib/interaction/components/editors/inline-string-editor/inline-string-editor.component.mjs +3 -3
  130. package/esm2022/lib/interaction/components/inplace-interaction-context/in-place-interaction-context.component.mjs +3 -3
  131. package/esm2022/lib/interaction/components/input-activities/input-activity.mjs +3 -2
  132. package/esm2022/lib/interaction/components/input-activities/select-input-activity.mjs +4 -1
  133. package/esm2022/lib/interaction/components/input-activities/string-input-activity.mjs +9 -4
  134. package/esm2022/lib/interaction/components/popup-interaction-context/popup-interaction-context.component.mjs +3 -2
  135. package/esm2022/lib/interaction/components/slide-down-interaction-context/slide-down-interaction-context.component.mjs +129 -0
  136. package/esm2022/lib/interaction/confirm.mjs +1 -1
  137. package/esm2022/lib/interaction/directives/interaction-context-trigger-for.directive.mjs +6 -6
  138. package/esm2022/lib/interaction/exports.mjs +2 -1
  139. package/esm2022/lib/interaction/in-place-interaction-context.mjs +1 -1
  140. package/esm2022/lib/interaction/interaction-context.mjs +1 -1
  141. package/esm2022/lib/interaction/interaction.module.mjs +21 -23
  142. package/esm2022/lib/interaction/route-synchronisation-adapter.mjs +1 -1
  143. package/esm2022/lib/interaction/services/interaction-service-routing-adapter.mjs +1 -1
  144. package/esm2022/lib/interaction/services/interaction.service.mjs +3 -3
  145. package/esm2022/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context-factory.mjs +2 -3
  146. package/esm2022/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context.mjs +1 -2
  147. package/esm2022/lib/interaction/services/modal-interaction-context.factory.mjs +1 -1
  148. package/esm2022/lib/place/components/abstract-place-navigation.component.mjs +1 -1
  149. package/esm2022/lib/place/components/list-place-nav/list-place-nav.component.mjs +3 -4
  150. package/esm2022/lib/place/components/not-authorised-notice/not-authorised-notice.component.mjs +2 -4
  151. package/esm2022/lib/place/components/place-outlet/place-outlet.component.mjs +4 -4
  152. package/esm2022/lib/place/components/place-outlet/route-animations.mjs +1 -1
  153. package/esm2022/lib/place/components/side-place-navigation/side-place-navigation.component.mjs +4 -4
  154. package/esm2022/lib/place/components/tabbed-place-navigation/tabbed-place-navigation.component.mjs +1 -1
  155. package/esm2022/lib/place/guards/consolidated-param-map.mjs +4 -4
  156. package/esm2022/lib/place/guards/noop-auth-guard.service.mjs +2 -4
  157. package/esm2022/lib/place/guards/place.guard.mjs +2 -2
  158. package/esm2022/lib/place/navigation/place-component-deactivation-handler.mjs +2 -2
  159. package/esm2022/lib/place/navigation/session/abstract-pop-state-navigation.mjs +1 -1
  160. package/esm2022/lib/place/navigation/session/event-cleanup/event-clean-up-session.mjs +1 -1
  161. package/esm2022/lib/place/navigation/session/event-cleanup/wait-until-leaving-interaction-transition-cancelled.mjs +1 -1
  162. package/esm2022/lib/place/navigation/session/event-cleanup/wait-until-link-triggered-navigation-interaction-cancelation-type-determined.mjs +1 -1
  163. package/esm2022/lib/place/navigation/session/event-cleanup/wait-until-popstate-during-can-deactivate-transition-finishes.mjs +1 -1
  164. package/esm2022/lib/place/navigation/session/interactions/navigating-during-interaction.mjs +2 -2
  165. package/esm2022/lib/place/navigation/session/interactions/pop-state-during-interaction-navigation.mjs +1 -1
  166. package/esm2022/lib/place/navigation/session/interactions/remove-last-interaction-from-url-navigation-session.mjs +3 -3
  167. package/esm2022/lib/place/navigation/session/interactions/synchronise-interaction-context-ids-with-route.mjs +3 -6
  168. package/esm2022/lib/place/navigation/session/navigating.mjs +2 -2
  169. package/esm2022/lib/place/navigation/session/navigation-context.mjs +1 -1
  170. package/esm2022/lib/place/navigation/session/navigation-session.mjs +1 -1
  171. package/esm2022/lib/place/navigation/session/pop-state-navigation.mjs +1 -1
  172. package/esm2022/lib/place/place-access-guard.mjs +1 -1
  173. package/esm2022/lib/place/place-component.mjs +29 -30
  174. package/esm2022/lib/place/place-config.mjs +1 -1
  175. package/esm2022/lib/place/place-definition.mjs +3 -3
  176. package/esm2022/lib/place/place-history.mjs +3 -5
  177. package/esm2022/lib/place/place-router.mjs +17 -15
  178. package/esm2022/lib/place/place.decorator.mjs +2 -2
  179. package/esm2022/lib/place/place.module.mjs +1 -5
  180. package/esm2022/lib/place/route/formatter.mjs +2 -2
  181. package/esm2022/lib/place/route/json-types.mjs +1 -1
  182. package/esm2022/lib/place/route/parameter-decorators.mjs +54 -50
  183. package/esm2022/lib/place/route/parameter-definition.mjs +2 -2
  184. package/esm2022/lib/place/route/parameter-sanitiser.mjs +1 -1
  185. package/esm2022/lib/place/route/parameter-snapshot.mjs +1 -1
  186. package/esm2022/lib/place/route/visit-segment-sanitiser.mjs +1 -1
  187. package/esm2022/lib/place/url-service.mjs +1 -1
  188. package/esm2022/lib/place/url-snapshot.mjs +3 -3
  189. package/esm2022/lib/place/visit-segment.mjs +2 -2
  190. package/esm2022/lib/place/visit.mjs +2 -2
  191. package/esm2022/lib/services/markdown/markdown.service.mjs +2 -4
  192. package/esm2022/lib/services/markdown/pill-plugin.mjs +1 -3
  193. package/esm2022/lib/services/visibility-service.mjs +4 -4
  194. package/fesm2022/coolon-angular-ui-powerups.mjs +2235 -1609
  195. package/fesm2022/coolon-angular-ui-powerups.mjs.map +1 -1
  196. package/lib/animations/slide-animations.d.ts +1 -0
  197. package/lib/components/busy-overlay/busy-overlay.component.d.ts +1 -4
  198. package/lib/components/commands/command/command.component.d.ts +4 -4
  199. package/lib/components/commands/command-face/command-face.component.d.ts +2 -0
  200. package/lib/components/commands/command-face.d.ts +5 -7
  201. package/lib/components/commands/group/popup-menu/abstract-popup-menu.component.d.ts +2 -2
  202. package/lib/components/commands/group/tool-bar/tool-bar.component.d.ts +3 -7
  203. package/lib/components/components.module.d.ts +55 -53
  204. package/lib/components/disposable-component.d.ts +1 -6
  205. package/lib/components/empty-state/empty-state.component.d.ts +1 -4
  206. package/lib/components/exports.d.ts +5 -1
  207. package/lib/components/forms/abstract-input.component.d.ts +13 -5
  208. package/lib/components/forms/form-field.d.ts +5 -0
  209. package/lib/components/forms/number-input/number-input.component.d.ts +8 -4
  210. package/lib/components/forms/password-input/password-input.component.d.ts +7 -1
  211. package/lib/components/forms/search-input/search-input.component.d.ts +10 -0
  212. package/lib/components/forms/select-input/select-input.component.d.ts +4 -3
  213. package/lib/components/forms/string-input/string-input.component.d.ts +3 -1
  214. package/lib/components/loadable-component.d.ts +17 -0
  215. package/lib/components/loading-container/loading-container.component.d.ts +1 -4
  216. package/lib/components/noop/noop.component.d.ts +0 -1
  217. package/lib/components/resize-aware.component.d.ts +24 -5
  218. package/lib/components/switch-case/switch-case.component.d.ts +4 -4
  219. package/lib/components/tables/abstract-table-model.d.ts +10 -5
  220. package/lib/components/tables/abstract-table.component.d.ts +5 -4
  221. package/lib/components/tables/column/column-manager.d.ts +19 -0
  222. package/lib/components/tables/column/column-model.d.ts +6 -2
  223. package/lib/components/tables/column/column-order-manager.d.ts +20 -0
  224. package/lib/components/tables/column/custom-template-column-model.d.ts +2 -1
  225. package/lib/components/tables/column/custom-value-column-model.d.ts +2 -1
  226. package/lib/components/tables/column/editor-controls-column-model.d.ts +2 -1
  227. package/lib/components/tables/column/list-propery-column-model.d.ts +2 -1
  228. package/lib/components/tables/column/property-column-model.d.ts +2 -1
  229. package/lib/components/tables/column/selection-column-model.d.ts +2 -1
  230. package/lib/components/tables/editor/edit-row-controls/edit-row-controls.component.d.ts +3 -3
  231. package/lib/components/tables/editor/editable-cell-renderer.d.ts +1 -1
  232. package/lib/components/tables/filter/enable-cell-text-search.decorator.d.ts +1 -1
  233. package/lib/components/tables/filter/text-search-predicate.d.ts +9 -0
  234. package/lib/components/tables/renderer/cell-portal-ref.d.ts +2 -3
  235. package/lib/components/tables/renderer/default-cell-renderer/default-cell-renderer.component.d.ts +0 -1
  236. package/lib/components/tables/renderer/default-header-cell-renderer/default-header-cell-renderer.component.d.ts +0 -1
  237. package/lib/components/tables/renderer/table-body/table-body.component.d.ts +25 -15
  238. package/lib/components/tables/renderer/table-header-cell/table-header-cell.component.d.ts +0 -1
  239. package/lib/components/tables/renderer/table-more-menu/table-more-menu.component.d.ts +2 -1
  240. package/lib/components/tables/table/table.component.d.ts +6 -12
  241. package/lib/components/tables/tree-table/tree-expansion-model.d.ts +2 -2
  242. package/lib/components/tables/tree-table/tree-inheritance-icon/tree-inheritance-icon.component.d.ts +0 -1
  243. package/lib/components/tables/tree-table/tree-label-column-model.d.ts +2 -1
  244. package/lib/components/tables/tree-table/tree-table-component.d.ts +5 -2
  245. package/lib/components/text/markdown/markdown.component.d.ts +1 -1
  246. package/lib/directives/exports.d.ts +1 -0
  247. package/lib/directives/resize-observer.directive.d.ts +16 -0
  248. package/lib/interaction/activity-ref.d.ts +2 -2
  249. package/lib/interaction/activity.d.ts +2 -2
  250. package/lib/interaction/components/abstract-confirm-dialog.component.d.ts +1 -0
  251. package/lib/interaction/components/activity-container/activity-container.component.d.ts +7 -3
  252. package/lib/interaction/components/activity-container/activity-outlet/activity-outlet.component.d.ts +2 -3
  253. package/lib/interaction/components/editors/edit-context.d.ts +1 -1
  254. package/lib/interaction/components/inplace-interaction-context/in-place-interaction-context.component.d.ts +1 -1
  255. package/lib/interaction/components/input-activities/string-input-activity.d.ts +1 -1
  256. package/lib/interaction/components/slide-down-interaction-context/slide-down-interaction-context.component.d.ts +53 -0
  257. package/lib/interaction/directives/interaction-context-trigger-for.directive.d.ts +3 -3
  258. package/lib/interaction/exports.d.ts +1 -0
  259. package/lib/interaction/interaction.module.d.ts +28 -28
  260. package/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context-factory.d.ts +1 -2
  261. package/lib/interaction/services/mat-dialog-interaction/dialog-interaction-context.d.ts +1 -2
  262. package/lib/place/components/not-authorised-notice/not-authorised-notice.component.d.ts +0 -1
  263. package/lib/place/guards/noop-auth-guard.service.d.ts +0 -1
  264. package/lib/place/navigation/session/interactions/remove-last-interaction-from-url-navigation-session.d.ts +0 -1
  265. package/lib/place/place-component.d.ts +4 -10
  266. package/lib/place/place-history.d.ts +0 -1
  267. package/lib/place/place-router.d.ts +2 -2
  268. package/lib/place/place.decorator.d.ts +1 -1
  269. package/lib/place/place.module.d.ts +4 -5
  270. package/lib/place/route/json-types.d.ts +1 -3
  271. package/lib/place/visit-segment.d.ts +4 -4
  272. package/lib/place/visit.d.ts +2 -2
  273. package/lib/services/markdown/markdown.service.d.ts +0 -1
  274. package/lib/services/visibility-service.d.ts +1 -1
  275. package/package.json +8 -7
  276. package/esm2022/lib/components/tables/column/column-list-model.mjs +0 -44
  277. package/lib/components/tables/column/column-list-model.d.ts +0 -13
@@ -2,34 +2,32 @@ import { __decorate, __metadata } from "tslib";
2
2
  import { Directive, inject } from '@angular/core';
3
3
  import { ActivatedRouteSnapshot } from '@angular/router';
4
4
  import { assert, Binding, DebugContext, Dsl, Guard, lang, ListModel, MutableValueModel } from '@coolon/pectin';
5
- import { Klass } from '@coolon/typescript-utilities';
6
- import { Memoize } from '@typescript-plus/fast-memoize-decorator';
7
- import { isNil } from 'lodash';
5
+ import { Klass, MemoizeGet } from '@coolon/typescript-utilities';
6
+ import { isNil } from 'lodash-es';
8
7
  import 'reflect-metadata';
9
- import { DisposableComponent } from '../components/disposable-component';
8
+ import { LoadableComponent } from "../components/loadable-component";
10
9
  import { PlaceDefinition } from './place-definition';
11
10
  import { PlaceRouter } from "./place-router";
12
- import { ParameterDefinition } from './route/parameter-definition';
13
11
  import * as i0 from "@angular/core";
14
12
  // RAKE: making this Symbol(...) broke things.
15
13
  export const DEFINITION_META_DATA_KEY = 'PLACE_DEFINITION_OPTIONS';
16
14
  // this one seems ok.
17
15
  export const ROUTE_PARAMETER_LIST_KEY = Symbol('place:route:parameters');
18
- class ParameterChangeInterceptor {
19
- constructor(parameterDef, model, callback, options) {
20
- }
21
- async canProceed(nextState, interactionContext) {
22
- return true;
23
- }
24
- }
25
- export class PlaceComponent extends DisposableComponent {
16
+ // class ParameterChangeInterceptor<T> {
17
+ // constructor(parameterDef: ParameterDefinition<T>, model: ValueModel<T>, callback: PlaceComponent.InterceptCallback<T>, options: PlaceComponent.InterceptOptions) {
18
+ // }
19
+ //
20
+ // async canProceed(nextState: VisitSegment, interactionContext: InteractionContext) {
21
+ // return true;
22
+ // }
23
+ // }
24
+ export class PlaceComponent extends LoadableComponent {
26
25
  _placeReadyCallbacks = [];
27
26
  visitModel = new MutableValueModel();
28
27
  _inVisitUpdate = new Guard();
29
28
  _active = new MutableValueModel(false);
30
29
  interactionContext;
31
30
  childPlaces$;
32
- _parameterChangeInterceptors = [];
33
31
  placeRouter = inject(PlaceRouter);
34
32
  constructor() {
35
33
  super();
@@ -80,6 +78,7 @@ export class PlaceComponent extends DisposableComponent {
80
78
  */
81
79
  installAndInitialiseBinding(initialVisit, parameterDef) {
82
80
  const model = this[parameterDef.propertyName];
81
+ assert.notNil(model);
83
82
  DebugContext.tag(model, `${this.placeDefinition.component.name}.${parameterDef.propertyName}`);
84
83
  const binding = this.registerDisposable(new Binding(this.visitModel, model, {
85
84
  toRight(visit) {
@@ -127,16 +126,16 @@ export class PlaceComponent extends DisposableComponent {
127
126
  * @param nextState
128
127
  */
129
128
  async _canChangeRouteParameters(interactionContext, nextState) {
130
- if (this._parameterChangeInterceptors.length > 0) {
131
- const visit = nextState.createVisitSegmentFor(this.placeDefinition);
132
- for (let i = 0; i < this._parameterChangeInterceptors.length; i++) {
133
- const interceptor = this._parameterChangeInterceptors[i];
134
- const keepGoing = await interceptor.canProceed(visit, interactionContext);
135
- if (!keepGoing) {
136
- return false;
137
- }
138
- }
139
- }
129
+ // if (this._parameterChangeInterceptors.length > 0) {
130
+ // const visit = nextState.createVisitSegmentFor(this.placeDefinition);
131
+ // for (let i = 0; i < this._parameterChangeInterceptors.length; i++) {
132
+ // const interceptor = this._parameterChangeInterceptors[i];
133
+ // const keepGoing = await interceptor.canProceed(visit, interactionContext);
134
+ // if (!keepGoing) {
135
+ // return false;
136
+ // }
137
+ // }
138
+ // }
140
139
  return true;
141
140
  }
142
141
  /**
@@ -160,15 +159,11 @@ export class PlaceComponent extends DisposableComponent {
160
159
  onPlaceReady(callback) {
161
160
  this._placeReadyCallbacks.push(callback);
162
161
  }
163
- interceptVisitParameterChange(model, callback, options) {
164
- const parameterDef = ParameterDefinition.get(model);
165
- this._parameterChangeInterceptors.push(new ParameterChangeInterceptor(parameterDef, model, callback, options));
166
- }
167
162
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.9", ngImport: i0, type: PlaceComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
168
163
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.9", type: PlaceComponent, usesInheritance: true, ngImport: i0 });
169
164
  }
170
165
  __decorate([
171
- Memoize(),
166
+ MemoizeGet(),
172
167
  __metadata("design:type", PlaceDefinition),
173
168
  __metadata("design:paramtypes", [])
174
169
  ], PlaceComponent.prototype, "placeDefinition", null);
@@ -201,5 +196,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
201
196
  Reflect.defineMetadata(DEFINITION_META_DATA_KEY, definition, klass);
202
197
  }
203
198
  PlaceComponent.injectDefinition = injectDefinition;
199
+ // export type InterceptCallback<T> = (is: T, was: T, interactionContext: InteractionContext) => boolean | Promise<boolean>;
200
+ // export interface InterceptOptions {
201
+ // initialValue: 'evaluationUnlessNil' | 'evaluate'
202
+ // }
204
203
  })(PlaceComponent || (PlaceComponent = {}));
205
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2UtY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvcGxhY2UvcGxhY2UtY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNoRCxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQ0wsTUFBTSxFQUNOLE9BQU8sRUFFUCxZQUFZLEVBQ1osR0FBRyxFQUNILEtBQUssRUFFTCxJQUFJLEVBQ0osU0FBUyxFQUNULGlCQUFpQixFQUVsQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDaEUsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUM3QixPQUFPLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBRXZFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sOEJBQThCLENBQUM7O0FBS2pFLDhDQUE4QztBQUM5QyxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRywwQkFBMEIsQ0FBQztBQUNuRSxxQkFBcUI7QUFDckIsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFHekUsTUFBTSwwQkFBMEI7SUFDOUIsWUFBWSxZQUFvQyxFQUFFLEtBQW9CLEVBQUUsUUFBNkMsRUFB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aXZlLCBpbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90fSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtcbiAgYXNzZXJ0LFxuICBCaW5kaW5nLFxuICBDb25zdHJ1Y3RhYmxlLFxuICBEZWJ1Z0NvbnRleHQsXG4gIERzbCxcbiAgR3VhcmQsXG4gIElNdXRhYmxlSGFzVmFsdWUsXG4gIGxhbmcsXG4gIExpc3RNb2RlbCxcbiAgTXV0YWJsZVZhbHVlTW9kZWwsXG4gIFZhbHVlTW9kZWxcbn0gZnJvbSAnQGNvb2xvbi9wZWN0aW4nO1xuaW1wb3J0IHtLbGFzc30gZnJvbSAnQGNvb2xvbi90eXBlc2NyaXB0LXV0aWxpdGllcyc7XG5pbXBvcnQge01lbW9pemV9IGZyb20gJ0B0eXBlc2NyaXB0LXBsdXMvZmFzdC1tZW1vaXplLWRlY29yYXRvcic7XG5pbXBvcnQge2lzTmlsfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0ICdyZWZsZWN0LW1ldGFkYXRhJztcbmltcG9ydCB7RGlzcG9zYWJsZUNvbXBvbmVudH0gZnJvbSAnLi4vY29tcG9uZW50cy9kaXNwb3NhYmxlLWNvbXBvbmVudCc7XG5pbXBvcnQge0ludGVyYWN0aW9uQ29udGV4dH0gZnJvbSAnLi4vaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24tY29udGV4dCc7XG5pbXBvcnQge1BsYWNlRGVmaW5pdGlvbn0gZnJvbSAnLi9wbGFjZS1kZWZpbml0aW9uJztcbmltcG9ydCB7UGxhY2VSb3V0ZXJ9IGZyb20gXCIuL3BsYWNlLXJvdXRlclwiO1xuaW1wb3J0IHtQYXJhbWV0ZXJEZWZpbml0aW9ufSBmcm9tICcuL3JvdXRlL3BhcmFtZXRlci1kZWZpbml0aW9uJztcbmltcG9ydCB7VXJsU25hcHNob3R9IGZyb20gJy4vdXJsLXNuYXBzaG90JztcbmltcG9ydCB7VmlzaXRTZWdtZW50fSBmcm9tICcuL3Zpc2l0LXNlZ21lbnQnO1xuXG5cbi8vIFJBS0U6IG1ha2luZyB0aGlzIFN5bWJvbCguLi4pIGJyb2tlIHRoaW5ncy5cbmV4cG9ydCBjb25zdCBERUZJTklUSU9OX01FVEFfREFUQV9LRVkgPSAnUExBQ0VfREVGSU5JVElPTl9PUFRJT05TJztcbi8vIHRoaXMgb25lIHNlZW1zIG9rLlxuZXhwb3J0IGNvbnN0IFJPVVRFX1BBUkFNRVRFUl9MSVNUX0tFWSA9IFN5bWJvbCgncGxhY2U6cm91dGU6cGFyYW1ldGVycycpO1xuXG5cbmNsYXNzIFBhcmFtZXRlckNoYW5nZUludGVyY2VwdG9yPFQ+IHtcbiAgY29uc3RydWN0b3IocGFyYW1ldGVyRGVmOiBQYXJhbWV0ZXJEZWZpbml0aW9uPFQ+LCBtb2RlbDogVmFsdWVNb2RlbDxUPiwgY2FsbGJhY2s6IFBsYWNlQ29tcG9uZW50LkludGVyY2VwdENhbGxiYWNrPFQ+LCBvcHRpb25zOiBQbGFjZUNvbXBvbmVudC5JbnRlcmNlcHRPcHRpb25zKSB7XG4gIH1cblxuICBhc3luYyBjYW5Qcm9jZWVkKG5leHRTdGF0ZTogVmlzaXRTZWdtZW50LCBpbnRlcmFjdGlvbkNvbnRleHQ6IEludGVyYWN0aW9uQ29udGV4dCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGNsYXNzIFBsYWNlQ29tcG9uZW50IGV4dGVuZHMgRGlzcG9zYWJsZUNvbXBvbmVudCB7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfcGxhY2VSZWFkeUNhbGxiYWNrczogRnVuY3Rpb25bXSA9IFtdO1xuICBwcml2YXRlIHZpc2l0TW9kZWwgPSBuZXcgTXV0YWJsZVZhbHVlTW9kZWw8VmlzaXRTZWdtZW50PigpO1xuICBwcml2YXRlIF9pblZpc2l0VXBkYXRlID0gbmV3IEd1YXJkKCk7XG4gIHByaXZhdGUgX2FjdGl2ZSA9IG5ldyBNdXRhYmxlVmFsdWVNb2RlbDxib29sZWFuPihmYWxzZSk7XG5cbiAgaW50ZXJhY3Rpb25Db250ZXh0PzogSW50ZXJhY3Rpb25Db250ZXh0O1xuICByZWFkb25seSBjaGlsZFBsYWNlcyQ6IExpc3RNb2RlbDxDb25zdHJ1Y3RhYmxlPFBsYWNlQ29tcG9uZW50Pj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3BhcmFtZXRlckNoYW5nZUludGVyY2VwdG9yczogUGFyYW1ldGVyQ2hhbmdlSW50ZXJjZXB0b3I8YW55PltdID0gW107XG5cblxuICBjYW5EZWFjdGl2YXRlPyhpbnRlcmFjdGlvbkNvbnRleHQ6IEludGVyYWN0aW9uQ29udGV4dCk6IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+O1xuXG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHBsYWNlUm91dGVyID0gaW5qZWN0KFBsYWNlUm91dGVyKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGNvbnN0IHtjaGFpbiwgdmFsdWVPZiwgYmVmb3JlLCB3aGVuLCBhZnRlciwgb2JzZXJ2ZSwgc3dpdGNoT259ID0gRHNsLmRpc3Bvc2VXaXRoKHRoaXMpO1xuICAgIHdoZW4odGhpcy5fYWN0aXZlKS5iZWNvbWVzVHJ1dGh5KCgpID0+IHRoaXMuX25vdGlmeVBsYWNlUmVhZHkoKSk7XG4gICAgdGhpcy5jaGlsZFBsYWNlcyQgPSBMaXN0TW9kZWwuY29uc3RhbnQodGhpcy5wbGFjZURlZmluaXRpb24uY2hpbGRyZW4ubWFwKGQgPT4gZC5jb21wb25lbnQpKTtcbiAgfVxuXG4gIHB1YmxpYyBpbml0aWFsaXNlVmlzaXQodmlzaXQ6IFZpc2l0U2VnbWVudCwgbm90aWZ5VmlzaXRDaGFuZ2VkOiAoY3VycmVudDogVmlzaXRTZWdtZW50LCBwcmV2aW91czogVmlzaXRTZWdtZW50KSA9PiB2b2lkKSB7XG4gICAgYXNzZXJ0LmlzTmlsKHRoaXMudmlzaXRNb2RlbC52YWx1ZSk7XG5cbiAgICBjb25zdCB7d2hlbn0gPSBEc2wuZGlzcG9zZVdpdGgodGhpcyk7XG5cbiAgICB0aGlzLnZpc2l0TW9kZWwudmFsdWUgPSB2aXNpdDtcbiAgICBEZWJ1Z0NvbnRleHQuZ2V0T3JDcmVhdGUodGhpcy52aXNpdE1vZGVsKS50YWcoYCR7dGhpcy5wbGFjZURlZmluaXRpb24uY29tcG9uZW50Lm5hbWV9LnZpc2l0TW9kZWxgKTtcblxuICAgIC8vIHdlIHRyYWNrIGlmIHRoZSBhbnkgb2YgdGhlIGJpbmRpbmdzIHVwZGF0ZWQgdGhlIHJvdXRlLiAgSWYgc28gd2UgcmVtZW1iZXIgaXQgYW5kIHVwZGF0ZSB0aGVcbiAgICAvLyByb3V0ZSBpbiBvbmUgZ28gYXQgdGhlIGVuZC5cbiAgICB0aGlzLnBsYWNlRGVmaW5pdGlvblxuICAgICAgLmdldFZpc2l0UGFyYW1ldGVyRGVmcygpXG4gICAgICAuZm9yRWFjaChwYXJhbWV0ZXJEZWYgPT4gdGhpcy5pbnN0YWxsQW5kSW5pdGlhbGlzZUJpbmRpbmcodmlzaXQsIHBhcmFtZXRlckRlZikpO1xuXG4gICAgd2hlbih0aGlzLnZpc2l0TW9kZWwpLmNoYW5nZXMoKGN1cnJlbnQsIHByZXZpb3VzKSA9PiB7XG4gICAgICBub3RpZnlWaXNpdENoYW5nZWQoY3VycmVudCwgcHJldmlvdXMpO1xuICAgIH0sIHt1bmxlc3M6IHRoaXMuX2luVmlzaXRVcGRhdGV9KTtcblxuICAgIC8vIFRPRE86IHRoaXMgbmVlZHMgdG8gZG8gYSByZXBsYWNlIHVybCBvcHRpb24gc28gdGhhdCB0aGUgbmV3IHVybCBpc24ndCBwdXQgaW4gdGhlIGhpc3RvcnkuLi4uIGZvclxuICAgIC8vICAgICAgIG5vdyB3ZSdyZSBub3QgZG9pbmcgaXQgYXMgaXQncyBhIGZhaXIgYml0IG9mIGVmZm9ydCBhbmQgd2lsbCBvbmx5IGFmZmVjdCBwZW9wbGUgaWYgdGhleSdyZVxuICAgIC8vICAgICAgIGN1dHRpbmcgYW5kIHBhc3RpbmcgdXJscyB0byBlYWNoIG90aGVyLlxuICAgIC8vIC8vIHRoZSBiaW5kaW5nIHByb2Nlc3MgY2FuIHVwZGF0ZSB0aGUgdmlzaXQgKGUuZy4gaWYgYSBzZWxlY3Rpb24gbW9kZWwgaGFzIGFscmVhZHkgc2VsZWN0ZWQgZHVyaW5nXG4gICAgLy8gLy8gY29tcG9uZW50IGNvbnN0cnVjdGlvbikgYW5kIHRoZXJlIHdhcyBubyB2YWx1ZSBzcGVjaWZpZWQgaW4gdGhlIHJvdXRlXG4gICAgLy8gaWYgKHZpc2l0Lmhhc1JvdXRpbmdDaGFuZ2VkRnJvbSh0aGlzLnZpc2l0TW9kZWwudmFsdWUpKSB7XG4gICAgLy8gICBub3RpZnlWaXNpdENoYW5nZWQodGhpcy52aXNpdE1vZGVsLnZhbHVlLCB2aXNpdClcbiAgICAvLyB9XG4gIH1cblxuICBnZXQgY2hpbGRQbGFjZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGRQbGFjZXMkLnZhbHVlO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVZpc2l0KHZpc2l0OiBWaXNpdFNlZ21lbnQpIHtcbiAgICBhc3NlcnQuaXNUcnV0aHkodGhpcy5pc0luaXRpYWxpc2VkKCkpO1xuICAgIGFzc2VydC5ub3ROaWwodmlzaXQpO1xuICAgIHRoaXMuX2luVmlzaXRVcGRhdGUud2hpbGVUcnVlKCgpID0+IHtcbiAgICAgIHRoaXMudmlzaXRNb2RlbC52YWx1ZSA9IHZpc2l0O1xuICAgIH0pO1xuICB9XG5cbiAgaXNJbml0aWFsaXNlZCgpIHtcbiAgICByZXR1cm4gISF0aGlzLnZpc2l0TW9kZWwudmFsdWU7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICAvKipcbiAgICogSW5pdGlhbGlzZWQgdGhlIGNvbXBvbmVudCBiaW5kaW5ncy4gIElmIGFueSBiaW5kaW5nIGhhcyBhbiBpbml0aWFsIG1vZGVsIHZhbHVlIChlLmcuIGEgc2VsZWN0aW9uIG1vZGVsXG4gICAqIGluaXRpYWxpc2VkIGR1cmluZyB0aGUgY29uc3RydWN0b3IpIGFuZCB0aGUgcm91dGUgaGFzIG5vdGhpbmcsIHRoZW4gdGhlIHZpc2l0IHdpbGwgYmUgdWRwYXRlZCBhbmQgdGhpc1xuICAgKiBtZXRob2Qgd2lsbCByZXR1cm4gdHVyZSB0byBub2ZpeSB0aGUgdGhlIHZpc2l0IGhhcyBjaGFuZ2VkLlxuICAgKi9cbiAgcHJpdmF0ZSBpbnN0YWxsQW5kSW5pdGlhbGlzZUJpbmRpbmc8VCwgUz4oaW5pdGlhbFZpc2l0OiBWaXNpdFNlZ21lbnQsIHBhcmFtZXRlckRlZjogUGFyYW1ldGVyRGVmaW5pdGlvbjxULCBTPikge1xuICAgIGNvbnN0IG1vZGVsID0gdGhpc1twYXJhbWV0ZXJEZWYucHJvcGVydHlOYW1lXSBhcyBJTXV0YWJsZUhhc1ZhbHVlPFQ+O1xuICAgIERlYnVnQ29udGV4dC50YWcobW9kZWwsIGAke3RoaXMucGxhY2VEZWZpbml0aW9uLmNvbXBvbmVudC5uYW1lfS4ke3BhcmFtZXRlckRlZi5wcm9wZXJ0eU5hbWV9YCk7XG4gICAgY29uc3QgYmluZGluZyA9IHRoaXMucmVnaXN0ZXJEaXNwb3NhYmxlKG5ldyBCaW5kaW5nKHRoaXMudmlzaXRNb2RlbCwgbW9kZWwsIHtcbiAgICAgIHRvUmlnaHQodmlzaXQ6IFZpc2l0U2VnbWVudCk6IFQge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHZpc2l0LmdldFBhcmFtZXRlclZhbHVlKHBhcmFtZXRlckRlZik7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdwdXNoIHRvIGNvbXBvbmVudCcsIHsgbmFtZTogcGFyYW1ldGVyRGVmLm5hbWUsIHZhbHVlLCB2aXNpdCB9KTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSxcbiAgICAgIHRvTGVmdCh2YWx1ZTogVCwgY3VycmVudFZpc2l0PzogVmlzaXRTZWdtZW50KTogVmlzaXRTZWdtZW50IHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3B1c2ggdG8gcm91dGUnLCB7IG5hbWU6IHBhcmFtZXRlckRlZi5uYW1lLCB2YWx1ZSwgY3VycmVudFZpc2l0IH0pO1xuICAgICAgICByZXR1cm4gY3VycmVudFZpc2l0LnJlcGxhY2UocGFyYW1ldGVyRGVmLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSkpO1xuXG4gICAgLy8gTm93IHdlIG5lZWQgdG8gaW5pdGlhbGlzZSB0aGUgYmluZGluZyBkaXJlY3Rpb24uICBJZiB3ZSBoYXZlIGEgdmFsdWUgaW4gdGhlIFVybCB0aGVuIHdlIHNob3VsZCBhbHdheXMgcHVzaFxuICAgIC8vIHRoYXQgdG8gdGhlIHZpZXcuICBJZiB3ZSBkb24ndCBhbmQgdGhlIHZpZXcgYWxyZWFkeSBoYXMgYSB2YWx1ZSAoZS5nLiBhIHNlbGVjdGlvbiBtb2RlbCBoYXMgYWxyZWFkeSBpbml0aWFsaXNlZCBpbiB0aGVcbiAgICAvLyBjb21wb25lbnQgY29uc3RydWN0b3IpIHRoZW4gd2Ugc2hvdWxkIHB1c2ggdGhhdCB0byB0aGUgcm91dGUuXG4gICAgY29uc3QgaXNJblZpc2l0ID0gIWlzTmlsKGluaXRpYWxWaXNpdC5nZXRQYXJhbWV0ZXJWYWx1ZShwYXJhbWV0ZXJEZWYpKTtcbiAgICBjb25zdCBpc0luTW9kZWwgPSAhaXNOaWwobW9kZWwudmFsdWUpO1xuICAgIGlmICghaXNJblZpc2l0ICYmIGlzSW5Nb2RlbCkge1xuICAgICAgYmluZGluZy53cml0ZUxlZnQoKTsgLy8gcHVzaCBpdCB0byB0aGUgcm91dGVcbiAgICB9IGVsc2Uge1xuICAgICAgYmluZGluZy53cml0ZVJpZ2h0KCk7IC8vIHB1c2ggaXQgdG8gdGhlIG1vZGVsXG4gICAgfVxuICB9XG5cbiAgQE1lbW9pemUoKVxuICBnZXQgcGxhY2VEZWZpbml0aW9uKCk6IFBsYWNlRGVmaW5pdGlvbiB7XG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IFBsYWNlQ29tcG9uZW50LmdldERlZmluaXRpb24odGhpcy5jb25zdHJ1Y3RvciBhcyBhbnkgYXMgQ29uc3RydWN0YWJsZTxQbGFjZUNvbXBvbmVudD4pO1xuICAgIGlmICghZGVmaW5pdGlvbikge1xuICAgICAgbGFuZy5pbGxlZ2FsU3RhdGUoYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSBleHRlbmRzIFBsYWNlQ29tcG9uZW50IGJ1dCBkb2Vzbid0IGhhdmUgQFBsYWNlKHsuLn0pIGRlY29yYXRvci5gKVxuICAgIH1cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIGdldCBhY3RpdmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZS5yZWFkb25seSQ7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGJ5IHRoZSByb3V0ZXIgdG8gc2VlIGlmIHRoaXMgY29tcG9uZW50IGNhbiBkZWFjdGl2YXRlLiAgVGhpcyBpc24ndCBjYWxsZWQgZm9yIHJvdXRlIHBhcmFtZXRlciBjaGFuZ2VzLlxuICAgKiBAcGFyYW0gaW50ZXJhY3Rpb25Db250ZXh0XG4gICAqL1xuICBhc3luYyBfY2FuTGVhdmVQbGFjZShpbnRlcmFjdGlvbkNvbnRleHQ6IEludGVyYWN0aW9uQ29udGV4dCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLmNhbkRlYWN0aXZhdGUgPyB0aGlzLmNhbkRlYWN0aXZhdGUoaW50ZXJhY3Rpb25Db250ZXh0KSA6IHRydWU7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGJ5IHRoZSByb3V0ZXIgdG8gc2VlIGlmIHRoaXMgY29tcG9uZW50IGNhbiBkZWFjdGl2YXRlLiAgVGhpcyBpc24ndCBjYWxsZWQgZm9yIHJvdXRlIHBhcmFtZXRlciBjaGFuZ2VzLlxuICAgKiBAcGFyYW0gaW50ZXJhY3Rpb25Db250ZXh0XG4gICAqIEBwYXJhbSBuZXh0U3RhdGVcbiAgICovXG4gIGFzeW5jIF9jYW5DaGFuZ2VSb3V0ZVBhcmFtZXRlcnMoaW50ZXJhY3Rpb25Db250ZXh0OiBJbnRlcmFjdGlvbkNvbnRleHQsIG5leHRTdGF0ZTogVXJsU25hcHNob3QpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAodGhpcy5fcGFyYW1ldGVyQ2hhbmdlSW50ZXJjZXB0b3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHZpc2l0ID0gbmV4dFN0YXRlLmNyZWF0ZVZpc2l0U2VnbWVudEZvcih0aGlzLnBsYWNlRGVmaW5pdGlvbik7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX3BhcmFtZXRlckNoYW5nZUludGVyY2VwdG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9IHRoaXMuX3BhcmFtZXRlckNoYW5nZUludGVyY2VwdG9yc1tpXTtcbiAgICAgICAgY29uc3Qga2VlcEdvaW5nID0gYXdhaXQgaW50ZXJjZXB0b3IuY2FuUHJvY2VlZCh2aXNpdCwgaW50ZXJhY3Rpb25Db250ZXh0KTtcbiAgICAgICAgaWYgKCFrZWVwR29pbmcpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYnkgdGhlIHJvdXRlciB3aGVuIHRoZSBwbGFjZSBpcyByZWFkeSB0byBpbnRlcmFjdCBhZnRlciBhbnkgYW5pbWF0aW9ucyBoYXZlIHJ1bi5cbiAgICovXG4gIF9ub3RpZnlBY3RpdmUoYWN0aXZlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fYWN0aXZlLnZhbHVlID0gYWN0aXZlO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCBieSB0aGUgcm91dGVyIHdoZW4gdGhlIHBsYWNlIGlzIHJlYWR5IHRvIGludGVyYWN0IGFmdGVyIGFueSBhbmltYXRpb25zIGhhdmUgcnVuLlxuICAgKi9cbiAgX25vdGlmeVBsYWNlUmVhZHkoKSB7XG4gICAgaWYgKHRoaXMub25QbGFjZVJlYWR5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgdGhpcy5fcGxhY2VSZWFkeUNhbGxiYWNrcy5mb3JFYWNoKGNhbGxiYWNrID0+IGNhbGxiYWNrKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oJ092ZXJyaWRpbmcgUGxhY2VDb21wb25lbnQub25QbGFjZVJlYWR5IGhhcyBiZWVuIGRlcHJlY2F0ZWQuICBVc2UgUGxhY2VDb21wb25lbnQub25QbGFjZVJlYWR5KCgpID0+IHsuLi4gZG8gc3R1ZmYuLi59KSBpbnN0ZWFkLicpO1xuICAgICAgdGhpcy5vblBsYWNlUmVhZHkodW5kZWZpbmVkKTtcbiAgICB9XG4gIH1cblxuICBvblBsYWNlUmVhZHkoY2FsbGJhY2s6ICgpID0+IHZvaWQpIHtcbiAgICB0aGlzLl9wbGFjZVJlYWR5Q2FsbGJhY2tzLnB1c2goY2FsbGJhY2spO1xuICB9XG5cbiAgaW50ZXJjZXB0VmlzaXRQYXJhbWV0ZXJDaGFuZ2U8VD4obW9kZWw6IFZhbHVlTW9kZWw8VD4sIGNhbGxiYWNrOiBQbGFjZUNvbXBvbmVudC5JbnRlcmNlcHRDYWxsYmFjazxUPiwgb3B0aW9ucz86IFBsYWNlQ29tcG9uZW50LkludGVyY2VwdE9wdGlvbnMpIHtcbiAgICBjb25zdCBwYXJhbWV0ZXJEZWYgPSBQYXJhbWV0ZXJEZWZpbml0aW9uLmdldChtb2RlbCk7XG4gICAgdGhpcy5fcGFyYW1ldGVyQ2hhbmdlSW50ZXJjZXB0b3JzLnB1c2gobmV3IFBhcmFtZXRlckNoYW5nZUludGVyY2VwdG9yKHBhcmFtZXRlckRlZiwgbW9kZWwsIGNhbGxiYWNrLCBvcHRpb25zKSk7XG4gIH1cblxufVxuXG5leHBvcnQgbmFtZXNwYWNlIFBsYWNlQ29tcG9uZW50IHtcblxuICBleHBvcnQgZnVuY3Rpb24gaXNQbGFjZUNvbXBvbmVudENvbnN0cnVjdG9yKHRhcmdldDogYW55KTogdGFyZ2V0IGlzIENvbnN0cnVjdGFibGU8UGxhY2VDb21wb25lbnQ+IHtcbiAgICByZXR1cm4gbGFuZy5jb25zdHJ1Y3RvckNoYWluKHRhcmdldCBhcyBDb25zdHJ1Y3RhYmxlPGFueT4pLmluY2x1ZGVzKFBsYWNlQ29tcG9uZW50KTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRSb3V0ZVBhcmFtZXRlcnMoa2xhc3M6IENvbnN0cnVjdGFibGU8UGxhY2VDb21wb25lbnQ+KTogUGFyYW1ldGVyRGVmaW5pdGlvbjxhbnk+W10ge1xuICAgIHJldHVybiBLbGFzcy5nZXQoa2xhc3MpLmdldE1ldGFkYXRhTGlzdChST1VURV9QQVJBTUVURVJfTElTVF9LRVkpIGFzIFBhcmFtZXRlckRlZmluaXRpb248YW55PltdO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGdldERlZmluaXRpb24oc25hcHNob3RPckNvbnN0cnVjdG9yOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHwgQ29uc3RydWN0YWJsZTxQbGFjZUNvbXBvbmVudD4pOiBQbGFjZURlZmluaXRpb24ge1xuICAgIGlmIChzbmFwc2hvdE9yQ29uc3RydWN0b3IgaW5zdGFuY2VvZiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KSB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSBzbmFwc2hvdE9yQ29uc3RydWN0b3IuY29tcG9uZW50O1xuICAgICAgaWYgKCFpc1BsYWNlQ29tcG9uZW50Q29uc3RydWN0b3IoY29tcG9uZW50KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFjdGl2YXRlZFJvdXRlU25hcHNob3QgY29tcG9uZW50IGlzIG5vdCBhIFBsYWNlQ29tcG9uZW50LCBnb3QgJHtjb21wb25lbnR9YCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gUmVmbGVjdC5nZXRNZXRhZGF0YShERUZJTklUSU9OX01FVEFfREFUQV9LRVksIGNvbXBvbmVudCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBSZWZsZWN0LmdldE1ldGFkYXRhKERFRklOSVRJT05fTUVUQV9EQVRBX0tFWSwgc25hcHNob3RPckNvbnN0cnVjdG9yKTtcbiAgICB9XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gaW5qZWN0RGVmaW5pdGlvbihrbGFzczogQ29uc3RydWN0YWJsZTxQbGFjZUNvbXBvbmVudD4sIGRlZmluaXRpb246IFBsYWNlRGVmaW5pdGlvbikge1xuICAgIFJlZmxlY3QuZGVmaW5lTWV0YWRhdGEoREVGSU5JVElPTl9NRVRBX0RBVEFfS0VZLCBkZWZpbml0aW9uLCBrbGFzcyk7XG4gIH1cblxuICBleHBvcnQgdHlwZSBJbnRlcmNlcHRDYWxsYmFjazxUPiA9IChpczogVCwgd2FzOiBULCBpbnRlcmFjdGlvbkNvbnRleHQ6IEludGVyYWN0aW9uQ29udGV4dCkgPT4gYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj47XG5cbiAgZXhwb3J0IGludGVyZmFjZSBJbnRlcmNlcHRPcHRpb25zIHtcbiAgICBpbml0aWFsVmFsdWU6ICdldmFsdWF0aW9uVW5sZXNzTmlsJyB8ICdldmFsdWF0ZSdcbiAgfVxuXG5cbn1cbiJdfQ==
204
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2UtY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvcGxhY2UvcGxhY2UtY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNoRCxPQUFPLEVBQUMsc0JBQXNCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQ0wsTUFBTSxFQUNOLE9BQU8sRUFFUCxZQUFZLEVBQ1osR0FBRyxFQUNILEtBQUssRUFFTCxJQUFJLEVBQ0osU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBQyxLQUFLLEVBQUUsVUFBVSxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDL0QsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNoQyxPQUFPLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBRW5FLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNuRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7O0FBTTNDLDhDQUE4QztBQUM5QyxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRywwQkFBMEIsQ0FBQztBQUNuRSxxQkFBcUI7QUFDckIsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsTUFBTSxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFHekUsd0NBQXdDO0FBQ3hDLHVLQUF1SztBQUN2SyxNQUFNO0FBQ04sRUFBRTtBQUNGLHdGQUF3RjtBQUN4RixtQkFBbUI7QUFDbkIsTUFBTTtBQUNOLElBQUk7QUFHSixNQUFNLE9BQU8sY0FBZSxTQUFRLGlCQUFpQjtJQUVsQyxvQkFBb0Is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QixDQUFDLENBQUM7U0FDN0U7SUFDSCxDQUFDO0lBVmUsNEJBQWEsZ0JBVTVCLENBQUE7SUFFRCxTQUFnQixnQkFBZ0IsQ0FBQyxLQUFvQyxFQUFFLFVBQTJCO1FBQ2hHLE9BQU8sQ0FBQyxjQUFjLENBQUMsd0JBQXdCLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFGZSwrQkFBZ0IsbUJBRS9CLENBQUE7SUFFRCw0SEFBNEg7SUFFNUgsc0NBQXNDO0lBQ3RDLHFEQUFxRDtJQUNyRCxJQUFJO0FBR04sQ0FBQyxFQWpDZ0IsY0FBYyxLQUFkLGNBQWMsUUFpQzlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEaXJlY3RpdmUsIGluamVjdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlU25hcHNob3R9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1xuICBhc3NlcnQsXG4gIEJpbmRpbmcsXG4gIENvbnN0cnVjdGFibGUsXG4gIERlYnVnQ29udGV4dCxcbiAgRHNsLFxuICBHdWFyZCxcbiAgSU11dGFibGVIYXNWYWx1ZSxcbiAgbGFuZyxcbiAgTGlzdE1vZGVsLFxuICBNdXRhYmxlVmFsdWVNb2RlbFxufSBmcm9tICdAY29vbG9uL3BlY3Rpbic7XG5pbXBvcnQge0tsYXNzLCBNZW1vaXplR2V0fSBmcm9tICdAY29vbG9uL3R5cGVzY3JpcHQtdXRpbGl0aWVzJztcbmltcG9ydCB7aXNOaWx9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgJ3JlZmxlY3QtbWV0YWRhdGEnO1xuaW1wb3J0IHtMb2FkYWJsZUNvbXBvbmVudH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvbG9hZGFibGUtY29tcG9uZW50XCI7XG5pbXBvcnQge0ludGVyYWN0aW9uQ29udGV4dH0gZnJvbSAnLi4vaW50ZXJhY3Rpb24vaW50ZXJhY3Rpb24tY29udGV4dCc7XG5pbXBvcnQge1BsYWNlRGVmaW5pdGlvbn0gZnJvbSAnLi9wbGFjZS1kZWZpbml0aW9uJztcbmltcG9ydCB7UGxhY2VSb3V0ZXJ9IGZyb20gXCIuL3BsYWNlLXJvdXRlclwiO1xuaW1wb3J0IHtQYXJhbWV0ZXJEZWZpbml0aW9ufSBmcm9tICcuL3JvdXRlL3BhcmFtZXRlci1kZWZpbml0aW9uJztcbmltcG9ydCB7VXJsU25hcHNob3R9IGZyb20gJy4vdXJsLXNuYXBzaG90JztcbmltcG9ydCB7VmlzaXRTZWdtZW50fSBmcm9tICcuL3Zpc2l0LXNlZ21lbnQnO1xuXG5cbi8vIFJBS0U6IG1ha2luZyB0aGlzIFN5bWJvbCguLi4pIGJyb2tlIHRoaW5ncy5cbmV4cG9ydCBjb25zdCBERUZJTklUSU9OX01FVEFfREFUQV9LRVkgPSAnUExBQ0VfREVGSU5JVElPTl9PUFRJT05TJztcbi8vIHRoaXMgb25lIHNlZW1zIG9rLlxuZXhwb3J0IGNvbnN0IFJPVVRFX1BBUkFNRVRFUl9MSVNUX0tFWSA9IFN5bWJvbCgncGxhY2U6cm91dGU6cGFyYW1ldGVycycpO1xuXG5cbi8vIGNsYXNzIFBhcmFtZXRlckNoYW5nZUludGVyY2VwdG9yPFQ+IHtcbi8vICAgY29uc3RydWN0b3IocGFyYW1ldGVyRGVmOiBQYXJhbWV0ZXJEZWZpbml0aW9uPFQ+LCBtb2RlbDogVmFsdWVNb2RlbDxUPiwgY2FsbGJhY2s6IFBsYWNlQ29tcG9uZW50LkludGVyY2VwdENhbGxiYWNrPFQ+LCBvcHRpb25zOiBQbGFjZUNvbXBvbmVudC5JbnRlcmNlcHRPcHRpb25zKSB7XG4vLyAgIH1cbi8vXG4vLyAgIGFzeW5jIGNhblByb2NlZWQobmV4dFN0YXRlOiBWaXNpdFNlZ21lbnQsIGludGVyYWN0aW9uQ29udGV4dDogSW50ZXJhY3Rpb25Db250ZXh0KSB7XG4vLyAgICAgcmV0dXJuIHRydWU7XG4vLyAgIH1cbi8vIH1cblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgY2xhc3MgUGxhY2VDb21wb25lbnQgZXh0ZW5kcyBMb2FkYWJsZUNvbXBvbmVudCB7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfcGxhY2VSZWFkeUNhbGxiYWNrczogKCgpPT52b2lkKVtdID0gW107XG4gIHByaXZhdGUgdmlzaXRNb2RlbCA9IG5ldyBNdXRhYmxlVmFsdWVNb2RlbDxWaXNpdFNlZ21lbnQ+KCk7XG4gIHByaXZhdGUgX2luVmlzaXRVcGRhdGUgPSBuZXcgR3VhcmQoKTtcbiAgcHJpdmF0ZSBfYWN0aXZlID0gbmV3IE11dGFibGVWYWx1ZU1vZGVsPGJvb2xlYW4+KGZhbHNlKTtcblxuICBpbnRlcmFjdGlvbkNvbnRleHQ/OiBJbnRlcmFjdGlvbkNvbnRleHQ7XG4gIHJlYWRvbmx5IGNoaWxkUGxhY2VzJDogTGlzdE1vZGVsPENvbnN0cnVjdGFibGU8UGxhY2VDb21wb25lbnQ+PjtcbiAgLy8gcHJpdmF0ZSByZWFkb25seSBfcGFyYW1ldGVyQ2hhbmdlSW50ZXJjZXB0b3JzOiBQYXJhbWV0ZXJDaGFuZ2VJbnRlcmNlcHRvcjxhbnk+W10gPSBbXTtcblxuXG4gIGNhbkRlYWN0aXZhdGU/KGludGVyYWN0aW9uQ29udGV4dDogSW50ZXJhY3Rpb25Db250ZXh0KTogYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj47XG5cblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGxhY2VSb3V0ZXIgPSBpbmplY3QoUGxhY2VSb3V0ZXIpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgY29uc3Qge2NoYWluLCB2YWx1ZU9mLCBiZWZvcmUsIHdoZW4sIGFmdGVyLCBvYnNlcnZlLCBzd2l0Y2hPbn0gPSBEc2wuZGlzcG9zZVdpdGgodGhpcyk7XG4gICAgd2hlbih0aGlzLl9hY3RpdmUpLmJlY29tZXNUcnV0aHkoKCkgPT4gdGhpcy5fbm90aWZ5UGxhY2VSZWFkeSgpKTtcbiAgICB0aGlzLmNoaWxkUGxhY2VzJCA9IExpc3RNb2RlbC5jb25zdGFudCh0aGlzLnBsYWNlRGVmaW5pdGlvbi5jaGlsZHJlbi5tYXAoZCA9PiBkLmNvbXBvbmVudCkpO1xuICB9XG5cbiAgcHVibGljIGluaXRpYWxpc2VWaXNpdCh2aXNpdDogVmlzaXRTZWdtZW50LCBub3RpZnlWaXNpdENoYW5nZWQ6IChjdXJyZW50OiBWaXNpdFNlZ21lbnQsIHByZXZpb3VzOiBWaXNpdFNlZ21lbnQpID0+IHZvaWQpIHtcbiAgICBhc3NlcnQuaXNOaWwodGhpcy52aXNpdE1vZGVsLnZhbHVlKTtcblxuICAgIGNvbnN0IHt3aGVufSA9IERzbC5kaXNwb3NlV2l0aCh0aGlzKTtcblxuICAgIHRoaXMudmlzaXRNb2RlbC52YWx1ZSA9IHZpc2l0O1xuICAgIERlYnVnQ29udGV4dC5nZXRPckNyZWF0ZSh0aGlzLnZpc2l0TW9kZWwpLnRhZyhgJHt0aGlzLnBsYWNlRGVmaW5pdGlvbi5jb21wb25lbnQubmFtZX0udmlzaXRNb2RlbGApO1xuXG4gICAgLy8gd2UgdHJhY2sgaWYgdGhlIGFueSBvZiB0aGUgYmluZGluZ3MgdXBkYXRlZCB0aGUgcm91dGUuICBJZiBzbyB3ZSByZW1lbWJlciBpdCBhbmQgdXBkYXRlIHRoZVxuICAgIC8vIHJvdXRlIGluIG9uZSBnbyBhdCB0aGUgZW5kLlxuICAgIHRoaXMucGxhY2VEZWZpbml0aW9uXG4gICAgICAuZ2V0VmlzaXRQYXJhbWV0ZXJEZWZzKClcbiAgICAgIC5mb3JFYWNoKHBhcmFtZXRlckRlZiA9PiB0aGlzLmluc3RhbGxBbmRJbml0aWFsaXNlQmluZGluZyh2aXNpdCwgcGFyYW1ldGVyRGVmKSk7XG5cbiAgICB3aGVuKHRoaXMudmlzaXRNb2RlbCkuY2hhbmdlcygoY3VycmVudCwgcHJldmlvdXMpID0+IHtcbiAgICAgIG5vdGlmeVZpc2l0Q2hhbmdlZChjdXJyZW50LCBwcmV2aW91cyk7XG4gICAgfSwge3VubGVzczogdGhpcy5faW5WaXNpdFVwZGF0ZX0pO1xuXG4gICAgLy8gVE9ETzogdGhpcyBuZWVkcyB0byBkbyBhIHJlcGxhY2UgdXJsIG9wdGlvbiBzbyB0aGF0IHRoZSBuZXcgdXJsIGlzbid0IHB1dCBpbiB0aGUgaGlzdG9yeS4uLi4gZm9yXG4gICAgLy8gICAgICAgbm93IHdlJ3JlIG5vdCBkb2luZyBpdCBhcyBpdCdzIGEgZmFpciBiaXQgb2YgZWZmb3J0IGFuZCB3aWxsIG9ubHkgYWZmZWN0IHBlb3BsZSBpZiB0aGV5J3JlXG4gICAgLy8gICAgICAgY3V0dGluZyBhbmQgcGFzdGluZyB1cmxzIHRvIGVhY2ggb3RoZXIuXG4gICAgLy8gLy8gdGhlIGJpbmRpbmcgcHJvY2VzcyBjYW4gdXBkYXRlIHRoZSB2aXNpdCAoZS5nLiBpZiBhIHNlbGVjdGlvbiBtb2RlbCBoYXMgYWxyZWFkeSBzZWxlY3RlZCBkdXJpbmdcbiAgICAvLyAvLyBjb21wb25lbnQgY29uc3RydWN0aW9uKSBhbmQgdGhlcmUgd2FzIG5vIHZhbHVlIHNwZWNpZmllZCBpbiB0aGUgcm91dGVcbiAgICAvLyBpZiAodmlzaXQuaGFzUm91dGluZ0NoYW5nZWRGcm9tKHRoaXMudmlzaXRNb2RlbC52YWx1ZSkpIHtcbiAgICAvLyAgIG5vdGlmeVZpc2l0Q2hhbmdlZCh0aGlzLnZpc2l0TW9kZWwudmFsdWUsIHZpc2l0KVxuICAgIC8vIH1cbiAgfVxuXG4gIGdldCBjaGlsZFBsYWNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5jaGlsZFBsYWNlcyQudmFsdWU7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlVmlzaXQodmlzaXQ6IFZpc2l0U2VnbWVudCkge1xuICAgIGFzc2VydC5pc1RydXRoeSh0aGlzLmlzSW5pdGlhbGlzZWQoKSk7XG4gICAgYXNzZXJ0Lm5vdE5pbCh2aXNpdCk7XG4gICAgdGhpcy5faW5WaXNpdFVwZGF0ZS53aGlsZVRydWUoKCkgPT4ge1xuICAgICAgdGhpcy52aXNpdE1vZGVsLnZhbHVlID0gdmlzaXQ7XG4gICAgfSk7XG4gIH1cblxuICBpc0luaXRpYWxpc2VkKCkge1xuICAgIHJldHVybiAhIXRoaXMudmlzaXRNb2RlbC52YWx1ZTtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIC8qKlxuICAgKiBJbml0aWFsaXNlZCB0aGUgY29tcG9uZW50IGJpbmRpbmdzLiAgSWYgYW55IGJpbmRpbmcgaGFzIGFuIGluaXRpYWwgbW9kZWwgdmFsdWUgKGUuZy4gYSBzZWxlY3Rpb24gbW9kZWxcbiAgICogaW5pdGlhbGlzZWQgZHVyaW5nIHRoZSBjb25zdHJ1Y3RvcikgYW5kIHRoZSByb3V0ZSBoYXMgbm90aGluZywgdGhlbiB0aGUgdmlzaXQgd2lsbCBiZSB1ZHBhdGVkIGFuZCB0aGlzXG4gICAqIG1ldGhvZCB3aWxsIHJldHVybiB0dXJlIHRvIG5vZml5IHRoZSB0aGUgdmlzaXQgaGFzIGNoYW5nZWQuXG4gICAqL1xuICBwcml2YXRlIGluc3RhbGxBbmRJbml0aWFsaXNlQmluZGluZzxULCBTPihpbml0aWFsVmlzaXQ6IFZpc2l0U2VnbWVudCwgcGFyYW1ldGVyRGVmOiBQYXJhbWV0ZXJEZWZpbml0aW9uPFQsIFM+KSB7XG4gICAgY29uc3QgbW9kZWwgPSB0aGlzW3BhcmFtZXRlckRlZi5wcm9wZXJ0eU5hbWVdIGFzIElNdXRhYmxlSGFzVmFsdWU8VD47XG4gICAgYXNzZXJ0Lm5vdE5pbChtb2RlbCk7XG4gICAgRGVidWdDb250ZXh0LnRhZyhtb2RlbCwgYCR7dGhpcy5wbGFjZURlZmluaXRpb24uY29tcG9uZW50Lm5hbWV9LiR7cGFyYW1ldGVyRGVmLnByb3BlcnR5TmFtZX1gKTtcbiAgICBjb25zdCBiaW5kaW5nID0gdGhpcy5yZWdpc3RlckRpc3Bvc2FibGUobmV3IEJpbmRpbmcodGhpcy52aXNpdE1vZGVsLCBtb2RlbCwge1xuICAgICAgdG9SaWdodCh2aXNpdDogVmlzaXRTZWdtZW50KTogVCB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdmlzaXQuZ2V0UGFyYW1ldGVyVmFsdWUocGFyYW1ldGVyRGVmKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3B1c2ggdG8gY29tcG9uZW50JywgeyBuYW1lOiBwYXJhbWV0ZXJEZWYubmFtZSwgdmFsdWUsIHZpc2l0IH0pO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9LFxuICAgICAgdG9MZWZ0KHZhbHVlOiBULCBjdXJyZW50VmlzaXQ/OiBWaXNpdFNlZ21lbnQpOiBWaXNpdFNlZ21lbnQge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygncHVzaCB0byByb3V0ZScsIHsgbmFtZTogcGFyYW1ldGVyRGVmLm5hbWUsIHZhbHVlLCBjdXJyZW50VmlzaXQgfSk7XG4gICAgICAgIHJldHVybiBjdXJyZW50VmlzaXQucmVwbGFjZShwYXJhbWV0ZXJEZWYsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KSk7XG5cbiAgICAvLyBOb3cgd2UgbmVlZCB0byBpbml0aWFsaXNlIHRoZSBiaW5kaW5nIGRpcmVjdGlvbi4gIElmIHdlIGhhdmUgYSB2YWx1ZSBpbiB0aGUgVXJsIHRoZW4gd2Ugc2hvdWxkIGFsd2F5cyBwdXNoXG4gICAgLy8gdGhhdCB0byB0aGUgdmlldy4gIElmIHdlIGRvbid0IGFuZCB0aGUgdmlldyBhbHJlYWR5IGhhcyBhIHZhbHVlIChlLmcuIGEgc2VsZWN0aW9uIG1vZGVsIGhhcyBhbHJlYWR5IGluaXRpYWxpc2VkIGluIHRoZVxuICAgIC8vIGNvbXBvbmVudCBjb25zdHJ1Y3RvcikgdGhlbiB3ZSBzaG91bGQgcHVzaCB0aGF0IHRvIHRoZSByb3V0ZS5cbiAgICBjb25zdCBpc0luVmlzaXQgPSAhaXNOaWwoaW5pdGlhbFZpc2l0LmdldFBhcmFtZXRlclZhbHVlKHBhcmFtZXRlckRlZikpO1xuICAgIGNvbnN0IGlzSW5Nb2RlbCA9ICFpc05pbChtb2RlbC52YWx1ZSk7XG4gICAgaWYgKCFpc0luVmlzaXQgJiYgaXNJbk1vZGVsKSB7XG4gICAgICBiaW5kaW5nLndyaXRlTGVmdCgpOyAvLyBwdXNoIGl0IHRvIHRoZSByb3V0ZVxuICAgIH0gZWxzZSB7XG4gICAgICBiaW5kaW5nLndyaXRlUmlnaHQoKTsgLy8gcHVzaCBpdCB0byB0aGUgbW9kZWxcbiAgICB9XG4gIH1cblxuICBATWVtb2l6ZUdldCgpXG4gIGdldCBwbGFjZURlZmluaXRpb24oKTogUGxhY2VEZWZpbml0aW9uIHtcbiAgICBjb25zdCBkZWZpbml0aW9uID0gUGxhY2VDb21wb25lbnQuZ2V0RGVmaW5pdGlvbih0aGlzLmNvbnN0cnVjdG9yIGFzIGFueSBhcyBDb25zdHJ1Y3RhYmxlPFBsYWNlQ29tcG9uZW50Pik7XG4gICAgaWYgKCFkZWZpbml0aW9uKSB7XG4gICAgICBsYW5nLmlsbGVnYWxTdGF0ZShgJHt0aGlzLmNvbnN0cnVjdG9yLm5hbWV9IGV4dGVuZHMgUGxhY2VDb21wb25lbnQgYnV0IGRvZXNuJ3QgaGF2ZSBAUGxhY2Uoey4ufSkgZGVjb3JhdG9yLmApXG4gICAgfVxuICAgIHJldHVybiBkZWZpbml0aW9uO1xuICB9XG5cbiAgZ2V0IGFjdGl2ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlLnJlYWRvbmx5JDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYnkgdGhlIHJvdXRlciB0byBzZWUgaWYgdGhpcyBjb21wb25lbnQgY2FuIGRlYWN0aXZhdGUuICBUaGlzIGlzbid0IGNhbGxlZCBmb3Igcm91dGUgcGFyYW1ldGVyIGNoYW5nZXMuXG4gICAqIEBwYXJhbSBpbnRlcmFjdGlvbkNvbnRleHRcbiAgICovXG4gIGFzeW5jIF9jYW5MZWF2ZVBsYWNlKGludGVyYWN0aW9uQ29udGV4dDogSW50ZXJhY3Rpb25Db250ZXh0KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuY2FuRGVhY3RpdmF0ZSA/IHRoaXMuY2FuRGVhY3RpdmF0ZShpbnRlcmFjdGlvbkNvbnRleHQpIDogdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgYnkgdGhlIHJvdXRlciB0byBzZWUgaWYgdGhpcyBjb21wb25lbnQgY2FuIGRlYWN0aXZhdGUuICBUaGlzIGlzbid0IGNhbGxlZCBmb3Igcm91dGUgcGFyYW1ldGVyIGNoYW5nZXMuXG4gICAqIEBwYXJhbSBpbnRlcmFjdGlvbkNvbnRleHRcbiAgICogQHBhcmFtIG5leHRTdGF0ZVxuICAgKi9cbiAgYXN5bmMgX2NhbkNoYW5nZVJvdXRlUGFyYW1ldGVycyhpbnRlcmFjdGlvbkNvbnRleHQ6IEludGVyYWN0aW9uQ29udGV4dCwgbmV4dFN0YXRlOiBVcmxTbmFwc2hvdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIC8vIGlmICh0aGlzLl9wYXJhbWV0ZXJDaGFuZ2VJbnRlcmNlcHRvcnMubGVuZ3RoID4gMCkge1xuICAgIC8vICAgY29uc3QgdmlzaXQgPSBuZXh0U3RhdGUuY3JlYXRlVmlzaXRTZWdtZW50Rm9yKHRoaXMucGxhY2VEZWZpbml0aW9uKTtcbiAgICAvLyAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fcGFyYW1ldGVyQ2hhbmdlSW50ZXJjZXB0b3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgLy8gICAgIGNvbnN0IGludGVyY2VwdG9yID0gdGhpcy5fcGFyYW1ldGVyQ2hhbmdlSW50ZXJjZXB0b3JzW2ldO1xuICAgIC8vICAgICBjb25zdCBrZWVwR29pbmcgPSBhd2FpdCBpbnRlcmNlcHRvci5jYW5Qcm9jZWVkKHZpc2l0LCBpbnRlcmFjdGlvbkNvbnRleHQpO1xuICAgIC8vICAgICBpZiAoIWtlZXBHb2luZykge1xuICAgIC8vICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgfVxuICAgIC8vIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIENhbGxlZCBieSB0aGUgcm91dGVyIHdoZW4gdGhlIHBsYWNlIGlzIHJlYWR5IHRvIGludGVyYWN0IGFmdGVyIGFueSBhbmltYXRpb25zIGhhdmUgcnVuLlxuICAgKi9cbiAgX25vdGlmeUFjdGl2ZShhY3RpdmU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9hY3RpdmUudmFsdWUgPSBhY3RpdmU7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbGVkIGJ5IHRoZSByb3V0ZXIgd2hlbiB0aGUgcGxhY2UgaXMgcmVhZHkgdG8gaW50ZXJhY3QgYWZ0ZXIgYW55IGFuaW1hdGlvbnMgaGF2ZSBydW4uXG4gICAqL1xuICBfbm90aWZ5UGxhY2VSZWFkeSgpIHtcbiAgICBpZiAodGhpcy5vblBsYWNlUmVhZHkubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLl9wbGFjZVJlYWR5Q2FsbGJhY2tzLmZvckVhY2goY2FsbGJhY2sgPT4gY2FsbGJhY2soKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybignT3ZlcnJpZGluZyBQbGFjZUNvbXBvbmVudC5vblBsYWNlUmVhZHkgaGFzIGJlZW4gZGVwcmVjYXRlZC4gIFVzZSBQbGFjZUNvbXBvbmVudC5vblBsYWNlUmVhZHkoKCkgPT4gey4uLiBkbyBzdHVmZi4uLn0pIGluc3RlYWQuJyk7XG4gICAgICB0aGlzLm9uUGxhY2VSZWFkeSh1bmRlZmluZWQpO1xuICAgIH1cbiAgfVxuXG4gIG9uUGxhY2VSZWFkeShjYWxsYmFjazogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMuX3BsYWNlUmVhZHlDYWxsYmFja3MucHVzaChjYWxsYmFjayk7XG4gIH1cblxuICAvLyBpbnRlcmNlcHRWaXNpdFBhcmFtZXRlckNoYW5nZTxUPihtb2RlbDogVmFsdWVNb2RlbDxUPiwgY2FsbGJhY2s6IFBsYWNlQ29tcG9uZW50LkludGVyY2VwdENhbGxiYWNrPFQ+LCBvcHRpb25zPzogUGxhY2VDb21wb25lbnQuSW50ZXJjZXB0T3B0aW9ucykge1xuICAvLyAgIGNvbnN0IHBhcmFtZXRlckRlZiA9IFBhcmFtZXRlckRlZmluaXRpb24uZ2V0KG1vZGVsKTtcbiAgLy8gICB0aGlzLl9wYXJhbWV0ZXJDaGFuZ2VJbnRlcmNlcHRvcnMucHVzaChuZXcgUGFyYW1ldGVyQ2hhbmdlSW50ZXJjZXB0b3IocGFyYW1ldGVyRGVmLCBtb2RlbCwgY2FsbGJhY2ssIG9wdGlvbnMpKTtcbiAgLy8gfVxuXG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgUGxhY2VDb21wb25lbnQge1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBpc1BsYWNlQ29tcG9uZW50Q29uc3RydWN0b3IodGFyZ2V0OiBhbnkpOiB0YXJnZXQgaXMgQ29uc3RydWN0YWJsZTxQbGFjZUNvbXBvbmVudD4ge1xuICAgIHJldHVybiBsYW5nLmNvbnN0cnVjdG9yQ2hhaW4odGFyZ2V0IGFzIENvbnN0cnVjdGFibGU8YW55PikuaW5jbHVkZXMoUGxhY2VDb21wb25lbnQpO1xuICB9XG5cbiAgZXhwb3J0IGZ1bmN0aW9uIGdldFJvdXRlUGFyYW1ldGVycyhrbGFzczogQ29uc3RydWN0YWJsZTxQbGFjZUNvbXBvbmVudD4pOiBQYXJhbWV0ZXJEZWZpbml0aW9uPGFueT5bXSB7XG4gICAgcmV0dXJuIEtsYXNzLmdldChrbGFzcykuZ2V0TWV0YWRhdGFMaXN0KFJPVVRFX1BBUkFNRVRFUl9MSVNUX0tFWSkgYXMgUGFyYW1ldGVyRGVmaW5pdGlvbjxhbnk+W107XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZ2V0RGVmaW5pdGlvbihzbmFwc2hvdE9yQ29uc3RydWN0b3I6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfCBDb25zdHJ1Y3RhYmxlPFBsYWNlQ29tcG9uZW50Pik6IFBsYWNlRGVmaW5pdGlvbiB7XG4gICAgaWYgKHNuYXBzaG90T3JDb25zdHJ1Y3RvciBpbnN0YW5jZW9mIEFjdGl2YXRlZFJvdXRlU25hcHNob3QpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHNuYXBzaG90T3JDb25zdHJ1Y3Rvci5jb21wb25lbnQ7XG4gICAgICBpZiAoIWlzUGxhY2VDb21wb25lbnRDb25zdHJ1Y3Rvcihjb21wb25lbnQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQWN0aXZhdGVkUm91dGVTbmFwc2hvdCBjb21wb25lbnQgaXMgbm90IGEgUGxhY2VDb21wb25lbnQsIGdvdCAke2NvbXBvbmVudH1gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBSZWZsZWN0LmdldE1ldGFkYXRhKERFRklOSVRJT05fTUVUQV9EQVRBX0tFWSwgY29tcG9uZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0TWV0YWRhdGEoREVGSU5JVElPTl9NRVRBX0RBVEFfS0VZLCBzbmFwc2hvdE9yQ29uc3RydWN0b3IpO1xuICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBpbmplY3REZWZpbml0aW9uKGtsYXNzOiBDb25zdHJ1Y3RhYmxlPFBsYWNlQ29tcG9uZW50PiwgZGVmaW5pdGlvbjogUGxhY2VEZWZpbml0aW9uKSB7XG4gICAgUmVmbGVjdC5kZWZpbmVNZXRhZGF0YShERUZJTklUSU9OX01FVEFfREFUQV9LRVksIGRlZmluaXRpb24sIGtsYXNzKTtcbiAgfVxuXG4gIC8vIGV4cG9ydCB0eXBlIEludGVyY2VwdENhbGxiYWNrPFQ+ID0gKGlzOiBULCB3YXM6IFQsIGludGVyYWN0aW9uQ29udGV4dDogSW50ZXJhY3Rpb25Db250ZXh0KSA9PiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPjtcblxuICAvLyBleHBvcnQgaW50ZXJmYWNlIEludGVyY2VwdE9wdGlvbnMge1xuICAvLyAgIGluaXRpYWxWYWx1ZTogJ2V2YWx1YXRpb25Vbmxlc3NOaWwnIHwgJ2V2YWx1YXRlJ1xuICAvLyB9XG5cblxufVxuIl19
@@ -1,3 +1,3 @@
1
1
  import { InjectionToken } from '@angular/core';
2
2
  export const AUP_PLACE_CONFIG = new InjectionToken('AUP_PLACE_CONFIG');
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2UtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvcGxhY2UvcGxhY2UtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0MsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxjQUFjLENBQWMsa0JBQWtCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBjb25zdCBBVVBfUExBQ0VfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPFBsYWNlQ29uZmlnPignQVVQX1BMQUNFX0NPTkZJRycpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBsYWNlQ29uZmlnIHtcbiAgYW5pbWF0aW9uRHVyYXRpb246IHN0cmluZztcbn1cbiJdfQ==
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2UtY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hbmd1bGFyLXVpLXBvd2VydXBzL3NyYy9saWIvcGxhY2UvcGxhY2UtY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFN0MsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxjQUFjLENBQWMsa0JBQWtCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0aW9uVG9rZW59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY29uc3QgQVVQX1BMQUNFX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxQbGFjZUNvbmZpZz4oJ0FVUF9QTEFDRV9DT05GSUcnKTtcblxuZXhwb3J0IGludGVyZmFjZSBQbGFjZUNvbmZpZyB7XG4gIGFuaW1hdGlvbkR1cmF0aW9uOiBzdHJpbmc7XG59XG4iXX0=
@@ -1,8 +1,8 @@
1
1
  import { __decorate, __metadata } from "tslib";
2
2
  import { assert } from '@coolon/pectin';
3
3
  import { lang, Opts } from '@coolon/typescript-utilities';
4
- import { Memoize } from '@typescript-plus/fast-memoize-decorator';
5
- import { isEmpty, isNil, join } from 'lodash';
4
+ import { Memoize } from 'fast-typescript-memoize';
5
+ import { isEmpty, isNil, join } from 'lodash-es';
6
6
  import { ParameterDefinition } from './route/parameter-definition';
7
7
  export class PlaceDefinition {
8
8
  component;
@@ -210,4 +210,4 @@ __decorate([
210
210
  __metadata("design:paramtypes", [Object]),
211
211
  __metadata("design:returntype", Array)
212
212
  ], PlaceDefinition.prototype, "getVisitParameterDefs", null);
213
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2UtZGVmaW5pdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci11aS1wb3dlcnVwcy9zcmMvbGliL3BsYWNlL3BsYWNlLWRlZmluaXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sRUFBQyxNQUFNLEVBQTJCLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEUsT0FBTyxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFFaEUsT0FBTyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRzVDLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBR2pFLE1BQU0sT0FBTyxlQUFlO0lBSUw7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQVRiLE9BQU8sQ0FBa0I7SUFFakMsWUFBcUIsU0FBd0MsRUFDeEMsSUFBWSxFQUNaLFlBQXFCLEVBQ3JCLElBQVMsRUFDVCxJQUF5QixFQUN6QixlQUEyQyxFQUMzQyxRQUEyQixFQUMzQixvQkFBNkI7UUFQN0IsY0FBUyxHQUFULFNBQVMsQ0FBK0I7UUFDeEMsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNaLGlCQUFZLEdBQVosWUFBWSxDQUFTO1FBQ3JCLFNBQUksR0FBSixJQUFJLENBQUs7UUFDVCxTQUFJLEdBQUosSUFBSSxDQUFxQjtRQUN6QixvQkFBZSxHQUFmLGVBQWUsQ0FBNEI7UUFDM0MsYUFBUSxHQUFSLFFBQVEsQ0FBbUI7UUFDM0IseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFTO1FBQ2hELElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBRWxELENBQUM7SUFHRCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDMUUsQ0FBQztJQUdELGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRVMsU0FBUyxDQUFDLE1BQXVCO1FBQ3pDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELE1BQU07UUFDSixPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQTtJQUN0QixDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFBO0lBQ3JCLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELFNBQVMsQ0FBQyxTQUFxQztRQUM3QyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFHRCxVQUFVO1FBQ1IsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDekMsQ0FBQztJQUdELHNCQUFzQjtRQUNwQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFHRCxxQkFBcUIsQ0FBQyxjQUFjLEdBQUcsS0FBSztRQUMxQyxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxFQUFDLGNBQWMsRUFBRSxzQkFBc0IsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFHRCxxQkFBcUIsQ0FBQyxPQUEwQztRQUM5RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9CLFdBQVc7UUFDWCxNQUFNLGNBQWMsR0FBRyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzdFLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyx3QkFBd0IsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM3RixNQUFNLHlCQUF5QixHQUFHLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsMkJBQTJCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkcsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNyQyxPQUFPLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUM7bUJBQ2pDLENBQUMsc0JBQXNCLElBQUksQ0FBQyxDQUFDLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLHlDQUF5QzttQkFDeEcsQ0FBQyx5QkFBeUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzFELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFlBQVksQ0FBSSxHQUFXLEVBQUUsWUFBZ0I7UUFDM0MsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEIsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdkQsWUFBWSxDQUFDO0lBQ2pCLENBQUM7SUFFRCxlQUFlLENBQUksSUFBYyxFQUFFLFlBQWdCO1FBQ2pELElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUNiLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2RCxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO1NBQ2hEO2FBQU07WUFDTCxPQUFPLFlBQVksQ0FBQztTQUNyQjtJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsS0FBbUI7UUFDaEMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUMxRCxPQUFPLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ25GLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxLQUFtQjtRQUNyQyxxR0FBcUc7UUFDckcsbUdBQW1HO1FBQ25HLG1CQUFtQjtRQUNuQixPQUFPLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3RHLENBQUM7SUFFRCxXQUFXO0lBQ1gsMkJBQTJCLENBQUMsS0FBbUIsRUFBRSxjQUFjLEdBQUcsS0FBSztRQUNyRSxNQUFNLE1BQU0sR0FBNEIsRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztZQUN6QixjQUFjLEVBQUUsc0JBQXNCLEVBQUUsSUFBSTtTQUM3QyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2YsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUM1QixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7b0JBQ2YsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDdEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDNUQ7cUJBQU07b0JBQ0wsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQ3RDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ2hEO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxLQUFtQjtRQUN2QyxNQUFNLE1BQU0sR0FBNEIsRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxFQUFDLHlCQUF5QixFQUFFLElBQUksRUFBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzFFLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDNUIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7YUFDMUI7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxXQUFXO0lBQ1gsZ0JBQWdCLENBQUMsTUFBZ0I7UUFDL0IsTUFBTSxNQUFNLEdBQXdCLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMscUJBQXFCLENBQUM7WUFDekIsY0FBYyxFQUFFLElBQUk7WUFDcEIsc0JBQXNCLEVBQUUsSUFBSTtZQUM1Qix5QkFBeUIsRUFBRSxLQUFLO1NBQ2pDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDZixpREFBaUQ7WUFDakQsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDeEIsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO29CQUNmLDJIQUEySDtvQkFDM0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUNsRSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUM1RDtxQkFBTTtvQkFDTCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDbkMsSUFBSSxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsOERBQThEO3dCQUNqRiw2RUFBNkU7d0JBQzdFLHdGQUF3Rjt3QkFDeEYsMEVBQTBFO3dCQUMxRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFOzRCQUNuQixNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO3lCQUMvQztxQkFDRjt5QkFBTTt3QkFDTCxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUMvQztpQkFDRjthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsdUJBQXVCLENBQUMsTUFBMkI7UUFDakQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1lBQ3RDLGNBQWMsRUFBRSxJQUFJO1lBQ3BCLHNCQUFzQixFQUFFLElBQUk7WUFDNUIseUJBQXlCLEVBQUUsSUFBSTtTQUNoQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ3hCLE9BQU8sRUFBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUMsQ0FBQTtRQUNyQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFUCxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNoQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEdBQUcsa0NBQWtDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBO2FBQy9GO1lBRUQsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQzFFLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxHQUFHLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixVQUFVLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUE7YUFDakk7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxXQUFXLENBQUMsY0FBNkM7UUFDdkQsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxjQUFjLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDNUUsQ0FBQztDQUVGO0FBbExDO0lBREMsT0FBTyxFQUFFOzs7O2dEQUdUO0FBR0Q7SUFEQyxPQUFPLEVBQUU7Ozs7dURBR1Q7QUFpQ0Q7SUFEQyxPQUFPLEVBQUU7OztvQ0FDZ0IsbUJBQW1COzZEQUU1QztBQUdEO0lBREMsT0FBTyxFQUFFOzs7OzREQUdUO0FBR0Q7SUFEQyxPQUFPLEVBQUU7Ozs7NERBWVQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1BhcmFtTWFwfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHthc3NlcnQsIENvbnN0cnVjdGFibGUsIFByZWRpY2F0ZX0gZnJvbSAnQGNvb2xvbi9wZWN0aW4nO1xuaW1wb3J0IHtsYW5nLCBPcHRzfSBmcm9tICdAY29vbG9uL3R5cGVzY3JpcHQtdXRpbGl0aWVzJztcbmltcG9ydCB7TWVtb2l6ZX0gZnJvbSAnQHR5cGVzY3JpcHQtcGx1cy9mYXN0LW1lbW9pemUtZGVjb3JhdG9yJztcblxuaW1wb3J0IHtpc0VtcHR5LCBpc05pbCwgam9pbn0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7ZGlmZmVyZW5jZX0gZnJvbSBcImxvZGFzaC1lc1wiO1xuaW1wb3J0IHtQbGFjZUNvbXBvbmVudH0gZnJvbSAnLi9wbGFjZS1jb21wb25lbnQnO1xuaW1wb3J0IHtQYXJhbWV0ZXJEZWZpbml0aW9ufSBmcm9tICcuL3JvdXRlL3BhcmFtZXRlci1kZWZpbml0aW9uJztcbmltcG9ydCB7VmlzaXRTZWdtZW50fSBmcm9tICcuL3Zpc2l0LXNlZ21lbnQnO1xuXG5leHBvcnQgY2xhc3MgUGxhY2VEZWZpbml0aW9uIHsgLy9pbXBsZW1lbnRzIFZpc2l0YWJsZVRyZWU8UGxhY2VEZWZpbml0aW9uPiAge1xuXG4gIHByaXZhdGUgX3BhcmVudDogUGxhY2VEZWZpbml0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGNvbXBvbmVudDogQ29uc3RydWN0YWJsZTxQbGFjZUNvbXBvbmVudD4sXG4gICAgICAgICAgICAgIHJlYWRvbmx5IHBhdGg6IHN0cmluZyxcbiAgICAgICAgICAgICAgcmVhZG9ubHkgYXV0aGVudGljYXRlOiBib29sZWFuLFxuICAgICAgICAgICAgICByZWFkb25seSByb2xlOiBhbnksXG4gICAgICAgICAgICAgIHJlYWRvbmx5IGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgICAgICAgICAgIHJlYWRvbmx5IHJvdXRlUGFyYW1ldGVyczogUGFyYW1ldGVyRGVmaW5pdGlvbjxhbnk+W10sXG4gICAgICAgICAgICAgIHJlYWRvbmx5IGNoaWxkcmVuOiBQbGFjZURlZmluaXRpb25bXSxcbiAgICAgICAgICAgICAgcmVhZG9ubHkgcmVkaXJlY3RUb0ZpcnN0Q2hpbGQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goaXQgPT4gaXQuc2V0UGFyZW50KHRoaXMpKTtcblxuICB9XG5cbiAgQE1lbW9pemUoKVxuICBhbmNlc3RvcnMoKTogUGxhY2VEZWZpbml0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLnBhcmVudCA/IHRoaXMucGFyZW50LmFuY2VzdG9ycygpLmNvbmNhdChbdGhpcy5wYXJlbnRdKSA6IFtdO1xuICB9XG5cbiAgQE1lbW9pemUoKVxuICBhbmNlc3RvcnNBbmRTZWxmKCk6IFBsYWNlRGVmaW5pdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5hbmNlc3RvcnMoKS5jb25jYXQodGhpcyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0UGFyZW50KHBhcmVudDogUGxhY2VEZWZpbml0aW9uKSB7XG4gICAgYXNzZXJ0LmlzTmlsKHRoaXMuX3BhcmVudCk7XG4gICAgdGhpcy5fcGFyZW50ID0gcGFyZW50O1xuICB9XG5cbiAgZ2V0IHBhcmVudCgpOiBQbGFjZURlZmluaXRpb24ge1xuICAgIHJldHVybiB0aGlzLl9wYXJlbnQ7XG4gIH1cblxuICBpc1Jvb3QoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLl9wYXJlbnRcbiAgfVxuXG4gIGhhc1BhcmVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMucGFyZW50XG4gIH1cblxuICBoYXNDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIWlzRW1wdHkodGhpcy5jaGlsZHJlbik7XG4gIH1cblxuICBmaW5kQ2hpbGQocHJlZGljYXRlOiBQcmVkaWNhdGU8UGxhY2VEZWZpbml0aW9uPik6IFBsYWNlRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uZmluZChwcmVkaWNhdGUpO1xuICB9XG5cblxuICBoYXNSb3V0ZUlkKCkge1xuICAgIHJldHVybiAhIXRoaXMuZ2V0Um91dGVJZFBhcmFtZXRlckRlZigpO1xuICB9XG5cbiAgQE1lbW9pemUoKVxuICBnZXRSb3V0ZUlkUGFyYW1ldGVyRGVmKCk6IFBhcmFtZXRlckRlZmluaXRpb248YW55PiB7XG4gICAgcmV0dXJuIHRoaXMucm91dGVQYXJhbWV0ZXJzLmZpbmQocCA9PiBwLmlzUm91dGVJZCk7XG4gIH1cblxuICBATWVtb2l6ZSgpXG4gIGdldFJvdXRlUGFyYW1ldGVyRGVmcyhpbmNsdWRlUm91dGVJZCA9IGZhbHNlKTogUGFyYW1ldGVyRGVmaW5pdGlvbjxhbnk+W10ge1xuICAgIHJldHVybiB0aGlzLmdldFZpc2l0UGFyYW1ldGVyRGVmcyh7aW5jbHVkZVJvdXRlSWQsIGluY2x1ZGVSb3V0ZVBhcmFtZXRlcnM6IHRydWV9KTtcbiAgfVxuXG4gIEBNZW1vaXplKClcbiAgZ2V0VmlzaXRQYXJhbWV0ZXJEZWZzKGluY2x1ZGU/OiBQbGFjZURlZmluaXRpb24uUGFyYW1ldGVyT3B0aW9ucyk6IFBhcmFtZXRlckRlZmluaXRpb248YW55PltdIHtcbiAgICBjb25zdCBvcHRzID0gT3B0cy5nZXQoaW5jbHVkZSk7XG4gICAgLy8gaW5jbHVkZXNcbiAgICBjb25zdCBpbmNsdWRlUm91dGVJZCA9ICFpbmNsdWRlIHx8IG9wdHMuZ2V0T3B0aW9uYWwoJ2luY2x1ZGVSb3V0ZUlkJywgZmFsc2UpO1xuICAgIGNvbnN0IGluY2x1ZGVSb3V0ZVBhcmFtZXRlcnMgPSAhaW5jbHVkZSB8fCBvcHRzLmdldE9wdGlvbmFsKCdpbmNsdWRlUm91dGVQYXJhbWV0ZXJzJywgZmFsc2UpO1xuICAgIGNvbnN0IGluY2x1ZGVOb25Sb3V0ZVBhcmFtZXRlcnMgPSAhaW5jbHVkZSB8fCBvcHRzLmdldE9wdGlvbmFsKCdpbmNsdWRlTm9uUm91dGVQYXJhbWV0ZXJzJywgZmFsc2UpO1xuICAgIHJldHVybiB0aGlzLnJvdXRlUGFyYW1ldGVycy5maWx0ZXIocCA9PiB7XG4gICAgICByZXR1cm4gKGluY2x1ZGVSb3V0ZUlkICYmIHAuaXNSb3V0ZUlkKVxuICAgICAgICB8fCAoaW5jbHVkZVJvdXRlUGFyYW1ldGVycyAmJiBwLmlzUm91dGVQYXJhbWV0ZXIgJiYgIXAuaXNSb3V0ZUlkKSAvLyByb3V0ZSBpZCBpcyBpbmNsdWRlZCBpbiB0aGUgbGluZSBhYm92ZVxuICAgICAgICB8fCAoaW5jbHVkZU5vblJvdXRlUGFyYW1ldGVycyAmJiAhcC5pc1JvdXRlUGFyYW1ldGVyKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFBsYWNlRGF0YTxUPihrZXk6IHN0cmluZywgZGVmYXVsdFZhbHVlPzogVCk6IFQge1xuICAgIHJldHVybiB0aGlzLmRhdGEgP1xuICAgICAgaXNOaWwodGhpcy5kYXRhW2tleV0pID8gZGVmYXVsdFZhbHVlIDogdGhpcy5kYXRhW2tleV0gOlxuICAgICAgZGVmYXVsdFZhbHVlO1xuICB9XG5cbiAgc2VhcmNoUGxhY2VEYXRhPFQ+KGtleXM6IHN0cmluZ1tdLCBkZWZhdWx0VmFsdWU/OiBUKTogVCB7XG4gICAgaWYgKHRoaXMuZGF0YSkge1xuICAgICAgY29uc3QgZm91bmQgPSBrZXlzLmZpbmQoa2V5ID0+ICFpc05pbCh0aGlzLmRhdGFba2V5XSkpO1xuICAgICAgcmV0dXJuIGZvdW5kID8gdGhpcy5kYXRhW2ZvdW5kXSA6IGRlZmF1bHRWYWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gIH1cblxuICBnZXRSb3V0ZUlkRnJvbSh2aXNpdDogVmlzaXRTZWdtZW50KSB7XG4gICAgY29uc3Qgcm91dGVJZFBhcmFtZXRlckRlZiA9IHRoaXMuZ2V0Um91dGVJZFBhcmFtZXRlckRlZigpO1xuICAgIHJldHVybiByb3V0ZUlkUGFyYW1ldGVyRGVmID8gdmlzaXQuZ2V0UGFyYW1ldGVyVmFsdWUocm91dGVJZFBhcmFtZXRlckRlZikgOiBudWxsO1xuICB9XG5cbiAgZ2V0Rm9ybWF0dGVkUm91dGVJZCh2aXNpdDogVmlzaXRTZWdtZW50KTogYW55IHtcbiAgICAvLyBOb3RlOiBSb3V0ZUlkcyBhcmUgYWx3YXlzIHByZXNlbnQgaW4gdGhlIHVybCBhbmQgYXJlIGp1c3QgZW1wdHkgc3RyaW5ncyB3aGVuIG5vdCBkZWZpbmVkLiAgVGhpcyBpc1xuICAgIC8vIG1hbmRhdGVkIGJ5IHRoZSBmYWN0IHRoYXQgcmVkaXJlY3RzIGZyb20gPHBhdGg+IHRvIDxwYXRoPi86aWQgYWx3YXlzIGluY2x1ZGUgdGhlIGlkIHBhcmFtZXRlciBhc1xuICAgIC8vIGFuIGVtcHR5IHN0cmluZy5cbiAgICByZXR1cm4gdmlzaXQuaGFzUm91dGVJZCgpID8gdGhpcy5nZXRSb3V0ZUlkUGFyYW1ldGVyRGVmKCkudXJsRm9ybWF0LmZvcm1hdCh2aXNpdC5nZXRSb3V0ZUlkKCkpIDogXCJcIjtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIGdldEZvcm1hdHRlZFJvdXRlUGFyYW1ldGVycyh2aXNpdDogVmlzaXRTZWdtZW50LCBpbmNsdWRlUm91dGVJZCA9IGZhbHNlKTogeyBbcDogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIGNvbnN0IHJlc3VsdDogeyBbcDogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICB0aGlzLmdldFZpc2l0UGFyYW1ldGVyRGVmcyh7XG4gICAgICBpbmNsdWRlUm91dGVJZCwgaW5jbHVkZVJvdXRlUGFyYW1ldGVyczogdHJ1ZVxuICAgIH0pLmZvckVhY2goZGVmID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdmlzaXQuZ2V0UGFyYW1ldGVyVmFsdWUoZGVmKTtcbiAgICAgIGlmICghZGVmLmlzRW1wdHlWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKGRlZi5pc0FycmF5KSB7XG4gICAgICAgICAgYXNzZXJ0LmlzQXJyYXkodmFsdWUpO1xuICAgICAgICAgIHJlc3VsdFtkZWYubmFtZV0gPSB2YWx1ZS5tYXAodiA9PiBkZWYudXJsRm9ybWF0LmZvcm1hdCh2KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXNzZXJ0LmlzRmFsc2V5KEFycmF5LmlzQXJyYXkodmFsdWUpKTtcbiAgICAgICAgICByZXN1bHRbZGVmLm5hbWVdID0gZGVmLnVybEZvcm1hdC5mb3JtYXQodmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGdldE5vblJvdXRlUGFyYW1ldGVycyh2aXNpdDogVmlzaXRTZWdtZW50KTogeyBbcDogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIGNvbnN0IHJlc3VsdDogeyBbcDogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICB0aGlzLmdldFZpc2l0UGFyYW1ldGVyRGVmcyh7aW5jbHVkZU5vblJvdXRlUGFyYW1ldGVyczogdHJ1ZX0pLmZvckVhY2goZGVmID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdmlzaXQuZ2V0UGFyYW1ldGVyVmFsdWUoZGVmKTtcbiAgICAgIGlmICghZGVmLmlzRW1wdHlWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0W2RlZi5uYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBwYXJzZVJvdXRlUGFyYW1zKHBhcmFtczogUGFyYW1NYXApOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICB0aGlzLmdldFZpc2l0UGFyYW1ldGVyRGVmcyh7XG4gICAgICBpbmNsdWRlUm91dGVJZDogdHJ1ZSxcbiAgICAgIGluY2x1ZGVSb3V0ZVBhcmFtZXRlcnM6IHRydWUsXG4gICAgICBpbmNsdWRlTm9uUm91dGVQYXJhbWV0ZXJzOiBmYWxzZVxuICAgIH0pLmZvckVhY2goZGVmID0+IHtcbiAgICAgIC8vIHBhcmFtcyB3aWxsIHJldHVybiBudWxsIGZvciBub24gZXhpc3RlbnQgbmFtZXNcbiAgICAgIGlmIChwYXJhbXMuaGFzKGRlZi5uYW1lKSkge1xuICAgICAgICBpZiAoZGVmLmlzQXJyYXkpIHtcbiAgICAgICAgICAvLyBjb25zdCB2YWx1ZXMgPSBwYXJhbXMuZ2V0QWxsKGRlZi5uYW1lKTsgLy8gVE9ETzogRUVFSyBnZXRBbGwgaXMgcmV0dXJuaW5nIFtcIjEsMiwzLDRcIl0gd2hlbiB3ZSBnYXZlIGl0IFtcIjFcIixcIjJcIixcIjNcIixcIjRcIl0uXG4gICAgICAgICAgY29uc3QgdmFsdWVzID0gcGFyYW1zLmdldChkZWYubmFtZSkuc3BsaXQoJywnKS5tYXAocyA9PiBzLnRyaW0oKSk7XG4gICAgICAgICAgcmVzdWx0W2RlZi5uYW1lXSA9IHZhbHVlcy5tYXAodiA9PiBkZWYudXJsRm9ybWF0LnBhcnNlKHYpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBhcmFtcy5nZXQoZGVmLm5hbWUpO1xuICAgICAgICAgIGlmIChkZWYuaXNSb3V0ZUlkKSB7IC8vIFRPRE86IE1vdmUgdGhpcyB0byBwYXJhbWV0ZXIgZGVmIHNvIGl0J3MgYSBzdHJhdGVneSBwYXR0ZXJuXG4gICAgICAgICAgICAvLyBiZWNhdXNlIG91ciBpZCByb3V0ZXMgcmVkaXJlY3QgaWYgdGhlIGlkIGlzbid0IHByZXNlbnQgd2UgYWx3YXlzIGhhdmUgYSBpZFxuICAgICAgICAgICAgLy8gcGFyYW1ldGVyIGluIG91ciBwYXJhbXMuICBUaGlzIHdpbGwgYnVnZ2VyIG91ciByZW1lbWJlciBhbmQgZGVmYXVsdHZhbHVlIHNhbml0aXNhdGlvblxuICAgICAgICAgICAgLy8gYXMgaXQnbGwgc2VlIHRoYXQgdGhlIGlkIGlzIHByZXNlbnQgKGV2ZW50IHRob3VnaHQgaXRzIGEgYmxhbmsgc3RyaW5nKS5cbiAgICAgICAgICAgIGlmICghaXNFbXB0eSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgcmVzdWx0W2RlZi5uYW1lXSA9IGRlZi51cmxGb3JtYXQucGFyc2UodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHRbZGVmLm5hbWVdID0gZGVmLnVybEZvcm1hdC5wYXJzZSh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhbGlkYXRlUm91dGVQYXJhbWV0ZXJzKHBhcmFtczogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgIGNvbnN0IGRlZnMgPSB0aGlzLmdldFZpc2l0UGFyYW1ldGVyRGVmcyh7XG4gICAgICBpbmNsdWRlUm91dGVJZDogdHJ1ZSxcbiAgICAgIGluY2x1ZGVSb3V0ZVBhcmFtZXRlcnM6IHRydWUsXG4gICAgICBpbmNsdWRlTm9uUm91dGVQYXJhbWV0ZXJzOiB0cnVlXG4gICAgfSkucmVkdWNlKChyZXN1bHQsIGRlZikgPT4ge1xuICAgICAgcmV0dXJuIHsuLi5yZXN1bHQsIFtkZWYubmFtZV06IGRlZn1cbiAgICB9LCB7fSk7XG5cbiAgICBPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlckRlZiA9IGRlZnNba2V5XTtcbiAgICAgIGlmICghcGFyYW1ldGVyRGVmKSB7XG4gICAgICAgIGxhbmcuaWxsZWdhbFN0YXRlKGBQYXJhbWV0ZXIgJHtrZXl9IGlzIG5vdCB2YWxpZC4gIE11c3QgYmUgb25lIG9mICR7am9pbihPYmplY3Qua2V5cyhkZWZzKSl9YClcbiAgICAgIH1cblxuICAgICAgaWYgKCEhcGFyYW1zW2tleV0gJiYgKEFycmF5LmlzQXJyYXkocGFyYW1zW2tleV0pICE9PSBwYXJhbWV0ZXJEZWYuaXNBcnJheSkpIHtcbiAgICAgICAgbGFuZy5pbGxlZ2FsU3RhdGUoYFBhcmFtZXRlciAke2tleX0gJHtwYXJhbWV0ZXJEZWYuaXNBcnJheSA/IFwibXVzdCBiZSBhbiBhcnJheVwiIDogXCJtdXN0IG5vdCBiZSBhbiBhcnJheVwifS4gIEdvdCAke3BhcmFtc1trZXldfWApXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGhhc0FuY2VzdG9yKHBsYWNlQ29tcG9uZW50OiBDb25zdHJ1Y3RhYmxlPFBsYWNlQ29tcG9uZW50Pikge1xuICAgIHJldHVybiB0aGlzLmFuY2VzdG9ycygpLmZpbmQoYSA9PiBhLmNvbXBvbmVudCA9PT0gcGxhY2VDb21wb25lbnQpICE9IG51bGw7XG4gIH1cblxufVxuXG5leHBvcnQgbmFtZXNwYWNlIFBsYWNlRGVmaW5pdGlvbiB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgUGFyYW1ldGVyT3B0aW9ucyB7XG4gICAgaW5jbHVkZVJvdXRlSWQ/OiBib29sZWFuO1xuICAgIGluY2x1ZGVSb3V0ZVBhcmFtZXRlcnM/OiBib29sZWFuO1xuICAgIGluY2x1ZGVOb25Sb3V0ZVBhcmFtZXRlcnM/OiBib29sZWFuO1xuICB9XG59XG4iXX0=
213
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2UtZGVmaW5pdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci11aS1wb3dlcnVwcy9zcmMvbGliL3BsYWNlL3BsYWNlLWRlZmluaXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUNBLE9BQU8sRUFBQyxNQUFNLEVBQTJCLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEUsT0FBTyxFQUFDLElBQUksRUFBRSxJQUFJLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RCxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFFaEQsT0FBTyxFQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRS9DLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBR2pFLE1BQU0sT0FBTyxlQUFlO0lBSUw7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQVRiLE9BQU8sQ0FBa0I7SUFFakMsWUFBcUIsU0FBd0MsRUFDeEMsSUFBWSxFQUNaLFlBQXFCLEVBQ3JCLElBQVMsRUFDVCxJQUF5QixFQUN6QixlQUEyQyxFQUMzQyxRQUEyQixFQUMzQixvQkFBNkI7UUFQN0IsY0FBUyxHQUFULFNBQVMsQ0FBK0I7UUFDeEMsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUNaLGlCQUFZLEdBQVosWUFBWSxDQUFTO1FBQ3JCLFNBQUksR0FBSixJQUFJLENBQUs7UUFDVCxTQUFJLEdBQUosSUFBSSxDQUFxQjtRQUN6QixvQkFBZSxHQUFmLGVBQWUsQ0FBNEI7UUFDM0MsYUFBUSxHQUFSLFFBQVEsQ0FBbUI7UUFDM0IseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFTO1FBQ2hELElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBRWxELENBQUM7SUFHRCxTQUFTO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDMUUsQ0FBQztJQUdELGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRVMsU0FBUyxDQUFDLE1BQXVCO1FBQ3pDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELE1BQU07UUFDSixPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQTtJQUN0QixDQUFDO0lBRUQsU0FBUztRQUNQLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFBO0lBQ3JCLENBQUM7SUFFRCxXQUFXO1FBQ1QsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELFNBQVMsQ0FBQyxTQUFxQztRQUM3QyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFHRCxVQUFVO1FBQ1IsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDekMsQ0FBQztJQUdELHNCQUFzQjtRQUNwQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFHRCxxQkFBcUIsQ0FBQyxjQUFjLEdBQUcsS0FBSztRQUMxQyxPQUFPLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxFQUFDLGNBQWMsRUFBRSxzQkFBc0IsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFHRCxxQkFBcUIsQ0FBQyxPQUEwQztRQUM5RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9CLFdBQVc7UUFDWCxNQUFNLGNBQWMsR0FBRyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzdFLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyx3QkFBd0IsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM3RixNQUFNLHlCQUF5QixHQUFHLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsMkJBQTJCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkcsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNyQyxPQUFPLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUM7bUJBQ2pDLENBQUMsc0JBQXNCLElBQUksQ0FBQyxDQUFDLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLHlDQUF5QzttQkFDeEcsQ0FBQyx5QkFBeUIsSUFBSSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzFELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFlBQVksQ0FBSSxHQUFXLEVBQUUsWUFBZ0I7UUFDM0MsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEIsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdkQsWUFBWSxDQUFDO0lBQ2pCLENBQUM7SUFFRCxlQUFlLENBQUksSUFBYyxFQUFFLFlBQWdCO1FBQ2pELElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUNiLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2RCxPQUFPLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO1NBQ2hEO2FBQU07WUFDTCxPQUFPLFlBQVksQ0FBQztTQUNyQjtJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsS0FBbUI7UUFDaEMsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUMxRCxPQUFPLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ25GLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxLQUFtQjtRQUNyQyxxR0FBcUc7UUFDckcsbUdBQW1HO1FBQ25HLG1CQUFtQjtRQUNuQixPQUFPLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3RHLENBQUM7SUFFRCxXQUFXO0lBQ1gsMkJBQTJCLENBQUMsS0FBbUIsRUFBRSxjQUFjLEdBQUcsS0FBSztRQUNyRSxNQUFNLE1BQU0sR0FBNEIsRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztZQUN6QixjQUFjLEVBQUUsc0JBQXNCLEVBQUUsSUFBSTtTQUM3QyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2YsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUM1QixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUU7b0JBQ2YsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDdEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDNUQ7cUJBQU07b0JBQ0wsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7b0JBQ3RDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQ2hEO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxLQUFtQjtRQUN2QyxNQUFNLE1BQU0sR0FBNEIsRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxFQUFDLHlCQUF5QixFQUFFLElBQUksRUFBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzFFLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDNUIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7YUFDMUI7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxXQUFXO0lBQ1gsZ0JBQWdCLENBQUMsTUFBZ0I7UUFDL0IsTUFBTSxNQUFNLEdBQXdCLEVBQUUsQ0FBQztRQUN2QyxJQUFJLENBQUMscUJBQXFCLENBQUM7WUFDekIsY0FBYyxFQUFFLElBQUk7WUFDcEIsc0JBQXNCLEVBQUUsSUFBSTtZQUM1Qix5QkFBeUIsRUFBRSxLQUFLO1NBQ2pDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDZixpREFBaUQ7WUFDakQsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDeEIsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO29CQUNmLDJIQUEySDtvQkFDM0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO29CQUNsRSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUM1RDtxQkFBTTtvQkFDTCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDbkMsSUFBSSxHQUFHLENBQUMsU0FBUyxFQUFFLEVBQUUsOERBQThEO3dCQUNqRiw2RUFBNkU7d0JBQzdFLHdGQUF3Rjt3QkFDeEYsMEVBQTBFO3dCQUMxRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFOzRCQUNuQixNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO3lCQUMvQztxQkFDRjt5QkFBTTt3QkFDTCxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUMvQztpQkFDRjthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsdUJBQXVCLENBQUMsTUFBMkI7UUFDakQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1lBQ3RDLGNBQWMsRUFBRSxJQUFJO1lBQ3BCLHNCQUFzQixFQUFFLElBQUk7WUFDNUIseUJBQXlCLEVBQUUsSUFBSTtTQUNoQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ3hCLE9BQU8sRUFBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUMsQ0FBQTtRQUNyQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFUCxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNoQyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEdBQUcsa0NBQWtDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBO2FBQy9GO1lBRUQsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQzFFLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxHQUFHLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixVQUFVLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUE7YUFDakk7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxXQUFXLENBQUMsY0FBNkM7UUFDdkQsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxjQUFjLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDNUUsQ0FBQztDQUVGO0FBbExDO0lBREMsT0FBTyxFQUFFOzs7O2dEQUdUO0FBR0Q7SUFEQyxPQUFPLEVBQUU7Ozs7dURBR1Q7QUFpQ0Q7SUFEQyxPQUFPLEVBQUU7OztvQ0FDZ0IsbUJBQW1COzZEQUU1QztBQUdEO0lBREMsT0FBTyxFQUFFOzs7OzREQUdUO0FBR0Q7SUFEQyxPQUFPLEVBQUU7Ozs7NERBWVQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1BhcmFtTWFwfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHthc3NlcnQsIENvbnN0cnVjdGFibGUsIFByZWRpY2F0ZX0gZnJvbSAnQGNvb2xvbi9wZWN0aW4nO1xuaW1wb3J0IHtsYW5nLCBPcHRzfSBmcm9tICdAY29vbG9uL3R5cGVzY3JpcHQtdXRpbGl0aWVzJztcbmltcG9ydCB7TWVtb2l6ZX0gZnJvbSAnZmFzdC10eXBlc2NyaXB0LW1lbW9pemUnO1xuXG5pbXBvcnQge2lzRW1wdHksIGlzTmlsLCBqb2lufSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtQbGFjZUNvbXBvbmVudH0gZnJvbSAnLi9wbGFjZS1jb21wb25lbnQnO1xuaW1wb3J0IHtQYXJhbWV0ZXJEZWZpbml0aW9ufSBmcm9tICcuL3JvdXRlL3BhcmFtZXRlci1kZWZpbml0aW9uJztcbmltcG9ydCB7VmlzaXRTZWdtZW50fSBmcm9tICcuL3Zpc2l0LXNlZ21lbnQnO1xuXG5leHBvcnQgY2xhc3MgUGxhY2VEZWZpbml0aW9uIHsgLy9pbXBsZW1lbnRzIFZpc2l0YWJsZVRyZWU8UGxhY2VEZWZpbml0aW9uPiAge1xuXG4gIHByaXZhdGUgX3BhcmVudDogUGxhY2VEZWZpbml0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGNvbXBvbmVudDogQ29uc3RydWN0YWJsZTxQbGFjZUNvbXBvbmVudD4sXG4gICAgICAgICAgICAgIHJlYWRvbmx5IHBhdGg6IHN0cmluZyxcbiAgICAgICAgICAgICAgcmVhZG9ubHkgYXV0aGVudGljYXRlOiBib29sZWFuLFxuICAgICAgICAgICAgICByZWFkb25seSByb2xlOiBhbnksXG4gICAgICAgICAgICAgIHJlYWRvbmx5IGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgICAgICAgICAgIHJlYWRvbmx5IHJvdXRlUGFyYW1ldGVyczogUGFyYW1ldGVyRGVmaW5pdGlvbjxhbnk+W10sXG4gICAgICAgICAgICAgIHJlYWRvbmx5IGNoaWxkcmVuOiBQbGFjZURlZmluaXRpb25bXSxcbiAgICAgICAgICAgICAgcmVhZG9ubHkgcmVkaXJlY3RUb0ZpcnN0Q2hpbGQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goaXQgPT4gaXQuc2V0UGFyZW50KHRoaXMpKTtcblxuICB9XG5cbiAgQE1lbW9pemUoKVxuICBhbmNlc3RvcnMoKTogUGxhY2VEZWZpbml0aW9uW10ge1xuICAgIHJldHVybiB0aGlzLnBhcmVudCA/IHRoaXMucGFyZW50LmFuY2VzdG9ycygpLmNvbmNhdChbdGhpcy5wYXJlbnRdKSA6IFtdO1xuICB9XG5cbiAgQE1lbW9pemUoKVxuICBhbmNlc3RvcnNBbmRTZWxmKCk6IFBsYWNlRGVmaW5pdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5hbmNlc3RvcnMoKS5jb25jYXQodGhpcyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0UGFyZW50KHBhcmVudDogUGxhY2VEZWZpbml0aW9uKSB7XG4gICAgYXNzZXJ0LmlzTmlsKHRoaXMuX3BhcmVudCk7XG4gICAgdGhpcy5fcGFyZW50ID0gcGFyZW50O1xuICB9XG5cbiAgZ2V0IHBhcmVudCgpOiBQbGFjZURlZmluaXRpb24ge1xuICAgIHJldHVybiB0aGlzLl9wYXJlbnQ7XG4gIH1cblxuICBpc1Jvb3QoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLl9wYXJlbnRcbiAgfVxuXG4gIGhhc1BhcmVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMucGFyZW50XG4gIH1cblxuICBoYXNDaGlsZHJlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIWlzRW1wdHkodGhpcy5jaGlsZHJlbik7XG4gIH1cblxuICBmaW5kQ2hpbGQocHJlZGljYXRlOiBQcmVkaWNhdGU8UGxhY2VEZWZpbml0aW9uPik6IFBsYWNlRGVmaW5pdGlvbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY2hpbGRyZW4uZmluZChwcmVkaWNhdGUpO1xuICB9XG5cblxuICBoYXNSb3V0ZUlkKCkge1xuICAgIHJldHVybiAhIXRoaXMuZ2V0Um91dGVJZFBhcmFtZXRlckRlZigpO1xuICB9XG5cbiAgQE1lbW9pemUoKVxuICBnZXRSb3V0ZUlkUGFyYW1ldGVyRGVmKCk6IFBhcmFtZXRlckRlZmluaXRpb248YW55PiB7XG4gICAgcmV0dXJuIHRoaXMucm91dGVQYXJhbWV0ZXJzLmZpbmQocCA9PiBwLmlzUm91dGVJZCk7XG4gIH1cblxuICBATWVtb2l6ZSgpXG4gIGdldFJvdXRlUGFyYW1ldGVyRGVmcyhpbmNsdWRlUm91dGVJZCA9IGZhbHNlKTogUGFyYW1ldGVyRGVmaW5pdGlvbjxhbnk+W10ge1xuICAgIHJldHVybiB0aGlzLmdldFZpc2l0UGFyYW1ldGVyRGVmcyh7aW5jbHVkZVJvdXRlSWQsIGluY2x1ZGVSb3V0ZVBhcmFtZXRlcnM6IHRydWV9KTtcbiAgfVxuXG4gIEBNZW1vaXplKClcbiAgZ2V0VmlzaXRQYXJhbWV0ZXJEZWZzKGluY2x1ZGU/OiBQbGFjZURlZmluaXRpb24uUGFyYW1ldGVyT3B0aW9ucyk6IFBhcmFtZXRlckRlZmluaXRpb248YW55PltdIHtcbiAgICBjb25zdCBvcHRzID0gT3B0cy5nZXQoaW5jbHVkZSk7XG4gICAgLy8gaW5jbHVkZXNcbiAgICBjb25zdCBpbmNsdWRlUm91dGVJZCA9ICFpbmNsdWRlIHx8IG9wdHMuZ2V0T3B0aW9uYWwoJ2luY2x1ZGVSb3V0ZUlkJywgZmFsc2UpO1xuICAgIGNvbnN0IGluY2x1ZGVSb3V0ZVBhcmFtZXRlcnMgPSAhaW5jbHVkZSB8fCBvcHRzLmdldE9wdGlvbmFsKCdpbmNsdWRlUm91dGVQYXJhbWV0ZXJzJywgZmFsc2UpO1xuICAgIGNvbnN0IGluY2x1ZGVOb25Sb3V0ZVBhcmFtZXRlcnMgPSAhaW5jbHVkZSB8fCBvcHRzLmdldE9wdGlvbmFsKCdpbmNsdWRlTm9uUm91dGVQYXJhbWV0ZXJzJywgZmFsc2UpO1xuICAgIHJldHVybiB0aGlzLnJvdXRlUGFyYW1ldGVycy5maWx0ZXIocCA9PiB7XG4gICAgICByZXR1cm4gKGluY2x1ZGVSb3V0ZUlkICYmIHAuaXNSb3V0ZUlkKVxuICAgICAgICB8fCAoaW5jbHVkZVJvdXRlUGFyYW1ldGVycyAmJiBwLmlzUm91dGVQYXJhbWV0ZXIgJiYgIXAuaXNSb3V0ZUlkKSAvLyByb3V0ZSBpZCBpcyBpbmNsdWRlZCBpbiB0aGUgbGluZSBhYm92ZVxuICAgICAgICB8fCAoaW5jbHVkZU5vblJvdXRlUGFyYW1ldGVycyAmJiAhcC5pc1JvdXRlUGFyYW1ldGVyKTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFBsYWNlRGF0YTxUPihrZXk6IHN0cmluZywgZGVmYXVsdFZhbHVlPzogVCk6IFQge1xuICAgIHJldHVybiB0aGlzLmRhdGEgP1xuICAgICAgaXNOaWwodGhpcy5kYXRhW2tleV0pID8gZGVmYXVsdFZhbHVlIDogdGhpcy5kYXRhW2tleV0gOlxuICAgICAgZGVmYXVsdFZhbHVlO1xuICB9XG5cbiAgc2VhcmNoUGxhY2VEYXRhPFQ+KGtleXM6IHN0cmluZ1tdLCBkZWZhdWx0VmFsdWU/OiBUKTogVCB7XG4gICAgaWYgKHRoaXMuZGF0YSkge1xuICAgICAgY29uc3QgZm91bmQgPSBrZXlzLmZpbmQoa2V5ID0+ICFpc05pbCh0aGlzLmRhdGFba2V5XSkpO1xuICAgICAgcmV0dXJuIGZvdW5kID8gdGhpcy5kYXRhW2ZvdW5kXSA6IGRlZmF1bHRWYWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gIH1cblxuICBnZXRSb3V0ZUlkRnJvbSh2aXNpdDogVmlzaXRTZWdtZW50KSB7XG4gICAgY29uc3Qgcm91dGVJZFBhcmFtZXRlckRlZiA9IHRoaXMuZ2V0Um91dGVJZFBhcmFtZXRlckRlZigpO1xuICAgIHJldHVybiByb3V0ZUlkUGFyYW1ldGVyRGVmID8gdmlzaXQuZ2V0UGFyYW1ldGVyVmFsdWUocm91dGVJZFBhcmFtZXRlckRlZikgOiBudWxsO1xuICB9XG5cbiAgZ2V0Rm9ybWF0dGVkUm91dGVJZCh2aXNpdDogVmlzaXRTZWdtZW50KTogYW55IHtcbiAgICAvLyBOb3RlOiBSb3V0ZUlkcyBhcmUgYWx3YXlzIHByZXNlbnQgaW4gdGhlIHVybCBhbmQgYXJlIGp1c3QgZW1wdHkgc3RyaW5ncyB3aGVuIG5vdCBkZWZpbmVkLiAgVGhpcyBpc1xuICAgIC8vIG1hbmRhdGVkIGJ5IHRoZSBmYWN0IHRoYXQgcmVkaXJlY3RzIGZyb20gPHBhdGg+IHRvIDxwYXRoPi86aWQgYWx3YXlzIGluY2x1ZGUgdGhlIGlkIHBhcmFtZXRlciBhc1xuICAgIC8vIGFuIGVtcHR5IHN0cmluZy5cbiAgICByZXR1cm4gdmlzaXQuaGFzUm91dGVJZCgpID8gdGhpcy5nZXRSb3V0ZUlkUGFyYW1ldGVyRGVmKCkudXJsRm9ybWF0LmZvcm1hdCh2aXNpdC5nZXRSb3V0ZUlkKCkpIDogXCJcIjtcbiAgfVxuXG4gIC8vIEBUcmFjZSgpXG4gIGdldEZvcm1hdHRlZFJvdXRlUGFyYW1ldGVycyh2aXNpdDogVmlzaXRTZWdtZW50LCBpbmNsdWRlUm91dGVJZCA9IGZhbHNlKTogeyBbcDogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIGNvbnN0IHJlc3VsdDogeyBbcDogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICB0aGlzLmdldFZpc2l0UGFyYW1ldGVyRGVmcyh7XG4gICAgICBpbmNsdWRlUm91dGVJZCwgaW5jbHVkZVJvdXRlUGFyYW1ldGVyczogdHJ1ZVxuICAgIH0pLmZvckVhY2goZGVmID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdmlzaXQuZ2V0UGFyYW1ldGVyVmFsdWUoZGVmKTtcbiAgICAgIGlmICghZGVmLmlzRW1wdHlWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgICAgaWYgKGRlZi5pc0FycmF5KSB7XG4gICAgICAgICAgYXNzZXJ0LmlzQXJyYXkodmFsdWUpO1xuICAgICAgICAgIHJlc3VsdFtkZWYubmFtZV0gPSB2YWx1ZS5tYXAodiA9PiBkZWYudXJsRm9ybWF0LmZvcm1hdCh2KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXNzZXJ0LmlzRmFsc2V5KEFycmF5LmlzQXJyYXkodmFsdWUpKTtcbiAgICAgICAgICByZXN1bHRbZGVmLm5hbWVdID0gZGVmLnVybEZvcm1hdC5mb3JtYXQodmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGdldE5vblJvdXRlUGFyYW1ldGVycyh2aXNpdDogVmlzaXRTZWdtZW50KTogeyBbcDogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIGNvbnN0IHJlc3VsdDogeyBbcDogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICB0aGlzLmdldFZpc2l0UGFyYW1ldGVyRGVmcyh7aW5jbHVkZU5vblJvdXRlUGFyYW1ldGVyczogdHJ1ZX0pLmZvckVhY2goZGVmID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdmlzaXQuZ2V0UGFyYW1ldGVyVmFsdWUoZGVmKTtcbiAgICAgIGlmICghZGVmLmlzRW1wdHlWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0W2RlZi5uYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBAVHJhY2UoKVxuICBwYXJzZVJvdXRlUGFyYW1zKHBhcmFtczogUGFyYW1NYXApOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgICBjb25zdCByZXN1bHQ6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICB0aGlzLmdldFZpc2l0UGFyYW1ldGVyRGVmcyh7XG4gICAgICBpbmNsdWRlUm91dGVJZDogdHJ1ZSxcbiAgICAgIGluY2x1ZGVSb3V0ZVBhcmFtZXRlcnM6IHRydWUsXG4gICAgICBpbmNsdWRlTm9uUm91dGVQYXJhbWV0ZXJzOiBmYWxzZVxuICAgIH0pLmZvckVhY2goZGVmID0+IHtcbiAgICAgIC8vIHBhcmFtcyB3aWxsIHJldHVybiBudWxsIGZvciBub24gZXhpc3RlbnQgbmFtZXNcbiAgICAgIGlmIChwYXJhbXMuaGFzKGRlZi5uYW1lKSkge1xuICAgICAgICBpZiAoZGVmLmlzQXJyYXkpIHtcbiAgICAgICAgICAvLyBjb25zdCB2YWx1ZXMgPSBwYXJhbXMuZ2V0QWxsKGRlZi5uYW1lKTsgLy8gVE9ETzogRUVFSyBnZXRBbGwgaXMgcmV0dXJuaW5nIFtcIjEsMiwzLDRcIl0gd2hlbiB3ZSBnYXZlIGl0IFtcIjFcIixcIjJcIixcIjNcIixcIjRcIl0uXG4gICAgICAgICAgY29uc3QgdmFsdWVzID0gcGFyYW1zLmdldChkZWYubmFtZSkuc3BsaXQoJywnKS5tYXAocyA9PiBzLnRyaW0oKSk7XG4gICAgICAgICAgcmVzdWx0W2RlZi5uYW1lXSA9IHZhbHVlcy5tYXAodiA9PiBkZWYudXJsRm9ybWF0LnBhcnNlKHYpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBhcmFtcy5nZXQoZGVmLm5hbWUpO1xuICAgICAgICAgIGlmIChkZWYuaXNSb3V0ZUlkKSB7IC8vIFRPRE86IE1vdmUgdGhpcyB0byBwYXJhbWV0ZXIgZGVmIHNvIGl0J3MgYSBzdHJhdGVneSBwYXR0ZXJuXG4gICAgICAgICAgICAvLyBiZWNhdXNlIG91ciBpZCByb3V0ZXMgcmVkaXJlY3QgaWYgdGhlIGlkIGlzbid0IHByZXNlbnQgd2UgYWx3YXlzIGhhdmUgYSBpZFxuICAgICAgICAgICAgLy8gcGFyYW1ldGVyIGluIG91ciBwYXJhbXMuICBUaGlzIHdpbGwgYnVnZ2VyIG91ciByZW1lbWJlciBhbmQgZGVmYXVsdHZhbHVlIHNhbml0aXNhdGlvblxuICAgICAgICAgICAgLy8gYXMgaXQnbGwgc2VlIHRoYXQgdGhlIGlkIGlzIHByZXNlbnQgKGV2ZW50IHRob3VnaHQgaXRzIGEgYmxhbmsgc3RyaW5nKS5cbiAgICAgICAgICAgIGlmICghaXNFbXB0eSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgcmVzdWx0W2RlZi5uYW1lXSA9IGRlZi51cmxGb3JtYXQucGFyc2UodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHRbZGVmLm5hbWVdID0gZGVmLnVybEZvcm1hdC5wYXJzZSh2YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhbGlkYXRlUm91dGVQYXJhbWV0ZXJzKHBhcmFtczogUmVjb3JkPHN0cmluZywgYW55Pikge1xuICAgIGNvbnN0IGRlZnMgPSB0aGlzLmdldFZpc2l0UGFyYW1ldGVyRGVmcyh7XG4gICAgICBpbmNsdWRlUm91dGVJZDogdHJ1ZSxcbiAgICAgIGluY2x1ZGVSb3V0ZVBhcmFtZXRlcnM6IHRydWUsXG4gICAgICBpbmNsdWRlTm9uUm91dGVQYXJhbWV0ZXJzOiB0cnVlXG4gICAgfSkucmVkdWNlKChyZXN1bHQsIGRlZikgPT4ge1xuICAgICAgcmV0dXJuIHsuLi5yZXN1bHQsIFtkZWYubmFtZV06IGRlZn1cbiAgICB9LCB7fSk7XG5cbiAgICBPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGNvbnN0IHBhcmFtZXRlckRlZiA9IGRlZnNba2V5XTtcbiAgICAgIGlmICghcGFyYW1ldGVyRGVmKSB7XG4gICAgICAgIGxhbmcuaWxsZWdhbFN0YXRlKGBQYXJhbWV0ZXIgJHtrZXl9IGlzIG5vdCB2YWxpZC4gIE11c3QgYmUgb25lIG9mICR7am9pbihPYmplY3Qua2V5cyhkZWZzKSl9YClcbiAgICAgIH1cblxuICAgICAgaWYgKCEhcGFyYW1zW2tleV0gJiYgKEFycmF5LmlzQXJyYXkocGFyYW1zW2tleV0pICE9PSBwYXJhbWV0ZXJEZWYuaXNBcnJheSkpIHtcbiAgICAgICAgbGFuZy5pbGxlZ2FsU3RhdGUoYFBhcmFtZXRlciAke2tleX0gJHtwYXJhbWV0ZXJEZWYuaXNBcnJheSA/IFwibXVzdCBiZSBhbiBhcnJheVwiIDogXCJtdXN0IG5vdCBiZSBhbiBhcnJheVwifS4gIEdvdCAke3BhcmFtc1trZXldfWApXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGhhc0FuY2VzdG9yKHBsYWNlQ29tcG9uZW50OiBDb25zdHJ1Y3RhYmxlPFBsYWNlQ29tcG9uZW50Pikge1xuICAgIHJldHVybiB0aGlzLmFuY2VzdG9ycygpLmZpbmQoYSA9PiBhLmNvbXBvbmVudCA9PT0gcGxhY2VDb21wb25lbnQpICE9IG51bGw7XG4gIH1cblxufVxuXG5leHBvcnQgbmFtZXNwYWNlIFBsYWNlRGVmaW5pdGlvbiB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgUGFyYW1ldGVyT3B0aW9ucyB7XG4gICAgaW5jbHVkZVJvdXRlSWQ/OiBib29sZWFuO1xuICAgIGluY2x1ZGVSb3V0ZVBhcmFtZXRlcnM/OiBib29sZWFuO1xuICAgIGluY2x1ZGVOb25Sb3V0ZVBhcmFtZXRlcnM/OiBib29sZWFuO1xuICB9XG59XG4iXX0=
@@ -1,6 +1,6 @@
1
1
  import { Injectable } from '@angular/core';
2
2
  import { assert } from '@coolon/pectin';
3
- import { first } from 'lodash';
3
+ import { first } from 'lodash-es';
4
4
  import * as i0 from "@angular/core";
5
5
  /**
6
6
  * TODO: this should be updated to store the last x visists rathern than a map of places to visit segments.
@@ -12,8 +12,6 @@ export class PlaceHistory {
12
12
  _previousVisits;
13
13
  _archive = new Map();
14
14
  placeHistoryDepth = 4;
15
- constructor() {
16
- }
17
15
  notifyNavigationStarted() {
18
16
  if (this._activeSegments) {
19
17
  this.archiveSegments(this._activeSegments.visitSegments);
@@ -62,7 +60,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
62
60
  args: [{
63
61
  providedIn: 'root'
64
62
  }]
65
- }], ctorParameters: function () { return []; } });
63
+ }] });
66
64
  (function (PlaceHistory) {
67
65
  class VisitRecord {
68
66
  visitSegments;
@@ -145,4 +143,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.9", ngImpor
145
143
  //
146
144
  // }
147
145
  })(PlaceHistory || (PlaceHistory = {}));
148
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2UtaGlzdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci11aS1wb3dlcnVwcy9zcmMvbGliL3BsYWNlL3BsYWNlLWhpc3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsTUFBTSxFQUFRLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFFBQVEsQ0FBQzs7QUFLN0I7Ozs7R0FJRztBQUlILE1BQU0sT0FBTyxZQUFZO0lBRWYsZUFBZSxDQUEyQjtJQUMxQyxlQUFlLENBQTJCO0lBRTFDLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBbUMsQ0FBQztJQUM3QyxpQkFBaUIsR0FBVyxDQUFDLENBQUM7SUFFL0M7SUFDQSxDQUFDO0lBRUQsdUJBQXVCO1FBQ3JCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN4QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1NBQzdDO0lBQ0gsQ0FBQztJQUVELHdCQUF3QixDQUFDLE1BQWE7UUFDcEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLFlBQVksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ3RFLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxLQUFtQjtRQUNwQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsUUFBeUI7UUFDekMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELDRCQUE0QixDQUFDLFFBQXlCO1FBQ3BELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxRQUF5QjtRQUM1QyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1osT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ3BDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVPLFVBQVUsQ0FBQyxRQUF5QixFQUFFLE9BQXVCO1FBQ25FLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRVMsZUFBZSxDQUFDLE1BQXNCO1FBQzlDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDckIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNqRSxNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLGFBQWEsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxFQUFFO2dCQUN6RCxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTztnQkFDL0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7YUFDbEY7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7dUdBekRVLFlBQVk7MkdBQVosWUFBWSxjQUZYLE1BQU07OzJGQUVQLFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COztBQStERCxXQUFpQixZQUFZO0lBRTNCLE1BQWEsV0FBVztRQUNIO1FBQW5CLFlBQW1CLGFBQTZCO1lBQTdCLGtCQUFhLEdBQWIsYUFBYSxDQUFnQjtRQUNoRCxDQUFDO1FBRUQsTUFBTSxDQUFDLEtBQW1CO1lBQ3hCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWE7aUJBQ3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLEtBQUssS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDLDJCQUEyQjtpQkFDcEYsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsd0JBQXdCO1FBQzVDLENBQUM7UUFFRCxXQUFXLENBQUMsUUFBeUI7WUFDbkMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLEtBQUssUUFBUSxDQUFDLENBQUM7UUFDdEUsQ0FBQztLQUNGO0lBYlksd0JBQVcsY0FhdkIsQ0FBQTtJQUVELHVCQUF1QjtJQUN2QixxQ0FBcUM7SUFDckMsOEJBQThCO0lBQzlCLGlEQUFpRDtJQUNqRCw0QkFBNEI7SUFDNUIsRUFBRTtJQUNGLG1EQUFtRDtJQUNuRCwrQkFBK0I7SUFDL0IseUJBQXlCO0lBQ3pCLHlDQUF5QztJQUN6QywyQkFBMkI7SUFDM0IsTUFBTTtJQUNOLEVBQUU7SUFDRixpQ0FBaUM7SUFDakMsNkJBQTZCO0lBQzdCLG1CQUFtQjtJQUNuQixNQUFNO0lBQ04sRUFBRTtJQUNGLDJEQUEyRDtJQUMzRCwrQkFBK0I7SUFDL0IsOERBQThEO0lBQzlELDhDQUE4QztJQUM5Qyw2Q0FBNkM7SUFDN0MsOEZBQThGO0lBQzlGLGtGQUFrRjtJQUNsRixpQ0FBaUM7SUFDakMsa0JBQWtCO0lBQ2xCLFVBQVU7SUFDVixtQkFBbUI7SUFDbkIsTUFBTTtJQUNOLEVBQUU7SUFDRiwwQkFBMEI7SUFDMUIsb0VBQW9FO0lBQ3BFLE1BQU07SUFDTixFQUFFO0lBQ0YsY0FBYztJQUNkLG9DQUFvQztJQUNwQyx1RkFBdUY7SUFDdkYsTUFBTTtJQUNOLEVBQUU7SUFDRixjQUFjO0lBQ2QseUVBQXlFO0lBQ3pFLG1HQUFtRztJQUNuRyx1RkFBdUY7SUFDdkYsTUFBTTtJQUNOLEVBQUU7SUFDRixpQ0FBaUM7SUFDakMsMkJBQTJCO0lBQzNCLG1CQUFtQjtJQUNuQixNQUFNO0lBQ04sRUFBRTtJQUNGLGlFQUFpRTtJQUNqRSxtQ0FBbUM7SUFDbkMsbUJBQW1CO0lBQ25CLE1BQU07SUFDTixFQUFFO0lBQ0YsbUNBQW1DO0lBQ25DLGtFQUFrRTtJQUNsRSxNQUFNO0lBQ04sRUFBRTtJQUNGLHdDQUF3QztJQUN4QywyRUFBMkU7SUFDM0UsTUFBTTtJQUNOLEVBQUU7SUFDRixJQUFJO0FBRU4sQ0FBQyxFQW5GZ0IsWUFBWSxLQUFaLFlBQVksUUFtRjVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7YXNzZXJ0LCBUcmFjZX0gZnJvbSAnQGNvb2xvbi9wZWN0aW4nO1xuXG5pbXBvcnQge2ZpcnN0fSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtQbGFjZURlZmluaXRpb259IGZyb20gJy4vcGxhY2UtZGVmaW5pdGlvbic7XG5pbXBvcnQge1Zpc2l0fSBmcm9tIFwiLi92aXNpdFwiO1xuaW1wb3J0IHtWaXNpdFNlZ21lbnR9IGZyb20gJy4vdmlzaXQtc2VnbWVudCc7XG5cbi8qKlxuICogVE9ETzogdGhpcyBzaG91bGQgYmUgdXBkYXRlZCB0byBzdG9yZSB0aGUgbGFzdCB4IHZpc2lzdHMgcmF0aGVybiB0aGFuIGEgbWFwIG9mIHBsYWNlcyB0byB2aXNpdCBzZWdtZW50cy5cbiAqICAgICAgIFRoaXMgd291bGQgYWxsb3cgaXQgdG8gcmV0dXJuIHNlZ21lbnRzIHRoYXQgYXJlIHJlbGV2ZW50IHRvIGEgcGFydGljdWxhciBwYXJlbnQgcGF0aC4gQ3VycmVudGx5XG4gKiAgICAgICBpdCBqdXN0IHJldHVybnMgdGhlIGxhc3Qgc2VnbWVudCBzbyBpdCBjYW4gcmV0dXJuIGNoaWxkIGlkcyB0aGF0IGRvbid0IGJlbG9uZyB0byB0aGUgY3VycmVudCBwYXJlbnQuXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFBsYWNlSGlzdG9yeSB7XG5cbiAgcHJpdmF0ZSBfYWN0aXZlU2VnbWVudHM6IFBsYWNlSGlzdG9yeS5WaXNpdFJlY29yZDtcbiAgcHJpdmF0ZSBfcHJldmlvdXNWaXNpdHM6IFBsYWNlSGlzdG9yeS5WaXNpdFJlY29yZDtcblxuICBwcml2YXRlIF9hcmNoaXZlID0gbmV3IE1hcDxQbGFjZURlZmluaXRpb24sIFZpc2l0U2VnbWVudFtdPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IHBsYWNlSGlzdG9yeURlcHRoOiBudW1iZXIgPSA0O1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICB9XG5cbiAgbm90aWZ5TmF2aWdhdGlvblN0YXJ0ZWQoKSB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZVNlZ21lbnRzKSB7XG4gICAgICB0aGlzLmFyY2hpdmVTZWdtZW50cyh0aGlzLl9hY3RpdmVTZWdtZW50cy52aXNpdFNlZ21lbnRzKTtcbiAgICAgIHRoaXMuX3ByZXZpb3VzVmlzaXRzID0gdGhpcy5fYWN0aXZlU2VnbWVudHM7XG4gICAgfVxuICB9XG5cbiAgbm90aWZ5TmF2aWdhdGlvbkZpbmlzaGVkKHZpc2l0czogVmlzaXQpIHtcbiAgICB0aGlzLl9hY3RpdmVTZWdtZW50cyA9IG5ldyBQbGFjZUhpc3RvcnkuVmlzaXRSZWNvcmQodmlzaXRzLnNlZ21lbnRzKVxuICB9XG5cbiAgdXBkYXRlVmlzaXRTZWdtZW50KHZpc2l0OiBWaXNpdFNlZ21lbnQpIHtcbiAgICBhc3NlcnQuaXNUcnV0aHkodGhpcy5fYWN0aXZlU2VnbWVudHMpO1xuICAgIHRoaXMuX2FjdGl2ZVNlZ21lbnRzLnVwZGF0ZSh2aXNpdCk7XG4gIH1cblxuICBsYXN0VmlzaXRJbmNsdWRlZChwbGFjZURlZjogUGxhY2VEZWZpbml0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5fcHJldmlvdXNWaXNpdHM/LmdldFZpc2l0Rm9yKHBsYWNlRGVmKTtcbiAgfVxuXG4gIGdldE1vc3RSZWNlbnRWaXNpdFNlZ21lbnRGb3IocGxhY2VEZWY6IFBsYWNlRGVmaW5pdGlvbikge1xuICAgIHJldHVybiBmaXJzdCh0aGlzLmdldFNlZ21lbnRIaXN0b3J5Rm9yKHBsYWNlRGVmKSk7XG4gIH1cblxuICBnZXRTZWdtZW50SGlzdG9yeUZvcihwbGFjZURlZjogUGxhY2VEZWZpbml0aW9uKTogVmlzaXRTZWdtZW50W10ge1xuICAgIGxldCBoaXN0b3J5ID0gdGhpcy5fYXJjaGl2ZS5nZXQocGxhY2VEZWYpO1xuICAgIGlmICghaGlzdG9yeSkge1xuICAgICAgaGlzdG9yeSA9IFtdO1xuICAgICAgdGhpcy5zZXRIaXN0b3J5KHBsYWNlRGVmLCBoaXN0b3J5KTtcbiAgICB9XG4gICAgcmV0dXJuIGhpc3Rvcnk7XG4gIH1cblxuICBwcml2YXRlIHNldEhpc3RvcnkocGxhY2VEZWY6IFBsYWNlRGVmaW5pdGlvbiwgaGlzdG9yeTogVmlzaXRTZWdtZW50W10pIHtcbiAgICB0aGlzLl9hcmNoaXZlLnNldChwbGFjZURlZiwgaGlzdG9yeSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXJjaGl2ZVNlZ21lbnRzKHZpc2l0czogVmlzaXRTZWdtZW50W10pIHtcbiAgICB2aXNpdHMuZm9yRWFjaChzdGF0ZSA9PiB7XG4gICAgICBjb25zdCBoaXN0b3J5ID0gdGhpcy5nZXRTZWdtZW50SGlzdG9yeUZvcihzdGF0ZS5wbGFjZURlZmluaXRpb24pO1xuICAgICAgY29uc3QgcHJldmlvdXNTdGF0ZSA9IGZpcnN0KGhpc3RvcnkpO1xuICAgICAgaWYgKCFwcmV2aW91c1N0YXRlIHx8IHN0YXRlLmhhc0NoYW5nZWRGcm9tKHByZXZpb3VzU3RhdGUpKSB7XG4gICAgICAgIGhpc3RvcnkudW5zaGlmdChzdGF0ZSk7IC8vIExJRk9cbiAgICAgICAgdGhpcy5zZXRIaXN0b3J5KHN0YXRlLnBsYWNlRGVmaW5pdGlvbiwgaGlzdG9yeS5zbGljZSgwLCB0aGlzLnBsYWNlSGlzdG9yeURlcHRoKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuXG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgUGxhY2VIaXN0b3J5IHtcblxuICBleHBvcnQgY2xhc3MgVmlzaXRSZWNvcmQge1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyB2aXNpdFNlZ21lbnRzOiBWaXNpdFNlZ21lbnRbXSkge1xuICAgIH1cblxuICAgIHVwZGF0ZSh2aXNpdDogVmlzaXRTZWdtZW50KSB7XG4gICAgICB0aGlzLnZpc2l0U2VnbWVudHMgPSB0aGlzLnZpc2l0U2VnbWVudHNcbiAgICAgICAgLmZpbHRlcih2ID0+IHYucGxhY2VEZWZpbml0aW9uICE9PSB2aXNpdC5wbGFjZURlZmluaXRpb24pIC8vIGtlZXAgYWxsIHRoYXQgYXJlIG5vdCBtZVxuICAgICAgICAuY29uY2F0KHZpc2l0KTsgLy8gYW5kIGFkZCBtZSB0byB0aGUgZW5kXG4gICAgfVxuXG4gICAgZ2V0VmlzaXRGb3IocGxhY2VEZWY6IFBsYWNlRGVmaW5pdGlvbik6IFZpc2l0U2VnbWVudCB8IHVuZGVmaW5lZCB7XG4gICAgICByZXR1cm4gdGhpcy52aXNpdFNlZ21lbnRzLmZpbmQodiA9PiB2LnBsYWNlRGVmaW5pdGlvbiA9PT0gcGxhY2VEZWYpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGV4cG9ydCBjbGFzcyBRdWVyeSB7XG4gIC8vICAgcHJpdmF0ZSBfaGlzdG9yeTogVmlzaXQuU3RhdGVbXTtcbiAgLy8gICBwcml2YXRlIF9wbGFjZXM6IFBsYWNlW107XG4gIC8vICAgcHJpdmF0ZSBfcHJlZGljYXRlOiAodmlzaXQ6IGFueSkgPT4gYm9vbGVhbjtcbiAgLy8gICBwcml2YXRlIF9saW1pdDogbnVtYmVyO1xuICAvL1xuICAvLyAgIGNvbnN0cnVjdG9yKGhpc3RvcnksIGxpbWl0ID0gaGlzdG9yeS5sZW5ndGgpIHtcbiAgLy8gICAgIHRoaXMuX2hpc3RvcnkgPSBoaXN0b3J5O1xuICAvLyAgICAgdGhpcy5fcGxhY2VzID0gW107XG4gIC8vICAgICB0aGlzLl9wcmVkaWNhdGUgPSAodmlzaXQgPT4gdHJ1ZSk7XG4gIC8vICAgICB0aGlzLl9saW1pdCA9IGxpbWl0O1xuICAvLyAgIH1cbiAgLy9cbiAgLy8gICB0byguLi5wbGFjZXM6UGxhY2VbXSk6dGhpcyB7XG4gIC8vICAgICB0aGlzLl9wbGFjZXMgPSBwbGFjZXM7XG4gIC8vICAgICByZXR1cm4gdGhpcztcbiAgLy8gICB9XG4gIC8vXG4gIC8vICAgd2l0aChwYXJhbWV0ZXJzOiB7IFtwYXJhbWV0ZXI6IHN0cmluZ106IGFueSB9KTogdGhpcyB7XG4gIC8vICAgICB0aGlzLm1hdGNoaW5nKHN0YXRlID0+IHtcbiAgLy8gICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHBhcmFtZXRlcnMpLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgLy8gICAgICAgICBjb25zdCBtYXRjaFZhbHVlID0gcGFyYW1ldGVyc1trZXldO1xuICAvLyAgICAgICAgIGNvbnN0IHZpc2l0VmFsdWUgPSBzdGF0ZS5nZXQoa2V5KTtcbiAgLy8gICAgICAgICBjb25zdCBtYXRjaGVkID0gbWF0Y2hWYWx1ZSA9PT0gJyonID8gIWlzTmlsKHZpc2l0VmFsdWUpIDogdmlzaXRWYWx1ZSA9PSBtYXRjaFZhbHVlO1xuICAvLyAgICAgICAgIC8vIExvZ2dlci5nZXQodGhpcykuaW5mbyhgbWF0Y2hlZD0ke21hdGNoZWR9YCwgcGFyYW1ldGVycywgdmlzaXRWYWx1ZSk7XG4gIC8vICAgICAgICAgcmV0dXJuIGFjYyAmJiBtYXRjaGVkO1xuICAvLyAgICAgICB9LCB0cnVlKTtcbiAgLy8gICAgIH0pO1xuICAvLyAgICAgcmV0dXJuIHRoaXM7XG4gIC8vICAgfVxuICAvL1xuICAvLyAgIGxhc3QoKTogVmlzaXQuU3RhdGUge1xuICAvLyAgICAgcmV0dXJuIGZpbmRMYXN0KHRoaXMuX2hpc3RvcnksIHZpc2l0ID0+IHRoaXMuX21hdGNoZXModmlzaXQpKVxuICAvLyAgIH1cbiAgLy9cbiAgLy8gICAvLyBAdHJhY2VcbiAgLy8gICBhbGxUaGF0TWF0Y2goKTogVmlzaXQuU3RhdGVbXSB7XG4gIC8vICAgICByZXR1cm4gZmlsdGVyKHRoaXMuX2hpc3RvcnksIHZpc2l0ID0+IHRoaXMuX21hdGNoZXModmlzaXQpKS5zbGljZSgtdGhpcy5fbGltaXQpO1xuICAvLyAgIH1cbiAgLy9cbiAgLy8gICAvLyBAdHJhY2VcbiAgLy8gICBtb3N0UmVjZW50VmFsdWVPZjxUPWFueT4ocGFyYW06IHN0cmluZywgZGVmYXVsdFZhbHVlOiBUID0gbnVsbCk6IFQge1xuICAvLyAgICAgY29uc3QgbGFzdFN0YXRlV2l0aFBhcmFtID0gZmluZExhc3QodGhpcy5hbGxUaGF0TWF0Y2goKSwgc3RhdGUgPT4gIWlzTmlsKHN0YXRlLmdldChwYXJhbSkpKTtcbiAgLy8gICAgIHJldHVybiBpc05pbChsYXN0U3RhdGVXaXRoUGFyYW0pID8gZGVmYXVsdFZhbHVlIDogbGFzdFN0YXRlV2l0aFBhcmFtLmdldChwYXJhbSk7XG4gIC8vICAgfVxuICAvL1xuICAvLyAgIGxpbWl0KGxpbWl0OiBudW1iZXIpOiB0aGlzIHtcbiAgLy8gICAgIHRoaXMuX2xpbWl0ID0gbGltaXQ7XG4gIC8vICAgICByZXR1cm4gdGhpcztcbiAgLy8gICB9XG4gIC8vXG4gIC8vICAgbWF0Y2hpbmcocHJlZGljYXRlOiAodmlzaXQ6IFZpc2l0LlN0YXRlKSA9PiBib29sZWFuKTogdGhpcyB7XG4gIC8vICAgICB0aGlzLl9wcmVkaWNhdGUgPSBwcmVkaWNhdGU7XG4gIC8vICAgICByZXR1cm4gdGhpcztcbiAgLy8gICB9XG4gIC8vXG4gIC8vICAgX21hdGNoZXModmlzaXQ6IFZpc2l0LlN0YXRlKSB7XG4gIC8vICAgICByZXR1cm4gdGhpcy5faXNQbGFjZU1hdGNoKHZpc2l0KSAmJiB0aGlzLl9wcmVkaWNhdGUodmlzaXQpO1xuICAvLyAgIH1cbiAgLy9cbiAgLy8gICBfaXNQbGFjZU1hdGNoKHZpc2l0OiBWaXNpdC5TdGF0ZSkge1xuICAvLyAgICAgcmV0dXJuIHRoaXMuX3BsYWNlcy5sZW5ndGggPCAxIHx8IHRoaXMuX3BsYWNlcy5pbmNsdWRlcyh2aXNpdC5wbGFjZSlcbiAgLy8gICB9XG4gIC8vXG4gIC8vIH1cblxufVxuIl19
146
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2UtaGlzdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci11aS1wb3dlcnVwcy9zcmMvbGliL3BsYWNlL3BsYWNlLWhpc3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEMsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLFdBQVcsQ0FBQzs7QUFLaEM7Ozs7R0FJRztBQUlILE1BQU0sT0FBTyxZQUFZO0lBRWYsZUFBZSxDQUEyQjtJQUMxQyxlQUFlLENBQTJCO0lBRTFDLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBbUMsQ0FBQztJQUM3QyxpQkFBaUIsR0FBVyxDQUFDLENBQUM7SUFDL0MsdUJBQXVCO1FBQ3JCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN4QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1NBQzdDO0lBQ0gsQ0FBQztJQUVELHdCQUF3QixDQUFDLE1BQWE7UUFDcEMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLFlBQVksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ3RFLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxLQUFtQjtRQUNwQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsaUJBQWlCLENBQUMsUUFBeUI7UUFDekMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxX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bUI7SUFDbkIsTUFBTTtJQUNOLEVBQUU7SUFDRiwwQkFBMEI7SUFDMUIsb0VBQW9FO0lBQ3BFLE1BQU07SUFDTixFQUFFO0lBQ0YsY0FBYztJQUNkLG9DQUFvQztJQUNwQyx1RkFBdUY7SUFDdkYsTUFBTTtJQUNOLEVBQUU7SUFDRixjQUFjO0lBQ2QseUVBQXlFO0lBQ3pFLG1HQUFtRztJQUNuRyx1RkFBdUY7SUFDdkYsTUFBTTtJQUNOLEVBQUU7SUFDRixpQ0FBaUM7SUFDakMsMkJBQTJCO0lBQzNCLG1CQUFtQjtJQUNuQixNQUFNO0lBQ04sRUFBRTtJQUNGLGlFQUFpRTtJQUNqRSxtQ0FBbUM7SUFDbkMsbUJBQW1CO0lBQ25CLE1BQU07SUFDTixFQUFFO0lBQ0YsbUNBQW1DO0lBQ25DLGtFQUFrRTtJQUNsRSxNQUFNO0lBQ04sRUFBRTtJQUNGLHdDQUF3QztJQUN4QywyRUFBMkU7SUFDM0UsTUFBTTtJQUNOLEVBQUU7SUFDRixJQUFJO0FBRU4sQ0FBQyxFQW5GZ0IsWUFBWSxLQUFaLFlBQVksUUFtRjVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7YXNzZXJ0fSBmcm9tICdAY29vbG9uL3BlY3Rpbic7XG5cbmltcG9ydCB7Zmlyc3R9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge1BsYWNlRGVmaW5pdGlvbn0gZnJvbSAnLi9wbGFjZS1kZWZpbml0aW9uJztcbmltcG9ydCB7VmlzaXR9IGZyb20gXCIuL3Zpc2l0XCI7XG5pbXBvcnQge1Zpc2l0U2VnbWVudH0gZnJvbSAnLi92aXNpdC1zZWdtZW50JztcblxuLyoqXG4gKiBUT0RPOiB0aGlzIHNob3VsZCBiZSB1cGRhdGVkIHRvIHN0b3JlIHRoZSBsYXN0IHggdmlzaXN0cyByYXRoZXJuIHRoYW4gYSBtYXAgb2YgcGxhY2VzIHRvIHZpc2l0IHNlZ21lbnRzLlxuICogICAgICAgVGhpcyB3b3VsZCBhbGxvdyBpdCB0byByZXR1cm4gc2VnbWVudHMgdGhhdCBhcmUgcmVsZXZlbnQgdG8gYSBwYXJ0aWN1bGFyIHBhcmVudCBwYXRoLiBDdXJyZW50bHlcbiAqICAgICAgIGl0IGp1c3QgcmV0dXJucyB0aGUgbGFzdCBzZWdtZW50IHNvIGl0IGNhbiByZXR1cm4gY2hpbGQgaWRzIHRoYXQgZG9uJ3QgYmVsb25nIHRvIHRoZSBjdXJyZW50IHBhcmVudC5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUGxhY2VIaXN0b3J5IHtcblxuICBwcml2YXRlIF9hY3RpdmVTZWdtZW50czogUGxhY2VIaXN0b3J5LlZpc2l0UmVjb3JkO1xuICBwcml2YXRlIF9wcmV2aW91c1Zpc2l0czogUGxhY2VIaXN0b3J5LlZpc2l0UmVjb3JkO1xuXG4gIHByaXZhdGUgX2FyY2hpdmUgPSBuZXcgTWFwPFBsYWNlRGVmaW5pdGlvbiwgVmlzaXRTZWdtZW50W10+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGxhY2VIaXN0b3J5RGVwdGg6IG51bWJlciA9IDQ7XG4gIG5vdGlmeU5hdmlnYXRpb25TdGFydGVkKCkge1xuICAgIGlmICh0aGlzLl9hY3RpdmVTZWdtZW50cykge1xuICAgICAgdGhpcy5hcmNoaXZlU2VnbWVudHModGhpcy5fYWN0aXZlU2VnbWVudHMudmlzaXRTZWdtZW50cyk7XG4gICAgICB0aGlzLl9wcmV2aW91c1Zpc2l0cyA9IHRoaXMuX2FjdGl2ZVNlZ21lbnRzO1xuICAgIH1cbiAgfVxuXG4gIG5vdGlmeU5hdmlnYXRpb25GaW5pc2hlZCh2aXNpdHM6IFZpc2l0KSB7XG4gICAgdGhpcy5fYWN0aXZlU2VnbWVudHMgPSBuZXcgUGxhY2VIaXN0b3J5LlZpc2l0UmVjb3JkKHZpc2l0cy5zZWdtZW50cylcbiAgfVxuXG4gIHVwZGF0ZVZpc2l0U2VnbWVudCh2aXNpdDogVmlzaXRTZWdtZW50KSB7XG4gICAgYXNzZXJ0LmlzVHJ1dGh5KHRoaXMuX2FjdGl2ZVNlZ21lbnRzKTtcbiAgICB0aGlzLl9hY3RpdmVTZWdtZW50cy51cGRhdGUodmlzaXQpO1xuICB9XG5cbiAgbGFzdFZpc2l0SW5jbHVkZWQocGxhY2VEZWY6IFBsYWNlRGVmaW5pdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuX3ByZXZpb3VzVmlzaXRzPy5nZXRWaXNpdEZvcihwbGFjZURlZik7XG4gIH1cblxuICBnZXRNb3N0UmVjZW50VmlzaXRTZWdtZW50Rm9yKHBsYWNlRGVmOiBQbGFjZURlZmluaXRpb24pIHtcbiAgICByZXR1cm4gZmlyc3QodGhpcy5nZXRTZWdtZW50SGlzdG9yeUZvcihwbGFjZURlZikpO1xuICB9XG5cbiAgZ2V0U2VnbWVudEhpc3RvcnlGb3IocGxhY2VEZWY6IFBsYWNlRGVmaW5pdGlvbik6IFZpc2l0U2VnbWVudFtdIHtcbiAgICBsZXQgaGlzdG9yeSA9IHRoaXMuX2FyY2hpdmUuZ2V0KHBsYWNlRGVmKTtcbiAgICBpZiAoIWhpc3RvcnkpIHtcbiAgICAgIGhpc3RvcnkgPSBbXTtcbiAgICAgIHRoaXMuc2V0SGlzdG9yeShwbGFjZURlZiwgaGlzdG9yeSk7XG4gICAgfVxuICAgIHJldHVybiBoaXN0b3J5O1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRIaXN0b3J5KHBsYWNlRGVmOiBQbGFjZURlZmluaXRpb24sIGhpc3Rvcnk6IFZpc2l0U2VnbWVudFtdKSB7XG4gICAgdGhpcy5fYXJjaGl2ZS5zZXQocGxhY2VEZWYsIGhpc3RvcnkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFyY2hpdmVTZWdtZW50cyh2aXNpdHM6IFZpc2l0U2VnbWVudFtdKSB7XG4gICAgdmlzaXRzLmZvckVhY2goc3RhdGUgPT4ge1xuICAgICAgY29uc3QgaGlzdG9yeSA9IHRoaXMuZ2V0U2VnbWVudEhpc3RvcnlGb3Ioc3RhdGUucGxhY2VEZWZpbml0aW9uKTtcbiAgICAgIGNvbnN0IHByZXZpb3VzU3RhdGUgPSBmaXJzdChoaXN0b3J5KTtcbiAgICAgIGlmICghcHJldmlvdXNTdGF0ZSB8fCBzdGF0ZS5oYXNDaGFuZ2VkRnJvbShwcmV2aW91c1N0YXRlKSkge1xuICAgICAgICBoaXN0b3J5LnVuc2hpZnQoc3RhdGUpOyAvLyBMSUZPXG4gICAgICAgIHRoaXMuc2V0SGlzdG9yeShzdGF0ZS5wbGFjZURlZmluaXRpb24sIGhpc3Rvcnkuc2xpY2UoMCwgdGhpcy5wbGFjZUhpc3RvcnlEZXB0aCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cblxufVxuXG5leHBvcnQgbmFtZXNwYWNlIFBsYWNlSGlzdG9yeSB7XG5cbiAgZXhwb3J0IGNsYXNzIFZpc2l0UmVjb3JkIHtcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgdmlzaXRTZWdtZW50czogVmlzaXRTZWdtZW50W10pIHtcbiAgICB9XG5cbiAgICB1cGRhdGUodmlzaXQ6IFZpc2l0U2VnbWVudCkge1xuICAgICAgdGhpcy52aXNpdFNlZ21lbnRzID0gdGhpcy52aXNpdFNlZ21lbnRzXG4gICAgICAgIC5maWx0ZXIodiA9PiB2LnBsYWNlRGVmaW5pdGlvbiAhPT0gdmlzaXQucGxhY2VEZWZpbml0aW9uKSAvLyBrZWVwIGFsbCB0aGF0IGFyZSBub3QgbWVcbiAgICAgICAgLmNvbmNhdCh2aXNpdCk7IC8vIGFuZCBhZGQgbWUgdG8gdGhlIGVuZFxuICAgIH1cblxuICAgIGdldFZpc2l0Rm9yKHBsYWNlRGVmOiBQbGFjZURlZmluaXRpb24pOiBWaXNpdFNlZ21lbnQgfCB1bmRlZmluZWQge1xuICAgICAgcmV0dXJuIHRoaXMudmlzaXRTZWdtZW50cy5maW5kKHYgPT4gdi5wbGFjZURlZmluaXRpb24gPT09IHBsYWNlRGVmKTtcbiAgICB9XG4gIH1cblxuICAvLyBleHBvcnQgY2xhc3MgUXVlcnkge1xuICAvLyAgIHByaXZhdGUgX2hpc3Rvcnk6IFZpc2l0LlN0YXRlW107XG4gIC8vICAgcHJpdmF0ZSBfcGxhY2VzOiBQbGFjZVtdO1xuICAvLyAgIHByaXZhdGUgX3ByZWRpY2F0ZTogKHZpc2l0OiBhbnkpID0+IGJvb2xlYW47XG4gIC8vICAgcHJpdmF0ZSBfbGltaXQ6IG51bWJlcjtcbiAgLy9cbiAgLy8gICBjb25zdHJ1Y3RvcihoaXN0b3J5LCBsaW1pdCA9IGhpc3RvcnkubGVuZ3RoKSB7XG4gIC8vICAgICB0aGlzLl9oaXN0b3J5ID0gaGlzdG9yeTtcbiAgLy8gICAgIHRoaXMuX3BsYWNlcyA9IFtdO1xuICAvLyAgICAgdGhpcy5fcHJlZGljYXRlID0gKHZpc2l0ID0+IHRydWUpO1xuICAvLyAgICAgdGhpcy5fbGltaXQgPSBsaW1pdDtcbiAgLy8gICB9XG4gIC8vXG4gIC8vICAgdG8oLi4ucGxhY2VzOlBsYWNlW10pOnRoaXMge1xuICAvLyAgICAgdGhpcy5fcGxhY2VzID0gcGxhY2VzO1xuICAvLyAgICAgcmV0dXJuIHRoaXM7XG4gIC8vICAgfVxuICAvL1xuICAvLyAgIHdpdGgocGFyYW1ldGVyczogeyBbcGFyYW1ldGVyOiBzdHJpbmddOiBhbnkgfSk6IHRoaXMge1xuICAvLyAgICAgdGhpcy5tYXRjaGluZyhzdGF0ZSA9PiB7XG4gIC8vICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhwYXJhbWV0ZXJzKS5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gIC8vICAgICAgICAgY29uc3QgbWF0Y2hWYWx1ZSA9IHBhcmFtZXRlcnNba2V5XTtcbiAgLy8gICAgICAgICBjb25zdCB2aXNpdFZhbHVlID0gc3RhdGUuZ2V0KGtleSk7XG4gIC8vICAgICAgICAgY29uc3QgbWF0Y2hlZCA9IG1hdGNoVmFsdWUgPT09ICcqJyA/ICFpc05pbCh2aXNpdFZhbHVlKSA6IHZpc2l0VmFsdWUgPT0gbWF0Y2hWYWx1ZTtcbiAgLy8gICAgICAgICAvLyBMb2dnZXIuZ2V0KHRoaXMpLmluZm8oYG1hdGNoZWQ9JHttYXRjaGVkfWAsIHBhcmFtZXRlcnMsIHZpc2l0VmFsdWUpO1xuICAvLyAgICAgICAgIHJldHVybiBhY2MgJiYgbWF0Y2hlZDtcbiAgLy8gICAgICAgfSwgdHJ1ZSk7XG4gIC8vICAgICB9KTtcbiAgLy8gICAgIHJldHVybiB0aGlzO1xuICAvLyAgIH1cbiAgLy9cbiAgLy8gICBsYXN0KCk6IFZpc2l0LlN0YXRlIHtcbiAgLy8gICAgIHJldHVybiBmaW5kTGFzdCh0aGlzLl9oaXN0b3J5LCB2aXNpdCA9PiB0aGlzLl9tYXRjaGVzKHZpc2l0KSlcbiAgLy8gICB9XG4gIC8vXG4gIC8vICAgLy8gQHRyYWNlXG4gIC8vICAgYWxsVGhhdE1hdGNoKCk6IFZpc2l0LlN0YXRlW10ge1xuICAvLyAgICAgcmV0dXJuIGZpbHRlcih0aGlzLl9oaXN0b3J5LCB2aXNpdCA9PiB0aGlzLl9tYXRjaGVzKHZpc2l0KSkuc2xpY2UoLXRoaXMuX2xpbWl0KTtcbiAgLy8gICB9XG4gIC8vXG4gIC8vICAgLy8gQHRyYWNlXG4gIC8vICAgbW9zdFJlY2VudFZhbHVlT2Y8VD1hbnk+KHBhcmFtOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZTogVCA9IG51bGwpOiBUIHtcbiAgLy8gICAgIGNvbnN0IGxhc3RTdGF0ZVdpdGhQYXJhbSA9IGZpbmRMYXN0KHRoaXMuYWxsVGhhdE1hdGNoKCksIHN0YXRlID0+ICFpc05pbChzdGF0ZS5nZXQocGFyYW0pKSk7XG4gIC8vICAgICByZXR1cm4gaXNOaWwobGFzdFN0YXRlV2l0aFBhcmFtKSA/IGRlZmF1bHRWYWx1ZSA6IGxhc3RTdGF0ZVdpdGhQYXJhbS5nZXQocGFyYW0pO1xuICAvLyAgIH1cbiAgLy9cbiAgLy8gICBsaW1pdChsaW1pdDogbnVtYmVyKTogdGhpcyB7XG4gIC8vICAgICB0aGlzLl9saW1pdCA9IGxpbWl0O1xuICAvLyAgICAgcmV0dXJuIHRoaXM7XG4gIC8vICAgfVxuICAvL1xuICAvLyAgIG1hdGNoaW5nKHByZWRpY2F0ZTogKHZpc2l0OiBWaXNpdC5TdGF0ZSkgPT4gYm9vbGVhbik6IHRoaXMge1xuICAvLyAgICAgdGhpcy5fcHJlZGljYXRlID0gcHJlZGljYXRlO1xuICAvLyAgICAgcmV0dXJuIHRoaXM7XG4gIC8vICAgfVxuICAvL1xuICAvLyAgIF9tYXRjaGVzKHZpc2l0OiBWaXNpdC5TdGF0ZSkge1xuICAvLyAgICAgcmV0dXJuIHRoaXMuX2lzUGxhY2VNYXRjaCh2aXNpdCkgJiYgdGhpcy5fcHJlZGljYXRlKHZpc2l0KTtcbiAgLy8gICB9XG4gIC8vXG4gIC8vICAgX2lzUGxhY2VNYXRjaCh2aXNpdDogVmlzaXQuU3RhdGUpIHtcbiAgLy8gICAgIHJldHVybiB0aGlzLl9wbGFjZXMubGVuZ3RoIDwgMSB8fCB0aGlzLl9wbGFjZXMuaW5jbHVkZXModmlzaXQucGxhY2UpXG4gIC8vICAgfVxuICAvL1xuICAvLyB9XG5cbn1cbiJdfQ==