@firestitch/system 18.0.44 → 18.0.46

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.
Files changed (25) hide show
  1. package/app/modules/system/components/api-logs/api-logs.component.d.ts +6 -0
  2. package/app/modules/system/components/info/info.component.d.ts +6 -0
  3. package/app/modules/system/components/server-logs/server-logs.component.d.ts +5 -0
  4. package/app/modules/system/components/setting-instructions/index.d.ts +1 -0
  5. package/app/modules/system/components/setting-instructions/setting-instructions.component.d.ts +7 -0
  6. package/app/modules/system/components/settings/settings.component.d.ts +29 -8
  7. package/app/modules/system/components/upgrade-logs/upgrade-logs.component.d.ts +6 -0
  8. package/app/modules/system/data/index.d.ts +3 -0
  9. package/app/modules/system/data/setting.data.d.ts +12 -0
  10. package/app/modules/system/fs-system.module.d.ts +2 -1
  11. package/esm2022/app/modules/system/components/api-logs/api-logs.component.mjs +14 -4
  12. package/esm2022/app/modules/system/components/info/info.component.mjs +14 -3
  13. package/esm2022/app/modules/system/components/server-logs/server-logs.component.mjs +12 -4
  14. package/esm2022/app/modules/system/components/setting-instructions/index.mjs +2 -0
  15. package/esm2022/app/modules/system/components/setting-instructions/setting-instructions.component.mjs +23 -0
  16. package/esm2022/app/modules/system/components/settings/settings.component.mjs +80 -15
  17. package/esm2022/app/modules/system/components/upgrade-logs/upgrade-logs.component.mjs +15 -4
  18. package/esm2022/app/modules/system/data/index.mjs +4 -0
  19. package/esm2022/app/modules/system/data/setting.data.mjs +27 -0
  20. package/esm2022/app/modules/system/fs-system.module.mjs +7 -3
  21. package/esm2022/public_api.mjs +2 -1
  22. package/fesm2022/firestitch-system.mjs +169 -26
  23. package/fesm2022/firestitch-system.mjs.map +1 -1
  24. package/package.json +1 -1
  25. package/public_api.d.ts +1 -0
@@ -1,15 +1,17 @@
1
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output, inject } from '@angular/core';
1
+ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, inject } from '@angular/core';
2
2
  import { FsClipboard } from '@firestitch/clipboard';
3
+ import { MatDialog } from '@angular/material/dialog';
3
4
  import { parse } from '@firestitch/date';
4
5
  import { FsMessage } from '@firestitch/message';
5
6
  import { FsPrompt } from '@firestitch/prompt';
7
+ import { SettingData } from '../../data';
6
8
  import { SettingInterfaceType } from '../../enums';
7
9
  import { MatAccordion, MatExpansionPanel, MatExpansionPanelHeader, MatExpansionPanelTitle } from '@angular/material/expansion';
8
10
  import { MatIconButton, MatButton } from '@angular/material/button';
9
11
  import { MatTooltip } from '@angular/material/tooltip';
10
12
  import { MatIcon } from '@angular/material/icon';
11
13
  import { NgClass } from '@angular/common';
12
- import { MatFormField, MatLabel, MatHint } from '@angular/material/form-field';
14
+ import { MatFormField, MatLabel, MatHint, MatSuffix } from '@angular/material/form-field';
13
15
  import { MatInput } from '@angular/material/input';
14
16
  import { FormsModule } from '@angular/forms';
15
17
  import { MatSelect } from '@angular/material/select';
@@ -19,6 +21,7 @@ import { FsColorPickerModule } from '@firestitch/colorpicker';
19
21
  import { FsFileModule } from '@firestitch/file';
20
22
  import { KeyNameValuePipe } from '../../pipes/key-name-value.pipe';
21
23
  import { LinkifyPipe } from '../../pipes/linkify.pipe';
24
+ import { SettingInstructionsComponent } from '../setting-instructions/setting-instructions.component';
22
25
  import * as i0 from "@angular/core";
23
26
  import * as i1 from "@angular/forms";
24
27
  import * as i2 from "@firestitch/datepicker";
