@openziti/ziti-console-lib 0.12.10 → 1.0.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 (445) hide show
  1. package/assets/fonts/icomoon.eot +0 -0
  2. package/assets/fonts/icomoon.svg +6 -1
  3. package/assets/fonts/icomoon.ttf +0 -0
  4. package/assets/fonts/icomoon.woff +0 -0
  5. package/assets/fonts/icomoon.woff2 +0 -0
  6. package/assets/styles/global.scss +431 -24
  7. package/assets/styles/icons.scss +644 -0
  8. package/assets/svgs/Icon_Log_Logout.svg +43 -0
  9. package/assets/svgs/clients.svg +6 -0
  10. package/assets/svgs/identity-marker.svg +8 -0
  11. package/assets/svgs/router-marker.svg +7 -0
  12. package/assets/svgs/ziti-logo.svg +23 -0
  13. package/esm2022/lib/ZAC_VERSION.mjs +4 -0
  14. package/esm2022/lib/default-app-config.mjs +5 -0
  15. package/esm2022/lib/features/card/card.component.mjs +4 -5
  16. package/esm2022/lib/features/card-list/card-list.component.mjs +2 -4
  17. package/esm2022/lib/features/config-editor/config-editor.component.mjs +2 -3
  18. package/esm2022/lib/features/confirm/confirm.component.mjs +4 -5
  19. package/esm2022/lib/features/creation-summary-dialog/creation-summary-dialog.component.mjs +2 -3
  20. package/esm2022/lib/features/custom-tags/custom-tags.component.mjs +4 -5
  21. package/esm2022/lib/features/data-table/cells/table-cell-menu/table-cell-menu.component.mjs +2 -3
  22. package/esm2022/lib/features/data-table/cells/table-cell-name/table-cell-name.component.mjs +2 -3
  23. package/esm2022/lib/features/data-table/cells/table-cell-select/table-cell-select.component.mjs +4 -5
  24. package/esm2022/lib/features/data-table/cells/table-cell-token/table-cell-token.component.mjs +2 -3
  25. package/esm2022/lib/features/data-table/column-headers/table-column-default/table-column-default.component.mjs +2 -3
  26. package/esm2022/lib/features/data-table/column-headers/table-column-filter/table-column-filter.component.mjs +2 -3
  27. package/esm2022/lib/features/data-table/column-headers/table-column-menu/table-column-menu.component.mjs +2 -3
  28. package/esm2022/lib/features/data-table/column-headers/table-column-select/table-column-select.component.mjs +4 -5
  29. package/esm2022/lib/features/data-table/data-table-filter.service.mjs +2 -3
  30. package/esm2022/lib/features/data-table/data-table.component.mjs +4 -5
  31. package/esm2022/lib/features/data-table/data-table.service.mjs +2 -3
  32. package/esm2022/lib/features/data-table/table-filter-bar/filter-bar.component.mjs +4 -5
  33. package/esm2022/lib/features/data-table/table-hidden-columns-bar/hidden-columns-bar.component.mjs +2 -3
  34. package/esm2022/lib/features/data-table/tooltips/os-tooltip.component.mjs +2 -3
  35. package/esm2022/lib/features/data-table/tooltips/sdk-tooltip.component.mjs +2 -3
  36. package/esm2022/lib/features/dynamic-widgets/boolean/boolean-toggle-input.component.mjs +2 -3
  37. package/esm2022/lib/features/dynamic-widgets/checkbox-list/checkbox-list-input.component.mjs +2 -3
  38. package/esm2022/lib/features/dynamic-widgets/forwarding-config/forwarding-config.component.mjs +2 -3
  39. package/esm2022/lib/features/dynamic-widgets/forwarding-config/forwarding-config.service.mjs +2 -3
  40. package/esm2022/lib/features/dynamic-widgets/number/number-input.component.mjs +2 -3
  41. package/esm2022/lib/features/dynamic-widgets/object/object.component.mjs +4 -5
  42. package/esm2022/lib/features/dynamic-widgets/password/password-input.component.mjs +2 -3
  43. package/esm2022/lib/features/dynamic-widgets/port-ranges/port-ranges.component.mjs +2 -3
  44. package/esm2022/lib/features/dynamic-widgets/protocol-address-port/protocol-address-port-input.component.mjs +2 -3
  45. package/esm2022/lib/features/dynamic-widgets/selector/selector-input.component.mjs +2 -3
  46. package/esm2022/lib/features/dynamic-widgets/string/string-input.component.mjs +2 -3
  47. package/esm2022/lib/features/dynamic-widgets/text-list/text-list-input.component.mjs +2 -3
  48. package/esm2022/lib/features/extendable/extendable.component.mjs +2 -3
  49. package/esm2022/lib/features/extendable/extensions-noop.service.mjs +3 -3
  50. package/esm2022/lib/features/header-bar/header-bar.component.mjs +105 -0
  51. package/esm2022/lib/features/json-view/json-view.component.mjs +4 -5
  52. package/esm2022/lib/features/list-page-features/list-page-form/list-page-form.component.mjs +2 -3
  53. package/esm2022/lib/features/list-page-features/list-page-header/list-page-header.component.mjs +4 -5
  54. package/esm2022/lib/features/loading-indicator/loading-indicator.component.mjs +2 -3
  55. package/esm2022/lib/features/login/login-dialog.component.mjs +10 -12
  56. package/esm2022/lib/features/messaging/growler.component.mjs +4 -5
  57. package/esm2022/lib/features/messaging/growler.module.mjs +2 -3
  58. package/esm2022/lib/features/messaging/growler.service.mjs +2 -3
  59. package/esm2022/lib/features/messaging/logger.service.mjs +2 -3
  60. package/esm2022/lib/features/multi-action-button/multi-action-button.component.mjs +2 -3
  61. package/esm2022/lib/features/no-items/no-items.component.mjs +2 -3
  62. package/esm2022/lib/features/overrides/overrides.component.mjs +2 -3
  63. package/esm2022/lib/features/overrides/overrides.service.mjs +2 -3
  64. package/esm2022/lib/features/preview-list/preview-list.component.mjs +4 -5
  65. package/esm2022/lib/features/preview-selections/preview-selections.component.mjs +2 -3
  66. package/esm2022/lib/features/progress-meter/progress-meter.component.mjs +2 -3
  67. package/esm2022/lib/features/progress-wizard/progress-wizard.component.mjs +2 -3
  68. package/esm2022/lib/features/projectable-forms/api-session/api-session-form.component.mjs +5 -9
  69. package/esm2022/lib/features/projectable-forms/api-session/api-session-form.service.mjs +2 -3
  70. package/esm2022/lib/features/projectable-forms/auth-policy/auth-policy-form.component.mjs +5 -9
  71. package/esm2022/lib/features/projectable-forms/auth-policy/auth-policy-form.service.mjs +2 -3
  72. package/esm2022/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.mjs +5 -9
  73. package/esm2022/lib/features/projectable-forms/certificate-authority/certificate-authority-form.service.mjs +2 -3
  74. package/esm2022/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.mjs +4 -8
  75. package/esm2022/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.service.mjs +2 -3
  76. package/esm2022/lib/features/projectable-forms/config-type/config-type-form.component.mjs +5 -9
  77. package/esm2022/lib/features/projectable-forms/config-type/config-type-form.service.mjs +2 -3
  78. package/esm2022/lib/features/projectable-forms/configuration/configuration-form.component.mjs +5 -9
  79. package/esm2022/lib/features/projectable-forms/configuration/configuration.service.mjs +2 -3
  80. package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.component.mjs +34 -26
  81. package/esm2022/lib/features/projectable-forms/edge-router/edge-router-form.service.mjs +2 -3
  82. package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.mjs +8 -12
  83. package/esm2022/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.service.mjs +2 -3
  84. package/esm2022/lib/features/projectable-forms/form-field-container/form-field-container.component.mjs +4 -5
  85. package/esm2022/lib/features/projectable-forms/form-field-toggle/form-field-toggle.component.mjs +4 -5
  86. package/esm2022/lib/features/projectable-forms/form-header/form-header.component.mjs +4 -5
  87. package/esm2022/lib/features/projectable-forms/identity/identity-form.component.mjs +25 -21
  88. package/esm2022/lib/features/projectable-forms/identity/identity-form.service.mjs +2 -3
  89. package/esm2022/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.mjs +5 -12
  90. package/esm2022/lib/features/projectable-forms/jwt-signer/jwt-signer-form.service.mjs +2 -3
  91. package/esm2022/lib/features/projectable-forms/posture-check/posture-check-form.component.mjs +5 -9
  92. package/esm2022/lib/features/projectable-forms/posture-check/posture-check-form.service.mjs +2 -3
  93. package/esm2022/lib/features/projectable-forms/projectable-form.class.mjs +36 -74
  94. package/esm2022/lib/features/projectable-forms/service/service-form.component.mjs +6 -9
  95. package/esm2022/lib/features/projectable-forms/service/service-form.service.mjs +2 -3
  96. package/esm2022/lib/features/projectable-forms/service/simple-service/simple-service.component.mjs +57 -19
  97. package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.mjs +8 -12
  98. package/esm2022/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.service.mjs +2 -3
  99. package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.component.mjs +8 -12
  100. package/esm2022/lib/features/projectable-forms/service-policy/service-policy-form.service.mjs +3 -4
  101. package/esm2022/lib/features/projectable-forms/session/session-form.component.mjs +5 -9
  102. package/esm2022/lib/features/projectable-forms/session/session-form.service.mjs +2 -3
  103. package/esm2022/lib/features/projectable-forms/terminator/terminator-form.component.mjs +4 -8
  104. package/esm2022/lib/features/projectable-forms/terminator/terminator-form.service.mjs +2 -3
  105. package/esm2022/lib/features/projectable-forms/transit-router/transit-router-form.component.mjs +7 -11
  106. package/esm2022/lib/features/projectable-forms/transit-router/transit-router-form.service.mjs +2 -3
  107. package/esm2022/lib/features/qr-code/qr-code.component.mjs +4 -5
  108. package/esm2022/lib/features/quick-add/quick-add.component.mjs +50 -0
  109. package/esm2022/lib/features/reset-enrollment/reset-enrollment.component.mjs +4 -5
  110. package/esm2022/lib/features/reset-enrollment/reset-enrollment.service.mjs +2 -3
  111. package/esm2022/lib/features/side-modal/side-modal.component.mjs +2 -3
  112. package/esm2022/lib/features/side-navigator/side-navigator.component.mjs +127 -0
  113. package/esm2022/lib/features/sidebars/side-navbar/side-navbar.component.mjs +4 -5
  114. package/esm2022/lib/features/tag-selector/tag-selector.component.mjs +2 -3
  115. package/esm2022/lib/features/visualizer/identity-service-path/identity-service-path.component.mjs +2 -3
  116. package/esm2022/lib/features/visualizer/identity-service-path/identity-service-path.helper.mjs +2 -3
  117. package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.component.mjs +2 -3
  118. package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.helper.mjs +2 -3
  119. package/esm2022/lib/features/visualizer/network-visualizer/network-visualizer.treenodeprocessor.mjs +2 -3
  120. package/esm2022/lib/features/visualizer/visualizer-service.class.mjs +2 -3
  121. package/esm2022/lib/pages/api-sessions/api-sessions-page.component.mjs +2 -3
  122. package/esm2022/lib/pages/api-sessions/api-sessions-page.service.mjs +2 -3
  123. package/esm2022/lib/pages/attributes/attributes.component.mjs +104 -0
  124. package/esm2022/lib/pages/auth-policies/auth-policies-page.component.mjs +2 -3
  125. package/esm2022/lib/pages/auth-policies/auth-policies-page.service.mjs +6 -6
  126. package/esm2022/lib/pages/callback/callback.component.mjs +2 -3
  127. package/esm2022/lib/pages/certificate-authorities/certificate-authorities-page.component.mjs +2 -3
  128. package/esm2022/lib/pages/certificate-authorities/certificate-authorities-page.service.mjs +2 -3
  129. package/esm2022/lib/pages/config-types/config-types-page.component.mjs +2 -3
  130. package/esm2022/lib/pages/config-types/config-types-page.service.mjs +2 -3
  131. package/esm2022/lib/pages/configurations/configurations-page.component.mjs +2 -3
  132. package/esm2022/lib/pages/configurations/configurations-page.service.mjs +2 -3
  133. package/esm2022/lib/pages/edge-router-policies/edge-router-policies-page.component.mjs +6 -13
  134. package/esm2022/lib/pages/edge-router-policies/edge-router-policies-page.service.mjs +2 -3
  135. package/esm2022/lib/pages/edge-routers/edge-routers-page.component.mjs +5 -16
  136. package/esm2022/lib/pages/edge-routers/edge-routers-page.service.mjs +2 -4
  137. package/esm2022/lib/pages/geolocate/geolocate.component.mjs +130 -0
  138. package/esm2022/lib/pages/identities/identities-page.component.mjs +5 -16
  139. package/esm2022/lib/pages/identities/identities-page.service.mjs +2 -3
  140. package/esm2022/lib/pages/jwt-signers/jwt-signers-page.component.mjs +2 -3
  141. package/esm2022/lib/pages/jwt-signers/jwt-signers-page.service.mjs +2 -3
  142. package/esm2022/lib/pages/posture-checks/posture-checks-page.component.mjs +3 -4
  143. package/esm2022/lib/pages/posture-checks/posture-checks-page.service.mjs +2 -3
  144. package/esm2022/lib/pages/profile/profile.component.mjs +58 -0
  145. package/esm2022/lib/pages/service-edge-router-policies/service-edge-router-policies-page.component.mjs +6 -13
  146. package/esm2022/lib/pages/service-edge-router-policies/service-edge-router-policies-page.service.mjs +2 -3
  147. package/esm2022/lib/pages/service-policies/service-policies-page.component.mjs +6 -13
  148. package/esm2022/lib/pages/service-policies/service-policies-page.service.mjs +2 -3
  149. package/esm2022/lib/pages/services/services-page.component.mjs +6 -13
  150. package/esm2022/lib/pages/services/services-page.service.mjs +2 -3
  151. package/esm2022/lib/pages/sessions/sessions-page.component.mjs +2 -3
  152. package/esm2022/lib/pages/sessions/sessions-page.service.mjs +2 -3
  153. package/esm2022/lib/pages/settings/settings.component.mjs +61 -0
  154. package/esm2022/lib/pages/terminators/terminators-page.component.mjs +3 -4
  155. package/esm2022/lib/pages/terminators/terminators-page.service.mjs +2 -3
  156. package/esm2022/lib/pages/transit-routers/transit-routers-page.component.mjs +5 -16
  157. package/esm2022/lib/pages/transit-routers/transit-routers-page.service.mjs +2 -3
  158. package/esm2022/lib/safe.pipe.mjs +2 -3
  159. package/esm2022/lib/services/auth.service.mjs +2 -3
  160. package/esm2022/lib/services/console-events.service.mjs +2 -14
  161. package/esm2022/lib/services/csv-download.service.mjs +2 -3
  162. package/esm2022/lib/services/deactivate-guard.service.mjs +2 -3
  163. package/esm2022/lib/services/login-service.class.mjs +2 -3
  164. package/esm2022/lib/services/node-data.service.mjs +24 -3
  165. package/esm2022/lib/services/noop-login.service.mjs +2 -3
  166. package/esm2022/lib/services/schema.service.mjs +2 -3
  167. package/esm2022/lib/services/settings-service.class.mjs +5 -18
  168. package/esm2022/lib/services/settings.service.mjs +14 -11
  169. package/esm2022/lib/services/tab-name.service.mjs +9 -6
  170. package/esm2022/lib/services/validation.service.mjs +2 -3
  171. package/esm2022/lib/services/ziti-controller-data.service.mjs +18 -3
  172. package/esm2022/lib/services/ziti-data.service.mjs +2 -3
  173. package/esm2022/lib/shared/list-page-component.class.mjs +6 -3
  174. package/esm2022/lib/shared/list-page-service.class.mjs +2 -3
  175. package/esm2022/lib/zac-routing.module.mjs +3 -10
  176. package/esm2022/lib/ziti-console-lib.module.mjs +43 -24
  177. package/esm2022/lib/ziti-console.constants.mjs +2 -1
  178. package/esm2022/public-api.mjs +9 -8
  179. package/fesm2022/openziti-ziti-console-lib.mjs +3535 -4325
  180. package/fesm2022/openziti-ziti-console-lib.mjs.map +1 -1
  181. package/lib/ZAC_VERSION.d.ts +4 -0
  182. package/lib/ZAC_VERSION.d.ts.map +1 -0
  183. package/lib/default-app-config.d.ts +9 -0
  184. package/lib/default-app-config.d.ts.map +1 -0
  185. package/lib/features/card-list/card-list.component.d.ts +0 -1
  186. package/lib/features/card-list/card-list.component.d.ts.map +1 -1
  187. package/lib/features/extendable/extensions-noop.service.d.ts +2 -0
  188. package/lib/features/extendable/extensions-noop.service.d.ts.map +1 -1
  189. package/lib/features/header-bar/header-bar.component.d.ts +29 -0
  190. package/lib/features/header-bar/header-bar.component.d.ts.map +1 -0
  191. package/lib/features/login/login-dialog.component.d.ts +2 -1
  192. package/lib/features/login/login-dialog.component.d.ts.map +1 -1
  193. package/lib/features/projectable-forms/api-session/api-session-form.component.d.ts +1 -2
  194. package/lib/features/projectable-forms/api-session/api-session-form.component.d.ts.map +1 -1
  195. package/lib/features/projectable-forms/auth-policy/auth-policy-form.component.d.ts +1 -2
  196. package/lib/features/projectable-forms/auth-policy/auth-policy-form.component.d.ts.map +1 -1
  197. package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.d.ts +1 -2
  198. package/lib/features/projectable-forms/certificate-authority/certificate-authority-form.component.d.ts.map +1 -1
  199. package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.d.ts +1 -2
  200. package/lib/features/projectable-forms/certificate-authority/verify-certificate/verify-certificate.component.d.ts.map +1 -1
  201. package/lib/features/projectable-forms/config-type/config-type-form.component.d.ts +1 -2
  202. package/lib/features/projectable-forms/config-type/config-type-form.component.d.ts.map +1 -1
  203. package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts +1 -2
  204. package/lib/features/projectable-forms/configuration/configuration-form.component.d.ts.map +1 -1
  205. package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts +6 -3
  206. package/lib/features/projectable-forms/edge-router/edge-router-form.component.d.ts.map +1 -1
  207. package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts +1 -2
  208. package/lib/features/projectable-forms/edge-router-policy/edge-router-policy-form.component.d.ts.map +1 -1
  209. package/lib/features/projectable-forms/identity/identity-form.component.d.ts +2 -2
  210. package/lib/features/projectable-forms/identity/identity-form.component.d.ts.map +1 -1
  211. package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.d.ts +1 -2
  212. package/lib/features/projectable-forms/jwt-signer/jwt-signer-form.component.d.ts.map +1 -1
  213. package/lib/features/projectable-forms/posture-check/posture-check-form.component.d.ts +1 -2
  214. package/lib/features/projectable-forms/posture-check/posture-check-form.component.d.ts.map +1 -1
  215. package/lib/features/projectable-forms/projectable-form.class.d.ts +11 -7
  216. package/lib/features/projectable-forms/projectable-form.class.d.ts.map +1 -1
  217. package/lib/features/projectable-forms/service/service-form.component.d.ts +0 -1
  218. package/lib/features/projectable-forms/service/service-form.component.d.ts.map +1 -1
  219. package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts +9 -2
  220. package/lib/features/projectable-forms/service/simple-service/simple-service.component.d.ts.map +1 -1
  221. package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts +1 -2
  222. package/lib/features/projectable-forms/service-edge-router-policy/service-edge-router-policy-form.component.d.ts.map +1 -1
  223. package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts +1 -2
  224. package/lib/features/projectable-forms/service-policy/service-policy-form.component.d.ts.map +1 -1
  225. package/lib/features/projectable-forms/session/session-form.component.d.ts +1 -2
  226. package/lib/features/projectable-forms/session/session-form.component.d.ts.map +1 -1
  227. package/lib/features/projectable-forms/terminator/terminator-form.component.d.ts +1 -2
  228. package/lib/features/projectable-forms/terminator/terminator-form.component.d.ts.map +1 -1
  229. package/lib/features/projectable-forms/transit-router/transit-router-form.component.d.ts +1 -2
  230. package/lib/features/projectable-forms/transit-router/transit-router-form.component.d.ts.map +1 -1
  231. package/lib/features/quick-add/quick-add.component.d.ts +15 -0
  232. package/lib/features/quick-add/quick-add.component.d.ts.map +1 -0
  233. package/lib/features/side-navigator/side-navigator.component.d.ts +33 -0
  234. package/lib/features/side-navigator/side-navigator.component.d.ts.map +1 -0
  235. package/lib/pages/attributes/attributes.component.d.ts +31 -0
  236. package/lib/pages/attributes/attributes.component.d.ts.map +1 -0
  237. package/lib/pages/auth-policies/auth-policies-page.service.d.ts.map +1 -1
  238. package/lib/pages/edge-router-policies/edge-router-policies-page.component.d.ts +1 -3
  239. package/lib/pages/edge-router-policies/edge-router-policies-page.component.d.ts.map +1 -1
  240. package/lib/pages/edge-routers/edge-routers-page.component.d.ts +1 -3
  241. package/lib/pages/edge-routers/edge-routers-page.component.d.ts.map +1 -1
  242. package/lib/pages/edge-routers/edge-routers-page.service.d.ts.map +1 -1
  243. package/lib/pages/geolocate/geolocate.component.d.ts +32 -0
  244. package/lib/pages/geolocate/geolocate.component.d.ts.map +1 -0
  245. package/lib/pages/identities/identities-page.component.d.ts +1 -3
  246. package/lib/pages/identities/identities-page.component.d.ts.map +1 -1
  247. package/lib/pages/profile/profile.component.d.ts +17 -0
  248. package/lib/pages/profile/profile.component.d.ts.map +1 -0
  249. package/lib/pages/service-edge-router-policies/service-edge-router-policies-page.component.d.ts +1 -3
  250. package/lib/pages/service-edge-router-policies/service-edge-router-policies-page.component.d.ts.map +1 -1
  251. package/lib/pages/service-policies/service-policies-page.component.d.ts +1 -3
  252. package/lib/pages/service-policies/service-policies-page.component.d.ts.map +1 -1
  253. package/lib/pages/services/services-page.component.d.ts +1 -3
  254. package/lib/pages/services/services-page.component.d.ts.map +1 -1
  255. package/lib/pages/settings/settings.component.d.ts +23 -0
  256. package/lib/pages/settings/settings.component.d.ts.map +1 -0
  257. package/lib/pages/transit-routers/transit-routers-page.component.d.ts +1 -3
  258. package/lib/pages/transit-routers/transit-routers-page.component.d.ts.map +1 -1
  259. package/lib/services/console-events.service.d.ts.map +1 -1
  260. package/lib/services/node-data.service.d.ts +1 -0
  261. package/lib/services/node-data.service.d.ts.map +1 -1
  262. package/lib/services/settings-service.class.d.ts +0 -2
  263. package/lib/services/settings-service.class.d.ts.map +1 -1
  264. package/lib/services/settings.service.d.ts.map +1 -1
  265. package/lib/services/tab-name.service.d.ts.map +1 -1
  266. package/lib/services/ziti-controller-data.service.d.ts +1 -0
  267. package/lib/services/ziti-controller-data.service.d.ts.map +1 -1
  268. package/lib/services/ziti-data.service.d.ts +1 -0
  269. package/lib/services/ziti-data.service.d.ts.map +1 -1
  270. package/lib/shared/list-page-component.class.d.ts.map +1 -1
  271. package/lib/zac-routing.module.d.ts.map +1 -1
  272. package/lib/ziti-console-lib.module.d.ts +114 -110
  273. package/lib/ziti-console-lib.module.d.ts.map +1 -1
  274. package/lib/ziti-console.constants.d.ts +1 -0
  275. package/lib/ziti-console.constants.d.ts.map +1 -1
  276. package/package.json +1 -1
  277. package/public-api.d.ts +8 -7
  278. package/public-api.d.ts.map +1 -1
  279. package/assets/components/add.html +0 -1
  280. package/assets/components/api.html +0 -12
  281. package/assets/components/customtags.html +0 -4
  282. package/assets/components/line.html +0 -1
  283. package/assets/components/noitems.html +0 -1
  284. package/assets/components/save.html +0 -4
  285. package/assets/components/search.html +0 -8
  286. package/assets/components/tabIdentities.html +0 -5
  287. package/assets/components/tabPolicies.html +0 -7
  288. package/assets/components/tabRouters.html +0 -5
  289. package/assets/components/tabServers.html +0 -4
  290. package/assets/components/tabServices.html +0 -6
  291. package/assets/components/tabSessions.html +0 -4
  292. package/assets/data/mail.json +0 -0
  293. package/assets/data/services.json +0 -6
  294. package/assets/data/site.json +0 -31
  295. package/assets/data/tags.json +0 -7
  296. package/assets/data/templates.json +0 -1
  297. package/assets/fonts/zac.eot +0 -0
  298. package/assets/fonts/zac.svg +0 -57
  299. package/assets/fonts/zac.ttf +0 -0
  300. package/assets/fonts/zac.woff +0 -0
  301. package/assets/fonts/zac.woff2 +0 -0
  302. package/assets/html/api-sessions.htm +0 -152
  303. package/assets/html/attributes.htm +0 -260
  304. package/assets/html/auth-policies.htm +0 -410
  305. package/assets/html/cas.htm +0 -439
  306. package/assets/html/config-types.htm +0 -167
  307. package/assets/html/configs.htm +0 -238
  308. package/assets/html/deprecated/fabric-links.htm +0 -336
  309. package/assets/html/deprecated/fabric-routers.htm +0 -72
  310. package/assets/html/deprecated/fabric-services.htm +0 -494
  311. package/assets/html/identities.htm +0 -934
  312. package/assets/html/index.htm +0 -179
  313. package/assets/html/jwt-signers.htm +0 -260
  314. package/assets/html/known.htm +0 -115
  315. package/assets/html/login.htm +0 -131
  316. package/assets/html/organization.htm +0 -223
  317. package/assets/html/posture-checks.htm +0 -393
  318. package/assets/html/profile.htm +0 -52
  319. package/assets/html/recipes.htm +0 -455
  320. package/assets/html/router-policies.htm +0 -168
  321. package/assets/html/routers.htm +0 -323
  322. package/assets/html/servers.htm +0 -236
  323. package/assets/html/service-policies.htm +0 -197
  324. package/assets/html/service-router-policies.htm +0 -170
  325. package/assets/html/services.htm +0 -634
  326. package/assets/html/sessions.htm +0 -157
  327. package/assets/html/settings.htm +0 -146
  328. package/assets/html/terminators.htm +0 -244
  329. package/assets/html/transit-routers.htm +0 -173
  330. package/assets/resources/avatar/man.svg +0 -78
  331. package/assets/resources/avatar/woman.svg +0 -96
  332. package/assets/resources/icon/analysis.svg +0 -104
  333. package/assets/resources/icon/appwans.svg +0 -20
  334. package/assets/resources/icon/architecture.svg +0 -1
  335. package/assets/resources/icon/bike.svg +0 -94
  336. package/assets/resources/icon/bus.svg +0 -64
  337. package/assets/resources/icon/cas.svg +0 -46
  338. package/assets/resources/icon/clusters.svg +0 -28
  339. package/assets/resources/icon/computer.svg +0 -1
  340. package/assets/resources/icon/data.svg +0 -1
  341. package/assets/resources/icon/delivery-truck.svg +0 -1
  342. package/assets/resources/icon/explosion.svg +0 -81
  343. package/assets/resources/icon/fabricServices.svg +0 -31
  344. package/assets/resources/icon/fabrics.svg +0 -136
  345. package/assets/resources/icon/front.svg +0 -83
  346. package/assets/resources/icon/gateway.svg +0 -49
  347. package/assets/resources/icon/gear.svg +0 -122
  348. package/assets/resources/icon/house.svg +0 -72
  349. package/assets/resources/icon/language.svg +0 -1
  350. package/assets/resources/icon/objective.svg +0 -55
  351. package/assets/resources/icon/route.svg +0 -97
  352. package/assets/resources/icon/routers.svg +0 -27
  353. package/assets/resources/icon/startup.svg +0 -112
  354. package/assets/resources/icon/switch.svg +0 -101
  355. package/assets/scripts/chart.min.js +0 -7
  356. package/assets/scripts/commands.js +0 -112
  357. package/assets/scripts/components/codemirror/codemirror.css +0 -356
  358. package/assets/scripts/components/codemirror/codemirror.js +0 -9741
  359. package/assets/scripts/components/codemirror/modes/addons/closetags.js +0 -200
  360. package/assets/scripts/components/codemirror/modes/addons/colorize.js +0 -40
  361. package/assets/scripts/components/codemirror/modes/addons/css-hint.js +0 -66
  362. package/assets/scripts/components/codemirror/modes/addons/formatting.js +0 -124
  363. package/assets/scripts/components/codemirror/modes/addons/html-hint.js +0 -366
  364. package/assets/scripts/components/codemirror/modes/addons/javascript-hint.js +0 -159
  365. package/assets/scripts/components/codemirror/modes/addons/show-hint.css +0 -36
  366. package/assets/scripts/components/codemirror/modes/addons/show-hint.js +0 -482
  367. package/assets/scripts/components/codemirror/modes/css.js +0 -831
  368. package/assets/scripts/components/codemirror/modes/htmlmixed.js +0 -152
  369. package/assets/scripts/components/codemirror/modes/javascript.js +0 -930
  370. package/assets/scripts/components/codemirror/modes/xml.js +0 -413
  371. package/assets/scripts/components/column.css +0 -184
  372. package/assets/scripts/components/column.js +0 -165
  373. package/assets/scripts/components/flows.css +0 -0
  374. package/assets/scripts/components/flows.js +0 -48
  375. package/assets/scripts/components/moment.js +0 -4602
  376. package/assets/scripts/components/multiselect.js +0 -333
  377. package/assets/scripts/components/resources.js +0 -26
  378. package/assets/scripts/components/selector-new.js +0 -300
  379. package/assets/scripts/components/selector.js +0 -300
  380. package/assets/scripts/components/spectrum.js +0 -2323
  381. package/assets/scripts/components/timezone.js +0 -1545
  382. package/assets/scripts/context.js +0 -177
  383. package/assets/scripts/dragging.js +0 -58
  384. package/assets/scripts/forms/forms.js +0 -74
  385. package/assets/scripts/forms/host.v1.htm +0 -43
  386. package/assets/scripts/forms/intercept.v1.htm +0 -0
  387. package/assets/scripts/forms/schema.js +0 -693
  388. package/assets/scripts/growler.js +0 -137
  389. package/assets/scripts/header.js +0 -163
  390. package/assets/scripts/jquery-3.6.3.min.js +0 -2
  391. package/assets/scripts/jquery.datetimepicker.js +0 -2930
  392. package/assets/scripts/locale.js +0 -47
  393. package/assets/scripts/modal.js +0 -65
  394. package/assets/scripts/model/data.js +0 -558
  395. package/assets/scripts/model/fabric.js +0 -55
  396. package/assets/scripts/model/fabricServices.js +0 -45
  397. package/assets/scripts/model/known.js +0 -43
  398. package/assets/scripts/model/links.js +0 -44
  399. package/assets/scripts/model/routers.js +0 -51
  400. package/assets/scripts/model/series.js +0 -70
  401. package/assets/scripts/model/sessions.js +0 -61
  402. package/assets/scripts/model/settings.js +0 -60
  403. package/assets/scripts/model/summary.js +0 -49
  404. package/assets/scripts/model/tags.js +0 -310
  405. package/assets/scripts/model/templates.js +0 -42
  406. package/assets/scripts/model/user.js +0 -40
  407. package/assets/scripts/restrictions.js +0 -34
  408. package/assets/scripts/service.js +0 -76
  409. package/assets/scripts/validation-tools.js +0 -5119
  410. package/assets/scripts/ziti.js +0 -372
  411. package/assets/styles/chart.min.css +0 -1
  412. package/assets/styles/datetimepicker.css +0 -1
  413. package/assets/styles/forms.css +0 -521
  414. package/assets/styles/growler.css +0 -190
  415. package/assets/styles/header.css +0 -232
  416. package/assets/styles/icons.css +0 -182
  417. package/assets/styles/navigation.css +0 -183
  418. package/assets/styles/select2.css +0 -481
  419. package/assets/styles/spectrum.css +0 -507
  420. package/assets/styles/tables.css +0 -449
  421. package/assets/styles/tooltip.css +0 -134
  422. package/assets/styles/ziti.css +0 -3271
  423. package/assets/templates/footer.htm +0 -183
  424. package/assets/templates/header.htm +0 -297
  425. package/esm2022/lib/features/sidebars/side-banner/side-banner.component.mjs +0 -17
  426. package/esm2022/lib/features/sidebars/side-toolbar/side-toolbar.component.mjs +0 -129
  427. package/esm2022/lib/features/wrappers/node-wrapper.service.mjs +0 -51
  428. package/esm2022/lib/features/wrappers/zac-wrapper-service.class.mjs +0 -95
  429. package/esm2022/lib/features/wrappers/zac-wrapper.component.mjs +0 -148
  430. package/esm2022/lib/features/wrappers/zac-wrapper.service.mjs +0 -981
  431. package/esm2022/lib/version.mjs +0 -4
  432. package/lib/features/sidebars/side-banner/side-banner.component.d.ts +0 -7
  433. package/lib/features/sidebars/side-banner/side-banner.component.d.ts.map +0 -1
  434. package/lib/features/sidebars/side-toolbar/side-toolbar.component.d.ts +0 -34
  435. package/lib/features/sidebars/side-toolbar/side-toolbar.component.d.ts.map +0 -1
  436. package/lib/features/wrappers/node-wrapper.service.d.ts +0 -24
  437. package/lib/features/wrappers/node-wrapper.service.d.ts.map +0 -1
  438. package/lib/features/wrappers/zac-wrapper-service.class.d.ts +0 -38
  439. package/lib/features/wrappers/zac-wrapper-service.class.d.ts.map +0 -1
  440. package/lib/features/wrappers/zac-wrapper.component.d.ts +0 -31
  441. package/lib/features/wrappers/zac-wrapper.component.d.ts.map +0 -1
  442. package/lib/features/wrappers/zac-wrapper.service.d.ts +0 -58
  443. package/lib/features/wrappers/zac-wrapper.service.d.ts.map +0 -1
  444. package/lib/version.d.ts +0 -4
  445. package/lib/version.d.ts.map +0 -1
