@bizdoc/core 1.14.13 → 1.14.16
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/assets/bizdoc-schema.json +146 -125
- package/esm2020/lib/admin/admin-dismiss.service.mjs +15 -9
- package/esm2020/lib/admin/core/color-picker.input.mjs +3 -3
- package/esm2020/lib/admin/form/workflow/node.component.mjs +63 -31
- package/esm2020/lib/admin/form/workflow/workflow.component.mjs +314 -166
- package/esm2020/lib/admin/positions/positions.component.mjs +6 -5
- package/esm2020/lib/admin/profiler/profiler.component.mjs +2 -2
- package/esm2020/lib/compose/dismiss.service.mjs +2 -2
- package/esm2020/lib/core/save-changes.dialog.mjs +18 -0
- package/esm2020/lib/core/slots/router.service.mjs +1 -1
- package/esm2020/lib/core/translations.mjs +2 -2
- package/esm2020/lib/shared.module.mjs +2 -2
- package/esm2020/public-api.mjs +2 -2
- package/fesm2015/bizdoc-core.mjs +432 -247
- package/fesm2015/bizdoc-core.mjs.map +1 -1
- package/fesm2020/bizdoc-core.mjs +429 -243
- package/fesm2020/bizdoc-core.mjs.map +1 -1
- package/lib/admin/admin-dismiss.service.d.ts +3 -3
- package/lib/admin/core/color-picker.input.d.ts +1 -1
- package/lib/admin/form/workflow/node.component.d.ts +8 -7
- package/lib/admin/form/workflow/workflow.component.d.ts +13 -12
- package/lib/admin/positions/positions.component.d.ts +1 -0
- package/lib/{compose → core}/save-changes.dialog.d.ts +0 -0
- package/lib/core/slots/router.service.d.ts +1 -1
- package/lib/shared.module.d.ts +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +1 -1
- package/esm2020/lib/compose/save-changes.dialog.mjs +0 -18
@@ -1,8 +1,6 @@
|
|
1
|
-
import { Output, ViewChild, ViewContainerRef } from '@angular/core';
|
2
|
-
import { Component, Injector } from '@angular/core';
|
1
|
+
import { EventEmitter, Output, ViewChild, ViewContainerRef, Component, Injector } from '@angular/core';
|
3
2
|
import { Subject, takeUntil } from 'rxjs';
|
4
3
|
import { NodeRef } from './node-ref';
|
5
|
-
import { EventEmitter } from '@angular/core';
|
6
4
|
import { LayoutComponent } from '../../../core/layout/layout.component';
|
7
5
|
import { cleanup } from '../../../core/functions';
|
8
6
|
import * as i0 from "@angular/core";
|
@@ -15,8 +13,8 @@ import * as i6 from "@angular/material/form-field";
|
|
15
13
|
import * as i7 from "@angular/material/select";
|
16
14
|
import * as i8 from "@angular/material/core";
|
17
15
|
import * as i9 from "@angular/material/button-toggle";
|
18
|
-
import * as i10 from "@angular/
|
19
|
-
import * as i11 from "@angular/
|
16
|
+
import * as i10 from "@angular/flex-layout/flex";
|
17
|
+
import * as i11 from "@angular/common";
|
20
18
|
import * as i12 from "@angular/material/input";
|
21
19
|
import * as i13 from "../../../core/pipes/translate.pipe";
|
22
20
|
export class WorkflowNodeComponent {
|
@@ -29,9 +27,9 @@ export class WorkflowNodeComponent {
|
|
29
27
|
this._fb = _fb;
|
30
28
|
this._pane = _pane;
|
31
29
|
this.change = new EventEmitter();
|
32
|
-
this.
|
33
|
-
action:
|
34
|
-
case:
|
30
|
+
this.connector = this._fb.group({
|
31
|
+
action: null,
|
32
|
+
case: null
|
35
33
|
});
|
36
34
|
this._elementDestroy = new Subject();
|
37
35
|
this.actions = _session.profile.actions;
|
@@ -39,29 +37,47 @@ export class WorkflowNodeComponent {
|
|
39
37
|
ngOnInit() {
|
40
38
|
this._pane.dataChange.subscribe(d => {
|
41
39
|
this.nodes = d['nodes'];
|
40
|
+
this.diagram = d['diagram'];
|
42
41
|
this.connectors = d['connectors'];
|
43
42
|
this.tool = null;
|
44
43
|
this._elementDestroy.next();
|
44
|
+
this.argumentstemplate.clear();
|
45
45
|
if (this.connectors.length) {
|
46
|
-
this.connectorInfo.valueChanges.pipe(takeUntil(this._elementDestroy)).subscribe(() => {
|
47
|
-
this.connectors.forEach(c => {
|
48
|
-
Object.assign(c.addInfo, this.connectorInfo.getRawValue());
|
49
|
-
this.change.emit();
|
50
|
-
});
|
51
|
-
});
|
52
46
|
const connector = this.connectors[0];
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
}
|
47
|
+
if (connector.addInfo) {
|
48
|
+
const action = connector.addInfo['action'], acase = connector.addInfo['case'];
|
49
|
+
this.connector.patchValue({
|
50
|
+
action: this.connectors.length === 1 || this.connectors.every(c => c.addInfo && c.addInfo['action'] === action) ? action : null,
|
51
|
+
case: this.connectors.length === 1 || this.connectors.every(c => c.addInfo && c.addInfo['case'] === acase) ? acase : null
|
52
|
+
});
|
53
|
+
}
|
60
54
|
this._pane.title = this._translate.get(this.connectors.length === 1 ? 'Connector' : 'Connectors', this.connectors.length);
|
61
55
|
this._pane.icon = 'link';
|
56
|
+
this.connector.valueChanges.pipe(takeUntil(this._elementDestroy)).subscribe(v => {
|
57
|
+
const content = v['case'] || v['action'];
|
58
|
+
if (!connector.addInfo)
|
59
|
+
connector.addInfo = this.connector.getRawValue();
|
60
|
+
else
|
61
|
+
Object.assign(connector.addInfo, this.connector.getRawValue());
|
62
|
+
cleanup(connector.addInfo);
|
63
|
+
if (connector.annotations.length) {
|
64
|
+
connector.annotations[0].content = content;
|
65
|
+
this.diagram.dataBind();
|
66
|
+
}
|
67
|
+
else
|
68
|
+
this.diagram.addConnectorLabels(connector, [{
|
69
|
+
style: {
|
70
|
+
color: this._session.theme.dark ? 'white' : 'black',
|
71
|
+
fill: 'transparent',
|
72
|
+
opacity: .8,
|
73
|
+
},
|
74
|
+
content
|
75
|
+
}]);
|
76
|
+
this.change.emit();
|
77
|
+
});
|
78
|
+
this.argumentstemplate.createEmbeddedView(this.connectorargs);
|
62
79
|
}
|
63
|
-
|
64
|
-
if (this.nodes.length) {
|
80
|
+
else {
|
65
81
|
const node = this.node = this.nodes[0], addInfo = node.addInfo;
|
66
82
|
if (addInfo && addInfo.nodeType) {
|
67
83
|
const nodeType = addInfo.nodeType;
|
@@ -69,10 +85,23 @@ export class WorkflowNodeComponent {
|
|
69
85
|
this._pane.title = tool.title;
|
70
86
|
const annotationArg = tool.arguments.find(a => a.diagram);
|
71
87
|
function change(m) {
|
72
|
-
if (annotationArg && m[annotationArg.name] !== null
|
73
|
-
node.annotations
|
88
|
+
if (annotationArg && m[annotationArg.name] !== null) {
|
89
|
+
if (node.annotations.length) {
|
90
|
+
node.annotations[0].content = m[annotationArg.name] || null;
|
91
|
+
this.diagram.dataBind();
|
92
|
+
}
|
93
|
+
else
|
94
|
+
this.diagram.addNodeLabels(node, [{
|
95
|
+
style: {
|
96
|
+
color: this._session.theme.dark ? 'white' : 'black',
|
97
|
+
fill: 'transparent',
|
98
|
+
opacity: .8,
|
99
|
+
},
|
100
|
+
content: m[annotationArg.name] || null
|
101
|
+
}]);
|
74
102
|
}
|
75
|
-
Object.assign(addInfo,
|
103
|
+
Object.assign(addInfo, m);
|
104
|
+
cleanup(addInfo);
|
76
105
|
this.change.emit();
|
77
106
|
}
|
78
107
|
if (tool.template) {
|
@@ -105,8 +134,8 @@ export class WorkflowNodeComponent {
|
|
105
134
|
instance.form.patchValue(node.addInfo, { emitEvent: false });
|
106
135
|
return instance;
|
107
136
|
}
|
108
|
-
connectorCaseChange(
|
109
|
-
this.
|
137
|
+
connectorCaseChange(evt) {
|
138
|
+
this.connector.controls['case'].setValue(evt.value);
|
110
139
|
this.change.emit();
|
111
140
|
}
|
112
141
|
ngOnDestroy() {
|
@@ -115,14 +144,17 @@ export class WorkflowNodeComponent {
|
|
115
144
|
}
|
116
145
|
}
|
117
146
|
WorkflowNodeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: WorkflowNodeComponent, deps: [{ token: i1.SessionService }, { token: i2.BizDocComponentFactoryResolver }, { token: i0.ComponentFactoryResolver }, { token: i0.Injector }, { token: i3.TranslateService }, { token: i4.FormBuilder }, { token: i5.PaneRef }], target: i0.ɵɵFactoryTarget.Component });
|
118
|
-
WorkflowNodeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: WorkflowNodeComponent, selector: "ng-component", outputs: { change: "change" }, viewQueries: [{ propertyName: "argumentstemplate", first: true, predicate: ["arguments"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: "<ng-container #arguments>\r\n</ng-container>\r\n<
|
147
|
+
WorkflowNodeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.9", type: WorkflowNodeComponent, selector: "ng-component", outputs: { change: "change" }, viewQueries: [{ propertyName: "argumentstemplate", first: true, predicate: ["arguments"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "connectorargs", first: true, predicate: ["connectorargs"], descendants: true, static: true }], ngImport: i0, template: "<ng-container #arguments>\r\n</ng-container>\r\n<ng-template #connectorargs>\r\n <form [formGroup]=\"connector\" fxLayout=\"column\" autocomplete=\"off\">\r\n <mat-form-field>\r\n <mat-select [placeholder]=\"'Action' | translate\" formControlName=\"action\">\r\n <mat-option *ngFor=\"let action of actions\" [value]=\"action.name\">{{action.title}}</mat-option>\r\n <mat-option>{{'None' | translate}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-button-toggle-group [value]=\"connector.controls['case'].value\" #acase=\"matButtonToggleGroup\" (change)=\"connectorCaseChange($event)\">\r\n <mat-button-toggle value=\"true\">{{'True' | translate}}</mat-button-toggle>\r\n <mat-button-toggle value=\"false\">{{'False' | translate}}</mat-button-toggle>\r\n <mat-button-toggle>{{'Case' | translate}}</mat-button-toggle>\r\n </mat-button-toggle-group>\r\n <mat-form-field [style.display]=\"connector.controls['case'].value==='true'||connector.controls['case'].value==='false'?'none':''\">\r\n <input matInput [placeholder]=\"'Case' | translate\" formControlName=\"case\" />\r\n </mat-form-field>\r\n </form>\r\n</ng-template>\r\n", styles: [":host{width:100%;padding:4px;display:block}\n"], components: [{ type: i6.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i7.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i8.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i9.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }], directives: [{ type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i10.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i11.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { type: i12.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }], pipes: { "translate": i13.TranslatePipe } });
|
119
148
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.9", ngImport: i0, type: WorkflowNodeComponent, decorators: [{
|
120
149
|
type: Component,
|
121
|
-
args: [{ template: "<ng-container #arguments>\r\n</ng-container>\r\n<
|
150
|
+
args: [{ template: "<ng-container #arguments>\r\n</ng-container>\r\n<ng-template #connectorargs>\r\n <form [formGroup]=\"connector\" fxLayout=\"column\" autocomplete=\"off\">\r\n <mat-form-field>\r\n <mat-select [placeholder]=\"'Action' | translate\" formControlName=\"action\">\r\n <mat-option *ngFor=\"let action of actions\" [value]=\"action.name\">{{action.title}}</mat-option>\r\n <mat-option>{{'None' | translate}}</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-button-toggle-group [value]=\"connector.controls['case'].value\" #acase=\"matButtonToggleGroup\" (change)=\"connectorCaseChange($event)\">\r\n <mat-button-toggle value=\"true\">{{'True' | translate}}</mat-button-toggle>\r\n <mat-button-toggle value=\"false\">{{'False' | translate}}</mat-button-toggle>\r\n <mat-button-toggle>{{'Case' | translate}}</mat-button-toggle>\r\n </mat-button-toggle-group>\r\n <mat-form-field [style.display]=\"connector.controls['case'].value==='true'||connector.controls['case'].value==='false'?'none':''\">\r\n <input matInput [placeholder]=\"'Case' | translate\" formControlName=\"case\" />\r\n </mat-form-field>\r\n </form>\r\n</ng-template>\r\n", styles: [":host{width:100%;padding:4px;display:block}\n"] }]
|
122
151
|
}], ctorParameters: function () { return [{ type: i1.SessionService }, { type: i2.BizDocComponentFactoryResolver }, { type: i0.ComponentFactoryResolver }, { type: i0.Injector }, { type: i3.TranslateService }, { type: i4.FormBuilder }, { type: i5.PaneRef }]; }, propDecorators: { change: [{
|
123
152
|
type: Output
|
124
153
|
}], argumentstemplate: [{
|
125
154
|
type: ViewChild,
|
126
155
|
args: ['arguments', { static: true, read: ViewContainerRef }]
|
156
|
+
}], connectorargs: [{
|
157
|
+
type: ViewChild,
|
158
|
+
args: ['connectorargs', { static: true }]
|
127
159
|
}] } });
|
128
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2Zvcm0vd29ya2Zsb3cvbm9kZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2Zvcm0vd29ya2Zsb3cvbm9kZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQStDLE1BQU0sRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakgsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFcEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFNMUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVyQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUV4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQU9sRCxNQUFNLE9BQ0UscUJBQXFCO0lBYTNCLFlBQ1UsUUFBd0IsRUFDeEIsZ0JBQWdELEVBQ2hELEdBQTZCLEVBQzdCLFNBQW1CLEVBQ25CLFVBQTRCLEVBQzVCLEdBQWdCLEVBQ2hCLEtBQXFDO1FBTnJDLGFBQVEsR0FBUixRQUFRLENBQWdCO1FBQ3hCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBZ0M7UUFDaEQsUUFBRyxHQUFILEdBQUcsQ0FBMEI7UUFDN0IsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUNuQixlQUFVLEdBQVYsVUFBVSxDQUFrQjtRQUM1QixRQUFHLEdBQUgsR0FBRyxDQUFhO1FBQ2hCLFVBQUssR0FBTCxLQUFLLENBQWdDO1FBbkI1QixXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUl0QyxrQkFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDO1lBQ3RDLE1BQU0sRUFBRSxFQUFFO1lBQ1YsSUFBSSxFQUFFLEVBQUU7U0FDVCxDQUFDLENBQUM7UUFHSyxvQkFBZSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFVNUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztJQUMxQyxDQUFDO0lBQ0QsUUFBUTtRQUNOLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNsQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUVqQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzVCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtvQkFDbkYsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7d0JBQzFCLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUE7d0JBQzFELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ3JCLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2dCQUNILE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPO29CQUFFLENBQUMsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pFLE1BQU0sTUFBTSxHQUFJLFNBQVMsQ0FBQyxPQUFlLENBQUMsTUFBTSxFQUM5QyxLQUFLLEdBQUksU0FBUyxDQUFDLE9BQWUsQ0FBQyxJQUFJLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDO29CQUM1QixNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUUsQ0FBQyxDQUFDLE9BQWUsQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSTtvQkFDeEgsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFFLENBQUMsQ0FBQyxPQUFlLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUk7aUJBQ25ILENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzFILElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQzthQUMxQjtZQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMvQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO2dCQUNyQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQ3BDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBYyxDQUFDO2dCQUNoQyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFO29CQUMvQixNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO29CQUNsQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDO29CQUNwRixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO29CQUM5QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFFMUQsU0FBUyxNQUFNLENBQUMsQ0FBQzt3QkFDZixJQUFJLGFBQWEsSUFBSSxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLFNBQVMsRUFBRTs0QkFDMUYsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQzt5QkFDckQ7d0JBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ3JCLENBQUM7b0JBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO3dCQUNqQixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO3dCQUVwRCxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO3FCQUN6RDt5QkFDSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFO3dCQUM5QixJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO3dCQUV2RCxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztxQkFDekY7aUJBQ0Y7YUFDRjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNPLHNCQUFzQixDQUFDLElBQWMsRUFBRSxJQUFlO1FBQzVELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUMzRSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLGdCQUFnQixFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakcsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUFDLFFBQTJCLENBQUM7UUFDMUQsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2pDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUM5QixRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbEIsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUNPLG1CQUFtQixDQUFDLElBQWMsRUFBRSxJQUFlO1FBQ3pELE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNFLE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVGLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzNGLE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxRQUFtQyxDQUFDO1FBQ2xFLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUM3RCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBQ0QsbUJBQW1CLENBQUMsS0FBYztRQUNoQyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBQ0QsV0FBVztRQUNULElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQyxDQUFDOztrSEF6R0sscUJBQXFCO3NHQUFyQixxQkFBcUIsOEtBRW1CLGdCQUFnQiwyQ0N4QmhFLDIwRUFvQ0E7MkZEZFEscUJBQXFCO2tCQUw1QixTQUFTOzsrUkFNVyxNQUFNO3NCQUF4QixNQUFNO2dCQUMyRCxpQkFBaUI7c0JBQWxGLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ29ubmVjdG9yTW9kZWwsIE5vZGVNb2RlbCB9IGZyb20gJ0BzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLWRpYWdyYW1zJztcclxuaW1wb3J0IHsgQml6RG9jQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9jb21wb25lbnQtZmFjdG9yeS1yZXNvbHZlcic7XHJcbmltcG9ydCB7IEFjdGlvbiwgRmxvd05vZGUgfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscyc7XHJcbmltcG9ydCB7IFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXNzaW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQYW5lUmVmIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zbG90cy9wYW5lLXJlZic7XHJcbmltcG9ydCB7IE5vZGVSZWYgfSBmcm9tICcuL25vZGUtcmVmJztcclxuaW1wb3J0IHsgQXJndW1lbnRzQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY29yZS9iYXNlJztcclxuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IExheW91dENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbGF5b3V0L2xheW91dC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS90cmFuc2xhdGUuc2VydmljZSc7XHJcbmltcG9ydCB7IGNsZWFudXAgfSBmcm9tICcuLi8uLi8uLi9jb3JlL2Z1bmN0aW9ucyc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgdGVtcGxhdGVVcmw6ICcuL25vZGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL25vZGUuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0XHJcbiAgY2xhc3MgV29ya2Zsb3dOb2RlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBPdXRwdXQoKSByZWFkb25seSBjaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQFZpZXdDaGlsZCgnYXJndW1lbnRzJywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgYXJndW1lbnRzdGVtcGxhdGU6IFZpZXdDb250YWluZXJSZWY7XHJcbiAgbm9kZXM6IE5vZGVNb2RlbFtdO1xyXG4gIGNvbm5lY3RvcnM6IENvbm5lY3Rvck1vZGVsW107XHJcbiAgcmVhZG9ubHkgY29ubmVjdG9ySW5mbyA9IHRoaXMuX2ZiLmdyb3VwKHtcclxuICAgIGFjdGlvbjogJycsXHJcbiAgICBjYXNlOiAnJ1xyXG4gIH0pO1xyXG4gIGFjdGlvbnM6IEFjdGlvbltdO1xyXG4gIHRvb2w/OiBGbG93Tm9kZTtcclxuICBwcml2YXRlIF9lbGVtZW50RGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgbm9kZTogTm9kZU1vZGVsO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfc2Vzc2lvbjogU2Vzc2lvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9mYWN0b3J5UmVzb2x2ZXI6IEJpekRvY0NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICAgIHByaXZhdGUgX2NmOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIF90cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9mYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIF9wYW5lOiBQYW5lUmVmPFdvcmtmbG93Tm9kZUNvbXBvbmVudD4pIHtcclxuICAgIHRoaXMuYWN0aW9ucyA9IF9zZXNzaW9uLnByb2ZpbGUuYWN0aW9ucztcclxuICB9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9wYW5lLmRhdGFDaGFuZ2Uuc3Vic2NyaWJlKGQgPT4ge1xyXG4gICAgICB0aGlzLm5vZGVzID0gZFsnbm9kZXMnXTtcclxuICAgICAgdGhpcy5jb25uZWN0b3JzID0gZFsnY29ubmVjdG9ycyddO1xyXG4gICAgICB0aGlzLnRvb2wgPSBudWxsO1xyXG5cclxuICAgICAgdGhpcy5fZWxlbWVudERlc3Ryb3kubmV4dCgpO1xyXG4gICAgICBpZiAodGhpcy5jb25uZWN0b3JzLmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuY29ubmVjdG9ySW5mby52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5fZWxlbWVudERlc3Ryb3kpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jb25uZWN0b3JzLmZvckVhY2goYyA9PiB7XHJcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oYy5hZGRJbmZvLCB0aGlzLmNvbm5lY3RvckluZm8uZ2V0UmF3VmFsdWUoKSlcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2UuZW1pdCgpO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc3QgY29ubmVjdG9yID0gdGhpcy5jb25uZWN0b3JzWzBdO1xyXG4gICAgICAgIHRoaXMuY29ubmVjdG9ycy5mb3JFYWNoKGMgPT4geyBpZiAoIWMuYWRkSW5mbykgYy5hZGRJbmZvID0ge30gfSk7XHJcbiAgICAgICAgY29uc3QgYWN0aW9uID0gKGNvbm5lY3Rvci5hZGRJbmZvIGFzIGFueSkuYWN0aW9uLFxyXG4gICAgICAgICAgYWNhc2UgPSAoY29ubmVjdG9yLmFkZEluZm8gYXMgYW55KS5jYXNlO1xyXG4gICAgICAgIHRoaXMuY29ubmVjdG9ySW5mby5wYXRjaFZhbHVlKHtcclxuICAgICAgICAgIGFjdGlvbjogdGhpcy5jb25uZWN0b3JzLmxlbmd0aCA9PT0gMSB8fCB0aGlzLmNvbm5lY3RvcnMuZXZlcnkoYyA9PiAoYy5hZGRJbmZvIGFzIGFueSkuYWN0aW9uID09PSBhY3Rpb24pID8gYWN0aW9uIDogbnVsbCxcclxuICAgICAgICAgIGNhc2U6IHRoaXMuY29ubmVjdG9ycy5sZW5ndGggPT09IDEgfHwgdGhpcy5jb25uZWN0b3JzLmV2ZXJ5KGMgPT4gKGMuYWRkSW5mbyBhcyBhbnkpLmNhc2UgPT09IGFjYXNlKSA/IGFjYXNlIDogbnVsbFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuX3BhbmUudGl0bGUgPSB0aGlzLl90cmFuc2xhdGUuZ2V0KHRoaXMuY29ubmVjdG9ycy5sZW5ndGggPT09IDEgPyAnQ29ubmVjdG9yJyA6ICdDb25uZWN0b3JzJywgdGhpcy5jb25uZWN0b3JzLmxlbmd0aCk7XHJcbiAgICAgICAgdGhpcy5fcGFuZS5pY29uID0gJ2xpbmsnO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYXJndW1lbnRzdGVtcGxhdGUuY2xlYXIoKTtcclxuICAgICAgaWYgKHRoaXMubm9kZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3Qgbm9kZSA9IHRoaXMubm9kZSA9IHRoaXMubm9kZXNbMF0sXHJcbiAgICAgICAgICBhZGRJbmZvID0gbm9kZS5hZGRJbmZvIGFzIGFueTtcclxuICAgICAgICBpZiAoYWRkSW5mbyAmJiBhZGRJbmZvLm5vZGVUeXBlKSB7XHJcbiAgICAgICAgICBjb25zdCBub2RlVHlwZSA9IGFkZEluZm8ubm9kZVR5cGU7XHJcbiAgICAgICAgICBjb25zdCB0b29sID0gdGhpcy50b29sID0gdGhpcy5fc2Vzc2lvbi5wcm9maWxlLm5vZGVzLmZpbmQobiA9PiBuLm5hbWUgPT09IG5vZGVUeXBlKTtcclxuICAgICAgICAgIHRoaXMuX3BhbmUudGl0bGUgPSB0b29sLnRpdGxlO1xyXG4gICAgICAgICAgY29uc3QgYW5ub3RhdGlvbkFyZyA9IHRvb2wuYXJndW1lbnRzLmZpbmQoYSA9PiBhLmRpYWdyYW0pO1xyXG5cclxuICAgICAgICAgIGZ1bmN0aW9uIGNoYW5nZShtKSB7XHJcbiAgICAgICAgICAgIGlmIChhbm5vdGF0aW9uQXJnICYmIG1bYW5ub3RhdGlvbkFyZy5uYW1lXSAhPT0gbnVsbCAmJiBtW2Fubm90YXRpb25BcmcubmFtZV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgIG5vZGUuYW5ub3RhdGlvbnNbMF0uY29udGVudCA9IG1bYW5ub3RhdGlvbkFyZy5uYW1lXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGFkZEluZm8sIGNsZWFudXAobSkpO1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZS5lbWl0KCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRvb2wudGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gdGhpcy5fY3JlYXRlVG9vbFRlbXBsYXRlKHRvb2wsIG5vZGUpO1xyXG5cclxuICAgICAgICAgICAgaW5zdGFuY2UuZm9ybS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKGNoYW5nZS5iaW5kKHRoaXMpKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKHRvb2wuYXJndW1lbnRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBsZXQgaW5zdGFuY2UgPSB0aGlzLl9jcmVhdGVMYXlvdXRBcmd1bWVudHModG9vbCwgbm9kZSk7XHJcblxyXG4gICAgICAgICAgICBpbnN0YW5jZS5tb2RlbENoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLl9lbGVtZW50RGVzdHJveSkpLnN1YnNjcmliZShjaGFuZ2UuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfY3JlYXRlTGF5b3V0QXJndW1lbnRzKHRvb2w6IEZsb3dOb2RlLCBub2RlOiBOb2RlTW9kZWwpIHtcclxuICAgIGNvbnN0IGNvbXBvbmVudEZhY3RvcnkgPSB0aGlzLl9jZi5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShMYXlvdXRDb21wb25lbnQpO1xyXG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy5hcmd1bWVudHN0ZW1wbGF0ZS5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeSwgMCwgdGhpcy5faW5qZWN0b3IpO1xyXG4gICAgY29uc3QgaW5zdGFuY2UgPSBjb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgTGF5b3V0Q29tcG9uZW50O1xyXG4gICAgaW5zdGFuY2UuZmllbGRzID0gdG9vbC5hcmd1bWVudHM7XHJcbiAgICBpbnN0YW5jZS5tb2RlbCA9IG5vZGUuYWRkSW5mbztcclxuICAgIGluc3RhbmNlLmNyZWF0ZSgpO1xyXG4gICAgcmV0dXJuIGluc3RhbmNlO1xyXG4gIH1cclxuICBwcml2YXRlIF9jcmVhdGVUb29sVGVtcGxhdGUodG9vbDogRmxvd05vZGUsIG5vZGU6IE5vZGVNb2RlbCkge1xyXG4gICAgY29uc3QgY29tcG9uZW50RmFjdG9yeSA9IHRoaXMuX2ZhY3RvcnlSZXNvbHZlci5yZXNvbHZlKHRoaXMudG9vbC50ZW1wbGF0ZSk7XHJcbiAgICBjb25zdCBub2RlUmVmID0gbmV3IE5vZGVSZWYodG9vbCk7XHJcbiAgICBjb25zdCBpbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZShbeyBwcm92aWRlOiBOb2RlUmVmLCB1c2VWYWx1ZTogbm9kZVJlZiB9XSwgdGhpcy5faW5qZWN0b3IpO1xyXG4gICAgY29uc3QgY29tcG9uZW50UmVmID0gdGhpcy5hcmd1bWVudHN0ZW1wbGF0ZS5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeSwgMCwgaW5qZWN0b3IpO1xyXG4gICAgY29uc3QgaW5zdGFuY2UgPSBjb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgQXJndW1lbnRzQ29tcG9uZW50PGFueT47XHJcbiAgICBpbnN0YW5jZS5mb3JtLnBhdGNoVmFsdWUobm9kZS5hZGRJbmZvLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICByZXR1cm4gaW5zdGFuY2U7XHJcbiAgfVxyXG4gIGNvbm5lY3RvckNhc2VDaGFuZ2UoYWNhc2U/OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuY29ubmVjdG9ySW5mby5jb250cm9sc1snY2FzZSddLnNldFZhbHVlKGFjYXNlKTtcclxuICAgIHRoaXMuY2hhbmdlLmVtaXQoKTtcclxuICB9XHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLl9lbGVtZW50RGVzdHJveS5uZXh0KCk7XHJcbiAgICB0aGlzLl9lbGVtZW50RGVzdHJveS5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8bmctY29udGFpbmVyICNhcmd1bWVudHM+XHJcbjwvbmctY29udGFpbmVyPlxyXG48Zm9ybSAqbmdJZj1cImNvbm5lY3RvcnM/Lmxlbmd0aFwiIFtmb3JtR3JvdXBdPVwiY29ubmVjdG9ySW5mb1wiIGZ4TGF5b3V0PVwiY29sdW1uXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XHJcbiAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgPG1hdC1zZWxlY3QgW3BsYWNlaG9sZGVyXT1cIidBY3Rpb24nIHwgdHJhbnNsYXRlXCIgZm9ybUNvbnRyb2xOYW1lPVwiYWN0aW9uXCI+XHJcbiAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgYWN0aW9uc1wiIFt2YWx1ZV09XCJhY3Rpb24ubmFtZVwiPnt7YWN0aW9uLnRpdGxlfX08L21hdC1vcHRpb24+XHJcbiAgICAgIDxtYXQtb3B0aW9uPnt7J05vbmUnIHwgdHJhbnNsYXRlfX08L21hdC1vcHRpb24+XHJcbiAgICA8L21hdC1zZWxlY3Q+XHJcbiAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAgW3ZhbHVlXT1cImNvbm5lY3RvckluZm8uY29udHJvbHNbJ2Nhc2UnXS52YWx1ZVwiICNhY2FzZT1cIm1hdEJ1dHRvblRvZ2dsZUdyb3VwXCIgKGNoYW5nZSk9XCJjb25uZWN0b3JDYXNlQ2hhbmdlKGFjYXNlLnZhbHVlKVwiPlxyXG4gICAgPG1hdC1idXR0b24tdG9nZ2xlIHZhbHVlPVwidHJ1ZVwiPnt7J1RydWUnIHwgdHJhbnNsYXRlfX08L21hdC1idXR0b24tdG9nZ2xlPlxyXG4gICAgPG1hdC1idXR0b24tdG9nZ2xlIHZhbHVlPVwiZmFsc2VcIj57eydGYWxzZScgfCB0cmFuc2xhdGV9fTwvbWF0LWJ1dHRvbi10b2dnbGU+XHJcbiAgICA8bWF0LWJ1dHRvbi10b2dnbGU+e3snQ2FzZScgfCB0cmFuc2xhdGV9fTwvbWF0LWJ1dHRvbi10b2dnbGU+XHJcbiAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cclxuICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8aW5wdXQgbWF0SW5wdXQgW3BsYWNlaG9sZGVyXT1cIidDYXNlJyB8IHRyYW5zbGF0ZVwiIGZvcm1Db250cm9sTmFtZT1cImNhc2VcIiAvPlxyXG4gIDwvbWF0LWZvcm0tZmllbGQ+XHJcbjwvZm9ybT5cclxuPCEtLTxtYXQtZXhwYW5zaW9uLXBhbmVsIGZ4TGF5b3V0PVwiY29sdW1uXCIgY2xhc3M9XCJtYXQtZWxldmF0aW9uLXowXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInRGVzaWduJyB8IHRyYW5zbGF0ZVwiIHN0eWxlPVwiYmFja2dyb3VuZDogbm9uZVwiPlxyXG4gIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgIDxtYXQtcGFuZWwtdGl0bGU+e3snRGVzaWduJ3x0cmFuc2xhdGV9fTwvbWF0LXBhbmVsLXRpdGxlPlxyXG4gIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbm5lY3RvcnMubGVuZ3RoXCI+XHJcbiAgICA8IG1hdC5nZXQtY29sb3ItZnJvbS1wYWxldHRlLXBpY2tlciAodmFsdWVDaGFuZ2VzKT0nc3Ryb2tlQ2hhbmdlKCRldmVudCknIFtsYWJlbF09XCInU3Ryb2tlJ3x0cmFuc2xhdGVcIj48LyBtYXQuZ2V0LWNvbG9yLWZyb20tcGFsZXR0ZS1waWNrZXI+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGVzLmxlbmd0aFwiPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm5vZGVzWzBdLmFubm90YXRpb25zLmxlbmd0aFwiPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJudW1iZXJcIiBbcGxhY2Vob2xkZXJdPVwiJ0ZvbnRTaXplJ3x0cmFuc2xhdGVcIiAoY2hhbmdlKT1cInNpemVDaGFuZ2UoJGV2ZW50LnRhcmdldC52YWx1ZSlcIiBbdmFsdWVdPVwiZm9udFNpemVcIiAvPlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8IG1hdC5nZXQtY29sb3ItZnJvbS1wYWxldHRlLXBpY2tlciAodmFsdWVDaGFuZ2VzKT0nY29sb3JDaGFuZ2UoJGV2ZW50KScgW2xhYmVsXT1cIidDb2xvcid8dHJhbnNsYXRlXCI+PC8gbWF0LmdldC1jb2xvci1mcm9tLXBhbGV0dGUtcGlja2VyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8IG1hdC5nZXQtY29sb3ItZnJvbS1wYWxldHRlLXBpY2tlciAodmFsdWVDaGFuZ2VzKT0nYmdDaGFuZ2UoJGV2ZW50KScgW2xhYmVsXT1cIidCYWNrZ3JvdW5kJ3x0cmFuc2xhdGVcIj48LyBtYXQuZ2V0LWNvbG9yLWZyb20tcGFsZXR0ZS1waWNrZXI+XHJcbiAgICA8IG1hdC5nZXQtY29sb3ItZnJvbS1wYWxldHRlLXBpY2tlciAodmFsdWVDaGFuZ2VzKT0nc3Ryb2tlQ2hhbmdlKCRldmVudCknIFtsYWJlbF09XCInU3Ryb2tlJ3x0cmFuc2xhdGVcIj48LyBtYXQuZ2V0LWNvbG9yLWZyb20tcGFsZXR0ZS1waWNrZXI+XHJcbiAgPC9uZy1jb250YWluZXI+XHJcbjwvbWF0LWV4cGFuc2lvbi1wYW5lbD4tLT5cclxuIl19
|
160
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2Zvcm0vd29ya2Zsb3cvbm9kZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJpZXMvY29yZS9zcmMvbGliL2FkbWluL2Zvcm0vd29ya2Zsb3cvbm9kZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQTRCLFlBQVksRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBZSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR2pLLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBTTFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFckMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRXhFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7O0FBTWxELE1BQU0sT0FDRSxxQkFBcUI7SUFlM0IsWUFDVSxRQUF3QixFQUN4QixnQkFBZ0QsRUFDaEQsR0FBNkIsRUFDN0IsU0FBbUIsRUFDbkIsVUFBNEIsRUFDNUIsR0FBZ0IsRUFDaEIsS0FBcUM7UUFOckMsYUFBUSxHQUFSLFFBQVEsQ0FBZ0I7UUFDeEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFnQztRQUNoRCxRQUFHLEdBQUgsR0FBRyxDQUEwQjtRQUM3QixjQUFTLEdBQVQsU0FBUyxDQUFVO1FBQ25CLGVBQVUsR0FBVixVQUFVLENBQWtCO1FBQzVCLFFBQUcsR0FBSCxHQUFHLENBQWE7UUFDaEIsVUFBSyxHQUFMLEtBQUssQ0FBZ0M7UUFyQjVCLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBTXRDLGNBQVMs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TDVCLFNBQVM7OytSQU1XLE1BQU07c0JBQXhCLE1BQU07Z0JBQzJELGlCQUFpQjtzQkFBbEYsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFDbEIsYUFBYTtzQkFBMUQsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBFdmVudEVtaXR0ZXIsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiwgVGVtcGxhdGVSZWYsIENvbXBvbmVudCwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE1hdEJ1dHRvblRvZ2dsZUNoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbi10b2dnbGUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ29ubmVjdG9yTW9kZWwsIERpYWdyYW0sIE5vZGVNb2RlbCB9IGZyb20gJ0BzeW5jZnVzaW9uL2VqMi1hbmd1bGFyLWRpYWdyYW1zJztcclxuaW1wb3J0IHsgQml6RG9jQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9jb21wb25lbnQtZmFjdG9yeS1yZXNvbHZlcic7XHJcbmltcG9ydCB7IEFjdGlvbiwgRmxvd05vZGUgfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscyc7XHJcbmltcG9ydCB7IFNlc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXNzaW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQYW5lUmVmIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zbG90cy9wYW5lLXJlZic7XHJcbmltcG9ydCB7IE5vZGVSZWYgfSBmcm9tICcuL25vZGUtcmVmJztcclxuaW1wb3J0IHsgQXJndW1lbnRzQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY29yZS9iYXNlJztcclxuaW1wb3J0IHsgTGF5b3V0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY29yZS9sYXlvdXQvbGF5b3V0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3RyYW5zbGF0ZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgY2xlYW51cCB9IGZyb20gJy4uLy4uLy4uL2NvcmUvZnVuY3Rpb25zJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHRlbXBsYXRlVXJsOiAnLi9ub2RlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9ub2RlLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydFxyXG4gIGNsYXNzIFdvcmtmbG93Tm9kZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBAT3V0cHV0KCkgcmVhZG9ubHkgY2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBWaWV3Q2hpbGQoJ2FyZ3VtZW50cycsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pIGFyZ3VtZW50c3RlbXBsYXRlOiBWaWV3Q29udGFpbmVyUmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2Nvbm5lY3RvcmFyZ3MnLCB7IHN0YXRpYzogdHJ1ZSB9KSBjb25uZWN0b3JhcmdzOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIG5vZGVzOiBOb2RlTW9kZWxbXTtcclxuICBjb25uZWN0b3JzOiBDb25uZWN0b3JNb2RlbFtdO1xyXG4gIGRpYWdyYW06IERpYWdyYW07XHJcbiAgcmVhZG9ubHkgY29ubmVjdG9yID0gdGhpcy5fZmIuZ3JvdXAoe1xyXG4gICAgYWN0aW9uOiBudWxsLFxyXG4gICAgY2FzZTogbnVsbFxyXG4gIH0pO1xyXG4gIGFjdGlvbnM6IEFjdGlvbltdO1xyXG4gIHRvb2w/OiBGbG93Tm9kZTtcclxuICBub2RlOiBOb2RlTW9kZWw7XHJcbiAgcHJpdmF0ZSBfZWxlbWVudERlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfc2Vzc2lvbjogU2Vzc2lvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9mYWN0b3J5UmVzb2x2ZXI6IEJpekRvY0NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICAgIHByaXZhdGUgX2NmOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICBwcml2YXRlIF9pbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIF90cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9mYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIF9wYW5lOiBQYW5lUmVmPFdvcmtmbG93Tm9kZUNvbXBvbmVudD4pIHtcclxuICAgIHRoaXMuYWN0aW9ucyA9IF9zZXNzaW9uLnByb2ZpbGUuYWN0aW9ucztcclxuICB9XHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9wYW5lLmRhdGFDaGFuZ2Uuc3Vic2NyaWJlKGQgPT4ge1xyXG4gICAgICB0aGlzLm5vZGVzID0gZFsnbm9kZXMnXTtcclxuICAgICAgdGhpcy5kaWFncmFtID0gZFsnZGlhZ3JhbSddO1xyXG4gICAgICB0aGlzLmNvbm5lY3RvcnMgPSBkWydjb25uZWN0b3JzJ107XHJcbiAgICAgIHRoaXMudG9vbCA9IG51bGw7XHJcblxyXG4gICAgICB0aGlzLl9lbGVtZW50RGVzdHJveS5uZXh0KCk7XHJcbiAgICAgIHRoaXMuYXJndW1lbnRzdGVtcGxhdGUuY2xlYXIoKTtcclxuICAgICAgaWYgKHRoaXMuY29ubmVjdG9ycy5sZW5ndGgpIHtcclxuICAgICAgICBjb25zdCBjb25uZWN0b3IgPSB0aGlzLmNvbm5lY3RvcnNbMF07XHJcbiAgICAgICAgaWYgKGNvbm5lY3Rvci5hZGRJbmZvKSB7XHJcbiAgICAgICAgICBjb25zdCBhY3Rpb24gPSBjb25uZWN0b3IuYWRkSW5mb1snYWN0aW9uJ10sIGFjYXNlID0gY29ubmVjdG9yLmFkZEluZm9bJ2Nhc2UnXTtcclxuICAgICAgICAgIHRoaXMuY29ubmVjdG9yLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgICAgICBhY3Rpb246IHRoaXMuY29ubmVjdG9ycy5sZW5ndGggPT09IDEgfHwgdGhpcy5jb25uZWN0b3JzLmV2ZXJ5KGMgPT4gYy5hZGRJbmZvICYmIGMuYWRkSW5mb1snYWN0aW9uJ10gPT09IGFjdGlvbikgPyBhY3Rpb24gOiBudWxsLFxyXG4gICAgICAgICAgICBjYXNlOiB0aGlzLmNvbm5lY3RvcnMubGVuZ3RoID09PSAxIHx8IHRoaXMuY29ubmVjdG9ycy5ldmVyeShjID0+IGMuYWRkSW5mbyAmJiBjLmFkZEluZm9bJ2Nhc2UnXSA9PT0gYWNhc2UpID8gYWNhc2UgOiBudWxsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fcGFuZS50aXRsZSA9IHRoaXMuX3RyYW5zbGF0ZS5nZXQodGhpcy5jb25uZWN0b3JzLmxlbmd0aCA9PT0gMSA/ICdDb25uZWN0b3InIDogJ0Nvbm5lY3RvcnMnLCB0aGlzLmNvbm5lY3RvcnMubGVuZ3RoKTtcclxuICAgICAgICB0aGlzLl9wYW5lLmljb24gPSAnbGluayc7XHJcbiAgICAgICAgdGhpcy5jb25uZWN0b3IudmFsdWVDaGFuZ2VzLnBpcGUodGFrZVVudGlsKHRoaXMuX2VsZW1lbnREZXN0cm95KSkuc3Vic2NyaWJlKHYgPT4ge1xyXG4gICAgICAgICAgY29uc3QgY29udGVudCA9IHZbJ2Nhc2UnXSB8fCB2WydhY3Rpb24nXTtcclxuICAgICAgICAgIGlmICghY29ubmVjdG9yLmFkZEluZm8pXHJcbiAgICAgICAgICAgIGNvbm5lY3Rvci5hZGRJbmZvID0gdGhpcy5jb25uZWN0b3IuZ2V0UmF3VmFsdWUoKTtcclxuICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb25uZWN0b3IuYWRkSW5mbywgdGhpcy5jb25uZWN0b3IuZ2V0UmF3VmFsdWUoKSk7XHJcbiAgICAgICAgICBjbGVhbnVwKGNvbm5lY3Rvci5hZGRJbmZvKTtcclxuICAgICAgICAgIGlmIChjb25uZWN0b3IuYW5ub3RhdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGNvbm5lY3Rvci5hbm5vdGF0aW9uc1swXS5jb250ZW50ID0gY29udGVudDtcclxuICAgICAgICAgICAgdGhpcy5kaWFncmFtLmRhdGFCaW5kKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgIHRoaXMuZGlhZ3JhbS5hZGRDb25uZWN0b3JMYWJlbHMoY29ubmVjdG9yLCBbe1xyXG4gICAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5fc2Vzc2lvbi50aGVtZS5kYXJrID8gJ3doaXRlJyA6ICdibGFjaycsXHJcbiAgICAgICAgICAgICAgICBmaWxsOiAndHJhbnNwYXJlbnQnLFxyXG4gICAgICAgICAgICAgICAgb3BhY2l0eTogLjgsXHJcbiAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBjb250ZW50XHJcbiAgICAgICAgICAgIH1dKTtcclxuICAgICAgICAgIHRoaXMuY2hhbmdlLmVtaXQoKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmFyZ3VtZW50c3RlbXBsYXRlLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLmNvbm5lY3RvcmFyZ3MpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLm5vZGUgPSB0aGlzLm5vZGVzWzBdLFxyXG4gICAgICAgICAgYWRkSW5mbyA9IG5vZGUuYWRkSW5mbyBhcyBhbnk7XHJcbiAgICAgICAgaWYgKGFkZEluZm8gJiYgYWRkSW5mby5ub2RlVHlwZSkge1xyXG4gICAgICAgICAgY29uc3Qgbm9kZVR5cGUgPSBhZGRJbmZvLm5vZGVUeXBlO1xyXG4gICAgICAgICAgY29uc3QgdG9vbCA9IHRoaXMudG9vbCA9IHRoaXMuX3Nlc3Npb24ucHJvZmlsZS5ub2Rlcy5maW5kKG4gPT4gbi5uYW1lID09PSBub2RlVHlwZSk7XHJcbiAgICAgICAgICB0aGlzLl9wYW5lLnRpdGxlID0gdG9vbC50aXRsZTtcclxuICAgICAgICAgIGNvbnN0IGFubm90YXRpb25BcmcgPSB0b29sLmFyZ3VtZW50cy5maW5kKGEgPT4gYS5kaWFncmFtKTtcclxuXHJcbiAgICAgICAgICBmdW5jdGlvbiBjaGFuZ2UobSkge1xyXG4gICAgICAgICAgICBpZiAoYW5ub3RhdGlvbkFyZyAmJiBtW2Fubm90YXRpb25BcmcubmFtZV0gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICBpZiAobm9kZS5hbm5vdGF0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIG5vZGUuYW5ub3RhdGlvbnNbMF0uY29udGVudCA9IG1bYW5ub3RhdGlvbkFyZy5uYW1lXSB8fCBudWxsO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaWFncmFtLmRhdGFCaW5kKCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlhZ3JhbS5hZGROb2RlTGFiZWxzKG5vZGUsIFt7XHJcbiAgICAgICAgICAgICAgICAgIHN0eWxlOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6IHRoaXMuX3Nlc3Npb24udGhlbWUuZGFyayA/ICd3aGl0ZScgOiAnYmxhY2snLFxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGw6ICd0cmFuc3BhcmVudCcsXHJcbiAgICAgICAgICAgICAgICAgICAgb3BhY2l0eTogLjgsXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IG1bYW5ub3RhdGlvbkFyZy5uYW1lXSB8fCBudWxsXHJcbiAgICAgICAgICAgICAgICB9XSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihhZGRJbmZvLCBtKTtcclxuICAgICAgICAgICAgY2xlYW51cChhZGRJbmZvKTtcclxuICAgICAgICAgICAgdGhpcy5jaGFuZ2UuZW1pdCgpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICh0b29sLnRlbXBsYXRlKSB7XHJcbiAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IHRoaXMuX2NyZWF0ZVRvb2xUZW1wbGF0ZSh0b29sLCBub2RlKTtcclxuXHJcbiAgICAgICAgICAgIGluc3RhbmNlLmZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZShjaGFuZ2UuYmluZCh0aGlzKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmICh0b29sLmFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgbGV0IGluc3RhbmNlID0gdGhpcy5fY3JlYXRlTGF5b3V0QXJndW1lbnRzKHRvb2wsIG5vZGUpO1xyXG5cclxuICAgICAgICAgICAgaW5zdGFuY2UubW9kZWxDaGFuZ2UucGlwZSh0YWtlVW50aWwodGhpcy5fZWxlbWVudERlc3Ryb3kpKS5zdWJzY3JpYmUoY2hhbmdlLmJpbmQodGhpcykpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2NyZWF0ZUxheW91dEFyZ3VtZW50cyh0b29sOiBGbG93Tm9kZSwgbm9kZTogTm9kZU1vZGVsKSB7XHJcbiAgICBjb25zdCBjb21wb25lbnRGYWN0b3J5ID0gdGhpcy5fY2YucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoTGF5b3V0Q29tcG9uZW50KTtcclxuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuYXJndW1lbnRzdGVtcGxhdGUuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudEZhY3RvcnksIDAsIHRoaXMuX2luamVjdG9yKTtcclxuICAgIGNvbnN0IGluc3RhbmNlID0gY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIExheW91dENvbXBvbmVudDtcclxuICAgIGluc3RhbmNlLmZpZWxkcyA9IHRvb2wuYXJndW1lbnRzO1xyXG4gICAgaW5zdGFuY2UubW9kZWwgPSBub2RlLmFkZEluZm87XHJcbiAgICBpbnN0YW5jZS5jcmVhdGUoKTtcclxuICAgIHJldHVybiBpbnN0YW5jZTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfY3JlYXRlVG9vbFRlbXBsYXRlKHRvb2w6IEZsb3dOb2RlLCBub2RlOiBOb2RlTW9kZWwpIHtcclxuICAgIGNvbnN0IGNvbXBvbmVudEZhY3RvcnkgPSB0aGlzLl9mYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZSh0aGlzLnRvb2wudGVtcGxhdGUpO1xyXG4gICAgY29uc3Qgbm9kZVJlZiA9IG5ldyBOb2RlUmVmKHRvb2wpO1xyXG4gICAgY29uc3QgaW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoW3sgcHJvdmlkZTogTm9kZVJlZiwgdXNlVmFsdWU6IG5vZGVSZWYgfV0sIHRoaXMuX2luamVjdG9yKTtcclxuICAgIGNvbnN0IGNvbXBvbmVudFJlZiA9IHRoaXMuYXJndW1lbnRzdGVtcGxhdGUuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudEZhY3RvcnksIDAsIGluamVjdG9yKTtcclxuICAgIGNvbnN0IGluc3RhbmNlID0gY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIEFyZ3VtZW50c0NvbXBvbmVudDxhbnk+O1xyXG4gICAgaW5zdGFuY2UuZm9ybS5wYXRjaFZhbHVlKG5vZGUuYWRkSW5mbywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgcmV0dXJuIGluc3RhbmNlO1xyXG4gIH1cclxuICBjb25uZWN0b3JDYXNlQ2hhbmdlKGV2dD86IE1hdEJ1dHRvblRvZ2dsZUNoYW5nZSkge1xyXG4gICAgdGhpcy5jb25uZWN0b3IuY29udHJvbHNbJ2Nhc2UnXS5zZXRWYWx1ZShldnQudmFsdWUpO1xyXG4gICAgdGhpcy5jaGFuZ2UuZW1pdCgpO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2VsZW1lbnREZXN0cm95Lm5leHQoKTtcclxuICAgIHRoaXMuX2VsZW1lbnREZXN0cm95LmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxuZy1jb250YWluZXIgI2FyZ3VtZW50cz5cclxuPC9uZy1jb250YWluZXI+XHJcbjxuZy10ZW1wbGF0ZSAjY29ubmVjdG9yYXJncz5cclxuICA8Zm9ybSBbZm9ybUdyb3VwXT1cImNvbm5lY3RvclwiIGZ4TGF5b3V0PVwiY29sdW1uXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtc2VsZWN0IFtwbGFjZWhvbGRlcl09XCInQWN0aW9uJyB8IHRyYW5zbGF0ZVwiIGZvcm1Db250cm9sTmFtZT1cImFjdGlvblwiPlxyXG4gICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBhY3Rpb24gb2YgYWN0aW9uc1wiIFt2YWx1ZV09XCJhY3Rpb24ubmFtZVwiPnt7YWN0aW9uLnRpdGxlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgPG1hdC1vcHRpb24+e3snTm9uZScgfCB0cmFuc2xhdGV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDxtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cCBbdmFsdWVdPVwiY29ubmVjdG9yLmNvbnRyb2xzWydjYXNlJ10udmFsdWVcIiAjYWNhc2U9XCJtYXRCdXR0b25Ub2dnbGVHcm91cFwiIChjaGFuZ2UpPVwiY29ubmVjdG9yQ2FzZUNoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSB2YWx1ZT1cInRydWVcIj57eydUcnVlJyB8IHRyYW5zbGF0ZX19PC9tYXQtYnV0dG9uLXRvZ2dsZT5cclxuICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIHZhbHVlPVwiZmFsc2VcIj57eydGYWxzZScgfCB0cmFuc2xhdGV9fTwvbWF0LWJ1dHRvbi10b2dnbGU+XHJcbiAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZT57eydDYXNlJyB8IHRyYW5zbGF0ZX19PC9tYXQtYnV0dG9uLXRvZ2dsZT5cclxuICAgIDwvbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQgW3N0eWxlLmRpc3BsYXldPVwiY29ubmVjdG9yLmNvbnRyb2xzWydjYXNlJ10udmFsdWU9PT0ndHJ1ZSd8fGNvbm5lY3Rvci5jb250cm9sc1snY2FzZSddLnZhbHVlPT09J2ZhbHNlJz8nbm9uZSc6JydcIj5cclxuICAgICAgPGlucHV0IG1hdElucHV0IFtwbGFjZWhvbGRlcl09XCInQ2FzZScgfCB0cmFuc2xhdGVcIiBmb3JtQ29udHJvbE5hbWU9XCJjYXNlXCIgLz5cclxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgPC9mb3JtPlxyXG48L25nLXRlbXBsYXRlPlxyXG4iXX0=
|