UNPKG

dbweb-common

Version:

用`yarn add dbweb-common`安装,不要忘记修改`angular.json`里的 `architect\build\options\assets`,加上

572 lines 44.5 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { EventEmitter, Injectable } from '@angular/core'; import { BehaviorSubject, forkJoin } from 'rxjs'; import { startWith, tap } from 'rxjs/operators'; import { map2WithLetter } from '../../services/eleview/mapletter'; import { ElementBackFace } from './back-face'; import { FillAt } from './bill-param'; import { ImportStyle } from './import-param'; /** * @record */ function IElementData() { } if (false) { /** @type {?} */ IElementData.prototype.Tabs; /** @type {?} */ IElementData.prototype.parent; } /** * @record */ export function IProcess() { } if (false) { /** @type {?} */ IProcess.prototype.Name; /** @type {?|undefined} */ IProcess.prototype.Icon; /** @type {?|undefined} */ IProcess.prototype.Color; /** @type {?|undefined} */ IProcess.prototype.ElementName; /** @type {?} */ IProcess.prototype.BindRecord; /** @type {?|undefined} */ IProcess.prototype.TransPath; /** @type {?|undefined} */ IProcess.prototype.TransQuery; /** @type {?|undefined} */ IProcess.prototype.WithSql; /** @type {?|undefined} */ IProcess.prototype.Visable; /** @type {?|undefined} */ IProcess.prototype.MoreStr; } export class ElementDataRecordView { /** * @param {?} parent */ constructor(parent) { this.parent = parent; this.Tabs = ['取数SQL', '默认显示列', '处理列表', '标签', '条件模板']; this.inited = new EventEmitter(); this.currentProcess = new BehaviorSubject(null); } /** * @return {?} */ get Params() { return (/** @type {?} */ (this.parent.Params)); } /** * @return {?} */ init() { forkJoin([ this.parent.back.fetchDB(), this.parent.back.fetchElementNames(), this.parent.back.fetchTables(this.Params.DB) ]).subscribe((/** * @param {?} v * @return {?} */ v => { this.DBList = v[0]; this.allElementNames = v[1]; this.Tables = v[2]; this.refreshProcesses(); if (this.bindRecordProcesses && this.bindRecordProcesses.length > 0) { this.currentProcess.next(this.bindRecordProcesses[0]); } else if (this.notBindRecordProcesses && this.notBindRecordProcesses.length > 0) { this.currentProcess.next(this.notBindRecordProcesses[0]); } if (this.Params.ConditionalTemplates && this.Params.ConditionalTemplates.length > 0) { this.currentConditionTemplate = this.Params.ConditionalTemplates[0]; } this.checkSQL().subscribe(); this.inited.emit(); })); } /** * @return {?} */ refreshTables() { this.parent.back.fetchTables(this.Params.DB).subscribe((/** * @param {?} v * @return {?} */ v => (this.Tables = v))); } /** * @return {?} */ refreshProcesses() { this.bindRecordProcesses = (this.Params.Processes || []).filter((/** * @param {?} v * @return {?} */ v => v.BindRecord)); this.notBindRecordProcesses = (this.Params.Processes || []).filter((/** * @param {?} v * @return {?} */ v => !v.BindRecord)); } // 将分开的处理列表合并成一个 /** * @return {?} */ collectionProcesses() { this.Params.Processes = [...this.bindRecordProcesses, ...this.notBindRecordProcesses]; } /** * @return {?} */ checkSQL() { return this.parent.back .checkSQL({ DB: this.Params.DB, Table: this.Params.TableName, ManualPage: this.Params.ManualPage, SQL: this.Params.Sql }) .pipe(tap((/** * @param {?} v * @return {?} */ v => { this.SQLCheckError = v.Error; if (!this.SQLCheckError) { // 要把旧的类型复制过来 this.Params.AllColumns = v.Columns.map((/** * @param {?} col * @return {?} */ col => { /** @type {?} */ let t = col.Type; if (this.Params.AllColumns) { /** @type {?} */ const oldCol = this.Params.AllColumns.find((/** * @param {?} fv * @return {?} */ fv => fv.Name === col.Name)); if (oldCol) { t = oldCol.Type; } } return { Name: col.Name, Type: t }; })); this.allColumnNames = this.Params.AllColumns.map((/** * @param {?} vv * @return {?} */ vv => vv.Name)); this.allColumnWithLetter = map2WithLetter(this.allColumnNames); // 删除不存在的列 if (this.Params.Columns) { this.Params.Columns = this.Params.Columns.filter((/** * @param {?} col * @return {?} */ col => this.allColumnNames.includes(col.Name))); } } }))); } } if (false) { /** @type {?} */ ElementDataRecordView.prototype.labelCategories; /** @type {?} */ ElementDataRecordView.prototype.Tabs; /** @type {?} */ ElementDataRecordView.prototype.DBList; /** @type {?} */ ElementDataRecordView.prototype.Tables; /** @type {?} */ ElementDataRecordView.prototype.allElementNames; /** @type {?} */ ElementDataRecordView.prototype.SQLCheckError; /** @type {?} */ ElementDataRecordView.prototype.allColumnNames; /** @type {?} */ ElementDataRecordView.prototype.allColumnWithLetter; /** @type {?} */ ElementDataRecordView.prototype.bindRecordProcesses; /** @type {?} */ ElementDataRecordView.prototype.notBindRecordProcesses; /** @type {?} */ ElementDataRecordView.prototype.inited; /** @type {?} */ ElementDataRecordView.prototype.currentProcess; /** @type {?} */ ElementDataRecordView.prototype.currentConditionTemplate; /** @type {?} */ ElementDataRecordView.prototype.parent; } export class ElementDataImport { /** * @param {?} parent */ constructor(parent) { this.parent = parent; this.Tabs = ['字段设置', '属性']; } /** * @return {?} */ get Params() { return (/** @type {?} */ (this.parent.Params)); } /** * @return {?} */ init() { return forkJoin([this.parent.back.fetchDB(), this.parent.back.fetchTables(this.Params.DB)]).pipe(tap((/** * @param {?} v * @return {?} */ v => { this.DBList = v[0]; this.Tables = v[1]; this.syncTableColumn(); }))); } // 根据表名,同步最新的字段清单 /** * @return {?} */ syncTableColumn() { this.parent.back.fetchTableColumns(this.Params.Table).subscribe((/** * @param {?} v * @return {?} */ v => { this.Params.Fields = v.map((/** * @param {?} one * @return {?} */ one => { /** @type {?} */ const found = this.Params.Fields.find((/** * @param {?} sv * @return {?} */ sv => sv.Name === one)); if (found) { return found; } return (/** @type {?} */ ({ Name: one, Style: ImportStyle.Normal })); })); })); } /** * @return {?} */ refreshTables() { this.parent.back.fetchTables(this.Params.DB).subscribe((/** * @param {?} v * @return {?} */ v => { this.Tables = v; })); } } if (false) { /** @type {?} */ ElementDataImport.prototype.Tabs; /** @type {?} */ ElementDataImport.prototype.DBList; /** @type {?} */ ElementDataImport.prototype.Tables; /** @type {?} */ ElementDataImport.prototype.parent; } export class ElementDataUpdate { /** * @param {?} parent */ constructor(parent) { this.parent = parent; this.Tabs = ['设置']; } /** * @return {?} */ get Params() { return (/** @type {?} */ (this.parent.Params)); } /** * @return {?} */ isAllSelected() { return this.Params.Fields && this.Params.Fields.find((/** * @param {?} v * @return {?} */ v => !v.selected)) === undefined; } /** * @return {?} */ hasSelected() { return this.Params.Fields && this.Params.Fields.find((/** * @param {?} v * @return {?} */ v => v.selected)) !== undefined; } /** * @return {?} */ init() { this.parent.back.fetchDB().subscribe((/** * @param {?} v * @return {?} */ v => (this.DBList = v))); this.refreshTables(); } /** * @return {?} */ refreshTables() { this.parent.back.fetchTables(this.Params.DB).subscribe((/** * @param {?} v * @return {?} */ v => (this.Tables = v))); } } if (false) { /** @type {?} */ ElementDataUpdate.prototype.Tabs; /** @type {?} */ ElementDataUpdate.prototype.DBList; /** @type {?} */ ElementDataUpdate.prototype.Tables; /** @type {?} */ ElementDataUpdate.prototype.parent; } export class ElementDataBill { /** * @param {?} parent */ constructor(parent) { this.parent = parent; this.Tabs = ['设置']; this.parent.init.subscribe((/** * @return {?} */ () => { this.parent.bill.formGroup .get('Controller') .valueChanges.pipe(startWith(this.parent.bill.formGroup.get('Controller').value)) .subscribe((/** * @param {?} v * @return {?} */ v => { // 如果是单据,则需要修复填充列的设置 /** @type {?} */ const ctrl = this.parent.Controllers.find((/** * @param {?} c * @return {?} */ c => c.Name === v)); if (ctrl && ctrl.Bill) { this.parent.back.fetchBillMainColumns(v).subscribe((/** * @param {?} cols * @return {?} */ cols => { this.MainColumns = cols; this.fixFieldSettings(cols.map((/** * @param {?} c * @return {?} */ c => c.Name))); this.fixCloneSettings(); })); } })); })); } /** * @return {?} */ get Param() { return (/** @type {?} */ (this.parent.Params)); } /** * @param {?} cols * @return {?} */ fixFieldSettings(cols) { this.Param.FieldSettings = cols.map((/** * @param {?} col * @return {?} */ col => { /** @type {?} */ let foundField; if (this.Param && this.Param.FieldSettings) { foundField = this.Param.FieldSettings.find((/** * @param {?} fld * @return {?} */ fld => fld.Name === col)); } if (foundField) { return foundField; } return (/** @type {?} */ ({ Name: col, Fill: '', FillAt: FillAt.SkipFill, Visibility: '' })); })); } /** * @return {?} */ fixCloneSettings() { /** @type {?} */ const old = [...(this.Param.ClonePrimaryKeySettings || [])]; if (this.Param.AllowClone) { this.Param.ClonePrimaryKeySettings = this.MainColumns.filter((/** * @param {?} v * @return {?} */ v => v.PrimaryKey)).map((/** * @param {?} v * @return {?} */ v => { /** @type {?} */ const oldField = old.find((/** * @param {?} o * @return {?} */ o => o.Name === v.Name)); return (/** @type {?} */ ({ Name: v.Name, Fill: oldField ? oldField.Fill : '{{.SRC}}', Visibility: oldField ? oldField.Visibility : '' })); })); console.log(this.Param.ClonePrimaryKeySettings); } else { this.Param.ClonePrimaryKeySettings = null; } } } if (false) { /** @type {?} */ ElementDataBill.prototype.Tabs; /** @type {?} */ ElementDataBill.prototype.MainColumns; /** @type {?} */ ElementDataBill.prototype.parent; } export class ElementService { /** * @param {?} back */ constructor(back) { this.back = back; this.init = new EventEmitter(); this.BaseActive = true; this.data = { recordview: new ElementDataRecordView(this), import: new ElementDataImport(this), update: new ElementDataUpdate(this), bill: new ElementDataBill(this) }; } /** * @param {?} ele * @return {?} */ onInit(ele) { this.back.element = ele; this.back.fetchElementInitData(this.bill.typeRecord.Name).subscribe((/** * @param {?} v * @return {?} */ v => { this.Controllers = v.Controllers; this.Categories = v.Categories; this.CategoriesEN = v.CategoriesEN; if (v.CanSelectRoles) { this.Roles = v.CanSelectRoles.map((/** * @param {?} sv * @return {?} */ sv => ({ Name: sv, OldChecked: v.Roles && v.Roles.find((/** * @param {?} vv * @return {?} */ vv => vv === sv)) !== undefined, Checked: false, Modify: false }))); this.Roles.forEach((/** * @param {?} role * @return {?} */ role => (role.Checked = role.OldChecked))); } this.init.emit(); })); } } ElementService.decorators = [ { type: Injectable } ]; /** @nocollapse */ ElementService.ctorParameters = () => [ { type: ElementBackFace } ]; if (false) { /** @type {?} */ ElementService.prototype.bill; /** @type {?} */ ElementService.prototype.init; /** @type {?} */ ElementService.prototype.Controllers; /** @type {?} */ ElementService.prototype.Categories; /** @type {?} */ ElementService.prototype.CategoriesEN; /** @type {?} */ ElementService.prototype.BaseActive; /** @type {?} */ ElementService.prototype.ActiveTab; /** @type {?} */ ElementService.prototype.Roles; /** @type {?} */ ElementService.prototype.Params; /** @type {?} */ ElementService.prototype.data; /** @type {?} */ ElementService.prototype.back; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vZGJ3ZWItY29tbW9uLyIsInNvdXJjZXMiOlsibGliL2VsZW1lbnQvc2VydmljZS9lbGVtZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHaEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRWxFLE9BQU8sRUFBYyxlQUFlLEVBQWMsTUFBTSxhQUFhLENBQUM7QUFDdEUsT0FBTyxFQUEyQixNQUFNLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0QsT0FBTyxFQUE0QixXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQUl2RSwyQkFHQzs7O0lBRkEsNEJBQWU7O0lBQ2YsOEJBQXVCOzs7OztBQUV4Qiw4QkFXQzs7O0lBVkEsd0JBQWE7O0lBQ2Isd0JBQWM7O0lBQ2QseUJBQWU7O0lBQ2YsK0JBQXFCOztJQUNyQiw4QkFBb0I7O0lBQ3BCLDZCQUFxQjs7SUFDckIsOEJBQW9COztJQUNwQiwyQkFBa0I7O0lBQ2xCLDJCQUFpQjs7SUFDakIsMkJBQWlCOztBQUdsQixNQUFNLE9BQU8scUJBQXFCOzs7O0lBa0JqQyxZQUFtQixNQUFzQjtRQUF0QixXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQWhCekMsU0FBSSxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBVWhELFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBSTVCLG1CQUFjLEdBQUcsSUFBSSxlQUFlLENBQVcsSUFBSSxDQUFDLENBQUM7SUFFVCxDQUFDOzs7O0lBTDdDLElBQUksTUFBTTtRQUNULE9BQU8sbUJBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQW1CLENBQUM7SUFDOUMsQ0FBQzs7OztJQUlELElBQUk7UUFDSCxRQUFRLENBQUM7WUFDUixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDcEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1NBQzVDLENBQUMsQ0FBQyxTQUFTOzs7O1FBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDaEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkIsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFbkIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDeEIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3BFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3REO2lCQUFNLElBQUksSUFBSSxDQUFDLHNCQUFzQixJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNqRixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN6RDtZQUNELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3BGLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3BFO1lBQ0QsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBRTVCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDcEIsQ0FBQyxFQUFDLENBQUM7SUFDSixDQUFDOzs7O0lBQ00sYUFBYTtRQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTOzs7O1FBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUMsQ0FBQztJQUNoRixDQUFDOzs7O0lBQ00sZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU07Ozs7UUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUMsQ0FBQztRQUNuRixJQUFJLENBQUMsc0JBQXNCLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNOzs7O1FBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUMsQ0FBQztJQUN4RixDQUFDOzs7OztJQUdELG1CQUFtQjtRQUNsQixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDdkYsQ0FBQzs7OztJQUVELFFBQVE7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSTthQUNyQixRQUFRLENBQUM7WUFDVCxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ2xCLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVM7WUFDNUIsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVTtZQUNsQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHO1NBQ3BCLENBQUM7YUFDRCxJQUFJLENBQ0osR0FBRzs7OztRQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ1AsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDO1lBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUN4QixhQUFhO2dCQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRzs7OztnQkFBQyxHQUFHLENBQUMsRUFBRTs7d0JBQ3hDLENBQUMsR0FBRyxHQUFHLENBQUMsSUFBSTtvQkFDaEIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRTs7OEJBQ3JCLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJOzs7O3dCQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxHQUFHLENBQUMsSUFBSSxFQUFDO3dCQUN0RSxJQUFJLE1BQU0sRUFBRTs0QkFDWCxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQzt5QkFDaEI7cUJBQ0Q7b0JBQ0QsT0FBTzt3QkFDTixJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUk7d0JBQ2QsSUFBSSxFQUFFLENBQUM7cUJBQ1AsQ0FBQztnQkFDSCxDQUFDLEVBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUc7Ozs7Z0JBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFDLENBQUM7Z0JBQ2hFLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUMvRCxVQUFVO2dCQUNWLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7b0JBQ3hCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU07Ozs7b0JBQUMsR0FBRyxDQUFDLEVBQUUsQ0FDdEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUN0QyxDQUFDO2lCQUNGO2FBQ0Q7UUFDRixDQUFDLEVBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztDQUNEOzs7SUE3RkEsZ0RBQXdDOztJQUN4QyxxQ0FBZ0Q7O0lBQ2hELHVDQUFpQjs7SUFDakIsdUNBQWlCOztJQUNqQixnREFBMEI7O0lBQzFCLDhDQUFzQjs7SUFDdEIsK0NBQXlCOztJQUN6QixvREFBeUM7O0lBRXpDLG9EQUFnQzs7SUFDaEMsdURBQW1DOztJQUNuQyx1Q0FBNEI7O0lBSTVCLCtDQUFxRDs7SUFDckQseURBQThDOztJQUNsQyx1Q0FBNkI7O0FBOEUxQyxNQUFNLE9BQU8saUJBQWlCOzs7O0lBRTdCLFlBQW1CLE1BQXNCO1FBQXRCLFdBQU0sR0FBTixNQUFNLENBQWdCO1FBRHpDLFNBQUksR0FBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNZLENBQUM7Ozs7SUFHN0MsSUFBSSxNQUFNO1FBQ1QsT0FBTyxtQkFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBZSxDQUFDO0lBQzFDLENBQUM7Ozs7SUFFRCxJQUFJO1FBQ0gsT0FBTyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUMvRixHQUFHOzs7O1FBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDUCxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsQ0FBQyxFQUFDLENBQ0YsQ0FBQztJQUNILENBQUM7Ozs7O0lBRUQsZUFBZTtRQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUzs7OztRQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ25FLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHOzs7O1lBQUMsR0FBRyxDQUFDLEVBQUU7O3NCQUMxQixLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSTs7OztnQkFBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFDO2dCQUM1RCxJQUFJLEtBQUssRUFBRTtvQkFDVixPQUFPLEtBQUssQ0FBQztpQkFDYjtnQkFDRCxPQUFPLG1CQUFBO29CQUNOLElBQUksRUFBRSxHQUFHO29CQUNULEtBQUssRUFBRSxXQUFXLENBQUMsTUFBTTtpQkFDekIsRUFBZSxDQUFDO1lBQ2xCLENBQUMsRUFBQyxDQUFDO1FBQ0osQ0FBQyxFQUFDLENBQUM7SUFDSixDQUFDOzs7O0lBQ0QsYUFBYTtRQUNaLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVM7Ozs7UUFBQyxDQUFDLENBQUMsRUFBRTtZQUMxRCxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNqQixDQUFDLEVBQUMsQ0FBQztJQUNKLENBQUM7Q0FDRDs7O0lBckNBLGlDQUFnQzs7SUFFaEMsbUNBQWlCOztJQUNqQixtQ0FBaUI7O0lBRkwsbUNBQTZCOztBQXNDMUMsTUFBTSxPQUFPLGlCQUFpQjs7OztJQUk3QixZQUFtQixNQUFzQjtRQUF0QixXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQUh6QyxTQUFJLEdBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUdvQixDQUFDOzs7O0lBQzdDLElBQUksTUFBTTtRQUNULE9BQU8sbUJBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQWUsQ0FBQztJQUMxQyxDQUFDOzs7O0lBQ0QsYUFBYTtRQUNaLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSTs7OztRQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFDLEtBQUssU0FBUyxDQUFDO0lBQ3RGLENBQUM7Ozs7SUFDRCxXQUFXO1FBQ1YsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJOzs7O1FBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFDLEtBQUssU0FBUyxDQUFDO0lBQ3JGLENBQUM7Ozs7SUFFRCxJQUFJO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsU0FBUzs7OztRQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3RCLENBQUM7Ozs7SUFDRCxhQUFhO1FBQ1osSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsU0FBUzs7OztRQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFDLENBQUM7SUFDaEYsQ0FBQztDQUNEOzs7SUFyQkEsaUNBQXdCOztJQUN4QixtQ0FBaUI7O0lBQ2pCLG1DQUFpQjs7SUFDTCxtQ0FBNkI7O0FBbUIxQyxNQUFNLE9BQU8sZUFBZTs7OztJQXVDM0IsWUFBbUIsTUFBc0I7UUFBdEIsV0FBTSxHQUFOLE1BQU0sQ0FBZ0I7UUF0Q3pDLFNBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBdUNiLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVM7OztRQUFDLEdBQUcsRUFBRTtZQUMvQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTO2lCQUN4QixHQUFHLENBQUMsWUFBWSxDQUFDO2lCQUNqQixZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUNoRixTQUFTOzs7O1lBQUMsQ0FBQyxDQUFDLEVBQUU7OztzQkFFUixJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBSTs7OztnQkFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFDO2dCQUM1RCxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO29CQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTOzs7O29CQUFDLElBQUksQ0FBQyxFQUFFO3dCQUN6RCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQzt3QkFDeEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHOzs7O3dCQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBQyxDQUFDLENBQUM7d0JBQzdDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO29CQUN6QixDQUFDLEVBQUMsQ0FBQztpQkFDSDtZQUNGLENBQUMsRUFBQyxDQUFDO1FBQ0wsQ0FBQyxFQUFDLENBQUM7SUFDSixDQUFDOzs7O0lBckRELElBQUksS0FBSztRQUNSLE9BQU8sbUJBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQWEsQ0FBQztJQUN4QyxDQUFDOzs7OztJQUNELGdCQUFnQixDQUFDLElBQWM7UUFDOUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEdBQUc7Ozs7UUFBQyxHQUFHLENBQUMsRUFBRTs7Z0JBQ3JDLFVBQXdCO1lBQzVCLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRTtnQkFDM0MsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUk7Ozs7Z0JBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLEdBQUcsRUFBQyxDQUFDO2FBQ3BFO1lBQ0QsSUFBSSxVQUFVLEVBQUU7Z0JBQ2YsT0FBTyxVQUFVLENBQUM7YUFDbEI7WUFDRCxPQUFPLG1CQUFBO2dCQUNOLElBQUksRUFBRSxHQUFHO2dCQUNULElBQUksRUFBRSxFQUFFO2dCQUNSLE1BQU0sRUFBRSxNQUFNLENBQUMsUUFBUTtnQkFDdkIsVUFBVSxFQUFFLEVBQUU7YUFDZCxFQUFnQixDQUFDO1FBQ25CLENBQUMsRUFBQyxDQUFDO0lBQ0osQ0FBQzs7OztJQUNELGdCQUFnQjs7Y0FDVCxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMzRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFO1lBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNOzs7O1lBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFDLENBQUMsR0FBRzs7OztZQUFDLENBQUMsQ0FBQyxFQUFFOztzQkFDakYsUUFBUSxHQUFHLEdBQUcsQ0FBQyxJQUFJOzs7O2dCQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFDO2dCQUNqRCxPQUFPLG1CQUFBO29CQUNOLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSTtvQkFDWixJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVO29CQUMzQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFO2lCQUMvQyxFQUFxQixDQUFDO1lBQ3hCLENBQUMsRUFBQyxDQUFDO1lBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7U0FDaEQ7YUFBTTtZQUNOLElBQUksQ0FBQyxLQUFLLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO1NBQzFDO0lBQ0YsQ0FBQztDQW1CRDs7O0lBeERBLCtCQUFjOztJQUNkLHNDQUEwQjs7SUFxQ2QsaUNBQTZCOztBQW9CMUMsTUFBTSxPQUFPLGNBQWM7Ozs7SUFvQjFCLFlBQW1CLElBQXFCO1FBQXJCLFNBQUksR0FBSixJQUFJLENBQWlCO1FBbEJ4QyxTQUFJLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUkxQixlQUFVLEdBQUcsSUFBSSxDQUFDO1FBUWxCLFNBQUksR0FBb0M7WUFDdkMsVUFBVSxFQUFFLElBQUkscUJBQXFCLENBQUMsSUFBSSxDQUFDO1lBQzNDLE1BQU0sRUFBRSxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQztZQUNuQyxNQUFNLEVBQUUsSUFBSSxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7WUFDbkMsSUFBSSxFQUFFLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQztTQUMvQixDQUFDO0lBQ3lDLENBQUM7Ozs7O0lBQzVDLE1BQU0sQ0FBQyxHQUFpQjtRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7UUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTOzs7O1FBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDdkUsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQztZQUMvQixJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUM7WUFDbkMsSUFBSSxDQUFDLENBQUMsY0FBYyxFQUFFO2dCQUNyQixJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxjQUFjLENBQUMsR0FBRzs7OztnQkFBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ3hDLElBQUksRUFBRSxFQUFFO29CQUNSLFVBQVUsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSTs7OztvQkFBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUMsS0FBSyxTQUFTO29CQUNsRSxPQUFPLEVBQUUsS0FBSztvQkFDZCxNQUFNLEVBQUUsS0FBSztpQkFDYixDQUFDLEVBQUMsQ0FBQztnQkFDSixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU87Ozs7Z0JBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFDLENBQUM7YUFDN0Q7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2xCLENBQUMsRUFBQyxDQUFDO0lBQ0osQ0FBQzs7O1lBdkNELFVBQVU7Ozs7WUFoUFUsZUFBZTs7OztJQWtQbkMsOEJBQW9COztJQUNwQiw4QkFBMEI7O0lBQzFCLHFDQUEwQjs7SUFDMUIsb0NBQXFCOztJQUNyQixzQ0FBdUI7O0lBQ3ZCLG9DQUFrQjs7SUFDbEIsbUNBQWtCOztJQUNsQiwrQkFJSTs7SUFDSixnQ0FBWTs7SUFDWiw4QkFLRTs7SUFDVSw4QkFBNEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRWxlbWVudFJvdXRlLCBQcmltYXJ5S2V5U2V0dGluZyB9IGZyb20gJ2Rid2ViLWNvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHN0YXJ0V2l0aCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBCaWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYmlsbC9iaWxsLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1vZGVsRWxlbWVudENhdGVnb3J5IH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZWxldmlldy9lbGV2aWV3LWJhY2tmYWNlJztcclxuaW1wb3J0IHsgbWFwMldpdGhMZXR0ZXIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbGV2aWV3L21hcGxldHRlcic7XHJcbmltcG9ydCB7IENvbHVtbnNXaXRoTGV0dGVyIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZWxldmlldy90eXBlcy9tb2RlbCc7XHJcbmltcG9ydCB7IENvbnRyb2xsZXIsIEVsZW1lbnRCYWNrRmFjZSwgTWFpbkNvbHVtbiB9IGZyb20gJy4vYmFjay1mYWNlJztcclxuaW1wb3J0IHsgQmlsbFBhcmFtLCBGaWVsZFNldHRpbmcsIEZpbGxBdCB9IGZyb20gJy4vYmlsbC1wYXJhbSc7XHJcbmltcG9ydCB7IEltcG9ydFBhcmFtLCBJbXBvcnRGaWVsZCwgSW1wb3J0U3R5bGUgfSBmcm9tICcuL2ltcG9ydC1wYXJhbSc7XHJcbmltcG9ydCB7IENvbmRpdGlvbmFsVGVtcGxhdGUsIFJlY29yZFZpZXdQYXJhbSB9IGZyb20gJy4vcmVjb3Jkdmlldy1wYXJhbSc7XHJcbmltcG9ydCB7IFVwZGF0ZVBhcmFtIH0gZnJvbSAnLi91cGRhdGUucGFyYW0nO1xyXG5cclxuaW50ZXJmYWNlIElFbGVtZW50RGF0YSB7XHJcblx0VGFiczogc3RyaW5nW107XHJcblx0cGFyZW50OiBFbGVtZW50U2VydmljZTtcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIElQcm9jZXNzIHtcclxuXHROYW1lOiBzdHJpbmc7XHJcblx0SWNvbj86IHN0cmluZzsgLy8gW25hbWVzcGFjZV06W25hbWVdIOeahOaWueW8j1xyXG5cdENvbG9yPzogc3RyaW5nOyAvLyDosIPoibLmnb/oibLlj7flkI3np7DvvIzpu5jorqTkuLrnqbpcclxuXHRFbGVtZW50TmFtZT86IHN0cmluZztcclxuXHRCaW5kUmVjb3JkOiBib29sZWFuOyAvLyDkvKDpgJLliLDkuIvkuIDkuKrlt6XkvZzlhYPntKDnmoTot6/lvoTkuIrvvIzkuIDoiKznlKjmnaXkvKDpgJLkuLvplK7vvIzlpoLmnpzkuLrnqbrliJnoh6rliqjkvKDpgJLooajnmoTkuLvplK5cclxuXHRUcmFuc1BhdGg/OiBzdHJpbmdbXTsgLy8g5Lyg6YCS5Yiw5LiL5LiA5Liq5bel5L2c5YWD57Sg55qE5Y+C5pWw77yM55So5qih5p2/5p2l5a6M5oiQLFxyXG5cdFRyYW5zUXVlcnk/OiBzdHJpbmc7IC8vIOS4gOiIrOaYr+eUqOadpeS8oOmAkuWIsOWPpuS4gOS4qlJlY29yZFZpZXfnmoTpmYTliqDmnaHku7blj4rmoIfpophcclxuXHRXaXRoU3FsPzogYm9vbGVhbjsgLy8g5piv5ZCm5Lyg6YCSc3FsXHJcblx0VmlzYWJsZT86IHN0cmluZzsgLy8g6Z2e56m655qE6K+d6K6h566X5Y+v6KeB5oCn77yM55SodGVtcGxhdGVy55qE6K+t5rOVXHJcblx0TW9yZVN0cj86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEVsZW1lbnREYXRhUmVjb3JkVmlldyBpbXBsZW1lbnRzIElFbGVtZW50RGF0YSB7XHJcblx0bGFiZWxDYXRlZ29yaWVzOiBNb2RlbEVsZW1lbnRDYXRlZ29yeVtdO1xyXG5cdFRhYnMgPSBbJ+WPluaVsFNRTCcsICfpu5jorqTmmL7npLrliJcnLCAn5aSE55CG5YiX6KGoJywgJ+agh+etvicsICfmnaHku7bmqKHmnb8nXTtcclxuXHREQkxpc3Q6IHN0cmluZ1tdO1xyXG5cdFRhYmxlczogc3RyaW5nW107XHJcblx0YWxsRWxlbWVudE5hbWVzOiBzdHJpbmdbXTtcclxuXHRTUUxDaGVja0Vycm9yOiBzdHJpbmc7XHJcblx0YWxsQ29sdW1uTmFtZXM6IHN0cmluZ1tdO1xyXG5cdGFsbENvbHVtbldpdGhMZXR0ZXI6IENvbHVtbnNXaXRoTGV0dGVyW107XHJcblx0Ly8g5LuOcGFyYW1zLnByb2Nlc3Nlc+S4rei9rOaNouiAjOadpVxyXG5cdGJpbmRSZWNvcmRQcm9jZXNzZXM6IElQcm9jZXNzW107XHJcblx0bm90QmluZFJlY29yZFByb2Nlc3NlczogSVByb2Nlc3NbXTtcclxuXHRpbml0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblx0Z2V0IFBhcmFtcygpIHtcclxuXHRcdHJldHVybiB0aGlzLnBhcmVudC5QYXJhbXMgYXMgUmVjb3JkVmlld1BhcmFtO1xyXG5cdH1cclxuXHRjdXJyZW50UHJvY2VzcyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVByb2Nlc3M+KG51bGwpO1xyXG5cdGN1cnJlbnRDb25kaXRpb25UZW1wbGF0ZTogQ29uZGl0aW9uYWxUZW1wbGF0ZTtcclxuXHRjb25zdHJ1Y3RvcihwdWJsaWMgcGFyZW50OiBFbGVtZW50U2VydmljZSkge31cclxuXHRpbml0KCkge1xyXG5cdFx0Zm9ya0pvaW4oW1xyXG5cdFx0XHR0aGlzLnBhcmVudC5iYWNrLmZldGNoREIoKSxcclxuXHRcdFx0dGhpcy5wYXJlbnQuYmFjay5mZXRjaEVsZW1lbnROYW1lcygpLFxyXG5cdFx0XHR0aGlzLnBhcmVudC5iYWNrLmZldGNoVGFibGVzKHRoaXMuUGFyYW1zLkRCKVxyXG5cdFx0XSkuc3Vic2NyaWJlKHYgPT4ge1xyXG5cdFx0XHR0aGlzLkRCTGlzdCA9IHZbMF07XHJcblx0XHRcdHRoaXMuYWxsRWxlbWVudE5hbWVzID0gdlsxXTtcclxuXHRcdFx0dGhpcy5UYWJsZXMgPSB2WzJdO1xyXG5cclxuXHRcdFx0dGhpcy5yZWZyZXNoUHJvY2Vzc2VzKCk7XHJcblx0XHRcdGlmICh0aGlzLmJpbmRSZWNvcmRQcm9jZXNzZXMgJiYgdGhpcy5iaW5kUmVjb3JkUHJvY2Vzc2VzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHR0aGlzLmN1cnJlbnRQcm9jZXNzLm5leHQodGhpcy5iaW5kUmVjb3JkUHJvY2Vzc2VzWzBdKTtcclxuXHRcdFx0fSBlbHNlIGlmICh0aGlzLm5vdEJpbmRSZWNvcmRQcm9jZXNzZXMgJiYgdGhpcy5ub3RCaW5kUmVjb3JkUHJvY2Vzc2VzLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0XHR0aGlzLmN1cnJlbnRQcm9jZXNzLm5leHQodGhpcy5ub3RCaW5kUmVjb3JkUHJvY2Vzc2VzWzBdKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAodGhpcy5QYXJhbXMuQ29uZGl0aW9uYWxUZW1wbGF0ZXMgJiYgdGhpcy5QYXJhbXMuQ29uZGl0aW9uYWxUZW1wbGF0ZXMubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdHRoaXMuY3VycmVudENvbmRpdGlvblRlbXBsYXRlID0gdGhpcy5QYXJhbXMuQ29uZGl0aW9uYWxUZW1wbGF0ZXNbMF07XHJcblx0XHRcdH1cclxuXHRcdFx0dGhpcy5jaGVja1NRTCgpLnN1YnNjcmliZSgpO1xyXG5cclxuXHRcdFx0dGhpcy5pbml0ZWQuZW1pdCgpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cdHB1YmxpYyByZWZyZXNoVGFibGVzKCkge1xyXG5cdFx0dGhpcy5wYXJlbnQuYmFjay5mZXRjaFRhYmxlcyh0aGlzLlBhcmFtcy5EQikuc3Vic2NyaWJlKHYgPT4gKHRoaXMuVGFibGVzID0gdikpO1xyXG5cdH1cclxuXHRwdWJsaWMgcmVmcmVzaFByb2Nlc3NlcygpIHtcclxuXHRcdHRoaXMuYmluZFJlY29yZFByb2Nlc3NlcyA9ICh0aGlzLlBhcmFtcy5Qcm9jZXNzZXMgfHwgW10pLmZpbHRlcih2ID0+IHYuQmluZFJlY29yZCk7XHJcblx0XHR0aGlzLm5vdEJpbmRSZWNvcmRQcm9jZXNzZXMgPSAodGhpcy5QYXJhbXMuUHJvY2Vzc2VzIHx8IFtdKS5maWx0ZXIodiA9PiAhdi5CaW5kUmVjb3JkKTtcclxuXHR9XHJcblxyXG5cdC8vIOWwhuWIhuW8gOeahOWkhOeQhuWIl+ihqOWQiOW5tuaIkOS4gOS4qlxyXG5cdGNvbGxlY3Rpb25Qcm9jZXNzZXMoKSB7XHJcblx0XHR0aGlzLlBhcmFtcy5Qcm9jZXNzZXMgPSBbLi4udGhpcy5iaW5kUmVjb3JkUHJvY2Vzc2VzLCAuLi50aGlzLm5vdEJpbmRSZWNvcmRQcm9jZXNzZXNdO1xyXG5cdH1cclxuXHJcblx0Y2hlY2tTUUwoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5wYXJlbnQuYmFja1xyXG5cdFx0XHQuY2hlY2tTUUwoe1xyXG5cdFx0XHRcdERCOiB0aGlzLlBhcmFtcy5EQixcclxuXHRcdFx0XHRUYWJsZTogdGhpcy5QYXJhbXMuVGFibGVOYW1lLFxyXG5cdFx0XHRcdE1hbnVhbFBhZ2U6IHRoaXMuUGFyYW1zLk1hbnVhbFBhZ2UsXHJcblx0XHRcdFx0U1FMOiB0aGlzLlBhcmFtcy5TcWxcclxuXHRcdFx0fSlcclxuXHRcdFx0LnBpcGUoXHJcblx0XHRcdFx0dGFwKHYgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5TUUxDaGVja0Vycm9yID0gdi5FcnJvcjtcclxuXHRcdFx0XHRcdGlmICghdGhpcy5TUUxDaGVja0Vycm9yKSB7XHJcblx0XHRcdFx0XHRcdC8vIOimgeaKiuaXp+eahOexu+Wei+WkjeWItui/h+adpVxyXG5cdFx0XHRcdFx0XHR0aGlzLlBhcmFtcy5BbGxDb2x1bW5zID0gdi5Db2x1bW5zLm1hcChjb2wgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdGxldCB0ID0gY29sLlR5cGU7XHJcblx0XHRcdFx0XHRcdFx0aWYgKHRoaXMuUGFyYW1zLkFsbENvbHVtbnMpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9sZENvbCA9IHRoaXMuUGFyYW1zLkFsbENvbHVtbnMuZmluZChmdiA9PiBmdi5OYW1lID09PSBjb2wuTmFtZSk7XHJcblx0XHRcdFx0XHRcdFx0XHRpZiAob2xkQ29sKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdHQgPSBvbGRDb2wuVHlwZTtcclxuXHRcdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdFx0XHRcdE5hbWU6IGNvbC5OYW1lLFxyXG5cdFx0XHRcdFx0XHRcdFx0VHlwZTogdFxyXG5cdFx0XHRcdFx0XHRcdH07XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0XHR0aGlzLmFsbENvbHVtbk5hbWVzID0gdGhpcy5QYXJhbXMuQWxsQ29sdW1ucy5tYXAodnYgPT4gdnYuTmFtZSk7XHJcblx0XHRcdFx0XHRcdHRoaXMuYWxsQ29sdW1uV2l0aExldHRlciA9IG1hcDJXaXRoTGV0dGVyKHRoaXMuYWxsQ29sdW1uTmFtZXMpO1xyXG5cdFx0XHRcdFx0XHQvLyDliKDpmaTkuI3lrZjlnKjnmoTliJdcclxuXHRcdFx0XHRcdFx0aWYgKHRoaXMuUGFyYW1zLkNvbHVtbnMpIHtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLlBhcmFtcy5Db2x1bW5zID0gdGhpcy5QYXJhbXMuQ29sdW1ucy5maWx0ZXIoY29sID0+XHJcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmFsbENvbHVtbk5hbWVzLmluY2x1ZGVzKGNvbC5OYW1lKVxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KVxyXG5cdFx0XHQpO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEVsZW1lbnREYXRhSW1wb3J0IGltcGxlbWVudHMgSUVsZW1lbnREYXRhIHtcclxuXHRUYWJzOiBzdHJpbmdbXSA9IFsn5a2X5q616K6+572uJywgJ+WxnuaApyddO1xyXG5cdGNvbnN0cnVjdG9yKHB1YmxpYyBwYXJlbnQ6IEVsZW1lbnRTZXJ2aWNlKSB7fVxyXG5cdERCTGlzdDogc3RyaW5nW107XHJcblx0VGFibGVzOiBzdHJpbmdbXTtcclxuXHRnZXQgUGFyYW1zKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMucGFyZW50LlBhcmFtcyBhcyBJbXBvcnRQYXJhbTtcclxuXHR9XHJcblxyXG5cdGluaXQoKSB7XHJcblx0XHRyZXR1cm4gZm9ya0pvaW4oW3RoaXMucGFyZW50LmJhY2suZmV0Y2hEQigpLCB0aGlzLnBhcmVudC5iYWNrLmZldGNoVGFibGVzKHRoaXMuUGFyYW1zLkRCKV0pLnBpcGUoXHJcblx0XHRcdHRhcCh2ID0+IHtcclxuXHRcdFx0XHR0aGlzLkRCTGlzdCA9IHZbMF07XHJcblx0XHRcdFx0dGhpcy5UYWJsZXMgPSB2WzFdO1xyXG5cdFx0XHRcdHRoaXMuc3luY1RhYmxlQ29sdW1uKCk7XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cdH1cclxuXHQvLyDmoLnmja7ooajlkI3vvIzlkIzmraXmnIDmlrDnmoTlrZfmrrXmuIXljZVcclxuXHRzeW5jVGFibGVDb2x1bW4oKSB7XHJcblx0XHR0aGlzLnBhcmVudC5iYWNrLmZldGNoVGFibGVDb2x1bW5zKHRoaXMuUGFyYW1zLlRhYmxlKS5zdWJzY3JpYmUodiA9PiB7XHJcblx0XHRcdHRoaXMuUGFyYW1zLkZpZWxkcyA9IHYubWFwKG9uZSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgZm91bmQgPSB0aGlzLlBhcmFtcy5GaWVsZHMuZmluZChzdiA9PiBzdi5OYW1lID09PSBvbmUpO1xyXG5cdFx0XHRcdGlmIChmb3VuZCkge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGZvdW5kO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0TmFtZTogb25lLFxyXG5cdFx0XHRcdFx0U3R5bGU6IEltcG9ydFN0eWxlLk5vcm1hbFxyXG5cdFx0XHRcdH0gYXMgSW1wb3J0RmllbGQ7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cdHJlZnJlc2hUYWJsZXMoKSB7XHJcblx0XHR0aGlzLnBhcmVudC5iYWNrLmZldGNoVGFibGVzKHRoaXMuUGFyYW1zLkRCKS5zdWJzY3JpYmUodiA9PiB7XHJcblx0XHRcdHRoaXMuVGFibGVzID0gdjtcclxuXHRcdH0pO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEVsZW1lbnREYXRhVXBkYXRlIGltcGxlbWVudHMgSUVsZW1lbnREYXRhIHtcclxuXHRUYWJzOiBzdHJpbmdbXSA9IFsn6K6+572uJ107XHJcblx0REJMaXN0OiBzdHJpbmdbXTtcclxuXHRUYWJsZXM6IHN0cmluZ1tdO1xyXG5cdGNvbnN0cnVjdG9yKHB1YmxpYyBwYXJlbnQ6IEVsZW1lbnRTZXJ2aWNlKSB7fVxyXG5cdGdldCBQYXJhbXMoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5wYXJlbnQuUGFyYW1zIGFzIFVwZGF0ZVBhcmFtO1xyXG5cdH1cclxuXHRpc0FsbFNlbGVjdGVkKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuUGFyYW1zLkZpZWxkcyAmJiB0aGlzLlBhcmFtcy5GaWVsZHMuZmluZCh2ID0+ICF2LnNlbGVjdGVkKSA9PT0gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHRoYXNTZWxlY3RlZCgpIHtcclxuXHRcdHJldHVybiB0aGlzLlBhcmFtcy5GaWVsZHMgJiYgdGhpcy5QYXJhbXMuRmllbGRzLmZpbmQodiA9PiB2LnNlbGVjdGVkKSAhPT0gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHJcblx0aW5pdCgpIHtcclxuXHRcdHRoaXMucGFyZW50LmJhY2suZmV0Y2hEQigpLnN1YnNjcmliZSh2ID0+ICh0aGlzLkRCTGlzdCA9IHYpKTtcclxuXHRcdHRoaXMucmVmcmVzaFRhYmxlcygpO1xyXG5cdH1cclxuXHRyZWZyZXNoVGFibGVzKCkge1xyXG5cdFx0dGhpcy5wYXJlbnQuYmFjay5mZXRjaFRhYmxlcyh0aGlzLlBhcmFtcy5EQikuc3Vic2NyaWJlKHYgPT4gKHRoaXMuVGFibGVzID0gdikpO1xyXG5cdH1cclxufVxyXG5leHBvcnQgY2xhc3MgRWxlbWVudERhdGFCaWxsIGltcGxlbWVudHMgSUVsZW1lbnREYXRhIHtcclxuXHRUYWJzID0gWyforr7nva4nXTtcclxuXHRNYWluQ29sdW1uczogTWFpbkNvbHVtbltdO1xyXG5cdGdldCBQYXJhbSgpIHtcclxuXHRcdHJldHVybiB0aGlzLnBhcmVudC5QYXJhbXMgYXMgQmlsbFBhcmFtO1xyXG5cdH1cclxuXHRmaXhGaWVsZFNldHRpbmdzKGNvbHM6IHN0cmluZ1tdKSB7XHJcblx0XHR0aGlzLlBhcmFtLkZpZWxkU2V0dGluZ3MgPSBjb2xzLm1hcChjb2wgPT4ge1xyXG5cdFx0XHRsZXQgZm91bmRGaWVsZDogRmllbGRTZXR0aW5nO1xyXG5cdFx0XHRpZiAodGhpcy5QYXJhbSAmJiB0aGlzLlBhcmFtLkZpZWxkU2V0dGluZ3MpIHtcclxuXHRcdFx0XHRmb3VuZEZpZWxkID0gdGhpcy5QYXJhbS5GaWVsZFNldHRpbmdzLmZpbmQoZmxkID0+IGZsZC5OYW1lID09PSBjb2wpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmIChmb3VuZEZpZWxkKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZvdW5kRmllbGQ7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHROYW1lOiBjb2wsXHJcblx0XHRcdFx0RmlsbDogJycsXHJcblx0XHRcdFx0RmlsbEF0OiBGaWxsQXQuU2tpcEZpbGwsXHJcblx0XHRcdFx0VmlzaWJpbGl0eTogJydcclxuXHRcdFx0fSBhcyBGaWVsZFNldHRpbmc7XHJcblx0XHR9KTtcclxuXHR9XHJcblx0Zml4Q2xvbmVTZXR0aW5ncygpIHtcclxuXHRcdGNvbnN0IG9sZCA9IFsuLi4odGhpcy5QYXJhbS5DbG9uZVByaW1hcnlLZXlTZXR0aW5ncyB8fCBbXSldO1xyXG5cdFx0aWYgKHRoaXMuUGFyYW0uQWxsb3dDbG9uZSkge1xyXG5cdFx0XHR0aGlzLlBhcmFtLkNsb25lUHJpbWFyeUtleVNldHRpbmdzID0gdGhpcy5NYWluQ29sdW1ucy5maWx0ZXIodiA9PiB2LlByaW1hcnlLZXkpLm1hcCh2ID0+IHtcclxuXHRcdFx0XHRjb25zdCBvbGRGaWVsZCA9IG9sZC5maW5kKG8gPT4gby5OYW1lID09PSB2Lk5hbWUpO1xyXG5cdFx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0XHROYW1lOiB2Lk5hbWUsXHJcblx0XHRcdFx0XHRGaWxsOiBvbGRGaWVsZCA/IG9sZEZpZWxkLkZpbGwgOiAne3suU1JDfX0nLFxyXG5cdFx0XHRcdFx0VmlzaWJpbGl0eTogb2xkRmllbGQgPyBvbGRGaWVsZC5WaXNpYmlsaXR5IDogJydcclxuXHRcdFx0XHR9IGFzIFByaW1hcnlLZXlTZXR0aW5nO1xyXG5cdFx0XHR9KTtcclxuXHRcdFx0Y29uc29sZS5sb2codGhpcy5QYXJhbS5DbG9uZVByaW1hcnlLZXlTZXR0aW5ncyk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLlBhcmFtLkNsb25lUHJpbWFyeUtleVNldHRpbmdzID0gbnVsbDtcclxuXHRcdH1cclxuXHR9XHJcblx0Y29uc3RydWN0b3IocHVibGljIHBhcmVudDogRWxlbWVudFNlcnZpY2UpIHtcclxuXHRcdHRoaXMucGFyZW50LmluaXQuc3Vic2NyaWJlKCgpID0+IHtcclxuXHRcdFx0dGhpcy5wYXJlbnQuYmlsbC5mb3JtR3JvdXBcclxuXHRcdFx0XHQuZ2V0KCdDb250cm9sbGVyJylcclxuXHRcdFx0XHQudmFsdWVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKHRoaXMucGFyZW50LmJpbGwuZm9ybUdyb3VwLmdldCgnQ29udHJvbGxlcicpLnZhbHVlKSlcclxuXHRcdFx0XHQuc3Vic2NyaWJlKHYgPT4ge1xyXG5cdFx0XHRcdFx0Ly8g5aaC5p6c5piv5Y2V5o2u77yM5YiZ6ZyA6KaB5L+u5aSN5aGr5YWF5YiX55qE6K6+572uXHJcblx0XHRcdFx0XHRjb25zdCBjdHJsID0gdGhpcy5wYXJlbnQuQ29udHJvbGxlcnMuZmluZChjID0+IGMuTmFtZSA9PT0gdik7XHJcblx0XHRcdFx0XHRpZiAoY3RybCAmJiBjdHJsLkJpbGwpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy5wYXJlbnQuYmFjay5mZXRjaEJpbGxNYWluQ29sdW1ucyh2KS5zdWJzY3JpYmUoY29scyA9PiB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5NYWluQ29sdW1ucyA9IGNvbHM7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5maXhGaWVsZFNldHRpbmdzKGNvbHMubWFwKGMgPT4gYy5OYW1lKSk7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5maXhDbG9uZVNldHRpbmdzKCk7XHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cdFx0fSk7XHJcblx0fVxyXG59XHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEVsZW1lbnRTZXJ2aWNlIHtcclxuXHRiaWxsOiBCaWxsQ29tcG9uZW50O1xyXG5cdGluaXQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblx0Q29udHJvbGxlcnM6IENvbnRyb2xsZXJbXTtcclxuXHRDYXRlZ29yaWVzOiBzdHJpbmdbXTtcclxuXHRDYXRlZ29yaWVzRU46IHN0cmluZ1tdO1xyXG5cdEJhc2VBY3RpdmUgPSB0cnVlO1xyXG5cdEFjdGl2ZVRhYjogc3RyaW5nO1xyXG5cdFJvbGVzOiB7XHJcblx0XHROYW1lOiBzdHJpbmc7XHJcblx0XHRDaGVja2VkOiBib29sZWFuO1xyXG5cdFx0T2xkQ2hlY2tlZDogYm9vbGVhbjtcclxuXHR9W107XHJcblx0UGFyYW1zOiBhbnk7XHJcblx0ZGF0YTogeyBba2V5OiBzdHJpbmddOiBJRWxlbWVudERhdGEgfSA9IHtcclxuXHRcdHJlY29yZHZpZXc6IG5ldyBFbGVtZW50RGF0YVJlY29yZFZpZXcodGhpcyksXHJcblx0XHRpbXBvcnQ6IG5ldyBFbGVtZW50RGF0YUltcG9ydCh0aGlzKSxcclxuXHRcdHVwZGF0ZTogbmV3IEVsZW1lbnREYXRhVXBkYXRlKHRoaXMpLFxyXG5cdFx0YmlsbDogbmV3IEVsZW1lbnREYXRhQmlsbCh0aGlzKVxyXG5cdH07XHJcblx0Y29uc3RydWN0b3IocHVibGljIGJhY2s6IEVsZW1lbnRCYWNrRmFjZSkge31cclxuXHRvbkluaXQoZWxlOiBFbGVtZW50Um91dGUpIHtcclxuXHRcdHRoaXMuYmFjay5lbGVtZW50ID0gZWxlO1xyXG5cdFx0dGhpcy5iYWNrLmZldGNoRWxlbWVudEluaXREYXRhKHRoaXMuYmlsbC50eXBlUmVjb3JkLk5hbWUpLnN1YnNjcmliZSh2ID0+IHtcclxuXHRcdFx0dGhpcy5Db250cm9sbGVycyA9IHYuQ29udHJvbGxlcnM7XHJcblx0XHRcdHRoaXMuQ2F0ZWdvcmllcyA9IHYuQ2F0ZWdvcmllcztcclxuXHRcdFx0dGhpcy5DYXRlZ29yaWVzRU4gPSB2LkNhdGVnb3JpZXNFTjtcclxuXHRcdFx0aWYgKHYuQ2FuU2VsZWN0Um9sZXMpIHtcclxuXHRcdFx0XHR0aGlzLlJvbGVzID0gdi5DYW5TZWxlY3RSb2xlcy5tYXAoc3YgPT4gKHtcclxuXHRcdFx0XHRcdE5hbWU6IHN2LFxyXG5cdFx0XHRcdFx0T2xkQ2hlY2tlZDogdi5Sb2xlcyAmJiB2LlJvbGVzLmZpbmQodnYgPT4gdnYgPT09IHN2KSAhPT0gdW5kZWZpbmVkLFxyXG5cdFx0XHRcdFx0Q2hlY2tlZDogZmFsc2UsXHJcblx0XHRcdFx0XHRNb2RpZnk6IGZhbHNlXHJcblx0XHRcdFx0fSkpO1xyXG5cdFx0XHRcdHRoaXMuUm9sZXMuZm9yRWFjaChyb2xlID0+IChyb2xlLkNoZWNrZWQgPSByb2xlLk9sZENoZWNrZWQpKTtcclxuXHRcdFx0fVxyXG5cdFx0XHR0aGlzLmluaXQuZW1pdCgpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG59XHJcbiJdfQ==