@@ -23,8 +23,6 @@ import * as i0 from "@angular/core";
23
23
  import * as i1 from "@angular/common/http";
24
24
  import * as i2 from "../features/messaging/growler.service";
25
25
  export const SETTINGS_SERVICE = new InjectionToken('SETTINGS_SERVICE');
26
- // @ts-ignore
27
- const { service, growler, context, page, settings } = window;
28
26
  const DEFAULTS = {
29
27
  "session": {},
30
28
  "edgeControllers": [],
@@ -74,7 +72,7 @@ const DEFAULT_API_VERSIONS = {
74
72
  }
75
73
  }
76
74
  };
77
- class SettingsService extends SettingsServiceClass {
75
+ export class SettingsService extends SettingsServiceClass {
78
76
  constructor(httpBackend, growlerService) {
79
77
  super(httpBackend, growlerService);
80
78
  this.httpBackend = httpBackend;
@@ -114,7 +112,8 @@ class SettingsService extends SettingsServiceClass {
114
112
  }))).then((body) => {
115
113
  try {
116
114
  if (body.error) {
117
- growler.error("Invalid Edge Controller: " + body.error);
115
+ let growlerData = new GrowlerModel('error', 'Error', 'Invalid Edge Controller: ' + body.error);
116
+ this.growlerService.show(growlerData);
118
117
  }
119
118
  else {
120
119
  if (body?.data?.apiVersions?.edge?.v1 != null) {
@@ -146,15 +145,18 @@ class SettingsService extends SettingsServiceClass {
146
145
  this.set(this.settings);
147
146
  }
148
147
  else {
149
- growler.error("Invalid Edge Controller: " + JSON.stringify(body));
148
+ let growlerData = new GrowlerModel('error', 'Error', 'Invalid Edge Controller: ' + JSON.stringify(body));
149
+ this.growlerService.show(growlerData);
150
150
  }
151
151
  }
152
152
  }
153
153
  catch (e) {
154
- growler.error("Invalid Edge Controller: " + e);
154
+ let growlerData = new GrowlerModel('error', 'Error', 'Invalid Edge Controller: ' + e);
155
+ this.growlerService.show(growlerData);
155
156
  }
156
157
  }).catch(err => {
157
- growler.error(err);
158
+ let growlerData = new GrowlerModel('error', 'Error', 'Invalid Edge Controller: ' + err);
159
+ this.growlerService.show(growlerData);
158
160
  });
159
161
  }
160
162
  initApiVersions(url) {
@@ -168,7 +170,8 @@ class SettingsService extends SettingsServiceClass {
168
170
  .pipe(tap((body) => {
169
171
  try {
170
172
  if (body.error) {
171
- growler.error("Invalid Edge Controller: " + body.error);
173
+ let growlerData = new GrowlerModel('error', 'Error', 'Invalid Edge Controller: ' + body.error);
174
+ this.growlerService.show(growlerData);
172
175
  }
173
176
  else {
174
177
  this.apiVersions = body.data.apiVersions;
@@ -176,7 +179,8 @@ class SettingsService extends SettingsServiceClass {
176
179
  }
177
180
  }
178
181
  catch (e) {
179
- growler.error("Invalid Edge Controller: " + body);
182
+ let growlerData = new GrowlerModel('error', 'Error', 'Invalid Edge Controller: ' + body);
183
+ this.growlerService.show(growlerData);
180
184
  }
181
185
  }), catchError((err) => {
182
186
  this.apiVersions = DEFAULT_API_VERSIONS;
@@ -190,11 +194,10 @@ class SettingsService extends SettingsServiceClass {
190
194
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SettingsService, deps: [{ token: i1.HttpBackend }, { token: i2.GrowlerService }], target: i0.ɵɵFactoryTarget.Injectable }); }
191
195
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SettingsService, providedIn: 'root' }); }
192
196
  }
193
- export { SettingsService };
194
197
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SettingsService, decorators: [{
195
198
  type: Injectable,
196
199
  args: [{
197
200
  providedIn: 'root'
198
201
  }]
199
202
  }], ctorParameters: function () { return [{ type: i1.HttpBackend }, { type: i2.GrowlerService }]; } });
