@pega/angular-sdk-components 0.242.7 → 0.242.8

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 (250) hide show
  1. package/esm2022/lib/_bridge/angular-pconnect.mjs +3 -3
  2. package/esm2022/lib/_bridge/component-mapper/component-mapper.component.mjs +3 -3
  3. package/esm2022/lib/_components/designSystemExtension/alert/alert.component.mjs +3 -3
  4. package/esm2022/lib/_components/designSystemExtension/alert-banner/alert-banner.component.mjs +3 -3
  5. package/esm2022/lib/_components/designSystemExtension/banner/banner.component.mjs +3 -3
  6. package/esm2022/lib/_components/designSystemExtension/case-create-stage/case-create-stage.component.mjs +3 -3
  7. package/esm2022/lib/_components/designSystemExtension/field-group/field-group.component.mjs +3 -3
  8. package/esm2022/lib/_components/designSystemExtension/material-case-summary/material-case-summary.component.mjs +4 -5
  9. package/esm2022/lib/_components/designSystemExtension/material-details/material-details.component.mjs +3 -3
  10. package/esm2022/lib/_components/designSystemExtension/material-details-fields/material-details-fields.component.mjs +9 -5
  11. package/esm2022/lib/_components/designSystemExtension/material-summary-item/material-summary-item.component.mjs +3 -3
  12. package/esm2022/lib/_components/designSystemExtension/material-summary-list/material-summary-list.component.mjs +3 -3
  13. package/esm2022/lib/_components/designSystemExtension/material-utility/material-utility.component.mjs +3 -3
  14. package/esm2022/lib/_components/designSystemExtension/material-vertical-tabs/material-vertical-tabs.component.mjs +3 -3
  15. package/esm2022/lib/_components/designSystemExtension/operator/operator.component.mjs +9 -7
  16. package/esm2022/lib/_components/designSystemExtension/pulse/pulse.component.mjs +3 -3
  17. package/esm2022/lib/_components/designSystemExtension/rich-text-editor/rich-text-editor.component.mjs +3 -3
  18. package/esm2022/lib/_components/designSystemExtension/wss-quick-create/wss-quick-create.component.mjs +3 -3
  19. package/esm2022/lib/_components/field/auto-complete/auto-complete.component.mjs +3 -3
  20. package/esm2022/lib/_components/field/cancel-alert/cancel-alert.component.mjs +3 -3
  21. package/esm2022/lib/_components/field/check-box/check-box.component.mjs +3 -3
  22. package/esm2022/lib/_components/field/currency/currency.component.mjs +23 -18
  23. package/esm2022/lib/_components/field/date/date.component.mjs +3 -3
  24. package/esm2022/lib/_components/field/date-time/date-time.component.mjs +21 -8
  25. package/esm2022/lib/_components/field/decimal/decimal.component.mjs +38 -20
  26. package/esm2022/lib/_components/field/dropdown/dropdown.component.mjs +15 -7
  27. package/esm2022/lib/_components/field/email/email.component.mjs +3 -3
  28. package/esm2022/lib/_components/field/group/group.component.mjs +3 -3
  29. package/esm2022/lib/_components/field/integer/integer.component.mjs +3 -3
  30. package/esm2022/lib/_components/field/list-view-action-buttons/list-view-action-buttons.component.mjs +5 -5
  31. package/esm2022/lib/_components/field/multiselect/multiselect.component.mjs +3 -3
  32. package/esm2022/lib/_components/field/percentage/percentage.component.mjs +31 -23
  33. package/esm2022/lib/_components/field/phone/phone.component.mjs +10 -15
  34. package/esm2022/lib/_components/field/radio-buttons/radio-buttons.component.mjs +3 -3
  35. package/esm2022/lib/_components/field/rich-text/rich-text.component.mjs +14 -7
  36. package/esm2022/lib/_components/field/scalar-list/scalar-list.component.mjs +3 -3
  37. package/esm2022/lib/_components/field/semantic-link/semantic-link.component.mjs +3 -3
  38. package/esm2022/lib/_components/field/text/text.component.mjs +6 -6
  39. package/esm2022/lib/_components/field/text-area/text-area.component.mjs +3 -3
  40. package/esm2022/lib/_components/field/text-content/text-content.component.mjs +3 -3
  41. package/esm2022/lib/_components/field/text-input/text-input.component.mjs +4 -4
  42. package/esm2022/lib/_components/field/time/time.component.mjs +23 -11
  43. package/esm2022/lib/_components/field/url/url.component.mjs +3 -3
  44. package/esm2022/lib/_components/field/user-reference/user-reference.component.mjs +66 -12
  45. package/esm2022/lib/_components/infra/Containers/flow-container/flow-container.component.mjs +11 -6
  46. package/esm2022/lib/_components/infra/Containers/flow-container/helpers.mjs +2 -2
  47. package/esm2022/lib/_components/infra/Containers/hybrid-view-container/hybrid-view-container.component.mjs +3 -3
  48. package/esm2022/lib/_components/infra/Containers/modal-view-container/modal-view-container.component.mjs +5 -6
  49. package/esm2022/lib/_components/infra/Containers/preview-view-container/preview-view-container.component.mjs +3 -3
  50. package/esm2022/lib/_components/infra/Containers/view-container/view-container.component.mjs +3 -3
  51. package/esm2022/lib/_components/infra/action-buttons/action-buttons.component.mjs +5 -5
  52. package/esm2022/lib/_components/infra/assignment/assignment.component.mjs +4 -7
  53. package/esm2022/lib/_components/infra/assignment-card/assignment-card.component.mjs +10 -30
  54. package/esm2022/lib/_components/infra/dashboard-filter/dashboard-filter.component.mjs +3 -3
  55. package/esm2022/lib/_components/infra/defer-load/defer-load.component.mjs +7 -5
  56. package/esm2022/lib/_components/infra/error-boundary/error-boundary.component.mjs +3 -3
  57. package/esm2022/lib/_components/infra/multi-step/multi-step.component.mjs +3 -3
  58. package/esm2022/lib/_components/infra/navbar/navbar.component.mjs +3 -3
  59. package/esm2022/lib/_components/infra/reference/reference.component.mjs +68 -78
  60. package/esm2022/lib/_components/infra/region/region.component.mjs +3 -3
  61. package/esm2022/lib/_components/infra/root-container/root-container.component.mjs +24 -19
  62. package/esm2022/lib/_components/infra/stages/stages.component.mjs +3 -3
  63. package/esm2022/lib/_components/infra/view/view.component.mjs +3 -3
  64. package/esm2022/lib/_components/template/app-shell/app-shell.component.mjs +3 -3
  65. package/esm2022/lib/_components/template/banner-page/banner-page.component.mjs +3 -3
  66. package/esm2022/lib/_components/template/base/details-template-base.mjs +3 -3
  67. package/esm2022/lib/_components/template/base/form-template-base.mjs +3 -3
  68. package/esm2022/lib/_components/template/case-summary/case-summary.component.mjs +3 -3
  69. package/esm2022/lib/_components/template/case-view/case-view.component.mjs +3 -3
  70. package/esm2022/lib/_components/template/confirmation/confirmation.component.mjs +3 -3
  71. package/esm2022/lib/_components/template/data-reference/data-reference.component.mjs +3 -3
  72. package/esm2022/lib/_components/template/default-form/default-form.component.mjs +6 -7
  73. package/esm2022/lib/_components/template/details/details.component.mjs +3 -3
  74. package/esm2022/lib/_components/template/details-narrow-wide/details-narrow-wide.component.mjs +3 -3
  75. package/esm2022/lib/_components/template/details-one-column/details-one-column.component.mjs +3 -3
  76. package/esm2022/lib/_components/template/details-sub-tabs/details-sub-tabs.component.mjs +3 -3
  77. package/esm2022/lib/_components/template/details-three-column/details-three-column.component.mjs +3 -3
  78. package/esm2022/lib/_components/template/details-two-column/details-two-column.component.mjs +3 -3
  79. package/esm2022/lib/_components/template/details-wide-narrow/details-wide-narrow.component.mjs +3 -3
  80. package/esm2022/lib/_components/template/dynamic-tabs/dynamic-tabs.component.mjs +3 -3
  81. package/esm2022/lib/_components/template/field-group-list/field-group-list.component.mjs +3 -3
  82. package/esm2022/lib/_components/template/field-group-template/field-group-template.component.mjs +47 -38
  83. package/esm2022/lib/_components/template/field-group-template/utils.mjs +11 -0
  84. package/esm2022/lib/_components/template/field-value-list/field-value-list.component.mjs +5 -5
  85. package/esm2022/lib/_components/template/inline-dashboard/inline-dashboard.component.mjs +3 -3
  86. package/esm2022/lib/_components/template/inline-dashboard-page/inline-dashboard-page.component.mjs +3 -3
  87. package/esm2022/lib/_components/template/list-page/list-page.component.mjs +3 -3
  88. package/esm2022/lib/_components/template/list-view/list-view.component.mjs +5 -5
  89. package/esm2022/lib/_components/template/multi-reference-readonly/multi-reference-readonly.component.mjs +3 -3
  90. package/esm2022/lib/_components/template/narrow-wide-form/narrow-wide-form.component.mjs +3 -3
  91. package/esm2022/lib/_components/template/one-column/one-column.component.mjs +3 -3
  92. package/esm2022/lib/_components/template/one-column-page/one-column-page.component.mjs +3 -3
  93. package/esm2022/lib/_components/template/one-column-tab/one-column-tab.component.mjs +3 -3
  94. package/esm2022/lib/_components/template/page/page.component.mjs +3 -3
  95. package/esm2022/lib/_components/template/promoted-filters/promoted-filters.component.mjs +3 -3
  96. package/esm2022/lib/_components/template/repeating-structures/repeating-structures.component.mjs +3 -3
  97. package/esm2022/lib/_components/template/simple-table/simple-table.component.mjs +3 -3
  98. package/esm2022/lib/_components/template/simple-table-manual/helpers.mjs +19 -3
  99. package/esm2022/lib/_components/template/simple-table-manual/simple-table-manual.component.mjs +58 -24
  100. package/esm2022/lib/_components/template/simple-table-select/simple-table-select.component.mjs +3 -3
  101. package/esm2022/lib/_components/template/single-reference-readonly/single-reference-readonly.component.mjs +3 -3
  102. package/esm2022/lib/_components/template/sub-tabs/sub-tabs.component.mjs +3 -3
  103. package/esm2022/lib/_components/template/three-column/three-column.component.mjs +3 -3
  104. package/esm2022/lib/_components/template/three-column-page/three-column-page.component.mjs +3 -3
  105. package/esm2022/lib/_components/template/two-column/two-column.component.mjs +3 -3
  106. package/esm2022/lib/_components/template/two-column-page/two-column-page.component.mjs +3 -3
  107. package/esm2022/lib/_components/template/two-column-tab/two-column-tab.component.mjs +3 -3
  108. package/esm2022/lib/_components/template/wide-narrow-form/wide-narrow-form.component.mjs +3 -3
  109. package/esm2022/lib/_components/template/wide-narrow-page/wide-narrow-page.component.mjs +3 -3
  110. package/esm2022/lib/_components/template/wss-nav-bar/wss-nav-bar.component.mjs +3 -3
  111. package/esm2022/lib/_components/widget/app-announcement/app-announcement.component.mjs +3 -3
  112. package/esm2022/lib/_components/widget/attachment/attachment.component.mjs +3 -3
  113. package/esm2022/lib/_components/widget/case-history/case-history.component.mjs +3 -3
  114. package/esm2022/lib/_components/widget/feed-container/feed-container.component.mjs +3 -3
  115. package/esm2022/lib/_components/widget/file-utility/file-utility.component.mjs +3 -3
  116. package/esm2022/lib/_components/widget/list-utility/list-utility.component.mjs +3 -3
  117. package/esm2022/lib/_components/widget/quick-create/quick-create.component.mjs +3 -3
  118. package/esm2022/lib/_components/widget/todo/todo.component.mjs +5 -5
  119. package/esm2022/lib/_components/widget/utility/utility.component.mjs +3 -3
  120. package/esm2022/lib/_directives/thousand-seperator.directive.mjs +3 -3
  121. package/esm2022/lib/_helpers/formatters/boolean.mjs +2 -2
  122. package/esm2022/lib/_helpers/formatters/common.mjs +6 -3
  123. package/esm2022/lib/_helpers/formatters/currency.mjs +2 -2
  124. package/esm2022/lib/_helpers/formatters/date.mjs +2 -2
  125. package/esm2022/lib/_helpers/formatters/format-utils.mjs +10 -2
  126. package/esm2022/lib/_helpers/formatters/index.mjs +16 -16
  127. package/esm2022/lib/_helpers/template-utils.mjs +3 -3
  128. package/esm2022/lib/_helpers/utils.mjs +40 -18
  129. package/esm2022/lib/_messages/error-messages.service.mjs +3 -3
  130. package/esm2022/lib/_messages/progress-spinner.service.mjs +3 -3
  131. package/esm2022/lib/_messages/update-worklist.service.mjs +3 -3
  132. package/esm2022/lib/_services/banner.service.mjs +3 -3
  133. package/esm2022/lib/_services/case.service.mjs +3 -3
  134. package/esm2022/lib/_services/datapage.service.mjs +3 -3
  135. package/esm2022/lib/_services/server-config.service.mjs +3 -3
  136. package/esm2022/public-api.mjs +5 -3
  137. package/fesm2022/pega-angular-sdk-components.mjs +919 -739
  138. package/fesm2022/pega-angular-sdk-components.mjs.map +1 -1
  139. package/lib/_components/designSystemExtension/banner/banner.component.d.ts +0 -1
  140. package/lib/_components/designSystemExtension/case-create-stage/case-create-stage.component.d.ts +0 -1
  141. package/lib/_components/designSystemExtension/material-case-summary/material-case-summary.component.d.ts +1 -1
  142. package/lib/_components/designSystemExtension/material-details-fields/material-details-fields.component.d.ts +1 -0
  143. package/lib/_components/designSystemExtension/operator/operator.component.d.ts +2 -3
  144. package/lib/_components/designSystemExtension/pulse/pulse.component.d.ts +0 -1
  145. package/lib/_components/field/auto-complete/auto-complete.component.d.ts +0 -1
  146. package/lib/_components/field/cancel-alert/cancel-alert.component.d.ts +0 -1
  147. package/lib/_components/field/check-box/check-box.component.d.ts +0 -1
  148. package/lib/_components/field/currency/currency.component.d.ts +0 -1
  149. package/lib/_components/field/date/date.component.d.ts +0 -1
  150. package/lib/_components/field/date-time/date-time.component.d.ts +1 -1
  151. package/lib/_components/field/decimal/decimal.component.d.ts +1 -1
  152. package/lib/_components/field/dropdown/dropdown.component.d.ts +1 -1
  153. package/lib/_components/field/email/email.component.d.ts +0 -1
  154. package/lib/_components/field/group/group.component.d.ts +0 -1
  155. package/lib/_components/field/integer/integer.component.d.ts +0 -1
  156. package/lib/_components/field/list-view-action-buttons/list-view-action-buttons.component.d.ts +1 -2
  157. package/lib/_components/field/multiselect/multiselect.component.d.ts +0 -1
  158. package/lib/_components/field/percentage/percentage.component.d.ts +1 -2
  159. package/lib/_components/field/phone/phone.component.d.ts +0 -7
  160. package/lib/_components/field/radio-buttons/radio-buttons.component.d.ts +0 -1
  161. package/lib/_components/field/rich-text/rich-text.component.d.ts +1 -2
  162. package/lib/_components/field/scalar-list/scalar-list.component.d.ts +0 -1
  163. package/lib/_components/field/semantic-link/semantic-link.component.d.ts +0 -1
  164. package/lib/_components/field/text/text.component.d.ts +0 -1
  165. package/lib/_components/field/text-area/text-area.component.d.ts +0 -1
  166. package/lib/_components/field/text-content/text-content.component.d.ts +0 -1
  167. package/lib/_components/field/text-input/text-input.component.d.ts +0 -1
  168. package/lib/_components/field/time/time.component.d.ts +1 -2
  169. package/lib/_components/field/url/url.component.d.ts +0 -1
  170. package/lib/_components/field/user-reference/user-reference.component.d.ts +0 -1
  171. package/lib/_components/infra/Containers/flow-container/flow-container.component.d.ts +0 -1
  172. package/lib/_components/infra/Containers/hybrid-view-container/hybrid-view-container.component.d.ts +0 -1
  173. package/lib/_components/infra/Containers/modal-view-container/modal-view-container.component.d.ts +0 -2
  174. package/lib/_components/infra/Containers/preview-view-container/preview-view-container.component.d.ts +0 -1
  175. package/lib/_components/infra/Containers/view-container/view-container.component.d.ts +0 -1
  176. package/lib/_components/infra/action-buttons/action-buttons.component.d.ts +1 -1
  177. package/lib/_components/infra/assignment/assignment.component.d.ts +0 -1
  178. package/lib/_components/infra/assignment-card/assignment-card.component.d.ts +2 -11
  179. package/lib/_components/infra/dashboard-filter/dashboard-filter.component.d.ts +0 -1
  180. package/lib/_components/infra/defer-load/defer-load.component.d.ts +1 -1
  181. package/lib/_components/infra/error-boundary/error-boundary.component.d.ts +1 -1
  182. package/lib/_components/infra/multi-step/multi-step.component.d.ts +0 -1
  183. package/lib/_components/infra/navbar/navbar.component.d.ts +0 -1
  184. package/lib/_components/infra/reference/reference.component.d.ts +23 -3
  185. package/lib/_components/infra/region/region.component.d.ts +0 -1
  186. package/lib/_components/infra/root-container/root-container.component.d.ts +3 -1
  187. package/lib/_components/infra/stages/stages.component.d.ts +0 -1
  188. package/lib/_components/infra/view/view.component.d.ts +0 -1
  189. package/lib/_components/template/app-shell/app-shell.component.d.ts +0 -1
  190. package/lib/_components/template/banner-page/banner-page.component.d.ts +0 -1
  191. package/lib/_components/template/base/details-template-base.d.ts +0 -1
  192. package/lib/_components/template/case-summary/case-summary.component.d.ts +0 -1
  193. package/lib/_components/template/case-view/case-view.component.d.ts +0 -1
  194. package/lib/_components/template/confirmation/confirmation.component.d.ts +0 -1
  195. package/lib/_components/template/data-reference/data-reference.component.d.ts +0 -1
  196. package/lib/_components/template/default-form/default-form.component.d.ts +2 -3
  197. package/lib/_components/template/details/details.component.d.ts +0 -1
  198. package/lib/_components/template/details-narrow-wide/details-narrow-wide.component.d.ts +0 -1
  199. package/lib/_components/template/details-one-column/details-one-column.component.d.ts +0 -1
  200. package/lib/_components/template/details-sub-tabs/details-sub-tabs.component.d.ts +0 -1
  201. package/lib/_components/template/details-three-column/details-three-column.component.d.ts +0 -1
  202. package/lib/_components/template/details-two-column/details-two-column.component.d.ts +0 -1
  203. package/lib/_components/template/details-wide-narrow/details-wide-narrow.component.d.ts +0 -1
  204. package/lib/_components/template/dynamic-tabs/dynamic-tabs.component.d.ts +0 -1
  205. package/lib/_components/template/field-group-template/field-group-template.component.d.ts +12 -9
  206. package/lib/_components/template/field-group-template/utils.d.ts +1 -0
  207. package/lib/_components/template/inline-dashboard/inline-dashboard.component.d.ts +0 -1
  208. package/lib/_components/template/inline-dashboard-page/inline-dashboard-page.component.d.ts +0 -1
  209. package/lib/_components/template/list-page/list-page.component.d.ts +0 -1
  210. package/lib/_components/template/list-view/list-view.component.d.ts +1 -2
  211. package/lib/_components/template/multi-reference-readonly/multi-reference-readonly.component.d.ts +0 -1
  212. package/lib/_components/template/narrow-wide-form/narrow-wide-form.component.d.ts +0 -1
  213. package/lib/_components/template/one-column/one-column.component.d.ts +0 -1
  214. package/lib/_components/template/one-column-page/one-column-page.component.d.ts +0 -1
  215. package/lib/_components/template/one-column-tab/one-column-tab.component.d.ts +0 -1
  216. package/lib/_components/template/page/page.component.d.ts +0 -1
  217. package/lib/_components/template/promoted-filters/promoted-filters.component.d.ts +0 -1
  218. package/lib/_components/template/repeating-structures/repeating-structures.component.d.ts +0 -1
  219. package/lib/_components/template/simple-table/simple-table.component.d.ts +0 -1
  220. package/lib/_components/template/simple-table-manual/helpers.d.ts +9 -2
  221. package/lib/_components/template/simple-table-manual/simple-table-manual.component.d.ts +8 -3
  222. package/lib/_components/template/simple-table-select/simple-table-select.component.d.ts +0 -1
  223. package/lib/_components/template/single-reference-readonly/single-reference-readonly.component.d.ts +0 -1
  224. package/lib/_components/template/sub-tabs/sub-tabs.component.d.ts +0 -1
  225. package/lib/_components/template/three-column/three-column.component.d.ts +0 -1
  226. package/lib/_components/template/three-column-page/three-column-page.component.d.ts +0 -1
  227. package/lib/_components/template/two-column/two-column.component.d.ts +0 -1
  228. package/lib/_components/template/two-column-page/two-column-page.component.d.ts +0 -1
  229. package/lib/_components/template/two-column-tab/two-column-tab.component.d.ts +0 -1
  230. package/lib/_components/template/wide-narrow-form/wide-narrow-form.component.d.ts +0 -1
  231. package/lib/_components/template/wide-narrow-page/wide-narrow-page.component.d.ts +0 -1
  232. package/lib/_components/template/wss-nav-bar/wss-nav-bar.component.d.ts +1 -2
  233. package/lib/_components/widget/app-announcement/app-announcement.component.d.ts +0 -1
  234. package/lib/_components/widget/attachment/attachment.component.d.ts +1 -2
  235. package/lib/_components/widget/case-history/case-history.component.d.ts +0 -1
  236. package/lib/_components/widget/feed-container/feed-container.component.d.ts +0 -1
  237. package/lib/_components/widget/file-utility/file-utility.component.d.ts +0 -1
  238. package/lib/_components/widget/quick-create/quick-create.component.d.ts +0 -1
  239. package/lib/_components/widget/todo/todo.component.d.ts +1 -2
  240. package/lib/_components/widget/utility/utility.component.d.ts +0 -1
  241. package/lib/_helpers/formatters/boolean.d.ts +1 -2
  242. package/lib/_helpers/formatters/common.d.ts +1 -1
  243. package/lib/_helpers/formatters/currency.d.ts +1 -2
  244. package/lib/_helpers/formatters/date.d.ts +1 -2
  245. package/lib/_helpers/formatters/index.d.ts +1 -2
  246. package/lib/_helpers/utils.d.ts +8 -0
  247. package/package.json +1 -1
  248. package/public-api.d.ts +4 -2
  249. package/esm2022/lib/_services/idle-detection.service.mjs +0 -26
  250. package/lib/_services/idle-detection.service.d.ts +0 -9