@@ -28,18 +31,23 @@ export class SettingsComponent {
28
31
  _message = inject(FsMessage);
29
32
  _clipboard = inject(FsClipboard);
30
33
  _prompt = inject(FsPrompt);
34
+ _dialog = inject(MatDialog);
35
+ _settingData = inject(SettingData);
31
36
  _cdRef = inject(ChangeDetectorRef);
37
+ /**
38
+ * Optional overrides. The settings endpoints ship with the framework at a fixed
39
+ * path (system/settings), so when one of these is left unset the component calls
40
+ * that endpoint itself through SettingData and a consumer has to pass nothing.
41
+ */
32
42
  loadSettings;
33
43
  save;
34
- fileRemove = new EventEmitter();
35
- fileSelect = new EventEmitter();
44
+ fileUpload;
45
+ fileDelete;
36
46
  groupedSettings = [];
37
47
  groups = [];
38
48
  SettingInterfaceType = SettingInterfaceType;
39
49
  ngOnInit() {
40
- this.loadSettings({
41
- visible: true,
42
- })
50
+ this._loadSettings({ visible: true })
43
51
  .subscribe((settings) => {
44
52
  settings = settings
45
53
  .filter((setting) => {
@@ -112,18 +120,74 @@ export class SettingsComponent {
112
120
  }
113
121
  });
114
122
  }
123
+ /**
124
+ * Opens the long-form setup steps for settings that carry them. The inline hint
125
+ * covers what the field is; this covers work that has to happen elsewhere before
126
+ * a value can even be obtained.
127
+ */
128
+ openInstructions(setting) {
129
+ this._dialog.open(SettingInstructionsComponent, {
130
+ // Sized by its content rather than fixed: instructions run from a couple of
131
+ // sentences to a dozen steps, and a fixed height leaves the short ones mostly
132
+ // empty. The caps stop a long one from filling the screen edge to edge.
133
+ maxWidth: '80vw',
134
+ maxHeight: '80vh',
135
+ data: { setting },
136
+ });
137
+ }
115
138
  saveGroup(group) {
116
139
  const settings = this.groupedSettings[group];
117
140
  const values = settings.reduce((result, value) => {
118
141
  return (result[value.name] = value.value, result);
119
142
  }, {});
120
- this.save(group, values)
143
+ this._save(group, values)
121
144
  .subscribe(() => {
122
145
  this._message.success('Changes Saved');
123
146
  });
124
147
  }
148
+ /**
149
+ * The X on a file setting. Persisted on its own because the bulk save deliberately
150
+ * skips file settings — they have their own endpoint, and without this the field
151
+ * only cleared on screen while the file stayed.
152
+ */
153
+ removeFile(setting) {
154
+ this._fileDelete(setting)
155
+ .subscribe((updated) => {
156
+ setting.value = updated?.value ?? '';
157
+ this._message.success('Changes Saved');
158
+ this._cdRef.markForCheck();
159
+ });
160
+ }
161
+ selectFile(setting, file) {
162
+ this._fileUpload(setting, file)
163
+ .subscribe((updated) => {
164
+ setting.value = updated?.value ?? setting.value;
165
+ this._message.success('Changes Saved');
166
+ this._cdRef.markForCheck();
167
+ });
168
+ }
169
+ _loadSettings(query) {
170
+ return this.loadSettings
171
+ ? this.loadSettings(query)
172
+ : this._settingData.gets(query);
173
+ }
174
+ _save(group, values) {
175
+ return this.save
176
+ ? this.save(group, values)
177
+ : this._settingData.bulk({ group, values });
178
+ }
179
+ _fileUpload(setting, file) {
180
+ return this.fileUpload
181
+ ? this.fileUpload(setting, file)
182
+ : this._settingData.fileUpload(setting.id, { file });
183
+ }
184
+ _fileDelete(setting) {
185
+ return this.fileDelete
186
+ ? this.fileDelete(setting)
187
+ : this._settingData.fileDelete(setting.id);
188
+ }
125
189
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: SettingsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
126
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: SettingsComponent, isStandalone: true, selector: "fs-system-settings", inputs: { loadSettings: "loadSettings", save: "save" }, outputs: { fileRemove: "fileRemove", fileSelect: "fileSelect" }, ngImport: i0, template: "<mat-accordion>\n @for (group of groups; track group) {\n <mat-expansion-panel\n hideToggle\n >\n <mat-expansion-panel-header>\n <mat-panel-title>\n <div class=\"title-row\">\n <div class=\"title\">\n {{ group || 'General' }}\n </div>\n <div class=\"actions\">\n <button\n type=\"button\"\n [matTooltip]=\"'Export ' + (group || 'General') + ' Settings'\"\n mat-icon-button\n (click)=\"export($event, groupedSettings[group])\">\n <mat-icon>\n cloud_download\n </mat-icon>\n </button>\n <button\n type=\"button\"\n [matTooltip]=\"'Import ' + (group || 'General') + ' Settings'\"\n mat-icon-button\n (click)=\"import($event, group)\">\n <mat-icon>\n cloud_upload\n </mat-icon>\n </button>\n </div>\n </div>\n </mat-panel-title>\n </mat-expansion-panel-header>\n @for (setting of groupedSettings[group]; track setting) {\n <div\n hideToggle\n class=\"setting\"\n [ngClass]=\"{ 'has-instruction': !! setting.instruction }\">\n @if (setting.interfaceType===SettingInterfaceType.InputBox) {\n <mat-form-field\n class=\"full-width form-field-multiline-subscript\"\n >\n <mat-label>\n {{ setting.label }}\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"setting.value\"\n [name]=\"'setting' + setting.id\">\n <mat-hint\n [innerHTML]=\"setting.instruction | linkify\">\n </mat-hint>\n </mat-form-field>\n }\n @if (setting.interfaceType===SettingInterfaceType.Textarea) {\n <mat-form-field\n class=\"full-width form-field-multiline-subscript\"\n >\n <mat-label>\n {{ setting.label }}\n </mat-label>\n <textarea\n matInput\n [(ngModel)]=\"setting.value\"\n [name]=\"'setting' + setting.id\">\n </textarea>\n <mat-hint\n [innerHTML]=\"setting.instruction | linkify\">\n </mat-hint>\n </mat-form-field>\n }\n @if (setting.interfaceType===SettingInterfaceType.Select || setting.interfaceType===SettingInterfaceType.SelectMultiple) {\n <mat-form-field\n class=\"full-width form-field-multiline-subscript\"\n >\n <mat-label>\n {{ setting.label }}\n </mat-label>\n <mat-select\n [(ngModel)]=\"setting.value\"\n [multiple]=\"setting.interfaceType===SettingInterfaceType.SelectMultiple\"\n [name]=\"'setting' + setting.id\">\n @for (item of setting.values | keyNameValue; track item) {\n <mat-option\n [value]=\"item.value\">\n {{ item.name }}\n </mat-option>\n }\n </mat-select>\n <mat-hint\n [innerHTML]=\"setting.instruction | linkify\">\n </mat-hint>\n </mat-form-field>\n }\n @if (setting.interfaceType===SettingInterfaceType.Date) {\n <mat-form-field\n class=\"full-width form-field-multiline-subscript\"\n >\n <mat-label>\n {{ setting.label }}\n </mat-label>\n <input\n matInput\n fsDatePicker\n [(ngModel)]=\"setting.value\"\n [name]=\"'setting' + setting.id\">\n <mat-hint\n [innerHTML]=\"setting.instruction | linkify\">\n </mat-hint>\n </mat-form-field>\n }\n @if (setting.interfaceType===SettingInterfaceType.Color) {\n <mat-form-field\n class=\"full-width form-field-multiline-subscript\"\n >\n <mat-label>\n {{ setting.label }}\n </mat-label>\n <input\n matInput\n fsColorPicker\n [(ngModel)]=\"setting.value\"\n [name]=\"'setting' + setting.id\">\n <mat-hint\n [innerHTML]=\"setting.instruction | linkify\">\n </mat-hint>\n </mat-form-field>\n }\n @if (setting.interfaceType===SettingInterfaceType.Time) {\n <mat-form-field\n class=\"full-width form-field-multiline-subscript\"\n >\n <mat-label>\n {{ setting.label }}\n </mat-label>\n <input\n matInput\n fsTimePicker\n [(ngModel)]=\"setting.value\"\n [name]=\"'setting' + setting.id\">\n <mat-hint\n [innerHTML]=\"setting.instruction | linkify\">\n </mat-hint>\n </mat-form-field>\n }\n @if (setting.interfaceType===SettingInterfaceType.File) {\n <fs-file-picker\n [allowRemove]=\"true\"\n [allowDownload]=\"true\"\n (select)=\"fileSelect.emit({ setting: setting, file: $event.file })\"\n (remove)=\"fileRemove.emit(setting)\"\n [url]=\"setting.value\">\n <div fsFileLabel>\n {{ setting.label }}\n </div>\n <div\n fsFileHint\n [innerHTML]=\"setting.instruction | linkify\">\n </div>\n </fs-file-picker>\n }\n </div>\n }\n <button\n mat-stroked-button\n color=\"primary\"\n type=\"button\"\n (click)=\"saveGroup(group)\">\n Save\n </button>\n </mat-expansion-panel>\n }\n</mat-accordion>", styles: [".mat-expansion-panel-header{font-size:19px}.full-width{width:100%}.title-row{flex-direction:row;box-sizing:border-box;display:flex;place-content:center flex-start;align-items:center;width:100%}.title-row .title{display:flex;flex:1}:host ::ng-deep .mat-expansion-panel-header-title{margin:0}:host ::ng-deep .mat-expansion-panel .actions{display:none}:host ::ng-deep .mat-expansion-panel.mat-expanded .actions{display:block}:host ::ng-deep .setting.has-instruction fs-file-picker fs-label-message{display:block;padding-bottom:1em}\n"], dependencies: [{ kind: "directive", type: MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: 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: FormsModule }, { 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.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "component", type: 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: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: FsDatePickerModule }, { kind: "component", type: i2.FsDatePickerComponent, selector: "[fsDatePicker]", inputs: ["minYear", "maxYear", "minDate", "maxDate", "startOfDay", "view", "format", "minutes"], outputs: ["change"] }, { kind: "component", type: i2.FsTimePickerComponent, selector: "[fsTimePicker]", inputs: ["view"] }, { kind: "ngmodule", type: FsColorPickerModule }, { kind: "component", type: i3.FsColorPickerComponent, selector: "[fsColorPicker]", inputs: ["showClear"] }, { kind: "ngmodule", type: FsFileModule }, { kind: "component", type: i4.FsFilePickerComponent, selector: "fs-file-picker", inputs: ["minWidth", "minHeight", "imageWidth", "imageHeight", "imageQuality", "label", "showFilename", "allowDownload", "allowReupload", "multiple", "allowRemove", "url", "file", "accept", "disabled", "previewWidth", "previewHeight"], outputs: ["select", "remove", "download"] }, { kind: "directive", type: i4.FsFileLabelDirective, selector: "[fsFileLabel]" }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "pipe", type: KeyNameValuePipe, name: "keyNameValue" }, { kind: "pipe", type: LinkifyPipe, name: "linkify" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
190
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: SettingsComponent, isStandalone: true, selector: "fs-system-settings", inputs: { loadSettings: "loadSettings", save: "save", fileUpload: "fileUpload", fileDelete: "fileDelete" }, ngImport: i0, template: "<mat-accordion>\n @for (group of groups; track group) {\n <mat-expansion-panel\n hideToggle\n >\n <mat-expansion-panel-header>\n <mat-panel-title>\n <div class=\"title-row\">\n <div class=\"title\">\n {{ group || 'General' }}\n </div>\n <div class=\"actions\">\n <button\n type=\"button\"\n [matTooltip]=\"'Export ' + (group || 'General') + ' Settings'\"\n mat-icon-button\n (click)=\"export($event, groupedSettings[group])\">\n <mat-icon>\n cloud_download\n </mat-icon>\n </button>\n <button\n type=\"button\"\n [matTooltip]=\"'Import ' + (group || 'General') + ' Settings'\"\n mat-icon-button\n (click)=\"import($event, group)\">\n <mat-icon>\n cloud_upload\n </mat-icon>\n </button>\n </div>\n </div>\n </mat-panel-title>\n </mat-expansion-panel-header>\n @for (setting of groupedSettings[group]; track setting) {\n <div\n hideToggle\n class=\"setting\"\n [ngClass]=\"{ 'has-instruction': !! setting.instruction }\">\n @if (setting.interfaceType===SettingInterfaceType.InputBox) {\n <mat-form-field\n class=\"full-width form-field-multiline-subscript\"\n >\n <mat-label>\n {{ setting.label }}\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"setting.value\"\n [name]=\"'setting' + setting.id\">\n @if (setting.instructions) {\n <button\n type=\"button\"\n matSuffix\n mat-icon-button\n matTooltip=\"Setup instructions\"\n (click)=\"openInstructions(setting)\">\n <mat-icon>\n help_outline\n </mat-icon>\n </button>\n }\n <mat-hint\n [innerHTML]=\"setting.instruction | linkify\">\n </mat-hint>\n </mat-form-field>\n }\n @if (setting.interfaceType===SettingInterfaceType.Textarea) {\n <mat-form-field\n class=\"full-width form-field-multiline-subscript\"\n >\n <mat-label>\n {{ setting.label }}\n </mat-label>\n <textarea\n matInput\n [(ngModel)]=\"setting.value\"\n [name]=\"'setting' + setting.id\">\n </textarea>\n @if (setting.instructions) {\n <button\n type=\"button\"\n matSuffix\n mat-icon-button\n matTooltip=\"Setup instructions\"\n (click)=\"openInstructions(setting)\">\n <mat-icon>\n help_outline\n </mat-icon>\n </button>\n }\n <mat-hint\n [innerHTML]=\"setting.instruction | linkify\">\n </mat-hint>\n </mat-form-field>\n }\n @if (setting.interfaceType===SettingInterfaceType.Select || setting.interfaceType===SettingInterfaceType.SelectMultiple) {\n <mat-form-field\n class=\"full-width form-field-multiline-subscript\"\n >\n <mat-label>\n {{ setting.label }}\n </mat-label>\n <mat-select\n [(ngModel)]=\"setting.value\"\n [multiple]=\"setting.interfaceType===SettingInterfaceType.SelectMultiple\"\n [name]=\"'setting' + setting.id\">\n @for (item of setting.values | keyNameValue; track item) {\n <mat-option\n [value]=\"item.value\">\n {{ item.name }}\n </mat-option>\n }\n </mat-select>\n @if (setting.instructions) {\n <button\n type=\"button\"\n matSuffix\n mat-icon-button\n matTooltip=\"Setup instructions\"\n (click)=\"openInstructions(setting)\">\n <mat-icon>\n help_outline\n </mat-icon>\n </button>\n }\n <mat-hint\n [innerHTML]=\"setting.instruction | linkify\">\n </mat-hint>\n </mat-form-field>\n }\n @if (setting.interfaceType===SettingInterfaceType.Date) {\n <mat-form-field\n class=\"full-width form-field-multiline-subscript\"\n >\n <mat-label>\n {{ setting.label }}\n </mat-label>\n <input\n matInput\n fsDatePicker\n [(ngModel)]=\"setting.value\"\n [name]=\"'setting' + setting.id\">\n @if (setting.instructions) {\n <button\n type=\"button\"\n matSuffix\n mat-icon-button\n matTooltip=\"Setup instructions\"\n (click)=\"openInstructions(setting)\">\n <mat-icon>\n help_outline\n </mat-icon>\n </button>\n }\n <mat-hint\n [innerHTML]=\"setting.instruction | linkify\">\n </mat-hint>\n </mat-form-field>\n }\n @if (setting.interfaceType===SettingInterfaceType.Color) {\n <mat-form-field\n class=\"full-width form-field-multiline-subscript\"\n >\n <mat-label>\n {{ setting.label }}\n </mat-label>\n <input\n matInput\n fsColorPicker\n [(ngModel)]=\"setting.value\"\n [name]=\"'setting' + setting.id\">\n @if (setting.instructions) {\n <button\n type=\"button\"\n matSuffix\n mat-icon-button\n matTooltip=\"Setup instructions\"\n (click)=\"openInstructions(setting)\">\n <mat-icon>\n help_outline\n </mat-icon>\n </button>\n }\n <mat-hint\n [innerHTML]=\"setting.instruction | linkify\">\n </mat-hint>\n </mat-form-field>\n }\n @if (setting.interfaceType===SettingInterfaceType.Time) {\n <mat-form-field\n class=\"full-width form-field-multiline-subscript\"\n >\n <mat-label>\n {{ setting.label }}\n </mat-label>\n <input\n matInput\n fsTimePicker\n [(ngModel)]=\"setting.value\"\n [name]=\"'setting' + setting.id\">\n @if (setting.instructions) {\n <button\n type=\"button\"\n matSuffix\n mat-icon-button\n matTooltip=\"Setup instructions\"\n (click)=\"openInstructions(setting)\">\n <mat-icon>\n help_outline\n </mat-icon>\n </button>\n }\n <mat-hint\n [innerHTML]=\"setting.instruction | linkify\">\n </mat-hint>\n </mat-form-field>\n }\n @if (setting.interfaceType===SettingInterfaceType.File) {\n <fs-file-picker\n [allowRemove]=\"true\"\n [allowDownload]=\"true\"\n (select)=\"selectFile(setting, $event.file)\"\n (remove)=\"removeFile(setting)\"\n [url]=\"setting.value\">\n <div fsFileLabel>\n {{ setting.label }}\n @if (setting.instructions) {\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Setup instructions\"\n (click)=\"openInstructions(setting)\">\n <mat-icon>\n help_outline\n </mat-icon>\n </button>\n }\n </div>\n <div\n fsFileHint\n [innerHTML]=\"setting.instruction | linkify\">\n </div>\n </fs-file-picker>\n }\n </div>\n }\n <button\n mat-stroked-button\n color=\"primary\"\n type=\"button\"\n (click)=\"saveGroup(group)\">\n Save\n </button>\n </mat-expansion-panel>\n }\n</mat-accordion>", styles: [".mat-expansion-panel-header{font-size:19px}.full-width{width:100%}.title-row{flex-direction:row;box-sizing:border-box;display:flex;place-content:center flex-start;align-items:center;width:100%}.title-row .title{display:flex;flex:1}:host ::ng-deep .mat-expansion-panel-header-title{margin:0}:host ::ng-deep .mat-expansion-panel .actions{display:none}:host ::ng-deep .mat-expansion-panel.mat-expanded .actions{display:block}:host ::ng-deep .setting.has-instruction fs-file-picker fs-label-message{display:block;padding-bottom:1em}\n"], dependencies: [{ kind: "directive", type: MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "component", type: MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: MatLabel, selector: "mat-label" }, { kind: "directive", type: 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: FormsModule }, { 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.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "component", type: 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: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: FsDatePickerModule }, { kind: "component", type: i2.FsDatePickerComponent, selector: "[fsDatePicker]", inputs: ["minYear", "maxYear", "minDate", "maxDate", "startOfDay", "view", "format", "minutes"], outputs: ["change"] }, { kind: "component", type: i2.FsTimePickerComponent, selector: "[fsTimePicker]", inputs: ["view"] }, { kind: "ngmodule", type: FsColorPickerModule }, { kind: "component", type: i3.FsColorPickerComponent, selector: "[fsColorPicker]", inputs: ["showClear"] }, { kind: "ngmodule", type: FsFileModule }, { kind: "component", type: i4.FsFilePickerComponent, selector: "fs-file-picker", inputs: ["minWidth", "minHeight", "imageWidth", "imageHeight", "imageQuality", "label", "showFilename", "allowDownload", "allowReupload", "multiple", "allowRemove", "url", "file", "accept", "disabled", "previewWidth", "previewHeight"], outputs: ["select", "remove", "download"] }, { kind: "directive", type: i4.FsFileLabelDirective, selector: "[fsFileLabel]" }, { kind: "component", type: MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "pipe", type: KeyNameValuePipe, name: "keyNameValue" }, { kind: "pipe", type: LinkifyPipe, name: "linkify" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
127
191
  }
128
192
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: SettingsComponent, decorators: [{
129
193
  type: Component,
@@ -141,6 +205,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
141
205
  MatInput,
142
206
  FormsModule,
143
207
  MatHint,
208
+ MatSuffix,
144
209
  MatSelect,
145
210
  MatOption,
146
211
  FsDatePickerModule,
@@ -149,14 +214,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
149
214
  MatButton,
150
215
  KeyNameValuePipe,
151
216
  LinkifyPipe,
152
- ], template: "<mat-accordion>\n @for (group of groups; track group) {\n <mat-expansion-panel\n hideToggle\n >\n <mat-expansion-panel-header>\n <mat-panel-title>\n <div class=\"title-row\">\n <div class=\"title\">\n {{ group || 'General' }}\n </div>\n <div class=\"actions\">\n <button\n type=\"button\"\n [matTooltip]=\"'Export ' + (group || 'General') + ' Settings'\"\n mat-icon-button\n (click)=\"export($event, groupedSettings[group])\">\n <mat-icon>\n cloud_download\n </mat-icon>\n </button>\n <button\n type=\"button\"\n [matTooltip]=\"'Import ' + (group || 'General') + ' Settings'\"\n mat-icon-button\n (click)=\"import($event, group)\">\n <mat-icon>\n cloud_upload\n </mat-icon>\n </button>\n </div>\n </div>\n </mat-panel-title>\n </mat-expansion-panel-header>\n @for (setting of groupedSettings[group]; track setting) {\n <div\n hideToggle\n class=\"setting\"\n [ngClass]=\"{ 'has-instruction': !! setting.instruction }\">\n @if (setting.interfaceType===SettingInterfaceType.InputBox) {\n <mat-form-field\n class=\"full-width form-field-multiline-subscript\"\n >\n <mat-label>\n {{ setting.label }}\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"setting.value\"\n [name]=\"'setting' + setting.id\">\n <mat-hint\n [innerHTML]=\"setting.instruction | linkify\">\n </mat-hint>\n </mat-form-field>\n }\n @if (setting.interfaceType===SettingInterfaceType.Textarea) {\n <mat-form-field\n class=\"full-width form-field-multiline-subscript\"\n >\n <mat-label>\n {{ setting.label }}\n </mat-label>\n <textarea\n matInput\n [(ngModel)]=\"setting.value\"\n [name]=\"'setting' + setting.id\">\n </textarea>\n <mat-hint\n [innerHTML]=\"setting.instruction | linkify\">\n </mat-hint>\n </mat-form-field>\n }\n @if (setting.interfaceType===SettingInterfaceType.Select || setting.interfaceType===SettingInterfaceType.SelectMultiple) {\n <mat-form-field\n class=\"full-width form-field-multiline-subscript\"\n >\n <mat-label>\n {{ setting.label }}\n </mat-label>\n <mat-select\n [(ngModel)]=\"setting.value\"\n [multiple]=\"setting.interfaceType===SettingInterfaceType.SelectMultiple\"\n [name]=\"'setting' + setting.id\">\n @for (item of setting.values | keyNameValue; track item) {\n <mat-option\n [value]=\"item.value\">\n {{ item.name }}\n </mat-option>\n }\n </mat-select>\n <mat-hint\n [innerHTML]=\"setting.instruction | linkify\">\n </mat-hint>\n </mat-form-field>\n }\n @if (setting.interfaceType===SettingInterfaceType.Date) {\n <mat-form-field\n class=\"full-width form-field-multiline-subscript\"\n >\n <mat-label>\n {{ setting.label }}\n </mat-label>\n <input\n matInput\n fsDatePicker\n [(ngModel)]=\"setting.value\"\n [name]=\"'setting' + setting.id\">\n <mat-hint\n [innerHTML]=\"setting.instruction | linkify\">\n </mat-hint>\n </mat-form-field>\n }\n @if (setting.interfaceType===SettingInterfaceType.Color) {\n <mat-form-field\n class=\"full-width form-field-multiline-subscript\"\n >\n <mat-label>\n {{ setting.label }}\n </mat-label>\n <input\n matInput\n fsColorPicker\n [(ngModel)]=\"setting.value\"\n [name]=\"'setting' + setting.id\">\n <mat-hint\n [innerHTML]=\"setting.instruction | linkify\">\n </mat-hint>\n </mat-form-field>\n }\n @if (setting.interfaceType===SettingInterfaceType.Time) {\n <mat-form-field\n class=\"full-width form-field-multiline-subscript\"\n >\n <mat-label>\n {{ setting.label }}\n </mat-label>\n <input\n matInput\n fsTimePicker\n [(ngModel)]=\"setting.value\"\n [name]=\"'setting' + setting.id\">\n <mat-hint\n [innerHTML]=\"setting.instruction | linkify\">\n </mat-hint>\n </mat-form-field>\n }\n @if (setting.interfaceType===SettingInterfaceType.File) {\n <fs-file-picker\n [allowRemove]=\"true\"\n [allowDownload]=\"true\"\n (select)=\"fileSelect.emit({ setting: setting, file: $event.file })\"\n (remove)=\"fileRemove.emit(setting)\"\n [url]=\"setting.value\">\n <div fsFileLabel>\n {{ setting.label }}\n </div>\n <div\n fsFileHint\n [innerHTML]=\"setting.instruction | linkify\">\n </div>\n </fs-file-picker>\n }\n </div>\n }\n <button\n mat-stroked-button\n color=\"primary\"\n type=\"button\"\n (click)=\"saveGroup(group)\">\n Save\n </button>\n </mat-expansion-panel>\n }\n</mat-accordion>", styles: [".mat-expansion-panel-header{font-size:19px}.full-width{width:100%}.title-row{flex-direction:row;box-sizing:border-box;display:flex;place-content:center flex-start;align-items:center;width:100%}.title-row .title{display:flex;flex:1}:host ::ng-deep .mat-expansion-panel-header-title{margin:0}:host ::ng-deep .mat-expansion-panel .actions{display:none}:host ::ng-deep .mat-expansion-panel.mat-expanded .actions{display:block}:host ::ng-deep .setting.has-instruction fs-file-picker fs-label-message{display:block;padding-bottom:1em}\n"] }]
217
+ ], template: "<mat-accordion>\n @for (group of groups; track group) {\n <mat-expansion-panel\n hideToggle\n >\n <mat-expansion-panel-header>\n <mat-panel-title>\n <div class=\"title-row\">\n <div class=\"title\">\n {{ group || 'General' }}\n </div>\n <div class=\"actions\">\n <button\n type=\"button\"\n [matTooltip]=\"'Export ' + (group || 'General') + ' Settings'\"\n mat-icon-button\n (click)=\"export($event, groupedSettings[group])\">\n <mat-icon>\n cloud_download\n </mat-icon>\n </button>\n <button\n type=\"button\"\n [matTooltip]=\"'Import ' + (group || 'General') + ' Settings'\"\n mat-icon-button\n (click)=\"import($event, group)\">\n <mat-icon>\n cloud_upload\n </mat-icon>\n </button>\n </div>\n </div>\n </mat-panel-title>\n </mat-expansion-panel-header>\n @for (setting of groupedSettings[group]; track setting) {\n <div\n hideToggle\n class=\"setting\"\n [ngClass]=\"{ 'has-instruction': !! setting.instruction }\">\n @if (setting.interfaceType===SettingInterfaceType.InputBox) {\n <mat-form-field\n class=\"full-width form-field-multiline-subscript\"\n >\n <mat-label>\n {{ setting.label }}\n </mat-label>\n <input\n matInput\n [(ngModel)]=\"setting.value\"\n [name]=\"'setting' + setting.id\">\n @if (setting.instructions) {\n <button\n type=\"button\"\n matSuffix\n mat-icon-button\n matTooltip=\"Setup instructions\"\n (click)=\"openInstructions(setting)\">\n <mat-icon>\n help_outline\n </mat-icon>\n </button>\n }\n <mat-hint\n [innerHTML]=\"setting.instruction | linkify\">\n </mat-hint>\n </mat-form-field>\n }\n @if (setting.interfaceType===SettingInterfaceType.Textarea) {\n <mat-form-field\n class=\"full-width form-field-multiline-subscript\"\n >\n <mat-label>\n {{ setting.label }}\n </mat-label>\n <textarea\n matInput\n [(ngModel)]=\"setting.value\"\n [name]=\"'setting' + setting.id\">\n </textarea>\n @if (setting.instructions) {\n <button\n type=\"button\"\n matSuffix\n mat-icon-button\n matTooltip=\"Setup instructions\"\n (click)=\"openInstructions(setting)\">\n <mat-icon>\n help_outline\n </mat-icon>\n </button>\n }\n <mat-hint\n [innerHTML]=\"setting.instruction | linkify\">\n </mat-hint>\n </mat-form-field>\n }\n @if (setting.interfaceType===SettingInterfaceType.Select || setting.interfaceType===SettingInterfaceType.SelectMultiple) {\n <mat-form-field\n class=\"full-width form-field-multiline-subscript\"\n >\n <mat-label>\n {{ setting.label }}\n </mat-label>\n <mat-select\n [(ngModel)]=\"setting.value\"\n [multiple]=\"setting.interfaceType===SettingInterfaceType.SelectMultiple\"\n [name]=\"'setting' + setting.id\">\n @for (item of setting.values | keyNameValue; track item) {\n <mat-option\n [value]=\"item.value\">\n {{ item.name }}\n </mat-option>\n }\n </mat-select>\n @if (setting.instructions) {\n <button\n type=\"button\"\n matSuffix\n mat-icon-button\n matTooltip=\"Setup instructions\"\n (click)=\"openInstructions(setting)\">\n <mat-icon>\n help_outline\n </mat-icon>\n </button>\n }\n <mat-hint\n [innerHTML]=\"setting.instruction | linkify\">\n </mat-hint>\n </mat-form-field>\n }\n @if (setting.interfaceType===SettingInterfaceType.Date) {\n <mat-form-field\n class=\"full-width form-field-multiline-subscript\"\n >\n <mat-label>\n {{ setting.label }}\n </mat-label>\n <input\n matInput\n fsDatePicker\n [(ngModel)]=\"setting.value\"\n [name]=\"'setting' + setting.id\">\n @if (setting.instructions) {\n <button\n type=\"button\"\n matSuffix\n mat-icon-button\n matTooltip=\"Setup instructions\"\n (click)=\"openInstructions(setting)\">\n <mat-icon>\n help_outline\n </mat-icon>\n </button>\n }\n <mat-hint\n [innerHTML]=\"setting.instruction | linkify\">\n </mat-hint>\n </mat-form-field>\n }\n @if (setting.interfaceType===SettingInterfaceType.Color) {\n <mat-form-field\n class=\"full-width form-field-multiline-subscript\"\n >\n <mat-label>\n {{ setting.label }}\n </mat-label>\n <input\n matInput\n fsColorPicker\n [(ngModel)]=\"setting.value\"\n [name]=\"'setting' + setting.id\">\n @if (setting.instructions) {\n <button\n type=\"button\"\n matSuffix\n mat-icon-button\n matTooltip=\"Setup instructions\"\n (click)=\"openInstructions(setting)\">\n <mat-icon>\n help_outline\n </mat-icon>\n </button>\n }\n <mat-hint\n [innerHTML]=\"setting.instruction | linkify\">\n </mat-hint>\n </mat-form-field>\n }\n @if (setting.interfaceType===SettingInterfaceType.Time) {\n <mat-form-field\n class=\"full-width form-field-multiline-subscript\"\n >\n <mat-label>\n {{ setting.label }}\n </mat-label>\n <input\n matInput\n fsTimePicker\n [(ngModel)]=\"setting.value\"\n [name]=\"'setting' + setting.id\">\n @if (setting.instructions) {\n <button\n type=\"button\"\n matSuffix\n mat-icon-button\n matTooltip=\"Setup instructions\"\n (click)=\"openInstructions(setting)\">\n <mat-icon>\n help_outline\n </mat-icon>\n </button>\n }\n <mat-hint\n [innerHTML]=\"setting.instruction | linkify\">\n </mat-hint>\n </mat-form-field>\n }\n @if (setting.interfaceType===SettingInterfaceType.File) {\n <fs-file-picker\n [allowRemove]=\"true\"\n [allowDownload]=\"true\"\n (select)=\"selectFile(setting, $event.file)\"\n (remove)=\"removeFile(setting)\"\n [url]=\"setting.value\">\n <div fsFileLabel>\n {{ setting.label }}\n @if (setting.instructions) {\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Setup instructions\"\n (click)=\"openInstructions(setting)\">\n <mat-icon>\n help_outline\n </mat-icon>\n </button>\n }\n </div>\n <div\n fsFileHint\n [innerHTML]=\"setting.instruction | linkify\">\n </div>\n </fs-file-picker>\n }\n </div>\n }\n <button\n mat-stroked-button\n color=\"primary\"\n type=\"button\"\n (click)=\"saveGroup(group)\">\n Save\n </button>\n </mat-expansion-panel>\n }\n</mat-accordion>", styles: [".mat-expansion-panel-header{font-size:19px}.full-width{width:100%}.title-row{flex-direction:row;box-sizing:border-box;display:flex;place-content:center flex-start;align-items:center;width:100%}.title-row .title{display:flex;flex:1}:host ::ng-deep .mat-expansion-panel-header-title{margin:0}:host ::ng-deep .mat-expansion-panel .actions{display:none}:host ::ng-deep .mat-expansion-panel.mat-expanded .actions{display:block}:host ::ng-deep .setting.has-instruction fs-file-picker fs-label-message{display:block;padding-bottom:1em}\n"] }]
153
218
  }], propDecorators: { loadSettings: [{
154
219
  type: Input
155
220
  }], save: [{
156
221
  type: Input
157
- }], fileRemove: [{
158
- type: Output
159
- }], fileSelect: [{
160
- type: Output
222
+ }], fileUpload: [{
223
+ type: Input
224
+ }], fileDelete: [{
225
+ type: Input
161
226
  }] } });