200
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3Muc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9zZXJ2aWNlcy9zZXR0aW5ncy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztFQWNFO0FBRUYsT0FBTyxFQUFDLFVBQVUsRUFBVSxjQUFjLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUMsT0FBTyxFQUFRLE1BQU0sUUFBUSxDQUFDO0FBRXRDLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBRTlELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQzs7OztBQUdqRSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLGNBQWMsQ0FBdUIsa0JBQWtCLENBQUMsQ0FBQztBQUU3RixhQUFhO0FBQ2IsTUFBTSxFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUMsR0FBRyxNQUFNLENBQUM7QUFDM0QsTUFBTSxRQUFRLEdBQUc7SUFDYixTQUFTLEVBQUUsRUFBRTtJQUNiLGlCQUFpQixFQUFFLEVBQUU7SUFDckIsVUFBVSxFQUFFLElBQUk7SUFDaEIsUUFBUSxFQUFFLEtBQUs7SUFDZixVQUFVLEVBQUUsU0FBUztJQUNyQixVQUFVLEVBQUUsTUFBTTtJQUNsQixNQUFNLEVBQUUsV0FBVztJQUNuQixNQUFNLEVBQUUsSUFBSTtJQUNaLFNBQVMsRUFBRSxJQUFJO0lBQ2Ysb0JBQW9CLEVBQUUsS0FBSztJQUMzQixNQUFNLEVBQUU7UUFDSixNQUFNLEVBQUUs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QUM7aUJBQzFEO2FBQ0o7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDUixPQUFPLENBQUMsS0FBSyxDQUFDLDJCQUEyQixHQUFHLElBQUksQ0FBQyxDQUFDO2FBQ3JEO1FBQ0wsQ0FBQyxDQUFDLEVBQ0YsVUFBVSxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxvQkFBb0IsQ0FBQztZQUN4QyxNQUFNLFdBQVcsR0FBRyxJQUFJLFlBQVksQ0FDaEMsT0FBTyxFQUNQLE9BQU8sRUFDUCxpQkFBaUIsRUFDakIseUNBQXlDLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FDMUQsQ0FBQztZQUNGLE1BQU0sR0FBRyxHQUFRLEVBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUMsQ0FBQztZQUMxQyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7WUFDZCxPQUFPLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFBO1FBQ2xDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQixDQUFDOytHQS9HUSxlQUFlO21IQUFmLGVBQWUsY0FGWixNQUFNOztTQUVULGVBQWU7NEZBQWYsZUFBZTtrQkFIM0IsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICAgIENvcHlyaWdodCBOZXRGb3VuZHJ5IEluYy5cblxuICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4qL1xuXG5pbXBvcnQge0luamVjdGFibGUsIEluamVjdCwgSW5qZWN0aW9uVG9rZW59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtmaXJzdFZhbHVlRnJvbSwgbWFwLCB0YXB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQge2NhdGNoRXJyb3J9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xuaW1wb3J0IHtpc0VtcHR5LCBkZWZlcn0gZnJvbSBcImxvZGFzaFwiO1xuaW1wb3J0IHtIdHRwQmFja2VuZCwgSHR0cENsaWVudH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5pbXBvcnQge1NldHRpbmdzU2VydmljZUNsYXNzfSBmcm9tIFwiLi9zZXR0aW5ncy1zZXJ2aWNlLmNsYXNzXCI7XG5pbXBvcnQge0dyb3dsZXJTZXJ2aWNlfSBmcm9tIFwiLi4vZmVhdHVyZXMvbWVzc2FnaW5nL2dyb3dsZXIuc2VydmljZVwiO1xuaW1wb3J0IHtHcm93bGVyTW9kZWx9IGZyb20gXCIuLi9mZWF0dXJlcy9tZXNzYWdpbmcvZ3Jvd2xlci5tb2RlbFwiO1xuaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50L21vbWVudFwiO1xuXG5leHBvcnQgY29uc3QgU0VUVElOR1NfU0VSVklDRSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxTZXR0aW5nc1NlcnZpY2VDbGFzcz4oJ1NFVFRJTkdTX1NFUlZJQ0UnKTtcblxuLy8gQHRzLWlnbm9yZVxuY29uc3Qge3NlcnZpY2UsIGdyb3dsZXIsIGNvbnRleHQsIHBhZ2UsIHNldHRpbmdzfSA9IHdpbmRvdztcbmNvbnN0IERFRkFVTFRTID0ge1xuICAgIFwic2Vzc2lvblwiOiB7fSxcbiAgICBcImVkZ2VDb250cm9sbGVyc1wiOiBbXSxcbiAgICBcImVkaXRhYmxlXCI6IHRydWUsXG4gICAgXCJ1cGRhdGVcIjogZmFsc2UsXG4gICAgXCJsb2NhdGlvblwiOiBcIi4uL3ppdGlcIixcbiAgICBcInByb3RvY29sXCI6IFwiaHR0cFwiLFxuICAgIFwiaG9zdFwiOiBcImxvY2FsaG9zdFwiLFxuICAgIFwicG9ydFwiOiAxNDA4LFxuICAgIFwicG9ydFRMU1wiOiA4NDQzLFxuICAgIFwicmVqZWN0VW5hdXRob3JpemVkXCI6IGZhbHNlLFxuICAgIFwibWFpbFwiOiB7XG4gICAgICAgIFwiaG9zdFwiOiBcIlwiLFxuICAgICAgICBcInBvcnRcIjogMjUsXG4gICAgICAgIFwic2VjdXJlXCI6IGZhbHNlLFxuICAgICAgICBcImF1dGhcIjoge1xuICAgICAgICAgICAgXCJ1c2VyXCI6IFwiXCIsXG4gICAgICAgICAgICBcInBhc3NcIjogXCJcIlxuICAgICAgICB9XG4gICAgfSxcbiAgICBcImZyb21cIjogXCJcIixcbiAgICBcInRvXCI6IFwiXCIsXG59XG5cbmNvbnN0IERFRkFVTFRfQVBJX1ZFUlNJT05TOiBhbnkgPSB7XG4gICAgXCJlZGdlXCI6IHtcbiAgICAgIFwidjFcIjoge1xuICAgICAgICBcImFwaUJhc2VVcmxzXCI6IFtcbiAgICAgICAgICBgJHt3aW5kb3cub3JpZ2lufS9lZGdlL2NsaWVudC92MWBcbiAgICAgICAgXSxcbiAgICAgICAgXCJwYXRoXCI6IFwiL2VkZ2UvY2xpZW50L3YxXCJcbiAgICAgIH1cbiAgICB9LFxuICAgIFwiZWRnZS1jbGllbnRcIjoge1xuICAgICAgXCJ2MVwiOiB7XG4gICAgICAgIFwiYXBpQmFzZVVybHNcIjogW1xuICAgICAgICAgIGAke3dpbmRvdy5vcmlnaW59L2VkZ2UvY2xpZW50L3YxYFxuICAgICAgICBdLFxuICAgICAgICBcInBhdGhcIjogXCIvZWRnZS9jbGllbnQvdjFcIlxuICAgICAgfVxuICAgIH0sXG4gICAgXCJlZGdlLW1hbmFnZW1lbnRcIjoge1xuICAgICAgXCJ2MVwiOiB7XG4gICAgICAgIFwiYXBpQmFzZVVybHNcIjogW1xuICAgICAgICAgIGAke3dpbmRvdy5vcmlnaW59L2VkZ2UvbWFuYWdlbWVudC92MWBcbiAgICAgICAgXSxcbiAgICAgICAgXCJwYXRoXCI6IFwiL2VkZ2UvbWFuYWdlbWVudC92MVwiXG4gICAgICB9XG4gICAgfVxuICB9O1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFNldHRpbmdzU2VydmljZSBleHRlbmRzIFNldHRpbmdzU2VydmljZUNsYXNzIHtcblxuICAgIG92ZXJyaWRlIGFsbG93Q29udHJvbGxlckFkZCA9IHRydWU7XG5cbiAgICBjb25zdHJ1Y3RvcihvdmVycmlkZSBodHRwQmFja2VuZDogSHR0cEJhY2tlbmQsIG92ZXJyaWRlIGdyb3dsZXJTZXJ2aWNlOiBHcm93bGVyU2VydmljZSkge1xuICAgICAgICBzdXBlcihodHRwQmFja2VuZCwgZ3Jvd2xlclNlcnZpY2UpO1xuICAgIH1cblxuICAgIGluaXQoKSB7XG4gICAgICAgIHRoaXMuZ2V0KCk7XG4gICAgICAgIHRoaXMudmVyc2lvbigpO1xuXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLnBvcnQgJiYgIWlzTmFOKHRoaXMuc2V0dGluZ3MucG9ydCkpIHRoaXMucG9ydCA9IHRoaXMuc2V0dGluZ3MucG9ydDtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MucG9ydFRMUyAmJiAhaXNOYU4odGhpcy5zZXR0aW5ncy5wb3J0VExTKSkgdGhpcy5wb3J0VExTID0gdGhpcy5zZXR0aW5ncy5wb3J0VExTO1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5yZWplY3RVbmF1dGhvcml6ZWQgJiYgIWlzTmFOKHRoaXMuc2V0dGluZ3MucmVqZWN0VW5hdXRob3JpemVkKSkgdGhpcy5yZWplY3RVbmF1dGhvcml6ZWQgPSB0aGlzLnNldHRpbmdzLnJlamVjdFVuYXV0aG9yaXplZDtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3Muc2VsZWN0ZWRFZGdlQ29udHJvbGxlcikgcmV0dXJuIHRoaXMuaW5pdEFwaVZlcnNpb25zKHRoaXMuc2V0dGluZ3Muc2VsZWN0ZWRFZGdlQ29udHJvbGxlcik7XG4gICAgICAgIGVsc2UgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIGxvYWRTZXR0aW5ncygpIHtcbiAgICAgICAgLy90aGlzIGlzIGEgbm8tb3AgZm9yIHRoZSBkZWZhdWx0IHNldHRpbmdzIHNlcnZpY2VcbiAgICB9XG5cbiAgICBvdmVycmlkZSBoYXNTZXNzaW9uKCkge1xuICAgICAgICBjb25zdCBoYXNTZXNzaW9uSWQgPSAhaXNFbXB0eSh0aGlzLnNldHRpbmdzPy5zZXNzaW9uPy5pZCk7XG4gICAgICAgIHJldHVybiBoYXNTZXNzaW9uSWQ7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgY29udHJvbGxlclNhdmUobmFtZTogc3RyaW5nLCB1cmw6IHN0cmluZykge1xuICAgICAgICB1cmwgPSB1cmwuc3BsaXQoJyMnKS5qb2luKCcnKS5zcGxpdCgnPycpLmpvaW4oJycpO1xuICAgICAgICBpZiAodXJsLmVuZHNXaXRoKCcvJykpIHVybCA9IHVybC5zdWJzdHIoMCwgdXJsLmxlbmd0aCAtIDEpO1xuICAgICAgICBpZiAoIXVybC5zdGFydHNXaXRoKCdodHRwczovLycpICYmICF1cmwuc3RhcnRzV2l0aCgnaHR0cDovLycpKSB1cmwgPSAnaHR0cHM6Ly8nICsgdXJsO1xuICAgICAgICBjb25zdCBjYWxsVXJsID0gdXJsICsgXCIvZWRnZS9tYW5hZ2VtZW50L3YxL3ZlcnNpb24/cmVqZWN0VW5hdXRob3JpemVkPVwiICsgdGhpcy5yZWplY3RVbmF1dGhvcml6ZWQ7XG4gICAgICAgIGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cENsaWVudC5nZXQoY2FsbFVybCkucGlwZShjYXRjaEVycm9yKChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhyb3cgXCJFZGdlIENvbnRyb2xsZXIgbm90IE9ubGluZTogXCIgKyBlcnI/Lm1lc3NhZ2U7XG4gICAgICAgIH0pKSkudGhlbigoYm9keTogYW55KSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGlmIChib2R5LmVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGdyb3dsZXIuZXJyb3IoXCJJbnZhbGlkIEVkZ2UgQ29udHJvbGxlcjogXCIgKyBib2R5LmVycm9yKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYm9keT8uZGF0YT8uYXBpVmVyc2lvbnM/LmVkZ2U/LnYxICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBpVmVyc2lvbnMgPSBib2R5LmRhdGEuYXBpVmVyc2lvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmdzLmVkZ2VDb250cm9sbGVycz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZXR0aW5ncy5lZGdlQ29udHJvbGxlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuZWRnZUNvbnRyb2xsZXJzW2ldLnVybCA9PSB1cmwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MuZWRnZUNvbnRyb2xsZXJzW2ldLm5hbWUgPSBuYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5ncy5lZGdlQ29udHJvbGxlcnNbaV0udXJsID0gdXJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlzRGVmYXVsdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZXR0aW5ncy5lZGdlQ29udHJvbGxlcnMpIHRoaXMuc2V0dGluZ3MuZWRnZUNvbnRyb2xsZXJzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuZWRnZUNvbnRyb2xsZXJzPy5sZW5ndGggPT09IDApIGlzRGVmYXVsdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5ncy5lZGdlQ29udHJvbGxlcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBpc0RlZmF1bHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3Muc2VsZWN0ZWRFZGdlQ29udHJvbGxlciA9IHVybDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KHRoaXMuc2V0dGluZ3MpO1xuXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBncm93bGVyLmVycm9yKFwiSW52YWxpZCBFZGdlIENvbnRyb2xsZXI6IFwiICsgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGdyb3dsZXIuZXJyb3IoXCJJbnZhbGlkIEVkZ2UgQ29udHJvbGxlcjogXCIgKyBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIGdyb3dsZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGluaXRBcGlWZXJzaW9ucyh1cmw6IHN0cmluZykge1xuICAgICAgICB1cmwgPSB1cmwuc3BsaXQoJyMnKS5qb2luKCcnKS5zcGxpdCgnPycpLmpvaW4oJycpO1xuICAgICAgICBpZiAodXJsLmVuZHNXaXRoKCcvJykpIHVybCA9IHVybC5zdWJzdHIoMCwgdXJsLmxlbmd0aCAtIDEpO1xuICAgICAgICBpZiAoIXVybC5zdGFydHNXaXRoKCdodHRwczovLycpICYmICF1cmwuc3RhcnRzV2l0aCgnaHR0cDovLycpKSB1cmwgPSAnaHR0cHM6Ly8nICsgdXJsO1xuICAgICAgICBjb25zdCBjYWxsVXJsID0gdXJsICsgXCIvZWRnZS9tYW5hZ2VtZW50L3YxL3ZlcnNpb24/cmVqZWN0VW5hdXRob3JpemVkPWZhbHNlXCI7XG4gICAgICAgIHJldHVybiBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHBDbGllbnQuZ2V0KGNhbGxVcmwpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YXAoKGJvZHk6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm93bGVyLmVycm9yKFwiSW52YWxpZCBFZGdlIENvbnRyb2xsZXI6IFwiICsgYm9keS5lcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBpVmVyc2lvbnMgPSBib2R5LmRhdGEuYXBpVmVyc2lvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy56aXRpU2VtdmVyID0gYm9keS5kYXRhPy52ZXJzaW9uPy5yZXBsYWNlKFwidlwiLCBcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3Jvd2xlci5lcnJvcihcIkludmFsaWQgRWRnZSBDb250cm9sbGVyOiBcIiArIGJvZHkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcGlWZXJzaW9ucyA9IERFRkFVTFRfQVBJX1ZFUlNJT05TO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBncm93bGVyRGF0YSA9IG5ldyBHcm93bGVyTW9kZWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGBFZGdlIENvbnRyb2xsZXJgLFxuICAgICAgICAgICAgICAgICAgICAgICAgYEZhaWxlZCB0byBjb25uZWN0IHRvIEVkZ2UgQ29udHJvbGxlcjogJHtlcnI/Lm1lc3NhZ2V9YCxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzOiBhbnkgPSB7ZGF0YTogdGhpcy5hcGlWZXJzaW9uc307XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBtYXAoKGJvZHk6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYm9keT8uZGF0YT8uYXBpVmVyc2lvbnNcbiAgICAgICAgICAgICAgICB9KSkpO1xuICAgIH1cbn1cbiJdfQ==
203
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3Muc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9zZXJ2aWNlcy9zZXR0aW5ncy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztFQWNFO0FBRUYsT0FBTyxFQUFDLFVBQVUsRUFBVSxjQUFjLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakUsT0FBTyxFQUFDLGNBQWMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxQyxPQUFPLEVBQUMsT0FBTyxFQUFRLE1BQU0sUUFBUSxDQUFDO0FBRXRDLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBRTlELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQzs7OztBQUdqRSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLGNBQWMsQ0FBdUIsa0JBQWtCLENBQUMsQ0FBQztBQUU3RixNQUFNLFFBQVEsR0FBRztJQUNiLFNBQVMsRUFBRSxFQUFFO0lBQ2IsaUJBQWlCLEVBQUUsRUFBRTtJQUNyQixVQUFVLEVBQUUsSUFBSTtJQUNoQixRQUFRLEVBQUUsS0FBSztJQUNmLFVBQVUsRUFBRSxTQUFTO0lBQ3JCLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLE1BQU0sRUFBRSxXQUFXO0lBQ25CLE1BQU0sRUFBRSxJQUFJO0lBQ1osU0FBUyxFQUFFLElBQUk7SUFDZixvQkFBb0IsRUFBRSxLQUFLO0lBQzNCLE1BQU0sRUFBRTtRQUNKLE1BQU0sRUFBRSxFQUFFO1FBQ1YsTUFBTSxFQUFFLEVBQUU7UUFDVixRQUFRLEVBQUUsS0FBSztRQUNmLE1BQU0sRUFBRTtZQUNKLE1BQU0sRUFBRSxFQUFFO1lBQ1YsTUFBTSxF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V0FBVyxDQUFBO1FBQ2xDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqQixDQUFDOytHQTdJUSxlQUFlO21IQUFmLGVBQWUsY0FGWixNQUFNOzs0RkFFVCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gICAgQ29weXJpZ2h0IE5ldEZvdW5kcnkgSW5jLlxuXG4gICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiovXG5cbmltcG9ydCB7SW5qZWN0YWJsZSwgSW5qZWN0LCBJbmplY3Rpb25Ub2tlbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge2ZpcnN0VmFsdWVGcm9tLCBtYXAsIHRhcH0gZnJvbSBcInJ4anNcIjtcbmltcG9ydCB7Y2F0Y2hFcnJvcn0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XG5pbXBvcnQge2lzRW1wdHksIGRlZmVyfSBmcm9tIFwibG9kYXNoXCI7XG5pbXBvcnQge0h0dHBCYWNrZW5kLCBIdHRwQ2xpZW50fSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcbmltcG9ydCB7U2V0dGluZ3NTZXJ2aWNlQ2xhc3N9IGZyb20gXCIuL3NldHRpbmdzLXNlcnZpY2UuY2xhc3NcIjtcbmltcG9ydCB7R3Jvd2xlclNlcnZpY2V9IGZyb20gXCIuLi9mZWF0dXJlcy9tZXNzYWdpbmcvZ3Jvd2xlci5zZXJ2aWNlXCI7XG5pbXBvcnQge0dyb3dsZXJNb2RlbH0gZnJvbSBcIi4uL2ZlYXR1cmVzL21lc3NhZ2luZy9ncm93bGVyLm1vZGVsXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gXCJtb21lbnQvbW9tZW50XCI7XG5cbmV4cG9ydCBjb25zdCBTRVRUSU5HU19TRVJWSUNFID0gbmV3IEluamVjdGlvblRva2VuPFNldHRpbmdzU2VydmljZUNsYXNzPignU0VUVElOR1NfU0VSVklDRScpO1xuXG5jb25zdCBERUZBVUxUUyA9IHtcbiAgICBcInNlc3Npb25cIjoge30sXG4gICAgXCJlZGdlQ29udHJvbGxlcnNcIjogW10sXG4gICAgXCJlZGl0YWJsZVwiOiB0cnVlLFxuICAgIFwidXBkYXRlXCI6IGZhbHNlLFxuICAgIFwibG9jYXRpb25cIjogXCIuLi96aXRpXCIsXG4gICAgXCJwcm90b2NvbFwiOiBcImh0dHBcIixcbiAgICBcImhvc3RcIjogXCJsb2NhbGhvc3RcIixcbiAgICBcInBvcnRcIjogMTQwOCxcbiAgICBcInBvcnRUTFNcIjogODQ0MyxcbiAgICBcInJlamVjdFVuYXV0aG9yaXplZFwiOiBmYWxzZSxcbiAgICBcIm1haWxcIjoge1xuICAgICAgICBcImhvc3RcIjogXCJcIixcbiAgICAgICAgXCJwb3J0XCI6IDI1LFxuICAgICAgICBcInNlY3VyZVwiOiBmYWxzZSxcbiAgICAgICAgXCJhdXRoXCI6IHtcbiAgICAgICAgICAgIFwidXNlclwiOiBcIlwiLFxuICAgICAgICAgICAgXCJwYXNzXCI6IFwiXCJcbiAgICAgICAgfVxuICAgIH0sXG4gICAgXCJmcm9tXCI6IFwiXCIsXG4gICAgXCJ0b1wiOiBcIlwiLFxufVxuXG5jb25zdCBERUZBVUxUX0FQSV9WRVJTSU9OUzogYW55ID0ge1xuICAgIFwiZWRnZVwiOiB7XG4gICAgICBcInYxXCI6IHtcbiAgICAgICAgXCJhcGlCYXNlVXJsc1wiOiBbXG4gICAgICAgICAgYCR7d2luZG93Lm9yaWdpbn0vZWRnZS9jbGllbnQvdjFgXG4gICAgICAgIF0sXG4gICAgICAgIFwicGF0aFwiOiBcIi9lZGdlL2NsaWVudC92MVwiXG4gICAgICB9XG4gICAgfSxcbiAgICBcImVkZ2UtY2xpZW50XCI6IHtcbiAgICAgIFwidjFcIjoge1xuICAgICAgICBcImFwaUJhc2VVcmxzXCI6IFtcbiAgICAgICAgICBgJHt3aW5kb3cub3JpZ2lufS9lZGdlL2NsaWVudC92MWBcbiAgICAgICAgXSxcbiAgICAgICAgXCJwYXRoXCI6IFwiL2VkZ2UvY2xpZW50L3YxXCJcbiAgICAgIH1cbiAgICB9LFxuICAgIFwiZWRnZS1tYW5hZ2VtZW50XCI6IHtcbiAgICAgIFwidjFcIjoge1xuICAgICAgICBcImFwaUJhc2VVcmxzXCI6IFtcbiAgICAgICAgICBgJHt3aW5kb3cub3JpZ2lufS9lZGdlL21hbmFnZW1lbnQvdjFgXG4gICAgICAgIF0sXG4gICAgICAgIFwicGF0aFwiOiBcIi9lZGdlL21hbmFnZW1lbnQvdjFcIlxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBTZXR0aW5nc1NlcnZpY2UgZXh0ZW5kcyBTZXR0aW5nc1NlcnZpY2VDbGFzcyB7XG5cbiAgICBvdmVycmlkZSBhbGxvd0NvbnRyb2xsZXJBZGQgPSB0cnVlO1xuXG4gICAgY29uc3RydWN0b3Iob3ZlcnJpZGUgaHR0cEJhY2tlbmQ6IEh0dHBCYWNrZW5kLCBvdmVycmlkZSBncm93bGVyU2VydmljZTogR3Jvd2xlclNlcnZpY2UpIHtcbiAgICAgICAgc3VwZXIoaHR0cEJhY2tlbmQsIGdyb3dsZXJTZXJ2aWNlKTtcbiAgICB9XG5cbiAgICBpbml0KCkge1xuICAgICAgICB0aGlzLmdldCgpO1xuICAgICAgICB0aGlzLnZlcnNpb24oKTtcblxuICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5wb3J0ICYmICFpc05hTih0aGlzLnNldHRpbmdzLnBvcnQpKSB0aGlzLnBvcnQgPSB0aGlzLnNldHRpbmdzLnBvcnQ7XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLnBvcnRUTFMgJiYgIWlzTmFOKHRoaXMuc2V0dGluZ3MucG9ydFRMUykpIHRoaXMucG9ydFRMUyA9IHRoaXMuc2V0dGluZ3MucG9ydFRMUztcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MucmVqZWN0VW5hdXRob3JpemVkICYmICFpc05hTih0aGlzLnNldHRpbmdzLnJlamVjdFVuYXV0aG9yaXplZCkpIHRoaXMucmVqZWN0VW5hdXRob3JpemVkID0gdGhpcy5zZXR0aW5ncy5yZWplY3RVbmF1dGhvcml6ZWQ7XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmdzLnNlbGVjdGVkRWRnZUNvbnRyb2xsZXIpIHJldHVybiB0aGlzLmluaXRBcGlWZXJzaW9ucyh0aGlzLnNldHRpbmdzLnNlbGVjdGVkRWRnZUNvbnRyb2xsZXIpO1xuICAgICAgICBlbHNlIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBsb2FkU2V0dGluZ3MoKSB7XG4gICAgICAgIC8vdGhpcyBpcyBhIG5vLW9wIGZvciB0aGUgZGVmYXVsdCBzZXR0aW5ncyBzZXJ2aWNlXG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgaGFzU2Vzc2lvbigpIHtcbiAgICAgICAgY29uc3QgaGFzU2Vzc2lvbklkID0gIWlzRW1wdHkodGhpcy5zZXR0aW5ncz8uc2Vzc2lvbj8uaWQpO1xuICAgICAgICByZXR1cm4gaGFzU2Vzc2lvbklkO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIGNvbnRyb2xsZXJTYXZlKG5hbWU6IHN0cmluZywgdXJsOiBzdHJpbmcpIHtcbiAgICAgICAgdXJsID0gdXJsLnNwbGl0KCcjJykuam9pbignJykuc3BsaXQoJz8nKS5qb2luKCcnKTtcbiAgICAgICAgaWYgKHVybC5lbmRzV2l0aCgnLycpKSB1cmwgPSB1cmwuc3Vic3RyKDAsIHVybC5sZW5ndGggLSAxKTtcbiAgICAgICAgaWYgKCF1cmwuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSAmJiAhdXJsLnN0YXJ0c1dpdGgoJ2h0dHA6Ly8nKSkgdXJsID0gJ2h0dHBzOi8vJyArIHVybDtcbiAgICAgICAgY29uc3QgY2FsbFVybCA9IHVybCArIFwiL2VkZ2UvbWFuYWdlbWVudC92MS92ZXJzaW9uP3JlamVjdFVuYXV0aG9yaXplZD1cIiArIHRoaXMucmVqZWN0VW5hdXRob3JpemVkO1xuICAgICAgICBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHBDbGllbnQuZ2V0KGNhbGxVcmwpLnBpcGUoY2F0Y2hFcnJvcigoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRocm93IFwiRWRnZSBDb250cm9sbGVyIG5vdCBPbmxpbmU6IFwiICsgZXJyPy5tZXNzYWdlO1xuICAgICAgICB9KSkpLnRoZW4oKGJvZHk6IGFueSkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoYm9keS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgbGV0IGdyb3dsZXJEYXRhID0gbmV3IEdyb3dsZXJNb2RlbChcbiAgICAgICAgICAgICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgJ0Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgJ0ludmFsaWQgRWRnZSBDb250cm9sbGVyOiAnICsgYm9keS5lcnJvcixcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB0aGlzLmdyb3dsZXJTZXJ2aWNlLnNob3coZ3Jvd2xlckRhdGEpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChib2R5Py5kYXRhPy5hcGlWZXJzaW9ucz8uZWRnZT8udjEgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcGlWZXJzaW9ucyA9IGJvZHkuZGF0YS5hcGlWZXJzaW9ucztcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmb3VuZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZ3MuZWRnZUNvbnRyb2xsZXJzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnNldHRpbmdzLmVkZ2VDb250cm9sbGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5lZGdlQ29udHJvbGxlcnNbaV0udXJsID09IHVybCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5ncy5lZGdlQ29udHJvbGxlcnNbaV0ubmFtZSA9IG5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmdzLmVkZ2VDb250cm9sbGVyc1tpXS51cmwgPSB1cmw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXNEZWZhdWx0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNldHRpbmdzLmVkZ2VDb250cm9sbGVycykgdGhpcy5zZXR0aW5ncy5lZGdlQ29udHJvbGxlcnMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5ncy5lZGdlQ29udHJvbGxlcnM/Lmxlbmd0aCA9PT0gMCkgaXNEZWZhdWx0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmdzLmVkZ2VDb250cm9sbGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGlzRGVmYXVsdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5ncy5zZWxlY3RlZEVkZ2VDb250cm9sbGVyID0gdXJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQodGhpcy5zZXR0aW5ncyk7XG5cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgZ3Jvd2xlckRhdGEgPSBuZXcgR3Jvd2xlck1vZGVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdFcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAnSW52YWxpZCBFZGdlIENvbnRyb2xsZXI6ICcgKyBKU09OLnN0cmluZ2lmeShib2R5KSxcbiAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3Jvd2xlclNlcnZpY2Uuc2hvdyhncm93bGVyRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGdyb3dsZXJEYXRhID0gbmV3IEdyb3dsZXJNb2RlbChcbiAgICAgICAgICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAnRXJyb3InLFxuICAgICAgICAgICAgICAgICAgJ0ludmFsaWQgRWRnZSBDb250cm9sbGVyOiAnICsgZSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3Jvd2xlclNlcnZpY2Uuc2hvdyhncm93bGVyRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICBsZXQgZ3Jvd2xlckRhdGEgPSBuZXcgR3Jvd2xlck1vZGVsKFxuICAgICAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICAgICAnRXJyb3InLFxuICAgICAgICAgICAgICAnSW52YWxpZCBFZGdlIENvbnRyb2xsZXI6ICcgKyBlcnIsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5ncm93bGVyU2VydmljZS5zaG93KGdyb3dsZXJEYXRhKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGluaXRBcGlWZXJzaW9ucyh1cmw6IHN0cmluZykge1xuICAgICAgICB1cmwgPSB1cmwuc3BsaXQoJyMnKS5qb2luKCcnKS5zcGxpdCgnPycpLmpvaW4oJycpO1xuICAgICAgICBpZiAodXJsLmVuZHNXaXRoKCcvJykpIHVybCA9IHVybC5zdWJzdHIoMCwgdXJsLmxlbmd0aCAtIDEpO1xuICAgICAgICBpZiAoIXVybC5zdGFydHNXaXRoKCdodHRwczovLycpICYmICF1cmwuc3RhcnRzV2l0aCgnaHR0cDovLycpKSB1cmwgPSAnaHR0cHM6Ly8nICsgdXJsO1xuICAgICAgICBjb25zdCBjYWxsVXJsID0gdXJsICsgXCIvZWRnZS9tYW5hZ2VtZW50L3YxL3ZlcnNpb24/cmVqZWN0VW5hdXRob3JpemVkPWZhbHNlXCI7XG4gICAgICAgIHJldHVybiBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHBDbGllbnQuZ2V0KGNhbGxVcmwpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YXAoKGJvZHk6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkuZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZ3Jvd2xlckRhdGEgPSBuZXcgR3Jvd2xlck1vZGVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdFcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSW52YWxpZCBFZGdlIENvbnRyb2xsZXI6ICcgKyBib2R5LmVycm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncm93bGVyU2VydmljZS5zaG93KGdyb3dsZXJEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcGlWZXJzaW9ucyA9IGJvZHkuZGF0YS5hcGlWZXJzaW9ucztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnppdGlTZW12ZXIgPSBib2R5LmRhdGE/LnZlcnNpb24/LnJlcGxhY2UoXCJ2XCIsIFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZ3Jvd2xlckRhdGEgPSBuZXcgR3Jvd2xlck1vZGVsKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnRXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnSW52YWxpZCBFZGdlIENvbnRyb2xsZXI6ICcgKyBib2R5LFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3Jvd2xlclNlcnZpY2Uuc2hvdyhncm93bGVyRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFwaVZlcnNpb25zID0gREVGQVVMVF9BUElfVkVSU0lPTlM7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGdyb3dsZXJEYXRhID0gbmV3IEdyb3dsZXJNb2RlbChcbiAgICAgICAgICAgICAgICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAnRXJyb3InLFxuICAgICAgICAgICAgICAgICAgICAgICAgYEVkZ2UgQ29udHJvbGxlcmAsXG4gICAgICAgICAgICAgICAgICAgICAgICBgRmFpbGVkIHRvIGNvbm5lY3QgdG8gRWRnZSBDb250cm9sbGVyOiAke2Vycj8ubWVzc2FnZX1gLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXM6IGFueSA9IHtkYXRhOiB0aGlzLmFwaVZlcnNpb25zfTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG1hcCgoYm9keTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBib2R5Py5kYXRhPy5hcGlWZXJzaW9uc1xuICAgICAgICAgICAgICAgIH0pKSk7XG4gICAgfVxufVxuIl19
@@ -1,5 +1,6 @@
1
1
  import { Inject, Injectable, InjectionToken } from '@angular/core';
