@hmcts/ccd-case-ui-toolkit 6.19.4 → 6.19.5-case-flags-v2-reasonable-adjustments

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 (252) hide show
  1. package/bundles/hmcts-ccd-case-ui-toolkit.umd.js +3933 -1481
  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/shared/components/case-editor/case-edit/case-edit.component.js +1 -1
  6. package/esm2015/lib/shared/components/case-editor/case-edit-confirm/case-edit-confirm.component.js +1 -1
  7. package/esm2015/lib/shared/components/case-editor/case-edit-generic-errors/case-edit-generic-errors.component.js +1 -1
  8. package/esm2015/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.js +2 -11
  9. package/esm2015/lib/shared/components/case-editor/case-edit-submit/case-edit-submit-titles.enum.js +7 -0
  10. package/esm2015/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.js +166 -116
  11. package/esm2015/lib/shared/components/case-editor/case-editor.module.js +8 -5
  12. package/esm2015/lib/shared/components/case-editor/services/case-flag-state.service.js +19 -0
  13. package/esm2015/lib/shared/components/case-viewer/case-event-trigger/case-event-trigger.component.js +5 -10
  14. package/esm2015/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.js +7 -2
  15. package/esm2015/lib/shared/components/case-viewer/case-viewer.module.js +5 -2
  16. package/esm2015/lib/shared/components/create-case-filters/create-case-filters.component.js +3 -3
  17. package/esm2015/lib/shared/components/palette/base-field/field-read.component.js +1 -1
  18. package/esm2015/lib/shared/components/palette/case-flag/components/add-comments/add-comments.component.js +16 -7
  19. package/esm2015/lib/shared/components/palette/case-flag/components/case-flag-summary-list/case-flag-summary-list.component.js +260 -44
  20. package/esm2015/lib/shared/components/palette/case-flag/components/case-flag-table/case-flag-table.component.js +144 -73
  21. package/esm2015/lib/shared/components/palette/case-flag/components/confirm-flag-status/confirm-flag-status.component.js +181 -0
  22. package/esm2015/lib/shared/components/palette/case-flag/components/index.js +4 -1
  23. package/esm2015/lib/shared/components/palette/case-flag/components/manage-case-flags/manage-case-flags.component.js +38 -73
  24. package/esm2015/lib/shared/components/palette/case-flag/components/search-language-interpreter/search-language-interpreter-control-names.enum.js +6 -0
  25. package/esm2015/lib/shared/components/palette/case-flag/components/search-language-interpreter/search-language-interpreter.component.js +133 -101
  26. package/esm2015/lib/shared/components/palette/case-flag/components/select-flag-location/select-flag-location.component.js +16 -8
  27. package/esm2015/lib/shared/components/palette/case-flag/components/select-flag-type/select-flag-type.component.js +198 -115
  28. package/esm2015/lib/shared/components/palette/case-flag/components/update-flag/update-flag-add-translation-form/update-flag-add-translation-form.component.js +292 -0
  29. package/esm2015/lib/shared/components/palette/case-flag/components/update-flag/update-flag.component.js +299 -101
  30. package/esm2015/lib/shared/components/palette/case-flag/domain/case-flag-state.model.js +1 -1
  31. package/esm2015/lib/shared/components/palette/case-flag/domain/case-flag.model.js +1 -1
  32. package/esm2015/lib/shared/components/palette/case-flag/domain/language.model.js +1 -1
  33. package/esm2015/lib/shared/components/palette/case-flag/enums/add-comments-error-message.enum.js +2 -1
  34. package/esm2015/lib/shared/components/palette/case-flag/enums/add-comments-step.enum.js +3 -2
  35. package/esm2015/lib/shared/components/palette/case-flag/enums/case-flag-check-your-answers-step.enum.js +12 -0
  36. package/esm2015/lib/shared/components/palette/case-flag/enums/case-flag-display-context-parameter.enum.js +9 -0
  37. package/esm2015/lib/shared/components/palette/case-flag/enums/case-flag-form-fields.enum.js +12 -0
  38. package/esm2015/lib/shared/components/palette/case-flag/enums/case-flag-status.enum.js +3 -2
  39. package/esm2015/lib/shared/components/palette/case-flag/enums/case-flag-wizard-step-title.enum.js +11 -3
  40. package/esm2015/lib/shared/components/palette/case-flag/enums/confirm-status-error-message.enum.js +6 -0
  41. package/esm2015/lib/shared/components/palette/case-flag/enums/confirm-status-step.enum.js +6 -0
  42. package/esm2015/lib/shared/components/palette/case-flag/enums/index.js +9 -2
  43. package/esm2015/lib/shared/components/palette/case-flag/enums/select-flag-error-message.enum.js +3 -2
  44. package/esm2015/lib/shared/components/palette/case-flag/enums/select-flag-type-error-message.enum.js +4 -1
  45. package/esm2015/lib/shared/components/palette/case-flag/enums/update-flag-add-translation-error-message.enum.js +6 -0
  46. package/esm2015/lib/shared/components/palette/case-flag/enums/update-flag-add-translation-step.enum.js +6 -0
  47. package/esm2015/lib/shared/components/palette/case-flag/enums/update-flag-error-message.enum.js +5 -1
  48. package/esm2015/lib/shared/components/palette/case-flag/enums/update-flag-step.enum.js +3 -2
  49. package/esm2015/lib/shared/components/palette/case-flag/enums/write-case-flag-field.enum.js +8 -4
  50. package/esm2015/lib/shared/components/palette/case-flag/index.js +2 -1
  51. package/esm2015/lib/shared/components/palette/case-flag/pipes/flag-field-display.pipe.js +41 -0
  52. package/esm2015/lib/shared/components/palette/case-flag/pipes/index.js +5 -0
  53. package/esm2015/lib/shared/components/palette/case-flag/pipes/language-interpreter-display.pipe.js +41 -0
  54. package/esm2015/lib/shared/components/palette/case-flag/pipes/manage-case-flags-label-display.pipe.js +109 -0
  55. package/esm2015/lib/shared/components/palette/case-flag/pipes/update-flag-title-display.pipe.js +77 -0
  56. package/esm2015/lib/shared/components/palette/case-flag/read-case-flag-field.component.js +121 -50
  57. package/esm2015/lib/shared/components/palette/case-flag/write-case-flag-field.component.js +234 -130
  58. package/esm2015/lib/shared/components/palette/document/write-document-field.component.js +20 -43
  59. package/esm2015/lib/shared/components/palette/index.js +2 -1
  60. package/esm2015/lib/shared/components/palette/judicial-user/write-judicial-user-field.component.js +16 -1
  61. package/esm2015/lib/shared/components/palette/palette.module.js +69 -32
  62. package/esm2015/lib/shared/components/palette/palette.service.js +5 -2
  63. package/esm2015/lib/shared/components/palette/phone-uk/write-phone-uk-field.component.js +1 -1
  64. package/esm2015/lib/shared/components/palette/query-management/__mocks__/index.js +112 -0
  65. package/esm2015/lib/shared/components/palette/query-management/components/index.js +4 -0
  66. package/esm2015/lib/shared/components/palette/query-management/components/query-create/query-create.component.js +18 -0
  67. package/esm2015/lib/shared/components/palette/query-management/components/query-detail/query-detail.component.js +18 -0
  68. package/esm2015/lib/shared/components/palette/query-management/components/query-list/query-list.component.js +185 -0
  69. package/esm2015/lib/shared/components/palette/query-management/domain/index.js +7 -0
  70. package/esm2015/lib/shared/components/palette/query-management/domain/party-messages/party-message.model.js +2 -0
  71. package/esm2015/lib/shared/components/palette/query-management/domain/party-messages/party-messages-group.model.js +2 -0
  72. package/esm2015/lib/shared/components/palette/query-management/domain/query-list/query-list-data/query-list-data.model.js +18 -0
  73. package/esm2015/lib/shared/components/palette/query-management/domain/query-list/query-list-item/query-list-item.model.js +35 -0
  74. package/esm2015/lib/shared/components/palette/query-management/domain/query-list/query-list-response-status.enum.js +6 -0
  75. package/esm2015/lib/shared/components/palette/query-management/domain/query-list-column/query-list-column.model.js +2 -0
  76. package/esm2015/lib/shared/components/palette/query-management/index.js +6 -0
  77. package/esm2015/lib/shared/components/palette/query-management/read-query-management-field.component.js +53 -0
  78. package/esm2015/lib/shared/components/palette/query-management/utils/query-management.utils.js +12 -0
  79. package/esm2015/lib/shared/components/palette/query-management/write-query-management-field.component.js +20 -0
  80. package/esm2015/lib/shared/components/palette/yes-no/read-yes-no-field.component.js +7 -5
  81. package/esm2015/lib/shared/components/palette/yes-no/write-yes-no-field.component.js +5 -4
  82. package/esm2015/lib/shared/components/workbasket-filters/workbasket-filters.component.js +12 -1
  83. package/esm2015/lib/shared/domain/case-flag/flag-type.model.js +17 -2
  84. package/esm2015/lib/shared/domain/definition/display-context-enum.model.js +3 -1
  85. package/esm2015/lib/shared/fixture/shared.test.fixture.js +2 -1
  86. package/esm2015/lib/shared/pipes/generic/enum-display-description/enum-display-description.pipe.js +16 -0
  87. package/esm2015/lib/shared/pipes/generic/index.js +2 -0
  88. package/esm2015/lib/shared/pipes/index.js +3 -2
  89. package/esm2015/lib/shared/pipes/pipes.module.js +9 -5
  90. package/esm2015/lib/shared/services/case-flag/case-flag-refdata.service.js +10 -4
  91. package/esm2015/lib/shared/services/fields/fields.utils.js +15 -1
  92. package/esm2015/lib/shared/services/request/request.options.builder.js +7 -1
  93. package/fesm2015/hmcts-ccd-case-ui-toolkit.js +3436 -1246
  94. package/fesm2015/hmcts-ccd-case-ui-toolkit.js.map +1 -1
  95. package/lib/shared/components/case-editor/case-edit-page/case-edit-page.component.d.ts.map +1 -1
  96. package/lib/shared/components/case-editor/case-edit-submit/case-edit-submit-titles.enum.d.ts +6 -0
  97. package/lib/shared/components/case-editor/case-edit-submit/case-edit-submit-titles.enum.d.ts.map +1 -0
  98. package/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.d.ts +1 -1
  99. package/lib/shared/components/case-editor/case-edit-submit/case-edit-submit.component.d.ts.map +1 -1
  100. package/lib/shared/components/case-editor/case-editor.module.d.ts.map +1 -1
  101. package/lib/shared/components/case-editor/services/case-flag-state.service.d.ts +11 -0
  102. package/lib/shared/components/case-editor/services/case-flag-state.service.d.ts.map +1 -0
  103. package/lib/shared/components/case-viewer/case-event-trigger/case-event-trigger.component.d.ts.map +1 -1
  104. package/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.d.ts +2 -0
  105. package/lib/shared/components/case-viewer/case-full-access-view/case-full-access-view.component.d.ts.map +1 -1
  106. package/lib/shared/components/case-viewer/case-viewer.module.d.ts +4 -4
  107. package/lib/shared/components/case-viewer/case-viewer.module.d.ts.map +1 -1
  108. package/lib/shared/components/create-case-filters/create-case-filters.component.d.ts +1 -1
  109. package/lib/shared/components/create-case-filters/create-case-filters.component.d.ts.map +1 -1
  110. package/lib/shared/components/palette/base-field/field-read.component.d.ts.map +1 -1
  111. package/lib/shared/components/palette/case-flag/components/add-comments/add-comments.component.d.ts +2 -1
  112. package/lib/shared/components/palette/case-flag/components/add-comments/add-comments.component.d.ts.map +1 -1
  113. package/lib/shared/components/palette/case-flag/components/case-flag-summary-list/case-flag-summary-list.component.d.ts +23 -8
  114. package/lib/shared/components/palette/case-flag/components/case-flag-summary-list/case-flag-summary-list.component.d.ts.map +1 -1
  115. package/lib/shared/components/palette/case-flag/components/case-flag-table/case-flag-table.component.d.ts +2 -1
  116. package/lib/shared/components/palette/case-flag/components/case-flag-table/case-flag-table.component.d.ts.map +1 -1
  117. package/lib/shared/components/palette/case-flag/components/confirm-flag-status/confirm-flag-status.component.d.ts +28 -0
  118. package/lib/shared/components/palette/case-flag/components/confirm-flag-status/confirm-flag-status.component.d.ts.map +1 -0
  119. package/lib/shared/components/palette/case-flag/components/index.d.ts +3 -0
  120. package/lib/shared/components/palette/case-flag/components/index.d.ts.map +1 -1
  121. package/lib/shared/components/palette/case-flag/components/manage-case-flags/manage-case-flags.component.d.ts +4 -8
  122. package/lib/shared/components/palette/case-flag/components/manage-case-flags/manage-case-flags.component.d.ts.map +1 -1
  123. package/lib/shared/components/palette/case-flag/components/search-language-interpreter/search-language-interpreter-control-names.enum.d.ts +5 -0
  124. package/lib/shared/components/palette/case-flag/components/search-language-interpreter/search-language-interpreter-control-names.enum.d.ts.map +1 -0
  125. package/lib/shared/components/palette/case-flag/components/search-language-interpreter/search-language-interpreter.component.d.ts +10 -8
  126. package/lib/shared/components/palette/case-flag/components/search-language-interpreter/search-language-interpreter.component.d.ts.map +1 -1
  127. package/lib/shared/components/palette/case-flag/components/select-flag-location/select-flag-location.component.d.ts +2 -1
  128. package/lib/shared/components/palette/case-flag/components/select-flag-location/select-flag-location.component.d.ts.map +1 -1
  129. package/lib/shared/components/palette/case-flag/components/select-flag-type/select-flag-type.component.d.ts +12 -8
  130. package/lib/shared/components/palette/case-flag/components/select-flag-type/select-flag-type.component.d.ts.map +1 -1
  131. package/lib/shared/components/palette/case-flag/components/update-flag/update-flag-add-translation-form/update-flag-add-translation-form.component.d.ts +27 -0
  132. package/lib/shared/components/palette/case-flag/components/update-flag/update-flag-add-translation-form/update-flag-add-translation-form.component.d.ts.map +1 -0
  133. package/lib/shared/components/palette/case-flag/components/update-flag/update-flag.component.d.ts +20 -9
  134. package/lib/shared/components/palette/case-flag/components/update-flag/update-flag.component.d.ts.map +1 -1
  135. package/lib/shared/components/palette/case-flag/domain/case-flag-state.model.d.ts +1 -10
  136. package/lib/shared/components/palette/case-flag/domain/case-flag-state.model.d.ts.map +1 -1
  137. package/lib/shared/components/palette/case-flag/domain/case-flag.model.d.ts +6 -0
  138. package/lib/shared/components/palette/case-flag/domain/case-flag.model.d.ts.map +1 -1
  139. package/lib/shared/components/palette/case-flag/domain/language.model.d.ts +1 -0
  140. package/lib/shared/components/palette/case-flag/domain/language.model.d.ts.map +1 -1
  141. package/lib/shared/components/palette/case-flag/enums/add-comments-error-message.enum.d.ts +1 -0
  142. package/lib/shared/components/palette/case-flag/enums/add-comments-error-message.enum.d.ts.map +1 -1
  143. package/lib/shared/components/palette/case-flag/enums/add-comments-step.enum.d.ts +2 -1
  144. package/lib/shared/components/palette/case-flag/enums/add-comments-step.enum.d.ts.map +1 -1
  145. package/lib/shared/components/palette/case-flag/enums/case-flag-check-your-answers-step.enum.d.ts +11 -0
  146. package/lib/shared/components/palette/case-flag/enums/case-flag-check-your-answers-step.enum.d.ts.map +1 -0
  147. package/lib/shared/components/palette/case-flag/enums/case-flag-display-context-parameter.enum.d.ts +8 -0
  148. package/lib/shared/components/palette/case-flag/enums/case-flag-display-context-parameter.enum.d.ts.map +1 -0
  149. package/lib/shared/components/palette/case-flag/enums/case-flag-form-fields.enum.d.ts +11 -0
  150. package/lib/shared/components/palette/case-flag/enums/case-flag-form-fields.enum.d.ts.map +1 -0
  151. package/lib/shared/components/palette/case-flag/enums/case-flag-status.enum.d.ts +2 -1
  152. package/lib/shared/components/palette/case-flag/enums/case-flag-status.enum.d.ts.map +1 -1
  153. package/lib/shared/components/palette/case-flag/enums/case-flag-wizard-step-title.enum.d.ts +11 -3
  154. package/lib/shared/components/palette/case-flag/enums/case-flag-wizard-step-title.enum.d.ts.map +1 -1
  155. package/lib/shared/components/palette/case-flag/enums/confirm-status-error-message.enum.d.ts +5 -0
  156. package/lib/shared/components/palette/case-flag/enums/confirm-status-error-message.enum.d.ts.map +1 -0
  157. package/lib/shared/components/palette/case-flag/enums/confirm-status-step.enum.d.ts +5 -0
  158. package/lib/shared/components/palette/case-flag/enums/confirm-status-step.enum.d.ts.map +1 -0
  159. package/lib/shared/components/palette/case-flag/enums/index.d.ts +8 -1
  160. package/lib/shared/components/palette/case-flag/enums/index.d.ts.map +1 -1
  161. package/lib/shared/components/palette/case-flag/enums/select-flag-error-message.enum.d.ts +2 -1
  162. package/lib/shared/components/palette/case-flag/enums/select-flag-error-message.enum.d.ts.map +1 -1
  163. package/lib/shared/components/palette/case-flag/enums/select-flag-type-error-message.enum.d.ts +3 -0
  164. package/lib/shared/components/palette/case-flag/enums/select-flag-type-error-message.enum.d.ts.map +1 -1
  165. package/lib/shared/components/palette/case-flag/enums/update-flag-add-translation-error-message.enum.d.ts +5 -0
  166. package/lib/shared/components/palette/case-flag/enums/update-flag-add-translation-error-message.enum.d.ts.map +1 -0
  167. package/lib/shared/components/palette/case-flag/enums/update-flag-add-translation-step.enum.d.ts +5 -0
  168. package/lib/shared/components/palette/case-flag/enums/update-flag-add-translation-step.enum.d.ts.map +1 -0
  169. package/lib/shared/components/palette/case-flag/enums/update-flag-error-message.enum.d.ts +5 -1
  170. package/lib/shared/components/palette/case-flag/enums/update-flag-error-message.enum.d.ts.map +1 -1
  171. package/lib/shared/components/palette/case-flag/enums/update-flag-step.enum.d.ts +3 -2
  172. package/lib/shared/components/palette/case-flag/enums/update-flag-step.enum.d.ts.map +1 -1
  173. package/lib/shared/components/palette/case-flag/enums/write-case-flag-field.enum.d.ts +7 -3
  174. package/lib/shared/components/palette/case-flag/enums/write-case-flag-field.enum.d.ts.map +1 -1
  175. package/lib/shared/components/palette/case-flag/index.d.ts +1 -0
  176. package/lib/shared/components/palette/case-flag/index.d.ts.map +1 -1
  177. package/lib/shared/components/palette/case-flag/pipes/flag-field-display.pipe.d.ts +19 -0
  178. package/lib/shared/components/palette/case-flag/pipes/flag-field-display.pipe.d.ts.map +1 -0
  179. package/lib/shared/components/palette/case-flag/pipes/index.d.ts +5 -0
  180. package/lib/shared/components/palette/case-flag/pipes/index.d.ts.map +1 -0
  181. package/lib/shared/components/palette/case-flag/pipes/language-interpreter-display.pipe.d.ts +18 -0
  182. package/lib/shared/components/palette/case-flag/pipes/language-interpreter-display.pipe.d.ts.map +1 -0
  183. package/lib/shared/components/palette/case-flag/pipes/manage-case-flags-label-display.pipe.d.ts +25 -0
  184. package/lib/shared/components/palette/case-flag/pipes/manage-case-flags-label-display.pipe.d.ts.map +1 -0
  185. package/lib/shared/components/palette/case-flag/pipes/update-flag-title-display.pipe.d.ts +21 -0
  186. package/lib/shared/components/palette/case-flag/pipes/update-flag-title-display.pipe.d.ts.map +1 -0
  187. package/lib/shared/components/palette/case-flag/read-case-flag-field.component.d.ts +11 -8
  188. package/lib/shared/components/palette/case-flag/read-case-flag-field.component.d.ts.map +1 -1
  189. package/lib/shared/components/palette/case-flag/write-case-flag-field.component.d.ts +23 -24
  190. package/lib/shared/components/palette/case-flag/write-case-flag-field.component.d.ts.map +1 -1
  191. package/lib/shared/components/palette/document/write-document-field.component.d.ts +4 -8
  192. package/lib/shared/components/palette/document/write-document-field.component.d.ts.map +1 -1
  193. package/lib/shared/components/palette/index.d.ts +1 -0
  194. package/lib/shared/components/palette/index.d.ts.map +1 -1
  195. package/lib/shared/components/palette/judicial-user/write-judicial-user-field.component.d.ts +5 -3
  196. package/lib/shared/components/palette/judicial-user/write-judicial-user-field.component.d.ts.map +1 -1
  197. package/lib/shared/components/palette/palette.module.d.ts +129 -118
  198. package/lib/shared/components/palette/palette.module.d.ts.map +1 -1
  199. package/lib/shared/components/palette/palette.service.d.ts.map +1 -1
  200. package/lib/shared/components/palette/query-management/__mocks__/index.d.ts +3 -0
  201. package/lib/shared/components/palette/query-management/__mocks__/index.d.ts.map +1 -0
  202. package/lib/shared/components/palette/query-management/components/index.d.ts +4 -0
  203. package/lib/shared/components/palette/query-management/components/index.d.ts.map +1 -0
  204. package/lib/shared/components/palette/query-management/components/query-create/query-create.component.d.ts +9 -0
  205. package/lib/shared/components/palette/query-management/components/query-create/query-create.component.d.ts.map +1 -0
  206. package/lib/shared/components/palette/query-management/components/query-detail/query-detail.component.d.ts +9 -0
  207. package/lib/shared/components/palette/query-management/components/query-detail/query-detail.component.d.ts.map +1 -0
  208. package/lib/shared/components/palette/query-management/components/query-list/query-list.component.d.ts +16 -0
  209. package/lib/shared/components/palette/query-management/components/query-list/query-list.component.d.ts.map +1 -0
  210. package/lib/shared/components/palette/query-management/domain/index.d.ts +7 -0
  211. package/lib/shared/components/palette/query-management/domain/index.d.ts.map +1 -0
  212. package/lib/shared/components/palette/query-management/domain/party-messages/party-message.model.d.ts +14 -0
  213. package/lib/shared/components/palette/query-management/domain/party-messages/party-message.model.d.ts.map +1 -0
  214. package/lib/shared/components/palette/query-management/domain/party-messages/party-messages-group.model.d.ts +7 -0
  215. package/lib/shared/components/palette/query-management/domain/party-messages/party-messages-group.model.d.ts.map +1 -0
  216. package/lib/shared/components/palette/query-management/domain/query-list/query-list-data/query-list-data.model.d.ts +10 -0
  217. package/lib/shared/components/palette/query-management/domain/query-list/query-list-data/query-list-data.model.d.ts.map +1 -0
  218. package/lib/shared/components/palette/query-management/domain/query-list/query-list-item/query-list-item.model.d.ts +21 -0
  219. package/lib/shared/components/palette/query-management/domain/query-list/query-list-item/query-list-item.model.d.ts.map +1 -0
  220. package/lib/shared/components/palette/query-management/domain/query-list/query-list-response-status.enum.d.ts +5 -0
  221. package/lib/shared/components/palette/query-management/domain/query-list/query-list-response-status.enum.d.ts.map +1 -0
  222. package/lib/shared/components/palette/query-management/domain/query-list-column/query-list-column.model.d.ts +7 -0
  223. package/lib/shared/components/palette/query-management/domain/query-list-column/query-list-column.model.d.ts.map +1 -0
  224. package/lib/shared/components/palette/query-management/index.d.ts +6 -0
  225. package/lib/shared/components/palette/query-management/index.d.ts.map +1 -0
  226. package/lib/shared/components/palette/query-management/read-query-management-field.component.d.ts +14 -0
  227. package/lib/shared/components/palette/query-management/read-query-management-field.component.d.ts.map +1 -0
  228. package/lib/shared/components/palette/query-management/utils/query-management.utils.d.ts +7 -0
  229. package/lib/shared/components/palette/query-management/utils/query-management.utils.d.ts.map +1 -0
  230. package/lib/shared/components/palette/query-management/write-query-management-field.component.d.ts +10 -0
  231. package/lib/shared/components/palette/query-management/write-query-management-field.component.d.ts.map +1 -0
  232. package/lib/shared/components/workbasket-filters/workbasket-filters.component.d.ts +1 -1
  233. package/lib/shared/components/workbasket-filters/workbasket-filters.component.d.ts.map +1 -1
  234. package/lib/shared/domain/case-flag/flag-type.model.d.ts +6 -1
  235. package/lib/shared/domain/case-flag/flag-type.model.d.ts.map +1 -1
  236. package/lib/shared/domain/definition/display-context-enum.model.d.ts +3 -1
  237. package/lib/shared/domain/definition/display-context-enum.model.d.ts.map +1 -1
  238. package/lib/shared/fixture/shared.test.fixture.d.ts.map +1 -1
  239. package/lib/shared/pipes/generic/enum-display-description/enum-display-description.pipe.d.ts +8 -0
  240. package/lib/shared/pipes/generic/enum-display-description/enum-display-description.pipe.d.ts.map +1 -0
  241. package/lib/shared/pipes/generic/index.d.ts +2 -0
  242. package/lib/shared/pipes/generic/index.d.ts.map +1 -0
  243. package/lib/shared/pipes/index.d.ts +2 -1
  244. package/lib/shared/pipes/index.d.ts.map +1 -1
  245. package/lib/shared/pipes/pipes.module.d.ts +3 -2
  246. package/lib/shared/pipes/pipes.module.d.ts.map +1 -1
  247. package/lib/shared/services/case-flag/case-flag-refdata.service.d.ts +3 -2
  248. package/lib/shared/services/case-flag/case-flag-refdata.service.d.ts.map +1 -1
  249. package/lib/shared/services/fields/fields.utils.d.ts +1 -0
  250. package/lib/shared/services/fields/fields.utils.d.ts.map +1 -1
  251. package/lib/shared/services/request/request.options.builder.d.ts.map +1 -1
  252. package/package.json +1 -1
