@valtimo/document 10.7.0 → 11.0.0

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.
@@ -1,252 +0,0 @@
1
- /*
2
- * Copyright 2015-2023 Ritense BV, the Netherlands.
3
- *
4
- * Licensed under EUPL, Version 1.2 (the "License");
5
- * you may not use this file except in compliance with the License.
6
- * You may obtain a copy of the License at
7
- *
8
- * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
9
- *
10
- * Unless required by applicable law or agreed to in writing, software
11
- * distributed under the License is distributed on an "AS IS" basis,
12
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- * See the License for the specific language governing permissions and
14
- * limitations under the License.
15
- */
16
- import { Injectable } from '@angular/core';
17
- import { HttpHeaders, HttpParams } from '@angular/common/http';
18
- import { catchError, of } from 'rxjs';
19
- import * as i0 from "@angular/core";
20
- import * as i1 from "@angular/common/http";
21
- import * as i2 from "@valtimo/config";
22
- export class DocumentService {
23
- constructor(http, configService) {
24
- this.http = http;
25
- this.EMPTY_DOCUMENTS_RESPONSE = {
26
- content: [],
27
- empty: true,
28
- first: false,
29
- last: false,
30
- number: 0,
31
- numberOfElements: 0,
32
- size: 0,
33
- sort: false,
34
- totalElements: 0,
35
- totalPages: 0,
36
- };
37
- this.valtimoEndpointUri = configService.config.valtimoApi.endpointUri;
38
- }
39
- // Document-calls
40
- getAllDefinitions() {
41
- return this.http.get(`${this.valtimoEndpointUri}v1/document-definition`);
42
- }
43
- queryDefinitions(params) {
44
- return this.http.get(`${this.valtimoEndpointUri}v1/document-definition`, { params });
45
- }
46
- getDocumentDefinition(documentDefinitionName) {
47
- return this.http.get(`${this.valtimoEndpointUri}v1/document-definition/${documentDefinitionName}`);
48
- }
49
- getDocuments(documentSearchRequest) {
50
- return this.http.post(`${this.valtimoEndpointUri}v1/document-search`, documentSearchRequest.asHttpBody(), {
51
- params: documentSearchRequest.asHttpParams(),
52
- });
53
- }
54
- getDocumentsSearch(documentSearchRequest, searchOperator, assigneeFilter, otherFilters) {
55
- const body = documentSearchRequest.asHttpBody();
56
- if (searchOperator) {
57
- body.searchOperator = searchOperator;
58
- }
59
- if (assigneeFilter) {
60
- body.assigneeFilter = assigneeFilter;
61
- }
62
- if (otherFilters) {
63
- body.otherFilters = otherFilters;
64
- }
65
- return this.http
66
- .post(`${this.valtimoEndpointUri}v1/document-definition/${documentSearchRequest.definitionName}/search`, body, { params: documentSearchRequest.asHttpParams() })
67
- .pipe(catchError(() => of(this.EMPTY_DOCUMENTS_RESPONSE)));
68
- }
69
- getSpecifiedDocumentsSearch(documentSearchRequest, searchOperator, assigneeFilter, otherFilters) {
70
- const body = documentSearchRequest.asHttpBody();
71
- if (searchOperator) {
72
- body.searchOperator = searchOperator;
73
- }
74
- if (assigneeFilter) {
75
- body.assigneeFilter = assigneeFilter;
76
- }
77
- if (otherFilters) {
78
- body.otherFilters = otherFilters;
79
- }
80
- return this.http
81
- .post(`${this.valtimoEndpointUri}v1/case/${documentSearchRequest.definitionName}/search`, body, { params: documentSearchRequest.asHttpParams() })
82
- .pipe(catchError(() => of(this.EMPTY_DOCUMENTS_RESPONSE)));
83
- }
84
- getDocumentSearchFields(documentDefinitionName) {
85
- return this.http.get(`${this.valtimoEndpointUri}v1/document-search/${documentDefinitionName}/fields`);
86
- }
87
- putDocumentSearch(documentDefinitionName, request) {
88
- return this.http.put(`${this.valtimoEndpointUri}v1/document-search/${documentDefinitionName}/fields`, [...request]);
89
- }
90
- postDocumentSearch(documentDefinitionName, request) {
91
- return this.http.post(`${this.valtimoEndpointUri}v1/document-search/${documentDefinitionName}/fields`, { ...request });
92
- }
93
- deleteDocumentSearch(documentDefinitionName, key) {
94
- const options = {
95
- headers: new HttpHeaders({
96
- 'Content-Type': 'application/json',
97
- }),
98
- };
99
- return this.http.delete(`${this.valtimoEndpointUri}v1/document-search/${documentDefinitionName}/fields?key=${key}`, options);
100
- }
101
- getDropdownDataProviders() {
102
- return this.http.get(`${this.valtimoEndpointUri}v1/data/dropdown-list/provider`);
103
- }
104
- getDropdownData(provider, documentDefinitionName, fieldKey) {
105
- const dropdownListKey = encodeURI(documentDefinitionName + '_' + fieldKey);
106
- return this.http.get(`${this.valtimoEndpointUri}v1/data/dropdown-list?provider=${provider}&key=${dropdownListKey}`);
107
- }
108
- postDropdownData(provider, documentDefinitionName, fieldKey, dropdownData) {
109
- const dropdownListKey = encodeURI(documentDefinitionName + '_' + fieldKey);
110
- return this.http.post(`${this.valtimoEndpointUri}v1/data/dropdown-list?provider=${provider}&key=${dropdownListKey}`, dropdownData);
111
- }
112
- deleteDropdownData(provider, documentDefinitionName, fieldKey) {
113
- const dropdownListKey = encodeURI(documentDefinitionName + '_' + fieldKey);
114
- return this.http.delete(`${this.valtimoEndpointUri}v1/data/dropdown-list?provider=${provider}&key=${dropdownListKey}`);
115
- }
116
- getDocumentRoles(documentDefinitionName) {
117
- return this.http.get(`${this.valtimoEndpointUri}v1/document-definition/${documentDefinitionName}/roles`);
118
- }
119
- modifyDocumentRoles(documentDefinitionName, roles) {
120
- return this.http.put(`${this.valtimoEndpointUri}v1/document-definition/${documentDefinitionName}/roles`, roles);
121
- }
122
- getDocument(documentId) {
123
- return this.http.get(`${this.valtimoEndpointUri}v1/document/${documentId}`);
124
- }
125
- modifyDocument(document) {
126
- return this.http.put(`${this.valtimoEndpointUri}v1/document`, document);
127
- }
128
- // ProcessDocument-calls
129
- getProcessDocumentDefinitions() {
130
- return this.http.get(`${this.valtimoEndpointUri}v1/process-document/definition`);
131
- }
132
- findProcessDocumentDefinitions(documentDefinitionName) {
133
- return this.http.get(`${this.valtimoEndpointUri}v1/process-document/definition/document/${documentDefinitionName}`);
134
- }
135
- findProcessDocumentDefinitionsByProcessDefinitionKey(processDefinitionKey) {
136
- return this.http.get(`${this.valtimoEndpointUri}v1/process-document/definition/process/${processDefinitionKey}`);
137
- }
138
- findProcessDocumentInstances(documentId) {
139
- return this.http.get(`${this.valtimoEndpointUri}v1/process-document/instance/document/${documentId}`);
140
- }
141
- newDocumentAndStartProcess(request) {
142
- return this.http.post(`${this.valtimoEndpointUri}v1/process-document/operation/new-document-and-start-process`, request);
143
- }
144
- modifyDocumentAndCompleteTask(request) {
145
- return this.http.post(`${this.valtimoEndpointUri}v1/process-document/operation/modify-document-and-complete-task`, request);
146
- }
147
- modifyDocumentAndStartProcess(request) {
148
- return this.http.post(`${this.valtimoEndpointUri}v1/process-document/operation/modify-document-and-start-process`, request);
149
- }
150
- createProcessDocumentDefinition(request) {
151
- return this.http.post(`${this.valtimoEndpointUri}v1/process-document/definition`, request);
152
- }
153
- createDocumentDefinition(documentDefinitionCreateRequest) {
154
- const options = {
155
- headers: new HttpHeaders({
156
- 'Content-Type': 'application/json',
157
- }),
158
- };
159
- return this.http.post(`${this.valtimoEndpointUri}v1/document-definition`, documentDefinitionCreateRequest, options);
160
- }
161
- deleteProcessDocumentDefinition(request) {
162
- const options = {
163
- headers: new HttpHeaders({
164
- 'Content-Type': 'application/json',
165
- }),
166
- body: request,
167
- };
168
- return this.http.delete(`${this.valtimoEndpointUri}v1/process-document/definition`, options);
169
- }
170
- getAuditLog(documentId, page = 0) {
171
- let params = new HttpParams();
172
- params = params.set('page', page.toString());
173
- return this.http.get(`${this.valtimoEndpointUri}v1/process-document/instance/document/${documentId}/audit`, { params });
174
- }
175
- assignResource(documentId, resourceId) {
176
- return this.http.post(`${this.valtimoEndpointUri}v1/document/${documentId}/resource/${resourceId}`, {});
177
- }
178
- removeResource(documentId, resourceId) {
179
- const options = {
180
- headers: new HttpHeaders({
181
- 'Content-Type': 'application/json',
182
- }),
183
- };
184
- return this.http.delete(`${this.valtimoEndpointUri}v1/document/${documentId}/resource/${resourceId}`, options);
185
- }
186
- removeDocumentDefinition(name) {
187
- return this.http.delete(`${this.valtimoEndpointUri}v1/document-definition/${name}`);
188
- }
189
- sendMessage(documentId, request) {
190
- return this.http.post(`${this.valtimoEndpointUri}v1/document/${documentId}/message`, request);
191
- }
192
- getDocumentTypes(documentDefinitionName) {
193
- return this.http.get(`${this.valtimoEndpointUri}v1/documentdefinition/${documentDefinitionName}/zaaktype/documenttype`);
194
- }
195
- getLinkedUploadProcess(documentDefinitionName) {
196
- return this.http.get(`${this.valtimoEndpointUri}v1/process-document/demo/${documentDefinitionName}/process`);
197
- }
198
- updateLinkedUploadProcess(documentDefinitionName, processDefinitionKey) {
199
- return this.http.put(`${this.valtimoEndpointUri}v1/process-document/demo/${documentDefinitionName}/process`, {
200
- processDefinitionKey,
201
- linkType: 'DOCUMENT_UPLOAD',
202
- });
203
- }
204
- deleteLinkedUploadProcess(documentDefinitionName) {
205
- return this.http.delete(`${this.valtimoEndpointUri}v1/process-document/demo/${documentDefinitionName}/process`);
206
- }
207
- getProcessDocumentDefinitionFromProcessInstanceId(processInstanceId) {
208
- return this.http.get(`${this.valtimoEndpointUri}v1/process-document/definition/processinstance/${processInstanceId}`);
209
- }
210
- assignHandlerToDocument(documentId, assigneeId) {
211
- return this.http.post(`${this.valtimoEndpointUri}v1/document/${documentId}/assign`, { assigneeId });
212
- }
213
- unassignHandlerFromDocument(documentId) {
214
- return this.http.post(`${this.valtimoEndpointUri}v1/document/${documentId}/unassign`, {});
215
- }
216
- getCandidateUsers(documentId) {
217
- return this.http.get(`${this.valtimoEndpointUri}v1/document/${documentId}/candidate-user`);
218
- }
219
- getOpenDocumentCount() {
220
- return this.http.get(`${this.valtimoEndpointUri}v1/document-definition/open/count`);
221
- }
222
- patchCaseSettings(documentDefinitionName, request) {
223
- return this.http.patch(`${this.valtimoEndpointUri}v1/case/${documentDefinitionName}/settings`, { ...request });
224
- }
225
- getCaseSettings(documentDefinitionName) {
226
- return this.http.get(`${this.valtimoEndpointUri}v1/case/${documentDefinitionName}/settings`);
227
- }
228
- getCaseList(documentDefinitionName) {
229
- return this.http.get(`${this.valtimoEndpointUri}v1/case/${documentDefinitionName}/list-column`);
230
- }
231
- postCaseList(documentDefinitionName, request) {
232
- return this.http.post(`${this.valtimoEndpointUri}v1/case/${documentDefinitionName}/list-column`, { ...request });
233
- }
234
- putCaseList(documentDefinitionName, request) {
235
- return this.http.put(`${this.valtimoEndpointUri}v1/case/${documentDefinitionName}/list-column`, [...request]);
236
- }
237
- deleteCaseList(documentDefinitionName, columnKey) {
238
- return this.http.delete(`${this.valtimoEndpointUri}v1/case/${documentDefinitionName}/list-column/${columnKey}`);
239
- }
240
- getZakenApiDocuments(documentId) {
241
- return this.http.get(`${this.valtimoEndpointUri}v1/zaken-api/document/${documentId}/files`);
242
- }
243
- }
244
- DocumentService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DocumentService, deps: [{ token: i1.HttpClient }, { token: i2.ConfigService }], target: i0.ɵɵFactoryTarget.Injectable });
245
- DocumentService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DocumentService, providedIn: 'root' });
246
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: DocumentService, decorators: [{
247
- type: Injectable,
248
- args: [{
249
- providedIn: 'root',
250
- }]
251
- }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.ConfigService }]; } });
252
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9jdW1lbnQvc3JjL2xpYi9kb2N1bWVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQWEsV0FBVyxFQUFFLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3pFLE9BQU8sRUFBQyxVQUFVLEVBQWMsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDOzs7O0FBNkNoRCxNQUFNLE9BQU8sZUFBZTtJQWdCMUIsWUFBb0IsSUFBZ0IsRUFBRSxhQUE0QjtRQUE5QyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBYm5CLDZCQUF3QixHQUFtQztZQUMxRSxPQUFPLEVBQUUsRUFBRTtZQUNYLEtBQUssRUFBRSxJQUFJO1lBQ1gsS0FBSyxFQUFFLEtBQUs7WUFDWixJQUFJLEVBQUUsS0FBSztZQUNYLE1BQU0sRUFBRSxDQUFDO1lBQ1QsZ0JBQWdCLEVBQUUsQ0FBQztZQUNuQixJQUFJLEVBQUUsQ0FBQztZQUNQLElBQUksRUFBRSxLQUFLO1lBQ1gsYUFBYSxFQUFFLENBQUM7WUFDaEIsVUFBVSxFQUFFLENBQUM7U0FDZCxDQUFDO1FBR0EsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQztJQUN4RSxDQUFDO0lBRUQsaUJBQWlCO0lBQ1YsaUJBQWlCO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQXNCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQix3QkFBd0IsQ0FBQyxDQUFDO0lBQ2hHLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxNQUFZO1FBQzNCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQix3QkFBd0IsRUFDbEQsRUFBQyxNQUFNLEVBQUMsQ0FDVCxDQUFDO0lBQ0osQ0FBQztJQUVELHFCQUFxQixDQUFDLHNCQUE4QjtRQUNsRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNsQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsMEJBQTBCLHNCQUFzQixFQUFFLENBQzdFLENBQUM7SUFDSixDQUFDO0lBRUQsWUFBWSxDQUFDLHFCQUE0QztRQUN2RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNuQixHQUFHLElBQUksQ0FBQyxrQkFBa0Isb0JBQW9CLEVBQzlDLHFCQUFxQixDQUFDLFVBQVUsRUFBRSxFQUNsQztZQUNFLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxZQUFZLEVBQUU7U0FDN0MsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELGtCQUFrQixDQUNoQixxQkFBb0QsRUFDcEQsY0FBK0IsRUFDL0IsY0FBK0IsRUFDL0IsWUFBc0Q7UUFFdEQsTUFBTSxJQUFJLEdBQUcscUJBQXFCLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFaEQsSUFBSSxjQUFjLEVBQUU7WUFDbEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7U0FDdEM7UUFFRCxJQUFJLGNBQWMsRUFBRTtZQUNsQixJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztTQUN0QztRQUVELElBQUksWUFBWSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1NBQ2xDO1FBRUQsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLElBQUksQ0FDSCxHQUFHLElBQUksQ0FBQyxrQkFBa0IsMEJBQTBCLHFCQUFxQixDQUFDLGNBQWMsU0FBUyxFQUNqRyxJQUFJLEVBQ0osRUFBQyxNQUFNLEVBQUUscUJBQXFCLENBQUMsWUFBWSxFQUFFLEVBQUMsQ0FDL0M7YUFDQSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsd0JBQXFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVELDJCQUEyQixDQUN6QixxQkFBb0QsRUFDcEQsY0FBK0IsRUFDL0IsY0FBK0IsRUFDL0IsWUFBc0Q7UUFFdEQsTUFBTSxJQUFJLEdBQUcscUJBQXFCLENBQUMsVUFBVSxFQUFFLENBQUM7UUFFaEQsSUFBSSxjQUFjLEVBQUU7WUFDbEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7U0FDdEM7UUFFRCxJQUFJLGNBQWMsRUFBRTtZQUNsQixJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztTQUN0QztRQUVELElBQUksWUFBWSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1NBQ2xDO1FBRUQsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLElBQUksQ0FDSCxHQUFHLElBQUksQ0FBQyxrQkFBa0IsV0FBVyxxQkFBcUIsQ0FBQyxjQUFjLFNBQVMsRUFDbEYsSUFBSSxFQUNKLEVBQUMsTUFBTSxFQUFFLHFCQUFxQixDQUFDLFlBQVksRUFBRSxFQUFDLENBQy9DO2FBQ0EsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLHdCQUE4QyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxzQkFBOEI7UUFDcEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLHNCQUFzQixzQkFBc0IsU0FBUyxDQUNoRixDQUFDO0lBQ0osQ0FBQztJQUVELGlCQUFpQixDQUFDLHNCQUE4QixFQUFFLE9BQTJCO1FBQzNFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixzQkFBc0Isc0JBQXNCLFNBQVMsRUFDL0UsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUNiLENBQUM7SUFDSixDQUFDO0lBRUQsa0JBQWtCLENBQUMsc0JBQThCLEVBQUUsT0FBb0I7UUFDckUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDbkIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLHNCQUFzQixzQkFBc0IsU0FBUyxFQUMvRSxFQUFDLEdBQUcsT0FBTyxFQUFDLENBQ2IsQ0FBQztJQUNKLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxzQkFBOEIsRUFBRSxHQUFXO1FBQzlELE1BQU0sT0FBTyxHQUFHO1lBQ2QsT0FBTyxFQUFFLElBQUksV0FBVyxDQUFDO2dCQUN2QixjQUFjLEVBQUUsa0JBQWtCO2FBQ25DLENBQUM7U0FDSCxDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FDckIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLHNCQUFzQixzQkFBc0IsZUFBZSxHQUFHLEVBQUUsRUFDMUYsT0FBTyxDQUNSLENBQUM7SUFDSixDQUFDO0lBRUQsd0JBQXdCO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQWdCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixnQ0FBZ0MsQ0FBQyxDQUFDO0lBQ2xHLENBQUM7SUFFRCxlQUFlLENBQ2IsUUFBZ0IsRUFDaEIsc0JBQThCLEVBQzlCLFFBQWdCO1FBRWhCLE1BQU0sZUFBZSxHQUFHLFNBQVMsQ0FBQyxzQkFBc0IsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUM7UUFDM0UsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLGtDQUFrQyxRQUFRLFFBQVEsZUFBZSxFQUFFLENBQzlGLENBQUM7SUFDSixDQUFDO0lBRUQsZ0JBQWdCLENBQ2QsUUFBZ0IsRUFDaEIsc0JBQThCLEVBQzlCLFFBQWdCLEVBQ2hCLFlBQW9CO1FBRXBCLE1BQU0sZUFBZSxHQUFHLFNBQVMsQ0FBQyxzQkFBc0IsR0FBRyxHQUFHLEdBQUcsUUFBUSxDQUFDLENBQUM7UUFDM0UsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDbkIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLGtDQUFrQyxRQUFRLFFBQVEsZUFBZSxFQUFFLEVBQzdGLFlBQVksQ0FDYixDQUFDO0lBQ0osQ0FBQztJQUVELGtCQUFrQixDQUNoQixRQUFnQixFQUNoQixzQkFBOEIsRUFDOUIsUUFBZ0I7UUFFaEIsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLHNCQUFzQixHQUFHLEdBQUcsR0FBRyxRQUFRLENBQUMsQ0FBQztRQUMzRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUNyQixHQUFHLElBQUksQ0FBQyxrQkFBa0Isa0NBQWtDLFFBQVEsUUFBUSxlQUFlLEVBQUUsQ0FDOUYsQ0FBQztJQUNKLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxzQkFBOEI7UUFDcEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLDBCQUEwQixzQkFBc0IsUUFBUSxDQUNuRixDQUFDO0lBQ0osQ0FBQztJQUVNLG1CQUFtQixDQUFDLHNCQUE4QixFQUFFLEtBQVU7UUFDbkUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLDBCQUEwQixzQkFBc0IsUUFBUSxFQUNsRixLQUFLLENBQ04sQ0FBQztJQUNKLENBQUM7SUFFRCxXQUFXLENBQUMsVUFBa0I7UUFDNUIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBVyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsZUFBZSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFFRCxjQUFjLENBQUMsUUFBYTtRQUMxQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFpQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsYUFBYSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFRCx3QkFBd0I7SUFDeEIsNkJBQTZCO1FBQzNCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixnQ0FBZ0MsQ0FDM0QsQ0FBQztJQUNKLENBQUM7SUFFRCw4QkFBOEIsQ0FDNUIsc0JBQThCO1FBRTlCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQiwyQ0FBMkMsc0JBQXNCLEVBQUUsQ0FDOUYsQ0FBQztJQUNKLENBQUM7SUFFRCxvREFBb0QsQ0FDbEQsb0JBQTRCO1FBRTVCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQiwwQ0FBMEMsb0JBQW9CLEVBQUUsQ0FDM0YsQ0FBQztJQUNKLENBQUM7SUFFRCw0QkFBNEIsQ0FBQyxVQUFrQjtRQUM3QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNsQixHQUFHLElBQUksQ0FBQyxrQkFBa0IseUNBQXlDLFVBQVUsRUFBRSxDQUNoRixDQUFDO0lBQ0osQ0FBQztJQUVELDBCQUEwQixDQUN4QixPQUE4QztRQUU5QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNuQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsOERBQThELEVBQ3hGLE9BQU8sQ0FDUixDQUFDO0lBQ0osQ0FBQztJQUVELDZCQUE2QixDQUMzQixPQUFpRDtRQUVqRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNuQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsaUVBQWlFLEVBQzNGLE9BQU8sQ0FDUixDQUFDO0lBQ0osQ0FBQztJQUVELDZCQUE2QixDQUMzQixPQUFpRDtRQUVqRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNuQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsaUVBQWlFLEVBQzNGLE9BQU8sQ0FDUixDQUFDO0lBQ0osQ0FBQztJQUVELCtCQUErQixDQUM3QixPQUF5QztRQUV6QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNuQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsZ0NBQWdDLEVBQzFELE9BQU8sQ0FDUixDQUFDO0lBQ0osQ0FBQztJQUVELHdCQUF3QixDQUN0QiwrQkFBZ0U7UUFFaEUsTUFBTSxPQUFPLEdBQUc7WUFDZCxPQUFPLEVBQUUsSUFBSSxXQUFXLENBQUM7Z0JBQ3ZCLGNBQWMsRUFBRSxrQkFBa0I7YUFDbkMsQ0FBQztTQUNILENBQUM7UUFDRixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNuQixHQUFHLElBQUksQ0FBQyxrQkFBa0Isd0JBQXdCLEVBQ2xELCtCQUErQixFQUMvQixPQUFPLENBQ1IsQ0FBQztJQUNKLENBQUM7SUFFRCwrQkFBK0IsQ0FBQyxPQUF5QztRQUN2RSxNQUFNLE9BQU8sR0FBRztZQUNkLE9BQU8sRUFBRSxJQUFJLFdBQVcsQ0FBQztnQkFDdkIsY0FBYyxFQUFFLGtCQUFrQjthQUNuQyxDQUFDO1lBQ0YsSUFBSSxFQUFFLE9BQU87U0FDZCxDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsZ0NBQWdDLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDL0YsQ0FBQztJQUVELFdBQVcsQ0FBQyxVQUFrQixFQUFFLE9BQWUsQ0FBQztRQUM5QyxJQUFJLE1BQU0sR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQzlCLE1BQU0sR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUM3QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNsQixHQUFHLElBQUksQ0FBQyxrQkFBa0IseUNBQXlDLFVBQVUsUUFBUSxFQUNyRixFQUFDLE1BQU0sRUFBQyxDQUNULENBQUM7SUFDSixDQUFDO0lBRUQsY0FBYyxDQUFDLFVBQWtCLEVBQUUsVUFBa0I7UUFDbkQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDbkIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLGVBQWUsVUFBVSxhQUFhLFVBQVUsRUFBRSxFQUM1RSxFQUFFLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxjQUFjLENBQUMsVUFBa0IsRUFBRSxVQUFrQjtRQUNuRCxNQUFNLE9BQU8sR0FBRztZQUNkLE9BQU8sRUFBRSxJQUFJLFdBQVcsQ0FBQztnQkFDdkIsY0FBYyxFQUFFLGtCQUFrQjthQUNuQyxDQUFDO1NBQ0gsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQ3JCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixlQUFlLFVBQVUsYUFBYSxVQUFVLEVBQUUsRUFDNUUsT0FBTyxDQUNSLENBQUM7SUFDSixDQUFDO0lBRUQsd0JBQXdCLENBQUMsSUFBWTtRQUNuQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUNyQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsMEJBQTBCLElBQUksRUFBRSxDQUMzRCxDQUFDO0lBQ0osQ0FBQztJQUVELFdBQVcsQ0FBQyxVQUFrQixFQUFFLE9BQW1DO1FBQ2pFLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLGVBQWUsVUFBVSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDaEcsQ0FBQztJQUVELGdCQUFnQixDQUFDLHNCQUE4QjtRQUM3QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNsQixHQUFHLElBQUksQ0FBQyxrQkFBa0IseUJBQXlCLHNCQUFzQix3QkFBd0IsQ0FDbEcsQ0FBQztJQUNKLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxzQkFBOEI7UUFDbkQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLDRCQUE0QixzQkFBc0IsVUFBVSxDQUN2RixDQUFDO0lBQ0osQ0FBQztJQUVELHlCQUF5QixDQUN2QixzQkFBOEIsRUFDOUIsb0JBQTRCO1FBRTVCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQiw0QkFBNEIsc0JBQXNCLFVBQVUsRUFDdEY7WUFDRSxvQkFBb0I7WUFDcEIsUUFBUSxFQUFFLGlCQUFpQjtTQUM1QixDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQseUJBQXlCLENBQUMsc0JBQThCO1FBQ3RELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQ3JCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQiw0QkFBNEIsc0JBQXNCLFVBQVUsQ0FDdkYsQ0FBQztJQUNKLENBQUM7SUFFRCxpREFBaUQsQ0FDL0MsaUJBQXlCO1FBRXpCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixrREFBa0QsaUJBQWlCLEVBQUUsQ0FDaEcsQ0FBQztJQUNKLENBQUM7SUFFRCx1QkFBdUIsQ0FDckIsVUFBa0IsRUFDbEIsVUFBa0I7UUFFbEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FDbkIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLGVBQWUsVUFBVSxTQUFTLEVBQzVELEVBQUMsVUFBVSxFQUFDLENBQ2IsQ0FBQztJQUNKLENBQUM7SUFFRCwyQkFBMkIsQ0FBQyxVQUFrQjtRQUM1QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFPLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixlQUFlLFVBQVUsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2xHLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxVQUFrQjtRQUNsQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNsQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsZUFBZSxVQUFVLGlCQUFpQixDQUNyRSxDQUFDO0lBQ0osQ0FBQztJQUVELG9CQUFvQjtRQUNsQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNsQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsbUNBQW1DLENBQzlELENBQUM7SUFDSixDQUFDO0lBRUQsaUJBQWlCLENBQ2Ysc0JBQThCLEVBQzlCLE9BQXFCO1FBRXJCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQ3BCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixXQUFXLHNCQUFzQixXQUFXLEVBQ3RFLEVBQUMsR0FBRyxPQUFPLEVBQUMsQ0FDYixDQUFDO0lBQ0osQ0FBQztJQUVELGVBQWUsQ0FBQyxzQkFBOEI7UUFDNUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLFdBQVcsc0JBQXNCLFdBQVcsQ0FDdkUsQ0FBQztJQUNKLENBQUM7SUFFRCxXQUFXLENBQUMsc0JBQThCO1FBQ3hDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixXQUFXLHNCQUFzQixjQUFjLENBQzFFLENBQUM7SUFDSixDQUFDO0lBRUQsWUFBWSxDQUNWLHNCQUE4QixFQUM5QixPQUF1QjtRQUV2QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUNuQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsV0FBVyxzQkFBc0IsY0FBYyxFQUN6RSxFQUFDLEdBQUcsT0FBTyxFQUFDLENBQ2IsQ0FBQztJQUNKLENBQUM7SUFFRCxXQUFXLENBQ1Qsc0JBQThCLEVBQzlCLE9BQThCO1FBRTlCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixXQUFXLHNCQUFzQixjQUFjLEVBQ3pFLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FDYixDQUFDO0lBQ0osQ0FBQztJQUVELGNBQWMsQ0FBQyxzQkFBOEIsRUFBRSxTQUFpQjtRQUM5RCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUNyQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsV0FBVyxzQkFBc0IsZ0JBQWdCLFNBQVMsRUFBRSxDQUN2RixDQUFDO0lBQ0osQ0FBQztJQUVELG9CQUFvQixDQUFDLFVBQWtCO1FBQ3JDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQix5QkFBeUIsVUFBVSxRQUFRLENBQ3RFLENBQUM7SUFDSixDQUFDOzs0R0EzYlUsZUFBZTtnSEFBZixlQUFlLGNBRmQsTUFBTTsyRkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDIzIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0h0dHBDbGllbnQsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge2NhdGNoRXJyb3IsIE9ic2VydmFibGUsIG9mfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIEFzc2lnbkhhbmRsZXJUb0RvY3VtZW50UmVzdWx0LFxuICBBdWRpdFJlY29yZCxcbiAgQ2FzZUxpc3RDb2x1bW4sXG4gIENhc2VTZXR0aW5ncyxcbiAgRG9jdW1lbnQsXG4gIERvY3VtZW50RGVmaW5pdGlvbixcbiAgRG9jdW1lbnREZWZpbml0aW9uQ3JlYXRlUmVxdWVzdCxcbiAgRG9jdW1lbnREZWZpbml0aW9ucyxcbiAgRG9jdW1lbnRSZXN1bHQsXG4gIERvY3VtZW50cyxcbiAgRG9jdW1lbnRTZW5kTWVzc2FnZVJlcXVlc3QsXG4gIERvY3VtZW50VHlwZSxcbiAgTW9kaWZ5RG9jdW1lbnRBbmRDb21wbGV0ZVRhc2tSZXF1ZXN0SW1wbCxcbiAgTW9kaWZ5RG9jdW1lbnRBbmRDb21wbGV0ZVRhc2tSZXN1bHQsXG4gIE1vZGlmeURvY3VtZW50QW5kU3RhcnRQcm9jZXNzUmVxdWVzdEltcGwsXG4gIE1vZGlmeURvY3VtZW50QW5kU3RhcnRQcm9jZXNzUmVzdWx0LFxuICBOZXdEb2N1bWVudEFuZFN0YXJ0UHJvY2Vzc1JlcXVlc3RJbXBsLFxuICBOZXdEb2N1bWVudEFuZFN0YXJ0UHJvY2Vzc1Jlc3VsdCxcbiAgT3BlbkRvY3VtZW50Q291bnQsXG4gIFBhZ2UsXG4gIFByb2Nlc3NEb2N1bWVudERlZmluaXRpb24sXG4gIFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25SZXF1ZXN0LFxuICBQcm9jZXNzRG9jdW1lbnRJbnN0YW5jZSxcbiAgUmVsYXRlZEZpbGUsXG4gIFNwZWNpZmllZERvY3VtZW50cyxcbiAgVW5kZXBsb3lEb2N1bWVudERlZmluaXRpb25SZXN1bHQsXG4gIFVwbG9hZFByb2Nlc3NMaW5rLFxufSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQge0RvY3VtZW50U2VhcmNoUmVxdWVzdH0gZnJvbSAnLi9kb2N1bWVudC1zZWFyY2gtcmVxdWVzdCc7XG5pbXBvcnQge1xuICBBc3NpZ25lZUZpbHRlcixcbiAgQ29uZmlnU2VydmljZSxcbiAgU2VhcmNoRmllbGQsXG4gIFNlYXJjaEZpbHRlcixcbiAgU2VhcmNoRmlsdGVyUmFuZ2UsXG4gIFNlYXJjaE9wZXJhdG9yLFxuICBVc2VyLFxufSBmcm9tICdAdmFsdGltby9jb25maWcnO1xuaW1wb3J0IHtBZHZhbmNlZERvY3VtZW50U2VhcmNoUmVxdWVzdH0gZnJvbSAnLi9hZHZhbmNlZC1kb2N1bWVudC1zZWFyY2gtcmVxdWVzdCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBEb2N1bWVudFNlcnZpY2Uge1xuICBwcml2YXRlIHZhbHRpbW9FbmRwb2ludFVyaTogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgRU1QVFlfRE9DVU1FTlRTX1JFU1BPTlNFOiBEb2N1bWVudHMgfCBTcGVjaWZpZWREb2N1bWVudHMgPSB7XG4gICAgY29udGVudDogW10sXG4gICAgZW1wdHk6IHRydWUsXG4gICAgZmlyc3Q6IGZhbHNlLFxuICAgIGxhc3Q6IGZhbHNlLFxuICAgIG51bWJlcjogMCxcbiAgICBudW1iZXJPZkVsZW1lbnRzOiAwLFxuICAgIHNpemU6IDAsXG4gICAgc29ydDogZmFsc2UsXG4gICAgdG90YWxFbGVtZW50czogMCxcbiAgICB0b3RhbFBhZ2VzOiAwLFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSkge1xuICAgIHRoaXMudmFsdGltb0VuZHBvaW50VXJpID0gY29uZmlnU2VydmljZS5jb25maWcudmFsdGltb0FwaS5lbmRwb2ludFVyaTtcbiAgfVxuXG4gIC8vIERvY3VtZW50LWNhbGxzXG4gIHB1YmxpYyBnZXRBbGxEZWZpbml0aW9ucygpOiBPYnNlcnZhYmxlPERvY3VtZW50RGVmaW5pdGlvbnM+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxEb2N1bWVudERlZmluaXRpb25zPihgJHt0aGlzLnZhbHRpbW9FbmRwb2ludFVyaX12MS9kb2N1bWVudC1kZWZpbml0aW9uYCk7XG4gIH1cblxuICBxdWVyeURlZmluaXRpb25zKHBhcmFtcz86IGFueSk6IE9ic2VydmFibGU8UGFnZTxEb2N1bWVudERlZmluaXRpb24+PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8UGFnZTxEb2N1bWVudERlZmluaXRpb24+PihcbiAgICAgIGAke3RoaXMudmFsdGltb0VuZHBvaW50VXJpfXYxL2RvY3VtZW50LWRlZmluaXRpb25gLFxuICAgICAge3BhcmFtc31cbiAgICApO1xuICB9XG5cbiAgZ2V0RG9jdW1lbnREZWZpbml0aW9uKGRvY3VtZW50RGVmaW5pdGlvbk5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8RG9jdW1lbnREZWZpbml0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8RG9jdW1lbnREZWZpbml0aW9uPihcbiAgICAgIGAke3RoaXMudmFsdGltb0VuZHBvaW50VXJpfXYxL2RvY3VtZW50LWRlZmluaXRpb24vJHtkb2N1bWVudERlZmluaXRpb25OYW1lfWBcbiAgICApO1xuICB9XG5cbiAgZ2V0RG9jdW1lbnRzKGRvY3VtZW50U2VhcmNoUmVxdWVzdDogRG9jdW1lbnRTZWFyY2hSZXF1ZXN0KTogT2JzZXJ2YWJsZTxEb2N1bWVudHM+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8RG9jdW1lbnRzPihcbiAgICAgIGAke3RoaXMudmFsdGltb0VuZHBvaW50VXJpfXYxL2RvY3VtZW50LXNlYXJjaGAsXG4gICAgICBkb2N1bWVudFNlYXJjaFJlcXVlc3QuYXNIdHRwQm9keSgpLFxuICAgICAge1xuICAgICAgICBwYXJhbXM6IGRvY3VtZW50U2VhcmNoUmVxdWVzdC5hc0h0dHBQYXJhbXMoKSxcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgZ2V0RG9jdW1lbnRzU2VhcmNoKFxuICAgIGRvY3VtZW50U2VhcmNoUmVxdWVzdDogQWR2YW5jZWREb2N1bWVudFNlYXJjaFJlcXVlc3QsXG4gICAgc2VhcmNoT3BlcmF0b3I/OiBTZWFyY2hPcGVyYXRvcixcbiAgICBhc3NpZ25lZUZpbHRlcj86IEFzc2lnbmVlRmlsdGVyLFxuICAgIG90aGVyRmlsdGVycz86IEFycmF5PFNlYXJjaEZpbHRlciB8IFNlYXJjaEZpbHRlclJhbmdlPlxuICApOiBPYnNlcnZhYmxlPERvY3VtZW50cz4ge1xuICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudFNlYXJjaFJlcXVlc3QuYXNIdHRwQm9keSgpO1xuXG4gICAgaWYgKHNlYXJjaE9wZXJhdG9yKSB7XG4gICAgICBib2R5LnNlYXJjaE9wZXJhdG9yID0gc2VhcmNoT3BlcmF0b3I7XG4gICAgfVxuXG4gICAgaWYgKGFzc2lnbmVlRmlsdGVyKSB7XG4gICAgICBib2R5LmFzc2lnbmVlRmlsdGVyID0gYXNzaWduZWVGaWx0ZXI7XG4gICAgfVxuXG4gICAgaWYgKG90aGVyRmlsdGVycykge1xuICAgICAgYm9keS5vdGhlckZpbHRlcnMgPSBvdGhlckZpbHRlcnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8RG9jdW1lbnRzPihcbiAgICAgICAgYCR7dGhpcy52YWx0aW1vRW5kcG9pbnRVcml9djEvZG9jdW1lbnQtZGVmaW5pdGlvbi8ke2RvY3VtZW50U2VhcmNoUmVxdWVzdC5kZWZpbml0aW9uTmFtZX0vc2VhcmNoYCxcbiAgICAgICAgYm9keSxcbiAgICAgICAge3BhcmFtczogZG9jdW1lbnRTZWFyY2hSZXF1ZXN0LmFzSHR0cFBhcmFtcygpfVxuICAgICAgKVxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcigoKSA9PiBvZih0aGlzLkVNUFRZX0RPQ1VNRU5UU19SRVNQT05TRSBhcyBEb2N1bWVudHMpKSk7XG4gIH1cblxuICBnZXRTcGVjaWZpZWREb2N1bWVudHNTZWFyY2goXG4gICAgZG9jdW1lbnRTZWFyY2hSZXF1ZXN0OiBBZHZhbmNlZERvY3VtZW50U2VhcmNoUmVxdWVzdCxcbiAgICBzZWFyY2hPcGVyYXRvcj86IFNlYXJjaE9wZXJhdG9yLFxuICAgIGFzc2lnbmVlRmlsdGVyPzogQXNzaWduZWVGaWx0ZXIsXG4gICAgb3RoZXJGaWx0ZXJzPzogQXJyYXk8U2VhcmNoRmlsdGVyIHwgU2VhcmNoRmlsdGVyUmFuZ2U+XG4gICk6IE9ic2VydmFibGU8U3BlY2lmaWVkRG9jdW1lbnRzPiB7XG4gICAgY29uc3QgYm9keSA9IGRvY3VtZW50U2VhcmNoUmVxdWVzdC5hc0h0dHBCb2R5KCk7XG5cbiAgICBpZiAoc2VhcmNoT3BlcmF0b3IpIHtcbiAgICAgIGJvZHkuc2VhcmNoT3BlcmF0b3IgPSBzZWFyY2hPcGVyYXRvcjtcbiAgICB9XG5cbiAgICBpZiAoYXNzaWduZWVGaWx0ZXIpIHtcbiAgICAgIGJvZHkuYXNzaWduZWVGaWx0ZXIgPSBhc3NpZ25lZUZpbHRlcjtcbiAgICB9XG5cbiAgICBpZiAob3RoZXJGaWx0ZXJzKSB7XG4gICAgICBib2R5Lm90aGVyRmlsdGVycyA9IG90aGVyRmlsdGVycztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdDxTcGVjaWZpZWREb2N1bWVudHM+KFxuICAgICAgICBgJHt0aGlzLnZhbHRpbW9FbmRwb2ludFVyaX12MS9jYXNlLyR7ZG9jdW1lbnRTZWFyY2hSZXF1ZXN0LmRlZmluaXRpb25OYW1lfS9zZWFyY2hgLFxuICAgICAgICBib2R5LFxuICAgICAgICB7cGFyYW1zOiBkb2N1bWVudFNlYXJjaFJlcXVlc3QuYXNIdHRwUGFyYW1zKCl9XG4gICAgICApXG4gICAgICAucGlwZShjYXRjaEVycm9yKCgpID0+IG9mKHRoaXMuRU1QVFlfRE9DVU1FTlRTX1JFU1BPTlNFIGFzIFNwZWNpZmllZERvY3VtZW50cykpKTtcbiAgfVxuXG4gIGdldERvY3VtZW50U2VhcmNoRmllbGRzKGRvY3VtZW50RGVmaW5pdGlvbk5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8QXJyYXk8U2VhcmNoRmllbGQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXJyYXk8U2VhcmNoRmllbGQ+PihcbiAgICAgIGAke3RoaXMudmFsdGltb0VuZHBvaW50VXJpfXYxL2RvY3VtZW50LXNlYXJjaC8ke2RvY3VtZW50RGVmaW5pdGlvbk5hbWV9L2ZpZWxkc2BcbiAgICApO1xuICB9XG5cbiAgcHV0RG9jdW1lbnRTZWFyY2goZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nLCByZXF1ZXN0OiBBcnJheTxTZWFyY2hGaWVsZD4pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDx2b2lkPihcbiAgICAgIGAke3RoaXMudmFsdGltb0VuZHBvaW50VXJpfXYxL2RvY3VtZW50LXNlYXJjaC8ke2RvY3VtZW50RGVmaW5pdGlvbk5hbWV9L2ZpZWxkc2AsXG4gICAgICBbLi4ucmVxdWVzdF1cbiAgICApO1xuICB9XG5cbiAgcG9zdERvY3VtZW50U2VhcmNoKGRvY3VtZW50RGVmaW5pdGlvbk5hbWU6IHN0cmluZywgcmVxdWVzdDogU2VhcmNoRmllbGQpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8dm9pZD4oXG4gICAgICBgJHt0aGlzLnZhbHRpbW9FbmRwb2ludFVyaX12MS9kb2N1bWVudC1zZWFyY2gvJHtkb2N1bWVudERlZmluaXRpb25OYW1lfS9maWVsZHNgLFxuICAgICAgey4uLnJlcXVlc3R9XG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZURvY3VtZW50U2VhcmNoKGRvY3VtZW50RGVmaW5pdGlvbk5hbWU6IHN0cmluZywga2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgfSksXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZShcbiAgICAgIGAke3RoaXMudmFsdGltb0VuZHBvaW50VXJpfXYxL2RvY3VtZW50LXNlYXJjaC8ke2RvY3VtZW50RGVmaW5pdGlvbk5hbWV9L2ZpZWxkcz9rZXk9JHtrZXl9YCxcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuICB9XG5cbiAgZ2V0RHJvcGRvd25EYXRhUHJvdmlkZXJzKCk6IE9ic2VydmFibGU8QXJyYXk8c3RyaW5nPj4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFycmF5PHN0cmluZz4+KGAke3RoaXMudmFsdGltb0VuZHBvaW50VXJpfXYxL2RhdGEvZHJvcGRvd24tbGlzdC9wcm92aWRlcmApO1xuICB9XG5cbiAgZ2V0RHJvcGRvd25EYXRhKFxuICAgIHByb3ZpZGVyOiBzdHJpbmcsXG4gICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nLFxuICAgIGZpZWxkS2V5OiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxvYmplY3Q+IHtcbiAgICBjb25zdCBkcm9wZG93bkxpc3RLZXkgPSBlbmNvZGVVUkkoZG9jdW1lbnREZWZpbml0aW9uTmFtZSArICdfJyArIGZpZWxkS2V5KTtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxvYmplY3Q+KFxuICAgICAgYCR7dGhpcy52YWx0aW1vRW5kcG9pbnRVcml9djEvZGF0YS9kcm9wZG93bi1saXN0P3Byb3ZpZGVyPSR7cHJvdmlkZXJ9JmtleT0ke2Ryb3Bkb3duTGlzdEtleX1gXG4gICAgKTtcbiAgfVxuXG4gIHBvc3REcm9wZG93bkRhdGEoXG4gICAgcHJvdmlkZXI6IHN0cmluZyxcbiAgICBkb2N1bWVudERlZmluaXRpb25OYW1lOiBzdHJpbmcsXG4gICAgZmllbGRLZXk6IHN0cmluZyxcbiAgICBkcm9wZG93bkRhdGE6IG9iamVjdFxuICApOiBPYnNlcnZhYmxlPG9iamVjdD4ge1xuICAgIGNvbnN0IGRyb3Bkb3duTGlzdEtleSA9IGVuY29kZVVSSShkb2N1bWVudERlZmluaXRpb25OYW1lICsgJ18nICsgZmllbGRLZXkpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxvYmplY3Q+KFxuICAgICAgYCR7dGhpcy52YWx0aW1vRW5kcG9pbnRVcml9djEvZGF0YS9kcm9wZG93bi1saXN0P3Byb3ZpZGVyPSR7cHJvdmlkZXJ9JmtleT0ke2Ryb3Bkb3duTGlzdEtleX1gLFxuICAgICAgZHJvcGRvd25EYXRhXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZURyb3Bkb3duRGF0YShcbiAgICBwcm92aWRlcjogc3RyaW5nLFxuICAgIGRvY3VtZW50RGVmaW5pdGlvbk5hbWU6IHN0cmluZyxcbiAgICBmaWVsZEtleTogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8b2JqZWN0PiB7XG4gICAgY29uc3QgZHJvcGRvd25MaXN0S2V5ID0gZW5jb2RlVVJJKGRvY3VtZW50RGVmaW5pdGlvbk5hbWUgKyAnXycgKyBmaWVsZEtleSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGU8b2JqZWN0PihcbiAgICAgIGAke3RoaXMudmFsdGltb0VuZHBvaW50VXJpfXYxL2RhdGEvZHJvcGRvd24tbGlzdD9wcm92aWRlcj0ke3Byb3ZpZGVyfSZrZXk9JHtkcm9wZG93bkxpc3RLZXl9YFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RG9jdW1lbnRSb2xlcyhkb2N1bWVudERlZmluaXRpb25OYW1lOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEFycmF5PHN0cmluZz4+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcnJheTxzdHJpbmc+PihcbiAgICAgIGAke3RoaXMudmFsdGltb0VuZHBvaW50VXJpfXYxL2RvY3VtZW50LWRlZmluaXRpb24vJHtkb2N1bWVudERlZmluaXRpb25OYW1lfS9yb2xlc2BcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG1vZGlmeURvY3VtZW50Um9sZXMoZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nLCByb2xlczogYW55KTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQ8dm9pZD4oXG4gICAgICBgJHt0aGlzLnZhbHRpbW9FbmRwb2ludFVyaX12MS9kb2N1bWVudC1kZWZpbml0aW9uLyR7ZG9jdW1lbnREZWZpbml0aW9uTmFtZX0vcm9sZXNgLFxuICAgICAgcm9sZXNcbiAgICApO1xuICB9XG5cbiAgZ2V0RG9jdW1lbnQoZG9jdW1lbnRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxEb2N1bWVudD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PERvY3VtZW50PihgJHt0aGlzLnZhbHRpbW9FbmRwb2ludFVyaX12MS9kb2N1bWVudC8ke2RvY3VtZW50SWR9YCk7XG4gIH1cblxuICBtb2RpZnlEb2N1bWVudChkb2N1bWVudDogYW55KTogT2JzZXJ2YWJsZTxEb2N1bWVudFJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PERvY3VtZW50UmVzdWx0PihgJHt0aGlzLnZhbHRpbW9FbmRwb2ludFVyaX12MS9kb2N1bWVudGAsIGRvY3VtZW50KTtcbiAgfVxuXG4gIC8vIFByb2Nlc3NEb2N1bWVudC1jYWxsc1xuICBnZXRQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9ucygpOiBPYnNlcnZhYmxlPFByb2Nlc3NEb2N1bWVudERlZmluaXRpb24+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uPihcbiAgICAgIGAke3RoaXMudmFsdGltb0VuZHBvaW50VXJpfXYxL3Byb2Nlc3MtZG9jdW1lbnQvZGVmaW5pdGlvbmBcbiAgICApO1xuICB9XG5cbiAgZmluZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zKFxuICAgIGRvY3VtZW50RGVmaW5pdGlvbk5hbWU6IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25bXT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25bXT4oXG4gICAgICBgJHt0aGlzLnZhbHRpbW9FbmRwb2ludFVyaX12MS9wcm9jZXNzLWRvY3VtZW50L2RlZmluaXRpb24vZG9jdW1lbnQvJHtkb2N1bWVudERlZmluaXRpb25OYW1lfWBcbiAgICApO1xuICB9XG5cbiAgZmluZFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25zQnlQcm9jZXNzRGVmaW5pdGlvbktleShcbiAgICBwcm9jZXNzRGVmaW5pdGlvbktleTogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8UHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbltdPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8UHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbltdPihcbiAgICAgIGAke3RoaXMudmFsdGltb0VuZHBvaW50VXJpfXYxL3Byb2Nlc3MtZG9jdW1lbnQvZGVmaW5pdGlvbi9wcm9jZXNzLyR7cHJvY2Vzc0RlZmluaXRpb25LZXl9YFxuICAgICk7XG4gIH1cblxuICBmaW5kUHJvY2Vzc0RvY3VtZW50SW5zdGFuY2VzKGRvY3VtZW50SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8UHJvY2Vzc0RvY3VtZW50SW5zdGFuY2VbXT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFByb2Nlc3NEb2N1bWVudEluc3RhbmNlW10+KFxuICAgICAgYCR7dGhpcy52YWx0aW1vRW5kcG9pbnRVcml9djEvcHJvY2Vzcy1kb2N1bWVudC9pbnN0YW5jZS9kb2N1bWVudC8ke2RvY3VtZW50SWR9YFxuICAgICk7XG4gIH1cblxuICBuZXdEb2N1bWVudEFuZFN0YXJ0UHJvY2VzcyhcbiAgICByZXF1ZXN0OiBOZXdEb2N1bWVudEFuZFN0YXJ0UHJvY2Vzc1JlcXVlc3RJbXBsXG4gICk6IE9ic2VydmFibGU8TmV3RG9jdW1lbnRBbmRTdGFydFByb2Nlc3NSZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8TmV3RG9jdW1lbnRBbmRTdGFydFByb2Nlc3NSZXN1bHQ+KFxuICAgICAgYCR7dGhpcy52YWx0aW1vRW5kcG9pbnRVcml9djEvcHJvY2Vzcy1kb2N1bWVudC9vcGVyYXRpb24vbmV3LWRvY3VtZW50LWFuZC1zdGFydC1wcm9jZXNzYCxcbiAgICAgIHJlcXVlc3RcbiAgICApO1xuICB9XG5cbiAgbW9kaWZ5RG9jdW1lbnRBbmRDb21wbGV0ZVRhc2soXG4gICAgcmVxdWVzdDogTW9kaWZ5RG9jdW1lbnRBbmRDb21wbGV0ZVRhc2tSZXF1ZXN0SW1wbFxuICApOiBPYnNlcnZhYmxlPE1vZGlmeURvY3VtZW50QW5kQ29tcGxldGVUYXNrUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PE1vZGlmeURvY3VtZW50QW5kQ29tcGxldGVUYXNrUmVzdWx0PihcbiAgICAgIGAke3RoaXMudmFsdGltb0VuZHBvaW50VXJpfXYxL3Byb2Nlc3MtZG9jdW1lbnQvb3BlcmF0aW9uL21vZGlmeS1kb2N1bWVudC1hbmQtY29tcGxldGUtdGFza2AsXG4gICAgICByZXF1ZXN0XG4gICAgKTtcbiAgfVxuXG4gIG1vZGlmeURvY3VtZW50QW5kU3RhcnRQcm9jZXNzKFxuICAgIHJlcXVlc3Q6IE1vZGlmeURvY3VtZW50QW5kU3RhcnRQcm9jZXNzUmVxdWVzdEltcGxcbiAgKTogT2JzZXJ2YWJsZTxNb2RpZnlEb2N1bWVudEFuZFN0YXJ0UHJvY2Vzc1Jlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxNb2RpZnlEb2N1bWVudEFuZFN0YXJ0UHJvY2Vzc1Jlc3VsdD4oXG4gICAgICBgJHt0aGlzLnZhbHRpbW9FbmRwb2ludFVyaX12MS9wcm9jZXNzLWRvY3VtZW50L29wZXJhdGlvbi9tb2RpZnktZG9jdW1lbnQtYW5kLXN0YXJ0LXByb2Nlc3NgLFxuICAgICAgcmVxdWVzdFxuICAgICk7XG4gIH1cblxuICBjcmVhdGVQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uKFxuICAgIHJlcXVlc3Q6IFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25SZXF1ZXN0XG4gICk6IE9ic2VydmFibGU8UHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxQcm9jZXNzRG9jdW1lbnREZWZpbml0aW9uPihcbiAgICAgIGAke3RoaXMudmFsdGltb0VuZHBvaW50VXJpfXYxL3Byb2Nlc3MtZG9jdW1lbnQvZGVmaW5pdGlvbmAsXG4gICAgICByZXF1ZXN0XG4gICAgKTtcbiAgfVxuXG4gIGNyZWF0ZURvY3VtZW50RGVmaW5pdGlvbihcbiAgICBkb2N1bWVudERlZmluaXRpb25DcmVhdGVSZXF1ZXN0OiBEb2N1bWVudERlZmluaXRpb25DcmVhdGVSZXF1ZXN0XG4gICk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgfSksXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3Q8dm9pZD4oXG4gICAgICBgJHt0aGlzLnZhbHRpbW9FbmRwb2ludFVyaX12MS9kb2N1bWVudC1kZWZpbml0aW9uYCxcbiAgICAgIGRvY3VtZW50RGVmaW5pdGlvbkNyZWF0ZVJlcXVlc3QsXG4gICAgICBvcHRpb25zXG4gICAgKTtcbiAgfVxuXG4gIGRlbGV0ZVByb2Nlc3NEb2N1bWVudERlZmluaXRpb24ocmVxdWVzdDogUHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvblJlcXVlc3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICBoZWFkZXJzOiBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgfSksXG4gICAgICBib2R5OiByZXF1ZXN0LFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5kZWxldGUoYCR7dGhpcy52YWx0aW1vRW5kcG9pbnRVcml9djEvcHJvY2Vzcy1kb2N1bWVudC9kZWZpbml0aW9uYCwgb3B0aW9ucyk7XG4gIH1cblxuICBnZXRBdWRpdExvZyhkb2N1bWVudElkOiBzdHJpbmcsIHBhZ2U6IG51bWJlciA9IDApOiBPYnNlcnZhYmxlPFBhZ2U8QXVkaXRSZWNvcmQ+PiB7XG4gICAgbGV0IHBhcmFtcyA9IG5ldyBIdHRwUGFyYW1zKCk7XG4gICAgcGFyYW1zID0gcGFyYW1zLnNldCgncGFnZScsIHBhZ2UudG9TdHJpbmcoKSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8UGFnZTxBdWRpdFJlY29yZD4+KFxuICAgICAgYCR7dGhpcy52YWx0aW1vRW5kcG9pbnRVcml9djEvcHJvY2Vzcy1kb2N1bWVudC9pbnN0YW5jZS9kb2N1bWVudC8ke2RvY3VtZW50SWR9L2F1ZGl0YCxcbiAgICAgIHtwYXJhbXN9XG4gICAgKTtcbiAgfVxuXG4gIGFzc2lnblJlc291cmNlKGRvY3VtZW50SWQ6IHN0cmluZywgcmVzb3VyY2VJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PHZvaWQ+KFxuICAgICAgYCR7dGhpcy52YWx0aW1vRW5kcG9pbnRVcml9djEvZG9jdW1lbnQvJHtkb2N1bWVudElkfS9yZXNvdXJjZS8ke3Jlc291cmNlSWR9YCxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuXG4gIHJlbW92ZVJlc291cmNlKGRvY3VtZW50SWQ6IHN0cmluZywgcmVzb3VyY2VJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICB9KSxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPHZvaWQ+KFxuICAgICAgYCR7dGhpcy52YWx0aW1vRW5kcG9pbnRVcml9djEvZG9jdW1lbnQvJHtkb2N1bWVudElkfS9yZXNvdXJjZS8ke3Jlc291cmNlSWR9YCxcbiAgICAgIG9wdGlvbnNcbiAgICApO1xuICB9XG5cbiAgcmVtb3ZlRG9jdW1lbnREZWZpbml0aW9uKG5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8VW5kZXBsb3lEb2N1bWVudERlZmluaXRpb25SZXN1bHQ+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmRlbGV0ZTxVbmRlcGxveURvY3VtZW50RGVmaW5pdGlvblJlc3VsdD4oXG4gICAgICBgJHt0aGlzLnZhbHRpbW9FbmRwb2ludFVyaX12MS9kb2N1bWVudC1kZWZpbml0aW9uLyR7bmFtZX1gXG4gICAgKTtcbiAgfVxuXG4gIHNlbmRNZXNzYWdlKGRvY3VtZW50SWQ6IHN0cmluZywgcmVxdWVzdDogRG9jdW1lbnRTZW5kTWVzc2FnZVJlcXVlc3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChgJHt0aGlzLnZhbHRpbW9FbmRwb2ludFVyaX12MS9kb2N1bWVudC8ke2RvY3VtZW50SWR9L21lc3NhZ2VgLCByZXF1ZXN0KTtcbiAgfVxuXG4gIGdldERvY3VtZW50VHlwZXMoZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxBcnJheTxEb2N1bWVudFR5cGU+PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXJyYXk8RG9jdW1lbnRUeXBlPj4oXG4gICAgICBgJHt0aGlzLnZhbHRpbW9FbmRwb2ludFVyaX12MS9kb2N1bWVudGRlZmluaXRpb24vJHtkb2N1bWVudERlZmluaXRpb25OYW1lfS96YWFrdHlwZS9kb2N1bWVudHR5cGVgXG4gICAgKTtcbiAgfVxuXG4gIGdldExpbmtlZFVwbG9hZFByb2Nlc3MoZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxVcGxvYWRQcm9jZXNzTGluaz4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFVwbG9hZFByb2Nlc3NMaW5rPihcbiAgICAgIGAke3RoaXMudmFsdGltb0VuZHBvaW50VXJpfXYxL3Byb2Nlc3MtZG9jdW1lbnQvZGVtby8ke2RvY3VtZW50RGVmaW5pdGlvbk5hbWV9L3Byb2Nlc3NgXG4gICAgKTtcbiAgfVxuXG4gIHVwZGF0ZUxpbmtlZFVwbG9hZFByb2Nlc3MoXG4gICAgZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nLFxuICAgIHByb2Nlc3NEZWZpbml0aW9uS2V5OiBzdHJpbmdcbiAgKTogT2JzZXJ2YWJsZTxVcGxvYWRQcm9jZXNzTGluaz4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0PFVwbG9hZFByb2Nlc3NMaW5rPihcbiAgICAgIGAke3RoaXMudmFsdGltb0VuZHBvaW50VXJpfXYxL3Byb2Nlc3MtZG9jdW1lbnQvZGVtby8ke2RvY3VtZW50RGVmaW5pdGlvbk5hbWV9L3Byb2Nlc3NgLFxuICAgICAge1xuICAgICAgICBwcm9jZXNzRGVmaW5pdGlvbktleSxcbiAgICAgICAgbGlua1R5cGU6ICdET0NVTUVOVF9VUExPQUQnLFxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBkZWxldGVMaW5rZWRVcGxvYWRQcm9jZXNzKGRvY3VtZW50RGVmaW5pdGlvbk5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPHZvaWQ+KFxuICAgICAgYCR7dGhpcy52YWx0aW1vRW5kcG9pbnRVcml9djEvcHJvY2Vzcy1kb2N1bWVudC9kZW1vLyR7ZG9jdW1lbnREZWZpbml0aW9uTmFtZX0vcHJvY2Vzc2BcbiAgICApO1xuICB9XG5cbiAgZ2V0UHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbkZyb21Qcm9jZXNzSW5zdGFuY2VJZChcbiAgICBwcm9jZXNzSW5zdGFuY2VJZDogc3RyaW5nXG4gICk6IE9ic2VydmFibGU8UHJvY2Vzc0RvY3VtZW50RGVmaW5pdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFByb2Nlc3NEb2N1bWVudERlZmluaXRpb24+KFxuICAgICAgYCR7dGhpcy52YWx0aW1vRW5kcG9pbnRVcml9djEvcHJvY2Vzcy1kb2N1bWVudC9kZWZpbml0aW9uL3Byb2Nlc3NpbnN0YW5jZS8ke3Byb2Nlc3NJbnN0YW5jZUlkfWBcbiAgICApO1xuICB9XG5cbiAgYXNzaWduSGFuZGxlclRvRG9jdW1lbnQoXG4gICAgZG9jdW1lbnRJZDogc3RyaW5nLFxuICAgIGFzc2lnbmVlSWQ6IHN0cmluZ1xuICApOiBPYnNlcnZhYmxlPEFzc2lnbkhhbmRsZXJUb0RvY3VtZW50UmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PEFzc2lnbkhhbmRsZXJUb0RvY3VtZW50UmVzdWx0PihcbiAgICAgIGAke3RoaXMudmFsdGltb0VuZHBvaW50VXJpfXYxL2RvY3VtZW50LyR7ZG9jdW1lbnRJZH0vYXNzaWduYCxcbiAgICAgIHthc3NpZ25lZUlkfVxuICAgICk7XG4gIH1cblxuICB1bmFzc2lnbkhhbmRsZXJGcm9tRG9jdW1lbnQoZG9jdW1lbnRJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0PHZvaWQ+KGAke3RoaXMudmFsdGltb0VuZHBvaW50VXJpfXYxL2RvY3VtZW50LyR7ZG9jdW1lbnRJZH0vdW5hc3NpZ25gLCB7fSk7XG4gIH1cblxuICBnZXRDYW5kaWRhdGVVc2Vycyhkb2N1bWVudElkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEFycmF5PFVzZXI+PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXJyYXk8VXNlcj4+KFxuICAgICAgYCR7dGhpcy52YWx0aW1vRW5kcG9pbnRVcml9djEvZG9jdW1lbnQvJHtkb2N1bWVudElkfS9jYW5kaWRhdGUtdXNlcmBcbiAgICApO1xuICB9XG5cbiAgZ2V0T3BlbkRvY3VtZW50Q291bnQoKTogT2JzZXJ2YWJsZTxBcnJheTxPcGVuRG9jdW1lbnRDb3VudD4+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxBcnJheTxPcGVuRG9jdW1lbnRDb3VudD4+KFxuICAgICAgYCR7dGhpcy52YWx0aW1vRW5kcG9pbnRVcml9djEvZG9jdW1lbnQtZGVmaW5pdGlvbi9vcGVuL2NvdW50YFxuICAgICk7XG4gIH1cblxuICBwYXRjaENhc2VTZXR0aW5ncyhcbiAgICBkb2N1bWVudERlZmluaXRpb25OYW1lOiBzdHJpbmcsXG4gICAgcmVxdWVzdDogQ2FzZVNldHRpbmdzXG4gICk6IE9ic2VydmFibGU8Q2FzZVNldHRpbmdzPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wYXRjaDxDYXNlU2V0dGluZ3M+KFxuICAgICAgYCR7dGhpcy52YWx0aW1vRW5kcG9pbnRVcml9djEvY2FzZS8ke2RvY3VtZW50RGVmaW5pdGlvbk5hbWV9L3NldHRpbmdzYCxcbiAgICAgIHsuLi5yZXF1ZXN0fVxuICAgICk7XG4gIH1cblxuICBnZXRDYXNlU2V0dGluZ3MoZG9jdW1lbnREZWZpbml0aW9uTmFtZTogc3RyaW5nKTogT2JzZXJ2YWJsZTxDYXNlU2V0dGluZ3M+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldDxDYXNlU2V0dGluZ3M+KFxuICAgICAgYCR7dGhpcy52YWx0aW1vRW5kcG9pbnRVcml9djEvY2FzZS8ke2RvY3VtZW50RGVmaW5pdGlvbk5hbWV9L3NldHRpbmdzYFxuICAgICk7XG4gIH1cblxuICBnZXRDYXNlTGlzdChkb2N1bWVudERlZmluaXRpb25OYW1lOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEFycmF5PENhc2VMaXN0Q29sdW1uPj4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PEFycmF5PENhc2VMaXN0Q29sdW1uPj4oXG4gICAgICBgJHt0aGlzLnZhbHRpbW9FbmRwb2ludFVyaX12MS9jYXNlLyR7ZG9jdW1lbnREZWZpbml0aW9uTmFtZX0vbGlzdC1jb2x1bW5gXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RDYXNlTGlzdChcbiAgICBkb2N1bWVudERlZmluaXRpb25OYW1lOiBzdHJpbmcsXG4gICAgcmVxdWVzdDogQ2FzZUxpc3RDb2x1bW5cbiAgKTogT2JzZXJ2YWJsZTxDYXNlTGlzdENvbHVtbj4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdDxDYXNlTGlzdENvbHVtbj4oXG4gICAgICBgJHt0aGlzLnZhbHRpbW9FbmRwb2ludFVyaX12MS9jYXNlLyR7ZG9jdW1lbnREZWZpbml0aW9uTmFtZX0vbGlzdC1jb2x1bW5gLFxuICAgICAgey4uLnJlcXVlc3R9XG4gICAgKTtcbiAgfVxuXG4gIHB1dENhc2VMaXN0KFxuICAgIGRvY3VtZW50RGVmaW5pdGlvbk5hbWU6IHN0cmluZyxcbiAgICByZXF1ZXN0OiBBcnJheTxDYXNlTGlzdENvbHVtbj5cbiAgKTogT2JzZXJ2YWJsZTxBcnJheTxDYXNlTGlzdENvbHVtbj4+IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dDxBcnJheTxDYXNlTGlzdENvbHVtbj4+KFxuICAgICAgYCR7dGhpcy52YWx0aW1vRW5kcG9pbnRVcml9djEvY2FzZS8ke2RvY3VtZW50RGVmaW5pdGlvbk5hbWV9L2xpc3QtY29sdW1uYCxcbiAgICAgIFsuLi5yZXF1ZXN0XVxuICAgICk7XG4gIH1cblxuICBkZWxldGVDYXNlTGlzdChkb2N1bWVudERlZmluaXRpb25OYW1lOiBzdHJpbmcsIGNvbHVtbktleTogc3RyaW5nKTogT2JzZXJ2YWJsZTxDYXNlTGlzdENvbHVtbj4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZGVsZXRlPENhc2VMaXN0Q29sdW1uPihcbiAgICAgIGAke3RoaXMudmFsdGltb0VuZHBvaW50VXJpfXYxL2Nhc2UvJHtkb2N1bWVudERlZmluaXRpb25OYW1lfS9saXN0LWNvbHVtbi8ke2NvbHVtbktleX1gXG4gICAgKTtcbiAgfVxuXG4gIGdldFpha2VuQXBpRG9jdW1lbnRzKGRvY3VtZW50SWQ6IHN0cmluZyk6IE9ic2VydmFibGU8QXJyYXk8UmVsYXRlZEZpbGU+PiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8QXJyYXk8UmVsYXRlZEZpbGU+PihcbiAgICAgIGAke3RoaXMudmFsdGltb0VuZHBvaW50VXJpfXYxL3pha2VuLWFwaS9kb2N1bWVudC8ke2RvY3VtZW50SWR9L2ZpbGVzYFxuICAgICk7XG4gIH1cbn1cbiJdfQ==