@bizdoc/core 1.11.0-next.4 → 1.11.0-next.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/app.component.mjs +11 -4
- package/esm2020/lib/compose/form.component.mjs +3 -5
- package/esm2020/lib/compose/trace/trace.pane.component.mjs +2 -2
- package/esm2020/lib/core/component-factory-resolver.mjs +9 -2
- package/esm2020/lib/core/controls/combination-picker-body.mjs +1 -1
- package/esm2020/lib/core/controls/file.input.mjs +45 -16
- package/esm2020/lib/core/functions.mjs +1 -1
- package/esm2020/lib/core/info/attachment-info.service.mjs +2 -2
- package/esm2020/lib/core/mailbox.service.mjs +9 -9
- package/esm2020/lib/core/tagging/edit-input.component.mjs +3 -3
- package/esm2020/lib/cube/cube-info.service.mjs +3 -3
- package/esm2020/lib/cube/cube.service.mjs +5 -2
- package/esm2020/lib/cube/matrix/matrix.base.mjs +1 -1
- package/esm2020/lib/cube/matrix/matrix.mobile.component.mjs +4 -4
- package/esm2020/lib/cube/matrix/matrix.pane.component.mjs +5 -4
- package/esm2020/lib/cube/matrix/popup.component.mjs +6 -5
- package/esm2020/lib/cube/matrix/table.component.mjs +6 -4
- package/esm2020/lib/cube/pivot/pivot.component.mjs +13 -1
- package/esm2020/lib/dashboard/score/activity.widget.mjs +2 -5
- package/esm2020/lib/views/cube/matrix.component.mjs +19 -20
- package/fesm2015/bizdoc-core.mjs +128 -75
- package/fesm2015/bizdoc-core.mjs.map +1 -1
- package/fesm2020/bizdoc-core.mjs +128 -75
- package/fesm2020/bizdoc-core.mjs.map +1 -1
- package/lib/app.component.d.ts +3 -1
- package/lib/core/controls/combination-picker-body.d.ts +2 -0
- package/lib/core/controls/file.input.d.ts +1 -0
- package/lib/core/functions.d.ts +3 -1
- package/lib/core/mailbox.service.d.ts +4 -3
- package/lib/cube/cube-info.service.d.ts +2 -2
- package/lib/cube/matrix/matrix.base.d.ts +2 -1
- package/lib/cube/matrix/table.component.d.ts +3 -2
- package/lib/cube/pivot/pivot.component.d.ts +3 -0
- package/lib/views/cube/matrix.component.d.ts +1 -3
- package/package.json +1 -1
@@ -1,6 +1,7 @@
|
|
1
1
|
import { __decorate } from "tslib";
|
2
2
|
import { Component, ViewChild } from "@angular/core";
|
3
|
-
import {
|
3
|
+
import { map } from "rxjs";
|
4
|
+
import { isArray, mapToArray } from "../../core/functions";
|
4
5
|
import { BizDoc } from "../../core/decorators";
|
5
6
|
import { CubeBase } from "./cube-base";
|
6
7
|
import { CubeMatrixComponent } from "../../cube/matrix/table.component";
|
@@ -8,23 +9,21 @@ import * as i0 from "@angular/core";
|
|
8
9
|
import * as i1 from "../document-view-ref";
|
9
10
|
import * as i2 from "../../core/router";
|
10
11
|
import * as i3 from "../../cube/cube.service";
|
11
|
-
import * as i4 from "../../core/
|
12
|
-
import * as i5 from "
|
13
|
-
import * as i6 from "@angular/material/
|
14
|
-
import * as i7 from "@angular/material/
|
15
|
-
import * as i8 from "@angular/material/
|
16
|
-
import * as i9 from "
|
17
|
-
import * as i10 from "../../
|
18
|
-
import * as i11 from "
|
19
|
-
import * as i12 from "
|
20
|
-
import * as i13 from "../../core/
|
21
|
-
import * as i14 from "../../core/pipes/
|
22
|
-
import * as i15 from "../../core/pipes/type-value.pipe";
|
12
|
+
import * as i4 from "../../core/session.service";
|
13
|
+
import * as i5 from "@angular/material/button";
|
14
|
+
import * as i6 from "@angular/material/icon";
|
15
|
+
import * as i7 from "@angular/material/menu";
|
16
|
+
import * as i8 from "@angular/material/progress-spinner";
|
17
|
+
import * as i9 from "../../cube/matrix/table.component";
|
18
|
+
import * as i10 from "../../core/none.component";
|
19
|
+
import * as i11 from "@angular/common";
|
20
|
+
import * as i12 from "../../core/popup/tooltip.directive";
|
21
|
+
import * as i13 from "../../core/pipes/translate.pipe";
|
22
|
+
import * as i14 from "../../core/pipes/type-value.pipe";
|
23
23
|
let CubeDocumentMatrixComponent = class CubeDocumentMatrixComponent extends CubeBase {
|
24
|
-
constructor(viewRef, _router, service,
|
24
|
+
constructor(viewRef, _router, service, session) {
|
25
25
|
super(viewRef, service, session, true);
|
26
26
|
this._router = _router;
|
27
|
-
this._ds = _ds;
|
28
27
|
this.sources = {};
|
29
28
|
}
|
30
29
|
onViewBind() {
|
@@ -41,7 +40,7 @@ let CubeDocumentMatrixComponent = class CubeDocumentMatrixComponent extends Cube
|
|
41
40
|
this.filters = this.cube.axes.filter(a => isArray(filters) ?
|
42
41
|
filters.indexOf(a.name) > -1 :
|
43
42
|
a.name === filters);
|
44
|
-
this.filters.forEach(f => this.sources[f.name] = this.
|
43
|
+
this.filters.forEach(f => this.sources[f.name] = this._service.values(this.cube.name, f.name).pipe(map(mapToArray)));
|
45
44
|
}
|
46
45
|
explore(axes) {
|
47
46
|
this._router.navigate(['cube', this.cube.name, 'explore'], {
|
@@ -78,8 +77,8 @@ let CubeDocumentMatrixComponent = class CubeDocumentMatrixComponent extends Cube
|
|
78
77
|
this.title = null;
|
79
78
|
}
|
80
79
|
};
|
81
|
-
CubeDocumentMatrixComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: CubeDocumentMatrixComponent, deps: [{ token: i1.DocumentViewRef }, { token: i2.RouterImpl }, { token: i3.CubeService }, { token: i4.
|
82
|
-
CubeDocumentMatrixComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: CubeDocumentMatrixComponent, selector: "ng-component", host: { classAttribute: "view" }, viewQueries: [{ propertyName: "table", first: true, predicate: CubeMatrixComponent, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"hasdata; else none\">\r\n <div class=\"nav-toolbar\">\r\n <ng-container *ngIf=\"alternate\">\r\n <button mat-button [matMenuTriggerFor]=\"cmenu\">{{cube.title}} <mat-icon>arrow_drop_down</mat-icon></button>\r\n <mat-menu #cmenu>\r\n <button mat-menu-item *ngFor=\"let a of alternate\"\r\n (click)=\"switchTo(a)\">\r\n {{a.title}}\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n <span class=\"divider\"></span>\r\n <!-- title -->\r\n <button mat-icon-button [matMenuTriggerFor]=\"patternsMenu\" *ngIf=\"patterns && patterns.length\" [bizdocTooltip]=\"'Pattern'|translate\" [attr.aria-label]=\"'Pattern'|translate\"><mat-icon [class.filled]=\"pattern\">filter_alt</mat-icon></button>\r\n <mat-menu #patternsMenu xPosition=\"before\">\r\n <!-- patterns -->\r\n <button mat-menu-item *ngFor=\"let p of patterns\" (click)=\"patternChange(p)\">{{p.title}}</button>\r\n </mat-menu>\r\n <button mat-icon-button (click)=\"reset()\" [disabled]=\"!pattern\" [bizdocTooltip]=\"'Clear' | translate\">\r\n <mat-icon>clear_all</mat-icon>\r\n </button>\r\n <!-- filters -->\r\n <ng-container *ngFor=\"let f of filters\">\r\n <button mat-button [matMenuTriggerFor]=\"fmenu\">{{axes[f.name] | typeValue : f.dataType | async}} <mat-icon>arrow_drop_down</mat-icon></button>\r\n <mat-menu #fmenu xPosition=\"before\">\r\n <button mat-menu-item *ngFor=\"let kv of sources[f.name] | async\"\r\n (click)=\"filter(f.name, kv.key, kv.value)\">\r\n {{kv.value}}\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n </div>\r\n <div class=\"loading-view\" *ngIf=\"loading\">\r\n <mat-spinner color=\"accent\"></mat-spinner>\r\n </div>\r\n <bizdoc-cube-matrix [cube]=\"cube.name\" [xAxis]=\"xAxis\" [series]=\"series\" [indices]=\"indices\" [sum]=\"sum\"\r\n [filters]=\"axes\" [scope]=\"scope\" class=\"table\"\r\n (explore)='explore($event)' [(loading)]=\"loading\"></bizdoc-cube-matrix>\r\n</ng-container>\r\n<ng-template #none>\r\n <bizdoc-none icon=\"insert_chart_outlined\" subtitle=\"NothingHere\"></bizdoc-none>\r\n</ng-template>\r\n", styles: [".table{padding:0 8px}\n"], components: [{ type:
|
80
|
+
CubeDocumentMatrixComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: CubeDocumentMatrixComponent, deps: [{ token: i1.DocumentViewRef }, { token: i2.RouterImpl }, { token: i3.CubeService }, { token: i4.SessionService }], target: i0.ɵɵFactoryTarget.Component });
|
81
|
+
CubeDocumentMatrixComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.1", type: CubeDocumentMatrixComponent, selector: "ng-component", host: { classAttribute: "view" }, viewQueries: [{ propertyName: "table", first: true, predicate: CubeMatrixComponent, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"hasdata; else none\">\r\n <div class=\"nav-toolbar\">\r\n <ng-container *ngIf=\"alternate\">\r\n <button mat-button [matMenuTriggerFor]=\"cmenu\">{{cube.title}} <mat-icon>arrow_drop_down</mat-icon></button>\r\n <mat-menu #cmenu>\r\n <button mat-menu-item *ngFor=\"let a of alternate\"\r\n (click)=\"switchTo(a)\">\r\n {{a.title}}\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n <span class=\"divider\"></span>\r\n <!-- title -->\r\n <button mat-icon-button [matMenuTriggerFor]=\"patternsMenu\" *ngIf=\"patterns && patterns.length\" [bizdocTooltip]=\"'Pattern'|translate\" [attr.aria-label]=\"'Pattern'|translate\"><mat-icon [class.filled]=\"pattern\">filter_alt</mat-icon></button>\r\n <mat-menu #patternsMenu xPosition=\"before\">\r\n <!-- patterns -->\r\n <button mat-menu-item *ngFor=\"let p of patterns\" (click)=\"patternChange(p)\">{{p.title}}</button>\r\n </mat-menu>\r\n <button mat-icon-button (click)=\"reset()\" [disabled]=\"!pattern\" [bizdocTooltip]=\"'Clear' | translate\">\r\n <mat-icon>clear_all</mat-icon>\r\n </button>\r\n <!-- filters -->\r\n <ng-container *ngFor=\"let f of filters\">\r\n <button mat-button [matMenuTriggerFor]=\"fmenu\">{{axes[f.name] | typeValue : f.dataType | async}} <mat-icon>arrow_drop_down</mat-icon></button>\r\n <mat-menu #fmenu xPosition=\"before\">\r\n <button mat-menu-item *ngFor=\"let kv of sources[f.name] | async\"\r\n (click)=\"filter(f.name, kv.key, kv.value)\">\r\n {{kv.value}}\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n </div>\r\n <div class=\"loading-view\" *ngIf=\"loading\">\r\n <mat-spinner color=\"accent\"></mat-spinner>\r\n </div>\r\n <bizdoc-cube-matrix [cube]=\"cube.name\" [xAxis]=\"xAxis\" [series]=\"series\" [indices]=\"indices\" [sum]=\"sum\"\r\n [filters]=\"axes\" [scope]=\"scope\" class=\"table\"\r\n (explore)='explore($event)' [(loading)]=\"loading\"></bizdoc-cube-matrix>\r\n</ng-container>\r\n<ng-template #none>\r\n <bizdoc-none icon=\"insert_chart_outlined\" subtitle=\"NothingHere\"></bizdoc-none>\r\n</ng-template>\r\n", styles: [".table{padding:0 8px}\n"], components: [{ type: i5.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i7.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i7.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i8.MatSpinner, selector: "mat-spinner", inputs: ["color"] }, { type: i9.CubeMatrixComponent, selector: "bizdoc-cube-matrix", inputs: ["seriesTotalLabel", "xAxisTotalLabel", "cube", "xAxis", "series", "indices", "scope", "sum", "filters", "loading", "interactive"], outputs: ["explore", "loadingChange"] }, { type: i10.NoneComponent, selector: "bizdoc-none", inputs: ["title", "subtitle", "icon"] }], directives: [{ type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { type: i11.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i12.TooltipDirective, selector: "[bizdocTooltip]", inputs: ["bizdocTooltip", "bizdocTooltipTemplate", "bizdocTooltipContext", "bizdocTooltipPosition", "bizdocTooltipDuration", "bizdocTooltipDisabled"] }], pipes: { "translate": i13.TranslatePipe, "async": i11.AsyncPipe, "typeValue": i14.TypeValuePipe } });
|
83
82
|
CubeDocumentMatrixComponent = __decorate([
|
84
83
|
BizDoc({
|
85
84
|
selector: 'bizdoc-cube-matrix'
|
@@ -89,8 +88,8 @@ export { CubeDocumentMatrixComponent };
|
|
89
88
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.1", ngImport: i0, type: CubeDocumentMatrixComponent, decorators: [{
|
90
89
|
type: Component,
|
91
90
|
args: [{ host: { class: 'view' }, template: "<ng-container *ngIf=\"hasdata; else none\">\r\n <div class=\"nav-toolbar\">\r\n <ng-container *ngIf=\"alternate\">\r\n <button mat-button [matMenuTriggerFor]=\"cmenu\">{{cube.title}} <mat-icon>arrow_drop_down</mat-icon></button>\r\n <mat-menu #cmenu>\r\n <button mat-menu-item *ngFor=\"let a of alternate\"\r\n (click)=\"switchTo(a)\">\r\n {{a.title}}\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n <span class=\"divider\"></span>\r\n <!-- title -->\r\n <button mat-icon-button [matMenuTriggerFor]=\"patternsMenu\" *ngIf=\"patterns && patterns.length\" [bizdocTooltip]=\"'Pattern'|translate\" [attr.aria-label]=\"'Pattern'|translate\"><mat-icon [class.filled]=\"pattern\">filter_alt</mat-icon></button>\r\n <mat-menu #patternsMenu xPosition=\"before\">\r\n <!-- patterns -->\r\n <button mat-menu-item *ngFor=\"let p of patterns\" (click)=\"patternChange(p)\">{{p.title}}</button>\r\n </mat-menu>\r\n <button mat-icon-button (click)=\"reset()\" [disabled]=\"!pattern\" [bizdocTooltip]=\"'Clear' | translate\">\r\n <mat-icon>clear_all</mat-icon>\r\n </button>\r\n <!-- filters -->\r\n <ng-container *ngFor=\"let f of filters\">\r\n <button mat-button [matMenuTriggerFor]=\"fmenu\">{{axes[f.name] | typeValue : f.dataType | async}} <mat-icon>arrow_drop_down</mat-icon></button>\r\n <mat-menu #fmenu xPosition=\"before\">\r\n <button mat-menu-item *ngFor=\"let kv of sources[f.name] | async\"\r\n (click)=\"filter(f.name, kv.key, kv.value)\">\r\n {{kv.value}}\r\n </button>\r\n </mat-menu>\r\n </ng-container>\r\n </div>\r\n <div class=\"loading-view\" *ngIf=\"loading\">\r\n <mat-spinner color=\"accent\"></mat-spinner>\r\n </div>\r\n <bizdoc-cube-matrix [cube]=\"cube.name\" [xAxis]=\"xAxis\" [series]=\"series\" [indices]=\"indices\" [sum]=\"sum\"\r\n [filters]=\"axes\" [scope]=\"scope\" class=\"table\"\r\n (explore)='explore($event)' [(loading)]=\"loading\"></bizdoc-cube-matrix>\r\n</ng-container>\r\n<ng-template #none>\r\n <bizdoc-none icon=\"insert_chart_outlined\" subtitle=\"NothingHere\"></bizdoc-none>\r\n</ng-template>\r\n", styles: [".table{padding:0 8px}\n"] }]
|
92
|
-
}], ctorParameters: function () { return [{ type: i1.DocumentViewRef }, { type: i2.RouterImpl }, { type: i3.CubeService }, { type: i4.
|
91
|
+
}], ctorParameters: function () { return [{ type: i1.DocumentViewRef }, { type: i2.RouterImpl }, { type: i3.CubeService }, { type: i4.SessionService }]; }, propDecorators: { table: [{
|
93
92
|
type: ViewChild,
|
94
93
|
args: [CubeMatrixComponent, { static: true }]
|
95
94
|
}] } });
|
96
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0cml4LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvdmlld3MvY3ViZS9tYXRyaXguY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi92aWV3cy9jdWJlL21hdHJpeC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRS9DLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQU8vQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxtQkFBbUIsRUFBZSxNQUFNLG1DQUFtQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztJQVd4RSwyQkFBMkIsU0FBM0IsMkJBQTRCLFNBQVEsUUFBaUI7SUFRaEUsWUFDRSxPQUFpQyxFQUN6QixPQUFtQixFQUMzQixPQUFvQixFQUNaLEdBQXNCLEVBQzlCLE9BQXVCO1FBQ3ZCLEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUovQixZQUFPLEdBQVAsT0FBTyxDQUFZO1FBRW5CLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBVnZCLFlBQU8sR0FBb0UsRUFBRSxDQUFDO0lBYXZGLENBQUM7SUFFRCxVQUFVO1FBQ1IsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7UUFDOUUsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU07WUFBRSxNQUFN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LEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQ3BCLENBQUM7Q0FDRixDQUFBO3dIQXhFWSwyQkFBMkI7NEdBQTNCLDJCQUEyQiw2SEFDM0IsbUJBQW1CLHFGQ3hCaEMsa3RFQTBDQTtBRG5CYSwyQkFBMkI7SUFIdkMsTUFBTSxDQUFDO1FBQ04sUUFBUSxFQUFFLG9CQUFvQjtLQUMvQixDQUFDO0dBQ1csMkJBQTJCLENBd0V2QztTQXhFWSwyQkFBMkI7MkZBQTNCLDJCQUEyQjtrQkFSdkMsU0FBUzsyQkFHRixFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUU7c05BTTJCLEtBQUs7c0JBQXRELFNBQVM7dUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBWaWV3Q2hpbGQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gXCIuLi8uLi9jb3JlL2Z1bmN0aW9uc1wiO1xyXG5pbXBvcnQgeyBEb2N1bWVudFZpZXdDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29yZS9iYXNlXCI7XHJcbmltcG9ydCB7IEJpekRvYyB9IGZyb20gXCIuLi8uLi9jb3JlL2RlY29yYXRvcnNcIjtcclxuaW1wb3J0IHsgQXhlc01hcCwgQ3ViZUF4aXMgfSBmcm9tIFwiLi4vLi4vY29yZS9tb2RlbHNcIjtcclxuaW1wb3J0IHsgRGF0YXNvdXJjZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9kYXRhc291cmNlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU2Vzc2lvblNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vY29yZS9zZXNzaW9uLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUm91dGVySW1wbCB9IGZyb20gXCIuLi8uLi9jb3JlL3JvdXRlclwiO1xyXG5pbXBvcnQgeyBDdWJlU2VydmljZSwgUGF0dGVybiB9IGZyb20gXCIuLi8uLi9jdWJlL2N1YmUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEb2N1bWVudFZpZXdSZWYgfSBmcm9tIFwiLi4vZG9jdW1lbnQtdmlldy1yZWZcIjtcclxuaW1wb3J0IHsgQ3ViZUJhc2UgfSBmcm9tIFwiLi9jdWJlLWJhc2VcIjtcclxuaW1wb3J0IHsgQ3ViZU1hdHJpeENvbXBvbmVudCwgU3VtU2V0dGluZ3MgfSBmcm9tIFwiLi4vLi4vY3ViZS9tYXRyaXgvdGFibGUuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFNjb3BlVHlwZSB9IGZyb20gXCIuLi8uLi9jb3JlL2NvbmZpZ3VyYXRpb25cIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHRlbXBsYXRlVXJsOiAnbWF0cml4LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnbWF0cml4LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgaG9zdDogeyBjbGFzczogJ3ZpZXcnIH1cclxufSlcclxuQEJpekRvYyh7XHJcbiAgc2VsZWN0b3I6ICdiaXpkb2MtY3ViZS1tYXRyaXgnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDdWJlRG9jdW1lbnRNYXRyaXhDb21wb25lbnQgZXh0ZW5kcyBDdWJlQmFzZTxPcHRpb25zPiB7XHJcbiAgQFZpZXdDaGlsZChDdWJlTWF0cml4Q29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KSB0YWJsZTogQ3ViZU1hdHJpeENvbXBvbmVudDtcclxuICByZWFkb25seSBzb3VyY2VzOiB7IFtheGlzOiBzdHJpbmddOiBPYnNlcnZhYmxlPHsga2V5OiBzdHJpbmc7IHZhbHVlOiBhbnk7IH1bXT47IH0gPSB7fTtcclxuICBmaWx0ZXJzOiBDdWJlQXhpc1tdO1xyXG4gIGluZGljZXM/OiBzdHJpbmcgfCBzdHJpbmdbXTtcclxuICB4QXhpczogc3RyaW5nO1xyXG4gIHNlcmllczogc3RyaW5nO1xyXG4gIHN1bT86IFN1bVNldHRpbmdzIHwgU3VtU2V0dGluZ3NbXTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHZpZXdSZWY6IERvY3VtZW50Vmlld1JlZjxPcHRpb25zPixcclxuICAgIHByaXZhdGUgX3JvdXRlcjogUm91dGVySW1wbCxcclxuICAgIHNlcnZpY2U6IEN1YmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfZHM6IERhdGFzb3VyY2VTZXJ2aWNlLFxyXG4gICAgc2Vzc2lvbjogU2Vzc2lvblNlcnZpY2UpIHtcclxuICAgIHN1cGVyKHZpZXdSZWYsIHNlcnZpY2UsIHNlc3Npb24sIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgb25WaWV3QmluZCgpIHtcclxuICAgIGNvbnN0IHsgeEF4aXMsIHNlcmllcywgaW5kaWNlcywgc3VtLCBzY29wZSwgZmlsdGVycyB9ID0gdGhpcy5fdmlld1JlZi5vcHRpb25zO1xyXG4gICAgaWYgKCF4QXhpcyB8fCAhc2VyaWVzKSB0aHJvdyAneEF4aXMgYW5kIHNlcmllIHJlcXVpcmVkJztcclxuICAgIHRoaXMueEF4aXMgPSBpc0FycmF5KHhBeGlzKSA/IHhBeGlzWzBdIDogeEF4aXM7XHJcbiAgICB0aGlzLnNlcmllcyA9IGlzQXJyYXkoc2VyaWVzKSA/IHNlcmllc1swXSA6IHNlcmllcztcclxuICAgIHRoaXMuaW5kaWNlcyA9IGluZGljZXM7XHJcbiAgICB0aGlzLnN1bSA9IHN1bTtcclxuICAgIHRoaXMuc2NvcGUgPSBzY29wZTtcclxuXHJcbiAgICB0aGlzLl9zZXJ2aWNlLnBhdHRlcm5zKHRoaXMuY3ViZS5uYW1lKS5zdWJzY3JpYmUocCA9PiB0aGlzLnBhdHRlcm5zID0gcCk7XHJcbiAgICAvKiogb25lIG9yIG1vcmUgYXhpcyAqL1xyXG4gICAgdGhpcy5maWx0ZXJzID0gdGhpcy5jdWJlLmF4ZXMuZmlsdGVyKGEgPT4gaXNBcnJheShmaWx0ZXJzKSA/XHJcbiAgICAgIGZpbHRlcnMuaW5kZXhPZihhLm5hbWUpID4gLTEgOlxyXG4gICAgICBhLm5hbWUgPT09IGZpbHRlcnMpO1xyXG4gICAgdGhpcy5maWx0ZXJzLmZvckVhY2goZiA9PlxyXG4gICAgICB0aGlzLnNvdXJjZXNbZi5uYW1lXSA9IHRoaXMuX2RzLmFsbChmLmRhdGFUeXBlKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGV4cGxvcmUoYXhlczogQXhlc01hcCkge1xyXG4gICAgdGhpcy5fcm91dGVyLm5hdmlnYXRlKFsnY3ViZScsIHRoaXMuY3ViZS5uYW1lLCAnZXhwbG9yZSddLCB7XHJcbiAgICAgIHF1ZXJ5UGFyYW1zOiBheGVzLFxyXG4gICAgICBncm91cDogdGhpcy5ncm91cFxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuICAvKipcclxuICpcclxuICogQHBhcmFtIHZhbHVlXHJcbiAqL1xyXG4gIGZpbHRlcihuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBudW1iZXIsIHRpdGxlOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGF4ZXMgPSB7IC4uLnRoaXMuYXhlcyB9O1xyXG4gICAgYXhlc1tuYW1lXSA9IHZhbHVlO1xyXG4gICAgdGhpcy5hbnlGaWx0ZXJzID0gdHJ1ZTtcclxuICAgIHRoaXMuYXhlcyA9IGF4ZXM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAgKlxyXG4gICAgKiBAcGFyYW0gcGF0dGVyblxyXG4gICAgKi9cclxuICBwYXR0ZXJuQ2hhbmdlKHBhdHRlcm46IFBhdHRlcm4pIHtcclxuICAgIGNvbnN0IGF4ZXMgPSB7IC4uLnBhdHRlcm4uYXhlcyB9O1xyXG4gICAgdGhpcy5fc2VydmljZS5iYXNlKHRoaXMuY3ViZS5uYW1lLCBheGVzLCB0aGlzLm9yaWdpbmFsQXhlcyk7XHJcbiAgICB0aGlzLmF4ZXMgPSBheGVzO1xyXG4gICAgdGhpcy5hbnlGaWx0ZXJzID0gdHJ1ZTtcclxuICAgIHRoaXMudGl0bGUgPSBwYXR0ZXJuLnRpdGxlO1xyXG4gICAgdGhpcy5wYXR0ZXJuID0gcGF0dGVybjtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgdGhpcy5heGVzID0gc3VwZXIuYWdncmVnYXRlKHRoaXMub3JpZ2luYWxBeGVzKTtcclxuICAgIHRoaXMuYW55RmlsdGVycyA9IGZhbHNlO1xyXG4gICAgdGhpcy5wYXR0ZXJuID0gbnVsbDtcclxuICAgIHRoaXMudGl0bGUgPSBudWxsO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25zIHtcclxuICBmaWx0ZXJzOiBzdHJpbmdbXSB8IHN0cmluZztcclxuICBzdW06IFN1bVNldHRpbmdzIHwgU3VtU2V0dGluZ3NbXTtcclxuICBpbmRpY2VzOiBzdHJpbmdbXSB8IHN0cmluZztcclxuICBhZ2dyZWdhdGU6IHN0cmluZ1tdO1xyXG4gIHhBeGlzOiBzdHJpbmc7XHJcbiAgc2VyaWVzOiBzdHJpbmc7XHJcbiAgc2NvcGU/OiBTY29wZVR5cGU7XHJcbn1cclxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc2RhdGE7IGVsc2Ugbm9uZVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJuYXYtdG9vbGJhclwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFsdGVybmF0ZVwiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cImNtZW51XCI+e3tjdWJlLnRpdGxlfX0gPG1hdC1pY29uPmFycm93X2Ryb3BfZG93bjwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgIDxtYXQtbWVudSAjY21lbnU+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtICpuZ0Zvcj1cImxldCBhIG9mIGFsdGVybmF0ZVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic3dpdGNoVG8oYSlcIj5cclxuICAgICAgICAgIHt7YS50aXRsZX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDxzcGFuIGNsYXNzPVwiZGl2aWRlclwiPjwvc3Bhbj5cclxuICAgIDwhLS0gdGl0bGUgLS0+XHJcbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwicGF0dGVybnNNZW51XCIgKm5nSWY9XCJwYXR0ZXJucyAmJiBwYXR0ZXJucy5sZW5ndGhcIiBbYml6ZG9jVG9vbHRpcF09XCInUGF0dGVybid8dHJhbnNsYXRlXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInUGF0dGVybid8dHJhbnNsYXRlXCI+PG1hdC1pY29uIFtjbGFzcy5maWxsZWRdPVwicGF0dGVyblwiPmZpbHRlcl9hbHQ8L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgPG1hdC1tZW51ICNwYXR0ZXJuc01lbnUgeFBvc2l0aW9uPVwiYmVmb3JlXCI+XHJcbiAgICAgIDwhLS0gcGF0dGVybnMgLS0+XHJcbiAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAqbmdGb3I9XCJsZXQgcCBvZiBwYXR0ZXJuc1wiIChjbGljayk9XCJwYXR0ZXJuQ2hhbmdlKHApXCI+e3twLnRpdGxlfX08L2J1dHRvbj5cclxuICAgIDwvbWF0LW1lbnU+XHJcbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwicmVzZXQoKVwiIFtkaXNhYmxlZF09XCIhcGF0dGVyblwiIFtiaXpkb2NUb29sdGlwXT1cIidDbGVhcicgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgPG1hdC1pY29uPmNsZWFyX2FsbDwvbWF0LWljb24+XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDwhLS0gZmlsdGVycyAtLT5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGYgb2YgZmlsdGVyc1wiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cImZtZW51XCI+e3theGVzW2YubmFtZV0gfCB0eXBlVmFsdWUgOiBmLmRhdGFUeXBlIHwgYXN5bmN9fSA8bWF0LWljb24+YXJyb3dfZHJvcF9kb3duPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgPG1hdC1tZW51ICNmbWVudSB4UG9zaXRpb249XCJiZWZvcmVcIj5cclxuICAgICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKm5nRm9yPVwibGV0IGt2IG9mIHNvdXJjZXNbZi5uYW1lXSB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJmaWx0ZXIoZi5uYW1lLCBrdi5rZXksIGt2LnZhbHVlKVwiPlxyXG4gICAgICAgICAge3trdi52YWx1ZX19XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwibG9hZGluZy12aWV3XCIgKm5nSWY9XCJsb2FkaW5nXCI+XHJcbiAgICA8bWF0LXNwaW5uZXIgY29sb3I9XCJhY2NlbnRcIj48L21hdC1zcGlubmVyPlxyXG4gIDwvZGl2PlxyXG4gIDxiaXpkb2MtY3ViZS1tYXRyaXggW2N1YmVdPVwiY3ViZS5uYW1lXCIgW3hBeGlzXT1cInhBeGlzXCIgW3Nlcmllc109XCJzZXJpZXNcIiBbaW5kaWNlc109XCJpbmRpY2VzXCIgW3N1bV09XCJzdW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJzXT1cImF4ZXNcIiBbc2NvcGVdPVwic2NvcGVcIiBjbGFzcz1cInRhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAoZXhwbG9yZSk9J2V4cGxvcmUoJGV2ZW50KScgWyhsb2FkaW5nKV09XCJsb2FkaW5nXCI+PC9iaXpkb2MtY3ViZS1tYXRyaXg+XHJcbjwvbmctY29udGFpbmVyPlxyXG48bmctdGVtcGxhdGUgI25vbmU+XHJcbiAgPGJpemRvYy1ub25lIGljb249XCJpbnNlcnRfY2hhcnRfb3V0bGluZWRcIiBzdWJ0aXRsZT1cIk5vdGhpbmdIZXJlXCI+PC9iaXpkb2Mtbm9uZT5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
|
95
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0cml4LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcmllcy9jb3JlL3NyYy9saWIvdmlld3MvY3ViZS9tYXRyaXguY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyaWVzL2NvcmUvc3JjL2xpYi92aWV3cy9jdWJlL21hdHJpeC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQU8vQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxtQkFBbUIsRUFBZSxNQUFNLG1DQUFtQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0lBV3hFLDJCQUEyQixTQUEzQiwyQkFBNEIsU0FBUSxRQUFpQjtJQVFoRSxZQUNFLE9BQWlDLEVBQ3pCLE9BQW1CLEVBQzNCLE9BQW9CLEVBQ3BCLE9BQXVCO1FBQ3ZCLEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUgvQixZQUFPLEdBQVAsT0FBTyxDQUFZO1FBUnBCLFlBQU8sR0FBb0UsRUFBRSxDQUFDO0lBWXZGLENBQUM7SUFFRCxVQUFVO1FBQ1IsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7UUFDOUUsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU07WUFBRSxNQUFNLDBCQUEwQixDQUFDO1FBQ3hELElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUMvQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDbkQsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDZixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVuQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDekUsdUJBQXVCO1FBQ3ZCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDMUQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5QixDQUFDLENBQUMsSUFBSSxLQUFLLE9BQU8sQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ3ZCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQzFGLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTyxDQUFDLElBQWE7UUFDbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLEVBQUU7WUFDekQsV0FBVyxFQUFFLElBQUk7WUFDakIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1NBQ2xCLENBQUMsQ0FBQztJQUVMLENBQUM7SUFDRDs7O0tBR0M7SUFDRCxNQUFNLENBQUMsSUFBWSxFQUFFLEtBQXNCLEVBQUUsS0FBYTtRQUN4RCxNQUFNLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUNEOzs7UUFHSTtJQUNKLGFBQWEsQ0FBQyxPQUFnQjtRQUM1QixNQUFNLElBQUksR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3pCLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN4QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztJQUNwQixDQUFDO0NBQ0YsQ0FBQTt3SEF2RVksMkJBQTJCOzRHQUEzQiwyQkFBMkIsNkhBQzNCLG1CQUFtQixxRkN2QmhDLGt0RUEwQ0E7QURwQmEsMkJBQTJCO0lBSHZDLE1BQU0sQ0FBQztRQUNOLFFBQVEsRUFBRSxvQkFBb0I7S0FDL0IsQ0FBQztHQUNXLDJCQUEyQixDQXVFdkM7U0F2RVksMkJBQTJCOzJGQUEzQiwyQkFBMkI7a0JBUnZDLFNBQVM7MkJBR0YsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFO3NMQU0yQixLQUFLO3NCQUF0RCxTQUFTO3VCQUFDLG1CQUFtQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgVmlld0NoaWxkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgbWFwLCBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgaXNBcnJheSwgbWFwVG9BcnJheSB9IGZyb20gXCIuLi8uLi9jb3JlL2Z1bmN0aW9uc1wiO1xyXG5pbXBvcnQgeyBCaXpEb2MgfSBmcm9tIFwiLi4vLi4vY29yZS9kZWNvcmF0b3JzXCI7XHJcbmltcG9ydCB7IEF4ZXNNYXAsIEN1YmVBeGlzIH0gZnJvbSBcIi4uLy4uL2NvcmUvbW9kZWxzXCI7XHJcbmltcG9ydCB7IERhdGFzb3VyY2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvZGF0YXNvdXJjZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFNlc3Npb25TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2NvcmUvc2Vzc2lvbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFJvdXRlckltcGwgfSBmcm9tIFwiLi4vLi4vY29yZS9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgQ3ViZVNlcnZpY2UsIFBhdHRlcm4gfSBmcm9tIFwiLi4vLi4vY3ViZS9jdWJlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRG9jdW1lbnRWaWV3UmVmIH0gZnJvbSBcIi4uL2RvY3VtZW50LXZpZXctcmVmXCI7XHJcbmltcG9ydCB7IEN1YmVCYXNlIH0gZnJvbSBcIi4vY3ViZS1iYXNlXCI7XHJcbmltcG9ydCB7IEN1YmVNYXRyaXhDb21wb25lbnQsIFN1bVNldHRpbmdzIH0gZnJvbSBcIi4uLy4uL2N1YmUvbWF0cml4L3RhYmxlLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBTY29wZVR5cGUgfSBmcm9tIFwiLi4vLi4vY29yZS9jb25maWd1cmF0aW9uXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICB0ZW1wbGF0ZVVybDogJ21hdHJpeC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJ21hdHJpeC5jb21wb25lbnQuc2NzcyddLFxyXG4gIGhvc3Q6IHsgY2xhc3M6ICd2aWV3JyB9XHJcbn0pXHJcbkBCaXpEb2Moe1xyXG4gIHNlbGVjdG9yOiAnYml6ZG9jLWN1YmUtbWF0cml4J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3ViZURvY3VtZW50TWF0cml4Q29tcG9uZW50IGV4dGVuZHMgQ3ViZUJhc2U8T3B0aW9ucz4ge1xyXG4gIEBWaWV3Q2hpbGQoQ3ViZU1hdHJpeENvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSkgdGFibGU6IEN1YmVNYXRyaXhDb21wb25lbnQ7XHJcbiAgcmVhZG9ubHkgc291cmNlczogeyBbYXhpczogc3RyaW5nXTogT2JzZXJ2YWJsZTx7IGtleTogc3RyaW5nOyB2YWx1ZTogYW55OyB9W10+OyB9ID0ge307XHJcbiAgZmlsdGVyczogQ3ViZUF4aXNbXTtcclxuICBpbmRpY2VzPzogc3RyaW5nIHwgc3RyaW5nW107XHJcbiAgeEF4aXM6IHN0cmluZztcclxuICBzZXJpZXM6IHN0cmluZztcclxuICBzdW0/OiBTdW1TZXR0aW5ncyB8IFN1bVNldHRpbmdzW107XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICB2aWV3UmVmOiBEb2N1bWVudFZpZXdSZWY8T3B0aW9ucz4sXHJcbiAgICBwcml2YXRlIF9yb3V0ZXI6IFJvdXRlckltcGwsXHJcbiAgICBzZXJ2aWNlOiBDdWJlU2VydmljZSxcclxuICAgIHNlc3Npb246IFNlc3Npb25TZXJ2aWNlKSB7XHJcbiAgICBzdXBlcih2aWV3UmVmLCBzZXJ2aWNlLCBzZXNzaW9uLCB0cnVlKTtcclxuICB9XHJcblxyXG4gIG9uVmlld0JpbmQoKSB7XHJcbiAgICBjb25zdCB7IHhBeGlzLCBzZXJpZXMsIGluZGljZXMsIHN1bSwgc2NvcGUsIGZpbHRlcnMgfSA9IHRoaXMuX3ZpZXdSZWYub3B0aW9ucztcclxuICAgIGlmICgheEF4aXMgfHwgIXNlcmllcykgdGhyb3cgJ3hBeGlzIGFuZCBzZXJpZSByZXF1aXJlZCc7XHJcbiAgICB0aGlzLnhBeGlzID0gaXNBcnJheSh4QXhpcykgPyB4QXhpc1swXSA6IHhBeGlzO1xyXG4gICAgdGhpcy5zZXJpZXMgPSBpc0FycmF5KHNlcmllcykgPyBzZXJpZXNbMF0gOiBzZXJpZXM7XHJcbiAgICB0aGlzLmluZGljZXMgPSBpbmRpY2VzO1xyXG4gICAgdGhpcy5zdW0gPSBzdW07XHJcbiAgICB0aGlzLnNjb3BlID0gc2NvcGU7XHJcblxyXG4gICAgdGhpcy5fc2VydmljZS5wYXR0ZXJucyh0aGlzLmN1YmUubmFtZSkuc3Vic2NyaWJlKHAgPT4gdGhpcy5wYXR0ZXJucyA9IHApO1xyXG4gICAgLyoqIG9uZSBvciBtb3JlIGF4aXMgKi9cclxuICAgIHRoaXMuZmlsdGVycyA9IHRoaXMuY3ViZS5heGVzLmZpbHRlcihhID0+IGlzQXJyYXkoZmlsdGVycykgP1xyXG4gICAgICBmaWx0ZXJzLmluZGV4T2YoYS5uYW1lKSA+IC0xIDpcclxuICAgICAgYS5uYW1lID09PSBmaWx0ZXJzKTtcclxuICAgIHRoaXMuZmlsdGVycy5mb3JFYWNoKGYgPT5cclxuICAgICAgdGhpcy5zb3VyY2VzW2YubmFtZV0gPSB0aGlzLl9zZXJ2aWNlLnZhbHVlcyh0aGlzLmN1YmUubmFtZSwgZi5uYW1lKS5waXBlKG1hcChtYXBUb0FycmF5KSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBleHBsb3JlKGF4ZXM6IEF4ZXNNYXApIHtcclxuICAgIHRoaXMuX3JvdXRlci5uYXZpZ2F0ZShbJ2N1YmUnLCB0aGlzLmN1YmUubmFtZSwgJ2V4cGxvcmUnXSwge1xyXG4gICAgICBxdWVyeVBhcmFtczogYXhlcyxcclxuICAgICAgZ3JvdXA6IHRoaXMuZ3JvdXBcclxuICAgIH0pO1xyXG5cclxuICB9XHJcbiAgLyoqXHJcbiAqXHJcbiAqIEBwYXJhbSB2YWx1ZVxyXG4gKi9cclxuICBmaWx0ZXIobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nIHwgbnVtYmVyLCB0aXRsZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBheGVzID0geyAuLi50aGlzLmF4ZXMgfTtcclxuICAgIGF4ZXNbbmFtZV0gPSB2YWx1ZTtcclxuICAgIHRoaXMuYW55RmlsdGVycyA9IHRydWU7XHJcbiAgICB0aGlzLmF4ZXMgPSBheGVzO1xyXG4gIH1cclxuICAvKipcclxuICAgICpcclxuICAgICogQHBhcmFtIHBhdHRlcm5cclxuICAgICovXHJcbiAgcGF0dGVybkNoYW5nZShwYXR0ZXJuOiBQYXR0ZXJuKSB7XHJcbiAgICBjb25zdCBheGVzID0geyAuLi5wYXR0ZXJuLmF4ZXMgfTtcclxuICAgIHRoaXMuX3NlcnZpY2UuYmFzZSh0aGlzLmN1YmUubmFtZSwgYXhlcywgdGhpcy5vcmlnaW5hbEF4ZXMpO1xyXG4gICAgdGhpcy5heGVzID0gYXhlcztcclxuICAgIHRoaXMuYW55RmlsdGVycyA9IHRydWU7XHJcbiAgICB0aGlzLnRpdGxlID0gcGF0dGVybi50aXRsZTtcclxuICAgIHRoaXMucGF0dGVybiA9IHBhdHRlcm47XHJcbiAgfVxyXG5cclxuICByZXNldCgpIHtcclxuICAgIHRoaXMuYXhlcyA9IHN1cGVyLmFnZ3JlZ2F0ZSh0aGlzLm9yaWdpbmFsQXhlcyk7XHJcbiAgICB0aGlzLmFueUZpbHRlcnMgPSBmYWxzZTtcclxuICAgIHRoaXMucGF0dGVybiA9IG51bGw7XHJcbiAgICB0aGlzLnRpdGxlID0gbnVsbDtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgT3B0aW9ucyB7XHJcbiAgZmlsdGVyczogc3RyaW5nW10gfCBzdHJpbmc7XHJcbiAgc3VtOiBTdW1TZXR0aW5ncyB8IFN1bVNldHRpbmdzW107XHJcbiAgaW5kaWNlczogc3RyaW5nW10gfCBzdHJpbmc7XHJcbiAgYWdncmVnYXRlOiBzdHJpbmdbXTtcclxuICB4QXhpczogc3RyaW5nO1xyXG4gIHNlcmllczogc3RyaW5nO1xyXG4gIHNjb3BlPzogU2NvcGVUeXBlO1xyXG59XHJcbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNkYXRhOyBlbHNlIG5vbmVcIj5cclxuICA8ZGl2IGNsYXNzPVwibmF2LXRvb2xiYXJcIj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhbHRlcm5hdGVcIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJjbWVudVwiPnt7Y3ViZS50aXRsZX19IDxtYXQtaWNvbj5hcnJvd19kcm9wX2Rvd248L21hdC1pY29uPjwvYnV0dG9uPlxyXG4gICAgICA8bWF0LW1lbnUgI2NtZW51PlxyXG4gICAgICAgIDxidXR0b24gbWF0LW1lbnUtaXRlbSAqbmdGb3I9XCJsZXQgYSBvZiBhbHRlcm5hdGVcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInN3aXRjaFRvKGEpXCI+XHJcbiAgICAgICAgICB7e2EudGl0bGV9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L21hdC1tZW51PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8c3BhbiBjbGFzcz1cImRpdmlkZXJcIj48L3NwYW4+XHJcbiAgICA8IS0tIHRpdGxlIC0tPlxyXG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gW21hdE1lbnVUcmlnZ2VyRm9yXT1cInBhdHRlcm5zTWVudVwiICpuZ0lmPVwicGF0dGVybnMgJiYgcGF0dGVybnMubGVuZ3RoXCIgW2JpemRvY1Rvb2x0aXBdPVwiJ1BhdHRlcm4nfHRyYW5zbGF0ZVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1BhdHRlcm4nfHRyYW5zbGF0ZVwiPjxtYXQtaWNvbiBbY2xhc3MuZmlsbGVkXT1cInBhdHRlcm5cIj5maWx0ZXJfYWx0PC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgIDxtYXQtbWVudSAjcGF0dGVybnNNZW51IHhQb3NpdGlvbj1cImJlZm9yZVwiPlxyXG4gICAgICA8IS0tIHBhdHRlcm5zIC0tPlxyXG4gICAgICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKm5nRm9yPVwibGV0IHAgb2YgcGF0dGVybnNcIiAoY2xpY2spPVwicGF0dGVybkNoYW5nZShwKVwiPnt7cC50aXRsZX19PC9idXR0b24+XHJcbiAgICA8L21hdC1tZW51PlxyXG4gICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInJlc2V0KClcIiBbZGlzYWJsZWRdPVwiIXBhdHRlcm5cIiBbYml6ZG9jVG9vbHRpcF09XCInQ2xlYXInIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgIDxtYXQtaWNvbj5jbGVhcl9hbGw8L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8IS0tIGZpbHRlcnMgLS0+XHJcbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmIG9mIGZpbHRlcnNcIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtYnV0dG9uIFttYXRNZW51VHJpZ2dlckZvcl09XCJmbWVudVwiPnt7YXhlc1tmLm5hbWVdIHwgdHlwZVZhbHVlIDogZi5kYXRhVHlwZSB8IGFzeW5jfX0gPG1hdC1pY29uPmFycm93X2Ryb3BfZG93bjwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgIDxtYXQtbWVudSAjZm1lbnUgeFBvc2l0aW9uPVwiYmVmb3JlXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtICpuZ0Zvcj1cImxldCBrdiBvZiBzb3VyY2VzW2YubmFtZV0gfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZmlsdGVyKGYubmFtZSwga3Yua2V5LCBrdi52YWx1ZSlcIj5cclxuICAgICAgICAgIHt7a3YudmFsdWV9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L21hdC1tZW51PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImxvYWRpbmctdmlld1wiICpuZ0lmPVwibG9hZGluZ1wiPlxyXG4gICAgPG1hdC1zcGlubmVyIGNvbG9yPVwiYWNjZW50XCI+PC9tYXQtc3Bpbm5lcj5cclxuICA8L2Rpdj5cclxuICA8Yml6ZG9jLWN1YmUtbWF0cml4IFtjdWJlXT1cImN1YmUubmFtZVwiIFt4QXhpc109XCJ4QXhpc1wiIFtzZXJpZXNdPVwic2VyaWVzXCIgW2luZGljZXNdPVwiaW5kaWNlc1wiIFtzdW1dPVwic3VtXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbZmlsdGVyc109XCJheGVzXCIgW3Njb3BlXT1cInNjb3BlXCIgY2xhc3M9XCJ0YWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGV4cGxvcmUpPSdleHBsb3JlKCRldmVudCknIFsobG9hZGluZyldPVwibG9hZGluZ1wiPjwvYml6ZG9jLWN1YmUtbWF0cml4PlxyXG48L25nLWNvbnRhaW5lcj5cclxuPG5nLXRlbXBsYXRlICNub25lPlxyXG4gIDxiaXpkb2Mtbm9uZSBpY29uPVwiaW5zZXJ0X2NoYXJ0X291dGxpbmVkXCIgc3VidGl0bGU9XCJOb3RoaW5nSGVyZVwiPjwvYml6ZG9jLW5vbmU+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
|