2
2
  import { SETTINGS_SERVICE } from "./settings.service";
3
+ import { URLS } from "../urls";
3
4
  import * as i0 from "@angular/core";
4
5
  import * as i1 from "./settings-service.class";
5
6
  export const ZITI_TAB_OVERRIDES = new InjectionToken('ZITI_TAB_OVERRIDES');
@@ -8,22 +9,21 @@ export class NoopTabInterceptorService {
8
9
  return tabs;
9
10
  }
10
11
  }
11
- class TabNameService {
12
+ export class TabNameService {
12
13
  constructor(interceptor, settings) {
13
14
  this.interceptor = interceptor;
14
15
  this.settings = settings;
15
16
  this.pageToTabsMap = new Map([
16
17
  ["identities", [
17
18
  { label: 'Identities', url: '/identities' },
18
- { label: 'Recipes', url: '/recipes', hidden: !this.settings.supportedFeatures?.recipies },
19
- { label: 'Terminators', url: '/terminators' },
20
- { label: 'Posture Checks', url: '/posture-checks' },
19
+ { label: 'Recipes', url: '/recipes', hidden: !this.settings.supportedFeatures?.recipies }
21
20
  ]
22
21
  ],
23
22
  ["services", [
24
23
  { label: 'Services', url: '/services' },
25
24
  { label: 'Configurations', url: '/configs' },
26
25
  { label: 'Config Types', url: '/config-types' },
26
+ { label: 'Terminators', url: '/terminators' },
27
27
  ]
28
28
  ],
29
29
  ["routers", [
@@ -37,6 +37,10 @@ class TabNameService {
37
37
  { label: 'Service Router Policies', url: '/service-router-policies' }
38
38
  ]
39
39
  ],
40
+ ["posture-checks", [
41
+ { label: 'Posture Checks', url: URLS.ZITI_POSTURE_CHECKS },
42
+ ]
43
+ ],
40
44
  ["authentication", [
41
45
  { label: 'Certificate Authorities', url: '/certificate-authorities' },
42
46
  { label: 'Auth Policies', url: '/auth-policies' },
@@ -57,7 +61,6 @@ class TabNameService {
57
61
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TabNameService, deps: [{ token: ZITI_TAB_OVERRIDES }, { token: SETTINGS_SERVICE }], target: i0.ɵɵFactoryTarget.Injectable }); }
58
62
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TabNameService, providedIn: 'root' }); }
59
63
  }
60
- export { TabNameService };
61
64
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TabNameService, decorators: [{
62
65
  type: Injectable,
63
66
  args: [{
@@ -70,4 +73,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
70
73
  type: Inject,
71
74
  args: [SETTINGS_SERVICE]
72
75
  }] }]; } });
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLW5hbWUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9zZXJ2aWNlcy90YWItbmFtZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVqRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQzs7O0FBRXBELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLElBQUksY0FBYyxDQUFTLG9CQUFvQixDQUFDLENBQUM7QUFNbkYsTUFBTSxPQUFPLHlCQUF5QjtJQUNsQyxRQUFRLENBQUMsR0FBVyxFQUFFLElBQVc7UUFDN0IsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztDQUNKO0FBRUQsTUFHYSxjQUFjO0lBMEN2QixZQUN3QyxXQUFrQyxFQUNwQyxRQUE4QjtRQUQ1QixnQkFBVyxHQUFYLFdBQVcsQ0FBdUI7UUFDcEMsYUFBUSxHQUFSLFFBQVEsQ0FBc0I7UUExQ3BFLGtCQUFhLEdBQUcsSUFBSSxHQUFHLENBQ25CO1lBQ0ksQ0FBQyxZQUFZLEVBQUU7b0JBQ1gsRUFBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUM7b0JBQ3pDLEVBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEVBQUUsUUFBUSxFQUFDO29CQUN2RixFQUFDLEtBQUssRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBQztvQkFDM0MsRUFBQyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLGlCQUFpQixFQUFDO2lCQUNwRDthQUNBO1lBQ0QsQ0FBQyxVQUFVLEVBQUU7b0JBQ1QsRUFBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUM7b0JBQ3JDLEVBQUMsS0FBSyxFQUFFLGdCQUFnQixFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUM7b0JBQzFDLEVBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxHQUFHLEVBQUUsZUFBZSxFQUFDO2lCQUNoRDthQUNBO1lBQ0QsQ0FBQyxTQUFTLEVBQUU7b0JBQ1IsRUFBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUM7b0JBQ25DLEVBQUMsS0FBSyxFQUFFLGlCQUFpQixFQUFFLEdBQUcsRUFBRSxrQkFBa0IsRUFBQztpQkFDdEQ7YUFDQTtZQUNELENBQUMsVUFBVSxFQUFFO29CQUNULEVBQUMsS0FBSyxFQUFFLGtCQUFrQixFQUFFLEdBQUcsRUFBRSxtQkFBbUIsRUFBQztvQkFDckQsRUFBQyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxFQUFFLGtCQUFrQixFQUFDO29CQUNuRCxFQUFDLEtBQUssRUFBRSx5QkFBeUIsRUFBRSxHQUFHLEVBQUUsMEJBQTBCLEVBQUM7aUJBQ3RFO2FBQ0E7WUFDRCxDQUFDLGdCQUFnQixFQUFFO29CQUNmLEVBQUMsS0FBSyxFQUFFLHlCQUF5QixFQUFFLEdBQUcsRUFBRSwwQkFBMEIsRUFBQztvQkFDbkUsRUFBQyxLQUFLLEVBQUUsZUFBZSxFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsRUFBQztvQkFDL0MsRUFBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUM7aUJBQzlDO2FBQ0E7WUFDRCxDQUFDLFVBQVUsRUFBRTtvQkFDVCxFQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBQztvQkFDckMsRUFBQyxLQUFLLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBRSxlQUFlLEVBQUM7aUJBQ2hEO2FBQ0E7U0FDSixDQUNKLENBQUM7SUFNRixDQUFDO0lBRUQsT0FBTyxDQUFDLEdBQVc7UUFDZixNQUFNLEdBQUcsR0FBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUM5QyxDQUFDOytHQW5EUSxjQUFjLGtCQTJDWCxrQkFBa0IsYUFDbEIsZ0JBQWdCO21IQTVDbkIsY0FBYyxjQUZYLE1BQU07O1NBRVQsY0FBYzs0RkFBZCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBNENRLE1BQU07MkJBQUMsa0JBQWtCOzswQkFDekIsTUFBTTsyQkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0aW9uVG9rZW59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtTZXR0aW5nc1NlcnZpY2VDbGFzc30gZnJvbSBcIi4vc2V0dGluZ3Mtc2VydmljZS5jbGFzc1wiO1xuaW1wb3J0IHtTRVRUSU5HU19TRVJWSUNFfSBmcm9tIFwiLi9zZXR0aW5ncy5zZXJ2aWNlXCI7XG5cbmV4cG9ydCBjb25zdCBaSVRJX1RBQl9PVkVSUklERVMgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPignWklUSV9UQUJfT1ZFUlJJREVTJyk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFiSW50ZXJjZXB0b3JTZXJ2aWNlIHtcbiAgICBvdmVycmlkZShrZXk6IHN0cmluZywgdGFiczogYW55W10pOiBhbnlbXTtcbn1cblxuZXhwb3J0IGNsYXNzIE5vb3BUYWJJbnRlcmNlcHRvclNlcnZpY2UgaW1wbGVtZW50cyBUYWJJbnRlcmNlcHRvclNlcnZpY2Uge1xuICAgIG92ZXJyaWRlKGtleTogc3RyaW5nLCB0YWJzOiBhbnlbXSk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIHRhYnM7XG4gICAgfVxufVxuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFRhYk5hbWVTZXJ2aWNlIHtcblxuICAgIHBhZ2VUb1RhYnNNYXAgPSBuZXcgTWFwPHN0cmluZywgYW55W10+KFxuICAgICAgICBbXG4gICAgICAgICAgICBbXCJpZGVudGl0aWVzXCIsIFtcbiAgICAgICAgICAgICAgICB7bGFiZWw6ICdJZGVudGl0aWVzJywgdXJsOiAnL2lkZW50aXRpZXMnfSxcbiAgICAgICAgICAgICAgICB7bGFiZWw6ICdSZWNpcGVzJywgdXJsOiAnL3JlY2lwZXMnLCBoaWRkZW46ICF0aGlzLnNldHRpbmdzLnN1cHBvcnRlZEZlYXR1cmVzPy5yZWNpcGllc30sXG4gICAgICAgICAgICAgICAge2xhYmVsOiAnVGVybWluYXRvcnMnLCB1cmw6ICcvdGVybWluYXRvcnMnfSxcbiAgICAgICAgICAgICAgICB7bGFiZWw6ICdQb3N0dXJlIENoZWNrcycsIHVybDogJy9wb3N0dXJlLWNoZWNrcyd9LFxuICAgICAgICAgICAgXVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcInNlcnZpY2VzXCIsIFtcbiAgICAgICAgICAgICAgICB7bGFiZWw6ICdTZXJ2aWNlcycsIHVybDogJy9zZXJ2aWNlcyd9LFxuICAgICAgICAgICAgICAgIHtsYWJlbDogJ0NvbmZpZ3VyYXRpb25zJywgdXJsOiAnL2NvbmZpZ3MnfSxcbiAgICAgICAgICAgICAgICB7bGFiZWw6ICdDb25maWcgVHlwZXMnLCB1cmw6ICcvY29uZmlnLXR5cGVzJ30sXG4gICAgICAgICAgICBdXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1wicm91dGVyc1wiLCBbXG4gICAgICAgICAgICAgICAge2xhYmVsOiAnUm91dGVycycsIHVybDogJy9yb3V0ZXJzJ30sXG4gICAgICAgICAgICAgICAge2xhYmVsOiAnVHJhbnNpdCBSb3V0ZXJzJywgdXJsOiAnL3RyYW5zaXQtcm91dGVycyd9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXCJwb2xpY2llc1wiLCBbXG4gICAgICAgICAgICAgICAge2xhYmVsOiAnU2VydmljZSBQb2xpY2llcycsIHVybDogJy9zZXJ2aWNlLXBvbGljaWVzJ30sXG4gICAgICAgICAgICAgICAge2xhYmVsOiAnUm91dGVyIFBvbGljaWVzJywgdXJsOiAnL3JvdXRlci1wb2xpY2llcyd9LFxuICAgICAgICAgICAgICAgIHtsYWJlbDogJ1NlcnZpY2UgUm91dGVyIFBvbGljaWVzJywgdXJsOiAnL3NlcnZpY2Utcm91dGVyLXBvbGljaWVzJ31cbiAgICAgICAgICAgIF1cbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbXCJhdXRoZW50aWNhdGlvblwiLCBbXG4gICAgICAgICAgICAgICAge2xhYmVsOiAnQ2VydGlmaWNhdGUgQXV0aG9yaXRpZXMnLCB1cmw6ICcvY2VydGlmaWNhdGUtYXV0aG9yaXRpZXMnfSxcbiAgICAgICAgICAgICAgICB7bGFiZWw6ICdBdXRoIFBvbGljaWVzJywgdXJsOiAnL2F1dGgtcG9saWNpZXMnfSxcbiAgICAgICAgICAgICAgICB7bGFiZWw6ICdKV1QgU2lnbmVycycsIHVybDogJy9qd3Qtc2lnbmVycyd9LFxuICAgICAgICAgICAgXVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcInNlc3Npb25zXCIsIFtcbiAgICAgICAgICAgICAgICB7bGFiZWw6ICdTZXNzaW9ucycsIHVybDogJy9zZXNzaW9ucyd9LFxuICAgICAgICAgICAgICAgIHtsYWJlbDogJ0FQSSBTZXNzaW9ucycsIHVybDogJy9hcGktc2Vzc2lvbnMnfSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICAgIF1cbiAgICAgICAgXVxuICAgICk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChaSVRJX1RBQl9PVkVSUklERVMpIHByaXZhdGUgaW50ZXJjZXB0b3I6IFRhYkludGVyY2VwdG9yU2VydmljZSxcbiAgICAgICAgQEluamVjdChTRVRUSU5HU19TRVJWSUNFKSBwcml2YXRlIHNldHRpbmdzOiBTZXR0aW5nc1NlcnZpY2VDbGFzc1xuICAgICkge1xuICAgIH1cblxuICAgIGdldFRhYnMoa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgdmFsID0gIHRoaXMucGFnZVRvVGFic01hcC5nZXQoa2V5KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW50ZXJjZXB0b3Iub3ZlcnJpZGUoa2V5LCB2YWwpXG4gICAgfVxufVxuIl19
76
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLW5hbWUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9zZXJ2aWNlcy90YWItbmFtZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVqRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sU0FBUyxDQUFDOzs7QUFFN0IsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxjQUFjLENBQVMsb0JBQW9CLENBQUMsQ0FBQztBQU1uRixNQUFNLE9BQU8seUJBQXlCO0lBQ2xDLFFBQVEsQ0FBQyxHQUFXLEVBQUUsSUFBVztRQUM3QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQ0o7QUFLRCxNQUFNLE9BQU8sY0FBYztJQTZDdkIsWUFDd0MsV0FBa0MsRUFDcEMsUUFBOEI7UUFENUIsZ0JBQVcsR0FBWCxXQUFXLENBQXVCO1FBQ3BDLGFBQVEsR0FBUixRQUFRLENBQXNCO1FBN0NwRSxrQkFBYSxHQUFHLElBQUksR0FBRyxDQUNuQjtZQUNJLENBQUMsWUFBWSxFQUFFO29CQUNYLEVBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFDO29CQUN6QyxFQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixFQUFFLFFBQVEsRUFBQztpQkFDMUY7YUFDQTtZQUNELENBQUMsVUFBVSxFQUFFO29CQUNULEVBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFDO29CQUNyQyxFQUFDLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFDO29CQUMxQyxFQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBQztvQkFDN0MsRUFBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxjQUFjLEVBQUM7aUJBQzlDO2FBQ0E7WUFDRCxDQUFDLFNBQVMsRUFBRTtvQkFDUixFQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBQztvQkFDbkMsRUFBQyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxFQUFFLGtCQUFrQixFQUFDO2lCQUN0RDthQUNBO1lBQ0QsQ0FBQyxVQUFVLEVBQUU7b0JBQ1QsRUFBQyxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxFQUFFLG1CQUFtQixFQUFDO29CQUNyRCxFQUFDLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxHQUFHLEVBQUUsa0JBQWtCLEVBQUM7b0JBQ25ELEVBQUMsS0FBSyxFQUFFLHlCQUF5QixFQUFFLEdBQUcsRUFBRSwwQkFBMEIsRUFBQztpQkFDdEU7YUFDQTtZQUNELENBQUMsZ0JBQWdCLEVBQUU7b0JBQ2YsRUFBQyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBQztpQkFDM0Q7YUFDQTtZQUNELENBQUMsZ0JBQWdCLEVBQUU7b0JBQ2YsRUFBQyxLQUFLLEVBQUUseUJBQXlCLEVBQUUsR0FBRyxFQUFFLDBCQUEwQixFQUFDO29CQUNuRSxFQUFDLEtBQUssRUFBRSxlQUFlLEVBQUUsR0FBRyxFQUFFLGdCQUFnQixFQUFDO29CQUMvQyxFQUFDLEtBQUssRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBQztpQkFDOUM7YUFDQTtZQUNELENBQUMsVUFBVSxFQUFFO29CQUNULEVBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFDO29CQUNyQyxFQUFDLEtBQUssRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBQztpQkFDaEQ7YUFDQTtTQUNKLENBQ0osQ0FBQztJQU1GLENBQUM7SUFFRCxPQUFPLENBQUMsR0FBVztRQUNmLE1BQU0sR0FBRyxHQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBQzlDLENBQUM7K0dBdERRLGNBQWMsa0JBOENYLGtCQUFrQixhQUNsQixnQkFBZ0I7bUhBL0NuQixjQUFjLGNBRlgsTUFBTTs7NEZBRVQsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQStDUSxNQUFNOzJCQUFDLGtCQUFrQjs7MEJBQ3pCLE1BQU07MkJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7U2V0dGluZ3NTZXJ2aWNlQ2xhc3N9IGZyb20gXCIuL3NldHRpbmdzLXNlcnZpY2UuY2xhc3NcIjtcbmltcG9ydCB7U0VUVElOR1NfU0VSVklDRX0gZnJvbSBcIi4vc2V0dGluZ3Muc2VydmljZVwiO1xuaW1wb3J0IHtVUkxTfSBmcm9tIFwiLi4vdXJsc1wiO1xuXG5leHBvcnQgY29uc3QgWklUSV9UQUJfT1ZFUlJJREVTID0gbmV3IEluamVjdGlvblRva2VuPHN0cmluZz4oJ1pJVElfVEFCX09WRVJSSURFUycpO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRhYkludGVyY2VwdG9yU2VydmljZSB7XG4gICAgb3ZlcnJpZGUoa2V5OiBzdHJpbmcsIHRhYnM6IGFueVtdKTogYW55W107XG59XG5cbmV4cG9ydCBjbGFzcyBOb29wVGFiSW50ZXJjZXB0b3JTZXJ2aWNlIGltcGxlbWVudHMgVGFiSW50ZXJjZXB0b3JTZXJ2aWNlIHtcbiAgICBvdmVycmlkZShrZXk6IHN0cmluZywgdGFiczogYW55W10pOiBhbnlbXSB7XG4gICAgICAgIHJldHVybiB0YWJzO1xuICAgIH1cbn1cblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBUYWJOYW1lU2VydmljZSB7XG5cbiAgICBwYWdlVG9UYWJzTWFwID0gbmV3IE1hcDxzdHJpbmcsIGFueVtdPihcbiAgICAgICAgW1xuICAgICAgICAgICAgW1wiaWRlbnRpdGllc1wiLCBbXG4gICAgICAgICAgICAgICAge2xhYmVsOiAnSWRlbnRpdGllcycsIHVybDogJy9pZGVudGl0aWVzJ30sXG4gICAgICAgICAgICAgICAge2xhYmVsOiAnUmVjaXBlcycsIHVybDogJy9yZWNpcGVzJywgaGlkZGVuOiAhdGhpcy5zZXR0aW5ncy5zdXBwb3J0ZWRGZWF0dXJlcz8ucmVjaXBpZXN9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1wic2VydmljZXNcIiwgW1xuICAgICAgICAgICAgICAgIHtsYWJlbDogJ1NlcnZpY2VzJywgdXJsOiAnL3NlcnZpY2VzJ30sXG4gICAgICAgICAgICAgICAge2xhYmVsOiAnQ29uZmlndXJhdGlvbnMnLCB1cmw6ICcvY29uZmlncyd9LFxuICAgICAgICAgICAgICAgIHtsYWJlbDogJ0NvbmZpZyBUeXBlcycsIHVybDogJy9jb25maWctdHlwZXMnfSxcbiAgICAgICAgICAgICAgICB7bGFiZWw6ICdUZXJtaW5hdG9ycycsIHVybDogJy90ZXJtaW5hdG9ycyd9LFxuICAgICAgICAgICAgXVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcInJvdXRlcnNcIiwgW1xuICAgICAgICAgICAgICAgIHtsYWJlbDogJ1JvdXRlcnMnLCB1cmw6ICcvcm91dGVycyd9LFxuICAgICAgICAgICAgICAgIHtsYWJlbDogJ1RyYW5zaXQgUm91dGVycycsIHVybDogJy90cmFuc2l0LXJvdXRlcnMnfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1wicG9saWNpZXNcIiwgW1xuICAgICAgICAgICAgICAgIHtsYWJlbDogJ1NlcnZpY2UgUG9saWNpZXMnLCB1cmw6ICcvc2VydmljZS1wb2xpY2llcyd9LFxuICAgICAgICAgICAgICAgIHtsYWJlbDogJ1JvdXRlciBQb2xpY2llcycsIHVybDogJy9yb3V0ZXItcG9saWNpZXMnfSxcbiAgICAgICAgICAgICAgICB7bGFiZWw6ICdTZXJ2aWNlIFJvdXRlciBQb2xpY2llcycsIHVybDogJy9zZXJ2aWNlLXJvdXRlci1wb2xpY2llcyd9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1wicG9zdHVyZS1jaGVja3NcIiwgW1xuICAgICAgICAgICAgICAgIHtsYWJlbDogJ1Bvc3R1cmUgQ2hlY2tzJywgdXJsOiBVUkxTLlpJVElfUE9TVFVSRV9DSEVDS1N9LFxuICAgICAgICAgICAgXVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtcImF1dGhlbnRpY2F0aW9uXCIsIFtcbiAgICAgICAgICAgICAgICB7bGFiZWw6ICdDZXJ0aWZpY2F0ZSBBdXRob3JpdGllcycsIHVybDogJy9jZXJ0aWZpY2F0ZS1hdXRob3JpdGllcyd9LFxuICAgICAgICAgICAgICAgIHtsYWJlbDogJ0F1dGggUG9saWNpZXMnLCB1cmw6ICcvYXV0aC1wb2xpY2llcyd9LFxuICAgICAgICAgICAgICAgIHtsYWJlbDogJ0pXVCBTaWduZXJzJywgdXJsOiAnL2p3dC1zaWduZXJzJ30sXG4gICAgICAgICAgICBdXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgW1wic2Vzc2lvbnNcIiwgW1xuICAgICAgICAgICAgICAgIHtsYWJlbDogJ1Nlc3Npb25zJywgdXJsOiAnL3Nlc3Npb25zJ30sXG4gICAgICAgICAgICAgICAge2xhYmVsOiAnQVBJIFNlc3Npb25zJywgdXJsOiAnL2FwaS1zZXNzaW9ucyd9LFxuICAgICAgICAgICAgXVxuICAgICAgICAgICAgXVxuICAgICAgICBdXG4gICAgKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBASW5qZWN0KFpJVElfVEFCX09WRVJSSURFUykgcHJpdmF0ZSBpbnRlcmNlcHRvcjogVGFiSW50ZXJjZXB0b3JTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KFNFVFRJTkdTX1NFUlZJQ0UpIHByaXZhdGUgc2V0dGluZ3M6IFNldHRpbmdzU2VydmljZUNsYXNzXG4gICAgKSB7XG4gICAgfVxuXG4gICAgZ2V0VGFicyhrZXk6IHN0cmluZykge1xuICAgICAgICBjb25zdCB2YWwgPSAgdGhpcy5wYWdlVG9UYWJzTWFwLmdldChrZXkpO1xuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcmNlcHRvci5vdmVycmlkZShrZXksIHZhbClcbiAgICB9XG59XG4iXX0=
@@ -1,7 +1,7 @@
1
1
  import { Injectable } from "@angular/core";
