UNPKG

@dicdikshaorg/epub-player-v9

Version:

Contains Epub player library components powered by angular. These components are designed to be used in sunbird consumption platforms *(mobile app, web portal, offline desktop app)* to drive reusability, maintainability hence reducing the redundant develo

186 lines 23.7 kB
import { __awaiter } from "tslib"; import { Injectable, EventEmitter } from '@angular/core'; import { EpubPlayerService } from '../../sunbird-epub-player.service'; import { UtilService } from '../utilService/util.service'; import { eventName, telemetryType } from '../../sunbird-epub.constant'; import { HttpClient } from '@angular/common/http'; import * as i0 from "@angular/core"; import * as i1 from "../utilService/util.service"; import * as i2 from "../../sunbird-epub-player.service"; import * as i3 from "@angular/common/http"; export class ViwerService { constructor(utilService, epubPlayerService, http) { this.utilService = utilService; this.epubPlayerService = epubPlayerService; this.http = http; this.currentIndex = 0; this.totalNumberOfPages = 0; this.endPageSeen = false; this.timeSpent = '0:0'; this.version = '1.0'; this.playerEvent = new EventEmitter(); this.isAvailableLocally = false; this.isEndEventRaised = false; } initialize({ context, config, metadata }) { this.epubPlayerStartTime = this.epubLastPageTime = new Date().getTime(); this.totalNumberOfPages = 0; this.currentIndex = 0; this.contentName = metadata.name; this.identifier = metadata.identifier; this.artifactUrl = metadata.artifactUrl; this.isAvailableLocally = metadata.isAvailableLocally; if (this.isAvailableLocally) { const basePath = (metadata.streamingUrl) ? (metadata.streamingUrl) : (metadata.basePath || metadata.baseDir); this.src = `${basePath}/${metadata.artifactUrl}`; } else { this.src = metadata.streamingUrl || metadata.artifactUrl; } if (context.userData) { const { userData: { firstName, lastName } } = context; this.userName = firstName === lastName ? firstName : `${firstName} ${lastName}`; } this.metaData = { pagesVisited: [], totalPages: 0, duration: [], zoom: [], rotation: [] }; this.showDownloadPopup = false; this.endPageSeen = false; } raiseStartEvent(event) { this.currentIndex = event.items[0].index; const duration = new Date().getTime() - this.epubPlayerStartTime; const startEvent = { eid: 'START', ver: this.version, edata: { type: 'START', currentPage: this.currentIndex, duration }, metaData: this.metaData }; this.playerEvent.emit(startEvent); this.epubLastPageTime = this.epubPlayerStartTime = new Date().getTime(); this.epubPlayerService.start(duration); } raiseHeartBeatEvent(event, teleType) { if (event.data) { this.currentIndex = event.data.index; } const eventType = event.type ? event.type : event; const heartBeatEvent = { eid: 'HEARTBEAT', ver: this.version, edata: { type: eventType, currentPage: this.currentIndex }, metaData: this.metaData }; this.playerEvent.emit(heartBeatEvent); if (telemetryType.IMPRESSION === teleType) { this.epubPlayerService.impression(this.currentIndex); } if (telemetryType.INTERACT === teleType) { this.epubPlayerService.interact(eventType.toLowerCase(), this.currentIndex); } } raiseEndEvent(event) { if (!this.isEndEventRaised) { this.currentIndex = event.data.index; const percentage = event.data.percentage || 0; if (event.data.percentage) { this.endPageSeen = true; } const duration = new Date().getTime() - this.epubPlayerStartTime; this.metaData.duration = duration; this.metaData.totalPages = this.totalNumberOfPages; const endEvent = { eid: 'END', ver: this.version, edata: { type: 'END', currentPage: event.data.index, totalPages: this.totalNumberOfPages, duration }, metaData: this.metaData }; this.playerEvent.emit(endEvent); const visitedlength = this.currentIndex; this.timeSpent = this.utilService.getTimeSpentText(this.epubPlayerStartTime); this.epubPlayerService.end(duration, percentage, this.currentIndex, this.endPageSeen); } } raiseExceptionLog(errorCode, pageIndex, errorType, traceId, stacktrace) { const exceptionLogEvent = { eid: 'ERROR', edata: { err: errorCode, errtype: errorType, requestid: traceId || '', stacktrace } }; this.playerEvent.emit(exceptionLogEvent); this.epubPlayerService.error(errorCode, errorType, pageIndex, stacktrace); } isValidEpubSrc(src) { return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { this.http.get(src, { responseType: 'blob' }).toPromise().then((res) => { resolve(res); }).catch((error) => { reject(error); }); })); } raiseHeartBeatEventNew(type, telemetryType1, pageId, nextContentId) { const hearBeatEvent = { eid: 'HEARTBEAT', ver: this.version, edata: { type, currentPage: this.currentIndex }, metaData: this.metaData }; if (type === eventName.nextContentPlay && nextContentId) { hearBeatEvent.edata.nextContentId = nextContentId; } // if (this.isSectionsAvailable) { // hearBeatEvent.edata.sectionId = this.questionSetId; // } this.playerEvent.emit(hearBeatEvent); if (telemetryType.INTERACT === telemetryType1) { this.epubPlayerService.interact(type.toLowerCase(), pageId); } else if (telemetryType.IMPRESSION === telemetryType1) { this.epubPlayerService.impression(pageId); } } } /** @nocollapse */ ViwerService.ɵprov = i0.ɵɵdefineInjectable({ factory: function ViwerService_Factory() { return new ViwerService(i0.ɵɵinject(i1.UtilService), i0.ɵɵinject(i2.EpubPlayerService), i0.ɵɵinject(i3.HttpClient)); }, token: ViwerService, providedIn: "root" }); /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ ViwerService.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] } ]; /** * @type {function(): !Array<(null|{ * type: ?, * decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>), * })>} * @nocollapse */ ViwerService.ctorParameters = () => [ { type: UtilService }, { type: EpubPlayerService }, { type: HttpClient } ]; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidml3ZXItc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N1bmJpcmQtZXB1Yi1wbGF5ZXIvc3JjL2xpYi9zZXJ2aWNlcy92aWV3ZXJTZXJ2aWNlL3Zpd2VyLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7QUFLbEQsTUFBTSxPQUFPLFlBQVk7SUFvQnZCLFlBQ1UsV0FBd0IsRUFDeEIsaUJBQW9DLEVBQ3BDLElBQWdCO1FBRmhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsU0FBSSxHQUFKLElBQUksQ0FBWTtRQXJCbkIsaUJBQVksR0FBRyxDQUFDLENBQUM7UUFDakIsdUJBQWtCLEdBQUcsQ0FBQyxDQUFDO1FBR3ZCLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDakIsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNqQixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFTdEMsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQzNCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztJQUs1QixDQUFDO0lBRUwsVUFBVSxDQUFDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQWdCO1FBQ3BELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENB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SUFBSSxhQUFhLENBQUMsUUFBUSxLQUFLLGNBQWMsRUFBRTtZQUM3QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztTQUM3RDthQUFNLElBQUksYUFBYSxDQUFDLFVBQVUsS0FBSyxjQUFjLEVBQUU7WUFDdEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUMzQztJQUVILENBQUM7Ozs7O1lBbkxGLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7Ozs7Ozs7OztZQU5RLFdBQVc7WUFEWCxpQkFBaUI7WUFHakIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQbGF5ZXJDb25maWcgfSBmcm9tICcuLi8uLi9zdW5iaXJkLWVwdWItcGxheWVyLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEVwdWJQbGF5ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc3VuYmlyZC1lcHViLXBsYXllci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXRpbFNlcnZpY2UgfSBmcm9tICcuLi91dGlsU2VydmljZS91dGlsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBldmVudE5hbWUsIHRlbGVtZXRyeVR5cGUgfSBmcm9tICcuLi8uLi9zdW5iaXJkLWVwdWIuY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVml3ZXJTZXJ2aWNlIHtcclxuXHJcbiAgcHVibGljIGN1cnJlbnRJbmRleCA9IDA7XHJcbiAgcHVibGljIHRvdGFsTnVtYmVyT2ZQYWdlcyA9IDA7XHJcbiAgcHVibGljIGVwdWJQbGF5ZXJTdGFydFRpbWU6IG51bWJlcjtcclxuICBwdWJsaWMgZXB1Ykxhc3RQYWdlVGltZTogbnVtYmVyO1xyXG4gIHB1YmxpYyBlbmRQYWdlU2VlbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB0aW1lU3BlbnQgPSAnMDowJztcclxuICBwcml2YXRlIHZlcnNpb24gPSAnMS4wJztcclxuICBwdWJsaWMgcGxheWVyRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBwdWJsaWMgY29udGVudE5hbWU6IHN0cmluZztcclxuICBwdWJsaWMgbG9hZGluZ1Byb2dyZXNzOiBudW1iZXI7XHJcbiAgcHVibGljIHNob3dEb3dubG9hZFBvcHVwOiBib29sZWFuO1xyXG4gIHB1YmxpYyBzcmM6IHN0cmluZztcclxuICBwdWJsaWMgdXNlck5hbWU6IHN0cmluZztcclxuICBwdWJsaWMgbWV0YURhdGE6IGFueTtcclxuICBwdWJsaWMgaWRlbnRpZmllcjogYW55O1xyXG4gIHB1YmxpYyBhcnRpZmFjdFVybDogYW55O1xyXG4gIHB1YmxpYyBpc0F2YWlsYWJsZUxvY2FsbHkgPSBmYWxzZTtcclxuICBwdWJsaWMgaXNFbmRFdmVudFJhaXNlZCA9IGZhbHNlO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSB1dGlsU2VydmljZTogVXRpbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGVwdWJQbGF5ZXJTZXJ2aWNlOiBFcHViUGxheWVyU2VydmljZSxcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudFxyXG4gICkgeyB9XHJcblxyXG4gIGluaXRpYWxpemUoeyBjb250ZXh0LCBjb25maWcsIG1ldGFkYXRhIH06IFBsYXllckNvbmZpZykge1xyXG4gICAgdGhpcy5lcHViUGxheWVyU3RhcnRUaW1lID0gdGhpcy5lcHViTGFzdFBhZ2VUaW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICB0aGlzLnRvdGFsTnVtYmVyT2ZQYWdlcyA9IDA7XHJcbiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XHJcbiAgICB0aGlzLmNvbnRlbnROYW1lID0gbWV0YWRhdGEubmFtZTtcclxuICAgIHRoaXMuaWRlbnRpZmllciA9IG1ldGFkYXRhLmlkZW50aWZpZXI7XHJcbiAgICB0aGlzLmFydGlmYWN0VXJsID0gbWV0YWRhdGEuYXJ0aWZhY3RVcmw7XHJcbiAgICB0aGlzLmlzQXZhaWxhYmxlTG9jYWxseSA9IG1ldGFkYXRhLmlzQXZhaWxhYmxlTG9jYWxseTtcclxuICAgIGlmICh0aGlzLmlzQXZhaWxhYmxlTG9jYWxseSkge1xyXG4gICAgICBjb25zdCBiYXNlUGF0aCA9IChtZXRhZGF0YS5zdHJlYW1pbmdVcmwpID8gKG1ldGFkYXRhLnN0cmVhbWluZ1VybCkgOiAobWV0YWRhdGEuYmFzZVBhdGggfHwgbWV0YWRhdGEuYmFzZURpcik7XHJcbiAgICAgIHRoaXMuc3JjID0gYCR7YmFzZVBhdGh9LyR7bWV0YWRhdGEuYXJ0aWZhY3RVcmx9YDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc3JjID0gbWV0YWRhdGEuc3RyZWFtaW5nVXJsIHx8IG1ldGFkYXRhLmFydGlmYWN0VXJsO1xyXG4gICAgfVxyXG4gICAgaWYgKGNvbnRleHQudXNlckRhdGEpIHtcclxuICAgICAgY29uc3QgeyB1c2VyRGF0YTogeyBmaXJzdE5hbWUsIGxhc3ROYW1lIH0gfSA9IGNvbnRleHQ7XHJcbiAgICAgIHRoaXMudXNlck5hbWUgPSBmaXJzdE5hbWUgPT09IGxhc3ROYW1lID8gZmlyc3ROYW1lIDogYCR7Zmlyc3ROYW1lfSAke2xhc3ROYW1lfWA7XHJcbiAgICB9XHJcbiAgICB0aGlzLm1ldGFEYXRhID0ge1xyXG4gICAgICBwYWdlc1Zpc2l0ZWQ6IFtdLFxyXG4gICAgICB0b3RhbFBhZ2VzOiAwLFxyXG4gICAgICBkdXJhdGlvbjogW10sXHJcbiAgICAgIHpvb206IFtdLFxyXG4gICAgICByb3RhdGlvbjogW11cclxuICAgIH07XHJcbiAgICB0aGlzLnNob3dEb3dubG9hZFBvcHVwID0gZmFsc2U7XHJcbiAgICB0aGlzLmVuZFBhZ2VTZWVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICByYWlzZVN0YXJ0RXZlbnQoZXZlbnQpIHtcclxuICAgIHRoaXMuY3VycmVudEluZGV4ID0gZXZlbnQuaXRlbXNbMF0uaW5kZXg7XHJcbiAgICBjb25zdCBkdXJhdGlvbiA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gdGhpcy5lcHViUGxheWVyU3RhcnRUaW1lO1xyXG4gICAgY29uc3Qgc3RhcnRFdmVudCA9IHtcclxuICAgICAgZWlkOiAnU1RBUlQnLFxyXG4gICAgICB2ZXI6IHRoaXMudmVyc2lvbixcclxuICAgICAgZWRhdGE6IHtcclxuICAgICAgICB0eXBlOiAnU1RBUlQnLFxyXG4gICAgICAgIGN1cnJlbnRQYWdlOiB0aGlzLmN1cnJlbnRJbmRleCxcclxuICAgICAgICBkdXJhdGlvblxyXG4gICAgICB9LFxyXG4gICAgICBtZXRhRGF0YTogdGhpcy5tZXRhRGF0YVxyXG4gICAgfTtcclxuICAgIHRoaXMucGxheWVyRXZlbnQuZW1pdChzdGFydEV2ZW50KTtcclxuICAgIHRoaXMuZXB1Ykxhc3RQYWdlVGltZSA9IHRoaXMuZXB1YlBsYXllclN0YXJ0VGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgdGhpcy5lcHViUGxheWVyU2VydmljZS5zdGFydChkdXJhdGlvbik7XHJcbiAgfVxyXG5cclxuICByYWlzZUhlYXJ0QmVhdEV2ZW50KGV2ZW50LCB0ZWxlVHlwZT8pIHtcclxuICAgIGlmIChldmVudC5kYXRhKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gZXZlbnQuZGF0YS5pbmRleDtcclxuICAgIH1cclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IGV2ZW50LnR5cGUgPyBldmVudC50eXBlIDogZXZlbnQ7XHJcbiAgICBjb25zdCBoZWFydEJlYXRFdmVudCA9IHtcclxuICAgICAgZWlkOiAnSEVBUlRCRUFUJyxcclxuICAgICAgdmVyOiB0aGlzLnZlcnNpb24sXHJcbiAgICAgIGVkYXRhOiB7XHJcbiAgICAgICAgdHlwZTogZXZlbnRUeXBlLFxyXG4gICAgICAgIGN1cnJlbnRQYWdlOiB0aGlzLmN1cnJlbnRJbmRleFxyXG4gICAgICB9LFxyXG4gICAgICBtZXRhRGF0YTogdGhpcy5tZXRhRGF0YVxyXG4gICAgfTtcclxuICAgIHRoaXMucGxheWVyRXZlbnQuZW1pdChoZWFydEJlYXRFdmVudCk7XHJcbiAgICBpZiAodGVsZW1ldHJ5VHlwZS5JTVBSRVNTSU9OID09PSB0ZWxlVHlwZSkge1xyXG4gICAgICB0aGlzLmVwdWJQbGF5ZXJTZXJ2aWNlLmltcHJlc3Npb24odGhpcy5jdXJyZW50SW5kZXgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRlbGVtZXRyeVR5cGUuSU5URVJBQ1QgPT09IHRlbGVUeXBlKSB7XHJcbiAgICAgIHRoaXMuZXB1YlBsYXllclNlcnZpY2UuaW50ZXJhY3QoZXZlbnRUeXBlLnRvTG93ZXJDYXNlKCksIHRoaXMuY3VycmVudEluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJhaXNlRW5kRXZlbnQoZXZlbnQpIHtcclxuICAgIGlmICghdGhpcy5pc0VuZEV2ZW50UmFpc2VkKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gZXZlbnQuZGF0YS5pbmRleDtcclxuICAgICAgY29uc3QgcGVyY2VudGFnZSA9IGV2ZW50LmRhdGEucGVyY2VudGFnZSB8fCAwO1xyXG4gICAgICBpZiAoZXZlbnQuZGF0YS5wZXJjZW50YWdlKSB7XHJcbiAgICAgICAgdGhpcy5lbmRQYWdlU2VlbiA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZHVyYXRpb24gPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIHRoaXMuZXB1YlBsYXllclN0YXJ0VGltZTtcclxuICAgICAgdGhpcy5tZXRhRGF0YS5kdXJhdGlvbiA9IGR1cmF0aW9uO1xyXG4gICAgICB0aGlzLm1ldGFEYXRhLnRvdGFsUGFnZXMgPSB0aGlzLnRvdGFsTnVtYmVyT2ZQYWdlcztcclxuICAgICAgY29uc3QgZW5kRXZlbnQgPSB7XHJcbiAgICAgICAgZWlkOiAnRU5EJyxcclxuICAgICAgICB2ZXI6IHRoaXMudmVyc2lvbixcclxuICAgICAgICBlZGF0YToge1xyXG4gICAgICAgICAgdHlwZTogJ0VORCcsXHJcbiAgICAgICAgICBjdXJyZW50UGFnZTogZXZlbnQuZGF0YS5pbmRleCxcclxuICAgICAgICAgIHRvdGFsUGFnZXM6IHRoaXMudG90YWxOdW1iZXJPZlBhZ2VzLFxyXG4gICAgICAgICAgZHVyYXRpb25cclxuICAgICAgICB9LFxyXG4gICAgICAgIG1ldGFEYXRhOiB0aGlzLm1ldGFEYXRhXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMucGxheWVyRXZlbnQuZW1pdChlbmRFdmVudCk7XHJcbiAgICAgIGNvbnN0IHZpc2l0ZWRsZW5ndGggPSB0aGlzLmN1cnJlbnRJbmRleDtcclxuICAgICAgdGhpcy50aW1lU3BlbnQgPSB0aGlzLnV0aWxTZXJ2aWNlLmdldFRpbWVTcGVudFRleHQodGhpcy5lcHViUGxheWVyU3RhcnRUaW1lKTtcclxuICAgICAgdGhpcy5lcHViUGxheWVyU2VydmljZS5lbmQoZHVyYXRpb24sIHBlcmNlbnRhZ2UsIHRoaXMuY3VycmVudEluZGV4LCB0aGlzLmVuZFBhZ2VTZWVuKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICByYWlzZUV4Y2VwdGlvbkxvZyhlcnJvckNvZGU6IHN0cmluZyAsIHBhZ2VJbmRleCwgZXJyb3JUeXBlOiBzdHJpbmcgLCB0cmFjZUlkICwgc3RhY2t0cmFjZTogRXJyb3IgKSB7XHJcbiAgICBjb25zdCBleGNlcHRpb25Mb2dFdmVudCA9IHtcclxuICAgICAgZWlkOiAnRVJST1InLFxyXG4gICAgICBlZGF0YToge1xyXG4gICAgICAgICAgZXJyOiBlcnJvckNvZGUsXHJcbiAgICAgICAgICBlcnJ0eXBlOiBlcnJvclR5cGUsXHJcbiAgICAgICAgICByZXF1ZXN0aWQ6IHRyYWNlSWQgfHwgJycsXHJcbiAgICAgICAgICBzdGFja3RyYWNlXHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aGlzLnBsYXllckV2ZW50LmVtaXQoZXhjZXB0aW9uTG9nRXZlbnQpO1xyXG4gICAgdGhpcy5lcHViUGxheWVyU2VydmljZS5lcnJvcihlcnJvckNvZGUgLCBlcnJvclR5cGUsIHBhZ2VJbmRleCAsIHN0YWNrdHJhY2UpO1xyXG4gIH1cclxuXHJcbiAgaXNWYWxpZEVwdWJTcmMoc3JjKTogUHJvbWlzZTxCbG9iPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUgLCByZWplY3QpID0+IHtcclxuICAgICAgdGhpcy5odHRwLmdldChzcmMsIHsgcmVzcG9uc2VUeXBlOiAnYmxvYicgfSkudG9Qcm9taXNlKCkudGhlbigocmVzKSA9PiB7XHJcbiAgICAgICAgcmVzb2x2ZShyZXMpO1xyXG4gICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcclxuICAgICAgICByZWplY3QoZXJyb3IpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIHJhaXNlSGVhcnRCZWF0RXZlbnROZXcodHlwZTogc3RyaW5nLCB0ZWxlbWV0cnlUeXBlMTogc3RyaW5nLCBwYWdlSWQ6IG51bWJlciB8IHN0cmluZywgbmV4dENvbnRlbnRJZD86IHN0cmluZykge1xyXG4gICAgY29uc3QgaGVhckJlYXRFdmVudDogYW55ID0ge1xyXG4gICAgICBlaWQ6ICdIRUFSVEJFQVQnLFxyXG4gICAgICB2ZXI6IHRoaXMudmVyc2lvbixcclxuICAgICAgZWRhdGE6IHtcclxuICAgICAgICB0eXBlLFxyXG4gICAgICAgIGN1cnJlbnRQYWdlOiB0aGlzLmN1cnJlbnRJbmRleFxyXG4gICAgICB9LFxyXG4gICAgICBtZXRhRGF0YTogdGhpcy5tZXRhRGF0YVxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodHlwZSA9PT0gZXZlbnROYW1lLm5leHRDb250ZW50UGxheSAmJiBuZXh0Q29udGVudElkKSB7XHJcbiAgICAgIGhlYXJCZWF0RXZlbnQuZWRhdGEubmV4dENvbnRlbnRJZCA9IG5leHRDb250ZW50SWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaWYgKHRoaXMuaXNTZWN0aW9uc0F2YWlsYWJsZSkge1xyXG4gICAgLy8gICBoZWFyQmVhdEV2ZW50LmVkYXRhLnNlY3Rpb25JZCA9IHRoaXMucXVlc3Rpb25TZXRJZDtcclxuICAgIC8vIH1cclxuXHJcbiAgICB0aGlzLnBsYXllckV2ZW50LmVtaXQoaGVhckJlYXRFdmVudCk7XHJcbiAgICBpZiAodGVsZW1ldHJ5VHlwZS5JTlRFUkFDVCA9PT0gdGVsZW1ldHJ5VHlwZTEpIHtcclxuICAgICAgdGhpcy5lcHViUGxheWVyU2VydmljZS5pbnRlcmFjdCh0eXBlLnRvTG93ZXJDYXNlKCksIHBhZ2VJZCk7XHJcbiAgICB9IGVsc2UgaWYgKHRlbGVtZXRyeVR5cGUuSU1QUkVTU0lPTiA9PT0gdGVsZW1ldHJ5VHlwZTEpIHtcclxuICAgICAgdGhpcy5lcHViUGxheWVyU2VydmljZS5pbXByZXNzaW9uKHBhZ2VJZCk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxufVxyXG4iXX0=