@bizdoc/core 1.10.0-next.0 → 1.10.0-next.5

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 (314) hide show
  1. package/assets/bizdoc-schema.json +1 -1
  2. package/assets/themes/brown.min.css +1 -1
  3. package/assets/themes/deep-purple-light-blue.min.css +1 -1
  4. package/assets/themes/default.min.css +1 -1
  5. package/assets/themes/green.min.css +1 -1
  6. package/assets/themes/indigo.min.css +1 -1
  7. package/esm2020/lib/admin/admin-dismiss.service.mjs +3 -3
  8. package/esm2020/lib/admin/admin-menu.component.mjs +3 -3
  9. package/esm2020/lib/admin/core/ace.input.mjs +3 -3
  10. package/esm2020/lib/admin/core/color-picker.input.mjs +3 -3
  11. package/esm2020/lib/admin/core/search.input.mjs +3 -3
  12. package/esm2020/lib/admin/diff/configuration-diff.component.mjs +3 -3
  13. package/esm2020/lib/admin/document-trace/document-trace.component.mjs +5 -5
  14. package/esm2020/lib/admin/document-trace/reassign.dialog.mjs +3 -3
  15. package/esm2020/lib/admin/document-trace/trace-element.component.mjs +3 -3
  16. package/esm2020/lib/admin/form/form.resolve.service.mjs +3 -3
  17. package/esm2020/lib/admin/form/form.service.mjs +3 -3
  18. package/esm2020/lib/admin/form/workflow/node.component.mjs +3 -3
  19. package/esm2020/lib/admin/form/workflow/role-node.component.mjs +3 -3
  20. package/esm2020/lib/admin/form/workflow/workflow.component.mjs +3 -3
  21. package/esm2020/lib/admin/indices/manage-cube-index.component.mjs +3 -3
  22. package/esm2020/lib/admin/patterns/patterns.component.mjs +3 -3
  23. package/esm2020/lib/admin/permissions/permissions.component.mjs +3 -3
  24. package/esm2020/lib/admin/positions/positions-popup.component.mjs +3 -3
  25. package/esm2020/lib/admin/positions/positions.component.mjs +3 -3
  26. package/esm2020/lib/admin/profiler/profiler.component.mjs +5 -5
  27. package/esm2020/lib/admin/utility-wrapper.component.mjs +3 -3
  28. package/esm2020/lib/admin/utility.pane.component.mjs +3 -3
  29. package/esm2020/lib/app.component.mjs +6 -6
  30. package/esm2020/lib/bizdoc.module.mjs +4 -4
  31. package/esm2020/lib/browse/browse-items.component.mjs +5 -5
  32. package/esm2020/lib/browse/browse.mobile.component.mjs +3 -3
  33. package/esm2020/lib/browse/browse.pane.component.mjs +3 -3
  34. package/esm2020/lib/browse/expanded-item/expanded-item.component.mjs +5 -5
  35. package/esm2020/lib/browse/filter/filter.component.mjs +3 -3
  36. package/esm2020/lib/browse/folders-menu.component.mjs +3 -3
  37. package/esm2020/lib/chat/chat-info.mjs +3 -3
  38. package/esm2020/lib/chat/chat.mobile.component.mjs +3 -3
  39. package/esm2020/lib/chat/chat.service.mjs +3 -3
  40. package/esm2020/lib/chat/contacts.component.mjs +6 -6
  41. package/esm2020/lib/chat/contacts.pane.component.mjs +3 -3
  42. package/esm2020/lib/chat/conversation.component.mjs +3 -3
  43. package/esm2020/lib/chat/conversation.pane.component.mjs +3 -3
  44. package/esm2020/lib/compose/action/action-picker.component.mjs +3 -3
  45. package/esm2020/lib/compose/action/action.dialog.mjs +3 -3
  46. package/esm2020/lib/compose/action/action.pane.dialog.mjs +3 -3
  47. package/esm2020/lib/compose/action/assign-action.component.mjs +3 -3
  48. package/esm2020/lib/compose/action/return-action.component.mjs +3 -3
  49. package/esm2020/lib/compose/attachments/attachments.component.mjs +3 -3
  50. package/esm2020/lib/compose/attachments/preview/attachment-preview.component.mjs +3 -3
  51. package/esm2020/lib/compose/attachments/progress-button.directive.mjs +3 -3
  52. package/esm2020/lib/compose/can-deactivate-changes.service.mjs +3 -3
  53. package/esm2020/lib/compose/comments/Comments.pane.component.mjs +3 -3
  54. package/esm2020/lib/compose/comments/comment.component.mjs +3 -3
  55. package/esm2020/lib/compose/comments/comments.component.mjs +3 -3
  56. package/esm2020/lib/compose/comments/edit-comment.component.mjs +3 -3
  57. package/esm2020/lib/compose/comments/edits.component.mjs +3 -3
  58. package/esm2020/lib/compose/comments/quick-comment.component.exp.mjs +3 -3
  59. package/esm2020/lib/compose/comments/votes.component.mjs +3 -3
  60. package/esm2020/lib/compose/compose-resolve.service.mjs +6 -6
  61. package/esm2020/lib/compose/compose.mobile.component.mjs +27 -17
  62. package/esm2020/lib/compose/compose.pane.component.mjs +5 -5
  63. package/esm2020/lib/compose/copy/copy.dialog.mjs +3 -3
  64. package/esm2020/lib/compose/dismiss.service.mjs +3 -3
  65. package/esm2020/lib/compose/document-resolver.service.mjs +3 -3
  66. package/esm2020/lib/compose/document.component.mjs +3 -3
  67. package/esm2020/lib/compose/document.mobile.component.mjs +3 -3
  68. package/esm2020/lib/compose/document.pane.component.mjs +3 -3
  69. package/esm2020/lib/compose/events/events.component.mjs +3 -3
  70. package/esm2020/lib/compose/form-selector/form-selector.sheet.mjs +3 -3
  71. package/esm2020/lib/compose/form.component.mjs +3 -3
  72. package/esm2020/lib/compose/new-menu.component.mjs +3 -3
  73. package/esm2020/lib/compose/privilage.directive.mjs +6 -6
  74. package/esm2020/lib/compose/recipient-resolver.service.mjs +3 -3
  75. package/esm2020/lib/compose/save-changes.dialog.mjs +3 -3
  76. package/esm2020/lib/compose/state.component.mjs +3 -3
  77. package/esm2020/lib/compose/tag/tags.component.mjs +3 -3
  78. package/esm2020/lib/compose/trace/flow.component.mjs +54 -30
  79. package/esm2020/lib/compose/trace/people.component.mjs +3 -3
  80. package/esm2020/lib/compose/trace/trace.base.mjs +5 -5
  81. package/esm2020/lib/compose/trace/trace.component.mjs +5 -5
  82. package/esm2020/lib/compose/trace/trace.pane.component.mjs +3 -3
  83. package/esm2020/lib/compose/version-compare/version-compare.component.mjs +3 -3
  84. package/esm2020/lib/compose/version-compare/version-compare.directive.mjs +9 -9
  85. package/esm2020/lib/compose/version-compare/version.pane.component.mjs +3 -3
  86. package/esm2020/lib/core/NgComponentOutlet.mjs +3 -3
  87. package/esm2020/lib/core/account.service.mjs +3 -3
  88. package/esm2020/lib/core/animated-icon/animated-icon.directive.mjs +3 -3
  89. package/esm2020/lib/core/animations.mjs +7 -1
  90. package/esm2020/lib/core/avatar/avatar.component.mjs +3 -3
  91. package/esm2020/lib/core/component-factory-resolver.mjs +3 -3
  92. package/esm2020/lib/core/controls/address.input.mjs +3 -3
  93. package/esm2020/lib/core/controls/auto-complete.input.mjs +3 -3
  94. package/esm2020/lib/core/controls/combination-picker-body.mjs +3 -3
  95. package/esm2020/lib/core/controls/combination-picker.mjs +3 -3
  96. package/esm2020/lib/core/controls/combination-pool.mjs +3 -3
  97. package/esm2020/lib/core/controls/select.input.mjs +3 -3
  98. package/esm2020/lib/core/controls/time-picker.mjs +3 -3
  99. package/esm2020/lib/core/controls/timespan.input.mjs +3 -3
  100. package/esm2020/lib/core/datasource.service.mjs +3 -3
  101. package/esm2020/lib/core/guide/guide.component.mjs +3 -3
  102. package/esm2020/lib/core/guide/guide.service.mjs +3 -3
  103. package/esm2020/lib/core/http.interceptor.mjs +3 -3
  104. package/esm2020/lib/core/hub.service.mjs +3 -3
  105. package/esm2020/lib/core/identity/identity.component.mjs +3 -3
  106. package/esm2020/lib/core/info/attachment-info.service.mjs +3 -3
  107. package/esm2020/lib/core/info/document-info.service.mjs +3 -3
  108. package/esm2020/lib/core/info/location-info.component.mjs +3 -3
  109. package/esm2020/lib/core/info/map-info.mjs +3 -3
  110. package/esm2020/lib/core/layout/autocomplete.field.mjs +3 -3
  111. package/esm2020/lib/core/layout/checkbox.field.mjs +3 -3
  112. package/esm2020/lib/core/layout/checkbox.mjs +3 -3
  113. package/esm2020/lib/core/layout/date-range.field.mjs +3 -3
  114. package/esm2020/lib/core/layout/date.field.mjs +3 -3
  115. package/esm2020/lib/core/layout/expression.field.mjs +3 -3
  116. package/esm2020/lib/core/layout/html.field.mjs +3 -3
  117. package/esm2020/lib/core/layout/input.base.mjs +3 -3
  118. package/esm2020/lib/core/layout/input.field.mjs +3 -3
  119. package/esm2020/lib/core/layout/layout.component.mjs +3 -3
  120. package/esm2020/lib/core/layout/numeric.field.mjs +3 -3
  121. package/esm2020/lib/core/layout/select.field.mjs +3 -3
  122. package/esm2020/lib/core/layout/switch.field.mjs +3 -3
  123. package/esm2020/lib/core/layout/textarea.field.mjs +3 -3
  124. package/esm2020/lib/core/layout/timespan.field.mjs +3 -3
  125. package/esm2020/lib/core/lottie-animation.mjs +3 -3
  126. package/esm2020/lib/core/mailbox.service.mjs +3 -3
  127. package/esm2020/lib/core/models.mjs +1 -1
  128. package/esm2020/lib/core/none.component.mjs +3 -3
  129. package/esm2020/lib/core/pipes/action.pipe.mjs +3 -3
  130. package/esm2020/lib/core/pipes/calendar.pipe.mjs +4 -6
  131. package/esm2020/lib/core/pipes/date-format.pipe.mjs +3 -3
  132. package/esm2020/lib/core/pipes/daterange.pipe.mjs +8 -8
  133. package/esm2020/lib/core/pipes/difference.pipe.mjs +5 -5
  134. package/esm2020/lib/core/pipes/duration-format.pipe.mjs +4 -6
  135. package/esm2020/lib/core/pipes/duration.pipe.mjs +4 -8
  136. package/esm2020/lib/core/pipes/form.pipe.mjs +3 -3
  137. package/esm2020/lib/core/pipes/join.pipe.mjs +3 -3
  138. package/esm2020/lib/core/pipes/role.pipe.mjs +3 -3
  139. package/esm2020/lib/core/pipes/sanitize-html.pipe.mjs +3 -3
  140. package/esm2020/lib/core/pipes/sort.pipe.mjs +6 -6
  141. package/esm2020/lib/core/pipes/state.pipe.mjs +3 -3
  142. package/esm2020/lib/core/pipes/time-ago.pipe.mjs +4 -6
  143. package/esm2020/lib/core/pipes/translate.pipe.mjs +20 -5
  144. package/esm2020/lib/core/pipes/type-value.pipe.mjs +3 -3
  145. package/esm2020/lib/core/pipes/user-name.pipe.mjs +3 -3
  146. package/esm2020/lib/core/popup/popup.component.mjs +3 -3
  147. package/esm2020/lib/core/popup/popup.service.mjs +3 -3
  148. package/esm2020/lib/core/popup/tooltip.directive.mjs +6 -6
  149. package/esm2020/lib/core/prompt/ask/ask.dialog.mjs +3 -3
  150. package/esm2020/lib/core/prompt/mask/mask.component.mjs +3 -3
  151. package/esm2020/lib/core/prompt.service.mjs +3 -3
  152. package/esm2020/lib/core/router.mjs +6 -6
  153. package/esm2020/lib/core/session.service.mjs +5 -5
  154. package/esm2020/lib/core/slots/router.directive.mjs +3 -3
  155. package/esm2020/lib/core/slots/router.service.mjs +3 -3
  156. package/esm2020/lib/core/slots/slots.component.mjs +5 -5
  157. package/esm2020/lib/core/tagging/documents.component.mjs +3 -3
  158. package/esm2020/lib/core/tagging/edit-input.component.mjs +3 -3
  159. package/esm2020/lib/core/tagging/emoji.component.mjs +3 -3
  160. package/esm2020/lib/core/tagging/tagging-item.directive.mjs +3 -3
  161. package/esm2020/lib/core/tagging/tagging.component-base.mjs +3 -3
  162. package/esm2020/lib/core/tagging/tagging.directive.mjs +3 -3
  163. package/esm2020/lib/core/tagging/tagging.pipe.mjs +3 -3
  164. package/esm2020/lib/core/tagging/users.component.mjs +3 -3
  165. package/esm2020/lib/core/translate.service.mjs +5 -5
  166. package/esm2020/lib/core/window-title.service.mjs +3 -3
  167. package/esm2020/lib/cube/accum/accum.component.mjs +3 -3
  168. package/esm2020/lib/cube/chart/chart.component.mjs +7 -7
  169. package/esm2020/lib/cube/cube-info.service.mjs +3 -3
  170. package/esm2020/lib/cube/cube-menu.component.mjs +3 -3
  171. package/esm2020/lib/cube/cube-view.component.mjs +13 -12
  172. package/esm2020/lib/cube/cube.service.mjs +3 -3
  173. package/esm2020/lib/cube/explore/document-item.component.mjs +3 -3
  174. package/esm2020/lib/cube/explore/explore-item.component.mjs +3 -3
  175. package/esm2020/lib/cube/explore/explore-items.component.mjs +3 -3
  176. package/esm2020/lib/cube/explore/explore.pane.component.mjs +3 -3
  177. package/esm2020/lib/cube/explore/item-resolver.service.mjs +6 -6
  178. package/esm2020/lib/cube/explore/item.pane.component.mjs +3 -3
  179. package/esm2020/lib/cube/filter/filter-tags.component.exp.mjs +3 -3
  180. package/esm2020/lib/cube/filter/filter.component.mjs +3 -3
  181. package/esm2020/lib/cube/grid/grid.component.mjs +3 -3
  182. package/esm2020/lib/cube/grid/spreadsheet.component.mjs +3 -3
  183. package/esm2020/lib/cube/matrix/matrix.base.mjs +4 -4
  184. package/esm2020/lib/cube/matrix/matrix.component.mjs +6 -6
  185. package/esm2020/lib/cube/matrix/matrix.mobile.component.mjs +6 -6
  186. package/esm2020/lib/cube/matrix/matrix.pane.component.mjs +6 -6
  187. package/esm2020/lib/cube/matrix/table.component.mjs +43 -48
  188. package/esm2020/lib/cube/parallel/parallel.component.mjs +10 -10
  189. package/esm2020/lib/cube/pivot/pivot.component.mjs +5 -5
  190. package/esm2020/lib/cube/sum/sum.component.mjs +15 -15
  191. package/esm2020/lib/cube/view-base.mjs +3 -3
  192. package/esm2020/lib/cube/view.mobile.component.mjs +6 -9
  193. package/esm2020/lib/cube/view.pane.component.mjs +5 -5
  194. package/esm2020/lib/dashboard/actions/actions.widget.mjs +3 -3
  195. package/esm2020/lib/dashboard/cube/accum-cube.widget.mjs +3 -3
  196. package/esm2020/lib/dashboard/cube/cube-analysis.base.mjs +4 -4
  197. package/esm2020/lib/dashboard/cube/cube-analysis.widget.mjs +3 -3
  198. package/esm2020/lib/dashboard/cube/cube-chart.widget.mjs +5 -5
  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 +5 -5
  205. package/esm2020/lib/dashboard/score/compare-departments.widget.mjs +5 -5
  206. package/esm2020/lib/dashboard/score/peers-performance.widget.mjs +4 -5
  207. package/esm2020/lib/dashboard/score/pending-results.widget.mjs +4 -6
  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 +7 -7
  212. package/esm2020/lib/home/home-base.component.mjs +3 -3
  213. package/esm2020/lib/home/home.desktop.component.mjs +3 -3
  214. package/esm2020/lib/home/home.mobile.component.mjs +5 -5
  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/date.adapter.mjs +3 -3
  226. package/esm2020/lib/modules/datepicker.intl.mjs +3 -3
  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 +5 -5
  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 +5 -5
  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 +5 -5
  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/grid-documents.component.mjs +3 -3
  257. package/esm2020/lib/reports/cube/table-documents.component.mjs +3 -3
  258. package/esm2020/lib/reports/cube/usage-args.component.mjs +3 -3
  259. package/esm2020/lib/reports/cube/usage-base.mjs +3 -3
  260. package/esm2020/lib/reports/cube/usage-chart.component.mjs +3 -3
  261. package/esm2020/lib/reports/cube/usage-pivot.component.mjs +3 -3
  262. package/esm2020/lib/reports/report-viewer.component.mjs +3 -3
  263. package/esm2020/lib/reports/report.mobile.component.mjs +3 -3
  264. package/esm2020/lib/reports/report.pane.component.mjs +3 -3
  265. package/esm2020/lib/reports/reports-menu.component.mjs +3 -3
  266. package/esm2020/lib/reports/substitution/substitution.component.mjs +3 -3
  267. package/esm2020/lib/reports/table/table-view.component.mjs +3 -3
  268. package/esm2020/lib/reports/tasks/tasks.component.mjs +3 -3
  269. package/esm2020/lib/routes.desktop.mjs +2 -2
  270. package/esm2020/lib/routes.mobile.mjs +9 -9
  271. package/esm2020/lib/scheduler/schedule.component.mjs +5 -5
  272. package/esm2020/lib/scheduler/scheduler.mobile.component.mjs +5 -5
  273. package/esm2020/lib/scheduler/scheduler.pane.component.mjs +5 -5
  274. package/esm2020/lib/shared.module.mjs +12 -5
  275. package/esm2020/lib/system.module.mjs +4 -4
  276. package/esm2020/lib/views/cube/chart.component.mjs +7 -7
  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 +8 -8
  280. package/esm2020/lib/views/cube/parallel.component.mjs +5 -5
  281. package/esm2020/lib/views/cube/pivot.component.mjs +5 -5
  282. package/esm2020/lib/views/cube/sum.component.mjs +5 -5
  283. package/esm2020/lib/views/cube/view.component.mjs +3 -3
  284. package/esm2020/lib/views/timeline/timeline.component.exp.mjs +5 -5
  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 +11 -15
  288. package/esm2020/lib/views/views.pane.component.mjs +3 -3
  289. package/fesm2015/bizdoc-core.mjs +1105 -1066
  290. package/fesm2015/bizdoc-core.mjs.map +1 -1
  291. package/fesm2020/bizdoc-core.mjs +1105 -1066
  292. package/fesm2020/bizdoc-core.mjs.map +1 -1
  293. package/lib/compose/compose.mobile.component.d.ts +2 -2
  294. package/lib/compose/trace/flow.component.d.ts +1 -1
  295. package/lib/core/animations.d.ts +1 -0
  296. package/lib/core/models.d.ts +1 -1
  297. package/lib/core/pipes/translate.pipe.d.ts +9 -1
  298. package/lib/cube/chart/chart.component.d.ts +2 -2
  299. package/lib/cube/cube-view.component.d.ts +2 -2
  300. package/lib/cube/matrix/matrix.base.d.ts +1 -1
  301. package/lib/cube/matrix/table.component.d.ts +5 -6
  302. package/lib/cube/parallel/parallel.component.d.ts +2 -2
  303. package/lib/cube/pivot/pivot.component.d.ts +2 -2
  304. package/lib/cube/sum/sum.component.d.ts +3 -3
  305. package/lib/dashboard/cube/cube-analysis.base.d.ts +1 -1
  306. package/lib/home/about/about.dialog.d.ts +2 -2
  307. package/lib/notifications/types/nudge.notification.d.ts +1 -1
  308. package/lib/notifications/types/upcoming-event.notification.d.ts +1 -1
  309. package/lib/views/cube/chart.component.d.ts +2 -2
  310. package/lib/views/cube/matrix.component.d.ts +2 -4
  311. package/lib/views/cube/pivot.component.d.ts +1 -1
  312. package/lib/views/cube/sum.component.d.ts +2 -2
  313. package/lib/views/views.mobile.component.d.ts +1 -5
  314. package/package.json +1 -1