@@ -16,10 +16,11 @@ export class CaseFlagRefdataService {
16
16
  *
17
17
  * @param serviceId The HMCTS Service Code for a jurisdiction or service. **Note:** This is _not_ the service name
18
18
  * @param flagType `PARTY` for party-level flags; `CASE` for case-level
19
- * @param welshRequired `true` if Welsh language versions of flags are required; `false` otherwise (future feature)
19
+ * @param welshRequired `true` if Welsh language versions of flags are required; `false` otherwise
20
+ * @param externalFlagsOnly Only flags with the attribute `availableExternally` set to `true` will be returned
20
21
  * @returns An `Observable` of an array of flag types
21
22
  */
22
- getCaseFlagsRefdata(serviceId, flagType, welshRequired) {
23
+ getCaseFlagsRefdata(serviceId, flagType, welshRequired, externalFlagsOnly) {
23
24
  let url = this.appConfig.getCaseFlagsRefdataApiUrl();
24
25
  if (url) {
25
26
  url = url.replace(':sid', serviceId);
@@ -27,10 +28,15 @@ export class CaseFlagRefdataService {
27
28
  url += `?flag-type=${flagType}`;
28
29
  }
29
30
  if (typeof welshRequired === 'boolean') {
30
- // Check if flag-type has been added to the query string; if so, append welsh-required with '&'
31
+ // Check if anything has been added to the query string; if so, append welsh-required with '&'
31
32
  url.indexOf('?') > -1 ? url += '&' : url += '?';
32
33
  welshRequired ? url += 'welsh-required=Y' : url += 'welsh-required=N';
33
34
  }
35
+ if (externalFlagsOnly) {
36
+ // Check if anything has been added to the query string; if so, append available-external-flag with '&'
37
+ url.indexOf('?') > -1 ? url += '&' : url += '?';
38
+ url += 'available-external-flag=Y';
39
+ }
34
40
  return this.http
35
41
  .get(url, { observe: 'body' })
36
42
  .pipe(
@@ -93,4 +99,4 @@ CaseFlagRefdataService.ɵprov = i0.ɵɵdefineInjectable({ token: CaseFlagRefdata
93
99
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CaseFlagRefdataService, [{
94
100
  type: Injectable
95
101
  }], function () { return [{ type: i1.HttpService }, { type: i2.AbstractAppConfig }]; }, null); })();
96
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS1mbGFnLXJlZmRhdGEuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvc2VydmljZXMvY2FzZS1mbGFnL2Nhc2UtZmxhZy1yZWZkYXRhLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWMsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7OztBQUl0QyxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLFlBQ21CLElBQWlCLEVBQ2pCLFNBQTRCO1FBRDVCLFNBQUksR0FBSixJQUFJLENBQWE7UUFDakIsY0FBUyxHQUFULFNBQVMsQ0FBbUI7SUFDM0MsQ0FBQztJQUVMOzs7Ozs7O09BT0c7SUFDSSxtQkFBbUIsQ0FBQyxTQUFpQixFQUFFLFFBQThCLEVBQUUsYUFBdUI7UUFDbkcsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBRXJELElBQUksR0FBRyxFQUFFO1lBQ1AsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3JDLElBQUksUUFBUSxFQUFFO2dCQUNaLEdBQUcsSUFBSSxjQUFjLFFBQVEsRUFBRSxDQUFDO2FBQ2pDO1lBQ0QsSUFBSSxPQUFPLGFBQWEsS0FBSyxTQUFTLEVBQUU7Z0JBQ3RDLCtGQUErRjtnQkFDL0YsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQztnQkFDaEQsYUFBYSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQzthQUN2RTtZQUVELE9BQU8sSUFBSSxDQUFDLElBQUk7aUJBQ2IsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUMsQ0FBQztpQkFDM0IsSUFBSTtZQUNILGdIQUFnSDtZQUNoSCxpSEFBaUg7WUFDakgsbUJBQW1CO1lBQ25CLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDVCxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUU7b0JBQ2pILDBHQUEwRztvQkFDMUcsMkJBQTJCO29CQUMzQixPQUFPLFVBQVUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDLENBQUM7aUJBQ2xFO2dCQUNELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7WUFDbkMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztTQUNMO1FBRUQsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxtQ0FBbUMsQ0FBQyxZQUFxQjtRQUM5RCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFFaEQsSUFBSSxHQUFHLEVBQUU7WUFDUCxHQUFHLElBQUksY0FBYyxDQUFDO1lBQ3RCLElBQUksWUFBWSxFQUFFO2dCQUNoQixHQUFHLElBQUksb0JBQW9CLFlBQVksRUFBRSxDQUFDO2FBQzNDO1lBRUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQztTQUM5QztRQUVELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLGdDQUFnQyxDQUFDLFVBQW1CO1FBQ3pELElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUVoRCxJQUFJLEdBQUcsRUFBRTtZQUNQLEdBQUcsSUFBSSxjQUFjLENBQUM7WUFDdEIsSUFBSSxVQUFVLEVBQUU7Z0JBQ2QsR0FBRyxJQUFJLGdCQUFnQixVQUFVLEVBQUUsQ0FBQzthQUNyQztZQUVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUM7U0FDOUM7UUFFRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQixDQUFDOzs0RkE3RlUsc0JBQXNCOzhEQUF0QixzQkFBc0IsV0FBdEIsc0JBQXNCO3VGQUF0QixzQkFBc0I7Y0FEbEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBYnN0cmFjdEFwcENvbmZpZyB9IGZyb20gJy4uLy4uLy4uL2FwcC5jb25maWcnO1xuaW1wb3J0IHsgRmxhZ1R5cGUsIEhtY3RzU2VydmljZURldGFpbCB9IGZyb20gJy4uLy4uL2RvbWFpbi9jYXNlLWZsYWcnO1xuaW1wb3J0IHsgSHR0cFNlcnZpY2UgfSBmcm9tICcuLi9odHRwJztcbmltcG9ydCB7IFJlZmRhdGFDYXNlRmxhZ1R5cGUgfSBmcm9tICcuL3JlZmRhdGEtY2FzZS1mbGFnLXR5cGUuZW51bSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDYXNlRmxhZ1JlZmRhdGFTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwOiBIdHRwU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFwcENvbmZpZzogQWJzdHJhY3RBcHBDb25maWdcbiAgKSB7IH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBDYXNlIEZsYWcgdHlwZXMgZm9yIGFuIEhNQ1RTIHNlcnZpY2UuXG4gICAqXG4gICAqIEBwYXJhbSBzZXJ2aWNlSWQgVGhlIEhNQ1RTIFNlcnZpY2UgQ29kZSBmb3IgYSBqdXJpc2RpY3Rpb24gb3Igc2VydmljZS4gKipOb3RlOioqIFRoaXMgaXMgX25vdF8gdGhlIHNlcnZpY2UgbmFtZVxuICAgKiBAcGFyYW0gZmxhZ1R5cGUgYFBBUlRZYCBmb3IgcGFydHktbGV2ZWwgZmxhZ3M7IGBDQVNFYCBmb3IgY2FzZS1sZXZlbFxuICAgKiBAcGFyYW0gd2Vsc2hSZXF1aXJlZCBgdHJ1ZWAgaWYgV2Vsc2ggbGFuZ3VhZ2UgdmVyc2lvbnMgb2YgZmxhZ3MgYXJlIHJlcXVpcmVkOyBgZmFsc2VgIG90aGVyd2lzZSAoZnV0dXJlIGZlYXR1cmUpXG4gICAqIEByZXR1cm5zIEFuIGBPYnNlcnZhYmxlYCBvZiBhbiBhcnJheSBvZiBmbGFnIHR5cGVzXG4gICAqL1xuICBwdWJsaWMgZ2V0Q2FzZUZsYWdzUmVmZGF0YShzZXJ2aWNlSWQ6IHN0cmluZywgZmxhZ1R5cGU/OiBSZWZkYXRhQ2FzZUZsYWdUeXBlLCB3ZWxzaFJlcXVpcmVkPzogYm9vbGVhbik6IE9ic2VydmFibGU8RmxhZ1R5cGVbXT4ge1xuICAgIGxldCB1cmwgPSB0aGlzLmFwcENvbmZpZy5nZXRDYXNlRmxhZ3NSZWZkYXRhQXBpVXJsKCk7XG5cbiAgICBpZiAodXJsKSB7XG4gICAgICB1cmwgPSB1cmwucmVwbGFjZSgnOnNpZCcsIHNlcnZpY2VJZCk7XG4gICAgICBpZiAoZmxhZ1R5cGUpIHtcbiAgICAgICAgdXJsICs9IGA/ZmxhZy10eXBlPSR7ZmxhZ1R5cGV9YDtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2Ygd2Vsc2hSZXF1aXJlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIGZsYWctdHlwZSBoYXMgYmVlbiBhZGRlZCB0byB0aGUgcXVlcnkgc3RyaW5nOyBpZiBzbywgYXBwZW5kIHdlbHNoLXJlcXVpcmVkIHdpdGggJyYnXG4gICAgICAgIHVybC5pbmRleE9mKCc/JykgPiAtMSA/IHVybCArPSAnJicgOiB1cmwgKz0gJz8nO1xuICAgICAgICB3ZWxzaFJlcXVpcmVkID8gdXJsICs9ICd3ZWxzaC1yZXF1aXJlZD1ZJyA6IHVybCArPSAnd2Vsc2gtcmVxdWlyZWQ9Tic7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgLmdldCh1cmwsIHtvYnNlcnZlOiAnYm9keSd9KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICAvLyBSZWZlcmVuY2UgRGF0YSBDb21tb24gQVBJIHJldHVybnMgYSBzaW5nbGUgb2JqZWN0IHdpdGggYSBcImZsYWdzXCIgYXJyYXksIHdoaWNoIGl0c2VsZiBjb250YWlucyBhIHNpbmdsZSBvYmplY3RcbiAgICAgICAgICAvLyB3aXRoIGEgXCJGbGFnRGV0YWlsc1wiIGFycmF5LCB3aGljaCBjb250YWlucyBhIGhpZXJhcmNoeSBvZiBmbGFnIHR5cGVzIGluIGFuIG9iamVjdCAtIG9uZSBlYWNoIGZvciBcIlBhcnR5XCIgZmxhZ3NcbiAgICAgICAgICAvLyBhbmQgXCJDYXNlXCIgZmxhZ3NcbiAgICAgICAgICBtYXAoYm9keSA9PiB7XG4gICAgICAgICAgICBpZiAoIWJvZHkgfHwgIWJvZHkuZmxhZ3MgfHwgIWJvZHkuZmxhZ3MubGVuZ3RoIHx8ICFib2R5LmZsYWdzWzBdLkZsYWdEZXRhaWxzIHx8ICFib2R5LmZsYWdzWzBdLkZsYWdEZXRhaWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAvLyBOb3RlOiBSZWZlcmVuY2UgRGF0YSBDb21tb24gQVBJIGFwcGVhcnMgdG8gcmVzcG9uZCB3aXRoIGEgNDA0IGVycm9yIHJhdGhlciB0aGFuIHNlbmQgYW4gZW1wdHkgcmVzcG9uc2UsXG4gICAgICAgICAgICAgIC8vIHNvIHRoaXMgbWF5IGJlIHJlZHVuZGFudFxuICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihuZXcgRXJyb3IoJ05vIGZsYWcgdHlwZXMgY291bGQgYmUgcmV0cmlldmVkJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJvZHkuZmxhZ3NbMF0uRmxhZ0RldGFpbHM7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2YobnVsbCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBITUNUUyBzZXJ2aWNlIGRldGFpbHMgZm9yIGEganVyaXNkaWN0aW9uIG9yIHNlcnZpY2UsIGluY2x1ZGluZyBzZXJ2aWNlIGNvZGVzLiBNb3JlIHRoYW4gb25lXG4gICAqIHNlcnZpY2UgY29kZSBtYXkgYmUgcHJlc2VudC4gRm9yIGV4YW1wbGUsIHRoZSBEaXZvcmNlIGp1cmlzZGljdGlvbi9zZXJ2aWNlIGhhcyBjb3JyZXNwb25kaW5nIHNlcnZpY2UgY29kZXMgb2ZcbiAgICogXCJBQkExXCIgYW5kIFwiQUJBMlwiLlxuICAgKlxuICAgKiBAcGFyYW0gc2VydmljZU5hbWVzIFRoZSBzZXJ2aWNlIG5hbWUocykgdG8gbG9vayB1cCwgY29tbWEtc2VwYXJhdGVkIGlmIG1vcmUgdGhhbiBvbmVcbiAgICogQHJldHVybnMgQW4gYE9ic2VydmFibGVgIG9mIGFuIGFycmF5IG9mIHNlcnZpY2UgZGV0YWlsc1xuICAgKi9cbiAgcHVibGljIGdldEhtY3RzU2VydmljZURldGFpbHNCeVNlcnZpY2VOYW1lKHNlcnZpY2VOYW1lcz86IHN0cmluZyk6IE9ic2VydmFibGU8SG1jdHNTZXJ2aWNlRGV0YWlsW10+IHtcbiAgICBsZXQgdXJsID0gdGhpcy5hcHBDb25maWcuZ2V0TG9jYXRpb25SZWZBcGlVcmwoKTtcblxuICAgIGlmICh1cmwpIHtcbiAgICAgIHVybCArPSAnL29yZ1NlcnZpY2VzJztcbiAgICAgIGlmIChzZXJ2aWNlTmFtZXMpIHtcbiAgICAgICAgdXJsICs9IGA/Y2NkU2VydmljZU5hbWVzPSR7c2VydmljZU5hbWVzfWA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybCwge29ic2VydmU6ICdib2R5J30pO1xuICAgIH1cblxuICAgIHJldHVybiBvZihudWxsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIEhNQ1RTIHNlcnZpY2UgZGV0YWlscyBmb3IgYSBjYXNlIHR5cGUsIGluY2x1ZGluZyBzZXJ2aWNlIGNvZGUuIEZvciBleGFtcGxlLCB0aGVcbiAgICogXCJGaW5hbmNpYWxSZW1lZHlDb250ZXN0ZWRcIiBjYXNlIHR5cGUgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBEaXZvcmNlIGp1cmlzZGljdGlvbi9zZXJ2aWNlIGFuZCBzZXJ2aWNlIGNvZGUgXCJBQkEyXCIuXG4gICAqXG4gICAqIE5vdGUgdGhhdCBhIGNhc2UgdHlwZSBtaWdodCBub3QgYmUgYXNzb2NpYXRlZCB3aXRoIGFueSBzZXJ2aWNlIGNvZGVzIG9mIGEganVyaXNkaWN0aW9uIG9yIHNlcnZpY2UuXG4gICAqXG4gICAqIEBwYXJhbSBjYXNlVHlwZUlkIFRoZSBjYXNlIHR5cGUgSUQgdG8gbG9vayB1cFxuICAgKiBAcmV0dXJucyBBbiBgT2JzZXJ2YWJsZWAgb2YgYW4gYXJyYXkgb2Ygc2VydmljZSBkZXRhaWxzXG4gICAqL1xuICBwdWJsaWMgZ2V0SG1jdHNTZXJ2aWNlRGV0YWlsc0J5Q2FzZVR5cGUoY2FzZVR5cGVJZD86IHN0cmluZyk6IE9ic2VydmFibGU8SG1jdHNTZXJ2aWNlRGV0YWlsW10+IHtcbiAgICBsZXQgdXJsID0gdGhpcy5hcHBDb25maWcuZ2V0TG9jYXRpb25SZWZBcGlVcmwoKTtcblxuICAgIGlmICh1cmwpIHtcbiAgICAgIHVybCArPSAnL29yZ1NlcnZpY2VzJztcbiAgICAgIGlmIChjYXNlVHlwZUlkKSB7XG4gICAgICAgIHVybCArPSBgP2NjZENhc2VUeXBlPSR7Y2FzZVR5cGVJZH1gO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldCh1cmwsIHtvYnNlcnZlOiAnYm9keSd9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2YobnVsbCk7XG4gIH1cbn1cbiJdfQ==
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FzZS1mbGFnLXJlZmRhdGEuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NjZC1jYXNlLXVpLXRvb2xraXQvc3JjL2xpYi9zaGFyZWQvc2VydmljZXMvY2FzZS1mbGFnL2Nhc2UtZmxhZy1yZWZkYXRhLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWMsRUFBRSxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFeEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7OztBQUl0QyxNQUFNLE9BQU8sc0JBQXNCO0lBQ2pDLFlBQ21CLElBQWlCLEVBQ2pCLFNBQTRCO1FBRDVCLFNBQUksR0FBSixJQUFJLENBQWE7UUFDakIsY0FBUyxHQUFULFNBQVMsQ0FBbUI7SUFDM0MsQ0FBQztJQUVMOzs7Ozs7OztPQVFHO0lBQ0ksbUJBQW1CLENBQUMsU0FBaUIsRUFBRSxRQUE4QixFQUFFLGFBQXVCLEVBQUUsaUJBQTJCO1FBQ2hJLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUVyRCxJQUFJLEdBQUcsRUFBRTtZQUNQLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNyQyxJQUFJLFFBQVEsRUFBRTtnQkFDWixHQUFHLElBQUksY0FBYyxRQUFRLEVBQUUsQ0FBQzthQUNqQztZQUNELElBQUksT0FBTyxhQUFhLEtBQUssU0FBUyxFQUFFO2dCQUN0Qyw4RkFBOEY7Z0JBQzlGLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUM7Z0JBQ2hELGFBQWEsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksa0JBQWtCLENBQUM7YUFDdkU7WUFFRCxJQUFJLGlCQUFpQixFQUFFO2dCQUNyQix1R0FBdUc7Z0JBQ3ZHLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUM7Z0JBQ2hELEdBQUcsSUFBSSwyQkFBMkIsQ0FBQzthQUNwQztZQUVELE9BQU8sSUFBSSxDQUFDLElBQUk7aUJBQ2IsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUMsQ0FBQztpQkFDM0IsSUFBSTtZQUNILGdIQUFnSDtZQUNoSCxpSEFBaUg7WUFDakgsbUJBQW1CO1lBQ25CLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDVCxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUU7b0JBQ2pILDBHQUEwRztvQkFDMUcsMkJBQTJCO29CQUMzQixPQUFPLFVBQVUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDLENBQUM7aUJBQ2xFO2dCQUNELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7WUFDbkMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztTQUNMO1FBRUQsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxtQ0FBbUMsQ0FBQyxZQUFxQjtRQUM5RCxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFFaEQsSUFBSSxHQUFHLEVBQUU7WUFDUCxHQUFHLElBQUksY0FBYyxDQUFDO1lBQ3RCLElBQUksWUFBWSxFQUFFO2dCQUNoQixHQUFHLElBQUksb0JBQW9CLFlBQVksRUFBRSxDQUFDO2FBQzNDO1lBRUQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBQyxPQUFPLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQztTQUM5QztRQUVELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNJLGdDQUFnQyxDQUFDLFVBQW1CO1FBQ3pELElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUVoRCxJQUFJLEdBQUcsRUFBRTtZQUNQLEdBQUcsSUFBSSxjQUFjLENBQUM7WUFDdEIsSUFBSSxVQUFVLEVBQUU7Z0JBQ2QsR0FBRyxJQUFJLGdCQUFnQixVQUFVLEVBQUUsQ0FBQzthQUNyQztZQUVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUM7U0FDOUM7UUFFRCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQixDQUFDOzs0RkFwR1Usc0JBQXNCOzhEQUF0QixzQkFBc0IsV0FBdEIsc0JBQXNCO3VGQUF0QixzQkFBc0I7Y0FEbEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBYnN0cmFjdEFwcENvbmZpZyB9IGZyb20gJy4uLy4uLy4uL2FwcC5jb25maWcnO1xuaW1wb3J0IHsgRmxhZ1R5cGUsIEhtY3RzU2VydmljZURldGFpbCB9IGZyb20gJy4uLy4uL2RvbWFpbi9jYXNlLWZsYWcnO1xuaW1wb3J0IHsgSHR0cFNlcnZpY2UgfSBmcm9tICcuLi9odHRwJztcbmltcG9ydCB7IFJlZmRhdGFDYXNlRmxhZ1R5cGUgfSBmcm9tICcuL3JlZmRhdGEtY2FzZS1mbGFnLXR5cGUuZW51bSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDYXNlRmxhZ1JlZmRhdGFTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBodHRwOiBIdHRwU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFwcENvbmZpZzogQWJzdHJhY3RBcHBDb25maWdcbiAgKSB7IH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBDYXNlIEZsYWcgdHlwZXMgZm9yIGFuIEhNQ1RTIHNlcnZpY2UuXG4gICAqXG4gICAqIEBwYXJhbSBzZXJ2aWNlSWQgVGhlIEhNQ1RTIFNlcnZpY2UgQ29kZSBmb3IgYSBqdXJpc2RpY3Rpb24gb3Igc2VydmljZS4gKipOb3RlOioqIFRoaXMgaXMgX25vdF8gdGhlIHNlcnZpY2UgbmFtZVxuICAgKiBAcGFyYW0gZmxhZ1R5cGUgYFBBUlRZYCBmb3IgcGFydHktbGV2ZWwgZmxhZ3M7IGBDQVNFYCBmb3IgY2FzZS1sZXZlbFxuICAgKiBAcGFyYW0gd2Vsc2hSZXF1aXJlZCBgdHJ1ZWAgaWYgV2Vsc2ggbGFuZ3VhZ2UgdmVyc2lvbnMgb2YgZmxhZ3MgYXJlIHJlcXVpcmVkOyBgZmFsc2VgIG90aGVyd2lzZVxuICAgKiBAcGFyYW0gZXh0ZXJuYWxGbGFnc09ubHkgT25seSBmbGFncyB3aXRoIHRoZSBhdHRyaWJ1dGUgYGF2YWlsYWJsZUV4dGVybmFsbHlgIHNldCB0byBgdHJ1ZWAgd2lsbCBiZSByZXR1cm5lZFxuICAgKiBAcmV0dXJucyBBbiBgT2JzZXJ2YWJsZWAgb2YgYW4gYXJyYXkgb2YgZmxhZyB0eXBlc1xuICAgKi9cbiAgcHVibGljIGdldENhc2VGbGFnc1JlZmRhdGEoc2VydmljZUlkOiBzdHJpbmcsIGZsYWdUeXBlPzogUmVmZGF0YUNhc2VGbGFnVHlwZSwgd2Vsc2hSZXF1aXJlZD86IGJvb2xlYW4sIGV4dGVybmFsRmxhZ3NPbmx5PzogYm9vbGVhbik6IE9ic2VydmFibGU8RmxhZ1R5cGVbXT4ge1xuICAgIGxldCB1cmwgPSB0aGlzLmFwcENvbmZpZy5nZXRDYXNlRmxhZ3NSZWZkYXRhQXBpVXJsKCk7XG5cbiAgICBpZiAodXJsKSB7XG4gICAgICB1cmwgPSB1cmwucmVwbGFjZSgnOnNpZCcsIHNlcnZpY2VJZCk7XG4gICAgICBpZiAoZmxhZ1R5cGUpIHtcbiAgICAgICAgdXJsICs9IGA/ZmxhZy10eXBlPSR7ZmxhZ1R5cGV9YDtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2Ygd2Vsc2hSZXF1aXJlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIGFueXRoaW5nIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBxdWVyeSBzdHJpbmc7IGlmIHNvLCBhcHBlbmQgd2Vsc2gtcmVxdWlyZWQgd2l0aCAnJidcbiAgICAgICAgdXJsLmluZGV4T2YoJz8nKSA+IC0xID8gdXJsICs9ICcmJyA6IHVybCArPSAnPyc7XG4gICAgICAgIHdlbHNoUmVxdWlyZWQgPyB1cmwgKz0gJ3dlbHNoLXJlcXVpcmVkPVknIDogdXJsICs9ICd3ZWxzaC1yZXF1aXJlZD1OJztcbiAgICAgIH1cblxuICAgICAgaWYgKGV4dGVybmFsRmxhZ3NPbmx5KSB7XG4gICAgICAgIC8vIENoZWNrIGlmIGFueXRoaW5nIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBxdWVyeSBzdHJpbmc7IGlmIHNvLCBhcHBlbmQgYXZhaWxhYmxlLWV4dGVybmFsLWZsYWcgd2l0aCAnJidcbiAgICAgICAgdXJsLmluZGV4T2YoJz8nKSA+IC0xID8gdXJsICs9ICcmJyA6IHVybCArPSAnPyc7XG4gICAgICAgIHVybCArPSAnYXZhaWxhYmxlLWV4dGVybmFsLWZsYWc9WSc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgICAgLmdldCh1cmwsIHtvYnNlcnZlOiAnYm9keSd9KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICAvLyBSZWZlcmVuY2UgRGF0YSBDb21tb24gQVBJIHJldHVybnMgYSBzaW5nbGUgb2JqZWN0IHdpdGggYSBcImZsYWdzXCIgYXJyYXksIHdoaWNoIGl0c2VsZiBjb250YWlucyBhIHNpbmdsZSBvYmplY3RcbiAgICAgICAgICAvLyB3aXRoIGEgXCJGbGFnRGV0YWlsc1wiIGFycmF5LCB3aGljaCBjb250YWlucyBhIGhpZXJhcmNoeSBvZiBmbGFnIHR5cGVzIGluIGFuIG9iamVjdCAtIG9uZSBlYWNoIGZvciBcIlBhcnR5XCIgZmxhZ3NcbiAgICAgICAgICAvLyBhbmQgXCJDYXNlXCIgZmxhZ3NcbiAgICAgICAgICBtYXAoYm9keSA9PiB7XG4gICAgICAgICAgICBpZiAoIWJvZHkgfHwgIWJvZHkuZmxhZ3MgfHwgIWJvZHkuZmxhZ3MubGVuZ3RoIHx8ICFib2R5LmZsYWdzWzBdLkZsYWdEZXRhaWxzIHx8ICFib2R5LmZsYWdzWzBdLkZsYWdEZXRhaWxzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAvLyBOb3RlOiBSZWZlcmVuY2UgRGF0YSBDb21tb24gQVBJIGFwcGVhcnMgdG8gcmVzcG9uZCB3aXRoIGEgNDA0IGVycm9yIHJhdGhlciB0aGFuIHNlbmQgYW4gZW1wdHkgcmVzcG9uc2UsXG4gICAgICAgICAgICAgIC8vIHNvIHRoaXMgbWF5IGJlIHJlZHVuZGFudFxuICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihuZXcgRXJyb3IoJ05vIGZsYWcgdHlwZXMgY291bGQgYmUgcmV0cmlldmVkJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJvZHkuZmxhZ3NbMF0uRmxhZ0RldGFpbHM7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2YobnVsbCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSBITUNUUyBzZXJ2aWNlIGRldGFpbHMgZm9yIGEganVyaXNkaWN0aW9uIG9yIHNlcnZpY2UsIGluY2x1ZGluZyBzZXJ2aWNlIGNvZGVzLiBNb3JlIHRoYW4gb25lXG4gICAqIHNlcnZpY2UgY29kZSBtYXkgYmUgcHJlc2VudC4gRm9yIGV4YW1wbGUsIHRoZSBEaXZvcmNlIGp1cmlzZGljdGlvbi9zZXJ2aWNlIGhhcyBjb3JyZXNwb25kaW5nIHNlcnZpY2UgY29kZXMgb2ZcbiAgICogXCJBQkExXCIgYW5kIFwiQUJBMlwiLlxuICAgKlxuICAgKiBAcGFyYW0gc2VydmljZU5hbWVzIFRoZSBzZXJ2aWNlIG5hbWUocykgdG8gbG9vayB1cCwgY29tbWEtc2VwYXJhdGVkIGlmIG1vcmUgdGhhbiBvbmVcbiAgICogQHJldHVybnMgQW4gYE9ic2VydmFibGVgIG9mIGFuIGFycmF5IG9mIHNlcnZpY2UgZGV0YWlsc1xuICAgKi9cbiAgcHVibGljIGdldEhtY3RzU2VydmljZURldGFpbHNCeVNlcnZpY2VOYW1lKHNlcnZpY2VOYW1lcz86IHN0cmluZyk6IE9ic2VydmFibGU8SG1jdHNTZXJ2aWNlRGV0YWlsW10+IHtcbiAgICBsZXQgdXJsID0gdGhpcy5hcHBDb25maWcuZ2V0TG9jYXRpb25SZWZBcGlVcmwoKTtcblxuICAgIGlmICh1cmwpIHtcbiAgICAgIHVybCArPSAnL29yZ1NlcnZpY2VzJztcbiAgICAgIGlmIChzZXJ2aWNlTmFtZXMpIHtcbiAgICAgICAgdXJsICs9IGA/Y2NkU2VydmljZU5hbWVzPSR7c2VydmljZU5hbWVzfWA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybCwge29ic2VydmU6ICdib2R5J30pO1xuICAgIH1cblxuICAgIHJldHVybiBvZihudWxsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIEhNQ1RTIHNlcnZpY2UgZGV0YWlscyBmb3IgYSBjYXNlIHR5cGUsIGluY2x1ZGluZyBzZXJ2aWNlIGNvZGUuIEZvciBleGFtcGxlLCB0aGVcbiAgICogXCJGaW5hbmNpYWxSZW1lZHlDb250ZXN0ZWRcIiBjYXNlIHR5cGUgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBEaXZvcmNlIGp1cmlzZGljdGlvbi9zZXJ2aWNlIGFuZCBzZXJ2aWNlIGNvZGUgXCJBQkEyXCIuXG4gICAqXG4gICAqIE5vdGUgdGhhdCBhIGNhc2UgdHlwZSBtaWdodCBub3QgYmUgYXNzb2NpYXRlZCB3aXRoIGFueSBzZXJ2aWNlIGNvZGVzIG9mIGEganVyaXNkaWN0aW9uIG9yIHNlcnZpY2UuXG4gICAqXG4gICAqIEBwYXJhbSBjYXNlVHlwZUlkIFRoZSBjYXNlIHR5cGUgSUQgdG8gbG9vayB1cFxuICAgKiBAcmV0dXJucyBBbiBgT2JzZXJ2YWJsZWAgb2YgYW4gYXJyYXkgb2Ygc2VydmljZSBkZXRhaWxzXG4gICAqL1xuICBwdWJsaWMgZ2V0SG1jdHNTZXJ2aWNlRGV0YWlsc0J5Q2FzZVR5cGUoY2FzZVR5cGVJZD86IHN0cmluZyk6IE9ic2VydmFibGU8SG1jdHNTZXJ2aWNlRGV0YWlsW10+IHtcbiAgICBsZXQgdXJsID0gdGhpcy5hcHBDb25maWcuZ2V0TG9jYXRpb25SZWZBcGlVcmwoKTtcblxuICAgIGlmICh1cmwpIHtcbiAgICAgIHVybCArPSAnL29yZ1NlcnZpY2VzJztcbiAgICAgIGlmIChjYXNlVHlwZUlkKSB7XG4gICAgICAgIHVybCArPSBgP2NjZENhc2VUeXBlPSR7Y2FzZVR5cGVJZH1gO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldCh1cmwsIHtvYnNlcnZlOiAnYm9keSd9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2YobnVsbCk7XG4gIH1cbn1cbiJdfQ==
@@ -448,6 +448,20 @@ export class FieldsUtils {
448
448
  }
449
449
  return activeCount;
450
450
  }
451
+ static getValidationErrorMessageForFlagLauncherCaseField(caseField) {
452
+ switch (caseField.display_context_parameter) {
453
+ case '#ARGUMENT(CREATE)':
454
+ return 'Please select Next to complete the creation of the case flag';
455
+ case '#ARGUMENT(CREATE,EXTERNAL)':
456
+ return 'Please select Next to complete the creation of the support request';
457
+ case '#ARGUMENT(UPDATE)':
458
+ return 'Please select Next to complete the update of the selected case flag';
459
+ case '#ARGUMENT(UPDATE,EXTERNAL)':
460
+ return 'Please select Next to complete the update of the selected support request';
461
+ default:
462
+ return '';
463
+ }
464
+ }
451
465
  buildCanShowPredicate(eventTrigger, form) {
452
466
  const currentState = this.getCurrentEventState(eventTrigger, form);
453
467
  return (page) => {
@@ -584,4 +598,4 @@ FieldsUtils.ɵprov = i0.ɵɵdefineInjectable({ token: FieldsUtils, factory: Fiel
584
598
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FieldsUtils, [{
585
599
  type: Injectable
586
600
  }], null, null); })();
587
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRzLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9zZXJ2aWNlcy9maWVsZHMvZmllbGRzLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBbUIsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUkxRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDaEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzFELE9BQU8sRUFBb0IsU0FBUyxFQUF5RSxNQUFNLGNBQWMsQ0FBQztBQUNsSSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7QUFFbkYsV0FBVztBQUVYLE1BQU0sT0FBTyxXQUFXO0lBV2YsTUFBTSxDQUFDLGtCQUFrQixDQUFDLEdBQVE7UUFDdkMsSUFBSSxDQUFDLENBQUMsR0FBRyxZQUFZLFNBQVMsQ0FBQyxFQUFFO1lBQy9CLE9BQU8scUJBQXFCLENBQUMsSUFBSSxTQUFTLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUNwRDtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVNLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBdUI7UUFDL0MsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDekIsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FB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Q0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFO3dCQUNuRCxLQUFLLFVBQVUsQ0FBQyxDQUFDOzRCQUNmLElBQUksQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7NEJBQ2pELE1BQU07eUJBQ1A7d0JBQ0QsS0FBSyxNQUFNLENBQUMsQ0FBQzs0QkFDWCxJQUFJLENBQUMsS0FBSyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDOzRCQUM3QyxNQUFNO3lCQUNQO3dCQUNELEtBQUssU0FBUyxDQUFDLENBQUM7NEJBQ2QsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDLGNBQWMsRUFBRTtnQ0FDekQsS0FBSyxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBWSxFQUFFLEVBQUU7b0NBQzdFLElBQUksQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7d0NBQ2hGLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO3FDQUNqRDtnQ0FDSCxDQUFDLENBQUMsQ0FBQzs2QkFDSjs0QkFDRCxNQUFNO3lCQUNQO3FCQUNGO2dCQUNILENBQUMsQ0FBQyxDQUFDO2FBQ0o7WUFDRCxNQUFNO1NBQ1A7S0FDRjtBQUNILENBQUMsQ0FBQztzRUFuT1MsV0FBVzttREFBWCxXQUFXLFdBQVgsV0FBVzt1RkFBWCxXQUFXO2NBRHZCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdXJyZW5jeVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBwbGFpblRvQ2xhc3NGcm9tRXhpc3QgfSBmcm9tICdjbGFzcy10cmFuc2Zvcm1lcic7XG5pbXBvcnQgeyBXaXphcmRQYWdlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jYXNlLWVkaXRvci9kb21haW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RGb3JtRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3BhbGV0dGUvYmFzZS1maWVsZC9hYnN0cmFjdC1mb3JtLWZpZWxkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGbGFnRGV0YWlsLCBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9wYWxldHRlL2Nhc2UtZmxhZy9kb21haW4vY2FzZS1mbGFnLm1vZGVsJztcbmltcG9ydCB7IENhc2VGbGFnU3RhdHVzIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9wYWxldHRlL2Nhc2UtZmxhZy9lbnVtcy9jYXNlLWZsYWctc3RhdHVzLmVudW0nO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3BhbGV0dGUvdXRpbHMnO1xuaW1wb3J0IHsgQ2FzZUV2ZW50VHJpZ2dlciwgQ2FzZUZpZWxkLCBDYXNlVGFiLCBDYXNlVmlldywgRmllbGRUeXBlLCBGaWVsZFR5cGVFbnVtLCBGaXhlZExpc3RJdGVtLCBQcmVkaWNhdGUgfSBmcm9tICcuLi8uLi9kb21haW4nO1xuaW1wb3J0IHsgRm9ybWF0VHJhbnNsYXRvclNlcnZpY2UgfSBmcm9tICcuLi9jYXNlLWZpZWxkcy9mb3JtYXQtdHJhbnNsYXRvci5zZXJ2aWNlJztcblxuLy8gQGR5bmFtaWNcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGaWVsZHNVdGlscyB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IGNhc2VMZXZlbENhc2VGbGFnc0ZpZWxkSWQgPSAnY2FzZUZsYWdzJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgY3VycmVuY3lQaXBlOiBDdXJyZW5jeVBpcGUgPSBuZXcgQ3VycmVuY3lQaXBlKCdlbi1HQicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBkYXRlUGlwZTogRGF0ZVBpcGUgPSBuZXcgRGF0ZVBpcGUobmV3IEZvcm1hdFRyYW5zbGF0b3JTZXJ2aWNlKCkpO1xuICAvLyBFVUktNDI0NC4gMyBkYXNoZXMgaW5zdGVhZCBvZiAxIHRvIG1ha2UgdGhpcyBsZXNzIGxpa2VseSB0byBjbGFzaCB3aXRoIGEgcmVhbCBmaWVsZC5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBMQUJFTF9TVUZGSVggPSAnLS0tTEFCRUwnO1xuICAvLyBIYW5kbGluZyBvZiBEeW5hbWljIExpc3RzIGluIENvbXBsZXggVHlwZXNcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTRVJWRVJfUkVTUE9OU0VfRklFTERfVFlQRV9DT0xMRUNUSU9OID0gJ0NvbGxlY3Rpb24nO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNFUlZFUl9SRVNQT05TRV9GSUVMRF9UWVBFX0NPTVBMRVggPSAnQ29tcGxleCc7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU0VSVkVSX1JFU1BPTlNFX0ZJRUxEX1RZUEVfRFlOQU1JQ19MSVNUX1RZUEU6IEZpZWxkVHlwZUVudW1bXSA9IFsnRHluYW1pY0xpc3QnLCAnRHluYW1pY1JhZGlvTGlzdCddO1xuXG4gIHB1YmxpYyBzdGF0aWMgY29udmVydFRvQ2FzZUZpZWxkKG9iajogYW55KTogQ2FzZUZpZWxkIHtcbiAgICBpZiAoIShvYmogaW5zdGFuY2VvZiBDYXNlRmllbGQpKSB7XG4gICAgICByZXR1cm4gcGxhaW5Ub0NsYXNzRnJvbUV4aXN0KG5ldyBDYXNlRmllbGQoKSwgb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgdG9WYWx1ZXNNYXAoY2FzZUZpZWxkczogQ2FzZUZpZWxkW10pOiBhbnkge1xuICAgIGNvbnN0IHZhbHVlTWFwID0ge307XG4gICAgY2FzZUZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgIHZhbHVlTWFwW2ZpZWxkLmlkXSA9IEZpZWxkc1V0aWxzLnByZXBhcmVWYWx1ZShmaWVsZCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHZhbHVlTWFwO1xuICB9XG5cbiAgLy8gcHVibGljIHN0YXRpYyBnZXRUeXBlKGVsZW06IGFueSk6IHN0cmluZyB7XG4gIC8vICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlbGVtKS5zbGljZSg4LCAtMSk7XG4gIC8vIH1cblxuICBwdWJsaWMgc3RhdGljIGlzT2JqZWN0KGVsZW06IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgZWxlbSA9PT0gJ29iamVjdCcgJiYgZWxlbSAhPT0gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgaXNOb25FbXB0eU9iamVjdChlbGVtOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc09iamVjdChlbGVtKSAmJiBPYmplY3Qua2V5cyhlbGVtKS5sZW5ndGggIT09IDA7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzQXJyYXkoZWxlbTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZWxlbSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGFyZUNvbGxlY3Rpb25WYWx1ZXNTaW1wbGVGaWVsZHMoZmllbGRWYWx1ZTogYW55W10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuaXNPYmplY3QoZmllbGRWYWx1ZVswXVsndmFsdWUnXSkgJiYgIUFycmF5LmlzQXJyYXkoZmllbGRWYWx1ZVswXVsndmFsdWUnXSkgJiYgZmllbGRWYWx1ZVswXVsndmFsdWUnXSAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBpc0NvbGxlY3Rpb25PZlNpbXBsZVR5cGVzKGZpZWxkVmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzQ29sbGVjdGlvbihmaWVsZFZhbHVlKSAmJiB0aGlzLmFyZUNvbGxlY3Rpb25WYWx1ZXNTaW1wbGVGaWVsZHMoZmllbGRWYWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzTXVsdGlTZWxlY3RWYWx1ZShmb3JtOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc05vbkVtcHR5QXJyYXkoZm9ybSkgJiYgIXRoaXMuaXNDb2xsZWN0aW9uV2l0aFZhbHVlKGZvcm0pO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBpc05vbkVtcHR5QXJyYXkocGFnZUZvcm1GaWVsZHM6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHBhZ2VGb3JtRmllbGRzKSAmJiBwYWdlRm9ybUZpZWxkc1swXSAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBpc0NvbGxlY3Rpb24ocGFnZUZvcm1GaWVsZHM6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzTm9uRW1wdHlBcnJheShwYWdlRm9ybUZpZWxkcykgJiYgdGhpcy5pc0NvbGxlY3Rpb25XaXRoVmFsdWUocGFnZUZvcm1GaWVsZHMpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBpc0NvbGxlY3Rpb25XaXRoVmFsdWUocGFnZUZvcm1GaWVsZHM6IGFueVtdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHBhZ2VGb3JtRmllbGRzWzBdWyd2YWx1ZSddICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNsb25lT2JqZWN0KG9iajogYW55KTogYW55IHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgb2JqKTtcbiAgfVxuXG4gIC8vIHRlbXBvcmFyeSBmdW5jdGlvbiB1bnRpbCB0aGlzIGNhbiBiZSBtb3ZlZCB0byBDYXNlVmlldyBjbGFzcyAoUkRNLTI2ODEpXG4gIHB1YmxpYyBzdGF0aWMgZ2V0Q2FzZUZpZWxkcyhjYXNlVmlldzogQ2FzZVZpZXcpOiBDYXNlRmllbGRbXSB7XG4gICAgY29uc3QgY2FzZURhdGFGaWVsZHM6IENhc2VGaWVsZFtdID0gY2FzZVZpZXcudGFicy5yZWR1Y2UoKGFjYzogQ2FzZUZpZWxkW10sIHRhYjogQ2FzZVRhYikgPT4ge1xuICAgICAgcmV0dXJuIGFjYy5jb25jYXQodGFiLmZpZWxkcyk7XG4gICAgfSwgW10pO1xuXG4gICAgY29uc3QgbWV0YWRhdGFGaWVsZHM6IENhc2VGaWVsZFtdID0gY2FzZVZpZXcubWV0YWRhdGFGaWVsZHM7XG4gICAgcmV0dXJuIG1ldGFkYXRhRmllbGRzLmNvbmNhdChjYXNlRGF0YUZpZWxkcy5maWx0ZXIoKGNhc2VGaWVsZDogQ2FzZUZpZWxkKSA9PiB7XG4gICAgICByZXR1cm4gbWV0YWRhdGFGaWVsZHMuZmluZEluZGV4KG1ldGFkYXRhRmllbGQgPT4gbWV0YWRhdGFGaWVsZC5pZCA9PT0gY2FzZUZpZWxkLmlkKSA8IDA7XG4gICAgfSkpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBhZGRDYXNlRmllbGRBbmRDb21wb25lbnRSZWZlcmVuY2VzIChjOiBBYnN0cmFjdENvbnRyb2wsIGNmOiBDYXNlRmllbGQsIGNvbXA6IEFic3RyYWN0Rm9ybUZpZWxkQ29tcG9uZW50KTogdm9pZCB7XG4gICAgY1snY2FzZUZpZWxkJ10gPSBjZjtcbiAgICBjWydjb21wb25lbnQnXSA9IGNvbXA7XG4gIH1cblxuICAvKipcbiAgICogUmVjdXJzaXZlIGNoZWNrIG9mIGFuIGFycmF5IG9yIG9iamVjdCBhbmQgaXRzIGRlc2NlbmRhbnRzIGZvciB0aGUgcHJlc2VuY2Ugb2YgYW55IG5vbi1lbXB0eSB2YWx1ZXMuXG4gICAqXG4gICAqIEBwYXJhbSBvYmplY3QgVGhlIGFycmF5IG9yIG9iamVjdCB0byBjaGVja1xuICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFycmF5IG9yIG9iamVjdCAob3IgYSBkZXNjZW5kYW50KSBjb250YWlucyBhdCBsZWFzdCBvbmUgbm9uLWVtcHR5IHZhbHVlOyBgZmFsc2VgIG90aGVyd2lzZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb250YWluc05vbkVtcHR5VmFsdWVzKG9iamVjdDogb2JqZWN0KTogYm9vbGVhbiB7XG4gICAgaWYgKCFvYmplY3QpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgdmFsdWVzID0gT2JqZWN0LmtleXMob2JqZWN0KS5tYXAoa2V5ID0+IG9iamVjdFtrZXldKTtcbiAgICBjb25zdCBvYmplY3RSZWZzID0gW107XG4gICAgLy8gQWxzbyB0ZXN0IGZvciBudW1lcmljIHZhbHVlcywgYW5kIGxlbmd0aCA+IDAgZm9yIG5vbi1udW1lcmljIHZhbHVlcyBiZWNhdXNlIHRoaXMgY292ZXJzIGJvdGggc3RyaW5ncyBhbmQgYXJyYXlzLlxuICAgIC8vIE5vdGU6IERlbGliZXJhdGUgdXNlIG9mIG5vbi1lcXVhbGl0eSAoIT0pIG9wZXJhdG9yIGZvciBudWxsIGNoZWNrLCB0byBoYW5kbGUgYm90aCBudWxsIGFuZCB1bmRlZmluZWQgdmFsdWVzLlxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogdHJpcGxlLWVxdWFsc1xuICAgIGNvbnN0IGhhc05vbk51bGxQcmltaXRpdmUgPSB2YWx1ZXMuc29tZSh4ID0+ICh4ICE9IG51bGwgJiZcbiAgICAgICgodHlwZW9mIHggPT09ICdvYmplY3QnICYmIHguY29uc3RydWN0b3IgPT09IE9iamVjdCkgfHwgQXJyYXkuaXNBcnJheSh4KVxuICAgICAgICA/ICFvYmplY3RSZWZzLnB1c2goeClcbiAgICAgICAgOiB0eXBlb2YgeCA9PT0gJ251bWJlcicgfHwgeC5sZW5ndGggPiAwKVxuICAgICkpO1xuICAgIHJldHVybiAhaGFzTm9uTnVsbFByaW1pdGl2ZSA/IG9iamVjdFJlZnMuc29tZSh5ID0+IHRoaXMuY29udGFpbnNOb25FbXB0eVZhbHVlcyh5KSkgOiBoYXNOb25OdWxsUHJpbWl0aXZlO1xuICB9XG5cbiAgLyoqXG4gICAqIGhhbmRsZU5lc3RlZER5bmFtaWNMaXN0cygpXG4gICAqIFJlYXNzaWducyBsaXN0X2l0ZW0gYW5kIHZhbHVlIGRhdGEgdG8gRHluYW1pY0xpc3QgY2hpbGRyZW5cbiAgICogZG93biB0aGUgdHJlZS4gU2VydmVyIHJlc3BvbnNlIHJldHVybnMgZGF0YSBvbmx5IGluXG4gICAqIHRoZSBgdmFsdWVgIG9iamVjdCBvZiBwYXJlbnQgY29tcGxleCB0eXBlXG4gICAqXG4gICAqIEVVSS0yNTMwIER5bmFtaWMgTGlzdHMgZm9yIEVsZW1lbnRzIGluIGEgQ29tcGxleCBUeXBlXG4gICAqXG4gICAqIEBwYXJhbSBqc29uQm9keSAtIHsgY2FzZV9maWVsZHM6IFsgQ2FzZUZpZWxkLCBDYXNlRmllbGQgXSB9XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGhhbmRsZU5lc3RlZER5bmFtaWNMaXN0cyhqc29uQm9keTogeyBjYXNlX2ZpZWxkczogQ2FzZUZpZWxkW10gfSk6IGFueSB7XG4gICAgaWYgKGpzb25Cb2R5LmNhc2VfZmllbGRzKSB7XG4gICAgICBqc29uQm9keS5jYXNlX2ZpZWxkcy5mb3JFYWNoKGNhc2VGaWVsZCA9PiB7XG4gICAgICAgIGlmIChjYXNlRmllbGQuZmllbGRfdHlwZSkge1xuICAgICAgICAgIHRoaXMuc2V0RHluYW1pY0xpc3REZWZpbml0aW9uKGNhc2VGaWVsZCwgY2FzZUZpZWxkLmZpZWxkX3R5cGUsIGNhc2VGaWVsZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBqc29uQm9keTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHByZXBhcmVWYWx1ZShmaWVsZDogQ2FzZUZpZWxkKTogYW55IHtcbiAgICBpZiAoZmllbGQudmFsdWUpIHtcbiAgICAgIHJldHVybiBmaWVsZC52YWx1ZTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkLmlzQ29tcGxleCgpKSB7XG4gICAgICBjb25zdCB2YWx1ZU1hcCA9IHt9O1xuICAgICAgZmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcy5mb3JFYWNoKGNvbXBsZXhGaWVsZCA9PiB7XG4gICAgICAgIHZhbHVlTWFwW2NvbXBsZXhGaWVsZC5pZF0gPSBGaWVsZHNVdGlscy5wcmVwYXJlVmFsdWUoY29tcGxleEZpZWxkKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHZhbHVlTWFwO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfTUVSR0VfRlVOQ1RJT04gPSBmdW5jdGlvbiBtZXJnZUZ1bmN0aW9uKGZpZWxkOiBDYXNlRmllbGQsIHJlc3VsdDogb2JqZWN0KTogdm9pZCB7XG4gICAgaWYgKCFyZXN1bHQuaGFzT3duUHJvcGVydHkoZmllbGQuaWQpKSB7XG4gICAgICByZXN1bHRbZmllbGQuaWRdID0gZmllbGQudmFsdWU7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IExBQkVMX01FUkdFX0ZVTkNUSU9OID0gZnVuY3Rpb24gbWVyZ2VGdW5jdGlvbihmaWVsZDogQ2FzZUZpZWxkLCByZXN1bHQ6IG9iamVjdCk6IHZvaWQge1xuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICByZXN1bHQgPSB7fTtcbiAgICB9XG4gICAgaWYgKCFyZXN1bHQuaGFzT3duUHJvcGVydHkoZmllbGQuaWQpKSB7XG4gICAgICByZXN1bHRbZmllbGQuaWRdID0gZmllbGQudmFsdWU7XG4gICAgfVxuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBzd2l0Y2gtZGVmYXVsdFxuICAgIHN3aXRjaCAoZmllbGQuZmllbGRfdHlwZS50eXBlKSB7XG4gICAgICBjYXNlICdGaXhlZExpc3QnOlxuICAgICAgY2FzZSAnRml4ZWRSYWRpb0xpc3QnOiB7XG4gICAgICAgIHJlc3VsdFtmaWVsZC5pZF0gPSBGaWVsZHNVdGlscy5nZXRGaXhlZExpc3RMYWJlbEJ5Q29kZU9yRW1wdHkoZmllbGQsIHJlc3VsdFtmaWVsZC5pZF0gfHwgZmllbGQudmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ011bHRpU2VsZWN0TGlzdCc6IHtcbiAgICAgICAgY29uc3QgZmllbGRWYWx1ZSA9IHJlc3VsdFtmaWVsZC5pZF0gfHwgW107XG4gICAgICAgIHJlc3VsdFtmaWVsZC5pZCArIEZpZWxkc1V0aWxzLkxBQkVMX1NVRkZJWF0gPSBbXTtcbiAgICAgICAgZmllbGRWYWx1ZS5mb3JFYWNoKChjb2RlOiBhbnksIGlkeDogYW55KSA9PiB7XG4gICAgICAgICAgcmVzdWx0W2ZpZWxkLmlkICsgRmllbGRzVXRpbHMuTEFCRUxfU1VGRklYXVtpZHhdID0gRmllbGRzVXRpbHMuZ2V0Rml4ZWRMaXN0TGFiZWxCeUNvZGVPckVtcHR5KGZpZWxkLCBjb2RlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnTGFiZWwnOiB7XG4gICAgICAgIHJlc3VsdFtmaWVsZC5pZF0gPSBGaWVsZHNVdGlscy5nZXRMYWJlbChmaWVsZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnTW9uZXlHQlAnOiB7XG4gICAgICAgIGNvbnN0IGZpZWxkVmFsdWUgPSAocmVzdWx0W2ZpZWxkLmlkXSB8fCBmaWVsZC52YWx1ZSk7XG4gICAgICAgIHJlc3VsdFtmaWVsZC5pZF0gPSBGaWVsZHNVdGlscy5nZXRNb25leUdCUChmaWVsZFZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdEYXRlJzoge1xuICAgICAgICBjb25zdCBmaWVsZFZhbHVlID0gKHJlc3VsdFtmaWVsZC5pZF0gfHwgZmllbGQudmFsdWUpO1xuICAgICAgICByZXN1bHRbZmllbGQuaWRdID0gRmllbGRzVXRpbHMuZ2V0RGF0ZShmaWVsZFZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdDb21wbGV4Jzoge1xuICAgICAgICBpZiAocmVzdWx0W2ZpZWxkLmlkXSAmJiBmaWVsZC5maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzKSB7XG4gICAgICAgICAgZmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcy5mb3JFYWNoKChmOiBDYXNlRmllbGQpID0+IHtcbiAgICAgICAgICAgIGlmIChbJ0NvbGxlY3Rpb24nLCAnQ29tcGxleCcsICdNdWx0aVNlbGVjdExpc3QnXS5pbmRleE9mKGYuZmllbGRfdHlwZS50eXBlKSA+IC0xKSB7XG4gICAgICAgICAgICAgIEZpZWxkc1V0aWxzLkxBQkVMX01FUkdFX0ZVTkNUSU9OKGYsIHJlc3VsdFtmaWVsZC5pZF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnQ29sbGVjdGlvbic6IHtcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSAocmVzdWx0W2ZpZWxkLmlkXSB8fCBmaWVsZC52YWx1ZSk7XG4gICAgICAgIGlmIChlbGVtZW50cykge1xuICAgICAgICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnN3aXRjaC1kZWZhdWx0XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkLmZpZWxkX3R5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLnR5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSAnTW9uZXlHQlAnOiB7XG4gICAgICAgICAgICAgICAgZWxlbS52YWx1ZSA9IEZpZWxkc1V0aWxzLmdldE1vbmV5R0JQKGVsZW0udmFsdWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgJ0RhdGUnOiB7XG4gICAgICAgICAgICAgICAgZWxlbS52YWx1ZSA9IEZpZWxkc1V0aWxzLmdldERhdGUoZWxlbS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSAnQ29tcGxleCc6IHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgIGZpZWxkLmZpZWxkX3R5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzLmZvckVhY2goKGY6IENhc2VGaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoWydDb2xsZWN0aW9uJywgJ0NvbXBsZXgnLCAnTXVsdGlTZWxlY3RMaXN0J10uaW5kZXhPZihmLmZpZWxkX3R5cGUudHlwZSkgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgIEZpZWxkc1V0aWxzLkxBQkVMX01FUkdFX0ZVTkNUSU9OKGYsIGVsZW0udmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEZvcm1hdHMgYSBgTW9uZXlHQlBgIHZhbHVlIHRvIGluY2x1ZGUgY3VycmVuY3kgdW5pdHMuXG4gICAqIEBwYXJhbSBmaWVsZFZhbHVlIFRoZSBDdXJyZW5jeVBpcGUgZXhwZWN0cyBhbiBgYW55YCBwYXJhbWV0ZXIgc28gdGhpcyBtdXN0IGFsc28gYmUgYGFueWAsXG4gICAqIGJ1dCBpdCBzaG91bGQgYmUgXCJudW1iZXItbGlrZVwiIChlLmcuLCAnMTIzNCcpXG4gICAqIEByZXR1cm5zIEEgZm9ybWF0dGVkIHN0cmluZyAoZS5nLiwgwqMxMi4zNClcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGdldE1vbmV5R0JQKGZpZWxkVmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGZpZWxkVmFsdWUgPyBGaWVsZHNVdGlscy5jdXJyZW5jeVBpcGUudHJhbnNmb3JtKGZpZWxkVmFsdWUgLyAxMDAsICdHQlAnLCAnc3ltYm9sJykgOiBmaWVsZFZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0TGFiZWwoZmllbGRWYWx1ZTogQ2FzZUZpZWxkKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZmllbGRWYWx1ZSA/IGZpZWxkVmFsdWUubGFiZWwgOiAnJztcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldERhdGUoZmllbGRWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgLy8gRm9ybWF0IHNwZWNpZmllZCBoZXJlIHdhc24ndCBwcmV2aW91c2x5IHdvcmtpbmcgYW5kIGxvdHMgb2YgdGVzdHMgZGVwZW5kIG9uIGl0IG5vdCB3b3JraW5nXG4gICAgICAvLyBOb3cgdGhhdCBmb3JtYXRzIHdvcmsgY29ycmVjdGx5IG1hbnkgdGVzdCB3b3VsZCBicmVhayAtIGFuZCB0aGlzIGNvdWxkIGFmZmVjdCBzZXJ2aWNlcyB3aGljaCBtYXkgZGVwZW5kIG9uXG4gICAgICAvLyB0aGUgb3JnaW5hbCBiZWhhdmlvdXIgb2YgcmV0dXJuaW5nIGRhdGVzIGluIFwiZCBNTU0geXl5eVwiXG4gICAgICAvLyBOb3RlIC0gcmVwbGFjZWQgJ2QnIHdpdGggJ0QnIGFzIGRhdGVwaXBlIHVzaW5nIG1vbWVudCB0byBhdm9pZCB0aW1lem9uZSBkaXNjcmVwYW5jaWVzXG4gICAgICByZXR1cm4gRmllbGRzVXRpbHMuZGF0ZVBpcGUudHJhbnNmb3JtKGZpZWxkVmFsdWUsIG51bGwsICdEIE1NTSB5eXl5Jyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dEZvckludmFsaWRGaWVsZCgnRGF0ZScsIGZpZWxkVmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldEZpeGVkTGlzdExhYmVsQnlDb2RlT3JFbXB0eShmaWVsZDogQ2FzZUZpZWxkLCBjb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJlbGV2YW50SXRlbTogRml4ZWRMaXN0SXRlbSA9IGNvZGUgPyBmaWVsZC5maWVsZF90eXBlLmZpeGVkX2xpc3RfaXRlbXMuZmluZChpdGVtID0+IGl0ZW0uY29kZSA9PT0gY29kZSkgOiBudWxsO1xuICAgIHJldHVybiByZWxldmFudEl0ZW0gPyByZWxldmFudEl0ZW0ubGFiZWwgOiAnJztcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHRleHRGb3JJbnZhbGlkRmllbGQodHlwZTogc3RyaW5nLCBpbnZhbGlkVmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGB7IEludmFsaWQgJHt0eXBlfTogJHtpbnZhbGlkVmFsdWV9IH1gO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgc2V0RHluYW1pY0xpc3REZWZpbml0aW9uKGNhc2VGaWVsZDogQ2FzZUZpZWxkLCBjYXNlRmllbGRUeXBlOiBGaWVsZFR5cGUsIHJvb3RDYXNlRmllbGQ6IENhc2VGaWVsZCkge1xuICAgIGlmIChjYXNlRmllbGRUeXBlLnR5cGUgPT09IEZpZWxkc1V0aWxzLlNFUlZFUl9SRVNQT05TRV9GSUVMRF9UWVBFX0NPTVBMRVgpIHtcblxuICAgICAgY2FzZUZpZWxkVHlwZS5jb21wbGV4X2ZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBpc0R5bmFtaWNGaWVsZCA9IEZpZWxkc1V0aWxzLlNFUlZFUl9SRVNQT05TRV9GSUVMRF9UWVBFX0RZTkFNSUNfTElTVF9UWVBFLmluZGV4T2YoZmllbGQuZmllbGRfdHlwZS50eXBlKSAhPT0gLTE7XG5cbiAgICAgICAgICBpZiAoaXNEeW5hbWljRmllbGQpIHtcbiAgICAgICAgICAgIGNvbnN0IGR5bmFtaWNMaXN0VmFsdWUgPSB0aGlzLmdldER5bmFtaWNMaXN0VmFsdWUocm9vdENhc2VGaWVsZC52YWx1ZSwgZmllbGQuaWQpO1xuICAgICAgICAgICAgaWYgKGR5bmFtaWNMaXN0VmFsdWUpIHtcbiAgICAgICAgICAgICAgY29uc3QgbGlzdF9pdGVtcyA9IGR5bmFtaWNMaXN0VmFsdWVbMF0ubGlzdF9pdGVtcztcbiAgICAgICAgICAgICAgY29uc3QgY29tcGxleFZhbHVlID0gZHluYW1pY0xpc3RWYWx1ZS5tYXAoZGF0YSA9PiBkYXRhLnZhbHVlKTtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB7XG4gICAgICAgICAgICAgICAgbGlzdF9pdGVtcyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogY29tcGxleFZhbHVlLmxlbmd0aCA+IDAgPyBjb21wbGV4VmFsdWUgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSB7XG4gICAgICAgICAgICAgICAgLi4udmFsdWVcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgZmllbGQuZm9ybWF0dGVkX3ZhbHVlID0ge1xuICAgICAgICAgICAgICAgIC4uLmZpZWxkLmZvcm1hdHRlZF92YWx1ZSxcbiAgICAgICAgICAgICAgICAuLi52YWx1ZVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldER5bmFtaWNMaXN0RGVmaW5pdGlvbihmaWVsZCwgZmllbGQuZmllbGRfdHlwZSwgcm9vdENhc2VGaWVsZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChjYXNlRmllbGRUeXBlLnR5cGUgPT09IEZpZWxkc1V0aWxzLlNFUlZFUl9SRVNQT05TRV9GSUVMRF9UWVBFX0NPTExFQ1RJT04pIHtcbiAgICAgIGlmIChjYXNlRmllbGRUeXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZSkge1xuICAgICAgICB0aGlzLnNldER5bmFtaWNMaXN0RGVmaW5pdGlvbihjYXNlRmllbGQsIGNhc2VGaWVsZFR5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLCByb290Q2FzZUZpZWxkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXREeW5hbWljTGlzdFZhbHVlKGpzb25CbG9jazogYW55LCBrZXk6IHN0cmluZykge1xuICAgIGNvbnN0IGRhdGEgPSBqc29uQmxvY2sgPyB0aGlzLmdldE5lc3RlZEZpZWxkVmFsdWVzKGpzb25CbG9jaywga2V5LCBbXSkgOiBbXTtcblxuICAgIHJldHVybiBkYXRhLmxlbmd0aCA+IDAgPyBkYXRhIDogbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldE5lc3RlZEZpZWxkVmFsdWVzKGpzb25EYXRhOiBhbnksIGtleTogc3RyaW5nLCBvdXRwdXQ6IGFueVtdID0gW10pIHtcbiAgICBpZiAoanNvbkRhdGEgJiYganNvbkRhdGFba2V5XSkge1xuICAgICAgb3V0cHV0LnB1c2goanNvbkRhdGFba2V5XSk7XG4gICAgfSBlbHNlICB7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnRLZXkgaW4ganNvbkRhdGEpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBqc29uRGF0YSA9PT0gJ29iamVjdCcgJiYganNvbkRhdGEuaGFzT3duUHJvcGVydHkoZWxlbWVudEtleSkpIHtcbiAgICAgICAgICB0aGlzLmdldE5lc3RlZEZpZWxkVmFsdWVzKGpzb25EYXRhW2VsZW1lbnRLZXldLCBrZXksIG91dHB1dCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgaXNGbGFnc0Nhc2VGaWVsZChjYXNlRmllbGQ6IENhc2VGaWVsZCk6IGJvb2xlYW4ge1xuICAgIGlmICghY2FzZUZpZWxkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaXNGbGFnc0ZpZWxkVHlwZShjYXNlRmllbGQuZmllbGRfdHlwZSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBpc0Nhc2VGaWVsZE9mVHlwZX0gaW5zdGVhZCwgcGFzc2luZyAnRmxhZ0xhdW5jaGVyJyBhcyB0aGUgc2luZ2xlIHR5cGUgaW4gdGhlIGB0eXBlc2AgYXJyYXlcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaXNGbGFnTGF1bmNoZXJDYXNlRmllbGQoY2FzZUZpZWxkOiBDYXNlRmllbGQpOiBib29sZWFuIHtcbiAgICBpZiAoIWNhc2VGaWVsZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBjYXNlRmllbGQuZmllbGRfdHlwZS50eXBlID09PSAnRmxhZ0xhdW5jaGVyJztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rIGlzQ2FzZUZpZWxkT2ZUeXBlfSBpbnN0ZWFkLCBwYXNzaW5nICdDb21wb25lbnRMYXVuY2hlcicgYXMgdGhlIHNpbmdsZSB0eXBlIGluIHRoZSBgdHlwZXNgXG4gICAqIGFycmF5XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlzQ29tcG9uZW50TGF1bmNoZXJDYXNlRmllbGQoY2FzZUZpZWxkOiBDYXNlRmllbGQpOiBib29sZWFuIHtcbiAgICBpZiAoIWNhc2VGaWVsZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBjYXNlRmllbGQuZmllbGRfdHlwZS50eXBlID09PSAnQ29tcG9uZW50TGF1bmNoZXInO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIHtAbGluayBDYXNlRmllbGR9IGlzIG9mIG9uZSBvZiB0aGUgZ2l2ZW4gZmllbGQgdHlwZXMuXG4gICAqXG4gICAqIEBwYXJhbSBjYXNlRmllbGQgVGhlIGBDYXNlRmllbGRgIHRvIGNoZWNrXG4gICAqIEBwYXJhbSB0eXBlcyBBbiBhcnJheSBvZiBvbmUgb3IgbW9yZSBmaWVsZCB0eXBlc1xuICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGBDYXNlRmllbGRgIHR5cGUgaXMgb25lIG9mIHRob3NlIGluIHRoZSBhcnJheSBvZiB0eXBlcyB0byBjaGVjayBhZ2FpbnN0OyBgZmFsc2VgXG4gICAqIG90aGVyd2lzZSBvciBpZiBgY2FzZUZpZWxkYCBvciBgdHlwZXNgIGFyZSBmYWxzeVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpc0Nhc2VGaWVsZE9mVHlwZShjYXNlRmllbGQ6IENhc2VGaWVsZCwgdHlwZXM6IEZpZWxkVHlwZUVudW1bXSk6IGJvb2xlYW4ge1xuICAgIGlmICghY2FzZUZpZWxkIHx8ICF0eXBlcykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlcy5zb21lKHR5cGUgPT4gdHlwZSA9PT0gY2FzZUZpZWxkLmZpZWxkX3R5cGUudHlwZSB8fCB0eXBlID09PSBjYXNlRmllbGQuZmllbGRfdHlwZS5pZCk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzTGlua2VkQ2FzZXNDYXNlRmllbGQoY2FzZUZpZWxkOiBDYXNlRmllbGQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gRmllbGRzVXRpbHMuaXNDb21wb25lbnRMYXVuY2hlckNhc2VGaWVsZChjYXNlRmllbGQpICYmXG4gICAgICBjYXNlRmllbGQuaWQgPT09ICdMaW5rZWRDYXNlc0NvbXBvbmVudExhdW5jaGVyJztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY29udGFpbnNMaW5rZWRDYXNlc0Nhc2VGaWVsZChjYXNlRmllbGRzOiBDYXNlRmllbGRbXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjYXNlRmllbGRzPy5zb21lKGNhc2VGaWVsZCA9PiBGaWVsZHNVdGlscy5pc0xpbmtlZENhc2VzQ2FzZUZpZWxkKGNhc2VGaWVsZCkpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBpc0ZsYWdzRmllbGRUeXBlKGZpZWxkVHlwZTogRmllbGRUeXBlKTogYm9vbGVhbiB7XG4gICAgaWYgKCFmaWVsZFR5cGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBOb3RlOiBUaGlzIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIHRoZSBkdW1teSBmaWVsZCB0eXBlIElEIG9mIFwiQ2FzZUZsYWdcIiBmb3IgdGVzdGluZyBhbmQgdGhlIHJlYWwgZmllbGQgdHlwZVxuICAgIC8vIElEIG9mIFwiRmxhZ3NcIlxuICAgIHJldHVybiAoZmllbGRUeXBlLnR5cGUgPT09ICdDb21wbGV4JyAmJiAoZmllbGRUeXBlLmlkID09PSAnQ2FzZUZsYWcnIHx8IGZpZWxkVHlwZS5pZCA9PT0gJ0ZsYWdzJykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3QgZmxhZ3MgZGF0YSBmcm9tIGEgYENhc2VGaWVsZGAgaW5zdGFuY2UsIHJlY3Vyc2luZyBhbmQgaXRlcmF0aW5nIHRocm91Z2ggc3ViLWZpZWxkcyBvZiBhIENvbXBsZXggZmllbGQgb3JcbiAgICogZWFjaCBmaWVsZCBpbiBhIENvbGxlY3Rpb24gZmllbGQuXG4gICAqXG4gICAqIEBwYXJhbSBmbGFncyBBbiBhcnJheSBmb3IgYWNjdW11bGF0aW5nIGV4dHJhY3RlZCBmbGFncyBkYXRhIGFuZCBkZXJpdmVkIGBGb3JtR3JvdXBgIHBhdGhzXG4gICAqIEBwYXJhbSBjYXNlRmllbGQgQSBgQ2FzZUZpZWxkYCBpbnN0YW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIGZsYWdzIGRhdGFcbiAgICogQHBhcmFtIHBhdGhUb0ZsYWdzRm9ybUdyb3VwIEEgKGRvdC1kZWxpbWl0ZWQpIHN0cmluZyBmb3IgY29uY2F0ZW5hdGluZyB0aGUgbmFtZSBvZiBlYWNoIGNvbnRyb2wgdGhhdCBmb3JtcyB0aGUgcGF0aFxuICAgKiB0byB0aGUgYEZvcm1Hcm91cGAgZm9yIHRoZSBgRmxhZ3NgIGluc3RhbmNlXG4gICAqIEBwYXJhbSB0b3BMZXZlbENhc2VGaWVsZCBUaGUgdG9wLWxldmVsIGBDYXNlRmllbGRgIHRoYXQgY29udGFpbnMgdGhlIHZhbHVlIHByb3BlcnR5LiBUaGlzIGlzIHJlcXVpcmVkIGJlY2F1c2UgX29ubHlcbiAgICogdG9wLWxldmVsXyBgQ2FzZUZpZWxkYHMgY29udGFpbiBhY3R1YWwgdmFsdWVzIGFuZCBhIHJlZmVyZW5jZSBuZWVkcyB0byBiZSBtYWludGFpbmVkIHRvIHN1Y2ggYSBmaWVsZFxuICAgKiBAcGFyYW0gY3VycmVudFZhbHVlIFRoZSBjdXJyZW50IHZhbHVlIG9iamVjdCBvZiBhIGBDYXNlRmllbGRgIHRoYXQgaXMgYSBzdWItZmllbGQgb2YgYSBub24gcm9vdC1sZXZlbCBDb21wbGV4IGZpZWxkLlxuICAgKiBSZXF1aXJlZCBmb3IgbWFwcGluZyB0aGUgYENhc2VGaWVsZGAgdmFsdWUgdG8gYSBgRmxhZ3NgIG9iamVjdCBpZiBpdCBpcyBhIFwiRmxhZ3NcIiBgQ2FzZUZpZWxkYC4gKEZvciBDb21wbGV4IHR5cGVzLFxuICAgKiBvbmx5IHRoZSBfcm9vdC1sZXZlbF8gYENhc2VGaWVsZGAgY29udGFpbnMgYSB2YWx1ZSBwcm9wZXJ0eSAtIGFsbCBzdWItZmllbGRzLCBpbmNsdWRpbmcgYW55IG5lc3RlZCBDb21wbGV4IGZpZWxkcyxcbiAgICogZG8gKm5vdCogY29udGFpbiBhbnkgdmFsdWVzIHRoZW1zZWx2ZXMuKVxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBgRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aGAsIGVhY2ggaW5zdGFuY2UgY29tcHJpc2luZyBhIGBGbGFnc2Agb2JqZWN0IGRlcml2ZWQgZnJvbSBhIGBDYXNlRmllbGRgXG4gICAqIG9mIHR5cGUgXCJGbGFnc1wiLCBhbmQgdGhlIGRvdC1kZWxpbWl0ZWQgcGF0aCBzdHJpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgYEZvcm1Hcm91cGBcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZXh0cmFjdEZsYWdzRGF0YUZyb21DYXNlRmllbGQoZmxhZ3M6IEZsYWdzV2l0aEZvcm1Hcm91cFBhdGhbXSwgY2FzZUZpZWxkOiBDYXNlRmllbGQsXG4gICAgcGF0aFRvRmxhZ3NGb3JtR3JvdXA6IHN0cmluZywgdG9wTGV2ZWxDYXNlRmllbGQ6IENhc2VGaWVsZCwgY3VycmVudFZhbHVlPzogb2JqZWN0KTogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aFtdIHtcbiAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IGNhc2VGaWVsZC5maWVsZF90eXBlO1xuICAgICAgc3dpdGNoIChmaWVsZFR5cGUudHlwZSkge1xuICAgICAgICBjYXNlICdDb21wbGV4JzpcbiAgICAgICAgICAvLyBJZiB0aGUgZmllbGQgaXMgYSBGbGFncyBDYXNlRmllbGQgKHRoZXNlIGFyZSBpbXBsZW1lbnRlZCBhcyBDb21wbGV4IHR5cGVzKSwgaXQgY2FuIGJlIG1hcHBlZCB0byBhIEZsYWdzXG4gICAgICAgICAgLy8gb2JqZWN0IGltbWVkaWF0ZWx5XG4gICAgICAgICAgaWYgKEZpZWxkc1V0aWxzLmlzRmxhZ3NDYXNlRmllbGQoY2FzZUZpZWxkKSkge1xuICAgICAgICAgICAgLy8gSWYgdGhlIEZsYWdzIENhc2VGaWVsZCBoYXMgYSB2YWx1ZSwgaXQgaXMgYSByb290LWxldmVsIENvbXBsZXggZmllbGQ7IGlmIGl0IGRvZXMgbm90LCBpdCBpcyBhIEZsYWdzXG4gICAgICAgICAgICAvLyBDYXNlRmllbGQgdGhhdCBpcyBhIHN1Yi1maWVsZCB3aXRoaW4gYW5vdGhlciBDb21wbGV4IGZpZWxkLCBzbyB1c2UgdGhlIGN1cnJlbnRWYWx1ZSB2YWx1ZSAoaWYgYW55KVxuICAgICAgICAgICAgLy8gaW5zdGVhZC4gVGhlIGV4Y2VwdGlvbiB0byB0aGlzIGlzIHRoZSBcImNhc2VGbGFnc1wiIEZsYWdzIENhc2VGaWVsZCwgd2hpY2ggd2lsbCBoYXZlIGFuIGVtcHR5IG9iamVjdCB2YWx1ZVxuICAgICAgICAgICAgLy8gaW5pdGlhbGx5LCBiZWNhdXNlIG5vIHBhcnR5IG5hbWUgaXMgcmVxdWlyZWRcbiAgICAgICAgICAgIGlmIChjYXNlRmllbGQudmFsdWUgJiYgRmllbGRzVXRpbHMuaXNOb25FbXB0eU9iamVjdChjYXNlRmllbGQudmFsdWUpIHx8XG4gICAgICAgICAgICAgIGNhc2VGaWVsZC5pZCA9PT0gdGhpcy5jYXNlTGV2ZWxDYXNlRmxhZ3NGaWVsZElkKSB7XG4gICAgICAgICAgICAgIGZsYWdzLnB1c2godGhpcy5tYXBDYXNlRmllbGRUb0ZsYWdzV2l0aEZvcm1Hcm91cFBhdGhPYmplY3QoY2FzZUZpZWxkLCBwYXRoVG9GbGFnc0Zvcm1Hcm91cCkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50VmFsdWUgJiYgRmllbGRzVXRpbHMuaXNOb25FbXB0eU9iamVjdChjdXJyZW50VmFsdWUpKSB7XG4gICAgICAgICAgICAgIHBhdGhUb0ZsYWdzRm9ybUdyb3VwICs9IGAuJHtjYXNlRmllbGQuaWR9YDtcbiAgICAgICAgICAgICAgZmxhZ3MucHVzaCh0aGlzLm1hcFZhbHVlVG9GbGFnc1dpdGhGb3JtR3JvdXBQYXRoT2JqZWN0KFxuICAgICAgICAgICAgICAgIGNhc2VGaWVsZC5pZCwgY3VycmVudFZhbHVlLCBwYXRoVG9GbGFnc0Zvcm1Hcm91cCwgdG9wTGV2ZWxDYXNlRmllbGQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkVHlwZS5jb21wbGV4X2ZpZWxkcykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjYXNlRmllbGQudmFsdWUgPyBjYXNlRmllbGQudmFsdWUgOiBjdXJyZW50VmFsdWU7XG4gICAgICAgICAgICBpZiAodmFsdWUgJiYgRmllbGRzVXRpbHMuaXNOb25FbXB0eU9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgZmxhZ3MgPSBmaWVsZFR5cGUuY29tcGxleF9maWVsZHMucmVkdWNlKChmbGFnc09mQ29tcGxleEZpZWxkLCBzdWJGaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmV4dHJhY3RGbGFnc0RhdGFGcm9tQ2FzZUZpZWxkKFxuICAgICAgICAgICAgICAgICAgZmxhZ3NPZkNvbXBsZXhGaWVsZCwgc3ViRmllbGQsIHBhdGhUb0ZsYWdzRm9ybUdyb3VwLCB0b3BMZXZlbENhc2VGaWVsZCwgdmFsdWVbc3ViRmllbGQuaWRdKTtcbiAgICAgICAgICAgICAgfSwgZmxhZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgLy8gRm9yIGEgQ29sbGVjdGlvbiBmaWVsZCwgdGhlIHZhbHVlcyBhcmUgc3RvcmVkIGRpcmVjdGx5IGFzIGtleS12YWx1ZSBwYWlycyBpbiB0aGUgQ2FzZUZpZWxkJ3MgdmFsdWUgcHJvcGVydHlcbiAgICAgICAgLy8gYXMgYW4gYXJyYXksIHVubGVzcyB0aGUgY29sbGVjdGlvbiBpcyBhIHN1Yi1maWVsZCBvZiBhIENvbXBsZXggdHlwZSAtIHN1Yi1maWVsZHMgbmV2ZXIgY29udGFpbiB2YWx1ZXNcbiAgICAgICAgY2FzZSAnQ29sbGVjdGlvbic6XG4gICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGNvbGxlY3Rpb24gb2YgRmxhZ3MgQ2FzZUZpZWxkcywgdGhlc2UgY2FuIGJlIG1hcHBlZCB0byBGbGFncyBvYmplY3RzIGltbWVkaWF0ZWx5XG4gICAgICAgICAgaWYgKEZpZWxkc1V0aWxzLmlzRmxhZ3NGaWVsZFR5cGUoZmllbGRUeXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZSkpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBDb2xsZWN0aW9uIENhc2VGaWVsZCBoYXMgYSB2YWx1ZSAoYW4gYXJyYXkpLCBpdCBpcyBhIHJvb3QtbGV2ZWwgQ29sbGVjdGlvbiBmaWVsZDsgaWYgaXQgZG9lcyBub3QsXG4gICAgICAgICAgICAvLyBpdCBpcyBhIENvbGxlY3Rpb24gQ2FzZUZpZWxkIHRoYXQgaXMgYSBzdWItZmllbGQgd2l0aGluIGEgQ29tcGxleCBmaWVsZCwgc28gdXNlIHRoZSBjdXJyZW50VmFsdWUgdmFsdWVcbiAgICAgICAgICAgIC8vIChpZiBhbnkpIGluc3RlYWRcbiAgICAgICAgICAgIGNvbnN0IHBhdGhGcmFnbWVudCA9IHBhdGhUb0ZsYWdzRm9ybUdyb3VwICs9ICcuaW5kZXgudmFsdWUnO1xuICAgICAgICAgICAgaWYgKGNhc2VGaWVsZC52YWx1ZSkge1xuICAgICAgICAgICAgICBjYXNlRmllbGQudmFsdWUuZm9yRWFjaCgoaXRlbTogeyBpZDogc3RyaW5nOyB2YWx1ZTogb2JqZWN0OyB9LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQXQgZWFjaCBpdGVyYXRpb24sIHJlcGxhY2UgdGhlIFwiaW5kZXhcIiBwbGFjZWhvbGRlciB3aXRoIHRoZSBhY3R1YWwgaW5kZXhcbiAgICAgICAgICAgICAgICBwYXRoVG9GbGFnc0Zvcm1Hcm91cCA9IHBhdGhGcmFnbWVudC5yZXBsYWNlKCdpbmRleCcsIGluZGV4LnRvU3RyaW5nKDEwKSk7XG4gICAgICAgICAgICAgICAgZmxhZ3MucHVzaChcbiAgICAgICAgICAgICAgICAgIHRoaXMubWFwVmFsdWVUb0ZsYWdzV2l0aEZvcm1Hcm91cFBhdGhPYmplY3QoaXRlbS5pZCwgaXRlbS52YWx1ZSwgcGF0aFRvRmxhZ3NGb3JtR3JvdXAsIGNhc2VGaWVsZCkpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICAgIChjdXJyZW50VmFsdWUgYXMgW10pLmZvckVhY2goKGl0ZW06IHsgaWQ6IHN0cmluZzsgdmFsdWU6IG9iamVjdDsgfSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIHBhdGhUb0ZsYWdzRm9ybUdyb3VwID0gcGF0aEZyYWdtZW50LnJlcGxhY2UoJ2luZGV4JywgaW5kZXgudG9TdHJpbmcoMTApKTtcbiAgICAgICAgICAgICAgICBmbGFncy5wdXNoKFxuICAgICAgICAgICAgICAgICAgdGhpcy5tYXBWYWx1ZVRvRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aE9iamVjdChpdGVtLmlkLCBpdGVtLnZhbHVlLCBwYXRoVG9GbGFnc0Zvcm1Hcm91cCwgdG9wTGV2ZWxDYXNlRmllbGQpKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChmaWVsZFR5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLnR5cGUgPT09ICdDb21wbGV4JyAmJiBmaWVsZFR5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzKSB7XG4gICAgICAgICAgICBpZiAoY2FzZUZpZWxkLnZhbHVlKSB7XG4gICAgICAgICAgICAgIC8vIFBlcmZvcm0gYSByZWR1Y3Rpb24gb3ZlciBlYWNoIENvbXBsZXggZmllbGQncyBzdWItZmllbGRzIChzaW1pbGFyIHRvIHdoYXQgaXMgZG9uZSBhYm92ZSBmb3Igbm9uLUZsYWdzXG4gICAgICAgICAgICAgIC8vIENvbXBsZXggZmllbGRzKVxuICAgICAgICAgICAgICAvLyAoQ2Fubm90IGp1c3QgY2FsbCB0aGlzIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5IGZvciBlYWNoIENvbXBsZXggZmllbGQgaW4gdGhlIGNvbGxlY3Rpb24gYmVjYXVzZSB0aGUgQ2FzZUZpZWxkXG4gICAgICAgICAgICAgIC8vIGZvciBlYWNoIG9uZSBpcyBub3QgcGFydCBvZiB0aGUgY29sbGVjdGlvbilcbiAgICAgICAgICAgICAgY29uc3QgcGF0aEZyYWdtZW50ID0gcGF0aFRvRmxhZ3NGb3JtR3JvdXAgKz0gJy5pbmRleC52YWx1ZSc7XG4gICAgICAgICAgICAgIGNhc2VGaWVsZC52YWx1ZS5mb3JFYWNoKChpdGVtOiB7IGlkOiBzdHJpbmc7IHZhbHVlOiBvYmplY3Q7IH0sIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBBdCBlYWNoIGl0ZXJhdGlvbiwgcmVwbGFjZSB0aGUgXCJpbmRleFwiIHBsYWNlaG9sZGVyIHdpdGggdGhlIGFjdHVhbCBpbmRleFxuICAgICAgICAgICAgICAgIHBhdGhUb0ZsYWdzRm9ybUdyb3VwID0gcGF0aEZyYWdtZW50LnJlcGxhY2UoJ2luZGV4JywgaW5kZXgudG9TdHJpbmcoMTApKTtcbiAgICAgICAgICAgICAgICBmbGFncyA9IGZpZWxkVHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMucmVkdWNlKChmbGFnc09mQ29tcGxleEZpZWxkLCBzdWJGaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXh0cmFjdEZsYWdzRGF0YUZyb21DYXNlRmllbGQoXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzT2ZDb21wbGV4RmllbGQsIHN1YkZpZWxkLCBwYXRoVG9GbGFnc0Zvcm1Hcm91cCwgdG9wTGV2ZWxDYXNlRmllbGQsIGl0ZW0udmFsdWVbc3ViRmllbGQuaWRdKTtcbiAgICAgICAgICAgICAgICB9LCBmbGFncyk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAvLyBJZ25vcmUgYWxsIG90aGVyIGZpZWxkIHR5cGVzXG4gICAgICB9XG4gICAgICByZXR1cm4gZmxhZ3M7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBtYXBDYXNlRmllbGRUb0ZsYWdzV2l0aEZvcm1Hcm91cFBhdGhPYmplY3QoY2FzZUZpZWxkOiBDYXNlRmllbGQsXG4gICAgcGF0aFRvRmxhZ3NGb3JtR3JvdXA6IHN0cmluZyk6IEZsYWdzV2l0aEZvcm1Hcm91cFBhdGgge1xuICAgICAgcmV0dXJuIHRoaXMubWFwVmFsdWVUb0ZsYWdzV2l0aEZvcm1Hcm91cFBhdGhPYmplY3QoY2FzZUZpZWxkLmlkLCBjYXNlRmllbGQudmFsdWUsIHBhdGhUb0ZsYWdzRm9ybUdyb3VwLCBjYXNlRmllbGQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgbWFwVmFsdWVUb0ZsYWdzV2l0aEZvcm1Hcm91cFBhdGhPYmplY3QoaWQ6IHN0cmluZywgdmFsdWU6IG9iamVjdCxcbiAgICBwYXRoVG9GbGFnc0Zvcm1Hcm91cDogc3RyaW5nLCBjYXNlRmllbGQ6IENhc2VGaWVsZCk6IEZsYWdzV2l0aEZvcm1Hcm91cFBhdGgge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmxhZ3M6IHtcbiAgICAgICAgICBmbGFnc0Nhc2VGaWVsZElkOiBpZCxcbiAgICAgICAgICBwYXJ0eU5hbWU6IHZhbHVlID8gdmFsdWVbJ3BhcnR5TmFtZSddIDogbnVsbCxcbiAgICAgICAgICByb2xlT25DYXNlOiB2YWx1ZSA/IHZhbHVlWydyb2xlT25DYXNlJ10gOiBudWxsLFxuICAgICAgICAgIGRldGFpbHM6IHZhbHVlICYmIHZhbHVlWydkZXRhaWxzJ10gJiYgdmFsdWVbJ2RldGFpbHMnXS5sZW5ndGggPiAwXG4gICAgICAgICAgICA/ICh2YWx1ZVsnZGV0YWlscyddIGFzIGFueVtdKS5tYXAoZGV0YWlsID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIC4uLk9iamVjdC5rZXlzKGRldGFpbC52YWx1ZSkubWFwKGsgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBpZCBwcm9wZXJ0eSBzZXQgYmVsb3cgd2lsbCBiZSBudWxsIGZvciBhIG5ldyBjYXNlIGZsYWcsIGFuZCBhIHVuaXF1ZSBpZCByZXR1cm5lZCBmcm9tIENDRCB3aGVuXG4gICAgICAgICAgICAgICAgLy8gdXBkYXRpbmcgYW4gZXhpc3RpbmcgZmxhZ1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoaykge1xuICAgICAgICAgICAgICAgICAgLy8gVGhlc2UgdHdvIGZpZWxkcyBhcmUgZGF0ZS10aW1lIGZpZWxkc1xuICAgICAgICAgICAgICAgICAgY2FzZSAnZGF0ZVRpbWVNb2RpZmllZCc6XG4gICAgICAgICAgICAgICAgICBjYXNlICdkYXRlVGltZUNyZWF0ZWQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1trXTogZGV0YWlsLnZhbHVlW2tdID8gbmV3IERhdGUoZGV0YWlsLnZhbHVlW2tdKSA6IG51bGwsIGlkOiBkZXRhaWwuaWR9O1xuICAgICAgICAgICAgICAgICAgLy8gVGhpcyBmaWVsZCBpcyBhIFwieWVzL25vXCIgZmllbGRcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ2hlYXJpbmdSZWxldmFudCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkZXRhaWwudmFsdWVba10udG9VcHBlckNhc2UoKSA9PT0gJ1lFUycgPyB7W2tdOiB0cnVlLCBpZDogZGV0YWlsLmlkfSA6IHtba106IGZhbHNlLCBpZDogZGV0YWlsLmlkfTtcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7W2tdOiBkZXRhaWwudmFsdWVba10sIGlkOiBkZXRhaWwuaWR9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfSkgYXMgRmxhZ0RldGFpbFtdXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgICAgfSxcbiAgICAgICAgcGF0aFRvRmxhZ3NGb3JtR3JvdXAsXG4gICAgICAgIGNhc2VGaWVsZFxuICAgICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3VudCBhY3RpdmUgZmxhZ3MgaW4gYSBgQ2FzZUZpZWxkYCBpbnN0YW5jZSwgcmVjdXJzaW5nIGFuZCBpdGVyYXRpbmcgdGhyb3VnaCBzdWItZmllbGRzIG9mIGEgQ29tcGxleCBmaWVsZCBvciBlYWNoXG4gICAqIGZpZWxkIGluIGEgQ29sbGVjdGlvbiBmaWVsZC5cbiAgICpcbiAgICogQHBhcmFtIGFjdGl2ZUNvdW50IEFuIGFjY3VtdWxhdGlvbiBvZiB0aGUgdG90YWwgbnVtYmVyIG9mIGFjdGl2ZSBmbGFnc1xuICAgKiBAcGFyYW0gY2FzZUZpZWxkIEEgYENhc2VGaWVsZGAgaW5zdGFuY2UgZm9yIHdoaWNoIHRvIGNvdW50IHRoZSBhY3RpdmUgZmxhZ3NcbiAgICogQHBhcmFtIGN1cnJlbnRWYWx1ZSBUaGUgY3VycmVudCB2YWx1ZSBvYmplY3Qgb2YgYSBgQ2FzZUZpZWxkYCB0aGF0IGlzIGEgc3ViLWZpZWxkIG9mIGEgbm9uIHJvb3QtbGV2ZWwgQ29tcGxleCBmaWVsZC5cbiAgICogKEZvciBDb21wbGV4IHR5cGVzLCBvbmx5IHRoZSBfcm9vdC1sZXZlbF8gYENhc2VGaWVsZGAgY29udGFpbnMgYSB2YWx1ZSBwcm9wZXJ0eSAtIGFsbCBzdWItZmllbGRzLCBpbmNsdWRpbmcgYW55XG4gICAqIG5lc3RlZCBDb21wbGV4IGZpZWxkcywgZG8gKm5vdCogY29udGFpbiBhbnkgdmFsdWVzIHRoZW1zZWx2ZXMuKVxuICAgKiBAcmV0dXJucyBUaGUgY291bnQgb2YgYWN0aXZlIGZsYWdzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvdW50QWN0aXZlRmxhZ3NJbkNhc2VGaWVsZChhY3RpdmVDb3VudDogbnVtYmVyLCBjYXNlRmllbGQ6IENhc2VGaWVsZCwgY3VycmVudFZhbHVlPzogb2JqZWN0KTogbnVtYmVyIHtcbiAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IGNhc2VGaWVsZC5maWVsZF90eXBlO1xuICAgICAgc3dpdGNoIChmaWVsZFR5cGUudHlwZSkge1xuICAgICAgICBjYXNlICdDb21wbGV4JzpcbiAgICAgICAgICBpZiAoRmllbGRzVXRpbHMuaXNGbGFnc0Nhc2VGaWVsZChjYXNlRmllbGQpKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgRmxhZ3MgQ2FzZUZpZWxkIGhhcyBhIHZhbHVlLCBpdCBpcyBhIHJvb3QtbGV2ZWwgQ29tcGxleCBmaWVsZDsgaWYgaXQgZG9lcyBub3QsIGl0IGlzIGEgRmxhZ3NcbiAgICAgICAgICAgIC8vIENhc2VGaWVsZCB0aGF0IGlzIGEgc3ViLWZpZWxkIHdpdGhpbiBhbm90aGVyIENvbXBsZXggZmllbGQsIHNvIHVzZSB0aGUgY3VycmVudFZhbHVlIHZhbHVlIChpZiBhbnkpIGluc3RlYWRcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY2FzZUZpZWxkLnZhbHVlID8gY2FzZUZpZWxkLnZhbHVlIDogY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgaWYgKHZhbHVlICYmIEZpZWxkc1V0aWxzLmlzTm9uRW1wdHlPYmplY3QodmFsdWUpICYmIHZhbHVlLmRldGFpbHMpIHtcbiAgICAgICAgICAgICAgYWN0aXZlQ291bnQgPSB2YWx1ZS5kZXRhaWxzLnJlZHVjZShcbiAgICAgICAgICAgICAgICAoY291bnQsIGRldGFpbCkgPT4gZGV0YWlsLnZhbHVlLnN0YXR1cyA9PT0gQ2FzZUZsYWdTdGF0dXMuQUNUSVZFID8gY291bnQgKyAxIDogY291bnQsXG4gICAgICAgICAgICAgICAgYWN0aXZlQ291bnRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkVHlwZS5jb21wbGV4X2ZpZWxkcykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjYXNlRmllbGQudmFsdWUgPyBjYXNlRmllbGQudmFsdWUgOiBjdXJyZW50VmFsdWU7XG4gICAgICAgICAgICBpZiAodmFsdWUgJiYgRmllbGRzVXRpbHMuaXNOb25FbXB0eU9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgYWN0aXZlQ291bnQgPSBmaWVsZFR5cGUuY29tcGxleF9maWVsZHMucmVkdWNlKChhY3RpdmVGbGFnc0NvdW50T2ZDb21wbGV4RmllbGQsIHN1YkZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY291bnRBY3RpdmVGbGFnc0luQ2FzZUZpZWxkKFxuICAgICAgICAgICAgICAgICAgYWN0aXZlRmxhZ3NDb3VudE9mQ29tcGxleEZpZWxkLFxuICAgICAgICAgICAgICAgICAgc3ViRmllbGQsXG4gICAgICAgICAgICAgICAgICB2YWx1ZVtzdWJGaWVsZC5pZF1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9LCBhY3RpdmVDb3VudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyBGb3IgYSBDb2xsZWN0aW9uIGZpZWxkLCB0aGUgdmFsdWVzIGFyZSBzdG9yZWQgZGlyZWN0bHkgYXMga2V5LXZhbHVlIHBhaXJzIGluIHRoZSBDYXNlRmllbGQncyB2YWx1ZSBwcm9wZXJ0eVxuICAgICAgICAvLyBhcyBhbiBhcnJheSwgdW5sZXNzIHRoZSBjb2xsZWN0aW9uIGlzIGEgc3ViLWZpZWxkIG9mIGEgQ29tcGxleCB0eXBlIC0gc3ViLWZpZWxkcyBuZXZlciBjb250YWluIHZhbHVlc1xuICAgICAgICBjYXNlICdDb2xsZWN0aW9uJzpcbiAgICAgICAgICBpZiAoRmllbGRzVXRpbHMuaXNGbGFnc0ZpZWxkVHlwZShmaWVsZFR5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlKSkge1xuICAgICAgICAgICAgLy8gSWYgdGhlIENvbGxlY3Rpb24gQ2FzZUZpZWxkIGhhcyBhIHZhbHVlIChhbiBhcnJheSksIGl0IGlzIGEgcm9vdC1sZXZlbCBDb2xsZWN0aW9uIGZpZWxkOyBpZiBpdCBkb2VzIG5vdCxcbiAgICAgICAgICAgIC8vIGl0IGlzIGEgQ29sbGVjdGlvbiBDYXNlRmllbGQgdGhhdCBpcyBhIHN1Yi1maWVsZCB3aXRoaW4gYSBDb21wbGV4IGZpZWxkLCBzbyB1c2UgdGhlIGN1cnJlbnRWYWx1ZSB2YWx1ZVxuICAgICAgICAgICAgLy8gKGlmIGFueSkgaW5zdGVhZFxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjYXNlRmllbGQudmFsdWUgPyBjYXNlRmllbGQudmFsdWUgOiBjdXJyZW50VmFsdWU7XG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgdmFsdWUuZm9yRWFjaCgoaXRlbTogeyBpZDogc3RyaW5nOyB2YWx1ZTogb2JqZWN0OyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0udmFsdWVbJ2RldGFpbHMnXSkge1xuICAgICAgICAgICAgICAgICAgYWN0aXZlQ291bnQgPSBpdGVtLnZhbHVlWydkZXRhaWxzJ10ucmVkdWNlKFxuICAgICAgICAgICAgICAgICAgICAoY291bnQsIGRldGFpbCkgPT4gZGV0YWlsLnZhbHVlLnN0YXR1cyA9PT0gQ2FzZUZsYWdTdGF0dXMuQUNUSVZFID8gY291bnQgKyAxIDogY291bnQsXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZUNvdW50XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChmaWVsZFR5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLnR5cGUgPT09ICdDb21wbGV4JyAmJiBmaWVsZFR5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzKSB7XG4gICAgICAgICAgICBpZiAoY2FzZUZpZWxkLnZhbHVlKSB7XG4gICAgICAgICAgICAgIC8vIFBlcmZvcm0gYSByZWR1Y3Rpb24gb3ZlciBlYWNoIENvbXBsZXggZmllbGQncyBzdWItZmllbGRzIChzaW1pbGFyIHRvIHdoYXQgaXMgZG9uZSBhYm92ZSBmb3Igbm9uLUZsYWdzXG4gICAgICAgICAgICAgIC8vIENvbXBsZXggZmllbGRzKVxuICAgICAgICAgICAgICAvLyAoQ2Fubm90IGp1c3QgY2FsbCB0aGlzIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5IGZvciBlYWNoIENvbXBsZXggZmllbGQgaW4gdGhlIGNvbGxlY3Rpb24gYmVjYXVzZSB0aGUgQ2FzZUZpZWxkXG4gICAgICAgICAgICAgIC8vIGZvciBlYWNoIG9uZSBpcyBub3QgcGFydCBvZiB0aGUgY29sbGVjdGlvbilcbiAgICAgICAgICAgICAgY2FzZUZpZWxkLnZhbHVlLmZvckVhY2goKGl0ZW06IHsgaWQ6IHN0cmluZzsgdmFsdWU6IG9iamVjdDsgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGFjdGl2ZUNvdW50ID0gZmllbGRUeXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcy5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAoYWN0aXZlRmxhZ3NDb3VudE9mQ29tcGxleEZpZWxkLCBzdWJGaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb3VudEFjdGl2ZUZsYWdzSW5DYXNlRmllbGQoYWN0aXZlRmxhZ3NDb3VudE9mQ29tcGxleEZpZWxkLCBzdWJGaWVsZCwgaXRlbS52YWx1ZVtzdWJGaWVsZC5pZF0pO1xuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGFjdGl2ZUNvdW50XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIC8vIElnbm9yZSBhbGwgb3RoZXIgZmllbGQgdHlwZXNcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY3RpdmVDb3VudDtcbiAgfVxuXG4gIHB1YmxpYyBidWlsZENhblNob3dQcmVkaWNhdGUoZXZlbnRUcmlnZ2VyOiBDYXNlRXZlbnRUcmlnZ2VyLCBmb3JtOiBhbnkpOiBQcmVkaWNhdGU8V2l6YXJkUGFnZT4ge1xuICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHRoaXMuZ2V0Q3VycmVudEV2ZW50U3RhdGUoZXZlbnRUcmlnZ2VyLCBmb3JtKTtcbiAgICByZXR1cm4gKHBhZ2U6IFdpemFyZFBhZ2UpOiBib29sZWFuID0+IHtcbiAgICAgIHJldHVybiBwYWdlLnBhcnNlZFNob3dDb25kaXRpb24ubWF0Y2goY3VycmVudFN0YXRlKTtcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGdldEN1cnJlbnRFdmVudFN0YXRlKGV2ZW50VHJpZ2dlcjogeyBjYXNlX2ZpZWxkczogQ2FzZUZpZWxkW10gfSwgZm9ybTogRm9ybUdyb3VwKTogb2JqZWN0IHtcbiAgICByZXR1cm4gdGhpcy5tZXJnZUNhc2VGaWVsZHNBbmRGb3JtRmllbGRzKGV2ZW50VHJpZ2dlci5jYXNlX2ZpZWxkcywgZm9ybS5jb250cm9sc1snZGF0YSddLnZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBjbG9uZUNhc2VGaWVsZChvYmo6IGFueSk6IENhc2VGaWVsZCB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IENhc2VGaWVsZCgpLCBvYmopO1xuICB9XG5cbiAgcHVibGljIG1lcmdlQ2FzZUZpZWxkc0FuZEZvcm1GaWVsZHMoY2FzZUZpZWxkczogQ2FzZUZpZWxkW10sIGZvcm1GaWVsZHM6IG9iamVjdCk6IG9iamVjdCB7XG4gICAgcmV0dXJuIHRoaXMubWVyZ2VGaWVsZHMoY2FzZUZpZWxkcywgZm9ybUZpZWxkcywgRmllbGRzVXRpbHMuREVGQVVMVF9NRVJHRV9GVU5DVElPTik7XG4gIH1cblxuICBwdWJsaWMgbWVyZ2VMYWJlbENhc2VGaWVsZHNBbmRGb3JtRmllbGRzKGNhc2VGaWVsZHM6IENhc2VGaWVsZFtdLCBmb3JtRmllbGRzOiBvYmplY3QpOiBvYmplY3Qge1xuICAgIHJldHVybiB0aGlzLm1lcmdlRmllbGRzKGNhc2VGaWVsZHMsIGZvcm1GaWVsZHMsIEZpZWxkc1V0aWxzLkxBQkVMX01FUkdFX0ZVTkNUSU9OKTtcbiAgfVxuXG4gIHB1YmxpYyBjb250cm9sSXRlcmF0b3IoXG4gICAgYUNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCxcbiAgICBmb3JtQXJyYXlGbjogKGFycmF5OiBGb3JtQXJyYXkpID0+IHZvaWQsXG4gICAgZm9ybUdyb3VwRm46IChncm91cDogRm9ybUdyb3VwKSA9PiB2b2lkLFxuICAgIGNvbnRyb2xGbjogKGNvbnRyb2w6IEZvcm1Db250cm9sKSA9PiB2b2lkXG4gICk6IHZvaWQge1xuICAgIGlmIChhQ29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkgeyAvLyBXZSdyZSBpbiBhIGNvbGxlY3Rpb25cbiAgICAgIGZvcm1BcnJheUZuKGFDb250cm9sKTtcbiAgICB9IGVsc2UgaWYgKGFDb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7IC8vIFdlJ3JlIGluIGEgY29tcGxleCB0eXBlLlxuICAgICAgZm9ybUdyb3VwRm4oYUNvbnRyb2wpO1xuICAgIH0gZWxzZSBpZiAoYUNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCkgeyAvLyBGb3JtQ29udHJvbFxuICAgICAgY29udHJvbEZuKGFDb250cm9sKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1lcmdlRmllbGRzKGNhc2VGaWVsZHM6IENhc2VGaWVsZFtdLCBmb3JtRmllbGRzOiBvYmplY3QsIG1lcmdlRnVuY3Rpb246IChmaWVsZDogQ2FzZUZpZWxkLCByZXN1bHQ6IG9iamVjdCkgPT4gdm9pZCk6IG9iamVjdCB7XG4gICAgY29uc3QgcmVzdWx0OiBvYmplY3QgPSBGaWVsZHNVdGlscy5jbG9uZU9iamVjdChmb3JtRmllbGRzKTtcbiAgICBjYXNlRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgbWVyZ2VGdW5jdGlvbihmaWVsZCwgcmVzdWx0KTtcbiAgICAgIGlmIChmaWVsZC5maWVsZF90eXBlICYmIGZpZWxkLmZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMgJiYgZmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlc3VsdFtmaWVsZC5pZF0gPSB0aGlzLm1lcmdlRmllbGRzKGZpZWxkLmZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMsIHJlc3VsdFtmaWVsZC5pZF0sIG1lcmdlRnVuY3Rpb24pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cbiJdfQ==
601
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGRzLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2NkLWNhc2UtdWktdG9vbGtpdC9zcmMvbGliL3NoYXJlZC9zZXJ2aWNlcy9maWVsZHMvZmllbGRzLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBbUIsU0FBUyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUkxRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDaEcsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzFELE9BQU8sRUFBb0IsU0FBUyxFQUF5RSxNQUFNLGNBQWMsQ0FBQztBQUNsSSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7QUFFbkYsV0FBVztBQUVYLE1BQU0sT0FBTyxXQUFXO0lBV2YsTUFBTSxDQUFDLGtCQUFrQixDQUFDLEdBQVE7UUFDdkMsSUFBSSxDQUFDLENBQUMsR0FBRyxZQUFZLFNBQVMsQ0FBQyxFQUFFO1lBQy9CLE9BQU8scUJBQXFCLENBQUMsSUFBSSxTQUFTLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztTQUNwRDtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVNLE1BQU0sQ0FBQyxXQUFXLENBQUMsVUFBdUI7UUFDL0MsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDekIsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FB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QUMsQ0FBQzs2QkFDSjs0QkFDRCxNQUFNO3lCQUNQO3FCQUNGO2dCQUNILENBQUMsQ0FBQyxDQUFDO2FBQ0o7WUFDRCxNQUFNO1NBQ1A7S0FDRjtBQUNILENBQUMsQ0FBQztzRUFuT1MsV0FBVzttREFBWCxXQUFXLFdBQVgsV0FBVzt1RkFBWCxXQUFXO2NBRHZCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdXJyZW5jeVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBwbGFpblRvQ2xhc3NGcm9tRXhpc3QgfSBmcm9tICdjbGFzcy10cmFuc2Zvcm1lcic7XG5pbXBvcnQgeyBXaXphcmRQYWdlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jYXNlLWVkaXRvci9kb21haW4nO1xuaW1wb3J0IHsgQWJzdHJhY3RGb3JtRmllbGRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3BhbGV0dGUvYmFzZS1maWVsZC9hYnN0cmFjdC1mb3JtLWZpZWxkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGbGFnRGV0YWlsLCBGbGFnc1dpdGhGb3JtR3JvdXBQYXRoIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9wYWxldHRlL2Nhc2UtZmxhZy9kb21haW4vY2FzZS1mbGFnLm1vZGVsJztcbmltcG9ydCB7IENhc2VGbGFnU3RhdHVzIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9wYWxldHRlL2Nhc2UtZmxhZy9lbnVtcy9jYXNlLWZsYWctc3RhdHVzLmVudW0nO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3BhbGV0dGUvdXRpbHMnO1xuaW1wb3J0IHsgQ2FzZUV2ZW50VHJpZ2dlciwgQ2FzZUZpZWxkLCBDYXNlVGFiLCBDYXNlVmlldywgRmllbGRUeXBlLCBGaWVsZFR5cGVFbnVtLCBGaXhlZExpc3RJdGVtLCBQcmVkaWNhdGUgfSBmcm9tICcuLi8uLi9kb21haW4nO1xuaW1wb3J0IHsgRm9ybWF0VHJhbnNsYXRvclNlcnZpY2UgfSBmcm9tICcuLi9jYXNlLWZpZWxkcy9mb3JtYXQtdHJhbnNsYXRvci5zZXJ2aWNlJztcblxuLy8gQGR5bmFtaWNcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBGaWVsZHNVdGlscyB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IGNhc2VMZXZlbENhc2VGbGFnc0ZpZWxkSWQgPSAnY2FzZUZsYWdzJztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgY3VycmVuY3lQaXBlOiBDdXJyZW5jeVBpcGUgPSBuZXcgQ3VycmVuY3lQaXBlKCdlbi1HQicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBkYXRlUGlwZTogRGF0ZVBpcGUgPSBuZXcgRGF0ZVBpcGUobmV3IEZvcm1hdFRyYW5zbGF0b3JTZXJ2aWNlKCkpO1xuICAvLyBFVUktNDI0NC4gMyBkYXNoZXMgaW5zdGVhZCBvZiAxIHRvIG1ha2UgdGhpcyBsZXNzIGxpa2VseSB0byBjbGFzaCB3aXRoIGEgcmVhbCBmaWVsZC5cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBMQUJFTF9TVUZGSVggPSAnLS0tTEFCRUwnO1xuICAvLyBIYW5kbGluZyBvZiBEeW5hbWljIExpc3RzIGluIENvbXBsZXggVHlwZXNcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBTRVJWRVJfUkVTUE9OU0VfRklFTERfVFlQRV9DT0xMRUNUSU9OID0gJ0NvbGxlY3Rpb24nO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNFUlZFUl9SRVNQT05TRV9GSUVMRF9UWVBFX0NPTVBMRVggPSAnQ29tcGxleCc7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU0VSVkVSX1JFU1BPTlNFX0ZJRUxEX1RZUEVfRFlOQU1JQ19MSVNUX1RZUEU6IEZpZWxkVHlwZUVudW1bXSA9IFsnRHluYW1pY0xpc3QnLCAnRHluYW1pY1JhZGlvTGlzdCddO1xuXG4gIHB1YmxpYyBzdGF0aWMgY29udmVydFRvQ2FzZUZpZWxkKG9iajogYW55KTogQ2FzZUZpZWxkIHtcbiAgICBpZiAoIShvYmogaW5zdGFuY2VvZiBDYXNlRmllbGQpKSB7XG4gICAgICByZXR1cm4gcGxhaW5Ub0NsYXNzRnJvbUV4aXN0KG5ldyBDYXNlRmllbGQoKSwgb2JqKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgdG9WYWx1ZXNNYXAoY2FzZUZpZWxkczogQ2FzZUZpZWxkW10pOiBhbnkge1xuICAgIGNvbnN0IHZhbHVlTWFwID0ge307XG4gICAgY2FzZUZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgIHZhbHVlTWFwW2ZpZWxkLmlkXSA9IEZpZWxkc1V0aWxzLnByZXBhcmVWYWx1ZShmaWVsZCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHZhbHVlTWFwO1xuICB9XG5cbiAgLy8gcHVibGljIHN0YXRpYyBnZXRUeXBlKGVsZW06IGFueSk6IHN0cmluZyB7XG4gIC8vICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlbGVtKS5zbGljZSg4LCAtMSk7XG4gIC8vIH1cblxuICBwdWJsaWMgc3RhdGljIGlzT2JqZWN0KGVsZW06IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgZWxlbSA9PT0gJ29iamVjdCcgJiYgZWxlbSAhPT0gbnVsbDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgaXNOb25FbXB0eU9iamVjdChlbGVtOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc09iamVjdChlbGVtKSAmJiBPYmplY3Qua2V5cyhlbGVtKS5sZW5ndGggIT09IDA7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzQXJyYXkoZWxlbTogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZWxlbSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGFyZUNvbGxlY3Rpb25WYWx1ZXNTaW1wbGVGaWVsZHMoZmllbGRWYWx1ZTogYW55W10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuaXNPYmplY3QoZmllbGRWYWx1ZVswXVsndmFsdWUnXSkgJiYgIUFycmF5LmlzQXJyYXkoZmllbGRWYWx1ZVswXVsndmFsdWUnXSkgJiYgZmllbGRWYWx1ZVswXVsndmFsdWUnXSAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBpc0NvbGxlY3Rpb25PZlNpbXBsZVR5cGVzKGZpZWxkVmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzQ29sbGVjdGlvbihmaWVsZFZhbHVlKSAmJiB0aGlzLmFyZUNvbGxlY3Rpb25WYWx1ZXNTaW1wbGVGaWVsZHMoZmllbGRWYWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzTXVsdGlTZWxlY3RWYWx1ZShmb3JtOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc05vbkVtcHR5QXJyYXkoZm9ybSkgJiYgIXRoaXMuaXNDb2xsZWN0aW9uV2l0aFZhbHVlKGZvcm0pO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBpc05vbkVtcHR5QXJyYXkocGFnZUZvcm1GaWVsZHM6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHBhZ2VGb3JtRmllbGRzKSAmJiBwYWdlRm9ybUZpZWxkc1swXSAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBpc0NvbGxlY3Rpb24ocGFnZUZvcm1GaWVsZHM6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzTm9uRW1wdHlBcnJheShwYWdlRm9ybUZpZWxkcykgJiYgdGhpcy5pc0NvbGxlY3Rpb25XaXRoVmFsdWUocGFnZUZvcm1GaWVsZHMpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBpc0NvbGxlY3Rpb25XaXRoVmFsdWUocGFnZUZvcm1GaWVsZHM6IGFueVtdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHBhZ2VGb3JtRmllbGRzWzBdWyd2YWx1ZSddICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNsb25lT2JqZWN0KG9iajogYW55KTogYW55IHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgb2JqKTtcbiAgfVxuXG4gIC8vIHRlbXBvcmFyeSBmdW5jdGlvbiB1bnRpbCB0aGlzIGNhbiBiZSBtb3ZlZCB0byBDYXNlVmlldyBjbGFzcyAoUkRNLTI2ODEpXG4gIHB1YmxpYyBzdGF0aWMgZ2V0Q2FzZUZpZWxkcyhjYXNlVmlldzogQ2FzZVZpZXcpOiBDYXNlRmllbGRbXSB7XG4gICAgY29uc3QgY2FzZURhdGFGaWVsZHM6IENhc2VGaWVsZFtdID0gY2FzZVZpZXcudGFicy5yZWR1Y2UoKGFjYzogQ2FzZUZpZWxkW10sIHRhYjogQ2FzZVRhYikgPT4ge1xuICAgICAgcmV0dXJuIGFjYy5jb25jYXQodGFiLmZpZWxkcyk7XG4gICAgfSwgW10pO1xuXG4gICAgY29uc3QgbWV0YWRhdGFGaWVsZHM6IENhc2VGaWVsZFtdID0gY2FzZVZpZXcubWV0YWRhdGFGaWVsZHM7XG4gICAgcmV0dXJuIG1ldGFkYXRhRmllbGRzLmNvbmNhdChjYXNlRGF0YUZpZWxkcy5maWx0ZXIoKGNhc2VGaWVsZDogQ2FzZUZpZWxkKSA9PiB7XG4gICAgICByZXR1cm4gbWV0YWRhdGFGaWVsZHMuZmluZEluZGV4KG1ldGFkYXRhRmllbGQgPT4gbWV0YWRhdGFGaWVsZC5pZCA9PT0gY2FzZUZpZWxkLmlkKSA8IDA7XG4gICAgfSkpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBhZGRDYXNlRmllbGRBbmRDb21wb25lbnRSZWZlcmVuY2VzIChjOiBBYnN0cmFjdENvbnRyb2wsIGNmOiBDYXNlRmllbGQsIGNvbXA6IEFic3RyYWN0Rm9ybUZpZWxkQ29tcG9uZW50KTogdm9pZCB7XG4gICAgY1snY2FzZUZpZWxkJ10gPSBjZjtcbiAgICBjWydjb21wb25lbnQnXSA9IGNvbXA7XG4gIH1cblxuICAvKipcbiAgICogUmVjdXJzaXZlIGNoZWNrIG9mIGFuIGFycmF5IG9yIG9iamVjdCBhbmQgaXRzIGRlc2NlbmRhbnRzIGZvciB0aGUgcHJlc2VuY2Ugb2YgYW55IG5vbi1lbXB0eSB2YWx1ZXMuXG4gICAqXG4gICAqIEBwYXJhbSBvYmplY3QgVGhlIGFycmF5IG9yIG9iamVjdCB0byBjaGVja1xuICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFycmF5IG9yIG9iamVjdCAob3IgYSBkZXNjZW5kYW50KSBjb250YWlucyBhdCBsZWFzdCBvbmUgbm9uLWVtcHR5IHZhbHVlOyBgZmFsc2VgIG90aGVyd2lzZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjb250YWluc05vbkVtcHR5VmFsdWVzKG9iamVjdDogb2JqZWN0KTogYm9vbGVhbiB7XG4gICAgaWYgKCFvYmplY3QpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgdmFsdWVzID0gT2JqZWN0LmtleXMob2JqZWN0KS5tYXAoa2V5ID0+IG9iamVjdFtrZXldKTtcbiAgICBjb25zdCBvYmplY3RSZWZzID0gW107XG4gICAgLy8gQWxzbyB0ZXN0IGZvciBudW1lcmljIHZhbHVlcywgYW5kIGxlbmd0aCA+IDAgZm9yIG5vbi1udW1lcmljIHZhbHVlcyBiZWNhdXNlIHRoaXMgY292ZXJzIGJvdGggc3RyaW5ncyBhbmQgYXJyYXlzLlxuICAgIC8vIE5vdGU6IERlbGliZXJhdGUgdXNlIG9mIG5vbi1lcXVhbGl0eSAoIT0pIG9wZXJhdG9yIGZvciBudWxsIGNoZWNrLCB0byBoYW5kbGUgYm90aCBudWxsIGFuZCB1bmRlZmluZWQgdmFsdWVzLlxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogdHJpcGxlLWVxdWFsc1xuICAgIGNvbnN0IGhhc05vbk51bGxQcmltaXRpdmUgPSB2YWx1ZXMuc29tZSh4ID0+ICh4ICE9IG51bGwgJiZcbiAgICAgICgodHlwZW9mIHggPT09ICdvYmplY3QnICYmIHguY29uc3RydWN0b3IgPT09IE9iamVjdCkgfHwgQXJyYXkuaXNBcnJheSh4KVxuICAgICAgICA/ICFvYmplY3RSZWZzLnB1c2goeClcbiAgICAgICAgOiB0eXBlb2YgeCA9PT0gJ251bWJlcicgfHwgeC5sZW5ndGggPiAwKVxuICAgICkpO1xuICAgIHJldHVybiAhaGFzTm9uTnVsbFByaW1pdGl2ZSA/IG9iamVjdFJlZnMuc29tZSh5ID0+IHRoaXMuY29udGFpbnNOb25FbXB0eVZhbHVlcyh5KSkgOiBoYXNOb25OdWxsUHJpbWl0aXZlO1xuICB9XG5cbiAgLyoqXG4gICAqIGhhbmRsZU5lc3RlZER5bmFtaWNMaXN0cygpXG4gICAqIFJlYXNzaWducyBsaXN0X2l0ZW0gYW5kIHZhbHVlIGRhdGEgdG8gRHluYW1pY0xpc3QgY2hpbGRyZW5cbiAgICogZG93biB0aGUgdHJlZS4gU2VydmVyIHJlc3BvbnNlIHJldHVybnMgZGF0YSBvbmx5IGluXG4gICAqIHRoZSBgdmFsdWVgIG9iamVjdCBvZiBwYXJlbnQgY29tcGxleCB0eXBlXG4gICAqXG4gICAqIEVVSS0yNTMwIER5bmFtaWMgTGlzdHMgZm9yIEVsZW1lbnRzIGluIGEgQ29tcGxleCBUeXBlXG4gICAqXG4gICAqIEBwYXJhbSBqc29uQm9keSAtIHsgY2FzZV9maWVsZHM6IFsgQ2FzZUZpZWxkLCBDYXNlRmllbGQgXSB9XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGhhbmRsZU5lc3RlZER5bmFtaWNMaXN0cyhqc29uQm9keTogeyBjYXNlX2ZpZWxkczogQ2FzZUZpZWxkW10gfSk6IGFueSB7XG4gICAgaWYgKGpzb25Cb2R5LmNhc2VfZmllbGRzKSB7XG4gICAgICBqc29uQm9keS5jYXNlX2ZpZWxkcy5mb3JFYWNoKGNhc2VGaWVsZCA9PiB7XG4gICAgICAgIGlmIChjYXNlRmllbGQuZmllbGRfdHlwZSkge1xuICAgICAgICAgIHRoaXMuc2V0RHluYW1pY0xpc3REZWZpbml0aW9uKGNhc2VGaWVsZCwgY2FzZUZpZWxkLmZpZWxkX3R5cGUsIGNhc2VGaWVsZCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBqc29uQm9keTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHByZXBhcmVWYWx1ZShmaWVsZDogQ2FzZUZpZWxkKTogYW55IHtcbiAgICBpZiAoZmllbGQudmFsdWUpIHtcbiAgICAgIHJldHVybiBmaWVsZC52YWx1ZTtcbiAgICB9IGVsc2UgaWYgKGZpZWxkLmlzQ29tcGxleCgpKSB7XG4gICAgICBjb25zdCB2YWx1ZU1hcCA9IHt9O1xuICAgICAgZmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcy5mb3JFYWNoKGNvbXBsZXhGaWVsZCA9PiB7XG4gICAgICAgIHZhbHVlTWFwW2NvbXBsZXhGaWVsZC5pZF0gPSBGaWVsZHNVdGlscy5wcmVwYXJlVmFsdWUoY29tcGxleEZpZWxkKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHZhbHVlTWFwO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IERFRkFVTFRfTUVSR0VfRlVOQ1RJT04gPSBmdW5jdGlvbiBtZXJnZUZ1bmN0aW9uKGZpZWxkOiBDYXNlRmllbGQsIHJlc3VsdDogb2JqZWN0KTogdm9pZCB7XG4gICAgaWYgKCFyZXN1bHQuaGFzT3duUHJvcGVydHkoZmllbGQuaWQpKSB7XG4gICAgICByZXN1bHRbZmllbGQuaWRdID0gZmllbGQudmFsdWU7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IExBQkVMX01FUkdFX0ZVTkNUSU9OID0gZnVuY3Rpb24gbWVyZ2VGdW5jdGlvbihmaWVsZDogQ2FzZUZpZWxkLCByZXN1bHQ6IG9iamVjdCk6IHZvaWQge1xuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICByZXN1bHQgPSB7fTtcbiAgICB9XG4gICAgaWYgKCFyZXN1bHQuaGFzT3duUHJvcGVydHkoZmllbGQuaWQpKSB7XG4gICAgICByZXN1bHRbZmllbGQuaWRdID0gZmllbGQudmFsdWU7XG4gICAgfVxuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBzd2l0Y2gtZGVmYXVsdFxuICAgIHN3aXRjaCAoZmllbGQuZmllbGRfdHlwZS50eXBlKSB7XG4gICAgICBjYXNlICdGaXhlZExpc3QnOlxuICAgICAgY2FzZSAnRml4ZWRSYWRpb0xpc3QnOiB7XG4gICAgICAgIHJlc3VsdFtmaWVsZC5pZF0gPSBGaWVsZHNVdGlscy5nZXRGaXhlZExpc3RMYWJlbEJ5Q29kZU9yRW1wdHkoZmllbGQsIHJlc3VsdFtmaWVsZC5pZF0gfHwgZmllbGQudmFsdWUpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ011bHRpU2VsZWN0TGlzdCc6IHtcbiAgICAgICAgY29uc3QgZmllbGRWYWx1ZSA9IHJlc3VsdFtmaWVsZC5pZF0gfHwgW107XG4gICAgICAgIHJlc3VsdFtmaWVsZC5pZCArIEZpZWxkc1V0aWxzLkxBQkVMX1NVRkZJWF0gPSBbXTtcbiAgICAgICAgZmllbGRWYWx1ZS5mb3JFYWNoKChjb2RlOiBhbnksIGlkeDogYW55KSA9PiB7XG4gICAgICAgICAgcmVzdWx0W2ZpZWxkLmlkICsgRmllbGRzVXRpbHMuTEFCRUxfU1VGRklYXVtpZHhdID0gRmllbGRzVXRpbHMuZ2V0Rml4ZWRMaXN0TGFiZWxCeUNvZGVPckVtcHR5KGZpZWxkLCBjb2RlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnTGFiZWwnOiB7XG4gICAgICAgIHJlc3VsdFtmaWVsZC5pZF0gPSBGaWVsZHNVdGlscy5nZXRMYWJlbChmaWVsZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnTW9uZXlHQlAnOiB7XG4gICAgICAgIGNvbnN0IGZpZWxkVmFsdWUgPSAocmVzdWx0W2ZpZWxkLmlkXSB8fCBmaWVsZC52YWx1ZSk7XG4gICAgICAgIHJlc3VsdFtmaWVsZC5pZF0gPSBGaWVsZHNVdGlscy5nZXRNb25leUdCUChmaWVsZFZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdEYXRlJzoge1xuICAgICAgICBjb25zdCBmaWVsZFZhbHVlID0gKHJlc3VsdFtmaWVsZC5pZF0gfHwgZmllbGQudmFsdWUpO1xuICAgICAgICByZXN1bHRbZmllbGQuaWRdID0gRmllbGRzVXRpbHMuZ2V0RGF0ZShmaWVsZFZhbHVlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdDb21wbGV4Jzoge1xuICAgICAgICBpZiAocmVzdWx0W2ZpZWxkLmlkXSAmJiBmaWVsZC5maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzKSB7XG4gICAgICAgICAgZmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcy5mb3JFYWNoKChmOiBDYXNlRmllbGQpID0+IHtcbiAgICAgICAgICAgIGlmIChbJ0NvbGxlY3Rpb24nLCAnQ29tcGxleCcsICdNdWx0aVNlbGVjdExpc3QnXS5pbmRleE9mKGYuZmllbGRfdHlwZS50eXBlKSA+IC0xKSB7XG4gICAgICAgICAgICAgIEZpZWxkc1V0aWxzLkxBQkVMX01FUkdFX0ZVTkNUSU9OKGYsIHJlc3VsdFtmaWVsZC5pZF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnQ29sbGVjdGlvbic6IHtcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSAocmVzdWx0W2ZpZWxkLmlkXSB8fCBmaWVsZC52YWx1ZSk7XG4gICAgICAgIGlmIChlbGVtZW50cykge1xuICAgICAgICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnN3aXRjaC1kZWZhdWx0XG4gICAgICAgICAgICBzd2l0Y2ggKGZpZWxkLmZpZWxkX3R5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLnR5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSAnTW9uZXlHQlAnOiB7XG4gICAgICAgICAgICAgICAgZWxlbS52YWx1ZSA9IEZpZWxkc1V0aWxzLmdldE1vbmV5R0JQKGVsZW0udmFsdWUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgJ0RhdGUnOiB7XG4gICAgICAgICAgICAgICAgZWxlbS52YWx1ZSA9IEZpZWxkc1V0aWxzLmdldERhdGUoZWxlbS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSAnQ29tcGxleCc6IHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQuZmllbGRfdHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgIGZpZWxkLmZpZWxkX3R5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzLmZvckVhY2goKGY6IENhc2VGaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoWydDb2xsZWN0aW9uJywgJ0NvbXBsZXgnLCAnTXVsdGlTZWxlY3RMaXN0J10uaW5kZXhPZihmLmZpZWxkX3R5cGUudHlwZSkgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgIEZpZWxkc1V0aWxzLkxBQkVMX01FUkdFX0ZVTkNUSU9OKGYsIGVsZW0udmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIEZvcm1hdHMgYSBgTW9uZXlHQlBgIHZhbHVlIHRvIGluY2x1ZGUgY3VycmVuY3kgdW5pdHMuXG4gICAqIEBwYXJhbSBmaWVsZFZhbHVlIFRoZSBDdXJyZW5jeVBpcGUgZXhwZWN0cyBhbiBgYW55YCBwYXJhbWV0ZXIgc28gdGhpcyBtdXN0IGFsc28gYmUgYGFueWAsXG4gICAqIGJ1dCBpdCBzaG91bGQgYmUgXCJudW1iZXItbGlrZVwiIChlLmcuLCAnMTIzNCcpXG4gICAqIEByZXR1cm5zIEEgZm9ybWF0dGVkIHN0cmluZyAoZS5nLiwgwqMxMi4zNClcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIGdldE1vbmV5R0JQKGZpZWxkVmFsdWU6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGZpZWxkVmFsdWUgPyBGaWVsZHNVdGlscy5jdXJyZW5jeVBpcGUudHJhbnNmb3JtKGZpZWxkVmFsdWUgLyAxMDAsICdHQlAnLCAnc3ltYm9sJykgOiBmaWVsZFZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0TGFiZWwoZmllbGRWYWx1ZTogQ2FzZUZpZWxkKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZmllbGRWYWx1ZSA/IGZpZWxkVmFsdWUubGFiZWwgOiAnJztcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldERhdGUoZmllbGRWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgLy8gRm9ybWF0IHNwZWNpZmllZCBoZXJlIHdhc24ndCBwcmV2aW91c2x5IHdvcmtpbmcgYW5kIGxvdHMgb2YgdGVzdHMgZGVwZW5kIG9uIGl0IG5vdCB3b3JraW5nXG4gICAgICAvLyBOb3cgdGhhdCBmb3JtYXRzIHdvcmsgY29ycmVjdGx5IG1hbnkgdGVzdCB3b3VsZCBicmVhayAtIGFuZCB0aGlzIGNvdWxkIGFmZmVjdCBzZXJ2aWNlcyB3aGljaCBtYXkgZGVwZW5kIG9uXG4gICAgICAvLyB0aGUgb3JnaW5hbCBiZWhhdmlvdXIgb2YgcmV0dXJuaW5nIGRhdGVzIGluIFwiZCBNTU0geXl5eVwiXG4gICAgICAvLyBOb3RlIC0gcmVwbGFjZWQgJ2QnIHdpdGggJ0QnIGFzIGRhdGVwaXBlIHVzaW5nIG1vbWVudCB0byBhdm9pZCB0aW1lem9uZSBkaXNjcmVwYW5jaWVzXG4gICAgICByZXR1cm4gRmllbGRzVXRpbHMuZGF0ZVBpcGUudHJhbnNmb3JtKGZpZWxkVmFsdWUsIG51bGwsICdEIE1NTSB5eXl5Jyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHRoaXMudGV4dEZvckludmFsaWRGaWVsZCgnRGF0ZScsIGZpZWxkVmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldEZpeGVkTGlzdExhYmVsQnlDb2RlT3JFbXB0eShmaWVsZDogQ2FzZUZpZWxkLCBjb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJlbGV2YW50SXRlbTogRml4ZWRMaXN0SXRlbSA9IGNvZGUgPyBmaWVsZC5maWVsZF90eXBlLmZpeGVkX2xpc3RfaXRlbXMuZmluZChpdGVtID0+IGl0ZW0uY29kZSA9PT0gY29kZSkgOiBudWxsO1xuICAgIHJldHVybiByZWxldmFudEl0ZW0gPyByZWxldmFudEl0ZW0ubGFiZWwgOiAnJztcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHRleHRGb3JJbnZhbGlkRmllbGQodHlwZTogc3RyaW5nLCBpbnZhbGlkVmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGB7IEludmFsaWQgJHt0eXBlfTogJHtpbnZhbGlkVmFsdWV9IH1gO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgc2V0RHluYW1pY0xpc3REZWZpbml0aW9uKGNhc2VGaWVsZDogQ2FzZUZpZWxkLCBjYXNlRmllbGRUeXBlOiBGaWVsZFR5cGUsIHJvb3RDYXNlRmllbGQ6IENhc2VGaWVsZCkge1xuICAgIGlmIChjYXNlRmllbGRUeXBlLnR5cGUgPT09IEZpZWxkc1V0aWxzLlNFUlZFUl9SRVNQT05TRV9GSUVMRF9UWVBFX0NPTVBMRVgpIHtcblxuICAgICAgY2FzZUZpZWxkVHlwZS5jb21wbGV4X2ZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBpc0R5bmFtaWNGaWVsZCA9IEZpZWxkc1V0aWxzLlNFUlZFUl9SRVNQT05TRV9GSUVMRF9UWVBFX0RZTkFNSUNfTElTVF9UWVBFLmluZGV4T2YoZmllbGQuZmllbGRfdHlwZS50eXBlKSAhPT0gLTE7XG5cbiAgICAgICAgICBpZiAoaXNEeW5hbWljRmllbGQpIHtcbiAgICAgICAgICAgIGNvbnN0IGR5bmFtaWNMaXN0VmFsdWUgPSB0aGlzLmdldER5bmFtaWNMaXN0VmFsdWUocm9vdENhc2VGaWVsZC52YWx1ZSwgZmllbGQuaWQpO1xuICAgICAgICAgICAgaWYgKGR5bmFtaWNMaXN0VmFsdWUpIHtcbiAgICAgICAgICAgICAgY29uc3QgbGlzdF9pdGVtcyA9IGR5bmFtaWNMaXN0VmFsdWVbMF0ubGlzdF9pdGVtcztcbiAgICAgICAgICAgICAgY29uc3QgY29tcGxleFZhbHVlID0gZHluYW1pY0xpc3RWYWx1ZS5tYXAoZGF0YSA9PiBkYXRhLnZhbHVlKTtcbiAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB7XG4gICAgICAgICAgICAgICAgbGlzdF9pdGVtcyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogY29tcGxleFZhbHVlLmxlbmd0aCA+IDAgPyBjb21wbGV4VmFsdWUgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgZmllbGQudmFsdWUgPSB7XG4gICAgICAgICAgICAgICAgLi4udmFsdWVcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgZmllbGQuZm9ybWF0dGVkX3ZhbHVlID0ge1xuICAgICAgICAgICAgICAgIC4uLmZpZWxkLmZvcm1hdHRlZF92YWx1ZSxcbiAgICAgICAgICAgICAgICAuLi52YWx1ZVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldER5bmFtaWNMaXN0RGVmaW5pdGlvbihmaWVsZCwgZmllbGQuZmllbGRfdHlwZSwgcm9vdENhc2VGaWVsZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChjYXNlRmllbGRUeXBlLnR5cGUgPT09IEZpZWxkc1V0aWxzLlNFUlZFUl9SRVNQT05TRV9GSUVMRF9UWVBFX0NPTExFQ1RJT04pIHtcbiAgICAgIGlmIChjYXNlRmllbGRUeXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZSkge1xuICAgICAgICB0aGlzLnNldER5bmFtaWNMaXN0RGVmaW5pdGlvbihjYXNlRmllbGQsIGNhc2VGaWVsZFR5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLCByb290Q2FzZUZpZWxkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXREeW5hbWljTGlzdFZhbHVlKGpzb25CbG9jazogYW55LCBrZXk6IHN0cmluZykge1xuICAgIGNvbnN0IGRhdGEgPSBqc29uQmxvY2sgPyB0aGlzLmdldE5lc3RlZEZpZWxkVmFsdWVzKGpzb25CbG9jaywga2V5LCBbXSkgOiBbXTtcblxuICAgIHJldHVybiBkYXRhLmxlbmd0aCA+IDAgPyBkYXRhIDogbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGdldE5lc3RlZEZpZWxkVmFsdWVzKGpzb25EYXRhOiBhbnksIGtleTogc3RyaW5nLCBvdXRwdXQ6IGFueVtdID0gW10pIHtcbiAgICBpZiAoanNvbkRhdGEgJiYganNvbkRhdGFba2V5XSkge1xuICAgICAgb3V0cHV0LnB1c2goanNvbkRhdGFba2V5XSk7XG4gICAgfSBlbHNlICB7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnRLZXkgaW4ganNvbkRhdGEpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBqc29uRGF0YSA9PT0gJ29iamVjdCcgJiYganNvbkRhdGEuaGFzT3duUHJvcGVydHkoZWxlbWVudEtleSkpIHtcbiAgICAgICAgICB0aGlzLmdldE5lc3RlZEZpZWxkVmFsdWVzKGpzb25EYXRhW2VsZW1lbnRLZXldLCBrZXksIG91dHB1dCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgaXNGbGFnc0Nhc2VGaWVsZChjYXNlRmllbGQ6IENhc2VGaWVsZCk6IGJvb2xlYW4ge1xuICAgIGlmICghY2FzZUZpZWxkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaXNGbGFnc0ZpZWxkVHlwZShjYXNlRmllbGQuZmllbGRfdHlwZSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIHtAbGluayBpc0Nhc2VGaWVsZE9mVHlwZX0gaW5zdGVhZCwgcGFzc2luZyAnRmxhZ0xhdW5jaGVyJyBhcyB0aGUgc2luZ2xlIHR5cGUgaW4gdGhlIGB0eXBlc2AgYXJyYXlcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaXNGbGFnTGF1bmNoZXJDYXNlRmllbGQoY2FzZUZpZWxkOiBDYXNlRmllbGQpOiBib29sZWFuIHtcbiAgICBpZiAoIWNhc2VGaWVsZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBjYXNlRmllbGQuZmllbGRfdHlwZS50eXBlID09PSAnRmxhZ0xhdW5jaGVyJztcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rIGlzQ2FzZUZpZWxkT2ZUeXBlfSBpbnN0ZWFkLCBwYXNzaW5nICdDb21wb25lbnRMYXVuY2hlcicgYXMgdGhlIHNpbmdsZSB0eXBlIGluIHRoZSBgdHlwZXNgXG4gICAqIGFycmF5XG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlzQ29tcG9uZW50TGF1bmNoZXJDYXNlRmllbGQoY2FzZUZpZWxkOiBDYXNlRmllbGQpOiBib29sZWFuIHtcbiAgICBpZiAoIWNhc2VGaWVsZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBjYXNlRmllbGQuZmllbGRfdHlwZS50eXBlID09PSAnQ29tcG9uZW50TGF1bmNoZXInO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIHtAbGluayBDYXNlRmllbGR9IGlzIG9mIG9uZSBvZiB0aGUgZ2l2ZW4gZmllbGQgdHlwZXMuXG4gICAqXG4gICAqIEBwYXJhbSBjYXNlRmllbGQgVGhlIGBDYXNlRmllbGRgIHRvIGNoZWNrXG4gICAqIEBwYXJhbSB0eXBlcyBBbiBhcnJheSBvZiBvbmUgb3IgbW9yZSBmaWVsZCB0eXBlc1xuICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGBDYXNlRmllbGRgIHR5cGUgaXMgb25lIG9mIHRob3NlIGluIHRoZSBhcnJheSBvZiB0eXBlcyB0byBjaGVjayBhZ2FpbnN0OyBgZmFsc2VgXG4gICAqIG90aGVyd2lzZSBvciBpZiBgY2FzZUZpZWxkYCBvciBgdHlwZXNgIGFyZSBmYWxzeVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpc0Nhc2VGaWVsZE9mVHlwZShjYXNlRmllbGQ6IENhc2VGaWVsZCwgdHlwZXM6IEZpZWxkVHlwZUVudW1bXSk6IGJvb2xlYW4ge1xuICAgIGlmICghY2FzZUZpZWxkIHx8ICF0eXBlcykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlcy5zb21lKHR5cGUgPT4gdHlwZSA9PT0gY2FzZUZpZWxkLmZpZWxkX3R5cGUudHlwZSB8fCB0eXBlID09PSBjYXNlRmllbGQuZmllbGRfdHlwZS5pZCk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzTGlua2VkQ2FzZXNDYXNlRmllbGQoY2FzZUZpZWxkOiBDYXNlRmllbGQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gRmllbGRzVXRpbHMuaXNDb21wb25lbnRMYXVuY2hlckNhc2VGaWVsZChjYXNlRmllbGQpICYmXG4gICAgICBjYXNlRmllbGQuaWQgPT09ICdMaW5rZWRDYXNlc0NvbXBvbmVudExhdW5jaGVyJztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY29udGFpbnNMaW5rZWRDYXNlc0Nhc2VGaWVsZChjYXNlRmllbGRzOiBDYXNlRmllbGRbXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjYXNlRmllbGRzPy5zb21lKGNhc2VGaWVsZCA9PiBGaWVsZHNVdGlscy5pc0xpbmtlZENhc2VzQ2FzZUZpZWxkKGNhc2VGaWVsZCkpO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBpc0ZsYWdzRmllbGRUeXBlKGZpZWxkVHlwZTogRmllbGRUeXBlKTogYm9vbGVhbiB7XG4gICAgaWYgKCFmaWVsZFR5cGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBOb3RlOiBUaGlzIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIHRoZSBkdW1teSBmaWVsZCB0eXBlIElEIG9mIFwiQ2FzZUZsYWdcIiBmb3IgdGVzdGluZyBhbmQgdGhlIHJlYWwgZmllbGQgdHlwZVxuICAgIC8vIElEIG9mIFwiRmxhZ3NcIlxuICAgIHJldHVybiAoZmllbGRUeXBlLnR5cGUgPT09ICdDb21wbGV4JyAmJiAoZmllbGRUeXBlLmlkID09PSAnQ2FzZUZsYWcnIHx8IGZpZWxkVHlwZS5pZCA9PT0gJ0ZsYWdzJykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3QgZmxhZ3MgZGF0YSBmcm9tIGEgYENhc2VGaWVsZGAgaW5zdGFuY2UsIHJlY3Vyc2luZyBhbmQgaXRlcmF0aW5nIHRocm91Z2ggc3ViLWZpZWxkcyBvZiBhIENvbXBsZXggZmllbGQgb3JcbiAgICogZWFjaCBmaWVsZCBpbiBhIENvbGxlY3Rpb24gZmllbGQuXG4gICAqXG4gICAqIEBwYXJhbSBmbGFncyBBbiBhcnJheSBmb3IgYWNjdW11bGF0aW5nIGV4dHJhY3RlZCBmbGFncyBkYXRhIGFuZCBkZXJpdmVkIGBGb3JtR3JvdXBgIHBhdGhzXG4gICAqIEBwYXJhbSBjYXNlRmllbGQgQSBgQ2FzZUZpZWxkYCBpbnN0YW5jZSBmcm9tIHdoaWNoIHRvIGV4dHJhY3QgdGhlIGZsYWdzIGRhdGFcbiAgICogQHBhcmFtIHBhdGhUb0ZsYWdzRm9ybUdyb3VwIEEgKGRvdC1kZWxpbWl0ZWQpIHN0cmluZyBmb3IgY29uY2F0ZW5hdGluZyB0aGUgbmFtZSBvZiBlYWNoIGNvbnRyb2wgdGhhdCBmb3JtcyB0aGUgcGF0aFxuICAgKiB0byB0aGUgYEZvcm1Hcm91cGAgZm9yIHRoZSBgRmxhZ3NgIGluc3RhbmNlXG4gICAqIEBwYXJhbSB0b3BMZXZlbENhc2VGaWVsZCBUaGUgdG9wLWxldmVsIGBDYXNlRmllbGRgIHRoYXQgY29udGFpbnMgdGhlIHZhbHVlIHByb3BlcnR5LiBUaGlzIGlzIHJlcXVpcmVkIGJlY2F1c2UgX29ubHlcbiAgICogdG9wLWxldmVsXyBgQ2FzZUZpZWxkYHMgY29udGFpbiBhY3R1YWwgdmFsdWVzIGFuZCBhIHJlZmVyZW5jZSBuZWVkcyB0byBiZSBtYWludGFpbmVkIHRvIHN1Y2ggYSBmaWVsZFxuICAgKiBAcGFyYW0gY3VycmVudFZhbHVlIFRoZSBjdXJyZW50IHZhbHVlIG9iamVjdCBvZiBhIGBDYXNlRmllbGRgIHRoYXQgaXMgYSBzdWItZmllbGQgb2YgYSBub24gcm9vdC1sZXZlbCBDb21wbGV4IGZpZWxkLlxuICAgKiBSZXF1aXJlZCBmb3IgbWFwcGluZyB0aGUgYENhc2VGaWVsZGAgdmFsdWUgdG8gYSBgRmxhZ3NgIG9iamVjdCBpZiBpdCBpcyBhIFwiRmxhZ3NcIiBgQ2FzZUZpZWxkYC4gKEZvciBDb21wbGV4IHR5cGVzLFxuICAgKiBvbmx5IHRoZSBfcm9vdC1sZXZlbF8gYENhc2VGaWVsZGAgY29udGFpbnMgYSB2YWx1ZSBwcm9wZXJ0eSAtIGFsbCBzdWItZmllbGRzLCBpbmNsdWRpbmcgYW55IG5lc3RlZCBDb21wbGV4IGZpZWxkcyxcbiAgICogZG8gKm5vdCogY29udGFpbiBhbnkgdmFsdWVzIHRoZW1zZWx2ZXMuKVxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBgRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aGAsIGVhY2ggaW5zdGFuY2UgY29tcHJpc2luZyBhIGBGbGFnc2Agb2JqZWN0IGRlcml2ZWQgZnJvbSBhIGBDYXNlRmllbGRgXG4gICAqIG9mIHR5cGUgXCJGbGFnc1wiLCBhbmQgdGhlIGRvdC1kZWxpbWl0ZWQgcGF0aCBzdHJpbmcgdG8gdGhlIGNvcnJlc3BvbmRpbmcgYEZvcm1Hcm91cGBcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZXh0cmFjdEZsYWdzRGF0YUZyb21DYXNlRmllbGQoZmxhZ3M6IEZsYWdzV2l0aEZvcm1Hcm91cFBhdGhbXSwgY2FzZUZpZWxkOiBDYXNlRmllbGQsXG4gICAgcGF0aFRvRmxhZ3NGb3JtR3JvdXA6IHN0cmluZywgdG9wTGV2ZWxDYXNlRmllbGQ6IENhc2VGaWVsZCwgY3VycmVudFZhbHVlPzogb2JqZWN0KTogRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aFtdIHtcbiAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IGNhc2VGaWVsZC5maWVsZF90eXBlO1xuICAgICAgc3dpdGNoIChmaWVsZFR5cGUudHlwZSkge1xuICAgICAgICBjYXNlICdDb21wbGV4JzpcbiAgICAgICAgICAvLyBJZiB0aGUgZmllbGQgaXMgYSBGbGFncyBDYXNlRmllbGQgKHRoZXNlIGFyZSBpbXBsZW1lbnRlZCBhcyBDb21wbGV4IHR5cGVzKSwgaXQgY2FuIGJlIG1hcHBlZCB0byBhIEZsYWdzXG4gICAgICAgICAgLy8gb2JqZWN0IGltbWVkaWF0ZWx5XG4gICAgICAgICAgaWYgKEZpZWxkc1V0aWxzLmlzRmxhZ3NDYXNlRmllbGQoY2FzZUZpZWxkKSkge1xuICAgICAgICAgICAgLy8gSWYgdGhlIEZsYWdzIENhc2VGaWVsZCBoYXMgYSB2YWx1ZSwgaXQgaXMgYSByb290LWxldmVsIENvbXBsZXggZmllbGQ7IGlmIGl0IGRvZXMgbm90LCBpdCBpcyBhIEZsYWdzXG4gICAgICAgICAgICAvLyBDYXNlRmllbGQgdGhhdCBpcyBhIHN1Yi1maWVsZCB3aXRoaW4gYW5vdGhlciBDb21wbGV4IGZpZWxkLCBzbyB1c2UgdGhlIGN1cnJlbnRWYWx1ZSB2YWx1ZSAoaWYgYW55KVxuICAgICAgICAgICAgLy8gaW5zdGVhZC4gVGhlIGV4Y2VwdGlvbiB0byB0aGlzIGlzIHRoZSBcImNhc2VGbGFnc1wiIEZsYWdzIENhc2VGaWVsZCwgd2hpY2ggd2lsbCBoYXZlIGFuIGVtcHR5IG9iamVjdCB2YWx1ZVxuICAgICAgICAgICAgLy8gaW5pdGlhbGx5LCBiZWNhdXNlIG5vIHBhcnR5IG5hbWUgaXMgcmVxdWlyZWRcbiAgICAgICAgICAgIGlmIChjYXNlRmllbGQudmFsdWUgJiYgRmllbGRzVXRpbHMuaXNOb25FbXB0eU9iamVjdChjYXNlRmllbGQudmFsdWUpIHx8XG4gICAgICAgICAgICAgIGNhc2VGaWVsZC5pZCA9PT0gdGhpcy5jYXNlTGV2ZWxDYXNlRmxhZ3NGaWVsZElkKSB7XG4gICAgICAgICAgICAgIGZsYWdzLnB1c2godGhpcy5tYXBDYXNlRmllbGRUb0ZsYWdzV2l0aEZvcm1Hcm91cFBhdGhPYmplY3QoY2FzZUZpZWxkLCBwYXRoVG9GbGFnc0Zvcm1Hcm91cCkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50VmFsdWUgJiYgRmllbGRzVXRpbHMuaXNOb25FbXB0eU9iamVjdChjdXJyZW50VmFsdWUpKSB7XG4gICAgICAgICAgICAgIHBhdGhUb0ZsYWdzRm9ybUdyb3VwICs9IGAuJHtjYXNlRmllbGQuaWR9YDtcbiAgICAgICAgICAgICAgZmxhZ3MucHVzaCh0aGlzLm1hcFZhbHVlVG9GbGFnc1dpdGhGb3JtR3JvdXBQYXRoT2JqZWN0KFxuICAgICAgICAgICAgICAgIGNhc2VGaWVsZC5pZCwgY3VycmVudFZhbHVlLCBwYXRoVG9GbGFnc0Zvcm1Hcm91cCwgdG9wTGV2ZWxDYXNlRmllbGQpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkVHlwZS5jb21wbGV4X2ZpZWxkcykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjYXNlRmllbGQudmFsdWUgPyBjYXNlRmllbGQudmFsdWUgOiBjdXJyZW50VmFsdWU7XG4gICAgICAgICAgICBpZiAodmFsdWUgJiYgRmllbGRzVXRpbHMuaXNOb25FbXB0eU9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgZmxhZ3MgPSBmaWVsZFR5cGUuY29tcGxleF9maWVsZHMucmVkdWNlKChmbGFnc09mQ29tcGxleEZpZWxkLCBzdWJGaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmV4dHJhY3RGbGFnc0RhdGFGcm9tQ2FzZUZpZWxkKFxuICAgICAgICAgICAgICAgICAgZmxhZ3NPZkNvbXBsZXhGaWVsZCwgc3ViRmllbGQsIHBhdGhUb0ZsYWdzRm9ybUdyb3VwLCB0b3BMZXZlbENhc2VGaWVsZCwgdmFsdWVbc3ViRmllbGQuaWRdKTtcbiAgICAgICAgICAgICAgfSwgZmxhZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgLy8gRm9yIGEgQ29sbGVjdGlvbiBmaWVsZCwgdGhlIHZhbHVlcyBhcmUgc3RvcmVkIGRpcmVjdGx5IGFzIGtleS12YWx1ZSBwYWlycyBpbiB0aGUgQ2FzZUZpZWxkJ3MgdmFsdWUgcHJvcGVydHlcbiAgICAgICAgLy8gYXMgYW4gYXJyYXksIHVubGVzcyB0aGUgY29sbGVjdGlvbiBpcyBhIHN1Yi1maWVsZCBvZiBhIENvbXBsZXggdHlwZSAtIHN1Yi1maWVsZHMgbmV2ZXIgY29udGFpbiB2YWx1ZXNcbiAgICAgICAgY2FzZSAnQ29sbGVjdGlvbic6XG4gICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGNvbGxlY3Rpb24gb2YgRmxhZ3MgQ2FzZUZpZWxkcywgdGhlc2UgY2FuIGJlIG1hcHBlZCB0byBGbGFncyBvYmplY3RzIGltbWVkaWF0ZWx5XG4gICAgICAgICAgaWYgKEZpZWxkc1V0aWxzLmlzRmxhZ3NGaWVsZFR5cGUoZmllbGRUeXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZSkpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBDb2xsZWN0aW9uIENhc2VGaWVsZCBoYXMgYSB2YWx1ZSAoYW4gYXJyYXkpLCBpdCBpcyBhIHJvb3QtbGV2ZWwgQ29sbGVjdGlvbiBmaWVsZDsgaWYgaXQgZG9lcyBub3QsXG4gICAgICAgICAgICAvLyBpdCBpcyBhIENvbGxlY3Rpb24gQ2FzZUZpZWxkIHRoYXQgaXMgYSBzdWItZmllbGQgd2l0aGluIGEgQ29tcGxleCBmaWVsZCwgc28gdXNlIHRoZSBjdXJyZW50VmFsdWUgdmFsdWVcbiAgICAgICAgICAgIC8vIChpZiBhbnkpIGluc3RlYWRcbiAgICAgICAgICAgIGNvbnN0IHBhdGhGcmFnbWVudCA9IHBhdGhUb0ZsYWdzRm9ybUdyb3VwICs9ICcuaW5kZXgudmFsdWUnO1xuICAgICAgICAgICAgaWYgKGNhc2VGaWVsZC52YWx1ZSkge1xuICAgICAgICAgICAgICBjYXNlRmllbGQudmFsdWUuZm9yRWFjaCgoaXRlbTogeyBpZDogc3RyaW5nOyB2YWx1ZTogb2JqZWN0OyB9LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQXQgZWFjaCBpdGVyYXRpb24sIHJlcGxhY2UgdGhlIFwiaW5kZXhcIiBwbGFjZWhvbGRlciB3aXRoIHRoZSBhY3R1YWwgaW5kZXhcbiAgICAgICAgICAgICAgICBwYXRoVG9GbGFnc0Zvcm1Hcm91cCA9IHBhdGhGcmFnbWVudC5yZXBsYWNlKCdpbmRleCcsIGluZGV4LnRvU3RyaW5nKDEwKSk7XG4gICAgICAgICAgICAgICAgZmxhZ3MucHVzaChcbiAgICAgICAgICAgICAgICAgIHRoaXMubWFwVmFsdWVUb0ZsYWdzV2l0aEZvcm1Hcm91cFBhdGhPYmplY3QoaXRlbS5pZCwgaXRlbS52YWx1ZSwgcGF0aFRvRmxhZ3NGb3JtR3JvdXAsIGNhc2VGaWVsZCkpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICAgIChjdXJyZW50VmFsdWUgYXMgW10pLmZvckVhY2goKGl0ZW06IHsgaWQ6IHN0cmluZzsgdmFsdWU6IG9iamVjdDsgfSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIHBhdGhUb0ZsYWdzRm9ybUdyb3VwID0gcGF0aEZyYWdtZW50LnJlcGxhY2UoJ2luZGV4JywgaW5kZXgudG9TdHJpbmcoMTApKTtcbiAgICAgICAgICAgICAgICBmbGFncy5wdXNoKFxuICAgICAgICAgICAgICAgICAgdGhpcy5tYXBWYWx1ZVRvRmxhZ3NXaXRoRm9ybUdyb3VwUGF0aE9iamVjdChpdGVtLmlkLCBpdGVtLnZhbHVlLCBwYXRoVG9GbGFnc0Zvcm1Hcm91cCwgdG9wTGV2ZWxDYXNlRmllbGQpKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChmaWVsZFR5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLnR5cGUgPT09ICdDb21wbGV4JyAmJiBmaWVsZFR5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzKSB7XG4gICAgICAgICAgICBpZiAoY2FzZUZpZWxkLnZhbHVlKSB7XG4gICAgICAgICAgICAgIC8vIFBlcmZvcm0gYSByZWR1Y3Rpb24gb3ZlciBlYWNoIENvbXBsZXggZmllbGQncyBzdWItZmllbGRzIChzaW1pbGFyIHRvIHdoYXQgaXMgZG9uZSBhYm92ZSBmb3Igbm9uLUZsYWdzXG4gICAgICAgICAgICAgIC8vIENvbXBsZXggZmllbGRzKVxuICAgICAgICAgICAgICAvLyAoQ2Fubm90IGp1c3QgY2FsbCB0aGlzIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5IGZvciBlYWNoIENvbXBsZXggZmllbGQgaW4gdGhlIGNvbGxlY3Rpb24gYmVjYXVzZSB0aGUgQ2FzZUZpZWxkXG4gICAgICAgICAgICAgIC8vIGZvciBlYWNoIG9uZSBpcyBub3QgcGFydCBvZiB0aGUgY29sbGVjdGlvbilcbiAgICAgICAgICAgICAgY29uc3QgcGF0aEZyYWdtZW50ID0gcGF0aFRvRmxhZ3NGb3JtR3JvdXAgKz0gJy5pbmRleC52YWx1ZSc7XG4gICAgICAgICAgICAgIGNhc2VGaWVsZC52YWx1ZS5mb3JFYWNoKChpdGVtOiB7IGlkOiBzdHJpbmc7IHZhbHVlOiBvYmplY3Q7IH0sIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBBdCBlYWNoIGl0ZXJhdGlvbiwgcmVwbGFjZSB0aGUgXCJpbmRleFwiIHBsYWNlaG9sZGVyIHdpdGggdGhlIGFjdHVhbCBpbmRleFxuICAgICAgICAgICAgICAgIHBhdGhUb0ZsYWdzRm9ybUdyb3VwID0gcGF0aEZyYWdtZW50LnJlcGxhY2UoJ2luZGV4JywgaW5kZXgudG9TdHJpbmcoMTApKTtcbiAgICAgICAgICAgICAgICBmbGFncyA9IGZpZWxkVHlwZS5jb2xsZWN0aW9uX2ZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMucmVkdWNlKChmbGFnc09mQ29tcGxleEZpZWxkLCBzdWJGaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXh0cmFjdEZsYWdzRGF0YUZyb21DYXNlRmllbGQoXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzT2ZDb21wbGV4RmllbGQsIHN1YkZpZWxkLCBwYXRoVG9GbGFnc0Zvcm1Hcm91cCwgdG9wTGV2ZWxDYXNlRmllbGQsIGl0ZW0udmFsdWVbc3ViRmllbGQuaWRdKTtcbiAgICAgICAgICAgICAgICB9LCBmbGFncyk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAvLyBJZ25vcmUgYWxsIG90aGVyIGZpZWxkIHR5cGVzXG4gICAgICB9XG4gICAgICByZXR1cm4gZmxhZ3M7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBtYXBDYXNlRmllbGRUb0ZsYWdzV2l0aEZvcm1Hcm91cFBhdGhPYmplY3QoY2FzZUZpZWxkOiBDYXNlRmllbGQsXG4gICAgcGF0aFRvRmxhZ3NGb3JtR3JvdXA6IHN0cmluZyk6IEZsYWdzV2l0aEZvcm1Hcm91cFBhdGgge1xuICAgICAgcmV0dXJuIHRoaXMubWFwVmFsdWVUb0ZsYWdzV2l0aEZvcm1Hcm91cFBhdGhPYmplY3QoY2FzZUZpZWxkLmlkLCBjYXNlRmllbGQudmFsdWUsIHBhdGhUb0ZsYWdzRm9ybUdyb3VwLCBjYXNlRmllbGQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgbWFwVmFsdWVUb0ZsYWdzV2l0aEZvcm1Hcm91cFBhdGhPYmplY3QoaWQ6IHN0cmluZywgdmFsdWU6IG9iamVjdCxcbiAgICBwYXRoVG9GbGFnc0Zvcm1Hcm91cDogc3RyaW5nLCBjYXNlRmllbGQ6IENhc2VGaWVsZCk6IEZsYWdzV2l0aEZvcm1Hcm91cFBhdGgge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmxhZ3M6IHtcbiAgICAgICAgICBmbGFnc0Nhc2VGaWVsZElkOiBpZCxcbiAgICAgICAgICBwYXJ0eU5hbWU6IHZhbHVlID8gdmFsdWVbJ3BhcnR5TmFtZSddIDogbnVsbCxcbiAgICAgICAgICByb2xlT25DYXNlOiB2YWx1ZSA/IHZhbHVlWydyb2xlT25DYXNlJ10gOiBudWxsLFxuICAgICAgICAgIGRldGFpbHM6IHZhbHVlICYmIHZhbHVlWydkZXRhaWxzJ10gJiYgdmFsdWVbJ2RldGFpbHMnXS5sZW5ndGggPiAwXG4gICAgICAgICAgICA/ICh2YWx1ZVsnZGV0YWlscyddIGFzIGFueVtdKS5tYXAoZGV0YWlsID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIC4uLk9iamVjdC5rZXlzKGRldGFpbC52YWx1ZSkubWFwKGsgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBpZCBwcm9wZXJ0eSBzZXQgYmVsb3cgd2lsbCBiZSBudWxsIGZvciBhIG5ldyBjYXNlIGZsYWcsIGFuZCBhIHVuaXF1ZSBpZCByZXR1cm5lZCBmcm9tIENDRCB3aGVuXG4gICAgICAgICAgICAgICAgLy8gdXBkYXRpbmcgYW4gZXhpc3RpbmcgZmxhZ1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoaykge1xuICAgICAgICAgICAgICAgICAgLy8gVGhlc2UgdHdvIGZpZWxkcyBhcmUgZGF0ZS10aW1lIGZpZWxkc1xuICAgICAgICAgICAgICAgICAgY2FzZSAnZGF0ZVRpbWVNb2RpZmllZCc6XG4gICAgICAgICAgICAgICAgICBjYXNlICdkYXRlVGltZUNyZWF0ZWQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1trXTogZGV0YWlsLnZhbHVlW2tdID8gbmV3IERhdGUoZGV0YWlsLnZhbHVlW2tdKSA6IG51bGwsIGlkOiBkZXRhaWwuaWR9O1xuICAgICAgICAgICAgICAgICAgLy8gVGhpcyBmaWVsZCBpcyBhIFwieWVzL25vXCIgZmllbGRcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ2hlYXJpbmdSZWxldmFudCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkZXRhaWwudmFsdWVba10udG9VcHBlckNhc2UoKSA9PT0gJ1lFUycgPyB7W2tdOiB0cnVlLCBpZDogZGV0YWlsLmlkfSA6IHtba106IGZhbHNlLCBpZDogZGV0YWlsLmlkfTtcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7W2tdOiBkZXRhaWwudmFsdWVba10sIGlkOiBkZXRhaWwuaWR9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfSkgYXMgRmxhZ0RldGFpbFtdXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgICAgfSxcbiAgICAgICAgcGF0aFRvRmxhZ3NGb3JtR3JvdXAsXG4gICAgICAgIGNhc2VGaWVsZFxuICAgICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3VudCBhY3RpdmUgZmxhZ3MgaW4gYSBgQ2FzZUZpZWxkYCBpbnN0YW5jZSwgcmVjdXJzaW5nIGFuZCBpdGVyYXRpbmcgdGhyb3VnaCBzdWItZmllbGRzIG9mIGEgQ29tcGxleCBmaWVsZCBvciBlYWNoXG4gICAqIGZpZWxkIGluIGEgQ29sbGVjdGlvbiBmaWVsZC5cbiAgICpcbiAgICogQHBhcmFtIGFjdGl2ZUNvdW50IEFuIGFjY3VtdWxhdGlvbiBvZiB0aGUgdG90YWwgbnVtYmVyIG9mIGFjdGl2ZSBmbGFnc1xuICAgKiBAcGFyYW0gY2FzZUZpZWxkIEEgYENhc2VGaWVsZGAgaW5zdGFuY2UgZm9yIHdoaWNoIHRvIGNvdW50IHRoZSBhY3RpdmUgZmxhZ3NcbiAgICogQHBhcmFtIGN1cnJlbnRWYWx1ZSBUaGUgY3VycmVudCB2YWx1ZSBvYmplY3Qgb2YgYSBgQ2FzZUZpZWxkYCB0aGF0IGlzIGEgc3ViLWZpZWxkIG9mIGEgbm9uIHJvb3QtbGV2ZWwgQ29tcGxleCBmaWVsZC5cbiAgICogKEZvciBDb21wbGV4IHR5cGVzLCBvbmx5IHRoZSBfcm9vdC1sZXZlbF8gYENhc2VGaWVsZGAgY29udGFpbnMgYSB2YWx1ZSBwcm9wZXJ0eSAtIGFsbCBzdWItZmllbGRzLCBpbmNsdWRpbmcgYW55XG4gICAqIG5lc3RlZCBDb21wbGV4IGZpZWxkcywgZG8gKm5vdCogY29udGFpbiBhbnkgdmFsdWVzIHRoZW1zZWx2ZXMuKVxuICAgKiBAcmV0dXJucyBUaGUgY291bnQgb2YgYWN0aXZlIGZsYWdzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvdW50QWN0aXZlRmxhZ3NJbkNhc2VGaWVsZChhY3RpdmVDb3VudDogbnVtYmVyLCBjYXNlRmllbGQ6IENhc2VGaWVsZCwgY3VycmVudFZhbHVlPzogb2JqZWN0KTogbnVtYmVyIHtcbiAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IGNhc2VGaWVsZC5maWVsZF90eXBlO1xuICAgICAgc3dpdGNoIChmaWVsZFR5cGUudHlwZSkge1xuICAgICAgICBjYXNlICdDb21wbGV4JzpcbiAgICAgICAgICBpZiAoRmllbGRzVXRpbHMuaXNGbGFnc0Nhc2VGaWVsZChjYXNlRmllbGQpKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgRmxhZ3MgQ2FzZUZpZWxkIGhhcyBhIHZhbHVlLCBpdCBpcyBhIHJvb3QtbGV2ZWwgQ29tcGxleCBmaWVsZDsgaWYgaXQgZG9lcyBub3QsIGl0IGlzIGEgRmxhZ3NcbiAgICAgICAgICAgIC8vIENhc2VGaWVsZCB0aGF0IGlzIGEgc3ViLWZpZWxkIHdpdGhpbiBhbm90aGVyIENvbXBsZXggZmllbGQsIHNvIHVzZSB0aGUgY3VycmVudFZhbHVlIHZhbHVlIChpZiBhbnkpIGluc3RlYWRcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY2FzZUZpZWxkLnZhbHVlID8gY2FzZUZpZWxkLnZhbHVlIDogY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgaWYgKHZhbHVlICYmIEZpZWxkc1V0aWxzLmlzTm9uRW1wdHlPYmplY3QodmFsdWUpICYmIHZhbHVlLmRldGFpbHMpIHtcbiAgICAgICAgICAgICAgYWN0aXZlQ291bnQgPSB2YWx1ZS5kZXRhaWxzLnJlZHVjZShcbiAgICAgICAgICAgICAgICAoY291bnQsIGRldGFpbCkgPT4gZGV0YWlsLnZhbHVlLnN0YXR1cyA9PT0gQ2FzZUZsYWdTdGF0dXMuQUNUSVZFID8gY291bnQgKyAxIDogY291bnQsXG4gICAgICAgICAgICAgICAgYWN0aXZlQ291bnRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGZpZWxkVHlwZS5jb21wbGV4X2ZpZWxkcykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjYXNlRmllbGQudmFsdWUgPyBjYXNlRmllbGQudmFsdWUgOiBjdXJyZW50VmFsdWU7XG4gICAgICAgICAgICBpZiAodmFsdWUgJiYgRmllbGRzVXRpbHMuaXNOb25FbXB0eU9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgYWN0aXZlQ291bnQgPSBmaWVsZFR5cGUuY29tcGxleF9maWVsZHMucmVkdWNlKChhY3RpdmVGbGFnc0NvdW50T2ZDb21wbGV4RmllbGQsIHN1YkZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY291bnRBY3RpdmVGbGFnc0luQ2FzZUZpZWxkKFxuICAgICAgICAgICAgICAgICAgYWN0aXZlRmxhZ3NDb3VudE9mQ29tcGxleEZpZWxkLFxuICAgICAgICAgICAgICAgICAgc3ViRmllbGQsXG4gICAgICAgICAgICAgICAgICB2YWx1ZVtzdWJGaWVsZC5pZF1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9LCBhY3RpdmVDb3VudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICAvLyBGb3IgYSBDb2xsZWN0aW9uIGZpZWxkLCB0aGUgdmFsdWVzIGFyZSBzdG9yZWQgZGlyZWN0bHkgYXMga2V5LXZhbHVlIHBhaXJzIGluIHRoZSBDYXNlRmllbGQncyB2YWx1ZSBwcm9wZXJ0eVxuICAgICAgICAvLyBhcyBhbiBhcnJheSwgdW5sZXNzIHRoZSBjb2xsZWN0aW9uIGlzIGEgc3ViLWZpZWxkIG9mIGEgQ29tcGxleCB0eXBlIC0gc3ViLWZpZWxkcyBuZXZlciBjb250YWluIHZhbHVlc1xuICAgICAgICBjYXNlICdDb2xsZWN0aW9uJzpcbiAgICAgICAgICBpZiAoRmllbGRzVXRpbHMuaXNGbGFnc0ZpZWxkVHlwZShmaWVsZFR5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlKSkge1xuICAgICAgICAgICAgLy8gSWYgdGhlIENvbGxlY3Rpb24gQ2FzZUZpZWxkIGhhcyBhIHZhbHVlIChhbiBhcnJheSksIGl0IGlzIGEgcm9vdC1sZXZlbCBDb2xsZWN0aW9uIGZpZWxkOyBpZiBpdCBkb2VzIG5vdCxcbiAgICAgICAgICAgIC8vIGl0IGlzIGEgQ29sbGVjdGlvbiBDYXNlRmllbGQgdGhhdCBpcyBhIHN1Yi1maWVsZCB3aXRoaW4gYSBDb21wbGV4IGZpZWxkLCBzbyB1c2UgdGhlIGN1cnJlbnRWYWx1ZSB2YWx1ZVxuICAgICAgICAgICAgLy8gKGlmIGFueSkgaW5zdGVhZFxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjYXNlRmllbGQudmFsdWUgPyBjYXNlRmllbGQudmFsdWUgOiBjdXJyZW50VmFsdWU7XG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgdmFsdWUuZm9yRWFjaCgoaXRlbTogeyBpZDogc3RyaW5nOyB2YWx1ZTogb2JqZWN0OyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0udmFsdWVbJ2RldGFpbHMnXSkge1xuICAgICAgICAgICAgICAgICAgYWN0aXZlQ291bnQgPSBpdGVtLnZhbHVlWydkZXRhaWxzJ10ucmVkdWNlKFxuICAgICAgICAgICAgICAgICAgICAoY291bnQsIGRldGFpbCkgPT4gZGV0YWlsLnZhbHVlLnN0YXR1cyA9PT0gQ2FzZUZsYWdTdGF0dXMuQUNUSVZFID8gY291bnQgKyAxIDogY291bnQsXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZUNvdW50XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChmaWVsZFR5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLnR5cGUgPT09ICdDb21wbGV4JyAmJiBmaWVsZFR5cGUuY29sbGVjdGlvbl9maWVsZF90eXBlLmNvbXBsZXhfZmllbGRzKSB7XG4gICAgICAgICAgICBpZiAoY2FzZUZpZWxkLnZhbHVlKSB7XG4gICAgICAgICAgICAgIC8vIFBlcmZvcm0gYSByZWR1Y3Rpb24gb3ZlciBlYWNoIENvbXBsZXggZmllbGQncyBzdWItZmllbGRzIChzaW1pbGFyIHRvIHdoYXQgaXMgZG9uZSBhYm92ZSBmb3Igbm9uLUZsYWdzXG4gICAgICAgICAgICAgIC8vIENvbXBsZXggZmllbGRzKVxuICAgICAgICAgICAgICAvLyAoQ2Fubm90IGp1c3QgY2FsbCB0aGlzIGZ1bmN0aW9uIHJlY3Vyc2l2ZWx5IGZvciBlYWNoIENvbXBsZXggZmllbGQgaW4gdGhlIGNvbGxlY3Rpb24gYmVjYXVzZSB0aGUgQ2FzZUZpZWxkXG4gICAgICAgICAgICAgIC8vIGZvciBlYWNoIG9uZSBpcyBub3QgcGFydCBvZiB0aGUgY29sbGVjdGlvbilcbiAgICAgICAgICAgICAgY2FzZUZpZWxkLnZhbHVlLmZvckVhY2goKGl0ZW06IHsgaWQ6IHN0cmluZzsgdmFsdWU6IG9iamVjdDsgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGFjdGl2ZUNvdW50ID0gZmllbGRUeXBlLmNvbGxlY3Rpb25fZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcy5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAoYWN0aXZlRmxhZ3NDb3VudE9mQ29tcGxleEZpZWxkLCBzdWJGaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jb3VudEFjdGl2ZUZsYWdzSW5DYXNlRmllbGQoYWN0aXZlRmxhZ3NDb3VudE9mQ29tcGxleEZpZWxkLCBzdWJGaWVsZCwgaXRlbS52YWx1ZVtzdWJGaWVsZC5pZF0pO1xuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGFjdGl2ZUNvdW50XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIC8vIElnbm9yZSBhbGwgb3RoZXIgZmllbGQgdHlwZXNcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY3RpdmVDb3VudDtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0VmFsaWRhdGlvbkVycm9yTWVzc2FnZUZvckZsYWdMYXVuY2hlckNhc2VGaWVsZChjYXNlRmllbGQ6IENhc2VGaWVsZCk6IHN0cmluZyB7XG4gICAgc3dpdGNoKGNhc2VGaWVsZC5kaXNwbGF5X2NvbnRleHRfcGFyYW1ldGVyKSB7XG4gICAgICBjYXNlICcjQVJHVU1FTlQoQ1JFQVRFKSc6XG4gICAgICAgIHJldHVybiAnUGxlYXNlIHNlbGVjdCBOZXh0IHRvIGNvbXBsZXRlIHRoZSBjcmVhdGlvbiBvZiB0aGUgY2FzZSBmbGFnJztcbiAgICAgIGNhc2UgJyNBUkdVTUVOVChDUkVBVEUsRVhURVJOQUwpJzpcbiAgICAgICAgcmV0dXJuICdQbGVhc2Ugc2VsZWN0IE5leHQgdG8gY29tcGxldGUgdGhlIGNyZWF0aW9uIG9mIHRoZSBzdXBwb3J0IHJlcXVlc3QnO1xuICAgICAgY2FzZSAnI0FSR1VNRU5UKFVQREFURSknOlxuICAgICAgICByZXR1cm4gJ1BsZWFzZSBzZWxlY3QgTmV4dCB0byBjb21wbGV0ZSB0aGUgdXBkYXRlIG9mIHRoZSBzZWxlY3RlZCBjYXNlIGZsYWcnO1xuICAgICAgY2FzZSAnI0FSR1VNRU5UKFVQREFURSxFWFRFUk5BTCknOlxuICAgICAgICByZXR1cm4gJ1BsZWFzZSBzZWxlY3QgTmV4dCB0byBjb21wbGV0ZSB0aGUgdXBkYXRlIG9mIHRoZSBzZWxlY3RlZCBzdXBwb3J0IHJlcXVlc3QnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBidWlsZENhblNob3dQcmVkaWNhdGUoZXZlbnRUcmlnZ2VyOiBDYXNlRXZlbnRUcmlnZ2VyLCBmb3JtOiBhbnkpOiBQcmVkaWNhdGU8V2l6YXJkUGFnZT4ge1xuICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHRoaXMuZ2V0Q3VycmVudEV2ZW50U3RhdGUoZXZlbnRUcmlnZ2VyLCBmb3JtKTtcbiAgICByZXR1cm4gKHBhZ2U6IFdpemFyZFBhZ2UpOiBib29sZWFuID0+IHtcbiAgICAgIHJldHVybiBwYWdlLnBhcnNlZFNob3dDb25kaXRpb24ubWF0Y2goY3VycmVudFN0YXRlKTtcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGdldEN1cnJlbnRFdmVudFN0YXRlKGV2ZW50VHJpZ2dlcjogeyBjYXNlX2ZpZWxkczogQ2FzZUZpZWxkW10gfSwgZm9ybTogRm9ybUdyb3VwKTogb2JqZWN0IHtcbiAgICByZXR1cm4gdGhpcy5tZXJnZUNhc2VGaWVsZHNBbmRGb3JtRmllbGRzKGV2ZW50VHJpZ2dlci5jYXNlX2ZpZWxkcywgZm9ybS5jb250cm9sc1snZGF0YSddLnZhbHVlKTtcbiAgfVxuXG4gIHB1YmxpYyBjbG9uZUNhc2VGaWVsZChvYmo6IGFueSk6IENhc2VGaWVsZCB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IENhc2VGaWVsZCgpLCBvYmopO1xuICB9XG5cbiAgcHVibGljIG1lcmdlQ2FzZUZpZWxkc0FuZEZvcm1GaWVsZHMoY2FzZUZpZWxkczogQ2FzZUZpZWxkW10sIGZvcm1GaWVsZHM6IG9iamVjdCk6IG9iamVjdCB7XG4gICAgcmV0dXJuIHRoaXMubWVyZ2VGaWVsZHMoY2FzZUZpZWxkcywgZm9ybUZpZWxkcywgRmllbGRzVXRpbHMuREVGQVVMVF9NRVJHRV9GVU5DVElPTik7XG4gIH1cblxuICBwdWJsaWMgbWVyZ2VMYWJlbENhc2VGaWVsZHNBbmRGb3JtRmllbGRzKGNhc2VGaWVsZHM6IENhc2VGaWVsZFtdLCBmb3JtRmllbGRzOiBvYmplY3QpOiBvYmplY3Qge1xuICAgIHJldHVybiB0aGlzLm1lcmdlRmllbGRzKGNhc2VGaWVsZHMsIGZvcm1GaWVsZHMsIEZpZWxkc1V0aWxzLkxBQkVMX01FUkdFX0ZVTkNUSU9OKTtcbiAgfVxuXG4gIHB1YmxpYyBjb250cm9sSXRlcmF0b3IoXG4gICAgYUNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCxcbiAgICBmb3JtQXJyYXlGbjogKGFycmF5OiBGb3JtQXJyYXkpID0+IHZvaWQsXG4gICAgZm9ybUdyb3VwRm46IChncm91cDogRm9ybUdyb3VwKSA9PiB2b2lkLFxuICAgIGNvbnRyb2xGbjogKGNvbnRyb2w6IEZvcm1Db250cm9sKSA9PiB2b2lkXG4gICk6IHZvaWQge1xuICAgIGlmIChhQ29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkgeyAvLyBXZSdyZSBpbiBhIGNvbGxlY3Rpb25cbiAgICAgIGZvcm1BcnJheUZuKGFDb250cm9sKTtcbiAgICB9IGVsc2UgaWYgKGFDb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7IC8vIFdlJ3JlIGluIGEgY29tcGxleCB0eXBlLlxuICAgICAgZm9ybUdyb3VwRm4oYUNvbnRyb2wpO1xuICAgIH0gZWxzZSBpZiAoYUNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCkgeyAvLyBGb3JtQ29udHJvbFxuICAgICAgY29udHJvbEZuKGFDb250cm9sKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1lcmdlRmllbGRzKGNhc2VGaWVsZHM6IENhc2VGaWVsZFtdLCBmb3JtRmllbGRzOiBvYmplY3QsIG1lcmdlRnVuY3Rpb246IChmaWVsZDogQ2FzZUZpZWxkLCByZXN1bHQ6IG9iamVjdCkgPT4gdm9pZCk6IG9iamVjdCB7XG4gICAgY29uc3QgcmVzdWx0OiBvYmplY3QgPSBGaWVsZHNVdGlscy5jbG9uZU9iamVjdChmb3JtRmllbGRzKTtcbiAgICBjYXNlRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgbWVyZ2VGdW5jdGlvbihmaWVsZCwgcmVzdWx0KTtcbiAgICAgIGlmIChmaWVsZC5maWVsZF90eXBlICYmIGZpZWxkLmZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMgJiYgZmllbGQuZmllbGRfdHlwZS5jb21wbGV4X2ZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlc3VsdFtmaWVsZC5pZF0gPSB0aGlzLm1lcmdlRmllbGRzKGZpZWxkLmZpZWxkX3R5cGUuY29tcGxleF9maWVsZHMsIHJlc3VsdFtmaWVsZC5pZF0sIG1lcmdlRnVuY3Rpb24pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cbiJdfQ==
@@ -9,7 +9,9 @@ export class RequestOptionsBuilder {
9
9
  * @param value The value to be assessed.
10
10
  */
11
11
  static includeParam(value) {
12
+ /* istanbul ignore else */
12
13
  if (value) {
14
+ /* istanbul ignore else */
13
15
  if (typeof (value) === 'string') {
14
16
  return value.trim().length > 0;
15
17
  }
@@ -21,9 +23,11 @@ export class RequestOptionsBuilder {
21
23
  // TODO: This should probably be the now built-in URLSearchParams but it
22
24
  // requires a bigger refactor and there are bigger fish to fry right now.
23
25
  let params = new HttpParams();
26
+ /* istanbul ignore else */
24
27
  if (view) {
25
28
  params = params.set('view', view);
26
29
  }
30
+ /* istanbul ignore else */
27
31
  if (metaCriteria) {
28
32
  for (const criterion of Object.keys(metaCriteria)) {
29
33
  // EUI-3490. Make sure the parameter should be included for adding it.
@@ -33,8 +37,10 @@ export class RequestOptionsBuilder {
33
37
  }
34
38
  }
35
39
  }
40
+ /* istanbul ignore else */
36
41
  if (caseCriteria) {
37
42
  for (const criterion of Object.keys(caseCriteria)) {
43
+ /* istanbul ignore else */
38
44
  if (RequestOptionsBuilder.includeParam(caseCriteria[criterion])) {
39
45
  const key = RequestOptionsBuilder.FIELD_PREFIX + criterion;
40
46
  const value = caseCriteria[criterion].trim ? caseCriteria[criterion].trim() : caseCriteria[criterion];
@@ -52,4 +58,4 @@ RequestOptionsBuilder.ɵprov = i0.ɵɵdefineInjectable({ token: RequestOptionsBu
52
58
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(RequestOptionsBuilder, [{
53
59
  type: Injectable
54
60
  }], null, null); })();
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC5vcHRpb25zLmJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2QtY2FzZS11aS10b29sa2l0L3NyYy9saWIvc2hhcmVkL3NlcnZpY2VzL3JlcXVlc3QvcmVxdWVzdC5vcHRpb25zLmJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSzNDLE1BQU0sT0FBTyxxQkFBcUI7SUFJOUI7Ozs7O09BS0c7SUFDSyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQVU7UUFDcEMsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLE9BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxRQUFRLEVBQUU7Z0JBQzlCLE9BQU8sS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7YUFDaEM7WUFDRCxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU0sWUFBWSxDQUFDLFlBQW9CLEVBQUUsWUFBb0IsRUFBRSxJQUFpQjtRQUMvRSx3RUFBd0U7UUFDeEUseUVBQXlFO1FBQ3pFLElBQUksTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFFOUIsSUFBSSxJQUFJLEVBQUU7WUFDUixNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDbkM7UUFFRCxJQUFJLFlBQVksRUFBRTtZQUNoQixLQUFLLE1BQU0sU0FBUyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQ2pELHNFQUFzRTtnQkFDdEUsaUVBQWlFO2dCQUNqRSxJQUFJLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRTtvQkFDL0QsTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2lCQUN6RDthQUNGO1NBQ0Y7UUFFRCxJQUFJLFlBQVksRUFBRTtZQUNoQixLQUFLLE1BQU0sU0FBUyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQ2pELElBQUkscUJBQXFCLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFO29CQUMvRCxNQUFNLEdBQUcsR0FBRyxxQkFBcUIsQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO29CQUMzRCxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFDdEcsTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7aUJBQ3BEO2FBQ0Y7U0FDRjtRQUVELE1BQU0sT0FBTyxHQUFnQixFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFDLENBQUM7UUFDeEQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQzs7QUFqRHNCLGtDQUFZLEdBQUcsT0FBTyxDQUFDOzBGQUZyQyxxQkFBcUI7NkRBQXJCLHFCQUFxQixXQUFyQixxQkFBcUI7dUZBQXJCLHFCQUFxQjtjQURqQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgT3B0aW9uc1R5cGUgfSBmcm9tICcuLic7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSZXF1ZXN0T3B0aW9uc0J1aWxkZXIge1xuXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBGSUVMRF9QUkVGSVggPSAnY2FzZS4nO1xuXG4gICAgLyoqXG4gICAgICogQXNzZXNzIHRoZSB2YWx1ZSB0byBzZWUgaWYgaXQgc2hvdWxkIGJlIGluY2x1ZGVkIGluIHRoZSByZXF1ZXN0IG9wdGlvbnMuXG4gICAgICogSWYgaXQncyBudWxsIG9yIGFuIFwiZW1wdHlcIiBzdHJpbmcsIGl0IHNob3VsZG4ndCBiZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gYmUgYXNzZXNzZWQuXG4gICAgICovXG4gICAgcHJpdmF0ZSBzdGF0aWMgaW5jbHVkZVBhcmFtKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mKHZhbHVlKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWUudHJpbSgpLmxlbmd0aCA+IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGJ1aWxkT3B0aW9ucyhtZXRhQ3JpdGVyaWE6IG9iamVjdCwgY2FzZUNyaXRlcmlhOiBvYmplY3QsIHZpZXc/OiBTZWFyY2hWaWV3KTogT3B0aW9uc1R5cGUge1xuICAgICAgLy8gVE9ETzogVGhpcyBzaG91bGQgcHJvYmFibHkgYmUgdGhlIG5vdyBidWlsdC1pbiBVUkxTZWFyY2hQYXJhbXMgYnV0IGl0XG4gICAgICAvLyByZXF1aXJlcyBhIGJpZ2dlciByZWZhY3RvciBhbmQgdGhlcmUgYXJlIGJpZ2dlciBmaXNoIHRvIGZyeSByaWdodCBub3cuXG4gICAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcblxuICAgICAgaWYgKHZpZXcpIHtcbiAgICAgICAgcGFyYW1zID0gcGFyYW1zLnNldCgndmlldycsIHZpZXcpO1xuICAgICAgfVxuXG4gICAgICBpZiAobWV0YUNyaXRlcmlhKSB7XG4gICAgICAgIGZvciAoY29uc3QgY3JpdGVyaW9uIG9mIE9iamVjdC5rZXlzKG1ldGFDcml0ZXJpYSkpIHtcbiAgICAgICAgICAvLyBFVUktMzQ5MC4gTWFrZSBzdXJlIHRoZSBwYXJhbWV0ZXIgc2hvdWxkIGJlIGluY2x1ZGVkIGZvciBhZGRpbmcgaXQuXG4gICAgICAgICAgLy8gVGhpcyB3YXMgYWxyZWFkeSBoYW5kbGVkIGJ5IHRoZSBvbGQgVVJMU2VhcmNoUGFyYW1zIG1lY2hhbmlzbS5cbiAgICAgICAgICBpZiAoUmVxdWVzdE9wdGlvbnNCdWlsZGVyLmluY2x1ZGVQYXJhbShtZXRhQ3JpdGVyaWFbY3JpdGVyaW9uXSkpIHtcbiAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoY3JpdGVyaW9uLCBtZXRhQ3JpdGVyaWFbY3JpdGVyaW9uXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjYXNlQ3JpdGVyaWEpIHtcbiAgICAgICAgZm9yIChjb25zdCBjcml0ZXJpb24gb2YgT2JqZWN0LmtleXMoY2FzZUNyaXRlcmlhKSkge1xuICAgICAgICAgIGlmIChSZXF1ZXN0T3B0aW9uc0J1aWxkZXIuaW5jbHVkZVBhcmFtKGNhc2VDcml0ZXJpYVtjcml0ZXJpb25dKSkge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gUmVxdWVzdE9wdGlvbnNCdWlsZGVyLkZJRUxEX1BSRUZJWCArIGNyaXRlcmlvbjtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY2FzZUNyaXRlcmlhW2NyaXRlcmlvbl0udHJpbSA/IGNhc2VDcml0ZXJpYVtjcml0ZXJpb25dLnRyaW0oKSA6IGNhc2VDcml0ZXJpYVtjcml0ZXJpb25dO1xuICAgICAgICAgICAgcGFyYW1zID0gcGFyYW1zLnNldChrZXksIHZhbHVlLnJlcGxhY2UoL+KAmS9pLCBgJ2ApKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3Qgb3B0aW9uczogT3B0aW9uc1R5cGUgPSB7IHBhcmFtcywgb2JzZXJ2ZTogJ2JvZHknfTtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cblxufVxuXG5leHBvcnQgdHlwZSBTZWFyY2hWaWV3ID0gJ1NFQVJDSCcgfCAnV09SS0JBU0tFVCc7XG4iXX0=
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC5vcHRpb25zLmJ1aWxkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jY2QtY2FzZS11aS10b29sa2l0L3NyYy9saWIvc2hhcmVkL3NlcnZpY2VzL3JlcXVlc3QvcmVxdWVzdC5vcHRpb25zLmJ1aWxkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSzNDLE1BQU0sT0FBTyxxQkFBcUI7SUFJOUI7Ozs7O09BS0c7SUFDSyxNQUFNLENBQUMsWUFBWSxDQUFDLEtBQVU7UUFDcEMsMEJBQTBCO1FBQzFCLElBQUksS0FBSyxFQUFFO1lBQ1QsMEJBQTBCO1lBQzFCLElBQUksT0FBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLFFBQVEsRUFBRTtnQkFDOUIsT0FBTyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzthQUNoQztZQUNELE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTSxZQUFZLENBQUMsWUFBb0IsRUFBRSxZQUFvQixFQUFFLElBQWlCO1FBQy9FLHdFQUF3RTtRQUN4RSx5RUFBeUU7UUFDekUsSUFBSSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUU5QiwwQkFBMEI7UUFDMUIsSUFBSSxJQUFJLEVBQUU7WUFDUixNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDbkM7UUFFRCwwQkFBMEI7UUFDMUIsSUFBSSxZQUFZLEVBQUU7WUFDaEIsS0FBSyxNQUFNLFNBQVMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUNqRCxzRUFBc0U7Z0JBQ3RFLGlFQUFpRTtnQkFDakUsSUFBSSxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUU7b0JBQy9ELE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztpQkFDekQ7YUFDRjtTQUNGO1FBRUQsMEJBQTBCO1FBQzFCLElBQUksWUFBWSxFQUFFO1lBQ2hCLEtBQUssTUFBTSxTQUFTLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDakQsMEJBQTBCO2dCQUMxQixJQUFJLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRTtvQkFDL0QsTUFBTSxHQUFHLEdBQUcscUJBQXFCLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQztvQkFDM0QsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQ3RHLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO2lCQUNwRDthQUNGO1NBQ0Y7UUFFRCxNQUFNLE9BQU8sR0FBZ0IsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBQyxDQUFDO1FBQ3hELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7O0FBdkRzQixrQ0FBWSxHQUFHLE9BQU8sQ0FBQzswRkFGckMscUJBQXFCOzZEQUFyQixxQkFBcUIsV0FBckIscUJBQXFCO3VGQUFyQixxQkFBcUI7Y0FEakMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE9wdGlvbnNUeXBlIH0gZnJvbSAnLi4nO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUmVxdWVzdE9wdGlvbnNCdWlsZGVyIHtcblxuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRklFTERfUFJFRklYID0gJ2Nhc2UuJztcblxuICAgIC8qKlxuICAgICAqIEFzc2VzcyB0aGUgdmFsdWUgdG8gc2VlIGlmIGl0IHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgcmVxdWVzdCBvcHRpb25zLlxuICAgICAqIElmIGl0J3MgbnVsbCBvciBhbiBcImVtcHR5XCIgc3RyaW5nLCBpdCBzaG91bGRuJ3QgYmUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIGJlIGFzc2Vzc2VkLlxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIGluY2x1ZGVQYXJhbSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmICh0eXBlb2YodmFsdWUpID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybiB2YWx1ZS50cmltKCkubGVuZ3RoID4gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYnVpbGRPcHRpb25zKG1ldGFDcml0ZXJpYTogb2JqZWN0LCBjYXNlQ3JpdGVyaWE6IG9iamVjdCwgdmlldz86IFNlYXJjaFZpZXcpOiBPcHRpb25zVHlwZSB7XG4gICAgICAvLyBUT0RPOiBUaGlzIHNob3VsZCBwcm9iYWJseSBiZSB0aGUgbm93IGJ1aWx0LWluIFVSTFNlYXJjaFBhcmFtcyBidXQgaXRcbiAgICAgIC8vIHJlcXVpcmVzIGEgYmlnZ2VyIHJlZmFjdG9yIGFuZCB0aGVyZSBhcmUgYmlnZ2VyIGZpc2ggdG8gZnJ5IHJpZ2h0IG5vdy5cbiAgICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKHZpZXcpIHtcbiAgICAgICAgcGFyYW1zID0gcGFyYW1zLnNldCgndmlldycsIHZpZXcpO1xuICAgICAgfVxuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKG1ldGFDcml0ZXJpYSkge1xuICAgICAgICBmb3IgKGNvbnN0IGNyaXRlcmlvbiBvZiBPYmplY3Qua2V5cyhtZXRhQ3JpdGVyaWEpKSB7XG4gICAgICAgICAgLy8gRVVJLTM0OTAuIE1ha2Ugc3VyZSB0aGUgcGFyYW1ldGVyIHNob3VsZCBiZSBpbmNsdWRlZCBmb3IgYWRkaW5nIGl0LlxuICAgICAgICAgIC8vIFRoaXMgd2FzIGFscmVhZHkgaGFuZGxlZCBieSB0aGUgb2xkIFVSTFNlYXJjaFBhcmFtcyBtZWNoYW5pc20uXG4gICAgICAgICAgaWYgKFJlcXVlc3RPcHRpb25zQnVpbGRlci5pbmNsdWRlUGFyYW0obWV0YUNyaXRlcmlhW2NyaXRlcmlvbl0pKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KGNyaXRlcmlvbiwgbWV0YUNyaXRlcmlhW2NyaXRlcmlvbl0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKGNhc2VDcml0ZXJpYSkge1xuICAgICAgICBmb3IgKGNvbnN0IGNyaXRlcmlvbiBvZiBPYmplY3Qua2V5cyhjYXNlQ3JpdGVyaWEpKSB7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICBpZiAoUmVxdWVzdE9wdGlvbnNCdWlsZGVyLmluY2x1ZGVQYXJhbShjYXNlQ3JpdGVyaWFbY3JpdGVyaW9uXSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IFJlcXVlc3RPcHRpb25zQnVpbGRlci5GSUVMRF9QUkVGSVggKyBjcml0ZXJpb247XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNhc2VDcml0ZXJpYVtjcml0ZXJpb25dLnRyaW0gPyBjYXNlQ3JpdGVyaWFbY3JpdGVyaW9uXS50cmltKCkgOiBjYXNlQ3JpdGVyaWFbY3JpdGVyaW9uXTtcbiAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5zZXQoa2V5LCB2YWx1ZS5yZXBsYWNlKC/igJkvaSwgYCdgKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9wdGlvbnM6IE9wdGlvbnNUeXBlID0geyBwYXJhbXMsIG9ic2VydmU6ICdib2R5J307XG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG5cbn1cblxuZXhwb3J0IHR5cGUgU2VhcmNoVmlldyA9ICdTRUFSQ0gnIHwgJ1dPUktCQVNLRVQnO1xuIl19