tango-app-ui-shared 3.7.3-dev6-demo7 → 3.7.3-dev6-demo8
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/esm2022/lib/guards/auth.guard.mjs +26 -0
- package/esm2022/lib/guards/lead.guard.mjs +16 -0
- package/esm2022/lib/guards/stores.guard.mjs +16 -0
- package/esm2022/lib/guards/tickets.guard.mjs +16 -0
- package/esm2022/lib/i18n/index.mjs +3 -0
- package/esm2022/lib/i18n/translation.module.mjs +17 -0
- package/esm2022/lib/i18n/translation.service.mjs +53 -0
- package/esm2022/lib/i18n/vocabs/ch.mjs +106 -0
- package/esm2022/lib/i18n/vocabs/de.mjs +106 -0
- package/esm2022/lib/i18n/vocabs/en.mjs +106 -0
- package/esm2022/lib/i18n/vocabs/es.mjs +106 -0
- package/esm2022/lib/i18n/vocabs/fr.mjs +106 -0
- package/esm2022/lib/i18n/vocabs/jp.mjs +106 -0
- package/esm2022/lib/interceptors/http-auth-interceptor.mjs +124 -0
- package/esm2022/lib/interfaces/global-state.mjs +2 -0
- package/esm2022/lib/modules/common/common-shared.module.mjs +31 -0
- package/esm2022/lib/modules/common/custom-select/custom-select.component.mjs +155 -0
- package/esm2022/lib/modules/common/filters/filters.component.mjs +179 -0
- package/esm2022/lib/modules/common/pagination/pagination.component.mjs +49 -0
- package/esm2022/lib/modules/errors/error403/error403.component.mjs +33 -0
- package/esm2022/lib/modules/errors/error404/error404.component.mjs +44 -0
- package/esm2022/lib/modules/errors/error500/error500.component.mjs +45 -0
- package/esm2022/lib/modules/errors/errors-routing.module.mjs +48 -0
- package/esm2022/lib/modules/errors/errors.component.mjs +39 -0
- package/esm2022/lib/modules/errors/errors.module.mjs +37 -0
- package/esm2022/lib/modules/errors/invalid-ip/invalid-ip.component.mjs +44 -0
- package/esm2022/lib/modules/intro/contact-support/contact-support.component.mjs +19 -0
- package/esm2022/lib/modules/intro/intro-routing.module.mjs +24 -0
- package/esm2022/lib/modules/intro/intro.module.mjs +32 -0
- package/esm2022/lib/modules/intro/lead-intro/lead-intro.component.mjs +110 -0
- package/esm2022/lib/modules/layout/components/csm-assign-confirmation/csm-assign-confirmation.component.mjs +31 -0
- package/esm2022/lib/modules/layout/content/content.component.mjs +107 -0
- package/esm2022/lib/modules/layout/footer/footer.component.mjs +17 -0
- package/esm2022/lib/modules/layout/header/header-menu/header-menu.component.mjs +41 -0
- package/esm2022/lib/modules/layout/header/header.component.mjs +100 -0
- package/esm2022/lib/modules/layout/header/navbar/navbar.component.mjs +256 -0
- package/esm2022/lib/modules/layout/header/notifications-inner/notifications-inner.component.mjs +79 -0
- package/esm2022/lib/modules/layout/header/page-title/page-title.component.mjs +56 -0
- package/esm2022/lib/modules/layout/keenicon/icons.json +1 -0
- package/esm2022/lib/modules/layout/keenicon/keenicon.component.mjs +37 -0
- package/esm2022/lib/modules/layout/layout/layout.component.mjs +314 -0
- package/esm2022/lib/modules/layout/layout.module.mjs +198 -0
- package/esm2022/lib/modules/layout/scripts-init/scripts-init.component.mjs +74 -0
- package/esm2022/lib/modules/layout/scroll-top/scroll-top.component.mjs +74 -0
- package/esm2022/lib/modules/layout/sidebar/sidebar-footer/sidebar-footer.component.mjs +159 -0
- package/esm2022/lib/modules/layout/sidebar/sidebar-logo/sidebar-logo.component.mjs +45 -0
- package/esm2022/lib/modules/layout/sidebar/sidebar-menu/sidebar-menu.component.mjs +122 -0
- package/esm2022/lib/modules/layout/sidebar/sidebar.component.mjs +134 -0
- package/esm2022/lib/modules/layout/toolbar/accounting/accounting.component.mjs +16 -0
- package/esm2022/lib/modules/layout/toolbar/classic/classic.component.mjs +331 -0
- package/esm2022/lib/modules/layout/toolbar/client-settings/client-settings.component.mjs +88 -0
- package/esm2022/lib/modules/layout/toolbar/date-single-select/date-single-select.component.mjs +207 -0
- package/esm2022/lib/modules/layout/toolbar/datepicker/datepicker.component.mjs +158 -0
- package/esm2022/lib/modules/layout/toolbar/extended/extended.component.mjs +15 -0
- package/esm2022/lib/modules/layout/toolbar/metrics-header/metrics-header.component.mjs +1321 -0
- package/esm2022/lib/modules/layout/toolbar/reports/reports.component.mjs +18 -0
- package/esm2022/lib/modules/layout/toolbar/saas/saas.component.mjs +18 -0
- package/esm2022/lib/modules/layout/toolbar/single-clientstore-date/single-clientstore-date.component.mjs +216 -0
- package/esm2022/lib/modules/layout/toolbar/single-store/single-store.component.mjs +178 -0
- package/esm2022/lib/modules/layout/toolbar/single-storedate/single-storedate.component.mjs +166 -0
- package/esm2022/lib/modules/layout/toolbar/storesingle/storesingle.component.mjs +105 -0
- package/esm2022/lib/modules/layout/toolbar/toolbar.component.mjs +372 -0
- package/esm2022/lib/modules/layout/toolbar/traffic-header/traffic-header/traffic-header.component.mjs +1062 -0
- package/esm2022/lib/modules/layout/toolbar/traffic-nob/traffic-nob.component.mjs +795 -0
- package/esm2022/lib/modules/layout/toolbar/trax-header/trax-header.component.mjs +880 -0
- package/esm2022/lib/modules/layout/toolbar/trax-withoutdate/trax-withoutdate.component.mjs +729 -0
- package/esm2022/lib/modules/layout/toolbar/zone-header/zone-header.component.mjs +1100 -0
- package/esm2022/lib/modules/notification/conformation/conformation.component.mjs +22 -0
- package/esm2022/lib/modules/notification/notification/notification.component.mjs +317 -0
- package/esm2022/lib/modules/notification/notification-routing.module.mjs +28 -0
- package/esm2022/lib/modules/notification/notification.module.mjs +32 -0
- package/esm2022/lib/pipes/customDate.pipe.mjs +22 -0
- package/esm2022/lib/routes/route-wraper-modules/edge-wrapper.module.mjs +18 -0
- package/esm2022/lib/routes/route-wraper-modules/manage-wrapper.module.mjs +18 -0
- package/esm2022/lib/routes/route-wraper-modules/profile-wrapper.module.mjs +18 -0
- package/esm2022/lib/routes/route-wraper-modules/store-wrapper.module.mjs +18 -0
- package/esm2022/lib/routes/route-wraper-modules/ticket-wrapper.module.mjs +18 -0
- package/esm2022/lib/routes/routing.mjs +53 -0
- package/esm2022/lib/services/auth.service.mjs +141 -0
- package/esm2022/lib/services/notification.service.mjs +74 -0
- package/esm2022/lib/services/toast.service.mjs +83 -0
- package/esm2022/public-api.mjs +56 -0
- package/esm2022/tango-app-ui-shared.mjs +5 -0
- package/fesm2022/tango-app-ui-shared-edge-wrapper.module-CFDk0tvS.mjs +21 -0
- package/fesm2022/tango-app-ui-shared-edge-wrapper.module-CFDk0tvS.mjs.map +1 -0
- package/fesm2022/tango-app-ui-shared-intro.module-DYh4ZRha.mjs +188 -0
- package/fesm2022/tango-app-ui-shared-intro.module-DYh4ZRha.mjs.map +1 -0
- package/fesm2022/tango-app-ui-shared-manage-wrapper.module-BHyh4Njw.mjs +21 -0
- package/fesm2022/tango-app-ui-shared-manage-wrapper.module-BHyh4Njw.mjs.map +1 -0
- package/fesm2022/tango-app-ui-shared-notification.module-C5ZmCf8U.mjs +400 -0
- package/fesm2022/tango-app-ui-shared-notification.module-C5ZmCf8U.mjs.map +1 -0
- package/fesm2022/tango-app-ui-shared-profile-wrapper.module-BNC1AGOk.mjs +21 -0
- package/fesm2022/tango-app-ui-shared-profile-wrapper.module-BNC1AGOk.mjs.map +1 -0
- package/fesm2022/tango-app-ui-shared-store-wrapper.module-DdaCYHdv.mjs +21 -0
- package/fesm2022/tango-app-ui-shared-store-wrapper.module-DdaCYHdv.mjs.map +1 -0
- package/fesm2022/tango-app-ui-shared-ticket-wrapper.module-r32uKkDO.mjs +21 -0
- package/fesm2022/tango-app-ui-shared-ticket-wrapper.module-r32uKkDO.mjs.map +1 -0
- package/fesm2022/tango-app-ui-shared.mjs +12450 -0
- package/fesm2022/tango-app-ui-shared.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/guards/auth.guard.d.ts +10 -0
- package/lib/guards/lead.guard.d.ts +2 -0
- package/lib/guards/stores.guard.d.ts +2 -0
- package/lib/guards/tickets.guard.d.ts +2 -0
- package/{src/lib/i18n/index.ts → lib/i18n/index.d.ts} +2 -2
- package/lib/i18n/translation.module.d.ts +8 -0
- package/lib/i18n/translation.service.d.ts +19 -0
- package/lib/i18n/vocabs/ch.d.ts +104 -0
- package/lib/i18n/vocabs/de.d.ts +104 -0
- package/lib/i18n/vocabs/en.d.ts +104 -0
- package/lib/i18n/vocabs/es.d.ts +104 -0
- package/lib/i18n/vocabs/fr.d.ts +104 -0
- package/lib/i18n/vocabs/jp.d.ts +104 -0
- package/lib/interceptors/http-auth-interceptor.d.ts +19 -0
- package/lib/interfaces/global-state.d.ts +5 -0
- package/lib/modules/common/common-shared.module.d.ts +13 -0
- package/lib/modules/common/custom-select/custom-select.component.d.ts +33 -0
- package/lib/modules/common/filters/filters.component.d.ts +38 -0
- package/lib/modules/common/pagination/pagination.component.d.ts +18 -0
- package/lib/modules/errors/error403/error403.component.d.ts +14 -0
- package/lib/modules/errors/error404/error404.component.d.ts +15 -0
- package/lib/modules/errors/error500/error500.component.d.ts +15 -0
- package/lib/modules/errors/errors-routing.module.d.ts +7 -0
- package/lib/modules/errors/errors.component.d.ts +13 -0
- package/lib/modules/errors/errors.module.d.ts +13 -0
- package/lib/modules/errors/invalid-ip/invalid-ip.component.d.ts +17 -0
- package/lib/modules/intro/contact-support/contact-support.component.d.ts +9 -0
- package/lib/modules/intro/intro-routing.module.d.ts +7 -0
- package/lib/modules/intro/intro.module.d.ts +11 -0
- package/lib/modules/intro/lead-intro/lead-intro.component.d.ts +31 -0
- package/lib/modules/layout/components/csm-assign-confirmation/csm-assign-confirmation.component.d.ts +13 -0
- package/lib/modules/layout/content/content.component.d.ts +25 -0
- package/lib/modules/layout/footer/footer.component.d.ts +8 -0
- package/lib/modules/layout/header/header-menu/header-menu.component.d.ts +18 -0
- package/lib/modules/layout/header/header.component.d.ts +30 -0
- package/lib/modules/layout/header/navbar/navbar.component.d.ts +45 -0
- package/lib/modules/layout/header/notifications-inner/notifications-inner.component.d.ts +25 -0
- package/lib/modules/layout/header/page-title/page-title.component.d.ts +23 -0
- package/lib/modules/layout/keenicon/keenicon.component.d.ts +13 -0
- package/lib/modules/layout/layout/layout.component.d.ts +82 -0
- package/lib/modules/layout/layout.module.d.ts +50 -0
- package/lib/modules/layout/scripts-init/scripts-init.component.d.ts +19 -0
- package/lib/modules/layout/scroll-top/scroll-top.component.d.ts +19 -0
- package/lib/modules/layout/sidebar/sidebar-footer/sidebar-footer.component.d.ts +45 -0
- package/lib/modules/layout/sidebar/sidebar-logo/sidebar-logo.component.d.ts +19 -0
- package/lib/modules/layout/sidebar/sidebar-menu/sidebar-menu.component.d.ts +26 -0
- package/lib/modules/layout/sidebar/sidebar.component.d.ts +36 -0
- package/lib/modules/layout/toolbar/accounting/accounting.component.d.ts +8 -0
- package/lib/modules/layout/toolbar/classic/classic.component.d.ts +48 -0
- package/lib/modules/layout/toolbar/client-settings/client-settings.component.d.ts +16 -0
- package/lib/modules/layout/toolbar/date-single-select/date-single-select.component.d.ts +28 -0
- package/lib/modules/layout/toolbar/datepicker/datepicker.component.d.ts +28 -0
- package/lib/modules/layout/toolbar/extended/extended.component.d.ts +8 -0
- package/lib/modules/layout/toolbar/metrics-header/metrics-header.component.d.ts +103 -0
- package/lib/modules/layout/toolbar/reports/reports.component.d.ts +9 -0
- package/lib/modules/layout/toolbar/saas/saas.component.d.ts +9 -0
- package/lib/modules/layout/toolbar/single-clientstore-date/single-clientstore-date.component.d.ts +32 -0
- package/lib/modules/layout/toolbar/single-store/single-store.component.d.ts +33 -0
- package/lib/modules/layout/toolbar/single-storedate/single-storedate.component.d.ts +34 -0
- package/lib/modules/layout/toolbar/storesingle/storesingle.component.d.ts +24 -0
- package/lib/modules/layout/toolbar/toolbar.component.d.ts +57 -0
- package/lib/modules/layout/toolbar/traffic-header/traffic-header/traffic-header.component.d.ts +93 -0
- package/lib/modules/layout/toolbar/traffic-nob/traffic-nob.component.d.ts +80 -0
- package/lib/modules/layout/toolbar/trax-header/trax-header.component.d.ts +83 -0
- package/lib/modules/layout/toolbar/trax-withoutdate/trax-withoutdate.component.d.ts +74 -0
- package/lib/modules/layout/toolbar/zone-header/zone-header.component.d.ts +97 -0
- package/lib/modules/notification/conformation/conformation.component.d.ts +10 -0
- package/lib/modules/notification/notification/notification.component.d.ts +63 -0
- package/lib/modules/notification/notification-routing.module.d.ts +7 -0
- package/lib/modules/notification/notification.module.d.ts +11 -0
- package/lib/pipes/customDate.pipe.d.ts +7 -0
- package/lib/routes/route-wraper-modules/edge-wrapper.module.d.ts +7 -0
- package/lib/routes/route-wraper-modules/manage-wrapper.module.d.ts +7 -0
- package/lib/routes/route-wraper-modules/profile-wrapper.module.d.ts +7 -0
- package/lib/routes/route-wraper-modules/store-wrapper.module.d.ts +7 -0
- package/lib/routes/route-wraper-modules/ticket-wrapper.module.d.ts +7 -0
- package/lib/routes/routing.d.ts +3 -0
- package/lib/services/auth.service.d.ts +49 -0
- package/lib/services/notification.service.d.ts +30 -0
- package/lib/services/toast.service.d.ts +10 -0
- package/package.json +25 -12
- package/{src/public-api.ts → public-api.d.ts} +44 -71
- package/.eslintrc.json +0 -37
- package/ng-package.json +0 -7
- package/src/lib/guards/auth.guard.ts +0 -20
- package/src/lib/guards/lead.guard.ts +0 -16
- package/src/lib/guards/stores.guard.ts +0 -16
- package/src/lib/guards/tickets.guard.ts +0 -16
- package/src/lib/i18n/translation.module.ts +0 -9
- package/src/lib/i18n/translation.service.ts +0 -61
- package/src/lib/i18n/vocabs/ch.ts +0 -105
- package/src/lib/i18n/vocabs/de.ts +0 -105
- package/src/lib/i18n/vocabs/en.ts +0 -105
- package/src/lib/i18n/vocabs/es.ts +0 -105
- package/src/lib/i18n/vocabs/fr.ts +0 -105
- package/src/lib/i18n/vocabs/jp.ts +0 -105
- package/src/lib/interceptors/http-auth-interceptor.ts +0 -225
- package/src/lib/interfaces/global-state.ts +0 -6
- package/src/lib/modules/common/common-shared.module.ts +0 -20
- package/src/lib/modules/common/custom-select/custom-select.component.html +0 -42
- package/src/lib/modules/common/custom-select/custom-select.component.scss +0 -131
- package/src/lib/modules/common/custom-select/custom-select.component.spec.ts +0 -23
- package/src/lib/modules/common/custom-select/custom-select.component.ts +0 -149
- package/src/lib/modules/common/filters/filters.component.html +0 -76
- package/src/lib/modules/common/filters/filters.component.scss +0 -131
- package/src/lib/modules/common/filters/filters.component.spec.ts +0 -23
- package/src/lib/modules/common/filters/filters.component.ts +0 -181
- package/src/lib/modules/common/pagination/pagination.component.html +0 -26
- package/src/lib/modules/common/pagination/pagination.component.scss +0 -63
- package/src/lib/modules/common/pagination/pagination.component.spec.ts +0 -23
- package/src/lib/modules/common/pagination/pagination.component.ts +0 -46
- package/src/lib/modules/errors/error403/error403.component.html +0 -25
- package/src/lib/modules/errors/error403/error403.component.scss +0 -0
- package/src/lib/modules/errors/error403/error403.component.spec.ts +0 -23
- package/src/lib/modules/errors/error403/error403.component.ts +0 -28
- package/src/lib/modules/errors/error404/error404.component.html +0 -24
- package/src/lib/modules/errors/error404/error404.component.scss +0 -0
- package/src/lib/modules/errors/error404/error404.component.spec.ts +0 -25
- package/src/lib/modules/errors/error404/error404.component.ts +0 -50
- package/src/lib/modules/errors/error500/error500.component.html +0 -24
- package/src/lib/modules/errors/error500/error500.component.scss +0 -0
- package/src/lib/modules/errors/error500/error500.component.spec.ts +0 -25
- package/src/lib/modules/errors/error500/error500.component.ts +0 -50
- package/src/lib/modules/errors/errors-routing.module.ts +0 -40
- package/src/lib/modules/errors/errors.component.html +0 -15
- package/src/lib/modules/errors/errors.component.scss +0 -4
- package/src/lib/modules/errors/errors.component.spec.ts +0 -25
- package/src/lib/modules/errors/errors.component.ts +0 -42
- package/src/lib/modules/errors/errors.module.ts +0 -25
- package/src/lib/modules/errors/invalid-ip/invalid-ip.component.html +0 -16
- package/src/lib/modules/errors/invalid-ip/invalid-ip.component.scss +0 -0
- package/src/lib/modules/errors/invalid-ip/invalid-ip.component.spec.ts +0 -23
- package/src/lib/modules/errors/invalid-ip/invalid-ip.component.ts +0 -43
- package/src/lib/modules/intro/contact-support/contact-support.component.html +0 -30
- package/src/lib/modules/intro/contact-support/contact-support.component.scss +0 -60
- package/src/lib/modules/intro/contact-support/contact-support.component.spec.ts +0 -23
- package/src/lib/modules/intro/contact-support/contact-support.component.ts +0 -17
- package/src/lib/modules/intro/intro-routing.module.ts +0 -16
- package/src/lib/modules/intro/intro.module.ts +0 -21
- package/src/lib/modules/intro/lead-intro/lead-intro.component.html +0 -325
- package/src/lib/modules/intro/lead-intro/lead-intro.component.scss +0 -185
- package/src/lib/modules/intro/lead-intro/lead-intro.component.spec.ts +0 -23
- package/src/lib/modules/intro/lead-intro/lead-intro.component.ts +0 -120
- package/src/lib/modules/layout/components/csm-assign-confirmation/csm-assign-confirmation.component.html +0 -44
- package/src/lib/modules/layout/components/csm-assign-confirmation/csm-assign-confirmation.component.scss +0 -28
- package/src/lib/modules/layout/components/csm-assign-confirmation/csm-assign-confirmation.component.spec.ts +0 -23
- package/src/lib/modules/layout/components/csm-assign-confirmation/csm-assign-confirmation.component.ts +0 -24
- package/src/lib/modules/layout/content/content.component.html +0 -12
- package/src/lib/modules/layout/content/content.component.scss +0 -0
- package/src/lib/modules/layout/content/content.component.ts +0 -102
- package/src/lib/modules/layout/footer/footer.component.html +0 -29
- package/src/lib/modules/layout/footer/footer.component.scss +0 -7
- package/src/lib/modules/layout/footer/footer.component.spec.ts +0 -25
- package/src/lib/modules/layout/footer/footer.component.ts +0 -13
- package/src/lib/modules/layout/header/header-menu/header-menu.component.html +0 -27
- package/src/lib/modules/layout/header/header-menu/header-menu.component.scss +0 -4
- package/src/lib/modules/layout/header/header-menu/header-menu.component.spec.ts +0 -25
- package/src/lib/modules/layout/header/header-menu/header-menu.component.ts +0 -38
- package/src/lib/modules/layout/header/header.component.html +0 -90
- package/src/lib/modules/layout/header/header.component.scss +0 -7
- package/src/lib/modules/layout/header/header.component.spec.ts +0 -25
- package/src/lib/modules/layout/header/header.component.ts +0 -139
- package/src/lib/modules/layout/header/navbar/navbar.component.html +0 -156
- package/src/lib/modules/layout/header/navbar/navbar.component.scss +0 -223
- package/src/lib/modules/layout/header/navbar/navbar.component.spec.ts +0 -23
- package/src/lib/modules/layout/header/navbar/navbar.component.ts +0 -255
- package/src/lib/modules/layout/header/notifications-inner/notifications-inner.component.html +0 -200
- package/src/lib/modules/layout/header/notifications-inner/notifications-inner.component.scss +0 -139
- package/src/lib/modules/layout/header/notifications-inner/notifications-inner.component.ts +0 -76
- package/src/lib/modules/layout/header/page-title/page-title.component.html +0 -32
- package/src/lib/modules/layout/header/page-title/page-title.component.scss +0 -11
- package/src/lib/modules/layout/header/page-title/page-title.component.ts +0 -47
- package/src/lib/modules/layout/keenicon/icons.json +0 -1
- package/src/lib/modules/layout/keenicon/keenicon.component.html +0 -4
- package/src/lib/modules/layout/keenicon/keenicon.component.scss +0 -0
- package/src/lib/modules/layout/keenicon/keenicon.component.spec.ts +0 -23
- package/src/lib/modules/layout/keenicon/keenicon.component.ts +0 -30
- package/src/lib/modules/layout/layout/layout.component.html +0 -71
- package/src/lib/modules/layout/layout/layout.component.scss +0 -23
- package/src/lib/modules/layout/layout/layout.component.ts +0 -425
- package/src/lib/modules/layout/layout.module.ts +0 -129
- package/src/lib/modules/layout/scripts-init/scripts-init.component.html +0 -0
- package/src/lib/modules/layout/scripts-init/scripts-init.component.ts +0 -81
- package/src/lib/modules/layout/scroll-top/scroll-top.component.html +0 -1
- package/src/lib/modules/layout/scroll-top/scroll-top.component.ts +0 -75
- package/src/lib/modules/layout/sidebar/sidebar-footer/sidebar-footer.component.html +0 -70
- package/src/lib/modules/layout/sidebar/sidebar-footer/sidebar-footer.component.scss +0 -57
- package/src/lib/modules/layout/sidebar/sidebar-footer/sidebar-footer.component.spec.ts +0 -23
- package/src/lib/modules/layout/sidebar/sidebar-footer/sidebar-footer.component.ts +0 -136
- package/src/lib/modules/layout/sidebar/sidebar-logo/sidebar-logo.component.html +0 -26
- package/src/lib/modules/layout/sidebar/sidebar-logo/sidebar-logo.component.scss +0 -0
- package/src/lib/modules/layout/sidebar/sidebar-logo/sidebar-logo.component.spec.ts +0 -23
- package/src/lib/modules/layout/sidebar/sidebar-logo/sidebar-logo.component.ts +0 -36
- package/src/lib/modules/layout/sidebar/sidebar-menu/sidebar-menu.component.html +0 -761
- package/src/lib/modules/layout/sidebar/sidebar-menu/sidebar-menu.component.scss +0 -38
- package/src/lib/modules/layout/sidebar/sidebar-menu/sidebar-menu.component.spec.ts +0 -23
- package/src/lib/modules/layout/sidebar/sidebar-menu/sidebar-menu.component.ts +0 -130
- package/src/lib/modules/layout/sidebar/sidebar.component.html +0 -16
- package/src/lib/modules/layout/sidebar/sidebar.component.scss +0 -3
- package/src/lib/modules/layout/sidebar/sidebar.component.spec.ts +0 -23
- package/src/lib/modules/layout/sidebar/sidebar.component.ts +0 -203
- package/src/lib/modules/layout/toolbar/accounting/accounting.component.html +0 -84
- package/src/lib/modules/layout/toolbar/accounting/accounting.component.scss +0 -0
- package/src/lib/modules/layout/toolbar/accounting/accounting.component.spec.ts +0 -23
- package/src/lib/modules/layout/toolbar/accounting/accounting.component.ts +0 -14
- package/src/lib/modules/layout/toolbar/classic/classic.component.html +0 -69
- package/src/lib/modules/layout/toolbar/classic/classic.component.scss +0 -238
- package/src/lib/modules/layout/toolbar/classic/classic.component.spec.ts +0 -23
- package/src/lib/modules/layout/toolbar/classic/classic.component.ts +0 -389
- package/src/lib/modules/layout/toolbar/client-settings/client-settings.component.html +0 -4
- package/src/lib/modules/layout/toolbar/client-settings/client-settings.component.scss +0 -3
- package/src/lib/modules/layout/toolbar/client-settings/client-settings.component.spec.ts +0 -23
- package/src/lib/modules/layout/toolbar/client-settings/client-settings.component.ts +0 -91
- package/src/lib/modules/layout/toolbar/date-single-select/date-single-select.component.html +0 -22
- package/src/lib/modules/layout/toolbar/date-single-select/date-single-select.component.scss +0 -156
- package/src/lib/modules/layout/toolbar/date-single-select/date-single-select.component.spec.ts +0 -23
- package/src/lib/modules/layout/toolbar/date-single-select/date-single-select.component.ts +0 -238
- package/src/lib/modules/layout/toolbar/datepicker/datepicker.component.html +0 -14
- package/src/lib/modules/layout/toolbar/datepicker/datepicker.component.scss +0 -149
- package/src/lib/modules/layout/toolbar/datepicker/datepicker.component.spec.ts +0 -23
- package/src/lib/modules/layout/toolbar/datepicker/datepicker.component.ts +0 -183
- package/src/lib/modules/layout/toolbar/extended/extended.component.html +0 -100
- package/src/lib/modules/layout/toolbar/extended/extended.component.scss +0 -0
- package/src/lib/modules/layout/toolbar/extended/extended.component.spec.ts +0 -23
- package/src/lib/modules/layout/toolbar/extended/extended.component.ts +0 -12
- package/src/lib/modules/layout/toolbar/metrics-header/metrics-header.component.html +0 -311
- package/src/lib/modules/layout/toolbar/metrics-header/metrics-header.component.scss +0 -311
- package/src/lib/modules/layout/toolbar/metrics-header/metrics-header.component.spec.ts +0 -23
- package/src/lib/modules/layout/toolbar/metrics-header/metrics-header.component.ts +0 -1555
- package/src/lib/modules/layout/toolbar/reports/reports.component.html +0 -62
- package/src/lib/modules/layout/toolbar/reports/reports.component.scss +0 -0
- package/src/lib/modules/layout/toolbar/reports/reports.component.spec.ts +0 -23
- package/src/lib/modules/layout/toolbar/reports/reports.component.ts +0 -14
- package/src/lib/modules/layout/toolbar/saas/saas.component.html +0 -77
- package/src/lib/modules/layout/toolbar/saas/saas.component.scss +0 -0
- package/src/lib/modules/layout/toolbar/saas/saas.component.spec.ts +0 -23
- package/src/lib/modules/layout/toolbar/saas/saas.component.ts +0 -14
- package/src/lib/modules/layout/toolbar/single-clientstore-date/single-clientstore-date.component.html +0 -26
- package/src/lib/modules/layout/toolbar/single-clientstore-date/single-clientstore-date.component.scss +0 -176
- package/src/lib/modules/layout/toolbar/single-clientstore-date/single-clientstore-date.component.spec.ts +0 -23
- package/src/lib/modules/layout/toolbar/single-clientstore-date/single-clientstore-date.component.ts +0 -235
- package/src/lib/modules/layout/toolbar/single-store/single-store.component.html +0 -39
- package/src/lib/modules/layout/toolbar/single-store/single-store.component.scss +0 -176
- package/src/lib/modules/layout/toolbar/single-store/single-store.component.spec.ts +0 -23
- package/src/lib/modules/layout/toolbar/single-store/single-store.component.ts +0 -188
- package/src/lib/modules/layout/toolbar/single-storedate/single-storedate.component.html +0 -17
- package/src/lib/modules/layout/toolbar/single-storedate/single-storedate.component.scss +0 -172
- package/src/lib/modules/layout/toolbar/single-storedate/single-storedate.component.spec.ts +0 -23
- package/src/lib/modules/layout/toolbar/single-storedate/single-storedate.component.ts +0 -179
- package/src/lib/modules/layout/toolbar/storesingle/storesingle.component.html +0 -4
- package/src/lib/modules/layout/toolbar/storesingle/storesingle.component.scss +0 -19
- package/src/lib/modules/layout/toolbar/storesingle/storesingle.component.spec.ts +0 -23
- package/src/lib/modules/layout/toolbar/storesingle/storesingle.component.ts +0 -105
- package/src/lib/modules/layout/toolbar/toolbar.component.html +0 -64
- package/src/lib/modules/layout/toolbar/toolbar.component.scss +0 -0
- package/src/lib/modules/layout/toolbar/toolbar.component.spec.ts +0 -25
- package/src/lib/modules/layout/toolbar/toolbar.component.ts +0 -400
- package/src/lib/modules/layout/toolbar/traffic-header/traffic-header/traffic-header.component.html +0 -259
- package/src/lib/modules/layout/toolbar/traffic-header/traffic-header/traffic-header.component.scss +0 -305
- package/src/lib/modules/layout/toolbar/traffic-header/traffic-header/traffic-header.component.spec.ts +0 -23
- package/src/lib/modules/layout/toolbar/traffic-header/traffic-header/traffic-header.component.ts +0 -1202
- package/src/lib/modules/layout/toolbar/traffic-nob/traffic-nob.component.html +0 -199
- package/src/lib/modules/layout/toolbar/traffic-nob/traffic-nob.component.scss +0 -311
- package/src/lib/modules/layout/toolbar/traffic-nob/traffic-nob.component.spec.ts +0 -23
- package/src/lib/modules/layout/toolbar/traffic-nob/traffic-nob.component.ts +0 -899
- package/src/lib/modules/layout/toolbar/trax-header/trax-header.component.html +0 -204
- package/src/lib/modules/layout/toolbar/trax-header/trax-header.component.scss +0 -311
- package/src/lib/modules/layout/toolbar/trax-header/trax-header.component.spec.ts +0 -23
- package/src/lib/modules/layout/toolbar/trax-header/trax-header.component.ts +0 -1045
- package/src/lib/modules/layout/toolbar/trax-withoutdate/trax-withoutdate.component.html +0 -190
- package/src/lib/modules/layout/toolbar/trax-withoutdate/trax-withoutdate.component.scss +0 -311
- package/src/lib/modules/layout/toolbar/trax-withoutdate/trax-withoutdate.component.spec.ts +0 -23
- package/src/lib/modules/layout/toolbar/trax-withoutdate/trax-withoutdate.component.ts +0 -825
- package/src/lib/modules/layout/toolbar/zone-header/zone-header.component.html +0 -259
- package/src/lib/modules/layout/toolbar/zone-header/zone-header.component.scss +0 -305
- package/src/lib/modules/layout/toolbar/zone-header/zone-header.component.spec.ts +0 -23
- package/src/lib/modules/layout/toolbar/zone-header/zone-header.component.ts +0 -1242
- package/src/lib/modules/notification/conformation/conformation.component.html +0 -25
- package/src/lib/modules/notification/conformation/conformation.component.scss +0 -0
- package/src/lib/modules/notification/conformation/conformation.component.spec.ts +0 -23
- package/src/lib/modules/notification/conformation/conformation.component.ts +0 -23
- package/src/lib/modules/notification/notification/notification.component.html +0 -209
- package/src/lib/modules/notification/notification/notification.component.scss +0 -211
- package/src/lib/modules/notification/notification/notification.component.spec.ts +0 -23
- package/src/lib/modules/notification/notification/notification.component.ts +0 -310
- package/src/lib/modules/notification/notification-routing.module.ts +0 -20
- package/src/lib/modules/notification/notification.module.ts +0 -21
- package/src/lib/pipes/customDate.pipe.ts +0 -18
- package/src/lib/routes/route-wraper-modules/analyse-wrapper.module.ts +0 -12
- package/src/lib/routes/route-wraper-modules/edge-wrapper.module.ts +0 -11
- package/src/lib/routes/route-wraper-modules/manage-wrapper.module.ts +0 -11
- package/src/lib/routes/route-wraper-modules/profile-wrapper.module.ts +0 -12
- package/src/lib/routes/route-wraper-modules/store-wrapper.module.ts +0 -11
- package/src/lib/routes/route-wraper-modules/ticket-wrapper.module.ts +0 -10
- package/src/lib/routes/routing.ts +0 -56
- package/src/lib/services/auth.service.ts +0 -178
- package/src/lib/services/notification.service.spec.ts +0 -16
- package/src/lib/services/notification.service.ts +0 -73
- package/src/lib/services/toast.service.ts +0 -82
- package/tsconfig.lib.json +0 -14
- package/tsconfig.lib.prod.json +0 -10
- package/tsconfig.spec.json +0 -14
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
import { Component, ViewChild, HostListener, } from '@angular/core';
|
|
2
|
+
import { NavigationEnd } from '@angular/router';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "tango-app-ui-global";
|
|
5
|
+
import * as i2 from "@angular/router";
|
|
6
|
+
import * as i3 from "../../../services/auth.service";
|
|
7
|
+
import * as i4 from "../../../services/toast.service";
|
|
8
|
+
import * as i5 from "@angular/common";
|
|
9
|
+
import * as i6 from "../header/header.component";
|
|
10
|
+
import * as i7 from "../content/content.component";
|
|
11
|
+
import * as i8 from "../footer/footer.component";
|
|
12
|
+
import * as i9 from "../scripts-init/scripts-init.component";
|
|
13
|
+
import * as i10 from "../toolbar/toolbar.component";
|
|
14
|
+
import * as i11 from "../sidebar/sidebar.component";
|
|
15
|
+
import * as i12 from "../scroll-top/scroll-top.component";
|
|
16
|
+
export class LayoutComponent {
|
|
17
|
+
initService;
|
|
18
|
+
layout;
|
|
19
|
+
router;
|
|
20
|
+
activatedRoute;
|
|
21
|
+
authService;
|
|
22
|
+
toastService;
|
|
23
|
+
gs;
|
|
24
|
+
unsubscribe = [];
|
|
25
|
+
// Public variables
|
|
26
|
+
// page
|
|
27
|
+
pageContainerCSSClasses;
|
|
28
|
+
// header
|
|
29
|
+
appHeaderDefaultClass = '';
|
|
30
|
+
appHeaderDisplay;
|
|
31
|
+
appHeaderDefaultStickyEnabled;
|
|
32
|
+
appHeaderDefaultStickyAttributes = {};
|
|
33
|
+
appHeaderDefaultMinimizeEnabled;
|
|
34
|
+
appHeaderDefaultMinimizeAttributes = {};
|
|
35
|
+
// toolbar
|
|
36
|
+
appToolbarDisplay;
|
|
37
|
+
appToolbarLayout;
|
|
38
|
+
appToolbarCSSClass = '';
|
|
39
|
+
appToolbarSwapEnabled;
|
|
40
|
+
appToolbarSwapAttributes = {};
|
|
41
|
+
appToolbarStickyEnabled;
|
|
42
|
+
appToolbarStickyAttributes = {};
|
|
43
|
+
appToolbarMinimizeEnabled;
|
|
44
|
+
appToolbarMinimizeAttributes = {};
|
|
45
|
+
// content
|
|
46
|
+
appContentContiner;
|
|
47
|
+
appContentContainerClass;
|
|
48
|
+
contentCSSClasses;
|
|
49
|
+
contentContainerCSSClass;
|
|
50
|
+
// sidebar
|
|
51
|
+
appSidebarDefaultClass;
|
|
52
|
+
appSidebarDefaultDrawerEnabled;
|
|
53
|
+
appSidebarDefaultDrawerAttributes = {};
|
|
54
|
+
appSidebarDisplay;
|
|
55
|
+
appSidebarDefaultStickyEnabled;
|
|
56
|
+
appSidebarDefaultStickyAttributes = {};
|
|
57
|
+
ktSidebar;
|
|
58
|
+
/// sidebar panel
|
|
59
|
+
appSidebarPanelDisplay;
|
|
60
|
+
// footer
|
|
61
|
+
appFooterDisplay;
|
|
62
|
+
appFooterCSSClass = '';
|
|
63
|
+
appFooterContainer = '';
|
|
64
|
+
appFooterContainerCSSClass = '';
|
|
65
|
+
appFooterFixedDesktop;
|
|
66
|
+
appFooterFixedMobile;
|
|
67
|
+
// scrolltop
|
|
68
|
+
scrolltopDisplay;
|
|
69
|
+
ktAside;
|
|
70
|
+
ktHeaderMobile;
|
|
71
|
+
ktHeader;
|
|
72
|
+
constructor(initService, layout, router, activatedRoute, authService, toastService, gs) {
|
|
73
|
+
this.initService = initService;
|
|
74
|
+
this.layout = layout;
|
|
75
|
+
this.router = router;
|
|
76
|
+
this.activatedRoute = activatedRoute;
|
|
77
|
+
this.authService = authService;
|
|
78
|
+
this.toastService = toastService;
|
|
79
|
+
this.gs = gs;
|
|
80
|
+
// define layout type and load layout
|
|
81
|
+
this.router.events.subscribe((event) => {
|
|
82
|
+
if (event instanceof NavigationEnd) {
|
|
83
|
+
const currentLayoutType = this.layout.currentLayoutTypeSubject.value;
|
|
84
|
+
const nextLayoutType = this.activatedRoute?.firstChild?.snapshot.data.layout ||
|
|
85
|
+
this.layout.getBaseLayoutTypeFromLocalStorage();
|
|
86
|
+
if (currentLayoutType !== nextLayoutType || !currentLayoutType) {
|
|
87
|
+
this.layout.currentLayoutTypeSubject.next(nextLayoutType);
|
|
88
|
+
this.initService.reInitProps(nextLayoutType);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
ngOnInit() {
|
|
94
|
+
const subscr = this.layout.layoutConfigSubject
|
|
95
|
+
.asObservable()
|
|
96
|
+
.subscribe((config) => {
|
|
97
|
+
this.updateProps(config);
|
|
98
|
+
});
|
|
99
|
+
this.unsubscribe.push(subscr);
|
|
100
|
+
}
|
|
101
|
+
updateProps(config) {
|
|
102
|
+
this.scrolltopDisplay = this.layout.getProp('scrolltop.display', config);
|
|
103
|
+
this.pageContainerCSSClasses =
|
|
104
|
+
this.layout.getStringCSSClasses('pageContainer');
|
|
105
|
+
this.appHeaderDefaultClass = this.layout.getProp('app.header.default.class', config);
|
|
106
|
+
this.appHeaderDisplay = this.layout.getProp('app.header.display', config);
|
|
107
|
+
this.appFooterDisplay = this.layout.getProp('app.footer.display', config);
|
|
108
|
+
this.appSidebarDisplay = this.layout.getProp('app.sidebar.display', config);
|
|
109
|
+
this.appSidebarPanelDisplay = this.layout.getProp('app.sidebar-panel.display', config);
|
|
110
|
+
this.appToolbarDisplay = this.layout.getProp('app.toolbar.display', config);
|
|
111
|
+
this.contentCSSClasses = this.layout.getStringCSSClasses('content');
|
|
112
|
+
this.contentContainerCSSClass =
|
|
113
|
+
this.layout.getStringCSSClasses('contentContainer');
|
|
114
|
+
this.appContentContiner = this.layout.getProp('app.content.container', config);
|
|
115
|
+
this.appContentContainerClass = this.layout.getProp('app.content.containerClass', config);
|
|
116
|
+
// footer
|
|
117
|
+
if (this.appFooterDisplay) {
|
|
118
|
+
this.updateFooter(config);
|
|
119
|
+
}
|
|
120
|
+
// sidebar
|
|
121
|
+
if (this.appSidebarDisplay) {
|
|
122
|
+
this.updateSidebar(config);
|
|
123
|
+
}
|
|
124
|
+
// header
|
|
125
|
+
if (this.appHeaderDisplay) {
|
|
126
|
+
this.updateHeader(config);
|
|
127
|
+
}
|
|
128
|
+
// toolbar
|
|
129
|
+
if (this.appToolbarDisplay) {
|
|
130
|
+
this.updateToolbar(config);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
updateSidebar(config) {
|
|
134
|
+
this.appSidebarDefaultClass = this.layout.getProp('app.sidebar.default.class', config);
|
|
135
|
+
this.appSidebarDefaultDrawerEnabled = this.layout.getProp('app.sidebar.default.drawer.enabled', config);
|
|
136
|
+
if (this.appSidebarDefaultDrawerEnabled) {
|
|
137
|
+
this.appSidebarDefaultDrawerAttributes = this.layout.getProp('app.sidebar.default.drawer.attributes', config);
|
|
138
|
+
}
|
|
139
|
+
this.appSidebarDefaultStickyEnabled = this.layout.getProp('app.sidebar.default.sticky.enabled', config);
|
|
140
|
+
if (this.appSidebarDefaultStickyEnabled) {
|
|
141
|
+
this.appSidebarDefaultStickyAttributes = this.layout.getProp('app.sidebar.default.sticky.attributes', config);
|
|
142
|
+
}
|
|
143
|
+
setTimeout(() => {
|
|
144
|
+
const sidebarElement = document.getElementById('kt_app_sidebar');
|
|
145
|
+
// sidebar
|
|
146
|
+
if (this.appSidebarDisplay && sidebarElement) {
|
|
147
|
+
const sidebarAttributes = sidebarElement
|
|
148
|
+
.getAttributeNames()
|
|
149
|
+
.filter((t) => t.indexOf('data-') > -1);
|
|
150
|
+
sidebarAttributes.forEach((attr) => sidebarElement.removeAttribute(attr));
|
|
151
|
+
if (this.appSidebarDefaultDrawerEnabled) {
|
|
152
|
+
for (const key in this.appSidebarDefaultDrawerAttributes) {
|
|
153
|
+
if (this.appSidebarDefaultDrawerAttributes.hasOwnProperty(key)) {
|
|
154
|
+
sidebarElement.setAttribute(key, this.appSidebarDefaultDrawerAttributes[key]);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
if (this.appSidebarDefaultStickyEnabled) {
|
|
159
|
+
for (const key in this.appSidebarDefaultStickyAttributes) {
|
|
160
|
+
if (this.appSidebarDefaultStickyAttributes.hasOwnProperty(key)) {
|
|
161
|
+
sidebarElement.setAttribute(key, this.appSidebarDefaultStickyAttributes[key]);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}, 0);
|
|
167
|
+
}
|
|
168
|
+
updateHeader(config) {
|
|
169
|
+
this.appHeaderDefaultStickyEnabled = this.layout.getProp('app.header.default.sticky.enabled', config);
|
|
170
|
+
if (this.appHeaderDefaultStickyEnabled) {
|
|
171
|
+
this.appHeaderDefaultStickyAttributes = this.layout.getProp('app.header.default.sticky.attributes', config);
|
|
172
|
+
}
|
|
173
|
+
this.appHeaderDefaultMinimizeEnabled = this.layout.getProp('app.header.default.minimize.enabled', config);
|
|
174
|
+
if (this.appHeaderDefaultMinimizeEnabled) {
|
|
175
|
+
this.appHeaderDefaultMinimizeAttributes = this.layout.getProp('app.header.default.minimize.attributes', config);
|
|
176
|
+
}
|
|
177
|
+
setTimeout(() => {
|
|
178
|
+
const headerElement = document.getElementById('kt_app_header');
|
|
179
|
+
// header
|
|
180
|
+
if (this.appHeaderDisplay && headerElement) {
|
|
181
|
+
const headerAttributes = headerElement
|
|
182
|
+
.getAttributeNames()
|
|
183
|
+
.filter((t) => t.indexOf('data-') > -1);
|
|
184
|
+
headerAttributes.forEach((attr) => headerElement.removeAttribute(attr));
|
|
185
|
+
if (this.appHeaderDefaultStickyEnabled) {
|
|
186
|
+
for (const key in this.appHeaderDefaultStickyAttributes) {
|
|
187
|
+
if (this.appHeaderDefaultStickyAttributes.hasOwnProperty(key)) {
|
|
188
|
+
headerElement.setAttribute(key, this.appHeaderDefaultStickyAttributes[key]);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
if (this.appHeaderDefaultMinimizeEnabled) {
|
|
193
|
+
for (const key in this.appHeaderDefaultMinimizeAttributes) {
|
|
194
|
+
if (this.appHeaderDefaultMinimizeAttributes.hasOwnProperty(key)) {
|
|
195
|
+
headerElement.setAttribute(key, this.appHeaderDefaultMinimizeAttributes[key]);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}, 0);
|
|
201
|
+
}
|
|
202
|
+
updateFooter(config) {
|
|
203
|
+
this.appFooterCSSClass = this.layout.getProp('app.footer.class', config);
|
|
204
|
+
this.appFooterContainer = this.layout.getProp('app.footer.container', config);
|
|
205
|
+
this.appFooterContainerCSSClass = this.layout.getProp('app.footer.containerClass', config);
|
|
206
|
+
if (this.appFooterContainer === 'fixed') {
|
|
207
|
+
this.appFooterContainerCSSClass += ' container-xxl';
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
if (this.appFooterContainer === 'fluid') {
|
|
211
|
+
this.appFooterContainerCSSClass += ' container-fluid';
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
this.appFooterFixedDesktop = this.layout.getProp('app.footer.fixed.desktop', config);
|
|
215
|
+
if (this.appFooterFixedDesktop) {
|
|
216
|
+
document.body.setAttribute('data-kt-app-footer-fixed', 'true');
|
|
217
|
+
}
|
|
218
|
+
this.appFooterFixedMobile = this.layout.getProp('app.footer.fixed.mobile');
|
|
219
|
+
if (this.appFooterFixedMobile) {
|
|
220
|
+
document.body.setAttribute('data-kt-app-footer-fixed-mobile', 'true');
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
updateToolbar(config) {
|
|
224
|
+
this.appToolbarLayout = this.layout.getProp('app.toolbar.layout', config);
|
|
225
|
+
this.appToolbarSwapEnabled = this.layout.getProp('app.toolbar.swap.enabled', config);
|
|
226
|
+
if (this.appToolbarSwapEnabled) {
|
|
227
|
+
this.appToolbarSwapAttributes = this.layout.getProp('app.toolbar.swap.attributes', config);
|
|
228
|
+
}
|
|
229
|
+
this.appToolbarStickyEnabled = this.layout.getProp('app.toolbar.sticky.enabled', config);
|
|
230
|
+
if (this.appToolbarStickyEnabled) {
|
|
231
|
+
this.appToolbarStickyAttributes = this.layout.getProp('app.toolbar.sticky.attributes', config);
|
|
232
|
+
}
|
|
233
|
+
this.appToolbarCSSClass =
|
|
234
|
+
this.layout.getProp('app.toolbar.class', config) || '';
|
|
235
|
+
this.appToolbarMinimizeEnabled = this.layout.getProp('app.toolbar.minimize.enabled', config);
|
|
236
|
+
if (this.appToolbarMinimizeEnabled) {
|
|
237
|
+
this.appToolbarMinimizeAttributes = this.layout.getProp('app.toolbar.minimize.attributes', config);
|
|
238
|
+
this.appToolbarCSSClass += ' app-toolbar-minimize';
|
|
239
|
+
}
|
|
240
|
+
setTimeout(() => {
|
|
241
|
+
const toolbarElement = document.getElementById('kt_app_toolbar');
|
|
242
|
+
// toolbar
|
|
243
|
+
if (this.appToolbarDisplay && toolbarElement) {
|
|
244
|
+
const toolbarAttributes = toolbarElement
|
|
245
|
+
.getAttributeNames()
|
|
246
|
+
.filter((t) => t.indexOf('data-') > -1);
|
|
247
|
+
toolbarAttributes.forEach((attr) => toolbarElement.removeAttribute(attr));
|
|
248
|
+
if (this.appToolbarSwapEnabled) {
|
|
249
|
+
for (const key in this.appToolbarSwapAttributes) {
|
|
250
|
+
if (this.appToolbarSwapAttributes.hasOwnProperty(key)) {
|
|
251
|
+
toolbarElement.setAttribute(key, this.appToolbarSwapAttributes[key]);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
if (this.appToolbarStickyEnabled) {
|
|
256
|
+
for (const key in this.appToolbarStickyAttributes) {
|
|
257
|
+
if (this.appToolbarStickyAttributes.hasOwnProperty(key)) {
|
|
258
|
+
toolbarElement.setAttribute(key, this.appToolbarStickyAttributes[key]);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
if (this.appToolbarMinimizeEnabled) {
|
|
263
|
+
for (const key in this.appToolbarMinimizeAttributes) {
|
|
264
|
+
if (this.appToolbarMinimizeAttributes.hasOwnProperty(key)) {
|
|
265
|
+
toolbarElement.setAttribute(key, this.appToolbarMinimizeAttributes[key]);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
}, 0);
|
|
271
|
+
}
|
|
272
|
+
ngOnDestroy() {
|
|
273
|
+
this.unsubscribe.forEach((sb) => sb.unsubscribe());
|
|
274
|
+
}
|
|
275
|
+
previousScroll = 0;
|
|
276
|
+
// appHeaderDisplay = true; // Initially visible
|
|
277
|
+
isToolbarFixed = false;
|
|
278
|
+
onScroll() {
|
|
279
|
+
const currentScroll = window.scrollY;
|
|
280
|
+
if (currentScroll > this.previousScroll && currentScroll > 100) {
|
|
281
|
+
// Hide header on scroll down
|
|
282
|
+
this.appHeaderDisplay = false;
|
|
283
|
+
this.isToolbarFixed = true; // Fix toolbar
|
|
284
|
+
}
|
|
285
|
+
else {
|
|
286
|
+
// Show header on scroll up
|
|
287
|
+
this.appHeaderDisplay = true;
|
|
288
|
+
this.isToolbarFixed = currentScroll > 100; // Keep toolbar fixed if scrolled beyond 100px
|
|
289
|
+
}
|
|
290
|
+
this.previousScroll = currentScroll;
|
|
291
|
+
}
|
|
292
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LayoutComponent, deps: [{ token: i1.LayoutInitService }, { token: i1.LayoutService }, { token: i2.Router }, { token: i2.ActivatedRoute }, { token: i3.AuthService }, { token: i4.ToastService }, { token: i1.GlobalStateService }], target: i0.ɵɵFactoryTarget.Component });
|
|
293
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: LayoutComponent, selector: "lib-layout", host: { listeners: { "window:scroll": "onScroll()" } }, viewQueries: [{ propertyName: "ktSidebar", first: true, predicate: ["ktSidebar"], descendants: true, static: true }, { propertyName: "ktAside", first: true, predicate: ["ktAside"], descendants: true, static: true }, { propertyName: "ktHeaderMobile", first: true, predicate: ["ktHeaderMobile"], descendants: true, static: true }, { propertyName: "ktHeader", first: true, predicate: ["ktHeader"], descendants: true, static: true }], ngImport: i0, template: "<!--begin::App-->\r\n<div class=\"d-flex flex-column flex-root app-root\" id=\"kt_app_root\">\r\n <!--begin::Page-->\r\n <div class=\"app-page flex-column flex-column-fluid\" id=\"kt_app_page\">\r\n <ng-container *ngIf=\"appHeaderDisplay\">\r\n <!--begin::Header-->\r\n <lib-header [ngClass]=\"appHeaderDefaultClass\" id=\"kt_app_header\" class=\"app-header\" data-kt-sticky=\"true\" data-kt-sticky-activate=\"{default: true, lg: true}\" data-kt-sticky-name=\"app-header-minimize\" data-kt-sticky-offset=\"{default: '200px', lg: '0'}\" data-kt-sticky-animation=\"false\">\r\n </lib-header>\r\n <!--end::Header-->\r\n </ng-container>\r\n\r\n <!--begin::Wrapper-->\r\n <div class=\"app-wrapper flex-column flex-row-fluid\" id=\"kt_app_wrapper\">\r\n\r\n <ng-container *ngIf=\"appSidebarDisplay\">\r\n <!--begin::sidebar-->\r\n <lib-sidebar #ktSidebar id=\"kt_app_sidebar\" class=\"app-sidebar flex-column\" [ngClass]=\"appSidebarDefaultClass\">\r\n </lib-sidebar>\r\n <!--end::sidebar-->\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"appSidebarPanelDisplay\">\r\n <!-- TODO: app sidebar panel -->\r\n </ng-container>\r\n <!--begin::Main-->\r\n <div class=\"app-main content flex-column flex-row-fluid\" id=\"kt_app_main\">\r\n <!--begin::Content wrapper-->\r\n <ng-container *ngIf=\"appToolbarDisplay\">\r\n <lib-toolbar [ngClass]=\"{'fixed-toolbar': isToolbarFixed}\" class=\"app-toolbar\" [ngClass]=\"appToolbarCSSClass\" id=\"kt_app_toolbar\"\r\n [appToolbarLayout]=\"appToolbarLayout\"></lib-toolbar>\r\n </ng-container>\r\n <div class=\"d-flex flex-column flex-column-fluid mt-10\">\r\n \r\n <lib-content id=\" kt_app_content\" class=\"app-content mt-15\" [ngClass]=\"contentCSSClasses\"\r\n [contentContainerCSSClass]=\"contentContainerCSSClass\" [appContentContiner]=\"appContentContiner\"\r\n [appContentContainerClass]=\"appContentContainerClass\">\r\n </lib-content>\r\n </div>\r\n <!--end::Content wrapper-->\r\n <ng-container *ngIf=\"appFooterDisplay\">\r\n <lib-footer class=\"app-footer\" [ngClass]=\"appFooterCSSClass\" id=\"kt_app_footer\"\r\n [appFooterContainerCSSClass]=\"appFooterContainerCSSClass\"></lib-footer>\r\n </ng-container>\r\n </div>\r\n <!--end:::Main-->\r\n </div>\r\n <!--end::Wrapper-->\r\n\r\n </div>\r\n <!--end::Page-->\r\n</div>\r\n<!--end::App-->\r\n\r\n<lib-scripts-init></lib-scripts-init>\r\n<ng-container>\r\n <lib-scroll-top id=\"kt_scrolltop\" class=\"scrolltop\" data-kt-scrolltop=\"true\"></lib-scroll-top>\r\n</ng-container>\r\n<!-- begin:: Drawers -->\r\n<!-- <lib-activity-drawer></lib-activity-drawer> -->\r\n<!-- <lib-messenger-drawer></lib-messenger-drawer> -->\r\n<!-- end:: Drawers -->\r\n\r\n<!-- end:: Engage -->\r\n<!-- <lib-engages></lib-engages> -->\r\n<!-- end:: Engage -->\r\n\r\n<!-- begin:: Modals -->\r\n<!-- <lib-main-modal></lib-main-modal> -->\r\n<!-- <lib-invite-users-modal></lib-invite-users-modal> -->\r\n<!-- <lib-upgrade-plan-modal></lib-upgrade-plan-modal> -->\r\n<!-- end:: Modals -->\r\n", styles: [":host{height:100%;margin:0}:host .flex-root{height:100%}.page-loaded app-layout{opacity:1;transition:opacity 1s ease-in-out}.fixed-toolbar{position:fixed;top:0;width:100%;background:#fff;z-index:1000;box-shadow:0 4px 6px #0000001a}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.HeaderComponent, selector: "lib-header" }, { kind: "component", type: i7.ContentComponent, selector: "lib-content", inputs: ["contentContainerCSSClass", "appContentContiner", "appContentContainerClass"] }, { kind: "component", type: i8.FooterComponent, selector: "lib-footer", inputs: ["appFooterContainerCSSClass"] }, { kind: "component", type: i9.ScriptsInitComponent, selector: "lib-scripts-init" }, { kind: "component", type: i10.ToolbarComponent, selector: "lib-toolbar", inputs: ["currentLayoutType", "appToolbarLayout"] }, { kind: "component", type: i11.SidebarComponent, selector: "lib-sidebar" }, { kind: "component", type: i12.LayoutScrollTopComponent, selector: "lib-scroll-top" }] });
|
|
294
|
+
}
|
|
295
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LayoutComponent, decorators: [{
|
|
296
|
+
type: Component,
|
|
297
|
+
args: [{ selector: 'lib-layout', template: "<!--begin::App-->\r\n<div class=\"d-flex flex-column flex-root app-root\" id=\"kt_app_root\">\r\n <!--begin::Page-->\r\n <div class=\"app-page flex-column flex-column-fluid\" id=\"kt_app_page\">\r\n <ng-container *ngIf=\"appHeaderDisplay\">\r\n <!--begin::Header-->\r\n <lib-header [ngClass]=\"appHeaderDefaultClass\" id=\"kt_app_header\" class=\"app-header\" data-kt-sticky=\"true\" data-kt-sticky-activate=\"{default: true, lg: true}\" data-kt-sticky-name=\"app-header-minimize\" data-kt-sticky-offset=\"{default: '200px', lg: '0'}\" data-kt-sticky-animation=\"false\">\r\n </lib-header>\r\n <!--end::Header-->\r\n </ng-container>\r\n\r\n <!--begin::Wrapper-->\r\n <div class=\"app-wrapper flex-column flex-row-fluid\" id=\"kt_app_wrapper\">\r\n\r\n <ng-container *ngIf=\"appSidebarDisplay\">\r\n <!--begin::sidebar-->\r\n <lib-sidebar #ktSidebar id=\"kt_app_sidebar\" class=\"app-sidebar flex-column\" [ngClass]=\"appSidebarDefaultClass\">\r\n </lib-sidebar>\r\n <!--end::sidebar-->\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"appSidebarPanelDisplay\">\r\n <!-- TODO: app sidebar panel -->\r\n </ng-container>\r\n <!--begin::Main-->\r\n <div class=\"app-main content flex-column flex-row-fluid\" id=\"kt_app_main\">\r\n <!--begin::Content wrapper-->\r\n <ng-container *ngIf=\"appToolbarDisplay\">\r\n <lib-toolbar [ngClass]=\"{'fixed-toolbar': isToolbarFixed}\" class=\"app-toolbar\" [ngClass]=\"appToolbarCSSClass\" id=\"kt_app_toolbar\"\r\n [appToolbarLayout]=\"appToolbarLayout\"></lib-toolbar>\r\n </ng-container>\r\n <div class=\"d-flex flex-column flex-column-fluid mt-10\">\r\n \r\n <lib-content id=\" kt_app_content\" class=\"app-content mt-15\" [ngClass]=\"contentCSSClasses\"\r\n [contentContainerCSSClass]=\"contentContainerCSSClass\" [appContentContiner]=\"appContentContiner\"\r\n [appContentContainerClass]=\"appContentContainerClass\">\r\n </lib-content>\r\n </div>\r\n <!--end::Content wrapper-->\r\n <ng-container *ngIf=\"appFooterDisplay\">\r\n <lib-footer class=\"app-footer\" [ngClass]=\"appFooterCSSClass\" id=\"kt_app_footer\"\r\n [appFooterContainerCSSClass]=\"appFooterContainerCSSClass\"></lib-footer>\r\n </ng-container>\r\n </div>\r\n <!--end:::Main-->\r\n </div>\r\n <!--end::Wrapper-->\r\n\r\n </div>\r\n <!--end::Page-->\r\n</div>\r\n<!--end::App-->\r\n\r\n<lib-scripts-init></lib-scripts-init>\r\n<ng-container>\r\n <lib-scroll-top id=\"kt_scrolltop\" class=\"scrolltop\" data-kt-scrolltop=\"true\"></lib-scroll-top>\r\n</ng-container>\r\n<!-- begin:: Drawers -->\r\n<!-- <lib-activity-drawer></lib-activity-drawer> -->\r\n<!-- <lib-messenger-drawer></lib-messenger-drawer> -->\r\n<!-- end:: Drawers -->\r\n\r\n<!-- end:: Engage -->\r\n<!-- <lib-engages></lib-engages> -->\r\n<!-- end:: Engage -->\r\n\r\n<!-- begin:: Modals -->\r\n<!-- <lib-main-modal></lib-main-modal> -->\r\n<!-- <lib-invite-users-modal></lib-invite-users-modal> -->\r\n<!-- <lib-upgrade-plan-modal></lib-upgrade-plan-modal> -->\r\n<!-- end:: Modals -->\r\n", styles: [":host{height:100%;margin:0}:host .flex-root{height:100%}.page-loaded app-layout{opacity:1;transition:opacity 1s ease-in-out}.fixed-toolbar{position:fixed;top:0;width:100%;background:#fff;z-index:1000;box-shadow:0 4px 6px #0000001a}\n"] }]
|
|
298
|
+
}], ctorParameters: () => [{ type: i1.LayoutInitService }, { type: i1.LayoutService }, { type: i2.Router }, { type: i2.ActivatedRoute }, { type: i3.AuthService }, { type: i4.ToastService }, { type: i1.GlobalStateService }], propDecorators: { ktSidebar: [{
|
|
299
|
+
type: ViewChild,
|
|
300
|
+
args: ['ktSidebar', { static: true }]
|
|
301
|
+
}], ktAside: [{
|
|
302
|
+
type: ViewChild,
|
|
303
|
+
args: ['ktAside', { static: true }]
|
|
304
|
+
}], ktHeaderMobile: [{
|
|
305
|
+
type: ViewChild,
|
|
306
|
+
args: ['ktHeaderMobile', { static: true }]
|
|
307
|
+
}], ktHeader: [{
|
|
308
|
+
type: ViewChild,
|
|
309
|
+
args: ['ktHeader', { static: true }]
|
|
310
|
+
}], onScroll: [{
|
|
311
|
+
type: HostListener,
|
|
312
|
+
args: ['window:scroll', []]
|
|
313
|
+
}] } });
|
|
314
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLWFwcC1zaGFyZWQvc3JjL2xpYi9tb2R1bGVzL2xheW91dC9sYXlvdXQvbGF5b3V0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLWFwcC1zaGFyZWQvc3JjL2xpYi9tb2R1bGVzL2xheW91dC9sYXlvdXQvbGF5b3V0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsU0FBUyxFQUdULFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWtCLGFBQWEsRUFBVSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7Ozs7Ozs7OztBQVl4RSxNQUFNLE9BQU8sZUFBZTtJQXVEaEI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUE1REYsV0FBVyxHQUFtQixFQUFFLENBQUM7SUFFekMsbUJBQW1CO0lBQ25CLE9BQU87SUFDUCx1QkFBdUIsQ0FBUztJQUNoQyxTQUFTO0lBQ1QscUJBQXFCLEdBQVcsRUFBRSxDQUFDO0lBQ25DLGdCQUFnQixDQUFVO0lBQzFCLDZCQUE2QixDQUFVO0lBQ3ZDLGdDQUFnQyxHQUFtQyxFQUFFLENBQUM7SUFDdEUsK0JBQStCLENBQVU7SUFDekMsa0NBQWtDLEdBQW1DLEVBQUUsQ0FBQztJQUN4RSxVQUFVO0lBQ1YsaUJBQWlCLENBQVU7SUFDM0IsZ0JBQWdCLENBQTZEO0lBQzdFLGtCQUFrQixHQUFXLEVBQUUsQ0FBQztJQUNoQyxxQkFBcUIsQ0FBVTtJQUMvQix3QkFBd0IsR0FBbUMsRUFBRSxDQUFDO0lBQzlELHVCQUF1QixDQUFVO0lBQ2pDLDBCQUEwQixHQUFtQyxFQUFFLENBQUM7SUFDaEUseUJBQXlCLENBQVU7SUFDbkMsNEJBQTRCLEdBQW1DLEVBQUUsQ0FBQztJQUVsRSxVQUFVO0lBQ1Ysa0JBQWtCLENBQXFCO0lBQ3ZDLHdCQUF3QixDQUFTO0lBQ2pDLGlCQUFpQixDQUFTO0lBQzFCLHdCQUF3QixDQUFTO0lBQ2pDLFVBQVU7SUFDVixzQkFBc0IsQ0FBUztJQUMvQiw4QkFBOEIsQ0FBVTtJQUN4QyxpQ0FBaUMsR0FBbUMsRUFBRSxDQUFDO0lBQ3ZFLGlCQUFpQixDQUFVO0lBQzNCLDhCQUE4QixDQUFVO0lBQ3hDLGlDQUFpQyxHQUFtQyxFQUFFLENBQUM7SUFDN0IsU0FBUyxDQUFhO0lBQ2hFLGlCQUFpQjtJQUNqQixzQkFBc0IsQ0FBVTtJQUNoQyxTQUFTO0lBQ1QsZ0JBQWdCLENBQVU7SUFDMUIsaUJBQWlCLEdBQVcsRUFBRSxDQUFDO0lBQy9CLGtCQUFrQixHQUFXLEVBQUUsQ0FBQztJQUNoQywwQkFBMEIsR0FBVyxFQUFFLENBQUM7SUFDeEMscUJBQXFCLENBQVU7SUFDL0Isb0JBQW9CLENBQVU7SUFFOUIsWUFBWTtJQUNaLGdCQUFnQixDQUFVO0lBRWMsT0FBTyxDQUFhO0lBQ2IsY0FBYyxDQUFhO0lBQ2pDLFFBQVEsQ0FBYTtJQUU5RCxZQUNVLFdBQThCLEVBQzlCLE1BQXFCLEVBQ3JCLE1BQWMsRUFDZCxjQUE4QixFQUM5QixXQUF1QixFQUN2QixZQUF5QixFQUN6QixFQUFxQjtRQU5yQixnQkFBVyxHQUFYLFdBQVcsQ0FBbUI7UUFDOUIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNyQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQ3ZCLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBQ3pCLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBRzdCLHFDQUFxQztRQUNyQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNyQyxJQUFJLEtBQUssWUFBWSxhQUFhLEVBQUU7Z0JBQ2xDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUM7Z0JBRXJFLE1BQU0sY0FBYyxHQUNsQixJQUFJLENBQUMsY0FBYyxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU07b0JBQ3JELElBQUksQ0FBQyxNQUFNLENBQUMsaUNBQWlDLEVBQUUsQ0FBQztnQkFFbEQsSUFBSSxpQkFBaUIsS0FBSyxjQUFjLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtvQkFDOUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7b0JBQzFELElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDO2lCQUM5QzthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsUUFBUTtRQUNOLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CO2FBQzNDLFlBQVksRUFBRTthQUNkLFNBQVMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFDTCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQWU7UUFDekIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUN6QyxtQkFBbUIsRUFDbkIsTUFBTSxDQUNJLENBQUM7UUFDYixJQUFJLENBQUMsdUJBQXVCO1lBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUM5QywwQkFBMEIsRUFDMUIsTUFBTSxDQUNHLENBQUM7UUFDWixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQ3pDLG9CQUFvQixFQUNwQixNQUFNLENBQ0ksQ0FBQztRQUNiLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FDekMsb0JBQW9CLEVBQ3BCLE1BQU0sQ0FDSSxDQUFDO1FBQ2IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUMxQyxxQkFBcUIsRUFDckIsTUFBTSxDQUNJLENBQUM7UUFDYixJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQy9DLDJCQUEyQixFQUMzQixNQUFNLENBQ0ksQ0FBQztRQUNiLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FDMUMscUJBQXFCLEVBQ3JCLE1BQU0sQ0FDSSxDQUFDO1FBQ2IsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLHdCQUF3QjtZQUMzQixJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUMzQyx1QkFBdUIsRUFDdkIsTUFBTSxDQUNjLENBQUM7UUFDdkIsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUNqRCw0QkFBNEIsRUFDNUIsTUFBTSxDQUNHLENBQUM7UUFDWixTQUFTO1FBQ1QsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMzQjtRQUNELFVBQVU7UUFDVixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQzVCO1FBQ0QsU0FBUztRQUNULElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3pCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDM0I7UUFDRCxVQUFVO1FBQ1YsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUM1QjtJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsTUFBZTtRQUMzQixJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQy9DLDJCQUEyQixFQUMzQixNQUFNLENBQ0csQ0FBQztRQUVaLElBQUksQ0FBQyw4QkFBOEIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FDdkQsb0NBQW9DLEVBQ3BDLE1BQU0sQ0FDSSxDQUFDO1FBQ2IsSUFBSSxJQUFJLENBQUMsOEJBQThCLEVBQUU7WUFDdkMsSUFBSSxDQUFDLGlDQUFpQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUMxRCx1Q0FBdUMsRUFDdkMsTUFBTSxDQUMyQixDQUFDO1NBQ3JDO1FBRUQsSUFBSSxDQUFDLDhCQUE4QixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUN2RCxvQ0FBb0MsRUFDcEMsTUFBTSxDQUNJLENBQUM7UUFDYixJQUFJLElBQUksQ0FBQyw4QkFBOEIsRUFBRTtZQUN2QyxJQUFJLENBQUMsaUNBQWlDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQzFELHVDQUF1QyxFQUN2QyxNQUFNLENBQzJCLENBQUM7U0FDckM7UUFFRCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ2pFLFVBQVU7WUFDVixJQUFJLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxjQUFjLEVBQUU7Z0JBQzVDLE1BQU0saUJBQWlCLEdBQUcsY0FBYztxQkFDckMsaUJBQWlCLEVBQUU7cUJBQ25CLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUNqQyxjQUFjLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUNyQyxDQUFDO2dCQUVGLElBQUksSUFBSSxDQUFDLDhCQUE4QixFQUFFO29CQUN2QyxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxpQ0FBaUMsRUFBRTt3QkFDeEQsSUFBSSxJQUFJLENBQUMsaUNBQWlDLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFOzRCQUM5RCxjQUFjLENBQUMsWUFBWSxDQUN6QixHQUFHLEVBQ0gsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLEdBQUcsQ0FBQyxDQUM1QyxDQUFDO3lCQUNIO3FCQUNGO2lCQUNGO2dCQUVELElBQUksSUFBSSxDQUFDLDhCQUE4QixFQUFFO29CQUN2QyxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxpQ0FBaUMsRUFBRTt3QkFDeEQsSUFBSSxJQUFJLENBQUMsaUNBQWlDLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFOzRCQUM5RCxjQUFjLENBQUMsWUFBWSxDQUN6QixHQUFHLEVBQ0gsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLEdBQUcsQ0FBQyxDQUM1QyxDQUFDO3lCQUNIO3FCQUNGO2lCQUNGO2FBQ0Y7UUFDSCxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDO0lBRUQsWUFBWSxDQUFDLE1BQWU7UUFDMUIsSUFBSSxDQUFDLDZCQUE2QixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUN0RCxtQ0FBbUMsRUFDbkMsTUFBTSxDQUNJLENBQUM7UUFDYixJQUFJLElBQUksQ0FBQyw2QkFBNkIsRUFBRTtZQUN0QyxJQUFJLENBQUMsZ0NBQWdDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQ3pELHNDQUFzQyxFQUN0QyxNQUFNLENBQzJCLENBQUM7U0FDckM7UUFFRCxJQUFJLENBQUMsK0JBQStCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQ3hELHFDQUFxQyxFQUNyQyxNQUFNLENBQ0ksQ0FBQztRQUNiLElBQUksSUFBSSxDQUFDLCtCQUErQixFQUFFO1lBQ3hDLElBQUksQ0FBQyxrQ0FBa0MsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FDM0Qsd0NBQXdDLEVBQ3hDLE1BQU0sQ0FDMkIsQ0FBQztTQUNyQztRQUVELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQy9ELFNBQVM7WUFDVCxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxhQUFhLEVBQUU7Z0JBQzFDLE1BQU0sZ0JBQWdCLEdBQUcsYUFBYTtxQkFDbkMsaUJBQWlCLEVBQUU7cUJBQ25CLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFFeEUsSUFBSSxJQUFJLENBQUMsNkJBQTZCLEVBQUU7b0JBQ3RDLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLGdDQUFnQyxFQUFFO3dCQUN2RCxJQUFJLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7NEJBQzdELGFBQWEsQ0FBQyxZQUFZLENBQ3hCLEdBQUcsRUFDSCxJQUFJLENBQUMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLENBQzNDLENBQUM7eUJBQ0g7cUJBQ0Y7aUJBQ0Y7Z0JBRUQsSUFBSSxJQUFJLENBQUMsK0JBQStCLEVBQUU7b0JBQ3hDLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLGtDQUFrQyxFQUFFO3dCQUN6RCxJQUFJLElBQUksQ0FBQyxrQ0FBa0MsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQUU7NEJBQy9ELGFBQWEsQ0FBQyxZQUFZLENBQ3hCLEdBQUcsRUFDSCxJQUFJLENBQUMsa0NBQWtDLENBQUMsR0FBRyxDQUFDLENBQzdDLENBQUM7eUJBQ0g7cUJBQ0Y7aUJBQ0Y7YUFDRjtRQUNILENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBZTtRQUMxQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxDQUFXLENBQUM7UUFDbkYsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLHNCQUFzQixFQUFFLE1BQU0sQ0FBVyxDQUFDO1FBQ3hGLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsRUFBRSxNQUFNLENBQVcsQ0FBQztRQUNyRyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxPQUFPLEVBQUU7WUFDdkMsSUFBSSxDQUFDLDBCQUEwQixJQUFJLGdCQUFnQixDQUFDO1NBQ3JEO2FBQU07WUFDTCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxPQUFPLEVBQUU7Z0JBQ3ZDLElBQUksQ0FBQywwQkFBMEIsSUFBSSxrQkFBa0IsQ0FBQzthQUN2RDtTQUNGO1FBRUQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLDBCQUEwQixFQUFFLE1BQU0sQ0FBWSxDQUFDO1FBQ2hHLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQzlCLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLDBCQUEwQixFQUFFLE1BQU0sQ0FBQyxDQUFBO1NBQy9EO1FBRUQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLHlCQUF5QixDQUFZLENBQUM7UUFDdEYsSUFBSSxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDN0IsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsaUNBQWlDLEVBQUUsTUFBTSxDQUFDLENBQUE7U0FDdEU7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQWU7UUFDM0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUN6QyxvQkFBb0IsRUFDcEIsTUFBTSxDQUN1RCxDQUFDO1FBQ2hFLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FDOUMsMEJBQTBCLEVBQzFCLE1BQU0sQ0FDSSxDQUFDO1FBQ2IsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUU7WUFDOUIsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUNqRCw2QkFBNkIsRUFDN0IsTUFBTSxDQUMyQixDQUFDO1NBQ3JDO1FBRUQsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUNoRCw0QkFBNEIsRUFDNUIsTUFBTSxDQUNJLENBQUM7UUFDYixJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtZQUNoQyxJQUFJLENBQUMsMEJBQTBCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQ25ELCtCQUErQixFQUMvQixNQUFNLENBQzJCLENBQUM7U0FDckM7UUFFRCxJQUFJLENBQUMsa0JBQWtCO1lBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFLE1BQU0sQ0FBWSxJQUFJLEVBQUUsQ0FBQztRQUNyRSxJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQ2xELDhCQUE4QixFQUM5QixNQUFNLENBQ0ksQ0FBQztRQUNiLElBQUksSUFBSSxDQUFDLHlCQUF5QixFQUFFO1lBQ2xDLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FDckQsaUNBQWlDLEVBQ2pDLE1BQU0sQ0FDMkIsQ0FBQztZQUNwQyxJQUFJLENBQUMsa0JBQWtCLElBQUksdUJBQXVCLENBQUM7U0FDcEQ7UUFFRCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ2QsTUFBTSxjQUFjLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ2pFLFVBQVU7WUFDVixJQUFJLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxjQUFjLEVBQUU7Z0JBQzVDLE1BQU0saUJBQWlCLEdBQUcsY0FBYztxQkFDckMsaUJBQWlCLEVBQUU7cUJBQ25CLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUNqQyxjQUFjLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUNyQyxDQUFDO2dCQUVGLElBQUksSUFBSSxDQUFDLHFCQUFxQixFQUFFO29CQUM5QixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyx3QkFBd0IsRUFBRTt3QkFDL0MsSUFBSSxJQUFJLENBQUMsd0JBQXdCLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFOzRCQUNyRCxjQUFjLENBQUMsWUFBWSxDQUN6QixHQUFHLEVBQ0gsSUFBSSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxDQUNuQyxDQUFDO3lCQUNIO3FCQUNGO2lCQUNGO2dCQUVELElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFO29CQUNoQyxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQywwQkFBMEIsRUFBRTt3QkFDakQsSUFBSSxJQUFJLENBQUMsMEJBQTBCLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFOzRCQUN2RCxjQUFjLENBQUMsWUFBWSxDQUN6QixHQUFHLEVBQ0gsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxDQUNyQyxDQUFDO3lCQUNIO3FCQUNGO2lCQUNGO2dCQUVELElBQUksSUFBSSxDQUFDLHlCQUF5QixFQUFFO29CQUNsQyxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyw0QkFBNEIsRUFBRTt3QkFDbkQsSUFBSSxJQUFJLENBQUMsNEJBQTRCLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxFQUFFOzRCQUN6RCxjQUFjLENBQUMsWUFBWSxDQUN6QixHQUFHLEVBQ0gsSUFBSSxDQUFDLDRCQUE0QixDQUFDLEdBQUcsQ0FBQyxDQUN2QyxDQUFDO3lCQUNIO3FCQUNGO2lCQUNGO2FBQ0Y7UUFDSCxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDUixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBQ0QsY0FBYyxHQUFHLENBQUMsQ0FBQztJQUNuQixnREFBZ0Q7SUFDaEQsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUV2QixRQUFRO1FBQ04sTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUVyQyxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYyxJQUFJLGFBQWEsR0FBRyxHQUFHLEVBQUU7WUFDOUQsNkJBQTZCO1lBQzdCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7WUFDOUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsQ0FBQyxjQUFjO1NBQzNDO2FBQU07WUFDTCwyQkFBMkI7WUFDM0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztZQUM3QixJQUFJLENBQUMsY0FBYyxHQUFHLGFBQWEsR0FBRyxHQUFHLENBQUMsQ0FBQyw4Q0FBOEM7U0FDMUY7UUFFRCxJQUFJLENBQUMsY0FBYyxHQUFHLGFBQWEsQ0FBQztJQUN0QyxDQUFDO3dHQW5aVSxlQUFlOzRGQUFmLGVBQWUseWhCQ3BCNUIsK3BHQXVFQTs7NEZEbkRhLGVBQWU7a0JBTDNCLFNBQVM7K0JBQ0UsWUFBWTswUEF3Q29CLFNBQVM7c0JBQWxELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFjQSxPQUFPO3NCQUE5QyxTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ1MsY0FBYztzQkFBNUQsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0osUUFBUTtzQkFBaEQsU0FBUzt1QkFBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQWlWdkMsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLGVBQWUsRUFBRSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBFbGVtZW50UmVmLFxyXG4gIE9uRGVzdHJveSxcclxuICBIb3N0TGlzdGVuZXIsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlLCBJTGF5b3V0LCBMYXlvdXRUeXBlIH0gZnJvbSAndGFuZ28tYXBwLXVpLWdsb2JhbCc7XHJcbmltcG9ydCB7IExheW91dEluaXRTZXJ2aWNlLCBMYXlvdXRTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLWdsb2JhbCc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdG9hc3Quc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1sYXlvdXQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9sYXlvdXQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2xheW91dC5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTGF5b3V0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgdW5zdWJzY3JpYmU6IFN1YnNjcmlwdGlvbltdID0gW107XHJcblxyXG4gIC8vIFB1YmxpYyB2YXJpYWJsZXNcclxuICAvLyBwYWdlXHJcbiAgcGFnZUNvbnRhaW5lckNTU0NsYXNzZXM6IHN0cmluZztcclxuICAvLyBoZWFkZXJcclxuICBhcHBIZWFkZXJEZWZhdWx0Q2xhc3M6IHN0cmluZyA9ICcnO1xyXG4gIGFwcEhlYWRlckRpc3BsYXk6IGJvb2xlYW47XHJcbiAgYXBwSGVhZGVyRGVmYXVsdFN0aWNreUVuYWJsZWQ6IGJvb2xlYW47XHJcbiAgYXBwSGVhZGVyRGVmYXVsdFN0aWNreUF0dHJpYnV0ZXM6IHsgW2F0dHJOYW1lOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xyXG4gIGFwcEhlYWRlckRlZmF1bHRNaW5pbWl6ZUVuYWJsZWQ6IGJvb2xlYW47XHJcbiAgYXBwSGVhZGVyRGVmYXVsdE1pbmltaXplQXR0cmlidXRlczogeyBbYXR0ck5hbWU6IHN0cmluZ106IHN0cmluZyB9ID0ge307XHJcbiAgLy8gdG9vbGJhclxyXG4gIGFwcFRvb2xiYXJEaXNwbGF5OiBib29sZWFuO1xyXG4gIGFwcFRvb2xiYXJMYXlvdXQ6ICdjbGFzc2ljJyB8ICdhY2NvdW50aW5nJyB8ICdleHRlbmRlZCcgfCAncmVwb3J0cycgfCAnc2Fhcyc7XHJcbiAgYXBwVG9vbGJhckNTU0NsYXNzOiBzdHJpbmcgPSAnJztcclxuICBhcHBUb29sYmFyU3dhcEVuYWJsZWQ6IGJvb2xlYW47XHJcbiAgYXBwVG9vbGJhclN3YXBBdHRyaWJ1dGVzOiB7IFthdHRyTmFtZTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcclxuICBhcHBUb29sYmFyU3RpY2t5RW5hYmxlZDogYm9vbGVhbjtcclxuICBhcHBUb29sYmFyU3RpY2t5QXR0cmlidXRlczogeyBbYXR0ck5hbWU6IHN0cmluZ106IHN0cmluZyB9ID0ge307XHJcbiAgYXBwVG9vbGJhck1pbmltaXplRW5hYmxlZDogYm9vbGVhbjtcclxuICBhcHBUb29sYmFyTWluaW1pemVBdHRyaWJ1dGVzOiB7IFthdHRyTmFtZTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcclxuXHJcbiAgLy8gY29udGVudFxyXG4gIGFwcENvbnRlbnRDb250aW5lcj86ICdmaXhlZCcgfCAnZmx1aWQnO1xyXG4gIGFwcENvbnRlbnRDb250YWluZXJDbGFzczogc3RyaW5nO1xyXG4gIGNvbnRlbnRDU1NDbGFzc2VzOiBzdHJpbmc7XHJcbiAgY29udGVudENvbnRhaW5lckNTU0NsYXNzOiBzdHJpbmc7XHJcbiAgLy8gc2lkZWJhclxyXG4gIGFwcFNpZGViYXJEZWZhdWx0Q2xhc3M6IHN0cmluZztcclxuICBhcHBTaWRlYmFyRGVmYXVsdERyYXdlckVuYWJsZWQ6IGJvb2xlYW47XHJcbiAgYXBwU2lkZWJhckRlZmF1bHREcmF3ZXJBdHRyaWJ1dGVzOiB7IFthdHRyTmFtZTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcclxuICBhcHBTaWRlYmFyRGlzcGxheTogYm9vbGVhbjtcclxuICBhcHBTaWRlYmFyRGVmYXVsdFN0aWNreUVuYWJsZWQ6IGJvb2xlYW47XHJcbiAgYXBwU2lkZWJhckRlZmF1bHRTdGlja3lBdHRyaWJ1dGVzOiB7IFthdHRyTmFtZTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcclxuICBAVmlld0NoaWxkKCdrdFNpZGViYXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBrdFNpZGViYXI6IEVsZW1lbnRSZWY7XHJcbiAgLy8vIHNpZGViYXIgcGFuZWxcclxuICBhcHBTaWRlYmFyUGFuZWxEaXNwbGF5OiBib29sZWFuO1xyXG4gIC8vIGZvb3RlclxyXG4gIGFwcEZvb3RlckRpc3BsYXk6IGJvb2xlYW47XHJcbiAgYXBwRm9vdGVyQ1NTQ2xhc3M6IHN0cmluZyA9ICcnO1xyXG4gIGFwcEZvb3RlckNvbnRhaW5lcjogc3RyaW5nID0gJyc7XHJcbiAgYXBwRm9vdGVyQ29udGFpbmVyQ1NTQ2xhc3M6IHN0cmluZyA9ICcnO1xyXG4gIGFwcEZvb3RlckZpeGVkRGVza3RvcDogYm9vbGVhbjtcclxuICBhcHBGb290ZXJGaXhlZE1vYmlsZTogYm9vbGVhbjtcclxuXHJcbiAgLy8gc2Nyb2xsdG9wXHJcbiAgc2Nyb2xsdG9wRGlzcGxheTogYm9vbGVhbjtcclxuXHJcbiAgQFZpZXdDaGlsZCgna3RBc2lkZScsIHsgc3RhdGljOiB0cnVlIH0pIGt0QXNpZGU6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgna3RIZWFkZXJNb2JpbGUnLCB7IHN0YXRpYzogdHJ1ZSB9KSBrdEhlYWRlck1vYmlsZTogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdrdEhlYWRlcicsIHsgc3RhdGljOiB0cnVlIH0pIGt0SGVhZGVyOiBFbGVtZW50UmVmO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgaW5pdFNlcnZpY2U6IExheW91dEluaXRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBsYXlvdXQ6IExheW91dFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOkF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0b2FzdFNlcnZpY2U6VG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBnczpHbG9iYWxTdGF0ZVNlcnZpY2VcclxuICApIHtcclxuICAgIFxyXG4gICAgLy8gZGVmaW5lIGxheW91dCB0eXBlIGFuZCBsb2FkIGxheW91dFxyXG4gICAgdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcclxuICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRMYXlvdXRUeXBlID0gdGhpcy5sYXlvdXQuY3VycmVudExheW91dFR5cGVTdWJqZWN0LnZhbHVlO1xyXG5cclxuICAgICAgICBjb25zdCBuZXh0TGF5b3V0VHlwZTogTGF5b3V0VHlwZSA9XHJcbiAgICAgICAgICB0aGlzLmFjdGl2YXRlZFJvdXRlPy5maXJzdENoaWxkPy5zbmFwc2hvdC5kYXRhLmxheW91dCB8fFxyXG4gICAgICAgICAgdGhpcy5sYXlvdXQuZ2V0QmFzZUxheW91dFR5cGVGcm9tTG9jYWxTdG9yYWdlKCk7XHJcblxyXG4gICAgICAgIGlmIChjdXJyZW50TGF5b3V0VHlwZSAhPT0gbmV4dExheW91dFR5cGUgfHwgIWN1cnJlbnRMYXlvdXRUeXBlKSB7XHJcbiAgICAgICAgICB0aGlzLmxheW91dC5jdXJyZW50TGF5b3V0VHlwZVN1YmplY3QubmV4dChuZXh0TGF5b3V0VHlwZSk7XHJcbiAgICAgICAgICB0aGlzLmluaXRTZXJ2aWNlLnJlSW5pdFByb3BzKG5leHRMYXlvdXRUeXBlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBjb25zdCBzdWJzY3IgPSB0aGlzLmxheW91dC5sYXlvdXRDb25maWdTdWJqZWN0XHJcbiAgICAgIC5hc09ic2VydmFibGUoKVxyXG4gICAgICAuc3Vic2NyaWJlKChjb25maWcpID0+IHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVByb3BzKGNvbmZpZyk7XHJcbiAgICAgIH0pO1xyXG4gICAgdGhpcy51bnN1YnNjcmliZS5wdXNoKHN1YnNjcik7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVQcm9wcyhjb25maWc6IElMYXlvdXQpIHtcclxuICAgIHRoaXMuc2Nyb2xsdG9wRGlzcGxheSA9IHRoaXMubGF5b3V0LmdldFByb3AoXHJcbiAgICAgICdzY3JvbGx0b3AuZGlzcGxheScsXHJcbiAgICAgIGNvbmZpZ1xyXG4gICAgKSBhcyBib29sZWFuO1xyXG4gICAgdGhpcy5wYWdlQ29udGFpbmVyQ1NTQ2xhc3NlcyA9XHJcbiAgICAgIHRoaXMubGF5b3V0LmdldFN0cmluZ0NTU0NsYXNzZXMoJ3BhZ2VDb250YWluZXInKTtcclxuICAgIHRoaXMuYXBwSGVhZGVyRGVmYXVsdENsYXNzID0gdGhpcy5sYXlvdXQuZ2V0UHJvcChcclxuICAgICAgJ2FwcC5oZWFkZXIuZGVmYXVsdC5jbGFzcycsXHJcbiAgICAgIGNvbmZpZ1xyXG4gICAgKSBhcyBzdHJpbmc7XHJcbiAgICB0aGlzLmFwcEhlYWRlckRpc3BsYXkgPSB0aGlzLmxheW91dC5nZXRQcm9wKFxyXG4gICAgICAnYXBwLmhlYWRlci5kaXNwbGF5JyxcclxuICAgICAgY29uZmlnXHJcbiAgICApIGFzIGJvb2xlYW47XHJcbiAgICB0aGlzLmFwcEZvb3RlckRpc3BsYXkgPSB0aGlzLmxheW91dC5nZXRQcm9wKFxyXG4gICAgICAnYXBwLmZvb3Rlci5kaXNwbGF5JyxcclxuICAgICAgY29uZmlnXHJcbiAgICApIGFzIGJvb2xlYW47XHJcbiAgICB0aGlzLmFwcFNpZGViYXJEaXNwbGF5ID0gdGhpcy5sYXlvdXQuZ2V0UHJvcChcclxuICAgICAgJ2FwcC5zaWRlYmFyLmRpc3BsYXknLFxyXG4gICAgICBjb25maWdcclxuICAgICkgYXMgYm9vbGVhbjtcclxuICAgIHRoaXMuYXBwU2lkZWJhclBhbmVsRGlzcGxheSA9IHRoaXMubGF5b3V0LmdldFByb3AoXHJcbiAgICAgICdhcHAuc2lkZWJhci1wYW5lbC5kaXNwbGF5JyxcclxuICAgICAgY29uZmlnXHJcbiAgICApIGFzIGJvb2xlYW47XHJcbiAgICB0aGlzLmFwcFRvb2xiYXJEaXNwbGF5ID0gdGhpcy5sYXlvdXQuZ2V0UHJvcChcclxuICAgICAgJ2FwcC50b29sYmFyLmRpc3BsYXknLFxyXG4gICAgICBjb25maWdcclxuICAgICkgYXMgYm9vbGVhbjtcclxuICAgIHRoaXMuY29udGVudENTU0NsYXNzZXMgPSB0aGlzLmxheW91dC5nZXRTdHJpbmdDU1NDbGFzc2VzKCdjb250ZW50Jyk7XHJcbiAgICB0aGlzLmNvbnRlbnRDb250YWluZXJDU1NDbGFzcyA9XHJcbiAgICAgIHRoaXMubGF5b3V0LmdldFN0cmluZ0NTU0NsYXNzZXMoJ2NvbnRlbnRDb250YWluZXInKTtcclxuICAgIHRoaXMuYXBwQ29udGVudENvbnRpbmVyID0gdGhpcy5sYXlvdXQuZ2V0UHJvcChcclxuICAgICAgJ2FwcC5jb250ZW50LmNvbnRhaW5lcicsXHJcbiAgICAgIGNvbmZpZ1xyXG4gICAgKSBhcyAnZml4ZWQnIHwgJ2ZsdWlkJztcclxuICAgIHRoaXMuYXBwQ29udGVudENvbnRhaW5lckNsYXNzID0gdGhpcy5sYXlvdXQuZ2V0UHJvcChcclxuICAgICAgJ2FwcC5jb250ZW50LmNvbnRhaW5lckNsYXNzJyxcclxuICAgICAgY29uZmlnXHJcbiAgICApIGFzIHN0cmluZztcclxuICAgIC8vIGZvb3RlclxyXG4gICAgaWYgKHRoaXMuYXBwRm9vdGVyRGlzcGxheSkge1xyXG4gICAgICB0aGlzLnVwZGF0ZUZvb3Rlcihjb25maWcpO1xyXG4gICAgfVxyXG4gICAgLy8gc2lkZWJhclxyXG4gICAgaWYgKHRoaXMuYXBwU2lkZWJhckRpc3BsYXkpIHtcclxuICAgICAgdGhpcy51cGRhdGVTaWRlYmFyKGNvbmZpZyk7XHJcbiAgICB9XHJcbiAgICAvLyBoZWFkZXJcclxuICAgIGlmICh0aGlzLmFwcEhlYWRlckRpc3BsYXkpIHtcclxuICAgICAgdGhpcy51cGRhdGVIZWFkZXIoY29uZmlnKTtcclxuICAgIH1cclxuICAgIC8vIHRvb2xiYXJcclxuICAgIGlmICh0aGlzLmFwcFRvb2xiYXJEaXNwbGF5KSB7XHJcbiAgICAgIHRoaXMudXBkYXRlVG9vbGJhcihjb25maWcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlU2lkZWJhcihjb25maWc6IElMYXlvdXQpIHtcclxuICAgIHRoaXMuYXBwU2lkZWJhckRlZmF1bHRDbGFzcyA9IHRoaXMubGF5b3V0LmdldFByb3AoXHJcbiAgICAgICdhcHAuc2lkZWJhci5kZWZhdWx0LmNsYXNzJyxcclxuICAgICAgY29uZmlnXHJcbiAgICApIGFzIHN0cmluZztcclxuXHJcbiAgICB0aGlzLmFwcFNpZGViYXJEZWZhdWx0RHJhd2VyRW5hYmxlZCA9IHRoaXMubGF5b3V0LmdldFByb3AoXHJcbiAgICAgICdhcHAuc2lkZWJhci5kZWZhdWx0LmRyYXdlci5lbmFibGVkJyxcclxuICAgICAgY29uZmlnXHJcbiAgICApIGFzIGJvb2xlYW47XHJcbiAgICBpZiAodGhpcy5hcHBTaWRlYmFyRGVmYXVsdERyYXdlckVuYWJsZWQpIHtcclxuICAgICAgdGhpcy5hcHBTaWRlYmFyRGVmYXVsdERyYXdlckF0dHJpYnV0ZXMgPSB0aGlzLmxheW91dC5nZXRQcm9wKFxyXG4gICAgICAgICdhcHAuc2lkZWJhci5kZWZhdWx0LmRyYXdlci5hdHRyaWJ1dGVzJyxcclxuICAgICAgICBjb25maWdcclxuICAgICAgKSBhcyB7IFthdHRyTmFtZTogc3RyaW5nXTogc3RyaW5nIH07XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hcHBTaWRlYmFyRGVmYXVsdFN0aWNreUVuYWJsZWQgPSB0aGlzLmxheW91dC5nZXRQcm9wKFxyXG4gICAgICAnYXBwLnNpZGViYXIuZGVmYXVsdC5zdGlja3kuZW5hYmxlZCcsXHJcbiAgICAgIGNvbmZpZ1xyXG4gICAgKSBhcyBib29sZWFuO1xyXG4gICAgaWYgKHRoaXMuYXBwU2lkZWJhckRlZmF1bHRTdGlja3lFbmFibGVkKSB7XHJcbiAgICAgIHRoaXMuYXBwU2lkZWJhckRlZmF1bHRTdGlja3lBdHRyaWJ1dGVzID0gdGhpcy5sYXlvdXQuZ2V0UHJvcChcclxuICAgICAgICAnYXBwLnNpZGViYXIuZGVmYXVsdC5zdGlja3kuYXR0cmlidXRlcycsXHJcbiAgICAgICAgY29uZmlnXHJcbiAgICAgICkgYXMgeyBbYXR0ck5hbWU6IHN0cmluZ106IHN0cmluZyB9O1xyXG4gICAgfVxyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBjb25zdCBzaWRlYmFyRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdrdF9hcHBfc2lkZWJhcicpO1xyXG4gICAgICAvLyBzaWRlYmFyXHJcbiAgICAgIGlmICh0aGlzLmFwcFNpZGViYXJEaXNwbGF5ICYmIHNpZGViYXJFbGVtZW50KSB7XHJcbiAgICAgICAgY29uc3Qgc2lkZWJhckF0dHJpYnV0ZXMgPSBzaWRlYmFyRWxlbWVudFxyXG4gICAgICAgICAgLmdldEF0dHJpYnV0ZU5hbWVzKClcclxuICAgICAgICAgIC5maWx0ZXIoKHQpID0+IHQuaW5kZXhPZignZGF0YS0nKSA+IC0xKTtcclxuICAgICAgICBzaWRlYmFyQXR0cmlidXRlcy5mb3JFYWNoKChhdHRyKSA9PlxyXG4gICAgICAgICAgc2lkZWJhckVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGF0dHIpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYXBwU2lkZWJhckRlZmF1bHREcmF3ZXJFbmFibGVkKSB7XHJcbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmFwcFNpZGViYXJEZWZhdWx0RHJhd2VyQXR0cmlidXRlcykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5hcHBTaWRlYmFyRGVmYXVsdERyYXdlckF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICAgIHNpZGViYXJFbGVtZW50LnNldEF0dHJpYnV0ZShcclxuICAgICAgICAgICAgICAgIGtleSxcclxuICAgICAgICAgICAgICAgIHRoaXMuYXBwU2lkZWJhckRlZmF1bHREcmF3ZXJBdHRyaWJ1dGVzW2tleV1cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5hcHBTaWRlYmFyRGVmYXVsdFN0aWNreUVuYWJsZWQpIHtcclxuICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuYXBwU2lkZWJhckRlZmF1bHRTdGlja3lBdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmFwcFNpZGViYXJEZWZhdWx0U3RpY2t5QXR0cmlidXRlcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgICAgc2lkZWJhckVsZW1lbnQuc2V0QXR0cmlidXRlKFxyXG4gICAgICAgICAgICAgICAga2V5LFxyXG4gICAgICAgICAgICAgICAgdGhpcy5hcHBTaWRlYmFyRGVmYXVsdFN0aWNreUF0dHJpYnV0ZXNba2V5XVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sIDApO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlSGVhZGVyKGNvbmZpZzogSUxheW91dCkge1xyXG4gICAgdGhpcy5hcHBIZWFkZXJEZWZhdWx0U3RpY2t5RW5hYmxlZCA9IHRoaXMubGF5b3V0LmdldFByb3AoXHJcbiAgICAgICdhcHAuaGVhZGVyLmRlZmF1bHQuc3RpY2t5LmVuYWJsZWQnLFxyXG4gICAgICBjb25maWdcclxuICAgICkgYXMgYm9vbGVhbjtcclxuICAgIGlmICh0aGlzLmFwcEhlYWRlckRlZmF1bHRTdGlja3lFbmFibGVkKSB7XHJcbiAgICAgIHRoaXMuYXBwSGVhZGVyRGVmYXVsdFN0aWNreUF0dHJpYnV0ZXMgPSB0aGlzLmxheW91dC5nZXRQcm9wKFxyXG4gICAgICAgICdhcHAuaGVhZGVyLmRlZmF1bHQuc3RpY2t5LmF0dHJpYnV0ZXMnLFxyXG4gICAgICAgIGNvbmZpZ1xyXG4gICAgICApIGFzIHsgW2F0dHJOYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFwcEhlYWRlckRlZmF1bHRNaW5pbWl6ZUVuYWJsZWQgPSB0aGlzLmxheW91dC5nZXRQcm9wKFxyXG4gICAgICAnYXBwLmhlYWRlci5kZWZhdWx0Lm1pbmltaXplLmVuYWJsZWQnLFxyXG4gICAgICBjb25maWdcclxuICAgICkgYXMgYm9vbGVhbjtcclxuICAgIGlmICh0aGlzLmFwcEhlYWRlckRlZmF1bHRNaW5pbWl6ZUVuYWJsZWQpIHtcclxuICAgICAgdGhpcy5hcHBIZWFkZXJEZWZhdWx0TWluaW1pemVBdHRyaWJ1dGVzID0gdGhpcy5sYXlvdXQuZ2V0UHJvcChcclxuICAgICAgICAnYXBwLmhlYWRlci5kZWZhdWx0Lm1pbmltaXplLmF0dHJpYnV0ZXMnLFxyXG4gICAgICAgIGNvbmZpZ1xyXG4gICAgICApIGFzIHsgW2F0dHJOYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgY29uc3QgaGVhZGVyRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdrdF9hcHBfaGVhZGVyJyk7XHJcbiAgICAgIC8vIGhlYWRlclxyXG4gICAgICBpZiAodGhpcy5hcHBIZWFkZXJEaXNwbGF5ICYmIGhlYWRlckVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCBoZWFkZXJBdHRyaWJ1dGVzID0gaGVhZGVyRWxlbWVudFxyXG4gICAgICAgICAgLmdldEF0dHJpYnV0ZU5hbWVzKClcclxuICAgICAgICAgIC5maWx0ZXIoKHQpID0+IHQuaW5kZXhPZignZGF0YS0nKSA+IC0xKTtcclxuICAgICAgICBoZWFkZXJBdHRyaWJ1dGVzLmZvckVhY2goKGF0dHIpID0+IGhlYWRlckVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGF0dHIpKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYXBwSGVhZGVyRGVmYXVsdFN0aWNreUVuYWJsZWQpIHtcclxuICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuYXBwSGVhZGVyRGVmYXVsdFN0aWNreUF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYXBwSGVhZGVyRGVmYXVsdFN0aWNreUF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICAgIGhlYWRlckVsZW1lbnQuc2V0QXR0cmlidXRlKFxyXG4gICAgICAgICAgICAgICAga2V5LFxyXG4gICAgICAgICAgICAgICAgdGhpcy5hcHBIZWFkZXJEZWZhdWx0U3RpY2t5QXR0cmlidXRlc1trZXldXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYXBwSGVhZGVyRGVmYXVsdE1pbmltaXplRW5hYmxlZCkge1xyXG4gICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5hcHBIZWFkZXJEZWZhdWx0TWluaW1pemVBdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmFwcEhlYWRlckRlZmF1bHRNaW5pbWl6ZUF0dHJpYnV0ZXMuaGFzT3duUHJvcGVydHkoa2V5KSkge1xyXG4gICAgICAgICAgICAgIGhlYWRlckVsZW1lbnQuc2V0QXR0cmlidXRlKFxyXG4gICAgICAgICAgICAgICAga2V5LFxyXG4gICAgICAgICAgICAgICAgdGhpcy5hcHBIZWFkZXJEZWZhdWx0TWluaW1pemVBdHRyaWJ1dGVzW2tleV1cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9LCAwKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUZvb3Rlcihjb25maWc6IElMYXlvdXQpIHtcclxuICAgIHRoaXMuYXBwRm9vdGVyQ1NTQ2xhc3MgPSB0aGlzLmxheW91dC5nZXRQcm9wKCdhcHAuZm9vdGVyLmNsYXNzJywgY29uZmlnKSBhcyBzdHJpbmc7XHJcbiAgICB0aGlzLmFwcEZvb3RlckNvbnRhaW5lciA9IHRoaXMubGF5b3V0LmdldFByb3AoJ2FwcC5mb290ZXIuY29udGFpbmVyJywgY29uZmlnKSBhcyBzdHJpbmc7XHJcbiAgICB0aGlzLmFwcEZvb3RlckNvbnRhaW5lckNTU0NsYXNzID0gdGhpcy5sYXlvdXQuZ2V0UHJvcCgnYXBwLmZvb3Rlci5jb250YWluZXJDbGFzcycsIGNvbmZpZykgYXMgc3RyaW5nO1xyXG4gICAgaWYgKHRoaXMuYXBwRm9vdGVyQ29udGFpbmVyID09PSAnZml4ZWQnKSB7XHJcbiAgICAgIHRoaXMuYXBwRm9vdGVyQ29udGFpbmVyQ1NTQ2xhc3MgKz0gJyBjb250YWluZXIteHhsJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLmFwcEZvb3RlckNvbnRhaW5lciA9PT0gJ2ZsdWlkJykge1xyXG4gICAgICAgIHRoaXMuYXBwRm9vdGVyQ29udGFpbmVyQ1NTQ2xhc3MgKz0gJyBjb250YWluZXItZmx1aWQnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5hcHBGb290ZXJGaXhlZERlc2t0b3AgPSB0aGlzLmxheW91dC5nZXRQcm9wKCdhcHAuZm9vdGVyLmZpeGVkLmRlc2t0b3AnLCBjb25maWcpIGFzIGJvb2xlYW47XHJcbiAgICBpZiAodGhpcy5hcHBGb290ZXJGaXhlZERlc2t0b3ApIHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5zZXRBdHRyaWJ1dGUoJ2RhdGEta3QtYXBwLWZvb3Rlci1maXhlZCcsICd0cnVlJylcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFwcEZvb3RlckZpeGVkTW9iaWxlID0gdGhpcy5sYXlvdXQuZ2V0UHJvcCgnYXBwLmZvb3Rlci5maXhlZC5tb2JpbGUnKSBhcyBib29sZWFuO1xyXG4gICAgaWYgKHRoaXMuYXBwRm9vdGVyRml4ZWRNb2JpbGUpIHtcclxuICAgICAgZG9jdW1lbnQuYm9keS5zZXRBdHRyaWJ1dGUoJ2RhdGEta3QtYXBwLWZvb3Rlci1maXhlZC1tb2JpbGUnLCAndHJ1ZScpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVUb29sYmFyKGNvbmZpZzogSUxheW91dCkge1xyXG4gICAgdGhpcy5hcHBUb29sYmFyTGF5b3V0ID0gdGhpcy5sYXlvdXQuZ2V0UHJvcChcclxuICAgICAgJ2FwcC50b29sYmFyLmxheW91dCcsXHJcbiAgICAgIGNvbmZpZ1xyXG4gICAgKSBhcyAnY2xhc3NpYycgfCAnYWNjb3VudGluZycgfCAnZXh0ZW5kZWQnIHwgJ3JlcG9ydHMnIHwgJ3NhYXMnO1xyXG4gICAgdGhpcy5hcHBUb29sYmFyU3dhcEVuYWJsZWQgPSB0aGlzLmxheW91dC5nZXRQcm9wKFxyXG4gICAgICAnYXBwLnRvb2xiYXIuc3dhcC5lbmFibGVkJyxcclxuICAgICAgY29uZmlnXHJcbiAgICApIGFzIGJvb2xlYW47XHJcbiAgICBpZiAodGhpcy5hcHBUb29sYmFyU3dhcEVuYWJsZWQpIHtcclxuICAgICAgdGhpcy5hcHBUb29sYmFyU3dhcEF0dHJpYnV0ZXMgPSB0aGlzLmxheW91dC5nZXRQcm9wKFxyXG4gICAgICAgICdhcHAudG9vbGJhci5zd2FwLmF0dHJpYnV0ZXMnLFxyXG4gICAgICAgIGNvbmZpZ1xyXG4gICAgICApIGFzIHsgW2F0dHJOYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFwcFRvb2xiYXJTdGlja3lFbmFibGVkID0gdGhpcy5sYXlvdXQuZ2V0UHJvcChcclxuICAgICAgJ2FwcC50b29sYmFyLnN0aWNreS5lbmFibGVkJyxcclxuICAgICAgY29uZmlnXHJcbiAgICApIGFzIGJvb2xlYW47XHJcbiAgICBpZiAodGhpcy5hcHBUb29sYmFyU3RpY2t5RW5hYmxlZCkge1xyXG4gICAgICB0aGlzLmFwcFRvb2xiYXJTdGlja3lBdHRyaWJ1dGVzID0gdGhpcy5sYXlvdXQuZ2V0UHJvcChcclxuICAgICAgICAnYXBwLnRvb2xiYXIuc3RpY2t5LmF0dHJpYnV0ZXMnLFxyXG4gICAgICAgIGNvbmZpZ1xyXG4gICAgICApIGFzIHsgW2F0dHJOYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFwcFRvb2xiYXJDU1NDbGFzcyA9XHJcbiAgICAgICh0aGlzLmxheW91dC5nZXRQcm9wKCdhcHAudG9vbGJhci5jbGFzcycsIGNvbmZpZykgYXMgc3RyaW5nKSB8fCAnJztcclxuICAgIHRoaXMuYXBwVG9vbGJhck1pbmltaXplRW5hYmxlZCA9IHRoaXMubGF5b3V0LmdldFByb3AoXHJcbiAgICAgICdhcHAudG9vbGJhci5taW5pbWl6ZS5lbmFibGVkJyxcclxuICAgICAgY29uZmlnXHJcbiAgICApIGFzIGJvb2xlYW47XHJcbiAgICBpZiAodGhpcy5hcHBUb29sYmFyTWluaW1pemVFbmFibGVkKSB7XHJcbiAgICAgIHRoaXMuYXBwVG9vbGJhck1pbmltaXplQXR0cmlidXRlcyA9IHRoaXMubGF5b3V0LmdldFByb3AoXHJcbiAgICAgICAgJ2FwcC50b29sYmFyLm1pbmltaXplLmF0dHJpYnV0ZXMnLFxyXG4gICAgICAgIGNvbmZpZ1xyXG4gICAgICApIGFzIHsgW2F0dHJOYW1lOiBzdHJpbmddOiBzdHJpbmcgfTtcclxuICAgICAgdGhpcy5hcHBUb29sYmFyQ1NTQ2xhc3MgKz0gJyBhcHAtdG9vbGJhci1taW5pbWl6ZSc7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHRvb2xiYXJFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2t0X2FwcF90b29sYmFyJyk7XHJcbiAgICAgIC8vIHRvb2xiYXJcclxuICAgICAgaWYgKHRoaXMuYXBwVG9vbGJhckRpc3BsYXkgJiYgdG9vbGJhckVsZW1lbnQpIHtcclxuICAgICAgICBjb25zdCB0b29sYmFyQXR0cmlidXRlcyA9IHRvb2xiYXJFbGVtZW50XHJcbiAgICAgICAgICAuZ2V0QXR0cmlidXRlTmFtZXMoKVxyXG4gICAgICAgICAgLmZpbHRlcigodCkgPT4gdC5pbmRleE9mKCdkYXRhLScpID4gLTEpO1xyXG4gICAgICAgIHRvb2xiYXJBdHRyaWJ1dGVzLmZvckVhY2goKGF0dHIpID0+XHJcbiAgICAgICAgICB0b29sYmFyRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0cilcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5hcHBUb29sYmFyU3dhcEVuYWJsZWQpIHtcclxuICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuYXBwVG9vbGJhclN3YXBBdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmFwcFRvb2xiYXJTd2FwQXR0cmlidXRlcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgICAgdG9vbGJhckVsZW1lbnQuc2V0QXR0cmlidXRlKFxyXG4gICAgICAgICAgICAgICAga2V5LFxyXG4gICAgICAgICAgICAgICAgdGhpcy5hcHBUb29sYmFyU3dhcEF0dHJpYnV0ZXNba2V5XVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmFwcFRvb2xiYXJTdGlja3lFbmFibGVkKSB7XHJcbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmFwcFRvb2xiYXJTdGlja3lBdHRyaWJ1dGVzKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmFwcFRvb2xiYXJTdGlja3lBdHRyaWJ1dGVzLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAgICAgICB0b29sYmFyRWxlbWVudC5zZXRBdHRyaWJ1dGUoXHJcbiAgICAgICAgICAgICAgICBrZXksXHJcbiAgICAgICAgICAgICAgICB0aGlzLmFwcFRvb2xiYXJTdGlja3lBdHRyaWJ1dGVzW2tleV1cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5hcHBUb29sYmFyTWluaW1pemVFbmFibGVkKSB7XHJcbiAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmFwcFRvb2xiYXJNaW5pbWl6ZUF0dHJpYnV0ZXMpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuYXBwVG9vbGJhck1pbmltaXplQXR0cmlidXRlcy5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgICAgICAgdG9vbGJhckVsZW1lbnQuc2V0QXR0cmlidXRlKFxyXG4gICAgICAgICAgICAgICAga2V5LFxyXG4gICAgICAgICAgICAgICAgdGhpcy5hcHBUb29sYmFyTWluaW1pemVBdHRyaWJ1dGVzW2tleV1cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9LCAwKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy51bnN1YnNjcmliZS5mb3JFYWNoKChzYikgPT4gc2IudW5zdWJzY3JpYmUoKSk7XHJcbiAgfVxyXG4gIHByZXZpb3VzU2Nyb2xsID0gMDtcclxuICAvLyBhcHBIZWFkZXJEaXNwbGF5ID0gdHJ1ZTsgLy8gSW5pdGlhbGx5IHZpc2libGVcclxuICBpc1Rvb2xiYXJGaXhlZCA9IGZhbHNlO1xyXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpzY3JvbGwnLCBbXSlcclxuICBvblNjcm9sbCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IGN1cnJlbnRTY3JvbGwgPSB3aW5kb3cuc2Nyb2xsWTtcclxuXHJcbiAgICBpZiAoY3VycmVudFNjcm9sbCA+IHRoaXMucHJldmlvdXNTY3JvbGwgJiYgY3VycmVudFNjcm9sbCA+IDEwMCkge1xyXG4gICAgICAvLyBIaWRlIGhlYWRlciBvbiBzY3JvbGwgZG93blxyXG4gICAgICB0aGlzLmFwcEhlYWRlckRpc3BsYXkgPSBmYWxzZTtcclxuICAgICAgdGhpcy5pc1Rvb2xiYXJGaXhlZCA9IHRydWU7IC8vIEZpeCB0b29sYmFyXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBTaG93IGhlYWRlciBvbiBzY3JvbGwgdXBcclxuICAgICAgdGhpcy5hcHBIZWFkZXJEaXNwbGF5ID0gdHJ1ZTtcclxuICAgICAgdGhpcy5pc1Rvb2xiYXJGaXhlZCA9IGN1cnJlbnRTY3JvbGwgPiAxMDA7IC8vIEtlZXAgdG9vbGJhciBmaXhlZCBpZiBzY3JvbGxlZCBiZXlvbmQgMTAwcHhcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnByZXZpb3VzU2Nyb2xsID0gY3VycmVudFNjcm9sbDtcclxuICB9XHJcbn1cclxuIiwiPCEtLWJlZ2luOjpBcHAtLT5cclxuPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBmbGV4LXJvb3QgYXBwLXJvb3RcIiBpZD1cImt0X2FwcF9yb290XCI+XHJcbiAgPCEtLWJlZ2luOjpQYWdlLS0+XHJcbiAgPGRpdiBjbGFzcz1cImFwcC1wYWdlIGZsZXgtY29sdW1uIGZsZXgtY29sdW1uLWZsdWlkXCIgaWQ9XCJrdF9hcHBfcGFnZVwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFwcEhlYWRlckRpc3BsYXlcIj5cclxuICAgICAgPCEtLWJlZ2luOjpIZWFkZXItLT5cclxuICAgICAgPGxpYi1oZWFkZXIgW25nQ2xhc3NdPVwiYXBwSGVhZGVyRGVmYXVsdENsYXNzXCIgaWQ9XCJrdF9hcHBfaGVhZGVyXCIgY2xhc3M9XCJhcHAtaGVhZGVyXCIgZGF0YS1rdC1zdGlja3k9XCJ0cnVlXCIgZGF0YS1rdC1zdGlja3ktYWN0aXZhdGU9XCJ7ZGVmYXVsdDogdHJ1ZSwgbGc6IHRydWV9XCIgZGF0YS1rdC1zdGlja3ktbmFtZT1cImFwcC1oZWFkZXItbWluaW1pemVcIiBkYXRhLWt0LXN0aWNreS1vZmZzZXQ9XCJ7ZGVmYXVsdDogJzIwMHB4JywgbGc6ICcwJ31cIiBkYXRhLWt0LXN0aWNreS1hbmltYXRpb249XCJmYWxzZVwiPlxyXG4gICAgICA8L2xpYi1oZWFkZXI+XHJcbiAgICAgIDwhLS1lbmQ6OkhlYWRlci0tPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgPCEtLWJlZ2luOjpXcmFwcGVyLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYXBwLXdyYXBwZXIgZmxleC1jb2x1bW4gZmxleC1yb3ctZmx1aWRcIiBpZD1cImt0X2FwcF93cmFwcGVyXCI+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXBwU2lkZWJhckRpc3BsYXlcIj5cclxuICAgICAgICA8IS0tYmVnaW46OnNpZGViYXItLT5cclxuICAgICAgICA8bGliLXNpZGViYXIgI2t0U2lkZWJhciBpZD1cImt0X2FwcF9zaWRlYmFyXCIgY2xhc3M9XCJhcHAtc2lkZWJhciBmbGV4LWNvbHVtblwiIFtuZ0NsYXNzXT1cImFwcFNpZGViYXJEZWZhdWx0Q2xhc3NcIj5cclxuICAgICAgICA8L2xpYi1zaWRlYmFyPlxyXG4gICAgICAgIDwhLS1lbmQ6OnNpZGViYXItLT5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXBwU2lkZWJhclBhbmVsRGlzcGxheVwiPlxyXG4gICAgICAgIDwhLS0gVE9ETzogYXBwIHNpZGViYXIgcGFuZWwgLS0+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8IS0tYmVnaW46Ok1haW4tLT5cclxuICAgICAgPGRpdiBjbGFzcz1cImFwcC1tYWluIGNvbnRlbnQgZmxleC1jb2x1bW4gZmxleC1yb3ctZmx1aWRcIiBpZD1cImt0X2FwcF9tYWluXCI+XHJcbiAgICAgICAgPCEtLWJlZ2luOjpDb250ZW50IHdyYXBwZXItLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXBwVG9vbGJhckRpc3BsYXlcIj5cclxuICAgICAgICAgIDxsaWItdG9vbGJhciBbbmdDbGFzc109XCJ7J2ZpeGVkLXRvb2xiYXInOiBpc1Rvb2xiYXJGaXhlZH1cIiAgY2xhc3M9XCJhcHAtdG9vbGJhclwiIFtuZ0NsYXNzXT1cImFwcFRvb2xiYXJDU1NDbGFzc1wiIGlkPVwia3RfYXBwX3Rvb2xiYXJcIlxyXG4gICAgICAgICAgICBbYXBwVG9vbGJhckxheW91dF09XCJhcHBUb29sYmFyTGF5b3V0XCI+PC9saWItdG9vbGJhcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGZsZXgtY29sdW1uLWZsdWlkIG10LTEwXCI+XHJcbiAgICAgICAgXHJcbiAgICAgICAgICA8bGliLWNvbnRlbnQgaWQ9XCIga3RfYXBwX2NvbnRlbnRcIiBjbGFzcz1cImFwcC1jb250ZW50IG10LTE1XCIgW25nQ2xhc3NdPVwiY29udGVudENTU0NsYXNzZXNcIlxyXG4gICAgICAgICAgICBbY29udGVudENvbnRhaW5lckNTU0NsYXNzXT1cImNvbnRlbnRDb250YWluZXJDU1NDbGFzc1wiIFthcHBDb250ZW50Q29udGluZXJdPVwiYXBwQ29udGVudENvbnRpbmVyXCJcclxuICAgICAgICAgICAgW2FwcENvbnRlbnRDb250YWluZXJDbGFzc109XCJhcHBDb250ZW50Q29udGFpbmVyQ2xhc3NcIj5cclxuICAgICAgICAgIDwvbGliLWNvbnRlbnQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLWVuZDo6Q29udGVudCB3cmFwcGVyLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFwcEZvb3RlckRpc3BsYXlcIj5cclxuICAgICAgICAgIDxsaWItZm9vdGVyIGNsYXNzPVwiYXBwLWZvb3RlclwiIFtuZ0NsYXNzXT1cImFwcEZvb3RlckNTU0NsYXNzXCIgaWQ9XCJrdF9hcHBfZm9vdGVyXCJcclxuICAgICAgICAgICAgW2FwcEZvb3RlckNvbnRhaW5lckNTU0NsYXNzXT1cImFwcEZvb3RlckNvbnRhaW5lckNTU0NsYXNzXCI+PC9saWItZm9vdGVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLWVuZDo6Ok1haW4tLT5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLWVuZDo6V3JhcHBlci0tPlxyXG5cclxuICA8L2Rpdj5cclxuICA8IS0tZW5kOjpQYWdlLS0+XHJcbjwvZGl2PlxyXG48IS0tZW5kOjpBcHAtLT5cclxuXHJcbjxsaWItc2NyaXB0cy1pbml0PjwvbGliLXNjcmlwdHMtaW5pdD5cclxuPG5nLWNvbnRhaW5lcj5cclxuICA8bGliLXNjcm9sbC10b3AgaWQ9XCJrdF9zY3JvbGx0b3BcIiBjbGFzcz1cInNjcm9sbHRvcFwiIGRhdGEta3Qtc2Nyb2xsdG9wPVwidHJ1ZVwiPjwvbGliLXNjcm9sbC10b3A+XHJcbjwvbmctY29udGFpbmVyPlxyXG48IS0tIGJlZ2luOjogRHJhd2VycyAtLT5cclxuPCEtLSA8bGliLWFjdGl2aXR5LWRyYXdlcj48L2xpYi1hY3Rpdml0eS1kcmF3ZXI+IC0tPlxyXG48IS0tIDxsaWItbWVzc2VuZ2VyLWRyYXdlcj48L2xpYi1tZXNzZW5nZXItZHJhd2VyPiAtLT5cclxuPCEtLSBlbmQ6OiBEcmF3ZXJzIC0tPlxyXG5cclxuPCEtLSBlbmQ6OiBFbmdhZ2UgLS0+XHJcbjwhLS0gPGxpYi1lbmdhZ2VzPjwvbGliLWVuZ2FnZXM+IC0tPlxyXG48IS0tIGVuZDo6IEVuZ2FnZSAtLT5cclxuXHJcbjwhLS0gYmVnaW46OiBNb2RhbHMgLS0+XHJcbjwhLS0gPGxpYi1tYWluLW1vZGFsPjwvbGliLW1haW4tbW9kYWw+IC0tPlxyXG48IS0tIDxsaWItaW52aXRlLXVzZXJzLW1vZGFsPjwvbGliLWludml0ZS11c2Vycy1tb2RhbD4gLS0+XHJcbjwhLS0gPGxpYi11cGdyYWRlLXBsYW4tbW9kYWw+PC9saWItdXBncmFkZS1wbGFuLW1vZGFsPiAtLT5cclxuPCEtLSBlbmQ6OiBNb2RhbHMgLS0+XHJcbiJdfQ==
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { InlineSVGModule } from 'ng-inline-svg-2';
|
|
4
|
+
import { RouterModule } from '@angular/router';
|
|
5
|
+
import { NgbDropdownModule, NgbProgressbarModule, NgbTooltipModule, } from '@ng-bootstrap/ng-bootstrap';
|
|
6
|
+
import { TranslateModule } from '@ngx-translate/core';
|
|
7
|
+
// import { ExtrasModule } from '../partials/layout/extras/extras.module';
|
|
8
|
+
// import {
|
|
9
|
+
// DrawersModule,
|
|
10
|
+
// DropdownMenusModule,
|
|
11
|
+
// ModalsModule,
|
|
12
|
+
// EngagesModule,
|
|
13
|
+
// } from '../partials';
|
|
14
|
+
// import { EngagesComponent } from '../partials/layout/engages/engages.component';
|
|
15
|
+
// import { ThemeModeModule } from '../partials/layout/theme-mode-switcher/theme-mode.module';
|
|
16
|
+
import { KeeniconComponent } from './keenicon/keenicon.component';
|
|
17
|
+
import { TranslationModule } from '../../i18n';
|
|
18
|
+
import { LayoutComponent } from './layout/layout.component';
|
|
19
|
+
import { HeaderComponent } from './header/header.component';
|
|
20
|
+
import { ContentComponent } from './content/content.component';
|
|
21
|
+
import { FooterComponent } from './footer/footer.component';
|
|
22
|
+
import { ScriptsInitComponent } from './scripts-init/scripts-init.component';
|
|
23
|
+
import { ToolbarComponent } from './toolbar/toolbar.component';
|
|
24
|
+
import { PageTitleComponent } from './header/page-title/page-title.component';
|
|
25
|
+
import { HeaderMenuComponent } from './header/header-menu/header-menu.component';
|
|
26
|
+
import { SidebarComponent } from './sidebar/sidebar.component';
|
|
27
|
+
import { SidebarLogoComponent } from './sidebar/sidebar-logo/sidebar-logo.component';
|
|
28
|
+
import { SidebarMenuComponent } from './sidebar/sidebar-menu/sidebar-menu.component';
|
|
29
|
+
import { SidebarFooterComponent } from './sidebar/sidebar-footer/sidebar-footer.component';
|
|
30
|
+
import { NavbarComponent } from './header/navbar/navbar.component';
|
|
31
|
+
import { AccountingComponent } from './toolbar/accounting/accounting.component';
|
|
32
|
+
import { ClassicComponent } from './toolbar/classic/classic.component';
|
|
33
|
+
import { ExtendedComponent } from './toolbar/extended/extended.component';
|
|
34
|
+
import { ReportsComponent } from './toolbar/reports/reports.component';
|
|
35
|
+
import { SaasComponent } from './toolbar/saas/saas.component';
|
|
36
|
+
import { Routing } from '../../routes/routing';
|
|
37
|
+
import { LayoutScrollTopComponent } from './scroll-top/scroll-top.component';
|
|
38
|
+
import { CommonSharedModule } from '../common/common-shared.module';
|
|
39
|
+
import { FormsModule } from '@angular/forms';
|
|
40
|
+
import { NgxDaterangepickerMd } from 'ngx-daterangepicker-material';
|
|
41
|
+
import { ClientSettingsComponent } from './toolbar/client-settings/client-settings.component';
|
|
42
|
+
import { DatepickerComponent } from './toolbar/datepicker/datepicker.component';
|
|
43
|
+
import { DateSingleSelectComponent } from './toolbar/date-single-select/date-single-select.component';
|
|
44
|
+
import { SingleStoreComponent } from './toolbar/single-store/single-store.component';
|
|
45
|
+
import { NotificationsInnerComponent } from './header/notifications-inner/notifications-inner.component';
|
|
46
|
+
import { CsmAssignConfirmationComponent } from './components/csm-assign-confirmation/csm-assign-confirmation.component';
|
|
47
|
+
import { TrafficHeaderComponent } from './toolbar/traffic-header/traffic-header/traffic-header.component';
|
|
48
|
+
import { TraxHeaderComponent } from './toolbar/trax-header/trax-header.component';
|
|
49
|
+
import { SingleStoredateComponent } from './toolbar/single-storedate/single-storedate.component';
|
|
50
|
+
import { StoresingleComponent } from './toolbar/storesingle/storesingle.component';
|
|
51
|
+
import { TraxWithoutdateComponent } from './toolbar/trax-withoutdate/trax-withoutdate.component';
|
|
52
|
+
import { TrafficNobComponent } from './toolbar/traffic-nob/traffic-nob.component';
|
|
53
|
+
import { MetricsHeaderComponent } from './toolbar/metrics-header/metrics-header.component';
|
|
54
|
+
import { SingleClientstoreDateComponent } from './toolbar/single-clientstore-date/single-clientstore-date.component';
|
|
55
|
+
import { ZoneHeaderComponent } from './toolbar/zone-header/zone-header.component';
|
|
56
|
+
import * as i0 from "@angular/core";
|
|
57
|
+
import * as i1 from "@angular/router";
|
|
58
|
+
import * as i2 from "ngx-daterangepicker-material";
|
|
59
|
+
const routes = [
|
|
60
|
+
{
|
|
61
|
+
path: '',
|
|
62
|
+
component: LayoutComponent,
|
|
63
|
+
children: Routing,
|
|
64
|
+
},
|
|
65
|
+
];
|
|
66
|
+
export class LayoutModule {
|
|
67
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LayoutModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
68
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: LayoutModule, declarations: [LayoutComponent,
|
|
69
|
+
HeaderComponent,
|
|
70
|
+
ContentComponent,
|
|
71
|
+
FooterComponent,
|
|
72
|
+
ScriptsInitComponent,
|
|
73
|
+
ToolbarComponent,
|
|
74
|
+
PageTitleComponent,
|
|
75
|
+
HeaderMenuComponent,
|
|
76
|
+
// EngagesComponent,
|
|
77
|
+
SidebarComponent,
|
|
78
|
+
SidebarLogoComponent,
|
|
79
|
+
SidebarMenuComponent,
|
|
80
|
+
SidebarFooterComponent,
|
|
81
|
+
NavbarComponent,
|
|
82
|
+
AccountingComponent,
|
|
83
|
+
ClassicComponent,
|
|
84
|
+
ExtendedComponent,
|
|
85
|
+
ReportsComponent,
|
|
86
|
+
SaasComponent,
|
|
87
|
+
KeeniconComponent,
|
|
88
|
+
LayoutScrollTopComponent,
|
|
89
|
+
ClientSettingsComponent,
|
|
90
|
+
DatepickerComponent,
|
|
91
|
+
DateSingleSelectComponent,
|
|
92
|
+
SingleStoreComponent,
|
|
93
|
+
NotificationsInnerComponent,
|
|
94
|
+
CsmAssignConfirmationComponent,
|
|
95
|
+
TrafficHeaderComponent,
|
|
96
|
+
TraxHeaderComponent,
|
|
97
|
+
SingleStoredateComponent,
|
|
98
|
+
StoresingleComponent,
|
|
99
|
+
TraxWithoutdateComponent,
|
|
100
|
+
TrafficNobComponent,
|
|
101
|
+
MetricsHeaderComponent,
|
|
102
|
+
SingleClientstoreDateComponent,
|
|
103
|
+
ZoneHeaderComponent], imports: [CommonModule, i1.RouterModule, TranslationModule,
|
|
104
|
+
InlineSVGModule,
|
|
105
|
+
NgbDropdownModule,
|
|
106
|
+
NgbProgressbarModule,
|
|
107
|
+
// ExtrasModule,
|
|
108
|
+
// ModalsModule,
|
|
109
|
+
// DrawersModule,
|
|
110
|
+
// EngagesModule,
|
|
111
|
+
// DropdownMenusModule,
|
|
112
|
+
NgbTooltipModule,
|
|
113
|
+
TranslateModule,
|
|
114
|
+
// ThemeModeModule,
|
|
115
|
+
CommonSharedModule,
|
|
116
|
+
FormsModule, i2.NgxDaterangepickerMd], exports: [RouterModule] });
|
|
117
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LayoutModule, imports: [CommonModule,
|
|
118
|
+
RouterModule.forChild(routes),
|
|
119
|
+
TranslationModule,
|
|
120
|
+
InlineSVGModule,
|
|
121
|
+
NgbDropdownModule,
|
|
122
|
+
NgbProgressbarModule,
|
|
123
|
+
// ExtrasModule,
|
|
124
|
+
// ModalsModule,
|
|
125
|
+
// DrawersModule,
|
|
126
|
+
// EngagesModule,
|
|
127
|
+
// DropdownMenusModule,
|
|
128
|
+
NgbTooltipModule,
|
|
129
|
+
TranslateModule,
|
|
130
|
+
// ThemeModeModule,
|
|
131
|
+
CommonSharedModule,
|
|
132
|
+
FormsModule,
|
|
133
|
+
NgxDaterangepickerMd.forRoot(), RouterModule] });
|
|
134
|
+
}
|
|
135
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LayoutModule, decorators: [{
|
|
136
|
+
type: NgModule,
|
|
137
|
+
args: [{
|
|
138
|
+
declarations: [
|
|
139
|
+
LayoutComponent,
|
|
140
|
+
HeaderComponent,
|
|
141
|
+
ContentComponent,
|
|
142
|
+
FooterComponent,
|
|
143
|
+
ScriptsInitComponent,
|
|
144
|
+
ToolbarComponent,
|
|
145
|
+
PageTitleComponent,
|
|
146
|
+
HeaderMenuComponent,
|
|
147
|
+
// EngagesComponent,
|
|
148
|
+
SidebarComponent,
|
|
149
|
+
SidebarLogoComponent,
|
|
150
|
+
SidebarMenuComponent,
|
|
151
|
+
SidebarFooterComponent,
|
|
152
|
+
NavbarComponent,
|
|
153
|
+
AccountingComponent,
|
|
154
|
+
ClassicComponent,
|
|
155
|
+
ExtendedComponent,
|
|
156
|
+
ReportsComponent,
|
|
157
|
+
SaasComponent,
|
|
158
|
+
KeeniconComponent,
|
|
159
|
+
LayoutScrollTopComponent,
|
|
160
|
+
ClientSettingsComponent,
|
|
161
|
+
DatepickerComponent,
|
|
162
|
+
DateSingleSelectComponent,
|
|
163
|
+
SingleStoreComponent,
|
|
164
|
+
NotificationsInnerComponent,
|
|
165
|
+
CsmAssignConfirmationComponent,
|
|
166
|
+
TrafficHeaderComponent,
|
|
167
|
+
TraxHeaderComponent,
|
|
168
|
+
SingleStoredateComponent,
|
|
169
|
+
StoresingleComponent,
|
|
170
|
+
TraxWithoutdateComponent,
|
|
171
|
+
TrafficNobComponent,
|
|
172
|
+
MetricsHeaderComponent,
|
|
173
|
+
SingleClientstoreDateComponent,
|
|
174
|
+
ZoneHeaderComponent
|
|
175
|
+
],
|
|
176
|
+
imports: [
|
|
177
|
+
CommonModule,
|
|
178
|
+
RouterModule.forChild(routes),
|
|
179
|
+
TranslationModule,
|
|
180
|
+
InlineSVGModule,
|
|
181
|
+
NgbDropdownModule,
|
|
182
|
+
NgbProgressbarModule,
|
|
183
|
+
// ExtrasModule,
|
|
184
|
+
// ModalsModule,
|
|
185
|
+
// DrawersModule,
|
|
186
|
+
// EngagesModule,
|
|
187
|
+
// DropdownMenusModule,
|
|
188
|
+
NgbTooltipModule,
|
|
189
|
+
TranslateModule,
|
|
190
|
+
// ThemeModeModule,
|
|
191
|
+
CommonSharedModule,
|
|
192
|
+
FormsModule,
|
|
193
|
+
NgxDaterangepickerMd.forRoot()
|
|
194
|
+
],
|
|
195
|
+
exports: [RouterModule],
|
|
196
|
+
}]
|
|
197
|
+
}] });
|
|
198
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0Lm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLWFwcC1zaGFyZWQvc3JjL2xpYi9tb2R1bGVzL2xheW91dC9sYXlvdXQubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFVLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixvQkFBb0IsRUFDcEIsZ0JBQWdCLEdBQ2pCLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELDBFQUEwRTtBQUMxRSxXQUFXO0FBQ1gsbUJBQW1CO0FBQ25CLHlCQUF5QjtBQUN6QixrQkFBa0I7QUFDbEIsbUJBQW1CO0FBQ25CLHdCQUF3QjtBQUN4QixtRkFBbUY7QUFDbkYsOEZBQThGO0FBQzlGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUMvQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZ0JB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QkFBZ0I7d0JBQ2hCLG9CQUFvQjt3QkFDcEIsb0JBQW9CO3dCQUNwQixzQkFBc0I7d0JBQ3RCLGVBQWU7d0JBQ2YsbUJBQW1CO3dCQUNuQixnQkFBZ0I7d0JBQ2hCLGlCQUFpQjt3QkFDakIsZ0JBQWdCO3dCQUNoQixhQUFhO3dCQUNiLGlCQUFpQjt3QkFDakIsd0JBQXdCO3dCQUN4Qix1QkFBdUI7d0JBQ3ZCLG1CQUFtQjt3QkFDbkIseUJBQXlCO3dCQUN6QixvQkFBb0I7d0JBQ3BCLDJCQUEyQjt3QkFDM0IsOEJBQThCO3dCQUM5QixzQkFBc0I7d0JBQ3RCLG1CQUFtQjt3QkFDbkIsd0JBQXdCO3dCQUN4QixvQkFBb0I7d0JBQ3BCLHdCQUF3Qjt3QkFDeEIsbUJBQW1CO3dCQUNuQixzQkFBc0I7d0JBQ3RCLDhCQUE4Qjt3QkFDOUIsbUJBQW1CO3FCQUNwQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQzt3QkFDN0IsaUJBQWlCO3dCQUNqQixlQUFlO3dCQUNmLGlCQUFpQjt3QkFDakIsb0JBQW9CO3dCQUNwQixnQkFBZ0I7d0JBQ2hCLGdCQUFnQjt3QkFDaEIsaUJBQWlCO3dCQUNqQixpQkFBaUI7d0JBQ2pCLHVCQUF1Qjt3QkFDdkIsZ0JBQWdCO3dCQUNoQixlQUFlO3dCQUNmLG1CQUFtQjt3QkFDbkIsa0JBQWtCO3dCQUNsQixXQUFXO3dCQUNYLG9CQUFvQixDQUFDLE9BQU8sRUFBRTtxQkFDL0I7b0JBQ0QsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDO2lCQUN4QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IElubGluZVNWR01vZHVsZSB9IGZyb20gJ25nLWlubGluZS1zdmctMic7XHJcbmltcG9ydCB7IFJvdXRlck1vZHVsZSwgUm91dGVzIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtcclxuICBOZ2JEcm9wZG93bk1vZHVsZSxcclxuICBOZ2JQcm9ncmVzc2Jhck1vZHVsZSxcclxuICBOZ2JUb29sdGlwTW9kdWxlLFxyXG59IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbi8vIGltcG9ydCB7IEV4dHJhc01vZHVsZSB9IGZyb20gJy4uL3BhcnRpYWxzL2xheW91dC9leHRyYXMvZXh0cmFzLm1vZHVsZSc7XHJcbi8vIGltcG9ydCB7XHJcbi8vICAgRHJhd2Vyc01vZHVsZSxcclxuLy8gICBEcm9wZG93bk1lbnVzTW9kdWxlLFxyXG4vLyAgIE1vZGFsc01vZHVsZSxcclxuLy8gICBFbmdhZ2VzTW9kdWxlLFxyXG4vLyB9IGZyb20gJy4uL3BhcnRpYWxzJztcclxuLy8gaW1wb3J0IHsgRW5nYWdlc0NvbXBvbmVudCB9IGZyb20gJy4uL3BhcnRpYWxzL2xheW91dC9lbmdhZ2VzL2VuZ2FnZXMuY29tcG9uZW50JztcclxuLy8gaW1wb3J0IHsgVGhlbWVNb2RlTW9kdWxlIH0gZnJvbSAnLi4vcGFydGlhbHMvbGF5b3V0L3RoZW1lLW1vZGUtc3dpdGNoZXIvdGhlbWUtbW9kZS5tb2R1bGUnO1xyXG5pbXBvcnQgeyBLZWVuaWNvbkNvbXBvbmVudCB9IGZyb20gJy4va2Vlbmljb24va2Vlbmljb24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHJhbnNsYXRpb25Nb2R1bGUgfSBmcm9tICcuLi8uLi9pMThuJztcclxuaW1wb3J0IHsgTGF5b3V0Q29tcG9uZW50IH0gZnJvbSAnLi9sYXlvdXQvbGF5b3V0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vaGVhZGVyL2hlYWRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb250ZW50Q29tcG9uZW50IH0gZnJvbSAnLi9jb250ZW50L2NvbnRlbnQuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRm9vdGVyQ29tcG9uZW50IH0gZnJvbSAnLi9mb290ZXIvZm9vdGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNjcmlwdHNJbml0Q29tcG9uZW50IH0gZnJvbSAnLi9zY3JpcHRzLWluaXQvc2NyaXB0cy1pbml0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRvb2xiYXJDb21wb25lbnQgfSBmcm9tICcuL3Rvb2xiYXIvdG9vbGJhci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBQYWdlVGl0bGVDb21wb25lbnQgfSBmcm9tICcuL2hlYWRlci9wYWdlLXRpdGxlL3BhZ2UtdGl0bGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgSGVhZGVyTWVudUNvbXBvbmVudCB9IGZyb20gJy4vaGVhZGVyL2hlYWRlci1tZW51L2hlYWRlci1tZW51LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNpZGViYXJDb21wb25lbnQgfSBmcm9tICcuL3NpZGViYXIvc2lkZWJhci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTaWRlYmFyTG9nb0NvbXBvbmVudCB9IGZyb20gJy4vc2lkZWJhci9zaWRlYmFyLWxvZ28vc2lkZWJhci1sb2dvLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNpZGViYXJNZW51Q29tcG9uZW50IH0gZnJvbSAnLi9zaWRlYmFyL3NpZGViYXItbWVudS9zaWRlYmFyLW1lbnUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2lkZWJhckZvb3RlckNvbXBvbmVudCB9IGZyb20gJy4vc2lkZWJhci9zaWRlYmFyLWZvb3Rlci9zaWRlYmFyLWZvb3Rlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBOYXZiYXJDb21wb25lbnQgfSBmcm9tICcuL2hlYWRlci9uYXZiYXIvbmF2YmFyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFjY291bnRpbmdDb21wb25lbnQgfSBmcm9tICcuL3Rvb2xiYXIvYWNjb3VudGluZy9hY2NvdW50aW5nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENsYXNzaWNDb21wb25lbnQgfSBmcm9tICcuL3Rvb2xiYXIvY2xhc3NpYy9jbGFzc2ljLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEV4dGVuZGVkQ29tcG9uZW50IH0gZnJvbSAnLi90b29sYmFyL2V4dGVuZGVkL2V4dGVuZGVkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFJlcG9ydHNDb21wb25lbnQgfSBmcm9tICcuL3Rvb2xiYXIvcmVwb3J0cy9yZXBvcnRzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNhYXNDb21wb25lbnQgfSBmcm9tICcuL3Rvb2xiYXIvc2Fhcy9zYWFzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFJvdXRpbmcgfSBmcm9tICcuLi8uLi9yb3V0ZXMvcm91dGluZyc7XHJcbmltcG9ydCB7IExheW91dFNjcm9sbFRvcENvbXBvbmVudCB9IGZyb20gJy4vc2Nyb2xsLXRvcC9zY3JvbGwtdG9wLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvbW1vblNoYXJlZE1vZHVsZSB9IGZyb20gJy4uL2NvbW1vbi9jb21tb24tc2hhcmVkLm1vZHVsZSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBOZ3hEYXRlcmFuZ2VwaWNrZXJNZCB9IGZyb20gJ25neC1kYXRlcmFuZ2VwaWNrZXItbWF0ZXJpYWwnO1xyXG5pbXBvcnQgeyBDbGllbnRTZXR0aW5nc0NvbXBvbmVudCB9IGZyb20gJy4vdG9vbGJhci9jbGllbnQtc2V0dGluZ3MvY2xpZW50LXNldHRpbmdzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERhdGVwaWNrZXJDb21wb25lbnQgfSBmcm9tICcuL3Rvb2xiYXIvZGF0ZXBpY2tlci9kYXRlcGlja2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERhdGVTaW5nbGVTZWxlY3RDb21wb25lbnQgfSBmcm9tICcuL3Rvb2xiYXIvZGF0ZS1zaW5nbGUtc2VsZWN0L2RhdGUtc2luZ2xlLXNlbGVjdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTaW5nbGVTdG9yZUNvbXBvbmVudCB9IGZyb20gJy4vdG9vbGJhci9zaW5nbGUtc3RvcmUvc2luZ2xlLXN0b3JlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE5vdGlmaWNhdGlvbnNJbm5lckNvbXBvbmVudCB9IGZyb20gJy4vaGVhZGVyL25vdGlmaWNhdGlvbnMtaW5uZXIvbm90aWZpY2F0aW9ucy1pbm5lci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDc21Bc3NpZ25Db25maXJtYXRpb25Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY3NtLWFzc2lnbi1jb25maXJtYXRpb24vY3NtLWFzc2lnbi1jb25maXJtYXRpb24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHJhZmZpY0hlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vdG9vbGJhci90cmFmZmljLWhlYWRlci90cmFmZmljLWhlYWRlci90cmFmZmljLWhlYWRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUcmF4SGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi90b29sYmFyL3RyYXgtaGVhZGVyL3RyYXgtaGVhZGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFNpbmdsZVN0b3JlZGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vdG9vbGJhci9zaW5nbGUtc3RvcmVkYXRlL3NpbmdsZS1zdG9yZWRhdGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU3RvcmVzaW5nbGVDb21wb25lbnQgfSBmcm9tICcuL3Rvb2xiYXIvc3RvcmVzaW5nbGUvc3RvcmVzaW5nbGUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHJheFdpdGhvdXRkYXRlQ29tcG9uZW50IH0gZnJvbSAnLi90b29sYmFyL3RyYXgtd2l0aG91dGRhdGUvdHJheC13aXRob3V0ZGF0ZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUcmFmZmljTm9iQ29tcG9uZW50IH0gZnJvbSAnLi90b29sYmFyL3RyYWZmaWMtbm9iL3RyYWZmaWMtbm9iLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1ldHJpY3NIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuL3Rvb2xiYXIvbWV0cmljcy1oZWFkZXIvbWV0cmljcy1oZWFkZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2luZ2xlQ2xpZW50c3RvcmVEYXRlQ29tcG9uZW50IH0gZnJvbSAnLi90b29sYmFyL3NpbmdsZS1jbGllbnRzdG9yZS1kYXRlL3NpbmdsZS1jbGllbnRzdG9yZS1kYXRlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFpvbmVIZWFkZXJDb21wb25lbnQgfSBmcm9tICcuL3Rvb2xiYXIvem9uZS1oZWFkZXIvem9uZS1oZWFkZXIuY29tcG9uZW50JztcclxuXHJcbmNvbnN0IHJvdXRlczogUm91dGVzID0gW1xyXG4gIHtcclxuICAgIHBhdGg6ICcnLFxyXG4gICAgY29tcG9uZW50OiBMYXlvdXRDb21wb25lbnQsXHJcbiAgICBjaGlsZHJlbjogUm91dGluZyxcclxuICB9LFxyXG5dO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICBkZWNsYXJhdGlvbnM6IFtcclxuICAgIExheW91dENvbXBvbmVudCxcclxuICAgIEhlYWRlckNvbXBvbmVudCxcclxuICAgIENvbnRlbnRDb21wb25lbnQsXHJcbiAgICBGb290ZXJDb21wb25lbnQsXHJcbiAgICBTY3JpcHRzSW5pdENvbXBvbmVudCxcclxuICAgIFRvb2xiYXJDb21wb25lbnQsXHJcbiAgICBQYWdlVGl0bGVDb21wb25lbnQsXHJcbiAgICBIZWFkZXJNZW51Q29tcG9uZW50LFxyXG4gICAgLy8gRW5nYWdlc0NvbXBvbmVudCxcclxuICAgIFNpZGViYXJDb21wb25lbnQsXHJcbiAgICBTaWRlYmFyTG9nb0NvbXBvbmVudCxcclxuICAgIFNpZGViYXJNZW51Q29tcG9uZW50LFxyXG4gICAgU2lkZWJhckZvb3RlckNvbXBvbmVudCxcclxuICAgIE5hdmJhckNvbXBvbmVudCxcclxuICAgIEFjY291bnRpbmdDb21wb25lbnQsXHJcbiAgICBDbGFzc2ljQ29tcG9uZW50LFxyXG4gICAgRXh0ZW5kZWRDb21wb25lbnQsXHJcbiAgICBSZXBvcnRzQ29tcG9uZW50LFxyXG4gICAgU2Fhc0NvbXBvbmVudCxcclxuICAgIEtlZW5pY29uQ29tcG9uZW50LFxyXG4gICAgTGF5b3V0U2Nyb2xsVG9wQ29tcG9uZW50LFxyXG4gICAgQ2xpZW50U2V0dGluZ3NDb21wb25lbnQsXHJcbiAgICBEYXRlcGlja2VyQ29tcG9uZW50LFxyXG4gICAgRGF0ZVNpbmdsZVNlbGVjdENvbXBvbmVudCxcclxuICAgIFNpbmdsZVN0b3JlQ29tcG9uZW50LFxyXG4gICAgTm90aWZpY2F0aW9uc0lubmVyQ29tcG9uZW50LFxyXG4gICAgQ3NtQXNzaWduQ29uZmlybWF0aW9uQ29tcG9uZW50LFxyXG4gICAgVHJhZmZpY0hlYWRlckNvbXBvbmVudCxcclxuICAgIFRyYXhIZWFkZXJDb21wb25lbnQsXHJcbiAgICBTaW5nbGVTdG9yZWRhdGVDb21wb25lbnQsXHJcbiAgICBTdG9yZXNpbmdsZUNvbXBvbmVudCxcclxuICAgIFRyYXhXaXRob3V0ZGF0ZUNvbXBvbmVudCxcclxuICAgIFRyYWZmaWNOb2JDb21wb25lbnQsXHJcbiAgICBNZXRyaWNzSGVhZGVyQ29tcG9uZW50LFxyXG4gICAgU2luZ2xlQ2xpZW50c3RvcmVEYXRlQ29tcG9uZW50LFxyXG4gICAgWm9uZUhlYWRlckNvbXBvbmVudFxyXG4gIF0sXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgUm91dGVyTW9kdWxlLmZvckNoaWxkKHJvdXRlcyksXHJcbiAgICBUcmFuc2xhdGlvbk1vZHVsZSxcclxuICAgIElubGluZVNWR01vZHVsZSxcclxuICAgIE5nYkRyb3Bkb3duTW9kdWxlLFxyXG4gICAgTmdiUHJvZ3Jlc3NiYXJNb2R1bGUsXHJcbiAgICAvLyBFeHRyYXNNb2R1bGUsXHJcbiAgICAvLyBNb2RhbHNNb2R1bGUsXHJcbiAgICAvLyBEcmF3ZXJzTW9kdWxlLFxyXG4gICAgLy8gRW5nYWdlc01vZHVsZSxcclxuICAgIC8vIERyb3Bkb3duTWVudXNNb2R1bGUsXHJcbiAgICBOZ2JUb29sdGlwTW9kdWxlLFxyXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxyXG4gICAgLy8gVGhlbWVNb2RlTW9kdWxlLFxyXG4gICAgQ29tbW9uU2hhcmVkTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBOZ3hEYXRlcmFuZ2VwaWNrZXJNZC5mb3JSb290KClcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtSb3V0ZXJNb2R1bGVdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTGF5b3V0TW9kdWxlIHt9XHJcbiJdfQ==
|