@arsedizioni/ars-utils 18.1.74 → 18.1.76
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/clipper.common/common/common.module.d.ts +1 -2
- package/clipper.common/common/definitions.d.ts +317 -0
- package/clipper.common/common/interceptors/auth.interceptor.d.ts +2 -5
- package/clipper.common/common/messages.d.ts +4 -0
- package/clipper.common/common/services/clipper.service.d.ts +12 -36
- package/clipper.ui/{ui/document/documents.d.ts → documents.d.ts} +2 -6
- package/clipper.ui/public_api.d.ts +6 -5
- package/clipper.ui/ui/browser-dialog/browser-dialog.component.d.ts +30 -143
- package/clipper.ui/ui/clipper.scss +270 -106
- package/clipper.ui/ui/document/document.component.d.ts +64 -118
- package/clipper.ui/ui/document-index/document-index.component.d.ts +34 -0
- package/clipper.ui/ui/document-manager/document-manager.d.ts +126 -0
- package/clipper.ui/ui/document-menu/document-menu.component.d.ts +28 -0
- package/clipper.ui/ui/references/references.component.d.ts +39 -73
- package/clipper.ui/ui/search-calendar/search-calendar.component.d.ts +40 -0
- package/clipper.ui/ui/search-dialog/search-dialog.component.d.ts +37 -40
- package/clipper.ui/ui/search-facets/search-facets.component.d.ts +22 -70
- package/clipper.ui/ui/search-free-text-help/search-free-text-help.component.d.ts +0 -1
- package/clipper.ui/ui/search-free-text-query-builder/search-free-text-query-builder.component.d.ts +8 -12
- package/clipper.ui/ui/search-result-item/search-result-item.component.d.ts +6 -4
- package/clipper.ui/ui/search-result-manager/search-result-manager.d.ts +147 -0
- package/esm2022/clipper.common/common/common.module.mjs +2 -3
- package/esm2022/clipper.common/common/definitions.mjs +1536 -0
- package/esm2022/clipper.common/common/interceptors/auth.interceptor.mjs +15 -15
- package/esm2022/clipper.common/common/messages.mjs +6 -1
- package/esm2022/clipper.common/common/services/clipper.service.mjs +65 -65
- package/esm2022/clipper.ui/documents.mjs +51 -0
- package/esm2022/clipper.ui/public_api.mjs +7 -6
- package/esm2022/clipper.ui/ui/browser-dialog/browser-dialog.component.mjs +320 -785
- package/esm2022/clipper.ui/ui/document/document.component.mjs +213 -320
- package/esm2022/clipper.ui/ui/document-index/document-index.component.mjs +121 -0
- package/esm2022/clipper.ui/ui/document-manager/document-manager.mjs +431 -0
- package/esm2022/clipper.ui/ui/document-menu/document-menu.component.mjs +56 -0
- package/esm2022/clipper.ui/ui/references/references.component.mjs +244 -438
- package/esm2022/clipper.ui/ui/search-calendar/search-calendar.component.mjs +116 -0
- package/esm2022/clipper.ui/ui/search-dialog/search-dialog.component.mjs +216 -205
- package/esm2022/clipper.ui/ui/search-facets/search-facets.component.mjs +157 -209
- package/esm2022/clipper.ui/ui/search-free-text-help/search-free-text-help.component.mjs +7 -8
- package/esm2022/clipper.ui/ui/search-free-text-query-builder/search-free-text-query-builder.component.mjs +22 -23
- package/esm2022/clipper.ui/ui/search-result-item/search-result-item.component.mjs +12 -10
- package/esm2022/clipper.ui/ui/search-result-manager/search-result-manager.mjs +462 -0
- package/esm2022/help/components/help-viewer/help-viewer.component.mjs +25 -28
- package/esm2022/support.common/common/definitions.mjs +21 -0
- package/esm2022/support.common/common/services/support.service.mjs +9 -7
- package/esm2022/support.common/public_api.mjs +2 -2
- package/esm2022/support.ui/ui/notifications-browser/notification/notification.component.mjs +3 -3
- package/esm2022/support.ui/ui/notifications-browser/notifications-browser.component.mjs +4 -5
- package/esm2022/ui/ui/dialogs/busy/busy-dialog.component.mjs +3 -3
- package/esm2022/ui/ui/dialogs/confirm/confirm-dialog.component.mjs +3 -3
- package/esm2022/ui/ui/dialogs/credentials/credentials-dialog.component.mjs +3 -3
- package/esm2022/ui/ui/dialogs/info/info-dialog.component.mjs +3 -3
- package/esm2022/ui/ui/dialogs/recover-password/recover-password-dialog.component.mjs +3 -3
- package/esm2022/ui/ui/dialogs/reset-password/reset-password-dialog.component.mjs +3 -3
- package/esm2022/ui.application/public_api.mjs +4 -1
- package/esm2022/ui.application/ui/components/button-selector/button-selector.component.mjs +163 -0
- package/esm2022/ui.application/ui/components/button-toggle/button-toggle.component.mjs +47 -0
- package/esm2022/ui.application/ui/components/chips-selector/chips-selector.component.mjs +239 -0
- package/esm2022/ui.application/ui/components/file-preview/file-preview.component.mjs +23 -24
- package/esm2022/ui.application/ui/components/filter-bar/filter-bar.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/prompt/prompt-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/prompt-date/prompt-date-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/prompt-time/prompt-time-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/select/select-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/select-file/select-file-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/select-picture/select-picture-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/select-tree/select-tree-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/dialogs/send-to/send-to-dialog.component.mjs +3 -3
- package/esm2022/ui.application/ui/messages.mjs +3 -3
- package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs +1608 -1507
- package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +2283 -2407
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-help.mjs +25 -28
- package/fesm2022/arsedizioni-ars-utils-help.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-support.common.mjs +8 -6
- package/fesm2022/arsedizioni-ars-utils-support.common.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-support.ui.mjs +5 -6
- package/fesm2022/arsedizioni-ars-utils-support.ui.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.application.mjs +450 -47
- package/fesm2022/arsedizioni-ars-utils-ui.application.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.mjs +12 -12
- package/fesm2022/arsedizioni-ars-utils-ui.mjs.map +1 -1
- package/help/components/help-viewer/help-viewer.component.d.ts +6 -10
- package/package.json +13 -13
- package/styles/ui.scss +140 -0
- package/support.common/common/services/support.service.d.ts +2 -2
- package/support.common/public_api.d.ts +1 -1
- package/ui.application/public_api.d.ts +3 -0
- package/ui.application/ui/components/button-selector/button-selector.component.d.ts +49 -0
- package/ui.application/ui/components/button-toggle/button-toggle.component.d.ts +26 -0
- package/ui.application/ui/components/chips-selector/chips-selector.component.d.ts +70 -0
- package/ui.application/ui/components/file-preview/file-preview.component.d.ts +4 -8
- package/ui.application/ui/messages.d.ts +2 -2
- package/clipper.common/common/clipper.d.ts +0 -119
- package/clipper.common/common/search.d.ts +0 -49
- package/clipper.ui/ui/document/base/document-base.component.d.ts +0 -38
- package/clipper.ui/ui/document/document-index/document-index.component.d.ts +0 -38
- package/clipper.ui/ui/document/document-menu/document-menu.component.d.ts +0 -30
- package/clipper.ui/ui/last-15-days/last-15-days.component.d.ts +0 -41
- package/esm2022/clipper.common/common/clipper.mjs +0 -1371
- package/esm2022/clipper.common/common/search.mjs +0 -69
- package/esm2022/clipper.ui/ui/document/base/document-base.component.mjs +0 -194
- package/esm2022/clipper.ui/ui/document/document-index/document-index.component.mjs +0 -121
- package/esm2022/clipper.ui/ui/document/document-menu/document-menu.component.mjs +0 -88
- package/esm2022/clipper.ui/ui/document/documents.mjs +0 -49
- package/esm2022/clipper.ui/ui/last-15-days/last-15-days.component.mjs +0 -107
- package/esm2022/help/components/help-search-query-builder/help-search-query-builder.component.mjs +0 -114
- package/esm2022/support.common/common/support.mjs +0 -21
- package/esm2022/ui.oauth/ui/components/login/loginOAuth.component.mjs +0 -198
- package/help/components/help-search-query-builder/help-search-query-builder.component.d.ts +0 -29
- package/help/help.scss +0 -72
- package/ui.oauth/ui/components/login/loginOAuth.component.d.ts +0 -38
- /package/support.common/common/{support.d.ts → definitions.d.ts} +0 -0
|
@@ -1,152 +1,162 @@
|
|
|
1
|
-
import { Component, EventEmitter,
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { ClipperSearchFreeTextQueryBuilderComponent } from '../search-free-text-query-builder/search-free-text-query-builder.component';
|
|
1
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, Output, ViewChild, inject } from '@angular/core';
|
|
2
|
+
import { FormsModule } from '@angular/forms';
|
|
3
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
4
|
+
import { MatCheckboxModule } from '@angular/material/checkbox';
|
|
5
|
+
import { MatOptionModule } from '@angular/material/core';
|
|
7
6
|
import { MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER, MatDatepickerModule } from '@angular/material/datepicker';
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
7
|
+
import { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';
|
|
8
|
+
import { MatExpansionModule } from '@angular/material/expansion';
|
|
9
|
+
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
11
10
|
import { MatIconModule } from '@angular/material/icon';
|
|
12
|
-
import { MatButtonModule } from '@angular/material/button';
|
|
13
11
|
import { MatInputModule } from '@angular/material/input';
|
|
14
|
-
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
15
|
-
import { MatOptionModule } from '@angular/material/core';
|
|
16
12
|
import { MatSelectModule } from '@angular/material/select';
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
13
|
+
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
14
|
+
import { ClipperAuthors, ClipperChannels, ClipperModule, ClipperRegions, ClipperSearchUtils, ClipperSectorTypes, ClipperSectors, ClipperService } from '@arsedizioni/ars-utils/clipper.common';
|
|
15
|
+
import { DateInterval, DateIntervalChangeDirective, SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';
|
|
16
|
+
import { DialogService } from '@arsedizioni/ars-utils/ui';
|
|
17
|
+
import { ExtendedModule } from '@ngbracket/ngx-layout/extended';
|
|
19
18
|
import { FlexModule } from '@ngbracket/ngx-layout/flex';
|
|
20
|
-
import {
|
|
19
|
+
import { Subject } from 'rxjs';
|
|
20
|
+
import { ClipperSearchFreeTextHelpComponent } from '../search-free-text-help/search-free-text-help.component';
|
|
21
|
+
import { ClipperSearchFreeTextQueryBuilderComponent } from '../search-free-text-query-builder/search-free-text-query-builder.component';
|
|
22
|
+
import { MatMenuModule } from '@angular/material/menu';
|
|
23
|
+
import { ChipsSelectorComponent } from '@arsedizioni/ars-utils/ui.application';
|
|
24
|
+
import { MatDividerModule } from '@angular/material/divider';
|
|
21
25
|
import * as i0 from "@angular/core";
|
|
22
|
-
import * as i1 from "@
|
|
23
|
-
import * as i2 from "@
|
|
24
|
-
import * as i3 from "@angular/material/
|
|
25
|
-
import * as i4 from "@angular/
|
|
26
|
-
import * as i5 from "@
|
|
27
|
-
import * as i6 from "@angular/material/
|
|
28
|
-
import * as i7 from "@angular/material/
|
|
29
|
-
import * as i8 from "@angular/material/
|
|
30
|
-
import * as i9 from "@angular/material/
|
|
31
|
-
import * as i10 from "@angular/material/
|
|
32
|
-
import * as i11 from "@angular/material/
|
|
33
|
-
import * as i12 from "@
|
|
34
|
-
import * as i13 from "@angular/material/
|
|
35
|
-
import * as i14 from "@
|
|
36
|
-
import * as i15 from "@angular/material/datepicker";
|
|
26
|
+
import * as i1 from "@angular/forms";
|
|
27
|
+
import * as i2 from "@ngbracket/ngx-layout/flex";
|
|
28
|
+
import * as i3 from "@angular/material/form-field";
|
|
29
|
+
import * as i4 from "@angular/material/expansion";
|
|
30
|
+
import * as i5 from "@angular/material/select";
|
|
31
|
+
import * as i6 from "@angular/material/core";
|
|
32
|
+
import * as i7 from "@angular/material/tooltip";
|
|
33
|
+
import * as i8 from "@angular/material/input";
|
|
34
|
+
import * as i9 from "@angular/material/button";
|
|
35
|
+
import * as i10 from "@angular/material/icon";
|
|
36
|
+
import * as i11 from "@angular/material/menu";
|
|
37
|
+
import * as i12 from "@ngbracket/ngx-layout/extended";
|
|
38
|
+
import * as i13 from "@angular/material/datepicker";
|
|
39
|
+
import * as i14 from "@angular/material/divider";
|
|
37
40
|
export class ClipperSearchDialogComponent {
|
|
38
|
-
constructor(
|
|
39
|
-
this.$dialog = $dialog;
|
|
40
|
-
this.$clipper = $clipper;
|
|
41
|
-
this.dialog = dialog;
|
|
41
|
+
constructor() {
|
|
42
42
|
this.done = new EventEmitter();
|
|
43
|
-
this.
|
|
44
|
-
this.
|
|
45
|
-
this.
|
|
46
|
-
this.
|
|
47
|
-
this.enableTaxonomy = false;
|
|
48
|
-
this.enableType = false;
|
|
49
|
-
this.enableText = false;
|
|
50
|
-
this.enableModel = false;
|
|
51
|
-
this.enableSector = false;
|
|
52
|
-
this.enableSource = false;
|
|
53
|
-
this.enableDocument = false;
|
|
54
|
-
this.enableDeadline = false;
|
|
55
|
-
this.enablePublication = false;
|
|
56
|
-
this.enableChanges = false;
|
|
57
|
-
this.enableRead = false;
|
|
58
|
-
this.enableComments = false;
|
|
59
|
-
this.enablePublication = _data.enablePublication;
|
|
60
|
-
this.enableDocument = _data.enableDocument;
|
|
61
|
-
this.enableDeadline = _data.enableDeadline;
|
|
62
|
-
this.enableModel = _data.enableModel;
|
|
63
|
-
this.enableSector = _data.enableSector;
|
|
64
|
-
this.enableSource = _data.enableSource;
|
|
65
|
-
this.enableAuthor = _data.enableAuthor;
|
|
66
|
-
this.enableTopic = _data.enableTopic;
|
|
67
|
-
this.enableTaxonomy = _data.enableTaxonomy;
|
|
68
|
-
this.enableType = _data.enableType;
|
|
69
|
-
this.enableText = _data.enableText;
|
|
70
|
-
this.enableChanges = _data.enableChanges;
|
|
71
|
-
this.enableComments = _data.enableComments;
|
|
72
|
-
this.enableRead = true;
|
|
43
|
+
this.unsubscribe = new Subject();
|
|
44
|
+
this.clipperService = inject(ClipperService);
|
|
45
|
+
this.dialogService = inject(DialogService);
|
|
46
|
+
this.dialogData = inject(MAT_DIALOG_DATA) ?? { displayMode: 'simple' };
|
|
73
47
|
this.params = {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
count: 25,
|
|
77
|
-
first: 0
|
|
48
|
+
channels: [...ClipperChannels],
|
|
49
|
+
count: 15
|
|
78
50
|
};
|
|
79
|
-
this.
|
|
80
|
-
this.
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
this.
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
this.
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
this.types = ClipperDefinitions.SECTOR_TYPES;
|
|
111
|
-
this.params.type = _data.params.type;
|
|
112
|
-
}
|
|
113
|
-
if (this.enableSource) {
|
|
114
|
-
this.sources = ClipperDefinitions.SOURCES;
|
|
115
|
-
this.params.source = _data.params.source;
|
|
116
|
-
this.params.sourceNumber = _data.params.sourceNumber;
|
|
117
|
-
if (_data.params.sourceFromDate)
|
|
118
|
-
this.sourceInterval.from = _data.params.sourceFromDate;
|
|
119
|
-
if (_data.params.sourceToDate)
|
|
120
|
-
this.sourceInterval.to = _data.params.sourceToDate;
|
|
121
|
-
}
|
|
122
|
-
if (this.enableChanges) {
|
|
123
|
-
this.types = _data.changeReasons;
|
|
124
|
-
this.params.reason = _data.params.reason;
|
|
125
|
-
this.params.changedNumber = _data.params.changedNumber;
|
|
126
|
-
this.params.changedYear = _data.params.changedYear;
|
|
127
|
-
this.params.changedTitle = _data.params.changedTitle;
|
|
128
|
-
this.params.modifierNumber = _data.params.modifierNumber;
|
|
129
|
-
this.params.modifierYear = _data.params.modifierYear;
|
|
130
|
-
this.params.modifierTitle = _data.params.modifierTitle;
|
|
131
|
-
}
|
|
132
|
-
if (this.enableDeadline) {
|
|
133
|
-
this.types = _data.deadlines;
|
|
134
|
-
this.params.type = _data.params.type;
|
|
135
|
-
}
|
|
136
|
-
if (!this.enableRead === false)
|
|
137
|
-
this.enableRead = false;
|
|
138
|
-
if (this.params.model === ClipperDefinitions.DM_SCADENZA_SEGNALAZIONE ||
|
|
139
|
-
this.params.model === ClipperDefinitions.DM_NORMATIVA_VIGENTE ||
|
|
140
|
-
this.params.model === ClipperDefinitions.DM_METODI_ANALISI)
|
|
141
|
-
this.enableRead = false;
|
|
51
|
+
this.modulesEnum = ClipperModule;
|
|
52
|
+
this.sectors = ClipperSectors.filter((n) => n.group === 'S').map((n) => {
|
|
53
|
+
return { name: n.shortName ?? n.name, value: n.value };
|
|
54
|
+
});
|
|
55
|
+
this.isLaws = () => {
|
|
56
|
+
return (this.dialogData.displayMode === "laws" ||
|
|
57
|
+
(this.dialogData.displayMode === "module" && this.dialogData.module === ClipperModule.NormativaVigente) ||
|
|
58
|
+
(this.dialogData.displayMode === "module" && this.dialogData.module === ClipperModule.GazzetteBollettiniEFontiDiverse));
|
|
59
|
+
};
|
|
60
|
+
this.isNews = () => {
|
|
61
|
+
return (this.dialogData.displayMode === "news" ||
|
|
62
|
+
(this.dialogData.displayMode === "module" && this.dialogData.module === ClipperModule.News) ||
|
|
63
|
+
(this.dialogData.displayMode === "module" && this.dialogData.module === ClipperModule.Approfondimenti));
|
|
64
|
+
};
|
|
65
|
+
this.isModule = (module) => {
|
|
66
|
+
return this.dialogData.displayMode === "module" && this.dialogData.module === module;
|
|
67
|
+
};
|
|
68
|
+
this.hasRegions = () => {
|
|
69
|
+
return (this.params.sectors?.filter(n => n.value === 'LR').length ?? 0) > 0;
|
|
70
|
+
};
|
|
71
|
+
this.hasAuthorOrType = () => {
|
|
72
|
+
return this.params.sectors?.length === 1 && this.isLaws();
|
|
73
|
+
};
|
|
74
|
+
this.regions = [...ClipperRegions];
|
|
75
|
+
this.channels = [...ClipperChannels];
|
|
76
|
+
this.sources = [];
|
|
77
|
+
this.authors = [];
|
|
78
|
+
this.types = [];
|
|
79
|
+
this.topics = [];
|
|
80
|
+
this.interval = new DateInterval();
|
|
81
|
+
this.sourceInterval = new DateInterval();
|
|
142
82
|
}
|
|
143
83
|
ngOnInit() {
|
|
144
|
-
this.
|
|
145
|
-
|
|
146
|
-
|
|
84
|
+
if (this.dialogData) {
|
|
85
|
+
if (this.dialogData.displayMode === 'simple') {
|
|
86
|
+
this.params.text = this.dialogData.text;
|
|
87
|
+
this.params.titleOnly = this.dialogData.titleOnly;
|
|
88
|
+
this.params.number = this.dialogData.number;
|
|
89
|
+
this.params.year = this.dialogData.year;
|
|
90
|
+
this.params.fromDate = this.dialogData.fromDate;
|
|
91
|
+
this.params.toDate = this.dialogData.toDate;
|
|
92
|
+
this.interval = new DateInterval(this.params.fromDate, this.params.toDate);
|
|
93
|
+
}
|
|
94
|
+
else if (this.isLaws()) {
|
|
95
|
+
this.params.text = this.dialogData.text;
|
|
96
|
+
this.params.titleOnly = this.dialogData.titleOnly;
|
|
97
|
+
this.params.number = this.dialogData.number;
|
|
98
|
+
this.params.year = this.dialogData.year;
|
|
99
|
+
this.params.fromDate = this.dialogData.fromDate;
|
|
100
|
+
this.params.toDate = this.dialogData.toDate;
|
|
101
|
+
this.interval = new DateInterval(this.params.fromDate, this.params.toDate);
|
|
102
|
+
this.params.source = this.dialogData.source;
|
|
103
|
+
this.params.sourceNumber = this.dialogData.sourceNumber;
|
|
104
|
+
this.params.sourceYear = this.dialogData.sourceYear;
|
|
105
|
+
this.params.sourceFromDate = this.dialogData.sourceFromDate;
|
|
106
|
+
this.params.sourceToDate = this.dialogData.sourceToDate;
|
|
107
|
+
this.sourceInterval = new DateInterval(this.params.sourceFromDate, this.params.sourceToDate);
|
|
108
|
+
this.params.sectors = this.dialogData.sectors;
|
|
109
|
+
this.params.authors = this.dialogData.authors;
|
|
110
|
+
this.params.type = this.dialogData.type;
|
|
111
|
+
this.params.topic = this.dialogData.topic;
|
|
112
|
+
this.params.showCommentedDocumentsOnly = this.dialogData.showCommentedDocumentsOnly;
|
|
113
|
+
}
|
|
114
|
+
else if (this.isNews()) {
|
|
115
|
+
this.params.text = this.dialogData.text;
|
|
116
|
+
this.params.titleOnly = this.dialogData.titleOnly;
|
|
117
|
+
this.params.year = this.dialogData.year;
|
|
118
|
+
this.params.fromDate = this.dialogData.fromDate;
|
|
119
|
+
this.params.toDate = this.dialogData.toDate;
|
|
120
|
+
this.interval = new DateInterval(this.params.fromDate, this.params.toDate);
|
|
121
|
+
this.params.sectors = this.dialogData.sectors;
|
|
122
|
+
}
|
|
123
|
+
else if (this.dialogData.displayMode === 'module') {
|
|
124
|
+
switch (this.dialogData.module) {
|
|
125
|
+
case ClipperModule.Giurisprudenza:
|
|
126
|
+
this.params.text = this.dialogData.text;
|
|
127
|
+
this.params.titleOnly = this.dialogData.titleOnly;
|
|
128
|
+
this.params.number = this.dialogData.number;
|
|
129
|
+
this.params.year = this.dialogData.year;
|
|
130
|
+
this.params.fromDate = this.dialogData.fromDate;
|
|
131
|
+
this.params.toDate = this.dialogData.toDate;
|
|
132
|
+
this.interval = new DateInterval(this.params.fromDate, this.params.toDate);
|
|
133
|
+
this.params.sectors = this.dialogData.sectors;
|
|
134
|
+
break;
|
|
135
|
+
case ClipperModule.ModificheAbrogazioniERinvii:
|
|
136
|
+
this.params.changeReason = this.dialogData.changeReason;
|
|
137
|
+
this.params.changedNumber = this.dialogData.changedNumber;
|
|
138
|
+
this.params.changedYear = this.dialogData.changedYear;
|
|
139
|
+
this.params.changedTitle = this.dialogData.changedTitle;
|
|
140
|
+
this.params.modifierNumber = this.dialogData.modifierNumber;
|
|
141
|
+
this.params.modifierYear = this.dialogData.modifierYear;
|
|
142
|
+
this.params.modifierTitle = this.dialogData.modifierTitle;
|
|
143
|
+
this.params.sectors = this.dialogData.sectors;
|
|
144
|
+
break;
|
|
145
|
+
default:
|
|
146
|
+
this.params.text = this.dialogData.text;
|
|
147
|
+
this.params.titleOnly = this.dialogData.titleOnly;
|
|
148
|
+
this.params.year = this.dialogData.year;
|
|
149
|
+
this.params.fromDate = this.dialogData.fromDate;
|
|
150
|
+
this.params.toDate = this.dialogData.toDate;
|
|
151
|
+
this.interval = new DateInterval(this.params.fromDate, this.params.toDate);
|
|
152
|
+
break;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
if (this.isLaws()) {
|
|
157
|
+
if (!this.clipperService.loggedIn)
|
|
147
158
|
return;
|
|
148
|
-
|
|
149
|
-
this.$clipper.getTopics()
|
|
159
|
+
this.clipperService.getTopics()
|
|
150
160
|
.subscribe(r => {
|
|
151
161
|
if (r.success) {
|
|
152
162
|
let name = '';
|
|
@@ -161,51 +171,52 @@ export class ClipperSearchDialogComponent {
|
|
|
161
171
|
this.topics = r.value;
|
|
162
172
|
}
|
|
163
173
|
});
|
|
174
|
+
if (this.hasAuthorOrType()) {
|
|
175
|
+
this.sectorsChanged();
|
|
176
|
+
}
|
|
164
177
|
}
|
|
165
|
-
|
|
166
|
-
|
|
178
|
+
}
|
|
179
|
+
ngOnDestroy() {
|
|
180
|
+
this.unsubscribe.next();
|
|
181
|
+
this.unsubscribe.complete();
|
|
167
182
|
}
|
|
168
183
|
/**
|
|
169
|
-
*
|
|
184
|
+
* Updates other lists when sectors changes
|
|
170
185
|
*/
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
});
|
|
189
|
-
this.types = types;
|
|
186
|
+
sectorsChanged() {
|
|
187
|
+
// Reset authors and types
|
|
188
|
+
this.params.authors = [];
|
|
189
|
+
this.params.type = null;
|
|
190
|
+
if (this.hasAuthorOrType()) {
|
|
191
|
+
this.authors = [];
|
|
192
|
+
ClipperAuthors.forEach((n) => {
|
|
193
|
+
if (n.sectorId === this.params.sectors[0])
|
|
194
|
+
this.authors.push(n);
|
|
195
|
+
});
|
|
196
|
+
this.types = [];
|
|
197
|
+
ClipperSectorTypes.forEach((n) => {
|
|
198
|
+
if (n.parentValue === this.params.sectors[0])
|
|
199
|
+
this.types.push(n);
|
|
200
|
+
});
|
|
201
|
+
if (this.types.length == 0) {
|
|
202
|
+
this.types = [...ClipperSectorTypes];
|
|
190
203
|
}
|
|
191
|
-
else
|
|
192
|
-
this.types = ClipperDefinitions.SECTOR_TYPES;
|
|
193
204
|
}
|
|
194
205
|
}
|
|
195
206
|
/**
|
|
196
207
|
* Clear search
|
|
197
208
|
*/
|
|
198
209
|
clear() {
|
|
199
|
-
|
|
210
|
+
ClipperSearchUtils.clear(this.params);
|
|
200
211
|
this.interval.clear();
|
|
201
212
|
this.sourceInterval.clear();
|
|
202
|
-
this.
|
|
213
|
+
this.sectorsChanged();
|
|
203
214
|
}
|
|
204
215
|
/**
|
|
205
216
|
* Show free text help
|
|
206
217
|
*/
|
|
207
218
|
help() {
|
|
208
|
-
this
|
|
219
|
+
this.dialogService.open(ClipperSearchFreeTextHelpComponent, {
|
|
209
220
|
ariaLabel: 'informazioni ricerca',
|
|
210
221
|
autoFocus: false,
|
|
211
222
|
restoreFocus: true,
|
|
@@ -219,7 +230,7 @@ export class ClipperSearchDialogComponent {
|
|
|
219
230
|
* Compose a free text search query
|
|
220
231
|
*/
|
|
221
232
|
compose() {
|
|
222
|
-
|
|
233
|
+
const d = this.dialogService.open(ClipperSearchFreeTextQueryBuilderComponent, {
|
|
223
234
|
ariaLabel: 'costruisci ricerca',
|
|
224
235
|
autoFocus: false,
|
|
225
236
|
restoreFocus: true,
|
|
@@ -240,8 +251,9 @@ export class ClipperSearchDialogComponent {
|
|
|
240
251
|
*/
|
|
241
252
|
ok() {
|
|
242
253
|
this.okButton.focus();
|
|
243
|
-
if (this.params.text)
|
|
244
|
-
this.params.text =
|
|
254
|
+
if (this.params.text) {
|
|
255
|
+
this.params.text = ClipperSearchUtils.normalizeTextQuery(this.params.text);
|
|
256
|
+
}
|
|
245
257
|
if (this.interval) {
|
|
246
258
|
this.params.fromDate = this.interval.from;
|
|
247
259
|
this.params.toDate = this.interval.to;
|
|
@@ -250,77 +262,76 @@ export class ClipperSearchDialogComponent {
|
|
|
250
262
|
this.params.sourceFromDate = this.sourceInterval.from;
|
|
251
263
|
this.params.sourceToDate = this.sourceInterval.to;
|
|
252
264
|
}
|
|
253
|
-
|
|
254
|
-
// Notify
|
|
255
|
-
this.done.emit(this.params);
|
|
256
|
-
}, 500);
|
|
265
|
+
this.done.emit(this.params);
|
|
257
266
|
}
|
|
258
267
|
/**
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
268
|
+
* Check if a block of expandable options has a filter on
|
|
269
|
+
* @param block : the block id
|
|
270
|
+
* @returns true if at least a value is set
|
|
271
|
+
*/
|
|
272
|
+
hasFilter(block) {
|
|
273
|
+
if (block === 'source') {
|
|
274
|
+
return this.params.sourceNumber != null ||
|
|
275
|
+
this.params.sourceYear != null ||
|
|
276
|
+
this.params.source != null ||
|
|
277
|
+
this.sourceInterval.from != null;
|
|
269
278
|
}
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
.componentInstance.done.subscribe(r => {
|
|
277
|
-
let n = r.selectedItems[0].bag;
|
|
278
|
-
this.params.taxonomy = n.id;
|
|
279
|
-
this.params.taxonomyPath = n.path;
|
|
280
|
-
this.params.taxonomyNode = n.name;
|
|
281
|
-
});
|
|
282
|
-
},
|
|
283
|
-
complete: () => {
|
|
284
|
-
this.$dialog.clearBusy();
|
|
279
|
+
else if (block === 'other') {
|
|
280
|
+
if (!this.isModule(ClipperModule.ModificheAbrogazioniERinvii)) {
|
|
281
|
+
return this.params.sourceNumber != null ||
|
|
282
|
+
this.params.author != null ||
|
|
283
|
+
this.params.type != null ||
|
|
284
|
+
this.params.topic != null;
|
|
285
285
|
}
|
|
286
|
-
|
|
286
|
+
else {
|
|
287
|
+
return this.params.changeReason != null;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
else if (block === 'modifier') {
|
|
291
|
+
return this.params.modifierNumber != null ||
|
|
292
|
+
this.params.modifierYear != null ||
|
|
293
|
+
this.params.modifierTitle != null;
|
|
294
|
+
}
|
|
295
|
+
return false;
|
|
287
296
|
}
|
|
288
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: ClipperSearchDialogComponent, deps: [
|
|
297
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: ClipperSearchDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
289
298
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: ClipperSearchDialogComponent, isStandalone: true, selector: "ng-component", outputs: { done: "done" }, host: { attributes: { "Bind": SystemUtils.generateUUID() } }, providers: [
|
|
290
299
|
MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER
|
|
291
|
-
], viewQueries: [{ propertyName: "okButton", first: true, predicate: ["okButton"], descendants: true }], ngImport: i0, template: "<h2 mat-dialog-title>Ricerca</h2>\r\n<div mat-dialog-content>\r\n <form name=\"form\" #f=\"ngForm\" (keyup.Enter)=\"!f.form.invalid ? ok() : null\" novalidate>\r\n <div fxLayout=\"column\">\r\n <div fxFlexAlign=\"end\">\r\n @if (enableRead) {\r\n<div style=\"padding-bottom:10px\">\r\n <mat-checkbox color=\"primary\" name=\"showUnreadDocumentsOnly\" [(ngModel)]=\"params.showUnreadDocumentsOnly\">\r\n Mostra solo non letti</mat-checkbox>\r\n </div>\r\n}\r\n @if (enableComments) {\r\n<div style=\"padding-bottom:10px\">\r\n <mat-checkbox color=\"primary\" name=\"showCommentedDocumentsOnly\"\r\n [(ngModel)]=\"params.showCommentedDocumentsOnly\">\r\n Mostra solo norme con commenti</mat-checkbox>\r\n </div>\r\n}\r\n </div>\r\n @if (enableModel) {\r\n<mat-form-field>\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"params.sector\" #sector=\"ngModel\" name=\"model\" (selectionChange)=\"sectorChanged()\">\r\n <mat-option>Tutti</mat-option>\r\n @for (m of models; track m) {\r\n <mat-option [value]=\"m.id\">\r\n {{m.name}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableSector) {\r\n<mat-form-field>\r\n <mat-label>Settore</mat-label>\r\n <mat-select [(ngModel)]=\"params.sector\" #sector=\"ngModel\" name=\"sector\" (selectionChange)=\"sectorChanged()\">\r\n <mat-option>Tutti</mat-option>\r\n @for (s of sectors; track s) {\r\n <mat-option [value]=\"s.id\">\r\n @if (s.group == 'A') {\r\n<span> </span>\r\n}\r\n {{s.name}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableAuthor && authors && authors.length > 0) {\r\n<mat-form-field>\r\n <mat-label>Autore</mat-label>\r\n <mat-select [(ngModel)]=\"params.author\" #sector=\"ngModel\" name=\"author\">\r\n <mat-option>Tutti</mat-option>\r\n @for (a of authors; track a) {\r\n <mat-option [value]=\"a.authorId\">\r\n {{a.authorDescription}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableTopic && topics && topics.length > 0) {\r\n<mat-form-field>\r\n <mat-label>Argomento</mat-label>\r\n <mat-select [(ngModel)]=\"params.topic\" #topic=\"ngModel\" name=\"topic\">\r\n <mat-option>Tutti</mat-option>\r\n @for (t of topics; track t) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n <div [innerHtml]=\"t.title | safeHtml\"></div>\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableTaxonomy) {\r\n<mat-form-field>\r\n <mat-label>Argomento</mat-label>\r\n <input matInput [(ngModel)]=\"params.taxonomyNode\" readonly name=\"taxonomy\" />\r\n @if (params.taxonomyNode) {\r\n<button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\"\r\n (click)=\"params.taxonomy = null; params.taxonomyNode = null; params.taxonomyPath = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <button type=\"button\" mat-icon-button matSuffix aria-label=\"Scegli\" matTooltip=\"Scegli\"\r\n (click)=\"selectTaxonomy()\">\r\n <mat-icon>search</mat-icon>\r\n </button>\r\n @if (params.taxonomyNode) {\r\n<mat-hint align=\"start\" class=\"truncated lowercase\">\r\n <div>{{params.taxonomyPath}}</div>\r\n </mat-hint>\r\n}\r\n </mat-form-field>\r\n}\r\n @if (enableType) {\r\n<mat-form-field>\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"params.type\" #topic=\"ngModel\" name=\"type\">\r\n <mat-option>Tutti</mat-option>\r\n @for (t of types; track t) {\r\n <mat-option [value]=\"t.documentTypeId\" [matTooltip]=\"t.documentTypeDescription\">\r\n {{t.documentTypeDescription}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableText) {\r\n<mat-form-field>\r\n <mat-label>Testo</mat-label>\r\n <input matInput name=\"text\" #text [(ngModel)]=\"params.text\" maxlength=\"200\" />\r\n @if (params.text) {\r\n<button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\"\r\n (click)=\"params.text = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <button fxHide.xs type=\"button\" mat-icon-button matSuffix aria-label=\"Componi\" matTooltip=\"Componi\"\r\n (click)=\"text.focus(); compose()\">\r\n <mat-icon>build</mat-icon>\r\n </button>\r\n <button fxHide.xs type=\"button\" mat-icon-button matSuffix aria-label=\"Informazioni\"\r\n matTooltip=\"Come effettuare la ricerca in testo libero\" (click)=\"text.focus(); help()\">\r\n <mat-icon>help_outline</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n}\r\n @if (enableText) {\r\n<div style=\"padding-bottom:10px\">\r\n <mat-checkbox color=\"primary\" [disabled]=\"!params.text\" name=\"titleOnly\"\r\n [(ngModel)]=\"params.titleOnly\">Cerca\r\n solo nel titolo</mat-checkbox>\r\n </div>\r\n}\r\n @if (enablePublication) {\r\n<div>\r\n <div class=\"section-title\">Pubblicazione</div>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"49\" fxFlex.xs=\"100\">\r\n <mat-label>Intervallo</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker1\">\r\n <input matStartDate [(ngModel)]=\"interval.from\" [dateIntervalChange]=\"interval\" #rangeFrom1=\"ngModel\"\r\n name=\"rangeFrom1\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"interval.to\" [dateIntervalChange]=\"interval\" [end]=\"true\"\r\n #rangeTo1=\"ngModel\" name=\"rangeTo1\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (interval.from || interval.to) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"interval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-datepicker-toggle matSuffix [for]=\"picker1\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker1></mat-date-range-picker>\r\n @if (rangeFrom1.invalid || rangeTo1.invalid) {\r\n<mat-error>Intervallo non valido.</mat-error>\r\n}\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n}\r\n @if (enableDocument) {\r\n<div>\r\n <div class=\"section-title\">Estremi documento</div>\r\n <div class=\"section\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"30\" fxFlex.xs=\"100\">\r\n <mat-label>Num. doc.</mat-label>\r\n <input matInput [(ngModel)]=\"params.number\" #number=\"ngModel\" name=\"number\" maxlength=\"10\" />\r\n @if (params.number) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.number = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Senza spazi</mat-hint>\r\n @if (number.invalid) {\r\n<mat-error>Spazi non validi.</mat-error>\r\n}\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"68\" fxFlex.xs=\"100\">\r\n <mat-label>Intervallo</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker2\">\r\n <input matStartDate [(ngModel)]=\"interval.from\" [dateIntervalChange]=\"interval\" #rangeFrom2=\"ngModel\"\r\n name=\"rangeFrom2\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"interval.to\" [dateIntervalChange]=\"interval\" [end]=\"true\"\r\n #rangeTo2=\"ngModel\" name=\"rangeTo2\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (interval.from || interval.to) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"interval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-datepicker-toggle matSuffix [for]=\"picker2\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker2></mat-date-range-picker>\r\n @if (rangeFrom2.invalid || rangeTo2.invalid) {\r\n<mat-error>Intervallo non valido.</mat-error>\r\n}\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n @if (enableSource) {\r\n<div>\r\n <div class=\"section-title\">Fonte</div>\r\n <div class=\"section\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"30\" fxFlex.xs=\"100\">\r\n <mat-label>Num. doc.</mat-label>\r\n <input matInput [(ngModel)]=\"params.sourceNumber\" #sourceNumber=\"ngModel\" name=\"sourceNumber\"\r\n maxlength=\"10\" />\r\n @if (params.sourceNumber) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.sourceNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Senza spazi</mat-hint>\r\n @if (sourceNumber.invalid) {\r\n<mat-error>Spazi non validi.</mat-error>\r\n}\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"68\" fxFlex.xs=\"100\">\r\n <mat-label>Intervallo</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker3\">\r\n <input matStartDate [(ngModel)]=\"sourceInterval.from\" [dateIntervalChange]=\"sourceInterval\"\r\n #rangeFrom3=\"ngModel\" name=\"rangeFrom3\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"sourceInterval.to\" [dateIntervalChange]=\"sourceInterval\" [end]=\"true\"\r\n #rangeTo3=\"ngModel\" name=\"rangeTo3\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (sourceInterval.from || sourceInterval.to) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix\r\n mat-icon-button aria-label=\"Pulisci\" (click)=\"sourceInterval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-datepicker-toggle matSuffix [for]=\"picker3\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker3></mat-date-range-picker>\r\n @if (rangeFrom3.invalid || rangeTo3.invalid) {\r\n<mat-error>Intervallo non valido.</mat-error>\r\n}\r\n </mat-form-field>\r\n </div>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n @if (sources && sources.length > 0) {\r\n<mat-form-field fxFlex=\"100\">\r\n <mat-label>Tipo fonte</mat-label>\r\n <mat-select [(ngModel)]=\"params.source\" #sector=\"ngModel\" name=\"source\">\r\n <mat-option>Tutti</mat-option>\r\n @for (s of sources; track s) {\r\n <mat-option [value]=\"s.id\">\r\n {{s.name}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n @if (enableChanges) {\r\n<div>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"49\" fxFlex.xs=\"100\">\r\n <mat-label>Motivo</mat-label>\r\n <mat-select [(ngModel)]=\"params.reason\" #topic=\"ngModel\" name=\"reason\">\r\n @for (t of types; track t) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n {{t.name}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"section-title mat-body-3\">Documento modificato</div>\r\n <div class=\"section\">\r\n <p class=\"small\" style=\"line-height: 12px\"><i>Saranno visualizzati i documenti modificanti.</i>\r\n </p>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"23\" fxFlex.xs=\"100\">\r\n <mat-label>Num. doc.</mat-label>\r\n <input matInput [(ngModel)]=\"params.changedNumber\" #changedNumber=\"ngModel\" name=\"changedNumber\"\r\n maxlength=\"10\" />\r\n @if (params.changedNumber) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.changedNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Senza spazi</mat-hint>\r\n @if (changedNumber.invalid) {\r\n<mat-error>Spazi non validi.</mat-error>\r\n}\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"23\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput [(ngModel)]=\"params.changedYear\" #changedYear=\"ngModel\"\r\n name=\"changedYear\" maxlength=\"4\" />\r\n @if (params.changedYear) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.changedYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Dal 1750</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"51\" fxFlex.xs=\"100\">\r\n <mat-label>Titolo</mat-label>\r\n <input matInput [(ngModel)]=\"params.changedTitle\" #changedTitle=\"ngModel\" name=\"changedTitle\"\r\n maxlength=\"10\" />\r\n @if (params.changedTitle) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.changedTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div class=\"section-title \">Documento modificante</div>\r\n <div class=\"section\">\r\n <p class=\"small\" style=\"line-height: 12px\">\r\n <i>Saranno visualizzati i documenti modificati, oppure solo i modificanti se \u00E8 stato specificato\r\n l'estremo del documento modificato.</i>\r\n </p>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"23\" fxFlex.xs=\"100\">\r\n <mat-label>Num. doc.</mat-label>\r\n <input matInput [(ngModel)]=\"params.modifierNumber\" #modifierNumber=\"ngModel\" name=\"modifierNumber\"\r\n maxlength=\"10\" />\r\n @if (params.modifierNumber) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.modifierNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Senza spazi</mat-hint>\r\n @if (modifierNumber.invalid) {\r\n<mat-error>Spazi non validi.</mat-error>\r\n}\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"23\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=1750 matInput [(ngModel)]=\"params.modifierYear\" #modifierYear=\"ngModel\"\r\n name=\"modifierYear\" maxlength=\"4\" />\r\n @if (params.modifierYear) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.modifierYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Dal 1750</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"51\" fxFlex.xs=\"100\">\r\n <mat-label>Titolo</mat-label>\r\n <input matInput [(ngModel)]=\"params.modifierTitle\" #modifierTitle=\"ngModel\" name=\"modifierTitle\"\r\n maxlength=\"10\" />\r\n @if (params.modifierTitle) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.modifierTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n </div>\r\n </form>\r\n</div>\r\n<div mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"30\">\r\n <button type=\"button\" mat-button (click)=\"clear()\" color=\"primary\">PULISCI</button>\r\n </div>\r\n <div fxFlex=\"70\" fxLayoutAlign=\"end\">\r\n <button mat-flat-button color=\"primary\" #okButton [disabled]=\"f.form.invalid\" (click)=\"ok()\">TROVA</button>\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">CHIUDI</button>\r\n </div>\r\n </div>\r\n</div>", styles: [":root{--ars-color-link: #03A9F4;--ars-color-link-low: #0288D1;--ars-color-accent: #7894ae;--ars-color-accent-low: #456179;--ars-color-primary: #00a293;--ars-color-primary-low: #006a60;--ars-color-primary-hi: #12c0ae;--ars-color-secondary: #4a635f;--ars-color-secondary-low: #27403c;--ars-color-error: #ff5449;--ars-color-error-low: #a80710;--ars-color-ok: #388E3C;--ars-color-ok-low: #29692c;--ars-color-warning: #FFC107;--ars-color-warning-low: #FFA000;--ars-item-hover-background-color: #eaecef;--ars-item-selected-background-color: #ced1d2;--ars-item-opaque-background-color: rgba(255, 255, 255, .75);--ars-filterbox-filtered-background-color: #f9fbe7}.dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-close{margin-right:10px;margin-top:10px}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.scroll-auto{overflow:auto}.scroll-hidden{overflow:hidden}b{font-weight:700}.large{font-size:large!important}.small{font-size:small!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media (prefers-color-scheme: dark){:root{--ars-color-link: #03A9F4;--ars-color-link-low: #0288D1;--ars-color-accent: #adcae6;--ars-color-accent-low: #5e7a93;--ars-color-primary: #53dbc9;--ars-color-primary-low: #008679;--ars-color-primary-hi: #74f8e5;--ars-color-secondary: #b1ccc6;--ars-color-secondary-low: #627c77;--ars-color-error: #ff5449;--ars-color-error-low: #a80710;--ars-color-ok: #4CAF50;--ars-color-ok-low: #3f8f41;--ars-color-warning: #FFC107;--ars-color-warning-low: #FFA000;--ars-item-hover-background-color: #262a29;--ars-item-selected-background-color: #3f4342;--ars-item-opaque-background-color: rgba(0, 0, 0, .65);--ars-filterbox-filtered-background-color: #c6c7b8}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b{font-weight:600}}.item{min-height:50px!important;border-bottom:1px dotted #eee!important;line-height:18px}.item:hover{background-color:#fff8e1}.item-cell{padding:5px 0}.item-line{padding-top:1px;padding-bottom:1px}.item-line .command a{text-decoration:none;color:#2a91e0;font-weight:500;cursor:pointer!important}.item-line .command a:hover{opacity:.7}.item-line>a{color:#2a91e0!important;opacity:1!important;cursor:pointer}.item-line>a:hover{opacity:.7!important}.item-line-1{font-weight:500;font-size:1em;color:#000}.item-line-2{font-size:.9em;color:#000}.item-line-3{font-size:.8em;color:#000}.item-line-4{font-size:.7em;color:#000}.item-line-block-title{font-size:.8em;font-weight:500}.item-line-block{margin-top:4px;margin-bottom:4px;margin-left:10px;padding-left:10px;border-left:2px solid #009688}.item-line-read{font-weight:400!important}.item-line-read .command,.item-line-read a{color:#2a91e0;cursor:pointer!important;opacity:1!important}.item-line-read .command:hover,.item-line-read a:hover{opacity:.7!important}.item-line-red-badge{background-color:red;color:#fff;padding:2px 4px;border-radius:3px;border:1px solid red}.items-group-title{line-height:24px;padding:20px 10px 10px 20px;font-weight:500;font-size:19.2px}.items-footer{padding-top:10px}.sidenav-title-container{min-height:64px!important;padding-left:15px;margin-bottom:4px}.sidenav-title{color:#009688;font-weight:500;font-size:19.2px}.item-greyed-1{color:#607d8b}.item-greyed-2{color:#90a4ae}.item-accent{color:#0d7066}.item-primary{color:#009688}.item-badge{margin-left:10px;margin-bottom:5px;padding:0 4px;height:12px;line-height:12px;border-radius:3px;font-size:x-small;font-weight:500;text-align:center;background-color:orange;color:#000}\n"], dependencies: [{ kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i4.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FlexModule }, { kind: "directive", type: i5.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i5.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i5.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i5.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i5.DefaultFlexAlignDirective, selector: " [fxFlexAlign], [fxFlexAlign.xs], [fxFlexAlign.sm], [fxFlexAlign.md], [fxFlexAlign.lg], [fxFlexAlign.xl], [fxFlexAlign.lt-sm], [fxFlexAlign.lt-md], [fxFlexAlign.lt-lg], [fxFlexAlign.lt-xl], [fxFlexAlign.gt-xs], [fxFlexAlign.gt-sm], [fxFlexAlign.gt-md], [fxFlexAlign.gt-lg]", inputs: ["fxFlexAlign", "fxFlexAlign.xs", "fxFlexAlign.sm", "fxFlexAlign.md", "fxFlexAlign.lg", "fxFlexAlign.xl", "fxFlexAlign.lt-sm", "fxFlexAlign.lt-md", "fxFlexAlign.lt-lg", "fxFlexAlign.lt-xl", "fxFlexAlign.gt-xs", "fxFlexAlign.gt-sm", "fxFlexAlign.gt-md", "fxFlexAlign.gt-lg"] }, { kind: "directive", type: i5.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i6.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i7.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i7.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i8.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i9.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i11.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: MatButtonModule }, { kind: "component", type: i12.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i12.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i13.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: ExtendedModule }, { kind: "directive", type: i14.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i15.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i15.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i15.MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i15.MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i15.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "directive", type: DateIntervalChangeDirective, selector: "[dateIntervalChange]", inputs: ["dateIntervalChange", "end"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }] }); }
|
|
300
|
+
], viewQueries: [{ propertyName: "okButton", first: true, predicate: ["okButton"], descendants: true }], ngImport: i0, template: "<h2 mat-dialog-title>Ricerca</h2>\r\n<div mat-dialog-content>\r\n <form name=\"form\" #f=\"ngForm\" (keyup.Enter)=\"!f.form.invalid ? ok() : null\" novalidate>\r\n <mat-accordion multi displayMode=\"flat\">\r\n @if(isLaws() || isModule(modulesEnum.ModificheAbrogazioniERinvii)) {\r\n <mat-expansion-panel expanded=\"true\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Settori\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <chips-selector [(ngModel)]=\"params.sectors\" [multiple]=\"true\" name=\"sectors\" label=\"Settori\"\r\n [options]=\"sectors\" (changed)=\"sectorsChanged()\" />\r\n @if(hasRegions())\r\n {\r\n <mat-divider style=\"padding-top: 8px; margin-top:8px\"></mat-divider>\r\n <chips-selector mode=\"collapsed\" [(ngModel)]=\"params.authors\" [multiple]=\"true\" name=\"authors\"\r\n label=\"Tutte le regioni\" [options]=\"regions\" />\r\n }\r\n </mat-expansion-panel>\r\n } @else if(isNews()) {\r\n <mat-expansion-panel expanded=\"true\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Tipologia\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <chips-selector [(ngModel)]=\"params.sectors\" [multiple]=\"true\" name=\"sectors\" label=\"Tipologia\"\r\n [options]=\"sectors\" />\r\n </mat-expansion-panel>\r\n }\r\n <mat-expansion-panel expanded=\"true\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n @if (isLaws() || isModule(modulesEnum.Giurisprudenza)) {\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input #filterByNumber=\"matInput\" matInput maxlength=\"10\" [(ngModel)]=\"params.number\" name=\"number\" />\r\n @if (params.number) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.number = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.year\" name=\"year\" />\r\n @if (params.year) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.year = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n }\r\n @if (isLaws() || !isModule(modulesEnum.ScadenzeESegnalazioni)) {\r\n <mat-form-field>\r\n <mat-label>Intervallo di pubblicazione</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker1\">\r\n <input matStartDate [(ngModel)]=\"interval.from\" [dateIntervalChange]=\"interval\" #rangeFrom1=\"ngModel\"\r\n name=\"rangeFrom1\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"interval.to\" [dateIntervalChange]=\"interval\" [end]=\"true\"\r\n #rangeTo1=\"ngModel\" name=\"rangeTo1\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (interval.from || interval.to) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"interval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker1\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker1></mat-date-range-picker>\r\n @if (rangeFrom1.invalid || rangeTo1.invalid) {\r\n <mat-error>Intervallo non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <mat-form-field>\r\n <mat-label>Testo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"params.text\" name=\"text\" />\r\n @if (params.text) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.text = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix matTooltip=\"Opzioni\" aria-label=\"Opzioni\"\r\n [matMenuTriggerFor]=\"textOptionsMenu\"><mat-icon>more_vert</mat-icon></button>\r\n </mat-form-field>\r\n <div>\r\n <div>\r\n <mat-slide-toggle [(ngModel)]=\"params.titleOnly\" name=\"titleOnly\">Cerca solo nel\r\n titolo</mat-slide-toggle>\r\n </div>\r\n @if(isLaws()) {\r\n <div style=\"padding-top:10px\">\r\n <mat-slide-toggle [(ngModel)]=\"params.showCommentedDocumentsOnly\" name=\"showCommentedDocumentsOnly\">Mostra\r\n solo norme con commenti</mat-slide-toggle>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </mat-expansion-panel>\r\n @if(isLaws()) {\r\n <mat-expansion-panel [expanded]=\"hasFilter('source')\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Fonte\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"params.sourceNumber\" name=\"sourceNumber\" />\r\n @if (params.sourceNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.sourceNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.sourceYear\"\r\n name=\"sourceYear\" />\r\n @if (params.sourceYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.sourceYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Intervallo di pubblicazione</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker2\">\r\n <input matStartDate [(ngModel)]=\"sourceInterval.from\" [dateIntervalChange]=\"sourceInterval\"\r\n #rangeFrom2=\"ngModel\" name=\"rangeFrom2\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"sourceInterval.to\" [dateIntervalChange]=\"sourceInterval\" [end]=\"true\"\r\n #rangeTo2=\"ngModel\" name=\"rangeTo2\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (sourceInterval.from || sourceInterval.to) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"sourceInterval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker2\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker2></mat-date-range-picker>\r\n @if (rangeFrom2.invalid || rangeTo2.invalid) {\r\n <mat-error>Intervallo non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"params.source\" name=\"source\">\r\n @for (s of sources; track s) {\r\n <mat-option [value]=\"s.value\" [matTooltip]=\"s.name\">\r\n {{s.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel [expanded]=\"hasFilter('other')\" class=\"accordion-panel mat-elevation-z0\">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Altre opzioni\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n @if(isLaws()) {\r\n @if(!hasRegions()) {\r\n <mat-form-field>\r\n <mat-label>Autore</mat-label>\r\n <mat-select [(ngModel)]=\"params.author\" name=\"author\">\r\n @for (a of authors; track a) {\r\n <mat-option [value]=\"a.value\" [matTooltip]=\"a.name\">\r\n {{a.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <mat-form-field>\r\n <mat-label>Tipo documento</mat-label>\r\n <mat-select [(ngModel)]=\"params.type\" name=\"type\">\r\n @for (t of types; track t) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n {{t.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Argomento</mat-label>\r\n <mat-select [(ngModel)]=\"params.topic\" name=\"topic\">\r\n @for (t of topics; track t) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n {{t.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n </div>\r\n </mat-expansion-panel>\r\n\r\n } @else if(isModule(modulesEnum.ModificheAbrogazioniERinvii)) {\r\n <mat-expansion-panel expanded class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento modificato\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"params.changedNumber\" name=\"changedNumber\"\r\n #filterByChangeNumber=\"matInput\" />\r\n @if (params.changedNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.changedNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.changedYear\"\r\n name=\"changedYear\" />\r\n @if (params.changedYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.changedYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Titolo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"params.changedTitle\" name=\"changedTitle\" />\r\n @if (params.changedTitle) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.changedTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel [expanded]=\"hasFilter('modifier')\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento modificante\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"params.modifierNumber\" name=\"modifierNumber\" />\r\n @if (params.changedNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.modifierNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.modifierYear\"\r\n name=\"modifierYear\" />\r\n @if (params.modifierYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.modifierYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Titolo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"params.modifierTitle\" name=\"modifierTitle\" />\r\n @if (params.modifierTitle) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.modifierTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel [expanded]=\"hasFilter('other')\" class=\"accordion-panel mat-elevation-z0\">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Altre opzioni\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <mat-form-field>\r\n <mat-label>Motivo</mat-label>\r\n <mat-select [(ngModel)]=\"params.changeReason\" name=\"changeReason\">\r\n <mat-option>Tutti</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n }\r\n </mat-accordion>\r\n </form>\r\n</div>\r\n<div mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"30\">\r\n <button type=\"button\" mat-button (click)=\"clear()\" color=\"primary\">PULISCI</button>\r\n </div>\r\n <div fxFlex=\"70\" fxLayoutAlign=\"end\">\r\n <button mat-flat-button color=\"primary\" #okButton [disabled]=\"f.form.invalid\" (click)=\"ok()\">TROVA</button>\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">CHIUDI</button>\r\n </div>\r\n </div>\r\n</div>\r\n<mat-menu #textOptionsMenu=\"matMenu\">\r\n <button mat-menu-item (click)=\"compose()\">\r\n <mat-icon>build</mat-icon>Componi\r\n </button>\r\n <button mat-menu-item (click)=\"help()\">\r\n <mat-icon>help</mat-icon>Come usare la ricerca in testo libero\r\n </button>\r\n</mat-menu>", styles: [".accordion-panel{background-color:transparent}.accordion-header{padding-left:15px;padding-right:20px;border-radius:var(--mat-expansion-container-shape)}.mat-expansion-panel-body{padding-bottom:20px!important}\n"], dependencies: [{ kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: FlexModule }, { kind: "directive", type: i2.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i2.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i2.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i2.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i2.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "directive", type: i4.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i4.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i4.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i4.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i5.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: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i7.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i8.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: MatButtonModule }, { kind: "component", type: i9.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i11.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i11.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i11.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: ExtendedModule }, { kind: "directive", type: i12.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { kind: "ngmodule", type: MatDatepickerModule }, { kind: "component", type: i13.MatDatepickerToggle, selector: "mat-datepicker-toggle", inputs: ["for", "tabIndex", "aria-label", "disabled", "disableRipple"], exportAs: ["matDatepickerToggle"] }, { kind: "component", type: i13.MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "directive", type: i13.MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: i13.MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "component", type: i13.MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "directive", type: DateIntervalChangeDirective, selector: "[dateIntervalChange]", inputs: ["dateIntervalChange", "end"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i14.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: ChipsSelectorComponent, selector: "chips-selector", inputs: ["options", "collapsedWidth", "collapseAt", "collapseAtContainer", "collapseDisplayMode", "label", "multiple", "mode", "required", "disabled", "placeholder"], outputs: ["changed"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
292
301
|
}
|
|
293
302
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: ClipperSearchDialogComponent, decorators: [{
|
|
294
303
|
type: Component,
|
|
295
304
|
args: [{ host: { 'Bind': SystemUtils.generateUUID() }, providers: [
|
|
296
305
|
MAT_DATEPICKER_SCROLL_STRATEGY_FACTORY_PROVIDER
|
|
297
|
-
], standalone: true, imports: [
|
|
306
|
+
], standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
298
307
|
MatDialogTitle,
|
|
299
308
|
MatDialogContent,
|
|
300
309
|
FormsModule,
|
|
301
310
|
FlexModule,
|
|
302
311
|
MatCheckboxModule,
|
|
303
312
|
MatFormFieldModule,
|
|
313
|
+
MatExpansionModule,
|
|
304
314
|
MatSelectModule,
|
|
305
315
|
MatOptionModule,
|
|
306
316
|
MatTooltipModule,
|
|
307
317
|
MatInputModule,
|
|
308
318
|
MatButtonModule,
|
|
309
319
|
MatIconModule,
|
|
320
|
+
MatMenuModule,
|
|
310
321
|
ExtendedModule,
|
|
311
322
|
MatDatepickerModule,
|
|
312
323
|
DateIntervalChangeDirective,
|
|
313
324
|
MatDialogActions,
|
|
314
325
|
MatDialogClose,
|
|
326
|
+
MatDialogTitle,
|
|
327
|
+
MatDividerModule,
|
|
328
|
+
ChipsSelectorComponent,
|
|
315
329
|
SafeHtmlPipe,
|
|
316
|
-
], template: "<h2 mat-dialog-title>Ricerca</h2>\r\n<div mat-dialog-content>\r\n <form name=\"form\" #f=\"ngForm\" (keyup.Enter)=\"!f.form.invalid ? ok() : null\" novalidate>\r\n <div fxLayout=\"column\">\r\n <div fxFlexAlign=\"end\">\r\n @if (enableRead) {\r\n<div style=\"padding-bottom:10px\">\r\n <mat-checkbox color=\"primary\" name=\"showUnreadDocumentsOnly\" [(ngModel)]=\"params.showUnreadDocumentsOnly\">\r\n Mostra solo non letti</mat-checkbox>\r\n </div>\r\n}\r\n @if (enableComments) {\r\n<div style=\"padding-bottom:10px\">\r\n <mat-checkbox color=\"primary\" name=\"showCommentedDocumentsOnly\"\r\n [(ngModel)]=\"params.showCommentedDocumentsOnly\">\r\n Mostra solo norme con commenti</mat-checkbox>\r\n </div>\r\n}\r\n </div>\r\n @if (enableModel) {\r\n<mat-form-field>\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"params.sector\" #sector=\"ngModel\" name=\"model\" (selectionChange)=\"sectorChanged()\">\r\n <mat-option>Tutti</mat-option>\r\n @for (m of models; track m) {\r\n <mat-option [value]=\"m.id\">\r\n {{m.name}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableSector) {\r\n<mat-form-field>\r\n <mat-label>Settore</mat-label>\r\n <mat-select [(ngModel)]=\"params.sector\" #sector=\"ngModel\" name=\"sector\" (selectionChange)=\"sectorChanged()\">\r\n <mat-option>Tutti</mat-option>\r\n @for (s of sectors; track s) {\r\n <mat-option [value]=\"s.id\">\r\n @if (s.group == 'A') {\r\n<span> </span>\r\n}\r\n {{s.name}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableAuthor && authors && authors.length > 0) {\r\n<mat-form-field>\r\n <mat-label>Autore</mat-label>\r\n <mat-select [(ngModel)]=\"params.author\" #sector=\"ngModel\" name=\"author\">\r\n <mat-option>Tutti</mat-option>\r\n @for (a of authors; track a) {\r\n <mat-option [value]=\"a.authorId\">\r\n {{a.authorDescription}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableTopic && topics && topics.length > 0) {\r\n<mat-form-field>\r\n <mat-label>Argomento</mat-label>\r\n <mat-select [(ngModel)]=\"params.topic\" #topic=\"ngModel\" name=\"topic\">\r\n <mat-option>Tutti</mat-option>\r\n @for (t of topics; track t) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n <div [innerHtml]=\"t.title | safeHtml\"></div>\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableTaxonomy) {\r\n<mat-form-field>\r\n <mat-label>Argomento</mat-label>\r\n <input matInput [(ngModel)]=\"params.taxonomyNode\" readonly name=\"taxonomy\" />\r\n @if (params.taxonomyNode) {\r\n<button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\"\r\n (click)=\"params.taxonomy = null; params.taxonomyNode = null; params.taxonomyPath = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <button type=\"button\" mat-icon-button matSuffix aria-label=\"Scegli\" matTooltip=\"Scegli\"\r\n (click)=\"selectTaxonomy()\">\r\n <mat-icon>search</mat-icon>\r\n </button>\r\n @if (params.taxonomyNode) {\r\n<mat-hint align=\"start\" class=\"truncated lowercase\">\r\n <div>{{params.taxonomyPath}}</div>\r\n </mat-hint>\r\n}\r\n </mat-form-field>\r\n}\r\n @if (enableType) {\r\n<mat-form-field>\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"params.type\" #topic=\"ngModel\" name=\"type\">\r\n <mat-option>Tutti</mat-option>\r\n @for (t of types; track t) {\r\n <mat-option [value]=\"t.documentTypeId\" [matTooltip]=\"t.documentTypeDescription\">\r\n {{t.documentTypeDescription}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n @if (enableText) {\r\n<mat-form-field>\r\n <mat-label>Testo</mat-label>\r\n <input matInput name=\"text\" #text [(ngModel)]=\"params.text\" maxlength=\"200\" />\r\n @if (params.text) {\r\n<button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\"\r\n (click)=\"params.text = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <button fxHide.xs type=\"button\" mat-icon-button matSuffix aria-label=\"Componi\" matTooltip=\"Componi\"\r\n (click)=\"text.focus(); compose()\">\r\n <mat-icon>build</mat-icon>\r\n </button>\r\n <button fxHide.xs type=\"button\" mat-icon-button matSuffix aria-label=\"Informazioni\"\r\n matTooltip=\"Come effettuare la ricerca in testo libero\" (click)=\"text.focus(); help()\">\r\n <mat-icon>help_outline</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n}\r\n @if (enableText) {\r\n<div style=\"padding-bottom:10px\">\r\n <mat-checkbox color=\"primary\" [disabled]=\"!params.text\" name=\"titleOnly\"\r\n [(ngModel)]=\"params.titleOnly\">Cerca\r\n solo nel titolo</mat-checkbox>\r\n </div>\r\n}\r\n @if (enablePublication) {\r\n<div>\r\n <div class=\"section-title\">Pubblicazione</div>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"49\" fxFlex.xs=\"100\">\r\n <mat-label>Intervallo</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker1\">\r\n <input matStartDate [(ngModel)]=\"interval.from\" [dateIntervalChange]=\"interval\" #rangeFrom1=\"ngModel\"\r\n name=\"rangeFrom1\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"interval.to\" [dateIntervalChange]=\"interval\" [end]=\"true\"\r\n #rangeTo1=\"ngModel\" name=\"rangeTo1\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (interval.from || interval.to) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"interval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-datepicker-toggle matSuffix [for]=\"picker1\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker1></mat-date-range-picker>\r\n @if (rangeFrom1.invalid || rangeTo1.invalid) {\r\n<mat-error>Intervallo non valido.</mat-error>\r\n}\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n}\r\n @if (enableDocument) {\r\n<div>\r\n <div class=\"section-title\">Estremi documento</div>\r\n <div class=\"section\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"30\" fxFlex.xs=\"100\">\r\n <mat-label>Num. doc.</mat-label>\r\n <input matInput [(ngModel)]=\"params.number\" #number=\"ngModel\" name=\"number\" maxlength=\"10\" />\r\n @if (params.number) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.number = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Senza spazi</mat-hint>\r\n @if (number.invalid) {\r\n<mat-error>Spazi non validi.</mat-error>\r\n}\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"68\" fxFlex.xs=\"100\">\r\n <mat-label>Intervallo</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker2\">\r\n <input matStartDate [(ngModel)]=\"interval.from\" [dateIntervalChange]=\"interval\" #rangeFrom2=\"ngModel\"\r\n name=\"rangeFrom2\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"interval.to\" [dateIntervalChange]=\"interval\" [end]=\"true\"\r\n #rangeTo2=\"ngModel\" name=\"rangeTo2\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (interval.from || interval.to) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"interval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-datepicker-toggle matSuffix [for]=\"picker2\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker2></mat-date-range-picker>\r\n @if (rangeFrom2.invalid || rangeTo2.invalid) {\r\n<mat-error>Intervallo non valido.</mat-error>\r\n}\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n @if (enableSource) {\r\n<div>\r\n <div class=\"section-title\">Fonte</div>\r\n <div class=\"section\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"30\" fxFlex.xs=\"100\">\r\n <mat-label>Num. doc.</mat-label>\r\n <input matInput [(ngModel)]=\"params.sourceNumber\" #sourceNumber=\"ngModel\" name=\"sourceNumber\"\r\n maxlength=\"10\" />\r\n @if (params.sourceNumber) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.sourceNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Senza spazi</mat-hint>\r\n @if (sourceNumber.invalid) {\r\n<mat-error>Spazi non validi.</mat-error>\r\n}\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"68\" fxFlex.xs=\"100\">\r\n <mat-label>Intervallo</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker3\">\r\n <input matStartDate [(ngModel)]=\"sourceInterval.from\" [dateIntervalChange]=\"sourceInterval\"\r\n #rangeFrom3=\"ngModel\" name=\"rangeFrom3\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"sourceInterval.to\" [dateIntervalChange]=\"sourceInterval\" [end]=\"true\"\r\n #rangeTo3=\"ngModel\" name=\"rangeTo3\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (sourceInterval.from || sourceInterval.to) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix\r\n mat-icon-button aria-label=\"Pulisci\" (click)=\"sourceInterval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-datepicker-toggle matSuffix [for]=\"picker3\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker3></mat-date-range-picker>\r\n @if (rangeFrom3.invalid || rangeTo3.invalid) {\r\n<mat-error>Intervallo non valido.</mat-error>\r\n}\r\n </mat-form-field>\r\n </div>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n @if (sources && sources.length > 0) {\r\n<mat-form-field fxFlex=\"100\">\r\n <mat-label>Tipo fonte</mat-label>\r\n <mat-select [(ngModel)]=\"params.source\" #sector=\"ngModel\" name=\"source\">\r\n <mat-option>Tutti</mat-option>\r\n @for (s of sources; track s) {\r\n <mat-option [value]=\"s.id\">\r\n {{s.name}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n}\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n @if (enableChanges) {\r\n<div>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"49\" fxFlex.xs=\"100\">\r\n <mat-label>Motivo</mat-label>\r\n <mat-select [(ngModel)]=\"params.reason\" #topic=\"ngModel\" name=\"reason\">\r\n @for (t of types; track t) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n {{t.name}}\r\n </mat-option>\r\n}\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"section-title mat-body-3\">Documento modificato</div>\r\n <div class=\"section\">\r\n <p class=\"small\" style=\"line-height: 12px\"><i>Saranno visualizzati i documenti modificanti.</i>\r\n </p>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"23\" fxFlex.xs=\"100\">\r\n <mat-label>Num. doc.</mat-label>\r\n <input matInput [(ngModel)]=\"params.changedNumber\" #changedNumber=\"ngModel\" name=\"changedNumber\"\r\n maxlength=\"10\" />\r\n @if (params.changedNumber) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.changedNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Senza spazi</mat-hint>\r\n @if (changedNumber.invalid) {\r\n<mat-error>Spazi non validi.</mat-error>\r\n}\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"23\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput [(ngModel)]=\"params.changedYear\" #changedYear=\"ngModel\"\r\n name=\"changedYear\" maxlength=\"4\" />\r\n @if (params.changedYear) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.changedYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Dal 1750</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"51\" fxFlex.xs=\"100\">\r\n <mat-label>Titolo</mat-label>\r\n <input matInput [(ngModel)]=\"params.changedTitle\" #changedTitle=\"ngModel\" name=\"changedTitle\"\r\n maxlength=\"10\" />\r\n @if (params.changedTitle) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.changedTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n <div class=\"section-title \">Documento modificante</div>\r\n <div class=\"section\">\r\n <p class=\"small\" style=\"line-height: 12px\">\r\n <i>Saranno visualizzati i documenti modificati, oppure solo i modificanti se \u00E8 stato specificato\r\n l'estremo del documento modificato.</i>\r\n </p>\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <mat-form-field fxFlex=\"23\" fxFlex.xs=\"100\">\r\n <mat-label>Num. doc.</mat-label>\r\n <input matInput [(ngModel)]=\"params.modifierNumber\" #modifierNumber=\"ngModel\" name=\"modifierNumber\"\r\n maxlength=\"10\" />\r\n @if (params.modifierNumber) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.modifierNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Senza spazi</mat-hint>\r\n @if (modifierNumber.invalid) {\r\n<mat-error>Spazi non validi.</mat-error>\r\n}\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"23\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=1750 matInput [(ngModel)]=\"params.modifierYear\" #modifierYear=\"ngModel\"\r\n name=\"modifierYear\" maxlength=\"4\" />\r\n @if (params.modifierYear) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.modifierYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n <mat-hint>Dal 1750</mat-hint>\r\n </mat-form-field>\r\n <mat-form-field fxFlex=\"51\" fxFlex.xs=\"100\">\r\n <mat-label>Titolo</mat-label>\r\n <input matInput [(ngModel)]=\"params.modifierTitle\" #modifierTitle=\"ngModel\" name=\"modifierTitle\"\r\n maxlength=\"10\" />\r\n @if (params.modifierTitle) {\r\n<button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Pulisci\" (click)=\"params.modifierTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n}\r\n </div>\r\n </form>\r\n</div>\r\n<div mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"30\">\r\n <button type=\"button\" mat-button (click)=\"clear()\" color=\"primary\">PULISCI</button>\r\n </div>\r\n <div fxFlex=\"70\" fxLayoutAlign=\"end\">\r\n <button mat-flat-button color=\"primary\" #okButton [disabled]=\"f.form.invalid\" (click)=\"ok()\">TROVA</button>\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">CHIUDI</button>\r\n </div>\r\n </div>\r\n</div>", styles: [":root{--ars-color-link: #03A9F4;--ars-color-link-low: #0288D1;--ars-color-accent: #7894ae;--ars-color-accent-low: #456179;--ars-color-primary: #00a293;--ars-color-primary-low: #006a60;--ars-color-primary-hi: #12c0ae;--ars-color-secondary: #4a635f;--ars-color-secondary-low: #27403c;--ars-color-error: #ff5449;--ars-color-error-low: #a80710;--ars-color-ok: #388E3C;--ars-color-ok-low: #29692c;--ars-color-warning: #FFC107;--ars-color-warning-low: #FFA000;--ars-item-hover-background-color: #eaecef;--ars-item-selected-background-color: #ced1d2;--ars-item-opaque-background-color: rgba(255, 255, 255, .75);--ars-filterbox-filtered-background-color: #f9fbe7}.dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-close{margin-right:10px;margin-top:10px}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.scroll-auto{overflow:auto}.scroll-hidden{overflow:hidden}b{font-weight:700}.large{font-size:large!important}.small{font-size:small!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media (prefers-color-scheme: dark){:root{--ars-color-link: #03A9F4;--ars-color-link-low: #0288D1;--ars-color-accent: #adcae6;--ars-color-accent-low: #5e7a93;--ars-color-primary: #53dbc9;--ars-color-primary-low: #008679;--ars-color-primary-hi: #74f8e5;--ars-color-secondary: #b1ccc6;--ars-color-secondary-low: #627c77;--ars-color-error: #ff5449;--ars-color-error-low: #a80710;--ars-color-ok: #4CAF50;--ars-color-ok-low: #3f8f41;--ars-color-warning: #FFC107;--ars-color-warning-low: #FFA000;--ars-item-hover-background-color: #262a29;--ars-item-selected-background-color: #3f4342;--ars-item-opaque-background-color: rgba(0, 0, 0, .65);--ars-filterbox-filtered-background-color: #c6c7b8}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b{font-weight:600}}.item{min-height:50px!important;border-bottom:1px dotted #eee!important;line-height:18px}.item:hover{background-color:#fff8e1}.item-cell{padding:5px 0}.item-line{padding-top:1px;padding-bottom:1px}.item-line .command a{text-decoration:none;color:#2a91e0;font-weight:500;cursor:pointer!important}.item-line .command a:hover{opacity:.7}.item-line>a{color:#2a91e0!important;opacity:1!important;cursor:pointer}.item-line>a:hover{opacity:.7!important}.item-line-1{font-weight:500;font-size:1em;color:#000}.item-line-2{font-size:.9em;color:#000}.item-line-3{font-size:.8em;color:#000}.item-line-4{font-size:.7em;color:#000}.item-line-block-title{font-size:.8em;font-weight:500}.item-line-block{margin-top:4px;margin-bottom:4px;margin-left:10px;padding-left:10px;border-left:2px solid #009688}.item-line-read{font-weight:400!important}.item-line-read .command,.item-line-read a{color:#2a91e0;cursor:pointer!important;opacity:1!important}.item-line-read .command:hover,.item-line-read a:hover{opacity:.7!important}.item-line-red-badge{background-color:red;color:#fff;padding:2px 4px;border-radius:3px;border:1px solid red}.items-group-title{line-height:24px;padding:20px 10px 10px 20px;font-weight:500;font-size:19.2px}.items-footer{padding-top:10px}.sidenav-title-container{min-height:64px!important;padding-left:15px;margin-bottom:4px}.sidenav-title{color:#009688;font-weight:500;font-size:19.2px}.item-greyed-1{color:#607d8b}.item-greyed-2{color:#90a4ae}.item-accent{color:#0d7066}.item-primary{color:#009688}.item-badge{margin-left:10px;margin-bottom:5px;padding:0 4px;height:12px;line-height:12px;border-radius:3px;font-size:x-small;font-weight:500;text-align:center;background-color:orange;color:#000}\n"] }]
|
|
317
|
-
}],
|
|
318
|
-
type: Inject,
|
|
319
|
-
args: [MAT_DIALOG_DATA]
|
|
320
|
-
}] }], propDecorators: { okButton: [{
|
|
330
|
+
], template: "<h2 mat-dialog-title>Ricerca</h2>\r\n<div mat-dialog-content>\r\n <form name=\"form\" #f=\"ngForm\" (keyup.Enter)=\"!f.form.invalid ? ok() : null\" novalidate>\r\n <mat-accordion multi displayMode=\"flat\">\r\n @if(isLaws() || isModule(modulesEnum.ModificheAbrogazioniERinvii)) {\r\n <mat-expansion-panel expanded=\"true\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Settori\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <chips-selector [(ngModel)]=\"params.sectors\" [multiple]=\"true\" name=\"sectors\" label=\"Settori\"\r\n [options]=\"sectors\" (changed)=\"sectorsChanged()\" />\r\n @if(hasRegions())\r\n {\r\n <mat-divider style=\"padding-top: 8px; margin-top:8px\"></mat-divider>\r\n <chips-selector mode=\"collapsed\" [(ngModel)]=\"params.authors\" [multiple]=\"true\" name=\"authors\"\r\n label=\"Tutte le regioni\" [options]=\"regions\" />\r\n }\r\n </mat-expansion-panel>\r\n } @else if(isNews()) {\r\n <mat-expansion-panel expanded=\"true\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Tipologia\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <chips-selector [(ngModel)]=\"params.sectors\" [multiple]=\"true\" name=\"sectors\" label=\"Tipologia\"\r\n [options]=\"sectors\" />\r\n </mat-expansion-panel>\r\n }\r\n <mat-expansion-panel expanded=\"true\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n @if (isLaws() || isModule(modulesEnum.Giurisprudenza)) {\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input #filterByNumber=\"matInput\" matInput maxlength=\"10\" [(ngModel)]=\"params.number\" name=\"number\" />\r\n @if (params.number) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.number = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.year\" name=\"year\" />\r\n @if (params.year) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.year = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n }\r\n @if (isLaws() || !isModule(modulesEnum.ScadenzeESegnalazioni)) {\r\n <mat-form-field>\r\n <mat-label>Intervallo di pubblicazione</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker1\">\r\n <input matStartDate [(ngModel)]=\"interval.from\" [dateIntervalChange]=\"interval\" #rangeFrom1=\"ngModel\"\r\n name=\"rangeFrom1\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"interval.to\" [dateIntervalChange]=\"interval\" [end]=\"true\"\r\n #rangeTo1=\"ngModel\" name=\"rangeTo1\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (interval.from || interval.to) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"interval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker1\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker1></mat-date-range-picker>\r\n @if (rangeFrom1.invalid || rangeTo1.invalid) {\r\n <mat-error>Intervallo non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <mat-form-field>\r\n <mat-label>Testo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"params.text\" name=\"text\" />\r\n @if (params.text) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.text = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix matTooltip=\"Opzioni\" aria-label=\"Opzioni\"\r\n [matMenuTriggerFor]=\"textOptionsMenu\"><mat-icon>more_vert</mat-icon></button>\r\n </mat-form-field>\r\n <div>\r\n <div>\r\n <mat-slide-toggle [(ngModel)]=\"params.titleOnly\" name=\"titleOnly\">Cerca solo nel\r\n titolo</mat-slide-toggle>\r\n </div>\r\n @if(isLaws()) {\r\n <div style=\"padding-top:10px\">\r\n <mat-slide-toggle [(ngModel)]=\"params.showCommentedDocumentsOnly\" name=\"showCommentedDocumentsOnly\">Mostra\r\n solo norme con commenti</mat-slide-toggle>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </mat-expansion-panel>\r\n @if(isLaws()) {\r\n <mat-expansion-panel [expanded]=\"hasFilter('source')\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Fonte\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"params.sourceNumber\" name=\"sourceNumber\" />\r\n @if (params.sourceNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.sourceNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.sourceYear\"\r\n name=\"sourceYear\" />\r\n @if (params.sourceYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.sourceYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Intervallo di pubblicazione</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker2\">\r\n <input matStartDate [(ngModel)]=\"sourceInterval.from\" [dateIntervalChange]=\"sourceInterval\"\r\n #rangeFrom2=\"ngModel\" name=\"rangeFrom2\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"sourceInterval.to\" [dateIntervalChange]=\"sourceInterval\" [end]=\"true\"\r\n #rangeTo2=\"ngModel\" name=\"rangeTo2\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (sourceInterval.from || sourceInterval.to) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"sourceInterval.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker2\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker2></mat-date-range-picker>\r\n @if (rangeFrom2.invalid || rangeTo2.invalid) {\r\n <mat-error>Intervallo non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Tipo</mat-label>\r\n <mat-select [(ngModel)]=\"params.source\" name=\"source\">\r\n @for (s of sources; track s) {\r\n <mat-option [value]=\"s.value\" [matTooltip]=\"s.name\">\r\n {{s.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel [expanded]=\"hasFilter('other')\" class=\"accordion-panel mat-elevation-z0\">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Altre opzioni\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n @if(isLaws()) {\r\n @if(!hasRegions()) {\r\n <mat-form-field>\r\n <mat-label>Autore</mat-label>\r\n <mat-select [(ngModel)]=\"params.author\" name=\"author\">\r\n @for (a of authors; track a) {\r\n <mat-option [value]=\"a.value\" [matTooltip]=\"a.name\">\r\n {{a.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n <mat-form-field>\r\n <mat-label>Tipo documento</mat-label>\r\n <mat-select [(ngModel)]=\"params.type\" name=\"type\">\r\n @for (t of types; track t) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n {{t.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n <mat-form-field>\r\n <mat-label>Argomento</mat-label>\r\n <mat-select [(ngModel)]=\"params.topic\" name=\"topic\">\r\n @for (t of topics; track t) {\r\n <mat-option [value]=\"t.value\" [matTooltip]=\"t.name\">\r\n {{t.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n }\r\n </div>\r\n </mat-expansion-panel>\r\n\r\n } @else if(isModule(modulesEnum.ModificheAbrogazioniERinvii)) {\r\n <mat-expansion-panel expanded class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento modificato\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"params.changedNumber\" name=\"changedNumber\"\r\n #filterByChangeNumber=\"matInput\" />\r\n @if (params.changedNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.changedNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.changedYear\"\r\n name=\"changedYear\" />\r\n @if (params.changedYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.changedYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Titolo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"params.changedTitle\" name=\"changedTitle\" />\r\n @if (params.changedTitle) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.changedTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel [expanded]=\"hasFilter('modifier')\" class=\"accordion-panel mat-elevation-z0 \">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Documento modificante\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <div fxLayout=\"row wrap\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <mat-form-field fxFlex=\"59\" fxFlex.xs=\"100\">\r\n <mat-label>Numero</mat-label>\r\n <input matInput maxlength=\"10\" [(ngModel)]=\"params.modifierNumber\" name=\"modifierNumber\" />\r\n @if (params.changedNumber) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.modifierNumber = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n <mat-form-field fxHide.xs fxFlex=\"39\" fxFlex.xs=\"100\">\r\n <mat-label>Anno</mat-label>\r\n <input type=\"number\" min=\"1750\" matInput maxlength=\"4\" [(ngModel)]=\"params.modifierYear\"\r\n name=\"modifierYear\" />\r\n @if (params.modifierYear) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.modifierYear = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n <mat-form-field>\r\n <mat-label>Titolo</mat-label>\r\n <input matInput maxlength=\"200\" [(ngModel)]=\"params.modifierTitle\" name=\"modifierTitle\" />\r\n @if (params.modifierTitle) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"params.modifierTitle = null\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n <mat-expansion-panel [expanded]=\"hasFilter('other')\" class=\"accordion-panel mat-elevation-z0\">\r\n <mat-expansion-panel-header class=\"accordion-header\">\r\n <mat-panel-title>\r\n Altre opzioni\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div fxLayout=\"column\">\r\n <mat-form-field>\r\n <mat-label>Motivo</mat-label>\r\n <mat-select [(ngModel)]=\"params.changeReason\" name=\"changeReason\">\r\n <mat-option>Tutti</mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </mat-expansion-panel>\r\n }\r\n </mat-accordion>\r\n </form>\r\n</div>\r\n<div mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"30\">\r\n <button type=\"button\" mat-button (click)=\"clear()\" color=\"primary\">PULISCI</button>\r\n </div>\r\n <div fxFlex=\"70\" fxLayoutAlign=\"end\">\r\n <button mat-flat-button color=\"primary\" #okButton [disabled]=\"f.form.invalid\" (click)=\"ok()\">TROVA</button>\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">CHIUDI</button>\r\n </div>\r\n </div>\r\n</div>\r\n<mat-menu #textOptionsMenu=\"matMenu\">\r\n <button mat-menu-item (click)=\"compose()\">\r\n <mat-icon>build</mat-icon>Componi\r\n </button>\r\n <button mat-menu-item (click)=\"help()\">\r\n <mat-icon>help</mat-icon>Come usare la ricerca in testo libero\r\n </button>\r\n</mat-menu>", styles: [".accordion-panel{background-color:transparent}.accordion-header{padding-left:15px;padding-right:20px;border-radius:var(--mat-expansion-container-shape)}.mat-expansion-panel-body{padding-bottom:20px!important}\n"] }]
|
|
331
|
+
}], propDecorators: { okButton: [{
|
|
321
332
|
type: ViewChild,
|
|
322
333
|
args: ['okButton']
|
|
323
334
|
}], done: [{
|
|
324
335
|
type: Output
|
|
325
336
|
}] } });
|
|
326
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvY2xpcHBlci51aS91aS9zZWFyY2gtZGlhbG9nL3NlYXJjaC1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvc2VhcmNoLWRpYWxvZy9zZWFyY2gtZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBYSxlQUFlLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzFJLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDeEUsT0FBTyxFQUNMLGtCQUFrQixFQUdsQixXQUFXLEVBQ1osTUFBTSx1Q0FBdUMsQ0FBQztBQUMvQyxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUM5RyxPQUFPLEVBQUUsMENBQTBDLEVBQUUsTUFBTSw0RUFBNEUsQ0FBQztBQUN4SSxPQUFPLEVBQUUsK0NBQStDLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVB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O0lBQ1AsQ0FBQzs4R0FoUlUsNEJBQTRCLGlIQWlDN0IsZUFBZTtrR0FqQ2QsNEJBQTRCLHlHQTlCckIsV0FBVyxDQUFDLFlBQVksRUFBRSxpQkFHL0I7WUFDUCwrQ0FBK0M7U0FDbEQsZ0lDbENMLCt3aUJBbVlNLHF3SUQ5VkUsY0FBYywrSEFDZCxnQkFBZ0Isd0dBQ2hCLFdBQVcsdWlEQUNYLFVBQVUsK2hHQUVWLGlCQUFpQiw2V0FDakIsa0JBQWtCLGdtQkFDbEIsZUFBZSxtckJBQ2YsZUFBZSw4QkFFZixnQkFBZ0IsNlRBQ2hCLGNBQWMsMldBQ2QsZUFBZSwwVUFDZixhQUFhLG9MQUNiLGNBQWMsbytCQUNkLG1CQUFtQiwwekJBQ25CLDJCQUEyQix3R0FDM0IsZ0JBQWdCLDRIQUNoQixjQUFjLGdMQUNkLFlBQVk7OzJGQUdQLDRCQUE0QjtrQkEvQnhDLFNBQVM7MkJBQ0EsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLFlBQVksRUFBRSxFQUFFLGFBR2pDO3dCQUNQLCtDQUErQztxQkFDbEQsY0FDVyxJQUFJLFdBQ1A7d0JBQ0wsY0FBYzt3QkFDZCxnQkFBZ0I7d0JBQ2hCLFdBQVc7d0JBQ1gsVUFBVTt3QkFFVixpQkFBaUI7d0JBQ2pCLGtCQUFrQjt3QkFDbEIsZUFBZTt3QkFDZixlQUFlO3dCQUVmLGdCQUFnQjt3QkFDaEIsY0FBYzt3QkFDZCxlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxtQkFBbUI7d0JBQ25CLDJCQUEyQjt3QkFDM0IsZ0JBQWdCO3dCQUNoQixjQUFjO3dCQUNkLFlBQVk7cUJBQ2Y7OzBCQW1DQSxNQUFNOzJCQUFDLGVBQWU7eUNBaENGLFFBQVE7c0JBQTlCLFNBQVM7dUJBQUMsVUFBVTtnQkFDWCxJQUFJO3NCQUFiLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZywgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dUaXRsZSwgTWF0RGlhbG9nQ29udGVudCwgTWF0RGlhbG9nQWN0aW9ucywgTWF0RGlhbG9nQ2xvc2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBEYXRlSW50ZXJ2YWwsIFN5c3RlbVV0aWxzIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9jb3JlJztcclxuaW1wb3J0IHtcclxuICBDbGlwcGVyRGVmaW5pdGlvbnMsXHJcbiAgQ2xpcHBlclNlcnZpY2UsXHJcbiAgQ2xpcHBlclNlYXJjaFBhcmFtcyxcclxuICBTZWFyY2hVdGlsc1xyXG59IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY2xpcHBlci5jb21tb24nO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VhcmNoRnJlZVRleHRIZWxwQ29tcG9uZW50IH0gZnJvbSAnLi4vc2VhcmNoLWZyZWUtdGV4dC1oZWxwL3NlYXJjaC1mcmVlLXRleHQtaGVscC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VhcmNoRnJlZVRleHRRdWVyeUJ1aWxkZXJDb21wb25lbnQgfSBmcm9tICcuLi9zZWFyY2gtZnJlZS10ZXh0LXF1ZXJ5LWJ1aWxkZXIvc2VhcmNoLWZyZWUtdGV4dC1xdWVyeS1idWlsZGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IE1BVF9EQVRFUElDS0VSX1NDUk9MTF9TVFJBVEVHWV9GQUNUT1JZX1BST1ZJREVSLCBNYXREYXRlcGlja2VyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XHJcbmltcG9ydCB7IFNhZmVIdG1sUGlwZSB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY29yZSc7XHJcbmltcG9ydCB7IERhdGVJbnRlcnZhbENoYW5nZURpcmVjdGl2ZSB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY29yZSc7XHJcbmltcG9ydCB7IEV4dGVuZGVkTW9kdWxlIH0gZnJvbSAnQG5nYnJhY2tldC9uZ3gtbGF5b3V0L2V4dGVuZGVkJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBNYXRPcHRpb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcclxuaW1wb3J0IHsgTWF0U2VsZWN0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IE1hdENoZWNrYm94TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xyXG5pbXBvcnQgeyBGbGV4TW9kdWxlIH0gZnJvbSAnQG5nYnJhY2tldC9uZ3gtbGF5b3V0L2ZsZXgnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQXBwbGljYXRpb25EaWFsb2dTZXJ2aWNlIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy91aS5hcHBsaWNhdGlvbic7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBob3N0OiB7ICdCaW5kJzogU3lzdGVtVXRpbHMuZ2VuZXJhdGVVVUlEKCkgfSxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9zZWFyY2gtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3NlYXJjaC1kaWFsb2cuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIE1BVF9EQVRFUElDS0VSX1NDUk9MTF9TVFJBVEVHWV9GQUNUT1JZX1BST1ZJREVSXHJcbiAgICBdLFxyXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICAgIGltcG9ydHM6IFtcclxuICAgICAgICBNYXREaWFsb2dUaXRsZSxcclxuICAgICAgICBNYXREaWFsb2dDb250ZW50LFxyXG4gICAgICAgIEZvcm1zTW9kdWxlLFxyXG4gICAgICAgIEZsZXhNb2R1bGUsXHJcbiAgICAgICAgXHJcbiAgICAgICAgTWF0Q2hlY2tib3hNb2R1bGUsXHJcbiAgICAgICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgICAgIE1hdFNlbGVjdE1vZHVsZSxcclxuICAgICAgICBNYXRPcHRpb25Nb2R1bGUsXHJcbiAgICAgICAgXHJcbiAgICAgICAgTWF0VG9vbHRpcE1vZHVsZSxcclxuICAgICAgICBNYXRJbnB1dE1vZHVsZSxcclxuICAgICAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICAgICAgTWF0SWNvbk1vZHVsZSxcclxuICAgICAgICBFeHRlbmRlZE1vZHVsZSxcclxuICAgICAgICBNYXREYXRlcGlja2VyTW9kdWxlLFxyXG4gICAgICAgIERhdGVJbnRlcnZhbENoYW5nZURpcmVjdGl2ZSxcclxuICAgICAgICBNYXREaWFsb2dBY3Rpb25zLFxyXG4gICAgICAgIE1hdERpYWxvZ0Nsb3NlLFxyXG4gICAgICAgIFNhZmVIdG1sUGlwZSxcclxuICAgIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDbGlwcGVyU2VhcmNoRGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAVmlld0NoaWxkKCdva0J1dHRvbicpIG9rQnV0dG9uITogSFRNTEJ1dHRvbkVsZW1lbnQ7XHJcbiAgQE91dHB1dCgpIGRvbmUgPSBuZXcgRXZlbnRFbWl0dGVyPENsaXBwZXJTZWFyY2hQYXJhbXM+KCk7XHJcblxyXG4gIHBhcmFtczogQ2xpcHBlclNlYXJjaFBhcmFtcztcclxuICBpbnRlcnZhbDogRGF0ZUludGVydmFsID0gbmV3IERhdGVJbnRlcnZhbCgpO1xyXG4gIG1vZGVsczogYW55O1xyXG4gIHNlY3RvcnM6IGFueTtcclxuICBzb3VyY2VzOiBhbnk7XHJcbiAgc291cmNlSW50ZXJ2YWw6IERhdGVJbnRlcnZhbCA9IG5ldyBEYXRlSW50ZXJ2YWwoKTtcclxuICB0b3BpY3M6IGFueTtcclxuICB0eXBlczogYW55O1xyXG4gIGF1dGhvcnM6IGFueTtcclxuICBlbmFibGVBdXRob3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBlbmFibGVUb3BpYzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGVuYWJsZVRheG9ub215OiBib29sZWFuID0gZmFsc2U7XHJcbiAgZW5hYmxlVHlwZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGVuYWJsZVRleHQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBlbmFibGVNb2RlbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGVuYWJsZVNlY3RvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGVuYWJsZVNvdXJjZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGVuYWJsZURvY3VtZW50OiBib29sZWFuID0gZmFsc2U7XHJcbiAgZW5hYmxlRGVhZGxpbmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBlbmFibGVQdWJsaWNhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGVuYWJsZUNoYW5nZXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBlbmFibGVSZWFkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZW5hYmxlQ29tbWVudHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSAkZGlhbG9nOiBBcHBsaWNhdGlvbkRpYWxvZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlICRjbGlwcGVyOiBDbGlwcGVyU2VydmljZSxcclxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBfZGF0YTogYW55XHJcbiAgKSB7XHJcbiAgICB0aGlzLmVuYWJsZVB1YmxpY2F0aW9uID0gX2RhdGEuZW5hYmxlUHVibGljYXRpb247XHJcbiAgICB0aGlzLmVuYWJsZURvY3VtZW50ID0gX2RhdGEuZW5hYmxlRG9jdW1lbnQ7XHJcbiAgICB0aGlzLmVuYWJsZURlYWRsaW5lID0gX2RhdGEuZW5hYmxlRGVhZGxpbmU7XHJcbiAgICB0aGlzLmVuYWJsZU1vZGVsID0gX2RhdGEuZW5hYmxlTW9kZWw7XHJcbiAgICB0aGlzLmVuYWJsZVNlY3RvciA9IF9kYXRhLmVuYWJsZVNlY3RvcjtcclxuICAgIHRoaXMuZW5hYmxlU291cmNlID0gX2RhdGEuZW5hYmxlU291cmNlO1xyXG4gICAgdGhpcy5lbmFibGVBdXRob3IgPSBfZGF0YS5lbmFibGVBdXRob3I7XHJcbiAgICB0aGlzLmVuYWJsZVRvcGljID0gX2RhdGEuZW5hYmxlVG9waWM7XHJcbiAgICB0aGlzLmVuYWJsZVRheG9ub215ID0gX2RhdGEuZW5hYmxlVGF4b25vbXk7XHJcbiAgICB0aGlzLmVuYWJsZVR5cGUgPSBfZGF0YS5lbmFibGVUeXBlO1xyXG4gICAgdGhpcy5lbmFibGVUZXh0ID0gX2RhdGEuZW5hYmxlVGV4dDtcclxuICAgIHRoaXMuZW5hYmxlQ2hhbmdlcyA9IF9kYXRhLmVuYWJsZUNoYW5nZXM7XHJcbiAgICB0aGlzLmVuYWJsZUNvbW1lbnRzID0gX2RhdGEuZW5hYmxlQ29tbWVudHM7XHJcbiAgICB0aGlzLmVuYWJsZVJlYWQgPSB0cnVlO1xyXG4gICAgdGhpcy5wYXJhbXMgPSB7XHJcbiAgICAgIHNob3dVbnJlYWREb2N1bWVudHNPbmx5OiBfZGF0YS5wYXJhbXMuc2hvd1VucmVhZERvY3VtZW50c09ubHksXHJcbiAgICAgIHNob3dDb21tZW50ZWREb2N1bWVudHNPbmx5OiBfZGF0YS5wYXJhbXMuc2hvd0NvbW1lbnRlZERvY3VtZW50c09ubHksXHJcbiAgICAgIGNvdW50OiAyNSxcclxuICAgICAgZmlyc3Q6IDBcclxuICAgIH07XHJcbiAgICB0aGlzLnBhcmFtcy50ZXh0ID0gX2RhdGEucGFyYW1zLnRleHQ7XHJcbiAgICB0aGlzLnBhcmFtcy50aXRsZU9ubHkgPSBfZGF0YS5wYXJhbXMudGl0bGVPbmx5O1xyXG4gICAgaWYgKHRoaXMuZW5hYmxlU2VjdG9yKSB7XHJcbiAgICAgIHRoaXMucGFyYW1zLnNlY3RvciA9IF9kYXRhLnBhcmFtcy5zZWN0b3I7XHJcbiAgICAgIGlmIChfZGF0YS5zZWN0b3JzKSB0aGlzLnNlY3RvcnMgPSBfZGF0YS5zZWN0b3JzO1xyXG4gICAgICBlbHNlIHRoaXMuc2VjdG9ycyA9IENsaXBwZXJEZWZpbml0aW9ucy5TRUNUT1JTO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZW5hYmxlQXV0aG9yKSB0aGlzLnBhcmFtcy5hdXRob3IgPSBfZGF0YS5wYXJhbXMuYXV0aG9yO1xyXG4gICAgaWYgKHRoaXMuZW5hYmxlTW9kZWwpIHtcclxuICAgICAgdGhpcy5tb2RlbHMgPSBfZGF0YS5tb2RlbHM7XHJcbiAgICAgIHRoaXMucGFyYW1zLnNlY3RvciA9IF9kYXRhLnBhcmFtcy5zZWN0b3I7IC8vIFVzZSBzZWN0b3IgYXMgdmFsdWUgYW5kIG5vdCBtb2RlbFxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZW5hYmxlRG9jdW1lbnQpIHRoaXMucGFyYW1zLm51bWJlciA9IF9kYXRhLnBhcmFtcy5udW1iZXI7XHJcbiAgICBpZiAodGhpcy5lbmFibGVEb2N1bWVudCB8fCB0aGlzLmVuYWJsZVB1YmxpY2F0aW9uKSB7XHJcbiAgICAgIGlmIChfZGF0YS5wYXJhbXMuZnJvbURhdGUpIHRoaXMuaW50ZXJ2YWwuZnJvbSA9IF9kYXRhLnBhcmFtcy5mcm9tRGF0ZTtcclxuICAgICAgaWYgKF9kYXRhLnBhcmFtcy50b0RhdGUpIHRoaXMuaW50ZXJ2YWwudG8gPSBfZGF0YS5wYXJhbXMudG9EYXRlO1xyXG5cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmVuYWJsZVRvcGljKSB0aGlzLnBhcmFtcy50b3BpYyA9IF9kYXRhLnBhcmFtcy50b3BpYztcclxuICAgIGlmICh0aGlzLmVuYWJsZVRheG9ub215KSB7XHJcbiAgICAgIHRoaXMucGFyYW1zLnRheG9ub215ID0gX2RhdGEucGFyYW1zLnRheG9ub215O1xyXG4gICAgICB0aGlzLnBhcmFtcy50YXhvbm9teVBhdGggPSBfZGF0YS5wYXJhbXMudGF4b25vbXlQYXRoO1xyXG4gICAgICB0aGlzLnBhcmFtcy50YXhvbm9teU5vZGUgPSBfZGF0YS5wYXJhbXMudGF4b25vbXlOb2RlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZW5hYmxlVHlwZSkge1xyXG4gICAgICB0aGlzLnR5cGVzID0gQ2xpcHBlckRlZmluaXRpb25zLlNFQ1RPUl9UWVBFUztcclxuICAgICAgdGhpcy5wYXJhbXMudHlwZSA9IF9kYXRhLnBhcmFtcy50eXBlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZW5hYmxlU291cmNlKSB7XHJcbiAgICAgIHRoaXMuc291cmNlcyA9IENsaXBwZXJEZWZpbml0aW9ucy5TT1VSQ0VTO1xyXG4gICAgICB0aGlzLnBhcmFtcy5zb3VyY2UgPSBfZGF0YS5wYXJhbXMuc291cmNlO1xyXG4gICAgICB0aGlzLnBhcmFtcy5zb3VyY2VOdW1iZXIgPSBfZGF0YS5wYXJhbXMuc291cmNlTnVtYmVyO1xyXG4gICAgICBpZiAoX2RhdGEucGFyYW1zLnNvdXJjZUZyb21EYXRlKVxyXG4gICAgICAgIHRoaXMuc291cmNlSW50ZXJ2YWwuZnJvbSA9IF9kYXRhLnBhcmFtcy5zb3VyY2VGcm9tRGF0ZTtcclxuICAgICAgaWYgKF9kYXRhLnBhcmFtcy5zb3VyY2VUb0RhdGUpXHJcbiAgICAgICAgdGhpcy5zb3VyY2VJbnRlcnZhbC50byA9IF9kYXRhLnBhcmFtcy5zb3VyY2VUb0RhdGU7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5lbmFibGVDaGFuZ2VzKSB7XHJcbiAgICAgIHRoaXMudHlwZXMgPSBfZGF0YS5jaGFuZ2VSZWFzb25zO1xyXG4gICAgICB0aGlzLnBhcmFtcy5yZWFzb24gPSBfZGF0YS5wYXJhbXMucmVhc29uO1xyXG4gICAgICB0aGlzLnBhcmFtcy5jaGFuZ2VkTnVtYmVyID0gX2RhdGEucGFyYW1zLmNoYW5nZWROdW1iZXI7XHJcbiAgICAgIHRoaXMucGFyYW1zLmNoYW5nZWRZZWFyID0gX2RhdGEucGFyYW1zLmNoYW5nZWRZZWFyO1xyXG4gICAgICB0aGlzLnBhcmFtcy5jaGFuZ2VkVGl0bGUgPSBfZGF0YS5wYXJhbXMuY2hhbmdlZFRpdGxlO1xyXG4gICAgICB0aGlzLnBhcmFtcy5tb2RpZmllck51bWJlciA9IF9kYXRhLnBhcmFtcy5tb2RpZmllck51bWJlcjtcclxuICAgICAgdGhpcy5wYXJhbXMubW9kaWZpZXJZZWFyID0gX2RhdGEucGFyYW1zLm1vZGlmaWVyWWVhcjtcclxuICAgICAgdGhpcy5wYXJhbXMubW9kaWZpZXJUaXRsZSA9IF9kYXRhLnBhcmFtcy5tb2RpZmllclRpdGxlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZW5hYmxlRGVhZGxpbmUpIHtcclxuICAgICAgdGhpcy50eXBlcyA9IF9kYXRhLmRlYWRsaW5lcztcclxuICAgICAgdGhpcy5wYXJhbXMudHlwZSA9IF9kYXRhLnBhcmFtcy50eXBlO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmVuYWJsZVJlYWQgPT09IGZhbHNlKVxyXG4gICAgICB0aGlzLmVuYWJsZVJlYWQgPSBmYWxzZTtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5wYXJhbXMubW9kZWwgPT09IENsaXBwZXJEZWZpbml0aW9ucy5ETV9TQ0FERU5aQV9TRUdOQUxBWklPTkUgfHxcclxuICAgICAgdGhpcy5wYXJhbXMubW9kZWwgPT09IENsaXBwZXJEZWZpbml0aW9ucy5ETV9OT1JNQVRJVkFfVklHRU5URSB8fFxyXG4gICAgICB0aGlzLnBhcmFtcy5tb2RlbCA9PT0gQ2xpcHBlckRlZmluaXRpb25zLkRNX01FVE9ESV9BTkFMSVNJXHJcbiAgICApXHJcbiAgICAgIHRoaXMuZW5hYmxlUmVhZCA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmF1dGhvcnMgPSBbXTtcclxuXHJcbiAgICBpZiAodGhpcy5lbmFibGVUb3BpYykge1xyXG4gICAgICBpZiAoIXRoaXMuJGNsaXBwZXIubG9nZ2VkSW4pIHJldHVybjtcclxuICAgICAgLy8gTG9hZCB0b3BpY3NcclxuICAgICAgdGhpcy4kY2xpcHBlci5nZXRUb3BpY3MoKVxyXG4gICAgICAgIC5zdWJzY3JpYmUociA9PiB7XHJcbiAgICAgICAgICBpZiAoci5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIGxldCBuYW1lID0gJyc7XHJcbiAgICAgICAgICAgIHIudmFsdWUuZm9yRWFjaCgobjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgbmFtZSA9ICcnO1xyXG4gICAgICAgICAgICAgIChuLnZhbHVlLm1hdGNoKC8uL2cpIHx8IFtdKS5mb3JFYWNoKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG5hbWUgKz0gJyZuYnNwOyZuYnNwOyc7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgbmFtZSArPSBuLnZhbHVlICsgJyAtICcgKyBuLm5hbWU7XHJcbiAgICAgICAgICAgICAgbi50aXRsZSA9IG5hbWU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnRvcGljcyA9IHIudmFsdWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZW5hYmxlQXV0aG9yICYmIHRoaXMucGFyYW1zLnNlY3RvcikgdGhpcy5zZWN0b3JDaGFuZ2VkKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIGF1dGhvcnMgd2hlbiBzZWxlY3RlZCBzZWN0b3JzIGNoYW5nZWRcclxuICAgKi9cclxuICBzZWN0b3JDaGFuZ2VkKCkge1xyXG4gICAgaWYgKHRoaXMuZW5hYmxlQXV0aG9yKSB7XHJcbiAgICAgIGxldCBhdXRob3JzOiBhbnkgPSBbXTtcclxuICAgICAgaWYgKHRoaXMucGFyYW1zLnNlY3Rvcikge1xyXG4gICAgICAgIENsaXBwZXJEZWZpbml0aW9ucy5TRUNUT1JfQVVUSE9SUy5mb3JFYWNoKChuOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChuLnNlY3RvcklkID09PSB0aGlzLnBhcmFtcy5zZWN0b3IpIGF1dGhvcnMucHVzaChuKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmF1dGhvcnMgPSBhdXRob3JzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmVuYWJsZVR5cGUpIHtcclxuICAgICAgaWYgKHRoaXMucGFyYW1zLnNlY3Rvcikge1xyXG4gICAgICAgIGxldCB0eXBlczogYW55ID0gW107XHJcbiAgICAgICAgQ2xpcHBlckRlZmluaXRpb25zLlNFQ1RPUl9UWVBFUy5mb3JFYWNoKChuOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChuLnNlY3RvcklkID09PSB0aGlzLnBhcmFtcy5zZWN0b3IpIHR5cGVzLnB1c2gobik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy50eXBlcyA9IHR5cGVzO1xyXG4gICAgICB9IGVsc2UgdGhpcy50eXBlcyA9IENsaXBwZXJEZWZpbml0aW9ucy5TRUNUT1JfVFlQRVM7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbGVhciBzZWFyY2hcclxuICAgKi9cclxuICBjbGVhcigpIHtcclxuICAgIFNlYXJjaFV0aWxzLmNsZWFyKHRoaXMucGFyYW1zKTtcclxuICAgIHRoaXMuaW50ZXJ2YWwuY2xlYXIoKTtcclxuICAgIHRoaXMuc291cmNlSW50ZXJ2YWwuY2xlYXIoKTtcclxuICAgIHRoaXMuc2VjdG9yQ2hhbmdlZCgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gKiBTaG93IGZyZWUgdGV4dCBoZWxwXHJcbiAqL1xyXG4gIGhlbHAoKSB7XHJcbiAgICB0aGlzLiRkaWFsb2cub3BlbihDbGlwcGVyU2VhcmNoRnJlZVRleHRIZWxwQ29tcG9uZW50LCB7XHJcbiAgICAgIGFyaWFMYWJlbDogJ2luZm9ybWF6aW9uaSByaWNlcmNhJyxcclxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgcmVzdG9yZUZvY3VzOiB0cnVlLFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxyXG4gICAgICBtaW5XaWR0aDogJzM3NXB4JyxcclxuICAgICAgbWF4V2lkdGg6ICc4MDBweCcsXHJcbiAgICAgIHdpZHRoOiAnOTklJyxcclxuICAgIH0pO1xyXG5cclxuICB9XHJcbiAgLyoqXHJcbiAgICogQ29tcG9zZSBhIGZyZWUgdGV4dCBzZWFyY2ggcXVlcnlcclxuICAgKi9cclxuICBjb21wb3NlKCkge1xyXG4gICAgbGV0IGQgPSB0aGlzLiRkaWFsb2cub3BlbihDbGlwcGVyU2VhcmNoRnJlZVRleHRRdWVyeUJ1aWxkZXJDb21wb25lbnQsIHtcclxuICAgICAgYXJpYUxhYmVsOiAnY29zdHJ1aXNjaSByaWNlcmNhJyxcclxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgcmVzdG9yZUZvY3VzOiB0cnVlLFxyXG4gICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlLFxyXG4gICAgICBtaW5XaWR0aDogJzM3NXB4JyxcclxuICAgICAgbWF4V2lkdGg6ICc2MDBweCcsXHJcbiAgICAgIHdpZHRoOiAnOTklJ1xyXG4gICAgfSk7XHJcbiAgICBkLmNvbXBvbmVudEluc3RhbmNlLmRvbmVcclxuICAgICAgLnN1YnNjcmliZSgocjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMudGV4dCA9IHIucXVlcnk7XHJcblxyXG4gICAgICAgIC8vIEZpbmlzaGVkXHJcbiAgICAgICAgZC5jbG9zZSgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFN1Ym1pdCBzZWFyY2hcclxuICAgKi9cclxuICBvaygpIHtcclxuICAgIHRoaXMub2tCdXR0b24uZm9jdXMoKTtcclxuICAgIGlmICh0aGlzLnBhcmFtcy50ZXh0KVxyXG4gICAgICB0aGlzLnBhcmFtcy50ZXh0ID0gU2VhcmNoVXRpbHMubm9ybWFsaXplVGV4dFF1ZXJ5KHRoaXMucGFyYW1zLnRleHQpO1xyXG4gICAgaWYgKHRoaXMuaW50ZXJ2YWwpIHtcclxuICAgICAgdGhpcy5wYXJhbXMuZnJvbURhdGUgPSB0aGlzLmludGVydmFsLmZyb207XHJcbiAgICAgIHRoaXMucGFyYW1zLnRvRGF0ZSA9IHRoaXMuaW50ZXJ2YWwudG87XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zb3VyY2VJbnRlcnZhbCkge1xyXG4gICAgICB0aGlzLnBhcmFtcy5zb3VyY2VGcm9tRGF0ZSA9IHRoaXMuc291cmNlSW50ZXJ2YWwuZnJvbTtcclxuICAgICAgdGhpcy5wYXJhbXMuc291cmNlVG9EYXRlID0gdGhpcy5zb3VyY2VJbnRlcnZhbC50bztcclxuICAgIH1cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAvLyBOb3RpZnlcclxuICAgICAgdGhpcy5kb25lLmVtaXQodGhpcy5wYXJhbXMpO1xyXG4gICAgfSwgNTAwKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNlbGVjdCBhIHRheG9ub215IHRvcGljXHJcbiAgICovXHJcbiAgc2VsZWN0VGF4b25vbXkoKSB7XHJcbiAgICBpZiAoIXRoaXMuJGNsaXBwZXIubG9nZ2VkSW4pIHJldHVybjtcclxuICAgIGxldCBwYXJhbXMgPSBudWxsO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLnBhcmFtcy5tb2RlbCA9PT0gQ2xpcHBlckRlZmluaXRpb25zLkRNX0dVSURBIHx8XHJcbiAgICAgIHRoaXMucGFyYW1zLm1vZGVsID09PSBDbGlwcGVyRGVmaW5pdGlvbnMuRE1fR1VJREFfTk9STUFUSVZBIHx8XHJcbiAgICAgIHRoaXMucGFyYW1zLm1vZGVsID09PSBDbGlwcGVyRGVmaW5pdGlvbnMuRE1fU0NIRURBX0FERU1QSU1FTlRJXHJcbiAgICApIHtcclxuICAgICAgcGFyYW1zID0geyBtb2RlbDogQ2xpcHBlckRlZmluaXRpb25zLkRNX0dVSURBLCBjb3VudEl0ZW1zOiB0cnVlIH07XHJcbiAgICB9XHJcbiAgICB0aGlzLiRkaWFsb2cuYnVzeSgnQ2FyaWNhbWVudG8gaW4gY29yc28uLi4nKTtcclxuICAgIHRoaXMuJGNsaXBwZXIuZ2V0VGF4b25vbXkocGFyYW1zKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiByID0+IHtcclxuICAgICAgICAgIHRoaXMuJGRpYWxvZ1xyXG4gICAgICAgICAgICAuc2VsZWN0VHJlZShcclxuICAgICAgICAgICAgICB0aGlzLiRjbGlwcGVyLnRvTm9kZXMoci52YWx1ZS5zdWJGb2xkZXJzKSxcclxuICAgICAgICAgICAgICAnU2VsZXppb25hIHVuIGFyZ29tZW50bycsXHJcbiAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgICB0aGlzLnBhcmFtcy50YXhvbm9teU5vZGVcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuY29tcG9uZW50SW5zdGFuY2UuZG9uZS5zdWJzY3JpYmUociA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IG4gPSByLnNlbGVjdGVkSXRlbXNbMF0uYmFnO1xyXG4gICAgICAgICAgICAgIHRoaXMucGFyYW1zLnRheG9ub215ID0gbi5pZDtcclxuICAgICAgICAgICAgICB0aGlzLnBhcmFtcy50YXhvbm9teVBhdGggPSBuLnBhdGg7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYXJhbXMudGF4b25vbXlOb2RlID0gbi5uYW1lO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLiRkaWFsb2cuY2xlYXJCdXN5KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiPGgyIG1hdC1kaWFsb2ctdGl0bGU+UmljZXJjYTwvaDI+XHJcbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50PlxyXG4gIDxmb3JtIG5hbWU9XCJmb3JtXCIgI2Y9XCJuZ0Zvcm1cIiAoa2V5dXAuRW50ZXIpPVwiIWYuZm9ybS5pbnZhbGlkID8gb2soKSA6IG51bGxcIiBub3ZhbGlkYXRlPlxyXG4gICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiPlxyXG4gICAgICA8ZGl2IGZ4RmxleEFsaWduPVwiZW5kXCI+XHJcbiAgICAgICAgQGlmIChlbmFibGVSZWFkKSB7XHJcbjxkaXYgc3R5bGU9XCJwYWRkaW5nLWJvdHRvbToxMHB4XCI+XHJcbiAgICAgICAgICA8bWF0LWNoZWNrYm94IGNvbG9yPVwicHJpbWFyeVwiIG5hbWU9XCJzaG93VW5yZWFkRG9jdW1lbnRzT25seVwiIFsobmdNb2RlbCldPVwicGFyYW1zLnNob3dVbnJlYWREb2N1bWVudHNPbmx5XCI+XHJcbiAgICAgICAgICAgIE1vc3RyYSBzb2xvIG5vbiBsZXR0aTwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgIDwvZGl2PlxyXG59XHJcbiAgICAgICAgQGlmIChlbmFibGVDb21tZW50cykge1xyXG48ZGl2IHN0eWxlPVwicGFkZGluZy1ib3R0b206MTBweFwiPlxyXG4gICAgICAgICAgPG1hdC1jaGVja2JveCBjb2xvcj1cInByaW1hcnlcIiBuYW1lPVwic2hvd0NvbW1lbnRlZERvY3VtZW50c09ubHlcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBhcmFtcy5zaG93Q29tbWVudGVkRG9jdW1lbnRzT25seVwiPlxyXG4gICAgICAgICAgICBNb3N0cmEgc29sbyBub3JtZSBjb24gY29tbWVudGk8L21hdC1jaGVja2JveD5cclxuICAgICAgICA8L2Rpdj5cclxufVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgQGlmIChlbmFibGVNb2RlbCkge1xyXG48bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5UaXBvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1zZWxlY3QgWyhuZ01vZGVsKV09XCJwYXJhbXMuc2VjdG9yXCIgI3NlY3Rvcj1cIm5nTW9kZWxcIiBuYW1lPVwibW9kZWxcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cInNlY3RvckNoYW5nZWQoKVwiPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24+VHV0dGk8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICBAZm9yIChtIG9mIG1vZGVsczsgdHJhY2sgbSkge1xyXG4gIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJtLmlkXCI+XHJcbiAgICAgICAgICAgIHt7bS5uYW1lfX1cclxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxufVxyXG4gICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxufVxyXG4gICAgICBAaWYgKGVuYWJsZVNlY3Rvcikge1xyXG48bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPG1hdC1sYWJlbD5TZXR0b3JlPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgPG1hdC1zZWxlY3QgWyhuZ01vZGVsKV09XCJwYXJhbXMuc2VjdG9yXCIgI3NlY3Rvcj1cIm5nTW9kZWxcIiBuYW1lPVwic2VjdG9yXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJzZWN0b3JDaGFuZ2VkKClcIj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uPlR1dHRpPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgQGZvciAocyBvZiBzZWN0b3JzOyB0cmFjayBzKSB7XHJcbiAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cInMuaWRcIj5cclxuICAgICAgICAgICAgQGlmIChzLmdyb3VwID09ICdBJykge1xyXG48c3Bhbj4mbmJzcDsmbmJzcDs8L3NwYW4+XHJcbn1cclxuICAgICAgICAgICAge3tzLm5hbWV9fVxyXG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG59XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG59XHJcbiAgICAgIEBpZiAoZW5hYmxlQXV0aG9yICYmIGF1dGhvcnMgJiYgYXV0aG9ycy5sZW5ndGggPiAwKSB7XHJcbjxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8bWF0LWxhYmVsPkF1dG9yZTwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwicGFyYW1zLmF1dGhvclwiICNzZWN0b3I9XCJuZ01vZGVsXCIgbmFtZT1cImF1dGhvclwiPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24+VHV0dGk8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICBAZm9yIChhIG9mIGF1dGhvcnM7IHRyYWNrIGEpIHtcclxuICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiYS5hdXRob3JJZFwiPlxyXG4gICAgICAgICAgICB7e2EuYXV0aG9yRGVzY3JpcHRpb259fVxyXG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG59XHJcbiAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG59XHJcbiAgICAgIEBpZiAoZW5hYmxlVG9waWMgJiYgdG9waWNzICYmIHRvcGljcy5sZW5ndGggPiAwKSB7XHJcbjxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8bWF0LWxhYmVsPkFyZ29tZW50bzwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwicGFyYW1zLnRvcGljXCIgI3RvcGljPVwibmdNb2RlbFwiIG5hbWU9XCJ0b3BpY1wiPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24+VHV0dGk8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICBAZm9yICh0IG9mIHRvcGljczsgdHJhY2sgdCkge1xyXG4gIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJ0LnZhbHVlXCIgW21hdFRvb2x0aXBdPVwidC5uYW1lXCI+XHJcbiAgICAgICAgICAgIDxkaXYgW2lubmVySHRtbF09XCJ0LnRpdGxlIHwgc2FmZUh0bWxcIj48L2Rpdj5cclxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxufVxyXG4gICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxufVxyXG4gICAgICBAaWYgKGVuYWJsZVRheG9ub215KSB7XHJcbjxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8bWF0LWxhYmVsPkFyZ29tZW50bzwvbWF0LWxhYmVsPlxyXG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInBhcmFtcy50YXhvbm9teU5vZGVcIiByZWFkb25seSBuYW1lPVwidGF4b25vbXlcIiAvPlxyXG4gICAgICAgIEBpZiAocGFyYW1zLnRheG9ub215Tm9kZSkge1xyXG48YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0LWljb24tYnV0dG9uIG1hdFN1ZmZpeCBhcmlhLWxhYmVsPVwiQXp6ZXJhXCJcclxuICAgICAgICAgIChjbGljayk9XCJwYXJhbXMudGF4b25vbXkgPSBudWxsOyBwYXJhbXMudGF4b25vbXlOb2RlID0gbnVsbDsgcGFyYW1zLnRheG9ub215UGF0aCA9IG51bGxcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbn1cclxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gbWF0U3VmZml4IGFyaWEtbGFiZWw9XCJTY2VnbGlcIiBtYXRUb29sdGlwPVwiU2NlZ2xpXCJcclxuICAgICAgICAgIChjbGljayk9XCJzZWxlY3RUYXhvbm9teSgpXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24+c2VhcmNoPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICBAaWYgKHBhcmFtcy50YXhvbm9teU5vZGUpIHtcclxuPG1hdC1oaW50IGFsaWduPVwic3RhcnRcIiBjbGFzcz1cInRydW5jYXRlZCBsb3dlcmNhc2VcIj5cclxuICAgICAgICAgIDxkaXY+e3twYXJhbXMudGF4b25vbXlQYXRofX08L2Rpdj5cclxuICAgICAgICA8L21hdC1oaW50PlxyXG59XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbn1cclxuICAgICAgQGlmIChlbmFibGVUeXBlKSB7XHJcbjxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8bWF0LWxhYmVsPlRpcG88L21hdC1sYWJlbD5cclxuICAgICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cInBhcmFtcy50eXBlXCIgI3RvcGljPVwibmdNb2RlbFwiIG5hbWU9XCJ0eXBlXCI+XHJcbiAgICAgICAgICA8bWF0LW9wdGlvbj5UdXR0aTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgIEBmb3IgKHQgb2YgdHlwZXM7IHRyYWNrIHQpIHtcclxuICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwidC5kb2N1bWVudFR5cGVJZFwiIFttYXRUb29sdGlwXT1cInQuZG9jdW1lbnRUeXBlRGVzY3JpcHRpb25cIj5cclxuICAgICAgICAgICAge3t0LmRvY3VtZW50VHlwZURlc2NyaXB0aW9ufX1cclxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxufVxyXG4gICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxufVxyXG4gICAgICBAaWYgKGVuYWJsZVRleHQpIHtcclxuPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDxtYXQtbGFiZWw+VGVzdG88L21hdC1sYWJlbD5cclxuICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbmFtZT1cInRleHRcIiAjdGV4dCBbKG5nTW9kZWwpXT1cInBhcmFtcy50ZXh0XCIgbWF4bGVuZ3RoPVwiMjAwXCIgLz5cclxuICAgICAgICBAaWYgKHBhcmFtcy50ZXh0KSB7XHJcbjxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXQtaWNvbi1idXR0b24gbWF0U3VmZml4IGFyaWEtbGFiZWw9XCJBenplcmFcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInBhcmFtcy50ZXh0ID0gbnVsbFwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxufVxyXG4gICAgICAgIDxidXR0b24gZnhIaWRlLnhzIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gbWF0U3VmZml4IGFyaWEtbGFiZWw9XCJDb21wb25pXCIgbWF0VG9vbHRpcD1cIkNvbXBvbmlcIlxyXG4gICAgICAgICAgKGNsaWNrKT1cInRleHQuZm9jdXMoKTsgY29tcG9zZSgpXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24+YnVpbGQ8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDxidXR0b24gZnhIaWRlLnhzIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gbWF0U3VmZml4IGFyaWEtbGFiZWw9XCJJbmZvcm1hemlvbmlcIlxyXG4gICAgICAgICAgbWF0VG9vbHRpcD1cIkNvbWUgZWZmZXR0dWFyZSBsYSByaWNlcmNhIGluIHRlc3RvIGxpYmVyb1wiIChjbGljayk9XCJ0ZXh0LmZvY3VzKCk7IGhlbHAoKVwiPlxyXG4gICAgICAgICAgPG1hdC1pY29uPmhlbHBfb3V0bGluZTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbn1cclxuICAgICAgQGlmIChlbmFibGVUZXh0KSB7XHJcbjxkaXYgc3R5bGU9XCJwYWRkaW5nLWJvdHRvbToxMHB4XCI+XHJcbiAgICAgICAgPG1hdC1jaGVja2JveCBjb2xvcj1cInByaW1hcnlcIiBbZGlzYWJsZWRdPVwiIXBhcmFtcy50ZXh0XCIgbmFtZT1cInRpdGxlT25seVwiXHJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInBhcmFtcy50aXRsZU9ubHlcIj5DZXJjYVxyXG4gICAgICAgICAgc29sbyBuZWwgdGl0b2xvPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgIDwvZGl2PlxyXG59XHJcbiAgICAgIEBpZiAoZW5hYmxlUHVibGljYXRpb24pIHtcclxuPGRpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPlB1YmJsaWNhemlvbmU8L2Rpdj5cclxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93IHdyYXBcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlblwiIGZ4RmlsbD5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCI0OVwiIGZ4RmxleC54cz1cIjEwMFwiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPkludGVydmFsbG88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPG1hdC1kYXRlLXJhbmdlLWlucHV0IFtyYW5nZVBpY2tlcl09XCJwaWNrZXIxXCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IG1hdFN0YXJ0RGF0ZSBbKG5nTW9kZWwpXT1cImludGVydmFsLmZyb21cIiBbZGF0ZUludGVydmFsQ2hhbmdlXT1cImludGVydmFsXCIgI3JhbmdlRnJvbTE9XCJuZ01vZGVsXCJcclxuICAgICAgICAgICAgICAgIG5hbWU9XCJyYW5nZUZyb20xXCIgcGxhY2Vob2xkZXI9XCJEYSBkYXRhXCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IG1hdEVuZERhdGUgWyhuZ01vZGVsKV09XCJpbnRlcnZhbC50b1wiIFtkYXRlSW50ZXJ2YWxDaGFuZ2VdPVwiaW50ZXJ2YWxcIiBbZW5kXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgI3JhbmdlVG8xPVwibmdNb2RlbFwiIG5hbWU9XCJyYW5nZVRvMVwiIHBsYWNlaG9sZGVyPVwiQSBkYXRhXCI+XHJcbiAgICAgICAgICAgIDwvbWF0LWRhdGUtcmFuZ2UtaW5wdXQ+XHJcbiAgICAgICAgICAgIEBpZiAoaW50ZXJ2YWwuZnJvbSB8fCBpbnRlcnZhbC50bykge1xyXG48YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJQdWxpc2NpXCIgKGNsaWNrKT1cImludGVydmFsLmNsZWFyKClcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxufVxyXG4gICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cInBpY2tlcjFcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICAgICAgICAgICAgPG1hdC1kYXRlLXJhbmdlLXBpY2tlciAjcGlja2VyMT48L21hdC1kYXRlLXJhbmdlLXBpY2tlcj5cclxuICAgICAgICAgICAgQGlmIChyYW5nZUZyb20xLmludmFsaWQgfHwgcmFuZ2VUbzEuaW52YWxpZCkge1xyXG48bWF0LWVycm9yPkludGVydmFsbG8gbm9uIHZhbGlkby48L21hdC1lcnJvcj5cclxufVxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbn1cclxuICAgICAgQGlmIChlbmFibGVEb2N1bWVudCkge1xyXG48ZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uLXRpdGxlXCI+RXN0cmVtaSBkb2N1bWVudG88L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvblwiPlxyXG4gICAgICAgICAgPGRpdiBmeExheW91dD1cInJvdyB3cmFwXCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW5cIiBmeEZpbGw+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCIzMFwiIGZ4RmxleC54cz1cIjEwMFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+TnVtLiBkb2MuPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFsobmdNb2RlbCldPVwicGFyYW1zLm51bWJlclwiICNudW1iZXI9XCJuZ01vZGVsXCIgbmFtZT1cIm51bWJlclwiIG1heGxlbmd0aD1cIjEwXCIgLz5cclxuICAgICAgICAgICAgICBAaWYgKHBhcmFtcy5udW1iZXIpIHtcclxuPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlB1bGlzY2lcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInBhcmFtcy5udW1iZXIgPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG59XHJcbiAgICAgICAgICAgICAgPG1hdC1oaW50PlNlbnphIHNwYXppPC9tYXQtaGludD5cclxuICAgICAgICAgICAgICBAaWYgKG51bWJlci5pbnZhbGlkKSB7XHJcbjxtYXQtZXJyb3I+U3Bhemkgbm9uIHZhbGlkaS48L21hdC1lcnJvcj5cclxufVxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiNjhcIiBmeEZsZXgueHM9XCIxMDBcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPkludGVydmFsbG88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICA8bWF0LWRhdGUtcmFuZ2UtaW5wdXQgW3JhbmdlUGlja2VyXT1cInBpY2tlcjJcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRTdGFydERhdGUgWyhuZ01vZGVsKV09XCJpbnRlcnZhbC5mcm9tXCIgW2RhdGVJbnRlcnZhbENoYW5nZV09XCJpbnRlcnZhbFwiICNyYW5nZUZyb20yPVwibmdNb2RlbFwiXHJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJyYW5nZUZyb20yXCIgcGxhY2Vob2xkZXI9XCJEYSBkYXRhXCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0RW5kRGF0ZSBbKG5nTW9kZWwpXT1cImludGVydmFsLnRvXCIgW2RhdGVJbnRlcnZhbENoYW5nZV09XCJpbnRlcnZhbFwiIFtlbmRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICNyYW5nZVRvMj1cIm5nTW9kZWxcIiBuYW1lPVwicmFuZ2VUbzJcIiBwbGFjZWhvbGRlcj1cIkEgZGF0YVwiPlxyXG4gICAgICAgICAgICAgIDwvbWF0LWRhdGUtcmFuZ2UtaW5wdXQ+XHJcbiAgICAgICAgICAgICAgQGlmIChpbnRlcnZhbC5mcm9tIHx8IGludGVydmFsLnRvKSB7XHJcbjxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiUHVsaXNjaVwiIChjbGljayk9XCJpbnRlcnZhbC5jbGVhcigpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG59XHJcbiAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJwaWNrZXIyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgICAgPG1hdC1kYXRlLXJhbmdlLXBpY2tlciAjcGlja2VyMj48L21hdC1kYXRlLXJhbmdlLXBpY2tlcj5cclxuICAgICAgICAgICAgICBAaWYgKHJhbmdlRnJvbTIuaW52YWxpZCB8fCByYW5nZVRvMi5pbnZhbGlkKSB7XHJcbjxtYXQtZXJyb3I+SW50ZXJ2YWxsbyBub24gdmFsaWRvLjwvbWF0LWVycm9yPlxyXG59XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbn1cclxuICAgICAgQGlmIChlbmFibGVTb3VyY2UpIHtcclxuPGRpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi10aXRsZVwiPkZvbnRlPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb25cIj5cclxuICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3cgd3JhcFwiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuXCIgZnhGaWxsPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiMzBcIiBmeEZsZXgueHM9XCIxMDBcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPk51bS4gZG9jLjwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInBhcmFtcy5zb3VyY2VOdW1iZXJcIiAjc291cmNlTnVtYmVyPVwibmdNb2RlbFwiIG5hbWU9XCJzb3VyY2VOdW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMTBcIiAvPlxyXG4gICAgICAgICAgICAgIEBpZiAocGFyYW1zLnNvdXJjZU51bWJlcikge1xyXG48YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlB1bGlzY2lcIiAoY2xpY2spPVwicGFyYW1zLnNvdXJjZU51bWJlciA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbn1cclxuICAgICAgICAgICAgICA8bWF0LWhpbnQ+U2VuemEgc3Bhemk8L21hdC1oaW50PlxyXG4gICAgICAgICAgICAgIEBpZiAoc291cmNlTnVtYmVyLmludmFsaWQpIHtcclxuPG1hdC1lcnJvcj5TcGF6aSBub24gdmFsaWRpLjwvbWF0LWVycm9yPlxyXG59XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCI2OFwiIGZ4RmxleC54cz1cIjEwMFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+SW50ZXJ2YWxsbzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxtYXQtZGF0ZS1yYW5nZS1pbnB1dCBbcmFuZ2VQaWNrZXJdPVwicGlja2VyM1wiPlxyXG4gICAgICAgICAgICAgICAgPGlucHV0IG1hdFN0YXJ0RGF0ZSBbKG5nTW9kZWwpXT1cInNvdXJjZUludGVydmFsLmZyb21cIiBbZGF0ZUludGVydmFsQ2hhbmdlXT1cInNvdXJjZUludGVydmFsXCJcclxuICAgICAgICAgICAgICAgICAgI3JhbmdlRnJvbTM9XCJuZ01vZGVsXCIgbmFtZT1cInJhbmdlRnJvbTNcIiBwbGFjZWhvbGRlcj1cIkRhIGRhdGFcIj5cclxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRFbmREYXRlIFsobmdNb2RlbCldPVwic291cmNlSW50ZXJ2YWwudG9cIiBbZGF0ZUludGVydmFsQ2hhbmdlXT1cInNvdXJjZUludGVydmFsXCIgW2VuZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgI3JhbmdlVG8zPVwibmdNb2RlbFwiIG5hbWU9XCJyYW5nZVRvM1wiIHBsYWNlaG9sZGVyPVwiQSBkYXRhXCI+XHJcbiAgICAgICAgICAgICAgPC9tYXQtZGF0ZS1yYW5nZS1pbnB1dD5cclxuICAgICAgICAgICAgICBAaWYgKHNvdXJjZUludGVydmFsLmZyb20gfHwgc291cmNlSW50ZXJ2YWwudG8pIHtcclxuPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeFxyXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJQdWxpc2NpXCIgKGNsaWNrKT1cInNvdXJjZUludGVydmFsLmNsZWFyKClcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbn1cclxuICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cInBpY2tlcjNcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICAgICAgICAgICAgICA8bWF0LWRhdGUtcmFuZ2UtcGlja2VyICNwaWNrZXIzPjwvbWF0LWRhdGUtcmFuZ2UtcGlja2VyPlxyXG4gICAgICAgICAgICAgIEBpZiAocmFuZ2VGcm9tMy5pbnZhbGlkIHx8IHJhbmdlVG8zLmludmFsaWQpIHtcclxuPG1hdC1lcnJvcj5JbnRlcnZhbGxvIG5vbiB2YWxpZG8uPC9tYXQtZXJyb3I+XHJcbn1cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBmeExheW91dD1cInJvdyB3cmFwXCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW5cIiBmeEZpbGw+XHJcbiAgICAgICAgICAgIEBpZiAoc291cmNlcyAmJiBzb3VyY2VzLmxlbmd0aCA+IDApIHtcclxuPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD1cIjEwMFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+VGlwbyBmb250ZTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwicGFyYW1zLnNvdXJjZVwiICNzZWN0b3I9XCJuZ01vZGVsXCIgbmFtZT1cInNvdXJjZVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24+VHV0dGk8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICBAZm9yIChzIG9mIHNvdXJjZXM7IHRyYWNrIHMpIHtcclxuICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwicy5pZFwiPlxyXG4gICAgICAgICAgICAgICAgICB7e3MubmFtZX19XHJcbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbn1cclxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbn1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxufVxyXG4gICAgICBAaWYgKGVuYWJsZUNoYW5nZXMpIHtcclxuPGRpdj5cclxuICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93IHdyYXBcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlblwiIGZ4RmlsbD5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCI0OVwiIGZ4RmxleC54cz1cIjEwMFwiPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPk1vdGl2bzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cInBhcmFtcy5yZWFzb25cIiAjdG9waWM9XCJuZ01vZGVsXCIgbmFtZT1cInJlYXNvblwiPlxyXG4gICAgICAgICAgICAgIEBmb3IgKHQgb2YgdHlwZXM7IHRyYWNrIHQpIHtcclxuICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwidC52YWx1ZVwiIFttYXRUb29sdGlwXT1cInQubmFtZVwiPlxyXG4gICAgICAgICAgICAgICAge3t0Lm5hbWV9fVxyXG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxufVxyXG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi10aXRsZSBtYXQtYm9keS0zXCI+RG9jdW1lbnRvIG1vZGlmaWNhdG88L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvblwiPlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJzbWFsbFwiIHN0eWxlPVwibGluZS1oZWlnaHQ6IDEycHhcIj48aT5TYXJhbm5vIHZpc3VhbGl6emF0aSBpIGRvY3VtZW50aSBtb2RpZmljYW50aS48L2k+XHJcbiAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93IHdyYXBcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlblwiIGZ4RmlsbD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD1cIjIzXCIgZnhGbGV4LnhzPVwiMTAwXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD5OdW0uIGRvYy48L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJwYXJhbXMuY2hhbmdlZE51bWJlclwiICNjaGFuZ2VkTnVtYmVyPVwibmdNb2RlbFwiIG5hbWU9XCJjaGFuZ2VkTnVtYmVyXCJcclxuICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjEwXCIgLz5cclxuICAgICAgICAgICAgICBAaWYgKHBhcmFtcy5jaGFuZ2VkTnVtYmVyKSB7XHJcbjxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiUHVsaXNjaVwiIChjbGljayk9XCJwYXJhbXMuY2hhbmdlZE51bWJlciA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbn1cclxuICAgICAgICAgICAgICA8bWF0LWhpbnQ+U2VuemEgc3Bhemk8L21hdC1oaW50PlxyXG4gICAgICAgICAgICAgIEBpZiAoY2hhbmdlZE51bWJlci5pbnZhbGlkKSB7XHJcbjxtYXQtZXJyb3I+U3Bhemkgbm9uIHZhbGlkaS48L21hdC1lcnJvcj5cclxufVxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiMjNcIiBmeEZsZXgueHM9XCIxMDBcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPkFubm88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIG1pbj1cIjE3NTBcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInBhcmFtcy5jaGFuZ2VkWWVhclwiICNjaGFuZ2VkWWVhcj1cIm5nTW9kZWxcIlxyXG4gICAgICAgICAgICAgICAgbmFtZT1cImNoYW5nZWRZZWFyXCIgbWF4bGVuZ3RoPVwiNFwiIC8+XHJcbiAgICAgICAgICAgICAgQGlmIChwYXJhbXMuY2hhbmdlZFllYXIpIHtcclxuPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJQdWxpc2NpXCIgKGNsaWNrKT1cInBhcmFtcy5jaGFuZ2VkWWVhciA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbn1cclxuICAgICAgICAgICAgICA8bWF0LWhpbnQ+RGFsIDE3NTA8L21hdC1oaW50PlxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiNTFcIiBmeEZsZXgueHM9XCIxMDBcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPlRpdG9sbzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInBhcmFtcy5jaGFuZ2VkVGl0bGVcIiAjY2hhbmdlZFRpdGxlPVwibmdNb2RlbFwiIG5hbWU9XCJjaGFuZ2VkVGl0bGVcIlxyXG4gICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMTBcIiAvPlxyXG4gICAgICAgICAgICAgIEBpZiAocGFyYW1zLmNoYW5nZWRUaXRsZSkge1xyXG48YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlB1bGlzY2lcIiAoY2xpY2spPVwicGFyYW1zLmNoYW5nZWRUaXRsZSA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbn1cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi10aXRsZSBcIj5Eb2N1bWVudG8gbW9kaWZpY2FudGU8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvblwiPlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJzbWFsbFwiIHN0eWxlPVwibGluZS1oZWlnaHQ6IDEycHhcIj5cclxuICAgICAgICAgICAgPGk+U2FyYW5ubyB2aXN1YWxpenphdGkgaSBkb2N1bWVudGkgbW9kaWZpY2F0aSwgb3BwdXJlIHNvbG8gaSBtb2RpZmljYW50aSBzZSDDqCBzdGF0byBzcGVjaWZpY2F0b1xyXG4gICAgICAgICAgICAgIGwnZXN0cmVtbyBkZWwgZG9jdW1lbnRvIG1vZGlmaWNhdG8uPC9pPlxyXG4gICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgPGRpdiBmeExheW91dD1cInJvdyB3cmFwXCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW5cIiBmeEZpbGw+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCIyM1wiIGZ4RmxleC54cz1cIjEwMFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+TnVtLiBkb2MuPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFsobmdNb2RlbCldPVwicGFyYW1zLm1vZGlmaWVyTnVtYmVyXCIgI21vZGlmaWVyTnVtYmVyPVwibmdNb2RlbFwiIG5hbWU9XCJtb2RpZmllck51bWJlclwiXHJcbiAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxMFwiIC8+XHJcbiAgICAgICAgICAgICAgQGlmIChwYXJhbXMubW9kaWZpZXJOdW1iZXIpIHtcclxuPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b25cclxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJQdWxpc2NpXCIgKGNsaWNrKT1cInBhcmFtcy5tb2RpZmllck51bWJlciA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbn1cclxuICAgICAgICAgICAgICA8bWF0LWhpbnQ+U2VuemEgc3Bhemk8L21hdC1oaW50PlxyXG4gICAgICAgICAgICAgIEBpZiAobW9kaWZpZXJOdW1iZXIuaW52YWxpZCkge1xyXG48bWF0LWVycm9yPlNwYXppIG5vbiB2YWxpZGkuPC9tYXQtZXJyb3I+XHJcbn1cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD1cIjIzXCIgZnhGbGV4LnhzPVwiMTAwXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD5Bbm5vPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBtaW49MTc1MCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInBhcmFtcy5tb2RpZmllclllYXJcIiAjbW9kaWZpZXJZZWFyPVwibmdNb2RlbFwiXHJcbiAgICAgICAgICAgICAgICBuYW1lPVwibW9kaWZpZXJZZWFyXCIgbWF4bGVuZ3RoPVwiNFwiIC8+XHJcbiAgICAgICAgICAgICAgQGlmIChwYXJhbXMubW9kaWZpZXJZZWFyKSB7XHJcbjxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPVwiUHVsaXNjaVwiIChjbGljayk9XCJwYXJhbXMubW9kaWZpZXJZZWFyID0gbnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxufVxyXG4gICAgICAgICAgICAgIDxtYXQtaGludD5EYWwgMTc1MDwvbWF0LWhpbnQ+XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCI1MVwiIGZ4RmxleC54cz1cIjEwMFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+VGl0b2xvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFsobmdNb2RlbCldPVwicGFyYW1zLm1vZGlmaWVyVGl0bGVcIiAjbW9kaWZpZXJUaXRsZT1cIm5nTW9kZWxcIiBuYW1lPVwibW9kaWZpZXJUaXRsZVwiXHJcbiAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxMFwiIC8+XHJcbiAgICAgICAgICAgICAgQGlmIChwYXJhbXMubW9kaWZpZXJUaXRsZSkge1xyXG48YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIlB1bGlzY2lcIiAoY2xpY2spPVwicGFyYW1zLm1vZGlmaWVyVGl0bGUgPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG59XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbn1cclxuICAgIDwvZGl2PlxyXG4gIDwvZm9ybT5cclxuPC9kaXY+XHJcbjxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zPlxyXG4gIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjEwcHhcIiBmeEZpbGw+XHJcbiAgICA8ZGl2IGZ4RmxleD1cIjMwXCI+XHJcbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1idXR0b24gKGNsaWNrKT1cImNsZWFyKClcIiBjb2xvcj1cInByaW1hcnlcIj5QVUxJU0NJPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgZnhGbGV4PVwiNzBcIiBmeExheW91dEFsaWduPVwiZW5kXCI+XHJcbiAgICAgIDxidXR0b24gbWF0LWZsYXQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiICNva0J1dHRvbiBbZGlzYWJsZWRdPVwiZi5mb3JtLmludmFsaWRcIiAoY2xpY2spPVwib2soKVwiPlRST1ZBPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiBbbWF0LWRpYWxvZy1jbG9zZV09XCJ0cnVlXCIgY29sb3I9XCJwcmltYXJ5XCI+Q0hJVURJPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+Il19
|
|
337
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWRpYWxvZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvY2xpcHBlci51aS91aS9zZWFyY2gtZGlhbG9nL3NlYXJjaC1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvc2VhcmNoLWRpYWxvZy9zZWFyY2gtZGlhbG9nLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFxQixNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvSCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsK0NBQStDLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwSCxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMvSCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVB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Q0FBQyxVQUFVLENBQUMsV0FBVyxLQUFLLFFBQVEsRUFBRSxDQUFDO2dCQUM3QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO2dCQUM1QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO2dCQUM1QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0UsQ0FBQztpQkFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7Z0JBQ2xELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO2dCQUM1QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztnQkFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFR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SSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7d0JBQ2xELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO3dCQUM1QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQzt3QkFDeEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7d0JBQ2hELElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO3dCQUM1QyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQzNFLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO3dCQUM5QyxNQUFNO29CQUNSLEtBQUssYUFBYSxDQUFDLDJCQUEyQjt3QkFDNUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7d0JBQ3hELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO3dCQUMxRCxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQzt3QkFDdEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7d0JBQ3hELElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDO3dCQUM1RCxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFD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QXNCO3dCQUN0QixZQUFZO3FCQUNiOzhCQUdzQixRQUFRO3NCQUE5QixTQUFTO3VCQUFDLFVBQVU7Z0JBQ1gsSUFBSTtzQkFBYixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XHJcbmltcG9ydCB7IE1hdE9wdGlvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xyXG5pbXBvcnQgeyBNQVRfREFURVBJQ0tFUl9TQ1JPTExfU1RSQVRFR1lfRkFDVE9SWV9QUk9WSURFUiwgTWF0RGF0ZXBpY2tlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xyXG5pbXBvcnQgeyBNQVRfRElBTE9HX0RBVEEsIE1hdERpYWxvZ0FjdGlvbnMsIE1hdERpYWxvZ0Nsb3NlLCBNYXREaWFsb2dDb250ZW50LCBNYXREaWFsb2dUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IE1hdEV4cGFuc2lvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2V4cGFuc2lvbic7XHJcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xyXG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XHJcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5pbXBvcnQgeyBNYXRUb29sdGlwTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdG9vbHRpcCc7XHJcbmltcG9ydCB7XHJcbiAgQ2xpcHBlckF1dGhvcnMsXHJcbiAgQ2xpcHBlckNoYW5uZWxzLCBDbGlwcGVyTW9kdWxlLFxyXG4gIENsaXBwZXJSZWdpb25zLFxyXG4gIENsaXBwZXJTZWFyY2hQYXJhbXMsXHJcbiAgQ2xpcHBlclNlYXJjaFV0aWxzLCBDbGlwcGVyU2VjdG9yVHlwZXMsIENsaXBwZXJTZWN0b3JzLCBDbGlwcGVyU2VydmljZSwgU2VjdG9ySW5mb1xyXG59IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY2xpcHBlci5jb21tb24nO1xyXG5pbXBvcnQgeyBEYXRlSW50ZXJ2YWwsIERhdGVJbnRlcnZhbENoYW5nZURpcmVjdGl2ZSwgTmFtZVZhbHVlSXRlbSwgU2FmZUh0bWxQaXBlLCBTeXN0ZW1VdGlscyB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY29yZSc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL3VpJztcclxuaW1wb3J0IHsgRXh0ZW5kZWRNb2R1bGUgfSBmcm9tICdAbmdicmFja2V0L25neC1sYXlvdXQvZXh0ZW5kZWQnO1xyXG5pbXBvcnQgeyBGbGV4TW9kdWxlIH0gZnJvbSAnQG5nYnJhY2tldC9uZ3gtbGF5b3V0L2ZsZXgnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IENsaXBwZXJTZWFyY2hGcmVlVGV4dEhlbHBDb21wb25lbnQgfSBmcm9tICcuLi9zZWFyY2gtZnJlZS10ZXh0LWhlbHAvc2VhcmNoLWZyZWUtdGV4dC1oZWxwLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENsaXBwZXJTZWFyY2hGcmVlVGV4dFF1ZXJ5QnVpbGRlckNvbXBvbmVudCB9IGZyb20gJy4uL3NlYXJjaC1mcmVlLXRleHQtcXVlcnktYnVpbGRlci9zZWFyY2gtZnJlZS10ZXh0LXF1ZXJ5LWJ1aWxkZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xyXG5pbXBvcnQgeyBDaGlwc1NlbGVjdG9yQ29tcG9uZW50IH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy91aS5hcHBsaWNhdGlvbic7XHJcbmltcG9ydCB7IE1hdERpdmlkZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaXZpZGVyJztcclxuXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENsaXBwZXJTZWFyY2hEaWFsb2dEYXRhIGV4dGVuZHMgQ2xpcHBlclNlYXJjaFBhcmFtcyB7XHJcbiAgZGlzcGxheU1vZGU/OiAnbGF3cycgfCAnbmV3cycgfCAnbW9kdWxlJyB8ICdzaW1wbGUnO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBob3N0OiB7ICdCaW5kJzogU3lzdGVtVXRpbHMuZ2VuZXJhdGVVVUlEKCkgfSxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2VhcmNoLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2VhcmNoLWRpYWxvZy5jb21wb25lbnQuc2NzcyddLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgTUFUX0RBVEVQSUNLRVJfU0NST0xMX1NUUkFURUdZX0ZBQ1RPUllfUFJPVklERVJcclxuICBdLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgTWF0RGlhbG9nVGl0bGUsXHJcbiAgICBNYXREaWFsb2dDb250ZW50LFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBGbGV4TW9kdWxlLFxyXG4gICAgTWF0Q2hlY2tib3hNb2R1bGUsXHJcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXHJcbiAgICBNYXRFeHBhbnNpb25Nb2R1bGUsXHJcbiAgICBNYXRTZWxlY3RNb2R1bGUsXHJcbiAgICBNYXRPcHRpb25Nb2R1bGUsXHJcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxyXG4gICAgTWF0SW5wdXRNb2R1bGUsXHJcbiAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgTWF0TWVudU1vZHVsZSxcclxuICAgIEV4dGVuZGVkTW9kdWxlLFxyXG4gICAgTWF0RGF0ZXBpY2tlck1vZHVsZSxcclxuICAgIERhdGVJbnRlcnZhbENoYW5nZURpcmVjdGl2ZSxcclxuICAgIE1hdERpYWxvZ0FjdGlvbnMsXHJcbiAgICBNYXREaWFsb2dDbG9zZSxcclxuICAgIE1hdERpYWxvZ1RpdGxlLFxyXG4gICAgTWF0RGl2aWRlck1vZHVsZSxcclxuICAgIENoaXBzU2VsZWN0b3JDb21wb25lbnQsXHJcbiAgICBTYWZlSHRtbFBpcGUsXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENsaXBwZXJTZWFyY2hEaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZCgnb2tCdXR0b24nKSBva0J1dHRvbiE6IEhUTUxCdXR0b25FbGVtZW50O1xyXG4gIEBPdXRwdXQoKSBkb25lID0gbmV3IEV2ZW50RW1pdHRlcjxDbGlwcGVyU2VhcmNoUGFyYW1zPigpO1xyXG5cclxuICBwcml2YXRlIHVuc3Vic2NyaWJlOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICBwcml2YXRlIGNsaXBwZXJTZXJ2aWNlID0gaW5qZWN0KENsaXBwZXJTZXJ2aWNlKTtcclxuICBwcml2YXRlIGRpYWxvZ1NlcnZpY2UgPSBpbmplY3QoRGlhbG9nU2VydmljZSk7XHJcbiAgcHJvdGVjdGVkIGRpYWxvZ0RhdGE6IENsaXBwZXJTZWFyY2hEaWFsb2dEYXRhID0gaW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgPz8geyBkaXNwbGF5TW9kZTogJ3NpbXBsZScgfTtcclxuICBwcm90ZWN0ZWQgcGFyYW1zOiBDbGlwcGVyU2VhcmNoUGFyYW1zID0ge1xyXG4gICAgY2hhbm5lbHM6IFsuLi5DbGlwcGVyQ2hhbm5lbHNdLFxyXG4gICAgY291bnQ6IDE1XHJcbiAgfTtcclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbW9kdWxlc0VudW06IHR5cGVvZiBDbGlwcGVyTW9kdWxlID0gQ2xpcHBlck1vZHVsZTtcclxuICBwcm90ZWN0ZWQgc2VjdG9yczogU2VjdG9ySW5mb1tdID0gQ2xpcHBlclNlY3RvcnMuZmlsdGVyKChuKSA9PiBuLmdyb3VwID09PSAnUycpLm1hcCgobikgPT4ge1xyXG4gICAgcmV0dXJuIHsgbmFtZTogbi5zaG9ydE5hbWUgPz8gbi5uYW1lLCB2YWx1ZTogbi52YWx1ZSB9O1xyXG4gIH0pO1xyXG4gIHByb3RlY3RlZCBpc0xhd3MgPSAoKTogYm9vbGVhbiA9PiB7XHJcbiAgICByZXR1cm4gKHRoaXMuZGlhbG9nRGF0YS5kaXNwbGF5TW9kZSA9PT0gXCJsYXdzXCIgfHxcclxuICAgICAgKHRoaXMuZGlhbG9nRGF0YS5kaXNwbGF5TW9kZSA9PT0gXCJtb2R1bGVcIiAmJiB0aGlzLmRpYWxvZ0RhdGEubW9kdWxlID09PSBDbGlwcGVyTW9kdWxlLk5vcm1hdGl2YVZpZ2VudGUpIHx8XHJcbiAgICAgICh0aGlzLmRpYWxvZ0RhdGEuZGlzcGxheU1vZGUgPT09IFwibW9kdWxlXCIgJiYgdGhpcy5kaWFsb2dEYXRhLm1vZHVsZSA9PT0gQ2xpcHBlck1vZHVsZS5HYXp6ZXR0ZUJvbGxldHRpbmlFRm9udGlEaXZlcnNlKSk7XHJcbiAgfTtcclxuICBwcm90ZWN0ZWQgaXNOZXdzID0gKCk6IGJvb2xlYW4gPT4ge1xyXG4gICAgcmV0dXJuICh0aGlzLmRpYWxvZ0RhdGEuZGlzcGxheU1vZGUgPT09IFwibmV3c1wiIHx8XHJcbiAgICAgICh0aGlzLmRpYWxvZ0RhdGEuZGlzcGxheU1vZGUgPT09IFwibW9kdWxlXCIgJiYgdGhpcy5kaWFsb2dEYXRhLm1vZHVsZSA9PT0gQ2xpcHBlck1vZHVsZS5OZXdzKSB8fFxyXG4gICAgICAodGhpcy5kaWFsb2dEYXRhLmRpc3BsYXlNb2RlID09PSBcIm1vZHVsZVwiICYmIHRoaXMuZGlhbG9nRGF0YS5tb2R1bGUgPT09IENsaXBwZXJNb2R1bGUuQXBwcm9mb25kaW1lbnRpKSk7XHJcbiAgfTtcclxuICBwcm90ZWN0ZWQgaXNNb2R1bGUgPSAobW9kdWxlOiBDbGlwcGVyTW9kdWxlKTogYm9vbGVhbiA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5kaWFsb2dEYXRhLmRpc3BsYXlNb2RlID09PSBcIm1vZHVsZVwiICYmIHRoaXMuZGlhbG9nRGF0YS5tb2R1bGUgPT09IG1vZHVsZTtcclxuICB9XHJcbiAgcHJvdGVjdGVkIGhhc1JlZ2lvbnMgPSAoKTogYm9vbGVhbiA9PiB7XHJcbiAgICByZXR1cm4gKHRoaXMucGFyYW1zLnNlY3RvcnM/LmZpbHRlcihuID0+IG4udmFsdWUgPT09ICdMUicpLmxlbmd0aCA/PyAwKSA+IDA7XHJcbiAgfTtcclxuICBwcm90ZWN0ZWQgaGFzQXV0aG9yT3JUeXBlID0gKCk6IGJvb2xlYW4gPT4ge1xyXG4gICAgcmV0dXJuIHRoaXMucGFyYW1zLnNlY3RvcnM/Lmxlbmd0aCA9PT0gMSAmJiB0aGlzLmlzTGF3cygpO1xyXG4gIH07XHJcbiAgcHJvdGVjdGVkIHJlZ2lvbnM6IE5hbWVWYWx1ZUl0ZW08c3RyaW5nPltdID0gWy4uLkNsaXBwZXJSZWdpb25zXTtcclxuICBwcm90ZWN0ZWQgY2hhbm5lbHM6IE5hbWVWYWx1ZUl0ZW08c3RyaW5nPltdID0gWy4uLkNsaXBwZXJDaGFubmVsc107XHJcbiAgcHJvdGVjdGVkIHNvdXJjZXM6IE5hbWVWYWx1ZUl0ZW08c3RyaW5nPltdIHwgbnVsbCA9IFtdO1xyXG4gIHByb3RlY3RlZCBhdXRob3JzOiBOYW1lVmFsdWVJdGVtPHN0cmluZz5bXSB8IG51bGwgPSBbXTtcclxuICBwcm90ZWN0ZWQgdHlwZXM6IE5hbWVWYWx1ZUl0ZW08c3RyaW5nPltdIHwgbnVsbCA9IFtdO1xyXG4gIHByb3RlY3RlZCB0b3BpY3M6IE5hbWVWYWx1ZUl0ZW08c3RyaW5nPltdIHwgbnVsbCA9IFtdO1xyXG4gIGludGVydmFsOiBEYXRlSW50ZXJ2YWwgPSBuZXcgRGF0ZUludGVydmFsKCk7XHJcbiAgc291cmNlSW50ZXJ2YWw6IERhdGVJbnRlcnZhbCA9IG5ldyBEYXRlSW50ZXJ2YWwoKTtcclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kaWFsb2dEYXRhKSB7XHJcbiAgICAgIGlmICh0aGlzLmRpYWxvZ0RhdGEuZGlzcGxheU1vZGUgPT09ICdzaW1wbGUnKSB7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMudGV4dCA9IHRoaXMuZGlhbG9nRGF0YS50ZXh0O1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnRpdGxlT25seSA9IHRoaXMuZGlhbG9nRGF0YS50aXRsZU9ubHk7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMubnVtYmVyID0gdGhpcy5kaWFsb2dEYXRhLm51bWJlcjtcclxuICAgICAgICB0aGlzLnBhcmFtcy55ZWFyID0gdGhpcy5kaWFsb2dEYXRhLnllYXI7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMuZnJvbURhdGUgPSB0aGlzLmRpYWxvZ0RhdGEuZnJvbURhdGU7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMudG9EYXRlID0gdGhpcy5kaWFsb2dEYXRhLnRvRGF0ZTtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gbmV3IERhdGVJbnRlcnZhbCh0aGlzLnBhcmFtcy5mcm9tRGF0ZSwgdGhpcy5wYXJhbXMudG9EYXRlKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmlzTGF3cygpKSB7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMudGV4dCA9IHRoaXMuZGlhbG9nRGF0YS50ZXh0O1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnRpdGxlT25seSA9IHRoaXMuZGlhbG9nRGF0YS50aXRsZU9ubHk7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMubnVtYmVyID0gdGhpcy5kaWFsb2dEYXRhLm51bWJlcjtcclxuICAgICAgICB0aGlzLnBhcmFtcy55ZWFyID0gdGhpcy5kaWFsb2dEYXRhLnllYXI7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMuZnJvbURhdGUgPSB0aGlzLmRpYWxvZ0RhdGEuZnJvbURhdGU7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMudG9EYXRlID0gdGhpcy5kaWFsb2dEYXRhLnRvRGF0ZTtcclxuICAgICAgICB0aGlzLmludGVydmFsID0gbmV3IERhdGVJbnRlcnZhbCh0aGlzLnBhcmFtcy5mcm9tRGF0ZSwgdGhpcy5wYXJhbXMudG9EYXRlKTtcclxuICAgICAgICB0aGlzLnBhcmFtcy5zb3VyY2UgPSB0aGlzLmRpYWxvZ0RhdGEuc291cmNlO1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnNvdXJjZU51bWJlciA9IHRoaXMuZGlhbG9nRGF0YS5zb3VyY2VOdW1iZXI7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMuc291cmNlWWVhciA9IHRoaXMuZGlhbG9nRGF0YS5zb3VyY2VZZWFyO1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnNvdXJjZUZyb21EYXRlID0gdGhpcy5kaWFsb2dEYXRhLnNvdXJjZUZyb21EYXRlO1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnNvdXJjZVRvRGF0ZSA9IHRoaXMuZGlhbG9nRGF0YS5zb3VyY2VUb0RhdGU7XHJcbiAgICAgICAgdGhpcy5zb3VyY2VJbnRlcnZhbCA9IG5ldyBEYXRlSW50ZXJ2YWwodGhpcy5wYXJhbXMuc291cmNlRnJvbURhdGUsIHRoaXMucGFyYW1zLnNvdXJjZVRvRGF0ZSk7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMuc2VjdG9ycyA9IHRoaXMuZGlhbG9nRGF0YS5zZWN0b3JzO1xyXG4gICAgICAgIHRoaXMucGFyYW1zLmF1dGhvcnMgPSB0aGlzLmRpYWxvZ0RhdGEuYXV0aG9ycztcclxuICAgICAgICB0aGlzLnBhcmFtcy50eXBlID0gdGhpcy5kaWFsb2dEYXRhLnR5cGU7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMudG9waWMgPSB0aGlzLmRpYWxvZ0RhdGEudG9waWM7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMuc2hvd0NvbW1lbnRlZERvY3VtZW50c09ubHkgPSB0aGlzLmRpYWxvZ0RhdGEuc2hvd0NvbW1lbnRlZERvY3VtZW50c09ubHk7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pc05ld3MoKSkge1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnRleHQgPSB0aGlzLmRpYWxvZ0RhdGEudGV4dDtcclxuICAgICAgICB0aGlzLnBhcmFtcy50aXRsZU9ubHkgPSB0aGlzLmRpYWxvZ0RhdGEudGl0bGVPbmx5O1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnllYXIgPSB0aGlzLmRpYWxvZ0RhdGEueWVhcjtcclxuICAgICAgICB0aGlzLnBhcmFtcy5mcm9tRGF0ZSA9IHRoaXMuZGlhbG9nRGF0YS5mcm9tRGF0ZTtcclxuICAgICAgICB0aGlzLnBhcmFtcy50b0RhdGUgPSB0aGlzLmRpYWxvZ0RhdGEudG9EYXRlO1xyXG4gICAgICAgIHRoaXMuaW50ZXJ2YWwgPSBuZXcgRGF0ZUludGVydmFsKHRoaXMucGFyYW1zLmZyb21EYXRlLCB0aGlzLnBhcmFtcy50b0RhdGUpO1xyXG4gICAgICAgIHRoaXMucGFyYW1zLnNlY3RvcnMgPSB0aGlzLmRpYWxvZ0RhdGEuc2VjdG9ycztcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmRpYWxvZ0RhdGEuZGlzcGxheU1vZGUgPT09ICdtb2R1bGUnKSB7XHJcbiAgICAgICAgc3dpdGNoICh0aGlzLmRpYWxvZ0RhdGEubW9kdWxlKSB7XHJcbiAgICAgICAgICBjYXNlIENsaXBwZXJNb2R1bGUuR2l1cmlzcHJ1ZGVuemE6XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLnRleHQgPSB0aGlzLmRpYWxvZ0RhdGEudGV4dDtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbXMudGl0bGVPbmx5ID0gdGhpcy5kaWFsb2dEYXRhLnRpdGxlT25seTtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbXMubnVtYmVyID0gdGhpcy5kaWFsb2dEYXRhLm51bWJlcjtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbXMueWVhciA9IHRoaXMuZGlhbG9nRGF0YS55ZWFyO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy5mcm9tRGF0ZSA9IHRoaXMuZGlhbG9nRGF0YS5mcm9tRGF0ZTtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbXMudG9EYXRlID0gdGhpcy5kaWFsb2dEYXRhLnRvRGF0ZTtcclxuICAgICAgICAgICAgdGhpcy5pbnRlcnZhbCA9IG5ldyBEYXRlSW50ZXJ2YWwodGhpcy5wYXJhbXMuZnJvbURhdGUsIHRoaXMucGFyYW1zLnRvRGF0ZSk7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLnNlY3RvcnMgPSB0aGlzLmRpYWxvZ0RhdGEuc2VjdG9ycztcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIENsaXBwZXJNb2R1bGUuTW9kaWZpY2hlQWJyb2dhemlvbmlFUmludmlpOlxyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy5jaGFuZ2VSZWFzb24gPSB0aGlzLmRpYWxvZ0RhdGEuY2hhbmdlUmVhc29uO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy5jaGFuZ2VkTnVtYmVyID0gdGhpcy5kaWFsb2dEYXRhLmNoYW5nZWROdW1iZXI7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLmNoYW5nZWRZZWFyID0gdGhpcy5kaWFsb2dEYXRhLmNoYW5nZWRZZWFyO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy5jaGFuZ2VkVGl0bGUgPSB0aGlzLmRpYWxvZ0RhdGEuY2hhbmdlZFRpdGxlO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy5tb2RpZmllck51bWJlciA9IHRoaXMuZGlhbG9nRGF0YS5tb2RpZmllck51bWJlcjtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbXMubW9kaWZpZXJZZWFyID0gdGhpcy5kaWFsb2dEYXRhLm1vZGlmaWVyWWVhcjtcclxuICAgICAgICAgICAgdGhpcy5wYXJhbXMubW9kaWZpZXJUaXRsZSA9IHRoaXMuZGlhbG9nRGF0YS5tb2RpZmllclRpdGxlO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy5zZWN0b3JzID0gdGhpcy5kaWFsb2dEYXRhLnNlY3RvcnM7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgdGhpcy5wYXJhbXMudGV4dCA9IHRoaXMuZGlhbG9nRGF0YS50ZXh0O1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy50aXRsZU9ubHkgPSB0aGlzLmRpYWxvZ0RhdGEudGl0bGVPbmx5O1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy55ZWFyID0gdGhpcy5kaWFsb2dEYXRhLnllYXI7XHJcbiAgICAgICAgICAgIHRoaXMucGFyYW1zLmZyb21EYXRlID0gdGhpcy5kaWFsb2dEYXRhLmZyb21EYXRlO1xyXG4gICAgICAgICAgICB0aGlzLnBhcmFtcy50b0RhdGUgPSB0aGlzLmRpYWxvZ0RhdGEudG9EYXRlO1xyXG4gICAgICAgICAgICB0aGlzLmludGVydmFsID0gbmV3IERhdGVJbnRlcnZhbCh0aGlzLnBhcmFtcy5mcm9tRGF0ZSwgdGhpcy5wYXJhbXMudG9EYXRlKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmlzTGF3cygpKSB7XHJcbiAgICAgIGlmICghdGhpcy5jbGlwcGVyU2VydmljZS5sb2dnZWRJbikgcmV0dXJuO1xyXG4gICAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlLmdldFRvcGljcygpXHJcbiAgICAgICAgLnN1YnNjcmliZShyID0+IHtcclxuICAgICAgICAgIGlmIChyLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgbGV0IG5hbWUgPSAnJztcclxuICAgICAgICAgICAgci52YWx1ZS5mb3JFYWNoKChuOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBuYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgKG4udmFsdWUubWF0Y2goLy4vZykgfHwgW10pLmZvckVhY2goKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbmFtZSArPSAnJm5ic3A7Jm5ic3A7JztcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICBuYW1lICs9IG4udmFsdWUgKyAnIC0gJyArIG4ubmFtZTtcclxuICAgICAgICAgICAgICBuLnRpdGxlID0gbmFtZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMudG9waWNzID0gci52YWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmhhc0F1dGhvck9yVHlwZSgpKSB7XHJcbiAgICAgICAgdGhpcy5zZWN0b3JzQ2hhbmdlZCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMudW5zdWJzY3JpYmUubmV4dCgpO1xyXG4gICAgdGhpcy51bnN1YnNjcmliZS5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyBvdGhlciBsaXN0cyB3aGVuIHNlY3RvcnMgY2hhbmdlc1xyXG4gICAqL1xyXG4gIHNlY3RvcnNDaGFuZ2VkKCkge1xyXG4gICAgLy8gUmVzZXQgYXV0aG9ycyBhbmQgdHlwZXNcclxuICAgIHRoaXMucGFyYW1zLmF1dGhvcnMgPSBbXTtcclxuICAgIHRoaXMucGFyYW1zLnR5cGUgPSBudWxsO1xyXG4gICAgaWYgKHRoaXMuaGFzQXV0aG9yT3JUeXBlKCkpIHtcclxuICAgICAgdGhpcy5hdXRob3JzID0gW107XHJcbiAgICAgIENsaXBwZXJBdXRob3JzLmZvckVhY2goKG46IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChuLnNlY3RvcklkID09PSB0aGlzLnBhcmFtcy5zZWN0b3JzWzBdKSB0aGlzLmF1dGhvcnMucHVzaChuKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMudHlwZXMgPSBbXTtcclxuICAgICAgQ2xpcHBlclNlY3RvclR5cGVzLmZvckVhY2goKG46IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChuLnBhcmVudFZhbHVlID09PSB0aGlzLnBhcmFtcy5zZWN0b3JzWzBdKSB0aGlzLnR5cGVzLnB1c2gobik7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAodGhpcy50eXBlcy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgIHRoaXMudHlwZXMgPSBbLi4uQ2xpcHBlclNlY3RvclR5cGVzXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXIgc2VhcmNoXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGNsZWFyKCkge1xyXG4gICAgQ2xpcHBlclNlYXJjaFV0aWxzLmNsZWFyKHRoaXMucGFyYW1zKTtcclxuICAgIHRoaXMuaW50ZXJ2YWwuY2xlYXIoKTtcclxuICAgIHRoaXMuc291cmNlSW50ZXJ2YWwuY2xlYXIoKTtcclxuICAgIHRoaXMuc2VjdG9yc0NoYW5nZWQoKTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICogU2hvdyBmcmVlIHRleHQgaGVscFxyXG4gKi9cclxuICBwcm90ZWN0ZWQgaGVscCgpIHtcclxuICAgIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKENsaXBwZXJTZWFyY2hGcmVlVGV4dEhlbHBDb21wb25lbnQsIHtcclxuICAgICAgYXJpYUxhYmVsOiAnaW5mb3JtYXppb25pIHJpY2VyY2EnLFxyXG4gICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICByZXN0b3JlRm9jdXM6IHRydWUsXHJcbiAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXHJcbiAgICAgIG1pbldpZHRoOiAnMzc1cHgnLFxyXG4gICAgICBtYXhXaWR0aDogJzgwMHB4JyxcclxuICAgICAgd2lkdGg6ICc5OSUnLFxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuICAvKipcclxuICAgKiBDb21wb3NlIGEgZnJlZSB0ZXh0IHNlYXJjaCBxdWVyeVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBjb21wb3NlKCkge1xyXG4gICAgY29uc3QgZCA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuKENsaXBwZXJTZWFyY2hGcmVlVGV4dFF1ZXJ5QnVpbGRlckNvbXBvbmVudCwge1xyXG4gICAgICBhcmlhTGFiZWw6ICdjb3N0cnVpc2NpIHJpY2VyY2EnLFxyXG4gICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICByZXN0b3JlRm9jdXM6IHRydWUsXHJcbiAgICAgIGRpc2FibGVDbG9zZTogZmFsc2UsXHJcbiAgICAgIG1pbldpZHRoOiAnMzc1cHgnLFxyXG4gICAgICBtYXhXaWR0aDogJzYwMHB4JyxcclxuICAgICAgd2lkdGg6ICc5OSUnXHJcbiAgICB9KTtcclxuICAgIGQuY29tcG9uZW50SW5zdGFuY2UuZG9uZVxyXG4gICAgICAuc3Vic2NyaWJlKChyOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnBhcmFtcy50ZXh0ID0gci5xdWVyeTtcclxuICAgICAgICAvLyBGaW5pc2hlZFxyXG4gICAgICAgIGQuY2xvc2UoKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTdWJtaXQgc2VhcmNoXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIG9rKCkge1xyXG4gICAgdGhpcy5va0J1dHRvbi5mb2N1cygpO1xyXG4gICAgaWYgKHRoaXMucGFyYW1zLnRleHQpIHtcclxuICAgICAgdGhpcy5wYXJhbXMudGV4dCA9IENsaXBwZXJTZWFyY2hVdGlscy5ub3JtYWxpemVUZXh0UXVlcnkodGhpcy5wYXJhbXMudGV4dCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5pbnRlcnZhbCkge1xyXG4gICAgICB0aGlzLnBhcmFtcy5mcm9tRGF0ZSA9IHRoaXMuaW50ZXJ2YWwuZnJvbTtcclxuICAgICAgdGhpcy5wYXJhbXMudG9EYXRlID0gdGhpcy5pbnRlcnZhbC50bztcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNvdXJjZUludGVydmFsKSB7XHJcbiAgICAgIHRoaXMucGFyYW1zLnNvdXJjZUZyb21EYXRlID0gdGhpcy5zb3VyY2VJbnRlcnZhbC5mcm9tO1xyXG4gICAgICB0aGlzLnBhcmFtcy5zb3VyY2VUb0RhdGUgPSB0aGlzLnNvdXJjZUludGVydmFsLnRvO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kb25lLmVtaXQodGhpcy5wYXJhbXMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIENoZWNrIGlmIGEgYmxvY2sgb2YgZXhwYW5kYWJsZSBvcHRpb25zIGhhcyBhIGZpbHRlciBvblxyXG4gKiBAcGFyYW0gYmxvY2sgOiB0aGUgYmxvY2sgaWRcclxuICogQHJldHVybnMgdHJ1ZSBpZiBhdCBsZWFzdCBhIHZhbHVlIGlzIHNldFxyXG4gKi9cclxuICBoYXNGaWx0ZXIoYmxvY2s6ICdzb3VyY2UnIHwgJ290aGVyJyB8ICdtb2RpZmllcicpOiBib29sZWFuIHtcclxuICAgIGlmIChibG9jayA9PT0gJ3NvdXJjZScpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucGFyYW1zLnNvdXJjZU51bWJlciAhPSBudWxsIHx8XHJcbiAgICAgICAgdGhpcy5wYXJhbXMuc291cmNlWWVhciAhPSBudWxsIHx8XHJcbiAgICAgICAgdGhpcy5wYXJhbXMuc291cmNlICE9IG51bGwgfHxcclxuICAgICAgICB0aGlzLnNvdXJjZUludGVydmFsLmZyb20gIT0gbnVsbDtcclxuICAgIH0gZWxzZSBpZiAoYmxvY2sgPT09ICdvdGhlcicpIHtcclxuICAgICAgaWYgKCF0aGlzLmlzTW9kdWxlKENsaXBwZXJNb2R1bGUuTW9kaWZpY2hlQWJyb2dhemlvbmlFUmludmlpKSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBhcmFtcy5zb3VyY2VOdW1iZXIgIT0gbnVsbCB8fFxyXG4gICAgICAgICAgdGhpcy5wYXJhbXMuYXV0aG9yICE9IG51bGwgfHxcclxuICAgICAgICAgIHRoaXMucGFyYW1zLnR5cGUgIT0gbnVsbCB8fFxyXG4gICAgICAgICAgdGhpcy5wYXJhbXMudG9waWMgIT0gbnVsbDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wYXJhbXMuY2hhbmdlUmVhc29uICE9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoYmxvY2sgPT09ICdtb2RpZmllcicpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucGFyYW1zLm1vZGlmaWVyTnVtYmVyICE9IG51bGwgfHxcclxuICAgICAgICB0aGlzLnBhcmFtcy5tb2RpZmllclllYXIgIT0gbnVsbCB8fFxyXG4gICAgICAgIHRoaXMucGFyYW1zLm1vZGlmaWVyVGl0bGUgIT0gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxoMiBtYXQtZGlhbG9nLXRpdGxlPlJpY2VyY2E8L2gyPlxyXG48ZGl2IG1hdC1kaWFsb2ctY29udGVudD5cclxuICA8Zm9ybSBuYW1lPVwiZm9ybVwiICNmPVwibmdGb3JtXCIgKGtleXVwLkVudGVyKT1cIiFmLmZvcm0uaW52YWxpZCA/IG9rKCkgOiBudWxsXCIgbm92YWxpZGF0ZT5cclxuICAgIDxtYXQtYWNjb3JkaW9uIG11bHRpIGRpc3BsYXlNb2RlPVwiZmxhdFwiPlxyXG4gICAgICBAaWYoaXNMYXdzKCkgfHwgaXNNb2R1bGUobW9kdWxlc0VudW0uTW9kaWZpY2hlQWJyb2dhemlvbmlFUmludmlpKSkge1xyXG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBleHBhbmRlZD1cInRydWVcIiBjbGFzcz1cImFjY29yZGlvbi1wYW5lbCBtYXQtZWxldmF0aW9uLXowIFwiPlxyXG4gICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBjbGFzcz1cImFjY29yZGlvbi1oZWFkZXJcIj5cclxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgICAgIFNldHRvcmlcclxuICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgICAgPGNoaXBzLXNlbGVjdG9yIFsobmdNb2RlbCldPVwicGFyYW1zLnNlY3RvcnNcIiBbbXVsdGlwbGVdPVwidHJ1ZVwiIG5hbWU9XCJzZWN0b3JzXCIgbGFiZWw9XCJTZXR0b3JpXCJcclxuICAgICAgICAgIFtvcHRpb25zXT1cInNlY3RvcnNcIiAoY2hhbmdlZCk9XCJzZWN0b3JzQ2hhbmdlZCgpXCIgLz5cclxuICAgICAgICBAaWYoaGFzUmVnaW9ucygpKVxyXG4gICAgICAgIHtcclxuICAgICAgICA8bWF0LWRpdmlkZXIgc3R5bGU9XCJwYWRkaW5nLXRvcDogOHB4OyBtYXJnaW4tdG9wOjhweFwiPjwvbWF0LWRpdmlkZXI+XHJcbiAgICAgICAgPGNoaXBzLXNlbGVjdG9yIG1vZGU9XCJjb2xsYXBzZWRcIiBbKG5nTW9kZWwpXT1cInBhcmFtcy5hdXRob3JzXCIgW211bHRpcGxlXT1cInRydWVcIiBuYW1lPVwiYXV0aG9yc1wiXHJcbiAgICAgICAgICBsYWJlbD1cIlR1dHRlIGxlIHJlZ2lvbmlcIiBbb3B0aW9uc109XCJyZWdpb25zXCIgLz5cclxuICAgICAgICB9XHJcbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuICAgICAgfSBAZWxzZSBpZihpc05ld3MoKSkge1xyXG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBleHBhbmRlZD1cInRydWVcIiBjbGFzcz1cImFjY29yZGlvbi1wYW5lbCBtYXQtZWxldmF0aW9uLXowIFwiPlxyXG4gICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBjbGFzcz1cImFjY29yZGlvbi1oZWFkZXJcIj5cclxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgICAgIFRpcG9sb2dpYVxyXG4gICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgICA8Y2hpcHMtc2VsZWN0b3IgWyhuZ01vZGVsKV09XCJwYXJhbXMuc2VjdG9yc1wiIFttdWx0aXBsZV09XCJ0cnVlXCIgbmFtZT1cInNlY3RvcnNcIiBsYWJlbD1cIlRpcG9sb2dpYVwiXHJcbiAgICAgICAgICBbb3B0aW9uc109XCJzZWN0b3JzXCIgLz5cclxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG4gICAgICB9XHJcbiAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGV4cGFuZGVkPVwidHJ1ZVwiIGNsYXNzPVwiYWNjb3JkaW9uLXBhbmVsIG1hdC1lbGV2YXRpb24tejAgXCI+XHJcbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGNsYXNzPVwiYWNjb3JkaW9uLWhlYWRlclwiPlxyXG4gICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICAgICAgRG9jdW1lbnRvXHJcbiAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIj5cclxuICAgICAgICAgIEBpZiAoaXNMYXdzKCkgfHwgaXNNb2R1bGUobW9kdWxlc0VudW0uR2l1cmlzcHJ1ZGVuemEpKSB7XHJcbiAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93IHdyYXBcIiBmeExheW91dEFsaWduPVwic3BhY2UtYmV0d2VlbiBjZW50ZXJcIiBmeEZpbGw+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEZsZXg9XCI1OVwiIGZ4RmxleC54cz1cIjEwMFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+TnVtZXJvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0ICNmaWx0ZXJCeU51bWJlcj1cIm1hdElucHV0XCIgbWF0SW5wdXQgbWF4bGVuZ3RoPVwiMTBcIiBbKG5nTW9kZWwpXT1cInBhcmFtcy5udW1iZXJcIiBuYW1lPVwibnVtYmVyXCIgLz5cclxuICAgICAgICAgICAgICBAaWYgKHBhcmFtcy5udW1iZXIpIHtcclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiUHVsaXNjaVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicGFyYW1zLm51bWJlciA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhIaWRlLnhzIGZ4RmxleD1cIjM5XCIgZnhGbGV4LnhzPVwiMTAwXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD5Bbm5vPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBtaW49XCIxNzUwXCIgbWF0SW5wdXQgbWF4bGVuZ3RoPVwiNFwiIFsobmdNb2RlbCldPVwicGFyYW1zLnllYXJcIiBuYW1lPVwieWVhclwiIC8+XHJcbiAgICAgICAgICAgICAgQGlmIChwYXJhbXMueWVhcikge1xyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJQdWxpc2NpXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJwYXJhbXMueWVhciA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBAaWYgKGlzTGF3cygpIHx8ICFpc01vZHVsZShtb2R1bGVzRW51bS5TY2FkZW56ZUVTZWduYWxhemlvbmkpKSB7XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+SW50ZXJ2YWxsbyBkaSBwdWJibGljYXppb25lPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtZGF0ZS1yYW5nZS1pbnB1dCBbcmFuZ2VQaWNrZXJdPVwicGlja2VyMVwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRTdGFydERhdGUgWyhuZ01vZGVsKV09XCJpbnRlcnZhbC5mcm9tXCIgW2RhdGVJbnRlcnZhbENoYW5nZV09XCJpbnRlcnZhbFwiICNyYW5nZUZyb20xPVwibmdNb2RlbFwiXHJcbiAgICAgICAgICAgICAgICBuYW1lPVwicmFuZ2VGcm9tMVwiIHBsYWNlaG9sZGVyPVwiRGEgZGF0YVwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRFbmREYXRlIFsobmdNb2RlbCldPVwiaW50ZXJ2YWwudG9cIiBbZGF0ZUludGVydmFsQ2hhbmdlXT1cImludGVydmFsXCIgW2VuZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICNyYW5nZVRvMT1cIm5nTW9kZWxcIiBuYW1lPVwicmFuZ2VUbzFcIiBwbGFjZWhvbGRlcj1cIkEgZGF0YVwiPlxyXG4gICAgICAgICAgICA8L21hdC1kYXRlLXJhbmdlLWlucHV0PlxyXG4gICAgICAgICAgICBAaWYgKGludGVydmFsLmZyb20gfHwgaW50ZXJ2YWwudG8pIHtcclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlB1bGlzY2lcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJpbnRlcnZhbC5jbGVhcigpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJwaWNrZXIxXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgIDxtYXQtZGF0ZS1yYW5nZS1waWNrZXIgI3BpY2tlcjE+PC9tYXQtZGF0ZS1yYW5nZS1waWNrZXI+XHJcbiAgICAgICAgICAgIEBpZiAocmFuZ2VGcm9tMS5pbnZhbGlkIHx8IHJhbmdlVG8xLmludmFsaWQpIHtcclxuICAgICAgICAgICAgPG1hdC1lcnJvcj5JbnRlcnZhbGxvIG5vbiB2YWxpZG8uPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+VGVzdG88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IG1heGxlbmd0aD1cIjIwMFwiIFsobmdNb2RlbCldPVwicGFyYW1zLnRleHRcIiBuYW1lPVwidGV4dFwiIC8+XHJcbiAgICAgICAgICAgIEBpZiAocGFyYW1zLnRleHQpIHtcclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlB1bGlzY2lcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJwYXJhbXMudGV4dCA9IG51bGxcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0LWljb24tYnV0dG9uIG1hdFN1ZmZpeCBtYXRUb29sdGlwPVwiT3B6aW9uaVwiIGFyaWEtbGFiZWw9XCJPcHppb25pXCJcclxuICAgICAgICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwidGV4dE9wdGlvbnNNZW51XCI+PG1hdC1pY29uPm1vcmVfdmVydDwvbWF0LWljb24+PC9idXR0b24+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBbKG5nTW9kZWwpXT1cInBhcmFtcy50aXRsZU9ubHlcIiBuYW1lPVwidGl0bGVPbmx5XCI+Q2VyY2Egc29sbyBuZWxcclxuICAgICAgICAgICAgICAgIHRpdG9sbzwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIEBpZihpc0xhd3MoKSkge1xyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwicGFkZGluZy10b3A6MTBweFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtc2xpZGUtdG9nZ2xlIFsobmdNb2RlbCldPVwicGFyYW1zLnNob3dDb21tZW50ZWREb2N1bWVudHNPbmx5XCIgbmFtZT1cInNob3dDb21tZW50ZWREb2N1bWVudHNPbmx5XCI+TW9zdHJhXHJcbiAgICAgICAgICAgICAgICBzb2xvIG5vcm1lIGNvbiBjb21tZW50aTwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgICAgIEBpZihpc0xhd3MoKSkge1xyXG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBbZXhwYW5kZWRdPVwiaGFzRmlsdGVyKCdzb3VyY2UnKVwiIGNsYXNzPVwiYWNjb3JkaW9uLXBhbmVsIG1hdC1lbGV2YXRpb24tejAgXCI+XHJcbiAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGNsYXNzPVwiYWNjb3JkaW9uLWhlYWRlclwiPlxyXG4gICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICAgICAgRm9udGVcclxuICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiPlxyXG4gICAgICAgICAgPGRpdiBmeExheW91dD1cInJvdyB3cmFwXCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCIgZnhGaWxsPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiNTlcIiBmeEZsZXgueHM9XCIxMDBcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPk51bWVybzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBtYXhsZW5ndGg9XCIxMFwiIFsobmdNb2RlbCldPVwicGFyYW1zLnNvdXJjZU51bWJlclwiIG5hbWU9XCJzb3VyY2VOdW1iZXJcIiAvPlxyXG4gICAgICAgICAgICAgIEBpZiAocGFyYW1zLnNvdXJjZU51bWJlcikge1xyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJQdWxpc2NpXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJwYXJhbXMuc291cmNlTnVtYmVyID0gbnVsbFwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBmeEhpZGUueHMgZnhGbGV4PVwiMzlcIiBmeEZsZXgueHM9XCIxMDBcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPkFubm88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIG1pbj1cIjE3NTBcIiBtYXRJbnB1dCBtYXhsZW5ndGg9XCI0XCIgWyhuZ01vZGVsKV09XCJwYXJhbXMuc291cmNlWWVhclwiXHJcbiAgICAgICAgICAgICAgICBuYW1lPVwic291cmNlWWVhclwiIC8+XHJcbiAgICAgICAgICAgICAgQGlmIChwYXJhbXMuc291cmNlWWVhcikge1xyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJQdWxpc2NpXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJwYXJhbXMuc291cmNlWWVhciA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+SW50ZXJ2YWxsbyBkaSBwdWJibGljYXppb25lPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtZGF0ZS1yYW5nZS1pbnB1dCBbcmFuZ2VQaWNrZXJdPVwicGlja2VyMlwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRTdGFydERhdGUgWyhuZ01vZGVsKV09XCJzb3VyY2VJbnRlcnZhbC5mcm9tXCIgW2RhdGVJbnRlcnZhbENoYW5nZV09XCJzb3VyY2VJbnRlcnZhbFwiXHJcbiAgICAgICAgICAgICAgICAjcmFuZ2VGcm9tMj1cIm5nTW9kZWxcIiBuYW1lPVwicmFuZ2VGcm9tMlwiIHBsYWNlaG9sZGVyPVwiRGEgZGF0YVwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRFbmREYXRlIFsobmdNb2RlbCldPVwic291cmNlSW50ZXJ2YWwudG9cIiBbZGF0ZUludGVydmFsQ2hhbmdlXT1cInNvdXJjZUludGVydmFsXCIgW2VuZF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICNyYW5nZVRvMj1cIm5nTW9kZWxcIiBuYW1lPVwicmFuZ2VUbzJcIiBwbGFjZWhvbGRlcj1cIkEgZGF0YVwiPlxyXG4gICAgICAgICAgICA8L21hdC1kYXRlLXJhbmdlLWlucHV0PlxyXG4gICAgICAgICAgICBAaWYgKHNvdXJjZUludGVydmFsLmZyb20gfHwgc291cmNlSW50ZXJ2YWwudG8pIHtcclxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlB1bGlzY2lcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJzb3VyY2VJbnRlcnZhbC5jbGVhcigpXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJwaWNrZXIyXCI+PC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgIDxtYXQtZGF0ZS1yYW5nZS1waWNrZXIgI3BpY2tlcjI+PC9tYXQtZGF0ZS1yYW5nZS1waWNrZXI+XHJcbiAgICAgICAgICAgIEBpZiAocmFuZ2VGcm9tMi5pbnZhbGlkIHx8IHJhbmdlVG8yLmludmFsaWQpIHtcclxuICAgICAgICAgICAgPG1hdC1lcnJvcj5JbnRlcnZhbGxvIG5vbiB2YWxpZG8uPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+VGlwbzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cInBhcmFtcy5zb3VyY2VcIiBuYW1lPVwic291cmNlXCI+XHJcbiAgICAgICAgICAgICAgQGZvciAocyBvZiBzb3VyY2VzOyB0cmFjayBzKSB7XHJcbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cInMudmFsdWVcIiBbbWF0VG9vbHRpcF09XCJzLm5hbWVcIj5cclxuICAgICAgICAgICAgICAgIHt7cy5uYW1lfX1cclxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBbZXhwYW5kZWRdPVwiaGFzRmlsdGVyKCdvdGhlcicpXCIgY2xhc3M9XCJhY2NvcmRpb24tcGFuZWwgbWF0LWVsZXZhdGlvbi16MFwiPlxyXG4gICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBjbGFzcz1cImFjY29yZGlvbi1oZWFkZXJcIj5cclxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgICAgIEFsdHJlIG9wemlvbmlcclxuICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiPlxyXG4gICAgICAgICAgQGlmKGlzTGF3cygpKSB7XHJcbiAgICAgICAgICBAaWYoIWhhc1JlZ2lvbnMoKSkge1xyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPkF1dG9yZTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICA8bWF0LXNlbGVjdCBbKG5nTW9kZWwpXT1cInBhcmFtcy5hdXRob3JcIiBuYW1lPVwiYXV0aG9yXCI+XHJcbiAgICAgICAgICAgICAgQGZvciAoYSBvZiBhdXRob3JzOyB0cmFjayBhKSB7XHJcbiAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImEudmFsdWVcIiBbbWF0VG9vbHRpcF09XCJhLm5hbWVcIj5cclxuICAgICAgICAgICAgICAgIHt7YS5uYW1lfX1cclxuICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8bWF0LWxhYmVsPlRpcG8gZG9jdW1lbnRvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwicGFyYW1zLnR5cGVcIiBuYW1lPVwidHlwZVwiPlxyXG4gICAgICAgICAgICAgIEBmb3IgKHQgb2YgdHlwZXM7IHRyYWNrIHQpIHtcclxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwidC52YWx1ZVwiIFttYXRUb29sdGlwXT1cInQubmFtZVwiPlxyXG4gICAgICAgICAgICAgICAge3t0Lm5hbWV9fVxyXG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+QXJnb21lbnRvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxtYXQtc2VsZWN0IFsobmdNb2RlbCldPVwicGFyYW1zLnRvcGljXCIgbmFtZT1cInRvcGljXCI+XHJcbiAgICAgICAgICAgICAgQGZvciAodCBvZiB0b3BpY3M7IHRyYWNrIHQpIHtcclxuICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwidC52YWx1ZVwiIFttYXRUb29sdGlwXT1cInQubmFtZVwiPlxyXG4gICAgICAgICAgICAgICAge3t0Lm5hbWV9fVxyXG4gICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuXHJcbiAgICAgIH0gQGVsc2UgaWYoaXNNb2R1bGUobW9kdWxlc0VudW0uTW9kaWZpY2hlQWJyb2dhemlvbmlFUmludmlpKSkge1xyXG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBleHBhbmRlZCBjbGFzcz1cImFjY29yZGlvbi1wYW5lbCBtYXQtZWxldmF0aW9uLXowIFwiPlxyXG4gICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBjbGFzcz1cImFjY29yZGlvbi1oZWFkZXJcIj5cclxuICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGU+XHJcbiAgICAgICAgICAgIERvY3VtZW50byBtb2RpZmljYXRvXHJcbiAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIj5cclxuICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3cgd3JhcFwiIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiIGZ4RmlsbD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4RmxleD1cIjU5XCIgZnhGbGV4LnhzPVwiMTAwXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD5OdW1lcm88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgbWF4bGVuZ3RoPVwiMTBcIiBbKG5nTW9kZWwpXT1cInBhcmFtcy5jaGFuZ2VkTnVtYmVyXCIgbmFtZT1cImNoYW5nZWROdW1iZXJcIlxyXG4gICAgICAgICAgICAgICAgI2ZpbHRlckJ5Q2hhbmdlTnVtYmVyPVwibWF0SW5wdXRcIiAvPlxyXG4gICAgICAgICAgICAgIEBpZiAocGFyYW1zLmNoYW5nZWROdW1iZXIpIHtcclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiUHVsaXNjaVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicGFyYW1zLmNoYW5nZWROdW1iZXIgPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGZ4SGlkZS54cyBmeEZsZXg9XCIzOVwiIGZ4RmxleC54cz1cIjEwMFwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+QW5ubzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgbWluPVwiMTc1MFwiIG1hdElucHV0IG1heGxlbmd0aD1cIjRcIiBbKG5nTW9kZWwpXT1cInBhcmFtcy5jaGFuZ2VkWWVhclwiXHJcbiAgICAgICAgICAgICAgICBuYW1lPVwiY2hhbmdlZFllYXJcIiAvPlxyXG4gICAgICAgICAgICAgIEBpZiAocGFyYW1zLmNoYW5nZWRZZWFyKSB7XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlB1bGlzY2lcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInBhcmFtcy5jaGFuZ2VkWWVhciA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+VGl0b2xvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBtYXhsZW5ndGg9XCIyMDBcIiBbKG5nTW9kZWwpXT1cInBhcmFtcy5jaGFuZ2VkVGl0bGVcIiBuYW1lPVwiY2hhbmdlZFRpdGxlXCIgLz5cclxuICAgICAgICAgICAgQGlmIChwYXJhbXMuY2hhbmdlZFRpdGxlKSB7XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJQdWxpc2NpXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwicGFyYW1zLmNoYW5nZWRUaXRsZSA9IG51bGxcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG4gICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBbZXhwYW5kZWRdPVwiaGFzRmlsdGVyKCdtb2RpZmllcicpXCIgY2xhc3M9XCJhY2NvcmRpb24tcGFuZWwgbWF0LWVsZXZhdGlvbi16MCBcIj5cclxuICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgY2xhc3M9XCJhY2NvcmRpb24taGVhZGVyXCI+XHJcbiAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgICAgICBEb2N1bWVudG8gbW9kaWZpY2FudGVcclxuICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XHJcbiAgICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiPlxyXG4gICAgICAgICAgPGRpdiBmeExheW91dD1cInJvdyB3cmFwXCIgZnhMYXlvdXRBbGlnbj1cInNwYWNlLWJldHdlZW4gY2VudGVyXCIgZnhGaWxsPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4PVwiNTlcIiBmeEZsZXgueHM9XCIxMDBcIj5cclxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPk51bWVybzwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBtYXhsZW5ndGg9XCIxMFwiIFsobmdNb2RlbCldPVwicGFyYW1zLm1vZGlmaWVyTnVtYmVyXCIgbmFtZT1cIm1vZGlmaWVyTnVtYmVyXCIgLz5cclxuICAgICAgICAgICAgICBAaWYgKHBhcmFtcy5jaGFuZ2VkTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdGFiaW5kZXg9XCItMVwiIG1hdFN1ZmZpeCBtYXQtaWNvbi1idXR0b24gYXJpYS1sYWJlbD1cIlB1bGlzY2lcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInBhcmFtcy5tb2RpZmllck51bWJlciA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgZnhIaWRlLnhzIGZ4RmxleD1cIjM5XCIgZnhGbGV4LnhzPVwiMTAwXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD5Bbm5vPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBtaW49XCIxNzUwXCIgbWF0SW5wdXQgbWF4bGVuZ3RoPVwiNFwiIFsobmdNb2RlbCldPVwicGFyYW1zLm1vZGlmaWVyWWVhclwiXHJcbiAgICAgICAgICAgICAgICBuYW1lPVwibW9kaWZpZXJZZWFyXCIgLz5cclxuICAgICAgICAgICAgICBAaWYgKHBhcmFtcy5tb2RpZmllclllYXIpIHtcclxuICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiB0YWJpbmRleD1cIi0xXCIgbWF0U3VmZml4IG1hdC1pY29uLWJ1dHRvbiBhcmlhLWxhYmVsPVwiUHVsaXNjaVwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicGFyYW1zLm1vZGlmaWVyWWVhciA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgIDxtYXQtbGFiZWw+VGl0b2xvPC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBtYXhsZW5ndGg9XCIyMDBcIiBbKG5nTW9kZWwpXT1cInBhcmFtcy5tb2RpZmllclRpdGxlXCIgbmFtZT1cIm1vZGlmaWVyVGl0bGVcIiAvPlxyXG4gICAgICAgICAgICBAaWYgKHBhcmFtcy5tb2RpZmllclRpdGxlKSB7XHJcbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIHRhYmluZGV4PVwiLTFcIiBtYXRTdWZmaXggbWF0LWljb24tYnV0dG9uIGFyaWEtbGFiZWw9XCJQdWxpc2NpXCJcclxuICAgICAgICAgICAgICAoY2xpY2spPVwicGFyYW1zLm1vZGlmaWVyVGl0bGUgPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgW2V4cGFuZGVkXT1cImhhc0ZpbHRlcignb3RoZXInKVwiIGNsYXNzPVwiYWNjb3JkaW9uLXBhbmVsIG1hdC1lbGV2YXRpb24tejBcIj5cclxuICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgY2xhc3M9XCJhY2NvcmRpb24taGVhZGVyXCI+XHJcbiAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxyXG4gICAgICAgICAgICBBbHRyZSBvcHppb25pXHJcbiAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cclxuICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIj5cclxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPG1hdC1sYWJlbD5Nb3Rpdm88L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgPG1hdC1zZWxlY3QgWyhuZ01vZGVsKV09XCJwYXJhbXMuY2hhbmdlUmVhc29uXCIgbmFtZT1cImNoYW5nZVJlYXNvblwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtb3B0aW9uPlR1dHRpPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XHJcbiAgICAgIH1cclxuICAgIDwvbWF0LWFjY29yZGlvbj5cclxuICA8L2Zvcm0+XHJcbjwvZGl2PlxyXG48ZGl2IG1hdC1kaWFsb2ctYWN0aW9ucz5cclxuICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCIxMHB4XCIgZnhGaWxsPlxyXG4gICAgPGRpdiBmeEZsZXg9XCIzMFwiPlxyXG4gICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtYnV0dG9uIChjbGljayk9XCJjbGVhcigpXCIgY29sb3I9XCJwcmltYXJ5XCI+UFVMSVNDSTwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGZ4RmxleD1cIjcwXCIgZnhMYXlvdXRBbGlnbj1cImVuZFwiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1mbGF0LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiAjb2tCdXR0b24gW2Rpc2FibGVkXT1cImYuZm9ybS5pbnZhbGlkXCIgKGNsaWNrKT1cIm9rKClcIj5UUk9WQTwvYnV0dG9uPlxyXG4gICAgICA8YnV0dG9uIG1hdC1idXR0b24gW21hdC1kaWFsb2ctY2xvc2VdPVwidHJ1ZVwiIGNvbG9yPVwicHJpbWFyeVwiPkNISVVESTwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG48bWF0LW1lbnUgI3RleHRPcHRpb25zTWVudT1cIm1hdE1lbnVcIj5cclxuICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cImNvbXBvc2UoKVwiPlxyXG4gICAgPG1hdC1pY29uPmJ1aWxkPC9tYXQtaWNvbj5Db21wb25pXHJcbiAgPC9idXR0b24+XHJcbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJoZWxwKClcIj5cclxuICAgIDxtYXQtaWNvbj5oZWxwPC9tYXQtaWNvbj5Db21lIHVzYXJlIGxhIHJpY2VyY2EgaW4gdGVzdG8gbGliZXJvXHJcbiAgPC9idXR0b24+XHJcbjwvbWF0LW1lbnU+Il19
|