@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
347 lines • 59.9 kB
JavaScript
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-v9";
import * as i6 from "./components/video-player/video-player.component";
const _c0 = ["videoPlayer"];
const _c1 = function (a0) { return { "isVisible": a0 }; };
function SunbirdVideoPlayerComponent_sb_player_side_menu_icon_2_Template(rf, ctx) { if (rf & 1) {
const _r8 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "sb-player-side-menu-icon", 8);
i0.ɵɵlistener("sidebarMenuEvent", function SunbirdVideoPlayerComponent_sb_player_side_menu_icon_2_Template_sb_player_side_menu_icon_sidebarMenuEvent_0_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r7 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r7.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 _r10 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "video-player", 9);
i0.ɵɵlistener("questionSetData", function SunbirdVideoPlayerComponent_video_player_3_Template_video_player_questionSetData_0_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r9 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r9.questionSetData($event)); })("playerInstance", function SunbirdVideoPlayerComponent_video_player_3_Template_video_player_playerInstance_0_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r11 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r11.playerInstance($event)); });
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r2 = i0.ɵɵnextContext();
i0.ɵɵproperty("config", ctx_r2.playerConfig.config)("action", ctx_r2.playerAction);
} }
function SunbirdVideoPlayerComponent_sb_player_sidebar_4_Template(rf, ctx) { if (rf & 1) {
const _r13 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "sb-player-sidebar", 10);
i0.ɵɵlistener("sidebarEvent", function SunbirdVideoPlayerComponent_sb_player_sidebar_4_Template_sb_player_sidebar_sidebarEvent_0_listener($event) { i0.ɵɵrestoreView(_r13); const ctx_r12 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r12.sideBarEvents($event)); });
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r3 = i0.ɵɵnextContext();
i0.ɵɵproperty("playerConfig", ctx_r3.playerConfig)("title", ctx_r3.viewerService.contentName)("config", ctx_r3.sideMenuConfig);
} }
function SunbirdVideoPlayerComponent_sb_player_end_page_5_Template(rf, ctx) { if (rf & 1) {
const _r15 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "sb-player-end-page", 11);
i0.ɵɵlistener("playNextContent", function SunbirdVideoPlayerComponent_sb_player_end_page_5_Template_sb_player_end_page_playNextContent_0_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r14 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r14.playContent($event)); })("exitContent", function SunbirdVideoPlayerComponent_sb_player_end_page_5_Template_sb_player_end_page_exitContent_0_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r16 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r16.exitContent($event)); })("replayContent", function SunbirdVideoPlayerComponent_sb_player_end_page_5_Template_sb_player_end_page_replayContent_0_listener($event) { i0.ɵɵrestoreView(_r15); const ctx_r17 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r17.replayContent($event)); });
i0.ɵɵelementEnd();
} if (rf & 2) {
const ctx_r4 = i0.ɵɵnextContext();
i0.ɵɵproperty("playerConfig", ctx_r4.playerConfig)("contentName", ctx_r4.viewerService.contentName)("outcomeLabel", ctx_r4.viewerService.showScore ? "Score: " : "")("outcome", ctx_r4.viewerService.showScore ? ctx_r4.viewerService.scoreObtained + (ctx_r4.viewerService.maxScore && ctx_r4.viewerService.maxScore > 0 ? "/" + ctx_r4.viewerService.maxScore : "") : "")("nextContent", ctx_r4.nextContent)("userName", ctx_r4.viewerService.userName)("showExit", ctx_r4.sideMenuConfig.showExit)("timeSpentLabel", ctx_r4.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 _r20 = i0.ɵɵgetCurrentView();
i0.ɵɵelementStart(0, "div", 12, 13)(2, "quml-main-player", 14);
i0.ɵɵlistener("playerEvent", function SunbirdVideoPlayerComponent_div_7_Template_quml_main_player_playerEvent_2_listener($event) { i0.ɵɵrestoreView(_r20); const ctx_r19 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r19.qumlPlayerEvents($event)); });
i0.ɵɵelementEnd()();
} if (rf & 2) {
const ctx_r6 = i0.ɵɵnextContext();
i0.ɵɵadvance(2);
i0.ɵɵproperty("playerConfig", ctx_r6.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);
/* eslint-disable @typescript-eslint/dot-notation */
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,
type: 'QuestionSet',
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 */ SunbirdVideoPlayerComponent.ɵ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 */ SunbirdVideoPlayerComponent.ɵ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: [[1, "sunbird-video-player-container", 3, "ngClass"], ["videoPlayer", ""], ["class", "sb-player-side-menu-icon notVisible", "tabindex", "0", 3, "ngClass", "sidebarMenuEvent", 4, "ngIf"], [3, "config", "action", "questionSetData", "playerInstance", 4, "ngIf"], [3, "playerConfig", "title", "config", "sidebarEvent", 4, "ngIf"], ["tabindex", "0", 3, "playerConfig", "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, "ngClass", "sidebarMenuEvent"], [3, "config", "action", "questionSetData", "playerInstance"], [3, "playerConfig", "title", "config", "sidebarEvent"], ["tabindex", "0", 3, "playerConfig", "contentName", "outcomeLabel", "outcome", "nextContent", "userName", "showExit", "timeSpentLabel", "playNextContent", "exitContent", "replayContent"], [1, "sunbird-video-player-container"], ["qumlPlayer", ""], [3, "playerConfig", "playerEvent"]], template: function SunbirdVideoPlayerComponent_Template(rf, ctx) { if (rf & 1) {
i0.ɵɵelementStart(0, "div", 0, 1);
i0.ɵɵtemplate(2, SunbirdVideoPlayerComponent_sb_player_side_menu_icon_2_Template, 1, 3, "sb-player-side-menu-icon", 2);
i0.ɵɵtemplate(3, SunbirdVideoPlayerComponent_video_player_3_Template, 1, 2, "video-player", 3);
i0.ɵɵtemplate(4, SunbirdVideoPlayerComponent_sb_player_sidebar_4_Template, 1, 3, "sb-player-sidebar", 4);
i0.ɵɵtemplate(5, SunbirdVideoPlayerComponent_sb_player_end_page_5_Template, 1, 8, "sb-player-end-page", 5);
i0.ɵɵtemplate(6, SunbirdVideoPlayerComponent_sb_player_contenterror_6_Template, 1, 0, "sb-player-contenterror", 6);
i0.ɵɵelementEnd();
i0.ɵɵtemplate(7, SunbirdVideoPlayerComponent_div_7_Template, 3, 1, "div", 7);
} if (rf & 2) {
i0.ɵɵproperty("ngClass", ctx.showQumlPlayer ? "videoPlayerHide" : "videoPlayerShow");
i0.ɵɵadvance(2);
i0.ɵɵproperty("ngIf", ctx.viewState === "player");
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx.viewState === "player");
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx.viewState === "player");
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx.viewState === "end");
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx.showContentError);
i0.ɵɵadvance(1);
i0.ɵɵproperty("ngIf", ctx.showQumlPlayer);
} }, dependencies: [i4.NgClass, i4.NgIf, i3.ɵd, i3.ɵe, i3.ɵf, i3.ɵl, i5.ɵbh, 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:rgba(51,51,51,.5)} .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}}"] });
(function () { (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 [playerConfig]=\"playerConfig\"\n *ngIf=\"viewState ==='player'\"\n [title]=\"viewerService.contentName\"\n (sidebarEvent)=\"sideBarEvents($event)\" [config]=\"sideMenuConfig\"></sb-player-sidebar>\n <sb-player-end-page\n [playerConfig]=\"playerConfig\"\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:rgba(51,51,51,.5)}::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"] }]
}], function () { return [{ 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']
}] }); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VuYmlyZC12aWRlby1wbGF5ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvc3VuYmlyZC12aWRlby1wbGF5ZXIvc3JjL2xpYi9zdW5iaXJkLXZpZGVvLXBsYXllci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zdW5iaXJkLXZpZGVvLXBsYXllci9zcmMvbGliL3N1bmJpcmQtdmlkZW8tcGxheWVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDYyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQ2pFLFlBQVksRUFBYyxTQUFTLEVBQ3BDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBaUIsU0FBUyxFQUFHLFlBQVksRUFBaUIsTUFBTSx3Q0FBd0MsQ0FBQzs7Ozs7Ozs7Ozs7O0lDSDFHLG1EQUU0RTtJQUZPLDJPQUFvQixlQUFBLDRCQUFxQixDQUFBLElBQUM7SUFFakQsaUJBQTJCOzs7SUFBbkUseUVBQXVDOzs7O0lBQzNFLHVDQUEwTDtJQUE3SSxrTkFBbUIsZUFBQSw4QkFBdUIsQ0FBQSxJQUFDLG9NQUFtQixlQUFBLDhCQUFzQixDQUFBLElBQXpDO0lBQ3hGLGlCQUFlOzs7SUFEb0gsbURBQThCLCtCQUFBOzs7O0lBRWpLLDZDQUdpRTtJQUFqRSx1TkFBZ0IsZUFBQSw2QkFBcUIsQ0FBQSxJQUFDO0lBQTJCLGlCQUFvQjs7O0lBSGxFLGtEQUE2QiwyQ0FBQSxpQ0FBQTs7OztJQUloRCw4Q0FTa0M7SUFGNEIsK05BQW1CLGVBQUEsMkJBQW1CLENBQUEsSUFBQywwTUFDaEYsZUFBQSwyQkFBbUIsQ0FBQSxJQUQ2RCw4TUFDeEMsZUFBQSw2QkFBcUIsQ0FBQSxJQURtQjtJQUVuRSxpQkFBcUI7OztJQVJ2RCxrREFBNkIsaURBQUEsaUVBQUEsdU1BQUEsbUNBQUEsMkNBQUEsNENBQUEsa0RBQUE7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QUE0QjtRQUE1QixpREFBNEI7UUFHMUMsZUFBMkI7UUFBM0IsaURBQTJCO1FBWXJCLGVBQXlCO1FBQXpCLDhDQUF5QjtRQUNQLGVBQXNCO1FBQXRCLDJDQUFzQjtRQUdSLGVBQW9CO1FBQXBCLHlDQUFvQjs7dUZEUnBELDJCQUEyQjtjQUx2QyxTQUFTOzJCQUNFLHNCQUFzQjsyTEFLdkIsWUFBWTtrQkFBcEIsS0FBSztZQUNHLE1BQU07a0JBQWQsS0FBSztZQUNJLFdBQVc7a0JBQXBCLE1BQU07WUFDRyxjQUFjO2tCQUF2QixNQUFNO1lBQ3FDLGNBQWM7a0JBQXpELFNBQVM7bUJBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtZQTJFMUMsZ0JBQWdCO2tCQURmLFlBQVk7bUJBQUMseUJBQXlCLEVBQUUsQ0FBQyxRQUFRLENBQUM7WUFxTG5ELFdBQVc7a0JBRFYsWUFBWTttQkFBQyxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLFxuICBIb3N0TGlzdGVuZXIsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCwgQWZ0ZXJWaWV3SW5pdCwgUmVuZGVyZXIyLCBPbkRlc3Ryb3lcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFcnJvclNlcnZpY2UgLCBlcnJvckNvZGUgLCBlcnJvck1lc3NhZ2UsIElTaWRlQmFyRXZlbnQgfSBmcm9tICdAcHJvamVjdC1zdW5iaXJkL3N1bmJpcmQtcGxheWVyLXNkay12OSc7XG5cbmltcG9ydCB7IFBsYXllckNvbmZpZyB9IGZyb20gJy4vcGxheWVySW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBJQWN0aW9uIH0gZnJvbSAnLi9wbGF5ZXJJbnRlcmZhY2VzJztcbmltcG9ydCB7IFZpZXdlclNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3ZpZXdlci5zZXJ2aWNlJztcbmltcG9ydCB7IFN1bmJpcmRWaWRlb1BsYXllclNlcnZpY2UgfSBmcm9tICcuL3N1bmJpcmQtdmlkZW8tcGxheWVyLnNlcnZpY2UnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3VuYmlyZC12aWRlby1wbGF5ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vc3VuYmlyZC12aWRlby1wbGF5ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zdW5iaXJkLXZpZGVvLXBsYXllci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFN1bmJpcmRWaWRlb1BsYXllckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBwbGF5ZXJDb25maWc6IFBsYXllckNvbmZpZztcbiAgQElucHV0KCkgYWN0aW9uPzogSUFjdGlvbjtcbiAgQE91dHB1dCgpIHBsYXllckV2ZW50OiBFdmVudEVtaXR0ZXI8b2JqZWN0PjtcbiAgQE91dHB1dCgpIHRlbGVtZXRyeUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAVmlld0NoaWxkKCd2aWRlb1BsYXllcicsIHsgc3RhdGljOiB0cnVlIH0pIHZpZGVvUGxheWVyUmVmOiBFbGVtZW50UmVmO1xuICB2aWV3U3RhdGUgPSAncGxheWVyJztcbiAgcHVibGljIHRyYWNlSWQ6IHN0cmluZztcbiAgcHVibGljIG5leHRDb250ZW50OiBhbnk7XG4gIHNob3dDb250ZW50RXJyb3I6IGJvb2xlYW47XG4gIHNob3dDb250cm9scyA9IHRydWU7XG4gIHNpZGVNZW51Q29uZmlnID0ge1xuICAgIHNob3dTaGFyZTogdHJ1ZSxcbiAgICBzaG93RG93bmxvYWQ6IHRydWUsXG4gICAgc2hvd1JlcGxheTogdHJ1ZSxcbiAgICBzaG93RXhpdDogdHJ1ZVxuICB9O1xuICBwcml2YXRlIHVubGlzdGVuVG91Y2hTdGFydDogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSB1bmxpc3Rlbk1vdXNlTW92ZTogKCkgPT4gdm9pZDtcbiAgaXNQYXVzZWQgPSBmYWxzZTtcbiAgc2hvd1F1bWxQbGF5ZXIgPSBmYWxzZTtcbiAgUXVtbFBsYXllckNvbmZpZzogYW55ID0ge307XG4gIHZpZGVvSW5zdGFuY2U6IGFueTtcbiAgY3VycmVudEludGVyY2VwdGlvblRpbWU7XG4gIGN1cnJlbnRJbnRlcmNlcHRpb25VSUlkO1xuICBpc0Z1bGxTY3JlZW4gPSBmYWxzZTtcbiAgcGxheWVyQWN0aW9uOiBJQWN0aW9uO1xuICBwdWJsaWMgaXNJbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyB2aWRlb1BsYXllclNlcnZpY2U6IFN1bmJpcmRWaWRlb1BsYXllclNlcnZpY2UsXG4gICAgcHVibGljIHZpZXdlclNlcnZpY2U6IFZpZXdlclNlcnZpY2UsXG4gICAgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjI6IFJlbmRlcmVyMixcbiAgICBwdWJsaWMgZXJyb3JTZXJ2aWNlOiBFcnJvclNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5wbGF5ZXJFdmVudCA9IHRoaXMudmlld2VyU2VydmljZS5wbGF5ZXJFdmVudDtcbiAgICB0aGlzLnZpZXdlclNlcnZpY2UucGxheWVyRXZlbnQuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgIGlmIChldmVudC50eXBlID09PSAncGF1c2UnKSB7XG4gICAgICAgIHRoaXMuaXNQYXVzZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnNob3dDb250cm9scyA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3BsYXknKSB7XG4gICAgICAgIHRoaXMuaXNQYXVzZWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC50eXBlID09PSAnbG9hZHN0YXJ0Jykge1xuICAgICAgICB0aGlzLnZpZXdlclNlcnZpY2UucmFpc2VTdGFydEV2ZW50KGV2ZW50KTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC50eXBlID09PSAnZW5kZWQnKSB7XG4gICAgICAgIHRoaXMudmlld2VyU2VydmljZS5lbmRQYWdlU2VlbiA9IHRydWU7XG4gICAgICAgIHRoaXMudmlld2VyU2VydmljZS5yYWlzZUVuZEV2ZW50KCk7XG4gICAgICAgIHRoaXMudmlld1N0YXRlID0gJ2VuZCc7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC50eXBlID09PSAnZXJyb3InKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBvbmUtdmFyXG4gICAgICAgIGxldCBjb2RlID0gZXJyb3JDb2RlLmNvbnRlbnRMb2FkRmFpbHMsXG4gICAgICAgICAgbWVzc2FnZSA9IGVycm9yTWVzc2FnZS5jb250ZW50TG9hZEZhaWxzO1xuICAgICAgICBpZiAodGhpcy52aWV3ZXJTZXJ2aWNlLmlzQXZhaWxhYmxlTG9jYWxseSkge1xuICAgICAgICAgICAgY29kZSA9IGVycm9yQ29kZS5jb250ZW50TG9hZEZhaWxzO1xuICAgICAgICAgICAgbWVzc2FnZSA9IGVycm9yTWVzc2FnZS5jb250ZW50TG9hZEZhaWxzO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2RlID09PSBlcnJvckNvZGUuY29udGVudExvYWRGYWlscykge1xuICAgICAgICAgIHRoaXMuc2hvd0NvbnRlbnRFcnJvciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy52aWV3ZXJTZXJ2aWNlLnJhaXNlRXhjZXB0aW9uTG9nKGNvZGUsIG1lc3NhZ2UsIGV2ZW50LCB0aGlzLnRyYWNlSWQpO1xuXG4gICAgICB9XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxlblxuICAgICAgY29uc3QgZXZlbnRzID0gW3sgdHlwZTogJ3ZvbHVtZWNoYW5nZScsIHRlbGVtZXRyeUV2ZW50OiAnVk9MVU1FX0NIQU5HRScgfSwgeyB0eXBlOiAnc2Vla2luZycsIHRlbGVtZXRyeUV2ZW50OiAnRFJBRycgfSwgeyB0eXBlOiAnZnVsbHNjcmVlbicsIHRlbGVtZXRyeUV2ZW50OiAnRlVMTFNDUkVFTicgfSxcbiAgICAgIHsgdHlwZTogJ3JhdGVjaGFuZ2UnLCB0ZWxlbWV0cnlFdmVudDogJ1JBVEVfQ0hBTkdFJyB9XTtcbiAgICAgIGV2ZW50cy5mb3JFYWNoKGRhdGEgPT4ge1xuICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gZGF0YS50eXBlKSB7XG4gICAgICAgICAgdGhpcy52aWV3ZXJTZXJ2aWNlLnJhaXNlSGVhcnRCZWF0RXZlbnQoZGF0YS50ZWxlbWV0cnlFdmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6VGVsZW1ldHJ5RXZlbnQnLCBbJyRldmVudCddKVxuICBvblRlbGVtZXRyeUV2ZW50KGV2ZW50KSB7XG4gICAgdGhpcy50ZWxlbWV0cnlFdmVudC5lbWl0KGV2ZW50LmRldGFpbCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmlzSW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIGlmICh0aGlzLnBsYXllckNvbmZpZykge1xuICAgIGlmICh0eXBlb2YgdGhpcy5wbGF5ZXJDb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnBsYXllckNvbmZpZyA9IEpTT04ucGFyc2UodGhpcy5wbGF5ZXJDb25maWcpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignSW52YWxpZCBwbGF5ZXJDb25maWc6ICcsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgICBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuaXNQYXVzZWQpIHtcbiAgICAgICAgdGhpcy5zaG93Q29udHJvbHMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9LCA1MDAwKTtcblxuICAgIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9kb3Qtbm90YXRpb24gKi9cbiAgICB0aGlzLm5leHRDb250ZW50ID0gdGhpcy5wbGF5ZXJDb25maWc/LmNvbmZpZz8ubmV4dENvbnRlbnQ7XG4gICAgdGhpcy50cmFjZUlkID0gdGhpcy5wbGF5ZXJDb25maWcuY29uZmlnWyd0cmFjZUlkJ107XG4gICAgdGhpcy5zaWRlTWVudUNvbmZpZyA9IHsgLi4udGhpcy5zaWRlTWVudUNvbmZpZywgLi4udGhpcy5wbGF5ZXJDb25maWcuY29uZmlnLnNpZGVNZW51IH07XG4gICAgdGhpcy52aWRlb1BsYXllclNlcnZpY2UuaW5pdGlhbGl6ZSh0aGlzLnBsYXllckNvbmZpZyk7XG4gICAgdGhpcy52aWV3ZXJTZXJ2aWNlLmluaXRpYWxpemUodGhpcy5wbGF5ZXJDb25maWcpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdvZmZsaW5lJywgdGhpcy5yYWlzZUludGVybmV0RGlzY29ubmVjdGlvbkVycm9yICwgdHJ1ZSk7XG4gICAgdGhpcy5RdW1sUGxheWVyQ29uZmlnLmNvbmZpZyA9IHRoaXMucGxheWVyQ29uZmlnLmNvbmZpZztcbiAgICB0aGlzLlF1bWxQbGF5ZXJDb25maWcuY29uZmlnLnNpZGVNZW51LmVuYWJsZSA9IGZhbHNlO1xuICAgIHRoaXMuUXVtbFBsYXllckNvbmZpZy5jb250ZXh0ID0gdGhpcy5wbGF5ZXJDb25maWcuY29udGV4dDtcbiAgICB0aGlzLnNldFRlbGVtZXRyeU9iamVjdFJvbGx1cCh0aGlzLnBsYXllckNvbmZpZy5tZXRhZGF0YS5pZGVudGlmaWVyKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5hY3Rpb24pIHtcbiAgICAgIGlmICghdGhpcy5zaG93UXVtbFBsYXllcikge1xuICAgICAgICB0aGlzLnBsYXllckFjdGlvbiA9IHRoaXMuYWN0aW9uO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlcz8ucGxheWVyQ29uZmlnPy5maXJzdENoYW5nZSAmJiB0aGlzLmlzSW5pdGlhbGl6ZWQpIHtcbiAgICAgIC8vIENhbGxpbmcgZm9yIHdlYiBjb21wb25lbnQgZXhwbGljaXRseSBhbmQgbGlmZSBjeWNsZSB3b3JrcyBpbiBkaWZmZXJlbnQgb3JkZXJcbiAgICAgIHRoaXMubmdPbkluaXQoKTtcbiAg