@@ -4,6 +4,7 @@ import { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';
4
4
  import { MatInputModule } from '@angular/material/input';
5
5
  import { MatFormFieldModule } from '@angular/material/form-field';
6
6
  import { NgxCurrencyDirective, NgxCurrencyInputMode } from 'ngx-currency';
7
+ import { interval } from 'rxjs';
7
8
  import { ComponentMapperComponent } from '../../../_bridge/component-mapper/component-mapper.component';
8
9
  import { handleEvent } from '../../../_helpers/event-util';
9
10
  import { getCurrencyCharacters, getCurrencyOptions } from '../../../_helpers/currency-utils';
@@ -32,6 +33,7 @@ export class DecimalComponent {
32
33
  this.componentReference = '';
33
34
  this.fieldControl = new FormControl(null, null);
34
35
  this.currencySymbol = '';
36
+ this.suffix = '';
35
37
  }
36
38
  ngOnInit() {
37
39
  // First thing in initialization is registering and subscribing to the AngularPConnect service
@@ -88,6 +90,7 @@ export class DecimalComponent {
88
90
  nValue = parseFloat(nValue);
89
91
  }
90
92
  this.value$ = nValue;
93
+ this.fieldControl.setValue(this.value$);
91
94
  }
92
95
  this.helperText = this.configProps$.helperText;
93
96
  this.placeholder = this.configProps$.placeholder || '';
@@ -130,25 +133,40 @@ export class DecimalComponent {
130
133
  if (this.bReadonly$ && this.formatter === 'Currency') {
131
134
  this.currencySymbol = theSymbols.theCurrencySymbol;
132
135
  }
136
+ if (this.bReadonly$ && this.formatter === 'Percentage') {
137
+ this.suffix = '%';
138
+ }
133
139
  this.decimalPrecision = this.configProps$?.decimalPrecision ?? 2;
134
140
  this.componentReference = this.pConn$.getStateProps().value;
141
+ // trigger display of error message with field control
142
+ if (this.angularPConnectData.validateMessage != null && this.angularPConnectData.validateMessage != '') {
143
+ const timer = interval(100).subscribe(() => {
144
+ this.fieldControl.setErrors({ message: true });
145
+ this.fieldControl.markAsTouched();
146
+ timer.unsubscribe();
147
+ });
148
+ }
135
149
  }
136
150
  fieldOnBlur(event) {
137
- const actionsApi = this.pConn$?.getActionsApi();
138
- const propName = this.pConn$?.getStateProps().value;
139
- let value = event?.target?.value;
140
- // replacing thousand separator with empty string as not required in api call
141
- if (this.configProps$.showGroupSeparators) {
142
- const thousandSep = this.thousandSeparator === '.' ? '\\.' : this.thousandSeparator;
143
- const regExp = new RegExp(String.raw `${thousandSep}`, 'g');
144
- value = value?.replace(regExp, '');
145
- }
146
- // replacing decimal separator with '.'
147
- if (this.decimalSeparator !== '.') {
148
- const regExp = new RegExp(String.raw `${this.decimalSeparator}`, 'g');
149
- value = value.replace(regExp, '.');
150
- }
151
- handleEvent(actionsApi, 'changeNblur', propName, value);
151
+ const oldVal = this.value$ ?? '';
152
+ const isValueChanged = event.target.value.toString() !== oldVal.toString();
153
+ if (isValueChanged) {
154
+ const actionsApi = this.pConn$?.getActionsApi();
155
+ const propName = this.pConn$?.getStateProps().value;
156
+ let value = event?.target?.value;
157
+ // replacing thousand separator with empty string as not required in api call
158
+ if (this.configProps$.showGroupSeparators) {
159
+ const thousandSep = this.thousandSeparator === '.' ? '\\.' : this.thousandSeparator;
160
+ const regExp = new RegExp(String.raw `${thousandSep}`, 'g');
161
+ value = value?.replace(regExp, '');
162
+ }
163
+ // replacing decimal separator with '.'
164
+ if (this.decimalSeparator !== '.') {
165
+ const regExp = new RegExp(String.raw `${this.decimalSeparator}`, 'g');
166
+ value = value.replace(regExp, '.');
167
+ }
168
+ handleEvent(actionsApi, 'changeNblur', propName, value);
169
+ }
152
170
  }
153
171
  getErrorMessage() {
154
172
  let errMessage = '';
@@ -165,10 +183,10 @@ export class DecimalComponent {
165
183
  }
166
184
  return errMessage;
167
185
  }
168
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: DecimalComponent, deps: [{ token: i1.AngularPConnectService }, { token: i0.ChangeDetectorRef }, { token: i2.Utils }], target: i0.ɵɵFactoryTarget.Component }); }
169
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: DecimalComponent, isStandalone: true, selector: "app-decimal", inputs: { pConn$: "pConn$", formGroup$: "formGroup$" }, ngImport: i0, template: "<div *ngIf=\"displayMode$; else noDisplayMode\">\n <component-mapper *ngIf=\"bVisible$ !== false\" name=\"FieldValueList\" [props]=\"{ label$, value$: formattedValue, displayMode$ }\"></component-mapper>\n</div>\n<ng-template #noDisplayMode>\n <div *ngIf=\"bHasForm$; else noEdit\">\n <div [formGroup]=\"formGroup$\" *ngIf=\"bVisible$\">\n <mat-form-field class=\"psdk-full-width\" subscriptSizing=\"dynamic\" [hintLabel]=\"helperText\">\n <mat-label>{{ label$ }}</mat-label>\n <input\n type=\"text\"\n matInput\n currencyMask\n [options]=\"{\n prefix: currencySymbol,\n thousands: thousandSeparator,\n decimal: decimalSeparator,\n align: 'left',\n nullable: true,\n precision: decimalPrecision,\n inputMode: inputMode\n }\"\n [placeholder]=\"placeholder\"\n step=\"0.01\"\n [formControlName]=\"controlName$\"\n [required]=\"bRequired$\"\n [formControl]=\"fieldControl\"\n [attr.data-test-id]=\"testId\"\n (blur)=\"fieldOnBlur($event)\"\n [readonly]=\"bReadonly$\"\n />\n <mat-error *ngIf=\"fieldControl.invalid\">{{ getErrorMessage() }}</mat-error>\n </mat-form-field>\n </div>\n </div>\n</ng-template>\n<ng-template #noEdit>\n <component-mapper *ngIf=\"bVisible$ !== false\" name=\"Text\" [props]=\"{ pConn$, formatAs$: 'text' }\"></component-mapper>\n</ng-template>\n", styles: [".psdk-full-width{width:100%}.psdk-label-readonly{font-size:1rem;display:block;transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.001px);-ms-transform:translateY(-1.28125em) scale(.75);width:133.33333%}.psdk-data-readonly{padding-top:.625rem;width:100%}::ng-deep .mat-mdc-form-field-infix{width:auto}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CommonModule) }, { kind: "directive", type: i0.forwardRef(() => i3.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: i0.forwardRef(() => ReactiveFormsModule) }, { kind: "directive", type: i0.forwardRef(() => i4.DefaultValueAccessor), selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i0.forwardRef(() => i4.NgControlStatus), selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i0.forwardRef(() => i4.NgControlStatusGroup), selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i0.forwardRef(() => i4.RequiredValidator), selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i0.forwardRef(() => i4.FormControlDirective), selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i0.forwardRef(() => i4.FormGroupDirective), selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i0.forwardRef(() => i4.FormControlName), selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: i0.forwardRef(() => FormsModule) }, { kind: "ngmodule", type: i0.forwardRef(() => MatFormFieldModule) }, { kind: "component", type: i0.forwardRef(() => i5.MatFormField), selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i0.forwardRef(() => i5.MatLabel), selector: "mat-label" }, { kind: "directive", type: i0.forwardRef(() => i5.MatError), selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatInputModule) }, { kind: "directive", type: i0.forwardRef(() => i6.MatInput), selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i0.forwardRef(() => NgxCurrencyDirective), selector: "input[currencyMask]", inputs: ["currencyMask", "options"] }, { kind: "component", type: i0.forwardRef(() => ComponentMapperComponent), selector: "component-mapper", inputs: ["name", "props", "errorMsg", "outputEvents", "parent"] }] }); }
186
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DecimalComponent, deps: [{ token: i1.AngularPConnectService }, { token: i0.ChangeDetectorRef }, { token: i2.Utils }], target: i0.ɵɵFactoryTarget.Component }); }
187
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DecimalComponent, isStandalone: true, selector: "app-decimal", inputs: { pConn$: "pConn$", formGroup$: "formGroup$" }, ngImport: i0, template: "<div *ngIf=\"displayMode$; else noDisplayMode\">\n <component-mapper *ngIf=\"bVisible$ !== false\" name=\"FieldValueList\" [props]=\"{ label$, value$: formattedValue, displayMode$ }\"></component-mapper>\n</div>\n<ng-template #noDisplayMode>\n <div *ngIf=\"bHasForm$; else noEdit\">\n <div [formGroup]=\"formGroup$\" *ngIf=\"bVisible$\">\n <mat-form-field class=\"psdk-full-width\" subscriptSizing=\"dynamic\" [hintLabel]=\"helperText\">\n <mat-label>{{ label$ }}</mat-label>\n <input\n type=\"text\"\n matInput\n currencyMask\n [options]=\"{\n prefix: currencySymbol,\n suffix: suffix,\n thousands: thousandSeparator,\n decimal: decimalSeparator,\n align: 'left',\n nullable: true,\n precision: decimalPrecision,\n inputMode: inputMode\n }\"\n [placeholder]=\"placeholder\"\n step=\"0.01\"\n [formControlName]=\"controlName$\"\n [required]=\"bRequired$\"\n [formControl]=\"fieldControl\"\n [attr.data-test-id]=\"testId\"\n (blur)=\"fieldOnBlur($event)\"\n [readonly]=\"bReadonly$\"\n />\n <mat-error *ngIf=\"fieldControl.invalid\">{{ getErrorMessage() }}</mat-error>\n </mat-form-field>\n </div>\n </div>\n</ng-template>\n<ng-template #noEdit>\n <component-mapper *ngIf=\"bVisible$ !== false\" name=\"Text\" [props]=\"{ pConn$, formatAs$: 'text' }\"></component-mapper>\n</ng-template>\n", styles: [".psdk-full-width{width:100%}.psdk-label-readonly{font-size:1rem;display:block;transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.001px);-ms-transform:translateY(-1.28125em) scale(.75);width:133.33333%}.psdk-data-readonly{padding-top:.625rem;width:100%}::ng-deep .mat-mdc-form-field-infix{width:auto}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CommonModule) }, { kind: "directive", type: i0.forwardRef(() => i3.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: i0.forwardRef(() => ReactiveFormsModule) }, { kind: "directive", type: i0.forwardRef(() => i4.DefaultValueAccessor), selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i0.forwardRef(() => i4.NgControlStatus), selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i0.forwardRef(() => i4.NgControlStatusGroup), selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i0.forwardRef(() => i4.RequiredValidator), selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i0.forwardRef(() => i4.FormControlDirective), selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i0.forwardRef(() => i4.FormGroupDirective), selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i0.forwardRef(() => i4.FormControlName), selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: i0.forwardRef(() => FormsModule) }, { kind: "ngmodule", type: i0.forwardRef(() => MatFormFieldModule) }, { kind: "component", type: i0.forwardRef(() => i5.MatFormField), selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i0.forwardRef(() => i5.MatLabel), selector: "mat-label" }, { kind: "directive", type: i0.forwardRef(() => i5.MatError), selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatInputModule) }, { kind: "directive", type: i0.forwardRef(() => i6.MatInput), selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i0.forwardRef(() => NgxCurrencyDirective), selector: "input[currencyMask]", inputs: ["currencyMask", "options"] }, { kind: "component", type: i0.forwardRef(() => ComponentMapperComponent), selector: "component-mapper", inputs: ["name", "props", "errorMsg", "outputEvents", "parent"] }] }); }
170
188
  }
171
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: DecimalComponent, decorators: [{
189
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DecimalComponent, decorators: [{
172
190
  type: Component,
173
191
  args: [{ selector: 'app-decimal', standalone: true, imports: [
174
192
  CommonModule,
@@ -178,10 +196,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImpo
178
196
  MatInputModule,
179
197
  NgxCurrencyDirective,
180
198
  forwardRef(() => ComponentMapperComponent)
181
- ], template: "<div *ngIf=\"displayMode$; else noDisplayMode\">\n <component-mapper *ngIf=\"bVisible$ !== false\" name=\"FieldValueList\" [props]=\"{ label$, value$: formattedValue, displayMode$ }\"></component-mapper>\n</div>\n<ng-template #noDisplayMode>\n <div *ngIf=\"bHasForm$; else noEdit\">\n <div [formGroup]=\"formGroup$\" *ngIf=\"bVisible$\">\n <mat-form-field class=\"psdk-full-width\" subscriptSizing=\"dynamic\" [hintLabel]=\"helperText\">\n <mat-label>{{ label$ }}</mat-label>\n <input\n type=\"text\"\n matInput\n currencyMask\n [options]=\"{\n prefix: currencySymbol,\n thousands: thousandSeparator,\n decimal: decimalSeparator,\n align: 'left',\n nullable: true,\n precision: decimalPrecision,\n inputMode: inputMode\n }\"\n [placeholder]=\"placeholder\"\n step=\"0.01\"\n [formControlName]=\"controlName$\"\n [required]=\"bRequired$\"\n [formControl]=\"fieldControl\"\n [attr.data-test-id]=\"testId\"\n (blur)=\"fieldOnBlur($event)\"\n [readonly]=\"bReadonly$\"\n />\n <mat-error *ngIf=\"fieldControl.invalid\">{{ getErrorMessage() }}</mat-error>\n </mat-form-field>\n </div>\n </div>\n</ng-template>\n<ng-template #noEdit>\n <component-mapper *ngIf=\"bVisible$ !== false\" name=\"Text\" [props]=\"{ pConn$, formatAs$: 'text' }\"></component-mapper>\n</ng-template>\n", styles: [".psdk-full-width{width:100%}.psdk-label-readonly{font-size:1rem;display:block;transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.001px);-ms-transform:translateY(-1.28125em) scale(.75);width:133.33333%}.psdk-data-readonly{padding-top:.625rem;width:100%}::ng-deep .mat-mdc-form-field-infix{width:auto}\n"] }]
199
+ ], template: "<div *ngIf=\"displayMode$; else noDisplayMode\">\n <component-mapper *ngIf=\"bVisible$ !== false\" name=\"FieldValueList\" [props]=\"{ label$, value$: formattedValue, displayMode$ }\"></component-mapper>\n</div>\n<ng-template #noDisplayMode>\n <div *ngIf=\"bHasForm$; else noEdit\">\n <div [formGroup]=\"formGroup$\" *ngIf=\"bVisible$\">\n <mat-form-field class=\"psdk-full-width\" subscriptSizing=\"dynamic\" [hintLabel]=\"helperText\">\n <mat-label>{{ label$ }}</mat-label>\n <input\n type=\"text\"\n matInput\n currencyMask\n [options]=\"{\n prefix: currencySymbol,\n suffix: suffix,\n thousands: thousandSeparator,\n decimal: decimalSeparator,\n align: 'left',\n nullable: true,\n precision: decimalPrecision,\n inputMode: inputMode\n }\"\n [placeholder]=\"placeholder\"\n step=\"0.01\"\n [formControlName]=\"controlName$\"\n [required]=\"bRequired$\"\n [formControl]=\"fieldControl\"\n [attr.data-test-id]=\"testId\"\n (blur)=\"fieldOnBlur($event)\"\n [readonly]=\"bReadonly$\"\n />\n <mat-error *ngIf=\"fieldControl.invalid\">{{ getErrorMessage() }}</mat-error>\n </mat-form-field>\n </div>\n </div>\n</ng-template>\n<ng-template #noEdit>\n <component-mapper *ngIf=\"bVisible$ !== false\" name=\"Text\" [props]=\"{ pConn$, formatAs$: 'text' }\"></component-mapper>\n</ng-template>\n", styles: [".psdk-full-width{width:100%}.psdk-label-readonly{font-size:1rem;display:block;transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.001px);-ms-transform:translateY(-1.28125em) scale(.75);width:133.33333%}.psdk-data-readonly{padding-top:.625rem;width:100%}::ng-deep .mat-mdc-form-field-infix{width:auto}\n"] }]
182
200
  }], ctorParameters: () => [{ type: i1.AngularPConnectService }, { type: i0.ChangeDetectorRef }, { type: i2.Utils }], propDecorators: { pConn$: [{
183
201
  type: Input
184
202
  }], formGroup$: [{
185
203
  type: Input
186
204
  }] } });
