UNPKG

air-lib

Version:

This is Air's angular component library

157 lines 17.3 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { StatusOnYoutube } from './../entities/status-on-youtube'; import { Injectable } from '@angular/core'; import { SessionContext } from '../entities/session-context'; import { BannerMode } from '../entities/banner-mode.enum'; import { Avatar } from '../entities/avatar'; import { DomSanitizer } from '@angular/platform-browser'; import { StatusOnOurCms } from '../entities/status-on-our-cms'; import * as i0 from "@angular/core"; import * as i1 from "../entities/session-context"; import * as i2 from "@angular/platform-browser"; export class UtilityService { /** * @param {?} sessionContext * @param {?} sanitizer */ constructor(sessionContext, sanitizer) { this.sessionContext = sessionContext; this.sanitizer = sanitizer; this.mapping = new Map(); this.recursionLimit = 0; /** @type {?} */ const apiCallTemplate = 'api/Profile/GetPhoto/'; this.mapping.set(BannerMode.Unknown, new Avatar('https://al32blob.blob.core.windows.net/images/ManagerAvatar.png', apiCallTemplate)); this.mapping.set(BannerMode.ManagerAvatar, new Avatar('https://al32blob.blob.core.windows.net/images/ManagerAvatar.png', apiCallTemplate)); this.mapping.set(BannerMode.PartnerAvatar, new Avatar('https://al32blob.blob.core.windows.net/images/PartnerAvatar.png', apiCallTemplate)); this.mapping.set(BannerMode.YouTubeChannelAvatar, new Avatar('https://al32blob.blob.core.windows.net/images/YouTubeChannelAvatar.png', apiCallTemplate)); this.mapping.set(BannerMode.YouTubeVideoAvatar, new Avatar('https://al32blob.blob.core.windows.net/images/YouTubeVideoAvatar.png', apiCallTemplate)); this.mapping.set(BannerMode.YouTubeChannelBanner, new Avatar('https://al32blob.blob.core.windows.net/images/YouTubeChannelBanner.png', apiCallTemplate)); this.mapping.set(BannerMode.YouTubeChannelAvatarBlockedOrDelete, new Avatar('https://al32blob.blob.core.windows.net/images/YouTubeChannelAvatarBlockedOrDelete.png', apiCallTemplate)); this.mapping.set(BannerMode.PaymentSystemLogo, new Avatar('https://al32blob.blob.core.windows.net/images/PaymentSystemLogo.png', apiCallTemplate)); } /** * @param {?} ourStatus * @param {?} youtubeStatus * @return {?} */ static getListClassesByChannelStatus(ourStatus, youtubeStatus) { return `StatusOnOurCms-${StatusOnOurCms[ourStatus]} StatusOnYoutube-${StatusOnYoutube[youtubeStatus]}`.toLocaleLowerCase(); } /** * @param {?} bannerMode * @return {?} */ getAvatarByMode(bannerMode) { /** @type {?} */ const avatar = this.mapping.get(bannerMode); if (avatar === undefined) { throw new Error('Banner mode ' + bannerMode + ' does not exists.'); } return avatar.defaultAvatar; } /** * @param {?} bannerMode * @param {?=} id * @return {?} */ photoUrl(bannerMode, id = '') { if (!id) { return this.getAvatarByMode(bannerMode); } if (!this.mapping.has(bannerMode)) { throw new Error('Unknown banner mode'); } /** @type {?} */ const avatar = this.mapping.get(bannerMode); if (avatar === undefined) { throw new Error('Banner mode ' + bannerMode + ' does not exists.'); } return this.sessionContext.apiServer + avatar.apiCall + id + '/mode/' + bannerMode; } /** * @param {?} bannerMode * @param {?=} id * @return {?} */ getPhotoStyleUrl(bannerMode, id = '') { /** @type {?} */ const uri = this.photoUrl(bannerMode, id); /** @type {?} */ const url = 'url(' + uri + ')'; return this.sanitizer.bypassSecurityTrustStyle(url); } // depricated method, should be removed after partner area upgrading /** * @param {?} id * @return {?} */ getPhotoUrl(id) { return (!id) ? 'assets/img/default-avatar.png' : this.sessionContext.apiServer + 'api/Profile/GetPhoto/' + id; } /** * @param {?} tree * @param {?} action * @return {?} */ traverseAndDo(tree, action) { tree.forEach(node => { if (node.childrens != null && node.childrens.length > 0) { this.traverseAndDo(node.childrens, action); } else { action.execute(node); } }); } /** * @param {?} tree * @param {?} action * @param {?} maxCount * @return {?} */ traverseAndLimitedDo(tree, action, maxCount) { tree.forEach(node => { if (node.childrens != null && node.childrens.length > 0 && this.recursionLimit < maxCount) { this.traverseAndLimitedDo(node.childrens, action, maxCount); } else { this.recursionLimit++; action.execute(node); } }); } } UtilityService.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] } ]; UtilityService.ctorParameters = () => [ { type: SessionContext }, { type: DomSanitizer } ]; /** @nocollapse */ UtilityService.ngInjectableDef = i0.defineInjectable({ factory: function UtilityService_Factory() { return new UtilityService(i0.inject(i1.SessionContext), i0.inject(i2.DomSanitizer)); }, token: UtilityService, providedIn: "root" }); if (false) { /** @type {?} */ UtilityService.prototype.mapping; /** * @type {?} * @private */ UtilityService.prototype.recursionLimit; /** * @type {?} * @private */ UtilityService.prototype.sessionContext; /** * @type {?} * @private */ UtilityService.prototype.sanitizer; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbGl0eS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYWlyLWxpYi8iLCJzb3VyY2VzIjpbImxpYi9zZXJ2aWNlcy91dGlsaXR5LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFBYSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sK0JBQStCLENBQUM7Ozs7QUFRL0QsTUFBTTs7Ozs7SUFJSixZQUNVLGNBQThCLEVBQzlCLFNBQXVCO1FBRHZCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBTDFCLFlBQU8sR0FBNEIsSUFBSSxHQUFHLEVBQXNCLENBQUM7UUFFaEUsbUJBQWMsR0FBRyxDQUFDLENBQUM7O2NBTW5CLGVBQWUsR0FBRyx1QkFBdUI7UUFDL0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQ2QsVUFBVSxDQUFDLE9BQU8sRUFDbEIsSUFBSSxNQUFNLENBQUMsaUVBQWlFLEVBQUUsZUFBZSxDQUFDLENBQy9GLENBQUM7UUFDRixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FDZCxVQUFVLENBQUMsYUFBYSxFQUN4QixJQUFJLE1BQU0sQ0FBQyxpRUFBaUUsRUFBRSxlQUFlLENBQUMsQ0FDL0YsQ0FBQztRQUNGLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUNkLFVBQVUsQ0FBQyxhQUFhLEVBQ3hCLElBQUksTUFBTSxDQUFDLGlFQUFpRSxFQUFFLGVBQWUsQ0FBQyxDQUMvRixDQUFDO1FBQ0YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQ2QsVUFBVSxDQUFDLG9CQUFvQixFQUMvQixJQUFJLE1BQU0sQ0FBQyx3RUFBd0UsRUFBRSxlQUFlLENBQUMsQ0FDdEcsQ0FBQztRQUNGLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUNkLFVBQVUsQ0FBQyxrQkFBa0IsRUFDN0IsSUFBSSxNQUFNLENBQUMsc0VBQXNFLEVBQUUsZUFBZSxDQUFDLENBQ3BHLENBQUM7UUFDRixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FDZCxVQUFVLENBQUMsb0JBQW9CLEVBQy9CLElBQUksTUFBTSxDQUFDLHdFQUF3RSxFQUFFLGVBQWUsQ0FBQyxDQUN0RyxDQUFDO1FBQ0YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQ2QsVUFBVSxDQUFDLG1DQUFtQyxFQUM5QyxJQUFJLE1BQU0sQ0FBQyx1RkFBdUYsRUFBRSxlQUFlLENBQUMsQ0FDckgsQ0FBQztRQUNGLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUNkLFVBQVUsQ0FBQyxpQkFBaUIsRUFDNUIsSUFBSSxNQUFNLENBQUMscUVBQXFFLEVBQUUsZUFBZSxDQUFDLENBQ25HLENBQUM7SUFFSixDQUFDOzs7Ozs7SUFFTSxNQUFNLENBQUMsNkJBQTZCLENBQUMsU0FBaUIsRUFBRSxhQUFxQjtRQUNsRixPQUFPLGtCQUFrQixjQUFjLENBQUMsU0FBUyxDQUFDLG9CQUFvQixlQUFlLENBQUMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzdILENBQUM7Ozs7O0lBRU0sZUFBZSxDQUFDLFVBQXNCOztjQUNyQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO1FBQzNDLElBQUksTUFBTSxLQUFLLFNBQVMsRUFBRTtZQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLGNBQWMsR0FBRyxVQUFVLEdBQUcsbUJBQW1CLENBQUMsQ0FBQztTQUNwRTtRQUNELE9BQU8sTUFBTSxDQUFDLGFBQWEsQ0FBQztJQUM5QixDQUFDOzs7Ozs7SUFFTSxRQUFRLENBQUMsVUFBc0IsRUFBRSxLQUFhLEVBQUU7UUFDckQsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUNQLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUN6QztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7U0FDeEM7O2NBQ0ssTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQztRQUMzQyxJQUFJLE1BQU0sS0FBSyxTQUFTLEVBQUU7WUFDeEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxjQUFjLEdBQUcsVUFBVSxHQUFHLG1CQUFtQixDQUFDLENBQUM7U0FDcEU7UUFDRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxPQUFPLEdBQUcsRUFBRSxHQUFHLFFBQVEsR0FBRyxVQUFVLENBQUM7SUFDckYsQ0FBQzs7Ozs7O0lBRU0sZ0JBQWdCLENBQUMsVUFBc0IsRUFBRSxLQUFhLEVBQUU7O2NBQ3ZELEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7O2NBQ25DLEdBQUcsR0FBRyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFFOUIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RELENBQUM7Ozs7OztJQUdNLFdBQVcsQ0FBQyxFQUFVO1FBQzNCLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEdBQUcsdUJBQXVCLEdBQUcsRUFBRSxDQUFDO0lBQ2hILENBQUM7Ozs7OztJQUNNLGFBQWEsQ0FBQyxJQUEwQixFQUFFLE1BQStCO1FBRTVFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDaEIsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3JELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQzthQUM5QztpQkFBTTtnQkFDSCxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQ3hCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzs7Ozs7O0lBRU0sb0JBQW9CLENBQUMsSUFBMEIsRUFBRSxNQUErQixFQUFFLFFBQWdCO1FBRXZHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDaEIsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLGNBQWMsR0FBRyxRQUFRLEVBQUU7Z0JBQ3ZGLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQzthQUMvRDtpQkFBTTtnQkFDSCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3RCLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDeEI7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7OztZQTVHQSxVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQVZRLGNBQWM7WUFHSCxZQUFZOzs7OztJQVU5QixpQ0FBd0U7Ozs7O0lBRXhFLHdDQUEyQjs7Ozs7SUFFekIsd0NBQXNDOzs7OztJQUN0QyxtQ0FBK0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGF0dXNPbllvdXR1YmUgfSBmcm9tICcuLy4uL2VudGl0aWVzL3N0YXR1cy1vbi15b3V0dWJlJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTZXNzaW9uQ29udGV4dCB9IGZyb20gJy4uL2VudGl0aWVzL3Nlc3Npb24tY29udGV4dCc7XHJcbmltcG9ydCB7IEJhbm5lck1vZGUgfSBmcm9tICcuLi9lbnRpdGllcy9iYW5uZXItbW9kZS5lbnVtJztcclxuaW1wb3J0IHsgQXZhdGFyIH0gZnJvbSAnLi4vZW50aXRpZXMvYXZhdGFyJztcclxuaW1wb3J0IHsgU2FmZVN0eWxlLCBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgU3RhdHVzT25PdXJDbXMgfSBmcm9tICcuLi9lbnRpdGllcy9zdGF0dXMtb24tb3VyLWNtcyc7XHJcbmltcG9ydCB7IElDb21tYW5kIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9pY29tbWFuZCc7XHJcbmltcG9ydCB7IElUaWxlSW5mb05vZGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2l0aWxlLWluZm8tbm9kZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgVXRpbGl0eVNlcnZpY2Uge1xyXG4gIHB1YmxpYyBtYXBwaW5nOiBNYXA8QmFubmVyTW9kZSwgQXZhdGFyPiA9IG5ldyBNYXA8QmFubmVyTW9kZSwgQXZhdGFyPigpO1xyXG5cclxuICBwcml2YXRlIHJlY3Vyc2lvbkxpbWl0ID0gMDtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgc2Vzc2lvbkNvbnRleHQ6IFNlc3Npb25Db250ZXh0LFxyXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplclxyXG4gICkge1xyXG5cclxuICAgIGNvbnN0IGFwaUNhbGxUZW1wbGF0ZSA9ICdhcGkvUHJvZmlsZS9HZXRQaG90by8nO1xyXG4gICAgdGhpcy5tYXBwaW5nLnNldChcclxuICAgICAgQmFubmVyTW9kZS5Vbmtub3duLFxyXG4gICAgICBuZXcgQXZhdGFyKCdodHRwczovL2FsMzJibG9iLmJsb2IuY29yZS53aW5kb3dzLm5ldC9pbWFnZXMvTWFuYWdlckF2YXRhci5wbmcnLCBhcGlDYWxsVGVtcGxhdGUpXHJcbiAgICApO1xyXG4gICAgdGhpcy5tYXBwaW5nLnNldChcclxuICAgICAgQmFubmVyTW9kZS5NYW5hZ2VyQXZhdGFyLFxyXG4gICAgICBuZXcgQXZhdGFyKCdodHRwczovL2FsMzJibG9iLmJsb2IuY29yZS53aW5kb3dzLm5ldC9pbWFnZXMvTWFuYWdlckF2YXRhci5wbmcnLCBhcGlDYWxsVGVtcGxhdGUpXHJcbiAgICApO1xyXG4gICAgdGhpcy5tYXBwaW5nLnNldChcclxuICAgICAgQmFubmVyTW9kZS5QYXJ0bmVyQXZhdGFyLFxyXG4gICAgICBuZXcgQXZhdGFyKCdodHRwczovL2FsMzJibG9iLmJsb2IuY29yZS53aW5kb3dzLm5ldC9pbWFnZXMvUGFydG5lckF2YXRhci5wbmcnLCBhcGlDYWxsVGVtcGxhdGUpXHJcbiAgICApO1xyXG4gICAgdGhpcy5tYXBwaW5nLnNldChcclxuICAgICAgQmFubmVyTW9kZS5Zb3VUdWJlQ2hhbm5lbEF2YXRhcixcclxuICAgICAgbmV3IEF2YXRhcignaHR0cHM6Ly9hbDMyYmxvYi5ibG9iLmNvcmUud2luZG93cy5uZXQvaW1hZ2VzL1lvdVR1YmVDaGFubmVsQXZhdGFyLnBuZycsIGFwaUNhbGxUZW1wbGF0ZSlcclxuICAgICk7XHJcbiAgICB0aGlzLm1hcHBpbmcuc2V0KFxyXG4gICAgICBCYW5uZXJNb2RlLllvdVR1YmVWaWRlb0F2YXRhcixcclxuICAgICAgbmV3IEF2YXRhcignaHR0cHM6Ly9hbDMyYmxvYi5ibG9iLmNvcmUud2luZG93cy5uZXQvaW1hZ2VzL1lvdVR1YmVWaWRlb0F2YXRhci5wbmcnLCBhcGlDYWxsVGVtcGxhdGUpXHJcbiAgICApO1xyXG4gICAgdGhpcy5tYXBwaW5nLnNldChcclxuICAgICAgQmFubmVyTW9kZS5Zb3VUdWJlQ2hhbm5lbEJhbm5lcixcclxuICAgICAgbmV3IEF2YXRhcignaHR0cHM6Ly9hbDMyYmxvYi5ibG9iLmNvcmUud2luZG93cy5uZXQvaW1hZ2VzL1lvdVR1YmVDaGFubmVsQmFubmVyLnBuZycsIGFwaUNhbGxUZW1wbGF0ZSlcclxuICAgICk7XHJcbiAgICB0aGlzLm1hcHBpbmcuc2V0KFxyXG4gICAgICBCYW5uZXJNb2RlLllvdVR1YmVDaGFubmVsQXZhdGFyQmxvY2tlZE9yRGVsZXRlLFxyXG4gICAgICBuZXcgQXZhdGFyKCdodHRwczovL2FsMzJibG9iLmJsb2IuY29yZS53aW5kb3dzLm5ldC9pbWFnZXMvWW91VHViZUNoYW5uZWxBdmF0YXJCbG9ja2VkT3JEZWxldGUucG5nJywgYXBpQ2FsbFRlbXBsYXRlKVxyXG4gICAgKTtcclxuICAgIHRoaXMubWFwcGluZy5zZXQoXHJcbiAgICAgIEJhbm5lck1vZGUuUGF5bWVudFN5c3RlbUxvZ28sXHJcbiAgICAgIG5ldyBBdmF0YXIoJ2h0dHBzOi8vYWwzMmJsb2IuYmxvYi5jb3JlLndpbmRvd3MubmV0L2ltYWdlcy9QYXltZW50U3lzdGVtTG9nby5wbmcnLCBhcGlDYWxsVGVtcGxhdGUpXHJcbiAgICApO1xyXG5cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0TGlzdENsYXNzZXNCeUNoYW5uZWxTdGF0dXMob3VyU3RhdHVzOiBudW1iZXIsIHlvdXR1YmVTdGF0dXM6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYFN0YXR1c09uT3VyQ21zLSR7U3RhdHVzT25PdXJDbXNbb3VyU3RhdHVzXX0gU3RhdHVzT25Zb3V0dWJlLSR7U3RhdHVzT25Zb3V0dWJlW3lvdXR1YmVTdGF0dXNdfWAudG9Mb2NhbGVMb3dlckNhc2UoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRBdmF0YXJCeU1vZGUoYmFubmVyTW9kZTogQmFubmVyTW9kZSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBhdmF0YXIgPSB0aGlzLm1hcHBpbmcuZ2V0KGJhbm5lck1vZGUpO1xyXG4gICAgaWYgKGF2YXRhciA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignQmFubmVyIG1vZGUgJyArIGJhbm5lck1vZGUgKyAnIGRvZXMgbm90IGV4aXN0cy4nKTtcclxuICAgIH1cclxuICAgIHJldHVybiBhdmF0YXIuZGVmYXVsdEF2YXRhcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBwaG90b1VybChiYW5uZXJNb2RlOiBCYW5uZXJNb2RlLCBpZDogc3RyaW5nID0gJycpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFpZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRBdmF0YXJCeU1vZGUoYmFubmVyTW9kZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLm1hcHBpbmcuaGFzKGJhbm5lck1vZGUpKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBiYW5uZXIgbW9kZScpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYXZhdGFyID0gdGhpcy5tYXBwaW5nLmdldChiYW5uZXJNb2RlKTtcclxuICAgIGlmIChhdmF0YXIgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Jhbm5lciBtb2RlICcgKyBiYW5uZXJNb2RlICsgJyBkb2VzIG5vdCBleGlzdHMuJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5zZXNzaW9uQ29udGV4dC5hcGlTZXJ2ZXIgKyBhdmF0YXIuYXBpQ2FsbCArIGlkICsgJy9tb2RlLycgKyBiYW5uZXJNb2RlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFBob3RvU3R5bGVVcmwoYmFubmVyTW9kZTogQmFubmVyTW9kZSwgaWQ6IHN0cmluZyA9ICcnKTogU2FmZVN0eWxlIHtcclxuICAgIGNvbnN0IHVyaSA9IHRoaXMucGhvdG9VcmwoYmFubmVyTW9kZSwgaWQpO1xyXG4gICAgY29uc3QgdXJsID0gJ3VybCgnICsgdXJpICsgJyknO1xyXG5cclxuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0U3R5bGUodXJsKTtcclxuICB9XHJcblxyXG4gIC8vIGRlcHJpY2F0ZWQgbWV0aG9kLCBzaG91bGQgYmUgcmVtb3ZlZCBhZnRlciBwYXJ0bmVyIGFyZWEgdXBncmFkaW5nXHJcbiAgcHVibGljIGdldFBob3RvVXJsKGlkOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiAoIWlkKSA/ICdhc3NldHMvaW1nL2RlZmF1bHQtYXZhdGFyLnBuZycgOiB0aGlzLnNlc3Npb25Db250ZXh0LmFwaVNlcnZlciArICdhcGkvUHJvZmlsZS9HZXRQaG90by8nICsgaWQ7XHJcbiAgfVxyXG4gIHB1YmxpYyB0cmF2ZXJzZUFuZERvKHRyZWU6IEFycmF5PElUaWxlSW5mb05vZGU+LCBhY3Rpb246IElDb21tYW5kPElUaWxlSW5mb05vZGU+KSB7XHJcblxyXG4gICAgICB0cmVlLmZvckVhY2gobm9kZSA9PiB7XHJcbiAgICAgICAgICBpZiAobm9kZS5jaGlsZHJlbnMgIT0gbnVsbCAmJiBub2RlLmNoaWxkcmVucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50cmF2ZXJzZUFuZERvKG5vZGUuY2hpbGRyZW5zLCBhY3Rpb24pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBhY3Rpb24uZXhlY3V0ZShub2RlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdHJhdmVyc2VBbmRMaW1pdGVkRG8odHJlZTogQXJyYXk8SVRpbGVJbmZvTm9kZT4sIGFjdGlvbjogSUNvbW1hbmQ8SVRpbGVJbmZvTm9kZT4sIG1heENvdW50OiBudW1iZXIpIHtcclxuXHJcbiAgICB0cmVlLmZvckVhY2gobm9kZSA9PiB7XHJcbiAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW5zICE9IG51bGwgJiYgbm9kZS5jaGlsZHJlbnMubGVuZ3RoID4gMCAmJiB0aGlzLnJlY3Vyc2lvbkxpbWl0IDwgbWF4Q291bnQpIHtcclxuICAgICAgICAgICAgdGhpcy50cmF2ZXJzZUFuZExpbWl0ZWREbyhub2RlLmNoaWxkcmVucywgYWN0aW9uLCBtYXhDb3VudCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yZWN1cnNpb25MaW1pdCsrO1xyXG4gICAgICAgICAgICBhY3Rpb24uZXhlY3V0ZShub2RlKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxufVxyXG59XHJcbiJdfQ==