@pega/angular-sdk-components 24.2.12 → 25.1.11

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 (325) hide show
  1. package/fesm2022/pega-angular-sdk-components.mjs +4828 -3717
  2. package/fesm2022/pega-angular-sdk-components.mjs.map +1 -1
  3. package/index.d.ts +4963 -3
  4. package/package.json +21 -6
  5. package/esm2022/lib/_bridge/angular-pconnect.mjs +0 -428
  6. package/esm2022/lib/_bridge/component-mapper/component-mapper.component.mjs +0 -107
  7. package/esm2022/lib/_bridge/helpers/sdk-pega-component-map.mjs +0 -239
  8. package/esm2022/lib/_bridge/helpers/sdk_component_map.mjs +0 -142
  9. package/esm2022/lib/_components/designSystemExtension/alert/alert.component.mjs +0 -50
  10. package/esm2022/lib/_components/designSystemExtension/alert-banner/alert-banner.component.mjs +0 -29
  11. package/esm2022/lib/_components/designSystemExtension/banner/banner.component.mjs +0 -31
  12. package/esm2022/lib/_components/designSystemExtension/case-create-stage/case-create-stage.component.mjs +0 -51
  13. package/esm2022/lib/_components/designSystemExtension/field-group/field-group.component.mjs +0 -31
  14. package/esm2022/lib/_components/designSystemExtension/material-case-summary/material-case-summary.component.mjs +0 -82
  15. package/esm2022/lib/_components/designSystemExtension/material-details/material-details.component.mjs +0 -37
  16. package/esm2022/lib/_components/designSystemExtension/material-details-fields/material-details-fields.component.mjs +0 -38
  17. package/esm2022/lib/_components/designSystemExtension/material-summary-item/material-summary-item.component.mjs +0 -36
  18. package/esm2022/lib/_components/designSystemExtension/material-summary-list/material-summary-list.component.mjs +0 -25
  19. package/esm2022/lib/_components/designSystemExtension/material-utility/material-utility.component.mjs +0 -28
  20. package/esm2022/lib/_components/designSystemExtension/material-vertical-tabs/material-vertical-tabs.component.mjs +0 -42
  21. package/esm2022/lib/_components/designSystemExtension/operator/operator.component.mjs +0 -145
  22. package/esm2022/lib/_components/designSystemExtension/pulse/pulse.component.mjs +0 -33
  23. package/esm2022/lib/_components/designSystemExtension/rich-text-editor/rich-text-editor.component.mjs +0 -93
  24. package/esm2022/lib/_components/designSystemExtension/wss-quick-create/wss-quick-create.component.mjs +0 -18
  25. package/esm2022/lib/_components/field/auto-complete/auto-complete.component.mjs +0 -296
  26. package/esm2022/lib/_components/field/cancel-alert/cancel-alert.component.mjs +0 -96
  27. package/esm2022/lib/_components/field/check-box/check-box.component.mjs +0 -225
  28. package/esm2022/lib/_components/field/currency/currency.component.mjs +0 -195
  29. package/esm2022/lib/_components/field/date/date.component.mjs +0 -205
  30. package/esm2022/lib/_components/field/date-time/date-time.component.mjs +0 -196
  31. package/esm2022/lib/_components/field/decimal/decimal.component.mjs +0 -205
  32. package/esm2022/lib/_components/field/dropdown/dropdown.component.mjs +0 -300
  33. package/esm2022/lib/_components/field/email/email.component.mjs +0 -165
  34. package/esm2022/lib/_components/field/group/group.component.mjs +0 -64
  35. package/esm2022/lib/_components/field/integer/integer.component.mjs +0 -168
  36. package/esm2022/lib/_components/field/list-view-action-buttons/list-view-action-buttons.component.mjs +0 -45
  37. package/esm2022/lib/_components/field/multiselect/multiselect.component.mjs +0 -314
  38. package/esm2022/lib/_components/field/multiselect/utils.mjs +0 -187
  39. package/esm2022/lib/_components/field/percentage/percentage.component.mjs +0 -190
  40. package/esm2022/lib/_components/field/phone/phone.component.mjs +0 -155
  41. package/esm2022/lib/_components/field/radio-buttons/radio-buttons.component.mjs +0 -182
  42. package/esm2022/lib/_components/field/rich-text/rich-text.component.mjs +0 -109
  43. package/esm2022/lib/_components/field/scalar-list/scalar-list.component.mjs +0 -95
  44. package/esm2022/lib/_components/field/semantic-link/semantic-link.component.mjs +0 -57
  45. package/esm2022/lib/_components/field/text/text.component.mjs +0 -142
  46. package/esm2022/lib/_components/field/text-area/text-area.component.mjs +0 -165
  47. package/esm2022/lib/_components/field/text-content/text-content.component.mjs +0 -69
  48. package/esm2022/lib/_components/field/text-input/text-input.component.mjs +0 -165
  49. package/esm2022/lib/_components/field/time/time.component.mjs +0 -174
  50. package/esm2022/lib/_components/field/url/url.component.mjs +0 -165
  51. package/esm2022/lib/_components/field/user-reference/user-reference.component.mjs +0 -266
  52. package/esm2022/lib/_components/infra/Containers/base-components/flow-container-base.component.mjs +0 -18
  53. package/esm2022/lib/_components/infra/Containers/base-components/helper.mjs +0 -71
  54. package/esm2022/lib/_components/infra/Containers/flow-container/flow-container.component.mjs +0 -461
  55. package/esm2022/lib/_components/infra/Containers/flow-container/helpers.mjs +0 -68
  56. package/esm2022/lib/_components/infra/Containers/hybrid-view-container/hybrid-view-container.component.mjs +0 -24
  57. package/esm2022/lib/_components/infra/Containers/modal-view-container/modal-view-container.component.mjs +0 -335
  58. package/esm2022/lib/_components/infra/Containers/preview-view-container/preview-view-container.component.mjs +0 -32
  59. package/esm2022/lib/_components/infra/Containers/view-container/helper.mjs +0 -22
  60. package/esm2022/lib/_components/infra/Containers/view-container/view-container.component.mjs +0 -211
  61. package/esm2022/lib/_components/infra/action-buttons/action-buttons.component.mjs +0 -31
  62. package/esm2022/lib/_components/infra/assignment/assignment.component.mjs +0 -407
  63. package/esm2022/lib/_components/infra/assignment-card/assignment-card.component.mjs +0 -47
  64. package/esm2022/lib/_components/infra/dashboard-filter/dashboard-filter.component.mjs +0 -87
  65. package/esm2022/lib/_components/infra/defer-load/defer-load.component.mjs +0 -143
  66. package/esm2022/lib/_components/infra/error-boundary/error-boundary.component.mjs +0 -18
  67. package/esm2022/lib/_components/infra/multi-step/multi-step.component.mjs +0 -80
  68. package/esm2022/lib/_components/infra/navbar/navbar.component.mjs +0 -136
  69. package/esm2022/lib/_components/infra/reference/reference.component.mjs +0 -126
  70. package/esm2022/lib/_components/infra/region/region.component.mjs +0 -33
  71. package/esm2022/lib/_components/infra/root-container/root-container.component.mjs +0 -223
  72. package/esm2022/lib/_components/infra/stages/stages.component.mjs +0 -62
  73. package/esm2022/lib/_components/infra/view/view.component.mjs +0 -188
  74. package/esm2022/lib/_components/template/app-shell/app-shell.component.mjs +0 -156
  75. package/esm2022/lib/_components/template/banner-page/banner-page.component.mjs +0 -43
  76. package/esm2022/lib/_components/template/base/details-template-base.mjs +0 -56
  77. package/esm2022/lib/_components/template/base/form-template-base.mjs +0 -16
  78. package/esm2022/lib/_components/template/case-summary/case-summary.component.mjs +0 -101
  79. package/esm2022/lib/_components/template/case-view/case-view.component.mjs +0 -185
  80. package/esm2022/lib/_components/template/confirmation/confirmation.component.mjs +0 -68
  81. package/esm2022/lib/_components/template/data-reference/data-reference.component.mjs +0 -242
  82. package/esm2022/lib/_components/template/default-form/default-form.component.mjs +0 -73
  83. package/esm2022/lib/_components/template/details/details.component.mjs +0 -76
  84. package/esm2022/lib/_components/template/details-narrow-wide/details-narrow-wide.component.mjs +0 -45
  85. package/esm2022/lib/_components/template/details-one-column/details-one-column.component.mjs +0 -42
  86. package/esm2022/lib/_components/template/details-sub-tabs/details-sub-tabs.component.mjs +0 -39
  87. package/esm2022/lib/_components/template/details-three-column/details-three-column.component.mjs +0 -51
  88. package/esm2022/lib/_components/template/details-two-column/details-two-column.component.mjs +0 -48
  89. package/esm2022/lib/_components/template/details-wide-narrow/details-wide-narrow.component.mjs +0 -48
  90. package/esm2022/lib/_components/template/dynamic-tabs/dynamic-tabs.component.mjs +0 -65
  91. package/esm2022/lib/_components/template/field-group-list/field-group-list.component.mjs +0 -23
  92. package/esm2022/lib/_components/template/field-group-template/field-group-template.component.mjs +0 -131
  93. package/esm2022/lib/_components/template/field-value-list/field-value-list.component.mjs +0 -24
  94. package/esm2022/lib/_components/template/inline-dashboard/inline-dashboard.component.mjs +0 -22
  95. package/esm2022/lib/_components/template/inline-dashboard-page/inline-dashboard-page.component.mjs +0 -40
  96. package/esm2022/lib/_components/template/list-page/list-page.component.mjs +0 -14
  97. package/esm2022/lib/_components/template/list-view/DefaultViewMeta.mjs +0 -208
  98. package/esm2022/lib/_components/template/list-view/list-view.component.mjs +0 -1217
  99. package/esm2022/lib/_components/template/list-view/listViewHelpers.mjs +0 -60
  100. package/esm2022/lib/_components/template/list-view/utils.mjs +0 -662
  101. package/esm2022/lib/_components/template/multi-reference-readonly/multi-reference-readonly.component.mjs +0 -44
  102. package/esm2022/lib/_components/template/narrow-wide-form/narrow-wide-form.component.mjs +0 -30
  103. package/esm2022/lib/_components/template/one-column/one-column.component.mjs +0 -31
  104. package/esm2022/lib/_components/template/one-column-page/one-column-page.component.mjs +0 -16
  105. package/esm2022/lib/_components/template/one-column-tab/one-column-tab.component.mjs +0 -30
  106. package/esm2022/lib/_components/template/page/page.component.mjs +0 -52
  107. package/esm2022/lib/_components/template/promoted-filters/promoted-filters.component.mjs +0 -149
  108. package/esm2022/lib/_components/template/repeating-structures/repeating-structures.component.mjs +0 -138
  109. package/esm2022/lib/_components/template/simple-table/simple-table.component.mjs +0 -104
  110. package/esm2022/lib/_components/template/simple-table-manual/helpers.mjs +0 -271
  111. package/esm2022/lib/_components/template/simple-table-manual/simple-table-manual.component.mjs +0 -813
  112. package/esm2022/lib/_components/template/simple-table-select/simple-table-select.component.mjs +0 -129
  113. package/esm2022/lib/_components/template/single-reference-readonly/single-reference-readonly.component.mjs +0 -16
  114. package/esm2022/lib/_components/template/sub-tabs/sub-tabs.component.mjs +0 -67
  115. package/esm2022/lib/_components/template/three-column/three-column.component.mjs +0 -31
  116. package/esm2022/lib/_components/template/three-column-page/three-column-page.component.mjs +0 -16
  117. package/esm2022/lib/_components/template/two-column/two-column.component.mjs +0 -31
  118. package/esm2022/lib/_components/template/two-column-page/two-column-page.component.mjs +0 -40
  119. package/esm2022/lib/_components/template/two-column-tab/two-column-tab.component.mjs +0 -30
  120. package/esm2022/lib/_components/template/utils.mjs +0 -38
  121. package/esm2022/lib/_components/template/wide-narrow-form/wide-narrow-form.component.mjs +0 -31
  122. package/esm2022/lib/_components/template/wide-narrow-page/wide-narrow-page.component.mjs +0 -53
  123. package/esm2022/lib/_components/template/wss-nav-bar/wss-nav-bar.component.mjs +0 -137
  124. package/esm2022/lib/_components/widget/app-announcement/app-announcement.component.mjs +0 -24
  125. package/esm2022/lib/_components/widget/attachment/attachment.component.mjs +0 -393
  126. package/esm2022/lib/_components/widget/case-history/case-history.component.mjs +0 -80
  127. package/esm2022/lib/_components/widget/feed-container/feed-container.component.mjs +0 -521
  128. package/esm2022/lib/_components/widget/file-utility/file-utility.component.mjs +0 -638
  129. package/esm2022/lib/_components/widget/list-utility/list-utility.component.mjs +0 -57
  130. package/esm2022/lib/_components/widget/quick-create/quick-create.component.mjs +0 -75
  131. package/esm2022/lib/_components/widget/todo/todo.component.mjs +0 -230
  132. package/esm2022/lib/_components/widget/utility/utility.component.mjs +0 -34
  133. package/esm2022/lib/_directives/thousand-seperator.directive.mjs +0 -28
  134. package/esm2022/lib/_helpers/case-utils.mjs +0 -71
  135. package/esm2022/lib/_helpers/common.mjs +0 -20
  136. package/esm2022/lib/_helpers/createstage-utils.mjs +0 -15
  137. package/esm2022/lib/_helpers/currency-utils.mjs +0 -57
  138. package/esm2022/lib/_helpers/date-format-utils.mjs +0 -68
  139. package/esm2022/lib/_helpers/event-util.mjs +0 -18
  140. package/esm2022/lib/_helpers/field-group-utils.mjs +0 -47
  141. package/esm2022/lib/_helpers/filter-utils.mjs +0 -105
  142. package/esm2022/lib/_helpers/formatters/boolean.mjs +0 -20
  143. package/esm2022/lib/_helpers/formatters/common.mjs +0 -17
  144. package/esm2022/lib/_helpers/formatters/currency-map.mjs +0 -903
  145. package/esm2022/lib/_helpers/formatters/currency.mjs +0 -68
  146. package/esm2022/lib/_helpers/formatters/date.mjs +0 -69
  147. package/esm2022/lib/_helpers/formatters/format-utils.mjs +0 -76
  148. package/esm2022/lib/_helpers/formatters/index.mjs +0 -124
  149. package/esm2022/lib/_helpers/instructions-utils.mjs +0 -36
  150. package/esm2022/lib/_helpers/tab-utils.mjs +0 -59
  151. package/esm2022/lib/_helpers/template-utils.mjs +0 -56
  152. package/esm2022/lib/_helpers/utils.mjs +0 -412
  153. package/esm2022/lib/_helpers/versionHelpers.mjs +0 -12
  154. package/esm2022/lib/_messages/error-messages.service.mjs +0 -31
  155. package/esm2022/lib/_messages/progress-spinner.service.mjs +0 -30
  156. package/esm2022/lib/_messages/update-worklist.service.mjs +0 -30
  157. package/esm2022/lib/_services/banner.service.mjs +0 -35
  158. package/esm2022/lib/_services/case.service.mjs +0 -32
  159. package/esm2022/lib/_services/datapage.service.mjs +0 -52
  160. package/esm2022/lib/_services/endpoints.mjs +0 -60
  161. package/esm2022/lib/_services/server-config.service.mjs +0 -52
  162. package/esm2022/lib/_types/PConnProps.interface.mjs +0 -2
  163. package/esm2022/pega-angular-sdk-components.mjs +0 -5
  164. package/esm2022/public-api.mjs +0 -145
  165. package/esm2022/sdk-local-component-map.mjs +0 -9
  166. package/lib/_bridge/angular-pconnect.d.ts +0 -142
  167. package/lib/_bridge/component-mapper/component-mapper.component.d.ts +0 -20
  168. package/lib/_bridge/helpers/sdk-pega-component-map.d.ts +0 -219
  169. package/lib/_bridge/helpers/sdk_component_map.d.ts +0 -3
  170. package/lib/_components/designSystemExtension/alert/alert.component.d.ts +0 -12
  171. package/lib/_components/designSystemExtension/alert-banner/alert-banner.component.d.ts +0 -13
  172. package/lib/_components/designSystemExtension/banner/banner.component.d.ts +0 -14
  173. package/lib/_components/designSystemExtension/case-create-stage/case-create-stage.component.d.ts +0 -19
  174. package/lib/_components/designSystemExtension/field-group/field-group.component.d.ts +0 -12
  175. package/lib/_components/designSystemExtension/material-case-summary/material-case-summary.component.d.ts +0 -20
  176. package/lib/_components/designSystemExtension/material-details/material-details.component.d.ts +0 -15
  177. package/lib/_components/designSystemExtension/material-details-fields/material-details-fields.component.d.ts +0 -13
  178. package/lib/_components/designSystemExtension/material-summary-item/material-summary-item.component.d.ts +0 -15
  179. package/lib/_components/designSystemExtension/material-summary-list/material-summary-list.component.d.ts +0 -9
  180. package/lib/_components/designSystemExtension/material-utility/material-utility.component.d.ts +0 -16
  181. package/lib/_components/designSystemExtension/material-vertical-tabs/material-vertical-tabs.component.d.ts +0 -11
  182. package/lib/_components/designSystemExtension/operator/operator.component.d.ts +0 -25
  183. package/lib/_components/designSystemExtension/pulse/pulse.component.d.ts +0 -15
  184. package/lib/_components/designSystemExtension/rich-text-editor/rich-text-editor.component.d.ts +0 -23
  185. package/lib/_components/designSystemExtension/wss-quick-create/wss-quick-create.component.d.ts +0 -7
  186. package/lib/_components/field/auto-complete/auto-complete.component.d.ts +0 -79
  187. package/lib/_components/field/cancel-alert/cancel-alert.component.d.ts +0 -23
  188. package/lib/_components/field/check-box/check-box.component.d.ts +0 -69
  189. package/lib/_components/field/currency/currency.component.d.ts +0 -54
  190. package/lib/_components/field/date/date.component.d.ts +0 -76
  191. package/lib/_components/field/date-time/date-time.component.d.ts +0 -62
  192. package/lib/_components/field/decimal/decimal.component.d.ts +0 -54
  193. package/lib/_components/field/dropdown/dropdown.component.d.ts +0 -71
  194. package/lib/_components/field/email/email.component.d.ts +0 -45
  195. package/lib/_components/field/group/group.component.d.ts +0 -32
  196. package/lib/_components/field/integer/integer.component.d.ts +0 -45
  197. package/lib/_components/field/list-view-action-buttons/list-view-action-buttons.component.d.ts +0 -14
  198. package/lib/_components/field/multiselect/multiselect.component.d.ts +0 -64
  199. package/lib/_components/field/multiselect/utils.d.ts +0 -8
  200. package/lib/_components/field/percentage/percentage.component.d.ts +0 -53
  201. package/lib/_components/field/phone/phone.component.d.ts +0 -43
  202. package/lib/_components/field/radio-buttons/radio-buttons.component.d.ts +0 -60
  203. package/lib/_components/field/rich-text/rich-text.component.d.ts +0 -43
  204. package/lib/_components/field/scalar-list/scalar-list.component.d.ts +0 -36
  205. package/lib/_components/field/semantic-link/semantic-link.component.d.ts +0 -29
  206. package/lib/_components/field/text/text.component.d.ts +0 -41
  207. package/lib/_components/field/text-area/text-area.component.d.ts +0 -46
  208. package/lib/_components/field/text-content/text-content.component.d.ts +0 -29
  209. package/lib/_components/field/text-input/text-input.component.d.ts +0 -46
  210. package/lib/_components/field/time/time.component.d.ts +0 -46
  211. package/lib/_components/field/url/url.component.d.ts +0 -45
  212. package/lib/_components/field/user-reference/user-reference.component.d.ts +0 -50
  213. package/lib/_components/infra/Containers/base-components/flow-container-base.component.d.ts +0 -8
  214. package/lib/_components/infra/Containers/base-components/helper.d.ts +0 -1
  215. package/lib/_components/infra/Containers/flow-container/flow-container.component.d.ts +0 -82
  216. package/lib/_components/infra/Containers/flow-container/helpers.d.ts +0 -3
  217. package/lib/_components/infra/Containers/hybrid-view-container/hybrid-view-container.component.d.ts +0 -14
  218. package/lib/_components/infra/Containers/modal-view-container/modal-view-container.component.d.ts +0 -69
  219. package/lib/_components/infra/Containers/preview-view-container/preview-view-container.component.d.ts +0 -14
  220. package/lib/_components/infra/Containers/view-container/helper.d.ts +0 -2
  221. package/lib/_components/infra/Containers/view-container/view-container.component.d.ts +0 -50
  222. package/lib/_components/infra/action-buttons/action-buttons.component.d.ts +0 -12
  223. package/lib/_components/infra/assignment/assignment.component.d.ts +0 -74
  224. package/lib/_components/infra/assignment-card/assignment-card.component.d.ts +0 -17
  225. package/lib/_components/infra/dashboard-filter/dashboard-filter.component.d.ts +0 -19
  226. package/lib/_components/infra/defer-load/defer-load.component.d.ts +0 -46
  227. package/lib/_components/infra/error-boundary/error-boundary.component.d.ts +0 -8
  228. package/lib/_components/infra/multi-step/multi-step.component.d.ts +0 -30
  229. package/lib/_components/infra/navbar/navbar.component.d.ts +0 -52
  230. package/lib/_components/infra/reference/reference.component.d.ts +0 -36
  231. package/lib/_components/infra/region/region.component.d.ts +0 -13
  232. package/lib/_components/infra/root-container/root-container.component.d.ts +0 -36
  233. package/lib/_components/infra/stages/stages.component.d.ts +0 -28
  234. package/lib/_components/infra/view/view.component.d.ts +0 -40
  235. package/lib/_components/template/app-shell/app-shell.component.d.ts +0 -54
  236. package/lib/_components/template/banner-page/banner-page.component.d.ts +0 -26
  237. package/lib/_components/template/base/details-template-base.d.ts +0 -21
  238. package/lib/_components/template/base/form-template-base.d.ts +0 -10
  239. package/lib/_components/template/case-summary/case-summary.component.d.ts +0 -35
  240. package/lib/_components/template/case-view/case-view.component.d.ts +0 -54
  241. package/lib/_components/template/confirmation/confirmation.component.d.ts +0 -37
  242. package/lib/_components/template/data-reference/data-reference.component.d.ts +0 -40
  243. package/lib/_components/template/default-form/default-form.component.d.ts +0 -22
  244. package/lib/_components/template/details/details.component.d.ts +0 -11
  245. package/lib/_components/template/details-narrow-wide/details-narrow-wide.component.d.ts +0 -12
  246. package/lib/_components/template/details-one-column/details-one-column.component.d.ts +0 -11
  247. package/lib/_components/template/details-sub-tabs/details-sub-tabs.component.d.ts +0 -13
  248. package/lib/_components/template/details-three-column/details-three-column.component.d.ts +0 -14
  249. package/lib/_components/template/details-two-column/details-two-column.component.d.ts +0 -14
  250. package/lib/_components/template/details-wide-narrow/details-wide-narrow.component.d.ts +0 -13
  251. package/lib/_components/template/dynamic-tabs/dynamic-tabs.component.d.ts +0 -20
  252. package/lib/_components/template/field-group-list/field-group-list.component.d.ts +0 -9
  253. package/lib/_components/template/field-group-template/field-group-template.component.d.ts +0 -55
  254. package/lib/_components/template/field-value-list/field-value-list.component.d.ts +0 -9
  255. package/lib/_components/template/inline-dashboard/inline-dashboard.component.d.ts +0 -15
  256. package/lib/_components/template/inline-dashboard-page/inline-dashboard-page.component.d.ts +0 -24
  257. package/lib/_components/template/list-page/list-page.component.d.ts +0 -6
  258. package/lib/_components/template/list-view/DefaultViewMeta.d.ts +0 -1
  259. package/lib/_components/template/list-view/list-view.component.d.ts +0 -165
  260. package/lib/_components/template/list-view/listViewHelpers.d.ts +0 -1
  261. package/lib/_components/template/list-view/utils.d.ts +0 -118
  262. package/lib/_components/template/multi-reference-readonly/multi-reference-readonly.component.d.ts +0 -24
  263. package/lib/_components/template/narrow-wide-form/narrow-wide-form.component.d.ts +0 -13
  264. package/lib/_components/template/one-column/one-column.component.d.ts +0 -14
  265. package/lib/_components/template/one-column-page/one-column-page.component.d.ts +0 -8
  266. package/lib/_components/template/one-column-tab/one-column-tab.component.d.ts +0 -13
  267. package/lib/_components/template/page/page.component.d.ts +0 -24
  268. package/lib/_components/template/promoted-filters/promoted-filters.component.d.ts +0 -34
  269. package/lib/_components/template/repeating-structures/repeating-structures.component.d.ts +0 -36
  270. package/lib/_components/template/simple-table/simple-table.component.d.ts +0 -42
  271. package/lib/_components/template/simple-table-manual/helpers.d.ts +0 -82
  272. package/lib/_components/template/simple-table-manual/simple-table-manual.component.d.ts +0 -168
  273. package/lib/_components/template/simple-table-select/simple-table-select.component.d.ts +0 -31
  274. package/lib/_components/template/single-reference-readonly/single-reference-readonly.component.d.ts +0 -8
  275. package/lib/_components/template/sub-tabs/sub-tabs.component.d.ts +0 -25
  276. package/lib/_components/template/three-column/three-column.component.d.ts +0 -14
  277. package/lib/_components/template/three-column-page/three-column-page.component.d.ts +0 -8
  278. package/lib/_components/template/two-column/two-column.component.d.ts +0 -14
  279. package/lib/_components/template/two-column-page/two-column-page.component.d.ts +0 -16
  280. package/lib/_components/template/two-column-tab/two-column-tab.component.d.ts +0 -13
  281. package/lib/_components/template/utils.d.ts +0 -9
  282. package/lib/_components/template/wide-narrow-form/wide-narrow-form.component.d.ts +0 -14
  283. package/lib/_components/template/wide-narrow-page/wide-narrow-page.component.d.ts +0 -19
  284. package/lib/_components/template/wss-nav-bar/wss-nav-bar.component.d.ts +0 -51
  285. package/lib/_components/widget/app-announcement/app-announcement.component.d.ts +0 -18
  286. package/lib/_components/widget/attachment/attachment.component.d.ts +0 -74
  287. package/lib/_components/widget/case-history/case-history.component.d.ts +0 -23
  288. package/lib/_components/widget/feed-container/feed-container.component.d.ts +0 -48
  289. package/lib/_components/widget/file-utility/file-utility.component.d.ts +0 -149
  290. package/lib/_components/widget/list-utility/list-utility.component.d.ts +0 -23
  291. package/lib/_components/widget/quick-create/quick-create.component.d.ts +0 -28
  292. package/lib/_components/widget/todo/todo.component.d.ts +0 -61
  293. package/lib/_components/widget/utility/utility.component.d.ts +0 -24
  294. package/lib/_directives/thousand-seperator.directive.d.ts +0 -9
  295. package/lib/_helpers/case-utils.d.ts +0 -19
  296. package/lib/_helpers/common.d.ts +0 -3
  297. package/lib/_helpers/createstage-utils.d.ts +0 -1
  298. package/lib/_helpers/currency-utils.d.ts +0 -10
  299. package/lib/_helpers/date-format-utils.d.ts +0 -12
  300. package/lib/_helpers/event-util.d.ts +0 -1
  301. package/lib/_helpers/field-group-utils.d.ts +0 -16
  302. package/lib/_helpers/filter-utils.d.ts +0 -46
  303. package/lib/_helpers/formatters/boolean.d.ts +0 -3
  304. package/lib/_helpers/formatters/common.d.ts +0 -2
  305. package/lib/_helpers/formatters/currency-map.d.ts +0 -1132
  306. package/lib/_helpers/formatters/currency.d.ts +0 -8
  307. package/lib/_helpers/formatters/date.d.ts +0 -9
  308. package/lib/_helpers/formatters/format-utils.d.ts +0 -8
  309. package/lib/_helpers/formatters/index.d.ts +0 -17
  310. package/lib/_helpers/instructions-utils.d.ts +0 -4
  311. package/lib/_helpers/tab-utils.d.ts +0 -4
  312. package/lib/_helpers/template-utils.d.ts +0 -16
  313. package/lib/_helpers/utils.d.ts +0 -40
  314. package/lib/_helpers/versionHelpers.d.ts +0 -8
  315. package/lib/_messages/error-messages.service.d.ts +0 -15
  316. package/lib/_messages/progress-spinner.service.d.ts +0 -14
  317. package/lib/_messages/update-worklist.service.d.ts +0 -14
  318. package/lib/_services/banner.service.d.ts +0 -8
  319. package/lib/_services/case.service.d.ts +0 -12
  320. package/lib/_services/datapage.service.d.ts +0 -14
  321. package/lib/_services/endpoints.d.ts +0 -38
  322. package/lib/_services/server-config.service.d.ts +0 -31
  323. package/lib/_types/PConnProps.interface.d.ts +0 -17
  324. package/public-api.d.ts +0 -140
  325. package/sdk-local-component-map.d.ts +0 -2
