@keycloakify/angular 0.0.1-rc.17 → 0.0.1-rc.19

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 (350) hide show
  1. package/account/containers/template/template.component.d.ts +18 -5
  2. package/account/pages/account/account.component.d.ts +3 -2
  3. package/account/pages/applications/applications.component.d.ts +3 -2
  4. package/account/pages/federatedIdentity/federatedIdentity.component.d.ts +3 -2
  5. package/account/pages/log/log.component.d.ts +3 -2
  6. package/account/pages/password/password.component.d.ts +3 -2
  7. package/account/pages/sessions/sessions.component.d.ts +3 -2
  8. package/account/pages/totp/totp.component.d.ts +3 -2
  9. package/esm2022/account/containers/template/template.component.mjs +42 -9
  10. package/esm2022/account/directives/kc-class/kc-class.directive.mjs +3 -3
  11. package/esm2022/account/pages/account/account.component.mjs +8 -7
  12. package/esm2022/account/pages/applications/applications.component.mjs +8 -7
  13. package/esm2022/account/pages/federatedIdentity/federatedIdentity.component.mjs +8 -7
  14. package/esm2022/account/pages/log/log.component.mjs +8 -7
  15. package/esm2022/account/pages/password/password.component.mjs +9 -7
  16. package/esm2022/account/pages/sessions/sessions.component.mjs +8 -7
  17. package/esm2022/account/pages/totp/totp.component.mjs +8 -7
  18. package/esm2022/account/providers/keycloakify-angular/keycloakify-angular.providers.mjs +2 -1
  19. package/esm2022/account/services/account-resource-injector/account-resource-injector.service.mjs +3 -3
  20. package/esm2022/account/services/i18n/i18n.service.mjs +3 -3
  21. package/esm2022/lib/directives/attributes/attributes.directive.mjs +3 -3
  22. package/esm2022/lib/pipes/input-type/input-type.pipe.mjs +3 -3
  23. package/esm2022/lib/pipes/is-array-with-empty-object/is-array-with-empty-object.pipe.mjs +3 -3
  24. package/esm2022/lib/pipes/kc-sanitize/kc-sanitize.pipe.mjs +3 -3
  25. package/esm2022/lib/pipes/to-array/to-array.pipe.mjs +3 -3
  26. package/esm2022/lib/pipes/to-number/to-number.pipe.mjs +3 -3
  27. package/esm2022/lib/services/resource-injector/resource-injector.service.mjs +3 -3
  28. package/esm2022/login/components/add-remove-buttons-multi-valued-attribute/add-remove-buttons-multi-valued-attribute.component.mjs +5 -5
  29. package/esm2022/login/components/field-errors/field-errors.component.mjs +6 -6
  30. package/esm2022/login/components/group-label/group-label.component.mjs +3 -3
  31. package/esm2022/login/components/input-field-by-type/input-field-by-type.component.mjs +6 -6
  32. package/esm2022/login/components/input-tag/input-tag.component.mjs +6 -6
  33. package/esm2022/login/components/input-tag-selects/input-tag-selects.component.mjs +3 -3
  34. package/esm2022/login/components/logout-other-sessions/logout-other-sessions.component.mjs +3 -3
  35. package/esm2022/login/components/password-wrapper/password-wrapper.component.mjs +6 -6
  36. package/esm2022/login/components/select-tag/select-tag.component.mjs +3 -3
  37. package/esm2022/login/components/textarea-tag/textarea-tag.component.mjs +3 -3
  38. package/esm2022/login/components/user-profile-form-fields/user-profile-form-fields.component.mjs +6 -6
  39. package/esm2022/login/containers/template/template.component.mjs +83 -15
  40. package/esm2022/login/directives/kc-class/kc-class.directive.mjs +5 -5
  41. package/esm2022/login/pages/code/code.component.mjs +16 -10
  42. package/esm2022/login/pages/delete-account-confirm/delete-account-confirm.component.mjs +14 -8
  43. package/esm2022/login/pages/delete-credential/delete-credential.component.mjs +12 -11
  44. package/esm2022/login/pages/error/error.component.mjs +16 -10
  45. package/esm2022/login/pages/frontchannel-logout/frontchannel-logout.component.mjs +14 -12
  46. package/esm2022/login/pages/idp-review-user-profile/idp-review-user-profile.component.mjs +14 -13
  47. package/esm2022/login/pages/info/info.component.mjs +13 -12
  48. package/esm2022/login/pages/login/login.component.mjs +15 -14
  49. package/esm2022/login/pages/login-config-totp/login-config-totp.component.mjs +14 -13
  50. package/esm2022/login/pages/login-idp-link-confirm/login-idp-link-confirm.component.mjs +13 -16
  51. package/esm2022/login/pages/login-idp-link-confirm-override/login-idp-link-confirm-override.component.mjs +13 -16
  52. package/esm2022/login/pages/login-idp-link-email/login-idp-link-email.component.mjs +12 -15
  53. package/esm2022/login/pages/login-oauth-grant/login-oauth-grant.component.mjs +13 -15
  54. package/esm2022/login/pages/login-oauth2-device-verify-user-code/login-oauth2-device-verify-user-code.component.mjs +12 -11
  55. package/esm2022/login/pages/login-otp/login-otp.component.mjs +13 -12
  56. package/esm2022/login/pages/login-page-expired/login-page-expired.component.mjs +12 -11
  57. package/esm2022/login/pages/login-passkeys-conditional-authenticate/login-passkeys-conditional-authenticate.component.mjs +13 -8
  58. package/esm2022/login/pages/login-password/login-password.component.mjs +15 -13
  59. package/esm2022/login/pages/login-recovery-authn-code-config/login-recovery-authn-code-config.component.mjs +14 -13
  60. package/esm2022/login/pages/login-recovery-authn-code-input/login-recovery-authn-code-input.component.mjs +14 -13
  61. package/esm2022/login/pages/login-reset-otp/login-reset-otp.component.mjs +13 -12
  62. package/esm2022/login/pages/login-reset-password/login-reset-password.component.mjs +13 -12
  63. package/esm2022/login/pages/login-update-password/login-update-password.component.mjs +13 -12
  64. package/esm2022/login/pages/login-update-profile/login-update-profile.component.mjs +13 -12
  65. package/esm2022/login/pages/login-username/login-username.component.mjs +14 -13
  66. package/esm2022/login/pages/login-verify-email/login-verify-email.component.mjs +12 -11
  67. package/esm2022/login/pages/login-x509-info/login-x509-info.component.mjs +12 -11
  68. package/esm2022/login/pages/logout-confirm/logout-confirm.component.mjs +12 -15
  69. package/esm2022/login/pages/register/register.component.mjs +16 -15
  70. package/esm2022/login/pages/saml-post-form/saml-post-form.component.mjs +16 -17
  71. package/esm2022/login/pages/select-authenticator/select-authenticator.component.mjs +13 -12
  72. package/esm2022/login/pages/terms/terms.component.mjs +12 -11
  73. package/esm2022/login/pages/update-email/update-email.component.mjs +14 -17
  74. package/esm2022/login/pages/webauthn-authenticate/webauthn-authenticate.component.mjs +12 -11
  75. package/esm2022/login/pages/webauthn-error/webauthn-error.component.mjs +13 -12
  76. package/esm2022/login/pages/webauthn-register/webauthn-register.component.mjs +12 -11
  77. package/esm2022/login/providers/keycloakify-angular/keycloakify-angular.providers.mjs +2 -1
  78. package/esm2022/login/services/i18n/i18n.service.mjs +3 -3
  79. package/esm2022/login/services/login-resource-injector/login-resource-injector.service.mjs +3 -3
  80. package/esm2022/login/services/submit/submit.service.mjs +4 -4
  81. package/esm2022/login/services/user-profile-form/user-profile-form.service.mjs +3 -3
  82. package/fesm2022/keycloakify-angular-account-containers-template.mjs +42 -9
  83. package/fesm2022/keycloakify-angular-account-containers-template.mjs.map +1 -1
  84. package/fesm2022/keycloakify-angular-account-directives-kc-class.mjs +3 -3
  85. package/fesm2022/keycloakify-angular-account-pages-account.mjs +7 -6
  86. package/fesm2022/keycloakify-angular-account-pages-account.mjs.map +1 -1
  87. package/fesm2022/keycloakify-angular-account-pages-applications.mjs +7 -6
  88. package/fesm2022/keycloakify-angular-account-pages-applications.mjs.map +1 -1
  89. package/fesm2022/keycloakify-angular-account-pages-federatedIdentity.mjs +7 -6
  90. package/fesm2022/keycloakify-angular-account-pages-federatedIdentity.mjs.map +1 -1
  91. package/fesm2022/keycloakify-angular-account-pages-log.mjs +7 -6
  92. package/fesm2022/keycloakify-angular-account-pages-log.mjs.map +1 -1
  93. package/fesm2022/keycloakify-angular-account-pages-password.mjs +8 -6
  94. package/fesm2022/keycloakify-angular-account-pages-password.mjs.map +1 -1
  95. package/fesm2022/keycloakify-angular-account-pages-sessions.mjs +7 -6
  96. package/fesm2022/keycloakify-angular-account-pages-sessions.mjs.map +1 -1
  97. package/fesm2022/keycloakify-angular-account-pages-totp.mjs +7 -6
  98. package/fesm2022/keycloakify-angular-account-pages-totp.mjs.map +1 -1
  99. package/fesm2022/keycloakify-angular-account-providers-keycloakify-angular.mjs +1 -0
  100. package/fesm2022/keycloakify-angular-account-providers-keycloakify-angular.mjs.map +1 -1
  101. package/fesm2022/keycloakify-angular-account-services-account-resource-injector.mjs +3 -3
  102. package/fesm2022/keycloakify-angular-account-services-i18n.mjs +3 -3
  103. package/fesm2022/keycloakify-angular-lib-directives-attributes.mjs +3 -3
  104. package/fesm2022/keycloakify-angular-lib-pipes-input-type.mjs +3 -3
  105. package/fesm2022/keycloakify-angular-lib-pipes-is-array-with-empty-object.mjs +3 -3
  106. package/fesm2022/keycloakify-angular-lib-pipes-kc-sanitize.mjs +3 -3
  107. package/fesm2022/keycloakify-angular-lib-pipes-to-array.mjs +3 -3
  108. package/fesm2022/keycloakify-angular-lib-pipes-to-number.mjs +3 -3
  109. package/fesm2022/keycloakify-angular-lib-services-resource-injector.mjs +3 -3
  110. package/fesm2022/keycloakify-angular-login-components-add-remove-buttons-multi-valued-attribute.mjs +4 -4
  111. package/fesm2022/keycloakify-angular-login-components-add-remove-buttons-multi-valued-attribute.mjs.map +1 -1
  112. package/fesm2022/keycloakify-angular-login-components-field-errors.mjs +5 -5
  113. package/fesm2022/keycloakify-angular-login-components-field-errors.mjs.map +1 -1
  114. package/fesm2022/keycloakify-angular-login-components-group-label.mjs +3 -3
  115. package/fesm2022/keycloakify-angular-login-components-input-field-by-type.mjs +5 -5
  116. package/fesm2022/keycloakify-angular-login-components-input-field-by-type.mjs.map +1 -1
  117. package/fesm2022/keycloakify-angular-login-components-input-tag-selects.mjs +3 -3
  118. package/fesm2022/keycloakify-angular-login-components-input-tag.mjs +5 -5
  119. package/fesm2022/keycloakify-angular-login-components-input-tag.mjs.map +1 -1
  120. package/fesm2022/keycloakify-angular-login-components-logout-other-sessions.mjs +3 -3
  121. package/fesm2022/keycloakify-angular-login-components-password-wrapper.mjs +5 -5
  122. package/fesm2022/keycloakify-angular-login-components-password-wrapper.mjs.map +1 -1
  123. package/fesm2022/keycloakify-angular-login-components-select-tag.mjs +3 -3
  124. package/fesm2022/keycloakify-angular-login-components-textarea-tag.mjs +3 -3
  125. package/fesm2022/keycloakify-angular-login-components-user-profile-form-fields.mjs +5 -5
  126. package/fesm2022/keycloakify-angular-login-components-user-profile-form-fields.mjs.map +1 -1
  127. package/fesm2022/keycloakify-angular-login-containers-template.mjs +83 -15
  128. package/fesm2022/keycloakify-angular-login-containers-template.mjs.map +1 -1
  129. package/fesm2022/keycloakify-angular-login-directives-kc-class.mjs +4 -4
  130. package/fesm2022/keycloakify-angular-login-directives-kc-class.mjs.map +1 -1
  131. package/fesm2022/keycloakify-angular-login-pages-code.mjs +15 -9
  132. package/fesm2022/keycloakify-angular-login-pages-code.mjs.map +1 -1
  133. package/fesm2022/keycloakify-angular-login-pages-delete-account-confirm.mjs +13 -7
  134. package/fesm2022/keycloakify-angular-login-pages-delete-account-confirm.mjs.map +1 -1
  135. package/fesm2022/keycloakify-angular-login-pages-delete-credential.mjs +11 -10
  136. package/fesm2022/keycloakify-angular-login-pages-delete-credential.mjs.map +1 -1
  137. package/fesm2022/keycloakify-angular-login-pages-error.mjs +15 -9
  138. package/fesm2022/keycloakify-angular-login-pages-error.mjs.map +1 -1
  139. package/fesm2022/keycloakify-angular-login-pages-frontchannel-logout.mjs +13 -11
  140. package/fesm2022/keycloakify-angular-login-pages-frontchannel-logout.mjs.map +1 -1
  141. package/fesm2022/keycloakify-angular-login-pages-idp-review-user-profile.mjs +13 -12
  142. package/fesm2022/keycloakify-angular-login-pages-idp-review-user-profile.mjs.map +1 -1
  143. package/fesm2022/keycloakify-angular-login-pages-info.mjs +12 -11
  144. package/fesm2022/keycloakify-angular-login-pages-info.mjs.map +1 -1
  145. package/fesm2022/keycloakify-angular-login-pages-login-config-totp.mjs +13 -12
  146. package/fesm2022/keycloakify-angular-login-pages-login-config-totp.mjs.map +1 -1
  147. package/fesm2022/keycloakify-angular-login-pages-login-idp-link-confirm-override.mjs +12 -15
  148. package/fesm2022/keycloakify-angular-login-pages-login-idp-link-confirm-override.mjs.map +1 -1
  149. package/fesm2022/keycloakify-angular-login-pages-login-idp-link-confirm.mjs +12 -15
  150. package/fesm2022/keycloakify-angular-login-pages-login-idp-link-confirm.mjs.map +1 -1
  151. package/fesm2022/keycloakify-angular-login-pages-login-idp-link-email.mjs +11 -14
  152. package/fesm2022/keycloakify-angular-login-pages-login-idp-link-email.mjs.map +1 -1
  153. package/fesm2022/keycloakify-angular-login-pages-login-oauth-grant.mjs +12 -14
  154. package/fesm2022/keycloakify-angular-login-pages-login-oauth-grant.mjs.map +1 -1
  155. package/fesm2022/keycloakify-angular-login-pages-login-oauth2-device-verify-user-code.mjs +11 -10
  156. package/fesm2022/keycloakify-angular-login-pages-login-oauth2-device-verify-user-code.mjs.map +1 -1
  157. package/fesm2022/keycloakify-angular-login-pages-login-otp.mjs +12 -11
  158. package/fesm2022/keycloakify-angular-login-pages-login-otp.mjs.map +1 -1
  159. package/fesm2022/keycloakify-angular-login-pages-login-page-expired.mjs +11 -10
  160. package/fesm2022/keycloakify-angular-login-pages-login-page-expired.mjs.map +1 -1
  161. package/fesm2022/keycloakify-angular-login-pages-login-passkeys-conditional-authenticate.mjs +12 -7
  162. package/fesm2022/keycloakify-angular-login-pages-login-passkeys-conditional-authenticate.mjs.map +1 -1
  163. package/fesm2022/keycloakify-angular-login-pages-login-password.mjs +14 -12
  164. package/fesm2022/keycloakify-angular-login-pages-login-password.mjs.map +1 -1
  165. package/fesm2022/keycloakify-angular-login-pages-login-recovery-authn-code-config.mjs +13 -12
  166. package/fesm2022/keycloakify-angular-login-pages-login-recovery-authn-code-config.mjs.map +1 -1
  167. package/fesm2022/keycloakify-angular-login-pages-login-recovery-authn-code-input.mjs +13 -12
  168. package/fesm2022/keycloakify-angular-login-pages-login-recovery-authn-code-input.mjs.map +1 -1
  169. package/fesm2022/keycloakify-angular-login-pages-login-reset-otp.mjs +12 -11
  170. package/fesm2022/keycloakify-angular-login-pages-login-reset-otp.mjs.map +1 -1
  171. package/fesm2022/keycloakify-angular-login-pages-login-reset-password.mjs +12 -11
  172. package/fesm2022/keycloakify-angular-login-pages-login-reset-password.mjs.map +1 -1
  173. package/fesm2022/keycloakify-angular-login-pages-login-update-password.mjs +12 -11
  174. package/fesm2022/keycloakify-angular-login-pages-login-update-password.mjs.map +1 -1
  175. package/fesm2022/keycloakify-angular-login-pages-login-update-profile.mjs +12 -11
  176. package/fesm2022/keycloakify-angular-login-pages-login-update-profile.mjs.map +1 -1
  177. package/fesm2022/keycloakify-angular-login-pages-login-username.mjs +13 -12
  178. package/fesm2022/keycloakify-angular-login-pages-login-username.mjs.map +1 -1
  179. package/fesm2022/keycloakify-angular-login-pages-login-verify-email.mjs +11 -10
  180. package/fesm2022/keycloakify-angular-login-pages-login-verify-email.mjs.map +1 -1
  181. package/fesm2022/keycloakify-angular-login-pages-login-x509-info.mjs +11 -10
  182. package/fesm2022/keycloakify-angular-login-pages-login-x509-info.mjs.map +1 -1
  183. package/fesm2022/keycloakify-angular-login-pages-login.mjs +14 -13
  184. package/fesm2022/keycloakify-angular-login-pages-login.mjs.map +1 -1
  185. package/fesm2022/keycloakify-angular-login-pages-logout-confirm.mjs +11 -14
  186. package/fesm2022/keycloakify-angular-login-pages-logout-confirm.mjs.map +1 -1
  187. package/fesm2022/keycloakify-angular-login-pages-register.mjs +15 -14
  188. package/fesm2022/keycloakify-angular-login-pages-register.mjs.map +1 -1
  189. package/fesm2022/keycloakify-angular-login-pages-saml-post-form.mjs +15 -16
  190. package/fesm2022/keycloakify-angular-login-pages-saml-post-form.mjs.map +1 -1
  191. package/fesm2022/keycloakify-angular-login-pages-select-authenticator.mjs +12 -11
  192. package/fesm2022/keycloakify-angular-login-pages-select-authenticator.mjs.map +1 -1
  193. package/fesm2022/keycloakify-angular-login-pages-terms.mjs +11 -10
  194. package/fesm2022/keycloakify-angular-login-pages-terms.mjs.map +1 -1
  195. package/fesm2022/keycloakify-angular-login-pages-update-email.mjs +13 -16
  196. package/fesm2022/keycloakify-angular-login-pages-update-email.mjs.map +1 -1
  197. package/fesm2022/keycloakify-angular-login-pages-webauthn-authenticate.mjs +11 -10
  198. package/fesm2022/keycloakify-angular-login-pages-webauthn-authenticate.mjs.map +1 -1
  199. package/fesm2022/keycloakify-angular-login-pages-webauthn-error.mjs +12 -11
  200. package/fesm2022/keycloakify-angular-login-pages-webauthn-error.mjs.map +1 -1
  201. package/fesm2022/keycloakify-angular-login-pages-webauthn-register.mjs +11 -10
  202. package/fesm2022/keycloakify-angular-login-pages-webauthn-register.mjs.map +1 -1
  203. package/fesm2022/keycloakify-angular-login-providers-keycloakify-angular.mjs +1 -0
  204. package/fesm2022/keycloakify-angular-login-providers-keycloakify-angular.mjs.map +1 -1
  205. package/fesm2022/keycloakify-angular-login-services-i18n.mjs +3 -3
  206. package/fesm2022/keycloakify-angular-login-services-login-resource-injector.mjs +3 -3
  207. package/fesm2022/keycloakify-angular-login-services-submit.mjs +3 -3
  208. package/fesm2022/keycloakify-angular-login-services-submit.mjs.map +1 -1
  209. package/fesm2022/keycloakify-angular-login-services-user-profile-form.mjs +3 -3
  210. package/login/containers/template/template.component.d.ts +25 -9
  211. package/login/directives/kc-class/kc-class.directive.d.ts +1 -1
  212. package/login/pages/code/code.component.d.ts +12 -3
  213. package/login/pages/delete-account-confirm/delete-account-confirm.component.d.ts +11 -2
  214. package/login/pages/delete-credential/delete-credential.component.d.ts +9 -5
  215. package/login/pages/error/error.component.d.ts +11 -2
  216. package/login/pages/frontchannel-logout/frontchannel-logout.component.d.ts +9 -5
  217. package/login/pages/idp-review-user-profile/idp-review-user-profile.component.d.ts +10 -7
  218. package/login/pages/info/info.component.d.ts +9 -5
  219. package/login/pages/login/login.component.d.ts +10 -6
  220. package/login/pages/login-config-totp/login-config-totp.component.d.ts +9 -5
  221. package/login/pages/login-idp-link-confirm/login-idp-link-confirm.component.d.ts +8 -7
  222. package/login/pages/login-idp-link-confirm-override/login-idp-link-confirm-override.component.d.ts +8 -7
  223. package/login/pages/login-idp-link-email/login-idp-link-email.component.d.ts +8 -7
  224. package/login/pages/login-oauth-grant/login-oauth-grant.component.d.ts +8 -7
  225. package/login/pages/login-oauth2-device-verify-user-code/login-oauth2-device-verify-user-code.component.d.ts +9 -5
  226. package/login/pages/login-otp/login-otp.component.d.ts +9 -5
  227. package/login/pages/login-page-expired/login-page-expired.component.d.ts +9 -5
  228. package/login/pages/login-passkeys-conditional-authenticate/login-passkeys-conditional-authenticate.component.d.ts +11 -3
  229. package/login/pages/login-password/login-password.component.d.ts +10 -5
  230. package/login/pages/login-recovery-authn-code-config/login-recovery-authn-code-config.component.d.ts +9 -5
  231. package/login/pages/login-recovery-authn-code-input/login-recovery-authn-code-input.component.d.ts +9 -5
  232. package/login/pages/login-reset-otp/login-reset-otp.component.d.ts +9 -5
  233. package/login/pages/login-reset-password/login-reset-password.component.d.ts +9 -5
  234. package/login/pages/login-update-password/login-update-password.component.d.ts +9 -5
  235. package/login/pages/login-update-profile/login-update-profile.component.d.ts +9 -6
  236. package/login/pages/login-username/login-username.component.d.ts +10 -6
  237. package/login/pages/login-verify-email/login-verify-email.component.d.ts +9 -5
  238. package/login/pages/login-x509-info/login-x509-info.component.d.ts +9 -5
  239. package/login/pages/logout-confirm/logout-confirm.component.d.ts +8 -7
  240. package/login/pages/register/register.component.d.ts +11 -8
  241. package/login/pages/saml-post-form/saml-post-form.component.d.ts +10 -7
  242. package/login/pages/select-authenticator/select-authenticator.component.d.ts +9 -5
  243. package/login/pages/terms/terms.component.d.ts +9 -5
  244. package/login/pages/update-email/update-email.component.d.ts +9 -9
  245. package/login/pages/webauthn-authenticate/webauthn-authenticate.component.d.ts +10 -6
  246. package/login/pages/webauthn-error/webauthn-error.component.d.ts +9 -5
  247. package/login/pages/webauthn-register/webauthn-register.component.d.ts +10 -6
  248. package/package.json +8 -8
  249. package/src/account/containers/template/template.component.html +16 -11
  250. package/src/account/containers/template/template.component.ts +54 -7
  251. package/src/account/pages/account/account.component.html +139 -143
  252. package/src/account/pages/account/account.component.ts +4 -3
  253. package/src/account/pages/applications/applications.component.html +128 -136
  254. package/src/account/pages/applications/applications.component.ts +4 -3
  255. package/src/account/pages/federatedIdentity/federatedIdentity.component.html +84 -88
  256. package/src/account/pages/federatedIdentity/federatedIdentity.component.ts +4 -3
  257. package/src/account/pages/log/log.component.html +35 -39
  258. package/src/account/pages/log/log.component.ts +4 -3
  259. package/src/account/pages/password/password.component.html +109 -113
  260. package/src/account/pages/password/password.component.ts +6 -3
  261. package/src/account/pages/sessions/sessions.component.html +52 -56
  262. package/src/account/pages/sessions/sessions.component.ts +4 -3
  263. package/src/account/pages/totp/totp.component.html +234 -238
  264. package/src/account/pages/totp/totp.component.ts +4 -3
  265. package/src/account/providers/keycloakify-angular/keycloakify-angular.providers.ts +1 -0
  266. package/src/login/components/add-remove-buttons-multi-valued-attribute/add-remove-buttons-multi-valued-attribute.component.html +2 -2
  267. package/src/login/components/field-errors/field-errors.component.html +1 -1
  268. package/src/login/components/input-field-by-type/input-field-by-type.component.html +6 -6
  269. package/src/login/components/input-tag/input-tag.component.html +2 -2
  270. package/src/login/components/password-wrapper/password-wrapper.component.html +2 -2
  271. package/src/login/components/user-profile-form-fields/user-profile-form-fields.component.html +7 -11
  272. package/src/login/containers/template/template.component.html +29 -15
  273. package/src/login/containers/template/template.component.ts +100 -12
  274. package/src/login/directives/kc-class/kc-class.directive.ts +1 -2
  275. package/src/login/pages/code/code.component.html +19 -23
  276. package/src/login/pages/code/code.component.ts +18 -6
  277. package/src/login/pages/delete-account-confirm/delete-account-confirm.component.html +41 -45
  278. package/src/login/pages/delete-account-confirm/delete-account-confirm.component.ts +16 -4
  279. package/src/login/pages/delete-credential/delete-credential.component.html +29 -31
  280. package/src/login/pages/delete-credential/delete-credential.component.ts +16 -9
  281. package/src/login/pages/error/error.component.html +20 -22
  282. package/src/login/pages/error/error.component.ts +17 -5
  283. package/src/login/pages/frontchannel-logout/frontchannel-logout.component.html +25 -34
  284. package/src/login/pages/frontchannel-logout/frontchannel-logout.component.ts +17 -9
  285. package/src/login/pages/idp-review-user-profile/idp-review-user-profile.component.html +29 -38
  286. package/src/login/pages/idp-review-user-profile/idp-review-user-profile.component.ts +18 -12
  287. package/src/login/pages/info/info.component.html +39 -48
  288. package/src/login/pages/info/info.component.ts +17 -10
  289. package/src/login/pages/login/login.component.html +184 -194
  290. package/src/login/pages/login/login.component.ts +20 -12
  291. package/src/login/pages/login-config-totp/login-config-totp.component.html +181 -190
  292. package/src/login/pages/login-config-totp/login-config-totp.component.ts +16 -10
  293. package/src/login/pages/login-idp-link-confirm/login-idp-link-confirm.component.html +27 -37
  294. package/src/login/pages/login-idp-link-confirm/login-idp-link-confirm.component.ts +15 -14
  295. package/src/login/pages/login-idp-link-confirm-override/login-idp-link-confirm-override.component.html +26 -36
  296. package/src/login/pages/login-idp-link-confirm-override/login-idp-link-confirm-override.component.ts +15 -14
  297. package/src/login/pages/login-idp-link-email/login-idp-link-email.component.html +24 -34
  298. package/src/login/pages/login-idp-link-email/login-idp-link-email.component.ts +15 -14
  299. package/src/login/pages/login-oauth-grant/login-oauth-grant.component.html +75 -84
  300. package/src/login/pages/login-oauth-grant/login-oauth-grant.component.ts +15 -14
  301. package/src/login/pages/login-oauth2-device-verify-user-code/login-oauth2-device-verify-user-code.component.html +49 -58
  302. package/src/login/pages/login-oauth2-device-verify-user-code/login-oauth2-device-verify-user-code.component.ts +15 -9
  303. package/src/login/pages/login-otp/login-otp.component.html +89 -98
  304. package/src/login/pages/login-otp/login-otp.component.ts +16 -9
  305. package/src/login/pages/login-page-expired/login-page-expired.component.html +26 -33
  306. package/src/login/pages/login-page-expired/login-page-expired.component.ts +15 -9
  307. package/src/login/pages/login-passkeys-conditional-authenticate/login-passkeys-conditional-authenticate.component.html +181 -188
  308. package/src/login/pages/login-passkeys-conditional-authenticate/login-passkeys-conditional-authenticate.component.ts +15 -5
  309. package/src/login/pages/login-password/login-password.component.html +73 -80
  310. package/src/login/pages/login-password/login-password.component.ts +17 -9
  311. package/src/login/pages/login-recovery-authn-code-config/login-recovery-authn-code-config.component.html +136 -145
  312. package/src/login/pages/login-recovery-authn-code-config/login-recovery-authn-code-config.component.ts +17 -9
  313. package/src/login/pages/login-recovery-authn-code-input/login-recovery-authn-code-input.component.html +60 -68
  314. package/src/login/pages/login-recovery-authn-code-input/login-recovery-authn-code-input.component.ts +16 -9
  315. package/src/login/pages/login-reset-otp/login-reset-otp.component.html +53 -60
  316. package/src/login/pages/login-reset-otp/login-reset-otp.component.ts +15 -8
  317. package/src/login/pages/login-reset-password/login-reset-password.component.html +77 -86
  318. package/src/login/pages/login-reset-password/login-reset-password.component.ts +16 -9
  319. package/src/login/pages/login-update-password/login-update-password.component.html +98 -108
  320. package/src/login/pages/login-update-password/login-update-password.component.ts +15 -8
  321. package/src/login/pages/login-update-profile/login-update-profile.component.html +44 -53
  322. package/src/login/pages/login-update-profile/login-update-profile.component.ts +17 -10
  323. package/src/login/pages/login-username/login-username.component.html +138 -148
  324. package/src/login/pages/login-username/login-username.component.ts +16 -9
  325. package/src/login/pages/login-verify-email/login-verify-email.component.html +17 -25
  326. package/src/login/pages/login-verify-email/login-verify-email.component.ts +15 -9
  327. package/src/login/pages/login-x509-info/login-x509-info.component.html +85 -94
  328. package/src/login/pages/login-x509-info/login-x509-info.component.ts +15 -9
  329. package/src/login/pages/logout-confirm/logout-confirm.component.html +39 -49
  330. package/src/login/pages/logout-confirm/logout-confirm.component.ts +15 -14
  331. package/src/login/pages/register/register.component.html +100 -110
  332. package/src/login/pages/register/register.component.ts +19 -12
  333. package/src/login/pages/saml-post-form/saml-post-form.component.html +39 -48
  334. package/src/login/pages/saml-post-form/saml-post-form.component.ts +19 -13
  335. package/src/login/pages/select-authenticator/select-authenticator.component.html +36 -44
  336. package/src/login/pages/select-authenticator/select-authenticator.component.ts +16 -9
  337. package/src/login/pages/terms/terms.component.html +25 -34
  338. package/src/login/pages/terms/terms.component.ts +16 -9
  339. package/src/login/pages/update-email/update-email.component.html +44 -53
  340. package/src/login/pages/update-email/update-email.component.ts +16 -15
  341. package/src/login/pages/webauthn-authenticate/webauthn-authenticate.component.html +134 -145
  342. package/src/login/pages/webauthn-authenticate/webauthn-authenticate.component.ts +16 -9
  343. package/src/login/pages/webauthn-error/webauthn-error.component.html +45 -55
  344. package/src/login/pages/webauthn-error/webauthn-error.component.ts +16 -9
  345. package/src/login/pages/webauthn-register/webauthn-register.component.html +65 -75
  346. package/src/login/pages/webauthn-register/webauthn-register.component.ts +16 -9
  347. package/src/login/providers/keycloakify-angular/keycloakify-angular.providers.ts +1 -0
  348. package/src/login/services/submit/submit.service.ts +1 -1
  349. package/src/tsconfig.lib.json +0 -12
  350. package/src/tsconfig.lib.prod.json +0 -10
