@hmcts/ccd-case-ui-toolkit 6.16.0-query-details-navigation → 6.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (473) hide show
  1. package/bundles/hmcts-ccd-case-ui-toolkit.umd.js +5184 -9659
  2. package/bundles/hmcts-ccd-case-ui-toolkit.umd.js.map +1 -1
  3. package/bundles/hmcts-ccd-case-ui-toolkit.umd.min.js +1 -1
  4. package/bundles/hmcts-ccd-case-ui-toolkit.umd.min.js.map +1 -1
  5. package/esm2015/lib/app.config.js +1 -1
  6. package/esm2015/lib/components/banners/alert/alert.component.js +5 -7
  7. package/esm2015/lib/components/banners/alert/alert.module.js +4 -12
  8. package/esm2015/lib/components/footer/footer.component.js +30 -55
  9. package/esm2015/lib/components/footer/footers.module.js +4 -12
  10. package/esm2015/lib/components/form/date-input/date-input.component.js +37 -56
  11. package/esm2015/lib/components/form/form.module.js +4 -8
  12. package/esm2015/lib/components/header/header-bar/header-bar.component.js +19 -32
  13. package/esm2015/lib/components/header/headers.module.js +4 -6
  14. package/esm2015/lib/components/header/navigation/navigation-item.component.js +7 -9
  15. package/esm2015/lib/components/header/phase/phase.component.js +9 -20
  16. package/esm2015/lib/components/tabs/tabs.component.js +5 -8
  17. package/esm2015/lib/components/tabs/tabs.module.js +2 -6
  18. package/esm2015/lib/shared/components/activity/activity-banner/activity-banner.component.js +9 -12
  19. package/esm2015/lib/shared/components/activity/activity-icon/activity-icon.component.js +8 -11
  20. package/esm2015/lib/shared/components/activity/activity.component.js +10 -15
  21. package/esm2015/lib/shared/components/activity/activity.module.js +2 -6
  22. package/esm2015/lib/shared/components/case-editor/case-create/case-create.component.js +2 -2
  23. package/esm2015/lib/shared/components/case-editor/case-edit/case-edit.component.js +272 -13
  24. package/esm2015/lib/shared/components/case-editor/case-edit-confirm/case-edit-confirm.component.js +28 -32
  25. package/esm2015/lib/shared/components/case-editor/case-edit-generic-errors/case-edit-generic-errors.component.js +80 -0
  26. package/esm2015/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.js +208 -228
  27. package/esm2015/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.js +194 -511
  28. package/esm2015/lib/shared/components/case-editor/case-editor.module.js +33 -37
  29. package/esm2015/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-cancelled/case-event-completion-task-cancelled.component.js +26 -51
  30. package/esm2015/lib/shared/components/case-editor/case-event-completion/components/case-event-completion-task-reassigned/case-event-completion-task-reassigned.component.js +28 -51
  31. package/esm2015/lib/shared/components/case-editor/case-progress/case-progress.component.js +2 -2
  32. package/esm2015/lib/shared/components/case-editor/services/case-edit-wizard.guard.js +2 -3
  33. package/esm2015/lib/shared/components/case-editor/services/work-allocation.service.js +2 -2
  34. package/esm2015/lib/shared/components/case-history/case-history.component.js +63 -89
  35. package/esm2015/lib/shared/components/case-history/case-history.module.js +14 -18
  36. package/esm2015/lib/shared/components/case-list/case-list.component.js +49 -56
  37. package/esm2015/lib/shared/components/case-list/case-list.module.js +4 -8
  38. package/esm2015/lib/shared/components/case-list-filters/case-list-filters.module.js +7 -11
  39. package/esm2015/lib/shared/components/case-timeline/case-timeline.component.js +6 -9
  40. package/esm2015/lib/shared/components/case-timeline/case-timeline.module.js +8 -12
  41. package/esm2015/lib/shared/components/case-viewer/case-basic-access-view/case-basic-access-view.component.js +61 -106
  42. package/esm2015/lib/shared/components/case-viewer/case-challenged-access-request/case-challenged-access-request.component.js +69 -89
  43. package/esm2015/lib/shared/components/case-viewer/case-challenged-access-success/case-challenged-access-success.component.js +23 -45
  44. package/esm2015/lib/shared/components/case-viewer/case-event-trigger/case-event-trigger.component.js +14 -19
  45. package/esm2015/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.js +145 -172
  46. package/esm2015/lib/shared/components/case-viewer/case-review-specific-access-reject/case-review-specific-access-reject.component.js +20 -32
  47. package/esm2015/lib/shared/components/case-viewer/case-review-specific-access-request/case-review-specific-access-request.component.js +79 -107
  48. package/esm2015/lib/shared/components/case-viewer/case-specific-access-request/case-specific-access-request.component.js +49 -79
  49. package/esm2015/lib/shared/components/case-viewer/case-view/case-view.component.js +1 -1
  50. package/esm2015/lib/shared/components/case-viewer/case-viewer.component.js +33 -15
  51. package/esm2015/lib/shared/components/case-viewer/case-viewer.module.js +27 -37
  52. package/esm2015/lib/shared/components/case-viewer/printer/case-printer.component.js +22 -36
  53. package/esm2015/lib/shared/components/create-case-filters/create-case-filters.component.js +40 -63
  54. package/esm2015/lib/shared/components/create-case-filters/create-case-filters.module.js +2 -6
  55. package/esm2015/lib/shared/components/dialogs/delete-or-cancel-dialog/delete-or-cancel-dialog.component.js +14 -28
  56. package/esm2015/lib/shared/components/dialogs/dialogs.module.js +2 -6
  57. package/esm2015/lib/shared/components/dialogs/document-dialog/document-dialog.component.js +14 -28
  58. package/esm2015/lib/shared/components/dialogs/remove-dialog/remove-dialog.component.js +14 -28
  59. package/esm2015/lib/shared/components/dialogs/save-or-discard-dialog/save-or-discard-dialog.component.js +14 -28
  60. package/esm2015/lib/shared/components/error/callback-errors.component.js +23 -39
  61. package/esm2015/lib/shared/components/error/errors.module.js +2 -6
  62. package/esm2015/lib/shared/components/error-message/error-message.component.js +11 -14
  63. package/esm2015/lib/shared/components/error-message/error-message.module.js +4 -8
  64. package/esm2015/lib/shared/components/event-start/components/multiple-tasks-exist/multiple-tasks-exist.component.js +20 -39
  65. package/esm2015/lib/shared/components/event-start/components/no-tasks-available/no-tasks-available.component.js +18 -34
  66. package/esm2015/lib/shared/components/event-start/components/task-assigned/task-assigned.component.js +19 -34
  67. package/esm2015/lib/shared/components/event-start/components/task-cancelled/task-cancelled.component.js +25 -50
  68. package/esm2015/lib/shared/components/event-start/components/task-conflict/task-conflict.component.js +20 -39
  69. package/esm2015/lib/shared/components/event-start/components/task-unassigned/task-unassigned.component.js +18 -34
  70. package/esm2015/lib/shared/components/event-start/event-start.module.js +4 -8
  71. package/esm2015/lib/shared/components/event-trigger/event-trigger.component.js +17 -27
  72. package/esm2015/lib/shared/components/event-trigger/event-trigger.module.js +2 -6
  73. package/esm2015/lib/shared/components/loading-spinner/loading-spinner.component.js +5 -7
  74. package/esm2015/lib/shared/components/loading-spinner/loading-spinner.module.js +2 -6
  75. package/esm2015/lib/shared/components/pagination/pagination.component.js +67 -84
  76. package/esm2015/lib/shared/components/pagination/pagination.module.js +4 -8
  77. package/esm2015/lib/shared/components/palette/address/write-address-field.component.js +31 -50
  78. package/esm2015/lib/shared/components/palette/base-field/abstract-field-read.component.js +1 -1
  79. package/esm2015/lib/shared/components/palette/base-field/field-read-label.component.js +8 -10
  80. package/esm2015/lib/shared/components/palette/base-field/field-read.component.js +1 -5
  81. package/esm2015/lib/shared/components/palette/base-field/field-write.component.js +2 -2
  82. package/esm2015/lib/shared/components/palette/case-file-view/case-file-view-field.component.js +79 -29
  83. package/esm2015/lib/shared/components/palette/case-file-view/components/case-file-view-folder/case-file-view-folder.component.js +1 -1
  84. package/esm2015/lib/shared/components/palette/case-file-view/components/shared/case-file-view-overlay-menu/case-file-view-overlay-menu.component.js +1 -1
  85. package/esm2015/lib/shared/components/palette/case-flag/components/add-comments/add-comments.component.js +37 -62
  86. package/esm2015/lib/shared/components/palette/case-flag/components/case-flag-summary-list/case-flag-summary-list.component.js +42 -244
  87. package/esm2015/lib/shared/components/palette/case-flag/components/case-flag-table/case-flag-table.component.js +73 -144
  88. package/esm2015/lib/shared/components/palette/case-flag/components/index.js +1 -3
  89. package/esm2015/lib/shared/components/palette/case-flag/components/manage-case-flags/manage-case-flags.component.js +87 -62
  90. package/esm2015/lib/shared/components/palette/case-flag/components/search-language-interpreter/search-language-interpreter.component.js +101 -133
  91. package/esm2015/lib/shared/components/palette/case-flag/components/select-flag-location/select-flag-location.component.js +35 -55
  92. package/esm2015/lib/shared/components/palette/case-flag/components/select-flag-type/select-flag-type.component.js +113 -186
  93. package/esm2015/lib/shared/components/palette/case-flag/components/update-flag/update-flag.component.js +99 -286
  94. package/esm2015/lib/shared/components/palette/case-flag/domain/case-flag-state.model.js +1 -1
  95. package/esm2015/lib/shared/components/palette/case-flag/domain/case-flag.model.js +1 -1
  96. package/esm2015/lib/shared/components/palette/case-flag/domain/language.model.js +1 -1
  97. package/esm2015/lib/shared/components/palette/case-flag/enums/case-flag-status.enum.js +2 -3
  98. package/esm2015/lib/shared/components/palette/case-flag/enums/case-flag-wizard-step-title.enum.js +3 -8
  99. package/esm2015/lib/shared/components/palette/case-flag/enums/index.js +2 -8
  100. package/esm2015/lib/shared/components/palette/case-flag/enums/select-flag-error-message.enum.js +2 -3
  101. package/esm2015/lib/shared/components/palette/case-flag/enums/select-flag-type-error-message.enum.js +1 -2
  102. package/esm2015/lib/shared/components/palette/case-flag/enums/update-flag-error-message.enum.js +1 -3
  103. package/esm2015/lib/shared/components/palette/case-flag/enums/update-flag-step.enum.js +2 -3
  104. package/esm2015/lib/shared/components/palette/case-flag/enums/write-case-flag-field.enum.js +4 -8
  105. package/esm2015/lib/shared/components/palette/case-flag/index.js +1 -2
  106. package/esm2015/lib/shared/components/palette/case-flag/read-case-flag-field.component.js +50 -121
  107. package/esm2015/lib/shared/components/palette/case-flag/write-case-flag-field.component.js +141 -250
  108. package/esm2015/lib/shared/components/palette/case-link/write-case-link-field.component.js +12 -16
  109. package/esm2015/lib/shared/components/palette/collection/write-collection-field.component.js +57 -68
  110. package/esm2015/lib/shared/components/palette/complex/read-complex-field-collection-table.component.js +46 -50
  111. package/esm2015/lib/shared/components/palette/complex/read-complex-field-raw.component.js +6 -7
  112. package/esm2015/lib/shared/components/palette/complex/read-complex-field-table.component.js +20 -22
  113. package/esm2015/lib/shared/components/palette/complex/write-complex-field.component.js +4 -5
  114. package/esm2015/lib/shared/components/palette/date/write-date-field.component.js +12 -16
  115. package/esm2015/lib/shared/components/palette/datetime-picker/datetime-picker.component.js +17 -29
  116. package/esm2015/lib/shared/components/palette/document/write-document-field.component.js +25 -31
  117. package/esm2015/lib/shared/components/palette/dynamic-list/read-dynamic-list-field.component.js +7 -9
  118. package/esm2015/lib/shared/components/palette/dynamic-list/write-dynamic-list-field.component.js +20 -32
  119. package/esm2015/lib/shared/components/palette/dynamic-radio-list/read-dynamic-radio-list-field.component.js +7 -9
  120. package/esm2015/lib/shared/components/palette/dynamic-radio-list/write-dynamic-radio-list-field.component.js +15 -24
  121. package/esm2015/lib/shared/components/palette/email/write-email-field.component.js +12 -16
  122. package/esm2015/lib/shared/components/palette/fixed-list/read-fixed-list-field.component.js +7 -9
  123. package/esm2015/lib/shared/components/palette/fixed-list/write-fixed-list-field.component.js +14 -19
  124. package/esm2015/lib/shared/components/palette/fixed-radio-list/read-fixed-radio-list-field.component.js +7 -9
  125. package/esm2015/lib/shared/components/palette/fixed-radio-list/write-fixed-radio-list-field.component.js +15 -20
  126. package/esm2015/lib/shared/components/palette/history/event-log/event-log-details.component.js +65 -87
  127. package/esm2015/lib/shared/components/palette/history/event-log/event-log-table.component.js +46 -60
  128. package/esm2015/lib/shared/components/palette/index.js +2 -3
  129. package/esm2015/lib/shared/components/palette/judicial-user/write-judicial-user-field.component.js +45 -22
  130. package/esm2015/lib/shared/components/palette/label/label-field.component.js +5 -24
  131. package/esm2015/lib/shared/components/palette/linked-cases/components/before-you-start/before-you-start.component.js +2 -4
  132. package/esm2015/lib/shared/components/palette/linked-cases/components/linked-cases-table/linked-cases-to-table.component.js +1 -1
  133. package/esm2015/lib/shared/components/palette/linked-cases/components/no-linked-cases/no-linked-cases.component.js +2 -4
  134. package/esm2015/lib/shared/components/palette/linked-cases/domain/linked-cases-state.model.js +1 -1
  135. package/esm2015/lib/shared/components/palette/linked-cases/read-linked-cases-field.component.js +2 -4
  136. package/esm2015/lib/shared/components/palette/markdown/index.js +1 -2
  137. package/esm2015/lib/shared/components/palette/money-gbp/write-money-gbp-field.component.js +12 -16
  138. package/esm2015/lib/shared/components/palette/multi-select-list/read-multi-select-list-field.component.js +11 -15
  139. package/esm2015/lib/shared/components/palette/multi-select-list/write-multi-select-list-field.component.js +14 -19
  140. package/esm2015/lib/shared/components/palette/number/write-number-field.component.js +12 -16
  141. package/esm2015/lib/shared/components/palette/order-summary/read-order-summary-field.component.js +25 -43
  142. package/esm2015/lib/shared/components/palette/order-summary/read-order-summary-row.component.js +6 -7
  143. package/esm2015/lib/shared/components/palette/organisation/read-organisation-field-raw.component.js +29 -41
  144. package/esm2015/lib/shared/components/palette/organisation/read-organisation-field-table.component.js +35 -48
  145. package/esm2015/lib/shared/components/palette/organisation/write-organisation-field.component.js +50 -88
  146. package/esm2015/lib/shared/components/palette/palette.module.js +82 -178
  147. package/esm2015/lib/shared/components/palette/palette.service.js +2 -5
  148. package/esm2015/lib/shared/components/palette/phone-uk/write-phone-uk-field.component.js +12 -16
  149. package/esm2015/lib/shared/components/palette/text/read-text-field.component.js +5 -7
  150. package/esm2015/lib/shared/components/palette/text/write-text-field.component.js +12 -16
  151. package/esm2015/lib/shared/components/palette/text-area/read-text-area-field.component.js +5 -7
  152. package/esm2015/lib/shared/components/palette/text-area/write-text-area-field.component.js +12 -16
  153. package/esm2015/lib/shared/components/palette/yes-no/read-yes-no-field.component.js +5 -7
  154. package/esm2015/lib/shared/components/palette/yes-no/write-yes-no-field.component.js +15 -20
  155. package/esm2015/lib/shared/components/search-filters/search-filters.component.js +35 -60
  156. package/esm2015/lib/shared/components/search-filters/search-filters.module.js +10 -14
  157. package/esm2015/lib/shared/components/search-result/search-result.component.js +80 -102
  158. package/esm2015/lib/shared/components/search-result/search-result.module.js +13 -16
  159. package/esm2015/lib/shared/components/workbasket-filters/workbasket-filters.component.js +52 -90
  160. package/esm2015/lib/shared/components/workbasket-filters/workbasket-filters.module.js +9 -13
  161. package/esm2015/lib/shared/directives/conditional-show/conditional-show-form.directive.js +2 -2
  162. package/esm2015/lib/shared/domain/case-edit/case-edit.model.js +2 -0
  163. package/esm2015/lib/shared/domain/case-edit/index.js +2 -0
  164. package/esm2015/lib/shared/domain/case-file-view/case-file-view-document.model.js +1 -1
  165. package/esm2015/lib/shared/domain/case-flag/flag-type.model.js +2 -17
  166. package/esm2015/lib/shared/domain/case-view/case-view-trigger.model.js +2 -1
  167. package/esm2015/lib/shared/domain/definition/display-context-enum.model.js +1 -3
  168. package/esm2015/lib/shared/domain/index.js +2 -1
  169. package/esm2015/lib/shared/fixture/shared.test.fixture.js +1 -2
  170. package/esm2015/lib/shared/pipes/index.js +2 -3
  171. package/esm2015/lib/shared/pipes/pipes.module.js +5 -9
  172. package/esm2015/lib/shared/services/alert/alert.service.js +8 -28
  173. package/esm2015/lib/shared/services/case-flag/case-flag-refdata.service.js +4 -10
  174. package/esm2015/lib/shared/services/request/request.options.builder.js +1 -7
  175. package/fesm2015/hmcts-ccd-case-ui-toolkit.js +6431 -10499
  176. package/fesm2015/hmcts-ccd-case-ui-toolkit.js.map +1 -1
  177. package/lib/app.config.d.ts.map +1 -1
  178. package/lib/components/banners/alert/alert.module.d.ts +1 -2
  179. package/lib/components/banners/alert/alert.module.d.ts.map +1 -1
  180. package/lib/components/footer/footers.module.d.ts +1 -2
  181. package/lib/components/footer/footers.module.d.ts.map +1 -1
  182. package/lib/components/form/form.module.d.ts +1 -2
  183. package/lib/components/form/form.module.d.ts.map +1 -1
  184. package/lib/components/header/headers.module.d.ts +1 -2
  185. package/lib/components/header/headers.module.d.ts.map +1 -1
  186. package/lib/components/tabs/tabs.component.d.ts.map +1 -1
  187. package/lib/components/tabs/tabs.module.d.ts +1 -2
  188. package/lib/components/tabs/tabs.module.d.ts.map +1 -1
  189. package/lib/shared/components/activity/activity.module.d.ts +1 -2
  190. package/lib/shared/components/activity/activity.module.d.ts.map +1 -1
  191. package/lib/shared/components/case-editor/case-edit/case-edit.component.d.ts +65 -10
  192. package/lib/shared/components/case-editor/case-edit/case-edit.component.d.ts.map +1 -1
  193. package/lib/shared/components/case-editor/case-edit-confirm/case-edit-confirm.component.d.ts +0 -1
  194. package/lib/shared/components/case-editor/case-edit-confirm/case-edit-confirm.component.d.ts.map +1 -1
  195. package/lib/shared/components/case-editor/case-edit-generic-errors/case-edit-generic-errors.component.d.ts +8 -0
  196. package/lib/shared/components/case-editor/case-edit-generic-errors/case-edit-generic-errors.component.d.ts.map +1 -0
  197. package/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.d.ts +10 -9
  198. package/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.d.ts.map +1 -1
  199. package/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.d.ts +7 -56
  200. package/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.d.ts.map +1 -1
  201. package/lib/shared/components/case-editor/case-editor.module.d.ts +13 -13
  202. package/lib/shared/components/case-editor/case-editor.module.d.ts.map +1 -1
  203. package/lib/shared/components/case-editor/services/case-edit-wizard.guard.d.ts.map +1 -1
  204. package/lib/shared/components/case-history/case-history.module.d.ts +1 -2
  205. package/lib/shared/components/case-history/case-history.module.d.ts.map +1 -1
  206. package/lib/shared/components/case-list/case-list.module.d.ts +1 -2
  207. package/lib/shared/components/case-list/case-list.module.d.ts.map +1 -1
  208. package/lib/shared/components/case-list-filters/case-list-filters.module.d.ts +1 -2
  209. package/lib/shared/components/case-list-filters/case-list-filters.module.d.ts.map +1 -1
  210. package/lib/shared/components/case-timeline/case-timeline.module.d.ts +1 -2
  211. package/lib/shared/components/case-timeline/case-timeline.module.d.ts.map +1 -1
  212. package/lib/shared/components/case-viewer/case-event-trigger/case-event-trigger.component.d.ts.map +1 -1
  213. package/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.d.ts +7 -5
  214. package/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.d.ts.map +1 -1
  215. package/lib/shared/components/case-viewer/case-viewer.component.d.ts +6 -3
  216. package/lib/shared/components/case-viewer/case-viewer.component.d.ts.map +1 -1
  217. package/lib/shared/components/case-viewer/case-viewer.module.d.ts +4 -6
  218. package/lib/shared/components/case-viewer/case-viewer.module.d.ts.map +1 -1
  219. package/lib/shared/components/create-case-filters/create-case-filters.module.d.ts +1 -2
  220. package/lib/shared/components/create-case-filters/create-case-filters.module.d.ts.map +1 -1
  221. package/lib/shared/components/dialogs/dialogs.module.d.ts +1 -2
  222. package/lib/shared/components/dialogs/dialogs.module.d.ts.map +1 -1
  223. package/lib/shared/components/error/callback-errors.component.d.ts +2 -3
  224. package/lib/shared/components/error/callback-errors.component.d.ts.map +1 -1
  225. package/lib/shared/components/error/errors.module.d.ts +1 -2
  226. package/lib/shared/components/error/errors.module.d.ts.map +1 -1
  227. package/lib/shared/components/error-message/error-message.module.d.ts +1 -2
  228. package/lib/shared/components/error-message/error-message.module.d.ts.map +1 -1
  229. package/lib/shared/components/event-start/event-start.module.d.ts +1 -2
  230. package/lib/shared/components/event-start/event-start.module.d.ts.map +1 -1
  231. package/lib/shared/components/event-trigger/event-trigger.module.d.ts +1 -2
  232. package/lib/shared/components/event-trigger/event-trigger.module.d.ts.map +1 -1
  233. package/lib/shared/components/loading-spinner/loading-spinner.module.d.ts +1 -2
  234. package/lib/shared/components/loading-spinner/loading-spinner.module.d.ts.map +1 -1
  235. package/lib/shared/components/pagination/pagination.module.d.ts +1 -2
  236. package/lib/shared/components/pagination/pagination.module.d.ts.map +1 -1
  237. package/lib/shared/components/palette/base-field/abstract-field-read.component.d.ts.map +1 -1
  238. package/lib/shared/components/palette/base-field/field-read.component.d.ts +0 -1
  239. package/lib/shared/components/palette/base-field/field-read.component.d.ts.map +1 -1
  240. package/lib/shared/components/palette/base-field/field-write.component.d.ts.map +1 -1
  241. package/lib/shared/components/palette/case-file-view/case-file-view-field.component.d.ts +9 -7
  242. package/lib/shared/components/palette/case-file-view/case-file-view-field.component.d.ts.map +1 -1
  243. package/lib/shared/components/palette/case-file-view/components/case-file-view-folder/case-file-view-folder.component.d.ts +4 -1
  244. package/lib/shared/components/palette/case-file-view/components/case-file-view-folder/case-file-view-folder.component.d.ts.map +1 -1
  245. package/lib/shared/components/palette/case-flag/components/add-comments/add-comments.component.d.ts +1 -2
  246. package/lib/shared/components/palette/case-flag/components/add-comments/add-comments.component.d.ts.map +1 -1
  247. package/lib/shared/components/palette/case-flag/components/case-flag-summary-list/case-flag-summary-list.component.d.ts +5 -20
  248. package/lib/shared/components/palette/case-flag/components/case-flag-summary-list/case-flag-summary-list.component.d.ts.map +1 -1
  249. package/lib/shared/components/palette/case-flag/components/case-flag-table/case-flag-table.component.d.ts +1 -2
  250. package/lib/shared/components/palette/case-flag/components/case-flag-table/case-flag-table.component.d.ts.map +1 -1
  251. package/lib/shared/components/palette/case-flag/components/index.d.ts +0 -2
  252. package/lib/shared/components/palette/case-flag/components/index.d.ts.map +1 -1
  253. package/lib/shared/components/palette/case-flag/components/manage-case-flags/manage-case-flags.component.d.ts +8 -4
  254. package/lib/shared/components/palette/case-flag/components/manage-case-flags/manage-case-flags.component.d.ts.map +1 -1
  255. package/lib/shared/components/palette/case-flag/components/search-language-interpreter/search-language-interpreter.component.d.ts +8 -10
  256. package/lib/shared/components/palette/case-flag/components/search-language-interpreter/search-language-interpreter.component.d.ts.map +1 -1
  257. package/lib/shared/components/palette/case-flag/components/select-flag-location/select-flag-location.component.d.ts +1 -2
  258. package/lib/shared/components/palette/case-flag/components/select-flag-location/select-flag-location.component.d.ts.map +1 -1
  259. package/lib/shared/components/palette/case-flag/components/select-flag-type/select-flag-type.component.d.ts +8 -12
  260. package/lib/shared/components/palette/case-flag/components/select-flag-type/select-flag-type.component.d.ts.map +1 -1
  261. package/lib/shared/components/palette/case-flag/components/update-flag/update-flag.component.d.ts +9 -19
  262. package/lib/shared/components/palette/case-flag/components/update-flag/update-flag.component.d.ts.map +1 -1
  263. package/lib/shared/components/palette/case-flag/domain/case-flag-state.model.d.ts +10 -1
  264. package/lib/shared/components/palette/case-flag/domain/case-flag-state.model.d.ts.map +1 -1
  265. package/lib/shared/components/palette/case-flag/domain/case-flag.model.d.ts +0 -6
  266. package/lib/shared/components/palette/case-flag/domain/case-flag.model.d.ts.map +1 -1
  267. package/lib/shared/components/palette/case-flag/domain/language.model.d.ts +0 -1
  268. package/lib/shared/components/palette/case-flag/domain/language.model.d.ts.map +1 -1
  269. package/lib/shared/components/palette/case-flag/enums/case-flag-status.enum.d.ts +1 -2
  270. package/lib/shared/components/palette/case-flag/enums/case-flag-status.enum.d.ts.map +1 -1
  271. package/lib/shared/components/palette/case-flag/enums/case-flag-wizard-step-title.enum.d.ts +3 -8
  272. package/lib/shared/components/palette/case-flag/enums/case-flag-wizard-step-title.enum.d.ts.map +1 -1
  273. package/lib/shared/components/palette/case-flag/enums/index.d.ts +1 -7
  274. package/lib/shared/components/palette/case-flag/enums/index.d.ts.map +1 -1
  275. package/lib/shared/components/palette/case-flag/enums/select-flag-error-message.enum.d.ts +1 -2
  276. package/lib/shared/components/palette/case-flag/enums/select-flag-error-message.enum.d.ts.map +1 -1
  277. package/lib/shared/components/palette/case-flag/enums/select-flag-type-error-message.enum.d.ts +0 -1
  278. package/lib/shared/components/palette/case-flag/enums/select-flag-type-error-message.enum.d.ts.map +1 -1
  279. package/lib/shared/components/palette/case-flag/enums/update-flag-error-message.enum.d.ts +1 -3
  280. package/lib/shared/components/palette/case-flag/enums/update-flag-error-message.enum.d.ts.map +1 -1
  281. package/lib/shared/components/palette/case-flag/enums/update-flag-step.enum.d.ts +2 -3
  282. package/lib/shared/components/palette/case-flag/enums/update-flag-step.enum.d.ts.map +1 -1
  283. package/lib/shared/components/palette/case-flag/enums/write-case-flag-field.enum.d.ts +3 -7
  284. package/lib/shared/components/palette/case-flag/enums/write-case-flag-field.enum.d.ts.map +1 -1
  285. package/lib/shared/components/palette/case-flag/index.d.ts +0 -1
  286. package/lib/shared/components/palette/case-flag/index.d.ts.map +1 -1
  287. package/lib/shared/components/palette/case-flag/read-case-flag-field.component.d.ts +8 -11
  288. package/lib/shared/components/palette/case-flag/read-case-flag-field.component.d.ts.map +1 -1
  289. package/lib/shared/components/palette/case-flag/write-case-flag-field.component.d.ts +24 -23
  290. package/lib/shared/components/palette/case-flag/write-case-flag-field.component.d.ts.map +1 -1
  291. package/lib/shared/components/palette/collection/write-collection-field.component.d.ts +2 -3
  292. package/lib/shared/components/palette/collection/write-collection-field.component.d.ts.map +1 -1
  293. package/lib/shared/components/palette/dynamic-radio-list/write-dynamic-radio-list-field.component.d.ts.map +1 -1
  294. package/lib/shared/components/palette/index.d.ts +1 -2
  295. package/lib/shared/components/palette/index.d.ts.map +1 -1
  296. package/lib/shared/components/palette/judicial-user/write-judicial-user-field.component.d.ts +10 -9
  297. package/lib/shared/components/palette/judicial-user/write-judicial-user-field.component.d.ts.map +1 -1
  298. package/lib/shared/components/palette/label/label-field.component.d.ts +1 -2
  299. package/lib/shared/components/palette/label/label-field.component.d.ts.map +1 -1
  300. package/lib/shared/components/palette/linked-cases/components/before-you-start/before-you-start.component.d.ts.map +1 -1
  301. package/lib/shared/components/palette/linked-cases/components/no-linked-cases/no-linked-cases.component.d.ts.map +1 -1
  302. package/lib/shared/components/palette/linked-cases/domain/linked-cases-state.model.d.ts +0 -4
  303. package/lib/shared/components/palette/linked-cases/domain/linked-cases-state.model.d.ts.map +1 -1
  304. package/lib/shared/components/palette/linked-cases/read-linked-cases-field.component.d.ts.map +1 -1
  305. package/lib/shared/components/palette/markdown/index.d.ts +0 -1
  306. package/lib/shared/components/palette/markdown/index.d.ts.map +1 -1
  307. package/lib/shared/components/palette/palette.module.d.ts +117 -135
  308. package/lib/shared/components/palette/palette.module.d.ts.map +1 -1
  309. package/lib/shared/components/palette/palette.service.d.ts.map +1 -1
  310. package/lib/shared/components/search-filters/search-filters.module.d.ts +1 -2
  311. package/lib/shared/components/search-filters/search-filters.module.d.ts.map +1 -1
  312. package/lib/shared/components/search-result/search-result.component.d.ts +1 -1
  313. package/lib/shared/components/search-result/search-result.module.d.ts +2 -3
  314. package/lib/shared/components/search-result/search-result.module.d.ts.map +1 -1
  315. package/lib/shared/components/workbasket-filters/workbasket-filters.module.d.ts +1 -2
  316. package/lib/shared/components/workbasket-filters/workbasket-filters.module.d.ts.map +1 -1
  317. package/lib/shared/domain/case-edit/case-edit.model.d.ts +26 -0
  318. package/lib/shared/domain/case-edit/case-edit.model.d.ts.map +1 -0
  319. package/lib/shared/domain/case-edit/index.d.ts +2 -0
  320. package/lib/shared/domain/case-edit/index.d.ts.map +1 -0
  321. package/lib/shared/domain/case-file-view/case-file-view-document.model.d.ts +1 -0
  322. package/lib/shared/domain/case-file-view/case-file-view-document.model.d.ts.map +1 -1
  323. package/lib/shared/domain/case-flag/flag-type.model.d.ts +1 -6
  324. package/lib/shared/domain/case-flag/flag-type.model.d.ts.map +1 -1
  325. package/lib/shared/domain/case-view/case-view-trigger.model.d.ts +1 -0
  326. package/lib/shared/domain/case-view/case-view-trigger.model.d.ts.map +1 -1
  327. package/lib/shared/domain/definition/display-context-enum.model.d.ts +1 -3
  328. package/lib/shared/domain/definition/display-context-enum.model.d.ts.map +1 -1
  329. package/lib/shared/domain/index.d.ts +1 -0
  330. package/lib/shared/domain/index.d.ts.map +1 -1
  331. package/lib/shared/fixture/shared.test.fixture.d.ts.map +1 -1
  332. package/lib/shared/pipes/index.d.ts +1 -2
  333. package/lib/shared/pipes/index.d.ts.map +1 -1
  334. package/lib/shared/pipes/pipes.module.d.ts +2 -3
  335. package/lib/shared/pipes/pipes.module.d.ts.map +1 -1
  336. package/lib/shared/services/alert/alert.service.d.ts +4 -8
  337. package/lib/shared/services/alert/alert.service.d.ts.map +1 -1
  338. package/lib/shared/services/case-flag/case-flag-refdata.service.d.ts +2 -3
  339. package/lib/shared/services/case-flag/case-flag-refdata.service.d.ts.map +1 -1
  340. package/lib/shared/services/request/request.options.builder.d.ts.map +1 -1
  341. package/package.json +1 -1
  342. package/esm2015/lib/shared/components/case-editor/case-edit-submit/case-edit-submit-titles.enum.js +0 -7
  343. package/esm2015/lib/shared/components/case-editor/services/case-flag-state.service.js +0 -19
  344. package/esm2015/lib/shared/components/palette/case-flag/components/confirm-flag-status/confirm-flag-status.component.js +0 -181
  345. package/esm2015/lib/shared/components/palette/case-flag/components/search-language-interpreter/search-language-interpreter-control-names.enum.js +0 -6
  346. package/esm2015/lib/shared/components/palette/case-flag/components/update-flag/update-flag-add-translation-form/update-flag-add-translation-form.component.js +0 -292
  347. package/esm2015/lib/shared/components/palette/case-flag/enums/case-flag-display-context-parameter.enum.js +0 -9
  348. package/esm2015/lib/shared/components/palette/case-flag/enums/case-flag-form-fields.enum.js +0 -12
  349. package/esm2015/lib/shared/components/palette/case-flag/enums/confirm-status-error-message.enum.js +0 -6
  350. package/esm2015/lib/shared/components/palette/case-flag/enums/confirm-status-step.enum.js +0 -6
  351. package/esm2015/lib/shared/components/palette/case-flag/enums/update-flag-add-translation-error-message.enum.js +0 -6
  352. package/esm2015/lib/shared/components/palette/case-flag/enums/update-flag-add-translation-step.enum.js +0 -6
  353. package/esm2015/lib/shared/components/palette/case-flag/pipes/flag-field-display.pipe.js +0 -41
  354. package/esm2015/lib/shared/components/palette/case-flag/pipes/index.js +0 -5
  355. package/esm2015/lib/shared/components/palette/case-flag/pipes/language-interpreter-display.pipe.js +0 -41
  356. package/esm2015/lib/shared/components/palette/case-flag/pipes/manage-case-flags-label-display.pipe.js +0 -109
  357. package/esm2015/lib/shared/components/palette/case-flag/pipes/update-flag-title-display.pipe.js +0 -77
  358. package/esm2015/lib/shared/components/palette/markdown/markdown-component.module.js +0 -42
  359. package/esm2015/lib/shared/components/palette/query-management/__mocks__/index.js +0 -164
  360. package/esm2015/lib/shared/components/palette/query-management/components/index.js +0 -10
  361. package/esm2015/lib/shared/components/palette/query-management/components/query-case-details-header/query-case-details-header.component.js +0 -64
  362. package/esm2015/lib/shared/components/palette/query-management/components/query-check-your-answers/query-check-your-answers.component.js +0 -171
  363. package/esm2015/lib/shared/components/palette/query-management/components/query-create/query-create.component.js +0 -18
  364. package/esm2015/lib/shared/components/palette/query-management/components/query-details/query-details.component.js +0 -56
  365. package/esm2015/lib/shared/components/palette/query-management/components/query-details-table/query-details-table.component.js +0 -147
  366. package/esm2015/lib/shared/components/palette/query-management/components/query-list/query-list.component.js +0 -175
  367. package/esm2015/lib/shared/components/palette/query-management/components/query-management-error-messages/query-management-error-message.model.js +0 -2
  368. package/esm2015/lib/shared/components/palette/query-management/components/query-write/query-write-add-documents/query-write-add-documents.component.js +0 -66
  369. package/esm2015/lib/shared/components/palette/query-management/components/query-write/query-write-raise-query/query-write-raise-query.component.js +0 -214
  370. package/esm2015/lib/shared/components/palette/query-management/components/query-write/query-write-respond-to-query/query-write-respond-to-query.component.js +0 -167
  371. package/esm2015/lib/shared/components/palette/query-management/index.js +0 -6
  372. package/esm2015/lib/shared/components/palette/query-management/models/index.js +0 -7
  373. package/esm2015/lib/shared/components/palette/query-management/models/party-messages/party-message.model.js +0 -2
  374. package/esm2015/lib/shared/components/palette/query-management/models/party-messages/party-messages-group.model.js +0 -2
  375. package/esm2015/lib/shared/components/palette/query-management/models/query-list/query-list-column/query-list-column.model.js +0 -2
  376. package/esm2015/lib/shared/components/palette/query-management/models/query-list/query-list-data/query-list-data.model.js +0 -18
  377. package/esm2015/lib/shared/components/palette/query-management/models/query-list/query-list-item/query-list-item.model.js +0 -35
  378. package/esm2015/lib/shared/components/palette/query-management/models/query-list/query-list-response-status.enum.js +0 -7
  379. package/esm2015/lib/shared/components/palette/query-management/read-query-management-field.component.js +0 -83
  380. package/esm2015/lib/shared/components/palette/query-management/utils/query-management.utils.js +0 -12
  381. package/esm2015/lib/shared/components/palette/query-management/write-query-management-field.component.js +0 -60
  382. package/esm2015/lib/shared/domain/alert/alert-status-params.model.js +0 -2
  383. package/esm2015/lib/shared/domain/case-view/case-view-event-ids.enum.js +0 -6
  384. package/esm2015/lib/shared/pipes/generic/enum-display-description/enum-display-description.pipe.js +0 -16
  385. package/esm2015/lib/shared/pipes/generic/index.js +0 -2
  386. package/lib/shared/components/case-editor/case-edit-submit/case-edit-submit-titles.enum.d.ts +0 -6
  387. package/lib/shared/components/case-editor/case-edit-submit/case-edit-submit-titles.enum.d.ts.map +0 -1
  388. package/lib/shared/components/case-editor/services/case-flag-state.service.d.ts +0 -11
  389. package/lib/shared/components/case-editor/services/case-flag-state.service.d.ts.map +0 -1
  390. package/lib/shared/components/palette/case-flag/components/confirm-flag-status/confirm-flag-status.component.d.ts +0 -28
  391. package/lib/shared/components/palette/case-flag/components/confirm-flag-status/confirm-flag-status.component.d.ts.map +0 -1
  392. package/lib/shared/components/palette/case-flag/components/search-language-interpreter/search-language-interpreter-control-names.enum.d.ts +0 -5
  393. package/lib/shared/components/palette/case-flag/components/search-language-interpreter/search-language-interpreter-control-names.enum.d.ts.map +0 -1
  394. package/lib/shared/components/palette/case-flag/components/update-flag/update-flag-add-translation-form/update-flag-add-translation-form.component.d.ts +0 -27
  395. package/lib/shared/components/palette/case-flag/components/update-flag/update-flag-add-translation-form/update-flag-add-translation-form.component.d.ts.map +0 -1
  396. package/lib/shared/components/palette/case-flag/enums/case-flag-display-context-parameter.enum.d.ts +0 -8
  397. package/lib/shared/components/palette/case-flag/enums/case-flag-display-context-parameter.enum.d.ts.map +0 -1
  398. package/lib/shared/components/palette/case-flag/enums/case-flag-form-fields.enum.d.ts +0 -11
  399. package/lib/shared/components/palette/case-flag/enums/case-flag-form-fields.enum.d.ts.map +0 -1
  400. package/lib/shared/components/palette/case-flag/enums/confirm-status-error-message.enum.d.ts +0 -5
  401. package/lib/shared/components/palette/case-flag/enums/confirm-status-error-message.enum.d.ts.map +0 -1
  402. package/lib/shared/components/palette/case-flag/enums/confirm-status-step.enum.d.ts +0 -5
  403. package/lib/shared/components/palette/case-flag/enums/confirm-status-step.enum.d.ts.map +0 -1
  404. package/lib/shared/components/palette/case-flag/enums/update-flag-add-translation-error-message.enum.d.ts +0 -5
  405. package/lib/shared/components/palette/case-flag/enums/update-flag-add-translation-error-message.enum.d.ts.map +0 -1
  406. package/lib/shared/components/palette/case-flag/enums/update-flag-add-translation-step.enum.d.ts +0 -5
  407. package/lib/shared/components/palette/case-flag/enums/update-flag-add-translation-step.enum.d.ts.map +0 -1
  408. package/lib/shared/components/palette/case-flag/pipes/flag-field-display.pipe.d.ts +0 -19
  409. package/lib/shared/components/palette/case-flag/pipes/flag-field-display.pipe.d.ts.map +0 -1
  410. package/lib/shared/components/palette/case-flag/pipes/index.d.ts +0 -5
  411. package/lib/shared/components/palette/case-flag/pipes/index.d.ts.map +0 -1
  412. package/lib/shared/components/palette/case-flag/pipes/language-interpreter-display.pipe.d.ts +0 -18
  413. package/lib/shared/components/palette/case-flag/pipes/language-interpreter-display.pipe.d.ts.map +0 -1
  414. package/lib/shared/components/palette/case-flag/pipes/manage-case-flags-label-display.pipe.d.ts +0 -25
  415. package/lib/shared/components/palette/case-flag/pipes/manage-case-flags-label-display.pipe.d.ts.map +0 -1
  416. package/lib/shared/components/palette/case-flag/pipes/update-flag-title-display.pipe.d.ts +0 -21
  417. package/lib/shared/components/palette/case-flag/pipes/update-flag-title-display.pipe.d.ts.map +0 -1
  418. package/lib/shared/components/palette/markdown/markdown-component.module.d.ts +0 -13
  419. package/lib/shared/components/palette/markdown/markdown-component.module.d.ts.map +0 -1
  420. package/lib/shared/components/palette/query-management/__mocks__/index.d.ts +0 -5
  421. package/lib/shared/components/palette/query-management/__mocks__/index.d.ts.map +0 -1
  422. package/lib/shared/components/palette/query-management/components/index.d.ts +0 -10
  423. package/lib/shared/components/palette/query-management/components/index.d.ts.map +0 -1
  424. package/lib/shared/components/palette/query-management/components/query-case-details-header/query-case-details-header.component.d.ts +0 -10
  425. package/lib/shared/components/palette/query-management/components/query-case-details-header/query-case-details-header.component.d.ts.map +0 -1
  426. package/lib/shared/components/palette/query-management/components/query-check-your-answers/query-check-your-answers.component.d.ts +0 -18
  427. package/lib/shared/components/palette/query-management/components/query-check-your-answers/query-check-your-answers.component.d.ts.map +0 -1
  428. package/lib/shared/components/palette/query-management/components/query-create/query-create.component.d.ts +0 -9
  429. package/lib/shared/components/palette/query-management/components/query-create/query-create.component.d.ts.map +0 -1
  430. package/lib/shared/components/palette/query-management/components/query-details/query-details.component.d.ts +0 -11
  431. package/lib/shared/components/palette/query-management/components/query-details/query-details.component.d.ts.map +0 -1
  432. package/lib/shared/components/palette/query-management/components/query-details-table/query-details-table.component.d.ts +0 -12
  433. package/lib/shared/components/palette/query-management/components/query-details-table/query-details-table.component.d.ts.map +0 -1
  434. package/lib/shared/components/palette/query-management/components/query-list/query-list.component.d.ts +0 -18
  435. package/lib/shared/components/palette/query-management/components/query-list/query-list.component.d.ts.map +0 -1
  436. package/lib/shared/components/palette/query-management/components/query-management-error-messages/query-management-error-message.model.d.ts +0 -5
  437. package/lib/shared/components/palette/query-management/components/query-management-error-messages/query-management-error-message.model.d.ts.map +0 -1
  438. package/lib/shared/components/palette/query-management/components/query-write/query-write-add-documents/query-write-add-documents.component.d.ts +0 -17
  439. package/lib/shared/components/palette/query-management/components/query-write/query-write-add-documents/query-write-add-documents.component.d.ts.map +0 -1
  440. package/lib/shared/components/palette/query-management/components/query-write/query-write-raise-query/query-write-raise-query.component.d.ts +0 -8
  441. package/lib/shared/components/palette/query-management/components/query-write/query-write-raise-query/query-write-raise-query.component.d.ts.map +0 -1
  442. package/lib/shared/components/palette/query-management/components/query-write/query-write-respond-to-query/query-write-respond-to-query.component.d.ts +0 -18
  443. package/lib/shared/components/palette/query-management/components/query-write/query-write-respond-to-query/query-write-respond-to-query.component.d.ts.map +0 -1
  444. package/lib/shared/components/palette/query-management/index.d.ts +0 -6
  445. package/lib/shared/components/palette/query-management/index.d.ts.map +0 -1
  446. package/lib/shared/components/palette/query-management/models/index.d.ts +0 -7
  447. package/lib/shared/components/palette/query-management/models/index.d.ts.map +0 -1
  448. package/lib/shared/components/palette/query-management/models/party-messages/party-message.model.d.ts +0 -14
  449. package/lib/shared/components/palette/query-management/models/party-messages/party-message.model.d.ts.map +0 -1
  450. package/lib/shared/components/palette/query-management/models/party-messages/party-messages-group.model.d.ts +0 -7
  451. package/lib/shared/components/palette/query-management/models/party-messages/party-messages-group.model.d.ts.map +0 -1
  452. package/lib/shared/components/palette/query-management/models/query-list/query-list-column/query-list-column.model.d.ts +0 -7
  453. package/lib/shared/components/palette/query-management/models/query-list/query-list-column/query-list-column.model.d.ts.map +0 -1
  454. package/lib/shared/components/palette/query-management/models/query-list/query-list-data/query-list-data.model.d.ts +0 -10
  455. package/lib/shared/components/palette/query-management/models/query-list/query-list-data/query-list-data.model.d.ts.map +0 -1
  456. package/lib/shared/components/palette/query-management/models/query-list/query-list-item/query-list-item.model.d.ts +0 -21
  457. package/lib/shared/components/palette/query-management/models/query-list/query-list-item/query-list-item.model.d.ts.map +0 -1
  458. package/lib/shared/components/palette/query-management/models/query-list/query-list-response-status.enum.d.ts +0 -6
  459. package/lib/shared/components/palette/query-management/models/query-list/query-list-response-status.enum.d.ts.map +0 -1
  460. package/lib/shared/components/palette/query-management/read-query-management-field.component.d.ts +0 -17
  461. package/lib/shared/components/palette/query-management/read-query-management-field.component.d.ts.map +0 -1
  462. package/lib/shared/components/palette/query-management/utils/query-management.utils.d.ts +0 -7
  463. package/lib/shared/components/palette/query-management/utils/query-management.utils.d.ts.map +0 -1
  464. package/lib/shared/components/palette/query-management/write-query-management-field.component.d.ts +0 -16
  465. package/lib/shared/components/palette/query-management/write-query-management-field.component.d.ts.map +0 -1
  466. package/lib/shared/domain/alert/alert-status-params.model.d.ts +0 -6
  467. package/lib/shared/domain/alert/alert-status-params.model.d.ts.map +0 -1
  468. package/lib/shared/domain/case-view/case-view-event-ids.enum.d.ts +0 -5
  469. package/lib/shared/domain/case-view/case-view-event-ids.enum.d.ts.map +0 -1
  470. package/lib/shared/pipes/generic/enum-display-description/enum-display-description.pipe.d.ts +0 -8
  471. package/lib/shared/pipes/generic/enum-display-description/enum-display-description.pipe.d.ts.map +0 -1
  472. package/lib/shared/pipes/generic/index.d.ts +0 -2
  473. package/lib/shared/pipes/generic/index.d.ts.map +0 -1