2
2
  import { includes, isEmpty, isNil, isNumber } from "lodash";
3
3
  import * as i0 from "@angular/core";
4
- class ValidationService {
4
+ export class ValidationService {
5
5
  validateIdentity(identity) {
6
6
  const errors = {};
7
7
  if (isEmpty(identity.name)) {
@@ -147,11 +147,10 @@ class ValidationService {
147
147
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ValidationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
148
148
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ValidationService, providedIn: 'root' }); }
149
149
  }
150
- export { ValidationService };
151
150
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ValidationService, decorators: [{
152
151
  type: Injectable,
153
152
  args: [{
154
153
  providedIn: 'root'
155
154
  }]
156
155
  }] });
157
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMveml0aS1jb25zb2xlLWxpYi9zcmMvbGliL3NlcnZpY2VzL3ZhbGlkYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUMsTUFBTSxRQUFRLENBQUM7O0FBRTFELE1BR2EsaUJBQWlCO0lBRTFCLGdCQUFnQixDQUFDLFFBQWE7UUFDMUIsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN4QixNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDO1NBQ3pCO1FBQ0QsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQ2hDLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUM7U0FDakM7UUFDRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDaEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsYUFBYSxDQUFDLGlCQUFpQjtRQUMzQixJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDcEIsT0FBTyxTQUFTLENBQUM7U0FDcEI7UUFDRCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDbEIsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBVyxFQUFFLEVBQUU7WUFDdEMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1QixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUNu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QUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtpbmNsdWRlcywgaXNFbXB0eSwgaXNOaWwsIGlzTnVtYmVyfSBmcm9tIFwibG9kYXNoXCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvblNlcnZpY2Uge1xuXG4gICAgdmFsaWRhdGVJZGVudGl0eShpZGVudGl0eTogYW55KSB7XG4gICAgICAgIGNvbnN0IGVycm9ycyA9IHt9O1xuICAgICAgICBpZiAoaXNFbXB0eShpZGVudGl0eS5uYW1lKSkge1xuICAgICAgICAgICAgZXJyb3JzWyduYW1lJ10gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0VtcHR5KGlkZW50aXR5LmF1dGhQb2xpY3lJZCkpIHtcbiAgICAgICAgICAgIGVycm9yc1snYXV0aFBvbGljeUlkJ10gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzVmFsaWQgPSBpc0VtcHR5KGVycm9ycyk7XG4gICAgICAgIHJldHVybiB7IGlzVmFsaWQsIGVycm9ycyB9O1xuICAgIH1cblxuICAgIGdldFBvcnRSYW5nZXMoYWxsb3dlZFBvcnRSYW5nZXMpIHtcbiAgICAgICAgaWYgKCFhbGxvd2VkUG9ydFJhbmdlcykge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByYW5nZXMgPSBbXTtcbiAgICAgICAgYWxsb3dlZFBvcnRSYW5nZXMuZm9yRWFjaCgodmFsOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHMgPSB2YWwuc3BsaXQoJy0nKTtcbiAgICAgICAgICAgIGlmICh2YWxzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvcnQgPSBwYXJzZUludCh2YWwpO1xuICAgICAgICAgICAgICAgIHJhbmdlcy5wdXNoKHtoaWdoOiBwb3J0LCBsb3c6IHBvcnR9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFscy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3J0MSA9IHBhcnNlSW50KHZhbHNbMF0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvcnQyID0gcGFyc2VJbnQodmFsc1sxXSk7XG4gICAgICAgICAgICAgICAgcmFuZ2VzLnB1c2goe2xvdzogcG9ydDEsIGhpZ2g6IHBvcnQyfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGRvIG5vdGhpbmcsIGludmFsaWQgcmFuZ2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByYW5nZXM7XG4gICAgfVxuXG4gICAgY29tYmluZVBvcnRSYW5nZXMoYWxsb3dlZFBvcnRSYW5nZXMpIHtcbiAgICAgICAgY29uc3QgdmFsID0gW107XG4gICAgICAgIGlmICghYWxsb3dlZFBvcnRSYW5nZXMpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWw7XG4gICAgICAgIH1cbiAgICAgICAgYWxsb3dlZFBvcnRSYW5nZXMuZm9yRWFjaCgocmFuZ2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJhbmdlLmxvdyA9PT0gcmFuZ2UuaGlnaCkge1xuICAgICAgICAgICAgICAgIHZhbC5wdXNoKHJhbmdlLmxvdyArICcnKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsLnB1c2gocmFuZ2UubG93ICsgJy0nICsgcmFuZ2UuaGlnaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cblxuICAgIHBhcnNlUG9ydFJhbmdlcyhwb3J0UmFuZ2VzKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFBvcnRSYW5nZXMgPSBbXTtcbiAgICAgICAgaWYgKCFwb3J0UmFuZ2VzKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VkUG9ydFJhbmdlcztcbiAgICAgICAgfVxuICAgICAgICBwb3J0UmFuZ2VzLmZvckVhY2goKHZhbDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWxzID0gdmFsLnNwbGl0KCctJyk7XG4gICAgICAgICAgICBpZiAodmFscy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3J0ID0gcGFyc2VJbnQodmFsKTtcbiAgICAgICAgICAgICAgICBwYXJzZWRQb3J0UmFuZ2VzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBsb3c6IHBvcnQsXG4gICAgICAgICAgICAgICAgICAgIGhpZ2g6IHBvcnRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodmFscy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3J0MSA9IHBhcnNlSW50KHZhbHNbMF0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvcnQyID0gcGFyc2VJbnQodmFsc1sxXSk7XG4gICAgICAgICAgICAgICAgcGFyc2VkUG9ydFJhbmdlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbG93OiBwb3J0MSxcbiAgICAgICAgICAgICAgICAgICAgaGlnaDogcG9ydDJcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXJzZWRQb3J0UmFuZ2VzO1xuICAgIH1cblxuICAgIHZhbGlkYXRlUG9ydFJhbmdlcyhwb3J0UmFuZ2VzKSB7XG4gICAgICAgIGxldCBpbnZhbGlkID0gZmFsc2U7XG4gICAgICAgIGlmICghcG9ydFJhbmdlcykge1xuICAgICAgICAgICAgcmV0dXJuIGludmFsaWQ7XG4gICAgICAgIH1cbiAgICAgICAgcG9ydFJhbmdlcy5mb3JFYWNoKChyYW5nZTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZFBvcnQocmFuZ2UubG93KSB8fCAhdGhpcy5pc1ZhbGlkUG9ydChyYW5nZS5oaWdoKSkge1xuICAgICAgICAgICAgICAgIGludmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmFuZ2UubG93ID4gcmFuZ2UuaGlnaCkge1xuICAgICAgICAgICAgICAgIGludmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBpbnZhbGlkO1xuICAgIH1cblxuICAgIGlzVmFsaWRQb3J0KHBvcnQpIHtcbiAgICAgICAgcmV0dXJuICFpc05hTihwb3J0KSAmJiBpc051bWJlcihwb3J0KSAmJiBwb3J0ID49IDEgJiYgcG9ydCA8PSA2NTUzNTtcbiAgICB9XG5cbiAgICBpc1ZhbGlkSW50ZXJjZXB0SG9zdChhZGRyZXNzKSB7XG4gICAgICAgIHJldHVybiBpbmNsdWRlcyhhZGRyZXNzLCAnLicpO1xuICAgIH1cblxuICAgIGlzVmFsaWRQRU0oY2VydCkge1xuICAgICAgICBjb25zdCBwZW1SZWdleCA9IC9eLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tKFtBLVphLXowLTkrLz1cXG5cXHJdKyktLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tJC87XG4gICAgICAgIHJldHVybiBwZW1SZWdleC50ZXN0KGNlcnQ/LnRyaW0oKS50cmltRW5kKCkpO1xuICAgIH1cblxuICAgIGlzVmFsaWRVUkkodXJpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBuZXcgVVJMKHVyaSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNWYWxpZEpTT04odmFsKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBqc29uU3RyaW5nID0gSlNPTi5zdHJpbmdpZnkodmFsKTtcblxuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBqc29uU3RyaW5nID09PSAnc3RyaW5nJyAmJiBqc29uU3RyaW5nICE9PSAnJztcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVkZWZpbmVPYmplY3Qob2JqKSB7XG4gICAgICAgIGZvciAobGV0IHByb3AgaW4gb2JqKSB7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmpbcHJvcF0pICYmIG9ialtwcm9wXS5sZW5ndGg9PTApIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgb2JqW3Byb3BdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9ialtwcm9wXSA9PT0gXCJzdHJpbmdcIiAmJiBvYmpbcHJvcF0udHJpbSgpLmxlbmd0aD09MCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgb2JqW3Byb3BdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOaWwob2JqW3Byb3BdKSkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgb2JqW3Byb3BdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqW3Byb3BdID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYmpbcHJvcF0gPSB0aGlzLnJlZGVmaW5lT2JqZWN0KG9ialtwcm9wXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMob2JqW3Byb3BdKS5sZW5ndGg9PTApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgb2JqW3Byb3BdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxufVxuIl19
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMveml0aS1jb25zb2xlLWxpYi9zcmMvbGliL3NlcnZpY2VzL3ZhbGlkYXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUMsTUFBTSxRQUFRLENBQUM7O0FBSzFELE1BQU0sT0FBTyxpQkFBaUI7SUFFMUIsZ0JBQWdCLENBQUMsUUFBYTtRQUMxQixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3hCLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUM7U0FDekI7UUFDRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUU7WUFDaEMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLElBQUksQ0FBQztTQUNqQztRQUNELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxhQUFhLENBQUMsaUJBQWlCO1FBQzNCLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUNwQixPQUFPLFNBQVMsQ0FBQztTQUNwQjtRQUNELE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNsQixpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFXLEVBQUUsRUFBRTtZQUN0QyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7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O2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7aW5jbHVkZXMsIGlzRW1wdHksIGlzTmlsLCBpc051bWJlcn0gZnJvbSBcImxvZGFzaFwiO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFZhbGlkYXRpb25TZXJ2aWNlIHtcblxuICAgIHZhbGlkYXRlSWRlbnRpdHkoaWRlbnRpdHk6IGFueSkge1xuICAgICAgICBjb25zdCBlcnJvcnMgPSB7fTtcbiAgICAgICAgaWYgKGlzRW1wdHkoaWRlbnRpdHkubmFtZSkpIHtcbiAgICAgICAgICAgIGVycm9yc1snbmFtZSddID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNFbXB0eShpZGVudGl0eS5hdXRoUG9saWN5SWQpKSB7XG4gICAgICAgICAgICBlcnJvcnNbJ2F1dGhQb2xpY3lJZCddID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc1ZhbGlkID0gaXNFbXB0eShlcnJvcnMpO1xuICAgICAgICByZXR1cm4geyBpc1ZhbGlkLCBlcnJvcnMgfTtcbiAgICB9XG5cbiAgICBnZXRQb3J0UmFuZ2VzKGFsbG93ZWRQb3J0UmFuZ2VzKSB7XG4gICAgICAgIGlmICghYWxsb3dlZFBvcnRSYW5nZXMpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmFuZ2VzID0gW107XG4gICAgICAgIGFsbG93ZWRQb3J0UmFuZ2VzLmZvckVhY2goKHZhbDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWxzID0gdmFsLnNwbGl0KCctJyk7XG4gICAgICAgICAgICBpZiAodmFscy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3J0ID0gcGFyc2VJbnQodmFsKTtcbiAgICAgICAgICAgICAgICByYW5nZXMucHVzaCh7aGlnaDogcG9ydCwgbG93OiBwb3J0fSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9ydDEgPSBwYXJzZUludCh2YWxzWzBdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3J0MiA9IHBhcnNlSW50KHZhbHNbMV0pO1xuICAgICAgICAgICAgICAgIHJhbmdlcy5wdXNoKHtsb3c6IHBvcnQxLCBoaWdoOiBwb3J0Mn0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBkbyBub3RoaW5nLCBpbnZhbGlkIHJhbmdlXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmFuZ2VzO1xuICAgIH1cblxuICAgIGNvbWJpbmVQb3J0UmFuZ2VzKGFsbG93ZWRQb3J0UmFuZ2VzKSB7XG4gICAgICAgIGNvbnN0IHZhbCA9IFtdO1xuICAgICAgICBpZiAoIWFsbG93ZWRQb3J0UmFuZ2VzKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9XG4gICAgICAgIGFsbG93ZWRQb3J0UmFuZ2VzLmZvckVhY2goKHJhbmdlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyYW5nZS5sb3cgPT09IHJhbmdlLmhpZ2gpIHtcbiAgICAgICAgICAgICAgICB2YWwucHVzaChyYW5nZS5sb3cgKyAnJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbC5wdXNoKHJhbmdlLmxvdyArICctJyArIHJhbmdlLmhpZ2gpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG5cbiAgICBwYXJzZVBvcnRSYW5nZXMocG9ydFJhbmdlcykge1xuICAgICAgICBjb25zdCBwYXJzZWRQb3J0UmFuZ2VzID0gW107XG4gICAgICAgIGlmICghcG9ydFJhbmdlcykge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlZFBvcnRSYW5nZXM7XG4gICAgICAgIH1cbiAgICAgICAgcG9ydFJhbmdlcy5mb3JFYWNoKCh2YWw6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFscyA9IHZhbC5zcGxpdCgnLScpO1xuICAgICAgICAgICAgaWYgKHZhbHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9ydCA9IHBhcnNlSW50KHZhbCk7XG4gICAgICAgICAgICAgICAgcGFyc2VkUG9ydFJhbmdlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgbG93OiBwb3J0LFxuICAgICAgICAgICAgICAgICAgICBoaWdoOiBwb3J0XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9ydDEgPSBwYXJzZUludCh2YWxzWzBdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwb3J0MiA9IHBhcnNlSW50KHZhbHNbMV0pO1xuICAgICAgICAgICAgICAgIHBhcnNlZFBvcnRSYW5nZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGxvdzogcG9ydDEsXG4gICAgICAgICAgICAgICAgICAgIGhpZ2g6IHBvcnQyXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGFyc2VkUG9ydFJhbmdlcztcbiAgICB9XG5cbiAgICB2YWxpZGF0ZVBvcnRSYW5nZXMocG9ydFJhbmdlcykge1xuICAgICAgICBsZXQgaW52YWxpZCA9IGZhbHNlO1xuICAgICAgICBpZiAoIXBvcnRSYW5nZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnZhbGlkO1xuICAgICAgICB9XG4gICAgICAgIHBvcnRSYW5nZXMuZm9yRWFjaCgocmFuZ2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWRQb3J0KHJhbmdlLmxvdykgfHwgIXRoaXMuaXNWYWxpZFBvcnQocmFuZ2UuaGlnaCkpIHtcbiAgICAgICAgICAgICAgICBpbnZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJhbmdlLmxvdyA+IHJhbmdlLmhpZ2gpIHtcbiAgICAgICAgICAgICAgICBpbnZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gaW52YWxpZDtcbiAgICB9XG5cbiAgICBpc1ZhbGlkUG9ydChwb3J0KSB7XG4gICAgICAgIHJldHVybiAhaXNOYU4ocG9ydCkgJiYgaXNOdW1iZXIocG9ydCkgJiYgcG9ydCA+PSAxICYmIHBvcnQgPD0gNjU1MzU7XG4gICAgfVxuXG4gICAgaXNWYWxpZEludGVyY2VwdEhvc3QoYWRkcmVzcykge1xuICAgICAgICByZXR1cm4gaW5jbHVkZXMoYWRkcmVzcywgJy4nKTtcbiAgICB9XG5cbiAgICBpc1ZhbGlkUEVNKGNlcnQpIHtcbiAgICAgICAgY29uc3QgcGVtUmVnZXggPSAvXi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLShbQS1aYS16MC05Ky89XFxuXFxyXSspLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLSQvO1xuICAgICAgICByZXR1cm4gcGVtUmVnZXgudGVzdChjZXJ0Py50cmltKCkudHJpbUVuZCgpKTtcbiAgICB9XG5cbiAgICBpc1ZhbGlkVVJJKHVyaSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmV3IFVSTCh1cmkpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzVmFsaWRKU09OKHZhbCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QganNvblN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHZhbCk7XG5cbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YganNvblN0cmluZyA9PT0gJ3N0cmluZycgJiYganNvblN0cmluZyAhPT0gJyc7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlZGVmaW5lT2JqZWN0KG9iaikge1xuICAgICAgICBmb3IgKGxldCBwcm9wIGluIG9iaikge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob2JqW3Byb3BdKSAmJiBvYmpbcHJvcF0ubGVuZ3RoPT0wKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG9ialtwcm9wXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmpbcHJvcF0gPT09IFwic3RyaW5nXCIgJiYgb2JqW3Byb3BdLnRyaW0oKS5sZW5ndGg9PTApIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG9ialtwcm9wXTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTmlsKG9ialtwcm9wXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG9ialtwcm9wXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9ialtwcm9wXSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgb2JqW3Byb3BdID0gdGhpcy5yZWRlZmluZU9iamVjdChvYmpbcHJvcF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKG9ialtwcm9wXSkubGVuZ3RoPT0wKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG9ialtwcm9wXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH1cbn1cbiJdfQ==
@@ -27,7 +27,7 @@ import * as i2 from "../features/messaging/growler.service";
27
27
  import * as i3 from "@angular/common/http";