@@ -34,16 +34,16 @@ export class UserProfileFormFieldsComponent extends ComponentReference {
34
34
  onDispatch(formAction) {
35
35
  this.userProfileFormService.dispatchFormAction(formAction);
36
36
  }
37
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: UserProfileFormFieldsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
38
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.6", type: UserProfileFormFieldsComponent, isStandalone: true, selector: "kc-user-profile-form-fields", outputs: { onIsFormSubmittable: "onIsFormSubmittable" }, providers: [
37
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: UserProfileFormFieldsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
38
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: UserProfileFormFieldsComponent, isStandalone: true, selector: "kc-user-profile-form-fields", outputs: { onIsFormSubmittable: "onIsFormSubmittable" }, providers: [
39
39
  UserProfileFormService,
40
40
  {
41
41
  provide: ComponentReference,
42
42
  useExisting: forwardRef(() => UserProfileFormFieldsComponent)
43
43
  }
44
- ], queries: [{ propertyName: "beforeField", first: true, predicate: ["beforField"], descendants: true }, { propertyName: "afterField", first: true, predicate: ["afterField"], descendants: true }], usesInheritance: true, ngImport: i0, template: "@let formFieldStates = formState().formFieldStates;\n\n@for (fieldState of formFieldStates; track fieldState.attribute) {\n <kc-group-label [attribute]=\"fieldState.attribute\"> </kc-group-label>\n\n @if (beforeField) {\n <ng-container\n [ngTemplateOutlet]=\"beforeField\"\n [ngTemplateOutletContext]=\"{\n attribute: fieldState.attribute,\n valueOrValues: fieldState.valueOrValues,\n displayableErrors: fieldState.displayableErrors\n }\"\n >\n </ng-container>\n }\n\n <div\n [kcClass]=\"'kcFormGroupClass'\"\n [style.display]=\"fieldState.attribute.name === 'password-confirm' && !doMakeUserConfirmPassword ? 'none' : 'block'\"\n >\n <div [kcClass]=\"'kcLabelWrapperClass'\">\n <label\n [for]=\"fieldState.attribute.name\"\n [kcClass]=\"'kcLabelClass'\"\n >\n {{ i18n.advancedMsgStr(fieldState.attribute.displayName ?? '') }}\n @if (fieldState.attribute.required) {\n *\n }\n </label>\n </div>\n\n <div [kcClass]=\"'kcInputWrapperClass'\">\n @if (fieldState.attribute.annotations.inputHelperTextBefore) {\n <div\n [kcClass]=\"'kcInputHelperTextBeforeClass'\"\n [id]=\"'form-help-text-before-' + fieldState.attribute.name\"\n aria-live=\"polite\"\n >\n {{ i18n.advancedMsgStr(fieldState.attribute.annotations.inputHelperTextBefore) }}\n </div>\n }\n\n <kc-input-field-by-type\n [attribute]=\"fieldState.attribute\"\n [valueOrValues]=\"fieldState.valueOrValues\"\n [displayableErrors]=\"fieldState.displayableErrors\"\n (dispatchFormAction)=\"onDispatch($event)\"\n >\n </kc-input-field-by-type>\n\n <kc-field-errors\n [attribute]=\"fieldState.attribute\"\n [displayableErrors]=\"fieldState.displayableErrors\"\n >\n </kc-field-errors>\n @if (fieldState.attribute.annotations.inputHelperTextAfter) {\n <div\n [kcClass]=\"'kcInputHelperTextAfterClass'\"\n [id]=\"'form-help-text-after-' + fieldState.attribute.name\"\n aria-live=\"polite\"\n >\n {{ i18n.advancedMsgStr(fieldState.attribute.annotations.inputHelperTextAfter) }}\n </div>\n }\n\n @if (afterField) {\n <ng-container\n [ngTemplateOutlet]=\"afterField\"\n [ngTemplateOutletContext]=\"{\n attribute: fieldState.attribute,\n valueOrValues: fieldState.valueOrValues,\n displayableErrors: fieldState.displayableErrors\n }\"\n >\n </ng-container>\n }\n <!-- NOTE: Downloading of html5DataAnnotations scripts is done in the useUserProfileForm hook -->\n </div>\n </div>\n}\n", styles: [":host{display:contents}\n"], dependencies: [{ kind: "directive", type: KcClassDirective, selector: "[kcClass]", inputs: ["class", "ngClass", "kcClass"] }, { kind: "component", type: FieldErrorsComponent, selector: "kc-field-errors", inputs: ["attribute", "displayableErrors", "fieldIndex"] }, { kind: "component", type: InputFieldByTypeComponent, selector: "kc-input-field-by-type", inputs: ["attribute", "valueOrValues", "displayableErrors"], outputs: ["dispatchFormAction"] }, { kind: "component", type: GroupLabelComponent, selector: "kc-group-label", inputs: ["attribute", "groupName"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
44
+ ], queries: [{ propertyName: "beforeField", first: true, predicate: ["beforField"], descendants: true }, { propertyName: "afterField", first: true, predicate: ["afterField"], descendants: true }], usesInheritance: true, ngImport: i0, template: "@let formFieldStates = formState().formFieldStates;\n\n@for (fieldState of formFieldStates; track fieldState.attribute) {\n <kc-group-label [attribute]=\"fieldState.attribute\" />\n\n @if (beforeField) {\n <ng-container\n [ngTemplateOutlet]=\"beforeField\"\n [ngTemplateOutletContext]=\"{\n attribute: fieldState.attribute,\n valueOrValues: fieldState.valueOrValues,\n displayableErrors: fieldState.displayableErrors\n }\"\n />\n }\n\n <div\n [kcClass]=\"'kcFormGroupClass'\"\n [style.display]=\"fieldState.attribute.name === 'password-confirm' && !doMakeUserConfirmPassword ? 'none' : 'block'\"\n >\n <div [kcClass]=\"'kcLabelWrapperClass'\">\n <label\n [for]=\"fieldState.attribute.name\"\n [kcClass]=\"'kcLabelClass'\"\n >\n {{ i18n.advancedMsgStr(fieldState.attribute.displayName ?? '') }}\n @if (fieldState.attribute.required) {\n *\n }\n </label>\n </div>\n\n <div [kcClass]=\"'kcInputWrapperClass'\">\n @if (fieldState.attribute.annotations.inputHelperTextBefore) {\n <div\n aria-live=\"polite\"\n [kcClass]=\"'kcInputHelperTextBeforeClass'\"\n [id]=\"'form-help-text-before-' + fieldState.attribute.name\"\n >\n {{ i18n.advancedMsgStr(fieldState.attribute.annotations.inputHelperTextBefore) }}\n </div>\n }\n\n <kc-input-field-by-type\n [attribute]=\"fieldState.attribute\"\n [valueOrValues]=\"fieldState.valueOrValues\"\n [displayableErrors]=\"fieldState.displayableErrors\"\n (dispatchFormAction)=\"onDispatch($event)\"\n />\n\n <kc-field-errors\n [attribute]=\"fieldState.attribute\"\n [displayableErrors]=\"fieldState.displayableErrors\"\n />\n @if (fieldState.attribute.annotations.inputHelperTextAfter) {\n <div\n aria-live=\"polite\"\n [kcClass]=\"'kcInputHelperTextAfterClass'\"\n [id]=\"'form-help-text-after-' + fieldState.attribute.name\"\n >\n {{ i18n.advancedMsgStr(fieldState.attribute.annotations.inputHelperTextAfter) }}\n </div>\n }\n\n @if (afterField) {\n <ng-container\n [ngTemplateOutlet]=\"afterField\"\n [ngTemplateOutletContext]=\"{\n attribute: fieldState.attribute,\n valueOrValues: fieldState.valueOrValues,\n displayableErrors: fieldState.displayableErrors\n }\"\n />\n }\n <!-- NOTE: Downloading of html5DataAnnotations scripts is done in the useUserProfileForm hook -->\n </div>\n </div>\n}\n", styles: [":host{display:contents}\n"], dependencies: [{ kind: "directive", type: KcClassDirective, selector: "[kcClass]", inputs: ["class", "ngClass", "kcClass"] }, { kind: "component", type: FieldErrorsComponent, selector: "kc-field-errors", inputs: ["attribute", "displayableErrors", "fieldIndex"] }, { kind: "component", type: InputFieldByTypeComponent, selector: "kc-input-field-by-type", inputs: ["attribute", "valueOrValues", "displayableErrors"], outputs: ["dispatchFormAction"] }, { kind: "component", type: GroupLabelComponent, selector: "kc-group-label", inputs: ["attribute", "groupName"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
45
45
  }
46
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: UserProfileFormFieldsComponent, decorators: [{
46
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: UserProfileFormFieldsComponent, decorators: [{
47
47
  type: Component,
48
48
  args: [{ standalone: true, imports: [KcClassDirective, FieldErrorsComponent, InputFieldByTypeComponent, GroupLabelComponent, NgTemplateOutlet], selector: 'kc-user-profile-form-fields', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
49
49
  UserProfileFormService,
@@ -51,7 +51,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImpor
51
51
  provide: ComponentReference,
52
52
  useExisting: forwardRef(() => UserProfileFormFieldsComponent)
53
53
  }
54
- ], template: "@let formFieldStates = formState().formFieldStates;\n\n@for (fieldState of formFieldStates; track fieldState.attribute) {\n <kc-group-label [attribute]=\"fieldState.attribute\"> </kc-group-label>\n\n @if (beforeField) {\n <ng-container\n [ngTemplateOutlet]=\"beforeField\"\n [ngTemplateOutletContext]=\"{\n attribute: fieldState.attribute,\n valueOrValues: fieldState.valueOrValues,\n displayableErrors: fieldState.displayableErrors\n }\"\n >\n </ng-container>\n }\n\n <div\n [kcClass]=\"'kcFormGroupClass'\"\n [style.display]=\"fieldState.attribute.name === 'password-confirm' && !doMakeUserConfirmPassword ? 'none' : 'block'\"\n >\n <div [kcClass]=\"'kcLabelWrapperClass'\">\n <label\n [for]=\"fieldState.attribute.name\"\n [kcClass]=\"'kcLabelClass'\"\n >\n {{ i18n.advancedMsgStr(fieldState.attribute.displayName ?? '') }}\n @if (fieldState.attribute.required) {\n *\n }\n </label>\n </div>\n\n <div [kcClass]=\"'kcInputWrapperClass'\">\n @if (fieldState.attribute.annotations.inputHelperTextBefore) {\n <div\n [kcClass]=\"'kcInputHelperTextBeforeClass'\"\n [id]=\"'form-help-text-before-' + fieldState.attribute.name\"\n aria-live=\"polite\"\n >\n {{ i18n.advancedMsgStr(fieldState.attribute.annotations.inputHelperTextBefore) }}\n </div>\n }\n\n <kc-input-field-by-type\n [attribute]=\"fieldState.attribute\"\n [valueOrValues]=\"fieldState.valueOrValues\"\n [displayableErrors]=\"fieldState.displayableErrors\"\n (dispatchFormAction)=\"onDispatch($event)\"\n >\n </kc-input-field-by-type>\n\n <kc-field-errors\n [attribute]=\"fieldState.attribute\"\n [displayableErrors]=\"fieldState.displayableErrors\"\n >\n </kc-field-errors>\n @if (fieldState.attribute.annotations.inputHelperTextAfter) {\n <div\n [kcClass]=\"'kcInputHelperTextAfterClass'\"\n [id]=\"'form-help-text-after-' + fieldState.attribute.name\"\n aria-live=\"polite\"\n >\n {{ i18n.advancedMsgStr(fieldState.attribute.annotations.inputHelperTextAfter) }}\n </div>\n }\n\n @if (afterField) {\n <ng-container\n [ngTemplateOutlet]=\"afterField\"\n [ngTemplateOutletContext]=\"{\n attribute: fieldState.attribute,\n valueOrValues: fieldState.valueOrValues,\n displayableErrors: fieldState.displayableErrors\n }\"\n >\n </ng-container>\n }\n <!-- NOTE: Downloading of html5DataAnnotations scripts is done in the useUserProfileForm hook -->\n </div>\n </div>\n}\n", styles: [":host{display:contents}\n"] }]
54
+ ], template: "@let formFieldStates = formState().formFieldStates;\n\n@for (fieldState of formFieldStates; track fieldState.attribute) {\n <kc-group-label [attribute]=\"fieldState.attribute\" />\n\n @if (beforeField) {\n <ng-container\n [ngTemplateOutlet]=\"beforeField\"\n [ngTemplateOutletContext]=\"{\n attribute: fieldState.attribute,\n valueOrValues: fieldState.valueOrValues,\n displayableErrors: fieldState.displayableErrors\n }\"\n />\n }\n\n <div\n [kcClass]=\"'kcFormGroupClass'\"\n [style.display]=\"fieldState.attribute.name === 'password-confirm' && !doMakeUserConfirmPassword ? 'none' : 'block'\"\n >\n <div [kcClass]=\"'kcLabelWrapperClass'\">\n <label\n [for]=\"fieldState.attribute.name\"\n [kcClass]=\"'kcLabelClass'\"\n >\n {{ i18n.advancedMsgStr(fieldState.attribute.displayName ?? '') }}\n @if (fieldState.attribute.required) {\n *\n }\n </label>\n </div>\n\n <div [kcClass]=\"'kcInputWrapperClass'\">\n @if (fieldState.attribute.annotations.inputHelperTextBefore) {\n <div\n aria-live=\"polite\"\n [kcClass]=\"'kcInputHelperTextBeforeClass'\"\n [id]=\"'form-help-text-before-' + fieldState.attribute.name\"\n >\n {{ i18n.advancedMsgStr(fieldState.attribute.annotations.inputHelperTextBefore) }}\n </div>\n }\n\n <kc-input-field-by-type\n [attribute]=\"fieldState.attribute\"\n [valueOrValues]=\"fieldState.valueOrValues\"\n [displayableErrors]=\"fieldState.displayableErrors\"\n (dispatchFormAction)=\"onDispatch($event)\"\n />\n\n <kc-field-errors\n [attribute]=\"fieldState.attribute\"\n [displayableErrors]=\"fieldState.displayableErrors\"\n />\n @if (fieldState.attribute.annotations.inputHelperTextAfter) {\n <div\n aria-live=\"polite\"\n [kcClass]=\"'kcInputHelperTextAfterClass'\"\n [id]=\"'form-help-text-after-' + fieldState.attribute.name\"\n >\n {{ i18n.advancedMsgStr(fieldState.attribute.annotations.inputHelperTextAfter) }}\n </div>\n }\n\n @if (afterField) {\n <ng-container\n [ngTemplateOutlet]=\"afterField\"\n [ngTemplateOutletContext]=\"{\n attribute: fieldState.attribute,\n valueOrValues: fieldState.valueOrValues,\n displayableErrors: fieldState.displayableErrors\n }\"\n />\n }\n <!-- NOTE: Downloading of html5DataAnnotations scripts is done in the useUserProfileForm hook -->\n </div>\n </div>\n}\n", styles: [":host{display:contents}\n"] }]
55
55
  }], ctorParameters: () => [], propDecorators: { beforeField: [{
56
56
  type: ContentChild,
57
57
  args: ['beforField']
@@ -59,4 +59,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImpor
59
59
  type: ContentChild,
60
60
  args: ['afterField']
61
61
  }] } });
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1wcm9maWxlLWZvcm0tZmllbGRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9sb2dpbi9jb21wb25lbnRzL3VzZXItcHJvZmlsZS1mb3JtLWZpZWxkcy91c2VyLXByb2ZpbGUtZm9ybS1maWVsZHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2xvZ2luL2NvbXBvbmVudHMvdXNlci1wcm9maWxlLWZvcm0tZmllbGRzL3VzZXItcHJvZmlsZS1mb3JtLWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFDbEksT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQzVGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBR2xGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUMzRSxPQUFPLEVBQW1CLHNCQUFzQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDaEgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNoRixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQzs7QUF3QjdHLE1BQU0sT0FBTyw4QkFBK0IsU0FBUSxrQkFBa0I7SUFJbEUsY0FBYyxDQUF5QjtJQVl2QztRQUNJLEtBQUssRUFBRSxDQUFDO1FBaEJaLFNBQUksR0FBRyxNQUFNLENBQU8sVUFBVSxDQUFDLENBQUM7UUFDaEMsY0FBUyxHQUFHLE1BQU0sQ0FBWSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2hELDJCQUFzQixHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3hELG1CQUFjLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3ZDLDhCQUF5QixHQUFHLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQ3pELG9CQUFlLEdBQUcsTUFBTSxDQUFVLGVBQWUsQ0FBQyxDQUFDO1FBQ25ELFlBQU8sR0FBRyxNQUFNLENBQW9DLGFBQWEsQ0FBQyxDQUFDO1FBRTVFLHdCQUFtQixHQUFHLE1BQU0sRUFBVyxDQUFDO1FBRXhDLGNBQVMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDO1FBTzlDLE1BQU0sQ0FDRixHQUFHLEVBQUU7WUFDRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztZQUM3RCxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDNUQsQ0FBQyxFQUNELEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQzlCLENBQUM7SUFDTixDQUFDO0lBRUQsVUFBVSxDQUFDLFVBQXNCO1FBQzdCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMvRCxDQUFDOzhHQTdCUSw4QkFBOEI7a0dBQTlCLDhCQUE4QixtSUFSNUI7WUFDUCxzQkFBc0I7WUFDdEI7Z0JBQ0ksT0FBTyxFQUFFLGtCQUFrQjtnQkFDM0IsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQzthQUNoRTtTQUNKLG1QQ3JDTCw2ckdBa0ZBLG1GRHZEYyxnQkFBZ0IsK0ZBQUUsb0JBQW9CLHNIQUFFLHlCQUF5QixpS0FBRSxtQkFBbUIsK0ZBQUUsZ0JBQWdCOzsyRkFZekcsOEJBQThCO2tCQXJCMUMsU0FBUztpQ0FDTSxJQUFJLFdBUVAsQ0FBQyxnQkFBZ0IsRUFBRSxvQkFBb0IsRUFBRSx5QkFBeUIsRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsQ0FBQyxZQUN6Ryw2QkFBNkIsbUJBRXRCLHVCQUF1QixDQUFDLE1BQU0sYUFDcEM7d0JBQ1Asc0JBQXNCO3dCQUN0Qjs0QkFDSSxPQUFPLEVBQUUsa0JBQWtCOzRCQUMzQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSwrQkFBK0IsQ0FBQzt5QkFDaEU7cUJBQ0o7d0RBZTJCLFdBQVc7c0JBQXRDLFlBQVk7dUJBQUMsWUFBWTtnQkFDRSxVQUFVO3NCQUFyQyxZQUFZO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgZWZmZWN0LCBmb3J3YXJkUmVmLCBpbmplY3QsIG91dHB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVTRV9ERUZBVUxUX0NTUyB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2xpYi90b2tlbnMvdXNlLWRlZmF1bHQtY3NzJztcbmltcG9ydCB7IENvbXBvbmVudFJlZmVyZW5jZSB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2xvZ2luL2NsYXNzZXMvY29tcG9uZW50LXJlZmVyZW5jZSc7XG5pbXBvcnQgeyBGaWVsZEVycm9yc0NvbXBvbmVudCB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2xvZ2luL2NvbXBvbmVudHMvZmllbGQtZXJyb3JzJztcbmltcG9ydCB7IEdyb3VwTGFiZWxDb21wb25lbnQgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9sb2dpbi9jb21wb25lbnRzL2dyb3VwLWxhYmVsJztcbmltcG9ydCB7IElucHV0RmllbGRCeVR5cGVDb21wb25lbnQgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9sb2dpbi9jb21wb25lbnRzL2lucHV0LWZpZWxkLWJ5LXR5cGUnO1xuaW1wb3J0IHsgS2NDbGFzc0RpcmVjdGl2ZSB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2xvZ2luL2RpcmVjdGl2ZXMva2MtY2xhc3MnO1xuaW1wb3J0IHR5cGUgeyBJMThuIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvbG9naW4vaTE4bic7XG5pbXBvcnQgdHlwZSB7IEtjQ29udGV4dCB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2xvZ2luL0tjQ29udGV4dCc7XG5pbXBvcnQgeyBTdWJtaXRTZXJ2aWNlIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvbG9naW4vc2VydmljZXMvc3VibWl0JztcbmltcG9ydCB7IHR5cGUgRm9ybUFjdGlvbiwgVXNlclByb2ZpbGVGb3JtU2VydmljZSB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2xvZ2luL3NlcnZpY2VzL3VzZXItcHJvZmlsZS1mb3JtJztcbmltcG9ydCB7IExPR0lOX0NMQVNTRVMgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9sb2dpbi90b2tlbnMvY2xhc3Nlcyc7XG5pbXBvcnQgeyBMT0dJTl9JMThOIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvbG9naW4vdG9rZW5zL2kxOG4nO1xuaW1wb3J0IHsgS0NfTE9HSU5fQ09OVEVYVCB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2xvZ2luL3Rva2Vucy9rYy1jb250ZXh0JztcbmltcG9ydCB7IERPX01BS0VfVVNFUl9DT05GSVJNX1BBU1NXT1JEIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvbG9naW4vdG9rZW5zL21ha2UtdXNlci1jb25maXJtLXBhc3N3b3JkJztcbmltcG9ydCB0eXBlIHsgQ2xhc3NLZXkgfSBmcm9tICdrZXljbG9ha2lmeS9sb2dpbi9saWIva2NDbHN4JztcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzdHlsZXM6IFtcbiAgICAgICAgYFxuICAgICAgICAgICAgOmhvc3Qge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGNvbnRlbnRzO1xuICAgICAgICAgICAgfVxuICAgICAgICBgXG4gICAgXSxcbiAgICBpbXBvcnRzOiBbS2NDbGFzc0RpcmVjdGl2ZSwgRmllbGRFcnJvcnNDb21wb25lbnQsIElucHV0RmllbGRCeVR5cGVDb21wb25lbnQsIEdyb3VwTGFiZWxDb21wb25lbnQsIE5nVGVtcGxhdGVPdXRsZXRdLFxuICAgIHNlbGVjdG9yOiAna2MtdXNlci1wcm9maWxlLWZvcm0tZmllbGRzJyxcbiAgICB0ZW1wbGF0ZVVybDogJ3VzZXItcHJvZmlsZS1mb3JtLWZpZWxkcy5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIFVzZXJQcm9maWxlRm9ybVNlcnZpY2UsXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IENvbXBvbmVudFJlZmVyZW5jZSxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFVzZXJQcm9maWxlRm9ybUZpZWxkc0NvbXBvbmVudClcbiAgICAgICAgfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgVXNlclByb2ZpbGVGb3JtRmllbGRzQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50UmVmZXJlbmNlIHtcbiAgICBpMThuID0gaW5qZWN0PEkxOG4+KExPR0lOX0kxOE4pO1xuICAgIGtjQ29udGV4dCA9IGluamVjdDxLY0NvbnRleHQ+KEtDX0xPR0lOX0NPTlRFWFQpO1xuICAgIHVzZXJQcm9maWxlRm9ybVNlcnZpY2UgPSBpbmplY3QoVXNlclByb2ZpbGVGb3JtU2VydmljZSk7XG4gICAgI3N1Ym1pdFNlcnZpY2UgPSBpbmplY3QoU3VibWl0U2VydmljZSk7XG4gICAgZG9NYWtlVXNlckNvbmZpcm1QYXNzd29yZCA9IGluamVjdChET19NQUtFX1VTRVJfQ09ORklSTV9QQVNTV09SRCk7XG4gICAgb3ZlcnJpZGUgZG9Vc2VEZWZhdWx0Q3NzID0gaW5qZWN0PGJvb2xlYW4+KFVTRV9ERUZBVUxUX0NTUyk7XG4gICAgb3ZlcnJpZGUgY2xhc3NlcyA9IGluamVjdDxQYXJ0aWFsPFJlY29yZDxDbGFzc0tleSwgc3RyaW5nPj4+KExPR0lOX0NMQVNTRVMpO1xuXG4gICAgb25Jc0Zvcm1TdWJtaXR0YWJsZSA9IG91dHB1dDxib29sZWFuPigpO1xuXG4gICAgZm9ybVN0YXRlID0gdGhpcy51c2VyUHJvZmlsZUZvcm1TZXJ2aWNlLmZvcm1TdGF0ZTtcblxuICAgIEBDb250ZW50Q2hpbGQoJ2JlZm9yRmllbGQnKSBiZWZvcmVGaWVsZDogVGVtcGxhdGVSZWY8dW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgQENvbnRlbnRDaGlsZCgnYWZ0ZXJGaWVsZCcpIGFmdGVyRmllbGQ6IFRlbXBsYXRlUmVmPHVua25vd24+IHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIGVmZmVjdChcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0Zvcm1TdWJtaXR0YWJsZSA9IHRoaXMuZm9ybVN0YXRlKCkuaXNGb3JtU3VibWl0dGFibGU7XG4gICAgICAgICAgICAgICAgdGhpcy4jc3VibWl0U2VydmljZS5zZXRJc1N1Ym1pdHRhYmxlKGlzRm9ybVN1Ym1pdHRhYmxlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBvbkRpc3BhdGNoKGZvcm1BY3Rpb246IEZvcm1BY3Rpb24pIHtcbiAgICAgICAgdGhpcy51c2VyUHJvZmlsZUZvcm1TZXJ2aWNlLmRpc3BhdGNoRm9ybUFjdGlvbihmb3JtQWN0aW9uKTtcbiAgICB9XG59XG4iLCJAbGV0IGZvcm1GaWVsZFN0YXRlcyA9IGZvcm1TdGF0ZSgpLmZvcm1GaWVsZFN0YXRlcztcblxuQGZvciAoZmllbGRTdGF0ZSBvZiBmb3JtRmllbGRTdGF0ZXM7IHRyYWNrIGZpZWxkU3RhdGUuYXR0cmlidXRlKSB7XG4gICAgPGtjLWdyb3VwLWxhYmVsIFthdHRyaWJ1dGVdPVwiZmllbGRTdGF0ZS5hdHRyaWJ1dGVcIj4gPC9rYy1ncm91cC1sYWJlbD5cblxuICAgIEBpZiAoYmVmb3JlRmllbGQpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiYmVmb3JlRmllbGRcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGU6IGZpZWxkU3RhdGUuYXR0cmlidXRlLFxuICAgICAgICAgICAgICAgIHZhbHVlT3JWYWx1ZXM6IGZpZWxkU3RhdGUudmFsdWVPclZhbHVlcyxcbiAgICAgICAgICAgICAgICBkaXNwbGF5YWJsZUVycm9yczogZmllbGRTdGF0ZS5kaXNwbGF5YWJsZUVycm9yc1xuICAgICAgICAgICAgfVwiXG4gICAgICAgID5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgfVxuXG4gICAgPGRpdlxuICAgICAgICBba2NDbGFzc109XCIna2NGb3JtR3JvdXBDbGFzcydcIlxuICAgICAgICBbc3R5bGUuZGlzcGxheV09XCJmaWVsZFN0YXRlLmF0dHJpYnV0ZS5uYW1lID09PSAncGFzc3dvcmQtY29uZmlybScgJiYgIWRvTWFrZVVzZXJDb25maXJtUGFzc3dvcmQgPyAnbm9uZScgOiAnYmxvY2snXCJcbiAgICA+XG4gICAgICAgIDxkaXYgW2tjQ2xhc3NdPVwiJ2tjTGFiZWxXcmFwcGVyQ2xhc3MnXCI+XG4gICAgICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgICAgICBbZm9yXT1cImZpZWxkU3RhdGUuYXR0cmlidXRlLm5hbWVcIlxuICAgICAgICAgICAgICAgIFtrY0NsYXNzXT1cIidrY0xhYmVsQ2xhc3MnXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBpMThuLmFkdmFuY2VkTXNnU3RyKGZpZWxkU3RhdGUuYXR0cmlidXRlLmRpc3BsYXlOYW1lID8/ICcnKSB9fVxuICAgICAgICAgICAgICAgIEBpZiAoZmllbGRTdGF0ZS5hdHRyaWJ1dGUucmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgKlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgW2tjQ2xhc3NdPVwiJ2tjSW5wdXRXcmFwcGVyQ2xhc3MnXCI+XG4gICAgICAgICAgICBAaWYgKGZpZWxkU3RhdGUuYXR0cmlidXRlLmFubm90YXRpb25zLmlucHV0SGVscGVyVGV4dEJlZm9yZSkge1xuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgW2tjQ2xhc3NdPVwiJ2tjSW5wdXRIZWxwZXJUZXh0QmVmb3JlQ2xhc3MnXCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cIidmb3JtLWhlbHAtdGV4dC1iZWZvcmUtJyArIGZpZWxkU3RhdGUuYXR0cmlidXRlLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxpdmU9XCJwb2xpdGVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgaTE4bi5hZHZhbmNlZE1zZ1N0cihmaWVsZFN0YXRlLmF0dHJpYnV0ZS5hbm5vdGF0aW9ucy5pbnB1dEhlbHBlclRleHRCZWZvcmUpIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDxrYy1pbnB1dC1maWVsZC1ieS10eXBlXG4gICAgICAgICAgICAgICAgW2F0dHJpYnV0ZV09XCJmaWVsZFN0YXRlLmF0dHJpYnV0ZVwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlT3JWYWx1ZXNdPVwiZmllbGRTdGF0ZS52YWx1ZU9yVmFsdWVzXCJcbiAgICAgICAgICAgICAgICBbZGlzcGxheWFibGVFcnJvcnNdPVwiZmllbGRTdGF0ZS5kaXNwbGF5YWJsZUVycm9yc1wiXG4gICAgICAgICAgICAgICAgKGRpc3BhdGNoRm9ybUFjdGlvbik9XCJvbkRpc3BhdGNoKCRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9rYy1pbnB1dC1maWVsZC1ieS10eXBlPlxuXG4gICAgICAgICAgICA8a2MtZmllbGQtZXJyb3JzXG4gICAgICAgICAgICAgICAgW2F0dHJpYnV0ZV09XCJmaWVsZFN0YXRlLmF0dHJpYnV0ZVwiXG4gICAgICAgICAgICAgICAgW2Rpc3BsYXlhYmxlRXJyb3JzXT1cImZpZWxkU3RhdGUuZGlzcGxheWFibGVFcnJvcnNcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9rYy1maWVsZC1lcnJvcnM+XG4gICAgICAgICAgICBAaWYgKGZpZWxkU3RhdGUuYXR0cmlidXRlLmFubm90YXRpb25zLmlucHV0SGVscGVyVGV4dEFmdGVyKSB7XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBba2NDbGFzc109XCIna2NJbnB1dEhlbHBlclRleHRBZnRlckNsYXNzJ1wiXG4gICAgICAgICAgICAgICAgICAgIFtpZF09XCInZm9ybS1oZWxwLXRleHQtYWZ0ZXItJyArIGZpZWxkU3RhdGUuYXR0cmlidXRlLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxpdmU9XCJwb2xpdGVcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgaTE4bi5hZHZhbmNlZE1zZ1N0cihmaWVsZFN0YXRlLmF0dHJpYnV0ZS5hbm5vdGF0aW9ucy5pbnB1dEhlbHBlclRleHRBZnRlcikgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgQGlmIChhZnRlckZpZWxkKSB7XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJhZnRlckZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZTogZmllbGRTdGF0ZS5hdHRyaWJ1dGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZU9yVmFsdWVzOiBmaWVsZFN0YXRlLnZhbHVlT3JWYWx1ZXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5YWJsZUVycm9yczogZmllbGRTdGF0ZS5kaXNwbGF5YWJsZUVycm9yc1xuICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8IS0tIE5PVEU6IERvd25sb2FkaW5nIG9mIGh0bWw1RGF0YUFubm90YXRpb25zIHNjcmlwdHMgaXMgZG9uZSBpbiB0aGUgdXNlVXNlclByb2ZpbGVGb3JtIGhvb2sgLS0+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxufVxuIl19
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1wcm9maWxlLWZvcm0tZmllbGRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9sb2dpbi9jb21wb25lbnRzL3VzZXItcHJvZmlsZS1mb3JtLWZpZWxkcy91c2VyLXByb2ZpbGUtZm9ybS1maWVsZHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2xvZ2luL2NvbXBvbmVudHMvdXNlci1wcm9maWxlLWZvcm0tZmllbGRzL3VzZXItcHJvZmlsZS1mb3JtLWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFDbEksT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ2xGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQzVGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ3RHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBR2xGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUMzRSxPQUFPLEVBQW1CLHNCQUFzQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDaEgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNoRixPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSw4REFBOEQsQ0FBQzs7QUF3QjdHLE1BQU0sT0FBTyw4QkFBK0IsU0FBUSxrQkFBa0I7SUFJbEUsY0FBYyxDQUF5QjtJQVl2QztRQUNJLEtBQUssRUFBRSxDQUFDO1FBaEJaLFNBQUksR0FBRyxNQUFNLENBQU8sVUFBVSxDQUFDLENBQUM7UUFDaEMsY0FBUyxHQUFHLE1BQU0sQ0FBWSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2hELDJCQUFzQixHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3hELG1CQUFjLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3ZDLDhCQUF5QixHQUFHLE1BQU0sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1FBQ3pELG9CQUFlLEdBQUcsTUFBTSxDQUFVLGVBQWUsQ0FBQyxDQUFDO1FBQ25ELFlBQU8sR0FBRyxNQUFNLENBQW9DLGFBQWEsQ0FBQyxDQUFDO1FBRTVFLHdCQUFtQixHQUFHLE1BQU0sRUFBVyxDQUFDO1FBRXhDLGNBQVMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxDQUFDO1FBTzlDLE1BQU0sQ0FDRixHQUFHLEVBQUU7WUFDRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztZQUM3RCxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDNUQsQ0FBQyxFQUNELEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQzlCLENBQUM7SUFDTixDQUFDO0lBRUQsVUFBVSxDQUFDLFVBQXNCO1FBQzdCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMvRCxDQUFDOzhHQTdCUSw4QkFBOEI7a0dBQTlCLDhCQUE4QixtSUFSNUI7WUFDUCxzQkFBc0I7WUFDdEI7Z0JBQ0ksT0FBTyxFQUFFLGtCQUFrQjtnQkFDM0IsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQzthQUNoRTtTQUNKLG1QQ3JDTCxnakdBOEVBLG1GRG5EYyxnQkFBZ0IsK0ZBQUUsb0JBQW9CLHNIQUFFLHlCQUF5QixpS0FBRSxtQkFBbUIsK0ZBQUUsZ0JBQWdCOzsyRkFZekcsOEJBQThCO2tCQXJCMUMsU0FBUztpQ0FDTSxJQUFJLFdBUVAsQ0FBQyxnQkFBZ0IsRUFBRSxvQkFBb0IsRUFBRSx5QkFBeUIsRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsQ0FBQyxZQUN6Ryw2QkFBNkIsbUJBRXRCLHVCQUF1QixDQUFDLE1BQU0sYUFDcEM7d0JBQ1Asc0JBQXNCO3dCQUN0Qjs0QkFDSSxPQUFPLEVBQUUsa0JBQWtCOzRCQUMzQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSwrQkFBK0IsQ0FBQzt5QkFDaEU7cUJBQ0o7d0RBZTJCLFdBQVc7c0JBQXRDLFlBQVk7dUJBQUMsWUFBWTtnQkFDRSxVQUFVO3NCQUFyQyxZQUFZO3VCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ1RlbXBsYXRlT3V0bGV0IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgZWZmZWN0LCBmb3J3YXJkUmVmLCBpbmplY3QsIG91dHB1dCwgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVTRV9ERUZBVUxUX0NTUyB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2xpYi90b2tlbnMvdXNlLWRlZmF1bHQtY3NzJztcbmltcG9ydCB7IENvbXBvbmVudFJlZmVyZW5jZSB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2xvZ2luL2NsYXNzZXMvY29tcG9uZW50LXJlZmVyZW5jZSc7XG5pbXBvcnQgeyBGaWVsZEVycm9yc0NvbXBvbmVudCB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2xvZ2luL2NvbXBvbmVudHMvZmllbGQtZXJyb3JzJztcbmltcG9ydCB7IEdyb3VwTGFiZWxDb21wb25lbnQgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9sb2dpbi9jb21wb25lbnRzL2dyb3VwLWxhYmVsJztcbmltcG9ydCB7IElucHV0RmllbGRCeVR5cGVDb21wb25lbnQgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9sb2dpbi9jb21wb25lbnRzL2lucHV0LWZpZWxkLWJ5LXR5cGUnO1xuaW1wb3J0IHsgS2NDbGFzc0RpcmVjdGl2ZSB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2xvZ2luL2RpcmVjdGl2ZXMva2MtY2xhc3MnO1xuaW1wb3J0IHR5cGUgeyBJMThuIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvbG9naW4vaTE4bic7XG5pbXBvcnQgdHlwZSB7IEtjQ29udGV4dCB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2xvZ2luL0tjQ29udGV4dCc7XG5pbXBvcnQgeyBTdWJtaXRTZXJ2aWNlIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvbG9naW4vc2VydmljZXMvc3VibWl0JztcbmltcG9ydCB7IHR5cGUgRm9ybUFjdGlvbiwgVXNlclByb2ZpbGVGb3JtU2VydmljZSB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2xvZ2luL3NlcnZpY2VzL3VzZXItcHJvZmlsZS1mb3JtJztcbmltcG9ydCB7IExPR0lOX0NMQVNTRVMgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9sb2dpbi90b2tlbnMvY2xhc3Nlcyc7XG5pbXBvcnQgeyBMT0dJTl9JMThOIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvbG9naW4vdG9rZW5zL2kxOG4nO1xuaW1wb3J0IHsgS0NfTE9HSU5fQ09OVEVYVCB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2xvZ2luL3Rva2Vucy9rYy1jb250ZXh0JztcbmltcG9ydCB7IERPX01BS0VfVVNFUl9DT05GSVJNX1BBU1NXT1JEIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvbG9naW4vdG9rZW5zL21ha2UtdXNlci1jb25maXJtLXBhc3N3b3JkJztcbmltcG9ydCB0eXBlIHsgQ2xhc3NLZXkgfSBmcm9tICdrZXljbG9ha2lmeS9sb2dpbi9saWIva2NDbHN4JztcblxuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzdHlsZXM6IFtcbiAgICAgICAgYFxuICAgICAgICAgICAgOmhvc3Qge1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6IGNvbnRlbnRzO1xuICAgICAgICAgICAgfVxuICAgICAgICBgXG4gICAgXSxcbiAgICBpbXBvcnRzOiBbS2NDbGFzc0RpcmVjdGl2ZSwgRmllbGRFcnJvcnNDb21wb25lbnQsIElucHV0RmllbGRCeVR5cGVDb21wb25lbnQsIEdyb3VwTGFiZWxDb21wb25lbnQsIE5nVGVtcGxhdGVPdXRsZXRdLFxuICAgIHNlbGVjdG9yOiAna2MtdXNlci1wcm9maWxlLWZvcm0tZmllbGRzJyxcbiAgICB0ZW1wbGF0ZVVybDogJ3VzZXItcHJvZmlsZS1mb3JtLWZpZWxkcy5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIFVzZXJQcm9maWxlRm9ybVNlcnZpY2UsXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IENvbXBvbmVudFJlZmVyZW5jZSxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFVzZXJQcm9maWxlRm9ybUZpZWxkc0NvbXBvbmVudClcbiAgICAgICAgfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgVXNlclByb2ZpbGVGb3JtRmllbGRzQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50UmVmZXJlbmNlIHtcbiAgICBpMThuID0gaW5qZWN0PEkxOG4+KExPR0lOX0kxOE4pO1xuICAgIGtjQ29udGV4dCA9IGluamVjdDxLY0NvbnRleHQ+KEtDX0xPR0lOX0NPTlRFWFQpO1xuICAgIHVzZXJQcm9maWxlRm9ybVNlcnZpY2UgPSBpbmplY3QoVXNlclByb2ZpbGVGb3JtU2VydmljZSk7XG4gICAgI3N1Ym1pdFNlcnZpY2UgPSBpbmplY3QoU3VibWl0U2VydmljZSk7XG4gICAgZG9NYWtlVXNlckNvbmZpcm1QYXNzd29yZCA9IGluamVjdChET19NQUtFX1VTRVJfQ09ORklSTV9QQVNTV09SRCk7XG4gICAgb3ZlcnJpZGUgZG9Vc2VEZWZhdWx0Q3NzID0gaW5qZWN0PGJvb2xlYW4+KFVTRV9ERUZBVUxUX0NTUyk7XG4gICAgb3ZlcnJpZGUgY2xhc3NlcyA9IGluamVjdDxQYXJ0aWFsPFJlY29yZDxDbGFzc0tleSwgc3RyaW5nPj4+KExPR0lOX0NMQVNTRVMpO1xuXG4gICAgb25Jc0Zvcm1TdWJtaXR0YWJsZSA9IG91dHB1dDxib29sZWFuPigpO1xuXG4gICAgZm9ybVN0YXRlID0gdGhpcy51c2VyUHJvZmlsZUZvcm1TZXJ2aWNlLmZvcm1TdGF0ZTtcblxuICAgIEBDb250ZW50Q2hpbGQoJ2JlZm9yRmllbGQnKSBiZWZvcmVGaWVsZDogVGVtcGxhdGVSZWY8dW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgQENvbnRlbnRDaGlsZCgnYWZ0ZXJGaWVsZCcpIGFmdGVyRmllbGQ6IFRlbXBsYXRlUmVmPHVua25vd24+IHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIGVmZmVjdChcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0Zvcm1TdWJtaXR0YWJsZSA9IHRoaXMuZm9ybVN0YXRlKCkuaXNGb3JtU3VibWl0dGFibGU7XG4gICAgICAgICAgICAgICAgdGhpcy4jc3VibWl0U2VydmljZS5zZXRJc1N1Ym1pdHRhYmxlKGlzRm9ybVN1Ym1pdHRhYmxlKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBvbkRpc3BhdGNoKGZvcm1BY3Rpb246IEZvcm1BY3Rpb24pIHtcbiAgICAgICAgdGhpcy51c2VyUHJvZmlsZUZvcm1TZXJ2aWNlLmRpc3BhdGNoRm9ybUFjdGlvbihmb3JtQWN0aW9uKTtcbiAgICB9XG59XG4iLCJAbGV0IGZvcm1GaWVsZFN0YXRlcyA9IGZvcm1TdGF0ZSgpLmZvcm1GaWVsZFN0YXRlcztcblxuQGZvciAoZmllbGRTdGF0ZSBvZiBmb3JtRmllbGRTdGF0ZXM7IHRyYWNrIGZpZWxkU3RhdGUuYXR0cmlidXRlKSB7XG4gICAgPGtjLWdyb3VwLWxhYmVsIFthdHRyaWJ1dGVdPVwiZmllbGRTdGF0ZS5hdHRyaWJ1dGVcIiAvPlxuXG4gICAgQGlmIChiZWZvcmVGaWVsZCkge1xuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJiZWZvcmVGaWVsZFwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgIGF0dHJpYnV0ZTogZmllbGRTdGF0ZS5hdHRyaWJ1dGUsXG4gICAgICAgICAgICAgICAgdmFsdWVPclZhbHVlczogZmllbGRTdGF0ZS52YWx1ZU9yVmFsdWVzLFxuICAgICAgICAgICAgICAgIGRpc3BsYXlhYmxlRXJyb3JzOiBmaWVsZFN0YXRlLmRpc3BsYXlhYmxlRXJyb3JzXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgLz5cbiAgICB9XG5cbiAgICA8ZGl2XG4gICAgICAgIFtrY0NsYXNzXT1cIidrY0Zvcm1Hcm91cENsYXNzJ1wiXG4gICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cImZpZWxkU3RhdGUuYXR0cmlidXRlLm5hbWUgPT09ICdwYXNzd29yZC1jb25maXJtJyAmJiAhZG9NYWtlVXNlckNvbmZpcm1QYXNzd29yZCA/ICdub25lJyA6ICdibG9jaydcIlxuICAgID5cbiAgICAgICAgPGRpdiBba2NDbGFzc109XCIna2NMYWJlbFdyYXBwZXJDbGFzcydcIj5cbiAgICAgICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgICAgIFtmb3JdPVwiZmllbGRTdGF0ZS5hdHRyaWJ1dGUubmFtZVwiXG4gICAgICAgICAgICAgICAgW2tjQ2xhc3NdPVwiJ2tjTGFiZWxDbGFzcydcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGkxOG4uYWR2YW5jZWRNc2dTdHIoZmllbGRTdGF0ZS5hdHRyaWJ1dGUuZGlzcGxheU5hbWUgPz8gJycpIH19XG4gICAgICAgICAgICAgICAgQGlmIChmaWVsZFN0YXRlLmF0dHJpYnV0ZS5yZXF1aXJlZCkge1xuICAgICAgICAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBba2NDbGFzc109XCIna2NJbnB1dFdyYXBwZXJDbGFzcydcIj5cbiAgICAgICAgICAgIEBpZiAoZmllbGRTdGF0ZS5hdHRyaWJ1dGUuYW5ub3RhdGlvbnMuaW5wdXRIZWxwZXJUZXh0QmVmb3JlKSB7XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxpdmU9XCJwb2xpdGVcIlxuICAgICAgICAgICAgICAgICAgICBba2NDbGFzc109XCIna2NJbnB1dEhlbHBlclRleHRCZWZvcmVDbGFzcydcIlxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwiJ2Zvcm0taGVscC10ZXh0LWJlZm9yZS0nICsgZmllbGRTdGF0ZS5hdHRyaWJ1dGUubmFtZVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyBpMThuLmFkdmFuY2VkTXNnU3RyKGZpZWxkU3RhdGUuYXR0cmlidXRlLmFubm90YXRpb25zLmlucHV0SGVscGVyVGV4dEJlZm9yZSkgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPGtjLWlucHV0LWZpZWxkLWJ5LXR5cGVcbiAgICAgICAgICAgICAgICBbYXR0cmlidXRlXT1cImZpZWxkU3RhdGUuYXR0cmlidXRlXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVPclZhbHVlc109XCJmaWVsZFN0YXRlLnZhbHVlT3JWYWx1ZXNcIlxuICAgICAgICAgICAgICAgIFtkaXNwbGF5YWJsZUVycm9yc109XCJmaWVsZFN0YXRlLmRpc3BsYXlhYmxlRXJyb3JzXCJcbiAgICAgICAgICAgICAgICAoZGlzcGF0Y2hGb3JtQWN0aW9uKT1cIm9uRGlzcGF0Y2goJGV2ZW50KVwiXG4gICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICA8a2MtZmllbGQtZXJyb3JzXG4gICAgICAgICAgICAgICAgW2F0dHJpYnV0ZV09XCJmaWVsZFN0YXRlLmF0dHJpYnV0ZVwiXG4gICAgICAgICAgICAgICAgW2Rpc3BsYXlhYmxlRXJyb3JzXT1cImZpZWxkU3RhdGUuZGlzcGxheWFibGVFcnJvcnNcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIEBpZiAoZmllbGRTdGF0ZS5hdHRyaWJ1dGUuYW5ub3RhdGlvbnMuaW5wdXRIZWxwZXJUZXh0QWZ0ZXIpIHtcbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGl2ZT1cInBvbGl0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtrY0NsYXNzXT1cIidrY0lucHV0SGVscGVyVGV4dEFmdGVyQ2xhc3MnXCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cIidmb3JtLWhlbHAtdGV4dC1hZnRlci0nICsgZmllbGRTdGF0ZS5hdHRyaWJ1dGUubmFtZVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7eyBpMThuLmFkdmFuY2VkTXNnU3RyKGZpZWxkU3RhdGUuYXR0cmlidXRlLmFubm90YXRpb25zLmlucHV0SGVscGVyVGV4dEFmdGVyKSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaWYgKGFmdGVyRmllbGQpIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImFmdGVyRmllbGRcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlOiBmaWVsZFN0YXRlLmF0dHJpYnV0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlT3JWYWx1ZXM6IGZpZWxkU3RhdGUudmFsdWVPclZhbHVlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3BsYXlhYmxlRXJyb3JzOiBmaWVsZFN0YXRlLmRpc3BsYXlhYmxlRXJyb3JzXG4gICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8IS0tIE5PVEU6IERvd25sb2FkaW5nIG9mIGh0bWw1RGF0YUFubm90YXRpb25zIHNjcmlwdHMgaXMgZG9uZSBpbiB0aGUgdXNlVXNlclByb2ZpbGVGb3JtIGhvb2sgLS0+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxufVxuIl19
@@ -1,5 +1,5 @@
1
1
  import { AsyncPipe, NgTemplateOutlet } from '@angular/common';