187
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjaW1hbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyLXNkay1jb21wb25lbnRzL3NyYy9saWIvX2NvbXBvbmVudHMvZmllbGQvZGVjaW1hbC9kZWNpbWFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXItc2RrLWNvbXBvbmVudHMvc3JjL2xpYi9fY29tcG9uZW50cy9maWVsZC9kZWNpbWFsL2RlY2ltYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQXFCLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBYSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRzFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUU3RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7O0FBeUJ0RCxNQUFNLE9BQU8sZ0JBQWdCO0lBK0IzQixZQUNVLGVBQXVDLEVBQ3ZDLEtBQXdCLEVBQ3hCLEtBQVk7UUFGWixvQkFBZSxH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QWtCLDJkQUNsQixjQUFjLHFaQUNkLG9CQUFvQiwwSEFDSCx3QkFBd0I7OzRGQUdoQyxnQkFBZ0I7a0JBZjVCLFNBQVM7K0JBQ0UsYUFBYSxjQUdYLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsV0FBVzt3QkFDWCxrQkFBa0I7d0JBQ2xCLGNBQWM7d0JBQ2Qsb0JBQW9CO3dCQUNwQixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsd0JBQXdCLENBQUM7cUJBQzNDOytJQUdRLE1BQU07c0JBQWQsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBDaGFuZ2VEZXRlY3RvclJlZiwgZm9yd2FyZFJlZiwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTmd4Q3VycmVuY3lEaXJlY3RpdmUsIE5neEN1cnJlbmN5SW5wdXRNb2RlIH0gZnJvbSAnbmd4LWN1cnJlbmN5JztcbmltcG9ydCB7IEFuZ3VsYXJQQ29ubmVjdERhdGEsIEFuZ3VsYXJQQ29ubmVjdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9fYnJpZGdlL2FuZ3VsYXItcGNvbm5lY3QnO1xuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi8uLi8uLi9faGVscGVycy91dGlscyc7XG5pbXBvcnQgeyBDb21wb25lbnRNYXBwZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9fYnJpZGdlL2NvbXBvbmVudC1tYXBwZXIvY29tcG9uZW50LW1hcHBlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgaGFuZGxlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9faGVscGVycy9ldmVudC11dGlsJztcbmltcG9ydCB7IGdldEN1cnJlbmN5Q2hhcmFjdGVycywgZ2V0Q3VycmVuY3lPcHRpb25zIH0gZnJvbSAnLi4vLi4vLi4vX2hlbHBlcnMvY3VycmVuY3ktdXRpbHMnO1xuaW1wb3J0IHsgUENvbm5GaWVsZFByb3BzIH0gZnJvbSAnLi4vLi4vLi4vX3R5cGVzL1BDb25uUHJvcHMuaW50ZXJmYWNlJztcbmltcG9ydCB7IGZvcm1hdCB9IGZyb20gJy4uLy4uLy4uL19oZWxwZXJzL2Zvcm1hdHRlcnMnO1xuXG5pbnRlcmZhY2UgRGVjaW1hbFByb3BzIGV4dGVuZHMgUENvbm5GaWVsZFByb3BzIHtcbiAgLy8gSWYgYW55LCBlbnRlciBhZGRpdGlvbmFsIHByb3BzIHRoYXQgb25seSBleGlzdCBvbiBEZWNpbWFsIGhlcmVcbiAgY3VycmVuY3lJU09Db2RlPzogc3RyaW5nO1xuICBkZWNpbWFsUHJlY2lzaW9uPzogbnVtYmVyO1xuICBzaG93R3JvdXBTZXBhcmF0b3JzPzogc3RyaW5nO1xuICBmb3JtYXR0ZXI/OiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1kZWNpbWFsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RlY2ltYWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kZWNpbWFsLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgTmd4Q3VycmVuY3lEaXJlY3RpdmUsXG4gICAgZm9yd2FyZFJlZigoKSA9PiBDb21wb25lbnRNYXBwZXJDb21wb25lbnQpXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRGVjaW1hbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCkgcENvbm4kOiB0eXBlb2YgUENvbm5lY3Q7XG4gIEBJbnB1dCgpIGZvcm1Hcm91cCQ6IEZvcm1Hcm91cDtcblxuICAvLyBVc2VkIHdpdGggQW5ndWxhclBDb25uZWN0XG4gIGFuZ3VsYXJQQ29ubmVjdERhdGE6IEFuZ3VsYXJQQ29ubmVjdERhdGEgPSB7fTtcbiAgY29uZmlnUHJvcHMkOiBEZWNpbWFsUHJvcHM7XG5cbiAgbGFiZWwkID0gJyc7XG4gIHZhbHVlJDogYW55O1xuICBiUmVxdWlyZWQkID0gZmFsc2U7XG4gIGJSZWFkb25seSQgPSBmYWxzZTtcbiAgYkRpc2FibGVkJCA9IGZhbHNlO1xuICBiVmlzaWJsZSQgPSB0cnVlO1xuICBkaXNwbGF5TW9kZSQ/OiBzdHJpbmcgPSAnJztcbiAgY29udHJvbE5hbWUkOiBzdHJpbmc7XG4gIGJIYXNGb3JtJCA9IHRydWU7XG4gIGNvbXBvbmVudFJlZmVyZW5jZSA9ICcnO1xuICB0ZXN0SWQ6IHN0cmluZztcbiAgaGVscGVyVGV4dDogc3RyaW5nO1xuICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gIGZpZWxkQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbDxudW1iZXIgfCBudWxsPihudWxsLCBudWxsKTtcbiAgZGVjaW1hbFNlcGFyYXRvcjogc3RyaW5nO1xuICB0aG91c2FuZFNlcGFyYXRvcjogc3RyaW5nO1xuICBjdXJyZW5jeVN5bWJvbCA9ICcnO1xuICBkZWNpbWFsUHJlY2lzaW9uOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIGZvcm1hdHRlcjtcbiAgZm9ybWF0dGVkVmFsdWU6IGFueTtcbiAgaW5wdXRNb2RlOiBhbnk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhbmd1bGFyUENvbm5lY3Q6IEFuZ3VsYXJQQ29ubmVjdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSB1dGlsczogVXRpbHNcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIEZpcnN0IHRoaW5nIGluIGluaXRpYWxpemF0aW9uIGlzIHJlZ2lzdGVyaW5nIGFuZCBzdWJzY3JpYmluZyB0byB0aGUgQW5ndWxhclBDb25uZWN0IHNlcnZpY2VcbiAgICB0aGlzLmFuZ3VsYXJQQ29ubmVjdERhdGEgPSB0aGlzLmFuZ3VsYXJQQ29ubmVjdC5yZWdpc3RlckFuZFN1YnNjcmliZUNvbXBvbmVudCh0aGlzLCB0aGlzLm9uU3RhdGVDaGFuZ2UpO1xuICAgIHRoaXMuY29udHJvbE5hbWUkID0gdGhpcy5hbmd1bGFyUENvbm5lY3QuZ2V0Q29tcG9uZW50SUQodGhpcyk7XG5cbiAgICAvLyBUaGVuLCBjb250aW51ZSBvbiB3aXRoIG90aGVyIGluaXRpYWxpemF0aW9uXG5cbiAgICAvLyBjYWxsIHVwZGF0ZVNlbGYgd2hlbiBpbml0aWFsaXppbmdcbiAgICAvLyB0aGlzLnVwZGF0ZVNlbGYoKTtcbiAgICB0aGlzLmNoZWNrQW5kVXBkYXRlKCk7XG5cbiAgICBpZiAodGhpcy5mb3JtR3JvdXAkKSB7XG4gICAgICAvLyBhZGQgY29udHJvbCB0byBmb3JtR3JvdXBcbiAgICAgIHRoaXMuZm9ybUdyb3VwJC5hZGRDb250cm9sKHRoaXMuY29udHJvbE5hbWUkLCB0aGlzLmZpZWxkQ29udHJvbCk7XG4gICAgICB0aGlzLmZpZWxkQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnZhbHVlJCk7XG4gICAgICB0aGlzLmJIYXNGb3JtJCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYlJlYWRvbmx5JCA9IHRydWU7XG4gICAgICB0aGlzLmJIYXNGb3JtJCA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZvcm1Hcm91cCQpIHtcbiAgICAgIHRoaXMuZm9ybUdyb3VwJC5yZW1vdmVDb250cm9sKHRoaXMuY29udHJvbE5hbWUkKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hbmd1bGFyUENvbm5lY3REYXRhLnVuc3Vic2NyaWJlRm4pIHtcbiAgICAgIHRoaXMuYW5ndWxhclBDb25uZWN0RGF0YS51bnN1YnNjcmliZUZuKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2FsbGJhY2sgcGFzc2VkIHdoZW4gc3Vic2NyaWJpbmcgdG8gc3RvcmUgY2hhbmdlXG4gIG9uU3RhdGVDaGFuZ2UoKSB7XG4gICAgdGhpcy5jaGVja0FuZFVwZGF0ZSgpO1xuICB9XG5cbiAgY2hlY2tBbmRVcGRhdGUoKSB7XG4gICAgLy8gU2hvdWxkIGFsd2F5cyBjaGVjayB0aGUgYnJpZGdlIHRvIHNlZSBpZiB0aGUgY29tcG9uZW50IHNob3VsZFxuICAgIC8vIHVwZGF0ZSBpdHNlbGYgKHJlLXJlbmRlcilcbiAgICBjb25zdCBiVXBkYXRlU2VsZiA9IHRoaXMuYW5ndWxhclBDb25uZWN0LnNob3VsZENvbXBvbmVudFVwZGF0ZSh0aGlzKTtcblxuICAgIC8vIE9OTFkgY2FsbCB1cGRhdGVTZWxmIHdoZW4gdGhlIGNvbXBvbmVudCBzaG91bGQgdXBkYXRlXG4gICAgaWYgKGJVcGRhdGVTZWxmKSB7XG4gICAgICB0aGlzLnVwZGF0ZVNlbGYoKTtcbiAgICB9XG4gIH1cblxuICAvLyB1cGRhdGVTZWxmXG4gIHVwZGF0ZVNlbGYoKTogdm9pZCB7XG4gICAgLy8gc3RhcnRpbmcgdmVyeSBzaW1wbGUuLi5cblxuICAgIC8vIG1vdmVkIHRoaXMgZnJvbSBuZ09uSW5pdCgpIGFuZCBjYWxsIHRoaXMgZnJvbSB0aGVyZSBpbnN0ZWFkLi4uXG4gICAgdGhpcy5jb25maWdQcm9wcyQgPSB0aGlzLnBDb25uJC5yZXNvbHZlQ29uZmlnUHJvcHModGhpcy5wQ29ubiQuZ2V0Q29uZmlnUHJvcHMoKSkgYXMgRGVjaW1hbFByb3BzO1xuICAgIHRoaXMudGVzdElkID0gdGhpcy5jb25maWdQcm9wcyQudGVzdElkO1xuICAgIHRoaXMubGFiZWwkID0gdGhpcy5jb25maWdQcm9wcyQubGFiZWw7XG4gICAgdGhpcy5kaXNwbGF5TW9kZSQgPSB0aGlzLmNvbmZpZ1Byb3BzJC5kaXNwbGF5TW9kZTtcbiAgICB0aGlzLmlucHV0TW9kZSA9IE5neEN1cnJlbmN5SW5wdXRNb2RlLk5hdHVyYWw7XG4gICAgbGV0IG5WYWx1ZTogYW55ID0gdGhpcy5jb25maWdQcm9wcyQudmFsdWU7XG4gICAgaWYgKG5WYWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiBuVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIG5WYWx1ZSA9IHBhcnNlRmxvYXQoblZhbHVlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudmFsdWUkID0gblZhbHVlO1xuICAgIH1cbiAgICB0aGlzLmhlbHBlclRleHQgPSB0aGlzLmNvbmZpZ1Byb3BzJC5oZWxwZXJUZXh0O1xuICAgIHRoaXMucGxhY2Vob2xkZXIgPSB0aGlzLmNvbmZpZ1Byb3BzJC5wbGFjZWhvbGRlciB8fCAnJztcbiAgICBjb25zdCBzaG93R3JvdXBTZXBhcmF0b3JzID0gdGhpcy5jb25maWdQcm9wcyQuc2hvd0dyb3VwU2VwYXJhdG9ycztcbiAgICBjb25zdCBjdXJyZW5jeUlTT0NvZGUgPSB0aGlzLmNvbmZpZ1Byb3BzJD8uY3VycmVuY3lJU09Db2RlID8/ICcnO1xuXG4gICAgY29uc3QgdGhlU3ltYm9scyA9IGdldEN1cnJlbmN5Q2hhcmFjdGVycyhjdXJyZW5jeUlTT0NvZGUpO1xuICAgIHRoaXMuZGVjaW1hbFNlcGFyYXRvciA9IHRoZVN5bWJvbHMudGhlRGVjaW1hbEluZGljYXRvcjtcbiAgICB0aGlzLnRob3VzYW5kU2VwYXJhdG9yID0gc2hvd0dyb3VwU2VwYXJhdG9ycyA/IHRoZVN5bWJvbHMudGhlRGlnaXRHcm91cFNlcGFyYXRvciA6ICcnO1xuXG4gICAgY29uc3QgdGhlQ3VycmVuY3lPcHRpb25zID0gZ2V0Q3VycmVuY3lPcHRpb25zKGN1cnJlbmN5SVNPQ29kZSk7XG4gICAgdGhpcy5mb3JtYXR0ZXIgPSB0aGlzLmNvbmZpZ1Byb3BzJC5mb3JtYXR0ZXI7XG5cbiAgICBpZiAodGhpcy5mb3JtYXR0ZXIpIHtcbiAgICAgIHRoaXMuZm9ybWF0dGVkVmFsdWUgPSBmb3JtYXQodGhpcy52YWx1ZSQsIHRoaXMuZm9ybWF0dGVyLnRvTG93ZXJDYXNlKCksIHRoZUN1cnJlbmN5T3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9ybWF0dGVkVmFsdWUgPSBmb3JtYXQodGhpcy52YWx1ZSQsICdkZWNpbWFsJywgdGhlQ3VycmVuY3lPcHRpb25zKTtcbiAgICB9XG5cbiAgICAvLyB0aW1lb3V0IGFuZCBkZXRlY3RDaGFuZ2VzIHRvIGF2b2lkIEV4cHJlc3Npb25DaGFuZ2VkQWZ0ZXJJdEhhc0JlZW5DaGVja2VkRXJyb3JcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZ1Byb3BzJC5yZXF1aXJlZCAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuYlJlcXVpcmVkJCA9IHRoaXMudXRpbHMuZ2V0Qm9vbGVhblZhbHVlKHRoaXMuY29uZmlnUHJvcHMkLnJlcXVpcmVkKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuY29uZmlnUHJvcHMkLnZpc2liaWxpdHkgIT0gbnVsbCkge1xuICAgICAgdGhpcy5iVmlzaWJsZSQgPSB0aGlzLnV0aWxzLmdldEJvb2xlYW5WYWx1ZSh0aGlzLmNvbmZpZ1Byb3BzJC52aXNpYmlsaXR5KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWdQcm9wcyQucmVhZE9ubHkgIT0gbnVsbCkge1xuICAgICAgdGhpcy5iUmVhZG9ubHkkID0gdGhpcy51dGlscy5nZXRCb29sZWFuVmFsdWUodGhpcy5jb25maWdQcm9wcyQucmVhZE9ubHkpO1xuICAgIH1cblxuICAgIC8vIGRpc2FibGVkXG4gICAgaWYgKHRoaXMuY29uZmlnUHJvcHMkLmRpc2FibGVkICE9IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5iRGlzYWJsZWQkID0gdGhpcy51dGlscy5nZXRCb29sZWFuVmFsdWUodGhpcy5jb25maWdQcm9wcyQuZGlzYWJsZWQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmJEaXNhYmxlZCQpIHtcbiAgICAgIHRoaXMuZmllbGRDb250cm9sLmRpc2FibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWVsZENvbnRyb2wuZW5hYmxlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYlJlYWRvbmx5JCAmJiB0aGlzLmZvcm1hdHRlciA9PT0gJ0N1cnJlbmN5Jykge1xuICAgICAgdGhpcy5jdXJyZW5jeVN5bWJvbCA9IHRoZVN5bWJvbHMudGhlQ3VycmVuY3lTeW1ib2w7XG4gICAgfVxuICAgIHRoaXMuZGVjaW1hbFByZWNpc2lvbiA9IHRoaXMuY29uZmlnUHJvcHMkPy5kZWNpbWFsUHJlY2lzaW9uID8/IDI7XG5cbiAgICB0aGlzLmNvbXBvbmVudFJlZmVyZW5jZSA9IHRoaXMucENvbm4kLmdldFN0YXRlUHJvcHMoKS52YWx1ZTtcbiAgfVxuXG4gIGZpZWxkT25CbHVyKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBhY3Rpb25zQXBpID0gdGhpcy5wQ29ubiQ/LmdldEFjdGlvbnNBcGkoKTtcbiAgICBjb25zdCBwcm9wTmFtZSA9IHRoaXMucENvbm4kPy5nZXRTdGF0ZVByb3BzKCkudmFsdWU7XG4gICAgbGV0IHZhbHVlID0gZXZlbnQ/LnRhcmdldD8udmFsdWU7XG4gICAgLy8gcmVwbGFjaW5nIHRob3VzYW5kIHNlcGFyYXRvciB3aXRoIGVtcHR5IHN0cmluZyBhcyBub3QgcmVxdWlyZWQgaW4gYXBpIGNhbGxcbiAgICBpZiAodGhpcy5jb25maWdQcm9wcyQuc2hvd0dyb3VwU2VwYXJhdG9ycykge1xuICAgICAgY29uc3QgdGhvdXNhbmRTZXAgPSB0aGlzLnRob3VzYW5kU2VwYXJhdG9yID09PSAnLicgPyAnXFxcXC4nIDogdGhpcy50aG91c2FuZFNlcGFyYXRvcjtcbiAgICAgIGNvbnN0IHJlZ0V4cCA9IG5ldyBSZWdFeHAoU3RyaW5nLnJhd2Ake3Rob3VzYW5kU2VwfWAsICdnJyk7XG4gICAgICB2YWx1ZSA9IHZhbHVlPy5yZXBsYWNlKHJlZ0V4cCwgJycpO1xuICAgIH1cbiAgICAvLyByZXBsYWNpbmcgZGVjaW1hbCBzZXBhcmF0b3Igd2l0aCAnLidcbiAgICBpZiAodGhpcy5kZWNpbWFsU2VwYXJhdG9yICE9PSAnLicpIHtcbiAgICAgIGNvbnN0IHJlZ0V4cCA9IG5ldyBSZWdFeHAoU3RyaW5nLnJhd2Ake3RoaXMuZGVjaW1hbFNlcGFyYXRvcn1gLCAnZycpO1xuICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKHJlZ0V4cCwgJy4nKTtcbiAgICB9XG4gICAgaGFuZGxlRXZlbnQoYWN0aW9uc0FwaSwgJ2NoYW5nZU5ibHVyJywgcHJvcE5hbWUsIHZhbHVlKTtcbiAgfVxuXG4gIGdldEVycm9yTWVzc2FnZSgpIHtcbiAgICBsZXQgZXJyTWVzc2FnZSA9ICcnO1xuXG4gICAgLy8gbG9vayBmb3IgdmFsaWRhdGlvbiBtZXNzYWdlcyBmb3IganNvbiwgcHJlLWRlZmluZWQgb3IganVzdCBhbiBlcnJvciBwdXNoZWQgZnJvbSB3b3JraXRlbSAoNDAwKVxuICAgIGlmICh0aGlzLmZpZWxkQ29udHJvbC5oYXNFcnJvcignbWVzc2FnZScpKSB7XG4gICAgICBlcnJNZXNzYWdlID0gdGhpcy5hbmd1bGFyUENvbm5lY3REYXRhLnZhbGlkYXRlTWVzc2FnZSA/PyAnJztcbiAgICAgIHJldHVybiBlcnJNZXNzYWdlO1xuICAgIH1cbiAgICBpZiAodGhpcy5maWVsZENvbnRyb2wuaGFzRXJyb3IoJ3JlcXVpcmVkJykpIHtcbiAgICAgIGVyck1lc3NhZ2UgPSAnWW91IG11c3QgZW50ZXIgYSB2YWx1ZSc7XG4gICAgfSBlbHNlIGlmICh0aGlzLmZpZWxkQ29udHJvbC5lcnJvcnMpIHtcbiAgICAgIGVyck1lc3NhZ2UgPSB0aGlzLmZpZWxkQ29udHJvbC5lcnJvcnMudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXJyTWVzc2FnZTtcbiAgfVxufVxuIiwiPGRpdiAqbmdJZj1cImRpc3BsYXlNb2RlJDsgZWxzZSBub0Rpc3BsYXlNb2RlXCI+XG4gIDxjb21wb25lbnQtbWFwcGVyICpuZ0lmPVwiYlZpc2libGUkICE9PSBmYWxzZVwiIG5hbWU9XCJGaWVsZFZhbHVlTGlzdFwiIFtwcm9wc109XCJ7IGxhYmVsJCwgdmFsdWUkOiBmb3JtYXR0ZWRWYWx1ZSwgZGlzcGxheU1vZGUkIH1cIj48L2NvbXBvbmVudC1tYXBwZXI+XG48L2Rpdj5cbjxuZy10ZW1wbGF0ZSAjbm9EaXNwbGF5TW9kZT5cbiAgPGRpdiAqbmdJZj1cImJIYXNGb3JtJDsgZWxzZSBub0VkaXRcIj5cbiAgICA8ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwJFwiICpuZ0lmPVwiYlZpc2libGUkXCI+XG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJwc2RrLWZ1bGwtd2lkdGhcIiBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCIgW2hpbnRMYWJlbF09XCJoZWxwZXJUZXh0XCI+XG4gICAgICAgIDxtYXQtbGFiZWw+e3sgbGFiZWwkIH19PC9tYXQtbGFiZWw+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgIGN1cnJlbmN5TWFza1xuICAgICAgICAgIFtvcHRpb25zXT1cIntcbiAgICAgICAgICAgIHByZWZpeDogY3VycmVuY3lTeW1ib2wsXG4gICAgICAgICAgICB0aG91c2FuZHM6IHRob3VzYW5kU2VwYXJhdG9yLFxuICAgICAgICAgICAgZGVjaW1hbDogZGVjaW1hbFNlcGFyYXRvcixcbiAgICAgICAgICAgIGFsaWduOiAnbGVmdCcsXG4gICAgICAgICAgICBudWxsYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIHByZWNpc2lvbjogZGVjaW1hbFByZWNpc2lvbixcbiAgICAgICAgICAgIGlucHV0TW9kZTogaW5wdXRNb2RlXG4gICAgICAgICAgfVwiXG4gICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgICBzdGVwPVwiMC4wMVwiXG4gICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJjb250cm9sTmFtZSRcIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJiUmVxdWlyZWQkXCJcbiAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZmllbGRDb250cm9sXCJcbiAgICAgICAgICBbYXR0ci5kYXRhLXRlc3QtaWRdPVwidGVzdElkXCJcbiAgICAgICAgICAoYmx1cik9XCJmaWVsZE9uQmx1cigkZXZlbnQpXCJcbiAgICAgICAgICBbcmVhZG9ubHldPVwiYlJlYWRvbmx5JFwiXG4gICAgICAgIC8+XG4gICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJmaWVsZENvbnRyb2wuaW52YWxpZFwiPnt7IGdldEVycm9yTWVzc2FnZSgpIH19PC9tYXQtZXJyb3I+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI25vRWRpdD5cbiAgPGNvbXBvbmVudC1tYXBwZXIgKm5nSWY9XCJiVmlzaWJsZSQgIT09IGZhbHNlXCIgbmFtZT1cIlRleHRcIiBbcHJvcHNdPVwieyBwQ29ubiQsIGZvcm1hdEFzJDogJ3RleHQnIH1cIj48L2NvbXBvbmVudC1tYXBwZXI+XG48L25nLXRlbXBsYXRlPlxuIl19
205
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVjaW1hbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyLXNkay1jb21wb25lbnRzL3NyYy9saWIvX2NvbXBvbmVudHMvZmllbGQvZGVjaW1hbC9kZWNpbWFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXItc2RrLWNvbXBvbmVudHMvc3JjL2xpYi9fY29tcG9uZW50cy9maWVsZC9kZWNpbWFsL2RlY2ltYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQXFCLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBYSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHaEMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDeEcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRTdGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7Ozs7QUF5QnRELE1BQU0sT0FBTyxnQkFBZ0I7SUFnQzNCLFlBQ1UsZUFBdUMsRUFDdkMsS0FBd0IsRUFDeEIsS0FBWTtRQUZaLG9CQUFlLEdBQWYsZUFBZSxDQUF3QjtRQUN2QyxVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUN4QixVQUFLLEdBQUwsS0FBSyxDQUFPO1FBL0J0Qiw0QkFBNEI7UUFDNUIsd0JBQW1CLEdBQXdCLEVBQUUsQ0FBQztRQUc5QyxXQUFNLEdBQUcsRUFBRSxDQUFDO1FBRVosZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsY0FBUyxHQUFHLElBQUksQ0FBQztRQUNqQixpQkFBWSxHQUFZLEVBQUUsQ0FBQztRQUUzQixjQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLHVCQUFrQixHQUFHLEVBQUUsQ0FBQztRQUt4QixpQkFBWSxHQUFHLElBQUksV0FBVyxDQUFnQixJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFHMUQsbUJBQWMsR0FBRyxFQUFFLENBQUM7UUFLcEIsV0FBTSxHQUFHLEVBQUUsQ0FBQztJQU1ULENBQUM7SUFFSixRQUFRO1FBQ04sOEZBQThGO1FBQzlGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLDZCQUE2QixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDeEcsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU5RCw4Q0FBOEM7UUFFOUMsb0NBQW9DO1FBQ3BDLHFCQUFxQjtRQUNyQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFdEIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsMkJBQTJCO1lBQzNCLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2pFLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN4QixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNuRCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDM0MsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzNDLENBQUM7SUFDSCxDQUFDO0lBRUQsbURBQW1EO0lBQ25ELGFBQWE7UUFDWCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELGNBQWM7UUFDWixnRUFBZ0U7UUFDaEUsNEJBQTRCO1FBQzVCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFckUsd0RBQXdEO1FBQ3hELElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3BCLENBQUM7SUFDSCxDQUFDO0lBRUQsYUFBYTtJQUNiLFVBQVU7UUFDUiwwQkFBMEI7UUFFMUIsaUVBQWlFO1FBQ2pFLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFpQixDQUFDO1FBQ2pHLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7UUFDdkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztRQUN0QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDO1FBQ2xELElBQUksQ0FBQyxTQUFTLEdBQUcsb0JBQW9CLENBQUMsT0FBTyxDQUFDO1FBQzlDLElBQUksTUFBTSxHQUFRLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO1FBQzFDLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUMvQixNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzlCLENBQUM7WUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztZQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUNELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUM7UUFDL0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUM7UUFDdkQsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLG1CQUFtQixDQUFDO1FBQ2xFLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsZUFBZSxJQUFJLEVBQUUsQ0FBQztRQUVqRSxNQUFNLFVBQVUsR0FBRyxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLG1CQUFtQixDQUFDO1FBQ3ZELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFdEYsTUFBTSxrQkFBa0IsR0FBRyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDO1FBRTdDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBQzlGLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztRQUMzRSxDQUFDO1FBRUQsaUZBQWlGO1FBQ2pGLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUN2QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDM0UsQ0FBQztZQUNELElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM1RSxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0UsQ0FBQztRQUVELFdBQVc7UUFDWCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzRSxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM5QixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDN0IsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ3JELElBQUksQ0FBQyxjQUFjLEdBQUcsVUFBVSxDQUFDLGlCQUFpQixDQUFDO1FBQ3JELENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxZQUFZLEVBQUUsQ0FBQztZQUN2RCxJQUFJLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztRQUNwQixDQUFDO1FBRUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLElBQUksQ0FBQyxDQUFDO1FBRWpFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDLEtBQUssQ0FBQztRQUU1RCxzREFBc0Q7UUFDdEQsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3ZHLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUN6QyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUMvQyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUVsQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdEIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFVO1FBQ3BCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO1FBQ2pDLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUUzRSxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ25CLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsYUFBYSxFQUFFLENBQUM7WUFDaEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDcEQsSUFBSSxLQUFLLEdBQUcsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUM7WUFDakMsNkVBQTZFO1lBQzdFLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2dCQUMxQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztnQkFDcEYsTUFBTSxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQSxHQUFHLFdBQVcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUMzRCxLQUFLLEdBQUcsS0FBSyxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDckMsQ0FBQztZQUNELHVDQUF1QztZQUN2QyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDbEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNyRSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDckMsQ0FBQztZQUNELFdBQVcsQ0FBQyxVQUFVLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMxRCxDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFFcEIsaUdBQWlHO1FBQ2pHLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUMxQyxVQUFVLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUM7WUFDNUQsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUMzQyxVQUFVLEdBQUcsd0JBQXdCLENBQUM7UUFDeEMsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNwQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbkQsQ0FBQztRQUVELE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7K0dBbE5VLGdCQUFnQjttR0FBaEIsZ0JBQWdCLCtIQ3RDN0IsdWdEQXVDQSxrWkRWSSxZQUFZLDRLQUNaLG1CQUFtQiwyNUNBQ25CLFdBQVcsbURBQ1gsa0JBQWtCLDJkQUNsQixjQUFjLHFaQUNkLG9CQUFvQiwwSEFDSCx3QkFBd0I7OzRGQUdoQyxnQkFBZ0I7a0JBZjVCLFNBQVM7K0JBQ0UsYUFBYSxjQUdYLElBQUksV0FDUDt3QkFDUCxZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsV0FBVzt3QkFDWCxrQkFBa0I7d0JBQ2xCLGNBQWM7d0JBQ2Qsb0JBQW9CO3dCQUNwQixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsd0JBQXdCLENBQUM7cUJBQzNDOytJQUdRLE1BQU07c0JBQWQsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBDaGFuZ2VEZXRlY3RvclJlZiwgZm9yd2FyZFJlZiwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTmd4Q3VycmVuY3lEaXJlY3RpdmUsIE5neEN1cnJlbmN5SW5wdXRNb2RlIH0gZnJvbSAnbmd4LWN1cnJlbmN5JztcbmltcG9ydCB7IGludGVydmFsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBbmd1bGFyUENvbm5lY3REYXRhLCBBbmd1bGFyUENvbm5lY3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vX2JyaWRnZS9hbmd1bGFyLXBjb25uZWN0JztcbmltcG9ydCB7IFV0aWxzIH0gZnJvbSAnLi4vLi4vLi4vX2hlbHBlcnMvdXRpbHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50TWFwcGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vX2JyaWRnZS9jb21wb25lbnQtbWFwcGVyL2NvbXBvbmVudC1tYXBwZXIuY29tcG9uZW50JztcbmltcG9ydCB7IGhhbmRsZUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vX2hlbHBlcnMvZXZlbnQtdXRpbCc7XG5pbXBvcnQgeyBnZXRDdXJyZW5jeUNoYXJhY3RlcnMsIGdldEN1cnJlbmN5T3B0aW9ucyB9IGZyb20gJy4uLy4uLy4uL19oZWxwZXJzL2N1cnJlbmN5LXV0aWxzJztcbmltcG9ydCB7IFBDb25uRmllbGRQcm9wcyB9IGZyb20gJy4uLy4uLy4uL190eXBlcy9QQ29ublByb3BzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBmb3JtYXQgfSBmcm9tICcuLi8uLi8uLi9faGVscGVycy9mb3JtYXR0ZXJzJztcblxuaW50ZXJmYWNlIERlY2ltYWxQcm9wcyBleHRlbmRzIFBDb25uRmllbGRQcm9wcyB7XG4gIC8vIElmIGFueSwgZW50ZXIgYWRkaXRpb25hbCBwcm9wcyB0aGF0IG9ubHkgZXhpc3Qgb24gRGVjaW1hbCBoZXJlXG4gIGN1cnJlbmN5SVNPQ29kZT86IHN0cmluZztcbiAgZGVjaW1hbFByZWNpc2lvbj86IG51bWJlcjtcbiAgc2hvd0dyb3VwU2VwYXJhdG9ycz86IHN0cmluZztcbiAgZm9ybWF0dGVyPzogc3RyaW5nO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZGVjaW1hbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kZWNpbWFsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGVjaW1hbC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgRm9ybXNNb2R1bGUsXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgIE1hdElucHV0TW9kdWxlLFxuICAgIE5neEN1cnJlbmN5RGlyZWN0aXZlLFxuICAgIGZvcndhcmRSZWYoKCkgPT4gQ29tcG9uZW50TWFwcGVyQ29tcG9uZW50KVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIERlY2ltYWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIHBDb25uJDogdHlwZW9mIFBDb25uZWN0O1xuICBASW5wdXQoKSBmb3JtR3JvdXAkOiBGb3JtR3JvdXA7XG5cbiAgLy8gVXNlZCB3aXRoIEFuZ3VsYXJQQ29ubmVjdFxuICBhbmd1bGFyUENvbm5lY3REYXRhOiBBbmd1bGFyUENvbm5lY3REYXRhID0ge307XG4gIGNvbmZpZ1Byb3BzJDogRGVjaW1hbFByb3BzO1xuXG4gIGxhYmVsJCA9ICcnO1xuICB2YWx1ZSQ6IGFueTtcbiAgYlJlcXVpcmVkJCA9IGZhbHNlO1xuICBiUmVhZG9ubHkkID0gZmFsc2U7XG4gIGJEaXNhYmxlZCQgPSBmYWxzZTtcbiAgYlZpc2libGUkID0gdHJ1ZTtcbiAgZGlzcGxheU1vZGUkPzogc3RyaW5nID0gJyc7XG4gIGNvbnRyb2xOYW1lJDogc3RyaW5nO1xuICBiSGFzRm9ybSQgPSB0cnVlO1xuICBjb21wb25lbnRSZWZlcmVuY2UgPSAnJztcbiAgdGVzdElkOiBzdHJpbmc7XG4gIGhlbHBlclRleHQ6IHN0cmluZztcbiAgcGxhY2Vob2xkZXI6IHN0cmluZztcblxuICBmaWVsZENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2w8bnVtYmVyIHwgbnVsbD4obnVsbCwgbnVsbCk7XG4gIGRlY2ltYWxTZXBhcmF0b3I6IHN0cmluZztcbiAgdGhvdXNhbmRTZXBhcmF0b3I6IHN0cmluZztcbiAgY3VycmVuY3lTeW1ib2wgPSAnJztcbiAgZGVjaW1hbFByZWNpc2lvbjogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBmb3JtYXR0ZXI7XG4gIGZvcm1hdHRlZFZhbHVlOiBhbnk7XG4gIGlucHV0TW9kZTogYW55O1xuICBzdWZmaXggPSAnJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFuZ3VsYXJQQ29ubmVjdDogQW5ndWxhclBDb25uZWN0U2VydmljZSxcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHV0aWxzOiBVdGlsc1xuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gRmlyc3QgdGhpbmcgaW4gaW5pdGlhbGl6YXRpb24gaXMgcmVnaXN0ZXJpbmcgYW5kIHN1YnNjcmliaW5nIHRvIHRoZSBBbmd1bGFyUENvbm5lY3Qgc2VydmljZVxuICAgIHRoaXMuYW5ndWxhclBDb25uZWN0RGF0YSA9IHRoaXMuYW5ndWxhclBDb25uZWN0LnJlZ2lzdGVyQW5kU3Vic2NyaWJlQ29tcG9uZW50KHRoaXMsIHRoaXMub25TdGF0ZUNoYW5nZSk7XG4gICAgdGhpcy5jb250cm9sTmFtZSQgPSB0aGlzLmFuZ3VsYXJQQ29ubmVjdC5nZXRDb21wb25lbnRJRCh0aGlzKTtcblxuICAgIC8vIFRoZW4sIGNvbnRpbnVlIG9uIHdpdGggb3RoZXIgaW5pdGlhbGl6YXRpb25cblxuICAgIC8vIGNhbGwgdXBkYXRlU2VsZiB3aGVuIGluaXRpYWxpemluZ1xuICAgIC8vIHRoaXMudXBkYXRlU2VsZigpO1xuICAgIHRoaXMuY2hlY2tBbmRVcGRhdGUoKTtcblxuICAgIGlmICh0aGlzLmZvcm1Hcm91cCQpIHtcbiAgICAgIC8vIGFkZCBjb250cm9sIHRvIGZvcm1Hcm91cFxuICAgICAgdGhpcy5mb3JtR3JvdXAkLmFkZENvbnRyb2wodGhpcy5jb250cm9sTmFtZSQsIHRoaXMuZmllbGRDb250cm9sKTtcbiAgICAgIHRoaXMuZmllbGRDb250cm9sLnNldFZhbHVlKHRoaXMudmFsdWUkKTtcbiAgICAgIHRoaXMuYkhhc0Zvcm0kID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5iUmVhZG9ubHkkID0gdHJ1ZTtcbiAgICAgIHRoaXMuYkhhc0Zvcm0kID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwJCkge1xuICAgICAgdGhpcy5mb3JtR3JvdXAkLnJlbW92ZUNvbnRyb2wodGhpcy5jb250cm9sTmFtZSQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFuZ3VsYXJQQ29ubmVjdERhdGEudW5zdWJzY3JpYmVGbikge1xuICAgICAgdGhpcy5hbmd1bGFyUENvbm5lY3REYXRhLnVuc3Vic2NyaWJlRm4oKTtcbiAgICB9XG4gIH1cblxuICAvLyBDYWxsYmFjayBwYXNzZWQgd2hlbiBzdWJzY3JpYmluZyB0byBzdG9yZSBjaGFuZ2VcbiAgb25TdGF0ZUNoYW5nZSgpIHtcbiAgICB0aGlzLmNoZWNrQW5kVXBkYXRlKCk7XG4gIH1cblxuICBjaGVja0FuZFVwZGF0ZSgpIHtcbiAgICAvLyBTaG91bGQgYWx3YXlzIGNoZWNrIHRoZSBicmlkZ2UgdG8gc2VlIGlmIHRoZSBjb21wb25lbnQgc2hvdWxkXG4gICAgLy8gdXBkYXRlIGl0c2VsZiAocmUtcmVuZGVyKVxuICAgIGNvbnN0IGJVcGRhdGVTZWxmID0gdGhpcy5hbmd1bGFyUENvbm5lY3Quc2hvdWxkQ29tcG9uZW50VXBkYXRlKHRoaXMpO1xuXG4gICAgLy8gT05MWSBjYWxsIHVwZGF0ZVNlbGYgd2hlbiB0aGUgY29tcG9uZW50IHNob3VsZCB1cGRhdGVcbiAgICBpZiAoYlVwZGF0ZVNlbGYpIHtcbiAgICAgIHRoaXMudXBkYXRlU2VsZigpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHVwZGF0ZVNlbGZcbiAgdXBkYXRlU2VsZigpOiB2b2lkIHtcbiAgICAvLyBzdGFydGluZyB2ZXJ5IHNpbXBsZS4uLlxuXG4gICAgLy8gbW92ZWQgdGhpcyBmcm9tIG5nT25Jbml0KCkgYW5kIGNhbGwgdGhpcyBmcm9tIHRoZXJlIGluc3RlYWQuLi5cbiAgICB0aGlzLmNvbmZpZ1Byb3BzJCA9IHRoaXMucENvbm4kLnJlc29sdmVDb25maWdQcm9wcyh0aGlzLnBDb25uJC5nZXRDb25maWdQcm9wcygpKSBhcyBEZWNpbWFsUHJvcHM7XG4gICAgdGhpcy50ZXN0SWQgPSB0aGlzLmNvbmZpZ1Byb3BzJC50ZXN0SWQ7XG4gICAgdGhpcy5sYWJlbCQgPSB0aGlzLmNvbmZpZ1Byb3BzJC5sYWJlbDtcbiAgICB0aGlzLmRpc3BsYXlNb2RlJCA9IHRoaXMuY29uZmlnUHJvcHMkLmRpc3BsYXlNb2RlO1xuICAgIHRoaXMuaW5wdXRNb2RlID0gTmd4Q3VycmVuY3lJbnB1dE1vZGUuTmF0dXJhbDtcbiAgICBsZXQgblZhbHVlOiBhbnkgPSB0aGlzLmNvbmZpZ1Byb3BzJC52YWx1ZTtcbiAgICBpZiAoblZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mIG5WYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgblZhbHVlID0gcGFyc2VGbG9hdChuVmFsdWUpO1xuICAgICAgfVxuICAgICAgdGhpcy52YWx1ZSQgPSBuVmFsdWU7XG4gICAgICB0aGlzLmZpZWxkQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnZhbHVlJCk7XG4gICAgfVxuICAgIHRoaXMuaGVscGVyVGV4dCA9IHRoaXMuY29uZmlnUHJvcHMkLmhlbHBlclRleHQ7XG4gICAgdGhpcy5wbGFjZWhvbGRlciA9IHRoaXMuY29uZmlnUHJvcHMkLnBsYWNlaG9sZGVyIHx8ICcnO1xuICAgIGNvbnN0IHNob3dHcm91cFNlcGFyYXRvcnMgPSB0aGlzLmNvbmZpZ1Byb3BzJC5zaG93R3JvdXBTZXBhcmF0b3JzO1xuICAgIGNvbnN0IGN1cnJlbmN5SVNPQ29kZSA9IHRoaXMuY29uZmlnUHJvcHMkPy5jdXJyZW5jeUlTT0NvZGUgPz8gJyc7XG5cbiAgICBjb25zdCB0aGVTeW1ib2xzID0gZ2V0Q3VycmVuY3lDaGFyYWN0ZXJzKGN1cnJlbmN5SVNPQ29kZSk7XG4gICAgdGhpcy5kZWNpbWFsU2VwYXJhdG9yID0gdGhlU3ltYm9scy50aGVEZWNpbWFsSW5kaWNhdG9yO1xuICAgIHRoaXMudGhvdXNhbmRTZXBhcmF0b3IgPSBzaG93R3JvdXBTZXBhcmF0b3JzID8gdGhlU3ltYm9scy50aGVEaWdpdEdyb3VwU2VwYXJhdG9yIDogJyc7XG5cbiAgICBjb25zdCB0aGVDdXJyZW5jeU9wdGlvbnMgPSBnZXRDdXJyZW5jeU9wdGlvbnMoY3VycmVuY3lJU09Db2RlKTtcbiAgICB0aGlzLmZvcm1hdHRlciA9IHRoaXMuY29uZmlnUHJvcHMkLmZvcm1hdHRlcjtcblxuICAgIGlmICh0aGlzLmZvcm1hdHRlcikge1xuICAgICAgdGhpcy5mb3JtYXR0ZWRWYWx1ZSA9IGZvcm1hdCh0aGlzLnZhbHVlJCwgdGhpcy5mb3JtYXR0ZXIudG9Mb3dlckNhc2UoKSwgdGhlQ3VycmVuY3lPcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb3JtYXR0ZWRWYWx1ZSA9IGZvcm1hdCh0aGlzLnZhbHVlJCwgJ2RlY2ltYWwnLCB0aGVDdXJyZW5jeU9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8vIHRpbWVvdXQgYW5kIGRldGVjdENoYW5nZXMgdG8gYXZvaWQgRXhwcmVzc2lvbkNoYW5nZWRBZnRlckl0SGFzQmVlbkNoZWNrZWRFcnJvclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY29uZmlnUHJvcHMkLnJlcXVpcmVkICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5iUmVxdWlyZWQkID0gdGhpcy51dGlscy5nZXRCb29sZWFuVmFsdWUodGhpcy5jb25maWdQcm9wcyQucmVxdWlyZWQpO1xuICAgICAgfVxuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5jb25maWdQcm9wcyQudmlzaWJpbGl0eSAhPSBudWxsKSB7XG4gICAgICB0aGlzLmJWaXNpYmxlJCA9IHRoaXMudXRpbHMuZ2V0Qm9vbGVhblZhbHVlKHRoaXMuY29uZmlnUHJvcHMkLnZpc2liaWxpdHkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZ1Byb3BzJC5yZWFkT25seSAhPSBudWxsKSB7XG4gICAgICB0aGlzLmJSZWFkb25seSQgPSB0aGlzLnV0aWxzLmdldEJvb2xlYW5WYWx1ZSh0aGlzLmNvbmZpZ1Byb3BzJC5yZWFkT25seSk7XG4gICAgfVxuXG4gICAgLy8gZGlzYWJsZWRcbiAgICBpZiAodGhpcy5jb25maWdQcm9wcyQuZGlzYWJsZWQgIT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmJEaXNhYmxlZCQgPSB0aGlzLnV0aWxzLmdldEJvb2xlYW5WYWx1ZSh0aGlzLmNvbmZpZ1Byb3BzJC5kaXNhYmxlZCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYkRpc2FibGVkJCkge1xuICAgICAgdGhpcy5maWVsZENvbnRyb2wuZGlzYWJsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZpZWxkQ29udHJvbC5lbmFibGUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5iUmVhZG9ubHkkICYmIHRoaXMuZm9ybWF0dGVyID09PSAnQ3VycmVuY3knKSB7XG4gICAgICB0aGlzLmN1cnJlbmN5U3ltYm9sID0gdGhlU3ltYm9scy50aGVDdXJyZW5jeVN5bWJvbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5iUmVhZG9ubHkkICYmIHRoaXMuZm9ybWF0dGVyID09PSAnUGVyY2VudGFnZScpIHtcbiAgICAgIHRoaXMuc3VmZml4ID0gJyUnO1xuICAgIH1cblxuICAgIHRoaXMuZGVjaW1hbFByZWNpc2lvbiA9IHRoaXMuY29uZmlnUHJvcHMkPy5kZWNpbWFsUHJlY2lzaW9uID8/IDI7XG5cbiAgICB0aGlzLmNvbXBvbmVudFJlZmVyZW5jZSA9IHRoaXMucENvbm4kLmdldFN0YXRlUHJvcHMoKS52YWx1ZTtcblxuICAgIC8vIHRyaWdnZXIgZGlzcGxheSBvZiBlcnJvciBtZXNzYWdlIHdpdGggZmllbGQgY29udHJvbFxuICAgIGlmICh0aGlzLmFuZ3VsYXJQQ29ubmVjdERhdGEudmFsaWRhdGVNZXNzYWdlICE9IG51bGwgJiYgdGhpcy5hbmd1bGFyUENvbm5lY3REYXRhLnZhbGlkYXRlTWVzc2FnZSAhPSAnJykge1xuICAgICAgY29uc3QgdGltZXIgPSBpbnRlcnZhbCgxMDApLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuZmllbGRDb250cm9sLnNldEVycm9ycyh7IG1lc3NhZ2U6IHRydWUgfSk7XG4gICAgICAgIHRoaXMuZmllbGRDb250cm9sLm1hcmtBc1RvdWNoZWQoKTtcblxuICAgICAgICB0aW1lci51bnN1YnNjcmliZSgpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZmllbGRPbkJsdXIoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IG9sZFZhbCA9IHRoaXMudmFsdWUkID8/ICcnO1xuICAgIGNvbnN0IGlzVmFsdWVDaGFuZ2VkID0gZXZlbnQudGFyZ2V0LnZhbHVlLnRvU3RyaW5nKCkgIT09IG9sZFZhbC50b1N0cmluZygpO1xuXG4gICAgaWYgKGlzVmFsdWVDaGFuZ2VkKSB7XG4gICAgICBjb25zdCBhY3Rpb25zQXBpID0gdGhpcy5wQ29ubiQ/LmdldEFjdGlvbnNBcGkoKTtcbiAgICAgIGNvbnN0IHByb3BOYW1lID0gdGhpcy5wQ29ubiQ/LmdldFN0YXRlUHJvcHMoKS52YWx1ZTtcbiAgICAgIGxldCB2YWx1ZSA9IGV2ZW50Py50YXJnZXQ/LnZhbHVlO1xuICAgICAgLy8gcmVwbGFjaW5nIHRob3VzYW5kIHNlcGFyYXRvciB3aXRoIGVtcHR5IHN0cmluZyBhcyBub3QgcmVxdWlyZWQgaW4gYXBpIGNhbGxcbiAgICAgIGlmICh0aGlzLmNvbmZpZ1Byb3BzJC5zaG93R3JvdXBTZXBhcmF0b3JzKSB7XG4gICAgICAgIGNvbnN0IHRob3VzYW5kU2VwID0gdGhpcy50aG91c2FuZFNlcGFyYXRvciA9PT0gJy4nID8gJ1xcXFwuJyA6IHRoaXMudGhvdXNhbmRTZXBhcmF0b3I7XG4gICAgICAgIGNvbnN0IHJlZ0V4cCA9IG5ldyBSZWdFeHAoU3RyaW5nLnJhd2Ake3Rob3VzYW5kU2VwfWAsICdnJyk7XG4gICAgICAgIHZhbHVlID0gdmFsdWU/LnJlcGxhY2UocmVnRXhwLCAnJyk7XG4gICAgICB9XG4gICAgICAvLyByZXBsYWNpbmcgZGVjaW1hbCBzZXBhcmF0b3Igd2l0aCAnLidcbiAgICAgIGlmICh0aGlzLmRlY2ltYWxTZXBhcmF0b3IgIT09ICcuJykge1xuICAgICAgICBjb25zdCByZWdFeHAgPSBuZXcgUmVnRXhwKFN0cmluZy5yYXdgJHt0aGlzLmRlY2ltYWxTZXBhcmF0b3J9YCwgJ2cnKTtcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKHJlZ0V4cCwgJy4nKTtcbiAgICAgIH1cbiAgICAgIGhhbmRsZUV2ZW50KGFjdGlvbnNBcGksICdjaGFuZ2VOYmx1cicsIHByb3BOYW1lLCB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RXJyb3JNZXNzYWdlKCkge1xuICAgIGxldCBlcnJNZXNzYWdlID0gJyc7XG5cbiAgICAvLyBsb29rIGZvciB2YWxpZGF0aW9uIG1lc3NhZ2VzIGZvciBqc29uLCBwcmUtZGVmaW5lZCBvciBqdXN0IGFuIGVycm9yIHB1c2hlZCBmcm9tIHdvcmtpdGVtICg0MDApXG4gICAgaWYgKHRoaXMuZmllbGRDb250cm9sLmhhc0Vycm9yKCdtZXNzYWdlJykpIHtcbiAgICAgIGVyck1lc3NhZ2UgPSB0aGlzLmFuZ3VsYXJQQ29ubmVjdERhdGEudmFsaWRhdGVNZXNzYWdlID8/ICcnO1xuICAgICAgcmV0dXJuIGVyck1lc3NhZ2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmZpZWxkQ29udHJvbC5oYXNFcnJvcigncmVxdWlyZWQnKSkge1xuICAgICAgZXJyTWVzc2FnZSA9ICdZb3UgbXVzdCBlbnRlciBhIHZhbHVlJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuZmllbGRDb250cm9sLmVycm9ycykge1xuICAgICAgZXJyTWVzc2FnZSA9IHRoaXMuZmllbGRDb250cm9sLmVycm9ycy50b1N0cmluZygpO1xuICAgIH1cblxuICAgIHJldHVybiBlcnJNZXNzYWdlO1xuICB9XG59XG4iLCI8ZGl2ICpuZ0lmPVwiZGlzcGxheU1vZGUkOyBlbHNlIG5vRGlzcGxheU1vZGVcIj5cbiAgPGNvbXBvbmVudC1tYXBwZXIgKm5nSWY9XCJiVmlzaWJsZSQgIT09IGZhbHNlXCIgbmFtZT1cIkZpZWxkVmFsdWVMaXN0XCIgW3Byb3BzXT1cInsgbGFiZWwkLCB2YWx1ZSQ6IGZvcm1hdHRlZFZhbHVlLCBkaXNwbGF5TW9kZSQgfVwiPjwvY29tcG9uZW50LW1hcHBlcj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNub0Rpc3BsYXlNb2RlPlxuICA8ZGl2ICpuZ0lmPVwiYkhhc0Zvcm0kOyBlbHNlIG5vRWRpdFwiPlxuICAgIDxkaXYgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXAkXCIgKm5nSWY9XCJiVmlzaWJsZSRcIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInBzZGstZnVsbC13aWR0aFwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIiBbaGludExhYmVsXT1cImhlbHBlclRleHRcIj5cbiAgICAgICAgPG1hdC1sYWJlbD57eyBsYWJlbCQgfX08L21hdC1sYWJlbD5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgY3VycmVuY3lNYXNrXG4gICAgICAgICAgW29wdGlvbnNdPVwie1xuICAgICAgICAgICAgcHJlZml4OiBjdXJyZW5jeVN5bWJvbCxcbiAgICAgICAgICAgIHN1ZmZpeDogc3VmZml4LFxuICAgICAgICAgICAgdGhvdXNhbmRzOiB0aG91c2FuZFNlcGFyYXRvcixcbiAgICAgICAgICAgIGRlY2ltYWw6IGRlY2ltYWxTZXBhcmF0b3IsXG4gICAgICAgICAgICBhbGlnbjogJ2xlZnQnLFxuICAgICAgICAgICAgbnVsbGFibGU6IHRydWUsXG4gICAgICAgICAgICBwcmVjaXNpb246IGRlY2ltYWxQcmVjaXNpb24sXG4gICAgICAgICAgICBpbnB1dE1vZGU6IGlucHV0TW9kZVxuICAgICAgICAgIH1cIlxuICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgc3RlcD1cIjAuMDFcIlxuICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiY29udHJvbE5hbWUkXCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwiYlJlcXVpcmVkJFwiXG4gICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZpZWxkQ29udHJvbFwiXG4gICAgICAgICAgW2F0dHIuZGF0YS10ZXN0LWlkXT1cInRlc3RJZFwiXG4gICAgICAgICAgKGJsdXIpPVwiZmllbGRPbkJsdXIoJGV2ZW50KVwiXG4gICAgICAgICAgW3JlYWRvbmx5XT1cImJSZWFkb25seSRcIlxuICAgICAgICAvPlxuICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwiZmllbGRDb250cm9sLmludmFsaWRcIj57eyBnZXRFcnJvck1lc3NhZ2UoKSB9fTwvbWF0LWVycm9yPlxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNub0VkaXQ+XG4gIDxjb21wb25lbnQtbWFwcGVyICpuZ0lmPVwiYlZpc2libGUkICE9PSBmYWxzZVwiIG5hbWU9XCJUZXh0XCIgW3Byb3BzXT1cInsgcENvbm4kLCBmb3JtYXRBcyQ6ICd0ZXh0JyB9XCI+PC9jb21wb25lbnQtbWFwcGVyPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -92,6 +92,13 @@ export class DropdownComponent {
92
92
  this.bHasForm$ = false;
93
93
  }