28
28
  import * as i4 from "@angular/router";
29
29
  import * as i5 from "./settings.service";
30
- class ZitiControllerDataService extends ZitiDataService {
30
+ export class ZitiControllerDataService extends ZitiDataService {
31
31
  constructor(logger, growler, settingsService, httpClient, router) {
32
32
  super(logger, growler, settingsService, httpClient, router);
33
33
  this.logger = logger;
@@ -188,6 +188,22 @@ class ZitiControllerDataService extends ZitiDataService {
188
188
  throw ({ error: error });
189
189
  })));
190
190
  }
191
+ resetPassword(oldPass, newPass, confirmPass) {
192
+ const apiVersions = this.settingsService.apiVersions || {};
193
+ const prefix = apiVersions["edge-management"]?.v1?.path || '/edge/management/v1';
194
+ const authenticatorsUrl = this.settingsService.settings.selectedEdgeController + `${prefix}/current-identity/authenticators?filter=method=\"updb\"`;
195
+ return firstValueFrom(this.httpClient.get(authenticatorsUrl)).then((authenticatorResult) => {
196
+ const id = authenticatorResult?.data[0].id;
197
+ const username = authenticatorResult.data[0].username;
198
+ const params = {
199
+ currentPassword: oldPass,
200
+ password: newPass,
201
+ username: username
202
+ };
203
+ const resetUrl = this.settingsService.settings.selectedEdgeController + `${prefix}/current-identity/authenticators/${id}`;
204
+ return firstValueFrom(this.httpClient.put(resetUrl, params));
205
+ });
206
+ }
191
207
  delete(type, id) {
192
208
  const apiVersions = this.settingsService.apiVersions || {};
193
209
  const prefix = apiVersions["edge-management"]?.v1?.path;
@@ -301,7 +317,6 @@ class ZitiControllerDataService extends ZitiDataService {
301
317
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ZitiControllerDataService, deps: [{ token: i1.LoggerService }, { token: i2.GrowlerService }, { token: SETTINGS_SERVICE }, { token: i3.HttpClient }, { token: i4.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
302
318
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ZitiControllerDataService, providedIn: 'root' }); }
303
319
  }
304
- export { ZitiControllerDataService };
305
320
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ZitiControllerDataService, decorators: [{
306
321
  type: Injectable,
307
322
  args: [{
@@ -311,4 +326,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
311
326
  type: Inject,
312
327
  args: [SETTINGS_SERVICE]
313
328
  }] }, { type: i3.HttpClient }, { type: i4.Router }]; } });