@@ -1,10 +1,10 @@
1
1
  import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
2
- import { query, stagger, style, transition, trigger } from '@angular/animations';
3
2
  import { coerceBooleanProperty } from '@angular/cdk/coercion';
4
3
  import { forkJoin, first } from 'rxjs';
5
4
  import { tap } from 'rxjs/operators';
6
5
  import { isArray } from '../../core/functions';
7
6
  import { modelize } from '../cube.service';
7
+ import { matrixAnimation } from '../../core/animations';
8
8
  import * as i0 from "@angular/core";
9
9
  import * as i1 from "../../core/prompt.service";
10
10
  import * as i2 from "../cube.service";
@@ -12,12 +12,6 @@ import * as i3 from "../../core/session.service";
12
12
  import * as i4 from "../../core/datasource.service";
13
13
  import * as i5 from "@angular/common";
14
14
  const LOADING_DELAY = 200;
15
- const matrixAnimation = trigger('table', [transition('void=>*', [
16
- query('.mat-row', [
17
- style({ opacity: 0, transform: 'translateX(10px)' }),
18
- stagger(100, style({ opacity: 1, transform: 'none' }))
19
- ], { optional: true })
20
- ])]);
21
15
  /** cube matrix component*/
22
16
  export class CubeMatrixComponent {
23
17
  constructor(_sb, _service, _session, _ds) {
@@ -37,6 +31,26 @@ export class CubeMatrixComponent {
37
31
  if (value)
38
32
  this._indices = isArray(value) ? value : [value];
39
33
  }
34
+ set sum(val) {
35
+ function translate(axis) {
36
+ switch (axis) {
37
+ case '$month':
38
+ return 'M' + ('0' + new Date().getMonth().toString()).slice(-2);
39
+ case '$year':
40
+ return new Date().getFullYear().toString();
41
+ case '$quarter':
42
+ return Math.ceil(new Date().getMonth() / 3).toString();
43
+ default:
44
+ return axis ? axis.toString() : null;
45
+ }
46
+ }
47
+ this._sum = {
48
+ //fn: val.fn,
49
+ title: val.title,
50
+ xAxis: translate(val.xAxis),
51
+ serie: translate(val.serie)
52
+ };
53
+ }
40
54
  get interactive() {
41
55
  return this._interactive;
42
56
  }
@@ -55,17 +69,17 @@ export class CubeMatrixComponent {
55
69
  this.indexes = this.cube.indices;
56
70
  this._indices = this.indexes.map(i => i.name);
57
71
  }
58
- if (changes['_xAxis'] || changes['_serie']) {
72
+ if (changes['_xAxis'] || changes['_series']) {
59
73
  this.xAxis = this.cube.axes.find(a => a.name === this._xAxis) || this.cube.axes[0];
60
- this.series = this.cube.axes.find(a => a.name === this._serie) || this.cube.axes[1];
74
+ this.series = this.cube.axes.find(a => a.name === this._series) || this.cube.axes[1];
61
75
  this._prepare = forkJoin(this._ds.all(this.series.dataType).pipe(tap(r => this.rows = r)), this._ds.all(this.xAxis.dataType).pipe(tap(c => this.columns = c))).toPromise().then(() => this._sum &&
62
76
  this._addsum());
63
77
  }
64
- if (changes['axes'])
78
+ if (changes['filters'])
65
79
  this.refresh();
66
80
  }
67
81
  _addsum() {
68
- let { xAxis, serie } = this._dsum;
82
+ let { xAxis, serie } = this._sum;
69
83
  if (xAxis) {
70
84
  const columns = [];
71
85
  this.columns.forEach(c => {
@@ -96,11 +110,11 @@ export class CubeMatrixComponent {
96
110
  this._prepare.then(() => this._service.series(this.cube.name, this.xAxis.name, {
97
111
  series: this.series.name,
98
112
  indices: this._indices,
99
- filters: this.axes,
113
+ filters: this.filters,
100
114
  scope: this.scope
101
115
  }).pipe(modelize(), first(), tap(d => {
102
116
  this._totals(d);
103
- this._sum &&
117
+ this.sum &&
104
118
  this._calculatesum(d);
105
119
  })).subscribe(d => this.data = d, (e) => {
106
120
  this._sb.error(e.status === 401 ? 'Unauthorized' : null);
@@ -147,7 +161,7 @@ export class CubeMatrixComponent {
147
161
  this.totals['_total'] = grand;
148
162
  }
149
163
  _calculatesum(data) {
150
- let { xAxis, serie } = this._dsum;
164
+ let { xAxis, serie /*, fn*/ } = this._sum;
151
165
  if (xAxis) {
152
166
  let total = 0;
153
167
  this.rows.forEach(r => {
@@ -159,7 +173,7 @@ export class CubeMatrixComponent {
159
173
  let key = this.columns[i].key, val = row[key];
160
174
  if (val !== undefined)
161
175
  sum += val;
162
- if (key === xAxis.toString())
176
+ if (key === xAxis)
163
177
  break;
164
178
  i++;
165
179
  }
@@ -178,7 +192,7 @@ export class CubeMatrixComponent {
178
192
  let val = row[c.key];
179
193
  if (val !== undefined)
180
194
  sum += val;
181
- if (key === serie.toString())
195
+ if (key === serie)
182
196
  break;
183
197
  }
184
198
  i++;
@@ -189,34 +203,16 @@ export class CubeMatrixComponent {
189
203
  data['_sum']['_total'] = total;
190
204
  }
191
205
  }
192
- get _dsum() {
193
- if (this._evalsum)
194
- return this._evalsum;
195
- const { xAxis, serie } = this._sum;
196
- function translate(axis) {
197
- switch (axis) {
198
- case '$month':
199
- return 'M' + ('0' + new Date().getMonth().toString()).slice(-2);
200
- case '$year':
201
- return new Date().getFullYear().toString();
202
- case '$quarter':
203
- return Math.ceil(new Date().getMonth() / 3).toString();
204
- default:
205
- return axis;
206
- }
207
- }
208
- return this._evalsum = { xAxis: translate(xAxis), serie: translate(serie) };
209
- }
210
206
  explore(x, serie) {
211
207
  if (!this.interactive)
212
208
  return;
213
- if (this._sum) {
209
+ if (this.sum) {
214
210
  if (x === '_sum') {
215
211
  x = [];
216
212
  for (let i = 0; i < this.columns.length; i++) {
217
213
  let key = this.columns[i].key;
218
214
  x.push(key);
219
- if (key === this._sum.xAxis.toString())
215
+ if (key === this._sum.xAxis)
220
216
  break;
221
217
  }
222
218
  }
@@ -225,12 +221,12 @@ export class CubeMatrixComponent {
225
221
  for (let i = 0; i < this.rows.length; i++) {
226
222
  let key = this.rows[i].key;
227
223
  serie.push(key);
228
- if (key === this._sum.serie.toString())
224
+ if (key === this._sum.serie)
229
225
  break;
230
226
  }
231
227
  }
232
228
  }
233
- const axes = { ...this.axes };
229
+ const axes = { ...this.filters };
234
230
  axes[this.xAxis.name] = x;
235
231
  axes[this.series.name] = serie;
236
232
  this.onExplore.emit(axes);
@@ -265,9 +261,9 @@ export class CubeMatrixComponent {
265
261
  }
266
262
  }
267
263
  }
268
- CubeMatrixComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CubeMatrixComponent, deps: [{ token: i1.PromptService }, { token: i2.CubeService }, { token: i3.SessionService }, { token: i4.DatasourceService }], target: i0.ɵɵFactoryTarget.Component });
269
- CubeMatrixComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: CubeMatrixComponent, selector: "bizdoc-cube-matrix", inputs: { _cube: ["cube", "_cube"], _xAxis: ["xAxis", "_xAxis"], _serie: ["serie", "_serie"], indices: "indices", scope: "scope", _sum: ["sum", "_sum"], axes: "axes", loading: "loading", interactive: "interactive" }, outputs: { onExplore: "explore", loadingChange: "loadingChange" }, viewQueries: [{ propertyName: "tableElement", first: true, predicate: ["table"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<table #table class=\"mat-table cube-table\" (mouseleave)=\"move(-1, -1)\" *ngIf=\"data\">\r\n <thead>\r\n <!-- headers -->\r\n <tr class=\"mat-row\">\r\n <th></th>\r\n <th *ngFor=\"let column of columns; let x = index\" (mouseenter)=\"move(x + 1, -2)\" class=\"mat-header-cell\">\r\n {{ column.value }}\r\n </th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <!-- indices -->\r\n <tr class=\"mat-row cube-index\" *ngFor=\"let index of indexes; let y = index\">\r\n <th class=\"mat-header-cell\" (mouseenter)=\"move(0, y)\">{{index.title}}</th>\r\n <td *ngFor=\"let column of columns; let x = index\" class=\"mat-cell figure\" (mouseenter)=\"move(x + 1, y)\">\r\n <span *ngIf=\"data[index.name] && data[index.name][column.key]; else zero\">{{ data[index.name][column.key] | number : PRECISION }}</span>\r\n </td>\r\n <th class=\"mat-cell figure\" (mouseenter)=\"move(0, y)\" [ngSwitch]=\"!CURRENCY\">\r\n <ng-container *ngSwitchCase=\"true\">\r\n {{ data[index.name]['_total'] | number : PRECISION }}\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n {{ data[index.name]['_total'] | currency : CURRENCY: 'symbol' : PRECISION }}\r\n </ng-container>\r\n </th>\r\n </tr>\r\n </tbody>\r\n <tbody>\r\n <!-- rows -->\r\n <tr *ngFor=\"let row of rows; let y = index\" class=\"mat-row\">\r\n <th class=\"mat-header-cell\" (mouseenter)=\"move(-2, y + indices.length)\">{{ row.value }}</th>\r\n <td *ngFor=\"let column of columns; let x = index\" class=\"mat-cell figure\" (mouseenter)=\"move(x + 1, y + indices.length)\">\r\n <ng-container *ngIf=\"data[row.key] && data[row.key][column.key] !== undefined; else zero\">\r\n <span [class.clickable]=\"interactive\" (click)=\"explore(column.key, row.key)\">\r\n {{data[row.key][column.key] | number : PRECISION }}\r\n </span>\r\n </ng-container>\r\n </td>\r\n <th class=\"mat-cell figure\" (mouseenter)=\"move(-1, y + indices.length)\" [ngSwitch]=\"!CURRENCY\">\r\n <ng-container *ngSwitchCase=\"true\">\r\n {{ data[row.key]['_total'] | number : PRECISION }}\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n {{ data[row.key]['_total'] | currency : CURRENCY: 'symbol' : PRECISION }}\r\n </ng-container>\r\n </th>\r\n </tr>\r\n </tbody>\r\n <tfoot>\r\n <!-- available -->\r\n <tr>\r\n <th></th>\r\n <td *ngFor=\"let column of columns; let x = index\" class=\"mat-cell figure\" (mouseenter)=\"move(x + 1, -2)\"\r\n [class.negative-figure]=\"totals[column.key] < 0\">\r\n {{totals[column.key] | currency : CURRENCY: 'symbol' : PRECISION }}\r\n </td>\r\n <th class=\"mat-cell figure\">{{totals['_total'] | currency : CURRENCY: 'symbol' : PRECISION }}</th>\r\n </tr>\r\n </tfoot>\r\n</table>\r\n<ng-template #zero>\r\n 0\r\n</ng-template>\r\n", styles: [".clickable{cursor:pointer}.cube-table{width:100%;display:inline-table;border-collapse:collapse}.cube-table th{cursor:default}.cube-table th.figure{font-weight:500}.cube-table td{padding-right:4px}\n"], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i5.NgSwitchDefault, selector: "[ngSwitchDefault]" }], pipes: { "number": i5.DecimalPipe, "currency": i5.CurrencyPipe }, animations: [matrixAnimation] });
270
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CubeMatrixComponent, decorators: [{
264
+ CubeMatrixComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: CubeMatrixComponent, deps: [{ token: i1.PromptService }, { token: i2.CubeService }, { token: i3.SessionService }, { token: i4.DatasourceService }], target: i0.ɵɵFactoryTarget.Component });
265
+ CubeMatrixComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.3", type: CubeMatrixComponent, selector: "bizdoc-cube-matrix", inputs: { _cube: ["cube", "_cube"], _xAxis: ["xAxis", "_xAxis"], _series: ["series", "_series"], indices: "indices", scope: "scope", sum: "sum", filters: "filters", loading: "loading", interactive: "interactive" }, outputs: { onExplore: "explore", loadingChange: "loadingChange" }, viewQueries: [{ propertyName: "tableElement", first: true, predicate: ["table"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<table #table class=\"mat-table cube-table\" (mouseleave)=\"move(-1, -1)\" *ngIf=\"data\">\r\n <thead>\r\n <!-- headers -->\r\n <tr class=\"mat-row\">\r\n <th></th>\r\n <th *ngFor=\"let column of columns; let x = index\" (mouseenter)=\"move(x + 1, -2)\" class=\"mat-header-cell\">\r\n {{ column.value }}\r\n </th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <!-- indices -->\r\n <tr class=\"mat-row cube-index\" *ngFor=\"let index of indexes; let y = index\">\r\n <th class=\"mat-header-cell\" (mouseenter)=\"move(0, y)\">{{index.title}}</th>\r\n <td *ngFor=\"let column of columns; let x = index\" class=\"mat-cell figure\" (mouseenter)=\"move(x + 1, y)\">\r\n <span *ngIf=\"data[index.name] && data[index.name][column.key]; else zero\">{{ data[index.name][column.key] | number : PRECISION }}</span>\r\n </td>\r\n <th class=\"mat-cell figure\" (mouseenter)=\"move(0, y)\" [ngSwitch]=\"!CURRENCY\">\r\n <ng-container *ngSwitchCase=\"true\">\r\n {{ data[index.name]['_total'] | number : PRECISION }}\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n {{ data[index.name]['_total'] | currency : CURRENCY: 'symbol' : PRECISION }}\r\n </ng-container>\r\n </th>\r\n </tr>\r\n </tbody>\r\n <tbody>\r\n <!-- rows -->\r\n <tr *ngFor=\"let row of rows; let y = index\" class=\"mat-row\">\r\n <th class=\"mat-header-cell\" (mouseenter)=\"move(-2, y + indices.length)\">{{ row.value }}</th>\r\n <td *ngFor=\"let column of columns; let x = index\" class=\"mat-cell figure\" (mouseenter)=\"move(x + 1, y + indices.length)\">\r\n <ng-container *ngIf=\"data[row.key] && data[row.key][column.key] !== undefined; else zero\">\r\n <span [class.clickable]=\"interactive\" (click)=\"explore(column.key, row.key)\">\r\n {{data[row.key][column.key] | number : PRECISION }}\r\n </span>\r\n </ng-container>\r\n </td>\r\n <th class=\"mat-cell figure\" (mouseenter)=\"move(-1, y + indices.length)\" [ngSwitch]=\"!CURRENCY\">\r\n <ng-container *ngSwitchCase=\"true\">\r\n {{ data[row.key]['_total'] | number : PRECISION }}\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n {{ data[row.key]['_total'] | currency : CURRENCY: 'symbol' : PRECISION }}\r\n </ng-container>\r\n </th>\r\n </tr>\r\n </tbody>\r\n <tfoot>\r\n <!-- available -->\r\n <tr>\r\n <th></th>\r\n <td *ngFor=\"let column of columns; let x = index\" class=\"mat-cell figure\" (mouseenter)=\"move(x + 1, -2)\"\r\n [class.negative-figure]=\"totals[column.key] < 0\">\r\n {{totals[column.key] | currency : CURRENCY: 'symbol' : PRECISION }}\r\n </td>\r\n <th class=\"mat-cell figure\">{{totals['_total'] | currency : CURRENCY: 'symbol' : PRECISION }}</th>\r\n </tr>\r\n </tfoot>\r\n</table>\r\n<ng-template #zero>\r\n 0\r\n</ng-template>\r\n", styles: [".clickable{cursor:pointer}.cube-table{width:100%;display:inline-table;border-collapse:collapse}.cube-table th{cursor:default}.cube-table th.figure{font-weight:500}.cube-table td{padding-right:4px}\n"], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i5.NgSwitchDefault, selector: "[ngSwitchDefault]" }], pipes: { "number": i5.DecimalPipe, "currency": i5.CurrencyPipe }, animations: [matrixAnimation] });
266
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: CubeMatrixComponent, decorators: [{
271
267
  type: Component,
272
268
  args: [{ selector: 'bizdoc-cube-matrix', animations: [matrixAnimation], template: "<table #table class=\"mat-table cube-table\" (mouseleave)=\"move(-1, -1)\" *ngIf=\"data\">\r\n <thead>\r\n <!-- headers -->\r\n <tr class=\"mat-row\">\r\n <th></th>\r\n <th *ngFor=\"let column of columns; let x = index\" (mouseenter)=\"move(x + 1, -2)\" class=\"mat-header-cell\">\r\n {{ column.value }}\r\n </th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <!-- indices -->\r\n <tr class=\"mat-row cube-index\" *ngFor=\"let index of indexes; let y = index\">\r\n <th class=\"mat-header-cell\" (mouseenter)=\"move(0, y)\">{{index.title}}</th>\r\n <td *ngFor=\"let column of columns; let x = index\" class=\"mat-cell figure\" (mouseenter)=\"move(x + 1, y)\">\r\n <span *ngIf=\"data[index.name] && data[index.name][column.key]; else zero\">{{ data[index.name][column.key] | number : PRECISION }}</span>\r\n </td>\r\n <th class=\"mat-cell figure\" (mouseenter)=\"move(0, y)\" [ngSwitch]=\"!CURRENCY\">\r\n <ng-container *ngSwitchCase=\"true\">\r\n {{ data[index.name]['_total'] | number : PRECISION }}\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n {{ data[index.name]['_total'] | currency : CURRENCY: 'symbol' : PRECISION }}\r\n </ng-container>\r\n </th>\r\n </tr>\r\n </tbody>\r\n <tbody>\r\n <!-- rows -->\r\n <tr *ngFor=\"let row of rows; let y = index\" class=\"mat-row\">\r\n <th class=\"mat-header-cell\" (mouseenter)=\"move(-2, y + indices.length)\">{{ row.value }}</th>\r\n <td *ngFor=\"let column of columns; let x = index\" class=\"mat-cell figure\" (mouseenter)=\"move(x + 1, y + indices.length)\">\r\n <ng-container *ngIf=\"data[row.key] && data[row.key][column.key] !== undefined; else zero\">\r\n <span [class.clickable]=\"interactive\" (click)=\"explore(column.key, row.key)\">\r\n {{data[row.key][column.key] | number : PRECISION }}\r\n </span>\r\n </ng-container>\r\n </td>\r\n <th class=\"mat-cell figure\" (mouseenter)=\"move(-1, y + indices.length)\" [ngSwitch]=\"!CURRENCY\">\r\n <ng-container *ngSwitchCase=\"true\">\r\n {{ data[row.key]['_total'] | number : PRECISION }}\r\n </ng-container>\r\n <ng-container *ngSwitchDefault>\r\n {{ data[row.key]['_total'] | currency : CURRENCY: 'symbol' : PRECISION }}\r\n </ng-container>\r\n </th>\r\n </tr>\r\n </tbody>\r\n <tfoot>\r\n <!-- available -->\r\n <tr>\r\n <th></th>\r\n <td *ngFor=\"let column of columns; let x = index\" class=\"mat-cell figure\" (mouseenter)=\"move(x + 1, -2)\"\r\n [class.negative-figure]=\"totals[column.key] < 0\">\r\n {{totals[column.key] | currency : CURRENCY: 'symbol' : PRECISION }}\r\n </td>\r\n <th class=\"mat-cell figure\">{{totals['_total'] | currency : CURRENCY: 'symbol' : PRECISION }}</th>\r\n </tr>\r\n </tfoot>\r\n</table>\r\n<ng-template #zero>\r\n 0\r\n</ng-template>\r\n", styles: [".clickable{cursor:pointer}.cube-table{width:100%;display:inline-table;border-collapse:collapse}.cube-table th{cursor:default}.cube-table th.figure{font-weight:500}.cube-table td{padding-right:4px}\n"] }]
273
269
  }], ctorParameters: function () { return [{ type: i1.PromptService }, { type: i2.CubeService }, { type: i3.SessionService }, { type: i4.DatasourceService }]; }, propDecorators: { tableElement: [{
@@ -279,17 +275,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImpor
279
275
  }], _xAxis: [{
280
276
  type: Input,
281
277
  args: ['xAxis']
282
- }], _serie: [{
278
+ }], _series: [{
283
279
  type: Input,
284
- args: ['serie']
280
+ args: ['series']
285
281
  }], indices: [{
286
282
  type: Input
287
283
  }], scope: [{
288
284
  type: Input
289
- }], _sum: [{
290
- type: Input,
291
- args: ['sum']
292
- }], axes: [{
285
+ }], sum: [{
286
+ type: Input
287
+ }], filters: [{
293
288
  type: Input
294
289
  }], loading: [{
295
290
  type: Input
@@ -305,4 +300,4 @@ export class CubeInfoCellArgs {
305
300
  get value() { return this._value; }
306
301
  get summary() { return this._summary; }
307
302
  }
308
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9jdWJlL21hdHJpeC90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2N1YmUvbWF0cml4L3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV4SCxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDL0MsT0FBTyxFQUFlLFFBQVEsRUFBYSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7O0FBTW5FLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQztBQUUxQixNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsT0FBTyxFQUNyQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQ25CO1FBQ0UsS0FBSyxDQUFDLFVBQVUsRUFDZDtZQUNFLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFFLENBQUM7WUFDcEQsT0FBTyxDQUFDLEdBQUcsRUFDVCxLQUFLLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxN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LEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDO29CQUNULElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDOztvQkFFN0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDbkM7U0FDRjtJQUNILENBQUM7O2dIQXZSVSxtQkFBbUI7b0dBQW5CLG1CQUFtQixrZENqQ2hDLDQ3RkFnRUEsZ3NCRGpDYyxDQUFDLGVBQWUsQ0FBQzsyRkFFbEIsbUJBQW1CO2tCQU4vQixTQUFTOytCQUNFLG9CQUFvQixjQUdsQixDQUFDLGVBQWUsQ0FBQzsyTEFLVCxZQUFZO3NCQUEvQixTQUFTO3VCQUFDLE9BQU87Z0JBQ0gsS0FBSztzQkFBbkIsS0FBSzt1QkFBQyxNQUFNO2dCQUNHLE1BQU07c0JBQXJCLEtBQUs7dUJBQUMsT0FBTztnQkFDRSxNQUFNO3NCQUFyQixLQUFLO3VCQUFDLE9BQU87Z0JBT0gsT0FBTztzQkFEakIsS0FBSztnQkFJRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ1EsSUFBSTtzQkFBakIsS0FBSzt1QkFBQyxLQUFLO2dCQUNILElBQUk7c0JBQVosS0FBSztnQkFFRyxPQUFPO3NCQUFmLEtBQUs7Z0JBS0ssV0FBVztzQkFEckIsS0FBSztnQkFJc0IsU0FBUztzQkFBcEMsTUFBTTt1QkFBQyxTQUFTO2dCQUNFLGFBQWE7c0JBQS9CLE1BQU07O0FBNlBULE1BQU0sT0FBTyxnQkFBZ0I7SUFFM0IsSUFBSSxLQUFLLEtBQWEsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUUzQyxJQUFJLE9BQU8sS0FBYyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0NBTWpEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBxdWVyeSwgc3RhZ2dlciwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcclxuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcclxuaW1wb3J0IHsgZm9ya0pvaW4sIGZpcnN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJy4uLy4uL2NvcmUvZnVuY3Rpb25zJztcclxuaW1wb3J0IHsgQ3ViZVNlcnZpY2UsIG1vZGVsaXplLCBTY29wZVR5cGUgfSBmcm9tICcuLi9jdWJlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZXNzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2Vzc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGF0YXNvdXJjZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL2RhdGFzb3VyY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFByb21wdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3Byb21wdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXhlc01hcCwgQ3ViZSwgQ3ViZUF4aXMsIEN1YmVJbmRleCB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzJztcclxuXHJcbmNvbnN0IExPQURJTkdfREVMQVkgPSAyMDA7XHJcblxyXG5jb25zdCBtYXRyaXhBbmltYXRpb24gPSB0cmlnZ2VyKCd0YWJsZScsXHJcbiAgW3RyYW5zaXRpb24oJ3ZvaWQ9PionLFxyXG4gICAgW1xyXG4gICAgICBxdWVyeSgnLm1hdC1yb3cnLFxyXG4gICAgICAgIFtcclxuICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiAndHJhbnNsYXRlWCgxMHB4KScgfSksXHJcbiAgICAgICAgICBzdGFnZ2VyKDEwMCxcclxuICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAxLCB0cmFuc2Zvcm06ICdub25lJyB9KSlcclxuICAgICAgICBdLFxyXG4gICAgICAgIHsgb3B0aW9uYWw6IHRydWUgfSlcclxuICAgIF0pXSk7XHJcbi8qKiBjdWJlIG1hdHJpeCBjb21wb25lbnQqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2JpemRvYy1jdWJlLW1hdHJpeCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGFuaW1hdGlvbnM6IFttYXRyaXhBbmltYXRpb25dXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDdWJlTWF0cml4Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcclxuICByZWFkb25seSBQUkVDSVNJT04gPSB0aGlzLl9zZXJ2aWNlLmRpZ2l0c0luZm87XHJcbiAgQ1VSUkVOQ1k6IHN0cmluZztcclxuICBAVmlld0NoaWxkKCd0YWJsZScpIHRhYmxlRWxlbWVudDogRWxlbWVudFJlZjxIVE1MVGFibGVFbGVtZW50PjtcclxuICBASW5wdXQoJ2N1YmUnKSBfY3ViZT86IHN0cmluZztcclxuICBASW5wdXQoJ3hBeGlzJykgX3hBeGlzITogc3RyaW5nO1xyXG4gIEBJbnB1dCgnc2VyaWUnKSBfc2VyaWUhOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfaW5kaWNlcz86IHN0cmluZ1tdO1xyXG4gIHByaXZhdGUgX2V2YWxzdW06IHsgeEF4aXM6IHN0cmluZyB8IG51bWJlcjsgc2VyaWU6IHN0cmluZyB8IG51bWJlcjsgfTtcclxuICBwdWJsaWMgZ2V0IGluZGljZXMoKTogc3RyaW5nW10gfCBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2luZGljZXM7XHJcbiAgfVxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBpbmRpY2VzKHZhbHVlOiBzdHJpbmdbXSB8IHN0cmluZykge1xyXG4gICAgaWYgKHZhbHVlKSB0aGlzLl9pbmRpY2VzID0gaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV07XHJcbiAgfVxyXG4gIEBJbnB1dCgpIHNjb3BlOiBTY29wZVR5cGU7XHJcbiAgQElucHV0KCdzdW0nKSBfc3VtOiBTdW1PcHRpb25zO1xyXG4gIEBJbnB1dCgpIGF4ZXM6IEF4ZXNNYXA7XHJcbiAgcHJpdmF0ZSBfaW50ZXJhY3RpdmU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW47XHJcbiAgcHVibGljIGdldCBpbnRlcmFjdGl2ZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pbnRlcmFjdGl2ZTtcclxuICB9XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IGludGVyYWN0aXZlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9pbnRlcmFjdGl2ZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XHJcbiAgfVxyXG4gIEBPdXRwdXQoJ2V4cGxvcmUnKSByZWFkb25seSBvbkV4cGxvcmUgPSBuZXcgRXZlbnRFbWl0dGVyPEF4ZXNNYXA+KCk7XHJcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGxvYWRpbmdDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XHJcbiAgcm93czogS2V5VmFsdWVbXTtcclxuICBjb2x1bW5zOiBLZXlWYWx1ZVtdO1xyXG4gIGluZGV4ZXM6IEN1YmVJbmRleFtdO1xyXG4gIGRhdGE6IHsgW3Jvdzogc3RyaW5nXTogeyBbY29sdW1uOiBzdHJpbmddOiBudW1iZXI7IH07IH07XHJcbiAgdG90YWxzOiB7IFtjb2x1bW46IHN0cmluZ106IG51bWJlciB9O1xyXG4gIGN1YmU6IEN1YmU7XHJcbiAgeEF4aXM6IEN1YmVBeGlzO1xyXG4gIHNlcmllczogQ3ViZUF4aXM7XHJcbiAgcHJpdmF0ZSBfcHJlcGFyZTogUHJvbWlzZTxhbnk+O1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfc2I6IFByb21wdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zZXJ2aWNlOiBDdWJlU2VydmljZSxcclxuICAgIHByaXZhdGUgX3Nlc3Npb246IFNlc3Npb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZHM6IERhdGFzb3VyY2VTZXJ2aWNlKSB7IH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ19jdWJlJ10pIHtcclxuICAgICAgdGhpcy5jdWJlID0gdGhpcy5jdWJlID8gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmN1YmVzLmZpbmQoYyA9PiBjLm5hbWUgPT09IHRoaXMuX2N1YmUpIDpcclxuICAgICAgICB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuY3ViZXNbMF07XHJcbiAgICAgIHRoaXMuQ1VSUkVOQ1kgPSB0aGlzLmN1YmUuY3VycmVuY3lDb2RlIC8qfHwgdGhpcy5fc2VydmljZS5jdXJyZW5jeUNvZGUqLztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLl9pbmRpY2VzKVxyXG4gICAgICB0aGlzLmluZGV4ZXMgPSB0aGlzLmN1YmUuaW5kaWNlcy5maWx0ZXIoaSA9PiB0aGlzLl9pbmRpY2VzLmluZGV4T2YoaS5uYW1lKSA+IC0xKTtcclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLmluZGV4ZXMgPSB0aGlzLmN1YmUuaW5kaWNlcztcclxuICAgICAgdGhpcy5faW5kaWNlcyA9IHRoaXMuaW5kZXhlcy5tYXAoaSA9PiBpLm5hbWUpO1xyXG4gICAgfVxyXG4gICAgaWYgKGNoYW5nZXNbJ194QXhpcyddIHx8IGNoYW5nZXNbJ19zZXJpZSddKSB7XHJcbiAgICAgIHRoaXMueEF4aXMgPSB0aGlzLmN1YmUuYXhlcy5maW5kKGEgPT4gYS5uYW1lID09PSB0aGlzLl94QXhpcykgfHwgdGhpcy5jdWJlLmF4ZXNbMF07XHJcbiAgICAgIHRoaXMuc2VyaWVzID0gdGhpcy5jdWJlLmF4ZXMuZmluZChhID0+IGEubmFtZSA9PT0gdGhpcy5fc2VyaWUpIHx8IHRoaXMuY3ViZS5heGVzWzFdO1xyXG4gICAgICB0aGlzLl9wcmVwYXJlID0gZm9ya0pvaW4odGhpcy5fZHMuYWxsKHRoaXMuc2VyaWVzLmRhdGFUeXBlKS5waXBlKHRhcChyID0+XHJcbiAgICAgICAgdGhpcy5yb3dzID0gclxyXG4gICAgICApKSxcclxuICAgICAgICB0aGlzLl9kcy5hbGwodGhpcy54QXhpcy5kYXRhVHlwZSkucGlwZSh0YXAoYyA9PlxyXG4gICAgICAgICAgdGhpcy5jb2x1bW5zID0gY1xyXG4gICAgICAgICkpKS50b1Byb21pc2UoKS50aGVuKFxyXG4gICAgICAgICAgKCkgPT5cclxuICAgICAgICAgICAgdGhpcy5fc3VtICYmXHJcbiAgICAgICAgICAgIHRoaXMuX2FkZHN1bSgpKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydheGVzJ10pXHJcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gIH1cclxuICBwcml2YXRlIF9hZGRzdW0oKSB7XHJcbiAgICBsZXQgeyB4QXhpcywgc2VyaWUgfSA9IHRoaXMuX2RzdW07XHJcbiAgICBpZiAoeEF4aXMpIHtcclxuICAgICAgY29uc3QgY29sdW1ucyA9IFtdO1xyXG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjID0+IHtcclxuICAgICAgICBjb2x1bW5zLnB1c2goYyk7XHJcbiAgICAgICAgaWYgKHhBeGlzLnRvU3RyaW5nKCkgPT09IGMua2V5KVxyXG4gICAgICAgICAgY29sdW1ucy5wdXNoKHtcclxuICAgICAgICAgICAga2V5OiAnX3N1bScsXHJcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLl9zdW0udGl0bGVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5jb2x1bW5zID0gY29sdW1ucztcclxuICAgIH1cclxuICAgIGlmIChzZXJpZSkge1xyXG4gICAgICBjb25zdCByb3dzID0gW107XHJcbiAgICAgIHRoaXMucm93cy5mb3JFYWNoKHIgPT4ge1xyXG4gICAgICAgIHJvd3MucHVzaChyKTtcclxuICAgICAgICBpZiAoc2VyaWUudG9TdHJpbmcoKSA9PT0gci5rZXkpXHJcbiAgICAgICAgICByb3dzLnB1c2goe1xyXG4gICAgICAgICAgICBrZXk6ICdfc3VtJyxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuX3N1bS50aXRsZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnJvd3MgPSByb3dzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVmcmVzaCgpIHtcclxuICAgIGNvbnN0IHByb2dyZXNzVGFzayA9IHNldFRpbWVvdXQoKCkgPT5cclxuICAgICAgdGhpcy5sb2FkaW5nQ2hhbmdlLm5leHQodGhpcy5sb2FkaW5nID0gdHJ1ZSlcclxuICAgICAgLCBMT0FESU5HX0RFTEFZKTtcclxuICAgIHRoaXMuX3ByZXBhcmUudGhlbigoKSA9PiB0aGlzLl9zZXJ2aWNlLnNlcmllcyh0aGlzLmN1YmUubmFtZSwgdGhpcy54QXhpcy5uYW1lLCB7XHJcbiAgICAgIHNlcmllczogdGhpcy5zZXJpZXMubmFtZSxcclxuICAgICAgaW5kaWNlczogdGhpcy5faW5kaWNlcyxcclxuICAgICAgZmlsdGVyczogdGhpcy5heGVzLFxyXG4gICAgICBzY29wZTogdGhpcy5zY29wZVxyXG4gICAgfSBhcyBhbnkpLnBpcGUoXHJcbiAgICAgIG1vZGVsaXplKCksIGZpcnN0KCksIHRhcChkID0+IHtcclxuICAgICAgICB0aGlzLl90b3RhbHMoZCk7XHJcbiAgICAgICAgdGhpcy5fc3VtICYmXHJcbiAgICAgICAgICB0aGlzLl9jYWxjdWxhdGVzdW0oZCk7XHJcbiAgICAgIH0pKS5zdWJzY3JpYmUoZCA9PlxyXG4gICAgICAgIHRoaXMuZGF0YSA9IGQsXHJcbiAgICAgICAgKGU6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLl9zYi5lcnJvcihlLnN0YXR1cyA9PT0gNDAxID8gJ1VuYXV0aG9yaXplZCcgOiBudWxsKTtcclxuICAgICAgICB9LCAoKSA9PiB7XHJcbiAgICAgICAgICBjbGVhclRpbWVvdXQocHJvZ3Jlc3NUYXNrKTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZ0NoYW5nZS5uZXh0KHRoaXMubG9hZGluZyA9IGZhbHNlKTtcclxuICAgICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfdG90YWxzKGRhdGE6IHsgW2tleTogc3RyaW5nXTogeyBba2V5OiBzdHJpbmddOiBudW1iZXI7IH07IH0pIHtcclxuICAgIGxldCBncmFuZCA9IDA7XHJcbiAgICB0aGlzLmluZGV4ZXMuZm9yRWFjaChpID0+IHtcclxuICAgICAgY29uc3QgaW5kZXggPSBkYXRhW2kubmFtZV07XHJcbiAgICAgIGlmICghaW5kZXgpIGRhdGFbaS5uYW1lXSA9IHt9O1xyXG4gICAgICBlbHNlXHJcbiAgICAgIHtcclxuICAgICAgICBsZXQgc3VtID0gMCwgeDtcclxuICAgICAgICBmb3IgKHggaW4gaW5kZXgpXHJcbiAgICAgICAgICBzdW0gKz0gaW5kZXhbeF07XHJcbiAgICAgICAgaW5kZXhbJ190b3RhbCddID0gc3VtO1xyXG4gICAgICAgIGdyYW5kICs9IHN1bTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLnJvd3MuZm9yRWFjaChyID0+IHtcclxuICAgICAgaWYgKCFkYXRhW3Iua2V5XSlcclxuICAgICAgICBkYXRhW3Iua2V5XSA9IHt9O1xyXG4gICAgICBjb25zdCBsaW5lID0gZGF0YVtyLmtleV07XHJcbiAgICAgIGxldCBzdW0gPSAwLCB4O1xyXG4gICAgICBpZiAobGluZSlcclxuICAgICAgICBmb3IgKHggaW4gbGluZSlcclxuICAgICAgICAgIHN1bSArPSBsaW5lW3hdO1xyXG4gICAgICBkYXRhW3Iua2V5XVsnX3RvdGFsJ10gPSBzdW07XHJcbiAgICAgIGdyYW5kIC09IHN1bTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy50b3RhbHMgPSB7fTtcclxuICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGMgPT4ge1xyXG4gICAgICBsZXQgc3VtID0gMCwga2V5O1xyXG4gICAgICBmb3IgKGtleSBpbiBkYXRhKSB7XHJcbiAgICAgICAgY29uc3QgdmFsID0gZGF0YVtrZXldW2Mua2V5XTtcclxuICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICBzdW0gKz0gdGhpcy5faW5kaWNlcy5pbmRleE9mKGtleSkgPiAtMSA/IHZhbCA6IC12YWw7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50b3RhbHNbYy5rZXldID0gc3VtO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnRvdGFsc1snX3RvdGFsJ10gPSBncmFuZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NhbGN1bGF0ZXN1bShkYXRhKSB7XHJcbiAgICBsZXQgeyB4QXhpcywgc2VyaWUgfSA9IHRoaXMuX2RzdW07XHJcbiAgICBpZiAoeEF4aXMpIHtcclxuICAgICAgbGV0IHRvdGFsID0gMDtcclxuICAgICAgdGhpcy5yb3dzLmZvckVhY2gociA9PiB7XHJcbiAgICAgICAgY29uc3Qgcm93ID0gZGF0YVtyLmtleV07XHJcbiAgICAgICAgaWYgKCFyb3cpXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgbGV0IHN1bSA9IDAsIGkgPSAwO1xyXG4gICAgICAgIHdoaWxlIChpIDwgdGhpcy5jb2x1bW5zLmxlbmd0aCkge1xyXG4gICAgICAgICAgbGV0IGtleSA9IHRoaXMuY29sdW1uc1tpXS5rZXksIHZhbCA9IHJvd1trZXldO1xyXG4gICAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICBzdW0gKz0gdmFsO1xyXG4gICAgICAgICAgaWYgKGtleSA9PT0geEF4aXMudG9TdHJpbmcoKSlcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBpKys7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRhdGFbci5rZXldWydfc3VtJ10gPSBzdW07XHJcbiAgICAgICAgdG90YWwgKz0gc3VtO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy50b3RhbHNbJ19zdW0nXSA9IHRvdGFsO1xyXG4gICAgfVxyXG4gICAgaWYgKHNlcmllKSB7XHJcbiAgICAgIGxldCB0b3RhbCA9IDA7XHJcbiAgICAgIHRoaXMuY29sdW1ucy5mb3JFYWNoKGMgPT4ge1xyXG4gICAgICAgIGxldCBzdW0gPSAwLCBpID0gMDtcclxuICAgICAgICB3aGlsZSAoaSA8IHRoaXMucm93cy5sZW5ndGgpIHtcclxuICAgICAgICAgIGxldCBrZXkgPSB0aGlzLnJvd3NbaV0ua2V5LCByb3cgPSBkYXRhW2tleV07XHJcbiAgICAgICAgICBpZiAocm93KSB7XHJcbiAgICAgICAgICAgIGxldCB2YWwgPSByb3dbYy5rZXldO1xyXG4gICAgICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgc3VtICs9IHZhbDtcclxuICAgICAgICAgICAgaWYgKGtleSA9PT0gc2VyaWUudG9TdHJpbmcoKSlcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGkrKztcclxuICAgICAgICB9XHJcbiAgICAgICAgZGF0YVsnX3N1bSddW2Mua2V5XSA9IHN1bTtcclxuICAgICAgICB0b3RhbCArPSBzdW07XHJcbiAgICAgIH0pO1xyXG4gICAgICBkYXRhWydfc3VtJ11bJ190b3RhbCddID0gdG90YWw7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHByaXZhdGUgZ2V0IF9kc3VtKCk6IHsgeEF4aXM6IGFueTsgc2VyaWU6IGFueTsgfSB7XHJcbiAgICBpZiAodGhpcy5fZXZhbHN1bSkgcmV0dXJuIHRoaXMuX2V2YWxzdW07XHJcbiAgICBjb25zdCB7IHhBeGlzLCBzZXJpZSB9ID0gdGhpcy5fc3VtO1xyXG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKGF4aXM6IHN0cmluZyB8IG51bWJlcikge1xyXG4gICAgICBzd2l0Y2ggKGF4aXMpIHtcclxuICAgICAgICBjYXNlICckbW9udGgnOlxyXG4gICAgICAgICAgcmV0dXJuICdNJyArICgnMCcgKyBuZXcgRGF0ZSgpLmdldE1vbnRoKCkudG9TdHJpbmcoKSkuc2xpY2UoLTIpO1xyXG4gICAgICAgIGNhc2UgJyR5ZWFyJzpcclxuICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKTtcclxuICAgICAgICBjYXNlICckcXVhcnRlcic6XHJcbiAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG5ldyBEYXRlKCkuZ2V0TW9udGgoKSAvIDMpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHJldHVybiBheGlzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5fZXZhbHN1bSA9IHsgeEF4aXM6IHRyYW5zbGF0ZSh4QXhpcyksIHNlcmllOiB0cmFuc2xhdGUoc2VyaWUpIH07XHJcbiAgfVxyXG5cclxuICBleHBsb3JlKHg6IHN0cmluZyB8IG51bWJlciB8IHN0cmluZ1tdIHwgbnVtYmVyW10sIHNlcmllOiBzdHJpbmcgfCBudW1iZXIgfCBzdHJpbmdbXSB8IG51bWJlcltdKSB7XHJcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3RpdmUpIHJldHVybjtcclxuICAgIGlmICh0aGlzLl9zdW0pIHtcclxuICAgICAgaWYgKHggPT09ICdfc3VtJykge1xyXG4gICAgICAgIHggPSBbXSBhcyBzdHJpbmdbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29sdW1ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgbGV0IGtleSA9IHRoaXMuY29sdW1uc1tpXS5rZXk7XHJcbiAgICAgICAgICB4LnB1c2goa2V5KTtcclxuICAgICAgICAgIGlmIChrZXkgPT09IHRoaXMuX3N1bS54QXhpcy50b1N0cmluZygpKVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHNlcmllID09PSAnX3N1bScpIHtcclxuICAgICAgICBzZXJpZSA9IFtdIGFzIHN0cmluZ1tdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5yb3dzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBsZXQga2V5ID0gdGhpcy5yb3dzW2ldLmtleTtcclxuICAgICAgICAgIHNlcmllLnB1c2goa2V5KTtcclxuICAgICAgICAgIGlmIChrZXkgPT09IHRoaXMuX3N1bS5zZXJpZS50b1N0cmluZygpKVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGF4ZXMgPSB7IC4uLnRoaXMuYXhlcyB9IGFzIEF4ZXNNYXA7XHJcbiAgICBheGVzW3RoaXMueEF4aXMubmFtZV0gPSB4O1xyXG4gICAgYXhlc1t0aGlzLnNlcmllcy5uYW1lXSA9IHNlcmllO1xyXG4gICAgdGhpcy5vbkV4cGxvcmUuZW1pdChheGVzKTtcclxuICB9XHJcbiAgbW92ZSh4LCB5KSB7XHJcbiAgICBsZXQgcm93SW5kZXggPSAwO1xyXG4gICAgZm9yIChsZXQgYiA9IDA7IGIgPCB0aGlzLnRhYmxlRWxlbWVudC5uYXRpdmVFbGVtZW50LnRCb2RpZXMubGVuZ3RoOyBiKyspIHtcclxuICAgICAgbGV0IHRCb2R5ID0gdGhpcy50YWJsZUVsZW1lbnQubmF0aXZlRWxlbWVudC50Qm9kaWVzLml0ZW0oYik7XHJcbiAgICAgIGZvciAobGV0IHIgPSAwOyByIDwgdEJvZHkucm93cy5sZW5ndGg7IHIrKykge1xyXG4gICAgICAgIGxldCByb3cgPSB0Qm9keS5yb3dzLml0ZW0ocik7XHJcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCByb3cuY2VsbHMubGVuZ3RoOyBjKyspIHtcclxuICAgICAgICAgIGxldCBjZWxsID0gcm93LmNlbGxzLml0ZW0oYyk7XHJcbiAgICAgICAgICBpZiAoYyA9PT0geClcclxuICAgICAgICAgICAgY2VsbC5jbGFzc0xpc3QuYWRkKCdjZWxsLXgnKTtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgY2VsbC5jbGFzc0xpc3QucmVtb3ZlKCdjZWxsLXgnKTtcclxuICAgICAgICAgIGlmIChyb3dJbmRleCA9PT0geSlcclxuICAgICAgICAgICAgY2VsbC5jbGFzc0xpc3QuYWRkKCdjZWxsLXknKTtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgY2VsbC5jbGFzc0xpc3QucmVtb3ZlKCdjZWxsLXknKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcm93SW5kZXgrKztcclxuICAgICAgfVxyXG4gICAgICBsZXQgdEZvb3QgPSB0aGlzLnRhYmxlRWxlbWVudC5uYXRpdmVFbGVtZW50LnRGb290LCByb3cgPSB0Rm9vdC5yb3dzWzBdO1xyXG4gICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHJvdy5jZWxscy5sZW5ndGg7IGMrKykge1xyXG4gICAgICAgIGxldCBjZWxsID0gcm93LmNlbGxzLml0ZW0oYyk7XHJcbiAgICAgICAgaWYgKGMgPT09IHgpXHJcbiAgICAgICAgICBjZWxsLmNsYXNzTGlzdC5hZGQoJ2NlbGwteCcpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgIGNlbGwuY2xhc3NMaXN0LnJlbW92ZSgnY2VsbC14Jyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDdWJlSW5mb0NlbGxBcmdzIHtcclxuICBwcml2YXRlIF92YWx1ZTogbnVtYmVyO1xyXG4gIGdldCB2YWx1ZSgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5fdmFsdWU7IH1cclxuICBwcml2YXRlIF9zdW1tYXJ5OiBib29sZWFuO1xyXG4gIGdldCBzdW1tYXJ5KCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fc3VtbWFyeTsgfVxyXG4gIGNvbG9yOiBzdHJpbmc7XHJcbiAgYmFja2dyb3VuZENvbG9yOiBzdHJpbmc7XHJcbiAgZGF0YTogeyBbcm93OiBzdHJpbmddOiB7IFtjb2x1bW46IHN0cmluZ106IG51bWJlcjsgfTsgfTtcclxuICByb3c6IHN0cmluZztcclxuICBjb2x1bW46IHN0cmluZztcclxufVxyXG5cclxudHlwZSBTdW1PcHRpb25zID0ge1xyXG4gIHhBeGlzPzogc3RyaW5nIHwgbnVtYmVyO1xyXG4gIHNlcmllPzogc3RyaW5nIHwgbnVtYmVyO1xyXG4gIHRpdGxlOiBhbnk7XHJcbn1cclxudHlwZSBLZXlWYWx1ZSA9IHtcclxuICBrZXk6IHN0cmluZztcclxuICB2YWx1ZTogYW55O1xyXG59O1xyXG5cclxuIiwiPHRhYmxlICN0YWJsZSBjbGFzcz1cIm1hdC10YWJsZSBjdWJlLXRhYmxlXCIgKG1vdXNlbGVhdmUpPVwibW92ZSgtMSwgLTEpXCIgKm5nSWY9XCJkYXRhXCI+XHJcbiAgPHRoZWFkPlxyXG4gICAgPCEtLSBoZWFkZXJzIC0tPlxyXG4gICAgPHRyIGNsYXNzPVwibWF0LXJvd1wiPlxyXG4gICAgICA8dGg+PC90aD5cclxuICAgICAgPHRoICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uczsgbGV0IHggPSBpbmRleFwiIChtb3VzZWVudGVyKT1cIm1vdmUoeCArIDEsIC0yKVwiIGNsYXNzPVwibWF0LWhlYWRlci1jZWxsXCI+XHJcbiAgICAgICAge3sgY29sdW1uLnZhbHVlIH19XHJcbiAgICAgIDwvdGg+XHJcbiAgICAgIDx0aD48L3RoPlxyXG4gICAgPC90cj5cclxuICA8L3RoZWFkPlxyXG4gIDx0Ym9keT5cclxuICAgIDwhLS0gaW5kaWNlcyAtLT5cclxuICAgIDx0ciBjbGFzcz1cIm1hdC1yb3cgY3ViZS1pbmRleFwiICpuZ0Zvcj1cImxldCBpbmRleCBvZiBpbmRleGVzOyBsZXQgeSA9IGluZGV4XCI+XHJcbiAgICAgIDx0aCBjbGFzcz1cIm1hdC1oZWFkZXItY2VsbFwiIChtb3VzZWVudGVyKT1cIm1vdmUoMCwgeSlcIj57e2luZGV4LnRpdGxlfX08L3RoPlxyXG4gICAgICA8dGQgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zOyBsZXQgeCA9IGluZGV4XCIgY2xhc3M9XCJtYXQtY2VsbCBmaWd1cmVcIiAobW91c2VlbnRlcik9XCJtb3ZlKHggKyAxLCB5KVwiPlxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiZGF0YVtpbmRleC5uYW1lXSAmJiBkYXRhW2luZGV4Lm5hbWVdW2NvbHVtbi5rZXldOyBlbHNlIHplcm9cIj57eyBkYXRhW2luZGV4Lm5hbWVdW2NvbHVtbi5rZXldIHwgbnVtYmVyIDogUFJFQ0lTSU9OIH19PC9zcGFuPlxyXG4gICAgICA8L3RkPlxyXG4gICAgICA8dGggY2xhc3M9XCJtYXQtY2VsbCBmaWd1cmVcIiAobW91c2VlbnRlcik9XCJtb3ZlKDAsIHkpXCIgW25nU3dpdGNoXT1cIiFDVVJSRU5DWVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cInRydWVcIj5cclxuICAgICAgICAgIHt7IGRhdGFbaW5kZXgubmFtZV1bJ190b3RhbCddIHwgbnVtYmVyIDogUFJFQ0lTSU9OIH19XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAge3sgZGF0YVtpbmRleC5uYW1lXVsnX3RvdGFsJ10gfCBjdXJyZW5jeSA6IENVUlJFTkNZOiAnc3ltYm9sJyA6IFBSRUNJU0lPTiB9fVxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L3RoPlxyXG4gICAgPC90cj5cclxuICA8L3Rib2R5PlxyXG4gIDx0Ym9keT5cclxuICAgIDwhLS0gcm93cyAtLT5cclxuICAgIDx0ciAqbmdGb3I9XCJsZXQgcm93IG9mIHJvd3M7IGxldCB5ID0gaW5kZXhcIiBjbGFzcz1cIm1hdC1yb3dcIj5cclxuICAgICAgPHRoIGNsYXNzPVwibWF0LWhlYWRlci1jZWxsXCIgKG1vdXNlZW50ZXIpPVwibW92ZSgtMiwgeSArIGluZGljZXMubGVuZ3RoKVwiPnt7IHJvdy52YWx1ZSB9fTwvdGg+XHJcbiAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnM7IGxldCB4ID0gaW5kZXhcIiBjbGFzcz1cIm1hdC1jZWxsIGZpZ3VyZVwiIChtb3VzZWVudGVyKT1cIm1vdmUoeCArIDEsIHkgKyBpbmRpY2VzLmxlbmd0aClcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YVtyb3cua2V5XSAmJiBkYXRhW3Jvdy5rZXldW2NvbHVtbi5rZXldICE9PSB1bmRlZmluZWQ7IGVsc2UgemVyb1wiPlxyXG4gICAgICAgICAgPHNwYW4gW2NsYXNzLmNsaWNrYWJsZV09XCJpbnRlcmFjdGl2ZVwiIChjbGljayk9XCJleHBsb3JlKGNvbHVtbi5rZXksIHJvdy5rZXkpXCI+XHJcbiAgICAgICAgICAgIHt7ZGF0YVtyb3cua2V5XVtjb2x1bW4ua2V5XSB8IG51bWJlciA6IFBSRUNJU0lPTiB9fVxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L3RkPlxyXG4gICAgICA8dGggY2xhc3M9XCJtYXQtY2VsbCBmaWd1cmVcIiAobW91c2VlbnRlcik9XCJtb3ZlKC0xLCB5ICsgaW5kaWNlcy5sZW5ndGgpXCIgW25nU3dpdGNoXT1cIiFDVVJSRU5DWVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cInRydWVcIj5cclxuICAgICAgICAgIHt7IGRhdGFbcm93LmtleV1bJ190b3RhbCddIHwgbnVtYmVyIDogUFJFQ0lTSU9OIH19XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAge3sgZGF0YVtyb3cua2V5XVsnX3RvdGFsJ10gfCBjdXJyZW5jeSA6IENVUlJFTkNZOiAnc3ltYm9sJyA6IFBSRUNJU0lPTiB9fVxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L3RoPlxyXG4gICAgPC90cj5cclxuICA8L3Rib2R5PlxyXG4gIDx0Zm9vdD5cclxuICAgIDwhLS0gYXZhaWxhYmxlIC0tPlxyXG4gICAgPHRyPlxyXG4gICAgICA8dGg+PC90aD5cclxuICAgICAgPHRkICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uczsgbGV0IHggPSBpbmRleFwiIGNsYXNzPVwibWF0LWNlbGwgZmlndXJlXCIgKG1vdXNlZW50ZXIpPVwibW92ZSh4ICsgMSwgLTIpXCJcclxuICAgICAgICAgIFtjbGFzcy5uZWdhdGl2ZS1maWd1cmVdPVwidG90YWxzW2NvbHVtbi5rZXldIDwgMFwiPlxyXG4gICAgICAgIHt7dG90YWxzW2NvbHVtbi5rZXldIHwgY3VycmVuY3kgOiBDVVJSRU5DWTogJ3N5bWJvbCcgOiBQUkVDSVNJT04gfX1cclxuICAgICAgPC90ZD5cclxuICAgICAgPHRoIGNsYXNzPVwibWF0LWNlbGwgZmlndXJlXCI+e3t0b3RhbHNbJ190b3RhbCddIHwgY3VycmVuY3kgOiBDVVJSRU5DWTogJ3N5bWJvbCcgOiBQUkVDSVNJT04gfX08L3RoPlxyXG4gICAgPC90cj5cclxuICA8L3Rmb290PlxyXG48L3RhYmxlPlxyXG48bmctdGVtcGxhdGUgI3plcm8+XHJcbiAgMFxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
303
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9jdWJlL21hdHJpeC90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2N1YmUvbWF0cml4L3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQWlCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV4SCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9DLE9BQU8sRUFBZSxRQUFRLEVBQWEsTUFBTSxpQkFBaUIsQ0FBQztBQUtuRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7QUFFeEQsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDO0FBRTFCLDJCQUEyQjtBQU8zQixNQUFNLE9BQU8sbUJBQW1CO0lBMEQ5QixZQUNVLEdBQWtCLEVBQ2xCLFFBQXFCLEVBQ3JCLFFBQXdCLEVBQ3hCLEdBQXNCO1FBSHRCLFFBQUcsR0FBSCxHQUFHLENBQWU7UUFDbEIsYUFBUSxHQUFSLFFBQVEsQ0FBYTtRQUNyQixhQUFRLEdBQVIsUUFBUSxDQUFnQjtRQUN4QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQTdEdkIsY0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDO1FBcUN0QyxpQkFBWSxHQUFZLElBQUksQ0FBQztR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QU07c0JBQXJCLEtBQUs7dUJBQUMsT0FBTztnQkFDRyxPQUFPO3NCQUF2QixLQUFLO3VCQUFDLFFBQVE7Z0JBTUosT0FBTztzQkFEakIsS0FBSztnQkFJRyxLQUFLO3NCQUFiLEtBQUs7Z0JBRU8sR0FBRztzQkFBZixLQUFLO2dCQW9CRyxPQUFPO3NCQUFmLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQUtLLFdBQVc7c0JBRHJCLEtBQUs7Z0JBSXNCLFNBQVM7c0JBQXBDLE1BQU07dUJBQUMsU0FBUztnQkFDRSxhQUFhO3NCQUEvQixNQUFNOztBQTBPVCxNQUFNLE9BQU8sZ0JBQWdCO0lBRTNCLElBQUksS0FBSyxLQUFhLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFFM0MsSUFBSSxPQUFPLEtBQWMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztDQU1qRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcclxuaW1wb3J0IHsgZm9ya0pvaW4sIGZpcnN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJy4uLy4uL2NvcmUvZnVuY3Rpb25zJztcclxuaW1wb3J0IHsgQ3ViZVNlcnZpY2UsIG1vZGVsaXplLCBTY29wZVR5cGUgfSBmcm9tICcuLi9jdWJlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZXNzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2Vzc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRGF0YXNvdXJjZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL2RhdGFzb3VyY2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IFByb21wdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3Byb21wdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXhlc01hcCwgQ3ViZSwgQ3ViZUF4aXMsIEN1YmVJbmRleCB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzJztcclxuaW1wb3J0IHsgbWF0cml4QW5pbWF0aW9uIH0gZnJvbSAnLi4vLi4vY29yZS9hbmltYXRpb25zJztcclxuXHJcbmNvbnN0IExPQURJTkdfREVMQVkgPSAyMDA7XHJcblxyXG4vKiogY3ViZSBtYXRyaXggY29tcG9uZW50Ki9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdiaXpkb2MtY3ViZS1tYXRyaXgnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGFibGUuY29tcG9uZW50LnNjc3MnXSxcclxuICBhbmltYXRpb25zOiBbbWF0cml4QW5pbWF0aW9uXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3ViZU1hdHJpeENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XHJcbiAgcmVhZG9ubHkgUFJFQ0lTSU9OID0gdGhpcy5fc2VydmljZS5kaWdpdHNJbmZvO1xyXG4gIENVUlJFTkNZOiBzdHJpbmc7XHJcbiAgQFZpZXdDaGlsZCgndGFibGUnKSB0YWJsZUVsZW1lbnQ6IEVsZW1lbnRSZWY8SFRNTFRhYmxlRWxlbWVudD47XHJcbiAgQElucHV0KCdjdWJlJykgX2N1YmU/OiBzdHJpbmc7XHJcbiAgQElucHV0KCd4QXhpcycpIF94QXhpcyE6IHN0cmluZztcclxuICBASW5wdXQoJ3NlcmllcycpIF9zZXJpZXMhOiBzdHJpbmc7XHJcbiAgcHJpdmF0ZSBfaW5kaWNlcz86IHN0cmluZ1tdO1xyXG4gIHB1YmxpYyBnZXQgaW5kaWNlcygpOiBzdHJpbmdbXSB8IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5faW5kaWNlcztcclxuICB9XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IGluZGljZXModmFsdWU6IHN0cmluZ1tdIHwgc3RyaW5nKSB7XHJcbiAgICBpZiAodmFsdWUpIHRoaXMuX2luZGljZXMgPSBpc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcclxuICB9XHJcbiAgQElucHV0KCkgc2NvcGU6IFNjb3BlVHlwZTtcclxuICBwcml2YXRlIF9zdW06IFN1bU9wdGlvbnM7XHJcbiAgQElucHV0KCkgc2V0IHN1bSh2YWw6IFN1bU9wdGlvbnMpIHtcclxuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZShheGlzOiBzdHJpbmcgfCBudW1iZXIpIHtcclxuICAgICAgc3dpdGNoIChheGlzKSB7XHJcbiAgICAgICAgY2FzZSAnJG1vbnRoJzpcclxuICAgICAgICAgIHJldHVybiAnTScgKyAoJzAnICsgbmV3IERhdGUoKS5nZXRNb250aCgpLnRvU3RyaW5nKCkpLnNsaWNlKC0yKTtcclxuICAgICAgICBjYXNlICckeWVhcic6XHJcbiAgICAgICAgICByZXR1cm4gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgY2FzZSAnJHF1YXJ0ZXInOlxyXG4gICAgICAgICAgcmV0dXJuIE1hdGguY2VpbChuZXcgRGF0ZSgpLmdldE1vbnRoKCkgLyAzKS50b1N0cmluZygpO1xyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICByZXR1cm4gYXhpcyA/IGF4aXMudG9TdHJpbmcoKSA6IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuX3N1bSA9IHtcclxuICAgICAgLy9mbjogdmFsLmZuLFxyXG4gICAgICB0aXRsZTogdmFsLnRpdGxlLFxyXG4gICAgICB4QXhpczogdHJhbnNsYXRlKHZhbC54QXhpcyksXHJcbiAgICAgIHNlcmllOiB0cmFuc2xhdGUodmFsLnNlcmllKVxyXG4gICAgfTtcclxuICB9XHJcbiAgQElucHV0KCkgZmlsdGVyczogQXhlc01hcDtcclxuICBwcml2YXRlIF9pbnRlcmFjdGl2ZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgbG9hZGluZzogYm9vbGVhbjtcclxuICBwdWJsaWMgZ2V0IGludGVyYWN0aXZlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ludGVyYWN0aXZlO1xyXG4gIH1cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgaW50ZXJhY3RpdmUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2ludGVyYWN0aXZlID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcclxuICB9XHJcbiAgQE91dHB1dCgnZXhwbG9yZScpIHJlYWRvbmx5IG9uRXhwbG9yZSA9IG5ldyBFdmVudEVtaXR0ZXI8QXhlc01hcD4oKTtcclxuICBAT3V0cHV0KCkgcmVhZG9ubHkgbG9hZGluZ0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICByb3dzOiBLZXlWYWx1ZVtdO1xyXG4gIGNvbHVtbnM6IEtleVZhbHVlW107XHJcbiAgaW5kZXhlczogQ3ViZUluZGV4W107XHJcbiAgZGF0YTogeyBbcm93OiBzdHJpbmddOiB7IFtjb2x1bW46IHN0cmluZ106IG51bWJlcjsgfTsgfTtcclxuICB0b3RhbHM6IHsgW2NvbHVtbjogc3RyaW5nXTogbnVtYmVyIH07XHJcbiAgY3ViZTogQ3ViZTtcclxuICB4QXhpczogQ3ViZUF4aXM7XHJcbiAgc2VyaWVzOiBDdWJlQXhpcztcclxuICBwcml2YXRlIF9wcmVwYXJlOiBQcm9taXNlPGFueT47XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9zYjogUHJvbXB0U2VydmljZSxcclxuICAgIHByaXZhdGUgX3NlcnZpY2U6IEN1YmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2Vzc2lvbjogU2Vzc2lvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9kczogRGF0YXNvdXJjZVNlcnZpY2UpIHsgfVxyXG5cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBpZiAoY2hhbmdlc1snX2N1YmUnXSkge1xyXG4gICAgICB0aGlzLmN1YmUgPSB0aGlzLmN1YmUgPyB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuY3ViZXMuZmluZChjID0+IGMubmFtZSA9PT0gdGhpcy5fY3ViZSkgOlxyXG4gICAgICAgIHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5jdWJlc1swXTtcclxuICAgICAgdGhpcy5DVVJSRU5DWSA9IHRoaXMuY3ViZS5jdXJyZW5jeUNvZGUgLyp8fCB0aGlzLl9zZXJ2aWNlLmN1cnJlbmN5Q29kZSovO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX2luZGljZXMpXHJcbiAgICAgIHRoaXMuaW5kZXhlcyA9IHRoaXMuY3ViZS5pbmRpY2VzLmZpbHRlcihpID0+IHRoaXMuX2luZGljZXMuaW5kZXhPZihpLm5hbWUpID4gLTEpO1xyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuaW5kZXhlcyA9IHRoaXMuY3ViZS5pbmRpY2VzO1xyXG4gICAgICB0aGlzLl9pbmRpY2VzID0gdGhpcy5pbmRleGVzLm1hcChpID0+IGkubmFtZSk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snX3hBeGlzJ10gfHwgY2hhbmdlc1snX3NlcmllcyddKSB7XHJcbiAgICAgIHRoaXMueEF4aXMgPSB0aGlzLmN1YmUuYXhlcy5maW5kKGEgPT4gYS5uYW1lID09PSB0aGlzLl94QXhpcykgfHwgdGhpcy5jdWJlLmF4ZXNbMF07XHJcbiAgICAgIHRoaXMuc2VyaWVzID0gdGhpcy5jdWJlLmF4ZXMuZmluZChhID0+IGEubmFtZSA9PT0gdGhpcy5fc2VyaWVzKSB8fCB0aGlzLmN1YmUuYXhlc1sxXTtcclxuICAgICAgdGhpcy5fcHJlcGFyZSA9IGZvcmtKb2luKHRoaXMuX2RzLmFsbCh0aGlzLnNlcmllcy5kYXRhVHlwZSkucGlwZSh0YXAociA9PlxyXG4gICAgICAgIHRoaXMucm93cyA9IHJcclxuICAgICAgKSksXHJcbiAgICAgICAgdGhpcy5fZHMuYWxsKHRoaXMueEF4aXMuZGF0YVR5cGUpLnBpcGUodGFwKGMgPT5cclxuICAgICAgICAgIHRoaXMuY29sdW1ucyA9IGNcclxuICAgICAgICApKSkudG9Qcm9taXNlKCkudGhlbihcclxuICAgICAgICAgICgpID0+XHJcbiAgICAgICAgICAgIHRoaXMuX3N1bSAmJlxyXG4gICAgICAgICAgICB0aGlzLl9hZGRzdW0oKSk7XHJcbiAgICB9XHJcbiAgICBpZiAoY2hhbmdlc1snZmlsdGVycyddKVxyXG4gICAgICB0aGlzLnJlZnJlc2goKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfYWRkc3VtKCkge1xyXG4gICAgbGV0IHsgeEF4aXMsIHNlcmllIH0gPSB0aGlzLl9zdW07XHJcbiAgICBpZiAoeEF4aXMpIHtcclxuICAgICAgY29uc3QgY29sdW1ucyA9IFtdO1xyXG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjID0+IHtcclxuICAgICAgICBjb2x1bW5zLnB1c2goYyk7XHJcbiAgICAgICAgaWYgKHhBeGlzLnRvU3RyaW5nKCkgPT09IGMua2V5KVxyXG4gICAgICAgICAgY29sdW1ucy5wdXNoKHtcclxuICAgICAgICAgICAga2V5OiAnX3N1bScsXHJcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLl9zdW0udGl0bGVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5jb2x1bW5zID0gY29sdW1ucztcclxuICAgIH1cclxuICAgIGlmIChzZXJpZSkge1xyXG4gICAgICBjb25zdCByb3dzID0gW107XHJcbiAgICAgIHRoaXMucm93cy5mb3JFYWNoKHIgPT4ge1xyXG4gICAgICAgIHJvd3MucHVzaChyKTtcclxuICAgICAgICBpZiAoc2VyaWUudG9TdHJpbmcoKSA9PT0gci5rZXkpXHJcbiAgICAgICAgICByb3dzLnB1c2goe1xyXG4gICAgICAgICAgICBrZXk6ICdfc3VtJyxcclxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuX3N1bS50aXRsZVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnJvd3MgPSByb3dzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVmcmVzaCgpIHtcclxuICAgIGNvbnN0IHByb2dyZXNzVGFzayA9IHNldFRpbWVvdXQoKCkgPT5cclxuICAgICAgdGhpcy5sb2FkaW5nQ2hhbmdlLm5leHQodGhpcy5sb2FkaW5nID0gdHJ1ZSlcclxuICAgICAgLCBMT0FESU5HX0RFTEFZKTtcclxuICAgIHRoaXMuX3ByZXBhcmUudGhlbigoKSA9PiB0aGlzLl9zZXJ2aWNlLnNlcmllcyh0aGlzLmN1YmUubmFtZSwgdGhpcy54QXhpcy5uYW1lLCB7XHJcbiAgICAgIHNlcmllczogdGhpcy5zZXJpZXMubmFtZSxcclxuICAgICAgaW5kaWNlczogdGhpcy5faW5kaWNlcyxcclxuICAgICAgZmlsdGVyczogdGhpcy5maWx0ZXJzLFxyXG4gICAgICBzY29wZTogdGhpcy5zY29wZVxyXG4gICAgfSBhcyBhbnkpLnBpcGUoXHJcbiAgICAgIG1vZGVsaXplKCksIGZpcnN0KCksIHRhcChkID0+IHtcclxuICAgICAgICB0aGlzLl90b3RhbHMoZCk7XHJcbiAgICAgICAgdGhpcy5zdW0gJiZcclxuICAgICAgICAgIHRoaXMuX2NhbGN1bGF0ZXN1bShkKTtcclxuICAgICAgfSkpLnN1YnNjcmliZShkID0+XHJcbiAgICAgICAgdGhpcy5kYXRhID0gZCxcclxuICAgICAgICAoZTogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHRoaXMuX3NiLmVycm9yKGUuc3RhdHVzID09PSA0MDEgPyAnVW5hdXRob3JpemVkJyA6IG51bGwpO1xyXG4gICAgICAgIH0sICgpID0+IHtcclxuICAgICAgICAgIGNsZWFyVGltZW91dChwcm9ncmVzc1Rhc2spO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nQ2hhbmdlLm5leHQodGhpcy5sb2FkaW5nID0gZmFsc2UpO1xyXG4gICAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuICBwcml2YXRlIF90b3RhbHMoZGF0YTogeyBba2V5OiBzdHJpbmddOiB7IFtrZXk6IHN0cmluZ106IG51bWJlcjsgfTsgfSkge1xyXG4gICAgbGV0IGdyYW5kID0gMDtcclxuICAgIHRoaXMuaW5kZXhlcy5mb3JFYWNoKGkgPT4ge1xyXG4gICAgICBjb25zdCBpbmRleCA9IGRhdGFbaS5uYW1lXTtcclxuICAgICAgaWYgKCFpbmRleCkgZGF0YVtpLm5hbWVdID0ge307XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGxldCBzdW0gPSAwLCB4O1xyXG4gICAgICAgIGZvciAoeCBpbiBpbmRleClcclxuICAgICAgICAgIHN1bSArPSBpbmRleFt4XTtcclxuICAgICAgICBpbmRleFsnX3RvdGFsJ10gPSBzdW07XHJcbiAgICAgICAgZ3JhbmQgKz0gc3VtO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMucm93cy5mb3JFYWNoKHIgPT4ge1xyXG4gICAgICBpZiAoIWRhdGFbci5rZXldKVxyXG4gICAgICAgIGRhdGFbci5rZXldID0ge307XHJcbiAgICAgIGNvbnN0IGxpbmUgPSBkYXRhW3Iua2V5XTtcclxuICAgICAgbGV0IHN1bSA9IDAsIHg7XHJcbiAgICAgIGlmIChsaW5lKVxyXG4gICAgICAgIGZvciAoeCBpbiBsaW5lKVxyXG4gICAgICAgICAgc3VtICs9IGxpbmVbeF07XHJcbiAgICAgIGRhdGFbci5rZXldWydfdG90YWwnXSA9IHN1bTtcclxuICAgICAgZ3JhbmQgLT0gc3VtO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLnRvdGFscyA9IHt9O1xyXG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goYyA9PiB7XHJcbiAgICAgIGxldCBzdW0gPSAwLCBrZXk7XHJcbiAgICAgIGZvciAoa2V5IGluIGRhdGEpIHtcclxuICAgICAgICBjb25zdCB2YWwgPSBkYXRhW2tleV1bYy5rZXldO1xyXG4gICAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgIHN1bSArPSB0aGlzLl9pbmRpY2VzLmluZGV4T2Yoa2V5KSA+IC0xID8gdmFsIDogLXZhbDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRvdGFsc1tjLmtleV0gPSBzdW07XHJcbiAgICB9KTtcclxuICAgIHRoaXMudG90YWxzWydfdG90YWwnXSA9IGdyYW5kO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2FsY3VsYXRlc3VtKGRhdGEpIHtcclxuICAgIGxldCB7IHhBeGlzLCBzZXJpZS8qLCBmbiovIH0gPSB0aGlzLl9zdW07XHJcbiAgICBpZiAoeEF4aXMpIHtcclxuICAgICAgbGV0IHRvdGFsID0gMDtcclxuICAgICAgdGhpcy5yb3dzLmZvckVhY2gociA9PiB7XHJcbiAgICAgICAgY29uc3Qgcm93ID0gZGF0YVtyLmtleV07XHJcbiAgICAgICAgaWYgKCFyb3cpXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgbGV0IHN1bSA9IDAsIGkgPSAwO1xyXG4gICAgICAgIHdoaWxlIChpIDwgdGhpcy5jb2x1bW5zLmxlbmd0aCkge1xyXG4gICAgICAgICAgbGV0IGtleSA9IHRoaXMuY29sdW1uc1tpXS5rZXksIHZhbCA9IHJvd1trZXldO1xyXG4gICAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICBzdW0gKz0gdmFsO1xyXG4gICAgICAgICAgaWYgKGtleSA9PT0geEF4aXMpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgaSsrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkYXRhW3Iua2V5XVsnX3N1bSddID0gc3VtO1xyXG4gICAgICAgIHRvdGFsICs9IHN1bTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudG90YWxzWydfc3VtJ10gPSB0b3RhbDtcclxuICAgIH1cclxuICAgIGlmIChzZXJpZSkge1xyXG4gICAgICBsZXQgdG90YWwgPSAwO1xyXG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjID0+IHtcclxuICAgICAgICBsZXQgc3VtID0gMCwgaSA9IDA7XHJcbiAgICAgICAgd2hpbGUgKGkgPCB0aGlzLnJvd3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICBsZXQga2V5ID0gdGhpcy5yb3dzW2ldLmtleSwgcm93ID0gZGF0YVtrZXldO1xyXG4gICAgICAgICAgaWYgKHJvdykge1xyXG4gICAgICAgICAgICBsZXQgdmFsID0gcm93W2Mua2V5XTtcclxuICAgICAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICAgIHN1bSArPSB2YWw7XHJcbiAgICAgICAgICAgIGlmIChrZXkgPT09IHNlcmllKVxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaSsrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkYXRhWydfc3VtJ11bYy5rZXldID0gc3VtO1xyXG4gICAgICAgIHRvdGFsICs9IHN1bTtcclxuICAgICAgfSk7XHJcbiAgICAgIGRhdGFbJ19zdW0nXVsnX3RvdGFsJ10gPSB0b3RhbDtcclxuICAgIH1cclxuICB9XHJcbiAgZXhwbG9yZSh4OiBzdHJpbmcgfCBudW1iZXIgfCBzdHJpbmdbXSB8IG51bWJlcltdLCBzZXJpZTogc3RyaW5nIHwgbnVtYmVyIHwgc3RyaW5nW10gfCBudW1iZXJbXSkge1xyXG4gICAgaWYgKCF0aGlzLmludGVyYWN0aXZlKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5zdW0pIHtcclxuICAgICAgaWYgKHggPT09ICdfc3VtJykge1xyXG4gICAgICAgIHggPSBbXSBhcyBzdHJpbmdbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29sdW1ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgbGV0IGtleSA9IHRoaXMuY29sdW1uc1tpXS5rZXk7XHJcbiAgICAgICAgICB4LnB1c2goa2V5KTtcclxuICAgICAgICAgIGlmIChrZXkgPT09IHRoaXMuX3N1bS54QXhpcylcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChzZXJpZSA9PT0gJ19zdW0nKSB7XHJcbiAgICAgICAgc2VyaWUgPSBbXSBhcyBzdHJpbmdbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucm93cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgbGV0IGtleSA9IHRoaXMucm93c1tpXS5rZXk7XHJcbiAgICAgICAgICBzZXJpZS5wdXNoKGtleSk7XHJcbiAgICAgICAgICBpZiAoa2V5ID09PSB0aGlzLl9zdW0uc2VyaWUpXHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgYXhlcyA9IHsgLi4udGhpcy5maWx0ZXJzIH0gYXMgQXhlc01hcDtcclxuICAgIGF4ZXNbdGhpcy54QXhpcy5uYW1lXSA9IHg7XHJcbiAgICBheGVzW3RoaXMuc2VyaWVzLm5hbWVdID0gc2VyaWU7XHJcbiAgICB0aGlzLm9uRXhwbG9yZS5lbWl0KGF4ZXMpO1xyXG4gIH1cclxuICBtb3ZlKHgsIHkpIHtcclxuICAgIGxldCByb3dJbmRleCA9IDA7XHJcbiAgICBmb3IgKGxldCBiID0gMDsgYiA8IHRoaXMudGFibGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudEJvZGllcy5sZW5ndGg7IGIrKykge1xyXG4gICAgICBsZXQgdEJvZHkgPSB0aGlzLnRhYmxlRWxlbWVudC5uYXRpdmVFbGVtZW50LnRCb2RpZXMuaXRlbShiKTtcclxuICAgICAgZm9yIChsZXQgciA9IDA7IHIgPCB0Qm9keS5yb3dzLmxlbmd0aDsgcisrKSB7XHJcbiAgICAgICAgbGV0IHJvdyA9IHRCb2R5LnJvd3MuaXRlbShyKTtcclxuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IHJvdy5jZWxscy5sZW5ndGg7IGMrKykge1xyXG4gICAgICAgICAgbGV0IGNlbGwgPSByb3cuY2VsbHMuaXRlbShjKTtcclxuICAgICAgICAgIGlmIChjID09PSB4KVxyXG4gICAgICAgICAgICBjZWxsLmNsYXNzTGlzdC5hZGQoJ2NlbGwteCcpO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBjZWxsLmNsYXNzTGlzdC5yZW1vdmUoJ2NlbGwteCcpO1xyXG4gICAgICAgICAgaWYgKHJvd0luZGV4ID09PSB5KVxyXG4gICAgICAgICAgICBjZWxsLmNsYXNzTGlzdC5hZGQoJ2NlbGwteScpO1xyXG4gICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICBjZWxsLmNsYXNzTGlzdC5yZW1vdmUoJ2NlbGwteScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByb3dJbmRleCsrO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCB0Rm9vdCA9IHRoaXMudGFibGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudEZvb3QsIHJvdyA9IHRGb290LnJvd3NbMF07XHJcbiAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgcm93LmNlbGxzLmxlbmd0aDsgYysrKSB7XHJcbiAgICAgICAgbGV0IGNlbGwgPSByb3cuY2VsbHMuaXRlbShjKTtcclxuICAgICAgICBpZiAoYyA9PT0geClcclxuICAgICAgICAgIGNlbGwuY2xhc3NMaXN0LmFkZCgnY2VsbC14Jyk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgY2VsbC5jbGFzc0xpc3QucmVtb3ZlKCdjZWxsLXgnKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEN1YmVJbmZvQ2VsbEFyZ3Mge1xyXG4gIHByaXZhdGUgX3ZhbHVlOiBudW1iZXI7XHJcbiAgZ2V0IHZhbHVlKCk6IG51bWJlciB7IHJldHVybiB0aGlzLl92YWx1ZTsgfVxyXG4gIHByaXZhdGUgX3N1bW1hcnk6IGJvb2xlYW47XHJcbiAgZ2V0IHN1bW1hcnkoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLl9zdW1tYXJ5OyB9XHJcbiAgY29sb3I6IHN0cmluZztcclxuICBiYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcclxuICBkYXRhOiB7IFtyb3c6IHN0cmluZ106IHsgW2NvbHVtbjogc3RyaW5nXTogbnVtYmVyOyB9OyB9O1xyXG4gIHJvdzogc3RyaW5nO1xyXG4gIGNvbHVtbjogc3RyaW5nO1xyXG59XHJcblxyXG50eXBlIFN1bU9wdGlvbnMgPSB7XHJcbiAgeEF4aXM/OiBzdHJpbmcgfCBudW1iZXI7XHJcbiAgc2VyaWU/OiBzdHJpbmcgfCBudW1iZXI7XHJcbiAgdGl0bGU6IGFueTtcclxuICAvL2ZuPzogKCkgPT4gbnVtYmVyO1xyXG59XHJcbnR5cGUgS2V5VmFsdWUgPSB7XHJcbiAga2V5OiBzdHJpbmc7XHJcbiAgdmFsdWU6IGFueTtcclxufTtcclxuXHJcbiIsIjx0YWJsZSAjdGFibGUgY2xhc3M9XCJtYXQtdGFibGUgY3ViZS10YWJsZVwiIChtb3VzZWxlYXZlKT1cIm1vdmUoLTEsIC0xKVwiICpuZ0lmPVwiZGF0YVwiPlxyXG4gIDx0aGVhZD5cclxuICAgIDwhLS0gaGVhZGVycyAtLT5cclxuICAgIDx0ciBjbGFzcz1cIm1hdC1yb3dcIj5cclxuICAgICAgPHRoPjwvdGg+XHJcbiAgICAgIDx0aCAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnM7IGxldCB4ID0gaW5kZXhcIiAobW91c2VlbnRlcik9XCJtb3ZlKHggKyAxLCAtMilcIiBjbGFzcz1cIm1hdC1oZWFkZXItY2VsbFwiPlxyXG4gICAgICAgIHt7IGNvbHVtbi52YWx1ZSB9fVxyXG4gICAgICA8L3RoPlxyXG4gICAgICA8dGg+PC90aD5cclxuICAgIDwvdHI+XHJcbiAgPC90aGVhZD5cclxuICA8dGJvZHk+XHJcbiAgICA8IS0tIGluZGljZXMgLS0+XHJcbiAgICA8dHIgY2xhc3M9XCJtYXQtcm93IGN1YmUtaW5kZXhcIiAqbmdGb3I9XCJsZXQgaW5kZXggb2YgaW5kZXhlczsgbGV0IHkgPSBpbmRleFwiPlxyXG4gICAgICA8dGggY2xhc3M9XCJtYXQtaGVhZGVyLWNlbGxcIiAobW91c2VlbnRlcik9XCJtb3ZlKDAsIHkpXCI+e3tpbmRleC50aXRsZX19PC90aD5cclxuICAgICAgPHRkICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uczsgbGV0IHggPSBpbmRleFwiIGNsYXNzPVwibWF0LWNlbGwgZmlndXJlXCIgKG1vdXNlZW50ZXIpPVwibW92ZSh4ICsgMSwgeSlcIj5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cImRhdGFbaW5kZXgubmFtZV0gJiYgZGF0YVtpbmRleC5uYW1lXVtjb2x1bW4ua2V5XTsgZWxzZSB6ZXJvXCI+e3sgZGF0YVtpbmRleC5uYW1lXVtjb2x1bW4ua2V5XSB8IG51bWJlciA6IFBSRUNJU0lPTiB9fTwvc3Bhbj5cclxuICAgICAgPC90ZD5cclxuICAgICAgPHRoIGNsYXNzPVwibWF0LWNlbGwgZmlndXJlXCIgKG1vdXNlZW50ZXIpPVwibW92ZSgwLCB5KVwiIFtuZ1N3aXRjaF09XCIhQ1VSUkVOQ1lcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJ0cnVlXCI+XHJcbiAgICAgICAgICB7eyBkYXRhW2luZGV4Lm5hbWVdWydfdG90YWwnXSB8IG51bWJlciA6IFBSRUNJU0lPTiB9fVxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgIHt7IGRhdGFbaW5kZXgubmFtZV1bJ190b3RhbCddIHwgY3VycmVuY3kgOiBDVVJSRU5DWTogJ3N5bWJvbCcgOiBQUkVDSVNJT04gfX1cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC90aD5cclxuICAgIDwvdHI+XHJcbiAgPC90Ym9keT5cclxuICA8dGJvZHk+XHJcbiAgICA8IS0tIHJvd3MgLS0+XHJcbiAgICA8dHIgKm5nRm9yPVwibGV0IHJvdyBvZiByb3dzOyBsZXQgeSA9IGluZGV4XCIgY2xhc3M9XCJtYXQtcm93XCI+XHJcbiAgICAgIDx0aCBjbGFzcz1cIm1hdC1oZWFkZXItY2VsbFwiIChtb3VzZWVudGVyKT1cIm1vdmUoLTIsIHkgKyBpbmRpY2VzLmxlbmd0aClcIj57eyByb3cudmFsdWUgfX08L3RoPlxyXG4gICAgICA8dGQgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zOyBsZXQgeCA9IGluZGV4XCIgY2xhc3M9XCJtYXQtY2VsbCBmaWd1cmVcIiAobW91c2VlbnRlcik9XCJtb3ZlKHggKyAxLCB5ICsgaW5kaWNlcy5sZW5ndGgpXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRhdGFbcm93LmtleV0gJiYgZGF0YVtyb3cua2V5XVtjb2x1bW4ua2V5XSAhPT0gdW5kZWZpbmVkOyBlbHNlIHplcm9cIj5cclxuICAgICAgICAgIDxzcGFuIFtjbGFzcy5jbGlja2FibGVdPVwiaW50ZXJhY3RpdmVcIiAoY2xpY2spPVwiZXhwbG9yZShjb2x1bW4ua2V5LCByb3cua2V5KVwiPlxyXG4gICAgICAgICAgICB7e2RhdGFbcm93LmtleV1bY29sdW1uLmtleV0gfCBudW1iZXIgOiBQUkVDSVNJT04gfX1cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC90ZD5cclxuICAgICAgPHRoIGNsYXNzPVwibWF0LWNlbGwgZmlndXJlXCIgKG1vdXNlZW50ZXIpPVwibW92ZSgtMSwgeSArIGluZGljZXMubGVuZ3RoKVwiIFtuZ1N3aXRjaF09XCIhQ1VSUkVOQ1lcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJ0cnVlXCI+XHJcbiAgICAgICAgICB7eyBkYXRhW3Jvdy5rZXldWydfdG90YWwnXSB8IG51bWJlciA6IFBSRUNJU0lPTiB9fVxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgIHt7IGRhdGFbcm93LmtleV1bJ190b3RhbCddIHwgY3VycmVuY3kgOiBDVVJSRU5DWTogJ3N5bWJvbCcgOiBQUkVDSVNJT04gfX1cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC90aD5cclxuICAgIDwvdHI+XHJcbiAgPC90Ym9keT5cclxuICA8dGZvb3Q+XHJcbiAgICA8IS0tIGF2YWlsYWJsZSAtLT5cclxuICAgIDx0cj5cclxuICAgICAgPHRoPjwvdGg+XHJcbiAgICAgIDx0ZCAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnM7IGxldCB4ID0gaW5kZXhcIiBjbGFzcz1cIm1hdC1jZWxsIGZpZ3VyZVwiIChtb3VzZWVudGVyKT1cIm1vdmUoeCArIDEsIC0yKVwiXHJcbiAgICAgICAgICBbY2xhc3MubmVnYXRpdmUtZmlndXJlXT1cInRvdGFsc1tjb2x1bW4ua2V5XSA8IDBcIj5cclxuICAgICAgICB7e3RvdGFsc1tjb2x1bW4ua2V5XSB8IGN1cnJlbmN5IDogQ1VSUkVOQ1k6ICdzeW1ib2wnIDogUFJFQ0lTSU9OIH19XHJcbiAgICAgIDwvdGQ+XHJcbiAgICAgIDx0aCBjbGFzcz1cIm1hdC1jZWxsIGZpZ3VyZVwiPnt7dG90YWxzWydfdG90YWwnXSB8IGN1cnJlbmN5IDogQ1VSUkVOQ1k6ICdzeW1ib2wnIDogUFJFQ0lTSU9OIH19PC90aD5cclxuICAgIDwvdHI+XHJcbiAgPC90Zm9vdD5cclxuPC90YWJsZT5cclxuPG5nLXRlbXBsYXRlICN6ZXJvPlxyXG4gIDBcclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
@@ -30,10 +30,10 @@ export class CubeParallelComponent {
30
30
  this._loading.pipe(debounceTime(200)).subscribe(ok => this.loading = ok);
31
31
  }
32
32
  ngOnChanges(changes) {
33
- delete this.axes[this.xAxis];
33
+ delete this.filters[this.xAxis];
34
34
  this._cube = this._session.profile.cubes.find(c => c.name === this.cube) || this._session.profile.cubes[0];
35
35
  this.format = (this._cube.currencyCode ? 'c' : 'n') + this._service.fractionDigits;
36
- if (changes['axes'])
36
+ if (changes['filters'])
37
37
  this._initialize();
38
38
  else if (changes['size'] && this.items.length)
39
39
  this.width = Math.round(this.size / this.items.length) + 'px';
@@ -49,7 +49,7 @@ export class CubeParallelComponent {
49
49
  }
50
50
  _initialize() {
51
51
  this._loading.next(true);
52
- const filters = { ...this.axes };
52
+ const filters = { ...this.filters };
53
53
  this._service.series(this._cube.name, this.xAxis, {
54
54
  series: this.series,
55
55
  filters,
@@ -71,7 +71,7 @@ export class CubeParallelComponent {
71
71
  this.items = [];
72
72
  const colorMap = {};
73
73
  let colorIndex = 0;
74
- let originalXAxis = this.axes[isArray(this.xAxis) ? this.xAxis[0] : this.xAxis], originalSeries = this.axes[isArray(this.series) ? this.series[0] : this.series];
74
+ let originalXAxis = this.filters[isArray(this.xAxis) ? this.xAxis[0] : this.xAxis], originalSeries = this.filters[isArray(this.series) ? this.series[0] : this.series];
75
75
  if (!isArray(originalXAxis))
76
76
  originalXAxis = [originalXAxis];
77
77
  if (!isArray(originalSeries))
@@ -114,7 +114,7 @@ export class CubeParallelComponent {
114
114
  axes[xAxis[i]] = x.split(AXES_CODE_DIVIDER)[i];
115
115
  }
116
116
  this.onExplore.emit({
117
- axes: { ...this.axes, ...axes },
117
+ axes: { ...this.filters, ...axes },
118
118
  index
119
119
  });
120
120
  }
@@ -124,12 +124,12 @@ export class CubeParallelComponent {
124
124
  this._loading.complete();
125
125
  }
126
126
  }
127
- CubeParallelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CubeParallelComponent, deps: [{ token: i1.PromptService }, { token: i2.CubeService }, { token: i3.SessionService }], target: i0.ɵɵFactoryTarget.Component });
128
- CubeParallelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.2", type: CubeParallelComponent, selector: "bizdoc-cube-parallel", inputs: { axes: "axes", xAxis: "xAxis", series: "series", indices: "indices", cube: "cube", size: "size", chartType: "chartType", scope: "scope" }, outputs: { onExplore: "explore" }, usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"items.length\" class=\"row\">\r\n <div *ngFor=\"let s of items\" class=\"element\">\r\n <ejs-sparkline [width]='width' height='100px' [type]='s.chartType' [id]=\"s.data.name\"\r\n [dataSource]=\"s.data.points\" xName=\"name\"\r\n yName=\"y\" [palette]=\"s.palette\" [format]=\"format\"\r\n valueType=\"Category\"\r\n [enableRtl]=\"enableRtl\"\r\n [border]=\"s.border\"\r\n [fill]=\"s.fill\"\r\n [axisSettings]=\"axisSettings\"\r\n [markerSettings]=\"s.markerSettings\"\r\n (pointRegionMouseClick)=\"sprklineClick(s, $event)\"\r\n [tooltipSettings]=\"s.tooltipSettings\">\r\n </ejs-sparkline>\r\n <h4 class=\"mat-h4\">{{s.data.title}}</h4>\r\n </div>\r\n</div>\r\n", styles: [":host{padding:8px}.element{display:flex;flex-direction:column;align-items:center;flex:1 1 auto}\n"], components: [{ type: i4.SparklineComponent, selector: "ejs-sparkline", inputs: ["axisSettings", "border", "containerArea", "dataLabelSettings", "dataSource", "enablePersistence", "enableRtl", "endPointColor", "fill", "format", "height", "highPointColor", "lineWidth", "locale", "lowPointColor", "markerSettings", "negativePointColor", "opacity", "padding", "palette", "query", "rangeBandSettings", "rangePadding", "startPointColor", "theme", "tiePointColor", "tooltipSettings", "type", "useGroupingSeparator", "valueType", "width", "xName", "yName"], outputs: ["axisRendering", "dataLabelRendering", "load", "loaded", "markerRendering", "pointRegionMouseClick", "pointRegionMouseMove", "pointRendering", "resize", "seriesRendering", "sparklineMouseClick", "sparklineMouseMove", "tooltipInitialize"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
129
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: CubeParallelComponent, decorators: [{
127
+ CubeParallelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: CubeParallelComponent, deps: [{ token: i1.PromptService }, { token: i2.CubeService }, { token: i3.SessionService }], target: i0.ɵɵFactoryTarget.Component });
128
+ CubeParallelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.0.3", type: CubeParallelComponent, selector: "bizdoc-cube-parallel", inputs: { filters: "filters", xAxis: "xAxis", series: "series", indices: "indices", cube: "cube", size: "size", chartType: "chartType", scope: "scope" }, outputs: { onExplore: "explore" }, usesOnChanges: true, ngImport: i0, template: "<div *ngIf=\"items.length\" class=\"row\">\r\n <div *ngFor=\"let s of items\" class=\"element\">\r\n <ejs-sparkline [width]='width' height='100px' [type]='s.chartType' [id]=\"s.data.name\"\r\n [dataSource]=\"s.data.points\" xName=\"name\"\r\n yName=\"y\" [palette]=\"s.palette\" [format]=\"format\"\r\n valueType=\"Category\"\r\n [enableRtl]=\"enableRtl\"\r\n [border]=\"s.border\"\r\n [fill]=\"s.fill\"\r\n [axisSettings]=\"axisSettings\"\r\n [markerSettings]=\"s.markerSettings\"\r\n (pointRegionMouseClick)=\"sprklineClick(s, $event)\"\r\n [tooltipSettings]=\"s.tooltipSettings\">\r\n </ejs-sparkline>\r\n <h4 class=\"mat-h4\">{{s.data.title}}</h4>\r\n </div>\r\n</div>\r\n", styles: [":host{padding:8px}.element{display:flex;flex-direction:column;align-items:center;flex:1 1 auto}\n"], components: [{ type: i4.SparklineComponent, selector: "ejs-sparkline", inputs: ["axisSettings", "border", "containerArea", "dataLabelSettings", "dataSource", "enablePersistence", "enableRtl", "endPointColor", "fill", "format", "height", "highPointColor", "lineWidth", "locale", "lowPointColor", "markerSettings", "negativePointColor", "opacity", "padding", "palette", "query", "rangeBandSettings", "rangePadding", "startPointColor", "theme", "tiePointColor", "tooltipSettings", "type", "useGroupingSeparator", "valueType", "width", "xName", "yName"], outputs: ["axisRendering", "dataLabelRendering", "load", "loaded", "markerRendering", "pointRegionMouseClick", "pointRegionMouseMove", "pointRendering", "resize", "seriesRendering", "sparklineMouseClick", "sparklineMouseMove", "tooltipInitialize"] }], directives: [{ type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
129
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.3", ngImport: i0, type: CubeParallelComponent, decorators: [{
130
130
  type: Component,
131
131
  args: [{ selector: 'bizdoc-cube-parallel', template: "<div *ngIf=\"items.length\" class=\"row\">\r\n <div *ngFor=\"let s of items\" class=\"element\">\r\n <ejs-sparkline [width]='width' height='100px' [type]='s.chartType' [id]=\"s.data.name\"\r\n [dataSource]=\"s.data.points\" xName=\"name\"\r\n yName=\"y\" [palette]=\"s.palette\" [format]=\"format\"\r\n valueType=\"Category\"\r\n [enableRtl]=\"enableRtl\"\r\n [border]=\"s.border\"\r\n [fill]=\"s.fill\"\r\n [axisSettings]=\"axisSettings\"\r\n [markerSettings]=\"s.markerSettings\"\r\n (pointRegionMouseClick)=\"sprklineClick(s, $event)\"\r\n [tooltipSettings]=\"s.tooltipSettings\">\r\n </ejs-sparkline>\r\n <h4 class=\"mat-h4\">{{s.data.title}}</h4>\r\n </div>\r\n</div>\r\n", styles: [":host{padding:8px}.element{display:flex;flex-direction:column;align-items:center;flex:1 1 auto}\n"] }]
132
- }], ctorParameters: function () { return [{ type: i1.PromptService }, { type: i2.CubeService }, { type: i3.SessionService }]; }, propDecorators: { axes: [{
132
+ }], ctorParameters: function () { return [{ type: i1.PromptService }, { type: i2.CubeService }, { type: i3.SessionService }]; }, propDecorators: { filters: [{
133
133
  type: Input
134
134
  }], xAxis: [{
135
135
  type: Input
@@ -149,4 +149,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImpor
149
149
  type: Output,
150
150
  args: ['explore']
151
151
  }] } });
152
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYWxsZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9jdWJlL3BhcmFsbGVsL3BhcmFsbGVsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvY3ViZS9wYXJhbGxlbC9wYXJhbGxlbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWdDLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFHcEgsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3hELE9BQU8sRUFBRSxpQkFBaUIsRUFBa0MsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFL0MsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFFBQVEsQ0FBQzs7Ozs7OztBQUM5QixNQUFNO0FBTU4sTUFBTSxPQUNFLHFCQUFxQjtJQW1DM0IsWUFDVSxHQUFrQixFQUNsQixRQUFxQixFQUNyQixRQUF3QjtRQUZ4QixRQUFHLEdBQUgsR0FBRyxDQUFlO1FBQ2xCLGFBQVEsR0FBUixRQUFRLENBQWE7UUFDckIsYUFBUSxHQUFSLFFBQVEsQ0FBZ0I7UUFwQnpCLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBZ0IsQ0FBQztRQUN0RCxVQUFLLEdBQWdDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFDNUYsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUVWLGlCQUFZLEdBQUc7WUFDdEIsWUFBWSxFQUFFLEVBQ1E7U0FDRixDQUFDO1FBQ3ZCLFVBQUssR0FB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RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEF4aXNTZXR0aW5nc01vZGVsLCBJUG9pbnRSZWdpb25FdmVudEFyZ3MsIExpbmVTZXR0aW5nc01vZGVsLCBTcGFya2xpbmVUeXBlIH0gZnJvbSAnQHN5bmNmdXNpb24vZWoyLWFuZ3VsYXItY2hhcnRzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUHJvbXB0U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvcHJvbXB0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZXNzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2Vzc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQVhFU19DT0RFX0RJVklERVIsIEN1YmVTZXJ2aWNlLCBTY29wZVR5cGUsIFNlcmllcyB9IGZyb20gJy4uLy4uL2N1YmUvY3ViZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJy4uLy4uL2NvcmUvZnVuY3Rpb25zJztcclxuaW1wb3J0IHsgQXhlc01hcCwgQ3ViZSB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzJztcclxuaW1wb3J0IHsgSXRlbSB9IGZyb20gJy4vaXRlbSc7XHJcbi8qKiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2JpemRvYy1jdWJlLXBhcmFsbGVsJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcGFyYWxsZWwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWydwYXJhbGxlbC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydFxyXG4gIGNsYXNzIEN1YmVQYXJhbGxlbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpXHJcbiAgYXhlcyE6IEF4ZXNNYXA7XHJcbiAgQElucHV0KClcclxuICB4QXhpcyE6IHN0cmluZyB8IHN0cmluZ1tdO1xyXG4gIEBJbnB1dCgpXHJcbiAgc2VyaWVzITogc3RyaW5nIHwgc3RyaW5nW107XHJcbiAgQElucHV0KClcclxuICBpbmRpY2VzPzogc3RyaW5nIHwgc3RyaW5nW107XHJcbiAgQElucHV0KClcclxuICBjdWJlOiBzdHJpbmc7XHJcbiAgQElucHV0KClcclxuICBzaXplOiBudW1iZXI7XHJcbiAgQElucHV0KClcclxuICBjaGFydFR5cGU/OiBTcGFya2xpbmVUeXBlO1xyXG4gIEBJbnB1dCgpXHJcbiAgc2NvcGU/OiBTY29wZVR5cGU7XHJcbiAgQE91dHB1dCgnZXhwbG9yZScpXHJcbiAgcmVhZG9ubHkgb25FeHBsb3JlID0gbmV3IEV2ZW50RW1pdHRlcjxFeHBsb3JlRXZlbnQ+KCk7XHJcbiAgdGhlbWU6ICdNYXRlcmlhbCcgfCAnTWF0ZXJpYWxEYXJrJyA9IHRoaXMuX3Nlc3Npb24udGhlbWUuZGFyayA/ICdNYXRlcmlhbERhcmsnIDogJ01hdGVyaWFsJztcclxuICBpdGVtczogSXRlbVtdID0gW107XHJcbiAgZm9ybWF0OiBzdHJpbmc7XHJcbiAgcmVhZG9ubHkgYXhpc1NldHRpbmdzID0ge1xyXG4gICAgbGluZVNldHRpbmdzOiB7XHJcbiAgICB9IGFzIExpbmVTZXR0aW5nc01vZGVsLFxyXG4gIH0gYXMgQXhpc1NldHRpbmdzTW9kZWw7XHJcbiAgd2lkdGg6IHN0cmluZyA9ICcxNTBweCc7XHJcbiAgbG9hZGluZzogYm9vbGVhbjtcclxuICBwcml2YXRlIF9kYXRhOiBTZXJpZXNbXTtcclxuICBwcml2YXRlIF9jdWJlOiBDdWJlO1xyXG4gIHJlYWRvbmx5IGVuYWJsZVJ0bCA9IHRoaXMuX3Nlc3Npb24uaW52ZXJzZTtcclxuICBwcml2YXRlIF9hY2NlbnQgPSB0aGlzLl9zZXNzaW9uLmFjY2VudFBhbGV0dGU7XHJcbiAgcHJpdmF0ZSBfcHJpbWFyeSA9IHRoaXMuX3Nlc3Npb24ucHJpbWVyeVBhbGV0dGU7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9hZGluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9zYjogUHJvbXB0U2VydmljZSxcclxuICAgIHByaXZhdGUgX3NlcnZpY2U6IEN1YmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2Vzc2lvbjogU2Vzc2lvblNlcnZpY2UpIHtcclxuICAgIHRoaXMuX2xvYWRpbmcucGlwZShkZWJvdW5jZVRpbWUoMjAwKSkuc3Vic2NyaWJlKG9rID0+IHRoaXMubG9hZGluZyA9IG9rKTtcclxuICB9XHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgZGVsZXRlIHRoaXMuYXhlc1t0aGlzLnhBeGlzIGFzIHN0cmluZ107XHJcbiAgICB0aGlzLl9jdWJlID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmN1YmVzLmZpbmQoYyA9PiBjLm5hbWUgPT09IHRoaXMuY3ViZSkgfHwgdGhpcy5fc2Vzc2lvbi5wcm9maWxlLmN1YmVzWzBdO1xyXG4gICAgdGhpcy5mb3JtYXQgPSAodGhpcy5fY3ViZS5jdXJyZW5jeUNvZGUgPyAnYycgOiAnbicpICsgdGhpcy5fc2VydmljZS5mcmFjdGlvbkRpZ2l0cztcclxuICAgIGlmIChjaGFuZ2VzWydheGVzJ10pIHRoaXMuX2luaXRpYWxpemUoKTtcclxuICAgIGVsc2UgaWYgKGNoYW5nZXNbJ3NpemUnXSAmJiB0aGlzLml0ZW1zLmxlbmd0aCkgdGhpcy53aWR0aCA9IE1hdGgucm91bmQodGhpcy5zaXplIC8gdGhpcy5pdGVtcy5sZW5ndGgpICsgJ3B4JztcclxuICB9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zZXNzaW9uLnRoZW1lQ2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kpKS5cclxuICAgICAgc3Vic2NyaWJlKHQgPT4ge1xyXG4gICAgICAgIHRoaXMudGhlbWUgPSB0LmRhcmsgPyAnTWF0ZXJpYWxEYXJrJyA6ICdNYXRlcmlhbCc7XHJcbiAgICAgICAgdGhpcy5fcHJpbWFyeSA9IHRoaXMuX3Nlc3Npb24ucHJpbWVyeVBhbGV0dGU7XHJcbiAgICAgICAgdGhpcy5fYWNjZW50ID0gdGhpcy5fc2Vzc2lvbi5hY2NlbnRQYWxldHRlO1xyXG4gICAgICAgIHRoaXMuX2RyYXcoKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2luaXRpYWxpemUoKSB7XHJcbiAgICB0aGlzLl9sb2FkaW5nLm5leHQodHJ1ZSk7XHJcbiAgICBjb25zdCBmaWx0ZXJzID0geyAuLi50aGlzLmF4ZXMgfTtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLnNlcmllcyh0aGlzLl9jdWJlLm5hbWUsIHRoaXMueEF4aXMsIHtcclxuICAgICAgc2VyaWVzOiB0aGlzLnNlcmllcyxcclxuICAgICAgZmlsdGVycyxcclxuICAgICAgaW5kaWNlczogdGhpcy5pbmRpY2VzLFxyXG4gICAgICBncm91cEluZGljZXM6IHRydWUsXHJcbiAgICAgIHNjb3BlOiB0aGlzLnNjb3BlXHJcbiAgICB9KS5zdWJzY3JpYmUociA9PiB7XHJcbiAgICAgIHRoaXMuX2RhdGEgPSByO1xyXG4gICAgICB0aGlzLl9kcmF3KCk7XHJcbiAgICAgIGlmICh0aGlzLml0ZW1zLmxlbmd0aCkgdGhpcy53aWR0aCA9IE1hdGgubWF4KE1hdGgucm91bmQodGhpcy5zaXplIC8gdGhpcy5pdGVtcy5sZW5ndGgpLCAxNTApICsgJ3B4JztcclxuICAgICAgdGhpcy5fbG9hZGluZy5uZXh0KGZhbHNlKTtcclxuICAgIH0sIChlOiBIdHRwUmVzcG9uc2U8YW55PikgPT4ge1xyXG4gICAgICB0aGlzLl9zYi5lcnJvcihlLnN0YXR1cyA9PT0gNDAxID8gJ1VuYXV0aG9yaXplZCcgOiBudWxsKTtcclxuICAgICAgdGhpcy5fbG9hZGluZy5uZXh0KGZhbHNlKTtcclxuICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2RyYXcoKSB7XHJcbiAgICB0aGlzLml0ZW1zID0gW107XHJcbiAgICBjb25zdCBjb2xvck1hcCA9IHt9O1xyXG4gICAgbGV0IGNvbG9ySW5kZXggPSAwO1xyXG5cclxuICAgIGxldCBvcmlnaW5hbFhBeGlzID0gdGhpcy5heGVzW2lzQXJyYXkodGhpcy54QXhpcykgPyB0aGlzLnhBeGlzWzBdIDogdGhpcy54QXhpc10gYXMgc3RyaW5nIHwgc3RyaW5nW10sXHJcbiAgICAgIG9yaWdpbmFsU2VyaWVzID0gdGhpcy5heGVzW2lzQXJyYXkodGhpcy5zZXJpZXMpID8gdGhpcy5zZXJpZXNbMF0gOiB0aGlzLnNlcmllc10gYXMgc3RyaW5nIHwgc3RyaW5nW107XHJcblxyXG4gICAgaWYgKCFpc0FycmF5KG9yaWdpbmFsWEF4aXMpKVxyXG4gICAgICBvcmlnaW5hbFhBeGlzID0gW29yaWdpbmFsWEF4aXNdO1xyXG4gICAgaWYgKCFpc0FycmF5KG9yaWdpbmFsU2VyaWVzKSlcclxuICAgICAgb3JpZ2luYWxTZXJpZXMgPSBbb3JpZ2luYWxTZXJpZXNdO1xyXG4gICAgbGV0IG1heCA9IDA7XHJcbiAgICB0aGlzLl9kYXRhLmZvckVhY2gocyA9PiB7XHJcbiAgICAgIGlmIChzLnBvaW50cy5sZW5ndGggPCAyKVxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgY29uc3QgcGFsZXR0ZXMgPSBbXTtcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzLnBvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCBwb2ludCA9IHMucG9pbnRzW2ldLCBjb2xvciA9IGNvbG9yTWFwW3BvaW50LnhdO1xyXG4gICAgICAgIGlmICghY29sb3IpIHtcclxuICAgICAgICAgIGNvbG9yID0gY29sb3JNYXBbcG9pbnQueF0gPVxyXG4gICAgICAgICAgICBzLmluZGV4XHJcbiAgICAgICAgICAgICAgfHwgKCF0aGlzLmluZGljZXMgJiYgb3JpZ2luYWxYQXhpcy5pbmRleE9mKHBvaW50LngpID4gLTFcclxuICAgICAgICAgICAgICAgICYmIG9yaWdpbmFsU2VyaWVzLmluZGV4T2Yocy5uYW1lKSA+IC0xKVxyXG4gICAgICAgICAgICAgID8gdGhpcy5fcHJpbWFyeVtjb2xvckluZGV4XSA6IHRoaXMuX2FjY2VudFtjb2xvckluZGV4XTtcclxuICAgICAgICAgIGNvbG9ySW5kZXgrKztcclxuICAgICAgICB9XHJcbiAgICAgICAgcGFsZXR0ZXMucHVzaChjb2xvcik7XHJcbiAgICAgICAgaWYgKHBvaW50LnkgPiBtYXgpXHJcbiAgICAgICAgICBtYXggPSBwb2ludC55O1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaXRlbXMucHVzaChuZXcgSXRlbSh0aGlzLmNoYXJ0VHlwZSB8fCAnUGllJyxcclxuICAgICAgICBzLCBwYWxldHRlcywgcy5pbmRleCA/IHRoaXMuX3ByaW1hcnlbNl0gOlxyXG4gICAgICAgIHRoaXMuX2FjY2VudFs2XSkpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmF4aXNTZXR0aW5ncy5tYXhZID0gbWF4O1xyXG4gIH1cclxuICBzcHJrbGluZUNsaWNrKGl0ZW06IEl0ZW0sIGV2dDogSVBvaW50UmVnaW9uRXZlbnRBcmdzKSB7XHJcbiAgICBjb25zdCBuYW1lID0gaXRlbS5kYXRhLm5hbWUsXHJcbiAgICAgIHggPSBpdGVtLmRhdGEucG9pbnRzW2V2dC5wb2ludEluZGV4XS54LCBpbmRleCA9IGl0ZW0uZGF0YS5pbmRleDtcclxuICAgIGNvbnN0IGF4ZXM6IHsgW2F4aXM6IHN0cmluZ106IGFueSB9ID0ge307XHJcbiAgICBsZXQgeyB4QXhpcywgc2VyaWVzIH0gPSB0aGlzO1xyXG4gICAgaWYgKCFpc0FycmF5KHhBeGlzKSkgeEF4aXMgPSBbeEF4aXNdO1xyXG4gICAgaWYgKCFpc0FycmF5KHNlcmllcykpIHhBeGlzID0gW3Nlcmllc107XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlcmllcy5sZW5ndGg7IGkrKylcclxuICAgICAgYXhlc1tzZXJpZXNbaV1dID0gbmFtZS5zcGxpdChBWEVTX0NPREVfRElWSURFUilbaV07XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHhBeGlzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGF4ZXNbeEF4aXNbaV1dID0geC5zcGxpdChBWEVTX0NPREVfRElWSURFUilbaV07XHJcbiAgICB9XHJcbiAgICB0aGlzLm9uRXhwbG9yZS5lbWl0KHtcclxuICAgICAgYXhlczogeyAuLi50aGlzLmF4ZXMsIC4uLmF4ZXMgfSxcclxuICAgICAgaW5kZXhcclxuICAgIH0pO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3kubmV4dCgpO1xyXG4gICAgdGhpcy5fZGVzdHJveS5jb21wbGV0ZSgpO1xyXG4gICAgdGhpcy5fbG9hZGluZy5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIEV4cGxvcmVFdmVudCB7XHJcbiAgYXhlczogQXhlc01hcDtcclxuICBpbmRleD86IHN0cmluZztcclxufVxyXG4iLCI8ZGl2ICpuZ0lmPVwiaXRlbXMubGVuZ3RoXCIgY2xhc3M9XCJyb3dcIj5cclxuICA8ZGl2ICpuZ0Zvcj1cImxldCBzIG9mIGl0ZW1zXCIgY2xhc3M9XCJlbGVtZW50XCI+XHJcbiAgICA8ZWpzLXNwYXJrbGluZSBbd2lkdGhdPSd3aWR0aCcgaGVpZ2h0PScxMDBweCcgW3R5cGVdPSdzLmNoYXJ0VHlwZScgW2lkXT1cInMuZGF0YS5uYW1lXCJcclxuICAgICAgICAgICAgICAgICAgIFtkYXRhU291cmNlXT1cInMuZGF0YS5wb2ludHNcIiB4TmFtZT1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgeU5hbWU9XCJ5XCIgW3BhbGV0dGVdPVwicy5wYWxldHRlXCIgW2Zvcm1hdF09XCJmb3JtYXRcIlxyXG4gICAgICAgICAgICAgICAgICAgdmFsdWVUeXBlPVwiQ2F0ZWdvcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgW2VuYWJsZVJ0bF09XCJlbmFibGVSdGxcIlxyXG4gICAgICAgICAgICAgICAgICAgW2JvcmRlcl09XCJzLmJvcmRlclwiXHJcbiAgICAgICAgICAgICAgICAgICBbZmlsbF09XCJzLmZpbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgW2F4aXNTZXR0aW5nc109XCJheGlzU2V0dGluZ3NcIlxyXG4gICAgICAgICAgICAgICAgICAgW21hcmtlclNldHRpbmdzXT1cInMubWFya2VyU2V0dGluZ3NcIlxyXG4gICAgICAgICAgICAgICAgICAgKHBvaW50UmVnaW9uTW91c2VDbGljayk9XCJzcHJrbGluZUNsaWNrKHMsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBTZXR0aW5nc109XCJzLnRvb2x0aXBTZXR0aW5nc1wiPlxyXG4gICAgPC9lanMtc3BhcmtsaW5lPlxyXG4gICAgPGg0IGNsYXNzPVwibWF0LWg0XCI+e3tzLmRhdGEudGl0bGV9fTwvaDQ+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
152
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYWxsZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi9jdWJlL3BhcmFsbGVsL3BhcmFsbGVsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvY3ViZS9wYXJhbGxlbC9wYXJhbGxlbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWdDLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFHcEgsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3hELE9BQU8sRUFBRSxpQkFBaUIsRUFBa0MsTUFBTSx5QkFBeUIsQ0FBQztBQUM1RixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFL0MsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFFBQVEsQ0FBQzs7Ozs7OztBQUM5QixNQUFNO0FBTU4sTUFBTSxPQUNFLHFCQUFxQjtJQW1DM0IsWUFDVSxHQUFrQixFQUNsQixRQUFxQixFQUNyQixRQUF3QjtRQUZ4QixRQUFHLEdBQUgsR0FBRyxDQUFlO1FBQ2xCLGFBQVEsR0FBUixRQUFRLENBQWE7UUFDckIsYUFBUSxHQUFSLFFBQVEsQ0FBZ0I7UUFwQnpCLGNBQVMsR0FBRyxJQUFJLFlBQVksRUFBZ0IsQ0FBQztRQUN0RCxVQUFLLEdBQWdDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7UUFDNUYsVUFBSyxHQUFXLEVBQUUsQ0FBQztRQUVWLGlCQUFZLEdBQUc7WUFDdEIsWUFBWSxFQUFFLEVBQ1E7U0FDRixDQUFDO1FBQ3ZCLFVBQUssR0FB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RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdHRwUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEF4aXNTZXR0aW5nc01vZGVsLCBJUG9pbnRSZWdpb25FdmVudEFyZ3MsIExpbmVTZXR0aW5nc01vZGVsLCBTcGFya2xpbmVUeXBlIH0gZnJvbSAnQHN5bmNmdXNpb24vZWoyLWFuZ3VsYXItY2hhcnRzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUHJvbXB0U2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvcHJvbXB0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZXNzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvcmUvc2Vzc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQVhFU19DT0RFX0RJVklERVIsIEN1YmVTZXJ2aWNlLCBTY29wZVR5cGUsIFNlcmllcyB9IGZyb20gJy4uLy4uL2N1YmUvY3ViZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJy4uLy4uL2NvcmUvZnVuY3Rpb25zJztcclxuaW1wb3J0IHsgQXhlc01hcCwgQ3ViZSB9IGZyb20gJy4uLy4uL2NvcmUvbW9kZWxzJztcclxuaW1wb3J0IHsgSXRlbSB9IGZyb20gJy4vaXRlbSc7XHJcbi8qKiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2JpemRvYy1jdWJlLXBhcmFsbGVsJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcGFyYWxsZWwuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWydwYXJhbGxlbC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydFxyXG4gIGNsYXNzIEN1YmVQYXJhbGxlbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpXHJcbiAgZmlsdGVyczogQXhlc01hcDtcclxuICBASW5wdXQoKVxyXG4gIHhBeGlzITogc3RyaW5nIHwgc3RyaW5nW107XHJcbiAgQElucHV0KClcclxuICBzZXJpZXMhOiBzdHJpbmcgfCBzdHJpbmdbXTtcclxuICBASW5wdXQoKVxyXG4gIGluZGljZXM/OiBzdHJpbmcgfCBzdHJpbmdbXTtcclxuICBASW5wdXQoKVxyXG4gIGN1YmU6IHN0cmluZztcclxuICBASW5wdXQoKVxyXG4gIHNpemU6IG51bWJlcjtcclxuICBASW5wdXQoKVxyXG4gIGNoYXJ0VHlwZT86IFNwYXJrbGluZVR5cGU7XHJcbiAgQElucHV0KClcclxuICBzY29wZT86IFNjb3BlVHlwZTtcclxuICBAT3V0cHV0KCdleHBsb3JlJylcclxuICByZWFkb25seSBvbkV4cGxvcmUgPSBuZXcgRXZlbnRFbWl0dGVyPEV4cGxvcmVFdmVudD4oKTtcclxuICB0aGVtZTogJ01hdGVyaWFsJyB8ICdNYXRlcmlhbERhcmsnID0gdGhpcy5fc2Vzc2lvbi50aGVtZS5kYXJrID8gJ01hdGVyaWFsRGFyaycgOiAnTWF0ZXJpYWwnO1xyXG4gIGl0ZW1zOiBJdGVtW10gPSBbXTtcclxuICBmb3JtYXQ6IHN0cmluZztcclxuICByZWFkb25seSBheGlzU2V0dGluZ3MgPSB7XHJcbiAgICBsaW5lU2V0dGluZ3M6IHtcclxuICAgIH0gYXMgTGluZVNldHRpbmdzTW9kZWwsXHJcbiAgfSBhcyBBeGlzU2V0dGluZ3NNb2RlbDtcclxuICB3aWR0aDogc3RyaW5nID0gJzE1MHB4JztcclxuICBsb2FkaW5nOiBib29sZWFuO1xyXG4gIHByaXZhdGUgX2RhdGE6IFNlcmllc1tdO1xyXG4gIHByaXZhdGUgX2N1YmU6IEN1YmU7XHJcbiAgcmVhZG9ubHkgZW5hYmxlUnRsID0gdGhpcy5fc2Vzc2lvbi5pbnZlcnNlO1xyXG4gIHByaXZhdGUgX2FjY2VudCA9IHRoaXMuX3Nlc3Npb24uYWNjZW50UGFsZXR0ZTtcclxuICBwcml2YXRlIF9wcmltYXJ5ID0gdGhpcy5fc2Vzc2lvbi5wcmltZXJ5UGFsZXR0ZTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9sb2FkaW5nID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX3NiOiBQcm9tcHRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2VydmljZTogQ3ViZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zZXNzaW9uOiBTZXNzaW9uU2VydmljZSkge1xyXG4gICAgdGhpcy5fbG9hZGluZy5waXBlKGRlYm91bmNlVGltZSgyMDApKS5zdWJzY3JpYmUob2sgPT4gdGhpcy5sb2FkaW5nID0gb2spO1xyXG4gIH1cclxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcbiAgICBkZWxldGUgdGhpcy5maWx0ZXJzW3RoaXMueEF4aXMgYXMgc3RyaW5nXTtcclxuICAgIHRoaXMuX2N1YmUgPSB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuY3ViZXMuZmluZChjID0+IGMubmFtZSA9PT0gdGhpcy5jdWJlKSB8fCB0aGlzLl9zZXNzaW9uLnByb2ZpbGUuY3ViZXNbMF07XHJcbiAgICB0aGlzLmZvcm1hdCA9ICh0aGlzLl9jdWJlLmN1cnJlbmN5Q29kZSA/ICdjJyA6ICduJykgKyB0aGlzLl9zZXJ2aWNlLmZyYWN0aW9uRGlnaXRzO1xyXG4gICAgaWYgKGNoYW5nZXNbJ2ZpbHRlcnMnXSkgdGhpcy5faW5pdGlhbGl6ZSgpO1xyXG4gICAgZWxzZSBpZiAoY2hhbmdlc1snc2l6ZSddICYmIHRoaXMuaXRlbXMubGVuZ3RoKSB0aGlzLndpZHRoID0gTWF0aC5yb3VuZCh0aGlzLnNpemUgLyB0aGlzLml0ZW1zLmxlbmd0aCkgKyAncHgnO1xyXG4gIH1cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3Nlc3Npb24udGhlbWVDaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSkpLlxyXG4gICAgICBzdWJzY3JpYmUodCA9PiB7XHJcbiAgICAgICAgdGhpcy50aGVtZSA9IHQuZGFyayA/ICdNYXRlcmlhbERhcmsnIDogJ01hdGVyaWFsJztcclxuICAgICAgICB0aGlzLl9wcmltYXJ5ID0gdGhpcy5fc2Vzc2lvbi5wcmltZXJ5UGFsZXR0ZTtcclxuICAgICAgICB0aGlzLl9hY2NlbnQgPSB0aGlzLl9zZXNzaW9uLmFjY2VudFBhbGV0dGU7XHJcbiAgICAgICAgdGhpcy5fZHJhdygpO1xyXG4gICAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfaW5pdGlhbGl6ZSgpIHtcclxuICAgIHRoaXMuX2xvYWRpbmcubmV4dCh0cnVlKTtcclxuICAgIGNvbnN0IGZpbHRlcnMgPSB7IC4uLnRoaXMuZmlsdGVycyB9O1xyXG5cclxuICAgIHRoaXMuX3NlcnZpY2Uuc2VyaWVzKHRoaXMuX2N1YmUubmFtZSwgdGhpcy54QXhpcywge1xyXG4gICAgICBzZXJpZXM6IHRoaXMuc2VyaWVzLFxyXG4gICAgICBmaWx0ZXJzLFxyXG4gICAgICBpbmRpY2VzOiB0aGlzLmluZGljZXMsXHJcbiAgICAgIGdyb3VwSW5kaWNlczogdHJ1ZSxcclxuICAgICAgc2NvcGU6IHRoaXMuc2NvcGVcclxuICAgIH0pLnN1YnNjcmliZShyID0+IHtcclxuICAgICAgdGhpcy5fZGF0YSA9IHI7XHJcbiAgICAgIHRoaXMuX2RyYXcoKTtcclxuICAgICAgaWYgKHRoaXMuaXRlbXMubGVuZ3RoKSB0aGlzLndpZHRoID0gTWF0aC5tYXgoTWF0aC5yb3VuZCh0aGlzLnNpemUgLyB0aGlzLml0ZW1zLmxlbmd0aCksIDE1MCkgKyAncHgnO1xyXG4gICAgICB0aGlzLl9sb2FkaW5nLm5leHQoZmFsc2UpO1xyXG4gICAgfSwgKGU6IEh0dHBSZXNwb25zZTxhbnk+KSA9PiB7XHJcbiAgICAgIHRoaXMuX3NiLmVycm9yKGUuc3RhdHVzID09PSA0MDEgPyAnVW5hdXRob3JpemVkJyA6IG51bGwpO1xyXG4gICAgICB0aGlzLl9sb2FkaW5nLm5leHQoZmFsc2UpO1xyXG4gICAgfVxyXG4gICAgKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfZHJhdygpIHtcclxuICAgIHRoaXMuaXRlbXMgPSBbXTtcclxuICAgIGNvbnN0IGNvbG9yTWFwID0ge307XHJcbiAgICBsZXQgY29sb3JJbmRleCA9IDA7XHJcblxyXG4gICAgbGV0IG9yaWdpbmFsWEF4aXMgPSB0aGlzLmZpbHRlcnNbaXNBcnJheSh0aGlzLnhBeGlzKSA/IHRoaXMueEF4aXNbMF0gOiB0aGlzLnhBeGlzXSBhcyBzdHJpbmcgfCBzdHJpbmdbXSxcclxuICAgICAgb3JpZ2luYWxTZXJpZXMgPSB0aGlzLmZpbHRlcnNbaXNBcnJheSh0aGlzLnNlcmllcykgPyB0aGlzLnNlcmllc1swXSA6IHRoaXMuc2VyaWVzXSBhcyBzdHJpbmcgfCBzdHJpbmdbXTtcclxuXHJcbiAgICBpZiAoIWlzQXJyYXkob3JpZ2luYWxYQXhpcykpXHJcbiAgICAgIG9yaWdpbmFsWEF4aXMgPSBbb3JpZ2luYWxYQXhpc107XHJcbiAgICBpZiAoIWlzQXJyYXkob3JpZ2luYWxTZXJpZXMpKVxyXG4gICAgICBvcmlnaW5hbFNlcmllcyA9IFtvcmlnaW5hbFNlcmllc107XHJcbiAgICBsZXQgbWF4ID0gMDtcclxuICAgIHRoaXMuX2RhdGEuZm9yRWFjaChzID0+IHtcclxuICAgICAgaWYgKHMucG9pbnRzLmxlbmd0aCA8IDIpXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICBjb25zdCBwYWxldHRlcyA9IFtdO1xyXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHMucG9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IHBvaW50ID0gcy5wb2ludHNbaV0sIGNvbG9yID0gY29sb3JNYXBbcG9pbnQueF07XHJcbiAgICAgICAgaWYgKCFjb2xvcikge1xyXG4gICAgICAgICAgY29sb3IgPSBjb2xvck1hcFtwb2ludC54XSA9XHJcbiAgICAgICAgICAgIHMuaW5kZXhcclxuICAgICAgICAgICAgICB8fCAoIXRoaXMuaW5kaWNlcyAmJiBvcmlnaW5hbFhBeGlzLmluZGV4T2YocG9pbnQueCkgPiAtMVxyXG4gICAgICAgICAgICAgICAgJiYgb3JpZ2luYWxTZXJpZXMuaW5kZXhPZihzLm5hbWUpID4gLTEpXHJcbiAgICAgICAgICAgICAgPyB0aGlzLl9wcmltYXJ5W2NvbG9ySW5kZXhdIDogdGhpcy5fYWNjZW50W2NvbG9ySW5kZXhdO1xyXG4gICAgICAgICAgY29sb3JJbmRleCsrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwYWxldHRlcy5wdXNoKGNvbG9yKTtcclxuICAgICAgICBpZiAocG9pbnQueSA+IG1heClcclxuICAgICAgICAgIG1heCA9IHBvaW50Lnk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pdGVtcy5wdXNoKG5ldyBJdGVtKHRoaXMuY2hhcnRUeXBlIHx8ICdQaWUnLFxyXG4gICAgICAgIHMsIHBhbGV0dGVzLCBzLmluZGV4ID8gdGhpcy5fcHJpbWFyeVs2XSA6XHJcbiAgICAgICAgdGhpcy5fYWNjZW50WzZdKSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuYXhpc1NldHRpbmdzLm1heFkgPSBtYXg7XHJcbiAgfVxyXG4gIHNwcmtsaW5lQ2xpY2soaXRlbTogSXRlbSwgZXZ0OiBJUG9pbnRSZWdpb25FdmVudEFyZ3MpIHtcclxuICAgIGNvbnN0IG5hbWUgPSBpdGVtLmRhdGEubmFtZSxcclxuICAgICAgeCA9IGl0ZW0uZGF0YS5wb2ludHNbZXZ0LnBvaW50SW5kZXhdLngsIGluZGV4ID0gaXRlbS5kYXRhLmluZGV4O1xyXG4gICAgY29uc3QgYXhlczogeyBbYXhpczogc3RyaW5nXTogYW55IH0gPSB7fTtcclxuICAgIGxldCB7IHhBeGlzLCBzZXJpZXMgfSA9IHRoaXM7XHJcbiAgICBpZiAoIWlzQXJyYXkoeEF4aXMpKSB4QXhpcyA9IFt4QXhpc107XHJcbiAgICBpZiAoIWlzQXJyYXkoc2VyaWVzKSkgeEF4aXMgPSBbc2VyaWVzXTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VyaWVzLmxlbmd0aDsgaSsrKVxyXG4gICAgICBheGVzW3Nlcmllc1tpXV0gPSBuYW1lLnNwbGl0KEFYRVNfQ09ERV9ESVZJREVSKVtpXTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeEF4aXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgYXhlc1t4QXhpc1tpXV0gPSB4LnNwbGl0KEFYRVNfQ09ERV9ESVZJREVSKVtpXTtcclxuICAgIH1cclxuICAgIHRoaXMub25FeHBsb3JlLmVtaXQoe1xyXG4gICAgICBheGVzOiB7IC4uLnRoaXMuZmlsdGVycywgLi4uYXhlcyB9LFxyXG4gICAgICBpbmRleFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fZGVzdHJveS5uZXh0KCk7XHJcbiAgICB0aGlzLl9kZXN0cm95LmNvbXBsZXRlKCk7XHJcbiAgICB0aGlzLl9sb2FkaW5nLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgRXhwbG9yZUV2ZW50IHtcclxuICBheGVzOiBBeGVzTWFwO1xyXG4gIGluZGV4Pzogc3RyaW5nO1xyXG59XHJcbiIsIjxkaXYgKm5nSWY9XCJpdGVtcy5sZW5ndGhcIiBjbGFzcz1cInJvd1wiPlxyXG4gIDxkaXYgKm5nRm9yPVwibGV0IHMgb2YgaXRlbXNcIiBjbGFzcz1cImVsZW1lbnRcIj5cclxuICAgIDxlanMtc3BhcmtsaW5lIFt3aWR0aF09J3dpZHRoJyBoZWlnaHQ9JzEwMHB4JyBbdHlwZV09J3MuY2hhcnRUeXBlJyBbaWRdPVwicy5kYXRhLm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwicy5kYXRhLnBvaW50c1wiIHhOYW1lPVwibmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICB5TmFtZT1cInlcIiBbcGFsZXR0ZV09XCJzLnBhbGV0dGVcIiBbZm9ybWF0XT1cImZvcm1hdFwiXHJcbiAgICAgICAgICAgICAgICAgICB2YWx1ZVR5cGU9XCJDYXRlZ29yeVwiXHJcbiAgICAgICAgICAgICAgICAgICBbZW5hYmxlUnRsXT1cImVuYWJsZVJ0bFwiXHJcbiAgICAgICAgICAgICAgICAgICBbYm9yZGVyXT1cInMuYm9yZGVyXCJcclxuICAgICAgICAgICAgICAgICAgIFtmaWxsXT1cInMuZmlsbFwiXHJcbiAgICAgICAgICAgICAgICAgICBbYXhpc1NldHRpbmdzXT1cImF4aXNTZXR0aW5nc1wiXHJcbiAgICAgICAgICAgICAgICAgICBbbWFya2VyU2V0dGluZ3NdPVwicy5tYXJrZXJTZXR0aW5nc1wiXHJcbiAgICAgICAgICAgICAgICAgICAocG9pbnRSZWdpb25Nb3VzZUNsaWNrKT1cInNwcmtsaW5lQ2xpY2socywgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICBbdG9vbHRpcFNldHRpbmdzXT1cInMudG9vbHRpcFNldHRpbmdzXCI+XHJcbiAgICA8L2Vqcy1zcGFya2xpbmU+XHJcbiAgICA8aDQgY2xhc3M9XCJtYXQtaDRcIj57e3MuZGF0YS50aXRsZX19PC9oND5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==