@bizdoc/core 1.13.36 → 1.14.0-next.1

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 (312) hide show
  1. package/assets/bizdoc-schema.json +5 -0
  2. package/esm2020/lib/admin/admin-dismiss.service.mjs +3 -3
  3. package/esm2020/lib/admin/admin-menu.component.mjs +3 -3
  4. package/esm2020/lib/admin/core/ace.input.mjs +3 -3
  5. package/esm2020/lib/admin/core/color-picker.input.mjs +3 -3
  6. package/esm2020/lib/admin/core/search.input.mjs +3 -3
  7. package/esm2020/lib/admin/diff/configuration-diff.component.mjs +3 -3
  8. package/esm2020/lib/admin/document-trace/document-trace.component.mjs +3 -3
  9. package/esm2020/lib/admin/document-trace/reassign.dialog.mjs +3 -3
  10. package/esm2020/lib/admin/document-trace/trace-element.component.mjs +3 -3
  11. package/esm2020/lib/admin/form/form.resolve.service.mjs +3 -3
  12. package/esm2020/lib/admin/form/form.service.mjs +3 -3
  13. package/esm2020/lib/admin/form/workflow/node.component.mjs +3 -3
  14. package/esm2020/lib/admin/form/workflow/role-node.component.mjs +3 -3
  15. package/esm2020/lib/admin/form/workflow/workflow.component.mjs +5 -5
  16. package/esm2020/lib/admin/indices/manage-cube-index.component.mjs +3 -3
  17. package/esm2020/lib/admin/patterns/patterns.component.mjs +3 -3
  18. package/esm2020/lib/admin/permissions/permissions.component.mjs +3 -3
  19. package/esm2020/lib/admin/positions/positions-popup.component.mjs +3 -3
  20. package/esm2020/lib/admin/positions/positions.component.mjs +3 -3
  21. package/esm2020/lib/admin/profiler/profiler.component.mjs +3 -3
  22. package/esm2020/lib/admin/utility-wrapper.component.mjs +3 -3
  23. package/esm2020/lib/admin/utility.pane.component.mjs +3 -3
  24. package/esm2020/lib/app.component.mjs +8 -8
  25. package/esm2020/lib/bizdoc.module.mjs +4 -4
  26. package/esm2020/lib/browse/browse-items.component.mjs +3 -3
  27. package/esm2020/lib/browse/browse.mobile.component.mjs +3 -3
  28. package/esm2020/lib/browse/browse.pane.component.mjs +3 -3
  29. package/esm2020/lib/browse/expanded-item/expanded-item.component.mjs +17 -12
  30. package/esm2020/lib/browse/filter/filter.component.mjs +3 -3
  31. package/esm2020/lib/browse/folders-menu.component.mjs +3 -3
  32. package/esm2020/lib/chat/chat-info.mjs +5 -6
  33. package/esm2020/lib/chat/chat.mobile.component.mjs +3 -3
  34. package/esm2020/lib/chat/chat.service.mjs +3 -3
  35. package/esm2020/lib/chat/contacts.component.mjs +6 -6
  36. package/esm2020/lib/chat/contacts.pane.component.mjs +3 -3
  37. package/esm2020/lib/chat/conversation.component.mjs +5 -5
  38. package/esm2020/lib/chat/conversation.pane.component.mjs +14 -5
  39. package/esm2020/lib/compose/action/action-picker.component.mjs +3 -3
  40. package/esm2020/lib/compose/action/action.dialog.mjs +3 -3
  41. package/esm2020/lib/compose/action/action.pane.dialog.exp.mjs +3 -3
  42. package/esm2020/lib/compose/action/assign-action.component.mjs +21 -45
  43. package/esm2020/lib/compose/action/moveto-action.component.mjs +3 -3
  44. package/esm2020/lib/compose/action/return-action.component.mjs +18 -18
  45. package/esm2020/lib/compose/attachments/attachments.component.mjs +3 -3
  46. package/esm2020/lib/compose/attachments/preview/attachment-preview.component.mjs +3 -3
  47. package/esm2020/lib/compose/attachments/progress-button.directive.mjs +3 -3
  48. package/esm2020/lib/compose/can-deactivate-changes.service.mjs +3 -3
  49. package/esm2020/lib/compose/comments/Comments.pane.component.mjs +3 -3
  50. package/esm2020/lib/compose/comments/comment.component.mjs +3 -3
  51. package/esm2020/lib/compose/comments/comments.component.mjs +3 -3
  52. package/esm2020/lib/compose/comments/edit-comment.component.mjs +3 -3
  53. package/esm2020/lib/compose/comments/edits.component.mjs +3 -3
  54. package/esm2020/lib/compose/comments/quick-comment.component.exp.mjs +3 -3
  55. package/esm2020/lib/compose/comments/votes.component.mjs +3 -3
  56. package/esm2020/lib/compose/compose-resolve.service.mjs +6 -6
  57. package/esm2020/lib/compose/compose.mobile.component.mjs +3 -3
  58. package/esm2020/lib/compose/compose.pane.component.mjs +3 -3
  59. package/esm2020/lib/compose/copy/copy.dialog.mjs +3 -3
  60. package/esm2020/lib/compose/dismiss.service.mjs +3 -3
  61. package/esm2020/lib/compose/document-resolver.service.mjs +3 -3
  62. package/esm2020/lib/compose/document.component.mjs +3 -3
  63. package/esm2020/lib/compose/document.mobile.component.mjs +3 -3
  64. package/esm2020/lib/compose/document.pane.component.mjs +3 -3
  65. package/esm2020/lib/compose/events/events.component.mjs +3 -3
  66. package/esm2020/lib/compose/form-selector/form-selector.sheet.mjs +3 -3
  67. package/esm2020/lib/compose/form.component.mjs +3 -3
  68. package/esm2020/lib/compose/new-menu.component.mjs +3 -3
  69. package/esm2020/lib/compose/privilage.directive.mjs +6 -6
  70. package/esm2020/lib/compose/recipient-resolver.service.mjs +3 -3
  71. package/esm2020/lib/compose/save-changes.dialog.mjs +3 -3
  72. package/esm2020/lib/compose/state.component.mjs +3 -3
  73. package/esm2020/lib/compose/tag/tags.component.mjs +3 -3
  74. package/esm2020/lib/compose/trace/flow.component.mjs +74 -32
  75. package/esm2020/lib/compose/trace/people.component.mjs +3 -3
  76. package/esm2020/lib/compose/trace/trace.base.mjs +3 -3
  77. package/esm2020/lib/compose/trace/trace.component.mjs +13 -6
  78. package/esm2020/lib/compose/trace/trace.pane.component.mjs +3 -3
  79. package/esm2020/lib/compose/version-compare/version-compare.component.mjs +3 -3
  80. package/esm2020/lib/compose/version-compare/version-compare.directive.mjs +9 -9
  81. package/esm2020/lib/compose/version-compare/version.pane.component.mjs +3 -3
  82. package/esm2020/lib/core/NgComponentOutlet.mjs +3 -3
  83. package/esm2020/lib/core/account.service.mjs +3 -3
  84. package/esm2020/lib/core/animated-icon/animated-icon.directive.mjs +3 -3
  85. package/esm2020/lib/core/animations.mjs +3 -3
  86. package/esm2020/lib/core/avatar/avatar.component.mjs +3 -3
  87. package/esm2020/lib/core/component-factory-resolver.mjs +3 -3
  88. package/esm2020/lib/core/controls/address.input.mjs +3 -3
  89. package/esm2020/lib/core/controls/auto-complete.input.mjs +6 -6
  90. package/esm2020/lib/core/controls/combination-picker-body.mjs +3 -3
  91. package/esm2020/lib/core/controls/combination-picker.mjs +3 -3
  92. package/esm2020/lib/core/controls/combination-pool.mjs +3 -3
  93. package/esm2020/lib/core/controls/file.input.mjs +144 -116
  94. package/esm2020/lib/core/controls/select.input.mjs +19 -19
  95. package/esm2020/lib/core/controls/time-picker.mjs +3 -3
  96. package/esm2020/lib/core/controls/timespan.input.mjs +3 -3
  97. package/esm2020/lib/core/datasource.service.mjs +3 -3
  98. package/esm2020/lib/core/guide/guide.component.mjs +3 -3
  99. package/esm2020/lib/core/guide/guide.service.mjs +16 -5
  100. package/esm2020/lib/core/http.interceptor.mjs +3 -3
  101. package/esm2020/lib/core/hub.service.mjs +3 -3
  102. package/esm2020/lib/core/identity/identity.component.mjs +3 -3
  103. package/esm2020/lib/core/info/attachment-info.service.mjs +3 -3
  104. package/esm2020/lib/core/info/document-info.service.mjs +3 -3
  105. package/esm2020/lib/core/info/location-info.component.mjs +3 -3
  106. package/esm2020/lib/core/info/map-info.mjs +3 -3
  107. package/esm2020/lib/core/layout/autocomplete.field.mjs +3 -3
  108. package/esm2020/lib/core/layout/checkbox.field.mjs +3 -3
  109. package/esm2020/lib/core/layout/checkbox.mjs +3 -3
  110. package/esm2020/lib/core/layout/date-range.field.mjs +3 -3
  111. package/esm2020/lib/core/layout/date.field.mjs +3 -3
  112. package/esm2020/lib/core/layout/expression.field.mjs +3 -3
  113. package/esm2020/lib/core/layout/file.field.mjs +3 -3
  114. package/esm2020/lib/core/layout/html.field.mjs +3 -3
  115. package/esm2020/lib/core/layout/input.base.mjs +3 -3
  116. package/esm2020/lib/core/layout/input.field.mjs +3 -3
  117. package/esm2020/lib/core/layout/layout.component.mjs +3 -3
  118. package/esm2020/lib/core/layout/numeric.field.mjs +3 -3
  119. package/esm2020/lib/core/layout/select.field.mjs +3 -3
  120. package/esm2020/lib/core/layout/switch.field.mjs +3 -3
  121. package/esm2020/lib/core/layout/textarea.field.mjs +3 -3
  122. package/esm2020/lib/core/layout/timespan.field.mjs +3 -3
  123. package/esm2020/lib/core/lottie-animation.mjs +3 -3
  124. package/esm2020/lib/core/mailbox.service.mjs +19 -4
  125. package/esm2020/lib/core/models.mjs +1 -1
  126. package/esm2020/lib/core/none.component.mjs +3 -3
  127. package/esm2020/lib/core/pipes/action.pipe.mjs +3 -3
  128. package/esm2020/lib/core/pipes/calendar.pipe.mjs +3 -3
  129. package/esm2020/lib/core/pipes/date-format.pipe.mjs +3 -3
  130. package/esm2020/lib/core/pipes/daterange.pipe.mjs +6 -6
  131. package/esm2020/lib/core/pipes/difference.pipe.mjs +3 -3
  132. package/esm2020/lib/core/pipes/duration-format.pipe.mjs +3 -3
  133. package/esm2020/lib/core/pipes/duration.pipe.mjs +3 -3
  134. package/esm2020/lib/core/pipes/form.pipe.mjs +3 -3
  135. package/esm2020/lib/core/pipes/join.pipe.mjs +3 -3
  136. package/esm2020/lib/core/pipes/role.pipe.mjs +3 -3
  137. package/esm2020/lib/core/pipes/sanitize-html.pipe.mjs +3 -3
  138. package/esm2020/lib/core/pipes/sort.pipe.mjs +6 -6
  139. package/esm2020/lib/core/pipes/state.pipe.mjs +3 -3
  140. package/esm2020/lib/core/pipes/time-ago.pipe.mjs +3 -3
  141. package/esm2020/lib/core/pipes/translate.pipe.mjs +6 -6
  142. package/esm2020/lib/core/pipes/type-value.pipe.mjs +3 -3
  143. package/esm2020/lib/core/pipes/user-name.pipe.mjs +3 -3
  144. package/esm2020/lib/core/popup/popup.component.mjs +3 -3
  145. package/esm2020/lib/core/popup/popup.service.mjs +3 -3
  146. package/esm2020/lib/core/popup/tooltip.directive.mjs +6 -6
  147. package/esm2020/lib/core/prompt/ask/ask.dialog.mjs +3 -3
  148. package/esm2020/lib/core/prompt/mask/mask.component.mjs +3 -3
  149. package/esm2020/lib/core/prompt.service.mjs +3 -3
  150. package/esm2020/lib/core/router.mjs +6 -6
  151. package/esm2020/lib/core/session.service.mjs +3 -3
  152. package/esm2020/lib/core/slots/router.directive.mjs +3 -3
  153. package/esm2020/lib/core/slots/router.service.mjs +3 -3
  154. package/esm2020/lib/core/slots/slots.component.mjs +5 -5
  155. package/esm2020/lib/core/tagging/documents.component.mjs +3 -3
  156. package/esm2020/lib/core/tagging/edit-input.component.mjs +3 -3
  157. package/esm2020/lib/core/tagging/emoji.component.mjs +3 -3
  158. package/esm2020/lib/core/tagging/tagging-item.directive.mjs +3 -3
  159. package/esm2020/lib/core/tagging/tagging.component-base.mjs +3 -3
  160. package/esm2020/lib/core/tagging/tagging.directive.mjs +3 -3
  161. package/esm2020/lib/core/tagging/tagging.pipe.mjs +3 -3
  162. package/esm2020/lib/core/tagging/users.component.mjs +3 -3
  163. package/esm2020/lib/core/translate.service.mjs +3 -3
  164. package/esm2020/lib/core/translations.mjs +11 -7
  165. package/esm2020/lib/core/window-title.service.mjs +3 -3
  166. package/esm2020/lib/cube/accum/accum.component.mjs +3 -3
  167. package/esm2020/lib/cube/chart/chart.component.mjs +20 -5
  168. package/esm2020/lib/cube/cube-info.service.mjs +3 -3
  169. package/esm2020/lib/cube/cube-menu.component.mjs +3 -3
  170. package/esm2020/lib/cube/cube-view.component.mjs +3 -3
  171. package/esm2020/lib/cube/cube.service.mjs +3 -3
  172. package/esm2020/lib/cube/explore/document-item.component.mjs +3 -3
  173. package/esm2020/lib/cube/explore/explore-item.component.mjs +3 -3
  174. package/esm2020/lib/cube/explore/explore-items.component.mjs +3 -3
  175. package/esm2020/lib/cube/explore/explore.pane.component.mjs +3 -3
  176. package/esm2020/lib/cube/explore/item-resolver.service.mjs +6 -6
  177. package/esm2020/lib/cube/explore/item.pane.component.mjs +3 -3
  178. package/esm2020/lib/cube/filter/filter-tags.component.exp.mjs +3 -3
  179. package/esm2020/lib/cube/filter/filter.component.mjs +3 -3
  180. package/esm2020/lib/cube/grid/grid.component.mjs +3 -3
  181. package/esm2020/lib/cube/grid/spreadsheet.component.mjs +3 -3
  182. package/esm2020/lib/cube/matrix/matrix.base.mjs +3 -3
  183. package/esm2020/lib/cube/matrix/matrix.mobile.component.mjs +3 -3
  184. package/esm2020/lib/cube/matrix/matrix.pane.component.mjs +3 -3
  185. package/esm2020/lib/cube/matrix/popup.component.mjs +3 -3
  186. package/esm2020/lib/cube/matrix/table.component.mjs +5 -5
  187. package/esm2020/lib/cube/parallel/parallel.component.mjs +3 -3
  188. package/esm2020/lib/cube/pivot/pivot.component.mjs +16 -5
  189. package/esm2020/lib/cube/sum/sum.component.mjs +3 -3
  190. package/esm2020/lib/cube/view-base.mjs +3 -3
  191. package/esm2020/lib/cube/view.mobile.component.mjs +3 -3
  192. package/esm2020/lib/cube/view.pane.component.mjs +3 -3
  193. package/esm2020/lib/dashboard/actions/actions.widget.mjs +3 -3
  194. package/esm2020/lib/dashboard/cube/accum-cube.widget.mjs +3 -3
  195. package/esm2020/lib/dashboard/cube/compare.widget.mjs +3 -3
  196. package/esm2020/lib/dashboard/cube/cube-analysis.base.mjs +3 -3
  197. package/esm2020/lib/dashboard/cube/cube-analysis.widget.mjs +3 -3
  198. package/esm2020/lib/dashboard/cube/cube-chart.widget.mjs +3 -3
  199. package/esm2020/lib/dashboard/cube/documents.widget.mjs +3 -3
  200. package/esm2020/lib/dashboard/cube/filter/filter.component.mjs +3 -3
  201. package/esm2020/lib/dashboard/dashboard.component.mjs +3 -3
  202. package/esm2020/lib/dashboard/dashboard.pane.component.mjs +3 -3
  203. package/esm2020/lib/dashboard/recents/recents.widget.mjs +3 -3
  204. package/esm2020/lib/dashboard/score/activity.widget.mjs +3 -3
  205. package/esm2020/lib/dashboard/score/compare-groups.widget.mjs +3 -3
  206. package/esm2020/lib/dashboard/score/peers-performance.widget.mjs +3 -3
  207. package/esm2020/lib/dashboard/score/pending-results.widget.mjs +3 -3
  208. package/esm2020/lib/dashboard/score/personal-score.widget.mjs +3 -3
  209. package/esm2020/lib/dashboard/widget-item.component.mjs +3 -3
  210. package/esm2020/lib/desktop.module.mjs +4 -4
  211. package/esm2020/lib/home/about/about.dialog.mjs +3 -3
  212. package/esm2020/lib/home/home-base.component.mjs +3 -3
  213. package/esm2020/lib/home/home.desktop.component.mjs +6 -6
  214. package/esm2020/lib/home/home.mobile.component.mjs +3 -3
  215. package/esm2020/lib/home/notifications/notifications.component.mjs +3 -3
  216. package/esm2020/lib/home/options/options.component.mjs +3 -3
  217. package/esm2020/lib/home/outofoffice/outofoffice.component.mjs +3 -3
  218. package/esm2020/lib/home/search.service.mjs +3 -3
  219. package/esm2020/lib/home/sign/sign.component.mjs +3 -3
  220. package/esm2020/lib/home/tools.component.mjs +3 -3
  221. package/esm2020/lib/impersonate/impersonate.component.mjs +3 -3
  222. package/esm2020/lib/mobile.module.mjs +4 -4
  223. package/esm2020/lib/modules/chart.module.mjs +4 -4
  224. package/esm2020/lib/modules/circular-gauge.module.mjs +4 -4
  225. package/esm2020/lib/modules/datepicker.intl.mjs +3 -3
  226. package/esm2020/lib/modules/dayjs.module.mjs +4 -4
  227. package/esm2020/lib/modules/diagram.module.mjs +4 -4
  228. package/esm2020/lib/modules/gantt.module.mjs +4 -4
  229. package/esm2020/lib/modules/grid.module.mjs +4 -4
  230. package/esm2020/lib/modules/material.module.mjs +4 -4
  231. package/esm2020/lib/modules/paginator.intl.mjs +3 -3
  232. package/esm2020/lib/modules/pivot.module.mjs +4 -4
  233. package/esm2020/lib/modules/schedule.module.mjs +4 -4
  234. package/esm2020/lib/modules/spreadsheet.module.mjs +4 -4
  235. package/esm2020/lib/modules/stepper.intl.mjs +3 -3
  236. package/esm2020/lib/modules/texteditor.module.mjs +4 -4
  237. package/esm2020/lib/notifications/filter.component.mjs +3 -3
  238. package/esm2020/lib/notifications/notifications-table.component.mjs +3 -3
  239. package/esm2020/lib/notifications/notifications.mobile.component.mjs +3 -3
  240. package/esm2020/lib/notifications/notifications.pane.component.mjs +3 -3
  241. package/esm2020/lib/notifications/notifications.service.mjs +3 -3
  242. package/esm2020/lib/notifications/types/commented.notification.mjs +3 -3
  243. package/esm2020/lib/notifications/types/cube-anomaly.notification.mjs +3 -3
  244. package/esm2020/lib/notifications/types/escalated.notification.mjs +3 -3
  245. package/esm2020/lib/notifications/types/liked.notification.mjs +3 -3
  246. package/esm2020/lib/notifications/types/long-running-task.notification.mjs +3 -3
  247. package/esm2020/lib/notifications/types/notification-base.mjs +3 -3
  248. package/esm2020/lib/notifications/types/nudge.notification.mjs +3 -3
  249. package/esm2020/lib/notifications/types/state-changed.notification.mjs +3 -3
  250. package/esm2020/lib/notifications/types/tagged.notification.mjs +3 -3
  251. package/esm2020/lib/notifications/types/text.notification.mjs +3 -3
  252. package/esm2020/lib/notifications/types/upcoming-event.notification.mjs +3 -3
  253. package/esm2020/lib/options/options.component.mjs +3 -3
  254. package/esm2020/lib/options/options.service.mjs +3 -3
  255. package/esm2020/lib/reports/arguments-component.mjs +3 -3
  256. package/esm2020/lib/reports/cube/documents.component.mjs +3 -3
  257. package/esm2020/lib/reports/cube/grid-documents.component.mjs +3 -3
  258. package/esm2020/lib/reports/cube/table-documents.component.mjs +3 -3
  259. package/esm2020/lib/reports/cube/usage-args.component.mjs +3 -3
  260. package/esm2020/lib/reports/cube/usage-base.mjs +3 -3
  261. package/esm2020/lib/reports/cube/usage-chart.component.mjs +3 -3
  262. package/esm2020/lib/reports/cube/usage-pivot.component.mjs +3 -3
  263. package/esm2020/lib/reports/cube/usage.component.mjs +3 -3
  264. package/esm2020/lib/reports/report-viewer.component.mjs +3 -3
  265. package/esm2020/lib/reports/report.mobile.component.mjs +3 -3
  266. package/esm2020/lib/reports/report.pane.component.mjs +3 -3
  267. package/esm2020/lib/reports/reports-menu.component.mjs +3 -3
  268. package/esm2020/lib/reports/substitution/substitution.component.mjs +3 -3
  269. package/esm2020/lib/reports/table/table-view.component.mjs +3 -3
  270. package/esm2020/lib/reports/tasks/tasks.component.mjs +3 -3
  271. package/esm2020/lib/scheduler/schedule.component.mjs +3 -3
  272. package/esm2020/lib/scheduler/scheduler.mobile.component.mjs +3 -3
  273. package/esm2020/lib/scheduler/scheduler.pane.component.mjs +3 -3
  274. package/esm2020/lib/shared.module.mjs +4 -4
  275. package/esm2020/lib/system.module.mjs +4 -4
  276. package/esm2020/lib/views/cube/chart.component.mjs +3 -3
  277. package/esm2020/lib/views/cube/cube-base.mjs +3 -3
  278. package/esm2020/lib/views/cube/explore.component.mjs +3 -3
  279. package/esm2020/lib/views/cube/matrix.component.mjs +3 -3
  280. package/esm2020/lib/views/cube/parallel.component.mjs +3 -3
  281. package/esm2020/lib/views/cube/pivot.component.mjs +3 -3
  282. package/esm2020/lib/views/cube/sum.component.mjs +3 -3
  283. package/esm2020/lib/views/cube/view.component.mjs +3 -3
  284. package/esm2020/lib/views/timeline/timeline.component.exp.mjs +3 -3
  285. package/esm2020/lib/views/view-item.component.mjs +3 -3
  286. package/esm2020/lib/views/views.component.mjs +3 -3
  287. package/esm2020/lib/views/views.mobile.component.mjs +3 -3
  288. package/esm2020/lib/views/views.pane.component.mjs +3 -3
  289. package/esm2020/public-api.mjs +2 -2
  290. package/fesm2015/bizdoc-core.mjs +1288 -1158
  291. package/fesm2015/bizdoc-core.mjs.map +1 -1
  292. package/fesm2020/bizdoc-core.mjs +1288 -1160
  293. package/fesm2020/bizdoc-core.mjs.map +1 -1
  294. package/lib/compose/action/assign-action.component.d.ts +3 -9
  295. package/lib/compose/action/return-action.component.d.ts +4 -2
  296. package/lib/core/animations.d.ts +1 -1
  297. package/lib/core/controls/file.input.d.ts +15 -4
  298. package/lib/core/controls/select.input.d.ts +5 -5
  299. package/lib/core/guide/guide.service.d.ts +8 -2
  300. package/lib/core/mailbox.service.d.ts +1 -0
  301. package/lib/core/models.d.ts +2 -0
  302. package/lib/core/translations.d.ts +6 -2
  303. package/lib/home/home.desktop.component.d.ts +1 -1
  304. package/package.json +10 -9
  305. package/public-api.d.ts +1 -1
  306. package/assets/themes/brown.min.css +0 -85
  307. package/assets/themes/dark.min.css +0 -80
  308. package/assets/themes/deep-purple-light-blue.min.css +0 -92
  309. package/assets/themes/deep-purple-teal.min.css +0 -92
  310. package/assets/themes/default.min.css +0 -92
  311. package/assets/themes/green.min.css +0 -85
  312. package/assets/themes/indigo.min.css +0 -85
