@pega/angular-sdk-components 24.2.10 → 24.2.12

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 (253) hide show
  1. package/esm2022/lib/_bridge/angular-pconnect.mjs +3 -3
  2. package/esm2022/lib/_bridge/component-mapper/component-mapper.component.mjs +3 -3
  3. package/esm2022/lib/_components/designSystemExtension/alert/alert.component.mjs +3 -3
  4. package/esm2022/lib/_components/designSystemExtension/alert-banner/alert-banner.component.mjs +3 -3
  5. package/esm2022/lib/_components/designSystemExtension/banner/banner.component.mjs +3 -3
  6. package/esm2022/lib/_components/designSystemExtension/case-create-stage/case-create-stage.component.mjs +3 -3
  7. package/esm2022/lib/_components/designSystemExtension/field-group/field-group.component.mjs +3 -3
  8. package/esm2022/lib/_components/designSystemExtension/material-case-summary/material-case-summary.component.mjs +4 -5
  9. package/esm2022/lib/_components/designSystemExtension/material-details/material-details.component.mjs +3 -3
  10. package/esm2022/lib/_components/designSystemExtension/material-details-fields/material-details-fields.component.mjs +9 -5
  11. package/esm2022/lib/_components/designSystemExtension/material-summary-item/material-summary-item.component.mjs +3 -3
  12. package/esm2022/lib/_components/designSystemExtension/material-summary-list/material-summary-list.component.mjs +3 -3
  13. package/esm2022/lib/_components/designSystemExtension/material-utility/material-utility.component.mjs +3 -3
  14. package/esm2022/lib/_components/designSystemExtension/material-vertical-tabs/material-vertical-tabs.component.mjs +3 -3
  15. package/esm2022/lib/_components/designSystemExtension/operator/operator.component.mjs +9 -7
  16. package/esm2022/lib/_components/designSystemExtension/pulse/pulse.component.mjs +3 -3
  17. package/esm2022/lib/_components/designSystemExtension/rich-text-editor/rich-text-editor.component.mjs +3 -3
  18. package/esm2022/lib/_components/designSystemExtension/wss-quick-create/wss-quick-create.component.mjs +3 -3
  19. package/esm2022/lib/_components/field/auto-complete/auto-complete.component.mjs +15 -7
  20. package/esm2022/lib/_components/field/cancel-alert/cancel-alert.component.mjs +3 -3
  21. package/esm2022/lib/_components/field/check-box/check-box.component.mjs +5 -5
  22. package/esm2022/lib/_components/field/currency/currency.component.mjs +23 -18
  23. package/esm2022/lib/_components/field/date/date.component.mjs +5 -5
  24. package/esm2022/lib/_components/field/date-time/date-time.component.mjs +21 -8
  25. package/esm2022/lib/_components/field/decimal/decimal.component.mjs +38 -20
  26. package/esm2022/lib/_components/field/dropdown/dropdown.component.mjs +17 -9
  27. package/esm2022/lib/_components/field/email/email.component.mjs +19 -11
  28. package/esm2022/lib/_components/field/group/group.component.mjs +3 -3
  29. package/esm2022/lib/_components/field/integer/integer.component.mjs +19 -11
  30. package/esm2022/lib/_components/field/list-view-action-buttons/list-view-action-buttons.component.mjs +8 -7
  31. package/esm2022/lib/_components/field/multiselect/multiselect.component.mjs +3 -3
  32. package/esm2022/lib/_components/field/percentage/percentage.component.mjs +31 -23
  33. package/esm2022/lib/_components/field/phone/phone.component.mjs +11 -16
  34. package/esm2022/lib/_components/field/radio-buttons/radio-buttons.component.mjs +5 -5
  35. package/esm2022/lib/_components/field/rich-text/rich-text.component.mjs +14 -7
  36. package/esm2022/lib/_components/field/scalar-list/scalar-list.component.mjs +3 -3
  37. package/esm2022/lib/_components/field/semantic-link/semantic-link.component.mjs +3 -3
  38. package/esm2022/lib/_components/field/text/text.component.mjs +10 -8
  39. package/esm2022/lib/_components/field/text-area/text-area.component.mjs +19 -11
  40. package/esm2022/lib/_components/field/text-content/text-content.component.mjs +3 -3
  41. package/esm2022/lib/_components/field/text-input/text-input.component.mjs +19 -11
  42. package/esm2022/lib/_components/field/time/time.component.mjs +23 -11
  43. package/esm2022/lib/_components/field/url/url.component.mjs +19 -11
  44. package/esm2022/lib/_components/field/user-reference/user-reference.component.mjs +71 -12
  45. package/esm2022/lib/_components/infra/Containers/flow-container/flow-container.component.mjs +13 -42
  46. package/esm2022/lib/_components/infra/Containers/flow-container/helpers.mjs +3 -3
  47. package/esm2022/lib/_components/infra/Containers/hybrid-view-container/hybrid-view-container.component.mjs +3 -3
  48. package/esm2022/lib/_components/infra/Containers/modal-view-container/modal-view-container.component.mjs +5 -12
  49. package/esm2022/lib/_components/infra/Containers/preview-view-container/preview-view-container.component.mjs +3 -3
  50. package/esm2022/lib/_components/infra/Containers/view-container/view-container.component.mjs +3 -3
  51. package/esm2022/lib/_components/infra/action-buttons/action-buttons.component.mjs +5 -5
  52. package/esm2022/lib/_components/infra/assignment/assignment.component.mjs +73 -48
  53. package/esm2022/lib/_components/infra/assignment-card/assignment-card.component.mjs +5 -5
  54. package/esm2022/lib/_components/infra/dashboard-filter/dashboard-filter.component.mjs +3 -3
  55. package/esm2022/lib/_components/infra/defer-load/defer-load.component.mjs +7 -5
  56. package/esm2022/lib/_components/infra/error-boundary/error-boundary.component.mjs +3 -3
  57. package/esm2022/lib/_components/infra/multi-step/multi-step.component.mjs +3 -3
  58. package/esm2022/lib/_components/infra/navbar/navbar.component.mjs +4 -4
  59. package/esm2022/lib/_components/infra/reference/reference.component.mjs +74 -81
  60. package/esm2022/lib/_components/infra/region/region.component.mjs +3 -3
  61. package/esm2022/lib/_components/infra/root-container/root-container.component.mjs +25 -30
  62. package/esm2022/lib/_components/infra/stages/stages.component.mjs +3 -3
  63. package/esm2022/lib/_components/infra/view/view.component.mjs +3 -3
  64. package/esm2022/lib/_components/template/app-shell/app-shell.component.mjs +3 -3
  65. package/esm2022/lib/_components/template/banner-page/banner-page.component.mjs +3 -3
  66. package/esm2022/lib/_components/template/base/details-template-base.mjs +3 -3
  67. package/esm2022/lib/_components/template/base/form-template-base.mjs +7 -4
  68. package/esm2022/lib/_components/template/case-summary/case-summary.component.mjs +3 -3
  69. package/esm2022/lib/_components/template/case-view/case-view.component.mjs +3 -3
  70. package/esm2022/lib/_components/template/confirmation/confirmation.component.mjs +5 -5
  71. package/esm2022/lib/_components/template/data-reference/data-reference.component.mjs +3 -3
  72. package/esm2022/lib/_components/template/default-form/default-form.component.mjs +33 -9
  73. package/esm2022/lib/_components/template/details/details.component.mjs +3 -3
  74. package/esm2022/lib/_components/template/details-narrow-wide/details-narrow-wide.component.mjs +3 -3
  75. package/esm2022/lib/_components/template/details-one-column/details-one-column.component.mjs +3 -3
  76. package/esm2022/lib/_components/template/details-sub-tabs/details-sub-tabs.component.mjs +3 -3
  77. package/esm2022/lib/_components/template/details-three-column/details-three-column.component.mjs +3 -3
  78. package/esm2022/lib/_components/template/details-two-column/details-two-column.component.mjs +3 -3
  79. package/esm2022/lib/_components/template/details-wide-narrow/details-wide-narrow.component.mjs +3 -3
  80. package/esm2022/lib/_components/template/dynamic-tabs/dynamic-tabs.component.mjs +3 -3
  81. package/esm2022/lib/_components/template/field-group-list/field-group-list.component.mjs +3 -3
  82. package/esm2022/lib/_components/template/field-group-template/field-group-template.component.mjs +47 -38
  83. package/esm2022/lib/_components/template/field-value-list/field-value-list.component.mjs +5 -5
  84. package/esm2022/lib/_components/template/inline-dashboard/inline-dashboard.component.mjs +3 -3
  85. package/esm2022/lib/_components/template/inline-dashboard-page/inline-dashboard-page.component.mjs +3 -3
  86. package/esm2022/lib/_components/template/list-page/list-page.component.mjs +3 -3
  87. package/esm2022/lib/_components/template/list-view/list-view.component.mjs +5 -5
  88. package/esm2022/lib/_components/template/list-view/listViewHelpers.mjs +2 -2
  89. package/esm2022/lib/_components/template/list-view/utils.mjs +1 -1
  90. package/esm2022/lib/_components/template/multi-reference-readonly/multi-reference-readonly.component.mjs +3 -3
  91. package/esm2022/lib/_components/template/narrow-wide-form/narrow-wide-form.component.mjs +3 -3
  92. package/esm2022/lib/_components/template/one-column/one-column.component.mjs +3 -3
  93. package/esm2022/lib/_components/template/one-column-page/one-column-page.component.mjs +3 -3
  94. package/esm2022/lib/_components/template/one-column-tab/one-column-tab.component.mjs +3 -3
  95. package/esm2022/lib/_components/template/page/page.component.mjs +3 -3
  96. package/esm2022/lib/_components/template/promoted-filters/promoted-filters.component.mjs +3 -3
  97. package/esm2022/lib/_components/template/repeating-structures/repeating-structures.component.mjs +3 -3
  98. package/esm2022/lib/_components/template/simple-table/simple-table.component.mjs +3 -3
  99. package/esm2022/lib/_components/template/simple-table-manual/helpers.mjs +9 -8
  100. package/esm2022/lib/_components/template/simple-table-manual/simple-table-manual.component.mjs +58 -24
  101. package/esm2022/lib/_components/template/simple-table-select/simple-table-select.component.mjs +3 -3
  102. package/esm2022/lib/_components/template/single-reference-readonly/single-reference-readonly.component.mjs +3 -3
  103. package/esm2022/lib/_components/template/sub-tabs/sub-tabs.component.mjs +3 -3
  104. package/esm2022/lib/_components/template/three-column/three-column.component.mjs +3 -3
  105. package/esm2022/lib/_components/template/three-column-page/three-column-page.component.mjs +3 -3
  106. package/esm2022/lib/_components/template/two-column/two-column.component.mjs +3 -3
  107. package/esm2022/lib/_components/template/two-column-page/two-column-page.component.mjs +3 -3
  108. package/esm2022/lib/_components/template/two-column-tab/two-column-tab.component.mjs +3 -3
  109. package/esm2022/lib/_components/template/utils.mjs +17 -1
  110. package/esm2022/lib/_components/template/wide-narrow-form/wide-narrow-form.component.mjs +3 -3
  111. package/esm2022/lib/_components/template/wide-narrow-page/wide-narrow-page.component.mjs +3 -3
  112. package/esm2022/lib/_components/template/wss-nav-bar/wss-nav-bar.component.mjs +3 -3
  113. package/esm2022/lib/_components/widget/app-announcement/app-announcement.component.mjs +3 -3
  114. package/esm2022/lib/_components/widget/attachment/attachment.component.mjs +3 -3
  115. package/esm2022/lib/_components/widget/case-history/case-history.component.mjs +3 -3
  116. package/esm2022/lib/_components/widget/feed-container/feed-container.component.mjs +4 -4
  117. package/esm2022/lib/_components/widget/file-utility/file-utility.component.mjs +3 -3
  118. package/esm2022/lib/_components/widget/list-utility/list-utility.component.mjs +3 -3
  119. package/esm2022/lib/_components/widget/quick-create/quick-create.component.mjs +3 -3
  120. package/esm2022/lib/_components/widget/todo/todo.component.mjs +8 -6
  121. package/esm2022/lib/_components/widget/utility/utility.component.mjs +3 -3
  122. package/esm2022/lib/_directives/thousand-seperator.directive.mjs +3 -3
  123. package/esm2022/lib/_helpers/formatters/boolean.mjs +2 -2
  124. package/esm2022/lib/_helpers/formatters/common.mjs +6 -3
  125. package/esm2022/lib/_helpers/formatters/currency.mjs +2 -2
  126. package/esm2022/lib/_helpers/formatters/date.mjs +2 -2
  127. package/esm2022/lib/_helpers/formatters/format-utils.mjs +10 -2
  128. package/esm2022/lib/_helpers/formatters/index.mjs +16 -16
  129. package/esm2022/lib/_helpers/template-utils.mjs +3 -3
  130. package/esm2022/lib/_helpers/utils.mjs +44 -18
  131. package/esm2022/lib/_messages/error-messages.service.mjs +3 -3
  132. package/esm2022/lib/_messages/progress-spinner.service.mjs +3 -3
  133. package/esm2022/lib/_messages/update-worklist.service.mjs +3 -3
  134. package/esm2022/lib/_services/banner.service.mjs +35 -0
  135. package/esm2022/lib/_services/case.service.mjs +3 -3
  136. package/esm2022/lib/_services/datapage.service.mjs +3 -3
  137. package/esm2022/lib/_services/server-config.service.mjs +3 -3
  138. package/esm2022/public-api.mjs +13 -9
  139. package/fesm2022/pega-angular-sdk-components.mjs +1142 -832
  140. package/fesm2022/pega-angular-sdk-components.mjs.map +1 -1
  141. package/lib/_components/designSystemExtension/banner/banner.component.d.ts +0 -1
  142. package/lib/_components/designSystemExtension/case-create-stage/case-create-stage.component.d.ts +0 -1
  143. package/lib/_components/designSystemExtension/material-case-summary/material-case-summary.component.d.ts +1 -1
  144. package/lib/_components/designSystemExtension/material-details-fields/material-details-fields.component.d.ts +1 -0
  145. package/lib/_components/designSystemExtension/operator/operator.component.d.ts +2 -3
  146. package/lib/_components/designSystemExtension/pulse/pulse.component.d.ts +0 -1
  147. package/lib/_components/field/auto-complete/auto-complete.component.d.ts +5 -1
  148. package/lib/_components/field/cancel-alert/cancel-alert.component.d.ts +0 -1
  149. package/lib/_components/field/check-box/check-box.component.d.ts +0 -1
  150. package/lib/_components/field/currency/currency.component.d.ts +0 -1
  151. package/lib/_components/field/date/date.component.d.ts +0 -1
  152. package/lib/_components/field/date-time/date-time.component.d.ts +1 -1
  153. package/lib/_components/field/decimal/decimal.component.d.ts +1 -1
  154. package/lib/_components/field/dropdown/dropdown.component.d.ts +1 -1
  155. package/lib/_components/field/email/email.component.d.ts +0 -1
  156. package/lib/_components/field/group/group.component.d.ts +0 -1
  157. package/lib/_components/field/integer/integer.component.d.ts +1 -2
  158. package/lib/_components/field/list-view-action-buttons/list-view-action-buttons.component.d.ts +1 -2
  159. package/lib/_components/field/multiselect/multiselect.component.d.ts +0 -1
  160. package/lib/_components/field/percentage/percentage.component.d.ts +1 -2
  161. package/lib/_components/field/phone/phone.component.d.ts +0 -7
  162. package/lib/_components/field/radio-buttons/radio-buttons.component.d.ts +0 -1
  163. package/lib/_components/field/rich-text/rich-text.component.d.ts +1 -2
  164. package/lib/_components/field/scalar-list/scalar-list.component.d.ts +0 -1
  165. package/lib/_components/field/semantic-link/semantic-link.component.d.ts +0 -1
  166. package/lib/_components/field/text/text.component.d.ts +0 -1
  167. package/lib/_components/field/text-area/text-area.component.d.ts +1 -2
  168. package/lib/_components/field/text-content/text-content.component.d.ts +0 -1
  169. package/lib/_components/field/text-input/text-input.component.d.ts +1 -2
  170. package/lib/_components/field/time/time.component.d.ts +1 -2
  171. package/lib/_components/field/url/url.component.d.ts +1 -2
  172. package/lib/_components/field/user-reference/user-reference.component.d.ts +0 -1
  173. package/lib/_components/infra/Containers/flow-container/flow-container.component.d.ts +0 -2
  174. package/lib/_components/infra/Containers/flow-container/helpers.d.ts +1 -0
  175. package/lib/_components/infra/Containers/hybrid-view-container/hybrid-view-container.component.d.ts +0 -1
  176. package/lib/_components/infra/Containers/modal-view-container/modal-view-container.component.d.ts +1 -4
  177. package/lib/_components/infra/Containers/preview-view-container/preview-view-container.component.d.ts +0 -1
  178. package/lib/_components/infra/Containers/view-container/view-container.component.d.ts +0 -1
  179. package/lib/_components/infra/action-buttons/action-buttons.component.d.ts +1 -1
  180. package/lib/_components/infra/assignment/assignment.component.d.ts +6 -4
  181. package/lib/_components/infra/assignment-card/assignment-card.component.d.ts +0 -1
  182. package/lib/_components/infra/dashboard-filter/dashboard-filter.component.d.ts +0 -1
  183. package/lib/_components/infra/defer-load/defer-load.component.d.ts +1 -1
  184. package/lib/_components/infra/error-boundary/error-boundary.component.d.ts +1 -1
  185. package/lib/_components/infra/multi-step/multi-step.component.d.ts +0 -1
  186. package/lib/_components/infra/navbar/navbar.component.d.ts +0 -1
  187. package/lib/_components/infra/reference/reference.component.d.ts +23 -3
  188. package/lib/_components/infra/region/region.component.d.ts +0 -1
  189. package/lib/_components/infra/root-container/root-container.component.d.ts +3 -2
  190. package/lib/_components/infra/stages/stages.component.d.ts +0 -1
  191. package/lib/_components/infra/view/view.component.d.ts +0 -1
  192. package/lib/_components/template/app-shell/app-shell.component.d.ts +0 -1
  193. package/lib/_components/template/banner-page/banner-page.component.d.ts +0 -1
  194. package/lib/_components/template/base/details-template-base.d.ts +0 -1
  195. package/lib/_components/template/base/form-template-base.d.ts +2 -0
  196. package/lib/_components/template/case-summary/case-summary.component.d.ts +0 -1
  197. package/lib/_components/template/case-view/case-view.component.d.ts +0 -1
  198. package/lib/_components/template/confirmation/confirmation.component.d.ts +0 -1
  199. package/lib/_components/template/data-reference/data-reference.component.d.ts +0 -1
  200. package/lib/_components/template/default-form/default-form.component.d.ts +6 -2
  201. package/lib/_components/template/details/details.component.d.ts +0 -1
  202. package/lib/_components/template/details-narrow-wide/details-narrow-wide.component.d.ts +0 -1
  203. package/lib/_components/template/details-one-column/details-one-column.component.d.ts +0 -1
  204. package/lib/_components/template/details-sub-tabs/details-sub-tabs.component.d.ts +0 -1
  205. package/lib/_components/template/details-three-column/details-three-column.component.d.ts +0 -1
  206. package/lib/_components/template/details-two-column/details-two-column.component.d.ts +0 -1
  207. package/lib/_components/template/details-wide-narrow/details-wide-narrow.component.d.ts +0 -1
  208. package/lib/_components/template/dynamic-tabs/dynamic-tabs.component.d.ts +0 -1
  209. package/lib/_components/template/field-group-template/field-group-template.component.d.ts +12 -9
  210. package/lib/_components/template/inline-dashboard/inline-dashboard.component.d.ts +0 -1
  211. package/lib/_components/template/inline-dashboard-page/inline-dashboard-page.component.d.ts +0 -1
  212. package/lib/_components/template/list-page/list-page.component.d.ts +0 -1
  213. package/lib/_components/template/list-view/list-view.component.d.ts +1 -2
  214. package/lib/_components/template/multi-reference-readonly/multi-reference-readonly.component.d.ts +0 -1
  215. package/lib/_components/template/narrow-wide-form/narrow-wide-form.component.d.ts +0 -1
  216. package/lib/_components/template/one-column/one-column.component.d.ts +0 -1
  217. package/lib/_components/template/one-column-page/one-column-page.component.d.ts +0 -1
  218. package/lib/_components/template/one-column-tab/one-column-tab.component.d.ts +0 -1
  219. package/lib/_components/template/page/page.component.d.ts +0 -1
  220. package/lib/_components/template/promoted-filters/promoted-filters.component.d.ts +0 -1
  221. package/lib/_components/template/repeating-structures/repeating-structures.component.d.ts +0 -1
  222. package/lib/_components/template/simple-table/simple-table.component.d.ts +0 -1
  223. package/lib/_components/template/simple-table-manual/helpers.d.ts +3 -2
  224. package/lib/_components/template/simple-table-manual/simple-table-manual.component.d.ts +8 -3
  225. package/lib/_components/template/simple-table-select/simple-table-select.component.d.ts +0 -1
  226. package/lib/_components/template/single-reference-readonly/single-reference-readonly.component.d.ts +0 -1
  227. package/lib/_components/template/sub-tabs/sub-tabs.component.d.ts +0 -1
  228. package/lib/_components/template/three-column/three-column.component.d.ts +0 -1
  229. package/lib/_components/template/three-column-page/three-column-page.component.d.ts +0 -1
  230. package/lib/_components/template/two-column/two-column.component.d.ts +0 -1
  231. package/lib/_components/template/two-column-page/two-column-page.component.d.ts +0 -1
  232. package/lib/_components/template/two-column-tab/two-column-tab.component.d.ts +0 -1
  233. package/lib/_components/template/utils.d.ts +7 -0
  234. package/lib/_components/template/wide-narrow-form/wide-narrow-form.component.d.ts +0 -1
  235. package/lib/_components/template/wide-narrow-page/wide-narrow-page.component.d.ts +0 -1
  236. package/lib/_components/template/wss-nav-bar/wss-nav-bar.component.d.ts +1 -2
  237. package/lib/_components/widget/app-announcement/app-announcement.component.d.ts +0 -1
  238. package/lib/_components/widget/attachment/attachment.component.d.ts +1 -2
  239. package/lib/_components/widget/case-history/case-history.component.d.ts +0 -1
  240. package/lib/_components/widget/feed-container/feed-container.component.d.ts +0 -1
  241. package/lib/_components/widget/file-utility/file-utility.component.d.ts +0 -1
  242. package/lib/_components/widget/quick-create/quick-create.component.d.ts +0 -1
  243. package/lib/_components/widget/todo/todo.component.d.ts +2 -3
  244. package/lib/_components/widget/utility/utility.component.d.ts +0 -1
  245. package/lib/_helpers/formatters/boolean.d.ts +1 -2
  246. package/lib/_helpers/formatters/common.d.ts +1 -1
  247. package/lib/_helpers/formatters/currency.d.ts +1 -2
  248. package/lib/_helpers/formatters/date.d.ts +1 -2
  249. package/lib/_helpers/formatters/index.d.ts +1 -2
  250. package/lib/_helpers/utils.d.ts +8 -0
  251. package/lib/_services/banner.service.d.ts +8 -0
  252. package/package.json +1 -1
  253. package/public-api.d.ts +12 -8
@@ -5,7 +5,7 @@ export function init(props) {
5
5
  const runtimeParams = PCore.getRuntimeParamsAPI().getRuntimeParams();
6
6
  let selectionCountThreshold;
7
7
  // promise to fetch metadata
8
- const metaDataPromise = PCore.getAnalyticsUtils().getDataViewMetadata(referenceList, showDynamicFields);
8
+ const metaDataPromise = PCore.getAnalyticsUtils().getDataViewMetadata(referenceList, showDynamicFields, null);
9
9
  const promisesArray = [metaDataPromise];
10
10
  // promise to fetch report configured columns
11
11
  const reportColumnsPromise = PCore.getAnalyticsUtils()
@@ -57,4 +57,4 @@ export function init(props) {
57
57
  });
58
58
  });
59
59
  }