94
94
  }
95
+ set options(options) {
96
+ this.options$ = options;
97
+ if (this.displayMode$) {
98
+ this.value$ = this.options$?.find(option => option.key === this.value$)?.value || this.value$;
99
+ this.localizedValue = this.pConn$.getLocalizedValue(this.value$ === 'Select...' ? '' : this.value$, this.localePath, this.pConn$.getLocaleRuleNameFromKeys(this.localeClass, this.localeContext, this.localeName));
100
+ }
101
+ }
95
102
  ngOnDestroy() {
96
103
  if (this.formGroup$) {
97
104
  this.formGroup$.removeControl(this.controlName$);
@@ -160,7 +167,7 @@ export class DropdownComponent {
160
167
  if (this.theDatasource) {
161
168
  const optionsList = [...this.utils.getOptionList(this.configProps$, this.pConn$.getDataObject())];
162
169
  optionsList?.unshift({ key: 'Select', value: this.pConn$.getLocalizedValue('Select...', '', '') });
163
- this.options$ = optionsList;
170
+ this.options = optionsList;
164
171
  }
165
172
  this.actionsApi = this.pConn$.getActionsApi();
166
173
  this.propName = this.pConn$.getStateProps().value;
@@ -175,6 +182,7 @@ export class DropdownComponent {
175
182
  this.localeName = this.localeContext === 'datapage' ? metaData?.datasource?.name : refName;
176
183
  this.localePath = this.localeContext === 'datapage' ? displayName : this.localeName;
177
184
  this.localizedValue = this.pConn$.getLocalizedValue(this.value$, this.localePath, this.pConn$.getLocaleRuleNameFromKeys(this.localeClass, this.localeContext, this.localeName));
185
+ this.localizedValue = this.options$?.find(opt => opt.key === this.value$)?.value || this.localizedValue;
178
186
  // trigger display of error message with field control
179
187
  if (this.angularPConnectData.validateMessage != null && this.angularPConnectData.validateMessage != '') {
180
188
  const timer = interval(100).subscribe(() => {
@@ -211,7 +219,7 @@ export class DropdownComponent {
211
219
  ];
212
220
  }
213
221
  columns = preProcessColumns(columns) || [];
214
- if (!this.displayMode$ && listType !== 'associated' && typeof datasource === 'string') {
222
+ if (listType !== 'associated' && typeof datasource === 'string') {
215
223
  this.getData(datasource, parameters, columns, context, listType);
216
224
  }
217
225
  }
@@ -241,7 +249,7 @@ export class DropdownComponent {
241
249
  optionsData.push(obj);
242
250
  });
243
251
  optionsData?.unshift({ key: 'Select', value: this.pConn$.getLocalizedValue('Select...', '', '') });
244
- this.options$ = optionsData;
252
+ this.options = optionsData;
245
253
  });
246
254
  });
247
255
  }
