@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.
- package/README.md +0 -9
- package/esm2022/lib/components/algolia-dropdown/algolia-dropdown.component.mjs +126 -0
- package/esm2022/lib/components/avatar/avatar.component.mjs +66 -0
- package/esm2022/lib/components/banner/content-banner/content-banner.component.mjs +41 -0
- package/esm2022/lib/components/breadcrumbs/breadcrumbs.component.mjs +133 -0
- package/esm2022/lib/components/cards/card-unidade-planos-convenios/card-unidade-planos-convenios.component.mjs +65 -0
- package/esm2022/lib/components/cards/expandable-card/expandable-card.component.mjs +69 -0
- package/esm2022/lib/components/cards/testimonial-card/testimonial-card.component.mjs +63 -0
- package/esm2022/lib/components/carousels/testimonials-carousel/testimonials-carousel.component.mjs +64 -0
- package/esm2022/lib/components/cta-wrapper/cta-wrapper.component.mjs +84 -0
- package/esm2022/lib/components/dropdown-search/dropdown-search-category.component.mjs +24 -0
- package/esm2022/lib/components/dropdown-search/dropdown-search-not-found.component.mjs +24 -0
- package/esm2022/lib/components/dropdown-search/dropdown-search-option.component.mjs +65 -0
- package/esm2022/lib/components/dropdown-search/dropdown-search.component.mjs +292 -0
- package/esm2022/lib/components/error/error-service/error.service.mjs +17 -0
- package/esm2022/lib/components/error/error.component.mjs +183 -0
- package/esm2022/lib/components/filter-letter-and-terms/filter-letter-and-terms.component.mjs +103 -0
- package/esm2022/lib/components/filters/filter-generic/filter-generic.component.mjs +235 -0
- package/esm2022/lib/components/filters/filter-planos-convenios/filter-planos-convenios.component.mjs +150 -0
- package/esm2022/lib/components/footer/footer.component.mjs +125 -0
- package/esm2022/lib/components/footer/helpers/footerTheme.func.mjs +70 -0
- package/esm2022/lib/components/footer/models/FooterTheme.model.mjs +2 -0
- package/esm2022/lib/components/header/components/header-action-menu/header-action-menu.component.mjs +36 -0
- package/esm2022/lib/components/header/components/header-aux-menu/header-aux-menu.component.mjs +12 -0
- package/esm2022/lib/components/header/components/header-aux-menu-container/header-aux-menu-container.component.mjs +17 -0
- package/esm2022/lib/components/header/components/header-aux-menu-item/header-aux-menu-item.component.mjs +51 -0
- package/esm2022/lib/components/header/components/header-aux-menu-item-dropdown/header-aux-menu-item-dropdown.component.mjs +23 -0
- package/esm2022/lib/components/header/components/header-logo/header-logo.component.mjs +32 -0
- package/esm2022/lib/components/header/components/header-main-menu/header-main-menu.component.mjs +11 -0
- package/esm2022/lib/components/header/components/header-main-menu-item/header-main-menu-item.component.mjs +77 -0
- package/esm2022/lib/components/header/components/header-main-menu-item-dropdown/header-main-menu-item-dropdown.component.mjs +99 -0
- package/esm2022/lib/components/header/components/header-side-menu/header-side-menu.component.mjs +26 -0
- package/esm2022/lib/components/header/components/header-side-menu-item/header-side-menu-item.component.mjs +54 -0
- package/esm2022/lib/components/header/header.component.mjs +104 -0
- package/esm2022/lib/components/header/helpers/headerTheme.func.mjs +136 -0
- package/esm2022/lib/components/header/models/HeaderTheme.model.mjs +2 -0
- package/esm2022/lib/components/header/services/header.service.mjs +43 -0
- package/esm2022/lib/components/image/image.component.mjs +61 -0
- package/esm2022/lib/components/index.mjs +52 -0
- package/esm2022/lib/components/input-file/input-file.component.mjs +304 -0
- package/esm2022/lib/components/load-screen/load-screen.component.mjs +23 -0
- package/esm2022/lib/components/overlay/overlay.component.mjs +19 -0
- package/esm2022/lib/components/page-header/page-header.component.mjs +47 -0
- package/esm2022/lib/components/page-template-fullcontent/page-template-fullcontent.component.mjs +30 -0
- package/esm2022/lib/components/page-template-sidebar/page-template-sidebar.component.mjs +39 -0
- package/esm2022/lib/components/pagination/pagination.component.mjs +64 -0
- package/esm2022/lib/components/post-header/post-header.component.mjs +56 -0
- package/esm2022/lib/components/search/search.component.mjs +147 -0
- package/esm2022/lib/components/section-navigation/section-navigation.component.mjs +149 -0
- package/esm2022/lib/components/side-ctas/components/side-ctas-bottom/side-ctas-bottom.component.mjs +43 -0
- package/esm2022/lib/components/side-ctas/components/side-ctas-right-bottom/side-ctas-right-bottom.component.mjs +43 -0
- package/esm2022/lib/components/side-ctas/components/side-ctas-right-middle/side-ctas-right-middle.component.mjs +42 -0
- package/esm2022/lib/components/side-ctas/components/side-ctas-right-top/side-ctas-right-top.component.mjs +11 -0
- package/esm2022/lib/components/side-ctas/models/SideCta.model.mjs +2 -0
- package/esm2022/lib/components/side-ctas/side-ctas.component.mjs +23 -0
- package/esm2022/lib/components/sidebar-navigation/sidebar-navigation.component.mjs +119 -0
- package/esm2022/lib/components/sticky-navigation/sticky-navigation.component.mjs +132 -0
- package/esm2022/lib/components/whatsapp/whatsapp.component.mjs +60 -0
- package/esm2022/lib/directives/index.mjs +4 -0
- package/esm2022/lib/directives/rdsite-click-outside/rdsite-click-outside.directive.mjs +29 -0
- package/esm2022/lib/directives/rdsite-link/rdsite-link.directive.mjs +197 -0
- package/esm2022/lib/directives/rdsite-phone-modal/rdsite-phone-modal.directive.mjs +52 -0
- package/esm2022/lib/enums/EnumDoencaTaxonomy.enum.mjs +11 -0
- package/esm2022/lib/enums/EnumError.enum.mjs +6 -0
- package/esm2022/lib/enums/EnumThemes.enum.mjs +9 -0
- package/esm2022/lib/enums/Estados.enum.mjs +31 -0
- package/esm2022/lib/enums/Filter.enum.mjs +9 -0
- package/esm2022/lib/enums/IconCuraDefaultType.enum.mjs +121 -0
- package/esm2022/lib/enums/ImageMimeType.enum.mjs +7 -0
- package/esm2022/lib/enums/RdsiteModalComponentStyle.enum.mjs +16 -0
- package/esm2022/lib/enums/RdsiteModalDrawerComponentStyle.enum.mjs +9 -0
- package/esm2022/lib/enums/UnidadeCoverageType.enum.mjs +7 -0
- package/esm2022/lib/enums/index.mjs +11 -0
- package/esm2022/lib/helpers/check-safari-agent.func.mjs +7 -0
- package/esm2022/lib/helpers/formatPhone.func.mjs +29 -0
- package/esm2022/lib/helpers/getCircularReplacer.func.mjs +38 -0
- package/esm2022/lib/helpers/getSiteUrl.func.mjs +11 -0
- package/esm2022/lib/helpers/index.mjs +9 -0
- package/esm2022/lib/helpers/mediaQueries.mjs +11 -0
- package/esm2022/lib/helpers/removeDuplicateObjectsFromArray.func.mjs +5 -0
- package/esm2022/lib/helpers/removeDuplicateValuesFromArray.func.mjs +5 -0
- package/esm2022/lib/helpers/removeHtmlTags.func.mjs +6 -0
- package/esm2022/lib/helpers/toQueryParams.func.mjs +8 -0
- package/esm2022/lib/interceptors/error.interceptor.mjs +36 -0
- package/esm2022/lib/interceptors/index.mjs +3 -0
- package/esm2022/lib/interceptors/log.interceptor.mjs +35 -0
- package/esm2022/lib/middlewares/index.mjs +5 -0
- package/esm2022/lib/middlewares/ssr-initialization.middleware.mjs +8 -0
- package/esm2022/lib/middlewares/url-validation-default-logo.mjs +38 -0
- package/esm2022/lib/middlewares/url-validation-error-page.mjs +209 -0
- package/esm2022/lib/middlewares/url-validation.middleware.mjs +41 -0
- package/esm2022/lib/models/algolia-search-api.model.mjs +2 -0
- package/esm2022/lib/models/breadcrumbs/breadcrumbs-items.model.mjs +2 -0
- package/esm2022/lib/models/breadcrumbs/breadcrumbs-json-item.model.mjs +2 -0
- package/esm2022/lib/models/centro-estudos-backend.model.mjs +2 -0
- package/esm2022/lib/models/centro-medico.model.mjs +2 -0
- package/esm2022/lib/models/content-banner.model.mjs +2 -0
- package/esm2022/lib/models/cta-wrapper.model.mjs +2 -0
- package/esm2022/lib/models/doenca-backend.model.mjs +2 -0
- package/esm2022/lib/models/doenca-taxonomy.model.mjs +2 -0
- package/esm2022/lib/models/especialidade-backend.model.mjs +2 -0
- package/esm2022/lib/models/exame-backend.model.mjs +2 -0
- package/esm2022/lib/models/filters/filter-planos-convenios.model.mjs +2 -0
- package/esm2022/lib/models/filters/filter-section.type.mjs +2 -0
- package/esm2022/lib/models/filters/filter-sections.model.mjs +2 -0
- package/esm2022/lib/models/images/rdsite-image.model.mjs +2 -0
- package/esm2022/lib/models/medico-cv.model.mjs +2 -0
- package/esm2022/lib/models/medico.model.mjs +2 -0
- package/esm2022/lib/models/menu-de-unidade.model.mjs +2 -0
- package/esm2022/lib/models/menu-item.model.mjs +2 -0
- package/esm2022/lib/models/privacy-tools/privacy-tools.model.mjs +2 -0
- package/esm2022/lib/models/rdsl-cobertura.model.mjs +2 -0
- package/esm2022/lib/models/rdsl-convenio.model.mjs +2 -0
- package/esm2022/lib/models/rdsl-especialidade.model.mjs +2 -0
- package/esm2022/lib/models/rdsl-planos.model.mjs +2 -0
- package/esm2022/lib/models/rdsl-post-category.model.mjs +2 -0
- package/esm2022/lib/models/rdsl-unidade.model.mjs +2 -0
- package/esm2022/lib/models/section-navigation.model.mjs +2 -0
- package/esm2022/lib/models/seo/seo-data.model.mjs +2 -0
- package/esm2022/lib/models/seo/seo-unidade.model.mjs +2 -0
- package/esm2022/lib/models/social-meta-properties.model.mjs +2 -0
- package/esm2022/lib/models/wordpress/WpResponse.model.mjs +2 -0
- package/esm2022/lib/models/wordpress/category/wpCategory.model.mjs +2 -0
- package/esm2022/lib/models/wordpress/general/content.model.mjs +2 -0
- package/esm2022/lib/models/wordpress/general/excerpt.model.mjs +2 -0
- package/esm2022/lib/models/wordpress/general/featuredMedia.model.mjs +2 -0
- package/esm2022/lib/models/wordpress/general/guid.model.mjs +2 -0
- package/esm2022/lib/models/wordpress/general/index.mjs +11 -0
- package/esm2022/lib/models/wordpress/general/links.model.mjs +2 -0
- package/esm2022/lib/models/wordpress/general/meta.model.mjs +2 -0
- package/esm2022/lib/models/wordpress/general/title.model.mjs +2 -0
- package/esm2022/lib/models/wordpress/general/yoastData.model.mjs +2 -0
- package/esm2022/lib/models/wordpress/general/yoastHeadJson.model.mjs +2 -0
- package/esm2022/lib/models/wordpress/general/yoastMeta.model.mjs +2 -0
- package/esm2022/lib/models/wordpress/page/page.model.mjs +2 -0
- package/esm2022/lib/models/wordpress/post/post.model.mjs +2 -0
- package/esm2022/lib/models/wordpress/unidade/wp-unidade-onco.model.mjs +2 -0
- package/esm2022/lib/models/wordpress/unidade/wp-unidade-site-detalhe.model.mjs +2 -0
- package/esm2022/lib/models/wordpress/unidade/wp-unidade-site.model.mjs +2 -0
- package/esm2022/lib/pipes/index.mjs +2 -0
- package/esm2022/lib/pipes/phone/phone.pipe.mjs +18 -0
- package/esm2022/lib/services/algolia/algolia.service.mjs +37 -0
- package/esm2022/lib/services/algolia-search-api/algolia-search-api.service.mjs +71 -0
- package/esm2022/lib/services/geoloc/geoloc.service.mjs +202 -0
- package/esm2022/lib/services/http-client/http-client.service.mjs +55 -0
- package/esm2022/lib/services/index.mjs +19 -0
- package/esm2022/lib/services/log/log.service.mjs +46 -0
- package/esm2022/lib/services/mapbox/mapbox.service.mjs +69 -0
- package/esm2022/lib/services/modal/modal.service.mjs +56 -0
- package/esm2022/lib/services/modal-drawer/modal-drawer.service.mjs +42 -0
- package/esm2022/lib/services/ngu-carousel/ngu-carousel.service.mjs +81 -0
- package/esm2022/lib/services/phone/phone.service.mjs +28 -0
- package/esm2022/lib/services/privacy-tools/privacy-tools.service.mjs +92 -0
- package/esm2022/lib/services/seo/seo.service.mjs +489 -0
- package/esm2022/lib/services/server-response/server-response.service.mjs +92 -0
- package/esm2022/lib/services/site-back-end/site-back-end.service.mjs +197 -0
- package/esm2022/lib/services/ssr-loading/ssr-loading.service.mjs +48 -0
- package/esm2022/lib/services/transfer-state/transfer-state.service.mjs +33 -0
- package/esm2022/lib/services/youtube/youtube.service.mjs +39 -0
- package/esm2022/lib/tokens/LibConfig.mjs +4 -0
- package/esm2022/lib/tokens/express.tokens.mjs +4 -0
- package/esm2022/public-api.mjs +23 -0
- package/esm2022/rededor-site-front-end-lib.mjs +5 -0
- package/fesm2022/rededor-site-front-end-lib.mjs +6408 -2
- package/fesm2022/rededor-site-front-end-lib.mjs.map +1 -1
- package/index.d.ts +5 -3
- package/lib/components/algolia-dropdown/algolia-dropdown.component.d.ts +38 -0
- package/lib/components/avatar/avatar.component.d.ts +26 -0
- package/lib/components/banner/content-banner/content-banner.component.d.ts +20 -0
- package/lib/components/breadcrumbs/breadcrumbs.component.d.ts +36 -0
- package/lib/components/cards/card-unidade-planos-convenios/card-unidade-planos-convenios.component.d.ts +41 -0
- package/lib/components/cards/expandable-card/expandable-card.component.d.ts +29 -0
- package/lib/components/cards/testimonial-card/testimonial-card.component.d.ts +31 -0
- package/lib/components/carousels/testimonials-carousel/testimonials-carousel.component.d.ts +28 -0
- package/lib/components/cta-wrapper/cta-wrapper.component.d.ts +33 -0
- package/lib/components/dropdown-search/dropdown-search-category.component.d.ts +9 -0
- package/lib/components/dropdown-search/dropdown-search-not-found.component.d.ts +9 -0
- package/lib/components/dropdown-search/dropdown-search-option.component.d.ts +26 -0
- package/lib/components/dropdown-search/dropdown-search.component.d.ts +71 -0
- package/lib/components/error/error-service/error.service.d.ts +8 -0
- package/lib/components/error/error.component.d.ts +48 -0
- package/lib/components/filter-letter-and-terms/filter-letter-and-terms.component.d.ts +36 -0
- package/lib/components/filters/filter-generic/filter-generic.component.d.ts +77 -0
- package/lib/components/filters/filter-planos-convenios/filter-planos-convenios.component.d.ts +45 -0
- package/lib/components/footer/footer.component.d.ts +49 -0
- package/lib/components/footer/helpers/footerTheme.func.d.ts +3 -0
- package/lib/components/footer/models/FooterTheme.model.d.ts +7 -0
- package/lib/components/header/components/header-action-menu/header-action-menu.component.d.ts +16 -0
- package/lib/components/header/components/header-aux-menu/header-aux-menu.component.d.ts +5 -0
- package/lib/components/header/components/header-aux-menu-container/header-aux-menu-container.component.d.ts +6 -0
- package/lib/components/header/components/header-aux-menu-item/header-aux-menu-item.component.d.ts +21 -0
- package/lib/components/header/components/header-aux-menu-item-dropdown/header-aux-menu-item-dropdown.component.d.ts +10 -0
- package/lib/components/header/components/header-logo/header-logo.component.d.ts +12 -0
- package/lib/components/header/components/header-main-menu/header-main-menu.component.d.ts +5 -0
- package/lib/components/header/components/header-main-menu-item/header-main-menu-item.component.d.ts +29 -0
- package/lib/components/header/components/header-main-menu-item-dropdown/header-main-menu-item-dropdown.component.d.ts +41 -0
- package/lib/components/header/components/header-side-menu/header-side-menu.component.d.ts +11 -0
- package/lib/components/header/components/header-side-menu-item/header-side-menu-item.component.d.ts +22 -0
- package/lib/components/header/header.component.d.ts +36 -0
- package/lib/components/header/helpers/headerTheme.func.d.ts +3 -0
- package/lib/components/header/models/HeaderTheme.model.d.ts +8 -0
- package/lib/components/header/services/header.service.d.ts +11 -0
- package/lib/components/image/image.component.d.ts +22 -0
- package/lib/components/index.d.ts +50 -0
- package/lib/components/input-file/input-file.component.d.ts +88 -0
- package/{components/load-screen/index.d.ts → lib/components/load-screen/load-screen.component.d.ts} +5 -6
- package/{components/overlay/index.d.ts → lib/components/overlay/overlay.component.d.ts} +4 -6
- package/lib/components/page-header/page-header.component.d.ts +20 -0
- package/lib/components/page-template-fullcontent/page-template-fullcontent.component.d.ts +14 -0
- package/lib/components/page-template-sidebar/page-template-sidebar.component.d.ts +17 -0
- package/lib/components/pagination/pagination.component.d.ts +30 -0
- package/lib/components/post-header/post-header.component.d.ts +31 -0
- package/lib/components/search/search.component.d.ts +48 -0
- package/lib/components/section-navigation/section-navigation.component.d.ts +44 -0
- package/lib/components/side-ctas/components/side-ctas-bottom/side-ctas-bottom.component.d.ts +23 -0
- package/lib/components/side-ctas/components/side-ctas-right-bottom/side-ctas-right-bottom.component.d.ts +15 -0
- package/lib/components/side-ctas/components/side-ctas-right-middle/side-ctas-right-middle.component.d.ts +22 -0
- package/lib/components/side-ctas/components/side-ctas-right-top/side-ctas-right-top.component.d.ts +5 -0
- package/lib/components/side-ctas/models/SideCta.model.d.ts +5 -0
- package/lib/components/side-ctas/side-ctas.component.d.ts +11 -0
- package/lib/components/sidebar-navigation/sidebar-navigation.component.d.ts +39 -0
- package/lib/components/sticky-navigation/sticky-navigation.component.d.ts +43 -0
- package/lib/components/whatsapp/whatsapp.component.d.ts +29 -0
- package/lib/directives/index.d.ts +3 -0
- package/lib/directives/rdsite-click-outside/rdsite-click-outside.directive.d.ts +10 -0
- package/lib/directives/rdsite-link/rdsite-link.directive.d.ts +40 -0
- package/lib/directives/rdsite-phone-modal/rdsite-phone-modal.directive.d.ts +17 -0
- package/lib/enums/EnumDoencaTaxonomy.enum.d.ts +8 -0
- package/lib/enums/EnumError.enum.d.ts +4 -0
- package/lib/enums/EnumThemes.enum.d.ts +7 -0
- package/lib/enums/Estados.enum.d.ts +29 -0
- package/lib/enums/Filter.enum.d.ts +7 -0
- package/{enums/index.d.ts → lib/enums/IconCuraDefaultType.enum.d.ts} +1 -58
- package/lib/enums/ImageMimeType.enum.d.ts +5 -0
- package/lib/enums/RdsiteModalComponentStyle.enum.d.ts +14 -0
- package/lib/enums/RdsiteModalDrawerComponentStyle.enum.d.ts +7 -0
- package/lib/enums/UnidadeCoverageType.enum.d.ts +5 -0
- package/lib/enums/index.d.ts +10 -0
- package/lib/helpers/check-safari-agent.func.d.ts +2 -0
- package/lib/helpers/formatPhone.func.d.ts +1 -0
- package/lib/helpers/getCircularReplacer.func.d.ts +7 -0
- package/lib/helpers/getSiteUrl.func.d.ts +2 -0
- package/lib/helpers/index.d.ts +8 -0
- package/lib/helpers/mediaQueries.d.ts +6 -0
- package/lib/helpers/removeDuplicateObjectsFromArray.func.d.ts +2 -0
- package/lib/helpers/removeDuplicateValuesFromArray.func.d.ts +2 -0
- package/lib/helpers/removeHtmlTags.func.d.ts +2 -0
- package/lib/helpers/toQueryParams.func.d.ts +5 -0
- package/lib/interceptors/error.interceptor.d.ts +13 -0
- package/lib/interceptors/index.d.ts +2 -0
- package/lib/interceptors/log.interceptor.d.ts +11 -0
- package/lib/middlewares/index.d.ts +4 -0
- package/lib/middlewares/ssr-initialization.middleware.d.ts +2 -0
- package/lib/middlewares/url-validation-default-logo.d.ts +1 -0
- package/lib/middlewares/url-validation-error-page.d.ts +22 -0
- package/lib/middlewares/url-validation.middleware.d.ts +13 -0
- package/lib/models/algolia-search-api.model.d.ts +179 -0
- package/lib/models/breadcrumbs/breadcrumbs-items.model.d.ts +10 -0
- package/lib/models/breadcrumbs/breadcrumbs-json-item.model.d.ts +8 -0
- package/lib/models/centro-estudos-backend.model.d.ts +8 -0
- package/lib/models/centro-medico.model.d.ts +33 -0
- package/lib/models/content-banner.model.d.ts +15 -0
- package/lib/models/cta-wrapper.model.d.ts +9 -0
- package/lib/models/doenca-backend.model.d.ts +25 -0
- package/lib/models/doenca-taxonomy.model.d.ts +11 -0
- package/lib/models/especialidade-backend.model.d.ts +24 -0
- package/lib/models/exame-backend.model.d.ts +25 -0
- package/lib/models/filters/filter-planos-convenios.model.d.ts +28 -0
- package/lib/models/filters/filter-section.type.d.ts +13 -0
- package/lib/models/filters/filter-sections.model.d.ts +52 -0
- package/lib/models/images/rdsite-image.model.d.ts +5 -0
- package/lib/models/medico-cv.model.d.ts +10 -0
- package/lib/models/medico.model.d.ts +68 -0
- package/lib/models/menu-de-unidade.model.d.ts +14 -0
- package/lib/models/menu-item.model.d.ts +67 -0
- package/lib/models/privacy-tools/privacy-tools.model.d.ts +8 -0
- package/lib/models/rdsl-cobertura.model.d.ts +71 -0
- package/lib/models/rdsl-convenio.model.d.ts +17 -0
- package/lib/models/rdsl-especialidade.model.d.ts +33 -0
- package/lib/models/rdsl-planos.model.d.ts +13 -0
- package/lib/models/rdsl-post-category.model.d.ts +8 -0
- package/lib/models/rdsl-unidade.model.d.ts +50 -0
- package/lib/models/section-navigation.model.d.ts +9 -0
- package/lib/models/seo/seo-data.model.d.ts +11 -0
- package/lib/models/seo/seo-unidade.model.d.ts +6 -0
- package/lib/models/social-meta-properties.model.d.ts +9 -0
- package/lib/models/wordpress/WpResponse.model.d.ts +31 -0
- package/lib/models/wordpress/category/wpCategory.model.d.ts +14 -0
- package/lib/models/wordpress/general/content.model.d.ts +4 -0
- package/lib/models/wordpress/general/excerpt.model.d.ts +4 -0
- package/lib/models/wordpress/general/featuredMedia.model.d.ts +26 -0
- package/lib/models/wordpress/general/guid.model.d.ts +3 -0
- package/lib/models/wordpress/general/index.d.ts +10 -0
- package/lib/models/wordpress/general/links.model.d.ts +47 -0
- package/lib/models/wordpress/general/meta.model.d.ts +3 -0
- package/lib/models/wordpress/general/title.model.d.ts +3 -0
- package/lib/models/wordpress/general/yoastData.model.d.ts +4 -0
- package/lib/models/wordpress/general/yoastHeadJson.model.d.ts +56 -0
- package/lib/models/wordpress/general/yoastMeta.model.d.ts +5 -0
- package/lib/models/wordpress/page/page.model.d.ts +10 -0
- package/lib/models/wordpress/post/post.model.d.ts +33 -0
- package/lib/models/wordpress/unidade/wp-unidade-onco.model.d.ts +56 -0
- package/lib/models/wordpress/unidade/wp-unidade-site-detalhe.model.d.ts +166 -0
- package/lib/models/wordpress/unidade/wp-unidade-site.model.d.ts +45 -0
- package/lib/pipes/index.d.ts +1 -0
- package/lib/pipes/phone/phone.pipe.d.ts +7 -0
- package/{services/algolia/index.d.ts → lib/services/algolia/algolia.service.d.ts} +4 -6
- package/{services/algolia-search-api/index.d.ts → lib/services/algolia-search-api/algolia-search-api.service.d.ts} +7 -6
- package/lib/services/geoloc/geoloc.service.d.ts +49 -0
- package/lib/services/http-client/http-client.service.d.ts +19 -0
- package/lib/services/index.d.ts +18 -0
- package/lib/services/log/log.service.d.ts +16 -0
- package/lib/services/mapbox/mapbox.service.d.ts +55 -0
- package/lib/services/modal/modal.service.d.ts +31 -0
- package/lib/services/modal-drawer/modal-drawer.service.d.ts +37 -0
- package/{services/ngu-carousel/index.d.ts → lib/services/ngu-carousel/ngu-carousel.service.d.ts} +3 -6
- package/lib/services/phone/phone.service.d.ts +11 -0
- package/lib/services/privacy-tools/privacy-tools.service.d.ts +20 -0
- package/lib/services/seo/seo.service.d.ts +142 -0
- package/lib/services/server-response/server-response.service.d.ts +39 -0
- package/lib/services/site-back-end/site-back-end.service.d.ts +87 -0
- package/{services/ssr-loading/index.d.ts → lib/services/ssr-loading/ssr-loading.service.d.ts} +4 -5
- package/lib/services/transfer-state/transfer-state.service.d.ts +12 -0
- package/{services/youtube/index.d.ts → lib/services/youtube/youtube.service.d.ts} +3 -5
- package/lib/tokens/LibConfig.d.ts +38 -0
- package/lib/tokens/express.tokens.d.ts +4 -0
- package/package.json +13 -283
- package/public-api.d.ts +10 -0
- package/components/algolia-dropdown/index.d.ts +0 -38
- package/components/algolia-search/index.d.ts +0 -292
- package/components/banner/index.d.ts +0 -20
- package/components/breadcrumbs/index.d.ts +0 -35
- package/components/cards/index.d.ts +0 -96
- package/components/carousels/index.d.ts +0 -28
- package/components/cta-wrapper/index.d.ts +0 -31
- package/components/error/index.d.ts +0 -46
- package/components/filter-letter-and-terms/index.d.ts +0 -36
- package/components/filters/filter-generic/index.d.ts +0 -68
- package/components/filters/filter-planos-convenios/index.d.ts +0 -41
- package/components/footer/index.d.ts +0 -38
- package/components/header/components/action/index.d.ts +0 -17
- package/components/header/components/auxiliar/index.d.ts +0 -29
- package/components/header/components/main/index.d.ts +0 -70
- package/components/header/components/side/index.d.ts +0 -33
- package/components/header/index.d.ts +0 -60
- package/components/header/services/index.d.ts +0 -14
- package/components/image/index.d.ts +0 -23
- package/components/modal/index.d.ts +0 -29
- package/components/modal-drawer/index.d.ts +0 -49
- package/components/page-header/index.d.ts +0 -20
- package/components/page-template-sidebar/index.d.ts +0 -20
- package/components/pagination/index.d.ts +0 -30
- package/components/search/index.d.ts +0 -45
- package/components/section-navigation/index.d.ts +0 -41
- package/components/side-ctas/index.d.ts +0 -70
- package/components/whatsapp/index.d.ts +0 -27
- package/core/index.d.ts +0 -1984
- package/cura/accordion/index.d.ts +0 -120
- package/cura/api/index.d.ts +0 -359
- package/cura/badges/cura-badge-counter/index.d.ts +0 -38
- package/cura/badges/cura-badge-distance/index.d.ts +0 -21
- package/cura/badges/cura-badge-dot/index.d.ts +0 -29
- package/cura/badges/cura-badge-pill/index.d.ts +0 -47
- package/cura/badges/index.d.ts +0 -5
- package/cura/buttons/cura-button/index.d.ts +0 -85
- package/cura/buttons/cura-button-outline/index.d.ts +0 -85
- package/cura/buttons/cura-button-select/index.d.ts +0 -34
- package/cura/buttons/cura-button-transparent/index.d.ts +0 -82
- package/cura/buttons/index.d.ts +0 -15
- package/cura/cards/cura-card/index.d.ts +0 -54
- package/cura/feedback/cura-alert/index.d.ts +0 -55
- package/cura/feedback/cura-modal/index.d.ts +0 -97
- package/cura/forms/cura-checkbox/index.d.ts +0 -152
- package/cura/forms/cura-input-text/index.d.ts +0 -234
- package/cura/forms/cura-label/index.d.ts +0 -51
- package/cura/forms/cura-radio/index.d.ts +0 -143
- package/cura/forms/cura-select/index.d.ts +0 -151
- package/cura/forms/cura-select-option/index.d.ts +0 -49
- package/cura/forms/cura-switch/index.d.ts +0 -113
- package/cura/forms/index.d.ts +0 -20
- package/cura/icons/cura-icon/index.d.ts +0 -46
- package/cura/loaders/cura-loader-bar/index.d.ts +0 -22
- package/cura/loaders/cura-loader-circle/index.d.ts +0 -24
- package/cura/texts/cura-display/index.d.ts +0 -54
- package/cura/texts/cura-heading/index.d.ts +0 -65
- package/cura/texts/cura-paragraph/index.d.ts +0 -54
- package/cura/texts/index.d.ts +0 -7
- package/fesm2022/rededor-site-front-end-lib-components-algolia-dropdown.mjs +0 -108
- package/fesm2022/rededor-site-front-end-lib-components-algolia-dropdown.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-components-algolia-search.mjs +0 -583
- package/fesm2022/rededor-site-front-end-lib-components-algolia-search.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-components-banner.mjs +0 -44
- package/fesm2022/rededor-site-front-end-lib-components-banner.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-components-breadcrumbs.mjs +0 -119
- package/fesm2022/rededor-site-front-end-lib-components-breadcrumbs.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-components-cards.mjs +0 -152
- package/fesm2022/rededor-site-front-end-lib-components-cards.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-components-carousels.mjs +0 -75
- package/fesm2022/rededor-site-front-end-lib-components-carousels.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-components-cta-wrapper.mjs +0 -74
- package/fesm2022/rededor-site-front-end-lib-components-cta-wrapper.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-components-error.mjs +0 -173
- package/fesm2022/rededor-site-front-end-lib-components-error.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-components-filter-letter-and-terms.mjs +0 -91
- package/fesm2022/rededor-site-front-end-lib-components-filter-letter-and-terms.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-components-filters-filter-generic.mjs +0 -243
- package/fesm2022/rededor-site-front-end-lib-components-filters-filter-generic.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-components-filters-filter-planos-convenios.mjs +0 -139
- package/fesm2022/rededor-site-front-end-lib-components-filters-filter-planos-convenios.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-components-footer.mjs +0 -150
- package/fesm2022/rededor-site-front-end-lib-components-footer.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-components-header-components-action.mjs +0 -31
- package/fesm2022/rededor-site-front-end-lib-components-header-components-action.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-components-header-components-auxiliar.mjs +0 -59
- package/fesm2022/rededor-site-front-end-lib-components-header-components-auxiliar.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-components-header-components-main.mjs +0 -164
- package/fesm2022/rededor-site-front-end-lib-components-header-components-main.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-components-header-components-side.mjs +0 -68
- package/fesm2022/rededor-site-front-end-lib-components-header-components-side.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-components-header-services.mjs +0 -50
- package/fesm2022/rededor-site-front-end-lib-components-header-services.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-components-header.mjs +0 -259
- package/fesm2022/rededor-site-front-end-lib-components-header.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-components-image.mjs +0 -48
- package/fesm2022/rededor-site-front-end-lib-components-image.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-components-load-screen.mjs +0 -30
- package/fesm2022/rededor-site-front-end-lib-components-load-screen.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-components-modal-drawer.mjs +0 -162
- package/fesm2022/rededor-site-front-end-lib-components-modal-drawer.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-components-modal.mjs +0 -82
- package/fesm2022/rededor-site-front-end-lib-components-modal.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-components-overlay.mjs +0 -24
- package/fesm2022/rededor-site-front-end-lib-components-overlay.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-components-page-header.mjs +0 -41
- package/fesm2022/rededor-site-front-end-lib-components-page-header.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-components-page-template-sidebar.mjs +0 -30
- package/fesm2022/rededor-site-front-end-lib-components-page-template-sidebar.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-components-pagination.mjs +0 -55
- package/fesm2022/rededor-site-front-end-lib-components-pagination.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-components-search.mjs +0 -119
- package/fesm2022/rededor-site-front-end-lib-components-search.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-components-section-navigation.mjs +0 -134
- package/fesm2022/rededor-site-front-end-lib-components-section-navigation.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-components-side-ctas.mjs +0 -118
- package/fesm2022/rededor-site-front-end-lib-components-side-ctas.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-components-whatsapp.mjs +0 -49
- package/fesm2022/rededor-site-front-end-lib-components-whatsapp.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-core.mjs +0 -1600
- package/fesm2022/rededor-site-front-end-lib-core.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-cura-accordion.mjs +0 -252
- package/fesm2022/rededor-site-front-end-lib-cura-accordion.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-cura-api.mjs +0 -541
- package/fesm2022/rededor-site-front-end-lib-cura-api.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-cura-badges-cura-badge-counter.mjs +0 -90
- package/fesm2022/rededor-site-front-end-lib-cura-badges-cura-badge-counter.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-cura-badges-cura-badge-distance.mjs +0 -55
- package/fesm2022/rededor-site-front-end-lib-cura-badges-cura-badge-distance.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-cura-badges-cura-badge-dot.mjs +0 -66
- package/fesm2022/rededor-site-front-end-lib-cura-badges-cura-badge-dot.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-cura-badges-cura-badge-pill.mjs +0 -96
- package/fesm2022/rededor-site-front-end-lib-cura-badges-cura-badge-pill.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-cura-badges.mjs +0 -4
- package/fesm2022/rededor-site-front-end-lib-cura-badges.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-cura-buttons-cura-button-outline.mjs +0 -165
- package/fesm2022/rededor-site-front-end-lib-cura-buttons-cura-button-outline.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-cura-buttons-cura-button-select.mjs +0 -130
- package/fesm2022/rededor-site-front-end-lib-cura-buttons-cura-button-select.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-cura-buttons-cura-button-transparent.mjs +0 -156
- package/fesm2022/rededor-site-front-end-lib-cura-buttons-cura-button-transparent.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-cura-buttons-cura-button.mjs +0 -165
- package/fesm2022/rededor-site-front-end-lib-cura-buttons-cura-button.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-cura-buttons.mjs +0 -13
- package/fesm2022/rededor-site-front-end-lib-cura-buttons.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-cura-cards-cura-card.mjs +0 -96
- package/fesm2022/rededor-site-front-end-lib-cura-cards-cura-card.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-cura-feedback-cura-alert.mjs +0 -90
- package/fesm2022/rededor-site-front-end-lib-cura-feedback-cura-alert.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-cura-feedback-cura-modal.mjs +0 -105
- package/fesm2022/rededor-site-front-end-lib-cura-feedback-cura-modal.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-cura-forms-cura-checkbox.mjs +0 -253
- package/fesm2022/rededor-site-front-end-lib-cura-forms-cura-checkbox.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-cura-forms-cura-input-text.mjs +0 -547
- package/fesm2022/rededor-site-front-end-lib-cura-forms-cura-input-text.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-cura-forms-cura-label.mjs +0 -88
- package/fesm2022/rededor-site-front-end-lib-cura-forms-cura-label.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-cura-forms-cura-radio.mjs +0 -237
- package/fesm2022/rededor-site-front-end-lib-cura-forms-cura-radio.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-cura-forms-cura-select-option.mjs +0 -82
- package/fesm2022/rededor-site-front-end-lib-cura-forms-cura-select-option.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-cura-forms-cura-select.mjs +0 -377
- package/fesm2022/rededor-site-front-end-lib-cura-forms-cura-select.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-cura-forms-cura-switch.mjs +0 -182
- package/fesm2022/rededor-site-front-end-lib-cura-forms-cura-switch.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-cura-forms.mjs +0 -21
- package/fesm2022/rededor-site-front-end-lib-cura-forms.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-cura-icons-cura-icon.mjs +0 -88
- package/fesm2022/rededor-site-front-end-lib-cura-icons-cura-icon.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-cura-loaders-cura-loader-bar.mjs +0 -44
- package/fesm2022/rededor-site-front-end-lib-cura-loaders-cura-loader-bar.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-cura-loaders-cura-loader-circle.mjs +0 -49
- package/fesm2022/rededor-site-front-end-lib-cura-loaders-cura-loader-circle.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-cura-texts-cura-display.mjs +0 -84
- package/fesm2022/rededor-site-front-end-lib-cura-texts-cura-display.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-cura-texts-cura-heading.mjs +0 -104
- package/fesm2022/rededor-site-front-end-lib-cura-texts-cura-heading.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-cura-texts-cura-paragraph.mjs +0 -89
- package/fesm2022/rededor-site-front-end-lib-cura-texts-cura-paragraph.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-cura-texts.mjs +0 -4
- package/fesm2022/rededor-site-front-end-lib-cura-texts.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-enums.mjs +0 -187
- package/fesm2022/rededor-site-front-end-lib-enums.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-services-algolia-search-api.mjs +0 -74
- package/fesm2022/rededor-site-front-end-lib-services-algolia-search-api.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-services-algolia.mjs +0 -41
- package/fesm2022/rededor-site-front-end-lib-services-algolia.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-services-ngu-carousel.mjs +0 -88
- package/fesm2022/rededor-site-front-end-lib-services-ngu-carousel.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-services-ssr-loading.mjs +0 -52
- package/fesm2022/rededor-site-front-end-lib-services-ssr-loading.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-services-youtube.mjs +0 -40
- package/fesm2022/rededor-site-front-end-lib-services-youtube.mjs.map +0 -1
- package/fesm2022/rededor-site-front-end-lib-shared.mjs +0 -110
- package/fesm2022/rededor-site-front-end-lib-shared.mjs.map +0 -1
- 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
|