60
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdFZpZXdIZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci1zZGstY29tcG9uZW50cy9zcmMvbGliL19jb21wb25lbnRzL3RlbXBsYXRlL2xpc3Qtdmlldy9saXN0Vmlld0hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUsxRCxNQUFNLFVBQVUsSUFBSSxDQUFDLEtBQUs7SUFDeEIsTUFBTSxFQUNKLGFBQWEsRUFDYixNQUFNLEVBQ04saUJBQWlCLEVBQ2pCLFVBQVUsRUFDVixhQUFhLEVBQ2IsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixHQUFHLEVBQ0gsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixPQUFPLEVBQ1AsY0FBYyxFQUNmLEdBQUcsS0FBSyxDQUFDO0lBQ1YsSUFBSSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFFdkMsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixFQUFFLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUVyRSxJQUFJLHVCQUF1QixDQUFDO0lBRTVCLDRCQUE0QjtJQUM1QixNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUV4RyxNQUFNLGFBQWEsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBRXhDLDZDQUE2QztJQUM3QyxNQUFNLG9CQUFvQixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtTQUNuRCxzQkFBc0IsQ0FBQyxhQUFhLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUNyRSxLQUFLLENBQUMsR0FBRyxFQUFFO1FBQ1YsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDO1lBQ3JCLElBQUksRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7U0FDbkIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxhQUFhLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFFekMsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLEVBQUMsUUFBUSxFQUFDLEVBQUU7UUFDeEMsTUFBTSxFQUNKLElBQUksRUFBRSxFQUFFLFdBQVcsRUFBRSxFQUN0QixHQUFHLFFBQVEsQ0FBQztRQUNiLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ2pCLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxtREFBbUQ7WUFDdEUsQ0FBQztZQUVELE1BQU0sRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLEdBQUcsS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDLG1CQUFtQixDQUFDO1lBQzNFLElBQUksZ0JBQWdCLElBQUksV0FBVyxFQUFFLENBQUM7Z0JBQ3BDLGtEQUFrRDtnQkFDbEQsYUFBYSxHQUFHLGNBQWMsQ0FBQztZQUNqQyxDQUFDO1lBQ0QsSUFBSSxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQztnQkFDcEQsdUJBQXVCLEdBQUcsR0FBRyxDQUFDLENBQUMsb0ZBQW9GO1lBQ3JILENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDM0IsQ0FBQyxDQUFDO0lBRUYsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDakYsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNoQyxPQUFPLFVBQVUsQ0FBQztRQUNoQixXQUFXLEVBQUUsYUFBYTtRQUMxQixNQUFNLEVBQUUsaUJBQWlCO1FBQ3pCLGFBQWEsRUFBRSxVQUFVLElBQUksYUFBYTtRQUMxQyxhQUFhO1FBQ2IsTUFBTTtRQUNOLGFBQWE7UUFDYixZQUFZO1FBQ1osV0FBVyxFQUFFLElBQUk7UUFDakIsT0FBTztLQUNSLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFDLE9BQU8sRUFBQyxFQUFFO1FBQ3RCLE9BQU8sbUJBQW1CLENBQUMsT0FBTyxFQUFFO1lBQ2xDLEdBQUcsS0FBSztZQUNSLE9BQU87WUFDUCx1QkFBdUI7WUFDdkIsR0FBRztZQUNILGFBQWE7WUFDYixPQUFPO1lBQ1AsY0FBYztTQUNmLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldENvbnRleHQsIHJlYWRDb250ZXh0UmVzcG9uc2UgfSBmcm9tICcuL3V0aWxzJztcblxuLy8gUmVtb3ZlIHRoaXMgYW5kIHVzZSBcInJlYWxcIiBQQ29yZSB0eXBlIG9uY2UgLmQudHMgaXMgZml4ZWQgKGN1cnJlbnRseSBzaG93cyAxIGVycm9yKVxuZGVjbGFyZSBjb25zdCBQQ29yZTogYW55O1xuXG5leHBvcnQgZnVuY3Rpb24gaW5pdChwcm9wcykge1xuICBjb25zdCB7XG4gICAgcmVmZXJlbmNlTGlzdCxcbiAgICBwQ29ubiQsXG4gICAgcGVyc29uYWxpemF0aW9uSWQsXG4gICAgcGFyYW1ldGVycyxcbiAgICBjb21wb3NpdGVLZXlzLFxuICAgIGlzU2VhcmNoYWJsZSxcbiAgICBhbGxvd0J1bGtBY3Rpb25zLFxuICAgIHJlZixcbiAgICBzaG93RHluYW1pY0ZpZWxkcyxcbiAgICBpc0RhdGFPYmplY3QsXG4gICAgeFJheVVpZCxcbiAgICBjb3Ntb3NUYWJsZVJlZlxuICB9ID0gcHJvcHM7XG4gIGxldCB7IGVkaXRpbmcsIHNlbGVjdGlvbk1vZGUgfSA9IHByb3BzO1xuXG4gIGNvbnN0IHJ1bnRpbWVQYXJhbXMgPSBQQ29yZS5nZXRSdW50aW1lUGFyYW1zQVBJKCkuZ2V0UnVudGltZVBhcmFtcygpO1xuXG4gIGxldCBzZWxlY3Rpb25Db3VudFRocmVzaG9sZDtcblxuICAvLyBwcm9taXNlIHRvIGZldGNoIG1ldGFkYXRhXG4gIGNvbnN0IG1ldGFEYXRhUHJvbWlzZSA9IFBDb3JlLmdldEFuYWx5dGljc1V0aWxzKCkuZ2V0RGF0YVZpZXdNZXRhZGF0YShyZWZlcmVuY2VMaXN0LCBzaG93RHluYW1pY0ZpZWxkcyk7XG5cbiAgY29uc3QgcHJvbWlzZXNBcnJheSA9IFttZXRhRGF0YVByb21pc2VdO1xuXG4gIC8vIHByb21pc2UgdG8gZmV0Y2ggcmVwb3J0IGNvbmZpZ3VyZWQgY29sdW1uc1xuICBjb25zdCByZXBvcnRDb2x1bW5zUHJvbWlzZSA9IFBDb3JlLmdldEFuYWx5dGljc1V0aWxzKClcbiAgICAuZ2V0RmllbGRzRm9yRGF0YVNvdXJjZShyZWZlcmVuY2VMaXN0LCBmYWxzZSwgcENvbm4kLmdldENvbnRleHROYW1lKCkpXG4gICAgLmNhdGNoKCgpID0+IHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe1xuICAgICAgICBkYXRhOiB7IGRhdGE6IFtdIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICBwcm9taXNlc0FycmF5LnB1c2gocmVwb3J0Q29sdW1uc1Byb21pc2UpO1xuXG4gIGNvbnN0IGZldGNoRWRpdERldGFpbHMgPSBhc3luYyBtZXRhZGF0YSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgZGF0YTogeyBpc1F1ZXJ5YWJsZSB9XG4gICAgfSA9IG1ldGFkYXRhO1xuICAgIGlmICghaXNEYXRhT2JqZWN0KSB7XG4gICAgICBpZiAoIWlzUXVlcnlhYmxlKSB7XG4gICAgICAgIGVkaXRpbmcgPSBmYWxzZTsgLyogRm9yY2UgZWRpdGluZyB0byBmYWxzZSBpZiBEUCBpcyBub24gcXVlcnlhYmxlICovXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgTVVMVElfT05fSE9WRVIsIE1VTFRJIH0gPSBQQ29yZS5nZXRDb25zdGFudHMoKS5MSVNUX1NFTEVDVElPTl9NT0RFO1xuICAgICAgaWYgKGFsbG93QnVsa0FjdGlvbnMgJiYgaXNRdWVyeWFibGUpIHtcbiAgICAgICAgLyoqIGVuYWJsZSBidWxrIGFjdGlvbnMgb25seSBpZiBEUCBpcyBxdWVyeWFibGUgKi9cbiAgICAgICAgc2VsZWN0aW9uTW9kZSA9IE1VTFRJX09OX0hPVkVSO1xuICAgICAgfVxuICAgICAgaWYgKFtNVUxUSV9PTl9IT1ZFUiwgTVVMVEldLmluY2x1ZGVzKHNlbGVjdGlvbk1vZGUpKSB7XG4gICAgICAgIHNlbGVjdGlvbkNvdW50VGhyZXNob2xkID0gMjUwOyAvLyBSZXN1bHRzIGNvdW50IHNob3VsZCBub3QgYmUgZ3JlYXRlciB0aGFuIHRocmVzaG9sZCB0byBkaXNwbGF5IFNlbGVjdEFsbCBjaGVja2JveC5cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICB9O1xuXG4gIGNvbnN0IGVkaXRQcm9taXNlID0gbWV0YURhdGFQcm9taXNlLnRoZW4obWV0YWRhdGEgPT4gZmV0Y2hFZGl0RGV0YWlscyhtZXRhZGF0YSkpO1xuICBwcm9taXNlc0FycmF5LnB1c2goZWRpdFByb21pc2UpO1xuICByZXR1cm4gZ2V0Q29udGV4dCh7XG4gICAgdGFibGVTb3VyY2U6IHJlZmVyZW5jZUxpc3QsXG4gICAgTGlzdElkOiBwZXJzb25hbGl6YXRpb25JZCxcbiAgICBydW50aW1lUGFyYW1zOiBwYXJhbWV0ZXJzID8/IHJ1bnRpbWVQYXJhbXMsXG4gICAgcHJvbWlzZXNBcnJheSxcbiAgICBwQ29ubiQsXG4gICAgY29tcG9zaXRlS2V5cyxcbiAgICBpc1NlYXJjaGFibGUsXG4gICAgaXNDYWNoZWFibGU6IHRydWUsXG4gICAgeFJheVVpZFxuICB9KS50aGVuKGFzeW5jIGNvbnRleHQgPT4ge1xuICAgIHJldHVybiByZWFkQ29udGV4dFJlc3BvbnNlKGNvbnRleHQsIHtcbiAgICAgIC4uLnByb3BzLFxuICAgICAgZWRpdGluZyxcbiAgICAgIHNlbGVjdGlvbkNvdW50VGhyZXNob2xkLFxuICAgICAgcmVmLFxuICAgICAgc2VsZWN0aW9uTW9kZSxcbiAgICAgIHhSYXlVaWQsXG4gICAgICBjb3Ntb3NUYWJsZVJlZlxuICAgIH0pO1xuICB9KTtcbn1cbiJdfQ==
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdFZpZXdIZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci1zZGstY29tcG9uZW50cy9zcmMvbGliL19jb21wb25lbnRzL3RlbXBsYXRlL2xpc3Qtdmlldy9saXN0Vmlld0hlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUUxRCxNQUFNLFVBQVUsSUFBSSxDQUFDLEtBQUs7SUFDeEIsTUFBTSxFQUNKLGFBQWEsRUFDYixNQUFNLEVBQ04saUJBQWlCLEVBQ2pCLFVBQVUsRUFDVixhQUFhLEVBQ2IsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixHQUFHLEVBQ0gsaUJBQWlCLEVBQ2pCLFlBQVksRUFDWixPQUFPLEVBQ1AsY0FBYyxFQUNmLEdBQUcsS0FBSyxDQUFDO0lBQ1YsSUFBSSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFFdkMsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixFQUFFLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUVyRSxJQUFJLHVCQUF1QixDQUFDO0lBRTVCLDRCQUE0QjtJQUM1QixNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFOUcsTUFBTSxhQUFhLEdBQVEsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUU3Qyw2Q0FBNkM7SUFDN0MsTUFBTSxvQkFBb0IsR0FBRyxLQUFLLENBQUMsaUJBQWlCLEVBQUU7U0FDbkQsc0JBQXNCLENBQUMsYUFBYSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUM7U0FDckUsS0FBSyxDQUFDLEdBQUcsRUFBRTtRQUNWLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUNyQixJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFO1NBQ25CLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsYUFBYSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBRXpDLE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxFQUFDLFFBQVEsRUFBQyxFQUFFO1FBQ3hDLE1BQU0sRUFDSixJQUFJLEVBQUUsRUFBRSxXQUFXLEVBQUUsRUFDdEIsR0FBRyxRQUFRLENBQUM7UUFDYixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNqQixPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsbURBQW1EO1lBQ3RFLENBQUM7WUFFRCxNQUFNLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxHQUFHLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztZQUMzRSxJQUFJLGdCQUFnQixJQUFJLFdBQVcsRUFBRSxDQUFDO2dCQUNwQyxrREFBa0Q7Z0JBQ2xELGFBQWEsR0FBRyxjQUFjLENBQUM7WUFDakMsQ0FBQztZQUNELElBQUksQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BELHVCQUF1QixHQUFHLEdBQUcsQ0FBQyxDQUFDLG9GQUFvRjtZQUNySCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQzNCLENBQUMsQ0FBQztJQUVGLE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDaEMsT0FBTyxVQUFVLENBQUM7UUFDaEIsV0FBVyxFQUFFLGFBQWE7UUFDMUIsTUFBTSxFQUFFLGlCQUFpQjtRQUN6QixhQUFhLEVBQUUsVUFBVSxJQUFJLGFBQWE7UUFDMUMsYUFBYTtRQUNiLE1BQU07UUFDTixhQUFhO1FBQ2IsWUFBWTtRQUNaLFdBQVcsRUFBRSxJQUFJO1FBQ2pCLE9BQU87S0FDUixDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBQyxPQUFPLEVBQUMsRUFBRTtRQUN0QixPQUFPLG1CQUFtQixDQUFDLE9BQU8sRUFBRTtZQUNsQyxHQUFHLEtBQUs7WUFDUixPQUFPO1lBQ1AsdUJBQXVCO1lBQ3ZCLEdBQUc7WUFDSCxhQUFhO1lBQ2IsT0FBTztZQUNQLGNBQWM7U0FDZixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRDb250ZXh0LCByZWFkQ29udGV4dFJlc3BvbnNlIH0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0KHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICByZWZlcmVuY2VMaXN0LFxuICAgIHBDb25uJCxcbiAgICBwZXJzb25hbGl6YXRpb25JZCxcbiAgICBwYXJhbWV0ZXJzLFxuICAgIGNvbXBvc2l0ZUtleXMsXG4gICAgaXNTZWFyY2hhYmxlLFxuICAgIGFsbG93QnVsa0FjdGlvbnMsXG4gICAgcmVmLFxuICAgIHNob3dEeW5hbWljRmllbGRzLFxuICAgIGlzRGF0YU9iamVjdCxcbiAgICB4UmF5VWlkLFxuICAgIGNvc21vc1RhYmxlUmVmXG4gIH0gPSBwcm9wcztcbiAgbGV0IHsgZWRpdGluZywgc2VsZWN0aW9uTW9kZSB9ID0gcHJvcHM7XG5cbiAgY29uc3QgcnVudGltZVBhcmFtcyA9IFBDb3JlLmdldFJ1bnRpbWVQYXJhbXNBUEkoKS5nZXRSdW50aW1lUGFyYW1zKCk7XG5cbiAgbGV0IHNlbGVjdGlvbkNvdW50VGhyZXNob2xkO1xuXG4gIC8vIHByb21pc2UgdG8gZmV0Y2ggbWV0YWRhdGFcbiAgY29uc3QgbWV0YURhdGFQcm9taXNlID0gUENvcmUuZ2V0QW5hbHl0aWNzVXRpbHMoKS5nZXREYXRhVmlld01ldGFkYXRhKHJlZmVyZW5jZUxpc3QsIHNob3dEeW5hbWljRmllbGRzLCBudWxsKTtcblxuICBjb25zdCBwcm9taXNlc0FycmF5OiBhbnkgPSBbbWV0YURhdGFQcm9taXNlXTtcblxuICAvLyBwcm9taXNlIHRvIGZldGNoIHJlcG9ydCBjb25maWd1cmVkIGNvbHVtbnNcbiAgY29uc3QgcmVwb3J0Q29sdW1uc1Byb21pc2UgPSBQQ29yZS5nZXRBbmFseXRpY3NVdGlscygpXG4gICAgLmdldEZpZWxkc0ZvckRhdGFTb3VyY2UocmVmZXJlbmNlTGlzdCwgZmFsc2UsIHBDb25uJC5nZXRDb250ZXh0TmFtZSgpKVxuICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgICAgZGF0YTogeyBkYXRhOiBbXSB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgcHJvbWlzZXNBcnJheS5wdXNoKHJlcG9ydENvbHVtbnNQcm9taXNlKTtcblxuICBjb25zdCBmZXRjaEVkaXREZXRhaWxzID0gYXN5bmMgbWV0YWRhdGEgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGRhdGE6IHsgaXNRdWVyeWFibGUgfVxuICAgIH0gPSBtZXRhZGF0YTtcbiAgICBpZiAoIWlzRGF0YU9iamVjdCkge1xuICAgICAgaWYgKCFpc1F1ZXJ5YWJsZSkge1xuICAgICAgICBlZGl0aW5nID0gZmFsc2U7IC8qIEZvcmNlIGVkaXRpbmcgdG8gZmFsc2UgaWYgRFAgaXMgbm9uIHF1ZXJ5YWJsZSAqL1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IE1VTFRJX09OX0hPVkVSLCBNVUxUSSB9ID0gUENvcmUuZ2V0Q29uc3RhbnRzKCkuTElTVF9TRUxFQ1RJT05fTU9ERTtcbiAgICAgIGlmIChhbGxvd0J1bGtBY3Rpb25zICYmIGlzUXVlcnlhYmxlKSB7XG4gICAgICAgIC8qKiBlbmFibGUgYnVsayBhY3Rpb25zIG9ubHkgaWYgRFAgaXMgcXVlcnlhYmxlICovXG4gICAgICAgIHNlbGVjdGlvbk1vZGUgPSBNVUxUSV9PTl9IT1ZFUjtcbiAgICAgIH1cbiAgICAgIGlmIChbTVVMVElfT05fSE9WRVIsIE1VTFRJXS5pbmNsdWRlcyhzZWxlY3Rpb25Nb2RlKSkge1xuICAgICAgICBzZWxlY3Rpb25Db3VudFRocmVzaG9sZCA9IDI1MDsgLy8gUmVzdWx0cyBjb3VudCBzaG91bGQgbm90IGJlIGdyZWF0ZXIgdGhhbiB0aHJlc2hvbGQgdG8gZGlzcGxheSBTZWxlY3RBbGwgY2hlY2tib3guXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfTtcblxuICBjb25zdCBlZGl0UHJvbWlzZSA9IG1ldGFEYXRhUHJvbWlzZS50aGVuKG1ldGFkYXRhID0+IGZldGNoRWRpdERldGFpbHMobWV0YWRhdGEpKTtcbiAgcHJvbWlzZXNBcnJheS5wdXNoKGVkaXRQcm9taXNlKTtcbiAgcmV0dXJuIGdldENvbnRleHQoe1xuICAgIHRhYmxlU291cmNlOiByZWZlcmVuY2VMaXN0LFxuICAgIExpc3RJZDogcGVyc29uYWxpemF0aW9uSWQsXG4gICAgcnVudGltZVBhcmFtczogcGFyYW1ldGVycyA/PyBydW50aW1lUGFyYW1zLFxuICAgIHByb21pc2VzQXJyYXksXG4gICAgcENvbm4kLFxuICAgIGNvbXBvc2l0ZUtleXMsXG4gICAgaXNTZWFyY2hhYmxlLFxuICAgIGlzQ2FjaGVhYmxlOiB0cnVlLFxuICAgIHhSYXlVaWRcbiAgfSkudGhlbihhc3luYyBjb250ZXh0ID0+IHtcbiAgICByZXR1cm4gcmVhZENvbnRleHRSZXNwb25zZShjb250ZXh0LCB7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIGVkaXRpbmcsXG4gICAgICBzZWxlY3Rpb25Db3VudFRocmVzaG9sZCxcbiAgICAgIHJlZixcbiAgICAgIHNlbGVjdGlvbk1vZGUsXG4gICAgICB4UmF5VWlkLFxuICAgICAgY29zbW9zVGFibGVSZWZcbiAgICB9KTtcbiAgfSk7XG59XG4iXX0=
@@ -659,4 +659,4 @@ export const readContextResponse = async (context, params) => {
659
659
  params.listContext = { meta, presets: presetArray, apiContext: { ...apiContext } };
660
660
  return params.listContext;
661
661
  };