@@ -1,521 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-unused-vars */
2
- import { Component, Input } from '@angular/core';
3
- import { CommonModule } from '@angular/common';
4
- import { MatButtonModule } from '@angular/material/button';
5
- import { MatGridListModule } from '@angular/material/grid-list';
6
- import { MatInputModule } from '@angular/material/input';
7
- import { MatFormFieldModule } from '@angular/material/form-field';
8
- import isEqual from 'fast-deep-equal';
9
- import { Utils } from '../../../_helpers/utils';
10
- import * as i0 from "@angular/core";
11
- import * as i1 from "../../../_bridge/angular-pconnect";
12
- import * as i2 from "../../../_helpers/utils";
13
- import * as i3 from "@angular/common";
14
- import * as i4 from "@angular/material/form-field";
15
- import * as i5 from "@angular/material/input";
16
- import * as i6 from "@angular/material/grid-list";
17
- import * as i7 from "@angular/material/button";
18
- export class FeedContainerComponent {
19
- constructor(angularPConnect, cdRef, utils) {
20
- this.angularPConnect = angularPConnect;
21
- this.cdRef = cdRef;
22
- this.utils = utils;
23
- // Used with AngularPConnect
24
- this.angularPConnectData = {};
25
- this.showReplyComment$ = {};
26
- this.userData = new Map();
27
- this.pulseComment = {};
28
- }
29
- ngOnInit() {
30
- this.userName$ = PCore.getEnvironmentInfo().getOperatorName();
31
- this.imageKey$ = PCore.getEnvironmentInfo().getOperatorImageInsKey();
32
- this.updateCurrentUserName(this.userName$ ?? '');
33
- // First thing in initialization is registering and subscribing to the AngularPConnect service
34
- this.angularPConnectData = this.angularPConnect.registerAndSubscribeComponent(this, this.onStateChange);
35
- // Then, continue on with other initialization
36
- // debugger;
37
- // const {
38
- // fetchMessages,
39
- // likeMessage,
40
- // postMessage
41
- // } = FeedApi(this.pConn$);
42
- // this.fetchMessages = fetchMessages;
43
- // this.likeMessage = likeMessage;
44
- // this.postMessage = postMessage;
45
- // // this.userName$ = this.pConn$.getValue("pxRequestor.pxUserName");
46
- // // this.imageKey$ = this.pConn$.getValue("OperatorID.pyImageInsKey");
47
- // //this.userName$ = this.pConn$.getDataObject()["D_pxEnvironmentInfo"].pxOperator.pyUserName;
48
- // //this.imageKey$ = this.pConn$.getDataObject()["D_pxEnvironmentInfo"].pxOperator.pyImageInsKey;
49
- // this.userName$ = this.pConn$.getEnvironmentInfo().getOperatorName();
50
- // this.imageKey$ = this.pConn$.getEnvironmentInfo().getOperatorImageInsKey();
51
- // this.actionsAPI = this.pConn$.getActionsApi();
52
- // let owner = this.pConn$.getConfigProps().value;
53
- // // with new FeedAPI: owner is the proper value to pass in
54
- // // and no longer takes 2nd argument
55
- // this./*feedAPI.*/fetchMessages(owner /*, this.pConn$.getContextName()*/);
56
- // const configProps: any = this.pConn$.getConfigProps();
57
- // const { messageIDs } = configProps;
58
- // const { fetchMessages, postMessage, getMentionSuggestions, getTagSuggestions } = FeedApi(this.pConn$);
59
- const appName = PCore.getEnvironmentInfo().getApplicationName();
60
- let value = '';
61
- let feedID = '';
62
- let feedClass = '';
63
- if (this.pConn$.getCaseSummary().ID) {
64
- value = this.pConn$.getCaseSummary().ID;
65
- feedID = 'pyCaseFeed';
66
- feedClass = this.pConn$.getCaseSummary().content.classID;
67
- }
68
- else {
69
- value = `DATA-PORTAL $${appName}`;
70
- feedID = 'pyDashboardFeed';
71
- feedClass = '@baseclass';
72
- }
73
- const onUploadProgress = () => { };
74
- const errorHandler = () => { };
75
- const attachments = () => { };
76
- const postComment = ({ value: message, clear }) => {
77
- const attachmentIDs = [];
78
- const attachmentUtils = PCore.getAttachmentUtils();
79
- if (attachments && !!attachments.length) {
80
- /* attachments;
81
- .filter((file) => !file.error)
82
- .map((file) => {
83
- return attachmentUtils
84
- .uploadAttachment(file, onUploadProgress, errorHandler)
85
- .then((fileResponse) => {
86
- const fileConfig = {
87
- type: "File",
88
- category: "File",
89
- fileName: file.name,
90
- ID: fileResponse.data.ID
91
- };
92
- attachmentIDs.push(fileConfig);
93
- if (attachments.length === attachmentIDs.length) {
94
- postMessage(
95
- value,
96
- transformMarkdownToMsg(message),
97
- attachmentIDs
98
- );
99
- clear();
100
- setAttachments([]);
101
- }
102
- })
103
-
104
- .catch(console.error);
105
- }); */
106
- }
107
- else {
108
- // postMessage(value, transformMarkdownToMsg(message));
109
- clear();
110
- }
111
- };
112
- /*
113
-
114
- const { getPConnect, messageIDs } = props;
115
- const [mentionResults, setMentionResults] = useState([]);
116
- const [tagResults, setTagResults] = useState([]);
117
- const [attachments, setAttachments] = useState([]);
118
- const [feedFilters, setFeedFilters] = useState();
119
- const {
120
- fetchMessages,
121
- postMessage,
122
- getMentionSuggestions,
123
- getTagSuggestions
124
- } = FeedApi(getPConnect());
125
- const appName = PCore.getEnvironmentInfo().getApplicationName();
126
- let value = "";
127
- let feedID = "";
128
- let feedClass = "";
129
- if (getPConnect().getCaseSummary().ID) {
130
- value = getPConnect().getCaseSummary().ID;
131
- feedID = "pyCaseFeed";
132
- feedClass = getPConnect().getCaseSummary().content.classID;
133
- } else {
134
- value = `DATA-PORTAL $${appName}`;
135
- feedID = "pyDashboardFeed";
136
- feedClass = "@baseclass";
137
- }
138
- // For cancelling fetchrequest for filetrs
139
- const fetchMessagesCancelTokenSource = useRef([]);
140
-
141
- useEffect(() => {
142
- fetchMessages(
143
- value,
144
- feedID,
145
- feedClass,
146
- null,
147
- fetchMessagesCancelTokenSource.current
148
- ).then((res) => {
149
- setFeedFilters(res);
150
- });
151
- PCore.getAssetLoader().getLoader("component-loader")(["Activity"]);
152
- // eslint-disable-next-line react-hooks/exhaustive-deps
153
- }, []);
154
-
155
- const onUploadProgress = useCallback((file) => {
156
- return ({ loaded, total }) => {
157
- file.progress = Math.floor((loaded / total) * 100);
158
- setAttachments((current) => {
159
- return current.map((currFile) => {
160
- return currFile.name === file.name ? file : currFile;
161
- });
162
- });
163
- };
164
- }, []);
165
-
166
- const errorHandler = useCallback((isFetchCanceled, file) => {
167
- return (error) => {
168
- if (!isFetchCanceled(error)) {
169
- let localizedValue = "Upload failed";
170
- if (
171
- error.response &&
172
- error.response.data &&
173
- error.response.data.errorDetails
174
- ) {
175
- localizedValue = error.response.data.errorDetails[0].localizedValue;
176
- }
177
- delete file.progress;
178
- setAttachments((current) => {
179
- return current.map((currFile) => {
180
- if (currFile.name === file.name) {
181
- currFile.meta = localizedValue;
182
- currFile.error = true;
183
- }
184
- return currFile;
185
- });
186
- });
187
- error.isHandled = true;
188
- }
189
- throw error;
190
- };
191
- }, []);
192
-
193
- const postComment = ({ value: message, clear }) => {
194
- const attachmentIDs = [];
195
- const attachmentUtils = PCore.getAttachmentUtils();
196
- if (attachments && !!attachments.length) {
197
- attachments
198
- .filter((file) => !file.error)
199
- .map((file) => {
200
- return attachmentUtils
201
- .uploadAttachment(file, onUploadProgress, errorHandler)
202
- .then((fileResponse) => {
203
- const fileConfig = {
204
- type: "File",
205
- category: "File",
206
- fileName: file.name,
207
- ID: fileResponse.data.ID
208
- };
209
- attachmentIDs.push(fileConfig);
210
- if (attachments.length === attachmentIDs.length) {
211
- postMessage(
212
- value,
213
- transformMarkdownToMsg(message),
214
- attachmentIDs
215
- );
216
- clear();
217
- setAttachments([]);
218
- }
219
- })
220
-
221
- .catch(console.error);
222
- });
223
- } else {
224
- postMessage(value, transformMarkdownToMsg(message));
225
- clear();
226
- }
227
- };
228
-
229
- */
230
- /* On search is called when @ character is entered and will display the mention */
231
- /*
232
- const onSearch = debounce((event) => {
233
- if (event.type === "mention") {
234
- getMentionSuggestions({
235
- pulseContext: value,
236
- searchFor: event.search
237
- }).then((res) => {
238
- setMentionResults(res);
239
- });
240
- } else {
241
- getTagSuggestions({
242
- searchFor: event.search
243
- }).then((res) => {
244
- setTagResults(res);
245
- });
246
- }
247
- }, 150);
248
-
249
- const userName = getPConnect().getEnvironmentInfo().getOperatorName();
250
- const imageKey = getPConnect().getEnvironmentInfo().getOperatorImageInsKey();
251
-
252
- const onFilesAdded = useCallback((newlyAddedFiles) => {
253
- setAttachments((current) => [
254
- ...newlyAddedFiles.map((file) => {
255
- if (!validateMaxSize(file, 5)) {
256
- file.error = true;
257
- file.meta = "File is too big. Max allowed size is 5MB.";
258
- }
259
- file.icon = getIconFromFileType(file.type);
260
- file.onDelete = () => {
261
- setAttachments((c) => c.filter((f) => f.name !== file.name));
262
- };
263
- return file;
264
- }),
265
- ...current
266
- ]);
267
- }, []);
268
-
269
- const onFilterChange = useCallback(
270
- (filterID) => {
271
- const updatedFilters = [...feedFilters];
272
- const filterToUpdate = updatedFilters.find(
273
- (feedItem) => feedItem.id === filterID
274
- );
275
- filterToUpdate.on = !filterToUpdate.on;
276
- if (filterID === "All")
277
- updatedFilters.forEach((feedFilter) => {
278
- feedFilter.on = filterToUpdate.on;
279
- });
280
- else if (
281
- updatedFilters.find(
282
- (feedItem) => feedItem.on === false && feedItem.id !== "All"
283
- )
284
- )
285
- updatedFilters.find((feedItem) => feedItem.id === "All").on = false;
286
- else updatedFilters.find((feedItem) => feedItem.id === "All").on = true;
287
- setFeedFilters(updatedFilters);
288
- fetchMessages(
289
- value,
290
- feedID,
291
- feedClass,
292
- feedFilters,
293
- fetchMessagesCancelTokenSource.current
294
- );
295
- },
296
- [
297
- value,
298
- feedID,
299
- feedClass,
300
- feedFilters,
301
- fetchMessagesCancelTokenSource,
302
- fetchMessages
303
- ]
304
- );
305
-
306
- */
307
- // set up svg images
308
- this.svgComment$ = this.utils.getImageSrc('chat', this.utils.getSDKStaticContentUrl());
309
- this.svgLike$ = this.utils.getImageSrc('thumbs-up', this.utils.getSDKStaticContentUrl());
310
- this.svgLikedByMe$ = this.utils.getImageSrc('thumbs-up-solid', this.utils.getSDKStaticContentUrl());
311
- this.svgSend$ = this.utils.getImageSrc('send', this.utils.getSDKStaticContentUrl());
312
- }
313
- ngOnDestroy() {
314
- if (this.angularPConnectData.unsubscribeFn) {
315
- this.angularPConnectData.unsubscribeFn();
316
- }
317
- }
318
- // Callback passed when subscribing to store change
319
- onStateChange() {
320
- const bLogging = false;
321
- if (bLogging) {
322
- // console.log( `in ${this.constructor.name} onStateChange` );
323
- // debugger;
324
- }
325
- // Should always check the bridge to see if the component should update itself (re-render)
326
- const bUpdateSelf = this.angularPConnect.shouldComponentUpdate(this);
327
- // console.log( `${this.constructor.name} shouldComponentUpdate: ${bUpdateSelf}`);
328
- // ONLY call updateSelf when the component should update
329
- // AND removing the "gate" that was put there since shouldComponentUpdate
330
- // should be the real "gate"
331
- if (bUpdateSelf) {
332
- this.updateSelf();
333
- }
334
- else {
335
- const newPulseData = this.pConn$.getDataObject().pulse;
336
- if (!isEqual(newPulseData, this.pulseData)) {
337
- this.updateSelf();
338
- }
339
- }
340
- this.pulseData = this.pConn$.getDataObject().pulse;
341
- }
342
- updateSelf() {
343
- this.getMessageData();
344
- }
345
- getMessageData() {
346
- const messageIDs = this.pConn$.getConfigProps().messageIDs;
347
- const userName = this.pConn$.getConfigProps().currentUser;
348
- const imageKey = this.pConn$.getValue('OperatorID.pyImageInsKey');
349
- const oData = this.pConn$.getDataObject();
350
- if (messageIDs && messageIDs.length > 0) {
351
- this.pulseMessages$ = JSON.parse(JSON.stringify(oData.pulse.messages));
352
- // convert to just an array of objects
353
- this.pulseMessages$ = this.convertToArray(this.pulseMessages$);
354
- // create a copy, so we can modify
355
- this.pulseMessages$ = this.appendPulseMessage(this.pulseMessages$);
356
- // most recent on top
357
- this.pulseMessages$ = this.pulseMessages$.sort((a, b) => (a.updateTimeUTC < b.updateTimeUTC ? 1 : -1));
358
- }
359
- }
360
- convertToArray(messages) {
361
- const arMessages = [];
362
- for (let i = 0; i < messages.length; i++) {
363
- arMessages.push(messages[i]);
364
- }
365
- return arMessages;
366
- }
367
- appendPulseMessage(messages) {
368
- for (let i = 0; i < messages.length; i++) {
369
- const message = messages[i];
370
- const postedTime = message.postedTime;
371
- const updatedTime = message.updatedTime;
372
- this.showReplyComment$[message.ID] = false;
373
- message.displayPostedTime = this.utils.generateDateTime(postedTime, 'DateTime-Since');
374
- // for sorting lasted update
375
- if (updatedTime != null) {
376
- message.updateTimeUTC = new Date(updatedTime).getTime();
377
- }
378
- else {
379
- message.updateTimeUTC = new Date(postedTime).getTime();
380
- }
381
- message.displayPostedBy = message.postedByUser.name;
382
- message.displayPostedByInitials = this.utils.getInitials(message.postedByUser.name);
383
- // if didn't break, then look at the replies
384
- for (let j = 0; j < message.replies.length; j++) {
385
- const reply = message.replies[j];
386
- const replyPostedTime = reply.postedTime;
387
- reply.displayPostedTime = this.utils.generateDateTime(replyPostedTime, 'DateTime-Since');
388
- // let oReplyUser = this.userData.get(reply.postedByUser);
389
- const oReplyUser = reply.postedByUser;
390
- if (oReplyUser) {
391
- reply.displayPostedBy = oReplyUser.name;
392
- reply.displayPostedByInitials = this.utils.getInitials(oReplyUser.name);
393
- }
394
- }
395
- } // for
396
- return messages;
397
- }
398
- updateMessagesWithOperators() {
399
- for (let i = 0; i < this.pulseMessages$.length; i++) {
400
- const message = this.pulseMessages$[i];
401
- const postedTime = message.postedTime;
402
- this.showReplyComment$[message.ID] = false;
403
- message.displayPostedTime = this.utils.generateDateTime(postedTime, 'DateTime-Since');
404
- const oUser = this.userData.get(message.postedBy);
405
- if (oUser) {
406
- message.displayPostedBy = oUser.pyUserName;
407
- message.displayPostedByInitials = this.utils.getInitials(oUser.pyUserName);
408
- }
409
- else {
410
- const oUserParams = {
411
- OperatorId: message.postedBy
412
- };
413
- // Do something with oUserParams
414
- }
415
- // if didn't break, then look at the replies
416
- for (let j = 0; j < message.replies.length; j++) {
417
- const reply = message.replies[j];
418
- const replyPostedTime = reply.postedTime;
419
- reply.displayPostedTime = this.utils.generateDateTime(replyPostedTime, 'DateTime-Since');
420
- // let oReplyUser = this.userData.get(reply.postedByUser);
421
- const oReplyUser = reply.postedByUser;
422
- if (oReplyUser) {
423
- reply.displayPostedBy = oReplyUser.name;
424
- reply.displayPostedByInitials = this.utils.getInitials(oReplyUser.name);
425
- }
426
- }
427
- } // for
428
- }
429
- updateCurrentUserName(sUser) {
430
- this.currentUserInitials$ = this.utils.getInitials(sUser);
431
- this.currentUserName$ = sUser;
432
- }
433
- postClick() {
434
- // don't send a blank message
435
- if (this.pulseConversation && this.pulseConversation != '') {
436
- // let pulseMessage = {
437
- // contextName : this.pConn$.getContextName(),
438
- // message: this.pulseConversation,
439
- // pulseContext: this.pConn$.getValue(".pzInsKey")
440
- // };
441
- // debugger;
442
- // used to be: this./*feedAPI.*/postMessage(pulseMessage);
443
- // With latest FeedAPI, the 1st arg should be getConfigProps().value
444
- // If feedAPI is defined then only post message
445
- if (this.feedAPI) {
446
- this. /* feedAPI. */postMessage(this.pConn$.getConfigProps().value, this.pulseConversation);
447
- }
448
- else {
449
- console.log("We don't support Pulse yet");
450
- }
451
- }
452
- // clear out local copy
453
- document.getElementById('pulseMessage').value = '';
454
- this.pulseConversation = '';
455
- }
456
- messageChange(event) {
457
- this.pulseConversation = event.target.value;
458
- }
459
- likeClick(messageID, rMessageID, bLikedByMe, level) {
460
- let pulseMessage = {};
461
- if (level === 'top') {
462
- pulseMessage = {
463
- pulseContext: rMessageID,
464
- isReply: null,
465
- contextName: this.pConn$.getContextName(),
466
- likedBy: bLikedByMe,
467
- messageID
468
- };
469
- }
470
- else {
471
- pulseMessage = {
472
- pulseContext: rMessageID,
473
- isReply: true,
474
- contextName: this.pConn$.getContextName(),
475
- likedBy: bLikedByMe,
476
- messageID
477
- };
478
- }
479
- // debugger;
480
- this. /* feedAPI. */likeMessage(pulseMessage);
481
- }
482
- commentClick(messageID) {
483
- // iterator through messages, find match, turn on comment entry
484
- const foundMessage = this.pulseMessages$.find(message => message.ID === messageID);
485
- if (foundMessage) {
486
- this.showReplyComment$[foundMessage.ID] = true;
487
- }
488
- this.cdRef.detectChanges();
489
- }
490
- postCommentClick(messageID) {
491
- // debugger;
492
- if (this.pulseComment[messageID] && this.pulseComment[messageID] != '') {
493
- // let pulseMessage = {
494
- // contextName : this.pConn$.getContextName(),
495
- // message: this.pulseComment[messageID],
496
- // pulseContext: messageID,
497
- // reply: true
498
- // };
499
- // debugger;
500
- // Used to be: this./*feedAPI.*/postMessage(pulseMessage);
501
- // Latest update to API has changed and the postMessage actually gets
502
- // the pulse context...
503
- // used to use: contextName
504
- // new FeedAPI wants args to be messageID, this.pulseComment[messageID], true (since this is a reply)
505
- this. /* feedAPI. */postMessage(messageID, this.pulseComment[messageID], true);
506
- this.pulseComment[messageID] = '';
507
- }
508
- }
509
- newCommentChange(event, messageID) {
510
- this.pulseComment[messageID] = event.target.value;
511
- }
512
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeedContainerComponent, deps: [{ token: i1.AngularPConnectService }, { token: i0.ChangeDetectorRef }, { token: i2.Utils }], target: i0.ɵɵFactoryTarget.Component }); }
513
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FeedContainerComponent, isStandalone: true, selector: "app-feed-container", inputs: { pConn$: "pConn$" }, providers: [Utils], ngImport: i0, template: "<div>\n <div style=\"text-align: left\">\n <h3>Pulse</h3>\n\n <div class=\"psdk-pulse-divider\"></div>\n\n <br />\n <div class=\"psdk-pulse\">\n <div class=\"psdk-avatar-big\">{{ this.currentUserInitials$ }}</div>\n <mat-form-field class=\"psdk-full-width\">\n <textarea matInput rows=\"5\" id=\"pulseMessage\" placeholder=\"Start a conversation\" type=\"text\" (change)=\"messageChange($event)\"></textarea>\n </mat-form-field>\n </div>\n </div>\n</div>\n\n<mat-grid-list cols=\"2\" rowHeight=\"6.25rem\">\n <mat-grid-tile> </mat-grid-tile>\n <mat-grid-tile>\n <button mat-raised-button color=\"primary\" (click)=\"postClick()\">Post</button>\n </mat-grid-tile>\n</mat-grid-list>\n\n<div *ngFor=\"let pulseMessage of pulseMessages$; let odd = odd\" style=\"text-align: left\" [style.background-color]=\"odd ? 'white' : '#eeeeee'\">\n <div class=\"psdk-pulse-divider\"></div>\n <br />\n <div class=\"psdk-pulse\">\n <div class=\"psdk-avatar-big\">{{ pulseMessage.displayPostedByInitials }}</div>\n <div class=\"psdk-pulse-message-group\">\n <div class=\"psdk-pulse-message-by\">{{ pulseMessage.displayPostedBy }}</div>\n <div class=\"psdk-pulse-message-time\">{{ pulseMessage.displayPostedTime }}</div>\n </div>\n </div>\n <div class=\"psdk-pulse-message-text\">{{ pulseMessage.message }}</div>\n <div class=\"psdk-pulse-message-actions\">\n <div class=\"psdk-pulse-message-action-group\">\n <button mat-button (click)=\"commentClick(pulseMessage.ID)\">\n <img class=\"psdk-comment-svg-icon\" src=\"{{ svgComment$ }}\" />\n <label class=\"psdk-pulse-message-like-label\"\n >Comment <span *ngIf=\"pulseMessage?.replies.length > 0\"> | {{ pulseMessage.replies.length }}</span></label\n >\n </button>\n </div>\n <div class=\"psdk-pulse-message-action-like\">\n <div *ngIf=\"pulseMessage?.likeCount; else notLiked\">\n <button *ngIf=\"pulseMessage?.likedByMe == 'true'\" mat-button (click)=\"likeClick(pulseMessage.ID, pulseMessage.ID, true, 'top')\">\n <!-- <mat-icon class=\"psdk-icon-liked-by-me\" svgIcon=\"thumb-up\" mastListIcon ></mat-icon> -->\n <img class=\"psdk-liked-by-me-svg-icon\" src=\"{{ svgLikedByMe$ }}\" />\n <label class=\"psdk-pulse-message-like-label\">Like | {{ pulseMessage.likeCount }}</label>\n </button>\n <button *ngIf=\"pulseMessage?.likedByMe != 'true'\" mat-button (click)=\"likeClick(pulseMessage.ID, pulseMessage.ID, false, 'top')\">\n <!-- <mat-icon class=\"psdk-icon\" svgIcon=\"thumb-up-outline\" mastListIcon ></mat-icon> -->\n <img class=\"psdk-like-svg-icon\" src=\"{{ svgLike$ }}\" />\n <label class=\"psdk-pulse-message-like-label\">Like | {{ pulseMessage.likeCount }}</label>\n </button>\n </div>\n <ng-template #notLiked>\n <button mat-button (click)=\"likeClick(pulseMessage.ID, pulseMessage.ID, false, 'top')\">\n <!-- <mat-icon class=\"psdk-icon\" svgIcon=\"thumb-up-outline\" mastListIcon ></mat-icon> -->\n <img class=\"psdk-like-svg-icon\" src=\"{{ svgLike$ }}\" />\n <label class=\"psdk-pulse-message-like-label\">Like</label>\n </button>\n </ng-template>\n </div>\n </div>\n\n <div *ngIf=\"pulseMessage?.replies\" class=\"psdk-pulse-reply\">\n <div *ngFor=\"let replyMessage of pulseMessage.replies\" class=\"psdk-pulse-reply-align\">\n <div class=\"psdk-pulse-divider\"></div>\n <br />\n <div class=\"psdk-pulse-reply-group\">\n <div class=\"psdk-avatar\">{{ replyMessage.displayPostedByInitials }}</div>\n <div class=\"psdk-pulse-reply-by\">{{ replyMessage.displayPostedBy }}</div>\n <div class=\"psdk-pulse-reply-message\">{{ replyMessage.message }}</div>\n </div>\n <div class=\"psdk-pulse-reply-actions\">\n <button mat-button (click)=\"commentClick(pulseMessage.ID)\" class=\"psdk-pulse-reply-comment\">\n <img class=\"psdk-comment-svg-icon\" src=\"{{ svgComment$ }}\" />\n </button>\n <div *ngIf=\"replyMessage?.likeCount; else replyNotLiked\">\n <button\n *ngIf=\"replyMessage?.likedByMe === 'true'\"\n mat-button\n (click)=\"likeClick(pulseMessage.ID, replyMessage.ID, true, 'reply')\"\n class=\"psdk-pulse-reply-like\"\n >\n <img class=\"psdk-liked-by-me-svg-icon\" src=\"{{ svgLikedByMe$ }}\" />\n </button>\n <button\n *ngIf=\"replyMessage?.likedByMe != 'true'\"\n mat-button\n (click)=\"likeClick(pulseMessage.ID, replyMessage.ID, false, 'reply')\"\n class=\"psdk-pulse-reply-like\"\n >\n <img class=\"psdk-like-svg-icon\" src=\"{{ svgLike$ }}\" />\n </button>\n <label class=\"psdk-pulse-reply-like-label\">Like | {{ replyMessage.likeCount }}</label>\n </div>\n <ng-template #replyNotLiked>\n <button\n *ngIf=\"replyMessage?.likedByMe != 'true'\"\n mat-button\n (click)=\"likeClick(pulseMessage.ID, replyMessage.ID, false, 'reply')\"\n class=\"psdk-pulse-reply-like\"\n >\n <img class=\"psdk-like-svg-icon\" src=\"{{ svgLike$ }}\" />\n </button>\n </ng-template>\n\n <div class=\"psdk-pulse-reply-time\">{{ replyMessage.displayPostedTime }}</div>\n </div>\n <br />\n </div>\n\n <div *ngIf=\"showReplyComment$[pulseMessage.ID] == true\">\n <div class=\"psdk-pulse-divider\"></div>\n <br />\n <div class=\"psdk-pulse-comment-group\">\n <div class=\"psdk-avatar\">{{ this.currentUserInitials$ }}</div>\n <mat-form-field class=\"psdk-full-width\">\n <textarea\n matInput\n rows=\"5\"\n id=\"pulseMessage\"\n placeholder=\"Add a comment\"\n type=\"text\"\n (change)=\"newCommentChange($event, pulseMessage.ID)\"\n ></textarea>\n </mat-form-field>\n <button mat-button (click)=\"postCommentClick(pulseMessage.ID)\" class=\"psdk-pulse-comment-post\">\n <img class=\"psdk-send-svg-icon\" src=\"{{ svgSend$ }}\" />\n </button>\n </div>\n </div>\n </div>\n <br />\n</div>\n", styles: [".psdk-pulse-divider{border-bottom:.0625rem solid var(--app-neutral-light-color)}.psdk-full-width{width:100%;padding-left:.625rem}.psdk-icon{padding:0rem .125rem;min-width:unset;display:inline-block}.psdk-icon-liked-by-me{padding:0rem .125rem;min-width:unset;display:inline-block;color:var(--app-primary-color)}.psdk-send-svg-icon{width:1.4rem}.psdk-comment-svg-icon,.psdk-like-svg-icon{width:1.4rem;padding:0rem .3215rem}.psdk-liked-by-me-svg-icon{width:1.4rem;padding:0rem .3215rem;filter:var(--app-primary-color-filter)}.psdk-avatar{margin:0rem;padding:0rem;min-width:2.5rem;min-height:2.5rem;max-width:2.5rem;max-height:2.5rem;border-radius:50%;justify-content:center;align-items:center;text-align:center;display:flex;background:var(--app-primary-color);color:var(--app-form-color);font-weight:700;font-size:1.25rem}.psdk-avatar-big{margin:0rem;padding:0rem;min-width:3.125rem;min-height:3.125rem;max-width:3.125rem;max-height:3.125rem;border-radius:50%;justify-content:center;align-items:center;text-align:center;display:flex;background:var(--app-primary-color);color:var(--app-form-color);font-weight:700;font-size:1.5625rem}.psdk-pulse{display:inline-flex;width:100%;padding-bottom:.625rem}.psdk-pulse-message-group{display:flex;flex-direction:column;padding-left:.625rem}.psdk-pulse-message-by{margin-bottom:0rem;font-weight:700;font-size:.9375rem}.psdk-pulse-message-time{color:var(--app-pulse-message-color)}.psdk-pulse-message-text{white-space:pre-line}.psdk-pulse-message-actions{display:flex;flex-direction:row;padding-top:1.25rem}.psdk-pulse-message-action-group,.psdk-pulse-message-action-like{flex-basis:15em}.psdk-pulse-message-like-label{vertical-align:middle}.psdk-pulse-reply{padding-left:1.25rem}.psdk-pulse-reply-align{text-align:left}.psdk-pulse-reply-group{display:flex;flex-direction:row;align-items:center}.psdk-pulse-reply-by{padding:0rem .625rem;font-weight:700;font-size:.9375rem}.psdk-pulse-reply-message{background-color:var(--app-pulse-message-background-color);border-radius:.625rem;padding:0rem 1.25rem;white-space:pre-line}.psdk-pulse-reply-actions{display:flex;flex-direction:row;align-items:center;padding-left:3.125rem}.psdk-pulse-reply-comment,.psdk-pulse-reply-like{padding:0rem;min-width:1.875rem}.psdk-pulse-reply-like-label{vertical-align:middle;padding-right:.3125rem}.psdk-pulse-reply-time{color:var(--app-pulse-message-color);padding-left:.625rem}.psdk-pulse-comment-group{display:flex;flex-direction:row;align-items:center}.psdk-pulse-comment-post{padding:0rem;min-width:1.875rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i5.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: MatGridListModule }, { kind: "component", type: i6.MatGridList, selector: "mat-grid-list", inputs: ["cols", "gutterSize", "rowHeight"], exportAs: ["matGridList"] }, { kind: "component", type: i6.MatGridTile, selector: "mat-grid-tile", inputs: ["rowspan", "colspan"], exportAs: ["matGridTile"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }] }); }
514
- }
515
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeedContainerComponent, decorators: [{
516
- type: Component,
517
- args: [{ selector: 'app-feed-container', providers: [Utils], standalone: true, imports: [CommonModule, MatFormFieldModule, MatInputModule, MatGridListModule, MatButtonModule], template: "<div>\n <div style=\"text-align: left\">\n <h3>Pulse</h3>\n\n <div class=\"psdk-pulse-divider\"></div>\n\n <br />\n <div class=\"psdk-pulse\">\n <div class=\"psdk-avatar-big\">{{ this.currentUserInitials$ }}</div>\n <mat-form-field class=\"psdk-full-width\">\n <textarea matInput rows=\"5\" id=\"pulseMessage\" placeholder=\"Start a conversation\" type=\"text\" (change)=\"messageChange($event)\"></textarea>\n </mat-form-field>\n </div>\n </div>\n</div>\n\n<mat-grid-list cols=\"2\" rowHeight=\"6.25rem\">\n <mat-grid-tile> </mat-grid-tile>\n <mat-grid-tile>\n <button mat-raised-button color=\"primary\" (click)=\"postClick()\">Post</button>\n </mat-grid-tile>\n</mat-grid-list>\n\n<div *ngFor=\"let pulseMessage of pulseMessages$; let odd = odd\" style=\"text-align: left\" [style.background-color]=\"odd ? 'white' : '#eeeeee'\">\n <div class=\"psdk-pulse-divider\"></div>\n <br />\n <div class=\"psdk-pulse\">\n <div class=\"psdk-avatar-big\">{{ pulseMessage.displayPostedByInitials }}</div>\n <div class=\"psdk-pulse-message-group\">\n <div class=\"psdk-pulse-message-by\">{{ pulseMessage.displayPostedBy }}</div>\n <div class=\"psdk-pulse-message-time\">{{ pulseMessage.displayPostedTime }}</div>\n </div>\n </div>\n <div class=\"psdk-pulse-message-text\">{{ pulseMessage.message }}</div>\n <div class=\"psdk-pulse-message-actions\">\n <div class=\"psdk-pulse-message-action-group\">\n <button mat-button (click)=\"commentClick(pulseMessage.ID)\">\n <img class=\"psdk-comment-svg-icon\" src=\"{{ svgComment$ }}\" />\n <label class=\"psdk-pulse-message-like-label\"\n >Comment <span *ngIf=\"pulseMessage?.replies.length > 0\"> | {{ pulseMessage.replies.length }}</span></label\n >\n </button>\n </div>\n <div class=\"psdk-pulse-message-action-like\">\n <div *ngIf=\"pulseMessage?.likeCount; else notLiked\">\n <button *ngIf=\"pulseMessage?.likedByMe == 'true'\" mat-button (click)=\"likeClick(pulseMessage.ID, pulseMessage.ID, true, 'top')\">\n <!-- <mat-icon class=\"psdk-icon-liked-by-me\" svgIcon=\"thumb-up\" mastListIcon ></mat-icon> -->\n <img class=\"psdk-liked-by-me-svg-icon\" src=\"{{ svgLikedByMe$ }}\" />\n <label class=\"psdk-pulse-message-like-label\">Like | {{ pulseMessage.likeCount }}</label>\n </button>\n <button *ngIf=\"pulseMessage?.likedByMe != 'true'\" mat-button (click)=\"likeClick(pulseMessage.ID, pulseMessage.ID, false, 'top')\">\n <!-- <mat-icon class=\"psdk-icon\" svgIcon=\"thumb-up-outline\" mastListIcon ></mat-icon> -->\n <img class=\"psdk-like-svg-icon\" src=\"{{ svgLike$ }}\" />\n <label class=\"psdk-pulse-message-like-label\">Like | {{ pulseMessage.likeCount }}</label>\n </button>\n </div>\n <ng-template #notLiked>\n <button mat-button (click)=\"likeClick(pulseMessage.ID, pulseMessage.ID, false, 'top')\">\n <!-- <mat-icon class=\"psdk-icon\" svgIcon=\"thumb-up-outline\" mastListIcon ></mat-icon> -->\n <img class=\"psdk-like-svg-icon\" src=\"{{ svgLike$ }}\" />\n <label class=\"psdk-pulse-message-like-label\">Like</label>\n </button>\n </ng-template>\n </div>\n </div>\n\n <div *ngIf=\"pulseMessage?.replies\" class=\"psdk-pulse-reply\">\n <div *ngFor=\"let replyMessage of pulseMessage.replies\" class=\"psdk-pulse-reply-align\">\n <div class=\"psdk-pulse-divider\"></div>\n <br />\n <div class=\"psdk-pulse-reply-group\">\n <div class=\"psdk-avatar\">{{ replyMessage.displayPostedByInitials }}</div>\n <div class=\"psdk-pulse-reply-by\">{{ replyMessage.displayPostedBy }}</div>\n <div class=\"psdk-pulse-reply-message\">{{ replyMessage.message }}</div>\n </div>\n <div class=\"psdk-pulse-reply-actions\">\n <button mat-button (click)=\"commentClick(pulseMessage.ID)\" class=\"psdk-pulse-reply-comment\">\n <img class=\"psdk-comment-svg-icon\" src=\"{{ svgComment$ }}\" />\n </button>\n <div *ngIf=\"replyMessage?.likeCount; else replyNotLiked\">\n <button\n *ngIf=\"replyMessage?.likedByMe === 'true'\"\n mat-button\n (click)=\"likeClick(pulseMessage.ID, replyMessage.ID, true, 'reply')\"\n class=\"psdk-pulse-reply-like\"\n >\n <img class=\"psdk-liked-by-me-svg-icon\" src=\"{{ svgLikedByMe$ }}\" />\n </button>\n <button\n *ngIf=\"replyMessage?.likedByMe != 'true'\"\n mat-button\n (click)=\"likeClick(pulseMessage.ID, replyMessage.ID, false, 'reply')\"\n class=\"psdk-pulse-reply-like\"\n >\n <img class=\"psdk-like-svg-icon\" src=\"{{ svgLike$ }}\" />\n </button>\n <label class=\"psdk-pulse-reply-like-label\">Like | {{ replyMessage.likeCount }}</label>\n </div>\n <ng-template #replyNotLiked>\n <button\n *ngIf=\"replyMessage?.likedByMe != 'true'\"\n mat-button\n (click)=\"likeClick(pulseMessage.ID, replyMessage.ID, false, 'reply')\"\n class=\"psdk-pulse-reply-like\"\n >\n <img class=\"psdk-like-svg-icon\" src=\"{{ svgLike$ }}\" />\n </button>\n </ng-template>\n\n <div class=\"psdk-pulse-reply-time\">{{ replyMessage.displayPostedTime }}</div>\n </div>\n <br />\n </div>\n\n <div *ngIf=\"showReplyComment$[pulseMessage.ID] == true\">\n <div class=\"psdk-pulse-divider\"></div>\n <br />\n <div class=\"psdk-pulse-comment-group\">\n <div class=\"psdk-avatar\">{{ this.currentUserInitials$ }}</div>\n <mat-form-field class=\"psdk-full-width\">\n <textarea\n matInput\n rows=\"5\"\n id=\"pulseMessage\"\n placeholder=\"Add a comment\"\n type=\"text\"\n (change)=\"newCommentChange($event, pulseMessage.ID)\"\n ></textarea>\n </mat-form-field>\n <button mat-button (click)=\"postCommentClick(pulseMessage.ID)\" class=\"psdk-pulse-comment-post\">\n <img class=\"psdk-send-svg-icon\" src=\"{{ svgSend$ }}\" />\n </button>\n </div>\n </div>\n </div>\n <br />\n</div>\n", styles: [".psdk-pulse-divider{border-bottom:.0625rem solid var(--app-neutral-light-color)}.psdk-full-width{width:100%;padding-left:.625rem}.psdk-icon{padding:0rem .125rem;min-width:unset;display:inline-block}.psdk-icon-liked-by-me{padding:0rem .125rem;min-width:unset;display:inline-block;color:var(--app-primary-color)}.psdk-send-svg-icon{width:1.4rem}.psdk-comment-svg-icon,.psdk-like-svg-icon{width:1.4rem;padding:0rem .3215rem}.psdk-liked-by-me-svg-icon{width:1.4rem;padding:0rem .3215rem;filter:var(--app-primary-color-filter)}.psdk-avatar{margin:0rem;padding:0rem;min-width:2.5rem;min-height:2.5rem;max-width:2.5rem;max-height:2.5rem;border-radius:50%;justify-content:center;align-items:center;text-align:center;display:flex;background:var(--app-primary-color);color:var(--app-form-color);font-weight:700;font-size:1.25rem}.psdk-avatar-big{margin:0rem;padding:0rem;min-width:3.125rem;min-height:3.125rem;max-width:3.125rem;max-height:3.125rem;border-radius:50%;justify-content:center;align-items:center;text-align:center;display:flex;background:var(--app-primary-color);color:var(--app-form-color);font-weight:700;font-size:1.5625rem}.psdk-pulse{display:inline-flex;width:100%;padding-bottom:.625rem}.psdk-pulse-message-group{display:flex;flex-direction:column;padding-left:.625rem}.psdk-pulse-message-by{margin-bottom:0rem;font-weight:700;font-size:.9375rem}.psdk-pulse-message-time{color:var(--app-pulse-message-color)}.psdk-pulse-message-text{white-space:pre-line}.psdk-pulse-message-actions{display:flex;flex-direction:row;padding-top:1.25rem}.psdk-pulse-message-action-group,.psdk-pulse-message-action-like{flex-basis:15em}.psdk-pulse-message-like-label{vertical-align:middle}.psdk-pulse-reply{padding-left:1.25rem}.psdk-pulse-reply-align{text-align:left}.psdk-pulse-reply-group{display:flex;flex-direction:row;align-items:center}.psdk-pulse-reply-by{padding:0rem .625rem;font-weight:700;font-size:.9375rem}.psdk-pulse-reply-message{background-color:var(--app-pulse-message-background-color);border-radius:.625rem;padding:0rem 1.25rem;white-space:pre-line}.psdk-pulse-reply-actions{display:flex;flex-direction:row;align-items:center;padding-left:3.125rem}.psdk-pulse-reply-comment,.psdk-pulse-reply-like{padding:0rem;min-width:1.875rem}.psdk-pulse-reply-like-label{vertical-align:middle;padding-right:.3125rem}.psdk-pulse-reply-time{color:var(--app-pulse-message-color);padding-left:.625rem}.psdk-pulse-comment-group{display:flex;flex-direction:row;align-items:center}.psdk-pulse-comment-post{padding:0rem;min-width:1.875rem}\n"] }]
518
- }], ctorParameters: () => [{ type: i1.AngularPConnectService }, { type: i0.ChangeDetectorRef }, { type: i2.Utils }], propDecorators: { pConn$: [{
519
- type: Input
520
- }] } });
521
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVlZC1jb250YWluZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci1zZGstY29tcG9uZW50cy9zcmMvbGliL19jb21wb25lbnRzL3dpZGdldC9mZWVkLWNvbnRhaW5lci9mZWVkLWNvbnRhaW5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyLXNkay1jb21wb25lbnRzL3NyYy9saWIvX2NvbXBvbmVudHMvd2lkZ2V0L2ZlZWQtY29udGFpbmVyL2ZlZWQtY29udGFpbmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHNEQUFzRDtBQUN0RCxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBZ0MsTUFBTSxlQUFlLENBQUM7QUFDdkYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxPQUFPLE1BQU0saUJBQWlCLENBQUM7QUFFdEMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7Ozs7QUFVaEQsTUFBTSxPQUFPLHNCQUFzQjtJQXFDakMsWUFDVSxlQUF1QyxFQUN2QyxLQUF3QixFQUN4QixLQUFZO1FBRlosb0JBQWUsR0FBZixlQUFlLENBQXdCO1FBQ3ZDLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQ3hCLFVBQUssR0FBTCxLQUFLLENBQU87UUFyQ3RCLDRCQUE0QjtRQUM1Qix3QkFBbUIsR0FBd0IsRUFB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eUlBLHloRkR4SFksWUFBWSwrUEFBRSxrQkFBa0IseU9BQUUsY0FBYywwV0FBRSxpQkFBaUIsaVRBQUUsZUFBZTs7NEZBRW5GLHNCQUFzQjtrQkFSbEMsU0FBUzsrQkFDRSxvQkFBb0IsYUFHbkIsQ0FBQyxLQUFLLENBQUMsY0FDTixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLGlCQUFpQixFQUFFLGVBQWUsQ0FBQzsrSUFHdEYsTUFBTTtzQkFBZCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzICovXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIENoYW5nZURldGVjdG9yUmVmLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0R3JpZExpc3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9ncmlkLWxpc3QnO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2Zhc3QtZGVlcC1lcXVhbCc7XG5pbXBvcnQgeyBBbmd1bGFyUENvbm5lY3REYXRhLCBBbmd1bGFyUENvbm5lY3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vX2JyaWRnZS9hbmd1bGFyLXBjb25uZWN0JztcbmltcG9ydCB7IFV0aWxzIH0gZnJvbSAnLi4vLi4vLi4vX2hlbHBlcnMvdXRpbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZmVlZC1jb250YWluZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZmVlZC1jb250YWluZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9mZWVkLWNvbnRhaW5lci5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtVdGlsc10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIE1hdEZvcm1GaWVsZE1vZHVsZSwgTWF0SW5wdXRNb2R1bGUsIE1hdEdyaWRMaXN0TW9kdWxlLCBNYXRCdXR0b25Nb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIEZlZWRDb250YWluZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIHBDb25uJDogdHlwZW9mIFBDb25uZWN0O1xuXG4gIC8vIFVzZWQgd2l0aCBBbmd1bGFyUENvbm5lY3RcbiAgYW5ndWxhclBDb25uZWN0RGF0YTogQW5ndWxhclBDb25uZWN0RGF0YSA9IHt9O1xuXG4gIHVzZXJOYW1lJDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBpbWFnZUtleSQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBjdXJyZW50VXNlckluaXRpYWxzJDogc3RyaW5nO1xuICBjdXJyZW50VXNlck5hbWUkOiBzdHJpbmc7XG5cbiAgcHVsc2VNZXNzYWdlcyQ6IGFueVtdO1xuICBzaG93UmVwbHlDb21tZW50JDogT2JqZWN0ID0ge307XG5cbiAgc3ZnQ29tbWVudCQ6IHN0cmluZztcbiAgc3ZnTGlrZSQ6IHN0cmluZztcbiAgc3ZnTGlrZWRCeU1lJDogc3RyaW5nO1xuICBzdmdTZW5kJDogc3RyaW5nO1xuXG4gIHB1bHNlQ29udmVyc2F0aW9uOiBzdHJpbmc7XG4gIHVzZXJEYXRhOiBNYXA8YW55LCBhbnk+ID0gbmV3IE1hcCgpO1xuXG4gIHB1bHNlQ29tbWVudDogT2JqZWN0ID0ge307XG5cbiAgLy8gZnVuY3Rpb25zXG4gIGFjdGlvbnNBUEk6IGFueTtcbiAgLy8gdW50aWwgRmVlZEFQSSBtb3ZlZCBiYWNrIHRvIFBDb3JlLCB3ZSBhY2Nlc3MgdGhlIG1ldGhvZHMgZGlyZWN0bHkgKHNlZSBuZ0luaXQpXG4gIGZlZWRBUEk6IGFueTtcblxuICBwdWxzZURhdGE6IGFueTtcblxuICAvLyBUZW1wb3Jhcnkgd2F5IHRvIHVzZSBGZWVkQXBpLi4uXG4gIGZldGNoTWVzc2FnZXM6IGFueTtcbiAgbGlrZU1lc3NhZ2U6IGFueTtcbiAgcG9zdE1lc3NhZ2U6IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFuZ3VsYXJQQ29ubmVjdDogQW5ndWxhclBDb25uZWN0U2VydmljZSxcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHV0aWxzOiBVdGlsc1xuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy51c2VyTmFtZSQgPSBQQ29yZS5nZXRFbnZpcm9ubWVudEluZm8oKS5nZXRPcGVyYXRvck5hbWUoKTtcbiAgICB0aGlzLmltYWdlS2V5JCA9IFBDb3JlLmdldEVudmlyb25tZW50SW5mbygpLmdldE9wZXJhdG9ySW1hZ2VJbnNLZXkoKTtcbiAgICB0aGlzLnVwZGF0ZUN1cnJlbnRVc2VyTmFtZSh0aGlzLnVzZXJOYW1lJCA/PyAnJyk7XG5cbiAgICAvLyBGaXJzdCB0aGluZyBpbiBpbml0aWFsaXphdGlvbiBpcyByZWdpc3RlcmluZyBhbmQgc3Vic2NyaWJpbmcgdG8gdGhlIEFuZ3VsYXJQQ29ubmVjdCBzZXJ2aWNlXG4gICAgdGhpcy5hbmd1bGFyUENvbm5lY3REYXRhID0gdGhpcy5hbmd1bGFyUENvbm5lY3QucmVnaXN0ZXJBbmRTdWJzY3JpYmVDb21wb25lbnQodGhpcywgdGhpcy5vblN0YXRlQ2hhbmdlKTtcblxuICAgIC8vIFRoZW4sIGNvbnRpbnVlIG9uIHdpdGggb3RoZXIgaW5pdGlhbGl6YXRpb25cbiAgICAvLyBkZWJ1Z2dlcjtcblxuICAgIC8vIGNvbnN0IHtcbiAgICAvLyAgIGZldGNoTWVzc2FnZXMsXG4gICAgLy8gICBsaWtlTWVzc2FnZSxcbiAgICAvLyAgIHBvc3RNZXNzYWdlXG4gICAgLy8gfSA9IEZlZWRBcGkodGhpcy5wQ29ubiQpO1xuICAgIC8vIHRoaXMuZmV0Y2hNZXNzYWdlcyA9IGZldGNoTWVzc2FnZXM7XG4gICAgLy8gdGhpcy5saWtlTWVzc2FnZSA9IGxpa2VNZXNzYWdlO1xuICAgIC8vIHRoaXMucG9zdE1lc3NhZ2UgPSBwb3N0TWVzc2FnZTtcblxuICAgIC8vIC8vIHRoaXMudXNlck5hbWUkID0gdGhpcy5wQ29ubiQuZ2V0VmFsdWUoXCJweFJlcXVlc3Rvci5weFVzZXJOYW1lXCIpO1xuICAgIC8vIC8vIHRoaXMuaW1hZ2VLZXkkID0gdGhpcy5wQ29ubiQuZ2V0VmFsdWUoXCJPcGVyYXRvcklELnB5SW1hZ2VJbnNLZXlcIik7XG5cbiAgICAvLyAvL3RoaXMudXNlck5hbWUkID0gdGhpcy5wQ29ubiQuZ2V0RGF0YU9iamVjdCgpW1wiRF9weEVudmlyb25tZW50SW5mb1wiXS5weE9wZXJhdG9yLnB5VXNlck5hbWU7XG4gICAgLy8gLy90aGlzLmltYWdlS2V5JCA9IHRoaXMucENvbm4kLmdldERhdGFPYmplY3QoKVtcIkRfcHhFbnZpcm9ubWVudEluZm9cIl0ucHhPcGVyYXRvci5weUltYWdlSW5zS2V5O1xuICAgIC8vIHRoaXMudXNlck5hbWUkID0gdGhpcy5wQ29ubiQuZ2V0RW52aXJvbm1lbnRJbmZvKCkuZ2V0T3BlcmF0b3JOYW1lKCk7XG4gICAgLy8gdGhpcy5pbWFnZUtleSQgPSB0aGlzLnBDb25uJC5nZXRFbnZpcm9ubWVudEluZm8oKS5nZXRPcGVyYXRvckltYWdlSW5zS2V5KCk7XG5cbiAgICAvLyB0aGlzLmFjdGlvbnNBUEkgPSB0aGlzLnBDb25uJC5nZXRBY3Rpb25zQXBpKCk7XG5cbiAgICAvLyBsZXQgb3duZXIgPSB0aGlzLnBDb25uJC5nZXRDb25maWdQcm9wcygpLnZhbHVlO1xuXG4gICAgLy8gLy8gd2l0aCBuZXcgRmVlZEFQSTogb3duZXIgaXMgdGhlIHByb3BlciB2YWx1ZSB0byBwYXNzIGluXG4gICAgLy8gLy8gIGFuZCBubyBsb25nZXIgdGFrZXMgMm5kIGFyZ3VtZW50XG4gICAgLy8gdGhpcy4vKmZlZWRBUEkuKi9mZXRjaE1lc3NhZ2VzKG93bmVyIC8qLCB0aGlzLnBDb25uJC5nZXRDb250ZXh0TmFtZSgpKi8pO1xuXG4gICAgLy8gY29uc3QgY29uZmlnUHJvcHM6IGFueSA9IHRoaXMucENvbm4kLmdldENvbmZpZ1Byb3BzKCk7XG5cbiAgICAvLyBjb25zdCB7IG1lc3NhZ2VJRHMgfSA9IGNvbmZpZ1Byb3BzO1xuXG4gICAgLy8gY29uc3QgeyBmZXRjaE1lc3NhZ2VzLCBwb3N0TWVzc2FnZSwgZ2V0TWVudGlvblN1Z2dlc3Rpb25zLCBnZXRUYWdTdWdnZXN0aW9ucyB9ID0gRmVlZEFwaSh0aGlzLnBDb25uJCk7XG5cbiAgICBjb25zdCBhcHBOYW1lID0gUENvcmUuZ2V0RW52aXJvbm1lbnRJbmZvKCkuZ2V0QXBwbGljYXRpb25OYW1lKCk7XG4gICAgbGV0IHZhbHVlID0gJyc7XG4gICAgbGV0IGZlZWRJRCA9ICcnO1xuICAgIGxldCBmZWVkQ2xhc3MgPSAnJztcblxuICAgIGlmICh0aGlzLnBDb25uJC5nZXRDYXNlU3VtbWFyeSgpLklEKSB7XG4gICAgICB2YWx1ZSA9IHRoaXMucENvbm4kLmdldENhc2VTdW1tYXJ5KCkuSUQ7XG4gICAgICBmZWVkSUQgPSAncHlDYXNlRmVlZCc7XG4gICAgICBmZWVkQ2xhc3MgPSB0aGlzLnBDb25uJC5nZXRDYXNlU3VtbWFyeSgpLmNvbnRlbnQuY2xhc3NJRDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgPSBgREFUQS1QT1JUQUwgJCR7YXBwTmFtZX1gO1xuICAgICAgZmVlZElEID0gJ3B5RGFzaGJvYXJkRmVlZCc7XG4gICAgICBmZWVkQ2xhc3MgPSAnQGJhc2VjbGFzcyc7XG4gICAgfVxuXG4gICAgY29uc3Qgb25VcGxvYWRQcm9ncmVzcyA9ICgpID0+IHt9O1xuICAgIGNvbnN0IGVycm9ySGFuZGxlciA9ICgpID0+IHt9O1xuICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gKCkgPT4ge307XG5cbiAgICBjb25zdCBwb3N0Q29tbWVudCA9ICh7IHZhbHVlOiBtZXNzYWdlLCBjbGVhciB9KSA9PiB7XG4gICAgICBjb25zdCBhdHRhY2htZW50SURzID0gW107XG4gICAgICBjb25zdCBhdHRhY2htZW50VXRpbHMgPSBQQ29yZS5nZXRBdHRhY2htZW50VXRpbHMoKTtcbiAgICAgIGlmIChhdHRhY2htZW50cyAmJiAhIWF0dGFjaG1lbnRzLmxlbmd0aCkge1xuICAgICAgICAvKiBhdHRhY2htZW50cztcbiAgICAgICAgICAuZmlsdGVyKChmaWxlKSA9PiAhZmlsZS5lcnJvcilcbiAgICAgICAgICAubWFwKChmaWxlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXR0YWNobWVudFV0aWxzXG4gICAgICAgICAgICAgIC51cGxvYWRBdHRhY2htZW50KGZpbGUsIG9uVXBsb2FkUHJvZ3Jlc3MsIGVycm9ySGFuZGxlcilcbiAgICAgICAgICAgICAgLnRoZW4oKGZpbGVSZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGVDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcIkZpbGVcIixcbiAgICAgICAgICAgICAgICAgIGNhdGVnb3J5OiBcIkZpbGVcIixcbiAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICBJRDogZmlsZVJlc3BvbnNlLmRhdGEuSURcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRJRHMucHVzaChmaWxlQ29uZmlnKTtcbiAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudHMubGVuZ3RoID09PSBhdHRhY2htZW50SURzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgcG9zdE1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1NYXJrZG93blRvTXNnKG1lc3NhZ2UpLFxuICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50SURzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgY2xlYXIoKTtcbiAgICAgICAgICAgICAgICAgIHNldEF0dGFjaG1lbnRzKFtdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgICAgLmNhdGNoKGNvbnNvbGUuZXJyb3IpO1xuICAgICAgICAgIH0pOyAqL1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gcG9zdE1lc3NhZ2UodmFsdWUsIHRyYW5zZm9ybU1hcmtkb3duVG9Nc2cobWVzc2FnZSkpO1xuICAgICAgICBjbGVhcigpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvKlxuXG4gICAgY29uc3QgeyBnZXRQQ29ubmVjdCwgbWVzc2FnZUlEcyB9ID0gcHJvcHM7XG4gICAgY29uc3QgW21lbnRpb25SZXN1bHRzLCBzZXRNZW50aW9uUmVzdWx0c10gPSB1c2VTdGF0ZShbXSk7XG4gICAgY29uc3QgW3RhZ1Jlc3VsdHMsIHNldFRhZ1Jlc3VsdHNdID0gdXNlU3RhdGUoW10pO1xuICAgIGNvbnN0IFthdHRhY2htZW50cywgc2V0QXR0YWNobWVudHNdID0gdXNlU3RhdGUoW10pO1xuICAgIGNvbnN0IFtmZWVkRmlsdGVycywgc2V0RmVlZEZpbHRlcnNdID0gdXNlU3RhdGUoKTtcbiAgICBjb25zdCB7XG4gICAgICBmZXRjaE1lc3NhZ2VzLFxuICAgICAgcG9zdE1lc3NhZ2UsXG4gICAgICBnZXRNZW50aW9uU3VnZ2VzdGlvbnMsXG4gICAgICBnZXRUYWdTdWdnZXN0aW9uc1xuICAgIH0gPSBGZWVkQXBpKGdldFBDb25uZWN0KCkpO1xuICAgIGNvbnN0IGFwcE5hbWUgPSBQQ29yZS5nZXRFbnZpcm9ubWVudEluZm8oKS5nZXRBcHBsaWNhdGlvbk5hbWUoKTtcbiAgICBsZXQgdmFsdWUgPSBcIlwiO1xuICAgIGxldCBmZWVkSUQgPSBcIlwiO1xuICAgIGxldCBmZWVkQ2xhc3MgPSBcIlwiO1xuICAgIGlmIChnZXRQQ29ubmVjdCgpLmdldENhc2VTdW1tYXJ5KCkuSUQpIHtcbiAgICAgIHZhbHVlID0gZ2V0UENvbm5lY3QoKS5nZXRDYXNlU3VtbWFyeSgpLklEO1xuICAgICAgZmVlZElEID0gXCJweUNhc2VGZWVkXCI7XG4gICAgICBmZWVkQ2xhc3MgPSBnZXRQQ29ubmVjdCgpLmdldENhc2VTdW1tYXJ5KCkuY29udGVudC5jbGFzc0lEO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSA9IGBEQVRBLVBPUlRBTCAkJHthcHBOYW1lfWA7XG4gICAgICBmZWVkSUQgPSBcInB5RGFzaGJvYXJkRmVlZFwiO1xuICAgICAgZmVlZENsYXNzID0gXCJAYmFzZWNsYXNzXCI7XG4gICAgfVxuICAgIC8vIEZvciBjYW5jZWxsaW5nIGZldGNocmVxdWVzdCBmb3IgZmlsZXRyc1xuICAgIGNvbnN0IGZldGNoTWVzc2FnZXNDYW5jZWxUb2tlblNvdXJjZSA9IHVzZVJlZihbXSk7XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgZmV0Y2hNZXNzYWdlcyhcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIGZlZWRJRCxcbiAgICAgICAgZmVlZENsYXNzLFxuICAgICAgICBudWxsLFxuICAgICAgICBmZXRjaE1lc3NhZ2VzQ2FuY2VsVG9rZW5Tb3VyY2UuY3VycmVudFxuICAgICAgKS50aGVuKChyZXMpID0+IHtcbiAgICAgICAgc2V0RmVlZEZpbHRlcnMocmVzKTtcbiAgICAgIH0pO1xuICAgICAgUENvcmUuZ2V0QXNzZXRMb2FkZXIoKS5nZXRMb2FkZXIoXCJjb21wb25lbnQtbG9hZGVyXCIpKFtcIkFjdGl2aXR5XCJdKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICB9LCBbXSk7XG5cbiAgICBjb25zdCBvblVwbG9hZFByb2dyZXNzID0gdXNlQ2FsbGJhY2soKGZpbGUpID0+IHtcbiAgICAgIHJldHVybiAoeyBsb2FkZWQsIHRvdGFsIH0pID0+IHtcbiAgICAgICAgZmlsZS5wcm9ncmVzcyA9IE1hdGguZmxvb3IoKGxvYWRlZCAvIHRvdGFsKSAqIDEwMCk7XG4gICAgICAgIHNldEF0dGFjaG1lbnRzKChjdXJyZW50KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGN1cnJlbnQubWFwKChjdXJyRmlsZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJGaWxlLm5hbWUgPT09IGZpbGUubmFtZSA/IGZpbGUgOiBjdXJyRmlsZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IGVycm9ySGFuZGxlciA9IHVzZUNhbGxiYWNrKChpc0ZldGNoQ2FuY2VsZWQsIGZpbGUpID0+IHtcbiAgICAgIHJldHVybiAoZXJyb3IpID0+IHtcbiAgICAgICAgaWYgKCFpc0ZldGNoQ2FuY2VsZWQoZXJyb3IpKSB7XG4gICAgICAgICAgbGV0IGxvY2FsaXplZFZhbHVlID0gXCJVcGxvYWQgZmFpbGVkXCI7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZXJyb3IucmVzcG9uc2UgJiZcbiAgICAgICAgICAgIGVycm9yLnJlc3BvbnNlLmRhdGEgJiZcbiAgICAgICAgICAgIGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3JEZXRhaWxzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBsb2NhbGl6ZWRWYWx1ZSA9IGVycm9yLnJlc3BvbnNlLmRhdGEuZXJyb3JEZXRhaWxzWzBdLmxvY2FsaXplZFZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWxldGUgZmlsZS5wcm9ncmVzcztcbiAgICAgICAgICBzZXRBdHRhY2htZW50cygoY3VycmVudCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQubWFwKChjdXJyRmlsZSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoY3VyckZpbGUubmFtZSA9PT0gZmlsZS5uYW1lKSB7XG4gICAgICAgICAgICAgICAgY3VyckZpbGUubWV0YSA9IGxvY2FsaXplZFZhbHVlO1xuICAgICAgICAgICAgICAgIGN1cnJGaWxlLmVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gY3VyckZpbGU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBlcnJvci5pc0hhbmRsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfTtcbiAgICB9LCBbXSk7XG5cbiAgICBjb25zdCBwb3N0Q29tbWVudCA9ICh7IHZhbHVlOiBtZXNzYWdlLCBjbGVhciB9KSA9PiB7XG4gICAgICBjb25zdCBhdHRhY2htZW50SURzID0gW107XG4gICAgICBjb25zdCBhdHRhY2htZW50VXRpbHMgPSBQQ29yZS5nZXRBdHRhY2htZW50VXRpbHMoKTtcbiAgICAgIGlmIChhdHRhY2htZW50cyAmJiAhIWF0dGFjaG1lbnRzLmxlbmd0aCkge1xuICAgICAgICBhdHRhY2htZW50c1xuICAgICAgICAgIC5maWx0ZXIoKGZpbGUpID0+ICFmaWxlLmVycm9yKVxuICAgICAgICAgIC5tYXAoKGZpbGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhdHRhY2htZW50VXRpbHNcbiAgICAgICAgICAgICAgLnVwbG9hZEF0dGFjaG1lbnQoZmlsZSwgb25VcGxvYWRQcm9ncmVzcywgZXJyb3JIYW5kbGVyKVxuICAgICAgICAgICAgICAudGhlbigoZmlsZVJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZUNvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwiRmlsZVwiLFxuICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk6IFwiRmlsZVwiLFxuICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGZpbGUubmFtZSxcbiAgICAgICAgICAgICAgICAgIElEOiBmaWxlUmVzcG9uc2UuZGF0YS5JRFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYXR0YWNobWVudElEcy5wdXNoKGZpbGVDb25maWcpO1xuICAgICAgICAgICAgICAgIGlmIChhdHRhY2htZW50cy5sZW5ndGggPT09IGF0dGFjaG1lbnRJRHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZShcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybU1hcmtkb3duVG9Nc2cobWVzc2FnZSksXG4gICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRJRHNcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBjbGVhcigpO1xuICAgICAgICAgICAgICAgICAgc2V0QXR0YWNobWVudHMoW10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcblxuICAgICAgICAgICAgICAuY2F0Y2goY29uc29sZS5lcnJvcik7XG4gICAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwb3N0TWVzc2FnZSh2YWx1ZSwgdHJhbnNmb3JtTWFya2Rvd25Ub01zZyhtZXNzYWdlKSk7XG4gICAgICAgIGNsZWFyKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgICovXG5cbiAgICAvKiBPbiBzZWFyY2ggaXMgY2FsbGVkIHdoZW4gQCBjaGFyYWN0ZXIgaXMgZW50ZXJlZCBhbmQgd2lsbCBkaXNwbGF5IHRoZSBtZW50aW9uICovXG5cbiAgICAvKlxuICAgIGNvbnN0IG9uU2VhcmNoID0gZGVib3VuY2UoKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJtZW50aW9uXCIpIHtcbiAgICAgICAgZ2V0TWVudGlvblN1Z2dlc3Rpb25zKHtcbiAgICAgICAgICBwdWxzZUNvbnRleHQ6IHZhbHVlLFxuICAgICAgICAgIHNlYXJjaEZvcjogZXZlbnQuc2VhcmNoXG4gICAgICAgIH0pLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgIHNldE1lbnRpb25SZXN1bHRzKHJlcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZ2V0VGFnU3VnZ2VzdGlvbnMoe1xuICAgICAgICAgIHNlYXJjaEZvcjogZXZlbnQuc2VhcmNoXG4gICAgICAgIH0pLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgIHNldFRhZ1Jlc3VsdHMocmVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSwgMTUwKTtcblxuICAgIGNvbnN0IHVzZXJOYW1lID0gZ2V0UENvbm5lY3QoKS5nZXRFbnZpcm9ubWVudEluZm8oKS5nZXRPcGVyYXRvck5hbWUoKTtcbiAgICBjb25zdCBpbWFnZUtleSA9IGdldFBDb25uZWN0KCkuZ2V0RW52aXJvbm1lbnRJbmZvKCkuZ2V0T3BlcmF0b3JJbWFnZUluc0tleSgpO1xuXG4gICAgY29uc3Qgb25GaWxlc0FkZGVkID0gdXNlQ2FsbGJhY2soKG5ld2x5QWRkZWRGaWxlcykgPT4ge1xuICAgICAgc2V0QXR0YWNobWVudHMoKGN1cnJlbnQpID0+IFtcbiAgICAgICAgLi4ubmV3bHlBZGRlZEZpbGVzLm1hcCgoZmlsZSkgPT4ge1xuICAgICAgICAgIGlmICghdmFsaWRhdGVNYXhTaXplKGZpbGUsIDUpKSB7XG4gICAgICAgICAgICBmaWxlLmVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgIGZpbGUubWV0YSA9IFwiRmlsZSBpcyB0b28gYmlnLiBNYXggYWxsb3dlZCBzaXplIGlzIDVNQi5cIjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZmlsZS5pY29uID0gZ2V0SWNvbkZyb21GaWxlVHlwZShmaWxlLnR5cGUpO1xuICAgICAgICAgIGZpbGUub25EZWxldGUgPSAoKSA9PiB7XG4gICAgICAgICAgICBzZXRBdHRhY2htZW50cygoYykgPT4gYy5maWx0ZXIoKGYpID0+IGYubmFtZSAhPT0gZmlsZS5uYW1lKSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gZmlsZTtcbiAgICAgICAgfSksXG4gICAgICAgIC4uLmN1cnJlbnRcbiAgICAgIF0pO1xuICAgIH0sIFtdKTtcblxuICAgIGNvbnN0IG9uRmlsdGVyQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgICAoZmlsdGVySUQpID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlZEZpbHRlcnMgPSBbLi4uZmVlZEZpbHRlcnNdO1xuICAgICAgICBjb25zdCBmaWx0ZXJUb1VwZGF0ZSA9IHVwZGF0ZWRGaWx0ZXJzLmZpbmQoXG4gICAgICAgICAgKGZlZWRJdGVtKSA9PiBmZWVkSXRlbS5pZCA9PT0gZmlsdGVySURcbiAgICAgICAgKTtcbiAgICAgICAgZmlsdGVyVG9VcGRhdGUub24gPSAhZmlsdGVyVG9VcGRhdGUub247XG4gICAgICAgIGlmIChmaWx0ZXJJRCA9PT0gXCJBbGxcIilcbiAgICAgICAgICB1cGRhdGVkRmlsdGVycy5mb3JFYWNoKChmZWVkRmlsdGVyKSA9PiB7XG4gICAgICAgICAgICBmZWVkRmlsdGVyLm9uID0gZmlsdGVyVG9VcGRhdGUub247XG4gICAgICAgICAgfSk7XG4gICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgIHVwZGF0ZWRGaWx0ZXJzLmZpbmQoXG4gICAgICAgICAgICAoZmVlZEl0ZW0pID0+IGZlZWRJdGVtLm9uID09PSBmYWxzZSAmJiBmZWVkSXRlbS5pZCAhPT0gXCJBbGxcIlxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAgIHVwZGF0ZWRGaWx0ZXJzLmZpbmQoKGZlZWRJdGVtKSA9PiBmZWVkSXRlbS5pZCA9PT0gXCJBbGxcIikub24gPSBmYWxzZTtcbiAgICAgICAgZWxzZSB1cGRhdGVkRmlsdGVycy5maW5kKChmZWVkSXRlbSkgPT4gZmVlZEl0ZW0uaWQgPT09IFwiQWxsXCIpLm9uID0gdHJ1ZTtcbiAgICAgICAgc2V0RmVlZEZpbHRlcnModXBkYXRlZEZpbHRlcnMpO1xuICAgICAgICBmZXRjaE1lc3NhZ2VzKFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIGZlZWRJRCxcbiAgICAgICAgICBmZWVkQ2xhc3MsXG4gICAgICAgICAgZmVlZEZpbHRlcnMsXG4gICAgICAgICAgZmV0Y2hNZXNzYWdlc0NhbmNlbFRva2VuU291cmNlLmN1cnJlbnRcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBbXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBmZWVkSUQsXG4gICAgICAgIGZlZWRDbGFzcyxcbiAgICAgICAgZmVlZEZpbHRlcnMsXG4gICAgICAgIGZldGNoTWVzc2FnZXNDYW5jZWxUb2tlblNvdXJjZSxcbiAgICAgICAgZmV0Y2hNZXNzYWdlc1xuICAgICAgXVxuICAgICk7XG5cbiAgICAqL1xuXG4gICAgLy8gc2V0IHVwIHN2ZyBpbWFnZXNcbiAgICB0aGlzLnN2Z0NvbW1lbnQkID0gdGhpcy51dGlscy5nZXRJbWFnZVNyYygnY2hhdCcsIHRoaXMudXRpbHMuZ2V0U0RLU3RhdGljQ29udGVudFVybCgpKTtcbiAgICB0aGlzLnN2Z0xpa2UkID0gdGhpcy51dGlscy5nZXRJbWFnZVNyYygndGh1bWJzLXVwJywgdGhpcy51dGlscy5nZXRTREtTdGF0aWNDb250ZW50VXJsKCkpO1xuICAgIHRoaXMuc3ZnTGlrZWRCeU1lJCA9IHRoaXMudXRpbHMuZ2V0SW1hZ2VTcmMoJ3RodW1icy11cC1zb2xpZCcsIHRoaXMudXRpbHMuZ2V0U0RLU3RhdGljQ29udGVudFVybCgpKTtcbiAgICB0aGlzLnN2Z1NlbmQkID0gdGhpcy51dGlscy5nZXRJbWFnZVNyYygnc2VuZCcsIHRoaXMudXRpbHMuZ2V0U0RLU3RhdGljQ29udGVudFVybCgpKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmFuZ3VsYXJQQ29ubmVjdERhdGEudW5zdWJzY3JpYmVGbikge1xuICAgICAgdGhpcy5hbmd1bGFyUENvbm5lY3REYXRhLnVuc3Vic2NyaWJlRm4oKTtcbiAgICB9XG4gIH1cblxuICAvLyBDYWxsYmFjayBwYXNzZWQgd2hlbiBzdWJzY3JpYmluZyB0byBzdG9yZSBjaGFuZ2VcbiAgb25TdGF0ZUNoYW5nZSgpIHtcbiAgICBjb25zdCBiTG9nZ2luZyA9IGZhbHNlO1xuICAgIGlmIChiTG9nZ2luZykge1xuICAgICAgLy8gY29uc29sZS5sb2coIGBpbiAke3RoaXMuY29uc3RydWN0b3IubmFtZX0gb25TdGF0ZUNoYW5nZWAgKTtcbiAgICAgIC8vIGRlYnVnZ2VyO1xuICAgIH1cbiAgICAvLyBTaG91bGQgYWx3YXlzIGNoZWNrIHRoZSBicmlkZ2UgdG8gc2VlIGlmIHRoZSBjb21wb25lbnQgc2hvdWxkIHVwZGF0ZSBpdHNlbGYgKHJlLXJlbmRlcilcbiAgICBjb25zdCBiVXBkYXRlU2VsZiA9IHRoaXMuYW5ndWxhclBDb25uZWN0LnNob3VsZENvbXBvbmVudFVwZGF0ZSh0aGlzKTtcbiAgICAvLyBjb25zb2xlLmxvZyggYCR7dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfSBzaG91bGRDb21wb25lbnRVcGRhdGU6ICR7YlVwZGF0ZVNlbGZ9YCk7XG5cbiAgICAvLyBPTkxZIGNhbGwgdXBkYXRlU2VsZiB3aGVuIHRoZSBjb21wb25lbnQgc2hvdWxkIHVwZGF0ZVxuICAgIC8vICAgIEFORCByZW1vdmluZyB0aGUgXCJnYXRlXCIgdGhhdCB3YXMgcHV0IHRoZXJlIHNpbmNlIHNob3VsZENvbXBvbmVudFVwZGF0ZVxuICAgIC8vICAgICAgc2hvdWxkIGJlIHRoZSByZWFsIFwiZ2F0ZVwiXG4gICAgaWYgKGJVcGRhdGVTZWxmKSB7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGYoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbmV3UHVsc2VEYXRhID0gdGhpcy5wQ29ubiQuZ2V0RGF0YU9iamVjdCgpLnB1bHNlO1xuXG4gICAgICBpZiAoIWlzRXF1YWwobmV3UHVsc2VEYXRhLCB0aGlzLnB1bHNlRGF0YSkpIHtcbiAgICAgICAgdGhpcy51cGRhdGVTZWxmKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5wdWxzZURhdGEgPSB0aGlzLnBDb25uJC5nZXREYXRhT2JqZWN0KCkucHVsc2U7XG4gIH1cblxuICB1cGRhdGVTZWxmKCkge1xuICAgIHRoaXMuZ2V0TWVzc2FnZURhdGEoKTtcbiAgfVxuXG4gIGdldE1lc3NhZ2VEYXRhKCkge1xuICAgIGNvbnN0IG1lc3NhZ2VJRHMgPSB0aGlzLnBDb25uJC5nZXRDb25maWdQcm9wcygpLm1lc3NhZ2VJRHM7XG4gICAgY29uc3QgdXNlck5hbWUgPSB0aGlzLnBDb25uJC5nZXRDb25maWdQcm9wcygpLmN1cnJlbnRVc2VyO1xuICAgIGNvbnN0IGltYWdlS2V5ID0gdGhpcy5wQ29ubiQuZ2V0VmFsdWUoJ09wZXJhdG9ySUQucHlJbWFnZUluc0tleScpO1xuXG4gICAgY29uc3Qgb0RhdGEgPSB0aGlzLnBDb25uJC5nZXREYXRhT2JqZWN0KCk7XG5cbiAgICBpZiAobWVzc2FnZUlEcyAmJiBtZXNzYWdlSURzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucHVsc2VNZXNzYWdlcyQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9EYXRhLnB1bHNlLm1lc3NhZ2VzKSk7XG5cbiAgICAgIC8vIGNvbnZlcnQgdG8ganVzdCBhbiBhcnJheSBvZiBvYmplY3RzXG4gICAgICB0aGlzLnB1bHNlTWVzc2FnZXMkID0gdGhpcy5jb252ZXJ0VG9BcnJheSh0aGlzLnB1bHNlTWVzc2FnZXMkKTtcblxuICAgICAgLy8gY3JlYXRlIGEgY29weSwgc28gd2UgY2FuIG1vZGlmeVxuICAgICAgdGhpcy5wdWxzZU1lc3NhZ2VzJCA9IHRoaXMuYXBwZW5kUHVsc2VNZXNzYWdlKHRoaXMucHVsc2VNZXNzYWdlcyQpO1xuXG4gICAgICAvLyBtb3N0IHJlY2VudCBvbiB0b3BcbiAgICAgIHRoaXMucHVsc2VNZXNzYWdlcyQgPSB0aGlzLnB1bHNlTWVzc2FnZXMkLnNvcnQoKGEsIGIpID0+IChhLnVwZGF0ZVRpbWVVVEMgPCBiLnVwZGF0ZVRpbWVVVEMgPyAxIDogLTEpKTtcbiAgICB9XG4gIH1cblxuICBjb252ZXJ0VG9BcnJheShtZXNzYWdlczogYW55W10pOiBhbnlbXSB7XG4gICAgY29uc3QgYXJNZXNzYWdlczogYW55W10gPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFyTWVzc2FnZXMucHVzaChtZXNzYWdlc1tpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFyTWVzc2FnZXM7XG4gIH1cblxuICBhcHBlbmRQdWxzZU1lc3NhZ2UobWVzc2FnZXM6IGFueVtdKTogYW55W10ge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWVzc2FnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBtZXNzYWdlc1tpXTtcbiAgICAgIGNvbnN0IHBvc3RlZFRpbWUgPSBtZXNzYWdlLnBvc3RlZFRpbWU7XG4gICAgICBjb25zdCB1cGRhdGVkVGltZSA9IG1lc3NhZ2UudXBkYXRlZFRpbWU7XG5cbiAgICAgIHRoaXMuc2hvd1JlcGx5Q29tbWVudCRbbWVzc2FnZS5JRF0gPSBmYWxzZTtcblxuICAgICAgbWVzc2FnZS5kaXNwbGF5UG9zdGVkVGltZSA9IHRoaXMudXRpbHMuZ2VuZXJhdGVEYXRlVGltZShwb3N0ZWRUaW1lLCAnRGF0ZVRpbWUtU2luY2UnKTtcblxuICAgICAgLy8gZm9yIHNvcnRpbmcgbGFzdGVkIHVwZGF0ZVxuICAgICAgaWYgKHVwZGF0ZWRUaW1lICE9IG51bGwpIHtcbiAgICAgICAgbWVzc2FnZS51cGRhdGVUaW1lVVRDID0gbmV3IERhdGUodXBkYXRlZFRpbWUpLmdldFRpbWUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1lc3NhZ2UudXBkYXRlVGltZVVUQyA9IG5ldyBEYXRlKHBvc3RlZFRpbWUpLmdldFRpbWUoKTtcbiAgICAgIH1cblxuICAgICAgbWVzc2FnZS5kaXNwbGF5UG9zdGVkQnkgPSBtZXNzYWdlLnBvc3RlZEJ5VXNlci5uYW1lO1xuICAgICAgbWVzc2FnZS5kaXNwbGF5UG9zdGVkQnlJbml0aWFscyA9IHRoaXMudXRpbHMuZ2V0SW5pdGlhbHMobWVzc2FnZS5wb3N0ZWRCeVVzZXIubmFtZSk7XG5cbiAgICAgIC8vIGlmIGRpZG4ndCBicmVhaywgdGhlbiBsb29rIGF0IHRoZSByZXBsaWVzXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1lc3NhZ2UucmVwbGllcy5sZW5ndGg7IGorKykge1xuICAgICAgICBjb25zdCByZXBseSA9IG1lc3NhZ2UucmVwbGllc1tqXTtcblxuICAgICAgICBjb25zdCByZXBseVBvc3RlZFRpbWUgPSByZXBseS5wb3N0ZWRUaW1lO1xuICAgICAgICByZXBseS5kaXNwbGF5UG9zdGVkVGltZSA9IHRoaXMudXRpbHMuZ2VuZXJhdGVEYXRlVGltZShyZXBseVBvc3RlZFRpbWUsICdEYXRlVGltZS1TaW5jZScpO1xuXG4gICAgICAgIC8vIGxldCBvUmVwbHlVc2VyID0gdGhpcy51c2VyRGF0YS5nZXQocmVwbHkucG9zdGVkQnlVc2VyKTtcbiAgICAgICAgY29uc3Qgb1JlcGx5VXNlciA9IHJlcGx5LnBvc3RlZEJ5VXNlcjtcblxuICAgICAgICBpZiAob1JlcGx5VXNlcikge1xuICAgICAgICAgIHJlcGx5LmRpc3BsYXlQb3N0ZWRCeSA9IG9SZXBseVVzZXIubmFtZTtcbiAgICAgICAgICByZXBseS5kaXNwbGF5UG9zdGVkQnlJbml0aWFscyA9IHRoaXMudXRpbHMuZ2V0SW5pdGlhbHMob1JlcGx5VXNlci5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gZm9yXG5cbiAgICByZXR1cm4gbWVzc2FnZXM7XG4gIH1cblxuICB1cGRhdGVNZXNzYWdlc1dpdGhPcGVyYXRvcnMoKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnB1bHNlTWVzc2FnZXMkLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy5wdWxzZU1lc3NhZ2VzJFtpXTtcblxuICAgICAgY29uc3QgcG9zdGVkVGltZSA9IG1lc3NhZ2UucG9zdGVkVGltZTtcblxuICAgICAgdGhpcy5zaG93UmVwbHlDb21tZW50JFttZXNzYWdlLklEXSA9IGZhbHNlO1xuXG4gICAgICBtZXNzYWdlLmRpc3BsYXlQb3N0ZWRUaW1lID0gdGhpcy51dGlscy5nZW5lcmF0ZURhdGVUaW1lKHBvc3RlZFRpbWUsICdEYXRlVGltZS1TaW5jZScpO1xuXG4gICAgICBjb25zdCBvVXNlciA9IHRoaXMudXNlckRhdGEuZ2V0KG1lc3NhZ2UucG9zdGVkQnkpO1xuXG4gICAgICBpZiAob1VzZXIpIHtcbiAgICAgICAgbWVzc2FnZS5kaXNwbGF5UG9zdGVkQnkgPSBvVXNlci5weVVzZXJOYW1lO1xuICAgICAgICBtZXNzYWdlLmRpc3BsYXlQb3N0ZWRCeUluaXRpYWxzID0gdGhpcy51dGlscy5nZXRJbml0aWFscyhvVXNlci5weVVzZXJOYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG9Vc2VyUGFyYW1zID0ge1xuICAgICAgICAgIE9wZXJhdG9ySWQ6IG1lc3NhZ2UucG9zdGVkQnlcbiAgICAgICAgfTtcbiAgICAgICAgLy8gRG8gc29tZXRoaW5nIHdpdGggb1VzZXJQYXJhbXNcbiAgICAgIH1cblxuICAgICAgLy8gaWYgZGlkbid0IGJyZWFrLCB0aGVuIGxvb2sgYXQgdGhlIHJlcGxpZXNcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWVzc2FnZS5yZXBsaWVzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGNvbnN0IHJlcGx5ID0gbWVzc2FnZS5yZXBsaWVzW2pdO1xuXG4gICAgICAgIGNvbnN0IHJlcGx5UG9zdGVkVGltZSA9IHJlcGx5LnBvc3RlZFRpbWU7XG4gICAgICAgIHJlcGx5LmRpc3BsYXlQb3N0ZWRUaW1lID0gdGhpcy51dGlscy5nZW5lcmF0ZURhdGVUaW1lKHJlcGx5UG9zdGVkVGltZSwgJ0RhdGVUaW1lLVNpbmNlJyk7XG5cbiAgICAgICAgLy8gbGV0IG9SZXBseVVzZXIgPSB0aGlzLnVzZXJEYXRhLmdldChyZXBseS5wb3N0ZWRCeVVzZXIpO1xuICAgICAgICBjb25zdCBvUmVwbHlVc2VyID0gcmVwbHkucG9zdGVkQnlVc2VyO1xuXG4gICAgICAgIGlmIChvUmVwbHlVc2VyKSB7XG4gICAgICAgICAgcmVwbHkuZGlzcGxheVBvc3RlZEJ5ID0gb1JlcGx5VXNlci5uYW1lO1xuICAgICAgICAgIHJlcGx5LmRpc3BsYXlQb3N0ZWRCeUluaXRpYWxzID0gdGhpcy51dGlscy5nZXRJbml0aWFscyhvUmVwbHlVc2VyLm5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBmb3JcbiAgfVxuXG4gIHVwZGF0ZUN1cnJlbnRVc2VyTmFtZShzVXNlcjogc3RyaW5nKSB7XG4gICAgdGhpcy5jdXJyZW50VXNlckluaXRpYWxzJCA9IHRoaXMudXRpbHMuZ2V0SW5pdGlhbHMoc1VzZXIpO1xuICAgIHRoaXMuY3VycmVudFVzZXJOYW1lJCA9IHNVc2VyO1xuICB9XG5cbiAgcG9zdENsaWNrKCkge1xuICAgIC8vIGRvbid0IHNlbmQgYSBibGFuayBtZXNzYWdlXG4gICAgaWYgKHRoaXMucHVsc2VDb252ZXJzYXRpb24gJiYgdGhpcy5wdWxzZUNvbnZlcnNhdGlvbiAhPSAnJykge1xuICAgICAgLy8gbGV0IHB1bHNlTWVzc2FnZSA9IHtcbiAgICAgIC8vICAgY29udGV4dE5hbWUgOiB0aGlzLnBDb25uJC5nZXRDb250ZXh0TmFtZSgpLFxuICAgICAgLy8gICBtZXNzYWdlOiB0aGlzLnB1bHNlQ29udmVyc2F0aW9uLFxuICAgICAgLy8gICBwdWxzZUNvbnRleHQ6IHRoaXMucENvbm4kLmdldFZhbHVlKFwiLnB6SW5zS2V5XCIpXG4gICAgICAvLyB9O1xuXG4gICAgICAvLyBkZWJ1Z2dlcjtcbiAgICAgIC8vIHVzZWQgdG8gYmU6IHRoaXMuLypmZWVkQVBJLiovcG9zdE1lc3NhZ2UocHVsc2VNZXNzYWdlKTtcbiAgICAgIC8vIFdpdGggbGF0ZXN0IEZlZWRBUEksIHRoZSAxc3QgYXJnIHNob3VsZCBiZSBnZXRDb25maWdQcm9wcygpLnZhbHVlXG5cbiAgICAgIC8vIElmIGZlZWRBUEkgaXMgZGVmaW5lZCB0aGVuIG9ubHkgcG9zdCBtZXNzYWdlXG4gICAgICBpZiAodGhpcy5mZWVkQVBJKSB7XG4gICAgICAgIHRoaXMuLyogZmVlZEFQSS4gKi8gcG9zdE1lc3NhZ2UodGhpcy5wQ29ubiQuZ2V0Q29uZmlnUHJvcHMoKS52YWx1ZSwgdGhpcy5wdWxzZUNvbnZlcnNhdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcIldlIGRvbid0IHN1cHBvcnQgUHVsc2UgeWV0XCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNsZWFyIG91dCBsb2NhbCBjb3B5XG4gICAgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwdWxzZU1lc3NhZ2UnKSBhcyBIVE1MRWxlbWVudCB8IGFueSkudmFsdWUgPSAnJztcbiAgICB0aGlzLnB1bHNlQ29udmVyc2F0aW9uID0gJyc7XG4gIH1cblxuICBtZXNzYWdlQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnB1bHNlQ29udmVyc2F0aW9uID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuICB9XG5cbiAgbGlrZUNsaWNrKG1lc3NhZ2VJRDogc3RyaW5nLCByTWVzc2FnZUlEOiBzdHJpbmcsIGJMaWtlZEJ5TWU6IGJvb2xlYW4sIGxldmVsOiBzdHJpbmcpIHtcbiAgICBsZXQgcHVsc2VNZXNzYWdlID0ge307XG5cbiAgICBpZiAobGV2ZWwgPT09ICd0b3AnKSB7XG4gICAgICBwdWxzZU1lc3NhZ2UgPSB7XG4gICAgICAgIHB1bHNlQ29udGV4dDogck1lc3NhZ2VJRCxcbiAgICAgICAgaXNSZXBseTogbnVsbCxcbiAgICAgICAgY29udGV4dE5hbWU6IHRoaXMucENvbm4kLmdldENvbnRleHROYW1lKCksXG4gICAgICAgIGxpa2VkQnk6IGJMaWtlZEJ5TWUsXG4gICAgICAgIG1lc3NhZ2VJRFxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHVsc2VNZXNzYWdlID0ge1xuICAgICAgICBwdWxzZUNvbnRleHQ6IHJNZXNzYWdlSUQsXG4gICAgICAgIGlzUmVwbHk6IHRydWUsXG4gICAgICAgIGNvbnRleHROYW1lOiB0aGlzLnBDb25uJC5nZXRDb250ZXh0TmFtZSgpLFxuICAgICAgICBsaWtlZEJ5OiBiTGlrZWRCeU1lLFxuICAgICAgICBtZXNzYWdlSURcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gZGVidWdnZXI7XG4gICAgdGhpcy4vKiBmZWVkQVBJLiAqLyBsaWtlTWVzc2FnZShwdWxzZU1lc3NhZ2UpO1xuICB9XG5cbiAgY29tbWVudENsaWNrKG1lc3NhZ2VJRCkge1xuICAgIC8vIGl0ZXJhdG9yIHRocm91Z2ggbWVzc2FnZXMsIGZpbmQgbWF0Y2gsIHR1cm4gb24gY29tbWVudCBlbnRyeVxuICAgIGNvbnN0IGZvdW5kTWVzc2FnZSA9IHRoaXMucHVsc2VNZXNzYWdlcyQuZmluZChtZXNzYWdlID0+IG1lc3NhZ2UuSUQgPT09IG1lc3NhZ2VJRCk7XG5cbiAgICBpZiAoZm91bmRNZXNzYWdlKSB7XG4gICAgICB0aGlzLnNob3dSZXBseUNvbW1lbnQkW2ZvdW5kTWVzc2FnZS5JRF0gPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcG9zdENvbW1lbnRDbGljayhtZXNzYWdlSUQpIHtcbiAgICAvLyBkZWJ1Z2dlcjtcblxuICAgIGlmICh0aGlzLnB1bHNlQ29tbWVudFttZXNzYWdlSURdICYmIHRoaXMucHVsc2VDb21tZW50W21lc3NhZ2VJRF0gIT0gJycpIHtcbiAgICAgIC8vIGxldCBwdWxzZU1lc3NhZ2UgPSB7XG4gICAgICAvLyAgIGNvbnRleHROYW1lIDogdGhpcy5wQ29ubiQuZ2V0Q29udGV4dE5hbWUoKSxcbiAgICAgIC8vICAgbWVzc2FnZTogdGhpcy5wdWxzZUNvbW1lbnRbbWVzc2FnZUlEXSxcbiAgICAgIC8vICAgcHVsc2VDb250ZXh0OiBtZXNzYWdlSUQsXG4gICAgICAvLyAgIHJlcGx5OiB0cnVlXG4gICAgICAvLyB9O1xuXG4gICAgICAvLyBkZWJ1Z2dlcjtcbiAgICAgIC8vIFVzZWQgdG8gYmU6IHRoaXMuLypmZWVkQVBJLiovcG9zdE1lc3NhZ2UocHVsc2VNZXNzYWdlKTtcbiAgICAgIC8vICBMYXRlc3QgdXBkYXRlIHRvIEFQSSBoYXMgY2hhbmdlZCBhbmQgdGhlIHBvc3RNZXNzYWdlIGFjdHVhbGx5IGdldHNcbiAgICAgIC8vICB0aGUgcHVsc2UgY29udGV4dC4uLlxuICAgICAgLy8gdXNlZCB0byB1c2U6IGNvbnRleHROYW1lXG4gICAgICAvLyBuZXcgRmVlZEFQSSB3YW50cyBhcmdzIHRvIGJlIG1lc3NhZ2VJRCwgdGhpcy5wdWxzZUNvbW1lbnRbbWVzc2FnZUlEXSwgdHJ1ZSAoc2luY2UgdGhpcyBpcyBhIHJlcGx5KVxuICAgICAgdGhpcy4vKiBmZWVkQVBJLiAqLyBwb3N0TWVzc2FnZShtZXNzYWdlSUQsIHRoaXMucHVsc2VDb21tZW50W21lc3NhZ2VJRF0sIHRydWUpO1xuXG4gICAgICB0aGlzLnB1bHNlQ29tbWVudFttZXNzYWdlSURdID0gJyc7XG4gICAgfVxuICB9XG5cbiAgbmV3Q29tbWVudENoYW5nZShldmVudCwgbWVzc2FnZUlEKSB7XG4gICAgdGhpcy5wdWxzZUNvbW1lbnRbbWVzc2FnZUlEXSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgfVxufVxuIiwiPGRpdj5cbiAgPGRpdiBzdHlsZT1cInRleHQtYWxpZ246IGxlZnRcIj5cbiAgICA8aDM+UHVsc2U8L2gzPlxuXG4gICAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2UtZGl2aWRlclwiPjwvZGl2PlxuXG4gICAgPGJyIC8+XG4gICAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2VcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwc2RrLWF2YXRhci1iaWdcIj57eyB0aGlzLmN1cnJlbnRVc2VySW5pdGlhbHMkIH19PC9kaXY+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJwc2RrLWZ1bGwtd2lkdGhcIj5cbiAgICAgICAgPHRleHRhcmVhIG1hdElucHV0IHJvd3M9XCI1XCIgaWQ9XCJwdWxzZU1lc3NhZ2VcIiBwbGFjZWhvbGRlcj1cIlN0YXJ0IGEgY29udmVyc2F0aW9uXCIgdHlwZT1cInRleHRcIiAoY2hhbmdlKT1cIm1lc3NhZ2VDaGFuZ2UoJGV2ZW50KVwiPjwvdGV4dGFyZWE+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48bWF0LWdyaWQtbGlzdCBjb2xzPVwiMlwiIHJvd0hlaWdodD1cIjYuMjVyZW1cIj5cbiAgPG1hdC1ncmlkLXRpbGU+IDwvbWF0LWdyaWQtdGlsZT5cbiAgPG1hdC1ncmlkLXRpbGU+XG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAoY2xpY2spPVwicG9zdENsaWNrKClcIj5Qb3N0PC9idXR0b24+XG4gIDwvbWF0LWdyaWQtdGlsZT5cbjwvbWF0LWdyaWQtbGlzdD5cblxuPGRpdiAqbmdGb3I9XCJsZXQgcHVsc2VNZXNzYWdlIG9mIHB1bHNlTWVzc2FnZXMkOyBsZXQgb2RkID0gb2RkXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiBsZWZ0XCIgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwib2RkID8gJ3doaXRlJyA6ICcjZWVlZWVlJ1wiPlxuICA8ZGl2IGNsYXNzPVwicHNkay1wdWxzZS1kaXZpZGVyXCI+PC9kaXY+XG4gIDxiciAvPlxuICA8ZGl2IGNsYXNzPVwicHNkay1wdWxzZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJwc2RrLWF2YXRhci1iaWdcIj57eyBwdWxzZU1lc3NhZ2UuZGlzcGxheVBvc3RlZEJ5SW5pdGlhbHMgfX08L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicHNkay1wdWxzZS1tZXNzYWdlLWdyb3VwXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicHNkay1wdWxzZS1tZXNzYWdlLWJ5XCI+e3sgcHVsc2VNZXNzYWdlLmRpc3BsYXlQb3N0ZWRCeSB9fTwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2UtbWVzc2FnZS10aW1lXCI+e3sgcHVsc2VNZXNzYWdlLmRpc3BsYXlQb3N0ZWRUaW1lIH19PC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwicHNkay1wdWxzZS1tZXNzYWdlLXRleHRcIj57eyBwdWxzZU1lc3NhZ2UubWVzc2FnZSB9fTwvZGl2PlxuICA8ZGl2IGNsYXNzPVwicHNkay1wdWxzZS1tZXNzYWdlLWFjdGlvbnNcIj5cbiAgICA8ZGl2IGNsYXNzPVwicHNkay1wdWxzZS1tZXNzYWdlLWFjdGlvbi1ncm91cFwiPlxuICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIChjbGljayk9XCJjb21tZW50Q2xpY2socHVsc2VNZXNzYWdlLklEKVwiPlxuICAgICAgICA8aW1nIGNsYXNzPVwicHNkay1jb21tZW50LXN2Zy1pY29uXCIgc3JjPVwie3sgc3ZnQ29tbWVudCQgfX1cIiAvPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJwc2RrLXB1bHNlLW1lc3NhZ2UtbGlrZS1sYWJlbFwiXG4gICAgICAgICAgPkNvbW1lbnQgPHNwYW4gKm5nSWY9XCJwdWxzZU1lc3NhZ2U/LnJlcGxpZXMubGVuZ3RoID4gMFwiPiB8IHt7IHB1bHNlTWVzc2FnZS5yZXBsaWVzLmxlbmd0aCB9fTwvc3Bhbj48L2xhYmVsXG4gICAgICAgID5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJwc2RrLXB1bHNlLW1lc3NhZ2UtYWN0aW9uLWxpa2VcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJwdWxzZU1lc3NhZ2U/Lmxpa2VDb3VudDsgZWxzZSBub3RMaWtlZFwiPlxuICAgICAgICA8YnV0dG9uICpuZ0lmPVwicHVsc2VNZXNzYWdlPy5saWtlZEJ5TWUgPT0gJ3RydWUnXCIgbWF0LWJ1dHRvbiAoY2xpY2spPVwibGlrZUNsaWNrKHB1bHNlTWVzc2FnZS5JRCwgcHVsc2VNZXNzYWdlLklELCB0cnVlLCAndG9wJylcIj5cbiAgICAgICAgICA8IS0tIDxtYXQtaWNvbiBjbGFzcz1cInBzZGstaWNvbi1saWtlZC1ieS1tZVwiIHN2Z0ljb249XCJ0aHVtYi11cFwiIG1hc3RMaXN0SWNvbiA+PC9tYXQtaWNvbj4gLS0+XG4gICAgICAgICAgPGltZyBjbGFzcz1cInBzZGstbGlrZWQtYnktbWUtc3ZnLWljb25cIiBzcmM9XCJ7eyBzdmdMaWtlZEJ5TWUkIH19XCIgLz5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJwc2RrLXB1bHNlLW1lc3NhZ2UtbGlrZS1sYWJlbFwiPkxpa2UgfCB7eyBwdWxzZU1lc3NhZ2UubGlrZUNvdW50IH19PC9sYWJlbD5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gKm5nSWY9XCJwdWxzZU1lc3NhZ2U/Lmxpa2VkQnlNZSAhPSAndHJ1ZSdcIiBtYXQtYnV0dG9uIChjbGljayk9XCJsaWtlQ2xpY2socHVsc2VNZXNzYWdlLklELCBwdWxzZU1lc3NhZ2UuSUQsIGZhbHNlLCAndG9wJylcIj5cbiAgICAgICAgICA8IS0tIDxtYXQtaWNvbiBjbGFzcz1cInBzZGstaWNvblwiIHN2Z0ljb249XCJ0aHVtYi11cC1vdXRsaW5lXCIgbWFzdExpc3RJY29uID48L21hdC1pY29uPiAtLT5cbiAgICAgICAgICA8aW1nIGNsYXNzPVwicHNkay1saWtlLXN2Zy1pY29uXCIgc3JjPVwie3sgc3ZnTGlrZSQgfX1cIiAvPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInBzZGstcHVsc2UtbWVzc2FnZS1saWtlLWxhYmVsXCI+TGlrZSB8IHt7IHB1bHNlTWVzc2FnZS5saWtlQ291bnQgfX08L2xhYmVsPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLXRlbXBsYXRlICNub3RMaWtlZD5cbiAgICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIChjbGljayk9XCJsaWtlQ2xpY2socHVsc2VNZXNzYWdlLklELCBwdWxzZU1lc3NhZ2UuSUQsIGZhbHNlLCAndG9wJylcIj5cbiAgICAgICAgICA8IS0tIDxtYXQtaWNvbiBjbGFzcz1cInBzZGstaWNvblwiIHN2Z0ljb249XCJ0aHVtYi11cC1vdXRsaW5lXCIgbWFzdExpc3RJY29uID48L21hdC1pY29uPiAtLT5cbiAgICAgICAgICA8aW1nIGNsYXNzPVwicHNkay1saWtlLXN2Zy1pY29uXCIgc3JjPVwie3sgc3ZnTGlrZSQgfX1cIiAvPlxuICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInBzZGstcHVsc2UtbWVzc2FnZS1saWtlLWxhYmVsXCI+TGlrZTwvbGFiZWw+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj1cInB1bHNlTWVzc2FnZT8ucmVwbGllc1wiIGNsYXNzPVwicHNkay1wdWxzZS1yZXBseVwiPlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IHJlcGx5TWVzc2FnZSBvZiBwdWxzZU1lc3NhZ2UucmVwbGllc1wiIGNsYXNzPVwicHNkay1wdWxzZS1yZXBseS1hbGlnblwiPlxuICAgICAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2UtZGl2aWRlclwiPjwvZGl2PlxuICAgICAgPGJyIC8+XG4gICAgICA8ZGl2IGNsYXNzPVwicHNkay1wdWxzZS1yZXBseS1ncm91cFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHNkay1hdmF0YXJcIj57eyByZXBseU1lc3NhZ2UuZGlzcGxheVBvc3RlZEJ5SW5pdGlhbHMgfX08L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2UtcmVwbHktYnlcIj57eyByZXBseU1lc3NhZ2UuZGlzcGxheVBvc3RlZEJ5IH19PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwc2RrLXB1bHNlLXJlcGx5LW1lc3NhZ2VcIj57eyByZXBseU1lc3NhZ2UubWVzc2FnZSB9fTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicHNkay1wdWxzZS1yZXBseS1hY3Rpb25zXCI+XG4gICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPVwiY29tbWVudENsaWNrKHB1bHNlTWVzc2FnZS5JRClcIiBjbGFzcz1cInBzZGstcHVsc2UtcmVwbHktY29tbWVudFwiPlxuICAgICAgICAgIDxpbWcgY2xhc3M9XCJwc2RrLWNvbW1lbnQtc3ZnLWljb25cIiBzcmM9XCJ7eyBzdmdDb21tZW50JCB9fVwiIC8+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwicmVwbHlNZXNzYWdlPy5saWtlQ291bnQ7IGVsc2UgcmVwbHlOb3RMaWtlZFwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwicmVwbHlNZXNzYWdlPy5saWtlZEJ5TWUgPT09ICd0cnVlJ1wiXG4gICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwibGlrZUNsaWNrKHB1bHNlTWVzc2FnZS5JRCwgcmVwbHlNZXNzYWdlLklELCB0cnVlLCAncmVwbHknKVwiXG4gICAgICAgICAgICBjbGFzcz1cInBzZGstcHVsc2UtcmVwbHktbGlrZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGltZyBjbGFzcz1cInBzZGstbGlrZWQtYnktbWUtc3ZnLWljb25cIiBzcmM9XCJ7eyBzdmdMaWtlZEJ5TWUkIH19XCIgLz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cInJlcGx5TWVzc2FnZT8ubGlrZWRCeU1lICE9ICd0cnVlJ1wiXG4gICAgICAgICAgICBtYXQtYnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwibGlrZUNsaWNrKHB1bHNlTWVzc2FnZS5JRCwgcmVwbHlNZXNzYWdlLklELCBmYWxzZSwgJ3JlcGx5JylcIlxuICAgICAgICAgICAgY2xhc3M9XCJwc2RrLXB1bHNlLXJlcGx5LWxpa2VcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJwc2RrLWxpa2Utc3ZnLWljb25cIiBzcmM9XCJ7eyBzdmdMaWtlJCB9fVwiIC8+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwicHNkay1wdWxzZS1yZXBseS1saWtlLWxhYmVsXCI+TGlrZSB8IHt7IHJlcGx5TWVzc2FnZS5saWtlQ291bnQgfX08L2xhYmVsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNyZXBseU5vdExpa2VkPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwicmVwbHlNZXNzYWdlPy5saWtlZEJ5TWUgIT0gJ3RydWUnXCJcbiAgICAgICAgICAgIG1hdC1idXR0b25cbiAgICAgICAgICAgIChjbGljayk9XCJsaWtlQ2xpY2socHVsc2VNZXNzYWdlLklELCByZXBseU1lc3NhZ2UuSUQsIGZhbHNlLCAncmVwbHknKVwiXG4gICAgICAgICAgICBjbGFzcz1cInBzZGstcHVsc2UtcmVwbHktbGlrZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGltZyBjbGFzcz1cInBzZGstbGlrZS1zdmctaWNvblwiIHNyYz1cInt7IHN2Z0xpa2UkIH19XCIgLz5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwicHNkay1wdWxzZS1yZXBseS10aW1lXCI+e3sgcmVwbHlNZXNzYWdlLmRpc3BsYXlQb3N0ZWRUaW1lIH19PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxiciAvPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiAqbmdJZj1cInNob3dSZXBseUNvbW1lbnQkW3B1bHNlTWVzc2FnZS5JRF0gPT0gdHJ1ZVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInBzZGstcHVsc2UtZGl2aWRlclwiPjwvZGl2PlxuICAgICAgPGJyIC8+XG4gICAgICA8ZGl2IGNsYXNzPVwicHNkay1wdWxzZS1jb21tZW50LWdyb3VwXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwc2RrLWF2YXRhclwiPnt7IHRoaXMuY3VycmVudFVzZXJJbml0aWFscyQgfX08L2Rpdj5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwicHNkay1mdWxsLXdpZHRoXCI+XG4gICAgICAgICAgPHRleHRhcmVhXG4gICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgcm93cz1cIjVcIlxuICAgICAgICAgICAgaWQ9XCJwdWxzZU1lc3NhZ2VcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJBZGQgYSBjb21tZW50XCJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwibmV3Q29tbWVudENoYW5nZSgkZXZlbnQsIHB1bHNlTWVzc2FnZS5JRClcIlxuICAgICAgICAgID48L3RleHRhcmVhPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8YnV0dG9uIG1hdC1idXR0b24gKGNsaWNrKT1cInBvc3RDb21tZW50Q2xpY2socHVsc2VNZXNzYWdlLklEKVwiIGNsYXNzPVwicHNkay1wdWxzZS1jb21tZW50LXBvc3RcIj5cbiAgICAgICAgICA8aW1nIGNsYXNzPVwicHNkay1zZW5kLXN2Zy1pY29uXCIgc3JjPVwie3sgc3ZnU2VuZCQgfX1cIiAvPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGJyIC8+XG48L2Rpdj5cbiJdfQ==