ng-yunzai-mobile
Version:
1. 适配yunzai_uni_app_x
466 lines • 34 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: devices/browser.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { BaseDevice } from "./base.device";
import { HttpClient } from "@angular/common/http";
import { Inject, Injectable } from "@angular/core";
import { BASE_CLIENT } from "../client/base.client";
import { map } from "rxjs/operators";
import { preloaderFinished } from "../auth/preloader";
import { of } from "rxjs";
import { Title } from "@angular/platform-browser";
import { TokenService } from "../token/token.service";
import { UserService } from "../user/user.service";
import * as i0 from "@angular/core";
import * as i1 from "../token/token.service";
import * as i2 from "@angular/common/http";
import * as i3 from "../user/user.service";
import * as i4 from "../client/base.client";
import * as i5 from "@angular/platform-browser";
var Browser = /** @class */ (function (_super) {
tslib_1.__extends(Browser, _super);
function Browser(tokenService, http, user, baseclient, title) {
var _this = _super.call(this) || this;
_this.tokenService = tokenService;
_this.http = http;
_this.user = user;
_this.baseclient = baseclient;
_this.title = title;
return _this;
}
/**
* @return {?}
*/
Browser.prototype.auth = /**
* @return {?}
*/
function () {
var _this = this;
if (this.baseclient.browser && this.baseclient.browser.auth === false) {
return new Promise((/**
* @param {?} resolve
* @param {?} reject
* @return {?}
*/
function (resolve, reject) {
preloaderFinished();
resolve(true);
}));
}
// 如果是本地开发配置了账号密码
if (this.baseclient.dev && this.baseclient.dev.username && this.baseclient.dev.password) {
return new Promise((/**
* @param {?} resolve
* @param {?} reject
* @return {?}
*/
function (resolve, reject) {
_this.authByConfiguredUserPass().then((/**
* @return {?}
*/
function () {
_this.http
.get(_this.baseclient.gateway + "/auth/user")
.subscribe((/**
* @param {?} response
* @return {?}
*/
function (response) {
_this.user.set(tslib_1.__assign({}, response.principal, { tenantId: response.tenantId }));
preloaderFinished();
resolve(true);
}));
}));
}));
}
// 走cas认证流程
return new Promise((/**
* @param {?} resolve
* @param {?} reject
* @return {?}
*/
function (resolve, reject) {
_this.authByCas().then((/**
* @return {?}
*/
function () {
_this.http
.get(_this.baseclient.gateway + "/auth/user")
.subscribe((/**
* @param {?} response
* @return {?}
*/
function (response) {
_this.user.set(tslib_1.__assign({}, response.principal, { tenantId: response.tenantId }));
preloaderFinished();
resolve(true);
}));
}));
}));
};
/**
* @private
* @return {?}
*/
Browser.prototype.authByCas = /**
* @private
* @return {?}
*/
function () {
var _this = this;
/** @type {?} */
var url = encodeURIComponent(window.location.href);
return this.http.get(this.baseclient.gateway + '/cas-proxy/app/validate_full?callback=' + url + '×tamp=' + new Date().getTime())
.pipe(map((/**
* @param {?} res
* @return {?}
*/
function (res) {
switch (res.errcode) {
case 2000:
/** @type {?} */
var token = {};
token.tokenType = res.data.token_type;
token.accessToken = res.data.access_token;
token.scope = res.data.scope;
token.tokenDateLine = res.data.expires_in;
_this.tokenService.set(token);
break;
case 2001:
window.location.href = res.msg;
break;
case 2002:
alert(res.data);
break;
case 2003:
case 5000:
case 5001:
alert(res.msg);
break;
default:
break;
}
}))).toPromise();
};
/**
* @private
* @return {?}
*/
Browser.prototype.authByConfiguredUserPass = /**
* @private
* @return {?}
*/
function () {
var _this = this;
/** @type {?} */
var form = new FormData();
form.set('username', this.baseclient.dev.username);
form.set('password', this.baseclient.dev.password);
form.set('grant_type', 'password');
form.set('client_id', 'webapp');
form.set('scope', 'webapp');
form.set('client_secret', '123456');
return this.http
.post(this.baseclient.gateway + "/auth/oauth/token", form)
.pipe(map((/**
* @param {?} response
* @return {?}
*/
function (response) {
/** @type {?} */
var token = {};
token.tokenType = response.token_type;
token.accessToken = response.access_token;
token.scope = response.scope;
token.tokenDateLine = response.expires_in;
_this.tokenService.set(token);
})))
.toPromise();
};
/**
* @return {?}
*/
Browser.prototype.getToken = /**
* @return {?}
*/
function () {
/** @type {?} */
var itoken = {
accessToken: this.tokenService.get().accessToken,
tokenType: this.tokenService.get().tokenType,
tokenDataLine: this.tokenService.get().tokenDateLine,
scope: this.tokenService.get().scope
};
return itoken;
};
/**
* @return {?}
*/
Browser.prototype.getUser = /**
* @return {?}
*/
function () {
/** @type {?} */
var iuser = Object.create({
account: this.user.get().username,
userName: this.user.get().username,
password: this.user.get().password,
userId: this.user.get().id,
realName: this.user.get().realname,
deptId: this.user.get().deptId,
deptName: this.user.get().deptName,
userType: this.user.get().userType
});
return iuser;
};
/**
* @param {?} iwindow
* @return {?}
*/
Browser.prototype.openWindow = /**
* @param {?} iwindow
* @return {?}
*/
function (iwindow) {
window.location.href = iwindow.url;
};
/**
* @return {?}
*/
Browser.prototype.scanCode = /**
* @return {?}
*/
function () {
alert("浏览器暂不支持扫码,请在APP中使用此功能!");
return of("浏览器暂不支持扫码,请在APP中使用此功能!");
};
/**
* @param {?} navigationBar
* @return {?}
*/
Browser.prototype.setNavigationBar = /**
* @param {?} navigationBar
* @return {?}
*/
function (navigationBar) {
alert("浏览器暂不支持放置按钮,请在APP中使用此功能!");
};
/**
* @param {?} ititle
* @return {?}
*/
Browser.prototype.setTitle = /**
* @param {?} ititle
* @return {?}
*/
function (ititle) {
this.title.setTitle(ititle.title);
};
/**
* @return {?}
*/
Browser.prototype.share = /**
* @return {?}
*/
function () {
alert("浏览器暂不支持分享,请在APP中使用此功能!");
};
/**
* @return {?}
*/
Browser.prototype.userLocation = /**
* @return {?}
*/
function () {
alert("浏览器暂不支持定位,请在APP中使用此功能!");
return of(null);
};
/**
* @param {?} bssids
* @return {?}
*/
Browser.prototype.validateInWifi = /**
* @param {?} bssids
* @return {?}
*/
function (bssids) {
alert("浏览器暂不支持WIFI验证,请在APP中使用此功能!");
return of(null);
};
/**
* @return {?}
*/
Browser.prototype.getWifiMac = /**
* @return {?}
*/
function () {
alert("浏览器暂不支持获取MAC地址,请在APP中使用此功能!");
return of("浏览器暂不支持获取MAC地址,请在APP中使用此功能!");
};
/**
* @param {?} count
* @return {?}
*/
Browser.prototype.chooseContacts = /**
* @param {?} count
* @return {?}
*/
function (count) {
alert("浏览器暂不支持获取联系人,请在APP中使用此功能!");
return of("浏览器暂不支持获取联系人,请在APP中使用此功能!");
};
/**
* @param {?} targetUserId
* @return {?}
*/
Browser.prototype.contactDetails = /**
* @param {?} targetUserId
* @return {?}
*/
function (targetUserId) {
alert("浏览器暂不支持查询联系人详细信息,请在APP中使用此功能!");
return of("浏览器暂不支持查询联系人详细信息,请在APP中使用此功能!");
};
/**
* @param {?} count
* @param {?} sourceType
* @return {?}
*/
Browser.prototype.uploadImage = /**
* @param {?} count
* @param {?} sourceType
* @return {?}
*/
function (count, sourceType) {
alert('浏览器暂不支持图片上传,请在APP中使用此功能!');
return undefined;
};
/**
* @param {?} url
* @param {?} openType
* @param {?} title
* @param {?} id
* @param {?} type
* @return {?}
*/
Browser.prototype.openReadWithTimer = /**
* @param {?} url
* @param {?} openType
* @param {?} title
* @param {?} id
* @param {?} type
* @return {?}
*/
function (url, openType, title, id, type) {
alert('浏览器暂不支持读物时间统计,请在APP中使用此功能!');
return undefined;
};
/**
* @param {?} limitMinute
* @return {?}
*/
Browser.prototype.uploadMovie = /**
* @param {?} limitMinute
* @return {?}
*/
function (limitMinute) {
alert('浏览器暂不支持视频上传,请在APP中使用此功能!');
return undefined;
};
/**
* @param {?} url
* @param {?} title
* @return {?}
*/
Browser.prototype.fileBrowser = /**
* @param {?} url
* @param {?} title
* @return {?}
*/
function (url, title) {
alert('浏览器暂不支持此功能,请在APP中使用此功能!');
return undefined;
};
/**
* @param {?} ticket
* @param {?} callback
* @return {?}
*/
Browser.prototype.startSearchBeacons = /**
* @param {?} ticket
* @param {?} callback
* @return {?}
*/
function (ticket, callback) {
throw new Error("Method not implemented.");
};
/**
* @param {?} callback
* @return {?}
*/
Browser.prototype.stopSearchBeacons = /**
* @param {?} callback
* @return {?}
*/
function (callback) {
throw new Error("Method not implemented.");
};
/**
* @param {?} callback
* @return {?}
*/
Browser.prototype.onSearchBeacons = /**
* @param {?} callback
* @return {?}
*/
function (callback) {
throw new Error("Method not implemented.");
};
Browser.decorators = [
{ type: Injectable, args: [{
providedIn: "root"
},] }
];
/** @nocollapse */
Browser.ctorParameters = function () { return [
{ type: TokenService },
{ type: HttpClient },
{ type: UserService },
{ type: undefined, decorators: [{ type: Inject, args: [BASE_CLIENT,] }] },
{ type: Title }
]; };
/** @nocollapse */ Browser.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function Browser_Factory() { return new Browser(i0.ɵɵinject(i1.TokenService), i0.ɵɵinject(i2.HttpClient), i0.ɵɵinject(i3.UserService), i0.ɵɵinject(i4.BASE_CLIENT), i0.ɵɵinject(i5.Title)); }, token: Browser, providedIn: "root" });
return Browser;
}(BaseDevice));
export { Browser };
if (false) {
/**
* @type {?}
* @private
*/
Browser.prototype.tokenService;
/**
* @type {?}
* @private
*/
Browser.prototype.http;
/**
* @type {?}
* @private
*/
Browser.prototype.user;
/**
* @type {?}
* @private
*/
Browser.prototype.baseclient;
/**
* @type {?}
* @private
*/
Browser.prototype.title;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXl1bnphaS1tb2JpbGUvIiwic291cmNlcyI6WyJkZXZpY2VzL2Jyb3dzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBYyxNQUFNLHVCQUF1QixDQUFDO0FBRWhFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUd0RCxPQUFPLEVBQW9CLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUc1QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7OztBQUduRDtJQUc2QixtQ0FBVTtJQUNyQyxpQkFDVSxZQUEwQixFQUMxQixJQUFnQixFQUNoQixJQUFpQixFQUNJLFVBQXNCLEVBQzNDLEtBQVk7UUFMdEIsWUFPRSxpQkFBTyxTQUNSO1FBUFMsa0JBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsVUFBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixVQUFJLEdBQUosSUFBSSxDQUFhO1FBQ0ksZ0JBQVUsR0FBVixVQUFVLENBQVk7UUFDM0MsV0FBSyxHQUFMLEtBQUssQ0FBTzs7SUFHdEIsQ0FBQzs7OztJQUVELHNCQUFJOzs7SUFBSjtRQUFBLGlCQWlDQztRQWhDQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxJQUFJLElBQUks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QUM3QyxDQUFDOzs7OztJQUNELG1DQUFpQjs7OztJQUFqQixVQUFrQixRQUE2QjtRQUM3QyxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQzs7Ozs7SUFDRCxpQ0FBZTs7OztJQUFmLFVBQWdCLFFBQTZCO1FBQzNDLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM3QyxDQUFDOztnQkF6TUYsVUFBVSxTQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7OztnQkFOUSxZQUFZO2dCQVpaLFVBQVU7Z0JBYVYsV0FBVztnREFXZixNQUFNLFNBQUMsV0FBVztnQkFiZCxLQUFLOzs7a0JBWmQ7Q0EyTkMsQUExTUQsQ0FHNkIsVUFBVSxHQXVNdEM7U0F2TVksT0FBTzs7Ozs7O0lBRWhCLCtCQUFrQzs7Ozs7SUFDbEMsdUJBQXdCOzs7OztJQUN4Qix1QkFBeUI7Ozs7O0lBQ3pCLDZCQUFtRDs7Ozs7SUFDbkQsd0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZURldmljZSB9IGZyb20gXCIuL2Jhc2UuZGV2aWNlXCI7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcclxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQkFTRV9DTElFTlQsIEJhc2VDbGllbnQgfSBmcm9tIFwiLi4vY2xpZW50L2Jhc2UuY2xpZW50XCI7XHJcbmltcG9ydCB7IElUaXRsZSB9IGZyb20gXCIuL21vZGVsL3RpdGxlXCI7XHJcbmltcG9ydCB7IG1hcCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5pbXBvcnQgeyBwcmVsb2FkZXJGaW5pc2hlZCB9IGZyb20gXCIuLi9hdXRoL3ByZWxvYWRlclwiO1xyXG5pbXBvcnQgeyBJdG9rZW4gfSBmcm9tIFwiLi4vYXV0aC9pdG9rZW5cIjtcclxuaW1wb3J0IHsgSVdpbmRvdyB9IGZyb20gXCIuL21vZGVsL3dpbmRvd1wiO1xyXG5pbXBvcnQgeyBmcm9tLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IE5hdmlnYXRpb25CYXIgfSBmcm9tIFwiLi9tb2RlbC9uYXZpZ2F0aW9uYmFyXCI7XHJcbmltcG9ydCB7IFVzZXJMb2NhdGlvbiB9IGZyb20gXCIuL21vZGVsL2xvY2F0aW9uXCI7XHJcbmltcG9ydCB7IFRpdGxlIH0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcclxuaW1wb3J0IHsgVG9rZW5TZXJ2aWNlIH0gZnJvbSBcIi4uL3Rva2VuL3Rva2VuLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tIFwiLi4vdXNlci91c2VyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgSVVzZXIgfSBmcm9tIFwiLi4vdXNlci91c2VyLmludGVyZmFjZVwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46IFwicm9vdFwiXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCcm93c2VyIGV4dGVuZHMgQmFzZURldmljZSB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHRva2VuU2VydmljZTogVG9rZW5TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSB1c2VyOiBVc2VyU2VydmljZSxcclxuICAgIEBJbmplY3QoQkFTRV9DTElFTlQpIHByaXZhdGUgYmFzZWNsaWVudDogQmFzZUNsaWVudCxcclxuICAgIHByaXZhdGUgdGl0bGU6IFRpdGxlXHJcbiAgKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gIH1cclxuXHJcbiAgYXV0aCgpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgaWYgKHRoaXMuYmFzZWNsaWVudC5icm93c2VyICYmIHRoaXMuYmFzZWNsaWVudC5icm93c2VyLmF1dGggPT09IGZhbHNlKSB7XHJcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICBwcmVsb2FkZXJGaW5pc2hlZCgpO1xyXG4gICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLy8g5aaC5p6c5piv5pys5Zyw5byA5Y+R6YWN572u5LqG6LSm5Y+35a+G56CBXHJcbiAgICBpZiAodGhpcy5iYXNlY2xpZW50LmRldiAmJiB0aGlzLmJhc2VjbGllbnQuZGV2LnVzZXJuYW1lICYmIHRoaXMuYmFzZWNsaWVudC5kZXYucGFzc3dvcmQpIHtcclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXV0aEJ5Q29uZmlndXJlZFVzZXJQYXNzKCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmh0dHBcclxuICAgICAgICAgICAgLmdldChgJHt0aGlzLmJhc2VjbGllbnQuZ2F0ZXdheX0vYXV0aC91c2VyYClcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMudXNlci5zZXQoeyAuLi5yZXNwb25zZS5wcmluY2lwYWwsIHRlbmFudElkOiByZXNwb25zZS50ZW5hbnRJZCB9KTtcclxuICAgICAgICAgICAgICBwcmVsb2FkZXJGaW5pc2hlZCgpO1xyXG4gICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vIOi1sGNhc+iupOivgea1geeoi1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICB0aGlzLmF1dGhCeUNhcygpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaHR0cFxyXG4gICAgICAgICAgLmdldChgJHt0aGlzLmJhc2VjbGllbnQuZ2F0ZXdheX0vYXV0aC91c2VyYClcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy51c2VyLnNldCh7IC4uLnJlc3BvbnNlLnByaW5jaXBhbCwgdGVuYW50SWQ6IHJlc3BvbnNlLnRlbmFudElkIH0pO1xyXG4gICAgICAgICAgICBwcmVsb2FkZXJGaW5pc2hlZCgpO1xyXG4gICAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBhdXRoQnlDYXMoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCB1cmwgPSBlbmNvZGVVUklDb21wb25lbnQod2luZG93LmxvY2F0aW9uLmhyZWYpO1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5iYXNlY2xpZW50LmdhdGV3YXkgKyAnL2Nhcy1wcm94eS9hcHAvdmFsaWRhdGVfZnVsbD9jYWxsYmFjaz0nICsgdXJsICsgJyZ0aW1lc3RhbXA9JyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBzd2l0Y2ggKHJlcy5lcnJjb2RlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgMjAwMDpcclxuICAgICAgICAgICAgICBjb25zdCB0b2tlbjogYW55ID0ge307XHJcbiAgICAgICAgICAgICAgdG9rZW4udG9rZW5UeXBlID0gcmVzLmRhdGEudG9rZW5fdHlwZTtcclxuICAgICAgICAgICAgICB0b2tlbi5hY2Nlc3NUb2tlbiA9IHJlcy5kYXRhLmFjY2Vzc190b2tlbjtcclxuICAgICAgICAgICAgICB0b2tlbi5zY29wZSA9IHJlcy5kYXRhLnNjb3BlO1xyXG4gICAgICAgICAgICAgIHRva2VuLnRva2VuRGF0ZUxpbmUgPSByZXMuZGF0YS5leHBpcmVzX2luO1xyXG4gICAgICAgICAgICAgIHRoaXMudG9rZW5TZXJ2aWNlLnNldCh0b2tlbik7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjAwMTpcclxuICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHJlcy5tc2c7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjAwMjpcclxuICAgICAgICAgICAgICBhbGVydChyZXMuZGF0YSk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgMjAwMzpcclxuICAgICAgICAgICAgY2FzZSA1MDAwOlxyXG4gICAgICAgICAgICBjYXNlIDUwMDE6XHJcbiAgICAgICAgICAgICAgYWxlcnQocmVzLm1zZyk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgKS50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXV0aEJ5Q29uZmlndXJlZFVzZXJQYXNzKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgZm9ybTogRm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcclxuICAgIGZvcm0uc2V0KCd1c2VybmFtZScsIHRoaXMuYmFzZWNsaWVudC5kZXYudXNlcm5hbWUpO1xyXG4gICAgZm9ybS5zZXQoJ3Bhc3N3b3JkJywgdGhpcy5iYXNlY2xpZW50LmRldi5wYXNzd29yZCk7XHJcbiAgICBmb3JtLnNldCgnZ3JhbnRfdHlwZScsICdwYXNzd29yZCcpO1xyXG4gICAgZm9ybS5zZXQoJ2NsaWVudF9pZCcsICd3ZWJhcHAnKTtcclxuICAgIGZvcm0uc2V0KCdzY29wZScsICd3ZWJhcHAnKTtcclxuICAgIGZvcm0uc2V0KCdjbGllbnRfc2VjcmV0JywgJzEyMzQ1NicpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHBcclxuICAgICAgLnBvc3QoYCR7dGhpcy5iYXNlY2xpZW50LmdhdGV3YXl9L2F1dGgvb2F1dGgvdG9rZW5gLCBmb3JtKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHRva2VuOiBhbnkgPSB7fTtcclxuICAgICAgICAgIHRva2VuLnRva2VuVHlwZSA9IHJlc3BvbnNlLnRva2VuX3R5cGU7XHJcbiAgICAgICAgICB0b2tlbi5hY2Nlc3NUb2tlbiA9IHJlc3BvbnNlLmFjY2Vzc190b2tlbjtcclxuICAgICAgICAgIHRva2VuLnNjb3BlID0gcmVzcG9uc2Uuc2NvcGU7XHJcbiAgICAgICAgICB0b2tlbi50b2tlbkRhdGVMaW5lID0gcmVzcG9uc2UuZXhwaXJlc19pbjtcclxuICAgICAgICAgIHRoaXMudG9rZW5TZXJ2aWNlLnNldCh0b2tlbik7XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgICAudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG5cclxuICBnZXRUb2tlbigpOiBJdG9rZW4ge1xyXG4gICAgY29uc3QgaXRva2VuOiBJdG9rZW4gPSB7XHJcbiAgICAgIGFjY2Vzc1Rva2VuOiB0aGlzLnRva2VuU2VydmljZS5nZXQoKS5hY2Nlc3NUb2tlbixcclxuICAgICAgdG9rZW5UeXBlOiB0aGlzLnRva2VuU2VydmljZS5nZXQoKS50b2tlblR5cGUsXHJcbiAgICAgIHRva2VuRGF0YUxpbmU6IHRoaXMudG9rZW5TZXJ2aWNlLmdldCgpLnRva2VuRGF0ZUxpbmUsXHJcbiAgICAgIHNjb3BlOiB0aGlzLnRva2VuU2VydmljZS5nZXQoKS5zY29wZVxyXG4gICAgfTtcclxuICAgIHJldHVybiBpdG9rZW47XHJcbiAgfVxyXG5cclxuICBnZXRVc2VyKCk6IElVc2VyIHtcclxuICAgIGNvbnN0IGl1c2VyOiBJVXNlciA9IE9iamVjdC5jcmVhdGUoe1xyXG4gICAgICBhY2NvdW50OiB0aGlzLnVzZXIuZ2V0KCkudXNlcm5hbWUsXHJcbiAgICAgIHVzZXJOYW1lOiB0aGlzLnVzZXIuZ2V0KCkudXNlcm5hbWUsXHJcbiAgICAgIHBhc3N3b3JkOiB0aGlzLnVzZXIuZ2V0KCkucGFzc3dvcmQsXHJcbiAgICAgIHVzZXJJZDogdGhpcy51c2VyLmdldCgpLmlkLFxyXG4gICAgICByZWFsTmFtZTogdGhpcy51c2VyLmdldCgpLnJlYWxuYW1lLFxyXG4gICAgICBkZXB0SWQ6IHRoaXMudXNlci5nZXQoKS5kZXB0SWQsXHJcbiAgICAgIGRlcHROYW1lOiB0aGlzLnVzZXIuZ2V0KCkuZGVwdE5hbWUsXHJcbiAgICAgIHVzZXJUeXBlOiB0aGlzLnVzZXIuZ2V0KCkudXNlclR5cGVcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGl1c2VyO1xyXG4gIH1cclxuXHJcbiAgb3BlbldpbmRvdyhpd2luZG93OiBJV2luZG93KTogdm9pZCB7XHJcbiAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IGl3aW5kb3cudXJsO1xyXG4gIH1cclxuXHJcbiAgc2NhbkNvZGUoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgIGFsZXJ0KFwi5rWP6KeI5Zmo5pqC5LiN5pSv5oyB5omr56CBLOivt+WcqEFQUOS4reS9v+eUqOatpOWKn+iDvSFcIik7XHJcbiAgICByZXR1cm4gb2YoXCLmtY/op4jlmajmmoLkuI3mlK/mjIHmiavnoIEs6K+35ZyoQVBQ5Lit5L2/55So5q2k5Yqf6IO9IVwiKTtcclxuICB9XHJcblxyXG4gIHNldE5hdmlnYXRpb25CYXIobmF2aWdhdGlvbkJhcjogTmF2aWdhdGlvbkJhcik6IHZvaWQge1xyXG4gICAgYWxlcnQoXCLmtY/op4jlmajmmoLkuI3mlK/mjIHmlL7nva7mjInpkq4s6K+35ZyoQVBQ5Lit5L2/55So5q2k5Yqf6IO9IVwiKTtcclxuICB9XHJcblxyXG4gIHNldFRpdGxlKGl0aXRsZTogSVRpdGxlKTogdm9pZCB7XHJcbiAgICB0aGlzLnRpdGxlLnNldFRpdGxlKGl0aXRsZS50aXRsZSk7XHJcbiAgfVxyXG5cclxuICBzaGFyZSgpOiB2b2lkIHtcclxuICAgIGFsZXJ0KFwi5rWP6KeI5Zmo5pqC5LiN5pSv5oyB5YiG5LqrLOivt+WcqEFQUOS4reS9v+eUqOatpOWKn+iDvSFcIik7XHJcbiAgfVxyXG5cclxuICB1c2VyTG9jYXRpb24oKTogT2JzZXJ2YWJsZTxVc2VyTG9jYXRpb24+IHtcclxuICAgIGFsZXJ0KFwi5rWP6KeI5Zmo5pqC5LiN5pSv5oyB5a6a5L2NLOivt+WcqEFQUOS4reS9v+eUqOatpOWKn+iDvSFcIik7XHJcbiAgICByZXR1cm4gb2YobnVsbCk7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZUluV2lmaShic3NpZHM6IEFycmF5PHN0cmluZz4pOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcclxuICAgIGFsZXJ0KFwi5rWP6KeI5Zmo5pqC5LiN5pSv5oyBV0lGSemqjOivgSzor7flnKhBUFDkuK3kvb/nlKjmraTlip/og70hXCIpO1xyXG4gICAgcmV0dXJuIG9mKG51bGwpO1xyXG4gIH1cclxuXHJcbiAgZ2V0V2lmaU1hYygpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgYWxlcnQoXCLmtY/op4jlmajmmoLkuI3mlK/mjIHojrflj5ZNQUPlnLDlnYAs6K+35ZyoQVBQ5Lit5L2/55So5q2k5Yqf6IO9IVwiKTtcclxuICAgIHJldHVybiBvZihcIua1j+iniOWZqOaaguS4jeaUr+aMgeiOt+WPlk1BQ+WcsOWdgCzor7flnKhBUFDkuK3kvb/nlKjmraTlip/og70hXCIpO1xyXG4gIH1cclxuXHJcbiAgY2hvb3NlQ29udGFjdHMoY291bnQ6IG51bWJlcik6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBhbGVydChcIua1j+iniOWZqOaaguS4jeaUr+aMgeiOt+WPluiBlOezu+S6uizor7flnKhBUFDkuK3kvb/nlKjmraTlip/og70hXCIpO1xyXG4gICAgcmV0dXJuIG9mKFwi5rWP6KeI5Zmo5pqC5LiN5pSv5oyB6I635Y+W6IGU57O75Lq6LOivt+WcqEFQUOS4reS9v+eUqOatpOWKn+iDvSFcIik7XHJcbiAgfVxyXG5cclxuICBjb250YWN0RGV0YWlscyh0YXJnZXRVc2VySWQ6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBhbGVydChcIua1j+iniOWZqOaaguS4jeaUr+aMgeafpeivouiBlOezu+S6uuivpue7huS/oeaBryzor7flnKhBUFDkuK3kvb/nlKjmraTlip/og70hXCIpO1xyXG4gICAgcmV0dXJuIG9mKFwi5rWP6KeI5Zmo5pqC5LiN5pSv5oyB5p+l6K+i6IGU57O75Lq66K+m57uG5L+h5oGvLOivt+WcqEFQUOS4reS9v+eUqOatpOWKn+iDvSFcIik7XHJcbiAgfVxyXG5cclxuICB1cGxvYWRJbWFnZShjb3VudDogbnVtYmVyLCBzb3VyY2VUeXBlOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgYWxlcnQoJ+a1j+iniOWZqOaaguS4jeaUr+aMgeWbvueJh+S4iuS8oCzor7flnKhBUFDkuK3kvb/nlKjmraTlip/og70hJyk7XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgb3BlblJlYWRXaXRoVGltZXIodXJsOiBhbnksIG9wZW5UeXBlOiBhbnksIHRpdGxlOiBhbnksIGlkOiBhbnksIHR5cGU6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBhbGVydCgn5rWP6KeI5Zmo5pqC5LiN5pSv5oyB6K+754mp5pe26Ze057uf6K6hLOivt+WcqEFQUOS4reS9v+eUqOatpOWKn+iDvSEnKTtcclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG4gIHVwbG9hZE1vdmllKGxpbWl0TWludXRlOiBudW1iZXIpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgYWxlcnQoJ+a1j+iniOWZqOaaguS4jeaUr+aMgeinhumikeS4iuS8oCzor7flnKhBUFDkuK3kvb/nlKjmraTlip/og70hJyk7XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuICBmaWxlQnJvd3Nlcih1cmw6IHN0cmluZyx0aXRsZTpzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgYWxlcnQoJ+a1j+iniOWZqOaaguS4jeaUr+aMgeatpOWKn+iDvSzor7flnKhBUFDkuK3kvb/nlKjmraTlip/og70hJyk7XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuICBzdGFydFNlYXJjaEJlYWNvbnModGlja2V0OiBzdHJpbmcsIGNhbGxiYWNrOiAoYXJndjogYW55KSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcclxuICB9XHJcbiAgc3RvcFNlYXJjaEJlYWNvbnMoY2FsbGJhY2s6IChhcmd2OiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xyXG4gIH1cclxuICBvblNlYXJjaEJlYWNvbnMoY2FsbGJhY2s6IChhcmd2OiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xyXG4gIH1cclxufVxyXG4iXX0=