662
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyLXNkay1jb21wb25lbnRzL3NyYy9saWIvX2NvbXBvbmVudHMvdGVtcGxhdGUvbGlzdC12aWV3L3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBS3ZELE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQztBQUN2QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUM7QUFDbkIsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBRXhCLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRztJQUM3QixVQUFVLEVBQUUsWUFBWTtJQUN4QixPQUFPLEVBQUUsU0FBUztJQUNsQixRQUFRLEVBQUUsVUFBVTtDQUNyQixDQUFDO0FBRUYsTUFBTSxPQUFPO0lBR1g7UUFDRSxJQUFJLENBQUMsZ0NBQWdDLEdBQUcsRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxnQ0FBZ0MsR0FBRyxFQUFFLENBQUM7UUFDM0MsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsZUFBZSxDQUFDLDJCQUEyQixHQUFHLEVBQUUsRUFBRSwyQkFBMkIsR0FBRyxFQUFFO1FBQ2hGLElBQUksQ0FBQyxnQ0FBZ0MsR0FBRztZQUN0QyxHQUFHLElBQUksQ0FBQyxnQ0FBZ0M7WUFDeEMsR0FBRywyQkFBMkI7U0FDL0IsQ0FBQztRQUNGLElB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QXVCLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNoRixNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkMsV0FBVyxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDOUUsQ0FBQyxDQUFDLENBQUM7SUFDSCxNQUFNLElBQUksR0FBRyxXQUFXLENBQUM7SUFDekIsTUFBTSxDQUFDLFdBQVcsR0FBRyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxFQUFFLEdBQUcsVUFBVSxFQUFFLEVBQUUsQ0FBQztJQUNuRixPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUM7QUFDNUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0RGVmYXVsdFZpZXdNZXRhIH0gZnJvbSAnLi9EZWZhdWx0Vmlld01ldGEnO1xuXG4vLyBSZW1vdmUgdGhpcyBhbmQgdXNlIFwicmVhbFwiIFBDb3JlIHR5cGUgb25jZSAuZC50cyBpcyBmaXhlZCAoY3VycmVudGx5IHNob3dzIDUgZXJyb3JzKVxuZGVjbGFyZSBjb25zdCBQQ29yZTogYW55O1xuXG5jb25zdCBVU0VSX1JFRkVSRU5DRSA9ICdVc2VyUmVmZXJlbmNlJztcbmNvbnN0IFBBR0UgPSAnIVAhJztcbmNvbnN0IFBBR0VMSVNUID0gJyFQTCEnO1xuXG5leHBvcnQgY29uc3QgZm9ybWF0Q29uc3RhbnRzID0ge1xuICBXb3JrU3RhdHVzOiAnV29ya1N0YXR1cycsXG4gIEludGVnZXI6ICdJbnRlZ2VyJyxcbiAgV29ya0xpbms6ICdXb3JrTGluaydcbn07XG5cbmNsYXNzIERhdGFBcGkge1xuICBtYXBwZWRQcm9wZXJ0eVRvT3JpZ2luYWxQcm9wZXJ0eTogYW55O1xuICBvcmlnaW5hbFByb3BlcnR5VG9NYXBwZWRQcm9wZXJ0eTogYW55O1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLm9yaWdpbmFsUHJvcGVydHlUb01hcHBlZFByb3BlcnR5ID0ge307XG4gICAgdGhpcy5tYXBwZWRQcm9wZXJ0eVRvT3JpZ2luYWxQcm9wZXJ0eSA9IHt9O1xuICAgIHRoaXMuc2V0UHJvcGVydHlNYXBzID0gdGhpcy5zZXRQcm9wZXJ0eU1hcHMuYmluZCh0aGlzKTtcbiAgICB0aGlzLmdldE1hcHBlZFByb3BlcnR5ID0gdGhpcy5nZXRNYXBwZWRQcm9wZXJ0eS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuZ2V0T3JpZ2luYWxQcm9wZXJ0eSA9IHRoaXMuZ2V0T3JpZ2luYWxQcm9wZXJ0eS5iaW5kKHRoaXMpO1xuICB9XG5cbiAgc2V0UHJvcGVydHlNYXBzKG9yaWdpbmFsVG9NYXBwZWRQcm9wZXJ0eU9iaiA9IHt9LCBtYXBwZWRUb09yaWdpbmFsUHJvcGVydHlPYmogPSB7fSkge1xuICAgIHRoaXMub3JpZ2luYWxQcm9wZXJ0eVRvTWFwcGVkUHJvcGVydHkgPSB7XG4gICAgICAuLi50aGlzLm9yaWdpbmFsUHJvcGVydHlUb01hcHBlZFByb3BlcnR5LFxuICAgICAgLi4ub3JpZ2luYWxUb01hcHBlZFByb3BlcnR5T2JqXG4gICAgfTtcbiAgICB0aGlzLm1hcHBlZFByb3BlcnR5VG9PcmlnaW5hbFByb3BlcnR5ID0ge1xuICAgICAgLi4udGhpcy5tYXBwZWRQcm9wZXJ0eVRvT3JpZ2luYWxQcm9wZXJ0eSxcbiAgICAgIC4uLm1hcHBlZFRvT3JpZ2luYWxQcm9wZXJ0eU9ialxuICAgIH07XG4gIH1cblxuICBnZXRNYXBwZWRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFByb3BlcnR5VG9NYXBwZWRQcm9wZXJ0eVtwcm9wZXJ0eU5hbWVdID8/IHByb3BlcnR5TmFtZTtcbiAgfVxuXG4gIGdldE9yaWdpbmFsUHJvcGVydHkocHJvcGVydHlOYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwcGVkUHJvcGVydHlUb09yaWdpbmFsUHJvcGVydHlbcHJvcGVydHlOYW1lXSA/PyBwcm9wZXJ0eU5hbWU7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldENvbnRleHQoY29tcG9uZW50Q29uZmlnKSB7XG4gIGNvbnN0IHtcbiAgICBwcm9taXNlc0FycmF5ID0gW10gLy8gYXJyYXkgb2YgcHJvbWlzZXMgd2hpY2ggY2FuIGJlIGludm9rZWQgcGFyYWxlbGx5LFxuICB9ID0gY29tcG9uZW50Q29uZmlnO1xuICBjb25zdCBwcm9taXNlc1Jlc3BvbnNlQXJyYXkgPSBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlc0FycmF5KTtcbiAgY29uc3QgZGF0YUFwaSA9IG5ldyBEYXRhQXBpKCk7XG4gIHJldHVybiB7XG4gICAgcHJvbWlzZXNSZXNwb25zZUFycmF5LFxuICAgIHNldFByb3BlcnR5TWFwczogZGF0YUFwaS5zZXRQcm9wZXJ0eU1hcHMsXG4gICAgZ2V0TWFwcGVkUHJvcGVydHk6IGRhdGFBcGkuZ2V0TWFwcGVkUHJvcGVydHksXG4gICAgZ2V0T3JpZ2luYWxQcm9wZXJ0eTogZGF0YUFwaS5nZXRPcmlnaW5hbFByb3BlcnR5XG4gIH07XG59XG5cbi8qKlxuICogW2dldEZpZWxkTmFtZUZyb21FbWJlZGRlZEZpZWxkTmFtZV1cbiAqIERlc2NyaXB0aW9uICAgIC0gICAgICAgICAgICAgICBjb252ZXJ0aW5nIGVtYmVkZGVkRmllbGQgbmFtZSBzdGFydGluZyB3aXRoICFQISBvciAhUEwhIHRvIG5vcm1hbCBmaWVsZFxuICogQGlnbm9yZVxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5TmFtZSAgIEVtYmVkZGVkRmllbGQgbmFtZSBzdGFydGluZyB3aXRoICFQISBvciAhUEwhXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAgICAgICAgICAgICAgcmV0dXJucyBjb252ZXJ0ZWQgc3RyaW5nIHdpdGhvdXQgIVAhIG9yICFQTCEgYW5kIDpcbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5FeGFtcGxlIGZvciBnZXRGaWVsZE5hbWVGcm9tRW1iZWRkZWRGaWVsZE5hbWUgPC9jYXB0aW9uPlxuICogZ2V0RmllbGROYW1lRnJvbUVtYmVkZGVkRmllbGROYW1lKCchUCFPcmdhbmlzYXRpb246TmFtZScpIHJldHVybiAnT3JnYW5pc2F0aW9uLk5hbWUnXG4gKiBnZXRGaWVsZE5hbWVGcm9tRW1iZWRkZWRGaWVsZE5hbWUoJyFQTCFFbXBsb3llZXM6TmFtZScpIHJldHVybiAnRW1wbG95ZWVzLk5hbWUnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWVsZE5hbWVGcm9tRW1iZWRkZWRGaWVsZE5hbWUocHJvcGVydHlOYW1lKSB7XG4gIGxldCB2YWx1ZSA9IHByb3BlcnR5TmFtZTtcbiAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoUEFHRSkgfHwgdmFsdWUuc3RhcnRzV2l0aChQQUdFTElTVCkpIHtcbiAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZyh2YWx1ZS5sYXN0SW5kZXhPZignIScpICsgMSk7XG4gICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC86L2csICcuJyk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFt1cGRhdGVNZXRhRW1iZWRkZWRGaWVsZElEXVxuICogRGVzY3JpcHRpb24gICAgLSAgICAgICAgICAgSWYgdGhlIGZpZWxkSUQgaW4gbWV0YSBzdGFydHMgd2l0aCAnIVAhJyBvciAnIVBMIScgYW5kIGNvbnRhaW5zICc6JyB0aGVuIHJlcGxhY2UgdGhlbSB3aXRoIC4oZG90KVxuICogQGlnbm9yZVxuICogQHBhcmFtIHtBcnJheX0gbWV0YUZpZWxkcyAgRmllbGRzIG1ldGFkYXRhIEFycmF5LiBDb250YWlucyBtZXRhZGF0YSBvZiBhbGwgdGhlIGZpZWxkcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZU1ldGFFbWJlZGRlZEZpZWxkSUQobWV0YUZpZWxkcykge1xuICByZXR1cm4gbWV0YUZpZWxkcy5mb3JFYWNoKG1ldGFGaWVsZCA9PiB7XG4gICAgaWYgKG1ldGFGaWVsZC5maWVsZElEPy5zdGFydHNXaXRoKFBBR0UpIHx8IG1ldGFGaWVsZC5maWVsZElEPy5zdGFydHNXaXRoKFBBR0VMSVNUKSkge1xuICAgICAgbWV0YUZpZWxkLmZpZWxkSUQgPSBnZXRGaWVsZE5hbWVGcm9tRW1iZWRkZWRGaWVsZE5hbWUobWV0YUZpZWxkLmZpZWxkSUQpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCBpc0VtYmVkZGVkRmllbGQgPSBmaWVsZCA9PiB7XG4gIGlmIChmaWVsZD8uc3RhcnRzV2l0aCgnQCcpKSB7XG4gICAgZmllbGQgPSBmaWVsZC5zdWJzdHJpbmcoZmllbGQuaW5kZXhPZignICcpICsgMSk7XG4gICAgaWYgKGZpZWxkWzBdID09PSAnLicpIGZpZWxkID0gZmllbGQuc3Vic3RyaW5nKDEpO1xuICB9XG4gIHJldHVybiBmaWVsZD8uaW5kZXhPZignLicpID4gMDtcbn07XG5cbi8qKlxuICogW2lzUGFnZUxpc3RQcm9wZXJ0eV1cbiAqIERlc2NyaXB0aW9uICAgIC0gICAgICAgIGNoZWNraW5nIGlmIHByb3BlcnR5TmFtZSBpcyBwYWdlTGlzdCBvciBub3RcbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eU5hbWUgICBQcm9wZXJ0eU5hbWVcbiAqIEByZXR1cm5zIHtib29sZWFufSAgdHJ1ZSBpZiBwcm9wZXJ0eSBpcyBwYWdlTGlzdCBlbHNlIGZhbHNlXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+RXhhbXBsZSBmb3IgaXNQYWdlTGlzdFByb3BlcnR5IDwvY2FwdGlvbj5cbiAqIGlzUGFnZUxpc3RQcm9wZXJ0eSgnIVBMIUVtcGxveWVlcy5OYW1lJykgcmV0dXJuIHRydWVcbiAqIGlzUGFnZUxpc3RQcm9wZXJ0eSgnIVAhRW1wbG95ZWVzLk5hbWUnKSByZXR1cm4gZmFsc2VcbiAqIGlzUGFnZUxpc3RQcm9wZXJ0eSgnTmFtZScpIHJldHVybiBmYWxzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQYWdlTGlzdFByb3BlcnR5KHByb3BlcnR5TmFtZSkge1xuICByZXR1cm4gcHJvcGVydHlOYW1lLnN0YXJ0c1dpdGgoUEFHRUxJU1QpO1xufVxuXG5leHBvcnQgY29uc3QgaXNQYWdlTGlzdEluUGF0aCA9IChwcm9wZXJ0eU5hbWUsIGN1cnJlbnRDbGFzc0lEKSA9PiB7XG4gIGlmICghcHJvcGVydHlOYW1lLmluY2x1ZGVzKCcuJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgW2ZpcnN0LCAuLi5yZXN0XSA9IHByb3BlcnR5TmFtZS5zcGxpdCgnLicpO1xuICBjb25zdCBtZXRhZGF0YSA9IFBDb3JlLmdldE1ldGFkYXRhVXRpbHMoKS5nZXRQcm9wZXJ0eU1ldGFkYXRhKGZpcnN0LCBjdXJyZW50Q2xhc3NJRCk7XG4gIGlmIChtZXRhZGF0YT8udHlwZSA9PT0gJ1BhZ2UgTGlzdCcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gaXNQYWdlTGlzdEluUGF0aChyZXN0LmpvaW4oJy4nKSwgbWV0YWRhdGE/LnBhZ2VDbGFzcyk7XG59O1xuXG4vKipcbiAqIFtnZXRFbWJlZGRlZEZpZWxkTmFtZV1cbiAqIERlc2NyaXB0aW9uICAgIC0gICAgICAgICAgICAgICBjb252ZXJ0aW5nIG5vcm1hbCBmaWVsZCBuYW1lIHRvIGVtYmVkZGVkIGZpZWxkIHN0YXJ0aW5nIHdpdGggIVAhIG9yICFQTCFcbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eU5hbWUgICBGaWVsZCBuYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NJRCAgICAgICAgY2xhc3NJRCBvZiBkYXRhcGFnZVxuICogQHJldHVybnMge3N0cmluZ30gICAgICAgICAgICAgIHJldHVybnMgY29udmVydGVkIHN0cmluZyB3aXRoICFQISBvciAhUEwhIGFuZCA6XG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+RXhhbXBsZSBmb3IgZ2V0RW1iZWRkZWRGaWVsZE5hbWUgPC9jYXB0aW9uPlxuICogRm9yIHBhZ2UgcHJvcGVydHksIGdldEVtYmVkZGVkRmllbGROYW1lKCdPcmdhbmlzYXRpb24uTmFtZScpIHJldHVybiAnIVAhT3JnYW5pc2F0aW9uOk5hbWUnXG4gKiBGb3IgcGFnZUxpc3QgcHJvcGVydHksIGdldEVtYmVkZGVkRmllbGROYW1lKCdFbXBsb3llZXMuTmFtZScpIHJldHVybiAnIVBMIUVtcGxveWVlczpOYW1lJ1xuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbWJlZGRlZEZpZWxkTmFtZShwcm9wZXJ0eU5hbWUsIGNsYXNzSUQpIHtcbiAgbGV0IHZhbHVlID0gcHJvcGVydHlOYW1lO1xuICBpZiAoaXNQYWdlTGlzdEluUGF0aCh2YWx1ZSwgY2xhc3NJRCkpIHtcbiAgICB2YWx1ZSA9IGAhUEwhJHt2YWx1ZS5yZXBsYWNlKC9cXC4vZywgJzonKX1gO1xuICB9IGVsc2Uge1xuICAgIHZhbHVlID0gYCFQISR7dmFsdWUucmVwbGFjZSgvXFwuL2csICc6Jyl9YDtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogW3ByZXBhcmVQcm9wZXJ0eU1hcHNdXG4gKiBEZXNjcmlwdGlvbiAgICAtICAgICAgICBwcmVwYXJpbmcgbWFwcyBmb3IgcHJvcGVydHkgbmFtZXMgYW5kIHNldCBpdCBpbiBkYXRhQXBpIGNvbnRleHRcbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSB7QXJyYXl9IGZpZWxkcyAgIGZpZWxkcyBhcnJheVxuICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzSUQgIGNsYXNzSUQgb2YgZGF0YXBhZ2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZXh0ICBkYXRhQXBpIGNvbnRleHRcbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIHBhZ2VMaXN0UHJvcGVydHkgaXMgcHJlc2VudFxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZVByb3BlcnR5TWFwcyhmaWVsZHMsIGNsYXNzSUQsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBzZXRQcm9wZXJ0eU1hcHMgfSA9IGNvbnRleHQ7XG4gIGNvbnN0IG1hcHMgPSBmaWVsZHMucmVkdWNlKFxuICAgIChhY2MsIGZpZWxkKSA9PiB7XG4gICAgICBsZXQgeyB2YWx1ZSB9ID0gZmllbGQuY29uZmlnO1xuICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoJ0AnKSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZyh2YWx1ZS5pbmRleE9mKCcgJykgKyAxKTtcbiAgICAgICAgaWYgKHZhbHVlWzBdID09PSAnLicpIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDEpO1xuICAgICAgfVxuICAgICAgbGV0IG5hbWUgPSB2YWx1ZTtcbiAgICAgIC8vIFByZXBhcmluZyBuYW1lIGZvciBlbWJlZGRlZCBwcm9wZXJ0eVxuICAgICAgaWYgKGlzRW1iZWRkZWRGaWVsZChuYW1lKSkge1xuICAgICAgICBuYW1lID0gZ2V0RW1iZWRkZWRGaWVsZE5hbWUobmFtZSwgY2xhc3NJRCk7XG4gICAgICB9XG4gICAgICBpZiAoaXNQYWdlTGlzdFByb3BlcnR5KG5hbWUpICYmICFhY2NbMl0pIHtcbiAgICAgICAgYWNjWzJdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGFjY1swXVt2YWx1ZV0gPSBuYW1lO1xuICAgICAgYWNjWzFdW25hbWVdID0gdmFsdWU7XG5cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSxcbiAgICBbe30sIHt9LCBmYWxzZV1cbiAgKTtcbiAgc2V0UHJvcGVydHlNYXBzKG1hcHNbMF0sIG1hcHNbMV0pO1xuICByZXR1cm4gbWFwc1syXTtcbn1cblxuLyoqXG4gKiBbZ2V0Q29uZmlnRW1iZWRkZWRGaWVsZHNNZXRhXVxuICogRGVzY3JpcHRpb24gICAgLSAgICAgICAgICAgR2V0IHRoZSBtZXRhZGF0YSBmb3IgY29uZmlndXJlZCBlbWJlZGRlZCBmaWVsZHNcbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSB7U2V0fSBjb25maWdGaWVsZHMgIFNldCBvZiBjb25maWcgZmllbGRzXG4gKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NJRCAgICBjbGFzSUQgb2YgZGF0YXBhZ2VcbiAqIEByZXR1cm5zIHtBcnJheX0gICAgICAgICAgIE1ldGFkYXRhIG9mIGNvbmZpZ3VyZWQgZW1iZWRkZWQgZmllbGRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25maWdFbWJlZGRlZEZpZWxkc01ldGEoY29uZmlnRmllbGRzLCBjbGFzc0lEKSB7XG4gIGNvbnN0IGNvbmZpZ0VtYmVkZGVkRmllbGRzTWV0YTogYW55W10gPSBbXTtcbiAgY29uZmlnRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgIGxldCB2YWx1ZSA9IGZpZWxkO1xuICAgIGlmIChpc0VtYmVkZGVkRmllbGQodmFsdWUpKSB7XG4gICAgICAvLyBjb252ZXJzaW9uIFBhZ2UuUGFnZUxpc3RbXS5wcm9wZXJ0eSA9PiBQYWdlLlBhZ2VMaXN0LnByb3BlcnR5XG4gICAgICBpZiAodmFsdWUuaW5jbHVkZXMoJ1snKSkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCB2YWx1ZS5pbmRleE9mKCdbJykpICsgdmFsdWUuc3Vic3RyaW5nKHZhbHVlLmluZGV4T2YoJ10nKSArIDEpO1xuICAgICAgfVxuICAgICAgY29uc3QgbWV0YSA9IFBDb3JlLmdldE1ldGFkYXRhVXRpbHMoKS5nZXRFbWJlZGRlZFByb3BlcnR5TWV0YWRhdGEodmFsdWUsIGNsYXNzSUQpO1xuICAgICAgbWV0YS5maWVsZElEID0gZmllbGQ7XG4gICAgICBjb25maWdFbWJlZGRlZEZpZWxkc01ldGEucHVzaChtZXRhKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY29uZmlnRW1iZWRkZWRGaWVsZHNNZXRhO1xufVxuXG4vKipcbiAqIFttZXJnZUNvbmZpZ0VtYmVkZGVkRmllbGRzTWV0YV1cbiAqIERlc2NyaXB0aW9uICAgIC0gICAgICAgICAgIEdldCB0aGUgbWV0YWRhdGEgZm9yIGNvbmZpZ3VyZWQgZW1iZWRkZWQgZmllbGRzXG4gKiBAaWdub3JlXG4gKiBAcGFyYW0ge0FycmF5fSBjb25maWdFbWJlZGRlZEZpZWxkc01ldGEgIGNvbmZpZyBmaWVsZHMgbWV0YWRhdGEuXG4gKiBAcGFyYW0ge0FycmF5fSBtZXRhRmllbGRzICBGaWVsZHMgbWV0YWRhdGEgQXJyYXkuIENvbnRhaW5zIG1ldGFkYXRhIG9mIGFsbCB0aGUgZmllbGRzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUNvbmZpZ0VtYmVkZGVkRmllbGRzTWV0YShjb25maWdFbWJlZGRlZEZpZWxkc01ldGEsIG1ldGFGaWVsZHMpIHtcbiAgY29uc3QgbWVyZ2VkTWV0YUZpZWxkcyA9IFsuLi5tZXRhRmllbGRzXTtcbiAgY29uZmlnRW1iZWRkZWRGaWVsZHNNZXRhLmZvckVhY2goY29uZmlnRmllbGRNZXRhID0+IHtcbiAgICBjb25zdCBmaWVsZE1ldGEgPSBtZXRhRmllbGRzLmZpbmQobWV0YUZpZWxkID0+IG1ldGFGaWVsZC5maWVsZElEID09PSBjb25maWdGaWVsZE1ldGEuZmllbGRJRCk7XG4gICAgaWYgKCFmaWVsZE1ldGEpIG1lcmdlZE1ldGFGaWVsZHMucHVzaChjb25maWdGaWVsZE1ldGEpO1xuICB9KTtcbiAgcmV0dXJuIG1lcmdlZE1ldGFGaWVsZHM7XG59XG5cbmNvbnN0IG9sZFRvTmV3RmllbGRUeXBlTWFwcGluZyA9IHtcbiAgJ0RhdGUgVGltZSc6ICdEYXRlICYgdGltZScsXG4gIERhdGU6ICdEYXRlIG9ubHknXG59O1xuXG4vKipcbiAqIFt1cGRhdGVGaWVsZFR5cGVdXG4gKiBEZXNjcmlwdGlvbiAgICAtICAgICAgICAgICBVcGRhdGVzIHRoZSBmaWVsZCB0eXBlIGlmIGl0cyBjaGFuZ2VkIGluIHRoZSBuZXcgaW1wbGVtZW50YXRpb24uIFN1Y2ggbWFwcGluZyBpcyBtYWludGFpbmVkIGluIG9sZFRvTmV3RmllbGRUeXBlTWFwcGluZy5cbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSB7QXJyYXl9IG1ldGFGaWVsZHMgIEZpZWxkcyBtZXRhZGF0YSBBcnJheS4gQ29udGFpbnMgbWV0YWRhdGEgb2YgYWxsIHRoZSBmaWVsZHMuXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZUZpZWxkVHlwZShtZXRhRmllbGRzKSB7XG4gIG1ldGFGaWVsZHMuZm9yRWFjaChtZXRhRmllbGQgPT4ge1xuICAgIGlmIChtZXRhRmllbGQudHlwZSkgbWV0YUZpZWxkLnR5cGUgPSBvbGRUb05ld0ZpZWxkVHlwZU1hcHBpbmdbbWV0YUZpZWxkLnR5cGVdIHx8IG1ldGFGaWVsZC50eXBlO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0UHJlc2V0TWV0YUF0dHJpYnV0ZShhdHRyaWJ1dGUpIHtcbiAgY29uc3Qge1xuICAgIHR5cGUsXG4gICAgY29uZmlnOiB7IGxhYmVsLCB2YWx1ZSB9XG4gIH0gPSBhdHRyaWJ1dGU7XG4gIHJldHVybiB7XG4gICAgdHlwZSxcbiAgICBuYW1lOiB2YWx1ZS5zdGFydHNXaXRoKCdAJykgPyB2YWx1ZS5zdWJzdHJpbmcoNCkgOiB2YWx1ZSxcbiAgICBsYWJlbDogbGFiZWwuc3RhcnRzV2l0aCgnQCcpID8gbGFiZWwuc3Vic3RyaW5nKDMpIDogbGFiZWxcbiAgfTtcbn1cblxuLyoqXG4gKiBbZ2VuZXJhdGVWaWV3TWV0YURhdGFdXG4gKiBEZXNjcmlwdGlvbiAtIFJldHVybnMgYSBsaXN0IG9mICBtZXRhb2JqZWN0cyBvZiB0aGUgZmllbGRzIHByb3ZpZGVkLlxuICogQGlnbm9yZVxuICogQHBhcmFtICAge0FycmF5fSAgIHJhd0ZpZWxkcyAgICAgICAgIExpc3Qgb2YgZmllbGRzIHRvIHVwZGF0ZSBtZXRhIGZvclxuICogQHBhcmFtICAge3N0cmluZ30gIGNsYXNzSUQgICAgICAgICAgQ2xhc3MgSUQgZnJvbSB0aGUgcmVzcG9uc2VcbiAqIEByZXR1cm5zIHtBcnJheX0gICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgZmllbGRzIHdpdGggdXBkYXRlZCBtZXRhIG9iamVjdHMuXG4gKi9cbmZ1bmN0aW9uIGdlbmVyYXRlVmlld01ldGFEYXRhKHJhd0ZpZWxkcywgY2xhc3NJRCwgc2hvd0ZpZWxkKSB7XG4gIHJldHVybiByYXdGaWVsZHMubWFwKGl0ZW0gPT4gZ2V0RGVmYXVsdFZpZXdNZXRhKGl0ZW0sIGNsYXNzSUQsIHNob3dGaWVsZCkpO1xufVxuXG4vKipcbiAqIFtnZXRDb25maWdGaWVsZHNdXG4gKiBEZXNjcmlwdGlvbiAtIFJldHVybnMgbGlzdCBvZiBjb25maWcgZmllbGRzIHdpdGggcHJpbWFyeSBmaWVsZHMgbWV0YSB1cGRhdGVkLlxuICogQGlnbm9yZVxuICogQHBhcmFtICAge0FycmF5fSAgIGNvbmZpZ0ZpZWxkcyAgICAgIExpc3Qgb2YgQXV0aG9yZWQgZmllbGRzXG4gKiBAcGFyYW0gICB7QXJyYXl9ICAgcHJpbWFyeUZpZWxkcyAgICAgTGlzdCBvZiBQcmltYXJ5IEZpZWxkc1xuICogQHBhcmFtICAge0FycmF5fSAgIG1ldGFGaWVsZHMgICAgICAgIE1ldGFkYXRhIG9mIGFsbCBmaWVsZHNcbiAqIEBwYXJhbSAgIHtzdHJpbmd9ICBjbGFzc0lEICAgICAgICAgICBDbGFzcyBJRCBmcm9tIHRoZSByZXNwb25zZVxuICogQHJldHVybnMge0FycmF5fSAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgYWxsIGZpZWxkcyB3aXRoIHRoZWlyIG1ldGEgdXBkYXRlZC5cbiAqL1xuZnVuY3Rpb24gZ2V0Q29uZmlnRmllbGRzKGNvbmZpZ0ZpZWxkcywgcHJpbWFyeUZpZWxkcywgbWV0YUZpZWxkcywgY2xhc3NJRCkge1xuICBjb25zdCBwcmVzZXRDb25maWdGaWVsZHMgPSBjb25maWdGaWVsZHM7XG4gIGNvbnN0IHByaW1hcnlGaWVsZHNWaWV3SW5kZXggPSBwcmVzZXRDb25maWdGaWVsZHMuZmluZEluZGV4KGZpZWxkID0+IGZpZWxkLmNvbmZpZy52YWx1ZSA9PT0gJ3B5UHJpbWFyeUZpZWxkcycpO1xuICBpZiAoIXByaW1hcnlGaWVsZHMgfHwgIXByaW1hcnlGaWVsZHMubGVuZ3RoKSB7XG4gICAgaWYgKHByaW1hcnlGaWVsZHNWaWV3SW5kZXggPCAwKSByZXR1cm4gcHJlc2V0Q29uZmlnRmllbGRzO1xuXG4gICAgcHJlc2V0Q29uZmlnRmllbGRzLnNwbGljZShwcmltYXJ5RmllbGRzVmlld0luZGV4LCAxKTtcblxuICAgIHJldHVybiBwcmVzZXRDb25maWdGaWVsZHM7XG4gIH1cblxuICBpZiAocHJpbWFyeUZpZWxkc1ZpZXdJbmRleCA+IC0xKSB7XG4gICAgLy8gbGlzdCBvZiB1bmNvbW1vbiBmaWVsZHMgLSBub24gb3ZlcmxhcCBvZiBwcmltYXJ5IGZpZWxkcyBncm91cGVkIHZpZXcgYW5kIGluZGVwZW5kZW50IGVudGl0eSBjb2x1bW5zIG9mIHByaW1hcnkgdHlwZVxuICAgIGNvbnN0IHVuY29tbW9uRmllbGRzTGlzdCA9IHByaW1hcnlGaWVsZHMuZmlsdGVyKFxuICAgICAgcHJpbWFyeUZpZWxkID0+ICFwcmVzZXRDb25maWdGaWVsZHMuc29tZShwcmVzZXRDb25maWdGaWVsZCA9PiBwcmVzZXRDb25maWdGaWVsZC5jb25maWcudmFsdWUuc3BsaXQoJy4nKVsxXSA9PT0gcHJpbWFyeUZpZWxkKVxuICAgICk7XG4gICAgY29uc3QgdW5jb21tb25GaWVsZHNSYXdNZXRhOiBhbnlbXSA9IFtdO1xuICAgIHVuY29tbW9uRmllbGRzTGlzdC5mb3JFYWNoKHVuY29tbW9uRmllbGQgPT4ge1xuICAgICAgY29uc3QgdW5jb21tb25GaWVsZE1ldGEgPSBtZXRhRmllbGRzLmZpbmQobWV0YUZpZWxkID0+IG1ldGFGaWVsZC5maWVsZElEID09PSB1bmNvbW1vbkZpZWxkKTtcbiAgICAgIGlmICh1bmNvbW1vbkZpZWxkTWV0YSkgdW5jb21tb25GaWVsZHNSYXdNZXRhLnB1c2godW5jb21tb25GaWVsZE1ldGEpO1xuICAgIH0pO1xuICAgIGNvbnN0IHVuY29tbW9uRmllbGRzQ29uZmlnTWV0YSA9IGdlbmVyYXRlVmlld01ldGFEYXRhKHVuY29tbW9uRmllbGRzUmF3TWV0YSwgY2xhc3NJRCwgdHJ1ZSk7XG5cbiAgICBwcmVzZXRDb25maWdGaWVsZHMuc3BsaWNlKHByaW1hcnlGaWVsZHNWaWV3SW5kZXgsIDEsIC4uLnVuY29tbW9uRmllbGRzQ29uZmlnTWV0YSk7XG4gIH1cbiAgcmV0dXJuIHByZXNldENvbmZpZ0ZpZWxkcztcbn1cblxuLyoqXG4gKiBbZ2V0VGFibGVDb25maWdGcm9tUHJlc2V0TWV0YV1cbiAqIERlc2NyaXB0aW9uIC0gR2V0IHRoZSB0YWJsZSBjb25maWcgZnJvbSB0aGUgcHJlc2V0cyBtZXRhLlxuICogQGlnbm9yZVxuICogQHBhcmFtICAge29iamVjdH0gICAgcHJlc2V0TWV0YSAgICAgICAgICBQcmVzZXRzIG1ldGFcbiAqIEBwYXJhbSAgIHtib29sZWFufSAgIGlzTWV0YVdpdGhQcmVzZXRzICAgdHJ1ZSBpZiBtZXRhIGhhcyBwcmVzZXRzIGVsc2UgZmFsc2VcbiAqIEBwYXJhbSAgIHtGdW5jdGlvbn0gIGdldFBDb25uZWN0ICAgICAgICAgQ2FsbGJhY2sgdG8gZ2V0IHRoZSBQQ29ubmVjdCBvYmplY3RcbiAqIEBwYXJhbSAgIHtzdHJpbmd9ICAgIGNsYXNzSUQgICAgICAgICAgICAgQ2xhc3MgSUQgZnJvbSB0aGUgcmVzcG9uc2VcbiAqIEBwYXJhbSAgIHtBcnJheX0gICAgIHByaW1hcnlGaWVsZHMgICAgICAgTGlzdCBvZiBQcmltYXJ5IEZpZWxkc1xuICogQHBhcmFtICAge0FycmF5fSAgICAgbWV0YUZpZWxkcyAgICAgICAgICBMaXN0IG9mIGFsbCBtZXRhZmllbGRzXG4gKiBAcmV0dXJucyB7b2JqZWN0fSAgICAgICAgICAgICAgICAgICAgICAgIFRhYmxlIGNvbmZpZyBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlQ29uZmlnRnJvbVByZXNldE1ldGEocHJlc2V0TWV0YSwgaXNNZXRhV2l0aFByZXNldHMsIHBDb25uJCwgY2xhc3NJRCwgcHJpbWFyeUZpZWxkcywgbWV0YUZpZWxkcykge1xuICBsZXQgcHJlc2V0SWQ7XG4gIGxldCBwcmVzZXROYW1lO1xuICBsZXQgY2FyZEhlYWRlcjtcbiAgbGV0IHNlY29uZGFyeVRleHQ7XG4gIGxldCB0aW1lbGluZURhdGU7XG4gIGxldCB0aW1lbGluZVRpdGxlO1xuICBsZXQgdGltZWxpbmVTdGF0dXM7XG4gIGxldCB0aW1lbGluZUljb247XG4gIGxldCB7IGZpbHRlckV4cHJlc3Npb24gfSA9IHBDb25uJC5nZXRSYXdNZXRhZGF0YSgpLmNvbmZpZztcbiAgbGV0IGZpZWxkc01ldGE7XG4gIGxldCBjb25maWdGaWVsZHM7XG4gIGlmIChpc01ldGFXaXRoUHJlc2V0cykge1xuICAgIHByZXNldElkID0gcHJlc2V0TWV0YS5pZDtcbiAgICBwcmVzZXROYW1lID0gcHJlc2V0TWV0YS5sYWJlbDtcbiAgICBjYXJkSGVhZGVyID0gcHJlc2V0TWV0YS5jYXJkSGVhZGVyICYmIGdldFByZXNldE1ldGFBdHRyaWJ1dGUocHJlc2V0TWV0YS5jYXJkSGVhZGVyKTtcbiAgICBzZWNvbmRhcnlUZXh0ID0gcHJlc2V0TWV0YS5zZWNvbmRhcnlUZXh0ICYmIGdldFByZXNldE1ldGFBdHRyaWJ1dGUocHJlc2V0TWV0YS5zZWNvbmRhcnlUZXh0KTtcbiAgICB0aW1lbGluZURhdGUgPSBwcmVzZXRNZXRhLnRpbWVsaW5lRGF0ZSAmJiBnZXRQcmVzZXRNZXRhQXR0cmlidXRlKHByZXNldE1ldGEudGltZWxpbmVEYXRlKTtcbiAgICB0aW1lbGluZVRpdGxlID0gcHJlc2V0TWV0YS50aW1lbGluZVRpdGxlICYmIGdldFByZXNldE1ldGFBdHRyaWJ1dGUocHJlc2V0TWV0YS50aW1lbGluZVRpdGxlKTtcbiAgICB0aW1lbGluZVN0YXR1cyA9IHByZXNldE1ldGEudGltZWxpbmVTdGF0dXMgJiYgZ2V0UHJlc2V0TWV0YUF0dHJpYnV0ZShwcmVzZXRNZXRhLnRpbWVsaW5lU3RhdHVzKTtcbiAgICB0aW1lbGluZUljb24gPSBwcmVzZXRNZXRhLnRpbWVsaW5lSWNvbiAmJiBnZXRQcmVzZXRNZXRhQXR0cmlidXRlKHByZXNldE1ldGEudGltZWxpbmVJY29uKTtcbiAgICBmaWx0ZXJFeHByZXNzaW9uID0gcHJlc2V0TWV0YS5jb25maWcuZmlsdGVyRXhwcmVzc2lvbjtcbiAgICBbZmllbGRzTWV0YV0gPSBwcmVzZXRNZXRhLmNoaWxkcmVuO1xuICAgIGlmIChcbiAgICAgIHByZXNldE1ldGEudGltZWxpbmVUaXRsZSAmJlxuICAgICAgIWZpZWxkc01ldGEuY2hpbGRyZW4uZmluZChmaWVsZE1ldGEgPT4ge1xuICAgICAgICByZXR1cm4gZmllbGRNZXRhPy5jb25maWc/LnZhbHVlID09PSBwcmVzZXRNZXRhLnRpbWVsaW5lVGl0bGU/LmNvbmZpZz8udmFsdWU7XG4gICAgICB9KVxuICAgICkge1xuICAgICAgY29uc3QgeyB0eXBlLCBjb25maWcgfSA9IHByZXNldE1ldGEudGltZWxpbmVUaXRsZTtcbiAgICAgIGZpZWxkc01ldGEuY2hpbGRyZW4ucHVzaCh7IHR5cGUsIGNvbmZpZzogeyAuLi5jb25maWcsIHNob3c6IGZhbHNlIH0gfSk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHByZXNldE1ldGEudGltZWxpbmVEYXRlICYmXG4gICAgICAhZmllbGRzTWV0YS5jaGlsZHJlbi5maW5kKGZpZWxkTWV0YSA9PiB7XG4gICAgICAgIHJldHVybiBmaWVsZE1ldGE/LmNvbmZpZz8udmFsdWUgPT09IHByZXNldE1ldGEudGltZWxpbmVEYXRlPy5jb25maWc/LnZhbHVlO1xuICAgICAgfSlcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgdHlwZSwgY29uZmlnIH0gPSBwcmVzZXRNZXRhLnRpbWVsaW5lRGF0ZTtcbiAgICAgIGZpZWxkc01ldGEuY2hpbGRyZW4ucHVzaCh7IHR5cGUsIGNvbmZpZzogeyAuLi5jb25maWcsIHNob3c6IGZhbHNlIH0gfSk7XG4gICAgfVxuICAgIGNvbmZpZ0ZpZWxkcyA9IGdldENvbmZpZ0ZpZWxkcyhmaWVsZHNNZXRhLmNoaWxkcmVuLCBwcmltYXJ5RmllbGRzLCBtZXRhRmllbGRzLCBjbGFzc0lEKTtcbiAgfSBlbHNlIHtcbiAgICBmaWVsZHNNZXRhID0gcHJlc2V0TWV0YS5wcm9wcztcbiAgICBjb25maWdGaWVsZHMgPSBnZXRDb25maWdGaWVsZHMoXG4gICAgICBmaWVsZHNNZXRhXG4gICAgICAgIC5nZXRQQ29ubmVjdCgpXG4gICAgICAgIC5nZXRDaGlsZHJlbigpXG4gICAgICAgID8ubWFwKGNoaWxkID0+IHtcbiAgICAgICAgICByZXR1cm4gY2hpbGQuZ2V0UENvbm5lY3QoKS5nZXRSYXdNZXRhZGF0YSgpO1xuICAgICAgICB9KSxcbiAgICAgIHByaW1hcnlGaWVsZHMsXG4gICAgICBtZXRhRmllbGRzLFxuICAgICAgY2xhc3NJRFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwcmVzZXRJZCxcbiAgICBwcmVzZXROYW1lLFxuICAgIGNhcmRIZWFkZXIsXG4gICAgc2Vjb25kYXJ5VGV4dCxcbiAgICB0aW1lbGluZURhdGUsXG4gICAgdGltZWxpbmVUaXRsZSxcbiAgICB0aW1lbGluZVN0YXR1cyxcbiAgICB0aW1lbGluZUljb24sXG4gICAgZmlsdGVyRXhwcmVzc2lvbixcbiAgICBmaWVsZHNNZXRhLFxuICAgIGNvbmZpZ0ZpZWxkc1xuICB9O1xufVxuXG4vKipcbiAqIFtnZXRSZXBvcnRDb2x1bW5zXVxuICogRGVzY3JpcHRpb24gLSBSZXR1cm5zIGEgc2V0IG9mIGNvbHVtbnMgZnJvbSB0aGUgcmVwb3J0IHJlc3BvbnNlLlxuICogQGlnbm9yZVxuICogQHBhcmFtICAge29iamVjdH0gcmVzcG9uc2UgLVxuICogQHJldHVybnMge1NldH0gU2V0IG9mIGNvbHVtbnMgZnJvbSB0aGUgcmVwb3J0IHJlc3BvbnNlXG4gKi9cbmZ1bmN0aW9uIGdldFJlcG9ydENvbHVtbnMocmVzcG9uc2UpIHtcbiAgY29uc3Qge1xuICAgIGRhdGE6IHsgZGF0YTogcmVwb3J0Q29sdW1ucyB9XG4gIH0gPSByZXNwb25zZTtcbiAgY29uc3QgcmVwb3J0Q29sdW1uc1NldCA9IG5ldyBTZXQoKTtcbiAgcmVwb3J0Q29sdW1ucz8uZm9yRWFjaChpdGVtID0+IHtcbiAgICBsZXQgdmFsID0gaXRlbS5weUZpZWxkTmFtZTtcbiAgICAvLyBSZW1vdmUgJy4nIGZyb20gaW5kZXggMCBvbmx5LCBpZiAnLicgaXMgcHJlc2VudFxuICAgIGlmICh2YWxbMF0gPT09ICcuJykge1xuICAgICAgdmFsID0gdmFsLnN1YnN0cmluZygxKTtcbiAgICB9XG4gICAgcmVwb3J0Q29sdW1uc1NldC5hZGQodmFsKTtcbiAgfSk7XG4gIHJldHVybiByZXBvcnRDb2x1bW5zU2V0O1xufVxuXG4vKipcbiAqIFtnZXRDb25maWdGaWVsZFZhbHVlXVxuICogRGVzY3JpdHBpb24gLSBSZXR1cm5zIGEgdmFsaWQgdmFsdWUgZm9yIGEgY29uZmlndXJhdGlvbiBmaWVsZC4gUmVtb3ZlIGFueSBhbm5vdGF0aW9ucyBhbmQgYWxzbyBcIi5cIlxuICogQGlnbm9yZVxuICogQHBhcmFtICAge29iamVjdH0gY29uZmlnXG4gKiAgICAgICAgICAgICAgICAgICBjb25maWcudmFsdWUgLSBSYXcgdmFsdWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHZhbHVlIC0gVmFsdWUgd2l0aCBvdXQgYW55IGFubm90YXRpb25zIG9yIFwiLlwiXG4gKi9cbmZ1bmN0aW9uIGdldENvbmZpZ0ZpZWxkVmFsdWUoY29uZmlnKSB7XG4gIGxldCB7IHZhbHVlIH0gPSBjb25maWc7XG4gIGlmICh2YWx1ZS5zdGFydHNXaXRoKCdAJykpIHtcbiAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZyh2YWx1ZS5pbmRleE9mKCcgJykgKyAxKTtcbiAgICBpZiAodmFsdWVbMF0gPT09ICcuJykgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoMSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFtwcmVwYXJlQ29uZmlnRmllbGRzXVxuICogRGVzY3JpcHRpb24gLSBQcmVwYXJlcyBhIHNldCBvZiBjb25maWd1cmF0aW9uIGZpZWxkcyBhbmQgcHVzaGVzIGVhY2ggY29uZmlnIHR5cGUgdG8gYSBzZXQgdXNpbmcgdGhlIGNhbGxiYWNrIHBhcmFtZXRlci5cbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSAgIHtvYmplY3R9ICAgIGNvbmZpZ0ZpZWxkcyAgICAgICAgICBMaXN0IG9mIEF1dGhvcmVkIGZpZWxkc1xuICogQHBhcmFtICAge0Z1bmN0aW9ufSAgcHVzaFRvQ29tcG9uZW50c0xpc3QgQ2FsbGJhY2sgdG8gcHVzaCB0aGUgZmllbGQgdHlwZSB0byBhIHNldC5cbiAqIEByZXR1cm5zIHtTZXR9ICAgICAgIGNvbmZpZ0ZpZWxkU2V0XG4gKi9cbmZ1bmN0aW9uIHByZXBhcmVDb25maWdGaWVsZHMoY29uZmlnRmllbGRzLCBwdXNoVG9Db21wb25lbnRzTGlzdCkge1xuICBjb25zdCBjb25maWdGaWVsZFNldCA9IG5ldyBTZXQoKTtcbiAgY29uZmlnRmllbGRzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgcHVzaFRvQ29tcG9uZW50c0xpc3QoaXRlbS50eXBlKTtcbiAgICBjb25zdCB2YWwgPSBnZXRDb25maWdGaWVsZFZhbHVlKGl0ZW0uY29uZmlnKTtcbiAgICBjb25maWdGaWVsZFNldC5hZGQodmFsKTtcbiAgfSk7XG4gIHJldHVybiBjb25maWdGaWVsZFNldDtcbn1cblxuLyoqXG4gKiBbZmluZEF1dGhvcmVkRmllbGRdXG4gKiBEZXNjcmlwdGlvbiAtIEZpbmRzIGFuIGF1dGhvcmVkIGZpZWxkIGZyb20geWhlIGxpc3Qgb2YgY29uZmlnIGZpZWxkcy5cbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSAgIHtBcnJheX0gICBjb25maWdGaWVsZHMgTGlzdCBvZiBBdXRob3JlZCBmaWVsZHNcbiAqIEBwYXJhbSAgIHtzdHJpbmd9ICBmaWVsZElEICAgICAgRmlsdGVyXG4gKiBAcmV0dXJucyB7b2JqZWN0fSAgICAgICAgICAgICAgY29uZmlnIHdpdGggaXRzIGZpZWxkIHZhbHVlIGVxdWFsIHRvIGZpZWxkSUQsIHdoaWNoIG1lYW5zIGFuIGF1dGhvcmVkIGZpZWxkXG4gKi9cbmZ1bmN0aW9uIGZpbmRBdXRob3JlZEZpZWxkKGNvbmZpZ0ZpZWxkcywgZmllbGRJRCkge1xuICByZXR1cm4gY29uZmlnRmllbGRzLmZpbmQoY29uZmlnRmllbGQgPT4ge1xuICAgIGNvbnN0IHZhbCA9IGdldENvbmZpZ0ZpZWxkVmFsdWUoY29uZmlnRmllbGQuY29uZmlnKTtcbiAgICByZXR1cm4gdmFsID09PSBmaWVsZElEO1xuICB9KTtcbn1cblxuLyoqXG4gKiBbZmluZEFuZFVwZGF0ZUF1dGhvcmVkRmllbGRDb25maWddXG4gKiBEZXNjcmlwdGlvbiAtIEZpbmQgdGhlIGF1dGhvcmVkIGZpZWxkLCBhbmQgdXBkYXRlIGl0cyBjb25maWcuXG4gKiBAaWdub3JlXG4gKiBAcGFyYW0gICB7QXJyYXl9ICAgY29uZmlnRmllbGRzIExpc3Qgb2YgQXV0aG9yZWQgZmllbGRzXG4gKiBAcGFyYW0gICB7b2JqZWN0fSAgaXRlbSAgICAgICAgRmllbGQgaXRlbSB0byBjb3B5IGRpc3BsYXlBcyBhbmQgY2F0ZWdvcnkgaW5mb3JtYXRpb25cbiAqIEBwYXJhbSAgIHtzdHJpbmd9ICBjbGFzc0lkICAgICBjbGFzc0lEIGZyb20gdGhlIHJlc3BvbnNlXG4gKi9cbmZ1bmN0aW9uIGZpbmRBbmRVcGRhdGVBdXRob3JlZEZpZWxkQ29uZmlnKGNvbmZpZ0ZpZWxkcywgaXRlbSwgY2xhc3NJZCkge1xuICBjb25zdCBhdXRob3JlZEZpZWxkID0gZmluZEF1dGhvcmVkRmllbGQoY29uZmlnRmllbGRzLCBpdGVtLmZpZWxkSUQpO1xuICBpZiAoYXV0aG9yZWRGaWVsZD8uY29uZmlnKSB7XG4gICAgaWYgKGl0ZW0uZGlzcGxheUFzKSB7XG4gICAgICBhdXRob3JlZEZpZWxkLmNvbmZpZy5kaXNwbGF5QXMgPSBpdGVtLmRpc3BsYXlBcztcbiAgICB9XG4gICAgYXV0aG9yZWRGaWVsZC5jb25maWcuY2xhc3NJRCA9IGl0ZW0uY2xhc3NJRCA/PyBjbGFzc0lkO1xuXG4gICAgaWYgKGF1dGhvcmVkRmllbGQudHlwZSA9PT0gVVNFUl9SRUZFUkVOQ0UpIHtcbiAgICAgIGF1dGhvcmVkRmllbGQuY29uZmlnLmFzc29jaWF0aW9uSUQgPSBpdGVtLmFzc29jaWF0aW9uSUQgfHwgaXRlbS5maWVsZElEO1xuICAgIH1cbiAgICBhdXRob3JlZEZpZWxkLmNvbmZpZy5jYXRlZ29yeSA9IGl0ZW0uY2F0ZWdvcnk7XG4gICAgLy8gRmllbGRUeXBlIGlkZW50aWZpZXMgd2hldGhlciB0aGUgZmllbGQgaXMgY29uZmlndXJlZCBhcyBwaWNrTGlzdFxuICAgIGF1dGhvcmVkRmllbGQuY29uZmlnLmZpZWxkVHlwZSA9IGl0ZW0uZmllbGRUeXBlO1xuICAgIC8vIHR5cGUgZGVmaW5lZCBvbiB0aGUgcHJvcGVydHkgcnVsZSxcbiAgICAvLyB1c2VkIGZvciB0aGUgcGlja2xpc3QgZmllbGQgdG8gYXNzaWduIHRoZSBhcHByb3ByaWF0ZSB0eXBlXG4gICAgYXV0aG9yZWRGaWVsZC5jb25maWcucHJvcGVydHlUeXBlID0gaXRlbS5kYXRhVHlwZSB8fCBpdGVtLnR5cGU7XG4gIH1cbn1cblxuLyoqXG4gKiBbaXNBbkV4dHJhRmllbGRdXG4gKiBEZXNjcmlwdGlvbiAtIFJldHVybnMgdHJ1ZSBpZiB0aGUgZmllbGQgaXMgYW4gZXh0cmEgZmllbGQuIEV4dHJhIGZpZWxkIGlzIHRoZSBvbmUgd2hpY2ggaXMgbm90IGF1dGhvcmVkIGJ1dCBwYXJ0IG9mIHRoZSByZXBvcnQuXG4gKiBAaWdub3JlXG4gKiBAcGFyYW0gICB7QXJyYXl9ICAgY29uZmlnRmllbGRzICAgICAgTGlzdCBvZiBBdXRob3JlZCBmaWVsZHNcbiAqIEBwYXJhbSAgIHtTZXR9ICAgICBjb25maWdGaWVsZFNldCAgICBTZXQgaWYgQXV0aG9yZWQgZmlsZWQgdmFsdWVzXG4gKiBAcGFyYW0gICB7U2V0fSAgICAgcmVwb3J0Q29sdW1uc1NldCBTZXQgb2YgY29sdW1ucyBmcm9tIHRoZSByZXBvcnRcbiAqIEBwYXJhbSAgIHtvYmplY3R9ICBpdGVtICAgICAgICAgICAgIENvbmZpZyBmaWVsZCBpdGVtXG4gKiBAcGFyYW0gICB7c3RyaW5nfSAgY2xhc3NJZCAgICAgICAgICBDbGFzcyBJRCBmcm9tIHRoZSByZXNwb25zZVxuICogQHBhcmFtICAge2Jvb2xlYW59IHNob3dEeW5hbWljRmllbGRzIEZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIGZpZWxkcyBhcmUgZmV0Y2hlZCBkeW5hbWljYWxseSBhdCBydW50aW1lXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICB0cnVlIElmIHRoZSBmaWVsZCBpcyBhbiBleHRyYSBmaWVsZCBlbHNlIGZhbHNlLlxuICovXG5mdW5jdGlvbiBpc0FuRXh0cmFGaWVsZChjb25maWdGaWVsZHMsIGNvbmZpZ0ZpZWxkU2V0LCByZXBvcnRDb2x1bW5zU2V0LCBpdGVtLCBjbGFzc0lkLCBzaG93RHluYW1pY0ZpZWxkcykge1xuICAvLyBJcyB0aGUgZmllbGQgYWxyZWFkeSBwcmVzZW50IGluIGF1dGhvcmluZyBtZXRhZGF0YT9cbiAgLy8gTXV0YXRlcyBjb25maWcgZmllbGRzIHRvIGNvcHkgZGlzcGxheUFzIGFuZCBjYXRlZ29yeSBpbmZvcm1hdGlvblxuICBpZiAoY29uZmlnRmllbGRTZXQuaGFzKGl0ZW0uZmllbGRJRCkpIHtcbiAgICBmaW5kQW5kVXBkYXRlQXV0aG9yZWRGaWVsZENvbmZpZyhjb25maWdGaWVsZHMsIGl0ZW0sIGNsYXNzSWQpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIElmIGZpZWxkIGlzIG5vdCBhdXRob3JlZCBhbmQgbm90IHBhcnQgb2YgcmVwb3J0IGNvbHVtbnMgdGhlbiBkaXNjYXJkIGl0XG4gIHJldHVybiBzaG93RHluYW1pY0ZpZWxkcyB8fCAhIXJlcG9ydENvbHVtbnNTZXQuaGFzKGl0ZW0uZmllbGRJRCk7XG59XG5cbi8qKlxuICogW3ByZXBhcmVFeHRyYUZpZWxkc11cbiAqIERlc2NyaXB0aW9uIC0gUmV0dXJucyBhIGxpc3Qgb2YgZXh0cmEgZmllbGRzIHdpdGggdGhlaXIgbWV0YSB1cGRhdGVkLlxuICogQGlnbm9yZVxuICogQHBhcmFtICAge0FycmF5fSAgIG1ldGFGaWVsZHMgICAgICAgTGlzdCBvZiBmaWVsZHNcbiAqIEBwYXJhbSAgIHtBcnJheX0gICBjb25maWdGaWVsZHMgICAgICBMaXN0IG9mIEF1dGhvcmVkIGZpZWxkc1xuICogQHBhcmFtICAge1NldH0gICAgIGNvbmZpZ0ZpZWxkU2V0ICAgIFNldCBpZiBBdXRob3JlZCBmaWxlZCB2YWx1ZXNcbiAqIEBwYXJhbSAgIHtTZXR9ICAgICByZXBvcnRDb2x1bW5zU2V0IFNldCBvZiBjb2x1bW5zIGZyb20gdGhlIHJlcG9ydFxuICogQHBhcmFtICAge3N0cmluZ30gIGNsYXNzSUQgICAgICAgICAgQ2xhc3MgSUQgZnJvbSB0aGUgcmVzcG9uc2VcbiAqIEBwYXJhbSAgIHtib29sZWFufSBzaG93RHluYW1pY0ZpZWxkcyBGbGFnIGluZGljYXRpbmcgd2hldGhlciBmaWVsZHMgYXJlIGZldGNoZWQgZHluYW1pY2FsbHkgYXQgcnVudGltZVxuICogQHJldHVybnMge0FycmF5fSAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBleHRyYSBmaWVsZHMgd2l0aCB0aGVpciBtZXRhIHVwZGF0ZWQuXG4gKi9cbmZ1bmN0aW9uIHByZXBhcmVFeHRyYUZpZWxkcyhtZXRhRmllbGRzLCBjb25maWdGaWVsZHMsIGNvbmZpZ0ZpZWxkU2V0LCByZXBvcnRDb2x1bW5zU2V0LCBjbGFzc0lELCBzaG93RHluYW1pY0ZpZWxkcykge1xuICAvLyBGaWx0ZXIgYWxsIHRoZSBleHRyYSBmaWVsZHNcbiAgY29uc3QgZXh0cmFGaWxlZHMgPSBtZXRhRmllbGRzLmZpbHRlcihpdGVtID0+IHtcbiAgICByZXR1cm4gaXNBbkV4dHJhRmllbGQoY29uZmlnRmllbGRzLCBjb25maWdGaWVsZFNldCwgcmVwb3J0Q29sdW1uc1NldCwgaXRlbSwgY2xhc3NJRCwgc2hvd0R5bmFtaWNGaWVsZHMpO1xuICB9KTtcbiAgcmV0dXJuIGdlbmVyYXRlVmlld01ldGFEYXRhKGV4dHJhRmlsZWRzLCBjbGFzc0lELCBmYWxzZSk7XG4gIC8vIFVwZGF0ZSB0aGUgbWV0YSBvYmplY3Qgb2YgZWFjaCBvZiB0aGUgZXh0cmEgZmllbGRzLlxufVxuXG5jb25zdCBBc3NpZ25EYXNoT2JqZWN0cyA9IFsnQXNzaWduLVdvcmtsaXN0JywgJ0Fzc2lnbi1Xb3JrQmFza2V0J107XG5cbmZ1bmN0aW9uIHBvcHVsYXRlUmVuZGVyaW5nT3B0aW9ucyhuYW1lLCBjb25maWcsIGZpZWxkKSB7XG4gIGNvbnN0IHNob3VsZERpc3BsYXlBc1NlbWFudGljTGluayA9ICdkaXNwbGF5QXNMaW5rJyBpbiBmaWVsZC5jb25maWcgJiYgZmllbGQuY29uZmlnLmRpc3BsYXlBc0xpbms7XG4gIGlmIChzaG91bGREaXNwbGF5QXNTZW1hbnRpY0xpbmspIHtcbiAgICBjb25maWcuY3VzdG9tT2JqZWN0LmlzQXNzaWdubWVudExpbmsgPSBBc3NpZ25EYXNoT2JqZWN0cy5pbmNsdWRlcyhmaWVsZC5jb25maWcuY2xhc3NJRCk7XG4gICAgaWYgKGZpZWxkLmNvbmZpZy52YWx1ZS5zdGFydHNXaXRoKCdAQ0EnKSkge1xuICAgICAgY29uZmlnLmN1c3RvbU9iamVjdC5pc0Fzc29jaWF0aW9uID0gdHJ1ZTtcbiAgICB9XG4gICAgY29uZmlnLmNlbGxSZW5kZXJlciA9IGZvcm1hdENvbnN0YW50cy5Xb3JrTGluaztcbiAgfSBlbHNlIGlmIChuYW1lID09PSAncHlTdGF0dXNXb3JrJyB8fCBuYW1lID09PSAncHlBc3NpZ25tZW50U3RhdHVzJykge1xuICAgIGNvbmZpZy5jZWxsUmVuZGVyZXIgPSBmb3JtYXRDb25zdGFudHMuV29ya1N0YXR1cztcbiAgfSBlbHNlIGlmIChuYW1lID09PSAncHhVcmdlbmN5V29yaycpIHtcbiAgICBjb25maWcuY2VsbFJlbmRlcmVyID0gZm9ybWF0Q29uc3RhbnRzLkludGVnZXI7XG4gIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXplQ29sdW1ucyhmaWVsZHM6IGFueVtdID0gW10sIGdldE1hcHBlZFByb3BlcnR5OiBhbnkgPSBudWxsKSB7XG4gIHJldHVybiBmaWVsZHMubWFwKChmaWVsZCwgb3JpZ2luYWxDb2xJbmRleCkgPT4ge1xuICAgIGxldCBuYW1lID0gZmllbGQuY29uZmlnLnZhbHVlO1xuXG4gICAgaWYgKG5hbWUuc3RhcnRzV2l0aCgnQCcpKSB7XG4gICAgICBuYW1lID0gbmFtZS5zdWJzdHJpbmcobmFtZS5pbmRleE9mKCcgJykgKyAxKTtcbiAgICAgIGlmIChuYW1lWzBdID09PSAnLicpIG5hbWUgPSBuYW1lLnN1YnN0cmluZygxKTtcbiAgICB9XG4gICAgbmFtZSA9IGdldE1hcHBlZFByb3BlcnR5Py4obmFtZSkgPz8gbmFtZTtcblxuICAgIGxldCBsYWJlbCA9IGZpZWxkLmNvbmZpZy5sYWJlbCB8fCBmaWVsZC5jb25maWcuY2FwdGlvbjtcbiAgICBjb25zdCB7IHNob3cgPSB0cnVlLCBkaXNwbGF5QXMgfSA9IGZpZWxkLmNvbmZpZztcbiAgICBpZiAobGFiZWwuc3RhcnRzV2l0aCgnQCcpKSB7XG4gICAgICBsYWJlbCA9IGxhYmVsLnN1YnN0cmluZygzKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICBuYW1lLFxuICAgICAgbGFiZWwsXG4gICAgICBzaG93LFxuICAgICAgY2xhc3NJRDogZmllbGQuY29uZmlnLmNsYXNzSUQsXG4gICAgICBpZDogZmllbGQuaWQgfHwgbmFtZSB8fCBvcmlnaW5hbENvbEluZGV4LFxuICAgICAgZGlzcGxheUFzLFxuICAgICAgYXNzb2NpYXRpb25JRDogZmllbGQuY29uZmlnLmFzc29jaWF0aW9uSUQsXG4gICAgICAuLi4oZmllbGQuY29uZmlnLmNsYXNzSUQgJiYgeyBjYXRlZ29yeTogZmllbGQuY29uZmlnLmNhdGVnb3J5IH0pLFxuICAgICAgY3VzdG9tT2JqZWN0OiB7fSxcbiAgICAgIGZpZWxkVHlwZTogZmllbGQuY29uZmlnLmZpZWxkVHlwZSxcbiAgICAgIG1ldGE6IHtcbiAgICAgICAgLi4uZmllbGRcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcG9wdWxhdGVSZW5kZXJpbmdPcHRpb25zKG5hbWUsIGNvbmZpZywgZmllbGQpO1xuXG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRJdGVtS2V5ID0gZmllbGRzID0+IHtcbiAgbGV0IGl0ZW1LZXk7XG4gIGlmIChmaWVsZHMuZmluZEluZGV4KGZpZWxkID0+IGZpZWxkLmlkID09PSAncHlHVUlEJykgPiAtMSkge1xuICAgIGl0ZW1LZXkgPSAncHlHVUlEJztcbiAgfSBlbHNlIHtcbiAgICBpdGVtS2V5ID0gJ3B6SW5zS2V5JztcbiAgfVxuICByZXR1cm4gaXRlbUtleTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlUGF0Y2hRdWVyeUZpZWxkcyhmaWVsZHMsIGlzRGF0YU9iamVjdCA9IGZhbHNlLCBjbGFzc0lEID0gJycpIHtcbiAgY29uc3QgcXVlcnlGaWVsZHM6IGFueVtdID0gW107XG4gIGZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICBjb25zdCBwYXRjaEZpZWxkczogYW55W10gPSBbXTtcbiAgICBpZiAoZmllbGQuY2VsbFJlbmRlcmVyID09PSAnV29ya0xpbmsnKSB7XG4gICAgICBpZiAoZmllbGQuY3VzdG9tT2JqZWN0ICYmIGZpZWxkLmN1c3RvbU9iamVjdC5pc0Fzc2lnbm1lbnRMaW5rKSB7XG4gICAgICAgIGNvbnN0IGFzc29jaWF0aW9uTmFtZSA9IGZpZWxkLm5hbWUuaW5jbHVkZXMoJzonKSA/IGAke2ZpZWxkLm5hbWUuc3BsaXQoJzonKVswXX06YCA6ICcnO1xuICAgICAgICBwYXRjaEZpZWxkcy5wdXNoKGAke2Fzc29jaWF0aW9uTmFtZX1wekluc0tleWApO1xuICAgICAgICBwYXRjaEZpZWxkcy5wdXNoKGAke2Fzc29jaWF0aW9uTmFtZX1weFJlZk9iamVjdENsYXNzYCk7XG4gICAgICB9IGVsc2UgaWYgKGZpZWxkLmN1c3RvbU9iamVjdCAmJiBmaWVsZC5jdXN0b21PYmplY3QuaXNBc3NvY2lhdGlvbikge1xuICAgICAgICBjb25zdCBhc3NvY2lhdGlvbkNhdGVnb3J5ID0gZmllbGQubmFtZS5zcGxpdCgnOicpWzBdO1xuICAgICAgICBwYXRjaEZpZWxkcy5wdXNoKGAke2Fzc29jaWF0aW9uQ2F0ZWdvcnl9OnB5SURgKTtcbiAgICAgICAgcGF0Y2hGaWVsZHMucHVzaChgJHthc3NvY2lhdGlvbkNhdGVnb3J5fTpwekluc0tleWApO1xuICAgICAgICBwYXRjaEZpZWxkcy5wdXNoKGAke2Fzc29jaWF0aW9uQ2F0ZWdvcnl9OnB4T2JqQ2xhc3NgKTtcbiAgICAgIH0gZWxzZSBpZiAoaXNEYXRhT2JqZWN0KSB7XG4gICAgICAgIGNvbnN0IGRhdGFWaWV3TmFtZSA9IFBDb3JlLmdldERhdGFUeXBlVXRpbHMoKS5nZXRTYXZhYmxlRGF0YVBhZ2UoY2xhc3NJRCk7XG4gICAgICAgIGNvbnN0IGRhdGFQYWdlS2V5cyA9IFBDb3JlLmdldERhdGFUeXBlVXRpbHMoKS5nZXREYXRhUGFnZUtleXMoZGF0YVZpZXdOYW1lKTtcbiAgICAgICAgZGF0YVBhZ2VLZXlzPy5mb3JFYWNoKGl0ZW0gPT4gKGl0ZW0uaXNBbHRlcm5hdGVLZXlTdG9yYWdlID8gcGF0Y2hGaWVsZHMucHVzaChpdGVtLmxpbmtlZEZpZWxkKSA6IHBhdGNoRmllbGRzLnB1c2goaXRlbS5rZXlOYW1lKSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGF0Y2hGaWVsZHMucHVzaCgncHlJRCcpO1xuICAgICAgICBwYXRjaEZpZWxkcy5wdXNoKCdwekluc0tleScpO1xuICAgICAgICBwYXRjaEZpZWxkcy5wdXNoKCdweE9iakNsYXNzJyk7XG4gICAgICB9XG4gICAgfVxuICAgIHBhdGNoRmllbGRzLmZvckVhY2goayA9PiB7XG4gICAgICBpZiAoIXF1ZXJ5RmllbGRzLmZpbmQocSA9PiBxID09PSBrKSkge1xuICAgICAgICBxdWVyeUZpZWxkcy5wdXNoKGspO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gcXVlcnlGaWVsZHM7XG59XG5cbi8qKlxuICogVXBkYXRlIHRoZSByZW5kZXJlciB0eXBlIGZvciB0aGUgcHJvcGVydGllcyBvZiB0eXBlIFBhZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVQYWdlRmllbGRzQ29uZmlnKGNvbmZpZ0ZpZWxkcywgcGFyZW50Q2xhc3NJRCkge1xuICByZXR1cm4gY29uZmlnRmllbGRzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgdHlwZSxcbiAgICAgIGNvbmZpZzogeyB2YWx1ZSB9XG4gICAgfSA9IGl0ZW07XG4gICAgY29uc3QgcHJvcGVydHlOYW1lID0gUENvcmUuZ2V0QW5ub3RhdGlvblV0aWxzKCkuZ2V0UHJvcGVydHlOYW1lKHZhbHVlKTtcbiAgICBpZiAoaXNFbWJlZGRlZEZpZWxkKHZhbHVlKSAmJiAhaXNQYWdlTGlzdEluUGF0aChwcm9wZXJ0eU5hbWUsIHBhcmVudENsYXNzSUQpKSB7XG4gICAgICBpdGVtLmNvbmZpZy5jb21wb25lbnRUeXBlID0gdHlwZTtcbiAgICAgIGl0ZW0udHlwZSA9ICdQYWdlUHJvcGVydHlSZW5kZXJlcic7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IHJlYWRDb250ZXh0UmVzcG9uc2UgPSBhc3luYyAoY29udGV4dCwgcGFyYW1zKSA9PiB7XG4gIGNvbnN0IHsgcENvbm4kLCBhcGlDb250ZXh0LCBjaGlsZHJlbiwgc2hvd0R5bmFtaWNGaWVsZHMsIHJlZmVyZW5jZUxpc3QsIGlzRGF0YU9iamVjdCB9ID0gcGFyYW1zO1xuICAvLyBsZXQgeyBsaXN0Q29udGV4dCB9ID0gcGFyYW1zO1xuICBjb25zdCB7IHByb21pc2VzUmVzcG9uc2VBcnJheSwgYXBpQ29udGV4dDogb3RoZXJDb250ZXh0IH0gPSBjb250ZXh0O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc29uYXJqcy9uby11bnVzZWQtY29sbGVjdGlvblxuICBjb25zdCBsaXN0T2ZDb21wb25lbnRzOiBhbnlbXSA9IFtdO1xuICBjb25zdCB7XG4gICAgZGF0YTogeyBmaWVsZHM6IG1ldGFGaWVsZHMsIGNsYXNzSUQsIGlzUXVlcnlhYmxlIH1cbiAgfSA9IHByb21pc2VzUmVzcG9uc2VBcnJheVswXTtcbiAgbGV0IHtcbiAgICBkYXRhOiB7IHByaW1hcnlGaWVsZHMgfVxuICB9ID0gcHJvbWlzZXNSZXNwb25zZUFycmF5WzBdO1xuICAvLyBXaGVuIGxpc3QgaXMgY29uZmlndXJlZCB3aXRoIEluY2x1ZGUgYWxsIGNsYXNzIGZpZWxkcyBjb25maWd1cmF0aW9uLCBwcm92aWRlIHN1cHBvcnQgZm9yIFByaW1hcnkgZmllbGRzIGNvbHVtblxuICBpZiAoc2hvd0R5bmFtaWNGaWVsZHMpIHtcbiAgICBjb25zdCBzb3VyY2VNZXRhZGF0YSA9IFBDb3JlLmdldE1ldGFkYXRhVXRpbHMoKS5nZXREYXRhUGFnZU1ldGFkYXRhKHJlZmVyZW5jZUxpc3QpO1xuICAgIGlmIChzb3VyY2VNZXRhZGF0YT8ucHJpbWFyeUZpZWxkcykge1xuICAgICAgcHJpbWFyeUZpZWxkcyA9IHNvdXJjZU1ldGFkYXRhLnByaW1hcnlGaWVsZHM7XG4gICAgfVxuICAgIC8vIHVwZGF0aW5nIG1ldGFEYXRhIGZpZWxkSUQgdG8gbm9ybWFsIHByb3BlcnR5IGlmIGl0IGhhcyBmaWVsZElEIHN0YXJ0cyB3aXRoICFQISBvciAhUEwhXG4gICAgdXBkYXRlTWV0YUVtYmVkZGVkRmllbGRJRChtZXRhRmllbGRzKTtcbiAgfVxuICB1cGRhdGVGaWVsZFR5cGUobWV0YUZpZWxkcyk7XG5cbiAgaWYgKGlzRGF0YU9iamVjdCkge1xuICAgIGNvbnN0IGNvbXBvc2l0ZUtleXM6IGFueVtdID0gW107XG4gICAgY29uc3QgZGF0YVZpZXdOYW1lID0gUENvcmUuZ2V0RGF0YVR5cGVVdGlscygpLmdldFNhdmFibGVEYXRhUGFnZShjbGFzc0lEKTtcbiAgICBjb25zdCBkYXRhUGFnZUtleXMgPSBQQ29yZS5nZXREYXRhVHlwZVV0aWxzKCkuZ2V0RGF0YVBhZ2VLZXlzKGRhdGFWaWV3TmFtZSk7XG4gICAgZGF0YVBhZ2VLZXlzPy5mb3JFYWNoKGl0ZW0gPT4gKGl0ZW0uaXNBbHRlcm5hdGVLZXlTdG9yYWdlID8gY29tcG9zaXRlS2V5cy5wdXNoKGl0ZW0ubGlua2VkRmllbGQpIDogY29tcG9zaXRlS2V5cy5wdXNoKGl0ZW0ua2V5TmFtZSkpKTtcbiAgICBpZiAoY29tcG9zaXRlS2V5cy5sZW5ndGggJiYgb3RoZXJDb250ZXh0KSB7XG4gICAgICBvdGhlckNvbnRleHQuc2V0Q29tcG9zaXRlS2V5cyhjb21wb3NpdGVLZXlzKTtcbiAgICB9XG4gICAgaWYgKG90aGVyQ29udGV4dCkge1xuICAgICAgb3RoZXJDb250ZXh0LmZldGNoUm93QWN0aW9uRGV0YWlscyA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcHJlc2V0QXJyYXkgPSBbXTtcbiAgY29uc3QgcmF3TWV0YWRhdGEgPSBwQ29ubiQuZ2V0UmF3TWV0YWRhdGEoKS5jb25maWc7XG4gIGNvbnN0IHJhd1ByZXNldHMgPSByYXdNZXRhZGF0YS5wcmVzZXRzO1xuICBjb25zdCBpc01ldGFXaXRoUHJlc2V0cyA9IHJhd1ByZXNldHMgJiYgcmF3UHJlc2V0cy5sZW5ndGggIT09IDA7XG4gIGNvbnN0IGNoaWxkcmVuSXRlcmF0b3IgPSBpc01ldGFXaXRoUHJlc2V0cyA/IHJhd1ByZXNldHMgOiBjaGlsZHJlbjtcbiAgY29uc3QgcmVzb2x2ZWRQcmVzZXRzID0gcENvbm4kLmdldENvbmZpZ1Byb3BzKCkucHJlc2V0cztcbiAgbGV0IGZpZWxkcztcbiAgbGV0IHRhYmxlQ29uZmlnO1xuICBjaGlsZHJlbkl0ZXJhdG9yPy5mb3JFYWNoKChwcmVzZXRNZXRhLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHsgY29uZmlnRmllbGRzIH0gPSBnZXRUYWJsZUNvbmZpZ0Zyb21QcmVzZXRNZXRhKFxuICAgICAgeyAuLi5wcmVzZXRNZXRhLCBsYWJlbDogcmVzb2x2ZWRQcmVzZXRzW2luZGV4XS5sYWJlbCB9LFxuICAgICAgaXNNZXRhV2l0aFByZXNldHMsXG4gICAgICBwQ29ubiQsXG4gICAgICBjbGFzc0lELFxuICAgICAgcHJpbWFyeUZpZWxkcyxcbiAgICAgIG1ldGFGaWVsZHNcbiAgICApO1xuICAgIGNvbnN0IHB1c2hUb0NvbXBvbmVudHNMaXN0ID0gZmllbGRUeXBlID0+IHtcbiAgICAgIGxpc3RPZkNvbXBvbmVudHMucHVzaChmaWVsZFR5cGUpO1xuICAgIH07XG4gICAgLy8gcmVhZCByZXBvcnQgY29sdW1ucyByZXNwb25zZSAtIGluIGNhc2Ugb2Ygbm9ucXVlcnlhYmxlIGlnbm9yZSB0aGUgcmVzcG9uc2UgYW5kIHJlbHkgb25seSBvbiB0aGUgZmllbGRzIGNvbmZpZ3VyZWQgYXQgYXV0aG9pbmcgdGltZSBpbiBwcmVzZXRzXG4gICAgY29uc3QgcmVwb3J0Q29sdW1uc1NldCA9IGlzUXVlcnlhYmxlID8gZ2V0UmVwb3J0Q29sdW1ucyhwcm9taXNlc1Jlc3BvbnNlQXJyYXlbMV0pIDogbmV3IFNldCgpO1xuXG4gICAgY29uc3QgY29uZmlnRmllbGRTZXQgPSBwcmVwYXJlQ29uZmlnRmllbGRzKGNvbmZpZ0ZpZWxkcywgcHVzaFRvQ29tcG9uZW50c0xpc3QpO1xuXG4gICAgLy8gRklYTUUgI0VtYmVkZGVkUHJvcGVydHlQYXRjaFxuICAgIC8vIFRPRE86IFJlbW92ZSB0aGlzIG1lcmdlIGxvZ2ljIHdoZW4gdGhlIG1ldGFkYXRhIHJlc3BvbnNlIGluY2x1ZGVzIGFsbCBvcHRpbWl6ZWQgZW1iZWRkZWQgcGFnZSBhbmQgcGFnZWxpc3RzXG4gICAgLy8gbWVyZ2luZyBjb25maWd1cmVkIGVtYmVkZGVkIHByb3BlcnRpZXMgd2l0aCBtZXRhZGF0YSBzbyB0aGF0IHdoaWxlIHByZXBhcmluZyBleHRyYSBmaWVsZHMsIGNvbmZpZyBmaWVsZHMgY2FuIGdldCBvdGhlciBwcm9wZXJ0aWVzIGZyb20gbWV0YShlZzogY2F0ZWdvcnksIGRpc3BsYXlBc0xpbmspXG4gICAgLy8gZ2V0IGNvbmZpZ3VyZWQgZW1iZWRkZWQgcHJvcGVydGllcyBtZXRhZGF0YSBhbmQgZ2V0IG5ldyBtZXJnZWRNZXRhRmllbGRzXG4gICAgY29uc3QgY29uZmlnRW1iZWRkZWRGaWVsZHNNZXRhID0gZ2V0Q29uZmlnRW1iZWRkZWRGaWVsZHNNZXRhKGNvbmZpZ0ZpZWxkU2V0LCBjbGFzc0lEKTtcbiAgICBjb25zdCBtZXJnZWRNZXRhRmllbGRzID0gbWVyZ2VDb25maWdFbWJlZGRlZEZpZWxkc01ldGEoY29uZmlnRW1iZWRkZWRGaWVsZHNNZXRhLCBtZXRhRmllbGRzKTtcblxuICAgIGNvbnN0IGV4dHJhRmllbGRzID0gcHJlcGFyZUV4dHJhRmllbGRzKFxuICAgICAgbWVyZ2VkTWV0YUZpZWxkcywgLy8gcGFzc2luZyBuZXcgbWVyZ2VkIG1ldGEgZmllbGRzIHdoaWNoIGhhcyBtZXRhIG9mIGNvbmZpZ3VyZWQgZW1iZWRkZWQgZmllbGRzIG9mIGN1cnJlbnQgcHJlc2V0XG4gICAgICBjb25maWdGaWVsZHMsXG4gICAgICBjb25maWdGaWVsZFNldCxcbiAgICAgIHJlcG9ydENvbHVtbnNTZXQsXG4gICAgICBjbGFzc0lELFxuICAgICAgc2hvd0R5bmFtaWNGaWVsZHNcbiAgICApO1xuXG4gICAgaWYgKGlzUXVlcnlhYmxlKSB7XG4gICAgICB1cGRhdGVQYWdlRmllbGRzQ29uZmlnKGNvbmZpZ0ZpZWxkcywgY2xhc3NJRCk7XG4gICAgICBwcmVwYXJlUHJvcGVydHlNYXBzKFsuLi5jb25maWdGaWVsZHMsIC4uLmV4dHJhRmllbGRzXSwgY2xhc3NJRCwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgY29uc3QgeyBnZXRNYXBwZWRQcm9wZXJ0eSB9ID0gY29udGV4dDtcblxuICAgIGZpZWxkcyA9IGluaXRpYWxpemVDb2x1bW5zKFsuLi5jb25maWdGaWVsZHMsIC4uLmV4dHJhRmllbGRzXSwgZ2V0TWFwcGVkUHJvcGVydHkpO1xuICAgIGNvbnN0IHBhdGNoUXVlcnlGaWVsZHMgPSBwcmVwYXJlUGF0Y2hRdWVyeUZpZWxkcyhmaWVsZHMsIGlzRGF0YU9iamVjdCwgY2xhc3NJRCk7XG4gICAgY29uc3QgaXRlbUtleSA9IGdldEl0ZW1LZXkoZmllbGRzKTtcbiAgICB0YWJsZUNvbmZpZyA9IHsgZmllbGREZWZzOiBmaWVsZHMsIHBhdGNoUXVlcnlGaWVsZHMsIGl0ZW1LZXksIGlzUXVlcnlhYmxlIH07XG4gIH0pO1xuICBjb25zdCBtZXRhID0gdGFibGVDb25maWc7XG4gIHBhcmFtcy5saXN0Q29udGV4dCA9IHsgbWV0YSwgcHJlc2V0czogcHJlc2V0QXJyYXksIGFwaUNvbnRleHQ6IHsgLi4uYXBpQ29udGV4dCB9IH07XG4gIHJldHVybiBwYXJhbXMubGlzdENvbnRleHQ7XG59O1xuIl19
662
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyLXNkay1jb21wb25lbnRzL3NyYy9saWIvX2NvbXBvbmVudHMvdGVtcGxhdGUvbGlzdC12aWV3L3V0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXZELE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQztBQUN2QyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUM7QUFDbkIsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDO0FBRXhCLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRztJQUM3QixVQUFVLEVBQUUsWUFBWTtJQUN4QixPQUFPLEVBQUUsU0FBUztJQUNsQixRQUFRLEVBQUUsVUFBVTtDQUNyQixDQUFDO0FBRUYsTUFBTSxPQUFPO0lBR1g7UUFDRSxJQUFJLENBQUMsZ0NBQWdDLEdBQUcsRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxnQ0FBZ0MsR0FBRyxFQUFFLENBQUM7UUFDM0MsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsZUFBZSxDQUFDLDJCQUEyQixHQUFHLEVBQUUsRUFBRSwyQkFBMkIsR0FBRyxFQUFFO1FBQ2hGLElBQUksQ0FBQyxnQ0FBZ0MsR0FBRztZQUN0QyxHQUFHLElBQUksQ0FBQyxnQ0FBZ0M7WUFDeEMsR0FBRywyQkFBMkI7U0FDL0IsQ0FBQztRQUNGLElB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QXVCLENBQUMsTUFBTSxFQUFFLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNoRixNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkMsV0FBVyxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDOUUsQ0FBQyxDQUFDLENBQUM7SUFDSCxNQUFNLElBQUksR0FBRyxXQUFXLENBQUM7SUFDekIsTUFBTSxDQUFDLFdBQVcsR0FBRyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxFQUFFLEdBQUcsVUFBVSxFQUFFLEVBQUUsQ0FBQztJQUNuRixPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQUM7QUFDNUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0RGVmYXVsdFZpZXdNZXRhIH0gZnJvbSAnLi9EZWZhdWx0Vmlld01ldGEnO1xuXG5jb25zdCBVU0VSX1JFRkVSRU5DRSA9ICdVc2VyUmVmZXJlbmNlJztcbmNvbnN0IFBBR0UgPSAnIVAhJztcbmNvbnN0IFBBR0VMSVNUID0gJyFQTCEnO1xuXG5leHBvcnQgY29uc3QgZm9ybWF0Q29uc3RhbnRzID0ge1xuICBXb3JrU3RhdHVzOiAnV29ya1N0YXR1cycsXG4gIEludGVnZXI6ICdJbnRlZ2VyJyxcbiAgV29ya0xpbms6ICdXb3JrTGluaydcbn07XG5cbmNsYXNzIERhdGFBcGkge1xuICBtYXBwZWRQcm9wZXJ0eVRvT3JpZ2luYWxQcm9wZXJ0eTogYW55O1xuICBvcmlnaW5hbFByb3BlcnR5VG9NYXBwZWRQcm9wZXJ0eTogYW55O1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLm9yaWdpbmFsUHJvcGVydHlUb01hcHBlZFByb3BlcnR5ID0ge307XG4gICAgdGhpcy5tYXBwZWRQcm9wZXJ0eVRvT3JpZ2luYWxQcm9wZXJ0eSA9IHt9O1xuICAgIHRoaXMuc2V0UHJvcGVydHlNYXBzID0gdGhpcy5zZXRQcm9wZXJ0eU1hcHMuYmluZCh0aGlzKTtcbiAgICB0aGlzLmdldE1hcHBlZFByb3BlcnR5ID0gdGhpcy5nZXRNYXBwZWRQcm9wZXJ0eS5iaW5kKHRoaXMpO1xuICAgIHRoaXMuZ2V0T3JpZ2luYWxQcm9wZXJ0eSA9IHRoaXMuZ2V0T3JpZ2luYWxQcm9wZXJ0eS5iaW5kKHRoaXMpO1xuICB9XG5cbiAgc2V0UHJvcGVydHlNYXBzKG9yaWdpbmFsVG9NYXBwZWRQcm9wZXJ0eU9iaiA9IHt9LCBtYXBwZWRUb09yaWdpbmFsUHJvcGVydHlPYmogPSB7fSkge1xuICAgIHRoaXMub3JpZ2luYWxQcm9wZXJ0eVRvTWFwcGVkUHJvcGVydHkgPSB7XG4gICAgICAuLi50aGlzLm9yaWdpbmFsUHJvcGVydHlUb01hcHBlZFByb3BlcnR5LFxuICAgICAgLi4ub3JpZ2luYWxUb01hcHBlZFByb3BlcnR5T2JqXG4gICAgfTtcbiAgICB0aGlzLm1hcHBlZFByb3BlcnR5VG9PcmlnaW5hbFByb3BlcnR5ID0ge1xuICAgICAgLi4udGhpcy5tYXBwZWRQcm9wZXJ0eVRvT3JpZ2luYWxQcm9wZXJ0eSxcbiAgICAgIC4uLm1hcHBlZFRvT3JpZ2luYWxQcm9wZXJ0eU9ialxuICAgIH07XG4gIH1cblxuICBnZXRNYXBwZWRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5vcmlnaW5hbFByb3BlcnR5VG9NYXBwZWRQcm9wZXJ0eVtwcm9wZXJ0eU5hbWVdID8/IHByb3BlcnR5TmFtZTtcbiAgfVxuXG4gIGdldE9yaWdpbmFsUHJvcGVydHkocHJvcGVydHlOYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwcGVkUHJvcGVydHlUb09yaWdpbmFsUHJvcGVydHlbcHJvcGVydHlOYW1lXSA/PyBwcm9wZXJ0eU5hbWU7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldENvbnRleHQoY29tcG9uZW50Q29uZmlnKSB7XG4gIGNvbnN0IHtcbiAgICBwcm9taXNlc0FycmF5ID0gW10gLy8gYXJyYXkgb2YgcHJvbWlzZXMgd2hpY2ggY2FuIGJlIGludm9rZWQgcGFyYWxlbGx5LFxuICB9ID0gY29tcG9uZW50Q29uZmlnO1xuICBjb25zdCBwcm9taXNlc1Jlc3BvbnNlQXJyYXkgPSBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlc0FycmF5KTtcbiAgY29uc3QgZGF0YUFwaSA9IG5ldyBEYXRhQXBpKCk7XG4gIHJldHVybiB7XG4gICAgcHJvbWlzZXNSZXNwb25zZUFycmF5LFxuICAgIHNldFByb3BlcnR5TWFwczogZGF0YUFwaS5zZXRQcm9wZXJ0eU1hcHMsXG4gICAgZ2V0TWFwcGVkUHJvcGVydHk6IGRhdGFBcGkuZ2V0TWFwcGVkUHJvcGVydHksXG4gICAgZ2V0T3JpZ2luYWxQcm9wZXJ0eTogZGF0YUFwaS5nZXRPcmlnaW5hbFByb3BlcnR5XG4gIH07XG59XG5cbi8qKlxuICogW2dldEZpZWxkTmFtZUZyb21FbWJlZGRlZEZpZWxkTmFtZV1cbiAqIERlc2NyaXB0aW9uICAgIC0gICAgICAgICAgICAgICBjb252ZXJ0aW5nIGVtYmVkZGVkRmllbGQgbmFtZSBzdGFydGluZyB3aXRoICFQISBvciAhUEwhIHRvIG5vcm1hbCBmaWVsZFxuICogQGlnbm9yZVxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5TmFtZSAgIEVtYmVkZGVkRmllbGQgbmFtZSBzdGFydGluZyB3aXRoICFQISBvciAhUEwhXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAgICAgICAgICAgICAgcmV0dXJucyBjb252ZXJ0ZWQgc3RyaW5nIHdpdGhvdXQgIVAhIG9yICFQTCEgYW5kIDpcbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5FeGFtcGxlIGZvciBnZXRGaWVsZE5hbWVGcm9tRW1iZWRkZWRGaWVsZE5hbWUgPC9jYXB0aW9uPlxuICogZ2V0RmllbGROYW1lRnJvbUVtYmVkZGVkRmllbGROYW1lKCchUCFPcmdhbmlzYXRpb246TmFtZScpIHJldHVybiAnT3JnYW5pc2F0aW9uLk5hbWUnXG4gKiBnZXRGaWVsZE5hbWVGcm9tRW1iZWRkZWRGaWVsZE5hbWUoJyFQTCFFbXBsb3llZXM6TmFtZScpIHJldHVybiAnRW1wbG95ZWVzLk5hbWUnXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWVsZE5hbWVGcm9tRW1iZWRkZWRGaWVsZE5hbWUocHJvcGVydHlOYW1lKSB7XG4gIGxldCB2YWx1ZSA9IHByb3BlcnR5TmFtZTtcbiAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoUEFHRSkgfHwgdmFsdWUuc3RhcnRzV2l0aChQQUdFTElTVCkpIHtcbiAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZyh2YWx1ZS5sYXN0SW5kZXhPZignIScpICsgMSk7XG4gICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC86L2csICcuJyk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFt1cGRhdGVNZXRhRW1iZWRkZWRGaWVsZElEXVxuICogRGVzY3JpcHRpb24gICAgLSAgICAgICAgICAgSWYgdGhlIGZpZWxkSUQgaW4gbWV0YSBzdGFydHMgd2l0aCAnIVAhJyBvciAnIVBMIScgYW5kIGNvbnRhaW5zICc6JyB0aGVuIHJlcGxhY2UgdGhlbSB3aXRoIC4oZG90KVxuICogQGlnbm9yZVxuICogQHBhcmFtIHtBcnJheX0gbWV0YUZpZWxkcyAgRmllbGRzIG1ldGFkYXRhIEFycmF5LiBDb250YWlucyBtZXRhZGF0YSBvZiBhbGwgdGhlIGZpZWxkcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZU1ldGFFbWJlZGRlZEZpZWxkSUQobWV0YUZpZWxkcykge1xuICByZXR1cm4gbWV0YUZpZWxkcy5mb3JFYWNoKG1ldGFGaWVsZCA9PiB7XG4gICAgaWYgKG1ldGFGaWVsZC5maWVsZElEPy5zdGFydHNXaXRoKFBBR0UpIHx8IG1ldGFGaWVsZC5maWVsZElEPy5zdGFydHNXaXRoKFBBR0VMSVNUKSkge1xuICAgICAgbWV0YUZpZWxkLmZpZWxkSUQgPSBnZXRGaWVsZE5hbWVGcm9tRW1iZWRkZWRGaWVsZE5hbWUobWV0YUZpZWxkLmZpZWxkSUQpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCBpc0VtYmVkZGVkRmllbGQgPSBmaWVsZCA9PiB7XG4gIGlmIChmaWVsZD8uc3RhcnRzV2l0aCgnQCcpKSB7XG4gICAgZmllbGQgPSBmaWVsZC5zdWJzdHJpbmcoZmllbGQuaW5kZXhPZignICcpICsgMSk7XG4gICAgaWYgKGZpZWxkWzBdID09PSAnLicpIGZpZWxkID0gZmllbGQuc3Vic3RyaW5nKDEpO1xuICB9XG4gIHJldHVybiBmaWVsZD8uaW5kZXhPZignLicpID4gMDtcbn07XG5cbi8qKlxuICogW2lzUGFnZUxpc3RQcm9wZXJ0eV1cbiAqIERlc2NyaXB0aW9uICAgIC0gICAgICAgIGNoZWNraW5nIGlmIHByb3BlcnR5TmFtZSBpcyBwYWdlTGlzdCBvciBub3RcbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eU5hbWUgICBQcm9wZXJ0eU5hbWVcbiAqIEByZXR1cm5zIHtib29sZWFufSAgdHJ1ZSBpZiBwcm9wZXJ0eSBpcyBwYWdlTGlzdCBlbHNlIGZhbHNlXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+RXhhbXBsZSBmb3IgaXNQYWdlTGlzdFByb3BlcnR5IDwvY2FwdGlvbj5cbiAqIGlzUGFnZUxpc3RQcm9wZXJ0eSgnIVBMIUVtcGxveWVlcy5OYW1lJykgcmV0dXJuIHRydWVcbiAqIGlzUGFnZUxpc3RQcm9wZXJ0eSgnIVAhRW1wbG95ZWVzLk5hbWUnKSByZXR1cm4gZmFsc2VcbiAqIGlzUGFnZUxpc3RQcm9wZXJ0eSgnTmFtZScpIHJldHVybiBmYWxzZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQYWdlTGlzdFByb3BlcnR5KHByb3BlcnR5TmFtZSkge1xuICByZXR1cm4gcHJvcGVydHlOYW1lLnN0YXJ0c1dpdGgoUEFHRUxJU1QpO1xufVxuXG5leHBvcnQgY29uc3QgaXNQYWdlTGlzdEluUGF0aCA9IChwcm9wZXJ0eU5hbWUsIGN1cnJlbnRDbGFzc0lEKSA9PiB7XG4gIGlmICghcHJvcGVydHlOYW1lLmluY2x1ZGVzKCcuJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgW2ZpcnN0LCAuLi5yZXN0XSA9IHByb3BlcnR5TmFtZS5zcGxpdCgnLicpO1xuICBjb25zdCBtZXRhZGF0YTogYW55ID0gUENvcmUuZ2V0TWV0YWRhdGFVdGlscygpLmdldFByb3BlcnR5TWV0YWRhdGEoZmlyc3QsIGN1cnJlbnRDbGFzc0lEKTtcbiAgaWYgKG1ldGFkYXRhPy50eXBlID09PSAnUGFnZSBMaXN0Jykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBpc1BhZ2VMaXN0SW5QYXRoKHJlc3Quam9pbignLicpLCBtZXRhZGF0YT8ucGFnZUNsYXNzKTtcbn07XG5cbi8qKlxuICogW2dldEVtYmVkZGVkRmllbGROYW1lXVxuICogRGVzY3JpcHRpb24gICAgLSAgICAgICAgICAgICAgIGNvbnZlcnRpbmcgbm9ybWFsIGZpZWxkIG5hbWUgdG8gZW1iZWRkZWQgZmllbGQgc3RhcnRpbmcgd2l0aCAhUCEgb3IgIVBMIVxuICogQGlnbm9yZVxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5TmFtZSAgIEZpZWxkIG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc0lEICAgICAgICBjbGFzc0lEIG9mIGRhdGFwYWdlXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAgICAgICAgICAgICAgcmV0dXJucyBjb252ZXJ0ZWQgc3RyaW5nIHdpdGggIVAhIG9yICFQTCEgYW5kIDpcbiAqXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj5FeGFtcGxlIGZvciBnZXRFbWJlZGRlZEZpZWxkTmFtZSA8L2NhcHRpb24+XG4gKiBGb3IgcGFnZSBwcm9wZXJ0eSwgZ2V0RW1iZWRkZWRGaWVsZE5hbWUoJ09yZ2FuaXNhdGlvbi5OYW1lJykgcmV0dXJuICchUCFPcmdhbmlzYXRpb246TmFtZSdcbiAqIEZvciBwYWdlTGlzdCBwcm9wZXJ0eSwgZ2V0RW1iZWRkZWRGaWVsZE5hbWUoJ0VtcGxveWVlcy5OYW1lJykgcmV0dXJuICchUEwhRW1wbG95ZWVzOk5hbWUnXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEVtYmVkZGVkRmllbGROYW1lKHByb3BlcnR5TmFtZSwgY2xhc3NJRCkge1xuICBsZXQgdmFsdWUgPSBwcm9wZXJ0eU5hbWU7XG4gIGlmIChpc1BhZ2VMaXN0SW5QYXRoKHZhbHVlLCBjbGFzc0lEKSkge1xuICAgIHZhbHVlID0gYCFQTCEke3ZhbHVlLnJlcGxhY2UoL1xcLi9nLCAnOicpfWA7XG4gIH0gZWxzZSB7XG4gICAgdmFsdWUgPSBgIVAhJHt2YWx1ZS5yZXBsYWNlKC9cXC4vZywgJzonKX1gO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBbcHJlcGFyZVByb3BlcnR5TWFwc11cbiAqIERlc2NyaXB0aW9uICAgIC0gICAgICAgIHByZXBhcmluZyBtYXBzIGZvciBwcm9wZXJ0eSBuYW1lcyBhbmQgc2V0IGl0IGluIGRhdGFBcGkgY29udGV4dFxuICogQGlnbm9yZVxuICogQHBhcmFtIHtBcnJheX0gZmllbGRzICAgZmllbGRzIGFycmF5XG4gKiBAcGFyYW0ge3N0cmluZ30gY2xhc3NJRCAgY2xhc3NJRCBvZiBkYXRhcGFnZVxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRleHQgIGRhdGFBcGkgY29udGV4dFxuICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgcGFnZUxpc3RQcm9wZXJ0eSBpcyBwcmVzZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlUHJvcGVydHlNYXBzKGZpZWxkcywgY2xhc3NJRCwgY29udGV4dCkge1xuICBjb25zdCB7IHNldFByb3BlcnR5TWFwcyB9ID0gY29udGV4dDtcbiAgY29uc3QgbWFwcyA9IGZpZWxkcy5yZWR1Y2UoXG4gICAgKGFjYywgZmllbGQpID0+IHtcbiAgICAgIGxldCB7IHZhbHVlIH0gPSBmaWVsZC5jb25maWc7XG4gICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aCgnQCcpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKHZhbHVlLmluZGV4T2YoJyAnKSArIDEpO1xuICAgICAgICBpZiAodmFsdWVbMF0gPT09ICcuJykgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcoMSk7XG4gICAgICB9XG4gICAgICBsZXQgbmFtZSA9IHZhbHVlO1xuICAgICAgLy8gUHJlcGFyaW5nIG5hbWUgZm9yIGVtYmVkZGVkIHByb3BlcnR5XG4gICAgICBpZiAoaXNFbWJlZGRlZEZpZWxkKG5hbWUpKSB7XG4gICAgICAgIG5hbWUgPSBnZXRFbWJlZGRlZEZpZWxkTmFtZShuYW1lLCBjbGFzc0lEKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc1BhZ2VMaXN0UHJvcGVydHkobmFtZSkgJiYgIWFjY1syXSkge1xuICAgICAgICBhY2NbMl0gPSB0cnVlO1xuICAgICAgfVxuICAgICAgYWNjWzBdW3ZhbHVlXSA9IG5hbWU7XG4gICAgICBhY2NbMV1bbmFtZV0gPSB2YWx1ZTtcblxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LFxuICAgIFt7fSwge30sIGZhbHNlXVxuICApO1xuICBzZXRQcm9wZXJ0eU1hcHMobWFwc1swXSwgbWFwc1sxXSk7XG4gIHJldHVybiBtYXBzWzJdO1xufVxuXG4vKipcbiAqIFtnZXRDb25maWdFbWJlZGRlZEZpZWxkc01ldGFdXG4gKiBEZXNjcmlwdGlvbiAgICAtICAgICAgICAgICBHZXQgdGhlIG1ldGFkYXRhIGZvciBjb25maWd1cmVkIGVtYmVkZGVkIGZpZWxkc1xuICogQGlnbm9yZVxuICogQHBhcmFtIHtTZXR9IGNvbmZpZ0ZpZWxkcyAgU2V0IG9mIGNvbmZpZyBmaWVsZHNcbiAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc0lEICAgIGNsYXNJRCBvZiBkYXRhcGFnZVxuICogQHJldHVybnMge0FycmF5fSAgICAgICAgICAgTWV0YWRhdGEgb2YgY29uZmlndXJlZCBlbWJlZGRlZCBmaWVsZHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENvbmZpZ0VtYmVkZGVkRmllbGRzTWV0YShjb25maWdGaWVsZHMsIGNsYXNzSUQpIHtcbiAgY29uc3QgY29uZmlnRW1iZWRkZWRGaWVsZHNNZXRhOiBhbnlbXSA9IFtdO1xuICBjb25maWdGaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgbGV0IHZhbHVlID0gZmllbGQ7XG4gICAgaWYgKGlzRW1iZWRkZWRGaWVsZCh2YWx1ZSkpIHtcbiAgICAgIC8vIGNvbnZlcnNpb24gUGFnZS5QYWdlTGlzdFtdLnByb3BlcnR5ID0+IFBhZ2UuUGFnZUxpc3QucHJvcGVydHlcbiAgICAgIGlmICh2YWx1ZS5pbmNsdWRlcygnWycpKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDAsIHZhbHVlLmluZGV4T2YoJ1snKSkgKyB2YWx1ZS5zdWJzdHJpbmcodmFsdWUuaW5kZXhPZignXScpICsgMSk7XG4gICAgICB9XG4gICAgICBjb25zdCBtZXRhOiBhbnkgPSBQQ29yZS5nZXRNZXRhZGF0YVV0aWxzKCkuZ2V0RW1iZWRkZWRQcm9wZXJ0eU1ldGFkYXRhKHZhbHVlLCBjbGFzc0lEKTtcbiAgICAgIG1ldGEuZmllbGRJRCA9IGZpZWxkO1xuICAgICAgY29uZmlnRW1iZWRkZWRGaWVsZHNNZXRhLnB1c2gobWV0YSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNvbmZpZ0VtYmVkZGVkRmllbGRzTWV0YTtcbn1cblxuLyoqXG4gKiBbbWVyZ2VDb25maWdFbWJlZGRlZEZpZWxkc01ldGFdXG4gKiBEZXNjcmlwdGlvbiAgICAtICAgICAgICAgICBHZXQgdGhlIG1ldGFkYXRhIGZvciBjb25maWd1cmVkIGVtYmVkZGVkIGZpZWxkc1xuICogQGlnbm9yZVxuICogQHBhcmFtIHtBcnJheX0gY29uZmlnRW1iZWRkZWRGaWVsZHNNZXRhICBjb25maWcgZmllbGRzIG1ldGFkYXRhLlxuICogQHBhcmFtIHtBcnJheX0gbWV0YUZpZWxkcyAgRmllbGRzIG1ldGFkYXRhIEFycmF5LiBDb250YWlucyBtZXRhZGF0YSBvZiBhbGwgdGhlIGZpZWxkc1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VDb25maWdFbWJlZGRlZEZpZWxkc01ldGEoY29uZmlnRW1iZWRkZWRGaWVsZHNNZXRhLCBtZXRhRmllbGRzKSB7XG4gIGNvbnN0IG1lcmdlZE1ldGFGaWVsZHMgPSBbLi4ubWV0YUZpZWxkc107XG4gIGNvbmZpZ0VtYmVkZGVkRmllbGRzTWV0YS5mb3JFYWNoKGNvbmZpZ0ZpZWxkTWV0YSA9PiB7XG4gICAgY29uc3QgZmllbGRNZXRhID0gbWV0YUZpZWxkcy5maW5kKG1ldGFGaWVsZCA9PiBtZXRhRmllbGQuZmllbGRJRCA9PT0gY29uZmlnRmllbGRNZXRhLmZpZWxkSUQpO1xuICAgIGlmICghZmllbGRNZXRhKSBtZXJnZWRNZXRhRmllbGRzLnB1c2goY29uZmlnRmllbGRNZXRhKTtcbiAgfSk7XG4gIHJldHVybiBtZXJnZWRNZXRhRmllbGRzO1xufVxuXG5jb25zdCBvbGRUb05ld0ZpZWxkVHlwZU1hcHBpbmcgPSB7XG4gICdEYXRlIFRpbWUnOiAnRGF0ZSAmIHRpbWUnLFxuICBEYXRlOiAnRGF0ZSBvbmx5J1xufTtcblxuLyoqXG4gKiBbdXBkYXRlRmllbGRUeXBlXVxuICogRGVzY3JpcHRpb24gICAgLSAgICAgICAgICAgVXBkYXRlcyB0aGUgZmllbGQgdHlwZSBpZiBpdHMgY2hhbmdlZCBpbiB0aGUgbmV3IGltcGxlbWVudGF0aW9uLiBTdWNoIG1hcHBpbmcgaXMgbWFpbnRhaW5lZCBpbiBvbGRUb05ld0ZpZWxkVHlwZU1hcHBpbmcuXG4gKiBAaWdub3JlXG4gKiBAcGFyYW0ge0FycmF5fSBtZXRhRmllbGRzICBGaWVsZHMgbWV0YWRhdGEgQXJyYXkuIENvbnRhaW5zIG1ldGFkYXRhIG9mIGFsbCB0aGUgZmllbGRzLlxuICovXG5mdW5jdGlvbiB1cGRhdGVGaWVsZFR5cGUobWV0YUZpZWxkcykge1xuICBtZXRhRmllbGRzLmZvckVhY2gobWV0YUZpZWxkID0+IHtcbiAgICBpZiAobWV0YUZpZWxkLnR5cGUpIG1ldGFGaWVsZC50eXBlID0gb2xkVG9OZXdGaWVsZFR5cGVNYXBwaW5nW21ldGFGaWVsZC50eXBlXSB8fCBtZXRhRmllbGQudHlwZTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldFByZXNldE1ldGFBdHRyaWJ1dGUoYXR0cmlidXRlKSB7XG4gIGNvbnN0IHtcbiAgICB0eXBlLFxuICAgIGNvbmZpZzogeyBsYWJlbCwgdmFsdWUgfVxuICB9ID0gYXR0cmlidXRlO1xuICByZXR1cm4ge1xuICAgIHR5cGUsXG4gICAgbmFtZTogdmFsdWUuc3RhcnRzV2l0aCgnQCcpID8gdmFsdWUuc3Vic3RyaW5nKDQpIDogdmFsdWUsXG4gICAgbGFiZWw6IGxhYmVsLnN0YXJ0c1dpdGgoJ0AnKSA/IGxhYmVsLnN1YnN0cmluZygzKSA6IGxhYmVsXG4gIH07XG59XG5cbi8qKlxuICogW2dlbmVyYXRlVmlld01ldGFEYXRhXVxuICogRGVzY3JpcHRpb24gLSBSZXR1cm5zIGEgbGlzdCBvZiAgbWV0YW9iamVjdHMgb2YgdGhlIGZpZWxkcyBwcm92aWRlZC5cbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSAgIHtBcnJheX0gICByYXdGaWVsZHMgICAgICAgICBMaXN0IG9mIGZpZWxkcyB0byB1cGRhdGUgbWV0YSBmb3JcbiAqIEBwYXJhbSAgIHtzdHJpbmd9ICBjbGFzc0lEICAgICAgICAgIENsYXNzIElEIGZyb20gdGhlIHJlc3BvbnNlXG4gKiBAcmV0dXJucyB7QXJyYXl9ICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIGZpZWxkcyB3aXRoIHVwZGF0ZWQgbWV0YSBvYmplY3RzLlxuICovXG5mdW5jdGlvbiBnZW5lcmF0ZVZpZXdNZXRhRGF0YShyYXdGaWVsZHMsIGNsYXNzSUQsIHNob3dGaWVsZCkge1xuICByZXR1cm4gcmF3RmllbGRzLm1hcChpdGVtID0+IGdldERlZmF1bHRWaWV3TWV0YShpdGVtLCBjbGFzc0lELCBzaG93RmllbGQpKTtcbn1cblxuLyoqXG4gKiBbZ2V0Q29uZmlnRmllbGRzXVxuICogRGVzY3JpcHRpb24gLSBSZXR1cm5zIGxpc3Qgb2YgY29uZmlnIGZpZWxkcyB3aXRoIHByaW1hcnkgZmllbGRzIG1ldGEgdXBkYXRlZC5cbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSAgIHtBcnJheX0gICBjb25maWdGaWVsZHMgICAgICBMaXN0IG9mIEF1dGhvcmVkIGZpZWxkc1xuICogQHBhcmFtICAge0FycmF5fSAgIHByaW1hcnlGaWVsZHMgICAgIExpc3Qgb2YgUHJpbWFyeSBGaWVsZHNcbiAqIEBwYXJhbSAgIHtBcnJheX0gICBtZXRhRmllbGRzICAgICAgICBNZXRhZGF0YSBvZiBhbGwgZmllbGRzXG4gKiBAcGFyYW0gICB7c3RyaW5nfSAgY2xhc3NJRCAgICAgICAgICAgQ2xhc3MgSUQgZnJvbSB0aGUgcmVzcG9uc2VcbiAqIEByZXR1cm5zIHtBcnJheX0gICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIGFsbCBmaWVsZHMgd2l0aCB0aGVpciBtZXRhIHVwZGF0ZWQuXG4gKi9cbmZ1bmN0aW9uIGdldENvbmZpZ0ZpZWxkcyhjb25maWdGaWVsZHMsIHByaW1hcnlGaWVsZHMsIG1ldGFGaWVsZHMsIGNsYXNzSUQpIHtcbiAgY29uc3QgcHJlc2V0Q29uZmlnRmllbGRzID0gY29uZmlnRmllbGRzO1xuICBjb25zdCBwcmltYXJ5RmllbGRzVmlld0luZGV4ID0gcHJlc2V0Q29uZmlnRmllbGRzLmZpbmRJbmRleChmaWVsZCA9PiBmaWVsZC5jb25maWcudmFsdWUgPT09ICdweVByaW1hcnlGaWVsZHMnKTtcbiAgaWYgKCFwcmltYXJ5RmllbGRzIHx8ICFwcmltYXJ5RmllbGRzLmxlbmd0aCkge1xuICAgIGlmIChwcmltYXJ5RmllbGRzVmlld0luZGV4IDwgMCkgcmV0dXJuIHByZXNldENvbmZpZ0ZpZWxkcztcblxuICAgIHByZXNldENvbmZpZ0ZpZWxkcy5zcGxpY2UocHJpbWFyeUZpZWxkc1ZpZXdJbmRleCwgMSk7XG5cbiAgICByZXR1cm4gcHJlc2V0Q29uZmlnRmllbGRzO1xuICB9XG5cbiAgaWYgKHByaW1hcnlGaWVsZHNWaWV3SW5kZXggPiAtMSkge1xuICAgIC8vIGxpc3Qgb2YgdW5jb21tb24gZmllbGRzIC0gbm9uIG92ZXJsYXAgb2YgcHJpbWFyeSBmaWVsZHMgZ3JvdXBlZCB2aWV3IGFuZCBpbmRlcGVuZGVudCBlbnRpdHkgY29sdW1ucyBvZiBwcmltYXJ5IHR5cGVcbiAgICBjb25zdCB1bmNvbW1vbkZpZWxkc0xpc3QgPSBwcmltYXJ5RmllbGRzLmZpbHRlcihcbiAgICAgIHByaW1hcnlGaWVsZCA9PiAhcHJlc2V0Q29uZmlnRmllbGRzLnNvbWUocHJlc2V0Q29uZmlnRmllbGQgPT4gcHJlc2V0Q29uZmlnRmllbGQuY29uZmlnLnZhbHVlLnNwbGl0KCcuJylbMV0gPT09IHByaW1hcnlGaWVsZClcbiAgICApO1xuICAgIGNvbnN0IHVuY29tbW9uRmllbGRzUmF3TWV0YTogYW55W10gPSBbXTtcbiAgICB1bmNvbW1vbkZpZWxkc0xpc3QuZm9yRWFjaCh1bmNvbW1vbkZpZWxkID0+IHtcbiAgICAgIGNvbnN0IHVuY29tbW9uRmllbGRNZXRhID0gbWV0YUZpZWxkcy5maW5kKG1ldGFGaWVsZCA9PiBtZXRhRmllbGQuZmllbGRJRCA9PT0gdW5jb21tb25GaWVsZCk7XG4gICAgICBpZiAodW5jb21tb25GaWVsZE1ldGEpIHVuY29tbW9uRmllbGRzUmF3TWV0YS5wdXNoKHVuY29tbW9uRmllbGRNZXRhKTtcbiAgICB9KTtcbiAgICBjb25zdCB1bmNvbW1vbkZpZWxkc0NvbmZpZ01ldGEgPSBnZW5lcmF0ZVZpZXdNZXRhRGF0YSh1bmNvbW1vbkZpZWxkc1Jhd01ldGEsIGNsYXNzSUQsIHRydWUpO1xuXG4gICAgcHJlc2V0Q29uZmlnRmllbGRzLnNwbGljZShwcmltYXJ5RmllbGRzVmlld0luZGV4LCAxLCAuLi51bmNvbW1vbkZpZWxkc0NvbmZpZ01ldGEpO1xuICB9XG4gIHJldHVybiBwcmVzZXRDb25maWdGaWVsZHM7XG59XG5cbi8qKlxuICogW2dldFRhYmxlQ29uZmlnRnJvbVByZXNldE1ldGFdXG4gKiBEZXNjcmlwdGlvbiAtIEdldCB0aGUgdGFibGUgY29uZmlnIGZyb20gdGhlIHByZXNldHMgbWV0YS5cbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSAgIHtvYmplY3R9ICAgIHByZXNldE1ldGEgICAgICAgICAgUHJlc2V0cyBtZXRhXG4gKiBAcGFyYW0gICB7Ym9vbGVhbn0gICBpc01ldGFXaXRoUHJlc2V0cyAgIHRydWUgaWYgbWV0YSBoYXMgcHJlc2V0cyBlbHNlIGZhbHNlXG4gKiBAcGFyYW0gICB7RnVuY3Rpb259ICBnZXRQQ29ubmVjdCAgICAgICAgIENhbGxiYWNrIHRvIGdldCB0aGUgUENvbm5lY3Qgb2JqZWN0XG4gKiBAcGFyYW0gICB7c3RyaW5nfSAgICBjbGFzc0lEICAgICAgICAgICAgIENsYXNzIElEIGZyb20gdGhlIHJlc3BvbnNlXG4gKiBAcGFyYW0gICB7QXJyYXl9ICAgICBwcmltYXJ5RmllbGRzICAgICAgIExpc3Qgb2YgUHJpbWFyeSBGaWVsZHNcbiAqIEBwYXJhbSAgIHtBcnJheX0gICAgIG1ldGFGaWVsZHMgICAgICAgICAgTGlzdCBvZiBhbGwgbWV0YWZpZWxkc1xuICogQHJldHVybnMge29iamVjdH0gICAgICAgICAgICAgICAgICAgICAgICBUYWJsZSBjb25maWcgb2JqZWN0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJsZUNvbmZpZ0Zyb21QcmVzZXRNZXRhKHByZXNldE1ldGEsIGlzTWV0YVdpdGhQcmVzZXRzLCBwQ29ubiQsIGNsYXNzSUQsIHByaW1hcnlGaWVsZHMsIG1ldGFGaWVsZHMpIHtcbiAgbGV0IHByZXNldElkO1xuICBsZXQgcHJlc2V0TmFtZTtcbiAgbGV0IGNhcmRIZWFkZXI7XG4gIGxldCBzZWNvbmRhcnlUZXh0O1xuICBsZXQgdGltZWxpbmVEYXRlO1xuICBsZXQgdGltZWxpbmVUaXRsZTtcbiAgbGV0IHRpbWVsaW5lU3RhdHVzO1xuICBsZXQgdGltZWxpbmVJY29uO1xuICBsZXQgeyBmaWx0ZXJFeHByZXNzaW9uIH0gPSBwQ29ubiQuZ2V0UmF3TWV0YWRhdGEoKS5jb25maWc7XG4gIGxldCBmaWVsZHNNZXRhO1xuICBsZXQgY29uZmlnRmllbGRzO1xuICBpZiAoaXNNZXRhV2l0aFByZXNldHMpIHtcbiAgICBwcmVzZXRJZCA9IHByZXNldE1ldGEuaWQ7XG4gICAgcHJlc2V0TmFtZSA9IHByZXNldE1ldGEubGFiZWw7XG4gICAgY2FyZEhlYWRlciA9IHByZXNldE1ldGEuY2FyZEhlYWRlciAmJiBnZXRQcmVzZXRNZXRhQXR0cmlidXRlKHByZXNldE1ldGEuY2FyZEhlYWRlcik7XG4gICAgc2Vjb25kYXJ5VGV4dCA9IHByZXNldE1ldGEuc2Vjb25kYXJ5VGV4dCAmJiBnZXRQcmVzZXRNZXRhQXR0cmlidXRlKHByZXNldE1ldGEuc2Vjb25kYXJ5VGV4dCk7XG4gICAgdGltZWxpbmVEYXRlID0gcHJlc2V0TWV0YS50aW1lbGluZURhdGUgJiYgZ2V0UHJlc2V0TWV0YUF0dHJpYnV0ZShwcmVzZXRNZXRhLnRpbWVsaW5lRGF0ZSk7XG4gICAgdGltZWxpbmVUaXRsZSA9IHByZXNldE1ldGEudGltZWxpbmVUaXRsZSAmJiBnZXRQcmVzZXRNZXRhQXR0cmlidXRlKHByZXNldE1ldGEudGltZWxpbmVUaXRsZSk7XG4gICAgdGltZWxpbmVTdGF0dXMgPSBwcmVzZXRNZXRhLnRpbWVsaW5lU3RhdHVzICYmIGdldFByZXNldE1ldGFBdHRyaWJ1dGUocHJlc2V0TWV0YS50aW1lbGluZVN0YXR1cyk7XG4gICAgdGltZWxpbmVJY29uID0gcHJlc2V0TWV0YS50aW1lbGluZUljb24gJiYgZ2V0UHJlc2V0TWV0YUF0dHJpYnV0ZShwcmVzZXRNZXRhLnRpbWVsaW5lSWNvbik7XG4gICAgZmlsdGVyRXhwcmVzc2lvbiA9IHByZXNldE1ldGEuY29uZmlnLmZpbHRlckV4cHJlc3Npb247XG4gICAgW2ZpZWxkc01ldGFdID0gcHJlc2V0TWV0YS5jaGlsZHJlbjtcbiAgICBpZiAoXG4gICAgICBwcmVzZXRNZXRhLnRpbWVsaW5lVGl0bGUgJiZcbiAgICAgICFmaWVsZHNNZXRhLmNoaWxkcmVuLmZpbmQoZmllbGRNZXRhID0+IHtcbiAgICAgICAgcmV0dXJuIGZpZWxkTWV0YT8uY29uZmlnPy52YWx1ZSA9PT0gcHJlc2V0TWV0YS50aW1lbGluZVRpdGxlPy5jb25maWc/LnZhbHVlO1xuICAgICAgfSlcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgdHlwZSwgY29uZmlnIH0gPSBwcmVzZXRNZXRhLnRpbWVsaW5lVGl0bGU7XG4gICAgICBmaWVsZHNNZXRhLmNoaWxkcmVuLnB1c2goeyB0eXBlLCBjb25maWc6IHsgLi4uY29uZmlnLCBzaG93OiBmYWxzZSB9IH0pO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBwcmVzZXRNZXRhLnRpbWVsaW5lRGF0ZSAmJlxuICAgICAgIWZpZWxkc01ldGEuY2hpbGRyZW4uZmluZChmaWVsZE1ldGEgPT4ge1xuICAgICAgICByZXR1cm4gZmllbGRNZXRhPy5jb25maWc/LnZhbHVlID09PSBwcmVzZXRNZXRhLnRpbWVsaW5lRGF0ZT8uY29uZmlnPy52YWx1ZTtcbiAgICAgIH0pXG4gICAgKSB7XG4gICAgICBjb25zdCB7IHR5cGUsIGNvbmZpZyB9ID0gcHJlc2V0TWV0YS50aW1lbGluZURhdGU7XG4gICAgICBmaWVsZHNNZXRhLmNoaWxkcmVuLnB1c2goeyB0eXBlLCBjb25maWc6IHsgLi4uY29uZmlnLCBzaG93OiBmYWxzZSB9IH0pO1xuICAgIH1cbiAgICBjb25maWdGaWVsZHMgPSBnZXRDb25maWdGaWVsZHMoZmllbGRzTWV0YS5jaGlsZHJlbiwgcHJpbWFyeUZpZWxkcywgbWV0YUZpZWxkcywgY2xhc3NJRCk7XG4gIH0gZWxzZSB7XG4gICAgZmllbGRzTWV0YSA9IHByZXNldE1ldGEucHJvcHM7XG4gICAgY29uZmlnRmllbGRzID0gZ2V0Q29uZmlnRmllbGRzKFxuICAgICAgZmllbGRzTWV0YVxuICAgICAgICAuZ2V0UENvbm5lY3QoKVxuICAgICAgICAuZ2V0Q2hpbGRyZW4oKVxuICAgICAgICA/Lm1hcChjaGlsZCA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNoaWxkLmdldFBDb25uZWN0KCkuZ2V0UmF3TWV0YWRhdGEoKTtcbiAgICAgICAgfSksXG4gICAgICBwcmltYXJ5RmllbGRzLFxuICAgICAgbWV0YUZpZWxkcyxcbiAgICAgIGNsYXNzSURcbiAgICApO1xuICB9XG4gIHJldHVybiB7XG4gICAgcHJlc2V0SWQsXG4gICAgcHJlc2V0TmFtZSxcbiAgICBjYXJkSGVhZGVyLFxuICAgIHNlY29uZGFyeVRleHQsXG4gICAgdGltZWxpbmVEYXRlLFxuICAgIHRpbWVsaW5lVGl0bGUsXG4gICAgdGltZWxpbmVTdGF0dXMsXG4gICAgdGltZWxpbmVJY29uLFxuICAgIGZpbHRlckV4cHJlc3Npb24sXG4gICAgZmllbGRzTWV0YSxcbiAgICBjb25maWdGaWVsZHNcbiAgfTtcbn1cblxuLyoqXG4gKiBbZ2V0UmVwb3J0Q29sdW1uc11cbiAqIERlc2NyaXB0aW9uIC0gUmV0dXJucyBhIHNldCBvZiBjb2x1bW5zIGZyb20gdGhlIHJlcG9ydCByZXNwb25zZS5cbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSAgIHtvYmplY3R9IHJlc3BvbnNlIC1cbiAqIEByZXR1cm5zIHtTZXR9IFNldCBvZiBjb2x1bW5zIGZyb20gdGhlIHJlcG9ydCByZXNwb25zZVxuICovXG5mdW5jdGlvbiBnZXRSZXBvcnRDb2x1bW5zKHJlc3BvbnNlKSB7XG4gIGNvbnN0IHtcbiAgICBkYXRhOiB7IGRhdGE6IHJlcG9ydENvbHVtbnMgfVxuICB9ID0gcmVzcG9uc2U7XG4gIGNvbnN0IHJlcG9ydENvbHVtbnNTZXQgPSBuZXcgU2V0KCk7XG4gIHJlcG9ydENvbHVtbnM/LmZvckVhY2goaXRlbSA9PiB7XG4gICAgbGV0IHZhbCA9IGl0ZW0ucHlGaWVsZE5hbWU7XG4gICAgLy8gUmVtb3ZlICcuJyBmcm9tIGluZGV4IDAgb25seSwgaWYgJy4nIGlzIHByZXNlbnRcbiAgICBpZiAodmFsWzBdID09PSAnLicpIHtcbiAgICAgIHZhbCA9IHZhbC5zdWJzdHJpbmcoMSk7XG4gICAgfVxuICAgIHJlcG9ydENvbHVtbnNTZXQuYWRkKHZhbCk7XG4gIH0pO1xuICByZXR1cm4gcmVwb3J0Q29sdW1uc1NldDtcbn1cblxuLyoqXG4gKiBbZ2V0Q29uZmlnRmllbGRWYWx1ZV1cbiAqIERlc2NyaXRwaW9uIC0gUmV0dXJucyBhIHZhbGlkIHZhbHVlIGZvciBhIGNvbmZpZ3VyYXRpb24gZmllbGQuIFJlbW92ZSBhbnkgYW5ub3RhdGlvbnMgYW5kIGFsc28gXCIuXCJcbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSAgIHtvYmplY3R9IGNvbmZpZ1xuICogICAgICAgICAgICAgICAgICAgY29uZmlnLnZhbHVlIC0gUmF3IHZhbHVlXG4gKiBAcmV0dXJucyB7c3RyaW5nfSB2YWx1ZSAtIFZhbHVlIHdpdGggb3V0IGFueSBhbm5vdGF0aW9ucyBvciBcIi5cIlxuICovXG5mdW5jdGlvbiBnZXRDb25maWdGaWVsZFZhbHVlKGNvbmZpZykge1xuICBsZXQgeyB2YWx1ZSB9ID0gY29uZmlnO1xuICBpZiAodmFsdWUuc3RhcnRzV2l0aCgnQCcpKSB7XG4gICAgdmFsdWUgPSB2YWx1ZS5zdWJzdHJpbmcodmFsdWUuaW5kZXhPZignICcpICsgMSk7XG4gICAgaWYgKHZhbHVlWzBdID09PSAnLicpIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDEpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBbcHJlcGFyZUNvbmZpZ0ZpZWxkc11cbiAqIERlc2NyaXB0aW9uIC0gUHJlcGFyZXMgYSBzZXQgb2YgY29uZmlndXJhdGlvbiBmaWVsZHMgYW5kIHB1c2hlcyBlYWNoIGNvbmZpZyB0eXBlIHRvIGEgc2V0IHVzaW5nIHRoZSBjYWxsYmFjayBwYXJhbWV0ZXIuXG4gKiBAaWdub3JlXG4gKiBAcGFyYW0gICB7b2JqZWN0fSAgICBjb25maWdGaWVsZHMgICAgICAgICAgTGlzdCBvZiBBdXRob3JlZCBmaWVsZHNcbiAqIEBwYXJhbSAgIHtGdW5jdGlvbn0gIHB1c2hUb0NvbXBvbmVudHNMaXN0IENhbGxiYWNrIHRvIHB1c2ggdGhlIGZpZWxkIHR5cGUgdG8gYSBzZXQuXG4gKiBAcmV0dXJucyB7U2V0fSAgICAgICBjb25maWdGaWVsZFNldFxuICovXG5mdW5jdGlvbiBwcmVwYXJlQ29uZmlnRmllbGRzKGNvbmZpZ0ZpZWxkcywgcHVzaFRvQ29tcG9uZW50c0xpc3QpIHtcbiAgY29uc3QgY29uZmlnRmllbGRTZXQgPSBuZXcgU2V0KCk7XG4gIGNvbmZpZ0ZpZWxkcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgIHB1c2hUb0NvbXBvbmVudHNMaXN0KGl0ZW0udHlwZSk7XG4gICAgY29uc3QgdmFsID0gZ2V0Q29uZmlnRmllbGRWYWx1ZShpdGVtLmNvbmZpZyk7XG4gICAgY29uZmlnRmllbGRTZXQuYWRkKHZhbCk7XG4gIH0pO1xuICByZXR1cm4gY29uZmlnRmllbGRTZXQ7XG59XG5cbi8qKlxuICogW2ZpbmRBdXRob3JlZEZpZWxkXVxuICogRGVzY3JpcHRpb24gLSBGaW5kcyBhbiBhdXRob3JlZCBmaWVsZCBmcm9tIHloZSBsaXN0IG9mIGNvbmZpZyBmaWVsZHMuXG4gKiBAaWdub3JlXG4gKiBAcGFyYW0gICB7QXJyYXl9ICAgY29uZmlnRmllbGRzIExpc3Qgb2YgQXV0aG9yZWQgZmllbGRzXG4gKiBAcGFyYW0gICB7c3RyaW5nfSAgZmllbGRJRCAgICAgIEZpbHRlclxuICogQHJldHVybnMge29iamVjdH0gICAgICAgICAgICAgIGNvbmZpZyB3aXRoIGl0cyBmaWVsZCB2YWx1ZSBlcXVhbCB0byBmaWVsZElELCB3aGljaCBtZWFucyBhbiBhdXRob3JlZCBmaWVsZFxuICovXG5mdW5jdGlvbiBmaW5kQXV0aG9yZWRGaWVsZChjb25maWdGaWVsZHMsIGZpZWxkSUQpIHtcbiAgcmV0dXJuIGNvbmZpZ0ZpZWxkcy5maW5kKGNvbmZpZ0ZpZWxkID0+IHtcbiAgICBjb25zdCB2YWwgPSBnZXRDb25maWdGaWVsZFZhbHVlKGNvbmZpZ0ZpZWxkLmNvbmZpZyk7XG4gICAgcmV0dXJuIHZhbCA9PT0gZmllbGRJRDtcbiAgfSk7XG59XG5cbi8qKlxuICogW2ZpbmRBbmRVcGRhdGVBdXRob3JlZEZpZWxkQ29uZmlnXVxuICogRGVzY3JpcHRpb24gLSBGaW5kIHRoZSBhdXRob3JlZCBmaWVsZCwgYW5kIHVwZGF0ZSBpdHMgY29uZmlnLlxuICogQGlnbm9yZVxuICogQHBhcmFtICAge0FycmF5fSAgIGNvbmZpZ0ZpZWxkcyBMaXN0IG9mIEF1dGhvcmVkIGZpZWxkc1xuICogQHBhcmFtICAge29iamVjdH0gIGl0ZW0gICAgICAgIEZpZWxkIGl0ZW0gdG8gY29weSBkaXNwbGF5QXMgYW5kIGNhdGVnb3J5IGluZm9ybWF0aW9uXG4gKiBAcGFyYW0gICB7c3RyaW5nfSAgY2xhc3NJZCAgICAgY2xhc3NJRCBmcm9tIHRoZSByZXNwb25zZVxuICovXG5mdW5jdGlvbiBmaW5kQW5kVXBkYXRlQXV0aG9yZWRGaWVsZENvbmZpZyhjb25maWdGaWVsZHMsIGl0ZW0sIGNsYXNzSWQpIHtcbiAgY29uc3QgYXV0aG9yZWRGaWVsZCA9IGZpbmRBdXRob3JlZEZpZWxkKGNvbmZpZ0ZpZWxkcywgaXRlbS5maWVsZElEKTtcbiAgaWYgKGF1dGhvcmVkRmllbGQ/LmNvbmZpZykge1xuICAgIGlmIChpdGVtLmRpc3BsYXlBcykge1xuICAgICAgYXV0aG9yZWRGaWVsZC5jb25maWcuZGlzcGxheUFzID0gaXRlbS5kaXNwbGF5QXM7XG4gICAgfVxuICAgIGF1dGhvcmVkRmllbGQuY29uZmlnLmNsYXNzSUQgPSBpdGVtLmNsYXNzSUQgPz8gY2xhc3NJZDtcblxuICAgIGlmIChhdXRob3JlZEZpZWxkLnR5cGUgPT09IFVTRVJfUkVGRVJFTkNFKSB7XG4gICAgICBhdXRob3JlZEZpZWxkLmNvbmZpZy5hc3NvY2lhdGlvbklEID0gaXRlbS5hc3NvY2lhdGlvbklEIHx8IGl0ZW0uZmllbGRJRDtcbiAgICB9XG4gICAgYXV0aG9yZWRGaWVsZC5jb25maWcuY2F0ZWdvcnkgPSBpdGVtLmNhdGVnb3J5O1xuICAgIC8vIEZpZWxkVHlwZSBpZGVudGlmaWVzIHdoZXRoZXIgdGhlIGZpZWxkIGlzIGNvbmZpZ3VyZWQgYXMgcGlja0xpc3RcbiAgICBhdXRob3JlZEZpZWxkLmNvbmZpZy5maWVsZFR5cGUgPSBpdGVtLmZpZWxkVHlwZTtcbiAgICAvLyB0eXBlIGRlZmluZWQgb24gdGhlIHByb3BlcnR5IHJ1bGUsXG4gICAgLy8gdXNlZCBmb3IgdGhlIHBpY2tsaXN0IGZpZWxkIHRvIGFzc2lnbiB0aGUgYXBwcm9wcmlhdGUgdHlwZVxuICAgIGF1dGhvcmVkRmllbGQuY29uZmlnLnByb3BlcnR5VHlwZSA9IGl0ZW0uZGF0YVR5cGUgfHwgaXRlbS50eXBlO1xuICB9XG59XG5cbi8qKlxuICogW2lzQW5FeHRyYUZpZWxkXVxuICogRGVzY3JpcHRpb24gLSBSZXR1cm5zIHRydWUgaWYgdGhlIGZpZWxkIGlzIGFuIGV4dHJhIGZpZWxkLiBFeHRyYSBmaWVsZCBpcyB0aGUgb25lIHdoaWNoIGlzIG5vdCBhdXRob3JlZCBidXQgcGFydCBvZiB0aGUgcmVwb3J0LlxuICogQGlnbm9yZVxuICogQHBhcmFtICAge0FycmF5fSAgIGNvbmZpZ0ZpZWxkcyAgICAgIExpc3Qgb2YgQXV0aG9yZWQgZmllbGRzXG4gKiBAcGFyYW0gICB7U2V0fSAgICAgY29uZmlnRmllbGRTZXQgICAgU2V0IGlmIEF1dGhvcmVkIGZpbGVkIHZhbHVlc1xuICogQHBhcmFtICAge1NldH0gICAgIHJlcG9ydENvbHVtbnNTZXQgU2V0IG9mIGNvbHVtbnMgZnJvbSB0aGUgcmVwb3J0XG4gKiBAcGFyYW0gICB7b2JqZWN0fSAgaXRlbSAgICAgICAgICAgICBDb25maWcgZmllbGQgaXRlbVxuICogQHBhcmFtICAge3N0cmluZ30gIGNsYXNzSWQgICAgICAgICAgQ2xhc3MgSUQgZnJvbSB0aGUgcmVzcG9uc2VcbiAqIEBwYXJhbSAgIHtib29sZWFufSBzaG93RHluYW1pY0ZpZWxkcyBGbGFnIGluZGljYXRpbmcgd2hldGhlciBmaWVsZHMgYXJlIGZldGNoZWQgZHluYW1pY2FsbHkgYXQgcnVudGltZVxuICogQHJldHVybnMge2Jvb2xlYW59ICAgICAgICAgICAgICAgICAgdHJ1ZSBJZiB0aGUgZmllbGQgaXMgYW4gZXh0cmEgZmllbGQgZWxzZSBmYWxzZS5cbiAqL1xuZnVuY3Rpb24gaXNBbkV4dHJhRmllbGQoY29uZmlnRmllbGRzLCBjb25maWdGaWVsZFNldCwgcmVwb3J0Q29sdW1uc1NldCwgaXRlbSwgY2xhc3NJZCwgc2hvd0R5bmFtaWNGaWVsZHMpIHtcbiAgLy8gSXMgdGhlIGZpZWxkIGFscmVhZHkgcHJlc2VudCBpbiBhdXRob3JpbmcgbWV0YWRhdGE/XG4gIC8vIE11dGF0ZXMgY29uZmlnIGZpZWxkcyB0byBjb3B5IGRpc3BsYXlBcyBhbmQgY2F0ZWdvcnkgaW5mb3JtYXRpb25cbiAgaWYgKGNvbmZpZ0ZpZWxkU2V0LmhhcyhpdGVtLmZpZWxkSUQpKSB7XG4gICAgZmluZEFuZFVwZGF0ZUF1dGhvcmVkRmllbGRDb25maWcoY29uZmlnRmllbGRzLCBpdGVtLCBjbGFzc0lkKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBJZiBmaWVsZCBpcyBub3QgYXV0aG9yZWQgYW5kIG5vdCBwYXJ0IG9mIHJlcG9ydCBjb2x1bW5zIHRoZW4gZGlzY2FyZCBpdFxuICByZXR1cm4gc2hvd0R5bmFtaWNGaWVsZHMgfHwgISFyZXBvcnRDb2x1bW5zU2V0LmhhcyhpdGVtLmZpZWxkSUQpO1xufVxuXG4vKipcbiAqIFtwcmVwYXJlRXh0cmFGaWVsZHNdXG4gKiBEZXNjcmlwdGlvbiAtIFJldHVybnMgYSBsaXN0IG9mIGV4dHJhIGZpZWxkcyB3aXRoIHRoZWlyIG1ldGEgdXBkYXRlZC5cbiAqIEBpZ25vcmVcbiAqIEBwYXJhbSAgIHtBcnJheX0gICBtZXRhRmllbGRzICAgICAgIExpc3Qgb2YgZmllbGRzXG4gKiBAcGFyYW0gICB7QXJyYXl9ICAgY29uZmlnRmllbGRzICAgICAgTGlzdCBvZiBBdXRob3JlZCBmaWVsZHNcbiAqIEBwYXJhbSAgIHtTZXR9ICAgICBjb25maWdGaWVsZFNldCAgICBTZXQgaWYgQXV0aG9yZWQgZmlsZWQgdmFsdWVzXG4gKiBAcGFyYW0gICB7U2V0fSAgICAgcmVwb3J0Q29sdW1uc1NldCBTZXQgb2YgY29sdW1ucyBmcm9tIHRoZSByZXBvcnRcbiAqIEBwYXJhbSAgIHtzdHJpbmd9ICBjbGFzc0lEICAgICAgICAgIENsYXNzIElEIGZyb20gdGhlIHJlc3BvbnNlXG4gKiBAcGFyYW0gICB7Ym9vbGVhbn0gc2hvd0R5bmFtaWNGaWVsZHMgRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgZmllbGRzIGFyZSBmZXRjaGVkIGR5bmFtaWNhbGx5IGF0IHJ1bnRpbWVcbiAqIEByZXR1cm5zIHtBcnJheX0gICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgZXh0cmEgZmllbGRzIHdpdGggdGhlaXIgbWV0YSB1cGRhdGVkLlxuICovXG5mdW5jdGlvbiBwcmVwYXJlRXh0cmFGaWVsZHMobWV0YUZpZWxkcywgY29uZmlnRmllbGRzLCBjb25maWdGaWVsZFNldCwgcmVwb3J0Q29sdW1uc1NldCwgY2xhc3NJRCwgc2hvd0R5bmFtaWNGaWVsZHMpIHtcbiAgLy8gRmlsdGVyIGFsbCB0aGUgZXh0cmEgZmllbGRzXG4gIGNvbnN0IGV4dHJhRmlsZWRzID0gbWV0YUZpZWxkcy5maWx0ZXIoaXRlbSA9PiB7XG4gICAgcmV0dXJuIGlzQW5FeHRyYUZpZWxkKGNvbmZpZ0ZpZWxkcywgY29uZmlnRmllbGRTZXQsIHJlcG9ydENvbHVtbnNTZXQsIGl0ZW0sIGNsYXNzSUQsIHNob3dEeW5hbWljRmllbGRzKTtcbiAgfSk7XG4gIHJldHVybiBnZW5lcmF0ZVZpZXdNZXRhRGF0YShleHRyYUZpbGVkcywgY2xhc3NJRCwgZmFsc2UpO1xuICAvLyBVcGRhdGUgdGhlIG1ldGEgb2JqZWN0IG9mIGVhY2ggb2YgdGhlIGV4dHJhIGZpZWxkcy5cbn1cblxuY29uc3QgQXNzaWduRGFzaE9iamVjdHMgPSBbJ0Fzc2lnbi1Xb3JrbGlzdCcsICdBc3NpZ24tV29ya0Jhc2tldCddO1xuXG5mdW5jdGlvbiBwb3B1bGF0ZVJlbmRlcmluZ09wdGlvbnMobmFtZSwgY29uZmlnLCBmaWVsZCkge1xuICBjb25zdCBzaG91bGREaXNwbGF5QXNTZW1hbnRpY0xpbmsgPSAnZGlzcGxheUFzTGluaycgaW4gZmllbGQuY29uZmlnICYmIGZpZWxkLmNvbmZpZy5kaXNwbGF5QXNMaW5rO1xuICBpZiAoc2hvdWxkRGlzcGxheUFzU2VtYW50aWNMaW5rKSB7XG4gICAgY29uZmlnLmN1c3RvbU9iamVjdC5pc0Fzc2lnbm1lbnRMaW5rID0gQXNzaWduRGFzaE9iamVjdHMuaW5jbHVkZXMoZmllbGQuY29uZmlnLmNsYXNzSUQpO1xuICAgIGlmIChmaWVsZC5jb25maWcudmFsdWUuc3RhcnRzV2l0aCgnQENBJykpIHtcbiAgICAgIGNvbmZpZy5jdXN0b21PYmplY3QuaXNBc3NvY2lhdGlvbiA9IHRydWU7XG4gICAgfVxuICAgIGNvbmZpZy5jZWxsUmVuZGVyZXIgPSBmb3JtYXRDb25zdGFudHMuV29ya0xpbms7XG4gIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3B5U3RhdHVzV29yaycgfHwgbmFtZSA9PT0gJ3B5QXNzaWdubWVudFN0YXR1cycpIHtcbiAgICBjb25maWcuY2VsbFJlbmRlcmVyID0gZm9ybWF0Q29uc3RhbnRzLldvcmtTdGF0dXM7XG4gIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3B4VXJnZW5jeVdvcmsnKSB7XG4gICAgY29uZmlnLmNlbGxSZW5kZXJlciA9IGZvcm1hdENvbnN0YW50cy5JbnRlZ2VyO1xuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbGl6ZUNvbHVtbnMoZmllbGRzOiBhbnlbXSA9IFtdLCBnZXRNYXBwZWRQcm9wZXJ0eTogYW55ID0gbnVsbCkge1xuICByZXR1cm4gZmllbGRzLm1hcCgoZmllbGQsIG9yaWdpbmFsQ29sSW5kZXgpID0+IHtcbiAgICBsZXQgbmFtZSA9IGZpZWxkLmNvbmZpZy52YWx1ZTtcblxuICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoJ0AnKSkge1xuICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKG5hbWUuaW5kZXhPZignICcpICsgMSk7XG4gICAgICBpZiAobmFtZVswXSA9PT0gJy4nKSBuYW1lID0gbmFtZS5zdWJzdHJpbmcoMSk7XG4gICAgfVxuICAgIG5hbWUgPSBnZXRNYXBwZWRQcm9wZXJ0eT8uKG5hbWUpID8/IG5hbWU7XG5cbiAgICBsZXQgbGFiZWwgPSBmaWVsZC5jb25maWcubGFiZWwgfHwgZmllbGQuY29uZmlnLmNhcHRpb247XG4gICAgY29uc3QgeyBzaG93ID0gdHJ1ZSwgZGlzcGxheUFzIH0gPSBmaWVsZC5jb25maWc7XG4gICAgaWYgKGxhYmVsLnN0YXJ0c1dpdGgoJ0AnKSkge1xuICAgICAgbGFiZWwgPSBsYWJlbC5zdWJzdHJpbmcoMyk7XG4gICAgfVxuXG4gICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgbmFtZSxcbiAgICAgIGxhYmVsLFxuICAgICAgc2hvdyxcbiAgICAgIGNsYXNzSUQ6IGZpZWxkLmNvbmZpZy5jbGFzc0lELFxuICAgICAgaWQ6IGZpZWxkLmlkIHx8IG5hbWUgfHwgb3JpZ2luYWxDb2xJbmRleCxcbiAgICAgIGRpc3BsYXlBcyxcbiAgICAgIGFzc29jaWF0aW9uSUQ6IGZpZWxkLmNvbmZpZy5hc3NvY2lhdGlvbklELFxuICAgICAgLi4uKGZpZWxkLmNvbmZpZy5jbGFzc0lEICYmIHsgY2F0ZWdvcnk6IGZpZWxkLmNvbmZpZy5jYXRlZ29yeSB9KSxcbiAgICAgIGN1c3RvbU9iamVjdDoge30sXG4gICAgICBmaWVsZFR5cGU6IGZpZWxkLmNvbmZpZy5maWVsZFR5cGUsXG4gICAgICBtZXRhOiB7XG4gICAgICAgIC4uLmZpZWxkXG4gICAgICB9XG4gICAgfTtcblxuICAgIHBvcHVsYXRlUmVuZGVyaW5nT3B0aW9ucyhuYW1lLCBjb25maWcsIGZpZWxkKTtcblxuICAgIHJldHVybiBjb25maWc7XG4gIH0pO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0SXRlbUtleSA9IGZpZWxkcyA9PiB7XG4gIGxldCBpdGVtS2V5O1xuICBpZiAoZmllbGRzLmZpbmRJbmRleChmaWVsZCA9PiBmaWVsZC5pZCA9PT0gJ3B5R1VJRCcpID4gLTEpIHtcbiAgICBpdGVtS2V5ID0gJ3B5R1VJRCc7XG4gIH0gZWxzZSB7XG4gICAgaXRlbUtleSA9ICdwekluc0tleSc7XG4gIH1cbiAgcmV0dXJuIGl0ZW1LZXk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZVBhdGNoUXVlcnlGaWVsZHMoZmllbGRzLCBpc0RhdGFPYmplY3QgPSBmYWxzZSwgY2xhc3NJRCA9ICcnKSB7XG4gIGNvbnN0IHF1ZXJ5RmllbGRzOiBhbnlbXSA9IFtdO1xuICBmaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgY29uc3QgcGF0Y2hGaWVsZHM6IGFueVtdID0gW107XG4gICAgaWYgKGZpZWxkLmNlbGxSZW5kZXJlciA9PT0gJ1dvcmtMaW5rJykge1xuICAgICAgaWYgKGZpZWxkLmN1c3RvbU9iamVjdCAmJiBmaWVsZC5jdXN0b21PYmplY3QuaXNBc3NpZ25tZW50TGluaykge1xuICAgICAgICBjb25zdCBhc3NvY2lhdGlvbk5hbWUgPSBmaWVsZC5uYW1lLmluY2x1ZGVzKCc6JykgPyBgJHtmaWVsZC5uYW1lLnNwbGl0KCc6JylbMF19OmAgOiAnJztcbiAgICAgICAgcGF0Y2hGaWVsZHMucHVzaChgJHthc3NvY2lhdGlvbk5hbWV9cHpJbnNLZXlgKTtcbiAgICAgICAgcGF0Y2hGaWVsZHMucHVzaChgJHthc3NvY2lhdGlvbk5hbWV9cHhSZWZPYmplY3RDbGFzc2ApO1xuICAgICAgfSBlbHNlIGlmIChmaWVsZC5jdXN0b21PYmplY3QgJiYgZmllbGQuY3VzdG9tT2JqZWN0LmlzQXNzb2NpYXRpb24pIHtcbiAgICAgICAgY29uc3QgYXNzb2NpYXRpb25DYXRlZ29yeSA9IGZpZWxkLm5hbWUuc3BsaXQoJzonKVswXTtcbiAgICAgICAgcGF0Y2hGaWVsZHMucHVzaChgJHthc3NvY2lhdGlvbkNhdGVnb3J5fTpweUlEYCk7XG4gICAgICAgIHBhdGNoRmllbGRzLnB1c2goYCR7YXNzb2NpYXRpb25DYXRlZ29yeX06cHpJbnNLZXlgKTtcbiAgICAgICAgcGF0Y2hGaWVsZHMucHVzaChgJHthc3NvY2lhdGlvbkNhdGVnb3J5fTpweE9iakNsYXNzYCk7XG4gICAgICB9IGVsc2UgaWYgKGlzRGF0YU9iamVjdCkge1xuICAgICAgICBjb25zdCBkYXRhVmlld05hbWUgPSBQQ29yZS5nZXREYXRhVHlwZVV0aWxzKCkuZ2V0U2F2YWJsZURhdGFQYWdlKGNsYXNzSUQpO1xuICAgICAgICBjb25zdCBkYXRhUGFnZUtleXMgPSBQQ29yZS5nZXREYXRhVHlwZVV0aWxzKCkuZ2V0RGF0YVBhZ2VLZXlzKGRhdGFWaWV3TmFtZSk7XG4gICAgICAgIGRhdGFQYWdlS2V5cz8uZm9yRWFjaChpdGVtID0+IChpdGVtLmlzQWx0ZXJuYXRlS2V5U3RvcmFnZSA/IHBhdGNoRmllbGRzLnB1c2goaXRlbS5saW5rZWRGaWVsZCkgOiBwYXRjaEZpZWxkcy5wdXNoKGl0ZW0ua2V5TmFtZSkpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhdGNoRmllbGRzLnB1c2goJ3B5SUQnKTtcbiAgICAgICAgcGF0Y2hGaWVsZHMucHVzaCgncHpJbnNLZXknKTtcbiAgICAgICAgcGF0Y2hGaWVsZHMucHVzaCgncHhPYmpDbGFzcycpO1xuICAgICAgfVxuICAgIH1cbiAgICBwYXRjaEZpZWxkcy5mb3JFYWNoKGsgPT4ge1xuICAgICAgaWYgKCFxdWVyeUZpZWxkcy5maW5kKHEgPT4gcSA9PT0gaykpIHtcbiAgICAgICAgcXVlcnlGaWVsZHMucHVzaChrKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHF1ZXJ5RmllbGRzO1xufVxuXG4vKipcbiAqIFVwZGF0ZSB0aGUgcmVuZGVyZXIgdHlwZSBmb3IgdGhlIHByb3BlcnRpZXMgb2YgdHlwZSBQYWdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlUGFnZUZpZWxkc0NvbmZpZyhjb25maWdGaWVsZHMsIHBhcmVudENsYXNzSUQpIHtcbiAgcmV0dXJuIGNvbmZpZ0ZpZWxkcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHR5cGUsXG4gICAgICBjb25maWc6IHsgdmFsdWUgfVxuICAgIH0gPSBpdGVtO1xuICAgIGNvbnN0IHByb3BlcnR5TmFtZSA9IFBDb3JlLmdldEFubm90YXRpb25VdGlscygpLmdldFByb3BlcnR5TmFtZSh2YWx1ZSk7XG4gICAgaWYgKGlzRW1iZWRkZWRGaWVsZCh2YWx1ZSkgJiYgIWlzUGFnZUxpc3RJblBhdGgocHJvcGVydHlOYW1lLCBwYXJlbnRDbGFzc0lEKSkge1xuICAgICAgaXRlbS5jb25maWcuY29tcG9uZW50VHlwZSA9IHR5cGU7XG4gICAgICBpdGVtLnR5cGUgPSAnUGFnZVByb3BlcnR5UmVuZGVyZXInO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCByZWFkQ29udGV4dFJlc3BvbnNlID0gYXN5bmMgKGNvbnRleHQsIHBhcmFtcykgPT4ge1xuICBjb25zdCB7IHBDb25uJCwgYXBpQ29udGV4dCwgY2hpbGRyZW4sIHNob3dEeW5hbWljRmllbGRzLCByZWZlcmVuY2VMaXN0LCBpc0RhdGFPYmplY3QgfSA9IHBhcmFtcztcbiAgLy8gbGV0IHsgbGlzdENvbnRleHQgfSA9IHBhcmFtcztcbiAgY29uc3QgeyBwcm9taXNlc1Jlc3BvbnNlQXJyYXksIGFwaUNvbnRleHQ6IG90aGVyQ29udGV4dCB9ID0gY29udGV4dDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNvbmFyanMvbm8tdW51c2VkLWNvbGxlY3Rpb25cbiAgY29uc3QgbGlzdE9mQ29tcG9uZW50czogYW55W10gPSBbXTtcbiAgY29uc3Qge1xuICAgIGRhdGE6IHsgZmllbGRzOiBtZXRhRmllbGRzLCBjbGFzc0lELCBpc1F1ZXJ5YWJsZSB9XG4gIH0gPSBwcm9taXNlc1Jlc3BvbnNlQXJyYXlbMF07XG4gIGxldCB7XG4gICAgZGF0YTogeyBwcmltYXJ5RmllbGRzIH1cbiAgfSA9IHByb21pc2VzUmVzcG9uc2VBcnJheVswXTtcbiAgLy8gV2hlbiBsaXN0IGlzIGNvbmZpZ3VyZWQgd2l0aCBJbmNsdWRlIGFsbCBjbGFzcyBmaWVsZHMgY29uZmlndXJhdGlvbiwgcHJvdmlkZSBzdXBwb3J0IGZvciBQcmltYXJ5IGZpZWxkcyBjb2x1bW5cbiAgaWYgKHNob3dEeW5hbWljRmllbGRzKSB7XG4gICAgY29uc3Qgc291cmNlTWV0YWRhdGEgPSBQQ29yZS5nZXRNZXRhZGF0YVV0aWxzKCkuZ2V0RGF0YVBhZ2VNZXRhZGF0YShyZWZlcmVuY2VMaXN0KTtcbiAgICBpZiAoc291cmNlTWV0YWRhdGE/LnByaW1hcnlGaWVsZHMpIHtcbiAgICAgIHByaW1hcnlGaWVsZHMgPSBzb3VyY2VNZXRhZGF0YS5wcmltYXJ5RmllbGRzO1xuICAgIH1cbiAgICAvLyB1cGRhdGluZyBtZXRhRGF0YSBmaWVsZElEIHRvIG5vcm1hbCBwcm9wZXJ0eSBpZiBpdCBoYXMgZmllbGRJRCBzdGFydHMgd2l0aCAhUCEgb3IgIVBMIVxuICAgIHVwZGF0ZU1ldGFFbWJlZGRlZEZpZWxkSUQobWV0YUZpZWxkcyk7XG4gIH1cbiAgdXBkYXRlRmllbGRUeXBlKG1ldGFGaWVsZHMpO1xuXG4gIGlmIChpc0RhdGFPYmplY3QpIHtcbiAgICBjb25zdCBjb21wb3NpdGVLZXlzOiBhbnlbXSA9IFtdO1xuICAgIGNvbnN0IGRhdGFWaWV3TmFtZSA9IFBDb3JlLmdldERhdGFUeXBlVXRpbHMoKS5nZXRTYXZhYmxlRGF0YVBhZ2UoY2xhc3NJRCk7XG4gICAgY29uc3QgZGF0YVBhZ2VLZXlzID0gUENvcmUuZ2V0RGF0YVR5cGVVdGlscygpLmdldERhdGFQYWdlS2V5cyhkYXRhVmlld05hbWUpO1xuICAgIGRhdGFQYWdlS2V5cz8uZm9yRWFjaChpdGVtID0+IChpdGVtLmlzQWx0ZXJuYXRlS2V5U3RvcmFnZSA/IGNvbXBvc2l0ZUtleXMucHVzaChpdGVtLmxpbmtlZEZpZWxkKSA6IGNvbXBvc2l0ZUtleXMucHVzaChpdGVtLmtleU5hbWUpKSk7XG4gICAgaWYgKGNvbXBvc2l0ZUtleXMubGVuZ3RoICYmIG90aGVyQ29udGV4dCkge1xuICAgICAgb3RoZXJDb250ZXh0LnNldENvbXBvc2l0ZUtleXMoY29tcG9zaXRlS2V5cyk7XG4gICAgfVxuICAgIGlmIChvdGhlckNvbnRleHQpIHtcbiAgICAgIG90aGVyQ29udGV4dC5mZXRjaFJvd0FjdGlvbkRldGFpbHMgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHByZXNldEFycmF5ID0gW107XG4gIGNvbnN0IHJhd01ldGFkYXRhID0gcENvbm4kLmdldFJhd01ldGFkYXRhKCkuY29uZmlnO1xuICBjb25zdCByYXdQcmVzZXRzID0gcmF3TWV0YWRhdGEucHJlc2V0cztcbiAgY29uc3QgaXNNZXRhV2l0aFByZXNldHMgPSByYXdQcmVzZXRzICYmIHJhd1ByZXNldHMubGVuZ3RoICE9PSAwO1xuICBjb25zdCBjaGlsZHJlbkl0ZXJhdG9yID0gaXNNZXRhV2l0aFByZXNldHMgPyByYXdQcmVzZXRzIDogY2hpbGRyZW47XG4gIGNvbnN0IHJlc29sdmVkUHJlc2V0cyA9IHBDb25uJC5nZXRDb25maWdQcm9wcygpLnByZXNldHM7XG4gIGxldCBmaWVsZHM7XG4gIGxldCB0YWJsZUNvbmZpZztcbiAgY2hpbGRyZW5JdGVyYXRvcj8uZm9yRWFjaCgocHJlc2V0TWV0YSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCB7IGNvbmZpZ0ZpZWxkcyB9ID0gZ2V0VGFibGVDb25maWdGcm9tUHJlc2V0TWV0YShcbiAgICAgIHsgLi4ucHJlc2V0TWV0YSwgbGFiZWw6IHJlc29sdmVkUHJlc2V0c1tpbmRleF0ubGFiZWwgfSxcbiAgICAgIGlzTWV0YVdpdGhQcmVzZXRzLFxuICAgICAgcENvbm4kLFxuICAgICAgY2xhc3NJRCxcbiAgICAgIHByaW1hcnlGaWVsZHMsXG4gICAgICBtZXRhRmllbGRzXG4gICAgKTtcbiAgICBjb25zdCBwdXNoVG9Db21wb25lbnRzTGlzdCA9IGZpZWxkVHlwZSA9PiB7XG4gICAgICBsaXN0T2ZDb21wb25lbnRzLnB1c2goZmllbGRUeXBlKTtcbiAgICB9O1xuICAgIC8vIHJlYWQgcmVwb3J0IGNvbHVtbnMgcmVzcG9uc2UgLSBpbiBjYXNlIG9mIG5vbnF1ZXJ5YWJsZSBpZ25vcmUgdGhlIHJlc3BvbnNlIGFuZCByZWx5IG9ubHkgb24gdGhlIGZpZWxkcyBjb25maWd1cmVkIGF0IGF1dGhvaW5nIHRpbWUgaW4gcHJlc2V0c1xuICAgIGNvbnN0IHJlcG9ydENvbHVtbnNTZXQgPSBpc1F1ZXJ5YWJsZSA/IGdldFJlcG9ydENvbHVtbnMocHJvbWlzZXNSZXNwb25zZUFycmF5WzFdKSA6IG5ldyBTZXQoKTtcblxuICAgIGNvbnN0IGNvbmZpZ0ZpZWxkU2V0ID0gcHJlcGFyZUNvbmZpZ0ZpZWxkcyhjb25maWdGaWVsZHMsIHB1c2hUb0NvbXBvbmVudHNMaXN0KTtcblxuICAgIC8vIEZJWE1FICNFbWJlZGRlZFByb3BlcnR5UGF0Y2hcbiAgICAvLyBUT0RPOiBSZW1vdmUgdGhpcyBtZXJnZSBsb2dpYyB3aGVuIHRoZSBtZXRhZGF0YSByZXNwb25zZSBpbmNsdWRlcyBhbGwgb3B0aW1pemVkIGVtYmVkZGVkIHBhZ2UgYW5kIHBhZ2VsaXN0c1xuICAgIC8vIG1lcmdpbmcgY29uZmlndXJlZCBlbWJlZGRlZCBwcm9wZXJ0aWVzIHdpdGggbWV0YWRhdGEgc28gdGhhdCB3aGlsZSBwcmVwYXJpbmcgZXh0cmEgZmllbGRzLCBjb25maWcgZmllbGRzIGNhbiBnZXQgb3RoZXIgcHJvcGVydGllcyBmcm9tIG1ldGEoZWc6IGNhdGVnb3J5LCBkaXNwbGF5QXNMaW5rKVxuICAgIC8vIGdldCBjb25maWd1cmVkIGVtYmVkZGVkIHByb3BlcnRpZXMgbWV0YWRhdGEgYW5kIGdldCBuZXcgbWVyZ2VkTWV0YUZpZWxkc1xuICAgIGNvbnN0IGNvbmZpZ0VtYmVkZGVkRmllbGRzTWV0YSA9IGdldENvbmZpZ0VtYmVkZGVkRmllbGRzTWV0YShjb25maWdGaWVsZFNldCwgY2xhc3NJRCk7XG4gICAgY29uc3QgbWVyZ2VkTWV0YUZpZWxkcyA9IG1lcmdlQ29uZmlnRW1iZWRkZWRGaWVsZHNNZXRhKGNvbmZpZ0VtYmVkZGVkRmllbGRzTWV0YSwgbWV0YUZpZWxkcyk7XG5cbiAgICBjb25zdCBleHRyYUZpZWxkcyA9IHByZXBhcmVFeHRyYUZpZWxkcyhcbiAgICAgIG1lcmdlZE1ldGFGaWVsZHMsIC8vIHBhc3NpbmcgbmV3IG1lcmdlZCBtZXRhIGZpZWxkcyB3aGljaCBoYXMgbWV0YSBvZiBjb25maWd1cmVkIGVtYmVkZGVkIGZpZWxkcyBvZiBjdXJyZW50IHByZXNldFxuICAgICAgY29uZmlnRmllbGRzLFxuICAgICAgY29uZmlnRmllbGRTZXQsXG4gICAgICByZXBvcnRDb2x1bW5zU2V0LFxuICAgICAgY2xhc3NJRCxcbiAgICAgIHNob3dEeW5hbWljRmllbGRzXG4gICAgKTtcblxuICAgIGlmIChpc1F1ZXJ5YWJsZSkge1xuICAgICAgdXBkYXRlUGFnZUZpZWxkc0NvbmZpZyhjb25maWdGaWVsZHMsIGNsYXNzSUQpO1xuICAgICAgcHJlcGFyZVByb3BlcnR5TWFwcyhbLi4uY29uZmlnRmllbGRzLCAuLi5leHRyYUZpZWxkc10sIGNsYXNzSUQsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgZ2V0TWFwcGVkUHJvcGVydHkgfSA9IGNvbnRleHQ7XG5cbiAgICBmaWVsZHMgPSBpbml0aWFsaXplQ29sdW1ucyhbLi4uY29uZmlnRmllbGRzLCAuLi5leHRyYUZpZWxkc10sIGdldE1hcHBlZFByb3BlcnR5KTtcbiAgICBjb25zdCBwYXRjaFF1ZXJ5RmllbGRzID0gcHJlcGFyZVBhdGNoUXVlcnlGaWVsZHMoZmllbGRzLCBpc0RhdGFPYmplY3QsIGNsYXNzSUQpO1xuICAgIGNvbnN0IGl0ZW1LZXkgPSBnZXRJdGVtS2V5KGZpZWxkcyk7XG4gICAgdGFibGVDb25maWcgPSB7IGZpZWxkRGVmczogZmllbGRzLCBwYXRjaFF1ZXJ5RmllbGRzLCBpdGVtS2V5LCBpc1F1ZXJ5YWJsZSB9O1xuICB9KTtcbiAgY29uc3QgbWV0YSA9IHRhYmxlQ29uZmlnO1xuICBwYXJhbXMubGlzdENvbnRleHQgPSB7IG1ldGEsIHByZXNldHM6IHByZXNldEFycmF5LCBhcGlDb250ZXh0OiB7IC4uLmFwaUNvbnRleHQgfSB9O1xuICByZXR1cm4gcGFyYW1zLmxpc3RDb250ZXh0O1xufTtcbiJdfQ==
@@ -30,10 +30,10 @@ export class MultiReferenceReadonlyComponent {
30
30
  this.configProps$ = this.pConn$.getConfigProps();
31
31
  this.label = this.configProps$.label;
32
32
  }