@@ -278,10 +286,10 @@ export class DropdownComponent {
278
286
  }
279
287
  return errMessage;
280
288
  }
281
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: DropdownComponent, deps: [{ token: i1.AngularPConnectService }, { token: i0.ChangeDetectorRef }, { token: i2.Utils }, { token: i3.DatapageService }], target: i0.ɵɵFactoryTarget.Component }); }
282
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: DropdownComponent, isStandalone: true, selector: "app-dropdown", inputs: { pConn$: "pConn$", formGroup$: "formGroup$" }, ngImport: i0, template: "<div *ngIf=\"displayMode$; else noDisplayMode\">\n <component-mapper\n *ngIf=\"bVisible$ !== false\"\n name=\"FieldValueList\"\n [props]=\"{ label$, value$: this.localizedValue, displayMode$ }\"\n ></component-mapper>\n</div>\n<ng-template #noDisplayMode>\n <div *ngIf=\"!bReadonly$ && bHasForm$; else noEdit\">\n <div [formGroup]=\"formGroup$\" *ngIf=\"bVisible$\">\n <mat-form-field class=\"psdk-full-width\" subscriptSizing=\"dynamic\" [hintLabel]=\"helperText\">\n <mat-select\n [value]=\"value$\"\n [required]=\"bRequired$\"\n [attr.data-test-id]=\"testId\"\n (selectionChange)=\"fieldOnChange($event)\"\n [formControl]=\"fieldControl\"\n >\n <mat-option *ngFor=\"let opt of options$\" [value]=\"opt.key\">\n {{ getLocalizedOptionValue(opt) }}\n </mat-option>\n </mat-select>\n <mat-label>{{ label$ }}</mat-label>\n <mat-error *ngIf=\"fieldControl.invalid\">{{ getErrorMessage() }}</mat-error>\n </mat-form-field>\n </div>\n </div>\n</ng-template>\n<ng-template #noEdit>\n <component-mapper *ngIf=\"bVisible$ !== false\" name=\"Text\" [props]=\"{ pConn$, formatAs$: 'text' }\"></component-mapper>\n</ng-template>\n", styles: [".psdk-form{min-width:9.375rem;width:100%}.psdk-full-width{width:100%}.psdk-label-readonly{font-size:1rem;display:block;transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.001px);-ms-transform:translateY(-1.28125em) scale(.75);width:133.33333%}.psdk-data-readonly{padding-top:.625rem;width:100%}::ng-deep .mat-mdc-form-field-infix{width:auto}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CommonModule) }, { kind: "directive", type: i0.forwardRef(() => i4.NgForOf), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(() => i4.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: i0.forwardRef(() => ReactiveFormsModule) }, { kind: "directive", type: i0.forwardRef(() => i5.NgControlStatus), selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i0.forwardRef(() => i5.NgControlStatusGroup), selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i0.forwardRef(() => i5.RequiredValidator), selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i0.forwardRef(() => i5.FormControlDirective), selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i0.forwardRef(() => i5.FormGroupDirective), selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatFormFieldModule) }, { kind: "component", type: i0.forwardRef(() => i6.MatFormField), selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i0.forwardRef(() => i6.MatLabel), selector: "mat-label" }, { kind: "directive", type: i0.forwardRef(() => i6.MatError), selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatSelectModule) }, { kind: "component", type: i0.forwardRef(() => i7.MatSelect), selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i0.forwardRef(() => i8.MatOption), selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatOptionModule) }, { kind: "component", type: i0.forwardRef(() => ComponentMapperComponent), selector: "component-mapper", inputs: ["name", "props", "errorMsg", "outputEvents", "parent"] }] }); }
289
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DropdownComponent, deps: [{ token: i1.AngularPConnectService }, { token: i0.ChangeDetectorRef }, { token: i2.Utils }, { token: i3.DatapageService }], target: i0.ɵɵFactoryTarget.Component }); }
290
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DropdownComponent, isStandalone: true, selector: "app-dropdown", inputs: { pConn$: "pConn$", formGroup$: "formGroup$" }, ngImport: i0, template: "<div *ngIf=\"displayMode$; else noDisplayMode\">\n <component-mapper\n *ngIf=\"bVisible$ !== false\"\n name=\"FieldValueList\"\n [props]=\"{ label$, value$: this.localizedValue, displayMode$ }\"\n ></component-mapper>\n</div>\n<ng-template #noDisplayMode>\n <div *ngIf=\"!bReadonly$ && bHasForm$; else noEdit\">\n <div [formGroup]=\"formGroup$\" *ngIf=\"bVisible$\">\n <mat-form-field class=\"psdk-full-width\" subscriptSizing=\"dynamic\" [hintLabel]=\"helperText\">\n <mat-select\n [value]=\"value$\"\n [required]=\"bRequired$\"\n [attr.data-test-id]=\"testId\"\n (selectionChange)=\"fieldOnChange($event)\"\n [formControl]=\"fieldControl\"\n >\n <mat-option *ngFor=\"let opt of options$\" [value]=\"opt.key\">\n {{ getLocalizedOptionValue(opt) }}\n </mat-option>\n </mat-select>\n <mat-label>{{ label$ }}</mat-label>\n <mat-error *ngIf=\"fieldControl.invalid\">{{ getErrorMessage() }}</mat-error>\n </mat-form-field>\n </div>\n </div>\n</ng-template>\n<ng-template #noEdit>\n <component-mapper *ngIf=\"bVisible$ !== false\" name=\"Text\" [props]=\"{ pConn$, formatAs$: 'text' }\"></component-mapper>\n</ng-template>\n", styles: [".psdk-form{min-width:9.375rem;width:100%}.psdk-full-width{width:100%}.psdk-label-readonly{font-size:1rem;display:block;transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.001px);-ms-transform:translateY(-1.28125em) scale(.75);width:133.33333%}.psdk-data-readonly{padding-top:.625rem;width:100%}::ng-deep .mat-mdc-form-field-infix{width:auto}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CommonModule) }, { kind: "directive", type: i0.forwardRef(() => i4.NgForOf), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(() => i4.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: i0.forwardRef(() => ReactiveFormsModule) }, { kind: "directive", type: i0.forwardRef(() => i5.NgControlStatus), selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i0.forwardRef(() => i5.NgControlStatusGroup), selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i0.forwardRef(() => i5.RequiredValidator), selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i0.forwardRef(() => i5.FormControlDirective), selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i0.forwardRef(() => i5.FormGroupDirective), selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatFormFieldModule) }, { kind: "component", type: i0.forwardRef(() => i6.MatFormField), selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i0.forwardRef(() => i6.MatLabel), selector: "mat-label" }, { kind: "directive", type: i0.forwardRef(() => i6.MatError), selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatSelectModule) }, { kind: "component", type: i0.forwardRef(() => i7.MatSelect), selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i0.forwardRef(() => i8.MatOption), selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatOptionModule) }, { kind: "component", type: i0.forwardRef(() => ComponentMapperComponent), selector: "component-mapper", inputs: ["name", "props", "errorMsg", "outputEvents", "parent"] }] }); }
283
291
  }
284
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: DropdownComponent, decorators: [{
292
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DropdownComponent, decorators: [{
285
293
  type: Component,
286
294
  args: [{ selector: 'app-dropdown', standalone: true, imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatSelectModule, MatOptionModule, forwardRef(() => ComponentMapperComponent)], template: "<div *ngIf=\"displayMode$; else noDisplayMode\">\n <component-mapper\n *ngIf=\"bVisible$ !== false\"\n name=\"FieldValueList\"\n [props]=\"{ label$, value$: this.localizedValue, displayMode$ }\"\n ></component-mapper>\n</div>\n<ng-template #noDisplayMode>\n <div *ngIf=\"!bReadonly$ && bHasForm$; else noEdit\">\n <div [formGroup]=\"formGroup$\" *ngIf=\"bVisible$\">\n <mat-form-field class=\"psdk-full-width\" subscriptSizing=\"dynamic\" [hintLabel]=\"helperText\">\n <mat-select\n [value]=\"value$\"\n [required]=\"bRequired$\"\n [attr.data-test-id]=\"testId\"\n (selectionChange)=\"fieldOnChange($event)\"\n [formControl]=\"fieldControl\"\n >\n <mat-option *ngFor=\"let opt of options$\" [value]=\"opt.key\">\n {{ getLocalizedOptionValue(opt) }}\n </mat-option>\n </mat-select>\n <mat-label>{{ label$ }}</mat-label>\n <mat-error *ngIf=\"fieldControl.invalid\">{{ getErrorMessage() }}</mat-error>\n </mat-form-field>\n </div>\n </div>\n</ng-template>\n<ng-template #noEdit>\n <component-mapper *ngIf=\"bVisible$ !== false\" name=\"Text\" [props]=\"{ pConn$, formatAs$: 'text' }\"></component-mapper>\n</ng-template>\n", styles: [".psdk-form{min-width:9.375rem;width:100%}.psdk-full-width{width:100%}.psdk-label-readonly{font-size:1rem;display:block;transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.001px);-ms-transform:translateY(-1.28125em) scale(.75);width:133.33333%}.psdk-data-readonly{padding-top:.625rem;width:100%}::ng-deep .mat-mdc-form-field-infix{width:auto}\n"] }]
287
295
  }], ctorParameters: () => [{ type: i1.AngularPConnectService }, { type: i0.ChangeDetectorRef }, { type: i2.Utils }, { type: i3.DatapageService }], propDecorators: { pConn$: [{
@@ -289,4 +297,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImpo
289
297
  }], formGroup$: [{
290
298
  type: Input
291
299
  }] } });
