@myrmidon/cadmus-refs-asserted-ids 5.1.7 → 6.0.1
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/fesm2022/myrmidon-cadmus-refs-asserted-ids.mjs +38 -38
- package/fesm2022/myrmidon-cadmus-refs-asserted-ids.mjs.map +1 -1
- package/package.json +5 -7
- package/esm2022/lib/asserted-composite-id/asserted-composite-id.component.mjs +0 -195
- package/esm2022/lib/asserted-composite-ids/asserted-composite-ids.component.mjs +0 -173
- package/esm2022/lib/asserted-id/asserted-id.component.mjs +0 -151
- package/esm2022/lib/asserted-ids/asserted-ids.component.mjs +0 -161
- package/esm2022/lib/pin-target-lookup/pin-target-lookup.component.mjs +0 -480
- package/esm2022/lib/scoped-pin-lookup/scoped-pin-lookup.component.mjs +0 -144
- package/esm2022/lib/services/item-ref-lookup.service.mjs +0 -28
- package/esm2022/lib/services/pin-ref-lookup.service.mjs +0 -84
- package/esm2022/myrmidon-cadmus-refs-asserted-ids.mjs +0 -5
- package/esm2022/public-api.mjs +0 -12
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
import { Component, EventEmitter, Inject, Input, Output, } from '@angular/core';
|
|
2
|
-
import { FormsModule, ReactiveFormsModule, Validators, } from '@angular/forms';
|
|
3
|
-
import { debounceTime } from 'rxjs/operators';
|
|
4
|
-
import { MatButtonModule } from '@angular/material/button';
|
|
5
|
-
import { MatExpansionModule } from '@angular/material/expansion';
|
|
6
|
-
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
7
|
-
import { MatInputModule } from '@angular/material/input';
|
|
8
|
-
import { MatIconModule } from '@angular/material/icon';
|
|
9
|
-
import { MatSelectModule } from '@angular/material/select';
|
|
10
|
-
import { AssertionComponent } from '@myrmidon/cadmus-refs-assertion';
|
|
11
|
-
import { ScopedPinLookupComponent } from '../scoped-pin-lookup/scoped-pin-lookup.component';
|
|
12
|
-
import * as i0 from "@angular/core";
|
|
13
|
-
import * as i1 from "@angular/forms";
|
|
14
|
-
import * as i2 from "../services/pin-ref-lookup.service";
|
|
15
|
-
import * as i3 from "@angular/material/button";
|
|
16
|
-
import * as i4 from "@angular/material/expansion";
|
|
17
|
-
import * as i5 from "@angular/material/form-field";
|
|
18
|
-
import * as i6 from "@angular/material/icon";
|
|
19
|
-
import * as i7 from "@angular/material/input";
|
|
20
|
-
import * as i8 from "@angular/material/select";
|
|
21
|
-
import * as i9 from "@angular/material/core";
|
|
22
|
-
export class AssertedIdComponent {
|
|
23
|
-
get id() {
|
|
24
|
-
return this._id;
|
|
25
|
-
}
|
|
26
|
-
set id(value) {
|
|
27
|
-
if (this._id !== value) {
|
|
28
|
-
this._id = value || undefined;
|
|
29
|
-
this.updateForm(this._id);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
constructor(formBuilder, lookupService, lookupDefs) {
|
|
33
|
-
this.lookupService = lookupService;
|
|
34
|
-
this.lookupDefs = lookupDefs;
|
|
35
|
-
this.tag = formBuilder.control(null, Validators.maxLength(50));
|
|
36
|
-
this.value = formBuilder.control(null, [
|
|
37
|
-
Validators.required,
|
|
38
|
-
Validators.maxLength(500),
|
|
39
|
-
]);
|
|
40
|
-
this.label = formBuilder.control(null, Validators.maxLength(500));
|
|
41
|
-
this.scope = formBuilder.control(null, Validators.maxLength(500));
|
|
42
|
-
this.assertion = formBuilder.control(null);
|
|
43
|
-
this.form = formBuilder.group({
|
|
44
|
-
tag: this.tag,
|
|
45
|
-
value: this.value,
|
|
46
|
-
label: this.label,
|
|
47
|
-
scope: this.scope,
|
|
48
|
-
assertion: this.assertion,
|
|
49
|
-
});
|
|
50
|
-
this.lookupExpanded = false;
|
|
51
|
-
// events
|
|
52
|
-
this.idChange = new EventEmitter();
|
|
53
|
-
this.editorClose = new EventEmitter();
|
|
54
|
-
}
|
|
55
|
-
ngOnInit() {
|
|
56
|
-
this.form.valueChanges.pipe(debounceTime(300)).subscribe((_) => {
|
|
57
|
-
if (!this._updatingForm) {
|
|
58
|
-
this.emitIdChange();
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
onAssertionChange(assertion) {
|
|
63
|
-
this.assertion.setValue(assertion || null);
|
|
64
|
-
}
|
|
65
|
-
onIdPick(id) {
|
|
66
|
-
this.value.setValue(id);
|
|
67
|
-
this.value.markAsDirty();
|
|
68
|
-
this.value.updateValueAndValidity();
|
|
69
|
-
this.lookupExpanded = false;
|
|
70
|
-
}
|
|
71
|
-
updateForm(value) {
|
|
72
|
-
this._updatingForm = true;
|
|
73
|
-
if (!value) {
|
|
74
|
-
this.form.reset();
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
this.tag.setValue(value.tag || null);
|
|
78
|
-
this.value.setValue(value.value);
|
|
79
|
-
this.label.setValue(value.label || null);
|
|
80
|
-
this.scope.setValue(value.scope);
|
|
81
|
-
this.assertion.setValue(value.assertion || null);
|
|
82
|
-
this.form.markAsPristine();
|
|
83
|
-
}
|
|
84
|
-
this._updatingForm = false;
|
|
85
|
-
}
|
|
86
|
-
getId() {
|
|
87
|
-
return {
|
|
88
|
-
tag: this.tag.value?.trim(),
|
|
89
|
-
value: this.value.value?.trim() || '',
|
|
90
|
-
label: this.label.value?.trim() || undefined,
|
|
91
|
-
scope: this.scope.value?.trim() || '',
|
|
92
|
-
assertion: this.assertion.value || undefined,
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
emitIdChange() {
|
|
96
|
-
if (!this.hasSubmit) {
|
|
97
|
-
this._id = this.getId();
|
|
98
|
-
this.idChange.emit(this._id);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
cancel() {
|
|
102
|
-
this.editorClose.emit();
|
|
103
|
-
}
|
|
104
|
-
save() {
|
|
105
|
-
if (this.form.valid) {
|
|
106
|
-
this._id = this.getId();
|
|
107
|
-
this.idChange.emit(this._id);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: AssertedIdComponent, deps: [{ token: i1.FormBuilder }, { token: i2.PinRefLookupService }, { token: 'indexLookupDefinitions' }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
111
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.2", type: AssertedIdComponent, isStandalone: true, selector: "cadmus-refs-asserted-id", inputs: { idScopeEntries: "idScopeEntries", idTagEntries: "idTagEntries", assTagEntries: "assTagEntries", refTypeEntries: "refTypeEntries", refTagEntries: "refTagEntries", id: "id", noEidLookup: "noEidLookup", hasSubmit: "hasSubmit" }, outputs: { idChange: "idChange", editorClose: "editorClose" }, ngImport: i0, template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <div>\r\n <div class=\"form-row\">\r\n <!-- tag (bound) -->\r\n @if (idTagEntries?.length) {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <mat-select [formControl]=\"tag\">\r\n @for (e of idTagEntries; track e) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- tag (free) -->\r\n @if (!idTagEntries?.length) {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <input matInput [formControl]=\"tag\" />\r\n @if ($any(tag.errors)?.maxLength && (tag.dirty || tag.touched)) {\r\n <mat-error>tag too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n\r\n <!-- scope (bound) -->\r\n @if (idScopeEntries?.length) {\r\n <mat-form-field>\r\n <mat-label>scope</mat-label>\r\n <mat-select [formControl]=\"scope\">\r\n @for (e of idScopeEntries; track e) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- scope (free) -->\r\n @if (!idScopeEntries?.length) {\r\n <mat-form-field>\r\n <mat-label>scope</mat-label>\r\n <input matInput [formControl]=\"scope\" />\r\n @if ($any(scope.errors)?.maxLength && (scope.dirty || scope.touched)) {\r\n <mat-error>scope too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n\r\n <!-- value -->\r\n <mat-form-field>\r\n <mat-label>value</mat-label>\r\n <input matInput [formControl]=\"value\" />\r\n @if ($any(value.errors)?.required && (value.dirty || value.touched)) {\r\n <mat-error>value required</mat-error>\r\n } @if ($any(value.errors)?.maxLength && (value.dirty || value.touched))\r\n {\r\n <mat-error>value too long</mat-error>\r\n }\r\n </mat-form-field>\r\n\r\n <!-- label -->\r\n <mat-form-field>\r\n <mat-label>label</mat-label>\r\n <input matInput [formControl]=\"label\" />\r\n @if ($any(label.errors)?.maxLength && (label.dirty || label.touched)) {\r\n <mat-error>label too long</mat-error>\r\n }\r\n </mat-form-field>\r\n\r\n <!-- lookup -->\r\n @if (!noEidLookup) {\r\n <div>\r\n <mat-expansion-panel [(expanded)]=\"lookupExpanded\">\r\n <mat-expansion-panel-header>lookup</mat-expansion-panel-header>\r\n <cadmus-scoped-pin-lookup\r\n (idPick)=\"onIdPick($event)\"\r\n ></cadmus-scoped-pin-lookup>\r\n </mat-expansion-panel>\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- assertion -->\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>assertion</mat-expansion-panel-header>\r\n <cadmus-refs-assertion\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [assertion]=\"assertion.value\"\r\n (assertionChange)=\"onAssertionChange($event)\"\r\n >\r\n </cadmus-refs-assertion>\r\n </mat-expansion-panel>\r\n </div>\r\n\r\n <!-- buttons -->\r\n @if (hasSubmit) {\r\n <div>\r\n <button mat-icon-button color=\"warn\" type=\"button\" (click)=\"cancel()\">\r\n <mat-icon class=\"mat-warn\">close</mat-icon>\r\n </button>\r\n <button\r\n mat-icon-button\r\n color=\"primary\"\r\n type=\"submit\"\r\n [disabled]=\"form.invalid\"\r\n >\r\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n</form>\r\n", styles: [".form-row{display:flex;gap:8px;align-items:flex-start;flex-wrap:wrap}.form-row *{flex:0 0 auto}.pin-info{font-size:90%;color:silver}fieldset{border:1px solid silver;border-radius:6px;padding:6px}@media only screen and (max-width: 959px){div#container{grid-template-rows:1fr auto;grid-template-columns:1fr;grid-template-areas:\"editor\" \"lookup\"}}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i4.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i4.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7.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"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i8.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i9.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: AssertionComponent, selector: "cadmus-refs-assertion", inputs: ["assTagEntries", "refTypeEntries", "refTagEntries", "assertion"], outputs: ["assertionChange"] }, { kind: "component", type: ScopedPinLookupComponent, selector: "cadmus-scoped-pin-lookup", outputs: ["idPick"] }] }); }
|
|
112
|
-
}
|
|
113
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: AssertedIdComponent, decorators: [{
|
|
114
|
-
type: Component,
|
|
115
|
-
args: [{ standalone: true, selector: 'cadmus-refs-asserted-id', imports: [
|
|
116
|
-
FormsModule,
|
|
117
|
-
ReactiveFormsModule,
|
|
118
|
-
MatButtonModule,
|
|
119
|
-
MatExpansionModule,
|
|
120
|
-
MatFormFieldModule,
|
|
121
|
-
MatIconModule,
|
|
122
|
-
MatInputModule,
|
|
123
|
-
MatSelectModule,
|
|
124
|
-
AssertionComponent,
|
|
125
|
-
ScopedPinLookupComponent
|
|
126
|
-
], template: "<form [formGroup]=\"form\" (submit)=\"save()\">\r\n <div>\r\n <div class=\"form-row\">\r\n <!-- tag (bound) -->\r\n @if (idTagEntries?.length) {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <mat-select [formControl]=\"tag\">\r\n @for (e of idTagEntries; track e) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- tag (free) -->\r\n @if (!idTagEntries?.length) {\r\n <mat-form-field>\r\n <mat-label>tag</mat-label>\r\n <input matInput [formControl]=\"tag\" />\r\n @if ($any(tag.errors)?.maxLength && (tag.dirty || tag.touched)) {\r\n <mat-error>tag too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n\r\n <!-- scope (bound) -->\r\n @if (idScopeEntries?.length) {\r\n <mat-form-field>\r\n <mat-label>scope</mat-label>\r\n <mat-select [formControl]=\"scope\">\r\n @for (e of idScopeEntries; track e) {\r\n <mat-option [value]=\"e.id\">{{ e.value }}</mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <!-- scope (free) -->\r\n @if (!idScopeEntries?.length) {\r\n <mat-form-field>\r\n <mat-label>scope</mat-label>\r\n <input matInput [formControl]=\"scope\" />\r\n @if ($any(scope.errors)?.maxLength && (scope.dirty || scope.touched)) {\r\n <mat-error>scope too long</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n\r\n <!-- value -->\r\n <mat-form-field>\r\n <mat-label>value</mat-label>\r\n <input matInput [formControl]=\"value\" />\r\n @if ($any(value.errors)?.required && (value.dirty || value.touched)) {\r\n <mat-error>value required</mat-error>\r\n } @if ($any(value.errors)?.maxLength && (value.dirty || value.touched))\r\n {\r\n <mat-error>value too long</mat-error>\r\n }\r\n </mat-form-field>\r\n\r\n <!-- label -->\r\n <mat-form-field>\r\n <mat-label>label</mat-label>\r\n <input matInput [formControl]=\"label\" />\r\n @if ($any(label.errors)?.maxLength && (label.dirty || label.touched)) {\r\n <mat-error>label too long</mat-error>\r\n }\r\n </mat-form-field>\r\n\r\n <!-- lookup -->\r\n @if (!noEidLookup) {\r\n <div>\r\n <mat-expansion-panel [(expanded)]=\"lookupExpanded\">\r\n <mat-expansion-panel-header>lookup</mat-expansion-panel-header>\r\n <cadmus-scoped-pin-lookup\r\n (idPick)=\"onIdPick($event)\"\r\n ></cadmus-scoped-pin-lookup>\r\n </mat-expansion-panel>\r\n </div>\r\n }\r\n </div>\r\n\r\n <!-- assertion -->\r\n <mat-expansion-panel>\r\n <mat-expansion-panel-header>assertion</mat-expansion-panel-header>\r\n <cadmus-refs-assertion\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [assertion]=\"assertion.value\"\r\n (assertionChange)=\"onAssertionChange($event)\"\r\n >\r\n </cadmus-refs-assertion>\r\n </mat-expansion-panel>\r\n </div>\r\n\r\n <!-- buttons -->\r\n @if (hasSubmit) {\r\n <div>\r\n <button mat-icon-button color=\"warn\" type=\"button\" (click)=\"cancel()\">\r\n <mat-icon class=\"mat-warn\">close</mat-icon>\r\n </button>\r\n <button\r\n mat-icon-button\r\n color=\"primary\"\r\n type=\"submit\"\r\n [disabled]=\"form.invalid\"\r\n >\r\n <mat-icon class=\"mat-primary\">check_circle</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n</form>\r\n", styles: [".form-row{display:flex;gap:8px;align-items:flex-start;flex-wrap:wrap}.form-row *{flex:0 0 auto}.pin-info{font-size:90%;color:silver}fieldset{border:1px solid silver;border-radius:6px;padding:6px}@media only screen and (max-width: 959px){div#container{grid-template-rows:1fr auto;grid-template-columns:1fr;grid-template-areas:\"editor\" \"lookup\"}}\n"] }]
|
|
127
|
-
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.PinRefLookupService }, { type: undefined, decorators: [{
|
|
128
|
-
type: Inject,
|
|
129
|
-
args: ['indexLookupDefinitions']
|
|
130
|
-
}] }], propDecorators: { idScopeEntries: [{
|
|
131
|
-
type: Input
|
|
132
|
-
}], idTagEntries: [{
|
|
133
|
-
type: Input
|
|
134
|
-
}], assTagEntries: [{
|
|
135
|
-
type: Input
|
|
136
|
-
}], refTypeEntries: [{
|
|
137
|
-
type: Input
|
|
138
|
-
}], refTagEntries: [{
|
|
139
|
-
type: Input
|
|
140
|
-
}], id: [{
|
|
141
|
-
type: Input
|
|
142
|
-
}], noEidLookup: [{
|
|
143
|
-
type: Input
|
|
144
|
-
}], hasSubmit: [{
|
|
145
|
-
type: Input
|
|
146
|
-
}], idChange: [{
|
|
147
|
-
type: Output
|
|
148
|
-
}], editorClose: [{
|
|
149
|
-
type: Output
|
|
150
|
-
}] } });
|
|
151
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0ZWQtaWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vY2FkbXVzLXJlZnMtYXNzZXJ0ZWQtaWRzL3NyYy9saWIvYXNzZXJ0ZWQtaWQvYXNzZXJ0ZWQtaWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vY2FkbXVzLXJlZnMtYXNzZXJ0ZWQtaWRzL3NyYy9saWIvYXNzZXJ0ZWQtaWQvYXNzZXJ0ZWQtaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUlMLFdBQVcsRUFDWCxtQkFBbUIsRUFDbkIsVUFBVSxHQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUczRCxPQUFPLEVBQWEsa0JBQWtCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUdoRixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQzs7Ozs7Ozs7Ozs7QUE0QjVGLE1BQU0sT0FBTyxtQkFBbUI7SUFpQzlCLElB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Z0JBZUMsV0FBVztzQkFEakIsS0FBSztnQkFJQyxTQUFTO3NCQURmLEtBQUs7Z0JBSUMsUUFBUTtzQkFEZCxNQUFNO2dCQUlBLFdBQVc7c0JBRGpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJcclxuaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEluamVjdCxcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEZvcm1CdWlsZGVyLFxyXG4gIEZvcm1Db250cm9sLFxyXG4gIEZvcm1Hcm91cCxcclxuICBGb3Jtc01vZHVsZSxcclxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gIFZhbGlkYXRvcnMsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRFeHBhbnNpb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9leHBhbnNpb24nO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcclxuXHJcbmltcG9ydCB7IEluZGV4TG9va3VwRGVmaW5pdGlvbnMsIFRoZXNhdXJ1c0VudHJ5IH0gZnJvbSAnQG15cm1pZG9uL2NhZG11cy1jb3JlJztcclxuaW1wb3J0IHsgQXNzZXJ0aW9uLCBBc3NlcnRpb25Db21wb25lbnQgfSBmcm9tICdAbXlybWlkb24vY2FkbXVzLXJlZnMtYXNzZXJ0aW9uJztcclxuXHJcbmltcG9ydCB7IFBpblJlZkxvb2t1cFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9waW4tcmVmLWxvb2t1cC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2NvcGVkUGluTG9va3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vc2NvcGVkLXBpbi1sb29rdXAvc2NvcGVkLXBpbi1sb29rdXAuY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXNzZXJ0ZWRJZCB7XHJcbiAgdGFnPzogc3RyaW5nO1xyXG4gIHZhbHVlOiBzdHJpbmc7XHJcbiAgbGFiZWw/OiBzdHJpbmc7XHJcbiAgc2NvcGU6IHN0cmluZztcclxuICBhc3NlcnRpb24/OiBBc3NlcnRpb247XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgc2VsZWN0b3I6ICdjYWRtdXMtcmVmcy1hc3NlcnRlZC1pZCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Fzc2VydGVkLWlkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9hc3NlcnRlZC1pZC5jb21wb25lbnQuY3NzJ10sXHJcbiAgaW1wb3J0czogW1xyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgTWF0RXhwYW5zaW9uTW9kdWxlLFxyXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdElucHV0TW9kdWxlLFxyXG4gICAgTWF0U2VsZWN0TW9kdWxlLFxyXG4gICAgQXNzZXJ0aW9uQ29tcG9uZW50LFxyXG4gICAgU2NvcGVkUGluTG9va3VwQ29tcG9uZW50XHJcbl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBc3NlcnRlZElkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBwcml2YXRlIF91cGRhdGluZ0Zvcm06IGJvb2xlYW4gfCB1bmRlZmluZWQ7XHJcbiAgcHJpdmF0ZSBfaWQ6IEFzc2VydGVkSWQgfCB1bmRlZmluZWQ7XHJcblxyXG4gIHB1YmxpYyB0YWc6IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+O1xyXG4gIHB1YmxpYyB2YWx1ZTogRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD47XHJcbiAgcHVibGljIGxhYmVsOiBGb3JtQ29udHJvbDxzdHJpbmcgfCBudWxsPjtcclxuICBwdWJsaWMgc2NvcGU6IEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+O1xyXG4gIHB1YmxpYyBhc3NlcnRpb246IEZvcm1Db250cm9sPEFzc2VydGlvbiB8IG51bGw+O1xyXG4gIHB1YmxpYyBmb3JtOiBGb3JtR3JvdXA7XHJcblxyXG4gIHB1YmxpYyBsb29rdXBFeHBhbmRlZDogYm9vbGVhbjtcclxuXHJcbiAgLy8gYXNzZXJ0ZWQtaWQtc2NvcGVzXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgaWRTY29wZUVudHJpZXM/OiBUaGVzYXVydXNFbnRyeVtdO1xyXG5cclxuICAvLyBhc3NlcnRlZC1pZC10YWdzXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgaWRUYWdFbnRyaWVzPzogVGhlc2F1cnVzRW50cnlbXTtcclxuXHJcbiAgLy8gYXNzZXJ0aW9uLXRhZ3NcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBhc3NUYWdFbnRyaWVzPzogVGhlc2F1cnVzRW50cnlbXTtcclxuXHJcbiAgLy8gZG9jLXJlZmVyZW5jZS10eXBlc1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHJlZlR5cGVFbnRyaWVzOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkO1xyXG5cclxuICAvLyBkb2MtcmVmZXJlbmNlLXRhZ3NcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyByZWZUYWdFbnRyaWVzOiBUaGVzYXVydXNFbnRyeVtdIHwgdW5kZWZpbmVkO1xyXG5cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgaWQoKTogQXNzZXJ0ZWRJZCB8IHVuZGVmaW5lZCB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lkO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IGlkKHZhbHVlOiBBc3NlcnRlZElkIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xyXG4gICAgaWYgKHRoaXMuX2lkICE9PSB2YWx1ZSkge1xyXG4gICAgICB0aGlzLl9pZCA9IHZhbHVlIHx8IHVuZGVmaW5lZDtcclxuICAgICAgdGhpcy51cGRhdGVGb3JtKHRoaXMuX2lkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRydWUgdG8gaGlkZSB0aGUgcGluLWJhc2VkIEVJRCBsb29rdXAgVUkuXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgbm9FaWRMb29rdXA6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGhhc1N1Ym1pdDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcclxuXHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIGlkQ2hhbmdlOiBFdmVudEVtaXR0ZXI8QXNzZXJ0ZWRJZD47XHJcblxyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBlZGl0b3JDbG9zZTogRXZlbnRFbWl0dGVyPGFueT47XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHVibGljIGxvb2t1cFNlcnZpY2U6IFBpblJlZkxvb2t1cFNlcnZpY2UsXHJcbiAgICBASW5qZWN0KCdpbmRleExvb2t1cERlZmluaXRpb25zJylcclxuICAgIHB1YmxpYyBsb29rdXBEZWZzOiBJbmRleExvb2t1cERlZmluaXRpb25zXHJcbiAgKSB7XHJcbiAgICB0aGlzLnRhZyA9IGZvcm1CdWlsZGVyLmNvbnRyb2wobnVsbCwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoNTApKTtcclxuICAgIHRoaXMudmFsdWUgPSBmb3JtQnVpbGRlci5jb250cm9sKG51bGwsIFtcclxuICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcclxuICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgoNTAwKSxcclxuICAgIF0pO1xyXG4gICAgdGhpcy5sYWJlbCA9IGZvcm1CdWlsZGVyLmNvbnRyb2wobnVsbCwgVmFsaWRhdG9ycy5tYXhMZW5ndGgoNTAwKSk7XHJcbiAgICB0aGlzLnNjb3BlID0gZm9ybUJ1aWxkZXIuY29udHJvbChudWxsLCBWYWxpZGF0b3JzLm1heExlbmd0aCg1MDApKTtcclxuICAgIHRoaXMuYXNzZXJ0aW9uID0gZm9ybUJ1aWxkZXIuY29udHJvbChudWxsKTtcclxuICAgIHRoaXMuZm9ybSA9IGZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgdGFnOiB0aGlzLnRhZyxcclxuICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXHJcbiAgICAgIGxhYmVsOiB0aGlzLmxhYmVsLFxyXG4gICAgICBzY29wZTogdGhpcy5zY29wZSxcclxuICAgICAgYXNzZXJ0aW9uOiB0aGlzLmFzc2VydGlvbixcclxuICAgIH0pO1xyXG4gICAgdGhpcy5sb29rdXBFeHBhbmRlZCA9IGZhbHNlO1xyXG4gICAgLy8gZXZlbnRzXHJcbiAgICB0aGlzLmlkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxBc3NlcnRlZElkPigpO1xyXG4gICAgdGhpcy5lZGl0b3JDbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDMwMCkpLnN1YnNjcmliZSgoXykgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuX3VwZGF0aW5nRm9ybSkge1xyXG4gICAgICAgIHRoaXMuZW1pdElkQ2hhbmdlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQXNzZXJ0aW9uQ2hhbmdlKGFzc2VydGlvbjogQXNzZXJ0aW9uIHwgdW5kZWZpbmVkKTogdm9pZCB7XHJcbiAgICB0aGlzLmFzc2VydGlvbi5zZXRWYWx1ZShhc3NlcnRpb24gfHwgbnVsbCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25JZFBpY2soaWQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy52YWx1ZS5zZXRWYWx1ZShpZCk7XHJcbiAgICB0aGlzLnZhbHVlLm1hcmtBc0RpcnR5KCk7XHJcbiAgICB0aGlzLnZhbHVlLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMubG9va3VwRXhwYW5kZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlRm9ybSh2YWx1ZTogQXNzZXJ0ZWRJZCB8IHVuZGVmaW5lZCk6IHZvaWQge1xyXG4gICAgdGhpcy5fdXBkYXRpbmdGb3JtID0gdHJ1ZTtcclxuICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgdGhpcy5mb3JtLnJlc2V0KCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnRhZy5zZXRWYWx1ZSh2YWx1ZS50YWcgfHwgbnVsbCk7XHJcbiAgICAgIHRoaXMudmFsdWUuc2V0VmFsdWUodmFsdWUudmFsdWUpO1xyXG4gICAgICB0aGlzLmxhYmVsLnNldFZhbHVlKHZhbHVlLmxhYmVsIHx8IG51bGwpO1xyXG4gICAgICB0aGlzLnNjb3BlLnNldFZhbHVlKHZhbHVlLnNjb3BlKTtcclxuICAgICAgdGhpcy5hc3NlcnRpb24uc2V0VmFsdWUodmFsdWUuYXNzZXJ0aW9uIHx8IG51bGwpO1xyXG4gICAgICB0aGlzLmZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgIH1cclxuICAgIHRoaXMuX3VwZGF0aW5nRm9ybSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRJZCgpOiBBc3NlcnRlZElkIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHRhZzogdGhpcy50YWcudmFsdWU/LnRyaW0oKSxcclxuICAgICAgdmFsdWU6IHRoaXMudmFsdWUudmFsdWU/LnRyaW0oKSB8fCAnJyxcclxuICAgICAgbGFiZWw6IHRoaXMubGFiZWwudmFsdWU/LnRyaW0oKSB8fCB1bmRlZmluZWQsXHJcbiAgICAgIHNjb3BlOiB0aGlzLnNjb3BlLnZhbHVlPy50cmltKCkgfHwgJycsXHJcbiAgICAgIGFzc2VydGlvbjogdGhpcy5hc3NlcnRpb24udmFsdWUgfHwgdW5kZWZpbmVkLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBlbWl0SWRDaGFuZ2UoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuaGFzU3VibWl0KSB7XHJcbiAgICAgIHRoaXMuX2lkID0gdGhpcy5nZXRJZCgpO1xyXG4gICAgICB0aGlzLmlkQ2hhbmdlLmVtaXQodGhpcy5faWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGNhbmNlbCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZWRpdG9yQ2xvc2UuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNhdmUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5mb3JtLnZhbGlkKSB7XHJcbiAgICAgIHRoaXMuX2lkID0gdGhpcy5nZXRJZCgpO1xyXG4gICAgICB0aGlzLmlkQ2hhbmdlLmVtaXQodGhpcy5faWQpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIiAoc3VibWl0KT1cInNhdmUoKVwiPlxyXG4gIDxkaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cclxuICAgICAgPCEtLSB0YWcgKGJvdW5kKSAtLT5cclxuICAgICAgQGlmIChpZFRhZ0VudHJpZXM/Lmxlbmd0aCkge1xyXG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1sYWJlbD50YWc8L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LXNlbGVjdCBbZm9ybUNvbnRyb2xdPVwidGFnXCI+XHJcbiAgICAgICAgICBAZm9yIChlIG9mIGlkVGFnRW50cmllczsgdHJhY2sgZSkge1xyXG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImUuaWRcIj57eyBlLnZhbHVlIH19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgfVxyXG4gICAgICA8IS0tIHRhZyAoZnJlZSkgLS0+XHJcbiAgICAgIEBpZiAoIWlkVGFnRW50cmllcz8ubGVuZ3RoKSB7XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8bWF0LWxhYmVsPnRhZzwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPVwidGFnXCIgLz5cclxuICAgICAgICBAaWYgKCRhbnkodGFnLmVycm9ycyk/Lm1heExlbmd0aCAmJiAodGFnLmRpcnR5IHx8IHRhZy50b3VjaGVkKSkge1xyXG4gICAgICAgIDxtYXQtZXJyb3I+dGFnIHRvbyBsb25nPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICB9XHJcblxyXG4gICAgICA8IS0tIHNjb3BlIChib3VuZCkgLS0+XHJcbiAgICAgIEBpZiAoaWRTY29wZUVudHJpZXM/Lmxlbmd0aCkge1xyXG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5zY29wZTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtc2VsZWN0IFtmb3JtQ29udHJvbF09XCJzY29wZVwiPlxyXG4gICAgICAgICAgQGZvciAoZSBvZiBpZFNjb3BlRW50cmllczsgdHJhY2sgZSkge1xyXG4gICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImUuaWRcIj57eyBlLnZhbHVlIH19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgfVxyXG4gICAgICA8IS0tIHNjb3BlIChmcmVlKSAtLT5cclxuICAgICAgQGlmICghaWRTY29wZUVudHJpZXM/Lmxlbmd0aCkge1xyXG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5zY29wZTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPVwic2NvcGVcIiAvPlxyXG4gICAgICAgIEBpZiAoJGFueShzY29wZS5lcnJvcnMpPy5tYXhMZW5ndGggJiYgKHNjb3BlLmRpcnR5IHx8IHNjb3BlLnRvdWNoZWQpKSB7XHJcbiAgICAgICAgPG1hdC1lcnJvcj5zY29wZSB0b28gbG9uZzwvbWF0LWVycm9yPlxyXG4gICAgICAgIH1cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgfVxyXG5cclxuICAgICAgPCEtLSB2YWx1ZSAtLT5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+dmFsdWU8L21hdC1sYWJlbD5cclxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT1cInZhbHVlXCIgLz5cclxuICAgICAgICBAaWYgKCRhbnkodmFsdWUuZXJyb3JzKT8ucmVxdWlyZWQgJiYgKHZhbHVlLmRpcnR5IHx8IHZhbHVlLnRvdWNoZWQpKSB7XHJcbiAgICAgICAgPG1hdC1lcnJvcj52YWx1ZSByZXF1aXJlZDwvbWF0LWVycm9yPlxyXG4gICAgICAgIH0gQGlmICgkYW55KHZhbHVlLmVycm9ycyk/Lm1heExlbmd0aCAmJiAodmFsdWUuZGlydHkgfHwgdmFsdWUudG91Y2hlZCkpXHJcbiAgICAgICAge1xyXG4gICAgICAgIDxtYXQtZXJyb3I+dmFsdWUgdG9vIGxvbmc8L21hdC1lcnJvcj5cclxuICAgICAgICB9XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG4gICAgICA8IS0tIGxhYmVsIC0tPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5sYWJlbDwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbZm9ybUNvbnRyb2xdPVwibGFiZWxcIiAvPlxyXG4gICAgICAgIEBpZiAoJGFueShsYWJlbC5lcnJvcnMpPy5tYXhMZW5ndGggJiYgKGxhYmVsLmRpcnR5IHx8IGxhYmVsLnRvdWNoZWQpKSB7XHJcbiAgICAgICAgPG1hdC1lcnJvcj5sYWJlbCB0b28gbG9uZzwvbWF0LWVycm9yPlxyXG4gICAgICAgIH1cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuXHJcbiAgICAgIDwhLS0gbG9va3VwIC0tPlxyXG4gICAgICBAaWYgKCFub0VpZExvb2t1cCkge1xyXG4gICAgICA8ZGl2PlxyXG4gICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIFsoZXhwYW5kZWQpXT1cImxvb2t1cEV4cGFuZGVkXCI+XHJcbiAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+bG9va3VwPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgICAgIDxjYWRtdXMtc2NvcGVkLXBpbi1sb29rdXBcclxuICAgICAgICAgICAgKGlkUGljayk9XCJvbklkUGljaygkZXZlbnQpXCJcclxuICAgICAgICAgID48L2NhZG11cy1zY29wZWQtcGluLWxvb2t1cD5cclxuICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICB9XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8IS0tIGFzc2VydGlvbiAtLT5cclxuICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+YXNzZXJ0aW9uPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgPGNhZG11cy1yZWZzLWFzc2VydGlvblxyXG4gICAgICAgIFthc3NUYWdFbnRyaWVzXT1cImFzc1RhZ0VudHJpZXNcIlxyXG4gICAgICAgIFtyZWZUeXBlRW50cmllc109XCJyZWZUeXBlRW50cmllc1wiXHJcbiAgICAgICAgW3JlZlRhZ0VudHJpZXNdPVwicmVmVGFnRW50cmllc1wiXHJcbiAgICAgICAgW2Fzc2VydGlvbl09XCJhc3NlcnRpb24udmFsdWVcIlxyXG4gICAgICAgIChhc3NlcnRpb25DaGFuZ2UpPVwib25Bc3NlcnRpb25DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgID5cclxuICAgICAgPC9jYWRtdXMtcmVmcy1hc3NlcnRpb24+XHJcbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gYnV0dG9ucyAtLT5cclxuICBAaWYgKGhhc1N1Ym1pdCkge1xyXG4gIDxkaXY+XHJcbiAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiBjb2xvcj1cIndhcm5cIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNhbmNlbCgpXCI+XHJcbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdC13YXJuXCI+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICB0eXBlPVwic3VibWl0XCJcclxuICAgICAgW2Rpc2FibGVkXT1cImZvcm0uaW52YWxpZFwiXHJcbiAgICA+XHJcbiAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdC1wcmltYXJ5XCI+Y2hlY2tfY2lyY2xlPC9tYXQtaWNvbj5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIH1cclxuPC9mb3JtPlxyXG4iXX0=
|
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
-
import { FormsModule, ReactiveFormsModule, } from '@angular/forms';
|
|
3
|
-
import { CommonModule } from '@angular/common';
|
|
4
|
-
import { take } from 'rxjs';
|
|
5
|
-
import { MatButtonModule } from '@angular/material/button';
|
|
6
|
-
import { MatExpansionModule } from '@angular/material/expansion';
|
|
7
|
-
import { MatIconModule } from '@angular/material/icon';
|
|
8
|
-
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
9
|
-
import { AssertedIdComponent, } from '../asserted-id/asserted-id.component';
|
|
10
|
-
import * as i0 from "@angular/core";
|
|
11
|
-
import * as i1 from "@angular/forms";
|
|
12
|
-
import * as i2 from "@myrmidon/ng-mat-tools";
|
|
13
|
-
import * as i3 from "@angular/material/button";
|
|
14
|
-
import * as i4 from "@angular/material/expansion";
|
|
15
|
-
import * as i5 from "@angular/material/icon";
|
|
16
|
-
import * as i6 from "@angular/material/tooltip";
|
|
17
|
-
/**
|
|
18
|
-
* Asserted IDs editor.
|
|
19
|
-
*/
|
|
20
|
-
export class AssertedIdsComponent {
|
|
21
|
-
/**
|
|
22
|
-
* The asserted IDs.
|
|
23
|
-
*/
|
|
24
|
-
get ids() {
|
|
25
|
-
return this._ids;
|
|
26
|
-
}
|
|
27
|
-
set ids(value) {
|
|
28
|
-
if (this._ids !== value) {
|
|
29
|
-
this._ids = value || [];
|
|
30
|
-
this.updateForm(value);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
constructor(formBuilder, _dialogService) {
|
|
34
|
-
this._dialogService = _dialogService;
|
|
35
|
-
this._ids = [];
|
|
36
|
-
this._editedIndex = -1;
|
|
37
|
-
this.idsChange = new EventEmitter();
|
|
38
|
-
this.entries = formBuilder.control([], { nonNullable: true });
|
|
39
|
-
// form
|
|
40
|
-
this.form = formBuilder.group({
|
|
41
|
-
ids: this.entries,
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
updateForm(ids) {
|
|
45
|
-
if (!ids?.length) {
|
|
46
|
-
this.form.reset();
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
this.entries.setValue(ids, { emitEvent: false });
|
|
50
|
-
this.entries.updateValueAndValidity();
|
|
51
|
-
this.form.markAsPristine();
|
|
52
|
-
}
|
|
53
|
-
emitIdsChange() {
|
|
54
|
-
this.idsChange.emit(this.entries.value);
|
|
55
|
-
}
|
|
56
|
-
addId() {
|
|
57
|
-
this.editId({
|
|
58
|
-
scope: '',
|
|
59
|
-
value: '',
|
|
60
|
-
}, -1);
|
|
61
|
-
}
|
|
62
|
-
editId(id, index) {
|
|
63
|
-
this._editedIndex = index;
|
|
64
|
-
this.edited = id;
|
|
65
|
-
}
|
|
66
|
-
closeId() {
|
|
67
|
-
this._editedIndex = -1;
|
|
68
|
-
this.edited = undefined;
|
|
69
|
-
}
|
|
70
|
-
saveId(entry) {
|
|
71
|
-
const entries = [...this.entries.value];
|
|
72
|
-
if (this._editedIndex === -1) {
|
|
73
|
-
entries.push(entry);
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
entries.splice(this._editedIndex, 1, entry);
|
|
77
|
-
}
|
|
78
|
-
this.entries.setValue(entries);
|
|
79
|
-
this.entries.markAsDirty();
|
|
80
|
-
this.entries.updateValueAndValidity();
|
|
81
|
-
this.closeId();
|
|
82
|
-
}
|
|
83
|
-
deleteId(index) {
|
|
84
|
-
this._dialogService
|
|
85
|
-
.confirm('Confirmation', 'Delete ID?')
|
|
86
|
-
.pipe(take(1))
|
|
87
|
-
.subscribe((yes) => {
|
|
88
|
-
if (yes) {
|
|
89
|
-
if (this._editedIndex === index) {
|
|
90
|
-
this.closeId();
|
|
91
|
-
}
|
|
92
|
-
const entries = [...this.entries.value];
|
|
93
|
-
entries.splice(index, 1);
|
|
94
|
-
this.entries.setValue(entries);
|
|
95
|
-
this.entries.markAsDirty();
|
|
96
|
-
this.entries.updateValueAndValidity();
|
|
97
|
-
this.emitIdsChange();
|
|
98
|
-
}
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
moveIdUp(index) {
|
|
102
|
-
if (index < 1) {
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
const entry = this.entries.value[index];
|
|
106
|
-
const entries = [...this.entries.value];
|
|
107
|
-
entries.splice(index, 1);
|
|
108
|
-
entries.splice(index - 1, 0, entry);
|
|
109
|
-
this.entries.setValue(entries);
|
|
110
|
-
this.entries.markAsDirty();
|
|
111
|
-
this.entries.updateValueAndValidity();
|
|
112
|
-
this.emitIdsChange();
|
|
113
|
-
}
|
|
114
|
-
moveIdDown(index) {
|
|
115
|
-
if (index + 1 >= this.entries.value.length) {
|
|
116
|
-
return;
|
|
117
|
-
}
|
|
118
|
-
const entry = this.entries.value[index];
|
|
119
|
-
const entries = [...this.entries.value];
|
|
120
|
-
entries.splice(index, 1);
|
|
121
|
-
entries.splice(index + 1, 0, entry);
|
|
122
|
-
this.entries.setValue(entries);
|
|
123
|
-
this.entries.markAsDirty();
|
|
124
|
-
this.entries.updateValueAndValidity();
|
|
125
|
-
this.emitIdsChange();
|
|
126
|
-
}
|
|
127
|
-
onIdChange(id) {
|
|
128
|
-
this.saveId(id);
|
|
129
|
-
this.emitIdsChange();
|
|
130
|
-
}
|
|
131
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: AssertedIdsComponent, deps: [{ token: i1.FormBuilder }, { token: i2.DialogService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
132
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.1.2", type: AssertedIdsComponent, isStandalone: true, selector: "cadmus-refs-asserted-ids", inputs: { ids: "ids", idScopeEntries: "idScopeEntries", idTagEntries: "idTagEntries", assTagEntries: "assTagEntries", refTypeEntries: "refTypeEntries", refTagEntries: "refTagEntries" }, outputs: { idsChange: "idsChange" }, ngImport: i0, template: "<form [formGroup]=\"form\">\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n color=\"primary\"\r\n class=\"mat-primary\"\r\n (click)=\"addId()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> ID\r\n </button>\r\n </div>\r\n @if (entries.value.length) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>scope</th>\r\n <th>value</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for ( entry of entries.value; track entry; let i = $index; let first =\r\n $first; let last = $last) {\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n matTooltip=\"Edit this ID\"\r\n (click)=\"editId(entry, i)\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this ID up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveIdUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this ID down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveIdDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n matTooltip=\"Delete this ID\"\r\n (click)=\"deleteId(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ entry.scope }}</td>\r\n <td>{{ entry.value }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n\r\n <mat-expansion-panel [expanded]=\"edited\" [disabled]=\"!edited\">\r\n <mat-expansion-panel-header\r\n >ID {{ edited?.value }}</mat-expansion-panel-header\r\n >\r\n <cadmus-refs-asserted-id\r\n [idScopeEntries]=\"idScopeEntries\"\r\n [idTagEntries]=\"idTagEntries\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [hasSubmit]=\"true\"\r\n [id]=\"edited\"\r\n (idChange)=\"onIdChange($event)\"\r\n (editorClose)=\"closeId()\"\r\n ></cadmus-refs-asserted-id>\r\n </mat-expansion-panel>\r\n</form>\r\n", styles: ["th{font-weight:400;color:silver;text-align:left}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "component", type: i4.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i4.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: AssertedIdComponent, selector: "cadmus-refs-asserted-id", inputs: ["idScopeEntries", "idTagEntries", "assTagEntries", "refTypeEntries", "refTagEntries", "id", "noEidLookup", "hasSubmit"], outputs: ["idChange", "editorClose"] }] }); }
|
|
133
|
-
}
|
|
134
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.2", ngImport: i0, type: AssertedIdsComponent, decorators: [{
|
|
135
|
-
type: Component,
|
|
136
|
-
args: [{ standalone: true, selector: 'cadmus-refs-asserted-ids', imports: [
|
|
137
|
-
CommonModule,
|
|
138
|
-
FormsModule,
|
|
139
|
-
ReactiveFormsModule,
|
|
140
|
-
MatButtonModule,
|
|
141
|
-
MatExpansionModule,
|
|
142
|
-
MatIconModule,
|
|
143
|
-
MatTooltipModule,
|
|
144
|
-
AssertedIdComponent
|
|
145
|
-
], template: "<form [formGroup]=\"form\">\r\n <div>\r\n <button\r\n type=\"button\"\r\n mat-flat-button\r\n color=\"primary\"\r\n class=\"mat-primary\"\r\n (click)=\"addId()\"\r\n >\r\n <mat-icon>add_circle</mat-icon> ID\r\n </button>\r\n </div>\r\n @if (entries.value.length) {\r\n <table>\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>scope</th>\r\n <th>value</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n @for ( entry of entries.value; track entry; let i = $index; let first =\r\n $first; let last = $last) {\r\n <tr>\r\n <td>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"primary\"\r\n matTooltip=\"Edit this ID\"\r\n (click)=\"editId(entry, i)\"\r\n >\r\n <mat-icon class=\"mat-primary\">edit</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this ID up\"\r\n [disabled]=\"first\"\r\n (click)=\"moveIdUp(i)\"\r\n >\r\n <mat-icon>arrow_upward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n matTooltip=\"Move this ID down\"\r\n [disabled]=\"last\"\r\n (click)=\"moveIdDown(i)\"\r\n >\r\n <mat-icon>arrow_downward</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n matTooltip=\"Delete this ID\"\r\n (click)=\"deleteId(i)\"\r\n >\r\n <mat-icon class=\"mat-warn\">remove_circle</mat-icon>\r\n </button>\r\n </td>\r\n <td>{{ entry.scope }}</td>\r\n <td>{{ entry.value }}</td>\r\n </tr>\r\n }\r\n </tbody>\r\n </table>\r\n }\r\n\r\n <mat-expansion-panel [expanded]=\"edited\" [disabled]=\"!edited\">\r\n <mat-expansion-panel-header\r\n >ID {{ edited?.value }}</mat-expansion-panel-header\r\n >\r\n <cadmus-refs-asserted-id\r\n [idScopeEntries]=\"idScopeEntries\"\r\n [idTagEntries]=\"idTagEntries\"\r\n [assTagEntries]=\"assTagEntries\"\r\n [refTypeEntries]=\"refTypeEntries\"\r\n [refTagEntries]=\"refTagEntries\"\r\n [hasSubmit]=\"true\"\r\n [id]=\"edited\"\r\n (idChange)=\"onIdChange($event)\"\r\n (editorClose)=\"closeId()\"\r\n ></cadmus-refs-asserted-id>\r\n </mat-expansion-panel>\r\n</form>\r\n", styles: ["th{font-weight:400;color:silver;text-align:left}\n"] }]
|
|
146
|
-
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.DialogService }], propDecorators: { ids: [{
|
|
147
|
-
type: Input
|
|
148
|
-
}], idScopeEntries: [{
|
|
149
|
-
type: Input
|
|
150
|
-
}], idTagEntries: [{
|
|
151
|
-
type: Input
|
|
152
|
-
}], assTagEntries: [{
|
|
153
|
-
type: Input
|
|
154
|
-
}], refTypeEntries: [{
|
|
155
|
-
type: Input
|
|
156
|
-
}], refTagEntries: [{
|
|
157
|
-
type: Input
|
|
158
|
-
}], idsChange: [{
|
|
159
|
-
type: Output
|
|
160
|
-
}] } });
|
|
161
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0ZWQtaWRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL215cm1pZG9uL2NhZG11cy1yZWZzLWFzc2VydGVkLWlkcy9zcmMvbGliL2Fzc2VydGVkLWlkcy9hc3NlcnRlZC1pZHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbXlybWlkb24vY2FkbXVzLXJlZnMtYXNzZXJ0ZWQtaWRzL3NyYy9saWIvYXNzZXJ0ZWQtaWRzL2Fzc2VydGVkLWlkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZFLE9BQU8sRUFJTCxXQUFXLEVBQ1gsbUJBQW1CLEdBQ3BCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFNUIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUs3RCxPQUFPLEVBRUwsbUJBQW1CLEdBQ3BCLE1BQU0sc0NBQXNDLENBQUM7Ozs7Ozs7O0FBRTlDOztHQUVHO0FBaUJILE1BQU0sT0FBTyxvQkFBb0I7SUFLL0I7O09BRUc7SUFDSCxJQUNXLEdBQUc7UUFDWixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztJQUNELElBQVcsR0FBRyxDQUFDLEtBQW1CO1FBQ2hDLElBQUks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R1Ysb0JBQW9CO2tCQWhCaEMsU0FBUztpQ0FDSSxJQUFJLFlBQ04sMEJBQTBCLFdBRzNCO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2Ysa0JBQWtCO3dCQUNsQixhQUFhO3dCQUNiLGdCQUFnQjt3QkFDaEIsbUJBQW1CO3FCQUN0Qjs0R0FXWSxHQUFHO3NCQURiLEtBQUs7Z0JBYUMsY0FBYztzQkFEcEIsS0FBSztnQkFLQyxZQUFZO3NCQURsQixLQUFLO2dCQUtDLGFBQWE7c0JBRG5CLEtBQUs7Z0JBS0MsY0FBYztzQkFEcEIsS0FBSztnQkFLQyxhQUFhO3NCQURuQixLQUFLO2dCQU9DLFNBQVM7c0JBRGYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIlxyXG5pbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIEZvcm1CdWlsZGVyLFxyXG4gIEZvcm1Db250cm9sLFxyXG4gIEZvcm1Hcm91cCxcclxuICBGb3Jtc01vZHVsZSxcclxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgTWF0RXhwYW5zaW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZXhwYW5zaW9uJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcblxyXG5pbXBvcnQgeyBUaGVzYXVydXNFbnRyeSB9IGZyb20gJ0BteXJtaWRvbi9jYWRtdXMtY29yZSc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAbXlybWlkb24vbmctbWF0LXRvb2xzJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQXNzZXJ0ZWRJZCxcclxuICBBc3NlcnRlZElkQ29tcG9uZW50LFxyXG59IGZyb20gJy4uL2Fzc2VydGVkLWlkL2Fzc2VydGVkLWlkLmNvbXBvbmVudCc7XHJcblxyXG4vKipcclxuICogQXNzZXJ0ZWQgSURzIGVkaXRvci5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgc2VsZWN0b3I6ICdjYWRtdXMtcmVmcy1hc3NlcnRlZC1pZHMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hc3NlcnRlZC1pZHMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2Fzc2VydGVkLWlkcy5jb21wb25lbnQuY3NzJ10sXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgTWF0RXhwYW5zaW9uTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXHJcbiAgICBBc3NlcnRlZElkQ29tcG9uZW50XHJcbl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBc3NlcnRlZElkc0NvbXBvbmVudCB7XHJcbiAgcHJpdmF0ZSBfaWRzOiBBc3NlcnRlZElkW107XHJcbiAgcHJpdmF0ZSBfZWRpdGVkSW5kZXg6IG51bWJlcjtcclxuICBwdWJsaWMgZWRpdGVkPzogQXNzZXJ0ZWRJZDtcclxuXHJcbiAgLyoqXHJcbiAgICogVGhlIGFzc2VydGVkIElEcy5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBnZXQgaWRzKCk6IEFzc2VydGVkSWRbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5faWRzO1xyXG4gIH1cclxuICBwdWJsaWMgc2V0IGlkcyh2YWx1ZTogQXNzZXJ0ZWRJZFtdKSB7XHJcbiAgICBpZiAodGhpcy5faWRzICE9PSB2YWx1ZSkge1xyXG4gICAgICB0aGlzLl9pZHMgPSB2YWx1ZSB8fCBbXTtcclxuICAgICAgdGhpcy51cGRhdGVGb3JtKHZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGFzc2VydGVkLWlkLXNjb3Blc1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGlkU2NvcGVFbnRyaWVzPzogVGhlc2F1cnVzRW50cnlbXTtcclxuXHJcbiAgLy8gYXNzZXJ0ZWQtaWQtdGFnc1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGlkVGFnRW50cmllcz86IFRoZXNhdXJ1c0VudHJ5W107XHJcblxyXG4gIC8vIGFzc2VydGlvbi10YWdzXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgYXNzVGFnRW50cmllcz86IFRoZXNhdXJ1c0VudHJ5W107XHJcblxyXG4gIC8vIGRvYy1yZWZlcmVuY2UtdHlwZXNcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyByZWZUeXBlRW50cmllczogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgLy8gZG9jLXJlZmVyZW5jZS10YWdzXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgcmVmVGFnRW50cmllczogVGhlc2F1cnVzRW50cnlbXSB8IHVuZGVmaW5lZDtcclxuXHJcbiAgLyoqXHJcbiAgICogRW1pdHRlZCB3aGVuZXZlciBhbnkgSUQgY2hhbmdlcy5cclxuICAgKi9cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgaWRzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8QXNzZXJ0ZWRJZFtdPjtcclxuXHJcbiAgcHVibGljIGVudHJpZXM6IEZvcm1Db250cm9sPEFzc2VydGVkSWRbXT47XHJcbiAgcHVibGljIGZvcm06IEZvcm1Hcm91cDtcclxuXHJcbiAgY29uc3RydWN0b3IoZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLCBwcml2YXRlIF9kaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlKSB7XHJcbiAgICB0aGlzLl9pZHMgPSBbXTtcclxuICAgIHRoaXMuX2VkaXRlZEluZGV4ID0gLTE7XHJcbiAgICB0aGlzLmlkc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8QXNzZXJ0ZWRJZFtdPigpO1xyXG4gICAgdGhpcy5lbnRyaWVzID0gZm9ybUJ1aWxkZXIuY29udHJvbChbXSwgeyBub25OdWxsYWJsZTogdHJ1ZSB9KTtcclxuICAgIC8vIGZvcm1cclxuICAgIHRoaXMuZm9ybSA9IGZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgaWRzOiB0aGlzLmVudHJpZXMsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlRm9ybShpZHM6IEFzc2VydGVkSWRbXSk6IHZvaWQge1xyXG4gICAgaWYgKCFpZHM/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmZvcm0ucmVzZXQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lbnRyaWVzLnNldFZhbHVlKGlkcywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgdGhpcy5lbnRyaWVzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgIHRoaXMuZm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlbWl0SWRzQ2hhbmdlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5pZHNDaGFuZ2UuZW1pdCh0aGlzLmVudHJpZXMudmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkZElkKCk6IHZvaWQge1xyXG4gICAgdGhpcy5lZGl0SWQoXHJcbiAgICAgIHtcclxuICAgICAgICBzY29wZTogJycsXHJcbiAgICAgICAgdmFsdWU6ICcnLFxyXG4gICAgICB9LFxyXG4gICAgICAtMVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBlZGl0SWQoaWQ6IEFzc2VydGVkSWQsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIHRoaXMuX2VkaXRlZEluZGV4ID0gaW5kZXg7XHJcbiAgICB0aGlzLmVkaXRlZCA9IGlkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlSWQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9lZGl0ZWRJbmRleCA9IC0xO1xyXG4gICAgdGhpcy5lZGl0ZWQgPSB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2F2ZUlkKGVudHJ5OiBBc3NlcnRlZElkKTogdm9pZCB7XHJcbiAgICBjb25zdCBlbnRyaWVzID0gWy4uLnRoaXMuZW50cmllcy52YWx1ZV07XHJcbiAgICBpZiAodGhpcy5fZWRpdGVkSW5kZXggPT09IC0xKSB7XHJcbiAgICAgIGVudHJpZXMucHVzaChlbnRyeSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBlbnRyaWVzLnNwbGljZSh0aGlzLl9lZGl0ZWRJbmRleCwgMSwgZW50cnkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lbnRyaWVzLnNldFZhbHVlKGVudHJpZXMpO1xyXG4gICAgdGhpcy5lbnRyaWVzLm1hcmtBc0RpcnR5KCk7XHJcbiAgICB0aGlzLmVudHJpZXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy5jbG9zZUlkKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZGVsZXRlSWQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fZGlhbG9nU2VydmljZVxyXG4gICAgICAuY29uZmlybSgnQ29uZmlybWF0aW9uJywgJ0RlbGV0ZSBJRD8nKVxyXG4gICAgICAucGlwZSh0YWtlKDEpKVxyXG4gICAgICAuc3Vic2NyaWJlKCh5ZXMpID0+IHtcclxuICAgICAgICBpZiAoeWVzKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5fZWRpdGVkSW5kZXggPT09IGluZGV4KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvc2VJZCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgZW50cmllcyA9IFsuLi50aGlzLmVudHJpZXMudmFsdWVdO1xyXG4gICAgICAgICAgZW50cmllcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgdGhpcy5lbnRyaWVzLnNldFZhbHVlKGVudHJpZXMpO1xyXG4gICAgICAgICAgdGhpcy5lbnRyaWVzLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgICAgICB0aGlzLmVudHJpZXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgdGhpcy5lbWl0SWRzQ2hhbmdlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBtb3ZlSWRVcChpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoaW5kZXggPCAxKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5lbnRyaWVzLnZhbHVlW2luZGV4XTtcclxuICAgIGNvbnN0IGVudHJpZXMgPSBbLi4udGhpcy5lbnRyaWVzLnZhbHVlXTtcclxuICAgIGVudHJpZXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIGVudHJpZXMuc3BsaWNlKGluZGV4IC0gMSwgMCwgZW50cnkpO1xyXG4gICAgdGhpcy5lbnRyaWVzLnNldFZhbHVlKGVudHJpZXMpO1xyXG4gICAgdGhpcy5lbnRyaWVzLm1hcmtBc0RpcnR5KCk7XHJcbiAgICB0aGlzLmVudHJpZXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy5lbWl0SWRzQ2hhbmdlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbW92ZUlkRG93bihpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoaW5kZXggKyAxID49IHRoaXMuZW50cmllcy52YWx1ZS5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZW50cnkgPSB0aGlzLmVudHJpZXMudmFsdWVbaW5kZXhdO1xyXG4gICAgY29uc3QgZW50cmllcyA9IFsuLi50aGlzLmVudHJpZXMudmFsdWVdO1xyXG4gICAgZW50cmllcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgZW50cmllcy5zcGxpY2UoaW5kZXggKyAxLCAwLCBlbnRyeSk7XHJcbiAgICB0aGlzLmVudHJpZXMuc2V0VmFsdWUoZW50cmllcyk7XHJcbiAgICB0aGlzLmVudHJpZXMubWFya0FzRGlydHkoKTtcclxuICAgIHRoaXMuZW50cmllcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB0aGlzLmVtaXRJZHNDaGFuZ2UoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbklkQ2hhbmdlKGlkOiBBc3NlcnRlZElkKTogdm9pZCB7XHJcbiAgICB0aGlzLnNhdmVJZChpZCk7XHJcbiAgICB0aGlzLmVtaXRJZHNDaGFuZ2UoKTtcclxuICB9XHJcbn1cclxuIiwiPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCI+XHJcbiAgPGRpdj5cclxuICAgIDxidXR0b25cclxuICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgIG1hdC1mbGF0LWJ1dHRvblxyXG4gICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICBjbGFzcz1cIm1hdC1wcmltYXJ5XCJcclxuICAgICAgKGNsaWNrKT1cImFkZElkKClcIlxyXG4gICAgPlxyXG4gICAgICA8bWF0LWljb24+YWRkX2NpcmNsZTwvbWF0LWljb24+IElEXHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuICBAaWYgKGVudHJpZXMudmFsdWUubGVuZ3RoKSB7XHJcbiAgPHRhYmxlPlxyXG4gICAgPHRoZWFkPlxyXG4gICAgICA8dHI+XHJcbiAgICAgICAgPHRoPjwvdGg+XHJcbiAgICAgICAgPHRoPnNjb3BlPC90aD5cclxuICAgICAgICA8dGg+dmFsdWU8L3RoPlxyXG4gICAgICA8L3RyPlxyXG4gICAgPC90aGVhZD5cclxuICAgIDx0Ym9keT5cclxuICAgICAgQGZvciAoIGVudHJ5IG9mIGVudHJpZXMudmFsdWU7IHRyYWNrIGVudHJ5OyBsZXQgaSA9ICRpbmRleDsgbGV0IGZpcnN0ID1cclxuICAgICAgJGZpcnN0OyBsZXQgbGFzdCA9ICRsYXN0KSB7XHJcbiAgICAgIDx0cj5cclxuICAgICAgICA8dGQ+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkVkaXQgdGhpcyBJRFwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJlZGl0SWQoZW50cnksIGkpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0LXByaW1hcnlcIj5lZGl0PC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJNb3ZlIHRoaXMgSUQgdXBcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZmlyc3RcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwibW92ZUlkVXAoaSlcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+YXJyb3dfdXB3YXJkPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJNb3ZlIHRoaXMgSUQgZG93blwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJsYXN0XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIm1vdmVJZERvd24oaSlcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8bWF0LWljb24+YXJyb3dfZG93bndhcmQ8L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgY29sb3I9XCJ3YXJuXCJcclxuICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkRlbGV0ZSB0aGlzIElEXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUlkKGkpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0LXdhcm5cIj5yZW1vdmVfY2lyY2xlPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPHRkPnt7IGVudHJ5LnNjb3BlIH19PC90ZD5cclxuICAgICAgICA8dGQ+e3sgZW50cnkudmFsdWUgfX08L3RkPlxyXG4gICAgICA8L3RyPlxyXG4gICAgICB9XHJcbiAgICA8L3Rib2R5PlxyXG4gIDwvdGFibGU+XHJcbiAgfVxyXG5cclxuICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBbZXhwYW5kZWRdPVwiZWRpdGVkXCIgW2Rpc2FibGVkXT1cIiFlZGl0ZWRcIj5cclxuICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlclxyXG4gICAgICA+SUQge3sgZWRpdGVkPy52YWx1ZSB9fTwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJcclxuICAgID5cclxuICAgIDxjYWRtdXMtcmVmcy1hc3NlcnRlZC1pZFxyXG4gICAgICBbaWRTY29wZUVudHJpZXNdPVwiaWRTY29wZUVudHJpZXNcIlxyXG4gICAgICBbaWRUYWdFbnRyaWVzXT1cImlkVGFnRW50cmllc1wiXHJcbiAgICAgIFthc3NUYWdFbnRyaWVzXT1cImFzc1RhZ0VudHJpZXNcIlxyXG4gICAgICBbcmVmVHlwZUVudHJpZXNdPVwicmVmVHlwZUVudHJpZXNcIlxyXG4gICAgICBbcmVmVGFnRW50cmllc109XCJyZWZUYWdFbnRyaWVzXCJcclxuICAgICAgW2hhc1N1Ym1pdF09XCJ0cnVlXCJcclxuICAgICAgW2lkXT1cImVkaXRlZFwiXHJcbiAgICAgIChpZENoYW5nZSk9XCJvbklkQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAoZWRpdG9yQ2xvc2UpPVwiY2xvc2VJZCgpXCJcclxuICAgID48L2NhZG11cy1yZWZzLWFzc2VydGVkLWlkPlxyXG4gIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuPC9mb3JtPlxyXG4iXX0=
|