162
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL3N5c3RlbS9jb21wb25lbnRzL3NldHRpbmdzL3NldHRpbmdzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zeXN0ZW0vY29tcG9uZW50cy9zZXR0aW5ncy9zZXR0aW5ncy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuSSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFJOUMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMvSCxPQUFPLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbkUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7QUFpQ3ZELE1BQU0sT0FBTyxpQkFBaUI7SUFDcEIsUUFBUSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUM3QixVQUFVLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ2pDLE9BQU8sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDM0IsTUFBTSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBRzNCLFlBQVksQ0FBK0I7SUFDM0MsSUFBSSxDQUFnRDtJQUVuRCxVQUFVLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUNoQyxVQUFVLEdBQUcsSUFBSSxZQUFZLEVBQWdDLENBQUM7SUFFeEUsZUFBZSxHQUFHLEVBQUUsQ0FBQztJQUNyQixNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ1osb0JBQW9CLEdBQUcsb0JBQW9CLENBQUM7SUFFNUMsUUFBUTtRQUNiLElBQUksQ0FBQyxZQUFZLENBQUM7WUFDaEIsT0FBTyxFQUFFLElBQUk7U0FDZCxDQUFDO2FBQ0MsU0FBUyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDdEIsUUFBUSxHQUFHLFFBQVE7aUJBQ2hCLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUNsQixPQUFPLE9BQU8sQ0FBQyxhQUFhLEtBQUssb0JBQW9CLENBQUMsSUFBSSxDQUFDO1lBQzdELENBQUMsQ0FBQztpQkFDRCxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDZixRQUFRLE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDOUIsS0FBSyxvQkFBb0IsQ0FBQyxJQUFJLENBQUM7b0JBQy9CLEtBQUssb0JBQW9CLENBQUMsSUFBSTt3QkFDNUIsT0FBTzs0QkFDTCxHQUFHLE9BQU87NEJBQ1YsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO3lCQUM1QixDQUFDO29CQUVKLEtBQUssb0JBQW9CLENBQUMsY0FBYzt3QkFDdEMsT0FBTzs0QkFDTCxHQUFHLE9BQU87NEJBQ1YsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO3lCQUN6RCxDQUFDO2dCQUNOLENBQUM7Z0JBRUQsT0FBTyxPQUFPLENBQUM7WUFDakIsQ0FBQyxDQUFDLENBQUM7WUFFTCxJQUFJLENBQUMsZUFBZSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7Z0JBQ3JELElBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztvQkFDbkMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUM7Z0JBQ3pCLENBQUM7Z0JBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRTdCLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBRVAsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLE1BQU0sQ0FBQyxLQUFjLEVBQUUsUUFBUTtRQUNwQyxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3BDLE9BQU87Z0JBQ0wsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO2dCQUNsQixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7Z0JBQ3BCLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSzthQUNyQixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRU0sTUFBTSxDQUFDLEtBQWMsRUFBRSxLQUFLO1FBQ2pDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUNqQixLQUFLLEVBQUUsYUFBYTtZQUNwQixLQUFLLEVBQUUsaUJBQWlCO1lBQ3hCLFdBQVcsRUFBRSxRQUFRO1lBQ3JCLFFBQVEsRUFBRSxJQUFJO1NBQ2YsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEtBQWEsRUFBRSxFQUFFO1lBQzdCLElBQUksS0FBSyxFQUFFLENBQUM7Z0JBQ1YsSUFBSSxDQUFDO29CQUNILE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzdDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBRS9CLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTt3QkFDcEIsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFOzRCQUNsQyxPQUFPLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQzt3QkFDOUIsQ0FBQyxDQUFDLENBQUM7d0JBRUgsSUFBSSxPQUFPLEVBQUUsQ0FBQzs0QkFDWixNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQzt3QkFDL0IsQ0FBQztvQkFDSCxDQUFDLENBQUMsQ0FBQztvQkFFSCxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUM3QixDQUFDO2dCQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQ1gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pCLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sU0FBUyxDQUFDLEtBQUs7UUFDcEIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO1lBQy9DLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDcEQsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRVAsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDO2FBQ3JCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7dUdBbEhVLGlCQUFpQjsyRkFBakIsaUJBQWlCLHVNQ3pEOUIsa2xNQTZLZ0IsNGtCRDNJUixZQUFZLCtJQUNaLGlCQUFpQixzTEFDakIsdUJBQXVCLGtJQUN2QixzQkFBc0IsNERBQ3RCLGFBQWEsNkZBQ2IsVUFBVSxpUkFDVixPQUFPLDJJQUNQLE9BQU8sb0ZBQ1AsWUFBWSw0TEFDWixRQUFRLHNEQUNSLFFBQVEsZ1VBQ1IsV0FBVywrbUJBQ1gsT0FBTyw4RUFDUCxTQUFTLHdlQUNULFNBQVMsb0pBQ1Qsa0JBQWtCLDRVQUNsQixtQkFBbUIsMElBQ25CLFlBQVksMGRBQ1osU0FBUyw0S0FDVCxnQkFBZ0IsZ0RBQ2hCLFdBQVc7OzJGQUdOLGlCQUFpQjtrQkE5QjdCLFNBQVM7K0JBQ0ksb0JBQW9CLG1CQUdiLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNMLFlBQVk7d0JBQ1osaUJBQWlCO3dCQUNqQix1QkFBdUI7d0JBQ3ZCLHNCQUFzQjt3QkFDdEIsYUFBYTt3QkFDYixVQUFVO3dCQUNWLE9BQU87d0JBQ1AsT0FBTzt3QkFDUCxZQUFZO3dCQUNaLFFBQVE7d0JBQ1IsUUFBUTt3QkFDUixXQUFXO3dCQUNYLE9BQU87d0JBQ1AsU0FBUzt3QkFDVCxTQUFTO3dCQUNULGtCQUFrQjt3QkFDbEIsbUJBQW1CO3dCQUNuQixZQUFZO3dCQUNaLFNBQVM7d0JBQ1QsZ0JBQWdCO3dCQUNoQixXQUFXO3FCQUNkOzhCQVNhLFlBQVk7c0JBQTNCLEtBQUs7Z0JBQ1UsSUFBSTtzQkFBbkIsS0FBSztnQkFFVyxVQUFVO3NCQUExQixNQUFNO2dCQUNVLFVBQVU7c0JBQTFCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBGc0NsaXBib2FyZCB9IGZyb20gJ0BmaXJlc3RpdGNoL2NsaXBib2FyZCc7XG5pbXBvcnQgeyBwYXJzZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2RhdGUnO1xuaW1wb3J0IHsgRnNNZXNzYWdlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvbWVzc2FnZSc7XG5pbXBvcnQgeyBGc1Byb21wdCB9IGZyb20gJ0BmaXJlc3RpdGNoL3Byb21wdCc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2V0dGluZ0ludGVyZmFjZVR5cGUgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBNYXRBY2NvcmRpb24sIE1hdEV4cGFuc2lvblBhbmVsLCBNYXRFeHBhbnNpb25QYW5lbEhlYWRlciwgTWF0RXhwYW5zaW9uUGFuZWxUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2V4cGFuc2lvbic7XG5pbXBvcnQgeyBNYXRJY29uQnV0dG9uLCBNYXRCdXR0b24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0VG9vbHRpcCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuaW1wb3J0IHsgTWF0SWNvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGQsIE1hdExhYmVsLCBNYXRIaW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0U2VsZWN0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IE1hdE9wdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHsgRnNEYXRlUGlja2VyTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvZGF0ZXBpY2tlcic7XG5pbXBvcnQgeyBGc0NvbG9yUGlja2VyTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvY29sb3JwaWNrZXInO1xuaW1wb3J0IHsgRnNGaWxlTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvZmlsZSc7XG5pbXBvcnQgeyBLZXlOYW1lVmFsdWVQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMva2V5LW5hbWUtdmFsdWUucGlwZSc7XG5pbXBvcnQgeyBMaW5raWZ5UGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL2xpbmtpZnkucGlwZSc7XG5cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmcy1zeXN0ZW0tc2V0dGluZ3MnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zZXR0aW5ncy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc2V0dGluZ3MuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgTWF0QWNjb3JkaW9uLFxuICAgICAgICBNYXRFeHBhbnNpb25QYW5lbCxcbiAgICAgICAgTWF0RXhwYW5zaW9uUGFuZWxIZWFkZXIsXG4gICAgICAgIE1hdEV4cGFuc2lvblBhbmVsVGl0bGUsXG4gICAgICAgIE1hdEljb25CdXR0b24sXG4gICAgICAgIE1hdFRvb2x0aXAsXG4gICAgICAgIE1hdEljb24sXG4gICAgICAgIE5nQ2xhc3MsXG4gICAgICAgIE1hdEZvcm1GaWVsZCxcbiAgICAgICAgTWF0TGFiZWwsXG4gICAgICAgIE1hdElucHV0LFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgTWF0SGludCxcbiAgICAgICAgTWF0U2VsZWN0LFxuICAgICAgICBNYXRPcHRpb24sXG4gICAgICAgIEZzRGF0ZVBpY2tlck1vZHVsZSxcbiAgICAgICAgRnNDb2xvclBpY2tlck1vZHVsZSxcbiAgICAgICAgRnNGaWxlTW9kdWxlLFxuICAgICAgICBNYXRCdXR0b24sXG4gICAgICAgIEtleU5hbWVWYWx1ZVBpcGUsXG4gICAgICAgIExpbmtpZnlQaXBlLFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIFNldHRpbmdzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSBfbWVzc2FnZSA9IGluamVjdChGc01lc3NhZ2UpO1xuICBwcml2YXRlIF9jbGlwYm9hcmQgPSBpbmplY3QoRnNDbGlwYm9hcmQpO1xuICBwcml2YXRlIF9wcm9tcHQgPSBpbmplY3QoRnNQcm9tcHQpO1xuICBwcml2YXRlIF9jZFJlZiA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cblxuICBASW5wdXQoKSBwdWJsaWMgbG9hZFNldHRpbmdzOiAocXVlcnkpID0+IE9ic2VydmFibGU8YW55W10+O1xuICBASW5wdXQoKSBwdWJsaWMgc2F2ZTogKGRhdGE6IGFueSwgZ3JvdXA6IHN0cmluZykgPT4gT2JzZXJ2YWJsZTxhbnk+O1xuXG4gIEBPdXRwdXQoKSBwdWJsaWMgZmlsZVJlbW92ZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHB1YmxpYyBmaWxlU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjx7IHNldHRpbmc6IGFueSwgZmlsZTogQmxvYiB9PigpO1xuXG4gIHB1YmxpYyBncm91cGVkU2V0dGluZ3MgPSBbXTtcbiAgcHVibGljIGdyb3VwcyA9IFtdO1xuICBwdWJsaWMgU2V0dGluZ0ludGVyZmFjZVR5cGUgPSBTZXR0aW5nSW50ZXJmYWNlVHlwZTtcblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkU2V0dGluZ3Moe1xuICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICB9KVxuICAgICAgLnN1YnNjcmliZSgoc2V0dGluZ3MpID0+IHtcbiAgICAgICAgc2V0dGluZ3MgPSBzZXR0aW5nc1xuICAgICAgICAgIC5maWx0ZXIoKHNldHRpbmcpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBzZXR0aW5nLmludGVyZmFjZVR5cGUgIT09IFNldHRpbmdJbnRlcmZhY2VUeXBlLk5vbmU7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAubWFwKChzZXR0aW5nKSA9PiB7XG4gICAgICAgICAgICBzd2l0Y2ggKHNldHRpbmcuaW50ZXJmYWNlVHlwZSkge1xuICAgICAgICAgICAgICBjYXNlIFNldHRpbmdJbnRlcmZhY2VUeXBlLkRhdGU6XG4gICAgICAgICAgICAgIGNhc2UgU2V0dGluZ0ludGVyZmFjZVR5cGUuVGltZTpcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgLi4uc2V0dGluZyxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOiBwYXJzZShzZXR0aW5nLnZhbHVlKSxcbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIGNhc2UgU2V0dGluZ0ludGVyZmFjZVR5cGUuU2VsZWN0TXVsdGlwbGU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIC4uLnNldHRpbmcsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogQXJyYXkuaXNBcnJheShzZXR0aW5nLnZhbHVlKSA/IHNldHRpbmcudmFsdWUgOiBbXSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICByZXR1cm4gc2V0dGluZztcbiAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmdyb3VwZWRTZXR0aW5ncyA9IHNldHRpbmdzLnJlZHVjZSgoYWNjdW0sIGl0ZW0pID0+IHtcbiAgICAgICAgICBpZihhY2N1bVtpdGVtLmdyb3VwXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhY2N1bVtpdGVtLmdyb3VwXSA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhY2N1bVtpdGVtLmdyb3VwXS5wdXNoKGl0ZW0pO1xuXG4gICAgICAgICAgcmV0dXJuIGFjY3VtO1xuICAgICAgICB9LCB7fSk7XG4gICAgICAgIFxuICAgICAgICB0aGlzLmdyb3VwcyA9IE9iamVjdC5rZXlzKHRoaXMuZ3JvdXBlZFNldHRpbmdzKTtcbiAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBleHBvcnQoZXZlbnQ6IFVJRXZlbnQsIHNldHRpbmdzKTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgY29uc3QgZGF0YSA9IHNldHRpbmdzLm1hcCgoc2V0dGluZykgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogc2V0dGluZy5uYW1lLFxuICAgICAgICB2YWx1ZTogc2V0dGluZy52YWx1ZSxcbiAgICAgICAgZ3JvdXA6IHNldHRpbmcuZ3JvdXAsXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgdGhpcy5fY2xpcGJvYXJkLmNvcHkoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuICAgIHRoaXMuX21lc3NhZ2Uuc3VjY2VzcygnQ29waWVkIHRvIGNsaXBib2FyZCcpO1xuICB9XG5cbiAgcHVibGljIGltcG9ydChldmVudDogVUlFdmVudCwgZ3JvdXApOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLl9wcm9tcHQuaW5wdXQoe1xuICAgICAgbGFiZWw6ICdKU09OIEltcG9ydCcsXG4gICAgICB0aXRsZTogJ0ltcG9ydCBTZXR0aW5ncycsXG4gICAgICBjb21taXRMYWJlbDogJ0ltcG9ydCcsXG4gICAgICByZXF1aXJlZDogdHJ1ZSxcbiAgICB9KS5zdWJzY3JpYmUoKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5ncm91cGVkU2V0dGluZ3NbZ3JvdXBdO1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKHZhbHVlKTtcblxuICAgICAgICAgIGRhdGEuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2V0dGluZyA9IHNldHRpbmdzLmZpbmQoKHMpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ubmFtZSA9PT0gcy5uYW1lO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChzZXR0aW5nKSB7XG4gICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oc2V0dGluZywgaXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRoaXMuX21lc3NhZ2UuZXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzYXZlR3JvdXAoZ3JvdXApOiB2b2lkIHtcbiAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuZ3JvdXBlZFNldHRpbmdzW2dyb3VwXTtcbiAgICBjb25zdCB2YWx1ZXMgPSBzZXR0aW5ncy5yZWR1Y2UoKHJlc3VsdCwgdmFsdWUpID0+IHtcbiAgICAgIHJldHVybiAocmVzdWx0W3ZhbHVlLm5hbWVdID0gdmFsdWUudmFsdWUsIHJlc3VsdCk7XG4gICAgfSwge30pO1xuXG4gICAgdGhpcy5zYXZlKGdyb3VwLCB2YWx1ZXMpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdDaGFuZ2VzIFNhdmVkJyk7XG4gICAgICB9KTtcbiAgfVxufVxuIiwiPG1hdC1hY2NvcmRpb24+XG4gIEBmb3IgKGdyb3VwIG9mIGdyb3VwczsgdHJhY2sgZ3JvdXApIHtcbiAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbFxuICAgICAgaGlkZVRvZ2dsZVxuICAgICAgPlxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZS1yb3dcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPlxuICAgICAgICAgICAgICB7eyBncm91cCB8fCAnR2VuZXJhbCcgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbnNcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidFeHBvcnQgJyArIChncm91cCB8fCAnR2VuZXJhbCcpICsgJyBTZXR0aW5ncydcIlxuICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9XCJleHBvcnQoJGV2ZW50LCBncm91cGVkU2V0dGluZ3NbZ3JvdXBdKVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIGNsb3VkX2Rvd25sb2FkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInSW1wb3J0ICcgKyAoZ3JvdXAgfHwgJ0dlbmVyYWwnKSArICcgU2V0dGluZ3MnXCJcbiAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiaW1wb3J0KCRldmVudCwgZ3JvdXApXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgY2xvdWRfdXBsb2FkXG4gICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgQGZvciAoc2V0dGluZyBvZiBncm91cGVkU2V0dGluZ3NbZ3JvdXBdOyB0cmFjayBzZXR0aW5nKSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBoaWRlVG9nZ2xlXG4gICAgICAgICAgY2xhc3M9XCJzZXR0aW5nXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7ICdoYXMtaW5zdHJ1Y3Rpb24nOiAhISBzZXR0aW5nLmluc3RydWN0aW9uIH1cIj5cbiAgICAgICAgICBAaWYgKHNldHRpbmcuaW50ZXJmYWNlVHlwZT09PVNldHRpbmdJbnRlcmZhY2VUeXBlLklucHV0Qm94KSB7XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmdWxsLXdpZHRoIGZvcm0tZmllbGQtbXVsdGlsaW5lLXN1YnNjcmlwdFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICB7eyBzZXR0aW5nLmxhYmVsIH19XG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2V0dGluZy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgW25hbWVdPVwiJ3NldHRpbmcnICsgc2V0dGluZy5pZFwiPlxuICAgICAgICAgICAgICA8bWF0LWhpbnRcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInNldHRpbmcuaW5zdHJ1Y3Rpb24gfCBsaW5raWZ5XCI+XG4gICAgICAgICAgICAgIDwvbWF0LWhpbnQ+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKHNldHRpbmcuaW50ZXJmYWNlVHlwZT09PVNldHRpbmdJbnRlcmZhY2VUeXBlLlRleHRhcmVhKSB7XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmdWxsLXdpZHRoIGZvcm0tZmllbGQtbXVsdGlsaW5lLXN1YnNjcmlwdFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICB7eyBzZXR0aW5nLmxhYmVsIH19XG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2V0dGluZy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgW25hbWVdPVwiJ3NldHRpbmcnICsgc2V0dGluZy5pZFwiPlxuICAgICAgICAgICAgICA8L3RleHRhcmVhPlxuICAgICAgICAgICAgICA8bWF0LWhpbnRcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInNldHRpbmcuaW5zdHJ1Y3Rpb24gfCBsaW5raWZ5XCI+XG4gICAgICAgICAgICAgIDwvbWF0LWhpbnQ+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKHNldHRpbmcuaW50ZXJmYWNlVHlwZT09PVNldHRpbmdJbnRlcmZhY2VUeXBlLlNlbGVjdCB8fCBzZXR0aW5nLmludGVyZmFjZVR5cGU9PT1TZXR0aW5nSW50ZXJmYWNlVHlwZS5TZWxlY3RNdWx0aXBsZSkge1xuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkXG4gICAgICAgICAgICAgIGNsYXNzPVwiZnVsbC13aWR0aCBmb3JtLWZpZWxkLW11bHRpbGluZS1zdWJzY3JpcHRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAge3sgc2V0dGluZy5sYWJlbCB9fVxuICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNldHRpbmcudmFsdWVcIlxuICAgICAgICAgICAgICAgIFttdWx0aXBsZV09XCJzZXR0aW5nLmludGVyZmFjZVR5cGU9PT1TZXR0aW5nSW50ZXJmYWNlVHlwZS5TZWxlY3RNdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgW25hbWVdPVwiJ3NldHRpbmcnICsgc2V0dGluZy5pZFwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2Ygc2V0dGluZy52YWx1ZXMgfCBrZXlOYW1lVmFsdWU7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtLnZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8bWF0LWhpbnRcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInNldHRpbmcuaW5zdHJ1Y3Rpb24gfCBsaW5raWZ5XCI+XG4gICAgICAgICAgICAgIDwvbWF0LWhpbnQ+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKHNldHRpbmcuaW50ZXJmYWNlVHlwZT09PVNldHRpbmdJbnRlcmZhY2VUeXBlLkRhdGUpIHtcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZFxuICAgICAgICAgICAgICBjbGFzcz1cImZ1bGwtd2lkdGggZm9ybS1maWVsZC1tdWx0aWxpbmUtc3Vic2NyaXB0XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIHt7IHNldHRpbmcubGFiZWwgfX1cbiAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgZnNEYXRlUGlja2VyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZXR0aW5nLnZhbHVlXCJcbiAgICAgICAgICAgICAgICBbbmFtZV09XCInc2V0dGluZycgKyBzZXR0aW5nLmlkXCI+XG4gICAgICAgICAgICAgIDxtYXQtaGludFxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwic2V0dGluZy5pbnN0cnVjdGlvbiB8IGxpbmtpZnlcIj5cbiAgICAgICAgICAgICAgPC9tYXQtaGludD5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoc2V0dGluZy5pbnRlcmZhY2VUeXBlPT09U2V0dGluZ0ludGVyZmFjZVR5cGUuQ29sb3IpIHtcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZFxuICAgICAgICAgICAgICBjbGFzcz1cImZ1bGwtd2lkdGggZm9ybS1maWVsZC1tdWx0aWxpbmUtc3Vic2NyaXB0XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIHt7IHNldHRpbmcubGFiZWwgfX1cbiAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgZnNDb2xvclBpY2tlclxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2V0dGluZy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgW25hbWVdPVwiJ3NldHRpbmcnICsgc2V0dGluZy5pZFwiPlxuICAgICAgICAgICAgICA8bWF0LWhpbnRcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInNldHRpbmcuaW5zdHJ1Y3Rpb24gfCBsaW5raWZ5XCI+XG4gICAgICAgICAgICAgIDwvbWF0LWhpbnQ+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKHNldHRpbmcuaW50ZXJmYWNlVHlwZT09PVNldHRpbmdJbnRlcmZhY2VUeXBlLlRpbWUpIHtcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZFxuICAgICAgICAgICAgICBjbGFzcz1cImZ1bGwtd2lkdGggZm9ybS1maWVsZC1tdWx0aWxpbmUtc3Vic2NyaXB0XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIHt7IHNldHRpbmcubGFiZWwgfX1cbiAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgZnNUaW1lUGlja2VyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZXR0aW5nLnZhbHVlXCJcbiAgICAgICAgICAgICAgICBbbmFtZV09XCInc2V0dGluZycgKyBzZXR0aW5nLmlkXCI+XG4gICAgICAgICAgICAgIDxtYXQtaGludFxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwic2V0dGluZy5pbnN0cnVjdGlvbiB8IGxpbmtpZnlcIj5cbiAgICAgICAgICAgICAgPC9tYXQtaGludD5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoc2V0dGluZy5pbnRlcmZhY2VUeXBlPT09U2V0dGluZ0ludGVyZmFjZVR5cGUuRmlsZSkge1xuICAgICAgICAgICAgPGZzLWZpbGUtcGlja2VyXG4gICAgICAgICAgICAgIFthbGxvd1JlbW92ZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgW2FsbG93RG93bmxvYWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIChzZWxlY3QpPVwiZmlsZVNlbGVjdC5lbWl0KHsgc2V0dGluZzogc2V0dGluZywgZmlsZTogJGV2ZW50LmZpbGUgfSlcIlxuICAgICAgICAgICAgICAocmVtb3ZlKT1cImZpbGVSZW1vdmUuZW1pdChzZXR0aW5nKVwiXG4gICAgICAgICAgICAgIFt1cmxdPVwic2V0dGluZy52YWx1ZVwiPlxuICAgICAgICAgICAgICA8ZGl2IGZzRmlsZUxhYmVsPlxuICAgICAgICAgICAgICAgIHt7IHNldHRpbmcubGFiZWwgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBmc0ZpbGVIaW50XG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJzZXR0aW5nLmluc3RydWN0aW9uIHwgbGlua2lmeVwiPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZnMtZmlsZS1waWNrZXI+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIDxidXR0b25cbiAgICAgICAgbWF0LXN0cm9rZWQtYnV0dG9uXG4gICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwic2F2ZUdyb3VwKGdyb3VwKVwiPlxuICAgICAgICBTYXZlXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gIH1cbjwvbWF0LWFjY29yZGlvbj4iXX0=
227
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL3N5c3RlbS9jb21wb25lbnRzL3NldHRpbmdzL3NldHRpbmdzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zeXN0ZW0vY29tcG9uZW50cy9zZXR0aW5ncy9zZXR0aW5ncy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFN0csT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDekMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUk5QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLHVCQUF1QixFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0gsT0FBTyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2pELE9BQU8sRUFBRSxPQUFPLEVBQUUs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QUNaLGlCQUFpQixzTEFDakIsdUJBQXVCLGtJQUN2QixzQkFBc0IsNERBQ3RCLGFBQWEsNkZBQ2IsVUFBVSxpUkFDVixPQUFPLDJJQUNQLE9BQU8sb0ZBQ1AsWUFBWSw0TEFDWixRQUFRLHNEQUNSLFFBQVEsZ1VBQ1IsV0FBVywrbUJBQ1gsT0FBTyw4RUFDUCxTQUFTLHFIQUNULFNBQVMsd2VBQ1QsU0FBUyxvSkFDVCxrQkFBa0IsNFVBQ2xCLG1CQUFtQiwwSUFDbkIsWUFBWSwwZEFDWixTQUFTLDRLQUNULGdCQUFnQixnREFDaEIsV0FBVzs7MkZBR04saUJBQWlCO2tCQS9CN0IsU0FBUzsrQkFDSSxvQkFBb0IsbUJBR2IsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxJQUFJLFdBQ1A7d0JBQ0wsWUFBWTt3QkFDWixpQkFBaUI7d0JBQ2pCLHVCQUF1Qjt3QkFDdkIsc0JBQXNCO3dCQUN0QixhQUFhO3dCQUNiLFVBQVU7d0JBQ1YsT0FBTzt3QkFDUCxPQUFPO3dCQUNQLFlBQVk7d0JBQ1osUUFBUTt3QkFDUixRQUFRO3dCQUNSLFdBQVc7d0JBQ1gsT0FBTzt3QkFDUCxTQUFTO3dCQUNULFNBQVM7d0JBQ1QsU0FBUzt3QkFDVCxrQkFBa0I7d0JBQ2xCLG1CQUFtQjt3QkFDbkIsWUFBWTt3QkFDWixTQUFTO3dCQUNULGdCQUFnQjt3QkFDaEIsV0FBVztxQkFDZDs4QkFnQmEsWUFBWTtzQkFBM0IsS0FBSztnQkFDVSxJQUFJO3NCQUFuQixLQUFLO2dCQUNVLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsVUFBVTtzQkFBekIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRnNDbGlwYm9hcmQgfSBmcm9tICdAZmlyZXN0aXRjaC9jbGlwYm9hcmQnO1xuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IHBhcnNlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvZGF0ZSc7XG5pbXBvcnQgeyBGc01lc3NhZ2UgfSBmcm9tICdAZmlyZXN0aXRjaC9tZXNzYWdlJztcbmltcG9ydCB7IEZzUHJvbXB0IH0gZnJvbSAnQGZpcmVzdGl0Y2gvcHJvbXB0JztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTZXR0aW5nRGF0YSB9IGZyb20gJy4uLy4uL2RhdGEnO1xuaW1wb3J0IHsgU2V0dGluZ0ludGVyZmFjZVR5cGUgfSBmcm9tICcuLi8uLi9lbnVtcyc7XG5pbXBvcnQgeyBNYXRBY2NvcmRpb24sIE1hdEV4cGFuc2lvblBhbmVsLCBNYXRFeHBhbnNpb25QYW5lbEhlYWRlciwgTWF0RXhwYW5zaW9uUGFuZWxUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2V4cGFuc2lvbic7XG5pbXBvcnQgeyBNYXRJY29uQnV0dG9uLCBNYXRCdXR0b24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0VG9vbHRpcCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuaW1wb3J0IHsgTWF0SWNvbiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTmdDbGFzcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGQsIE1hdExhYmVsLCBNYXRIaW50LCBNYXRTdWZmaXggfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRTZWxlY3QgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xuaW1wb3J0IHsgTWF0T3B0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQgeyBGc0RhdGVQaWNrZXJNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9kYXRlcGlja2VyJztcbmltcG9ydCB7IEZzQ29sb3JQaWNrZXJNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9jb2xvcnBpY2tlcic7XG5pbXBvcnQgeyBGc0ZpbGVNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9maWxlJztcbmltcG9ydCB7IEtleU5hbWVWYWx1ZVBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy9rZXktbmFtZS12YWx1ZS5waXBlJztcbmltcG9ydCB7IExpbmtpZnlQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvbGlua2lmeS5waXBlJztcbmltcG9ydCB7IFNldHRpbmdJbnN0cnVjdGlvbnNDb21wb25lbnQgfSBmcm9tICcuLi9zZXR0aW5nLWluc3RydWN0aW9ucy9zZXR0aW5nLWluc3RydWN0aW9ucy5jb21wb25lbnQnO1xuXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZnMtc3lzdGVtLXNldHRpbmdzJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2V0dGluZ3MuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3NldHRpbmdzLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE1hdEFjY29yZGlvbixcbiAgICAgICAgTWF0RXhwYW5zaW9uUGFuZWwsXG4gICAgICAgIE1hdEV4cGFuc2lvblBhbmVsSGVhZGVyLFxuICAgICAgICBNYXRFeHBhbnNpb25QYW5lbFRpdGxlLFxuICAgICAgICBNYXRJY29uQnV0dG9uLFxuICAgICAgICBNYXRUb29sdGlwLFxuICAgICAgICBNYXRJY29uLFxuICAgICAgICBOZ0NsYXNzLFxuICAgICAgICBNYXRGb3JtRmllbGQsXG4gICAgICAgIE1hdExhYmVsLFxuICAgICAgICBNYXRJbnB1dCxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIE1hdEhpbnQsXG4gICAgICAgIE1hdFN1ZmZpeCxcbiAgICAgICAgTWF0U2VsZWN0LFxuICAgICAgICBNYXRPcHRpb24sXG4gICAgICAgIEZzRGF0ZVBpY2tlck1vZHVsZSxcbiAgICAgICAgRnNDb2xvclBpY2tlck1vZHVsZSxcbiAgICAgICAgRnNGaWxlTW9kdWxlLFxuICAgICAgICBNYXRCdXR0b24sXG4gICAgICAgIEtleU5hbWVWYWx1ZVBpcGUsXG4gICAgICAgIExpbmtpZnlQaXBlLFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIFNldHRpbmdzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSBfbWVzc2FnZSA9IGluamVjdChGc01lc3NhZ2UpO1xuICBwcml2YXRlIF9jbGlwYm9hcmQgPSBpbmplY3QoRnNDbGlwYm9hcmQpO1xuICBwcml2YXRlIF9wcm9tcHQgPSBpbmplY3QoRnNQcm9tcHQpO1xuICBwcml2YXRlIF9kaWFsb2cgPSBpbmplY3QoTWF0RGlhbG9nKTtcbiAgcHJpdmF0ZSBfc2V0dGluZ0RhdGEgPSBpbmplY3QoU2V0dGluZ0RhdGEpO1xuICBwcml2YXRlIF9jZFJlZiA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cblxuICAvKipcbiAgICogT3B0aW9uYWwgb3ZlcnJpZGVzLiBUaGUgc2V0dGluZ3MgZW5kcG9pbnRzIHNoaXAgd2l0aCB0aGUgZnJhbWV3b3JrIGF0IGEgZml4ZWRcbiAgICogcGF0aCAoc3lzdGVtL3NldHRpbmdzKSwgc28gd2hlbiBvbmUgb2YgdGhlc2UgaXMgbGVmdCB1bnNldCB0aGUgY29tcG9uZW50IGNhbGxzXG4gICAqIHRoYXQgZW5kcG9pbnQgaXRzZWxmIHRocm91Z2ggU2V0dGluZ0RhdGEgYW5kIGEgY29uc3VtZXIgaGFzIHRvIHBhc3Mgbm90aGluZy5cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBsb2FkU2V0dGluZ3M6IChxdWVyeSkgPT4gT2JzZXJ2YWJsZTxhbnlbXT47XG4gIEBJbnB1dCgpIHB1YmxpYyBzYXZlOiAoZ3JvdXA6IHN0cmluZywgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiBPYnNlcnZhYmxlPGFueT47XG4gIEBJbnB1dCgpIHB1YmxpYyBmaWxlVXBsb2FkOiAoc2V0dGluZywgZmlsZTogQmxvYikgPT4gT2JzZXJ2YWJsZTxhbnk+O1xuICBASW5wdXQoKSBwdWJsaWMgZmlsZURlbGV0ZTogKHNldHRpbmcpID0+IE9ic2VydmFibGU8YW55PjtcblxuICBwdWJsaWMgZ3JvdXBlZFNldHRpbmdzID0gW107XG4gIHB1YmxpYyBncm91cHMgPSBbXTtcbiAgcHVibGljIFNldHRpbmdJbnRlcmZhY2VUeXBlID0gU2V0dGluZ0ludGVyZmFjZVR5cGU7XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuX2xvYWRTZXR0aW5ncyh7IHZpc2libGU6IHRydWUgfSlcbiAgICAgIC5zdWJzY3JpYmUoKHNldHRpbmdzKSA9PiB7XG4gICAgICAgIHNldHRpbmdzID0gc2V0dGluZ3NcbiAgICAgICAgICAuZmlsdGVyKChzZXR0aW5nKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gc2V0dGluZy5pbnRlcmZhY2VUeXBlICE9PSBTZXR0aW5nSW50ZXJmYWNlVHlwZS5Ob25lO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLm1hcCgoc2V0dGluZykgPT4ge1xuICAgICAgICAgICAgc3dpdGNoIChzZXR0aW5nLmludGVyZmFjZVR5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSBTZXR0aW5nSW50ZXJmYWNlVHlwZS5EYXRlOlxuICAgICAgICAgICAgICBjYXNlIFNldHRpbmdJbnRlcmZhY2VUeXBlLlRpbWU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIC4uLnNldHRpbmcsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTogcGFyc2Uoc2V0dGluZy52YWx1ZSksXG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICBjYXNlIFNldHRpbmdJbnRlcmZhY2VUeXBlLlNlbGVjdE11bHRpcGxlOlxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAuLi5zZXR0aW5nLFxuICAgICAgICAgICAgICAgICAgdmFsdWU6IEFycmF5LmlzQXJyYXkoc2V0dGluZy52YWx1ZSkgPyBzZXR0aW5nLnZhbHVlIDogW10sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHNldHRpbmc7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5ncm91cGVkU2V0dGluZ3MgPSBzZXR0aW5ncy5yZWR1Y2UoKGFjY3VtLCBpdGVtKSA9PiB7XG4gICAgICAgICAgaWYoYWNjdW1baXRlbS5ncm91cF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYWNjdW1baXRlbS5ncm91cF0gPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWNjdW1baXRlbS5ncm91cF0ucHVzaChpdGVtKTtcblxuICAgICAgICAgIHJldHVybiBhY2N1bTtcbiAgICAgICAgfSwge30pO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5ncm91cHMgPSBPYmplY3Qua2V5cyh0aGlzLmdyb3VwZWRTZXR0aW5ncyk7XG4gICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZXhwb3J0KGV2ZW50OiBVSUV2ZW50LCBzZXR0aW5ncyk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IGRhdGEgPSBzZXR0aW5ncy5tYXAoKHNldHRpbmcpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IHNldHRpbmcubmFtZSxcbiAgICAgICAgdmFsdWU6IHNldHRpbmcudmFsdWUsXG4gICAgICAgIGdyb3VwOiBzZXR0aW5nLmdyb3VwLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRoaXMuX2NsaXBib2FyZC5jb3B5KEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbiAgICB0aGlzLl9tZXNzYWdlLnN1Y2Nlc3MoJ0NvcGllZCB0byBjbGlwYm9hcmQnKTtcbiAgfVxuXG4gIHB1YmxpYyBpbXBvcnQoZXZlbnQ6IFVJRXZlbnQsIGdyb3VwKTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5fcHJvbXB0LmlucHV0KHtcbiAgICAgIGxhYmVsOiAnSlNPTiBJbXBvcnQnLFxuICAgICAgdGl0bGU6ICdJbXBvcnQgU2V0dGluZ3MnLFxuICAgICAgY29tbWl0TGFiZWw6ICdJbXBvcnQnLFxuICAgICAgcmVxdWlyZWQ6IHRydWUsXG4gICAgfSkuc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuZ3JvdXBlZFNldHRpbmdzW2dyb3VwXTtcbiAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG5cbiAgICAgICAgICBkYXRhLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNldHRpbmcgPSBzZXR0aW5ncy5maW5kKChzKSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBpdGVtLm5hbWUgPT09IHMubmFtZTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoc2V0dGluZykge1xuICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHNldHRpbmcsIGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdGhpcy5fY2RSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB0aGlzLl9tZXNzYWdlLmVycm9yKGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgdGhlIGxvbmctZm9ybSBzZXR1cCBzdGVwcyBmb3Igc2V0dGluZ3MgdGhhdCBjYXJyeSB0aGVtLiBUaGUgaW5saW5lIGhpbnRcbiAgICogY292ZXJzIHdoYXQgdGhlIGZpZWxkIGlzOyB0aGlzIGNvdmVycyB3b3JrIHRoYXQgaGFzIHRvIGhhcHBlbiBlbHNld2hlcmUgYmVmb3JlXG4gICAqIGEgdmFsdWUgY2FuIGV2ZW4gYmUgb2J0YWluZWQuXG4gICAqL1xuICBwdWJsaWMgb3Blbkluc3RydWN0aW9ucyhzZXR0aW5nKTogdm9pZCB7XG4gICAgdGhpcy5fZGlhbG9nLm9wZW4oU2V0dGluZ0luc3RydWN0aW9uc0NvbXBvbmVudCwge1xuICAgICAgLy8gU2l6ZWQgYnkgaXRzIGNvbnRlbnQgcmF0aGVyIHRoYW4gZml4ZWQ6IGluc3RydWN0aW9ucyBydW4gZnJvbSBhIGNvdXBsZSBvZlxuICAgICAgLy8gc2VudGVuY2VzIHRvIGEgZG96ZW4gc3RlcHMsIGFuZCBhIGZpeGVkIGhlaWdodCBsZWF2ZXMgdGhlIHNob3J0IG9uZXMgbW9zdGx5XG4gICAgICAvLyBlbXB0eS4gVGhlIGNhcHMgc3RvcCBhIGxvbmcgb25lIGZyb20gZmlsbGluZyB0aGUgc2NyZWVuIGVkZ2UgdG8gZWRnZS5cbiAgICAgIG1heFdpZHRoOiAnODB2dycsXG4gICAgICBtYXhIZWlnaHQ6ICc4MHZoJyxcbiAgICAgIGRhdGE6IHsgc2V0dGluZyB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHNhdmVHcm91cChncm91cCk6IHZvaWQge1xuICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5ncm91cGVkU2V0dGluZ3NbZ3JvdXBdO1xuICAgIGNvbnN0IHZhbHVlcyA9IHNldHRpbmdzLnJlZHVjZSgocmVzdWx0LCB2YWx1ZSkgPT4ge1xuICAgICAgcmV0dXJuIChyZXN1bHRbdmFsdWUubmFtZV0gPSB2YWx1ZS52YWx1ZSwgcmVzdWx0KTtcbiAgICB9LCB7fSk7XG5cbiAgICB0aGlzLl9zYXZlKGdyb3VwLCB2YWx1ZXMpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdDaGFuZ2VzIFNhdmVkJyk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgWCBvbiBhIGZpbGUgc2V0dGluZy4gUGVyc2lzdGVkIG9uIGl0cyBvd24gYmVjYXVzZSB0aGUgYnVsayBzYXZlIGRlbGliZXJhdGVseVxuICAgKiBza2lwcyBmaWxlIHNldHRpbmdzIOKAlCB0aGV5IGhhdmUgdGhlaXIgb3duIGVuZHBvaW50LCBhbmQgd2l0aG91dCB0aGlzIHRoZSBmaWVsZFxuICAgKiBvbmx5IGNsZWFyZWQgb24gc2NyZWVuIHdoaWxlIHRoZSBmaWxlIHN0YXllZC5cbiAgICovXG4gIHB1YmxpYyByZW1vdmVGaWxlKHNldHRpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9maWxlRGVsZXRlKHNldHRpbmcpXG4gICAgICAuc3Vic2NyaWJlKCh1cGRhdGVkKSA9PiB7XG4gICAgICAgIHNldHRpbmcudmFsdWUgPSB1cGRhdGVkPy52YWx1ZSA/PyAnJztcbiAgICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdDaGFuZ2VzIFNhdmVkJyk7XG4gICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0RmlsZShzZXR0aW5nLCBmaWxlOiBCbG9iKTogdm9pZCB7XG4gICAgdGhpcy5fZmlsZVVwbG9hZChzZXR0aW5nLCBmaWxlKVxuICAgICAgLnN1YnNjcmliZSgodXBkYXRlZCkgPT4ge1xuICAgICAgICBzZXR0aW5nLnZhbHVlID0gdXBkYXRlZD8udmFsdWUgPz8gc2V0dGluZy52YWx1ZTtcbiAgICAgICAgdGhpcy5fbWVzc2FnZS5zdWNjZXNzKCdDaGFuZ2VzIFNhdmVkJyk7XG4gICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9sb2FkU2V0dGluZ3MocXVlcnkpOiBPYnNlcnZhYmxlPGFueVtdPiB7XG4gICAgcmV0dXJuIHRoaXMubG9hZFNldHRpbmdzXG4gICAgICA/IHRoaXMubG9hZFNldHRpbmdzKHF1ZXJ5KVxuICAgICAgOiB0aGlzLl9zZXR0aW5nRGF0YS5nZXRzKHF1ZXJ5KTtcbiAgfVxuXG4gIHByaXZhdGUgX3NhdmUoZ3JvdXA6IHN0cmluZywgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5zYXZlXG4gICAgICA/IHRoaXMuc2F2ZShncm91cCwgdmFsdWVzKVxuICAgICAgOiB0aGlzLl9zZXR0aW5nRGF0YS5idWxrKHsgZ3JvdXAsIHZhbHVlcyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2ZpbGVVcGxvYWQoc2V0dGluZywgZmlsZTogQmxvYik6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZmlsZVVwbG9hZFxuICAgICAgPyB0aGlzLmZpbGVVcGxvYWQoc2V0dGluZywgZmlsZSlcbiAgICAgIDogdGhpcy5fc2V0dGluZ0RhdGEuZmlsZVVwbG9hZChzZXR0aW5nLmlkLCB7IGZpbGUgfSk7XG4gIH1cblxuICBwcml2YXRlIF9maWxlRGVsZXRlKHNldHRpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmZpbGVEZWxldGVcbiAgICAgID8gdGhpcy5maWxlRGVsZXRlKHNldHRpbmcpXG4gICAgICA6IHRoaXMuX3NldHRpbmdEYXRhLmZpbGVEZWxldGUoc2V0dGluZy5pZCk7XG4gIH1cbn1cbiIsIjxtYXQtYWNjb3JkaW9uPlxuICBAZm9yIChncm91cCBvZiBncm91cHM7IHRyYWNrIGdyb3VwKSB7XG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWxcbiAgICAgIGhpZGVUb2dnbGVcbiAgICAgID5cbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGUtcm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIj5cbiAgICAgICAgICAgICAge3sgZ3JvdXAgfHwgJ0dlbmVyYWwnIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInRXhwb3J0ICcgKyAoZ3JvdXAgfHwgJ0dlbmVyYWwnKSArICcgU2V0dGluZ3MnXCJcbiAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZXhwb3J0KCRldmVudCwgZ3JvdXBlZFNldHRpbmdzW2dyb3VwXSlcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+XG4gICAgICAgICAgICAgICAgICBjbG91ZF9kb3dubG9hZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ0ltcG9ydCAnICsgKGdyb3VwIHx8ICdHZW5lcmFsJykgKyAnIFNldHRpbmdzJ1wiXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImltcG9ydCgkZXZlbnQsIGdyb3VwKVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIGNsb3VkX3VwbG9hZFxuICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgIEBmb3IgKHNldHRpbmcgb2YgZ3JvdXBlZFNldHRpbmdzW2dyb3VwXTsgdHJhY2sgc2V0dGluZykge1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgaGlkZVRvZ2dsZVxuICAgICAgICAgIGNsYXNzPVwic2V0dGluZ1wiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyAnaGFzLWluc3RydWN0aW9uJzogISEgc2V0dGluZy5pbnN0cnVjdGlvbiB9XCI+XG4gICAgICAgICAgQGlmIChzZXR0aW5nLmludGVyZmFjZVR5cGU9PT1TZXR0aW5nSW50ZXJmYWNlVHlwZS5JbnB1dEJveCkge1xuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkXG4gICAgICAgICAgICAgIGNsYXNzPVwiZnVsbC13aWR0aCBmb3JtLWZpZWxkLW11bHRpbGluZS1zdWJzY3JpcHRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAge3sgc2V0dGluZy5sYWJlbCB9fVxuICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNldHRpbmcudmFsdWVcIlxuICAgICAgICAgICAgICAgIFtuYW1lXT1cIidzZXR0aW5nJyArIHNldHRpbmcuaWRcIj5cbiAgICAgICAgICAgICAgQGlmIChzZXR0aW5nLmluc3RydWN0aW9ucykge1xuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJTZXR1cCBpbnN0cnVjdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5JbnN0cnVjdGlvbnMoc2V0dGluZylcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgaGVscF9vdXRsaW5lXG4gICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDxtYXQtaGludFxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwic2V0dGluZy5pbnN0cnVjdGlvbiB8IGxpbmtpZnlcIj5cbiAgICAgICAgICAgICAgPC9tYXQtaGludD5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBpZiAoc2V0dGluZy5pbnRlcmZhY2VUeXBlPT09U2V0dGluZ0ludGVyZmFjZVR5cGUuVGV4dGFyZWEpIHtcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZFxuICAgICAgICAgICAgICBjbGFzcz1cImZ1bGwtd2lkdGggZm9ybS1maWVsZC1tdWx0aWxpbmUtc3Vic2NyaXB0XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIHt7IHNldHRpbmcubGFiZWwgfX1cbiAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZXR0aW5nLnZhbHVlXCJcbiAgICAgICAgICAgICAgICBbbmFtZV09XCInc2V0dGluZycgKyBzZXR0aW5nLmlkXCI+XG4gICAgICAgICAgICAgIDwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgIEBpZiAoc2V0dGluZy5pbnN0cnVjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiU2V0dXAgaW5zdHJ1Y3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuSW5zdHJ1Y3Rpb25zKHNldHRpbmcpXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIGhlbHBfb3V0bGluZVxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8bWF0LWhpbnRcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInNldHRpbmcuaW5zdHJ1Y3Rpb24gfCBsaW5raWZ5XCI+XG4gICAgICAgICAgICAgIDwvbWF0LWhpbnQ+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKHNldHRpbmcuaW50ZXJmYWNlVHlwZT09PVNldHRpbmdJbnRlcmZhY2VUeXBlLlNlbGVjdCB8fCBzZXR0aW5nLmludGVyZmFjZVR5cGU9PT1TZXR0aW5nSW50ZXJmYWNlVHlwZS5TZWxlY3RNdWx0aXBsZSkge1xuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkXG4gICAgICAgICAgICAgIGNsYXNzPVwiZnVsbC13aWR0aCBmb3JtLWZpZWxkLW11bHRpbGluZS1zdWJzY3JpcHRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAge3sgc2V0dGluZy5sYWJlbCB9fVxuICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNldHRpbmcudmFsdWVcIlxuICAgICAgICAgICAgICAgIFttdWx0aXBsZV09XCJzZXR0aW5nLmludGVyZmFjZVR5cGU9PT1TZXR0aW5nSW50ZXJmYWNlVHlwZS5TZWxlY3RNdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgW25hbWVdPVwiJ3NldHRpbmcnICsgc2V0dGluZy5pZFwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGl0ZW0gb2Ygc2V0dGluZy52YWx1ZXMgfCBrZXlOYW1lVmFsdWU7IHRyYWNrIGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtLnZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICBAaWYgKHNldHRpbmcuaW5zdHJ1Y3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIlNldHVwIGluc3RydWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3Blbkluc3RydWN0aW9ucyhzZXR0aW5nKVwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICBoZWxwX291dGxpbmVcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPG1hdC1oaW50XG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJzZXR0aW5nLmluc3RydWN0aW9uIHwgbGlua2lmeVwiPlxuICAgICAgICAgICAgICA8L21hdC1oaW50PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmIChzZXR0aW5nLmludGVyZmFjZVR5cGU9PT1TZXR0aW5nSW50ZXJmYWNlVHlwZS5EYXRlKSB7XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmdWxsLXdpZHRoIGZvcm0tZmllbGQtbXVsdGlsaW5lLXN1YnNjcmlwdFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICB7eyBzZXR0aW5nLmxhYmVsIH19XG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgIGZzRGF0ZVBpY2tlclxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2V0dGluZy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgW25hbWVdPVwiJ3NldHRpbmcnICsgc2V0dGluZy5pZFwiPlxuICAgICAgICAgICAgICBAaWYgKHNldHRpbmcuaW5zdHJ1Y3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBtYXRTdWZmaXhcbiAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIlNldHVwIGluc3RydWN0aW9uc1wiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3Blbkluc3RydWN0aW9ucyhzZXR0aW5nKVwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICBoZWxwX291dGxpbmVcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPG1hdC1oaW50XG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJzZXR0aW5nLmluc3RydWN0aW9uIHwgbGlua2lmeVwiPlxuICAgICAgICAgICAgICA8L21hdC1oaW50PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICB9XG4gICAgICAgICAgQGlmIChzZXR0aW5nLmludGVyZmFjZVR5cGU9PT1TZXR0aW5nSW50ZXJmYWNlVHlwZS5Db2xvcikge1xuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkXG4gICAgICAgICAgICAgIGNsYXNzPVwiZnVsbC13aWR0aCBmb3JtLWZpZWxkLW11bHRpbGluZS1zdWJzY3JpcHRcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAge3sgc2V0dGluZy5sYWJlbCB9fVxuICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICBmc0NvbG9yUGlja2VyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZXR0aW5nLnZhbHVlXCJcbiAgICAgICAgICAgICAgICBbbmFtZV09XCInc2V0dGluZycgKyBzZXR0aW5nLmlkXCI+XG4gICAgICAgICAgICAgIEBpZiAoc2V0dGluZy5pbnN0cnVjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiU2V0dXAgaW5zdHJ1Y3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuSW5zdHJ1Y3Rpb25zKHNldHRpbmcpXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIGhlbHBfb3V0bGluZVxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8bWF0LWhpbnRcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInNldHRpbmcuaW5zdHJ1Y3Rpb24gfCBsaW5raWZ5XCI+XG4gICAgICAgICAgICAgIDwvbWF0LWhpbnQ+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKHNldHRpbmcuaW50ZXJmYWNlVHlwZT09PVNldHRpbmdJbnRlcmZhY2VUeXBlLlRpbWUpIHtcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZFxuICAgICAgICAgICAgICBjbGFzcz1cImZ1bGwtd2lkdGggZm9ybS1maWVsZC1tdWx0aWxpbmUtc3Vic2NyaXB0XCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIHt7IHNldHRpbmcubGFiZWwgfX1cbiAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgZnNUaW1lUGlja2VyXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZXR0aW5nLnZhbHVlXCJcbiAgICAgICAgICAgICAgICBbbmFtZV09XCInc2V0dGluZycgKyBzZXR0aW5nLmlkXCI+XG4gICAgICAgICAgICAgIEBpZiAoc2V0dGluZy5pbnN0cnVjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiU2V0dXAgaW5zdHJ1Y3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuSW5zdHJ1Y3Rpb25zKHNldHRpbmcpXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIGhlbHBfb3V0bGluZVxuICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8bWF0LWhpbnRcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInNldHRpbmcuaW5zdHJ1Y3Rpb24gfCBsaW5raWZ5XCI+XG4gICAgICAgICAgICAgIDwvbWF0LWhpbnQ+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIH1cbiAgICAgICAgICBAaWYgKHNldHRpbmcuaW50ZXJmYWNlVHlwZT09PVNldHRpbmdJbnRlcmZhY2VUeXBlLkZpbGUpIHtcbiAgICAgICAgICAgIDxmcy1maWxlLXBpY2tlclxuICAgICAgICAgICAgICBbYWxsb3dSZW1vdmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIFthbGxvd0Rvd25sb2FkXT1cInRydWVcIlxuICAgICAgICAgICAgICAoc2VsZWN0KT1cInNlbGVjdEZpbGUoc2V0dGluZywgJGV2ZW50LmZpbGUpXCJcbiAgICAgICAgICAgICAgKHJlbW92ZSk9XCJyZW1vdmVGaWxlKHNldHRpbmcpXCJcbiAgICAgICAgICAgICAgW3VybF09XCJzZXR0aW5nLnZhbHVlXCI+XG4gICAgICAgICAgICAgIDxkaXYgZnNGaWxlTGFiZWw+XG4gICAgICAgICAgICAgICAge3sgc2V0dGluZy5sYWJlbCB9fVxuICAgICAgICAgICAgICAgIEBpZiAoc2V0dGluZy5pbnN0cnVjdGlvbnMpIHtcbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiU2V0dXAgaW5zdHJ1Y3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5JbnN0cnVjdGlvbnMoc2V0dGluZylcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgIGhlbHBfb3V0bGluZVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGZzRmlsZUhpbnRcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cInNldHRpbmcuaW5zdHJ1Y3Rpb24gfCBsaW5raWZ5XCI+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9mcy1maWxlLXBpY2tlcj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgICAgPGJ1dHRvblxuICAgICAgICBtYXQtc3Ryb2tlZC1idXR0b25cbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJzYXZlR3JvdXAoZ3JvdXApXCI+XG4gICAgICAgIFNhdmVcbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgfVxuPC9tYXQtYWNjb3JkaW9uPiJdfQ==
@@ -1,4 +1,5 @@
1
- import { ChangeDetectionStrategy, Component, Input, ViewChild } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, Input, ViewChild, inject } from '@angular/core';
2
+ import { FsApi } from '@firestitch/api';
2
3
  import { ItemType } from '@firestitch/filter';