292
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci1zZGstY29tcG9uZW50cy9zcmMvbGliL19jb21wb25lbnRzL2ZpZWxkL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXItc2RrLWNvbXBvbmVudHMvc3JjL2xpYi9fY29tcG9uZW50cy9maWVsZC9kcm9wZG93bi9kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBcUIsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ25HLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFhLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hDLE9BQU8sT0FBTyxNQUFNLGlCQUFpQixDQUFDO0FBSXRDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7Ozs7OztBQUczRCxTQUFTLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxFQUFFO0lBQ3BDLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUN0QixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FB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QUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBRXBCLGlHQUFpRztRQUNqRyxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDMUMsVUFBVSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDO1lBQzVELE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDM0MsVUFBVSxHQUFHLHdCQUF3QixDQUFDO1FBQ3hDLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDcEMsVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ25ELENBQUM7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDOytHQTNSVSxpQkFBaUI7bUdBQWpCLGlCQUFpQixnSUN6RTlCLDR1Q0ErQkEsMmJEd0NZLFlBQVksOFRBQUUsbUJBQW1CLGk4QkFBRSxrQkFBa0IsMmRBQUUsZUFBZSxrdkJBQUUsZUFBZSxvREFBbUIsd0JBQXdCOzs0RkFFakksaUJBQWlCO2tCQVA3QixTQUFTOytCQUNFLGNBQWMsY0FHWixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsd0JBQXdCLENBQUMsQ0FBQzs2S0FHckksTUFBTTtzQkFBZCxLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIENoYW5nZURldGVjdG9yUmVmLCBmb3J3YXJkUmVmLCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0T3B0aW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBpbnRlcnZhbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnZmFzdC1kZWVwLWVxdWFsJztcbmltcG9ydCB7IEFuZ3VsYXJQQ29ubmVjdERhdGEsIEFuZ3VsYXJQQ29ubmVjdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9fYnJpZGdlL2FuZ3VsYXItcGNvbm5lY3QnO1xuaW1wb3J0IHsgRGF0YXBhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vX3NlcnZpY2VzL2RhdGFwYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi8uLi8uLi9faGVscGVycy91dGlscyc7XG5pbXBvcnQgeyBDb21wb25lbnRNYXBwZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9fYnJpZGdlL2NvbXBvbmVudC1tYXBwZXIvY29tcG9uZW50LW1hcHBlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgaGFuZGxlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9faGVscGVycy9ldmVudC11dGlsJztcbmltcG9ydCB7IFBDb25uRmllbGRQcm9wcyB9IGZyb20gJy4uLy4uLy4uL190eXBlcy9QQ29ublByb3BzLmludGVyZmFjZSc7XG5cbmZ1bmN0aW9uIGZsYXR0ZW5QYXJhbWV0ZXJzKHBhcmFtcyA9IHt9KSB7XG4gIGNvbnN0IGZsYXRQYXJhbXMgPSB7fTtcbiAgT2JqZWN0LmtleXMocGFyYW1zKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgY29uc3QgeyBuYW1lLCB2YWx1ZTogdGhlVmFsIH0gPSBwYXJhbXNba2V5XTtcbiAgICBmbGF0UGFyYW1zW25hbWVdID0gdGhlVmFsO1xuICB9KTtcblxuICByZXR1cm4gZmxhdFBhcmFtcztcbn1cblxuZnVuY3Rpb24gcHJlUHJvY2Vzc0NvbHVtbnMoY29sdW1uTGlzdCkge1xuICByZXR1cm4gY29sdW1uTGlzdC5tYXAoY29sID0+IHtcbiAgICBjb25zdCB0ZW1wQ29sT2JqID0geyAuLi5jb2wgfTtcbiAgICB0ZW1wQ29sT2JqLnZhbHVlID0gY29sLnZhbHVlICYmIGNvbC52YWx1ZS5zdGFydHNXaXRoKCcuJykgPyBjb2wudmFsdWUuc3Vic3RyaW5nKDEpIDogY29sLnZhbHVlO1xuICAgIHJldHVybiB0ZW1wQ29sT2JqO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0RGlzcGxheUZpZWxkc01ldGFEYXRhKGNvbHVtbkxpc3QpIHtcbiAgY29uc3QgZGlzcGxheUNvbHVtbnMgPSBjb2x1bW5MaXN0LmZpbHRlcihjb2wgPT4gY29sLmRpc3BsYXkgPT09ICd0cnVlJyk7XG4gIGNvbnN0IG1ldGFEYXRhT2JqOiBhbnkgPSB7IGtleTogJycsIHByaW1hcnk6ICcnLCBzZWNvbmRhcnk6IFtdIH07XG4gIGNvbnN0IGtleUNvbCA9IGNvbHVtbkxpc3QuZmlsdGVyKGNvbCA9PiBjb2wua2V5ID09PSAndHJ1ZScpO1xuICBtZXRhRGF0YU9iai5rZXkgPSBrZXlDb2wubGVuZ3RoID4gMCA/IGtleUNvbFswXS52YWx1ZSA6ICdhdXRvJztcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRpc3BsYXlDb2x1bW5zLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIGlmIChkaXNwbGF5Q29sdW1uc1tpbmRleF0ucHJpbWFyeSA9PT0gJ3RydWUnKSB7XG4gICAgICBtZXRhRGF0YU9iai5wcmltYXJ5ID0gZGlzcGxheUNvbHVtbnNbaW5kZXhdLnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBtZXRhRGF0YU9iai5zZWNvbmRhcnkucHVzaChkaXNwbGF5Q29sdW1uc1tpbmRleF0udmFsdWUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbWV0YURhdGFPYmo7XG59XG5cbmludGVyZmFjZSBJT3B0aW9uIHtcbiAga2V5OiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmc7XG59XG5cbi8vIENhbid0IHVzZSBEcm9wZG93blByb3BzIHdpdGggOC4yMyB1bnRpbCBnZXRMb2NhbGVSdWxlTmFtZUZyb21LZXlzIGlzIE5PVCBwcml2YXRlXG5pbnRlcmZhY2UgRHJvcGRvd25Qcm9wcyBleHRlbmRzIFBDb25uRmllbGRQcm9wcyB7XG4gIC8vIElmIGFueSwgZW50ZXIgYWRkaXRpb25hbCBwcm9wcyB0aGF0IG9ubHkgZXhpc3Qgb24gRHJvcGRvd24gaGVyZVxuICBkYXRhc291cmNlPzogYW55W107XG4gIG9uUmVjb3JkQ2hhbmdlPzogYW55O1xuICBmaWVsZE1ldGFkYXRhPzogYW55O1xuICBsaXN0VHlwZT86IHN0cmluZztcbiAgY29sdW1ucz86IGFueVtdO1xuICBkZWZlckRhdGFzb3VyY2U/OiBib29sZWFuO1xuICBkYXRhc291cmNlTWV0YWRhdGE/OiBhbnk7XG4gIHBhcmFtZXRlcnM/OiBhbnk7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1kcm9wZG93bicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Ryb3Bkb3duLmNvbXBvbmVudC5zY3NzJ10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIE1hdEZvcm1GaWVsZE1vZHVsZSwgTWF0U2VsZWN0TW9kdWxlLCBNYXRPcHRpb25Nb2R1bGUsIGZvcndhcmRSZWYoKCkgPT4gQ29tcG9uZW50TWFwcGVyQ29tcG9uZW50KV1cbn0pXG5leHBvcnQgY2xhc3MgRHJvcGRvd25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpIHBDb25uJDogdHlwZW9mIFBDb25uZWN0O1xuICBASW5wdXQoKSBmb3JtR3JvdXAkOiBGb3JtR3JvdXA7XG5cbiAgLy8gVXNlZCB3aXRoIEFuZ3VsYXJQQ29ubmVjdFxuICBhbmd1bGFyUENvbm5lY3REYXRhOiBBbmd1bGFyUENvbm5lY3REYXRhID0ge307XG4gIGNvbmZpZ1Byb3BzJDogRHJvcGRvd25Qcm9wcztcblxuICBsYWJlbCQgPSAnJztcbiAgdmFsdWUkID0gJyc7XG4gIGJSZXF1aXJlZCQgPSBmYWxzZTtcbiAgYlJlYWRvbmx5JCA9IGZhbHNlO1xuICBiRGlzYWJsZWQkID0gZmFsc2U7XG4gIGJWaXNpYmxlJCA9IHRydWU7XG4gIGRpc3BsYXlNb2RlJD86IHN0cmluZyA9ICcnO1xuICBjb250cm9sTmFtZSQ6IHN0cmluZztcbiAgYkhhc0Zvcm0kID0gdHJ1ZTtcbiAgb3B0aW9ucyQ6IElPcHRpb25bXTtcbiAgY29tcG9uZW50UmVmZXJlbmNlID0gJyc7XG4gIHRlc3RJZCA9ICcnO1xuICBoZWxwZXJUZXh0OiBzdHJpbmc7XG4gIGhpZGVMYWJlbDogYW55O1xuICB0aGVEYXRhc291cmNlOiBhbnlbXSB8IG51bGw7XG4gIGZpZWxkQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJywgbnVsbCk7XG4gIGZpZWxkTWV0YWRhdGE6IGFueVtdO1xuICBsb2NhbGVDb250ZXh0ID0gJyc7XG4gIGxvY2FsZUNsYXNzID0gJyc7XG4gIGxvY2FsZU5hbWUgPSAnJztcbiAgbG9jYWxlUGF0aCA9ICcnO1xuICBsb2NhbGl6ZWRWYWx1ZSA9ICcnO1xuICBhY3Rpb25zQXBpOiBPYmplY3Q7XG4gIHByb3BOYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhbmd1bGFyUENvbm5lY3Q6IEFuZ3VsYXJQQ29ubmVjdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSB1dGlsczogVXRpbHMsXG4gICAgcHJpdmF0ZSBkYXRhUGFnZVNlcnZpY2U6IERhdGFwYWdlU2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLy8gRmlyc3QgdGhpbmcgaW4gaW5pdGlhbGl6YXRpb24gaXMgcmVnaXN0ZXJpbmcgYW5kIHN1YnNjcmliaW5nIHRvIHRoZSBBbmd1bGFyUENvbm5lY3Qgc2VydmljZVxuICAgIHRoaXMuYW5ndWxhclBDb25uZWN0RGF0YSA9IHRoaXMuYW5ndWxhclBDb25uZWN0LnJlZ2lzdGVyQW5kU3Vic2NyaWJlQ29tcG9uZW50KHRoaXMsIHRoaXMub25TdGF0ZUNoYW5nZSk7XG4gICAgdGhpcy5jb250cm9sTmFtZSQgPSB0aGlzLmFuZ3VsYXJQQ29ubmVjdC5nZXRDb21wb25lbnRJRCh0aGlzKTtcblxuICAgIC8vIFRoZW4sIGNvbnRpbnVlIG9uIHdpdGggb3RoZXIgaW5pdGlhbGl6YXRpb25cblxuICAgIC8vIGNhbGwgdXBkYXRlU2VsZiB3aGVuIGluaXRpYWxpemluZ1xuICAgIHRoaXMuY2hlY2tBbmRVcGRhdGUoKTtcbiAgICAvLyB0aGlzIHNob3VsZCBnZXQgY2FsbGVkIGFmZXIgY2hlY2tBbmRVcGRhdGVcbiAgICB0aGlzLmdldERhdGFwYWdlRGF0YSgpO1xuXG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwJCkge1xuICAgICAgLy8gYWRkIGNvbnRyb2wgdG8gZm9ybUdyb3VwXG4gICAgICB0aGlzLmZvcm1Hcm91cCQuYWRkQ29udHJvbCh0aGlzLmNvbnRyb2xOYW1lJCwgdGhpcy5maWVsZENvbnRyb2wpO1xuICAgICAgdGhpcy5maWVsZENvbnRyb2wuc2V0VmFsdWUodGhpcy52YWx1ZSQpO1xuICAgICAgdGhpcy5iSGFzRm9ybSQgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJSZWFkb25seSQgPSB0cnVlO1xuICAgICAgdGhpcy5iSGFzRm9ybSQgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb3JtR3JvdXAkKSB7XG4gICAgICB0aGlzLmZvcm1Hcm91cCQucmVtb3ZlQ29udHJvbCh0aGlzLmNvbnRyb2xOYW1lJCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYW5ndWxhclBDb25uZWN0RGF0YS51bnN1YnNjcmliZUZuKSB7XG4gICAgICB0aGlzLmFuZ3VsYXJQQ29ubmVjdERhdGEudW5zdWJzY3JpYmVGbigpO1xuICAgIH1cbiAgfVxuXG4gIC8vIENhbGxiYWNrIHBhc3NlZCB3aGVuIHN1YnNjcmliaW5nIHRvIHN0b3JlIGNoYW5nZVxuICBvblN0YXRlQ2hhbmdlKCkge1xuICAgIHRoaXMuY2hlY2tBbmRVcGRhdGUoKTtcbiAgfVxuXG4gIGNoZWNrQW5kVXBkYXRlKCkge1xuICAgIC8vIFNob3VsZCBhbHdheXMgY2hlY2sgdGhlIGJyaWRnZSB0byBzZWUgaWYgdGhlIGNvbXBvbmVudCBzaG91bGRcbiAgICAvLyB1cGRhdGUgaXRzZWxmIChyZS1yZW5kZXIpXG4gICAgY29uc3QgYlVwZGF0ZVNlbGYgPSB0aGlzLmFuZ3VsYXJQQ29ubmVjdC5zaG91bGRDb21wb25lbnRVcGRhdGUodGhpcyk7XG5cbiAgICAvLyBPTkxZIGNhbGwgdXBkYXRlU2VsZiB3aGVuIHRoZSBjb21wb25lbnQgc2hvdWxkIHVwZGF0ZVxuICAgIGlmIChiVXBkYXRlU2VsZikge1xuICAgICAgdGhpcy51cGRhdGVTZWxmKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gdXBkYXRlU2VsZlxuICB1cGRhdGVTZWxmKCk6IHZvaWQge1xuICAgIC8vIG1vdmVkIHRoaXMgZnJvbSBuZ09uSW5pdCgpIGFuZCBjYWxsIHRoaXMgZnJvbSB0aGVyZSBpbnN0ZWFkLi4uXG4gICAgdGhpcy5jb25maWdQcm9wcyQgPSB0aGlzLnBDb25uJC5yZXNvbHZlQ29uZmlnUHJvcHModGhpcy5wQ29ubiQuZ2V0Q29uZmlnUHJvcHMoKSkgYXMgRHJvcGRvd25Qcm9wcztcbiAgICBpZiAodGhpcy5jb25maWdQcm9wcyQudmFsdWUgIT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnZhbHVlJCA9IHRoaXMuY29uZmlnUHJvcHMkLnZhbHVlO1xuICAgIH1cblxuICAgIHRoaXMudGVzdElkID0gdGhpcy5jb25maWdQcm9wcyQudGVzdElkO1xuICAgIHRoaXMuZGlzcGxheU1vZGUkID0gdGhpcy5jb25maWdQcm9wcyQuZGlzcGxheU1vZGU7XG4gICAgdGhpcy5sYWJlbCQgPSB0aGlzLmNvbmZpZ1Byb3BzJC5sYWJlbDtcbiAgICB0aGlzLmhlbHBlclRleHQgPSB0aGlzLmNvbmZpZ1Byb3BzJC5oZWxwZXJUZXh0O1xuICAgIHRoaXMuaGlkZUxhYmVsID0gdGhpcy5jb25maWdQcm9wcyQuaGlkZUxhYmVsO1xuICAgIGNvbnN0IGRhdGFzb3VyY2UgPSB0aGlzLmNvbmZpZ1Byb3BzJC5kYXRhc291cmNlO1xuICAgIC8vIHRpbWVvdXQgYW5kIGRldGVjdENoYW5nZXMgdG8gYXZvaWQgRXhwcmVzc2lvbkNoYW5nZWRBZnRlckl0SGFzQmVlbkNoZWNrZWRFcnJvclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuY29uZmlnUHJvcHMkLnJlcXVpcmVkICE9IG51bGwpIHtcbiAgICAgICAgdGhpcy5iUmVxdWlyZWQkID0gdGhpcy51dGlscy5nZXRCb29sZWFuVmFsdWUodGhpcy5jb25maWdQcm9wcyQucmVxdWlyZWQpO1xuICAgICAgfVxuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfSk7XG5cbiAgICBpZiAoIWlzRXF1YWwoZGF0YXNvdXJjZSwgdGhpcy50aGVEYXRhc291cmNlKSkge1xuICAgICAgLy8gaW5ib3VuZCBkYXRhc291cmNlIGlzIGRpZmZlcmVudCwgc28gdXBkYXRlIHRoZURhdGFzb3VyY2VcbiAgICAgIHRoaXMudGhlRGF0YXNvdXJjZSA9IGRhdGFzb3VyY2UgfHwgbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jb25maWdQcm9wcyQudmlzaWJpbGl0eSAhPSBudWxsKSB7XG4gICAgICB0aGlzLmJWaXNpYmxlJCA9IHRoaXMudXRpbHMuZ2V0Qm9vbGVhblZhbHVlKHRoaXMuY29uZmlnUHJvcHMkLnZpc2liaWxpdHkpO1xuICAgIH1cblxuICAgIC8vIGRpc2FibGVkXG4gICAgaWYgKHRoaXMuY29uZmlnUHJvcHMkLmRpc2FibGVkICE9IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5iRGlzYWJsZWQkID0gdGhpcy51dGlscy5nZXRCb29sZWFuVmFsdWUodGhpcy5jb25maWdQcm9wcyQuZGlzYWJsZWQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmJEaXNhYmxlZCQpIHtcbiAgICAgIHRoaXMuZmllbGRDb250cm9sLmRpc2FibGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maWVsZENvbnRyb2wuZW5hYmxlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnUHJvcHMkLnJlYWRPbmx5ICE9IG51bGwpIHtcbiAgICAgIHRoaXMuYlJlYWRvbmx5JCA9IHRoaXMudXRpbHMuZ2V0Qm9vbGVhblZhbHVlKHRoaXMuY29uZmlnUHJvcHMkLnJlYWRPbmx5KTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbXBvbmVudFJlZmVyZW5jZSA9IHRoaXMucENvbm4kLmdldFN0YXRlUHJvcHMoKS52YWx1ZTtcblxuICAgIGlmICh0aGlzLnZhbHVlJCA9PT0gJycgJiYgIXRoaXMuYlJlYWRvbmx5JCkge1xuICAgICAgdGhpcy52YWx1ZSQgPSAnU2VsZWN0JztcbiAgICB9XG5cbiAgICBpZiAodGhpcy50aGVEYXRhc291cmNlKSB7XG4gICAgICBjb25zdCBvcHRpb25zTGlzdCA9IFsuLi50aGlzLnV0aWxzLmdldE9wdGlvbkxpc3QodGhpcy5jb25maWdQcm9wcyQsIHRoaXMucENvbm4kLmdldERhdGFPYmplY3QoKSldO1xuICAgICAgb3B0aW9uc0xpc3Q/LnVuc2hpZnQoeyBrZXk6ICdTZWxlY3QnLCB2YWx1ZTogdGhpcy5wQ29ubiQuZ2V0TG9jYWxpemVkVmFsdWUoJ1NlbGVjdC4uLicsICcnLCAnJykgfSk7XG4gICAgICB0aGlzLm9wdGlvbnMkID0gb3B0aW9uc0xpc3Q7XG4gICAgfVxuXG4gICAgdGhpcy5hY3Rpb25zQXBpID0gdGhpcy5wQ29ubiQuZ2V0QWN0aW9uc0FwaSgpO1xuXG4gICAgdGhpcy5wcm9wTmFtZSA9IHRoaXMucENvbm4kLmdldFN0YXRlUHJvcHMoKS52YWx1ZTtcbiAgICBjb25zdCBjbGFzc05hbWUgPSB0aGlzLnBDb25uJC5nZXRDYXNlSW5mbygpLmdldENsYXNzTmFtZSgpO1xuICAgIGNvbnN0IHJlZk5hbWUgPSB0aGlzLnByb3BOYW1lPy5zbGljZSh0aGlzLnByb3BOYW1lLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcblxuICAgIHRoaXMuZmllbGRNZXRhZGF0YSA9IHRoaXMuY29uZmlnUHJvcHMkLmZpZWxkTWV0YWRhdGE7XG4gICAgY29uc3QgbWV0YURhdGEgPSBBcnJheS5pc0FycmF5KHRoaXMuZmllbGRNZXRhZGF0YSkgPyB0aGlzLmZpZWxkTWV0YWRhdGEuZmlsdGVyKGZpZWxkID0+IGZpZWxkPy5jbGFzc0lEID09PSBjbGFzc05hbWUpWzBdIDogdGhpcy5maWVsZE1ldGFkYXRhO1xuXG4gICAgbGV0IGRpc3BsYXlOYW1lID0gbWV0YURhdGE/LmRhdGFzb3VyY2U/LnByb3BlcnR5Rm9yRGlzcGxheVRleHQ7XG4gICAgZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZT8uc2xpY2UoZGlzcGxheU5hbWUubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIHRoaXMubG9jYWxlQ29udGV4dCA9IG1ldGFEYXRhPy5kYXRhc291cmNlPy50YWJsZVR5cGUgPT09ICdEYXRhUGFnZScgPyAnZGF0YXBhZ2UnIDogJ2Fzc29jaWF0ZWQnO1xuICAgIHRoaXMubG9jYWxlQ2xhc3MgPSB0aGlzLmxvY2FsZUNvbnRleHQgPT09ICdkYXRhcGFnZScgPyAnQGJhc2VjbGFzcycgOiBjbGFzc05hbWU7XG4gICAgdGhpcy5sb2NhbGVOYW1lID0gdGhpcy5sb2NhbGVDb250ZXh0ID09PSAnZGF0YXBhZ2UnID8gbWV0YURhdGE/LmRhdGFzb3VyY2U/Lm5hbWUgOiByZWZOYW1lO1xuICAgIHRoaXMubG9jYWxlUGF0aCA9IHRoaXMubG9jYWxlQ29udGV4dCA9PT0gJ2RhdGFwYWdlJyA/IGRpc3BsYXlOYW1lIDogdGhpcy5sb2NhbGVOYW1lO1xuXG4gICAgdGhpcy5sb2NhbGl6ZWRWYWx1ZSA9IHRoaXMucENvbm4kLmdldExvY2FsaXplZFZhbHVlKFxuICAgICAgdGhpcy52YWx1ZSQsXG4gICAgICB0aGlzLmxvY2FsZVBhdGgsXG4gICAgICB0aGlzLnBDb25uJC5nZXRMb2NhbGVSdWxlTmFtZUZyb21LZXlzKHRoaXMubG9jYWxlQ2xhc3MsIHRoaXMubG9jYWxlQ29udGV4dCwgdGhpcy5sb2NhbGVOYW1lKVxuICAgICk7XG4gICAgLy8gdHJpZ2dlciBkaXNwbGF5IG9mIGVycm9yIG1lc3NhZ2Ugd2l0aCBmaWVsZCBjb250cm9sXG4gICAgaWYgKHRoaXMuYW5ndWxhclBDb25uZWN0RGF0YS52YWxpZGF0ZU1lc3NhZ2UgIT0gbnVsbCAmJiB0aGlzLmFuZ3VsYXJQQ29ubmVjdERhdGEudmFsaWRhdGVNZXNzYWdlICE9ICcnKSB7XG4gICAgICBjb25zdCB0aW1lciA9IGludGVydmFsKDEwMCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5maWVsZENvbnRyb2wuc2V0RXJyb3JzKHsgbWVzc2FnZTogdHJ1ZSB9KTtcbiAgICAgICAgdGhpcy5maWVsZENvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuXG4gICAgICAgIHRpbWVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnZXREYXRhcGFnZURhdGEoKSB7XG4gICAgY29uc3QgY29uZmlnUHJvcHMgPSB0aGlzLnBDb25uJC5nZXRDb25maWdQcm9wcygpIGFzIERyb3Bkb3duUHJvcHM7XG4gICAgbGV0IHsgbGlzdFR5cGUsIHBhcmFtZXRlcnMsIGRhdGFzb3VyY2UgPSBbXSwgY29sdW1ucyA9IFtdIH0gPSBjb25maWdQcm9wcztcbiAgICBjb25zdCB7IGRlZmVyRGF0YXNvdXJjZSwgZGF0YXNvdXJjZU1ldGFkYXRhIH0gPSBjb25maWdQcm9wcztcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5wQ29ubiQuZ2V0Q29udGV4dE5hbWUoKTtcbiAgICBpZiAoZGVmZXJEYXRhc291cmNlICYmIGRhdGFzb3VyY2VNZXRhZGF0YT8uZGF0YXNvdXJjZT8ubmFtZSkge1xuICAgICAgbGlzdFR5cGUgPSAnZGF0YXBhZ2UnO1xuICAgICAgZGF0YXNvdXJjZSA9IGRhdGFzb3VyY2VNZXRhZGF0YS5kYXRhc291cmNlLm5hbWU7XG4gICAgICBjb25zdCB7IHBhcmFtZXRlcnM6IGRhdGFTb3VyY2VQYXJhbWV0ZXJzLCBwcm9wZXJ0eUZvckRpc3BsYXlUZXh0LCBwcm9wZXJ0eUZvclZhbHVlIH0gPSBkYXRhc291cmNlTWV0YWRhdGEuZGF0YXNvdXJjZTtcbiAgICAgIHBhcmFtZXRlcnMgPSBmbGF0dGVuUGFyYW1ldGVycyhkYXRhU291cmNlUGFyYW1ldGVycyk7XG4gICAgICBjb25zdCBkaXNwbGF5UHJvcCA9IHByb3BlcnR5Rm9yRGlzcGxheVRleHQ/LnN0YXJ0c1dpdGgoJ0BQJykgPyBwcm9wZXJ0eUZvckRpc3BsYXlUZXh0LnN1YnN0cmluZygzKSA6IHByb3BlcnR5Rm9yRGlzcGxheVRleHQ7XG4gICAgICBjb25zdCB2YWx1ZVByb3AgPSBwcm9wZXJ0eUZvclZhbHVlPy5zdGFydHNXaXRoKCdAUCcpID8gcHJvcGVydHlGb3JWYWx1ZS5zdWJzdHJpbmcoMykgOiBwcm9wZXJ0eUZvclZhbHVlO1xuICAgICAgY29sdW1ucyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGtleTogJ3RydWUnLFxuICAgICAgICAgIHNldFByb3BlcnR5OiAnQXNzb2NpYXRlZCBwcm9wZXJ0eScsXG4gICAgICAgICAgdmFsdWU6IHZhbHVlUHJvcFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZGlzcGxheTogJ3RydWUnLFxuICAgICAgICAgIHByaW1hcnk6ICd0cnVlJyxcbiAgICAgICAgICB1c2VGb3JTZWFyY2g6IHRydWUsXG4gICAgICAgICAgdmFsdWU6IGRpc3BsYXlQcm9wXG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgfVxuXG4gICAgY29sdW1ucyA9IHByZVByb2Nlc3NDb2x1bW5zKGNvbHVtbnMpIHx8IFtdO1xuICAgIGlmICghdGhpcy5kaXNwbGF5TW9kZSQgJiYgbGlzdFR5cGUgIT09ICdhc3NvY2lhdGVkJyAmJiB0eXBlb2YgZGF0YXNvdXJjZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuZ2V0RGF0YShkYXRhc291cmNlLCBwYXJhbWV0ZXJzLCBjb2x1bW5zLCBjb250ZXh0LCBsaXN0VHlwZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RGF0YShkYXRhU291cmNlLCBwYXJhbWV0ZXJzLCBjb2x1bW5zLCBjb250ZXh0LCBsaXN0VHlwZSkge1xuICAgIGNvbnN0IGRhdGFDb25maWc6IGFueSA9IHtcbiAgICAgIGNvbHVtbnMsXG4gICAgICBkYXRhU291cmNlLFxuICAgICAgZGVmZXJEYXRhc291cmNlOiB0cnVlLFxuICAgICAgbGlzdFR5cGUsXG4gICAgICBwYXJhbWV0ZXJzLFxuICAgICAgbWF0Y2hQb3NpdGlvbjogJ2NvbnRhaW5zJyxcbiAgICAgIG1heFJlc3VsdHNEaXNwbGF5OiAnNTAwMCcsXG4gICAgICBjYWNoZUxpZmVTcGFuOiAnZm9ybSdcbiAgICB9O1xuICAgIFBDb3JlLmdldERhdGFBcGkoKVxuICAgICAgLmluaXQoZGF0YUNvbmZpZywgY29udGV4dClcbiAgICAgIC50aGVuKChkYXRhQXBpT2JqOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3Qgb3B0aW9uc0RhdGE6IGFueVtdID0gW107XG4gICAgICAgIGNvbnN0IGRpc3BsYXlDb2x1bW4gPSBnZXREaXNwbGF5RmllbGRzTWV0YURhdGEoY29sdW1ucyk7XG4gICAgICAgIGRhdGFBcGlPYmo/LmZldGNoRGF0YSgnJykudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgcmVzcG9uc2UuZGF0YT8uZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IGVsZW1lbnRbZGlzcGxheUNvbHVtbi5wcmltYXJ5XT8udG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGNvbnN0IG9iaiA9IHtcbiAgICAgICAgICAgICAga2V5OiBlbGVtZW50W2Rpc3BsYXlDb2x1bW4ua2V5XSB8fCBlbGVtZW50LnB5R1VJRCxcbiAgICAgICAgICAgICAgdmFsdWU6IHZhbFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIG9wdGlvbnNEYXRhLnB1c2gob2JqKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBvcHRpb25zRGF0YT8udW5zaGlmdCh7IGtleTogJ1NlbGVjdCcsIHZhbHVlOiB0aGlzLnBDb25uJC5nZXRMb2NhbGl6ZWRWYWx1ZSgnU2VsZWN0Li4uJywgJycsICcnKSB9KTtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMkID0gb3B0aW9uc0RhdGE7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBpc1NlbGVjdGVkKGJ1dHRvblZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZSQgPT09IGJ1dHRvblZhbHVlO1xuICB9XG5cbiAgZmllbGRPbkNoYW5nZShldmVudDogYW55KSB7XG4gICAgaWYgKGV2ZW50Py52YWx1ZSA9PT0gJ1NlbGVjdCcpIHtcbiAgICAgIGV2ZW50LnZhbHVlID0gJyc7XG4gICAgfVxuICAgIGhhbmRsZUV2ZW50KHRoaXMuYWN0aW9uc0FwaSwgJ2NoYW5nZU5ibHVyJywgdGhpcy5wcm9wTmFtZSwgZXZlbnQudmFsdWUpO1xuICAgIGlmICh0aGlzLmNvbmZpZ1Byb3BzJD8ub25SZWNvcmRDaGFuZ2UpIHtcbiAgICAgIHRoaXMuY29uZmlnUHJvcHMkLm9uUmVjb3JkQ2hhbmdlKGV2ZW50KTtcbiAgICB9XG4gICAgdGhpcy5wQ29ubiQuY2xlYXJFcnJvck1lc3NhZ2VzKHtcbiAgICAgIHByb3BlcnR5OiB0aGlzLnByb3BOYW1lXG4gICAgfSk7XG4gIH1cblxuICBnZXRMb2NhbGl6ZWRPcHRpb25WYWx1ZShvcHQ6IElPcHRpb24pIHtcbiAgICByZXR1cm4gdGhpcy5wQ29ubiQuZ2V0TG9jYWxpemVkVmFsdWUoXG4gICAgICBvcHQudmFsdWUsXG4gICAgICB0aGlzLmxvY2FsZVBhdGgsXG4gICAgICB0aGlzLnBDb25uJC5nZXRMb2NhbGVSdWxlTmFtZUZyb21LZXlzKHRoaXMubG9jYWxlQ2xhc3MsIHRoaXMubG9jYWxlQ29udGV4dCwgdGhpcy5sb2NhbGVOYW1lKVxuICAgICk7XG4gIH1cblxuICBnZXRFcnJvck1lc3NhZ2UoKSB7XG4gICAgbGV0IGVyck1lc3NhZ2UgPSAnJztcblxuICAgIC8vIGxvb2sgZm9yIHZhbGlkYXRpb24gbWVzc2FnZXMgZm9yIGpzb24sIHByZS1kZWZpbmVkIG9yIGp1c3QgYW4gZXJyb3IgcHVzaGVkIGZyb20gd29ya2l0ZW0gKDQwMClcbiAgICBpZiAodGhpcy5maWVsZENvbnRyb2wuaGFzRXJyb3IoJ21lc3NhZ2UnKSkge1xuICAgICAgZXJyTWVzc2FnZSA9IHRoaXMuYW5ndWxhclBDb25uZWN0RGF0YS52YWxpZGF0ZU1lc3NhZ2UgPz8gJyc7XG4gICAgICByZXR1cm4gZXJyTWVzc2FnZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZmllbGRDb250cm9sLmhhc0Vycm9yKCdyZXF1aXJlZCcpKSB7XG4gICAgICBlcnJNZXNzYWdlID0gJ1lvdSBtdXN0IGVudGVyIGEgdmFsdWUnO1xuICAgIH0gZWxzZSBpZiAodGhpcy5maWVsZENvbnRyb2wuZXJyb3JzKSB7XG4gICAgICBlcnJNZXNzYWdlID0gdGhpcy5maWVsZENvbnRyb2wuZXJyb3JzLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVyck1lc3NhZ2U7XG4gIH1cbn1cbiIsIjxkaXYgKm5nSWY9XCJkaXNwbGF5TW9kZSQ7IGVsc2Ugbm9EaXNwbGF5TW9kZVwiPlxuICA8Y29tcG9uZW50LW1hcHBlclxuICAgICpuZ0lmPVwiYlZpc2libGUkICE9PSBmYWxzZVwiXG4gICAgbmFtZT1cIkZpZWxkVmFsdWVMaXN0XCJcbiAgICBbcHJvcHNdPVwieyBsYWJlbCQsIHZhbHVlJDogdGhpcy5sb2NhbGl6ZWRWYWx1ZSwgZGlzcGxheU1vZGUkIH1cIlxuICA+PC9jb21wb25lbnQtbWFwcGVyPlxuPC9kaXY+XG48bmctdGVtcGxhdGUgI25vRGlzcGxheU1vZGU+XG4gIDxkaXYgKm5nSWY9XCIhYlJlYWRvbmx5JCAmJiBiSGFzRm9ybSQ7IGVsc2Ugbm9FZGl0XCI+XG4gICAgPGRpdiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cCRcIiAqbmdJZj1cImJWaXNpYmxlJFwiPlxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwicHNkay1mdWxsLXdpZHRoXCIgc3Vic2NyaXB0U2l6aW5nPVwiZHluYW1pY1wiIFtoaW50TGFiZWxdPVwiaGVscGVyVGV4dFwiPlxuICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZSRcIlxuICAgICAgICAgIFtyZXF1aXJlZF09XCJiUmVxdWlyZWQkXCJcbiAgICAgICAgICBbYXR0ci5kYXRhLXRlc3QtaWRdPVwidGVzdElkXCJcbiAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cImZpZWxkT25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZpZWxkQ29udHJvbFwiXG4gICAgICAgID5cbiAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0IG9mIG9wdGlvbnMkXCIgW3ZhbHVlXT1cIm9wdC5rZXlcIj5cbiAgICAgICAgICAgIHt7IGdldExvY2FsaXplZE9wdGlvblZhbHVlKG9wdCkgfX1cbiAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgPG1hdC1sYWJlbD57eyBsYWJlbCQgfX08L21hdC1sYWJlbD5cbiAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cImZpZWxkQ29udHJvbC5pbnZhbGlkXCI+e3sgZ2V0RXJyb3JNZXNzYWdlKCkgfX08L21hdC1lcnJvcj5cbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjbm9FZGl0PlxuICA8Y29tcG9uZW50LW1hcHBlciAqbmdJZj1cImJWaXNpYmxlJCAhPT0gZmFsc2VcIiBuYW1lPVwiVGV4dFwiIFtwcm9wc109XCJ7IHBDb25uJCwgZm9ybWF0QXMkOiAndGV4dCcgfVwiPjwvY29tcG9uZW50LW1hcHBlcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
300
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci1zZGstY29tcG9uZW50cy9zcmMvbGliL19jb21wb25lbnRzL2ZpZWxkL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXItc2RrLWNvbXBvbmVudHMvc3JjL2xpYi9fY29tcG9uZW50cy9maWVsZC9kcm9wZG93bi9kcm9wZG93bi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBcUIsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQ25HLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFhLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hDLE9BQU8sT0FBTyxNQUFNLGlCQUFpQixDQUFDO0FBSXRDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQ3hHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7Ozs7Ozs7OztBQUczRCxTQUFTLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxFQUFFO0lBQ3BDLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztJQUN0QixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sQ0FB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Q0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQzNDLFVBQVUsR0FBRyx3QkFBd0IsQ0FBQztRQUN4QyxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3BDLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNuRCxDQUFDO1FBRUQsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQzsrR0ExU1UsaUJBQWlCO21HQUFqQixpQkFBaUIsZ0lDekU5Qiw0dUNBK0JBLDJiRHdDWSxZQUFZLDhUQUFFLG1CQUFtQixpOEJBQUUsa0JBQWtCLDJkQUFFLGVBQWUsa3ZCQUFFLGVBQWUsb0RBQW1CLHdCQUF3Qjs7NEZBRWpJLGlCQUFpQjtrQkFQN0IsU0FBUzsrQkFDRSxjQUFjLGNBR1osSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHdCQUF3QixDQUFDLENBQUM7NktBR3JJLE1BQU07c0JBQWQsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBDaGFuZ2VEZXRlY3RvclJlZiwgZm9yd2FyZFJlZiwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdE9wdGlvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgaW50ZXJ2YWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2Zhc3QtZGVlcC1lcXVhbCc7XG5pbXBvcnQgeyBBbmd1bGFyUENvbm5lY3REYXRhLCBBbmd1bGFyUENvbm5lY3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vX2JyaWRnZS9hbmd1bGFyLXBjb25uZWN0JztcbmltcG9ydCB7IERhdGFwYWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL19zZXJ2aWNlcy9kYXRhcGFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IFV0aWxzIH0gZnJvbSAnLi4vLi4vLi4vX2hlbHBlcnMvdXRpbHMnO1xuaW1wb3J0IHsgQ29tcG9uZW50TWFwcGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vX2JyaWRnZS9jb21wb25lbnQtbWFwcGVyL2NvbXBvbmVudC1tYXBwZXIuY29tcG9uZW50JztcbmltcG9ydCB7IGhhbmRsZUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vX2hlbHBlcnMvZXZlbnQtdXRpbCc7XG5pbXBvcnQgeyBQQ29ubkZpZWxkUHJvcHMgfSBmcm9tICcuLi8uLi8uLi9fdHlwZXMvUENvbm5Qcm9wcy5pbnRlcmZhY2UnO1xuXG5mdW5jdGlvbiBmbGF0dGVuUGFyYW1ldGVycyhwYXJhbXMgPSB7fSkge1xuICBjb25zdCBmbGF0UGFyYW1zID0ge307XG4gIE9iamVjdC5rZXlzKHBhcmFtcykuZm9yRWFjaChrZXkgPT4ge1xuICAgIGNvbnN0IHsgbmFtZSwgdmFsdWU6IHRoZVZhbCB9ID0gcGFyYW1zW2tleV07XG4gICAgZmxhdFBhcmFtc1tuYW1lXSA9IHRoZVZhbDtcbiAgfSk7XG5cbiAgcmV0dXJuIGZsYXRQYXJhbXM7XG59XG5cbmZ1bmN0aW9uIHByZVByb2Nlc3NDb2x1bW5zKGNvbHVtbkxpc3QpIHtcbiAgcmV0dXJuIGNvbHVtbkxpc3QubWFwKGNvbCA9PiB7XG4gICAgY29uc3QgdGVtcENvbE9iaiA9IHsgLi4uY29sIH07XG4gICAgdGVtcENvbE9iai52YWx1ZSA9IGNvbC52YWx1ZSAmJiBjb2wudmFsdWUuc3RhcnRzV2l0aCgnLicpID8gY29sLnZhbHVlLnN1YnN0cmluZygxKSA6IGNvbC52YWx1ZTtcbiAgICByZXR1cm4gdGVtcENvbE9iajtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldERpc3BsYXlGaWVsZHNNZXRhRGF0YShjb2x1bW5MaXN0KSB7XG4gIGNvbnN0IGRpc3BsYXlDb2x1bW5zID0gY29sdW1uTGlzdC5maWx0ZXIoY29sID0+IGNvbC5kaXNwbGF5ID09PSAndHJ1ZScpO1xuICBjb25zdCBtZXRhRGF0YU9iajogYW55ID0geyBrZXk6ICcnLCBwcmltYXJ5OiAnJywgc2Vjb25kYXJ5OiBbXSB9O1xuICBjb25zdCBrZXlDb2wgPSBjb2x1bW5MaXN0LmZpbHRlcihjb2wgPT4gY29sLmtleSA9PT0gJ3RydWUnKTtcbiAgbWV0YURhdGFPYmoua2V5ID0ga2V5Q29sLmxlbmd0aCA+IDAgPyBrZXlDb2xbMF0udmFsdWUgOiAnYXV0byc7XG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBkaXNwbGF5Q29sdW1ucy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBpZiAoZGlzcGxheUNvbHVtbnNbaW5kZXhdLnByaW1hcnkgPT09ICd0cnVlJykge1xuICAgICAgbWV0YURhdGFPYmoucHJpbWFyeSA9IGRpc3BsYXlDb2x1bW5zW2luZGV4XS52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWV0YURhdGFPYmouc2Vjb25kYXJ5LnB1c2goZGlzcGxheUNvbHVtbnNbaW5kZXhdLnZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG1ldGFEYXRhT2JqO1xufVxuXG5pbnRlcmZhY2UgSU9wdGlvbiB7XG4gIGtleTogc3RyaW5nO1xuICB2YWx1ZTogc3RyaW5nO1xufVxuXG4vLyBDYW4ndCB1c2UgRHJvcGRvd25Qcm9wcyB3aXRoIDguMjMgdW50aWwgZ2V0TG9jYWxlUnVsZU5hbWVGcm9tS2V5cyBpcyBOT1QgcHJpdmF0ZVxuaW50ZXJmYWNlIERyb3Bkb3duUHJvcHMgZXh0ZW5kcyBQQ29ubkZpZWxkUHJvcHMge1xuICAvLyBJZiBhbnksIGVudGVyIGFkZGl0aW9uYWwgcHJvcHMgdGhhdCBvbmx5IGV4aXN0IG9uIERyb3Bkb3duIGhlcmVcbiAgZGF0YXNvdXJjZT86IGFueVtdO1xuICBvblJlY29yZENoYW5nZT86IGFueTtcbiAgZmllbGRNZXRhZGF0YT86IGFueTtcbiAgbGlzdFR5cGU/OiBzdHJpbmc7XG4gIGNvbHVtbnM/OiBhbnlbXTtcbiAgZGVmZXJEYXRhc291cmNlPzogYm9vbGVhbjtcbiAgZGF0YXNvdXJjZU1ldGFkYXRhPzogYW55O1xuICBwYXJhbWV0ZXJzPzogYW55O1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZHJvcGRvd24nLFxuICB0ZW1wbGF0ZVVybDogJy4vZHJvcGRvd24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kcm9wZG93bi5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBNYXRGb3JtRmllbGRNb2R1bGUsIE1hdFNlbGVjdE1vZHVsZSwgTWF0T3B0aW9uTW9kdWxlLCBmb3J3YXJkUmVmKCgpID0+IENvbXBvbmVudE1hcHBlckNvbXBvbmVudCldXG59KVxuZXhwb3J0IGNsYXNzIERyb3Bkb3duQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBwQ29ubiQ6IHR5cGVvZiBQQ29ubmVjdDtcbiAgQElucHV0KCkgZm9ybUdyb3VwJDogRm9ybUdyb3VwO1xuXG4gIC8vIFVzZWQgd2l0aCBBbmd1bGFyUENvbm5lY3RcbiAgYW5ndWxhclBDb25uZWN0RGF0YTogQW5ndWxhclBDb25uZWN0RGF0YSA9IHt9O1xuICBjb25maWdQcm9wcyQ6IERyb3Bkb3duUHJvcHM7XG5cbiAgbGFiZWwkID0gJyc7XG4gIHZhbHVlJCA9ICcnO1xuICBiUmVxdWlyZWQkID0gZmFsc2U7XG4gIGJSZWFkb25seSQgPSBmYWxzZTtcbiAgYkRpc2FibGVkJCA9IGZhbHNlO1xuICBiVmlzaWJsZSQgPSB0cnVlO1xuICBkaXNwbGF5TW9kZSQ/OiBzdHJpbmcgPSAnJztcbiAgY29udHJvbE5hbWUkOiBzdHJpbmc7XG4gIGJIYXNGb3JtJCA9IHRydWU7XG4gIG9wdGlvbnMkOiBJT3B0aW9uW107XG4gIGNvbXBvbmVudFJlZmVyZW5jZSA9ICcnO1xuICB0ZXN0SWQgPSAnJztcbiAgaGVscGVyVGV4dDogc3RyaW5nO1xuICBoaWRlTGFiZWw6IGFueTtcbiAgdGhlRGF0YXNvdXJjZTogYW55W10gfCBudWxsO1xuICBmaWVsZENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycsIG51bGwpO1xuICBmaWVsZE1ldGFkYXRhOiBhbnlbXTtcbiAgbG9jYWxlQ29udGV4dCA9ICcnO1xuICBsb2NhbGVDbGFzcyA9ICcnO1xuICBsb2NhbGVOYW1lID0gJyc7XG4gIGxvY2FsZVBhdGggPSAnJztcbiAgbG9jYWxpemVkVmFsdWUgPSAnJztcbiAgYWN0aW9uc0FwaTogT2JqZWN0O1xuICBwcm9wTmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYW5ndWxhclBDb25uZWN0OiBBbmd1bGFyUENvbm5lY3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgdXRpbHM6IFV0aWxzLFxuICAgIHByaXZhdGUgZGF0YVBhZ2VTZXJ2aWNlOiBEYXRhcGFnZVNlcnZpY2VcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIEZpcnN0IHRoaW5nIGluIGluaXRpYWxpemF0aW9uIGlzIHJlZ2lzdGVyaW5nIGFuZCBzdWJzY3JpYmluZyB0byB0aGUgQW5ndWxhclBDb25uZWN0IHNlcnZpY2VcbiAgICB0aGlzLmFuZ3VsYXJQQ29ubmVjdERhdGEgPSB0aGlzLmFuZ3VsYXJQQ29ubmVjdC5yZWdpc3RlckFuZFN1YnNjcmliZUNvbXBvbmVudCh0aGlzLCB0aGlzLm9uU3RhdGVDaGFuZ2UpO1xuICAgIHRoaXMuY29udHJvbE5hbWUkID0gdGhpcy5hbmd1bGFyUENvbm5lY3QuZ2V0Q29tcG9uZW50SUQodGhpcyk7XG5cbiAgICAvLyBUaGVuLCBjb250aW51ZSBvbiB3aXRoIG90aGVyIGluaXRpYWxpemF0aW9uXG5cbiAgICAvLyBjYWxsIHVwZGF0ZVNlbGYgd2hlbiBpbml0aWFsaXppbmdcbiAgICB0aGlzLmNoZWNrQW5kVXBkYXRlKCk7XG4gICAgLy8gdGhpcyBzaG91bGQgZ2V0IGNhbGxlZCBhZmVyIGNoZWNrQW5kVXBkYXRlXG4gICAgdGhpcy5nZXREYXRhcGFnZURhdGEoKTtcblxuICAgIGlmICh0aGlzLmZvcm1Hcm91cCQpIHtcbiAgICAgIC8vIGFkZCBjb250cm9sIHRvIGZvcm1Hcm91cFxuICAgICAgdGhpcy5mb3JtR3JvdXAkLmFkZENvbnRyb2wodGhpcy5jb250cm9sTmFtZSQsIHRoaXMuZmllbGRDb250cm9sKTtcbiAgICAgIHRoaXMuZmllbGRDb250cm9sLnNldFZhbHVlKHRoaXMudmFsdWUkKTtcbiAgICAgIHRoaXMuYkhhc0Zvcm0kID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5iUmVhZG9ubHkkID0gdHJ1ZTtcbiAgICAgIHRoaXMuYkhhc0Zvcm0kID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgc2V0IG9wdGlvbnMob3B0aW9uczogSU9wdGlvbltdKSB7XG4gICAgdGhpcy5vcHRpb25zJCA9IG9wdGlvbnM7XG4gICAgaWYgKHRoaXMuZGlzcGxheU1vZGUkKSB7XG4gICAgICB0aGlzLnZhbHVlJCA9IHRoaXMub3B0aW9ucyQ/LmZpbmQob3B0aW9uID0+IG9wdGlvbi5rZXkgPT09IHRoaXMudmFsdWUkKT8udmFsdWUgfHwgdGhpcy52YWx1ZSQ7XG4gICAgICB0aGlzLmxvY2FsaXplZFZhbHVlID0gdGhpcy5wQ29ubiQuZ2V0TG9jYWxpemVkVmFsdWUoXG4gICAgICAgIHRoaXMudmFsdWUkID09PSAnU2VsZWN0Li4uJyA/ICcnIDogdGhpcy52YWx1ZSQsXG4gICAgICAgIHRoaXMubG9jYWxlUGF0aCxcbiAgICAgICAgdGhpcy5wQ29ubiQuZ2V0TG9jYWxlUnVsZU5hbWVGcm9tS2V5cyh0aGlzLmxvY2FsZUNsYXNzLCB0aGlzLmxvY2FsZUNvbnRleHQsIHRoaXMubG9jYWxlTmFtZSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZm9ybUdyb3VwJCkge1xuICAgICAgdGhpcy5mb3JtR3JvdXAkLnJlbW92ZUNvbnRyb2wodGhpcy5jb250cm9sTmFtZSQpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmFuZ3VsYXJQQ29ubmVjdERhdGEudW5zdWJzY3JpYmVGbikge1xuICAgICAgdGhpcy5hbmd1bGFyUENvbm5lY3REYXRhLnVuc3Vic2NyaWJlRm4oKTtcbiAgICB9XG4gIH1cblxuICAvLyBDYWxsYmFjayBwYXNzZWQgd2hlbiBzdWJzY3JpYmluZyB0byBzdG9yZSBjaGFuZ2VcbiAgb25TdGF0ZUNoYW5nZSgpIHtcbiAgICB0aGlzLmNoZWNrQW5kVXBkYXRlKCk7XG4gIH1cblxuICBjaGVja0FuZFVwZGF0ZSgpIHtcbiAgICAvLyBTaG91bGQgYWx3YXlzIGNoZWNrIHRoZSBicmlkZ2UgdG8gc2VlIGlmIHRoZSBjb21wb25lbnQgc2hvdWxkXG4gICAgLy8gdXBkYXRlIGl0c2VsZiAocmUtcmVuZGVyKVxuICAgIGNvbnN0IGJVcGRhdGVTZWxmID0gdGhpcy5hbmd1bGFyUENvbm5lY3Quc2hvdWxkQ29tcG9uZW50VXBkYXRlKHRoaXMpO1xuXG4gICAgLy8gT05MWSBjYWxsIHVwZGF0ZVNlbGYgd2hlbiB0aGUgY29tcG9uZW50IHNob3VsZCB1cGRhdGVcbiAgICBpZiAoYlVwZGF0ZVNlbGYpIHtcbiAgICAgIHRoaXMudXBkYXRlU2VsZigpO1xuICAgIH1cbiAgfVxuXG4gIC8vIHVwZGF0ZVNlbGZcbiAgdXBkYXRlU2VsZigpOiB2b2lkIHtcbiAgICAvLyBtb3ZlZCB0aGlzIGZyb20gbmdPbkluaXQoKSBhbmQgY2FsbCB0aGlzIGZyb20gdGhlcmUgaW5zdGVhZC4uLlxuICAgIHRoaXMuY29uZmlnUHJvcHMkID0gdGhpcy5wQ29ubiQucmVzb2x2ZUNvbmZpZ1Byb3BzKHRoaXMucENvbm4kLmdldENvbmZpZ1Byb3BzKCkpIGFzIERyb3Bkb3duUHJvcHM7XG4gICAgaWYgKHRoaXMuY29uZmlnUHJvcHMkLnZhbHVlICE9IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy52YWx1ZSQgPSB0aGlzLmNvbmZpZ1Byb3BzJC52YWx1ZTtcbiAgICB9XG5cbiAgICB0aGlzLnRlc3RJZCA9IHRoaXMuY29uZmlnUHJvcHMkLnRlc3RJZDtcbiAgICB0aGlzLmRpc3BsYXlNb2RlJCA9IHRoaXMuY29uZmlnUHJvcHMkLmRpc3BsYXlNb2RlO1xuICAgIHRoaXMubGFiZWwkID0gdGhpcy5jb25maWdQcm9wcyQubGFiZWw7XG4gICAgdGhpcy5oZWxwZXJUZXh0ID0gdGhpcy5jb25maWdQcm9wcyQuaGVscGVyVGV4dDtcbiAgICB0aGlzLmhpZGVMYWJlbCA9IHRoaXMuY29uZmlnUHJvcHMkLmhpZGVMYWJlbDtcbiAgICBjb25zdCBkYXRhc291cmNlID0gdGhpcy5jb25maWdQcm9wcyQuZGF0YXNvdXJjZTtcbiAgICAvLyB0aW1lb3V0IGFuZCBkZXRlY3RDaGFuZ2VzIHRvIGF2b2lkIEV4cHJlc3Npb25DaGFuZ2VkQWZ0ZXJJdEhhc0JlZW5DaGVja2VkRXJyb3JcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNvbmZpZ1Byb3BzJC5yZXF1aXJlZCAhPSBudWxsKSB7XG4gICAgICAgIHRoaXMuYlJlcXVpcmVkJCA9IHRoaXMudXRpbHMuZ2V0Qm9vbGVhblZhbHVlKHRoaXMuY29uZmlnUHJvcHMkLnJlcXVpcmVkKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0pO1xuXG4gICAgaWYgKCFpc0VxdWFsKGRhdGFzb3VyY2UsIHRoaXMudGhlRGF0YXNvdXJjZSkpIHtcbiAgICAgIC8vIGluYm91bmQgZGF0YXNvdXJjZSBpcyBkaWZmZXJlbnQsIHNvIHVwZGF0ZSB0aGVEYXRhc291cmNlXG4gICAgICB0aGlzLnRoZURhdGFzb3VyY2UgPSBkYXRhc291cmNlIHx8IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnUHJvcHMkLnZpc2liaWxpdHkgIT0gbnVsbCkge1xuICAgICAgdGhpcy5iVmlzaWJsZSQgPSB0aGlzLnV0aWxzLmdldEJvb2xlYW5WYWx1ZSh0aGlzLmNvbmZpZ1Byb3BzJC52aXNpYmlsaXR5KTtcbiAgICB9XG5cbiAgICAvLyBkaXNhYmxlZFxuICAgIGlmICh0aGlzLmNvbmZpZ1Byb3BzJC5kaXNhYmxlZCAhPSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuYkRpc2FibGVkJCA9IHRoaXMudXRpbHMuZ2V0Qm9vbGVhblZhbHVlKHRoaXMuY29uZmlnUHJvcHMkLmRpc2FibGVkKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5iRGlzYWJsZWQkKSB7XG4gICAgICB0aGlzLmZpZWxkQ29udHJvbC5kaXNhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmllbGRDb250cm9sLmVuYWJsZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvbmZpZ1Byb3BzJC5yZWFkT25seSAhPSBudWxsKSB7XG4gICAgICB0aGlzLmJSZWFkb25seSQgPSB0aGlzLnV0aWxzLmdldEJvb2xlYW5WYWx1ZSh0aGlzLmNvbmZpZ1Byb3BzJC5yZWFkT25seSk7XG4gICAgfVxuXG4gICAgdGhpcy5jb21wb25lbnRSZWZlcmVuY2UgPSB0aGlzLnBDb25uJC5nZXRTdGF0ZVByb3BzKCkudmFsdWU7XG5cbiAgICBpZiAodGhpcy52YWx1ZSQgPT09ICcnICYmICF0aGlzLmJSZWFkb25seSQpIHtcbiAgICAgIHRoaXMudmFsdWUkID0gJ1NlbGVjdCc7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudGhlRGF0YXNvdXJjZSkge1xuICAgICAgY29uc3Qgb3B0aW9uc0xpc3QgPSBbLi4udGhpcy51dGlscy5nZXRPcHRpb25MaXN0KHRoaXMuY29uZmlnUHJvcHMkLCB0aGlzLnBDb25uJC5nZXREYXRhT2JqZWN0KCkpXTtcbiAgICAgIG9wdGlvbnNMaXN0Py51bnNoaWZ0KHsga2V5OiAnU2VsZWN0JywgdmFsdWU6IHRoaXMucENvbm4kLmdldExvY2FsaXplZFZhbHVlKCdTZWxlY3QuLi4nLCAnJywgJycpIH0pO1xuICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc0xpc3Q7XG4gICAgfVxuXG4gICAgdGhpcy5hY3Rpb25zQXBpID0gdGhpcy5wQ29ubiQuZ2V0QWN0aW9uc0FwaSgpO1xuXG4gICAgdGhpcy5wcm9wTmFtZSA9IHRoaXMucENvbm4kLmdldFN0YXRlUHJvcHMoKS52YWx1ZTtcbiAgICBjb25zdCBjbGFzc05hbWUgPSB0aGlzLnBDb25uJC5nZXRDYXNlSW5mbygpLmdldENsYXNzTmFtZSgpO1xuICAgIGNvbnN0IHJlZk5hbWUgPSB0aGlzLnByb3BOYW1lPy5zbGljZSh0aGlzLnByb3BOYW1lLmxhc3RJbmRleE9mKCcuJykgKyAxKTtcblxuICAgIHRoaXMuZmllbGRNZXRhZGF0YSA9IHRoaXMuY29uZmlnUHJvcHMkLmZpZWxkTWV0YWRhdGE7XG4gICAgY29uc3QgbWV0YURhdGEgPSBBcnJheS5pc0FycmF5KHRoaXMuZmllbGRNZXRhZGF0YSkgPyB0aGlzLmZpZWxkTWV0YWRhdGEuZmlsdGVyKGZpZWxkID0+IGZpZWxkPy5jbGFzc0lEID09PSBjbGFzc05hbWUpWzBdIDogdGhpcy5maWVsZE1ldGFkYXRhO1xuXG4gICAgbGV0IGRpc3BsYXlOYW1lID0gbWV0YURhdGE/LmRhdGFzb3VyY2U/LnByb3BlcnR5Rm9yRGlzcGxheVRleHQ7XG4gICAgZGlzcGxheU5hbWUgPSBkaXNwbGF5TmFtZT8uc2xpY2UoZGlzcGxheU5hbWUubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIHRoaXMubG9jYWxlQ29udGV4dCA9IG1ldGFEYXRhPy5kYXRhc291cmNlPy50YWJsZVR5cGUgPT09ICdEYXRhUGFnZScgPyAnZGF0YXBhZ2UnIDogJ2Fzc29jaWF0ZWQnO1xuICAgIHRoaXMubG9jYWxlQ2xhc3MgPSB0aGlzLmxvY2FsZUNvbnRleHQgPT09ICdkYXRhcGFnZScgPyAnQGJhc2VjbGFzcycgOiBjbGFzc05hbWU7XG4gICAgdGhpcy5sb2NhbGVOYW1lID0gdGhpcy5sb2NhbGVDb250ZXh0ID09PSAnZGF0YXBhZ2UnID8gbWV0YURhdGE/LmRhdGFzb3VyY2U/Lm5hbWUgOiByZWZOYW1lO1xuICAgIHRoaXMubG9jYWxlUGF0aCA9IHRoaXMubG9jYWxlQ29udGV4dCA9PT0gJ2RhdGFwYWdlJyA/IGRpc3BsYXlOYW1lIDogdGhpcy5sb2NhbGVOYW1lO1xuXG4gICAgdGhpcy5sb2NhbGl6ZWRWYWx1ZSA9IHRoaXMucENvbm4kLmdldExvY2FsaXplZFZhbHVlKFxuICAgICAgdGhpcy52YWx1ZSQsXG4gICAgICB0aGlzLmxvY2FsZVBhdGgsXG4gICAgICB0aGlzLnBDb25uJC5nZXRMb2NhbGVSdWxlTmFtZUZyb21LZXlzKHRoaXMubG9jYWxlQ2xhc3MsIHRoaXMubG9jYWxlQ29udGV4dCwgdGhpcy5sb2NhbGVOYW1lKVxuICAgICk7XG5cbiAgICB0aGlzLmxvY2FsaXplZFZhbHVlID0gdGhpcy5vcHRpb25zJD8uZmluZChvcHQgPT4gb3B0LmtleSA9PT0gdGhpcy52YWx1ZSQpPy52YWx1ZSB8fCB0aGlzLmxvY2FsaXplZFZhbHVlO1xuXG4gICAgLy8gdHJpZ2dlciBkaXNwbGF5IG9mIGVycm9yIG1lc3NhZ2Ugd2l0aCBmaWVsZCBjb250cm9sXG4gICAgaWYgKHRoaXMuYW5ndWxhclBDb25uZWN0RGF0YS52YWxpZGF0ZU1lc3NhZ2UgIT0gbnVsbCAmJiB0aGlzLmFuZ3VsYXJQQ29ubmVjdERhdGEudmFsaWRhdGVNZXNzYWdlICE9ICcnKSB7XG4gICAgICBjb25zdCB0aW1lciA9IGludGVydmFsKDEwMCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5maWVsZENvbnRyb2wuc2V0RXJyb3JzKHsgbWVzc2FnZTogdHJ1ZSB9KTtcbiAgICAgICAgdGhpcy5maWVsZENvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xuXG4gICAgICAgIHRpbWVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBnZXREYXRhcGFnZURhdGEoKSB7XG4gICAgY29uc3QgY29uZmlnUHJvcHMgPSB0aGlzLnBDb25uJC5nZXRDb25maWdQcm9wcygpIGFzIERyb3Bkb3duUHJvcHM7XG4gICAgbGV0IHsgbGlzdFR5cGUsIHBhcmFtZXRlcnMsIGRhdGFzb3VyY2UgPSBbXSwgY29sdW1ucyA9IFtdIH0gPSBjb25maWdQcm9wcztcbiAgICBjb25zdCB7IGRlZmVyRGF0YXNvdXJjZSwgZGF0YXNvdXJjZU1ldGFkYXRhIH0gPSBjb25maWdQcm9wcztcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5wQ29ubiQuZ2V0Q29udGV4dE5hbWUoKTtcbiAgICBpZiAoZGVmZXJEYXRhc291cmNlICYmIGRhdGFzb3VyY2VNZXRhZGF0YT8uZGF0YXNvdXJjZT8ubmFtZSkge1xuICAgICAgbGlzdFR5cGUgPSAnZGF0YXBhZ2UnO1xuICAgICAgZGF0YXNvdXJjZSA9IGRhdGFzb3VyY2VNZXRhZGF0YS5kYXRhc291cmNlLm5hbWU7XG4gICAgICBjb25zdCB7IHBhcmFtZXRlcnM6IGRhdGFTb3VyY2VQYXJhbWV0ZXJzLCBwcm9wZXJ0eUZvckRpc3BsYXlUZXh0LCBwcm9wZXJ0eUZvclZhbHVlIH0gPSBkYXRhc291cmNlTWV0YWRhdGEuZGF0YXNvdXJjZTtcbiAgICAgIHBhcmFtZXRlcnMgPSBmbGF0dGVuUGFyYW1ldGVycyhkYXRhU291cmNlUGFyYW1ldGVycyk7XG4gICAgICBjb25zdCBkaXNwbGF5UHJvcCA9IHByb3BlcnR5Rm9yRGlzcGxheVRleHQ/LnN0YXJ0c1dpdGgoJ0BQJykgPyBwcm9wZXJ0eUZvckRpc3BsYXlUZXh0LnN1YnN0cmluZygzKSA6IHByb3BlcnR5Rm9yRGlzcGxheVRleHQ7XG4gICAgICBjb25zdCB2YWx1ZVByb3AgPSBwcm9wZXJ0eUZvclZhbHVlPy5zdGFydHNXaXRoKCdAUCcpID8gcHJvcGVydHlGb3JWYWx1ZS5zdWJzdHJpbmcoMykgOiBwcm9wZXJ0eUZvclZhbHVlO1xuICAgICAgY29sdW1ucyA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGtleTogJ3RydWUnLFxuICAgICAgICAgIHNldFByb3BlcnR5OiAnQXNzb2NpYXRlZCBwcm9wZXJ0eScsXG4gICAgICAgICAgdmFsdWU6IHZhbHVlUHJvcFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZGlzcGxheTogJ3RydWUnLFxuICAgICAgICAgIHByaW1hcnk6ICd0cnVlJyxcbiAgICAgICAgICB1c2VGb3JTZWFyY2g6IHRydWUsXG4gICAgICAgICAgdmFsdWU6IGRpc3BsYXlQcm9wXG4gICAgICAgIH1cbiAgICAgIF07XG4gICAgfVxuXG4gICAgY29sdW1ucyA9IHByZVByb2Nlc3NDb2x1bW5zKGNvbHVtbnMpIHx8IFtdO1xuICAgIGlmIChsaXN0VHlwZSAhPT0gJ2Fzc29jaWF0ZWQnICYmIHR5cGVvZiBkYXRhc291cmNlID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5nZXREYXRhKGRhdGFzb3VyY2UsIHBhcmFtZXRlcnMsIGNvbHVtbnMsIGNvbnRleHQsIGxpc3RUeXBlKTtcbiAgICB9XG4gIH1cblxuICBnZXREYXRhKGRhdGFTb3VyY2UsIHBhcmFtZXRlcnMsIGNvbHVtbnMsIGNvbnRleHQsIGxpc3RUeXBlKSB7XG4gICAgY29uc3QgZGF0YUNvbmZpZzogYW55ID0ge1xuICAgICAgY29sdW1ucyxcbiAgICAgIGRhdGFTb3VyY2UsXG4gICAgICBkZWZlckRhdGFzb3VyY2U6IHRydWUsXG4gICAgICBsaXN0VHlwZSxcbiAgICAgIHBhcmFtZXRlcnMsXG4gICAgICBtYXRjaFBvc2l0aW9uOiAnY29udGFpbnMnLFxuICAgICAgbWF4UmVzdWx0c0Rpc3BsYXk6ICc1MDAwJyxcbiAgICAgIGNhY2hlTGlmZVNwYW46ICdmb3JtJ1xuICAgIH07XG4gICAgUENvcmUuZ2V0RGF0YUFwaSgpXG4gICAgICAuaW5pdChkYXRhQ29uZmlnLCBjb250ZXh0KVxuICAgICAgLnRoZW4oKGRhdGFBcGlPYmo6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBvcHRpb25zRGF0YTogYW55W10gPSBbXTtcbiAgICAgICAgY29uc3QgZGlzcGxheUNvbHVtbiA9IGdldERpc3BsYXlGaWVsZHNNZXRhRGF0YShjb2x1bW5zKTtcbiAgICAgICAgZGF0YUFwaU9iaj8uZmV0Y2hEYXRhKCcnKS50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgICByZXNwb25zZS5kYXRhPy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsID0gZWxlbWVudFtkaXNwbGF5Q29sdW1uLnByaW1hcnldPy50b1N0cmluZygpO1xuICAgICAgICAgICAgY29uc3Qgb2JqID0ge1xuICAgICAgICAgICAgICBrZXk6IGVsZW1lbnRbZGlzcGxheUNvbHVtbi5rZXldIHx8IGVsZW1lbnQucHlHVUlELFxuICAgICAgICAgICAgICB2YWx1ZTogdmFsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgb3B0aW9uc0RhdGEucHVzaChvYmopO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIG9wdGlvbnNEYXRhPy51bnNoaWZ0KHsga2V5OiAnU2VsZWN0JywgdmFsdWU6IHRoaXMucENvbm4kLmdldExvY2FsaXplZFZhbHVlKCdTZWxlY3QuLi4nLCAnJywgJycpIH0pO1xuICAgICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNEYXRhO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgaXNTZWxlY3RlZChidXR0b25WYWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWUkID09PSBidXR0b25WYWx1ZTtcbiAgfVxuXG4gIGZpZWxkT25DaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIGlmIChldmVudD8udmFsdWUgPT09ICdTZWxlY3QnKSB7XG4gICAgICBldmVudC52YWx1ZSA9ICcnO1xuICAgIH1cbiAgICBoYW5kbGVFdmVudCh0aGlzLmFjdGlvbnNBcGksICdjaGFuZ2VOYmx1cicsIHRoaXMucHJvcE5hbWUsIGV2ZW50LnZhbHVlKTtcbiAgICBpZiAodGhpcy5jb25maWdQcm9wcyQ/Lm9uUmVjb3JkQ2hhbmdlKSB7XG4gICAgICB0aGlzLmNvbmZpZ1Byb3BzJC5vblJlY29yZENoYW5nZShldmVudCk7XG4gICAgfVxuICAgIHRoaXMucENvbm4kLmNsZWFyRXJyb3JNZXNzYWdlcyh7XG4gICAgICBwcm9wZXJ0eTogdGhpcy5wcm9wTmFtZVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0TG9jYWxpemVkT3B0aW9uVmFsdWUob3B0OiBJT3B0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMucENvbm4kLmdldExvY2FsaXplZFZhbHVlKFxuICAgICAgb3B0LnZhbHVlLFxuICAgICAgdGhpcy5sb2NhbGVQYXRoLFxuICAgICAgdGhpcy5wQ29ubiQuZ2V0TG9jYWxlUnVsZU5hbWVGcm9tS2V5cyh0aGlzLmxvY2FsZUNsYXNzLCB0aGlzLmxvY2FsZUNvbnRleHQsIHRoaXMubG9jYWxlTmFtZSlcbiAgICApO1xuICB9XG5cbiAgZ2V0RXJyb3JNZXNzYWdlKCkge1xuICAgIGxldCBlcnJNZXNzYWdlID0gJyc7XG5cbiAgICAvLyBsb29rIGZvciB2YWxpZGF0aW9uIG1lc3NhZ2VzIGZvciBqc29uLCBwcmUtZGVmaW5lZCBvciBqdXN0IGFuIGVycm9yIHB1c2hlZCBmcm9tIHdvcmtpdGVtICg0MDApXG4gICAgaWYgKHRoaXMuZmllbGRDb250cm9sLmhhc0Vycm9yKCdtZXNzYWdlJykpIHtcbiAgICAgIGVyck1lc3NhZ2UgPSB0aGlzLmFuZ3VsYXJQQ29ubmVjdERhdGEudmFsaWRhdGVNZXNzYWdlID8/ICcnO1xuICAgICAgcmV0dXJuIGVyck1lc3NhZ2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmZpZWxkQ29udHJvbC5oYXNFcnJvcigncmVxdWlyZWQnKSkge1xuICAgICAgZXJyTWVzc2FnZSA9ICdZb3UgbXVzdCBlbnRlciBhIHZhbHVlJztcbiAgICB9IGVsc2UgaWYgKHRoaXMuZmllbGRDb250cm9sLmVycm9ycykge1xuICAgICAgZXJyTWVzc2FnZSA9IHRoaXMuZmllbGRDb250cm9sLmVycm9ycy50b1N0cmluZygpO1xuICAgIH1cblxuICAgIHJldHVybiBlcnJNZXNzYWdlO1xuICB9XG59XG4iLCI8ZGl2ICpuZ0lmPVwiZGlzcGxheU1vZGUkOyBlbHNlIG5vRGlzcGxheU1vZGVcIj5cbiAgPGNvbXBvbmVudC1tYXBwZXJcbiAgICAqbmdJZj1cImJWaXNpYmxlJCAhPT0gZmFsc2VcIlxuICAgIG5hbWU9XCJGaWVsZFZhbHVlTGlzdFwiXG4gICAgW3Byb3BzXT1cInsgbGFiZWwkLCB2YWx1ZSQ6IHRoaXMubG9jYWxpemVkVmFsdWUsIGRpc3BsYXlNb2RlJCB9XCJcbiAgPjwvY29tcG9uZW50LW1hcHBlcj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNub0Rpc3BsYXlNb2RlPlxuICA8ZGl2ICpuZ0lmPVwiIWJSZWFkb25seSQgJiYgYkhhc0Zvcm0kOyBlbHNlIG5vRWRpdFwiPlxuICAgIDxkaXYgW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXAkXCIgKm5nSWY9XCJiVmlzaWJsZSRcIj5cbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInBzZGstZnVsbC13aWR0aFwiIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIiBbaGludExhYmVsXT1cImhlbHBlclRleHRcIj5cbiAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICBbdmFsdWVdPVwidmFsdWUkXCJcbiAgICAgICAgICBbcmVxdWlyZWRdPVwiYlJlcXVpcmVkJFwiXG4gICAgICAgICAgW2F0dHIuZGF0YS10ZXN0LWlkXT1cInRlc3RJZFwiXG4gICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJmaWVsZE9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmaWVsZENvbnRyb2xcIlxuICAgICAgICA+XG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdCBvZiBvcHRpb25zJFwiIFt2YWx1ZV09XCJvcHQua2V5XCI+XG4gICAgICAgICAgICB7eyBnZXRMb2NhbGl6ZWRPcHRpb25WYWx1ZShvcHQpIH19XG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgIDxtYXQtbGFiZWw+e3sgbGFiZWwkIH19PC9tYXQtbGFiZWw+XG4gICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJmaWVsZENvbnRyb2wuaW52YWxpZFwiPnt7IGdldEVycm9yTWVzc2FnZSgpIH19PC9tYXQtZXJyb3I+XG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI25vRWRpdD5cbiAgPGNvbXBvbmVudC1tYXBwZXIgKm5nSWY9XCJiVmlzaWJsZSQgIT09IGZhbHNlXCIgbmFtZT1cIlRleHRcIiBbcHJvcHNdPVwieyBwQ29ubiQsIGZvcm1hdEFzJDogJ3RleHQnIH1cIj48L2NvbXBvbmVudC1tYXBwZXI+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -151,10 +151,10 @@ export class EmailComponent {
151
151
  }