33
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: MultiReferenceReadonlyComponent, deps: [{ token: i1.AngularPConnectService }], target: i0.ɵɵFactoryTarget.Component }); }
34
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: MultiReferenceReadonlyComponent, isStandalone: true, selector: "app-multi-reference-readonly", inputs: { pConn$: "pConn$", formGroup$: "formGroup$" }, ngImport: i0, template: "<div>\n <h3 style=\"font-weight: bold; margin: 0\">{{ label }}</h3>\n <component-mapper name=\"SimpleTable\" [props]=\"{ pConn$ }\"></component-mapper>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: i0.forwardRef(() => ComponentMapperComponent), selector: "component-mapper", inputs: ["name", "props", "errorMsg", "outputEvents", "parent"] }] }); }
33
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MultiReferenceReadonlyComponent, deps: [{ token: i1.AngularPConnectService }], target: i0.ɵɵFactoryTarget.Component }); }
34
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MultiReferenceReadonlyComponent, isStandalone: true, selector: "app-multi-reference-readonly", inputs: { pConn$: "pConn$", formGroup$: "formGroup$" }, ngImport: i0, template: "<div>\n <h3 style=\"font-weight: bold; margin: 0\">{{ label }}</h3>\n <component-mapper name=\"SimpleTable\" [props]=\"{ pConn$ }\"></component-mapper>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: i0.forwardRef(() => ComponentMapperComponent), selector: "component-mapper", inputs: ["name", "props", "errorMsg", "outputEvents", "parent"] }] }); }
35
35
  }