3
4
  import { FsListComponent, FsListModule } from '@firestitch/list';
4
5
  import { map } from 'rxjs/operators';
@@ -7,7 +8,12 @@ import * as i0 from "@angular/core";
7
8
  import * as i1 from "@firestitch/list";
8
9
  import * as i2 from "@firestitch/date";
9
10
  export class UpgradeLogsComponent {
11
+ _api = inject(FsApi);
10
12
  list;
13
+ /**
14
+ * Optional override. Left unset, the component reads the framework's own
15
+ * system/logs/upgrade endpoint.
16
+ */
11
17
  loadUpgradeLogs;
12
18
  config = null;
13
19
  logTypes = [];
@@ -25,11 +31,16 @@ export class UpgradeLogsComponent {
25
31
  },
26
32
  ],
27
33
  fetch: (query) => {
28
- return this.loadUpgradeLogs(query)
29
- .pipe(map((response) => ({ data: response.data, paging: response.paging })));
34
+ return this._upgradeLogsGet(query);
30
35
  },
31
36
  };
32
37
  }
38
+ _upgradeLogsGet(query) {
39
+ return this.loadUpgradeLogs
40
+ ? this.loadUpgradeLogs(query)
41
+ : this._api.get('system/logs/upgrade', query, { key: null })
42
+ .pipe(map((response) => ({ data: response.upgrades, paging: response.paging })));
43
+ }
33
44
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: UpgradeLogsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
34
45
  static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: UpgradeLogsComponent, isStandalone: true, selector: "fs-system-upgrade-logs", inputs: { loadUpgradeLogs: "loadUpgradeLogs" }, viewQueries: [{ propertyName: "list", first: true, predicate: FsListComponent, descendants: true, static: true }], ngImport: i0, template: "<fs-list [config]=\"config\">\r\n <fs-list-column>\r\n <ng-template fs-list-header>Name</ng-template>\r\n <ng-template fs-list-cell let-row=\"row\">\r\n {{row.name}}\r\n </ng-template>\r\n </fs-list-column>\r\n\r\n <fs-list-column>\r\n <ng-template fs-list-header>Function</ng-template>\r\n <ng-template fs-list-cell let-row=\"row\">\r\n {{row.function}}()\r\n </ng-template>\r\n </fs-list-column>\r\n\r\n <fs-list-column>\r\n <ng-template fs-list-header>Date</ng-template>\r\n <ng-template fs-list-cell let-row=\"row\">\r\n <fs-date-ago [date]=\"row.createDate\"></fs-date-ago>\r\n </ng-template>\r\n </fs-list-column>\r\n</fs-list>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: FsListModule }, { kind: "component", type: i1.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { kind: "directive", type: i1.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customizable", "sortable", "sortableDefault", "sortableDirection", "direction", "align", "width", "class"] }, { kind: "directive", type: i1.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { kind: "directive", type: i1.FsListHeaderDirective, selector: "[fs-list-header]", inputs: ["colspan", "align", "class"] }, { kind: "ngmodule", type: FsDateModule }, { kind: "component", type: i2.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
35
46
  }
@@ -42,4 +53,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
42
53
  }], loadUpgradeLogs: [{
43
54
  type: Input
44
55
  }] } });
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBncmFkZS1sb2dzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zeXN0ZW0vY29tcG9uZW50cy91cGdyYWRlLWxvZ3MvdXBncmFkZS1sb2dzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zeXN0ZW0vY29tcG9uZW50cy91cGdyYWRlLWxvZ3MvdXBncmFkZS1sb2dzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3RixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDOUMsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFHL0UsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7OztBQVdoRCxNQUFNLE9BQU8sb0JBQW9CO0lBR3hCLElBQUksQ0FBa0I7SUFFYixlQUFlLENBQTBEO0lBRWxGLE1BQU0sR0FBaUIsSUFBSSxDQUFDO0lBQzVCLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFFZCxRQUFRO1FBQ2IsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFTyxXQUFXO1FBRWpCLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDWixNQUFNLEVBQUUsS0FBSztZQUNiLE9BQU8sRUFBRTtnQkFDUDtvQkFDRSxJQUFJLEVBQUUsUUFBUSxDQUFDLE9BQU87b0JBQ3RCLElBQUksRUFBRSxTQUFTO29CQUNmLEtBQUssRUFBRSxRQUFRO2lCQUNoQjthQUNGO1lBQ0QsS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2YsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQztxQkFDL0IsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUMzRSxDQUFDO1lBQ04sQ0FBQztTQUNGLENBQUM7SUFDSixDQUFDO3VHQWhDVSxvQkFBb0I7MkZBQXBCLG9CQUFvQix3S0FFcEIsZUFBZSw4RENwQjVCLCtxQkFzQkEseURETmMsWUFBWSx3bkJBQUUsWUFBWTs7MkZBRTNCLG9CQUFvQjtrQkFSaEMsU0FBUzsrQkFDSSx3QkFBd0IsbUJBR2pCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLFlBQVksQ0FBQzs4QkFLaEMsSUFBSTtzQkFEVixTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBRzVCLGVBQWU7c0JBQTlCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgSXRlbVR5cGUgfSBmcm9tICdAZmlyZXN0aXRjaC9maWx0ZXInO1xuaW1wb3J0IHsgRnNMaXN0Q29tcG9uZW50LCBGc0xpc3RDb25maWcsIEZzTGlzdE1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2xpc3QnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBGc0RhdGVNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9kYXRlJztcblxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZzLXN5c3RlbS11cGdyYWRlLWxvZ3MnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi91cGdyYWRlLWxvZ3MuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3VwZ3JhZGUtbG9ncy5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0ZzTGlzdE1vZHVsZSwgRnNEYXRlTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgVXBncmFkZUxvZ3NDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBWaWV3Q2hpbGQoRnNMaXN0Q29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBwdWJsaWMgbGlzdDogRnNMaXN0Q29tcG9uZW50O1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBsb2FkVXBncmFkZUxvZ3M6IChkYXRhOiBhbnkpID0+IE9ic2VydmFibGU8eyBkYXRhOiBhbnlbXSwgcGFnaW5nOiBhbnkgfT47XG5cbiAgcHVibGljIGNvbmZpZzogRnNMaXN0Q29uZmlnID0gbnVsbDtcbiAgcHVibGljIGxvZ1R5cGVzID0gW107XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIHRoaXMuX2NvbmZpZ0xpc3QoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NvbmZpZ0xpc3QoKSB7XG5cbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIHBhZ2luZzogZmFsc2UsXG4gICAgICBmaWx0ZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBJdGVtVHlwZS5LZXl3b3JkLFxuICAgICAgICAgIG5hbWU6ICdrZXl3b3JkJyxcbiAgICAgICAgICBsYWJlbDogJ1NlYXJjaCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgZmV0Y2g6IChxdWVyeSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2FkVXBncmFkZUxvZ3MocXVlcnkpXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+ICh7IGRhdGE6IHJlc3BvbnNlLmRhdGEsIHBhZ2luZzogcmVzcG9uc2UucGFnaW5nIH0pKSxcbiAgICAgICAgICApO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG59XG4iLCI8ZnMtbGlzdCBbY29uZmlnXT1cImNvbmZpZ1wiPlxyXG4gIDxmcy1saXN0LWNvbHVtbj5cclxuICAgIDxuZy10ZW1wbGF0ZSBmcy1saXN0LWhlYWRlcj5OYW1lPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSBmcy1saXN0LWNlbGwgbGV0LXJvdz1cInJvd1wiPlxyXG4gICAgICB7e3Jvdy5uYW1lfX1cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9mcy1saXN0LWNvbHVtbj5cclxuXHJcbiAgPGZzLWxpc3QtY29sdW1uPlxyXG4gICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtaGVhZGVyPkZ1bmN0aW9uPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSBmcy1saXN0LWNlbGwgbGV0LXJvdz1cInJvd1wiPlxyXG4gICAgICB7e3Jvdy5mdW5jdGlvbn19KClcclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9mcy1saXN0LWNvbHVtbj5cclxuXHJcbiAgPGZzLWxpc3QtY29sdW1uPlxyXG4gICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtaGVhZGVyPkRhdGU8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtY2VsbCBsZXQtcm93PVwicm93XCI+XHJcbiAgICAgIDxmcy1kYXRlLWFnbyBbZGF0ZV09XCJyb3cuY3JlYXRlRGF0ZVwiPjwvZnMtZGF0ZS1hZ28+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwvZnMtbGlzdC1jb2x1bW4+XHJcbjwvZnMtbGlzdD5cclxuIl19
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBncmFkZS1sb2dzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zeXN0ZW0vY29tcG9uZW50cy91cGdyYWRlLWxvZ3MvdXBncmFkZS1sb2dzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zeXN0ZW0vY29tcG9uZW50cy91cGdyYWRlLWxvZ3MvdXBncmFkZS1sb2dzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckcsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFnQixZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUcvRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7O0FBV2hELE1BQU0sT0FBTyxvQkFBb0I7SUFDdkIsSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUl0QixJQUFJLENBQWtCO0lBRTdCOzs7T0FHRztJQUNhLGVBQWUsQ0FBMEQ7SUFFbEYsTUFBTSxHQUFpQixJQUFJLENBQUM7SUFDNUIsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUVkLFFBQVE7UUFDYixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVPLFdBQVc7UUFFakIsSUFBSSxDQUFDLE1BQU0sR0FBRztZQUNaLE1BQU0sRUFBRSxLQUFLO1lBQ2IsT0FBTyxFQUFFO2dCQUNQO29CQUNFLElBQUksRUFBRSxRQUFRLENBQUMsT0FBTztvQkFDdEIsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsS0FBSyxFQUFFLFFBQVE7aUJBQ2hCO2FBQ0Y7WUFDRCxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDZixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckMsQ0FBQztTQUNGLENBQUM7SUFDSixDQUFDO0lBRU8sZUFBZSxDQUFDLEtBQUs7UUFDM0IsT0FBTyxJQUFJLENBQUMsZUFBZTtZQUN6QixDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUM7WUFDN0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLHFCQUFxQixFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztpQkFDekQsSUFBSSxDQUNILEdBQUcsQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUMvRSxDQUFDO0lBQ1IsQ0FBQzt1R0E1Q1Usb0JBQW9COzJGQUFwQixvQkFBb0Isd0tBSXBCLGVBQWUsOERDdkI1QiwrcUJBc0JBLHlERExjLFlBQVksd25CQUFFLFlBQVk7OzJGQUUzQixvQkFBb0I7a0JBUmhDLFNBQVM7K0JBQ0ksd0JBQXdCLG1CQUdqQix1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxZQUFZLENBQUM7OEJBT2hDLElBQUk7c0JBRFYsU0FBUzt1QkFBQyxlQUFlLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQU81QixlQUFlO3NCQUE5QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRnNBcGkgfSBmcm9tICdAZmlyZXN0aXRjaC9hcGknO1xuaW1wb3J0IHsgSXRlbVR5cGUgfSBmcm9tICdAZmlyZXN0aXRjaC9maWx0ZXInO1xuaW1wb3J0IHsgRnNMaXN0Q29tcG9uZW50LCBGc0xpc3RDb25maWcsIEZzTGlzdE1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2xpc3QnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBGc0RhdGVNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9kYXRlJztcblxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZzLXN5c3RlbS11cGdyYWRlLWxvZ3MnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi91cGdyYWRlLWxvZ3MuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3VwZ3JhZGUtbG9ncy5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0ZzTGlzdE1vZHVsZSwgRnNEYXRlTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgVXBncmFkZUxvZ3NDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcml2YXRlIF9hcGkgPSBpbmplY3QoRnNBcGkpO1xuXG5cbiAgQFZpZXdDaGlsZChGc0xpc3RDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gIHB1YmxpYyBsaXN0OiBGc0xpc3RDb21wb25lbnQ7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIG92ZXJyaWRlLiBMZWZ0IHVuc2V0LCB0aGUgY29tcG9uZW50IHJlYWRzIHRoZSBmcmFtZXdvcmsncyBvd25cbiAgICogc3lzdGVtL2xvZ3MvdXBncmFkZSBlbmRwb2ludC5cbiAgICovXG4gIEBJbnB1dCgpIHB1YmxpYyBsb2FkVXBncmFkZUxvZ3M6IChkYXRhOiBhbnkpID0+IE9ic2VydmFibGU8eyBkYXRhOiBhbnlbXSwgcGFnaW5nOiBhbnkgfT47XG5cbiAgcHVibGljIGNvbmZpZzogRnNMaXN0Q29uZmlnID0gbnVsbDtcbiAgcHVibGljIGxvZ1R5cGVzID0gW107XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIHRoaXMuX2NvbmZpZ0xpc3QoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NvbmZpZ0xpc3QoKSB7XG5cbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIHBhZ2luZzogZmFsc2UsXG4gICAgICBmaWx0ZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBJdGVtVHlwZS5LZXl3b3JkLFxuICAgICAgICAgIG5hbWU6ICdrZXl3b3JkJyxcbiAgICAgICAgICBsYWJlbDogJ1NlYXJjaCcsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgZmV0Y2g6IChxdWVyeSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdXBncmFkZUxvZ3NHZXQocXVlcnkpO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBncmFkZUxvZ3NHZXQocXVlcnkpOiBPYnNlcnZhYmxlPHsgZGF0YTogYW55W10sIHBhZ2luZzogYW55IH0+IHtcbiAgICByZXR1cm4gdGhpcy5sb2FkVXBncmFkZUxvZ3NcbiAgICAgID8gdGhpcy5sb2FkVXBncmFkZUxvZ3MocXVlcnkpXG4gICAgICA6IHRoaXMuX2FwaS5nZXQoJ3N5c3RlbS9sb2dzL3VwZ3JhZGUnLCBxdWVyeSwgeyBrZXk6IG51bGwgfSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiAoeyBkYXRhOiByZXNwb25zZS51cGdyYWRlcywgcGFnaW5nOiByZXNwb25zZS5wYWdpbmcgfSkpLFxuICAgICAgICApO1xuICB9XG59XG4iLCI8ZnMtbGlzdCBbY29uZmlnXT1cImNvbmZpZ1wiPlxyXG4gIDxmcy1saXN0LWNvbHVtbj5cclxuICAgIDxuZy10ZW1wbGF0ZSBmcy1saXN0LWhlYWRlcj5OYW1lPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSBmcy1saXN0LWNlbGwgbGV0LXJvdz1cInJvd1wiPlxyXG4gICAgICB7e3Jvdy5uYW1lfX1cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9mcy1saXN0LWNvbHVtbj5cclxuXHJcbiAgPGZzLWxpc3QtY29sdW1uPlxyXG4gICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtaGVhZGVyPkZ1bmN0aW9uPC9uZy10ZW1wbGF0ZT5cclxuICAgIDxuZy10ZW1wbGF0ZSBmcy1saXN0LWNlbGwgbGV0LXJvdz1cInJvd1wiPlxyXG4gICAgICB7e3Jvdy5mdW5jdGlvbn19KClcclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9mcy1saXN0LWNvbHVtbj5cclxuXHJcbiAgPGZzLWxpc3QtY29sdW1uPlxyXG4gICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtaGVhZGVyPkRhdGU8L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtY2VsbCBsZXQtcm93PVwicm93XCI+XHJcbiAgICAgIDxmcy1kYXRlLWFnbyBbZGF0ZV09XCJyb3cuY3JlYXRlRGF0ZVwiPjwvZnMtZGF0ZS1hZ28+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwvZnMtbGlzdC1jb2x1bW4+XHJcbjwvZnMtbGlzdD5cclxuIl19
@@ -0,0 +1,4 @@
1
+ export * from './cron.data';
2
+ export * from './process.data';
3
+ export * from './setting.data';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvc3lzdGVtL2RhdGEvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGdCQUFnQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jcm9uLmRhdGEnO1xuZXhwb3J0ICogZnJvbSAnLi9wcm9jZXNzLmRhdGEnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXR0aW5nLmRhdGEnO1xuIl19
@@ -0,0 +1,27 @@
1
+ import { Injectable, inject } from '@angular/core';
2
+ import { FsApi } from '@firestitch/api';
3
+ import * as i0 from "@angular/core";
4
+ export class SettingData {
5
+ _api = inject(FsApi);
6
+ gets(data = {}, config = {}) {
7
+ return this._api.get('system/settings', data, { key: 'settings', ...config });
8
+ }
9
+ bulk(data = {}, config = {}) {
10
+ return this._api.post('system/settings/bulk', data, { key: 'settings', ...config });
11
+ }
12
+ fileUpload(settingId, data = {}, config = {}) {
13
+ return this._api.post(`system/settings/${settingId}/files`, data, { key: 'setting', ...config });
14
+ }
15
+ fileDelete(settingId, data = {}, config = {}) {
16
+ return this._api.delete(`system/settings/${settingId}/files`, data, { key: 'setting', ...config });
17
+ }
18
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: SettingData, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
19
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: SettingData, providedIn: 'root' });
20
+ }
21
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: SettingData, decorators: [{
22
+ type: Injectable,
23
+ args: [{
24
+ providedIn: 'root',
25
+ }]
26
+ }] });
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZy5kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL3N5c3RlbS9kYXRhL3NldHRpbmcuZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsS0FBSyxFQUFpQixNQUFNLGlCQUFpQixDQUFDOztBQVF2RCxNQUFNLE9BQU8sV0FBVztJQUNkLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFHdEIsSUFBSSxDQUFDLE9BQVksRUFBRSxFQUFFLFNBQXdCLEVBQUU7UUFDcEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBRU0sSUFBSSxDQUFDLE9BQVksRUFBRSxFQUFFLFNBQXdCLEVBQUU7UUFDcEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRU0sVUFBVSxDQUFDLFNBQTBCLEVBQUUsT0FBWSxFQUFFLEVBQUUsU0FBd0IsRUFBRTtRQUN0RixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixTQUFTLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNuRyxDQUFDO0lBRU0sVUFBVSxDQUFDLFNBQTBCLEVBQUUsT0FBWSxFQUFFLEVBQUUsU0FBd0IsRUFBRTtRQUN0RixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixTQUFTLFFBQVEsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNyRyxDQUFDO3VHQWxCVSxXQUFXOzJHQUFYLFdBQVcsY0FGVixNQUFNOzsyRkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBGc0FwaSwgUmVxdWVzdENvbmZpZyB9IGZyb20gJ0BmaXJlc3RpdGNoL2FwaSc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2V0dGluZ0RhdGEge1xuICBwcml2YXRlIF9hcGkgPSBpbmplY3QoRnNBcGkpO1xuXG5cbiAgcHVibGljIGdldHMoZGF0YTogYW55ID0ge30sIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLmdldCgnc3lzdGVtL3NldHRpbmdzJywgZGF0YSwgeyBrZXk6ICdzZXR0aW5ncycsIC4uLmNvbmZpZyB9KTtcbiAgfVxuXG4gIHB1YmxpYyBidWxrKGRhdGE6IGFueSA9IHt9LCBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5wb3N0KCdzeXN0ZW0vc2V0dGluZ3MvYnVsaycsIGRhdGEsIHsga2V5OiAnc2V0dGluZ3MnLCAuLi5jb25maWcgfSk7XG4gIH1cblxuICBwdWJsaWMgZmlsZVVwbG9hZChzZXR0aW5nSWQ6IG51bWJlciB8IHN0cmluZywgZGF0YTogYW55ID0ge30sIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnBvc3QoYHN5c3RlbS9zZXR0aW5ncy8ke3NldHRpbmdJZH0vZmlsZXNgLCBkYXRhLCB7IGtleTogJ3NldHRpbmcnLCAuLi5jb25maWcgfSk7XG4gIH1cblxuICBwdWJsaWMgZmlsZURlbGV0ZShzZXR0aW5nSWQ6IG51bWJlciB8IHN0cmluZywgZGF0YTogYW55ID0ge30sIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLmRlbGV0ZShgc3lzdGVtL3NldHRpbmdzLyR7c2V0dGluZ0lkfS9maWxlc2AsIGRhdGEsIHsga2V5OiAnc2V0dGluZycsIC4uLmNvbmZpZyB9KTtcbiAgfVxufVxuIl19
@@ -35,6 +35,7 @@ import { InfoComponent } from './components/info/info.component';
35
35
  import { ProcessComponent } from './components/process/process.component';
