@ohioepa/oepa-ui-lib 1.1.0

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 (299) hide show
  1. package/README.md +24 -0
  2. package/esm2022/lib/account-search-input/account-search-input.component.mjs +147 -0
  3. package/esm2022/lib/account-search-modal/account-search-modal.component.mjs +151 -0
  4. package/esm2022/lib/action-btn/action-btn.component.mjs +70 -0
  5. package/esm2022/lib/action-btn/oepa-action-event.mjs +2 -0
  6. package/esm2022/lib/action-btn/oepa-action.mjs +2 -0
  7. package/esm2022/lib/action-btn-modal/action-btn-modal.component.mjs +21 -0
  8. package/esm2022/lib/address/address.component.mjs +174 -0
  9. package/esm2022/lib/address/oepa-address.service.mjs +64 -0
  10. package/esm2022/lib/address/oepa-form-address.mjs +2 -0
  11. package/esm2022/lib/blank/blank.component.mjs +14 -0
  12. package/esm2022/lib/checkbox/checkbox.component.mjs +33 -0
  13. package/esm2022/lib/checkbox-input/checkbox-input.component.mjs +41 -0
  14. package/esm2022/lib/comment-modal/comment-modal.component.mjs +56 -0
  15. package/esm2022/lib/common-forms.module.mjs +291 -0
  16. package/esm2022/lib/confirmation-modal/confirmation-modal.component.mjs +120 -0
  17. package/esm2022/lib/contact/contact.component.mjs +102 -0
  18. package/esm2022/lib/contact/oepa-form-contact.mjs +2 -0
  19. package/esm2022/lib/date-input/date-input.component.mjs +52 -0
  20. package/esm2022/lib/date-input-modal/date-input-modal.component.mjs +68 -0
  21. package/esm2022/lib/datepicker/datepicker.component.mjs +131 -0
  22. package/esm2022/lib/daterangepicker/daterangepicker.component.mjs +70 -0
  23. package/esm2022/lib/document/document-editor/document-editor.component.mjs +225 -0
  24. package/esm2022/lib/document/document-event-entity-type.mjs +7 -0
  25. package/esm2022/lib/document/document-event-type.mjs +7 -0
  26. package/esm2022/lib/document/document-event.mjs +2 -0
  27. package/esm2022/lib/document/document-group/document-group.component.mjs +210 -0
  28. package/esm2022/lib/document/document-part/document-part.component.mjs +19 -0
  29. package/esm2022/lib/document/document-part-editor/document-part-editor.component.mjs +296 -0
  30. package/esm2022/lib/document/document-placeholder-modal/document-placeholder-modal.component.mjs +49 -0
  31. package/esm2022/lib/document/document-section/document-section.component.mjs +226 -0
  32. package/esm2022/lib/document/document.service.mjs +325 -0
  33. package/esm2022/lib/document/group-modal/group-modal.component.mjs +46 -0
  34. package/esm2022/lib/document/part-modal/part-modal.component.mjs +48 -0
  35. package/esm2022/lib/document/portal-document-class.mjs +2 -0
  36. package/esm2022/lib/document/portal-document-group.mjs +2 -0
  37. package/esm2022/lib/document/portal-document-part.mjs +2 -0
  38. package/esm2022/lib/document/portal-document-placeholder.mjs +2 -0
  39. package/esm2022/lib/document/portal-document-section.mjs +2 -0
  40. package/esm2022/lib/document/portal-document-text.mjs +2 -0
  41. package/esm2022/lib/document/portal-document-type.mjs +2 -0
  42. package/esm2022/lib/document/portal-document.mjs +2 -0
  43. package/esm2022/lib/document/portal-email-attachment-type.mjs +2 -0
  44. package/esm2022/lib/document/portal-email-attachment.mjs +2 -0
  45. package/esm2022/lib/document/portal-email-filter.mjs +2 -0
  46. package/esm2022/lib/document/portal-email.mjs +2 -0
  47. package/esm2022/lib/document/section-modal/section-modal.component.mjs +46 -0
  48. package/esm2022/lib/dual-list-box/array.pipes.mjs +71 -0
  49. package/esm2022/lib/dual-list-box/dual-list-box.component.mjs +339 -0
  50. package/esm2022/lib/dual-list-box/items-moved-event.mjs +2 -0
  51. package/esm2022/lib/dual-list-box/list-box-item.mjs +2 -0
  52. package/esm2022/lib/ebiz-address/ebiz-address.component.mjs +62 -0
  53. package/esm2022/lib/edoc-attachment/edoc-attachment.component.mjs +216 -0
  54. package/esm2022/lib/edoc-attachment/edoc-attachment.service.mjs +38 -0
  55. package/esm2022/lib/edoc-attachment/edocument-attachment-metadata.mjs +2 -0
  56. package/esm2022/lib/edoc-attachment/edocument-attachment.mjs +2 -0
  57. package/esm2022/lib/edoc-attachment/edocument-reference.mjs +2 -0
  58. package/esm2022/lib/entity/entity.service.mjs +104 -0
  59. package/esm2022/lib/entity/organization-create-modal/organization-create-modal.component.mjs +307 -0
  60. package/esm2022/lib/entity/organization-search-input/organization-search-input.component.mjs +127 -0
  61. package/esm2022/lib/entity/organization-search-modal/organization-search-modal.component.mjs +304 -0
  62. package/esm2022/lib/entity/person-create-modal/person-create-modal.component.mjs +316 -0
  63. package/esm2022/lib/entity/person-search-input/person-search-input.component.mjs +129 -0
  64. package/esm2022/lib/entity/person-search-modal/person-search-modal.component.mjs +311 -0
  65. package/esm2022/lib/entity/place-create-modal/place-create-modal.component.mjs +14 -0
  66. package/esm2022/lib/entity/place-search-input/place-search-input.component.mjs +126 -0
  67. package/esm2022/lib/entity/place-search-modal/place-search-modal.component.mjs +216 -0
  68. package/esm2022/lib/esri-map/esri-map.component.mjs +416 -0
  69. package/esm2022/lib/file-upload/file-upload.component.mjs +148 -0
  70. package/esm2022/lib/lynx-image-upload/lynx-image-upload.component.mjs +143 -0
  71. package/esm2022/lib/lynx-image-upload/lynx.service.mjs +47 -0
  72. package/esm2022/lib/masks/oepa-create-integer-mask.mjs +39 -0
  73. package/esm2022/lib/masks/oepa-integer-mask-args.mjs +2 -0
  74. package/esm2022/lib/message/message.component.mjs +19 -0
  75. package/esm2022/lib/message/oepa-message-type.mjs +7 -0
  76. package/esm2022/lib/message/oepa-message.mjs +31 -0
  77. package/esm2022/lib/message-list/message-list.component.mjs +24 -0
  78. package/esm2022/lib/multi-file-upload/multi-file-upload.component.mjs +137 -0
  79. package/esm2022/lib/notes-modal/notes-modal.component.mjs +177 -0
  80. package/esm2022/lib/notes-modal/oepa-note-result.mjs +2 -0
  81. package/esm2022/lib/notes-modal/oepa-note.mjs +2 -0
  82. package/esm2022/lib/numeric-input/numeric-input.component.mjs +50 -0
  83. package/esm2022/lib/numeric-input.directive.mjs +76 -0
  84. package/esm2022/lib/oepa-error-message/oepa-error-message.component.mjs +39 -0
  85. package/esm2022/lib/oepa-forms.service.mjs +199 -0
  86. package/esm2022/lib/oepa-images.mjs +59 -0
  87. package/esm2022/lib/oepa-wait-message/oepa-wait-message.component.mjs +29 -0
  88. package/esm2022/lib/ohio-lat-long/ohio-lat-long.component.mjs +176 -0
  89. package/esm2022/lib/parameter/parameter.mjs +2 -0
  90. package/esm2022/lib/parameter/parameter.service.mjs +47 -0
  91. package/esm2022/lib/params-help-button/params-help-button.component.mjs +42 -0
  92. package/esm2022/lib/phone-number/phone-number.component.mjs +44 -0
  93. package/esm2022/lib/pin-modal/oepa-attestation.mjs +2 -0
  94. package/esm2022/lib/pin-modal/oepa-pin.mjs +2 -0
  95. package/esm2022/lib/pin-modal/oepa-pin.service.mjs +54 -0
  96. package/esm2022/lib/pin-modal/oepa-security-question.mjs +2 -0
  97. package/esm2022/lib/pin-modal/pin-modal.component.mjs +186 -0
  98. package/esm2022/lib/progress-indicator/progress-info.mjs +2 -0
  99. package/esm2022/lib/select-input/select-input.component.mjs +96 -0
  100. package/esm2022/lib/server-timeout-modal/server-timeout-modal.component.mjs +63 -0
  101. package/esm2022/lib/shopping-cart/shopping-cart-summary/shopping-cart-summary.component.mjs +54 -0
  102. package/esm2022/lib/shopping-cart/shopping-cart-view/shopping-cart-view-parameters.mjs +2 -0
  103. package/esm2022/lib/shopping-cart/shopping-cart-view/shopping-cart-view.component.mjs +190 -0
  104. package/esm2022/lib/shopping-cart/shopping-cart.service.mjs +89 -0
  105. package/esm2022/lib/start-end-timepicker/start-end-timepicker.component.mjs +126 -0
  106. package/esm2022/lib/table/oepa-p-column.mjs +2 -0
  107. package/esm2022/lib/table/oepa-table-cell-classname.pipe.mjs +22 -0
  108. package/esm2022/lib/table/oepa-table-cell-click-event.mjs +2 -0
  109. package/esm2022/lib/table/oepa-table-cell-colspan.pipe.mjs +22 -0
  110. package/esm2022/lib/table/oepa-table-cell-hidden.pipe.mjs +22 -0
  111. package/esm2022/lib/table/oepa-table-cell-icon-classname.pipe.mjs +22 -0
  112. package/esm2022/lib/table/oepa-table-cell-img-src.pipe.mjs +22 -0
  113. package/esm2022/lib/table/oepa-table-cell-inner-html.pipe.mjs +22 -0
  114. package/esm2022/lib/table/oepa-table-cell-input-component.pipe.mjs +22 -0
  115. package/esm2022/lib/table/oepa-table-cell-not-selectable.pipe.mjs +22 -0
  116. package/esm2022/lib/table/oepa-table-cell-value.pipe.mjs +22 -0
  117. package/esm2022/lib/table/oepa-table-cell.mjs +2 -0
  118. package/esm2022/lib/table/oepa-table-column.mjs +2 -0
  119. package/esm2022/lib/table/oepa-table-config.mjs +2 -0
  120. package/esm2022/lib/table/oepa-table-filter.mjs +2 -0
  121. package/esm2022/lib/table/oepa-table-filtering.directive.mjs +57 -0
  122. package/esm2022/lib/table/oepa-table-header.mjs +2 -0
  123. package/esm2022/lib/table/oepa-table-page-info.mjs +2 -0
  124. package/esm2022/lib/table/oepa-table-popover.mjs +2 -0
  125. package/esm2022/lib/table/oepa-table-row.mjs +2 -0
  126. package/esm2022/lib/table/oepa-table-sort-criterion.mjs +2 -0
  127. package/esm2022/lib/table/oepa-table-sorting.directive.mjs +57 -0
  128. package/esm2022/lib/table/oepa-table.mjs +2 -0
  129. package/esm2022/lib/table/p-table/p-table.component.mjs +826 -0
  130. package/esm2022/lib/table/table-data-cell/table-data-cell-click-event.mjs +2 -0
  131. package/esm2022/lib/table/table-data-cell/table-data-cell.component.mjs +60 -0
  132. package/esm2022/lib/table/table-export.service.mjs +57 -0
  133. package/esm2022/lib/table/table-header-cell/table-header-cell.component.mjs +61 -0
  134. package/esm2022/lib/table/table.component.mjs +793 -0
  135. package/esm2022/lib/table/table.service.mjs +112 -0
  136. package/esm2022/lib/template-confirmation-modal/template-confirmation-modal.component.mjs +46 -0
  137. package/esm2022/lib/text-area-input/text-area-input.component.mjs +48 -0
  138. package/esm2022/lib/text-input/text-input.component.mjs +48 -0
  139. package/esm2022/lib/timeout-modal/timeout-modal.component.mjs +31 -0
  140. package/esm2022/lib/timepicker/timepicker.component.mjs +48 -0
  141. package/esm2022/lib/validation/form-validator.mjs +2 -0
  142. package/esm2022/lib/validation/validation.service.mjs +134 -0
  143. package/esm2022/lib/yes-no/yes-no.component.mjs +44 -0
  144. package/esm2022/lib/yes-no-boolean/yes-no.component.mjs +44 -0
  145. package/esm2022/lib/yes-no-other-input/yes-no-other-input.component.mjs +41 -0
  146. package/esm2022/lib/zip-code/zip-code.component.mjs +42 -0
  147. package/esm2022/ohioepa-oepa-ui-lib.mjs +5 -0
  148. package/esm2022/public-api.mjs +142 -0
  149. package/fesm2022/ohioepa-oepa-ui-lib.mjs +10720 -0
  150. package/fesm2022/ohioepa-oepa-ui-lib.mjs.map +1 -0
  151. package/index.d.ts +5 -0
  152. package/lib/account-search-input/account-search-input.component.d.ts +36 -0
  153. package/lib/account-search-modal/account-search-modal.component.d.ts +40 -0
  154. package/lib/action-btn/action-btn.component.d.ts +34 -0
  155. package/lib/action-btn/oepa-action-event.d.ts +19 -0
  156. package/lib/action-btn/oepa-action.d.ts +13 -0
  157. package/lib/action-btn-modal/action-btn-modal.component.d.ts +12 -0
  158. package/lib/address/address.component.d.ts +43 -0
  159. package/lib/address/oepa-address.service.d.ts +28 -0
  160. package/lib/address/oepa-form-address.d.ts +19 -0
  161. package/lib/blank/blank.component.d.ts +8 -0
  162. package/lib/checkbox/checkbox.component.d.ts +15 -0
  163. package/lib/checkbox-input/checkbox-input.component.d.ts +17 -0
  164. package/lib/comment-modal/comment-modal.component.d.ts +22 -0
  165. package/lib/common-forms.module.d.ts +104 -0
  166. package/lib/confirmation-modal/confirmation-modal.component.d.ts +49 -0
  167. package/lib/contact/contact.component.d.ts +33 -0
  168. package/lib/contact/oepa-form-contact.d.ts +58 -0
  169. package/lib/date-input/date-input.component.d.ts +18 -0
  170. package/lib/date-input-modal/date-input-modal.component.d.ts +25 -0
  171. package/lib/datepicker/datepicker.component.d.ts +28 -0
  172. package/lib/daterangepicker/daterangepicker.component.d.ts +22 -0
  173. package/lib/document/document-editor/document-editor.component.d.ts +34 -0
  174. package/lib/document/document-event-entity-type.d.ts +5 -0
  175. package/lib/document/document-event-type.d.ts +5 -0
  176. package/lib/document/document-event.d.ts +9 -0
  177. package/lib/document/document-group/document-group.component.d.ts +38 -0
  178. package/lib/document/document-part/document-part.component.d.ts +10 -0
  179. package/lib/document/document-part-editor/document-part-editor.component.d.ts +46 -0
  180. package/lib/document/document-placeholder-modal/document-placeholder-modal.component.d.ts +19 -0
  181. package/lib/document/document-section/document-section.component.d.ts +37 -0
  182. package/lib/document/document.service.d.ts +90 -0
  183. package/lib/document/group-modal/group-modal.component.d.ts +20 -0
  184. package/lib/document/part-modal/part-modal.component.d.ts +20 -0
  185. package/lib/document/portal-document-class.d.ts +10 -0
  186. package/lib/document/portal-document-group.d.ts +15 -0
  187. package/lib/document/portal-document-part.d.ts +22 -0
  188. package/lib/document/portal-document-placeholder.d.ts +12 -0
  189. package/lib/document/portal-document-section.d.ts +13 -0
  190. package/lib/document/portal-document-text.d.ts +7 -0
  191. package/lib/document/portal-document-type.d.ts +15 -0
  192. package/lib/document/portal-document.d.ts +27 -0
  193. package/lib/document/portal-email-attachment-type.d.ts +6 -0
  194. package/lib/document/portal-email-attachment.d.ts +12 -0
  195. package/lib/document/portal-email-filter.d.ts +12 -0
  196. package/lib/document/portal-email.d.ts +18 -0
  197. package/lib/document/section-modal/section-modal.component.d.ts +20 -0
  198. package/lib/dual-list-box/array.pipes.d.ts +36 -0
  199. package/lib/dual-list-box/dual-list-box.component.d.ts +91 -0
  200. package/lib/dual-list-box/items-moved-event.d.ts +11 -0
  201. package/lib/dual-list-box/list-box-item.d.ts +7 -0
  202. package/lib/ebiz-address/ebiz-address.component.d.ts +23 -0
  203. package/lib/edoc-attachment/edoc-attachment.component.d.ts +44 -0
  204. package/lib/edoc-attachment/edoc-attachment.service.d.ts +16 -0
  205. package/lib/edoc-attachment/edocument-attachment-metadata.d.ts +16 -0
  206. package/lib/edoc-attachment/edocument-attachment.d.ts +12 -0
  207. package/lib/edoc-attachment/edocument-reference.d.ts +5 -0
  208. package/lib/entity/entity.service.d.ts +31 -0
  209. package/lib/entity/organization-create-modal/organization-create-modal.component.d.ts +53 -0
  210. package/lib/entity/organization-search-input/organization-search-input.component.d.ts +34 -0
  211. package/lib/entity/organization-search-modal/organization-search-modal.component.d.ts +56 -0
  212. package/lib/entity/person-create-modal/person-create-modal.component.d.ts +53 -0
  213. package/lib/entity/person-search-input/person-search-input.component.d.ts +34 -0
  214. package/lib/entity/person-search-modal/person-search-modal.component.d.ts +56 -0
  215. package/lib/entity/place-create-modal/place-create-modal.component.d.ts +8 -0
  216. package/lib/entity/place-search-input/place-search-input.component.d.ts +34 -0
  217. package/lib/entity/place-search-modal/place-search-modal.component.d.ts +41 -0
  218. package/lib/esri-map/esri-map.component.d.ts +41 -0
  219. package/lib/file-upload/file-upload.component.d.ts +37 -0
  220. package/lib/lynx-image-upload/lynx-image-upload.component.d.ts +36 -0
  221. package/lib/lynx-image-upload/lynx.service.d.ts +16 -0
  222. package/lib/masks/oepa-create-integer-mask.d.ts +8 -0
  223. package/lib/masks/oepa-integer-mask-args.d.ts +5 -0
  224. package/lib/message/message.component.d.ts +10 -0
  225. package/lib/message/oepa-message-type.d.ts +5 -0
  226. package/lib/message/oepa-message.d.ts +7 -0
  227. package/lib/message-list/message-list.component.d.ts +11 -0
  228. package/lib/multi-file-upload/multi-file-upload.component.d.ts +36 -0
  229. package/lib/notes-modal/notes-modal.component.d.ts +50 -0
  230. package/lib/notes-modal/oepa-note-result.d.ts +10 -0
  231. package/lib/notes-modal/oepa-note.d.ts +13 -0
  232. package/lib/numeric-input/numeric-input.component.d.ts +20 -0
  233. package/lib/numeric-input.directive.d.ts +19 -0
  234. package/lib/oepa-error-message/oepa-error-message.component.d.ts +9 -0
  235. package/lib/oepa-forms.service.d.ts +28 -0
  236. package/lib/oepa-images.d.ts +53 -0
  237. package/lib/oepa-wait-message/oepa-wait-message.component.d.ts +9 -0
  238. package/lib/ohio-lat-long/ohio-lat-long.component.d.ts +63 -0
  239. package/lib/parameter/parameter.d.ts +7 -0
  240. package/lib/parameter/parameter.service.d.ts +18 -0
  241. package/lib/params-help-button/params-help-button.component.d.ts +15 -0
  242. package/lib/phone-number/phone-number.component.d.ts +19 -0
  243. package/lib/pin-modal/oepa-attestation.d.ts +10 -0
  244. package/lib/pin-modal/oepa-pin.d.ts +26 -0
  245. package/lib/pin-modal/oepa-pin.service.d.ts +38 -0
  246. package/lib/pin-modal/oepa-security-question.d.ts +8 -0
  247. package/lib/pin-modal/pin-modal.component.d.ts +46 -0
  248. package/lib/progress-indicator/progress-info.d.ts +4 -0
  249. package/lib/select-input/select-input.component.d.ts +27 -0
  250. package/lib/server-timeout-modal/server-timeout-modal.component.d.ts +23 -0
  251. package/lib/shopping-cart/shopping-cart-summary/shopping-cart-summary.component.d.ts +18 -0
  252. package/lib/shopping-cart/shopping-cart-view/shopping-cart-view-parameters.d.ts +10 -0
  253. package/lib/shopping-cart/shopping-cart-view/shopping-cart-view.component.d.ts +51 -0
  254. package/lib/shopping-cart/shopping-cart.service.d.ts +44 -0
  255. package/lib/start-end-timepicker/start-end-timepicker.component.d.ts +29 -0
  256. package/lib/table/oepa-p-column.d.ts +4 -0
  257. package/lib/table/oepa-table-cell-classname.pipe.d.ts +9 -0
  258. package/lib/table/oepa-table-cell-click-event.d.ts +15 -0
  259. package/lib/table/oepa-table-cell-colspan.pipe.d.ts +9 -0
  260. package/lib/table/oepa-table-cell-hidden.pipe.d.ts +9 -0
  261. package/lib/table/oepa-table-cell-icon-classname.pipe.d.ts +9 -0
  262. package/lib/table/oepa-table-cell-img-src.pipe.d.ts +9 -0
  263. package/lib/table/oepa-table-cell-inner-html.pipe.d.ts +9 -0
  264. package/lib/table/oepa-table-cell-input-component.pipe.d.ts +9 -0
  265. package/lib/table/oepa-table-cell-not-selectable.pipe.d.ts +9 -0
  266. package/lib/table/oepa-table-cell-value.pipe.d.ts +9 -0
  267. package/lib/table/oepa-table-cell.d.ts +66 -0
  268. package/lib/table/oepa-table-column.d.ts +71 -0
  269. package/lib/table/oepa-table-config.d.ts +72 -0
  270. package/lib/table/oepa-table-filter.d.ts +10 -0
  271. package/lib/table/oepa-table-filtering.directive.d.ts +17 -0
  272. package/lib/table/oepa-table-header.d.ts +9 -0
  273. package/lib/table/oepa-table-page-info.d.ts +22 -0
  274. package/lib/table/oepa-table-popover.d.ts +28 -0
  275. package/lib/table/oepa-table-row.d.ts +84 -0
  276. package/lib/table/oepa-table-sort-criterion.d.ts +4 -0
  277. package/lib/table/oepa-table-sorting.directive.d.ts +16 -0
  278. package/lib/table/oepa-table.d.ts +42 -0
  279. package/lib/table/p-table/p-table.component.d.ts +155 -0
  280. package/lib/table/table-data-cell/table-data-cell-click-event.d.ts +5 -0
  281. package/lib/table/table-data-cell/table-data-cell.component.d.ts +23 -0
  282. package/lib/table/table-export.service.d.ts +33 -0
  283. package/lib/table/table-header-cell/table-header-cell.component.d.ts +24 -0
  284. package/lib/table/table.component.d.ts +144 -0
  285. package/lib/table/table.service.d.ts +28 -0
  286. package/lib/template-confirmation-modal/template-confirmation-modal.component.d.ts +19 -0
  287. package/lib/text-area-input/text-area-input.component.d.ts +19 -0
  288. package/lib/text-input/text-input.component.d.ts +19 -0
  289. package/lib/timeout-modal/timeout-modal.component.d.ts +13 -0
  290. package/lib/timepicker/timepicker.component.d.ts +17 -0
  291. package/lib/validation/form-validator.d.ts +10 -0
  292. package/lib/validation/validation.service.d.ts +16 -0
  293. package/lib/yes-no/yes-no.component.d.ts +19 -0
  294. package/lib/yes-no-boolean/yes-no.component.d.ts +19 -0
  295. package/lib/yes-no-other-input/yes-no-other-input.component.d.ts +18 -0
  296. package/lib/zip-code/zip-code.component.d.ts +19 -0
  297. package/ohioepa-oepa-ui-lib-1.1.0.tgz +0 -0
  298. package/package.json +25 -0
  299. package/public-api.d.ts +138 -0