@@ -425,13 +425,13 @@ export class WorkflowComponent {
425
425
  this._destroy.complete();
426
426
  }
427
427
  }
428
- WorkflowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: WorkflowComponent, deps: [{ token: i1.PromptService }, { token: i2.FormService }, { token: i3.PaneRef }, { token: i4.PanesRouter }, { token: i5.SessionService }, { token: i6.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
429
- WorkflowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", type: WorkflowComponent, selector: "bizdoc-workflow", host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" }, classAttribute: "pane" }, viewQueries: [{ propertyName: "symbolPaletteEl", first: true, predicate: ["symbolPalette"], descendants: true, static: true }, { propertyName: "diagramEl", first: true, predicate: ["diagram"], descendants: true, static: true }], ngImport: i0, template: "<mat-toolbar>\r\n <button mat-icon-button (click)=\"tools = !tools\" [bizdocTooltip]=\"'Collapse' | translate\"><mat-icon>view_sidebar</mat-icon></button>\r\n <button mat-button (click)=\"save()\" color=\"primary\" [disabled]=\"!dirty || saving\">{{'SaveChanges' | translate}}</button>\r\n <button mat-icon-button (click)=\"diagram.fitToPage()\" [bizdocTooltip]=\"'FitToPage' | translate\"><mat-icon>fullscreen_exit</mat-icon></button>\r\n <button mat-icon-button (click)=\"diagram.undo()\" [bizdocTooltip]=\"'Undo' | translate\" [disabled]=\"!diagram.historyManager?.canUndo\"><mat-icon>undo</mat-icon></button>\r\n <button mat-icon-button (click)=\"diagram.redo()\" [bizdocTooltip]=\"'Redo' | translate\" [disabled]=\"!diagram.historyManager?.canRedo\"><mat-icon>redo</mat-icon></button>\r\n &nbsp;\r\n <button mat-icon-button (click)=\"pan()\" [bizdocTooltip]=\"'Pan' | translate\"><span class=\"e-icons sf-icon-pan\"></span></button>\r\n <button mat-icon-button (click)=\"cursor()\" [bizdocTooltip]=\"'Cursor' | translate\"><span class=\"e-icons sf-icon-cursor\"></span></button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"addText()\" [bizdocTooltip]=\"'Text' | translate\"><mat-icon>title</mat-icon></button>\r\n <button mat-button [matMenuTriggerFor]=\"lineMenu\" [disabled]=\"!diagram.selectedItems?.connectors.length\" [bizdocTooltip]=\"'ConnectorMode'|translate\">\r\n <span class=\"e-menu-icon\" [ngClass]=\"{'sf-icon-straight-line': connectorType === 'Straight',\r\n 'sf-icon-orthogonal-line': connectorType === 'Orthogonal',\r\n 'sf-icon-beizer-line': connectorType === 'Bezier'}\"></span>\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n </button>\r\n <mat-menu #lineMenu panelClass=\"icon-menu-panel\">\r\n <button mat-menu-item (click)=\"connectorTypeChange('Straight')\">\r\n <span class=\"e-menu-icon sf-icon-straight-line\"></span>\r\n </button>\r\n <button mat-menu-item (click)=\"connectorTypeChange('Orthogonal')\">\r\n <span class=\"e-menu-icon sf-icon-orthogonal-line\"></span>\r\n </button>\r\n <button mat-menu-item (click)=\"connectorTypeChange('Bezier')\">\r\n <span class=\"e-menu-icon sf-icon-beizer-line\"></span>\r\n </button>\r\n </mat-menu>\r\n &nbsp;\r\n <button mat-button [matMenuTriggerFor]=\"alignMenu\" [disabled]=\"!diagram.selectedItems?.nodes.length && !diagram.selectedItems?.connectors.length\" [bizdocTooltip]=\"'Align'|translate\">\r\n <span class=\"e-icons\" [ngClass]=\"{'sf-icon-top': alignment === 'Top',\r\n 'sf-icon-left': alignment === 'Left',\r\n 'sf-icon-center': alignment === 'Center',\r\n 'sf-icon-bottom': alignment === 'Bottom',\r\n 'sf-icon-right': alignment === 'Right'}\"></span>\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n </button>\r\n <mat-menu #alignMenu panelClass=\"icon-menu-panel\">\r\n <button mat-menu-item (click)=\"align('Top')\">\r\n <span class=\"e-icons sf-icon-top\"></span>\r\n </button>\r\n <button mat-menu-item (click)=\"align('Left')\">\r\n <span class=\"e-icons sf-icon-left\"></span>\r\n </button>\r\n <button mat-menu-item (click)=\"align('Center')\">\r\n <span class=\"e-icons sf-icon-center\"></span>\r\n </button>\r\n <button mat-menu-item (click)=\"align('Bottom')\">\r\n <span class=\"e-icons sf-icon-bottom\"></span>\r\n </button>\r\n <button mat-menu-item (click)=\"align('Right')\">\r\n <span class=\"e-icons sf-icon-right\"></span>\r\n </button>\r\n </mat-menu>\r\n</mat-toolbar>\r\n<div class=\"row container\">\r\n <div id=\"symbolpalette\" [style.display]=\"tools?'':'none'\">\r\n <div dir=\"ltr\" #symbolPalette>\r\n </div>\r\n </div>\r\n <div #diagram id=\"diagram\" fxFlex dir=\"ltr\">\r\n </div>\r\n</div>\r\n", styles: [":host{display:flex;flex-direction:column;flex-grow:1;height:100%}.container{flex-grow:1;overflow-y:auto}#diagram{flex-grow:1}#symbolpalette{width:210px}::ng-deep .e-rtl{direction:ltr}::ng-deep .mat-toolbar .mat-button-toggle{background:transparent!important}.e-menu-icon{font-family:diagram-icons!important;speak:none;font-size:18px;font-style:normal;font-weight:400;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}::ng-deep .icon-menu-panel{min-width:0}\n"], components: [{ type: i7.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { type: i8.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i10.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i10.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }], directives: [{ type: i11.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { type: i10.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i12.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i13.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { type: i14.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { type: i15.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }], pipes: { "translate": i16.TranslatePipe } });
430
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: WorkflowComponent, decorators: [{
428
+ WorkflowComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: WorkflowComponent, deps: [{ token: i1.PromptService }, { token: i2.FormService }, { token: i3.PaneRef }, { token: i4.PanesRouter }, { token: i5.SessionService }, { token: i6.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
429
+ WorkflowComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: WorkflowComponent, selector: "bizdoc-workflow", host: { listeners: { "document:keydown": "handleKeyboardEvent($event)" }, classAttribute: "pane" }, viewQueries: [{ propertyName: "symbolPaletteEl", first: true, predicate: ["symbolPalette"], descendants: true, static: true }, { propertyName: "diagramEl", first: true, predicate: ["diagram"], descendants: true, static: true }], ngImport: i0, template: "<mat-toolbar>\r\n <button mat-icon-button (click)=\"tools = !tools\" [bizdocTooltip]=\"'Collapse' | translate\"><mat-icon>view_sidebar</mat-icon></button>\r\n <button mat-button (click)=\"save()\" color=\"primary\" [disabled]=\"!dirty || saving\">{{'SaveChanges' | translate}}</button>\r\n <button mat-icon-button (click)=\"diagram.fitToPage()\" [bizdocTooltip]=\"'FitToPage' | translate\"><mat-icon>fullscreen_exit</mat-icon></button>\r\n <button mat-icon-button (click)=\"diagram.undo()\" [bizdocTooltip]=\"'Undo' | translate\" [disabled]=\"!diagram.historyManager?.canUndo\"><mat-icon>undo</mat-icon></button>\r\n <button mat-icon-button (click)=\"diagram.redo()\" [bizdocTooltip]=\"'Redo' | translate\" [disabled]=\"!diagram.historyManager?.canRedo\"><mat-icon>redo</mat-icon></button>\r\n &nbsp;\r\n <button mat-icon-button (click)=\"pan()\" [bizdocTooltip]=\"'Pan' | translate\"><span class=\"e-icons sf-icon-pan\"></span></button>\r\n <button mat-icon-button (click)=\"cursor()\" [bizdocTooltip]=\"'Cursor' | translate\"><span class=\"e-icons sf-icon-cursor\"></span></button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"addText()\" [bizdocTooltip]=\"'Text' | translate\"><mat-icon>title</mat-icon></button>\r\n <button mat-button [matMenuTriggerFor]=\"lineMenu\" [disabled]=\"diagram.selectedItems?.connectors.length === 0\" [bizdocTooltip]=\"'ConnectorMode'|translate\">\r\n <span class=\"e-menu-icon\" [ngClass]=\"{'sf-icon-straight-line': connectorType === 'Straight',\r\n 'sf-icon-orthogonal-line': connectorType === 'Orthogonal',\r\n 'sf-icon-beizer-line': connectorType === 'Bezier'}\"></span>\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n </button>\r\n <mat-menu #lineMenu panelClass=\"icon-menu-panel\">\r\n <button mat-menu-item (click)=\"connectorTypeChange('Straight')\">\r\n <span class=\"e-menu-icon sf-icon-straight-line\"></span>\r\n </button>\r\n <button mat-menu-item (click)=\"connectorTypeChange('Orthogonal')\">\r\n <span class=\"e-menu-icon sf-icon-orthogonal-line\"></span>\r\n </button>\r\n <button mat-menu-item (click)=\"connectorTypeChange('Bezier')\">\r\n <span class=\"e-menu-icon sf-icon-beizer-line\"></span>\r\n </button>\r\n </mat-menu>\r\n &nbsp;\r\n <button mat-button [matMenuTriggerFor]=\"alignMenu\" [disabled]=\"diagram.selectedItems?.nodes.length === 0 && diagram.selectedItems?.connectors.length === 0\" [bizdocTooltip]=\"'Align'|translate\">\r\n <span class=\"e-icons\" [ngClass]=\"{'sf-icon-top': alignment === 'Top',\r\n 'sf-icon-left': alignment === 'Left',\r\n 'sf-icon-center': alignment === 'Center',\r\n 'sf-icon-bottom': alignment === 'Bottom',\r\n 'sf-icon-right': alignment === 'Right'}\"></span>\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n </button>\r\n <mat-menu #alignMenu panelClass=\"icon-menu-panel\">\r\n <button mat-menu-item (click)=\"align('Top')\">\r\n <span class=\"e-icons sf-icon-top\"></span>\r\n </button>\r\n <button mat-menu-item (click)=\"align('Left')\">\r\n <span class=\"e-icons sf-icon-left\"></span>\r\n </button>\r\n <button mat-menu-item (click)=\"align('Center')\">\r\n <span class=\"e-icons sf-icon-center\"></span>\r\n </button>\r\n <button mat-menu-item (click)=\"align('Bottom')\">\r\n <span class=\"e-icons sf-icon-bottom\"></span>\r\n </button>\r\n <button mat-menu-item (click)=\"align('Right')\">\r\n <span class=\"e-icons sf-icon-right\"></span>\r\n </button>\r\n </mat-menu>\r\n</mat-toolbar>\r\n<div class=\"row container\">\r\n <div id=\"symbolpalette\" [style.display]=\"tools?'':'none'\">\r\n <div dir=\"ltr\" #symbolPalette>\r\n </div>\r\n </div>\r\n <div #diagram id=\"diagram\" fxFlex dir=\"ltr\">\r\n </div>\r\n</div>\r\n", styles: [":host{display:flex;flex-direction:column;flex-grow:1;height:100%}.container{flex-grow:1;overflow-y:auto}#diagram{flex-grow:1}#symbolpalette{width:210px}::ng-deep .e-rtl{direction:ltr}::ng-deep .mat-toolbar .mat-button-toggle{background:transparent!important}.e-menu-icon{font-family:diagram-icons!important;speak:none;font-size:18px;font-style:normal;font-weight:400;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}::ng-deep .icon-menu-panel{min-width:0}\n"], components: [{ type: i7.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { type: i8.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i10.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i10.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }], directives: [{ type: i11.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { type: i10.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i12.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i13.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { type: i14.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { type: i15.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }], pipes: { "translate": i16.TranslatePipe } });
430
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: WorkflowComponent, decorators: [{
431
431
  type: Component,
432
432
  args: [{ selector: 'bizdoc-workflow', host: {
433
433
  class: 'pane'
434
- }, template: "<mat-toolbar>\r\n <button mat-icon-button (click)=\"tools = !tools\" [bizdocTooltip]=\"'Collapse' | translate\"><mat-icon>view_sidebar</mat-icon></button>\r\n <button mat-button (click)=\"save()\" color=\"primary\" [disabled]=\"!dirty || saving\">{{'SaveChanges' | translate}}</button>\r\n <button mat-icon-button (click)=\"diagram.fitToPage()\" [bizdocTooltip]=\"'FitToPage' | translate\"><mat-icon>fullscreen_exit</mat-icon></button>\r\n <button mat-icon-button (click)=\"diagram.undo()\" [bizdocTooltip]=\"'Undo' | translate\" [disabled]=\"!diagram.historyManager?.canUndo\"><mat-icon>undo</mat-icon></button>\r\n <button mat-icon-button (click)=\"diagram.redo()\" [bizdocTooltip]=\"'Redo' | translate\" [disabled]=\"!diagram.historyManager?.canRedo\"><mat-icon>redo</mat-icon></button>\r\n &nbsp;\r\n <button mat-icon-button (click)=\"pan()\" [bizdocTooltip]=\"'Pan' | translate\"><span class=\"e-icons sf-icon-pan\"></span></button>\r\n <button mat-icon-button (click)=\"cursor()\" [bizdocTooltip]=\"'Cursor' | translate\"><span class=\"e-icons sf-icon-cursor\"></span></button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"addText()\" [bizdocTooltip]=\"'Text' | translate\"><mat-icon>title</mat-icon></button>\r\n <button mat-button [matMenuTriggerFor]=\"lineMenu\" [disabled]=\"!diagram.selectedItems?.connectors.length\" [bizdocTooltip]=\"'ConnectorMode'|translate\">\r\n <span class=\"e-menu-icon\" [ngClass]=\"{'sf-icon-straight-line': connectorType === 'Straight',\r\n 'sf-icon-orthogonal-line': connectorType === 'Orthogonal',\r\n 'sf-icon-beizer-line': connectorType === 'Bezier'}\"></span>\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n </button>\r\n <mat-menu #lineMenu panelClass=\"icon-menu-panel\">\r\n <button mat-menu-item (click)=\"connectorTypeChange('Straight')\">\r\n <span class=\"e-menu-icon sf-icon-straight-line\"></span>\r\n </button>\r\n <button mat-menu-item (click)=\"connectorTypeChange('Orthogonal')\">\r\n <span class=\"e-menu-icon sf-icon-orthogonal-line\"></span>\r\n </button>\r\n <button mat-menu-item (click)=\"connectorTypeChange('Bezier')\">\r\n <span class=\"e-menu-icon sf-icon-beizer-line\"></span>\r\n </button>\r\n </mat-menu>\r\n &nbsp;\r\n <button mat-button [matMenuTriggerFor]=\"alignMenu\" [disabled]=\"!diagram.selectedItems?.nodes.length && !diagram.selectedItems?.connectors.length\" [bizdocTooltip]=\"'Align'|translate\">\r\n <span class=\"e-icons\" [ngClass]=\"{'sf-icon-top': alignment === 'Top',\r\n 'sf-icon-left': alignment === 'Left',\r\n 'sf-icon-center': alignment === 'Center',\r\n 'sf-icon-bottom': alignment === 'Bottom',\r\n 'sf-icon-right': alignment === 'Right'}\"></span>\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n </button>\r\n <mat-menu #alignMenu panelClass=\"icon-menu-panel\">\r\n <button mat-menu-item (click)=\"align('Top')\">\r\n <span class=\"e-icons sf-icon-top\"></span>\r\n </button>\r\n <button mat-menu-item (click)=\"align('Left')\">\r\n <span class=\"e-icons sf-icon-left\"></span>\r\n </button>\r\n <button mat-menu-item (click)=\"align('Center')\">\r\n <span class=\"e-icons sf-icon-center\"></span>\r\n </button>\r\n <button mat-menu-item (click)=\"align('Bottom')\">\r\n <span class=\"e-icons sf-icon-bottom\"></span>\r\n </button>\r\n <button mat-menu-item (click)=\"align('Right')\">\r\n <span class=\"e-icons sf-icon-right\"></span>\r\n </button>\r\n </mat-menu>\r\n</mat-toolbar>\r\n<div class=\"row container\">\r\n <div id=\"symbolpalette\" [style.display]=\"tools?'':'none'\">\r\n <div dir=\"ltr\" #symbolPalette>\r\n </div>\r\n </div>\r\n <div #diagram id=\"diagram\" fxFlex dir=\"ltr\">\r\n </div>\r\n</div>\r\n", styles: [":host{display:flex;flex-direction:column;flex-grow:1;height:100%}.container{flex-grow:1;overflow-y:auto}#diagram{flex-grow:1}#symbolpalette{width:210px}::ng-deep .e-rtl{direction:ltr}::ng-deep .mat-toolbar .mat-button-toggle{background:transparent!important}.e-menu-icon{font-family:diagram-icons!important;speak:none;font-size:18px;font-style:normal;font-weight:400;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}::ng-deep .icon-menu-panel{min-width:0}\n"] }]
434
+ }, template: "<mat-toolbar>\r\n <button mat-icon-button (click)=\"tools = !tools\" [bizdocTooltip]=\"'Collapse' | translate\"><mat-icon>view_sidebar</mat-icon></button>\r\n <button mat-button (click)=\"save()\" color=\"primary\" [disabled]=\"!dirty || saving\">{{'SaveChanges' | translate}}</button>\r\n <button mat-icon-button (click)=\"diagram.fitToPage()\" [bizdocTooltip]=\"'FitToPage' | translate\"><mat-icon>fullscreen_exit</mat-icon></button>\r\n <button mat-icon-button (click)=\"diagram.undo()\" [bizdocTooltip]=\"'Undo' | translate\" [disabled]=\"!diagram.historyManager?.canUndo\"><mat-icon>undo</mat-icon></button>\r\n <button mat-icon-button (click)=\"diagram.redo()\" [bizdocTooltip]=\"'Redo' | translate\" [disabled]=\"!diagram.historyManager?.canRedo\"><mat-icon>redo</mat-icon></button>\r\n &nbsp;\r\n <button mat-icon-button (click)=\"pan()\" [bizdocTooltip]=\"'Pan' | translate\"><span class=\"e-icons sf-icon-pan\"></span></button>\r\n <button mat-icon-button (click)=\"cursor()\" [bizdocTooltip]=\"'Cursor' | translate\"><span class=\"e-icons sf-icon-cursor\"></span></button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"addText()\" [bizdocTooltip]=\"'Text' | translate\"><mat-icon>title</mat-icon></button>\r\n <button mat-button [matMenuTriggerFor]=\"lineMenu\" [disabled]=\"diagram.selectedItems?.connectors.length === 0\" [bizdocTooltip]=\"'ConnectorMode'|translate\">\r\n <span class=\"e-menu-icon\" [ngClass]=\"{'sf-icon-straight-line': connectorType === 'Straight',\r\n 'sf-icon-orthogonal-line': connectorType === 'Orthogonal',\r\n 'sf-icon-beizer-line': connectorType === 'Bezier'}\"></span>\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n </button>\r\n <mat-menu #lineMenu panelClass=\"icon-menu-panel\">\r\n <button mat-menu-item (click)=\"connectorTypeChange('Straight')\">\r\n <span class=\"e-menu-icon sf-icon-straight-line\"></span>\r\n </button>\r\n <button mat-menu-item (click)=\"connectorTypeChange('Orthogonal')\">\r\n <span class=\"e-menu-icon sf-icon-orthogonal-line\"></span>\r\n </button>\r\n <button mat-menu-item (click)=\"connectorTypeChange('Bezier')\">\r\n <span class=\"e-menu-icon sf-icon-beizer-line\"></span>\r\n </button>\r\n </mat-menu>\r\n &nbsp;\r\n <button mat-button [matMenuTriggerFor]=\"alignMenu\" [disabled]=\"diagram.selectedItems?.nodes.length === 0 && diagram.selectedItems?.connectors.length === 0\" [bizdocTooltip]=\"'Align'|translate\">\r\n <span class=\"e-icons\" [ngClass]=\"{'sf-icon-top': alignment === 'Top',\r\n 'sf-icon-left': alignment === 'Left',\r\n 'sf-icon-center': alignment === 'Center',\r\n 'sf-icon-bottom': alignment === 'Bottom',\r\n 'sf-icon-right': alignment === 'Right'}\"></span>\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n </button>\r\n <mat-menu #alignMenu panelClass=\"icon-menu-panel\">\r\n <button mat-menu-item (click)=\"align('Top')\">\r\n <span class=\"e-icons sf-icon-top\"></span>\r\n </button>\r\n <button mat-menu-item (click)=\"align('Left')\">\r\n <span class=\"e-icons sf-icon-left\"></span>\r\n </button>\r\n <button mat-menu-item (click)=\"align('Center')\">\r\n <span class=\"e-icons sf-icon-center\"></span>\r\n </button>\r\n <button mat-menu-item (click)=\"align('Bottom')\">\r\n <span class=\"e-icons sf-icon-bottom\"></span>\r\n </button>\r\n <button mat-menu-item (click)=\"align('Right')\">\r\n <span class=\"e-icons sf-icon-right\"></span>\r\n </button>\r\n </mat-menu>\r\n</mat-toolbar>\r\n<div class=\"row container\">\r\n <div id=\"symbolpalette\" [style.display]=\"tools?'':'none'\">\r\n <div dir=\"ltr\" #symbolPalette>\r\n </div>\r\n </div>\r\n <div #diagram id=\"diagram\" fxFlex dir=\"ltr\">\r\n </div>\r\n</div>\r\n", styles: [":host{display:flex;flex-direction:column;flex-grow:1;height:100%}.container{flex-grow:1;overflow-y:auto}#diagram{flex-grow:1}#symbolpalette{width:210px}::ng-deep .e-rtl{direction:ltr}::ng-deep .mat-toolbar .mat-button-toggle{background:transparent!important}.e-menu-icon{font-family:diagram-icons!important;speak:none;font-size:18px;font-style:normal;font-weight:400;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}::ng-deep .icon-menu-panel{min-width:0}\n"] }]
435
435
  }], ctorParameters: function () { return [{ type: i1.PromptService }, { type: i2.FormService }, { type: i3.PaneRef }, { type: i4.PanesRouter }, { type: i5.SessionService }, { type: i6.TranslateService }]; }, propDecorators: { symbolPaletteEl: [{
436
436
  type: ViewChild,
437
437
  args: ['symbolPalette', { static: true }]
@@ -442,4 +442,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImpor
442
442
  type: HostListener,
443
443
  args: ['document:keydown', ['$event']]
444
444
  }] } });
445
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9hZG1pbi9mb3JtL3dvcmtmbG93L3dvcmtmbG93LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvYWRtaW4vZm9ybS93b3JrZmxvdy93b3JrZmxvdy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBYSxZQUFZLEVBQXFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFDTCxrQkFBa0IsRUFBbUIsbUJBQW1CLEVBQTRDLG9CQUFvQixFQUE2QixlQUFlLEVBQ3BLLE9BQU8sRUFBYSxRQUFRLEVBQW1FLElBQUksRUFBMEIsWUFBWSxFQUFFLG9CQUFvQixFQUF1RSxhQUFhLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFDOVEsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUM5QyxNQUFNLDBCQUEwQixDQUFDO0FBUWxDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXpELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXpELE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDbkcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUVuQyxTQUFTLFFBQVE7SUFDZixNQUFNLEtBQUssR0FBcUI7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USxFQUFFLENBQUM7YUFDekI7WUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLENBQUMsRUFBRSxHQUFHLEVBQUU7WUFDTixJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELFdBQVc7UUFDVCxJQUFJLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7OzhHQXJXVSxpQkFBaUI7a0dBQWpCLGlCQUFpQixnWUNsRjlCLGl2SEErREE7MkZEbUJhLGlCQUFpQjtrQkFUN0IsU0FBUzsrQkFDRSxpQkFBaUIsUUFHckI7d0JBQ0osS0FBSyxFQUFFLE1BQU07cUJBQ2Q7ME9BTTZDLGVBQWU7c0JBQTVELFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDSixTQUFTO3NCQUFoRCxTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBa1N0QyxtQkFBbUI7c0JBRGxCLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdDaGlsZCwgT25EZXN0cm95LCBIb3N0TGlzdGVuZXIsIEVsZW1lbnRSZWYsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtcclxuICBEaWFncmFtQ29uc3RyYWludHMsIFVzZXJIYW5kbGVNb2RlbCwgU2VsZWN0b3JDb25zdHJhaW50cywgVG9vbEJhc2UsIE1vdXNlRXZlbnRBcmdzLCBDb25uZWN0b3JNb2RlbCwgQ29ubmVjdG9yRHJhd2luZ1Rvb2wsIFRleHRNb2RlbCwgUG9pbnRQb3J0TW9kZWwsIE5vZGVDb25zdHJhaW50cywgU2Nyb2xsU2V0dGluZ3NNb2RlbCxcclxuICBEaWFncmFtLCBOb2RlTW9kZWwsIFVuZG9SZWRvLCBTeW1ib2xJbmZvLCBJRHJhZ0VudGVyRXZlbnRBcmdzLCBTbmFwU2V0dGluZ3NNb2RlbCwgTWFyZ2luTW9kZWwsIE5vZGUsIFBhbGV0dGVNb2RlbCwgU2VnbWVudHMsIERpYWdyYW1Ub29scywgQ29ubmVjdG9yQ29uc3RyYWludHMsIFNlbGVjdG9yTW9kZWwsIFJ1bGVyU2V0dGluZ3NNb2RlbCwgQWxpZ25tZW50T3B0aW9ucywgVGV4dFN0eWxlTW9kZWwsIFN5bWJvbFBhbGV0dGUsIEJwbW5EaWFncmFtcywgRGF0YUJpbmRpbmcsXHJcbiAgQ29ubmVjdG9yRWRpdGluZywgQ29ubmVjdG9yQnJpZGdpbmcsIFNuYXBwaW5nXHJcbn0gZnJvbSAnQHN5bmNmdXNpb24vZWoyLWRpYWdyYW1zJztcclxuaW1wb3J0IHsgRm9ybSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzJztcclxuaW1wb3J0IHsgU2Vzc2lvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3Nlc3Npb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vZm9ybS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUHJvbXB0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvcHJvbXB0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS90cmFuc2xhdGUuc2VydmljZSc7XHJcbmltcG9ydCB7IFBhbmVSZWYgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3Nsb3RzL3BhbmUtcmVmJztcclxuaW1wb3J0IHsgUGFuZXNSb3V0ZXIgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3Nsb3RzL3JvdXRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgV29ya2Zsb3dOb2RlQ29tcG9uZW50IH0gZnJvbSAnLi9ub2RlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFkbWluQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYWRtaW4tZGlzbWlzcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgT3BlblBvbGljeSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvY29uZmlndXJhdGlvbic7XHJcblxyXG5EaWFncmFtLkluamVjdChCcG1uRGlhZ3JhbXMsIFVuZG9SZWRvLCBDb25uZWN0b3JCcmlkZ2luZywgQ29ubmVjdG9yRWRpdGluZywgU25hcHBpbmcsIERhdGFCaW5kaW5nKTtcclxuU3ltYm9sUGFsZXR0ZS5JbmplY3QoQnBtbkRpYWdyYW1zKTtcclxuXHJcbmZ1bmN0aW9uIGdldFBvcnRzKCk6IFBvaW50UG9ydE1vZGVsW10ge1xyXG4gIGNvbnN0IHBvcnRzOiBQb2ludFBvcnRNb2RlbFtdID0gW1xyXG4gICAgeyBpZDogJ3BvcnQxJywgc2hhcGU6ICdDaXJjbGUnLCBvZmZzZXQ6IHsgeDogMCwgeTogMC41IH0gfSxcclxuICAgIHsgaWQ6ICdwb3J0MicsIHNoYXBlOiAnQ2lyY2xlJywgb2Zmc2V0OiB7IHg6IDAuNSwgeTogMSB9IH0sXHJcbiAgICB7IGlkOiAncG9ydDMnLCBzaGFwZTogJ0NpcmNsZScsIG9mZnNldDogeyB4OiAxLCB5OiAwLjUgfSB9LFxyXG4gICAgeyBpZDogJ3BvcnQ0Jywgc2hhcGU6ICdDaXJjbGUnLCBvZmZzZXQ6IHsgeDogMC41LCB5OiAwIH0gfVxyXG4gIF07XHJcbiAgcmV0dXJuIHBvcnRzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzaG93UGFsZXR0ZUljb24oKTogdm9pZCB7XHJcbiAgY29uc3QgcGFsZXR0ZVNwYWNlOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYWxldHRlLXNwYWNlJyk7XHJcbiAgY29uc3QgaXNNb2JpbGUgPSB3aW5kb3cubWF0Y2hNZWRpYSgnKG1heC13aWR0aDo1NTBweCknKS5tYXRjaGVzO1xyXG4gIGlmIChpc01vYmlsZSkge1xyXG4gICAgaWYgKCFwYWxldHRlU3BhY2UuY2xhc3NMaXN0LmNvbnRhaW5zKCdzYi1tb2JpbGUtcGFsZXR0ZS1vcGVuJykpIHtcclxuICAgICAgcGFsZXR0ZVNwYWNlLmNsYXNzTGlzdC5hZGQoJ3NiLW1vYmlsZS1wYWxldHRlLW9wZW4nKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHBhbGV0dGVTcGFjZS5jbGFzc0xpc3QucmVtb3ZlKCdzYi1tb2JpbGUtcGFsZXR0ZS1vcGVuJyk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBwYWxldHRlSWNvbkNsaWNrKCkge1xyXG4gIGNvbnN0IGlzTW9iaWxlID0gd2luZG93Lm1hdGNoTWVkaWEoJyhtYXgtd2lkdGg6NTUwcHgpJykubWF0Y2hlcztcclxuICBpZiAoaXNNb2JpbGUpIHtcclxuICAgIGNvbnN0IHBhbGV0dGVJY29uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhbGV0dGUtaWNvbicpO1xyXG4gICAgaWYgKHBhbGV0dGVJY29uKSB7XHJcbiAgICAgIHBhbGV0dGVJY29uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc2hvd1BhbGV0dGVJY29uLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vL0RlZmluZXMgdGhlIHRvb2xcclxuY2xhc3MgRHJhd1Rvb2wgZXh0ZW5kcyBDb25uZWN0b3JEcmF3aW5nVG9vbCB7XHJcbiAgcHVibGljIG1vdXNlTW92ZShhcmdzOiBNb3VzZUV2ZW50QXJncyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zLm5vZGVzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmRpYWdyYW0uZHJhd2luZ09iamVjdCA9IHtcclxuICAgICAgICB0eXBlOiB0aGlzLnNlZ21lbnRzIHx8ICdCZXppZXInLFxyXG4gICAgICAgIHNvdXJjZUlEOiB0aGlzLmRpYWdyYW0uc2VsZWN0ZWRJdGVtcy5ub2Rlc1swXS5pZFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmluQWN0aW9uID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGNvbnN0IG9rID0gc3VwZXIubW91c2VNb3ZlKGFyZ3MpO1xyXG4gICAgcmV0dXJuIG9rO1xyXG4gIH1cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRpYWdyYW06IERpYWdyYW0sIHByaXZhdGUgc2VnbWVudHM6IFNlZ21lbnRzKSB7XHJcbiAgICBzdXBlcihkaWFncmFtLmNvbW1hbmRIYW5kbGVyLCAnQ29ubmVjdG9yU291cmNlRW5kJywgbnVsbCk7XHJcbiAgfVxyXG59XHJcbmNvbnN0IExJTktfUEFUSCA9ICdNMzQ2LjcsNzE0LjZsMzY4LjEtMzY4LjFjMTcuOS0xNy45LDE3LjktNDcuMSwwLTY0LjljLTE3LjktMTcuOS00Ny4xLTE3LjktNjQuOSwwbC0zNjgsMzY4Yy0xNy45LDE3LjktMTcuOSw0Ny4xLDAsNjQuOUMyOTkuNiw3MzIuNSwzMjguOSw3MzIuNSwzNDYuNyw3MTQuNnogTTQ2OC4yLDY1MWM2LjQsOSw3LjYsMTguNSw3LjYsMjMuOGMwLDYuMy0xLjUsMTguNi0xMS44LDI4LjlMMjcxLDg5Ni41Yy0xMC4zLDEwLjMtMjIuNSwxMS44LTI4LjksMTEuOGMtNi4zLDAtMTguNi0xLjUtMjguOS0xMS44TDEwMy41LDc4Ni44Yy0xMC4zLTEwLjMtMTEuOC0yMi41LTExLjgtMjguOWMwLTYuNCwxLjUtMTguNiwxMS44LTI4LjlsMTkyLjktMTkyLjljMTAuMy0xMC4zLDIyLjUtMTEuOCwyOC45LTExLjhjNC41LDAsMTEuOCwwLjgsMTkuMyw0LjhsNTguNi01OC42Yy00OC0zOS42LTExOS42LTM2LjktMTY0LjUsNy45TDQ1LjcsNjcxLjNjLTQ3LjcsNDcuNy00Ny43LDEyNS41LDAsMTczLjJsMTA5LjcsMTA5LjdjNDcuNyw0Ny43LDEyNS41LDQ3LjcsMTczLjIsMGwxOTIuOS0xOTIuOWM0Ni00Niw0Ny42LTEyMC40LDQuNi0xNjguNEw0NjguMiw2NTF6IE05NTQuMiwxNTUuNUw4NDQuNSw0NS44Qzc5Ni45LTEuOSw3MTktMS45LDY3MS4zLDQ1LjhMNDc4LjQsMjM4LjdjLTQ0LjgsNDQuOC00Ny41LDExNi41LTcuOSwxNjQuNWw1OC42LTU4LjZjLTQtNy42LTQuOC0xNC45LTQuOC0xOS4zYzAtNi4zLDEuNS0xOC42LDExLjgtMjguOWwxOTIuOS0xOTIuOWMxMC4zLTEwLjMsMjIuNS0xMS44LDI4LjktMTEuOGM2LjMsMCwxOC42LDEuNSwyOC45LDExLjhsMTA5LjcsMTA5LjdjMTAuMywxMC4zLDExLjgsMjIuNSwxMS44LDI4LjljMCw2LjMtMS41LDE4LjYtMTEuOCwyOC45TDcwMy43LDQ2NGMtMTAuMywxMC4zLTIyLjUsMTEuOC0yOC45LDExLjhjLTUuMywwLTE0LjgtMS4xLTIzLjgtNy42bC01OCw1OGM0OCw0MywxMjIuMyw0MS41LDE2OC40LTQuNmwxOTIuOS0xOTIuOUMxMDAxLjksMjgxLjEsMTAwMS45LDIwMy4xLDk1NC4yLDE1NS41eic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2JpemRvYy13b3JrZmxvdycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3dvcmtmbG93LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi93b3JrZmxvdy5jb21wb25lbnQuc2NzcyddLFxyXG4gIGhvc3Q6IHtcclxuICAgIGNsYXNzOiAncGFuZSdcclxuICB9XHJcbn0pXHJcbi8qKiB3b3JrZmxvdyBjb21wb25lbnQqL1xyXG5leHBvcnQgY2xhc3MgV29ya2Zsb3dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQWRtaW5Db21wb25lbnQge1xyXG4gIHN5bWJvbFBhbGV0dGU6IFN5bWJvbFBhbGV0dGU7XHJcbiAgZGlhZ3JhbTogRGlhZ3JhbTtcclxuICBAVmlld0NoaWxkKCdzeW1ib2xQYWxldHRlJywgeyBzdGF0aWM6IHRydWUgfSkgc3ltYm9sUGFsZXR0ZUVsOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2RpYWdyYW0nLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFncmFtRWw6IEVsZW1lbnRSZWY7XHJcbiAgdG9vbHMgPSB0cnVlO1xyXG4gIGNvbm5lY3RvclR5cGU6IFNlZ21lbnRzID0gJ0Jlemllcic7XHJcbiAgYWxpZ25tZW50OiBBbGlnbm1lbnRPcHRpb25zID0gJ0NlbnRlcic7XHJcbiAgZm9udFNpemUgPSAxMjtcclxuICBwdWJsaWMgZ2V0VG9vbChhY3Rpb246IHN0cmluZyk6IFRvb2xCYXNlIHtcclxuICAgIGxldCB0b29sOiBUb29sQmFzZSA9IG51bGw7XHJcbiAgICBpZiAoYWN0aW9uID09PSAnY29ubmVjdCcpXHJcbiAgICAgIHRvb2wgPSBuZXcgRHJhd1Rvb2wodGhpcy5kaWFncmFtLCB0aGlzLmNvbm5lY3RvclR5cGUpO1xyXG4gICAgcmV0dXJuIHRvb2w7XHJcbiAgfVxyXG4gIHNhdmluZyA9IGZhbHNlO1xyXG4gIGVsZW1lbnQ/OiBhbnk7XHJcbiAgZGlydHkgPSBmYWxzZTtcclxuICBwYXJhbXM6IHt9O1xyXG4gIHBhbGV0dGVzOiBQYWxldHRlTW9kZWxbXSA9IFtdO1xyXG4gIGRpYWdyYW1Db25zdHJhaW50czogRGlhZ3JhbUNvbnN0cmFpbnRzID0gRGlhZ3JhbUNvbnN0cmFpbnRzLkRlZmF1bHQgfCBEaWFncmFtQ29uc3RyYWludHMuQnJpZGdpbmcgfCBEaWFncmFtQ29uc3RyYWludHMuVXNlckludGVyYWN0aW9uIHwgRGlhZ3JhbUNvbnN0cmFpbnRzLlpvb207XHJcbiAgZGlhZ3JhbVRvb2w6IERpYWdyYW1Ub29scyA9IERpYWdyYW1Ub29scy5EZWZhdWx0O1xyXG4gIC8vRGVmaW5lcyB0aGUgdXNlciBoYW5kbGUgY29sbGVjdGlvbiBmb3Igbm9kZXMgaW4gZGlhZ3JhbVxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3VzZXJIYW5kbGVzOiBVc2VySGFuZGxlTW9kZWxbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2Nvbm5lY3QnLFxyXG4gICAgICBwYXRoRGF0YTogTElOS19QQVRILFxyXG4gICAgICB2aXNpYmxlOiB0cnVlLFxyXG4gICAgICBvZmZzZXQ6IDAsXHJcbiAgICAgIHNpZGU6ICdSaWdodCcsXHJcbiAgICAgIGRpc3BsYWNlbWVudDogMjAsXHJcbiAgICAgIG1hcmdpbjogeyB0b3A6IDAsIGJvdHRvbTogMCwgbGVmdDogMCwgcmlnaHQ6IDAgfVxyXG4gICAgfVxyXG4gIF07XHJcbiAgLy9TeW1ib2xQYWxldHRlIFByb3BlcnRpZXNcclxuICByZWFkb25seSBzeW1ib2xNYXJnaW46IE1hcmdpbk1vZGVsID0geyBsZWZ0OiAxMCwgcmlnaHQ6IDEwLCB0b3A6IDEwLCBib3R0b206IDEwIH07XHJcbiAgcmVhZG9ubHkgc25hcFNldHRpbmdzOiBTbmFwU2V0dGluZ3NNb2RlbCA9IHtcclxuICB9O1xyXG4gIHJlYWRvbmx5IHNlbGVjdGVkSXRlbXM6IFNlbGVjdG9yTW9kZWwgPSB7XHJcbiAgfTtcclxuICByZWFkb25seSBzY3JvbGxTZXR0aW5nczogU2Nyb2xsU2V0dGluZ3NNb2RlbCA9IHtcclxuICAgIG1pblpvb206IC41LFxyXG4gICAgbWF4Wm9vbTogMi41XHJcbiAgfTtcclxuICBwcml2YXRlIF9ydWxlckNvbG9yID0gdGhpcy5fc2Vzc2lvbi5nZXRBY2NlbnQoMTAwKTtcclxuICByZWFkb25seSBydWxlclNldHRpbmdzOiBSdWxlclNldHRpbmdzTW9kZWwgPSB7XHJcbiAgICBob3Jpem9udGFsUnVsZXI6IHsgbWFya2VyQ29sb3I6IHRoaXMuX3J1bGVyQ29sb3IgfSxcclxuICAgIHZlcnRpY2FsUnVsZXI6IHsgbWFya2VyQ29sb3I6IHRoaXMuX3J1bGVyQ29sb3IgfVxyXG4gIH07XHJcbiAgcHJpdmF0ZSBfZm9ybTogRm9ybTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAvKiogd29ya2Zsb3cgY3RvciAqL1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcHM6IFByb21wdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zZXJ2aWNlOiBGb3JtU2VydmljZSxcclxuICAgIHByaXZhdGUgX3BhbmU6IFBhbmVSZWY8V29ya2Zsb3dDb21wb25lbnQ+LFxyXG4gICAgcHJpdmF0ZSBfcm91dGVyOiBQYW5lc1JvdXRlcixcclxuICAgIHByaXZhdGUgX3Nlc3Npb246IFNlc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlKSB7XHJcbiAgICB0aGlzLl9wYWxldHRlcygpO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpIHtcclxuICB9XHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zeW1ib2xQYWxldHRlID0gbmV3IFN5bWJvbFBhbGV0dGUoe1xyXG4gICAgICBleHBhbmRNb2RlOiAnTXVsdGlwbGUnLFxyXG4gICAgICBwYWxldHRlczogdGhpcy5wYWxldHRlcyxcclxuICAgICAgd2lkdGg6IFwiMTAwJVwiLCBoZWlnaHQ6IFwiMTAwJVwiLCBzeW1ib2xIZWlnaHQ6IDgwLFxyXG4gICAgICBlbmFibGVSdGw6IGZhbHNlLCBlbmFibGVBbmltYXRpb246IGZhbHNlLCBzeW1ib2xXaWR0aDogODAsXHJcbiAgICAgIHN5bWJvbE1hcmdpbjogdGhpcy5zeW1ib2xNYXJnaW4sXHJcbiAgICAgIGdldFN5bWJvbEluZm86IHRoaXMuZ2V0U3ltYm9sSW5mby5iaW5kKHRoaXMpLFxyXG4gICAgICBnZXROb2RlRGVmYXVsdHM6IHRoaXMuZ2V0U3ltYm9sRGVmYXVsdHMuYmluZCh0aGlzKVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnN5bWJvbFBhbGV0dGUuYXBwZW5kVG8odGhpcy5zeW1ib2xQYWxldHRlRWwubmF0aXZlRWxlbWVudCk7XHJcbiAgICB0aGlzLmRpYWdyYW0gPSBuZXcgRGlhZ3JhbSh7XHJcbiAgICAgIHdpZHRoOiBcIjEwMCVcIiwgaGVpZ2h0OiBcIjEwMCVcIixcclxuICAgICAgc25hcFNldHRpbmdzOiB0aGlzLnNuYXBTZXR0aW5ncyxcclxuICAgICAgZ2V0Q29ubmVjdG9yRGVmYXVsdHM6IHRoaXMuY29ubkRlZmF1bHRzLmJpbmQodGhpcyksXHJcbiAgICAgIGNvbnN0cmFpbnRzOiB0aGlzLmRpYWdyYW1Db25zdHJhaW50cyxcclxuICAgICAgdG9vbDogdGhpcy5kaWFncmFtVG9vbCxcclxuICAgICAgZ2V0Tm9kZURlZmF1bHRzOiB0aGlzLm5vZGVEZWZhdWx0cy5iaW5kKHRoaXMpLFxyXG4gICAgICBnZXRDdXN0b21Ub29sOiB0aGlzLmdldFRvb2wuYmluZCh0aGlzKSxcclxuICAgICAgc2Nyb2xsU2V0dGluZ3M6IHRoaXMuc2Nyb2xsU2V0dGluZ3MsXHJcbiAgICAgIHNlbGVjdGVkSXRlbXM6IHRoaXMuc2VsZWN0ZWRJdGVtcyxcclxuICAgICAgcnVsZXJTZXR0aW5nczogdGhpcy5ydWxlclNldHRpbmdzLFxyXG4gICAgICBkcmFnRW50ZXI6IHRoaXMuZHJhZ0VudGVyLmJpbmQodGhpcyksXHJcbiAgICAgIGNvbm5lY3Rpb25DaGFuZ2U6IHRoaXMuY2hhbmdlLmJpbmQodGhpcyksXHJcbiAgICAgIGNvbGxlY3Rpb25DaGFuZ2U6IHRoaXMuY2hhbmdlLmJpbmQodGhpcyksXHJcbiAgICAgIHByb3BlcnR5Q2hhbmdlOiB0aGlzLnByb3BlcnR5Q2hhbmdlLmJpbmQodGhpcyksXHJcbiAgICAgIHNlbGVjdGlvbkNoYW5nZTogdGhpcy5zZWxlY3Rpb25DaGFuZ2UuYmluZCh0aGlzKSxcclxuICAgIH0sIHRoaXMuZGlhZ3JhbUVsLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgdGhpcy5kaWFncmFtQ3JlYXRlKCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBkaWFncmFtQ3JlYXRlKCk6IHZvaWQge1xyXG4gICAgcGFsZXR0ZUljb25DbGljaygpO1xyXG4gICAgdGhpcy5fcGFuZS5wYXJhbXNDaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZShwID0+IHtcclxuICAgICAgY29uc3QgaWQgPSBwWydpZCddO1xyXG4gICAgICB0aGlzLl9mb3JtID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmZvcm1zLmZpbmQoZiA9PiBmLm5hbWUgPT09IGlkKTtcclxuICAgICAgdGhpcy5fcGFuZS50aXRsZSA9IHRoaXMuX2Zvcm0udGl0bGU7XHJcbiAgICAgIHRoaXMucGFyYW1zID0geyBpZDogdGhpcy5fZm9ybS5uYW1lIH07XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX3BhbmUuZGF0YUNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKGQgPT4ge1xyXG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuX2Zvcm0sIGQuZm9ybSk7XHJcbiAgICAgIGNvbnN0IGZsb3cgPSB0aGlzLl9mb3JtLndvcmtmbG93O1xyXG4gICAgICB0aGlzLmRpYWdyYW0ubm9kZXMgPSBmbG93Lm5vZGVzO1xyXG4gICAgICB0aGlzLmRpYWdyYW0uY29ubmVjdG9ycyA9IGZsb3cuY29ubmVjdG9ycztcclxuICAgICAgdGhpcy5kaWFncmFtLmRhdGFCaW5kKCk7XHJcbiAgICAgIHRoaXMuZGlhZ3JhbS5hZGQodGhpcy5fdmVyc2lvbk5vZGUoZmxvdy52ZXJzaW9uKSk7XHJcbiAgICAgIHRoaXMuZGlhZ3JhbS5maXRUb1BhZ2UoKTtcclxuICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9wYW5lLnJlc2l6ZS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKCgpID0+XHJcbiAgICAgIHRoaXMuZGlhZ3JhbS5yZWZyZXNoKCkpO1xyXG4gIH1cclxuICBwcml2YXRlIF9wYWxldHRlcygpIHtcclxuICAgIHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5ub2Rlcy5mb3JFYWNoKG4gPT4ge1xyXG4gICAgICBjb25zdCBub2RlOiBOb2RlTW9kZWwgPSB7XHJcbiAgICAgICAgaWQ6IG4ubmFtZSxcclxuICAgICAgICBzaGFwZTogbi5zaGFwZSxcclxuICAgICAgICBhZGRJbmZvOiB7XHJcbiAgICAgICAgICBub2RlVHlwZTogbi5uYW1lLFxyXG4gICAgICAgICAgdGl0bGU6IG4udGl0bGVcclxuICAgICAgICB9LFxyXG4gICAgICB9O1xyXG4gICAgICAobm9kZSBhcyBhbnkpLm5vZGUgPSBuLm5hbWU7XHJcbiAgICAgIGxldCBwYWxldHRlID0gdGhpcy5wYWxldHRlcy5maW5kKHAgPT4gcC50aXRsZSA9PT0gKG4ucGFsZXR0ZSB8fCAnJykpO1xyXG4gICAgICBpZiAoIXBhbGV0dGUpIHtcclxuICAgICAgICBwYWxldHRlID0geyBpZDogYF8ke24ucGFsZXR0ZX1gLCBleHBhbmRlZDogdHJ1ZSwgdGl0bGU6IG4ucGFsZXR0ZSB8fCAnJywgc3ltYm9sczogW10gfTtcclxuICAgICAgICB0aGlzLnBhbGV0dGVzLnB1c2gocGFsZXR0ZSk7XHJcbiAgICAgIH1cclxuICAgICAgcGFsZXR0ZS5zeW1ib2xzLnB1c2gobm9kZSk7XHJcbiAgICB9KTtcclxuICAgIC8vdGhpcy5wYWxldHRlcy5wdXNoKHsgaWQ6ICdkZXNpZ24nLCB0aXRsZTogdGhpcy5fdHJhbnNsYXRpb24uZ2V0KCdEZXNpZ24nKSwgc3ltYm9sczogW3sgaWQ6ICd0ZXh0Jywgc2hhcGU6IHsgdHlwZTogJ1RleHQnLCB0ZXh0Q29udGVudDogJ1QnIH0sIGFkZEluZm86IHsgdGl0bGU6IHRoaXMuX3RyYW5zbGF0aW9uLmdldCgnVGV4dCcpIH0gfV0gfSk7XHJcbiAgICAvKnRoaXMucGFsZXR0ZXMucHVzaChzd2ltbGFuZSApOyovXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF92ZXJzaW9uTm9kZSh2ZXJzaW9uOiBudW1iZXIpOiBOb2RlTW9kZWwge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaWQ6ICd2ZXJzaW9uJyxcclxuICAgICAgc2hhcGU6IHtcclxuICAgICAgICB0eXBlOiAnVGV4dCcsXHJcbiAgICAgICAgY29udGVudDogdGhpcy5fdHJhbnNsYXRlLmdldCgnRGlhZ3JhbVZlcnNpb24nLCB2ZXJzaW9uIHx8IDApXHJcbiAgICAgIH0sXHJcbiAgICAgIG9mZnNldFk6IDUsXHJcbiAgICAgIG9mZnNldFg6IDUsXHJcbiAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgZm9udFNpemU6IDUwLFxyXG4gICAgICAgIGNvbG9yOiB0aGlzLl9zZXNzaW9uLnRoZW1lLmRhcmsgPyAnd2hpdGUnIDogJ2JsYWNrJyxcclxuICAgICAgICBvcGFjaXR5OiAuMVxyXG4gICAgICB9IGFzIFRleHRTdHlsZU1vZGVsLFxyXG4gICAgICBjb25zdHJhaW50czogTm9kZUNvbnN0cmFpbnRzLlJlYWRPbmx5LFxyXG4gICAgICB6SW5kZXg6IC0xXHJcbiAgICB9IGFzIFRleHRNb2RlbDtcclxuICB9XHJcbiAgbm9kZURlZmF1bHRzID0gKCk6IE5vZGVNb2RlbCA9PiB7XHJcbiAgICBjb25zdCBvYmo6IE5vZGVNb2RlbCA9IHtcclxuICAgICAgc3R5bGU6IHtcclxuICAgICAgICBmaWxsOiAndHJhbnNwYXJlbnQnLFxyXG4gICAgICAgIHN0cm9rZUNvbG9yOiB0aGlzLl9zZXNzaW9uLnRoZW1lLmRhcmsgPyAnd2hpdGUnIDogJ2JsYWNrJyxcclxuICAgICAgICBzdHJva2VXaWR0aDogMVxyXG4gICAgICB9LFxyXG4gICAgICBhbm5vdGF0aW9uczogW3tcclxuICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgY29sb3I6IHRoaXMuX3Nlc3Npb24udGhlbWUuZGFyayA/ICd3aGl0ZScgOiAnYmxhY2snLFxyXG4gICAgICAgICAgZmlsbDogJ3RyYW5zcGFyZW50JyxcclxuICAgICAgICAgIG9wYWNpdHk6IC44XHJcbiAgICAgICAgfVxyXG4gICAgICB9XVxyXG4gICAgfTtcclxuICAgIGlmIChvYmoud2lkdGggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBvYmoud2lkdGggPSAxNDU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCByYXRpbzogbnVtYmVyID0gMTAwIC8gb2JqLndpZHRoO1xyXG4gICAgICBvYmoud2lkdGggPSAxMDA7XHJcbiAgICAgIG9iai5oZWlnaHQgKj0gcmF0aW87XHJcbiAgICB9XHJcbiAgICBvYmouY29uc3RyYWludHMgPSBOb2RlQ29uc3RyYWludHMuRGVmYXVsdCB8IE5vZGVDb25zdHJhaW50cy5Bc3BlY3RSYXRpbztcclxuICAgIG9iai5wb3J0cyA9IGdldFBvcnRzKCk7XHJcbiAgICByZXR1cm4gb2JqO1xyXG4gIH1cclxuICBwdWJsaWMgY29ubkRlZmF1bHRzID0gKG9iajogQ29ubmVjdG9yTW9kZWwpOiB2b2lkID0+IHtcclxuICAgIG9iai5jb25zdHJhaW50cyA9IENvbm5lY3RvckNvbnN0cmFpbnRzLkRlZmF1bHQgfCBDb25uZWN0b3JDb25zdHJhaW50cy5CcmlkZ2luZyB8IENvbm5lY3RvckNvbnN0cmFpbnRzLkRyYWdTZWdtZW50VGh1bWI7XHJcbiAgICBvYmouc3R5bGUuc3Ryb2tlQ29sb3IgPSB0aGlzLl9zZXNzaW9uLnRoZW1lLmRhcmsgPyAnd2hpdGUnIDogJ2JsYWNrJztcclxuICB9XHJcbiAgcHVibGljIGdldFN5bWJvbEluZm8oc3ltYm9sOiBOb2RlTW9kZWwpOiBTeW1ib2xJbmZvIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGZpdDogdHJ1ZSxcclxuICAgICAgdG9vbHRpcDogKHN5bWJvbC5hZGRJbmZvIGFzIGFueSkudGl0bGUsXHJcbiAgICAgIGRlc2NyaXB0aW9uOiB7IHRleHQ6IChzeW1ib2wuYWRkSW5mbyBhcyBhbnkpLnRpdGxlLCBvdmVyZmxvdzogJ1dyYXAnLCB3cmFwOiAnV3JhcFdpdGhPdmVyZmxvdycgfVxyXG4gICAgfTtcclxuICB9XHJcbiAgcHVibGljIGdldFN5bWJvbERlZmF1bHRzKHN5bWJvbDogTm9kZU1vZGVsKTogdm9pZCB7XHJcbiAgICBzeW1ib2wud2lkdGggPSBzeW1ib2wuaGVpZ2h0ID0gNDA7XHJcbiAgICBzeW1ib2wuY29uc3RyYWludHMgPSBOb2RlQ29uc3RyYWludHMuRGVmYXVsdCB8IE5vZGVDb25zdHJhaW50cy5Bc3BlY3RSYXRpbztcclxuICB9XHJcbiAgcGFuKCkge1xyXG4gICAgdGhpcy5kaWFncmFtQ29uc3RyYWludHMgPSB0aGlzLmRpYWdyYW1Db25zdHJhaW50cyB8IERpYWdyYW1Db25zdHJhaW50cy5QYW47XHJcbiAgICB0aGlzLmRpYWdyYW1Ub29sID0gRGlhZ3JhbVRvb2xzLlpvb21QYW47XHJcbiAgfVxyXG4gIGN1cnNvcigpIHtcclxuICAgIHRoaXMuZGlhZ3JhbUNvbnN0cmFpbnRzID0gdGhpcy5kaWFncmFtQ29uc3RyYWludHMgJiB+RGlhZ3JhbUNvbnN0cmFpbnRzLlBhbjtcclxuICAgIHRoaXMuZGlhZ3JhbVRvb2wgPSBEaWFncmFtVG9vbHMuRGVmYXVsdDtcclxuICB9XHJcbiAgc2VsZWN0aW9uQ2hhbmdlKCkge1xyXG4gICAgY29uc3QgeyBub2RlcywgY29ubmVjdG9ycyB9ID0gdGhpcy5kaWFncmFtLnNlbGVjdGVkSXRlbXM7XHJcbiAgICBpZiAoY29ubmVjdG9ycy5sZW5ndGggfHwgbm9kZXMubGVuZ3RoKSB7XHJcbiAgICAgIGlmIChub2Rlcy5sZW5ndGggPT09IDEgJiYgbm9kZXNbMF0uYWRkSW5mbykge1xyXG4gICAgICAgIHRoaXMuZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zLmNvbnN0cmFpbnRzID0gU2VsZWN0b3JDb25zdHJhaW50cy5BbGwgfCBTZWxlY3RvckNvbnN0cmFpbnRzLlVzZXJIYW5kbGU7XHJcbiAgICAgICAgdGhpcy5kaWFncmFtLnNlbGVjdGVkSXRlbXMudXNlckhhbmRsZXMgPSB0aGlzLl91c2VySGFuZGxlcztcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHRoaXMuZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zLmNvbnN0cmFpbnRzID0gU2VsZWN0b3JDb25zdHJhaW50cy5BbGwgXiBTZWxlY3RvckNvbnN0cmFpbnRzLlVzZXJIYW5kbGU7XHJcblxyXG4gICAgICBpZiAoY29ubmVjdG9ycy5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBjb25uZWN0b3IgPSBjb25uZWN0b3JzWzBdO1xyXG4gICAgICAgIGNvbm5lY3RvcnMuZm9yRWFjaChjID0+IHsgaWYgKCFjLmFkZEluZm8pIGMuYWRkSW5mbyA9IHt9IH0pO1xyXG4gICAgICAgIGNvbnN0IHR5cGUgPSBjb25uZWN0b3IudHlwZTtcclxuICAgICAgICB0aGlzLmNvbm5lY3RvclR5cGUgPSBjb25uZWN0b3JzLmxlbmd0aCA9PT0gMSB8fCBjb25uZWN0b3JzLmV2ZXJ5KGMgPT4gYy50eXBlID09PSB0eXBlKSA/IHR5cGUgOiBudWxsO1xyXG4gICAgICAgIGlmIChjb25uZWN0b3IuYW5ub3RhdGlvbnMubGVuZ3RoKVxyXG4gICAgICAgICAgdGhpcy5mb250U2l6ZSA9IGNvbm5lY3Rvci5hbm5vdGF0aW9uc1swXS5zdHlsZS5mb250U2l6ZTtcclxuICAgICAgICB0aGlzLmNvbm5lY3RvclR5cGUgPSBjb25uZWN0b3JzLmxlbmd0aCA9PT0gMSB8fCBjb25uZWN0b3JzLmV2ZXJ5KGMgPT4gYy50eXBlID09PSB0eXBlKSA/IHR5cGUgOiBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChub2Rlcy5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBub2RlID0gbm9kZXNbMF0sXHJcbiAgICAgICAgICBhZGRJbmZvID0gbm9kZS5hZGRJbmZvIGFzIGFueTtcclxuICAgICAgICBpZiAoYWRkSW5mbyAmJiBhZGRJbmZvLm5vZGVUeXBlKSB7XHJcbiAgICAgICAgICBpZiAobm9kZS5hbm5vdGF0aW9ucy5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuZm9udFNpemUgPSBub2RlLmFubm90YXRpb25zWzBdLnN0eWxlLmZvbnRTaXplO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9yb3V0ZXIuY29sbGFwc2UoKVxyXG4gICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoV29ya2Zsb3dOb2RlQ29tcG9uZW50LCB7XHJcbiAgICAgICAgc3RhdGU6IHtcclxuICAgICAgICAgIG5vZGVzLCBjb25uZWN0b3JzXHJcbiAgICAgICAgfSxcclxuICAgICAgICBwb2xpY3k6IE9wZW5Qb2xpY3kuVGFiLFxyXG4gICAgICAgIGV4cGFuZGFibGU6IGZhbHNlLFxyXG4gICAgICAgIGdyb3VwOiAnJ1xyXG4gICAgICB9KS50aGVuKHAgPT4ge1xyXG4gICAgICAgIChwLmluc3RhbmNlIGFzIFdvcmtmbG93Tm9kZUNvbXBvbmVudCkuY2hhbmdlLlxyXG4gICAgICAgICAgcGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmRpYWdyYW0uZGF0YUJpbmQoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5fcm91dGVyLmNvbGxhcHNlKCk7XHJcbiAgfVxyXG4gIGFsaWduKHZhbHVlOiBBbGlnbm1lbnRPcHRpb25zKSB7XHJcbiAgICBmdW5jdGlvbiBhbGlnbihuOiBOb2RlTW9kZWwgfCBDb25uZWN0b3JNb2RlbCkge1xyXG4gICAgICBuLmFubm90YXRpb25zLmxlbmd0aCAmJiBPYmplY3QuYXNzaWduKG4uYW5ub3RhdGlvbnNbMF0sIHtcclxuICAgICAgICBvZmZzZXQ6IHtcclxuICAgICAgICAgIHg6IHZhbHVlID09PSAnUmlnaHQnID8gMSA6IHZhbHVlID09PSAnTGVmdCcgPyAwIDogLjUsXHJcbiAgICAgICAgICB5OiB2YWx1ZSA9PT0gJ1RvcCcgPyAwIDogdmFsdWUgPT09ICdCb3R0b20nID8gMSA6IC41XHJcbiAgICAgICAgfSxcclxuICAgICAgICB2ZXJ0aWNhbEFsaWdubWVudDogdmFsdWUgPT09ICdUb3AnID8gJ0JvdHRvbScgOiB2YWx1ZSA9PT0gJ0JvdHRvbScgPyAnVG9wJyA6ICdDZW50ZXInLFxyXG4gICAgICAgIGhvcml6b250YWxBbGlnbm1lbnQ6IHZhbHVlID09PSAnUmlnaHQnID8gJ0xlZnQnIDogdmFsdWUgPT09ICdMZWZ0JyA/ICdSaWdodCcgOiAnQ2VudGVyJ1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zLm5vZGVzLmZvckVhY2goYWxpZ24pO1xyXG4gICAgdGhpcy5kaWFncmFtLnNlbGVjdGVkSXRlbXMuY29ubmVjdG9ycy5mb3JFYWNoKGFsaWduKTtcclxuICAgIHRoaXMuYWxpZ25tZW50ID0gdmFsdWU7XHJcbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuICB9XHJcbiAgcHVibGljIGRyYWdFbnRlcihhcmdzOiBJRHJhZ0VudGVyRXZlbnRBcmdzKTogdm9pZCB7XHJcbiAgICBjb25zdCBvYmo6IE5vZGVNb2RlbCA9IGFyZ3MuZWxlbWVudCBhcyBOb2RlTW9kZWw7XHJcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgTm9kZSkge1xyXG4gICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IG9iajtcclxuICAgICAgb2JqLndpZHRoID0gMTAwO1xyXG4gICAgICBvYmouaGVpZ2h0ICo9IDEwMCAvIHdpZHRoO1xyXG4gICAgICBvYmoub2Zmc2V0WCArPSAob2JqLndpZHRoIC0gd2lkdGgpIC8gMjtcclxuICAgICAgb2JqLm9mZnNldFkgKz0gKG9iai5oZWlnaHQgLSBoZWlnaHQpIC8gMjtcclxuICAgICAgb2JqLnN0eWxlID0geyBmaWxsOiAnd2hpdGUnLCBzdHJva2VDb2xvcjogJ2JsYWNrJyB9O1xyXG4gICAgfVxyXG4gIH1cclxuICBwcm9wZXJ0eUNoYW5nZShlKSB7XHJcbiAgICBpZiAoZS5jYXVzZSAhPT0gMikgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgfVxyXG4gIGNoYW5nZSgpIHtcclxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gIH1cclxuICBhZGRUZXh0KCkge1xyXG4gICAgdGhpcy5kaWFncmFtLmRyYXdpbmdPYmplY3QgPSB7XHJcbiAgICAgIHNoYXBlOiB7XHJcbiAgICAgICAgdHlwZTogJ1RleHQnLFxyXG4gICAgICB9LFxyXG4gICAgICBjb25zdHJhaW50czogTm9kZUNvbnN0cmFpbnRzLkRlZmF1bHQgJiB+Tm9kZUNvbnN0cmFpbnRzLkluQ29ubmVjdCAmIH5Ob2RlQ29uc3RyYWludHMuT3V0Q29ubmVjdFxyXG4gICAgfSBhcyBOb2RlTW9kZWw7XHJcbiAgICB0aGlzLmRpYWdyYW1Ub29sID0gRGlhZ3JhbVRvb2xzLkRyYXdPbmNlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDdHJsLXMgc2F2ZVxyXG4gICAqIEBwYXJhbSBldmVudFxyXG4gICAqL1xyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxyXG4gIGhhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmRpcnR5ICYmIGV2ZW50LmN0cmxLZXkgJiYgKGV2ZW50LndoaWNoID09PSA4MyB8fCBldmVudC53aGljaCA9PT0gMTE1KSkge1xyXG4gICAgICB0aGlzLnNhdmUoKTtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICB9XHJcbiAgYmdDaGFuZ2UodmFsOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zLm5vZGVzLmZvckVhY2gobiA9PiBuLnN0eWxlLmZpbGwgPSB2YWwpO1xyXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgfVxyXG4gIGNvbG9yQ2hhbmdlKHZhbDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmRpYWdyYW0uc2VsZWN0ZWRJdGVtcy5ub2Rlcy5mb3JFYWNoKG4gPT4gbi5hbm5vdGF0aW9ucy5mb3JFYWNoKGEgPT4gYS5zdHlsZS5jb2xvciA9IHZhbCkpO1xyXG4gICAgdGhpcy5kaWFncmFtLnNlbGVjdGVkSXRlbXMuY29ubmVjdG9ycy5mb3JFYWNoKGMgPT4gYy5hbm5vdGF0aW9ucy5mb3JFYWNoKGEgPT4gYS5zdHlsZS5jb2xvciA9IHZhbCkpO1xyXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgfVxyXG4gIGNvbm5lY3RvclR5cGVDaGFuZ2UodHlwZTogU2VnbWVudHMpIHtcclxuICAgIHRoaXMuZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zLmNvbm5lY3RvcnMuZm9yRWFjaChjID0+IGMudHlwZSA9IHR5cGUpO1xyXG4gICAgdGhpcy5jb25uZWN0b3JUeXBlID0gdHlwZTtcclxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gIH1cclxuICBzaXplQ2hhbmdlKHZhbDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmRpYWdyYW0uc2VsZWN0ZWRJdGVtcy5ub2Rlcy5mb3JFYWNoKG4gPT4gbi5hbm5vdGF0aW9ucy5mb3JFYWNoKGEgPT4gYS5zdHlsZS5mb250U2l6ZSA9IHBhcnNlSW50KHZhbCkpKTtcclxuICAgIHRoaXMuZGlhZ3JhbS5kYXRhQmluZCgpO1xyXG4gIH1cclxuICBzdHJva2VDaGFuZ2UodmFsOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zLmNvbm5lY3RvcnMuZm9yRWFjaChjID0+IHtcclxuICAgICAgYy5zdHlsZS5zdHJva2VDb2xvciA9IHZhbDtcclxuICAgICAgaWYgKGMuYW5ub3RhdGlvbnMpIGMuYW5ub3RhdGlvbnNbMF0uc3R5bGUuY29sb3IgPSB2YWw7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zLm5vZGVzLmZvckVhY2gobiA9PiBuLnN0eWxlLnN0cm9rZUNvbG9yID0gdmFsKTtcclxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gIH1cclxuICBzYXZlKCk6IFByb21pc2U8YW55PiB7XHJcbiAgICB0aGlzLmRpYWdyYW0uc2VyaWFsaXphdGlvblNldHRpbmdzID0ge3ByZXZlbnREZWZhdWx0czogdHJ1ZX07XHJcbiAgICBjb25zdCBvYmogPSBKU09OLnBhcnNlKHRoaXMuZGlhZ3JhbS5zYXZlRGlhZ3JhbSgpKTtcclxuICAgIHRoaXMuX2Zvcm0ud29ya2Zsb3cuY29ubmVjdG9ycyA9IG9iai5jb25uZWN0b3JzO1xyXG4gICAgdGhpcy5fZm9ybS53b3JrZmxvdy5ub2RlcyA9IG9iai5ub2Rlcy5maWx0ZXIobiA9PiBuLmlkICE9PSAndmVyc2lvbicpLm1hcCgobjogTm9kZU1vZGVsKSA9PiB7XHJcbiAgICAgIG4ub2Zmc2V0WCA9IE1hdGgucm91bmQobi5vZmZzZXRYKTtcclxuICAgICAgbi5vZmZzZXRZID0gTWF0aC5yb3VuZChuLm9mZnNldFkpO1xyXG4gICAgICByZXR1cm4gbjtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5zYXZpbmcgPSB0cnVlO1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlcnZpY2Uuc2F2ZSh0aGlzLl9mb3JtKS50b1Byb21pc2UoKS50aGVuKHYgPT4ge1xyXG4gICAgICB0aGlzLnBzLnRvYXN0KCdDaGFuZ2VzU2F2ZWQnKTtcclxuICAgICAgaWYgKHRoaXMuX2Zvcm0ud29ya2Zsb3cudmVyc2lvbiA8IHYpIHtcclxuICAgICAgICB0aGlzLnBzLnRvYXN0KCdEaWFncmFtVmVyc2lvbicsIHYpO1xyXG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmRpYWdyYW0uZ2V0Tm9kZU9iamVjdCgndmVyc2lvbicpO1xyXG4gICAgICAgIChub2RlLnNoYXBlIGFzIFRleHRNb2RlbCkuY29udGVudCA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0RpYWdyYW1WZXJzaW9uJywgdik7XHJcbiAgICAgICAgdGhpcy5kaWFncmFtLmRhdGFCaW5kKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fZm9ybS53b3JrZmxvdy52ZXJzaW9uID0gdjtcclxuICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xyXG4gICAgfSwgKCkgPT4ge1xyXG4gICAgICB0aGlzLnBzLmVycm9yKCk7XHJcbiAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnN5bWJvbFBhbGV0dGU/LmRlc3Ryb3koKTtcclxuICAgIHRoaXMuZGlhZ3JhbT8uZGVzdHJveSgpO1xyXG4gICAgdGhpcy5fZGVzdHJveS5uZXh0KCk7XHJcbiAgICB0aGlzLl9kZXN0cm95LmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxtYXQtdG9vbGJhcj5cclxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwidG9vbHMgPSAhdG9vbHNcIiBbYml6ZG9jVG9vbHRpcF09XCInQ29sbGFwc2UnIHwgdHJhbnNsYXRlXCI+PG1hdC1pY29uPnZpZXdfc2lkZWJhcjwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgPGJ1dHRvbiBtYXQtYnV0dG9uIChjbGljayk9XCJzYXZlKClcIiBjb2xvcj1cInByaW1hcnlcIiBbZGlzYWJsZWRdPVwiIWRpcnR5IHx8IHNhdmluZ1wiPnt7J1NhdmVDaGFuZ2VzJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImRpYWdyYW0uZml0VG9QYWdlKClcIiBbYml6ZG9jVG9vbHRpcF09XCInRml0VG9QYWdlJyB8IHRyYW5zbGF0ZVwiPjxtYXQtaWNvbj5mdWxsc2NyZWVuX2V4aXQ8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJkaWFncmFtLnVuZG8oKVwiIFtiaXpkb2NUb29sdGlwXT1cIidVbmRvJyB8IHRyYW5zbGF0ZVwiIFtkaXNhYmxlZF09XCIhZGlhZ3JhbS5oaXN0b3J5TWFuYWdlcj8uY2FuVW5kb1wiPjxtYXQtaWNvbj51bmRvPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiZGlhZ3JhbS5yZWRvKClcIiBbYml6ZG9jVG9vbHRpcF09XCInUmVkbycgfCB0cmFuc2xhdGVcIiBbZGlzYWJsZWRdPVwiIWRpYWdyYW0uaGlzdG9yeU1hbmFnZXI/LmNhblJlZG9cIj48bWF0LWljb24+cmVkbzwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgJm5ic3A7XHJcbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInBhbigpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ1BhbicgfCB0cmFuc2xhdGVcIj48c3BhbiBjbGFzcz1cImUtaWNvbnMgc2YtaWNvbi1wYW5cIj48L3NwYW4+PC9idXR0b24+XHJcbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImN1cnNvcigpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0N1cnNvcicgfCB0cmFuc2xhdGVcIj48c3BhbiBjbGFzcz1cImUtaWNvbnMgc2YtaWNvbi1jdXJzb3JcIj48L3NwYW4+PC9idXR0b24+XHJcbiAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxyXG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJhZGRUZXh0KClcIiBbYml6ZG9jVG9vbHRpcF09XCInVGV4dCcgfCB0cmFuc2xhdGVcIj48bWF0LWljb24+dGl0bGU8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gIDxidXR0b24gbWF0LWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibGluZU1lbnVcIiBbZGlzYWJsZWRdPVwiIWRpYWdyYW0uc2VsZWN0ZWRJdGVtcz8uY29ubmVjdG9ycy5sZW5ndGhcIiBbYml6ZG9jVG9vbHRpcF09XCInQ29ubmVjdG9yTW9kZSd8dHJhbnNsYXRlXCI+XHJcbiAgICA8c3BhbiBjbGFzcz1cImUtbWVudS1pY29uXCIgW25nQ2xhc3NdPVwieydzZi1pY29uLXN0cmFpZ2h0LWxpbmUnOiBjb25uZWN0b3JUeXBlID09PSAnU3RyYWlnaHQnLFxyXG4gICAgICAgICAgJ3NmLWljb24tb3J0aG9nb25hbC1saW5lJzogY29ubmVjdG9yVHlwZSA9PT0gJ09ydGhvZ29uYWwnLFxyXG4gICAgICAgICAgJ3NmLWljb24tYmVpemVyLWxpbmUnOiBjb25uZWN0b3JUeXBlID09PSAnQmV6aWVyJ31cIj48L3NwYW4+XHJcbiAgICA8bWF0LWljb24+YXJyb3dfZHJvcF9kb3duPC9tYXQtaWNvbj5cclxuICA8L2J1dHRvbj5cclxuICA8bWF0LW1lbnUgI2xpbmVNZW51IHBhbmVsQ2xhc3M9XCJpY29uLW1lbnUtcGFuZWxcIj5cclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiY29ubmVjdG9yVHlwZUNoYW5nZSgnU3RyYWlnaHQnKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImUtbWVudS1pY29uIHNmLWljb24tc3RyYWlnaHQtbGluZVwiPjwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJjb25uZWN0b3JUeXBlQ2hhbmdlKCdPcnRob2dvbmFsJylcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJlLW1lbnUtaWNvbiBzZi1pY29uLW9ydGhvZ29uYWwtbGluZVwiPjwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJjb25uZWN0b3JUeXBlQ2hhbmdlKCdCZXppZXInKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImUtbWVudS1pY29uIHNmLWljb24tYmVpemVyLWxpbmVcIj48L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L21hdC1tZW51PlxyXG4gICZuYnNwO1xyXG4gIDxidXR0b24gbWF0LWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwiYWxpZ25NZW51XCIgW2Rpc2FibGVkXT1cIiFkaWFncmFtLnNlbGVjdGVkSXRlbXM/Lm5vZGVzLmxlbmd0aCAmJiAhZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zPy5jb25uZWN0b3JzLmxlbmd0aFwiIFtiaXpkb2NUb29sdGlwXT1cIidBbGlnbid8dHJhbnNsYXRlXCI+XHJcbiAgICA8c3BhbiBjbGFzcz1cImUtaWNvbnNcIiBbbmdDbGFzc109XCJ7J3NmLWljb24tdG9wJzogYWxpZ25tZW50ID09PSAnVG9wJyxcclxuICAgICAgICAgICdzZi1pY29uLWxlZnQnOiBhbGlnbm1lbnQgPT09ICdMZWZ0JyxcclxuICAgICAgICAgICdzZi1pY29uLWNlbnRlcic6IGFsaWdubWVudCA9PT0gJ0NlbnRlcicsXHJcbiAgICAgICAgICAnc2YtaWNvbi1ib3R0b20nOiBhbGlnbm1lbnQgPT09ICdCb3R0b20nLFxyXG4gICAgICAgICAgJ3NmLWljb24tcmlnaHQnOiBhbGlnbm1lbnQgPT09ICdSaWdodCd9XCI+PC9zcGFuPlxyXG4gICAgPG1hdC1pY29uPmFycm93X2Ryb3BfZG93bjwvbWF0LWljb24+XHJcbiAgPC9idXR0b24+XHJcbiAgPG1hdC1tZW51ICNhbGlnbk1lbnUgcGFuZWxDbGFzcz1cImljb24tbWVudS1wYW5lbFwiPlxyXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJhbGlnbignVG9wJylcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJlLWljb25zIHNmLWljb24tdG9wXCI+PC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImFsaWduKCdMZWZ0JylcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJlLWljb25zIHNmLWljb24tbGVmdFwiPjwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJhbGlnbignQ2VudGVyJylcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJlLWljb25zIHNmLWljb24tY2VudGVyXCI+PC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImFsaWduKCdCb3R0b20nKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImUtaWNvbnMgc2YtaWNvbi1ib3R0b21cIj48L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiYWxpZ24oJ1JpZ2h0JylcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJlLWljb25zIHNmLWljb24tcmlnaHRcIj48L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L21hdC1tZW51PlxyXG48L21hdC10b29sYmFyPlxyXG48ZGl2IGNsYXNzPVwicm93IGNvbnRhaW5lclwiPlxyXG4gIDxkaXYgaWQ9XCJzeW1ib2xwYWxldHRlXCIgW3N0eWxlLmRpc3BsYXldPVwidG9vbHM/Jyc6J25vbmUnXCI+XHJcbiAgICA8ZGl2IGRpcj1cImx0clwiICNzeW1ib2xQYWxldHRlPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiAjZGlhZ3JhbSBpZD1cImRpYWdyYW1cIiBmeEZsZXggZGlyPVwibHRyXCI+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
445
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9hZG1pbi9mb3JtL3dvcmtmbG93L3dvcmtmbG93LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvYWRtaW4vZm9ybS93b3JrZmxvdy93b3JrZmxvdy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBYSxZQUFZLEVBQXFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFDTCxrQkFBa0IsRUFBbUIsbUJBQW1CLEVBQTRDLG9CQUFvQixFQUE2QixlQUFlLEVBQ3BLLE9BQU8sRUFBYSxRQUFRLEVBQW1FLElBQUksRUFBMEIsWUFBWSxFQUFFLG9CQUFvQixFQUF1RSxhQUFhLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFDOVEsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUM5QyxNQUFNLDBCQUEwQixDQUFDO0FBUWxDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXpELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXpELE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDbkcsYUFBYSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUVuQyxTQUFTLFFBQVE7SUFDZixNQUFNLEtBQUssR0FBcUI7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USxFQUFFLENBQUM7YUFDekI7WUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ25CLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLENBQUMsRUFBRSxHQUFHLEVBQUU7WUFDTixJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELFdBQVc7UUFDVCxJQUFJLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7OzhHQXJXVSxpQkFBaUI7a0dBQWpCLGlCQUFpQixnWUNsRjlCLGd3SEErREE7MkZEbUJhLGlCQUFpQjtrQkFUN0IsU0FBUzsrQkFDRSxpQkFBaUIsUUFHckI7d0JBQ0osS0FBSyxFQUFFLE1BQU07cUJBQ2Q7ME9BTTZDLGVBQWU7c0JBQTVELFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDSixTQUFTO3NCQUFoRCxTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBa1N0QyxtQkFBbUI7c0JBRGxCLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIFZpZXdDaGlsZCwgT25EZXN0cm95LCBIb3N0TGlzdGVuZXIsIEVsZW1lbnRSZWYsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtcclxuICBEaWFncmFtQ29uc3RyYWludHMsIFVzZXJIYW5kbGVNb2RlbCwgU2VsZWN0b3JDb25zdHJhaW50cywgVG9vbEJhc2UsIE1vdXNlRXZlbnRBcmdzLCBDb25uZWN0b3JNb2RlbCwgQ29ubmVjdG9yRHJhd2luZ1Rvb2wsIFRleHRNb2RlbCwgUG9pbnRQb3J0TW9kZWwsIE5vZGVDb25zdHJhaW50cywgU2Nyb2xsU2V0dGluZ3NNb2RlbCxcclxuICBEaWFncmFtLCBOb2RlTW9kZWwsIFVuZG9SZWRvLCBTeW1ib2xJbmZvLCBJRHJhZ0VudGVyRXZlbnRBcmdzLCBTbmFwU2V0dGluZ3NNb2RlbCwgTWFyZ2luTW9kZWwsIE5vZGUsIFBhbGV0dGVNb2RlbCwgU2VnbWVudHMsIERpYWdyYW1Ub29scywgQ29ubmVjdG9yQ29uc3RyYWludHMsIFNlbGVjdG9yTW9kZWwsIFJ1bGVyU2V0dGluZ3NNb2RlbCwgQWxpZ25tZW50T3B0aW9ucywgVGV4dFN0eWxlTW9kZWwsIFN5bWJvbFBhbGV0dGUsIEJwbW5EaWFncmFtcywgRGF0YUJpbmRpbmcsXHJcbiAgQ29ubmVjdG9yRWRpdGluZywgQ29ubmVjdG9yQnJpZGdpbmcsIFNuYXBwaW5nXHJcbn0gZnJvbSAnQHN5bmNmdXNpb24vZWoyLWRpYWdyYW1zJztcclxuaW1wb3J0IHsgRm9ybSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzJztcclxuaW1wb3J0IHsgU2Vzc2lvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3Nlc3Npb24uc2VydmljZSc7XHJcbmltcG9ydCB7IEZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vZm9ybS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUHJvbXB0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvcHJvbXB0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS90cmFuc2xhdGUuc2VydmljZSc7XHJcbmltcG9ydCB7IFBhbmVSZWYgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3Nsb3RzL3BhbmUtcmVmJztcclxuaW1wb3J0IHsgUGFuZXNSb3V0ZXIgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3Nsb3RzL3JvdXRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgV29ya2Zsb3dOb2RlQ29tcG9uZW50IH0gZnJvbSAnLi9ub2RlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFkbWluQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYWRtaW4tZGlzbWlzcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgT3BlblBvbGljeSB9IGZyb20gJy4uLy4uLy4uL2NvcmUvY29uZmlndXJhdGlvbic7XHJcblxyXG5EaWFncmFtLkluamVjdChCcG1uRGlhZ3JhbXMsIFVuZG9SZWRvLCBDb25uZWN0b3JCcmlkZ2luZywgQ29ubmVjdG9yRWRpdGluZywgU25hcHBpbmcsIERhdGFCaW5kaW5nKTtcclxuU3ltYm9sUGFsZXR0ZS5JbmplY3QoQnBtbkRpYWdyYW1zKTtcclxuXHJcbmZ1bmN0aW9uIGdldFBvcnRzKCk6IFBvaW50UG9ydE1vZGVsW10ge1xyXG4gIGNvbnN0IHBvcnRzOiBQb2ludFBvcnRNb2RlbFtdID0gW1xyXG4gICAgeyBpZDogJ3BvcnQxJywgc2hhcGU6ICdDaXJjbGUnLCBvZmZzZXQ6IHsgeDogMCwgeTogMC41IH0gfSxcclxuICAgIHsgaWQ6ICdwb3J0MicsIHNoYXBlOiAnQ2lyY2xlJywgb2Zmc2V0OiB7IHg6IDAuNSwgeTogMSB9IH0sXHJcbiAgICB7IGlkOiAncG9ydDMnLCBzaGFwZTogJ0NpcmNsZScsIG9mZnNldDogeyB4OiAxLCB5OiAwLjUgfSB9LFxyXG4gICAgeyBpZDogJ3BvcnQ0Jywgc2hhcGU6ICdDaXJjbGUnLCBvZmZzZXQ6IHsgeDogMC41LCB5OiAwIH0gfVxyXG4gIF07XHJcbiAgcmV0dXJuIHBvcnRzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzaG93UGFsZXR0ZUljb24oKTogdm9pZCB7XHJcbiAgY29uc3QgcGFsZXR0ZVNwYWNlOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYWxldHRlLXNwYWNlJyk7XHJcbiAgY29uc3QgaXNNb2JpbGUgPSB3aW5kb3cubWF0Y2hNZWRpYSgnKG1heC13aWR0aDo1NTBweCknKS5tYXRjaGVzO1xyXG4gIGlmIChpc01vYmlsZSkge1xyXG4gICAgaWYgKCFwYWxldHRlU3BhY2UuY2xhc3NMaXN0LmNvbnRhaW5zKCdzYi1tb2JpbGUtcGFsZXR0ZS1vcGVuJykpIHtcclxuICAgICAgcGFsZXR0ZVNwYWNlLmNsYXNzTGlzdC5hZGQoJ3NiLW1vYmlsZS1wYWxldHRlLW9wZW4nKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHBhbGV0dGVTcGFjZS5jbGFzc0xpc3QucmVtb3ZlKCdzYi1tb2JpbGUtcGFsZXR0ZS1vcGVuJyk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBwYWxldHRlSWNvbkNsaWNrKCkge1xyXG4gIGNvbnN0IGlzTW9iaWxlID0gd2luZG93Lm1hdGNoTWVkaWEoJyhtYXgtd2lkdGg6NTUwcHgpJykubWF0Y2hlcztcclxuICBpZiAoaXNNb2JpbGUpIHtcclxuICAgIGNvbnN0IHBhbGV0dGVJY29uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhbGV0dGUtaWNvbicpO1xyXG4gICAgaWYgKHBhbGV0dGVJY29uKSB7XHJcbiAgICAgIHBhbGV0dGVJY29uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgc2hvd1BhbGV0dGVJY29uLCBmYWxzZSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vL0RlZmluZXMgdGhlIHRvb2xcclxuY2xhc3MgRHJhd1Rvb2wgZXh0ZW5kcyBDb25uZWN0b3JEcmF3aW5nVG9vbCB7XHJcbiAgcHVibGljIG1vdXNlTW92ZShhcmdzOiBNb3VzZUV2ZW50QXJncyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zLm5vZGVzLmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmRpYWdyYW0uZHJhd2luZ09iamVjdCA9IHtcclxuICAgICAgICB0eXBlOiB0aGlzLnNlZ21lbnRzIHx8ICdCZXppZXInLFxyXG4gICAgICAgIHNvdXJjZUlEOiB0aGlzLmRpYWdyYW0uc2VsZWN0ZWRJdGVtcy5ub2Rlc1swXS5pZFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLmluQWN0aW9uID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIGNvbnN0IG9rID0gc3VwZXIubW91c2VNb3ZlKGFyZ3MpO1xyXG4gICAgcmV0dXJuIG9rO1xyXG4gIH1cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGRpYWdyYW06IERpYWdyYW0sIHByaXZhdGUgc2VnbWVudHM6IFNlZ21lbnRzKSB7XHJcbiAgICBzdXBlcihkaWFncmFtLmNvbW1hbmRIYW5kbGVyLCAnQ29ubmVjdG9yU291cmNlRW5kJywgbnVsbCk7XHJcbiAgfVxyXG59XHJcbmNvbnN0IExJTktfUEFUSCA9ICdNMzQ2LjcsNzE0LjZsMzY4LjEtMzY4LjFjMTcuOS0xNy45LDE3LjktNDcuMSwwLTY0LjljLTE3LjktMTcuOS00Ny4xLTE3LjktNjQuOSwwbC0zNjgsMzY4Yy0xNy45LDE3LjktMTcuOSw0Ny4xLDAsNjQuOUMyOTkuNiw3MzIuNSwzMjguOSw3MzIuNSwzNDYuNyw3MTQuNnogTTQ2OC4yLDY1MWM2LjQsOSw3LjYsMTguNSw3LjYsMjMuOGMwLDYuMy0xLjUsMTguNi0xMS44LDI4LjlMMjcxLDg5Ni41Yy0xMC4zLDEwLjMtMjIuNSwxMS44LTI4LjksMTEuOGMtNi4zLDAtMTguNi0xLjUtMjguOS0xMS44TDEwMy41LDc4Ni44Yy0xMC4zLTEwLjMtMTEuOC0yMi41LTExLjgtMjguOWMwLTYuNCwxLjUtMTguNiwxMS44LTI4LjlsMTkyLjktMTkyLjljMTAuMy0xMC4zLDIyLjUtMTEuOCwyOC45LTExLjhjNC41LDAsMTEuOCwwLjgsMTkuMyw0LjhsNTguNi01OC42Yy00OC0zOS42LTExOS42LTM2LjktMTY0LjUsNy45TDQ1LjcsNjcxLjNjLTQ3LjcsNDcuNy00Ny43LDEyNS41LDAsMTczLjJsMTA5LjcsMTA5LjdjNDcuNyw0Ny43LDEyNS41LDQ3LjcsMTczLjIsMGwxOTIuOS0xOTIuOWM0Ni00Niw0Ny42LTEyMC40LDQuNi0xNjguNEw0NjguMiw2NTF6IE05NTQuMiwxNTUuNUw4NDQuNSw0NS44Qzc5Ni45LTEuOSw3MTktMS45LDY3MS4zLDQ1LjhMNDc4LjQsMjM4LjdjLTQ0LjgsNDQuOC00Ny41LDExNi41LTcuOSwxNjQuNWw1OC42LTU4LjZjLTQtNy42LTQuOC0xNC45LTQuOC0xOS4zYzAtNi4zLDEuNS0xOC42LDExLjgtMjguOWwxOTIuOS0xOTIuOWMxMC4zLTEwLjMsMjIuNS0xMS44LDI4LjktMTEuOGM2LjMsMCwxOC42LDEuNSwyOC45LDExLjhsMTA5LjcsMTA5LjdjMTAuMywxMC4zLDExLjgsMjIuNSwxMS44LDI4LjljMCw2LjMtMS41LDE4LjYtMTEuOCwyOC45TDcwMy43LDQ2NGMtMTAuMywxMC4zLTIyLjUsMTEuOC0yOC45LDExLjhjLTUuMywwLTE0LjgtMS4xLTIzLjgtNy42bC01OCw1OGM0OCw0MywxMjIuMyw0MS41LDE2OC40LTQuNmwxOTIuOS0xOTIuOUMxMDAxLjksMjgxLjEsMTAwMS45LDIwMy4xLDk1NC4yLDE1NS41eic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2JpemRvYy13b3JrZmxvdycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3dvcmtmbG93LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi93b3JrZmxvdy5jb21wb25lbnQuc2NzcyddLFxyXG4gIGhvc3Q6IHtcclxuICAgIGNsYXNzOiAncGFuZSdcclxuICB9XHJcbn0pXHJcbi8qKiB3b3JrZmxvdyBjb21wb25lbnQqL1xyXG5leHBvcnQgY2xhc3MgV29ya2Zsb3dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgQWRtaW5Db21wb25lbnQge1xyXG4gIHN5bWJvbFBhbGV0dGU6IFN5bWJvbFBhbGV0dGU7XHJcbiAgZGlhZ3JhbTogRGlhZ3JhbTtcclxuICBAVmlld0NoaWxkKCdzeW1ib2xQYWxldHRlJywgeyBzdGF0aWM6IHRydWUgfSkgc3ltYm9sUGFsZXR0ZUVsOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2RpYWdyYW0nLCB7IHN0YXRpYzogdHJ1ZSB9KSBkaWFncmFtRWw6IEVsZW1lbnRSZWY7XHJcbiAgdG9vbHMgPSB0cnVlO1xyXG4gIGNvbm5lY3RvclR5cGU6IFNlZ21lbnRzID0gJ0Jlemllcic7XHJcbiAgYWxpZ25tZW50OiBBbGlnbm1lbnRPcHRpb25zID0gJ0NlbnRlcic7XHJcbiAgZm9udFNpemUgPSAxMjtcclxuICBwdWJsaWMgZ2V0VG9vbChhY3Rpb246IHN0cmluZyk6IFRvb2xCYXNlIHtcclxuICAgIGxldCB0b29sOiBUb29sQmFzZSA9IG51bGw7XHJcbiAgICBpZiAoYWN0aW9uID09PSAnY29ubmVjdCcpXHJcbiAgICAgIHRvb2wgPSBuZXcgRHJhd1Rvb2wodGhpcy5kaWFncmFtLCB0aGlzLmNvbm5lY3RvclR5cGUpO1xyXG4gICAgcmV0dXJuIHRvb2w7XHJcbiAgfVxyXG4gIHNhdmluZyA9IGZhbHNlO1xyXG4gIGVsZW1lbnQ/OiBhbnk7XHJcbiAgZGlydHkgPSBmYWxzZTtcclxuICBwYXJhbXM6IHt9O1xyXG4gIHBhbGV0dGVzOiBQYWxldHRlTW9kZWxbXSA9IFtdO1xyXG4gIGRpYWdyYW1Db25zdHJhaW50czogRGlhZ3JhbUNvbnN0cmFpbnRzID0gRGlhZ3JhbUNvbnN0cmFpbnRzLkRlZmF1bHQgfCBEaWFncmFtQ29uc3RyYWludHMuQnJpZGdpbmcgfCBEaWFncmFtQ29uc3RyYWludHMuVXNlckludGVyYWN0aW9uIHwgRGlhZ3JhbUNvbnN0cmFpbnRzLlpvb207XHJcbiAgZGlhZ3JhbVRvb2w6IERpYWdyYW1Ub29scyA9IERpYWdyYW1Ub29scy5EZWZhdWx0O1xyXG4gIC8vRGVmaW5lcyB0aGUgdXNlciBoYW5kbGUgY29sbGVjdGlvbiBmb3Igbm9kZXMgaW4gZGlhZ3JhbVxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3VzZXJIYW5kbGVzOiBVc2VySGFuZGxlTW9kZWxbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogJ2Nvbm5lY3QnLFxyXG4gICAgICBwYXRoRGF0YTogTElOS19QQVRILFxyXG4gICAgICB2aXNpYmxlOiB0cnVlLFxyXG4gICAgICBvZmZzZXQ6IDAsXHJcbiAgICAgIHNpZGU6ICdSaWdodCcsXHJcbiAgICAgIGRpc3BsYWNlbWVudDogMjAsXHJcbiAgICAgIG1hcmdpbjogeyB0b3A6IDAsIGJvdHRvbTogMCwgbGVmdDogMCwgcmlnaHQ6IDAgfVxyXG4gICAgfVxyXG4gIF07XHJcbiAgLy9TeW1ib2xQYWxldHRlIFByb3BlcnRpZXNcclxuICByZWFkb25seSBzeW1ib2xNYXJnaW46IE1hcmdpbk1vZGVsID0geyBsZWZ0OiAxMCwgcmlnaHQ6IDEwLCB0b3A6IDEwLCBib3R0b206IDEwIH07XHJcbiAgcmVhZG9ubHkgc25hcFNldHRpbmdzOiBTbmFwU2V0dGluZ3NNb2RlbCA9IHtcclxuICB9O1xyXG4gIHJlYWRvbmx5IHNlbGVjdGVkSXRlbXM6IFNlbGVjdG9yTW9kZWwgPSB7XHJcbiAgfTtcclxuICByZWFkb25seSBzY3JvbGxTZXR0aW5nczogU2Nyb2xsU2V0dGluZ3NNb2RlbCA9IHtcclxuICAgIG1pblpvb206IC41LFxyXG4gICAgbWF4Wm9vbTogMi41XHJcbiAgfTtcclxuICBwcml2YXRlIF9ydWxlckNvbG9yID0gdGhpcy5fc2Vzc2lvbi5nZXRBY2NlbnQoMTAwKTtcclxuICByZWFkb25seSBydWxlclNldHRpbmdzOiBSdWxlclNldHRpbmdzTW9kZWwgPSB7XHJcbiAgICBob3Jpem9udGFsUnVsZXI6IHsgbWFya2VyQ29sb3I6IHRoaXMuX3J1bGVyQ29sb3IgfSxcclxuICAgIHZlcnRpY2FsUnVsZXI6IHsgbWFya2VyQ29sb3I6IHRoaXMuX3J1bGVyQ29sb3IgfVxyXG4gIH07XHJcbiAgcHJpdmF0ZSBfZm9ybTogRm9ybTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAvKiogd29ya2Zsb3cgY3RvciAqL1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcHM6IFByb21wdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zZXJ2aWNlOiBGb3JtU2VydmljZSxcclxuICAgIHByaXZhdGUgX3BhbmU6IFBhbmVSZWY8V29ya2Zsb3dDb21wb25lbnQ+LFxyXG4gICAgcHJpdmF0ZSBfcm91dGVyOiBQYW5lc1JvdXRlcixcclxuICAgIHByaXZhdGUgX3Nlc3Npb246IFNlc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlKSB7XHJcbiAgICB0aGlzLl9wYWxldHRlcygpO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpIHtcclxuICB9XHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zeW1ib2xQYWxldHRlID0gbmV3IFN5bWJvbFBhbGV0dGUoe1xyXG4gICAgICBleHBhbmRNb2RlOiAnTXVsdGlwbGUnLFxyXG4gICAgICBwYWxldHRlczogdGhpcy5wYWxldHRlcyxcclxuICAgICAgd2lkdGg6IFwiMTAwJVwiLCBoZWlnaHQ6IFwiMTAwJVwiLCBzeW1ib2xIZWlnaHQ6IDgwLFxyXG4gICAgICBlbmFibGVSdGw6IGZhbHNlLCBlbmFibGVBbmltYXRpb246IGZhbHNlLCBzeW1ib2xXaWR0aDogODAsXHJcbiAgICAgIHN5bWJvbE1hcmdpbjogdGhpcy5zeW1ib2xNYXJnaW4sXHJcbiAgICAgIGdldFN5bWJvbEluZm86IHRoaXMuZ2V0U3ltYm9sSW5mby5iaW5kKHRoaXMpLFxyXG4gICAgICBnZXROb2RlRGVmYXVsdHM6IHRoaXMuZ2V0U3ltYm9sRGVmYXVsdHMuYmluZCh0aGlzKVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnN5bWJvbFBhbGV0dGUuYXBwZW5kVG8odGhpcy5zeW1ib2xQYWxldHRlRWwubmF0aXZlRWxlbWVudCk7XHJcbiAgICB0aGlzLmRpYWdyYW0gPSBuZXcgRGlhZ3JhbSh7XHJcbiAgICAgIHdpZHRoOiBcIjEwMCVcIiwgaGVpZ2h0OiBcIjEwMCVcIixcclxuICAgICAgc25hcFNldHRpbmdzOiB0aGlzLnNuYXBTZXR0aW5ncyxcclxuICAgICAgZ2V0Q29ubmVjdG9yRGVmYXVsdHM6IHRoaXMuY29ubkRlZmF1bHRzLmJpbmQodGhpcyksXHJcbiAgICAgIGNvbnN0cmFpbnRzOiB0aGlzLmRpYWdyYW1Db25zdHJhaW50cyxcclxuICAgICAgdG9vbDogdGhpcy5kaWFncmFtVG9vbCxcclxuICAgICAgZ2V0Tm9kZURlZmF1bHRzOiB0aGlzLm5vZGVEZWZhdWx0cy5iaW5kKHRoaXMpLFxyXG4gICAgICBnZXRDdXN0b21Ub29sOiB0aGlzLmdldFRvb2wuYmluZCh0aGlzKSxcclxuICAgICAgc2Nyb2xsU2V0dGluZ3M6IHRoaXMuc2Nyb2xsU2V0dGluZ3MsXHJcbiAgICAgIHNlbGVjdGVkSXRlbXM6IHRoaXMuc2VsZWN0ZWRJdGVtcyxcclxuICAgICAgcnVsZXJTZXR0aW5nczogdGhpcy5ydWxlclNldHRpbmdzLFxyXG4gICAgICBkcmFnRW50ZXI6IHRoaXMuZHJhZ0VudGVyLmJpbmQodGhpcyksXHJcbiAgICAgIGNvbm5lY3Rpb25DaGFuZ2U6IHRoaXMuY2hhbmdlLmJpbmQodGhpcyksXHJcbiAgICAgIGNvbGxlY3Rpb25DaGFuZ2U6IHRoaXMuY2hhbmdlLmJpbmQodGhpcyksXHJcbiAgICAgIHByb3BlcnR5Q2hhbmdlOiB0aGlzLnByb3BlcnR5Q2hhbmdlLmJpbmQodGhpcyksXHJcbiAgICAgIHNlbGVjdGlvbkNoYW5nZTogdGhpcy5zZWxlY3Rpb25DaGFuZ2UuYmluZCh0aGlzKSxcclxuICAgIH0sIHRoaXMuZGlhZ3JhbUVsLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgdGhpcy5kaWFncmFtQ3JlYXRlKCk7XHJcbiAgfVxyXG4gIHB1YmxpYyBkaWFncmFtQ3JlYXRlKCk6IHZvaWQge1xyXG4gICAgcGFsZXR0ZUljb25DbGljaygpO1xyXG4gICAgdGhpcy5fcGFuZS5wYXJhbXNDaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZShwID0+IHtcclxuICAgICAgY29uc3QgaWQgPSBwWydpZCddO1xyXG4gICAgICB0aGlzLl9mb3JtID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmZvcm1zLmZpbmQoZiA9PiBmLm5hbWUgPT09IGlkKTtcclxuICAgICAgdGhpcy5fcGFuZS50aXRsZSA9IHRoaXMuX2Zvcm0udGl0bGU7XHJcbiAgICAgIHRoaXMucGFyYW1zID0geyBpZDogdGhpcy5fZm9ybS5uYW1lIH07XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX3BhbmUuZGF0YUNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKGQgPT4ge1xyXG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuX2Zvcm0sIGQuZm9ybSk7XHJcbiAgICAgIGNvbnN0IGZsb3cgPSB0aGlzLl9mb3JtLndvcmtmbG93O1xyXG4gICAgICB0aGlzLmRpYWdyYW0ubm9kZXMgPSBmbG93Lm5vZGVzO1xyXG4gICAgICB0aGlzLmRpYWdyYW0uY29ubmVjdG9ycyA9IGZsb3cuY29ubmVjdG9ycztcclxuICAgICAgdGhpcy5kaWFncmFtLmRhdGFCaW5kKCk7XHJcbiAgICAgIHRoaXMuZGlhZ3JhbS5hZGQodGhpcy5fdmVyc2lvbk5vZGUoZmxvdy52ZXJzaW9uKSk7XHJcbiAgICAgIHRoaXMuZGlhZ3JhbS5maXRUb1BhZ2UoKTtcclxuICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9wYW5lLnJlc2l6ZS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95KSkuc3Vic2NyaWJlKCgpID0+XHJcbiAgICAgIHRoaXMuZGlhZ3JhbS5yZWZyZXNoKCkpO1xyXG4gIH1cclxuICBwcml2YXRlIF9wYWxldHRlcygpIHtcclxuICAgIHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5ub2Rlcy5mb3JFYWNoKG4gPT4ge1xyXG4gICAgICBjb25zdCBub2RlOiBOb2RlTW9kZWwgPSB7XHJcbiAgICAgICAgaWQ6IG4ubmFtZSxcclxuICAgICAgICBzaGFwZTogbi5zaGFwZSxcclxuICAgICAgICBhZGRJbmZvOiB7XHJcbiAgICAgICAgICBub2RlVHlwZTogbi5uYW1lLFxyXG4gICAgICAgICAgdGl0bGU6IG4udGl0bGVcclxuICAgICAgICB9LFxyXG4gICAgICB9O1xyXG4gICAgICAobm9kZSBhcyBhbnkpLm5vZGUgPSBuLm5hbWU7XHJcbiAgICAgIGxldCBwYWxldHRlID0gdGhpcy5wYWxldHRlcy5maW5kKHAgPT4gcC50aXRsZSA9PT0gKG4ucGFsZXR0ZSB8fCAnJykpO1xyXG4gICAgICBpZiAoIXBhbGV0dGUpIHtcclxuICAgICAgICBwYWxldHRlID0geyBpZDogYF8ke24ucGFsZXR0ZX1gLCBleHBhbmRlZDogdHJ1ZSwgdGl0bGU6IG4ucGFsZXR0ZSB8fCAnJywgc3ltYm9sczogW10gfTtcclxuICAgICAgICB0aGlzLnBhbGV0dGVzLnB1c2gocGFsZXR0ZSk7XHJcbiAgICAgIH1cclxuICAgICAgcGFsZXR0ZS5zeW1ib2xzLnB1c2gobm9kZSk7XHJcbiAgICB9KTtcclxuICAgIC8vdGhpcy5wYWxldHRlcy5wdXNoKHsgaWQ6ICdkZXNpZ24nLCB0aXRsZTogdGhpcy5fdHJhbnNsYXRpb24uZ2V0KCdEZXNpZ24nKSwgc3ltYm9sczogW3sgaWQ6ICd0ZXh0Jywgc2hhcGU6IHsgdHlwZTogJ1RleHQnLCB0ZXh0Q29udGVudDogJ1QnIH0sIGFkZEluZm86IHsgdGl0bGU6IHRoaXMuX3RyYW5zbGF0aW9uLmdldCgnVGV4dCcpIH0gfV0gfSk7XHJcbiAgICAvKnRoaXMucGFsZXR0ZXMucHVzaChzd2ltbGFuZSApOyovXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF92ZXJzaW9uTm9kZSh2ZXJzaW9uOiBudW1iZXIpOiBOb2RlTW9kZWwge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgaWQ6ICd2ZXJzaW9uJyxcclxuICAgICAgc2hhcGU6IHtcclxuICAgICAgICB0eXBlOiAnVGV4dCcsXHJcbiAgICAgICAgY29udGVudDogdGhpcy5fdHJhbnNsYXRlLmdldCgnRGlhZ3JhbVZlcnNpb24nLCB2ZXJzaW9uIHx8IDApXHJcbiAgICAgIH0sXHJcbiAgICAgIG9mZnNldFk6IDUsXHJcbiAgICAgIG9mZnNldFg6IDUsXHJcbiAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgZm9udFNpemU6IDUwLFxyXG4gICAgICAgIGNvbG9yOiB0aGlzLl9zZXNzaW9uLnRoZW1lLmRhcmsgPyAnd2hpdGUnIDogJ2JsYWNrJyxcclxuICAgICAgICBvcGFjaXR5OiAuMVxyXG4gICAgICB9IGFzIFRleHRTdHlsZU1vZGVsLFxyXG4gICAgICBjb25zdHJhaW50czogTm9kZUNvbnN0cmFpbnRzLlJlYWRPbmx5LFxyXG4gICAgICB6SW5kZXg6IC0xXHJcbiAgICB9IGFzIFRleHRNb2RlbDtcclxuICB9XHJcbiAgbm9kZURlZmF1bHRzID0gKCk6IE5vZGVNb2RlbCA9PiB7XHJcbiAgICBjb25zdCBvYmo6IE5vZGVNb2RlbCA9IHtcclxuICAgICAgc3R5bGU6IHtcclxuICAgICAgICBmaWxsOiAndHJhbnNwYXJlbnQnLFxyXG4gICAgICAgIHN0cm9rZUNvbG9yOiB0aGlzLl9zZXNzaW9uLnRoZW1lLmRhcmsgPyAnd2hpdGUnIDogJ2JsYWNrJyxcclxuICAgICAgICBzdHJva2VXaWR0aDogMVxyXG4gICAgICB9LFxyXG4gICAgICBhbm5vdGF0aW9uczogW3tcclxuICAgICAgICBzdHlsZToge1xyXG4gICAgICAgICAgY29sb3I6IHRoaXMuX3Nlc3Npb24udGhlbWUuZGFyayA/ICd3aGl0ZScgOiAnYmxhY2snLFxyXG4gICAgICAgICAgZmlsbDogJ3RyYW5zcGFyZW50JyxcclxuICAgICAgICAgIG9wYWNpdHk6IC44XHJcbiAgICAgICAgfVxyXG4gICAgICB9XVxyXG4gICAgfTtcclxuICAgIGlmIChvYmoud2lkdGggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICBvYmoud2lkdGggPSAxNDU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCByYXRpbzogbnVtYmVyID0gMTAwIC8gb2JqLndpZHRoO1xyXG4gICAgICBvYmoud2lkdGggPSAxMDA7XHJcbiAgICAgIG9iai5oZWlnaHQgKj0gcmF0aW87XHJcbiAgICB9XHJcbiAgICBvYmouY29uc3RyYWludHMgPSBOb2RlQ29uc3RyYWludHMuRGVmYXVsdCB8IE5vZGVDb25zdHJhaW50cy5Bc3BlY3RSYXRpbztcclxuICAgIG9iai5wb3J0cyA9IGdldFBvcnRzKCk7XHJcbiAgICByZXR1cm4gb2JqO1xyXG4gIH1cclxuICBwdWJsaWMgY29ubkRlZmF1bHRzID0gKG9iajogQ29ubmVjdG9yTW9kZWwpOiB2b2lkID0+IHtcclxuICAgIG9iai5jb25zdHJhaW50cyA9IENvbm5lY3RvckNvbnN0cmFpbnRzLkRlZmF1bHQgfCBDb25uZWN0b3JDb25zdHJhaW50cy5CcmlkZ2luZyB8IENvbm5lY3RvckNvbnN0cmFpbnRzLkRyYWdTZWdtZW50VGh1bWI7XHJcbiAgICBvYmouc3R5bGUuc3Ryb2tlQ29sb3IgPSB0aGlzLl9zZXNzaW9uLnRoZW1lLmRhcmsgPyAnd2hpdGUnIDogJ2JsYWNrJztcclxuICB9XHJcbiAgcHVibGljIGdldFN5bWJvbEluZm8oc3ltYm9sOiBOb2RlTW9kZWwpOiBTeW1ib2xJbmZvIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGZpdDogdHJ1ZSxcclxuICAgICAgdG9vbHRpcDogKHN5bWJvbC5hZGRJbmZvIGFzIGFueSkudGl0bGUsXHJcbiAgICAgIGRlc2NyaXB0aW9uOiB7IHRleHQ6IChzeW1ib2wuYWRkSW5mbyBhcyBhbnkpLnRpdGxlLCBvdmVyZmxvdzogJ1dyYXAnLCB3cmFwOiAnV3JhcFdpdGhPdmVyZmxvdycgfVxyXG4gICAgfTtcclxuICB9XHJcbiAgcHVibGljIGdldFN5bWJvbERlZmF1bHRzKHN5bWJvbDogTm9kZU1vZGVsKTogdm9pZCB7XHJcbiAgICBzeW1ib2wud2lkdGggPSBzeW1ib2wuaGVpZ2h0ID0gNDA7XHJcbiAgICBzeW1ib2wuY29uc3RyYWludHMgPSBOb2RlQ29uc3RyYWludHMuRGVmYXVsdCB8IE5vZGVDb25zdHJhaW50cy5Bc3BlY3RSYXRpbztcclxuICB9XHJcbiAgcGFuKCkge1xyXG4gICAgdGhpcy5kaWFncmFtQ29uc3RyYWludHMgPSB0aGlzLmRpYWdyYW1Db25zdHJhaW50cyB8IERpYWdyYW1Db25zdHJhaW50cy5QYW47XHJcbiAgICB0aGlzLmRpYWdyYW1Ub29sID0gRGlhZ3JhbVRvb2xzLlpvb21QYW47XHJcbiAgfVxyXG4gIGN1cnNvcigpIHtcclxuICAgIHRoaXMuZGlhZ3JhbUNvbnN0cmFpbnRzID0gdGhpcy5kaWFncmFtQ29uc3RyYWludHMgJiB+RGlhZ3JhbUNvbnN0cmFpbnRzLlBhbjtcclxuICAgIHRoaXMuZGlhZ3JhbVRvb2wgPSBEaWFncmFtVG9vbHMuRGVmYXVsdDtcclxuICB9XHJcbiAgc2VsZWN0aW9uQ2hhbmdlKCkge1xyXG4gICAgY29uc3QgeyBub2RlcywgY29ubmVjdG9ycyB9ID0gdGhpcy5kaWFncmFtLnNlbGVjdGVkSXRlbXM7XHJcbiAgICBpZiAoY29ubmVjdG9ycy5sZW5ndGggfHwgbm9kZXMubGVuZ3RoKSB7XHJcbiAgICAgIGlmIChub2Rlcy5sZW5ndGggPT09IDEgJiYgbm9kZXNbMF0uYWRkSW5mbykge1xyXG4gICAgICAgIHRoaXMuZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zLmNvbnN0cmFpbnRzID0gU2VsZWN0b3JDb25zdHJhaW50cy5BbGwgfCBTZWxlY3RvckNvbnN0cmFpbnRzLlVzZXJIYW5kbGU7XHJcbiAgICAgICAgdGhpcy5kaWFncmFtLnNlbGVjdGVkSXRlbXMudXNlckhhbmRsZXMgPSB0aGlzLl91c2VySGFuZGxlcztcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHRoaXMuZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zLmNvbnN0cmFpbnRzID0gU2VsZWN0b3JDb25zdHJhaW50cy5BbGwgXiBTZWxlY3RvckNvbnN0cmFpbnRzLlVzZXJIYW5kbGU7XHJcblxyXG4gICAgICBpZiAoY29ubmVjdG9ycy5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBjb25uZWN0b3IgPSBjb25uZWN0b3JzWzBdO1xyXG4gICAgICAgIGNvbm5lY3RvcnMuZm9yRWFjaChjID0+IHsgaWYgKCFjLmFkZEluZm8pIGMuYWRkSW5mbyA9IHt9IH0pO1xyXG4gICAgICAgIGNvbnN0IHR5cGUgPSBjb25uZWN0b3IudHlwZTtcclxuICAgICAgICB0aGlzLmNvbm5lY3RvclR5cGUgPSBjb25uZWN0b3JzLmxlbmd0aCA9PT0gMSB8fCBjb25uZWN0b3JzLmV2ZXJ5KGMgPT4gYy50eXBlID09PSB0eXBlKSA/IHR5cGUgOiBudWxsO1xyXG4gICAgICAgIGlmIChjb25uZWN0b3IuYW5ub3RhdGlvbnMubGVuZ3RoKVxyXG4gICAgICAgICAgdGhpcy5mb250U2l6ZSA9IGNvbm5lY3Rvci5hbm5vdGF0aW9uc1swXS5zdHlsZS5mb250U2l6ZTtcclxuICAgICAgICB0aGlzLmNvbm5lY3RvclR5cGUgPSBjb25uZWN0b3JzLmxlbmd0aCA9PT0gMSB8fCBjb25uZWN0b3JzLmV2ZXJ5KGMgPT4gYy50eXBlID09PSB0eXBlKSA/IHR5cGUgOiBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChub2Rlcy5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBub2RlID0gbm9kZXNbMF0sXHJcbiAgICAgICAgICBhZGRJbmZvID0gbm9kZS5hZGRJbmZvIGFzIGFueTtcclxuICAgICAgICBpZiAoYWRkSW5mbyAmJiBhZGRJbmZvLm5vZGVUeXBlKSB7XHJcbiAgICAgICAgICBpZiAobm9kZS5hbm5vdGF0aW9ucy5sZW5ndGgpXHJcbiAgICAgICAgICAgIHRoaXMuZm9udFNpemUgPSBub2RlLmFubm90YXRpb25zWzBdLnN0eWxlLmZvbnRTaXplO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9yb3V0ZXIuY29sbGFwc2UoKVxyXG4gICAgICB0aGlzLl9yb3V0ZXIubmF2aWdhdGUoV29ya2Zsb3dOb2RlQ29tcG9uZW50LCB7XHJcbiAgICAgICAgc3RhdGU6IHtcclxuICAgICAgICAgIG5vZGVzLCBjb25uZWN0b3JzXHJcbiAgICAgICAgfSxcclxuICAgICAgICBwb2xpY3k6IE9wZW5Qb2xpY3kuVGFiLFxyXG4gICAgICAgIGV4cGFuZGFibGU6IGZhbHNlLFxyXG4gICAgICAgIGdyb3VwOiAnJ1xyXG4gICAgICB9KS50aGVuKHAgPT4ge1xyXG4gICAgICAgIChwLmluc3RhbmNlIGFzIFdvcmtmbG93Tm9kZUNvbXBvbmVudCkuY2hhbmdlLlxyXG4gICAgICAgICAgcGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmRpYWdyYW0uZGF0YUJpbmQoKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGVsc2VcclxuICAgICAgdGhpcy5fcm91dGVyLmNvbGxhcHNlKCk7XHJcbiAgfVxyXG4gIGFsaWduKHZhbHVlOiBBbGlnbm1lbnRPcHRpb25zKSB7XHJcbiAgICBmdW5jdGlvbiBhbGlnbihuOiBOb2RlTW9kZWwgfCBDb25uZWN0b3JNb2RlbCkge1xyXG4gICAgICBuLmFubm90YXRpb25zLmxlbmd0aCAmJiBPYmplY3QuYXNzaWduKG4uYW5ub3RhdGlvbnNbMF0sIHtcclxuICAgICAgICBvZmZzZXQ6IHtcclxuICAgICAgICAgIHg6IHZhbHVlID09PSAnUmlnaHQnID8gMSA6IHZhbHVlID09PSAnTGVmdCcgPyAwIDogLjUsXHJcbiAgICAgICAgICB5OiB2YWx1ZSA9PT0gJ1RvcCcgPyAwIDogdmFsdWUgPT09ICdCb3R0b20nID8gMSA6IC41XHJcbiAgICAgICAgfSxcclxuICAgICAgICB2ZXJ0aWNhbEFsaWdubWVudDogdmFsdWUgPT09ICdUb3AnID8gJ0JvdHRvbScgOiB2YWx1ZSA9PT0gJ0JvdHRvbScgPyAnVG9wJyA6ICdDZW50ZXInLFxyXG4gICAgICAgIGhvcml6b250YWxBbGlnbm1lbnQ6IHZhbHVlID09PSAnUmlnaHQnID8gJ0xlZnQnIDogdmFsdWUgPT09ICdMZWZ0JyA/ICdSaWdodCcgOiAnQ2VudGVyJ1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zLm5vZGVzLmZvckVhY2goYWxpZ24pO1xyXG4gICAgdGhpcy5kaWFncmFtLnNlbGVjdGVkSXRlbXMuY29ubmVjdG9ycy5mb3JFYWNoKGFsaWduKTtcclxuICAgIHRoaXMuYWxpZ25tZW50ID0gdmFsdWU7XHJcbiAgICB0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuICB9XHJcbiAgcHVibGljIGRyYWdFbnRlcihhcmdzOiBJRHJhZ0VudGVyRXZlbnRBcmdzKTogdm9pZCB7XHJcbiAgICBjb25zdCBvYmo6IE5vZGVNb2RlbCA9IGFyZ3MuZWxlbWVudCBhcyBOb2RlTW9kZWw7XHJcbiAgICBpZiAob2JqIGluc3RhbmNlb2YgTm9kZSkge1xyXG4gICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IG9iajtcclxuICAgICAgb2JqLndpZHRoID0gMTAwO1xyXG4gICAgICBvYmouaGVpZ2h0ICo9IDEwMCAvIHdpZHRoO1xyXG4gICAgICBvYmoub2Zmc2V0WCArPSAob2JqLndpZHRoIC0gd2lkdGgpIC8gMjtcclxuICAgICAgb2JqLm9mZnNldFkgKz0gKG9iai5oZWlnaHQgLSBoZWlnaHQpIC8gMjtcclxuICAgICAgb2JqLnN0eWxlID0geyBmaWxsOiAnd2hpdGUnLCBzdHJva2VDb2xvcjogJ2JsYWNrJyB9O1xyXG4gICAgfVxyXG4gIH1cclxuICBwcm9wZXJ0eUNoYW5nZShlKSB7XHJcbiAgICBpZiAoZS5jYXVzZSAhPT0gMikgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgfVxyXG4gIGNoYW5nZSgpIHtcclxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gIH1cclxuICBhZGRUZXh0KCkge1xyXG4gICAgdGhpcy5kaWFncmFtLmRyYXdpbmdPYmplY3QgPSB7XHJcbiAgICAgIHNoYXBlOiB7XHJcbiAgICAgICAgdHlwZTogJ1RleHQnLFxyXG4gICAgICB9LFxyXG4gICAgICBjb25zdHJhaW50czogTm9kZUNvbnN0cmFpbnRzLkRlZmF1bHQgJiB+Tm9kZUNvbnN0cmFpbnRzLkluQ29ubmVjdCAmIH5Ob2RlQ29uc3RyYWludHMuT3V0Q29ubmVjdFxyXG4gICAgfSBhcyBOb2RlTW9kZWw7XHJcbiAgICB0aGlzLmRpYWdyYW1Ub29sID0gRGlhZ3JhbVRvb2xzLkRyYXdPbmNlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDdHJsLXMgc2F2ZVxyXG4gICAqIEBwYXJhbSBldmVudFxyXG4gICAqL1xyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24nLCBbJyRldmVudCddKVxyXG4gIGhhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgIGlmICh0aGlzLmRpcnR5ICYmIGV2ZW50LmN0cmxLZXkgJiYgKGV2ZW50LndoaWNoID09PSA4MyB8fCBldmVudC53aGljaCA9PT0gMTE1KSkge1xyXG4gICAgICB0aGlzLnNhdmUoKTtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICB9XHJcbiAgYmdDaGFuZ2UodmFsOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zLm5vZGVzLmZvckVhY2gobiA9PiBuLnN0eWxlLmZpbGwgPSB2YWwpO1xyXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgfVxyXG4gIGNvbG9yQ2hhbmdlKHZhbDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmRpYWdyYW0uc2VsZWN0ZWRJdGVtcy5ub2Rlcy5mb3JFYWNoKG4gPT4gbi5hbm5vdGF0aW9ucy5mb3JFYWNoKGEgPT4gYS5zdHlsZS5jb2xvciA9IHZhbCkpO1xyXG4gICAgdGhpcy5kaWFncmFtLnNlbGVjdGVkSXRlbXMuY29ubmVjdG9ycy5mb3JFYWNoKGMgPT4gYy5hbm5vdGF0aW9ucy5mb3JFYWNoKGEgPT4gYS5zdHlsZS5jb2xvciA9IHZhbCkpO1xyXG4gICAgdGhpcy5kaXJ0eSA9IHRydWU7XHJcbiAgfVxyXG4gIGNvbm5lY3RvclR5cGVDaGFuZ2UodHlwZTogU2VnbWVudHMpIHtcclxuICAgIHRoaXMuZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zLmNvbm5lY3RvcnMuZm9yRWFjaChjID0+IGMudHlwZSA9IHR5cGUpO1xyXG4gICAgdGhpcy5jb25uZWN0b3JUeXBlID0gdHlwZTtcclxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gIH1cclxuICBzaXplQ2hhbmdlKHZhbDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmRpYWdyYW0uc2VsZWN0ZWRJdGVtcy5ub2Rlcy5mb3JFYWNoKG4gPT4gbi5hbm5vdGF0aW9ucy5mb3JFYWNoKGEgPT4gYS5zdHlsZS5mb250U2l6ZSA9IHBhcnNlSW50KHZhbCkpKTtcclxuICAgIHRoaXMuZGlhZ3JhbS5kYXRhQmluZCgpO1xyXG4gIH1cclxuICBzdHJva2VDaGFuZ2UodmFsOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zLmNvbm5lY3RvcnMuZm9yRWFjaChjID0+IHtcclxuICAgICAgYy5zdHlsZS5zdHJva2VDb2xvciA9IHZhbDtcclxuICAgICAgaWYgKGMuYW5ub3RhdGlvbnMpIGMuYW5ub3RhdGlvbnNbMF0uc3R5bGUuY29sb3IgPSB2YWw7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zLm5vZGVzLmZvckVhY2gobiA9PiBuLnN0eWxlLnN0cm9rZUNvbG9yID0gdmFsKTtcclxuICAgIHRoaXMuZGlydHkgPSB0cnVlO1xyXG4gIH1cclxuICBzYXZlKCk6IFByb21pc2U8YW55PiB7XHJcbiAgICB0aGlzLmRpYWdyYW0uc2VyaWFsaXphdGlvblNldHRpbmdzID0ge3ByZXZlbnREZWZhdWx0czogdHJ1ZX07XHJcbiAgICBjb25zdCBvYmogPSBKU09OLnBhcnNlKHRoaXMuZGlhZ3JhbS5zYXZlRGlhZ3JhbSgpKTtcclxuICAgIHRoaXMuX2Zvcm0ud29ya2Zsb3cuY29ubmVjdG9ycyA9IG9iai5jb25uZWN0b3JzO1xyXG4gICAgdGhpcy5fZm9ybS53b3JrZmxvdy5ub2RlcyA9IG9iai5ub2Rlcy5maWx0ZXIobiA9PiBuLmlkICE9PSAndmVyc2lvbicpLm1hcCgobjogTm9kZU1vZGVsKSA9PiB7XHJcbiAgICAgIG4ub2Zmc2V0WCA9IE1hdGgucm91bmQobi5vZmZzZXRYKTtcclxuICAgICAgbi5vZmZzZXRZID0gTWF0aC5yb3VuZChuLm9mZnNldFkpO1xyXG4gICAgICByZXR1cm4gbjtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5zYXZpbmcgPSB0cnVlO1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlcnZpY2Uuc2F2ZSh0aGlzLl9mb3JtKS50b1Byb21pc2UoKS50aGVuKHYgPT4ge1xyXG4gICAgICB0aGlzLnBzLnRvYXN0KCdDaGFuZ2VzU2F2ZWQnKTtcclxuICAgICAgaWYgKHRoaXMuX2Zvcm0ud29ya2Zsb3cudmVyc2lvbiA8IHYpIHtcclxuICAgICAgICB0aGlzLnBzLnRvYXN0KCdEaWFncmFtVmVyc2lvbicsIHYpO1xyXG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmRpYWdyYW0uZ2V0Tm9kZU9iamVjdCgndmVyc2lvbicpO1xyXG4gICAgICAgIChub2RlLnNoYXBlIGFzIFRleHRNb2RlbCkuY29udGVudCA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQoJ0RpYWdyYW1WZXJzaW9uJywgdik7XHJcbiAgICAgICAgdGhpcy5kaWFncmFtLmRhdGFCaW5kKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5fZm9ybS53b3JrZmxvdy52ZXJzaW9uID0gdjtcclxuICAgICAgdGhpcy5kaXJ0eSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNhdmluZyA9IGZhbHNlO1xyXG4gICAgfSwgKCkgPT4ge1xyXG4gICAgICB0aGlzLnBzLmVycm9yKCk7XHJcbiAgICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnN5bWJvbFBhbGV0dGU/LmRlc3Ryb3koKTtcclxuICAgIHRoaXMuZGlhZ3JhbT8uZGVzdHJveSgpO1xyXG4gICAgdGhpcy5fZGVzdHJveS5uZXh0KCk7XHJcbiAgICB0aGlzLl9kZXN0cm95LmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxtYXQtdG9vbGJhcj5cclxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwidG9vbHMgPSAhdG9vbHNcIiBbYml6ZG9jVG9vbHRpcF09XCInQ29sbGFwc2UnIHwgdHJhbnNsYXRlXCI+PG1hdC1pY29uPnZpZXdfc2lkZWJhcjwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgPGJ1dHRvbiBtYXQtYnV0dG9uIChjbGljayk9XCJzYXZlKClcIiBjb2xvcj1cInByaW1hcnlcIiBbZGlzYWJsZWRdPVwiIWRpcnR5IHx8IHNhdmluZ1wiPnt7J1NhdmVDaGFuZ2VzJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XHJcbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImRpYWdyYW0uZml0VG9QYWdlKClcIiBbYml6ZG9jVG9vbHRpcF09XCInRml0VG9QYWdlJyB8IHRyYW5zbGF0ZVwiPjxtYXQtaWNvbj5mdWxsc2NyZWVuX2V4aXQ8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJkaWFncmFtLnVuZG8oKVwiIFtiaXpkb2NUb29sdGlwXT1cIidVbmRvJyB8IHRyYW5zbGF0ZVwiIFtkaXNhYmxlZF09XCIhZGlhZ3JhbS5oaXN0b3J5TWFuYWdlcj8uY2FuVW5kb1wiPjxtYXQtaWNvbj51bmRvPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwiZGlhZ3JhbS5yZWRvKClcIiBbYml6ZG9jVG9vbHRpcF09XCInUmVkbycgfCB0cmFuc2xhdGVcIiBbZGlzYWJsZWRdPVwiIWRpYWdyYW0uaGlzdG9yeU1hbmFnZXI/LmNhblJlZG9cIj48bWF0LWljb24+cmVkbzwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgJm5ic3A7XHJcbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInBhbigpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ1BhbicgfCB0cmFuc2xhdGVcIj48c3BhbiBjbGFzcz1cImUtaWNvbnMgc2YtaWNvbi1wYW5cIj48L3NwYW4+PC9idXR0b24+XHJcbiAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cImN1cnNvcigpXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ0N1cnNvcicgfCB0cmFuc2xhdGVcIj48c3BhbiBjbGFzcz1cImUtaWNvbnMgc2YtaWNvbi1jdXJzb3JcIj48L3NwYW4+PC9idXR0b24+XHJcbiAgPHNwYW4gY2xhc3M9XCJkaXZpZGVyXCI+PC9zcGFuPlxyXG4gIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJhZGRUZXh0KClcIiBbYml6ZG9jVG9vbHRpcF09XCInVGV4dCcgfCB0cmFuc2xhdGVcIj48bWF0LWljb24+dGl0bGU8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gIDxidXR0b24gbWF0LWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibGluZU1lbnVcIiBbZGlzYWJsZWRdPVwiZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zPy5jb25uZWN0b3JzLmxlbmd0aCA9PT0gMFwiIFtiaXpkb2NUb29sdGlwXT1cIidDb25uZWN0b3JNb2RlJ3x0cmFuc2xhdGVcIj5cclxuICAgIDxzcGFuIGNsYXNzPVwiZS1tZW51LWljb25cIiBbbmdDbGFzc109XCJ7J3NmLWljb24tc3RyYWlnaHQtbGluZSc6IGNvbm5lY3RvclR5cGUgPT09ICdTdHJhaWdodCcsXHJcbiAgICAgICAgICAnc2YtaWNvbi1vcnRob2dvbmFsLWxpbmUnOiBjb25uZWN0b3JUeXBlID09PSAnT3J0aG9nb25hbCcsXHJcbiAgICAgICAgICAnc2YtaWNvbi1iZWl6ZXItbGluZSc6IGNvbm5lY3RvclR5cGUgPT09ICdCZXppZXInfVwiPjwvc3Bhbj5cclxuICAgIDxtYXQtaWNvbj5hcnJvd19kcm9wX2Rvd248L21hdC1pY29uPlxyXG4gIDwvYnV0dG9uPlxyXG4gIDxtYXQtbWVudSAjbGluZU1lbnUgcGFuZWxDbGFzcz1cImljb24tbWVudS1wYW5lbFwiPlxyXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJjb25uZWN0b3JUeXBlQ2hhbmdlKCdTdHJhaWdodCcpXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiZS1tZW51LWljb24gc2YtaWNvbi1zdHJhaWdodC1saW5lXCI+PC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImNvbm5lY3RvclR5cGVDaGFuZ2UoJ09ydGhvZ29uYWwnKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImUtbWVudS1pY29uIHNmLWljb24tb3J0aG9nb25hbC1saW5lXCI+PC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImNvbm5lY3RvclR5cGVDaGFuZ2UoJ0JlemllcicpXCI+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiZS1tZW51LWljb24gc2YtaWNvbi1iZWl6ZXItbGluZVwiPjwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvbWF0LW1lbnU+XHJcbiAgJm5ic3A7XHJcbiAgPGJ1dHRvbiBtYXQtYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJhbGlnbk1lbnVcIiBbZGlzYWJsZWRdPVwiZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zPy5ub2Rlcy5sZW5ndGggPT09IDAgJiYgZGlhZ3JhbS5zZWxlY3RlZEl0ZW1zPy5jb25uZWN0b3JzLmxlbmd0aCA9PT0gMFwiIFtiaXpkb2NUb29sdGlwXT1cIidBbGlnbid8dHJhbnNsYXRlXCI+XHJcbiAgICA8c3BhbiBjbGFzcz1cImUtaWNvbnNcIiBbbmdDbGFzc109XCJ7J3NmLWljb24tdG9wJzogYWxpZ25tZW50ID09PSAnVG9wJyxcclxuICAgICAgICAgICdzZi1pY29uLWxlZnQnOiBhbGlnbm1lbnQgPT09ICdMZWZ0JyxcclxuICAgICAgICAgICdzZi1pY29uLWNlbnRlcic6IGFsaWdubWVudCA9PT0gJ0NlbnRlcicsXHJcbiAgICAgICAgICAnc2YtaWNvbi1ib3R0b20nOiBhbGlnbm1lbnQgPT09ICdCb3R0b20nLFxyXG4gICAgICAgICAgJ3NmLWljb24tcmlnaHQnOiBhbGlnbm1lbnQgPT09ICdSaWdodCd9XCI+PC9zcGFuPlxyXG4gICAgPG1hdC1pY29uPmFycm93X2Ryb3BfZG93bjwvbWF0LWljb24+XHJcbiAgPC9idXR0b24+XHJcbiAgPG1hdC1tZW51ICNhbGlnbk1lbnUgcGFuZWxDbGFzcz1cImljb24tbWVudS1wYW5lbFwiPlxyXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJhbGlnbignVG9wJylcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJlLWljb25zIHNmLWljb24tdG9wXCI+PC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImFsaWduKCdMZWZ0JylcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJlLWljb25zIHNmLWljb24tbGVmdFwiPjwvc3Bhbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJhbGlnbignQ2VudGVyJylcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJlLWljb25zIHNmLWljb24tY2VudGVyXCI+PC9zcGFuPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImFsaWduKCdCb3R0b20nKVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImUtaWNvbnMgc2YtaWNvbi1ib3R0b21cIj48L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwiYWxpZ24oJ1JpZ2h0JylcIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJlLWljb25zIHNmLWljb24tcmlnaHRcIj48L3NwYW4+XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L21hdC1tZW51PlxyXG48L21hdC10b29sYmFyPlxyXG48ZGl2IGNsYXNzPVwicm93IGNvbnRhaW5lclwiPlxyXG4gIDxkaXYgaWQ9XCJzeW1ib2xwYWxldHRlXCIgW3N0eWxlLmRpc3BsYXldPVwidG9vbHM/Jyc6J25vbmUnXCI+XHJcbiAgICA8ZGl2IGRpcj1cImx0clwiICNzeW1ib2xQYWxldHRlPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiAjZGlhZ3JhbSBpZD1cImRpYWdyYW1cIiBmeEZsZXggZGlyPVwibHRyXCI+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -142,13 +142,13 @@ let ManageCubeIndexUtility = class ManageCubeIndexUtility {
142
142
  this._destroy.next();
143
143
  }
144
144
  };
145
- ManageCubeIndexUtility.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: ManageCubeIndexUtility, deps: [{ token: i1.Directionality }, { token: UtilityRef }, { token: i2.SessionService }, { token: i0.ViewContainerRef }, { token: i3.PromptService }, { token: i4.Overlay }], target: i0.ɵɵFactoryTarget.Component });
146
- ManageCubeIndexUtility.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", type: ManageCubeIndexUtility, selector: "ng-component", viewQueries: [{ propertyName: "editTmpl", first: true, predicate: ["editTmpl"], descendants: true, static: true }], ngImport: i0, template: "<mat-toolbar>\r\n <button mat-button (click)=\"save()\" [disabled]=\"!dirty\">{{'SaveChanges'|translate}}</button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"add()\"><mat-icon>add</mat-icon></button>\r\n</mat-toolbar>\r\n<mat-progress-bar [mode]=\"loading\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n<table mat-table [dataSource]=\"dataSource\">\r\n <ng-container *ngFor=\"let a of axes; let i = index\" [matColumnDef]=\"a.name\">\r\n <th mat-header-cell *matHeaderCellDef>{{a.title}}</th>\r\n <td mat-cell *matCellDef=\"let element\"> {{element.axes[names.indexOf(a.name)]| typeValue: a.dataType | async}} </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"value\">\r\n <th mat-header-cell *matHeaderCellDef>{{'Value'|translate}}</th>\r\n <td mat-cell *matCellDef=\"let element\"> {{element.value | currency : CURRENCY_CODE }} </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"options\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <button mat-icon-button><mat-icon>more_horiz</mat-icon></button>\r\n <button mat-icon-button (click)=\"remove(element, $event)\"><mat-icon>delete</mat-icon></button>\r\n </td>\r\n </ng-container>\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n <tr mat-row *matRowDef=\"let element; columns: displayedColumns;\" (click)=\"edit(element)\"></tr>\r\n</table>\r\n<ng-template #editTmpl>\r\n <form [formGroup]=\"form\">\r\n <mat-form-field *ngFor=\"let a of axes\">\r\n <bizdoc-select [placeholder]=\"a.title\" [type]=\"a.dataType\" [formControlName]=\"a.name\" required></bizdoc-select>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <input matInput type=\"number\" formControlName=\"value\" autocomplete=\"off\" required [placeholder]=\"'Value'|translate\" />\r\n </mat-form-field>\r\n </form>\r\n</ng-template>\r\n", styles: ["form{padding:8px 4px 8px 8px;flex-flow:row wrap;box-sizing:border-box;display:flex}form>*{flex:1 1 auto;box-sizing:border-box;width:50%;padding:0 5px 0 0}table{width:100%}\n"], components: [{ type: i5.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { type: i6.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i8.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { type: i9.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: i9.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i9.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { type: i10.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i11.TypeSelect, selector: "bizdoc-select", inputs: ["type", "scope", "multiple", "placeholder", "required", "disabled", "text", "value"], outputs: ["selectionChange", "textChange"] }], directives: [{ type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i9.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i9.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i9.MatCellDef, selector: "[matCellDef]" }, { type: i9.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: i9.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i9.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { type: i13.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i13.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i13.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i13.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i13.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i13.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i14.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i13.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i13.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }], pipes: { "translate": i15.TranslatePipe, "async": i12.AsyncPipe, "typeValue": i16.TypeValuePipe, "currency": i12.CurrencyPipe } });
145
+ ManageCubeIndexUtility.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: ManageCubeIndexUtility, deps: [{ token: i1.Directionality }, { token: UtilityRef }, { token: i2.SessionService }, { token: i0.ViewContainerRef }, { token: i3.PromptService }, { token: i4.Overlay }], target: i0.ɵɵFactoryTarget.Component });
146
+ ManageCubeIndexUtility.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: ManageCubeIndexUtility, selector: "ng-component", viewQueries: [{ propertyName: "editTmpl", first: true, predicate: ["editTmpl"], descendants: true, static: true }], ngImport: i0, template: "<mat-toolbar>\r\n <button mat-button (click)=\"save()\" [disabled]=\"!dirty\">{{'SaveChanges'|translate}}</button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"add()\"><mat-icon>add</mat-icon></button>\r\n</mat-toolbar>\r\n<mat-progress-bar [mode]=\"loading\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n<table mat-table [dataSource]=\"dataSource\">\r\n <ng-container *ngFor=\"let a of axes; let i = index\" [matColumnDef]=\"a.name\">\r\n <th mat-header-cell *matHeaderCellDef>{{a.title}}</th>\r\n <td mat-cell *matCellDef=\"let element\"> {{element.axes[names.indexOf(a.name)]| typeValue: a.dataType | async}} </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"value\">\r\n <th mat-header-cell *matHeaderCellDef>{{'Value'|translate}}</th>\r\n <td mat-cell *matCellDef=\"let element\"> {{element.value | currency : CURRENCY_CODE }} </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"options\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <button mat-icon-button><mat-icon>more_horiz</mat-icon></button>\r\n <button mat-icon-button (click)=\"remove(element, $event)\"><mat-icon>delete</mat-icon></button>\r\n </td>\r\n </ng-container>\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n <tr mat-row *matRowDef=\"let element; columns: displayedColumns;\" (click)=\"edit(element)\"></tr>\r\n</table>\r\n<ng-template #editTmpl>\r\n <form [formGroup]=\"form\">\r\n <mat-form-field *ngFor=\"let a of axes\">\r\n <bizdoc-select [placeholder]=\"a.title\" [type]=\"a.dataType\" [formControlName]=\"a.name\" required></bizdoc-select>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <input matInput type=\"number\" formControlName=\"value\" autocomplete=\"off\" required [placeholder]=\"'Value'|translate\" />\r\n </mat-form-field>\r\n </form>\r\n</ng-template>\r\n", styles: ["form{padding:8px 4px 8px 8px;flex-flow:row wrap;box-sizing:border-box;display:flex}form>*{flex:1 1 auto;box-sizing:border-box;width:50%;padding:0 5px 0 0}table{width:100%}\n"], components: [{ type: i5.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { type: i6.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i8.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { type: i9.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: i9.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i9.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { type: i10.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i11.TypeSelect, selector: "bizdoc-select", inputs: ["type", "scope", "multiple", "placeholder", "required", "disabled", "text", "value"], outputs: ["selectionChange", "textChange"] }], directives: [{ type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i9.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i9.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i9.MatCellDef, selector: "[matCellDef]" }, { type: i9.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: i9.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i9.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { type: i13.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i13.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i13.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i13.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i13.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i13.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i14.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i13.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i13.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }], pipes: { "translate": i15.TranslatePipe, "async": i12.AsyncPipe, "typeValue": i16.TypeValuePipe, "currency": i12.CurrencyPipe } });
147
147
  ManageCubeIndexUtility = __decorate([
148
148
  BizDoc({ selector: 'manage-cube-index' })
149
149
  ], ManageCubeIndexUtility);
150
150
  export { ManageCubeIndexUtility };
151
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: ManageCubeIndexUtility, decorators: [{
151
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: ManageCubeIndexUtility, decorators: [{
152
152
  type: Component,
153
153
  args: [{ template: "<mat-toolbar>\r\n <button mat-button (click)=\"save()\" [disabled]=\"!dirty\">{{'SaveChanges'|translate}}</button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"add()\"><mat-icon>add</mat-icon></button>\r\n</mat-toolbar>\r\n<mat-progress-bar [mode]=\"loading\" [style.visibility]=\"loading ? 'visible':'hidden'\"></mat-progress-bar>\r\n<table mat-table [dataSource]=\"dataSource\">\r\n <ng-container *ngFor=\"let a of axes; let i = index\" [matColumnDef]=\"a.name\">\r\n <th mat-header-cell *matHeaderCellDef>{{a.title}}</th>\r\n <td mat-cell *matCellDef=\"let element\"> {{element.axes[names.indexOf(a.name)]| typeValue: a.dataType | async}} </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"value\">\r\n <th mat-header-cell *matHeaderCellDef>{{'Value'|translate}}</th>\r\n <td mat-cell *matCellDef=\"let element\"> {{element.value | currency : CURRENCY_CODE }} </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"options\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <button mat-icon-button><mat-icon>more_horiz</mat-icon></button>\r\n <button mat-icon-button (click)=\"remove(element, $event)\"><mat-icon>delete</mat-icon></button>\r\n </td>\r\n </ng-container>\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n <tr mat-row *matRowDef=\"let element; columns: displayedColumns;\" (click)=\"edit(element)\"></tr>\r\n</table>\r\n<ng-template #editTmpl>\r\n <form [formGroup]=\"form\">\r\n <mat-form-field *ngFor=\"let a of axes\">\r\n <bizdoc-select [placeholder]=\"a.title\" [type]=\"a.dataType\" [formControlName]=\"a.name\" required></bizdoc-select>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <input matInput type=\"number\" formControlName=\"value\" autocomplete=\"off\" required [placeholder]=\"'Value'|translate\" />\r\n </mat-form-field>\r\n </form>\r\n</ng-template>\r\n", styles: ["form{padding:8px 4px 8px 8px;flex-flow:row wrap;box-sizing:border-box;display:flex}form>*{flex:1 1 auto;box-sizing:border-box;width:50%;padding:0 5px 0 0}table{width:100%}\n"] }]
154
154
  }], ctorParameters: function () { return [{ type: i1.Directionality }, { type: i17.UtilityRef, decorators: [{
@@ -152,15 +152,15 @@ let PatternsComponent = class PatternsComponent {
152
152
  this._destroy.complete();
153
153
  }
154
154
  };
155
- PatternsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: PatternsComponent, deps: [{ token: i1.SessionService }, { token: i2.Directionality }, { token: i3.FormBuilder }, { token: UtilityRef }, { token: i4.DatasourceService }, { token: i5.HttpClient }, { token: i6.PromptService }, { token: i7.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
156
- PatternsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", type: PatternsComponent, selector: "ng-component", viewQueries: [{ propertyName: "properties", first: true, predicate: ["properties"], descendants: true, static: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }, { propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }], ngImport: i0, template: "<mat-toolbar>\r\n <button mat-button color=\"primary\" (click)=\"save()\" [disabled]=\"!dirty\">{{'SaveChanges'|translate}}</button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"create()\" [bizdocTooltip]=\"'Add'|translate\" data-guide=\"create\"><mat-icon>add</mat-icon></button>\r\n</mat-toolbar>\r\n<table mat-table [dataSource]=\"dataSource\" matSort>\r\n <ng-container matColumnDef=\"title\" sticky>\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header>{{'Title'|translate}}</th>\r\n <td mat-cell *matCellDef=\"let element\"> {{element.title}} </td>\r\n </ng-container>\r\n <ng-container *ngFor=\"let r of roles\" [matColumnDef]=\"r.name\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header>{{r.title}}</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <mat-checkbox [checked]=\"element.roles && element.roles.indexOf(r.name) > -1\" (change)=\"toggle(element, r.name, $event)\"></mat-checkbox>\r\n </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"options\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <button mat-icon-button [matMenuTriggerFor]=\"options\"><mat-icon>more_vert</mat-icon></button>\r\n <mat-menu #options>\r\n <button mat-menu-item (click)=\"edit(element)\">{{'Edit'|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"delete(element)\">{{'Discard'|translate}}</button>\r\n </mat-menu>\r\n </td>\r\n </ng-container>\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\r\n <tr mat-row *matRowDef=\"let element; columns: displayedColumns;\"></tr>\r\n</table>\r\n<mat-paginator [pageSize]=\"PAGE_SIZE\" hidePageSize showFirstLastButtons *ngIf=\"paging\"></mat-paginator>\r\n<!-- dialog -->\r\n<ng-template #properties>\r\n <mat-dialog-content>\r\n <form [formGroup]=\"form\" autocomplete=\"off\" fxLayout=\"column\">\r\n <mat-form-field>\r\n <input matInput formControlName=\"title\" [placeholder]=\"'Title'|translate\" required />\r\n </mat-form-field>\r\n <div formGroupName=\"axes\" *ngIf=\"cube\" fxLayout.gt-sm=\"row wrap\" fxLayout=\"column wrap\"\r\n fxLayoutGap=\"5px grid\">\r\n <ng-container *ngFor=\"let a of cube.axes\">\r\n <mat-form-field *ngIf=\"include.indexOf(a.name)>-1\" fxFlex=\"50\">\r\n <input matInput\r\n [matAutocomplete]=\"segment\" [pattern]=\"pattern\"\r\n [formControlName]=\"a.name\" [placeholder]=\"a.title\" />\r\n <mat-autocomplete #segment>\r\n <mat-option *ngFor=\"let o of segments[a.name] | async\" [value]=\"o.key\">{{o.value}}</mat-option>\r\n </mat-autocomplete>\r\n <mat-error *ngIf=\"axes.controls[a.name].invalid\">{{'PatternErr' |translate}}</mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n </div>\r\n <mat-form-field>\r\n <mat-select formControlName=\"roles\" [placeholder]=\"'Roles'|translate\" multiple required>\r\n <mat-option *ngFor=\"let r of roles\" [value]=\"r.name\">{{r.title}}</mat-option>\r\n </mat-select>\r\n <mat-error *ngIf=\"form.controls.roles.hasError('required')\">{{'Required'|translate:('Roles'|translate)}}</mat-error>\r\n </mat-form-field>\r\n </form>\r\n </mat-dialog-content>\r\n <mat-dialog-actions>\r\n <button mat-button [mat-dialog-close]=\"form.value\" [disabled]=\"!form.valid\">{{'OK'| translate}}</button>\r\n <button mat-button mat-dialog-close>{{'Cancel'| translate}}</button>\r\n </mat-dialog-actions>\r\n</ng-template>\r\n<style scoped>\r\n table {\r\n width: 100%\r\n }\r\n</style>\r\n", styles: ["\n table {\n width: 100%\n }\n"], components: [{ type: i8.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { type: i9.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i11.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: i12.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { type: i13.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i14.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i14.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i15.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { type: i11.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i11.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { type: i16.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { type: i17.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i18.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { type: i19.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i20.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }], directives: [{ type: i21.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { type: i12.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { type: i11.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i11.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i11.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i11.MatCellDef, selector: "[matCellDef]" }, { type: i11.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: i22.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i14.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i11.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i11.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { type: i22.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i23.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i24.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i3.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i23.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { type: i23.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i18.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: i3.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { type: i17.MatError, selector: "mat-error", inputs: ["id"] }, { type: i7.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i7.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }], pipes: { "translate": i25.TranslatePipe, "async": i22.AsyncPipe } });
155
+ PatternsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: PatternsComponent, deps: [{ token: i1.SessionService }, { token: i2.Directionality }, { token: i3.FormBuilder }, { token: UtilityRef }, { token: i4.DatasourceService }, { token: i5.HttpClient }, { token: i6.PromptService }, { token: i7.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
156
+ PatternsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: PatternsComponent, selector: "ng-component", viewQueries: [{ propertyName: "properties", first: true, predicate: ["properties"], descendants: true, static: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }, { propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }], ngImport: i0, template: "<mat-toolbar>\r\n <button mat-button color=\"primary\" (click)=\"save()\" [disabled]=\"!dirty\">{{'SaveChanges'|translate}}</button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"create()\" [bizdocTooltip]=\"'Add'|translate\" data-guide=\"create\"><mat-icon>add</mat-icon></button>\r\n</mat-toolbar>\r\n<table mat-table [dataSource]=\"dataSource\" matSort>\r\n <ng-container matColumnDef=\"title\" sticky>\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header>{{'Title'|translate}}</th>\r\n <td mat-cell *matCellDef=\"let element\"> {{element.title}} </td>\r\n </ng-container>\r\n <ng-container *ngFor=\"let r of roles\" [matColumnDef]=\"r.name\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header>{{r.title}}</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <mat-checkbox [checked]=\"element.roles && element.roles.indexOf(r.name) > -1\" (change)=\"toggle(element, r.name, $event)\"></mat-checkbox>\r\n </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"options\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <button mat-icon-button [matMenuTriggerFor]=\"options\"><mat-icon>more_vert</mat-icon></button>\r\n <mat-menu #options>\r\n <button mat-menu-item (click)=\"edit(element)\">{{'Edit'|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"delete(element)\">{{'Discard'|translate}}</button>\r\n </mat-menu>\r\n </td>\r\n </ng-container>\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\r\n <tr mat-row *matRowDef=\"let element; columns: displayedColumns;\"></tr>\r\n</table>\r\n<mat-paginator [pageSize]=\"PAGE_SIZE\" hidePageSize showFirstLastButtons *ngIf=\"paging\"></mat-paginator>\r\n<!-- dialog -->\r\n<ng-template #properties>\r\n <mat-dialog-content>\r\n <form [formGroup]=\"form\" autocomplete=\"off\" fxLayout=\"column\">\r\n <mat-form-field>\r\n <input matInput formControlName=\"title\" [placeholder]=\"'Title'|translate\" required />\r\n </mat-form-field>\r\n <div formGroupName=\"axes\" *ngIf=\"cube\" fxLayout.gt-sm=\"row wrap\" fxLayout=\"column wrap\"\r\n fxLayoutGap=\"5px grid\">\r\n <ng-container *ngFor=\"let a of cube.axes\">\r\n <mat-form-field *ngIf=\"include.indexOf(a.name)>-1\" fxFlex=\"50\">\r\n <input matInput\r\n [matAutocomplete]=\"segment\" [pattern]=\"pattern\"\r\n [formControlName]=\"a.name\" [placeholder]=\"a.title\" />\r\n <mat-autocomplete #segment>\r\n <mat-option *ngFor=\"let o of segments[a.name] | async\" [value]=\"o.key\">{{o.value}}</mat-option>\r\n </mat-autocomplete>\r\n <mat-error *ngIf=\"axes.controls[a.name].invalid\">{{'PatternErr' |translate}}</mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n </div>\r\n <mat-form-field>\r\n <mat-select formControlName=\"roles\" [placeholder]=\"'Roles'|translate\" multiple required>\r\n <mat-option *ngFor=\"let r of roles\" [value]=\"r.name\">{{r.title}}</mat-option>\r\n </mat-select>\r\n <mat-error *ngIf=\"form.controls.roles.hasError('required')\">{{'Required'|translate:('Roles'|translate)}}</mat-error>\r\n </mat-form-field>\r\n </form>\r\n </mat-dialog-content>\r\n <mat-dialog-actions>\r\n <button mat-button [mat-dialog-close]=\"form.value\" [disabled]=\"!form.valid\">{{'OK'| translate}}</button>\r\n <button mat-button mat-dialog-close>{{'Cancel'| translate}}</button>\r\n </mat-dialog-actions>\r\n</ng-template>\r\n<style scoped>\r\n table {\r\n width: 100%\r\n }\r\n</style>\r\n", styles: ["\n table {\n width: 100%\n }\n"], components: [{ type: i8.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { type: i9.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i11.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: i12.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { type: i13.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i14.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i14.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i15.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { type: i11.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i11.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { type: i16.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }, { type: i17.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i18.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { type: i19.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i20.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }], directives: [{ type: i21.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }, { type: i12.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { type: i11.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i11.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i11.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i11.MatCellDef, selector: "[matCellDef]" }, { type: i11.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: i22.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i14.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i11.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i11.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { type: i22.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i23.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i24.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i3.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { type: i23.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { type: i23.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i18.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: i3.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { type: i17.MatError, selector: "mat-error", inputs: ["id"] }, { type: i7.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i7.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }], pipes: { "translate": i25.TranslatePipe, "async": i22.AsyncPipe } });
157
157
  PatternsComponent = __decorate([
158
158
  BizDoc({
159
159
  selector: 'bizdoc-patterns'
160
160
  })
161
161
  ], PatternsComponent);
162
162
  export { PatternsComponent };
163
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: PatternsComponent, decorators: [{
163
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: PatternsComponent, decorators: [{
164
164
  type: Component,
165
165
  args: [{ template: "<mat-toolbar>\r\n <button mat-button color=\"primary\" (click)=\"save()\" [disabled]=\"!dirty\">{{'SaveChanges'|translate}}</button>\r\n <span class=\"divider\"></span>\r\n <button mat-icon-button (click)=\"create()\" [bizdocTooltip]=\"'Add'|translate\" data-guide=\"create\"><mat-icon>add</mat-icon></button>\r\n</mat-toolbar>\r\n<table mat-table [dataSource]=\"dataSource\" matSort>\r\n <ng-container matColumnDef=\"title\" sticky>\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header>{{'Title'|translate}}</th>\r\n <td mat-cell *matCellDef=\"let element\"> {{element.title}} </td>\r\n </ng-container>\r\n <ng-container *ngFor=\"let r of roles\" [matColumnDef]=\"r.name\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header>{{r.title}}</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <mat-checkbox [checked]=\"element.roles && element.roles.indexOf(r.name) > -1\" (change)=\"toggle(element, r.name, $event)\"></mat-checkbox>\r\n </td>\r\n </ng-container>\r\n <ng-container matColumnDef=\"options\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <button mat-icon-button [matMenuTriggerFor]=\"options\"><mat-icon>more_vert</mat-icon></button>\r\n <mat-menu #options>\r\n <button mat-menu-item (click)=\"edit(element)\">{{'Edit'|translate}}</button>\r\n <mat-divider></mat-divider>\r\n <button mat-menu-item (click)=\"delete(element)\">{{'Discard'|translate}}</button>\r\n </mat-menu>\r\n </td>\r\n </ng-container>\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns; sticky: true\"></tr>\r\n <tr mat-row *matRowDef=\"let element; columns: displayedColumns;\"></tr>\r\n</table>\r\n<mat-paginator [pageSize]=\"PAGE_SIZE\" hidePageSize showFirstLastButtons *ngIf=\"paging\"></mat-paginator>\r\n<!-- dialog -->\r\n<ng-template #properties>\r\n <mat-dialog-content>\r\n <form [formGroup]=\"form\" autocomplete=\"off\" fxLayout=\"column\">\r\n <mat-form-field>\r\n <input matInput formControlName=\"title\" [placeholder]=\"'Title'|translate\" required />\r\n </mat-form-field>\r\n <div formGroupName=\"axes\" *ngIf=\"cube\" fxLayout.gt-sm=\"row wrap\" fxLayout=\"column wrap\"\r\n fxLayoutGap=\"5px grid\">\r\n <ng-container *ngFor=\"let a of cube.axes\">\r\n <mat-form-field *ngIf=\"include.indexOf(a.name)>-1\" fxFlex=\"50\">\r\n <input matInput\r\n [matAutocomplete]=\"segment\" [pattern]=\"pattern\"\r\n [formControlName]=\"a.name\" [placeholder]=\"a.title\" />\r\n <mat-autocomplete #segment>\r\n <mat-option *ngFor=\"let o of segments[a.name] | async\" [value]=\"o.key\">{{o.value}}</mat-option>\r\n </mat-autocomplete>\r\n <mat-error *ngIf=\"axes.controls[a.name].invalid\">{{'PatternErr' |translate}}</mat-error>\r\n </mat-form-field>\r\n </ng-container>\r\n </div>\r\n <mat-form-field>\r\n <mat-select formControlName=\"roles\" [placeholder]=\"'Roles'|translate\" multiple required>\r\n <mat-option *ngFor=\"let r of roles\" [value]=\"r.name\">{{r.title}}</mat-option>\r\n </mat-select>\r\n <mat-error *ngIf=\"form.controls.roles.hasError('required')\">{{'Required'|translate:('Roles'|translate)}}</mat-error>\r\n </mat-form-field>\r\n </form>\r\n </mat-dialog-content>\r\n <mat-dialog-actions>\r\n <button mat-button [mat-dialog-close]=\"form.value\" [disabled]=\"!form.valid\">{{'OK'| translate}}</button>\r\n <button mat-button mat-dialog-close>{{'Cancel'| translate}}</button>\r\n </mat-dialog-actions>\r\n</ng-template>\r\n<style scoped>\r\n table {\r\n width: 100%\r\n }\r\n</style>\r\n" }]
166
166
  }], ctorParameters: function () { return [{ type: i1.SessionService }, { type: i2.Directionality }, { type: i3.FormBuilder }, { type: i26.UtilityRef, decorators: [{
@@ -76,15 +76,15 @@ let PermissionsUtility = class PermissionsUtility {
76
76
  }, () => this._sb.error());
77
77
  }
78
78
  };
79
- PermissionsUtility.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: PermissionsUtility, deps: [{ token: UtilityRef }, { token: i1.SessionService }, { token: i2.PromptService }, { token: i3.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
80
- PermissionsUtility.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", type: PermissionsUtility, selector: "ng-component", viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true, static: true }], ngImport: i0, template: "<mat-toolbar>\r\n <button mat-button (click)=\"save()\" color=\"primary\" [disabled]=\"!dirty\">{{'SaveChanges'|translate}}</button>\r\n <span class=\"divider\"></span>\r\n <bizdoc-search-input (valueChange)=\"search($event)\"></bizdoc-search-input>\r\n <button mat-button [matMenuTriggerFor]=\"formMenu\">{{form?.title}} <mat-icon>arrow_drop_down</mat-icon></button>\r\n <mat-menu #formMenu>\r\n <button mat-menu-item *ngFor=\"let f of forms\" (click)=\"formChange(f.name)\">{{f.title}}</button>\r\n </mat-menu>\r\n</mat-toolbar>\r\n<table mat-table matSort [dataSource]=\"dataSource\">\r\n <ng-container matColumnDef=\"title\" sticky>\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header>{{'Permission' | translate}}</th>\r\n <td mat-cell *matCellDef=\"let item\"> {{item.title || item.name}}</td>\r\n </ng-container>\r\n <ng-container [matColumnDef]=\"r.name\" *ngFor=\"let r of roles\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header>{{r.title}}</th>\r\n <td mat-cell *matCellDef=\"let item\"> <mat-checkbox [checked]=\"item[r.name]\" [value]=\"r.name\" (change)=\"change(item, $event)\"></mat-checkbox> </td>\r\n </ng-container>\r\n <tr mat-header-row *matHeaderRowDef=\"displayColumns; sticky: true\"></tr>\r\n <tr mat-row *matRowDef=\"let item; columns: displayColumns;\"></tr>\r\n</table>\r\n", styles: ["table{width:100%}::ng-deep .mat-row{cursor:pointer}\n"], components: [{ type: i4.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i6.SearchInput, selector: "bizdoc-search-input", outputs: ["valueChange"] }, { type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i8.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i8.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i9.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: i10.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { type: i11.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i9.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i9.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }], directives: [{ type: i8.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { type: i9.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i9.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i9.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i9.MatCellDef, selector: "[matCellDef]" }, { type: i9.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: i9.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i9.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }], pipes: { "translate": i13.TranslatePipe } });
79
+ PermissionsUtility.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: PermissionsUtility, deps: [{ token: UtilityRef }, { token: i1.SessionService }, { token: i2.PromptService }, { token: i3.FormBuilder }], target: i0.ɵɵFactoryTarget.Component });
80
+ PermissionsUtility.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: PermissionsUtility, selector: "ng-component", viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true, static: true }], ngImport: i0, template: "<mat-toolbar>\r\n <button mat-button (click)=\"save()\" color=\"primary\" [disabled]=\"!dirty\">{{'SaveChanges'|translate}}</button>\r\n <span class=\"divider\"></span>\r\n <bizdoc-search-input (valueChange)=\"search($event)\"></bizdoc-search-input>\r\n <button mat-button [matMenuTriggerFor]=\"formMenu\">{{form?.title}} <mat-icon>arrow_drop_down</mat-icon></button>\r\n <mat-menu #formMenu>\r\n <button mat-menu-item *ngFor=\"let f of forms\" (click)=\"formChange(f.name)\">{{f.title}}</button>\r\n </mat-menu>\r\n</mat-toolbar>\r\n<table mat-table matSort [dataSource]=\"dataSource\">\r\n <ng-container matColumnDef=\"title\" sticky>\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header>{{'Permission' | translate}}</th>\r\n <td mat-cell *matCellDef=\"let item\"> {{item.title || item.name}}</td>\r\n </ng-container>\r\n <ng-container [matColumnDef]=\"r.name\" *ngFor=\"let r of roles\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header>{{r.title}}</th>\r\n <td mat-cell *matCellDef=\"let item\"> <mat-checkbox [checked]=\"item[r.name]\" [value]=\"r.name\" (change)=\"change(item, $event)\"></mat-checkbox> </td>\r\n </ng-container>\r\n <tr mat-header-row *matHeaderRowDef=\"displayColumns; sticky: true\"></tr>\r\n <tr mat-row *matRowDef=\"let item; columns: displayColumns;\"></tr>\r\n</table>\r\n", styles: ["table{width:100%}::ng-deep .mat-row{cursor:pointer}\n"], components: [{ type: i4.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i6.SearchInput, selector: "bizdoc-search-input", outputs: ["valueChange"] }, { type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i8.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i8.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i9.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: i10.MatSortHeader, selector: "[mat-sort-header]", inputs: ["disabled", "mat-sort-header", "arrowPosition", "start", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { type: i11.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { type: i9.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i9.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }], directives: [{ type: i8.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10.MatSort, selector: "[matSort]", inputs: ["matSortDisabled", "matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { type: i9.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i9.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i9.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i9.MatCellDef, selector: "[matCellDef]" }, { type: i9.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: i9.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i9.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }], pipes: { "translate": i13.TranslatePipe } });
81
81
  PermissionsUtility = __decorate([
82
82
  BizDoc({
83
83
  selector: 'bizdoc-permissions'
84
84
  })
85
85
  ], PermissionsUtility);
86
86
  export { PermissionsUtility };
87
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: PermissionsUtility, decorators: [{
87
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: PermissionsUtility, decorators: [{
88
88
  type: Component,
89
89
  args: [{ template: "<mat-toolbar>\r\n <button mat-button (click)=\"save()\" color=\"primary\" [disabled]=\"!dirty\">{{'SaveChanges'|translate}}</button>\r\n <span class=\"divider\"></span>\r\n <bizdoc-search-input (valueChange)=\"search($event)\"></bizdoc-search-input>\r\n <button mat-button [matMenuTriggerFor]=\"formMenu\">{{form?.title}} <mat-icon>arrow_drop_down</mat-icon></button>\r\n <mat-menu #formMenu>\r\n <button mat-menu-item *ngFor=\"let f of forms\" (click)=\"formChange(f.name)\">{{f.title}}</button>\r\n </mat-menu>\r\n</mat-toolbar>\r\n<table mat-table matSort [dataSource]=\"dataSource\">\r\n <ng-container matColumnDef=\"title\" sticky>\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header>{{'Permission' | translate}}</th>\r\n <td mat-cell *matCellDef=\"let item\"> {{item.title || item.name}}</td>\r\n </ng-container>\r\n <ng-container [matColumnDef]=\"r.name\" *ngFor=\"let r of roles\">\r\n <th mat-header-cell *matHeaderCellDef mat-sort-header>{{r.title}}</th>\r\n <td mat-cell *matCellDef=\"let item\"> <mat-checkbox [checked]=\"item[r.name]\" [value]=\"r.name\" (change)=\"change(item, $event)\"></mat-checkbox> </td>\r\n </ng-container>\r\n <tr mat-header-row *matHeaderRowDef=\"displayColumns; sticky: true\"></tr>\r\n <tr mat-row *matRowDef=\"let item; columns: displayColumns;\"></tr>\r\n</table>\r\n", styles: ["table{width:100%}::ng-deep .mat-row{cursor:pointer}\n"] }]
90
90
  }], ctorParameters: function () { return [{ type: i14.UtilityRef, decorators: [{
@@ -59,9 +59,9 @@ export class PositionsPopup {
59
59
  this._destroy.complete();
60
60
  }
61
61
  }
62
- PositionsPopup.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: PositionsPopup, deps: [{ token: POPUP_DATA }, { token: i0.ChangeDetectorRef }, { token: i1.AccountService }], target: i0.ɵɵFactoryTarget.Component });
63
- PositionsPopup.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.5", type: PositionsPopup, selector: "ng-component", viewQueries: [{ propertyName: "nameInput", first: true, predicate: ["nameInput"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<mat-form-field>\r\n <mat-chip-list #chipList [attr.aria-label]=\"data.title\">\r\n <mat-chip *ngFor=\"let u of data.positions\"\r\n [selectable]=\"true\"\r\n [removable]=\"true\"\r\n (removed)=\"removed(u)\">\r\n <bizdoc-identity-name [identity]=u></bizdoc-identity-name>\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip>\r\n <input [placeholder]=\"data.title\"\r\n [formControl]=control\r\n #nameInput\r\n [matAutocomplete]=\"auto\"\r\n [matChipInputFor]=\"chipList\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\">\r\n </mat-chip-list>\r\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selected(nameInput, $event)\">\r\n <mat-option *ngFor=\"let u of users$ | async\" [value]=\"u.id\">\r\n {{u.name}}\r\n <span *ngIf=\"u.email\">&nbsp; - {{u.email}}</span>\r\n </mat-option>\r\n </mat-autocomplete>\r\n</mat-form-field>\r\n", styles: [":host{padding:8px}\n"], components: [{ type: i2.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i3.MatChipList, selector: "mat-chip-list", inputs: ["errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { type: i4.IdentityName, selector: "bizdoc-identity-name", inputs: ["identity", "by", "chating"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }], directives: [{ type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { type: i3.MatChipRemove, selector: "[matChipRemove]" }, { type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: i3.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i8.AsyncPipe } });
64
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImport: i0, type: PositionsPopup, decorators: [{
62
+ PositionsPopup.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: PositionsPopup, deps: [{ token: POPUP_DATA }, { token: i0.ChangeDetectorRef }, { token: i1.AccountService }], target: i0.ɵɵFactoryTarget.Component });
63
+ PositionsPopup.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.0", type: PositionsPopup, selector: "ng-component", viewQueries: [{ propertyName: "nameInput", first: true, predicate: ["nameInput"], descendants: true, read: ElementRef, static: true }], ngImport: i0, template: "<mat-form-field>\r\n <mat-chip-list #chipList [attr.aria-label]=\"data.title\">\r\n <mat-chip *ngFor=\"let u of data.positions\"\r\n [selectable]=\"true\"\r\n [removable]=\"true\"\r\n (removed)=\"removed(u)\">\r\n <bizdoc-identity-name [identity]=u></bizdoc-identity-name>\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip>\r\n <input [placeholder]=\"data.title\"\r\n [formControl]=control\r\n #nameInput\r\n [matAutocomplete]=\"auto\"\r\n [matChipInputFor]=\"chipList\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\">\r\n </mat-chip-list>\r\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selected(nameInput, $event)\">\r\n <mat-option *ngFor=\"let u of users$ | async\" [value]=\"u.id\">\r\n {{u.name}}\r\n <span *ngIf=\"u.email\">&nbsp; - {{u.email}}</span>\r\n </mat-option>\r\n </mat-autocomplete>\r\n</mat-form-field>\r\n", styles: [":host{padding:8px}\n"], components: [{ type: i2.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i3.MatChipList, selector: "mat-chip-list", inputs: ["errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { type: i4.IdentityName, selector: "bizdoc-identity-name", inputs: ["identity", "by", "chating"] }, { type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }], directives: [{ type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { type: i3.MatChipRemove, selector: "[matChipRemove]" }, { type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: i3.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "async": i8.AsyncPipe } });
64
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.0", ngImport: i0, type: PositionsPopup, decorators: [{
65
65
  type: Component,
66
66
  args: [{ styles: [`:host {padding: 8px}`], template: "<mat-form-field>\r\n <mat-chip-list #chipList [attr.aria-label]=\"data.title\">\r\n <mat-chip *ngFor=\"let u of data.positions\"\r\n [selectable]=\"true\"\r\n [removable]=\"true\"\r\n (removed)=\"removed(u)\">\r\n <bizdoc-identity-name [identity]=u></bizdoc-identity-name>\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip>\r\n <input [placeholder]=\"data.title\"\r\n [formControl]=control\r\n #nameInput\r\n [matAutocomplete]=\"auto\"\r\n [matChipInputFor]=\"chipList\"\r\n [matChipInputSeparatorKeyCodes]=\"separatorKeysCodes\">\r\n </mat-chip-list>\r\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"selected(nameInput, $event)\">\r\n <mat-option *ngFor=\"let u of users$ | async\" [value]=\"u.id\">\r\n {{u.name}}\r\n <span *ngIf=\"u.email\">&nbsp; - {{u.email}}</span>\r\n </mat-option>\r\n </mat-autocomplete>\r\n</mat-form-field>\r\n" }]
67
67
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{