@rededor/site-front-end-lib 4.0.0-alpha.4 → 17.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (524) hide show
  1. package/README.md +0 -9
  2. package/esm2022/lib/components/algolia-dropdown/algolia-dropdown.component.mjs +126 -0
  3. package/esm2022/lib/components/avatar/avatar.component.mjs +66 -0
  4. package/esm2022/lib/components/banner/content-banner/content-banner.component.mjs +41 -0
  5. package/esm2022/lib/components/breadcrumbs/breadcrumbs.component.mjs +133 -0
  6. package/esm2022/lib/components/cards/card-unidade-planos-convenios/card-unidade-planos-convenios.component.mjs +65 -0
  7. package/esm2022/lib/components/cards/expandable-card/expandable-card.component.mjs +69 -0
  8. package/esm2022/lib/components/cards/testimonial-card/testimonial-card.component.mjs +63 -0
  9. package/esm2022/lib/components/carousels/testimonials-carousel/testimonials-carousel.component.mjs +64 -0
  10. package/esm2022/lib/components/cta-wrapper/cta-wrapper.component.mjs +84 -0
  11. package/esm2022/lib/components/dropdown-search/dropdown-search-category.component.mjs +24 -0
  12. package/esm2022/lib/components/dropdown-search/dropdown-search-not-found.component.mjs +24 -0
  13. package/esm2022/lib/components/dropdown-search/dropdown-search-option.component.mjs +65 -0
  14. package/esm2022/lib/components/dropdown-search/dropdown-search.component.mjs +292 -0
  15. package/esm2022/lib/components/error/error-service/error.service.mjs +17 -0
  16. package/esm2022/lib/components/error/error.component.mjs +183 -0
  17. package/esm2022/lib/components/filter-letter-and-terms/filter-letter-and-terms.component.mjs +103 -0
  18. package/esm2022/lib/components/filters/filter-generic/filter-generic.component.mjs +235 -0
  19. package/esm2022/lib/components/filters/filter-planos-convenios/filter-planos-convenios.component.mjs +150 -0
  20. package/esm2022/lib/components/footer/footer.component.mjs +125 -0
  21. package/esm2022/lib/components/footer/helpers/footerTheme.func.mjs +70 -0
  22. package/esm2022/lib/components/footer/models/FooterTheme.model.mjs +2 -0
  23. package/esm2022/lib/components/header/components/header-action-menu/header-action-menu.component.mjs +36 -0
  24. package/esm2022/lib/components/header/components/header-aux-menu/header-aux-menu.component.mjs +12 -0
  25. package/esm2022/lib/components/header/components/header-aux-menu-container/header-aux-menu-container.component.mjs +17 -0
  26. package/esm2022/lib/components/header/components/header-aux-menu-item/header-aux-menu-item.component.mjs +51 -0
  27. package/esm2022/lib/components/header/components/header-aux-menu-item-dropdown/header-aux-menu-item-dropdown.component.mjs +23 -0
  28. package/esm2022/lib/components/header/components/header-logo/header-logo.component.mjs +32 -0
  29. package/esm2022/lib/components/header/components/header-main-menu/header-main-menu.component.mjs +11 -0
  30. package/esm2022/lib/components/header/components/header-main-menu-item/header-main-menu-item.component.mjs +77 -0
  31. package/esm2022/lib/components/header/components/header-main-menu-item-dropdown/header-main-menu-item-dropdown.component.mjs +99 -0
  32. package/esm2022/lib/components/header/components/header-side-menu/header-side-menu.component.mjs +26 -0
  33. package/esm2022/lib/components/header/components/header-side-menu-item/header-side-menu-item.component.mjs +54 -0
  34. package/esm2022/lib/components/header/header.component.mjs +104 -0
  35. package/esm2022/lib/components/header/helpers/headerTheme.func.mjs +136 -0
  36. package/esm2022/lib/components/header/models/HeaderTheme.model.mjs +2 -0
  37. package/esm2022/lib/components/header/services/header.service.mjs +43 -0
  38. package/esm2022/lib/components/image/image.component.mjs +61 -0
  39. package/esm2022/lib/components/index.mjs +52 -0
  40. package/esm2022/lib/components/input-file/input-file.component.mjs +304 -0
  41. package/esm2022/lib/components/load-screen/load-screen.component.mjs +23 -0
  42. package/esm2022/lib/components/overlay/overlay.component.mjs +19 -0
  43. package/esm2022/lib/components/page-header/page-header.component.mjs +47 -0
  44. package/esm2022/lib/components/page-template-fullcontent/page-template-fullcontent.component.mjs +30 -0
  45. package/esm2022/lib/components/page-template-sidebar/page-template-sidebar.component.mjs +39 -0
  46. package/esm2022/lib/components/pagination/pagination.component.mjs +64 -0
  47. package/esm2022/lib/components/post-header/post-header.component.mjs +56 -0
  48. package/esm2022/lib/components/search/search.component.mjs +147 -0
  49. package/esm2022/lib/components/section-navigation/section-navigation.component.mjs +149 -0
  50. package/esm2022/lib/components/side-ctas/components/side-ctas-bottom/side-ctas-bottom.component.mjs +43 -0
  51. package/esm2022/lib/components/side-ctas/components/side-ctas-right-bottom/side-ctas-right-bottom.component.mjs +43 -0
  52. package/esm2022/lib/components/side-ctas/components/side-ctas-right-middle/side-ctas-right-middle.component.mjs +42 -0
  53. package/esm2022/lib/components/side-ctas/components/side-ctas-right-top/side-ctas-right-top.component.mjs +11 -0
  54. package/esm2022/lib/components/side-ctas/models/SideCta.model.mjs +2 -0
  55. package/esm2022/lib/components/side-ctas/side-ctas.component.mjs +23 -0
  56. package/esm2022/lib/components/sidebar-navigation/sidebar-navigation.component.mjs +119 -0
  57. package/esm2022/lib/components/sticky-navigation/sticky-navigation.component.mjs +132 -0
  58. package/esm2022/lib/components/whatsapp/whatsapp.component.mjs +60 -0
  59. package/esm2022/lib/directives/index.mjs +4 -0
  60. package/esm2022/lib/directives/rdsite-click-outside/rdsite-click-outside.directive.mjs +29 -0
  61. package/esm2022/lib/directives/rdsite-link/rdsite-link.directive.mjs +197 -0
  62. package/esm2022/lib/directives/rdsite-phone-modal/rdsite-phone-modal.directive.mjs +52 -0
  63. package/esm2022/lib/enums/EnumDoencaTaxonomy.enum.mjs +11 -0
  64. package/esm2022/lib/enums/EnumError.enum.mjs +6 -0
  65. package/esm2022/lib/enums/EnumThemes.enum.mjs +9 -0
  66. package/esm2022/lib/enums/Estados.enum.mjs +31 -0
  67. package/esm2022/lib/enums/Filter.enum.mjs +9 -0
  68. package/esm2022/lib/enums/IconCuraDefaultType.enum.mjs +121 -0
  69. package/esm2022/lib/enums/ImageMimeType.enum.mjs +7 -0
  70. package/esm2022/lib/enums/RdsiteModalComponentStyle.enum.mjs +16 -0
  71. package/esm2022/lib/enums/RdsiteModalDrawerComponentStyle.enum.mjs +9 -0
  72. package/esm2022/lib/enums/UnidadeCoverageType.enum.mjs +7 -0
  73. package/esm2022/lib/enums/index.mjs +11 -0
  74. package/esm2022/lib/helpers/check-safari-agent.func.mjs +7 -0
  75. package/esm2022/lib/helpers/formatPhone.func.mjs +29 -0
  76. package/esm2022/lib/helpers/getCircularReplacer.func.mjs +38 -0
  77. package/esm2022/lib/helpers/getSiteUrl.func.mjs +11 -0
  78. package/esm2022/lib/helpers/index.mjs +9 -0
  79. package/esm2022/lib/helpers/mediaQueries.mjs +11 -0
  80. package/esm2022/lib/helpers/removeDuplicateObjectsFromArray.func.mjs +5 -0
  81. package/esm2022/lib/helpers/removeDuplicateValuesFromArray.func.mjs +5 -0
  82. package/esm2022/lib/helpers/removeHtmlTags.func.mjs +6 -0
  83. package/esm2022/lib/helpers/toQueryParams.func.mjs +8 -0
  84. package/esm2022/lib/interceptors/error.interceptor.mjs +36 -0
  85. package/esm2022/lib/interceptors/index.mjs +3 -0
  86. package/esm2022/lib/interceptors/log.interceptor.mjs +35 -0
  87. package/esm2022/lib/middlewares/index.mjs +5 -0
  88. package/esm2022/lib/middlewares/ssr-initialization.middleware.mjs +8 -0
  89. package/esm2022/lib/middlewares/url-validation-default-logo.mjs +38 -0
  90. package/esm2022/lib/middlewares/url-validation-error-page.mjs +209 -0
  91. package/esm2022/lib/middlewares/url-validation.middleware.mjs +41 -0
  92. package/esm2022/lib/models/algolia-search-api.model.mjs +2 -0
  93. package/esm2022/lib/models/breadcrumbs/breadcrumbs-items.model.mjs +2 -0
  94. package/esm2022/lib/models/breadcrumbs/breadcrumbs-json-item.model.mjs +2 -0
  95. package/esm2022/lib/models/centro-estudos-backend.model.mjs +2 -0
  96. package/esm2022/lib/models/centro-medico.model.mjs +2 -0
  97. package/esm2022/lib/models/content-banner.model.mjs +2 -0
  98. package/esm2022/lib/models/cta-wrapper.model.mjs +2 -0
  99. package/esm2022/lib/models/doenca-backend.model.mjs +2 -0
  100. package/esm2022/lib/models/doenca-taxonomy.model.mjs +2 -0
  101. package/esm2022/lib/models/especialidade-backend.model.mjs +2 -0
  102. package/esm2022/lib/models/exame-backend.model.mjs +2 -0
  103. package/esm2022/lib/models/filters/filter-planos-convenios.model.mjs +2 -0
  104. package/esm2022/lib/models/filters/filter-section.type.mjs +2 -0
  105. package/esm2022/lib/models/filters/filter-sections.model.mjs +2 -0
  106. package/esm2022/lib/models/images/rdsite-image.model.mjs +2 -0
  107. package/esm2022/lib/models/medico-cv.model.mjs +2 -0
  108. package/esm2022/lib/models/medico.model.mjs +2 -0
  109. package/esm2022/lib/models/menu-de-unidade.model.mjs +2 -0
  110. package/esm2022/lib/models/menu-item.model.mjs +2 -0
  111. package/esm2022/lib/models/privacy-tools/privacy-tools.model.mjs +2 -0
  112. package/esm2022/lib/models/rdsl-cobertura.model.mjs +2 -0
  113. package/esm2022/lib/models/rdsl-convenio.model.mjs +2 -0
  114. package/esm2022/lib/models/rdsl-especialidade.model.mjs +2 -0
  115. package/esm2022/lib/models/rdsl-planos.model.mjs +2 -0
  116. package/esm2022/lib/models/rdsl-post-category.model.mjs +2 -0
  117. package/esm2022/lib/models/rdsl-unidade.model.mjs +2 -0
  118. package/esm2022/lib/models/section-navigation.model.mjs +2 -0
  119. package/esm2022/lib/models/seo/seo-data.model.mjs +2 -0
  120. package/esm2022/lib/models/seo/seo-unidade.model.mjs +2 -0
  121. package/esm2022/lib/models/social-meta-properties.model.mjs +2 -0
  122. package/esm2022/lib/models/wordpress/WpResponse.model.mjs +2 -0
  123. package/esm2022/lib/models/wordpress/category/wpCategory.model.mjs +2 -0
  124. package/esm2022/lib/models/wordpress/general/content.model.mjs +2 -0
  125. package/esm2022/lib/models/wordpress/general/excerpt.model.mjs +2 -0
  126. package/esm2022/lib/models/wordpress/general/featuredMedia.model.mjs +2 -0
  127. package/esm2022/lib/models/wordpress/general/guid.model.mjs +2 -0
  128. package/esm2022/lib/models/wordpress/general/index.mjs +11 -0
  129. package/esm2022/lib/models/wordpress/general/links.model.mjs +2 -0
  130. package/esm2022/lib/models/wordpress/general/meta.model.mjs +2 -0
  131. package/esm2022/lib/models/wordpress/general/title.model.mjs +2 -0
  132. package/esm2022/lib/models/wordpress/general/yoastData.model.mjs +2 -0
  133. package/esm2022/lib/models/wordpress/general/yoastHeadJson.model.mjs +2 -0
  134. package/esm2022/lib/models/wordpress/general/yoastMeta.model.mjs +2 -0
  135. package/esm2022/lib/models/wordpress/page/page.model.mjs +2 -0
  136. package/esm2022/lib/models/wordpress/post/post.model.mjs +2 -0
  137. package/esm2022/lib/models/wordpress/unidade/wp-unidade-onco.model.mjs +2 -0
  138. package/esm2022/lib/models/wordpress/unidade/wp-unidade-site-detalhe.model.mjs +2 -0
  139. package/esm2022/lib/models/wordpress/unidade/wp-unidade-site.model.mjs +2 -0
  140. package/esm2022/lib/pipes/index.mjs +2 -0
  141. package/esm2022/lib/pipes/phone/phone.pipe.mjs +18 -0
  142. package/esm2022/lib/services/algolia/algolia.service.mjs +37 -0
  143. package/esm2022/lib/services/algolia-search-api/algolia-search-api.service.mjs +71 -0
  144. package/esm2022/lib/services/geoloc/geoloc.service.mjs +202 -0
  145. package/esm2022/lib/services/http-client/http-client.service.mjs +55 -0
  146. package/esm2022/lib/services/index.mjs +19 -0
  147. package/esm2022/lib/services/log/log.service.mjs +46 -0
  148. package/esm2022/lib/services/mapbox/mapbox.service.mjs +69 -0
  149. package/esm2022/lib/services/modal/modal.service.mjs +56 -0
  150. package/esm2022/lib/services/modal-drawer/modal-drawer.service.mjs +42 -0
  151. package/esm2022/lib/services/ngu-carousel/ngu-carousel.service.mjs +81 -0
  152. package/esm2022/lib/services/phone/phone.service.mjs +28 -0
  153. package/esm2022/lib/services/privacy-tools/privacy-tools.service.mjs +92 -0
  154. package/esm2022/lib/services/seo/seo.service.mjs +489 -0
  155. package/esm2022/lib/services/server-response/server-response.service.mjs +92 -0
  156. package/esm2022/lib/services/site-back-end/site-back-end.service.mjs +197 -0
  157. package/esm2022/lib/services/ssr-loading/ssr-loading.service.mjs +48 -0
  158. package/esm2022/lib/services/transfer-state/transfer-state.service.mjs +33 -0
  159. package/esm2022/lib/services/youtube/youtube.service.mjs +39 -0
  160. package/esm2022/lib/tokens/LibConfig.mjs +4 -0
  161. package/esm2022/lib/tokens/express.tokens.mjs +4 -0
  162. package/esm2022/public-api.mjs +23 -0
  163. package/esm2022/rededor-site-front-end-lib.mjs +5 -0
  164. package/fesm2022/rededor-site-front-end-lib.mjs +6408 -2
  165. package/fesm2022/rededor-site-front-end-lib.mjs.map +1 -1
  166. package/index.d.ts +5 -3
  167. package/lib/components/algolia-dropdown/algolia-dropdown.component.d.ts +38 -0
  168. package/lib/components/avatar/avatar.component.d.ts +26 -0
  169. package/lib/components/banner/content-banner/content-banner.component.d.ts +20 -0
  170. package/lib/components/breadcrumbs/breadcrumbs.component.d.ts +36 -0
  171. package/lib/components/cards/card-unidade-planos-convenios/card-unidade-planos-convenios.component.d.ts +41 -0
  172. package/lib/components/cards/expandable-card/expandable-card.component.d.ts +29 -0
  173. package/lib/components/cards/testimonial-card/testimonial-card.component.d.ts +31 -0
  174. package/lib/components/carousels/testimonials-carousel/testimonials-carousel.component.d.ts +28 -0
  175. package/lib/components/cta-wrapper/cta-wrapper.component.d.ts +33 -0
  176. package/lib/components/dropdown-search/dropdown-search-category.component.d.ts +9 -0
  177. package/lib/components/dropdown-search/dropdown-search-not-found.component.d.ts +9 -0
  178. package/lib/components/dropdown-search/dropdown-search-option.component.d.ts +26 -0
  179. package/lib/components/dropdown-search/dropdown-search.component.d.ts +71 -0
  180. package/lib/components/error/error-service/error.service.d.ts +8 -0
  181. package/lib/components/error/error.component.d.ts +48 -0
  182. package/lib/components/filter-letter-and-terms/filter-letter-and-terms.component.d.ts +36 -0
  183. package/lib/components/filters/filter-generic/filter-generic.component.d.ts +77 -0
  184. package/lib/components/filters/filter-planos-convenios/filter-planos-convenios.component.d.ts +45 -0
  185. package/lib/components/footer/footer.component.d.ts +49 -0
  186. package/lib/components/footer/helpers/footerTheme.func.d.ts +3 -0
  187. package/lib/components/footer/models/FooterTheme.model.d.ts +7 -0
  188. package/lib/components/header/components/header-action-menu/header-action-menu.component.d.ts +16 -0
  189. package/lib/components/header/components/header-aux-menu/header-aux-menu.component.d.ts +5 -0
  190. package/lib/components/header/components/header-aux-menu-container/header-aux-menu-container.component.d.ts +6 -0
  191. package/lib/components/header/components/header-aux-menu-item/header-aux-menu-item.component.d.ts +21 -0
  192. package/lib/components/header/components/header-aux-menu-item-dropdown/header-aux-menu-item-dropdown.component.d.ts +10 -0
  193. package/lib/components/header/components/header-logo/header-logo.component.d.ts +12 -0
  194. package/lib/components/header/components/header-main-menu/header-main-menu.component.d.ts +5 -0
  195. package/lib/components/header/components/header-main-menu-item/header-main-menu-item.component.d.ts +29 -0
  196. package/lib/components/header/components/header-main-menu-item-dropdown/header-main-menu-item-dropdown.component.d.ts +41 -0
  197. package/lib/components/header/components/header-side-menu/header-side-menu.component.d.ts +11 -0
  198. package/lib/components/header/components/header-side-menu-item/header-side-menu-item.component.d.ts +22 -0
  199. package/lib/components/header/header.component.d.ts +36 -0
  200. package/lib/components/header/helpers/headerTheme.func.d.ts +3 -0
  201. package/lib/components/header/models/HeaderTheme.model.d.ts +8 -0
  202. package/lib/components/header/services/header.service.d.ts +11 -0
  203. package/lib/components/image/image.component.d.ts +22 -0
  204. package/lib/components/index.d.ts +50 -0
  205. package/lib/components/input-file/input-file.component.d.ts +88 -0
  206. package/{components/load-screen/index.d.ts → lib/components/load-screen/load-screen.component.d.ts} +5 -6
  207. package/{components/overlay/index.d.ts → lib/components/overlay/overlay.component.d.ts} +4 -6
  208. package/lib/components/page-header/page-header.component.d.ts +20 -0
  209. package/lib/components/page-template-fullcontent/page-template-fullcontent.component.d.ts +14 -0
  210. package/lib/components/page-template-sidebar/page-template-sidebar.component.d.ts +17 -0
  211. package/lib/components/pagination/pagination.component.d.ts +30 -0
  212. package/lib/components/post-header/post-header.component.d.ts +31 -0
  213. package/lib/components/search/search.component.d.ts +48 -0
  214. package/lib/components/section-navigation/section-navigation.component.d.ts +44 -0
  215. package/lib/components/side-ctas/components/side-ctas-bottom/side-ctas-bottom.component.d.ts +23 -0
  216. package/lib/components/side-ctas/components/side-ctas-right-bottom/side-ctas-right-bottom.component.d.ts +15 -0
  217. package/lib/components/side-ctas/components/side-ctas-right-middle/side-ctas-right-middle.component.d.ts +22 -0
  218. package/lib/components/side-ctas/components/side-ctas-right-top/side-ctas-right-top.component.d.ts +5 -0
  219. package/lib/components/side-ctas/models/SideCta.model.d.ts +5 -0
  220. package/lib/components/side-ctas/side-ctas.component.d.ts +11 -0
  221. package/lib/components/sidebar-navigation/sidebar-navigation.component.d.ts +39 -0
  222. package/lib/components/sticky-navigation/sticky-navigation.component.d.ts +43 -0
  223. package/lib/components/whatsapp/whatsapp.component.d.ts +29 -0
  224. package/lib/directives/index.d.ts +3 -0
  225. package/lib/directives/rdsite-click-outside/rdsite-click-outside.directive.d.ts +10 -0
  226. package/lib/directives/rdsite-link/rdsite-link.directive.d.ts +40 -0
  227. package/lib/directives/rdsite-phone-modal/rdsite-phone-modal.directive.d.ts +17 -0
  228. package/lib/enums/EnumDoencaTaxonomy.enum.d.ts +8 -0
  229. package/lib/enums/EnumError.enum.d.ts +4 -0
  230. package/lib/enums/EnumThemes.enum.d.ts +7 -0
  231. package/lib/enums/Estados.enum.d.ts +29 -0
  232. package/lib/enums/Filter.enum.d.ts +7 -0
  233. package/{enums/index.d.ts → lib/enums/IconCuraDefaultType.enum.d.ts} +1 -58
  234. package/lib/enums/ImageMimeType.enum.d.ts +5 -0
  235. package/lib/enums/RdsiteModalComponentStyle.enum.d.ts +14 -0
  236. package/lib/enums/RdsiteModalDrawerComponentStyle.enum.d.ts +7 -0
  237. package/lib/enums/UnidadeCoverageType.enum.d.ts +5 -0
  238. package/lib/enums/index.d.ts +10 -0
  239. package/lib/helpers/check-safari-agent.func.d.ts +2 -0
  240. package/lib/helpers/formatPhone.func.d.ts +1 -0
  241. package/lib/helpers/getCircularReplacer.func.d.ts +7 -0
  242. package/lib/helpers/getSiteUrl.func.d.ts +2 -0
  243. package/lib/helpers/index.d.ts +8 -0
  244. package/lib/helpers/mediaQueries.d.ts +6 -0
  245. package/lib/helpers/removeDuplicateObjectsFromArray.func.d.ts +2 -0
  246. package/lib/helpers/removeDuplicateValuesFromArray.func.d.ts +2 -0
  247. package/lib/helpers/removeHtmlTags.func.d.ts +2 -0
  248. package/lib/helpers/toQueryParams.func.d.ts +5 -0
  249. package/lib/interceptors/error.interceptor.d.ts +13 -0
  250. package/lib/interceptors/index.d.ts +2 -0
  251. package/lib/interceptors/log.interceptor.d.ts +11 -0
  252. package/lib/middlewares/index.d.ts +4 -0
  253. package/lib/middlewares/ssr-initialization.middleware.d.ts +2 -0
  254. package/lib/middlewares/url-validation-default-logo.d.ts +1 -0
  255. package/lib/middlewares/url-validation-error-page.d.ts +22 -0
  256. package/lib/middlewares/url-validation.middleware.d.ts +13 -0
  257. package/lib/models/algolia-search-api.model.d.ts +179 -0
  258. package/lib/models/breadcrumbs/breadcrumbs-items.model.d.ts +10 -0
  259. package/lib/models/breadcrumbs/breadcrumbs-json-item.model.d.ts +8 -0
  260. package/lib/models/centro-estudos-backend.model.d.ts +8 -0
  261. package/lib/models/centro-medico.model.d.ts +33 -0
  262. package/lib/models/content-banner.model.d.ts +15 -0
  263. package/lib/models/cta-wrapper.model.d.ts +9 -0
  264. package/lib/models/doenca-backend.model.d.ts +25 -0
  265. package/lib/models/doenca-taxonomy.model.d.ts +11 -0
  266. package/lib/models/especialidade-backend.model.d.ts +24 -0
  267. package/lib/models/exame-backend.model.d.ts +25 -0
  268. package/lib/models/filters/filter-planos-convenios.model.d.ts +28 -0
  269. package/lib/models/filters/filter-section.type.d.ts +13 -0
  270. package/lib/models/filters/filter-sections.model.d.ts +52 -0
  271. package/lib/models/images/rdsite-image.model.d.ts +5 -0
  272. package/lib/models/medico-cv.model.d.ts +10 -0
  273. package/lib/models/medico.model.d.ts +68 -0
  274. package/lib/models/menu-de-unidade.model.d.ts +14 -0
  275. package/lib/models/menu-item.model.d.ts +67 -0
  276. package/lib/models/privacy-tools/privacy-tools.model.d.ts +8 -0
  277. package/lib/models/rdsl-cobertura.model.d.ts +71 -0
  278. package/lib/models/rdsl-convenio.model.d.ts +17 -0
  279. package/lib/models/rdsl-especialidade.model.d.ts +33 -0
  280. package/lib/models/rdsl-planos.model.d.ts +13 -0
  281. package/lib/models/rdsl-post-category.model.d.ts +8 -0
  282. package/lib/models/rdsl-unidade.model.d.ts +50 -0
  283. package/lib/models/section-navigation.model.d.ts +9 -0
  284. package/lib/models/seo/seo-data.model.d.ts +11 -0
  285. package/lib/models/seo/seo-unidade.model.d.ts +6 -0
  286. package/lib/models/social-meta-properties.model.d.ts +9 -0
  287. package/lib/models/wordpress/WpResponse.model.d.ts +31 -0
  288. package/lib/models/wordpress/category/wpCategory.model.d.ts +14 -0
  289. package/lib/models/wordpress/general/content.model.d.ts +4 -0
  290. package/lib/models/wordpress/general/excerpt.model.d.ts +4 -0
  291. package/lib/models/wordpress/general/featuredMedia.model.d.ts +26 -0
  292. package/lib/models/wordpress/general/guid.model.d.ts +3 -0
  293. package/lib/models/wordpress/general/index.d.ts +10 -0
  294. package/lib/models/wordpress/general/links.model.d.ts +47 -0
  295. package/lib/models/wordpress/general/meta.model.d.ts +3 -0
  296. package/lib/models/wordpress/general/title.model.d.ts +3 -0
  297. package/lib/models/wordpress/general/yoastData.model.d.ts +4 -0
  298. package/lib/models/wordpress/general/yoastHeadJson.model.d.ts +56 -0
  299. package/lib/models/wordpress/general/yoastMeta.model.d.ts +5 -0
  300. package/lib/models/wordpress/page/page.model.d.ts +10 -0
  301. package/lib/models/wordpress/post/post.model.d.ts +33 -0
  302. package/lib/models/wordpress/unidade/wp-unidade-onco.model.d.ts +56 -0
  303. package/lib/models/wordpress/unidade/wp-unidade-site-detalhe.model.d.ts +166 -0
  304. package/lib/models/wordpress/unidade/wp-unidade-site.model.d.ts +45 -0
  305. package/lib/pipes/index.d.ts +1 -0
  306. package/lib/pipes/phone/phone.pipe.d.ts +7 -0
  307. package/{services/algolia/index.d.ts → lib/services/algolia/algolia.service.d.ts} +4 -6
  308. package/{services/algolia-search-api/index.d.ts → lib/services/algolia-search-api/algolia-search-api.service.d.ts} +7 -6
  309. package/lib/services/geoloc/geoloc.service.d.ts +49 -0
  310. package/lib/services/http-client/http-client.service.d.ts +19 -0
  311. package/lib/services/index.d.ts +18 -0
  312. package/lib/services/log/log.service.d.ts +16 -0
  313. package/lib/services/mapbox/mapbox.service.d.ts +55 -0
  314. package/lib/services/modal/modal.service.d.ts +31 -0
  315. package/lib/services/modal-drawer/modal-drawer.service.d.ts +37 -0
  316. package/{services/ngu-carousel/index.d.ts → lib/services/ngu-carousel/ngu-carousel.service.d.ts} +3 -6
  317. package/lib/services/phone/phone.service.d.ts +11 -0
  318. package/lib/services/privacy-tools/privacy-tools.service.d.ts +20 -0
  319. package/lib/services/seo/seo.service.d.ts +142 -0
  320. package/lib/services/server-response/server-response.service.d.ts +39 -0
  321. package/lib/services/site-back-end/site-back-end.service.d.ts +87 -0
  322. package/{services/ssr-loading/index.d.ts → lib/services/ssr-loading/ssr-loading.service.d.ts} +4 -5
  323. package/lib/services/transfer-state/transfer-state.service.d.ts +12 -0
  324. package/{services/youtube/index.d.ts → lib/services/youtube/youtube.service.d.ts} +3 -5
  325. package/lib/tokens/LibConfig.d.ts +38 -0
  326. package/lib/tokens/express.tokens.d.ts +4 -0
  327. package/package.json +13 -283
  328. package/public-api.d.ts +10 -0
  329. package/components/algolia-dropdown/index.d.ts +0 -38
  330. package/components/algolia-search/index.d.ts +0 -292
  331. package/components/banner/index.d.ts +0 -20
  332. package/components/breadcrumbs/index.d.ts +0 -35
  333. package/components/cards/index.d.ts +0 -96
  334. package/components/carousels/index.d.ts +0 -28
  335. package/components/cta-wrapper/index.d.ts +0 -31
  336. package/components/error/index.d.ts +0 -46
  337. package/components/filter-letter-and-terms/index.d.ts +0 -36
  338. package/components/filters/filter-generic/index.d.ts +0 -68
  339. package/components/filters/filter-planos-convenios/index.d.ts +0 -41
  340. package/components/footer/index.d.ts +0 -38
  341. package/components/header/components/action/index.d.ts +0 -17
  342. package/components/header/components/auxiliar/index.d.ts +0 -29
  343. package/components/header/components/main/index.d.ts +0 -70
  344. package/components/header/components/side/index.d.ts +0 -33
  345. package/components/header/index.d.ts +0 -60
  346. package/components/header/services/index.d.ts +0 -14
  347. package/components/image/index.d.ts +0 -23
  348. package/components/modal/index.d.ts +0 -29
  349. package/components/modal-drawer/index.d.ts +0 -49
  350. package/components/page-header/index.d.ts +0 -20
  351. package/components/page-template-sidebar/index.d.ts +0 -20
  352. package/components/pagination/index.d.ts +0 -30
  353. package/components/search/index.d.ts +0 -45
  354. package/components/section-navigation/index.d.ts +0 -41
  355. package/components/side-ctas/index.d.ts +0 -70
  356. package/components/whatsapp/index.d.ts +0 -27
  357. package/core/index.d.ts +0 -1984
  358. package/cura/accordion/index.d.ts +0 -120
  359. package/cura/api/index.d.ts +0 -359
  360. package/cura/badges/cura-badge-counter/index.d.ts +0 -38
  361. package/cura/badges/cura-badge-distance/index.d.ts +0 -21
  362. package/cura/badges/cura-badge-dot/index.d.ts +0 -29
  363. package/cura/badges/cura-badge-pill/index.d.ts +0 -47
  364. package/cura/badges/index.d.ts +0 -5
  365. package/cura/buttons/cura-button/index.d.ts +0 -85
  366. package/cura/buttons/cura-button-outline/index.d.ts +0 -85
  367. package/cura/buttons/cura-button-select/index.d.ts +0 -34
  368. package/cura/buttons/cura-button-transparent/index.d.ts +0 -82
  369. package/cura/buttons/index.d.ts +0 -15
  370. package/cura/cards/cura-card/index.d.ts +0 -54
  371. package/cura/feedback/cura-alert/index.d.ts +0 -55
  372. package/cura/feedback/cura-modal/index.d.ts +0 -97
  373. package/cura/forms/cura-checkbox/index.d.ts +0 -152
  374. package/cura/forms/cura-input-text/index.d.ts +0 -234
  375. package/cura/forms/cura-label/index.d.ts +0 -51
  376. package/cura/forms/cura-radio/index.d.ts +0 -143
  377. package/cura/forms/cura-select/index.d.ts +0 -151
  378. package/cura/forms/cura-select-option/index.d.ts +0 -49
  379. package/cura/forms/cura-switch/index.d.ts +0 -113
  380. package/cura/forms/index.d.ts +0 -20
  381. package/cura/icons/cura-icon/index.d.ts +0 -46
  382. package/cura/loaders/cura-loader-bar/index.d.ts +0 -22
  383. package/cura/loaders/cura-loader-circle/index.d.ts +0 -24
  384. package/cura/texts/cura-display/index.d.ts +0 -54
  385. package/cura/texts/cura-heading/index.d.ts +0 -65
  386. package/cura/texts/cura-paragraph/index.d.ts +0 -54
  387. package/cura/texts/index.d.ts +0 -7
  388. package/fesm2022/rededor-site-front-end-lib-components-algolia-dropdown.mjs +0 -108
  389. package/fesm2022/rededor-site-front-end-lib-components-algolia-dropdown.mjs.map +0 -1
  390. package/fesm2022/rededor-site-front-end-lib-components-algolia-search.mjs +0 -583
  391. package/fesm2022/rededor-site-front-end-lib-components-algolia-search.mjs.map +0 -1
  392. package/fesm2022/rededor-site-front-end-lib-components-banner.mjs +0 -44
  393. package/fesm2022/rededor-site-front-end-lib-components-banner.mjs.map +0 -1
  394. package/fesm2022/rededor-site-front-end-lib-components-breadcrumbs.mjs +0 -119
  395. package/fesm2022/rededor-site-front-end-lib-components-breadcrumbs.mjs.map +0 -1
  396. package/fesm2022/rededor-site-front-end-lib-components-cards.mjs +0 -152
  397. package/fesm2022/rededor-site-front-end-lib-components-cards.mjs.map +0 -1
  398. package/fesm2022/rededor-site-front-end-lib-components-carousels.mjs +0 -75
  399. package/fesm2022/rededor-site-front-end-lib-components-carousels.mjs.map +0 -1
  400. package/fesm2022/rededor-site-front-end-lib-components-cta-wrapper.mjs +0 -74
  401. package/fesm2022/rededor-site-front-end-lib-components-cta-wrapper.mjs.map +0 -1
  402. package/fesm2022/rededor-site-front-end-lib-components-error.mjs +0 -173
  403. package/fesm2022/rededor-site-front-end-lib-components-error.mjs.map +0 -1
  404. package/fesm2022/rededor-site-front-end-lib-components-filter-letter-and-terms.mjs +0 -91
  405. package/fesm2022/rededor-site-front-end-lib-components-filter-letter-and-terms.mjs.map +0 -1
  406. package/fesm2022/rededor-site-front-end-lib-components-filters-filter-generic.mjs +0 -243
  407. package/fesm2022/rededor-site-front-end-lib-components-filters-filter-generic.mjs.map +0 -1
  408. package/fesm2022/rededor-site-front-end-lib-components-filters-filter-planos-convenios.mjs +0 -139
  409. package/fesm2022/rededor-site-front-end-lib-components-filters-filter-planos-convenios.mjs.map +0 -1
  410. package/fesm2022/rededor-site-front-end-lib-components-footer.mjs +0 -150
  411. package/fesm2022/rededor-site-front-end-lib-components-footer.mjs.map +0 -1
  412. package/fesm2022/rededor-site-front-end-lib-components-header-components-action.mjs +0 -31
  413. package/fesm2022/rededor-site-front-end-lib-components-header-components-action.mjs.map +0 -1
  414. package/fesm2022/rededor-site-front-end-lib-components-header-components-auxiliar.mjs +0 -59
  415. package/fesm2022/rededor-site-front-end-lib-components-header-components-auxiliar.mjs.map +0 -1
  416. package/fesm2022/rededor-site-front-end-lib-components-header-components-main.mjs +0 -164
  417. package/fesm2022/rededor-site-front-end-lib-components-header-components-main.mjs.map +0 -1
  418. package/fesm2022/rededor-site-front-end-lib-components-header-components-side.mjs +0 -68
  419. package/fesm2022/rededor-site-front-end-lib-components-header-components-side.mjs.map +0 -1
  420. package/fesm2022/rededor-site-front-end-lib-components-header-services.mjs +0 -50
  421. package/fesm2022/rededor-site-front-end-lib-components-header-services.mjs.map +0 -1
  422. package/fesm2022/rededor-site-front-end-lib-components-header.mjs +0 -259
  423. package/fesm2022/rededor-site-front-end-lib-components-header.mjs.map +0 -1
  424. package/fesm2022/rededor-site-front-end-lib-components-image.mjs +0 -48
  425. package/fesm2022/rededor-site-front-end-lib-components-image.mjs.map +0 -1
  426. package/fesm2022/rededor-site-front-end-lib-components-load-screen.mjs +0 -30
  427. package/fesm2022/rededor-site-front-end-lib-components-load-screen.mjs.map +0 -1
  428. package/fesm2022/rededor-site-front-end-lib-components-modal-drawer.mjs +0 -162
  429. package/fesm2022/rededor-site-front-end-lib-components-modal-drawer.mjs.map +0 -1
  430. package/fesm2022/rededor-site-front-end-lib-components-modal.mjs +0 -82
  431. package/fesm2022/rededor-site-front-end-lib-components-modal.mjs.map +0 -1
  432. package/fesm2022/rededor-site-front-end-lib-components-overlay.mjs +0 -24
  433. package/fesm2022/rededor-site-front-end-lib-components-overlay.mjs.map +0 -1
  434. package/fesm2022/rededor-site-front-end-lib-components-page-header.mjs +0 -41
  435. package/fesm2022/rededor-site-front-end-lib-components-page-header.mjs.map +0 -1
  436. package/fesm2022/rededor-site-front-end-lib-components-page-template-sidebar.mjs +0 -30
  437. package/fesm2022/rededor-site-front-end-lib-components-page-template-sidebar.mjs.map +0 -1
  438. package/fesm2022/rededor-site-front-end-lib-components-pagination.mjs +0 -55
  439. package/fesm2022/rededor-site-front-end-lib-components-pagination.mjs.map +0 -1
  440. package/fesm2022/rededor-site-front-end-lib-components-search.mjs +0 -119
  441. package/fesm2022/rededor-site-front-end-lib-components-search.mjs.map +0 -1
  442. package/fesm2022/rededor-site-front-end-lib-components-section-navigation.mjs +0 -134
  443. package/fesm2022/rededor-site-front-end-lib-components-section-navigation.mjs.map +0 -1
  444. package/fesm2022/rededor-site-front-end-lib-components-side-ctas.mjs +0 -118
  445. package/fesm2022/rededor-site-front-end-lib-components-side-ctas.mjs.map +0 -1
  446. package/fesm2022/rededor-site-front-end-lib-components-whatsapp.mjs +0 -49
  447. package/fesm2022/rededor-site-front-end-lib-components-whatsapp.mjs.map +0 -1
  448. package/fesm2022/rededor-site-front-end-lib-core.mjs +0 -1600
  449. package/fesm2022/rededor-site-front-end-lib-core.mjs.map +0 -1
  450. package/fesm2022/rededor-site-front-end-lib-cura-accordion.mjs +0 -252
  451. package/fesm2022/rededor-site-front-end-lib-cura-accordion.mjs.map +0 -1
  452. package/fesm2022/rededor-site-front-end-lib-cura-api.mjs +0 -541
  453. package/fesm2022/rededor-site-front-end-lib-cura-api.mjs.map +0 -1
  454. package/fesm2022/rededor-site-front-end-lib-cura-badges-cura-badge-counter.mjs +0 -90
  455. package/fesm2022/rededor-site-front-end-lib-cura-badges-cura-badge-counter.mjs.map +0 -1
  456. package/fesm2022/rededor-site-front-end-lib-cura-badges-cura-badge-distance.mjs +0 -55
  457. package/fesm2022/rededor-site-front-end-lib-cura-badges-cura-badge-distance.mjs.map +0 -1
  458. package/fesm2022/rededor-site-front-end-lib-cura-badges-cura-badge-dot.mjs +0 -66
  459. package/fesm2022/rededor-site-front-end-lib-cura-badges-cura-badge-dot.mjs.map +0 -1
  460. package/fesm2022/rededor-site-front-end-lib-cura-badges-cura-badge-pill.mjs +0 -96
  461. package/fesm2022/rededor-site-front-end-lib-cura-badges-cura-badge-pill.mjs.map +0 -1
  462. package/fesm2022/rededor-site-front-end-lib-cura-badges.mjs +0 -4
  463. package/fesm2022/rededor-site-front-end-lib-cura-badges.mjs.map +0 -1
  464. package/fesm2022/rededor-site-front-end-lib-cura-buttons-cura-button-outline.mjs +0 -165
  465. package/fesm2022/rededor-site-front-end-lib-cura-buttons-cura-button-outline.mjs.map +0 -1
  466. package/fesm2022/rededor-site-front-end-lib-cura-buttons-cura-button-select.mjs +0 -130
  467. package/fesm2022/rededor-site-front-end-lib-cura-buttons-cura-button-select.mjs.map +0 -1
  468. package/fesm2022/rededor-site-front-end-lib-cura-buttons-cura-button-transparent.mjs +0 -156
  469. package/fesm2022/rededor-site-front-end-lib-cura-buttons-cura-button-transparent.mjs.map +0 -1
  470. package/fesm2022/rededor-site-front-end-lib-cura-buttons-cura-button.mjs +0 -165
  471. package/fesm2022/rededor-site-front-end-lib-cura-buttons-cura-button.mjs.map +0 -1
  472. package/fesm2022/rededor-site-front-end-lib-cura-buttons.mjs +0 -13
  473. package/fesm2022/rededor-site-front-end-lib-cura-buttons.mjs.map +0 -1
  474. package/fesm2022/rededor-site-front-end-lib-cura-cards-cura-card.mjs +0 -96
  475. package/fesm2022/rededor-site-front-end-lib-cura-cards-cura-card.mjs.map +0 -1
  476. package/fesm2022/rededor-site-front-end-lib-cura-feedback-cura-alert.mjs +0 -90
  477. package/fesm2022/rededor-site-front-end-lib-cura-feedback-cura-alert.mjs.map +0 -1
  478. package/fesm2022/rededor-site-front-end-lib-cura-feedback-cura-modal.mjs +0 -105
  479. package/fesm2022/rededor-site-front-end-lib-cura-feedback-cura-modal.mjs.map +0 -1
  480. package/fesm2022/rededor-site-front-end-lib-cura-forms-cura-checkbox.mjs +0 -253
  481. package/fesm2022/rededor-site-front-end-lib-cura-forms-cura-checkbox.mjs.map +0 -1
  482. package/fesm2022/rededor-site-front-end-lib-cura-forms-cura-input-text.mjs +0 -547
  483. package/fesm2022/rededor-site-front-end-lib-cura-forms-cura-input-text.mjs.map +0 -1
  484. package/fesm2022/rededor-site-front-end-lib-cura-forms-cura-label.mjs +0 -88
  485. package/fesm2022/rededor-site-front-end-lib-cura-forms-cura-label.mjs.map +0 -1
  486. package/fesm2022/rededor-site-front-end-lib-cura-forms-cura-radio.mjs +0 -237
  487. package/fesm2022/rededor-site-front-end-lib-cura-forms-cura-radio.mjs.map +0 -1
  488. package/fesm2022/rededor-site-front-end-lib-cura-forms-cura-select-option.mjs +0 -82
  489. package/fesm2022/rededor-site-front-end-lib-cura-forms-cura-select-option.mjs.map +0 -1
  490. package/fesm2022/rededor-site-front-end-lib-cura-forms-cura-select.mjs +0 -377
  491. package/fesm2022/rededor-site-front-end-lib-cura-forms-cura-select.mjs.map +0 -1
  492. package/fesm2022/rededor-site-front-end-lib-cura-forms-cura-switch.mjs +0 -182
  493. package/fesm2022/rededor-site-front-end-lib-cura-forms-cura-switch.mjs.map +0 -1
  494. package/fesm2022/rededor-site-front-end-lib-cura-forms.mjs +0 -21
  495. package/fesm2022/rededor-site-front-end-lib-cura-forms.mjs.map +0 -1
  496. package/fesm2022/rededor-site-front-end-lib-cura-icons-cura-icon.mjs +0 -88
  497. package/fesm2022/rededor-site-front-end-lib-cura-icons-cura-icon.mjs.map +0 -1
  498. package/fesm2022/rededor-site-front-end-lib-cura-loaders-cura-loader-bar.mjs +0 -44
  499. package/fesm2022/rededor-site-front-end-lib-cura-loaders-cura-loader-bar.mjs.map +0 -1
  500. package/fesm2022/rededor-site-front-end-lib-cura-loaders-cura-loader-circle.mjs +0 -49
  501. package/fesm2022/rededor-site-front-end-lib-cura-loaders-cura-loader-circle.mjs.map +0 -1
  502. package/fesm2022/rededor-site-front-end-lib-cura-texts-cura-display.mjs +0 -84
  503. package/fesm2022/rededor-site-front-end-lib-cura-texts-cura-display.mjs.map +0 -1
  504. package/fesm2022/rededor-site-front-end-lib-cura-texts-cura-heading.mjs +0 -104
  505. package/fesm2022/rededor-site-front-end-lib-cura-texts-cura-heading.mjs.map +0 -1
  506. package/fesm2022/rededor-site-front-end-lib-cura-texts-cura-paragraph.mjs +0 -89
  507. package/fesm2022/rededor-site-front-end-lib-cura-texts-cura-paragraph.mjs.map +0 -1
  508. package/fesm2022/rededor-site-front-end-lib-cura-texts.mjs +0 -4
  509. package/fesm2022/rededor-site-front-end-lib-cura-texts.mjs.map +0 -1
  510. package/fesm2022/rededor-site-front-end-lib-enums.mjs +0 -187
  511. package/fesm2022/rededor-site-front-end-lib-enums.mjs.map +0 -1
  512. package/fesm2022/rededor-site-front-end-lib-services-algolia-search-api.mjs +0 -74
  513. package/fesm2022/rededor-site-front-end-lib-services-algolia-search-api.mjs.map +0 -1
  514. package/fesm2022/rededor-site-front-end-lib-services-algolia.mjs +0 -41
  515. package/fesm2022/rededor-site-front-end-lib-services-algolia.mjs.map +0 -1
  516. package/fesm2022/rededor-site-front-end-lib-services-ngu-carousel.mjs +0 -88
  517. package/fesm2022/rededor-site-front-end-lib-services-ngu-carousel.mjs.map +0 -1
  518. package/fesm2022/rededor-site-front-end-lib-services-ssr-loading.mjs +0 -52
  519. package/fesm2022/rededor-site-front-end-lib-services-ssr-loading.mjs.map +0 -1
  520. package/fesm2022/rededor-site-front-end-lib-services-youtube.mjs +0 -40
  521. package/fesm2022/rededor-site-front-end-lib-services-youtube.mjs.map +0 -1
  522. package/fesm2022/rededor-site-front-end-lib-shared.mjs +0 -110
  523. package/fesm2022/rededor-site-front-end-lib-shared.mjs.map +0 -1
  524. package/shared/index.d.ts +0 -40