@@ -0,0 +1,316 @@
1
+ import { Component, Output, EventEmitter } from '@angular/core';
2
+ import { Validators } from '@angular/forms';
3
+ import { EMPTY, forkJoin } from 'rxjs';
4
+ import { catchError, map } from 'rxjs/operators';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/forms";
7
+ import * as i2 from "ngx-bootstrap/modal";
8
+ import * as i3 from "../../oepa-forms.service";
9
+ import * as i4 from "../entity.service";
10
+ import * as i5 from "@angular/common";
11
+ import * as i6 from "../../address/address.component";
12
+ import * as i7 from "../../contact/contact.component";
13
+ import * as i8 from "../../table/table.component";
14
+ export class PersonCreateModalComponent {
15
+ fb;
16
+ bsModalRef;
17
+ formService;
18
+ entityService;
19
+ modalFormGroup;
20
+ errorMessage = '';
21
+ infoMessage = '';
22
+ inProgressMsg = '';
23
+ filter;
24
+ selectedPerson;
25
+ personSubTypes = [];
26
+ programs = [];
27
+ ;
28
+ addressTypes = [];
29
+ ;
30
+ phoneNumberTypes = [];
31
+ ;
32
+ tableData = [];
33
+ tableHeader;
34
+ tableConfig = {
35
+ rowsPerPage: 5,
36
+ classNames: ['table-striped', 'table-bordered', 'table-sm']
37
+ };
38
+ onPersonCreated = new EventEmitter();
39
+ constructor(fb, bsModalRef, formService, entityService) {
40
+ this.fb = fb;
41
+ this.bsModalRef = bsModalRef;
42
+ this.formService = formService;
43
+ this.entityService = entityService;
44
+ }
45
+ ngOnInit() {
46
+ this.loadReferenceData().subscribe({
47
+ next: results => {
48
+ this.createForm();
49
+ }, error: err => {
50
+ this.errorMessage = 'An initialization error occurred: ' + err;
51
+ }
52
+ });
53
+ }
54
+ loadReferenceData() {
55
+ let tasks = [];
56
+ tasks.push(this.retrievePersonTypes());
57
+ tasks.push(this.retrievePrograms());
58
+ tasks.push(this.retrieveAddressTypes());
59
+ tasks.push(this.retrievePhoneNumberTypes());
60
+ return forkJoin(tasks);
61
+ }
62
+ retrievePersonTypes() {
63
+ return this.entityService.retrievePersonTypes().pipe(map(types => {
64
+ this.personSubTypes = [];
65
+ if (types && types.length) {
66
+ types.forEach(type => {
67
+ this.personSubTypes.push(type);
68
+ });
69
+ }
70
+ return this.personSubTypes.length;
71
+ }), catchError(err => {
72
+ this.errorMessage = 'An initialization error occurred: ' + err;
73
+ return EMPTY;
74
+ }));
75
+ }
76
+ retrievePrograms() {
77
+ return this.entityService.retrievePrograms().pipe(map(programs => {
78
+ this.programs = [];
79
+ if (programs && programs.length) {
80
+ programs.forEach(program => {
81
+ this.programs.push(program);
82
+ });
83
+ }
84
+ return this.programs.length;
85
+ }), catchError(err => {
86
+ this.errorMessage = 'An initialization error occurred: ' + err;
87
+ return EMPTY;
88
+ }));
89
+ }
90
+ retrieveAddressTypes() {
91
+ return this.entityService.retrieveAddressTypes().pipe(map(types => {
92
+ this.addressTypes = [];
93
+ if (types && types.length) {
94
+ types.forEach(type => {
95
+ this.addressTypes.push(type);
96
+ });
97
+ }
98
+ return this.addressTypes.length;
99
+ }), catchError(err => {
100
+ this.errorMessage = 'An initialization error occurred: ' + err;
101
+ return EMPTY;
102
+ }));
103
+ }
104
+ retrievePhoneNumberTypes() {
105
+ return this.entityService.retrieveTelephoneTypes().pipe(map(types => {
106
+ this.phoneNumberTypes = [];
107
+ if (types && types.length) {
108
+ types.forEach(type => {
109
+ this.phoneNumberTypes.push(type);
110
+ });
111
+ }
112
+ return this.phoneNumberTypes.length;
113
+ }), catchError(err => {
114
+ this.errorMessage = 'An initialization error occurred: ' + err;
115
+ return EMPTY;
116
+ }));
117
+ }
118
+ createForm() {
119
+ this.modalFormGroup = this.fb.group({
120
+ personType: ['RVPER', [Validators.required]],
121
+ program: [null, [Validators.required]],
122
+ contact: this.fb.group({
123
+ firstName: ['', [Validators.required, Validators.maxLength(50)]],
124
+ middleName: [''],
125
+ lastName: ['', [Validators.required, Validators.maxLength(50)]],
126
+ phoneNumber: [''],
127
+ faxNumber: ['', []],
128
+ emailAddress: ['', [Validators.email, Validators.maxLength(254)]]
129
+ }),
130
+ addressType: ['BILLI', [Validators.required]],
131
+ address: this.fb.group(this.formService.buildAddressFormWithCountry({})),
132
+ areaCode: '',
133
+ phoneNumberType: ['OFFIC', [Validators.required]],
134
+ phoneNumber: '',
135
+ extension: ''
136
+ });
137
+ this.modalFormGroup.controls['address'].get('state')?.setValue(undefined);
138
+ this.modalFormGroup.controls['address'].get('country')?.valueChanges.subscribe(country => {
139
+ if (country === 'USA') {
140
+ this.modalFormGroup.controls['address'].get('state')?.setValidators([Validators.required]);
141
+ this.modalFormGroup.controls['address'].get('state')?.updateValueAndValidity();
142
+ this.modalFormGroup.controls['address'].get('postalCode')?.setValidators([Validators.required, Validators.pattern('[0-9]{5}')]);
143
+ this.modalFormGroup.controls['address'].get('postalCode')?.updateValueAndValidity();
144
+ this.modalFormGroup.controls['address'].get('foreignState')?.clearValidators();
145
+ this.modalFormGroup.controls['address'].get('foreignState')?.updateValueAndValidity();
146
+ this.modalFormGroup.controls['address'].get('foreignZip')?.clearValidators();
147
+ this.modalFormGroup.controls['address'].get('foreignZip')?.updateValueAndValidity();
148
+ }
149
+ else {
150
+ this.modalFormGroup.controls['address'].get('foreignState')?.setValidators([Validators.required]);
151
+ this.modalFormGroup.controls['address'].get('foreignState')?.updateValueAndValidity();
152
+ this.modalFormGroup.controls['address'].get('foreignZip')?.setValidators([Validators.required]);
153
+ this.modalFormGroup.controls['address'].get('foreignZip')?.updateValueAndValidity();
154
+ this.modalFormGroup.controls['address'].get('state')?.clearValidators();
155
+ this.modalFormGroup.controls['address'].get('state')?.updateValueAndValidity();
156
+ this.modalFormGroup.controls['address'].get('postalCode')?.clearValidators();
157
+ this.modalFormGroup.controls['address'].get('postalCode')?.updateValueAndValidity();
158
+ }
159
+ });
160
+ }
161
+ getFilterFromForm() {
162
+ let filter = {
163
+ firstName: this.modalFormGroup.get('contact')?.get('firstName')?.value,
164
+ middleName: this.modalFormGroup.get('contact')?.get('middleName')?.value,
165
+ lastName: this.modalFormGroup.get('contact')?.get('lastName')?.value,
166
+ address: this.modalFormGroup.get('address')?.get('line1')?.value,
167
+ city: this.modalFormGroup.get('address')?.get('city')?.value,
168
+ state: this.modalFormGroup.get('address')?.get('country')?.value === 'USA' ? this.modalFormGroup.get('address')?.get('state')?.value : null,
169
+ zipCode: this.modalFormGroup.get('address')?.get('country')?.value === 'USA' ? this.modalFormGroup.get('address')?.get('postalCode')?.value : this.modalFormGroup.get('address')?.get('foreignZip')?.value,
170
+ foreignState: this.modalFormGroup.get('address')?.get('country')?.value !== 'USA' ? this.modalFormGroup.get('address')?.get('foreignState')?.value : null,
171
+ country: this.formService.getCountryCode(this.modalFormGroup.get('address')?.get('country')?.value),
172
+ };
173
+ return filter;
174
+ }
175
+ getPersonFromForm() {
176
+ let address = {
177
+ addressType: { code: this.modalFormGroup.get('addressType')?.value },
178
+ program: this.modalFormGroup.get('program')?.value,
179
+ address: {
180
+ type: this.modalFormGroup.get('address')?.get('country')?.value !== 'USA' ? 'FOREN' : '',
181
+ addressLine1: this.modalFormGroup.get('address')?.get('line1')?.value,
182
+ addressLine2: this.modalFormGroup.get('address')?.get('line2')?.value,
183
+ city: this.modalFormGroup.get('address')?.get('city')?.value,
184
+ state: this.modalFormGroup.get('address')?.get('country')?.value === 'USA' ? this.modalFormGroup.get('address')?.get('state')?.value : null,
185
+ zip: this.modalFormGroup.get('address')?.get('country')?.value === 'USA' ? this.modalFormGroup.get('address')?.get('postalCode')?.value : this.modalFormGroup.get('address')?.get('foreignZip')?.value,
186
+ foreignState: this.modalFormGroup.get('address')?.get('country')?.value !== 'USA' ? this.modalFormGroup.get('address')?.get('foreignState')?.value : null,
187
+ country: this.formService.getCountryCode(this.modalFormGroup.get('address')?.get('country')?.value),
188
+ }
189
+ };
190
+ let phone = {
191
+ phoneNumberType: { code: this.modalFormGroup.get('phoneNumberType')?.value },
192
+ program: this.modalFormGroup.get('program')?.value,
193
+ phoneNumber: {
194
+ phoneNumber: this.modalFormGroup.get('contact')?.get('phoneNumber')?.value
195
+ }
196
+ };
197
+ let person = {
198
+ personType: { code: this.modalFormGroup.get('personType')?.value },
199
+ firstName: this.modalFormGroup.get('contact')?.get('firstName')?.value,
200
+ middleName: this.modalFormGroup.get('contact')?.get('middleName')?.value,
201
+ lastName: this.modalFormGroup.get('contact')?.get('lastName')?.value,
202
+ addressList: [address],
203
+ phoneNumberList: [phone]
204
+ };
205
+ return person;
206
+ }
207
+ savePersonAfterSearch() {
208
+ this.errorMessage = '';
209
+ this.tableData = [];
210
+ this.buildTableHeader();
211
+ let filter = this.getFilterFromForm();
212
+ this.inProgressMsg = 'Checking to see if person exists...';
213
+ this.entityService.matchPersons(filter).subscribe(matches => {
214
+ this.inProgressMsg = '';
215
+ if (!matches || matches.length === 0) {
216
+ this.savePerson();
217
+ }
218
+ else {
219
+ matches.forEach(person => {
220
+ let row = this.convertPersonToTableRow(person);
221
+ this.tableData.push(row);
222
+ this.tableData = this.tableData.slice();
223
+ });
224
+ this.infoMessage = 'Please check the table above and select a person from the table if it is the same as the person you are attempting to create.';
225
+ }
226
+ }, err => {
227
+ this.inProgressMsg = '';
228
+ this.errorMessage = 'Failed searching for existing person: ' + err;
229
+ });
230
+ }
231
+ buildTableHeader() {
232
+ this.tableHeader = {
233
+ columns: [
234
+ { title: '', id: 'select', sort: 'none', singleSelectColumn: true, className: 'select-col' },
235
+ { title: 'ID', id: 'id', sort: 'none', filterable: true },
236
+ { title: 'Type', id: 'type', sort: 'none', filterable: true },
237
+ { title: 'Name', id: 'name', sort: 'none', filterable: true },
238
+ { title: 'Address', id: 'address', sort: 'none', filterable: true },
239
+ { title: 'City', id: 'city', sort: 'none', filterable: true },
240
+ ]
241
+ };
242
+ if (this.modalFormGroup.get('address')?.get('country')?.value === 'USA') {
243
+ this.tableHeader.columns.push({ title: 'State', id: 'state', sort: 'none', filterable: true });
244
+ this.tableHeader.columns.push({ title: 'Zip Code', id: 'zipCode', sort: 'none', filterable: true });
245
+ }
246
+ else {
247
+ this.tableHeader.columns.push({ title: 'foreignState', id: 'foreignState', sort: 'none', filterable: true });
248
+ this.tableHeader.columns.push({ title: 'foreignZip', id: 'foreignZip', sort: 'none', filterable: true });
249
+ this.tableHeader.columns.push({ title: 'country', id: 'country', sort: 'none', filterable: true });
250
+ }
251
+ }
252
+ convertPersonToTableRow(person) {
253
+ let cells = [
254
+ { id: 'id', value: person.id },
255
+ { id: 'type', value: person.personType ? person.personType.name : '' },
256
+ { id: 'name', value: person.name },
257
+ { id: 'address', value: person.addressList && person.addressList.length > 0 ? person.addressList[0].address?.addressLine1 : '' },
258
+ { id: 'city', value: person.addressList && person.addressList.length > 0 ? person.addressList[0].address?.city : '' },
259
+ ];
260
+ if (this.modalFormGroup.get('address')?.get('country')?.value === 'USA') {
261
+ cells.push({ id: 'state', value: person.addressList && person.addressList.length > 0 ? person.addressList[0].address?.state : '' });
262
+ cells.push({ id: 'zipCode', value: person.addressList && person.addressList.length > 0 ? person.addressList[0].address?.zip : '' });
263
+ }
264
+ else {
265
+ cells.push({ id: 'foreignState', value: person.addressList && person.addressList.length > 0 ? person.addressList[0].address?.foreignState : '' });
266
+ cells.push({ id: 'foreignZip', value: person.addressList && person.addressList.length > 0 ? person.addressList[0].address?.foreignZip : '' });
267
+ cells.push({ id: 'country', value: person.addressList && person.addressList.length > 0 ? this.formService.getCountryName(person.addressList[0].address?.country || '') : '' });
268
+ }
269
+ return {
270
+ cells: cells,
271
+ dataSource: person,
272
+ selectable: true
273
+ };
274
+ }
275
+ savePerson() {
276
+ this.errorMessage = '';
277
+ this.inProgressMsg = 'Creating record for new person...';
278
+ let person = this.getPersonFromForm();
279
+ this.entityService.createPerson(person).subscribe(personID => {
280
+ if (personID) {
281
+ this.inProgressMsg = '';
282
+ person.id = personID;
283
+ this.onPersonCreated.emit(person);
284
+ }
285
+ }, err => {
286
+ this.inProgressMsg = '';
287
+ this.errorMessage = 'Failed creating person: ' + err;
288
+ });
289
+ }
290
+ onRowSelect(event) {
291
+ this.selectedPerson = event[0].dataSource;
292
+ }
293
+ saveSelectedPerson() {
294
+ this.onPersonCreated.emit(this.selectedPerson);
295
+ }
296
+ getModalFormGroup(name) {
297
+ return this.modalFormGroup.controls[name];
298
+ }
299
+ getModalFormGroupInvalidClass(name) {
300
+ return {
301
+ 'is-invalid': this.modalFormGroup.controls[name].invalid
302
+ };
303
+ }
304
+ getModalFormGroupHasError(name, field) {
305
+ return this.modalFormGroup.controls[name].hasError(field);
306
+ }
307
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PersonCreateModalComponent, deps: [{ token: i1.FormBuilder }, { token: i2.BsModalRef }, { token: i3.OepaFormsService }, { token: i4.EntityService }], target: i0.ɵɵFactoryTarget.Component });
308
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: PersonCreateModalComponent, selector: "oepa-person-create-modal", outputs: { onPersonCreated: "onPersonCreated" }, ngImport: i0, template: "<div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">Create Person</h4>\n <button type=\"button\" class=\"btn-close float-end\" aria-label=\"Close\" (click)=\"bsModalRef.hide()\">\n \n </button>\n</div>\n<div class=\"modal-body\">\n <div *ngIf=\"!modalFormGroup\">\n <div class=\"text-center\">Initializing...</div>\n <div class=\"text-center\"><span class=\"spinner-border text-primary\" role=\"status\"></span></div>\n </div>\n <form *ngIf=\"modalFormGroup\" [formGroup]=\"modalFormGroup\">\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label>Person Type</label>\n <select id=\"personTypeSelect\" formControlName=\"personType\" class=\"form-select\"\n [ngClass]=\"getModalFormGroupInvalidClass('personType')\">\n <option *ngFor=\"let t of personSubTypes\" [ngValue]=\"t.code\">{{t.name}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('personType','required')\">Person Type is required</small>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label>Program</label>\n <select id=\"programSelect\" formControlName=\"program\" class=\"form-select\"\n [ngClass]=\"getModalFormGroupInvalidClass('program')\">\n <option *ngFor=\"let t of programs\" [ngValue]=\"t\">{{t.name}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('program','required')\">Program is required</small>\n </div>\n </div>\n </div>\n <oepa-contact [group]=\"getModalFormGroup('contact')\"\n [showMiddleName]=\"true\" [noFax]=\"true\" [noEmail]=\"true\" [showValidation]=\"true\"></oepa-contact>\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label>Phone Number Type</label>\n <select id=\"phoneNumberTypeSelect\" formControlName=\"phoneNumberType\" class=\"form-select\"\n [ngClass]=\"getModalFormGroupInvalidClass('phoneNumberType')\">\n <option *ngFor=\"let t of phoneNumberTypes\" [ngValue]=\"t.code\">{{t.name}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('phoneNumberType','required')\">Phone Number Type is required</small>\n </div>\n </div>\n </div>\n <oepa-address [group]=\"getModalFormGroup('address')\" [showValidation]=\"true\"></oepa-address>\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label>Address Type</label>\n <select id=\"addressTypeSelect\" formControlName=\"addressType\" class=\"form-select\"\n [ngClass]=\"getModalFormGroupInvalidClass('addressType')\">\n <option *ngFor=\"let t of addressTypes\" [ngValue]=\"t.code\">{{t.name}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('addressType','required')\">Address Type is required</small>\n </div>\n </div>\n </div>\n </form>\n <div *ngIf=\"tableData && tableData.length > 0\" class=\"card\">\n <div class=\"card-header\">\n <b>Matching Person List&nbsp;</b><span class=\"badge bg-secondary\">{{tableData.length}}</span>\n </div>\n <div class=\"card-body\">\n <oepa-table tableId=\"personSearchTable\" [config]=\"tableConfig\" [data]=\"tableData\" [header]=\"tableHeader\" (rowSelected)=\"onRowSelect($event)\">\n </oepa-table>\n </div>\n </div>\n</div>\n<div class=\"modal-footer d-block\">\n <div *ngIf=\"inProgressMsg\"> \n <div class=\"alert alert-info\">\n {{inProgressMsg}}\n </div>\n </div>\n <div *ngIf=\"infoMessage && !inProgressMsg\">\n <div class=\"alert alert-info\">\n {{infoMessage}}\n </div>\n </div>\n <div *ngIf=\"errorMessage\">\n <div class=\"alert alert-danger\">\n {{errorMessage}}\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-12 text-center\">\n <span *ngIf=\"inProgressMsg\"><span class=\"spinner-border text-primary\" role=\"status\"></span></span>\n <button *ngIf=\"(!tableData || tableData.length === 0) && !inProgressMsg\" type=\"button\" class=\"btn btn-primary mr-2\"\n id=\"SavePersonBtn\"\n [disabled]=\"!modalFormGroup || modalFormGroup.invalid\"\n (click)=\"savePersonAfterSearch()\">Save</button>\n <button *ngIf=\"tableData && tableData.length > 0 && !selectedPerson && !inProgressMsg\" type=\"button\" class=\"btn btn-primary mr-2\"\n id=\"SavePersonWithoutSearchBtn\"\n [disabled]=\"modalFormGroup?.invalid\"\n (click)=\"savePerson()\">No Match, Save New Person</button>\n <button *ngIf=\"tableData && tableData.length > 0 && selectedPerson && !inProgressMsg\" type=\"button\" class=\"btn btn-primary mr-2\"\n id=\"SaveSelectedPersonBtn\"\n [disabled]=\"modalFormGroup?.invalid\"\n (click)=\"saveSelectedPerson()\">Use Selected Person</button>\n <button id=\"CancelPersonBtn\" type=\"button\" class=\"btn btn-primary\"\n (click)=\"bsModalRef.hide()\">Cancel</button>\n </div>\n </div>\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i6.AddressComponent, selector: "oepa-address", inputs: ["group", "showValidation", "addressOneLabel", "addressTwoLabel", "cityLabel", "stateLabel", "zipCodeLabel", "disableState", "isSearch", "hideLine2", "line1MaxLength", "line2MaxLength", "cityMaxLength", "foreignStateLabel", "foreignZipLabel", "countryLabel", "sameAsGroup", "sameAsLabel", "sameAsChecked"] }, { kind: "component", type: i7.ContactComponent, selector: "oepa-contact", inputs: ["group", "showValidation", "firstNameLabel", "lastNameLabel", "showMiddleName", "middleNameLabel", "emailLabel", "phoneLabel", "faxLabel", "noFax", "showTitle", "noPhone", "noEmail", "isSearch", "firstNameMaxLength", "middleNameMaxLength", "lastNameMaxLength", "titleMaxLength", "emailMaxLength"] }, { kind: "component", type: i8.TableComponent, selector: "oepa-table", inputs: ["tableId", "config", "complexHeader", "header", "customBtnLabel", "customBtnVisible", "customBtnEnabled", "data", "totalRow"], outputs: ["cellClicked", "actionClicked", "rowSelected", "customBtnClicked"] }] });
309
+ }
310
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PersonCreateModalComponent, decorators: [{
311
+ type: Component,
312
+ args: [{ selector: 'oepa-person-create-modal', template: "<div class=\"modal-header\">\n <h4 class=\"modal-title pull-left\">Create Person</h4>\n <button type=\"button\" class=\"btn-close float-end\" aria-label=\"Close\" (click)=\"bsModalRef.hide()\">\n \n </button>\n</div>\n<div class=\"modal-body\">\n <div *ngIf=\"!modalFormGroup\">\n <div class=\"text-center\">Initializing...</div>\n <div class=\"text-center\"><span class=\"spinner-border text-primary\" role=\"status\"></span></div>\n </div>\n <form *ngIf=\"modalFormGroup\" [formGroup]=\"modalFormGroup\">\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label>Person Type</label>\n <select id=\"personTypeSelect\" formControlName=\"personType\" class=\"form-select\"\n [ngClass]=\"getModalFormGroupInvalidClass('personType')\">\n <option *ngFor=\"let t of personSubTypes\" [ngValue]=\"t.code\">{{t.name}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('personType','required')\">Person Type is required</small>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label>Program</label>\n <select id=\"programSelect\" formControlName=\"program\" class=\"form-select\"\n [ngClass]=\"getModalFormGroupInvalidClass('program')\">\n <option *ngFor=\"let t of programs\" [ngValue]=\"t\">{{t.name}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('program','required')\">Program is required</small>\n </div>\n </div>\n </div>\n <oepa-contact [group]=\"getModalFormGroup('contact')\"\n [showMiddleName]=\"true\" [noFax]=\"true\" [noEmail]=\"true\" [showValidation]=\"true\"></oepa-contact>\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label>Phone Number Type</label>\n <select id=\"phoneNumberTypeSelect\" formControlName=\"phoneNumberType\" class=\"form-select\"\n [ngClass]=\"getModalFormGroupInvalidClass('phoneNumberType')\">\n <option *ngFor=\"let t of phoneNumberTypes\" [ngValue]=\"t.code\">{{t.name}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('phoneNumberType','required')\">Phone Number Type is required</small>\n </div>\n </div>\n </div>\n <oepa-address [group]=\"getModalFormGroup('address')\" [showValidation]=\"true\"></oepa-address>\n <div class=\"row\">\n <div class=\"col-md-12\">\n <div class=\"form-group\">\n <label>Address Type</label>\n <select id=\"addressTypeSelect\" formControlName=\"addressType\" class=\"form-select\"\n [ngClass]=\"getModalFormGroupInvalidClass('addressType')\">\n <option *ngFor=\"let t of addressTypes\" [ngValue]=\"t.code\">{{t.name}}</option>\n </select>\n <small class=\"invalid-feedback\" *ngIf=\"getModalFormGroupHasError('addressType','required')\">Address Type is required</small>\n </div>\n </div>\n </div>\n </form>\n <div *ngIf=\"tableData && tableData.length > 0\" class=\"card\">\n <div class=\"card-header\">\n <b>Matching Person List&nbsp;</b><span class=\"badge bg-secondary\">{{tableData.length}}</span>\n </div>\n <div class=\"card-body\">\n <oepa-table tableId=\"personSearchTable\" [config]=\"tableConfig\" [data]=\"tableData\" [header]=\"tableHeader\" (rowSelected)=\"onRowSelect($event)\">\n </oepa-table>\n </div>\n </div>\n</div>\n<div class=\"modal-footer d-block\">\n <div *ngIf=\"inProgressMsg\"> \n <div class=\"alert alert-info\">\n {{inProgressMsg}}\n </div>\n </div>\n <div *ngIf=\"infoMessage && !inProgressMsg\">\n <div class=\"alert alert-info\">\n {{infoMessage}}\n </div>\n </div>\n <div *ngIf=\"errorMessage\">\n <div class=\"alert alert-danger\">\n {{errorMessage}}\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-12 text-center\">\n <span *ngIf=\"inProgressMsg\"><span class=\"spinner-border text-primary\" role=\"status\"></span></span>\n <button *ngIf=\"(!tableData || tableData.length === 0) && !inProgressMsg\" type=\"button\" class=\"btn btn-primary mr-2\"\n id=\"SavePersonBtn\"\n [disabled]=\"!modalFormGroup || modalFormGroup.invalid\"\n (click)=\"savePersonAfterSearch()\">Save</button>\n <button *ngIf=\"tableData && tableData.length > 0 && !selectedPerson && !inProgressMsg\" type=\"button\" class=\"btn btn-primary mr-2\"\n id=\"SavePersonWithoutSearchBtn\"\n [disabled]=\"modalFormGroup?.invalid\"\n (click)=\"savePerson()\">No Match, Save New Person</button>\n <button *ngIf=\"tableData && tableData.length > 0 && selectedPerson && !inProgressMsg\" type=\"button\" class=\"btn btn-primary mr-2\"\n id=\"SaveSelectedPersonBtn\"\n [disabled]=\"modalFormGroup?.invalid\"\n (click)=\"saveSelectedPerson()\">Use Selected Person</button>\n <button id=\"CancelPersonBtn\" type=\"button\" class=\"btn btn-primary\"\n (click)=\"bsModalRef.hide()\">Cancel</button>\n </div>\n </div>\n</div>" }]
313
+ }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.BsModalRef }, { type: i3.OepaFormsService }, { type: i4.EntityService }], propDecorators: { onPersonCreated: [{
314
+ type: Output
315
+ }] } });
316
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc29uLWNyZWF0ZS1tb2RhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2VudGl0eS9wZXJzb24tY3JlYXRlLW1vZGFsL3BlcnNvbi1jcmVhdGUtbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2VwYS11aS1saWIvc3JjL2xpYi9lbnRpdHkvcGVyc29uLWNyZWF0ZS1tb2RhbC9wZXJzb24tY3JlYXRlLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4RSxPQUFPLEVBQTBCLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxLQUFLLEVBQWMsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7QUFnQmpELE1BQU0sT0FBTywwQkFBMEI7SUF1QmpCO0lBQXdCO0lBQ2xDO0lBQ0E7SUF4QkgsY0FBYyxDQUFhO0lBQzNCLFlBQVksR0FBVyxFQUFFLENBQUM7SUFDMUIsV0FBVyxHQUFXLEVBQUUsQ0FBQztJQUN6QixhQUFhLEdBQVcsRUFBRSxDQUFDO0lBQzNCLE1BQU0sQ0FBb0I7SUFDMUIsY0FBYyxDQUF5QjtJQUN2QyxjQUFjLEdBQW9CLEVBQUUsQ0FBQztJQUNyQyxRQUFRLEdBQWtCLEVBQUUsQ0FBQztJQUFBLENBQUM7SUFDOUIsWUFBWSxHQUFvQixFQUFFLENBQUM7SUFBQSxDQUFDO0lBQ3BDLGdCQUFnQixHQUFvQixFQUFFLENBQUM7SUFBQSxDQUFDO0lBRXhDLFNBQVMsR0FBd0IsRUFBRSxDQUFDO0lBQ3BDLFdBQVcsQ0FB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TUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1lBQ3BJLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsV0FBVyxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBQ3hJLENBQUM7YUFBTSxDQUFDO1lBQ0osS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxZQUFZLENBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUE7WUFDbEosS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUE7WUFDOUksS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLElBQUksRUFBRSxDQUFDLENBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFDbkwsQ0FBQztRQUNELE9BQU87WUFDTCxLQUFLLEVBQUUsS0FBSztZQUNaLFVBQVUsRUFBRSxNQUFNO1lBQ2xCLFVBQVUsRUFBRSxJQUFJO1NBQ2pCLENBQUE7SUFDSCxDQUFDO0lBRU0sVUFBVTtRQUNmLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxhQUFhLEdBQUcsbUNBQW1DLENBQUM7UUFDekQsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQzNELElBQUksUUFBUSxFQUFFLENBQUM7Z0JBQ2IsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7Z0JBQ3hCLE1BQU0sQ0FBQyxFQUFFLEdBQUcsUUFBUSxDQUFDO2dCQUNyQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNwQyxDQUFDO1FBQ0gsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQ1AsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLFlBQVksR0FBRywwQkFBMEIsR0FBRyxHQUFHLENBQUM7UUFDdkQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sV0FBVyxDQUFDLEtBQVU7UUFDM0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO0lBQzVDLENBQUM7SUFFTSxrQkFBa0I7UUFDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxJQUFZO1FBQ25DLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFjLENBQUM7SUFDekQsQ0FBQztJQUVNLDZCQUE2QixDQUFDLElBQVk7UUFDL0MsT0FBTztZQUNMLFlBQVksRUFBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPO1NBQzFELENBQUM7SUFDSixDQUFDO0lBRU0seUJBQXlCLENBQUMsSUFBWSxFQUFFLEtBQWE7UUFDMUQsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUQsQ0FBQzt3R0F4VFUsMEJBQTBCOzRGQUExQiwwQkFBMEIsaUhDbkJ2QywrMExBNkdNOzs0RkQxRk8sMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNFLDBCQUEwQjtvS0F5QjFCLGVBQWU7c0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBFTVBUWSwgT2JzZXJ2YWJsZSwgZm9ya0pvaW4gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEJzTW9kYWxSZWYgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IE9FUEFQZXJzb24sIE9FUEFBZGRyZXNzLCBPRVBBUGhvbmVOdW1iZXIsIE9FUEFQcm9ncmFtIH0gZnJvbSAnQG9oaW9lcGEvb2VwYS1lYml6LWxpYic7XG5pbXBvcnQgeyBFbnRpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vZW50aXR5LnNlcnZpY2UnO1xuaW1wb3J0IHsgT0VQQVBlcnNvbkZpbHRlciB9IGZyb20gJ0BvaGlvZXBhL29lcGEtZWJpei1saWInO1xuaW1wb3J0IHsgT0VQQVJlZmVyZW5jZSB9IGZyb20gJ0BvaGlvZXBhL29lcGEtY29tbW9uLWxpYic7XG5pbXBvcnQgeyBPZXBhVGFibGVSb3cgfSBmcm9tICcuLi8uLi90YWJsZS9vZXBhLXRhYmxlLXJvdyc7XG5pbXBvcnQgeyBPZXBhVGFibGVIZWFkZXIgfSBmcm9tICcuLi8uLi90YWJsZS9vZXBhLXRhYmxlLWhlYWRlcic7XG5pbXBvcnQgeyBPZXBhVGFibGVDb25maWcgfSBmcm9tICcuLi8uLi90YWJsZS9vZXBhLXRhYmxlLWNvbmZpZyc7XG5pbXBvcnQgeyBPZXBhRm9ybXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vb2VwYS1mb3Jtcy5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnb2VwYS1wZXJzb24tY3JlYXRlLW1vZGFsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BlcnNvbi1jcmVhdGUtbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wZXJzb24tY3JlYXRlLW1vZGFsLmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBQZXJzb25DcmVhdGVNb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHB1YmxpYyBtb2RhbEZvcm1Hcm91cCE6IEZvcm1Hcm91cDtcbiAgcHVibGljIGVycm9yTWVzc2FnZTogc3RyaW5nID0gJyc7XG4gIHB1YmxpYyBpbmZvTWVzc2FnZTogc3RyaW5nID0gJyc7XG4gIHB1YmxpYyBpblByb2dyZXNzTXNnOiBzdHJpbmcgPSAnJztcbiAgcHVibGljIGZpbHRlciE6IE9FUEFQZXJzb25GaWx0ZXI7XG4gIHB1YmxpYyBzZWxlY3RlZFBlcnNvbjogT0VQQVBlcnNvbiB8IHVuZGVmaW5lZDtcbiAgcHVibGljIHBlcnNvblN1YlR5cGVzOiBPRVBBUmVmZXJlbmNlW10gPSBbXTtcbiAgcHVibGljIHByb2dyYW1zOiBPRVBBUHJvZ3JhbVtdID0gW107O1xuICBwdWJsaWMgYWRkcmVzc1R5cGVzOiBPRVBBUmVmZXJlbmNlW10gPSBbXTs7XG4gIHB1YmxpYyBwaG9uZU51bWJlclR5cGVzOiBPRVBBUmVmZXJlbmNlW10gPSBbXTs7XG5cbiAgcHVibGljIHRhYmxlRGF0YTogQXJyYXk8T2VwYVRhYmxlUm93PiA9IFtdO1xuICBwdWJsaWMgdGFibGVIZWFkZXIhOiBPZXBhVGFibGVIZWFkZXI7XG5cbiAgcHVibGljIHRhYmxlQ29uZmlnOiBPZXBhVGFibGVDb25maWcgPSB7XG4gICAgcm93c1BlclBhZ2U6IDUsXG4gICAgY2xhc3NOYW1lczogWyd0YWJsZS1zdHJpcGVkJywgJ3RhYmxlLWJvcmRlcmVkJywgJ3RhYmxlLXNtJ11cbiAgfTtcblxuXG4gIEBPdXRwdXQoKSBvblBlcnNvbkNyZWF0ZWQ6IEV2ZW50RW1pdHRlcjxPRVBBUGVyc29uPiA9IG5ldyBFdmVudEVtaXR0ZXI8T0VQQVBlcnNvbj4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlciwgcHVibGljIGJzTW9kYWxSZWY6IEJzTW9kYWxSZWYsIFxuICAgIHByaXZhdGUgZm9ybVNlcnZpY2U6IE9lcGFGb3Jtc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbnRpdHlTZXJ2aWNlOiBFbnRpdHlTZXJ2aWNlKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmxvYWRSZWZlcmVuY2VEYXRhKCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IHJlc3VsdHMgPT4ge1xuICAgICAgdGhpcy5jcmVhdGVGb3JtKCk7ICAgIFxuICAgIH0sIGVycm9yOiBlcnIgPT4ge1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnQW4gaW5pdGlhbGl6YXRpb24gZXJyb3Igb2NjdXJyZWQ6ICcgKyBlcnI7XG4gICAgfX0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2FkUmVmZXJlbmNlRGF0YSgpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGxldCB0YXNrcyA9IFtdO1xuICAgIHRhc2tzLnB1c2godGhpcy5yZXRyaWV2ZVBlcnNvblR5cGVzKCkpO1xuICAgIHRhc2tzLnB1c2godGhpcy5yZXRyaWV2ZVByb2dyYW1zKCkpO1xuICAgIHRhc2tzLnB1c2godGhpcy5yZXRyaWV2ZUFkZHJlc3NUeXBlcygpKTtcbiAgICB0YXNrcy5wdXNoKHRoaXMucmV0cmlldmVQaG9uZU51bWJlclR5cGVzKCkpO1xuICAgIHJldHVybiBmb3JrSm9pbih0YXNrcyk7XG4gIH1cblxuICBwcml2YXRlIHJldHJpZXZlUGVyc29uVHlwZXMoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5lbnRpdHlTZXJ2aWNlLnJldHJpZXZlUGVyc29uVHlwZXMoKS5waXBlKFxuICAgICAgbWFwKHR5cGVzID0+IHtcbiAgICAgIHRoaXMucGVyc29uU3ViVHlwZXMgPSBbXTtcbiAgICAgIGlmICh0eXBlcyAmJiB0eXBlcy5sZW5ndGgpIHtcbiAgICAgICAgdHlwZXMuZm9yRWFjaCh0eXBlID0+IHtcbiAgICAgICAgICB0aGlzLnBlcnNvblN1YlR5cGVzLnB1c2godHlwZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMucGVyc29uU3ViVHlwZXMubGVuZ3RoO1xuICAgIH0pLCBjYXRjaEVycm9yKGVyciA9PiB7XG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdBbiBpbml0aWFsaXphdGlvbiBlcnJvciBvY2N1cnJlZDogJyArIGVycjtcbiAgICAgIHJldHVybiBFTVBUWTtcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHJldHJpZXZlUHJvZ3JhbXMoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5lbnRpdHlTZXJ2aWNlLnJldHJpZXZlUHJvZ3JhbXMoKS5waXBlKFxuICAgICAgbWFwKHByb2dyYW1zID0+IHtcbiAgICAgIHRoaXMucHJvZ3JhbXMgPSBbXTtcbiAgICAgIGlmIChwcm9ncmFtcyAmJiBwcm9ncmFtcy5sZW5ndGgpIHtcbiAgICAgICAgcHJvZ3JhbXMuZm9yRWFjaChwcm9ncmFtID0+IHtcbiAgICAgICAgICB0aGlzLnByb2dyYW1zLnB1c2gocHJvZ3JhbSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMucHJvZ3JhbXMubGVuZ3RoO1xuICAgIH0pLCBjYXRjaEVycm9yKGVyciA9PiB7XG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdBbiBpbml0aWFsaXphdGlvbiBlcnJvciBvY2N1cnJlZDogJyArIGVycjtcbiAgICAgIHJldHVybiBFTVBUWTtcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIHJldHJpZXZlQWRkcmVzc1R5cGVzKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuZW50aXR5U2VydmljZS5yZXRyaWV2ZUFkZHJlc3NUeXBlcygpLnBpcGUoXG4gICAgICBtYXAodHlwZXMgPT4ge1xuICAgICAgdGhpcy5hZGRyZXNzVHlwZXMgPSBbXTtcbiAgICAgIGlmICh0eXBlcyAmJiB0eXBlcy5sZW5ndGgpIHtcbiAgICAgICAgdHlwZXMuZm9yRWFjaCh0eXBlID0+IHtcbiAgICAgICAgICB0aGlzLmFkZHJlc3NUeXBlcy5wdXNoKHR5cGUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmFkZHJlc3NUeXBlcy5sZW5ndGg7XG4gICAgfSksIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ0FuIGluaXRpYWxpemF0aW9uIGVycm9yIG9jY3VycmVkOiAnICsgZXJyO1xuICAgICAgcmV0dXJuIEVNUFRZO1xuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgcmV0cmlldmVQaG9uZU51bWJlclR5cGVzKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuZW50aXR5U2VydmljZS5yZXRyaWV2ZVRlbGVwaG9uZVR5cGVzKCkucGlwZShcbiAgICAgIG1hcCh0eXBlcyA9PiB7XG4gICAgICB0aGlzLnBob25lTnVtYmVyVHlwZXMgPSBbXTtcbiAgICAgIGlmICh0eXBlcyAmJiB0eXBlcy5sZW5ndGgpIHtcbiAgICAgICAgdHlwZXMuZm9yRWFjaCh0eXBlID0+IHtcbiAgICAgICAgICB0aGlzLnBob25lTnVtYmVyVHlwZXMucHVzaCh0eXBlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5waG9uZU51bWJlclR5cGVzLmxlbmd0aDtcbiAgICB9KSwgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnQW4gaW5pdGlhbGl6YXRpb24gZXJyb3Igb2NjdXJyZWQ6ICcgKyBlcnI7XG4gICAgICByZXR1cm4gRU1QVFk7XG4gICAgfSkpO1xuICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUZvcm0oKSB7XG4gICAgdGhpcy5tb2RhbEZvcm1Hcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgcGVyc29uVHlwZTogWydSVlBFUicsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgICBwcm9ncmFtOiBbbnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIGNvbnRhY3Q6IHRoaXMuZmIuZ3JvdXAoeyBcbiAgICAgICAgICBmaXJzdE5hbWU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDUwKV1dLFxuICAgICAgICAgIG1pZGRsZU5hbWU6IFsnJ10sXG4gICAgICAgICAgbGFzdE5hbWU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDUwKV1dLFxuICAgICAgICAgIHBob25lTnVtYmVyOiBbJyddLFxuICAgICAgICAgIGZheE51bWJlcjogWycnLCBbXV0sXG4gICAgICAgICAgZW1haWxBZGRyZXNzOiBbJycsIFtWYWxpZGF0b3JzLmVtYWlsLCBWYWxpZGF0b3JzLm1heExlbmd0aCgyNTQpXV1cbiAgICAgIH0pLFxuICAgICAgYWRkcmVzc1R5cGU6IFsnQklMTEknLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgICAgYWRkcmVzczogdGhpcy5mYi5ncm91cCh0aGlzLmZvcm1TZXJ2aWNlLmJ1aWxkQWRkcmVzc0Zvcm1XaXRoQ291bnRyeSh7fSkpLFxuICAgICAgYXJlYUNvZGU6ICcnLFxuICAgICAgcGhvbmVOdW1iZXJUeXBlOiBbJ09GRklDJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIHBob25lTnVtYmVyOiAnJyxcbiAgICAgIGV4dGVuc2lvbjogJydcbiAgICB9KTtcbiAgICB0aGlzLm1vZGFsRm9ybUdyb3VwLmNvbnRyb2xzWydhZGRyZXNzJ10uZ2V0KCdzdGF0ZScpPy5zZXRWYWx1ZSh1bmRlZmluZWQpO1xuICAgXG4gICAgdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1snYWRkcmVzcyddLmdldCgnY291bnRyeScpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKGNvdW50cnk9PntcbiAgICAgIFxuICAgICAgaWYoY291bnRyeSA9PT0gJ1VTQScpe1xuICAgICAgICB0aGlzLm1vZGFsRm9ybUdyb3VwLmNvbnRyb2xzWydhZGRyZXNzJ10uZ2V0KCdzdGF0ZScpPy5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSk7XG4gICAgICAgIHRoaXMubW9kYWxGb3JtR3JvdXAuY29udHJvbHNbJ2FkZHJlc3MnXS5nZXQoJ3N0YXRlJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1snYWRkcmVzcyddLmdldCgncG9zdGFsQ29kZScpPy5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBWYWxpZGF0b3JzLnBhdHRlcm4oJ1swLTldezV9JyldKTtcbiAgICAgICAgdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1snYWRkcmVzcyddLmdldCgncG9zdGFsQ29kZScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIHRoaXMubW9kYWxGb3JtR3JvdXAuY29udHJvbHNbJ2FkZHJlc3MnXS5nZXQoJ2ZvcmVpZ25TdGF0ZScpPy5jbGVhclZhbGlkYXRvcnMoKTtcbiAgICAgICAgdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1snYWRkcmVzcyddLmdldCgnZm9yZWlnblN0YXRlJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1snYWRkcmVzcyddLmdldCgnZm9yZWlnblppcCcpPy5jbGVhclZhbGlkYXRvcnMoKTtcbiAgICAgICAgdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1snYWRkcmVzcyddLmdldCgnZm9yZWlnblppcCcpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm1vZGFsRm9ybUdyb3VwLmNvbnRyb2xzWydhZGRyZXNzJ10uZ2V0KCdmb3JlaWduU3RhdGUnKT8uc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xuICAgICAgICB0aGlzLm1vZGFsRm9ybUdyb3VwLmNvbnRyb2xzWydhZGRyZXNzJ10uZ2V0KCdmb3JlaWduU3RhdGUnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgICB0aGlzLm1vZGFsRm9ybUdyb3VwLmNvbnRyb2xzWydhZGRyZXNzJ10uZ2V0KCdmb3JlaWduWmlwJyk/LnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcbiAgICAgICAgdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1snYWRkcmVzcyddLmdldCgnZm9yZWlnblppcCcpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIHRoaXMubW9kYWxGb3JtR3JvdXAuY29udHJvbHNbJ2FkZHJlc3MnXS5nZXQoJ3N0YXRlJyk/LmNsZWFyVmFsaWRhdG9ycygpO1xuICAgICAgICB0aGlzLm1vZGFsRm9ybUdyb3VwLmNvbnRyb2xzWydhZGRyZXNzJ10uZ2V0KCdzdGF0ZScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIHRoaXMubW9kYWxGb3JtR3JvdXAuY29udHJvbHNbJ2FkZHJlc3MnXS5nZXQoJ3Bvc3RhbENvZGUnKT8uY2xlYXJWYWxpZGF0b3JzKCk7XG4gICAgICAgIHRoaXMubW9kYWxGb3JtR3JvdXAuY29udHJvbHNbJ2FkZHJlc3MnXS5nZXQoJ3Bvc3RhbENvZGUnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgICAgfVxuICAgICAgXG4gICAgfSlcbiAgICBcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmlsdGVyRnJvbUZvcm0oKTogT0VQQVBlcnNvbkZpbHRlciB7XG4gICAgbGV0IGZpbHRlcjogT0VQQVBlcnNvbkZpbHRlciA9IHtcbiAgICAgIGZpcnN0TmFtZTogdGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2NvbnRhY3QnKT8uZ2V0KCdmaXJzdE5hbWUnKT8udmFsdWUsXG4gICAgICBtaWRkbGVOYW1lOiB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnY29udGFjdCcpPy5nZXQoJ21pZGRsZU5hbWUnKT8udmFsdWUsXG4gICAgICBsYXN0TmFtZTogdGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2NvbnRhY3QnKT8uZ2V0KCdsYXN0TmFtZScpPy52YWx1ZSxcbiAgICAgIGFkZHJlc3M6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnbGluZTEnKT8udmFsdWUsXG4gICAgICBjaXR5OiB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzcycpPy5nZXQoJ2NpdHknKT8udmFsdWUsXG4gICAgICBzdGF0ZTogdGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKT8uZ2V0KCdjb3VudHJ5Jyk/LnZhbHVlID09PSdVU0EnID8gdGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKT8uZ2V0KCdzdGF0ZScpPy52YWx1ZTpudWxsLFxuICAgICAgemlwQ29kZTogdGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKT8uZ2V0KCdjb3VudHJ5Jyk/LnZhbHVlID09PSdVU0EnID8gdGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKT8uZ2V0KCdwb3N0YWxDb2RlJyk/LnZhbHVlOnRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnZm9yZWlnblppcCcpPy52YWx1ZSxcbiAgICAgIGZvcmVpZ25TdGF0ZTp0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzcycpPy5nZXQoJ2NvdW50cnknKT8udmFsdWUgIT09J1VTQScgPyB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzcycpPy5nZXQoJ2ZvcmVpZ25TdGF0ZScpPy52YWx1ZTpudWxsLFxuICAgICAgY291bnRyeTp0aGlzLmZvcm1TZXJ2aWNlLmdldENvdW50cnlDb2RlKHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnY291bnRyeScpPy52YWx1ZSksXG4gICAgfTtcbiAgICByZXR1cm4gZmlsdGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQZXJzb25Gcm9tRm9ybSgpOiBPRVBBUGVyc29uIHtcbiAgICBsZXQgYWRkcmVzczogT0VQQUFkZHJlc3MgPSB7XG4gICAgICBhZGRyZXNzVHlwZToge2NvZGU6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzVHlwZScpPy52YWx1ZSB9LFxuICAgICAgcHJvZ3JhbTogdGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ3Byb2dyYW0nKT8udmFsdWUsXG4gICAgICBhZGRyZXNzOiB7XG4gICAgICAgIHR5cGU6dGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKT8uZ2V0KCdjb3VudHJ5Jyk/LnZhbHVlICE9PSdVU0EnPyAnRk9SRU4nOicnICxcbiAgICAgICAgYWRkcmVzc0xpbmUxOiB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzcycpPy5nZXQoJ2xpbmUxJyk/LnZhbHVlLFxuICAgICAgICBhZGRyZXNzTGluZTI6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnbGluZTInKT8udmFsdWUsXG4gICAgICAgIGNpdHk6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnY2l0eScpPy52YWx1ZSxcbiAgICAgICAgc3RhdGU6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnY291bnRyeScpPy52YWx1ZSA9PT0nVVNBJyA/IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnc3RhdGUnKT8udmFsdWU6bnVsbCxcbiAgICAgICAgemlwOiB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzcycpPy5nZXQoJ2NvdW50cnknKT8udmFsdWUgPT09J1VTQScgPyB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzcycpPy5nZXQoJ3Bvc3RhbENvZGUnKT8udmFsdWU6dGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKT8uZ2V0KCdmb3JlaWduWmlwJyk/LnZhbHVlLFxuICAgICAgICBmb3JlaWduU3RhdGU6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnY291bnRyeScpPy52YWx1ZSAhPT0nVVNBJyA/IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnZm9yZWlnblN0YXRlJyk/LnZhbHVlOm51bGwsXG4gICAgICAgIGNvdW50cnk6dGhpcy5mb3JtU2VydmljZS5nZXRDb3VudHJ5Q29kZSh0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnYWRkcmVzcycpPy5nZXQoJ2NvdW50cnknKT8udmFsdWUpLFxuICAgICAgfVxuICAgIH1cbiAgICBsZXQgcGhvbmU6IE9FUEFQaG9uZU51bWJlciA9IHtcbiAgICAgIHBob25lTnVtYmVyVHlwZTogeyBjb2RlOiB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgncGhvbmVOdW1iZXJUeXBlJyk/LnZhbHVlIH0sXG4gICAgICBwcm9ncmFtOiB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgncHJvZ3JhbScpPy52YWx1ZSxcbiAgICAgIHBob25lTnVtYmVyOiB7XG4gICAgICAgIHBob25lTnVtYmVyOiB0aGlzLm1vZGFsRm9ybUdyb3VwLmdldCgnY29udGFjdCcpPy5nZXQoJ3Bob25lTnVtYmVyJyk/LnZhbHVlXG4gICAgICB9XG4gICAgfTtcbiAgICBsZXQgcGVyc29uOiBPRVBBUGVyc29uID0ge1xuICAgICAgcGVyc29uVHlwZToge2NvZGU6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdwZXJzb25UeXBlJyk/LnZhbHVlIH0sXG4gICAgICBmaXJzdE5hbWU6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdjb250YWN0Jyk/LmdldCgnZmlyc3ROYW1lJyk/LnZhbHVlLFxuICAgICAgbWlkZGxlTmFtZTogdGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2NvbnRhY3QnKT8uZ2V0KCdtaWRkbGVOYW1lJyk/LnZhbHVlLFxuICAgICAgbGFzdE5hbWU6IHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdjb250YWN0Jyk/LmdldCgnbGFzdE5hbWUnKT8udmFsdWUsXG4gICAgICBhZGRyZXNzTGlzdDogWyBhZGRyZXNzIF0sXG4gICAgICBwaG9uZU51bWJlckxpc3Q6IFtwaG9uZSBdXG4gICAgfTtcbiAgICByZXR1cm4gcGVyc29uO1xuICB9XG5cbiAgcHVibGljIHNhdmVQZXJzb25BZnRlclNlYXJjaCgpIHtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMudGFibGVEYXRhID0gW107XG4gICAgdGhpcy5idWlsZFRhYmxlSGVhZGVyKCk7XG4gICAgbGV0IGZpbHRlciA9IHRoaXMuZ2V0RmlsdGVyRnJvbUZvcm0oKTtcbiAgICB0aGlzLmluUHJvZ3Jlc3NNc2cgPSAnQ2hlY2tpbmcgdG8gc2VlIGlmIHBlcnNvbiBleGlzdHMuLi4nO1xuICAgIHRoaXMuZW50aXR5U2VydmljZS5tYXRjaFBlcnNvbnMoZmlsdGVyKS5zdWJzY3JpYmUobWF0Y2hlcyA9PiB7XG4gICAgICB0aGlzLmluUHJvZ3Jlc3NNc2cgPSAnJztcbiAgICAgIGlmICghbWF0Y2hlcyB8fCBtYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLnNhdmVQZXJzb24oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1hdGNoZXMuZm9yRWFjaChwZXJzb24gPT4ge1xuICAgICAgICAgIGxldCByb3cgPSB0aGlzLmNvbnZlcnRQZXJzb25Ub1RhYmxlUm93KHBlcnNvbik7XG4gICAgICAgICAgdGhpcy50YWJsZURhdGEucHVzaChyb3cpO1xuICAgICAgICAgIHRoaXMudGFibGVEYXRhID0gdGhpcy50YWJsZURhdGEuc2xpY2UoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaW5mb01lc3NhZ2UgPSAnUGxlYXNlIGNoZWNrIHRoZSB0YWJsZSBhYm92ZSBhbmQgc2VsZWN0IGEgcGVyc29uIGZyb20gdGhlIHRhYmxlIGlmIGl0IGlzIHRoZSBzYW1lIGFzIHRoZSBwZXJzb24geW91IGFyZSBhdHRlbXB0aW5nIHRvIGNyZWF0ZS4nO1xuICAgICAgfVxuICAgIH0sIGVyciA9PiB7XG4gICAgICB0aGlzLmluUHJvZ3Jlc3NNc2cgPSAnJztcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ0ZhaWxlZCBzZWFyY2hpbmcgZm9yIGV4aXN0aW5nIHBlcnNvbjogJyArIGVycjtcbiAgICB9KTtcbiAgfVxucHJpdmF0ZSBidWlsZFRhYmxlSGVhZGVyKCl7XG4gICAgdGhpcy50YWJsZUhlYWRlciA9IHtcbiAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAgICB7IHRpdGxlOiAnJywgaWQ6ICdzZWxlY3QnLCBzb3J0OiAnbm9uZScsIHNpbmdsZVNlbGVjdENvbHVtbjogdHJ1ZSwgY2xhc3NOYW1lOiAnc2VsZWN0LWNvbCcgfSxcbiAgICAgICAgICB7IHRpdGxlOiAnSUQnLCBpZDogJ2lkJywgc29ydDogJ25vbmUnLCBmaWx0ZXJhYmxlOiB0cnVlIH0sXG4gICAgICAgICAgeyB0aXRsZTogJ1R5cGUnLCBpZDogJ3R5cGUnLCBzb3J0OiAnbm9uZScsIGZpbHRlcmFibGU6IHRydWUgfSxcbiAgICAgICAgICB7IHRpdGxlOiAnTmFtZScsIGlkOiAnbmFtZScsIHNvcnQ6ICdub25lJywgZmlsdGVyYWJsZTogdHJ1ZSB9LFxuICAgICAgICAgIHsgdGl0bGU6ICdBZGRyZXNzJywgaWQ6ICdhZGRyZXNzJywgc29ydDogJ25vbmUnLCBmaWx0ZXJhYmxlOiB0cnVlIH0sXG4gICAgICAgICAgeyB0aXRsZTogJ0NpdHknLCBpZDogJ2NpdHknLCBzb3J0OiAnbm9uZScsIGZpbHRlcmFibGU6IHRydWUgfSxcbiAgICAgICAgICBcbiAgICAgIF1cbiAgfTtcbiAgXG4gIGlmKHRoaXMubW9kYWxGb3JtR3JvdXAuZ2V0KCdhZGRyZXNzJyk/LmdldCgnY291bnRyeScpPy52YWx1ZSA9PT0gJ1VTQScpe1xuICAgIHRoaXMudGFibGVIZWFkZXIuY29sdW1ucy5wdXNoKHsgdGl0bGU6ICdTdGF0ZScsIGlkOiAnc3RhdGUnLCBzb3J0OiAnbm9uZScsIGZpbHRlcmFibGU6IHRydWUgfSlcbiAgICB0aGlzLnRhYmxlSGVhZGVyLmNvbHVtbnMucHVzaCh7IHRpdGxlOiAnWmlwIENvZGUnLCBpZDogJ3ppcENvZGUnLCBzb3J0OiAnbm9uZScsIGZpbHRlcmFibGU6IHRydWUgfSlcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnRhYmxlSGVhZGVyLmNvbHVtbnMucHVzaCh7IHRpdGxlOiAnZm9yZWlnblN0YXRlJywgaWQ6ICdmb3JlaWduU3RhdGUnLCBzb3J0OiAnbm9uZScsIGZpbHRlcmFibGU6IHRydWUgfSlcbiAgICB0aGlzLnRhYmxlSGVhZGVyLmNvbHVtbnMucHVzaCh7IHRpdGxlOiAnZm9yZWlnblppcCcsIGlkOiAnZm9yZWlnblppcCcsIHNvcnQ6ICdub25lJywgZmlsdGVyYWJsZTogdHJ1ZSB9KVxuICAgIHRoaXMudGFibGVIZWFkZXIuY29sdW1ucy5wdXNoKHsgdGl0bGU6ICdjb3VudHJ5JywgaWQ6ICdjb3VudHJ5Jywgc29ydDogJ25vbmUnLCBmaWx0ZXJhYmxlOiB0cnVlIH0pO1xuICB9XG4gIFxuXG4gIH1cblxuICAgIHByaXZhdGUgY29udmVydFBlcnNvblRvVGFibGVSb3cocGVyc29uOiBPRVBBUGVyc29uKTogT2VwYVRhYmxlUm93IHtcblxuICAgICBsZXQgY2VsbHM6QXJyYXk8YW55Pj0gW1xuICAgICAgICB7IGlkOiAnaWQnLCB2YWx1ZTogcGVyc29uLmlkIH0sXG4gICAgICAgIHsgaWQ6ICd0eXBlJywgdmFsdWU6IHBlcnNvbi5wZXJzb25UeXBlID8gcGVyc29uLnBlcnNvblR5cGUubmFtZSA6ICcnIH0sXG4gICAgICAgIHsgaWQ6ICduYW1lJywgdmFsdWU6IHBlcnNvbi5uYW1lIH0sXG4gICAgICAgIHsgaWQ6ICdhZGRyZXNzJywgdmFsdWU6IHBlcnNvbi5hZGRyZXNzTGlzdCAmJiBwZXJzb24uYWRkcmVzc0xpc3QubGVuZ3RoID4gMCA/IHBlcnNvbi5hZGRyZXNzTGlzdFswXS5hZGRyZXNzPy5hZGRyZXNzTGluZTEgIDogJycgfSxcbiAgICAgICAgeyBpZDogJ2NpdHknLCB2YWx1ZTogcGVyc29uLmFkZHJlc3NMaXN0ICYmIHBlcnNvbi5hZGRyZXNzTGlzdC5sZW5ndGggPiAwID8gcGVyc29uLmFkZHJlc3NMaXN0WzBdLmFkZHJlc3M/LmNpdHkgIDogJycgfSxcbiAgICAgICAgICAgIF07XG4gICAgaWYodGhpcy5tb2RhbEZvcm1Hcm91cC5nZXQoJ2FkZHJlc3MnKT8uZ2V0KCdjb3VudHJ5Jyk/LnZhbHVlID09PSAnVVNBJyl7XG4gICAgICAgIGNlbGxzLnB1c2goeyBpZDogJ3N0YXRlJywgdmFsdWU6IHBlcnNvbi5hZGRyZXNzTGlzdCAmJiBwZXJzb24uYWRkcmVzc0xpc3QubGVuZ3RoID4gMCA/IHBlcnNvbi5hZGRyZXNzTGlzdFswXS5hZGRyZXNzPy5zdGF0ZSAgOiAnJyB9KVxuICAgICAgICBjZWxscy5wdXNoKHsgaWQ6ICd6aXBDb2RlJywgdmFsdWU6IHBlcnNvbi5hZGRyZXNzTGlzdCAmJiBwZXJzb24uYWRkcmVzc0xpc3QubGVuZ3RoID4gMCA/IHBlcnNvbi5hZGRyZXNzTGlzdFswXS5hZGRyZXNzPy56aXAgIDogJycgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgICBjZWxscy5wdXNoKHsgaWQ6ICdmb3JlaWduU3RhdGUnLCB2YWx1ZTogcGVyc29uLmFkZHJlc3NMaXN0ICYmIHBlcnNvbi5hZGRyZXNzTGlzdC5sZW5ndGggPiAwID8gcGVyc29uLmFkZHJlc3NMaXN0WzBdLmFkZHJlc3M/LmZvcmVpZ25TdGF0ZSAgOiAnJyB9KVxuICAgICAgICBjZWxscy5wdXNoKHsgaWQ6ICdmb3JlaWduWmlwJywgdmFsdWU6IHBlcnNvbi5hZGRyZXNzTGlzdCAmJiBwZXJzb24uYWRkcmVzc0xpc3QubGVuZ3RoID4gMCA/IHBlcnNvbi5hZGRyZXNzTGlzdFswXS5hZGRyZXNzPy5mb3JlaWduWmlwICA6ICcnIH0pXG4gICAgICAgIGNlbGxzLnB1c2goeyBpZDogJ2NvdW50cnknLCB2YWx1ZTogcGVyc29uLmFkZHJlc3NMaXN0ICYmIHBlcnNvbi5hZGRyZXNzTGlzdC5sZW5ndGggPiAwID8gdGhpcy5mb3JtU2VydmljZS5nZXRDb3VudHJ5TmFtZShwZXJzb24uYWRkcmVzc0xpc3RbMF0uYWRkcmVzcz8uY291bnRyeSB8fCAnJykgIDogJycgfSlcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGNlbGxzOiBjZWxscyxcbiAgICAgIGRhdGFTb3VyY2U6IHBlcnNvbixcbiAgICAgIHNlbGVjdGFibGU6IHRydWVcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2F2ZVBlcnNvbigpIHtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMuaW5Qcm9ncmVzc01zZyA9ICdDcmVhdGluZyByZWNvcmQgZm9yIG5ldyBwZXJzb24uLi4nO1xuICAgIGxldCBwZXJzb24gPSB0aGlzLmdldFBlcnNvbkZyb21Gb3JtKCk7XG4gICAgdGhpcy5lbnRpdHlTZXJ2aWNlLmNyZWF0ZVBlcnNvbihwZXJzb24pLnN1YnNjcmliZShwZXJzb25JRCA9PiB7XG4gICAgICBpZiAocGVyc29uSUQpIHtcbiAgICAgICAgdGhpcy5pblByb2dyZXNzTXNnID0gJyc7XG4gICAgICAgIHBlcnNvbi5pZCA9IHBlcnNvbklEO1xuICAgICAgICB0aGlzLm9uUGVyc29uQ3JlYXRlZC5lbWl0KHBlcnNvbik7XG4gICAgICB9XG4gICAgfSwgZXJyID0+IHtcbiAgICAgIHRoaXMuaW5Qcm9ncmVzc01zZyA9ICcnO1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnRmFpbGVkIGNyZWF0aW5nIHBlcnNvbjogJyArIGVycjtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvblJvd1NlbGVjdChldmVudDogYW55KSB7XG4gICAgdGhpcy5zZWxlY3RlZFBlcnNvbiA9IGV2ZW50WzBdLmRhdGFTb3VyY2U7XG4gIH1cblxuICBwdWJsaWMgc2F2ZVNlbGVjdGVkUGVyc29uKCkge1xuICAgIHRoaXMub25QZXJzb25DcmVhdGVkLmVtaXQodGhpcy5zZWxlY3RlZFBlcnNvbik7XG4gIH1cbiAgXG4gIHB1YmxpYyBnZXRNb2RhbEZvcm1Hcm91cChuYW1lOiBzdHJpbmcpIDogRm9ybUdyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5tb2RhbEZvcm1Hcm91cC5jb250cm9sc1tuYW1lXSBhcyBGb3JtR3JvdXA7XG4gIH1cblxuICBwdWJsaWMgZ2V0TW9kYWxGb3JtR3JvdXBJbnZhbGlkQ2xhc3MobmFtZTogc3RyaW5nKSA6IGFueSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdpcy1pbnZhbGlkJyA6IHRoaXMubW9kYWxGb3JtR3JvdXAuY29udHJvbHNbbmFtZV0uaW52YWxpZFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0TW9kYWxGb3JtR3JvdXBIYXNFcnJvcihuYW1lOiBzdHJpbmcsIGZpZWxkOiBzdHJpbmcpIDogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubW9kYWxGb3JtR3JvdXAuY29udHJvbHNbbmFtZV0uaGFzRXJyb3IoZmllbGQpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyXCI+XG4gICAgPGg0IGNsYXNzPVwibW9kYWwtdGl0bGUgcHVsbC1sZWZ0XCI+Q3JlYXRlIFBlcnNvbjwvaDQ+XG4gICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4tY2xvc2UgZmxvYXQtZW5kXCIgYXJpYS1sYWJlbD1cIkNsb3NlXCIgKGNsaWNrKT1cImJzTW9kYWxSZWYuaGlkZSgpXCI+XG4gICAgICAgIFxuICAgIDwvYnV0dG9uPlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwibW9kYWwtYm9keVwiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIW1vZGFsRm9ybUdyb3VwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5Jbml0aWFsaXppbmcuLi48L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPjxzcGFuIGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgdGV4dC1wcmltYXJ5XCIgcm9sZT1cInN0YXR1c1wiPjwvc3Bhbj48L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPGZvcm0gKm5nSWY9XCJtb2RhbEZvcm1Hcm91cFwiIFtmb3JtR3JvdXBdPVwibW9kYWxGb3JtR3JvdXBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbD5QZXJzb24gVHlwZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJwZXJzb25UeXBlU2VsZWN0XCIgZm9ybUNvbnRyb2xOYW1lPVwicGVyc29uVHlwZVwiIGNsYXNzPVwiZm9ybS1zZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRNb2RhbEZvcm1Hcm91cEludmFsaWRDbGFzcygncGVyc29uVHlwZScpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB0IG9mIHBlcnNvblN1YlR5cGVzXCIgW25nVmFsdWVdPVwidC5jb2RlXCI+e3t0Lm5hbWV9fTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwiZ2V0TW9kYWxGb3JtR3JvdXBIYXNFcnJvcigncGVyc29uVHlwZScsJ3JlcXVpcmVkJylcIj5QZXJzb24gVHlwZSBpcyByZXF1aXJlZDwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICA8bGFiZWw+UHJvZ3JhbTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJwcm9ncmFtU2VsZWN0XCIgZm9ybUNvbnRyb2xOYW1lPVwicHJvZ3JhbVwiIGNsYXNzPVwiZm9ybS1zZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRNb2RhbEZvcm1Hcm91cEludmFsaWRDbGFzcygncHJvZ3JhbScpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB0IG9mIHByb2dyYW1zXCIgW25nVmFsdWVdPVwidFwiPnt7dC5uYW1lfX08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cImdldE1vZGFsRm9ybUdyb3VwSGFzRXJyb3IoJ3Byb2dyYW0nLCdyZXF1aXJlZCcpXCI+UHJvZ3JhbSBpcyByZXF1aXJlZDwvc21hbGw+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxvZXBhLWNvbnRhY3QgW2dyb3VwXT1cImdldE1vZGFsRm9ybUdyb3VwKCdjb250YWN0JylcIlxuICAgICAgICAgICAgICAgIFtzaG93TWlkZGxlTmFtZV09XCJ0cnVlXCIgW25vRmF4XT1cInRydWVcIiBbbm9FbWFpbF09XCJ0cnVlXCIgW3Nob3dWYWxpZGF0aW9uXT1cInRydWVcIj48L29lcGEtY29udGFjdD5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbD5QaG9uZSBOdW1iZXIgVHlwZTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgaWQ9XCJwaG9uZU51bWJlclR5cGVTZWxlY3RcIiBmb3JtQ29udHJvbE5hbWU9XCJwaG9uZU51bWJlclR5cGVcIiBjbGFzcz1cImZvcm0tc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0TW9kYWxGb3JtR3JvdXBJbnZhbGlkQ2xhc3MoJ3Bob25lTnVtYmVyVHlwZScpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB0IG9mIHBob25lTnVtYmVyVHlwZXNcIiBbbmdWYWx1ZV09XCJ0LmNvZGVcIj57e3QubmFtZX19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJnZXRNb2RhbEZvcm1Hcm91cEhhc0Vycm9yKCdwaG9uZU51bWJlclR5cGUnLCdyZXF1aXJlZCcpXCI+UGhvbmUgTnVtYmVyIFR5cGUgaXMgcmVxdWlyZWQ8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8b2VwYS1hZGRyZXNzIFtncm91cF09XCJnZXRNb2RhbEZvcm1Hcm91cCgnYWRkcmVzcycpXCIgW3Nob3dWYWxpZGF0aW9uXT1cInRydWVcIj48L29lcGEtYWRkcmVzcz5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbD5BZGRyZXNzIFR5cGU8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPVwiYWRkcmVzc1R5cGVTZWxlY3RcIiBmb3JtQ29udHJvbE5hbWU9XCJhZGRyZXNzVHlwZVwiIGNsYXNzPVwiZm9ybS1zZWxlY3RcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRNb2RhbEZvcm1Hcm91cEludmFsaWRDbGFzcygnYWRkcmVzc1R5cGUnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgdCBvZiBhZGRyZXNzVHlwZXNcIiBbbmdWYWx1ZV09XCJ0LmNvZGVcIj57e3QubmFtZX19PC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJnZXRNb2RhbEZvcm1Hcm91cEhhc0Vycm9yKCdhZGRyZXNzVHlwZScsJ3JlcXVpcmVkJylcIj5BZGRyZXNzIFR5cGUgaXMgcmVxdWlyZWQ8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZm9ybT5cbiAgICA8ZGl2ICpuZ0lmPVwidGFibGVEYXRhICYmIHRhYmxlRGF0YS5sZW5ndGggPiAwXCIgY2xhc3M9XCJjYXJkXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlclwiPlxuICAgICAgICAgICAgPGI+TWF0Y2hpbmcgUGVyc29uIExpc3QmbmJzcDs8L2I+PHNwYW4gY2xhc3M9XCJiYWRnZSBiZy1zZWNvbmRhcnlcIj57e3RhYmxlRGF0YS5sZW5ndGh9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgICAgICAgICAgIDxvZXBhLXRhYmxlIHRhYmxlSWQ9XCJwZXJzb25TZWFyY2hUYWJsZVwiIFtjb25maWddPVwidGFibGVDb25maWdcIiBbZGF0YV09XCJ0YWJsZURhdGFcIiBbaGVhZGVyXT1cInRhYmxlSGVhZGVyXCIgKHJvd1NlbGVjdGVkKT1cIm9uUm93U2VsZWN0KCRldmVudClcIj5cbiAgICAgICAgICAgIDwvb2VwYS10YWJsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJtb2RhbC1mb290ZXIgZC1ibG9ja1wiPlxuICAgIDxkaXYgKm5nSWY9XCJpblByb2dyZXNzTXNnXCI+ICAgICAgICAgICBcbiAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWluZm9cIj5cbiAgICAgICAgICAge3tpblByb2dyZXNzTXNnfX1cbiAgICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJpbmZvTWVzc2FnZSAmJiAhaW5Qcm9ncmVzc01zZ1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtaW5mb1wiPlxuICAgICAgICAgICAge3tpbmZvTWVzc2FnZX19XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJlcnJvck1lc3NhZ2VcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlclwiPlxuICAgICAgICAgICAge3tlcnJvck1lc3NhZ2V9fVxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tMTIgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaW5Qcm9ncmVzc01zZ1wiPjxzcGFuIGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgdGV4dC1wcmltYXJ5XCIgcm9sZT1cInN0YXR1c1wiPjwvc3Bhbj48L3NwYW4+XG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiKCF0YWJsZURhdGEgfHwgdGFibGVEYXRhLmxlbmd0aCA9PT0gMCkgJiYgIWluUHJvZ3Jlc3NNc2dcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbXItMlwiXG4gICAgICAgICAgICAgICAgaWQ9XCJTYXZlUGVyc29uQnRuXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIW1vZGFsRm9ybUdyb3VwIHx8IG1vZGFsRm9ybUdyb3VwLmludmFsaWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzYXZlUGVyc29uQWZ0ZXJTZWFyY2goKVwiPlNhdmU8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJ0YWJsZURhdGEgJiYgdGFibGVEYXRhLmxlbmd0aCA+IDAgJiYgIXNlbGVjdGVkUGVyc29uICYmICFpblByb2dyZXNzTXNnXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG1yLTJcIlxuICAgICAgICAgICAgICAgIGlkPVwiU2F2ZVBlcnNvbldpdGhvdXRTZWFyY2hCdG5cIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtb2RhbEZvcm1Hcm91cD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVQZXJzb24oKVwiPk5vIE1hdGNoLCBTYXZlIE5ldyBQZXJzb248L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJ0YWJsZURhdGEgJiYgdGFibGVEYXRhLmxlbmd0aCA+IDAgJiYgc2VsZWN0ZWRQZXJzb24gJiYgIWluUHJvZ3Jlc3NNc2dcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbXItMlwiXG4gICAgICAgICAgICAgICAgaWQ9XCJTYXZlU2VsZWN0ZWRQZXJzb25CdG5cIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJtb2RhbEZvcm1Hcm91cD8uaW52YWxpZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVTZWxlY3RlZFBlcnNvbigpXCI+VXNlIFNlbGVjdGVkIFBlcnNvbjwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBpZD1cIkNhbmNlbFBlcnNvbkJ0blwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImJzTW9kYWxSZWYuaGlkZSgpXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
@@ -0,0 +1,129 @@
1
+ import { Component, Input, Output, EventEmitter } from '@angular/core';
2
+ import { EMPTY, Observable } from 'rxjs';
3
+ import { mergeMap, map, catchError } from 'rxjs/operators';
4
+ import { PersonSearchModalComponent } from '../person-search-modal/person-search-modal.component';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@ohioepa/oepa-common-lib";
7
+ import * as i2 from "ngx-bootstrap/modal";
8
+ import * as i3 from "../entity.service";
9
+ import * as i4 from "@angular/common";
10
+ import * as i5 from "@angular/forms";
11
+ import * as i6 from "ngx-bootstrap/typeahead";
12
+ export class PersonSearchInputComponent {
13
+ idService;
14
+ modalService;
15
+ entityService;
16
+ nameSearch = '';
17
+ nameSource;
18
+ componentId = '';
19
+ errorMessage = '';
20
+ searching = false;
21
+ group;
22
+ personID = '';
23
+ field = '';
24
+ title = 'Person';
25
+ errorMessageAddendum = '';
26
+ rowLayout = false;
27
+ personSelected = new EventEmitter();
28
+ constructor(idService, modalService, entityService) {
29
+ this.idService = idService;
30
+ this.modalService = modalService;
31
+ this.entityService = entityService;
32
+ this.nameSource = new Observable((observer) => {
33
+ observer.next(this.group.get(this.field)?.value);
34
+ }).pipe(mergeMap((token) => this.searchPersons(token)));
35
+ }
36
+ ngOnInit() {
37
+ this.componentId = this.idService.getComponentId(this.group);
38
+ if (this.personID) {
39
+ const filter = {
40
+ id: this.personID
41
+ };
42
+ this.searching = true;
43
+ this.entityService.searchPersons(filter).subscribe({
44
+ next: personList => {
45
+ if (personList && personList.length == 1) {
46
+ this.loadPersonInForm(personList[0]);
47
+ }
48
+ else {
49
+ this.errorMessage = 'An initialization error occurred: Zero or multiple persons wih id: ' + this.personID;
50
+ }
51
+ this.searching = false;
52
+ }, error: err => {
53
+ this.searching = false;
54
+ this.errorMessage = 'An initialization error occurred: ' + err;
55
+ }
56
+ });
57
+ }
58
+ this.group.get(this.field)?.valueChanges.subscribe(value => {
59
+ if (!value || value === '') {
60
+ this.personSelected.emit(undefined);
61
+ }
62
+ });
63
+ }
64
+ onPersonSelect(e) {
65
+ if (e.item) {
66
+ this.loadPersonInForm(e.item);
67
+ this.personSelected.emit(e.item);
68
+ }
69
+ }
70
+ loadPersonInForm(person) {
71
+ let data = {};
72
+ data[this.field] = (person.firstName || '') + ' ' + (person.middleName || '') + ' ' + person.lastName + ' (' + person.id + ')';
73
+ if (person) {
74
+ this.group.patchValue(data);
75
+ }
76
+ }
77
+ searchPersons(token) {
78
+ this.errorMessage = '';
79
+ this.searching = true;
80
+ const filter = {
81
+ name: isNaN(token) ? token : undefined,
82
+ id: isNaN(token) ? undefined : token
83
+ };
84
+ return this.entityService.searchPersons(filter).pipe(map((persons) => {
85
+ this.searching = false;
86
+ return persons;
87
+ }), catchError(err => {
88
+ this.searching = false;
89
+ this.errorMessage = 'Search failed: ' + err;
90
+ return EMPTY;
91
+ }));
92
+ }
93
+ advancedSearch() {
94
+ let modal = this.modalService.show(PersonSearchModalComponent, { class: 'modal-xl', ignoreBackdropClick: true });
95
+ modal.content.onPersonSelected.subscribe(person => {
96
+ this.loadPersonInForm(person);
97
+ this.personSelected.emit(person);
98
+ modal.hide();
99
+ });
100
+ }
101
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PersonSearchInputComponent, deps: [{ token: i1.OepaComponentIdService }, { token: i2.BsModalService }, { token: i3.EntityService }], target: i0.ɵɵFactoryTarget.Component });
102
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: PersonSearchInputComponent, selector: "oepa-person-search-input", inputs: { group: "group", personID: "personID", field: "field", title: "title", errorMessageAddendum: "errorMessageAddendum", rowLayout: "rowLayout" }, outputs: { personSelected: "personSelected" }, ngImport: i0, template: "<div [formGroup]=\"group\" class=\"form-group\" [ngClass]=\"{'row text-right': rowLayout}\">\n <ng-template #personTemplate let-model=\"item\" let-index=\"index\">\n <h5>{{ (model.firstName || '') + ' ' + (model.middleName || '') + ' ' + model.lastName +\n (model.addressList && model.addressList[0] ? (' - ' + model.addressList[0].address.addressLine1 + ', ' +\n model.addressList[0].address.city\n + model.addressList[0].address.state) : '') + ' (' + model.id + ')' }}</h5>\n </ng-template>\n <label [ngClass]=\"{'col-sm-4 col-form-label': rowLayout}\">\n {{title}}\n <span *ngIf=\"searching\"><span class=\"spinner-border text-primary\" role=\"status\"></span></span>\n <a href=\"javascript:void(0)\" (click)=\"advancedSearch()\">Advanced Search</a>\n </label>\n <div [ngClass]=\"{'col-sm-8': rowLayout}\">\n <input class=\"form-control\" type=\"search\"\n [ngClass]=\"{'is-invalid':group.controls[field].status === 'INVALID', 'col-sm-8': rowLayout}\"\n [formControlName]=\"field\" [typeahead]=\"nameSource\" [typeaheadScrollable]=\"true\"\n (typeaheadOnSelect)=\"onPersonSelect($event)\" [id]=\"componentId + '_PersonSearch'\"\n [typeaheadItemTemplate]=\"personTemplate\" [typeaheadMinLength]=\"3\" placeholder=\"Search Person\">\n <small class=\"invalid-feedback\" *ngIf=\"group.controls[field]?.hasError('required')\">{{title}} is required\n {{errorMessageAddendum}}</small>\n </div>\n</div>\n<div *ngIf=\"errorMessage\" class=\"alert alert-danger\">\n {{errorMessage}}\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i5.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i6.TypeaheadDirective, selector: "[typeahead]", inputs: ["typeahead", "typeaheadMinLength", "adaptivePosition", "isAnimated", "typeaheadWaitMs", "typeaheadOptionsLimit", "typeaheadOptionField", "typeaheadGroupField", "typeaheadOrderBy", "typeaheadAsync", "typeaheadLatinize", "typeaheadSingleWords", "typeaheadWordDelimiters", "typeaheadMultipleSearch", "typeaheadMultipleSearchDelimiters", "typeaheadPhraseDelimiters", "typeaheadItemTemplate", "optionsListTemplate", "typeaheadScrollable", "typeaheadOptionsInScrollableView", "typeaheadHideResultsOnBlur", "typeaheadSelectFirstItem", "typeaheadIsFirstItemActive", "container", "dropup"], outputs: ["typeaheadLoading", "typeaheadNoResults", "typeaheadOnSelect", "typeaheadOnPreview", "typeaheadOnBlur"], exportAs: ["bs-typeahead"] }] });
103
+ }
104
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PersonSearchInputComponent, decorators: [{
105
+ type: Component,
106
+ args: [{ selector: 'oepa-person-search-input', template: "<div [formGroup]=\"group\" class=\"form-group\" [ngClass]=\"{'row text-right': rowLayout}\">\n <ng-template #personTemplate let-model=\"item\" let-index=\"index\">\n <h5>{{ (model.firstName || '') + ' ' + (model.middleName || '') + ' ' + model.lastName +\n (model.addressList && model.addressList[0] ? (' - ' + model.addressList[0].address.addressLine1 + ', ' +\n model.addressList[0].address.city\n + model.addressList[0].address.state) : '') + ' (' + model.id + ')' }}</h5>\n </ng-template>\n <label [ngClass]=\"{'col-sm-4 col-form-label': rowLayout}\">\n {{title}}\n <span *ngIf=\"searching\"><span class=\"spinner-border text-primary\" role=\"status\"></span></span>\n <a href=\"javascript:void(0)\" (click)=\"advancedSearch()\">Advanced Search</a>\n </label>\n <div [ngClass]=\"{'col-sm-8': rowLayout}\">\n <input class=\"form-control\" type=\"search\"\n [ngClass]=\"{'is-invalid':group.controls[field].status === 'INVALID', 'col-sm-8': rowLayout}\"\n [formControlName]=\"field\" [typeahead]=\"nameSource\" [typeaheadScrollable]=\"true\"\n (typeaheadOnSelect)=\"onPersonSelect($event)\" [id]=\"componentId + '_PersonSearch'\"\n [typeaheadItemTemplate]=\"personTemplate\" [typeaheadMinLength]=\"3\" placeholder=\"Search Person\">\n <small class=\"invalid-feedback\" *ngIf=\"group.controls[field]?.hasError('required')\">{{title}} is required\n {{errorMessageAddendum}}</small>\n </div>\n</div>\n<div *ngIf=\"errorMessage\" class=\"alert alert-danger\">\n {{errorMessage}}\n</div>" }]
107
+ }], ctorParameters: () => [{ type: i1.OepaComponentIdService }, { type: i2.BsModalService }, { type: i3.EntityService }], propDecorators: { group: [{
108
+ type: Input,
109
+ args: ['group']
110
+ }], personID: [{
111
+ type: Input,
112
+ args: ['personID']
113
+ }], field: [{
114
+ type: Input,
115
+ args: ['field']
116
+ }], title: [{
117
+ type: Input,
118
+ args: ['title']
119
+ }], errorMessageAddendum: [{
120
+ type: Input,
121
+ args: ['errorMessageAddendum']
122
+ }], rowLayout: [{
123
+ type: Input,
124
+ args: ['rowLayout']
125
+ }], personSelected: [{
126
+ type: Output,
127
+ args: ['personSelected']
128
+ }] } });
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc29uLXNlYXJjaC1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vZXBhLXVpLWxpYi9zcmMvbGliL2VudGl0eS9wZXJzb24tc2VhcmNoLWlucHV0L3BlcnNvbi1zZWFyY2gtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb2VwYS11aS1saWIvc3JjL2xpYi9lbnRpdHkvcGVyc29uLXNlYXJjaC1pbnB1dC9wZXJzb24tc2VhcmNoLWlucHV0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0UsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekMsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFNM0QsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sc0RBQXNELENBQUM7Ozs7Ozs7O0FBT2xHLE1BQU0sT0FBTywwQkFBMEI7SUFnQmpCO0lBQ1Y7SUFDQTtJQWpCVixVQUFVLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLFVBQVUsQ0FBMkI7SUFDckMsV0FBVyxHQUFXLEVBQUUsQ0FBQztJQUN6QixZQUFZLEdBQVcsRUFBRSxDQUFDO0lBQzFCLFNBQVMsR0FBWSxLQUFLLENBQUM7SUFFWCxLQUFLLENBQWE7SUFDZixRQUFRLEdBQVcsRUFBRSxDQUFDO0lBQ3pCLEtBQUssR0FBVyxFQUFFLENBQUM7SUFDbkIsS0FBSyxHQUFXLFFBQVEsQ0FBQztJQUNWLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztJQUNyQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBRVosY0FBYyxHQUE2QixJQUFJLFlBQVksRUFBYyxD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U0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzlFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDZixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7d0dBNUZVLDBCQUEwQjs0RkFBMUIsMEJBQTBCLHVRQ2pCdkMsOGdEQXdCTTs7NEZEUE8sMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNFLDBCQUEwQjtvSkFXcEIsS0FBSztzQkFBcEIsS0FBSzt1QkFBQyxPQUFPO2dCQUNLLFFBQVE7c0JBQTFCLEtBQUs7dUJBQUMsVUFBVTtnQkFDRCxLQUFLO3NCQUFwQixLQUFLO3VCQUFDLE9BQU87Z0JBQ0UsS0FBSztzQkFBcEIsS0FBSzt1QkFBQyxPQUFPO2dCQUNpQixvQkFBb0I7c0JBQWxELEtBQUs7dUJBQUMsc0JBQXNCO2dCQUNULFNBQVM7c0JBQTVCLEtBQUs7dUJBQUMsV0FBVztnQkFFUSxjQUFjO3NCQUF2QyxNQUFNO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFR5cGVhaGVhZE1hdGNoIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC90eXBlYWhlYWQnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRU1QVFksIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1lcmdlTWFwLCBtYXAsIGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgT2VwYUNvbXBvbmVudElkU2VydmljZSB9IGZyb20gJ0BvaGlvZXBhL29lcGEtY29tbW9uLWxpYic7XG5pbXBvcnQgeyBFbnRpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vZW50aXR5LnNlcnZpY2UnO1xuaW1wb3J0IHsgT0VQQVBlcnNvbiB9IGZyb20gJ0BvaGlvZXBhL29lcGEtZWJpei1saWInO1xuaW1wb3J0IHsgT0VQQVBlcnNvbkZpbHRlciB9IGZyb20gJ0BvaGlvZXBhL29lcGEtZWJpei1saWInO1xuaW1wb3J0IHsgUGVyc29uU2VhcmNoTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9wZXJzb24tc2VhcmNoLW1vZGFsL3BlcnNvbi1zZWFyY2gtbW9kYWwuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnb2VwYS1wZXJzb24tc2VhcmNoLWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BlcnNvbi1zZWFyY2gtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wZXJzb24tc2VhcmNoLWlucHV0LmNvbXBvbmVudC5jc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBQZXJzb25TZWFyY2hJbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIG5hbWVTZWFyY2ggPSAnJztcbiAgbmFtZVNvdXJjZTogT2JzZXJ2YWJsZTxPRVBBUGVyc29uW10+O1xuICBjb21wb25lbnRJZDogc3RyaW5nID0gJyc7XG4gIGVycm9yTWVzc2FnZTogc3RyaW5nID0gJyc7XG4gIHNlYXJjaGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgnZ3JvdXAnKSBncm91cCE6IEZvcm1Hcm91cDtcbiAgQElucHV0KCdwZXJzb25JRCcpIHBlcnNvbklEOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCdmaWVsZCcpIGZpZWxkOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCd0aXRsZScpIHRpdGxlOiBzdHJpbmcgPSAnUGVyc29uJztcbiAgQElucHV0KCdlcnJvck1lc3NhZ2VBZGRlbmR1bScpIGVycm9yTWVzc2FnZUFkZGVuZHVtID0gJyc7XG4gIEBJbnB1dCgncm93TGF5b3V0Jykgcm93TGF5b3V0ID0gZmFsc2U7XG5cbiAgQE91dHB1dCgncGVyc29uU2VsZWN0ZWQnKSBwZXJzb25TZWxlY3RlZDogRXZlbnRFbWl0dGVyPE9FUEFQZXJzb24+ID0gbmV3IEV2ZW50RW1pdHRlcjxPRVBBUGVyc29uPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaWRTZXJ2aWNlOiBPZXBhQ29tcG9uZW50SWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIGVudGl0eVNlcnZpY2U6IEVudGl0eVNlcnZpY2UpIHsgXG4gICAgICB0aGlzLm5hbWVTb3VyY2UgPSBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgb2JzZXJ2ZXIubmV4dCh0aGlzLmdyb3VwLmdldCh0aGlzLmZpZWxkKT8udmFsdWUpO1xuICAgICAgfSkucGlwZShtZXJnZU1hcCgodG9rZW46IGFueSkgPT4gdGhpcy5zZWFyY2hQZXJzb25zKHRva2VuKSkpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jb21wb25lbnRJZCA9IHRoaXMuaWRTZXJ2aWNlLmdldENvbXBvbmVudElkKHRoaXMuZ3JvdXApO1xuICAgIGlmICh0aGlzLnBlcnNvbklEKSB7XG4gICAgICBjb25zdCBmaWx0ZXI6IE9FUEFQZXJzb25GaWx0ZXIgPSB7XG4gICAgICAgIGlkOiB0aGlzLnBlcnNvbklEXG4gICAgICB9XG4gICAgICB0aGlzLnNlYXJjaGluZyA9IHRydWU7XG4gICAgICB0aGlzLmVudGl0eVNlcnZpY2Uuc2VhcmNoUGVyc29ucyhmaWx0ZXIpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IHBlcnNvbkxpc3QgPT4ge1xuICAgICAgICBpZiAocGVyc29uTGlzdCAmJiBwZXJzb25MaXN0Lmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgdGhpcy5sb2FkUGVyc29uSW5Gb3JtKHBlcnNvbkxpc3RbMF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ0FuIGluaXRpYWxpemF0aW9uIGVycm9yIG9jY3VycmVkOiBaZXJvIG9yIG11bHRpcGxlIHBlcnNvbnMgd2loIGlkOiAnICsgdGhpcy5wZXJzb25JRDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlYXJjaGluZyA9IGZhbHNlO1xuICAgICAgfSwgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgIHRoaXMuc2VhcmNoaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ0FuIGluaXRpYWxpemF0aW9uIGVycm9yIG9jY3VycmVkOiAnICsgZXJyO1xuICAgICAgfX0pO1xuICAgIH1cbiAgICB0aGlzLmdyb3VwLmdldCh0aGlzLmZpZWxkKT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBpZiAoIXZhbHVlIHx8IHZhbHVlID09PSAnJykge1xuICAgICAgICB0aGlzLnBlcnNvblNlbGVjdGVkLmVtaXQodW5kZWZpbmVkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvblBlcnNvblNlbGVjdChlOiBUeXBlYWhlYWRNYXRjaCkge1xuICAgIGlmIChlLml0ZW0pIHtcbiAgICAgIHRoaXMubG9hZFBlcnNvbkluRm9ybShlLml0ZW0pO1xuICAgICAgdGhpcy5wZXJzb25TZWxlY3RlZC5lbWl0KGUuaXRlbSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBsb2FkUGVyc29uSW5Gb3JtKHBlcnNvbjogT0VQQVBlcnNvbikge1xuICAgIGxldCBkYXRhOiBhbnkgPSB7fTtcbiAgICBkYXRhW3RoaXMuZmllbGRdID0gKHBlcnNvbi5maXJzdE5hbWUgfHwgJycpICsgJyAnICsgKHBlcnNvbi5taWRkbGVOYW1lIHx8ICcnKSArICcgJyArIHBlcnNvbi5sYXN0TmFtZSArICcgKCcgKyBwZXJzb24uaWQgKyAnKSc7XG4gICAgaWYgKHBlcnNvbikge1xuICAgICAgdGhpcy5ncm91cC5wYXRjaFZhbHVlKGRhdGEpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2VhcmNoUGVyc29ucyh0b2tlbjogYW55KTogT2JzZXJ2YWJsZTxPRVBBUGVyc29uW10+IHtcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMuc2VhcmNoaW5nID0gdHJ1ZTtcbiAgICBjb25zdCBmaWx0ZXI6IE9FUEFQZXJzb25GaWx0ZXIgPSB7XG4gICAgICBuYW1lOiBpc05hTih0b2tlbikgPyB0b2tlbiA6IHVuZGVmaW5lZCxcbiAgICAgIGlkOiBpc05hTih0b2tlbikgPyB1bmRlZmluZWQgOiB0b2tlblxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5lbnRpdHlTZXJ2aWNlLnNlYXJjaFBlcnNvbnMoZmlsdGVyKS5waXBlKFxuICAgICAgbWFwKChwZXJzb25zKSA9PiB7XG4gICAgICAgIHRoaXMuc2VhcmNoaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBwZXJzb25zO1xuICAgICAgfSksIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgdGhpcy5zZWFyY2hpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnU2VhcmNoIGZhaWxlZDogJyArIGVycjtcbiAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGFkdmFuY2VkU2VhcmNoKCkge1xuICAgIGxldCBtb2RhbCA9IHRoaXMubW9kYWxTZXJ2aWNlLnNob3coUGVyc29uU2VhcmNoTW9kYWxDb21wb25lbnQsIHtjbGFzczogJ21vZGFsLXhsJyxpZ25vcmVCYWNrZHJvcENsaWNrOiB0cnVlfSk7XG4gICAgKDxQZXJzb25TZWFyY2hNb2RhbENvbXBvbmVudD5tb2RhbC5jb250ZW50KS5vblBlcnNvblNlbGVjdGVkLnN1YnNjcmliZShwZXJzb24gPT4ge1xuICAgICAgdGhpcy5sb2FkUGVyc29uSW5Gb3JtKHBlcnNvbik7XG4gICAgICB0aGlzLnBlcnNvblNlbGVjdGVkLmVtaXQocGVyc29uKTtcbiAgICAgIG1vZGFsLmhpZGUoKTtcbiAgICB9KTtcbiAgfVxuXG59XG4iLCI8ZGl2IFtmb3JtR3JvdXBdPVwiZ3JvdXBcIiBjbGFzcz1cImZvcm0tZ3JvdXBcIiBbbmdDbGFzc109XCJ7J3JvdyB0ZXh0LXJpZ2h0Jzogcm93TGF5b3V0fVwiPlxuICA8bmctdGVtcGxhdGUgI3BlcnNvblRlbXBsYXRlIGxldC1tb2RlbD1cIml0ZW1cIiBsZXQtaW5kZXg9XCJpbmRleFwiPlxuICAgIDxoNT57eyAobW9kZWwuZmlyc3ROYW1lIHx8ICcnKSArICcgJyArIChtb2RlbC5taWRkbGVOYW1lIHx8ICcnKSArICcgJyArIG1vZGVsLmxhc3ROYW1lICtcbiAgICAgIChtb2RlbC5hZGRyZXNzTGlzdCAmJiBtb2RlbC5hZGRyZXNzTGlzdFswXSA/ICgnIC0gJyArIG1vZGVsLmFkZHJlc3NMaXN0WzBdLmFkZHJlc3MuYWRkcmVzc0xpbmUxICsgJywgJyArXG4gICAgICBtb2RlbC5hZGRyZXNzTGlzdFswXS5hZGRyZXNzLmNpdHlcbiAgICAgICsgbW9kZWwuYWRkcmVzc0xpc3RbMF0uYWRkcmVzcy5zdGF0ZSkgOiAnJykgKyAnICgnICsgbW9kZWwuaWQgKyAnKScgfX08L2g1PlxuICA8L25nLXRlbXBsYXRlPlxuICA8bGFiZWwgW25nQ2xhc3NdPVwieydjb2wtc20tNCBjb2wtZm9ybS1sYWJlbCc6IHJvd0xheW91dH1cIj5cbiAgICB7e3RpdGxlfX1cbiAgICA8c3BhbiAqbmdJZj1cInNlYXJjaGluZ1wiPjxzcGFuIGNsYXNzPVwic3Bpbm5lci1ib3JkZXIgdGV4dC1wcmltYXJ5XCIgcm9sZT1cInN0YXR1c1wiPjwvc3Bhbj48L3NwYW4+XG4gICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIChjbGljayk9XCJhZHZhbmNlZFNlYXJjaCgpXCI+QWR2YW5jZWQgU2VhcmNoPC9hPlxuICA8L2xhYmVsPlxuICA8ZGl2IFtuZ0NsYXNzXT1cInsnY29sLXNtLTgnOiByb3dMYXlvdXR9XCI+XG4gICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgdHlwZT1cInNlYXJjaFwiXG4gICAgICBbbmdDbGFzc109XCJ7J2lzLWludmFsaWQnOmdyb3VwLmNvbnRyb2xzW2ZpZWxkXS5zdGF0dXMgPT09ICdJTlZBTElEJywgJ2NvbC1zbS04Jzogcm93TGF5b3V0fVwiXG4gICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkXCIgW3R5cGVhaGVhZF09XCJuYW1lU291cmNlXCIgW3R5cGVhaGVhZFNjcm9sbGFibGVdPVwidHJ1ZVwiXG4gICAgICAodHlwZWFoZWFkT25TZWxlY3QpPVwib25QZXJzb25TZWxlY3QoJGV2ZW50KVwiIFtpZF09XCJjb21wb25lbnRJZCArICdfUGVyc29uU2VhcmNoJ1wiXG4gICAgICBbdHlwZWFoZWFkSXRlbVRlbXBsYXRlXT1cInBlcnNvblRlbXBsYXRlXCIgW3R5cGVhaGVhZE1pbkxlbmd0aF09XCIzXCIgcGxhY2Vob2xkZXI9XCJTZWFyY2ggUGVyc29uXCI+XG4gICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwiZ3JvdXAuY29udHJvbHNbZmllbGRdPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiPnt7dGl0bGV9fSBpcyByZXF1aXJlZFxuICAgICAge3tlcnJvck1lc3NhZ2VBZGRlbmR1bX19PC9zbWFsbD5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgKm5nSWY9XCJlcnJvck1lc3NhZ2VcIiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlclwiPlxuICB7e2Vycm9yTWVzc2FnZX19XG48L2Rpdj4iXX0=