UNPKG

ng-yunzai-mobile

Version:

1. 适配yunzai_uni_app_x

533 lines 37.2 kB
/** * @fileoverview added by tsickle * Generated from: devices/ios.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 { preloaderFinished } from "../auth/preloader"; import { from } from "rxjs"; 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"; export class IOS extends BaseDevice { /** * @param {?} tokenService * @param {?} http * @param {?} user * @param {?} baseclient */ constructor(tokenService, http, user, baseclient) { super(); this.tokenService = tokenService; this.http = http; this.user = user; this.baseclient = baseclient; } /** * 手机网页认证 * @return {?} */ auth() { if (this.baseclient.ios && this.baseclient.ios.auth === false) { return new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { preloaderFinished(); resolve(true); })); } if (null === this.baseclient.mobileVersion || this.baseclient.mobileVersion === "V6") { return new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { // 设置token this.tokenService.set((/** @type {?} */ (this.getToken()))); // 发送/user请求 this.http .get(`${this.baseclient.gateway}/auth/user`) .subscribe((/** * @param {?} response * @return {?} */ (response) => { // 设置user this.user.set(Object.assign({}, response.principal, { tenantId: response.tenantId })); // 加载结束 preloaderFinished(); resolve(true); })); })); } else if (null !== this.baseclient.mobileVersion && this.baseclient.mobileVersion === "V5") { /** @type {?} */ const userInfo = yz.getUserInfoSync(); /** @type {?} */ const formData = new FormData(); const { account, password } = userInfo; formData.set("username", account); formData.set("password", password); formData.set("grant_type", "password"); formData.set("client_id", "webapp"); formData.set("scope", "webapp"); formData.set("client_secret", "123456"); return new Promise(((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { this.http.post(`${this.baseclient.gateway}/auth/oauth/token`, formData).subscribe((/** * @param {?} response * @return {?} */ (response) => { /** @type {?} */ let tokenInfo = {}; tokenInfo['accessToken'] = response.access_token; tokenInfo['tokenType'] = response.token_type; tokenInfo['refreshToken'] = response.refresh_token; tokenInfo['expiresIn'] = response.expires_in; tokenInfo['scope'] = response.scope; this.tokenService.set((/** @type {?} */ (tokenInfo))); this.http.get(`${this.baseclient.gateway}/auth/user`).subscribe((/** * @param {?} response * @return {?} */ (response) => { // 设置user this.user.set(Object.assign({}, response.principal, { tenantId: response.tenantId })); // 加载结束 preloaderFinished(); resolve(true); })); })); }))); } } /** * @return {?} */ getToken() { return yz.getTokenSync(); } /** * @param {?} window * @return {?} */ openWindow(window) { yz.navigationOpenWindow(window); if (window.listener) { yz.listener.nBack(window.listener); } } /** * @return {?} */ scanCode() { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { yz.scanCode({ /** * @param {?} data * @return {?} */ success(data) { resolve(data); }, /** * @param {?} errMsg * @return {?} */ fail(errMsg) { reject("error"); } }); }))); } /** * @param {?} navigationBar * @return {?} */ setNavigationBar(navigationBar) { yz.setNavigationBarRightItems({ showMenu: navigationBar.showMenu, shareFlag: navigationBar.shareFlag, items: navigationBar.items, onClick: navigationBar.onClick, success: navigationBar.success, fial: navigationBar.fial, complete: navigationBar.complete }); } /** * @param {?} ititle * @return {?} */ setTitle(ititle) { yz.setNavigationBarTitle(ititle); } /** * @param {?} ishare * @return {?} */ share(ishare) { yz.setWebCanShare(ishare); } /** * @return {?} */ userLocation() { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { yz.userLocation({ /** * @param {?} data * @return {?} */ success(data) { resolve((/** @type {?} */ ({ address: data.address, latitude: data.latitude, longitude: data.longitude }))); }, /** * @param {?} errMsg * @return {?} */ fail(errMsg) { reject(errMsg); } }); }))); } /** * @param {?} bssids * @return {?} */ validateInWifi(bssids) { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { yz.userLocationContainAp({ bssids, /** * @param {?} data * @return {?} */ success(data) { resolve(data); }, /** * @param {?} errMsg * @return {?} */ fail(errMsg) { reject(errMsg); } }); }))); } /** * @return {?} */ getWifiMac() { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { yz.getMac({ /** * @param {?} data * @return {?} */ success(data) { resolve(data); }, /** * @param {?} errorMsg * @return {?} */ fail(errorMsg) { reject(errorMsg); } }); }))); } /** * @param {?} count * @return {?} */ chooseContacts(count) { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { yz.chooseContacts({ count, /** * @param {?} data * @return {?} */ success(data) { resolve(data); }, /** * @param {?} errMsg * @return {?} */ fail(errMsg) { reject(errMsg); } }); }))); } /** * @param {?} targetUserId * @return {?} */ contactDetails(targetUserId) { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { yz.ContactDetails({ targetUserId, success: (/** * @param {?} data * @return {?} */ data => { resolve(data); }), fail: (/** * @param {?} errMsg * @return {?} */ errMsg => { reject(errMsg); }) }); }))); } /** * @param {?} count * @param {?} sourceType * @return {?} */ uploadImage(count, sourceType) { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { yz.uploadImage({ count, sourceType, success: (/** * @param {?} data * @return {?} */ data => { resolve(data); }), fail: (/** * @param {?} errMsg * @return {?} */ errMsg => { reject(errMsg); }) }); }))); } /** * @param {?} url * @param {?} openType * @param {?} title * @param {?} id * @param {?} type * @return {?} */ openReadWithTimer(url, openType, title, id, type) { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { yz.openReadWithTimer({ url, openType, title, id, type, success: (/** * @param {?} data * @return {?} */ data => { resolve(data); }), fail: (/** * @param {?} errMsg * @return {?} */ errMsg => { reject(errMsg); }) }); }))); } /** * @param {?} limitMinute * @return {?} */ uploadMovie(limitMinute) { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { yz.uploadMovie({ limitMinute, success: (/** * @param {?} data * @return {?} */ data => { resolve(data); }), fail: (/** * @param {?} errMsg * @return {?} */ errMsg => { reject(errMsg); }) }); }))); } /** * @param {?} url * @param {?} title * @return {?} */ fileBrowser(url, title) { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ (resolve, reject) => { yz.fileBrowser({ url, title, success: (/** * @param {?} data * @return {?} */ data => { resolve(data); }), fail: (/** * @param {?} errMsg * @return {?} */ errMsg => { reject(errMsg); }) }); }))); } /** * @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."); } } IOS.decorators = [ { type: Injectable, args: [{ providedIn: "root" },] } ]; /** @nocollapse */ IOS.ctorParameters = () => [ { type: TokenService }, { type: HttpClient }, { type: UserService }, { type: undefined, decorators: [{ type: Inject, args: [BASE_CLIENT,] }] } ]; /** @nocollapse */ IOS.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function IOS_Factory() { return new IOS(i0.ɵɵinject(i1.TokenService), i0.ɵɵinject(i2.HttpClient), i0.ɵɵinject(i3.UserService), i0.ɵɵinject(i4.BASE_CLIENT)); }, token: IOS, providedIn: "root" }); if (false) { /** * @type {?} * @private */ IOS.prototype.tokenService; /** * @type {?} * @private */ IOS.prototype.http; /** * @type {?} * @private */ IOS.prototype.user; /** * @type {?} * @private */ IOS.prototype.baseclient; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW9zLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmcteXVuemFpLW1vYmlsZS8iLCJzb3VyY2VzIjpbImRldmljZXMvaW9zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFDLFdBQVcsRUFBYSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBR3BELE9BQU8sRUFBYSxJQUFJLEVBQUssTUFBTSxNQUFNLENBQUM7QUFLMUMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7O0FBT2pELE1BQU0sT0FBTyxHQUFJLFNBQVEsVUFBVTs7Ozs7OztJQUNqQyxZQUNVLFlBQTBCLEVBQzFCLElBQWdCLEVBQ2hCLElBQWlCLEVBQ0ksVUFBc0I7UUFFbkQsS0FBSyxFQUFFLENBQUM7UUFMQSxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixTQUFJLEdBQUosSUFBSSxDQUFZO1FBQ2hCLFNBQUksR0FBSixJQUFJLENBQWE7UUFDSSxlQUFVLEdBQVYsVUFBVSxDQUFZO0lBR3JELENBQUM7Ozs7O0lBS0QsSUFBSTtRQUNGLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtZQUM3RCxPQUFPLElBQUksT0FBTzs7Ozs7WUFBTSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFDMUMsaUJBQWlCLEVBQUUsQ0FBQztnQkFDcEIsT0FB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LEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7Ozs7O0lBQ0QsaUJBQWlCLENBQUMsUUFBNkI7UUFDN0MsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7Ozs7O0lBQ0QsZUFBZSxDQUFDLFFBQTZCO1FBQzNDLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM3QyxDQUFDOzs7WUF2UkYsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7O1lBUE8sWUFBWTtZQVhaLFVBQVU7WUFZVixXQUFXOzRDQVlkLE1BQU0sU0FBQyxXQUFXOzs7Ozs7OztJQUhuQiwyQkFBa0M7Ozs7O0lBQ2xDLG1CQUF3Qjs7Ozs7SUFDeEIsbUJBQXlCOzs7OztJQUN6Qix5QkFBbUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0Jhc2VEZXZpY2V9IGZyb20gXCIuL2Jhc2UuZGV2aWNlXCI7XHJcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge0JBU0VfQ0xJRU5ULCBCYXNlQ2xpZW50fSBmcm9tIFwiLi4vY2xpZW50L2Jhc2UuY2xpZW50XCI7XHJcbmltcG9ydCB7cHJlbG9hZGVyRmluaXNoZWR9IGZyb20gXCIuLi9hdXRoL3ByZWxvYWRlclwiO1xyXG5pbXBvcnQge0l0b2tlbn0gZnJvbSBcIi4uL2F1dGgvaXRva2VuXCI7XHJcbmltcG9ydCB7SVdpbmRvd30gZnJvbSBcIi4vbW9kZWwvd2luZG93XCI7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZSwgZnJvbSwgb2Z9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7TmF2aWdhdGlvbkJhcn0gZnJvbSBcIi4vbW9kZWwvbmF2aWdhdGlvbmJhclwiO1xyXG5pbXBvcnQge0lUaXRsZX0gZnJvbSBcIi4vbW9kZWwvdGl0bGVcIjtcclxuaW1wb3J0IHtJU2hhcmV9IGZyb20gXCIuL21vZGVsL3NoYXJlXCI7XHJcbmltcG9ydCB7VXNlckxvY2F0aW9ufSBmcm9tIFwiLi9tb2RlbC9sb2NhdGlvblwiO1xyXG5pbXBvcnQge1Rva2VuU2VydmljZX0gZnJvbSBcIi4uL3Rva2VuL3Rva2VuLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4uL3VzZXIvdXNlci5zZXJ2aWNlXCI7XHJcblxyXG5kZWNsYXJlIGxldCB5ejtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiBcInJvb3RcIlxyXG59KVxyXG5leHBvcnQgY2xhc3MgSU9TIGV4dGVuZHMgQmFzZURldmljZSB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHRva2VuU2VydmljZTogVG9rZW5TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSB1c2VyOiBVc2VyU2VydmljZSxcclxuICAgIEBJbmplY3QoQkFTRV9DTElFTlQpIHByaXZhdGUgYmFzZWNsaWVudDogQmFzZUNsaWVudFxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOaJi+acuue9kemhteiupOivgVxyXG4gICAqL1xyXG4gIGF1dGgoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGlmICh0aGlzLmJhc2VjbGllbnQuaW9zICYmIHRoaXMuYmFzZWNsaWVudC5pb3MuYXV0aCA9PT0gZmFsc2UpIHtcclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHByZWxvYWRlckZpbmlzaGVkKCk7XHJcbiAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAobnVsbCA9PT0gdGhpcy5iYXNlY2xpZW50Lm1vYmlsZVZlcnNpb24gfHwgdGhpcy5iYXNlY2xpZW50Lm1vYmlsZVZlcnNpb24gPT09IFwiVjZcIikge1xyXG4gICAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgLy8g6K6+572udG9rZW5cclxuICAgICAgICB0aGlzLnRva2VuU2VydmljZS5zZXQodGhpcy5nZXRUb2tlbigpIGFzIGFueSk7XHJcbiAgICAgICAgLy8g5Y+R6YCBL3VzZXLor7fmsYJcclxuICAgICAgICB0aGlzLmh0dHBcclxuICAgICAgICAgIC5nZXQoYCR7dGhpcy5iYXNlY2xpZW50LmdhdGV3YXl9L2F1dGgvdXNlcmApXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIC8vIOiuvue9rnVzZXJcclxuICAgICAgICAgICAgdGhpcy51c2VyLnNldCh7IC4uLnJlc3BvbnNlLnByaW5jaXBhbCwgdGVuYW50SWQ6IHJlc3BvbnNlLnRlbmFudElkIH0pO1xyXG4gICAgICAgICAgICAvLyDliqDovb3nu5PmnZ9cclxuICAgICAgICAgICAgcHJlbG9hZGVyRmluaXNoZWQoKTtcclxuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAobnVsbCAhPT0gdGhpcy5iYXNlY2xpZW50Lm1vYmlsZVZlcnNpb24gJiYgdGhpcy5iYXNlY2xpZW50Lm1vYmlsZVZlcnNpb24gPT09IFwiVjVcIikge1xyXG4gICAgICBjb25zdCB1c2VySW5mbyA9IHl6LmdldFVzZXJJbmZvU3luYygpO1xyXG4gICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICBjb25zdCB7YWNjb3VudCwgcGFzc3dvcmR9ID0gdXNlckluZm87XHJcbiAgICAgIGZvcm1EYXRhLnNldChcInVzZXJuYW1lXCIsIGFjY291bnQpO1xyXG4gICAgICBmb3JtRGF0YS5zZXQoXCJwYXNzd29yZFwiLCBwYXNzd29yZCk7XHJcbiAgICAgIGZvcm1EYXRhLnNldChcImdyYW50X3R5cGVcIiwgXCJwYXNzd29yZFwiKTtcclxuICAgICAgZm9ybURhdGEuc2V0KFwiY2xpZW50X2lkXCIsIFwid2ViYXBwXCIpO1xyXG4gICAgICBmb3JtRGF0YS5zZXQoXCJzY29wZVwiLCBcIndlYmFwcFwiKTtcclxuICAgICAgZm9ybURhdGEuc2V0KFwiY2xpZW50X3NlY3JldFwiLCBcIjEyMzQ1NlwiKTtcclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmJhc2VjbGllbnQuZ2F0ZXdheX0vYXV0aC9vYXV0aC90b2tlbmAsIGZvcm1EYXRhKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgdG9rZW5JbmZvID0ge307XHJcbiAgICAgICAgICAgIHRva2VuSW5mb1snYWNjZXNzVG9rZW4nXSA9IHJlc3BvbnNlLmFjY2Vzc190b2tlbjtcclxuICAgICAgICAgICAgdG9rZW5JbmZvWyd0b2tlblR5cGUnXSA9IHJlc3BvbnNlLnRva2VuX3R5cGU7XHJcbiAgICAgICAgICAgIHRva2VuSW5mb1sncmVmcmVzaFRva2VuJ10gPSByZXNwb25zZS5yZWZyZXNoX3Rva2VuO1xyXG4gICAgICAgICAgICB0b2tlbkluZm9bJ2V4cGlyZXNJbiddID0gcmVzcG9uc2UuZXhwaXJlc19pbjtcclxuICAgICAgICAgICAgdG9rZW5JbmZvWydzY29wZSddID0gcmVzcG9uc2Uuc2NvcGU7XHJcbiAgICAgICAgICAgIHRoaXMudG9rZW5TZXJ2aWNlLnNldCh0b2tlbkluZm8gYXMgYW55KVxyXG4gICAgICAgICAgICB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuYmFzZWNsaWVudC5nYXRld2F5fS9hdXRoL3VzZXJgKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIOiuvue9rnVzZXJcclxuICAgICAgICAgICAgICAgIHRoaXMudXNlci5zZXQoeyAuLi5yZXNwb25zZS5wcmluY2lwYWwsIHRlbmFudElkOiByZXNwb25zZS50ZW5hbnRJZCB9KTtcclxuICAgICAgICAgICAgICAgIC8vIOWKoOi9vee7k+adn1xyXG4gICAgICAgICAgICAgICAgcHJlbG9hZGVyRmluaXNoZWQoKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSkpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRUb2tlbigpOiBJdG9rZW4ge1xyXG4gICAgcmV0dXJuIHl6LmdldFRva2VuU3luYygpO1xyXG4gIH1cclxuXHJcbiAgb3BlbldpbmRvdyh3aW5kb3c6IElXaW5kb3cpOiB2b2lkIHtcclxuICAgIHl6Lm5hdmlnYXRpb25PcGVuV2luZG93KHdpbmRvdyk7XHJcbiAgICBpZiAod2luZG93Lmxpc3RlbmVyKSB7XHJcbiAgICAgIHl6Lmxpc3RlbmVyLm5CYWNrKHdpbmRvdy5saXN0ZW5lcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzY2FuQ29kZSgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIGZyb20oXHJcbiAgICAgIG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHl6LnNjYW5Db2RlKHtcclxuICAgICAgICAgIHN1Y2Nlc3MoZGF0YSkge1xyXG4gICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGZhaWwoZXJyTXNnKSB7XHJcbiAgICAgICAgICAgIHJlamVjdChcImVycm9yXCIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNldE5hdmlnYXRpb25CYXIobmF2aWdhdGlvbkJhcjogTmF2aWdhdGlvbkJhcik6IHZvaWQge1xyXG4gICAgeXouc2V0TmF2aWdhdGlvbkJhclJpZ2h0SXRlbXMoe1xyXG4gICAgICBzaG93TWVudTogbmF2aWdhdGlvbkJhci5zaG93TWVudSxcclxuICAgICAgc2hhcmVGbGFnOiBuYXZpZ2F0aW9uQmFyLnNoYXJlRmxhZyxcclxuICAgICAgaXRlbXM6IG5hdmlnYXRpb25CYXIuaXRlbXMsXHJcbiAgICAgIG9uQ2xpY2s6IG5hdmlnYXRpb25CYXIub25DbGljayxcclxuICAgICAgc3VjY2VzczogbmF2aWdhdGlvbkJhci5zdWNjZXNzLFxyXG4gICAgICBmaWFsOiBuYXZpZ2F0aW9uQmFyLmZpYWwsXHJcbiAgICAgIGNvbXBsZXRlOiBuYXZpZ2F0aW9uQmFyLmNvbXBsZXRlXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFRpdGxlKGl0aXRsZTogSVRpdGxlKTogdm9pZCB7XHJcbiAgICB5ei5zZXROYXZpZ2F0aW9uQmFyVGl0bGUoaXRpdGxlKTtcclxuICB9XHJcblxyXG4gIHNoYXJlKGlzaGFyZTogSVNoYXJlKTogdm9pZCB7XHJcbiAgICB5ei5zZXRXZWJDYW5TaGFyZShpc2hhcmUpO1xyXG4gIH1cclxuXHJcbiAgdXNlckxvY2F0aW9uKCk6IE9ic2VydmFibGU8VXNlckxvY2F0aW9uIHwgYW55PiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHl6LnVzZXJMb2NhdGlvbih7XHJcbiAgICAgICAgICBzdWNjZXNzKGRhdGE6IGFueSkge1xyXG4gICAgICAgICAgICByZXNvbHZlKHtcclxuICAgICAgICAgICAgICBhZGRyZXNzOiBkYXRhLmFkZHJlc3MsXHJcbiAgICAgICAgICAgICAgbGF0aXR1ZGU6IGRhdGEubGF0aXR1ZGUsXHJcbiAgICAgICAgICAgICAgbG9uZ2l0dWRlOiBkYXRhLmxvbmdpdHVkZVxyXG4gICAgICAgICAgICB9IGFzIFVzZXJMb2NhdGlvbik7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZmFpbChlcnJNc2c6IGFueSkge1xyXG4gICAgICAgICAgICByZWplY3QoZXJyTXNnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZUluV2lmaShic3NpZHM6IEFycmF5PHN0cmluZz4pOiBPYnNlcnZhYmxlPGJvb2xlYW4gfCBhbnk+IHtcclxuICAgIHJldHVybiBmcm9tKFxyXG4gICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgeXoudXNlckxvY2F0aW9uQ29udGFpbkFwKHtcclxuICAgICAgICAgIGJzc2lkcyxcclxuICAgICAgICAgIHN1Y2Nlc3MoZGF0YTogYm9vbGVhbikge1xyXG4gICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGZhaWwoZXJyTXNnOiBhbnkpIHtcclxuICAgICAgICAgICAgcmVqZWN0KGVyck1zZyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0V2lmaU1hYygpOiBPYnNlcnZhYmxlPHN0cmluZyB8IGFueT4ge1xyXG4gICAgcmV0dXJuIGZyb20oXHJcbiAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICB5ei5nZXRNYWMoe1xyXG4gICAgICAgICAgc3VjY2VzcyhkYXRhOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBmYWlsKGVycm9yTXNnKSB7XHJcbiAgICAgICAgICAgIHJlamVjdChlcnJvck1zZyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY2hvb3NlQ29udGFjdHMoY291bnQ6IG51bWJlcik6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHl6LmNob29zZUNvbnRhY3RzKHtcclxuICAgICAgICAgIGNvdW50LFxyXG4gICAgICAgICAgc3VjY2VzcyhkYXRhOiBhbnkpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBmYWlsKGVyck1zZzogYW55KSB7XHJcbiAgICAgICAgICAgIHJlamVjdChlcnJNc2cpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGNvbnRhY3REZXRhaWxzKHRhcmdldFVzZXJJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiBmcm9tKFxyXG4gICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgeXouQ29udGFjdERldGFpbHMoe1xyXG4gICAgICAgICAgdGFyZ2V0VXNlcklkLFxyXG4gICAgICAgICAgc3VjY2VzczogZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZmFpbDogZXJyTXNnID0+IHtcclxuICAgICAgICAgICAgcmVqZWN0KGVyck1zZyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG4gIHVwbG9hZEltYWdlKGNvdW50OiBudW1iZXIsIHNvdXJjZVR5cGU6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHl6LnVwbG9hZEltYWdlKHtcclxuICAgICAgICAgIGNvdW50LFxyXG4gICAgICAgICAgc291cmNlVHlwZSxcclxuICAgICAgICAgIHN1Y2Nlc3M6IGRhdGEgPT4ge1xyXG4gICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGZhaWw6IGVyck1zZyA9PiB7XHJcbiAgICAgICAgICAgIHJlamVjdChlcnJNc2cpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG9wZW5SZWFkV2l0aFRpbWVyKHVybDogYW55LCBvcGVuVHlwZTogYW55LCB0aXRsZTogYW55LCBpZDogYW55LCB0eXBlOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIGZyb20oXHJcbiAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICB5ei5vcGVuUmVhZFdpdGhUaW1lcih7XHJcbiAgICAgICAgICB1cmwsXHJcbiAgICAgICAgICBvcGVuVHlwZSxcclxuICAgICAgICAgIHRpdGxlLFxyXG4gICAgICAgICAgaWQsXHJcbiAgICAgICAgICB0eXBlLFxyXG4gICAgICAgICAgc3VjY2VzczogZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZmFpbDogZXJyTXNnID0+IHtcclxuICAgICAgICAgICAgcmVqZWN0KGVyck1zZyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG4gIHVwbG9hZE1vdmllKGxpbWl0TWludXRlOiBudW1iZXIgKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiBmcm9tKFxyXG4gICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgeXoudXBsb2FkTW92aWUoe1xyXG4gICAgICAgICAgbGltaXRNaW51dGUsXHJcbiAgICAgICAgICBzdWNjZXNzOiBkYXRhID0+IHtcclxuICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBmYWlsOiBlcnJNc2cgPT4ge1xyXG4gICAgICAgICAgICByZWplY3QoZXJyTXNnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBmaWxlQnJvd3Nlcih1cmw6IHN0cmluZywgdGl0bGU6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHl6LmZpbGVCcm93c2VyKHtcclxuICAgICAgICAgIHVybCxcclxuICAgICAgICAgIHRpdGxlLFxyXG4gICAgICAgICAgc3VjY2VzczogZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZmFpbDogZXJyTXNnID0+IHtcclxuICAgICAgICAgICAgcmVqZWN0KGVyck1zZyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRTZWFyY2hCZWFjb25zKHRpY2tldDogc3RyaW5nLCBjYWxsYmFjazogKGFyZ3Y6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XHJcbiAgfVxyXG4gIHN0b3BTZWFyY2hCZWFjb25zKGNhbGxiYWNrOiAoYXJndjogYW55KSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcclxuICB9XHJcbiAgb25TZWFyY2hCZWFjb25zKGNhbGxiYWNrOiAoYXJndjogYW55KSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcclxuICB9XHJcbn1cclxuIl19