36
36
  import { ProcessesComponent } from './components/processes/processes.component';
37
37
  import { ServerLogsComponent } from './components/server-logs/server-logs.component';
38
+ import { SettingInstructionsComponent } from './components/setting-instructions/setting-instructions.component';
38
39
  import { SettingsComponent } from './components/settings/settings.component';
39
40
  import { UpgradeLogsComponent } from './components/upgrade-logs/upgrade-logs.component';
40
41
  import { FS_SYSTEM_CONFIG } from './injectors/system-config.injector';
@@ -88,7 +89,8 @@ export class FsSystemModule {
88
89
  InfoComponent,
89
90
  ProcessComponent,
90
91
  CronComponent,
91
- CronLogComponent], exports: [DashboardComponent,
92
+ CronLogComponent,
93
+ SettingInstructionsComponent], exports: [DashboardComponent,
92
94
  CronsComponent,
93
95
  SettingsComponent,
94
96
  ProcessesComponent,
@@ -132,7 +134,8 @@ export class FsSystemModule {
132
134
  ApiLogComponent,
133
135
  ProcessComponent,
134
136
  CronComponent,
135
- CronLogComponent] });
137
+ CronLogComponent,
138
+ SettingInstructionsComponent] });
136
139
  }
137
140
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: FsSystemModule, decorators: [{
138
141
  type: NgModule,
@@ -177,6 +180,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
177
180
  ProcessComponent,
178
181
  CronComponent,
179
182
  CronLogComponent,
183
+ SettingInstructionsComponent,
180
184
  ],
181
185
  exports: [
182
186
  DashboardComponent,
@@ -190,4 +194,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
190
194
  ],
191
195
  }]
