UNPKG

videogular2

Version:

Videogular is a video application framework for desktop and mobile powered by Angular

161 lines 18.9 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; Object.defineProperty(exports, "__esModule", { value: true }); var core_1 = require("@angular/core"); var vg_api_1 = require("../../core/services/vg-api"); var VgHLS = /** @class */ (function () { function VgHLS(ref, API) { this.ref = ref; this.API = API; this.vgHlsHeaders = {}; this.onGetBitrates = new core_1.EventEmitter(); this.subscriptions = []; } VgHLS.prototype.ngOnInit = function () { var _this = this; if (this.API.isPlayerReady) { this.onPlayerReady(); } else { this.subscriptions.push(this.API.playerReadyEvent.subscribe(function () { return _this.onPlayerReady(); })); } }; VgHLS.prototype.onPlayerReady = function () { var _this = this; this.crossorigin = this.ref.nativeElement.getAttribute('crossorigin'); this.preload = this.ref.nativeElement.getAttribute('preload') !== 'none'; this.vgFor = this.ref.nativeElement.getAttribute('vgFor'); if (this.vgFor) { this.target = this.API.getMediaById(this.vgFor); } else { this.target = this.API.getDefaultMedia(); } this.config = { autoStartLoad: this.preload }; // @ts-ignore this.config.xhrSetup = function (xhr, url) { // Send cookies if (_this.crossorigin === 'use-credentials') { xhr.withCredentials = true; } for (var _i = 0, _a = Object.keys(_this.vgHlsHeaders); _i < _a.length; _i++) { var key = _a[_i]; xhr.setRequestHeader(key, _this.vgHlsHeaders[key]); } }; this.createPlayer(); if (!this.preload) { this.subscriptions.push(this.API.subscriptions.play.subscribe(function () { if (_this.hls) { _this.hls.startLoad(0); } })); } }; VgHLS.prototype.ngOnChanges = function (changes) { if (changes['vgHls'] && changes['vgHls'].currentValue) { this.createPlayer(); } else if (changes['vgHlsHeaders'] && changes['vgHlsHeaders'].currentValue) { // Do nothing. We don't want to create a or destroy a player if the headers change. } else { this.destroyPlayer(); } }; VgHLS.prototype.createPlayer = function () { var _this = this; if (this.hls) { this.destroyPlayer(); } // It's a HLS source if (this.vgHls && this.vgHls.indexOf('m3u8') > -1 && Hls.isSupported() && this.API.isPlayerReady) { var video = this.ref.nativeElement; this.hls = new Hls(this.config); // @ts-ignore this.hls.on(Hls.Events.MANIFEST_PARSED, function (event, data) { var videoList = []; videoList.push({ qualityIndex: 0, width: 0, height: 0, bitrate: 0, mediaType: 'video', label: 'AUTO' }); data.levels.forEach(function (item, index) { videoList.push({ qualityIndex: ++index, width: item.width, height: item.height, bitrate: item.bitrate, mediaType: 'video', label: item.name }); }); _this.onGetBitrates.emit(videoList); }); // @ts-ignore this.hls.on(Hls.Events.LEVEL_LOADED, function (event, data) { _this.target.isLive = data.details.live; }); this.hls.loadSource(this.vgHls); this.hls.attachMedia(video); } else { if (this.target && !!this.target.pause) { this.target.pause(); this.target.seekTime(0); this.ref.nativeElement.src = this.vgHls; } } }; VgHLS.prototype.setBitrate = function (bitrate) { if (this.hls) { this.hls.nextLevel = bitrate.qualityIndex - 1; } }; VgHLS.prototype.destroyPlayer = function () { if (this.hls) { this.hls.destroy(); this.hls = null; } }; VgHLS.prototype.ngOnDestroy = function () { this.subscriptions.forEach(function (s) { return s.unsubscribe(); }); this.destroyPlayer(); delete this.hls; }; __decorate([ core_1.Input(), __metadata("design:type", String) ], VgHLS.prototype, "vgHls", void 0); __decorate([ core_1.Input(), __metadata("design:type", Object) ], VgHLS.prototype, "vgHlsHeaders", void 0); __decorate([ core_1.Output(), __metadata("design:type", core_1.EventEmitter) ], VgHLS.prototype, "onGetBitrates", void 0); VgHLS = __decorate([ core_1.Directive({ selector: '[vgHls]', exportAs: 'vgHls' }), __metadata("design:paramtypes", [core_1.ElementRef, vg_api_1.VgAPI]) ], VgHLS); return VgHLS; }()); exports.VgHLS = VgHLS; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmctaGxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3N0cmVhbWluZy92Zy1obHMvdmctaGxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsc0NBVXVCO0FBQ3ZCLHFEQUFtRDtBQVduRDtJQWVJLGVBQW9CLEdBQWMsRUFBUyxHQUFTO1FBQWhDLFFBQUcsR0FBSCxHQUFHLENBQVc7UUFBUyxRQUFHLEdBQUgsR0FBRyxDQUFNO1FBYjNDLGlCQUFZLEdBQTRCLEVBQUUsQ0FBQztRQUUxQyxrQkFBYSxHQUFrQyxJQUFJLG1CQUFZLEVBQUUsQ0FBQztRQVM1RSxrQkFBYSxHQUFtQixFQUFFLENBQUM7SUFFb0IsQ0FBQztJQUV4RCx3QkFBUSxHQUFSO1FBQUEsaUJBT0M7UUFORyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUN4QjthQUNJO1lBQ0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsY0FBTSxPQUFBLEtBQUksQ0FBQyxhQUFhLEVBQUUsRUFBcEIsQ0FBb0IsQ0FBQyxDQUFDLENBQUM7U0FDNUY7SUFDTCxDQUFDO0lBRUQsNkJBQWEsR0FBYjtRQUFBLGlCQXdDQztRQXZDRyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsS0FBSyxNQUFNLENBQUM7UUFDekUsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFMUQs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SUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7YUFDM0M7U0FDSjtJQUNMLENBQUM7SUFFRCwwQkFBVSxHQUFWLFVBQVcsT0FBc0I7UUFDN0IsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7U0FDakQ7SUFDTCxDQUFDO0lBRUQsNkJBQWEsR0FBYjtRQUNJLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNWLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7U0FDbkI7SUFDTCxDQUFDO0lBRUQsMkJBQVcsR0FBWDtRQUNJLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFVBQUEsQ0FBQyxJQUFJLE9BQUEsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFmLENBQWUsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUM7SUFDcEIsQ0FBQztJQXZKUTtRQUFSLFlBQUssRUFBRTs7d0NBQWM7SUFDYjtRQUFSLFlBQUssRUFBRTs7K0NBQTRDO0lBRTFDO1FBQVQsYUFBTSxFQUFFO2tDQUFnQixtQkFBWTtnREFBdUM7SUFKbkUsS0FBSztRQUpqQixnQkFBUyxDQUFDO1lBQ1AsUUFBUSxFQUFFLFNBQVM7WUFDbkIsUUFBUSxFQUFFLE9BQU87U0FDcEIsQ0FBQzt5Q0FnQjBCLGlCQUFVLEVBQWEsY0FBSztPQWYzQyxLQUFLLENBeUpqQjtJQUFELFlBQUM7Q0FBQSxBQXpKRCxJQXlKQztBQXpKWSxzQkFBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgSW5wdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBWZ0FQSSB9IGZyb20gXCIuLi8uLi9jb3JlL3NlcnZpY2VzL3ZnLWFwaVwiO1xuaW1wb3J0IHsgSUhMU0NvbmZpZyB9IGZyb20gJy4vaGxzLWNvbmZpZyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJpdHJhdGVPcHRpb24gfSBmcm9tICcuLi8uLi9jb3JlL2NvcmUnO1xuXG5kZWNsYXJlIGxldCBIbHM7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW3ZnSGxzXScsXG4gICAgZXhwb3J0QXM6ICd2Z0hscydcbn0pXG5leHBvcnQgY2xhc3MgVmdITFMgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgICBASW5wdXQoKSB2Z0hsczpzdHJpbmc7XG4gICAgQElucHV0KCkgdmdIbHNIZWFkZXJzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nfSA9IHt9O1xuXG4gICAgQE91dHB1dCgpIG9uR2V0Qml0cmF0ZXM6IEV2ZW50RW1pdHRlcjxCaXRyYXRlT3B0aW9uW10+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgdmdGb3I6IHN0cmluZztcbiAgICB0YXJnZXQ6IGFueTtcbiAgICBobHM6IGFueTtcbiAgICBwcmVsb2FkOiBib29sZWFuO1xuICAgIGNyb3Nzb3JpZ2luOiBzdHJpbmc7XG4gICAgY29uZmlnOiBJSExTQ29uZmlnO1xuXG4gICAgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVmOkVsZW1lbnRSZWYsIHB1YmxpYyBBUEk6VmdBUEkpIHt9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuQVBJLmlzUGxheWVyUmVhZHkpIHtcbiAgICAgICAgICAgIHRoaXMub25QbGF5ZXJSZWFkeSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5BUEkucGxheWVyUmVhZHlFdmVudC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vblBsYXllclJlYWR5KCkpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUGxheWVyUmVhZHkoKSB7XG4gICAgICAgIHRoaXMuY3Jvc3NvcmlnaW4gPSB0aGlzLnJlZi5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnY3Jvc3NvcmlnaW4nKTtcbiAgICAgICAgdGhpcy5wcmVsb2FkID0gdGhpcy5yZWYubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3ByZWxvYWQnKSAhPT0gJ25vbmUnO1xuICAgICAgICB0aGlzLnZnRm9yID0gdGhpcy5yZWYubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3ZnRm9yJyk7XG5cbiAgICAgICAgaWYodGhpcy52Z0Zvcil7XG4gICAgICAgICAgICB0aGlzLnRhcmdldCA9IHRoaXMuQVBJLmdldE1lZGlhQnlJZCh0aGlzLnZnRm9yKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNle1xuICAgICAgICAgICAgdGhpcy50YXJnZXQgPSB0aGlzLkFQSS5nZXREZWZhdWx0TWVkaWEoKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgdGhpcy5jb25maWcgPSA8SUhMU0NvbmZpZz57XG4gICAgICAgICAgICBhdXRvU3RhcnRMb2FkOiB0aGlzLnByZWxvYWRcbiAgICAgICAgfTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICB0aGlzLmNvbmZpZy54aHJTZXR1cCA9ICh4aHIsIHVybCkgPT4ge1xuICAgICAgICAgICAgLy8gU2VuZCBjb29raWVzXG4gICAgICAgICAgICBpZiAodGhpcy5jcm9zc29yaWdpbiA9PT0gJ3VzZS1jcmVkZW50aWFscycpIHtcbiAgICAgICAgICAgICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHRoaXMudmdIbHNIZWFkZXJzKSkge1xuICAgICAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdGhpcy52Z0hsc0hlYWRlcnNba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5jcmVhdGVQbGF5ZXIoKTtcblxuICAgICAgICBpZiAoIXRoaXMucHJlbG9hZCkge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgdGhpcy5BUEkuc3Vic2NyaXB0aW9ucy5wbGF5LnN1YnNjcmliZShcbiAgICAgICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaGxzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5obHMuc3RhcnRMb2FkKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6U2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBpZiAoY2hhbmdlc1sndmdIbHMnXSAmJiBjaGFuZ2VzWyd2Z0hscyddLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVQbGF5ZXIoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjaGFuZ2VzWyd2Z0hsc0hlYWRlcnMnXSAmJiBjaGFuZ2VzWyd2Z0hsc0hlYWRlcnMnXS5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgIC8vIERvIG5vdGhpbmcuIFdlIGRvbid0IHdhbnQgdG8gY3JlYXRlIGEgb3IgZGVzdHJveSBhIHBsYXllciBpZiB0aGUgaGVhZGVycyBjaGFuZ2UuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3lQbGF5ZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNyZWF0ZVBsYXllcigpIHtcbiAgICAgICAgaWYgKHRoaXMuaGxzKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3lQbGF5ZXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEl0J3MgYSBITFMgc291cmNlXG4gICAgICAgIGlmICh0aGlzLnZnSGxzICYmIHRoaXMudmdIbHMuaW5kZXhPZignbTN1OCcpID4gLTEgJiYgSGxzLmlzU3VwcG9ydGVkKCkgJiYgdGhpcy5BUEkuaXNQbGF5ZXJSZWFkeSkge1xuICAgICAgICAgICAgbGV0IHZpZGVvOkhUTUxWaWRlb0VsZW1lbnQgPSB0aGlzLnJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgICAgICB0aGlzLmhscyA9IG5ldyBIbHModGhpcy5jb25maWcpO1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgdGhpcy5obHMub24oSGxzLkV2ZW50cy5NQU5JRkVTVF9QQVJTRUQsIChldmVudCwgZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2aWRlb0xpc3QgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICB2aWRlb0xpc3QucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBxdWFsaXR5SW5kZXg6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJpdHJhdGU6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYVR5cGU6ICd2aWRlbycsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0FVVE8nXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGRhdGEubGV2ZWxzLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2aWRlb0xpc3QucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhbGl0eUluZGV4OiArK2luZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiBpdGVtLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogaXRlbS5oZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0cmF0ZTogaXRlbS5iaXRyYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhVHlwZTogJ3ZpZGVvJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogaXRlbS5uYW1lXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkdldEJpdHJhdGVzLmVtaXQodmlkZW9MaXN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgdGhpcy5obHMub24oSGxzLkV2ZW50cy5MRVZFTF9MT0FERUQsIChldmVudCwgZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhcmdldC5pc0xpdmUgPSBkYXRhLmRldGFpbHMubGl2ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICB0aGlzLmhscy5sb2FkU291cmNlKHRoaXMudmdIbHMpO1xuICAgICAgICAgICAgdGhpcy5obHMuYXR0YWNoTWVkaWEodmlkZW8pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMudGFyZ2V0ICYmICEhdGhpcy50YXJnZXQucGF1c2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhcmdldC5wYXVzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMudGFyZ2V0LnNlZWtUaW1lKDApO1xuICAgICAgICAgICAgICAgIHRoaXMucmVmLm5hdGl2ZUVsZW1lbnQuc3JjID0gdGhpcy52Z0hscztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldEJpdHJhdGUoYml0cmF0ZTogQml0cmF0ZU9wdGlvbikge1xuICAgICAgICBpZiAodGhpcy5obHMpIHtcbiAgICAgICAgICAgIHRoaXMuaGxzLm5leHRMZXZlbCA9IGJpdHJhdGUucXVhbGl0eUluZGV4IC0gMTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlc3Ryb3lQbGF5ZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLmhscykge1xuICAgICAgICAgICAgdGhpcy5obHMuZGVzdHJveSgpO1xuICAgICAgICAgICAgdGhpcy5obHMgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgdGhpcy5kZXN0cm95UGxheWVyKCk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmhscztcbiAgICB9XG59XG4iXX0=