2
- import { ChangeDetectionStrategy, Component, forwardRef, inject, input, Renderer2 } from '@angular/core';
2
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, effect, forwardRef, inject, input, output, Renderer2, ViewContainerRef } from '@angular/core';
3
3
  import { Meta, Title } from '@angular/platform-browser';
4
4
  import { KcSanitizePipe } from '@keycloakify/angular/lib/pipes/kc-sanitize';
5
5
  import { USE_DEFAULT_CSS } from '@keycloakify/angular/lib/tokens/use-default-css';
@@ -11,23 +11,55 @@ import { LOGIN_I18N } from '@keycloakify/angular/login/tokens/i18n';
11
11
  import { KC_LOGIN_CONTEXT } from '@keycloakify/angular/login/tokens/kc-context';
12
12
  import { getKcClsx } from 'keycloakify/login/lib/kcClsx';
13
13
  import * as i0 from "@angular/core";
14
+ export class DynamicPageInjectorComponent {
15
+ #vcr;
16
+ constructor() {
17
+ this.page = input();
18
+ this.userProfileFormFields = input();
19
+ this.componentCreated = output();
20
+ this.#vcr = inject(ViewContainerRef);
21
+ effect(() => {
22
+ const page = this.page();
23
+ const userProfileFormFields = this.userProfileFormFields();
24
+ if (!page)
25
+ return;
26
+ const compRef = this.#vcr.createComponent(page);
27
+ if ('userProfileFormFields' in compRef && userProfileFormFields) {
28
+ compRef.setInput('userProfileFormFields', userProfileFormFields);
29
+ }
30
+ this.componentCreated.emit(compRef.instance);
31
+ }, { allowSignalWrites: true });
32
+ }
33
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DynamicPageInjectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
34
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.7", type: DynamicPageInjectorComponent, isStandalone: true, selector: "kc-dynamic-page-injector", inputs: { page: { classPropertyName: "page", publicName: "page", isSignal: true, isRequired: false, transformFunction: null }, userProfileFormFields: { classPropertyName: "userProfileFormFields", publicName: "userProfileFormFields", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { componentCreated: "componentCreated" }, ngImport: i0, template: ``, isInline: true }); }
35
+ }
36
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: DynamicPageInjectorComponent, decorators: [{
37
+ type: Component,
38
+ args: [{
39
+ selector: 'kc-dynamic-page-injector',
40
+ standalone: true,
41
+ template: ``
42
+ }]
43
+ }], ctorParameters: () => [] });
14
44
  export class TemplateComponent extends ComponentReference {
45
+ #cdr;
15
46
  constructor() {
16
47
  super();
17
48
  this.i18n = inject(LOGIN_I18N);
18
49
  this.renderer = inject(Renderer2);
50
+ this.#cdr = inject(ChangeDetectorRef);
19
51
  this.meta = inject(Meta);
20
52
  this.title = inject(Title);
21
53
  this.kcContext = inject(KC_LOGIN_CONTEXT);
22
54
  this.doUseDefaultCss = inject(USE_DEFAULT_CSS);
23
55
  this.classes = inject(LOGIN_CLASSES);
24
56
  this.loginResourceInjectorService = inject(LoginResourceInjectorService);
25
- this.displayInfo = input(false);
26
- this.displayMessage = input(true);
27
- this.displayRequiredFields = input(false);
28
- this.documentTitle = input();
29
- this.bodyClassName = input();
30
- this.title.setTitle(this.documentTitle() ?? this.i18n.msgStr('loginTitle', this.kcContext.realm.displayName));
57
+ this.displayInfo = false;
58
+ this.displayMessage = true;
59
+ this.displayRequiredFields = false;
60
+ this.page = input();
61
+ this.userProfileFormFields = input();
62
+ this.title.setTitle(this.documentTitle ?? this.i18n.msgStr('loginTitle', this.kcContext.realm.displayName));
31
63
  this.isReadyToRender$ = this.loginResourceInjectorService.injectResource(this.doUseDefaultCss);
32
64
  }
33
65
  ngOnInit() {
@@ -38,7 +70,7 @@ export class TemplateComponent extends ComponentReference {
38
70
  doUseDefaultCss: this.doUseDefaultCss,
39
71
  classes: this.classes
40
72
  }).kcClsx;
41
- const kcBodyClass = this.bodyClassName() ?? kcClsx('kcBodyClass');
73
+ const kcBodyClass = this.bodyClassName ?? kcClsx('kcBodyClass');
42
74
  const kcHtmlClass = kcClsx('kcHtmlClass');
43
75
  const kcBodyClasses = kcBodyClass.split(/\s+/);
44
76
  const kcHtmlClasses = kcHtmlClass.split(/\s+/);
@@ -52,21 +84,57 @@ export class TemplateComponent extends ComponentReference {
52
84
  tryAnotherWay() {
53
85
  document.forms['kc-select-try-another-way-form'].submit();
54
86
  }
55
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: TemplateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
56
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.6", type: TemplateComponent, isStandalone: true, selector: "kc-login-template", inputs: { displayInfo: { classPropertyName: "displayInfo", publicName: "displayInfo", isSignal: true, isRequired: false, transformFunction: null }, displayMessage: { classPropertyName: "displayMessage", publicName: "displayMessage", isSignal: true, isRequired: false, transformFunction: null }, displayRequiredFields: { classPropertyName: "displayRequiredFields", publicName: "displayRequiredFields", isSignal: true, isRequired: false, transformFunction: null }, documentTitle: { classPropertyName: "documentTitle", publicName: "documentTitle", isSignal: true, isRequired: false, transformFunction: null }, bodyClassName: { classPropertyName: "bodyClassName", publicName: "bodyClassName", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
87
+ onComponentCreated(compRef) {
88
+ if ('displayInfo' in compRef && compRef.displayInfo) {
89
+ this.displayInfo = compRef.displayInfo;
90
+ }
91
+ if ('displayMessage' in compRef && compRef.displayMessage) {
92
+ this.displayMessage = compRef.displayMessage;
93
+ }
94
+ if ('displayRequiredFields' in compRef && compRef.displayRequiredFields) {
95
+ this.displayRequiredFields = compRef.displayRequiredFields;
96
+ }
97
+ if ('documentTitle' in compRef && compRef.documentTitle) {
98
+ this.documentTitle = compRef.documentTitle;
99
+ }
100
+ if ('bodyClassName' in compRef && compRef.bodyClassName) {
101
+ this.bodyClassName = compRef.bodyClassName;
102
+ }
103
+ if ('headerNode' in compRef && compRef.headerNode) {
104
+ this.headerNode = computed(() => {
105
+ const headerNode = compRef.headerNode();
106
+ return headerNode;
107
+ });
108
+ }
109
+ if ('infoNode' in compRef && compRef.infoNode) {
110
+ this.infoNode = computed(() => {
111
+ const infoNode = compRef.infoNode();
112
+ return infoNode;
113
+ });
114
+ }
115
+ if ('socialProvidersNode' in compRef && compRef.socialProvidersNode) {
116
+ this.socialProvidersNode = computed(() => {
117
+ const socialProvidersNode = compRef.socialProvidersNode();
118
+ return socialProvidersNode;
119
+ });
120
+ }
121
+ this.#cdr.markForCheck();
122
+ }
123
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: TemplateComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
124
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: TemplateComponent, isStandalone: true, selector: "kc-root", inputs: { page: { classPropertyName: "page", publicName: "page", isSignal: true, isRequired: false, transformFunction: null }, userProfileFormFields: { classPropertyName: "userProfileFormFields", publicName: "userProfileFormFields", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
57
125
  {
58
126
  provide: ComponentReference,
59
127
  useExisting: forwardRef(() => TemplateComponent)
60
128
  }
61
- ], usesInheritance: true, ngImport: i0, template: "@let realm = kcContext.realm;\n@let message = kcContext.message;\n@let auth = kcContext.auth;\n@let isAppInitiatedAction = kcContext.isAppInitiatedAction;\n@let url = kcContext.url;\n@let isReadyToRender = isReadyToRender$ | async;\n\n@if (isReadyToRender) {\n <div [kcClass]=\"'kcLoginClass'\">\n <div\n id=\"kc-header\"\n [kcClass]=\"'kcHeaderClass'\"\n >\n <div\n id=\"kc-header-wrapper\"\n [kcClass]=\"'kcHeaderWrapperClass'\"\n >\n <div [innerHTML]=\"realm?.displayNameHtml ?? '' | kcSanitize: 'html'\"></div>\n </div>\n </div>\n\n <div [kcClass]=\"'kcFormCardClass'\">\n <header [kcClass]=\"'kcFormHeaderClass'\">\n <!-- Locale switcher -->\n @if (i18n.enabledLanguages.length > 1) {\n <div\n id=\"kc-locale\"\n [kcClass]=\"'kcLocaleMainClass'\"\n >\n <div\n id=\"kc-locale-wrapper\"\n [kcClass]=\"'kcLocaleWrapperClass'\"\n >\n <div\n id=\"kc-locale-dropdown\"\n [kcClass]=\"'kcLocaleDropDownClass'\"\n class=\"menu-button-links\"\n >\n <button\n tabindex=\"1\"\n id=\"kc-current-locale-link\"\n [attr.aria-label]=\"i18n.msgStr('languages')\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n aria-controls=\"language-switch1\"\n >\n {{ i18n.currentLanguage.label }}\n </button>\n <ul\n role=\"menu\"\n tabindex=\"-1\"\n aria-labelledby=\"kc-current-locale-link\"\n aria-activedescendant=\"\"\n id=\"language-switch1\"\n [kcClass]=\"'kcLocaleListClass'\"\n >\n @for (entry of i18n.enabledLanguages; track entry; let idx = $index) {\n <li\n [kcClass]=\"'kcLocaleListItemClass'\"\n role=\"none\"\n >\n <a\n role=\"menuitem\"\n tabindex=\"-1\"\n [href]=\"entry.href\"\n [kcClass]=\"'kcLocaleItemClass'\"\n [id]=\"'language-' + idx\"\n >\n {{ entry.label }}\n </a>\n </li>\n }\n </ul>\n </div>\n </div>\n </div>\n }\n\n <!-- Header content -->\n <ng-template #node>\n @if (auth && !auth.showUsername && !auth.showResetCredentials) {\n <h1 id=\"kc-page-title\">\n <ng-content select=\"[headerNode]\"></ng-content>\n </h1>\n } @else {\n <div\n id=\"kc-username\"\n [kcClass]=\"'kcFormGroupClass'\"\n >\n <label id=\"kc-attempted-username\">{{ auth?.attemptedUsername }}</label>\n <a\n id=\"reset-login\"\n [href]=\"url?.loginRestartFlowUrl\"\n [attr.aria-label]=\"i18n.msgStr('restartLoginTooltip')\"\n >\n <div class=\"kc-login-tooltip\">\n <i [kcClass]=\"'kcResetFlowIcon'\"></i>\n <span class=\"kc-tooltip-text\">\n {{ i18n.msgStr('restartLoginTooltip') }}\n </span>\n </div>\n </a>\n </div>\n }\n </ng-template>\n\n @if (displayRequiredFields()) {\n <div [kcClass]=\"'kcContentWrapperClass'\">\n <div\n [kcClass]=\"'kcLabelWrapperClass'\"\n class=\"subtitle\"\n >\n <span class=\"subtitle\">\n <span class=\"required\">*</span>\n {{ i18n.msgStr('requiredFields') }}\n </span>\n </div>\n <div class=\"col-md-10\">\n <ng-container [ngTemplateOutlet]=\"node\"></ng-container>\n </div>\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"node\"></ng-container>\n }\n </header>\n\n <div id=\"kc-content\">\n <div id=\"kc-content-wrapper\">\n <!-- Message display -->\n @if (displayMessage() && message && (message.type !== 'warning' || !isAppInitiatedAction)) {\n <div\n [kcClass]=\"'kcAlertClass'\"\n [ngClass]=\"message.type === 'error' ? 'pf-m-danger' : 'pf-m-' + message.type\"\n [class]=\"'alert-' + message.type\"\n >\n <div class=\"pf-c-alert__icon\">\n @switch (message.type) {\n @case ('success') {\n <span [kcClass]=\"'kcFeedbackSuccessIcon'\"></span>\n }\n @case ('warning') {\n <span [kcClass]=\"'kcFeedbackWarningIcon'\"></span>\n }\n @case ('info') {\n <span [kcClass]=\"'kcFeedbackInfoIcon'\"></span>\n }\n @case ('error') {\n <span [kcClass]=\"'kcFeedbackErrorIcon'\"></span>\n }\n }\n </div>\n <span\n [kcClass]=\"'kcAlertTitleClass'\"\n [innerHTML]=\"message.summary | kcSanitize: 'html'\"\n ></span>\n </div>\n }\n <!-- Content -->\n <ng-content select=\"[content]\"></ng-content>\n @if (!!auth && auth?.showTryAnotherWayLink) {\n <form\n id=\"kc-select-try-another-way-form\"\n [action]=\"url?.loginAction\"\n method=\"post\"\n >\n <div [kcClass]=\"'kcFormGroupClass'\">\n <div [kcClass]=\"'kcFormGroupClass'\">\n <input\n type=\"hidden\"\n name=\"tryAnotherWay\"\n value=\"on\"\n />\n <a\n id=\"try-another-way\"\n (click)=\"tryAnotherWay()\"\n >\n {{ i18n.msgStr('doTryAnotherWay') }}\n </a>\n </div>\n </div>\n </form>\n }\n\n <ng-content select=\"[socialProvidersNode]\"></ng-content>\n <!-- Info display -->\n @if (displayInfo()) {\n <div\n id=\"kc-info\"\n [kcClass]=\"'kcSignUpClass'\"\n >\n <div\n id=\"kc-info-wrapper\"\n [kcClass]=\"'kcInfoAreaWrapperClass'\"\n >\n <ng-content select=\"[infoNode]\"></ng-content>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n}\n", dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: KcSanitizePipe, name: "kcSanitize" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: KcClassDirective, selector: "[kcClass]", inputs: ["class", "ngClass", "kcClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
129
+ ], usesInheritance: true, ngImport: i0, template: "@let realm = kcContext.realm;\n@let message = kcContext.message;\n@let auth = kcContext.auth;\n@let isAppInitiatedAction = kcContext.isAppInitiatedAction;\n@let url = kcContext.url;\n@let isReadyToRender = isReadyToRender$ | async;\n\n@if (isReadyToRender) {\n <div [kcClass]=\"'kcLoginClass'\">\n <div\n id=\"kc-header\"\n [kcClass]=\"'kcHeaderClass'\"\n >\n <div\n id=\"kc-header-wrapper\"\n [kcClass]=\"'kcHeaderWrapperClass'\"\n >\n <div [innerHTML]=\"realm?.displayNameHtml ?? '' | kcSanitize: 'html'\"></div>\n </div>\n </div>\n\n <div [kcClass]=\"'kcFormCardClass'\">\n <header [kcClass]=\"'kcFormHeaderClass'\">\n <!-- Locale switcher -->\n @if (i18n.enabledLanguages.length > 1) {\n <div\n id=\"kc-locale\"\n [kcClass]=\"'kcLocaleMainClass'\"\n >\n <div\n id=\"kc-locale-wrapper\"\n [kcClass]=\"'kcLocaleWrapperClass'\"\n >\n <div\n id=\"kc-locale-dropdown\"\n class=\"menu-button-links\"\n [kcClass]=\"'kcLocaleDropDownClass'\"\n >\n <button\n tabindex=\"1\"\n id=\"kc-current-locale-link\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n aria-controls=\"language-switch1\"\n [attr.aria-label]=\"i18n.msgStr('languages')\"\n >\n {{ i18n.currentLanguage.label }}\n </button>\n <ul\n role=\"menu\"\n tabindex=\"-1\"\n aria-labelledby=\"kc-current-locale-link\"\n aria-activedescendant=\"\"\n id=\"language-switch1\"\n [kcClass]=\"'kcLocaleListClass'\"\n >\n @for (entry of i18n.enabledLanguages; track entry; let idx = $index) {\n <li\n role=\"none\"\n [kcClass]=\"'kcLocaleListItemClass'\"\n >\n <a\n role=\"menuitem\"\n tabindex=\"-1\"\n [href]=\"entry.href\"\n [kcClass]=\"'kcLocaleItemClass'\"\n [id]=\"'language-' + idx\"\n >\n {{ entry.label }}\n </a>\n </li>\n }\n </ul>\n </div>\n </div>\n </div>\n }\n\n <!-- Header content -->\n <ng-template #node>\n @if (auth && !auth.showUsername && !auth.showResetCredentials) {\n <h1 id=\"kc-page-title\">\n @let header = headerNode && headerNode();\n @if (header) {\n <ng-container [ngTemplateOutlet]=\"header\" />\n }\n </h1>\n } @else {\n <div\n id=\"kc-username\"\n [kcClass]=\"'kcFormGroupClass'\"\n >\n <label id=\"kc-attempted-username\">{{ auth?.attemptedUsername }}</label>\n <a\n id=\"reset-login\"\n [href]=\"url?.loginRestartFlowUrl\"\n [attr.aria-label]=\"i18n.msgStr('restartLoginTooltip')\"\n >\n <div class=\"kc-login-tooltip\">\n <i [kcClass]=\"'kcResetFlowIcon'\"></i>\n <span class=\"kc-tooltip-text\">\n {{ i18n.msgStr('restartLoginTooltip') }}\n </span>\n </div>\n </a>\n </div>\n }\n </ng-template>\n\n @if (displayRequiredFields) {\n <div [kcClass]=\"'kcContentWrapperClass'\">\n <div\n class=\"subtitle\"\n [kcClass]=\"'kcLabelWrapperClass'\"\n >\n <span class=\"subtitle\">\n <span class=\"required\">*</span>\n {{ i18n.msgStr('requiredFields') }}\n </span>\n </div>\n <div class=\"col-md-10\">\n <ng-container [ngTemplateOutlet]=\"node\" />\n </div>\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"node\" />\n }\n </header>\n\n <div id=\"kc-content\">\n <div id=\"kc-content-wrapper\">\n <!-- Message display -->\n @if (displayMessage && message && (message.type !== 'warning' || !isAppInitiatedAction)) {\n <div\n [kcClass]=\"'kcAlertClass'\"\n [ngClass]=\"message.type === 'error' ? 'pf-m-danger' : 'pf-m-' + message.type\"\n [class]=\"'alert-' + message.type\"\n >\n <div class=\"pf-c-alert__icon\">\n @switch (message.type) {\n @case ('success') {\n <span [kcClass]=\"'kcFeedbackSuccessIcon'\"></span>\n }\n @case ('warning') {\n <span [kcClass]=\"'kcFeedbackWarningIcon'\"></span>\n }\n @case ('info') {\n <span [kcClass]=\"'kcFeedbackInfoIcon'\"></span>\n }\n @case ('error') {\n <span [kcClass]=\"'kcFeedbackErrorIcon'\"></span>\n }\n }\n </div>\n <span\n [kcClass]=\"'kcAlertTitleClass'\"\n [innerHTML]=\"message.summary | kcSanitize: 'html'\"\n ></span>\n </div>\n }\n <!-- Content -->\n @let pageRef = page();\n @if (!!pageRef) {\n <kc-dynamic-page-injector\n [page]=\"pageRef\"\n (componentCreated)=\"onComponentCreated($event)\"\n />\n }\n @if (!!auth && auth?.showTryAnotherWayLink) {\n <form\n id=\"kc-select-try-another-way-form\"\n method=\"post\"\n [action]=\"url?.loginAction\"\n >\n <div [kcClass]=\"'kcFormGroupClass'\">\n <div [kcClass]=\"'kcFormGroupClass'\">\n <input\n type=\"hidden\"\n name=\"tryAnotherWay\"\n value=\"on\"\n />\n <a\n id=\"try-another-way\"\n (click)=\"tryAnotherWay()\"\n >\n {{ i18n.msgStr('doTryAnotherWay') }}\n </a>\n </div>\n </div>\n </form>\n }\n @let socialProviders = socialProvidersNode && socialProvidersNode();\n @if (socialProviders) {\n <ng-container [ngTemplateOutlet]=\"socialProviders\" />\n }\n <!-- Info display -->\n @if (displayInfo) {\n <div\n id=\"kc-info\"\n [kcClass]=\"'kcSignUpClass'\"\n >\n <div\n id=\"kc-info-wrapper\"\n [kcClass]=\"'kcInfoAreaWrapperClass'\"\n >\n @let info = infoNode && infoNode();\n @if (info) {\n <ng-container [ngTemplateOutlet]=\"info\" />\n }\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n}\n", dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: KcSanitizePipe, name: "kcSanitize" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: KcClassDirective, selector: "[kcClass]", inputs: ["class", "ngClass", "kcClass"] }, { kind: "component", type: DynamicPageInjectorComponent, selector: "kc-dynamic-page-injector", inputs: ["page", "userProfileFormFields"], outputs: ["componentCreated"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
62
130
  }
63
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: TemplateComponent, decorators: [{
131
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: TemplateComponent, decorators: [{
64
132
  type: Component,
65
- args: [{ selector: 'kc-login-template', standalone: true, imports: [AsyncPipe, KcSanitizePipe, NgTemplateOutlet, KcClassDirective], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
133
+ args: [{ selector: 'kc-root', standalone: true, imports: [AsyncPipe, KcSanitizePipe, NgTemplateOutlet, KcClassDirective, DynamicPageInjectorComponent], changeDetection: ChangeDetectionStrategy.OnPush, providers: [
66
134
  {
67
135
  provide: ComponentReference,
68
136
  useExisting: forwardRef(() => TemplateComponent)
69
137
  }
70
- ], template: "@let realm = kcContext.realm;\n@let message = kcContext.message;\n@let auth = kcContext.auth;\n@let isAppInitiatedAction = kcContext.isAppInitiatedAction;\n@let url = kcContext.url;\n@let isReadyToRender = isReadyToRender$ | async;\n\n@if (isReadyToRender) {\n <div [kcClass]=\"'kcLoginClass'\">\n <div\n id=\"kc-header\"\n [kcClass]=\"'kcHeaderClass'\"\n >\n <div\n id=\"kc-header-wrapper\"\n [kcClass]=\"'kcHeaderWrapperClass'\"\n >\n <div [innerHTML]=\"realm?.displayNameHtml ?? '' | kcSanitize: 'html'\"></div>\n </div>\n </div>\n\n <div [kcClass]=\"'kcFormCardClass'\">\n <header [kcClass]=\"'kcFormHeaderClass'\">\n <!-- Locale switcher -->\n @if (i18n.enabledLanguages.length > 1) {\n <div\n id=\"kc-locale\"\n [kcClass]=\"'kcLocaleMainClass'\"\n >\n <div\n id=\"kc-locale-wrapper\"\n [kcClass]=\"'kcLocaleWrapperClass'\"\n >\n <div\n id=\"kc-locale-dropdown\"\n [kcClass]=\"'kcLocaleDropDownClass'\"\n class=\"menu-button-links\"\n >\n <button\n tabindex=\"1\"\n id=\"kc-current-locale-link\"\n [attr.aria-label]=\"i18n.msgStr('languages')\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n aria-controls=\"language-switch1\"\n >\n {{ i18n.currentLanguage.label }}\n </button>\n <ul\n role=\"menu\"\n tabindex=\"-1\"\n aria-labelledby=\"kc-current-locale-link\"\n aria-activedescendant=\"\"\n id=\"language-switch1\"\n [kcClass]=\"'kcLocaleListClass'\"\n >\n @for (entry of i18n.enabledLanguages; track entry; let idx = $index) {\n <li\n [kcClass]=\"'kcLocaleListItemClass'\"\n role=\"none\"\n >\n <a\n role=\"menuitem\"\n tabindex=\"-1\"\n [href]=\"entry.href\"\n [kcClass]=\"'kcLocaleItemClass'\"\n [id]=\"'language-' + idx\"\n >\n {{ entry.label }}\n </a>\n </li>\n }\n </ul>\n </div>\n </div>\n </div>\n }\n\n <!-- Header content -->\n <ng-template #node>\n @if (auth && !auth.showUsername && !auth.showResetCredentials) {\n <h1 id=\"kc-page-title\">\n <ng-content select=\"[headerNode]\"></ng-content>\n </h1>\n } @else {\n <div\n id=\"kc-username\"\n [kcClass]=\"'kcFormGroupClass'\"\n >\n <label id=\"kc-attempted-username\">{{ auth?.attemptedUsername }}</label>\n <a\n id=\"reset-login\"\n [href]=\"url?.loginRestartFlowUrl\"\n [attr.aria-label]=\"i18n.msgStr('restartLoginTooltip')\"\n >\n <div class=\"kc-login-tooltip\">\n <i [kcClass]=\"'kcResetFlowIcon'\"></i>\n <span class=\"kc-tooltip-text\">\n {{ i18n.msgStr('restartLoginTooltip') }}\n </span>\n </div>\n </a>\n </div>\n }\n </ng-template>\n\n @if (displayRequiredFields()) {\n <div [kcClass]=\"'kcContentWrapperClass'\">\n <div\n [kcClass]=\"'kcLabelWrapperClass'\"\n class=\"subtitle\"\n >\n <span class=\"subtitle\">\n <span class=\"required\">*</span>\n {{ i18n.msgStr('requiredFields') }}\n </span>\n </div>\n <div class=\"col-md-10\">\n <ng-container [ngTemplateOutlet]=\"node\"></ng-container>\n </div>\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"node\"></ng-container>\n }\n </header>\n\n <div id=\"kc-content\">\n <div id=\"kc-content-wrapper\">\n <!-- Message display -->\n @if (displayMessage() && message && (message.type !== 'warning' || !isAppInitiatedAction)) {\n <div\n [kcClass]=\"'kcAlertClass'\"\n [ngClass]=\"message.type === 'error' ? 'pf-m-danger' : 'pf-m-' + message.type\"\n [class]=\"'alert-' + message.type\"\n >\n <div class=\"pf-c-alert__icon\">\n @switch (message.type) {\n @case ('success') {\n <span [kcClass]=\"'kcFeedbackSuccessIcon'\"></span>\n }\n @case ('warning') {\n <span [kcClass]=\"'kcFeedbackWarningIcon'\"></span>\n }\n @case ('info') {\n <span [kcClass]=\"'kcFeedbackInfoIcon'\"></span>\n }\n @case ('error') {\n <span [kcClass]=\"'kcFeedbackErrorIcon'\"></span>\n }\n }\n </div>\n <span\n [kcClass]=\"'kcAlertTitleClass'\"\n [innerHTML]=\"message.summary | kcSanitize: 'html'\"\n ></span>\n </div>\n }\n <!-- Content -->\n <ng-content select=\"[content]\"></ng-content>\n @if (!!auth && auth?.showTryAnotherWayLink) {\n <form\n id=\"kc-select-try-another-way-form\"\n [action]=\"url?.loginAction\"\n method=\"post\"\n >\n <div [kcClass]=\"'kcFormGroupClass'\">\n <div [kcClass]=\"'kcFormGroupClass'\">\n <input\n type=\"hidden\"\n name=\"tryAnotherWay\"\n value=\"on\"\n />\n <a\n id=\"try-another-way\"\n (click)=\"tryAnotherWay()\"\n >\n {{ i18n.msgStr('doTryAnotherWay') }}\n </a>\n </div>\n </div>\n </form>\n }\n\n <ng-content select=\"[socialProvidersNode]\"></ng-content>\n <!-- Info display -->\n @if (displayInfo()) {\n <div\n id=\"kc-info\"\n [kcClass]=\"'kcSignUpClass'\"\n >\n <div\n id=\"kc-info-wrapper\"\n [kcClass]=\"'kcInfoAreaWrapperClass'\"\n >\n <ng-content select=\"[infoNode]\"></ng-content>\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n}\n" }]
138
+ ], template: "@let realm = kcContext.realm;\n@let message = kcContext.message;\n@let auth = kcContext.auth;\n@let isAppInitiatedAction = kcContext.isAppInitiatedAction;\n@let url = kcContext.url;\n@let isReadyToRender = isReadyToRender$ | async;\n\n@if (isReadyToRender) {\n <div [kcClass]=\"'kcLoginClass'\">\n <div\n id=\"kc-header\"\n [kcClass]=\"'kcHeaderClass'\"\n >\n <div\n id=\"kc-header-wrapper\"\n [kcClass]=\"'kcHeaderWrapperClass'\"\n >\n <div [innerHTML]=\"realm?.displayNameHtml ?? '' | kcSanitize: 'html'\"></div>\n </div>\n </div>\n\n <div [kcClass]=\"'kcFormCardClass'\">\n <header [kcClass]=\"'kcFormHeaderClass'\">\n <!-- Locale switcher -->\n @if (i18n.enabledLanguages.length > 1) {\n <div\n id=\"kc-locale\"\n [kcClass]=\"'kcLocaleMainClass'\"\n >\n <div\n id=\"kc-locale-wrapper\"\n [kcClass]=\"'kcLocaleWrapperClass'\"\n >\n <div\n id=\"kc-locale-dropdown\"\n class=\"menu-button-links\"\n [kcClass]=\"'kcLocaleDropDownClass'\"\n >\n <button\n tabindex=\"1\"\n id=\"kc-current-locale-link\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n aria-controls=\"language-switch1\"\n [attr.aria-label]=\"i18n.msgStr('languages')\"\n >\n {{ i18n.currentLanguage.label }}\n </button>\n <ul\n role=\"menu\"\n tabindex=\"-1\"\n aria-labelledby=\"kc-current-locale-link\"\n aria-activedescendant=\"\"\n id=\"language-switch1\"\n [kcClass]=\"'kcLocaleListClass'\"\n >\n @for (entry of i18n.enabledLanguages; track entry; let idx = $index) {\n <li\n role=\"none\"\n [kcClass]=\"'kcLocaleListItemClass'\"\n >\n <a\n role=\"menuitem\"\n tabindex=\"-1\"\n [href]=\"entry.href\"\n [kcClass]=\"'kcLocaleItemClass'\"\n [id]=\"'language-' + idx\"\n >\n {{ entry.label }}\n </a>\n </li>\n }\n </ul>\n </div>\n </div>\n </div>\n }\n\n <!-- Header content -->\n <ng-template #node>\n @if (auth && !auth.showUsername && !auth.showResetCredentials) {\n <h1 id=\"kc-page-title\">\n @let header = headerNode && headerNode();\n @if (header) {\n <ng-container [ngTemplateOutlet]=\"header\" />\n }\n </h1>\n } @else {\n <div\n id=\"kc-username\"\n [kcClass]=\"'kcFormGroupClass'\"\n >\n <label id=\"kc-attempted-username\">{{ auth?.attemptedUsername }}</label>\n <a\n id=\"reset-login\"\n [href]=\"url?.loginRestartFlowUrl\"\n [attr.aria-label]=\"i18n.msgStr('restartLoginTooltip')\"\n >\n <div class=\"kc-login-tooltip\">\n <i [kcClass]=\"'kcResetFlowIcon'\"></i>\n <span class=\"kc-tooltip-text\">\n {{ i18n.msgStr('restartLoginTooltip') }}\n </span>\n </div>\n </a>\n </div>\n }\n </ng-template>\n\n @if (displayRequiredFields) {\n <div [kcClass]=\"'kcContentWrapperClass'\">\n <div\n class=\"subtitle\"\n [kcClass]=\"'kcLabelWrapperClass'\"\n >\n <span class=\"subtitle\">\n <span class=\"required\">*</span>\n {{ i18n.msgStr('requiredFields') }}\n </span>\n </div>\n <div class=\"col-md-10\">\n <ng-container [ngTemplateOutlet]=\"node\" />\n </div>\n </div>\n } @else {\n <ng-container [ngTemplateOutlet]=\"node\" />\n }\n </header>\n\n <div id=\"kc-content\">\n <div id=\"kc-content-wrapper\">\n <!-- Message display -->\n @if (displayMessage && message && (message.type !== 'warning' || !isAppInitiatedAction)) {\n <div\n [kcClass]=\"'kcAlertClass'\"\n [ngClass]=\"message.type === 'error' ? 'pf-m-danger' : 'pf-m-' + message.type\"\n [class]=\"'alert-' + message.type\"\n >\n <div class=\"pf-c-alert__icon\">\n @switch (message.type) {\n @case ('success') {\n <span [kcClass]=\"'kcFeedbackSuccessIcon'\"></span>\n }\n @case ('warning') {\n <span [kcClass]=\"'kcFeedbackWarningIcon'\"></span>\n }\n @case ('info') {\n <span [kcClass]=\"'kcFeedbackInfoIcon'\"></span>\n }\n @case ('error') {\n <span [kcClass]=\"'kcFeedbackErrorIcon'\"></span>\n }\n }\n </div>\n <span\n [kcClass]=\"'kcAlertTitleClass'\"\n [innerHTML]=\"message.summary | kcSanitize: 'html'\"\n ></span>\n </div>\n }\n <!-- Content -->\n @let pageRef = page();\n @if (!!pageRef) {\n <kc-dynamic-page-injector\n [page]=\"pageRef\"\n (componentCreated)=\"onComponentCreated($event)\"\n />\n }\n @if (!!auth && auth?.showTryAnotherWayLink) {\n <form\n id=\"kc-select-try-another-way-form\"\n method=\"post\"\n [action]=\"url?.loginAction\"\n >\n <div [kcClass]=\"'kcFormGroupClass'\">\n <div [kcClass]=\"'kcFormGroupClass'\">\n <input\n type=\"hidden\"\n name=\"tryAnotherWay\"\n value=\"on\"\n />\n <a\n id=\"try-another-way\"\n (click)=\"tryAnotherWay()\"\n >\n {{ i18n.msgStr('doTryAnotherWay') }}\n </a>\n </div>\n </div>\n </form>\n }\n @let socialProviders = socialProvidersNode && socialProvidersNode();\n @if (socialProviders) {\n <ng-container [ngTemplateOutlet]=\"socialProviders\" />\n }\n <!-- Info display -->\n @if (displayInfo) {\n <div\n id=\"kc-info\"\n [kcClass]=\"'kcSignUpClass'\"\n >\n <div\n id=\"kc-info-wrapper\"\n [kcClass]=\"'kcInfoAreaWrapperClass'\"\n >\n @let info = infoNode && infoNode();\n @if (info) {\n <ng-container [ngTemplateOutlet]=\"info\" />\n }\n </div>\n </div>\n }\n </div>\n </div>\n </div>\n </div>\n}\n" }]
71
139
  }], ctorParameters: () => [] });
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xvZ2luL2NvbnRhaW5lcnMvdGVtcGxhdGUvdGVtcGxhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2xvZ2luL2NvbnRhaW5lcnMvdGVtcGxhdGUvdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pILE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNsRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUM1RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNsRixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQztBQUMzRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDMUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ2hGLE9BQU8sRUFBaUIsU0FBUyxFQUFFLE1BQU0sOEJBQThCLENBQUM7O0FBa0J4RSxNQUFNLE9BQU8saUJBQWtCLFNBQVEsa0JBQWtCO0lBa0JyRDtRQUNJLEtBQUssRUFBRSxDQUFDO1FBbEJa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YyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixDQUFDLG1CQUN2RCx1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDO3dCQUNQOzRCQUNJLE9BQU8sRUFBRSxrQkFBa0I7NEJBQzNCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLGtCQUFrQixDQUFDO3lCQUNuRDtxQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzeW5jUGlwZSwgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBmb3J3YXJkUmVmLCBpbmplY3QsIGlucHV0LCBPbkluaXQsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWV0YSwgVGl0bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IEtjU2FuaXRpemVQaXBlIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvbGliL3BpcGVzL2tjLXNhbml0aXplJztcbmltcG9ydCB7IFVTRV9ERUZBVUxUX0NTUyB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2xpYi90b2tlbnMvdXNlLWRlZmF1bHQtY3NzJztcbmltcG9ydCB7IENvbXBvbmVudFJlZmVyZW5jZSB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2xvZ2luL2NsYXNzZXMvY29tcG9uZW50LXJlZmVyZW5jZSc7XG5pbXBvcnQgeyBLY0NsYXNzRGlyZWN0aXZlIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvbG9naW4vZGlyZWN0aXZlcy9rYy1jbGFzcyc7XG5pbXBvcnQgeyBMb2dpblJlc291cmNlSW5qZWN0b3JTZXJ2aWNlIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvbG9naW4vc2VydmljZXMvbG9naW4tcmVzb3VyY2UtaW5qZWN0b3InO1xuaW1wb3J0IHsgTE9HSU5fQ0xBU1NFUyB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2xvZ2luL3Rva2Vucy9jbGFzc2VzJztcbmltcG9ydCB7IExPR0lOX0kxOE4gfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9sb2dpbi90b2tlbnMvaTE4bic7XG5pbXBvcnQgeyBLQ19MT0dJTl9DT05URVhUIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvbG9naW4vdG9rZW5zL2tjLWNvbnRleHQnO1xuaW1wb3J0IHsgdHlwZSBDbGFzc0tleSwgZ2V0S2NDbHN4IH0gZnJvbSAna2V5Y2xvYWtpZnkvbG9naW4vbGliL2tjQ2xzeCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgdHlwZSB7IEkxOG4gfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9sb2dpbi9pMThuJztcbmltcG9ydCB7IEtjQ29udGV4dCB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2xvZ2luL0tjQ29udGV4dCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAna2MtbG9naW4tdGVtcGxhdGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbQXN5bmNQaXBlLCBLY1Nhbml0aXplUGlwZSwgTmdUZW1wbGF0ZU91dGxldCwgS2NDbGFzc0RpcmVjdGl2ZV0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IENvbXBvbmVudFJlZmVyZW5jZSxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRlbXBsYXRlQ29tcG9uZW50KVxuICAgICAgICB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZUNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudFJlZmVyZW5jZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgaTE4biA9IGluamVjdDxJMThuPihMT0dJTl9JMThOKTtcbiAgICByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xuICAgIG1ldGEgPSBpbmplY3QoTWV0YSk7XG4gICAgdGl0bGUgPSBpbmplY3QoVGl0bGUpO1xuICAgIGtjQ29udGV4dCA9IGluamVjdDxLY0NvbnRleHQ+KEtDX0xPR0lOX0NPTlRFWFQpO1xuICAgIG92ZXJyaWRlIGRvVXNlRGVmYXVsdENzcyA9IGluamVjdDxib29sZWFuPihVU0VfREVGQVVMVF9DU1MpO1xuICAgIG92ZXJyaWRlIGNsYXNzZXMgPSBpbmplY3Q8UGFydGlhbDxSZWNvcmQ8Q2xhc3NLZXksIHN0cmluZz4+PihMT0dJTl9DTEFTU0VTKTtcbiAgICBsb2dpblJlc291cmNlSW5qZWN0b3JTZXJ2aWNlID0gaW5qZWN0KExvZ2luUmVzb3VyY2VJbmplY3RvclNlcnZpY2UpO1xuXG4gICAgZGlzcGxheUluZm8gPSBpbnB1dChmYWxzZSk7XG4gICAgZGlzcGxheU1lc3NhZ2UgPSBpbnB1dCh0cnVlKTtcbiAgICBkaXNwbGF5UmVxdWlyZWRGaWVsZHMgPSBpbnB1dChmYWxzZSk7XG4gICAgZG9jdW1lbnRUaXRsZSA9IGlucHV0PHN0cmluZz4oKTtcbiAgICBib2R5Q2xhc3NOYW1lID0gaW5wdXQ8c3RyaW5nPigpO1xuXG4gICAgaXNSZWFkeVRvUmVuZGVyJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLnRpdGxlLnNldFRpdGxlKHRoaXMuZG9jdW1lbnRUaXRsZSgpID8/IHRoaXMuaTE4bi5tc2dTdHIoJ2xvZ2luVGl0bGUnLCB0aGlzLmtjQ29udGV4dC5yZWFsbS5kaXNwbGF5TmFtZSkpO1xuICAgICAgICB0aGlzLmlzUmVhZHlUb1JlbmRlciQgPSB0aGlzLmxvZ2luUmVzb3VyY2VJbmplY3RvclNlcnZpY2UuaW5qZWN0UmVzb3VyY2UodGhpcy5kb1VzZURlZmF1bHRDc3MpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmFwcGx5S2NJbmRleENsYXNzZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFwcGx5S2NJbmRleENsYXNzZXMoKSB7XG4gICAgICAgIGNvbnN0IGtjQ2xzeCA9IGdldEtjQ2xzeCh7XG4gICAgICAgICAgICBkb1VzZURlZmF1bHRDc3M6IHRoaXMuZG9Vc2VEZWZhdWx0Q3NzLFxuICAgICAgICAgICAgY2xhc3NlczogdGhpcy5jbGFzc2VzXG4gICAgICAgIH0pLmtjQ2xzeDtcbiAgICAgICAgY29uc3Qga2NCb2R5Q2xhc3MgPSB0aGlzLmJvZHlDbGFzc05hbWUoKSA/PyBrY0Nsc3goJ2tjQm9keUNsYXNzJyk7XG4gICAgICAgIGNvbnN0IGtjSHRtbENsYXNzID0ga2NDbHN4KCdrY0h0bWxDbGFzcycpO1xuICAgICAgICBjb25zdCBrY0JvZHlDbGFzc2VzID0ga2NCb2R5Q2xhc3Muc3BsaXQoL1xccysvKTtcbiAgICAgICAgY29uc3Qga2NIdG1sQ2xhc3NlcyA9IGtjSHRtbENsYXNzLnNwbGl0KC9cXHMrLyk7XG4gICAgICAgIGtjQm9keUNsYXNzZXMuZm9yRWFjaChrbGFzcyA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGRvY3VtZW50LmJvZHksIGtsYXNzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGtjSHRtbENsYXNzZXMuZm9yRWFjaChrbGFzcyA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwga2xhc3MpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0cnlBbm90aGVyV2F5KCkge1xuICAgICAgICBkb2N1bWVudC5mb3Jtc1sna2Mtc2VsZWN0LXRyeS1hbm90aGVyLXdheS1mb3JtJyBhcyBuZXZlcl0uc3VibWl0KCk7XG4gICAgfVxufVxuIiwiQGxldCByZWFsbSA9IGtjQ29udGV4dC5yZWFsbTtcbkBsZXQgbWVzc2FnZSA9IGtjQ29udGV4dC5tZXNzYWdlO1xuQGxldCBhdXRoID0ga2NDb250ZXh0LmF1dGg7XG5AbGV0IGlzQXBwSW5pdGlhdGVkQWN0aW9uID0ga2NDb250ZXh0LmlzQXBwSW5pdGlhdGVkQWN0aW9uO1xuQGxldCB1cmwgPSBrY0NvbnRleHQudXJsO1xuQGxldCBpc1JlYWR5VG9SZW5kZXIgPSBpc1JlYWR5VG9SZW5kZXIkIHwgYXN5bmM7XG5cbkBpZiAoaXNSZWFkeVRvUmVuZGVyKSB7XG4gICAgPGRpdiBba2NDbGFzc109XCIna2NMb2dpbkNsYXNzJ1wiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBpZD1cImtjLWhlYWRlclwiXG4gICAgICAgICAgICBba2NDbGFzc109XCIna2NIZWFkZXJDbGFzcydcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgaWQ9XCJrYy1oZWFkZXItd3JhcHBlclwiXG4gICAgICAgICAgICAgICAgW2tjQ2xhc3NdPVwiJ2tjSGVhZGVyV3JhcHBlckNsYXNzJ1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cInJlYWxtPy5kaXNwbGF5TmFtZUh0bWwgPz8gJycgfCBrY1Nhbml0aXplOiAnaHRtbCdcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IFtrY0NsYXNzXT1cIidrY0Zvcm1DYXJkQ2xhc3MnXCI+XG4gICAgICAgICAgICA8aGVhZGVyIFtrY0NsYXNzXT1cIidrY0Zvcm1IZWFkZXJDbGFzcydcIj5cbiAgICAgICAgICAgICAgICA8IS0tIExvY2FsZSBzd2l0Y2hlciAtLT5cbiAgICAgICAgICAgICAgICBAaWYgKGkxOG4uZW5hYmxlZExhbmd1YWdlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwia2MtbG9jYWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtrY0NsYXNzXT1cIidrY0xvY2FsZU1haW5DbGFzcydcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJrYy1sb2NhbGUtd3JhcHBlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2tjQ2xhc3NdPVwiJ2tjTG9jYWxlV3JhcHBlckNsYXNzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImtjLWxvY2FsZS1kcm9wZG93blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtrY0NsYXNzXT1cIidrY0xvY2FsZURyb3BEb3duQ2xhc3MnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZW51LWJ1dHRvbi1saW5rc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJrYy1jdXJyZW50LWxvY2FsZS1saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiaTE4bi5tc2dTdHIoJ2xhbmd1YWdlcycpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWNvbnRyb2xzPVwibGFuZ3VhZ2Utc3dpdGNoMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGkxOG4uY3VycmVudExhbmd1YWdlLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJtZW51XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PVwia2MtY3VycmVudC1sb2NhbGUtbGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWFjdGl2ZWRlc2NlbmRhbnQ9XCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJsYW5ndWFnZS1zd2l0Y2gxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtrY0NsYXNzXT1cIidrY0xvY2FsZUxpc3RDbGFzcydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChlbnRyeSBvZiBpMThuLmVuYWJsZWRMYW5ndWFnZXM7IHRyYWNrIGVudHJ5OyBsZXQgaWR4ID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtrY0NsYXNzXT1cIidrY0xvY2FsZUxpc3RJdGVtQ2xhc3MnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9sZT1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJtZW51aXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cImVudHJ5LmhyZWZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2tjQ2xhc3NdPVwiJ2tjTG9jYWxlSXRlbUNsYXNzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiJ2xhbmd1YWdlLScgKyBpZHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBlbnRyeS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICA8IS0tIEhlYWRlciBjb250ZW50IC0tPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9kZT5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChhdXRoICYmICFhdXRoLnNob3dVc2VybmFtZSAmJiAhYXV0aC5zaG93UmVzZXRDcmVkZW50aWFscykge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGgxIGlkPVwia2MtcGFnZS10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltoZWFkZXJOb2RlXVwiPjwvbmctY29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwia2MtdXNlcm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtrY0NsYXNzXT1cIidrY0Zvcm1Hcm91cENsYXNzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGlkPVwia2MtYXR0ZW1wdGVkLXVzZXJuYW1lXCI+e3sgYXV0aD8uYXR0ZW1wdGVkVXNlcm5hbWUgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwicmVzZXQtbG9naW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJ1cmw/LmxvZ2luUmVzdGFydEZsb3dVcmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImkxOG4ubXNnU3RyKCdyZXN0YXJ0TG9naW5Ub29sdGlwJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImtjLWxvZ2luLXRvb2x0aXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIFtrY0NsYXNzXT1cIidrY1Jlc2V0Rmxvd0ljb24nXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrYy10b29sdGlwLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpMThuLm1zZ1N0cigncmVzdGFydExvZ2luVG9vbHRpcCcpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgIEBpZiAoZGlzcGxheVJlcXVpcmVkRmllbGRzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBba2NDbGFzc109XCIna2NDb250ZW50V3JhcHBlckNsYXNzJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtrY0NsYXNzXT1cIidrY0xhYmVsV3JhcHBlckNsYXNzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzdWJ0aXRsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdWJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaTE4bi5tc2dTdHIoJ3JlcXVpcmVkRmllbGRzJykgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm5vZGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJub2RlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9oZWFkZXI+XG5cbiAgICAgICAgICAgIDxkaXYgaWQ9XCJrYy1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBpZD1cImtjLWNvbnRlbnQtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIE1lc3NhZ2UgZGlzcGxheSAtLT5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChkaXNwbGF5TWVzc2FnZSgpICYmIG1lc3NhZ2UgJiYgKG1lc3NhZ2UudHlwZSAhPT0gJ3dhcm5pbmcnIHx8ICFpc0FwcEluaXRpYXRlZEFjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBba2NDbGFzc109XCIna2NBbGVydENsYXNzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwibWVzc2FnZS50eXBlID09PSAnZXJyb3InID8gJ3BmLW0tZGFuZ2VyJyA6ICdwZi1tLScgKyBtZXNzYWdlLnR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCInYWxlcnQtJyArIG1lc3NhZ2UudHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBmLWMtYWxlcnRfX2ljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN3aXRjaCAobWVzc2FnZS50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ3N1Y2Nlc3MnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2tjQ2xhc3NdPVwiJ2tjRmVlZGJhY2tTdWNjZXNzSWNvbidcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ3dhcm5pbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2tjQ2xhc3NdPVwiJ2tjRmVlZGJhY2tXYXJuaW5nSWNvbidcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ2luZm8nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2tjQ2xhc3NdPVwiJ2tjRmVlZGJhY2tJbmZvSWNvbidcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ2Vycm9yJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtrY0NsYXNzXT1cIidrY0ZlZWRiYWNrRXJyb3JJY29uJ1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtrY0NsYXNzXT1cIidrY0FsZXJ0VGl0bGVDbGFzcydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIm1lc3NhZ2Uuc3VtbWFyeSB8IGtjU2FuaXRpemU6ICdodG1sJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gQ29udGVudCAtLT5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2NvbnRlbnRdXCI+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgICAgICAgICBAaWYgKCEhYXV0aCAmJiBhdXRoPy5zaG93VHJ5QW5vdGhlcldheUxpbmspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJrYy1zZWxlY3QtdHJ5LWFub3RoZXItd2F5LWZvcm1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY3Rpb25dPVwidXJsPy5sb2dpbkFjdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kPVwicG9zdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBba2NDbGFzc109XCIna2NGb3JtR3JvdXBDbGFzcydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBba2NDbGFzc109XCIna2NGb3JtR3JvdXBDbGFzcydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJoaWRkZW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ0cnlBbm90aGVyV2F5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cIm9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwidHJ5LWFub3RoZXItd2F5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidHJ5QW5vdGhlcldheSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpMThuLm1zZ1N0cignZG9UcnlBbm90aGVyV2F5JykgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbc29jaWFsUHJvdmlkZXJzTm9kZV1cIj48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gSW5mbyBkaXNwbGF5IC0tPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKGRpc3BsYXlJbmZvKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImtjLWluZm9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtrY0NsYXNzXT1cIidrY1NpZ25VcENsYXNzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImtjLWluZm8td3JhcHBlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtrY0NsYXNzXT1cIidrY0luZm9BcmVhV3JhcHBlckNsYXNzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbaW5mb05vZGVdXCI+PC9uZy1jb250ZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbn1cbiJdfQ==
140
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xvZ2luL2NvbnRhaW5lcnMvdGVtcGxhdGUvdGVtcGxhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vc3JjL2xvZ2luL2NvbnRhaW5lcnMvdGVtcGxhdGUvdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlELE9BQU8sRUFDSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sRUFDTixTQUFTLEVBSVQsZ0JBQWdCLEVBQ25CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUNsRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUM1RixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUdsRixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQztBQUMzRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDMUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ2hGLE9BQU8sRUFBaUIsU0FBUyxFQUFFLE1BQU0sOEJBQThCLENBQUM7O0FBUXhFLE1BQU0s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Q1AsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDN0IsQ0FBQzs4R0E1RlEsaUJBQWlCO2tHQUFqQixpQkFBaUIsK1ZBUGY7WUFDUDtnQkFDSSxPQUFPLEVBQUUsa0JBQWtCO2dCQUMzQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLGlCQUFpQixDQUFDO2FBQ25EO1NBQ0osaURDdEVMLG1wVUF5TkEsdUNEMUpjLFNBQVMseUNBQUUsY0FBYyxtREFBRSxnQkFBZ0Isb0pBQUUsZ0JBQWdCLCtGQTFCOUQsNEJBQTRCOzsyRkFtQzVCLGlCQUFpQjtrQkFiN0IsU0FBUzsrQkFDSSxTQUFTLGNBRVAsSUFBSSxXQUNQLENBQUMsU0FBUyxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSw0QkFBNEIsQ0FBQyxtQkFDckYsdUJBQXVCLENBQUMsTUFBTSxhQUNwQzt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsa0JBQWtCOzRCQUMzQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsQ0FBQzt5QkFDbkQ7cUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3luY1BpcGUsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgY29tcHV0ZWQsXG4gICAgZWZmZWN0LFxuICAgIGZvcndhcmRSZWYsXG4gICAgaW5qZWN0LFxuICAgIGlucHV0LFxuICAgIE9uSW5pdCxcbiAgICBvdXRwdXQsXG4gICAgUmVuZGVyZXIyLFxuICAgIFNpZ25hbCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBUeXBlLFxuICAgIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNZXRhLCBUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgS2NTYW5pdGl6ZVBpcGUgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9saWIvcGlwZXMva2Mtc2FuaXRpemUnO1xuaW1wb3J0IHsgVVNFX0RFRkFVTFRfQ1NTIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvbGliL3Rva2Vucy91c2UtZGVmYXVsdC1jc3MnO1xuaW1wb3J0IHsgQ29tcG9uZW50UmVmZXJlbmNlIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvbG9naW4vY2xhc3Nlcy9jb21wb25lbnQtcmVmZXJlbmNlJztcbmltcG9ydCB7IEtjQ2xhc3NEaXJlY3RpdmUgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9sb2dpbi9kaXJlY3RpdmVzL2tjLWNsYXNzJztcbmltcG9ydCB0eXBlIHsgSTE4biB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2xvZ2luL2kxOG4nO1xuaW1wb3J0IHsgS2NDb250ZXh0IH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvbG9naW4vS2NDb250ZXh0JztcbmltcG9ydCB7IExvZ2luUmVzb3VyY2VJbmplY3RvclNlcnZpY2UgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9sb2dpbi9zZXJ2aWNlcy9sb2dpbi1yZXNvdXJjZS1pbmplY3Rvcic7XG5pbXBvcnQgeyBMT0dJTl9DTEFTU0VTIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvbG9naW4vdG9rZW5zL2NsYXNzZXMnO1xuaW1wb3J0IHsgTE9HSU5fSTE4TiB9IGZyb20gJ0BrZXljbG9ha2lmeS9hbmd1bGFyL2xvZ2luL3Rva2Vucy9pMThuJztcbmltcG9ydCB7IEtDX0xPR0lOX0NPTlRFWFQgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9sb2dpbi90b2tlbnMva2MtY29udGV4dCc7XG5pbXBvcnQgeyB0eXBlIENsYXNzS2V5LCBnZXRLY0Nsc3ggfSBmcm9tICdrZXljbG9ha2lmeS9sb2dpbi9saWIva2NDbHN4JztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdrYy1keW5hbWljLXBhZ2UtaW5qZWN0b3InLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGU6IGBgXG59KVxuZXhwb3J0IGNsYXNzIER5bmFtaWNQYWdlSW5qZWN0b3JDb21wb25lbnQge1xuICAgIHBhZ2UgPSBpbnB1dDxUeXBlPHVua25vd24+PigpO1xuICAgIHVzZXJQcm9maWxlRm9ybUZpZWxkcyA9IGlucHV0PFR5cGU8dW5rbm93bj4+KCk7XG4gICAgY29tcG9uZW50Q3JlYXRlZCA9IG91dHB1dDxvYmplY3Q+KCk7XG4gICAgI3ZjciA9IGluamVjdDxWaWV3Q29udGFpbmVyUmVmPihWaWV3Q29udGFpbmVyUmVmKTtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgZWZmZWN0KFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhZ2UgPSB0aGlzLnBhZ2UoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB1c2VyUHJvZmlsZUZvcm1GaWVsZHMgPSB0aGlzLnVzZXJQcm9maWxlRm9ybUZpZWxkcygpO1xuICAgICAgICAgICAgICAgIGlmICghcGFnZSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBSZWYgPSB0aGlzLiN2Y3IuY3JlYXRlQ29tcG9uZW50KHBhZ2UpO1xuICAgICAgICAgICAgICAgIGlmICgndXNlclByb2ZpbGVGb3JtRmllbGRzJyBpbiBjb21wUmVmICYmIHVzZXJQcm9maWxlRm9ybUZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICBjb21wUmVmLnNldElucHV0KCd1c2VyUHJvZmlsZUZvcm1GaWVsZHMnLCB1c2VyUHJvZmlsZUZvcm1GaWVsZHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudENyZWF0ZWQuZW1pdChjb21wUmVmLmluc3RhbmNlIGFzIG9iamVjdCk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgICAgICk7XG4gICAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2tjLXJvb3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbQXN5bmNQaXBlLCBLY1Nhbml0aXplUGlwZSwgTmdUZW1wbGF0ZU91dGxldCwgS2NDbGFzc0RpcmVjdGl2ZSwgRHluYW1pY1BhZ2VJbmplY3RvckNvbXBvbmVudF0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IENvbXBvbmVudFJlZmVyZW5jZSxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRlbXBsYXRlQ29tcG9uZW50KVxuICAgICAgICB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZUNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudFJlZmVyZW5jZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgaTE4biA9IGluamVjdDxJMThuPihMT0dJTl9JMThOKTtcbiAgICByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xuICAgICNjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuICAgIG1ldGEgPSBpbmplY3QoTWV0YSk7XG4gICAgdGl0bGUgPSBpbmplY3QoVGl0bGUpO1xuICAgIGtjQ29udGV4dCA9IGluamVjdDxLY0NvbnRleHQ+KEtDX0xPR0lOX0NPTlRFWFQpO1xuICAgIG92ZXJyaWRlIGRvVXNlRGVmYXVsdENzcyA9IGluamVjdDxib29sZWFuPihVU0VfREVGQVVMVF9DU1MpO1xuICAgIG92ZXJyaWRlIGNsYXNzZXMgPSBpbmplY3Q8UGFydGlhbDxSZWNvcmQ8Q2xhc3NLZXksIHN0cmluZz4+PihMT0dJTl9DTEFTU0VTKTtcbiAgICBsb2dpblJlc291cmNlSW5qZWN0b3JTZXJ2aWNlID0gaW5qZWN0KExvZ2luUmVzb3VyY2VJbmplY3RvclNlcnZpY2UpO1xuXG4gICAgZGlzcGxheUluZm8gPSBmYWxzZTtcbiAgICBkaXNwbGF5TWVzc2FnZSA9IHRydWU7XG4gICAgZGlzcGxheVJlcXVpcmVkRmllbGRzID0gZmFsc2U7XG4gICAgZG9jdW1lbnRUaXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGJvZHlDbGFzc05hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGlzUmVhZHlUb1JlbmRlciQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgICBwYWdlID0gaW5wdXQ8VHlwZTx1bmtub3duPj4oKTtcbiAgICB1c2VyUHJvZmlsZUZvcm1GaWVsZHMgPSBpbnB1dDxUeXBlPHVua25vd24+PigpO1xuICAgIGhlYWRlck5vZGU6IFNpZ25hbDxUZW1wbGF0ZVJlZjxIVE1MRWxlbWVudD4+IHwgdW5kZWZpbmVkO1xuICAgIGluZm9Ob2RlOiBTaWduYWw8VGVtcGxhdGVSZWY8SFRNTEVsZW1lbnQ+PiB8IHVuZGVmaW5lZDtcbiAgICBzb2NpYWxQcm92aWRlcnNOb2RlOiBTaWduYWw8VGVtcGxhdGVSZWY8SFRNTEVsZW1lbnQ+PiB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIHRoaXMudGl0bGUuc2V0VGl0bGUodGhpcy5kb2N1bWVudFRpdGxlID8/IHRoaXMuaTE4bi5tc2dTdHIoJ2xvZ2luVGl0bGUnLCB0aGlzLmtjQ29udGV4dC5yZWFsbS5kaXNwbGF5TmFtZSkpO1xuICAgICAgICB0aGlzLmlzUmVhZHlUb1JlbmRlciQgPSB0aGlzLmxvZ2luUmVzb3VyY2VJbmplY3RvclNlcnZpY2UuaW5qZWN0UmVzb3VyY2UodGhpcy5kb1VzZURlZmF1bHRDc3MpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmFwcGx5S2NJbmRleENsYXNzZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFwcGx5S2NJbmRleENsYXNzZXMoKSB7XG4gICAgICAgIGNvbnN0IGtjQ2xzeCA9IGdldEtjQ2xzeCh7XG4gICAgICAgICAgICBkb1VzZURlZmF1bHRDc3M6IHRoaXMuZG9Vc2VEZWZhdWx0Q3NzLFxuICAgICAgICAgICAgY2xhc3NlczogdGhpcy5jbGFzc2VzXG4gICAgICAgIH0pLmtjQ2xzeDtcbiAgICAgICAgY29uc3Qga2NCb2R5Q2xhc3MgPSB0aGlzLmJvZHlDbGFzc05hbWUgPz8ga2NDbHN4KCdrY0JvZHlDbGFzcycpO1xuICAgICAgICBjb25zdCBrY0h0bWxDbGFzcyA9IGtjQ2xzeCgna2NIdG1sQ2xhc3MnKTtcbiAgICAgICAgY29uc3Qga2NCb2R5Q2xhc3NlcyA9IGtjQm9keUNsYXNzLnNwbGl0KC9cXHMrLyk7XG4gICAgICAgIGNvbnN0IGtjSHRtbENsYXNzZXMgPSBrY0h0bWxDbGFzcy5zcGxpdCgvXFxzKy8pO1xuICAgICAgICBrY0JvZHlDbGFzc2VzLmZvckVhY2goa2xhc3MgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhkb2N1bWVudC5ib2R5LCBrbGFzcyk7XG4gICAgICAgIH0pO1xuICAgICAgICBrY0h0bWxDbGFzc2VzLmZvckVhY2goa2xhc3MgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIGtsYXNzKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdHJ5QW5vdGhlcldheSgpIHtcbiAgICAgICAgZG9jdW1lbnQuZm9ybXNbJ2tjLXNlbGVjdC10cnktYW5vdGhlci13YXktZm9ybScgYXMgbmV2ZXJdLnN1Ym1pdCgpO1xuICAgIH1cblxuICAgIG9uQ29tcG9uZW50Q3JlYXRlZChjb21wUmVmOiBvYmplY3QpIHtcbiAgICAgICAgaWYgKCdkaXNwbGF5SW5mbycgaW4gY29tcFJlZiAmJiBjb21wUmVmLmRpc3BsYXlJbmZvKSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlJbmZvID0gY29tcFJlZi5kaXNwbGF5SW5mbyBhcyBib29sZWFuO1xuICAgICAgICB9XG4gICAgICAgIGlmICgnZGlzcGxheU1lc3NhZ2UnIGluIGNvbXBSZWYgJiYgY29tcFJlZi5kaXNwbGF5TWVzc2FnZSkge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5TWVzc2FnZSA9IGNvbXBSZWYuZGlzcGxheU1lc3NhZ2UgYXMgYm9vbGVhbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoJ2Rpc3BsYXlSZXF1aXJlZEZpZWxkcycgaW4gY29tcFJlZiAmJiBjb21wUmVmLmRpc3BsYXlSZXF1aXJlZEZpZWxkcykge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5UmVxdWlyZWRGaWVsZHMgPSBjb21wUmVmLmRpc3BsYXlSZXF1aXJlZEZpZWxkcyBhcyBib29sZWFuO1xuICAgICAgICB9XG4gICAgICAgIGlmICgnZG9jdW1lbnRUaXRsZScgaW4gY29tcFJlZiAmJiBjb21wUmVmLmRvY3VtZW50VGl0bGUpIHtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRUaXRsZSA9IGNvbXBSZWYuZG9jdW1lbnRUaXRsZSBhcyBzdHJpbmc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCdib2R5Q2xhc3NOYW1lJyBpbiBjb21wUmVmICYmIGNvbXBSZWYuYm9keUNsYXNzTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5ib2R5Q2xhc3NOYW1lID0gY29tcFJlZi5ib2R5Q2xhc3NOYW1lIGFzIHN0cmluZztcbiAgICAgICAgfVxuICAgICAgICBpZiAoJ2hlYWRlck5vZGUnIGluIGNvbXBSZWYgJiYgY29tcFJlZi5oZWFkZXJOb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmhlYWRlck5vZGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGVhZGVyTm9kZSA9IChjb21wUmVmLmhlYWRlck5vZGUgYXMgU2lnbmFsPFRlbXBsYXRlUmVmPEhUTUxFbGVtZW50Pj4pKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhlYWRlck5vZGU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoJ2luZm9Ob2RlJyBpbiBjb21wUmVmICYmIGNvbXBSZWYuaW5mb05vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuaW5mb05vZGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5mb05vZGUgPSAoY29tcFJlZi5pbmZvTm9kZSBhcyBTaWduYWw8VGVtcGxhdGVSZWY8SFRNTEVsZW1lbnQ+PikoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5mb05vZGU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoJ3NvY2lhbFByb3ZpZGVyc05vZGUnIGluIGNvbXBSZWYgJiYgY29tcFJlZi5zb2NpYWxQcm92aWRlcnNOb2RlKSB7XG4gICAgICAgICAgICB0aGlzLnNvY2lhbFByb3ZpZGVyc05vZGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc29jaWFsUHJvdmlkZXJzTm9kZSA9IChjb21wUmVmLnNvY2lhbFByb3ZpZGVyc05vZGUgYXMgU2lnbmFsPFRlbXBsYXRlUmVmPEhUTUxFbGVtZW50Pj4pKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNvY2lhbFByb3ZpZGVyc05vZGU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNjZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxufVxuIiwiQGxldCByZWFsbSA9IGtjQ29udGV4dC5yZWFsbTtcbkBsZXQgbWVzc2FnZSA9IGtjQ29udGV4dC5tZXNzYWdlO1xuQGxldCBhdXRoID0ga2NDb250ZXh0LmF1dGg7XG5AbGV0IGlzQXBwSW5pdGlhdGVkQWN0aW9uID0ga2NDb250ZXh0LmlzQXBwSW5pdGlhdGVkQWN0aW9uO1xuQGxldCB1cmwgPSBrY0NvbnRleHQudXJsO1xuQGxldCBpc1JlYWR5VG9SZW5kZXIgPSBpc1JlYWR5VG9SZW5kZXIkIHwgYXN5bmM7XG5cbkBpZiAoaXNSZWFkeVRvUmVuZGVyKSB7XG4gICAgPGRpdiBba2NDbGFzc109XCIna2NMb2dpbkNsYXNzJ1wiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBpZD1cImtjLWhlYWRlclwiXG4gICAgICAgICAgICBba2NDbGFzc109XCIna2NIZWFkZXJDbGFzcydcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgaWQ9XCJrYy1oZWFkZXItd3JhcHBlclwiXG4gICAgICAgICAgICAgICAgW2tjQ2xhc3NdPVwiJ2tjSGVhZGVyV3JhcHBlckNsYXNzJ1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cInJlYWxtPy5kaXNwbGF5TmFtZUh0bWwgPz8gJycgfCBrY1Nhbml0aXplOiAnaHRtbCdcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IFtrY0NsYXNzXT1cIidrY0Zvcm1DYXJkQ2xhc3MnXCI+XG4gICAgICAgICAgICA8aGVhZGVyIFtrY0NsYXNzXT1cIidrY0Zvcm1IZWFkZXJDbGFzcydcIj5cbiAgICAgICAgICAgICAgICA8IS0tIExvY2FsZSBzd2l0Y2hlciAtLT5cbiAgICAgICAgICAgICAgICBAaWYgKGkxOG4uZW5hYmxlZExhbmd1YWdlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwia2MtbG9jYWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtrY0NsYXNzXT1cIidrY0xvY2FsZU1haW5DbGFzcydcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJrYy1sb2NhbGUtd3JhcHBlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2tjQ2xhc3NdPVwiJ2tjTG9jYWxlV3JhcHBlckNsYXNzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImtjLWxvY2FsZS1kcm9wZG93blwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWVudS1idXR0b24tbGlua3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBba2NDbGFzc109XCIna2NMb2NhbGVEcm9wRG93bkNsYXNzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJrYy1jdXJyZW50LWxvY2FsZS1saW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWNvbnRyb2xzPVwibGFuZ3VhZ2Utc3dpdGNoMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImkxOG4ubXNnU3RyKCdsYW5ndWFnZXMnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGkxOG4uY3VycmVudExhbmd1YWdlLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJtZW51XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbGxlZGJ5PVwia2MtY3VycmVudC1sb2NhbGUtbGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWFjdGl2ZWRlc2NlbmRhbnQ9XCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJsYW5ndWFnZS1zd2l0Y2gxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtrY0NsYXNzXT1cIidrY0xvY2FsZUxpc3RDbGFzcydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChlbnRyeSBvZiBpMThuLmVuYWJsZWRMYW5ndWFnZXM7IHRyYWNrIGVudHJ5OyBsZXQgaWR4ID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2tjQ2xhc3NdPVwiJ2tjTG9jYWxlTGlzdEl0ZW1DbGFzcydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9XCJtZW51aXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cImVudHJ5LmhyZWZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2tjQ2xhc3NdPVwiJ2tjTG9jYWxlSXRlbUNsYXNzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiJ2xhbmd1YWdlLScgKyBpZHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBlbnRyeS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICA8IS0tIEhlYWRlciBjb250ZW50IC0tPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9kZT5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChhdXRoICYmICFhdXRoLnNob3dVc2VybmFtZSAmJiAhYXV0aC5zaG93UmVzZXRDcmVkZW50aWFscykge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGgxIGlkPVwia2MtcGFnZS10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBsZXQgaGVhZGVyID0gaGVhZGVyTm9kZSAmJiBoZWFkZXJOb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChoZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJoZWFkZXJcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwia2MtdXNlcm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtrY0NsYXNzXT1cIidrY0Zvcm1Hcm91cENsYXNzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGlkPVwia2MtYXR0ZW1wdGVkLXVzZXJuYW1lXCI+e3sgYXV0aD8uYXR0ZW1wdGVkVXNlcm5hbWUgfX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwicmVzZXQtbG9naW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJ1cmw/LmxvZ2luUmVzdGFydEZsb3dVcmxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImkxOG4ubXNnU3RyKCdyZXN0YXJ0TG9naW5Ub29sdGlwJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImtjLWxvZ2luLXRvb2x0aXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIFtrY0NsYXNzXT1cIidrY1Jlc2V0Rmxvd0ljb24nXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrYy10b29sdGlwLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpMThuLm1zZ1N0cigncmVzdGFydExvZ2luVG9vbHRpcCcpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgIEBpZiAoZGlzcGxheVJlcXVpcmVkRmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW2tjQ2xhc3NdPVwiJ2tjQ29udGVudFdyYXBwZXJDbGFzcydcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInN1YnRpdGxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBba2NDbGFzc109XCIna2NMYWJlbFdyYXBwZXJDbGFzcydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3VidGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGkxOG4ubXNnU3RyKCdyZXF1aXJlZEZpZWxkcycpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJub2RlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJub2RlXCIgLz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2hlYWRlcj5cblxuICAgICAgICAgICAgPGRpdiBpZD1cImtjLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwia2MtY29udGVudC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gTWVzc2FnZSBkaXNwbGF5IC0tPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKGRpc3BsYXlNZXNzYWdlICYmIG1lc3NhZ2UgJiYgKG1lc3NhZ2UudHlwZSAhPT0gJ3dhcm5pbmcnIHx8ICFpc0FwcEluaXRpYXRlZEFjdGlvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBba2NDbGFzc109XCIna2NBbGVydENsYXNzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwibWVzc2FnZS50eXBlID09PSAnZXJyb3InID8gJ3BmLW0tZGFuZ2VyJyA6ICdwZi1tLScgKyBtZXNzYWdlLnR5cGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCInYWxlcnQtJyArIG1lc3NhZ2UudHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBmLWMtYWxlcnRfX2ljb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQHN3aXRjaCAobWVzc2FnZS50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ3N1Y2Nlc3MnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2tjQ2xhc3NdPVwiJ2tjRmVlZGJhY2tTdWNjZXNzSWNvbidcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ3dhcm5pbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2tjQ2xhc3NdPVwiJ2tjRmVlZGJhY2tXYXJuaW5nSWNvbidcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ2luZm8nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2tjQ2xhc3NdPVwiJ2tjRmVlZGJhY2tJbmZvSWNvbidcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAoJ2Vycm9yJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtrY0NsYXNzXT1cIidrY0ZlZWRiYWNrRXJyb3JJY29uJ1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtrY0NsYXNzXT1cIidrY0FsZXJ0VGl0bGVDbGFzcydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cIm1lc3NhZ2Uuc3VtbWFyeSB8IGtjU2FuaXRpemU6ICdodG1sJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gQ29udGVudCAtLT5cbiAgICAgICAgICAgICAgICAgICAgQGxldCBwYWdlUmVmID0gcGFnZSgpO1xuICAgICAgICAgICAgICAgICAgICBAaWYgKCEhcGFnZVJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGtjLWR5bmFtaWMtcGFnZS1pbmplY3RvclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwYWdlXT1cInBhZ2VSZWZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb21wb25lbnRDcmVhdGVkKT1cIm9uQ29tcG9uZW50Q3JlYXRlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmICghIWF1dGggJiYgYXV0aD8uc2hvd1RyeUFub3RoZXJXYXlMaW5rKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8Zm9ybVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwia2Mtc2VsZWN0LXRyeS1hbm90aGVyLXdheS1mb3JtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q9XCJwb3N0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWN0aW9uXT1cInVybD8ubG9naW5BY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2tjQ2xhc3NdPVwiJ2tjRm9ybUdyb3VwQ2xhc3MnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2tjQ2xhc3NdPVwiJ2tjRm9ybUdyb3VwQ2xhc3MnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiaGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwidHJ5QW5vdGhlcldheVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInRyeS1hbm90aGVyLXdheVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRyeUFub3RoZXJXYXkoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaTE4bi5tc2dTdHIoJ2RvVHJ5QW5vdGhlcldheScpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBsZXQgc29jaWFsUHJvdmlkZXJzID0gc29jaWFsUHJvdmlkZXJzTm9kZSAmJiBzb2NpYWxQcm92aWRlcnNOb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoc29jaWFsUHJvdmlkZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInNvY2lhbFByb3ZpZGVyc1wiIC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBJbmZvIGRpc3BsYXkgLS0+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoZGlzcGxheUluZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImtjLWluZm9cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtrY0NsYXNzXT1cIidrY1NpZ25VcENsYXNzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImtjLWluZm8td3JhcHBlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtrY0NsYXNzXT1cIidrY0luZm9BcmVhV3JhcHBlckNsYXNzJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAbGV0IGluZm8gPSBpbmZvTm9kZSAmJiBpbmZvTm9kZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGluZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaW5mb1wiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG59XG4iXX0=
@@ -1,8 +1,8 @@
1
1
  /* eslint-disable @typescript-eslint/no-explicit-any */
2
2
  /* eslint-disable @typescript-eslint/consistent-indexed-object-style */
3
3
  import { Directive, ElementRef, inject, Input, isDevMode, Renderer2, ɵstringify as stringify } from '@angular/core';
4
- import { getKcClsx } from 'keycloakify/login/lib/kcClsx';
5
4
  import { ComponentReference } from '@keycloakify/angular/login/classes/component-reference';
5
+ import { getKcClsx } from 'keycloakify/login/lib/kcClsx';
6
6
  import * as i0 from "@angular/core";
7
7
  export class KcClassDirective {
8
8
  constructor() {
@@ -119,10 +119,10 @@ export class KcClassDirective {
119
119
  });
120
120
  }
121
121
  }
122
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: KcClassDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
123
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.6", type: KcClassDirective, isStandalone: true, selector: "[kcClass]", inputs: { klass: ["class", "klass"], ngClass: "ngClass", kcClass: "kcClass" }, ngImport: i0 }); }
122
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: KcClassDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
123
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.7", type: KcClassDirective, isStandalone: true, selector: "[kcClass]", inputs: { klass: ["class", "klass"], ngClass: "ngClass", kcClass: "kcClass" }, ngImport: i0 }); }
124
124
  }