152
152
  return errMessage;
153
153
  }
154
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: EmailComponent, deps: [{ token: i1.AngularPConnectService }, { token: i0.ChangeDetectorRef }, { token: i2.Utils }], target: i0.ɵɵFactoryTarget.Component }); }
155
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: EmailComponent, isStandalone: true, selector: "app-email", inputs: { pConn$: "pConn$", formGroup$: "formGroup$" }, ngImport: i0, template: "<div *ngIf=\"displayMode$; else noDisplayMode\">\n <component-mapper *ngIf=\"bVisible$ !== false\" name=\"FieldValueList\" [props]=\"{ label$, value$, displayMode$ }\"></component-mapper>\n</div>\n<ng-template #noDisplayMode>\n <div *ngIf=\"!bReadonly$ && bHasForm$; else noEdit\">\n <div [formGroup]=\"formGroup$\" *ngIf=\"bVisible$\">\n <mat-form-field class=\"psdk-full-width\" subscriptSizing=\"dynamic\" [hintLabel]=\"helperText\">\n <mat-label>{{ label$ }}</mat-label>\n <input\n matInput\n [placeholder]=\"placeholder\"\n type=\"email\"\n [value]=\"value$\"\n [required]=\"bRequired$\"\n [formControl]=\"fieldControl\"\n [attr.data-test-id]=\"testId\"\n (change)=\"fieldOnChange($event)\"\n (blur)=\"fieldOnBlur($event)\"\n />\n <mat-error *ngIf=\"fieldControl.invalid\">{{ getErrorMessage() }}</mat-error>\n </mat-form-field>\n </div>\n </div>\n</ng-template>\n<ng-template #noEdit>\n <component-mapper *ngIf=\"bVisible$ !== false\" name=\"Text\" [props]=\"{ pConn$, formatAs$: 'text' }\"></component-mapper>\n</ng-template>\n", styles: [".psdk-full-width{width:100%}.psdk-label-readonly{font-size:1rem;display:block;transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.001px);-ms-transform:translateY(-1.28125em) scale(.75);width:133.33333%}.psdk-data-readonly{padding-top:.625rem;width:100%}::ng-deep .mat-mdc-form-field-infix{width:auto}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CommonModule) }, { kind: "directive", type: i0.forwardRef(() => i3.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: i0.forwardRef(() => ReactiveFormsModule) }, { kind: "directive", type: i0.forwardRef(() => i4.DefaultValueAccessor), selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i0.forwardRef(() => i4.NgControlStatus), selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i0.forwardRef(() => i4.NgControlStatusGroup), selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i0.forwardRef(() => i4.RequiredValidator), selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i0.forwardRef(() => i4.FormControlDirective), selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i0.forwardRef(() => i4.FormGroupDirective), selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatFormFieldModule) }, { kind: "component", type: i0.forwardRef(() => i5.MatFormField), selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i0.forwardRef(() => i5.MatLabel), selector: "mat-label" }, { kind: "directive", type: i0.forwardRef(() => i5.MatError), selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatInputModule) }, { kind: "directive", type: i0.forwardRef(() => i6.MatInput), selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i0.forwardRef(() => ComponentMapperComponent), selector: "component-mapper", inputs: ["name", "props", "errorMsg", "outputEvents", "parent"] }] }); }
154
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EmailComponent, deps: [{ token: i1.AngularPConnectService }, { token: i0.ChangeDetectorRef }, { token: i2.Utils }], target: i0.ɵɵFactoryTarget.Component }); }
155
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: EmailComponent, isStandalone: true, selector: "app-email", inputs: { pConn$: "pConn$", formGroup$: "formGroup$" }, ngImport: i0, template: "<div *ngIf=\"displayMode$; else noDisplayMode\">\n <component-mapper *ngIf=\"bVisible$ !== false\" name=\"FieldValueList\" [props]=\"{ label$, value$, displayMode$ }\"></component-mapper>\n</div>\n<ng-template #noDisplayMode>\n <div *ngIf=\"!bReadonly$ && bHasForm$; else noEdit\">\n <div [formGroup]=\"formGroup$\" *ngIf=\"bVisible$\">\n <mat-form-field class=\"psdk-full-width\" subscriptSizing=\"dynamic\" [hintLabel]=\"helperText\">\n <mat-label>{{ label$ }}</mat-label>\n <input\n matInput\n [placeholder]=\"placeholder\"\n type=\"email\"\n [value]=\"value$\"\n [required]=\"bRequired$\"\n [formControl]=\"fieldControl\"\n [attr.data-test-id]=\"testId\"\n (change)=\"fieldOnChange($event)\"\n (blur)=\"fieldOnBlur($event)\"\n />\n <mat-error *ngIf=\"fieldControl.invalid\">{{ getErrorMessage() }}</mat-error>\n </mat-form-field>\n </div>\n </div>\n</ng-template>\n<ng-template #noEdit>\n <component-mapper *ngIf=\"bVisible$ !== false\" name=\"Text\" [props]=\"{ pConn$, formatAs$: 'text' }\"></component-mapper>\n</ng-template>\n", styles: [".psdk-full-width{width:100%}.psdk-label-readonly{font-size:1rem;display:block;transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.001px);-ms-transform:translateY(-1.28125em) scale(.75);width:133.33333%}.psdk-data-readonly{padding-top:.625rem;width:100%}::ng-deep .mat-mdc-form-field-infix{width:auto}\n"], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CommonModule) }, { kind: "directive", type: i0.forwardRef(() => i3.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: i0.forwardRef(() => ReactiveFormsModule) }, { kind: "directive", type: i0.forwardRef(() => i4.DefaultValueAccessor), selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i0.forwardRef(() => i4.NgControlStatus), selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i0.forwardRef(() => i4.NgControlStatusGroup), selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i0.forwardRef(() => i4.RequiredValidator), selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i0.forwardRef(() => i4.FormControlDirective), selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i0.forwardRef(() => i4.FormGroupDirective), selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatFormFieldModule) }, { kind: "component", type: i0.forwardRef(() => i5.MatFormField), selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i0.forwardRef(() => i5.MatLabel), selector: "mat-label" }, { kind: "directive", type: i0.forwardRef(() => i5.MatError), selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: i0.forwardRef(() => MatInputModule) }, { kind: "directive", type: i0.forwardRef(() => i6.MatInput), selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i0.forwardRef(() => ComponentMapperComponent), selector: "component-mapper", inputs: ["name", "props", "errorMsg", "outputEvents", "parent"] }] }); }
156
156
  }