192
196
  }] });
193
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnMtc3lzdGVtLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zeXN0ZW0vZnMtc3lzdGVtLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUF1QixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQs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b0JBQW9CO3dCQUNwQixnQkFBZ0I7d0JBQ2hCLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixnQkFBZ0I7d0JBQ2hCLGFBQWE7d0JBQ2IsZ0JBQWdCO3FCQUNuQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ0wsa0JBQWtCO3dCQUNsQixjQUFjO3dCQUNkLGlCQUFpQjt3QkFDakIsa0JBQWtCO3dCQUNsQixtQkFBbUI7d0JBQ25CLG9CQUFvQjt3QkFDcEIsZ0JBQWdCO3dCQUNoQixhQUFhO3FCQUNoQjtpQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXREaWFsb2dNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0RXhwYW5zaW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZXhwYW5zaW9uJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcbmltcG9ydCB7IE1hdFNlbGVjdE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XG5pbXBvcnQgeyBNYXRUYWJzTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFicyc7XG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XG5cbmltcG9ydCB7IEZzQmFkZ2VNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9iYWRnZSc7XG5pbXBvcnQgeyBGc0NvbG9yUGlja2VyTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvY29sb3JwaWNrZXInO1xuaW1wb3J0IHsgRnNEYXRlTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvZGF0ZSc7XG5pbXBvcnQgeyBGc0RhdGVQaWNrZXJNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9kYXRlcGlja2VyJztcbmltcG9ydCB7IEZzRGlhbG9nTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvZGlhbG9nJztcbmltcG9ydCB7IEZzRmlsZU1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2ZpbGUnO1xuaW1wb3J0IHsgRnNGaWxlTWFuYWdlck1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2ZpbGUtbWFuYWdlcic7XG5pbXBvcnQgeyBGc0xhYmVsTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvbGFiZWwnO1xuaW1wb3J0IHsgRnNMaXN0TW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvbGlzdCc7XG5pbXBvcnQgeyBGc01lbnVNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9tZW51JztcbmltcG9ydCB7IEZzUG9wb3Zlck1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL3BvcG92ZXInO1xuaW1wb3J0IHsgRnNTa2VsZXRvbk1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL3NrZWxldG9uJztcblxuaW1wb3J0IHsgQXBpTG9nQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2FwaS1sb2cvYXBpLWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQXBpTG9nc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9hcGktbG9ncy9hcGktbG9ncy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ3JvbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jcm9uJztcbmltcG9ydCB7IENyb25Mb2dDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY3Jvbi1sb2cnO1xuaW1wb3J0IHsgQ3JvbkxvZ3NDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY3Jvbi1sb2dzJztcbmltcG9ydCB7IENyb25OZXh0UnVuQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2Nyb24tbmV4dC1ydW4nO1xuaW1wb3J0IHsgQ3JvbnNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY3JvbnMvY3JvbnMuY29tcG9uZW50JztcbmltcG9ydCB7IERhc2hib2FyZENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9kYXNoYm9hcmQvZGFzaGJvYXJkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJbmZvQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2luZm8vaW5mby5jb21wb25lbnQnO1xuaW1wb3J0IHsgUHJvY2Vzc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9wcm9jZXNzL3Byb2Nlc3MuY29tcG9uZW50JztcbmltcG9ydCB7IFByb2Nlc3Nlc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9wcm9jZXNzZXMvcHJvY2Vzc2VzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZXJ2ZXJMb2dzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NlcnZlci1sb2dzL3NlcnZlci1sb2dzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZXR0aW5nc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zZXR0aW5ncy9zZXR0aW5ncy5jb21wb25lbnQnO1xuaW1wb3J0IHsgVXBncmFkZUxvZ3NDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvdXBncmFkZS1sb2dzL3VwZ3JhZGUtbG9ncy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRlNfU1lTVEVNX0NPTkZJRyB9IGZyb20gJy4vaW5qZWN0b3JzL3N5c3RlbS1jb25maWcuaW5qZWN0b3InO1xuaW1wb3J0IHsgRnNTeXN0ZW1Db25maWcgfSBmcm9tICcuL2ludGVyZmFjZXMvc3lzdGVtLWNvbmZpZyc7XG5pbXBvcnQgeyBLZXlOYW1lVmFsdWVQaXBlIH0gZnJvbSAnLi9waXBlcy9rZXktbmFtZS12YWx1ZS5waXBlJztcblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICAgICAgTWF0RXhwYW5zaW9uTW9kdWxlLFxuICAgICAgICBNYXRUb29sdGlwTW9kdWxlLFxuICAgICAgICBNYXRJY29uTW9kdWxlLFxuICAgICAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgICAgIE1hdElucHV0TW9kdWxlLFxuICAgICAgICBNYXRTZWxlY3RNb2R1bGUsXG4gICAgICAgIE1hdERpYWxvZ01vZHVsZSxcbiAgICAgICAgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlLFxuICAgICAgICBNYXRUYWJzTW9kdWxlLFxuICAgICAgICBGc0RhdGVNb2R1bGUsXG4gICAgICAgIEZzU2tlbGV0b25Nb2R1bGUsXG4gICAgICAgIEZzTGlzdE1vZHVsZSxcbiAgICAgICAgRnNGaWxlTW9kdWxlLFxuICAgICAgICBGc0ZpbGVNYW5hZ2VyTW9kdWxlLFxuICAgICAgICBGc0xhYmVsTW9kdWxlLFxuICAgICAgICBGc0RpYWxvZ01vZHVsZSxcbiAgICAgICAgRnNEYXRlUGlja2VyTW9kdWxlLFxuICAgICAgICBGc01lbnVNb2R1bGUsXG4gICAgICAgIEZzQmFkZ2VNb2R1bGUsXG4gICAgICAgIEZzUG9wb3Zlck1vZHVsZSxcbiAgICAgICAgRnNDb2xvclBpY2tlck1vZHVsZSxcbiAgICAgICAgQ3JvbkxvZ3NDb21wb25lbnQsXG4gICAgICAgIERhc2hib2FyZENvbXBvbmVudCxcbiAgICAgICAgQ3Jvbk5leHRSdW5Db21wb25lbnQsXG4gICAgICAgIENyb25zQ29tcG9uZW50LFxuICAgICAgICBTZXR0aW5nc0NvbXBvbmVudCxcbiAgICAgICAgS2V5TmFtZVZhbHVlUGlwZSxcbiAgICAgICAgUHJvY2Vzc2VzQ29tcG9uZW50LFxuICAgICAgICBTZXJ2ZXJMb2dzQ29tcG9uZW50LFxuICAgICAgICBVcGdyYWRlTG9nc0NvbXBvbmVudCxcbiAgICAgICAgQXBpTG9nc0NvbXBvbmVudCxcbiAgICAgICAgQXBpTG9nQ29tcG9uZW50LFxuICAgICAgICBJbmZvQ29tcG9uZW50LFxuICAgICAgICBQcm9jZXNzQ29tcG9uZW50LFxuICAgICAgICBDcm9uQ29tcG9uZW50LFxuICAgICAgICBDcm9uTG9nQ29tcG9uZW50LFxuICAgIF0sXG4gICAgZXhwb3J0czogW1xuICAgICAgICBEYXNoYm9hcmRDb21wb25lbnQsXG4gICAgICAgIENyb25zQ29tcG9uZW50LFxuICAgICAgICBTZXR0aW5nc0NvbXBvbmVudCxcbiAgICAgICAgUHJvY2Vzc2VzQ29tcG9uZW50LFxuICAgICAgICBTZXJ2ZXJMb2dzQ29tcG9uZW50LFxuICAgICAgICBVcGdyYWRlTG9nc0NvbXBvbmVudCxcbiAgICAgICAgQXBpTG9nc0NvbXBvbmVudCxcbiAgICAgICAgSW5mb0NvbXBvbmVudCxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBGc1N5c3RlbU1vZHVsZSB7XG4gIHB1YmxpYyBzdGF0aWMgZm9yUm9vdChjb25maWc6IEZzU3lzdGVtQ29uZmlnKTogTW9kdWxlV2l0aFByb3ZpZGVyczxGc1N5c3RlbU1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogRnNTeXN0ZW1Nb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBGU19TWVNURU1fQ09ORklHLCB1c2VWYWx1ZTogY29uZmlnIHx8IHt9IH0sXG4gICAgICBdLFxuICAgIH07XG4gIH1cbn1cblxuXG4iXX0=
197
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnMtc3lzdGVtLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zeXN0ZW0vZnMtc3lzdGVtLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUF1QixRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRTdELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDcEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQ3JGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBQ2hILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtEQUFrRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRXRFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDOztBQXdEL0QsTUFBTSxPQUFPLGNBQWM7SUFDbEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFzQjtRQUMxQyxPQUFPO1lBQ0wsUUFBUSxFQUFFLGNBQWM7WUFDeEIsU0FBUyxFQUFFO2dCQUNULEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxNQUFNLElBQUksRUFBRSxFQUFFO2FBQ3REO1NBQ0YsQ0FBQztJQUNKLENBQUM7dUdBUlUsY0FBYzt3R0FBZCxjQUFjLFlBcERuQixZQUFZO1lBQ1osV0FBVztZQUNYLGVBQWU7WUFDZixrQkFBa0I7WUFDbEIsZ0JBQWdCO1lBQ2hCLGFBQWE7WUFDYixrQkFBa0I7WUFDbEIsY0FBYztZQUNkLGVBQWU7WUFDZixlQUFlO1lBQ2Ysd0JBQXdCO1lBQ3hCLGFBQWE7WUFDYixZQUFZO1lBQ1osZ0JBQWdCO1lBQ2hCLFlBQVk7WUFDWixZQUFZO1lBQ1osbUJBQW1CO1lBQ25CLGFBQWE7WUFDYixjQUFjO1lBQ2Qsa0JBQWtCO1lBQ2xCLFlBQVk7WUFDWixhQUFhO1lBQ2IsZUFBZTtZQUNmLG1CQUFtQjtZQUNuQixpQkFBaUI7WUFDakIsa0JBQWtCO1lBQ2xCLG9CQUFvQjtZQUNwQixjQUFjO1lBQ2QsaUJBQWlCO1lBQ2pCLGdCQUFnQjtZQUNoQixrQkFBa0I7WUFDbEIsbUJBQW1CO1lBQ25CLG9CQUFvQjtZQUNwQixnQkFBZ0I7WUFDaEIsZUFBZTtZQUNmLGFBQWE7WUFDYixnQkFBZ0I7WUFDaEIsYUFBYTtZQUNiLGdCQUFnQjtZQUNoQiw0QkFBNEIsYUFHNUIsa0JBQWtCO1lBQ2xCLGNBQWM7WUFDZCxpQkFBaUI7WUFDakIsa0JBQWtCO1lBQ2xCLG1CQUFtQjtZQUNuQixvQkFBb0I7WUFDcEIsZ0JBQWdCO1lBQ2hCLGFBQWE7d0dBR1IsY0FBYyxZQXBEbkIsWUFBWTtZQUNaLFdBQVc7WUFDWCxlQUFlO1lBQ2Ysa0JBQWtCO1lBQ2xCLGdCQUFnQjtZQUNoQixhQUFhO1lBQ2Isa0JBQWtCO1lBQ2xCLGNBQWM7WUFDZCxlQUFlO1lBQ2YsZUFBZTtZQUNmLHdCQUF3QjtZQUN4QixhQUFhO1lBQ2IsWUFBWTtZQUNaLGdCQUFnQjtZQUNoQixZQUFZO1lBQ1osWUFBWTtZQUNaLG1CQUFtQjtZQUNuQixhQUFhO1lBQ2IsY0FBYztZQUNkLGtCQUFrQjtZQUNsQixZQUFZO1lBQ1osYUFBYTtZQUNiLGVBQWU7WUFDZixtQkFBbUI7WUFDbkIsaUJBQWlCO1lBQ2pCLGtCQUFrQjtZQUNsQixvQkFBb0I7WUFDcEIsY0FBYztZQUNkLGlCQUFpQjtZQUVqQixrQkFBa0I7WUFDbEIsbUJBQW1CO1lBQ25CLG9CQUFvQjtZQUNwQixnQkFBZ0I7WUFDaEIsZUFBZTtZQUVmLGdCQUFnQjtZQUNoQixhQUFhO1lBQ2IsZ0JBQWdCO1lBQ2hCLDRCQUE0Qjs7MkZBYXZCLGNBQWM7a0JBdEQxQixRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRTt3QkFDTCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsZUFBZTt3QkFDZixrQkFBa0I7d0JBQ2xCLGdCQUFnQjt3QkFDaEIsYUFBYTt3QkFDYixrQkFBa0I7d0JBQ2xCLGNBQWM7d0JBQ2QsZUFBZTt3QkFDZixlQUFlO3dCQUNmLHdCQUF3Qjt3QkFDeEIsYUFBYTt3QkFDYixZQUFZO3dCQUNaLGdCQUFnQjt3QkFDaEIsWUFBWTt3QkFDWixZQUFZO3dCQUNaLG1CQUFtQjt3QkFDbkIsYUFBYTt3QkFDYixjQUFjO3dCQUNkLGtCQUFrQjt3QkFDbEIsWUFBWTt3QkFDWixhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsbUJBQW1CO3dCQUNuQixpQkFBaUI7d0JBQ2pCLGtCQUFrQjt3QkFDbEIsb0JBQW9CO3dCQUNwQixjQUFjO3dCQUNkLGlCQUFpQjt3QkFDakIsZ0JBQWdCO3dCQUNoQixrQkFBa0I7d0JBQ2xCLG1CQUFtQjt3QkFDbkIsb0JBQW9CO3dCQUNwQixnQkFBZ0I7d0JBQ2hCLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYixnQkFBZ0I7d0JBQ2hCLGFBQWE7d0JBQ2IsZ0JBQWdCO3dCQUNoQiw0QkFBNEI7cUJBQy9CO29CQUNELE9BQU8sRUFBRTt3QkFDTCxrQkFBa0I7d0JBQ2xCLGNBQWM7d0JBQ2QsaUJBQWlCO3dCQUNqQixrQkFBa0I7d0JBQ2xCLG1CQUFtQjt3QkFDbkIsb0JBQW9CO3dCQUNwQixnQkFBZ0I7d0JBQ2hCLGFBQWE7cUJBQ2hCO2lCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7IE1hdERpYWxvZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRFeHBhbnNpb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9leHBhbnNpb24nO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcbmltcG9ydCB7IE1hdFRhYnNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90YWJzJztcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcblxuaW1wb3J0IHsgRnNCYWRnZU1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2JhZGdlJztcbmltcG9ydCB7IEZzQ29sb3JQaWNrZXJNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9jb2xvcnBpY2tlcic7XG5pbXBvcnQgeyBGc0RhdGVNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9kYXRlJztcbmltcG9ydCB7IEZzRGF0ZVBpY2tlck1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2RhdGVwaWNrZXInO1xuaW1wb3J0IHsgRnNEaWFsb2dNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9kaWFsb2cnO1xuaW1wb3J0IHsgRnNGaWxlTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvZmlsZSc7XG5pbXBvcnQgeyBGc0ZpbGVNYW5hZ2VyTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvZmlsZS1tYW5hZ2VyJztcbmltcG9ydCB7IEZzTGFiZWxNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9sYWJlbCc7XG5pbXBvcnQgeyBGc0xpc3RNb2R1bGUgfSBmcm9tICdAZmlyZXN0aXRjaC9saXN0JztcbmltcG9ydCB7IEZzTWVudU1vZHVsZSB9IGZyb20gJ0BmaXJlc3RpdGNoL21lbnUnO1xuaW1wb3J0IHsgRnNQb3BvdmVyTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvcG9wb3Zlcic7XG5pbXBvcnQgeyBGc1NrZWxldG9uTW9kdWxlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvc2tlbGV0b24nO1xuXG5pbXBvcnQgeyBBcGlMb2dDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvYXBpLWxvZy9hcGktbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBcGlMb2dzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2FwaS1sb2dzL2FwaS1sb2dzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDcm9uQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2Nyb24nO1xuaW1wb3J0IHsgQ3JvbkxvZ0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jcm9uLWxvZyc7XG5pbXBvcnQgeyBDcm9uTG9nc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jcm9uLWxvZ3MnO1xuaW1wb3J0IHsgQ3Jvbk5leHRSdW5Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY3Jvbi1uZXh0LXJ1bic7XG5pbXBvcnQgeyBDcm9uc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jcm9ucy9jcm9ucy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGFzaGJvYXJkQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2Rhc2hib2FyZC9kYXNoYm9hcmQuY29tcG9uZW50JztcbmltcG9ydCB7IEluZm9Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvaW5mby9pbmZvLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQcm9jZXNzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Byb2Nlc3MvcHJvY2Vzcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgUHJvY2Vzc2VzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3Byb2Nlc3Nlcy9wcm9jZXNzZXMuY29tcG9uZW50JztcbmltcG9ydCB7IFNlcnZlckxvZ3NDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc2VydmVyLWxvZ3Mvc2VydmVyLWxvZ3MuY29tcG9uZW50JztcbmltcG9ydCB7IFNldHRpbmdJbnN0cnVjdGlvbnNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvc2V0dGluZy1pbnN0cnVjdGlvbnMvc2V0dGluZy1pbnN0cnVjdGlvbnMuY29tcG9uZW50JztcbmltcG9ydCB7IFNldHRpbmdzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NldHRpbmdzL3NldHRpbmdzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBVcGdyYWRlTG9nc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy91cGdyYWRlLWxvZ3MvdXBncmFkZS1sb2dzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGU19TWVNURU1fQ09ORklHIH0gZnJvbSAnLi9pbmplY3RvcnMvc3lzdGVtLWNvbmZpZy5pbmplY3Rvcic7XG5pbXBvcnQgeyBGc1N5c3RlbUNvbmZpZyB9IGZyb20gJy4vaW50ZXJmYWNlcy9zeXN0ZW0tY29uZmlnJztcbmltcG9ydCB7IEtleU5hbWVWYWx1ZVBpcGUgfSBmcm9tICcuL3BpcGVzL2tleS1uYW1lLXZhbHVlLnBpcGUnO1xuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgICAgICBNYXRFeHBhbnNpb25Nb2R1bGUsXG4gICAgICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgICAgIE1hdEljb25Nb2R1bGUsXG4gICAgICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcbiAgICAgICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgICAgIE1hdFNlbGVjdE1vZHVsZSxcbiAgICAgICAgTWF0RGlhbG9nTW9kdWxlLFxuICAgICAgICBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUsXG4gICAgICAgIE1hdFRhYnNNb2R1bGUsXG4gICAgICAgIEZzRGF0ZU1vZHVsZSxcbiAgICAgICAgRnNTa2VsZXRvbk1vZHVsZSxcbiAgICAgICAgRnNMaXN0TW9kdWxlLFxuICAgICAgICBGc0ZpbGVNb2R1bGUsXG4gICAgICAgIEZzRmlsZU1hbmFnZXJNb2R1bGUsXG4gICAgICAgIEZzTGFiZWxNb2R1bGUsXG4gICAgICAgIEZzRGlhbG9nTW9kdWxlLFxuICAgICAgICBGc0RhdGVQaWNrZXJNb2R1bGUsXG4gICAgICAgIEZzTWVudU1vZHVsZSxcbiAgICAgICAgRnNCYWRnZU1vZHVsZSxcbiAgICAgICAgRnNQb3BvdmVyTW9kdWxlLFxuICAgICAgICBGc0NvbG9yUGlja2VyTW9kdWxlLFxuICAgICAgICBDcm9uTG9nc0NvbXBvbmVudCxcbiAgICAgICAgRGFzaGJvYXJkQ29tcG9uZW50LFxuICAgICAgICBDcm9uTmV4dFJ1bkNvbXBvbmVudCxcbiAgICAgICAgQ3JvbnNDb21wb25lbnQsXG4gICAgICAgIFNldHRpbmdzQ29tcG9uZW50LFxuICAgICAgICBLZXlOYW1lVmFsdWVQaXBlLFxuICAgICAgICBQcm9jZXNzZXNDb21wb25lbnQsXG4gICAgICAgIFNlcnZlckxvZ3NDb21wb25lbnQsXG4gICAgICAgIFVwZ3JhZGVMb2dzQ29tcG9uZW50LFxuICAgICAgICBBcGlMb2dzQ29tcG9uZW50LFxuICAgICAgICBBcGlMb2dDb21wb25lbnQsXG4gICAgICAgIEluZm9Db21wb25lbnQsXG4gICAgICAgIFByb2Nlc3NDb21wb25lbnQsXG4gICAgICAgIENyb25Db21wb25lbnQsXG4gICAgICAgIENyb25Mb2dDb21wb25lbnQsXG4gICAgICAgIFNldHRpbmdJbnN0cnVjdGlvbnNDb21wb25lbnQsXG4gICAgXSxcbiAgICBleHBvcnRzOiBbXG4gICAgICAgIERhc2hib2FyZENvbXBvbmVudCxcbiAgICAgICAgQ3JvbnNDb21wb25lbnQsXG4gICAgICAgIFNldHRpbmdzQ29tcG9uZW50LFxuICAgICAgICBQcm9jZXNzZXNDb21wb25lbnQsXG4gICAgICAgIFNlcnZlckxvZ3NDb21wb25lbnQsXG4gICAgICAgIFVwZ3JhZGVMb2dzQ29tcG9uZW50LFxuICAgICAgICBBcGlMb2dzQ29tcG9uZW50LFxuICAgICAgICBJbmZvQ29tcG9uZW50LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIEZzU3lzdGVtTW9kdWxlIHtcbiAgcHVibGljIHN0YXRpYyBmb3JSb290KGNvbmZpZzogRnNTeXN0ZW1Db25maWcpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPEZzU3lzdGVtTW9kdWxlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBGc1N5c3RlbU1vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IEZTX1NZU1RFTV9DT05GSUcsIHVzZVZhbHVlOiBjb25maWcgfHwge30gfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxufVxuXG5cbiJdfQ==