125
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: KcClassDirective, decorators: [{
125
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: KcClassDirective, decorators: [{
126
126
  type: Directive,
127
127
  args: [{ selector: '[kcClass]', standalone: true }]
128
128
  }], propDecorators: { klass: [{
@@ -135,4 +135,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImpor
135
135
  type: Input,
136
136
  args: ['kcClass']
137
137
  }] } });
138
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2MtY2xhc3MuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xvZ2luL2RpcmVjdGl2ZXMva2MtY2xhc3Mva2MtY2xhc3MuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCx1RUFBdUU7QUFDdkUsT0FBTyxFQUNILFNBQVMsRUFFVCxVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFDTCxTQUFTLEVBQ1QsU0FBUyxFQUNULFVBQVUsSUFBSSxTQUFTLEVBQzFCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQzs7QUF3QjVGLE1BQU0sT0FBTyxnQkFBZ0I7SUFEN0I7UUFFWSxtQkFBYyxHQUFhLEVBQUUsQ0FBQztRQUk5QixhQUFRLEdBQUcsSUFBSSxHQUFHLEVBQW9DLENBQUM7UUFDdEQsY0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5QixRQUFHLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pCLFVBQUssR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztLQXdIL0M7SUExSFksU0FBUyxDQUFxQjtJQUM5QixHQUFHLENBQXNCO0lBQ3pCLEtBQUssQ0FBOEI7SUFDNUMsMkRBQTJEO0lBQzNELElBQ0ksS0FBSyxDQUFDLEtBQWE7UUFDbkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDekUsQ0FBQztJQUVELDJEQUEyRDtJQUMzRCxJQUNJLE9BQU8sQ0FBQyxLQUFxQztRQUM3QyxJQUFJLENBQUMsUUFB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ZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvY29uc2lzdGVudC1pbmRleGVkLW9iamVjdC1zdHlsZSAqL1xuaW1wb3J0IHtcbiAgICBEaXJlY3RpdmUsXG4gICAgRG9DaGVjayxcbiAgICBFbGVtZW50UmVmLFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBpc0Rldk1vZGUsXG4gICAgUmVuZGVyZXIyLFxuICAgIMm1c3RyaW5naWZ5IGFzIHN0cmluZ2lmeVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgQ2xhc3NLZXkgfSBmcm9tICdrZXljbG9ha2lmeS9sb2dpbi9saWIva2NDbHN4JztcbmltcG9ydCB7IGdldEtjQ2xzeCB9IGZyb20gJ2tleWNsb2FraWZ5L2xvZ2luL2xpYi9rY0Nsc3gnO1xuaW1wb3J0IHsgQ29tcG9uZW50UmVmZXJlbmNlIH0gZnJvbSAnQGtleWNsb2FraWZ5L2FuZ3VsYXIvbG9naW4vY2xhc3Nlcy9jb21wb25lbnQtcmVmZXJlbmNlJztcblxuaW50ZXJmYWNlIENzc0NsYXNzU3RhdGUge1xuICAgIC8vIFBFUkY6IGNvdWxkIHVzZSBhIGJpdCBtYXNrIHRvIHJlcHJlc2VudCBzdGF0ZSBhcyBhbGwgZmllbGRzIGFyZSBib29sZWFuIGZsYWdzXG4gICAgZW5hYmxlZDogYm9vbGVhbjtcbiAgICBjaGFuZ2VkOiBib29sZWFuO1xuICAgIHRvdWNoZWQ6IGJvb2xlYW47XG59XG5cbnR5cGUgS2NDbGFzc1N1cHBvcnRlZFR5cGVzID1cbiAgICB8IENsYXNzS2V5W11cbiAgICB8IFNldDxDbGFzc0tleT5cbiAgICB8IFBhcnRpYWw8eyBba2V5IGluIENsYXNzS2V5XTogYW55IH0+XG4gICAgfCBudWxsXG4gICAgfCB1bmRlZmluZWQ7XG5cbnR5cGUgTmdDbGFzc1N1cHBvcnRlZFR5cGVzID1cbiAgICB8IHN0cmluZ1tdXG4gICAgfCBTZXQ8c3RyaW5nPlxuICAgIHwgeyBba2V5OiBzdHJpbmddOiBhbnkgfVxuICAgIHwgbnVsbFxuICAgIHwgdW5kZWZpbmVkO1xuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdba2NDbGFzc10nLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgS2NDbGFzc0RpcmVjdGl2ZSBpbXBsZW1lbnRzIERvQ2hlY2sge1xuICAgIHByaXZhdGUgaW5pdGlhbENsYXNzZXM6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSByYXdDbGFzczogTmdDbGFzc1N1cHBvcnRlZFR5cGVzO1xuICAgIHByaXZhdGUgcmF3S2NDbGFzczogS2NDbGFzc1N1cHBvcnRlZFR5cGVzO1xuXG4gICAgcHJpdmF0ZSBzdGF0ZU1hcCA9IG5ldyBNYXA8c3RyaW5nIHwgQ2xhc3NLZXksIENzc0NsYXNzU3RhdGU+KCk7XG4gICAgcmVhZG9ubHkgI3JlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyMik7XG4gICAgcmVhZG9ubHkgI2VsID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICAgIHJlYWRvbmx5ICNob3N0ID0gaW5qZWN0KENvbXBvbmVudFJlZmVyZW5jZSk7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1pbnB1dC1yZW5hbWVcbiAgICBASW5wdXQoJ2NsYXNzJylcbiAgICBzZXQga2xhc3ModmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLmluaXRpYWxDbGFzc2VzID0gdmFsdWUgIT0gbnVsbCA/IHZhbHVlLnRyaW0oKS5zcGxpdCgvXFxzKy8pIDogW107XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1pbnB1dC1yZW5hbWVcbiAgICBASW5wdXQoJ25nQ2xhc3MnKVxuICAgIHNldCBuZ0NsYXNzKHZhbHVlOiBzdHJpbmcgfCBOZ0NsYXNzU3VwcG9ydGVkVHlwZXMpIHtcbiAgICAgICAgdGhpcy5yYXdDbGFzcyA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZS50cmltKCkuc3BsaXQoL1xccysvKSA6IHZhbHVlO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8taW5wdXQtcmVuYW1lXG4gICAgQElucHV0KCdrY0NsYXNzJylcbiAgICBzZXQga2NDbGFzcyh2YWx1ZTogQ2xhc3NLZXkgfCBLY0NsYXNzU3VwcG9ydGVkVHlwZXMpIHtcbiAgICAgICAgdGhpcy5yYXdLY0NsYXNzID1cbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyAodmFsdWUudHJpbSgpLnNwbGl0KC9cXHMrLykgYXMgQ2xhc3NLZXlbXSkgOiB2YWx1ZTtcbiAgICB9XG5cbiAgICBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3Qga2xhc3Mgb2YgdGhpcy5pbml0aWFsQ2xhc3Nlcykge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlU3RhdGUoa2xhc3MsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNsYXNzZXMgZnJvbSB0aGUgW25nQ2xhc3NdIGJpbmRpbmdcbiAgICAgICAgY29uc3QgcmF3Q2xhc3MgPSB0aGlzLnJhd0NsYXNzO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyYXdDbGFzcykgfHwgcmF3Q2xhc3MgaW5zdGFuY2VvZiBTZXQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2xhc3Mgb2YgcmF3Q2xhc3MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVTdGF0ZShrbGFzcywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocmF3Q2xhc3MgIT0gbnVsbCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrbGFzcyBvZiBPYmplY3Qua2V5cyhyYXdDbGFzcykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVTdGF0ZShrbGFzcywgQm9vbGVhbihyYXdDbGFzc1trbGFzc10pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNsYXNzZXMgZnJvbSB0aGUgW2tjQ2xhc3NdIGJpbmRpbmdcbiAgICAgICAgY29uc3QgcmF3S2NDbGFzcyA9IHRoaXMucmF3S2NDbGFzcztcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmF3S2NDbGFzcykgfHwgcmF3S2NDbGFzcyBpbnN0YW5jZW9mIFNldCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrbGFzcyBvZiByYXdLY0NsYXNzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlU3RhdGUoa2xhc3MsIHRydWUsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHJhd0tjQ2xhc3MgIT0gbnVsbCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrbGFzcyBvZiBPYmplY3Qua2V5cyhyYXdLY0NsYXNzKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVN0YXRlKGtsYXNzLCBCb29sZWFuKHJhd0tjQ2xhc3Nba2xhc3MgYXMgQ2xhc3NLZXldKSwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9hcHBseVN0YXRlRGlmZigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3VwZGF0ZVN0YXRlKFxuICAgICAgICBrbGFzczogc3RyaW5nIHwgQ2xhc3NLZXksXG4gICAgICAgIG5leHRFbmFibGVkOiBib29sZWFuLFxuICAgICAgICBrY0Nsc3hDaGVjayA9IGZhbHNlXG4gICAgKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5zdGF0ZU1hcC5nZXQoa2xhc3MpO1xuICAgICAgICBpZiAoc3RhdGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHN0YXRlLmVuYWJsZWQgIT09IG5leHRFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgc3RhdGUuY2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgc3RhdGUuZW5hYmxlZCA9IG5leHRFbmFibGVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhdGUudG91Y2hlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQga2xhc3NDaGVja2VkID0ga2xhc3M7XG4gICAgICAgICAgICBpZiAoa2NDbHN4Q2hlY2spIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkb1VzZURlZmF1bHRDc3MgPSB0aGlzLiNob3N0LmRvVXNlRGVmYXVsdENzcyA/PyB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNsYXNzZXMgPSB0aGlzLiNob3N0LmNsYXNzZXM7XG4gICAgICAgICAgICAgICAgY29uc3Qga2NDbHN4ID0gZ2V0S2NDbHN4KHsgZG9Vc2VEZWZhdWx0Q3NzLCBjbGFzc2VzIH0pLmtjQ2xzeDtcbiAgICAgICAgICAgICAgICBrbGFzc0NoZWNrZWQgPSBrY0Nsc3goa2xhc3MgYXMgQ2xhc3NLZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGF0ZU1hcC5zZXQoa2xhc3NDaGVja2VkLCB7XG4gICAgICAgICAgICAgICAgZW5hYmxlZDogbmV4dEVuYWJsZWQsXG4gICAgICAgICAgICAgICAgY2hhbmdlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0b3VjaGVkOiB0cnVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2FwcGx5U3RhdGVEaWZmKCkge1xuICAgICAgICBmb3IgKGNvbnN0IHN0YXRlRW50cnkgb2YgdGhpcy5zdGF0ZU1hcCkge1xuICAgICAgICAgICAgY29uc3Qga2xhc3MgPSBzdGF0ZUVudHJ5WzBdO1xuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSBzdGF0ZUVudHJ5WzFdO1xuXG4gICAgICAgICAgICBpZiAoc3RhdGUuY2hhbmdlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RvZ2dsZUNsYXNzKGtsYXNzLCBzdGF0ZS5lbmFibGVkKTtcbiAgICAgICAgICAgICAgICBzdGF0ZS5jaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFzdGF0ZS50b3VjaGVkKSB7XG4gICAgICAgICAgICAgICAgLy8gQSBjbGFzcyB0aGF0IHdhcyBwcmV2aW91c2x5IGFjdGl2ZSBnb3QgcmVtb3ZlZCBmcm9tIHRoZSBuZXcgY29sbGVjdGlvbiBvZiBjbGFzc2VzIC1cbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgZnJvbSB0aGUgRE9NIGFzIHdlbGwuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLmVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdG9nZ2xlQ2xhc3Moa2xhc3MsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZU1hcC5kZWxldGUoa2xhc3MpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdGF0ZS50b3VjaGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF90b2dnbGVDbGFzcyhrbGFzczogc3RyaW5nLCBlbmFibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBrbGFzcyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBOZ0NsYXNzIGNhbiBvbmx5IHRvZ2dsZSBDU1MgY2xhc3NlcyBleHByZXNzZWQgYXMgc3RyaW5ncywgZ290ICR7c3RyaW5naWZ5KGtsYXNzKX1gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGtsYXNzID0ga2xhc3MudHJpbSgpO1xuICAgICAgICBpZiAoa2xhc3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAga2xhc3Muc3BsaXQoL1xccysvKS5mb3JFYWNoKGtsYXNzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZW5hYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLiNyZW5kZXJlci5hZGRDbGFzcyh0aGlzLiNlbC5uYXRpdmVFbGVtZW50LCBrbGFzcyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jcmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy4jZWwubmF0aXZlRWxlbWVudCwga2xhc3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19
138
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2MtY2xhc3MuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xvZ2luL2RpcmVjdGl2ZXMva2MtY2xhc3Mva2MtY2xhc3MuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUN2RCx1RUFBdUU7QUFDdkUsT0FBTyxFQUNILFNBQVMsRUFFVCxVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFDTCxTQUFTLEVBQ1QsU0FBUyxFQUNULFVBQVUsSUFBSSxTQUFTLEVBQzFCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQzVGLE9BQU8sRUFBaUIsU0FBUyxFQUFFLE1BQU0sOEJBQThCLENBQUM7O0FBd0J4RSxNQUFNLE9BQU8sZ0JBQWdCO0lBRDdCO1FBRVksbUJBQWMsR0FBYSxFQUFFLENBQUM7UUFJOUIsYUFBUSxHQUFHLElBQUksR0FBRyxFQUFvQyxDQUFDO1FBQ3RELGNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDOUIsUUFBRyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN6QixVQUFLLEdBQUcsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUM7S0F3SC9DO0lBMUhZLFNBQVMsQ0FBcUI7SUFDOUIsR0FBRyxDQUFzQjtJQUN6QixLQUFLLENBQThCO0lBQzVDLDJEQUEyRDtJQUMzRCxJQUNJLEtBQUssQ0FBQyxLQUFhO1FBQ25CLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3pFLENBQUM7SUFFRCwyREFBMkQ7SUFDM0QsSUFDSSxPQUFPLENBQUMsS0FBcUM7UUFDN0MsSUFBSSxDQUFDLFFB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bGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2NvbnNpc3RlbnQtaW5kZXhlZC1vYmplY3Qtc3R5bGUgKi9cbmltcG9ydCB7XG4gICAgRGlyZWN0aXZlLFxuICAgIERvQ2hlY2ssXG4gICAgRWxlbWVudFJlZixcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgaXNEZXZNb2RlLFxuICAgIFJlbmRlcmVyMixcbiAgICDJtXN0cmluZ2lmeSBhcyBzdHJpbmdpZnlcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21wb25lbnRSZWZlcmVuY2UgfSBmcm9tICdAa2V5Y2xvYWtpZnkvYW5ndWxhci9sb2dpbi9jbGFzc2VzL2NvbXBvbmVudC1yZWZlcmVuY2UnO1xuaW1wb3J0IHsgdHlwZSBDbGFzc0tleSwgZ2V0S2NDbHN4IH0gZnJvbSAna2V5Y2xvYWtpZnkvbG9naW4vbGliL2tjQ2xzeCc7XG5cbmludGVyZmFjZSBDc3NDbGFzc1N0YXRlIHtcbiAgICAvLyBQRVJGOiBjb3VsZCB1c2UgYSBiaXQgbWFzayB0byByZXByZXNlbnQgc3RhdGUgYXMgYWxsIGZpZWxkcyBhcmUgYm9vbGVhbiBmbGFnc1xuICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgY2hhbmdlZDogYm9vbGVhbjtcbiAgICB0b3VjaGVkOiBib29sZWFuO1xufVxuXG50eXBlIEtjQ2xhc3NTdXBwb3J0ZWRUeXBlcyA9XG4gICAgfCBDbGFzc0tleVtdXG4gICAgfCBTZXQ8Q2xhc3NLZXk+XG4gICAgfCBQYXJ0aWFsPHsgW2tleSBpbiBDbGFzc0tleV06IGFueSB9PlxuICAgIHwgbnVsbFxuICAgIHwgdW5kZWZpbmVkO1xuXG50eXBlIE5nQ2xhc3NTdXBwb3J0ZWRUeXBlcyA9XG4gICAgfCBzdHJpbmdbXVxuICAgIHwgU2V0PHN0cmluZz5cbiAgICB8IHsgW2tleTogc3RyaW5nXTogYW55IH1cbiAgICB8IG51bGxcbiAgICB8IHVuZGVmaW5lZDtcblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnW2tjQ2xhc3NdJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIEtjQ2xhc3NEaXJlY3RpdmUgaW1wbGVtZW50cyBEb0NoZWNrIHtcbiAgICBwcml2YXRlIGluaXRpYWxDbGFzc2VzOiBzdHJpbmdbXSA9IFtdO1xuICAgIHByaXZhdGUgcmF3Q2xhc3M6IE5nQ2xhc3NTdXBwb3J0ZWRUeXBlcztcbiAgICBwcml2YXRlIHJhd0tjQ2xhc3M6IEtjQ2xhc3NTdXBwb3J0ZWRUeXBlcztcblxuICAgIHByaXZhdGUgc3RhdGVNYXAgPSBuZXcgTWFwPHN0cmluZyB8IENsYXNzS2V5LCBDc3NDbGFzc1N0YXRlPigpO1xuICAgIHJlYWRvbmx5ICNyZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xuICAgIHJlYWRvbmx5ICNlbCA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgICByZWFkb25seSAjaG9zdCA9IGluamVjdChDb21wb25lbnRSZWZlcmVuY2UpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8taW5wdXQtcmVuYW1lXG4gICAgQElucHV0KCdjbGFzcycpXG4gICAgc2V0IGtsYXNzKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5pbml0aWFsQ2xhc3NlcyA9IHZhbHVlICE9IG51bGwgPyB2YWx1ZS50cmltKCkuc3BsaXQoL1xccysvKSA6IFtdO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8taW5wdXQtcmVuYW1lXG4gICAgQElucHV0KCduZ0NsYXNzJylcbiAgICBzZXQgbmdDbGFzcyh2YWx1ZTogc3RyaW5nIHwgTmdDbGFzc1N1cHBvcnRlZFR5cGVzKSB7XG4gICAgICAgIHRoaXMucmF3Q2xhc3MgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUudHJpbSgpLnNwbGl0KC9cXHMrLykgOiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLWlucHV0LXJlbmFtZVxuICAgIEBJbnB1dCgna2NDbGFzcycpXG4gICAgc2V0IGtjQ2xhc3ModmFsdWU6IENsYXNzS2V5IHwgS2NDbGFzc1N1cHBvcnRlZFR5cGVzKSB7XG4gICAgICAgIHRoaXMucmF3S2NDbGFzcyA9XG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gKHZhbHVlLnRyaW0oKS5zcGxpdCgvXFxzKy8pIGFzIENsYXNzS2V5W10pIDogdmFsdWU7XG4gICAgfVxuXG4gICAgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgICAgICBmb3IgKGNvbnN0IGtsYXNzIG9mIHRoaXMuaW5pdGlhbENsYXNzZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVN0YXRlKGtsYXNzLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjbGFzc2VzIGZyb20gdGhlIFtuZ0NsYXNzXSBiaW5kaW5nXG4gICAgICAgIGNvbnN0IHJhd0NsYXNzID0gdGhpcy5yYXdDbGFzcztcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmF3Q2xhc3MpIHx8IHJhd0NsYXNzIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtsYXNzIG9mIHJhd0NsYXNzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlU3RhdGUoa2xhc3MsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHJhd0NsYXNzICE9IG51bGwpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2xhc3Mgb2YgT2JqZWN0LmtleXMocmF3Q2xhc3MpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlU3RhdGUoa2xhc3MsIEJvb2xlYW4ocmF3Q2xhc3Nba2xhc3NdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGFzc2VzIGZyb20gdGhlIFtrY0NsYXNzXSBiaW5kaW5nXG4gICAgICAgIGNvbnN0IHJhd0tjQ2xhc3MgPSB0aGlzLnJhd0tjQ2xhc3M7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHJhd0tjQ2xhc3MpIHx8IHJhd0tjQ2xhc3MgaW5zdGFuY2VvZiBTZXQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2xhc3Mgb2YgcmF3S2NDbGFzcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZVN0YXRlKGtsYXNzLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChyYXdLY0NsYXNzICE9IG51bGwpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2xhc3Mgb2YgT2JqZWN0LmtleXMocmF3S2NDbGFzcykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVTdGF0ZShrbGFzcywgQm9vbGVhbihyYXdLY0NsYXNzW2tsYXNzIGFzIENsYXNzS2V5XSksIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fYXBwbHlTdGF0ZURpZmYoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF91cGRhdGVTdGF0ZShcbiAgICAgICAga2xhc3M6IHN0cmluZyB8IENsYXNzS2V5LFxuICAgICAgICBuZXh0RW5hYmxlZDogYm9vbGVhbixcbiAgICAgICAga2NDbHN4Q2hlY2sgPSBmYWxzZVxuICAgICkge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc3RhdGVNYXAuZ2V0KGtsYXNzKTtcbiAgICAgICAgaWYgKHN0YXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGlmIChzdGF0ZS5lbmFibGVkICE9PSBuZXh0RW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIHN0YXRlLmNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHN0YXRlLmVuYWJsZWQgPSBuZXh0RW5hYmxlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YXRlLnRvdWNoZWQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGtsYXNzQ2hlY2tlZCA9IGtsYXNzO1xuICAgICAgICAgICAgaWYgKGtjQ2xzeENoZWNrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZG9Vc2VEZWZhdWx0Q3NzID0gdGhpcy4jaG9zdC5kb1VzZURlZmF1bHRDc3MgPz8gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBjbGFzc2VzID0gdGhpcy4jaG9zdC5jbGFzc2VzO1xuICAgICAgICAgICAgICAgIGNvbnN0IGtjQ2xzeCA9IGdldEtjQ2xzeCh7IGRvVXNlRGVmYXVsdENzcywgY2xhc3NlcyB9KS5rY0Nsc3g7XG4gICAgICAgICAgICAgICAga2xhc3NDaGVja2VkID0ga2NDbHN4KGtsYXNzIGFzIENsYXNzS2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3RhdGVNYXAuc2V0KGtsYXNzQ2hlY2tlZCwge1xuICAgICAgICAgICAgICAgIGVuYWJsZWQ6IG5leHRFbmFibGVkLFxuICAgICAgICAgICAgICAgIGNoYW5nZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgdG91Y2hlZDogdHJ1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9hcHBseVN0YXRlRGlmZigpIHtcbiAgICAgICAgZm9yIChjb25zdCBzdGF0ZUVudHJ5IG9mIHRoaXMuc3RhdGVNYXApIHtcbiAgICAgICAgICAgIGNvbnN0IGtsYXNzID0gc3RhdGVFbnRyeVswXTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gc3RhdGVFbnRyeVsxXTtcblxuICAgICAgICAgICAgaWYgKHN0YXRlLmNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90b2dnbGVDbGFzcyhrbGFzcywgc3RhdGUuZW5hYmxlZCk7XG4gICAgICAgICAgICAgICAgc3RhdGUuY2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghc3RhdGUudG91Y2hlZCkge1xuICAgICAgICAgICAgICAgIC8vIEEgY2xhc3MgdGhhdCB3YXMgcHJldmlvdXNseSBhY3RpdmUgZ290IHJlbW92ZWQgZnJvbSB0aGUgbmV3IGNvbGxlY3Rpb24gb2YgY2xhc3NlcyAtXG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlIGZyb20gdGhlIERPTSBhcyB3ZWxsLlxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5lbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3RvZ2dsZUNsYXNzKGtsYXNzLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVNYXAuZGVsZXRlKGtsYXNzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3RhdGUudG91Y2hlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdG9nZ2xlQ2xhc3Moa2xhc3M6IHN0cmluZywgZW5hYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2Yga2xhc3MgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgTmdDbGFzcyBjYW4gb25seSB0b2dnbGUgQ1NTIGNsYXNzZXMgZXhwcmVzc2VkIGFzIHN0cmluZ3MsIGdvdCAke3N0cmluZ2lmeShrbGFzcyl9YFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBrbGFzcyA9IGtsYXNzLnRyaW0oKTtcbiAgICAgICAgaWYgKGtsYXNzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGtsYXNzLnNwbGl0KC9cXHMrLykuZm9yRWFjaChrbGFzcyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jcmVuZGVyZXIuYWRkQ2xhc3ModGhpcy4jZWwubmF0aXZlRWxlbWVudCwga2xhc3MpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuI3JlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuI2VsLm5hdGl2ZUVsZW1lbnQsIGtsYXNzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==