157
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: EmailComponent, decorators: [{
157
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EmailComponent, decorators: [{
158
158
  type: Component,
159
159
  args: [{ selector: 'app-email', standalone: true, imports: [CommonModule, ReactiveFormsModule, MatFormFieldModule, MatInputModule, forwardRef(() => ComponentMapperComponent)], template: "<div *ngIf=\"displayMode$; else noDisplayMode\">\n <component-mapper *ngIf=\"bVisible$ !== false\" name=\"FieldValueList\" [props]=\"{ label$, value$, displayMode$ }\"></component-mapper>\n</div>\n<ng-template #noDisplayMode>\n <div *ngIf=\"!bReadonly$ && bHasForm$; else noEdit\">\n <div [formGroup]=\"formGroup$\" *ngIf=\"bVisible$\">\n <mat-form-field class=\"psdk-full-width\" subscriptSizing=\"dynamic\" [hintLabel]=\"helperText\">\n <mat-label>{{ label$ }}</mat-label>\n <input\n matInput\n [placeholder]=\"placeholder\"\n type=\"email\"\n [value]=\"value$\"\n [required]=\"bRequired$\"\n [formControl]=\"fieldControl\"\n [attr.data-test-id]=\"testId\"\n (change)=\"fieldOnChange($event)\"\n (blur)=\"fieldOnBlur($event)\"\n />\n <mat-error *ngIf=\"fieldControl.invalid\">{{ getErrorMessage() }}</mat-error>\n </mat-form-field>\n </div>\n </div>\n</ng-template>\n<ng-template #noEdit>\n <component-mapper *ngIf=\"bVisible$ !== false\" name=\"Text\" [props]=\"{ pConn$, formatAs$: 'text' }\"></component-mapper>\n</ng-template>\n", styles: [".psdk-full-width{width:100%}.psdk-label-readonly{font-size:1rem;display:block;transform:translateY(-1.28125em) scale(.75) perspective(100px) translateZ(.001px);-ms-transform:translateY(-1.28125em) scale(.75);width:133.33333%}.psdk-data-readonly{padding-top:.625rem;width:100%}::ng-deep .mat-mdc-form-field-infix{width:auto}\n"] }]
160
160
  }], ctorParameters: () => [{ type: i1.AngularPConnectService }, { type: i0.ChangeDetectorRef }, { type: i2.Utils }], propDecorators: { pConn$: [{
@@ -50,10 +50,10 @@ export class GroupComponent {
50
50
  });
51
51
  }
52
52
  }
53
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: GroupComponent, deps: [{ token: i1.AngularPConnectService }], target: i0.ɵɵFactoryTarget.Component }); }
54
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: GroupComponent, isStandalone: true, selector: "app-group", inputs: { pConn$: "pConn$", formGroup$: "formGroup$" }, ngImport: i0, template: "<ng-container *ngIf=\"visibility$ && arChildren$.length\">\n <component-mapper\n name=\"FieldGroup\"\n [props]=\"{\n name: showHeading$ ? heading$ : undefined,\n collapsible: collapsible$,\n instructions: instructions$,\n childrenTemplate: childrenTemplate\n }\"\n >\n </component-mapper>\n\n <ng-template #childrenTemplate>\n <div *ngFor=\"let kid of arChildren$\">\n <component-mapper\n [name]=\"kid.getPConnect().getComponentName()\"\n [props]=\"{\n pConn$: kid.getPConnect(),\n formGroup$: formGroup$\n }\"\n errorMsg=\"Field Group wants component not yet available: {{ kid.getPConnect().getComponentName() }}\"\n ></component-mapper>\n </div>\n </ng-template>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CommonModule) }, { kind: "directive", type: i0.forwardRef(() => i2.NgForOf), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(() => i2.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i0.forwardRef(() => ComponentMapperComponent), selector: "component-mapper", inputs: ["name", "props", "errorMsg", "outputEvents", "parent"] }] }); }
53
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GroupComponent, deps: [{ token: i1.AngularPConnectService }], target: i0.ɵɵFactoryTarget.Component }); }
54
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: GroupComponent, isStandalone: true, selector: "app-group", inputs: { pConn$: "pConn$", formGroup$: "formGroup$" }, ngImport: i0, template: "<ng-container *ngIf=\"visibility$ && arChildren$.length\">\n <component-mapper\n name=\"FieldGroup\"\n [props]=\"{\n name: showHeading$ ? heading$ : undefined,\n collapsible: collapsible$,\n instructions: instructions$,\n childrenTemplate: childrenTemplate\n }\"\n >\n </component-mapper>\n\n <ng-template #childrenTemplate>\n <div *ngFor=\"let kid of arChildren$\">\n <component-mapper\n [name]=\"kid.getPConnect().getComponentName()\"\n [props]=\"{\n pConn$: kid.getPConnect(),\n formGroup$: formGroup$\n }\"\n errorMsg=\"Field Group wants component not yet available: {{ kid.getPConnect().getComponentName() }}\"\n ></component-mapper>\n </div>\n </ng-template>\n</ng-container>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: i0.forwardRef(() => CommonModule) }, { kind: "directive", type: i0.forwardRef(() => i2.NgForOf), selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i0.forwardRef(() => i2.NgIf), selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i0.forwardRef(() => ComponentMapperComponent), selector: "component-mapper", inputs: ["name", "props", "errorMsg", "outputEvents", "parent"] }] }); }
55
55
  }
56
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: GroupComponent, decorators: [{
56
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GroupComponent, decorators: [{
57
57
  type: Component,
58
58
  args: [{ selector: 'app-group', standalone: true, imports: [CommonModule, forwardRef(() => ComponentMapperComponent)], template: "<ng-container *ngIf=\"visibility$ && arChildren$.length\">\n <component-mapper\n name=\"FieldGroup\"\n [props]=\"{\n name: showHeading$ ? heading$ : undefined,\n collapsible: collapsible$,\n instructions: instructions$,\n childrenTemplate: childrenTemplate\n }\"\n >\n </component-mapper>\n\n <ng-template #childrenTemplate>\n <div *ngFor=\"let kid of arChildren$\">\n <component-mapper\n [name]=\"kid.getPConnect().getComponentName()\"\n [props]=\"{\n pConn$: kid.getPConnect(),\n formGroup$: formGroup$\n }\"\n errorMsg=\"Field Group wants component not yet available: {{ kid.getPConnect().getComponentName() }}\"\n ></component-mapper>\n </div>\n </ng-template>\n</ng-container>\n" }]
59
59
  }], ctorParameters: () => [{ type: i1.AngularPConnectService }], propDecorators: { pConn$: [{