ng-yunzai-mobile
Version:
1. 适配yunzai_uni_app_x
377 lines • 31.4 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: devices/browser.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
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";
export class Browser extends BaseDevice {
/**
* @param {?} tokenService
* @param {?} http
* @param {?} user
* @param {?} baseclient
* @param {?} title
*/
constructor(tokenService, http, user, baseclient, title) {
super();
this.tokenService = tokenService;
this.http = http;
this.user = user;
this.baseclient = baseclient;
this.title = title;
}
/**
* @return {?}
*/
auth() {
if (this.baseclient.browser && this.baseclient.browser.auth === false) {
return new Promise((/**
* @param {?} resolve
* @param {?} reject
* @return {?}
*/
(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 {?}
*/
(resolve, reject) => {
this.authByConfiguredUserPass().then((/**
* @return {?}
*/
() => {
this.http
.get(`${this.baseclient.gateway}/auth/user`)
.subscribe((/**
* @param {?} response
* @return {?}
*/
(response) => {
this.user.set(Object.assign({}, response.principal, { tenantId: response.tenantId }));
preloaderFinished();
resolve(true);
}));
}));
}));
}
// 走cas认证流程
return new Promise((/**
* @param {?} resolve
* @param {?} reject
* @return {?}
*/
(resolve, reject) => {
this.authByCas().then((/**
* @return {?}
*/
() => {
this.http
.get(`${this.baseclient.gateway}/auth/user`)
.subscribe((/**
* @param {?} response
* @return {?}
*/
(response) => {
this.user.set(Object.assign({}, response.principal, { tenantId: response.tenantId }));
preloaderFinished();
resolve(true);
}));
}));
}));
}
/**
* @private
* @return {?}
*/
authByCas() {
/** @type {?} */
const 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 {?}
*/
(res) => {
switch (res.errcode) {
case 2000:
/** @type {?} */
const 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 {?}
*/
authByConfiguredUserPass() {
/** @type {?} */
const 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 {?}
*/
(response) => {
/** @type {?} */
const 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 {?}
*/
getToken() {
/** @type {?} */
const itoken = {
accessToken: this.tokenService.get().accessToken,
tokenType: this.tokenService.get().tokenType,
tokenDataLine: this.tokenService.get().tokenDateLine,
scope: this.tokenService.get().scope
};
return itoken;
}
/**
* @return {?}
*/
getUser() {
/** @type {?} */
const 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 {?}
*/
openWindow(iwindow) {
window.location.href = iwindow.url;
}
/**
* @return {?}
*/
scanCode() {
alert("浏览器暂不支持扫码,请在APP中使用此功能!");
return of("浏览器暂不支持扫码,请在APP中使用此功能!");
}
/**
* @param {?} navigationBar
* @return {?}
*/
setNavigationBar(navigationBar) {
alert("浏览器暂不支持放置按钮,请在APP中使用此功能!");
}
/**
* @param {?} ititle
* @return {?}
*/
setTitle(ititle) {
this.title.setTitle(ititle.title);
}
/**
* @return {?}
*/
share() {
alert("浏览器暂不支持分享,请在APP中使用此功能!");
}
/**
* @return {?}
*/
userLocation() {
alert("浏览器暂不支持定位,请在APP中使用此功能!");
return of(null);
}
/**
* @param {?} bssids
* @return {?}
*/
validateInWifi(bssids) {
alert("浏览器暂不支持WIFI验证,请在APP中使用此功能!");
return of(null);
}
/**
* @return {?}
*/
getWifiMac() {
alert("浏览器暂不支持获取MAC地址,请在APP中使用此功能!");
return of("浏览器暂不支持获取MAC地址,请在APP中使用此功能!");
}
/**
* @param {?} count
* @return {?}
*/
chooseContacts(count) {
alert("浏览器暂不支持获取联系人,请在APP中使用此功能!");
return of("浏览器暂不支持获取联系人,请在APP中使用此功能!");
}
/**
* @param {?} targetUserId
* @return {?}
*/
contactDetails(targetUserId) {
alert("浏览器暂不支持查询联系人详细信息,请在APP中使用此功能!");
return of("浏览器暂不支持查询联系人详细信息,请在APP中使用此功能!");
}
/**
* @param {?} count
* @param {?} sourceType
* @return {?}
*/
uploadImage(count, sourceType) {
alert('浏览器暂不支持图片上传,请在APP中使用此功能!');
return undefined;
}
/**
* @param {?} url
* @param {?} openType
* @param {?} title
* @param {?} id
* @param {?} type
* @return {?}
*/
openReadWithTimer(url, openType, title, id, type) {
alert('浏览器暂不支持读物时间统计,请在APP中使用此功能!');
return undefined;
}
/**
* @param {?} limitMinute
* @return {?}
*/
uploadMovie(limitMinute) {
alert('浏览器暂不支持视频上传,请在APP中使用此功能!');
return undefined;
}
/**
* @param {?} url
* @param {?} title
* @return {?}
*/
fileBrowser(url, title) {
alert('浏览器暂不支持此功能,请在APP中使用此功能!');
return undefined;
}
/**
* @param {?} ticket
* @param {?} callback
* @return {?}
*/
startSearchBeacons(ticket, callback) {
throw new Error("Method not implemented.");
}
/**
* @param {?} callback
* @return {?}
*/
stopSearchBeacons(callback) {
throw new Error("Method not implemented.");
}
/**
* @param {?} callback
* @return {?}
*/
onSearchBeacons(callback) {
throw new Error("Method not implemented.");
}
}
Browser.decorators = [
{ type: Injectable, args: [{
providedIn: "root"
},] }
];
/** @nocollapse */
Browser.ctorParameters = () => [
{ 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" });
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXl1bnphaS1tb2JpbGUvIiwic291cmNlcyI6WyJkZXZpY2VzL2Jyb3dzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsV0FBVyxFQUFjLE1BQU0sdUJBQXVCLENBQUM7QUFFaEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBR3RELE9BQU8sRUFBb0IsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRzVDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7O0FBTW5ELE1BQU0sT0FBTyxPQUFRLFNBQVEsVUFBVTs7Ozs7Ozs7SUFDckMsWUFDVSxZQUEwQixFQUMxQixJQUFnQixFQUNoQixJQUFpQixFQUNJLFVBQXNCLEVBQzNDLEtBQVk7UUFFcEIsS0FBSyxFQUFFLENBQUM7UUFOQSxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLFNBQUksR0FBSixJQUFJLENBQWE7UUFDSSxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQzNDLFVBQUssR0FBTCxLQUFLLENBQU87SUFHdEIsQ0FBQzs7OztJQUVELElBQUk7UUFDRixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxV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QWUsQ0FBQyxRQUE2QjtRQUMzQyxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQzs7O1lBek1GLFVBQVUsU0FBQztnQkFDVixVQUFVLEVBQUUsTUFBTTthQUNuQjs7OztZQU5RLFlBQVk7WUFaWixVQUFVO1lBYVYsV0FBVzs0Q0FXZixNQUFNLFNBQUMsV0FBVztZQWJkLEtBQUs7Ozs7Ozs7O0lBVVYsK0JBQWtDOzs7OztJQUNsQyx1QkFBd0I7Ozs7O0lBQ3hCLHVCQUF5Qjs7Ozs7SUFDekIsNkJBQW1EOzs7OztJQUNuRCx3QkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlRGV2aWNlIH0gZnJvbSBcIi4vYmFzZS5kZXZpY2VcIjtcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBCQVNFX0NMSUVOVCwgQmFzZUNsaWVudCB9IGZyb20gXCIuLi9jbGllbnQvYmFzZS5jbGllbnRcIjtcclxuaW1wb3J0IHsgSVRpdGxlIH0gZnJvbSBcIi4vbW9kZWwvdGl0bGVcIjtcclxuaW1wb3J0IHsgbWFwIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7IHByZWxvYWRlckZpbmlzaGVkIH0gZnJvbSBcIi4uL2F1dGgvcHJlbG9hZGVyXCI7XHJcbmltcG9ydCB7IEl0b2tlbiB9IGZyb20gXCIuLi9hdXRoL2l0b2tlblwiO1xyXG5pbXBvcnQgeyBJV2luZG93IH0gZnJvbSBcIi4vbW9kZWwvd2luZG93XCI7XHJcbmltcG9ydCB7IGZyb20sIE9ic2VydmFibGUsIG9mIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgTmF2aWdhdGlvbkJhciB9IGZyb20gXCIuL21vZGVsL25hdmlnYXRpb25iYXJcIjtcclxuaW1wb3J0IHsgVXNlckxvY2F0aW9uIH0gZnJvbSBcIi4vbW9kZWwvbG9jYXRpb25cIjtcclxuaW1wb3J0IHsgVGl0bGUgfSBmcm9tIFwiQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3NlclwiO1xyXG5pbXBvcnQgeyBUb2tlblNlcnZpY2UgfSBmcm9tIFwiLi4vdG9rZW4vdG9rZW4uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gXCIuLi91c2VyL3VzZXIuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBJVXNlciB9IGZyb20gXCIuLi91c2VyL3VzZXIuaW50ZXJmYWNlXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogXCJyb290XCJcclxufSlcclxuZXhwb3J0IGNsYXNzIEJyb3dzZXIgZXh0ZW5kcyBCYXNlRGV2aWNlIHtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgdG9rZW5TZXJ2aWNlOiBUb2tlblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBwcml2YXRlIHVzZXI6IFVzZXJTZXJ2aWNlLFxyXG4gICAgQEluamVjdChCQVNFX0NMSUVOVCkgcHJpdmF0ZSBiYXNlY2xpZW50OiBCYXNlQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSB0aXRsZTogVGl0bGVcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBhdXRoKCk6IFByb21pc2U8YW55PiB7XHJcbiAgICBpZiAodGhpcy5iYXNlY2xpZW50LmJyb3dzZXIgJiYgdGhpcy5iYXNlY2xpZW50LmJyb3dzZXIuYXV0aCA9PT0gZmFsc2UpIHtcclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHByZWxvYWRlckZpbmlzaGVkKCk7XHJcbiAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvLyDlpoLmnpzmmK/mnKzlnLDlvIDlj5HphY3nva7kuobotKblj7flr4bnoIFcclxuICAgIGlmICh0aGlzLmJhc2VjbGllbnQuZGV2ICYmIHRoaXMuYmFzZWNsaWVudC5kZXYudXNlcm5hbWUgJiYgdGhpcy5iYXNlY2xpZW50LmRldi5wYXNzd29yZCkge1xyXG4gICAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgdGhpcy5hdXRoQnlDb25maWd1cmVkVXNlclBhc3MoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuaHR0cFxyXG4gICAgICAgICAgICAuZ2V0KGAke3RoaXMuYmFzZWNsaWVudC5nYXRld2F5fS9hdXRoL3VzZXJgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy51c2VyLnNldCh7IC4uLnJlc3BvbnNlLnByaW5jaXBhbCwgdGVuYW50SWQ6IHJlc3BvbnNlLnRlbmFudElkIH0pO1xyXG4gICAgICAgICAgICAgIHByZWxvYWRlckZpbmlzaGVkKCk7XHJcbiAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgLy8g6LWwY2Fz6K6k6K+B5rWB56iLXHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIHRoaXMuYXV0aEJ5Q2FzKCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5odHRwXHJcbiAgICAgICAgICAuZ2V0KGAke3RoaXMuYmFzZWNsaWVudC5nYXRld2F5fS9hdXRoL3VzZXJgKVxyXG4gICAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVzZXIuc2V0KHsgLi4ucmVzcG9uc2UucHJpbmNpcGFsLCB0ZW5hbnRJZDogcmVzcG9uc2UudGVuYW50SWQgfSk7XHJcbiAgICAgICAgICAgIHByZWxvYWRlckZpbmlzaGVkKCk7XHJcbiAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBwcml2YXRlIGF1dGhCeUNhcygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IHVybCA9IGVuY29kZVVSSUNvbXBvbmVudCh3aW5kb3cubG9jYXRpb24uaHJlZik7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLmJhc2VjbGllbnQuZ2F0ZXdheSArICcvY2FzLXByb3h5L2FwcC92YWxpZGF0ZV9mdWxsP2NhbGxiYWNrPScgKyB1cmwgKyAnJnRpbWVzdGFtcD0nICsgbmV3IERhdGUoKS5nZXRUaW1lKCkpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIHN3aXRjaCAocmVzLmVycmNvZGUpIHtcclxuICAgICAgICAgICAgY2FzZSAyMDAwOlxyXG4gICAgICAgICAgICAgIGNvbnN0IHRva2VuOiBhbnkgPSB7fTtcclxuICAgICAgICAgICAgICB0b2tlbi50b2tlblR5cGUgPSByZXMuZGF0YS50b2tlbl90eXBlO1xyXG4gICAgICAgICAgICAgIHRva2VuLmFjY2Vzc1Rva2VuID0gcmVzLmRhdGEuYWNjZXNzX3Rva2VuO1xyXG4gICAgICAgICAgICAgIHRva2VuLnNjb3BlID0gcmVzLmRhdGEuc2NvcGU7XHJcbiAgICAgICAgICAgICAgdG9rZW4udG9rZW5EYXRlTGluZSA9IHJlcy5kYXRhLmV4cGlyZXNfaW47XHJcbiAgICAgICAgICAgICAgdGhpcy50b2tlblNlcnZpY2Uuc2V0KHRva2VuKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyMDAxOlxyXG4gICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gcmVzLm1zZztcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyMDAyOlxyXG4gICAgICAgICAgICAgIGFsZXJ0KHJlcy5kYXRhKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSAyMDAzOlxyXG4gICAgICAgICAgICBjYXNlIDUwMDA6XHJcbiAgICAgICAgICAgIGNhc2UgNTAwMTpcclxuICAgICAgICAgICAgICBhbGVydChyZXMubXNnKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhdXRoQnlDb25maWd1cmVkVXNlclBhc3MoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBmb3JtOiBGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgZm9ybS5zZXQoJ3VzZXJuYW1lJywgdGhpcy5iYXNlY2xpZW50LmRldi51c2VybmFtZSk7XHJcbiAgICBmb3JtLnNldCgncGFzc3dvcmQnLCB0aGlzLmJhc2VjbGllbnQuZGV2LnBhc3N3b3JkKTtcclxuICAgIGZvcm0uc2V0KCdncmFudF90eXBlJywgJ3Bhc3N3b3JkJyk7XHJcbiAgICBmb3JtLnNldCgnY2xpZW50X2lkJywgJ3dlYmFwcCcpO1xyXG4gICAgZm9ybS5zZXQoJ3Njb3BlJywgJ3dlYmFwcCcpO1xyXG4gICAgZm9ybS5zZXQoJ2NsaWVudF9zZWNyZXQnLCAnMTIzNDU2Jyk7XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxyXG4gICAgICAucG9zdChgJHt0aGlzLmJhc2VjbGllbnQuZ2F0ZXdheX0vYXV0aC9vYXV0aC90b2tlbmAsIGZvcm0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgdG9rZW46IGFueSA9IHt9O1xyXG4gICAgICAgICAgdG9rZW4udG9rZW5UeXBlID0gcmVzcG9uc2UudG9rZW5fdHlwZTtcclxuICAgICAgICAgIHRva2VuLmFjY2Vzc1Rva2VuID0gcmVzcG9uc2UuYWNjZXNzX3Rva2VuO1xyXG4gICAgICAgICAgdG9rZW4uc2NvcGUgPSByZXNwb25zZS5zY29wZTtcclxuICAgICAgICAgIHRva2VuLnRva2VuRGF0ZUxpbmUgPSByZXNwb25zZS5leHBpcmVzX2luO1xyXG4gICAgICAgICAgdGhpcy50b2tlblNlcnZpY2Uuc2V0KHRva2VuKTtcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICAgIC50b1Byb21pc2UoKTtcclxuICB9XHJcblxyXG4gIGdldFRva2VuKCk6IEl0b2tlbiB7XHJcbiAgICBjb25zdCBpdG9rZW46IEl0b2tlbiA9IHtcclxuICAgICAgYWNjZXNzVG9rZW46IHRoaXMudG9rZW5TZXJ2aWNlLmdldCgpLmFjY2Vzc1Rva2VuLFxyXG4gICAgICB0b2tlblR5cGU6IHRoaXMudG9rZW5TZXJ2aWNlLmdldCgpLnRva2VuVHlwZSxcclxuICAgICAgdG9rZW5EYXRhTGluZTogdGhpcy50b2tlblNlcnZpY2UuZ2V0KCkudG9rZW5EYXRlTGluZSxcclxuICAgICAgc2NvcGU6IHRoaXMudG9rZW5TZXJ2aWNlLmdldCgpLnNjb3BlXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGl0b2tlbjtcclxuICB9XHJcblxyXG4gIGdldFVzZXIoKTogSVVzZXIge1xyXG4gICAgY29uc3QgaXVzZXI6IElVc2VyID0gT2JqZWN0LmNyZWF0ZSh7XHJcbiAgICAgIGFjY291bnQ6IHRoaXMudXNlci5nZXQoKS51c2VybmFtZSxcclxuICAgICAgdXNlck5hbWU6IHRoaXMudXNlci5nZXQoKS51c2VybmFtZSxcclxuICAgICAgcGFzc3dvcmQ6IHRoaXMudXNlci5nZXQoKS5wYXNzd29yZCxcclxuICAgICAgdXNlcklkOiB0aGlzLnVzZXIuZ2V0KCkuaWQsXHJcbiAgICAgIHJlYWxOYW1lOiB0aGlzLnVzZXIuZ2V0KCkucmVhbG5hbWUsXHJcbiAgICAgIGRlcHRJZDogdGhpcy51c2VyLmdldCgpLmRlcHRJZCxcclxuICAgICAgZGVwdE5hbWU6IHRoaXMudXNlci5nZXQoKS5kZXB0TmFtZSxcclxuICAgICAgdXNlclR5cGU6IHRoaXMudXNlci5nZXQoKS51c2VyVHlwZVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gaXVzZXI7XHJcbiAgfVxyXG5cclxuICBvcGVuV2luZG93KGl3aW5kb3c6IElXaW5kb3cpOiB2b2lkIHtcclxuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gaXdpbmRvdy51cmw7XHJcbiAgfVxyXG5cclxuICBzY2FuQ29kZSgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgYWxlcnQoXCLmtY/op4jlmajmmoLkuI3mlK/mjIHmiavnoIEs6K+35ZyoQVBQ5Lit5L2/55So5q2k5Yqf6IO9IVwiKTtcclxuICAgIHJldHVybiBvZihcIua1j+iniOWZqOaaguS4jeaUr+aMgeaJq+eggSzor7flnKhBUFDkuK3kvb/nlKjmraTlip/og70hXCIpO1xyXG4gIH1cclxuXHJcbiAgc2V0TmF2aWdhdGlvbkJhcihuYXZpZ2F0aW9uQmFyOiBOYXZpZ2F0aW9uQmFyKTogdm9pZCB7XHJcbiAgICBhbGVydChcIua1j+iniOWZqOaaguS4jeaUr+aMgeaUvue9ruaMiemSrizor7flnKhBUFDkuK3kvb/nlKjmraTlip/og70hXCIpO1xyXG4gIH1cclxuXHJcbiAgc2V0VGl0bGUoaXRpdGxlOiBJVGl0bGUpOiB2b2lkIHtcclxuICAgIHRoaXMudGl0bGUuc2V0VGl0bGUoaXRpdGxlLnRpdGxlKTtcclxuICB9XHJcblxyXG4gIHNoYXJlKCk6IHZvaWQge1xyXG4gICAgYWxlcnQoXCLmtY/op4jlmajmmoLkuI3mlK/mjIHliIbkuqss6K+35ZyoQVBQ5Lit5L2/55So5q2k5Yqf6IO9IVwiKTtcclxuICB9XHJcblxyXG4gIHVzZXJMb2NhdGlvbigpOiBPYnNlcnZhYmxlPFVzZXJMb2NhdGlvbj4ge1xyXG4gICAgYWxlcnQoXCLmtY/op4jlmajmmoLkuI3mlK/mjIHlrprkvY0s6K+35ZyoQVBQ5Lit5L2/55So5q2k5Yqf6IO9IVwiKTtcclxuICAgIHJldHVybiBvZihudWxsKTtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlSW5XaWZpKGJzc2lkczogQXJyYXk8c3RyaW5nPik6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xyXG4gICAgYWxlcnQoXCLmtY/op4jlmajmmoLkuI3mlK/mjIFXSUZJ6aqM6K+BLOivt+WcqEFQUOS4reS9v+eUqOatpOWKn+iDvSFcIik7XHJcbiAgICByZXR1cm4gb2YobnVsbCk7XHJcbiAgfVxyXG5cclxuICBnZXRXaWZpTWFjKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICBhbGVydChcIua1j+iniOWZqOaaguS4jeaUr+aMgeiOt+WPlk1BQ+WcsOWdgCzor7flnKhBUFDkuK3kvb/nlKjmraTlip/og70hXCIpO1xyXG4gICAgcmV0dXJuIG9mKFwi5rWP6KeI5Zmo5pqC5LiN5pSv5oyB6I635Y+WTUFD5Zyw5Z2ALOivt+WcqEFQUOS4reS9v+eUqOatpOWKn+iDvSFcIik7XHJcbiAgfVxyXG5cclxuICBjaG9vc2VDb250YWN0cyhjb3VudDogbnVtYmVyKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGFsZXJ0KFwi5rWP6KeI5Zmo5pqC5LiN5pSv5oyB6I635Y+W6IGU57O75Lq6LOivt+WcqEFQUOS4reS9v+eUqOatpOWKn+iDvSFcIik7XHJcbiAgICByZXR1cm4gb2YoXCLmtY/op4jlmajmmoLkuI3mlK/mjIHojrflj5bogZTns7vkuros6K+35ZyoQVBQ5Lit5L2/55So5q2k5Yqf6IO9IVwiKTtcclxuICB9XHJcblxyXG4gIGNvbnRhY3REZXRhaWxzKHRhcmdldFVzZXJJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGFsZXJ0KFwi5rWP6KeI5Zmo5pqC5LiN5pSv5oyB5p+l6K+i6IGU57O75Lq66K+m57uG5L+h5oGvLOivt+WcqEFQUOS4reS9v+eUqOatpOWKn+iDvSFcIik7XHJcbiAgICByZXR1cm4gb2YoXCLmtY/op4jlmajmmoLkuI3mlK/mjIHmn6Xor6LogZTns7vkurror6bnu4bkv6Hmga8s6K+35ZyoQVBQ5Lit5L2/55So5q2k5Yqf6IO9IVwiKTtcclxuICB9XHJcblxyXG4gIHVwbG9hZEltYWdlKGNvdW50OiBudW1iZXIsIHNvdXJjZVR5cGU6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBhbGVydCgn5rWP6KeI5Zmo5pqC5LiN5pSv5oyB5Zu+54mH5LiK5LygLOivt+WcqEFQUOS4reS9v+eUqOatpOWKn+iDvSEnKTtcclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBvcGVuUmVhZFdpdGhUaW1lcih1cmw6IGFueSwgb3BlblR5cGU6IGFueSwgdGl0bGU6IGFueSwgaWQ6IGFueSwgdHlwZTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGFsZXJ0KCfmtY/op4jlmajmmoLkuI3mlK/mjIHor7vnianml7bpl7Tnu5/orqEs6K+35ZyoQVBQ5Lit5L2/55So5q2k5Yqf6IO9IScpO1xyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcbiAgdXBsb2FkTW92aWUobGltaXRNaW51dGU6IG51bWJlcik6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBhbGVydCgn5rWP6KeI5Zmo5pqC5LiN5pSv5oyB6KeG6aKR5LiK5LygLOivt+WcqEFQUOS4reS9v+eUqOatpOWKn+iDvSEnKTtcclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG4gIGZpbGVCcm93c2VyKHVybDogc3RyaW5nLHRpdGxlOnN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBhbGVydCgn5rWP6KeI5Zmo5pqC5LiN5pSv5oyB5q2k5Yqf6IO9LOivt+WcqEFQUOS4reS9v+eUqOatpOWKn+iDvSEnKTtcclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG4gIHN0YXJ0U2VhcmNoQmVhY29ucyh0aWNrZXQ6IHN0cmluZywgY2FsbGJhY2s6IChhcmd2OiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xyXG4gIH1cclxuICBzdG9wU2VhcmNoQmVhY29ucyhjYWxsYmFjazogKGFyZ3Y6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XHJcbiAgfVxyXG4gIG9uU2VhcmNoQmVhY29ucyhjYWxsYmFjazogKGFyZ3Y6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XHJcbiAgfVxyXG59XHJcbiJdfQ==