@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.
- package/{esm2020 → esm2022}/lib/document.module.mjs +5 -5
- package/esm2022/lib/document.service.mjs +250 -0
- package/{esm2020 → esm2022}/lib/models/document.model.mjs +1 -1
- package/{fesm2020 → fesm2022}/valtimo-document.mjs +46 -45
- package/fesm2022/valtimo-document.mjs.map +1 -0
- package/lib/document.service.d.ts +12 -10
- package/lib/document.service.d.ts.map +1 -1
- package/lib/models/document.model.d.ts +2 -2
- package/lib/models/document.model.d.ts.map +1 -1
- package/lib/models/list-sorting.model.d.ts +1 -1
- package/lib/models/list-sorting.model.d.ts.map +1 -1
- package/package.json +8 -14
- package/esm2020/lib/document.service.mjs +0 -252
- package/fesm2015/valtimo-document.mjs +0 -485
- package/fesm2015/valtimo-document.mjs.map +0 -1
- package/fesm2020/valtimo-document.mjs.map +0 -1
- /package/{esm2020 → esm2022}/lib/advanced-document-search-request.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/document-search-request.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/audit.model.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/index.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/models/list-sorting.model.mjs +0 -0
- /package/{esm2020 → esm2022}/public_api.mjs +0 -0
- /package/{esm2020 → esm2022}/valtimo-document.mjs +0 -0
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9jdW1lbnQvc3JjL2xpYi9kb2N1bWVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQWEsV0FBVyxFQUFFLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3pFLE9BQU8sRUFBQyxVQUFVLEVBQWMsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDOzs7O0FBNkNoRCxNQUFNLE9BQU8sZUFBZTtJQWdCMUIsWUFBb0IsSUFBZ0IsRUFBRSxhQUE0QjtRQUE5QyxTQUFJLEdBQUosSUFBSSxDQUFZO1FBYm5CLDZCQUF3QixHQUFtQztZQUMxRSxPQUFPLEVBQUUsRUFBRTtZQUNYLEtBQUssRUFBRSxJQUFJO1lBQ1gsS0FBSyxFQUFFLEtBQUs7WUFDWixJQUFJLEVBQUUsS0FBSztZQUNYLE1BQU0sRUFBRSxDQUFDO1lBQ1QsZ0JBQWdCLEVBQUUsQ0FBQztZQUNuQixJQUFJLEVBQUUsQ0FBQztZQUNQLElBQUksRUFBRSxLQUFLO1lBQ1gsYUFBYSxFQUFFLENBQUM7WUFDaEIsVUFBVSxFQUFFLENBQUM7U0FDZCxDQUFDO1FBR0EsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQztJQUN4RSxDQUFDO0lBRUQsaUJBQWlCO0lBQ1YsaUJBQWlCO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQXNCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQix3QkFBd0IsQ0FBQyxDQUFDO0lBQ2hHLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxNQUFZO1FBQzNCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENB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Q2xCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQix5QkFBeUIsVUFBVSxRQUFRLENBQ3RFLENBQUM7SUFDSixDQUFDOzs0R0EzYlUsZUFBZTtnSEFBZixlQUFlLGNBRmQsTUFBTTsyRkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNS0yMDIzIFJpdGVuc2UgQlYsIHRoZSBOZXRoZXJsYW5kcy5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHBzOi8vam9pbnVwLmVjLmV1cm9wYS5ldS9jb2xsZWN0aW9uL2V1cGwvZXVwbC10ZXh0LWV1cGwtMTJcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgYmFzaXMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7SW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0h0dHBDbGllbnQsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge2NhdGNoRXJyb3IsIE9ic2VydmFibGUsIG9mfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIEFzc2lnbkhhbmRsZXJUb0RvY3VtZW50UmVzdWx0LFxuICBBdWRpdFJlY29yZCxcbiAgQ2FzZUxpc3RDb2x1bW4sXG4gIENhc2VTZXR0aW5ncyxcbiAgRG9jdW1lbnQsXG4gIERvY3VtZW50RGVmaW5pdGlvbixcbiAgRG9jdW1lbnREZWZpbml0aW9uQ3JlYXRlUmVxdWVzdCxcbiAgRG9jdW1lbnREZWZpbml0aW9ucyxcbiAgRG9jdW1lbnRSZXN1bHQsXG4gIERvY3VtZW50cyxcbiAgRG9jdW1lbnRTZW5kTWVzc2FnZVJlcXVlc3QsXG4gIERvY3VtZW50VHlwZSxcbiAgTW9kaWZ5RG9jdW1lbnRBbmRDb21wbGV0ZVRhc2tSZXF1ZXN0SW1wbCxcbiAgTW9kaWZ5RG9jdW1lbnRBbmRDb21wbGV0ZVRhc2tSZXN1bHQsXG4gIE1vZGlmeURvY3VtZW50QW5kU3RhcnRQcm9jZXNzUmVxdWVzdEltcGwsXG4gIE1vZGlmeURvY3VtZW50QW5kU3RhcnRQcm9jZXNzUmVzdWx0LFxuICBOZXdEb2N1bWVudEFuZFN0YXJ0UHJvY2Vzc1JlcXVlc3RJbXBsLFxuICBOZXdEb2N1bWVudEFuZFN0YXJ0UHJvY2Vzc1Jlc3VsdCxcbiAgT3BlbkRvY3VtZW50Q291bnQsXG4gIFBhZ2UsXG4gIFByb2Nlc3NEb2N1bWVudERlZmluaXRpb24sXG4gIFByb2Nlc3NEb2N1bWVudERlZmluaXRpb25SZXF1ZXN0LFxuICBQcm9jZXNzRG9jdW1lbnRJbnN0YW5jZSxcbiAgUmVsYXRlZEZpbGUsXG4gIFNwZWNpZmllZERvY3VtZW50cyxcbiAgVW5kZXBsb3lEb2N1bWVudERlZmluaXRpb25SZXN1bHQsXG4gIFVwbG9hZFByb2Nlc3NMaW5rLFxufSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQge0RvY3VtZW50U2VhcmNoUmVxdWVzdH0gZnJvbSAnLi9kb2N1bWVudC1zZWFyY2gtcmVxdWVzdCc7XG5pbXBvcnQge1xuICBBc3NpZ25lZUZpbHRlcixcbiAgQ29uZmlnU2VydmljZSxcbiAgU2VhcmNoRmllbGQsXG4gIFNlYXJjaEZpbHRlcixcbiAgU2VhcmNoRmlsdGVyUmFuZ2UsXG4gIFNlYXJjaE9wZXJhdG9yLFxuICBVc2VyLFxufSBmcm9tICdAdmFsdGltby9jb25maWcnO1xuaW1wb3J0IHtBZHZhbmNlZERvY3VtZW50U2VhcmNoUmVxdWVzdH0gZnJvbSAnLi9hZHZhbmNlZC1kb2N1bWVudC1zZWFyY2gtcmVxdWVzdCc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBEb2N1bWVudFNlcnZpY2Uge1xuICBwcml2YXRlIHZhbHRpbW9FbmRwb2ludFVyaTogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgRU1QVFlfRE9DVU1FTlRTX1JFU1BPTlNFOiBEb2N1bWVudHMgfCBTcGVjaWZpZWREb2N1bWVudHMgPSB7XG4gICAgY29udGVudDogW10sXG4gICAgZW1wdHk6IHRydWUsXG4gICAgZmlyc3Q6IGZhbHNlLFxuICAgIGxhc3Q6IGZhbHNlLFxuICAgIG51bWJlcjogMCxcbiAgICBudW1iZXJPZkVsZW1lbnRzOiAwLFxuICAgIHNpemU6IDAsXG4gICAgc29ydDogZmFsc2UsXG4gICAgdG90YWxFbGVtZW50czogMCxcbiAgICB0b3RhbFBhZ2VzOiAwLFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cENsaWVudCwgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSkge1xuICAgIHRoaXMudmFsdGltb0VuZHBvaW50VXJpID0gY29uZmlnU2VydmljZS5jb25maWcudmFsdGltb0FwaS5lbmRwb2ludFVyaTtcbiAgfVxuXG4gIC8vIERvY3VtZW50LWNhbGxzXG4gIHB1YmxpYyBnZXRBbGxEZWZpbml0aW9ucygpOiBPYnNlcnZhYmxlPERvY3VtZW50RGVmaW5pdGlvbnM+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==
|