314
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieml0aS1jb250cm9sbGVyLWRhdGEuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9zZXJ2aWNlcy96aXRpLWNvbnRyb2xsZXItZGF0YS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztFQWNFO0FBRUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJbkQsT0FBTyxFQUFDLGdCQUFnQixFQUFrQixNQUFNLG9CQUFvQixDQUFDO0FBQ3JFLE9BQU8sRUFBQyxjQUFjLEVBQUUsR0FBRyxFQUFhLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUcxQyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUM3RCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDdEQsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDOzs7Ozs7O0FBRTVCLE1BR2EseUJBQTBCLFNBQVEsZUFBZTtJQUUxRCxZQUFxQixNQUFxQixFQUNyQixPQUF1QixFQUNOLGVBQWdDLEVBQ2pELFVBQXNCLEVBQ3RCLE1BQWM7UUFFL0IsS0FBSyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQU4zQyxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLFlBQU8sR0FBUCxPQUFPLENBQWdCO1FBRXZCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtJQUduQyxDQUFDO0lBRUQsSUFBSSxDQUFDLElB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QUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsUUFBUTtRQUM1QixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDZCxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUN4QixJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUU7b0JBQ1gsTUFBTSxJQUFJLE1BQU0sQ0FBQztpQkFDcEI7Z0JBQ0QsTUFBTSxJQUFJLFNBQVMsUUFBUSxRQUFRLElBQUksR0FBRyxDQUFDO1lBQy9DLENBQUMsQ0FBQyxDQUFDO1NBQ047YUFBTTtZQUNILE1BQU0sR0FBRyxTQUFTLFFBQVEsUUFBUSxHQUFHLEdBQUcsQ0FBQztTQUM1QztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7K0dBalVRLHlCQUF5Qiw2RUFJZCxnQkFBZ0I7bUhBSjNCLHlCQUF5QixjQUZ0QixNQUFNOztTQUVULHlCQUF5Qjs0RkFBekIseUJBQXlCO2tCQUhyQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBS2dCLE1BQU07MkJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAgICBDb3B5cmlnaHQgTmV0Rm91bmRyeSBJbmMuXG5cbiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQge0xvZ2dlclNlcnZpY2V9IGZyb20gXCIuLi9mZWF0dXJlcy9tZXNzYWdpbmcvbG9nZ2VyLnNlcnZpY2VcIjtcbmltcG9ydCB7R3Jvd2xlclNlcnZpY2V9IGZyb20gXCIuLi9mZWF0dXJlcy9tZXNzYWdpbmcvZ3Jvd2xlci5zZXJ2aWNlXCI7XG5pbXBvcnQge1NFVFRJTkdTX1NFUlZJQ0UsIFNldHRpbmdzU2VydmljZX0gZnJvbSBcIi4vc2V0dGluZ3Muc2VydmljZVwiO1xuaW1wb3J0IHtmaXJzdFZhbHVlRnJvbSwgbWFwLCBPYnNlcnZhYmxlfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHtjYXRjaEVycm9yfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5pbXBvcnQge0ZpbHRlck9ian0gZnJvbSBcIi4uL2ZlYXR1cmVzL2RhdGEtdGFibGUvZGF0YS10YWJsZS1maWx0ZXIuc2VydmljZVwiO1xuaW1wb3J0IHtaaXRpRGF0YVNlcnZpY2V9IGZyb20gXCIuL3ppdGktZGF0YS5zZXJ2aWNlXCI7XG5pbXBvcnQge2lzRW1wdHksIGlzQXJyYXksIGlzTnVtYmVyLCBpc0Jvb2xlYW59IGZyb20gXCJsb2Rhc2hcIjtcbmltcG9ydCB7UmVzb2x2ZXJ9IGZyb20gXCJAc3RvcGxpZ2h0L2pzb24tcmVmLXJlc29sdmVyXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBaaXRpQ29udHJvbGxlckRhdGFTZXJ2aWNlIGV4dGVuZHMgWml0aURhdGFTZXJ2aWNlIHtcblxuICAgIGNvbnN0cnVjdG9yKG92ZXJyaWRlIGxvZ2dlcjogTG9nZ2VyU2VydmljZSxcbiAgICAgICAgICAgICAgICBvdmVycmlkZSBncm93bGVyOiBHcm93bGVyU2VydmljZSxcbiAgICAgICAgICAgICAgICBASW5qZWN0KFNFVFRJTkdTX1NFUlZJQ0UpIHNldHRpbmdzU2VydmljZTogU2V0dGluZ3NTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIG92ZXJyaWRlIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXG4gICAgICAgICAgICAgICAgb3ZlcnJpZGUgcm91dGVyOiBSb3V0ZXJcbiAgICApIHtcbiAgICAgICAgc3VwZXIobG9nZ2VyLCBncm93bGVyLCBzZXR0aW5nc1NlcnZpY2UsIGh0dHBDbGllbnQsIHJvdXRlcik7XG4gICAgfVxuXG4gICAgcG9zdCh0eXBlLCBtb2RlbCwgY2hhaW5lZCA9IGZhbHNlLCBjb250ZW50VHlwZT8pOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBjb25zdCBhcGlWZXJzaW9ucyA9IHRoaXMuc2V0dGluZ3NTZXJ2aWNlLmFwaVZlcnNpb25zIHx8IHt9O1xuICAgICAgICBjb25zdCBwcmVmaXggPSBhcGlWZXJzaW9uc1tcImVkZ2UtbWFuYWdlbWVudFwiXT8udjE/LnBhdGg7XG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLnNlbGVjdGVkRWRnZUNvbnRyb2xsZXI7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VVcmwgPSB1cmwgKyBwcmVmaXggKyBcIi9cIiArIHR5cGU7XG4gICAgICAgIGxldCBvcHRpb25zID0ge307XG4gICAgICAgIGlmIChjb250ZW50VHlwZSkge1xuICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogY29udGVudFR5cGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wdGlvbnMgPSB7IGhlYWRlcnMgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwQ2xpZW50LnBvc3Qoc2VydmljZVVybCwgbW9kZWwsIG9wdGlvbnMpLnBpcGUoXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBcIlNlcnZlciBOb3QgQWNjZXNzaWJsZVwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyLmNvZGUgIT09IFwiRUNPTk5SRUZVU0VEXCIpIHRocm93KGVycik7XG4gICAgICAgICAgICAgICAgICAgIHRocm93KHtlcnJvcjogZXJyb3J9KTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdXQodHlwZSwgbW9kZWwsIGlkLCBjaGFpbmVkID0gZmFsc2UpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBjb25zdCBhcGlWZXJzaW9ucyA9IHRoaXMuc2V0dGluZ3NTZXJ2aWNlLmFwaVZlcnNpb25zIHx8IHt9O1xuICAgICAgICBjb25zdCBwcmVmaXggPSBhcGlWZXJzaW9uc1tcImVkZ2UtbWFuYWdlbWVudFwiXT8udjE/LnBhdGggfHwgJy9lZGdlL21hbmFnZW1lbnQvdjEnO1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5ncy5zZWxlY3RlZEVkZ2VDb250cm9sbGVyO1xuICAgICAgICBjb25zdCBzZXJ2aWNlVXJsID0gdXJsICsgcHJlZml4ICsgXCIvXCIgKyB0eXBlICsgJy8nICsgaWQ7XG4gICAgICAgIHRoaXMuaHR0cENsaWVudC5wYXRjaChzZXJ2aWNlVXJsLCBtb2RlbCwge30pO1xuXG4gICAgICAgIHJldHVybiBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHBDbGllbnQucHV0KHNlcnZpY2VVcmwsIG1vZGVsLCB7fSkucGlwZShcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IFwiU2VydmVyIE5vdCBBY2Nlc3NpYmxlXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIuY29kZSAhPT0gXCJFQ09OTlJFRlVTRURcIikgdGhyb3coZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3coe2Vycm9yOiBlcnJvcn0pO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG1hcCgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHBhdGNoKHR5cGUsIG1vZGVsLCBpZCwgY2hhaW5lZCA9IGZhbHNlKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3QgYXBpVmVyc2lvbnMgPSB0aGlzLnNldHRpbmdzU2VydmljZS5hcGlWZXJzaW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gYXBpVmVyc2lvbnNbXCJlZGdlLW1hbmFnZW1lbnRcIl0/LnYxPy5wYXRoIHx8ICcvZWRnZS9tYW5hZ2VtZW50L3YxJztcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Muc2VsZWN0ZWRFZGdlQ29udHJvbGxlcjtcbiAgICAgICAgY29uc3Qgc2VydmljZVVybCA9IHVybCArIHByZWZpeCArIFwiL1wiICsgdHlwZSArICcvJyArIGlkO1xuICAgICAgICB0aGlzLmh0dHBDbGllbnQucGF0Y2goc2VydmljZVVybCwgbW9kZWwsIHt9KTtcblxuICAgICAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwQ2xpZW50LnBhdGNoKHNlcnZpY2VVcmwsIG1vZGVsLCB7fSkucGlwZShcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IFwiU2VydmVyIE5vdCBBY2Nlc3NpYmxlXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIuY29kZSAhPT0gXCJFQ09OTlJFRlVTRURcIikgdGhyb3coZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3coe2Vycm9yOiBlcnJvcn0pO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG1hcCgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldCh0eXBlOiBzdHJpbmcsIHBhZ2luZzogYW55LCBmaWx0ZXJzOiBGaWx0ZXJPYmpbXSA9IFtdLCB1cmw/LCB1c2VDbGllbnQ/KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3QgYXBpVmVyc2lvbnMgPSB0aGlzLnNldHRpbmdzU2VydmljZS5hcGlWZXJzaW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgbWFuYWdlbWVudFVybCA9IGFwaVZlcnNpb25zW1wiZWRnZS1tYW5hZ2VtZW50XCJdPy52MT8ucGF0aCB8fCAnL2VkZ2UvbWFuYWdlbWVudC92MSc7XG4gICAgICAgIGNvbnN0IGNsaWVudFVybCA9ICcvZWRnZS9jbGllbnQvdjEnO1xuICAgICAgICBjb25zdCBwcmVmaXggPSB1c2VDbGllbnQgPyBjbGllbnRVcmwgOiBtYW5hZ2VtZW50VXJsO1xuICAgICAgICB1cmwgPSB0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5ncy5zZWxlY3RlZEVkZ2VDb250cm9sbGVyO1xuICAgICAgICBjb25zdCB1cmxGaWx0ZXIgPSB0aGlzLmdldFVybEZpbHRlcihwYWdpbmcsIGZpbHRlcnMpO1xuICAgICAgICBjb25zdCBzZXJ2aWNlVXJsID0gdXJsICsgcHJlZml4ICsgXCIvXCIgKyB0eXBlICsgdXJsRmlsdGVyO1xuXG4gICAgICAgIHJldHVybiBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHBDbGllbnQuZ2V0KHNlcnZpY2VVcmwse30pLnBpcGUoXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBcIlNlcnZlciBOb3QgQWNjZXNzaWJsZVwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyLmNvZGUgIT0gXCJFQ09OTlJFRlVTRURcIikgdGhyb3coe2Vycm9yOiBlcnIuY29kZX0pO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyh7ZXJyb3I6IGVycm9yfSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbWFwKChyZXN1bHRzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXRTdWJkYXRhKGVudGl0eVR5cGU6IHN0cmluZywgaWQ6IGFueSwgZGF0YVR5cGU6IHN0cmluZywgcGFnaW5nPzogYW55LCBjb250ZW50VHlwZT86IGFueSwgZmlsdGVyczogYW55W10gPSBbXSk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGNvbnN0IGFwaVZlcnNpb25zID0gdGhpcy5zZXR0aW5nc1NlcnZpY2UuYXBpVmVyc2lvbnMgfHwge307XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IGFwaVZlcnNpb25zW1wiZWRnZS1tYW5hZ2VtZW50XCJdPy52MT8ucGF0aCB8fCAnL2VkZ2UvbWFuYWdlbWVudC92MSc7XG5cbiAgICAgICAgbGV0IHVybEZpbHRlciA9ICcnO1xuICAgICAgICBpZiAoIWlzRW1wdHkocGFnaW5nKSkge1xuICAgICAgICAgICAgdXJsRmlsdGVyID0gdGhpcy5nZXRVcmxGaWx0ZXIocGFnaW5nLCBmaWx0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5ncy5zZWxlY3RlZEVkZ2VDb250cm9sbGVyICsgYCR7cHJlZml4fS8ke2VudGl0eVR5cGV9LyR7aWR9LyR7ZGF0YVR5cGV9LyR7dXJsRmlsdGVyfWA7XG5cbiAgICAgICAgbGV0IG9wdGlvbnM6IGFueSA9IHt9O1xuICAgICAgICBpZiAoY29udGVudFR5cGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0FjY2VwdCc6IGNvbnRlbnRUeXBlLFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiBjb250ZW50VHlwZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3B0aW9ucyA9IHsgaGVhZGVycyB9O1xuICAgICAgICAgICAgaWYgKGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL2p3dCcpID49IDApIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnJlc3BvbnNlVHlwZSA9ICd0ZXh0JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHBDbGllbnQuZ2V0KHVybCwgb3B0aW9ucykucGlwZShcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IFwiU2VydmVyIE5vdCBBY2Nlc3NpYmxlXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIuY29kZSAhPSBcIkVDT05OUkVGVVNFRFwiKSB0aHJvdyh7ZXJyb3I6IGVyci5jb2RlfSk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93KHtlcnJvcjogZXJyb3J9KTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHNhdmVTdWJkYXRhKGVudGl0eVR5cGU6IHN0cmluZywgaWQ6IGFueSwgZGF0YVR5cGU6IHN0cmluZywgcGFyYW1zOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBjb25zdCBhcGlWZXJzaW9ucyA9IHRoaXMuc2V0dGluZ3NTZXJ2aWNlLmFwaVZlcnNpb25zIHx8IHt9O1xuICAgICAgICBjb25zdCBwcmVmaXggPSBhcGlWZXJzaW9uc1tcImVkZ2UtbWFuYWdlbWVudFwiXT8udjE/LnBhdGggfHwgJy9lZGdlL21hbmFnZW1lbnQvdjEnO1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5ncy5zZWxlY3RlZEVkZ2VDb250cm9sbGVyICsgYCR7cHJlZml4fS8ke2VudGl0eVR5cGV9LyR7aWR9LyR7ZGF0YVR5cGV9YDtcblxuICAgICAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwQ2xpZW50LnBvc3QodXJsLCBwYXJhbXMsIHt9KS5waXBlKFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gXCJTZXJ2ZXIgTm90IEFjY2Vzc2libGVcIjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyci5jb2RlICE9IFwiRUNPTk5SRUZVU0VEXCIpIHRocm93KHtlcnJvcjogZXJyLmNvZGV9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3coe2Vycm9yOiBlcnJvcn0pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZGVsZXRlU3ViZGF0YShlbnRpdHlUeXBlOiBzdHJpbmcsIGlkOiBhbnksIGRhdGFUeXBlOiBzdHJpbmcsIHBhcmFtczogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3QgYXBpVmVyc2lvbnMgPSB0aGlzLnNldHRpbmdzU2VydmljZS5hcGlWZXJzaW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gYXBpVmVyc2lvbnNbXCJlZGdlLW1hbmFnZW1lbnRcIl0/LnYxPy5wYXRoIHx8ICcvZWRnZS9tYW5hZ2VtZW50L3YxJztcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Muc2VsZWN0ZWRFZGdlQ29udHJvbGxlciArIGAke3ByZWZpeH0vJHtlbnRpdHlUeXBlfS8ke2lkfS8ke2RhdGFUeXBlfWA7XG5cbiAgICAgICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cENsaWVudC5kZWxldGUodXJsLCB7Ym9keTogcGFyYW1zfSkucGlwZShcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IFwiU2VydmVyIE5vdCBBY2Nlc3NpYmxlXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIuY29kZSAhPSBcIkVDT05OUkVGVVNFRFwiKSB0aHJvdyh7ZXJyb3I6IGVyci5jb2RlfSk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93KHtlcnJvcjogZXJyb3J9KTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIHJlc2V0RW5yb2xsbWVudChpZDogc3RyaW5nLCBkYXRlOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBjb25zdCBhcGlWZXJzaW9ucyA9IHRoaXMuc2V0dGluZ3NTZXJ2aWNlLmFwaVZlcnNpb25zIHx8IHt9O1xuICAgICAgICBjb25zdCBwcmVmaXggPSBhcGlWZXJzaW9uc1tcImVkZ2UtbWFuYWdlbWVudFwiXT8udjE/LnBhdGggfHwgJy9lZGdlL21hbmFnZW1lbnQvdjEnO1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5ncy5zZWxlY3RlZEVkZ2VDb250cm9sbGVyICsgYCR7cHJlZml4fS9hdXRoZW50aWNhdG9ycy8ke2lkLnRyaW0oKX0vcmUtZW5yb2xsYDtcbiAgICAgICAgY29uc3QgZXhwaXJlc0F0ID0gbW9tZW50KGRhdGUpLnV0YygpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IGJvZHkgPSB7IGV4cGlyZXNBdDogZXhwaXJlc0F0IH07XG4gICAgICAgIHJldHVybiBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHBDbGllbnQucG9zdCh1cmwsIGJvZHkpLnBpcGUoXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBcIlNlcnZlciBOb3QgQWNjZXNzaWJsZVwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyLmNvZGUgIT0gXCJFQ09OTlJFRlVTRURcIikgdGhyb3coe2Vycm9yOiBlcnIuY29kZX0pO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyh7ZXJyb3I6IGVycm9yfSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSByZWlzc3VlRW5yb2xsbWVudChpZDogc3RyaW5nLCBkYXRlKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3QgYXBpVmVyc2lvbnMgPSB0aGlzLnNldHRpbmdzU2VydmljZS5hcGlWZXJzaW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gYXBpVmVyc2lvbnNbXCJlZGdlLW1hbmFnZW1lbnRcIl0/LnYxPy5wYXRoIHx8ICcvZWRnZS9tYW5hZ2VtZW50L3YxJztcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Muc2VsZWN0ZWRFZGdlQ29udHJvbGxlciArIGAke3ByZWZpeH0vZW5yb2xsbWVudHMvJHtpZH0vcmVmcmVzaGA7XG4gICAgICAgIGNvbnN0IGV4cGlyZXNBdCA9IG1vbWVudChkYXRlKS51dGMoKS50b0lTT1N0cmluZygpO1xuICAgICAgICBjb25zdCBib2R5ID0geyBleHBpcmVzQXQ6IGV4cGlyZXNBdCB9O1xuICAgICAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwQ2xpZW50LnBvc3QodXJsLCBib2R5KS5waXBlKFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gXCJTZXJ2ZXIgTm90IEFjY2Vzc2libGVcIjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyci5jb2RlICE9IFwiRUNPTk5SRUZVU0VEXCIpIHRocm93KHtlcnJvcjogZXJyLmNvZGV9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3coe2Vycm9yOiBlcnJvcn0pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmVzZXRNRkEoaWQpIHtcbiAgICAgICAgY29uc3QgYXBpVmVyc2lvbnMgPSB0aGlzLnNldHRpbmdzU2VydmljZS5hcGlWZXJzaW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gYXBpVmVyc2lvbnNbXCJlZGdlLW1hbmFnZW1lbnRcIl0/LnYxPy5wYXRoIHx8ICcvZWRnZS9tYW5hZ2VtZW50L3YxJztcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Muc2VsZWN0ZWRFZGdlQ29udHJvbGxlciArIGAke3ByZWZpeH0vaWRlbnRpdGllcy8ke2lkfS9tZmFgO1xuICAgICAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwQ2xpZW50LmRlbGV0ZSh1cmwpLnBpcGUoXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBcIlNlcnZlciBOb3QgQWNjZXNzaWJsZVwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyLmNvZGUgIT0gXCJFQ09OTlJFRlVTRURcIikgdGhyb3coe2Vycm9yOiBlcnIuY29kZX0pO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyh7ZXJyb3I6IGVycm9yfSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBkZWxldGUodHlwZTogc3RyaW5nLCBpZDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3QgYXBpVmVyc2lvbnMgPSB0aGlzLnNldHRpbmdzU2VydmljZS5hcGlWZXJzaW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gYXBpVmVyc2lvbnNbXCJlZGdlLW1hbmFnZW1lbnRcIl0/LnYxPy5wYXRoO1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5ncy5zZWxlY3RlZEVkZ2VDb250cm9sbGVyO1xuICAgICAgICBjb25zdCBzZXJ2aWNlVXJsID0gdXJsICsgcHJlZml4ICsgXCIvXCIgKyB0eXBlICsgJy8nICsgaWQ7XG5cbiAgICAgICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cENsaWVudC5kZWxldGUoc2VydmljZVVybCwge30pLnBpcGUoXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBcIlNlcnZlciBOb3QgQWNjZXNzaWJsZVwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyLmNvZGUgIT0gXCJFQ09OTlJFRlVTRURcIikgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyh7ZXJyb3I6IGVycm9yfSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbWFwKChyZXN1bHRzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBjYWxsKGNhbGxVcmwpIHtcbiAgICAgICAgY29uc3QgYXBpVmVyc2lvbnMgPSB0aGlzLnNldHRpbmdzU2VydmljZS5hcGlWZXJzaW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gYXBpVmVyc2lvbnNbXCJlZGdlLW1hbmFnZW1lbnRcIl0/LnYxPy5wYXRoO1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5ncy5zZWxlY3RlZEVkZ2VDb250cm9sbGVyO1xuICAgICAgICBjb25zdCBzZXJ2aWNlVXJsID0gdXJsICsgcHJlZml4ICsgXCIvXCIgKyBjYWxsVXJsO1xuXG4gICAgICAgIHJldHVybiBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHBDbGllbnQuZ2V0KHNlcnZpY2VVcmwsIHt9KS5waXBlKFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gXCJTZXJ2ZXIgTm90IEFjY2Vzc2libGVcIjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyci5jb2RlICE9IFwiRUNPTk5SRUZVU0VEXCIpIHRocm93KHtlcnJvcjogZXJyLmNvZGV9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3coe2Vycm9yOiBlcnJvcn0pO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG1hcCgocmVzdWx0czogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRVcmxGaWx0ZXIocGFnaW5nLCBmaWx0ZXJzOiBhbnlbXSkge1xuICAgICAgICBsZXQgdXJsRmlsdGVyID0gJyc7XG4gICAgICAgIGxldCB0b1NlYXJjaE9uID0gXCJuYW1lXCI7XG4gICAgICAgIGxldCBub1NlYXJjaCA9IGZpbHRlcnM/Lmxlbmd0aCA8PSAwO1xuICAgICAgICBpZiAoaXNFbXB0eShwYWdpbmcpKSB7XG4gICAgICAgICAgICBwYWdpbmcgPSB0aGlzLkRFRkFVTFRfUEFHSU5HO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYWdpbmcgJiYgcGFnaW5nLnNvcnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHBhZ2luZy5zZWFyY2hPbikgdG9TZWFyY2hPbiA9IHBhZ2luZy5zZWFyY2hPbjtcbiAgICAgICAgICAgIGlmIChwYWdpbmcubm9TZWFyY2gpIG5vU2VhcmNoID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghcGFnaW5nLmZpbHRlcikgcGFnaW5nLmZpbHRlciA9IFwiXCI7XG4gICAgICAgICAgICBpZiAoIWlzQXJyYXkocGFnaW5nLmZpbHRlcikgJiYgaXNOYU4ocGFnaW5nLmZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICBwYWdpbmcuZmlsdGVyID0gcGFnaW5nLmZpbHRlci5zcGxpdCgnIycpLmpvaW4oJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZpbHRlcnMuZm9yRWFjaCgoZmlsdGVyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgbGV0IGZpbHRlclZhbCA9ICcnO1xuICAgICAgICAgICAgc3dpdGNoIChmaWx0ZXIudHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ1RFWFRJTlBVVCc6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBmaWx0ZXIudmVyYiA/IGZpbHRlci52ZXJiIDogJ2ljb250YWlucyc7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlclZhbCA9IGAke2ZpbHRlci5jb2x1bW5JZH0gJHt2ZXJifSBcIiR7ZmlsdGVyLnZhbHVlfVwiYDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnU0VMRUNUJzpcbiAgICAgICAgICAgICAgICBjYXNlICdDT01CTyc6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IChpc051bWJlcihmaWx0ZXIudmFsdWUpIHx8IGlzQm9vbGVhbihmaWx0ZXIudmFsdWUpKSA/IGAke2ZpbHRlci52YWx1ZX1gIDogYFwiJHtmaWx0ZXIudmFsdWV9XCJgO1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJWYWwgPSBgJHtmaWx0ZXIuY29sdW1uSWR9ID0gJHt2YWx9YDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnREFURVRJTUUnOlxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJWYWwgPSBgJHtmaWx0ZXIuY29sdW1uSWR9ID49IGRhdGV0aW1lKCR7ZmlsdGVyLnZhbHVlWzBdfSkgYW5kICR7ZmlsdGVyLmNvbHVtbklkfSA8PSBkYXRldGltZSgke2ZpbHRlci52YWx1ZVsxXX0pYDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnQVRUUklCVVRFJzpcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyVmFsID0gdGhpcy5nZXRBdHRyaWJ1dGVGaWx0ZXIoZmlsdGVyLnZhbHVlLCBmaWx0ZXIuY29sdW1uSWQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdCT09MRUFOJzpcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyVmFsID0gYCR7ZmlsdGVyLmNvbHVtbklkfT0ke2ZpbHRlci52YWx1ZX1gO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJWYWwgPSBgJHtmaWx0ZXIuY29sdW1uSWR9IGljb250YWlucyBcIiR7ZmlsdGVyLnZhbHVlfVwiYDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5kZXggPD0gMCkge1xuICAgICAgICAgICAgICAgIHVybEZpbHRlciA9IGA/ZmlsdGVyPSAke2ZpbHRlclZhbH1gO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB1cmxGaWx0ZXIgKz0gYCBhbmQgJHtmaWx0ZXJWYWx9YFxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG5vU2VhcmNoKSB7XG4gICAgICAgICAgICBpZiAocGFnaW5nLnBhZ2UgIT09IC0xKSB1cmxGaWx0ZXIgPSBcIj9saW1pdD1cIiArIHBhZ2luZy50b3RhbCArIFwiJm9mZnNldD1cIiArICgocGFnaW5nLnBhZ2UgLSAxKSAqIHBhZ2luZy50b3RhbCkgICsgXCImc29ydD1cIiArIHBhZ2luZy5zb3J0ICsgXCIgXCIgKyBwYWdpbmcub3JkZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1cmxGaWx0ZXIgKz0gYCZsaW1pdD0ke3BhZ2luZy50b3RhbH0mb2Zmc2V0PSR7KChwYWdpbmcucGFnZSAtIDEpICogcGFnaW5nLnRvdGFsKX0mc29ydD0ke3BhZ2luZy5zb3J0fSAgJHtwYWdpbmcub3JkZXJ9YFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1cmxGaWx0ZXI7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgc2NoZW1hKGRhdGEpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuZGVyZWZlcmVuY2VKU09OU2NoZW1hKGRhdGEpKTtcbiAgICB9XG5cbiAgICBhc3luYyBkZXJlZmVyZW5jZUpTT05TY2hlbWEoZGF0YTogYW55KSB7XG4gICAgICAgIGNvbnN0IHJlc29sdmVyID0gbmV3IFJlc29sdmVyKCk7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IGF3YWl0IHJlc29sdmVyLnJlc29sdmUoZGF0YSk7XG4gICAgICAgIHJldHVybiBzY2hlbWEucmVzdWx0O1xuICAgIH1cblxuICAgIGdldEF0dHJpYnV0ZUZpbHRlcih2YWwsIGNvbHVtbklkKSB7XG4gICAgICAgIGxldCBmaWx0ZXIgPSAnJztcbiAgICAgICAgaWYgKGlzQXJyYXkodmFsKSkge1xuICAgICAgICAgICAgdmFsLmZvckVhY2goKGF0dHIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgKz0gJyBvciAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaWx0ZXIgKz0gYGFueU9mKCR7Y29sdW1uSWR9KSA9IFwiJHthdHRyfVwiYDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmlsdGVyID0gYGFueU9mKCR7Y29sdW1uSWR9KSA9IFwiJHt2YWx9XCJgO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaWx0ZXI7XG4gICAgfVxufVxuIl19
329
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieml0aS1jb250cm9sbGVyLWRhdGEuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ppdGktY29uc29sZS1saWIvc3JjL2xpYi9zZXJ2aWNlcy96aXRpLWNvbnRyb2xsZXItZGF0YS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztFQWNFO0FBRUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJbkQsT0FBTyxFQUFDLGdCQUFnQixFQUFrQixNQUFNLG9CQUFvQixDQUFDO0FBQ3JFLE9BQU8sRUFBQyxjQUFjLEVBQUUsR0FBRyxFQUFhLE1BQU0sTUFBTSxDQUFDO0FBQ3JELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUcxQyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDcEQsT0FBTyxFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUM3RCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDdEQsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDOzs7Ozs7O0FBSzVCLE1BQU0sT0FBTyx5QkFBMEIsU0FBUSxlQUFlO0lBRTFELFlBQXFCLE1BQXFCLEVBQ3JCLE9BQXVCLEVBQ04sZUFBZ0MsRUFDakQsVUFBc0IsRUFDdEIsTUFBYztRQUUvQixLQUFLLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBTjNDLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFFdkIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixXQUFNLEdBQU4sTUFBTSxDQUFRO0lBR25DLENBQUM7SUFFRCxJQUFJLENB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R0FBRyxFQUFFLFFBQVE7UUFDNUIsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2QsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDeEIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO29CQUNYLE1BQU0sSUFBSSxNQUFNLENBQUM7aUJBQ3BCO2dCQUNELE1BQU0sSUFBSSxTQUFTLFFBQVEsUUFBUSxJQUFJLEdBQUcsQ0FBQztZQUMvQyxDQUFDLENBQUMsQ0FBQztTQUNOO2FBQU07WUFDSCxNQUFNLEdBQUcsU0FBUyxRQUFRLFFBQVEsR0FBRyxHQUFHLENBQUM7U0FDNUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDOytHQWxWUSx5QkFBeUIsNkVBSWQsZ0JBQWdCO21IQUozQix5QkFBeUIsY0FGdEIsTUFBTTs7NEZBRVQseUJBQXlCO2tCQUhyQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBS2dCLE1BQU07MkJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAgICBDb3B5cmlnaHQgTmV0Rm91bmRyeSBJbmMuXG5cbiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuKi9cblxuaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQge0xvZ2dlclNlcnZpY2V9IGZyb20gXCIuLi9mZWF0dXJlcy9tZXNzYWdpbmcvbG9nZ2VyLnNlcnZpY2VcIjtcbmltcG9ydCB7R3Jvd2xlclNlcnZpY2V9IGZyb20gXCIuLi9mZWF0dXJlcy9tZXNzYWdpbmcvZ3Jvd2xlci5zZXJ2aWNlXCI7XG5pbXBvcnQge1NFVFRJTkdTX1NFUlZJQ0UsIFNldHRpbmdzU2VydmljZX0gZnJvbSBcIi4vc2V0dGluZ3Muc2VydmljZVwiO1xuaW1wb3J0IHtmaXJzdFZhbHVlRnJvbSwgbWFwLCBPYnNlcnZhYmxlfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHtjYXRjaEVycm9yfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XG5pbXBvcnQge0ZpbHRlck9ian0gZnJvbSBcIi4uL2ZlYXR1cmVzL2RhdGEtdGFibGUvZGF0YS10YWJsZS1maWx0ZXIuc2VydmljZVwiO1xuaW1wb3J0IHtaaXRpRGF0YVNlcnZpY2V9IGZyb20gXCIuL3ppdGktZGF0YS5zZXJ2aWNlXCI7XG5pbXBvcnQge2lzRW1wdHksIGlzQXJyYXksIGlzTnVtYmVyLCBpc0Jvb2xlYW59IGZyb20gXCJsb2Rhc2hcIjtcbmltcG9ydCB7UmVzb2x2ZXJ9IGZyb20gXCJAc3RvcGxpZ2h0L2pzb24tcmVmLXJlc29sdmVyXCI7XG5pbXBvcnQgbW9tZW50IGZyb20gXCJtb21lbnRcIjtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBaaXRpQ29udHJvbGxlckRhdGFTZXJ2aWNlIGV4dGVuZHMgWml0aURhdGFTZXJ2aWNlIHtcblxuICAgIGNvbnN0cnVjdG9yKG92ZXJyaWRlIGxvZ2dlcjogTG9nZ2VyU2VydmljZSxcbiAgICAgICAgICAgICAgICBvdmVycmlkZSBncm93bGVyOiBHcm93bGVyU2VydmljZSxcbiAgICAgICAgICAgICAgICBASW5qZWN0KFNFVFRJTkdTX1NFUlZJQ0UpIHNldHRpbmdzU2VydmljZTogU2V0dGluZ3NTZXJ2aWNlLFxuICAgICAgICAgICAgICAgIG92ZXJyaWRlIGh0dHBDbGllbnQ6IEh0dHBDbGllbnQsXG4gICAgICAgICAgICAgICAgb3ZlcnJpZGUgcm91dGVyOiBSb3V0ZXJcbiAgICApIHtcbiAgICAgICAgc3VwZXIobG9nZ2VyLCBncm93bGVyLCBzZXR0aW5nc1NlcnZpY2UsIGh0dHBDbGllbnQsIHJvdXRlcik7XG4gICAgfVxuXG4gICAgcG9zdCh0eXBlLCBtb2RlbCwgY2hhaW5lZCA9IGZhbHNlLCBjb250ZW50VHlwZT8pOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBjb25zdCBhcGlWZXJzaW9ucyA9IHRoaXMuc2V0dGluZ3NTZXJ2aWNlLmFwaVZlcnNpb25zIHx8IHt9O1xuICAgICAgICBjb25zdCBwcmVmaXggPSBhcGlWZXJzaW9uc1tcImVkZ2UtbWFuYWdlbWVudFwiXT8udjE/LnBhdGg7XG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMuc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLnNlbGVjdGVkRWRnZUNvbnRyb2xsZXI7XG4gICAgICAgIGNvbnN0IHNlcnZpY2VVcmwgPSB1cmwgKyBwcmVmaXggKyBcIi9cIiArIHR5cGU7XG4gICAgICAgIGxldCBvcHRpb25zID0ge307XG4gICAgICAgIGlmIChjb250ZW50VHlwZSkge1xuICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICAnQ29udGVudC1UeXBlJzogY29udGVudFR5cGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wdGlvbnMgPSB7IGhlYWRlcnMgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwQ2xpZW50LnBvc3Qoc2VydmljZVVybCwgbW9kZWwsIG9wdGlvbnMpLnBpcGUoXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBcIlNlcnZlciBOb3QgQWNjZXNzaWJsZVwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyLmNvZGUgIT09IFwiRUNPTk5SRUZVU0VEXCIpIHRocm93KGVycik7XG4gICAgICAgICAgICAgICAgICAgIHRocm93KHtlcnJvcjogZXJyb3J9KTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdXQodHlwZSwgbW9kZWwsIGlkLCBjaGFpbmVkID0gZmFsc2UpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBjb25zdCBhcGlWZXJzaW9ucyA9IHRoaXMuc2V0dGluZ3NTZXJ2aWNlLmFwaVZlcnNpb25zIHx8IHt9O1xuICAgICAgICBjb25zdCBwcmVmaXggPSBhcGlWZXJzaW9uc1tcImVkZ2UtbWFuYWdlbWVudFwiXT8udjE/LnBhdGggfHwgJy9lZGdlL21hbmFnZW1lbnQvdjEnO1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5ncy5zZWxlY3RlZEVkZ2VDb250cm9sbGVyO1xuICAgICAgICBjb25zdCBzZXJ2aWNlVXJsID0gdXJsICsgcHJlZml4ICsgXCIvXCIgKyB0eXBlICsgJy8nICsgaWQ7XG4gICAgICAgIHRoaXMuaHR0cENsaWVudC5wYXRjaChzZXJ2aWNlVXJsLCBtb2RlbCwge30pO1xuXG4gICAgICAgIHJldHVybiBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHBDbGllbnQucHV0KHNlcnZpY2VVcmwsIG1vZGVsLCB7fSkucGlwZShcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IFwiU2VydmVyIE5vdCBBY2Nlc3NpYmxlXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIuY29kZSAhPT0gXCJFQ09OTlJFRlVTRURcIikgdGhyb3coZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3coe2Vycm9yOiBlcnJvcn0pO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG1hcCgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHBhdGNoKHR5cGUsIG1vZGVsLCBpZCwgY2hhaW5lZCA9IGZhbHNlKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3QgYXBpVmVyc2lvbnMgPSB0aGlzLnNldHRpbmdzU2VydmljZS5hcGlWZXJzaW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gYXBpVmVyc2lvbnNbXCJlZGdlLW1hbmFnZW1lbnRcIl0/LnYxPy5wYXRoIHx8ICcvZWRnZS9tYW5hZ2VtZW50L3YxJztcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Muc2VsZWN0ZWRFZGdlQ29udHJvbGxlcjtcbiAgICAgICAgY29uc3Qgc2VydmljZVVybCA9IHVybCArIHByZWZpeCArIFwiL1wiICsgdHlwZSArICcvJyArIGlkO1xuICAgICAgICB0aGlzLmh0dHBDbGllbnQucGF0Y2goc2VydmljZVVybCwgbW9kZWwsIHt9KTtcblxuICAgICAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwQ2xpZW50LnBhdGNoKHNlcnZpY2VVcmwsIG1vZGVsLCB7fSkucGlwZShcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IFwiU2VydmVyIE5vdCBBY2Nlc3NpYmxlXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIuY29kZSAhPT0gXCJFQ09OTlJFRlVTRURcIikgdGhyb3coZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3coe2Vycm9yOiBlcnJvcn0pO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG1hcCgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldCh0eXBlOiBzdHJpbmcsIHBhZ2luZzogYW55LCBmaWx0ZXJzOiBGaWx0ZXJPYmpbXSA9IFtdLCB1cmw/LCB1c2VDbGllbnQ/KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3QgYXBpVmVyc2lvbnMgPSB0aGlzLnNldHRpbmdzU2VydmljZS5hcGlWZXJzaW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgbWFuYWdlbWVudFVybCA9IGFwaVZlcnNpb25zW1wiZWRnZS1tYW5hZ2VtZW50XCJdPy52MT8ucGF0aCB8fCAnL2VkZ2UvbWFuYWdlbWVudC92MSc7XG4gICAgICAgIGNvbnN0IGNsaWVudFVybCA9ICcvZWRnZS9jbGllbnQvdjEnO1xuICAgICAgICBjb25zdCBwcmVmaXggPSB1c2VDbGllbnQgPyBjbGllbnRVcmwgOiBtYW5hZ2VtZW50VXJsO1xuICAgICAgICB1cmwgPSB0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5ncy5zZWxlY3RlZEVkZ2VDb250cm9sbGVyO1xuICAgICAgICBjb25zdCB1cmxGaWx0ZXIgPSB0aGlzLmdldFVybEZpbHRlcihwYWdpbmcsIGZpbHRlcnMpO1xuICAgICAgICBjb25zdCBzZXJ2aWNlVXJsID0gdXJsICsgcHJlZml4ICsgXCIvXCIgKyB0eXBlICsgdXJsRmlsdGVyO1xuXG4gICAgICAgIHJldHVybiBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHBDbGllbnQuZ2V0KHNlcnZpY2VVcmwse30pLnBpcGUoXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBcIlNlcnZlciBOb3QgQWNjZXNzaWJsZVwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyLmNvZGUgIT0gXCJFQ09OTlJFRlVTRURcIikgdGhyb3coe2Vycm9yOiBlcnIuY29kZX0pO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyh7ZXJyb3I6IGVycm9yfSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbWFwKChyZXN1bHRzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBnZXRTdWJkYXRhKGVudGl0eVR5cGU6IHN0cmluZywgaWQ6IGFueSwgZGF0YVR5cGU6IHN0cmluZywgcGFnaW5nPzogYW55LCBjb250ZW50VHlwZT86IGFueSwgZmlsdGVyczogYW55W10gPSBbXSk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGNvbnN0IGFwaVZlcnNpb25zID0gdGhpcy5zZXR0aW5nc1NlcnZpY2UuYXBpVmVyc2lvbnMgfHwge307XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IGFwaVZlcnNpb25zW1wiZWRnZS1tYW5hZ2VtZW50XCJdPy52MT8ucGF0aCB8fCAnL2VkZ2UvbWFuYWdlbWVudC92MSc7XG5cbiAgICAgICAgbGV0IHVybEZpbHRlciA9ICcnO1xuICAgICAgICBpZiAoIWlzRW1wdHkocGFnaW5nKSkge1xuICAgICAgICAgICAgdXJsRmlsdGVyID0gdGhpcy5nZXRVcmxGaWx0ZXIocGFnaW5nLCBmaWx0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5ncy5zZWxlY3RlZEVkZ2VDb250cm9sbGVyICsgYCR7cHJlZml4fS8ke2VudGl0eVR5cGV9LyR7aWR9LyR7ZGF0YVR5cGV9LyR7dXJsRmlsdGVyfWA7XG5cbiAgICAgICAgbGV0IG9wdGlvbnM6IGFueSA9IHt9O1xuICAgICAgICBpZiAoY29udGVudFR5cGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7XG4gICAgICAgICAgICAgICAgJ0FjY2VwdCc6IGNvbnRlbnRUeXBlLFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiBjb250ZW50VHlwZVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3B0aW9ucyA9IHsgaGVhZGVycyB9O1xuICAgICAgICAgICAgaWYgKGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL2p3dCcpID49IDApIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLnJlc3BvbnNlVHlwZSA9ICd0ZXh0JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHBDbGllbnQuZ2V0KHVybCwgb3B0aW9ucykucGlwZShcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IFwiU2VydmVyIE5vdCBBY2Nlc3NpYmxlXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIuY29kZSAhPSBcIkVDT05OUkVGVVNFRFwiKSB0aHJvdyh7ZXJyb3I6IGVyci5jb2RlfSk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93KHtlcnJvcjogZXJyb3J9KTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHNhdmVTdWJkYXRhKGVudGl0eVR5cGU6IHN0cmluZywgaWQ6IGFueSwgZGF0YVR5cGU6IHN0cmluZywgcGFyYW1zOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBjb25zdCBhcGlWZXJzaW9ucyA9IHRoaXMuc2V0dGluZ3NTZXJ2aWNlLmFwaVZlcnNpb25zIHx8IHt9O1xuICAgICAgICBjb25zdCBwcmVmaXggPSBhcGlWZXJzaW9uc1tcImVkZ2UtbWFuYWdlbWVudFwiXT8udjE/LnBhdGggfHwgJy9lZGdlL21hbmFnZW1lbnQvdjEnO1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5ncy5zZWxlY3RlZEVkZ2VDb250cm9sbGVyICsgYCR7cHJlZml4fS8ke2VudGl0eVR5cGV9LyR7aWR9LyR7ZGF0YVR5cGV9YDtcblxuICAgICAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwQ2xpZW50LnBvc3QodXJsLCBwYXJhbXMsIHt9KS5waXBlKFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gXCJTZXJ2ZXIgTm90IEFjY2Vzc2libGVcIjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyci5jb2RlICE9IFwiRUNPTk5SRUZVU0VEXCIpIHRocm93KHtlcnJvcjogZXJyLmNvZGV9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3coe2Vycm9yOiBlcnJvcn0pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZGVsZXRlU3ViZGF0YShlbnRpdHlUeXBlOiBzdHJpbmcsIGlkOiBhbnksIGRhdGFUeXBlOiBzdHJpbmcsIHBhcmFtczogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3QgYXBpVmVyc2lvbnMgPSB0aGlzLnNldHRpbmdzU2VydmljZS5hcGlWZXJzaW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gYXBpVmVyc2lvbnNbXCJlZGdlLW1hbmFnZW1lbnRcIl0/LnYxPy5wYXRoIHx8ICcvZWRnZS9tYW5hZ2VtZW50L3YxJztcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Muc2VsZWN0ZWRFZGdlQ29udHJvbGxlciArIGAke3ByZWZpeH0vJHtlbnRpdHlUeXBlfS8ke2lkfS8ke2RhdGFUeXBlfWA7XG5cbiAgICAgICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cENsaWVudC5kZWxldGUodXJsLCB7Ym9keTogcGFyYW1zfSkucGlwZShcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IFwiU2VydmVyIE5vdCBBY2Nlc3NpYmxlXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIuY29kZSAhPSBcIkVDT05OUkVGVVNFRFwiKSB0aHJvdyh7ZXJyb3I6IGVyci5jb2RlfSk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93KHtlcnJvcjogZXJyb3J9KTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIG92ZXJyaWRlIHJlc2V0RW5yb2xsbWVudChpZDogc3RyaW5nLCBkYXRlOiBhbnkpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBjb25zdCBhcGlWZXJzaW9ucyA9IHRoaXMuc2V0dGluZ3NTZXJ2aWNlLmFwaVZlcnNpb25zIHx8IHt9O1xuICAgICAgICBjb25zdCBwcmVmaXggPSBhcGlWZXJzaW9uc1tcImVkZ2UtbWFuYWdlbWVudFwiXT8udjE/LnBhdGggfHwgJy9lZGdlL21hbmFnZW1lbnQvdjEnO1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5ncy5zZWxlY3RlZEVkZ2VDb250cm9sbGVyICsgYCR7cHJlZml4fS9hdXRoZW50aWNhdG9ycy8ke2lkLnRyaW0oKX0vcmUtZW5yb2xsYDtcbiAgICAgICAgY29uc3QgZXhwaXJlc0F0ID0gbW9tZW50KGRhdGUpLnV0YygpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IGJvZHkgPSB7IGV4cGlyZXNBdDogZXhwaXJlc0F0IH07XG4gICAgICAgIHJldHVybiBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHBDbGllbnQucG9zdCh1cmwsIGJvZHkpLnBpcGUoXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBcIlNlcnZlciBOb3QgQWNjZXNzaWJsZVwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyLmNvZGUgIT0gXCJFQ09OTlJFRlVTRURcIikgdGhyb3coe2Vycm9yOiBlcnIuY29kZX0pO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyh7ZXJyb3I6IGVycm9yfSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSByZWlzc3VlRW5yb2xsbWVudChpZDogc3RyaW5nLCBkYXRlKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3QgYXBpVmVyc2lvbnMgPSB0aGlzLnNldHRpbmdzU2VydmljZS5hcGlWZXJzaW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gYXBpVmVyc2lvbnNbXCJlZGdlLW1hbmFnZW1lbnRcIl0/LnYxPy5wYXRoIHx8ICcvZWRnZS9tYW5hZ2VtZW50L3YxJztcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Muc2VsZWN0ZWRFZGdlQ29udHJvbGxlciArIGAke3ByZWZpeH0vZW5yb2xsbWVudHMvJHtpZH0vcmVmcmVzaGA7XG4gICAgICAgIGNvbnN0IGV4cGlyZXNBdCA9IG1vbWVudChkYXRlKS51dGMoKS50b0lTT1N0cmluZygpO1xuICAgICAgICBjb25zdCBib2R5ID0geyBleHBpcmVzQXQ6IGV4cGlyZXNBdCB9O1xuICAgICAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwQ2xpZW50LnBvc3QodXJsLCBib2R5KS5waXBlKFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gXCJTZXJ2ZXIgTm90IEFjY2Vzc2libGVcIjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyci5jb2RlICE9IFwiRUNPTk5SRUZVU0VEXCIpIHRocm93KHtlcnJvcjogZXJyLmNvZGV9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3coe2Vycm9yOiBlcnJvcn0pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmVzZXRNRkEoaWQpIHtcbiAgICAgICAgY29uc3QgYXBpVmVyc2lvbnMgPSB0aGlzLnNldHRpbmdzU2VydmljZS5hcGlWZXJzaW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gYXBpVmVyc2lvbnNbXCJlZGdlLW1hbmFnZW1lbnRcIl0/LnYxPy5wYXRoIHx8ICcvZWRnZS9tYW5hZ2VtZW50L3YxJztcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Muc2VsZWN0ZWRFZGdlQ29udHJvbGxlciArIGAke3ByZWZpeH0vaWRlbnRpdGllcy8ke2lkfS9tZmFgO1xuICAgICAgICByZXR1cm4gZmlyc3RWYWx1ZUZyb20odGhpcy5odHRwQ2xpZW50LmRlbGV0ZSh1cmwpLnBpcGUoXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBcIlNlcnZlciBOb3QgQWNjZXNzaWJsZVwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyLmNvZGUgIT0gXCJFQ09OTlJFRlVTRURcIikgdGhyb3coe2Vycm9yOiBlcnIuY29kZX0pO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyh7ZXJyb3I6IGVycm9yfSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXNldFBhc3N3b3JkKG9sZFBhc3MsIG5ld1Bhc3MsIGNvbmZpcm1QYXNzKSB7XG4gICAgICAgIGNvbnN0IGFwaVZlcnNpb25zID0gdGhpcy5zZXR0aW5nc1NlcnZpY2UuYXBpVmVyc2lvbnMgfHwge307XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IGFwaVZlcnNpb25zW1wiZWRnZS1tYW5hZ2VtZW50XCJdPy52MT8ucGF0aCB8fCAnL2VkZ2UvbWFuYWdlbWVudC92MSc7XG4gICAgICAgIGNvbnN0IGF1dGhlbnRpY2F0b3JzVXJsID0gdGhpcy5zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Muc2VsZWN0ZWRFZGdlQ29udHJvbGxlciArIGAke3ByZWZpeH0vY3VycmVudC1pZGVudGl0eS9hdXRoZW50aWNhdG9ycz9maWx0ZXI9bWV0aG9kPVxcXCJ1cGRiXFxcImA7XG4gICAgICAgIHJldHVybiBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHBDbGllbnQuZ2V0KGF1dGhlbnRpY2F0b3JzVXJsKSkudGhlbigoYXV0aGVudGljYXRvclJlc3VsdDogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpZCA9IGF1dGhlbnRpY2F0b3JSZXN1bHQ/LmRhdGFbMF0uaWQ7XG4gICAgICAgICAgICBjb25zdCB1c2VybmFtZSA9IGF1dGhlbnRpY2F0b3JSZXN1bHQuZGF0YVswXS51c2VybmFtZTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFzc3dvcmQ6IG9sZFBhc3MsXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQ6IG5ld1Bhc3MsXG4gICAgICAgICAgICAgICAgdXNlcm5hbWU6IHVzZXJuYW1lXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXNldFVybCA9IHRoaXMuc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLnNlbGVjdGVkRWRnZUNvbnRyb2xsZXIgKyBgJHtwcmVmaXh9L2N1cnJlbnQtaWRlbnRpdHkvYXV0aGVudGljYXRvcnMvJHtpZH1gO1xuICAgICAgICAgICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cENsaWVudC5wdXQocmVzZXRVcmwsIHBhcmFtcykpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBkZWxldGUodHlwZTogc3RyaW5nLCBpZDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3QgYXBpVmVyc2lvbnMgPSB0aGlzLnNldHRpbmdzU2VydmljZS5hcGlWZXJzaW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gYXBpVmVyc2lvbnNbXCJlZGdlLW1hbmFnZW1lbnRcIl0/LnYxPy5wYXRoO1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5ncy5zZWxlY3RlZEVkZ2VDb250cm9sbGVyO1xuICAgICAgICBjb25zdCBzZXJ2aWNlVXJsID0gdXJsICsgcHJlZml4ICsgXCIvXCIgKyB0eXBlICsgJy8nICsgaWQ7XG5cbiAgICAgICAgcmV0dXJuIGZpcnN0VmFsdWVGcm9tKHRoaXMuaHR0cENsaWVudC5kZWxldGUoc2VydmljZVVybCwge30pLnBpcGUoXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBcIlNlcnZlciBOb3QgQWNjZXNzaWJsZVwiO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyLmNvZGUgIT0gXCJFQ09OTlJFRlVTRURcIikgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyh7ZXJyb3I6IGVycm9yfSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgbWFwKChyZXN1bHRzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBjYWxsKGNhbGxVcmwpIHtcbiAgICAgICAgY29uc3QgYXBpVmVyc2lvbnMgPSB0aGlzLnNldHRpbmdzU2VydmljZS5hcGlWZXJzaW9ucyB8fCB7fTtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gYXBpVmVyc2lvbnNbXCJlZGdlLW1hbmFnZW1lbnRcIl0/LnYxPy5wYXRoO1xuICAgICAgICBjb25zdCB1cmwgPSB0aGlzLnNldHRpbmdzU2VydmljZS5zZXR0aW5ncy5zZWxlY3RlZEVkZ2VDb250cm9sbGVyO1xuICAgICAgICBjb25zdCBzZXJ2aWNlVXJsID0gdXJsICsgcHJlZml4ICsgXCIvXCIgKyBjYWxsVXJsO1xuXG4gICAgICAgIHJldHVybiBmaXJzdFZhbHVlRnJvbSh0aGlzLmh0dHBDbGllbnQuZ2V0KHNlcnZpY2VVcmwsIHt9KS5waXBlKFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gXCJTZXJ2ZXIgTm90IEFjY2Vzc2libGVcIjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVyci5jb2RlICE9IFwiRUNPTk5SRUZVU0VEXCIpIHRocm93KHtlcnJvcjogZXJyLmNvZGV9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3coe2Vycm9yOiBlcnJvcn0pO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG1hcCgocmVzdWx0czogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRVcmxGaWx0ZXIocGFnaW5nLCBmaWx0ZXJzOiBhbnlbXSkge1xuICAgICAgICBsZXQgdXJsRmlsdGVyID0gJyc7XG4gICAgICAgIGxldCB0b1NlYXJjaE9uID0gXCJuYW1lXCI7XG4gICAgICAgIGxldCBub1NlYXJjaCA9IGZpbHRlcnM/Lmxlbmd0aCA8PSAwO1xuICAgICAgICBpZiAoaXNFbXB0eShwYWdpbmcpKSB7XG4gICAgICAgICAgICBwYWdpbmcgPSB0aGlzLkRFRkFVTFRfUEFHSU5HO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYWdpbmcgJiYgcGFnaW5nLnNvcnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHBhZ2luZy5zZWFyY2hPbikgdG9TZWFyY2hPbiA9IHBhZ2luZy5zZWFyY2hPbjtcbiAgICAgICAgICAgIGlmIChwYWdpbmcubm9TZWFyY2gpIG5vU2VhcmNoID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICghcGFnaW5nLmZpbHRlcikgcGFnaW5nLmZpbHRlciA9IFwiXCI7XG4gICAgICAgICAgICBpZiAoIWlzQXJyYXkocGFnaW5nLmZpbHRlcikgJiYgaXNOYU4ocGFnaW5nLmZpbHRlcikpIHtcbiAgICAgICAgICAgICAgICBwYWdpbmcuZmlsdGVyID0gcGFnaW5nLmZpbHRlci5zcGxpdCgnIycpLmpvaW4oJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZpbHRlcnMuZm9yRWFjaCgoZmlsdGVyLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgbGV0IGZpbHRlclZhbCA9ICcnO1xuICAgICAgICAgICAgc3dpdGNoIChmaWx0ZXIudHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ1RFWFRJTlBVVCc6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBmaWx0ZXIudmVyYiA/IGZpbHRlci52ZXJiIDogJ2ljb250YWlucyc7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlclZhbCA9IGAke2ZpbHRlci5jb2x1bW5JZH0gJHt2ZXJifSBcIiR7ZmlsdGVyLnZhbHVlfVwiYDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnU0VMRUNUJzpcbiAgICAgICAgICAgICAgICBjYXNlICdDT01CTyc6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbCA9IChpc051bWJlcihmaWx0ZXIudmFsdWUpIHx8IGlzQm9vbGVhbihmaWx0ZXIudmFsdWUpKSA/IGAke2ZpbHRlci52YWx1ZX1gIDogYFwiJHtmaWx0ZXIudmFsdWV9XCJgO1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJWYWwgPSBgJHtmaWx0ZXIuY29sdW1uSWR9ID0gJHt2YWx9YDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnREFURVRJTUUnOlxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJWYWwgPSBgJHtmaWx0ZXIuY29sdW1uSWR9ID49IGRhdGV0aW1lKCR7ZmlsdGVyLnZhbHVlWzBdfSkgYW5kICR7ZmlsdGVyLmNvbHVtbklkfSA8PSBkYXRldGltZSgke2ZpbHRlci52YWx1ZVsxXX0pYDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnQVRUUklCVVRFJzpcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyVmFsID0gdGhpcy5nZXRBdHRyaWJ1dGVGaWx0ZXIoZmlsdGVyLnZhbHVlLCBmaWx0ZXIuY29sdW1uSWQpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdCT09MRUFOJzpcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyVmFsID0gYCR7ZmlsdGVyLmNvbHVtbklkfT0ke2ZpbHRlci52YWx1ZX1gO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJWYWwgPSBgJHtmaWx0ZXIuY29sdW1uSWR9IGljb250YWlucyBcIiR7ZmlsdGVyLnZhbHVlfVwiYDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaW5kZXggPD0gMCkge1xuICAgICAgICAgICAgICAgIHVybEZpbHRlciA9IGA/ZmlsdGVyPSAke2ZpbHRlclZhbH1gO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB1cmxGaWx0ZXIgKz0gYCBhbmQgJHtmaWx0ZXJWYWx9YFxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG5vU2VhcmNoKSB7XG4gICAgICAgICAgICBpZiAocGFnaW5nLnBhZ2UgIT09IC0xKSB1cmxGaWx0ZXIgPSBcIj9saW1pdD1cIiArIHBhZ2luZy50b3RhbCArIFwiJm9mZnNldD1cIiArICgocGFnaW5nLnBhZ2UgLSAxKSAqIHBhZ2luZy50b3RhbCkgICsgXCImc29ydD1cIiArIHBhZ2luZy5zb3J0ICsgXCIgXCIgKyBwYWdpbmcub3JkZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1cmxGaWx0ZXIgKz0gYCZsaW1pdD0ke3BhZ2luZy50b3RhbH0mb2Zmc2V0PSR7KChwYWdpbmcucGFnZSAtIDEpICogcGFnaW5nLnRvdGFsKX0mc29ydD0ke3BhZ2luZy5zb3J0fSAgJHtwYWdpbmcub3JkZXJ9YFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1cmxGaWx0ZXI7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgc2NoZW1hKGRhdGEpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuZGVyZWZlcmVuY2VKU09OU2NoZW1hKGRhdGEpKTtcbiAgICB9XG5cbiAgICBhc3luYyBkZXJlZmVyZW5jZUpTT05TY2hlbWEoZGF0YTogYW55KSB7XG4gICAgICAgIGNvbnN0IHJlc29sdmVyID0gbmV3IFJlc29sdmVyKCk7XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IGF3YWl0IHJlc29sdmVyLnJlc29sdmUoZGF0YSk7XG4gICAgICAgIHJldHVybiBzY2hlbWEucmVzdWx0O1xuICAgIH1cblxuICAgIGdldEF0dHJpYnV0ZUZpbHRlcih2YWwsIGNvbHVtbklkKSB7XG4gICAgICAgIGxldCBmaWx0ZXIgPSAnJztcbiAgICAgICAgaWYgKGlzQXJyYXkodmFsKSkge1xuICAgICAgICAgICAgdmFsLmZvckVhY2goKGF0dHIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgKz0gJyBvciAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaWx0ZXIgKz0gYGFueU9mKCR7Y29sdW1uSWR9KSA9IFwiJHthdHRyfVwiYDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmlsdGVyID0gYGFueU9mKCR7Y29sdW1uSWR9KSA9IFwiJHt2YWx9XCJgO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaWx0ZXI7XG4gICAgfVxufVxuIl19