UNPKG

@tekdi/sunbird-quml-player

Version:

The QuML player library components are 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 d

189 lines 25.7 kB
import { EventEmitter, Injectable } from '@angular/core'; import { CsTelemetryModule } from '@project-sunbird/client-services/telemetry'; import * as _ from 'lodash-es'; import * as i0 from "@angular/core"; import * as i1 from "./util-service"; export class QumlLibraryService { constructor(utilService) { this.utilService = utilService; this.isSectionsAvailable = false; this.telemetryEvent = new EventEmitter(); } async initializeTelemetry(config, parentConfig) { if (!_.has(config, 'context') || _.isEmpty(config, 'context')) { return; } this.duration = new Date().getTime(); this.context = config?.context; this.contentSessionId = this.utilService.uniqueId(); this.playSessionId = this.utilService.uniqueId(); this.channel = this.context.channel || ''; this.pdata = this.context.pdata; this.sid = this.context.sid; this.uid = this.context.uid; this.rollup = this.context.contextRollup; this.config = config; this.isSectionsAvailable = parentConfig?.isSectionsAvailable; /* istanbul ignore else */ if (!CsTelemetryModule.instance.isInitialised && this.context) { const telemetryConfig = { pdata: this.context.pdata, env: 'contentplayer', channel: this.context.channel, did: this.context.did, authtoken: this.context.authToken || '', uid: this.context.uid || '', sid: this.context.sid, batchsize: 20, mode: this.context.mode, host: this.context.host || '', endpoint: this.context.endpoint || '/data/v3/telemetry', tags: this.context.tags, cdata: (this.context.cdata || []).concat([ { id: this.contentSessionId, type: 'ContentSession' }, { id: this.playSessionId, type: 'PlaySession' }, { id: '2.0', type: 'PlayerVersion' } ]) }; await CsTelemetryModule.instance.init({}); CsTelemetryModule.instance.telemetryService.initTelemetry({ config: telemetryConfig, userOrgDetails: {} }); } this.telemetryObject = { id: parentConfig.identifier, type: 'Content', ver: parentConfig?.metadata?.pkgVersion ? parentConfig.metadata.pkgVersion.toString() : '', rollup: this.context?.objectRollup || {} }; } startAssesEvent(assesEvent) { if (!_.isEmpty(this.context)) { CsTelemetryModule.instance.telemetryService.raiseAssesTelemetry(assesEvent, this.getEventOptions()); } } start(duration) { if (!_.isEmpty(this.context)) { CsTelemetryModule.instance.telemetryService.raiseStartTelemetry({ options: this.getEventOptions(), edata: { type: 'content', mode: 'play', pageid: '', duration: Number((duration / 1e3).toFixed(2)) } }); } } response(identifier, version, type, option) { if (!_.isEmpty(this.context)) { const responseEvent = { target: { id: identifier, ver: version, type: type }, type: 'CHOOSE', values: [{ option }] }; CsTelemetryModule.instance.telemetryService.raiseResponseTelemetry(responseEvent, this.getEventOptions()); } } summary(eData) { if (!_.isEmpty(this.context)) { CsTelemetryModule.instance.telemetryService.raiseSummaryTelemetry(eData, this.getEventOptions()); } } end(duration, currentQuestionIndex, totalNoofQuestions, visitedQuestions, endpageseen, score) { if (!_.isEmpty(this.context)) { const durationSec = Number((duration / 1e3).toFixed(2)); CsTelemetryModule.instance.telemetryService.raiseEndTelemetry({ edata: { type: 'content', mode: 'play', pageid: 'sunbird-player-Endpage', summary: [ { progress: Number(((currentQuestionIndex / totalNoofQuestions) * 100).toFixed(0)) }, { totalNoofQuestions: totalNoofQuestions }, { visitedQuestions: visitedQuestions, }, { endpageseen }, { score }, ], duration: durationSec }, options: this.getEventOptions() }); } } interact(id, currentPage, currentQuestionDetails) { if (!_.isEmpty(this.context)) { CsTelemetryModule.instance.telemetryService.raiseInteractTelemetry({ options: this.getEventOptions(), edata: { type: 'TOUCH', subtype: '', id, pageid: currentPage + '' } }); } } heartBeat(data) { if (!_.isEmpty(this.context)) { CsTelemetryModule.instance.playerTelemetryService.onHeartBeatEvent(data, {}); } } impression(currentPage) { if (!_.isEmpty(this.context)) { CsTelemetryModule.instance.telemetryService.raiseImpressionTelemetry({ options: this.getEventOptions(), edata: { type: 'workflow', subtype: '', pageid: currentPage + '', uri: '' } }); } } error(error, edata) { if (!_.isEmpty(this.context)) { CsTelemetryModule.instance.telemetryService.raiseErrorTelemetry({ options: this.getEventOptions(), edata: { err: 'LOAD', errtype: 'content', stacktrace: (error?.toString()) || '' } }); } } getEventOptions() { const options = { object: this.telemetryObject, context: { channel: this.channel || '', pdata: this.pdata, env: 'contentplayer', sid: this.sid, uid: this.uid, cdata: (this.context?.cdata || []).concat([{ id: this.contentSessionId, type: 'ContentSession' }, { id: this.playSessionId, type: 'PlaySession' }, { id: '2.0', type: 'PlayerVersion' }]), rollup: this.rollup || {} } }; /* istanbul ignore else */ if (this.isSectionsAvailable) { options.context.cdata.push({ id: this.config.metadata.identifier, type: 'SectionId' }); } return options; } /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: QumlLibraryService, deps: [{ token: i1.UtilService }], target: i0.ɵɵFactoryTarget.Injectable }); } /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: QumlLibraryService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: QumlLibraryService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: function () { return [{ type: i1.UtilService }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVtbC1saWJyYXJ5LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9xdW1sLWxpYnJhcnkvc3JjL2xpYi9xdW1sLWxpYnJhcnkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUcvRSxPQUFPLEtBQUssQ0FBQyxNQUFNLFdBQVcsQ0FBQzs7O0FBSy9CLE1BQU0sT0FBTyxrQkFBa0I7SUFlN0IsWUFBbUIsV0FBd0I7UUFBeEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFYM0Msd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQzVCLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQVVNLENBQUM7SUFFaEQsS0FBSyxDQUFDLG1CQUFtQixDQUFDLE1BQXdCLEVBQUUsWUFBMkI7UUFDN0UsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1lBQzdELE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sRUFBRSxPQUFPLENBQUM7UUFDL0IsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2pELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksRUFBRSxD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QUFDO0lBQ2pCLENBQUM7a0lBck5VLGtCQUFrQjtzSUFBbEIsa0JBQWtCLGNBRmpCLE1BQU07OzRGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENzVGVsZW1ldHJ5TW9kdWxlIH0gZnJvbSAnQHByb2plY3Qtc3VuYmlyZC9jbGllbnQtc2VydmljZXMvdGVsZW1ldHJ5JztcbmltcG9ydCB7IENvbnRleHQsIElQYXJlbnRDb25maWcsIFF1bWxQbGF5ZXJDb25maWcgfSBmcm9tICcuL3F1bWwtbGlicmFyeS1pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVXRpbFNlcnZpY2UgfSBmcm9tICcuL3V0aWwtc2VydmljZSc7XG5pbXBvcnQgKiBhcyBfIGZyb20gJ2xvZGFzaC1lcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFF1bWxMaWJyYXJ5U2VydmljZSB7XG4gIGR1cmF0aW9uOiBudW1iZXI7XG4gIGNoYW5uZWw6IHN0cmluZztcbiAgY29uZmlnOiBRdW1sUGxheWVyQ29uZmlnO1xuICBpc1NlY3Rpb25zQXZhaWxhYmxlID0gZmFsc2U7XG4gIHRlbGVtZXRyeUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIHByaXZhdGUgY29udGV4dDogQ29udGV4dDtcbiAgcHJpdmF0ZSB0ZWxlbWV0cnlPYmplY3Q6IGFueTtcbiAgcHJpdmF0ZSBjb250ZW50U2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgcGxheVNlc3Npb25JZDogc3RyaW5nO1xuICBwcml2YXRlIHBkYXRhOiBhbnk7XG4gIHByaXZhdGUgc2lkOiBzdHJpbmc7XG4gIHByaXZhdGUgdWlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcm9sbHVwOiBhbnk7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHV0aWxTZXJ2aWNlOiBVdGlsU2VydmljZSkgeyB9XG5cbiAgYXN5bmMgaW5pdGlhbGl6ZVRlbGVtZXRyeShjb25maWc6IFF1bWxQbGF5ZXJDb25maWcsIHBhcmVudENvbmZpZzogSVBhcmVudENvbmZpZykge1xuICAgIGlmICghXy5oYXMoY29uZmlnLCAnY29udGV4dCcpIHx8IF8uaXNFbXB0eShjb25maWcsICdjb250ZXh0JykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5kdXJhdGlvbiA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgIHRoaXMuY29udGV4dCA9IGNvbmZpZz8uY29udGV4dDtcbiAgICB0aGlzLmNvbnRlbnRTZXNzaW9uSWQgPSB0aGlzLnV0aWxTZXJ2aWNlLnVuaXF1ZUlkKCk7XG4gICAgdGhpcy5wbGF5U2Vzc2lvbklkID0gdGhpcy51dGlsU2VydmljZS51bmlxdWVJZCgpO1xuICAgIHRoaXMuY2hhbm5lbCA9IHRoaXMuY29udGV4dC5jaGFubmVsIHx8ICcnO1xuICAgIHRoaXMucGRhdGEgPSB0aGlzLmNvbnRleHQucGRhdGE7XG4gICAgdGhpcy5zaWQgPSB0aGlzLmNvbnRleHQuc2lkO1xuICAgIHRoaXMudWlkID0gdGhpcy5jb250ZXh0LnVpZDtcbiAgICB0aGlzLnJvbGx1cCA9IHRoaXMuY29udGV4dC5jb250ZXh0Um9sbHVwO1xuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xuICAgIHRoaXMuaXNTZWN0aW9uc0F2YWlsYWJsZSA9IHBhcmVudENvbmZpZz8uaXNTZWN0aW9uc0F2YWlsYWJsZTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKCFDc1RlbGVtZXRyeU1vZHVsZS5pbnN0YW5jZS5pc0luaXRpYWxpc2VkICYmIHRoaXMuY29udGV4dCkge1xuICAgICAgY29uc3QgdGVsZW1ldHJ5Q29uZmlnID0ge1xuICAgICAgICBwZGF0YTogdGhpcy5jb250ZXh0LnBkYXRhLFxuICAgICAgICBlbnY6ICdjb250ZW50cGxheWVyJyxcbiAgICAgICAgY2hhbm5lbDogdGhpcy5jb250ZXh0LmNoYW5uZWwsXG4gICAgICAgIGRpZDogdGhpcy5jb250ZXh0LmRpZCxcbiAgICAgICAgYXV0aHRva2VuOiB0aGlzLmNvbnRleHQuYXV0aFRva2VuIHx8ICcnLFxuICAgICAgICB1aWQ6IHRoaXMuY29udGV4dC51aWQgfHwgJycsXG4gICAgICAgIHNpZDogdGhpcy5jb250ZXh0LnNpZCxcbiAgICAgICAgYmF0Y2hzaXplOiAyMCxcbiAgICAgICAgbW9kZTogdGhpcy5jb250ZXh0Lm1vZGUsXG4gICAgICAgIGhvc3Q6IHRoaXMuY29udGV4dC5ob3N0IHx8ICcnLFxuICAgICAgICBlbmRwb2ludDogdGhpcy5jb250ZXh0LmVuZHBvaW50IHx8ICcvZGF0YS92My90ZWxlbWV0cnknLFxuICAgICAgICB0YWdzOiB0aGlzLmNvbnRleHQudGFncyxcbiAgICAgICAgY2RhdGE6ICh0aGlzLmNvbnRleHQuY2RhdGEgfHwgW10pLmNvbmNhdChbXG4gICAgICAgICAgeyBpZDogdGhpcy5jb250ZW50U2Vzc2lvbklkLCB0eXBlOiAnQ29udGVudFNlc3Npb24nIH0sXG4gICAgICAgICAgeyBpZDogdGhpcy5wbGF5U2Vzc2lvbklkLCB0eXBlOiAnUGxheVNlc3Npb24nIH0sXG4gICAgICAgICAgeyBpZDogJzIuMCcsIHR5cGU6ICdQbGF5ZXJWZXJzaW9uJyB9XG4gICAgICAgIF0pXG4gICAgICB9O1xuICAgICAgYXdhaXQgQ3NUZWxlbWV0cnlNb2R1bGUuaW5zdGFuY2UuaW5pdCh7fSk7XG4gICAgICBDc1RlbGVtZXRyeU1vZHVsZS5pbnN0YW5jZS50ZWxlbWV0cnlTZXJ2aWNlLmluaXRUZWxlbWV0cnkoXG4gICAgICAgIHtcbiAgICAgICAgICBjb25maWc6IHRlbGVtZXRyeUNvbmZpZyxcbiAgICAgICAgICB1c2VyT3JnRGV0YWlsczoge31cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLnRlbGVtZXRyeU9iamVjdCA9IHtcbiAgICAgIGlkOiBwYXJlbnRDb25maWcuaWRlbnRpZmllcixcbiAgICAgIHR5cGU6ICdDb250ZW50JyxcbiAgICAgIHZlcjogcGFyZW50Q29uZmlnPy5tZXRhZGF0YT8ucGtnVmVyc2lvbiA/IHBhcmVudENvbmZpZy5tZXRhZGF0YS5wa2dWZXJzaW9uLnRvU3RyaW5nKCkgOiAnJyxcbiAgICAgIHJvbGx1cDogdGhpcy5jb250ZXh0Py5vYmplY3RSb2xsdXAgfHwge31cbiAgICB9O1xuICB9XG5cbiAgcHVibGljIHN0YXJ0QXNzZXNFdmVudChhc3Nlc0V2ZW50KSB7XG4gICAgaWYgKCFfLmlzRW1wdHkodGhpcy5jb250ZXh0KSkge1xuICAgICAgQ3NUZWxlbWV0cnlNb2R1bGUuaW5zdGFuY2UudGVsZW1ldHJ5U2VydmljZS5yYWlzZUFzc2VzVGVsZW1ldHJ5KFxuICAgICAgICBhc3Nlc0V2ZW50LFxuICAgICAgICB0aGlzLmdldEV2ZW50T3B0aW9ucygpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzdGFydChkdXJhdGlvbikge1xuICAgIGlmICghXy5pc0VtcHR5KHRoaXMuY29udGV4dCkpIHtcbiAgICAgIENzVGVsZW1ldHJ5TW9kdWxlLmluc3RhbmNlLnRlbGVtZXRyeVNlcnZpY2UucmFpc2VTdGFydFRlbGVtZXRyeShcbiAgICAgICAge1xuICAgICAgICAgIG9wdGlvbnM6IHRoaXMuZ2V0RXZlbnRPcHRpb25zKCksXG4gICAgICAgICAgZWRhdGE6IHsgdHlwZTogJ2NvbnRlbnQnLCBtb2RlOiAncGxheScsIHBhZ2VpZDogJycsIGR1cmF0aW9uOiBOdW1iZXIoKGR1cmF0aW9uIC8gMWUzKS50b0ZpeGVkKDIpKSB9XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHJlc3BvbnNlKGlkZW50aWZpZXIsIHZlcnNpb24sIHR5cGUsIG9wdGlvbikge1xuICAgIGlmICghXy5pc0VtcHR5KHRoaXMuY29udGV4dCkpIHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlRXZlbnQgPSB7XG4gICAgICAgIHRhcmdldDoge1xuICAgICAgICAgIGlkOiBpZGVudGlmaWVyLFxuICAgICAgICAgIHZlcjogdmVyc2lvbixcbiAgICAgICAgICB0eXBlOiB0eXBlXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6ICdDSE9PU0UnLFxuICAgICAgICB2YWx1ZXM6IFt7XG4gICAgICAgICAgb3B0aW9uXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgICAgQ3NUZWxlbWV0cnlNb2R1bGUuaW5zdGFuY2UudGVsZW1ldHJ5U2VydmljZS5yYWlzZVJlc3BvbnNlVGVsZW1ldHJ5KFxuICAgICAgICByZXNwb25zZUV2ZW50LFxuICAgICAgICB0aGlzLmdldEV2ZW50T3B0aW9ucygpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzdW1tYXJ5KGVEYXRhKSB7XG4gICAgaWYgKCFfLmlzRW1wdHkodGhpcy5jb250ZXh0KSkge1xuICAgICAgQ3NUZWxlbWV0cnlNb2R1bGUuaW5zdGFuY2UudGVsZW1ldHJ5U2VydmljZS5yYWlzZVN1bW1hcnlUZWxlbWV0cnkoXG4gICAgICAgIGVEYXRhLFxuICAgICAgICB0aGlzLmdldEV2ZW50T3B0aW9ucygpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBlbmQoZHVyYXRpb24sIGN1cnJlbnRRdWVzdGlvbkluZGV4LCB0b3RhbE5vb2ZRdWVzdGlvbnMsIHZpc2l0ZWRRdWVzdGlvbnMsIGVuZHBhZ2VzZWVuLCBzY29yZSkge1xuICAgIGlmICghXy5pc0VtcHR5KHRoaXMuY29udGV4dCkpIHtcbiAgICAgIGNvbnN0IGR1cmF0aW9uU2VjID0gTnVtYmVyKChkdXJhdGlvbiAvIDFlMykudG9GaXhlZCgyKSk7XG4gICAgICBDc1RlbGVtZXRyeU1vZHVsZS5pbnN0YW5jZS50ZWxlbWV0cnlTZXJ2aWNlLnJhaXNlRW5kVGVsZW1ldHJ5KHtcbiAgICAgICAgZWRhdGE6IHtcbiAgICAgICAgICB0eXBlOiAnY29udGVudCcsXG4gICAgICAgICAgbW9kZTogJ3BsYXknLFxuICAgICAgICAgIHBhZ2VpZDogJ3N1bmJpcmQtcGxheWVyLUVuZHBhZ2UnLFxuICAgICAgICAgIHN1bW1hcnk6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcHJvZ3Jlc3M6IE51bWJlcigoKGN1cnJlbnRRdWVzdGlvbkluZGV4IC8gdG90YWxOb29mUXVlc3Rpb25zKSAqIDEwMCkudG9GaXhlZCgwKSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRvdGFsTm9vZlF1ZXN0aW9uczogdG90YWxOb29mUXVlc3Rpb25zXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB2aXNpdGVkUXVlc3Rpb25zOiB2aXNpdGVkUXVlc3Rpb25zLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZW5kcGFnZXNlZW5cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHNjb3JlXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uU2VjXG4gICAgICAgIH0sXG4gICAgICAgIG9wdGlvbnM6IHRoaXMuZ2V0RXZlbnRPcHRpb25zKClcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpbnRlcmFjdChpZCwgY3VycmVudFBhZ2UsIGN1cnJlbnRRdWVzdGlvbkRldGFpbHM/KSB7XG4gICAgaWYgKCFfLmlzRW1wdHkodGhpcy5jb250ZXh0KSkge1xuICAgICAgQ3NUZWxlbWV0cnlNb2R1bGUuaW5zdGFuY2UudGVsZW1ldHJ5U2VydmljZS5yYWlzZUludGVyYWN0VGVsZW1ldHJ5KHtcbiAgICAgICAgb3B0aW9uczogdGhpcy5nZXRFdmVudE9wdGlvbnMoKSxcbiAgICAgICAgZWRhdGE6IHsgdHlwZTogJ1RPVUNIJywgc3VidHlwZTogJycsIGlkLCBwYWdlaWQ6IGN1cnJlbnRQYWdlICsgJycgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cblxuXG4gIHB1YmxpYyBoZWFydEJlYXQoZGF0YSkge1xuICAgIGlmICghXy5pc0VtcHR5KHRoaXMuY29udGV4dCkpIHtcbiAgICAgIENzVGVsZW1ldHJ5TW9kdWxlLmluc3RhbmNlLnBsYXllclRlbGVtZXRyeVNlcnZpY2Uub25IZWFydEJlYXRFdmVudChkYXRhLCB7fSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGltcHJlc3Npb24oY3VycmVudFBhZ2UpIHtcbiAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLmNvbnRleHQpKSB7XG4gICAgICBDc1RlbGVtZXRyeU1vZHVsZS5pbnN0YW5jZS50ZWxlbWV0cnlTZXJ2aWNlLnJhaXNlSW1wcmVzc2lvblRlbGVtZXRyeSh7XG4gICAgICAgIG9wdGlvbnM6IHRoaXMuZ2V0RXZlbnRPcHRpb25zKCksXG4gICAgICAgIGVkYXRhOiB7IHR5cGU6ICd3b3JrZmxvdycsIHN1YnR5cGU6ICcnLCBwYWdlaWQ6IGN1cnJlbnRQYWdlICsgJycsIHVyaTogJycgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGVycm9yKGVycm9yOiBFcnJvciwgZWRhdGE/OiB7IGVycjogc3RyaW5nLCBlcnJ0eXBlOiBzdHJpbmcgfSkge1xuICAgIGlmICghXy5pc0VtcHR5KHRoaXMuY29udGV4dCkpIHtcbiAgICAgIENzVGVsZW1ldHJ5TW9kdWxlLmluc3RhbmNlLnRlbGVtZXRyeVNlcnZpY2UucmFpc2VFcnJvclRlbGVtZXRyeSh7XG4gICAgICAgIG9wdGlvbnM6IHRoaXMuZ2V0RXZlbnRPcHRpb25zKCksXG4gICAgICAgIGVkYXRhOiB7XG4gICAgICAgICAgZXJyOiAnTE9BRCcsXG4gICAgICAgICAgZXJydHlwZTogJ2NvbnRlbnQnLFxuICAgICAgICAgIHN0YWNrdHJhY2U6IChlcnJvcj8udG9TdHJpbmcoKSkgfHwgJydcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldEV2ZW50T3B0aW9ucygpIHtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgb2JqZWN0OiB0aGlzLnRlbGVtZXRyeU9iamVjdCxcbiAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgY2hhbm5lbDogdGhpcy5jaGFubmVsIHx8ICcnLFxuICAgICAgICBwZGF0YTogdGhpcy5wZGF0YSxcbiAgICAgICAgZW52OiAnY29udGVudHBsYXllcicsXG4gICAgICAgIHNpZDogdGhpcy5zaWQsXG4gICAgICAgIHVpZDogdGhpcy51aWQsXG4gICAgICAgIGNkYXRhOiAodGhpcy5jb250ZXh0Py5jZGF0YSB8fCBbXSkuY29uY2F0KFt7IGlkOiB0aGlzLmNvbnRlbnRTZXNzaW9uSWQsIHR5cGU6ICdDb250ZW50U2Vzc2lvbicgfSxcbiAgICAgICAgeyBpZDogdGhpcy5wbGF5U2Vzc2lvbklkLCB0eXBlOiAnUGxheVNlc3Npb24nIH0sXG4gICAgICAgIHsgaWQ6ICcyLjAnLCB0eXBlOiAnUGxheWVyVmVyc2lvbicgfV0pLFxuICAgICAgICByb2xsdXA6IHRoaXMucm9sbHVwIHx8IHt9XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMuaXNTZWN0aW9uc0F2YWlsYWJsZSkge1xuICAgICAgb3B0aW9ucy5jb250ZXh0LmNkYXRhLnB1c2goeyBpZDogdGhpcy5jb25maWcubWV0YWRhdGEuaWRlbnRpZmllciwgdHlwZTogJ1NlY3Rpb25JZCcgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdGlvbnM7XG4gIH1cbn1cbiJdfQ==