UNPKG

@project-sunbird/sunbird-video-player-v9

Version:

The Video player library is powered by Angular. This player is primarily designed to be used on Sunbird consumption platforms _(mobile app, web portal, offline desktop app)_ to drive reusability and maintainability, hence reducing the redundant developmen

343 lines 60.1 kB
import { Component, EventEmitter, Input, Output, HostListener, ViewChild } from '@angular/core'; import { errorCode, errorMessage } from '@project-sunbird/sunbird-player-sdk-v9'; import * as i0 from "@angular/core"; import * as i1 from "./sunbird-video-player.service"; import * as i2 from "./services/viewer.service"; import * as i3 from "@project-sunbird/sunbird-player-sdk-v9"; import * as i4 from "@angular/common"; import * as i5 from "@project-sunbird/sunbird-quml-player"; import * as i6 from "./components/video-player/video-player.component"; const _c0 = ["videoPlayer"]; const _c1 = a0 => ({ "isVisible": a0 }); function SunbirdVideoPlayerComponent_sb_player_side_menu_icon_2_Template(rf, ctx) { if (rf & 1) { const _r1 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "sb-player-side-menu-icon", 9); i0.ɵɵlistener("sidebarMenuEvent", function SunbirdVideoPlayerComponent_sb_player_side_menu_icon_2_Template_sb_player_side_menu_icon_sidebarMenuEvent_0_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.sideBarEvents($event)); }); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(1, _c1, ctx_r1.showControls)); } } function SunbirdVideoPlayerComponent_video_player_3_Template(rf, ctx) { if (rf & 1) { const _r3 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "video-player", 10); i0.ɵɵlistener("questionSetData", function SunbirdVideoPlayerComponent_video_player_3_Template_video_player_questionSetData_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.questionSetData($event)); })("playerInstance", function SunbirdVideoPlayerComponent_video_player_3_Template_video_player_playerInstance_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.playerInstance($event)); }); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵproperty("config", ctx_r1.playerConfig.config)("action", ctx_r1.playerAction); } } function SunbirdVideoPlayerComponent_sb_player_sidebar_4_Template(rf, ctx) { if (rf & 1) { const _r4 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "sb-player-sidebar", 11); i0.ɵɵlistener("sidebarEvent", function SunbirdVideoPlayerComponent_sb_player_sidebar_4_Template_sb_player_sidebar_sidebarEvent_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.sideBarEvents($event)); }); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵproperty("title", ctx_r1.viewerService.contentName)("config", ctx_r1.sideMenuConfig); } } function SunbirdVideoPlayerComponent_sb_player_end_page_5_Template(rf, ctx) { if (rf & 1) { const _r5 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "sb-player-end-page", 12); i0.ɵɵlistener("playNextContent", function SunbirdVideoPlayerComponent_sb_player_end_page_5_Template_sb_player_end_page_playNextContent_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.playContent($event)); })("exitContent", function SunbirdVideoPlayerComponent_sb_player_end_page_5_Template_sb_player_end_page_exitContent_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.exitContent($event)); })("replayContent", function SunbirdVideoPlayerComponent_sb_player_end_page_5_Template_sb_player_end_page_replayContent_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.replayContent($event)); }); i0.ɵɵelementEnd(); } if (rf & 2) { const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵproperty("contentName", ctx_r1.viewerService.contentName)("outcomeLabel", ctx_r1.viewerService.showScore ? "Score: " : "")("outcome", ctx_r1.viewerService.showScore ? ctx_r1.viewerService.scoreObtained + (ctx_r1.viewerService.maxScore && ctx_r1.viewerService.maxScore > 0 ? "/" + ctx_r1.viewerService.maxScore : "") : "")("nextContent", ctx_r1.nextContent)("userName", ctx_r1.viewerService.userName)("showExit", ctx_r1.sideMenuConfig.showExit)("timeSpentLabel", ctx_r1.viewerService.timeSpent); } } function SunbirdVideoPlayerComponent_sb_player_contenterror_6_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelement(0, "sb-player-contenterror"); } } function SunbirdVideoPlayerComponent_div_7_Template(rf, ctx) { if (rf & 1) { const _r6 = i0.ɵɵgetCurrentView(); i0.ɵɵelementStart(0, "div", 13, 1)(2, "quml-main-player", 14); i0.ɵɵlistener("playerEvent", function SunbirdVideoPlayerComponent_div_7_Template_quml_main_player_playerEvent_2_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.qumlPlayerEvents($event)); }); i0.ɵɵelementEnd()(); } if (rf & 2) { const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵadvance(2); i0.ɵɵproperty("playerConfig", ctx_r1.QumlPlayerConfig); } } export class SunbirdVideoPlayerComponent { constructor(videoPlayerService, viewerService, cdr, renderer2, errorService) { this.videoPlayerService = videoPlayerService; this.viewerService = viewerService; this.cdr = cdr; this.renderer2 = renderer2; this.errorService = errorService; this.telemetryEvent = new EventEmitter(); this.viewState = 'player'; this.showControls = true; this.sideMenuConfig = { showShare: true, showDownload: true, showReplay: true, showExit: true }; this.isPaused = false; this.showQumlPlayer = false; this.QumlPlayerConfig = {}; this.isFullScreen = false; this.isInitialized = false; this.raiseInternetDisconnectionError = () => { const code = errorCode.internetConnectivity; const message = errorMessage.internetConnectivity; const stacktrace = `${code}: ${message}`; this.viewerService.raiseExceptionLog(code, message, stacktrace, this.traceId); }; this.playerEvent = this.viewerService.playerEvent; this.viewerService.playerEvent.subscribe(event => { if (event.type === 'pause') { this.isPaused = true; this.showControls = true; } if (event.type === 'play') { this.isPaused = false; } if (event.type === 'loadstart') { this.viewerService.raiseStartEvent(event); } if (event.type === 'ended') { this.viewerService.endPageSeen = true; this.viewerService.raiseEndEvent(); this.viewState = 'end'; this.cdr.detectChanges(); } if (event.type === 'error') { // eslint-disable-next-line one-var let code = errorCode.contentLoadFails, message = errorMessage.contentLoadFails; if (this.viewerService.isAvailableLocally) { code = errorCode.contentLoadFails; message = errorMessage.contentLoadFails; } if (code === errorCode.contentLoadFails) { this.showContentError = true; } this.viewerService.raiseExceptionLog(code, message, event, this.traceId); } // eslint-disable-next-line max-len const events = [{ type: 'volumechange', telemetryEvent: 'VOLUME_CHANGE' }, { type: 'seeking', telemetryEvent: 'DRAG' }, { type: 'fullscreen', telemetryEvent: 'FULLSCREEN' }, { type: 'ratechange', telemetryEvent: 'RATE_CHANGE' }]; events.forEach(data => { if (event.type === data.type) { this.viewerService.raiseHeartBeatEvent(data.telemetryEvent); } }); }); } onTelemetryEvent(event) { this.telemetryEvent.emit(event.detail); } ngOnInit() { this.isInitialized = true; if (this.playerConfig) { if (typeof this.playerConfig === 'string') { try { this.playerConfig = JSON.parse(this.playerConfig); } catch (error) { console.error('Invalid playerConfig: ', error); } } } setInterval(() => { if (!this.isPaused) { this.showControls = false; } }, 5000); this.nextContent = this.playerConfig?.config?.nextContent; this.traceId = this.playerConfig.config['traceId']; this.sideMenuConfig = { ...this.sideMenuConfig, ...this.playerConfig.config.sideMenu }; this.videoPlayerService.initialize(this.playerConfig); this.viewerService.initialize(this.playerConfig); window.addEventListener('offline', this.raiseInternetDisconnectionError, true); this.QumlPlayerConfig.config = this.playerConfig.config; this.QumlPlayerConfig.config.sideMenu.enable = false; this.QumlPlayerConfig.context = this.playerConfig.context; this.setTelemetryObjectRollup(this.playerConfig.metadata.identifier); } ngOnChanges(changes) { if (changes.action) { if (!this.showQumlPlayer) { this.playerAction = this.action; } } if (changes?.playerConfig?.firstChange && this.isInitialized) { // Calling for web component explicitly and life cycle works in different order this.ngOnInit(); } } ngAfterViewInit() { const videoPlayerElement = this.videoPlayerRef.nativeElement; this.unlistenMouseMove = this.renderer2.listen(videoPlayerElement, 'mousemove', () => { this.showControls = true; }); this.unlistenTouchStart = this.renderer2.listen(videoPlayerElement, 'touchstart', () => { this.showControls = true; }); const contentCompabilityLevel = this.playerConfig.metadata['compatibilityLevel']; if (contentCompabilityLevel) { const checkContentCompatible = this.errorService.checkContentCompatibility(contentCompabilityLevel); if (!checkContentCompatible['isCompitable']) { // eslint-disable-next-line max-len this.viewerService.raiseExceptionLog(errorCode.contentCompatibility, errorMessage.contentCompatibility, checkContentCompatible['error']['message'], this.traceId); } } } sideBarEvents(event) { this.playerEvent.emit(event); if (event.type === 'DOWNLOAD') { this.downloadVideo(); } const events = ['SHARE', 'DOWNLOAD_MENU', 'EXIT', 'CLOSE_MENU', 'OPEN_MENU', 'DOWNLOAD_POPUP_CANCEL', 'DOWNLOAD_POPUP_CLOSE']; events.forEach(data => { if (event.type === data) { this.viewerService.raiseHeartBeatEvent(data); } if (event.type === 'EXIT') { this.viewerService.sidebarMenuEvent.emit('CLOSE_MENU'); } }); } setTelemetryObjectRollup(id) { if (this.QumlPlayerConfig.context) { const hasObjectRollup = this.QumlPlayerConfig && this.QumlPlayerConfig.context && this.QumlPlayerConfig.context.objectRollup; if (!hasObjectRollup) { this.QumlPlayerConfig.context.objectRollup = {}; } const levels = Object.keys(this.QumlPlayerConfig.context.objectRollup); this.QumlPlayerConfig.context.objectRollup[`l${levels.length + 1}`] = id; } } playContent(event) { this.viewerService.raiseHeartBeatEvent(event.type); } replayContent(event) { this.playerEvent.emit(event); this.viewState = 'player'; this.viewerService.isEndEventRaised = false; this.viewerService.raiseHeartBeatEvent('REPLAY'); this.cdr.detectChanges(); } exitContent(event) { this.playerEvent.emit(event); this.viewerService.raiseHeartBeatEvent('EXIT'); } downloadVideo() { const a = document.createElement('a'); a.href = this.viewerService.artifactUrl; a.download = this.viewerService.contentName; a.target = '_blank'; document.body.appendChild(a); a.click(); a.remove(); this.viewerService.raiseHeartBeatEvent('DOWNLOAD'); } qumlPlayerEvents(event) { if (event.eid === 'QUML_SUMMARY') { this.showQumlPlayer = false; const score = parseInt(event.edata.extra.find(p => p.id === 'score')['value'], 10); this.viewerService.interceptionResponses[this.currentInterceptionTime] = { score, isSkipped: false }; const interceptPointElement = document.querySelector(`[data-marker-time="${this.currentInterceptionTime}"]`); if (interceptPointElement) { interceptPointElement['style'].background = 'green'; } this.videoInstance.play(); this.videoInstance.controls(true); this.viewerService.raiseImpressionEvent('video'); // if currently video is not in full screen and was previously full screen then set it back to full screen again if (!document.fullscreenElement && this.isFullScreen) { if (document.getElementsByClassName('video-js')[0]) { document.getElementsByClassName('video-js')[0].requestFullscreen() .catch((err) => console.error(err)); } } } } questionSetData({ response, time, identifier }) { this.QumlPlayerConfig.metadata = response; this.QumlPlayerConfig.metadata['showStartPage'] = 'No'; this.QumlPlayerConfig.metadata['showEndPage'] = 'No'; this.currentInterceptionTime = time; this.currentInterceptionUIId = identifier; if (document.fullscreenElement) { this.isFullScreen = true; document.exitFullscreen() .catch((err) => console.error(err)); } else { this.isFullScreen = false; } this.showQumlPlayer = true; this.viewerService.raiseImpressionEvent('interactive-question-set', { id: identifier, type: 'QuestionSet' }); this.viewerService.raiseHeartBeatEvent('VIDEO_MARKER_SELECTED', { identifier, // Question set id, type: 'QuestionSet', // Type of interaction interceptedAt: time // Time when the interception happened }); } playerInstance(event) { this.videoInstance = event; } ngOnDestroy() { this.viewerService.raiseEndEvent(true); this.unlistenTouchStart(); this.unlistenMouseMove(); this.viewerService.isEndEventRaised = false; window.removeEventListener('offline', this.raiseInternetDisconnectionError, true); } /** @nocollapse */ static { this.ɵfac = function SunbirdVideoPlayerComponent_Factory(t) { return new (t || SunbirdVideoPlayerComponent)(i0.ɵɵdirectiveInject(i1.SunbirdVideoPlayerService), i0.ɵɵdirectiveInject(i2.ViewerService), i0.ɵɵdirectiveInject(i0.ChangeDetectorRef), i0.ɵɵdirectiveInject(i0.Renderer2), i0.ɵɵdirectiveInject(i3.ErrorService)); }; } /** @nocollapse */ static { this.ɵcmp = /** @pureOrBreakMyCode */ i0.ɵɵdefineComponent({ type: SunbirdVideoPlayerComponent, selectors: [["sunbird-video-player"]], viewQuery: function SunbirdVideoPlayerComponent_Query(rf, ctx) { if (rf & 1) { i0.ɵɵviewQuery(_c0, 7); } if (rf & 2) { let _t; i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.videoPlayerRef = _t.first); } }, hostBindings: function SunbirdVideoPlayerComponent_HostBindings(rf, ctx) { if (rf & 1) { i0.ɵɵlistener("TelemetryEvent", function SunbirdVideoPlayerComponent_TelemetryEvent_HostBindingHandler($event) { return ctx.onTelemetryEvent($event); }, false, i0.ɵɵresolveDocument)("beforeunload", function SunbirdVideoPlayerComponent_beforeunload_HostBindingHandler() { return ctx.ngOnDestroy(); }, false, i0.ɵɵresolveWindow); } }, inputs: { playerConfig: "playerConfig", action: "action" }, outputs: { playerEvent: "playerEvent", telemetryEvent: "telemetryEvent" }, features: [i0.ɵɵNgOnChangesFeature], decls: 8, vars: 7, consts: [["videoPlayer", ""], ["qumlPlayer", ""], [1, "sunbird-video-player-container", 3, "ngClass"], ["class", "sb-player-side-menu-icon notVisible", "tabindex", "0", 3, "ngClass", "sidebarMenuEvent", 4, "ngIf"], [3, "config", "action", "questionSetData", "playerInstance", 4, "ngIf"], [3, "title", "config", "sidebarEvent", 4, "ngIf"], ["tabindex", "0", 3, "contentName", "outcomeLabel", "outcome", "nextContent", "userName", "showExit", "timeSpentLabel", "playNextContent", "exitContent", "replayContent", 4, "ngIf"], [4, "ngIf"], ["class", "sunbird-video-player-container", 4, "ngIf"], ["tabindex", "0", 1, "sb-player-side-menu-icon", "notVisible", 3, "sidebarMenuEvent", "ngClass"], [3, "questionSetData", "playerInstance", "config", "action"], [3, "sidebarEvent", "title", "config"], ["tabindex", "0", 3, "playNextContent", "exitContent", "replayContent", "contentName", "outcomeLabel", "outcome", "nextContent", "userName", "showExit", "timeSpentLabel"], [1, "sunbird-video-player-container"], [3, "playerEvent", "playerConfig"]], template: function SunbirdVideoPlayerComponent_Template(rf, ctx) { if (rf & 1) { i0.ɵɵelementStart(0, "div", 2, 0); i0.ɵɵtemplate(2, SunbirdVideoPlayerComponent_sb_player_side_menu_icon_2_Template, 1, 3, "sb-player-side-menu-icon", 3)(3, SunbirdVideoPlayerComponent_video_player_3_Template, 1, 2, "video-player", 4)(4, SunbirdVideoPlayerComponent_sb_player_sidebar_4_Template, 1, 2, "sb-player-sidebar", 5)(5, SunbirdVideoPlayerComponent_sb_player_end_page_5_Template, 1, 7, "sb-player-end-page", 6)(6, SunbirdVideoPlayerComponent_sb_player_contenterror_6_Template, 1, 0, "sb-player-contenterror", 7); i0.ɵɵelementEnd(); i0.ɵɵtemplate(7, SunbirdVideoPlayerComponent_div_7_Template, 3, 1, "div", 8); } if (rf & 2) { i0.ɵɵproperty("ngClass", ctx.showQumlPlayer ? "videoPlayerHide" : "videoPlayerShow"); i0.ɵɵadvance(2); i0.ɵɵproperty("ngIf", ctx.viewState === "player"); i0.ɵɵadvance(); i0.ɵɵproperty("ngIf", ctx.viewState === "player"); i0.ɵɵadvance(); i0.ɵɵproperty("ngIf", ctx.viewState === "player"); i0.ɵɵadvance(); i0.ɵɵproperty("ngIf", ctx.viewState === "end"); i0.ɵɵadvance(); i0.ɵɵproperty("ngIf", ctx.showContentError); i0.ɵɵadvance(); i0.ɵɵproperty("ngIf", ctx.showQumlPlayer); } }, dependencies: [i4.NgClass, i4.NgIf, i3.EndPageComponent, i3.SidebarComponent, i3.SideMenuIconComponent, i3.ContenterrorComponent, i5.MainPlayerComponent, i6.VideoPlayerComponent], styles: [".sunbird-video-player-container[_ngcontent-%COMP%]{width:100%;height:100%;overflow:hidden;position:relative}.videoPlayerHide[_ngcontent-%COMP%]{display:none}.videoPlayerShow[_ngcontent-%COMP%]{display:block}pdf-menu[_ngcontent-%COMP%]{position:absolute;top:0;left:0;z-index:99}.notVisible[_ngcontent-%COMP%], .BtmNotVisible[_ngcontent-%COMP%]{transition:all 1s ease-in-out;position:absolute;width:100%}.notVisible[_ngcontent-%COMP%]{top:-10rem}.notVisible.isVisible[_ngcontent-%COMP%]{top:0rem}.BtmNotVisible[_ngcontent-%COMP%]{bottom:-10rem}.BtmNotVisible.isVisible[_ngcontent-%COMP%]{bottom:0rem} .sunbird-video-player-container .sb-player-side-menu-icon input[type=checkbox]:checked~#overlay-button span{background:none!important} .sunbird-video-player-container .sb-player-side-menu-icon input[type=checkbox]:checked~#overlay-button span:after, .sunbird-video-player-container .sb-player-side-menu-icon input[type=checkbox]:checked~#overlay-button span:before, .sunbird-video-player-container .sb-player-side-menu-icon input[type=checkbox]:checked~#overlay-button:hover span:before, .sunbird-video-player-container .sb-player-side-menu-icon input[type=checkbox]:checked~#overlay-button:hover span:after{background-color:#ffffffb3!important} .sunbird-video-player-container .sb-player-side-menu-icon label{background:#33333380} .sunbird-video-player-container .sb-player-side-menu-icon label span, .sunbird-video-player-container .sb-player-side-menu-icon label span:before, .sunbird-video-player-container .sb-player-side-menu-icon label span:after{background-color:#ffffffb3!important} .sunbird-pdf-player{overflow:hidden} .pdfViewer .page{background:none!important;border-image:none!important;border:0!important} #toolbarContainer{background:none!important;height:auto!important} #viewerContainer{position:relative!important;height:calc(100% - 3rem)} .html, .body, .pdf-viewer button, .pdf-viewer input, .pdf-viewer select{font-size:inherit!important} .findbar, .secondaryToolbar, html[dir=ltr] #toolbarContainer, html[dir=rtl] #toolbarContainer{box-shadow:none!important} .zoom{min-height:inherit!important} html[dir=rtl] .sb-pdf-reading-status{left:auto;right:1rem}.sb-pdf-reading-status[_ngcontent-%COMP%]{color:var(--gray-800);font-size:.75rem;position:absolute;left:1rem;bottom:1rem;display:flex;align-items:center;background:var(--white);border-radius:.5rem;padding:.25em .5rem;z-index:5;line-height:normal}.sb-pdf-reading-status[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{background:var(--gray-800);width:.25rem;height:.25rem;display:block;margin:0px .5rem;border-radius:50%}.sbt-pdf-footer[_ngcontent-%COMP%]{background:var(--white);position:absolute;bottom:0;width:100%;height:3rem;display:flex;align-items:center;justify-content:flex-end;padding:.75rem .5rem}@media all and (orientation: landscape){ .visible-only-potrait{display:none}}@media all and (orientation: portrait){ #viewerContainer{height:calc(100% - 6rem)!important} .visible-only-landscape{display:none} .visible-only-potrait{display:block} .file-download__popup{height:15.125rem} .pdf-endpage{display:block!important;position:relative} .pdf-endpage__left-panel{margin-top:6rem} .pdf-endpage__right-panel .title-section{position:absolute;top:0;left:0;right:0}}@media all and (max-width: 640px){.visible-only-landscape[_ngcontent-%COMP%]{display:none}.visible-only-potrait[_ngcontent-%COMP%]{display:block}}@media all and (min-width: 640px){.visible-only-landscape[_ngcontent-%COMP%]{display:block}.visible-only-potrait[_ngcontent-%COMP%]{display:none}}"] }); } } (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(SunbirdVideoPlayerComponent, [{ type: Component, args: [{ selector: 'sunbird-video-player', template: "<div class=\"sunbird-video-player-container\" #videoPlayer [ngClass]=\"showQumlPlayer ? 'videoPlayerHide': 'videoPlayerShow'\">\n <sb-player-side-menu-icon class=\"sb-player-side-menu-icon notVisible\" tabindex=\"0\" (sidebarMenuEvent)=\"sideBarEvents($event)\"\n\n *ngIf=\"viewState ==='player'\" [ngClass]=\"{'isVisible': showControls}\"></sb-player-side-menu-icon>\n <video-player *ngIf=\"viewState === 'player'\" (questionSetData)=\"questionSetData($event)\" (playerInstance)=\"playerInstance($event)\" [config]=\"playerConfig.config\" [action]=\"playerAction\">\n </video-player>\n <sb-player-sidebar *ngIf=\"viewState ==='player'\"\n [title]=\"viewerService.contentName\"\n (sidebarEvent)=\"sideBarEvents($event)\" [config]=\"sideMenuConfig\"></sb-player-sidebar>\n <sb-player-end-page \n [contentName]=\"viewerService.contentName\" \n [outcomeLabel]=\"viewerService.showScore ? 'Score: ': ''\" \n [outcome]=\"viewerService.showScore ? viewerService.scoreObtained + ((viewerService.maxScore && viewerService.maxScore > 0) ? '/' + viewerService.maxScore : '') : ''\"\n [nextContent]=\"nextContent\" [userName]=\"viewerService.userName\" \n [showExit]=\"sideMenuConfig.showExit\"\n [timeSpentLabel]=\"viewerService.timeSpent\" tabindex=\"0\" (playNextContent)=\"playContent($event)\" \n (exitContent)=\"exitContent($event)\" (replayContent)=\"replayContent($event)\"\n *ngIf=\"viewState === 'end'\"></sb-player-end-page>\n <sb-player-contenterror *ngIf=\"showContentError\"></sb-player-contenterror>\n</div>\n\n<div class=\"sunbird-video-player-container\" *ngIf=\"showQumlPlayer\" #qumlPlayer>\n <quml-main-player [playerConfig]=\"QumlPlayerConfig\" (playerEvent)=\"qumlPlayerEvents($event)\"></quml-main-player>\n</div>", styles: [".sunbird-video-player-container{width:100%;height:100%;overflow:hidden;position:relative}.videoPlayerHide{display:none}.videoPlayerShow{display:block}pdf-menu{position:absolute;top:0;left:0;z-index:99}.notVisible,.BtmNotVisible{transition:all 1s ease-in-out;position:absolute;width:100%}.notVisible{top:-10rem}.notVisible.isVisible{top:0rem}.BtmNotVisible{bottom:-10rem}.BtmNotVisible.isVisible{bottom:0rem}::ng-deep .sunbird-video-player-container .sb-player-side-menu-icon input[type=checkbox]:checked~#overlay-button span{background:none!important}::ng-deep .sunbird-video-player-container .sb-player-side-menu-icon input[type=checkbox]:checked~#overlay-button span:after,::ng-deep .sunbird-video-player-container .sb-player-side-menu-icon input[type=checkbox]:checked~#overlay-button span:before,::ng-deep .sunbird-video-player-container .sb-player-side-menu-icon input[type=checkbox]:checked~#overlay-button:hover span:before,::ng-deep .sunbird-video-player-container .sb-player-side-menu-icon input[type=checkbox]:checked~#overlay-button:hover span:after{background-color:#ffffffb3!important}::ng-deep .sunbird-video-player-container .sb-player-side-menu-icon label{background:#33333380}::ng-deep .sunbird-video-player-container .sb-player-side-menu-icon label span,::ng-deep .sunbird-video-player-container .sb-player-side-menu-icon label span:before,::ng-deep .sunbird-video-player-container .sb-player-side-menu-icon label span:after{background-color:#ffffffb3!important}::ng-deep .sunbird-pdf-player{overflow:hidden}::ng-deep .pdfViewer .page{background:none!important;border-image:none!important;border:0!important}::ng-deep #toolbarContainer{background:none!important;height:auto!important}::ng-deep #viewerContainer{position:relative!important;height:calc(100% - 3rem)}::ng-deep .html,::ng-deep .body,::ng-deep .pdf-viewer button,::ng-deep .pdf-viewer input,::ng-deep .pdf-viewer select{font-size:inherit!important}::ng-deep .findbar,::ng-deep .secondaryToolbar,::ng-deep html[dir=ltr] #toolbarContainer,::ng-deep html[dir=rtl] #toolbarContainer{box-shadow:none!important}::ng-deep .zoom{min-height:inherit!important}::ng-deep html[dir=rtl] .sb-pdf-reading-status{left:auto;right:1rem}.sb-pdf-reading-status{color:var(--gray-800);font-size:.75rem;position:absolute;left:1rem;bottom:1rem;display:flex;align-items:center;background:var(--white);border-radius:.5rem;padding:.25em .5rem;z-index:5;line-height:normal}.sb-pdf-reading-status span{background:var(--gray-800);width:.25rem;height:.25rem;display:block;margin:0px .5rem;border-radius:50%}.sbt-pdf-footer{background:var(--white);position:absolute;bottom:0;width:100%;height:3rem;display:flex;align-items:center;justify-content:flex-end;padding:.75rem .5rem}@media all and (orientation: landscape){::ng-deep .visible-only-potrait{display:none}}@media all and (orientation: portrait){::ng-deep #viewerContainer{height:calc(100% - 6rem)!important}::ng-deep .visible-only-landscape{display:none}::ng-deep .visible-only-potrait{display:block}::ng-deep .file-download__popup{height:15.125rem}::ng-deep .pdf-endpage{display:block!important;position:relative}::ng-deep .pdf-endpage__left-panel{margin-top:6rem}::ng-deep .pdf-endpage__right-panel .title-section{position:absolute;top:0;left:0;right:0}}@media all and (max-width: 640px){.visible-only-landscape{display:none}.visible-only-potrait{display:block}}@media all and (min-width: 640px){.visible-only-landscape{display:block}.visible-only-potrait{display:none}}\n"] }] }], () => [{ type: i1.SunbirdVideoPlayerService }, { type: i2.ViewerService }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i3.ErrorService }], { playerConfig: [{ type: Input }], action: [{ type: Input }], playerEvent: [{ type: Output }], telemetryEvent: [{ type: Output }], videoPlayerRef: [{ type: ViewChild, args: ['videoPlayer', { static: true }] }], onTelemetryEvent: [{ type: HostListener, args: ['document:TelemetryEvent', ['$event']] }], ngOnDestroy: [{ type: HostListener, args: ['window:beforeunload'] }] }); })(); (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(SunbirdVideoPlayerComponent, { className: "SunbirdVideoPlayerComponent", filePath: "lib/sunbird-video-player.component.ts", lineNumber: 16 }); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VuYmlyZC12aWRlby1wbGF5ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc3VuYmlyZC12aWRlby1wbGF5ZXIvc3JjL2xpYi9zdW5iaXJkLXZpZGVvLXBsYXllci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zdW5iaXJkLXZpZGVvLXBsYXllci9zcmMvbGliL3N1bmJpcmQtdmlkZW8tcGxheWVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDYyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQ2pFLFlBQVksRUFBYyxTQUFTLEVBQ3BDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBaUIsU0FBUyxFQUFHLFlBQVksRUFBaUIsTUFBTSx3Q0FBd0MsQ0FBQzs7Ozs7Ozs7Ozs7O0lDSDFHLG1EQUU0RTtJQUZPLDBQQUFvQiw0QkFBcUIsS0FBQztJQUVqRCxpQkFBMkI7OztJQUFuRSx5RUFBdUM7Ozs7SUFDM0Usd0NBQTBMO0lBQWpHLEFBQTVDLGdPQUFtQiw4QkFBdUIsS0FBQyxpTkFBbUIsNkJBQXNCLEtBQUM7SUFDbEksaUJBQWU7OztJQURtSixBQUEvQixtREFBOEIsK0JBQXdCOzs7O0lBRXpMLDZDQUVpRTtJQUFqRSxvT0FBZ0IsNEJBQXFCLEtBQUM7SUFBMkIsaUJBQW9COzs7SUFBOUMsQUFEdEMsd0RBQW1DLGlDQUM0Qjs7OztJQUNoRSw4Q0FRa0M7SUFEVSxBQUF0QyxBQUR3RCw0T0FBbUIsMEJBQW1CLEtBQUMsdU5BQ2hGLDBCQUFtQixLQUFDLDJOQUFvQiw0QkFBcUIsS0FBQztJQUNqRCxpQkFBcUI7OztJQUZqRCxBQUROLEFBRDRCLEFBQTVCLEFBREEsQUFEQSxBQURBLDhEQUF5QyxpRUFDZSx1TUFDOEcsbUNBQzNJLDJDQUFvQyw0Q0FDM0Isa0RBQ1k7OztJQUdoRCx5Q0FBMEU7Ozs7SUFJMUUsQUFETixrQ0FBK0UsMkJBQ29CO0lBQXpDLG1OQUFlLCtCQUF3QixLQUFDO0lBQ2xHLEFBRG1HLGlCQUFtQixFQUNoSDs7O0lBRGtCLGVBQWlDO0lBQWpDLHNEQUFpQzs7QURQekQsTUFBTSxPQUFPLDJCQUEyQjtJQThCdEMsWUFDUyxrQkFBNkMsRUFDN0MsYUFBNEIsRUFDNUIsR0FBc0IsRUFDckIsU0FBb0IsRUFDckIsWUFBMEI7UUFKMUIsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUEyQjtRQUM3QyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUNyQixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3JCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBOUJ6QixtQkFBYyxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBRXRFLGNBQVMsR0FBRyxRQUFRLENBQUM7UUFJckIsaUJBQVksR0FBRyxJQUFJLENBQUM7UUFDcEIsbUJBQWMsR0FBRztZQUNmLFNBQVMsRUFBRSxJQUFJO1lBQ2YsWUFBWSxFQUFFLElBQUk7WUFDbEIsVUFBVSxFQUFFLElBQUk7WUFDaEIsUUFBUSxFQUFFLElBQUk7U0FDZixDQUFDO1FBR0YsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUN2QixxQkFBZ0IsR0FBUSxFQUFFLENBQUM7UUFJM0IsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFFZCxrQkFBYSxHQUFHLEtBQUssQ0FBQztRQWtHN0Isb0NBQStCLEdBQUcsR0FBRyxFQUFFO1lBQ3JDLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQztZQUM1QyxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsb0JBQW9CLENBQUM7WUFDbEQsTUFBTSxVQUFVLEdBQUcsR0FBRyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDekMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEYsQ0FBQyxDQUFBO1FBOUZDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUM7UUFDbEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQy9DLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQzNCLENBQUM7WUFDRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLENBQUM7WUFDRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVDLENBQUM7WUFDRCxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztnQkFDdEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDbkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDM0IsQ0FBQztZQUNELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztnQkFDM0IsbUNBQW1DO2dCQUNuQyxJQUFJLElBQUksR0FBRyxTQUFTLENBQUMsZ0JBQWdCLEVBQ25DLE9BQU8sR0FBRyxZQUFZLENBQUMsZ0JBQWdCLENBQUM7Z0JBQzFDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO29CQUN4QyxJQUFJLEdBQUcsU0FBUyxDQUFDLGdCQUFnQixDQUFDO29CQUNsQyxPQUFPLEdBQUcsWUFBWSxDQUFDLGdCQUFnQixDQUFDO2dCQUM1QyxDQUFDO2dCQUNELElBQUksSUFBSSxLQUFLLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO29CQUN4QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO2dCQUMvQixDQUFDO2dCQUNELElBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRTNFLENBQUM7WUFDRCxtQ0FBbUM7WUFDbkMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxZQUFZLEVBQUU7Z0JBQzVLLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztZQUN2RCxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNwQixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUM3QixJQUFJLENBQUMsYUFBYSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDOUQsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBR0QsZ0JBQWdCLENBQUMsS0FBSztRQUNwQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN4QixJQUFJLE9BQU8sSUFBSSxDQUFDLFlBQVksS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDMUMsSUFBSSxDQUFDO29CQUNILElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7Z0JBQ3BELENBQUM7Z0JBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztvQkFDZixPQUFPLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNqRCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDQyxXQUFXLENBQUMsR0FBRyxFQUFFO1lBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDNUIsQ0FBQztRQUNILENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVULElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDO1FBQzFELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbkQsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNqRCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQywrQkFBK0IsRUFBRyxJQUFJLENBQUMsQ0FBQztRQUNoRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDO1FBQ3hELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDckQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQztRQUMxRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDbEMsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM3RCwrRUFBK0U7WUFDL0UsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2xCLENBQUM7SUFDSCxDQUFDO0lBU0QsZUFBZTtRQUNiLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUM7UUFDN0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUU7WUFDbkYsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRTtZQUNyRixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNqRixJQUFJLHVCQUF1QixFQUFFLENBQUM7WUFDNUIsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLHlCQUF5QixDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDcEcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7Z0JBQzVDLG1DQUFtQztnQkFDbkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLEVBQUUsWUFBWSxDQUFDLG9CQUFvQixFQUFFLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNwSyxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsS0FBb0I7UUFDaEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN2QixDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsQ0FBQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLHVCQUF1QixFQUFFLHNCQUFzQixDQUFDLENBQUM7UUFDOUgsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNwQixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDL0MsQ0FBQztZQUNELElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztnQkFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDekQsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHdCQUF3QixDQUFDLEVBQUU7UUFDekIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUM7WUFDN0gsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUNyQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7WUFDbEQsQ0FBQztZQUNELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN2RSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDNUUsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXLENBQUMsS0FBSztRQUNmLElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxhQUFhLENBQUMsS0FBSztRQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUM1QyxJQUFJLENBQUMsYUFBYSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFLO1FBQ2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsYUFBYTtRQUNYLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQztRQUN4QyxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxNQUFNLEdBQUcsUUFBUSxDQUFDO1FBQ3BCLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNWLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNYLElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQUs7UUFDcEIsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLGNBQWMsRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1lBQzVCLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ25GLElBQUksQ0FBQyxhQUFhLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUc7Z0JBQ3ZFLEtBQUs7Z0JBQ0wsU0FBUyxFQUFFLEtBQUs7YUFDakIsQ0FBQztZQUNGLE1BQU0scUJBQXFCLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsSUFBSSxDQUFDLHVCQUF1QixJQUFJLENBQUMsQ0FBQztZQUM3RyxJQUFJLHFCQUFxQixFQUFFLENBQUM7Z0JBQzFCLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUM7WUFDdEQsQ0FBQztZQUNELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNqRCxnSEFBZ0g7WUFDaEgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3JELElBQUksUUFBUSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7b0JBQ25ELFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsRUFBRTt5QkFDakUsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBQztRQUMxQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUMxQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUN2RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNyRCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO1FBQ3BDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxVQUFVLENBQUM7UUFDMUMsSUFBSSxRQUFRLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztZQUN6QixRQUFRLENBQUMsY0FBYyxFQUFFO2lCQUN4QixLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN0QyxDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzVCLENBQUM7UUFDRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLDBCQUEwQixFQUFFLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUM3RyxJQUFJLENBQUMsYUFBYSxDQUFDLG1CQUFtQixDQUFDLHVCQUF1QixFQUFFO1lBQzlELFVBQVUsRUFBRSxtQkFBbUI7WUFDL0IsSUFBSSxFQUFFLGFBQWEsRUFBRSxzQkFBc0I7WUFDM0MsYUFBYSxFQUFFLElBQUksQ0FBQyxzQ0FBc0M7U0FDM0QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFLO1FBQ2xCLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO0lBQzdCLENBQUM7SUFHRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDNUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsK0JBQStCLEVBQUcsSUFBSSxDQUFDLENBQUM7SUFDckYsQ0FBQzsrR0ExUVUsMkJBQTJCO21HQUEzQiwyQkFBMkI7Ozs7OztZQUEzQix3SEFBQSw0QkFBd0IsaUNBQUcsaUdBQTNCLGlCQUFhLCtCQUFjOztZQ2Z4QyxpQ0FBMkg7WUFrQnJILEFBVEEsQUFIQSxBQUZBLEFBSEEsc0hBRTRFLGlGQUM4RywyRkFJekgsNkZBUy9CLHFHQUNlO1lBQ3ZELGlCQUFNO1lBRU4sNEVBQStFOztZQXJCdEIsb0ZBQWlFO1lBRzdHLGVBQTJCO1lBQTNCLGlEQUEyQjtZQUNuQixjQUE0QjtZQUE1QixpREFBNEI7WUFFdkIsY0FBMkI7WUFBM0IsaURBQTJCO1lBV3hDLGNBQXlCO1lBQXpCLDhDQUF5QjtZQUNQLGNBQXNCO1lBQXRCLDJDQUFzQjtZQUdSLGNBQW9CO1lBQXBCLHlDQUFvQjs7O2lGRE5wRCwyQkFBMkI7Y0FMdkMsU0FBUzsyQkFDRSxzQkFBc0I7eUtBTXZCLFlBQVk7a0JBQXBCLEtBQUs7WUFDRyxNQUFNO2tCQUFkLEtBQUs7WUFDSSxXQUFXO2tCQUFwQixNQUFNO1lBQ0csY0FBYztrQkFBdkIsTUFBTTtZQUNxQyxjQUFjO2tCQUF6RCxTQUFTO21CQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7WUEyRTFDLGdCQUFnQjtrQkFEZixZQUFZO21CQUFDLHlCQUF5QixFQUFFLENBQUMsUUFBUSxDQUFDO1lBb0xuRCxXQUFXO2tCQURWLFlBQVk7bUJBQUMscUJBQXFCOztrRkFuUXhCLDJCQUEyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsXG4gIEhvc3RMaXN0ZW5lciwgRWxlbWVudFJlZiwgVmlld0NoaWxkLCBBZnRlclZpZXdJbml0LCBSZW5kZXJlcjIsIE9uRGVzdHJveVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEVycm9yU2VydmljZSAsIGVycm9yQ29kZSAsIGVycm9yTWVzc2FnZSwgSVNpZGVCYXJFdmVudCB9IGZyb20gJ0Bwcm9qZWN0LXN1bmJpcmQvc3VuYmlyZC1wbGF5ZXItc2RrLXY5JztcblxuaW1wb3J0IHsgUGxheWVyQ29uZmlnIH0gZnJvbSAnLi9wbGF5ZXJJbnRlcmZhY2VzJztcbmltcG9ydCB7IElBY3Rpb24gfSBmcm9tICcuL3BsYXllckludGVyZmFjZXMnO1xuaW1wb3J0IHsgVmlld2VyU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvdmlld2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3VuYmlyZFZpZGVvUGxheWVyU2VydmljZSB9IGZyb20gJy4vc3VuYmlyZC12aWRlby1wbGF5ZXIuc2VydmljZSc7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdW5iaXJkLXZpZGVvLXBsYXllcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdW5iaXJkLXZpZGVvLXBsYXllci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3N1bmJpcmQtdmlkZW8tcGxheWVyLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgU3VuYmlyZFZpZGVvUGxheWVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG5cbiAgQElucHV0KCkgcGxheWVyQ29uZmlnOiBQbGF5ZXJDb25maWc7XG4gIEBJbnB1dCgpIGFjdGlvbj86IElBY3Rpb247XG4gIEBPdXRwdXQoKSBwbGF5ZXJFdmVudDogRXZlbnRFbWl0dGVyPG9iamVjdD47XG4gIEBPdXRwdXQoKSB0ZWxlbWV0cnlFdmVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQFZpZXdDaGlsZCgndmlkZW9QbGF5ZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSB2aWRlb1BsYXllclJlZjogRWxlbWVudFJlZjtcbiAgdmlld1N0YXRlID0gJ3BsYXllcic7XG4gIHB1YmxpYyB0cmFjZUlkOiBzdHJpbmc7XG4gIHB1YmxpYyBuZXh0Q29udGVudDogYW55O1xuICBzaG93Q29udGVudEVycm9yOiBib29sZWFuO1xuICBzaG93Q29udHJvbHMgPSB0cnVlO1xuICBzaWRlTWVudUNvbmZpZyA9IHtcbiAgICBzaG93U2hhcmU6IHRydWUsXG4gICAgc2hvd0Rvd25sb2FkOiB0cnVlLFxuICAgIHNob3dSZXBsYXk6IHRydWUsXG4gICAgc2hvd0V4aXQ6IHRydWVcbiAgfTtcbiAgcHJpdmF0ZSB1bmxpc3RlblRvdWNoU3RhcnQ6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgdW5saXN0ZW5Nb3VzZU1vdmU6ICgpID0+IHZvaWQ7XG4gIGlzUGF1c2VkID0gZmFsc2U7XG4gIHNob3dRdW1sUGxheWVyID0gZmFsc2U7XG4gIFF1bWxQbGF5ZXJDb25maWc6IGFueSA9IHt9O1xuICB2aWRlb0luc3RhbmNlOiBhbnk7XG4gIGN1cnJlbnRJbnRlcmNlcHRpb25UaW1lO1xuICBjdXJyZW50SW50ZXJjZXB0aW9uVUlJZDtcbiAgaXNGdWxsU2NyZWVuID0gZmFsc2U7XG4gIHBsYXllckFjdGlvbjogSUFjdGlvbjtcbiAgcHVibGljIGlzSW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgdmlkZW9QbGF5ZXJTZXJ2aWNlOiBTdW5iaXJkVmlkZW9QbGF5ZXJTZXJ2aWNlLFxuICAgIHB1YmxpYyB2aWV3ZXJTZXJ2aWNlOiBWaWV3ZXJTZXJ2aWNlLFxuICAgIHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgcmVuZGVyZXIyOiBSZW5kZXJlcjIsXG4gICAgcHVibGljIGVycm9yU2VydmljZTogRXJyb3JTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMucGxheWVyRXZlbnQgPSB0aGlzLnZpZXdlclNlcnZpY2UucGxheWVyRXZlbnQ7XG4gICAgdGhpcy52aWV3ZXJTZXJ2aWNlLnBsYXllckV2ZW50LnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3BhdXNlJykge1xuICAgICAgICB0aGlzLmlzUGF1c2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaG93Q29udHJvbHMgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICdwbGF5Jykge1xuICAgICAgICB0aGlzLmlzUGF1c2VkID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2xvYWRzdGFydCcpIHtcbiAgICAgICAgdGhpcy52aWV3ZXJTZXJ2aWNlLnJhaXNlU3RhcnRFdmVudChldmVudCk7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2VuZGVkJykge1xuICAgICAgICB0aGlzLnZpZXdlclNlcnZpY2UuZW5kUGFnZVNlZW4gPSB0cnVlO1xuICAgICAgICB0aGlzLnZpZXdlclNlcnZpY2UucmFpc2VFbmRFdmVudCgpO1xuICAgICAgICB0aGlzLnZpZXdTdGF0ZSA9ICdlbmQnO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb25lLXZhclxuICAgICAgICBsZXQgY29kZSA9IGVycm9yQ29kZS5jb250ZW50TG9hZEZhaWxzLFxuICAgICAgICAgIG1lc3NhZ2UgPSBlcnJvck1lc3NhZ2UuY29udGVudExvYWRGYWlscztcbiAgICAgICAgaWYgKHRoaXMudmlld2VyU2VydmljZS5pc0F2YWlsYWJsZUxvY2FsbHkpIHtcbiAgICAgICAgICAgIGNvZGUgPSBlcnJvckNvZGUuY29udGVudExvYWRGYWlscztcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBlcnJvck1lc3NhZ2UuY29udGVudExvYWRGYWlscztcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29kZSA9PT0gZXJyb3JDb2RlLmNvbnRlbnRMb2FkRmFpbHMpIHtcbiAgICAgICAgICB0aGlzLnNob3dDb250ZW50RXJyb3IgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmlld2VyU2VydmljZS5yYWlzZUV4Y2VwdGlvbkxvZyhjb2RlLCBtZXNzYWdlLCBldmVudCwgdGhpcy50cmFjZUlkKTtcblxuICAgICAgfVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1sZW5cbiAgICAgIGNvbnN0IGV2ZW50cyA9IFt7IHR5cGU6ICd2b2x1bWVjaGFuZ2UnLCB0ZWxlbWV0cnlFdmVudDogJ1ZPTFVNRV9DSEFOR0UnIH0sIHsgdHlwZTogJ3NlZWtpbmcnLCB0ZWxlbWV0cnlFdmVudDogJ0RSQUcnIH0sIHsgdHlwZTogJ2Z1bGxzY3JlZW4nLCB0ZWxlbWV0cnlFdmVudDogJ0ZVTExTQ1JFRU4nIH0sXG4gICAgICB7IHR5cGU6ICdyYXRlY2hhbmdlJywgdGVsZW1ldHJ5RXZlbnQ6ICdSQVRFX0NIQU5HRScgfV07XG4gICAgICBldmVudHMuZm9yRWFjaChkYXRhID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IGRhdGEudHlwZSkge1xuICAgICAgICAgIHRoaXMudmlld2VyU2VydmljZS5yYWlzZUhlYXJ0QmVhdEV2ZW50KGRhdGEudGVsZW1ldHJ5RXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OlRlbGVtZXRyeUV2ZW50JywgWyckZXZlbnQnXSlcbiAgb25UZWxlbWV0cnlFdmVudChldmVudCkge1xuICAgIHRoaXMudGVsZW1ldHJ5RXZlbnQuZW1pdChldmVudC5kZXRhaWwpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5wbGF5ZXJDb25maWcpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMucGxheWVyQ29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5wbGF5ZXJDb25maWcgPSBKU09OLnBhcnNlKHRoaXMucGxheWVyQ29uZmlnKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ludmFsaWQgcGxheWVyQ29uZmlnOiAnLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gICAgc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmlzUGF1c2VkKSB7XG4gICAgICAgIHRoaXMuc2hvd0NvbnRyb2xzID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSwgNTAwMCk7XG5cbiAgICB0aGlzLm5leHRDb250ZW50ID0gdGhpcy5wbGF5ZXJDb25maWc/LmNvbmZpZz8ubmV4dENvbnRlbnQ7XG4gICAgdGhpcy50cmFjZUlkID0gdGhpcy5wbGF5ZXJDb25maWcuY29uZmlnWyd0cmFjZUlkJ107XG4gICAgdGhpcy5zaWRlTWVudUNvbmZpZyA9IHsgLi4udGhpcy5zaWRlTWVudUNvbmZpZywgLi4udGhpcy5wbGF5ZXJDb25maWcuY29uZmlnLnNpZGVNZW51IH07XG4gICAgdGhpcy52aWRlb1BsYXllclNlcnZpY2UuaW5pdGlhbGl6ZSh0aGlzLnBsYXllckNvbmZpZyk7XG4gICAgdGhpcy52aWV3ZXJTZXJ2aWNlLmluaXRpYWxpemUodGhpcy5wbGF5ZXJDb25maWcpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvZmZsaW5lJywgdGhpcy5yYWlzZUludGVybmV0RGlzY29ubmVjdGlvbkVycm9yICwgdHJ1ZSk7XG4gICAgdGhpcy5RdW1sUGxheWVyQ29uZmlnLmNvbmZpZyA9IHRoaXMucGxheWVyQ29uZmlnLmNvbmZpZztcbiAgICB0aGlzLlF1bWxQbGF5ZXJDb25maWcuY29uZmlnLnNpZGVNZW51LmVuYWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuUXVtbFBsYXllckNvbmZpZy5jb250ZXh0ID0gdGhpcy5wbGF5ZXJDb25maWcuY29udGV4dDtcbiAgICB0aGlzLnNldFRlbGVtZXRyeU9iamVjdFJvbGx1cCh0aGlzLnBsYXllckNvbmZpZy5tZXRhZGF0YS5pZGVudGlmaWVyKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5hY3Rpb24pIHtcbiAgICAgIGlmICghdGhpcy5zaG93U