@@ -0,0 +1,489 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import { DOCUMENT } from '@angular/common';
3
+ import * as he from 'he';
4
+ import { getSiteUrl, removeHtmlTags } from '../../helpers';
5
+ import { LIB_CONFIG } from '../../tokens/LibConfig';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/platform-browser";
8
+ import * as i2 from "@angular/common";
9
+ export class SeoService {
10
+ constructor(title, meta, location, libConfig, document) {
11
+ this.title = title;
12
+ this.meta = meta;
13
+ this.location = location;
14
+ this.libConfig = libConfig;
15
+ this.document = document;
16
+ this.separator = ' - ';
17
+ this.defaultTitle = 'Rede D’Or';
18
+ this.sameAs = [
19
+ 'https://www.facebook.com/rededor/',
20
+ 'https://www.instagram.com/rededor_oficial/',
21
+ 'https://www.linkedin.com/company/rededor-saoluiz',
22
+ 'https://twitter.com/rededor',
23
+ ];
24
+ this.twitterUser = '@rededor';
25
+ this.jsonTagId = 'seoJSON';
26
+ this.breadcrumbsJsonTagId = 'breadcrumbsJSON';
27
+ this.unidade = null;
28
+ this.unidadeName = '';
29
+ this.unidadePath = '';
30
+ this.unidadeSlug = '';
31
+ this.customJsonType = [];
32
+ }
33
+ setFullSeo(data) {
34
+ this.setTitle(data.title.text, !!data.title.sub);
35
+ this.setDescription(data.description);
36
+ this.setCanonicalHref(data.canonical);
37
+ this.setPageJson();
38
+ this.setSocialTags(data.socialTags);
39
+ }
40
+ /**
41
+ * Define tag description da página
42
+ * @param content conteúdo da descrição <string>
43
+ */
44
+ setDescription(content) {
45
+ const descTag = this.meta.getTag("name='description'");
46
+ if (content) {
47
+ content = he.decode(content);
48
+ content = removeHtmlTags(content);
49
+ }
50
+ else {
51
+ content = '';
52
+ }
53
+ this.activeDescription = content;
54
+ const tagContent = { name: 'description', content };
55
+ if (descTag) {
56
+ this.meta.updateTag(tagContent);
57
+ }
58
+ else {
59
+ this.meta.addTag(tagContent);
60
+ }
61
+ return this;
62
+ }
63
+ /**
64
+ * Define meta tags para a página
65
+ * @param tag nome da tag meta
66
+ * @param content conteúdo da tag meta
67
+ * @param type tipo de tag meta
68
+ */
69
+ setMetaTag(tag, content, type = 'name') {
70
+ const metatag = this.meta.getTag(`${type}='${tag}'`);
71
+ content = he.decode(content);
72
+ content = removeHtmlTags(content);
73
+ const tagContent = {
74
+ [type]: tag,
75
+ content,
76
+ };
77
+ if (!metatag) {
78
+ this.meta.addTag(tagContent);
79
+ }
80
+ else {
81
+ this.meta.updateTag(tagContent);
82
+ }
83
+ return this;
84
+ }
85
+ /**
86
+ * Remove meta tags da página
87
+ * @param tag nome da tag meta
88
+ * @param content conteúdo da tag meta
89
+ * @param attr atributo da tag meta
90
+ * @param type tipo de tag meta
91
+ */
92
+ removeTag(tag, content, attr, type = 'name') {
93
+ const metatag = this.meta.getTag(`${type}='${tag}'`);
94
+ if (metatag) {
95
+ this.meta.removeTag(`${attr}=${content}`);
96
+ }
97
+ return this;
98
+ }
99
+ /**
100
+ * Define meta tags para Facebook
101
+ * @param title título para o facebook
102
+ * @param description descrição para o facebook
103
+ * @param url url para definição do facebook
104
+ * @param img imagem para definição no facebook
105
+ */
106
+ setMetaFacebook(title, description, url, img = null) {
107
+ this.setMetaTag('og:url', url, 'property');
108
+ this.setMetaTag('og:title', title, 'property');
109
+ this.setMetaTag('og:description', description, 'property');
110
+ this.setMetaTag('og:type', 'website', 'property');
111
+ this.setMetaTag('og:image', img ?? '', 'property');
112
+ }
113
+ /**
114
+ * Define meta tags para Twitter
115
+ * @param title título para o twitter
116
+ * @param description descrição para o twitter
117
+ * @param url url para o twitter
118
+ * @param img imagem para definição no twitter
119
+ */
120
+ setMetaTwitter(title, description, url, img = null) {
121
+ this.setMetaTag('twitter:site', url, 'name');
122
+ this.setMetaTag('twitter:title', title, 'name');
123
+ this.setMetaTag('twitter:description', description, 'name');
124
+ this.setMetaTag('twitter:image', img ?? '', 'name');
125
+ }
126
+ /**
127
+ * Define tags de redes sociais (Twitter e Open Graph)
128
+ * @param properties
129
+ */
130
+ setSocialTags(properties) {
131
+ const pagePath = this.location.path();
132
+ const siteurl = getSiteUrl(this.libConfig?.siteUrl, this.libConfig?.siteSufix);
133
+ let defaultProperties = {
134
+ twitterCard: 'summary',
135
+ twitterSite: this.twitterUser,
136
+ type: 'website',
137
+ title: this.getTitle(),
138
+ description: this.activeDescription || '',
139
+ url: `${siteurl}${pagePath}`,
140
+ image: this.libConfig?.logoPath ? `${siteurl}${this.libConfig.logoPath}` : 'https://www.rededorsaoluiz.com.br/assets/imgs/logo-rededor-blue.png',
141
+ };
142
+ if (properties) {
143
+ defaultProperties = { ...defaultProperties, ...properties };
144
+ }
145
+ this.setMetaTag('twitter:card', defaultProperties.twitterCard || '', 'name')
146
+ .setMetaTag('twitter:site', defaultProperties.twitterSite || '', 'name')
147
+ .setMetaTag('og:type', defaultProperties.type || '', 'property')
148
+ .setMetaTag('og:title', defaultProperties.title || '', 'property')
149
+ .setMetaTag('og:description', defaultProperties.description || '', 'property')
150
+ .setMetaTag('og:url', defaultProperties.url || '', 'property')
151
+ .setMetaTag('og:image', defaultProperties.image || '', 'property');
152
+ return this;
153
+ }
154
+ /**
155
+ * Define título da página
156
+ * @param title título da página <string>
157
+ * @param sub Se é subsite acrescenta unidade <boolean>
158
+ */
159
+ setTitle(title, sub = false) {
160
+ if (title && title !== '') {
161
+ title = he.decode(title);
162
+ title = removeHtmlTags(title);
163
+ if (sub) {
164
+ title = he.decode(`${title}${this.separator}${this.unidadeName}`);
165
+ }
166
+ this.title.setTitle(title);
167
+ }
168
+ return this;
169
+ }
170
+ /** Obtem título atual da página */
171
+ getTitle() {
172
+ return this.title.getTitle();
173
+ }
174
+ set404Title(component = 'Default Component') {
175
+ if (component && component !== '') {
176
+ component = he.decode(component);
177
+ component = removeHtmlTags(component);
178
+ if (this.unidadeName) {
179
+ component = he.decode(`${component}${this.separator}${this.unidadeName}`);
180
+ }
181
+ }
182
+ const title = `Erro 404 - ${component} - ${this.libConfig?.siteName} - ${this.location.path()}`;
183
+ this.title.setTitle(title);
184
+ return this;
185
+ }
186
+ set500Title(component = 'Default Component') {
187
+ if (component && component !== '') {
188
+ component = he.decode(component);
189
+ component = removeHtmlTags(component);
190
+ if (this.unidadeName) {
191
+ component = he.decode(`${component}${this.separator}${this.unidadeName}`);
192
+ }
193
+ }
194
+ const title = `Erro 500 - ${component} - ${this.libConfig?.siteName} - ${this.location.path()}`;
195
+ this.title.setTitle(title);
196
+ return this;
197
+ }
198
+ /** Cria tag script para JSON de breadcrumbs */
199
+ createBreadcrumbsJSONTag() {
200
+ const tag = this.document.createElement('script');
201
+ tag.id = this.breadcrumbsJsonTagId;
202
+ tag.type = 'application/ld+json';
203
+ this.document.head.appendChild(tag);
204
+ this.breadcrumbsJsonTag = tag;
205
+ return tag;
206
+ }
207
+ /** Retorna tag para script json de breadcrumbs ou cria se não houver. */
208
+ getBreadcrumbsJSONTag() {
209
+ const elements = this.document.head.children;
210
+ let i;
211
+ for (i = 0; i < elements.length; i++) {
212
+ const elem = elements[i];
213
+ if (elem && elem.id === this.breadcrumbsJsonTagId) {
214
+ return elem;
215
+ }
216
+ }
217
+ return this.createBreadcrumbsJSONTag();
218
+ }
219
+ /** Define o JSON de breadcrumbs da página */
220
+ setBreadcrumbsJson(items) {
221
+ this.breadcrumbsJsonTag = this.getBreadcrumbsJSONTag();
222
+ const json = {
223
+ '@context': 'http://schema.org',
224
+ '@type': 'BreadcrumbList',
225
+ itemListElement: this.getJsonBreadcrumbItems(items),
226
+ };
227
+ this.breadcrumbsJsonTag.innerHTML = JSON.stringify(json);
228
+ return this;
229
+ }
230
+ /** Converte itens do breadcrumb em itens do JSON */
231
+ getJsonBreadcrumbItems(items) {
232
+ const jsonItems = [
233
+ {
234
+ '@type': 'ListItem',
235
+ position: 1,
236
+ item: { '@id': this.getBreadcrumbItemUrl(['/']), name: he.encode('Página Inicial') },
237
+ },
238
+ ];
239
+ items.forEach((item, i) => {
240
+ const jsonItem = {
241
+ '@type': 'ListItem',
242
+ position: i + 2,
243
+ item: { '@id': this.getBreadcrumbItemUrl(item?.url || []), name: he.encode(item.label) },
244
+ };
245
+ jsonItems.push(jsonItem);
246
+ });
247
+ return jsonItems;
248
+ }
249
+ /**
250
+ * Monta a url do item de breadcrumb proveniente do array de urls
251
+ * ou do caminho da própria página, conforme caso do último item.
252
+ */
253
+ getBreadcrumbItemUrl(url) {
254
+ const siteurl = getSiteUrl(this.libConfig?.siteUrl, this.libConfig?.siteSufix);
255
+ if (!url || url.length <= 0) {
256
+ const pagePath = this.location.path();
257
+ return `${siteurl}${pagePath}`;
258
+ }
259
+ url = url.filter((u) => u !== this.unidadePath);
260
+ const unidadePath = this.getUnidadePath();
261
+ const fullPath = `${unidadePath}/${url.join('/').replace(/^\/?/, '')}`;
262
+ return `${siteurl}${fullPath}`.replace(/\/$/, '');
263
+ }
264
+ /** Cria tag script para o JSON de SEO */
265
+ createJSONTag() {
266
+ const tag = this.document.createElement('script');
267
+ tag.id = this.jsonTagId;
268
+ tag.type = 'application/ld+json';
269
+ this.document.head.appendChild(tag);
270
+ this.jsonTag = tag;
271
+ return tag;
272
+ }
273
+ /** Retorna tag para script json de breadcrumbs ou cria se não houver. */
274
+ getJSONTag() {
275
+ const elements = this.document.head.children;
276
+ let i;
277
+ for (i = 0; i < elements.length; i++) {
278
+ const elem = elements[i];
279
+ if (elem && elem.id === this.jsonTagId) {
280
+ return elem;
281
+ }
282
+ }
283
+ return this.createJSONTag();
284
+ }
285
+ /** Define JSON para SEO somente quando no servidor */
286
+ setPageJson() {
287
+ this.jsonTag = this.getJSONTag();
288
+ const baseGraph = [this.getOrgJson(), this.getWebsiteJson(), this.getWebpageJson()];
289
+ const extendedGraph = this.customJsonType.length ? [...baseGraph, ...this.customJsonType] : baseGraph;
290
+ this.customJsonType = [];
291
+ const json = {
292
+ '@context': 'http://schema.org',
293
+ '@graph': extendedGraph,
294
+ };
295
+ this.jsonTag.innerHTML = JSON.stringify(json);
296
+ return this;
297
+ }
298
+ /** Obtem JSON da Organização */
299
+ getOrgJson() {
300
+ const siteurl = getSiteUrl(this.libConfig?.siteUrl, this.libConfig?.siteSufix);
301
+ return {
302
+ '@type': 'MedicalOrganization',
303
+ '@id': `${siteurl}#medicalorganization`,
304
+ name: this.defaultTitle,
305
+ keywords: this.libConfig?.keywords,
306
+ url: `${siteurl}`,
307
+ sameAs: this.sameAs,
308
+ };
309
+ }
310
+ /** Obtem JSON do Website (portal, unidades, etc) */
311
+ getWebsiteJson() {
312
+ const unidadePath = this.getUnidadePath();
313
+ const siteurl = getSiteUrl(this.libConfig?.siteUrl, this.libConfig?.siteSufix);
314
+ return {
315
+ '@type': 'WebSite',
316
+ '@id': `${siteurl}${unidadePath}#website`,
317
+ url: `${siteurl}${unidadePath}`,
318
+ name: this.unidadeName,
319
+ keywords: this.libConfig?.keywords,
320
+ };
321
+ }
322
+ /** Obtem Json da página */
323
+ getWebpageJson() {
324
+ const unidadePath = this.getUnidadePath();
325
+ const siteURL = getSiteUrl(this.libConfig?.siteUrl, this.libConfig?.siteSufix);
326
+ const pagePath = `${siteURL}${this.location.path()}`;
327
+ const desc = this.activeDescription ? this.activeDescription : '';
328
+ return {
329
+ '@type': 'WebPage',
330
+ '@id': `${pagePath}#webpage`,
331
+ url: pagePath,
332
+ inLanguage: 'pt-BR',
333
+ name: this.getTitle(),
334
+ isPartOf: { '@id': `${siteURL}${unidadePath}#website` },
335
+ about: { '@id': `${siteURL}#medicalorganization` },
336
+ description: desc,
337
+ };
338
+ }
339
+ getUnidadePath() {
340
+ let unidadePath = '';
341
+ if (this.unidade && this.unidadePath) {
342
+ unidadePath = this.unidade?.path === '/' ? '' : this.unidadePath?.substring(0, this.unidadePath?.length - 1);
343
+ }
344
+ return unidadePath;
345
+ }
346
+ /**
347
+ * Obtém a URL canônica da página.
348
+ * @returns A URL canônica da página.
349
+ */
350
+ getCanonicalHref() {
351
+ if (!this.canonicalTag) {
352
+ this.canonicalTag = this.getCanonicalTag();
353
+ }
354
+ return this.canonicalTag.href;
355
+ }
356
+ /** Cria tag para links canonicals no head */
357
+ createCanonicalTag() {
358
+ const tag = this.document.createElement('link');
359
+ tag.setAttribute('rel', 'canonical');
360
+ this.document.head.appendChild(tag);
361
+ tag.setAttribute('href', this.document.URL);
362
+ this.canonicalTag = tag;
363
+ return tag;
364
+ }
365
+ /** Retorna tag para link canonical existe ou cria se não houver. */
366
+ getCanonicalTag() {
367
+ const elements = this.document.head.children;
368
+ let i;
369
+ for (i = 0; i < elements.length; i++) {
370
+ const elem = elements[i];
371
+ if (elem && elem.tagName === 'LINK' && elem.rel === 'canonical') {
372
+ return elem;
373
+ }
374
+ }
375
+ return this.createCanonicalTag();
376
+ }
377
+ /**
378
+ * Define link canonical da página
379
+ * @param url url canonical
380
+ */
381
+ setCanonicalHref(url) {
382
+ if (!this.canonicalTag) {
383
+ this.canonicalTag = this.getCanonicalTag();
384
+ }
385
+ let path = this.document.location.pathname;
386
+ if (this.libConfig?.siteSufix && path.includes(this.libConfig?.siteSufix)) {
387
+ path = path.replace(this.libConfig?.siteSufix, '');
388
+ }
389
+ if (!path.startsWith('/')) {
390
+ path = `/${path}`;
391
+ }
392
+ const canonicalUrl = url && this.isCustomCanonical(url) ? url : `${getSiteUrl(this.libConfig?.siteUrl, this.libConfig?.siteSufix)}${path}`;
393
+ this.canonicalTag.setAttribute('href', canonicalUrl);
394
+ return this;
395
+ }
396
+ /**
397
+ * Verifica se a URL fornecida é um link canonical personalizado
398
+ * @param url URL fornecida
399
+ */
400
+ isCustomCanonical(url) {
401
+ const siteurl = getSiteUrl(this.libConfig?.siteUrl, this.libConfig?.siteSufix);
402
+ return url.startsWith(siteurl);
403
+ }
404
+ /**
405
+ * Obtém uma url válida na aplicação proveniente de uma URL gerada
406
+ * pelo plugin Yoast para canonical automático.
407
+ * Ex.: https://wp.rededorsaoluiz.com.br/brasil/especialidades/cardiologia/
408
+ * @param urlFromWpApi URL canonica gerada pelo Yoast Plugin.
409
+ */
410
+ toLocalCanonical(urlFromWpApi) {
411
+ const apiUrl = this.libConfig?.wpUrl ?? '';
412
+ const siteurl = getSiteUrl(this.libConfig?.siteUrl, this.libConfig?.siteSufix);
413
+ const unidadeSlug = this.unidadeSlug;
414
+ let converted = urlFromWpApi.replace(apiUrl, siteurl);
415
+ if (unidadeSlug !== '/' && converted.includes(`/${unidadeSlug}/`)) {
416
+ converted = converted.replace(`/${unidadeSlug}/`, `${this.unidadePath}`);
417
+ }
418
+ return converted;
419
+ }
420
+ getPostContent(post) {
421
+ const content = post?.acf?.['rdsl_post_content'] ? post?.acf?.rdsl_post_content?.find((content) => content.acf_fc_layout === 'text_html') : null;
422
+ return content?.content || post.content.rendered || '';
423
+ }
424
+ addArticleScript(post, scriptName) {
425
+ const postContent = this.getPostContent(post);
426
+ const postHeaderImage = post?.acf?.['rdsl_post_header_img']
427
+ ? {
428
+ url: post?.acf?.['rdsl_post_header_img'].url,
429
+ width: post?.acf?.['rdsl_post_header_img'].width,
430
+ height: post?.acf?.['rdsl_post_header_img'].height,
431
+ }
432
+ : null;
433
+ const structuredData = {
434
+ '@context': 'https://schema.org',
435
+ '@type': 'Article',
436
+ mainEntityOfPage: `${getSiteUrl(this.libConfig?.siteUrl, this.libConfig?.siteSufix)}${this.location.path()}`,
437
+ headline: post.title?.rendered,
438
+ datePublished: post.date_gmt,
439
+ publisher: {
440
+ '@type': 'MedicalOrganization',
441
+ name: 'Rede D’Or',
442
+ },
443
+ description: post.title?.rendered,
444
+ articleBody: removeHtmlTags(he.decode(postContent)),
445
+ dateModified: post.modified_gmt,
446
+ image: {
447
+ '@type': 'ImageObject',
448
+ url: postHeaderImage?.url || post.featured_media_path || '',
449
+ height: postHeaderImage?.height || '',
450
+ width: postHeaderImage?.width || '',
451
+ },
452
+ author: {
453
+ '@type': 'MedicalOrganization',
454
+ name: 'Rede D’Or',
455
+ },
456
+ wordcount: postContent.split(' ').length,
457
+ };
458
+ const script = this.document.createElement('script');
459
+ script.type = 'application/ld+json';
460
+ script.id = scriptName;
461
+ script.innerHTML = JSON.stringify(structuredData);
462
+ this.document.head.appendChild(script);
463
+ }
464
+ removeArticleScript(scriptName) {
465
+ const script = this.document.getElementById(scriptName);
466
+ script?.remove();
467
+ }
468
+ setUnidade({ unidade = null, unidadeName = '', unidadePath = '', unidadeSlug = '' }) {
469
+ this.unidade = unidade;
470
+ this.unidadeName = unidadeName;
471
+ this.unidadePath = unidadePath;
472
+ this.unidadeSlug = unidadeSlug;
473
+ }
474
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SeoService, deps: [{ token: i1.Title }, { token: i1.Meta }, { token: i2.Location }, { token: LIB_CONFIG }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Injectable }); }
475
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SeoService, providedIn: 'root' }); }
476
+ }
477
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SeoService, decorators: [{
478
+ type: Injectable,
479
+ args: [{
480
+ providedIn: 'root',
481
+ }]
482
+ }], ctorParameters: () => [{ type: i1.Title }, { type: i1.Meta }, { type: i2.Location }, { type: undefined, decorators: [{
483
+ type: Inject,
484
+ args: [LIB_CONFIG]
485
+ }] }, { type: Document, decorators: [{
486
+ type: Inject,
487
+ args: [DOCUMENT]
488
+ }] }] });
489
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaXRlLWZyb250LWVuZC1saWIvc3JjL2xpYi9zZXJ2aWNlcy9zZW8vc2VvLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLFFBQVEsRUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBRXJELE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBUXpCLE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQWEsTUFBTSx3QkFBd0IsQ0FBQzs7OztBQUsvRCxNQUFNLE9BQU8sVUFBVTtJQXlCckIsWUFDVSxLQUFZLEVBQ1osSUFBVSxFQUNWLFFBQWtCLEVBQ0UsU0FBb0IsRUFDdEIsUUFBa0I7UUFKcEMsVUFBSyxHQUFMLEtBQUssQ0FBTztRQUNaLFNBQUksR0FBSixJQUFJLENBQU07UUFDVixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ0UsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBN0J2QyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGlCQUFZLEdBQUcsV0FBVyxDQUFDO1FBRTNCLFdBQU0sR0FBRztZQUNkLG1DQUFtQztZQUNuQyw0Q0FBNEM7WUFDNUMsa0RBQWtEO1lBQ2xELDZCQUE2QjtTQUM5QixDQUFDO1FBQ0ssZ0JBQVcsR0FBRyxVQUFVLENBQUM7UUFJeEIsY0FBUyxHQUFHLFNBQVMsQ0FBQztRQUV0Qix5QkFBb0IsR0FBRyxpQkFBaUIsQ0FBQztRQUUxQyxZQUFPLEdBQVEsSUFBSSxDQUFDO1FBQ3BCLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLGdCQUFXLEdBQVcsRUFBRSxDQUFD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LFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxVQUFrQjtRQUNwQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN4RCxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVNLFVBQVUsQ0FBQyxFQUFFLE9BQU8sR0FBRyxJQUFJLEVBQUUsV0FBVyxHQUFHLEVBQUUsRUFBRSxXQUFXLEdBQUcsRUFBRSxFQUFFLFdBQVcsR0FBRyxFQUFFLEVBQWM7UUFDcEcsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7SUFDakMsQ0FBQzsrR0F0Z0JVLFVBQVUsbUZBNkJYLFVBQVUsYUFDVixRQUFRO21IQTlCUCxVQUFVLGNBRlQsTUFBTTs7NEZBRVAsVUFBVTtrQkFIdEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQThCSSxNQUFNOzJCQUFDLFVBQVU7OzBCQUNqQixNQUFNOzJCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWV0YSwgVGl0bGUgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgRE9DVU1FTlQsIExvY2F0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuXHJcbmltcG9ydCAqIGFzIGhlIGZyb20gJ2hlJztcclxuXHJcbmltcG9ydCB7IFNvY2lhbE1ldGFQcm9wZXJ0aWVzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3NvY2lhbC1tZXRhLXByb3BlcnRpZXMubW9kZWwnO1xyXG5pbXBvcnQgeyBCcmVhZGNydW1ic0l0ZW1zIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2JyZWFkY3J1bWJzL2JyZWFkY3J1bWJzLWl0ZW1zLm1vZGVsJztcclxuaW1wb3J0IHsgQnJlYWRjcnVtYnNKc29uSXRlbSB9IGZyb20gJy4uLy4uL21vZGVscy9icmVhZGNydW1icy9icmVhZGNydW1icy1qc29uLWl0ZW0ubW9kZWwnO1xyXG5pbXBvcnQgeyBTZW9EYXRhIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Nlby9zZW8tZGF0YS5tb2RlbCc7XHJcbmltcG9ydCB7IFNlb1VuaWRhZGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvc2VvL3Nlby11bmlkYWRlLm1vZGVsJztcclxuaW1wb3J0IHsgV3BQb3N0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3dvcmRwcmVzcy9wb3N0L3Bvc3QubW9kZWwnO1xyXG5pbXBvcnQgeyBnZXRTaXRlVXJsLCByZW1vdmVIdG1sVGFncyB9IGZyb20gJy4uLy4uL2hlbHBlcnMnO1xyXG5pbXBvcnQgeyBMSUJfQ09ORklHLCBMaWJDb25maWcgfSBmcm9tICcuLi8uLi90b2tlbnMvTGliQ29uZmlnJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZW9TZXJ2aWNlIHtcclxuICBwdWJsaWMgc2VwYXJhdG9yID0gJyAtICc7XHJcbiAgcHVibGljIGRlZmF1bHRUaXRsZSA9ICdSZWRlIETigJlPcic7XHJcbiAgcHVibGljIGFjdGl2ZURlc2NyaXB0aW9uITogc3RyaW5nO1xyXG4gIHB1YmxpYyBzYW1lQXMgPSBbXHJcbiAgICAnaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL3JlZGVkb3IvJyxcclxuICAgICdodHRwczovL3d3dy5pbnN0YWdyYW0uY29tL3JlZGVkb3Jfb2ZpY2lhbC8nLFxyXG4gICAgJ2h0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9jb21wYW55L3JlZGVkb3Itc2FvbHVpeicsXHJcbiAgICAnaHR0cHM6Ly90d2l0dGVyLmNvbS9yZWRlZG9yJyxcclxuICBdO1xyXG4gIHB1YmxpYyB0d2l0dGVyVXNlciA9ICdAcmVkZWRvcic7XHJcblxyXG4gIHByaXZhdGUgY2Fub25pY2FsVGFnITogSFRNTExpbmtFbGVtZW50O1xyXG4gIHByaXZhdGUganNvblRhZyE6IEhUTUxTY3JpcHRFbGVtZW50O1xyXG4gIHByaXZhdGUganNvblRhZ0lkID0gJ3Nlb0pTT04nO1xyXG4gIHByaXZhdGUgYnJlYWRjcnVtYnNKc29uVGFnITogSFRNTFNjcmlwdEVsZW1lbnQ7XHJcbiAgcHJpdmF0ZSBicmVhZGNydW1ic0pzb25UYWdJZCA9ICdicmVhZGNydW1ic0pTT04nO1xyXG5cclxuICBwdWJsaWMgdW5pZGFkZTogYW55ID0gbnVsbDtcclxuICBwdWJsaWMgdW5pZGFkZU5hbWU6IHN0cmluZyA9ICcnO1xyXG4gIHB1YmxpYyB1bmlkYWRlUGF0aDogc3RyaW5nID0gJyc7XHJcbiAgcHVibGljIHVuaWRhZGVTbHVnOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgcHVibGljIGN1c3RvbUpzb25UeXBlOiBhbnlbXSA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgdGl0bGU6IFRpdGxlLFxyXG4gICAgcHJpdmF0ZSBtZXRhOiBNZXRhLFxyXG4gICAgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb24sXHJcbiAgICBASW5qZWN0KExJQl9DT05GSUcpIHByaXZhdGUgbGliQ29uZmlnOiBMaWJDb25maWcsXHJcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBEb2N1bWVudCxcclxuICApIHt9XHJcblxyXG4gIHB1YmxpYyBzZXRGdWxsU2VvKGRhdGE6IFNlb0RhdGEpIHtcclxuICAgIHRoaXMuc2V0VGl0bGUoZGF0YS50aXRsZS50ZXh0LCAhIWRhdGEudGl0bGUuc3ViKTtcclxuICAgIHRoaXMuc2V0RGVzY3JpcHRpb24oZGF0YS5kZXNjcmlwdGlvbik7XHJcbiAgICB0aGlzLnNldENhbm9uaWNhbEhyZWYoZGF0YS5jYW5vbmljYWwpO1xyXG4gICAgdGhpcy5zZXRQYWdlSnNvbigpO1xyXG4gICAgdGhpcy5zZXRTb2NpYWxUYWdzKGRhdGEuc29jaWFsVGFncyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWZpbmUgdGFnIGRlc2NyaXB0aW9uIGRhIHDDoWdpbmFcclxuICAgKiBAcGFyYW0gY29udGVudCBjb250ZcO6ZG8gZGEgZGVzY3Jpw6fDo28gPHN0cmluZz5cclxuICAgKi9cclxuICBwdWJsaWMgc2V0RGVzY3JpcHRpb24oY29udGVudDogc3RyaW5nKTogU2VvU2VydmljZSB7XHJcbiAgICBjb25zdCBkZXNjVGFnID0gdGhpcy5tZXRhLmdldFRhZyhcIm5hbWU9J2Rlc2NyaXB0aW9uJ1wiKTtcclxuICAgIGlmIChjb250ZW50KSB7XHJcbiAgICAgIGNvbnRlbnQgPSBoZS5kZWNvZGUoY29udGVudCk7XHJcbiAgICAgIGNvbnRlbnQgPSByZW1vdmVIdG1sVGFncyhjb250ZW50KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnRlbnQgPSAnJztcclxuICAgIH1cclxuICAgIHRoaXMuYWN0aXZlRGVzY3JpcHRpb24gPSBjb250ZW50O1xyXG4gICAgY29uc3QgdGFnQ29udGVudCA9IHsgbmFtZTogJ2Rlc2NyaXB0aW9uJywgY29udGVudCB9O1xyXG4gICAgaWYgKGRlc2NUYWcpIHtcclxuICAgICAgdGhpcy5tZXRhLnVwZGF0ZVRhZyh0YWdDb250ZW50KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubWV0YS5hZGRUYWcodGFnQ29udGVudCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmluZSBtZXRhIHRhZ3MgcGFyYSBhIHDDoWdpbmFcclxuICAgKiBAcGFyYW0gdGFnIG5vbWUgZGEgdGFnIG1ldGFcclxuICAgKiBAcGFyYW0gY29udGVudCBjb250ZcO6ZG8gZGEgdGFnIG1ldGFcclxuICAgKiBAcGFyYW0gdHlwZSB0aXBvIGRlIHRhZyBtZXRhXHJcbiAgICovXHJcbiAgcHVibGljIHNldE1ldGFUYWcodGFnOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZywgdHlwZSA9ICduYW1lJykge1xyXG4gICAgY29uc3QgbWV0YXRhZyA9IHRoaXMubWV0YS5nZXRUYWcoYCR7dHlwZX09JyR7dGFnfSdgKTtcclxuICAgIGNvbnRlbnQgPSBoZS5kZWNvZGUoY29udGVudCk7XHJcbiAgICBjb250ZW50ID0gcmVtb3ZlSHRtbFRhZ3MoY29udGVudCk7XHJcbiAgICBjb25zdCB0YWdDb250ZW50ID0ge1xyXG4gICAgICBbdHlwZV06IHRhZyxcclxuICAgICAgY29udGVudCxcclxuICAgIH07XHJcbiAgICBpZiAoIW1ldGF0YWcpIHtcclxuICAgICAgdGhpcy5tZXRhLmFkZFRhZyh0YWdDb250ZW50KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubWV0YS51cGRhdGVUYWcodGFnQ29udGVudCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSBtZXRhIHRhZ3MgZGEgcMOhZ2luYVxyXG4gICAqIEBwYXJhbSB0YWcgbm9tZSBkYSB0YWcgbWV0YVxyXG4gICAqIEBwYXJhbSBjb250ZW50IGNvbnRlw7pkbyBkYSB0YWcgbWV0YVxyXG4gICAqIEBwYXJhbSBhdHRyIGF0cmlidXRvIGRhIHRhZyBtZXRhXHJcbiAgICogQHBhcmFtIHR5cGUgdGlwbyBkZSB0YWcgbWV0YVxyXG4gICAqL1xyXG4gIHB1YmxpYyByZW1vdmVUYWcodGFnOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZywgYXR0cjogc3RyaW5nLCB0eXBlID0gJ25hbWUnKSB7XHJcbiAgICBjb25zdCBtZXRhdGFnID0gdGhpcy5tZXRhLmdldFRhZyhgJHt0eXBlfT0nJHt0YWd9J2ApO1xyXG4gICAgaWYgKG1ldGF0YWcpIHtcclxuICAgICAgdGhpcy5tZXRhLnJlbW92ZVRhZyhgJHthdHRyfT0ke2NvbnRlbnR9YCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmluZSBtZXRhIHRhZ3MgcGFyYSBGYWNlYm9va1xyXG4gICAqIEBwYXJhbSB0aXRsZSB0w610dWxvIHBhcmEgbyBmYWNlYm9va1xyXG4gICAqIEBwYXJhbSBkZXNjcmlwdGlvbiBkZXNjcmnDp8OjbyBwYXJhIG8gZmFjZWJvb2tcclxuICAgKiBAcGFyYW0gdXJsIHVybCBwYXJhIGRlZmluacOnw6NvIGRvIGZhY2Vib29rXHJcbiAgICogQHBhcmFtIGltZyBpbWFnZW0gcGFyYSBkZWZpbmnDp8OjbyBubyBmYWNlYm9va1xyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXRNZXRhRmFjZWJvb2sodGl0bGU6IHN0cmluZywgZGVzY3JpcHRpb246IHN0cmluZywgdXJsOiBzdHJpbmcsIGltZzogc3RyaW5nIHwgbnVsbCA9IG51bGwpIHtcclxuICAgIHRoaXMuc2V0TWV0YVRhZygnb2c6dXJsJywgdXJsLCAncHJvcGVydHknKTtcclxuICAgIHRoaXMuc2V0TWV0YVRhZygnb2c6dGl0bGUnLCB0aXRsZSwgJ3Byb3BlcnR5Jyk7XHJcbiAgICB0aGlzLnNldE1ldGFUYWcoJ29nOmRlc2NyaXB0aW9uJywgZGVzY3JpcHRpb24sICdwcm9wZXJ0eScpO1xyXG4gICAgdGhpcy5zZXRNZXRhVGFnKCdvZzp0eXBlJywgJ3dlYnNpdGUnLCAncHJvcGVydHknKTtcclxuICAgIHRoaXMuc2V0TWV0YVRhZygnb2c6aW1hZ2UnLCBpbWcgPz8gJycsICdwcm9wZXJ0eScpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVmaW5lIG1ldGEgdGFncyBwYXJhIFR3aXR0ZXJcclxuICAgKiBAcGFyYW0gdGl0bGUgdMOtdHVsbyBwYXJhIG8gdHdpdHRlclxyXG4gICAqIEBwYXJhbSBkZXNjcmlwdGlvbiBkZXNjcmnDp8OjbyBwYXJhIG8gdHdpdHRlclxyXG4gICAqIEBwYXJhbSB1cmwgdXJsIHBhcmEgbyB0d2l0dGVyXHJcbiAgICogQHBhcmFtIGltZyBpbWFnZW0gcGFyYSBkZWZpbmnDp8OjbyBubyB0d2l0dGVyXHJcbiAgICovXHJcbiAgcHVibGljIHNldE1ldGFUd2l0dGVyKHRpdGxlOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcsIHVybDogc3RyaW5nLCBpbWc6IHN0cmluZyB8IG51bGwgPSBudWxsKSB7XHJcbiAgICB0aGlzLnNldE1ldGFUYWcoJ3R3aXR0ZXI6c2l0ZScsIHVybCwgJ25hbWUnKTtcclxuICAgIHRoaXMuc2V0TWV0YVRhZygndHdpdHRlcjp0aXRsZScsIHRpdGxlLCAnbmFtZScpO1xyXG4gICAgdGhpcy5zZXRNZXRhVGFnKCd0d2l0dGVyOmRlc2NyaXB0aW9uJywgZGVzY3JpcHRpb24sICduYW1lJyk7XHJcbiAgICB0aGlzLnNldE1ldGFUYWcoJ3R3aXR0ZXI6aW1hZ2UnLCBpbWcgPz8gJycsICduYW1lJyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWZpbmUgdGFncyBkZSByZWRlcyBzb2NpYWlzIChUd2l0dGVyIGUgT3BlbiBHcmFwaClcclxuICAgKiBAcGFyYW0gcHJvcGVydGllc1xyXG4gICAqL1xyXG4gIHNldFNvY2lhbFRhZ3MocHJvcGVydGllcz86IFNvY2lhbE1ldGFQcm9wZXJ0aWVzKSB7XHJcbiAgICBjb25zdCBwYWdlUGF0aCA9IHRoaXMubG9jYXRpb24ucGF0aCgpO1xyXG4gICAgY29uc3Qgc2l0ZXVybCA9IGdldFNpdGVVcmwodGhpcy5saWJDb25maWc/LnNpdGVVcmwsIHRoaXMubGliQ29uZmlnPy5zaXRlU3VmaXgpO1xyXG4gICAgbGV0IGRlZmF1bHRQcm9wZXJ0aWVzOiBTb2NpYWxNZXRhUHJvcGVydGllcyA9IHtcclxuICAgICAgdHdpdHRlckNhcmQ6ICdzdW1tYXJ5JyxcclxuICAgICAgdHdpdHRlclNpdGU6IHRoaXMudHdpdHRlclVzZXIsXHJcbiAgICAgIHR5cGU6ICd3ZWJzaXRlJyxcclxuICAgICAgdGl0bGU6IHRoaXMuZ2V0VGl0bGUoKSxcclxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuYWN0aXZlRGVzY3JpcHRpb24gfHwgJycsXHJcbiAgICAgIHVybDogYCR7c2l0ZXVybH0ke3BhZ2VQYXRofWAsXHJcbiAgICAgIGltYWdlOiB0aGlzLmxpYkNvbmZpZz8ubG9nb1BhdGggPyBgJHtzaXRldXJsfSR7dGhpcy5saWJDb25maWcubG9nb1BhdGh9YCA6ICdodHRwczovL3d3dy5yZWRlZG9yc2FvbHVpei5jb20uYnIvYXNzZXRzL2ltZ3MvbG9nby1yZWRlZG9yLWJsdWUucG5nJyxcclxuICAgIH07XHJcbiAgICBpZiAocHJvcGVydGllcykge1xyXG4gICAgICBkZWZhdWx0UHJvcGVydGllcyA9IHsgLi4uZGVmYXVsdFByb3BlcnRpZXMsIC4uLnByb3BlcnRpZXMgfTtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0TWV0YVRhZygndHdpdHRlcjpjYXJkJywgZGVmYXVsdFByb3BlcnRpZXMudHdpdHRlckNhcmQgfHwgJycsICduYW1lJylcclxuICAgICAgLnNldE1ldGFUYWcoJ3R3aXR0ZXI6c2l0ZScsIGRlZmF1bHRQcm9wZXJ0aWVzLnR3aXR0ZXJTaXRlIHx8ICcnLCAnbmFtZScpXHJcbiAgICAgIC5zZXRNZXRhVGFnKCdvZzp0eXBlJywgZGVmYXVsdFByb3BlcnRpZXMudHlwZSB8fCAnJywgJ3Byb3BlcnR5JylcclxuICAgICAgLnNldE1ldGFUYWcoJ29nOnRpdGxlJywgZGVmYXVsdFByb3BlcnRpZXMudGl0bGUgfHwgJycsICdwcm9wZXJ0eScpXHJcbiAgICAgIC5zZXRNZXRhVGFnKCdvZzpkZXNjcmlwdGlvbicsIGRlZmF1bHRQcm9wZXJ0aWVzLmRlc2NyaXB0aW9uIHx8ICcnLCAncHJvcGVydHknKVxyXG4gICAgICAuc2V0TWV0YVRhZygnb2c6dXJsJywgZGVmYXVsdFByb3BlcnRpZXMudXJsIHx8ICcnLCAncHJvcGVydHknKVxyXG4gICAgICAuc2V0TWV0YVRhZygnb2c6aW1hZ2UnLCBkZWZhdWx0UHJvcGVydGllcy5pbWFnZSB8fCAnJywgJ3Byb3BlcnR5Jyk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWZpbmUgdMOtdHVsbyBkYSBww6FnaW5hXHJcbiAgICogQHBhcmFtIHRpdGxlIHTDrXR1bG8gZGEgcMOhZ2luYSA8c3RyaW5nPlxyXG4gICAqIEBwYXJhbSBzdWIgU2Ugw6kgc3Vic2l0ZSBhY3Jlc2NlbnRhIHVuaWRhZGUgPGJvb2xlYW4+XHJcbiAgICovXHJcbiAgcHVibGljIHNldFRpdGxlKHRpdGxlOiBzdHJpbmcsIHN1YiA9IGZhbHNlKSB7XHJcbiAgICBpZiAodGl0bGUgJiYgdGl0bGUgIT09ICcnKSB7XHJcbiAgICAgIHRpdGxlID0gaGUuZGVjb2RlKHRpdGxlKTtcclxuICAgICAgdGl0bGUgPSByZW1vdmVIdG1sVGFncyh0aXRsZSk7XHJcbiAgICAgIGlmIChzdWIpIHtcclxuICAgICAgICB0aXRsZSA9IGhlLmRlY29kZShgJHt0aXRsZX0ke3RoaXMuc2VwYXJhdG9yfSR7dGhpcy51bmlkYWRlTmFtZX1gKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRpdGxlLnNldFRpdGxlKHRpdGxlKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLyoqIE9idGVtIHTDrXR1bG8gYXR1YWwgZGEgcMOhZ2luYSAqL1xyXG4gIHB1YmxpYyBnZXRUaXRsZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudGl0bGUuZ2V0VGl0bGUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQ0MDRUaXRsZShjb21wb25lbnQ6IHN0cmluZyA9ICdEZWZhdWx0IENvbXBvbmVudCcpIHtcclxuICAgIGlmIChjb21wb25lbnQgJiYgY29tcG9uZW50ICE9PSAnJykge1xyXG4gICAgICBjb21wb25lbnQgPSBoZS5kZWNvZGUoY29tcG9uZW50KTtcclxuICAgICAgY29tcG9uZW50ID0gcmVtb3ZlSHRtbFRhZ3MoY29tcG9uZW50KTtcclxuICAgICAgaWYgKHRoaXMudW5pZGFkZU5hbWUpIHtcclxuICAgICAgICBjb21wb25lbnQgPSBoZS5kZWNvZGUoYCR7Y29tcG9uZW50fSR7dGhpcy5zZXBhcmF0b3J9JHt0aGlzLnVuaWRhZGVOYW1lfWApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBjb25zdCB0aXRsZSA9IGBFcnJvIDQwNCAtICR7Y29tcG9uZW50fSAtICR7dGhpcy5saWJDb25maWc/LnNpdGVOYW1lfSAtICR7dGhpcy5sb2NhdGlvbi5wYXRoKCl9YDtcclxuICAgIHRoaXMudGl0bGUuc2V0VGl0bGUodGl0bGUpO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0NTAwVGl0bGUoY29tcG9uZW50OiBzdHJpbmcgPSAnRGVmYXVsdCBDb21wb25lbnQnKSB7XHJcbiAgICBpZiAoY29tcG9uZW50ICYmIGNvbXBvbmVudCAhPT0gJycpIHtcclxuICAgICAgY29tcG9uZW50ID0gaGUuZGVjb2RlKGNvbXBvbmVudCk7XHJcbiAgICAgIGNvbXBvbmVudCA9IHJlbW92ZUh0bWxUYWdzKGNvbXBvbmVudCk7XHJcbiAgICAgIGlmICh0aGlzLnVuaWRhZGVOYW1lKSB7XHJcbiAgICAgICAgY29tcG9uZW50ID0gaGUuZGVjb2RlKGAke2NvbXBvbmVudH0ke3RoaXMuc2VwYXJhdG9yfSR7dGhpcy51bmlkYWRlTmFtZX1gKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgdGl0bGUgPSBgRXJybyA1MDAgLSAke2NvbXBvbmVudH0gLSAke3RoaXMubGliQ29uZmlnPy5zaXRlTmFtZX0gLSAke3RoaXMubG9jYXRpb24ucGF0aCgpfWA7XHJcbiAgICB0aGlzLnRpdGxlLnNldFRpdGxlKHRpdGxlKTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLyoqIENyaWEgdGFnIHNjcmlwdCBwYXJhIEpTT04gZGUgYnJlYWRjcnVtYnMgKi9cclxuICBwcml2YXRlIGNyZWF0ZUJyZWFkY3J1bWJzSlNPTlRhZygpOiBIVE1MU2NyaXB0RWxlbWVudCB7XHJcbiAgICBjb25zdCB0YWc6IEhUTUxTY3JpcHRFbGVtZW50ID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcclxuICAgIHRhZy5pZCA9IHRoaXMuYnJlYWRjcnVtYnNKc29uVGFnSWQ7XHJcbiAgICB0YWcudHlwZSA9ICdhcHBsaWNhdGlvbi9sZCtqc29uJztcclxuICAgIHRoaXMuZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh0YWcpO1xyXG4gICAgdGhpcy5icmVhZGNydW1ic0pzb25UYWcgPSB0YWc7XHJcbiAgICByZXR1cm4gdGFnO1xyXG4gIH1cclxuXHJcbiAgLyoqIFJldG9ybmEgdGFnIHBhcmEgc2NyaXB0IGpzb24gZGUgYnJlYWRjcnVtYnMgb3UgY3JpYSBzZSBuw6NvIGhvdXZlci4gKi9cclxuICBwcml2YXRlIGdldEJyZWFkY3J1bWJzSlNPTlRhZygpOiBIVE1MU2NyaXB0RWxlbWVudCB7XHJcbiAgICBjb25zdCBlbGVtZW50cyA9IHRoaXMuZG9jdW1lbnQuaGVhZC5jaGlsZHJlbjtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgZWxlbSA9IGVsZW1lbnRzW2ldIGFzIEhUTUxTY3JpcHRFbGVtZW50O1xyXG4gICAgICBpZiAoZWxlbSAmJiBlbGVtLmlkID09PSB0aGlzLmJyZWFkY3J1bWJzSnNvblRhZ0lkKSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmNyZWF0ZUJyZWFkY3J1bWJzSlNPTlRhZygpO1xyXG4gIH1cclxuXHJcbiAgLyoqIERlZmluZSBvIEpTT04gZGUgYnJlYWRjcnVtYnMgZGEgcMOhZ2luYSAqL1xyXG4gIHB1YmxpYyBzZXRCcmVhZGNydW1ic0pzb24oaXRlbXM6IEJyZWFkY3J1bWJzSXRlbXNbXSkge1xyXG4gICAgdGhpcy5icmVhZGNydW1ic0pzb25UYWcgPSB0aGlzLmdldEJyZWFkY3J1bWJzSlNPTlRhZygpO1xyXG4gICAgY29uc3QganNvbiA9IHtcclxuICAgICAgJ0Bjb250ZXh0JzogJ2h0dHA6Ly9zY2hlbWEub3JnJyxcclxuICAgICAgJ0B0eXBlJzogJ0JyZWFkY3J1bWJMaXN0JyxcclxuICAgICAgaXRlbUxpc3RFbGVtZW50OiB0aGlzLmdldEpzb25CcmVhZGNydW1iSXRlbXMoaXRlbXMpLFxyXG4gICAgfTtcclxuICAgIHRoaXMuYnJlYWRjcnVtYnNKc29uVGFnLmlubmVySFRNTCA9IEpTT04uc3RyaW5naWZ5KGpzb24pO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvKiogQ29udmVydGUgaXRlbnMgZG8gYnJlYWRjcnVtYiBlbSBpdGVucyBkbyBKU09OICovXHJcbiAgcHJpdmF0ZSBnZXRKc29uQnJlYWRjcnVtYkl0ZW1zKGl0ZW1zOiBCcmVhZGNydW1ic0l0ZW1zW10pOiBCcmVhZGNydW1ic0pzb25JdGVtW10ge1xyXG4gICAgY29uc3QganNvbkl0ZW1zID0gW1xyXG4gICAgICB7XHJcbiAgICAgICAgJ0B0eXBlJzogJ0xpc3RJdGVtJyxcclxuICAgICAgICBwb3NpdGlvbjogMSxcclxuICAgICAgICBpdGVtOiB7ICdAaWQnOiB0aGlzLmdldEJyZWFkY3J1bWJJdGVtVXJsKFsnLyddKSwgbmFtZTogaGUuZW5jb2RlKCdQw6FnaW5hIEluaWNpYWwnKSB9LFxyXG4gICAgICB9IGFzIEJyZWFkY3J1bWJzSnNvbkl0ZW0sXHJcbiAgICBdO1xyXG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbSwgaSkgPT4ge1xyXG4gICAgICBjb25zdCBqc29uSXRlbTogQnJlYWRjcnVtYnNKc29uSXRlbSA9IHtcclxuICAgICAgICAnQHR5cGUnOiAnTGlzdEl0ZW0nLFxyXG4gICAgICAgIHBvc2l0aW9uOiBpICsgMixcclxuICAgICAgICBpdGVtOiB7ICdAaWQnOiB0aGlzLmdldEJyZWFkY3J1bWJJdGVtVXJsKGl0ZW0/LnVybCB8fCBbXSksIG5hbWU6IGhlLmVuY29kZShpdGVtLmxhYmVsKSB9LFxyXG4gICAgICB9O1xyXG4gICAgICBqc29uSXRlbXMucHVzaChqc29uSXRlbSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBqc29uSXRlbXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNb250YSBhIHVybCBkbyBpdGVtIGRlIGJyZWFkY3J1bWIgcHJvdmVuaWVudGUgZG8gYXJyYXkgZGUgdXJsc1xyXG4gICAqIG91IGRvIGNhbWluaG8gZGEgcHLDs3ByaWEgcMOhZ2luYSwgY29uZm9ybWUgY2FzbyBkbyDDumx0aW1vIGl0ZW0uXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRCcmVhZGNydW1iSXRlbVVybCh1cmw6IHN0cmluZ1tdKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHNpdGV1cmwgPSBnZXRTaXRlVXJsKHRoaXMubGliQ29uZmlnPy5zaXRlVXJsLCB0aGlzLmxpYkNvbmZpZz8uc2l0ZVN1Zml4KTtcclxuICAgIGlmICghdXJsIHx8IHVybC5sZW5ndGggPD0gMCkge1xyXG4gICAgICBjb25zdCBwYWdlUGF0aCA9IHRoaXMubG9jYXRpb24ucGF0aCgpO1xyXG4gICAgICByZXR1cm4gYCR7c2l0ZXVybH0ke3BhZ2VQYXRofWA7XHJcbiAgICB9XHJcbiAgICB1cmwgPSB1cmwuZmlsdGVyKCh1KSA9PiB1ICE9PSB0aGlzLnVuaWRhZGVQYXRoKTtcclxuICAgIGNvbnN0IHVuaWRhZGVQYXRoID0gdGhpcy5nZXRVbmlkYWRlUGF0aCgpO1xyXG4gICAgY29uc3QgZnVsbFBhdGggPSBgJHt1bmlkYWRlUGF0aH0vJHt1cmwuam9pbignLycpLnJlcGxhY2UoL15cXC8/LywgJycpfWA7XHJcbiAgICByZXR1cm4gYCR7c2l0ZXVybH0ke2Z1bGxQYXRofWAucmVwbGFjZSgvXFwvJC8sICcnKTtcclxuICB9XHJcblxyXG4gIC8qKiBDcmlhIHRhZyBzY3JpcHQgcGFyYSBvIEpTT04gZGUgU0VPICovXHJcbiAgcHJpdmF0ZSBjcmVhdGVKU09OVGFnKCk6IEhUTUxTY3JpcHRFbGVtZW50IHtcclxuICAgIGNvbnN0IHRhZzogSFRNTFNjcmlwdEVsZW1lbnQgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xyXG4gICAgdGFnLmlkID0gdGhpcy5qc29uVGFnSWQ7XHJcbiAgICB0YWcudHlwZSA9ICdhcHBsaWNhdGlvbi9sZCtqc29uJztcclxuICAgIHRoaXMuZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh0YWcpO1xyXG4gICAgdGhpcy5qc29uVGFnID0gdGFnO1xyXG4gICAgcmV0dXJuIHRhZztcclxuICB9XHJcblxyXG4gIC8qKiBSZXRvcm5hIHRhZyBwYXJhIHNjcmlwdCBqc29uIGRlIGJyZWFkY3J1bWJzIG91IGNyaWEgc2UgbsOjbyBob3V2ZXIuICovXHJcbiAgcHJpdmF0ZSBnZXRKU09OVGFnKCk6IEhUTUxTY3JpcHRFbGVtZW50IHtcclxuICAgIGNvbnN0IGVsZW1lbnRzID0gdGhpcy5kb2N1bWVudC5oZWFkLmNoaWxkcmVuO1xyXG4gICAgbGV0IGk6IG51bWJlcjtcclxuICAgIGZvciAoaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBlbGVtID0gZWxlbWVudHNbaV0gYXMgSFRNTFNjcmlwdEVsZW1lbnQ7XHJcbiAgICAgIGlmIChlbGVtICYmIGVsZW0uaWQgPT09IHRoaXMuanNvblRhZ0lkKSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmNyZWF0ZUpTT05UYWcoKTtcclxuICB9XHJcblxyXG4gIC8qKiBEZWZpbmUgSlNPTiBwYXJhIFNFTyBzb21lbnRlIHF1YW5kbyBubyBzZXJ2aWRvciAqL1xyXG4gIHB1YmxpYyBzZXRQYWdlSnNvbigpIHtcclxuICAgIHRoaXMuanNvblRhZyA9IHRoaXMuZ2V0SlNPTlRhZygpO1xyXG5cclxuICAgIGNvbnN0IGJhc2VHcmFwaCA9IFt0aGlzLmdldE9yZ0pzb24oKSwgdGhpcy5nZXRXZWJzaXRlSnNvbigpLCB0aGlzLmdldFdlYnBhZ2VKc29uKCldO1xyXG5cclxuICAgIGNvbnN0IGV4dGVuZGVkR3JhcGggPSB0aGlzLmN1c3RvbUpzb25UeXBlLmxlbmd0aCA/IFsuLi5iYXNlR3JhcGgsIC4uLnRoaXMuY3VzdG9tSnNvblR5cGVdIDogYmFzZUdyYXBoO1xyXG5cclxuICAgIHRoaXMuY3VzdG9tSnNvblR5cGUgPSBbXTtcclxuXHJcbiAgICBjb25zdCBqc29uID0ge1xyXG4gICAgICAnQGNvbnRleHQnOiAnaHR0cDovL3NjaGVtYS5vcmcnLFxyXG4gICAgICAnQGdyYXBoJzogZXh0ZW5kZWRHcmFwaCxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5qc29uVGFnLmlubmVySFRNTCA9IEpTT04uc3RyaW5naWZ5KGpzb24pO1xyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLyoqIE9idGVtIEpTT04gZGEgT3JnYW5pemHDp8OjbyAqL1xyXG4gIHByaXZhdGUgZ2V0T3JnSnNvbigpIHtcclxuICAgIGNvbnN0IHNpdGV1cmwgPSBnZXRTaXRlVXJsKHRoaXMubGliQ29uZmlnPy5zaXRlVXJsLCB0aGlzLmxpYkNvbmZpZz8uc2l0ZVN1Zml4KTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICdAdHlwZSc6ICdNZWRpY2FsT3JnYW5pemF0aW9uJyxcclxuICAgICAgJ0BpZCc6IGAke3NpdGV1cmx9I21lZGljYWxvcmdhbml6YXRpb25gLFxyXG4gICAgICBuYW1lOiB0aGlzLmRlZmF1bHRUaXRsZSxcclxuICAgICAga2V5d29yZHM6IHRoaXMubGliQ29uZmlnPy5rZXl3b3JkcyxcclxuICAgICAgdXJsOiBgJHtzaXRldXJsfWAsXHJcbiAgICAgIHNhbWVBczogdGhpcy5zYW1lQXMsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqIE9idGVtIEpTT04gZG8gV2Vic2l0ZSAocG9ydGFsLCB1bmlkYWRlcywgZXRjKSAqL1xyXG4gIHByaXZhdGUgZ2V0V2Vic2l0ZUpzb24oKSB7XHJcbiAgICBjb25zdCB1bmlkYWRlUGF0aCA9IHRoaXMuZ2V0VW5pZGFkZVBhdGgoKTtcclxuICAgIGNvbnN0IHNpdGV1cmwgPSBnZXRTaXRlVXJsKHRoaXMubGliQ29uZmlnPy5zaXRlVXJsLCB0aGlzLmxpYkNvbmZpZz8uc2l0ZVN1Zml4KTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICdAdHlwZSc6ICdXZWJTaXRlJyxcclxuICAgICAgJ0BpZCc6IGAke3NpdGV1cmx9JHt1bmlkYWRlUGF0aH0jd2Vic2l0ZWAsXHJcbiAgICAgIHVybDogYCR7c2l0ZXVybH0ke3VuaWRhZGVQYXRofWAsXHJcbiAgICAgIG5hbWU6IHRoaXMudW5pZGFkZU5hbWUsXHJcbiAgICAgIGtleXdvcmRzOiB0aGlzLmxpYkNvbmZpZz8ua2V5d29yZHMsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqIE9idGVtIEpzb24gZGEgcMOhZ2luYSAqL1xyXG4gIHByaXZhdGUgZ2V0V2VicGFnZUpzb24oKSB7XHJcbiAgICBjb25zdCB1bmlkYWRlUGF0aCA9IHRoaXMuZ2V0VW5pZGFkZVBhdGgoKTtcclxuICAgIGNvbnN0IHNpdGVVUkwgPSBnZXRTaXRlVXJsKHRoaXMubGliQ29uZmlnPy5zaXRlVXJsLCB0aGlzLmxpYkNvbmZpZz8uc2l0ZVN1Zml4KTtcclxuICAgIGNvbnN0IHBhZ2VQYXRoID0gYCR7c2l0ZVVSTH0ke3RoaXMubG9jYXRpb24ucGF0aCgpfWA7XHJcbiAgICBjb25zdCBkZXNjID0gdGhpcy5hY3RpdmVEZXNjcmlwdGlvbiA/IHRoaXMuYWN0aXZlRGVzY3JpcHRpb24gOiAnJztcclxuICAgIHJldHVybiB7XHJcbiAgICAgICdAdHlwZSc6ICdXZWJQYWdlJyxcclxuICAgICAgJ0BpZCc6IGAke3BhZ2VQYXRofSN3ZWJwYWdlYCxcclxuICAgICAgdXJsOiBwYWdlUGF0aCxcclxuICAgICAgaW5MYW5ndWFnZTogJ3B0LUJSJyxcclxuICAgICAgbmFtZTogdGhpcy5nZXRUaXRsZSgpLFxyXG4gICAgICBpc1BhcnRPZjogeyAnQGlkJzogYCR7c2l0ZVVSTH0ke3VuaWRhZGVQYXRofSN3ZWJzaXRlYCB9LFxyXG4gICAgICBhYm91dDogeyAnQGlkJzogYCR7c2l0ZVVSTH0jbWVkaWNhbG9yZ2FuaXphdGlvbmAgfSxcclxuICAgICAgZGVzY3JpcHRpb246IGRlc2MsXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRVbmlkYWRlUGF0aCgpIHtcclxuICAgIGxldCB1bmlkYWRlUGF0aCA9ICcnO1xyXG4gICAgaWYgKHRoaXMudW5pZGFkZSAmJiB0aGlzLnVuaWRhZGVQYXRoKSB7XHJcbiAgICAgIHVuaWRhZGVQYXRoID0gdGhpcy51bmlkYWRlPy5wYXRoID09PSAnLycgPyAnJyA6IHRoaXMudW5pZGFkZVBhdGg/LnN1YnN0cmluZygwLCB0aGlzLnVuaWRhZGVQYXRoPy5sZW5ndGggLSAxKTtcclxuICAgIH1cclxuICAgIHJldHVybiB1bmlkYWRlUGF0aDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9idMOpbSBhIFVSTCBjYW7DtG5pY2EgZGEgcMOhZ2luYS5cclxuICAgKiBAcmV0dXJucyBBIFVSTCBjYW7DtG5pY2EgZGEgcMOhZ2luYS5cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0Q2Fub25pY2FsSHJlZigpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0aGlzLmNhbm9uaWNhbFRhZykge1xyXG4gICAgICB0aGlzLmNhbm9uaWNhbFRhZyA9IHRoaXMuZ2V0Q2Fub25pY2FsVGFnKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5jYW5vbmljYWxUYWcuaHJlZjtcclxuICB9XHJcblxyXG4gIC8qKiBDcmlhIHRhZyBwYXJhIGxpbmtzIGNhbm9uaWNhbHMgbm8gaGVhZCAqL1xyXG4gIHByaXZhdGUgY3JlYXRlQ2Fub25pY2FsVGFnKCk6IEhUTUxMaW5rRWxlbWVudCB7XHJcbiAgICBjb25zdCB0YWcgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtcclxuICAgIHRhZy5zZXRBdHRyaWJ1dGUoJ3JlbCcsICdjYW5vbmljYWwnKTtcclxuICAgIHRoaXMuZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCh0YWcpO1xyXG4gICAgdGFnLnNldEF0dHJpYnV0ZSgnaHJlZicsIHRoaXMuZG9jdW1lbnQuVVJMKTtcclxuICAgIHRoaXMuY2Fub25pY2FsVGFnID0gdGFnO1xyXG4gICAgcmV0dXJuIHRhZztcclxuICB9XHJcblxyXG4gIC8qKiBSZXRvcm5hIHRhZyBwYXJhIGxpbmsgY2Fub25pY2FsIGV4aXN0ZSBvdSBjcmlhIHNlIG7Do28gaG91dmVyLiAqL1xyXG4gIHByaXZhdGUgZ2V0Q2Fub25pY2FsVGFnKCk6IEhUTUxMaW5rRWxlbWVudCB7XHJcbiAgICBjb25zdCBlbGVtZW50cyA9IHRoaXMuZG9jdW1lbnQuaGVhZC5jaGlsZHJlbjtcclxuICAgIGxldCBpOiBudW1iZXI7XHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgY29uc3QgZWxlbSA9IGVsZW1lbnRzW2ldIGFzIEhUTUxMaW5rRWxlbWVudDtcclxuICAgICAgaWYgKGVsZW0gJiYgZWxlbS50YWdOYW1lID09PSAnTElOSycgJiYgZWxlbS5yZWwgPT09ICdjYW5vbmljYWwnKSB7XHJcbiAgICAgICAgcmV0dXJuIGVsZW07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmNyZWF0ZUNhbm9uaWNhbFRhZygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVmaW5lIGxpbmsgY2Fub25pY2FsIGRhIHDDoWdpbmFcclxuICAgKiBAcGFyYW0gdXJsIHVybCBjYW5vbmljYWxcclxuICAgKi9cclxuICBwdWJsaWMgc2V0Q2Fub25pY2FsSHJlZih1cmw/OiBzdHJpbmcpIHtcclxuICAgIGlmICghdGhpcy5jYW5vbmljYWxUYWcpIHtcclxuICAgICAgdGhpcy5jYW5vbmljYWxUYWcgPSB0aGlzLmdldENhbm9uaWNhbFRhZygpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBwYXRoID0gdGhpcy5kb2N1bWVudC5sb2NhdGlvbi5wYXRobmFtZTtcclxuXHJcbiAgICBpZiAodGhpcy5saWJDb25maWc/LnNpdGVTdWZpeCAmJiBwYXRoLmluY2x1ZGVzKHRoaXMubGliQ29uZmlnPy5zaXRlU3VmaXgpKSB7XHJcbiAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UodGhpcy5saWJDb25maWc/LnNpdGVTdWZpeCwgJycpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghcGF0aC5zdGFydHNXaXRoKCcvJykpIHtcclxuICAgICAgcGF0aCA9IGAvJHtwYXRofWA7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY2Fub25pY2FsVXJsID0gdXJsICYmIHRoaXMuaXNDdXN0b21DYW5vbmljYWwodXJsKSA/IHVybCA6IGAke2dldFNpdGVVcmwodGhpcy5saWJDb25maWc/LnNpdGVVcmwsIHRoaXMubGliQ29uZmlnPy5zaXRlU3VmaXgpfSR7cGF0aH1gO1xyXG5cclxuICAgIHRoaXMuY2Fub25pY2FsVGFnLnNldEF0dHJpYnV0ZSgnaHJlZicsIGNhbm9uaWNhbFVybCk7XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZlcmlmaWNhIHNlIGEgVVJMIGZvcm5lY2lkYSDDqSB1bSBsaW5rIGNhbm9uaWNhbCBwZXJzb25hbGl6YWRvXHJcbiAgICogQHBhcmFtIHVybCBVUkwgZm9ybmVjaWRhXHJcbiAgICovXHJcbiAgcHVibGljIGlzQ3VzdG9tQ2Fub25pY2FsKHVybDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBzaXRldXJsID0gZ2V0U2l0ZVVybCh0aGlzLmxpYkNvbmZpZz8uc2l0ZVVybCwgdGhpcy5saWJDb25maWc/LnNpdGVTdWZpeCk7XHJcbiAgICByZXR1cm4gdXJsLnN0YXJ0c1dpdGgoc2l0ZXVybCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPYnTDqW0gdW1hIHVybCB2w6FsaWRhIG5hIGFwbGljYcOnw6NvIHByb3ZlbmllbnRlIGRlIHVtYSBVUkwgZ2VyYWRhXHJcbiAgICogcGVsbyBwbHVnaW4gWW9hc3QgcGFyYSBjYW5vbmljYWwgYXV0b23DoXRpY28uXHJcbiAgICogRXguOiBodHRwczovL3dwLnJlZGVkb3JzYW9sdWl6LmNvbS5ici9icmFzaWwvZXNwZWNpYWxpZGFkZXMvY2FyZGlvbG9naWEvXHJcbiAgICogQHBhcmFtIHVybEZyb21XcEFwaSBVUkwgY2Fub25pY2EgZ2VyYWRhIHBlbG8gWW9hc3QgUGx1Z2luLlxyXG4gICAqL1xyXG4gIHRvTG9jYWxDYW5vbmljYWwodXJsRnJvbVdwQXBpOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgYXBpVXJsID0gdGhpcy5saWJDb25maWc/LndwVXJsID8/ICcnO1xyXG4gICAgY29uc3Qgc2l0ZXVybCA9IGdldFNpdGVVcmwodGhpcy5saWJDb25maWc/LnNpdGVVcmwsIHRoaXMubGliQ29uZmlnPy5zaXRlU3VmaXgpO1xyXG4gICAgY29uc3QgdW5pZGFkZVNsdWcgPSB0aGlzLnVuaWRhZGVTbHVnO1xyXG4gICAgbGV0IGNvbnZlcnRlZCA9IHVybEZyb21XcEFwaS5yZXBsYWNlKGFwaVVybCwgc2l0ZXVybCk7XHJcbiAgICBpZiAodW5pZGFkZVNsdWcgIT09ICcvJyAmJiBjb252ZXJ0ZWQuaW5jbHVkZXMoYC8ke3VuaWRhZGVTbHVnfS9gKSkge1xyXG4gICAgICBjb252ZXJ0ZWQgPSBjb252ZXJ0ZWQucmVwbGFjZShgLyR7dW5pZGFkZVNsdWd9L2AsIGAke3RoaXMudW5pZGFkZVBhdGh9YCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29udmVydGVkO1xyXG4gIH1cclxuXHJcbiAgZ2V0UG9zdENvbnRlbnQocG9zdDogV3BQb3N0KTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSBwb3N0Py5hY2Y/LlsncmRzbF9wb3N0X2NvbnRlbnQnXSA/IHBvc3Q/LmFjZj8ucmRzbF9wb3N0X2NvbnRlbnQ/LmZpbmQoKGNvbnRlbnQ6IGFueSkgPT4gY29udGVudC5hY2ZfZmNfbGF5b3V0ID09PSAndGV4dF9odG1sJykgOiBudWxsO1xyXG4gICAgcmV0dXJuIGNvbnRlbnQ/LmNvbnRlbnQgfHwgcG9zdC5jb250ZW50LnJlbmRlcmVkIHx8ICcnO1xyXG4gIH1cclxuXHJcbiAgYWRkQXJ0aWNsZVNjcmlwdChwb3N0OiBXcFBvc3QsIHNjcmlwdE5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgcG9zdENvbnRlbnQgPSB0aGlzLmdldFBvc3RDb250ZW50KHBvc3QpO1xyXG4gICAgY29uc3QgcG9zdEhlYWRlckltYWdlID0gcG9zdD8uYWNmPy5bJ3Jkc2xfcG9zdF9oZWFkZXJfaW1nJ11cclxuICAgICAgPyB7XHJcbiAgICAgICAgICB1cmw6IHBvc3Q/LmFjZj8uWydyZHNsX3Bvc3RfaGVhZGVyX2ltZyddLnVybCxcclxuICAgICAgICAgIHdpZHRoOiBwb3N0Py5hY2Y/LlsncmRzbF9wb3N0X2hlYWRlcl9pbWcnXS53aWR0aCxcclxuICAgICAgICAgIGhlaWdodDogcG9zdD8uYWNmPy5bJ3Jkc2xfcG9zdF9oZWFkZXJfaW1nJ10uaGVpZ2h0LFxyXG4gICAgICAgIH1cclxuICAgICAgOiBudWxsO1xyXG5cclxuICAgIGNvbnN0IHN0cnVjdHVyZWREYXRhID0ge1xyXG4gICAgICAnQGNvbnRleHQnOiAnaHR0cHM6Ly9zY2hlbWEub3JnJyxcclxuICAgICAgJ0B0eXBlJzogJ0FydGljbGUnLFxyXG4gICAgICBtYWluRW50aXR5T2ZQYWdlOiBgJHtnZXRTaXRlVXJsKHRoaXMubGliQ29uZmlnPy5zaXRlVXJsLCB0aGlzLmxpYkNvbmZpZz8uc2l0ZVN1Zml4KX0ke3RoaXMubG9jYXRpb24ucGF0aCgpfWAsXHJcbiAgICAgIGhlYWRsaW5lOiBwb3N0LnRpdGxlPy5yZW5kZXJlZCxcclxuICAgICAgZGF0ZVB1Ymxpc2hlZDogcG9zdC5kYXRlX2dtdCxcclxuICAgICAgcHVibGlzaGVyOiB7XHJcbiAgICAgICAgJ0B0eXBlJzogJ01lZGljYWxPcmdhbml6YXRpb24nLFxyXG4gICAgICAgIG5hbWU6ICdSZWRlIETigJlPcicsXHJcbiAgICAgIH0sXHJcbiAgICAgIGRlc2NyaXB0aW9uOiBwb3N0LnRpdGxlPy5yZW5kZXJlZCxcclxuICAgICAgYXJ0aWNsZUJvZHk6IHJlbW92ZUh0bWxUYWdzKGhlLmRlY29kZShwb3N0Q29udGVudCkpLFxyXG4gICAgICBkYXRlTW9kaWZpZWQ6IHBvc3QubW9kaWZpZWRfZ210LFxyXG4gICAgICBpbWFnZToge1xyXG4gICAgICAgICdAdHlwZSc6ICdJbWFnZU9iamVjdCcsXHJcbiAgICAgICAgdXJsOiBwb3N0SGVhZGVySW1hZ2U/LnVybCB8fCBwb3N0LmZlYXR1cmVkX21lZGlhX3BhdGggfHwgJycsXHJcbiAgICAgICAgaGVpZ2h0OiBwb3N0SGVhZGVySW1hZ2U/LmhlaWdodCB8fCAnJyxcclxuICAgICAgICB3aWR0aDogcG9zdEhlYWRlckltYWdlPy53aWR0aCB8fCAnJyxcclxuICAgICAgfSxcclxuICAgICAgYXV0aG9yOiB7XHJcbiAgICAgICAgJ0B0eXBlJzogJ01lZGljYWxPcmdhbml6YXRpb24nLFxyXG4gICAgICAgIG5hbWU6ICdSZWRlIETigJlPcicsXHJcbiAgICAgIH0sXHJcbiAgICAgIHdvcmRjb3VudDogcG9zdENvbnRlbnQuc3BsaXQoJyAnKS5sZW5ndGgsXHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IHNjcmlwdCA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XHJcblxyXG4gICAgc2NyaXB0LnR5cGUgPSAnYXBwbGljYXRpb24vbGQranNvbic7XHJcbiAgICBzY3JpcHQuaWQgPSBzY3JpcHROYW1lO1xyXG4gICAgc2NyaXB0LmlubmVySFRNTCA9IEpTT04uc3RyaW5naWZ5KHN0cnVjdHVyZWREYXRhKTtcclxuXHJcbiAgICB0aGlzLmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcclxuICB9XHJcblxyXG4gIHJlbW92ZUFydGljbGVTY3JpcHQoc2NyaXB0TmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBzY3JpcHQgPSB0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNjcmlwdE5hbWUpO1xyXG4gICAgc2NyaXB0Py5yZW1vdmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRVbmlkYWRlKHsgdW5pZGFkZSA9IG51bGwsIHVuaWRhZGVOYW1lID0gJycsIHVuaWRhZGVQYXRoID0gJycsIHVuaWRhZGVTbHVnID0gJycgfTogU2VvVW5pZGFkZSkge1xyXG4gICAgdGhpcy51bmlkYWRlID0gdW5pZGFkZTtcclxuICAgIHRoaXMudW5pZGFkZU5hbWUgPSB1bmlkYWRlTmFtZTtcclxuICAgIHRoaXMudW5pZGFkZVBhdGggPSB1bmlkYWRlUGF0aDtcclxuICAgIHRoaXMudW5pZGFkZVNsdWcgPSB1bmlkYWRlU2x1ZztcclxuICB9XHJcbn1cclxuIl19