@sunbird-cb/toc 0.0.8 → 0.0.9
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/_collection/_common/attendance-card/attendance-card.component.mjs +55 -55
- package/esm2022/lib/_collection/_common/attendance-card/attendance-card.module.mjs +126 -126
- package/esm2022/lib/_collection/_common/attendance-helper/attendance-helper.component.mjs +32 -32
- package/esm2022/lib/_collection/_common/attendance-helper/attendance-helper.module.mjs +85 -85
- package/esm2022/lib/_collection/_common/avatar-photo/avatar-photo.component.mjs +100 -100
- package/esm2022/lib/_collection/_common/avatar-photo/avatar-photo.module.mjs +48 -48
- package/esm2022/lib/_collection/_common/certificate-dialog/certificate-dialog.component.mjs +120 -120
- package/esm2022/lib/_collection/_common/certificate-dialog/certificate-dialog.module.mjs +92 -92
- package/esm2022/lib/_collection/_common/certificate-dialog/svg-to-pdf.component.mjs +48 -48
- package/esm2022/lib/_collection/_common/confirm-dialog/confirm-dialog.component.mjs +25 -25
- package/esm2022/lib/_collection/_common/confirm-dialog/confirm-dialog.module.mjs +41 -41
- package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover-card.component.mjs +89 -89
- package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover.module.mjs +42 -42
- package/esm2022/lib/_collection/_common/connection-hover-card/connection-hover.servive.mjs +41 -41
- package/esm2022/lib/_collection/_common/connection-name/connection-name.component.mjs +78 -78
- package/esm2022/lib/_collection/_common/connection-name/connection-name.module.mjs +45 -45
- package/esm2022/lib/_collection/_common/connection-name/profile-v2.model.mjs +2 -2
- package/esm2022/lib/_collection/_common/content-progress/content-progress.component.mjs +70 -70
- package/esm2022/lib/_collection/_common/content-progress/content-progress.module.mjs +28 -28
- package/esm2022/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.component.mjs +187 -187
- package/esm2022/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.module.mjs +86 -86
- package/esm2022/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.mjs +31 -31
- package/esm2022/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.mjs +941 -941
- package/esm2022/lib/_collection/_common/content-toc/app-toc-assignment-viewer/app-toc-assignment-viewer.component.mjs +183 -183
- package/esm2022/lib/_collection/_common/content-toc/app-toc-assignment-viewerV2/app-toc-assignment-viewerV2.component.mjs +327 -327
- package/esm2022/lib/_collection/_common/content-toc/app-toc-batch-assignments/app-toc-batch-assignments.component.mjs +297 -297
- package/esm2022/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.mjs +248 -225
- package/esm2022/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.mjs +1148 -1030
- package/esm2022/lib/_collection/_common/content-toc/app-toc-content-card-v2-skeleton/app-toc-content-card-v2-skeleton.component.mjs +16 -16
- package/esm2022/lib/_collection/_common/content-toc/app-toc-reference-notes/app-toc-reference-notes.component.mjs +43 -43
- package/esm2022/lib/_collection/_common/content-toc/app-toc-session-card-new/app-toc-session-card-new.component.mjs +133 -133
- package/esm2022/lib/_collection/_common/content-toc/app-toc-sessions-new/app-toc-sessions-new.component.mjs +66 -66
- package/esm2022/lib/_collection/_common/content-toc/app-toc-teachers-notes/app-toc-teachers-notes.component.mjs +278 -278
- package/esm2022/lib/_collection/_common/content-toc/content-services/handle-claim.service.mjs +21 -21
- package/esm2022/lib/_collection/_common/content-toc/content-services/review-component-data.service.mjs +21 -21
- package/esm2022/lib/_collection/_common/content-toc/content-toc.component.mjs +847 -847
- package/esm2022/lib/_collection/_common/content-toc/content-toc.module.mjs +219 -219
- package/esm2022/lib/_collection/_common/content-toc/karma-points/karma-points.component.mjs +209 -209
- package/esm2022/lib/_collection/_common/content-toc/karma-points/karma-points.module.mjs +26 -26
- package/esm2022/lib/_collection/_common/content-toc/pipes/replace-nbsp.pipe.mjs +19 -19
- package/esm2022/lib/_collection/_common/content-toc/pipes/truncate.pipe.mjs +23 -23
- package/esm2022/lib/_collection/_common/content-toc/reviews-content/reviews-content.component.mjs +113 -113
- package/esm2022/lib/_collection/_common/content-toc/samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component.mjs +110 -110
- package/esm2022/lib/_collection/_common/display-content-type/display-content-type.component.mjs +26 -26
- package/esm2022/lib/_collection/_common/display-content-type/display-content-type.module.mjs +19 -19
- package/esm2022/lib/_collection/_common/display-content-type-icon/display-content-type-icon.component.mjs +67 -67
- package/esm2022/lib/_collection/_common/display-content-type-icon/display-content-type-icon.module.mjs +28 -28
- package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.component.mjs +77 -77
- package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.model.mjs +2 -2
- package/esm2022/lib/_collection/_common/mark-as-complete/mark-as-complete.module.mjs +61 -61
- package/esm2022/lib/_collection/_common/pipe-content-route/pipe-content-route.module.mjs +20 -20
- package/esm2022/lib/_collection/_common/pipe-content-route/pipe-content-route.pipe.mjs +67 -67
- package/esm2022/lib/_collection/_common/player-brief/player-brief.component.mjs +139 -139
- package/esm2022/lib/_collection/_common/player-brief/player-brief.module.mjs +71 -71
- package/esm2022/lib/_collection/_common/rating-summary/rating-summary.component.mjs +34 -34
- package/esm2022/lib/_collection/_common/rating-summary/rating-summary.module.mjs +56 -56
- package/esm2022/lib/_collection/_common/skeleton-loader/skeleton-loader.component.mjs +25 -25
- package/esm2022/lib/_collection/_common/skeleton-loader/skeleton-loader.module.mjs +37 -37
- package/esm2022/lib/_collection/_common/tips-for-learner/tips-for-learner-card/tips-for-learner-card.component.mjs +32 -32
- package/esm2022/lib/_collection/_common/tips-for-learner/tips-for-learner.module.mjs +30 -30
- package/esm2022/lib/_collection/_common/toc-kpi-values/toc-kpi-values.component.mjs +38 -38
- package/esm2022/lib/_collection/_common/toc-kpi-values/toc-kpi-values.module.mjs +51 -51
- package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.component.mjs +115 -115
- package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.model.mjs +12 -12
- package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.module.mjs +51 -51
- package/esm2022/lib/_collection/_common/user-autocomplete/user-autocomplete.service.mjs +61 -61
- package/esm2022/lib/_collection/_common/user-content-rating/user-content-rating.component.mjs +87 -87
- package/esm2022/lib/_collection/_common/user-content-rating/user-content-rating.module.mjs +36 -36
- package/esm2022/lib/_collection/_common/user-image/user-image.component.mjs +62 -62
- package/esm2022/lib/_collection/_common/user-image/user-image.module.mjs +24 -24
- package/esm2022/lib/_collection/btn-page-back/btn-page-back.component.mjs +192 -192
- package/esm2022/lib/_collection/btn-page-back/btn-page-back.module.mjs +44 -44
- package/esm2022/lib/_collection/btn-page-back/btn-page-back.service.mjs +99 -99
- package/esm2022/lib/_collection/card-rating-comment/card-rating-comment.component.mjs +58 -58
- package/esm2022/lib/_collection/card-rating-comment/card-rating-comment.module.mjs +67 -67
- package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.component.mjs +112 -112
- package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.model.mjs +2 -2
- package/esm2022/lib/_collection/sliders-dynamic/sliders-dynamic.module.mjs +69 -69
- package/esm2022/lib/_collection-api.mjs +57 -57
- package/esm2022/lib/_constants/widget-content.constants.mjs +19 -19
- package/esm2022/lib/_directives/tooltip.directive.mjs +68 -68
- package/esm2022/lib/_models/common.model.mjs +2 -2
- package/esm2022/lib/_models/error.model.mjs +2 -2
- package/esm2022/lib/_pipes/highlight.pipe.mjs +24 -24
- package/esm2022/lib/_services/rating.service.mjs +89 -89
- package/esm2022/lib/_services/samuhik-charcha.service.mjs +29 -29
- package/esm2022/lib/_services/viewer-route-util.mjs +103 -103
- package/esm2022/lib/_services/widget-content.model.mjs +247 -247
- package/esm2022/lib/_services/widget-content.service.mjs +594 -594
- package/esm2022/lib/_shared/translate-loader.factory.mjs +9 -9
- package/esm2022/lib/app-toc-lib.module.mjs +499 -499
- package/esm2022/lib/collection.config.mjs +161 -161
- package/esm2022/lib/components/app-toc-analytics-tiles/app-toc-analytics-tiles.component.mjs +37 -37
- package/esm2022/lib/components/app-toc-banner/app-toc-banner.component.mjs +1436 -1436
- package/esm2022/lib/components/app-toc-cios-home/app-toc-cios-home.component.mjs +475 -475
- package/esm2022/lib/components/app-toc-cios-home/consent-dialog.component.mjs +119 -119
- package/esm2022/lib/components/app-toc-cohorts/app-toc-cohorts.component.mjs +80 -80
- package/esm2022/lib/components/app-toc-content-card/app-toc-content-card.component.mjs +249 -249
- package/esm2022/lib/components/app-toc-dialog-intro-video/app-toc-dialog-intro-video.component.mjs +39 -39
- package/esm2022/lib/components/app-toc-discussion/app-toc-discussion.component.mjs +58 -58
- package/esm2022/lib/components/app-toc-home/app-toc-home.component.mjs +2229 -2229
- package/esm2022/lib/components/app-toc-home-v2/app-toc-home-v2.component.mjs +2907 -2905
- package/esm2022/lib/components/app-toc-overview/app-toc-overview.component.mjs +157 -157
- package/esm2022/lib/components/app-toc-session-card/app-toc-session-card.component.mjs +48 -48
- package/esm2022/lib/components/app-toc-sessions/app-toc-sessions.component.mjs +47 -47
- package/esm2022/lib/components/app-toc-single-page/app-toc-single-page.component.mjs +766 -766
- package/esm2022/lib/components/completion-survey-form/completion-survey-form.component.mjs +243 -243
- package/esm2022/lib/components/create-batch-dialog/create-batch-dialog.component.mjs +116 -116
- package/esm2022/lib/components/enroll-language-dialogue/enroll-language-dialogue.component.mjs +44 -44
- package/esm2022/lib/components/enroll-profile-form/enroll-profile-form.component.mjs +1838 -1838
- package/esm2022/lib/components/enroll-questionnaire/enroll-questionnaire.component.mjs +236 -236
- package/esm2022/lib/components/knowledge-artifact-details/knowledge-artifact-details.component.mjs +213 -213
- package/esm2022/lib/components/non-relevent-feedback-dialog/non-relevent-feedback-dialog.component.mjs +36 -36
- package/esm2022/lib/components/public-survey-form/public-survey-form.component.mjs +256 -256
- package/esm2022/lib/components/survey-form-question/survey-form-question.component.mjs +133 -133
- package/esm2022/lib/components/survey-form-section/survey-form-section.component.mjs +36 -36
- package/esm2022/lib/models/app-toc-analytics.model.mjs +2 -2
- package/esm2022/lib/models/app-toc.model.mjs +38 -38
- package/esm2022/lib/models/auto-complete.model.mjs +2 -2
- package/esm2022/lib/models/card-content.model.mjs +13 -13
- package/esm2022/lib/models/content-strip-with-tabs.model.mjs +2 -2
- package/esm2022/lib/models/discussion-forum.model.mjs +14 -14
- package/esm2022/lib/models/goal.model.mjs +2 -2
- package/esm2022/lib/models/meta-tag.model.mjs +8 -8
- package/esm2022/lib/models/playlist.model.mjs +2 -2
- package/esm2022/lib/models/profile-revamp.model.mjs +2 -2
- package/esm2022/lib/models/rating.model.mjs +2 -2
- package/esm2022/lib/models/user-profile.model.mjs +21 -21
- package/esm2022/lib/resolvers/app-toc-cios-resolver.service.mjs +24 -24
- package/esm2022/lib/resolvers/app-toc-cios-user-enroll-resolver.service.mjs +24 -24
- package/esm2022/lib/resolvers/app-toc-content-read-resolver.service.mjs +60 -60
- package/esm2022/lib/resolvers/app-toc-ext-public-resolver.service.mjs +25 -25
- package/esm2022/lib/resolvers/app-toc-resolver.service.mjs +106 -106
- package/esm2022/lib/resolvers/config-resolver.service.mjs +25 -25
- package/esm2022/lib/resolvers/profile-resolver.service.mjs +25 -25
- package/esm2022/lib/resolvers/restricted-features-resolver.service.mjs +25 -25
- package/esm2022/lib/routes/app-toc-home/app-toc-home.component.mjs +51 -51
- package/esm2022/lib/routes/app-toc-home/app-toc-home.directive.mjs +16 -16
- package/esm2022/lib/routes/app-toc-home/app-toc-home.service.mjs +18 -18
- package/esm2022/lib/services/access-control.service.mjs +56 -56
- package/esm2022/lib/services/action.service.mjs +23 -23
- package/esm2022/lib/services/app-toc-v2.service.mjs +313 -243
- package/esm2022/lib/services/app-toc.service.mjs +1613 -1387
- package/esm2022/lib/services/certificate.service.mjs +69 -69
- package/esm2022/lib/services/discuss-utils.service.mjs +58 -58
- package/esm2022/lib/services/editor.service.mjs +34 -34
- package/esm2022/lib/services/load-check.service.mjs +21 -21
- package/esm2022/lib/services/loader.service.mjs +33 -33
- package/esm2022/lib/services/mobile-apps.service.mjs +67 -67
- package/esm2022/lib/services/netcore.service.mjs +56 -56
- package/esm2022/lib/services/nps-grid.service.mjs +31 -31
- package/esm2022/lib/services/otp.service.mjs +43 -43
- package/esm2022/lib/services/profile-v2.service.mjs +43 -43
- package/esm2022/lib/services/reset-ratings.service.mjs +19 -19
- package/esm2022/lib/services/resource-download-helper.service.mjs +64 -64
- package/esm2022/lib/services/timer.service.mjs +23 -23
- package/esm2022/lib/services/title-tag.service.mjs +71 -71
- package/esm2022/lib/services/user-profile.service.mjs +55 -55
- package/esm2022/lib/services/viewer-data.service.mjs +64 -64
- package/esm2022/lib/services/viewer-util.service.mjs +590 -590
- package/esm2022/lib/share-toc/share-toc/share-toc.component.mjs +291 -291
- package/esm2022/lib/share-toc/share-toc.module.mjs +119 -119
- package/esm2022/public-api.mjs +71 -71
- package/esm2022/sunbird-cb-toc.mjs +4 -4
- package/fesm2022/sunbird-cb-toc.mjs +24776 -24339
- package/fesm2022/sunbird-cb-toc.mjs.map +1 -1
- package/index.d.ts +5 -6
- package/lib/_collection/_common/attendance-card/attendance-card.component.d.ts +16 -17
- package/lib/_collection/_common/attendance-card/attendance-card.module.d.ts +31 -32
- package/lib/_collection/_common/attendance-helper/attendance-helper.component.d.ts +15 -16
- package/lib/_collection/_common/attendance-helper/attendance-helper.module.d.ts +20 -21
- package/lib/_collection/_common/avatar-photo/avatar-photo.component.d.ts +22 -23
- package/lib/_collection/_common/avatar-photo/avatar-photo.module.d.ts +15 -16
- package/lib/_collection/_common/certificate-dialog/certificate-dialog.component.d.ts +22 -23
- package/lib/_collection/_common/certificate-dialog/certificate-dialog.module.d.ts +22 -23
- package/lib/_collection/_common/certificate-dialog/svg-to-pdf.component.d.ts +9 -10
- package/lib/_collection/_common/confirm-dialog/confirm-dialog.component.d.ts +11 -12
- package/lib/_collection/_common/confirm-dialog/confirm-dialog.module.d.ts +12 -13
- package/lib/_collection/_common/connection-hover-card/connection-hover-card.component.d.ts +18 -19
- package/lib/_collection/_common/connection-hover-card/connection-hover.module.d.ts +14 -15
- package/lib/_collection/_common/connection-hover-card/connection-hover.servive.d.ts +11 -12
- package/lib/_collection/_common/connection-name/connection-name.component.d.ts +17 -18
- package/lib/_collection/_common/connection-name/connection-name.module.d.ts +14 -15
- package/lib/_collection/_common/connection-name/profile-v2.model.d.ts +199 -200
- package/lib/_collection/_common/content-progress/content-progress.component.d.ts +16 -17
- package/lib/_collection/_common/content-progress/content-progress.module.d.ts +10 -11
- package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.component.d.ts +38 -39
- package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.module.d.ts +19 -20
- package/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.d.ts +11 -12
- package/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.d.ts +183 -184
- package/lib/_collection/_common/content-toc/app-toc-assignment-viewer/app-toc-assignment-viewer.component.d.ts +41 -42
- package/lib/_collection/_common/content-toc/app-toc-assignment-viewerV2/app-toc-assignment-viewerV2.component.d.ts +54 -55
- package/lib/_collection/_common/content-toc/app-toc-batch-assignments/app-toc-batch-assignments.component.d.ts +47 -48
- package/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.d.ts +49 -49
- package/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.d.ts +171 -155
- package/lib/_collection/_common/content-toc/app-toc-content-card-v2-skeleton/app-toc-content-card-v2-skeleton.component.d.ts +8 -9
- package/lib/_collection/_common/content-toc/app-toc-reference-notes/app-toc-reference-notes.component.d.ts +16 -17
- package/lib/_collection/_common/content-toc/app-toc-session-card-new/app-toc-session-card-new.component.d.ts +40 -41
- package/lib/_collection/_common/content-toc/app-toc-sessions-new/app-toc-sessions-new.component.d.ts +21 -22
- package/lib/_collection/_common/content-toc/app-toc-teachers-notes/app-toc-teachers-notes.component.d.ts +45 -46
- package/lib/_collection/_common/content-toc/content-services/handle-claim.service.d.ts +10 -11
- package/lib/_collection/_common/content-toc/content-services/review-component-data.service.d.ts +10 -11
- package/lib/_collection/_common/content-toc/content-toc.component.d.ts +128 -129
- package/lib/_collection/_common/content-toc/content-toc.module.d.ts +51 -52
- package/lib/_collection/_common/content-toc/karma-points/karma-points.component.d.ts +29 -30
- package/lib/_collection/_common/content-toc/karma-points/karma-points.module.d.ts +9 -10
- package/lib/_collection/_common/content-toc/pipes/replace-nbsp.pipe.d.ts +7 -8
- package/lib/_collection/_common/content-toc/pipes/truncate.pipe.d.ts +7 -8
- package/lib/_collection/_common/content-toc/reviews-content/reviews-content.component.d.ts +28 -29
- package/lib/_collection/_common/content-toc/samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component.d.ts +24 -25
- package/lib/_collection/_common/display-content-type/display-content-type.component.d.ts +14 -15
- package/lib/_collection/_common/display-content-type/display-content-type.module.d.ts +9 -10
- package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.component.d.ts +12 -13
- package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.module.d.ts +10 -11
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.component.d.ts +22 -23
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.model.d.ts +8 -9
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.module.d.ts +18 -19
- package/lib/_collection/_common/pipe-content-route/pipe-content-route.module.d.ts +8 -9
- package/lib/_collection/_common/pipe-content-route/pipe-content-route.pipe.d.ts +15 -16
- package/lib/_collection/_common/player-brief/player-brief.component.d.ts +35 -36
- package/lib/_collection/_common/player-brief/player-brief.module.d.ts +19 -20
- package/lib/_collection/_common/rating-summary/rating-summary.component.d.ts +14 -15
- package/lib/_collection/_common/rating-summary/rating-summary.module.d.ts +13 -14
- package/lib/_collection/_common/skeleton-loader/skeleton-loader.component.d.ts +11 -12
- package/lib/_collection/_common/skeleton-loader/skeleton-loader.module.d.ts +11 -12
- package/lib/_collection/_common/tips-for-learner/tips-for-learner-card/tips-for-learner-card.component.d.ts +15 -16
- package/lib/_collection/_common/tips-for-learner/tips-for-learner.module.d.ts +10 -11
- package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.component.d.ts +16 -17
- package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.module.d.ts +11 -12
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.component.d.ts +34 -35
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.model.d.ts +17 -18
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.module.d.ts +15 -16
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.service.d.ts +15 -16
- package/lib/_collection/_common/user-content-rating/user-content-rating.component.d.ts +21 -22
- package/lib/_collection/_common/user-content-rating/user-content-rating.module.d.ts +12 -13
- package/lib/_collection/_common/user-image/user-image.component.d.ts +21 -22
- package/lib/_collection/_common/user-image/user-image.module.d.ts +9 -10
- package/lib/_collection/btn-page-back/btn-page-back.component.d.ts +47 -48
- package/lib/_collection/btn-page-back/btn-page-back.module.d.ts +14 -15
- package/lib/_collection/btn-page-back/btn-page-back.service.d.ts +22 -23
- package/lib/_collection/card-rating-comment/card-rating-comment.component.d.ts +19 -20
- package/lib/_collection/card-rating-comment/card-rating-comment.module.d.ts +15 -16
- package/lib/_collection/sliders-dynamic/sliders-dynamic.component.d.ts +25 -26
- package/lib/_collection/sliders-dynamic/sliders-dynamic.model.d.ts +21 -22
- package/lib/_collection/sliders-dynamic/sliders-dynamic.module.d.ts +18 -19
- package/lib/_collection-api.d.ts +34 -35
- package/lib/_constants/widget-content.constants.d.ts +7 -8
- package/lib/_directives/tooltip.directive.d.ts +17 -18
- package/lib/_models/common.model.d.ts +3 -4
- package/lib/_models/error.model.d.ts +5 -6
- package/lib/_pipes/highlight.pipe.d.ts +10 -11
- package/lib/_services/rating.service.d.ts +18 -19
- package/lib/_services/samuhik-charcha.service.d.ts +13 -14
- package/lib/_services/viewer-route-util.d.ts +8 -9
- package/lib/_services/widget-content.model.d.ts +515 -516
- package/lib/_services/widget-content.service.d.ts +101 -102
- package/lib/_shared/translate-loader.factory.d.ts +7 -8
- package/lib/app-toc-lib.module.d.ts +88 -89
- package/lib/collection.config.d.ts +159 -160
- package/lib/components/app-toc-analytics-tiles/app-toc-analytics-tiles.component.d.ts +17 -18
- package/lib/components/app-toc-banner/app-toc-banner.component.d.ts +225 -226
- package/lib/components/app-toc-cios-home/app-toc-cios-home.component.d.ts +78 -79
- package/lib/components/app-toc-cios-home/consent-dialog.component.d.ts +22 -23
- package/lib/components/app-toc-cohorts/app-toc-cohorts.component.d.ts +31 -32
- package/lib/components/app-toc-content-card/app-toc-content-card.component.d.ts +47 -48
- package/lib/components/app-toc-dialog-intro-video/app-toc-dialog-intro-video.component.d.ts +14 -15
- package/lib/components/app-toc-discussion/app-toc-discussion.component.d.ts +21 -22
- package/lib/components/app-toc-home/app-toc-home.component.d.ts +314 -315
- package/lib/components/app-toc-home-v2/app-toc-home-v2.component.d.ts +408 -409
- package/lib/components/app-toc-overview/app-toc-overview.component.d.ts +47 -48
- package/lib/components/app-toc-session-card/app-toc-session-card.component.d.ts +22 -23
- package/lib/components/app-toc-sessions/app-toc-sessions.component.d.ts +14 -15
- package/lib/components/app-toc-single-page/app-toc-single-page.component.d.ts +149 -150
- package/lib/components/completion-survey-form/completion-survey-form.component.d.ts +42 -43
- package/lib/components/create-batch-dialog/create-batch-dialog.component.d.ts +27 -28
- package/lib/components/enroll-language-dialogue/enroll-language-dialogue.component.d.ts +15 -16
- package/lib/components/enroll-profile-form/enroll-profile-form.component.d.ts +195 -196
- package/lib/components/enroll-questionnaire/enroll-questionnaire.component.d.ts +44 -45
- package/lib/components/knowledge-artifact-details/knowledge-artifact-details.component.d.ts +54 -55
- package/lib/components/non-relevent-feedback-dialog/non-relevent-feedback-dialog.component.d.ts +18 -19
- package/lib/components/public-survey-form/public-survey-form.component.d.ts +43 -44
- package/lib/components/survey-form-question/survey-form-question.component.d.ts +20 -21
- package/lib/components/survey-form-section/survey-form-section.component.d.ts +13 -14
- package/lib/models/app-toc-analytics.model.d.ts +152 -153
- package/lib/models/app-toc.model.d.ts +84 -85
- package/lib/models/auto-complete.model.d.ts +27 -28
- package/lib/models/card-content.model.d.ts +19 -20
- package/lib/models/content-strip-with-tabs.model.d.ts +44 -45
- package/lib/models/discussion-forum.model.d.ts +40 -41
- package/lib/models/goal.model.d.ts +22 -23
- package/lib/models/meta-tag.model.d.ts +6 -7
- package/lib/models/playlist.model.d.ts +23 -24
- package/lib/models/profile-revamp.model.d.ts +14 -15
- package/lib/models/rating.model.d.ts +17 -18
- package/lib/models/user-profile.model.d.ts +37 -38
- package/lib/resolvers/app-toc-cios-resolver.service.d.ts +12 -13
- package/lib/resolvers/app-toc-cios-user-enroll-resolver.service.d.ts +12 -13
- package/lib/resolvers/app-toc-content-read-resolver.service.d.ts +16 -17
- package/lib/resolvers/app-toc-ext-public-resolver.service.d.ts +12 -13
- package/lib/resolvers/app-toc-resolver.service.d.ts +16 -17
- package/lib/resolvers/config-resolver.service.d.ts +11 -12
- package/lib/resolvers/profile-resolver.service.d.ts +11 -12
- package/lib/resolvers/restricted-features-resolver.service.d.ts +11 -12
- package/lib/routes/app-toc-home/app-toc-home.component.d.ts +19 -20
- package/lib/routes/app-toc-home/app-toc-home.directive.d.ts +8 -9
- package/lib/routes/app-toc-home/app-toc-home.service.d.ts +8 -9
- package/lib/services/access-control.service.d.ts +29 -30
- package/lib/services/action.service.d.ts +9 -10
- package/lib/services/app-toc-v2.service.d.ts +16 -15
- package/lib/services/app-toc.service.d.ts +235 -178
- package/lib/services/certificate.service.d.ts +42 -43
- package/lib/services/discuss-utils.service.d.ts +33 -34
- package/lib/services/editor.service.d.ts +17 -18
- package/lib/services/load-check.service.d.ts +8 -9
- package/lib/services/loader.service.d.ts +16 -17
- package/lib/services/mobile-apps.service.d.ts +38 -39
- package/lib/services/netcore.service.d.ts +33 -34
- package/lib/services/nps-grid.service.d.ts +15 -16
- package/lib/services/otp.service.d.ts +20 -21
- package/lib/services/profile-v2.service.d.ts +20 -21
- package/lib/services/reset-ratings.service.d.ts +8 -9
- package/lib/services/resource-download-helper.service.d.ts +29 -30
- package/lib/services/timer.service.d.ts +9 -10
- package/lib/services/title-tag.service.d.ts +21 -22
- package/lib/services/user-profile.service.d.ts +24 -25
- package/lib/services/viewer-data.service.d.ts +58 -59
- package/lib/services/viewer-util.service.d.ts +76 -77
- package/lib/share-toc/share-toc/share-toc.component.d.ts +56 -57
- package/lib/share-toc/share-toc.module.d.ts +32 -33
- package/package.json +1 -1
- package/public-api.d.ts +56 -57
- package/lib/_collection/_common/attendance-card/attendance-card.component.d.ts.map +0 -1
- package/lib/_collection/_common/attendance-card/attendance-card.module.d.ts.map +0 -1
- package/lib/_collection/_common/attendance-helper/attendance-helper.component.d.ts.map +0 -1
- package/lib/_collection/_common/attendance-helper/attendance-helper.module.d.ts.map +0 -1
- package/lib/_collection/_common/avatar-photo/avatar-photo.component.d.ts.map +0 -1
- package/lib/_collection/_common/avatar-photo/avatar-photo.module.d.ts.map +0 -1
- package/lib/_collection/_common/certificate-dialog/certificate-dialog.component.d.ts.map +0 -1
- package/lib/_collection/_common/certificate-dialog/certificate-dialog.module.d.ts.map +0 -1
- package/lib/_collection/_common/certificate-dialog/svg-to-pdf.component.d.ts.map +0 -1
- package/lib/_collection/_common/confirm-dialog/confirm-dialog.component.d.ts.map +0 -1
- package/lib/_collection/_common/confirm-dialog/confirm-dialog.module.d.ts.map +0 -1
- package/lib/_collection/_common/connection-hover-card/connection-hover-card.component.d.ts.map +0 -1
- package/lib/_collection/_common/connection-hover-card/connection-hover.module.d.ts.map +0 -1
- package/lib/_collection/_common/connection-hover-card/connection-hover.servive.d.ts.map +0 -1
- package/lib/_collection/_common/connection-name/connection-name.component.d.ts.map +0 -1
- package/lib/_collection/_common/connection-name/connection-name.module.d.ts.map +0 -1
- package/lib/_collection/_common/connection-name/profile-v2.model.d.ts.map +0 -1
- package/lib/_collection/_common/content-progress/content-progress.component.d.ts.map +0 -1
- package/lib/_collection/_common/content-progress/content-progress.module.d.ts.map +0 -1
- package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.component.d.ts.map +0 -1
- package/lib/_collection/_common/content-rating-v2-dialog/content-rating-v2-dialog.module.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/ai-tutor-confirm-popup/ai-tutor-confirm-popup.component.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/app-toc-assignment-viewer/app-toc-assignment-viewer.component.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/app-toc-assignment-viewerV2/app-toc-assignment-viewerV2.component.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/app-toc-batch-assignments/app-toc-batch-assignments.component.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/app-toc-content/app-toc-content.component.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/app-toc-content-card-v2-skeleton/app-toc-content-card-v2-skeleton.component.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/app-toc-reference-notes/app-toc-reference-notes.component.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/app-toc-session-card-new/app-toc-session-card-new.component.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/app-toc-sessions-new/app-toc-sessions-new.component.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/app-toc-teachers-notes/app-toc-teachers-notes.component.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/content-services/handle-claim.service.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/content-services/review-component-data.service.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/content-toc.component.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/content-toc.module.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/karma-points/karma-points.component.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/karma-points/karma-points.module.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/pipes/replace-nbsp.pipe.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/pipes/truncate.pipe.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/reviews-content/reviews-content.component.d.ts.map +0 -1
- package/lib/_collection/_common/content-toc/samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component.d.ts.map +0 -1
- package/lib/_collection/_common/display-content-type/display-content-type.component.d.ts.map +0 -1
- package/lib/_collection/_common/display-content-type/display-content-type.module.d.ts.map +0 -1
- package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.component.d.ts.map +0 -1
- package/lib/_collection/_common/display-content-type-icon/display-content-type-icon.module.d.ts.map +0 -1
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.component.d.ts.map +0 -1
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.model.d.ts.map +0 -1
- package/lib/_collection/_common/mark-as-complete/mark-as-complete.module.d.ts.map +0 -1
- package/lib/_collection/_common/pipe-content-route/pipe-content-route.module.d.ts.map +0 -1
- package/lib/_collection/_common/pipe-content-route/pipe-content-route.pipe.d.ts.map +0 -1
- package/lib/_collection/_common/player-brief/player-brief.component.d.ts.map +0 -1
- package/lib/_collection/_common/player-brief/player-brief.module.d.ts.map +0 -1
- package/lib/_collection/_common/rating-summary/rating-summary.component.d.ts.map +0 -1
- package/lib/_collection/_common/rating-summary/rating-summary.module.d.ts.map +0 -1
- package/lib/_collection/_common/skeleton-loader/skeleton-loader.component.d.ts.map +0 -1
- package/lib/_collection/_common/skeleton-loader/skeleton-loader.module.d.ts.map +0 -1
- package/lib/_collection/_common/tips-for-learner/tips-for-learner-card/tips-for-learner-card.component.d.ts.map +0 -1
- package/lib/_collection/_common/tips-for-learner/tips-for-learner.module.d.ts.map +0 -1
- package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.component.d.ts.map +0 -1
- package/lib/_collection/_common/toc-kpi-values/toc-kpi-values.module.d.ts.map +0 -1
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.component.d.ts.map +0 -1
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.model.d.ts.map +0 -1
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.module.d.ts.map +0 -1
- package/lib/_collection/_common/user-autocomplete/user-autocomplete.service.d.ts.map +0 -1
- package/lib/_collection/_common/user-content-rating/user-content-rating.component.d.ts.map +0 -1
- package/lib/_collection/_common/user-content-rating/user-content-rating.module.d.ts.map +0 -1
- package/lib/_collection/_common/user-image/user-image.component.d.ts.map +0 -1
- package/lib/_collection/_common/user-image/user-image.module.d.ts.map +0 -1
- package/lib/_collection/btn-page-back/btn-page-back.component.d.ts.map +0 -1
- package/lib/_collection/btn-page-back/btn-page-back.module.d.ts.map +0 -1
- package/lib/_collection/btn-page-back/btn-page-back.service.d.ts.map +0 -1
- package/lib/_collection/card-rating-comment/card-rating-comment.component.d.ts.map +0 -1
- package/lib/_collection/card-rating-comment/card-rating-comment.module.d.ts.map +0 -1
- package/lib/_collection/sliders-dynamic/sliders-dynamic.component.d.ts.map +0 -1
- package/lib/_collection/sliders-dynamic/sliders-dynamic.model.d.ts.map +0 -1
- package/lib/_collection/sliders-dynamic/sliders-dynamic.module.d.ts.map +0 -1
- package/lib/_collection-api.d.ts.map +0 -1
- package/lib/_constants/widget-content.constants.d.ts.map +0 -1
- package/lib/_directives/tooltip.directive.d.ts.map +0 -1
- package/lib/_models/common.model.d.ts.map +0 -1
- package/lib/_models/error.model.d.ts.map +0 -1
- package/lib/_pipes/highlight.pipe.d.ts.map +0 -1
- package/lib/_services/rating.service.d.ts.map +0 -1
- package/lib/_services/samuhik-charcha.service.d.ts.map +0 -1
- package/lib/_services/viewer-route-util.d.ts.map +0 -1
- package/lib/_services/widget-content.model.d.ts.map +0 -1
- package/lib/_services/widget-content.service.d.ts.map +0 -1
- package/lib/_shared/translate-loader.factory.d.ts.map +0 -1
- package/lib/app-toc-lib.module.d.ts.map +0 -1
- package/lib/collection.config.d.ts.map +0 -1
- package/lib/components/app-toc-analytics-tiles/app-toc-analytics-tiles.component.d.ts.map +0 -1
- package/lib/components/app-toc-banner/app-toc-banner.component.d.ts.map +0 -1
- package/lib/components/app-toc-cios-home/app-toc-cios-home.component.d.ts.map +0 -1
- package/lib/components/app-toc-cios-home/consent-dialog.component.d.ts.map +0 -1
- package/lib/components/app-toc-cohorts/app-toc-cohorts.component.d.ts.map +0 -1
- package/lib/components/app-toc-content-card/app-toc-content-card.component.d.ts.map +0 -1
- package/lib/components/app-toc-dialog-intro-video/app-toc-dialog-intro-video.component.d.ts.map +0 -1
- package/lib/components/app-toc-discussion/app-toc-discussion.component.d.ts.map +0 -1
- package/lib/components/app-toc-home/app-toc-home.component.d.ts.map +0 -1
- package/lib/components/app-toc-home-v2/app-toc-home-v2.component.d.ts.map +0 -1
- package/lib/components/app-toc-overview/app-toc-overview.component.d.ts.map +0 -1
- package/lib/components/app-toc-session-card/app-toc-session-card.component.d.ts.map +0 -1
- package/lib/components/app-toc-sessions/app-toc-sessions.component.d.ts.map +0 -1
- package/lib/components/app-toc-single-page/app-toc-single-page.component.d.ts.map +0 -1
- package/lib/components/completion-survey-form/completion-survey-form.component.d.ts.map +0 -1
- package/lib/components/create-batch-dialog/create-batch-dialog.component.d.ts.map +0 -1
- package/lib/components/enroll-language-dialogue/enroll-language-dialogue.component.d.ts.map +0 -1
- package/lib/components/enroll-profile-form/enroll-profile-form.component.d.ts.map +0 -1
- package/lib/components/enroll-questionnaire/enroll-questionnaire.component.d.ts.map +0 -1
- package/lib/components/knowledge-artifact-details/knowledge-artifact-details.component.d.ts.map +0 -1
- package/lib/components/non-relevent-feedback-dialog/non-relevent-feedback-dialog.component.d.ts.map +0 -1
- package/lib/components/public-survey-form/public-survey-form.component.d.ts.map +0 -1
- package/lib/components/survey-form-question/survey-form-question.component.d.ts.map +0 -1
- package/lib/components/survey-form-section/survey-form-section.component.d.ts.map +0 -1
- package/lib/models/app-toc-analytics.model.d.ts.map +0 -1
- package/lib/models/app-toc.model.d.ts.map +0 -1
- package/lib/models/auto-complete.model.d.ts.map +0 -1
- package/lib/models/card-content.model.d.ts.map +0 -1
- package/lib/models/content-strip-with-tabs.model.d.ts.map +0 -1
- package/lib/models/discussion-forum.model.d.ts.map +0 -1
- package/lib/models/goal.model.d.ts.map +0 -1
- package/lib/models/meta-tag.model.d.ts.map +0 -1
- package/lib/models/playlist.model.d.ts.map +0 -1
- package/lib/models/profile-revamp.model.d.ts.map +0 -1
- package/lib/models/rating.model.d.ts.map +0 -1
- package/lib/models/user-profile.model.d.ts.map +0 -1
- package/lib/resolvers/app-toc-cios-resolver.service.d.ts.map +0 -1
- package/lib/resolvers/app-toc-cios-user-enroll-resolver.service.d.ts.map +0 -1
- package/lib/resolvers/app-toc-content-read-resolver.service.d.ts.map +0 -1
- package/lib/resolvers/app-toc-ext-public-resolver.service.d.ts.map +0 -1
- package/lib/resolvers/app-toc-resolver.service.d.ts.map +0 -1
- package/lib/resolvers/config-resolver.service.d.ts.map +0 -1
- package/lib/resolvers/profile-resolver.service.d.ts.map +0 -1
- package/lib/resolvers/restricted-features-resolver.service.d.ts.map +0 -1
- package/lib/routes/app-toc-home/app-toc-home.component.d.ts.map +0 -1
- package/lib/routes/app-toc-home/app-toc-home.directive.d.ts.map +0 -1
- package/lib/routes/app-toc-home/app-toc-home.service.d.ts.map +0 -1
- package/lib/services/access-control.service.d.ts.map +0 -1
- package/lib/services/action.service.d.ts.map +0 -1
- package/lib/services/app-toc-v2.service.d.ts.map +0 -1
- package/lib/services/app-toc.service.d.ts.map +0 -1
- package/lib/services/certificate.service.d.ts.map +0 -1
- package/lib/services/discuss-utils.service.d.ts.map +0 -1
- package/lib/services/editor.service.d.ts.map +0 -1
- package/lib/services/load-check.service.d.ts.map +0 -1
- package/lib/services/loader.service.d.ts.map +0 -1
- package/lib/services/mobile-apps.service.d.ts.map +0 -1
- package/lib/services/netcore.service.d.ts.map +0 -1
- package/lib/services/nps-grid.service.d.ts.map +0 -1
- package/lib/services/otp.service.d.ts.map +0 -1
- package/lib/services/profile-v2.service.d.ts.map +0 -1
- package/lib/services/reset-ratings.service.d.ts.map +0 -1
- package/lib/services/resource-download-helper.service.d.ts.map +0 -1
- package/lib/services/timer.service.d.ts.map +0 -1
- package/lib/services/title-tag.service.d.ts.map +0 -1
- package/lib/services/user-profile.service.d.ts.map +0 -1
- package/lib/services/viewer-data.service.d.ts.map +0 -1
- package/lib/services/viewer-util.service.d.ts.map +0 -1
- package/lib/share-toc/share-toc/share-toc.component.d.ts.map +0 -1
- package/lib/share-toc/share-toc.module.d.ts.map +0 -1
- package/public-api.d.ts.map +0 -1
- package/sunbird-cb-toc.d.ts.map +0 -1
|
@@ -1,847 +1,847 @@
|
|
|
1
|
-
import { Component, EventEmitter, HostListener, Inject, Input, Output, ViewChild, ViewChildren } from '@angular/core';
|
|
2
|
-
import { NsContent, WsEvents } from '@sunbird-cb/utils-v2';
|
|
3
|
-
import { AiTutorConfirmPopupComponent } from './ai-tutor-confirm-popup/ai-tutor-confirm-popup.component';
|
|
4
|
-
import { MatLegacyDialogConfig as MatDialogConfig } from '@angular/material/legacy-dialog';
|
|
5
|
-
import { viewerRouteGenerator } from '../../../_services/viewer-route-util';
|
|
6
|
-
import { VttFile } from '@polyflix/vtt-parser';
|
|
7
|
-
import { tap } from 'rxjs/operators';
|
|
8
|
-
import { MatTab } from '@angular/material/tabs';
|
|
9
|
-
import * as _ from 'lodash';
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
import * as i1 from "@angular/router";
|
|
12
|
-
import * as i2 from "@sunbird-cb/utils-v2";
|
|
13
|
-
import * as i3 from "../../../services/load-check.service";
|
|
14
|
-
import * as i4 from "@angular/material/legacy-dialog";
|
|
15
|
-
import * as i5 from "../../../services/app-toc.service";
|
|
16
|
-
import * as i6 from "../../../services/action.service";
|
|
17
|
-
import * as i7 from "../../../services/viewer-data.service";
|
|
18
|
-
import * as i8 from "../../../_services/samuhik-charcha.service";
|
|
19
|
-
import * as i9 from "@angular/common";
|
|
20
|
-
import * as i10 from "@angular/material/icon";
|
|
21
|
-
import * as i11 from "@angular/material/tabs";
|
|
22
|
-
import * as i12 from "@sunbird-cb/discussion-v2";
|
|
23
|
-
import * as i13 from "@angular/material/form-field";
|
|
24
|
-
import * as i14 from "@angular/material/select";
|
|
25
|
-
import * as i15 from "@angular/material/core";
|
|
26
|
-
import * as i16 from "./app-toc-about/app-toc-about.component";
|
|
27
|
-
import * as i17 from "./app-toc-content/app-toc-content.component";
|
|
28
|
-
import * as i18 from "./app-toc-teachers-notes/app-toc-teachers-notes.component";
|
|
29
|
-
import * as i19 from "./app-toc-batch-assignments/app-toc-batch-assignments.component";
|
|
30
|
-
import * as i20 from "./samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component";
|
|
31
|
-
import * as i21 from "@ngx-translate/core";
|
|
32
|
-
import * as i22 from "../../../_pipes/highlight.pipe";
|
|
33
|
-
export class ContentTocComponent {
|
|
34
|
-
constructor(route, utilityService, loadCheckService, configService, dialog, tocSvc, actionSVC, router, eventSvc, viewerDataSvc, samuhikCharchaSvc, environment) {
|
|
35
|
-
this.route = route;
|
|
36
|
-
this.utilityService = utilityService;
|
|
37
|
-
this.loadCheckService = loadCheckService;
|
|
38
|
-
this.configService = configService;
|
|
39
|
-
this.dialog = dialog;
|
|
40
|
-
this.tocSvc = tocSvc;
|
|
41
|
-
this.actionSVC = actionSVC;
|
|
42
|
-
this.router = router;
|
|
43
|
-
this.eventSvc = eventSvc;
|
|
44
|
-
this.viewerDataSvc = viewerDataSvc;
|
|
45
|
-
this.samuhikCharchaSvc = samuhikCharchaSvc;
|
|
46
|
-
this.environment = environment;
|
|
47
|
-
this.tabChangeValue = '';
|
|
48
|
-
this.changeTab = false;
|
|
49
|
-
this.routeSubscription = null;
|
|
50
|
-
this.forPreview = window.location.href.includes('/public/') || window.location.href.includes('&preview=true');
|
|
51
|
-
this.contentTabFlag = true;
|
|
52
|
-
this.resumeData = null;
|
|
53
|
-
this.batchData = null;
|
|
54
|
-
this.skeletonLoader = false;
|
|
55
|
-
this.tocStructure = {};
|
|
56
|
-
this.fromViewer = false;
|
|
57
|
-
this.hierarchyMapData = {};
|
|
58
|
-
this.playResourceId = '';
|
|
59
|
-
this.sideNavBarOpened = false;
|
|
60
|
-
this.languageList = [];
|
|
61
|
-
this.lockCertificate = false;
|
|
62
|
-
this.playResumeForAI = new EventEmitter();
|
|
63
|
-
this.enrollUserToAI = new EventEmitter();
|
|
64
|
-
this.trigerCompletionSurveyForm = new EventEmitter();
|
|
65
|
-
this.resumeContent = new EventEmitter();
|
|
66
|
-
this.commentId = '';
|
|
67
|
-
this.sticky = false;
|
|
68
|
-
this.isMobile = false;
|
|
69
|
-
this.selectedTabIndex = 0;
|
|
70
|
-
this.teacherNotesFlag = false;
|
|
71
|
-
this.referenceNotesFlag = false;
|
|
72
|
-
this.viewerPage = window.location.href.includes('/viewer/') ? true : false;
|
|
73
|
-
this.enableAITutorFlag = false;
|
|
74
|
-
this.enableTranscriptionFlag = false;
|
|
75
|
-
this.courseCategory = NsContent.ECourseCategory;
|
|
76
|
-
this.subTitles$ = null;
|
|
77
|
-
this.resourceIdentifier$ = null;
|
|
78
|
-
this.subTitles = [];
|
|
79
|
-
this.keywordToHighlight = '';
|
|
80
|
-
this.highlightCondition = false;
|
|
81
|
-
this.vttLangArr = [];
|
|
82
|
-
this.transcriptionActiveLanguage = 'en';
|
|
83
|
-
this.defaultTranscriptLanguage = 'en';
|
|
84
|
-
this.transriptionLanguageSub = null;
|
|
85
|
-
this.fromAITutor = false;
|
|
86
|
-
this.totalResource = 0;
|
|
87
|
-
this.scormAssessmentCount = 0;
|
|
88
|
-
this.showAITutorPopup = false;
|
|
89
|
-
this.fromAISelectedTabIndex = false;
|
|
90
|
-
this.isMobileForAI = false;
|
|
91
|
-
this.transcriptActiveLanguageText = 'English';
|
|
92
|
-
this.showAssignmentsTab = false;
|
|
93
|
-
this.enableSamuhikCharchaTab = false;
|
|
94
|
-
}
|
|
95
|
-
ngOnInit() {
|
|
96
|
-
if (this.configService.iGOTAIConfig && this.configService.iGOTAIConfig?.aiTutor && this.configService.iGOTAIConfig?.aiTutor?.all) {
|
|
97
|
-
// console.log('this.contentReadData--', this.route.snapshot.data)
|
|
98
|
-
this.enableAITutorFlag = this.onlyscormAssessmentExists(this.route.snapshot?.data?.content?.data?.children, 'mimeType', ['application/vnd.ekstep.html-archive', 'application/vnd.sunbird.questionset', 'application/json', 'text/x-url']);
|
|
99
|
-
// this.enableAITutorFlag = true
|
|
100
|
-
}
|
|
101
|
-
else if (this.configService.iGOTAIConfig && this.configService.iGOTAIConfig?.aiTutor && this.configService.iGOTAIConfig?.aiTutor?.forOrg && this.configService.iGOTAIConfig.aiTutor?.forOrg?.length &&
|
|
102
|
-
this.configService.iGOTAIConfig?.aiTutor?.forOrg.includes(this.configService.userProfile?.rootOrgId)) {
|
|
103
|
-
// console.log('this.contentReadData--', this.route.snapshot.data)
|
|
104
|
-
this.enableAITutorFlag = this.onlyscormAssessmentExists(this.route.snapshot?.data?.content?.data?.children, 'mimeType', ['application/vnd.ekstep.html-archive', 'application/vnd.sunbird.questionset', 'application/json', 'text/x-url']);
|
|
105
|
-
// this.enableAITutorFlag = true
|
|
106
|
-
}
|
|
107
|
-
else {
|
|
108
|
-
this.enableAITutorFlag = false;
|
|
109
|
-
}
|
|
110
|
-
if (this.configService.iGOTAIConfig && this.configService.iGOTAIConfig?.transcription?.all) {
|
|
111
|
-
// console.log('in')
|
|
112
|
-
// this.resourceIdentifier$ = this.tocSvc.transriptionIdentifier.subscribe((value:any)=>{
|
|
113
|
-
// // console.log('resource identifier', value)
|
|
114
|
-
// if(value && value?.identifier) {
|
|
115
|
-
// this.resourceIdentifier = value?.identifier //value?.identifier // do_1138891198489067521147
|
|
116
|
-
// this.parseVTT()
|
|
117
|
-
// }
|
|
118
|
-
// })
|
|
119
|
-
this.subTitles$ = this.tocSvc.transcriptionData$.subscribe((value) => {
|
|
120
|
-
// console.log('value', value)
|
|
121
|
-
this.keywordToHighlight = value;
|
|
122
|
-
});
|
|
123
|
-
this.transriptionLanguageSub = this.tocSvc.transriptionActiveLanguageDataObject$
|
|
124
|
-
.pipe(tap((langvalue) => console.log('tap langvalue:', langvalue)))
|
|
125
|
-
.subscribe((langvalue) => {
|
|
126
|
-
// console.log('langValue', langvalue);
|
|
127
|
-
if (langvalue) {
|
|
128
|
-
// this.renderSelectedLanguageTranscription();
|
|
129
|
-
}
|
|
130
|
-
});
|
|
131
|
-
this.enableTranscriptionFlag = true;
|
|
132
|
-
}
|
|
133
|
-
else if (this.configService.iGOTAIConfig && this.configService.iGOTAIConfig?.transcription && this.configService.iGOTAIConfig?.transcription?.forOrg && this.configService.iGOTAIConfig?.transcription?.forOrg?.length &&
|
|
134
|
-
this.configService.iGOTAIConfig?.transcription?.forOrg?.includes(this.configService.userProfile?.rootOrgId)) {
|
|
135
|
-
// console.log('in')
|
|
136
|
-
// this.resourceIdentifier$ = this.tocSvc.transriptionIdentifier.subscribe((value:any)=>{
|
|
137
|
-
// // console.log('resource identifier', value)
|
|
138
|
-
// if(value && value?.identifier) {
|
|
139
|
-
// this.resourceIdentifier = value?.identifier //value?.identifier // do_1138891198489067521147
|
|
140
|
-
// this.parseVTT()
|
|
141
|
-
// }
|
|
142
|
-
// })
|
|
143
|
-
this.subTitles$ = this.tocSvc.transcriptionData$.subscribe((value) => {
|
|
144
|
-
// console.log('value', value)
|
|
145
|
-
this.keywordToHighlight = value;
|
|
146
|
-
});
|
|
147
|
-
this.transriptionLanguageSub = this.tocSvc.transriptionActiveLanguageDataObject$
|
|
148
|
-
.pipe(tap((langvalue) => console.log('tap langvalue:', langvalue)))
|
|
149
|
-
.subscribe((langvalue) => {
|
|
150
|
-
// console.log('langValue', langvalue);
|
|
151
|
-
if (langvalue) {
|
|
152
|
-
// this.renderSelectedLanguageTranscription();
|
|
153
|
-
}
|
|
154
|
-
});
|
|
155
|
-
this.enableTranscriptionFlag = true;
|
|
156
|
-
}
|
|
157
|
-
else {
|
|
158
|
-
this.enableTranscriptionFlag = false;
|
|
159
|
-
}
|
|
160
|
-
const batchId = this.route.snapshot.queryParams.batchId ?
|
|
161
|
-
this.route.snapshot.queryParams.batchId : '';
|
|
162
|
-
if (batchId) {
|
|
163
|
-
this.selectedTabIndex = 1;
|
|
164
|
-
}
|
|
165
|
-
this.commentId = this.route.snapshot.queryParams.commentId ? this.route.snapshot.queryParams.commentId : '';
|
|
166
|
-
if (this.commentId) {
|
|
167
|
-
this.selectedTabIndex = 2;
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
ngAfterViewInit() {
|
|
171
|
-
this.isMobile = this.utilityService.isMobile;
|
|
172
|
-
if (window.innerWidth < 1480) {
|
|
173
|
-
this.isMobileForAI = true;
|
|
174
|
-
}
|
|
175
|
-
else {
|
|
176
|
-
this.isMobileForAI = false;
|
|
177
|
-
}
|
|
178
|
-
this.menuPosition = this.tabElement._elementRef.nativeElement.offsetTop;
|
|
179
|
-
this.route.queryParamMap.subscribe(async (params) => {
|
|
180
|
-
let fromAITutor = params.get('fromAITutor');
|
|
181
|
-
if ((fromAITutor === 'true' || fromAITutor === true) && this.isMobile) {
|
|
182
|
-
setTimeout(() => {
|
|
183
|
-
const tabsArray = this.tabs?.toArray();
|
|
184
|
-
let index = tabsArray?.findIndex(tab => tab.textLabel.trim() === "AI Tutor".trim());
|
|
185
|
-
if (index > -1) {
|
|
186
|
-
this.selectedTabIndex = index;
|
|
187
|
-
this.fromAISelectedTabIndex = true;
|
|
188
|
-
}
|
|
189
|
-
}, 3000);
|
|
190
|
-
}
|
|
191
|
-
});
|
|
192
|
-
}
|
|
193
|
-
get getCurrentTimeInUTC() {
|
|
194
|
-
const currentDate = new Date();
|
|
195
|
-
const isoString = currentDate.toISOString();
|
|
196
|
-
return isoString.replace('Z', '+0000');
|
|
197
|
-
}
|
|
198
|
-
async getSamuhikConfig() {
|
|
199
|
-
try {
|
|
200
|
-
this.samuhikConfig = await this.samuhikCharchaSvc.fetchConfigFile().toPromise();
|
|
201
|
-
}
|
|
202
|
-
catch (error) {
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
async ngOnChanges(changes) {
|
|
206
|
-
this.resourceIdentifier = this.viewerDataSvc.resourceId;
|
|
207
|
-
if (this.configService.iGOTAIConfig && this.configService.iGOTAIConfig?.transcription?.all) {
|
|
208
|
-
this.enableTranscriptionFlag = true;
|
|
209
|
-
}
|
|
210
|
-
else if (this.configService.iGOTAIConfig && this.configService.iGOTAIConfig?.transcription && this.configService.iGOTAIConfig?.transcription?.forOrg && this.configService.iGOTAIConfig?.transcription?.forOrg?.length &&
|
|
211
|
-
this.configService.iGOTAIConfig?.transcription?.forOrg?.includes(this.configService?.userProfile?.rootOrgId)) {
|
|
212
|
-
this.enableTranscriptionFlag = true;
|
|
213
|
-
}
|
|
214
|
-
else {
|
|
215
|
-
this.enableTranscriptionFlag = false;
|
|
216
|
-
}
|
|
217
|
-
if (this.configService.iGOTAIConfig && this.configService.iGOTAIConfig?.aiTutor && this.configService.iGOTAIConfig.aiTutor?.all) {
|
|
218
|
-
// console.log('this.contentReadData--', this.route.snapshot.data)
|
|
219
|
-
this.enableAITutorFlag = this.onlyscormAssessmentExists(this.content?.children, 'mimeType', ['application/vnd.ekstep.html-archive', 'application/vnd.sunbird.questionset', 'application/json', 'text/x-url']);
|
|
220
|
-
// this.enableAITutorFlag = true
|
|
221
|
-
}
|
|
222
|
-
else if (this.configService.iGOTAIConfig && this.configService.iGOTAIConfig?.aiTutor && this.configService.iGOTAIConfig?.aiTutor?.forOrg && this.configService.iGOTAIConfig?.aiTutor?.forOrg?.length
|
|
223
|
-
&& this.configService.iGOTAIConfig.aiTutor?.forOrg?.includes(this.configService?.userProfile?.rootOrgId)) {
|
|
224
|
-
this.enableAITutorFlag = this.onlyscormAssessmentExists(this.content?.children, 'mimeType', ['application/vnd.ekstep.html-archive', 'application/vnd.sunbird.questionset', 'application/json', 'text/x-url']);
|
|
225
|
-
}
|
|
226
|
-
else {
|
|
227
|
-
this.enableAITutorFlag = false;
|
|
228
|
-
}
|
|
229
|
-
if (changes && changes['playResourceId']) {
|
|
230
|
-
if (changes?.playResourceId?.previousValue !== changes?.playResourceId?.currentValue) {
|
|
231
|
-
if (this.viewerPage && this.viewerDataSvc?.resourceId && this.enableTranscriptionFlag) {
|
|
232
|
-
this.parseVTT();
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
if (changes.changeTab && changes.changeTab.currentValue && !this.fromAISelectedTabIndex) {
|
|
237
|
-
this.selectedTabIndex = 1;
|
|
238
|
-
}
|
|
239
|
-
if (this.route.snapshot.data.pageData && this.route.snapshot.data.pageData.data) {
|
|
240
|
-
this.config = this.route.snapshot.data.pageData.data;
|
|
241
|
-
}
|
|
242
|
-
if (this.config && this.config.discussWidgetData) {
|
|
243
|
-
this.discussWidgetData = this.config.discussWidgetData;
|
|
244
|
-
if (this.baseContentReadData && this.baseContentReadData.identifier) {
|
|
245
|
-
// console.log('this.content.identifier', this.content.identifier)
|
|
246
|
-
if (!this.discussWidgetData.newCommentSection.commentTreeData.entityId) {
|
|
247
|
-
this.discussWidgetData.newCommentSection.commentTreeData.entityId = this.baseContentReadData.identifier;
|
|
248
|
-
}
|
|
249
|
-
if (this.discussWidgetData.commentsList.repliesSection && this.discussWidgetData.commentsList.repliesSection.newCommentReply) {
|
|
250
|
-
this.discussWidgetData.commentsList.repliesSection.newCommentReply.commentTreeData.entityId = this.baseContentReadData.identifier;
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
if (this.isEnrolled) {
|
|
254
|
-
if (this.content && this.content.primaryCategory === NsContent.ECourseCategory.BLENDED_PROGRAM) {
|
|
255
|
-
this.showAssignmentsTab = true;
|
|
256
|
-
}
|
|
257
|
-
this.discussWidgetData.enrolledContent = true;
|
|
258
|
-
this.discussWidgetData.newCommentSection.commentBox.placeholder = 'Start a discussion';
|
|
259
|
-
}
|
|
260
|
-
else {
|
|
261
|
-
this.discussWidgetData.enrolledContent = false;
|
|
262
|
-
this.discussWidgetData.newCommentSection.commentBox.placeholder = 'Enrol to add your comments';
|
|
263
|
-
}
|
|
264
|
-
if (this.commentId) {
|
|
265
|
-
this.discussWidgetData.newCommentSection.show = false;
|
|
266
|
-
}
|
|
267
|
-
this.discussWidgetData = { ...this.discussWidgetData };
|
|
268
|
-
}
|
|
269
|
-
if (this.contentReadData && this.contentReadData?.eventLinked?.length) {
|
|
270
|
-
const orgId = _.get(this.configService, 'userProfile.userRootOrg.id', '');
|
|
271
|
-
await this.getSamuhikConfig();
|
|
272
|
-
const eventsLinked = this.contentReadData.eventLinked || [];
|
|
273
|
-
let eventsData = [];
|
|
274
|
-
this.samuhikConfig?.strips[0].tabs.forEach((ele) => {
|
|
275
|
-
ele.request.searchV6.request.filters.identifier = eventsLinked;
|
|
276
|
-
ele.request.searchV6.request.filters.createdFor = [orgId];
|
|
277
|
-
if (ele.request.searchV6.request.filters.endDateTime.hasOwnProperty('>=')) {
|
|
278
|
-
ele.request.searchV6.request.filters.endDateTime['>='] = this.getCurrentTimeInUTC;
|
|
279
|
-
}
|
|
280
|
-
if (ele.request.searchV6.request.filters.endDateTime.hasOwnProperty('<')) {
|
|
281
|
-
ele.request.searchV6.request.filters.endDateTime['<'] = this.getCurrentTimeInUTC;
|
|
282
|
-
}
|
|
283
|
-
this.samuhikCharchaSvc.getSearchV6Results(ele.request.searchV6).subscribe((res) => {
|
|
284
|
-
if (res && res.result && res.result.count && res.result?.Event && res.result.Event?.length) {
|
|
285
|
-
for (let eve = 0; eve < res.result.Event?.length; eve++) {
|
|
286
|
-
if (res.result.Event[eve]['createdFor'] && res.result.Event[eve]['createdFor'].length &&
|
|
287
|
-
res.result.Event[eve]['resourceType'] === 'Samuhik Charcha')
|
|
288
|
-
eventsData.push(res.result.Event[eve]['createdFor'][0]);
|
|
289
|
-
if (eventsData.includes(this.configService.userProfile?.rootOrgId)) {
|
|
290
|
-
this.enableSamuhikCharchaTab = true;
|
|
291
|
-
}
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
});
|
|
295
|
-
});
|
|
296
|
-
}
|
|
297
|
-
if (this.contentReadData && this.contentReadData.referenceNodes) {
|
|
298
|
-
this.contentReadData.referenceNodes.forEach((item) => {
|
|
299
|
-
let userRoles = this.configService?.userRoles || new Set();
|
|
300
|
-
let hasEducatorRole = false;
|
|
301
|
-
// Check if user has MENTOR role
|
|
302
|
-
if (userRoles.has('MENTOR') ||
|
|
303
|
-
userRoles.has('mentor') ||
|
|
304
|
-
userRoles.has('Mentor')) {
|
|
305
|
-
hasEducatorRole = true;
|
|
306
|
-
}
|
|
307
|
-
// Check local storage for survey response only if URL contains 'public' or 'preview=true'
|
|
308
|
-
if (!hasEducatorRole && this.forPreview) {
|
|
309
|
-
const surveyId = this.environment.publicContentSurveyId || '';
|
|
310
|
-
const courseId = this.contentReadData?.identifier || '';
|
|
311
|
-
const storageKey = `survey_${surveyId}_${courseId}`;
|
|
312
|
-
const storedData = localStorage.getItem(storageKey);
|
|
313
|
-
if (storedData) {
|
|
314
|
-
try {
|
|
315
|
-
const surveyResponses = JSON.parse(storedData);
|
|
316
|
-
const educatorQuestion = surveyResponses.find((response) => response.question === 'Are you an Educator/Faculty member?');
|
|
317
|
-
if (educatorQuestion && educatorQuestion.answer === 'Yes') {
|
|
318
|
-
hasEducatorRole = true;
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
catch (error) {
|
|
322
|
-
console.error('Error parsing survey data from local storage:', error);
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
// Set teacherNotesFlag if user has educator role
|
|
327
|
-
if (hasEducatorRole) {
|
|
328
|
-
if (item && item.resourceCategory && item.resourceCategory === 'Teachers Resource') {
|
|
329
|
-
this.teacherNotesFlag = true;
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
if (item && item.resourceCategory && item.resourceCategory === 'Reference Resource') {
|
|
333
|
-
this.referenceNotesFlag = true;
|
|
334
|
-
}
|
|
335
|
-
});
|
|
336
|
-
}
|
|
337
|
-
if (this.sideNavBarOpened) {
|
|
338
|
-
if (window.innerWidth < 1480) {
|
|
339
|
-
if (this.isMobileForAI) {
|
|
340
|
-
this.isMobileForAI = false;
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
else {
|
|
344
|
-
this.isMobileForAI = false;
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
else {
|
|
348
|
-
if (window.innerWidth < 1480) {
|
|
349
|
-
this.isMobileForAI = true;
|
|
350
|
-
}
|
|
351
|
-
else {
|
|
352
|
-
this.isMobileForAI = false;
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
handleScroll() {
|
|
357
|
-
const windowScroll = window.scrollY;
|
|
358
|
-
if (windowScroll >= (this.menuPosition - ((this.isMobile) ? 96 : 104))) {
|
|
359
|
-
this.sticky = true;
|
|
360
|
-
}
|
|
361
|
-
else {
|
|
362
|
-
this.sticky = false;
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
handleTabChange(event) {
|
|
366
|
-
this.tabChangeValue = event.tab;
|
|
367
|
-
this.selectedTabIndex = event.index;
|
|
368
|
-
this.loadCheckService.componentLoaded(true);
|
|
369
|
-
// console.log('event', event)
|
|
370
|
-
// console.log('this.content', this.viewerDataSvc?.resourceId)
|
|
371
|
-
if (event && event.tab.textLabel === 'AI Tutor') {
|
|
372
|
-
this.showAITutorPopup = true;
|
|
373
|
-
}
|
|
374
|
-
if (event && event.index === 0 && event.tab.textLabel === 'Transcription') {
|
|
375
|
-
this.raiseTranscriptionTabStartTelemetry();
|
|
376
|
-
setTimeout(() => {
|
|
377
|
-
this.raiseTranscriptionTabInteractTelemetry();
|
|
378
|
-
}, 1000);
|
|
379
|
-
}
|
|
380
|
-
else {
|
|
381
|
-
this.raiseTranscriptionTabStopTelemetry();
|
|
382
|
-
}
|
|
383
|
-
}
|
|
384
|
-
showAiTutorConfirmPopup() {
|
|
385
|
-
this.raiseAIPopupStartTelemetry();
|
|
386
|
-
if (this.isEnrolled) {
|
|
387
|
-
this.fromAITutor = true;
|
|
388
|
-
setTimeout(() => {
|
|
389
|
-
this.raiseAIPopupInteractTelemetry();
|
|
390
|
-
}, 1000);
|
|
391
|
-
this.generateResumeDataLinkNew();
|
|
392
|
-
setTimeout(() => {
|
|
393
|
-
this.raiseAIPopupEndTelemetry();
|
|
394
|
-
}, 1000);
|
|
395
|
-
}
|
|
396
|
-
else {
|
|
397
|
-
setTimeout(() => {
|
|
398
|
-
this.raiseAIPopupInteractTelemetry();
|
|
399
|
-
}, 1000);
|
|
400
|
-
const dialogConfig = new MatDialogConfig();
|
|
401
|
-
dialogConfig.width = '421px';
|
|
402
|
-
dialogConfig.data = {
|
|
403
|
-
enroll: this.isEnrolled
|
|
404
|
-
};
|
|
405
|
-
const dialogRef = this.dialog.open(AiTutorConfirmPopupComponent, dialogConfig);
|
|
406
|
-
dialogRef.afterClosed().subscribe((response) => {
|
|
407
|
-
if (response === 'enroll') {
|
|
408
|
-
this.fromAITutor = true;
|
|
409
|
-
this.generateResumeDataLinkNew();
|
|
410
|
-
}
|
|
411
|
-
else if (response === 'needToEnroll') {
|
|
412
|
-
this.enrollUserForAITutor();
|
|
413
|
-
}
|
|
414
|
-
this.raiseAIPopupEndTelemetry();
|
|
415
|
-
});
|
|
416
|
-
}
|
|
417
|
-
}
|
|
418
|
-
generateResumeDataLinkNew() {
|
|
419
|
-
if (this.resumeData && this.content) {
|
|
420
|
-
let resumeDataV2;
|
|
421
|
-
if (this.content.completionPercentage === 100) {
|
|
422
|
-
resumeDataV2 = this.getResumeDataFromList('start');
|
|
423
|
-
}
|
|
424
|
-
else {
|
|
425
|
-
resumeDataV2 = this.getResumeDataFromList();
|
|
426
|
-
}
|
|
427
|
-
if (!resumeDataV2.mimeType) {
|
|
428
|
-
resumeDataV2.mimeType = this.tocSvc.getMimeType(this.content, resumeDataV2.identifier);
|
|
429
|
-
}
|
|
430
|
-
this.resumeDataLink = viewerRouteGenerator(resumeDataV2.identifier, resumeDataV2.mimeType, this.content.identifier, this.content.contentType, this.forPreview, 'Learning Resource', this.getBatchId(), this.content.name);
|
|
431
|
-
this.actionSVC.setUpdateCompGroupO = this.resumeDataLink;
|
|
432
|
-
// console.log('this.resumeDataLink',this.resumeDataLink)
|
|
433
|
-
// console.log('this.actionSVC', this.actionSVC)
|
|
434
|
-
this.router.navigate([this.resumeDataLink.url], {
|
|
435
|
-
queryParams: {
|
|
436
|
-
...this.resumeDataLink.queryParams,
|
|
437
|
-
fromAITutor: this.fromAITutor
|
|
438
|
-
}
|
|
439
|
-
});
|
|
440
|
-
// this.router.navigateByUrl(
|
|
441
|
-
// [this.resumeDataLink.url],
|
|
442
|
-
// {
|
|
443
|
-
// relativeTo: this.resumeDataLink.url,
|
|
444
|
-
// queryParams: this.resumeDataLink.queryParams,
|
|
445
|
-
// queryParamsHandling: 'merge',
|
|
446
|
-
// })
|
|
447
|
-
/* tslint:disable-next-line */
|
|
448
|
-
}
|
|
449
|
-
else {
|
|
450
|
-
this.playResumeForAI.emit();
|
|
451
|
-
}
|
|
452
|
-
}
|
|
453
|
-
getResumeDataFromList(type) {
|
|
454
|
-
const resumeCopy = [...this.resumeData];
|
|
455
|
-
if (!type) {
|
|
456
|
-
// tslint:disable-next-line:max-line-length
|
|
457
|
-
const lastItem = resumeCopy && resumeCopy.sort((a, b) => new Date(b.lastAccessTime).getTime() - new Date(a.lastAccessTime).getTime()).shift();
|
|
458
|
-
return {
|
|
459
|
-
identifier: lastItem.contentId,
|
|
460
|
-
mimeType: lastItem.progressdetails && lastItem.progressdetails.mimeType,
|
|
461
|
-
};
|
|
462
|
-
}
|
|
463
|
-
const firstItem = resumeCopy && resumeCopy.length && resumeCopy[0];
|
|
464
|
-
return {
|
|
465
|
-
identifier: firstItem.contentId,
|
|
466
|
-
mimeType: firstItem.progressdetails && firstItem.progressdetails.mimeType,
|
|
467
|
-
};
|
|
468
|
-
}
|
|
469
|
-
getBatchId() {
|
|
470
|
-
let batchId = '';
|
|
471
|
-
if (this.batchData && this.batchData.content) {
|
|
472
|
-
for (const batch of this.batchData.content) {
|
|
473
|
-
batchId = batch.batchId;
|
|
474
|
-
}
|
|
475
|
-
}
|
|
476
|
-
return batchId;
|
|
477
|
-
}
|
|
478
|
-
raiseAIPopupStartTelemetry() {
|
|
479
|
-
const event = {
|
|
480
|
-
eventType: WsEvents.WsEventType.Telemetry,
|
|
481
|
-
eventLogLevel: WsEvents.WsEventLogLevel.Info,
|
|
482
|
-
data: {
|
|
483
|
-
edata: { type: 'click', "id": "ai-tutor-toc-page", "pageid": `/app/toc/${this.content?.identifier}` },
|
|
484
|
-
object: { "id": this.content?.identifier, "type": this.content?.courseCategory },
|
|
485
|
-
state: WsEvents.EnumTelemetrySubType.Loaded,
|
|
486
|
-
eventSubType: WsEvents.EnumTelemetrySubType.Chatbot,
|
|
487
|
-
mode: 'view',
|
|
488
|
-
},
|
|
489
|
-
pageContext: { pageId: '/app/toc', module: 'Learn' },
|
|
490
|
-
from: '',
|
|
491
|
-
to: 'Telemetry',
|
|
492
|
-
};
|
|
493
|
-
this.eventSvc.dispatchChatbotEvent(event);
|
|
494
|
-
}
|
|
495
|
-
raiseAIPopupEndTelemetry() {
|
|
496
|
-
const event = {
|
|
497
|
-
eventType: WsEvents.WsEventType.Telemetry,
|
|
498
|
-
eventLogLevel: WsEvents.WsEventLogLevel.Info,
|
|
499
|
-
data: {
|
|
500
|
-
edata: { type: 'click', "id": "ai-tutor-toc-page", "pageid": `/app/toc/${this.content?.identifier}` },
|
|
501
|
-
object: { "id": this.content?.identifier, "type": this.content?.courseCategory },
|
|
502
|
-
state: WsEvents.EnumTelemetrySubType.Unloaded,
|
|
503
|
-
eventSubType: WsEvents.EnumTelemetrySubType.Chatbot,
|
|
504
|
-
mode: 'view',
|
|
505
|
-
},
|
|
506
|
-
pageContext: { pageId: '/app/toc', module: 'Learn' },
|
|
507
|
-
from: '',
|
|
508
|
-
to: 'Telemetry',
|
|
509
|
-
};
|
|
510
|
-
this.eventSvc.dispatchChatbotEvent(event);
|
|
511
|
-
}
|
|
512
|
-
raiseAIPopupInteractTelemetry() {
|
|
513
|
-
const event = {
|
|
514
|
-
eventType: WsEvents.WsEventType.Telemetry,
|
|
515
|
-
eventLogLevel: WsEvents.WsEventLogLevel.Info,
|
|
516
|
-
data: {
|
|
517
|
-
edata: { type: 'click', "id": "ai-tutor-toc-page", "pageid": `/app/toc/${this.content?.identifier}` },
|
|
518
|
-
object: { "id": this.content?.identifier, "type": this.content?.courseCategory },
|
|
519
|
-
state: WsEvents.EnumTelemetrySubType.Interact,
|
|
520
|
-
eventSubType: WsEvents.EnumTelemetrySubType.Chatbot,
|
|
521
|
-
mode: 'view',
|
|
522
|
-
},
|
|
523
|
-
pageContext: { pageId: '/app/toc', module: 'Learn' },
|
|
524
|
-
from: '',
|
|
525
|
-
to: 'Telemetry',
|
|
526
|
-
};
|
|
527
|
-
this.eventSvc.dispatchChatbotEvent(event);
|
|
528
|
-
}
|
|
529
|
-
enrollUserForAITutor() {
|
|
530
|
-
this.enrollUserToAI.emit();
|
|
531
|
-
}
|
|
532
|
-
async parseVTT() {
|
|
533
|
-
let identifier = this.resourceIdentifier;
|
|
534
|
-
// console.log('identifier--', identifier)
|
|
535
|
-
await this.tocSvc.aiGetResourceVttFile(identifier).subscribe(async (datas) => {
|
|
536
|
-
let data = datas?.data;
|
|
537
|
-
if (data && data.length && data[0]['transcription_urls'] && data[0]['transcription_urls'].length) {
|
|
538
|
-
this.vttLangArr = data[0]['transcription_urls'];
|
|
539
|
-
this.enableTranscriptionFlag = true;
|
|
540
|
-
// let url = data[0]['transcription_urls'][0]['uri']
|
|
541
|
-
// console.log('this.vttLangArr--',this.vttLangArr)
|
|
542
|
-
this.transcriptionActiveLanguage = this.vttLangArr && this.vttLangArr.length && this.vttLangArr[0] && this.vttLangArr[0]['default_lang'] ? 'en' : 'en';
|
|
543
|
-
this.defaultTranscriptLanguage = this.vttLangArr && this.vttLangArr.length && this.vttLangArr[0] && this.vttLangArr[0]['default_lang'] ? 'en' : 'en';
|
|
544
|
-
// console.log('this.transcriptionActiveLanguage--', this.transcriptionActiveLanguage)
|
|
545
|
-
let selectedTranscriptionStyle = this.vttLangArr.filter((item) => {
|
|
546
|
-
return item?.label === this.transcriptionActiveLanguage;
|
|
547
|
-
});
|
|
548
|
-
if (selectedTranscriptionStyle && selectedTranscriptionStyle.length) {
|
|
549
|
-
this.selectedTranscriptionStyle = selectedTranscriptionStyle[0];
|
|
550
|
-
}
|
|
551
|
-
else {
|
|
552
|
-
this.selectedTranscriptionStyle = this.vttLangArr[0];
|
|
553
|
-
}
|
|
554
|
-
// console.log('this.selectedTranscriptionStyle--', this.selectedTranscriptionStyle)
|
|
555
|
-
const filteredArr = this.vttLangArr.filter((item) => item.label === this.transcriptionActiveLanguage);
|
|
556
|
-
let url = filteredArr.length > 0 ? filteredArr[0].uri : null;
|
|
557
|
-
//let url = this.vttLangArr.filter((item: any) => item.label === this.transcriptionActiveLanguage)[0]['uri']
|
|
558
|
-
if (url) {
|
|
559
|
-
const file = await VttFile.fromUrl(url);
|
|
560
|
-
let blocks = file.getBlocks();
|
|
561
|
-
this.subTitles = blocks;
|
|
562
|
-
}
|
|
563
|
-
// console.log('this.vttLangArr--',this.vttLangArr)
|
|
564
|
-
// if(this.vttLangArr && this.vttLangArr.length) {
|
|
565
|
-
// this.transcriptionActiveLanguage = this.vttLangArr[0]['label']
|
|
566
|
-
// } else {
|
|
567
|
-
// this.transcriptionActiveLanguage = this.vttLangArr[0]['default_lang']
|
|
568
|
-
// }
|
|
569
|
-
this.tocSvc.changeTranscriptionLanguageEvent.next({ activeLang: this.transcriptionActiveLanguage, langData: this.vttLangArr, loadPlayer: true });
|
|
570
|
-
}
|
|
571
|
-
else {
|
|
572
|
-
this.vttLangArr = [];
|
|
573
|
-
this.enableTranscriptionFlag = false;
|
|
574
|
-
}
|
|
575
|
-
});
|
|
576
|
-
}
|
|
577
|
-
async renderSelectedLanguageTranscription(_langvalue) {
|
|
578
|
-
// this.transcriptionActiveLanguage = this.selectedTranscriptionStyle?.label
|
|
579
|
-
if (typeof _langvalue === 'string' && _langvalue) {
|
|
580
|
-
this.transcriptionActiveLanguage = _langvalue;
|
|
581
|
-
}
|
|
582
|
-
else {
|
|
583
|
-
this.selectedTranscriptionStyle = _langvalue?.value;
|
|
584
|
-
this.transcriptionActiveLanguage = this.selectedTranscriptionStyle?.label;
|
|
585
|
-
this.transcriptActiveLanguageText = _langvalue?.value?.language;
|
|
586
|
-
}
|
|
587
|
-
this.raiseTranscriptionLanguageStartTelemetry();
|
|
588
|
-
setTimeout(() => {
|
|
589
|
-
this.raiseTranscriptionLanguageInteractTelemetry();
|
|
590
|
-
});
|
|
591
|
-
let currentPath = this.vttLangArr.filter((item) => item?.label === this.transcriptionActiveLanguage);
|
|
592
|
-
if (currentPath && currentPath.length) {
|
|
593
|
-
this.selectedTranscriptionStyle = currentPath[0];
|
|
594
|
-
}
|
|
595
|
-
const file = await VttFile.fromUrl(currentPath && currentPath[0]?.uri);
|
|
596
|
-
let blocks = file.getBlocks();
|
|
597
|
-
this.subTitles = blocks;
|
|
598
|
-
this.raiseTranscriptionLanguageStopTelemetry();
|
|
599
|
-
// this.tocSvc.changeTranscriptionLanguageEvent.next({activeLang: this.transcriptionActiveLanguage, langData: this.vttLangArr, loadPlayer:false})
|
|
600
|
-
}
|
|
601
|
-
openSurveyFormPopup(event) {
|
|
602
|
-
this.trigerCompletionSurveyForm.emit(event);
|
|
603
|
-
}
|
|
604
|
-
playFromSlot(subtitle) {
|
|
605
|
-
if (subtitle) {
|
|
606
|
-
let startTime = subtitle.startTime / 1000;
|
|
607
|
-
let endTime = subtitle.endTime / 1000;
|
|
608
|
-
this.tocSvc.playTranscriptionVideo.next({ startTime, endTime });
|
|
609
|
-
}
|
|
610
|
-
}
|
|
611
|
-
formatMsToVttTime(ms) {
|
|
612
|
-
const totalSeconds = Math.floor(ms / 1000);
|
|
613
|
-
// const milliseconds = ms % 1000;
|
|
614
|
-
const hours = Math.floor(totalSeconds / 3600);
|
|
615
|
-
const minutes = Math.floor((totalSeconds % 3600) / 60);
|
|
616
|
-
const seconds = totalSeconds % 60;
|
|
617
|
-
const pad = (num, size) => num.toString().padStart(size, '0');
|
|
618
|
-
// return `${pad(hours, 2)}:${pad(minutes, 2)}:${pad(seconds, 2)}.${pad(milliseconds, 3)}`;
|
|
619
|
-
return `${pad(hours, 2)}:${pad(minutes, 2)}:${pad(seconds, 2)}`;
|
|
620
|
-
}
|
|
621
|
-
onlyscormAssessmentExists(data, key, value) {
|
|
622
|
-
for (let i = 0; i < data?.length; i++) {
|
|
623
|
-
if (data[i] && data[i]['children'] && data[i]['children'].length) {
|
|
624
|
-
// this.totalResource = this.totalResource + 1
|
|
625
|
-
// console.log('in children')
|
|
626
|
-
this.onlyscormAssessmentExists(data[i]?.children, key, value);
|
|
627
|
-
}
|
|
628
|
-
else {
|
|
629
|
-
this.totalResource = this.totalResource + 1;
|
|
630
|
-
if (value.includes(data[i][key])) {
|
|
631
|
-
// this.showAITutorFlag = false;
|
|
632
|
-
this.scormAssessmentCount = this.scormAssessmentCount + 1;
|
|
633
|
-
}
|
|
634
|
-
}
|
|
635
|
-
}
|
|
636
|
-
if (this.totalResource === this.scormAssessmentCount) {
|
|
637
|
-
this.enableAITutorFlag = false;
|
|
638
|
-
}
|
|
639
|
-
else {
|
|
640
|
-
this.enableAITutorFlag = true;
|
|
641
|
-
}
|
|
642
|
-
return this.enableAITutorFlag;
|
|
643
|
-
}
|
|
644
|
-
raiseTranscriptionTabStartTelemetry() {
|
|
645
|
-
const event = {
|
|
646
|
-
eventType: WsEvents.WsEventType.Telemetry,
|
|
647
|
-
eventLogLevel: WsEvents.WsEventLogLevel.Info,
|
|
648
|
-
data: {
|
|
649
|
-
edata: { type: 'click', "id": "ai-tutor-viewer-page", "pageid": `/viewer/video/${this.viewerDataSvc?.resourceId}`, subType: 'transcript-tab' },
|
|
650
|
-
object: { "id": this.content?.identifier, "type": this.content?.courseCategory },
|
|
651
|
-
state: WsEvents.EnumTelemetrySubType.Loaded,
|
|
652
|
-
eventSubType: WsEvents.EnumTelemetrySubType.Chatbot,
|
|
653
|
-
mode: 'view',
|
|
654
|
-
},
|
|
655
|
-
pageContext: { pageId: `/viewer/video/${this.viewerDataSvc?.resourceId}`, module: 'Learn' },
|
|
656
|
-
from: '',
|
|
657
|
-
to: 'Telemetry',
|
|
658
|
-
};
|
|
659
|
-
this.eventSvc.dispatchChatbotEvent(event);
|
|
660
|
-
}
|
|
661
|
-
raiseTranscriptionTabInteractTelemetry() {
|
|
662
|
-
const event = {
|
|
663
|
-
eventType: WsEvents.WsEventType.Telemetry,
|
|
664
|
-
eventLogLevel: WsEvents.WsEventLogLevel.Info,
|
|
665
|
-
data: {
|
|
666
|
-
edata: { type: 'click', "id": "ai-tutor-viewer-page", "pageid": `/viewer/video/${this.viewerDataSvc?.resourceId}`, subType: 'transcript-tab' },
|
|
667
|
-
object: { "id": this.content?.identifier, "type": this.content?.courseCategory },
|
|
668
|
-
state: WsEvents.EnumTelemetrySubType.Interact,
|
|
669
|
-
eventSubType: WsEvents.EnumTelemetrySubType.Chatbot,
|
|
670
|
-
mode: 'view',
|
|
671
|
-
},
|
|
672
|
-
pageContext: { pageId: `/viewer/video/${this.viewerDataSvc?.resourceId}`, module: 'Learn' },
|
|
673
|
-
from: '',
|
|
674
|
-
to: 'Telemetry',
|
|
675
|
-
};
|
|
676
|
-
this.eventSvc.dispatchChatbotEvent(event);
|
|
677
|
-
}
|
|
678
|
-
raiseTranscriptionTabStopTelemetry() {
|
|
679
|
-
const event = {
|
|
680
|
-
eventType: WsEvents.WsEventType.Telemetry,
|
|
681
|
-
eventLogLevel: WsEvents.WsEventLogLevel.Info,
|
|
682
|
-
data: {
|
|
683
|
-
edata: { type: 'click', "id": "ai-tutor-viewer-page", "pageid": `/viewer/video/${this.viewerDataSvc?.resourceId}`, subType: 'transcript-tab' },
|
|
684
|
-
object: { "id": this.content?.identifier, "type": this.content?.courseCategory },
|
|
685
|
-
state: WsEvents.EnumTelemetrySubType.Unloaded,
|
|
686
|
-
eventSubType: WsEvents.EnumTelemetrySubType.Chatbot,
|
|
687
|
-
mode: 'view',
|
|
688
|
-
},
|
|
689
|
-
pageContext: { pageId: `/viewer/video/${this.viewerDataSvc?.resourceId}`, module: 'Learn' },
|
|
690
|
-
from: '',
|
|
691
|
-
to: 'Telemetry',
|
|
692
|
-
};
|
|
693
|
-
this.eventSvc.dispatchChatbotEvent(event);
|
|
694
|
-
}
|
|
695
|
-
raiseTranscriptionLanguageStartTelemetry() {
|
|
696
|
-
const event = {
|
|
697
|
-
eventType: WsEvents.WsEventType.Telemetry,
|
|
698
|
-
eventLogLevel: WsEvents.WsEventLogLevel.Info,
|
|
699
|
-
data: {
|
|
700
|
-
edata: { type: 'click', "id": this.transcriptActiveLanguageText, "pageid": `/viewer/video/${this.viewerDataSvc?.resourceId}`, subType: 'transcript-language' },
|
|
701
|
-
object: { "id": this.content?.identifier, "type": this.content?.courseCategory },
|
|
702
|
-
state: WsEvents.EnumTelemetrySubType.Loaded,
|
|
703
|
-
eventSubType: WsEvents.EnumTelemetrySubType.Chatbot,
|
|
704
|
-
mode: 'view',
|
|
705
|
-
},
|
|
706
|
-
pageContext: { pageId: `/viewer/video/${this.viewerDataSvc?.resourceId}`, module: 'Learn' },
|
|
707
|
-
from: '',
|
|
708
|
-
to: 'Telemetry',
|
|
709
|
-
};
|
|
710
|
-
this.eventSvc.dispatchChatbotEvent(event);
|
|
711
|
-
}
|
|
712
|
-
raiseTranscriptionLanguageInteractTelemetry() {
|
|
713
|
-
const event = {
|
|
714
|
-
eventType: WsEvents.WsEventType.Telemetry,
|
|
715
|
-
eventLogLevel: WsEvents.WsEventLogLevel.Info,
|
|
716
|
-
data: {
|
|
717
|
-
edata: { type: 'click', "id": this.transcriptActiveLanguageText, "pageid": `/viewer/video/${this.viewerDataSvc?.resourceId}`, subType: 'transcript-language' },
|
|
718
|
-
object: { "id": this.content?.identifier, "type": this.content?.courseCategory },
|
|
719
|
-
state: WsEvents.EnumTelemetrySubType.Interact,
|
|
720
|
-
eventSubType: WsEvents.EnumTelemetrySubType.Chatbot,
|
|
721
|
-
mode: 'view',
|
|
722
|
-
},
|
|
723
|
-
pageContext: { pageId: `/viewer/video/${this.viewerDataSvc?.resourceId}`, module: 'Learn' },
|
|
724
|
-
from: '',
|
|
725
|
-
to: 'Telemetry',
|
|
726
|
-
};
|
|
727
|
-
this.eventSvc.dispatchChatbotEvent(event);
|
|
728
|
-
}
|
|
729
|
-
raiseTranscriptionLanguageStopTelemetry() {
|
|
730
|
-
const event = {
|
|
731
|
-
eventType: WsEvents.WsEventType.Telemetry,
|
|
732
|
-
eventLogLevel: WsEvents.WsEventLogLevel.Info,
|
|
733
|
-
data: {
|
|
734
|
-
edata: { type: 'click', "id": this.transcriptActiveLanguageText, "pageid": `/viewer/video/${this.viewerDataSvc?.resourceId}`, subType: 'transcript-language' },
|
|
735
|
-
object: { "id": this.content?.identifier, "type": this.content?.courseCategory },
|
|
736
|
-
state: WsEvents.EnumTelemetrySubType.Unloaded,
|
|
737
|
-
eventSubType: WsEvents.EnumTelemetrySubType.Chatbot,
|
|
738
|
-
mode: 'view',
|
|
739
|
-
},
|
|
740
|
-
pageContext: { pageId: `/viewer/video/${this.viewerDataSvc?.resourceId}`, module: 'Learn' },
|
|
741
|
-
from: '',
|
|
742
|
-
to: 'Telemetry',
|
|
743
|
-
};
|
|
744
|
-
this.eventSvc.dispatchChatbotEvent(event);
|
|
745
|
-
}
|
|
746
|
-
closeAIPopup(event) {
|
|
747
|
-
if (event) {
|
|
748
|
-
this.showAITutorPopup = false;
|
|
749
|
-
this.selectedTabIndex = 0;
|
|
750
|
-
}
|
|
751
|
-
}
|
|
752
|
-
ngOnDestroy() {
|
|
753
|
-
if (this.resourceIdentifier$) {
|
|
754
|
-
this.resourceIdentifier$.unsubscribe();
|
|
755
|
-
}
|
|
756
|
-
if (this.subTitles$) {
|
|
757
|
-
this.subTitles$.unsubscribe();
|
|
758
|
-
}
|
|
759
|
-
if (this.transriptionLanguageSub) {
|
|
760
|
-
this.transriptionLanguageSub.unsubscribe();
|
|
761
|
-
}
|
|
762
|
-
}
|
|
763
|
-
clearCommentIdFromUrl() {
|
|
764
|
-
const currentQueryParams = { ...this.route.snapshot.queryParams };
|
|
765
|
-
delete currentQueryParams.commentId;
|
|
766
|
-
this.commentId = '';
|
|
767
|
-
this.discussWidgetData.newCommentSection.show = true;
|
|
768
|
-
}
|
|
769
|
-
resumeContentCall() {
|
|
770
|
-
this.resumeContent.emit();
|
|
771
|
-
}
|
|
772
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContentTocComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.UtilityService }, { token: i3.LoadCheckService }, { token: i2.ConfigurationsService }, { token: i4.MatLegacyDialog }, { token: i5.AppTocService }, { token: i6.ActionService }, { token: i1.Router }, { token: i2.EventService }, { token: i7.ViewerDataService }, { token: i8.SamuhikCharchaService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
773
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ContentTocComponent, selector: "ws-widget-content-toc", inputs: { content: "content", contentReadData: "contentReadData", initialRouteData: "initialRouteData", changeTab: "changeTab", baseContentReadData: "baseContentReadData", forPreview: "forPreview", contentTabFlag: "contentTabFlag", resumeData: "resumeData", batchData: "batchData", skeletonLoader: "skeletonLoader", tocStructure: "tocStructure", pathSet: "pathSet", fromViewer: "fromViewer", hierarchyMapData: "hierarchyMapData", condition: "condition", kparray: "kparray", selectedBatchData: "selectedBatchData", config: "config", componentName: "componentName", isEnrolled: "isEnrolled", playResourceId: "playResourceId", sideNavBarOpened: "sideNavBarOpened", languageList: "languageList", lockCertificate: "lockCertificate" }, outputs: { playResumeForAI: "playResumeForAI", enrollUserToAI: "enrollUserToAI", trigerCompletionSurveyForm: "trigerCompletionSurveyForm", resumeContent: "resumeContent" }, host: { listeners: { "window:scroll": "handleScroll($event)" } }, viewQueries: [{ propertyName: "tabElement", first: true, predicate: ["stickyMenu"], descendants: true }, { propertyName: "tabs", predicate: MatTab, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!-- && (content?.courseCategory !== courseCategory?.BLENDED_PROGRAM) -->\n<div class=\"ai-tutor-get-started\" *ngIf=\"!viewerPage && enableAITutorFlag && !isMobile\">\n <div class=\"flex flex-row align-items-center\">\n <div class=\"px-2 py-2\">\n <img src=\"assets/icons/bot-chat-small.svg\" height=\"64px\" width=\"64px\" />\n </div>\n <div class=\"flex flex-row align-items-center\">\n <div class=\"py-2\" [ngClass]=\"isMobile ? '' : 'w-565'\">\n <p class=\"font-weight-600\">Get Started with AI Tutor</p>\n <span>Get instant explanations, step-by-step learning guidance, and customised learning tailored just\n for you.</span>\n </div>\n <div class=\"ai-tutor-btn px-2 py-1\">\n <a href=\"javascript:void(0)\" (click)=\"showAiTutorConfirmPopup()\"><img\n src=\"assets/ai-tutor/ai-icon.svg\"> <span class=\"ai-tutor-label\">AI Tutor</span></a>\n </div>\n </div>\n </div>\n</div>\n<div class=\"tab-group-container\">\n <mat-tab-group (selectedTabChange)=\"handleTabChange($event)\" #stickyMenu [class.sticky-mat-tabs]=\"sticky\"\n [selectedIndex]=\"selectedTabIndex\" [ngClass]=\"{'content-tabs':!fromViewer,'contentSticky': forPreview}\">\n\n <!-- Transcription Tab -->\n <mat-tab label=\"Transcription\"\n *ngIf=\"viewerPage && enableTranscriptionFlag && vttLangArr?.length && subTitles?.length\">\n <ng-template mat-tab-label>\n <div class=\"flex flex-row\">\n <div class=\"flex\">\n <span>Transcript</span>\n </div>\n <div class=\"red-circle ml-5\">\n New\n </div>\n </div>\n\n </ng-template>\n <ng-template matTabContent>\n <div class=\"disclaimer my-2\">\n <p class=\"py-2 px-2\">Disclaimer : These transcripts and subtitles are AI-generated and may contain\n errors.</p>\n </div>\n <div class=\"w-full ml-5 mr-5\" *ngIf=\"isMobileForAI\">\n <div class=\"transcript-flex-container mt-2\">\n <mat-form-field class=\"multiline-select\" appearance=\"fill\" style=\"height: auto; width: 100%;\"\n floatLabel=\"never\">\n <mat-select class=\"multiline-select-box pr-5\" [(value)]=\"selectedTranscriptionStyle\"\n (selectionChange)=\"renderSelectedLanguageTranscription($event)\">\n <mat-select-trigger class=\"multiline-select-box-trigger\">\n <div class=\"selected-option-content px-5 py-2\">\n <div class=\"title\"><span\n *ngIf=\"transcriptionActiveLanguage === selectedTranscriptionStyle?.label\">\n <b>Transcript Language: </b></span>\n {{selectedTranscriptionStyle?.language | titlecase}} <span\n *ngIf=\"defaultTranscriptLanguage === selectedTranscriptionStyle?.label\">(Auto)</span>\n </div>\n </div>\n </mat-select-trigger>\n <mat-option class=\"multiline-select-option\" value=\"\" *ngFor=\"let lang of vttLangArr\"\n [value]=\"lang\"\n [ngClass]=\"{'active-option': selectedTranscriptionStyle?.label === lang?.label}\">\n <div class=\"option-content\">\n <div class=\"title\">{{lang?.language | titlecase}}</div>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n <div class=\"ml-4 flex flex-row justify-end transcript-control\">\n <!-- <mat-form-field appearance=\"none\">\n <select matNativeControl required class=\"section-dd\" (change)=\"renderSelectedLanguageTranscription($event)\">\n <option [value]=\"lang?.language\" *ngFor=\"let lang of vttLangArr\" [selected]=\"lang?.label === transcriptionActiveLanguage\">\n <span *ngIf=\"transcriptionActiveLanguage === lang?.label\"> Transcript Language: </span> {{lang?.language | titlecase}} <span *ngIf=\"transcriptionActiveLanguage === lang?.language\">(Auto)</span>\n </option>\n </select>\n </mat-form-field> -->\n <div class=\"flex flex-row w-full\">\n <div [ngClass]=\"!isMobileForAI ? 'w-subtitle-80':'w-full'\">\n <div [ngClass]=\"!isMobileForAI ? 'ml-5-per' : ''\" *ngIf=\"subTitles && subTitles?.length\">\n <!-- Transcription content -->\n <ng-container *ngFor=\"let subtitle of subTitles\">\n <div class=\"flex flex-col my-2\">\n <div class=\"flex flex-row\">\n <div class=\"subtitle-time\">\n <p class=\"cursor-pointer\" (click)=\"playFromSlot(subtitle)\">\n <span class=\"pr-1 blue-underline\"> {{\n formatMsToVttTime(subtitle?.startTime) }} </span>\n <span class=\"black-text\">-</span>\n <span class=\"pl-1 blue-underline\">{{\n formatMsToVttTime(subtitle?.endTime) }}</span>\n </p>\n </div>\n <div class=\"ml-4 subtitle-text-slot mr-4\">\n <p class=\"black-text\" [innerHtml]=\"subtitle?.text\n | highlight : keywordToHighlight?.text\n : ((subtitle?.startTime / 1000) >= keywordToHighlight?.start\n && (subtitle?.endTime / 1000) <= keywordToHighlight?.end)\">\n </p>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n <div class=\"w-subtitle-20\" *ngIf=\"!isMobileForAI\">\n <div class=\"transcript-flex-container mt-2\">\n <mat-form-field class=\"multiline-select\" appearance=\"fill\"\n style=\"height: auto; width: 100%;\" floatLabel=\"never\">\n <mat-select class=\"multiline-select-box pr-5\" [(value)]=\"selectedTranscriptionStyle\"\n (selectionChange)=\"renderSelectedLanguageTranscription($event)\">\n <mat-select-trigger class=\"multiline-select-box-trigger\">\n <div class=\"selected-option-content px-5 py-2\">\n <div class=\"title\"><span\n *ngIf=\"transcriptionActiveLanguage === selectedTranscriptionStyle?.label\">\n <b>Transcript Language: </b></span>\n {{selectedTranscriptionStyle?.language | titlecase}} <span\n *ngIf=\"defaultTranscriptLanguage === selectedTranscriptionStyle?.label\">(Auto)</span>\n </div>\n </div>\n </mat-select-trigger>\n <mat-option class=\"multiline-select-option\" value=\"\"\n *ngFor=\"let lang of vttLangArr\" [value]=\"lang\"\n [ngClass]=\"{'active-option': selectedTranscriptionStyle?.label === lang?.label}\">\n <div class=\"option-content\">\n <div class=\"title\">{{lang?.language | titlecase}}</div>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n </div>\n\n </div>\n <!-- <div class=\"flex flex-row align-items-center my-2\">\n <div>\n <p>0.00</p>\n </div>\n <div class=\"ml-4\">\n <p>AI for Digital Transformation: Machine Learning and Deep Learning Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>\n </div>\n <div class=\"ml-4\">\n <mat-form-field appearance=\"none\">\n <select matNativeControl required class=\"section-dd\">\n <option value=\"\">Transcription Language: English (Auto)</option>\n </select>\n </mat-form-field>\n </div>\n </div> -->\n\n </ng-template>\n </mat-tab>\n\n <!-- About Tab -->\n <mat-tab label=\"{{ 'apptocsinglepage.about' | translate }}\">\n <ng-template matTabContent>\n <div class=\"ai-tutor-get-started-mobile my-2 ml-2\" *ngIf=\"!viewerPage && enableAITutorFlag && isMobile\">\n <div class=\"flex flex-row align-items-center w-98\">\n <div class=\"px-2 py-2\">\n <img src=\"assets/icons/bot-chat-small.svg\" height=\"48px\" width=\"48px\" />\n </div>\n <div class=\"flex flex-row align-items-center w-60\">\n <div class=\"py-2\">\n <p class=\"font-weight-600\">Get Started with AI Tutor</p>\n <span>Get instant explanations, step-by-step learning guidance, and customised learning\n tailored just for you.</span>\n </div>\n\n </div>\n <div class=\"ai-tutor-btn px-2 py-1\">\n <a href=\"javascript:void(0)\" (click)=\"showAiTutorConfirmPopup()\"><img\n src=\"assets/ai-tutor/ai-icon.svg\"> <span class=\"ai-tutor-label\">AI\n Tutor</span></a>\n </div>\n\n </div>\n <!-- <div class=\"flex justify-end my-2 mx-2\">\n <div class=\"ai-tutor-btn px-2 py-1\">\n <a href=\"javascript:void(0)\" (click)=\"showAiTutorConfirmPopup()\"><img src=\"assets/ai-tutor/ai-icon.svg\"> <span class=\"ai-tutor-label\">AI Tutor</span></a>\n </div>\n </div> -->\n </div>\n <ws-widget-app-toc-about [fromViewer]=\"fromViewer\" [pathSet]=\"pathSet\" [content]=\"content\"\n [contentReadData]=\"contentReadData\" [baseContentReadData]=\"baseContentReadData\"\n [tocStructure]=\"tocStructure\" [config]=\"config\" [forPreview]=\"false\" [sticky]=\"sticky\"\n [selectedBatchData]=\"selectedBatchData\" [selectedTabValue]=\"selectedTabIndex\"\n [resumeData]=\"resumeData\" [batchData]=\"batchData\" [skeletonLoader]=\"skeletonLoader\"\n [condition]=\"condition\" [kparray]=\"kparray\" [showReviews]=\"'true'\" [languageList]=\"languageList\"\n [lockCertificate]=\"lockCertificate\" (trigerCompletionSurveyForm)=\"openSurveyFormPopup($event)\">\n </ws-widget-app-toc-about>\n </ng-template>\n </mat-tab>\n\n <!-- Content Tab -->\n <ng-container *ngIf=\"content?.children?.length\">\n <mat-tab label=\"{{ 'apptocsinglepage.content' | translate }}\" *ngIf=\"contentTabFlag\">\n <ng-template matTabContent>\n <ws-widget-app-toc-content [batchId]=\"batchId\" [componentName]=\"componentName\" [pathSet]=\"pathSet\"\n [content]=\"content\" [tocStructure]=\"tocStructure\" [config]=\"config\" [forPreview]=\"forPreview\"\n [resumeData]=\"resumeData\" [batchData]=\"batchData\" [skeletonLoader]=\"skeletonLoader\"\n [hierarchyMapData]=\"hierarchyMapData\" [baseContentReadData]=\"baseContentReadData\">\n </ws-widget-app-toc-content>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <ng-container *ngIf=\"config?.commentsTab && !forPreview\">\n <mat-tab label=\"{{ 'apptocsinglepage.startDiscussion' | translate }}\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"commentsDiv\"\n *ngIf=\"discussWidgetData && discussWidgetData?.newCommentSection?.commentTreeData?.entityId\">\n <ng-container *ngIf=\"!commentId\">\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\"></d-v2-widget-comment>\n </ng-container>\n <ng-container *ngIf=\"commentId\">\n <div class=\"flex flex-row gap-3 cursor-pointer mb-5\" (click)=\"clearCommentIdFromUrl()\">\n <mat-icon class=\"cursor-pointer\">arrow_back</mat-icon>\n Back to all comments\n </div>\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\" [commentId]=\"commentId\"\n [skeletonLoader]></d-v2-widget-comment>\n </ng-container>\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n <ng-container\n *ngIf=\"config?.samuhikCharchaTab && condition && contentReadData?.eventLinked?.length > 0 && enableSamuhikCharchaTab\">\n <mat-tab label=\"{{ 'apptocsinglepage.samuhikCharcha' | translate }}\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"samuhikCharchaDiv\">\n <ws-widget-samuhik-charcha-content [content]=\"contentReadData\" [conditionData]=\"condition\"\n (resumeContent)=\"resumeContentCall()\">\n </ws-widget-samuhik-charcha-content>\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <!-- Teachers Note Tab -->\n <ng-container *ngIf=\"contentReadData?.referenceNodes && teacherNotesFlag\">\n <mat-tab label=\"Teachers Note\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"teachersNoteDiv\">\n <ws-widget-app-toc-teachers-notes [content]=\"contentReadData\"\n [notesDisplayType]=\"'Teachers Resource'\"></ws-widget-app-toc-teachers-notes>\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <!-- Reference Note Tab -->\n <ng-container *ngIf=\"contentReadData?.referenceNodes && referenceNotesFlag\">\n <mat-tab label=\"Reference Note\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"teachersNoteDiv\">\n <ws-widget-app-toc-teachers-notes [content]=\"contentReadData\"\n [notesDisplayType]=\"'Reference Resource'\"></ws-widget-app-toc-teachers-notes>\n\n <!-- <ws-widget-app-toc-reference-notes [content]=\"contentReadData\"></ws-widget-app-toc-reference-notes> -->\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <ng-container *ngIf=\"showAssignmentsTab && !forPreview\">\n <mat-tab label=\"{{ 'apptocsinglepage.assignments' | translate }}\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"takeAssessmentDiv\">\n <ws-widget-app-batch-assignments [content]=\"content\"></ws-widget-app-batch-assignments>\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <!-- Transcription Tab -->\n <mat-tab label=\"AI Tutor\" *ngIf=\"viewerPage && enableAITutorFlag && isMobile\">\n <ng-template mat-tab-label>\n <div class=\"flex flex-row\">\n <div class=\"flex\">\n <span>AI Tutor</span>\n </div>\n <div class=\"red-circle ml-5\">\n New\n </div>\n </div>\n\n </ng-template>\n <ng-template matTabContent>\n <ng-container *ngIf=\"showAITutorPopup\">\n <div>\n <viewer-ai-tutor [content]=\"content?.identifier\"\n (closeAIPopup)=\"closeAIPopup($event)\"></viewer-ai-tutor>\n </div>\n </ng-container>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n</div>", styles: ["::ng-deep .content-tabs .mat-tab-body-content{overflow:hidden!important;background-color:#eff3f9}::ng-deep .content-tabs .mat-tab-body.mat-tab-body-active{overflow-y:hidden}:host ::ng-deep .sticky-mat-tabs .mat-tab-header{top:96px;z-index:1000;position:sticky;position:-webkit-sticky;background:#eff3f9}#commentsDiv,#samuhikCharchaDiv{margin:1rem auto;min-height:800px}@media screen and (max-width: 768px){.sticky-mat-tabs .mat-tab-header{top:120px;position:fixed;width:100%}.content-tabs{border-radius:16px 16px 0 0;box-shadow:0 -2px 9px #00000014;background-color:#fff}}::ng-deep .contentSticky .mat-tab-header{top:0!important}.ai-tutor-btn{border:2px solid transparent;border-radius:20px;background:linear-gradient(to right,#fff,#fff),linear-gradient(to right,#efa34f,#4881e4);background-clip:padding-box,border-box;background-origin:padding-box,border-box;width:114px}.ai-tutor-get-started{border:2px solid transparent;border-radius:20px;background:linear-gradient(to right,#fff,#fff),linear-gradient(to right,#efa34f,#4881e4);background-clip:padding-box,border-box;background-origin:padding-box,border-box;width:100%;min-height:80px}.ai-tutor-get-started-mobile{border:2px solid transparent;border-radius:20px;background:linear-gradient(to right,#fff,#fff),linear-gradient(to right,#efa34f,#4881e4);background-clip:padding-box,border-box;background-origin:padding-box,border-box;width:96%;min-height:80px}.align-items-center{align-items:center}.w-565{width:565px}.w-98{width:98%}.font-weight-600{font-weight:600;line-height:1}.ai-tutor-label{color:#1b4ca1;font-weight:700}.section-dd{border-radius:32px;border:1px solid #1b4ca1;padding:12px 16px;color:#1b4ca1;width:auto;height:45px;font-size:14px;font-weight:700}::ng-deep .section-dd-container .mat-form-field-wrapper{padding-bottom:.5em!important}::ng-deep .section-dd-container .mat-form-field-infix{width:auto!important}::ng-deep .section-dd-container .mat-form-field-type-mat-native-select .mat-form-field-infix:after{color:#1b4ca1!important}::ng-deep .section-dd-container .mat-form-field-type-mat-native-select .mat-form-field-infix:after{top:35%!important;right:15%!important}::ng-deep .section-dd-container .mat-form-field-type-mat-native-select .mat-input-element{padding-right:65px}::ng-deep .section-dd .mat-form-field-underline{display:none!important}.w-20{width:20%}::ng-deep .highlight{background-color:#ff0!important;font-weight:700!important}.red-circle{background:red;opacity:1;color:#fff;padding:2px 10px;height:14px;width:20px;border-radius:2px;vertical-align:middle;display:flex;justify-content:center;align-items:center;margin-left:8px;margin-top:-10px}.w-60{width:60%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px}.blue-underline{color:#1b4ca1;text-decoration:underline;font-weight:700}.transcript-control{color:#fff;display:flex;align-items:flex-start;justify-content:flex-start}:host ::ng-deep .multiline-select .mat-mdc-select-value-text{white-space:pre-wrap!important}:host ::ng-deep .mat-pseudo-checkbox{display:none!important}:host ::ng-deep .mat-pseudo-checkbox-checked{display:none!important}::ng-deep .multiline-select.mat-form-field{border-bottom:1px solid #1b4ca1!important}::ng-deep .multiline-select-option .mat-mdc-option:focus.mdc-list-item,.mat-mdc-option.mat-mdc-option-active.mdc-list-item{background-color:#e3eeff!important;color:#1b4ca1!important;font-weight:700!important}.transcript-flex-container{display:flex;justify-content:flex-end;width:100%}.selected-option-content{color:#1b4ca1}.ml-5-per{margin-left:5%}.black-text{color:#000;word-wrap:break-word}.subtitle-time{width:20%;word-wrap:break-word}.subtitle-text-slot{width:74%}.w-subtitle-80{width:70%}.w-subtitle-20{width:30%}::ng-deep .mat-mdc-select-panel{background:#fff!important}@media (min-width: 1280px) and (max-width: 1280px){.subtitle-time{width:30%}.subtitle-text-slot{width:70%}}@media (min-width: 1056px) and (max-width: 1232px){.subtitle-time{width:30%}.subtitle-text-slot{width:70%}}@media (min-width: 1024px) and (max-width: 1024px){.subtitle-time{width:30%}.subtitle-text-slot{width:70%}}@media (min-width: 768px) and (max-width: 1023px){.subtitle-time{width:25%}.subtitle-text-slot{width:75%}}@media (min-width: 360px) and (max-width: 360px){.subtitle-time,.subtitle-text-slot{width:50%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px;margin:10px}}@media (min-width: 361px) and (max-width: 540px){.subtitle-time,.subtitle-text-slot{width:50%}.w-subtitle-20{width:40%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px;margin:10px}}@media (min-width: 541px) and (max-width: 767px){.subtitle-time{width:40%}.subtitle-text-slot{width:60%}.w-subtitle-20{width:40%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px;margin:10px}}@media (min-width: 768px){::ng-deep .tab-group-container .mdc-tab{min-width:auto;max-width:max-content;text-align:left;justify-content:start;padding-left:24px;padding-right:24px}.w-60{width:60%}}:host ::ng-deep .tab-group-container ::ng-deep .mat-mdc-tab-header-pagination{z-index:1!important}:host ::ng-deep .transcript-flex-container .mat-mdc-text-field-wrapper{width:100%;padding:10px}:host ::ng-deep .multiline-select.mat-mdc-form-field .mdc-line-ripple{display:none!important}:host ::ng-deep .multiline-select.mat-mdc-form-field:hover .mdc-line-ripple{display:block!important;height:4px!important;color:#1b4ca1!important}:host ::ng-deep .multiline-select.mat-mdc-form-field:hover .mat-mdc-form-field-flex{background-color:#e3eeff!important}:host ::ng-deep .multiline-select .mat-mdc-select-arrow-wrapper{margin-right:10px}\n"], dependencies: [{ kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i11.MatTabContent, selector: "[matTabContent]" }, { kind: "directive", type: i11.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i11.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i11.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }, { kind: "component", type: i12.WidgetCommentComponent, selector: "d-v2-widget-comment", inputs: ["widgetData", "commentId"], outputs: ["commentDataChange"] }, { kind: "component", type: i13.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i14.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "panelWidth", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "directive", type: i14.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i15.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i16.AppTocAboutComponent, selector: "ws-widget-app-toc-about", inputs: ["condition", "kparray", "content", "contentReadData", "baseContentReadData", "skeletonLoader", "sticky", "tocStructure", "pathSet", "config", "resumeData", "forPreview", "showReviews", "batchData", "fromViewer", "selectedBatchData", "selectedTabValue", "fromMarketPlace", "showMarketPlaceCertificate", "languageList", "lockCertificate"], outputs: ["trigerCompletionSurveyForm"] }, { kind: "component", type: i17.AppTocContentComponent, selector: "ws-widget-app-toc-content", inputs: ["batchId", "content", "forPreview", "resumeData", "batchData", "skeletonLoader", "tocStructure", "config", "hierarchyMapData", "pathSet", "componentName", "isPreAssessment", "baseContentReadData", "contentReadData"] }, { kind: "component", type: i18.AppTocTeachersNotesComponent, selector: "ws-widget-app-toc-teachers-notes", inputs: ["content", "notesDisplayType"] }, { kind: "component", type: i19.AppTocBatchAssignmentsComponent, selector: "ws-widget-app-batch-assignments", inputs: ["content"] }, { kind: "component", type: i20.SamuhikCharchaContentComponent, selector: "ws-widget-samuhik-charcha-content", inputs: ["content", "conditionData", "locked"], outputs: ["resumeContent"] }, { kind: "pipe", type: i9.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i21.TranslatePipe, name: "translate" }, { kind: "pipe", type: i22.HighlightPipe, name: "highlight" }] }); }
|
|
774
|
-
}
|
|
775
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContentTocComponent, decorators: [{
|
|
776
|
-
type: Component,
|
|
777
|
-
args: [{ selector: 'ws-widget-content-toc', template: "<!-- && (content?.courseCategory !== courseCategory?.BLENDED_PROGRAM) -->\n<div class=\"ai-tutor-get-started\" *ngIf=\"!viewerPage && enableAITutorFlag && !isMobile\">\n <div class=\"flex flex-row align-items-center\">\n <div class=\"px-2 py-2\">\n <img src=\"assets/icons/bot-chat-small.svg\" height=\"64px\" width=\"64px\" />\n </div>\n <div class=\"flex flex-row align-items-center\">\n <div class=\"py-2\" [ngClass]=\"isMobile ? '' : 'w-565'\">\n <p class=\"font-weight-600\">Get Started with AI Tutor</p>\n <span>Get instant explanations, step-by-step learning guidance, and customised learning tailored just\n for you.</span>\n </div>\n <div class=\"ai-tutor-btn px-2 py-1\">\n <a href=\"javascript:void(0)\" (click)=\"showAiTutorConfirmPopup()\"><img\n src=\"assets/ai-tutor/ai-icon.svg\"> <span class=\"ai-tutor-label\">AI Tutor</span></a>\n </div>\n </div>\n </div>\n</div>\n<div class=\"tab-group-container\">\n <mat-tab-group (selectedTabChange)=\"handleTabChange($event)\" #stickyMenu [class.sticky-mat-tabs]=\"sticky\"\n [selectedIndex]=\"selectedTabIndex\" [ngClass]=\"{'content-tabs':!fromViewer,'contentSticky': forPreview}\">\n\n <!-- Transcription Tab -->\n <mat-tab label=\"Transcription\"\n *ngIf=\"viewerPage && enableTranscriptionFlag && vttLangArr?.length && subTitles?.length\">\n <ng-template mat-tab-label>\n <div class=\"flex flex-row\">\n <div class=\"flex\">\n <span>Transcript</span>\n </div>\n <div class=\"red-circle ml-5\">\n New\n </div>\n </div>\n\n </ng-template>\n <ng-template matTabContent>\n <div class=\"disclaimer my-2\">\n <p class=\"py-2 px-2\">Disclaimer : These transcripts and subtitles are AI-generated and may contain\n errors.</p>\n </div>\n <div class=\"w-full ml-5 mr-5\" *ngIf=\"isMobileForAI\">\n <div class=\"transcript-flex-container mt-2\">\n <mat-form-field class=\"multiline-select\" appearance=\"fill\" style=\"height: auto; width: 100%;\"\n floatLabel=\"never\">\n <mat-select class=\"multiline-select-box pr-5\" [(value)]=\"selectedTranscriptionStyle\"\n (selectionChange)=\"renderSelectedLanguageTranscription($event)\">\n <mat-select-trigger class=\"multiline-select-box-trigger\">\n <div class=\"selected-option-content px-5 py-2\">\n <div class=\"title\"><span\n *ngIf=\"transcriptionActiveLanguage === selectedTranscriptionStyle?.label\">\n <b>Transcript Language: </b></span>\n {{selectedTranscriptionStyle?.language | titlecase}} <span\n *ngIf=\"defaultTranscriptLanguage === selectedTranscriptionStyle?.label\">(Auto)</span>\n </div>\n </div>\n </mat-select-trigger>\n <mat-option class=\"multiline-select-option\" value=\"\" *ngFor=\"let lang of vttLangArr\"\n [value]=\"lang\"\n [ngClass]=\"{'active-option': selectedTranscriptionStyle?.label === lang?.label}\">\n <div class=\"option-content\">\n <div class=\"title\">{{lang?.language | titlecase}}</div>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n <div class=\"ml-4 flex flex-row justify-end transcript-control\">\n <!-- <mat-form-field appearance=\"none\">\n <select matNativeControl required class=\"section-dd\" (change)=\"renderSelectedLanguageTranscription($event)\">\n <option [value]=\"lang?.language\" *ngFor=\"let lang of vttLangArr\" [selected]=\"lang?.label === transcriptionActiveLanguage\">\n <span *ngIf=\"transcriptionActiveLanguage === lang?.label\"> Transcript Language: </span> {{lang?.language | titlecase}} <span *ngIf=\"transcriptionActiveLanguage === lang?.language\">(Auto)</span>\n </option>\n </select>\n </mat-form-field> -->\n <div class=\"flex flex-row w-full\">\n <div [ngClass]=\"!isMobileForAI ? 'w-subtitle-80':'w-full'\">\n <div [ngClass]=\"!isMobileForAI ? 'ml-5-per' : ''\" *ngIf=\"subTitles && subTitles?.length\">\n <!-- Transcription content -->\n <ng-container *ngFor=\"let subtitle of subTitles\">\n <div class=\"flex flex-col my-2\">\n <div class=\"flex flex-row\">\n <div class=\"subtitle-time\">\n <p class=\"cursor-pointer\" (click)=\"playFromSlot(subtitle)\">\n <span class=\"pr-1 blue-underline\"> {{\n formatMsToVttTime(subtitle?.startTime) }} </span>\n <span class=\"black-text\">-</span>\n <span class=\"pl-1 blue-underline\">{{\n formatMsToVttTime(subtitle?.endTime) }}</span>\n </p>\n </div>\n <div class=\"ml-4 subtitle-text-slot mr-4\">\n <p class=\"black-text\" [innerHtml]=\"subtitle?.text\n | highlight : keywordToHighlight?.text\n : ((subtitle?.startTime / 1000) >= keywordToHighlight?.start\n && (subtitle?.endTime / 1000) <= keywordToHighlight?.end)\">\n </p>\n </div>\n </div>\n </div>\n </ng-container>\n </div>\n </div>\n <div class=\"w-subtitle-20\" *ngIf=\"!isMobileForAI\">\n <div class=\"transcript-flex-container mt-2\">\n <mat-form-field class=\"multiline-select\" appearance=\"fill\"\n style=\"height: auto; width: 100%;\" floatLabel=\"never\">\n <mat-select class=\"multiline-select-box pr-5\" [(value)]=\"selectedTranscriptionStyle\"\n (selectionChange)=\"renderSelectedLanguageTranscription($event)\">\n <mat-select-trigger class=\"multiline-select-box-trigger\">\n <div class=\"selected-option-content px-5 py-2\">\n <div class=\"title\"><span\n *ngIf=\"transcriptionActiveLanguage === selectedTranscriptionStyle?.label\">\n <b>Transcript Language: </b></span>\n {{selectedTranscriptionStyle?.language | titlecase}} <span\n *ngIf=\"defaultTranscriptLanguage === selectedTranscriptionStyle?.label\">(Auto)</span>\n </div>\n </div>\n </mat-select-trigger>\n <mat-option class=\"multiline-select-option\" value=\"\"\n *ngFor=\"let lang of vttLangArr\" [value]=\"lang\"\n [ngClass]=\"{'active-option': selectedTranscriptionStyle?.label === lang?.label}\">\n <div class=\"option-content\">\n <div class=\"title\">{{lang?.language | titlecase}}</div>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n </div>\n\n </div>\n <!-- <div class=\"flex flex-row align-items-center my-2\">\n <div>\n <p>0.00</p>\n </div>\n <div class=\"ml-4\">\n <p>AI for Digital Transformation: Machine Learning and Deep Learning Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>\n </div>\n <div class=\"ml-4\">\n <mat-form-field appearance=\"none\">\n <select matNativeControl required class=\"section-dd\">\n <option value=\"\">Transcription Language: English (Auto)</option>\n </select>\n </mat-form-field>\n </div>\n </div> -->\n\n </ng-template>\n </mat-tab>\n\n <!-- About Tab -->\n <mat-tab label=\"{{ 'apptocsinglepage.about' | translate }}\">\n <ng-template matTabContent>\n <div class=\"ai-tutor-get-started-mobile my-2 ml-2\" *ngIf=\"!viewerPage && enableAITutorFlag && isMobile\">\n <div class=\"flex flex-row align-items-center w-98\">\n <div class=\"px-2 py-2\">\n <img src=\"assets/icons/bot-chat-small.svg\" height=\"48px\" width=\"48px\" />\n </div>\n <div class=\"flex flex-row align-items-center w-60\">\n <div class=\"py-2\">\n <p class=\"font-weight-600\">Get Started with AI Tutor</p>\n <span>Get instant explanations, step-by-step learning guidance, and customised learning\n tailored just for you.</span>\n </div>\n\n </div>\n <div class=\"ai-tutor-btn px-2 py-1\">\n <a href=\"javascript:void(0)\" (click)=\"showAiTutorConfirmPopup()\"><img\n src=\"assets/ai-tutor/ai-icon.svg\"> <span class=\"ai-tutor-label\">AI\n Tutor</span></a>\n </div>\n\n </div>\n <!-- <div class=\"flex justify-end my-2 mx-2\">\n <div class=\"ai-tutor-btn px-2 py-1\">\n <a href=\"javascript:void(0)\" (click)=\"showAiTutorConfirmPopup()\"><img src=\"assets/ai-tutor/ai-icon.svg\"> <span class=\"ai-tutor-label\">AI Tutor</span></a>\n </div>\n </div> -->\n </div>\n <ws-widget-app-toc-about [fromViewer]=\"fromViewer\" [pathSet]=\"pathSet\" [content]=\"content\"\n [contentReadData]=\"contentReadData\" [baseContentReadData]=\"baseContentReadData\"\n [tocStructure]=\"tocStructure\" [config]=\"config\" [forPreview]=\"false\" [sticky]=\"sticky\"\n [selectedBatchData]=\"selectedBatchData\" [selectedTabValue]=\"selectedTabIndex\"\n [resumeData]=\"resumeData\" [batchData]=\"batchData\" [skeletonLoader]=\"skeletonLoader\"\n [condition]=\"condition\" [kparray]=\"kparray\" [showReviews]=\"'true'\" [languageList]=\"languageList\"\n [lockCertificate]=\"lockCertificate\" (trigerCompletionSurveyForm)=\"openSurveyFormPopup($event)\">\n </ws-widget-app-toc-about>\n </ng-template>\n </mat-tab>\n\n <!-- Content Tab -->\n <ng-container *ngIf=\"content?.children?.length\">\n <mat-tab label=\"{{ 'apptocsinglepage.content' | translate }}\" *ngIf=\"contentTabFlag\">\n <ng-template matTabContent>\n <ws-widget-app-toc-content [batchId]=\"batchId\" [componentName]=\"componentName\" [pathSet]=\"pathSet\"\n [content]=\"content\" [tocStructure]=\"tocStructure\" [config]=\"config\" [forPreview]=\"forPreview\"\n [resumeData]=\"resumeData\" [batchData]=\"batchData\" [skeletonLoader]=\"skeletonLoader\"\n [hierarchyMapData]=\"hierarchyMapData\" [baseContentReadData]=\"baseContentReadData\">\n </ws-widget-app-toc-content>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <ng-container *ngIf=\"config?.commentsTab && !forPreview\">\n <mat-tab label=\"{{ 'apptocsinglepage.startDiscussion' | translate }}\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"commentsDiv\"\n *ngIf=\"discussWidgetData && discussWidgetData?.newCommentSection?.commentTreeData?.entityId\">\n <ng-container *ngIf=\"!commentId\">\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\"></d-v2-widget-comment>\n </ng-container>\n <ng-container *ngIf=\"commentId\">\n <div class=\"flex flex-row gap-3 cursor-pointer mb-5\" (click)=\"clearCommentIdFromUrl()\">\n <mat-icon class=\"cursor-pointer\">arrow_back</mat-icon>\n Back to all comments\n </div>\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\" [commentId]=\"commentId\"\n [skeletonLoader]></d-v2-widget-comment>\n </ng-container>\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n <ng-container\n *ngIf=\"config?.samuhikCharchaTab && condition && contentReadData?.eventLinked?.length > 0 && enableSamuhikCharchaTab\">\n <mat-tab label=\"{{ 'apptocsinglepage.samuhikCharcha' | translate }}\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"samuhikCharchaDiv\">\n <ws-widget-samuhik-charcha-content [content]=\"contentReadData\" [conditionData]=\"condition\"\n (resumeContent)=\"resumeContentCall()\">\n </ws-widget-samuhik-charcha-content>\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <!-- Teachers Note Tab -->\n <ng-container *ngIf=\"contentReadData?.referenceNodes && teacherNotesFlag\">\n <mat-tab label=\"Teachers Note\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"teachersNoteDiv\">\n <ws-widget-app-toc-teachers-notes [content]=\"contentReadData\"\n [notesDisplayType]=\"'Teachers Resource'\"></ws-widget-app-toc-teachers-notes>\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <!-- Reference Note Tab -->\n <ng-container *ngIf=\"contentReadData?.referenceNodes && referenceNotesFlag\">\n <mat-tab label=\"Reference Note\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"teachersNoteDiv\">\n <ws-widget-app-toc-teachers-notes [content]=\"contentReadData\"\n [notesDisplayType]=\"'Reference Resource'\"></ws-widget-app-toc-teachers-notes>\n\n <!-- <ws-widget-app-toc-reference-notes [content]=\"contentReadData\"></ws-widget-app-toc-reference-notes> -->\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <ng-container *ngIf=\"showAssignmentsTab && !forPreview\">\n <mat-tab label=\"{{ 'apptocsinglepage.assignments' | translate }}\">\n <ng-template matTabContent>\n <div class=\"flex flex-col ratings-div mt-5\" id=\"takeAssessmentDiv\">\n <ws-widget-app-batch-assignments [content]=\"content\"></ws-widget-app-batch-assignments>\n </div>\n </ng-template>\n </mat-tab>\n </ng-container>\n\n <!-- Transcription Tab -->\n <mat-tab label=\"AI Tutor\" *ngIf=\"viewerPage && enableAITutorFlag && isMobile\">\n <ng-template mat-tab-label>\n <div class=\"flex flex-row\">\n <div class=\"flex\">\n <span>AI Tutor</span>\n </div>\n <div class=\"red-circle ml-5\">\n New\n </div>\n </div>\n\n </ng-template>\n <ng-template matTabContent>\n <ng-container *ngIf=\"showAITutorPopup\">\n <div>\n <viewer-ai-tutor [content]=\"content?.identifier\"\n (closeAIPopup)=\"closeAIPopup($event)\"></viewer-ai-tutor>\n </div>\n </ng-container>\n </ng-template>\n </mat-tab>\n </mat-tab-group>\n</div>", styles: ["::ng-deep .content-tabs .mat-tab-body-content{overflow:hidden!important;background-color:#eff3f9}::ng-deep .content-tabs .mat-tab-body.mat-tab-body-active{overflow-y:hidden}:host ::ng-deep .sticky-mat-tabs .mat-tab-header{top:96px;z-index:1000;position:sticky;position:-webkit-sticky;background:#eff3f9}#commentsDiv,#samuhikCharchaDiv{margin:1rem auto;min-height:800px}@media screen and (max-width: 768px){.sticky-mat-tabs .mat-tab-header{top:120px;position:fixed;width:100%}.content-tabs{border-radius:16px 16px 0 0;box-shadow:0 -2px 9px #00000014;background-color:#fff}}::ng-deep .contentSticky .mat-tab-header{top:0!important}.ai-tutor-btn{border:2px solid transparent;border-radius:20px;background:linear-gradient(to right,#fff,#fff),linear-gradient(to right,#efa34f,#4881e4);background-clip:padding-box,border-box;background-origin:padding-box,border-box;width:114px}.ai-tutor-get-started{border:2px solid transparent;border-radius:20px;background:linear-gradient(to right,#fff,#fff),linear-gradient(to right,#efa34f,#4881e4);background-clip:padding-box,border-box;background-origin:padding-box,border-box;width:100%;min-height:80px}.ai-tutor-get-started-mobile{border:2px solid transparent;border-radius:20px;background:linear-gradient(to right,#fff,#fff),linear-gradient(to right,#efa34f,#4881e4);background-clip:padding-box,border-box;background-origin:padding-box,border-box;width:96%;min-height:80px}.align-items-center{align-items:center}.w-565{width:565px}.w-98{width:98%}.font-weight-600{font-weight:600;line-height:1}.ai-tutor-label{color:#1b4ca1;font-weight:700}.section-dd{border-radius:32px;border:1px solid #1b4ca1;padding:12px 16px;color:#1b4ca1;width:auto;height:45px;font-size:14px;font-weight:700}::ng-deep .section-dd-container .mat-form-field-wrapper{padding-bottom:.5em!important}::ng-deep .section-dd-container .mat-form-field-infix{width:auto!important}::ng-deep .section-dd-container .mat-form-field-type-mat-native-select .mat-form-field-infix:after{color:#1b4ca1!important}::ng-deep .section-dd-container .mat-form-field-type-mat-native-select .mat-form-field-infix:after{top:35%!important;right:15%!important}::ng-deep .section-dd-container .mat-form-field-type-mat-native-select .mat-input-element{padding-right:65px}::ng-deep .section-dd .mat-form-field-underline{display:none!important}.w-20{width:20%}::ng-deep .highlight{background-color:#ff0!important;font-weight:700!important}.red-circle{background:red;opacity:1;color:#fff;padding:2px 10px;height:14px;width:20px;border-radius:2px;vertical-align:middle;display:flex;justify-content:center;align-items:center;margin-left:8px;margin-top:-10px}.w-60{width:60%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px}.blue-underline{color:#1b4ca1;text-decoration:underline;font-weight:700}.transcript-control{color:#fff;display:flex;align-items:flex-start;justify-content:flex-start}:host ::ng-deep .multiline-select .mat-mdc-select-value-text{white-space:pre-wrap!important}:host ::ng-deep .mat-pseudo-checkbox{display:none!important}:host ::ng-deep .mat-pseudo-checkbox-checked{display:none!important}::ng-deep .multiline-select.mat-form-field{border-bottom:1px solid #1b4ca1!important}::ng-deep .multiline-select-option .mat-mdc-option:focus.mdc-list-item,.mat-mdc-option.mat-mdc-option-active.mdc-list-item{background-color:#e3eeff!important;color:#1b4ca1!important;font-weight:700!important}.transcript-flex-container{display:flex;justify-content:flex-end;width:100%}.selected-option-content{color:#1b4ca1}.ml-5-per{margin-left:5%}.black-text{color:#000;word-wrap:break-word}.subtitle-time{width:20%;word-wrap:break-word}.subtitle-text-slot{width:74%}.w-subtitle-80{width:70%}.w-subtitle-20{width:30%}::ng-deep .mat-mdc-select-panel{background:#fff!important}@media (min-width: 1280px) and (max-width: 1280px){.subtitle-time{width:30%}.subtitle-text-slot{width:70%}}@media (min-width: 1056px) and (max-width: 1232px){.subtitle-time{width:30%}.subtitle-text-slot{width:70%}}@media (min-width: 1024px) and (max-width: 1024px){.subtitle-time{width:30%}.subtitle-text-slot{width:70%}}@media (min-width: 768px) and (max-width: 1023px){.subtitle-time{width:25%}.subtitle-text-slot{width:75%}}@media (min-width: 360px) and (max-width: 360px){.subtitle-time,.subtitle-text-slot{width:50%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px;margin:10px}}@media (min-width: 361px) and (max-width: 540px){.subtitle-time,.subtitle-text-slot{width:50%}.w-subtitle-20{width:40%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px;margin:10px}}@media (min-width: 541px) and (max-width: 767px){.subtitle-time{width:40%}.subtitle-text-slot{width:60%}.w-subtitle-20{width:40%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px;margin:10px}}@media (min-width: 768px){::ng-deep .tab-group-container .mdc-tab{min-width:auto;max-width:max-content;text-align:left;justify-content:start;padding-left:24px;padding-right:24px}.w-60{width:60%}}:host ::ng-deep .tab-group-container ::ng-deep .mat-mdc-tab-header-pagination{z-index:1!important}:host ::ng-deep .transcript-flex-container .mat-mdc-text-field-wrapper{width:100%;padding:10px}:host ::ng-deep .multiline-select.mat-mdc-form-field .mdc-line-ripple{display:none!important}:host ::ng-deep .multiline-select.mat-mdc-form-field:hover .mdc-line-ripple{display:block!important;height:4px!important;color:#1b4ca1!important}:host ::ng-deep .multiline-select.mat-mdc-form-field:hover .mat-mdc-form-field-flex{background-color:#e3eeff!important}:host ::ng-deep .multiline-select .mat-mdc-select-arrow-wrapper{margin-right:10px}\n"] }]
|
|
778
|
-
}], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.UtilityService }, { type: i3.LoadCheckService }, { type: i2.ConfigurationsService }, { type: i4.MatLegacyDialog }, { type: i5.AppTocService }, { type: i6.ActionService }, { type: i1.Router }, { type: i2.EventService }, { type: i7.ViewerDataService }, { type: i8.SamuhikCharchaService }, { type: undefined, decorators: [{
|
|
779
|
-
type: Inject,
|
|
780
|
-
args: ['environment']
|
|
781
|
-
}] }]; }, propDecorators: { content: [{
|
|
782
|
-
type: Input
|
|
783
|
-
}], contentReadData: [{
|
|
784
|
-
type: Input
|
|
785
|
-
}], initialRouteData: [{
|
|
786
|
-
type: Input
|
|
787
|
-
}], changeTab: [{
|
|
788
|
-
type: Input
|
|
789
|
-
}], baseContentReadData: [{
|
|
790
|
-
type: Input
|
|
791
|
-
}], forPreview: [{
|
|
792
|
-
type: Input
|
|
793
|
-
}], contentTabFlag: [{
|
|
794
|
-
type: Input
|
|
795
|
-
}], resumeData: [{
|
|
796
|
-
type: Input
|
|
797
|
-
}], batchData: [{
|
|
798
|
-
type: Input
|
|
799
|
-
}], skeletonLoader: [{
|
|
800
|
-
type: Input
|
|
801
|
-
}], tocStructure: [{
|
|
802
|
-
type: Input
|
|
803
|
-
}], pathSet: [{
|
|
804
|
-
type: Input
|
|
805
|
-
}], fromViewer: [{
|
|
806
|
-
type: Input
|
|
807
|
-
}], hierarchyMapData: [{
|
|
808
|
-
type: Input
|
|
809
|
-
}], tabElement: [{
|
|
810
|
-
type: ViewChild,
|
|
811
|
-
args: ['stickyMenu']
|
|
812
|
-
}], tabs: [{
|
|
813
|
-
type: ViewChildren,
|
|
814
|
-
args: [MatTab]
|
|
815
|
-
}], condition: [{
|
|
816
|
-
type: Input
|
|
817
|
-
}], kparray: [{
|
|
818
|
-
type: Input
|
|
819
|
-
}], selectedBatchData: [{
|
|
820
|
-
type: Input
|
|
821
|
-
}], config: [{
|
|
822
|
-
type: Input
|
|
823
|
-
}], componentName: [{
|
|
824
|
-
type: Input
|
|
825
|
-
}], isEnrolled: [{
|
|
826
|
-
type: Input
|
|
827
|
-
}], playResourceId: [{
|
|
828
|
-
type: Input
|
|
829
|
-
}], sideNavBarOpened: [{
|
|
830
|
-
type: Input
|
|
831
|
-
}], languageList: [{
|
|
832
|
-
type: Input
|
|
833
|
-
}], lockCertificate: [{
|
|
834
|
-
type: Input
|
|
835
|
-
}], playResumeForAI: [{
|
|
836
|
-
type: Output
|
|
837
|
-
}], enrollUserToAI: [{
|
|
838
|
-
type: Output
|
|
839
|
-
}], trigerCompletionSurveyForm: [{
|
|
840
|
-
type: Output
|
|
841
|
-
}], resumeContent: [{
|
|
842
|
-
type: Output
|
|
843
|
-
}], handleScroll: [{
|
|
844
|
-
type: HostListener,
|
|
845
|
-
args: ['window:scroll', ['$event']]
|
|
846
|
-
}] } });
|
|
847
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC10b2MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL19jb2xsZWN0aW9uL19jb21tb24vY29udGVudC10b2MvY29udGVudC10b2MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL19jb2xsZWN0aW9uL19jb21tb24vY29udGVudC10b2MvY29udGVudC10b2MuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQTRCLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFakwsT0FBTyxFQUF1QyxTQUFTLEVBQWtCLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBTS9HLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDJEQUEyRCxDQUFBO0FBQ3hHLE9BQU8sRUFBZ0MscUJBQXFCLElBQUksZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUE7QUFDeEgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0NBQXNDLENBQUE7QUFHM0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQzlDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUVwQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFFL0MsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU8zQixNQUFNLE9BQU8sbUJBQW1CO0lBcUU5QixZQUNVLEtBQXFCLEVBQ3JCLGNBQThCLEVBQzlCLGdCQUFrQyxFQUNs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Q0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNJLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRywwQkFBMEI7c0JBQW5DLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkF3VlAsWUFBWTtzQkFEWCxZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIEluamVjdCwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcidcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25zU2VydmljZSwgRXZlbnRTZXJ2aWNlLCBOc0NvbnRlbnQsIFV0aWxpdHlTZXJ2aWNlLCBXc0V2ZW50cyB9IGZyb20gJ0BzdW5iaXJkLWNiL3V0aWxzLXYyJ1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcydcblxuaW1wb3J0IHsgTG9hZENoZWNrU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2xvYWQtY2hlY2suc2VydmljZSdcbmltcG9ydCB7IE1hdExlZ2FjeVRhYkdyb3VwIGFzIE1hdFRhYkdyb3VwLCBNYXRMZWdhY3lUYWJDaGFuZ2VFdmVudCBhcyBNYXRUYWJDaGFuZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xlZ2FjeS10YWJzJ1xuaW1wb3J0IHsgTnNEaXNjdXNzaW9uVjIgfSBmcm9tICdAc3VuYmlyZC1jYi9kaXNjdXNzaW9uLXYyJ1xuaW1wb3J0IHsgQWlUdXRvckNvbmZpcm1Qb3B1cENvbXBvbmVudCB9IGZyb20gJy4vYWktdHV0b3ItY29uZmlybS1wb3B1cC9haS10dXRvci1jb25maXJtLXBvcHVwLmNvbXBvbmVudCdcbmltcG9ydCB7IE1hdExlZ2FjeURpYWxvZyBhcyBNYXREaWFsb2csIE1hdExlZ2FjeURpYWxvZ0NvbmZpZyBhcyBNYXREaWFsb2dDb25maWcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktZGlhbG9nJ1xuaW1wb3J0IHsgdmlld2VyUm91dGVHZW5lcmF0b3IgfSBmcm9tICcuLi8uLi8uLi9fc2VydmljZXMvdmlld2VyLXJvdXRlLXV0aWwnXG5pbXBvcnQgeyBBcHBUb2NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXBwLXRvYy5zZXJ2aWNlJ1xuaW1wb3J0IHsgQWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2FjdGlvbi5zZXJ2aWNlJ1xuaW1wb3J0IHsgVnR0RmlsZSB9IGZyb20gJ0Bwb2x5ZmxpeC92dHQtcGFyc2VyJ1xuaW1wb3J0IHsgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5pbXBvcnQgeyBWaWV3ZXJEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3ZpZXdlci1kYXRhLnNlcnZpY2UnXG5pbXBvcnQgeyBNYXRUYWIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJzJ1xuaW1wb3J0IHsgU2FtdWhpa0NoYXJjaGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vX3NlcnZpY2VzL3NhbXVoaWstY2hhcmNoYS5zZXJ2aWNlJ1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd3cy13aWRnZXQtY29udGVudC10b2MnLFxuICB0ZW1wbGF0ZVVybDogJy4vY29udGVudC10b2MuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jb250ZW50LXRvYy5jb21wb25lbnQuc2NzcyddLFxufSlcblxuZXhwb3J0IGNsYXNzIENvbnRlbnRUb2NDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG5cbiAgdGFiQ2hhbmdlVmFsdWU6IGFueSA9ICcnXG4gIEBJbnB1dCgpIGNvbnRlbnQhOiBhbnlcbiAgQElucHV0KCkgY29udGVudFJlYWREYXRhITogYW55XG4gIEBJbnB1dCgpIGluaXRpYWxSb3V0ZURhdGE6IGFueVxuICBASW5wdXQoKSBjaGFuZ2VUYWIgPSBmYWxzZVxuICBASW5wdXQoKSBiYXNlQ29udGVudFJlYWREYXRhITogYW55XG4gIHJvdXRlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbFxuICBASW5wdXQoKSBmb3JQcmV2aWV3ID0gd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJy9wdWJsaWMvJykgfHwgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJyZwcmV2aWV3PXRydWUnKVxuICBASW5wdXQoKSBjb250ZW50VGFiRmxhZyA9IHRydWVcbiAgQElucHV0KCkgcmVzdW1lRGF0YTogYW55IHwgbnVsbCA9IG51bGxcbiAgQElucHV0KCkgYmF0Y2hEYXRhOiAvKipOc0NvbnRlbnQuSUJhdGNoTGlzdFJlc3BvbnNlICovIGFueSB8IG51bGwgPSBudWxsXG4gIEBJbnB1dCgpIHNrZWxldG9uTG9hZGVyID0gZmFsc2VcbiAgQElucHV0KCkgdG9jU3RydWN0dXJlOiBhbnkgPSB7fVxuICBASW5wdXQoKSBwYXRoU2V0OiBhbnlcbiAgQElucHV0KCkgZnJvbVZpZXdlciA9IGZhbHNlXG4gIEBJbnB1dCgpIGhpZXJhcmNoeU1hcERhdGE6IGFueSA9IHt9XG4gIEBWaWV3Q2hpbGQoJ3N0aWNreU1lbnUnKSB0YWJFbGVtZW50ITogTWF0VGFiR3JvdXBcbiAgQFZpZXdDaGlsZHJlbihNYXRUYWIpIHRhYnMhOiBRdWVyeUxpc3Q8TWF0VGFiPlxuICBASW5wdXQoKSBjb25kaXRpb246IGFueVxuICBASW5wdXQoKSBrcGFycmF5OiBhbnlcbiAgQElucHV0KCkgc2VsZWN0ZWRCYXRjaERhdGE6IGFueVxuICBASW5wdXQoKSBjb25maWc6IGFueVxuICBASW5wdXQoKSBjb21wb25lbnROYW1lITogc3RyaW5nXG4gIEBJbnB1dCgpIGlzRW5yb2xsZWQhOiBib29sZWFuXG4gIEBJbnB1dCgpIHBsYXlSZXNvdXJjZUlkID0gJydcbiAgQElucHV0KCkgc2lkZU5hdkJhck9wZW5lZCA9IGZhbHNlXG4gIEBJbnB1dCgpIGxhbmd1YWdlTGlzdCA9IFtdXG4gIEBJbnB1dCgpIGxvY2tDZXJ0aWZpY2F0ZSA9IGZhbHNlXG4gIEBPdXRwdXQoKSBwbGF5UmVzdW1lRm9yQUkgPSBuZXcgRXZlbnRFbWl0dGVyKClcbiAgQE91dHB1dCgpIGVucm9sbFVzZXJUb0FJID0gbmV3IEV2ZW50RW1pdHRlcigpXG4gIEBPdXRwdXQoKSB0cmlnZXJDb21wbGV0aW9uU3VydmV5Rm9ybSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKVxuICBAT3V0cHV0KCkgcmVzdW1lQ29udGVudCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKVxuXG4gIGNvbW1lbnRJZD86IHN0cmluZyA9ICcnXG4gIHN0aWNreSA9IGZhbHNlXG4gIG1lbnVQb3NpdGlvbjogYW55XG4gIGlzTW9iaWxlID0gZmFsc2VcbiAgc2VsZWN0ZWRUYWJJbmRleCA9IDBcbiAgZGlzY3Vzc1dpZGdldERhdGEhOiBOc0Rpc2N1c3Npb25WMi5JQ29tbWVudFdpZGdldERhdGFcbiAgdGVhY2hlck5vdGVzRmxhZyA9IGZhbHNlXG4gIHJlZmVyZW5jZU5vdGVzRmxhZyA9IGZhbHNlXG4gIHZpZXdlclBhZ2UgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnL3ZpZXdlci8nKSA/IHRydWUgOiBmYWxzZVxuICByZXN1bWVEYXRhTGluazogYW55XG4gIGVuYWJsZUFJVHV0b3JGbGFnID0gZmFsc2VcbiAgZW5hYmxlVHJhbnNjcmlwdGlvbkZsYWcgPSBmYWxzZVxuICBjb3Vyc2VDYXRlZ29yeSA9IE5zQ29udGVudC5FQ291cnNlQ2F0ZWdvcnlcbiAgc3ViVGl0bGVzJDogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGxcbiAgcmVzb3VyY2VJZGVudGlmaWVyOiBhbnlcbiAgcmVzb3VyY2VJZGVudGlmaWVyJDogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGxcbiAgc3ViVGl0bGVzOiBhbnkgPSBbXVxuICBrZXl3b3JkVG9IaWdobGlnaHQ6IGFueSA9ICcnXG4gIGhpZ2hsaWdodENvbmRpdGlvbiA9IGZhbHNlXG4gIHZ0dExhbmdBcnI6IGFueSA9IFtdXG4gIHRyYW5zY3JpcHRpb25BY3RpdmVMYW5ndWFnZSA9ICdlbidcbiAgZGVmYXVsdFRyYW5zY3JpcHRMYW5ndWFnZSA9ICdlbidcbiAgdHJhbnNyaXB0aW9uTGFuZ3VhZ2VTdWI6IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsXG4gIHNlbGVjdGVkVHJhbnNjcmlwdGlvblN0eWxlOiBhbnlcbiAgZnJvbUFJVHV0b3IgPSBmYWxzZVxuICB0b3RhbFJlc291cmNlID0gMFxuICBzY29ybUFzc2Vzc21lbnRDb3VudCA9IDBcbiAgc2hvd0FJVHV0b3JQb3B1cCA9IGZhbHNlXG4gIGZyb21BSVNlbGVjdGVkVGFiSW5kZXggPSBmYWxzZVxuICBpc01vYmlsZUZvckFJID0gZmFsc2VcbiAgdHJhbnNjcmlwdEFjdGl2ZUxhbmd1YWdlVGV4dCA9ICdFbmdsaXNoJ1xuICBzaG93QXNzaWdubWVudHNUYWIgPSBmYWxzZVxuICBlbmFibGVTYW11aGlrQ2hhcmNoYVRhYiA9IGZhbHNlXG4gIHNhbXVoaWtDb25maWc6IGFueVxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHV0aWxpdHlTZXJ2aWNlOiBVdGlsaXR5U2VydmljZSxcbiAgICBwcml2YXRlIGxvYWRDaGVja1NlcnZpY2U6IExvYWRDaGVja1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maWdTZXJ2aWNlOiBDb25maWd1cmF0aW9uc1NlcnZpY2UsXG4gICAgcHVibGljIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgIHB1YmxpYyB0b2NTdmM6IEFwcFRvY1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY3Rpb25TVkM6IEFjdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGV2ZW50U3ZjOiBFdmVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB2aWV3ZXJEYXRhU3ZjOiBWaWV3ZXJEYXRhU2VydmljZSxcbiAgICBwcml2YXRlIHNhbXVoaWtDaGFyY2hhU3ZjOiBTYW11aGlrQ2hhcmNoYVNlcnZpY2UsXG4gICAgQEluamVjdCgnZW52aXJvbm1lbnQnKSBwcml2YXRlIGVudmlyb25tZW50OiBhbnlcblxuICApIHsgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnICYmIHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWc/LmFpVHV0b3IgJiYgdGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZz8uYWlUdXRvcj8uYWxsKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZygndGhpcy5jb250ZW50UmVhZERhdGEtLScsIHRoaXMucm91dGUuc25hcHNob3QuZGF0YSlcbiAgICAgIHRoaXMuZW5hYmxlQUlUdXRvckZsYWcgPSB0aGlzLm9ubHlzY29ybUFzc2Vzc21lbnRFeGlzdHModGhpcy5yb3V0ZS5zbmFwc2hvdD8uZGF0YT8uY29udGVudD8uZGF0YT8uY2hpbGRyZW4sICdtaW1lVHlwZScsIFsnYXBwbGljYXRpb24vdm5kLmVrc3RlcC5odG1sLWFyY2hpdmUnLCAnYXBwbGljYXRpb24vdm5kLnN1bmJpcmQucXVlc3Rpb25zZXQnLCAnYXBwbGljYXRpb24vanNvbicsICd0ZXh0L3gtdXJsJ10pXG4gICAgICAvLyB0aGlzLmVuYWJsZUFJVHV0b3JGbGFnID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZyAmJiB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnPy5haVR1dG9yICYmIHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWc/LmFpVHV0b3I/LmZvck9yZyAmJiB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnLmFpVHV0b3I/LmZvck9yZz8ubGVuZ3RoICYmXG4gICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnPy5haVR1dG9yPy5mb3JPcmcuaW5jbHVkZXModGhpcy5jb25maWdTZXJ2aWNlLnVzZXJQcm9maWxlPy5yb290T3JnSWQpXG4gICAgKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZygndGhpcy5jb250ZW50UmVhZERhdGEtLScsIHRoaXMucm91dGUuc25hcHNob3QuZGF0YSlcbiAgICAgIHRoaXMuZW5hYmxlQUlUdXRvckZsYWcgPSB0aGlzLm9ubHlzY29ybUFzc2Vzc21lbnRFeGlzdHModGhpcy5yb3V0ZS5zbmFwc2hvdD8uZGF0YT8uY29udGVudD8uZGF0YT8uY2hpbGRyZW4sICdtaW1lVHlwZScsIFsnYXBwbGljYXRpb24vdm5kLmVrc3RlcC5odG1sLWFyY2hpdmUnLCAnYXBwbGljYXRpb24vdm5kLnN1bmJpcmQucXVlc3Rpb25zZXQnLCAnYXBwbGljYXRpb24vanNvbicsICd0ZXh0L3gtdXJsJ10pXG4gICAgICAvLyB0aGlzLmVuYWJsZUFJVHV0b3JGbGFnID0gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVuYWJsZUFJVHV0b3JGbGFnID0gZmFsc2VcbiAgICB9XG4gICAgaWYgKHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWcgJiYgdGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZz8udHJhbnNjcmlwdGlvbj8uYWxsKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZygnaW4nKVxuICAgICAgLy8gdGhpcy5yZXNvdXJjZUlkZW50aWZpZXIkID0gdGhpcy50b2NTdmMudHJhbnNyaXB0aW9uSWRlbnRpZmllci5zdWJzY3JpYmUoKHZhbHVlOmFueSk9PntcbiAgICAgIC8vICAgLy8gIGNvbnNvbGUubG9nKCdyZXNvdXJjZSBpZGVudGlmaWVyJywgdmFsdWUpXG4gICAgICAvLyAgIGlmKHZhbHVlICYmICB2YWx1ZT8uaWRlbnRpZmllcikge1xuICAgICAgLy8gICAgIHRoaXMucmVzb3VyY2VJZGVudGlmaWVyID0gdmFsdWU/LmlkZW50aWZpZXIgLy92YWx1ZT8uaWRlbnRpZmllciAvLyBkb18xMTM4ODkxMTk4NDg5MDY3NTIxMTQ3XG4gICAgICAvLyAgICAgdGhpcy5wYXJzZVZUVCgpXG4gICAgICAvLyAgIH1cblxuICAgICAgLy8gfSlcblxuICAgICAgdGhpcy5zdWJUaXRsZXMkID0gdGhpcy50b2NTdmMudHJhbnNjcmlwdGlvbkRhdGEkLnN1YnNjcmliZSgodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAvLyAgY29uc29sZS5sb2coJ3ZhbHVlJywgdmFsdWUpXG4gICAgICAgIHRoaXMua2V5d29yZFRvSGlnaGxpZ2h0ID0gdmFsdWVcbiAgICAgIH0pXG5cbiAgICAgIHRoaXMudHJhbnNyaXB0aW9uTGFuZ3VhZ2VTdWIgPSB0aGlzLnRvY1N2Yy50cmFuc3JpcHRpb25BY3RpdmVMYW5ndWFnZURhdGFPYmplY3QkXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRhcCgobGFuZ3ZhbHVlOiBhbnkpID0+IGNvbnNvbGUubG9nKCd0YXAgbGFuZ3ZhbHVlOicsIGxhbmd2YWx1ZSkpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgobGFuZ3ZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnbGFuZ1ZhbHVlJywgbGFuZ3ZhbHVlKTtcbiAgICAgICAgICBpZiAobGFuZ3ZhbHVlKSB7XG4gICAgICAgICAgICAvLyB0aGlzLnJlbmRlclNlbGVjdGVkTGFuZ3VhZ2VUcmFuc2NyaXB0aW9uKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0pXG4gICAgICB0aGlzLmVuYWJsZVRyYW5zY3JpcHRpb25GbGFnID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZyAmJiB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnPy50cmFuc2NyaXB0aW9uICYmIHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWc/LnRyYW5zY3JpcHRpb24/LmZvck9yZyAmJiB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnPy50cmFuc2NyaXB0aW9uPy5mb3JPcmc/Lmxlbmd0aCAmJlxuICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZz8udHJhbnNjcmlwdGlvbj8uZm9yT3JnPy5pbmNsdWRlcyh0aGlzLmNvbmZpZ1NlcnZpY2UudXNlclByb2ZpbGU/LnJvb3RPcmdJZClcbiAgICApIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdpbicpXG4gICAgICAvLyB0aGlzLnJlc291cmNlSWRlbnRpZmllciQgPSB0aGlzLnRvY1N2Yy50cmFuc3JpcHRpb25JZGVudGlmaWVyLnN1YnNjcmliZSgodmFsdWU6YW55KT0+e1xuICAgICAgLy8gICAvLyAgY29uc29sZS5sb2coJ3Jlc291cmNlIGlkZW50aWZpZXInLCB2YWx1ZSlcbiAgICAgIC8vICAgaWYodmFsdWUgJiYgIHZhbHVlPy5pZGVudGlmaWVyKSB7XG4gICAgICAvLyAgICAgdGhpcy5yZXNvdXJjZUlkZW50aWZpZXIgPSB2YWx1ZT8uaWRlbnRpZmllciAvL3ZhbHVlPy5pZGVudGlmaWVyIC8vIGRvXzExMzg4OTExOTg0ODkwNjc1MjExNDdcbiAgICAgIC8vICAgICB0aGlzLnBhcnNlVlRUKClcbiAgICAgIC8vICAgfVxuXG4gICAgICAvLyB9KVxuXG4gICAgICB0aGlzLnN1YlRpdGxlcyQgPSB0aGlzLnRvY1N2Yy50cmFuc2NyaXB0aW9uRGF0YSQuc3Vic2NyaWJlKCh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgIC8vICBjb25zb2xlLmxvZygndmFsdWUnLCB2YWx1ZSlcbiAgICAgICAgdGhpcy5rZXl3b3JkVG9IaWdobGlnaHQgPSB2YWx1ZVxuICAgICAgfSlcblxuICAgICAgdGhpcy50cmFuc3JpcHRpb25MYW5ndWFnZVN1YiA9IHRoaXMudG9jU3ZjLnRyYW5zcmlwdGlvbkFjdGl2ZUxhbmd1YWdlRGF0YU9iamVjdCRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFwKChsYW5ndmFsdWU6IGFueSkgPT4gY29uc29sZS5sb2coJ3RhcCBsYW5ndmFsdWU6JywgbGFuZ3ZhbHVlKSlcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChsYW5ndmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdsYW5nVmFsdWUnLCBsYW5ndmFsdWUpO1xuICAgICAgICAgIGlmIChsYW5ndmFsdWUpIHtcbiAgICAgICAgICAgIC8vIHRoaXMucmVuZGVyU2VsZWN0ZWRMYW5ndWFnZVRyYW5zY3JpcHRpb24oKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgfSlcbiAgICAgIHRoaXMuZW5hYmxlVHJhbnNjcmlwdGlvbkZsYWcgPSB0cnVlXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW5hYmxlVHJhbnNjcmlwdGlvbkZsYWcgPSBmYWxzZVxuICAgIH1cblxuICAgIGNvbnN0IGJhdGNoSWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLmJhdGNoSWQgP1xuICAgICAgdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcy5iYXRjaElkIDogJydcbiAgICBpZiAoYmF0Y2hJZCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gMVxuICAgIH1cbiAgICB0aGlzLmNvbW1lbnRJZCA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMuY29tbWVudElkID8gdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcy5jb21tZW50SWQgOiAnJ1xuICAgIGlmICh0aGlzLmNvbW1lbnRJZCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gMlxuICAgIH1cblxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuaXNNb2JpbGUgPSB0aGlzLnV0aWxpdHlTZXJ2aWNlLmlzTW9iaWxlXG4gICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgMTQ4MCkge1xuICAgICAgdGhpcy5pc01vYmlsZUZvckFJID0gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzTW9iaWxlRm9yQUkgPSBmYWxzZVxuICAgIH1cbiAgICB0aGlzLm1lbnVQb3NpdGlvbiA9IHRoaXMudGFiRWxlbWVudC5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFRvcFxuXG4gICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtTWFwLnN1YnNjcmliZShhc3luYyAocGFyYW1zOiBhbnkpID0+IHtcblxuICAgICAgbGV0IGZyb21BSVR1dG9yID0gcGFyYW1zLmdldCgnZnJvbUFJVHV0b3InKVxuXG4gICAgICBpZiAoKGZyb21BSVR1dG9yID09PSAndHJ1ZScgfHwgZnJvbUFJVHV0b3IgPT09IHRydWUpICYmIHRoaXMuaXNNb2JpbGUpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdGFic0FycmF5ID0gdGhpcy50YWJzPy50b0FycmF5KClcbiAgICAgICAgICBsZXQgaW5kZXggPSB0YWJzQXJyYXk/LmZpbmRJbmRleCh0YWIgPT4gdGFiLnRleHRMYWJlbC50cmltKCkgPT09IFwiQUkgVHV0b3JcIi50cmltKCkpXG4gICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IGluZGV4XG4gICAgICAgICAgICB0aGlzLmZyb21BSVNlbGVjdGVkVGFiSW5kZXggPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9LCAzMDAwKVxuXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGdldCBnZXRDdXJyZW50VGltZUluVVRDKCk6IHN0cmluZyB7XG4gICAgY29uc3QgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpXG4gICAgY29uc3QgaXNvU3RyaW5nID0gY3VycmVudERhdGUudG9JU09TdHJpbmcoKVxuICAgIHJldHVybiBpc29TdHJpbmcucmVwbGFjZSgnWicsICcrMDAwMCcpXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFNhbXVoaWtDb25maWcoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuc2FtdWhpa0NvbmZpZyA9IGF3YWl0IHRoaXMuc2FtdWhpa0NoYXJjaGFTdmMuZmV0Y2hDb25maWdGaWxlKCkudG9Qcm9taXNlKClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcblxuICAgIHRoaXMucmVzb3VyY2VJZGVudGlmaWVyID0gdGhpcy52aWV3ZXJEYXRhU3ZjLnJlc291cmNlSWRcblxuICAgIGlmICh0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnICYmIHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWc/LnRyYW5zY3JpcHRpb24/LmFsbCkge1xuICAgICAgdGhpcy5lbmFibGVUcmFuc2NyaXB0aW9uRmxhZyA9IHRydWVcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWcgJiYgdGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZz8udHJhbnNjcmlwdGlvbiAmJiB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnPy50cmFuc2NyaXB0aW9uPy5mb3JPcmcgJiYgdGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZz8udHJhbnNjcmlwdGlvbj8uZm9yT3JnPy5sZW5ndGggJiZcbiAgICAgIHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWc/LnRyYW5zY3JpcHRpb24/LmZvck9yZz8uaW5jbHVkZXModGhpcy5jb25maWdTZXJ2aWNlPy51c2VyUHJvZmlsZT8ucm9vdE9yZ0lkKVxuICAgICkge1xuICAgICAgdGhpcy5lbmFibGVUcmFuc2NyaXB0aW9uRmxhZyA9IHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbmFibGVUcmFuc2NyaXB0aW9uRmxhZyA9IGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWcgJiYgdGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZz8uYWlUdXRvciAmJiB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnLmFpVHV0b3I/LmFsbCkge1xuICAgICAgLy8gY29uc29sZS5sb2coJ3RoaXMuY29udGVudFJlYWREYXRhLS0nLCB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEpXG4gICAgICB0aGlzLmVuYWJsZUFJVHV0b3JGbGFnID0gdGhpcy5vbmx5c2Nvcm1Bc3Nlc3NtZW50RXhpc3RzKHRoaXMuY29udGVudD8uY2hpbGRyZW4sICdtaW1lVHlwZScsIFsnYXBwbGljYXRpb24vdm5kLmVrc3RlcC5odG1sLWFyY2hpdmUnLCAnYXBwbGljYXRpb24vdm5kLnN1bmJpcmQucXVlc3Rpb25zZXQnLCAnYXBwbGljYXRpb24vanNvbicsICd0ZXh0L3gtdXJsJ10pXG4gICAgICAvLyB0aGlzLmVuYWJsZUFJVHV0b3JGbGFnID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZyAmJiB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnPy5haVR1dG9yICYmIHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWc/LmFpVHV0b3I/LmZvck9yZyAmJiB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnPy5haVR1dG9yPy5mb3JPcmc/Lmxlbmd0aFxuICAgICAgJiYgdGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZy5haVR1dG9yPy5mb3JPcmc/LmluY2x1ZGVzKHRoaXMuY29uZmlnU2VydmljZT8udXNlclByb2ZpbGU/LnJvb3RPcmdJZClcbiAgICApIHtcbiAgICAgIHRoaXMuZW5hYmxlQUlUdXRvckZsYWcgPSB0aGlzLm9ubHlzY29ybUFzc2Vzc21lbnRFeGlzdHModGhpcy5jb250ZW50Py5jaGlsZHJlbiwgJ21pbWVUeXBlJywgWydhcHBsaWNhdGlvbi92bmQuZWtzdGVwLmh0bWwtYXJjaGl2ZScsICdhcHBsaWNhdGlvbi92bmQuc3VuYmlyZC5xdWVzdGlvbnNldCcsICdhcHBsaWNhdGlvbi9qc29uJywgJ3RleHQveC11cmwnXSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5lbmFibGVBSVR1dG9yRmxhZyA9IGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMgJiYgY2hhbmdlc1sncGxheVJlc291cmNlSWQnXSkge1xuICAgICAgaWYgKGNoYW5nZXM/LnBsYXlSZXNvdXJjZUlkPy5wcmV2aW91c1ZhbHVlICE9PSBjaGFuZ2VzPy5wbGF5UmVzb3VyY2VJZD8uY3VycmVudFZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLnZpZXdlclBhZ2UgJiYgdGhpcy52aWV3ZXJEYXRhU3ZjPy5yZXNvdXJjZUlkICYmIHRoaXMuZW5hYmxlVHJhbnNjcmlwdGlvbkZsYWcpIHtcbiAgICAgICAgICB0aGlzLnBhcnNlVlRUKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5jaGFuZ2VUYWIgJiYgY2hhbmdlcy5jaGFuZ2VUYWIuY3VycmVudFZhbHVlICYmICF0aGlzLmZyb21BSVNlbGVjdGVkVGFiSW5kZXgpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IDFcbiAgICB9XG4gICAgaWYgKHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5wYWdlRGF0YSAmJiB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEucGFnZURhdGEuZGF0YSkge1xuICAgICAgdGhpcy5jb25maWcgPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEucGFnZURhdGEuZGF0YVxuICAgIH1cbiAgICBpZiAodGhpcy5jb25maWcgJiYgdGhpcy5jb25maWcuZGlzY3Vzc1dpZGdldERhdGEpIHtcbiAgICAgIHRoaXMuZGlzY3Vzc1dpZGdldERhdGEgPSB0aGlzLmNvbmZpZy5kaXNjdXNzV2lkZ2V0RGF0YVxuICAgICAgaWYgKHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YSAmJiB0aGlzLmJhc2VDb250ZW50UmVhZERhdGEuaWRlbnRpZmllcikge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygndGhpcy5jb250ZW50LmlkZW50aWZpZXInLCB0aGlzLmNvbnRlbnQuaWRlbnRpZmllcilcbiAgICAgICAgaWYgKCF0aGlzLmRpc2N1c3NXaWRnZXREYXRhLm5ld0NvbW1lbnRTZWN0aW9uLmNvbW1lbnRUcmVlRGF0YS5lbnRpdHlJZCkge1xuICAgICAgICAgIHRoaXMuZGlzY3Vzc1dpZGdldERhdGEubmV3Q29tbWVudFNlY3Rpb24uY29tbWVudFRyZWVEYXRhLmVudGl0eUlkID0gdGhpcy5iYXNlQ29udGVudFJlYWREYXRhLmlkZW50aWZpZXJcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kaXNjdXNzV2lkZ2V0RGF0YS5jb21tZW50c0xpc3QucmVwbGllc1NlY3Rpb24gJiYgdGhpcy5kaXNjdXNzV2lkZ2V0RGF0YS5jb21tZW50c0xpc3QucmVwbGllc1NlY3Rpb24ubmV3Q29tbWVudFJlcGx5KSB7XG4gICAgICAgICAgdGhpcy5kaXNjdXNzV2lkZ2V0RGF0YS5jb21tZW50c0xpc3QucmVwbGllc1NlY3Rpb24ubmV3Q29tbWVudFJlcGx5LmNvbW1lbnRUcmVlRGF0YS5lbnRpdHlJZCA9IHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YS5pZGVudGlmaWVyXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuaXNFbnJvbGxlZCkge1xuICAgICAgICBpZiAodGhpcy5jb250ZW50ICYmIHRoaXMuY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPT09IE5zQ29udGVudC5FQ291cnNlQ2F0ZWdvcnkuQkxFTkRFRF9QUk9HUkFNKSB7XG4gICAgICAgICAgdGhpcy5zaG93QXNzaWdubWVudHNUYWIgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kaXNjdXNzV2lkZ2V0RGF0YS5lbnJvbGxlZENvbnRlbnQgPSB0cnVlXG4gICAgICAgIHRoaXMuZGlzY3Vzc1dpZGdldERhdGEubmV3Q29tbWVudFNlY3Rpb24uY29tbWVudEJveC5wbGFjZWhvbGRlciA9ICdTdGFydCBhIGRpc2N1c3Npb24nXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRpc2N1c3NXaWRnZXREYXRhLmVucm9sbGVkQ29udGVudCA9IGZhbHNlXG4gICAgICAgIHRoaXMuZGlzY3Vzc1dpZGdldERhdGEubmV3Q29tbWVudFNlY3Rpb24uY29tbWVudEJveC5wbGFjZWhvbGRlciA9ICdFbnJvbCB0byBhZGQgeW91ciBjb21tZW50cydcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbW1lbnRJZCkge1xuICAgICAgICB0aGlzLmRpc2N1c3NXaWRnZXREYXRhLm5ld0NvbW1lbnRTZWN0aW9uLnNob3cgPSBmYWxzZVxuICAgICAgfVxuICAgICAgdGhpcy5kaXNjdXNzV2lkZ2V0RGF0YSA9IHsgLi4udGhpcy5kaXNjdXNzV2lkZ2V0RGF0YSB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29udGVudFJlYWREYXRhICYmIHRoaXMuY29udGVudFJlYWREYXRhPy5ldmVudExpbmtlZD8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCBvcmdJZCA9IF8uZ2V0KHRoaXMuY29uZmlnU2VydmljZSwgJ3VzZXJQcm9maWxlLnVzZXJSb290T3JnLmlkJywgJycpXG4gICAgICBhd2FpdCB0aGlzLmdldFNhbXVoaWtDb25maWcoKVxuICAgICAgY29uc3QgZXZlbnRzTGlua2VkID0gdGhpcy5jb250ZW50UmVhZERhdGEuZXZlbnRMaW5rZWQgfHwgW11cbiAgICAgIGxldCBldmVudHNEYXRhOiBhbnkgPSBbXVxuICAgICAgdGhpcy5zYW11aGlrQ29uZmlnPy5zdHJpcHNbMF0udGFicy5mb3JFYWNoKChlbGU6IGFueSkgPT4ge1xuICAgICAgICBlbGUucmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0LmZpbHRlcnMuaWRlbnRpZmllciA9IGV2ZW50c0xpbmtlZFxuICAgICAgICBlbGUucmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0LmZpbHRlcnMuY3JlYXRlZEZvciA9IFtvcmdJZF1cbiAgICAgICAgaWYgKGVsZS5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVycy5lbmREYXRlVGltZS5oYXNPd25Qcm9wZXJ0eSgnPj0nKSkge1xuICAgICAgICAgIGVsZS5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVycy5lbmREYXRlVGltZVsnPj0nXSA9IHRoaXMuZ2V0Q3VycmVudFRpbWVJblVUQ1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGUucmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0LmZpbHRlcnMuZW5kRGF0ZVRpbWUuaGFzT3duUHJvcGVydHkoJzwnKSkge1xuICAgICAgICAgIGVsZS5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVycy5lbmREYXRlVGltZVsnPCddID0gdGhpcy5nZXRDdXJyZW50VGltZUluVVRDXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zYW11aGlrQ2hhcmNoYVN2Yy5nZXRTZWFyY2hWNlJlc3VsdHMoZWxlLnJlcXVlc3Quc2VhcmNoVjYpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAocmVzICYmIHJlcy5yZXN1bHQgJiYgcmVzLnJlc3VsdC5jb3VudCAmJiByZXMucmVzdWx0Py5FdmVudCAmJiByZXMucmVzdWx0LkV2ZW50Py5sZW5ndGgpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGV2ZSA9IDA7IGV2ZSA8IHJlcy5yZXN1bHQuRXZlbnQ/Lmxlbmd0aDsgZXZlKyspIHtcbiAgICAgICAgICAgICAgaWYgKHJlcy5yZXN1bHQuRXZlbnRbZXZlXVsnY3JlYXRlZEZvciddICYmIHJlcy5yZXN1bHQuRXZlbnRbZXZlXVsnY3JlYXRlZEZvciddLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgIHJlcy5yZXN1bHQuRXZlbnRbZXZlXVsncmVzb3VyY2VUeXBlJ10gPT09ICdTYW11aGlrIENoYXJjaGEnXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICBldmVudHNEYXRhLnB1c2gocmVzLnJlc3VsdC5FdmVudFtldmVdWydjcmVhdGVkRm9yJ11bMF0pXG4gICAgICAgICAgICAgIGlmIChldmVudHNEYXRhLmluY2x1ZGVzKHRoaXMuY29uZmlnU2VydmljZS51c2VyUHJvZmlsZT8ucm9vdE9yZ0lkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlU2FtdWhpa0NoYXJjaGFUYWIgPSB0cnVlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9KVxuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29udGVudFJlYWREYXRhICYmIHRoaXMuY29udGVudFJlYWREYXRhLnJlZmVyZW5jZU5vZGVzKSB7XG4gICAgICB0aGlzLmNvbnRlbnRSZWFkRGF0YS5yZWZlcmVuY2VOb2Rlcy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgbGV0IHVzZXJSb2xlczogU2V0PHN0cmluZz4gPSB0aGlzLmNvbmZpZ1NlcnZpY2U/LnVzZXJSb2xlcyB8fCBuZXcgU2V0KClcbiAgICAgICAgbGV0IGhhc0VkdWNhdG9yUm9sZSA9IGZhbHNlXG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgdXNlciBoYXMgTUVOVE9SIHJvbGVcbiAgICAgICAgaWYgKHVzZXJSb2xlcy5oYXMoJ01FTlRPUicpIHx8XG4gICAgICAgICAgdXNlclJvbGVzLmhhcygnbWVudG9yJykgfHxcbiAgICAgICAgICB1c2VyUm9sZXMuaGFzKCdNZW50b3InKSkge1xuICAgICAgICAgIGhhc0VkdWNhdG9yUm9sZSA9IHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGxvY2FsIHN0b3JhZ2UgZm9yIHN1cnZleSByZXNwb25zZSBvbmx5IGlmIFVSTCBjb250YWlucyAncHVibGljJyBvciAncHJldmlldz10cnVlJ1xuICAgICAgICBpZiAoIWhhc0VkdWNhdG9yUm9sZSAmJiB0aGlzLmZvclByZXZpZXcpIHtcbiAgICAgICAgICBjb25zdCBzdXJ2ZXlJZCA9IHRoaXMuZW52aXJvbm1lbnQucHVibGljQ29udGVudFN1cnZleUlkIHx8ICcnXG4gICAgICAgICAgY29uc3QgY291cnNlSWQgPSB0aGlzLmNvbnRlbnRSZWFkRGF0YT8uaWRlbnRpZmllciB8fCAnJ1xuICAgICAgICAgIGNvbnN0IHN0b3JhZ2VLZXkgPSBgc3VydmV5XyR7c3VydmV5SWR9XyR7Y291cnNlSWR9YFxuICAgICAgICAgIGNvbnN0IHN0b3JlZERhdGEgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShzdG9yYWdlS2V5KVxuXG4gICAgICAgICAgaWYgKHN0b3JlZERhdGEpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHN1cnZleVJlc3BvbnNlcyA9IEpTT04ucGFyc2Uoc3RvcmVkRGF0YSlcbiAgICAgICAgICAgICAgY29uc3QgZWR1Y2F0b3JRdWVzdGlvbiA9IHN1cnZleVJlc3BvbnNlcy5maW5kKChyZXNwb25zZTogYW55KSA9PlxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLnF1ZXN0aW9uID09PSAnQXJlIHlvdSBhbiBFZHVjYXRvci9GYWN1bHR5IG1lbWJlcj8nXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgaWYgKGVkdWNhdG9yUXVlc3Rpb24gJiYgZWR1Y2F0b3JRdWVzdGlvbi5hbnN3ZXIgPT09ICdZZXMnKSB7XG4gICAgICAgICAgICAgICAgaGFzRWR1Y2F0b3JSb2xlID0gdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIHN1cnZleSBkYXRhIGZyb20gbG9jYWwgc3RvcmFnZTonLCBlcnJvcilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXQgdGVhY2hlck5vdGVzRmxhZyBpZiB1c2VyIGhhcyBlZHVjYXRvciByb2xlXG4gICAgICAgIGlmIChoYXNFZHVjYXRvclJvbGUpIHtcbiAgICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLnJlc291cmNlQ2F0ZWdvcnkgJiYgaXRlbS5yZXNvdXJjZUNhdGVnb3J5ID09PSAnVGVhY2hlcnMgUmVzb3VyY2UnKSB7XG4gICAgICAgICAgICB0aGlzLnRlYWNoZXJOb3Rlc0ZsYWcgPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS5yZXNvdXJjZUNhdGVnb3J5ICYmIGl0ZW0ucmVzb3VyY2VDYXRlZ29yeSA9PT0gJ1JlZmVyZW5jZSBSZXNvdXJjZScpIHtcbiAgICAgICAgICB0aGlzLnJlZmVyZW5jZU5vdGVzRmxhZyA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gICAgaWYgKHRoaXMuc2lkZU5hdkJhck9wZW5lZCkge1xuICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgMTQ4MCkge1xuICAgICAgICBpZiAodGhpcy5pc01vYmlsZUZvckFJKSB7XG4gICAgICAgICAgdGhpcy5pc01vYmlsZUZvckFJID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pc01vYmlsZUZvckFJID0gZmFsc2VcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAod2luZG93LmlubmVyV2lkdGggPCAxNDgwKSB7XG4gICAgICAgIHRoaXMuaXNNb2JpbGVGb3JBSSA9IHRydWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaXNNb2JpbGVGb3JBSSA9IGZhbHNlXG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6c2Nyb2xsJywgWyckZXZlbnQnXSlcbiAgaGFuZGxlU2Nyb2xsKCkge1xuICAgIGNvbnN0IHdpbmRvd1Njcm9sbCA9IHdpbmRvdy5zY3JvbGxZXG4gICAgaWYgKHdpbmRvd1Njcm9sbCA+PSAodGhpcy5tZW51UG9zaXRpb24gLSAoKHRoaXMuaXNNb2JpbGUpID8gOTYgOiAxMDQpKSkge1xuICAgICAgdGhpcy5zdGlja3kgPSB0cnVlXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RpY2t5ID0gZmFsc2VcbiAgICB9XG4gIH1cblxuICBoYW5kbGVUYWJDaGFuZ2UoZXZlbnQ6IE1hdFRhYkNoYW5nZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy50YWJDaGFuZ2VWYWx1ZSA9IGV2ZW50LnRhYlxuICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IGV2ZW50LmluZGV4XG4gICAgdGhpcy5sb2FkQ2hlY2tTZXJ2aWNlLmNvbXBvbmVudExvYWRlZCh0cnVlKVxuICAgIC8vIGNvbnNvbGUubG9nKCdldmVudCcsIGV2ZW50KVxuICAgIC8vIGNvbnNvbGUubG9nKCd0aGlzLmNvbnRlbnQnLCB0aGlzLnZpZXdlckRhdGFTdmM/LnJlc291cmNlSWQpXG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LnRhYi50ZXh0TGFiZWwgPT09ICdBSSBUdXRvcicpIHtcbiAgICAgIHRoaXMuc2hvd0FJVHV0b3JQb3B1cCA9IHRydWVcbiAgICB9XG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LmluZGV4ID09PSAwICYmIGV2ZW50LnRhYi50ZXh0TGFiZWwgPT09ICdUcmFuc2NyaXB0aW9uJykge1xuICAgICAgdGhpcy5yYWlzZVRyYW5zY3JpcHRpb25UYWJTdGFydFRlbGVtZXRyeSgpXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yYWlzZVRyYW5zY3JpcHRpb25UYWJJbnRlcmFjdFRlbGVtZXRyeSgpXG4gICAgICB9LCAxMDAwKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJhaXNlVHJhbnNjcmlwdGlvblRhYlN0b3BUZWxlbWV0cnkoKVxuICAgIH1cblxuICB9XG5cbiAgc2hvd0FpVHV0b3JDb25maXJtUG9wdXAoKSB7XG4gICAgdGhpcy5yYWlzZUFJUG9wdXBTdGFydFRlbGVtZXRyeSgpXG4gICAgaWYgKHRoaXMuaXNFbnJvbGxlZCkge1xuICAgICAgdGhpcy5mcm9tQUlUdXRvciA9IHRydWVcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnJhaXNlQUlQb3B1cEludGVyYWN0VGVsZW1ldHJ5KClcbiAgICAgIH0sIDEwMDApXG5cblxuICAgICAgdGhpcy5nZW5lcmF0ZVJlc3VtZURhdGFMaW5rTmV3KClcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnJhaXNlQUlQb3B1cEVuZFRlbGVtZXRyeSgpXG4gICAgICB9LCAxMDAwKVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yYWlzZUFJUG9wdXBJbnRlcmFjdFRlbGVtZXRyeSgpXG4gICAgICB9LCAxMDAwKVxuICAgICAgY29uc3QgZGlhbG9nQ29uZmlnID0gbmV3IE1hdERpYWxvZ0NvbmZpZygpXG5cbiAgICAgIGRpYWxvZ0NvbmZpZy53aWR0aCA9ICc0MjFweCdcbiAgICAgIGRpYWxvZ0NvbmZpZy5kYXRhID0ge1xuICAgICAgICBlbnJvbGw6IHRoaXMuaXNFbnJvbGxlZFxuICAgICAgfVxuICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihBaVR1dG9yQ29uZmlybVBvcHVwQ29tcG9uZW50LCBkaWFsb2dDb25maWcpXG5cbiAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuXG4gICAgICAgIGlmIChyZXNwb25zZSA9PT0gJ2Vucm9sbCcpIHtcbiAgICAgICAgICB0aGlzLmZyb21BSVR1dG9yID0gdHJ1ZVxuICAgICAgICAgIHRoaXMuZ2VuZXJhdGVSZXN1bWVEYXRhTGlua05ldygpXG4gICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2UgPT09ICduZWVkVG9FbnJvbGwnKSB7XG4gICAgICAgICAgdGhpcy5lbnJvbGxVc2VyRm9yQUlUdXRvcigpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yYWlzZUFJUG9wdXBFbmRUZWxlbWV0cnkoKVxuICAgICAgfSlcbiAgICB9XG5cbiAgfVxuXG4gIGdlbmVyYXRlUmVzdW1lRGF0YUxpbmtOZXcoKSB7XG4gICAgaWYgKHRoaXMucmVzdW1lRGF0YSAmJiB0aGlzLmNvbnRlbnQpIHtcbiAgICAgIGxldCByZXN1bWVEYXRhVjI6IGFueVxuICAgICAgaWYgKHRoaXMuY29udGVudC5jb21wbGV0aW9uUGVyY2VudGFnZSA9PT0gMTAwKSB7XG4gICAgICAgIHJlc3VtZURhdGFWMiA9IHRoaXMuZ2V0UmVzdW1lRGF0YUZyb21MaXN0KCdzdGFydCcpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bWVEYXRhVjIgPSB0aGlzLmdldFJlc3VtZURhdGFGcm9tTGlzdCgpXG4gICAgICB9XG4gICAgICBpZiAoIXJlc3VtZURhdGFWMi5taW1lVHlwZSkge1xuICAgICAgICByZXN1bWVEYXRhVjIubWltZVR5cGUgPSB0aGlzLnRvY1N2Yy5nZXRNaW1lVHlwZSh0aGlzLmNvbnRlbnQsIHJlc3VtZURhdGFWMi5pZGVudGlmaWVyKVxuICAgICAgfVxuICAgICAgdGhpcy5yZXN1bWVEYXRhTGluayA9IHZpZXdlclJvdXRlR2VuZXJhdG9yKFxuICAgICAgICByZXN1bWVEYXRhVjIuaWRlbnRpZmllcixcbiAgICAgICAgcmVzdW1lRGF0YVYyLm1pbWVUeXBlLFxuICAgICAgICB0aGlzLmNvbnRlbnQuaWRlbnRpZmllcixcbiAgICAgICAgdGhpcy5jb250ZW50LmNvbnRlbnRUeXBlLFxuICAgICAgICB0aGlzLmZvclByZXZpZXcsXG4gICAgICAgICdMZWFybmluZyBSZXNvdXJjZScsXG4gICAgICAgIHRoaXMuZ2V0QmF0Y2hJZCgpLFxuICAgICAgICB0aGlzLmNvbnRlbnQubmFtZSxcbiAgICAgIClcbiAgICAgIHRoaXMuYWN0aW9uU1ZDLnNldFVwZGF0ZUNvbXBHcm91cE8gPSB0aGlzLnJlc3VtZURhdGFMaW5rXG4gICAgICAvLyBjb25zb2xlLmxvZygndGhpcy5yZXN1bWVEYXRhTGluaycsdGhpcy5yZXN1bWVEYXRhTGluaylcbiAgICAgIC8vIGNvbnNvbGUubG9nKCd0aGlzLmFjdGlvblNWQycsIHRoaXMuYWN0aW9uU1ZDKVxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMucmVzdW1lRGF0YUxpbmsudXJsXSwge1xuICAgICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICAgIC4uLnRoaXMucmVzdW1lRGF0YUxpbmsucXVlcnlQYXJhbXMsXG4gICAgICAgICAgZnJvbUFJVHV0b3I6IHRoaXMuZnJvbUFJVHV0b3JcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC8vIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoXG4gICAgICAvLyAgIFt0aGlzLnJlc3VtZURhdGFMaW5rLnVybF0sXG4gICAgICAvLyAgIHtcbiAgICAgIC8vICAgICByZWxhdGl2ZVRvOiB0aGlzLnJlc3VtZURhdGFMaW5rLnVybCxcbiAgICAgIC8vICAgICBxdWVyeVBhcmFtczogdGhpcy5yZXN1bWVEYXRhTGluay5xdWVyeVBhcmFtcyxcbiAgICAgIC8vICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnLFxuICAgICAgLy8gICB9KVxuICAgICAgLyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGxheVJlc3VtZUZvckFJLmVtaXQoKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmVzdW1lRGF0YUZyb21MaXN0KHR5cGU/OiBzdHJpbmcpOiBhbnkgfCB2b2lkIHtcbiAgICBjb25zdCByZXN1bWVDb3B5ID0gWy4uLnRoaXMucmVzdW1lRGF0YV1cbiAgICBpZiAoIXR5cGUpIHtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcblxuICAgICAgY29uc3QgbGFzdEl0ZW0gPSByZXN1bWVDb3B5ICYmIHJlc3VtZUNvcHkuc29ydCgoYTogYW55LCBiOiBhbnkpID0+XG4gICAgICAgIG5ldyBEYXRlKGIubGFzdEFjY2Vzc1RpbWUpLmdldFRpbWUoKSAtIG5ldyBEYXRlKGEubGFzdEFjY2Vzc1RpbWUpLmdldFRpbWUoKSkuc2hpZnQoKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWRlbnRpZmllcjogbGFzdEl0ZW0uY29udGVudElkLFxuICAgICAgICBtaW1lVHlwZTogbGFzdEl0ZW0ucHJvZ3Jlc3NkZXRhaWxzICYmIGxhc3RJdGVtLnByb2dyZXNzZGV0YWlscy5taW1lVHlwZSxcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZmlyc3RJdGVtID0gcmVzdW1lQ29weSAmJiByZXN1bWVDb3B5Lmxlbmd0aCAmJiByZXN1bWVDb3B5WzBdXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkZW50aWZpZXI6IGZpcnN0SXRlbS5jb250ZW50SWQsXG4gICAgICBtaW1lVHlwZTogZmlyc3RJdGVtLnByb2dyZXNzZGV0YWlscyAmJiBmaXJzdEl0ZW0ucHJvZ3Jlc3NkZXRhaWxzLm1pbWVUeXBlLFxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRCYXRjaElkKCk6IHN0cmluZyB7XG4gICAgbGV0IGJhdGNoSWQgPSAnJ1xuICAgIGlmICh0aGlzLmJhdGNoRGF0YSAmJiB0aGlzLmJhdGNoRGF0YS5jb250ZW50KSB7XG4gICAgICBmb3IgKGNvbnN0IGJhdGNoIG9mIHRoaXMuYmF0Y2hEYXRhLmNvbnRlbnQpIHtcbiAgICAgICAgYmF0Y2hJZCA9IGJhdGNoLmJhdGNoSWRcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGJhdGNoSWRcbiAgfVxuXG4gIHJhaXNlQUlQb3B1cFN0YXJ0VGVsZW1ldHJ5KCkge1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZXZlbnRUeXBlOiBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnksXG4gICAgICBldmVudExvZ0xldmVsOiBXc0V2ZW50cy5Xc0V2ZW50TG9nTGV2ZWwuSW5mbyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZWRhdGE6IHsgdHlwZTogJ2NsaWNrJywgXCJpZFwiOiBcImFpLXR1dG9yLXRvYy1wYWdlXCIsIFwicGFnZWlkXCI6IGAvYXBwL3RvYy8ke3RoaXMuY29udGVudD8uaWRlbnRpZmllcn1gIH0sXG4gICAgICAgIG9iamVjdDogeyBcImlkXCI6IHRoaXMuY29udGVudD8uaWRlbnRpZmllciwgXCJ0eXBlXCI6IHRoaXMuY29udGVudD8uY291cnNlQ2F0ZWdvcnkgfSxcbiAgICAgICAgc3RhdGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkxvYWRlZCxcbiAgICAgICAgZXZlbnRTdWJUeXBlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5DaGF0Ym90LFxuICAgICAgICBtb2RlOiAndmlldycsXG4gICAgICB9LFxuICAgICAgcGFnZUNvbnRleHQ6IHsgcGFnZUlkOiAnL2FwcC90b2MnLCBtb2R1bGU6ICdMZWFybicgfSxcbiAgICAgIGZyb206ICcnLFxuICAgICAgdG86ICdUZWxlbWV0cnknLFxuICAgIH1cbiAgICB0aGlzLmV2ZW50U3ZjLmRpc3BhdGNoQ2hhdGJvdEV2ZW50PFdzRXZlbnRzLklXc0V2ZW50VGVsZW1ldHJ5SW50ZXJhY3Q+KGV2ZW50KVxuICB9XG5cbiAgcmFpc2VBSVBvcHVwRW5kVGVsZW1ldHJ5KCkge1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZXZlbnRUeXBlOiBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnksXG4gICAgICBldmVudExvZ0xldmVsOiBXc0V2ZW50cy5Xc0V2ZW50TG9nTGV2ZWwuSW5mbyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZWRhdGE6IHsgdHlwZTogJ2NsaWNrJywgXCJpZFwiOiBcImFpLXR1dG9yLXRvYy1wYWdlXCIsIFwicGFnZWlkXCI6IGAvYXBwL3RvYy8ke3RoaXMuY29udGVudD8uaWRlbnRpZmllcn1gIH0sXG4gICAgICAgIG9iamVjdDogeyBcImlkXCI6IHRoaXMuY29udGVudD8uaWRlbnRpZmllciwgXCJ0eXBlXCI6IHRoaXMuY29udGVudD8uY291cnNlQ2F0ZWdvcnkgfSxcbiAgICAgICAgc3RhdGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLlVubG9hZGVkLFxuICAgICAgICBldmVudFN1YlR5cGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkNoYXRib3QsXG4gICAgICAgIG1vZGU6ICd2aWV3JyxcbiAgICAgIH0sXG4gICAgICBwYWdlQ29udGV4dDogeyBwYWdlSWQ6ICcvYXBwL3RvYycsIG1vZHVsZTogJ0xlYXJuJyB9LFxuICAgICAgZnJvbTogJycsXG4gICAgICB0bzogJ1RlbGVtZXRyeScsXG4gICAgfVxuICAgIHRoaXMuZXZlbnRTdmMuZGlzcGF0Y2hDaGF0Ym90RXZlbnQ8V3NFdmVudHMuSVdzRXZlbnRUZWxlbWV0cnlJbnRlcmFjdD4oZXZlbnQpXG4gIH1cblxuICByYWlzZUFJUG9wdXBJbnRlcmFjdFRlbGVtZXRyeSgpIHtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIGV2ZW50VHlwZTogV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5LFxuICAgICAgZXZlbnRMb2dMZXZlbDogV3NFdmVudHMuV3NFdmVudExvZ0xldmVsLkluZm8sXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGVkYXRhOiB7IHR5cGU6ICdjbGljaycsIFwiaWRcIjogXCJhaS10dXRvci10b2MtcGFnZVwiLCBcInBhZ2VpZFwiOiBgL2FwcC90b2MvJHt0aGlzLmNvbnRlbnQ/LmlkZW50aWZpZXJ9YCB9LFxuICAgICAgICBvYmplY3Q6IHsgXCJpZFwiOiB0aGlzLmNvbnRlbnQ/LmlkZW50aWZpZXIsIFwidHlwZVwiOiB0aGlzLmNvbnRlbnQ/LmNvdXJzZUNhdGVnb3J5IH0sXG4gICAgICAgIHN0YXRlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5JbnRlcmFjdCxcbiAgICAgICAgZXZlbnRTdWJUeXBlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5DaGF0Ym90LFxuICAgICAgICBtb2RlOiAndmlldycsXG4gICAgICB9LFxuICAgICAgcGFnZUNvbnRleHQ6IHsgcGFnZUlkOiAnL2FwcC90b2MnLCBtb2R1bGU6ICdMZWFybicgfSxcbiAgICAgIGZyb206ICcnLFxuICAgICAgdG86ICdUZWxlbWV0cnknLFxuICAgIH1cbiAgICB0aGlzLmV2ZW50U3ZjLmRpc3BhdGNoQ2hhdGJvdEV2ZW50PFdzRXZlbnRzLklXc0V2ZW50VGVsZW1ldHJ5SW50ZXJhY3Q+KGV2ZW50KVxuICB9XG5cbiAgZW5yb2xsVXNlckZvckFJVHV0b3IoKSB7XG4gICAgdGhpcy5lbnJvbGxVc2VyVG9BSS5lbWl0KClcbiAgfVxuXG4gIGFzeW5jIHBhcnNlVlRUKCkge1xuICAgIGxldCBpZGVudGlmaWVyID0gdGhpcy5yZXNvdXJjZUlkZW50aWZpZXJcbiAgICAvLyBjb25zb2xlLmxvZygnaWRlbnRpZmllci0tJywgaWRlbnRpZmllcilcbiAgICBhd2FpdCB0aGlzLnRvY1N2Yy5haUdldFJlc291cmNlVnR0RmlsZShpZGVudGlmaWVyKS5zdWJzY3JpYmUoYXN5bmMgKGRhdGFzOiBhbnkpID0+IHtcbiAgICAgIGxldCBkYXRhOiBhbnkgPSBkYXRhcz8uZGF0YVxuICAgICAgaWYgKGRhdGEgJiYgZGF0YS5sZW5ndGggJiYgZGF0YVswXVsndHJhbnNjcmlwdGlvbl91cmxzJ10gJiYgZGF0YVswXVsndHJhbnNjcmlwdGlvbl91cmxzJ10ubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMudnR0TGFuZ0FyciA9IGRhdGFbMF1bJ3RyYW5zY3JpcHRpb25fdXJscyddXG5cbiAgICAgICAgdGhpcy5lbmFibGVUcmFuc2NyaXB0aW9uRmxhZyA9IHRydWVcbiAgICAgICAgLy8gbGV0IHVybCA9ICBkYXRhWzBdWyd0cmFuc2NyaXB0aW9uX3VybHMnXVswXVsndXJpJ11cbiAgICAgICAgLy8gIGNvbnNvbGUubG9nKCd0aGlzLnZ0dExhbmdBcnItLScsdGhpcy52dHRMYW5nQXJyKVxuICAgICAgICB0aGlzLnRyYW5zY3JpcHRpb25BY3RpdmVMYW5ndWFnZSA9IHRoaXMudnR0TGFuZ0FyciAmJiB0aGlzLnZ0dExhbmdBcnIubGVuZ3RoICYmIHRoaXMudnR0TGFuZ0FyclswXSAmJiB0aGlzLnZ0dExhbmdBcnJbMF1bJ2RlZmF1bHRfbGFuZyddID8gJ2VuJyA6ICdlbidcbiAgICAgICAgdGhpcy5kZWZhdWx0VHJhbnNjcmlwdExhbmd1YWdlID0gdGhpcy52dHRMYW5nQXJyICYmIHRoaXMudnR0TGFuZ0Fyci5sZW5ndGggJiYgdGhpcy52dHRMYW5nQXJyWzBdICYmIHRoaXMudnR0TGFuZ0FyclswXVsnZGVmYXVsdF9sYW5nJ10gPyAnZW4nIDogJ2VuJ1xuICAgICAgICAvLyAgY29uc29sZS5sb2coJ3RoaXMudHJhbnNjcmlwdGlvbkFjdGl2ZUxhbmd1YWdlLS0nLCB0aGlzLnRyYW5zY3JpcHRpb25BY3RpdmVMYW5ndWFnZSlcbiAgICAgICAgbGV0IHNlbGVjdGVkVHJhbnNjcmlwdGlvblN0eWxlID0gdGhpcy52dHRMYW5nQXJyLmZpbHRlcigoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW0/LmxhYmVsID09PSB0aGlzLnRyYW5zY3JpcHRpb25BY3RpdmVMYW5ndWFnZVxuICAgICAgICB9KVxuICAgICAgICBpZiAoc2VsZWN0ZWRUcmFuc2NyaXB0aW9uU3R5bGUgJiYgc2VsZWN0ZWRUcmFuc2NyaXB0aW9uU3R5bGUubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRyYW5zY3JpcHRpb25TdHlsZSA9IHNlbGVjdGVkVHJhbnNjcmlwdGlvblN0eWxlWzBdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRyYW5zY3JpcHRpb25TdHlsZSA9IHRoaXMudnR0TGFuZ0FyclswXVxuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCd0aGlzLnNlbGVjdGVkVHJhbnNjcmlwdGlvblN0eWxlLS0nLCB0aGlzLnNlbGVjdGVkVHJhbnNjcmlwdGlvblN0eWxlKVxuICAgICAgICBjb25zdCBmaWx0ZXJlZEFyciA9IHRoaXMudnR0TGFuZ0Fyci5maWx0ZXIoXG4gICAgICAgICAgKGl0ZW06IGFueSkgPT4gaXRlbS5sYWJlbCA9PT0gdGhpcy50cmFuc2NyaXB0aW9uQWN0aXZlTGFuZ3VhZ2VcbiAgICAgICAgKVxuICAgICAgICBsZXQgdXJsID0gZmlsdGVyZWRBcnIubGVuZ3RoID4gMCA/IGZpbHRlcmVkQXJyWzBdLnVyaSA6IG51bGxcbiAgICAgICAgLy9sZXQgdXJsID0gdGhpcy52dHRMYW5nQXJyLmZpbHRlcigoaXRlbTogYW55KSA9PiBpdGVtLmxhYmVsID09PSB0aGlzLnRyYW5zY3JpcHRpb25BY3RpdmVMYW5ndWFnZSlbMF1bJ3VyaSddXG4gICAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgICBjb25zdCBmaWxlID0gYXdhaXQgVnR0RmlsZS5mcm9tVXJsKHVybClcbiAgICAgICAgICBsZXQgYmxvY2tzOiBhbnkgPSBmaWxlLmdldEJsb2NrcygpXG5cbiAgICAgICAgICB0aGlzLnN1YlRpdGxlcyA9IGJsb2Nrc1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCd0aGlzLnZ0dExhbmdBcnItLScsdGhpcy52dHRMYW5nQXJyKVxuICAgICAgICAvLyBpZih0aGlzLnZ0dExhbmdBcnIgJiYgdGhpcy52dHRMYW5nQXJyLmxlbmd0aCkge1xuICAgICAgICAvLyAgIHRoaXMudHJhbnNjcmlwdGlvbkFjdGl2ZUxhbmd1YWdlID0gdGhpcy52dHRMYW5nQXJyWzBdWydsYWJlbCddXG4gICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgIC8vICAgdGhpcy50cmFuc2NyaXB0aW9uQWN0aXZlTGFuZ3VhZ2UgID0gdGhpcy52dHRMYW5nQXJyWzBdWydkZWZhdWx0X2xhbmcnXVxuICAgICAgICAvLyB9XG4gICAgICAgIHRoaXMudG9jU3ZjLmNoYW5nZVRyYW5zY3JpcHRpb25MYW5ndWFnZUV2ZW50Lm5leHQoeyBhY3RpdmVMYW5nOiB0aGlzLnRyYW5zY3JpcHRpb25BY3RpdmVMYW5ndWFnZSwgbGFuZ0RhdGE6IHRoaXMudnR0TGFuZ0FyciwgbG9hZFBsYXllcjogdHJ1ZSB9KVxuXG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudnR0TGFuZ0FyciA9IFtdXG4gICAgICAgIHRoaXMuZW5hYmxlVHJhbnNjcmlwdGlvbkZsYWcgPSBmYWxzZVxuICAgICAgfVxuXG4gICAgfSlcblxuICB9XG5cbiAgYXN5bmMgcmVuZGVyU2VsZWN0ZWRMYW5ndWFnZVRyYW5zY3JpcHRpb24oX2xhbmd2YWx1ZTogYW55KSB7XG4gICAgLy8gdGhpcy50cmFuc2NyaXB0aW9uQWN0aXZlTGFuZ3VhZ2UgPSB0aGlzLnNlbGVjdGVkVHJhbnNjcmlwdGlvblN0eWxlPy5sYWJlbFxuICAgIGlmICh0eXBlb2YgX2xhbmd2YWx1ZSA9PT0gJ3N0cmluZycgJiYgX2xhbmd2YWx1ZSkge1xuICAgICAgdGhpcy50cmFuc2NyaXB0aW9uQWN0aXZlTGFuZ3VhZ2UgPSBfbGFuZ3ZhbHVlXG5cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZFRyYW5zY3JpcHRpb25TdHlsZSA9IF9sYW5ndmFsdWU/LnZhbHVlXG4gICAgICB0aGlzLnRyYW5zY3JpcHRpb25BY3RpdmVMYW5ndWFnZSA9IHRoaXMuc2VsZWN0ZWRUcmFuc2NyaXB0aW9uU3R5bGU/LmxhYmVsXG4gICAgICB0aGlzLnRyYW5zY3JpcHRBY3RpdmVMYW5ndWFnZVRleHQgPSBfbGFuZ3ZhbHVlPy52YWx1ZT8ubGFuZ3VhZ2VcbiAgICB9XG4gICAgdGhpcy5yYWlzZVRyYW5zY3JpcHRpb25MYW5ndWFnZVN0YXJ0VGVsZW1ldHJ5KClcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucmFpc2VUcmFuc2NyaXB0aW9uTGFuZ3VhZ2VJbnRlcmFjdFRlbGVtZXRyeSgpXG4gICAgfSlcbiAgICBsZXQgY3VycmVudFBhdGggPSB0aGlzLnZ0dExhbmdBcnIuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0/LmxhYmVsID09PSB0aGlzLnRyYW5zY3JpcHRpb25BY3RpdmVMYW5ndWFnZSlcbiAgICBpZiAoY3VycmVudFBhdGggJiYgY3VycmVudFBhdGgubGVuZ3RoKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkVHJhbnNjcmlwdGlvblN0eWxlID0gY3VycmVudFBhdGhbMF1cbiAgICB9XG4gICAgY29uc3QgZmlsZSA9IGF3YWl0IFZ0dEZpbGUuZnJvbVVybChjdXJyZW50UGF0aCAmJiBjdXJyZW50UGF0aFswXT8udXJpKVxuICAgIGxldCBibG9ja3M6IGFueSA9IGZpbGUuZ2V0QmxvY2tzKClcbiAgICB0aGlzLnN1YlRpdGxlcyA9IGJsb2Nrc1xuICAgIHRoaXMucmFpc2VUcmFuc2NyaXB0aW9uTGFuZ3VhZ2VTdG9wVGVsZW1ldHJ5KClcbiAgICAvLyB0aGlzLnRvY1N2Yy5jaGFuZ2VUcmFuc2NyaXB0aW9uTGFuZ3VhZ2VFdmVudC5uZXh0KHthY3RpdmVMYW5nOiB0aGlzLnRyYW5zY3JpcHRpb25BY3RpdmVMYW5ndWFnZSwgbGFuZ0RhdGE6IHRoaXMudnR0TGFuZ0FyciwgbG9hZFBsYXllcjpmYWxzZX0pXG5cbiAgfVxuXG4gIG9wZW5TdXJ2ZXlGb3JtUG9wdXAoZXZlbnQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnRyaWdlckNvbXBsZXRpb25TdXJ2ZXlGb3JtLmVtaXQoZXZlbnQpXG4gIH1cblxuICBwbGF5RnJvbVNsb3Qoc3VidGl0bGU6IGFueSkge1xuICAgIGlmIChzdWJ0aXRsZSkge1xuICAgICAgbGV0IHN0YXJ0VGltZSA9IHN1YnRpdGxlLnN0YXJ0VGltZSAvIDEwMDBcbiAgICAgIGxldCBlbmRUaW1lID0gc3VidGl0bGUuZW5kVGltZSAvIDEwMDBcbiAgICAgIHRoaXMudG9jU3ZjLnBsYXlUcmFuc2NyaXB0aW9uVmlkZW8ubmV4dCh7IHN0YXJ0VGltZSwgZW5kVGltZSB9KVxuICAgIH1cbiAgfVxuXG4gIGZvcm1hdE1zVG9WdHRUaW1lKG1zOiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRvdGFsU2Vjb25kcyA9IE1hdGguZmxvb3IobXMgLyAxMDAwKVxuICAgIC8vICBjb25zdCBtaWxsaXNlY29uZHMgPSBtcyAlIDEwMDA7XG4gICAgY29uc3QgaG91cnMgPSBNYXRoLmZsb29yKHRvdGFsU2Vjb25kcyAvIDM2MDApXG4gICAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3IoKHRvdGFsU2Vjb25kcyAlIDM2MDApIC8gNjApXG4gICAgY29uc3Qgc2Vjb25kcyA9IHRvdGFsU2Vjb25kcyAlIDYwXG5cbiAgICBjb25zdCBwYWQgPSAobnVtOiBudW1iZXIsIHNpemU6IG51bWJlcikgPT4gbnVtLnRvU3RyaW5nKCkucGFkU3RhcnQoc2l6ZSwgJzAnKVxuXG4gICAgLy8gcmV0dXJuIGAke3BhZChob3VycywgMil9OiR7cGFkKG1pbnV0ZXMsIDIpfToke3BhZChzZWNvbmRzLCAyKX0uJHtwYWQobWlsbGlzZWNvbmRzLCAzKX1gO1xuICAgIHJldHVybiBgJHtwYWQoaG91cnMsIDIpfToke3BhZChtaW51dGVzLCAyKX06JHtwYWQoc2Vjb25kcywgMil9YFxuICB9XG5cbiAgb25seXNjb3JtQXNzZXNzbWVudEV4aXN0cyhkYXRhOiBhbnksIGtleTogYW55LCB2YWx1ZTogYW55KSB7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGE/Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoZGF0YVtpXSAmJiBkYXRhW2ldWydjaGlsZHJlbiddICYmIGRhdGFbaV1bJ2NoaWxkcmVuJ10ubGVuZ3RoKSB7XG4gICAgICAgIC8vIHRoaXMudG90YWxSZXNvdXJjZSA9IHRoaXMudG90YWxSZXNvdXJjZSArIDFcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ2luIGNoaWxkcmVuJylcbiAgICAgICAgdGhpcy5vbmx5c2Nvcm1Bc3Nlc3NtZW50RXhpc3RzKGRhdGFbaV0/LmNoaWxkcmVuLCBrZXksIHZhbHVlKVxuICAgICAgfSBlbHNlIHtcblxuICAgICAgICB0aGlzLnRvdGFsUmVzb3VyY2UgPSB0aGlzLnRvdGFsUmVzb3VyY2UgKyAxXG4gICAgICAgIGlmICh2YWx1ZS5pbmNsdWRlcyhkYXRhW2ldW2tleV0pKSB7XG4gICAgICAgICAgLy8gdGhpcy5zaG93QUlUdXRvckZsYWcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnNjb3JtQXNzZXNzbWVudENvdW50ID0gdGhpcy5zY29ybUFzc2Vzc21lbnRDb3VudCArIDFcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLnRvdGFsUmVzb3VyY2UgPT09IHRoaXMuc2Nvcm1Bc3Nlc3NtZW50Q291bnQpIHtcbiAgICAgIHRoaXMuZW5hYmxlQUlUdXRvckZsYWcgPSBmYWxzZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVuYWJsZUFJVHV0b3JGbGFnID0gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5lbmFibGVBSVR1dG9yRmxhZ1xuICB9XG5cbiAgcmFpc2VUcmFuc2NyaXB0aW9uVGFiU3RhcnRUZWxlbWV0cnkoKSB7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBldmVudFR5cGU6IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeSxcbiAgICAgIGV2ZW50TG9nTGV2ZWw6IFdzRXZlbnRzLldzRXZlbnRMb2dMZXZlbC5JbmZvLFxuICAgICAgZGF0YToge1xuICAgICAgICBlZGF0YTogeyB0eXBlOiAnY2xpY2snLCBcImlkXCI6IFwiYWktdHV0b3Itdmlld2VyLXBhZ2VcIiwgXCJwYWdlaWRcIjogYC92aWV3ZXIvdmlkZW8vJHt0aGlzLnZpZXdlckRhdGFTdmM/LnJlc291cmNlSWR9YCwgc3ViVHlwZTogJ3RyYW5zY3JpcHQtdGFiJyB9LFxuICAgICAgICBvYmplY3Q6IHsgXCJpZFwiOiB0aGlzLmNvbnRlbnQ/LmlkZW50aWZpZXIsIFwidHlwZVwiOiB0aGlzLmNvbnRlbnQ/LmNvdXJzZUNhdGVnb3J5IH0sXG4gICAgICAgIHN0YXRlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5Mb2FkZWQsXG4gICAgICAgIGV2ZW50U3ViVHlwZTogV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuQ2hhdGJvdCxcbiAgICAgICAgbW9kZTogJ3ZpZXcnLFxuICAgICAgfSxcbiAgICAgIHBhZ2VDb250ZXh0OiB7IHBhZ2VJZDogYC92aWV3ZXIvdmlkZW8vJHt0aGlzLnZpZXdlckRhdGFTdmM/LnJlc291cmNlSWR9YCwgbW9kdWxlOiAnTGVhcm4nIH0sXG4gICAgICBmcm9tOiAnJyxcbiAgICAgIHRvOiAnVGVsZW1ldHJ5JyxcbiAgICB9XG4gICAgdGhpcy5ldmVudFN2Yy5kaXNwYXRjaENoYXRib3RFdmVudDxXc0V2ZW50cy5JV3NFdmVudFRlbGVtZXRyeUludGVyYWN0PihldmVudClcbiAgfVxuXG4gIHJhaXNlVHJhbnNjcmlwdGlvblRhYkludGVyYWN0VGVsZW1ldHJ5KCkge1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZXZlbnRUeXBlOiBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnksXG4gICAgICBldmVudExvZ0xldmVsOiBXc0V2ZW50cy5Xc0V2ZW50TG9nTGV2ZWwuSW5mbyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZWRhdGE6IHsgdHlwZTogJ2NsaWNrJywgXCJpZFwiOiBcImFpLXR1dG9yLXZpZXdlci1wYWdlXCIsIFwicGFnZWlkXCI6IGAvdmlld2VyL3ZpZGVvLyR7dGhpcy52aWV3ZXJEYXRhU3ZjPy5yZXNvdXJjZUlkfWAsIHN1YlR5cGU6ICd0cmFuc2NyaXB0LXRhYicgfSxcbiAgICAgICAgb2JqZWN0OiB7IFwiaWRcIjogdGhpcy5jb250ZW50Py5pZGVudGlmaWVyLCBcInR5cGVcIjogdGhpcy5jb250ZW50Py5jb3Vyc2VDYXRlZ29yeSB9LFxuICAgICAgICBzdGF0ZTogV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuSW50ZXJhY3QsXG4gICAgICAgIGV2ZW50U3ViVHlwZTogV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuQ2hhdGJvdCxcbiAgICAgICAgbW9kZTogJ3ZpZXcnLFxuICAgICAgfSxcbiAgICAgIHBhZ2VDb250ZXh0OiB7IHBhZ2VJZDogYC92aWV3ZXIvdmlkZW8vJHt0aGlzLnZpZXdlckRhdGFTdmM/LnJlc291cmNlSWR9YCwgbW9kdWxlOiAnTGVhcm4nIH0sXG4gICAgICBmcm9tOiAnJyxcbiAgICAgIHRvOiAnVGVsZW1ldHJ5JyxcbiAgICB9XG4gICAgdGhpcy5ldmVudFN2Yy5kaXNwYXRjaENoYXRib3RFdmVudDxXc0V2ZW50cy5JV3NFdmVudFRlbGVtZXRyeUludGVyYWN0PihldmVudClcbiAgfVxuXG4gIHJhaXNlVHJhbnNjcmlwdGlvblRhYlN0b3BUZWxlbWV0cnkoKSB7XG4gICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICBldmVudFR5cGU6IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeSxcbiAgICAgIGV2ZW50TG9nTGV2ZWw6IFdzRXZlbnRzLldzRXZlbnRMb2dMZXZlbC5JbmZvLFxuICAgICAgZGF0YToge1xuICAgICAgICBlZGF0YTogeyB0eXBlOiAnY2xpY2snLCBcImlkXCI6IFwiYWktdHV0b3Itdmlld2VyLXBhZ2VcIiwgXCJwYWdlaWRcIjogYC92aWV3ZXIvdmlkZW8vJHt0aGlzLnZpZXdlckRhdGFTdmM/LnJlc291cmNlSWR9YCwgc3ViVHlwZTogJ3RyYW5zY3JpcHQtdGFiJyB9LFxuICAgICAgICBvYmplY3Q6IHsgXCJpZFwiOiB0aGlzLmNvbnRlbnQ/LmlkZW50aWZpZXIsIFwidHlwZVwiOiB0aGlzLmNvbnRlbnQ/LmNvdXJzZUNhdGVnb3J5IH0sXG4gICAgICAgIHN0YXRlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5VbmxvYWRlZCxcbiAgICAgICAgZXZlbnRTdWJUeXBlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5DaGF0Ym90LFxuICAgICAgICBtb2RlOiAndmlldycsXG4gICAgICB9LFxuICAgICAgcGFnZUNvbnRleHQ6IHsgcGFnZUlkOiBgL3ZpZXdlci92aWRlby8ke3RoaXMudmlld2VyRGF0YVN2Yz8ucmVzb3VyY2VJZH1gLCBtb2R1bGU6ICdMZWFybicgfSxcbiAgICAgIGZyb206ICcnLFxuICAgICAgdG86ICdUZWxlbWV0cnknLFxuICAgIH1cbiAgICB0aGlzLmV2ZW50U3ZjLmRpc3BhdGNoQ2hhdGJvdEV2ZW50PFdzRXZlbnRzLklXc0V2ZW50VGVsZW1ldHJ5SW50ZXJhY3Q+KGV2ZW50KVxuICB9XG5cbiAgcmFpc2VUcmFuc2NyaXB0aW9uTGFuZ3VhZ2VTdGFydFRlbGVtZXRyeSgpIHtcbiAgICBjb25zdCBldmVudCA9IHtcbiAgICAgIGV2ZW50VHlwZTogV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5LFxuICAgICAgZXZlbnRMb2dMZXZlbDogV3NFdmVudHMuV3NFdmVudExvZ0xldmVsLkluZm8sXG4gICAgICBkYXRhOiB7XG4gICAgICAgIGVkYXRhOiB7IHR5cGU6ICdjbGljaycsIFwiaWRcIjogdGhpcy50cmFuc2NyaXB0QWN0aXZlTGFuZ3VhZ2VUZXh0LCBcInBhZ2VpZFwiOiBgL3ZpZXdlci92aWRlby8ke3RoaXMudmlld2VyRGF0YVN2Yz8ucmVzb3VyY2VJZH1gLCBzdWJUeXBlOiAndHJhbnNjcmlwdC1sYW5ndWFnZScgfSxcbiAgICAgICAgb2JqZWN0OiB7IFwiaWRcIjogdGhpcy5jb250ZW50Py5pZGVudGlmaWVyLCBcInR5cGVcIjogdGhpcy5jb250ZW50Py5jb3Vyc2VDYXRlZ29yeSB9LFxuICAgICAgICBzdGF0ZTogV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuTG9hZGVkLFxuICAgICAgICBldmVudFN1YlR5cGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkNoYXRib3QsXG4gICAgICAgIG1vZGU6ICd2aWV3JyxcbiAgICAgIH0sXG4gICAgICBwYWdlQ29udGV4dDogeyBwYWdlSWQ6IGAvdmlld2VyL3ZpZGVvLyR7dGhpcy52aWV3ZXJEYXRhU3ZjPy5yZXNvdXJjZUlkfWAsIG1vZHVsZTogJ0xlYXJuJyB9LFxuICAgICAgZnJvbTogJycsXG4gICAgICB0bzogJ1RlbGVtZXRyeScsXG4gICAgfVxuICAgIHRoaXMuZXZlbnRTdmMuZGlzcGF0Y2hDaGF0Ym90RXZlbnQ8V3NFdmVudHMuSVdzRXZlbnRUZWxlbWV0cnlJbnRlcmFjdD4oZXZlbnQpXG4gIH1cblxuICByYWlzZVRyYW5zY3JpcHRpb25MYW5ndWFnZUludGVyYWN0VGVsZW1ldHJ5KCkge1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZXZlbnRUeXBlOiBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnksXG4gICAgICBldmVudExvZ0xldmVsOiBXc0V2ZW50cy5Xc0V2ZW50TG9nTGV2ZWwuSW5mbyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZWRhdGE6IHsgdHlwZTogJ2NsaWNrJywgXCJpZFwiOiB0aGlzLnRyYW5zY3JpcHRBY3RpdmVMYW5ndWFnZVRleHQsIFwicGFnZWlkXCI6IGAvdmlld2VyL3ZpZGVvLyR7dGhpcy52aWV3ZXJEYXRhU3ZjPy5yZXNvdXJjZUlkfWAsIHN1YlR5cGU6ICd0cmFuc2NyaXB0LWxhbmd1YWdlJyB9LFxuICAgICAgICBvYmplY3Q6IHsgXCJpZFwiOiB0aGlzLmNvbnRlbnQ/LmlkZW50aWZpZXIsIFwidHlwZVwiOiB0aGlzLmNvbnRlbnQ/LmNvdXJzZUNhdGVnb3J5IH0sXG4gICAgICAgIHN0YXRlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5JbnRlcmFjdCxcbiAgICAgICAgZXZlbnRTdWJUeXBlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5DaGF0Ym90LFxuICAgICAgICBtb2RlOiAndmlldycsXG4gICAgICB9LFxuICAgICAgcGFnZUNvbnRleHQ6IHsgcGFnZUlkOiBgL3ZpZXdlci92aWRlby8ke3RoaXMudmlld2VyRGF0YVN2Yz8ucmVzb3VyY2VJZH1gLCBtb2R1bGU6ICdMZWFybicgfSxcbiAgICAgIGZyb206ICcnLFxuICAgICAgdG86ICdUZWxlbWV0cnknLFxuICAgIH1cbiAgICB0aGlzLmV2ZW50U3ZjLmRpc3BhdGNoQ2hhdGJvdEV2ZW50PFdzRXZlbnRzLklXc0V2ZW50VGVsZW1ldHJ5SW50ZXJhY3Q+KGV2ZW50KVxuICB9XG5cbiAgcmFpc2VUcmFuc2NyaXB0aW9uTGFuZ3VhZ2VTdG9wVGVsZW1ldHJ5KCkge1xuICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgZXZlbnRUeXBlOiBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnksXG4gICAgICBldmVudExvZ0xldmVsOiBXc0V2ZW50cy5Xc0V2ZW50TG9nTGV2ZWwuSW5mbyxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgZWRhdGE6IHsgdHlwZTogJ2NsaWNrJywgXCJpZFwiOiB0aGlzLnRyYW5zY3JpcHRBY3RpdmVMYW5ndWFnZVRleHQsIFwicGFnZWlkXCI6IGAvdmlld2VyL3ZpZGVvLyR7dGhpcy52aWV3ZXJEYXRhU3ZjPy5yZXNvdXJjZUlkfWAsIHN1YlR5cGU6ICd0cmFuc2NyaXB0LWxhbmd1YWdlJyB9LFxuICAgICAgICBvYmplY3Q6IHsgXCJpZFwiOiB0aGlzLmNvbnRlbnQ/LmlkZW50aWZpZXIsIFwidHlwZVwiOiB0aGlzLmNvbnRlbnQ/LmNvdXJzZUNhdGVnb3J5IH0sXG4gICAgICAgIHN0YXRlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5VbmxvYWRlZCxcbiAgICAgICAgZXZlbnRTdWJUeXBlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5DaGF0Ym90LFxuICAgICAgICBtb2RlOiAndmlldycsXG4gICAgICB9LFxuICAgICAgcGFnZUNvbnRleHQ6IHsgcGFnZUlkOiBgL3ZpZXdlci92aWRlby8ke3RoaXMudmlld2VyRGF0YVN2Yz8ucmVzb3VyY2VJZH1gLCBtb2R1bGU6ICdMZWFybicgfSxcbiAgICAgIGZyb206ICcnLFxuICAgICAgdG86ICdUZWxlbWV0cnknLFxuICAgIH1cbiAgICB0aGlzLmV2ZW50U3ZjLmRpc3BhdGNoQ2hhdGJvdEV2ZW50PFdzRXZlbnRzLklXc0V2ZW50VGVsZW1ldHJ5SW50ZXJhY3Q+KGV2ZW50KVxuICB9XG5cbiAgY2xvc2VBSVBvcHVwKGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIHRoaXMuc2hvd0FJVHV0b3JQb3B1cCA9IGZhbHNlXG4gICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSAwXG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMucmVzb3VyY2VJZGVudGlmaWVyJCkge1xuICAgICAgdGhpcy5yZXNvdXJjZUlkZW50aWZpZXIkLnVuc3Vic2NyaWJlKClcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdWJUaXRsZXMkKSB7XG4gICAgICB0aGlzLnN1YlRpdGxlcyQudW5zdWJzY3JpYmUoKVxuICAgIH1cblxuICAgIGlmICh0aGlzLnRyYW5zcmlwdGlvbkxhbmd1YWdlU3ViKSB7XG4gICAgICB0aGlzLnRyYW5zcmlwdGlvbkxhbmd1YWdlU3ViLnVuc3Vic2NyaWJlKClcbiAgICB9XG4gIH1cblxuICBjbGVhckNvbW1lbnRJZEZyb21VcmwoKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudFF1ZXJ5UGFyYW1zID0geyAuLi50aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zIH1cbiAgICBkZWxldGUgY3VycmVudFF1ZXJ5UGFyYW1zLmNvbW1lbnRJZFxuICAgIHRoaXMuY29tbWVudElkID0gJydcbiAgICB0aGlzLmRpc2N1c3NXaWRnZXREYXRhLm5ld0NvbW1lbnRTZWN0aW9uLnNob3cgPSB0cnVlXG4gIH1cblxuICByZXN1bWVDb250ZW50Q2FsbCgpIHtcbiAgICB0aGlzLnJlc3VtZUNvbnRlbnQuZW1pdCgpXG4gIH1cbn0iLCI8IS0tICYmIChjb250ZW50Py5jb3Vyc2VDYXRlZ29yeSAhPT0gY291cnNlQ2F0ZWdvcnk/LkJMRU5ERURfUFJPR1JBTSkgLS0+XG48ZGl2IGNsYXNzPVwiYWktdHV0b3ItZ2V0LXN0YXJ0ZWRcIiAqbmdJZj1cIiF2aWV3ZXJQYWdlICYmIGVuYWJsZUFJVHV0b3JGbGFnICYmICFpc01vYmlsZVwiPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBweS0yXCI+XG4gICAgICAgICAgICA8aW1nIHNyYz1cImFzc2V0cy9pY29ucy9ib3QtY2hhdC1zbWFsbC5zdmdcIiBoZWlnaHQ9XCI2NHB4XCIgd2lkdGg9XCI2NHB4XCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTJcIiBbbmdDbGFzc109XCJpc01vYmlsZSA/ICcnIDogJ3ctNTY1J1wiPlxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZm9udC13ZWlnaHQtNjAwXCI+R2V0IFN0YXJ0ZWQgd2l0aCBBSSBUdXRvcjwvcD5cbiAgICAgICAgICAgICAgICA8c3Bhbj5HZXQgaW5zdGFudCBleHBsYW5hdGlvbnMsIHN0ZXAtYnktc3RlcCBsZWFybmluZyBndWlkYW5jZSwgYW5kIGN1c3RvbWlzZWQgbGVhcm5pbmcgdGFpbG9yZWQganVzdFxuICAgICAgICAgICAgICAgICAgICBmb3IgeW91Ljwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXR1dG9yLWJ0biBweC0yIHB5LTFcIj5cbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgKGNsaWNrKT1cInNob3dBaVR1dG9yQ29uZmlybVBvcHVwKClcIj48aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJhc3NldHMvYWktdHV0b3IvYWktaWNvbi5zdmdcIj4mbmJzcDsgJm5ic3A7IDxzcGFuIGNsYXNzPVwiYWktdHV0b3ItbGFiZWxcIj5BSSBUdXRvcjwvc3Bhbj48L2E+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJ0YWItZ3JvdXAtY29udGFpbmVyXCI+XG4gICAgPG1hdC10YWItZ3JvdXAgKHNlbGVjdGVkVGFiQ2hhbmdlKT1cImhhbmRsZVRhYkNoYW5nZSgkZXZlbnQpXCIgI3N0aWNreU1lbnUgW2NsYXNzLnN0aWNreS1tYXQtdGFic109XCJzdGlja3lcIlxuICAgICAgICBbc2VsZWN0ZWRJbmRleF09XCJzZWxlY3RlZFRhYkluZGV4XCIgW25nQ2xhc3NdPVwieydjb250ZW50LXRhYnMnOiFmcm9tVmlld2VyLCdjb250ZW50U3RpY2t5JzogZm9yUHJldmlld31cIj5cblxuICAgICAgICA8IS0tIFRyYW5zY3JpcHRpb24gVGFiIC0tPlxuICAgICAgICA8bWF0LXRhYiBsYWJlbD1cIlRyYW5zY3JpcHRpb25cIlxuICAgICAgICAgICAgKm5nSWY9XCJ2aWV3ZXJQYWdlICYmIGVuYWJsZVRyYW5zY3JpcHRpb25GbGFnICYmIHZ0dExhbmdBcnI/Lmxlbmd0aCAmJiBzdWJUaXRsZXM/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdC10YWItbGFiZWw+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlRyYW5zY3JpcHQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVkLWNpcmNsZSBtbC01XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBOZXdcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGlzY2xhaW1lciBteS0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwicHktMiBweC0yXCI+RGlzY2xhaW1lciA6IFRoZXNlIHRyYW5zY3JpcHRzIGFuZCBzdWJ0aXRsZXMgYXJlIEFJLWdlbmVyYXRlZCBhbmQgbWF5IGNvbnRhaW5cbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy48L3A+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBtbC01IG1yLTVcIiAqbmdJZj1cImlzTW9iaWxlRm9yQUlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyYW5zY3JpcHQtZmxleC1jb250YWluZXIgbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibXVsdGlsaW5lLXNlbGVjdFwiIGFwcGVhcmFuY2U9XCJmaWxsXCIgc3R5bGU9XCJoZWlnaHQ6IGF1dG87IHdpZHRoOiAxMDAlO1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXRMYWJlbD1cIm5ldmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgY2xhc3M9XCJtdWx0aWxpbmUtc2VsZWN0LWJveCBwci01XCIgWyh2YWx1ZSldPVwic2VsZWN0ZWRUcmFuc2NyaXB0aW9uU3R5bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cInJlbmRlclNlbGVjdGVkTGFuZ3VhZ2VUcmFuc2NyaXB0aW9uKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlciBjbGFzcz1cIm11bHRpbGluZS1zZWxlY3QtYm94LXRyaWdnZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZC1vcHRpb24tY29udGVudCBweC01IHB5LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj48c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ0cmFuc2NyaXB0aW9uQWN0aXZlTGFuZ3VhZ2UgPT09IHNlbGVjdGVkVHJhbnNjcmlwdGlvblN0eWxlPy5sYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+VHJhbnNjcmlwdCBMYW5ndWFnZTogPC9iPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tzZWxlY3RlZFRyYW5zY3JpcHRpb25TdHlsZT8ubGFuZ3VhZ2UgfCB0aXRsZWNhc2V9fSA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkZWZhdWx0VHJhbnNjcmlwdExhbmd1YWdlID09PSBzZWxlY3RlZFRyYW5zY3JpcHRpb25TdHlsZT8ubGFiZWxcIj4oQXV0byk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwibXVsdGlsaW5lLXNlbGVjdC1vcHRpb25cIiB2YWx1ZT1cIlwiICpuZ0Zvcj1cImxldCBsYW5nIG9mIHZ0dExhbmdBcnJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImxhbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydhY3RpdmUtb3B0aW9uJzogc2VsZWN0ZWRUcmFuc2NyaXB0aW9uU3R5bGU/LmxhYmVsID09PSBsYW5nPy5sYWJlbH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb24tY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPnt7bGFuZz8ubGFuZ3VhZ2UgfCB0aXRsZWNhc2V9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtNCBmbGV4IGZsZXgtcm93IGp1c3RpZnktZW5kIHRyYW5zY3JpcHQtY29udHJvbFwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG1hdE5hdGl2ZUNvbnRyb2wgcmVxdWlyZWQgY2xhc3M9XCJzZWN0aW9uLWRkXCIgKGNoYW5nZSk9XCJyZW5kZXJTZWxlY3RlZExhbmd1YWdlVHJhbnNjcmlwdGlvbigkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJsYW5nPy5sYW5ndWFnZVwiICpuZ0Zvcj1cImxldCBsYW5nIG9mIHZ0dExhbmdBcnJcIiBbc2VsZWN0ZWRdPVwibGFuZz8ubGFiZWwgPT09IHRyYW5zY3JpcHRpb25BY3RpdmVMYW5ndWFnZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0cmFuc2NyaXB0aW9uQWN0aXZlTGFuZ3VhZ2UgPT09IGxhbmc/LmxhYmVsXCI+IFRyYW5zY3JpcHQgTGFuZ3VhZ2U6IDwvc3Bhbj4ge3tsYW5nPy5sYW5ndWFnZSB8IHRpdGxlY2FzZX19IDxzcGFuICpuZ0lmPVwidHJhbnNjcmlwdGlvbkFjdGl2ZUxhbmd1YWdlID09PSBsYW5nPy5sYW5ndWFnZVwiPihBdXRvKTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cIiFpc01vYmlsZUZvckFJID8gJ3ctc3VidGl0bGUtODAnOid3LWZ1bGwnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCIhaXNNb2JpbGVGb3JBSSA/ICdtbC01LXBlcicgOiAnJ1wiICpuZ0lmPVwic3ViVGl0bGVzICYmIHN1YlRpdGxlcz8ubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVHJhbnNjcmlwdGlvbiBjb250ZW50IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzdWJ0aXRsZSBvZiBzdWJUaXRsZXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sICBteS0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1YnRpdGxlLXRpbWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwicGxheUZyb21TbG90KHN1YnRpdGxlKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHItMSBibHVlLXVuZGVybGluZVwiPiB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRNc1RvVnR0VGltZShzdWJ0aXRsZT8uc3RhcnRUaW1lKSB9fSA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJibGFjay10ZXh0XCI+LTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBsLTEgYmx1ZS11bmRlcmxpbmVcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRNc1RvVnR0VGltZShzdWJ0aXRsZT8uZW5kVGltZSkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtNCBzdWJ0aXRsZS10ZXh0LXNsb3QgbXItNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJibGFjay10ZXh0XCIgW2lubmVySHRtbF09XCJzdWJ0aXRsZT8udGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBoaWdobGlnaHQgOiBrZXl3b3JkVG9IaWdobGlnaHQ/LnRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKChzdWJ0aXRsZT8uc3RhcnRUaW1lIC8gMTAwMCkgPj0ga2V5d29yZFRvSGlnaGxpZ2h0Py5zdGFydFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChzdWJ0aXRsZT8uZW5kVGltZSAvIDEwMDApIDw9IGtleXdvcmRUb0hpZ2hsaWdodD8uZW5kKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctc3VidGl0bGUtMjBcIiAqbmdJZj1cIiFpc01vYmlsZUZvckFJXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRyYW5zY3JpcHQtZmxleC1jb250YWluZXIgbXQtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtdWx0aWxpbmUtc2VsZWN0XCIgYXBwZWFyYW5jZT1cImZpbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IGF1dG87IHdpZHRoOiAxMDAlO1wiIGZsb2F0TGFiZWw9XCJuZXZlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgY2xhc3M9XCJtdWx0aWxpbmUtc2VsZWN0LWJveCBwci01XCIgWyh2YWx1ZSldPVwic2VsZWN0ZWRUcmFuc2NyaXB0aW9uU3R5bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwicmVuZGVyU2VsZWN0ZWRMYW5ndWFnZVRyYW5zY3JpcHRpb24oJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXIgY2xhc3M9XCJtdWx0aWxpbmUtc2VsZWN0LWJveC10cmlnZ2VyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZC1vcHRpb24tY29udGVudCBweC01IHB5LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPjxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidHJhbnNjcmlwdGlvbkFjdGl2ZUxhbmd1YWdlID09PSBzZWxlY3RlZFRyYW5zY3JpcHRpb25TdHlsZT8ubGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+VHJhbnNjcmlwdCBMYW5ndWFnZTogPC9iPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3NlbGVjdGVkVHJhbnNjcmlwdGlvblN0eWxlPy5sYW5ndWFnZSB8IHRpdGxlY2FzZX19IDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGVmYXVsdFRyYW5zY3JpcHRMYW5ndWFnZSA9PT0gc2VsZWN0ZWRUcmFuc2NyaXB0aW9uU3R5bGU/LmxhYmVsXCI+KEF1dG8pPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIGNsYXNzPVwibXVsdGlsaW5lLXNlbGVjdC1vcHRpb25cIiB2YWx1ZT1cIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBsYW5nIG9mIHZ0dExhbmdBcnJcIiBbdmFsdWVdPVwibGFuZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYWN0aXZlLW9wdGlvbic6IHNlbGVjdGVkVHJhbnNjcmlwdGlvblN0eWxlPy5sYWJlbCA9PT0gbGFuZz8ubGFiZWx9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb24tY29udGVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+e3tsYW5nPy5sYW5ndWFnZSB8IHRpdGxlY2FzZX19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIG15LTJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8cD4wLjAwPC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtbC00XCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPkFJIGZvciBEaWdpdGFsIFRyYW5zZm9ybWF0aW9uOiBNYWNoaW5lIExlYXJuaW5nIGFuZCBEZWVwIExlYXJuaW5nICBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dXIgYWRpcGlzY2luZyBlbGl0LCBzZWQgZG8gZWl1c21vZCB0ZW1wb3IgaW5jaWRpZHVudCB1dCBsYWJvcmUgZXQgZG9sb3JlIG1hZ25hIGFsaXF1YS4gVXQgZW5pbSBhZCBtaW5pbSB2ZW5pYW0sIHF1aXMgbm9zdHJ1ZCBleGVyY2l0YXRpb24gdWxsYW1jbyBsYWJvcmlzIG5pc2kgdXQgYWxpcXVpcCBleCBlYSBjb21tb2RvIGNvbnNlcXVhdC4gRHVpcyBhdXRlIGlydXJlIGRvbG9yIGluIHJlcHJlaGVuZGVyaXQgaW4gdm9sdXB0YXRlIHZlbGl0IGVzc2UgY2lsbHVtIGRvbG9yZSBldSBmdWdpYXQgbnVsbGEgcGFyaWF0dXIuIEV4Y2VwdGV1ciBzaW50IG9jY2FlY2F0IGN1cGlkYXRhdCBub24gcHJvaWRlbnQsIHN1bnQgaW4gY3VscGEgcXVpIG9mZmljaWEgZGVzZXJ1bnQgbW9sbGl0IGFuaW0gaWQgZXN0IGxhYm9ydW0uPC9wPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtbC00XCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBtYXROYXRpdmVDb250cm9sIHJlcXVpcmVkIGNsYXNzPVwic2VjdGlvbi1kZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5UcmFuc2NyaXB0aW9uIExhbmd1YWdlOiBFbmdsaXNoIChBdXRvKTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj4gLS0+XG5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbWF0LXRhYj5cblxuICAgICAgICA8IS0tIEFib3V0IFRhYiAtLT5cbiAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJ7eyAnYXBwdG9jc2luZ2xlcGFnZS5hYm91dCcgfCB0cmFuc2xhdGUgfX1cIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS10dXRvci1nZXQtc3RhcnRlZC1tb2JpbGUgbXktMiBtbC0yXCIgKm5nSWY9XCIhdmlld2VyUGFnZSAmJiBlbmFibGVBSVR1dG9yRmxhZyAmJiBpc01vYmlsZVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgdy05OFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHktMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2JvdC1jaGF0LXNtYWxsLnN2Z1wiIGhlaWdodD1cIjQ4cHhcIiB3aWR0aD1cIjQ4cHhcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgdy02MFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJweS0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiZm9udC13ZWlnaHQtNjAwXCI+R2V0IFN0YXJ0ZWQgd2l0aCBBSSBUdXRvcjwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+R2V0IGluc3RhbnQgZXhwbGFuYXRpb25zLCBzdGVwLWJ5LXN0ZXAgbGVhcm5pbmcgZ3VpZGFuY2UsIGFuZCBjdXN0b21pc2VkIGxlYXJuaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWlsb3JlZCBqdXN0IGZvciB5b3UuPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS10dXRvci1idG4gcHgtMiBweS0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIChjbGljayk9XCJzaG93QWlUdXRvckNvbmZpcm1Qb3B1cCgpXCI+PGltZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwiYXNzZXRzL2FpLXR1dG9yL2FpLWljb24uc3ZnXCI+Jm5ic3A7ICZuYnNwOyA8c3BhbiBjbGFzcz1cImFpLXR1dG9yLWxhYmVsXCI+QUlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR1dG9yPC9zcGFuPjwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kIG15LTIgbXgtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktdHV0b3ItYnRuIHB4LTIgcHktMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIChjbGljayk9XCJzaG93QWlUdXRvckNvbmZpcm1Qb3B1cCgpXCI+PGltZyBzcmM9XCJhc3NldHMvYWktdHV0b3IvYWktaWNvbi5zdmdcIj4mbmJzcDsgJm5ic3A7IDxzcGFuIGNsYXNzPVwiYWktdHV0b3ItbGFiZWxcIj5BSSBUdXRvcjwvc3Bhbj48L2E+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LWFwcC10b2MtYWJvdXQgW2Zyb21WaWV3ZXJdPVwiZnJvbVZpZXdlclwiIFtwYXRoU2V0XT1cInBhdGhTZXRcIiBbY29udGVudF09XCJjb250ZW50XCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbnRlbnRSZWFkRGF0YV09XCJjb250ZW50UmVhZERhdGFcIiBbYmFzZUNvbnRlbnRSZWFkRGF0YV09XCJiYXNlQ29udGVudFJlYWREYXRhXCJcbiAgICAgICAgICAgICAgICAgICAgW3RvY1N0cnVjdHVyZV09XCJ0b2NTdHJ1Y3R1cmVcIiBbY29uZmlnXT1cImNvbmZpZ1wiIFtmb3JQcmV2aWV3XT1cImZhbHNlXCIgW3N0aWNreV09XCJzdGlja3lcIlxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRCYXRjaERhdGFdPVwic2VsZWN0ZWRCYXRjaERhdGFcIiBbc2VsZWN0ZWRUYWJWYWx1ZV09XCJzZWxlY3RlZFRhYkluZGV4XCJcbiAgICAgICAgICAgICAgICAgICAgW3Jlc3VtZURhdGFdPVwicmVzdW1lRGF0YVwiIFtiYXRjaERhdGFdPVwiYmF0Y2hEYXRhXCIgW3NrZWxldG9uTG9hZGVyXT1cInNrZWxldG9uTG9hZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgW2NvbmRpdGlvbl09XCJjb25kaXRpb25cIiBba3BhcnJheV09XCJrcGFycmF5XCIgW3Nob3dSZXZpZXdzXT1cIid0cnVlJ1wiIFtsYW5ndWFnZUxpc3RdPVwibGFuZ3VhZ2VMaXN0XCJcbiAgICAgICAgICAgICAgICAgICAgW2xvY2tDZXJ0aWZpY2F0ZV09XCJsb2NrQ2VydGlmaWNhdGVcIiAodHJpZ2VyQ29tcGxldGlvblN1cnZleUZvcm0pPVwib3BlblN1cnZleUZvcm1Qb3B1cCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPC93cy13aWRnZXQtYXBwLXRvYy1hYm91dD5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbWF0LXRhYj5cblxuICAgICAgICA8IS0tIENvbnRlbnQgVGFiIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udGVudD8uY2hpbGRyZW4/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJ7eyAnYXBwdG9jc2luZ2xlcGFnZS5jb250ZW50JyB8IHRyYW5zbGF0ZSB9fVwiICpuZ0lmPVwiY29udGVudFRhYkZsYWdcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1hcHAtdG9jLWNvbnRlbnQgW2JhdGNoSWRdPVwiYmF0Y2hJZFwiIFtjb21wb25lbnROYW1lXT1cImNvbXBvbmVudE5hbWVcIiBbcGF0aFNldF09XCJwYXRoU2V0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjb250ZW50XT1cImNvbnRlbnRcIiBbdG9jU3RydWN0dXJlXT1cInRvY1N0cnVjdHVyZVwiIFtjb25maWddPVwiY29uZmlnXCIgW2ZvclByZXZpZXddPVwiZm9yUHJldmlld1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcmVzdW1lRGF0YV09XCJyZXN1bWVEYXRhXCIgW2JhdGNoRGF0YV09XCJiYXRjaERhdGFcIiBbc2tlbGV0b25Mb2FkZXJdPVwic2tlbGV0b25Mb2FkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2hpZXJhcmNoeU1hcERhdGFdPVwiaGllcmFyY2h5TWFwRGF0YVwiIFtiYXNlQ29udGVudFJlYWREYXRhXT1cImJhc2VDb250ZW50UmVhZERhdGFcIj5cbiAgICAgICAgICAgICAgICAgICAgPC93cy13aWRnZXQtYXBwLXRvYy1jb250ZW50PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L21hdC10YWI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb25maWc/LmNvbW1lbnRzVGFiICYmICFmb3JQcmV2aWV3XCI+XG4gICAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cInt7ICdhcHB0b2NzaW5nbGVwYWdlLnN0YXJ0RGlzY3Vzc2lvbicgfCB0cmFuc2xhdGUgfX1cIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgcmF0aW5ncy1kaXYgbXQtNVwiIGlkPVwiY29tbWVudHNEaXZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkaXNjdXNzV2lkZ2V0RGF0YSAmJiBkaXNjdXNzV2lkZ2V0RGF0YT8ubmV3Q29tbWVudFNlY3Rpb24/LmNvbW1lbnRUcmVlRGF0YT8uZW50aXR5SWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29tbWVudElkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGQtdjItd2lkZ2V0LWNvbW1lbnQgW3dpZGdldERhdGFdPVwiZGlzY3Vzc1dpZGdldERhdGFcIj48L2QtdjItd2lkZ2V0LWNvbW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb21tZW50SWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtMyBjdXJzb3ItcG9pbnRlciBtYi01XCIgKGNsaWNrKT1cImNsZWFyQ29tbWVudElkRnJvbVVybCgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCI+YXJyb3dfYmFjazwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhY2sgdG8gYWxsIGNvbW1lbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGQtdjItd2lkZ2V0LWNvbW1lbnQgW3dpZGdldERhdGFdPVwiZGlzY3Vzc1dpZGdldERhdGFcIiBbY29tbWVudElkXT1cImNvbW1lbnRJZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtza2VsZXRvbkxvYWRlcl0+PC9kLXYyLXdpZGdldC1jb21tZW50PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L21hdC10YWI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdJZj1cImNvbmZpZz8uc2FtdWhpa0NoYXJjaGFUYWIgJiYgY29uZGl0aW9uICYmIGNvbnRlbnRSZWFkRGF0YT8uZXZlbnRMaW5rZWQ/Lmxlbmd0aCA+IDAgJiYgZW5hYmxlU2FtdWhpa0NoYXJjaGFUYWJcIj5cbiAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwie3sgJ2FwcHRvY3NpbmdsZXBhZ2Uuc2FtdWhpa0NoYXJjaGEnIHwgdHJhbnNsYXRlIH19XCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHJhdGluZ3MtZGl2IG10LTVcIiBpZD1cInNhbXVoaWtDaGFyY2hhRGl2XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LXNhbXVoaWstY2hhcmNoYS1jb250ZW50IFtjb250ZW50XT1cImNvbnRlbnRSZWFkRGF0YVwiIFtjb25kaXRpb25EYXRhXT1cImNvbmRpdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlc3VtZUNvbnRlbnQpPVwicmVzdW1lQ29udGVudENhbGwoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC93cy13aWRnZXQtc2FtdWhpay1jaGFyY2hhLWNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L21hdC10YWI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwhLS0gVGVhY2hlcnMgTm90ZSBUYWIgLS0+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb250ZW50UmVhZERhdGE/LnJlZmVyZW5jZU5vZGVzICYmIHRlYWNoZXJOb3Rlc0ZsYWdcIj5cbiAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwiVGVhY2hlcnMgTm90ZVwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCByYXRpbmdzLWRpdiBtdC01XCIgaWQ9XCJ0ZWFjaGVyc05vdGVEaXZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtYXBwLXRvYy10ZWFjaGVycy1ub3RlcyBbY29udGVudF09XCJjb250ZW50UmVhZERhdGFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtub3Rlc0Rpc3BsYXlUeXBlXT1cIidUZWFjaGVycyBSZXNvdXJjZSdcIj48L3dzLXdpZGdldC1hcHAtdG9jLXRlYWNoZXJzLW5vdGVzPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8IS0tIFJlZmVyZW5jZSBOb3RlIFRhYiAtLT5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRlbnRSZWFkRGF0YT8ucmVmZXJlbmNlTm9kZXMgJiYgcmVmZXJlbmNlTm90ZXNGbGFnXCI+XG4gICAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cIlJlZmVyZW5jZSBOb3RlXCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHJhdGluZ3MtZGl2IG10LTVcIiBpZD1cInRlYWNoZXJzTm90ZURpdlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1hcHAtdG9jLXRlYWNoZXJzLW5vdGVzIFtjb250ZW50XT1cImNvbnRlbnRSZWFkRGF0YVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25vdGVzRGlzcGxheVR5cGVdPVwiJ1JlZmVyZW5jZSBSZXNvdXJjZSdcIj48L3dzLXdpZGdldC1hcHAtdG9jLXRlYWNoZXJzLW5vdGVzPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDx3cy13aWRnZXQtYXBwLXRvYy1yZWZlcmVuY2Utbm90ZXMgW2NvbnRlbnRdPVwiY29udGVudFJlYWREYXRhXCI+PC93cy13aWRnZXQtYXBwLXRvYy1yZWZlcmVuY2Utbm90ZXM+IC0tPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9tYXQtdGFiPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0Fzc2lnbm1lbnRzVGFiICYmICFmb3JQcmV2aWV3XCI+XG4gICAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cInt7ICdhcHB0b2NzaW5nbGVwYWdlLmFzc2lnbm1lbnRzJyB8IHRyYW5zbGF0ZSB9fVwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCByYXRpbmdzLWRpdiBtdC01XCIgaWQ9XCJ0YWtlQXNzZXNzbWVudERpdlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1hcHAtYmF0Y2gtYXNzaWdubWVudHMgW2NvbnRlbnRdPVwiY29udGVudFwiPjwvd3Mtd2lkZ2V0LWFwcC1iYXRjaC1hc3NpZ25tZW50cz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPCEtLSBUcmFuc2NyaXB0aW9uIFRhYiAtLT5cbiAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJBSSBUdXRvclwiICpuZ0lmPVwidmlld2VyUGFnZSAmJiBlbmFibGVBSVR1dG9yRmxhZyAmJiBpc01vYmlsZVwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdC10YWItbGFiZWw+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPkFJIFR1dG9yPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlZC1jaXJjbGUgbWwtNVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgTmV3XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dBSVR1dG9yUG9wdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx2aWV3ZXItYWktdHV0b3IgW2NvbnRlbnRdPVwiY29udGVudD8uaWRlbnRpZmllclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsb3NlQUlQb3B1cCk9XCJjbG9zZUFJUG9wdXAoJGV2ZW50KVwiPjwvdmlld2VyLWFpLXR1dG9yPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbWF0LXRhYj5cbiAgICA8L21hdC10YWItZ3JvdXA+XG48L2Rpdj4iXX0=
|
|
1
|
+
import { Component, EventEmitter, HostListener, Inject, Input, Output, ViewChild, ViewChildren } from '@angular/core';
|
|
2
|
+
import { NsContent, WsEvents } from '@sunbird-cb/utils-v2';
|
|
3
|
+
import { AiTutorConfirmPopupComponent } from './ai-tutor-confirm-popup/ai-tutor-confirm-popup.component';
|
|
4
|
+
import { MatLegacyDialogConfig as MatDialogConfig } from '@angular/material/legacy-dialog';
|
|
5
|
+
import { viewerRouteGenerator } from '../../../_services/viewer-route-util';
|
|
6
|
+
import { VttFile } from '@polyflix/vtt-parser';
|
|
7
|
+
import { tap } from 'rxjs/operators';
|
|
8
|
+
import { MatTab } from '@angular/material/tabs';
|
|
9
|
+
import * as _ from 'lodash';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "@angular/router";
|
|
12
|
+
import * as i2 from "@sunbird-cb/utils-v2";
|
|
13
|
+
import * as i3 from "../../../services/load-check.service";
|
|
14
|
+
import * as i4 from "@angular/material/legacy-dialog";
|
|
15
|
+
import * as i5 from "../../../services/app-toc.service";
|
|
16
|
+
import * as i6 from "../../../services/action.service";
|
|
17
|
+
import * as i7 from "../../../services/viewer-data.service";
|
|
18
|
+
import * as i8 from "../../../_services/samuhik-charcha.service";
|
|
19
|
+
import * as i9 from "@angular/common";
|
|
20
|
+
import * as i10 from "@angular/material/icon";
|
|
21
|
+
import * as i11 from "@angular/material/tabs";
|
|
22
|
+
import * as i12 from "@sunbird-cb/discussion-v2";
|
|
23
|
+
import * as i13 from "@angular/material/form-field";
|
|
24
|
+
import * as i14 from "@angular/material/select";
|
|
25
|
+
import * as i15 from "@angular/material/core";
|
|
26
|
+
import * as i16 from "./app-toc-about/app-toc-about.component";
|
|
27
|
+
import * as i17 from "./app-toc-content/app-toc-content.component";
|
|
28
|
+
import * as i18 from "./app-toc-teachers-notes/app-toc-teachers-notes.component";
|
|
29
|
+
import * as i19 from "./app-toc-batch-assignments/app-toc-batch-assignments.component";
|
|
30
|
+
import * as i20 from "./samuhik-charcha-content/samuhik-charcha-content/samuhik-charcha-content.component";
|
|
31
|
+
import * as i21 from "@ngx-translate/core";
|
|
32
|
+
import * as i22 from "../../../_pipes/highlight.pipe";
|
|
33
|
+
export class ContentTocComponent {
|
|
34
|
+
constructor(route, utilityService, loadCheckService, configService, dialog, tocSvc, actionSVC, router, eventSvc, viewerDataSvc, samuhikCharchaSvc, environment) {
|
|
35
|
+
this.route = route;
|
|
36
|
+
this.utilityService = utilityService;
|
|
37
|
+
this.loadCheckService = loadCheckService;
|
|
38
|
+
this.configService = configService;
|
|
39
|
+
this.dialog = dialog;
|
|
40
|
+
this.tocSvc = tocSvc;
|
|
41
|
+
this.actionSVC = actionSVC;
|
|
42
|
+
this.router = router;
|
|
43
|
+
this.eventSvc = eventSvc;
|
|
44
|
+
this.viewerDataSvc = viewerDataSvc;
|
|
45
|
+
this.samuhikCharchaSvc = samuhikCharchaSvc;
|
|
46
|
+
this.environment = environment;
|
|
47
|
+
this.tabChangeValue = '';
|
|
48
|
+
this.changeTab = false;
|
|
49
|
+
this.routeSubscription = null;
|
|
50
|
+
this.forPreview = window.location.href.includes('/public/') || window.location.href.includes('&preview=true');
|
|
51
|
+
this.contentTabFlag = true;
|
|
52
|
+
this.resumeData = null;
|
|
53
|
+
this.batchData = null;
|
|
54
|
+
this.skeletonLoader = false;
|
|
55
|
+
this.tocStructure = {};
|
|
56
|
+
this.fromViewer = false;
|
|
57
|
+
this.hierarchyMapData = {};
|
|
58
|
+
this.playResourceId = '';
|
|
59
|
+
this.sideNavBarOpened = false;
|
|
60
|
+
this.languageList = [];
|
|
61
|
+
this.lockCertificate = false;
|
|
62
|
+
this.playResumeForAI = new EventEmitter();
|
|
63
|
+
this.enrollUserToAI = new EventEmitter();
|
|
64
|
+
this.trigerCompletionSurveyForm = new EventEmitter();
|
|
65
|
+
this.resumeContent = new EventEmitter();
|
|
66
|
+
this.commentId = '';
|
|
67
|
+
this.sticky = false;
|
|
68
|
+
this.isMobile = false;
|
|
69
|
+
this.selectedTabIndex = 0;
|
|
70
|
+
this.teacherNotesFlag = false;
|
|
71
|
+
this.referenceNotesFlag = false;
|
|
72
|
+
this.viewerPage = window.location.href.includes('/viewer/') ? true : false;
|
|
73
|
+
this.enableAITutorFlag = false;
|
|
74
|
+
this.enableTranscriptionFlag = false;
|
|
75
|
+
this.courseCategory = NsContent.ECourseCategory;
|
|
76
|
+
this.subTitles$ = null;
|
|
77
|
+
this.resourceIdentifier$ = null;
|
|
78
|
+
this.subTitles = [];
|
|
79
|
+
this.keywordToHighlight = '';
|
|
80
|
+
this.highlightCondition = false;
|
|
81
|
+
this.vttLangArr = [];
|
|
82
|
+
this.transcriptionActiveLanguage = 'en';
|
|
83
|
+
this.defaultTranscriptLanguage = 'en';
|
|
84
|
+
this.transriptionLanguageSub = null;
|
|
85
|
+
this.fromAITutor = false;
|
|
86
|
+
this.totalResource = 0;
|
|
87
|
+
this.scormAssessmentCount = 0;
|
|
88
|
+
this.showAITutorPopup = false;
|
|
89
|
+
this.fromAISelectedTabIndex = false;
|
|
90
|
+
this.isMobileForAI = false;
|
|
91
|
+
this.transcriptActiveLanguageText = 'English';
|
|
92
|
+
this.showAssignmentsTab = false;
|
|
93
|
+
this.enableSamuhikCharchaTab = false;
|
|
94
|
+
}
|
|
95
|
+
ngOnInit() {
|
|
96
|
+
if (this.configService.iGOTAIConfig && this.configService.iGOTAIConfig?.aiTutor && this.configService.iGOTAIConfig?.aiTutor?.all) {
|
|
97
|
+
// console.log('this.contentReadData--', this.route.snapshot.data)
|
|
98
|
+
this.enableAITutorFlag = this.onlyscormAssessmentExists(this.route.snapshot?.data?.content?.data?.children, 'mimeType', ['application/vnd.ekstep.html-archive', 'application/vnd.sunbird.questionset', 'application/json', 'text/x-url']);
|
|
99
|
+
// this.enableAITutorFlag = true
|
|
100
|
+
}
|
|
101
|
+
else if (this.configService.iGOTAIConfig && this.configService.iGOTAIConfig?.aiTutor && this.configService.iGOTAIConfig?.aiTutor?.forOrg && this.configService.iGOTAIConfig.aiTutor?.forOrg?.length &&
|
|
102
|
+
this.configService.iGOTAIConfig?.aiTutor?.forOrg.includes(this.configService.userProfile?.rootOrgId)) {
|
|
103
|
+
// console.log('this.contentReadData--', this.route.snapshot.data)
|
|
104
|
+
this.enableAITutorFlag = this.onlyscormAssessmentExists(this.route.snapshot?.data?.content?.data?.children, 'mimeType', ['application/vnd.ekstep.html-archive', 'application/vnd.sunbird.questionset', 'application/json', 'text/x-url']);
|
|
105
|
+
// this.enableAITutorFlag = true
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
this.enableAITutorFlag = false;
|
|
109
|
+
}
|
|
110
|
+
if (this.configService.iGOTAIConfig && this.configService.iGOTAIConfig?.transcription?.all) {
|
|
111
|
+
// console.log('in')
|
|
112
|
+
// this.resourceIdentifier$ = this.tocSvc.transriptionIdentifier.subscribe((value:any)=>{
|
|
113
|
+
// // console.log('resource identifier', value)
|
|
114
|
+
// if(value && value?.identifier) {
|
|
115
|
+
// this.resourceIdentifier = value?.identifier //value?.identifier // do_1138891198489067521147
|
|
116
|
+
// this.parseVTT()
|
|
117
|
+
// }
|
|
118
|
+
// })
|
|
119
|
+
this.subTitles$ = this.tocSvc.transcriptionData$.subscribe((value) => {
|
|
120
|
+
// console.log('value', value)
|
|
121
|
+
this.keywordToHighlight = value;
|
|
122
|
+
});
|
|
123
|
+
this.transriptionLanguageSub = this.tocSvc.transriptionActiveLanguageDataObject$
|
|
124
|
+
.pipe(tap((langvalue) => console.log('tap langvalue:', langvalue)))
|
|
125
|
+
.subscribe((langvalue) => {
|
|
126
|
+
// console.log('langValue', langvalue);
|
|
127
|
+
if (langvalue) {
|
|
128
|
+
// this.renderSelectedLanguageTranscription();
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
this.enableTranscriptionFlag = true;
|
|
132
|
+
}
|
|
133
|
+
else if (this.configService.iGOTAIConfig && this.configService.iGOTAIConfig?.transcription && this.configService.iGOTAIConfig?.transcription?.forOrg && this.configService.iGOTAIConfig?.transcription?.forOrg?.length &&
|
|
134
|
+
this.configService.iGOTAIConfig?.transcription?.forOrg?.includes(this.configService.userProfile?.rootOrgId)) {
|
|
135
|
+
// console.log('in')
|
|
136
|
+
// this.resourceIdentifier$ = this.tocSvc.transriptionIdentifier.subscribe((value:any)=>{
|
|
137
|
+
// // console.log('resource identifier', value)
|
|
138
|
+
// if(value && value?.identifier) {
|
|
139
|
+
// this.resourceIdentifier = value?.identifier //value?.identifier // do_1138891198489067521147
|
|
140
|
+
// this.parseVTT()
|
|
141
|
+
// }
|
|
142
|
+
// })
|
|
143
|
+
this.subTitles$ = this.tocSvc.transcriptionData$.subscribe((value) => {
|
|
144
|
+
// console.log('value', value)
|
|
145
|
+
this.keywordToHighlight = value;
|
|
146
|
+
});
|
|
147
|
+
this.transriptionLanguageSub = this.tocSvc.transriptionActiveLanguageDataObject$
|
|
148
|
+
.pipe(tap((langvalue) => console.log('tap langvalue:', langvalue)))
|
|
149
|
+
.subscribe((langvalue) => {
|
|
150
|
+
// console.log('langValue', langvalue);
|
|
151
|
+
if (langvalue) {
|
|
152
|
+
// this.renderSelectedLanguageTranscription();
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
this.enableTranscriptionFlag = true;
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
this.enableTranscriptionFlag = false;
|
|
159
|
+
}
|
|
160
|
+
const batchId = this.route.snapshot.queryParams.batchId ?
|
|
161
|
+
this.route.snapshot.queryParams.batchId : '';
|
|
162
|
+
if (batchId) {
|
|
163
|
+
this.selectedTabIndex = 1;
|
|
164
|
+
}
|
|
165
|
+
this.commentId = this.route.snapshot.queryParams.commentId ? this.route.snapshot.queryParams.commentId : '';
|
|
166
|
+
if (this.commentId) {
|
|
167
|
+
this.selectedTabIndex = 2;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
ngAfterViewInit() {
|
|
171
|
+
this.isMobile = this.utilityService.isMobile;
|
|
172
|
+
if (window.innerWidth < 1480) {
|
|
173
|
+
this.isMobileForAI = true;
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
this.isMobileForAI = false;
|
|
177
|
+
}
|
|
178
|
+
this.menuPosition = this.tabElement._elementRef.nativeElement.offsetTop;
|
|
179
|
+
this.route.queryParamMap.subscribe(async (params) => {
|
|
180
|
+
let fromAITutor = params.get('fromAITutor');
|
|
181
|
+
if ((fromAITutor === 'true' || fromAITutor === true) && this.isMobile) {
|
|
182
|
+
setTimeout(() => {
|
|
183
|
+
const tabsArray = this.tabs?.toArray();
|
|
184
|
+
let index = tabsArray?.findIndex(tab => tab.textLabel.trim() === "AI Tutor".trim());
|
|
185
|
+
if (index > -1) {
|
|
186
|
+
this.selectedTabIndex = index;
|
|
187
|
+
this.fromAISelectedTabIndex = true;
|
|
188
|
+
}
|
|
189
|
+
}, 3000);
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
get getCurrentTimeInUTC() {
|
|
194
|
+
const currentDate = new Date();
|
|
195
|
+
const isoString = currentDate.toISOString();
|
|
196
|
+
return isoString.replace('Z', '+0000');
|
|
197
|
+
}
|
|
198
|
+
async getSamuhikConfig() {
|
|
199
|
+
try {
|
|
200
|
+
this.samuhikConfig = await this.samuhikCharchaSvc.fetchConfigFile().toPromise();
|
|
201
|
+
}
|
|
202
|
+
catch (error) {
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
async ngOnChanges(changes) {
|
|
206
|
+
this.resourceIdentifier = this.viewerDataSvc.resourceId;
|
|
207
|
+
if (this.configService.iGOTAIConfig && this.configService.iGOTAIConfig?.transcription?.all) {
|
|
208
|
+
this.enableTranscriptionFlag = true;
|
|
209
|
+
}
|
|
210
|
+
else if (this.configService.iGOTAIConfig && this.configService.iGOTAIConfig?.transcription && this.configService.iGOTAIConfig?.transcription?.forOrg && this.configService.iGOTAIConfig?.transcription?.forOrg?.length &&
|
|
211
|
+
this.configService.iGOTAIConfig?.transcription?.forOrg?.includes(this.configService?.userProfile?.rootOrgId)) {
|
|
212
|
+
this.enableTranscriptionFlag = true;
|
|
213
|
+
}
|
|
214
|
+
else {
|
|
215
|
+
this.enableTranscriptionFlag = false;
|
|
216
|
+
}
|
|
217
|
+
if (this.configService.iGOTAIConfig && this.configService.iGOTAIConfig?.aiTutor && this.configService.iGOTAIConfig.aiTutor?.all) {
|
|
218
|
+
// console.log('this.contentReadData--', this.route.snapshot.data)
|
|
219
|
+
this.enableAITutorFlag = this.onlyscormAssessmentExists(this.content?.children, 'mimeType', ['application/vnd.ekstep.html-archive', 'application/vnd.sunbird.questionset', 'application/json', 'text/x-url']);
|
|
220
|
+
// this.enableAITutorFlag = true
|
|
221
|
+
}
|
|
222
|
+
else if (this.configService.iGOTAIConfig && this.configService.iGOTAIConfig?.aiTutor && this.configService.iGOTAIConfig?.aiTutor?.forOrg && this.configService.iGOTAIConfig?.aiTutor?.forOrg?.length
|
|
223
|
+
&& this.configService.iGOTAIConfig.aiTutor?.forOrg?.includes(this.configService?.userProfile?.rootOrgId)) {
|
|
224
|
+
this.enableAITutorFlag = this.onlyscormAssessmentExists(this.content?.children, 'mimeType', ['application/vnd.ekstep.html-archive', 'application/vnd.sunbird.questionset', 'application/json', 'text/x-url']);
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
this.enableAITutorFlag = false;
|
|
228
|
+
}
|
|
229
|
+
if (changes && changes['playResourceId']) {
|
|
230
|
+
if (changes?.playResourceId?.previousValue !== changes?.playResourceId?.currentValue) {
|
|
231
|
+
if (this.viewerPage && this.viewerDataSvc?.resourceId && this.enableTranscriptionFlag) {
|
|
232
|
+
this.parseVTT();
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
if (changes.changeTab && changes.changeTab.currentValue && !this.fromAISelectedTabIndex) {
|
|
237
|
+
this.selectedTabIndex = 1;
|
|
238
|
+
}
|
|
239
|
+
if (this.route.snapshot.data.pageData && this.route.snapshot.data.pageData.data) {
|
|
240
|
+
this.config = this.route.snapshot.data.pageData.data;
|
|
241
|
+
}
|
|
242
|
+
if (this.config && this.config.discussWidgetData) {
|
|
243
|
+
this.discussWidgetData = this.config.discussWidgetData;
|
|
244
|
+
if (this.baseContentReadData && this.baseContentReadData.identifier) {
|
|
245
|
+
// console.log('this.content.identifier', this.content.identifier)
|
|
246
|
+
if (!this.discussWidgetData.newCommentSection.commentTreeData.entityId) {
|
|
247
|
+
this.discussWidgetData.newCommentSection.commentTreeData.entityId = this.baseContentReadData.identifier;
|
|
248
|
+
}
|
|
249
|
+
if (this.discussWidgetData.commentsList.repliesSection && this.discussWidgetData.commentsList.repliesSection.newCommentReply) {
|
|
250
|
+
this.discussWidgetData.commentsList.repliesSection.newCommentReply.commentTreeData.entityId = this.baseContentReadData.identifier;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
if (this.isEnrolled) {
|
|
254
|
+
if (this.content && this.content.primaryCategory === NsContent.ECourseCategory.BLENDED_PROGRAM) {
|
|
255
|
+
this.showAssignmentsTab = true;
|
|
256
|
+
}
|
|
257
|
+
this.discussWidgetData.enrolledContent = true;
|
|
258
|
+
this.discussWidgetData.newCommentSection.commentBox.placeholder = 'Start a discussion';
|
|
259
|
+
}
|
|
260
|
+
else {
|
|
261
|
+
this.discussWidgetData.enrolledContent = false;
|
|
262
|
+
this.discussWidgetData.newCommentSection.commentBox.placeholder = 'Enrol to add your comments';
|
|
263
|
+
}
|
|
264
|
+
if (this.commentId) {
|
|
265
|
+
this.discussWidgetData.newCommentSection.show = false;
|
|
266
|
+
}
|
|
267
|
+
this.discussWidgetData = { ...this.discussWidgetData };
|
|
268
|
+
}
|
|
269
|
+
if (this.contentReadData && this.contentReadData?.eventLinked?.length) {
|
|
270
|
+
const orgId = _.get(this.configService, 'userProfile.userRootOrg.id', '');
|
|
271
|
+
await this.getSamuhikConfig();
|
|
272
|
+
const eventsLinked = this.contentReadData.eventLinked || [];
|
|
273
|
+
let eventsData = [];
|
|
274
|
+
this.samuhikConfig?.strips[0].tabs.forEach((ele) => {
|
|
275
|
+
ele.request.searchV6.request.filters.identifier = eventsLinked;
|
|
276
|
+
ele.request.searchV6.request.filters.createdFor = [orgId];
|
|
277
|
+
if (ele.request.searchV6.request.filters.endDateTime.hasOwnProperty('>=')) {
|
|
278
|
+
ele.request.searchV6.request.filters.endDateTime['>='] = this.getCurrentTimeInUTC;
|
|
279
|
+
}
|
|
280
|
+
if (ele.request.searchV6.request.filters.endDateTime.hasOwnProperty('<')) {
|
|
281
|
+
ele.request.searchV6.request.filters.endDateTime['<'] = this.getCurrentTimeInUTC;
|
|
282
|
+
}
|
|
283
|
+
this.samuhikCharchaSvc.getSearchV6Results(ele.request.searchV6).subscribe((res) => {
|
|
284
|
+
if (res && res.result && res.result.count && res.result?.Event && res.result.Event?.length) {
|
|
285
|
+
for (let eve = 0; eve < res.result.Event?.length; eve++) {
|
|
286
|
+
if (res.result.Event[eve]['createdFor'] && res.result.Event[eve]['createdFor'].length &&
|
|
287
|
+
res.result.Event[eve]['resourceType'] === 'Samuhik Charcha')
|
|
288
|
+
eventsData.push(res.result.Event[eve]['createdFor'][0]);
|
|
289
|
+
if (eventsData.includes(this.configService.userProfile?.rootOrgId)) {
|
|
290
|
+
this.enableSamuhikCharchaTab = true;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
if (this.contentReadData && this.contentReadData.referenceNodes) {
|
|
298
|
+
this.contentReadData.referenceNodes.forEach((item) => {
|
|
299
|
+
let userRoles = this.configService?.userRoles || new Set();
|
|
300
|
+
let hasEducatorRole = false;
|
|
301
|
+
// Check if user has MENTOR role
|
|
302
|
+
if (userRoles.has('MENTOR') ||
|
|
303
|
+
userRoles.has('mentor') ||
|
|
304
|
+
userRoles.has('Mentor')) {
|
|
305
|
+
hasEducatorRole = true;
|
|
306
|
+
}
|
|
307
|
+
// Check local storage for survey response only if URL contains 'public' or 'preview=true'
|
|
308
|
+
if (!hasEducatorRole && this.forPreview) {
|
|
309
|
+
const surveyId = this.environment.publicContentSurveyId || '';
|
|
310
|
+
const courseId = this.contentReadData?.identifier || '';
|
|
311
|
+
const storageKey = `survey_${surveyId}_${courseId}`;
|
|
312
|
+
const storedData = localStorage.getItem(storageKey);
|
|
313
|
+
if (storedData) {
|
|
314
|
+
try {
|
|
315
|
+
const surveyResponses = JSON.parse(storedData);
|
|
316
|
+
const educatorQuestion = surveyResponses.find((response) => response.question === 'Are you an Educator/Faculty member?');
|
|
317
|
+
if (educatorQuestion && educatorQuestion.answer === 'Yes') {
|
|
318
|
+
hasEducatorRole = true;
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
catch (error) {
|
|
322
|
+
console.error('Error parsing survey data from local storage:', error);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
// Set teacherNotesFlag if user has educator role
|
|
327
|
+
if (hasEducatorRole) {
|
|
328
|
+
if (item && item.resourceCategory && item.resourceCategory === 'Teachers Resource') {
|
|
329
|
+
this.teacherNotesFlag = true;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
if (item && item.resourceCategory && item.resourceCategory === 'Reference Resource') {
|
|
333
|
+
this.referenceNotesFlag = true;
|
|
334
|
+
}
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
if (this.sideNavBarOpened) {
|
|
338
|
+
if (window.innerWidth < 1480) {
|
|
339
|
+
if (this.isMobileForAI) {
|
|
340
|
+
this.isMobileForAI = false;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
else {
|
|
344
|
+
this.isMobileForAI = false;
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
else {
|
|
348
|
+
if (window.innerWidth < 1480) {
|
|
349
|
+
this.isMobileForAI = true;
|
|
350
|
+
}
|
|
351
|
+
else {
|
|
352
|
+
this.isMobileForAI = false;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
handleScroll() {
|
|
357
|
+
const windowScroll = window.scrollY;
|
|
358
|
+
if (windowScroll >= (this.menuPosition - ((this.isMobile) ? 96 : 104))) {
|
|
359
|
+
this.sticky = true;
|
|
360
|
+
}
|
|
361
|
+
else {
|
|
362
|
+
this.sticky = false;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
handleTabChange(event) {
|
|
366
|
+
this.tabChangeValue = event.tab;
|
|
367
|
+
this.selectedTabIndex = event.index;
|
|
368
|
+
this.loadCheckService.componentLoaded(true);
|
|
369
|
+
// console.log('event', event)
|
|
370
|
+
// console.log('this.content', this.viewerDataSvc?.resourceId)
|
|
371
|
+
if (event && event.tab.textLabel === 'AI Tutor') {
|
|
372
|
+
this.showAITutorPopup = true;
|
|
373
|
+
}
|
|
374
|
+
if (event && event.index === 0 && event.tab.textLabel === 'Transcription') {
|
|
375
|
+
this.raiseTranscriptionTabStartTelemetry();
|
|
376
|
+
setTimeout(() => {
|
|
377
|
+
this.raiseTranscriptionTabInteractTelemetry();
|
|
378
|
+
}, 1000);
|
|
379
|
+
}
|
|
380
|
+
else {
|
|
381
|
+
this.raiseTranscriptionTabStopTelemetry();
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
showAiTutorConfirmPopup() {
|
|
385
|
+
this.raiseAIPopupStartTelemetry();
|
|
386
|
+
if (this.isEnrolled) {
|
|
387
|
+
this.fromAITutor = true;
|
|
388
|
+
setTimeout(() => {
|
|
389
|
+
this.raiseAIPopupInteractTelemetry();
|
|
390
|
+
}, 1000);
|
|
391
|
+
this.generateResumeDataLinkNew();
|
|
392
|
+
setTimeout(() => {
|
|
393
|
+
this.raiseAIPopupEndTelemetry();
|
|
394
|
+
}, 1000);
|
|
395
|
+
}
|
|
396
|
+
else {
|
|
397
|
+
setTimeout(() => {
|
|
398
|
+
this.raiseAIPopupInteractTelemetry();
|
|
399
|
+
}, 1000);
|
|
400
|
+
const dialogConfig = new MatDialogConfig();
|
|
401
|
+
dialogConfig.width = '421px';
|
|
402
|
+
dialogConfig.data = {
|
|
403
|
+
enroll: this.isEnrolled
|
|
404
|
+
};
|
|
405
|
+
const dialogRef = this.dialog.open(AiTutorConfirmPopupComponent, dialogConfig);
|
|
406
|
+
dialogRef.afterClosed().subscribe((response) => {
|
|
407
|
+
if (response === 'enroll') {
|
|
408
|
+
this.fromAITutor = true;
|
|
409
|
+
this.generateResumeDataLinkNew();
|
|
410
|
+
}
|
|
411
|
+
else if (response === 'needToEnroll') {
|
|
412
|
+
this.enrollUserForAITutor();
|
|
413
|
+
}
|
|
414
|
+
this.raiseAIPopupEndTelemetry();
|
|
415
|
+
});
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
generateResumeDataLinkNew() {
|
|
419
|
+
if (this.resumeData && this.content) {
|
|
420
|
+
let resumeDataV2;
|
|
421
|
+
if (this.content.completionPercentage === 100) {
|
|
422
|
+
resumeDataV2 = this.getResumeDataFromList('start');
|
|
423
|
+
}
|
|
424
|
+
else {
|
|
425
|
+
resumeDataV2 = this.getResumeDataFromList();
|
|
426
|
+
}
|
|
427
|
+
if (!resumeDataV2.mimeType) {
|
|
428
|
+
resumeDataV2.mimeType = this.tocSvc.getMimeType(this.content, resumeDataV2.identifier);
|
|
429
|
+
}
|
|
430
|
+
this.resumeDataLink = viewerRouteGenerator(resumeDataV2.identifier, resumeDataV2.mimeType, this.content.identifier, this.content.contentType, this.forPreview, 'Learning Resource', this.getBatchId(), this.content.name);
|
|
431
|
+
this.actionSVC.setUpdateCompGroupO = this.resumeDataLink;
|
|
432
|
+
// console.log('this.resumeDataLink',this.resumeDataLink)
|
|
433
|
+
// console.log('this.actionSVC', this.actionSVC)
|
|
434
|
+
this.router.navigate([this.resumeDataLink.url], {
|
|
435
|
+
queryParams: {
|
|
436
|
+
...this.resumeDataLink.queryParams,
|
|
437
|
+
fromAITutor: this.fromAITutor
|
|
438
|
+
}
|
|
439
|
+
});
|
|
440
|
+
// this.router.navigateByUrl(
|
|
441
|
+
// [this.resumeDataLink.url],
|
|
442
|
+
// {
|
|
443
|
+
// relativeTo: this.resumeDataLink.url,
|
|
444
|
+
// queryParams: this.resumeDataLink.queryParams,
|
|
445
|
+
// queryParamsHandling: 'merge',
|
|
446
|
+
// })
|
|
447
|
+
/* tslint:disable-next-line */
|
|
448
|
+
}
|
|
449
|
+
else {
|
|
450
|
+
this.playResumeForAI.emit();
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
getResumeDataFromList(type) {
|
|
454
|
+
const resumeCopy = [...this.resumeData];
|
|
455
|
+
if (!type) {
|
|
456
|
+
// tslint:disable-next-line:max-line-length
|
|
457
|
+
const lastItem = resumeCopy && resumeCopy.sort((a, b) => new Date(b.lastAccessTime).getTime() - new Date(a.lastAccessTime).getTime()).shift();
|
|
458
|
+
return {
|
|
459
|
+
identifier: lastItem.contentId,
|
|
460
|
+
mimeType: lastItem.progressdetails && lastItem.progressdetails.mimeType,
|
|
461
|
+
};
|
|
462
|
+
}
|
|
463
|
+
const firstItem = resumeCopy && resumeCopy.length && resumeCopy[0];
|
|
464
|
+
return {
|
|
465
|
+
identifier: firstItem.contentId,
|
|
466
|
+
mimeType: firstItem.progressdetails && firstItem.progressdetails.mimeType,
|
|
467
|
+
};
|
|
468
|
+
}
|
|
469
|
+
getBatchId() {
|
|
470
|
+
let batchId = '';
|
|
471
|
+
if (this.batchData && this.batchData.content) {
|
|
472
|
+
for (const batch of this.batchData.content) {
|
|
473
|
+
batchId = batch.batchId;
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
return batchId;
|
|
477
|
+
}
|
|
478
|
+
raiseAIPopupStartTelemetry() {
|
|
479
|
+
const event = {
|
|
480
|
+
eventType: WsEvents.WsEventType.Telemetry,
|
|
481
|
+
eventLogLevel: WsEvents.WsEventLogLevel.Info,
|
|
482
|
+
data: {
|
|
483
|
+
edata: { type: 'click', "id": "ai-tutor-toc-page", "pageid": `/app/toc/${this.content?.identifier}` },
|
|
484
|
+
object: { "id": this.content?.identifier, "type": this.content?.courseCategory },
|
|
485
|
+
state: WsEvents.EnumTelemetrySubType.Loaded,
|
|
486
|
+
eventSubType: WsEvents.EnumTelemetrySubType.Chatbot,
|
|
487
|
+
mode: 'view',
|
|
488
|
+
},
|
|
489
|
+
pageContext: { pageId: '/app/toc', module: 'Learn' },
|
|
490
|
+
from: '',
|
|
491
|
+
to: 'Telemetry',
|
|
492
|
+
};
|
|
493
|
+
this.eventSvc.dispatchChatbotEvent(event);
|
|
494
|
+
}
|
|
495
|
+
raiseAIPopupEndTelemetry() {
|
|
496
|
+
const event = {
|
|
497
|
+
eventType: WsEvents.WsEventType.Telemetry,
|
|
498
|
+
eventLogLevel: WsEvents.WsEventLogLevel.Info,
|
|
499
|
+
data: {
|
|
500
|
+
edata: { type: 'click', "id": "ai-tutor-toc-page", "pageid": `/app/toc/${this.content?.identifier}` },
|
|
501
|
+
object: { "id": this.content?.identifier, "type": this.content?.courseCategory },
|
|
502
|
+
state: WsEvents.EnumTelemetrySubType.Unloaded,
|
|
503
|
+
eventSubType: WsEvents.EnumTelemetrySubType.Chatbot,
|
|
504
|
+
mode: 'view',
|
|
505
|
+
},
|
|
506
|
+
pageContext: { pageId: '/app/toc', module: 'Learn' },
|
|
507
|
+
from: '',
|
|
508
|
+
to: 'Telemetry',
|
|
509
|
+
};
|
|
510
|
+
this.eventSvc.dispatchChatbotEvent(event);
|
|
511
|
+
}
|
|
512
|
+
raiseAIPopupInteractTelemetry() {
|
|
513
|
+
const event = {
|
|
514
|
+
eventType: WsEvents.WsEventType.Telemetry,
|
|
515
|
+
eventLogLevel: WsEvents.WsEventLogLevel.Info,
|
|
516
|
+
data: {
|
|
517
|
+
edata: { type: 'click', "id": "ai-tutor-toc-page", "pageid": `/app/toc/${this.content?.identifier}` },
|
|
518
|
+
object: { "id": this.content?.identifier, "type": this.content?.courseCategory },
|
|
519
|
+
state: WsEvents.EnumTelemetrySubType.Interact,
|
|
520
|
+
eventSubType: WsEvents.EnumTelemetrySubType.Chatbot,
|
|
521
|
+
mode: 'view',
|
|
522
|
+
},
|
|
523
|
+
pageContext: { pageId: '/app/toc', module: 'Learn' },
|
|
524
|
+
from: '',
|
|
525
|
+
to: 'Telemetry',
|
|
526
|
+
};
|
|
527
|
+
this.eventSvc.dispatchChatbotEvent(event);
|
|
528
|
+
}
|
|
529
|
+
enrollUserForAITutor() {
|
|
530
|
+
this.enrollUserToAI.emit();
|
|
531
|
+
}
|
|
532
|
+
async parseVTT() {
|
|
533
|
+
let identifier = this.resourceIdentifier;
|
|
534
|
+
// console.log('identifier--', identifier)
|
|
535
|
+
await this.tocSvc.aiGetResourceVttFile(identifier).subscribe(async (datas) => {
|
|
536
|
+
let data = datas?.data;
|
|
537
|
+
if (data && data.length && data[0]['transcription_urls'] && data[0]['transcription_urls'].length) {
|
|
538
|
+
this.vttLangArr = data[0]['transcription_urls'];
|
|
539
|
+
this.enableTranscriptionFlag = true;
|
|
540
|
+
// let url = data[0]['transcription_urls'][0]['uri']
|
|
541
|
+
// console.log('this.vttLangArr--',this.vttLangArr)
|
|
542
|
+
this.transcriptionActiveLanguage = this.vttLangArr && this.vttLangArr.length && this.vttLangArr[0] && this.vttLangArr[0]['default_lang'] ? 'en' : 'en';
|
|
543
|
+
this.defaultTranscriptLanguage = this.vttLangArr && this.vttLangArr.length && this.vttLangArr[0] && this.vttLangArr[0]['default_lang'] ? 'en' : 'en';
|
|
544
|
+
// console.log('this.transcriptionActiveLanguage--', this.transcriptionActiveLanguage)
|
|
545
|
+
let selectedTranscriptionStyle = this.vttLangArr.filter((item) => {
|
|
546
|
+
return item?.label === this.transcriptionActiveLanguage;
|
|
547
|
+
});
|
|
548
|
+
if (selectedTranscriptionStyle && selectedTranscriptionStyle.length) {
|
|
549
|
+
this.selectedTranscriptionStyle = selectedTranscriptionStyle[0];
|
|
550
|
+
}
|
|
551
|
+
else {
|
|
552
|
+
this.selectedTranscriptionStyle = this.vttLangArr[0];
|
|
553
|
+
}
|
|
554
|
+
// console.log('this.selectedTranscriptionStyle--', this.selectedTranscriptionStyle)
|
|
555
|
+
const filteredArr = this.vttLangArr.filter((item) => item.label === this.transcriptionActiveLanguage);
|
|
556
|
+
let url = filteredArr.length > 0 ? filteredArr[0].uri : null;
|
|
557
|
+
//let url = this.vttLangArr.filter((item: any) => item.label === this.transcriptionActiveLanguage)[0]['uri']
|
|
558
|
+
if (url) {
|
|
559
|
+
const file = await VttFile.fromUrl(url);
|
|
560
|
+
let blocks = file.getBlocks();
|
|
561
|
+
this.subTitles = blocks;
|
|
562
|
+
}
|
|
563
|
+
// console.log('this.vttLangArr--',this.vttLangArr)
|
|
564
|
+
// if(this.vttLangArr && this.vttLangArr.length) {
|
|
565
|
+
// this.transcriptionActiveLanguage = this.vttLangArr[0]['label']
|
|
566
|
+
// } else {
|
|
567
|
+
// this.transcriptionActiveLanguage = this.vttLangArr[0]['default_lang']
|
|
568
|
+
// }
|
|
569
|
+
this.tocSvc.changeTranscriptionLanguageEvent.next({ activeLang: this.transcriptionActiveLanguage, langData: this.vttLangArr, loadPlayer: true });
|
|
570
|
+
}
|
|
571
|
+
else {
|
|
572
|
+
this.vttLangArr = [];
|
|
573
|
+
this.enableTranscriptionFlag = false;
|
|
574
|
+
}
|
|
575
|
+
});
|
|
576
|
+
}
|
|
577
|
+
async renderSelectedLanguageTranscription(_langvalue) {
|
|
578
|
+
// this.transcriptionActiveLanguage = this.selectedTranscriptionStyle?.label
|
|
579
|
+
if (typeof _langvalue === 'string' && _langvalue) {
|
|
580
|
+
this.transcriptionActiveLanguage = _langvalue;
|
|
581
|
+
}
|
|
582
|
+
else {
|
|
583
|
+
this.selectedTranscriptionStyle = _langvalue?.value;
|
|
584
|
+
this.transcriptionActiveLanguage = this.selectedTranscriptionStyle?.label;
|
|
585
|
+
this.transcriptActiveLanguageText = _langvalue?.value?.language;
|
|
586
|
+
}
|
|
587
|
+
this.raiseTranscriptionLanguageStartTelemetry();
|
|
588
|
+
setTimeout(() => {
|
|
589
|
+
this.raiseTranscriptionLanguageInteractTelemetry();
|
|
590
|
+
});
|
|
591
|
+
let currentPath = this.vttLangArr.filter((item) => item?.label === this.transcriptionActiveLanguage);
|
|
592
|
+
if (currentPath && currentPath.length) {
|
|
593
|
+
this.selectedTranscriptionStyle = currentPath[0];
|
|
594
|
+
}
|
|
595
|
+
const file = await VttFile.fromUrl(currentPath && currentPath[0]?.uri);
|
|
596
|
+
let blocks = file.getBlocks();
|
|
597
|
+
this.subTitles = blocks;
|
|
598
|
+
this.raiseTranscriptionLanguageStopTelemetry();
|
|
599
|
+
// this.tocSvc.changeTranscriptionLanguageEvent.next({activeLang: this.transcriptionActiveLanguage, langData: this.vttLangArr, loadPlayer:false})
|
|
600
|
+
}
|
|
601
|
+
openSurveyFormPopup(event) {
|
|
602
|
+
this.trigerCompletionSurveyForm.emit(event);
|
|
603
|
+
}
|
|
604
|
+
playFromSlot(subtitle) {
|
|
605
|
+
if (subtitle) {
|
|
606
|
+
let startTime = subtitle.startTime / 1000;
|
|
607
|
+
let endTime = subtitle.endTime / 1000;
|
|
608
|
+
this.tocSvc.playTranscriptionVideo.next({ startTime, endTime });
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
formatMsToVttTime(ms) {
|
|
612
|
+
const totalSeconds = Math.floor(ms / 1000);
|
|
613
|
+
// const milliseconds = ms % 1000;
|
|
614
|
+
const hours = Math.floor(totalSeconds / 3600);
|
|
615
|
+
const minutes = Math.floor((totalSeconds % 3600) / 60);
|
|
616
|
+
const seconds = totalSeconds % 60;
|
|
617
|
+
const pad = (num, size) => num.toString().padStart(size, '0');
|
|
618
|
+
// return `${pad(hours, 2)}:${pad(minutes, 2)}:${pad(seconds, 2)}.${pad(milliseconds, 3)}`;
|
|
619
|
+
return `${pad(hours, 2)}:${pad(minutes, 2)}:${pad(seconds, 2)}`;
|
|
620
|
+
}
|
|
621
|
+
onlyscormAssessmentExists(data, key, value) {
|
|
622
|
+
for (let i = 0; i < data?.length; i++) {
|
|
623
|
+
if (data[i] && data[i]['children'] && data[i]['children'].length) {
|
|
624
|
+
// this.totalResource = this.totalResource + 1
|
|
625
|
+
// console.log('in children')
|
|
626
|
+
this.onlyscormAssessmentExists(data[i]?.children, key, value);
|
|
627
|
+
}
|
|
628
|
+
else {
|
|
629
|
+
this.totalResource = this.totalResource + 1;
|
|
630
|
+
if (value.includes(data[i][key])) {
|
|
631
|
+
// this.showAITutorFlag = false;
|
|
632
|
+
this.scormAssessmentCount = this.scormAssessmentCount + 1;
|
|
633
|
+
}
|
|
634
|
+
}
|
|
635
|
+
}
|
|
636
|
+
if (this.totalResource === this.scormAssessmentCount) {
|
|
637
|
+
this.enableAITutorFlag = false;
|
|
638
|
+
}
|
|
639
|
+
else {
|
|
640
|
+
this.enableAITutorFlag = true;
|
|
641
|
+
}
|
|
642
|
+
return this.enableAITutorFlag;
|
|
643
|
+
}
|
|
644
|
+
raiseTranscriptionTabStartTelemetry() {
|
|
645
|
+
const event = {
|
|
646
|
+
eventType: WsEvents.WsEventType.Telemetry,
|
|
647
|
+
eventLogLevel: WsEvents.WsEventLogLevel.Info,
|
|
648
|
+
data: {
|
|
649
|
+
edata: { type: 'click', "id": "ai-tutor-viewer-page", "pageid": `/viewer/video/${this.viewerDataSvc?.resourceId}`, subType: 'transcript-tab' },
|
|
650
|
+
object: { "id": this.content?.identifier, "type": this.content?.courseCategory },
|
|
651
|
+
state: WsEvents.EnumTelemetrySubType.Loaded,
|
|
652
|
+
eventSubType: WsEvents.EnumTelemetrySubType.Chatbot,
|
|
653
|
+
mode: 'view',
|
|
654
|
+
},
|
|
655
|
+
pageContext: { pageId: `/viewer/video/${this.viewerDataSvc?.resourceId}`, module: 'Learn' },
|
|
656
|
+
from: '',
|
|
657
|
+
to: 'Telemetry',
|
|
658
|
+
};
|
|
659
|
+
this.eventSvc.dispatchChatbotEvent(event);
|
|
660
|
+
}
|
|
661
|
+
raiseTranscriptionTabInteractTelemetry() {
|
|
662
|
+
const event = {
|
|
663
|
+
eventType: WsEvents.WsEventType.Telemetry,
|
|
664
|
+
eventLogLevel: WsEvents.WsEventLogLevel.Info,
|
|
665
|
+
data: {
|
|
666
|
+
edata: { type: 'click', "id": "ai-tutor-viewer-page", "pageid": `/viewer/video/${this.viewerDataSvc?.resourceId}`, subType: 'transcript-tab' },
|
|
667
|
+
object: { "id": this.content?.identifier, "type": this.content?.courseCategory },
|
|
668
|
+
state: WsEvents.EnumTelemetrySubType.Interact,
|
|
669
|
+
eventSubType: WsEvents.EnumTelemetrySubType.Chatbot,
|
|
670
|
+
mode: 'view',
|
|
671
|
+
},
|
|
672
|
+
pageContext: { pageId: `/viewer/video/${this.viewerDataSvc?.resourceId}`, module: 'Learn' },
|
|
673
|
+
from: '',
|
|
674
|
+
to: 'Telemetry',
|
|
675
|
+
};
|
|
676
|
+
this.eventSvc.dispatchChatbotEvent(event);
|
|
677
|
+
}
|
|
678
|
+
raiseTranscriptionTabStopTelemetry() {
|
|
679
|
+
const event = {
|
|
680
|
+
eventType: WsEvents.WsEventType.Telemetry,
|
|
681
|
+
eventLogLevel: WsEvents.WsEventLogLevel.Info,
|
|
682
|
+
data: {
|
|
683
|
+
edata: { type: 'click', "id": "ai-tutor-viewer-page", "pageid": `/viewer/video/${this.viewerDataSvc?.resourceId}`, subType: 'transcript-tab' },
|
|
684
|
+
object: { "id": this.content?.identifier, "type": this.content?.courseCategory },
|
|
685
|
+
state: WsEvents.EnumTelemetrySubType.Unloaded,
|
|
686
|
+
eventSubType: WsEvents.EnumTelemetrySubType.Chatbot,
|
|
687
|
+
mode: 'view',
|
|
688
|
+
},
|
|
689
|
+
pageContext: { pageId: `/viewer/video/${this.viewerDataSvc?.resourceId}`, module: 'Learn' },
|
|
690
|
+
from: '',
|
|
691
|
+
to: 'Telemetry',
|
|
692
|
+
};
|
|
693
|
+
this.eventSvc.dispatchChatbotEvent(event);
|
|
694
|
+
}
|
|
695
|
+
raiseTranscriptionLanguageStartTelemetry() {
|
|
696
|
+
const event = {
|
|
697
|
+
eventType: WsEvents.WsEventType.Telemetry,
|
|
698
|
+
eventLogLevel: WsEvents.WsEventLogLevel.Info,
|
|
699
|
+
data: {
|
|
700
|
+
edata: { type: 'click', "id": this.transcriptActiveLanguageText, "pageid": `/viewer/video/${this.viewerDataSvc?.resourceId}`, subType: 'transcript-language' },
|
|
701
|
+
object: { "id": this.content?.identifier, "type": this.content?.courseCategory },
|
|
702
|
+
state: WsEvents.EnumTelemetrySubType.Loaded,
|
|
703
|
+
eventSubType: WsEvents.EnumTelemetrySubType.Chatbot,
|
|
704
|
+
mode: 'view',
|
|
705
|
+
},
|
|
706
|
+
pageContext: { pageId: `/viewer/video/${this.viewerDataSvc?.resourceId}`, module: 'Learn' },
|
|
707
|
+
from: '',
|
|
708
|
+
to: 'Telemetry',
|
|
709
|
+
};
|
|
710
|
+
this.eventSvc.dispatchChatbotEvent(event);
|
|
711
|
+
}
|
|
712
|
+
raiseTranscriptionLanguageInteractTelemetry() {
|
|
713
|
+
const event = {
|
|
714
|
+
eventType: WsEvents.WsEventType.Telemetry,
|
|
715
|
+
eventLogLevel: WsEvents.WsEventLogLevel.Info,
|
|
716
|
+
data: {
|
|
717
|
+
edata: { type: 'click', "id": this.transcriptActiveLanguageText, "pageid": `/viewer/video/${this.viewerDataSvc?.resourceId}`, subType: 'transcript-language' },
|
|
718
|
+
object: { "id": this.content?.identifier, "type": this.content?.courseCategory },
|
|
719
|
+
state: WsEvents.EnumTelemetrySubType.Interact,
|
|
720
|
+
eventSubType: WsEvents.EnumTelemetrySubType.Chatbot,
|
|
721
|
+
mode: 'view',
|
|
722
|
+
},
|
|
723
|
+
pageContext: { pageId: `/viewer/video/${this.viewerDataSvc?.resourceId}`, module: 'Learn' },
|
|
724
|
+
from: '',
|
|
725
|
+
to: 'Telemetry',
|
|
726
|
+
};
|
|
727
|
+
this.eventSvc.dispatchChatbotEvent(event);
|
|
728
|
+
}
|
|
729
|
+
raiseTranscriptionLanguageStopTelemetry() {
|
|
730
|
+
const event = {
|
|
731
|
+
eventType: WsEvents.WsEventType.Telemetry,
|
|
732
|
+
eventLogLevel: WsEvents.WsEventLogLevel.Info,
|
|
733
|
+
data: {
|
|
734
|
+
edata: { type: 'click', "id": this.transcriptActiveLanguageText, "pageid": `/viewer/video/${this.viewerDataSvc?.resourceId}`, subType: 'transcript-language' },
|
|
735
|
+
object: { "id": this.content?.identifier, "type": this.content?.courseCategory },
|
|
736
|
+
state: WsEvents.EnumTelemetrySubType.Unloaded,
|
|
737
|
+
eventSubType: WsEvents.EnumTelemetrySubType.Chatbot,
|
|
738
|
+
mode: 'view',
|
|
739
|
+
},
|
|
740
|
+
pageContext: { pageId: `/viewer/video/${this.viewerDataSvc?.resourceId}`, module: 'Learn' },
|
|
741
|
+
from: '',
|
|
742
|
+
to: 'Telemetry',
|
|
743
|
+
};
|
|
744
|
+
this.eventSvc.dispatchChatbotEvent(event);
|
|
745
|
+
}
|
|
746
|
+
closeAIPopup(event) {
|
|
747
|
+
if (event) {
|
|
748
|
+
this.showAITutorPopup = false;
|
|
749
|
+
this.selectedTabIndex = 0;
|
|
750
|
+
}
|
|
751
|
+
}
|
|
752
|
+
ngOnDestroy() {
|
|
753
|
+
if (this.resourceIdentifier$) {
|
|
754
|
+
this.resourceIdentifier$.unsubscribe();
|
|
755
|
+
}
|
|
756
|
+
if (this.subTitles$) {
|
|
757
|
+
this.subTitles$.unsubscribe();
|
|
758
|
+
}
|
|
759
|
+
if (this.transriptionLanguageSub) {
|
|
760
|
+
this.transriptionLanguageSub.unsubscribe();
|
|
761
|
+
}
|
|
762
|
+
}
|
|
763
|
+
clearCommentIdFromUrl() {
|
|
764
|
+
const currentQueryParams = { ...this.route.snapshot.queryParams };
|
|
765
|
+
delete currentQueryParams.commentId;
|
|
766
|
+
this.commentId = '';
|
|
767
|
+
this.discussWidgetData.newCommentSection.show = true;
|
|
768
|
+
}
|
|
769
|
+
resumeContentCall() {
|
|
770
|
+
this.resumeContent.emit();
|
|
771
|
+
}
|
|
772
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContentTocComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.UtilityService }, { token: i3.LoadCheckService }, { token: i2.ConfigurationsService }, { token: i4.MatLegacyDialog }, { token: i5.AppTocService }, { token: i6.ActionService }, { token: i1.Router }, { token: i2.EventService }, { token: i7.ViewerDataService }, { token: i8.SamuhikCharchaService }, { token: 'environment' }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
773
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ContentTocComponent, selector: "ws-widget-content-toc", inputs: { content: "content", contentReadData: "contentReadData", initialRouteData: "initialRouteData", changeTab: "changeTab", baseContentReadData: "baseContentReadData", forPreview: "forPreview", contentTabFlag: "contentTabFlag", resumeData: "resumeData", batchData: "batchData", skeletonLoader: "skeletonLoader", tocStructure: "tocStructure", pathSet: "pathSet", fromViewer: "fromViewer", hierarchyMapData: "hierarchyMapData", condition: "condition", kparray: "kparray", selectedBatchData: "selectedBatchData", config: "config", componentName: "componentName", isEnrolled: "isEnrolled", playResourceId: "playResourceId", sideNavBarOpened: "sideNavBarOpened", languageList: "languageList", lockCertificate: "lockCertificate" }, outputs: { playResumeForAI: "playResumeForAI", enrollUserToAI: "enrollUserToAI", trigerCompletionSurveyForm: "trigerCompletionSurveyForm", resumeContent: "resumeContent" }, host: { listeners: { "window:scroll": "handleScroll($event)" } }, viewQueries: [{ propertyName: "tabElement", first: true, predicate: ["stickyMenu"], descendants: true }, { propertyName: "tabs", predicate: MatTab, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<!-- && (content?.courseCategory !== courseCategory?.BLENDED_PROGRAM) -->\r\n<div class=\"ai-tutor-get-started\" *ngIf=\"!viewerPage && enableAITutorFlag && !isMobile\">\r\n <div class=\"flex flex-row align-items-center\">\r\n <div class=\"px-2 py-2\">\r\n <img src=\"assets/icons/bot-chat-small.svg\" height=\"64px\" width=\"64px\" />\r\n </div>\r\n <div class=\"flex flex-row align-items-center\">\r\n <div class=\"py-2\" [ngClass]=\"isMobile ? '' : 'w-565'\">\r\n <p class=\"font-weight-600\">Get Started with AI Tutor</p>\r\n <span>Get instant explanations, step-by-step learning guidance, and customised learning tailored just\r\n for you.</span>\r\n </div>\r\n <div class=\"ai-tutor-btn px-2 py-1\">\r\n <a href=\"javascript:void(0)\" (click)=\"showAiTutorConfirmPopup()\"><img\r\n src=\"assets/ai-tutor/ai-icon.svg\"> <span class=\"ai-tutor-label\">AI Tutor</span></a>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"tab-group-container\">\r\n <mat-tab-group (selectedTabChange)=\"handleTabChange($event)\" #stickyMenu [class.sticky-mat-tabs]=\"sticky\"\r\n [selectedIndex]=\"selectedTabIndex\" [ngClass]=\"{'content-tabs':!fromViewer,'contentSticky': forPreview}\">\r\n\r\n <!-- Transcription Tab -->\r\n <mat-tab label=\"Transcription\"\r\n *ngIf=\"viewerPage && enableTranscriptionFlag && vttLangArr?.length && subTitles?.length\">\r\n <ng-template mat-tab-label>\r\n <div class=\"flex flex-row\">\r\n <div class=\"flex\">\r\n <span>Transcript</span>\r\n </div>\r\n <div class=\"red-circle ml-5\">\r\n New\r\n </div>\r\n </div>\r\n\r\n </ng-template>\r\n <ng-template matTabContent>\r\n <div class=\"disclaimer my-2\">\r\n <p class=\"py-2 px-2\">Disclaimer : These transcripts and subtitles are AI-generated and may contain\r\n errors.</p>\r\n </div>\r\n <div class=\"w-full ml-5 mr-5\" *ngIf=\"isMobileForAI\">\r\n <div class=\"transcript-flex-container mt-2\">\r\n <mat-form-field class=\"multiline-select\" appearance=\"fill\" style=\"height: auto; width: 100%;\"\r\n floatLabel=\"never\">\r\n <mat-select class=\"multiline-select-box pr-5\" [(value)]=\"selectedTranscriptionStyle\"\r\n (selectionChange)=\"renderSelectedLanguageTranscription($event)\">\r\n <mat-select-trigger class=\"multiline-select-box-trigger\">\r\n <div class=\"selected-option-content px-5 py-2\">\r\n <div class=\"title\"><span\r\n *ngIf=\"transcriptionActiveLanguage === selectedTranscriptionStyle?.label\">\r\n <b>Transcript Language: </b></span>\r\n {{selectedTranscriptionStyle?.language | titlecase}} <span\r\n *ngIf=\"defaultTranscriptLanguage === selectedTranscriptionStyle?.label\">(Auto)</span>\r\n </div>\r\n </div>\r\n </mat-select-trigger>\r\n <mat-option class=\"multiline-select-option\" value=\"\" *ngFor=\"let lang of vttLangArr\"\r\n [value]=\"lang\"\r\n [ngClass]=\"{'active-option': selectedTranscriptionStyle?.label === lang?.label}\">\r\n <div class=\"option-content\">\r\n <div class=\"title\">{{lang?.language | titlecase}}</div>\r\n </div>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div class=\"ml-4 flex flex-row justify-end transcript-control\">\r\n <!-- <mat-form-field appearance=\"none\">\r\n <select matNativeControl required class=\"section-dd\" (change)=\"renderSelectedLanguageTranscription($event)\">\r\n <option [value]=\"lang?.language\" *ngFor=\"let lang of vttLangArr\" [selected]=\"lang?.label === transcriptionActiveLanguage\">\r\n <span *ngIf=\"transcriptionActiveLanguage === lang?.label\"> Transcript Language: </span> {{lang?.language | titlecase}} <span *ngIf=\"transcriptionActiveLanguage === lang?.language\">(Auto)</span>\r\n </option>\r\n </select>\r\n </mat-form-field> -->\r\n <div class=\"flex flex-row w-full\">\r\n <div [ngClass]=\"!isMobileForAI ? 'w-subtitle-80':'w-full'\">\r\n <div [ngClass]=\"!isMobileForAI ? 'ml-5-per' : ''\" *ngIf=\"subTitles && subTitles?.length\">\r\n <!-- Transcription content -->\r\n <ng-container *ngFor=\"let subtitle of subTitles\">\r\n <div class=\"flex flex-col my-2\">\r\n <div class=\"flex flex-row\">\r\n <div class=\"subtitle-time\">\r\n <p class=\"cursor-pointer\" (click)=\"playFromSlot(subtitle)\">\r\n <span class=\"pr-1 blue-underline\"> {{\r\n formatMsToVttTime(subtitle?.startTime) }} </span>\r\n <span class=\"black-text\">-</span>\r\n <span class=\"pl-1 blue-underline\">{{\r\n formatMsToVttTime(subtitle?.endTime) }}</span>\r\n </p>\r\n </div>\r\n <div class=\"ml-4 subtitle-text-slot mr-4\">\r\n <p class=\"black-text\" [innerHtml]=\"subtitle?.text\r\n | highlight : keywordToHighlight?.text\r\n : ((subtitle?.startTime / 1000) >= keywordToHighlight?.start\r\n && (subtitle?.endTime / 1000) <= keywordToHighlight?.end)\">\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"w-subtitle-20\" *ngIf=\"!isMobileForAI\">\r\n <div class=\"transcript-flex-container mt-2\">\r\n <mat-form-field class=\"multiline-select\" appearance=\"fill\"\r\n style=\"height: auto; width: 100%;\" floatLabel=\"never\">\r\n <mat-select class=\"multiline-select-box pr-5\" [(value)]=\"selectedTranscriptionStyle\"\r\n (selectionChange)=\"renderSelectedLanguageTranscription($event)\">\r\n <mat-select-trigger class=\"multiline-select-box-trigger\">\r\n <div class=\"selected-option-content px-5 py-2\">\r\n <div class=\"title\"><span\r\n *ngIf=\"transcriptionActiveLanguage === selectedTranscriptionStyle?.label\">\r\n <b>Transcript Language: </b></span>\r\n {{selectedTranscriptionStyle?.language | titlecase}} <span\r\n *ngIf=\"defaultTranscriptLanguage === selectedTranscriptionStyle?.label\">(Auto)</span>\r\n </div>\r\n </div>\r\n </mat-select-trigger>\r\n <mat-option class=\"multiline-select-option\" value=\"\"\r\n *ngFor=\"let lang of vttLangArr\" [value]=\"lang\"\r\n [ngClass]=\"{'active-option': selectedTranscriptionStyle?.label === lang?.label}\">\r\n <div class=\"option-content\">\r\n <div class=\"title\">{{lang?.language | titlecase}}</div>\r\n </div>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <!-- <div class=\"flex flex-row align-items-center my-2\">\r\n <div>\r\n <p>0.00</p>\r\n </div>\r\n <div class=\"ml-4\">\r\n <p>AI for Digital Transformation: Machine Learning and Deep Learning Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>\r\n </div>\r\n <div class=\"ml-4\">\r\n <mat-form-field appearance=\"none\">\r\n <select matNativeControl required class=\"section-dd\">\r\n <option value=\"\">Transcription Language: English (Auto)</option>\r\n </select>\r\n </mat-form-field>\r\n </div>\r\n </div> -->\r\n\r\n </ng-template>\r\n </mat-tab>\r\n\r\n <!-- About Tab -->\r\n <mat-tab label=\"{{ 'apptocsinglepage.about' | translate }}\">\r\n <ng-template matTabContent>\r\n <div class=\"ai-tutor-get-started-mobile my-2 ml-2\" *ngIf=\"!viewerPage && enableAITutorFlag && isMobile\">\r\n <div class=\"flex flex-row align-items-center w-98\">\r\n <div class=\"px-2 py-2\">\r\n <img src=\"assets/icons/bot-chat-small.svg\" height=\"48px\" width=\"48px\" />\r\n </div>\r\n <div class=\"flex flex-row align-items-center w-60\">\r\n <div class=\"py-2\">\r\n <p class=\"font-weight-600\">Get Started with AI Tutor</p>\r\n <span>Get instant explanations, step-by-step learning guidance, and customised learning\r\n tailored just for you.</span>\r\n </div>\r\n\r\n </div>\r\n <div class=\"ai-tutor-btn px-2 py-1\">\r\n <a href=\"javascript:void(0)\" (click)=\"showAiTutorConfirmPopup()\"><img\r\n src=\"assets/ai-tutor/ai-icon.svg\"> <span class=\"ai-tutor-label\">AI\r\n Tutor</span></a>\r\n </div>\r\n\r\n </div>\r\n <!-- <div class=\"flex justify-end my-2 mx-2\">\r\n <div class=\"ai-tutor-btn px-2 py-1\">\r\n <a href=\"javascript:void(0)\" (click)=\"showAiTutorConfirmPopup()\"><img src=\"assets/ai-tutor/ai-icon.svg\"> <span class=\"ai-tutor-label\">AI Tutor</span></a>\r\n </div>\r\n </div> -->\r\n </div>\r\n <ws-widget-app-toc-about [fromViewer]=\"fromViewer\" [pathSet]=\"pathSet\" [content]=\"content\"\r\n [contentReadData]=\"contentReadData\" [baseContentReadData]=\"baseContentReadData\"\r\n [tocStructure]=\"tocStructure\" [config]=\"config\" [forPreview]=\"false\" [sticky]=\"sticky\"\r\n [selectedBatchData]=\"selectedBatchData\" [selectedTabValue]=\"selectedTabIndex\"\r\n [resumeData]=\"resumeData\" [batchData]=\"batchData\" [skeletonLoader]=\"skeletonLoader\"\r\n [condition]=\"condition\" [kparray]=\"kparray\" [showReviews]=\"'true'\" [languageList]=\"languageList\"\r\n [lockCertificate]=\"lockCertificate\" (trigerCompletionSurveyForm)=\"openSurveyFormPopup($event)\">\r\n </ws-widget-app-toc-about>\r\n </ng-template>\r\n </mat-tab>\r\n\r\n <!-- Content Tab -->\r\n <ng-container *ngIf=\"content?.children?.length\">\r\n <mat-tab label=\"{{ 'apptocsinglepage.content' | translate }}\" *ngIf=\"contentTabFlag\">\r\n <ng-template matTabContent>\r\n <ws-widget-app-toc-content [batchId]=\"batchId\" [componentName]=\"componentName\" [pathSet]=\"pathSet\"\r\n [content]=\"content\" [tocStructure]=\"tocStructure\" [config]=\"config\" [forPreview]=\"forPreview\"\r\n [resumeData]=\"resumeData\" [batchData]=\"batchData\" [skeletonLoader]=\"skeletonLoader\"\r\n [hierarchyMapData]=\"hierarchyMapData\" [baseContentReadData]=\"baseContentReadData\">\r\n </ws-widget-app-toc-content>\r\n </ng-template>\r\n </mat-tab>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"config?.commentsTab && !forPreview\">\r\n <mat-tab label=\"{{ 'apptocsinglepage.startDiscussion' | translate }}\">\r\n <ng-template matTabContent>\r\n <div class=\"flex flex-col ratings-div mt-5\" id=\"commentsDiv\"\r\n *ngIf=\"discussWidgetData && discussWidgetData?.newCommentSection?.commentTreeData?.entityId\">\r\n <ng-container *ngIf=\"!commentId\">\r\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\"></d-v2-widget-comment>\r\n </ng-container>\r\n <ng-container *ngIf=\"commentId\">\r\n <div class=\"flex flex-row gap-3 cursor-pointer mb-5\" (click)=\"clearCommentIdFromUrl()\">\r\n <mat-icon class=\"cursor-pointer\">arrow_back</mat-icon>\r\n Back to all comments\r\n </div>\r\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\" [commentId]=\"commentId\"\r\n [skeletonLoader]></d-v2-widget-comment>\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n </mat-tab>\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"config?.samuhikCharchaTab && condition && contentReadData?.eventLinked?.length > 0 && enableSamuhikCharchaTab\">\r\n <mat-tab label=\"{{ 'apptocsinglepage.samuhikCharcha' | translate }}\">\r\n <ng-template matTabContent>\r\n <div class=\"flex flex-col ratings-div mt-5\" id=\"samuhikCharchaDiv\">\r\n <ws-widget-samuhik-charcha-content [content]=\"contentReadData\" [conditionData]=\"condition\"\r\n (resumeContent)=\"resumeContentCall()\">\r\n </ws-widget-samuhik-charcha-content>\r\n </div>\r\n </ng-template>\r\n </mat-tab>\r\n </ng-container>\r\n\r\n <!-- Teachers Note Tab -->\r\n <ng-container *ngIf=\"contentReadData?.referenceNodes && teacherNotesFlag\">\r\n <mat-tab label=\"Teachers Note\">\r\n <ng-template matTabContent>\r\n <div class=\"flex flex-col ratings-div mt-5\" id=\"teachersNoteDiv\">\r\n <ws-widget-app-toc-teachers-notes [content]=\"contentReadData\"\r\n [notesDisplayType]=\"'Teachers Resource'\"></ws-widget-app-toc-teachers-notes>\r\n </div>\r\n </ng-template>\r\n </mat-tab>\r\n </ng-container>\r\n\r\n <!-- Reference Note Tab -->\r\n <ng-container *ngIf=\"contentReadData?.referenceNodes && referenceNotesFlag\">\r\n <mat-tab label=\"Reference Note\">\r\n <ng-template matTabContent>\r\n <div class=\"flex flex-col ratings-div mt-5\" id=\"teachersNoteDiv\">\r\n <ws-widget-app-toc-teachers-notes [content]=\"contentReadData\"\r\n [notesDisplayType]=\"'Reference Resource'\"></ws-widget-app-toc-teachers-notes>\r\n\r\n <!-- <ws-widget-app-toc-reference-notes [content]=\"contentReadData\"></ws-widget-app-toc-reference-notes> -->\r\n </div>\r\n </ng-template>\r\n </mat-tab>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"showAssignmentsTab && !forPreview\">\r\n <mat-tab label=\"{{ 'apptocsinglepage.assignments' | translate }}\">\r\n <ng-template matTabContent>\r\n <div class=\"flex flex-col ratings-div mt-5\" id=\"takeAssessmentDiv\">\r\n <ws-widget-app-batch-assignments [content]=\"content\"></ws-widget-app-batch-assignments>\r\n </div>\r\n </ng-template>\r\n </mat-tab>\r\n </ng-container>\r\n\r\n <!-- Transcription Tab -->\r\n <mat-tab label=\"AI Tutor\" *ngIf=\"viewerPage && enableAITutorFlag && isMobile\">\r\n <ng-template mat-tab-label>\r\n <div class=\"flex flex-row\">\r\n <div class=\"flex\">\r\n <span>AI Tutor</span>\r\n </div>\r\n <div class=\"red-circle ml-5\">\r\n New\r\n </div>\r\n </div>\r\n\r\n </ng-template>\r\n <ng-template matTabContent>\r\n <ng-container *ngIf=\"showAITutorPopup\">\r\n <div>\r\n <viewer-ai-tutor [content]=\"content?.identifier\"\r\n (closeAIPopup)=\"closeAIPopup($event)\"></viewer-ai-tutor>\r\n </div>\r\n </ng-container>\r\n </ng-template>\r\n </mat-tab>\r\n </mat-tab-group>\r\n</div>", styles: ["::ng-deep .content-tabs .mat-tab-body-content{overflow:hidden!important;background-color:#eff3f9}::ng-deep .content-tabs .mat-tab-body.mat-tab-body-active{overflow-y:hidden}:host ::ng-deep .sticky-mat-tabs .mat-tab-header{top:96px;z-index:1000;position:sticky;position:-webkit-sticky;background:#eff3f9}#commentsDiv,#samuhikCharchaDiv{margin:1rem auto;min-height:800px}@media screen and (max-width: 768px){.sticky-mat-tabs .mat-tab-header{top:120px;position:fixed;width:100%}.content-tabs{border-radius:16px 16px 0 0;box-shadow:0 -2px 9px #00000014;background-color:#fff}}::ng-deep .contentSticky .mat-tab-header{top:0!important}.ai-tutor-btn{border:2px solid transparent;border-radius:20px;background:linear-gradient(to right,#fff,#fff),linear-gradient(to right,#efa34f,#4881e4);background-clip:padding-box,border-box;background-origin:padding-box,border-box;width:114px}.ai-tutor-get-started{border:2px solid transparent;border-radius:20px;background:linear-gradient(to right,#fff,#fff),linear-gradient(to right,#efa34f,#4881e4);background-clip:padding-box,border-box;background-origin:padding-box,border-box;width:100%;min-height:80px}.ai-tutor-get-started-mobile{border:2px solid transparent;border-radius:20px;background:linear-gradient(to right,#fff,#fff),linear-gradient(to right,#efa34f,#4881e4);background-clip:padding-box,border-box;background-origin:padding-box,border-box;width:96%;min-height:80px}.align-items-center{align-items:center}.w-565{width:565px}.w-98{width:98%}.font-weight-600{font-weight:600;line-height:1}.ai-tutor-label{color:#1b4ca1;font-weight:700}.section-dd{border-radius:32px;border:1px solid #1b4ca1;padding:12px 16px;color:#1b4ca1;width:auto;height:45px;font-size:14px;font-weight:700}::ng-deep .section-dd-container .mat-form-field-wrapper{padding-bottom:.5em!important}::ng-deep .section-dd-container .mat-form-field-infix{width:auto!important}::ng-deep .section-dd-container .mat-form-field-type-mat-native-select .mat-form-field-infix:after{color:#1b4ca1!important}::ng-deep .section-dd-container .mat-form-field-type-mat-native-select .mat-form-field-infix:after{top:35%!important;right:15%!important}::ng-deep .section-dd-container .mat-form-field-type-mat-native-select .mat-input-element{padding-right:65px}::ng-deep .section-dd .mat-form-field-underline{display:none!important}.w-20{width:20%}::ng-deep .highlight{background-color:#ff0!important;font-weight:700!important}.red-circle{background:red;opacity:1;color:#fff;padding:2px 10px;height:14px;width:20px;border-radius:2px;vertical-align:middle;display:flex;justify-content:center;align-items:center;margin-left:8px;margin-top:-10px}.w-60{width:60%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px}.blue-underline{color:#1b4ca1;text-decoration:underline;font-weight:700}.transcript-control{color:#fff;display:flex;align-items:flex-start;justify-content:flex-start}:host ::ng-deep .multiline-select .mat-mdc-select-value-text{white-space:pre-wrap!important}:host ::ng-deep .mat-pseudo-checkbox{display:none!important}:host ::ng-deep .mat-pseudo-checkbox-checked{display:none!important}::ng-deep .multiline-select.mat-form-field{border-bottom:1px solid #1b4ca1!important}::ng-deep .multiline-select-option .mat-mdc-option:focus.mdc-list-item,.mat-mdc-option.mat-mdc-option-active.mdc-list-item{background-color:#e3eeff!important;color:#1b4ca1!important;font-weight:700!important}.transcript-flex-container{display:flex;justify-content:flex-end;width:100%}.selected-option-content{color:#1b4ca1}.ml-5-per{margin-left:5%}.black-text{color:#000;word-wrap:break-word}.subtitle-time{width:20%;word-wrap:break-word}.subtitle-text-slot{width:74%}.w-subtitle-80{width:70%}.w-subtitle-20{width:30%}::ng-deep .mat-mdc-select-panel{background:#fff!important}@media (min-width: 1280px) and (max-width: 1280px){.subtitle-time{width:30%}.subtitle-text-slot{width:70%}}@media (min-width: 1056px) and (max-width: 1232px){.subtitle-time{width:30%}.subtitle-text-slot{width:70%}}@media (min-width: 1024px) and (max-width: 1024px){.subtitle-time{width:30%}.subtitle-text-slot{width:70%}}@media (min-width: 768px) and (max-width: 1023px){.subtitle-time{width:25%}.subtitle-text-slot{width:75%}}@media (min-width: 360px) and (max-width: 360px){.subtitle-time,.subtitle-text-slot{width:50%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px;margin:10px}}@media (min-width: 361px) and (max-width: 540px){.subtitle-time,.subtitle-text-slot{width:50%}.w-subtitle-20{width:40%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px;margin:10px}}@media (min-width: 541px) and (max-width: 767px){.subtitle-time{width:40%}.subtitle-text-slot{width:60%}.w-subtitle-20{width:40%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px;margin:10px}}@media (min-width: 768px){::ng-deep .tab-group-container .mdc-tab{min-width:auto;max-width:max-content;text-align:left;justify-content:start;padding-left:24px;padding-right:24px}.w-60{width:60%}}:host ::ng-deep .tab-group-container ::ng-deep .mat-mdc-tab-header-pagination{z-index:1!important}:host ::ng-deep .transcript-flex-container .mat-mdc-text-field-wrapper{width:100%;padding:10px}:host ::ng-deep .multiline-select.mat-mdc-form-field .mdc-line-ripple{display:none!important}:host ::ng-deep .multiline-select.mat-mdc-form-field:hover .mdc-line-ripple{display:block!important;height:4px!important;color:#1b4ca1!important}:host ::ng-deep .multiline-select.mat-mdc-form-field:hover .mat-mdc-form-field-flex{background-color:#e3eeff!important}:host ::ng-deep .multiline-select .mat-mdc-select-arrow-wrapper{margin-right:10px}\n"], dependencies: [{ kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i11.MatTabContent, selector: "[matTabContent]" }, { kind: "directive", type: i11.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { kind: "component", type: i11.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i11.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }, { kind: "component", type: i12.WidgetCommentComponent, selector: "d-v2-widget-comment", inputs: ["widgetData", "commentId"], outputs: ["commentDataChange"] }, { kind: "component", type: i13.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i14.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "panelWidth", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "directive", type: i14.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i15.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i16.AppTocAboutComponent, selector: "ws-widget-app-toc-about", inputs: ["condition", "kparray", "content", "contentReadData", "baseContentReadData", "skeletonLoader", "sticky", "tocStructure", "pathSet", "config", "resumeData", "forPreview", "showReviews", "batchData", "fromViewer", "selectedBatchData", "selectedTabValue", "fromMarketPlace", "showMarketPlaceCertificate", "languageList", "lockCertificate"], outputs: ["trigerCompletionSurveyForm"] }, { kind: "component", type: i17.AppTocContentComponent, selector: "ws-widget-app-toc-content", inputs: ["batchId", "content", "forPreview", "resumeData", "batchData", "skeletonLoader", "tocStructure", "config", "hierarchyMapData", "pathSet", "componentName", "isPreAssessment", "baseContentReadData", "contentReadData"] }, { kind: "component", type: i18.AppTocTeachersNotesComponent, selector: "ws-widget-app-toc-teachers-notes", inputs: ["content", "notesDisplayType"] }, { kind: "component", type: i19.AppTocBatchAssignmentsComponent, selector: "ws-widget-app-batch-assignments", inputs: ["content"] }, { kind: "component", type: i20.SamuhikCharchaContentComponent, selector: "ws-widget-samuhik-charcha-content", inputs: ["content", "conditionData", "locked"], outputs: ["resumeContent"] }, { kind: "pipe", type: i9.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i21.TranslatePipe, name: "translate" }, { kind: "pipe", type: i22.HighlightPipe, name: "highlight" }] }); }
|
|
774
|
+
}
|
|
775
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContentTocComponent, decorators: [{
|
|
776
|
+
type: Component,
|
|
777
|
+
args: [{ selector: 'ws-widget-content-toc', template: "<!-- && (content?.courseCategory !== courseCategory?.BLENDED_PROGRAM) -->\r\n<div class=\"ai-tutor-get-started\" *ngIf=\"!viewerPage && enableAITutorFlag && !isMobile\">\r\n <div class=\"flex flex-row align-items-center\">\r\n <div class=\"px-2 py-2\">\r\n <img src=\"assets/icons/bot-chat-small.svg\" height=\"64px\" width=\"64px\" />\r\n </div>\r\n <div class=\"flex flex-row align-items-center\">\r\n <div class=\"py-2\" [ngClass]=\"isMobile ? '' : 'w-565'\">\r\n <p class=\"font-weight-600\">Get Started with AI Tutor</p>\r\n <span>Get instant explanations, step-by-step learning guidance, and customised learning tailored just\r\n for you.</span>\r\n </div>\r\n <div class=\"ai-tutor-btn px-2 py-1\">\r\n <a href=\"javascript:void(0)\" (click)=\"showAiTutorConfirmPopup()\"><img\r\n src=\"assets/ai-tutor/ai-icon.svg\"> <span class=\"ai-tutor-label\">AI Tutor</span></a>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<div class=\"tab-group-container\">\r\n <mat-tab-group (selectedTabChange)=\"handleTabChange($event)\" #stickyMenu [class.sticky-mat-tabs]=\"sticky\"\r\n [selectedIndex]=\"selectedTabIndex\" [ngClass]=\"{'content-tabs':!fromViewer,'contentSticky': forPreview}\">\r\n\r\n <!-- Transcription Tab -->\r\n <mat-tab label=\"Transcription\"\r\n *ngIf=\"viewerPage && enableTranscriptionFlag && vttLangArr?.length && subTitles?.length\">\r\n <ng-template mat-tab-label>\r\n <div class=\"flex flex-row\">\r\n <div class=\"flex\">\r\n <span>Transcript</span>\r\n </div>\r\n <div class=\"red-circle ml-5\">\r\n New\r\n </div>\r\n </div>\r\n\r\n </ng-template>\r\n <ng-template matTabContent>\r\n <div class=\"disclaimer my-2\">\r\n <p class=\"py-2 px-2\">Disclaimer : These transcripts and subtitles are AI-generated and may contain\r\n errors.</p>\r\n </div>\r\n <div class=\"w-full ml-5 mr-5\" *ngIf=\"isMobileForAI\">\r\n <div class=\"transcript-flex-container mt-2\">\r\n <mat-form-field class=\"multiline-select\" appearance=\"fill\" style=\"height: auto; width: 100%;\"\r\n floatLabel=\"never\">\r\n <mat-select class=\"multiline-select-box pr-5\" [(value)]=\"selectedTranscriptionStyle\"\r\n (selectionChange)=\"renderSelectedLanguageTranscription($event)\">\r\n <mat-select-trigger class=\"multiline-select-box-trigger\">\r\n <div class=\"selected-option-content px-5 py-2\">\r\n <div class=\"title\"><span\r\n *ngIf=\"transcriptionActiveLanguage === selectedTranscriptionStyle?.label\">\r\n <b>Transcript Language: </b></span>\r\n {{selectedTranscriptionStyle?.language | titlecase}} <span\r\n *ngIf=\"defaultTranscriptLanguage === selectedTranscriptionStyle?.label\">(Auto)</span>\r\n </div>\r\n </div>\r\n </mat-select-trigger>\r\n <mat-option class=\"multiline-select-option\" value=\"\" *ngFor=\"let lang of vttLangArr\"\r\n [value]=\"lang\"\r\n [ngClass]=\"{'active-option': selectedTranscriptionStyle?.label === lang?.label}\">\r\n <div class=\"option-content\">\r\n <div class=\"title\">{{lang?.language | titlecase}}</div>\r\n </div>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div class=\"ml-4 flex flex-row justify-end transcript-control\">\r\n <!-- <mat-form-field appearance=\"none\">\r\n <select matNativeControl required class=\"section-dd\" (change)=\"renderSelectedLanguageTranscription($event)\">\r\n <option [value]=\"lang?.language\" *ngFor=\"let lang of vttLangArr\" [selected]=\"lang?.label === transcriptionActiveLanguage\">\r\n <span *ngIf=\"transcriptionActiveLanguage === lang?.label\"> Transcript Language: </span> {{lang?.language | titlecase}} <span *ngIf=\"transcriptionActiveLanguage === lang?.language\">(Auto)</span>\r\n </option>\r\n </select>\r\n </mat-form-field> -->\r\n <div class=\"flex flex-row w-full\">\r\n <div [ngClass]=\"!isMobileForAI ? 'w-subtitle-80':'w-full'\">\r\n <div [ngClass]=\"!isMobileForAI ? 'ml-5-per' : ''\" *ngIf=\"subTitles && subTitles?.length\">\r\n <!-- Transcription content -->\r\n <ng-container *ngFor=\"let subtitle of subTitles\">\r\n <div class=\"flex flex-col my-2\">\r\n <div class=\"flex flex-row\">\r\n <div class=\"subtitle-time\">\r\n <p class=\"cursor-pointer\" (click)=\"playFromSlot(subtitle)\">\r\n <span class=\"pr-1 blue-underline\"> {{\r\n formatMsToVttTime(subtitle?.startTime) }} </span>\r\n <span class=\"black-text\">-</span>\r\n <span class=\"pl-1 blue-underline\">{{\r\n formatMsToVttTime(subtitle?.endTime) }}</span>\r\n </p>\r\n </div>\r\n <div class=\"ml-4 subtitle-text-slot mr-4\">\r\n <p class=\"black-text\" [innerHtml]=\"subtitle?.text\r\n | highlight : keywordToHighlight?.text\r\n : ((subtitle?.startTime / 1000) >= keywordToHighlight?.start\r\n && (subtitle?.endTime / 1000) <= keywordToHighlight?.end)\">\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"w-subtitle-20\" *ngIf=\"!isMobileForAI\">\r\n <div class=\"transcript-flex-container mt-2\">\r\n <mat-form-field class=\"multiline-select\" appearance=\"fill\"\r\n style=\"height: auto; width: 100%;\" floatLabel=\"never\">\r\n <mat-select class=\"multiline-select-box pr-5\" [(value)]=\"selectedTranscriptionStyle\"\r\n (selectionChange)=\"renderSelectedLanguageTranscription($event)\">\r\n <mat-select-trigger class=\"multiline-select-box-trigger\">\r\n <div class=\"selected-option-content px-5 py-2\">\r\n <div class=\"title\"><span\r\n *ngIf=\"transcriptionActiveLanguage === selectedTranscriptionStyle?.label\">\r\n <b>Transcript Language: </b></span>\r\n {{selectedTranscriptionStyle?.language | titlecase}} <span\r\n *ngIf=\"defaultTranscriptLanguage === selectedTranscriptionStyle?.label\">(Auto)</span>\r\n </div>\r\n </div>\r\n </mat-select-trigger>\r\n <mat-option class=\"multiline-select-option\" value=\"\"\r\n *ngFor=\"let lang of vttLangArr\" [value]=\"lang\"\r\n [ngClass]=\"{'active-option': selectedTranscriptionStyle?.label === lang?.label}\">\r\n <div class=\"option-content\">\r\n <div class=\"title\">{{lang?.language | titlecase}}</div>\r\n </div>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <!-- <div class=\"flex flex-row align-items-center my-2\">\r\n <div>\r\n <p>0.00</p>\r\n </div>\r\n <div class=\"ml-4\">\r\n <p>AI for Digital Transformation: Machine Learning and Deep Learning Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>\r\n </div>\r\n <div class=\"ml-4\">\r\n <mat-form-field appearance=\"none\">\r\n <select matNativeControl required class=\"section-dd\">\r\n <option value=\"\">Transcription Language: English (Auto)</option>\r\n </select>\r\n </mat-form-field>\r\n </div>\r\n </div> -->\r\n\r\n </ng-template>\r\n </mat-tab>\r\n\r\n <!-- About Tab -->\r\n <mat-tab label=\"{{ 'apptocsinglepage.about' | translate }}\">\r\n <ng-template matTabContent>\r\n <div class=\"ai-tutor-get-started-mobile my-2 ml-2\" *ngIf=\"!viewerPage && enableAITutorFlag && isMobile\">\r\n <div class=\"flex flex-row align-items-center w-98\">\r\n <div class=\"px-2 py-2\">\r\n <img src=\"assets/icons/bot-chat-small.svg\" height=\"48px\" width=\"48px\" />\r\n </div>\r\n <div class=\"flex flex-row align-items-center w-60\">\r\n <div class=\"py-2\">\r\n <p class=\"font-weight-600\">Get Started with AI Tutor</p>\r\n <span>Get instant explanations, step-by-step learning guidance, and customised learning\r\n tailored just for you.</span>\r\n </div>\r\n\r\n </div>\r\n <div class=\"ai-tutor-btn px-2 py-1\">\r\n <a href=\"javascript:void(0)\" (click)=\"showAiTutorConfirmPopup()\"><img\r\n src=\"assets/ai-tutor/ai-icon.svg\"> <span class=\"ai-tutor-label\">AI\r\n Tutor</span></a>\r\n </div>\r\n\r\n </div>\r\n <!-- <div class=\"flex justify-end my-2 mx-2\">\r\n <div class=\"ai-tutor-btn px-2 py-1\">\r\n <a href=\"javascript:void(0)\" (click)=\"showAiTutorConfirmPopup()\"><img src=\"assets/ai-tutor/ai-icon.svg\"> <span class=\"ai-tutor-label\">AI Tutor</span></a>\r\n </div>\r\n </div> -->\r\n </div>\r\n <ws-widget-app-toc-about [fromViewer]=\"fromViewer\" [pathSet]=\"pathSet\" [content]=\"content\"\r\n [contentReadData]=\"contentReadData\" [baseContentReadData]=\"baseContentReadData\"\r\n [tocStructure]=\"tocStructure\" [config]=\"config\" [forPreview]=\"false\" [sticky]=\"sticky\"\r\n [selectedBatchData]=\"selectedBatchData\" [selectedTabValue]=\"selectedTabIndex\"\r\n [resumeData]=\"resumeData\" [batchData]=\"batchData\" [skeletonLoader]=\"skeletonLoader\"\r\n [condition]=\"condition\" [kparray]=\"kparray\" [showReviews]=\"'true'\" [languageList]=\"languageList\"\r\n [lockCertificate]=\"lockCertificate\" (trigerCompletionSurveyForm)=\"openSurveyFormPopup($event)\">\r\n </ws-widget-app-toc-about>\r\n </ng-template>\r\n </mat-tab>\r\n\r\n <!-- Content Tab -->\r\n <ng-container *ngIf=\"content?.children?.length\">\r\n <mat-tab label=\"{{ 'apptocsinglepage.content' | translate }}\" *ngIf=\"contentTabFlag\">\r\n <ng-template matTabContent>\r\n <ws-widget-app-toc-content [batchId]=\"batchId\" [componentName]=\"componentName\" [pathSet]=\"pathSet\"\r\n [content]=\"content\" [tocStructure]=\"tocStructure\" [config]=\"config\" [forPreview]=\"forPreview\"\r\n [resumeData]=\"resumeData\" [batchData]=\"batchData\" [skeletonLoader]=\"skeletonLoader\"\r\n [hierarchyMapData]=\"hierarchyMapData\" [baseContentReadData]=\"baseContentReadData\">\r\n </ws-widget-app-toc-content>\r\n </ng-template>\r\n </mat-tab>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"config?.commentsTab && !forPreview\">\r\n <mat-tab label=\"{{ 'apptocsinglepage.startDiscussion' | translate }}\">\r\n <ng-template matTabContent>\r\n <div class=\"flex flex-col ratings-div mt-5\" id=\"commentsDiv\"\r\n *ngIf=\"discussWidgetData && discussWidgetData?.newCommentSection?.commentTreeData?.entityId\">\r\n <ng-container *ngIf=\"!commentId\">\r\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\"></d-v2-widget-comment>\r\n </ng-container>\r\n <ng-container *ngIf=\"commentId\">\r\n <div class=\"flex flex-row gap-3 cursor-pointer mb-5\" (click)=\"clearCommentIdFromUrl()\">\r\n <mat-icon class=\"cursor-pointer\">arrow_back</mat-icon>\r\n Back to all comments\r\n </div>\r\n <d-v2-widget-comment [widgetData]=\"discussWidgetData\" [commentId]=\"commentId\"\r\n [skeletonLoader]></d-v2-widget-comment>\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n </mat-tab>\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"config?.samuhikCharchaTab && condition && contentReadData?.eventLinked?.length > 0 && enableSamuhikCharchaTab\">\r\n <mat-tab label=\"{{ 'apptocsinglepage.samuhikCharcha' | translate }}\">\r\n <ng-template matTabContent>\r\n <div class=\"flex flex-col ratings-div mt-5\" id=\"samuhikCharchaDiv\">\r\n <ws-widget-samuhik-charcha-content [content]=\"contentReadData\" [conditionData]=\"condition\"\r\n (resumeContent)=\"resumeContentCall()\">\r\n </ws-widget-samuhik-charcha-content>\r\n </div>\r\n </ng-template>\r\n </mat-tab>\r\n </ng-container>\r\n\r\n <!-- Teachers Note Tab -->\r\n <ng-container *ngIf=\"contentReadData?.referenceNodes && teacherNotesFlag\">\r\n <mat-tab label=\"Teachers Note\">\r\n <ng-template matTabContent>\r\n <div class=\"flex flex-col ratings-div mt-5\" id=\"teachersNoteDiv\">\r\n <ws-widget-app-toc-teachers-notes [content]=\"contentReadData\"\r\n [notesDisplayType]=\"'Teachers Resource'\"></ws-widget-app-toc-teachers-notes>\r\n </div>\r\n </ng-template>\r\n </mat-tab>\r\n </ng-container>\r\n\r\n <!-- Reference Note Tab -->\r\n <ng-container *ngIf=\"contentReadData?.referenceNodes && referenceNotesFlag\">\r\n <mat-tab label=\"Reference Note\">\r\n <ng-template matTabContent>\r\n <div class=\"flex flex-col ratings-div mt-5\" id=\"teachersNoteDiv\">\r\n <ws-widget-app-toc-teachers-notes [content]=\"contentReadData\"\r\n [notesDisplayType]=\"'Reference Resource'\"></ws-widget-app-toc-teachers-notes>\r\n\r\n <!-- <ws-widget-app-toc-reference-notes [content]=\"contentReadData\"></ws-widget-app-toc-reference-notes> -->\r\n </div>\r\n </ng-template>\r\n </mat-tab>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"showAssignmentsTab && !forPreview\">\r\n <mat-tab label=\"{{ 'apptocsinglepage.assignments' | translate }}\">\r\n <ng-template matTabContent>\r\n <div class=\"flex flex-col ratings-div mt-5\" id=\"takeAssessmentDiv\">\r\n <ws-widget-app-batch-assignments [content]=\"content\"></ws-widget-app-batch-assignments>\r\n </div>\r\n </ng-template>\r\n </mat-tab>\r\n </ng-container>\r\n\r\n <!-- Transcription Tab -->\r\n <mat-tab label=\"AI Tutor\" *ngIf=\"viewerPage && enableAITutorFlag && isMobile\">\r\n <ng-template mat-tab-label>\r\n <div class=\"flex flex-row\">\r\n <div class=\"flex\">\r\n <span>AI Tutor</span>\r\n </div>\r\n <div class=\"red-circle ml-5\">\r\n New\r\n </div>\r\n </div>\r\n\r\n </ng-template>\r\n <ng-template matTabContent>\r\n <ng-container *ngIf=\"showAITutorPopup\">\r\n <div>\r\n <viewer-ai-tutor [content]=\"content?.identifier\"\r\n (closeAIPopup)=\"closeAIPopup($event)\"></viewer-ai-tutor>\r\n </div>\r\n </ng-container>\r\n </ng-template>\r\n </mat-tab>\r\n </mat-tab-group>\r\n</div>", styles: ["::ng-deep .content-tabs .mat-tab-body-content{overflow:hidden!important;background-color:#eff3f9}::ng-deep .content-tabs .mat-tab-body.mat-tab-body-active{overflow-y:hidden}:host ::ng-deep .sticky-mat-tabs .mat-tab-header{top:96px;z-index:1000;position:sticky;position:-webkit-sticky;background:#eff3f9}#commentsDiv,#samuhikCharchaDiv{margin:1rem auto;min-height:800px}@media screen and (max-width: 768px){.sticky-mat-tabs .mat-tab-header{top:120px;position:fixed;width:100%}.content-tabs{border-radius:16px 16px 0 0;box-shadow:0 -2px 9px #00000014;background-color:#fff}}::ng-deep .contentSticky .mat-tab-header{top:0!important}.ai-tutor-btn{border:2px solid transparent;border-radius:20px;background:linear-gradient(to right,#fff,#fff),linear-gradient(to right,#efa34f,#4881e4);background-clip:padding-box,border-box;background-origin:padding-box,border-box;width:114px}.ai-tutor-get-started{border:2px solid transparent;border-radius:20px;background:linear-gradient(to right,#fff,#fff),linear-gradient(to right,#efa34f,#4881e4);background-clip:padding-box,border-box;background-origin:padding-box,border-box;width:100%;min-height:80px}.ai-tutor-get-started-mobile{border:2px solid transparent;border-radius:20px;background:linear-gradient(to right,#fff,#fff),linear-gradient(to right,#efa34f,#4881e4);background-clip:padding-box,border-box;background-origin:padding-box,border-box;width:96%;min-height:80px}.align-items-center{align-items:center}.w-565{width:565px}.w-98{width:98%}.font-weight-600{font-weight:600;line-height:1}.ai-tutor-label{color:#1b4ca1;font-weight:700}.section-dd{border-radius:32px;border:1px solid #1b4ca1;padding:12px 16px;color:#1b4ca1;width:auto;height:45px;font-size:14px;font-weight:700}::ng-deep .section-dd-container .mat-form-field-wrapper{padding-bottom:.5em!important}::ng-deep .section-dd-container .mat-form-field-infix{width:auto!important}::ng-deep .section-dd-container .mat-form-field-type-mat-native-select .mat-form-field-infix:after{color:#1b4ca1!important}::ng-deep .section-dd-container .mat-form-field-type-mat-native-select .mat-form-field-infix:after{top:35%!important;right:15%!important}::ng-deep .section-dd-container .mat-form-field-type-mat-native-select .mat-input-element{padding-right:65px}::ng-deep .section-dd .mat-form-field-underline{display:none!important}.w-20{width:20%}::ng-deep .highlight{background-color:#ff0!important;font-weight:700!important}.red-circle{background:red;opacity:1;color:#fff;padding:2px 10px;height:14px;width:20px;border-radius:2px;vertical-align:middle;display:flex;justify-content:center;align-items:center;margin-left:8px;margin-top:-10px}.w-60{width:60%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px}.blue-underline{color:#1b4ca1;text-decoration:underline;font-weight:700}.transcript-control{color:#fff;display:flex;align-items:flex-start;justify-content:flex-start}:host ::ng-deep .multiline-select .mat-mdc-select-value-text{white-space:pre-wrap!important}:host ::ng-deep .mat-pseudo-checkbox{display:none!important}:host ::ng-deep .mat-pseudo-checkbox-checked{display:none!important}::ng-deep .multiline-select.mat-form-field{border-bottom:1px solid #1b4ca1!important}::ng-deep .multiline-select-option .mat-mdc-option:focus.mdc-list-item,.mat-mdc-option.mat-mdc-option-active.mdc-list-item{background-color:#e3eeff!important;color:#1b4ca1!important;font-weight:700!important}.transcript-flex-container{display:flex;justify-content:flex-end;width:100%}.selected-option-content{color:#1b4ca1}.ml-5-per{margin-left:5%}.black-text{color:#000;word-wrap:break-word}.subtitle-time{width:20%;word-wrap:break-word}.subtitle-text-slot{width:74%}.w-subtitle-80{width:70%}.w-subtitle-20{width:30%}::ng-deep .mat-mdc-select-panel{background:#fff!important}@media (min-width: 1280px) and (max-width: 1280px){.subtitle-time{width:30%}.subtitle-text-slot{width:70%}}@media (min-width: 1056px) and (max-width: 1232px){.subtitle-time{width:30%}.subtitle-text-slot{width:70%}}@media (min-width: 1024px) and (max-width: 1024px){.subtitle-time{width:30%}.subtitle-text-slot{width:70%}}@media (min-width: 768px) and (max-width: 1023px){.subtitle-time{width:25%}.subtitle-text-slot{width:75%}}@media (min-width: 360px) and (max-width: 360px){.subtitle-time,.subtitle-text-slot{width:50%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px;margin:10px}}@media (min-width: 361px) and (max-width: 540px){.subtitle-time,.subtitle-text-slot{width:50%}.w-subtitle-20{width:40%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px;margin:10px}}@media (min-width: 541px) and (max-width: 767px){.subtitle-time{width:40%}.subtitle-text-slot{width:60%}.w-subtitle-20{width:40%}.disclaimer{background-color:#f3962f33;color:#000000de;font-family:Lato;font-size:16px;font-weight:500;border-radius:8px;margin:10px}}@media (min-width: 768px){::ng-deep .tab-group-container .mdc-tab{min-width:auto;max-width:max-content;text-align:left;justify-content:start;padding-left:24px;padding-right:24px}.w-60{width:60%}}:host ::ng-deep .tab-group-container ::ng-deep .mat-mdc-tab-header-pagination{z-index:1!important}:host ::ng-deep .transcript-flex-container .mat-mdc-text-field-wrapper{width:100%;padding:10px}:host ::ng-deep .multiline-select.mat-mdc-form-field .mdc-line-ripple{display:none!important}:host ::ng-deep .multiline-select.mat-mdc-form-field:hover .mdc-line-ripple{display:block!important;height:4px!important;color:#1b4ca1!important}:host ::ng-deep .multiline-select.mat-mdc-form-field:hover .mat-mdc-form-field-flex{background-color:#e3eeff!important}:host ::ng-deep .multiline-select .mat-mdc-select-arrow-wrapper{margin-right:10px}\n"] }]
|
|
778
|
+
}], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.UtilityService }, { type: i3.LoadCheckService }, { type: i2.ConfigurationsService }, { type: i4.MatLegacyDialog }, { type: i5.AppTocService }, { type: i6.ActionService }, { type: i1.Router }, { type: i2.EventService }, { type: i7.ViewerDataService }, { type: i8.SamuhikCharchaService }, { type: undefined, decorators: [{
|
|
779
|
+
type: Inject,
|
|
780
|
+
args: ['environment']
|
|
781
|
+
}] }]; }, propDecorators: { content: [{
|
|
782
|
+
type: Input
|
|
783
|
+
}], contentReadData: [{
|
|
784
|
+
type: Input
|
|
785
|
+
}], initialRouteData: [{
|
|
786
|
+
type: Input
|
|
787
|
+
}], changeTab: [{
|
|
788
|
+
type: Input
|
|
789
|
+
}], baseContentReadData: [{
|
|
790
|
+
type: Input
|
|
791
|
+
}], forPreview: [{
|
|
792
|
+
type: Input
|
|
793
|
+
}], contentTabFlag: [{
|
|
794
|
+
type: Input
|
|
795
|
+
}], resumeData: [{
|
|
796
|
+
type: Input
|
|
797
|
+
}], batchData: [{
|
|
798
|
+
type: Input
|
|
799
|
+
}], skeletonLoader: [{
|
|
800
|
+
type: Input
|
|
801
|
+
}], tocStructure: [{
|
|
802
|
+
type: Input
|
|
803
|
+
}], pathSet: [{
|
|
804
|
+
type: Input
|
|
805
|
+
}], fromViewer: [{
|
|
806
|
+
type: Input
|
|
807
|
+
}], hierarchyMapData: [{
|
|
808
|
+
type: Input
|
|
809
|
+
}], tabElement: [{
|
|
810
|
+
type: ViewChild,
|
|
811
|
+
args: ['stickyMenu']
|
|
812
|
+
}], tabs: [{
|
|
813
|
+
type: ViewChildren,
|
|
814
|
+
args: [MatTab]
|
|
815
|
+
}], condition: [{
|
|
816
|
+
type: Input
|
|
817
|
+
}], kparray: [{
|
|
818
|
+
type: Input
|
|
819
|
+
}], selectedBatchData: [{
|
|
820
|
+
type: Input
|
|
821
|
+
}], config: [{
|
|
822
|
+
type: Input
|
|
823
|
+
}], componentName: [{
|
|
824
|
+
type: Input
|
|
825
|
+
}], isEnrolled: [{
|
|
826
|
+
type: Input
|
|
827
|
+
}], playResourceId: [{
|
|
828
|
+
type: Input
|
|
829
|
+
}], sideNavBarOpened: [{
|
|
830
|
+
type: Input
|
|
831
|
+
}], languageList: [{
|
|
832
|
+
type: Input
|
|
833
|
+
}], lockCertificate: [{
|
|
834
|
+
type: Input
|
|
835
|
+
}], playResumeForAI: [{
|
|
836
|
+
type: Output
|
|
837
|
+
}], enrollUserToAI: [{
|
|
838
|
+
type: Output
|
|
839
|
+
}], trigerCompletionSurveyForm: [{
|
|
840
|
+
type: Output
|
|
841
|
+
}], resumeContent: [{
|
|
842
|
+
type: Output
|
|
843
|
+
}], handleScroll: [{
|
|
844
|
+
type: HostListener,
|
|
845
|
+
args: ['window:scroll', ['$event']]
|
|
846
|
+
}] } });
|
|
847
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC10b2MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL19jb2xsZWN0aW9uL19jb21tb24vY29udGVudC10b2MvY29udGVudC10b2MuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL19jb2xsZWN0aW9uL19jb21tb24vY29udGVudC10b2MvY29udGVudC10b2MuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQTRCLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFakwsT0FBTyxFQUF1QyxTQUFTLEVBQWtCLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBTS9HLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDJEQUEyRCxDQUFBO0FBQ3hHLE9BQU8sRUFBZ0MscUJBQXFCLElBQUksZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUE7QUFDeEgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0NBQXNDLENBQUE7QUFHM0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQzlDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUVwQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFFL0MsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU8zQixNQUFNLE9BQU8sbUJBQW1CO0lBcUU5QixZQUNVLEtBQXFCLEVBQ3JCLGNBQThCLEVBQzlCLGdCQUFrQyxFQUNs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Q0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNJLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csY0FBYztzQkFBdkIsTUFBTTtnQkFDRywwQkFBMEI7c0JBQW5DLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkF3VlAsWUFBWTtzQkFEWCxZQUFZO3VCQUFDLGVBQWUsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIEluamVjdCwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJ1xyXG5pbXBvcnQgeyBDb25maWd1cmF0aW9uc1NlcnZpY2UsIEV2ZW50U2VydmljZSwgTnNDb250ZW50LCBVdGlsaXR5U2VydmljZSwgV3NFdmVudHMgfSBmcm9tICdAc3VuYmlyZC1jYi91dGlscy12MidcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcydcclxuXHJcbmltcG9ydCB7IExvYWRDaGVja1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9sb2FkLWNoZWNrLnNlcnZpY2UnXHJcbmltcG9ydCB7IE1hdExlZ2FjeVRhYkdyb3VwIGFzIE1hdFRhYkdyb3VwLCBNYXRMZWdhY3lUYWJDaGFuZ2VFdmVudCBhcyBNYXRUYWJDaGFuZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xlZ2FjeS10YWJzJ1xyXG5pbXBvcnQgeyBOc0Rpc2N1c3Npb25WMiB9IGZyb20gJ0BzdW5iaXJkLWNiL2Rpc2N1c3Npb24tdjInXHJcbmltcG9ydCB7IEFpVHV0b3JDb25maXJtUG9wdXBDb21wb25lbnQgfSBmcm9tICcuL2FpLXR1dG9yLWNvbmZpcm0tcG9wdXAvYWktdHV0b3ItY29uZmlybS1wb3B1cC5jb21wb25lbnQnXHJcbmltcG9ydCB7IE1hdExlZ2FjeURpYWxvZyBhcyBNYXREaWFsb2csIE1hdExlZ2FjeURpYWxvZ0NvbmZpZyBhcyBNYXREaWFsb2dDb25maWcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktZGlhbG9nJ1xyXG5pbXBvcnQgeyB2aWV3ZXJSb3V0ZUdlbmVyYXRvciB9IGZyb20gJy4uLy4uLy4uL19zZXJ2aWNlcy92aWV3ZXItcm91dGUtdXRpbCdcclxuaW1wb3J0IHsgQXBwVG9jU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2FwcC10b2Muc2VydmljZSdcclxuaW1wb3J0IHsgQWN0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2FjdGlvbi5zZXJ2aWNlJ1xyXG5pbXBvcnQgeyBWdHRGaWxlIH0gZnJvbSAnQHBvbHlmbGl4L3Z0dC1wYXJzZXInXHJcbmltcG9ydCB7IHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xyXG5pbXBvcnQgeyBWaWV3ZXJEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3ZpZXdlci1kYXRhLnNlcnZpY2UnXHJcbmltcG9ydCB7IE1hdFRhYiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYnMnXHJcbmltcG9ydCB7IFNhbXVoaWtDaGFyY2hhU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL19zZXJ2aWNlcy9zYW11aGlrLWNoYXJjaGEuc2VydmljZSdcclxuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnd3Mtd2lkZ2V0LWNvbnRlbnQtdG9jJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29udGVudC10b2MuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvbnRlbnQtdG9jLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgQ29udGVudFRvY0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzIHtcclxuXHJcbiAgdGFiQ2hhbmdlVmFsdWU6IGFueSA9ICcnXHJcbiAgQElucHV0KCkgY29udGVudCE6IGFueVxyXG4gIEBJbnB1dCgpIGNvbnRlbnRSZWFkRGF0YSE6IGFueVxyXG4gIEBJbnB1dCgpIGluaXRpYWxSb3V0ZURhdGE6IGFueVxyXG4gIEBJbnB1dCgpIGNoYW5nZVRhYiA9IGZhbHNlXHJcbiAgQElucHV0KCkgYmFzZUNvbnRlbnRSZWFkRGF0YSE6IGFueVxyXG4gIHJvdXRlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbFxyXG4gIEBJbnB1dCgpIGZvclByZXZpZXcgPSB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnL3B1YmxpYy8nKSB8fCB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmNsdWRlcygnJnByZXZpZXc9dHJ1ZScpXHJcbiAgQElucHV0KCkgY29udGVudFRhYkZsYWcgPSB0cnVlXHJcbiAgQElucHV0KCkgcmVzdW1lRGF0YTogYW55IHwgbnVsbCA9IG51bGxcclxuICBASW5wdXQoKSBiYXRjaERhdGE6IC8qKk5zQ29udGVudC5JQmF0Y2hMaXN0UmVzcG9uc2UgKi8gYW55IHwgbnVsbCA9IG51bGxcclxuICBASW5wdXQoKSBza2VsZXRvbkxvYWRlciA9IGZhbHNlXHJcbiAgQElucHV0KCkgdG9jU3RydWN0dXJlOiBhbnkgPSB7fVxyXG4gIEBJbnB1dCgpIHBhdGhTZXQ6IGFueVxyXG4gIEBJbnB1dCgpIGZyb21WaWV3ZXIgPSBmYWxzZVxyXG4gIEBJbnB1dCgpIGhpZXJhcmNoeU1hcERhdGE6IGFueSA9IHt9XHJcbiAgQFZpZXdDaGlsZCgnc3RpY2t5TWVudScpIHRhYkVsZW1lbnQhOiBNYXRUYWJHcm91cFxyXG4gIEBWaWV3Q2hpbGRyZW4oTWF0VGFiKSB0YWJzITogUXVlcnlMaXN0PE1hdFRhYj5cclxuICBASW5wdXQoKSBjb25kaXRpb246IGFueVxyXG4gIEBJbnB1dCgpIGtwYXJyYXk6IGFueVxyXG4gIEBJbnB1dCgpIHNlbGVjdGVkQmF0Y2hEYXRhOiBhbnlcclxuICBASW5wdXQoKSBjb25maWc6IGFueVxyXG4gIEBJbnB1dCgpIGNvbXBvbmVudE5hbWUhOiBzdHJpbmdcclxuICBASW5wdXQoKSBpc0Vucm9sbGVkITogYm9vbGVhblxyXG4gIEBJbnB1dCgpIHBsYXlSZXNvdXJjZUlkID0gJydcclxuICBASW5wdXQoKSBzaWRlTmF2QmFyT3BlbmVkID0gZmFsc2VcclxuICBASW5wdXQoKSBsYW5ndWFnZUxpc3QgPSBbXVxyXG4gIEBJbnB1dCgpIGxvY2tDZXJ0aWZpY2F0ZSA9IGZhbHNlXHJcbiAgQE91dHB1dCgpIHBsYXlSZXN1bWVGb3JBSSA9IG5ldyBFdmVudEVtaXR0ZXIoKVxyXG4gIEBPdXRwdXQoKSBlbnJvbGxVc2VyVG9BSSA9IG5ldyBFdmVudEVtaXR0ZXIoKVxyXG4gIEBPdXRwdXQoKSB0cmlnZXJDb21wbGV0aW9uU3VydmV5Rm9ybSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKVxyXG4gIEBPdXRwdXQoKSByZXN1bWVDb250ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpXHJcblxyXG4gIGNvbW1lbnRJZD86IHN0cmluZyA9ICcnXHJcbiAgc3RpY2t5ID0gZmFsc2VcclxuICBtZW51UG9zaXRpb246IGFueVxyXG4gIGlzTW9iaWxlID0gZmFsc2VcclxuICBzZWxlY3RlZFRhYkluZGV4ID0gMFxyXG4gIGRpc2N1c3NXaWRnZXREYXRhITogTnNEaXNjdXNzaW9uVjIuSUNvbW1lbnRXaWRnZXREYXRhXHJcbiAgdGVhY2hlck5vdGVzRmxhZyA9IGZhbHNlXHJcbiAgcmVmZXJlbmNlTm90ZXNGbGFnID0gZmFsc2VcclxuICB2aWV3ZXJQYWdlID0gd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoJy92aWV3ZXIvJykgPyB0cnVlIDogZmFsc2VcclxuICByZXN1bWVEYXRhTGluazogYW55XHJcbiAgZW5hYmxlQUlUdXRvckZsYWcgPSBmYWxzZVxyXG4gIGVuYWJsZVRyYW5zY3JpcHRpb25GbGFnID0gZmFsc2VcclxuICBjb3Vyc2VDYXRlZ29yeSA9IE5zQ29udGVudC5FQ291cnNlQ2F0ZWdvcnlcclxuICBzdWJUaXRsZXMkOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbFxyXG4gIHJlc291cmNlSWRlbnRpZmllcjogYW55XHJcbiAgcmVzb3VyY2VJZGVudGlmaWVyJDogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGxcclxuICBzdWJUaXRsZXM6IGFueSA9IFtdXHJcbiAga2V5d29yZFRvSGlnaGxpZ2h0OiBhbnkgPSAnJ1xyXG4gIGhpZ2hsaWdodENvbmRpdGlvbiA9IGZhbHNlXHJcbiAgdnR0TGFuZ0FycjogYW55ID0gW11cclxuICB0cmFuc2NyaXB0aW9uQWN0aXZlTGFuZ3VhZ2UgPSAnZW4nXHJcbiAgZGVmYXVsdFRyYW5zY3JpcHRMYW5ndWFnZSA9ICdlbidcclxuICB0cmFuc3JpcHRpb25MYW5ndWFnZVN1YjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGxcclxuICBzZWxlY3RlZFRyYW5zY3JpcHRpb25TdHlsZTogYW55XHJcbiAgZnJvbUFJVHV0b3IgPSBmYWxzZVxyXG4gIHRvdGFsUmVzb3VyY2UgPSAwXHJcbiAgc2Nvcm1Bc3Nlc3NtZW50Q291bnQgPSAwXHJcbiAgc2hvd0FJVHV0b3JQb3B1cCA9IGZhbHNlXHJcbiAgZnJvbUFJU2VsZWN0ZWRUYWJJbmRleCA9IGZhbHNlXHJcbiAgaXNNb2JpbGVGb3JBSSA9IGZhbHNlXHJcbiAgdHJhbnNjcmlwdEFjdGl2ZUxhbmd1YWdlVGV4dCA9ICdFbmdsaXNoJ1xyXG4gIHNob3dBc3NpZ25tZW50c1RhYiA9IGZhbHNlXHJcbiAgZW5hYmxlU2FtdWhpa0NoYXJjaGFUYWIgPSBmYWxzZVxyXG4gIHNhbXVoaWtDb25maWc6IGFueVxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHV0aWxpdHlTZXJ2aWNlOiBVdGlsaXR5U2VydmljZSxcclxuICAgIHByaXZhdGUgbG9hZENoZWNrU2VydmljZTogTG9hZENoZWNrU2VydmljZSxcclxuICAgIHByaXZhdGUgY29uZmlnU2VydmljZTogQ29uZmlndXJhdGlvbnNTZXJ2aWNlLFxyXG4gICAgcHVibGljIGRpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgcHVibGljIHRvY1N2YzogQXBwVG9jU2VydmljZSxcclxuICAgIHByaXZhdGUgYWN0aW9uU1ZDOiBBY3Rpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgIHByaXZhdGUgZXZlbnRTdmM6IEV2ZW50U2VydmljZSxcclxuICAgIHByaXZhdGUgdmlld2VyRGF0YVN2YzogVmlld2VyRGF0YVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNhbXVoaWtDaGFyY2hhU3ZjOiBTYW11aGlrQ2hhcmNoYVNlcnZpY2UsXHJcbiAgICBASW5qZWN0KCdlbnZpcm9ubWVudCcpIHByaXZhdGUgZW52aXJvbm1lbnQ6IGFueVxyXG5cclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGlmICh0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnICYmIHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWc/LmFpVHV0b3IgJiYgdGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZz8uYWlUdXRvcj8uYWxsKSB7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKCd0aGlzLmNvbnRlbnRSZWFkRGF0YS0tJywgdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhKVxyXG4gICAgICB0aGlzLmVuYWJsZUFJVHV0b3JGbGFnID0gdGhpcy5vbmx5c2Nvcm1Bc3Nlc3NtZW50RXhpc3RzKHRoaXMucm91dGUuc25hcHNob3Q/LmRhdGE/LmNvbnRlbnQ/LmRhdGE/LmNoaWxkcmVuLCAnbWltZVR5cGUnLCBbJ2FwcGxpY2F0aW9uL3ZuZC5la3N0ZXAuaHRtbC1hcmNoaXZlJywgJ2FwcGxpY2F0aW9uL3ZuZC5zdW5iaXJkLnF1ZXN0aW9uc2V0JywgJ2FwcGxpY2F0aW9uL2pzb24nLCAndGV4dC94LXVybCddKVxyXG4gICAgICAvLyB0aGlzLmVuYWJsZUFJVHV0b3JGbGFnID0gdHJ1ZVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnICYmIHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWc/LmFpVHV0b3IgJiYgdGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZz8uYWlUdXRvcj8uZm9yT3JnICYmIHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWcuYWlUdXRvcj8uZm9yT3JnPy5sZW5ndGggJiZcclxuICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZz8uYWlUdXRvcj8uZm9yT3JnLmluY2x1ZGVzKHRoaXMuY29uZmlnU2VydmljZS51c2VyUHJvZmlsZT8ucm9vdE9yZ0lkKVxyXG4gICAgKSB7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKCd0aGlzLmNvbnRlbnRSZWFkRGF0YS0tJywgdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhKVxyXG4gICAgICB0aGlzLmVuYWJsZUFJVHV0b3JGbGFnID0gdGhpcy5vbmx5c2Nvcm1Bc3Nlc3NtZW50RXhpc3RzKHRoaXMucm91dGUuc25hcHNob3Q/LmRhdGE/LmNvbnRlbnQ/LmRhdGE/LmNoaWxkcmVuLCAnbWltZVR5cGUnLCBbJ2FwcGxpY2F0aW9uL3ZuZC5la3N0ZXAuaHRtbC1hcmNoaXZlJywgJ2FwcGxpY2F0aW9uL3ZuZC5zdW5iaXJkLnF1ZXN0aW9uc2V0JywgJ2FwcGxpY2F0aW9uL2pzb24nLCAndGV4dC94LXVybCddKVxyXG4gICAgICAvLyB0aGlzLmVuYWJsZUFJVHV0b3JGbGFnID0gdHJ1ZVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5lbmFibGVBSVR1dG9yRmxhZyA9IGZhbHNlXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZyAmJiB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnPy50cmFuc2NyaXB0aW9uPy5hbGwpIHtcclxuICAgICAgLy8gY29uc29sZS5sb2coJ2luJylcclxuICAgICAgLy8gdGhpcy5yZXNvdXJjZUlkZW50aWZpZXIkID0gdGhpcy50b2NTdmMudHJhbnNyaXB0aW9uSWRlbnRpZmllci5zdWJzY3JpYmUoKHZhbHVlOmFueSk9PntcclxuICAgICAgLy8gICAvLyAgY29uc29sZS5sb2coJ3Jlc291cmNlIGlkZW50aWZpZXInLCB2YWx1ZSlcclxuICAgICAgLy8gICBpZih2YWx1ZSAmJiAgdmFsdWU/LmlkZW50aWZpZXIpIHtcclxuICAgICAgLy8gICAgIHRoaXMucmVzb3VyY2VJZGVudGlmaWVyID0gdmFsdWU/LmlkZW50aWZpZXIgLy92YWx1ZT8uaWRlbnRpZmllciAvLyBkb18xMTM4ODkxMTk4NDg5MDY3NTIxMTQ3XHJcbiAgICAgIC8vICAgICB0aGlzLnBhcnNlVlRUKClcclxuICAgICAgLy8gICB9XHJcblxyXG4gICAgICAvLyB9KVxyXG5cclxuICAgICAgdGhpcy5zdWJUaXRsZXMkID0gdGhpcy50b2NTdmMudHJhbnNjcmlwdGlvbkRhdGEkLnN1YnNjcmliZSgodmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICAgIC8vICBjb25zb2xlLmxvZygndmFsdWUnLCB2YWx1ZSlcclxuICAgICAgICB0aGlzLmtleXdvcmRUb0hpZ2hsaWdodCA9IHZhbHVlXHJcbiAgICAgIH0pXHJcblxyXG4gICAgICB0aGlzLnRyYW5zcmlwdGlvbkxhbmd1YWdlU3ViID0gdGhpcy50b2NTdmMudHJhbnNyaXB0aW9uQWN0aXZlTGFuZ3VhZ2VEYXRhT2JqZWN0JFxyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgdGFwKChsYW5ndmFsdWU6IGFueSkgPT4gY29uc29sZS5sb2coJ3RhcCBsYW5ndmFsdWU6JywgbGFuZ3ZhbHVlKSlcclxuICAgICAgICApXHJcbiAgICAgICAgLnN1YnNjcmliZSgobGFuZ3ZhbHVlOiBhbnkpID0+IHtcclxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdsYW5nVmFsdWUnLCBsYW5ndmFsdWUpO1xyXG4gICAgICAgICAgaWYgKGxhbmd2YWx1ZSkge1xyXG4gICAgICAgICAgICAvLyB0aGlzLnJlbmRlclNlbGVjdGVkTGFuZ3VhZ2VUcmFuc2NyaXB0aW9uKCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0pXHJcbiAgICAgIHRoaXMuZW5hYmxlVHJhbnNjcmlwdGlvbkZsYWcgPSB0cnVlXHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWcgJiYgdGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZz8udHJhbnNjcmlwdGlvbiAmJiB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnPy50cmFuc2NyaXB0aW9uPy5mb3JPcmcgJiYgdGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZz8udHJhbnNjcmlwdGlvbj8uZm9yT3JnPy5sZW5ndGggJiZcclxuICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZz8udHJhbnNjcmlwdGlvbj8uZm9yT3JnPy5pbmNsdWRlcyh0aGlzLmNvbmZpZ1NlcnZpY2UudXNlclByb2ZpbGU/LnJvb3RPcmdJZClcclxuICAgICkge1xyXG4gICAgICAvLyBjb25zb2xlLmxvZygnaW4nKVxyXG4gICAgICAvLyB0aGlzLnJlc291cmNlSWRlbnRpZmllciQgPSB0aGlzLnRvY1N2Yy50cmFuc3JpcHRpb25JZGVudGlmaWVyLnN1YnNjcmliZSgodmFsdWU6YW55KT0+e1xyXG4gICAgICAvLyAgIC8vICBjb25zb2xlLmxvZygncmVzb3VyY2UgaWRlbnRpZmllcicsIHZhbHVlKVxyXG4gICAgICAvLyAgIGlmKHZhbHVlICYmICB2YWx1ZT8uaWRlbnRpZmllcikge1xyXG4gICAgICAvLyAgICAgdGhpcy5yZXNvdXJjZUlkZW50aWZpZXIgPSB2YWx1ZT8uaWRlbnRpZmllciAvL3ZhbHVlPy5pZGVudGlmaWVyIC8vIGRvXzExMzg4OTExOTg0ODkwNjc1MjExNDdcclxuICAgICAgLy8gICAgIHRoaXMucGFyc2VWVFQoKVxyXG4gICAgICAvLyAgIH1cclxuXHJcbiAgICAgIC8vIH0pXHJcblxyXG4gICAgICB0aGlzLnN1YlRpdGxlcyQgPSB0aGlzLnRvY1N2Yy50cmFuc2NyaXB0aW9uRGF0YSQuc3Vic2NyaWJlKCh2YWx1ZTogYW55KSA9PiB7XHJcbiAgICAgICAgLy8gIGNvbnNvbGUubG9nKCd2YWx1ZScsIHZhbHVlKVxyXG4gICAgICAgIHRoaXMua2V5d29yZFRvSGlnaGxpZ2h0ID0gdmFsdWVcclxuICAgICAgfSlcclxuXHJcbiAgICAgIHRoaXMudHJhbnNyaXB0aW9uTGFuZ3VhZ2VTdWIgPSB0aGlzLnRvY1N2Yy50cmFuc3JpcHRpb25BY3RpdmVMYW5ndWFnZURhdGFPYmplY3QkXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICB0YXAoKGxhbmd2YWx1ZTogYW55KSA9PiBjb25zb2xlLmxvZygndGFwIGxhbmd2YWx1ZTonLCBsYW5ndmFsdWUpKVxyXG4gICAgICAgIClcclxuICAgICAgICAuc3Vic2NyaWJlKChsYW5ndmFsdWU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ2xhbmdWYWx1ZScsIGxhbmd2YWx1ZSk7XHJcbiAgICAgICAgICBpZiAobGFuZ3ZhbHVlKSB7XHJcbiAgICAgICAgICAgIC8vIHRoaXMucmVuZGVyU2VsZWN0ZWRMYW5ndWFnZVRyYW5zY3JpcHRpb24oKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSlcclxuICAgICAgdGhpcy5lbmFibGVUcmFuc2NyaXB0aW9uRmxhZyA9IHRydWVcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZW5hYmxlVHJhbnNjcmlwdGlvbkZsYWcgPSBmYWxzZVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGJhdGNoSWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLmJhdGNoSWQgP1xyXG4gICAgICB0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLmJhdGNoSWQgOiAnJ1xyXG4gICAgaWYgKGJhdGNoSWQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gMVxyXG4gICAgfVxyXG4gICAgdGhpcy5jb21tZW50SWQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLmNvbW1lbnRJZCA/IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMuY29tbWVudElkIDogJydcclxuICAgIGlmICh0aGlzLmNvbW1lbnRJZCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSAyXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5pc01vYmlsZSA9IHRoaXMudXRpbGl0eVNlcnZpY2UuaXNNb2JpbGVcclxuICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDE0ODApIHtcclxuICAgICAgdGhpcy5pc01vYmlsZUZvckFJID0gdHJ1ZVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5pc01vYmlsZUZvckFJID0gZmFsc2VcclxuICAgIH1cclxuICAgIHRoaXMubWVudVBvc2l0aW9uID0gdGhpcy50YWJFbGVtZW50Ll9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0VG9wXHJcblxyXG4gICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtTWFwLnN1YnNjcmliZShhc3luYyAocGFyYW1zOiBhbnkpID0+IHtcclxuXHJcbiAgICAgIGxldCBmcm9tQUlUdXRvciA9IHBhcmFtcy5nZXQoJ2Zyb21BSVR1dG9yJylcclxuXHJcbiAgICAgIGlmICgoZnJvbUFJVHV0b3IgPT09ICd0cnVlJyB8fCBmcm9tQUlUdXRvciA9PT0gdHJ1ZSkgJiYgdGhpcy5pc01vYmlsZSkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgdGFic0FycmF5ID0gdGhpcy50YWJzPy50b0FycmF5KClcclxuICAgICAgICAgIGxldCBpbmRleCA9IHRhYnNBcnJheT8uZmluZEluZGV4KHRhYiA9PiB0YWIudGV4dExhYmVsLnRyaW0oKSA9PT0gXCJBSSBUdXRvclwiLnRyaW0oKSlcclxuICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9IGluZGV4XHJcbiAgICAgICAgICAgIHRoaXMuZnJvbUFJU2VsZWN0ZWRUYWJJbmRleCA9IHRydWVcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LCAzMDAwKVxyXG5cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGdldCBnZXRDdXJyZW50VGltZUluVVRDKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKClcclxuICAgIGNvbnN0IGlzb1N0cmluZyA9IGN1cnJlbnREYXRlLnRvSVNPU3RyaW5nKClcclxuICAgIHJldHVybiBpc29TdHJpbmcucmVwbGFjZSgnWicsICcrMDAwMCcpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGdldFNhbXVoaWtDb25maWcoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLnNhbXVoaWtDb25maWcgPSBhd2FpdCB0aGlzLnNhbXVoaWtDaGFyY2hhU3ZjLmZldGNoQ29uZmlnRmlsZSgpLnRvUHJvbWlzZSgpXHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG5cclxuICAgIHRoaXMucmVzb3VyY2VJZGVudGlmaWVyID0gdGhpcy52aWV3ZXJEYXRhU3ZjLnJlc291cmNlSWRcclxuXHJcbiAgICBpZiAodGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZyAmJiB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnPy50cmFuc2NyaXB0aW9uPy5hbGwpIHtcclxuICAgICAgdGhpcy5lbmFibGVUcmFuc2NyaXB0aW9uRmxhZyA9IHRydWVcclxuICAgIH0gZWxzZSBpZiAodGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZyAmJiB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnPy50cmFuc2NyaXB0aW9uICYmIHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWc/LnRyYW5zY3JpcHRpb24/LmZvck9yZyAmJiB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnPy50cmFuc2NyaXB0aW9uPy5mb3JPcmc/Lmxlbmd0aCAmJlxyXG4gICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnPy50cmFuc2NyaXB0aW9uPy5mb3JPcmc/LmluY2x1ZGVzKHRoaXMuY29uZmlnU2VydmljZT8udXNlclByb2ZpbGU/LnJvb3RPcmdJZClcclxuICAgICkge1xyXG4gICAgICB0aGlzLmVuYWJsZVRyYW5zY3JpcHRpb25GbGFnID0gdHJ1ZVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5lbmFibGVUcmFuc2NyaXB0aW9uRmxhZyA9IGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWcgJiYgdGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZz8uYWlUdXRvciAmJiB0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnLmFpVHV0b3I/LmFsbCkge1xyXG4gICAgICAvLyBjb25zb2xlLmxvZygndGhpcy5jb250ZW50UmVhZERhdGEtLScsIHRoaXMucm91dGUuc25hcHNob3QuZGF0YSlcclxuICAgICAgdGhpcy5lbmFibGVBSVR1dG9yRmxhZyA9IHRoaXMub25seXNjb3JtQXNzZXNzbWVudEV4aXN0cyh0aGlzLmNvbnRlbnQ/LmNoaWxkcmVuLCAnbWltZVR5cGUnLCBbJ2FwcGxpY2F0aW9uL3ZuZC5la3N0ZXAuaHRtbC1hcmNoaXZlJywgJ2FwcGxpY2F0aW9uL3ZuZC5zdW5iaXJkLnF1ZXN0aW9uc2V0JywgJ2FwcGxpY2F0aW9uL2pzb24nLCAndGV4dC94LXVybCddKVxyXG4gICAgICAvLyB0aGlzLmVuYWJsZUFJVHV0b3JGbGFnID0gdHJ1ZVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmNvbmZpZ1NlcnZpY2UuaUdPVEFJQ29uZmlnICYmIHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWc/LmFpVHV0b3IgJiYgdGhpcy5jb25maWdTZXJ2aWNlLmlHT1RBSUNvbmZpZz8uYWlUdXRvcj8uZm9yT3JnICYmIHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWc/LmFpVHV0b3I/LmZvck9yZz8ubGVuZ3RoXHJcbiAgICAgICYmIHRoaXMuY29uZmlnU2VydmljZS5pR09UQUlDb25maWcuYWlUdXRvcj8uZm9yT3JnPy5pbmNsdWRlcyh0aGlzLmNvbmZpZ1NlcnZpY2U/LnVzZXJQcm9maWxlPy5yb290T3JnSWQpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5lbmFibGVBSVR1dG9yRmxhZyA9IHRoaXMub25seXNjb3JtQXNzZXNzbWVudEV4aXN0cyh0aGlzLmNvbnRlbnQ/LmNoaWxkcmVuLCAnbWltZVR5cGUnLCBbJ2FwcGxpY2F0aW9uL3ZuZC5la3N0ZXAuaHRtbC1hcmNoaXZlJywgJ2FwcGxpY2F0aW9uL3ZuZC5zdW5iaXJkLnF1ZXN0aW9uc2V0JywgJ2FwcGxpY2F0aW9uL2pzb24nLCAndGV4dC94LXVybCddKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5lbmFibGVBSVR1dG9yRmxhZyA9IGZhbHNlXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNoYW5nZXMgJiYgY2hhbmdlc1sncGxheVJlc291cmNlSWQnXSkge1xyXG4gICAgICBpZiAoY2hhbmdlcz8ucGxheVJlc291cmNlSWQ/LnByZXZpb3VzVmFsdWUgIT09IGNoYW5nZXM/LnBsYXlSZXNvdXJjZUlkPy5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgICBpZiAodGhpcy52aWV3ZXJQYWdlICYmIHRoaXMudmlld2VyRGF0YVN2Yz8ucmVzb3VyY2VJZCAmJiB0aGlzLmVuYWJsZVRyYW5zY3JpcHRpb25GbGFnKSB7XHJcbiAgICAgICAgICB0aGlzLnBhcnNlVlRUKClcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzLmNoYW5nZVRhYiAmJiBjaGFuZ2VzLmNoYW5nZVRhYi5jdXJyZW50VmFsdWUgJiYgIXRoaXMuZnJvbUFJU2VsZWN0ZWRUYWJJbmRleCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSAxXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLnBhZ2VEYXRhICYmIHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5wYWdlRGF0YS5kYXRhKSB7XHJcbiAgICAgIHRoaXMuY29uZmlnID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLnBhZ2VEYXRhLmRhdGFcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmNvbmZpZyAmJiB0aGlzLmNvbmZpZy5kaXNjdXNzV2lkZ2V0RGF0YSkge1xyXG4gICAgICB0aGlzLmRpc2N1c3NXaWRnZXREYXRhID0gdGhpcy5jb25maWcuZGlzY3Vzc1dpZGdldERhdGFcclxuICAgICAgaWYgKHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YSAmJiB0aGlzLmJhc2VDb250ZW50UmVhZERhdGEuaWRlbnRpZmllcikge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCd0aGlzLmNvbnRlbnQuaWRlbnRpZmllcicsIHRoaXMuY29udGVudC5pZGVudGlmaWVyKVxyXG4gICAgICAgIGlmICghdGhpcy5kaXNjdXNzV2lkZ2V0RGF0YS5uZXdDb21tZW50U2VjdGlvbi5jb21tZW50VHJlZURhdGEuZW50aXR5SWQpIHtcclxuICAgICAgICAgIHRoaXMuZGlzY3Vzc1dpZGdldERhdGEubmV3Q29tbWVudFNlY3Rpb24uY29tbWVudFRyZWVEYXRhLmVudGl0eUlkID0gdGhpcy5iYXNlQ29udGVudFJlYWREYXRhLmlkZW50aWZpZXJcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZGlzY3Vzc1dpZGdldERhdGEuY29tbWVudHNMaXN0LnJlcGxpZXNTZWN0aW9uICYmIHRoaXMuZGlzY3Vzc1dpZGdldERhdGEuY29tbWVudHNMaXN0LnJlcGxpZXNTZWN0aW9uLm5ld0NvbW1lbnRSZXBseSkge1xyXG4gICAgICAgICAgdGhpcy5kaXNjdXNzV2lkZ2V0RGF0YS5jb21tZW50c0xpc3QucmVwbGllc1NlY3Rpb24ubmV3Q29tbWVudFJlcGx5LmNvbW1lbnRUcmVlRGF0YS5lbnRpdHlJZCA9IHRoaXMuYmFzZUNvbnRlbnRSZWFkRGF0YS5pZGVudGlmaWVyXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAodGhpcy5pc0Vucm9sbGVkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udGVudCAmJiB0aGlzLmNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSBOc0NvbnRlbnQuRUNvdXJzZUNhdGVnb3J5LkJMRU5ERURfUFJPR1JBTSkge1xyXG4gICAgICAgICAgdGhpcy5zaG93QXNzaWdubWVudHNUYWIgPSB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGlzY3Vzc1dpZGdldERhdGEuZW5yb2xsZWRDb250ZW50ID0gdHJ1ZVxyXG4gICAgICAgIHRoaXMuZGlzY3Vzc1dpZGdldERhdGEubmV3Q29tbWVudFNlY3Rpb24uY29tbWVudEJveC5wbGFjZWhvbGRlciA9ICdTdGFydCBhIGRpc2N1c3Npb24nXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5kaXNjdXNzV2lkZ2V0RGF0YS5lbnJvbGxlZENvbnRlbnQgPSBmYWxzZVxyXG4gICAgICAgIHRoaXMuZGlzY3Vzc1dpZGdldERhdGEubmV3Q29tbWVudFNlY3Rpb24uY29tbWVudEJveC5wbGFjZWhvbGRlciA9ICdFbnJvbCB0byBhZGQgeW91ciBjb21tZW50cydcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5jb21tZW50SWQpIHtcclxuICAgICAgICB0aGlzLmRpc2N1c3NXaWRnZXREYXRhLm5ld0NvbW1lbnRTZWN0aW9uLnNob3cgPSBmYWxzZVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZGlzY3Vzc1dpZGdldERhdGEgPSB7IC4uLnRoaXMuZGlzY3Vzc1dpZGdldERhdGEgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNvbnRlbnRSZWFkRGF0YSAmJiB0aGlzLmNvbnRlbnRSZWFkRGF0YT8uZXZlbnRMaW5rZWQ/Lmxlbmd0aCkge1xyXG4gICAgICBjb25zdCBvcmdJZCA9IF8uZ2V0KHRoaXMuY29uZmlnU2VydmljZSwgJ3VzZXJQcm9maWxlLnVzZXJSb290T3JnLmlkJywgJycpXHJcbiAgICAgIGF3YWl0IHRoaXMuZ2V0U2FtdWhpa0NvbmZpZygpXHJcbiAgICAgIGNvbnN0IGV2ZW50c0xpbmtlZCA9IHRoaXMuY29udGVudFJlYWREYXRhLmV2ZW50TGlua2VkIHx8IFtdXHJcbiAgICAgIGxldCBldmVudHNEYXRhOiBhbnkgPSBbXVxyXG4gICAgICB0aGlzLnNhbXVoaWtDb25maWc/LnN0cmlwc1swXS50YWJzLmZvckVhY2goKGVsZTogYW55KSA9PiB7XHJcbiAgICAgICAgZWxlLnJlcXVlc3Quc2VhcmNoVjYucmVxdWVzdC5maWx0ZXJzLmlkZW50aWZpZXIgPSBldmVudHNMaW5rZWRcclxuICAgICAgICBlbGUucmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0LmZpbHRlcnMuY3JlYXRlZEZvciA9IFtvcmdJZF1cclxuICAgICAgICBpZiAoZWxlLnJlcXVlc3Quc2VhcmNoVjYucmVxdWVzdC5maWx0ZXJzLmVuZERhdGVUaW1lLmhhc093blByb3BlcnR5KCc+PScpKSB7XHJcbiAgICAgICAgICBlbGUucmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0LmZpbHRlcnMuZW5kRGF0ZVRpbWVbJz49J10gPSB0aGlzLmdldEN1cnJlbnRUaW1lSW5VVENcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVsZS5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVycy5lbmREYXRlVGltZS5oYXNPd25Qcm9wZXJ0eSgnPCcpKSB7XHJcbiAgICAgICAgICBlbGUucmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0LmZpbHRlcnMuZW5kRGF0ZVRpbWVbJzwnXSA9IHRoaXMuZ2V0Q3VycmVudFRpbWVJblVUQ1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNhbXVoaWtDaGFyY2hhU3ZjLmdldFNlYXJjaFY2UmVzdWx0cyhlbGUucmVxdWVzdC5zZWFyY2hWNikuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMucmVzdWx0ICYmIHJlcy5yZXN1bHQuY291bnQgJiYgcmVzLnJlc3VsdD8uRXZlbnQgJiYgcmVzLnJlc3VsdC5FdmVudD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGV2ZSA9IDA7IGV2ZSA8IHJlcy5yZXN1bHQuRXZlbnQ/Lmxlbmd0aDsgZXZlKyspIHtcclxuICAgICAgICAgICAgICBpZiAocmVzLnJlc3VsdC5FdmVudFtldmVdWydjcmVhdGVkRm9yJ10gJiYgcmVzLnJlc3VsdC5FdmVudFtldmVdWydjcmVhdGVkRm9yJ10ubGVuZ3RoICYmXHJcbiAgICAgICAgICAgICAgICByZXMucmVzdWx0LkV2ZW50W2V2ZV1bJ3Jlc291cmNlVHlwZSddID09PSAnU2FtdWhpayBDaGFyY2hhJ1xyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgIGV2ZW50c0RhdGEucHVzaChyZXMucmVzdWx0LkV2ZW50W2V2ZV1bJ2NyZWF0ZWRGb3InXVswXSlcclxuICAgICAgICAgICAgICBpZiAoZXZlbnRzRGF0YS5pbmNsdWRlcyh0aGlzLmNvbmZpZ1NlcnZpY2UudXNlclByb2ZpbGU/LnJvb3RPcmdJZCkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlU2FtdWhpa0NoYXJjaGFUYWIgPSB0cnVlXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfSlcclxuXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY29udGVudFJlYWREYXRhICYmIHRoaXMuY29udGVudFJlYWREYXRhLnJlZmVyZW5jZU5vZGVzKSB7XHJcbiAgICAgIHRoaXMuY29udGVudFJlYWREYXRhLnJlZmVyZW5jZU5vZGVzLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgIGxldCB1c2VyUm9sZXM6IFNldDxzdHJpbmc+ID0gdGhpcy5jb25maWdTZXJ2aWNlPy51c2VyUm9sZXMgfHwgbmV3IFNldCgpXHJcbiAgICAgICAgbGV0IGhhc0VkdWNhdG9yUm9sZSA9IGZhbHNlXHJcblxyXG4gICAgICAgIC8vIENoZWNrIGlmIHVzZXIgaGFzIE1FTlRPUiByb2xlXHJcbiAgICAgICAgaWYgKHVzZXJSb2xlcy5oYXMoJ01FTlRPUicpIHx8XHJcbiAgICAgICAgICB1c2VyUm9sZXMuaGFzKCdtZW50b3InKSB8fFxyXG4gICAgICAgICAgdXNlclJvbGVzLmhhcygnTWVudG9yJykpIHtcclxuICAgICAgICAgIGhhc0VkdWNhdG9yUm9sZSA9IHRydWVcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIENoZWNrIGxvY2FsIHN0b3JhZ2UgZm9yIHN1cnZleSByZXNwb25zZSBvbmx5IGlmIFVSTCBjb250YWlucyAncHVibGljJyBvciAncHJldmlldz10cnVlJ1xyXG4gICAgICAgIGlmICghaGFzRWR1Y2F0b3JSb2xlICYmIHRoaXMuZm9yUHJldmlldykge1xyXG4gICAgICAgICAgY29uc3Qgc3VydmV5SWQgPSB0aGlzLmVudmlyb25tZW50LnB1YmxpY0NvbnRlbnRTdXJ2ZXlJZCB8fCAnJ1xyXG4gICAgICAgICAgY29uc3QgY291cnNlSWQgPSB0aGlzLmNvbnRlbnRSZWFkRGF0YT8uaWRlbnRpZmllciB8fCAnJ1xyXG4gICAgICAgICAgY29uc3Qgc3RvcmFnZUtleSA9IGBzdXJ2ZXlfJHtzdXJ2ZXlJZH1fJHtjb3Vyc2VJZH1gXHJcbiAgICAgICAgICBjb25zdCBzdG9yZWREYXRhID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oc3RvcmFnZUtleSlcclxuXHJcbiAgICAgICAgICBpZiAoc3RvcmVkRGF0YSkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHN1cnZleVJlc3BvbnNlcyA9IEpTT04ucGFyc2Uoc3RvcmVkRGF0YSlcclxuICAgICAgICAgICAgICBjb25zdCBlZHVjYXRvclF1ZXN0aW9uID0gc3VydmV5UmVzcG9uc2VzLmZpbmQoKHJlc3BvbnNlOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICByZXNwb25zZS5xdWVzdGlvbiA9PT0gJ0FyZSB5b3UgYW4gRWR1Y2F0b3IvRmFjdWx0eSBtZW1iZXI/J1xyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICBpZiAoZWR1Y2F0b3JRdWVzdGlvbiAmJiBlZHVjYXRvclF1ZXN0aW9uLmFuc3dlciA9PT0gJ1llcycpIHtcclxuICAgICAgICAgICAgICAgIGhhc0VkdWNhdG9yUm9sZSA9IHRydWVcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcGFyc2luZyBzdXJ2ZXkgZGF0YSBmcm9tIGxvY2FsIHN0b3JhZ2U6JywgZXJyb3IpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFNldCB0ZWFjaGVyTm90ZXNGbGFnIGlmIHVzZXIgaGFzIGVkdWNhdG9yIHJvbGVcclxuICAgICAgICBpZiAoaGFzRWR1Y2F0b3JSb2xlKSB7XHJcbiAgICAgICAgICBpZiAoaXRlbSAmJiBpdGVtLnJlc291cmNlQ2F0ZWdvcnkgJiYgaXRlbS5yZXNvdXJjZUNhdGVnb3J5ID09PSAnVGVhY2hlcnMgUmVzb3VyY2UnKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGVhY2hlck5vdGVzRmxhZyA9IHRydWVcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpdGVtICYmIGl0ZW0ucmVzb3VyY2VDYXRlZ29yeSAmJiBpdGVtLnJlc291cmNlQ2F0ZWdvcnkgPT09ICdSZWZlcmVuY2UgUmVzb3VyY2UnKSB7XHJcbiAgICAgICAgICB0aGlzLnJlZmVyZW5jZU5vdGVzRmxhZyA9IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zaWRlTmF2QmFyT3BlbmVkKSB7XHJcbiAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDE0ODApIHtcclxuICAgICAgICBpZiAodGhpcy5pc01vYmlsZUZvckFJKSB7XHJcbiAgICAgICAgICB0aGlzLmlzTW9iaWxlRm9yQUkgPSBmYWxzZVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmlzTW9iaWxlRm9yQUkgPSBmYWxzZVxyXG4gICAgICB9XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDwgMTQ4MCkge1xyXG4gICAgICAgIHRoaXMuaXNNb2JpbGVGb3JBSSA9IHRydWVcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmlzTW9iaWxlRm9yQUkgPSBmYWxzZVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnNjcm9sbCcsIFsnJGV2ZW50J10pXHJcbiAgaGFuZGxlU2Nyb2xsKCkge1xyXG4gICAgY29uc3Qgd2luZG93U2Nyb2xsID0gd2luZG93LnNjcm9sbFlcclxuICAgIGlmICh3aW5kb3dTY3JvbGwgPj0gKHRoaXMubWVudVBvc2l0aW9uIC0gKCh0aGlzLmlzTW9iaWxlKSA/IDk2IDogMTA0KSkpIHtcclxuICAgICAgdGhpcy5zdGlja3kgPSB0cnVlXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnN0aWNreSA9IGZhbHNlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVUYWJDaGFuZ2UoZXZlbnQ6IE1hdFRhYkNoYW5nZUV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLnRhYkNoYW5nZVZhbHVlID0gZXZlbnQudGFiXHJcbiAgICB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPSBldmVudC5pbmRleFxyXG4gICAgdGhpcy5sb2FkQ2hlY2tTZXJ2aWNlLmNvbXBvbmVudExvYWRlZCh0cnVlKVxyXG4gICAgLy8gY29uc29sZS5sb2coJ2V2ZW50JywgZXZlbnQpXHJcbiAgICAvLyBjb25zb2xlLmxvZygndGhpcy5jb250ZW50JywgdGhpcy52aWV3ZXJEYXRhU3ZjPy5yZXNvdXJjZUlkKVxyXG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LnRhYi50ZXh0TGFiZWwgPT09ICdBSSBUdXRvcicpIHtcclxuICAgICAgdGhpcy5zaG93QUlUdXRvclBvcHVwID0gdHJ1ZVxyXG4gICAgfVxyXG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50LmluZGV4ID09PSAwICYmIGV2ZW50LnRhYi50ZXh0TGFiZWwgPT09ICdUcmFuc2NyaXB0aW9uJykge1xyXG4gICAgICB0aGlzLnJhaXNlVHJhbnNjcmlwdGlvblRhYlN0YXJ0VGVsZW1ldHJ5KClcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yYWlzZVRyYW5zY3JpcHRpb25UYWJJbnRlcmFjdFRlbGVtZXRyeSgpXHJcbiAgICAgIH0sIDEwMDApXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJhaXNlVHJhbnNjcmlwdGlvblRhYlN0b3BUZWxlbWV0cnkoKVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHNob3dBaVR1dG9yQ29uZmlybVBvcHVwKCkge1xyXG4gICAgdGhpcy5yYWlzZUFJUG9wdXBTdGFydFRlbGVtZXRyeSgpXHJcbiAgICBpZiAodGhpcy5pc0Vucm9sbGVkKSB7XHJcbiAgICAgIHRoaXMuZnJvbUFJVHV0b3IgPSB0cnVlXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucmFpc2VBSVBvcHVwSW50ZXJhY3RUZWxlbWV0cnkoKVxyXG4gICAgICB9LCAxMDAwKVxyXG5cclxuXHJcbiAgICAgIHRoaXMuZ2VuZXJhdGVSZXN1bWVEYXRhTGlua05ldygpXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucmFpc2VBSVBvcHVwRW5kVGVsZW1ldHJ5KClcclxuICAgICAgfSwgMTAwMClcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucmFpc2VBSVBvcHVwSW50ZXJhY3RUZWxlbWV0cnkoKVxyXG4gICAgICB9LCAxMDAwKVxyXG4gICAgICBjb25zdCBkaWFsb2dDb25maWcgPSBuZXcgTWF0RGlhbG9nQ29uZmlnKClcclxuXHJcbiAgICAgIGRpYWxvZ0NvbmZpZy53aWR0aCA9ICc0MjFweCdcclxuICAgICAgZGlhbG9nQ29uZmlnLmRhdGEgPSB7XHJcbiAgICAgICAgZW5yb2xsOiB0aGlzLmlzRW5yb2xsZWRcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKEFpVHV0b3JDb25maXJtUG9wdXBDb21wb25lbnQsIGRpYWxvZ0NvbmZpZylcclxuXHJcbiAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG5cclxuICAgICAgICBpZiAocmVzcG9uc2UgPT09ICdlbnJvbGwnKSB7XHJcbiAgICAgICAgICB0aGlzLmZyb21BSVR1dG9yID0gdHJ1ZVxyXG4gICAgICAgICAgdGhpcy5nZW5lcmF0ZVJlc3VtZURhdGFMaW5rTmV3KClcclxuICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlID09PSAnbmVlZFRvRW5yb2xsJykge1xyXG4gICAgICAgICAgdGhpcy5lbnJvbGxVc2VyRm9yQUlUdXRvcigpXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmFpc2VBSVBvcHVwRW5kVGVsZW1ldHJ5KClcclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZVJlc3VtZURhdGFMaW5rTmV3KCkge1xyXG4gICAgaWYgKHRoaXMucmVzdW1lRGF0YSAmJiB0aGlzLmNvbnRlbnQpIHtcclxuICAgICAgbGV0IHJlc3VtZURhdGFWMjogYW55XHJcbiAgICAgIGlmICh0aGlzLmNvbnRlbnQuY29tcGxldGlvblBlcmNlbnRhZ2UgPT09IDEwMCkge1xyXG4gICAgICAgIHJlc3VtZURhdGFWMiA9IHRoaXMuZ2V0UmVzdW1lRGF0YUZyb21MaXN0KCdzdGFydCcpXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVzdW1lRGF0YVYyID0gdGhpcy5nZXRSZXN1bWVEYXRhRnJvbUxpc3QoKVxyXG4gICAgICB9XHJcbiAgICAgIGlmICghcmVzdW1lRGF0YVYyLm1pbWVUeXBlKSB7XHJcbiAgICAgICAgcmVzdW1lRGF0YVYyLm1pbWVUeXBlID0gdGhpcy50b2NTdmMuZ2V0TWltZVR5cGUodGhpcy5jb250ZW50LCByZXN1bWVEYXRhVjIuaWRlbnRpZmllcilcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnJlc3VtZURhdGFMaW5rID0gdmlld2VyUm91dGVHZW5lcmF0b3IoXHJcbiAgICAgICAgcmVzdW1lRGF0YVYyLmlkZW50aWZpZXIsXHJcbiAgICAgICAgcmVzdW1lRGF0YVYyLm1pbWVUeXBlLFxyXG4gICAgICAgIHRoaXMuY29udGVudC5pZGVudGlmaWVyLFxyXG4gICAgICAgIHRoaXMuY29udGVudC5jb250ZW50VHlwZSxcclxuICAgICAgICB0aGlzLmZvclByZXZpZXcsXHJcbiAgICAgICAgJ0xlYXJuaW5nIFJlc291cmNlJyxcclxuICAgICAgICB0aGlzLmdldEJhdGNoSWQoKSxcclxuICAgICAgICB0aGlzLmNvbnRlbnQubmFtZSxcclxuICAgICAgKVxyXG4gICAgICB0aGlzLmFjdGlvblNWQy5zZXRVcGRhdGVDb21wR3JvdXBPID0gdGhpcy5yZXN1bWVEYXRhTGlua1xyXG4gICAgICAvLyBjb25zb2xlLmxvZygndGhpcy5yZXN1bWVEYXRhTGluaycsdGhpcy5yZXN1bWVEYXRhTGluaylcclxuICAgICAgLy8gY29uc29sZS5sb2coJ3RoaXMuYWN0aW9uU1ZDJywgdGhpcy5hY3Rpb25TVkMpXHJcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLnJlc3VtZURhdGFMaW5rLnVybF0sIHtcclxuICAgICAgICBxdWVyeVBhcmFtczoge1xyXG4gICAgICAgICAgLi4udGhpcy5yZXN1bWVEYXRhTGluay5xdWVyeVBhcmFtcyxcclxuICAgICAgICAgIGZyb21BSVR1dG9yOiB0aGlzLmZyb21BSVR1dG9yXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAvLyB0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKFxyXG4gICAgICAvLyAgIFt0aGlzLnJlc3VtZURhdGFMaW5rLnVybF0sXHJcbiAgICAgIC8vICAge1xyXG4gICAgICAvLyAgICAgcmVsYXRpdmVUbzogdGhpcy5yZXN1bWVEYXRhTGluay51cmwsXHJcbiAgICAgIC8vICAgICBxdWVyeVBhcmFtczogdGhpcy5yZXN1bWVEYXRhTGluay5xdWVyeVBhcmFtcyxcclxuICAgICAgLy8gICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZScsXHJcbiAgICAgIC8vICAgfSlcclxuICAgICAgLyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lICovXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBsYXlSZXN1bWVGb3JBSS5lbWl0KClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UmVzdW1lRGF0YUZyb21MaXN0KHR5cGU/OiBzdHJpbmcpOiBhbnkgfCB2b2lkIHtcclxuICAgIGNvbnN0IHJlc3VtZUNvcHkgPSBbLi4udGhpcy5yZXN1bWVEYXRhXVxyXG4gICAgaWYgKCF0eXBlKSB7XHJcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTptYXgtbGluZS1sZW5ndGhcclxuXHJcbiAgICAgIGNvbnN0IGxhc3RJdGVtID0gcmVzdW1lQ29weSAmJiByZXN1bWVDb3B5LnNvcnQoKGE6IGFueSwgYjogYW55KSA9PlxyXG4gICAgICAgIG5ldyBEYXRlKGIubGFzdEFjY2Vzc1RpbWUpLmdldFRpbWUoKSAtIG5ldyBEYXRlKGEubGFzdEFjY2Vzc1RpbWUpLmdldFRpbWUoKSkuc2hpZnQoKVxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGlkZW50aWZpZXI6IGxhc3RJdGVtLmNvbnRlbnRJZCxcclxuICAgICAgICBtaW1lVHlwZTogbGFzdEl0ZW0ucHJvZ3Jlc3NkZXRhaWxzICYmIGxhc3RJdGVtLnByb2dyZXNzZGV0YWlscy5taW1lVHlwZSxcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgZmlyc3RJdGVtID0gcmVzdW1lQ29weSAmJiByZXN1bWVDb3B5Lmxlbmd0aCAmJiByZXN1bWVDb3B5WzBdXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBpZGVudGlmaWVyOiBmaXJzdEl0ZW0uY29udGVudElkLFxyXG4gICAgICBtaW1lVHlwZTogZmlyc3RJdGVtLnByb2dyZXNzZGV0YWlscyAmJiBmaXJzdEl0ZW0ucHJvZ3Jlc3NkZXRhaWxzLm1pbWVUeXBlLFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEJhdGNoSWQoKTogc3RyaW5nIHtcclxuICAgIGxldCBiYXRjaElkID0gJydcclxuICAgIGlmICh0aGlzLmJhdGNoRGF0YSAmJiB0aGlzLmJhdGNoRGF0YS5jb250ZW50KSB7XHJcbiAgICAgIGZvciAoY29uc3QgYmF0Y2ggb2YgdGhpcy5iYXRjaERhdGEuY29udGVudCkge1xyXG4gICAgICAgIGJhdGNoSWQgPSBiYXRjaC5iYXRjaElkXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBiYXRjaElkXHJcbiAgfVxyXG5cclxuICByYWlzZUFJUG9wdXBTdGFydFRlbGVtZXRyeSgpIHtcclxuICAgIGNvbnN0IGV2ZW50ID0ge1xyXG4gICAgICBldmVudFR5cGU6IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeSxcclxuICAgICAgZXZlbnRMb2dMZXZlbDogV3NFdmVudHMuV3NFdmVudExvZ0xldmVsLkluZm8sXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBlZGF0YTogeyB0eXBlOiAnY2xpY2snLCBcImlkXCI6IFwiYWktdHV0b3ItdG9jLXBhZ2VcIiwgXCJwYWdlaWRcIjogYC9hcHAvdG9jLyR7dGhpcy5jb250ZW50Py5pZGVudGlmaWVyfWAgfSxcclxuICAgICAgICBvYmplY3Q6IHsgXCJpZFwiOiB0aGlzLmNvbnRlbnQ/LmlkZW50aWZpZXIsIFwidHlwZVwiOiB0aGlzLmNvbnRlbnQ/LmNvdXJzZUNhdGVnb3J5IH0sXHJcbiAgICAgICAgc3RhdGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkxvYWRlZCxcclxuICAgICAgICBldmVudFN1YlR5cGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkNoYXRib3QsXHJcbiAgICAgICAgbW9kZTogJ3ZpZXcnLFxyXG4gICAgICB9LFxyXG4gICAgICBwYWdlQ29udGV4dDogeyBwYWdlSWQ6ICcvYXBwL3RvYycsIG1vZHVsZTogJ0xlYXJuJyB9LFxyXG4gICAgICBmcm9tOiAnJyxcclxuICAgICAgdG86ICdUZWxlbWV0cnknLFxyXG4gICAgfVxyXG4gICAgdGhpcy5ldmVudFN2Yy5kaXNwYXRjaENoYXRib3RFdmVudDxXc0V2ZW50cy5JV3NFdmVudFRlbGVtZXRyeUludGVyYWN0PihldmVudClcclxuICB9XHJcblxyXG4gIHJhaXNlQUlQb3B1cEVuZFRlbGVtZXRyeSgpIHtcclxuICAgIGNvbnN0IGV2ZW50ID0ge1xyXG4gICAgICBldmVudFR5cGU6IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeSxcclxuICAgICAgZXZlbnRMb2dMZXZlbDogV3NFdmVudHMuV3NFdmVudExvZ0xldmVsLkluZm8sXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBlZGF0YTogeyB0eXBlOiAnY2xpY2snLCBcImlkXCI6IFwiYWktdHV0b3ItdG9jLXBhZ2VcIiwgXCJwYWdlaWRcIjogYC9hcHAvdG9jLyR7dGhpcy5jb250ZW50Py5pZGVudGlmaWVyfWAgfSxcclxuICAgICAgICBvYmplY3Q6IHsgXCJpZFwiOiB0aGlzLmNvbnRlbnQ/LmlkZW50aWZpZXIsIFwidHlwZVwiOiB0aGlzLmNvbnRlbnQ/LmNvdXJzZUNhdGVnb3J5IH0sXHJcbiAgICAgICAgc3RhdGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLlVubG9hZGVkLFxyXG4gICAgICAgIGV2ZW50U3ViVHlwZTogV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuQ2hhdGJvdCxcclxuICAgICAgICBtb2RlOiAndmlldycsXHJcbiAgICAgIH0sXHJcbiAgICAgIHBhZ2VDb250ZXh0OiB7IHBhZ2VJZDogJy9hcHAvdG9jJywgbW9kdWxlOiAnTGVhcm4nIH0sXHJcbiAgICAgIGZyb206ICcnLFxyXG4gICAgICB0bzogJ1RlbGVtZXRyeScsXHJcbiAgICB9XHJcbiAgICB0aGlzLmV2ZW50U3ZjLmRpc3BhdGNoQ2hhdGJvdEV2ZW50PFdzRXZlbnRzLklXc0V2ZW50VGVsZW1ldHJ5SW50ZXJhY3Q+KGV2ZW50KVxyXG4gIH1cclxuXHJcbiAgcmFpc2VBSVBvcHVwSW50ZXJhY3RUZWxlbWV0cnkoKSB7XHJcbiAgICBjb25zdCBldmVudCA9IHtcclxuICAgICAgZXZlbnRUeXBlOiBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnksXHJcbiAgICAgIGV2ZW50TG9nTGV2ZWw6IFdzRXZlbnRzLldzRXZlbnRMb2dMZXZlbC5JbmZvLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgZWRhdGE6IHsgdHlwZTogJ2NsaWNrJywgXCJpZFwiOiBcImFpLXR1dG9yLXRvYy1wYWdlXCIsIFwicGFnZWlkXCI6IGAvYXBwL3RvYy8ke3RoaXMuY29udGVudD8uaWRlbnRpZmllcn1gIH0sXHJcbiAgICAgICAgb2JqZWN0OiB7IFwiaWRcIjogdGhpcy5jb250ZW50Py5pZGVudGlmaWVyLCBcInR5cGVcIjogdGhpcy5jb250ZW50Py5jb3Vyc2VDYXRlZ29yeSB9LFxyXG4gICAgICAgIHN0YXRlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5JbnRlcmFjdCxcclxuICAgICAgICBldmVudFN1YlR5cGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkNoYXRib3QsXHJcbiAgICAgICAgbW9kZTogJ3ZpZXcnLFxyXG4gICAgICB9LFxyXG4gICAgICBwYWdlQ29udGV4dDogeyBwYWdlSWQ6ICcvYXBwL3RvYycsIG1vZHVsZTogJ0xlYXJuJyB9LFxyXG4gICAgICBmcm9tOiAnJyxcclxuICAgICAgdG86ICdUZWxlbWV0cnknLFxyXG4gICAgfVxyXG4gICAgdGhpcy5ldmVudFN2Yy5kaXNwYXRjaENoYXRib3RFdmVudDxXc0V2ZW50cy5JV3NFdmVudFRlbGVtZXRyeUludGVyYWN0PihldmVudClcclxuICB9XHJcblxyXG4gIGVucm9sbFVzZXJGb3JBSVR1dG9yKCkge1xyXG4gICAgdGhpcy5lbnJvbGxVc2VyVG9BSS5lbWl0KClcclxuICB9XHJcblxyXG4gIGFzeW5jIHBhcnNlVlRUKCkge1xyXG4gICAgbGV0IGlkZW50aWZpZXIgPSB0aGlzLnJlc291cmNlSWRlbnRpZmllclxyXG4gICAgLy8gY29uc29sZS5sb2coJ2lkZW50aWZpZXItLScsIGlkZW50aWZpZXIpXHJcbiAgICBhd2FpdCB0aGlzLnRvY1N2Yy5haUdldFJlc291cmNlVnR0RmlsZShpZGVudGlmaWVyKS5zdWJzY3JpYmUoYXN5bmMgKGRhdGFzOiBhbnkpID0+IHtcclxuICAgICAgbGV0IGRhdGE6IGFueSA9IGRhdGFzPy5kYXRhXHJcbiAgICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoICYmIGRhdGFbMF1bJ3RyYW5zY3JpcHRpb25fdXJscyddICYmIGRhdGFbMF1bJ3RyYW5zY3JpcHRpb25fdXJscyddLmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMudnR0TGFuZ0FyciA9IGRhdGFbMF1bJ3RyYW5zY3JpcHRpb25fdXJscyddXHJcblxyXG4gICAgICAgIHRoaXMuZW5hYmxlVHJhbnNjcmlwdGlvbkZsYWcgPSB0cnVlXHJcbiAgICAgICAgLy8gbGV0IHVybCA9ICBkYXRhWzBdWyd0cmFuc2NyaXB0aW9uX3VybHMnXVswXVsndXJpJ11cclxuICAgICAgICAvLyAgY29uc29sZS5sb2coJ3RoaXMudnR0TGFuZ0Fyci0tJyx0aGlzLnZ0dExhbmdBcnIpXHJcbiAgICAgICAgdGhpcy50cmFuc2NyaXB0aW9uQWN0aXZlTGFuZ3VhZ2UgPSB0aGlzLnZ0dExhbmdBcnIgJiYgdGhpcy52dHRMYW5nQXJyLmxlbmd0aCAmJiB0aGlzLnZ0dExhbmdBcnJbMF0gJiYgdGhpcy52dHRMYW5nQXJyWzBdWydkZWZhdWx0X2xhbmcnXSA/ICdlbicgOiAnZW4nXHJcbiAgICAgICAgdGhpcy5kZWZhdWx0VHJhbnNjcmlwdExhbmd1YWdlID0gdGhpcy52dHRMYW5nQXJyICYmIHRoaXMudnR0TGFuZ0Fyci5sZW5ndGggJiYgdGhpcy52dHRMYW5nQXJyWzBdICYmIHRoaXMudnR0TGFuZ0FyclswXVsnZGVmYXVsdF9sYW5nJ10gPyAnZW4nIDogJ2VuJ1xyXG4gICAgICAgIC8vICBjb25zb2xlLmxvZygndGhpcy50cmFuc2NyaXB0aW9uQWN0aXZlTGFuZ3VhZ2UtLScsIHRoaXMudHJhbnNjcmlwdGlvbkFjdGl2ZUxhbmd1YWdlKVxyXG4gICAgICAgIGxldCBzZWxlY3RlZFRyYW5zY3JpcHRpb25TdHlsZSA9IHRoaXMudnR0TGFuZ0Fyci5maWx0ZXIoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGl0ZW0/LmxhYmVsID09PSB0aGlzLnRyYW5zY3JpcHRpb25BY3RpdmVMYW5ndWFnZVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgaWYgKHNlbGVjdGVkVHJhbnNjcmlwdGlvblN0eWxlICYmIHNlbGVjdGVkVHJhbnNjcmlwdGlvblN0eWxlLmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRyYW5zY3JpcHRpb25TdHlsZSA9IHNlbGVjdGVkVHJhbnNjcmlwdGlvblN0eWxlWzBdXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRUcmFuc2NyaXB0aW9uU3R5bGUgPSB0aGlzLnZ0dExhbmdBcnJbMF1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3RoaXMuc2VsZWN0ZWRUcmFuc2NyaXB0aW9uU3R5bGUtLScsIHRoaXMuc2VsZWN0ZWRUcmFuc2NyaXB0aW9uU3R5bGUpXHJcbiAgICAgICAgY29uc3QgZmlsdGVyZWRBcnIgPSB0aGlzLnZ0dExhbmdBcnIuZmlsdGVyKFxyXG4gICAgICAgICAgKGl0ZW06IGFueSkgPT4gaXRlbS5sYWJlbCA9PT0gdGhpcy50cmFuc2NyaXB0aW9uQWN0aXZlTGFuZ3VhZ2VcclxuICAgICAgICApXHJcbiAgICAgICAgbGV0IHVybCA9IGZpbHRlcmVkQXJyLmxlbmd0aCA+IDAgPyBmaWx0ZXJlZEFyclswXS51cmkgOiBudWxsXHJcbiAgICAgICAgLy9sZXQgdXJsID0gdGhpcy52dHRMYW5nQXJyLmZpbHRlcigoaXRlbTogYW55KSA9PiBpdGVtLmxhYmVsID09PSB0aGlzLnRyYW5zY3JpcHRpb25BY3RpdmVMYW5ndWFnZSlbMF1bJ3VyaSddXHJcbiAgICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgICAgY29uc3QgZmlsZSA9IGF3YWl0IFZ0dEZpbGUuZnJvbVVybCh1cmwpXHJcbiAgICAgICAgICBsZXQgYmxvY2tzOiBhbnkgPSBmaWxlLmdldEJsb2NrcygpXHJcblxyXG4gICAgICAgICAgdGhpcy5zdWJUaXRsZXMgPSBibG9ja3NcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ3RoaXMudnR0TGFuZ0Fyci0tJyx0aGlzLnZ0dExhbmdBcnIpXHJcbiAgICAgICAgLy8gaWYodGhpcy52dHRMYW5nQXJyICYmIHRoaXMudnR0TGFuZ0Fyci5sZW5ndGgpIHtcclxuICAgICAgICAvLyAgIHRoaXMudHJhbnNjcmlwdGlvbkFjdGl2ZUxhbmd1YWdlID0gdGhpcy52dHRMYW5nQXJyWzBdWydsYWJlbCddXHJcbiAgICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgICAvLyAgIHRoaXMudHJhbnNjcmlwdGlvbkFjdGl2ZUxhbmd1YWdlICA9IHRoaXMudnR0TGFuZ0FyclswXVsnZGVmYXVsdF9sYW5nJ11cclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgdGhpcy50b2NTdmMuY2hhbmdlVHJhbnNjcmlwdGlvbkxhbmd1YWdlRXZlbnQubmV4dCh7IGFjdGl2ZUxhbmc6IHRoaXMudHJhbnNjcmlwdGlvbkFjdGl2ZUxhbmd1YWdlLCBsYW5nRGF0YTogdGhpcy52dHRMYW5nQXJyLCBsb2FkUGxheWVyOiB0cnVlIH0pXHJcblxyXG5cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnZ0dExhbmdBcnIgPSBbXVxyXG4gICAgICAgIHRoaXMuZW5hYmxlVHJhbnNjcmlwdGlvbkZsYWcgPSBmYWxzZVxyXG4gICAgICB9XHJcblxyXG4gICAgfSlcclxuXHJcbiAgfVxyXG5cclxuICBhc3luYyByZW5kZXJTZWxlY3RlZExhbmd1YWdlVHJhbnNjcmlwdGlvbihfbGFuZ3ZhbHVlOiBhbnkpIHtcclxuICAgIC8vIHRoaXMudHJhbnNjcmlwdGlvbkFjdGl2ZUxhbmd1YWdlID0gdGhpcy5zZWxlY3RlZFRyYW5zY3JpcHRpb25TdHlsZT8ubGFiZWxcclxuICAgIGlmICh0eXBlb2YgX2xhbmd2YWx1ZSA9PT0gJ3N0cmluZycgJiYgX2xhbmd2YWx1ZSkge1xyXG4gICAgICB0aGlzLnRyYW5zY3JpcHRpb25BY3RpdmVMYW5ndWFnZSA9IF9sYW5ndmFsdWVcclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVHJhbnNjcmlwdGlvblN0eWxlID0gX2xhbmd2YWx1ZT8udmFsdWVcclxuICAgICAgdGhpcy50cmFuc2NyaXB0aW9uQWN0aXZlTGFuZ3VhZ2UgPSB0aGlzLnNlbGVjdGVkVHJhbnNjcmlwdGlvblN0eWxlPy5sYWJlbFxyXG4gICAgICB0aGlzLnRyYW5zY3JpcHRBY3RpdmVMYW5ndWFnZVRleHQgPSBfbGFuZ3ZhbHVlPy52YWx1ZT8ubGFuZ3VhZ2VcclxuICAgIH1cclxuICAgIHRoaXMucmFpc2VUcmFuc2NyaXB0aW9uTGFuZ3VhZ2VTdGFydFRlbGVtZXRyeSgpXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5yYWlzZVRyYW5zY3JpcHRpb25MYW5ndWFnZUludGVyYWN0VGVsZW1ldHJ5KClcclxuICAgIH0pXHJcbiAgICBsZXQgY3VycmVudFBhdGggPSB0aGlzLnZ0dExhbmdBcnIuZmlsdGVyKChpdGVtOiBhbnkpID0+IGl0ZW0/LmxhYmVsID09PSB0aGlzLnRyYW5zY3JpcHRpb25BY3RpdmVMYW5ndWFnZSlcclxuICAgIGlmIChjdXJyZW50UGF0aCAmJiBjdXJyZW50UGF0aC5sZW5ndGgpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRyYW5zY3JpcHRpb25TdHlsZSA9IGN1cnJlbnRQYXRoWzBdXHJcbiAgICB9XHJcbiAgICBjb25zdCBmaWxlID0gYXdhaXQgVnR0RmlsZS5mcm9tVXJsKGN1cnJlbnRQYXRoICYmIGN1cnJlbnRQYXRoWzBdPy51cmkpXHJcbiAgICBsZXQgYmxvY2tzOiBhbnkgPSBmaWxlLmdldEJsb2NrcygpXHJcbiAgICB0aGlzLnN1YlRpdGxlcyA9IGJsb2Nrc1xyXG4gICAgdGhpcy5yYWlzZVRyYW5zY3JpcHRpb25MYW5ndWFnZVN0b3BUZWxlbWV0cnkoKVxyXG4gICAgLy8gdGhpcy50b2NTdmMuY2hhbmdlVHJhbnNjcmlwdGlvbkxhbmd1YWdlRXZlbnQubmV4dCh7YWN0aXZlTGFuZzogdGhpcy50cmFuc2NyaXB0aW9uQWN0aXZlTGFuZ3VhZ2UsIGxhbmdEYXRhOiB0aGlzLnZ0dExhbmdBcnIsIGxvYWRQbGF5ZXI6ZmFsc2V9KVxyXG5cclxuICB9XHJcblxyXG4gIG9wZW5TdXJ2ZXlGb3JtUG9wdXAoZXZlbnQ6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMudHJpZ2VyQ29tcGxldGlvblN1cnZleUZvcm0uZW1pdChldmVudClcclxuICB9XHJcblxyXG4gIHBsYXlGcm9tU2xvdChzdWJ0aXRsZTogYW55KSB7XHJcbiAgICBpZiAoc3VidGl0bGUpIHtcclxuICAgICAgbGV0IHN0YXJ0VGltZSA9IHN1YnRpdGxlLnN0YXJ0VGltZSAvIDEwMDBcclxuICAgICAgbGV0IGVuZFRpbWUgPSBzdWJ0aXRsZS5lbmRUaW1lIC8gMTAwMFxyXG4gICAgICB0aGlzLnRvY1N2Yy5wbGF5VHJhbnNjcmlwdGlvblZpZGVvLm5leHQoeyBzdGFydFRpbWUsIGVuZFRpbWUgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZvcm1hdE1zVG9WdHRUaW1lKG1zOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgdG90YWxTZWNvbmRzID0gTWF0aC5mbG9vcihtcyAvIDEwMDApXHJcbiAgICAvLyAgY29uc3QgbWlsbGlzZWNvbmRzID0gbXMgJSAxMDAwO1xyXG4gICAgY29uc3QgaG91cnMgPSBNYXRoLmZsb29yKHRvdGFsU2Vjb25kcyAvIDM2MDApXHJcbiAgICBjb25zdCBtaW51dGVzID0gTWF0aC5mbG9vcigodG90YWxTZWNvbmRzICUgMzYwMCkgLyA2MClcclxuICAgIGNvbnN0IHNlY29uZHMgPSB0b3RhbFNlY29uZHMgJSA2MFxyXG5cclxuICAgIGNvbnN0IHBhZCA9IChudW06IG51bWJlciwgc2l6ZTogbnVtYmVyKSA9PiBudW0udG9TdHJpbmcoKS5wYWRTdGFydChzaXplLCAnMCcpXHJcblxyXG4gICAgLy8gcmV0dXJuIGAke3BhZChob3VycywgMil9OiR7cGFkKG1pbnV0ZXMsIDIpfToke3BhZChzZWNvbmRzLCAyKX0uJHtwYWQobWlsbGlzZWNvbmRzLCAzKX1gO1xyXG4gICAgcmV0dXJuIGAke3BhZChob3VycywgMil9OiR7cGFkKG1pbnV0ZXMsIDIpfToke3BhZChzZWNvbmRzLCAyKX1gXHJcbiAgfVxyXG5cclxuICBvbmx5c2Nvcm1Bc3Nlc3NtZW50RXhpc3RzKGRhdGE6IGFueSwga2V5OiBhbnksIHZhbHVlOiBhbnkpIHtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGE/Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChkYXRhW2ldICYmIGRhdGFbaV1bJ2NoaWxkcmVuJ10gJiYgZGF0YVtpXVsnY2hpbGRyZW4nXS5sZW5ndGgpIHtcclxuICAgICAgICAvLyB0aGlzLnRvdGFsUmVzb3VyY2UgPSB0aGlzLnRvdGFsUmVzb3VyY2UgKyAxXHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ2luIGNoaWxkcmVuJylcclxuICAgICAgICB0aGlzLm9ubHlzY29ybUFzc2Vzc21lbnRFeGlzdHMoZGF0YVtpXT8uY2hpbGRyZW4sIGtleSwgdmFsdWUpXHJcbiAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIHRoaXMudG90YWxSZXNvdXJjZSA9IHRoaXMudG90YWxSZXNvdXJjZSArIDFcclxuICAgICAgICBpZiAodmFsdWUuaW5jbHVkZXMoZGF0YVtpXVtrZXldKSkge1xyXG4gICAgICAgICAgLy8gdGhpcy5zaG93QUlUdXRvckZsYWcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuc2Nvcm1Bc3Nlc3NtZW50Q291bnQgPSB0aGlzLnNjb3JtQXNzZXNzbWVudENvdW50ICsgMVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnRvdGFsUmVzb3VyY2UgPT09IHRoaXMuc2Nvcm1Bc3Nlc3NtZW50Q291bnQpIHtcclxuICAgICAgdGhpcy5lbmFibGVBSVR1dG9yRmxhZyA9IGZhbHNlXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmVuYWJsZUFJVHV0b3JGbGFnID0gdHJ1ZVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuZW5hYmxlQUlUdXRvckZsYWdcclxuICB9XHJcblxyXG4gIHJhaXNlVHJhbnNjcmlwdGlvblRhYlN0YXJ0VGVsZW1ldHJ5KCkge1xyXG4gICAgY29uc3QgZXZlbnQgPSB7XHJcbiAgICAgIGV2ZW50VHlwZTogV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5LFxyXG4gICAgICBldmVudExvZ0xldmVsOiBXc0V2ZW50cy5Xc0V2ZW50TG9nTGV2ZWwuSW5mbyxcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIGVkYXRhOiB7IHR5cGU6ICdjbGljaycsIFwiaWRcIjogXCJhaS10dXRvci12aWV3ZXItcGFnZVwiLCBcInBhZ2VpZFwiOiBgL3ZpZXdlci92aWRlby8ke3RoaXMudmlld2VyRGF0YVN2Yz8ucmVzb3VyY2VJZH1gLCBzdWJUeXBlOiAndHJhbnNjcmlwdC10YWInIH0sXHJcbiAgICAgICAgb2JqZWN0OiB7IFwiaWRcIjogdGhpcy5jb250ZW50Py5pZGVudGlmaWVyLCBcInR5cGVcIjogdGhpcy5jb250ZW50Py5jb3Vyc2VDYXRlZ29yeSB9LFxyXG4gICAgICAgIHN0YXRlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5Mb2FkZWQsXHJcbiAgICAgICAgZXZlbnRTdWJUeXBlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5DaGF0Ym90LFxyXG4gICAgICAgIG1vZGU6ICd2aWV3JyxcclxuICAgICAgfSxcclxuICAgICAgcGFnZUNvbnRleHQ6IHsgcGFnZUlkOiBgL3ZpZXdlci92aWRlby8ke3RoaXMudmlld2VyRGF0YVN2Yz8ucmVzb3VyY2VJZH1gLCBtb2R1bGU6ICdMZWFybicgfSxcclxuICAgICAgZnJvbTogJycsXHJcbiAgICAgIHRvOiAnVGVsZW1ldHJ5JyxcclxuICAgIH1cclxuICAgIHRoaXMuZXZlbnRTdmMuZGlzcGF0Y2hDaGF0Ym90RXZlbnQ8V3NFdmVudHMuSVdzRXZlbnRUZWxlbWV0cnlJbnRlcmFjdD4oZXZlbnQpXHJcbiAgfVxyXG5cclxuICByYWlzZVRyYW5zY3JpcHRpb25UYWJJbnRlcmFjdFRlbGVtZXRyeSgpIHtcclxuICAgIGNvbnN0IGV2ZW50ID0ge1xyXG4gICAgICBldmVudFR5cGU6IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeSxcclxuICAgICAgZXZlbnRMb2dMZXZlbDogV3NFdmVudHMuV3NFdmVudExvZ0xldmVsLkluZm8sXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBlZGF0YTogeyB0eXBlOiAnY2xpY2snLCBcImlkXCI6IFwiYWktdHV0b3Itdmlld2VyLXBhZ2VcIiwgXCJwYWdlaWRcIjogYC92aWV3ZXIvdmlkZW8vJHt0aGlzLnZpZXdlckRhdGFTdmM/LnJlc291cmNlSWR9YCwgc3ViVHlwZTogJ3RyYW5zY3JpcHQtdGFiJyB9LFxyXG4gICAgICAgIG9iamVjdDogeyBcImlkXCI6IHRoaXMuY29udGVudD8uaWRlbnRpZmllciwgXCJ0eXBlXCI6IHRoaXMuY29udGVudD8uY291cnNlQ2F0ZWdvcnkgfSxcclxuICAgICAgICBzdGF0ZTogV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuSW50ZXJhY3QsXHJcbiAgICAgICAgZXZlbnRTdWJUeXBlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5DaGF0Ym90LFxyXG4gICAgICAgIG1vZGU6ICd2aWV3JyxcclxuICAgICAgfSxcclxuICAgICAgcGFnZUNvbnRleHQ6IHsgcGFnZUlkOiBgL3ZpZXdlci92aWRlby8ke3RoaXMudmlld2VyRGF0YVN2Yz8ucmVzb3VyY2VJZH1gLCBtb2R1bGU6ICdMZWFybicgfSxcclxuICAgICAgZnJvbTogJycsXHJcbiAgICAgIHRvOiAnVGVsZW1ldHJ5JyxcclxuICAgIH1cclxuICAgIHRoaXMuZXZlbnRTdmMuZGlzcGF0Y2hDaGF0Ym90RXZlbnQ8V3NFdmVudHMuSVdzRXZlbnRUZWxlbWV0cnlJbnRlcmFjdD4oZXZlbnQpXHJcbiAgfVxyXG5cclxuICByYWlzZVRyYW5zY3JpcHRpb25UYWJTdG9wVGVsZW1ldHJ5KCkge1xyXG4gICAgY29uc3QgZXZlbnQgPSB7XHJcbiAgICAgIGV2ZW50VHlwZTogV3NFdmVudHMuV3NFdmVudFR5cGUuVGVsZW1ldHJ5LFxyXG4gICAgICBldmVudExvZ0xldmVsOiBXc0V2ZW50cy5Xc0V2ZW50TG9nTGV2ZWwuSW5mbyxcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIGVkYXRhOiB7IHR5cGU6ICdjbGljaycsIFwiaWRcIjogXCJhaS10dXRvci12aWV3ZXItcGFnZVwiLCBcInBhZ2VpZFwiOiBgL3ZpZXdlci92aWRlby8ke3RoaXMudmlld2VyRGF0YVN2Yz8ucmVzb3VyY2VJZH1gLCBzdWJUeXBlOiAndHJhbnNjcmlwdC10YWInIH0sXHJcbiAgICAgICAgb2JqZWN0OiB7IFwiaWRcIjogdGhpcy5jb250ZW50Py5pZGVudGlmaWVyLCBcInR5cGVcIjogdGhpcy5jb250ZW50Py5jb3Vyc2VDYXRlZ29yeSB9LFxyXG4gICAgICAgIHN0YXRlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5VbmxvYWRlZCxcclxuICAgICAgICBldmVudFN1YlR5cGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkNoYXRib3QsXHJcbiAgICAgICAgbW9kZTogJ3ZpZXcnLFxyXG4gICAgICB9LFxyXG4gICAgICBwYWdlQ29udGV4dDogeyBwYWdlSWQ6IGAvdmlld2VyL3ZpZGVvLyR7dGhpcy52aWV3ZXJEYXRhU3ZjPy5yZXNvdXJjZUlkfWAsIG1vZHVsZTogJ0xlYXJuJyB9LFxyXG4gICAgICBmcm9tOiAnJyxcclxuICAgICAgdG86ICdUZWxlbWV0cnknLFxyXG4gICAgfVxyXG4gICAgdGhpcy5ldmVudFN2Yy5kaXNwYXRjaENoYXRib3RFdmVudDxXc0V2ZW50cy5JV3NFdmVudFRlbGVtZXRyeUludGVyYWN0PihldmVudClcclxuICB9XHJcblxyXG4gIHJhaXNlVHJhbnNjcmlwdGlvbkxhbmd1YWdlU3RhcnRUZWxlbWV0cnkoKSB7XHJcbiAgICBjb25zdCBldmVudCA9IHtcclxuICAgICAgZXZlbnRUeXBlOiBXc0V2ZW50cy5Xc0V2ZW50VHlwZS5UZWxlbWV0cnksXHJcbiAgICAgIGV2ZW50TG9nTGV2ZWw6IFdzRXZlbnRzLldzRXZlbnRMb2dMZXZlbC5JbmZvLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgZWRhdGE6IHsgdHlwZTogJ2NsaWNrJywgXCJpZFwiOiB0aGlzLnRyYW5zY3JpcHRBY3RpdmVMYW5ndWFnZVRleHQsIFwicGFnZWlkXCI6IGAvdmlld2VyL3ZpZGVvLyR7dGhpcy52aWV3ZXJEYXRhU3ZjPy5yZXNvdXJjZUlkfWAsIHN1YlR5cGU6ICd0cmFuc2NyaXB0LWxhbmd1YWdlJyB9LFxyXG4gICAgICAgIG9iamVjdDogeyBcImlkXCI6IHRoaXMuY29udGVudD8uaWRlbnRpZmllciwgXCJ0eXBlXCI6IHRoaXMuY29udGVudD8uY291cnNlQ2F0ZWdvcnkgfSxcclxuICAgICAgICBzdGF0ZTogV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuTG9hZGVkLFxyXG4gICAgICAgIGV2ZW50U3ViVHlwZTogV3NFdmVudHMuRW51bVRlbGVtZXRyeVN1YlR5cGUuQ2hhdGJvdCxcclxuICAgICAgICBtb2RlOiAndmlldycsXHJcbiAgICAgIH0sXHJcbiAgICAgIHBhZ2VDb250ZXh0OiB7IHBhZ2VJZDogYC92aWV3ZXIvdmlkZW8vJHt0aGlzLnZpZXdlckRhdGFTdmM/LnJlc291cmNlSWR9YCwgbW9kdWxlOiAnTGVhcm4nIH0sXHJcbiAgICAgIGZyb206ICcnLFxyXG4gICAgICB0bzogJ1RlbGVtZXRyeScsXHJcbiAgICB9XHJcbiAgICB0aGlzLmV2ZW50U3ZjLmRpc3BhdGNoQ2hhdGJvdEV2ZW50PFdzRXZlbnRzLklXc0V2ZW50VGVsZW1ldHJ5SW50ZXJhY3Q+KGV2ZW50KVxyXG4gIH1cclxuXHJcbiAgcmFpc2VUcmFuc2NyaXB0aW9uTGFuZ3VhZ2VJbnRlcmFjdFRlbGVtZXRyeSgpIHtcclxuICAgIGNvbnN0IGV2ZW50ID0ge1xyXG4gICAgICBldmVudFR5cGU6IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeSxcclxuICAgICAgZXZlbnRMb2dMZXZlbDogV3NFdmVudHMuV3NFdmVudExvZ0xldmVsLkluZm8sXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBlZGF0YTogeyB0eXBlOiAnY2xpY2snLCBcImlkXCI6IHRoaXMudHJhbnNjcmlwdEFjdGl2ZUxhbmd1YWdlVGV4dCwgXCJwYWdlaWRcIjogYC92aWV3ZXIvdmlkZW8vJHt0aGlzLnZpZXdlckRhdGFTdmM/LnJlc291cmNlSWR9YCwgc3ViVHlwZTogJ3RyYW5zY3JpcHQtbGFuZ3VhZ2UnIH0sXHJcbiAgICAgICAgb2JqZWN0OiB7IFwiaWRcIjogdGhpcy5jb250ZW50Py5pZGVudGlmaWVyLCBcInR5cGVcIjogdGhpcy5jb250ZW50Py5jb3Vyc2VDYXRlZ29yeSB9LFxyXG4gICAgICAgIHN0YXRlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5JbnRlcmFjdCxcclxuICAgICAgICBldmVudFN1YlR5cGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkNoYXRib3QsXHJcbiAgICAgICAgbW9kZTogJ3ZpZXcnLFxyXG4gICAgICB9LFxyXG4gICAgICBwYWdlQ29udGV4dDogeyBwYWdlSWQ6IGAvdmlld2VyL3ZpZGVvLyR7dGhpcy52aWV3ZXJEYXRhU3ZjPy5yZXNvdXJjZUlkfWAsIG1vZHVsZTogJ0xlYXJuJyB9LFxyXG4gICAgICBmcm9tOiAnJyxcclxuICAgICAgdG86ICdUZWxlbWV0cnknLFxyXG4gICAgfVxyXG4gICAgdGhpcy5ldmVudFN2Yy5kaXNwYXRjaENoYXRib3RFdmVudDxXc0V2ZW50cy5JV3NFdmVudFRlbGVtZXRyeUludGVyYWN0PihldmVudClcclxuICB9XHJcblxyXG4gIHJhaXNlVHJhbnNjcmlwdGlvbkxhbmd1YWdlU3RvcFRlbGVtZXRyeSgpIHtcclxuICAgIGNvbnN0IGV2ZW50ID0ge1xyXG4gICAgICBldmVudFR5cGU6IFdzRXZlbnRzLldzRXZlbnRUeXBlLlRlbGVtZXRyeSxcclxuICAgICAgZXZlbnRMb2dMZXZlbDogV3NFdmVudHMuV3NFdmVudExvZ0xldmVsLkluZm8sXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBlZGF0YTogeyB0eXBlOiAnY2xpY2snLCBcImlkXCI6IHRoaXMudHJhbnNjcmlwdEFjdGl2ZUxhbmd1YWdlVGV4dCwgXCJwYWdlaWRcIjogYC92aWV3ZXIvdmlkZW8vJHt0aGlzLnZpZXdlckRhdGFTdmM/LnJlc291cmNlSWR9YCwgc3ViVHlwZTogJ3RyYW5zY3JpcHQtbGFuZ3VhZ2UnIH0sXHJcbiAgICAgICAgb2JqZWN0OiB7IFwiaWRcIjogdGhpcy5jb250ZW50Py5pZGVudGlmaWVyLCBcInR5cGVcIjogdGhpcy5jb250ZW50Py5jb3Vyc2VDYXRlZ29yeSB9LFxyXG4gICAgICAgIHN0YXRlOiBXc0V2ZW50cy5FbnVtVGVsZW1ldHJ5U3ViVHlwZS5VbmxvYWRlZCxcclxuICAgICAgICBldmVudFN1YlR5cGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnlTdWJUeXBlLkNoYXRib3QsXHJcbiAgICAgICAgbW9kZTogJ3ZpZXcnLFxyXG4gICAgICB9LFxyXG4gICAgICBwYWdlQ29udGV4dDogeyBwYWdlSWQ6IGAvdmlld2VyL3ZpZGVvLyR7dGhpcy52aWV3ZXJEYXRhU3ZjPy5yZXNvdXJjZUlkfWAsIG1vZHVsZTogJ0xlYXJuJyB9LFxyXG4gICAgICBmcm9tOiAnJyxcclxuICAgICAgdG86ICdUZWxlbWV0cnknLFxyXG4gICAgfVxyXG4gICAgdGhpcy5ldmVudFN2Yy5kaXNwYXRjaENoYXRib3RFdmVudDxXc0V2ZW50cy5JV3NFdmVudFRlbGVtZXRyeUludGVyYWN0PihldmVudClcclxuICB9XHJcblxyXG4gIGNsb3NlQUlQb3B1cChldmVudDogYW55KSB7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgdGhpcy5zaG93QUlUdXRvclBvcHVwID0gZmFsc2VcclxuICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gMFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy5yZXNvdXJjZUlkZW50aWZpZXIkKSB7XHJcbiAgICAgIHRoaXMucmVzb3VyY2VJZGVudGlmaWVyJC51bnN1YnNjcmliZSgpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc3ViVGl0bGVzJCkge1xyXG4gICAgICB0aGlzLnN1YlRpdGxlcyQudW5zdWJzY3JpYmUoKVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnRyYW5zcmlwdGlvbkxhbmd1YWdlU3ViKSB7XHJcbiAgICAgIHRoaXMudHJhbnNyaXB0aW9uTGFuZ3VhZ2VTdWIudW5zdWJzY3JpYmUoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xlYXJDb21tZW50SWRGcm9tVXJsKCk6IHZvaWQge1xyXG4gICAgY29uc3QgY3VycmVudFF1ZXJ5UGFyYW1zID0geyAuLi50aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zIH1cclxuICAgIGRlbGV0ZSBjdXJyZW50UXVlcnlQYXJhbXMuY29tbWVudElkXHJcbiAgICB0aGlzLmNvbW1lbnRJZCA9ICcnXHJcbiAgICB0aGlzLmRpc2N1c3NXaWRnZXREYXRhLm5ld0NvbW1lbnRTZWN0aW9uLnNob3cgPSB0cnVlXHJcbiAgfVxyXG5cclxuICByZXN1bWVDb250ZW50Q2FsbCgpIHtcclxuICAgIHRoaXMucmVzdW1lQ29udGVudC5lbWl0KClcclxuICB9XHJcbn0iLCI8IS0tICYmIChjb250ZW50Py5jb3Vyc2VDYXRlZ29yeSAhPT0gY291cnNlQ2F0ZWdvcnk/LkJMRU5ERURfUFJPR1JBTSkgLS0+XHJcbjxkaXYgY2xhc3M9XCJhaS10dXRvci1nZXQtc3RhcnRlZFwiICpuZ0lmPVwiIXZpZXdlclBhZ2UgJiYgZW5hYmxlQUlUdXRvckZsYWcgJiYgIWlzTW9iaWxlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicHgtMiBweS0yXCI+XHJcbiAgICAgICAgICAgIDxpbWcgc3JjPVwiYXNzZXRzL2ljb25zL2JvdC1jaGF0LXNtYWxsLnN2Z1wiIGhlaWdodD1cIjY0cHhcIiB3aWR0aD1cIjY0cHhcIiAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHktMlwiIFtuZ0NsYXNzXT1cImlzTW9iaWxlID8gJycgOiAndy01NjUnXCI+XHJcbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImZvbnQtd2VpZ2h0LTYwMFwiPkdldCBTdGFydGVkIHdpdGggQUkgVHV0b3I8L3A+XHJcbiAgICAgICAgICAgICAgICA8c3Bhbj5HZXQgaW5zdGFudCBleHBsYW5hdGlvbnMsIHN0ZXAtYnktc3RlcCBsZWFybmluZyBndWlkYW5jZSwgYW5kIGN1c3RvbWlzZWQgbGVhcm5pbmcgdGFpbG9yZWQganVzdFxyXG4gICAgICAgICAgICAgICAgICAgIGZvciB5b3UuPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXR1dG9yLWJ0biBweC0yIHB5LTFcIj5cclxuICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiAoY2xpY2spPVwic2hvd0FpVHV0b3JDb25maXJtUG9wdXAoKVwiPjxpbWdcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3JjPVwiYXNzZXRzL2FpLXR1dG9yL2FpLWljb24uc3ZnXCI+Jm5ic3A7ICZuYnNwOyA8c3BhbiBjbGFzcz1cImFpLXR1dG9yLWxhYmVsXCI+QUkgVHV0b3I8L3NwYW4+PC9hPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cInRhYi1ncm91cC1jb250YWluZXJcIj5cclxuICAgIDxtYXQtdGFiLWdyb3VwIChzZWxlY3RlZFRhYkNoYW5nZSk9XCJoYW5kbGVUYWJDaGFuZ2UoJGV2ZW50KVwiICNzdGlja3lNZW51IFtjbGFzcy5zdGlja3ktbWF0LXRhYnNdPVwic3RpY2t5XCJcclxuICAgICAgICBbc2VsZWN0ZWRJbmRleF09XCJzZWxlY3RlZFRhYkluZGV4XCIgW25nQ2xhc3NdPVwieydjb250ZW50LXRhYnMnOiFmcm9tVmlld2VyLCdjb250ZW50U3RpY2t5JzogZm9yUHJldmlld31cIj5cclxuXHJcbiAgICAgICAgPCEtLSBUcmFuc2NyaXB0aW9uIFRhYiAtLT5cclxuICAgICAgICA8bWF0LXRhYiBsYWJlbD1cIlRyYW5zY3JpcHRpb25cIlxyXG4gICAgICAgICAgICAqbmdJZj1cInZpZXdlclBhZ2UgJiYgZW5hYmxlVHJhbnNjcmlwdGlvbkZsYWcgJiYgdnR0TGFuZ0Fycj8ubGVuZ3RoICYmIHN1YlRpdGxlcz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXQtdGFiLWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5UcmFuc2NyaXB0PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWQtY2lyY2xlIG1sLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgTmV3XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRpc2NsYWltZXIgbXktMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwicHktMiBweC0yXCI+RGlzY2xhaW1lciA6IFRoZXNlIHRyYW5zY3JpcHRzIGFuZCBzdWJ0aXRsZXMgYXJlIEFJLWdlbmVyYXRlZCBhbmQgbWF5IGNvbnRhaW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLjwvcD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBtbC01IG1yLTVcIiAqbmdJZj1cImlzTW9iaWxlRm9yQUlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJhbnNjcmlwdC1mbGV4LWNvbnRhaW5lciBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm11bHRpbGluZS1zZWxlY3RcIiBhcHBlYXJhbmNlPVwiZmlsbFwiIHN0eWxlPVwiaGVpZ2h0OiBhdXRvOyB3aWR0aDogMTAwJTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXRMYWJlbD1cIm5ldmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBjbGFzcz1cIm11bHRpbGluZS1zZWxlY3QtYm94IHByLTVcIiBbKHZhbHVlKV09XCJzZWxlY3RlZFRyYW5zY3JpcHRpb25TdHlsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJyZW5kZXJTZWxlY3RlZExhbmd1YWdlVHJhbnNjcmlwdGlvbigkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QtdHJpZ2dlciBjbGFzcz1cIm11bHRpbGluZS1zZWxlY3QtYm94LXRyaWdnZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkLW9wdGlvbi1jb250ZW50IHB4LTUgcHktMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCI+PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ0cmFuc2NyaXB0aW9uQWN0aXZlTGFuZ3VhZ2UgPT09IHNlbGVjdGVkVHJhbnNjcmlwdGlvblN0eWxlPy5sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5UcmFuc2NyaXB0IExhbmd1YWdlOiA8L2I+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7c2VsZWN0ZWRUcmFuc2NyaXB0aW9uU3R5bGU/Lmxhbmd1YWdlIHwgdGl0bGVjYXNlfX0gPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkZWZhdWx0VHJhbnNjcmlwdExhbmd1YWdlID09PSBzZWxlY3RlZFRyYW5zY3JpcHRpb25TdHlsZT8ubGFiZWxcIj4oQXV0byk8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0LXRyaWdnZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gY2xhc3M9XCJtdWx0aWxpbmUtc2VsZWN0LW9wdGlvblwiIHZhbHVlPVwiXCIgKm5nRm9yPVwibGV0IGxhbmcgb2YgdnR0TGFuZ0FyclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJsYW5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydhY3RpdmUtb3B0aW9uJzogc2VsZWN0ZWRUcmFuc2NyaXB0aW9uU3R5bGU/LmxhYmVsID09PSBsYW5nPy5sYWJlbH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbi1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj57e2xhbmc/Lmxhbmd1YWdlIHwgdGl0bGVjYXNlfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtNCBmbGV4IGZsZXgtcm93IGp1c3RpZnktZW5kIHRyYW5zY3JpcHQtY29udHJvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBtYXROYXRpdmVDb250cm9sIHJlcXVpcmVkIGNsYXNzPVwic2VjdGlvbi1kZFwiIChjaGFuZ2UpPVwicmVuZGVyU2VsZWN0ZWRMYW5ndWFnZVRyYW5zY3JpcHRpb24oJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJsYW5nPy5sYW5ndWFnZVwiICpuZ0Zvcj1cImxldCBsYW5nIG9mIHZ0dExhbmdBcnJcIiBbc2VsZWN0ZWRdPVwibGFuZz8ubGFiZWwgPT09IHRyYW5zY3JpcHRpb25BY3RpdmVMYW5ndWFnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInRyYW5zY3JpcHRpb25BY3RpdmVMYW5ndWFnZSA9PT0gbGFuZz8ubGFiZWxcIj4gVHJhbnNjcmlwdCBMYW5ndWFnZTogPC9zcGFuPiB7e2xhbmc/Lmxhbmd1YWdlIHwgdGl0bGVjYXNlfX0gPHNwYW4gKm5nSWY9XCJ0cmFuc2NyaXB0aW9uQWN0aXZlTGFuZ3VhZ2UgPT09IGxhbmc/Lmxhbmd1YWdlXCI+KEF1dG8pPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IHctZnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cIiFpc01vYmlsZUZvckFJID8gJ3ctc3VidGl0bGUtODAnOid3LWZ1bGwnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cIiFpc01vYmlsZUZvckFJID8gJ21sLTUtcGVyJyA6ICcnXCIgKm5nSWY9XCJzdWJUaXRsZXMgJiYgc3ViVGl0bGVzPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFRyYW5zY3JpcHRpb24gY29udGVudCAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzdWJ0aXRsZSBvZiBzdWJUaXRsZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgIG15LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN1YnRpdGxlLXRpbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJwbGF5RnJvbVNsb3Qoc3VidGl0bGUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInByLTEgYmx1ZS11bmRlcmxpbmVcIj4ge3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRNc1RvVnR0VGltZShzdWJ0aXRsZT8uc3RhcnRUaW1lKSB9fSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJsYWNrLXRleHRcIj4tPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwbC0xIGJsdWUtdW5kZXJsaW5lXCI+e3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRNc1RvVnR0VGltZShzdWJ0aXRsZT8uZW5kVGltZSkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtNCBzdWJ0aXRsZS10ZXh0LXNsb3QgbXItNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImJsYWNrLXRleHRcIiBbaW5uZXJIdG1sXT1cInN1YnRpdGxlPy50ZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaGlnaGxpZ2h0IDoga2V5d29yZFRvSGlnaGxpZ2h0Py50ZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKChzdWJ0aXRsZT8uc3RhcnRUaW1lIC8gMTAwMCkgPj0ga2V5d29yZFRvSGlnaGxpZ2h0Py5zdGFydFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHN1YnRpdGxlPy5lbmRUaW1lIC8gMTAwMCkgPD0ga2V5d29yZFRvSGlnaGxpZ2h0Py5lbmQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctc3VidGl0bGUtMjBcIiAqbmdJZj1cIiFpc01vYmlsZUZvckFJXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHJhbnNjcmlwdC1mbGV4LWNvbnRhaW5lciBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibXVsdGlsaW5lLXNlbGVjdFwiIGFwcGVhcmFuY2U9XCJmaWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJoZWlnaHQ6IGF1dG87IHdpZHRoOiAxMDAlO1wiIGZsb2F0TGFiZWw9XCJuZXZlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBjbGFzcz1cIm11bHRpbGluZS1zZWxlY3QtYm94IHByLTVcIiBbKHZhbHVlKV09XCJzZWxlY3RlZFRyYW5zY3JpcHRpb25TdHlsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cInJlbmRlclNlbGVjdGVkTGFuZ3VhZ2VUcmFuc2NyaXB0aW9uKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0LXRyaWdnZXIgY2xhc3M9XCJtdWx0aWxpbmUtc2VsZWN0LWJveC10cmlnZ2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkLW9wdGlvbi1jb250ZW50IHB4LTUgcHktMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj48c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidHJhbnNjcmlwdGlvbkFjdGl2ZUxhbmd1YWdlID09PSBzZWxlY3RlZFRyYW5zY3JpcHRpb25TdHlsZT8ubGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5UcmFuc2NyaXB0IExhbmd1YWdlOiA8L2I+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tzZWxlY3RlZFRyYW5zY3JpcHRpb25TdHlsZT8ubGFuZ3VhZ2UgfCB0aXRsZWNhc2V9fSA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZGVmYXVsdFRyYW5zY3JpcHRMYW5ndWFnZSA9PT0gc2VsZWN0ZWRUcmFuc2NyaXB0aW9uU3R5bGU/LmxhYmVsXCI+KEF1dG8pPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdC10cmlnZ2VyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gY2xhc3M9XCJtdWx0aWxpbmUtc2VsZWN0LW9wdGlvblwiIHZhbHVlPVwiXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgbGFuZyBvZiB2dHRMYW5nQXJyXCIgW3ZhbHVlXT1cImxhbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYWN0aXZlLW9wdGlvbic6IHNlbGVjdGVkVHJhbnNjcmlwdGlvblN0eWxlPy5sYWJlbCA9PT0gbGFuZz8ubGFiZWx9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbi1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPnt7bGFuZz8ubGFuZ3VhZ2UgfCB0aXRsZWNhc2V9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIG15LTJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPHA+MC4wMDwvcD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1sLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cD5BSSBmb3IgRGlnaXRhbCBUcmFuc2Zvcm1hdGlvbjogTWFjaGluZSBMZWFybmluZyBhbmQgRGVlcCBMZWFybmluZyAgTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdCwgc2VkIGRvIGVpdXNtb2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSBhbGlxdWEuIFV0IGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5vc3RydWQgZXhlcmNpdGF0aW9uIHVsbGFtY28gbGFib3JpcyBuaXNpIHV0IGFsaXF1aXAgZXggZWEgY29tbW9kbyBjb25zZXF1YXQuIER1aXMgYXV0ZSBpcnVyZSBkb2xvciBpbiByZXByZWhlbmRlcml0IGluIHZvbHVwdGF0ZSB2ZWxpdCBlc3NlIGNpbGx1bSBkb2xvcmUgZXUgZnVnaWF0IG51bGxhIHBhcmlhdHVyLiBFeGNlcHRldXIgc2ludCBvY2NhZWNhdCBjdXBpZGF0YXQgbm9uIHByb2lkZW50LCBzdW50IGluIGN1bHBhIHF1aSBvZmZpY2lhIGRlc2VydW50IG1vbGxpdCBhbmltIGlkIGVzdCBsYWJvcnVtLjwvcD5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1sLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBtYXROYXRpdmVDb250cm9sIHJlcXVpcmVkIGNsYXNzPVwic2VjdGlvbi1kZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPlRyYW5zY3JpcHRpb24gTGFuZ3VhZ2U6IEVuZ2xpc2ggKEF1dG8pPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L21hdC10YWI+XHJcblxyXG4gICAgICAgIDwhLS0gQWJvdXQgVGFiIC0tPlxyXG4gICAgICAgIDxtYXQtdGFiIGxhYmVsPVwie3sgJ2FwcHRvY3NpbmdsZXBhZ2UuYWJvdXQnIHwgdHJhbnNsYXRlIH19XCI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXR1dG9yLWdldC1zdGFydGVkLW1vYmlsZSBteS0yIG1sLTJcIiAqbmdJZj1cIiF2aWV3ZXJQYWdlICYmIGVuYWJsZUFJVHV0b3JGbGFnICYmIGlzTW9iaWxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgYWxpZ24taXRlbXMtY2VudGVyIHctOThcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB4LTIgcHktMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJhc3NldHMvaWNvbnMvYm90LWNoYXQtc21hbGwuc3ZnXCIgaGVpZ2h0PVwiNDhweFwiIHdpZHRoPVwiNDhweFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhbGlnbi1pdGVtcy1jZW50ZXIgdy02MFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB5LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImZvbnQtd2VpZ2h0LTYwMFwiPkdldCBTdGFydGVkIHdpdGggQUkgVHV0b3I8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+R2V0IGluc3RhbnQgZXhwbGFuYXRpb25zLCBzdGVwLWJ5LXN0ZXAgbGVhcm5pbmcgZ3VpZGFuY2UsIGFuZCBjdXN0b21pc2VkIGxlYXJuaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhaWxvcmVkIGp1c3QgZm9yIHlvdS48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWktdHV0b3ItYnRuIHB4LTIgcHktMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiIChjbGljayk9XCJzaG93QWlUdXRvckNvbmZpcm1Qb3B1cCgpXCI+PGltZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJhc3NldHMvYWktdHV0b3IvYWktaWNvbi5zdmdcIj4mbmJzcDsgJm5ic3A7IDxzcGFuIGNsYXNzPVwiYWktdHV0b3ItbGFiZWxcIj5BSVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUdXRvcjwvc3Bhbj48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktZW5kIG15LTIgbXgtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS10dXRvci1idG4gcHgtMiBweS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIiAoY2xpY2spPVwic2hvd0FpVHV0b3JDb25maXJtUG9wdXAoKVwiPjxpbWcgc3JjPVwiYXNzZXRzL2FpLXR1dG9yL2FpLWljb24uc3ZnXCI+Jm5ic3A7ICZuYnNwOyA8c3BhbiBjbGFzcz1cImFpLXR1dG9yLWxhYmVsXCI+QUkgVHV0b3I8L3NwYW4+PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LWFwcC10b2MtYWJvdXQgW2Zyb21WaWV3ZXJdPVwiZnJvbVZpZXdlclwiIFtwYXRoU2V0XT1cInBhdGhTZXRcIiBbY29udGVudF09XCJjb250ZW50XCJcclxuICAgICAgICAgICAgICAgICAgICBbY29udGVudFJlYWREYXRhXT1cImNvbnRlbnRSZWFkRGF0YVwiIFtiYXNlQ29udGVudFJlYWREYXRhXT1cImJhc2VDb250ZW50UmVhZERhdGFcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt0b2NTdHJ1Y3R1cmVdPVwidG9jU3RydWN0dXJlXCIgW2NvbmZpZ109XCJjb25maWdcIiBbZm9yUHJldmlld109XCJmYWxzZVwiIFtzdGlja3ldPVwic3RpY2t5XCJcclxuICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRCYXRjaERhdGFdPVwic2VsZWN0ZWRCYXRjaERhdGFcIiBbc2VsZWN0ZWRUYWJWYWx1ZV09XCJzZWxlY3RlZFRhYkluZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICBbcmVzdW1lRGF0YV09XCJyZXN1bWVEYXRhXCIgW2JhdGNoRGF0YV09XCJiYXRjaERhdGFcIiBbc2tlbGV0b25Mb2FkZXJdPVwic2tlbGV0b25Mb2FkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjb25kaXRpb25dPVwiY29uZGl0aW9uXCIgW2twYXJyYXldPVwia3BhcnJheVwiIFtzaG93UmV2aWV3c109XCIndHJ1ZSdcIiBbbGFuZ3VhZ2VMaXN0XT1cImxhbmd1YWdlTGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2xvY2tDZXJ0aWZpY2F0ZV09XCJsb2NrQ2VydGlmaWNhdGVcIiAodHJpZ2VyQ29tcGxldGlvblN1cnZleUZvcm0pPVwib3BlblN1cnZleUZvcm1Qb3B1cCgkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8L3dzLXdpZGdldC1hcHAtdG9jLWFib3V0PlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvbWF0LXRhYj5cclxuXHJcbiAgICAgICAgPCEtLSBDb250ZW50IFRhYiAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udGVudD8uY2hpbGRyZW4/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cInt7ICdhcHB0b2NzaW5nbGVwYWdlLmNvbnRlbnQnIHwgdHJhbnNsYXRlIH19XCIgKm5nSWY9XCJjb250ZW50VGFiRmxhZ1wiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1hcHAtdG9jLWNvbnRlbnQgW2JhdGNoSWRdPVwiYmF0Y2hJZFwiIFtjb21wb25lbnROYW1lXT1cImNvbXBvbmVudE5hbWVcIiBbcGF0aFNldF09XCJwYXRoU2V0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NvbnRlbnRdPVwiY29udGVudFwiIFt0b2NTdHJ1Y3R1cmVdPVwidG9jU3RydWN0dXJlXCIgW2NvbmZpZ109XCJjb25maWdcIiBbZm9yUHJldmlld109XCJmb3JQcmV2aWV3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3Jlc3VtZURhdGFdPVwicmVzdW1lRGF0YVwiIFtiYXRjaERhdGFdPVwiYmF0Y2hEYXRhXCIgW3NrZWxldG9uTG9hZGVyXT1cInNrZWxldG9uTG9hZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2hpZXJhcmNoeU1hcERhdGFdPVwiaGllcmFyY2h5TWFwRGF0YVwiIFtiYXNlQ29udGVudFJlYWREYXRhXT1cImJhc2VDb250ZW50UmVhZERhdGFcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L3dzLXdpZGdldC1hcHAtdG9jLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L21hdC10YWI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb25maWc/LmNvbW1lbnRzVGFiICYmICFmb3JQcmV2aWV3XCI+XHJcbiAgICAgICAgICAgIDxtYXQtdGFiIGxhYmVsPVwie3sgJ2FwcHRvY3NpbmdsZXBhZ2Uuc3RhcnREaXNjdXNzaW9uJyB8IHRyYW5zbGF0ZSB9fVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgcmF0aW5ncy1kaXYgbXQtNVwiIGlkPVwiY29tbWVudHNEaXZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRpc2N1c3NXaWRnZXREYXRhICYmIGRpc2N1c3NXaWRnZXREYXRhPy5uZXdDb21tZW50U2VjdGlvbj8uY29tbWVudFRyZWVEYXRhPy5lbnRpdHlJZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbW1lbnRJZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGQtdjItd2lkZ2V0LWNvbW1lbnQgW3dpZGdldERhdGFdPVwiZGlzY3Vzc1dpZGdldERhdGFcIj48L2QtdjItd2lkZ2V0LWNvbW1lbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29tbWVudElkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBnYXAtMyBjdXJzb3ItcG9pbnRlciBtYi01XCIgKGNsaWNrKT1cImNsZWFyQ29tbWVudElkRnJvbVVybCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIj5hcnJvd19iYWNrPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCYWNrIHRvIGFsbCBjb21tZW50c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZC12Mi13aWRnZXQtY29tbWVudCBbd2lkZ2V0RGF0YV09XCJkaXNjdXNzV2lkZ2V0RGF0YVwiIFtjb21tZW50SWRdPVwiY29tbWVudElkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2tlbGV0b25Mb2FkZXJdPjwvZC12Mi13aWRnZXQtY29tbWVudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L21hdC10YWI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAqbmdJZj1cImNvbmZpZz8uc2FtdWhpa0NoYXJjaGFUYWIgJiYgY29uZGl0aW9uICYmIGNvbnRlbnRSZWFkRGF0YT8uZXZlbnRMaW5rZWQ/Lmxlbmd0aCA+IDAgJiYgZW5hYmxlU2FtdWhpa0NoYXJjaGFUYWJcIj5cclxuICAgICAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJ7eyAnYXBwdG9jc2luZ2xlcGFnZS5zYW11aGlrQ2hhcmNoYScgfCB0cmFuc2xhdGUgfX1cIj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHJhdGluZ3MtZGl2IG10LTVcIiBpZD1cInNhbXVoaWtDaGFyY2hhRGl2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtc2FtdWhpay1jaGFyY2hhLWNvbnRlbnQgW2NvbnRlbnRdPVwiY29udGVudFJlYWREYXRhXCIgW2NvbmRpdGlvbkRhdGFdPVwiY29uZGl0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZXN1bWVDb250ZW50KT1cInJlc3VtZUNvbnRlbnRDYWxsKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC93cy13aWRnZXQtc2FtdWhpay1jaGFyY2hhLWNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L21hdC10YWI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDwhLS0gVGVhY2hlcnMgTm90ZSBUYWIgLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbnRlbnRSZWFkRGF0YT8ucmVmZXJlbmNlTm9kZXMgJiYgdGVhY2hlck5vdGVzRmxhZ1wiPlxyXG4gICAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cIlRlYWNoZXJzIE5vdGVcIj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHJhdGluZ3MtZGl2IG10LTVcIiBpZD1cInRlYWNoZXJzTm90ZURpdlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8d3Mtd2lkZ2V0LWFwcC10b2MtdGVhY2hlcnMtbm90ZXMgW2NvbnRlbnRdPVwiY29udGVudFJlYWREYXRhXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtub3Rlc0Rpc3BsYXlUeXBlXT1cIidUZWFjaGVycyBSZXNvdXJjZSdcIj48L3dzLXdpZGdldC1hcHAtdG9jLXRlYWNoZXJzLW5vdGVzPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9tYXQtdGFiPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8IS0tIFJlZmVyZW5jZSBOb3RlIFRhYiAtLT5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29udGVudFJlYWREYXRhPy5yZWZlcmVuY2VOb2RlcyAmJiByZWZlcmVuY2VOb3Rlc0ZsYWdcIj5cclxuICAgICAgICAgICAgPG1hdC10YWIgbGFiZWw9XCJSZWZlcmVuY2UgTm90ZVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgcmF0aW5ncy1kaXYgbXQtNVwiIGlkPVwidGVhY2hlcnNOb3RlRGl2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx3cy13aWRnZXQtYXBwLXRvYy10ZWFjaGVycy1ub3RlcyBbY29udGVudF09XCJjb250ZW50UmVhZERhdGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25vdGVzRGlzcGxheVR5cGVdPVwiJ1JlZmVyZW5jZSBSZXNvdXJjZSdcIj48L3dzLXdpZGdldC1hcHAtdG9jLXRlYWNoZXJzLW5vdGVzPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8d3Mtd2lkZ2V0LWFwcC10b2MtcmVmZXJlbmNlLW5vdGVzIFtjb250ZW50XT1cImNvbnRlbnRSZWFkRGF0YVwiPjwvd3Mtd2lkZ2V0LWFwcC10b2MtcmVmZXJlbmNlLW5vdGVzPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvbWF0LXRhYj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dBc3NpZ25tZW50c1RhYiAmJiAhZm9yUHJldmlld1wiPlxyXG4gICAgICAgICAgICA8bWF0LXRhYiBsYWJlbD1cInt7ICdhcHB0b2NzaW5nbGVwYWdlLmFzc2lnbm1lbnRzJyB8IHRyYW5zbGF0ZSB9fVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdFRhYkNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgcmF0aW5ncy1kaXYgbXQtNVwiIGlkPVwidGFrZUFzc2Vzc21lbnREaXZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHdzLXdpZGdldC1hcHAtYmF0Y2gtYXNzaWdubWVudHMgW2NvbnRlbnRdPVwiY29udGVudFwiPjwvd3Mtd2lkZ2V0LWFwcC1iYXRjaC1hc3NpZ25tZW50cz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvbWF0LXRhYj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPCEtLSBUcmFuc2NyaXB0aW9uIFRhYiAtLT5cclxuICAgICAgICA8bWF0LXRhYiBsYWJlbD1cIkFJIFR1dG9yXCIgKm5nSWY9XCJ2aWV3ZXJQYWdlICYmIGVuYWJsZUFJVHV0b3JGbGFnICYmIGlzTW9iaWxlXCI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXQtdGFiLWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5BSSBUdXRvcjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVkLWNpcmNsZSBtbC01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIE5ld1xyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgbWF0VGFiQ29udGVudD5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93QUlUdXRvclBvcHVwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZpZXdlci1haS10dXRvciBbY29udGVudF09XCJjb250ZW50Py5pZGVudGlmaWVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbG9zZUFJUG9wdXApPVwiY2xvc2VBSVBvcHVwKCRldmVudClcIj48L3ZpZXdlci1haS10dXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvbWF0LXRhYj5cclxuICAgIDwvbWF0LXRhYi1ncm91cD5cclxuPC9kaXY+Il19
|