36
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: MultiReferenceReadonlyComponent, decorators: [{
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MultiReferenceReadonlyComponent, decorators: [{
37
37
  type: Component,
38
38
  args: [{ selector: 'app-multi-reference-readonly', standalone: true, imports: [forwardRef(() => ComponentMapperComponent)], template: "<div>\n <h3 style=\"font-weight: bold; margin: 0\">{{ label }}</h3>\n <component-mapper name=\"SimpleTable\" [props]=\"{ pConn$ }\"></component-mapper>\n</div>\n" }]
39
39
  }], ctorParameters: () => [{ type: i1.AngularPConnectService }], propDecorators: { pConn$: [{
@@ -16,10 +16,10 @@ export class NarrowWideFormComponent {
16
16
  updateSelf() {
17
17
  this.arChildren$ = this.pConn$.getChildren();
18
18
  }
19
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NarrowWideFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
20
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: NarrowWideFormComponent, isStandalone: true, selector: "app-narrow-wide-form", inputs: { pConn$: "pConn$", formGroup$: "formGroup$" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"psdk-narrow-wide-column\">\n <div *ngFor=\"let kid of arChildren$\">\n <div class=\"psdk-narrow-column\" *ngIf=\"kid.getPConnect().getRawMetadata()['name'].toLowerCase() === 'left'\">\n <component-mapper name=\"Region\" [props]=\"{ pConn$: kid.getPConnect(), formGroup$ }\"></component-mapper>\n </div>\n <div class=\"psdk-wide-column\" *ngIf=\"kid.getPConnect().getRawMetadata()['name'].toLowerCase() === 'right'\">\n <component-mapper name=\"Region\" [props]=\"{ pConn$: kid.getPConnect(), formGroup$ }\"></component-mapper>\n </div>\n <div class=\"psdk-narrow-column\" *ngIf=\"kid.getPConnect().getRawMetadata()['name'].toLowerCase() === 'a'\">\n <component-mapper name=\"Region\" [props]=\"{ pConn$: kid.getPConnect(), formGroup$ }\"></component-mapper>\n </div>\n <div class=\"psdk-wide-column\" *ngIf=\"kid.getPConnect().getRawMetadata()['name'].toLowerCase() === 'b'\">\n <component-mapper name=\"Region\" [props]=\"{ pConn$: kid.getPConnect(), formGroup$ }\"></component-mapper>\n </div>\n </div>\n</div>\n", styles: ["*{box-sizing:border-box}.psdk-narrow-wide-column{display:flow-root;height:100%}.psdk-narrow-column{float:left;min-width:30%;padding:0rem .3125rem}.psdk-wide-column{float:left;width:70%;padding:0rem .3125rem}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CommonModule) }, { kind: "directive", type: i0.forwardRef(() => i1.NgForOf), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i0.forwardRef(() => ComponentMapperComponent), selector: "component-mapper", inputs: ["name", "props", "errorMsg", "outputEvents", "parent"] }] }); }
19
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NarrowWideFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
20
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: NarrowWideFormComponent, isStandalone: true, selector: "app-narrow-wide-form", inputs: { pConn$: "pConn$", formGroup$: "formGroup$" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"psdk-narrow-wide-column\">\n <div *ngFor=\"let kid of arChildren$\">\n <div class=\"psdk-narrow-column\" *ngIf=\"kid.getPConnect().getRawMetadata()['name'].toLowerCase() === 'left'\">\n <component-mapper name=\"Region\" [props]=\"{ pConn$: kid.getPConnect(), formGroup$ }\"></component-mapper>\n </div>\n <div class=\"psdk-wide-column\" *ngIf=\"kid.getPConnect().getRawMetadata()['name'].toLowerCase() === 'right'\">\n <component-mapper name=\"Region\" [props]=\"{ pConn$: kid.getPConnect(), formGroup$ }\"></component-mapper>\n </div>\n <div class=\"psdk-narrow-column\" *ngIf=\"kid.getPConnect().getRawMetadata()['name'].toLowerCase() === 'a'\">\n <component-mapper name=\"Region\" [props]=\"{ pConn$: kid.getPConnect(), formGroup$ }\"></component-mapper>\n </div>\n <div class=\"psdk-wide-column\" *ngIf=\"kid.getPConnect().getRawMetadata()['name'].toLowerCase() === 'b'\">\n <component-mapper name=\"Region\" [props]=\"{ pConn$: kid.getPConnect(), formGroup$ }\"></component-mapper>\n </div>\n </div>\n</div>\n", styles: ["*{box-sizing:border-box}.psdk-narrow-wide-column{display:flow-root;height:100%}.psdk-narrow-column{float:left;min-width:30%;padding:0rem .3125rem}.psdk-wide-column{float:left;width:70%;padding:0rem .3125rem}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CommonModule) }, { kind: "directive", type: i0.forwardRef(() => i1.NgForOf), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i0.forwardRef(() => ComponentMapperComponent), selector: "component-mapper", inputs: ["name", "props", "errorMsg", "outputEvents", "parent"] }] }); }
21
21
  }
22
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: NarrowWideFormComponent, decorators: [{
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NarrowWideFormComponent, decorators: [{
23
23
  type: Component,
24
24
  args: [{ selector: 'app-narrow-wide-form', standalone: true, imports: [CommonModule, forwardRef(() => ComponentMapperComponent)], template: "<div class=\"psdk-narrow-wide-column\">\n <div *ngFor=\"let kid of arChildren$\">\n <div class=\"psdk-narrow-column\" *ngIf=\"kid.getPConnect().getRawMetadata()['name'].toLowerCase() === 'left'\">\n <component-mapper name=\"Region\" [props]=\"{ pConn$: kid.getPConnect(), formGroup$ }\"></component-mapper>\n </div>\n <div class=\"psdk-wide-column\" *ngIf=\"kid.getPConnect().getRawMetadata()['name'].toLowerCase() === 'right'\">\n <component-mapper name=\"Region\" [props]=\"{ pConn$: kid.getPConnect(), formGroup$ }\"></component-mapper>\n </div>\n <div class=\"psdk-narrow-column\" *ngIf=\"kid.getPConnect().getRawMetadata()['name'].toLowerCase() === 'a'\">\n <component-mapper name=\"Region\" [props]=\"{ pConn$: kid.getPConnect(), formGroup$ }\"></component-mapper>\n </div>\n <div class=\"psdk-wide-column\" *ngIf=\"kid.getPConnect().getRawMetadata()['name'].toLowerCase() === 'b'\">\n <component-mapper name=\"Region\" [props]=\"{ pConn$: kid.getPConnect(), formGroup$ }\"></component-mapper>\n </div>\n </div>\n</div>\n", styles: ["*{box-sizing:border-box}.psdk-narrow-wide-column{display:flow-root;height:100%}.psdk-narrow-column{float:left;min-width:30%;padding:0rem .3125rem}.psdk-wide-column{float:left;width:70%;padding:0rem .3125rem}\n"] }]
25
25
  }], propDecorators: { pConn$: [{
@@ -17,10 +17,10 @@ export class OneColumnComponent extends FormTemplateBase {
17
17
  updateSelf() {
18
18
  this.arChildren$ = this.pConn$.getChildren();
19
19
  }
20
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: OneColumnComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
21
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: OneColumnComponent, isStandalone: true, selector: "app-one-column", inputs: { pConn$: "pConn$", formGroup$: "formGroup$" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div *ngFor=\"let kid of arChildren$\">\n <div *ngIf=\"kid.getPConnect().getRawMetadata()['type'] === 'Region' && kid.getPConnect().getRawMetadata()['name'] === 'A'\">\n <component-mapper name=\"Region\" [props]=\"{ pConn$: kid.getPConnect(), formGroup$ }\"></component-mapper>\n </div>\n <div *ngIf=\"kid.getPConnect().getRawMetadata()['type'] === 'View'\">\n <component-mapper name=\"View\" [props]=\"{ pConn$: kid.getPConnect(), formGroup$ }\"></component-mapper>\n </div>\n <div *ngIf=\"kid.getPConnect().getRawMetadata()['type'] === 'CaseCreateStage'\">\n <component-mapper name=\"CaseCreateStage\" [props]=\"{ pConn$: kid.getPConnect(), formGroup$ }\"></component-mapper>\n </div>\n</div>\n", styles: ["*{box-sizing:border-box}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CommonModule) }, { kind: "directive", type: i0.forwardRef(() => i1.NgForOf), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i0.forwardRef(() => ComponentMapperComponent), selector: "component-mapper", inputs: ["name", "props", "errorMsg", "outputEvents", "parent"] }] }); }
20
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OneColumnComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
21
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: OneColumnComponent, isStandalone: true, selector: "app-one-column", inputs: { pConn$: "pConn$", formGroup$: "formGroup$" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div *ngFor=\"let kid of arChildren$\">\n <div *ngIf=\"kid.getPConnect().getRawMetadata()['type'] === 'Region' && kid.getPConnect().getRawMetadata()['name'] === 'A'\">\n <component-mapper name=\"Region\" [props]=\"{ pConn$: kid.getPConnect(), formGroup$ }\"></component-mapper>\n </div>\n <div *ngIf=\"kid.getPConnect().getRawMetadata()['type'] === 'View'\">\n <component-mapper name=\"View\" [props]=\"{ pConn$: kid.getPConnect(), formGroup$ }\"></component-mapper>\n </div>\n <div *ngIf=\"kid.getPConnect().getRawMetadata()['type'] === 'CaseCreateStage'\">\n <component-mapper name=\"CaseCreateStage\" [props]=\"{ pConn$: kid.getPConnect(), formGroup$ }\"></component-mapper>\n </div>\n</div>\n", styles: ["*{box-sizing:border-box}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CommonModule) }, { kind: "directive", type: i0.forwardRef(() => i1.NgForOf), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i0.forwardRef(() => ComponentMapperComponent), selector: "component-mapper", inputs: ["name", "props", "errorMsg", "outputEvents", "parent"] }] }); }
22
22
  }
23
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: OneColumnComponent, decorators: [{
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OneColumnComponent, decorators: [{
24
24
  type: Component,
25
25
  args: [{ selector: 'app-one-column', standalone: true, imports: [CommonModule, forwardRef(() => ComponentMapperComponent)], template: "<div *ngFor=\"let kid of arChildren$\">\n <div *ngIf=\"kid.getPConnect().getRawMetadata()['type'] === 'Region' && kid.getPConnect().getRawMetadata()['name'] === 'A'\">\n <component-mapper name=\"Region\" [props]=\"{ pConn$: kid.getPConnect(), formGroup$ }\"></component-mapper>\n </div>\n <div *ngIf=\"kid.getPConnect().getRawMetadata()['type'] === 'View'\">\n <component-mapper name=\"View\" [props]=\"{ pConn$: kid.getPConnect(), formGroup$ }\"></component-mapper>\n </div>\n <div *ngIf=\"kid.getPConnect().getRawMetadata()['type'] === 'CaseCreateStage'\">\n <component-mapper name=\"CaseCreateStage\" [props]=\"{ pConn$: kid.getPConnect(), formGroup$ }\"></component-mapper>\n </div>\n</div>\n", styles: ["*{box-sizing:border-box}\n"] }]
26
26
  }], propDecorators: { pConn$: [{
@@ -2,10 +2,10 @@ import { Component, Input, forwardRef } from '@angular/core';
2
2
  import { ComponentMapperComponent } from '../../../_bridge/component-mapper/component-mapper.component';
3
3
  import * as i0 from "@angular/core";
4
4
  export class OneColumnPageComponent {
5
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: OneColumnPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: OneColumnPageComponent, isStandalone: true, selector: "app-one-column-page", inputs: { pConn$: "pConn$", formGroup$: "formGroup$" }, ngImport: i0, template: "<component-mapper name=\"OneColumn\" [props]=\"{ formGroup$, pConn$ }\"></component-mapper>\n", styles: [""], dependencies: [{ kind: "component", type: i0.forwardRef(() => ComponentMapperComponent), selector: "component-mapper", inputs: ["name", "props", "errorMsg", "outputEvents", "parent"] }] }); }
5
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OneColumnPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: OneColumnPageComponent, isStandalone: true, selector: "app-one-column-page", inputs: { pConn$: "pConn$", formGroup$: "formGroup$" }, ngImport: i0, template: "<component-mapper name=\"OneColumn\" [props]=\"{ formGroup$, pConn$ }\"></component-mapper>\n", styles: [""], dependencies: [{ kind: "component", type: i0.forwardRef(() => ComponentMapperComponent), selector: "component-mapper", inputs: ["name", "props", "errorMsg", "outputEvents", "parent"] }] }); }
7
7
  }
8
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: OneColumnPageComponent, decorators: [{
8
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OneColumnPageComponent, decorators: [{
9
9
  type: Component,
10
10
  args: [{ selector: 'app-one-column-page', standalone: true, imports: [forwardRef(() => ComponentMapperComponent)], template: "<component-mapper name=\"OneColumn\" [props]=\"{ formGroup$, pConn$ }\"></component-mapper>\n" }]
11
11
  }], propDecorators: { pConn$: [{
@@ -16,10 +16,10 @@ export class OneColumnTabComponent {
16
16
  updateSelf() {
17
17
  this.arChildren$ = this.pConn$.getChildren();
18
18
  }
19
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: OneColumnTabComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
20
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: OneColumnTabComponent, isStandalone: true, selector: "app-one-column-tab", inputs: { pConn$: "pConn$", formGroup$: "formGroup$" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"psdk-one-column-tab\">\n <div *ngFor=\"let kid of arChildren$\">\n <div [ngSwitch]=\"kid.getPConnect().getComponentName()\">\n <component-mapper *ngSwitchCase=\"'View'\" name=\"View\" [props]=\"{ pConn$: kid.getPConnect() }\"></component-mapper>\n <component-mapper *ngSwitchCase=\"'Region'\" name=\"Region\" [props]=\"{ pConn$: kid.getPConnect() }\"></component-mapper>\n <div *ngSwitchDefault>Page Missing: {{ kid.getPConnect().getComponentName() }}</div>\n </div>\n </div>\n</div>\n", styles: [".psdk-one-column-tab{background-color:var(--app-form-color);margin-top:.5rem;margin-bottom:.5rem;border-radius:.3125rem;padding:10px}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CommonModule) }, { kind: "directive", type: i0.forwardRef(() => i1.NgForOf), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgSwitch), selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgSwitchCase), selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgSwitchDefault), selector: "[ngSwitchDefault]" }, { kind: "component", type: i0.forwardRef(() => ComponentMapperComponent), selector: "component-mapper", inputs: ["name", "props", "errorMsg", "outputEvents", "parent"] }] }); }
19
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OneColumnTabComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
20
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: OneColumnTabComponent, isStandalone: true, selector: "app-one-column-tab", inputs: { pConn$: "pConn$", formGroup$: "formGroup$" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"psdk-one-column-tab\">\n <div *ngFor=\"let kid of arChildren$\">\n <div [ngSwitch]=\"kid.getPConnect().getComponentName()\">\n <component-mapper *ngSwitchCase=\"'View'\" name=\"View\" [props]=\"{ pConn$: kid.getPConnect() }\"></component-mapper>\n <component-mapper *ngSwitchCase=\"'Region'\" name=\"Region\" [props]=\"{ pConn$: kid.getPConnect() }\"></component-mapper>\n <div *ngSwitchDefault>Page Missing: {{ kid.getPConnect().getComponentName() }}</div>\n </div>\n </div>\n</div>\n", styles: [".psdk-one-column-tab{background-color:var(--app-form-color);margin-top:.5rem;margin-bottom:.5rem;border-radius:.3125rem;padding:10px}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CommonModule) }, { kind: "directive", type: i0.forwardRef(() => i1.NgForOf), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgSwitch), selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgSwitchCase), selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i0.forwardRef(() => i1.NgSwitchDefault), selector: "[ngSwitchDefault]" }, { kind: "component", type: i0.forwardRef(() => ComponentMapperComponent), selector: "component-mapper", inputs: ["name", "props", "errorMsg", "outputEvents", "parent"] }] }); }
21
21
  }
22
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: OneColumnTabComponent, decorators: [{
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: OneColumnTabComponent, decorators: [{
23
23
  type: Component,
24
24
  args: [{ selector: 'app-one-column-tab', standalone: true, imports: [CommonModule, forwardRef(() => ComponentMapperComponent)], template: "<div class=\"psdk-one-column-tab\">\n <div *ngFor=\"let kid of arChildren$\">\n <div [ngSwitch]=\"kid.getPConnect().getComponentName()\">\n <component-mapper *ngSwitchCase=\"'View'\" name=\"View\" [props]=\"{ pConn$: kid.getPConnect() }\"></component-mapper>\n <component-mapper *ngSwitchCase=\"'Region'\" name=\"Region\" [props]=\"{ pConn$: kid.getPConnect() }\"></component-mapper>\n <div *ngSwitchDefault>Page Missing: {{ kid.getPConnect().getComponentName() }}</div>\n </div>\n </div>\n</div>\n", styles: [".psdk-one-column-tab{background-color:var(--app-form-color);margin-top:.5rem;margin-bottom:.5rem;border-radius:.3125rem;padding:10px}\n"] }]
25
25
  }], propDecorators: { pConn$: [{
@@ -38,10 +38,10 @@ export class PageComponent {
38
38
  // this.psService.sendMessage(false);
39
39
  }
40
40
  }
41
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: PageComponent, deps: [{ token: i1.AngularPConnectService }], target: i0.ɵɵFactoryTarget.Component }); }
42
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: PageComponent, isStandalone: true, selector: "app-page", inputs: { pConn$: "pConn$", formGroup$: "formGroup$" }, ngImport: i0, template: "<div class=\"psdk-page-title\">\n <h2>{{ title$ }}</h2>\n</div>\n<div class=\"page-body\">\n <div *ngFor=\"let kid of arChildren$\">\n <div [ngSwitch]=\"kid.getPConnect().getComponentName()\">\n <component-mapper *ngSwitchCase=\"'View'\" name=\"View\" [props]=\"{ pConn$: kid.getPConnect() }\"></component-mapper>\n <component-mapper *ngSwitchCase=\"'Region'\" name=\"Region\" [props]=\"{ pConn$: kid.getPConnect() }\"></component-mapper>\n <div *ngSwitchDefault>Page Missing: {{ kid.getPConnect().getComponentName() }}</div>\n </div>\n </div>\n</div>\n", styles: [".psdk-page-title{padding-left:.2rem}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CommonModule) }, { kind: "directive", type: i0.forwardRef(() => i2.NgForOf), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(() => i2.NgSwitch), selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i0.forwardRef(() => i2.NgSwitchCase), selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i0.forwardRef(() => i2.NgSwitchDefault), selector: "[ngSwitchDefault]" }, { kind: "component", type: i0.forwardRef(() => ComponentMapperComponent), selector: "component-mapper", inputs: ["name", "props", "errorMsg", "outputEvents", "parent"] }] }); }
41
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PageComponent, deps: [{ token: i1.AngularPConnectService }], target: i0.ɵɵFactoryTarget.Component }); }
42
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PageComponent, isStandalone: true, selector: "app-page", inputs: { pConn$: "pConn$", formGroup$: "formGroup$" }, ngImport: i0, template: "<div class=\"psdk-page-title\">\n <h2>{{ title$ }}</h2>\n</div>\n<div class=\"page-body\">\n <div *ngFor=\"let kid of arChildren$\">\n <div [ngSwitch]=\"kid.getPConnect().getComponentName()\">\n <component-mapper *ngSwitchCase=\"'View'\" name=\"View\" [props]=\"{ pConn$: kid.getPConnect() }\"></component-mapper>\n <component-mapper *ngSwitchCase=\"'Region'\" name=\"Region\" [props]=\"{ pConn$: kid.getPConnect() }\"></component-mapper>\n <div *ngSwitchDefault>Page Missing: {{ kid.getPConnect().getComponentName() }}</div>\n </div>\n </div>\n</div>\n", styles: [".psdk-page-title{padding-left:.2rem}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CommonModule) }, { kind: "directive", type: i0.forwardRef(() => i2.NgForOf), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(() => i2.NgSwitch), selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i0.forwardRef(() => i2.NgSwitchCase), selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i0.forwardRef(() => i2.NgSwitchDefault), selector: "[ngSwitchDefault]" }, { kind: "component", type: i0.forwardRef(() => ComponentMapperComponent), selector: "component-mapper", inputs: ["name", "props", "errorMsg", "outputEvents", "parent"] }] }); }
43
43
  }
44
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: PageComponent, decorators: [{
44
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PageComponent, decorators: [{
45
45
  type: Component,
46
46
  args: [{ selector: 'app-page', standalone: true, imports: [CommonModule, forwardRef(() => ComponentMapperComponent)], template: "<div class=\"psdk-page-title\">\n <h2>{{ title$ }}</h2>\n</div>\n<div class=\"page-body\">\n <div *ngFor=\"let kid of arChildren$\">\n <div [ngSwitch]=\"kid.getPConnect().getComponentName()\">\n <component-mapper *ngSwitchCase=\"'View'\" name=\"View\" [props]=\"{ pConn$: kid.getPConnect() }\"></component-mapper>\n <component-mapper *ngSwitchCase=\"'Region'\" name=\"Region\" [props]=\"{ pConn$: kid.getPConnect() }\"></component-mapper>\n <div *ngSwitchDefault>Page Missing: {{ kid.getPConnect().getComponentName() }}</div>\n </div>\n </div>\n</div>\n", styles: [".psdk-page-title{padding-left:.2rem}\n"] }]
47
47
  }], ctorParameters: () => [{ type: i1.AngularPConnectService }], propDecorators: { pConn$: [{
@@ -125,10 +125,10 @@ export class PromotedFiltersComponent {
125
125
  this.showTable = false;
126
126
  this.pConn$?.getListActions?.()?.setSelectedRows([]); // Clear the selection (if any made by user)
127
127
  }
128
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: PromotedFiltersComponent, deps: [{ token: i1.AngularPConnectService }], target: i0.ɵɵFactoryTarget.Component }); }
129
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: PromotedFiltersComponent, isStandalone: true, selector: "app-promoted-filters", inputs: { viewName: "viewName", filters: "filters", listViewProps: "listViewProps", pageClass: "pageClass", pConn$: "pConn$", formGroup$: "formGroup$", parameters: "parameters" }, ngImport: i0, template: "<div>\n <div>{{ listViewProps.title }}</div>\n <div *ngIf=\"showFilters\" class=\"psdk-grid-filter\">\n <div *ngFor=\"let kid of processedFilters\">\n <component-mapper\n [name]=\"kid.getPConnect().getComponentName()\"\n [props]=\"{\n pConn$: kid.getPConnect(),\n formGroup$: formGroup$\n }\"\n errorMsg=\"Promoted filters wants component not yet available: {{ kid.getPConnect().getComponentName() }}\"\n ></component-mapper>\n </div>\n </div>\n\n <div>\n <button key=\"1\" type=\"button\" (click)=\"clearFilterData()\" data-testid=\"clear\" mat-raised-button color=\"secondary\">\n {{ localizedVal('Clear', localeCategory) }}\n </button>\n <button style=\"float: 'right'\" key=\"2\" type=\"submit\" (click)=\"getFilterData()\" data-testid=\"search\" mat-raised-button color=\"primary\">\n {{ localizedVal('Search', localeCategory) }}\n </button>\n </div>\n <div *ngIf=\"showTable\">\n <component-mapper name=\"ListView\" [props]=\"{ pConn$, payload }\"></component-mapper>\n </div>\n</div>\n", styles: [".psdk-grid-filter{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:1rem;row-gap:1rem;align-items:start}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CommonModule) }, { kind: "directive", type: i0.forwardRef(() => i2.NgForOf), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(() => i2.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatButtonModule) }, { kind: "component", type: i0.forwardRef(() => i3.MatButton), selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i0.forwardRef(() => ComponentMapperComponent), selector: "component-mapper", inputs: ["name", "props", "errorMsg", "outputEvents", "parent"] }] }); }
128
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PromotedFiltersComponent, deps: [{ token: i1.AngularPConnectService }], target: i0.ɵɵFactoryTarget.Component }); }
129
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PromotedFiltersComponent, isStandalone: true, selector: "app-promoted-filters", inputs: { viewName: "viewName", filters: "filters", listViewProps: "listViewProps", pageClass: "pageClass", pConn$: "pConn$", formGroup$: "formGroup$", parameters: "parameters" }, ngImport: i0, template: "<div>\n <div>{{ listViewProps.title }}</div>\n <div *ngIf=\"showFilters\" class=\"psdk-grid-filter\">\n <div *ngFor=\"let kid of processedFilters\">\n <component-mapper\n [name]=\"kid.getPConnect().getComponentName()\"\n [props]=\"{\n pConn$: kid.getPConnect(),\n formGroup$: formGroup$\n }\"\n errorMsg=\"Promoted filters wants component not yet available: {{ kid.getPConnect().getComponentName() }}\"\n ></component-mapper>\n </div>\n </div>\n\n <div>\n <button key=\"1\" type=\"button\" (click)=\"clearFilterData()\" data-testid=\"clear\" mat-raised-button color=\"secondary\">\n {{ localizedVal('Clear', localeCategory) }}\n </button>\n <button style=\"float: 'right'\" key=\"2\" type=\"submit\" (click)=\"getFilterData()\" data-testid=\"search\" mat-raised-button color=\"primary\">\n {{ localizedVal('Search', localeCategory) }}\n </button>\n </div>\n <div *ngIf=\"showTable\">\n <component-mapper name=\"ListView\" [props]=\"{ pConn$, payload }\"></component-mapper>\n </div>\n</div>\n", styles: [".psdk-grid-filter{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:1rem;row-gap:1rem;align-items:start}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CommonModule) }, { kind: "directive", type: i0.forwardRef(() => i2.NgForOf), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(() => i2.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatButtonModule) }, { kind: "component", type: i0.forwardRef(() => i3.MatButton), selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i0.forwardRef(() => ComponentMapperComponent), selector: "component-mapper", inputs: ["name", "props", "errorMsg", "outputEvents", "parent"] }] }); }
130
130
  }
131
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: PromotedFiltersComponent, decorators: [{
131
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PromotedFiltersComponent, decorators: [{
132
132
  type: Component,
133
133
  args: [{ selector: 'app-promoted-filters', standalone: true, imports: [CommonModule, MatButtonModule, forwardRef(() => ComponentMapperComponent)], template: "<div>\n <div>{{ listViewProps.title }}</div>\n <div *ngIf=\"showFilters\" class=\"psdk-grid-filter\">\n <div *ngFor=\"let kid of processedFilters\">\n <component-mapper\n [name]=\"kid.getPConnect().getComponentName()\"\n [props]=\"{\n pConn$: kid.getPConnect(),\n formGroup$: formGroup$\n }\"\n errorMsg=\"Promoted filters wants component not yet available: {{ kid.getPConnect().getComponentName() }}\"\n ></component-mapper>\n </div>\n </div>\n\n <div>\n <button key=\"1\" type=\"button\" (click)=\"clearFilterData()\" data-testid=\"clear\" mat-raised-button color=\"secondary\">\n {{ localizedVal('Clear', localeCategory) }}\n </button>\n <button style=\"float: 'right'\" key=\"2\" type=\"submit\" (click)=\"getFilterData()\" data-testid=\"search\" mat-raised-button color=\"primary\">\n {{ localizedVal('Search', localeCategory) }}\n </button>\n </div>\n <div *ngIf=\"showTable\">\n <component-mapper name=\"ListView\" [props]=\"{ pConn$, payload }\"></component-mapper>\n </div>\n</div>\n", styles: [".psdk-grid-filter{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:1rem;row-gap:1rem;align-items:start}\n"] }]
134
134
  }], ctorParameters: () => [{ type: i1.AngularPConnectService }], propDecorators: { viewName: [{
@@ -120,10 +120,10 @@ export class RepeatingStructuresComponent {
120
120
  getDisplayColumns(fields = []) {
121
121
  return fields.map((field) => field.name);
122
122
  }
123
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: RepeatingStructuresComponent, deps: [{ token: i1.ProgressSpinnerService }, { token: i2.Utils }], target: i0.ɵɵFactoryTarget.Component }); }
124
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: RepeatingStructuresComponent, isStandalone: true, selector: "app-repeating-structures", inputs: { pConn$: "pConn$" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }], ngImport: i0, template: "<div>\n <mat-form-field class=\"psdk-search\">\n <mat-label\n ><mat-icon class=\"psdk-icon-search\" style=\"transform: scale(1.2); width: 2rem; vertical-align: sub\" svgIcon=\"magnify\" mastListIcon></mat-icon>\n Search</mat-label\n >\n <input matInput (keyup)=\"applySearch($event)\" placeholder=\"\" />\n </mat-form-field>\n\n <table mat-table [dataSource]=\"repeatList$\" matSort>\n <ng-container *ngFor=\"let dCol of fields$\" [matColumnDef]=\"dCol.name\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>{{ dCol.label }}</th>\n <td mat-cell *matCellDef=\"let element\">{{ element[dCol.name] }}</td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns$\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns$\" (click)=\"rowClick(row)\"></tr>\n </table>\n\n <mat-paginator [pageSizeOptions]=\"[10, 20, 50, 100, 500]\" showFirstLastButtons></mat-paginator>\n</div>\n", styles: ["table{width:100%}.mat-mdc-row .mat-mdc-cell{text-align:left}.psdk-search{padding-left:.625rem}.psdk-icon-search{vertical-align:sub;padding:0rem .125rem;min-width:unset}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i7.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i7.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i7.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i7.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i7.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i7.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i7.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i7.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i7.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i7.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "directive", type: i8.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i8.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i9.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }] }); }
123
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RepeatingStructuresComponent, deps: [{ token: i1.ProgressSpinnerService }, { token: i2.Utils }], target: i0.ɵɵFactoryTarget.Component }); }
124
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RepeatingStructuresComponent, isStandalone: true, selector: "app-repeating-structures", inputs: { pConn$: "pConn$" }, viewQueries: [{ propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }, { propertyName: "sort", first: true, predicate: MatSort, descendants: true }], ngImport: i0, template: "<div>\n <mat-form-field class=\"psdk-search\">\n <mat-label\n ><mat-icon class=\"psdk-icon-search\" style=\"transform: scale(1.2); width: 2rem; vertical-align: sub\" svgIcon=\"magnify\" mastListIcon></mat-icon>\n Search</mat-label\n >\n <input matInput (keyup)=\"applySearch($event)\" placeholder=\"\" />\n </mat-form-field>\n\n <table mat-table [dataSource]=\"repeatList$\" matSort>\n <ng-container *ngFor=\"let dCol of fields$\" [matColumnDef]=\"dCol.name\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>{{ dCol.label }}</th>\n <td mat-cell *matCellDef=\"let element\">{{ element[dCol.name] }}</td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns$\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns$\" (click)=\"rowClick(row)\"></tr>\n </table>\n\n <mat-paginator [pageSizeOptions]=\"[10, 20, 50, 100, 500]\" showFirstLastButtons></mat-paginator>\n</div>\n", styles: ["table{width:100%}.mat-mdc-row .mat-mdc-cell{text-align:left}.psdk-search{padding-left:.625rem}.psdk-icon-search{vertical-align:sub;padding:0rem .125rem;min-width:unset}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i7.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i7.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i7.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i7.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i7.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i7.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i7.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i7.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i7.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i7.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "directive", type: i8.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i8.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i9.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }] }); }
125
125
  }
126
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: RepeatingStructuresComponent, decorators: [{
126
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RepeatingStructuresComponent, decorators: [{
127
127
  type: Component,
128
128
  args: [{ selector: 'app-repeating-structures', standalone: true, imports: [CommonModule, MatFormFieldModule, MatIconModule, MatInputModule, MatTableModule, MatSortModule, MatPaginatorModule], template: "<div>\n <mat-form-field class=\"psdk-search\">\n <mat-label\n ><mat-icon class=\"psdk-icon-search\" style=\"transform: scale(1.2); width: 2rem; vertical-align: sub\" svgIcon=\"magnify\" mastListIcon></mat-icon>\n Search</mat-label\n >\n <input matInput (keyup)=\"applySearch($event)\" placeholder=\"\" />\n </mat-form-field>\n\n <table mat-table [dataSource]=\"repeatList$\" matSort>\n <ng-container *ngFor=\"let dCol of fields$\" [matColumnDef]=\"dCol.name\">\n <th mat-header-cell *matHeaderCellDef mat-sort-header>{{ dCol.label }}</th>\n <td mat-cell *matCellDef=\"let element\">{{ element[dCol.name] }}</td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns$\"></tr>\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns$\" (click)=\"rowClick(row)\"></tr>\n </table>\n\n <mat-paginator [pageSizeOptions]=\"[10, 20, 50, 100, 500]\" showFirstLastButtons></mat-paginator>\n</div>\n", styles: ["table{width:100%}.mat-mdc-row .mat-mdc-cell{text-align:left}.psdk-search{padding-left:.625rem}.psdk-icon-search{vertical-align:sub;padding:0rem .125rem;min-width:unset}\n"] }]
129
129
  }], ctorParameters: () => [{ type: i1.ProgressSpinnerService }, { type: i2.Utils }], propDecorators: { paginator: [{