@@ -1,19 +1,23 @@
1
1
  import { Component, EventEmitter, Input, Output } from '@angular/core';
2
- import { FormBuilder, FormGroup, Validators } from '@angular/forms';
2
+ import { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';
3
3
  import { ActivatedRoute, Router } from '@angular/router';
4
+ import { Subject } from 'rxjs';
5
+ import { finalize } from 'rxjs/operators';
4
6
  import { ConditionalShowRegistrarService, GreyBarService } from '../../../directives';
5
7
  import { CaseEventTrigger, CaseView } from '../../../domain';
6
- import { FieldsPurger, FieldsUtils, SessionStorageService, WindowService } from '../../../services';
7
- import { WizardFactoryService } from '../services';
8
+ import { FieldsPurger, FieldsUtils, FormErrorService, FormValueService, LoadingService, SessionStorageService, WindowService } from '../../../services';
9
+ import { Confirmation } from '../domain';
10
+ import { CaseNotifier, WizardFactoryService } from '../services';
8
11
  import * as i0 from "@angular/core";
9
12
  import * as i1 from "@angular/forms";
10
- import * as i2 from "@angular/router";
11
- import * as i3 from "../../../services";
12
- import * as i4 from "../../../directives";
13
- import * as i5 from "../services";
13
+ import * as i2 from "../services";
14
+ import * as i3 from "@angular/router";
15
+ import * as i4 from "../../../services";
16
+ import * as i5 from "../../../directives";
14
17
  export class CaseEditComponent {
15
- constructor(fb, router, route, fieldsUtils, fieldsPurger, registrarService, wizardFactory, sessionStorageService, windowsService) {
18
+ constructor(fb, caseNotifier, router, route, fieldsUtils, fieldsPurger, registrarService, wizardFactory, sessionStorageService, windowsService, formValueService, formErrorService, loadingService) {
16
19
  this.fb = fb;
20
+ this.caseNotifier = caseNotifier;
17
21
  this.router = router;
18
22
  this.route = route;
19
23
  this.fieldsUtils = fieldsUtils;
@@ -22,14 +26,23 @@ export class CaseEditComponent {
22
26
  this.wizardFactory = wizardFactory;
23
27
  this.sessionStorageService = sessionStorageService;
24
28
  this.windowsService = windowsService;
29
+ this.formValueService = formValueService;
30
+ this.formErrorService = formErrorService;
31
+ this.loadingService = loadingService;
25
32
  this.cancelled = new EventEmitter();
26
33
  this.submitted = new EventEmitter();
34
+ this.isEventCompletionChecksRequired = false;
35
+ this.isCaseFlagSubmission = false;
36
+ this.ignoreWarning = false;
37
+ this.isLinkedCasesSubmission = false;
38
+ this.callbackErrorsSubject = new Subject();
27
39
  }
28
40
  ngOnInit() {
29
41
  this.wizard = this.wizardFactory.create(this.eventTrigger);
30
42
  this.initialUrl = this.sessionStorageService.getItem('eventUrl');
31
43
  this.isPageRefreshed = JSON.parse(this.sessionStorageService.getItem('isPageRefreshed'));
32
44
  this.checkPageRefresh();
45
+ /* istanbul ignore else */
33
46
  if (this.router.url && !this.isPageRefreshed) {
34
47
  this.sessionStorageService.setItem('eventUrl', this.router.url);
35
48
  }
@@ -45,6 +58,12 @@ export class CaseEditComponent {
45
58
  this.navigationOrigin = params[CaseEditComponent.ORIGIN_QUERY_PARAM];
46
59
  });
47
60
  }
61
+ ngOnDestroy() {
62
+ /* istanbul ignore else */
63
+ if (this.callbackErrorsSubject) {
64
+ this.callbackErrorsSubject.unsubscribe();
65
+ }
66
+ }
48
67
  checkPageRefresh() {
49
68
  if (this.isPageRefreshed && this.initialUrl) {
50
69
  this.sessionStorageService.removeItem('eventUrl');
@@ -67,20 +86,37 @@ export class CaseEditComponent {
67
86
  }
68
87
  next(currentPageId) {
69
88
  this.initialUrl = this.sessionStorageService.getItem('eventUrl');
89
+ /* istanbul ignore else */
70
90
  if (this.router.url && !this.initialUrl) {
71
91
  this.sessionStorageService.setItem('eventUrl', this.router.url);
72
92
  }
73
93
  this.fieldsPurger.clearHiddenFields(this.form, this.wizard, this.eventTrigger, currentPageId);
94
+ const nextPage = this.getNextPage({
95
+ currentPageId,
96
+ wizard: this.wizard,
97
+ eventTrigger: this.eventTrigger,
98
+ form: this.form,
99
+ });
100
+ /* istanbul ignore else */
101
+ if (!nextPage && !this.eventTrigger.show_summary && !this.eventTrigger.show_event_notes) {
102
+ this.submitForm({
103
+ eventTrigger: this.eventTrigger,
104
+ form: this.form,
105
+ submit: this.submit,
106
+ caseDetails: this.caseDetails,
107
+ });
108
+ return;
109
+ }
74
110
  this.registrarService.reset();
75
111
  const theQueryParams = {};
76
112
  theQueryParams[CaseEditComponent.ORIGIN_QUERY_PARAM] = this.navigationOrigin;
77
- const nextPage = this.wizard.nextPage(currentPageId, this.fieldsUtils.buildCanShowPredicate(this.eventTrigger, this.form));
78
113
  return this.router.navigate([nextPage ? nextPage.id : 'submit'], { queryParams: theQueryParams, relativeTo: this.route });
79
114
  }
80
115
  previous(currentPageId) {
81
116
  this.fieldsPurger.clearHiddenFields(this.form, this.wizard, this.eventTrigger, currentPageId);
82
117
  this.registrarService.reset();
83
118
  const previousPage = this.wizard.previousPage(currentPageId, this.fieldsUtils.buildCanShowPredicate(this.eventTrigger, this.form));
119
+ /* istanbul ignore else */
84
120
  if (!previousPage) {
85
121
  return Promise.resolve(false);
86
122
  }
@@ -94,17 +130,240 @@ export class CaseEditComponent {
94
130
  cancel() {
95
131
  this.cancelled.emit();
96
132
  }
133
+ emitSubmitted(response) {
134
+ this.submitted.emit({ caseId: response['id'], status: this.getStatus(response) });
135
+ }
136
+ getNextPage({ wizard, currentPageId, eventTrigger, form }) {
137
+ return wizard.nextPage(currentPageId, this.fieldsUtils.buildCanShowPredicate(eventTrigger, form));
138
+ }
97
139
  confirm(confirmation) {
98
140
  this.confirmation = confirmation;
99
141
  return this.router.navigate(['confirm'], { relativeTo: this.route });
100
142
  }
143
+ submitForm({ eventTrigger, form, caseDetails, submit }) {
144
+ this.isSubmitting = true;
145
+ // We have to run the event completion checks if task in session storage
146
+ // and if the task is in session storage, then is it associated to the case
147
+ let taskInSessionStorage;
148
+ const taskStr = this.sessionStorageService.getItem('taskToComplete');
149
+ if (taskStr) {
150
+ taskInSessionStorage = JSON.parse(taskStr);
151
+ }
152
+ if (taskInSessionStorage && taskInSessionStorage.case_id === this.getCaseId(caseDetails)) {
153
+ // Show event completion component to perform event completion checks
154
+ this.eventCompletionParams = ({
155
+ caseId: this.getCaseId(caseDetails),
156
+ eventId: this.getEventId(form),
157
+ task: taskInSessionStorage
158
+ });
159
+ this.isEventCompletionChecksRequired = true;
160
+ }
161
+ else {
162
+ // Task not in session storage, proceed to submit
163
+ const caseEventData = this.generateCaseEventData({
164
+ eventTrigger,
165
+ form
166
+ });
167
+ this.caseSubmit({ form,
168
+ caseEventData,
169
+ submit
170
+ });
171
+ }
172
+ }
173
+ getCaseId(caseDetails) {
174
+ return (caseDetails ? caseDetails.case_id : '');
175
+ }
176
+ getEventId(form) {
177
+ return form.value.event.id;
178
+ }
179
+ generateCaseEventData({ eventTrigger, form }) {
180
+ const caseEventData = {
181
+ data: this.replaceEmptyComplexFieldValues(this.formValueService.sanitise(this.replaceHiddenFormValuesWithOriginalCaseData(form.get('data'), eventTrigger.case_fields))),
182
+ event: form.value.event
183
+ };
184
+ this.formValueService.clearNonCaseFields(caseEventData.data, eventTrigger.case_fields);
185
+ this.formValueService.removeNullLabels(caseEventData.data, eventTrigger.case_fields);
186
+ this.formValueService.removeEmptyDocuments(caseEventData.data, eventTrigger.case_fields);
187
+ // Remove collection fields that have "min" validation of greater than zero set on the FieldType but are empty;
188
+ // these will fail validation
189
+ this.formValueService.removeEmptyCollectionsWithMinValidation(caseEventData.data, eventTrigger.case_fields);
190
+ // If this is a Case Flag submission (and thus a FlagLauncher field is present in the event trigger), the flag
191
+ // details data needs populating for each Flags field, then the FlagLauncher field needs removing
192
+ if (this.isCaseFlagSubmission) {
193
+ this.formValueService.populateFlagDetailsFromCaseFields(caseEventData.data, eventTrigger.case_fields);
194
+ this.formValueService.removeFlagLauncherField(caseEventData.data, eventTrigger.case_fields);
195
+ }
196
+ if (this.isLinkedCasesSubmission) {
197
+ this.formValueService.populateLinkedCasesDetailsFromCaseFields(caseEventData.data, eventTrigger.case_fields);
198
+ this.formValueService.removeComponentLauncherField(caseEventData.data, eventTrigger.case_fields);
199
+ }
200
+ caseEventData.event_token = eventTrigger.event_token;
201
+ caseEventData.ignore_warning = this.ignoreWarning;
202
+ if (this.confirmation) {
203
+ caseEventData.data = {};
204
+ }
205
+ return caseEventData;
206
+ }
207
+ /**
208
+ * Replaces non-array value objects with `null` for any Complex-type fields whose value is effectively empty, i.e.
209
+ * all its sub-fields and descendants are `null` or `undefined`.
210
+ *
211
+ * @param data The object tree representing all the form field data
212
+ * @returns The form field data modified accordingly
213
+ */
214
+ replaceEmptyComplexFieldValues(data) {
215
+ Object.keys(data).forEach((key) => {
216
+ if (!Array.isArray(data[key]) && typeof data[key] === 'object' && !FieldsUtils.containsNonEmptyValues(data[key])) {
217
+ data[key] = null;
218
+ }
219
+ });
220
+ return data;
221
+ }
222
+ /**
223
+ * Traverse *all* values of a {@link FormGroup}, including those for disabled fields (i.e. hidden ones), replacing the
224
+ * value of any that are hidden AND have `retain_hidden_value` set to `true` in the corresponding `CaseField`, with
225
+ * the *original* value held in the `CaseField` object.
226
+ *
227
+ * This is as per design in EUI-3622, where any user-driven updates to hidden fields with `retain_hidden_value` =
228
+ * `true` are ignored (thus retaining the value displayed originally).
229
+ *
230
+ * * For Complex field types, the replacement above is performed recursively for all hidden sub-fields with
231
+ * `retain_hidden_value` = `true`.
232
+ *
233
+ * * For Collection field types, including collections of Complex and Document field types, the replacement is
234
+ * performed for all fields in the collection.
235
+ *
236
+ * @param formGroup The `FormGroup` instance whose raw values are to be traversed
237
+ * @param caseFields The array of {@link CaseField} domain model objects corresponding to fields in `formGroup`
238
+ * @param parentField Reference to the parent `CaseField`. Used for retrieving the sub-field values of a Complex field
239
+ * to perform recursive replacement - the sub-field `CaseField`s themselves do *not* contain any values
240
+ * @returns An object with the *raw* form value data (as key-value pairs), with any value replacements as necessary
241
+ */
242
+ replaceHiddenFormValuesWithOriginalCaseData(formGroup, caseFields, parentField) {
243
+ // Get the raw form value data, which includes the values of any disabled controls, as key-value pairs
244
+ const rawFormValueData = formGroup.getRawValue();
245
+ // Place all case fields in a lookup object, so they can be retrieved by id
246
+ const caseFieldsLookup = {};
247
+ for (let i = 0, len = caseFields.length; i < len; i++) {
248
+ caseFieldsLookup[caseFields[i].id] = caseFields[i];
249
+ }
250
+ /**
251
+ * Replace any form value with the original, where its CaseField is hidden AND has the retain_hidden_value flag set
252
+ * to true.
253
+ *
254
+ * If the CaseField's `hidden` attribute is null or undefined, then check this attribute in the parent CaseField (if
255
+ * one exists). This is occurring (and is possibly a bug) when a CaseField is a sub-field of a Complex type, or an
256
+ * item in a Collection type.
257
+ *
258
+ * If the field is a Complex type with retain_hidden_value = true, perform a recursive replacement for all (hidden)
259
+ * sub-fields with retain_hidden_value = true, using their original CaseField values (from the `formatted_value`
260
+ * attribute).
261
+ *
262
+ * If the field is a Collection type with retain_hidden_value = true, the entire collection is replaced with the
263
+ * original from `formatted_value`. This applies to *all* types of Collections.
264
+ */
265
+ /* istanbul ignore next */
266
+ Object.keys(rawFormValueData).forEach((key) => {
267
+ const caseField = caseFieldsLookup[key];
268
+ // If caseField.hidden is NOT truthy and also NOT equal to false, then it must be null/undefined (remember that
269
+ // both null and undefined are equal to *neither false nor true*)
270
+ if (caseField && caseField.retain_hidden_value &&
271
+ (caseField.hidden || (caseField.hidden !== false && parentField && parentField.hidden))) {
272
+ if (caseField.field_type.type === 'Complex') {
273
+ // Note: Deliberate use of equality (==) and non-equality (!=) operators for null checks throughout, to
274
+ // handle both null and undefined values
275
+ if (caseField.value != null) {
276
+ // Call this function recursively to replace the Complex field's sub-fields as necessary, passing the
277
+ // CaseField itself (the sub-fields do not contain any values, so these need to be obtained from the
278
+ // parent)
279
+ // Update rawFormValueData for this field
280
+ // creating form group and adding control into it in case caseField is of complext type and and part of formGroup
281
+ const form = new FormGroup({});
282
+ if (formGroup.controls[key].value) {
283
+ Object.keys(formGroup.controls[key].value).forEach((item) => {
284
+ form.addControl(item, new FormControl(formGroup.controls[key].value[item]));
285
+ });
286
+ }
287
+ rawFormValueData[key] = this.replaceHiddenFormValuesWithOriginalCaseData(form, caseField.field_type.complex_fields, caseField);
288
+ }
289
+ }
290
+ else {
291
+ // Default case also handles collections of *all* types; the entire collection in rawFormValueData will be
292
+ // replaced with the original from formatted_value
293
+ // Use the CaseField's existing *formatted_value* from the parent, if available. (This is necessary for
294
+ // Complex fields, whose sub-fields do not hold any values in the model.) Otherwise, use formatted_value
295
+ // from the CaseField itself.
296
+ if (parentField && parentField.formatted_value) {
297
+ rawFormValueData[key] = parentField.formatted_value[caseField.id];
298
+ }
299
+ else {
300
+ rawFormValueData[key] = caseField.formatted_value;
301
+ }
302
+ }
303
+ }
304
+ });
305
+ return rawFormValueData;
306
+ }
307
+ caseSubmit({ form, caseEventData, submit }) {
308
+ const loadingSpinnerToken = this.loadingService.register();
309
+ submit(caseEventData)
310
+ .pipe(finalize(() => {
311
+ this.loadingService.unregister(loadingSpinnerToken);
312
+ }))
313
+ .subscribe(response => {
314
+ this.caseNotifier.cachedCaseView = null;
315
+ this.sessionStorageService.removeItem('eventUrl');
316
+ const confirmation = this.buildConfirmation(response);
317
+ if (confirmation && (confirmation.getHeader() || confirmation.getBody())) {
318
+ // Add finally to fix sonar bug
319
+ this.confirm(confirmation).finally();
320
+ }
321
+ else {
322
+ this.emitSubmitted(response);
323
+ }
324
+ }, error => {
325
+ this.error = error;
326
+ this.callbackErrorsSubject.next(error);
327
+ /* istanbul ignore else */
328
+ if (this.error.details) {
329
+ this.formErrorService
330
+ .mapFieldErrors(this.error.details.field_errors, form.controls['data'], 'validation');
331
+ }
332
+ this.isSubmitting = false;
333
+ });
334
+ }
335
+ buildConfirmation(response) {
336
+ if (response['after_submit_callback_response']) {
337
+ return new Confirmation(response['id'], response['callback_response_status'], response['after_submit_callback_response']['confirmation_header'], response['after_submit_callback_response']['confirmation_body']);
338
+ }
339
+ else {
340
+ return null;
341
+ }
342
+ }
343
+ onEventCanBeCompleted({ eventTrigger, eventCanBeCompleted, caseDetails, form, submit }) {
344
+ if (eventCanBeCompleted) {
345
+ // Submit
346
+ const caseEventData = this.generateCaseEventData({ eventTrigger, form });
347
+ this.caseSubmit({ form, caseEventData, submit });
348
+ }
349
+ else {
350
+ // Navigate to tasks tab on case details page
351
+ this.router.navigate([`/cases/case-details/${this.getCaseId(caseDetails)}/tasks`], { relativeTo: this.route });
352
+ }
353
+ }
354
+ getStatus(response) {
355
+ return this.hasCallbackFailed(response) ? response['callback_response_status'] : response['delete_draft_response_status'];
356
+ }
357
+ hasCallbackFailed(response) {
358
+ return response['callback_response_status'] !== 'CALLBACK_COMPLETED';
359
+ }
101
360
  }
102
361
  CaseEditComponent.ORIGIN_QUERY_PARAM = 'origin';
103
362
  CaseEditComponent.ALERT_MESSAGE = 'Page is being refreshed so you will be redirected to the first page of this event.';
104
- CaseEditComponent.ɵfac = function CaseEditComponent_Factory(t) { return new (t || CaseEditComponent)(i0.ɵɵdirectiveInject(i1.FormBuilder), i0.ɵɵdirectiveInject(i2.Router), i0.ɵɵdirectiveInject(i2.ActivatedRoute), i0.ɵɵdirectiveInject(i3.FieldsUtils), i0.ɵɵdirectiveInject(i3.FieldsPurger), i0.ɵɵdirectiveInject(i4.ConditionalShowRegistrarService), i0.ɵɵdirectiveInject(i5.WizardFactoryService), i0.ɵɵdirectiveInject(i3.SessionStorageService), i0.ɵɵdirectiveInject(i3.WindowService)); };
363
+ CaseEditComponent.ɵfac = function CaseEditComponent_Factory(t) { return new (t || CaseEditComponent)(i0.ɵɵdirectiveInject(i1.FormBuilder), i0.ɵɵdirectiveInject(i2.CaseNotifier), i0.ɵɵdirectiveInject(i3.Router), i0.ɵɵdirectiveInject(i3.ActivatedRoute), i0.ɵɵdirectiveInject(i4.FieldsUtils), i0.ɵɵdirectiveInject(i4.FieldsPurger), i0.ɵɵdirectiveInject(i5.ConditionalShowRegistrarService), i0.ɵɵdirectiveInject(i2.WizardFactoryService), i0.ɵɵdirectiveInject(i4.SessionStorageService), i0.ɵɵdirectiveInject(i4.WindowService), i0.ɵɵdirectiveInject(i4.FormValueService), i0.ɵɵdirectiveInject(i4.FormErrorService), i0.ɵɵdirectiveInject(i4.LoadingService)); };
105
364
  CaseEditComponent.ɵcmp = i0.ɵɵdefineComponent({ type: CaseEditComponent, selectors: [["ccd-case-edit"]], inputs: { eventTrigger: "eventTrigger", submit: "submit", validate: "validate", saveDraft: "saveDraft", caseDetails: "caseDetails" }, outputs: { cancelled: "cancelled", submitted: "submitted" }, features: [i0.ɵɵProvidersFeature([GreyBarService])], decls: 1, vars: 0, template: function CaseEditComponent_Template(rf, ctx) { if (rf & 1) {
106
365
  i0.ɵɵelement(0, "router-outlet");
107
- } }, directives: [i2.RouterOutlet], styles: ["#fieldset-case-data[_ngcontent-%COMP%]{margin-bottom:30px}#fieldset-case-data[_ngcontent-%COMP%] th[_ngcontent-%COMP%]{width:1%;white-space:nowrap;vertical-align:top}.compound-field[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{padding:0}#confirmation-header[_ngcontent-%COMP%]{width:630px;background-color:#17958b;border:1px solid #979797;color:#fff;text-align:center}#confirmation-body[_ngcontent-%COMP%]{width:630px;background-color:#fff}.valign-top[_ngcontent-%COMP%]{vertical-align:top}.summary-fields[_ngcontent-%COMP%]{margin-bottom:30px}.summary-fields[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] td[_ngcontent-%COMP%], .summary-fields[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] th[_ngcontent-%COMP%]{border-bottom:0}a.disabled[_ngcontent-%COMP%]{pointer-events:none;cursor:default}.case-field-label[_ngcontent-%COMP%]{width:45%}.case-field-content[_ngcontent-%COMP%]{width:50%}.no-bottom-border[_ngcontent-%COMP%]{border-bottom:none}.case-field-change[_ngcontent-%COMP%]{width:5%}"] });
366
+ } }, directives: [i3.RouterOutlet], styles: ["#fieldset-case-data[_ngcontent-%COMP%]{margin-bottom:30px}#fieldset-case-data[_ngcontent-%COMP%] th[_ngcontent-%COMP%]{width:1%;white-space:nowrap;vertical-align:top}.compound-field[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{padding:0}#confirmation-header[_ngcontent-%COMP%]{width:630px;background-color:#17958b;border:1px solid #979797;color:#fff;text-align:center}#confirmation-body[_ngcontent-%COMP%]{width:630px;background-color:#fff}.valign-top[_ngcontent-%COMP%]{vertical-align:top}.summary-fields[_ngcontent-%COMP%]{margin-bottom:30px}.summary-fields[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] td[_ngcontent-%COMP%], .summary-fields[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%] th[_ngcontent-%COMP%]{border-bottom:0}a.disabled[_ngcontent-%COMP%]{pointer-events:none;cursor:default}.case-field-label[_ngcontent-%COMP%]{width:45%}.case-field-content[_ngcontent-%COMP%]{width:50%}.case-field-change[_ngcontent-%COMP%]{width:5%}"] });
108
367
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CaseEditComponent, [{
109
368
  type: Component,
110
369
  args: [{
@@ -113,7 +372,7 @@ CaseEditComponent.ɵcmp = i0.ɵɵdefineComponent({ type: CaseEditComponent, sele
113
372
  styleUrls: ['../case-edit.scss'],
114
373
  providers: [GreyBarService]
115
374
  }]
116
- }], function () { return [{ type: i1.FormBuilder }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i3.FieldsUtils }, { type: i3.FieldsPurger }, { type: i4.ConditionalShowRegistrarService }, { type: i5.WizardFactoryService }, { type: i3.SessionStorageService }, { type: i3.WindowService }]; }, { eventTrigger: [{
375
+ }], function () { return [{ type: i1.FormBuilder }, { type: i2.CaseNotifier }, { type: i3.Router }, { type: i3.ActivatedRoute }, { type: i4.FieldsUtils }, { type: i4.FieldsPurger }, { type: i5.ConditionalShowRegistrarService }, { type: i2.WizardFactoryService }, { type: i4.SessionStorageService }, { type: i4.WindowService }, { type: i4.FormValueService }, { type: i4.FormErrorService }, { type: i4.LoadingService }]; }, { eventTrigger: [{
117
376
  type: Input
118
377
  }], submit: [{
119
378
  type: Input
@@ -128,4 +387,4 @@ CaseEditComponent.ɵcmp = i0.ɵɵdefineComponent({ type: CaseEditComponent, sele
128
387
  }], submitted: [{
129
388
  type: Output
130
389
  }] }); })();
131
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS1lZGl0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9jYXNlLWVkaXRvci9jYXNlLWVkaXQvY2FzZS1lZGl0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9jYXNlLWVkaXRvci9jYXNlLWVkaXQvY2FzZS1lZGl0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGNBQWMsRUFBVSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUdqRSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBa0IsTUFBTSxpQkFBaUIsQ0FBQztBQUM3RSxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxxQkFBcUIsRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVwRyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7Ozs7QUFRbkQsTUFBTSxPQUFPLGlCQUFpQjtJQXFDNUIsWUFDbUIsRUFBZSxFQUNmLE1BQWMsRUFDZCxLQUFxQixFQUNyQixXQUF3QixFQUN4QixZQUEwQixFQUMxQixnQkFBaUQsRUFDakQsYUFBbUMsRUFDbkMscUJBQTRDLEVBQzVDLGNBQTZCO1FBUjdCLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFpQztRQUNqRCxrQkFBYSxHQUFiLGFBQWEsQ0FBc0I7UUFDbkMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1QyxtQkFBYyxHQUFkLGNBQWMsQ0FBZTtRQTFCekMsY0FBUyxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBR2xELGNBQVMsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQXdCdEQsQ0FBQztJQUVHLFFBQVE7UUFDYixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1FBRXpGLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQzVDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDakU7UUFFRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ3hCLElBQUksRUFBRSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDdkIsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDO2dCQUNuQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO2dCQUMvQyxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2IsV0FBVyxFQUFFLENBQUMsRUFBRSxDQUFDO2FBQ2xCLENBQUM7U0FDSCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFjLEVBQUUsRUFBRTtZQUNsRCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDdkUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sZ0JBQWdCO1FBQ3JCLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQzNDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDbEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDM0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBQyxDQUFDLENBQUM7WUFDbkUsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVNLE9BQU8sQ0FBQyxNQUFjO1FBQzNCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMzRyxDQUFDO0lBRU0sS0FBSztRQUNWLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUM5RyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNqRyxDQUFDO0lBRU0sY0FBYyxDQUFDLE1BQWM7UUFDbEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNsQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN2RixDQUFDO0lBRU0sSUFBSSxDQUFDLGFBQXFCO1FBQy9CLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqRSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUN2QyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ2pFO1FBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUMsQ0FBQztRQUM5RixJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFOUIsTUFBTSxjQUFjLEdBQVcsRUFBRSxDQUFDO1FBQ2xDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUM3RSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzNILE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDNUgsQ0FBQztJQUVNLFFBQVEsQ0FBQyxhQUFxQjtRQUNuQyxJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzlGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUU5QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ25JLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDakIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQy9CO1FBRUQsTUFBTSxjQUFjLEdBQVcsRUFBRSxDQUFDO1FBQ2xDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUM3RSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDMUcsQ0FBQztJQUVNLFdBQVcsQ0FBQyxhQUFxQjtRQUN0QyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDMUgsQ0FBQztJQUVNLE1BQU07UUFDWCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFTSxPQUFPLENBQUMsWUFBMEI7UUFDdkMsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUMsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7O0FBdklzQixvQ0FBa0IsR0FBRyxRQUFRLENBQUM7QUFDOUIsK0JBQWEsR0FBRyxvRkFBb0YsQ0FBQztrRkFGakgsaUJBQWlCO3NEQUFqQixpQkFBaUIsc1FBRmpCLENBQUMsY0FBYyxDQUFDO1FDZjdCLGdDQUErQjs7dUZEaUJsQixpQkFBaUI7Y0FON0IsU0FBUztlQUFDO2dCQUNULFFBQVEsRUFBRSxlQUFlO2dCQUN6QixXQUFXLEVBQUUsMEJBQTBCO2dCQUN2QyxTQUFTLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztnQkFDaEMsU0FBUyxFQUFFLENBQUMsY0FBYyxDQUFDO2FBQzVCO3NUQU1RLFlBQVk7a0JBRGxCLEtBQUs7WUFJQyxNQUFNO2tCQURaLEtBQUs7WUFJQyxRQUFRO2tCQURkLEtBQUs7WUFJQyxTQUFTO2tCQURmLEtBQUs7WUFJQyxXQUFXO2tCQURqQixLQUFLO1lBSUMsU0FBUztrQkFEZixNQUFNO1lBSUEsU0FBUztrQkFEZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBQYXJhbXMsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IENvbmRpdGlvbmFsU2hvd1JlZ2lzdHJhclNlcnZpY2UsIEdyZXlCYXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBDYXNlRXZlbnRUcmlnZ2VyLCBDYXNlVmlldywgRHJhZnQsIFByb2ZpbGUgfSBmcm9tICcuLi8uLi8uLi9kb21haW4nO1xuaW1wb3J0IHsgRmllbGRzUHVyZ2VyLCBGaWVsZHNVdGlscywgU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLCBXaW5kb3dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgQ29uZmlybWF0aW9uLCBXaXphcmQsIFdpemFyZFBhZ2UgfSBmcm9tICcuLi9kb21haW4nO1xuaW1wb3J0IHsgV2l6YXJkRmFjdG9yeVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NjZC1jYXNlLWVkaXQnLFxuICB0ZW1wbGF0ZVVybDogJ2Nhc2UtZWRpdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuLi9jYXNlLWVkaXQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtHcmV5QmFyU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgQ2FzZUVkaXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE9SSUdJTl9RVUVSWV9QQVJBTSA9ICdvcmlnaW4nO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEFMRVJUX01FU1NBR0UgPSAnUGFnZSBpcyBiZWluZyByZWZyZXNoZWQgc28geW91IHdpbGwgYmUgcmVkaXJlY3RlZCB0byB0aGUgZmlyc3QgcGFnZSBvZiB0aGlzIGV2ZW50Lic7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGV2ZW50VHJpZ2dlcjogQ2FzZUV2ZW50VHJpZ2dlcjtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc3VibWl0OiAoY2FzZUV2ZW50RGF0YSwgcHJvZmlsZT86IFByb2ZpbGUpID0+IE9ic2VydmFibGU8b2JqZWN0PjtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgdmFsaWRhdGU6IChjYXNlRXZlbnREYXRhLCBwYWdlSWQ6IHN0cmluZykgPT4gT2JzZXJ2YWJsZTxvYmplY3Q+O1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzYXZlRHJhZnQ6IChjYXNlRXZlbnREYXRhKSA9PiBPYnNlcnZhYmxlPERyYWZ0PjtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgY2FzZURldGFpbHM6IENhc2VWaWV3O1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgY2FuY2VsbGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIHN1Ym1pdHRlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcHVibGljIHdpemFyZDogV2l6YXJkO1xuXG4gIHB1YmxpYyBmb3JtOiBGb3JtR3JvdXA7XG5cbiAgcHVibGljIGNvbmZpcm1hdGlvbjogQ29uZmlybWF0aW9uO1xuXG4gIHB1YmxpYyBuYXZpZ2F0aW9uT3JpZ2luOiBhbnk7XG5cbiAgcHVibGljIGluaXRpYWxVcmw6IHN0cmluZztcblxuICBwdWJsaWMgaXNQYWdlUmVmcmVzaGVkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSBmaWVsZHNVdGlsczogRmllbGRzVXRpbHMsXG4gICAgcHJpdmF0ZSByZWFkb25seSBmaWVsZHNQdXJnZXI6IEZpZWxkc1B1cmdlcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlZ2lzdHJhclNlcnZpY2U6IENvbmRpdGlvbmFsU2hvd1JlZ2lzdHJhclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSB3aXphcmRGYWN0b3J5OiBXaXphcmRGYWN0b3J5U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNlc3Npb25TdG9yYWdlU2VydmljZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgd2luZG93c1NlcnZpY2U6IFdpbmRvd1NlcnZpY2VcbiAgKSB7fVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLndpemFyZCA9IHRoaXMud2l6YXJkRmFjdG9yeS5jcmVhdGUodGhpcy5ldmVudFRyaWdnZXIpO1xuICAgIHRoaXMuaW5pdGlhbFVybCA9IHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ2V2ZW50VXJsJyk7XG4gICAgdGhpcy5pc1BhZ2VSZWZyZXNoZWQgPSBKU09OLnBhcnNlKHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ2lzUGFnZVJlZnJlc2hlZCcpKTtcblxuICAgIHRoaXMuY2hlY2tQYWdlUmVmcmVzaCgpO1xuICAgIGlmICh0aGlzLnJvdXRlci51cmwgJiYgIXRoaXMuaXNQYWdlUmVmcmVzaGVkKSB7XG4gICAgICB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5zZXRJdGVtKCdldmVudFVybCcsIHRoaXMucm91dGVyLnVybCk7XG4gICAgfVxuXG4gICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBkYXRhOiBuZXcgRm9ybUdyb3VwKHt9KSxcbiAgICAgIGV2ZW50OiB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgaWQ6IFt0aGlzLmV2ZW50VHJpZ2dlci5pZCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICAgIHN1bW1hcnk6IFsnJ10sXG4gICAgICAgIGRlc2NyaXB0aW9uOiBbJyddXG4gICAgICB9KVxuICAgIH0pO1xuXG4gICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtczogUGFyYW1zKSA9PiB7XG4gICAgICB0aGlzLm5hdmlnYXRpb25PcmlnaW4gPSBwYXJhbXNbQ2FzZUVkaXRDb21wb25lbnQuT1JJR0lOX1FVRVJZX1BBUkFNXTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjaGVja1BhZ2VSZWZyZXNoKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzUGFnZVJlZnJlc2hlZCAmJiB0aGlzLmluaXRpYWxVcmwpIHtcbiAgICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnJlbW92ZUl0ZW0oJ2V2ZW50VXJsJyk7XG4gICAgICB0aGlzLndpbmRvd3NTZXJ2aWNlLmFsZXJ0KENhc2VFZGl0Q29tcG9uZW50LkFMRVJUX01FU1NBR0UpO1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMuaW5pdGlhbFVybF0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZX0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQYWdlKHBhZ2VJZDogc3RyaW5nKTogV2l6YXJkUGFnZSB7XG4gICAgcmV0dXJuIHRoaXMud2l6YXJkLmdldFBhZ2UocGFnZUlkLCB0aGlzLmZpZWxkc1V0aWxzLmJ1aWxkQ2FuU2hvd1ByZWRpY2F0ZSh0aGlzLmV2ZW50VHJpZ2dlciwgdGhpcy5mb3JtKSk7XG4gIH1cblxuICBwdWJsaWMgZmlyc3QoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgZmlyc3RQYWdlID0gdGhpcy53aXphcmQuZmlyc3RQYWdlKHRoaXMuZmllbGRzVXRpbHMuYnVpbGRDYW5TaG93UHJlZGljYXRlKHRoaXMuZXZlbnRUcmlnZ2VyLCB0aGlzLmZvcm0pKTtcbiAgICByZXR1cm4gdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2ZpcnN0UGFnZSA/IGZpcnN0UGFnZS5pZCA6ICdzdWJtaXQnXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICB9XG5cbiAgcHVibGljIG5hdmlnYXRlVG9QYWdlKHBhZ2VJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcGFnZSA9IHRoaXMuZ2V0UGFnZShwYWdlSWQpO1xuICAgIHJldHVybiB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbcGFnZSA/IHBhZ2UuaWQgOiAnc3VibWl0J10sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZXh0KGN1cnJlbnRQYWdlSWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRoaXMuaW5pdGlhbFVybCA9IHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ2V2ZW50VXJsJyk7XG4gICAgaWYgKHRoaXMucm91dGVyLnVybCAmJiAhdGhpcy5pbml0aWFsVXJsKSB7XG4gICAgICB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5zZXRJdGVtKCdldmVudFVybCcsIHRoaXMucm91dGVyLnVybCk7XG4gICAgfVxuICAgIHRoaXMuZmllbGRzUHVyZ2VyLmNsZWFySGlkZGVuRmllbGRzKHRoaXMuZm9ybSwgdGhpcy53aXphcmQsIHRoaXMuZXZlbnRUcmlnZ2VyLCBjdXJyZW50UGFnZUlkKTtcbiAgICB0aGlzLnJlZ2lzdHJhclNlcnZpY2UucmVzZXQoKTtcblxuICAgIGNvbnN0IHRoZVF1ZXJ5UGFyYW1zOiBQYXJhbXMgPSB7fTtcbiAgICB0aGVRdWVyeVBhcmFtc1tDYXNlRWRpdENvbXBvbmVudC5PUklHSU5fUVVFUllfUEFSQU1dID0gdGhpcy5uYXZpZ2F0aW9uT3JpZ2luO1xuICAgIGNvbnN0IG5leHRQYWdlID0gdGhpcy53aXphcmQubmV4dFBhZ2UoY3VycmVudFBhZ2VJZCwgdGhpcy5maWVsZHNVdGlscy5idWlsZENhblNob3dQcmVkaWNhdGUodGhpcy5ldmVudFRyaWdnZXIsIHRoaXMuZm9ybSkpO1xuICAgIHJldHVybiB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbbmV4dFBhZ2UgPyBuZXh0UGFnZS5pZCA6ICdzdWJtaXQnXSwgeyBxdWVyeVBhcmFtczogdGhlUXVlcnlQYXJhbXMsIHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gIH1cblxuICBwdWJsaWMgcHJldmlvdXMoY3VycmVudFBhZ2VJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgdGhpcy5maWVsZHNQdXJnZXIuY2xlYXJIaWRkZW5GaWVsZHModGhpcy5mb3JtLCB0aGlzLndpemFyZCwgdGhpcy5ldmVudFRyaWdnZXIsIGN1cnJlbnRQYWdlSWQpO1xuICAgIHRoaXMucmVnaXN0cmFyU2VydmljZS5yZXNldCgpO1xuXG4gICAgY29uc3QgcHJldmlvdXNQYWdlID0gdGhpcy53aXphcmQucHJldmlvdXNQYWdlKGN1cnJlbnRQYWdlSWQsIHRoaXMuZmllbGRzVXRpbHMuYnVpbGRDYW5TaG93UHJlZGljYXRlKHRoaXMuZXZlbnRUcmlnZ2VyLCB0aGlzLmZvcm0pKTtcbiAgICBpZiAoIXByZXZpb3VzUGFnZSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgfVxuXG4gICAgY29uc3QgdGhlUXVlcnlQYXJhbXM6IFBhcmFtcyA9IHt9O1xuICAgIHRoZVF1ZXJ5UGFyYW1zW0Nhc2VFZGl0Q29tcG9uZW50Lk9SSUdJTl9RVUVSWV9QQVJBTV0gPSB0aGlzLm5hdmlnYXRpb25PcmlnaW47XG4gICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlKFtwcmV2aW91c1BhZ2UuaWRdLCB7IHF1ZXJ5UGFyYW1zOiB0aGVRdWVyeVBhcmFtcywgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBoYXNQcmV2aW91cyhjdXJyZW50UGFnZUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy53aXphcmQuaGFzUHJldmlvdXNQYWdlKGN1cnJlbnRQYWdlSWQsIHRoaXMuZmllbGRzVXRpbHMuYnVpbGRDYW5TaG93UHJlZGljYXRlKHRoaXMuZXZlbnRUcmlnZ2VyLCB0aGlzLmZvcm0pKTtcbiAgfVxuXG4gIHB1YmxpYyBjYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5jYW5jZWxsZWQuZW1pdCgpO1xuICB9XG5cbiAgcHVibGljIGNvbmZpcm0oY29uZmlybWF0aW9uOiBDb25maXJtYXRpb24pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0aGlzLmNvbmZpcm1hdGlvbiA9IGNvbmZpcm1hdGlvbjtcbiAgICByZXR1cm4gdGhpcy5yb3V0ZXIubmF2aWdhdGUoWydjb25maXJtJ10sIHtyZWxhdGl2ZVRvOiB0aGlzLnJvdXRlfSk7XG4gIH1cbn1cbiIsIjxyb3V0ZXItb3V0bGV0Pjwvcm91dGVyLW91dGxldD5cbiJdfQ==
390
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS1lZGl0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9jYXNlLWVkaXRvci9jYXNlLWVkaXQvY2FzZS1lZGl0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvY29tcG9uZW50cy9jYXNlLWVkaXRvci9jYXNlLWVkaXQvY2FzZS1lZGl0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRixPQUFPLEVBQUUsY0FBYyxFQUFVLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pFLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RixPQUFPLEVBSVUsZ0JBQWdCLEVBQy9CLFFBQVEsRUFDVCxNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFDTCxZQUFZLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFDN0UscUJBQXFCLEVBQUUsYUFBYSxFQUNyQyxNQUFNLG1CQUFtQixDQUFDO0FBQzNCLE9BQU8sRUFBRSxZQUFZLEVBQXNCLE1BQU0sV0FBVyxDQUFDO0FBRTdE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QUE4QixDQUFDLENBQUM7SUFDNUgsQ0FBQztJQUVPLGlCQUFpQixDQUFDLFFBQWdCO1FBQ3hDLE9BQU8sUUFBUSxDQUFDLDBCQUEwQixDQUFDLEtBQUssb0JBQW9CLENBQUM7SUFDdkUsQ0FBQzs7QUF2YnNCLG9DQUFrQixHQUFHLFFBQVEsQ0FBQztBQUM5QiwrQkFBYSxHQUFHLG9GQUFvRixDQUFDO2tGQUZqSCxpQkFBaUI7c0RBQWpCLGlCQUFpQixzUUFGakIsQ0FBQyxjQUFjLENBQUM7UUMzQjdCLGdDQUErQjs7dUZENkJsQixpQkFBaUI7Y0FON0IsU0FBUztlQUFDO2dCQUNULFFBQVEsRUFBRSxlQUFlO2dCQUN6QixXQUFXLEVBQUUsMEJBQTBCO2dCQUN2QyxTQUFTLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztnQkFDaEMsU0FBUyxFQUFFLENBQUMsY0FBYyxDQUFDO2FBQzVCOzRhQU1RLFlBQVk7a0JBRGxCLEtBQUs7WUFJQyxNQUFNO2tCQURaLEtBQUs7WUFJQyxRQUFRO2tCQURkLEtBQUs7WUFJQyxTQUFTO2tCQURmLEtBQUs7WUFJQyxXQUFXO2tCQURqQixLQUFLO1lBSUMsU0FBUztrQkFEZixNQUFNO1lBSUEsU0FBUztrQkFEZixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBQYXJhbXMsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IGZpbmFsaXplIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ29uZGl0aW9uYWxTaG93UmVnaXN0cmFyU2VydmljZSwgR3JleUJhclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7XG4gIENhc2VFZGl0Q2FzZVN1Ym1pdCwgQ2FzZUVkaXRHZW5lcmF0ZUNhc2VFdmVudERhdGEsIENhc2VFZGl0R2V0TmV4dFBhZ2UsXG4gIENhc2VFZGl0U3VibWl0Rm9ybSxcbiAgQ2FzZUVkaXRvbkV2ZW50Q2FuQmVDb21wbGV0ZWQsXG4gIENhc2VFdmVudERhdGEsIENhc2VFdmVudFRyaWdnZXIsIENhc2VGaWVsZCxcbiAgQ2FzZVZpZXcsIERyYWZ0LCBIdHRwRXJyb3IsIFByb2ZpbGVcbn0gZnJvbSAnLi4vLi4vLi4vZG9tYWluJztcbmltcG9ydCB7IFRhc2sgfSBmcm9tICcuLi8uLi8uLi9kb21haW4vd29yay1hbGxvY2F0aW9uL1Rhc2snO1xuaW1wb3J0IHtcbiAgRmllbGRzUHVyZ2VyLCBGaWVsZHNVdGlscywgRm9ybUVycm9yU2VydmljZSwgRm9ybVZhbHVlU2VydmljZSwgTG9hZGluZ1NlcnZpY2UsXG4gIFNlc3Npb25TdG9yYWdlU2VydmljZSwgV2luZG93U2VydmljZVxufSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBDb25maXJtYXRpb24sIFdpemFyZCwgV2l6YXJkUGFnZSB9IGZyb20gJy4uL2RvbWFpbic7XG5pbXBvcnQgeyBFdmVudENvbXBsZXRpb25QYXJhbXMgfSBmcm9tICcuLi9kb21haW4vZXZlbnQtY29tcGxldGlvbi1wYXJhbXMubW9kZWwnO1xuaW1wb3J0IHsgQ2FzZU5vdGlmaWVyLCBXaXphcmRGYWN0b3J5U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY2NkLWNhc2UtZWRpdCcsXG4gIHRlbXBsYXRlVXJsOiAnY2FzZS1lZGl0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4uL2Nhc2UtZWRpdC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW0dyZXlCYXJTZXJ2aWNlXVxufSlcbmV4cG9ydCBjbGFzcyBDYXNlRWRpdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBPUklHSU5fUVVFUllfUEFSQU0gPSAnb3JpZ2luJztcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBBTEVSVF9NRVNTQUdFID0gJ1BhZ2UgaXMgYmVpbmcgcmVmcmVzaGVkIHNvIHlvdSB3aWxsIGJlIHJlZGlyZWN0ZWQgdG8gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhpcyBldmVudC4nO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBldmVudFRyaWdnZXI6IENhc2VFdmVudFRyaWdnZXI7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHN1Ym1pdDogKGNhc2VFdmVudERhdGE6IENhc2VFdmVudERhdGEsIHByb2ZpbGU/OiBQcm9maWxlKSA9PiBPYnNlcnZhYmxlPG9iamVjdD47XG5cbiAgQElucHV0KClcbiAgcHVibGljIHZhbGlkYXRlOiAoY2FzZUV2ZW50RGF0YTogQ2FzZUV2ZW50RGF0YSwgcGFnZUlkOiBzdHJpbmcpID0+IE9ic2VydmFibGU8b2JqZWN0PjtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2F2ZURyYWZ0OiAoY2FzZUV2ZW50RGF0YTogQ2FzZUV2ZW50RGF0YSkgPT4gT2JzZXJ2YWJsZTxEcmFmdD47XG5cbiAgQElucHV0KClcbiAgcHVibGljIGNhc2VEZXRhaWxzOiBDYXNlVmlldztcblxuICBAT3V0cHV0KClcbiAgcHVibGljIGNhbmNlbGxlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBzdWJtaXR0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHB1YmxpYyB3aXphcmQ6IFdpemFyZDtcblxuICBwdWJsaWMgZm9ybTogRm9ybUdyb3VwO1xuXG4gIHB1YmxpYyBjb25maXJtYXRpb246IENvbmZpcm1hdGlvbjtcblxuICBwdWJsaWMgbmF2aWdhdGlvbk9yaWdpbjogYW55O1xuXG4gIHB1YmxpYyBpbml0aWFsVXJsOiBzdHJpbmc7XG5cbiAgcHVibGljIGlzUGFnZVJlZnJlc2hlZDogYm9vbGVhbjtcblxuICBwdWJsaWMgaXNTdWJtaXR0aW5nOiBib29sZWFuO1xuXG4gIHB1YmxpYyBldmVudENvbXBsZXRpb25QYXJhbXM6IEV2ZW50Q29tcGxldGlvblBhcmFtcztcblxuICBwdWJsaWMgc3VibWl0UmVzcG9uc2U6IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgcHVibGljIGlzRXZlbnRDb21wbGV0aW9uQ2hlY2tzUmVxdWlyZWQgPSBmYWxzZTtcblxuICBwdWJsaWMgaXNDYXNlRmxhZ1N1Ym1pc3Npb24gPSBmYWxzZTtcblxuICBwdWJsaWMgaWdub3JlV2FybmluZyA9IGZhbHNlO1xuXG4gIHB1YmxpYyBpc0xpbmtlZENhc2VzU3VibWlzc2lvbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyBlcnJvcjogSHR0cEVycm9yO1xuXG4gIHB1YmxpYyBjYWxsYmFja0Vycm9yc1N1YmplY3Q6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBmYjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXNlTm90aWZpZXI6IENhc2VOb3RpZmllcixcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZmllbGRzVXRpbHM6IEZpZWxkc1V0aWxzLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZmllbGRzUHVyZ2VyOiBGaWVsZHNQdXJnZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSByZWdpc3RyYXJTZXJ2aWNlOiBDb25kaXRpb25hbFNob3dSZWdpc3RyYXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgd2l6YXJkRmFjdG9yeTogV2l6YXJkRmFjdG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uU3RvcmFnZVNlcnZpY2U6IFNlc3Npb25TdG9yYWdlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHdpbmRvd3NTZXJ2aWNlOiBXaW5kb3dTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybVZhbHVlU2VydmljZTogRm9ybVZhbHVlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm1FcnJvclNlcnZpY2U6IEZvcm1FcnJvclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2FkaW5nU2VydmljZTogTG9hZGluZ1NlcnZpY2VcbiAgKSB7fVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLndpemFyZCA9IHRoaXMud2l6YXJkRmFjdG9yeS5jcmVhdGUodGhpcy5ldmVudFRyaWdnZXIpO1xuICAgIHRoaXMuaW5pdGlhbFVybCA9IHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ2V2ZW50VXJsJyk7XG4gICAgdGhpcy5pc1BhZ2VSZWZyZXNoZWQgPSBKU09OLnBhcnNlKHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ2lzUGFnZVJlZnJlc2hlZCcpKTtcblxuICAgIHRoaXMuY2hlY2tQYWdlUmVmcmVzaCgpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMucm91dGVyLnVybCAmJiAhdGhpcy5pc1BhZ2VSZWZyZXNoZWQpIHtcbiAgICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oJ2V2ZW50VXJsJywgdGhpcy5yb3V0ZXIudXJsKTtcbiAgICB9XG5cbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIGRhdGE6IG5ldyBGb3JtR3JvdXAoe30pLFxuICAgICAgZXZlbnQ6IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgICBpZDogW3RoaXMuZXZlbnRUcmlnZ2VyLmlkLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgc3VtbWFyeTogWycnXSxcbiAgICAgICAgZGVzY3JpcHRpb246IFsnJ11cbiAgICAgIH0pXG4gICAgfSk7XG5cbiAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSgocGFyYW1zOiBQYXJhbXMpID0+IHtcbiAgICAgIHRoaXMubmF2aWdhdGlvbk9yaWdpbiA9IHBhcmFtc1tDYXNlRWRpdENvbXBvbmVudC5PUklHSU5fUVVFUllfUEFSQU1dO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMuY2FsbGJhY2tFcnJvcnNTdWJqZWN0KSB7XG4gICAgICB0aGlzLmNhbGxiYWNrRXJyb3JzU3ViamVjdC51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBjaGVja1BhZ2VSZWZyZXNoKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzUGFnZVJlZnJlc2hlZCAmJiB0aGlzLmluaXRpYWxVcmwpIHtcbiAgICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnJlbW92ZUl0ZW0oJ2V2ZW50VXJsJyk7XG4gICAgICB0aGlzLndpbmRvd3NTZXJ2aWNlLmFsZXJ0KENhc2VFZGl0Q29tcG9uZW50LkFMRVJUX01FU1NBR0UpO1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMuaW5pdGlhbFVybF0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZX0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRQYWdlKHBhZ2VJZDogc3RyaW5nKTogV2l6YXJkUGFnZSB7XG4gICAgcmV0dXJuIHRoaXMud2l6YXJkLmdldFBhZ2UocGFnZUlkLCB0aGlzLmZpZWxkc1V0aWxzLmJ1aWxkQ2FuU2hvd1ByZWRpY2F0ZSh0aGlzLmV2ZW50VHJpZ2dlciwgdGhpcy5mb3JtKSk7XG4gIH1cblxuICBwdWJsaWMgZmlyc3QoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgZmlyc3RQYWdlID0gdGhpcy53aXphcmQuZmlyc3RQYWdlKHRoaXMuZmllbGRzVXRpbHMuYnVpbGRDYW5TaG93UHJlZGljYXRlKHRoaXMuZXZlbnRUcmlnZ2VyLCB0aGlzLmZvcm0pKTtcbiAgICByZXR1cm4gdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2ZpcnN0UGFnZSA/IGZpcnN0UGFnZS5pZCA6ICdzdWJtaXQnXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICB9XG5cbiAgcHVibGljIG5hdmlnYXRlVG9QYWdlKHBhZ2VJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgcGFnZSA9IHRoaXMuZ2V0UGFnZShwYWdlSWQpO1xuICAgIHJldHVybiB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbcGFnZSA/IHBhZ2UuaWQgOiAnc3VibWl0J10sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZXh0KGN1cnJlbnRQYWdlSWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRoaXMuaW5pdGlhbFVybCA9IHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oJ2V2ZW50VXJsJyk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy5yb3V0ZXIudXJsICYmICF0aGlzLmluaXRpYWxVcmwpIHtcbiAgICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oJ2V2ZW50VXJsJywgdGhpcy5yb3V0ZXIudXJsKTtcbiAgICB9XG4gICAgdGhpcy5maWVsZHNQdXJnZXIuY2xlYXJIaWRkZW5GaWVsZHModGhpcy5mb3JtLCB0aGlzLndpemFyZCwgdGhpcy5ldmVudFRyaWdnZXIsIGN1cnJlbnRQYWdlSWQpO1xuICAgIGNvbnN0IG5leHRQYWdlID0gdGhpcy5nZXROZXh0UGFnZSh7XG4gICAgICBjdXJyZW50UGFnZUlkLFxuICAgICAgd2l6YXJkOiB0aGlzLndpemFyZCxcbiAgICAgIGV2ZW50VHJpZ2dlcjogdGhpcy5ldmVudFRyaWdnZXIsXG4gICAgICBmb3JtOiB0aGlzLmZvcm0sXG4gICAgfSk7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmKCFuZXh0UGFnZSAmJiAhdGhpcy5ldmVudFRyaWdnZXIuc2hvd19zdW1tYXJ5ICYmICF0aGlzLmV2ZW50VHJpZ2dlci5zaG93X2V2ZW50X25vdGVzKSB7XG4gICAgICB0aGlzLnN1Ym1pdEZvcm0oe1xuICAgICAgICBldmVudFRyaWdnZXI6IHRoaXMuZXZlbnRUcmlnZ2VyLFxuICAgICAgICBmb3JtOiB0aGlzLmZvcm0sXG4gICAgICAgIHN1Ym1pdDogdGhpcy5zdWJtaXQsXG4gICAgICAgIGNhc2VEZXRhaWxzOiB0aGlzLmNhc2VEZXRhaWxzLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5yZWdpc3RyYXJTZXJ2aWNlLnJlc2V0KCk7XG5cbiAgICBjb25zdCB0aGVRdWVyeVBhcmFtczogUGFyYW1zID0ge307XG4gICAgdGhlUXVlcnlQYXJhbXNbQ2FzZUVkaXRDb21wb25lbnQuT1JJR0lOX1FVRVJZX1BBUkFNXSA9IHRoaXMubmF2aWdhdGlvbk9yaWdpbjtcbiAgICByZXR1cm4gdGhpcy5yb3V0ZXIubmF2aWdhdGUoW25leHRQYWdlID8gbmV4dFBhZ2UuaWQgOiAnc3VibWl0J10sIHsgcXVlcnlQYXJhbXM6IHRoZVF1ZXJ5UGFyYW1zLCByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xuICB9XG5cbiAgcHVibGljIHByZXZpb3VzKGN1cnJlbnRQYWdlSWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRoaXMuZmllbGRzUHVyZ2VyLmNsZWFySGlkZGVuRmllbGRzKHRoaXMuZm9ybSwgdGhpcy53aXphcmQsIHRoaXMuZXZlbnRUcmlnZ2VyLCBjdXJyZW50UGFnZUlkKTtcbiAgICB0aGlzLnJlZ2lzdHJhclNlcnZpY2UucmVzZXQoKTtcblxuICAgIGNvbnN0IHByZXZpb3VzUGFnZSA9IHRoaXMud2l6YXJkLnByZXZpb3VzUGFnZShjdXJyZW50UGFnZUlkLCB0aGlzLmZpZWxkc1V0aWxzLmJ1aWxkQ2FuU2hvd1ByZWRpY2F0ZSh0aGlzLmV2ZW50VHJpZ2dlciwgdGhpcy5mb3JtKSk7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoIXByZXZpb3VzUGFnZSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG4gICAgfVxuXG4gICAgY29uc3QgdGhlUXVlcnlQYXJhbXM6IFBhcmFtcyA9IHt9O1xuICAgIHRoZVF1ZXJ5UGFyYW1zW0Nhc2VFZGl0Q29tcG9uZW50Lk9SSUdJTl9RVUVSWV9QQVJBTV0gPSB0aGlzLm5hdmlnYXRpb25PcmlnaW47XG4gICAgcmV0dXJuIHRoaXMucm91dGVyLm5hdmlnYXRlKFtwcmV2aW91c1BhZ2UuaWRdLCB7IHF1ZXJ5UGFyYW1zOiB0aGVRdWVyeVBhcmFtcywgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBoYXNQcmV2aW91cyhjdXJyZW50UGFnZUlkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy53aXphcmQuaGFzUHJldmlvdXNQYWdlKGN1cnJlbnRQYWdlSWQsIHRoaXMuZmllbGRzVXRpbHMuYnVpbGRDYW5TaG93UHJlZGljYXRlKHRoaXMuZXZlbnRUcmlnZ2VyLCB0aGlzLmZvcm0pKTtcbiAgfVxuXG4gIHB1YmxpYyBjYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5jYW5jZWxsZWQuZW1pdCgpO1xuICB9XG5cbiAgcHVibGljIGVtaXRTdWJtaXR0ZWQocmVzcG9uc2U6IFJlY29yZDxzdHJpbmcsIGFueT4pOiB2b2lkIHtcbiAgICB0aGlzLnN1Ym1pdHRlZC5lbWl0KHtjYXNlSWQ6IHJlc3BvbnNlWydpZCddLCBzdGF0dXM6IHRoaXMuZ2V0U3RhdHVzKHJlc3BvbnNlKX0pO1xuICB9XG5cbiAgcHVibGljIGdldE5leHRQYWdlKHsgd2l6YXJkLCBjdXJyZW50UGFnZUlkLCBldmVudFRyaWdnZXIsIGZvcm0gfTogQ2FzZUVkaXRHZXROZXh0UGFnZSk6IFdpemFyZFBhZ2Uge1xuICAgIHJldHVybiB3aXphcmQubmV4dFBhZ2UoXG4gICAgICBjdXJyZW50UGFnZUlkLFxuICAgICAgdGhpcy5maWVsZHNVdGlscy5idWlsZENhblNob3dQcmVkaWNhdGUoZXZlbnRUcmlnZ2VyLCBmb3JtKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgY29uZmlybShjb25maXJtYXRpb246IENvbmZpcm1hdGlvbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRoaXMuY29uZmlybWF0aW9uID0gY29uZmlybWF0aW9uO1xuICAgIHJldHVybiB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJ2NvbmZpcm0nXSwge3JlbGF0aXZlVG86IHRoaXMucm91dGV9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdWJtaXRGb3JtKHsgZXZlbnRUcmlnZ2VyLCBmb3JtLCBjYXNlRGV0YWlscywgc3VibWl0IH06IENhc2VFZGl0U3VibWl0Rm9ybSApOiB2b2lkIHtcbiAgICB0aGlzLmlzU3VibWl0dGluZyA9IHRydWU7XG4gICAgLy8gV2UgaGF2ZSB0byBydW4gdGhlIGV2ZW50IGNvbXBsZXRpb24gY2hlY2tzIGlmIHRhc2sgaW4gc2Vzc2lvbiBzdG9yYWdlXG4gICAgLy8gYW5kIGlmIHRoZSB0YXNrIGlzIGluIHNlc3Npb24gc3RvcmFnZSwgdGhlbiBpcyBpdCBhc3NvY2lhdGVkIHRvIHRoZSBjYXNlXG4gICAgbGV0IHRhc2tJblNlc3Npb25TdG9yYWdlOiBUYXNrO1xuICAgIGNvbnN0IHRhc2tTdHIgPSB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5nZXRJdGVtKCd0YXNrVG9Db21wbGV0ZScpO1xuICAgIGlmICh0YXNrU3RyKSB7XG4gICAgICB0YXNrSW5TZXNzaW9uU3RvcmFnZSA9IEpTT04ucGFyc2UodGFza1N0cik7XG4gICAgfVxuXG4gICAgaWYgKHRhc2tJblNlc3Npb25TdG9yYWdlICYmIHRhc2tJblNlc3Npb25TdG9yYWdlLmNhc2VfaWQgPT09IHRoaXMuZ2V0Q2FzZUlkKGNhc2VEZXRhaWxzKSkge1xuICAgICAgLy8gU2hvdyBldmVudCBjb21wbGV0aW9uIGNvbXBvbmVudCB0byBwZXJmb3JtIGV2ZW50IGNvbXBsZXRpb24gY2hlY2tzXG4gICAgICB0aGlzLmV2ZW50Q29tcGxldGlvblBhcmFtcyA9ICh7XG4gICAgICAgIGNhc2VJZDogdGhpcy5nZXRDYXNlSWQoY2FzZURldGFpbHMpLFxuICAgICAgICBldmVudElkOiB0aGlzLmdldEV2ZW50SWQoZm9ybSksXG4gICAgICAgIHRhc2s6IHRhc2tJblNlc3Npb25TdG9yYWdlXG4gICAgICB9KTtcbiAgICAgIHRoaXMuaXNFdmVudENvbXBsZXRpb25DaGVja3NSZXF1aXJlZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRhc2sgbm90IGluIHNlc3Npb24gc3RvcmFnZSwgcHJvY2VlZCB0byBzdWJtaXRcbiAgICAgIGNvbnN0IGNhc2VFdmVudERhdGEgPSB0aGlzLmdlbmVyYXRlQ2FzZUV2ZW50RGF0YSh7XG4gICAgICAgIGV2ZW50VHJpZ2dlcixcbiAgICAgICAgZm9ybVxuICAgICAgfSk7XG4gICAgICB0aGlzLmNhc2VTdWJtaXQoe2Zvcm0sXG4gICAgICAgIGNhc2VFdmVudERhdGEsXG4gICAgICAgIHN1Ym1pdFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldENhc2VJZChjYXNlRGV0YWlsczogQ2FzZVZpZXcpOiBzdHJpbmcge1xuICAgIHJldHVybiAoY2FzZURldGFpbHMgPyBjYXNlRGV0YWlscy5jYXNlX2lkIDogJycpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFdmVudElkKGZvcm06IEZvcm1Hcm91cCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGZvcm0udmFsdWUuZXZlbnQuaWQ7XG4gfVxuXG4gcHJpdmF0ZSBnZW5lcmF0ZUNhc2VFdmVudERhdGEoeyBldmVudFRyaWdnZXIsIGZvcm0gfTogQ2FzZUVkaXRHZW5lcmF0ZUNhc2VFdmVudERhdGEgKTogQ2FzZUV2ZW50RGF0YSB7XG4gIGNvbnN0IGNhc2VFdmVudERhdGE6IENhc2VFdmVudERhdGEgPSB7XG4gICAgZGF0YTogdGhpcy5yZXBsYWNlRW1wdHlDb21wbGV4RmllbGRWYWx1ZXMoXG4gICAgICB0aGlzLmZvcm1WYWx1ZVNlcnZpY2Uuc2FuaXRpc2UoXG4gICAgICAgIHRoaXMucmVwbGFjZUhpZGRlbkZvcm1WYWx1ZXNXaXRoT3JpZ2luYWxDYXNlRGF0YShcbiAgICAgICAgICBmb3JtLmdldCgnZGF0YScpIGFzIEZvcm1Hcm91cCwgZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzKSkpLFxuICAgIGV2ZW50OiBmb3JtLnZhbHVlLmV2ZW50XG4gIH0gYXMgQ2FzZUV2ZW50RGF0YTtcbiAgdGhpcy5mb3JtVmFsdWVTZXJ2aWNlLmNsZWFyTm9uQ2FzZUZpZWxkcyhjYXNlRXZlbnREYXRhLmRhdGEsIGV2ZW50VHJpZ2dlci5jYXNlX2ZpZWxkcyk7XG4gIHRoaXMuZm9ybVZhbHVlU2VydmljZS5yZW1vdmVOdWxsTGFiZWxzKGNhc2VFdmVudERhdGEuZGF0YSwgZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzKTtcbiAgdGhpcy5mb3JtVmFsdWVTZXJ2aWNlLnJlbW92ZUVtcHR5RG9jdW1lbnRzKGNhc2VFdmVudERhdGEuZGF0YSwgZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzKTtcbiAgLy8gUmVtb3ZlIGNvbGxlY3Rpb24gZmllbGRzIHRoYXQgaGF2ZSBcIm1pblwiIHZhbGlkYXRpb24gb2YgZ3JlYXRlciB0aGFuIHplcm8gc2V0IG9uIHRoZSBGaWVsZFR5cGUgYnV0IGFyZSBlbXB0eTtcbiAgLy8gdGhlc2Ugd2lsbCBmYWlsIHZhbGlkYXRpb25cbiAgdGhpcy5mb3JtVmFsdWVTZXJ2aWNlLnJlbW92ZUVtcHR5Q29sbGVjdGlvbnNXaXRoTWluVmFsaWRhdGlvbihjYXNlRXZlbnREYXRhLmRhdGEsIGV2ZW50VHJpZ2dlci5jYXNlX2ZpZWxkcyk7XG4gIC8vIElmIHRoaXMgaXMgYSBDYXNlIEZsYWcgc3VibWlzc2lvbiAoYW5kIHRodXMgYSBGbGFnTGF1bmNoZXIgZmllbGQgaXMgcHJlc2VudCBpbiB0aGUgZXZlbnQgdHJpZ2dlciksIHRoZSBmbGFnXG4gIC8vIGRldGFpbHMgZGF0YSBuZWVkcyBwb3B1bGF0aW5nIGZvciBlYWNoIEZsYWdzIGZpZWxkLCB0aGVuIHRoZSBGbGFnTGF1bmNoZXIgZmllbGQgbmVlZHMgcmVtb3ZpbmdcbiAgaWYgKHRoaXMuaXNDYXNlRmxhZ1N1Ym1pc3Npb24pIHtcbiAgICB0aGlzLmZvcm1WYWx1ZVNlcnZpY2UucG9wdWxhdGVGbGFnRGV0YWlsc0Zyb21DYXNlRmllbGRzKGNhc2VFdmVudERhdGEuZGF0YSwgZXZlbnRUcmlnZ2VyLmNhc2VfZmllbGRzKTtcbiAgICB0aGlzLmZvcm1WYWx1ZVNlcnZpY2UucmVtb3ZlRmxhZ0xhdW5jaGVyRmllbGQoY2FzZUV2ZW50RGF0YS5kYXRhLCBldmVudFRyaWdnZXIuY2FzZV9maWVsZHMpO1xuICB9XG5cbiAgaWYgKHRoaXMuaXNMaW5rZWRDYXNlc1N1Ym1pc3Npb24pIHtcbiAgICB0aGlzLmZvcm1WYWx1ZVNlcnZpY2UucG9wdWxhdGVMaW5rZWRDYXNlc0RldGFpbHNGcm9tQ2FzZUZpZWxkcyhjYXNlRXZlbnREYXRhLmRhdGEsIGV2ZW50VHJpZ2dlci5jYXNlX2ZpZWxkcyk7XG4gICAgdGhpcy5mb3JtVmFsdWVTZXJ2aWNlLnJlbW92ZUNvbXBvbmVudExhdW5jaGVyRmllbGQoY2FzZUV2ZW50RGF0YS5kYXRhLCBldmVudFRyaWdnZXIuY2FzZV9maWVsZHMpO1xuICB9XG5cbiAgY2FzZUV2ZW50RGF0YS5ldmVudF90b2tlbiA9IGV2ZW50VHJpZ2dlci5ldmVudF90b2tlbjtcbiAgY2FzZUV2ZW50RGF0YS5pZ25vcmVfd2FybmluZyA9IHRoaXMuaWdub3JlV2FybmluZztcbiAgaWYgKHRoaXMuY29uZmlybWF0aW9uKSB7XG4gICAgY2FzZUV2ZW50RGF0YS5kYXRhID0ge307XG4gIH1cblxuICByZXR1cm4gY2FzZUV2ZW50RGF0YTtcbn1cblxuLyoqXG4gKiBSZXBsYWNlcyBub24tYXJyYXkgdmFsdWUgb2JqZWN0cyB3aXRoIGBudWxsYCBmb3IgYW55IENvbXBsZXgtdHlwZSBmaWVsZHMgd2hvc2UgdmFsdWUgaXMgZWZmZWN0aXZlbHkgZW1wdHksIGkuZS5cbiAqIGFsbCBpdHMgc3ViLWZpZWxkcyBhbmQgZGVzY2VuZGFudHMgYXJlIGBudWxsYCBvciBgdW5kZWZpbmVkYC5cbiAqXG4gKiBAcGFyYW0gZGF0YSBUaGUgb2JqZWN0IHRyZWUgcmVwcmVzZW50aW5nIGFsbCB0aGUgZm9ybSBmaWVsZCBkYXRhXG4gKiBAcmV0dXJucyBUaGUgZm9ybSBmaWVsZCBkYXRhIG1vZGlmaWVkIGFjY29yZGluZ2x5XG4gKi9cbnByaXZhdGUgcmVwbGFjZUVtcHR5Q29tcGxleEZpZWxkVmFsdWVzKGRhdGE6IG9iamVjdCk6IG9iamVjdCB7XG4gIE9iamVjdC5rZXlzKGRhdGEpLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShkYXRhW2tleV0pICYmIHR5cGVvZiBkYXRhW2tleV0gPT09ICdvYmplY3QnICYmICFGaWVsZHNVdGlscy5jb250YWluc05vbkVtcHR5VmFsdWVzKGRhdGFba2V5XSkpIHtcbiAgICAgIGRhdGFba2V5XSA9IG51bGw7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZGF0YTtcbn1cblxuLyoqXG4gKiBUcmF2ZXJzZSAqYWxsKiB2YWx1ZXMgb2YgYSB7QGxpbmsgRm9ybUdyb3VwfSwgaW5jbHVkaW5nIHRob3NlIGZvciBkaXNhYmxlZCBmaWVsZHMgKGkuZS4gaGlkZGVuIG9uZXMpLCByZXBsYWNpbmcgdGhlXG4gKiB2YWx1ZSBvZiBhbnkgdGhhdCBhcmUgaGlkZGVuIEFORCBoYXZlIGByZXRhaW5faGlkZGVuX3ZhbHVlYCBzZXQgdG8gYHRydWVgIGluIHRoZSBjb3JyZXNwb25kaW5nIGBDYXNlRmllbGRgLCB3aXRoXG4gKiB0aGUgKm9yaWdpbmFsKiB2YWx1ZSBoZWxkIGluIHRoZSBgQ2FzZUZpZWxkYCBvYmplY3QuXG4gKlxuICogVGhpcyBpcyBhcyBwZXIgZGVzaWduIGluIEVVSS0zNjIyLCB3aGVyZSBhbnkgdXNlci1kcml2ZW4gdXBkYXRlcyB0byBoaWRkZW4gZmllbGRzIHdpdGggYHJldGFpbl9oaWRkZW5fdmFsdWVgID1cbiAqIGB0cnVlYCBhcmUgaWdub3JlZCAodGh1cyByZXRhaW5pbmcgdGhlIHZhbHVlIGRpc3BsYXllZCBvcmlnaW5hbGx5KS5cbiAqXG4gKiAqIEZvciBDb21wbGV4IGZpZWxkIHR5cGVzLCB0aGUgcmVwbGFjZW1lbnQgYWJvdmUgaXMgcGVyZm9ybWVkIHJlY3Vyc2l2ZWx5IGZvciBhbGwgaGlkZGVuIHN1Yi1maWVsZHMgd2l0aFxuICogYHJldGFpbl9oaWRkZW5fdmFsdWVgID0gYHRydWVgLlxuICpcbiAqICogRm9yIENvbGxlY3Rpb24gZmllbGQgdHlwZXMsIGluY2x1ZGluZyBjb2xsZWN0aW9ucyBvZiBDb21wbGV4IGFuZCBEb2N1bWVudCBmaWVsZCB0eXBlcywgdGhlIHJlcGxhY2VtZW50IGlzXG4gKiBwZXJmb3JtZWQgZm9yIGFsbCBmaWVsZHMgaW4gdGhlIGNvbGxlY3Rpb24uXG4gKlxuICogQHBhcmFtIGZvcm1Hcm91cCBUaGUgYEZvcm1Hcm91cGAgaW5zdGFuY2Ugd2hvc2UgcmF3IHZhbHVlcyBhcmUgdG8gYmUgdHJhdmVyc2VkXG4gKiBAcGFyYW0gY2FzZUZpZWxkcyBUaGUgYXJyYXkgb2Yge0BsaW5rIENhc2VGaWVsZH0gZG9tYWluIG1vZGVsIG9iamVjdHMgY29ycmVzcG9uZGluZyB0byBmaWVsZHMgaW4gYGZvcm1Hcm91cGBcbiAqIEBwYXJhbSBwYXJlbnRGaWVsZCBSZWZlcmVuY2UgdG8gdGhlIHBhcmVudCBgQ2FzZUZpZWxkYC4gVXNlZCBmb3IgcmV0cmlldmluZyB0aGUgc3ViLWZpZWxkIHZhbHVlcyBvZiBhIENvbXBsZXggZmllbGRcbiAqIHRvIHBlcmZvcm0gcmVjdXJzaXZlIHJlcGxhY2VtZW50IC0gdGhlIHN1Yi1maWVsZCBgQ2FzZUZpZWxkYHMgdGhlbXNlbHZlcyBkbyAqbm90KiBjb250YWluIGFueSB2YWx1ZXNcbiAqIEByZXR1cm5zIEFuIG9iamVjdCB3aXRoIHRoZSAqcmF3KiBmb3JtIHZhbHVlIGRhdGEgKGFzIGtleS12YWx1ZSBwYWlycyksIHdpdGggYW55IHZhbHVlIHJlcGxhY2VtZW50cyBhcyBuZWNlc3NhcnlcbiAqL1xucHJpdmF0ZSByZXBsYWNlSGlkZGVuRm9ybVZhbHVlc1dpdGhPcmlnaW5hbENhc2VEYXRhKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBjYXNlRmllbGRzOiBDYXNlRmllbGRbXSwgcGFyZW50RmllbGQ/OiBDYXNlRmllbGQpOiBvYmplY3Qge1xuICAvLyBHZXQgdGhlIHJhdyBmb3JtIHZhbHVlIGRhdGEsIHdoaWNoIGluY2x1ZGVzIHRoZSB2YWx1ZXMgb2YgYW55IGRpc2FibGVkIGNvbnRyb2xzLCBhcyBrZXktdmFsdWUgcGFpcnNcbiAgY29uc3QgcmF3Rm9ybVZhbHVlRGF0YSA9IGZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xuXG4gIC8vIFBsYWNlIGFsbCBjYXNlIGZpZWxkcyBpbiBhIGxvb2t1cCBvYmplY3QsIHNvIHRoZXkgY2FuIGJlIHJldHJpZXZlZCBieSBpZFxuICBjb25zdCBjYXNlRmllbGRzTG9va3VwID0ge307XG4gIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjYXNlRmllbGRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgY2FzZUZpZWxkc0xvb2t1cFtjYXNlRmllbGRzW2ldLmlkXSA9IGNhc2VGaWVsZHNbaV07XG4gIH1cblxuICAvKipcbiAgICogUmVwbGFjZSBhbnkgZm9ybSB2YWx1ZSB3aXRoIHRoZSBvcmlnaW5hbCwgd2hlcmUgaXRzIENhc2VGaWVsZCBpcyBoaWRkZW4gQU5EIGhhcyB0aGUgcmV0YWluX2hpZGRlbl92YWx1ZSBmbGFnIHNldFxuICAgKiB0byB0cnVlLlxuICAgKlxuICAgKiBJZiB0aGUgQ2FzZUZpZWxkJ3MgYGhpZGRlbmAgYXR0cmlidXRlIGlzIG51bGwgb3IgdW5kZWZpbmVkLCB0aGVuIGNoZWNrIHRoaXMgYXR0cmlidXRlIGluIHRoZSBwYXJlbnQgQ2FzZUZpZWxkIChpZlxuICAgKiBvbmUgZXhpc3RzKS4gVGhpcyBpcyBvY2N1cnJpbmcgKGFuZCBpcyBwb3NzaWJseSBhIGJ1Zykgd2hlbiBhIENhc2VGaWVsZCBpcyBhIHN1Yi1maWVsZCBvZiBhIENvbXBsZXggdHlwZSwgb3IgYW5cbiAgICogaXRlbSBpbiBhIENvbGxlY3Rpb24gdHlwZS5cbiAgICpcbiAgICogSWYgdGhlIGZpZWxkIGlzIGEgQ29tcGxleCB0eXBlIHdpdGggcmV0YWluX2hpZGRlbl92YWx1ZSA9IHRydWUsIHBlcmZvcm0gYSByZWN1cnNpdmUgcmVwbGFjZW1lbnQgZm9yIGFsbCAoaGlkZGVuKVxuICAgKiBzdWItZmllbGRzIHdpdGggcmV0YWluX2hpZGRlbl92YWx1ZSA9IHRydWUsIHVzaW5nIHRoZWlyIG9yaWdpbmFsIENhc2VGaWVsZCB2YWx1ZXMgKGZyb20gdGhlIGBmb3JtYXR0ZWRfdmFsdWVgXG4gICAqIGF0dHJpYnV0ZSkuXG4gICAqXG4gICAqIElmIHRoZSBmaWVsZCBpcyBhIENvbGxlY3Rpb24gdHlwZSB3aXRoIHJldGFpbl9oaWRkZW5fdmFsdWUgPSB0cnVlLCB0aGUgZW50aXJlIGNvbGxlY3Rpb24gaXMgcmVwbGFjZWQgd2l0aCB0aGVcbiAgICogb3JpZ2luYWwgZnJvbSBgZm9ybWF0dGVkX3ZhbHVlYC4gVGhpcyBhcHBsaWVzIHRvICphbGwqIHR5cGVzIG9mIENvbGxlY3Rpb25zLlxuICAgKi9cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgT2JqZWN0LmtleXMocmF3Rm9ybVZhbHVlRGF0YSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgY29uc3QgY2FzZUZpZWxkOiBDYXNlRmllbGQgPSBjYXNlRmllbGRzTG9va3VwW2tleV07XG4gICAgLy8gSWYgY2FzZUZpZWxkLmhpZGRlbiBpcyBOT1QgdHJ1dGh5IGFuZCBhbHNvIE5PVCBlcXVhbCB0byBmYWxzZSwgdGhlbiBpdCBtdXN0IGJlIG51bGwvdW5kZWZpbmVkIChyZW1lbWJlciB0aGF0XG4gICAgLy8gYm90aCBudWxsIGFuZCB1bmRlZmluZWQgYXJlIGVxdWFsIHRvICpuZWl0aGVyIGZhbHNlIG5vciB0cnVlKilcbiAgICBpZiAoY2FzZUZpZWxkICYmIGNhc2VGaWVsZC5yZXRhaW5faGlkZGVuX3ZhbHVlICYmXG4gICAgICAoY2FzZUZpZWxkLmhpZGRlbiB8fCAoY2FzZUZpZWxkLmhpZGRlbiAhPT0gZmFsc2UgJiYgcGFyZW50RmllbGQgJiYgcGFyZW50RmllbGQuaGlkZGVuKSkpIHtcbiAgICAgIGlmIChjYXNlRmllbGQuZmllbGRfdHlwZS50eXBlID09PSAnQ29tcGxleCcpIHtcbiAgICAgICAgLy8gTm90ZTogRGVsaWJlcmF0ZSB1c2Ugb2YgZXF1YWxpdHkgKD09KSBhbmQgbm9uLWVxdWFsaXR5ICghPSkgb3BlcmF0b3JzIGZvciBudWxsIGNoZWNrcyB0aHJvdWdob3V0LCB0b1xuICAgICAgICAvLyBoYW5kbGUgYm90aCBudWxsIGFuZCB1bmRlZmluZWQgdmFsdWVzXG4gICAgICAgIGlmIChjYXNlRmllbGQudmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgIC8vIENhbGwgdGhpcyBmdW5jdGlvbiByZWN1cnNpdmVseSB0byByZXBsYWNlIHRoZSBDb21wbGV4IGZpZWxkJ3Mgc3ViLWZpZWxkcyBhcyBuZWNlc3NhcnksIHBhc3NpbmcgdGhlXG4gICAgICAgICAgLy8gQ2FzZUZpZWxkIGl0c2VsZiAodGhlIHN1Yi1maWVsZHMgZG8gbm90IGNvbnRhaW4gYW55IHZhbHVlcywgc28gdGhlc2UgbmVlZCB0byBiZSBvYnRhaW5lZCBmcm9tIHRoZVxuICAgICAgICAgIC8vIHBhcmVudClcbiAgICAgICAgICAvLyBVcGRhdGUgcmF3Rm9ybVZhbHVlRGF0YSBmb3IgdGhpcyBmaWVsZFxuICAgICAgICAgIC8vIGNyZWF0aW5nIGZvcm0gZ3JvdXAgYW5kIGFkZGluZyBjb250cm9sIGludG8gaXQgaW4gY2FzZSBjYXNlRmllbGQgaXMgb2YgY29tcGxleHQgdHlwZSBhbmQgYW5kIHBhcnQgb2YgZm9ybUdyb3VwXG4gICAgICAgICAgY29uc3QgZm9ybTogRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gICAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1trZXldLnZhbHVlKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhmb3JtR3JvdXAuY29udHJvbHNba2V5XS52YWx1ZSkuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICBmb3JtLmFkZENvbnRyb2woaXRlbSwgbmV3IEZvcm1Db250cm9sKGZvcm1Hcm91cC5jb250cm9sc1trZXldLnZhbHVlW2l0ZW1dKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmF3Rm9ybVZhbHVlRGF0YVtrZXldID0gdGhpcy5yZXBsYWNlSGlkZGVuRm9ybVZhbHVlc1dpdGhPcmlnaW5hbENhc2VEYXRhKFxuICAgICAgICAgICAgZm9ybSwgY2FzZUZpZWxkLmZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMsIGNhc2VGaWVsZCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIERlZmF1bHQgY2FzZSBhbHNvIGhhbmRsZXMgY29sbGVjdGlvbnMgb2YgKmFsbCogdHlwZXM7IHRoZSBlbnRpcmUgY29sbGVjdGlvbiBpbiByYXdGb3JtVmFsdWVEYXRhIHdpbGwgYmVcbiAgICAgICAgLy8gcmVwbGFjZWQgd2l0aCB0aGUgb3JpZ2luYWwgZnJvbSBmb3JtYXR0ZWRfdmFsdWVcbiAgICAgICAgLy8gVXNlIHRoZSBDYXNlRmllbGQncyBleGlzdGluZyAqZm9ybWF0dGVkX3ZhbHVlKiBmcm9tIHRoZSBwYXJlbnQsIGlmIGF2YWlsYWJsZS4gKFRoaXMgaXMgbmVjZXNzYXJ5IGZvclxuICAgICAgICAvLyBDb21wbGV4IGZpZWxkcywgd2hvc2Ugc3ViLWZpZWxkcyBkbyBub3QgaG9sZCBhbnkgdmFsdWVzIGluIHRoZSBtb2RlbC4pIE90aGVyd2lzZSwgdXNlIGZvcm1hdHRlZF92YWx1ZVxuICAgICAgICAvLyBmcm9tIHRoZSBDYXNlRmllbGQgaXRzZWxmLlxuICAgICAgICBpZiAocGFyZW50RmllbGQgJiYgcGFyZW50RmllbGQuZm9ybWF0dGVkX3ZhbHVlKSB7XG4gICAgICAgICAgcmF3Rm9ybVZhbHVlRGF0YVtrZXldID0gcGFyZW50RmllbGQuZm9ybWF0dGVkX3ZhbHVlW2Nhc2VGaWVsZC5pZF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmF3Rm9ybVZhbHVlRGF0YVtrZXldID0gY2FzZUZpZWxkLmZvcm1hdHRlZF92YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHJhd0Zvcm1WYWx1ZURhdGE7XG59XG5cbiAgcHJpdmF0ZSBjYXNlU3VibWl0KHtmb3JtLCBjYXNlRXZlbnREYXRhLCBzdWJtaXR9OiBDYXNlRWRpdENhc2VTdWJtaXQpOiB2b2lkIHtcbiAgICBjb25zdCBsb2FkaW5nU3Bpbm5lclRva2VuID0gdGhpcy5sb2FkaW5nU2VydmljZS5yZWdpc3RlcigpO1xuXG4gICAgc3VibWl0KGNhc2VFdmVudERhdGEpXG4gICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZ1NlcnZpY2UudW5yZWdpc3Rlcihsb2FkaW5nU3Bpbm5lclRva2VuKTtcbiAgICAgIH0pKVxuICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgcmVzcG9uc2UgPT4ge1xuICAgICAgICAgIHRoaXMuY2FzZU5vdGlmaWVyLmNhY2hlZENhc2VWaWV3ID0gbnVsbDtcbiAgICAgICAgICB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5yZW1vdmVJdGVtKCdldmVudFVybCcpO1xuICAgICAgICAgIGNvbnN0IGNvbmZpcm1hdGlvbjogQ29uZmlybWF0aW9uID0gdGhpcy5idWlsZENvbmZpcm1hdGlvbihyZXNwb25zZSk7XG4gICAgICAgICAgaWYgKGNvbmZpcm1hdGlvbiAmJiAoY29uZmlybWF0aW9uLmdldEhlYWRlcigpIHx8IGNvbmZpcm1hdGlvbi5nZXRCb2R5KCkpKSB7XG4gICAgICAgICAgICAvLyBBZGQgZmluYWxseSB0byBmaXggc29uYXIgYnVnXG4gICAgICAgICAgICB0aGlzLmNvbmZpcm0oY29uZmlybWF0aW9uKS5maW5hbGx5KCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdFN1Ym1pdHRlZChyZXNwb25zZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvciA9PiB7XG4gICAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yO1xuICAgICAgICAgIHRoaXMuY2FsbGJhY2tFcnJvcnNTdWJqZWN0Lm5leHQoZXJyb3IpO1xuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgaWYgKHRoaXMuZXJyb3IuZGV0YWlscykge1xuICAgICAgICAgICAgdGhpcy5mb3JtRXJyb3JTZXJ2aWNlXG4gICAgICAgICAgICAgIC5tYXBGaWVsZEVycm9ycyh0aGlzLmVycm9yLmRldGFpbHMuZmllbGRfZXJyb3JzLCBmb3JtLmNvbnRyb2xzWydkYXRhJ10gYXMgRm9ybUdyb3VwLCAndmFsaWRhdGlvbicpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENvbmZpcm1hdGlvbihyZXNwb25zZTogb2JqZWN0KTogQ29uZmlybWF0aW9uIHtcbiAgICBpZiAocmVzcG9uc2VbJ2FmdGVyX3N1Ym1pdF9jYWxsYmFja19yZXNwb25zZSddKSB7XG4gICAgICByZXR1cm4gbmV3IENvbmZpcm1hdGlvbihcbiAgICAgICAgcmVzcG9uc2VbJ2lkJ10sXG4gICAgICAgIHJlc3BvbnNlWydjYWxsYmFja19yZXNwb25zZV9zdGF0dXMnXSxcbiAgICAgICAgcmVzcG9uc2VbJ2FmdGVyX3N1Ym1pdF9jYWxsYmFja19yZXNwb25zZSddWydjb25maXJtYXRpb25faGVhZGVyJ10sXG4gICAgICAgIHJlc3BvbnNlWydhZnRlcl9zdWJtaXRfY2FsbGJhY2tfcmVzcG9uc2UnXVsnY29uZmlybWF0aW9uX2JvZHknXVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uRXZlbnRDYW5CZUNvbXBsZXRlZCh7IGV2ZW50VHJpZ2dlciwgZXZlbnRDYW5CZUNvbXBsZXRlZCwgY2FzZURldGFpbHMsIGZvcm0sIHN1Ym1pdCB9OiBDYXNlRWRpdG9uRXZlbnRDYW5CZUNvbXBsZXRlZCApOiB2b2lkIHtcbiAgICBpZiAoZXZlbnRDYW5CZUNvbXBsZXRlZCkge1xuICAgICAgLy8gU3VibWl0XG4gICAgICBjb25zdCBjYXNlRXZlbnREYXRhID0gdGhpcy5nZW5lcmF0ZUNhc2VFdmVudERhdGEoeyBldmVudFRyaWdnZXIsIGZvcm0gfSk7XG4gICAgICB0aGlzLmNhc2VTdWJtaXQoeyBmb3JtLCBjYXNlRXZlbnREYXRhLCBzdWJtaXQgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5hdmlnYXRlIHRvIHRhc2tzIHRhYiBvbiBjYXNlIGRldGFpbHMgcGFnZVxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2AvY2FzZXMvY2FzZS1kZXRhaWxzLyR7dGhpcy5nZXRDYXNlSWQoY2FzZURldGFpbHMpfS90YXNrc2BdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gICAgfVxuICB9XG5cblxuICBwdWJsaWMgZ2V0U3RhdHVzKHJlc3BvbnNlOiBvYmplY3QpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmhhc0NhbGxiYWNrRmFpbGVkKHJlc3BvbnNlKSA/IHJlc3BvbnNlWydjYWxsYmFja19yZXNwb25zZV9zdGF0dXMnXSA6IHJlc3BvbnNlWydkZWxldGVfZHJhZnRfcmVzcG9uc2Vfc3RhdHVzJ107XG4gIH1cblxuICBwcml2YXRlIGhhc0NhbGxiYWNrRmFpbGVkKHJlc3BvbnNlOiBvYmplY3QpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcmVzcG9uc2VbJ2NhbGxiYWNrX3Jlc3BvbnNlX3N0YXR1cyddICE9PSAnQ0FMTEJBQ0tfQ09NUExFVEVEJztcbiAgfVxuXG59XG4iLCI8cm91dGVyLW91dGxldD48L3JvdXRlci1vdXRsZXQ+XG4iXX0=