@saritasa/crm-delmar-core-sdk 0.0.197 → 0.0.199
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/README.md +2 -2
- package/api/branch-periods-api.service.d.ts +4 -9
- package/api/branches-api.service.d.ts +4 -9
- package/api/client-notes-api.service.d.ts +4 -9
- package/api/clients-api.service.d.ts +4 -9
- package/api/components-api.service.d.ts +4 -9
- package/api/departments-api.service.d.ts +4 -9
- package/api/dismissal-reasons-api.service.d.ts +4 -9
- package/api/export-job-reports-departments-api.service.d.ts +4 -9
- package/api/export-job-reports-users-api.service.d.ts +4 -9
- package/api/export-jobs-api.service.d.ts +4 -9
- package/api/export-project-resources-api.service.d.ts +4 -9
- package/api/export-projects-api.service.d.ts +4 -9
- package/api/export-tasks-api.service.d.ts +4 -9
- package/api/export-user-periods-api.service.d.ts +4 -9
- package/api/export-users-api.service.d.ts +4 -9
- package/api/jira-client-api.service.d.ts +4 -9
- package/api/jira-instances-api.service.d.ts +4 -9
- package/api/jobs-api.service.d.ts +4 -9
- package/api/locations-api.service.d.ts +4 -9
- package/api/notifications-api.service.d.ts +4 -9
- package/api/permission-data-api.service.d.ts +4 -9
- package/api/profile-api.service.d.ts +4 -9
- package/api/project-notes-api.service.d.ts +4 -9
- package/api/project-priorities-api.service.d.ts +4 -9
- package/api/project-resources-api.service.d.ts +4 -9
- package/api/projects-api.service.d.ts +4 -9
- package/api/roles-api.service.d.ts +4 -9
- package/api/s3-api.service.d.ts +4 -9
- package/api/search-periods-api.service.d.ts +4 -9
- package/api/sso-api.service.d.ts +4 -9
- package/api/tasks-api.service.d.ts +4 -9
- package/api/token-api.service.d.ts +4 -9
- package/api/user-capacities-api.service.d.ts +4 -9
- package/api/user-logins-api.service.d.ts +4 -9
- package/api/user-periods-api.service.d.ts +4 -9
- package/api/user-scores-api.service.d.ts +4 -9
- package/api/user-timezone-setting-api.service.d.ts +4 -9
- package/api/user-timezones-api.service.d.ts +4 -9
- package/api/users-api.service.d.ts +4 -9
- package/api/vendors-api.service.d.ts +4 -9
- package/api/who-am-i-api.service.d.ts +4 -9
- package/api/work-types-api.service.d.ts +4 -9
- package/api.base.service.d.ts +12 -0
- package/configuration.d.ts +3 -1
- package/esm2022/api/branch-periods-api.service.mjs +34 -188
- package/esm2022/api/branches-api.service.mjs +48 -238
- package/esm2022/api/client-notes-api.service.mjs +21 -125
- package/esm2022/api/clients-api.service.mjs +110 -432
- package/esm2022/api/components-api.service.mjs +35 -175
- package/esm2022/api/departments-api.service.mjs +37 -197
- package/esm2022/api/dismissal-reasons-api.service.mjs +37 -197
- package/esm2022/api/export-job-reports-departments-api.service.mjs +46 -216
- package/esm2022/api/export-job-reports-users-api.service.mjs +46 -216
- package/esm2022/api/export-jobs-api.service.mjs +44 -210
- package/esm2022/api/export-project-resources-api.service.mjs +38 -192
- package/esm2022/api/export-projects-api.service.mjs +38 -192
- package/esm2022/api/export-tasks-api.service.mjs +42 -204
- package/esm2022/api/export-user-periods-api.service.mjs +36 -186
- package/esm2022/api/export-users-api.service.mjs +38 -192
- package/esm2022/api/jira-client-api.service.mjs +10 -84
- package/esm2022/api/jira-instances-api.service.mjs +19 -119
- package/esm2022/api/jobs-api.service.mjs +114 -436
- package/esm2022/api/locations-api.service.mjs +37 -197
- package/esm2022/api/notifications-api.service.mjs +50 -244
- package/esm2022/api/permission-data-api.service.mjs +10 -84
- package/esm2022/api/profile-api.service.mjs +15 -107
- package/esm2022/api/project-notes-api.service.mjs +21 -125
- package/esm2022/api/project-priorities-api.service.mjs +22 -128
- package/esm2022/api/project-resources-api.service.mjs +31 -163
- package/esm2022/api/projects-api.service.mjs +62 -288
- package/esm2022/api/roles-api.service.mjs +37 -197
- package/esm2022/api/s3-api.service.mjs +10 -84
- package/esm2022/api/search-periods-api.service.mjs +11 -87
- package/esm2022/api/sso-api.service.mjs +17 -106
- package/esm2022/api/tasks-api.service.mjs +66 -276
- package/esm2022/api/token-api.service.mjs +13 -91
- package/esm2022/api/user-capacities-api.service.mjs +43 -207
- package/esm2022/api/user-logins-api.service.mjs +31 -163
- package/esm2022/api/user-periods-api.service.mjs +44 -226
- package/esm2022/api/user-scores-api.service.mjs +49 -225
- package/esm2022/api/user-timezone-setting-api.service.mjs +15 -107
- package/esm2022/api/user-timezones-api.service.mjs +21 -125
- package/esm2022/api/users-api.service.mjs +53 -245
- package/esm2022/api/vendors-api.service.mjs +35 -191
- package/esm2022/api/who-am-i-api.service.mjs +10 -84
- package/esm2022/api/work-types-api.service.mjs +38 -200
- package/esm2022/api.base.service.mjs +68 -0
- package/esm2022/configuration.mjs +9 -1
- package/esm2022/model/billing-frequency-enum.dto.mjs +1 -1
- package/esm2022/model/billing-method-enum.dto.mjs +1 -1
- package/esm2022/model/billing-type-enum.dto.mjs +1 -1
- package/esm2022/model/branch-period-type-enum.dto.mjs +1 -1
- package/esm2022/model/client-status-enum.dto.mjs +1 -1
- package/esm2022/model/config-enum.dto.mjs +1 -1
- package/esm2022/model/error-code401-enum.dto.mjs +1 -1
- package/esm2022/model/export-status-enum.dto.mjs +1 -1
- package/esm2022/model/file-format-enum.dto.mjs +1 -1
- package/esm2022/model/job-type-enum.dto.mjs +1 -1
- package/esm2022/model/notification-type-enum.dto.mjs +1 -1
- package/esm2022/model/period-model-enum.dto.mjs +1 -1
- package/esm2022/model/period-type-enum.dto.mjs +1 -1
- package/esm2022/model/permission-enum.dto.mjs +1 -1
- package/esm2022/model/permission-group-enum.dto.mjs +1 -1
- package/esm2022/model/priority-enum.dto.mjs +1 -1
- package/esm2022/model/project-status-enum.dto.mjs +1 -1
- package/esm2022/model/scope-enum.dto.mjs +1 -1
- package/esm2022/model/state-enum.dto.mjs +1 -1
- package/esm2022/model/user-period-status-enum.dto.mjs +1 -1
- package/esm2022/model/user-period-type-enum.dto.mjs +1 -1
- package/esm2022/model/user-status-enum.dto.mjs +1 -1
- package/esm2022/model/user-timezone-setting-ordering-enum.dto.mjs +1 -1
- package/fesm2022/saritasa-crm-delmar-core-sdk.mjs +1493 -7593
- package/fesm2022/saritasa-crm-delmar-core-sdk.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -9,74 +9,18 @@
|
|
|
9
9
|
*/
|
|
10
10
|
/* tslint:disable:no-unused-variable member-ordering */
|
|
11
11
|
import { Inject, Injectable, Optional } from "@angular/core";
|
|
12
|
-
import {
|
|
13
|
-
import { CustomHttpParameterCodec } from "../encoder";
|
|
12
|
+
import { HttpParams, HttpContext, } from "@angular/common/http";
|
|
14
13
|
// @ts-ignore
|
|
15
14
|
import { BASE_PATH, COLLECTION_FORMATS } from "../variables";
|
|
16
|
-
import {
|
|
15
|
+
import { BaseService } from "../api.base.service";
|
|
17
16
|
import * as i0 from "@angular/core";
|
|
18
17
|
import * as i1 from "@angular/common/http";
|
|
19
18
|
import * as i2 from "../configuration";
|
|
20
|
-
export class ExportUsersApiService {
|
|
19
|
+
export class ExportUsersApiService extends BaseService {
|
|
21
20
|
httpClient;
|
|
22
|
-
basePath = "";
|
|
23
|
-
defaultHeaders = new HttpHeaders();
|
|
24
|
-
configuration = new Configuration();
|
|
25
|
-
encoder;
|
|
26
21
|
constructor(httpClient, basePath, configuration) {
|
|
22
|
+
super(basePath, configuration);
|
|
27
23
|
this.httpClient = httpClient;
|
|
28
|
-
if (configuration) {
|
|
29
|
-
this.configuration = configuration;
|
|
30
|
-
}
|
|
31
|
-
if (typeof this.configuration.basePath !== "string") {
|
|
32
|
-
const firstBasePath = Array.isArray(basePath) ? basePath[0] : undefined;
|
|
33
|
-
if (firstBasePath != undefined) {
|
|
34
|
-
basePath = firstBasePath;
|
|
35
|
-
}
|
|
36
|
-
if (typeof basePath !== "string") {
|
|
37
|
-
basePath = this.basePath;
|
|
38
|
-
}
|
|
39
|
-
this.configuration.basePath = basePath;
|
|
40
|
-
}
|
|
41
|
-
this.encoder = this.configuration.encoder || new CustomHttpParameterCodec();
|
|
42
|
-
}
|
|
43
|
-
// @ts-ignore
|
|
44
|
-
addToHttpParams(httpParams, value, key) {
|
|
45
|
-
if (typeof value === "object" && value instanceof Date === false) {
|
|
46
|
-
httpParams = this.addToHttpParamsRecursive(httpParams, value);
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
httpParams = this.addToHttpParamsRecursive(httpParams, value, key);
|
|
50
|
-
}
|
|
51
|
-
return httpParams;
|
|
52
|
-
}
|
|
53
|
-
addToHttpParamsRecursive(httpParams, value, key) {
|
|
54
|
-
if (value == null) {
|
|
55
|
-
return httpParams;
|
|
56
|
-
}
|
|
57
|
-
if (typeof value === "object") {
|
|
58
|
-
if (Array.isArray(value)) {
|
|
59
|
-
value.forEach((elem) => (httpParams = this.addToHttpParamsRecursive(httpParams, elem, key)));
|
|
60
|
-
}
|
|
61
|
-
else if (value instanceof Date) {
|
|
62
|
-
if (key != null) {
|
|
63
|
-
httpParams = httpParams.append(key, value.toISOString().substring(0, 10));
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
throw Error("key may not be null if value is Date");
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
Object.keys(value).forEach((k) => (httpParams = this.addToHttpParamsRecursive(httpParams, value[k], key != null ? `${key}.${k}` : k)));
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
else if (key != null) {
|
|
74
|
-
httpParams = httpParams.append(key, value);
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
throw Error("key may not be null if value is not object or array");
|
|
78
|
-
}
|
|
79
|
-
return httpParams;
|
|
80
24
|
}
|
|
81
25
|
exportUsersCancelCreate(requestParameters, observe = "body", reportProgress = false, options) {
|
|
82
26
|
const id = requestParameters?.id;
|
|
@@ -84,34 +28,16 @@ export class ExportUsersApiService {
|
|
|
84
28
|
throw new Error("Required parameter id was null or undefined when calling exportUsersCancelCreate.");
|
|
85
29
|
}
|
|
86
30
|
let localVarHeaders = this.defaultHeaders;
|
|
87
|
-
let localVarCredential;
|
|
88
31
|
// authentication (cookieAuth) required
|
|
89
|
-
localVarCredential = this.configuration.lookupCredential("cookieAuth");
|
|
90
|
-
if (localVarCredential) {
|
|
91
|
-
}
|
|
92
32
|
// authentication (jwtAuth) required
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
}
|
|
97
|
-
let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
|
|
98
|
-
if (localVarHttpHeaderAcceptSelected === undefined) {
|
|
99
|
-
// to determine the Accept header
|
|
100
|
-
const httpHeaderAccepts = ["application/json"];
|
|
101
|
-
localVarHttpHeaderAcceptSelected =
|
|
102
|
-
this.configuration.selectHeaderAccept(httpHeaderAccepts);
|
|
103
|
-
}
|
|
33
|
+
localVarHeaders = this.configuration.addCredentialToHeaders("jwtAuth", "Authorization", localVarHeaders, "Bearer ");
|
|
34
|
+
const localVarHttpHeaderAcceptSelected = options?.httpHeaderAccept ??
|
|
35
|
+
this.configuration.selectHeaderAccept(["application/json"]);
|
|
104
36
|
if (localVarHttpHeaderAcceptSelected !== undefined) {
|
|
105
37
|
localVarHeaders = localVarHeaders.set("Accept", localVarHttpHeaderAcceptSelected);
|
|
106
38
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
localVarHttpContext = new HttpContext();
|
|
110
|
-
}
|
|
111
|
-
let localVarTransferCache = options && options.transferCache;
|
|
112
|
-
if (localVarTransferCache === undefined) {
|
|
113
|
-
localVarTransferCache = true;
|
|
114
|
-
}
|
|
39
|
+
const localVarHttpContext = options?.context ?? new HttpContext();
|
|
40
|
+
const localVarTransferCache = options?.transferCache ?? true;
|
|
115
41
|
let responseType_ = "json";
|
|
116
42
|
if (localVarHttpHeaderAcceptSelected) {
|
|
117
43
|
if (localVarHttpHeaderAcceptSelected.startsWith("text")) {
|
|
@@ -141,47 +67,21 @@ export class ExportUsersApiService {
|
|
|
141
67
|
const ordering = requestParameters?.ordering;
|
|
142
68
|
const search = requestParameters?.search;
|
|
143
69
|
let localVarQueryParameters = new HttpParams({ encoder: this.encoder });
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, offset, "offset");
|
|
149
|
-
}
|
|
150
|
-
if (ordering !== undefined && ordering !== null) {
|
|
151
|
-
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, ordering, "ordering");
|
|
152
|
-
}
|
|
153
|
-
if (search !== undefined && search !== null) {
|
|
154
|
-
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, search, "search");
|
|
155
|
-
}
|
|
70
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, limit, "limit");
|
|
71
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, offset, "offset");
|
|
72
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, ordering, "ordering");
|
|
73
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, search, "search");
|
|
156
74
|
let localVarHeaders = this.defaultHeaders;
|
|
157
|
-
let localVarCredential;
|
|
158
75
|
// authentication (cookieAuth) required
|
|
159
|
-
localVarCredential = this.configuration.lookupCredential("cookieAuth");
|
|
160
|
-
if (localVarCredential) {
|
|
161
|
-
}
|
|
162
76
|
// authentication (jwtAuth) required
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
}
|
|
167
|
-
let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
|
|
168
|
-
if (localVarHttpHeaderAcceptSelected === undefined) {
|
|
169
|
-
// to determine the Accept header
|
|
170
|
-
const httpHeaderAccepts = ["application/json"];
|
|
171
|
-
localVarHttpHeaderAcceptSelected =
|
|
172
|
-
this.configuration.selectHeaderAccept(httpHeaderAccepts);
|
|
173
|
-
}
|
|
77
|
+
localVarHeaders = this.configuration.addCredentialToHeaders("jwtAuth", "Authorization", localVarHeaders, "Bearer ");
|
|
78
|
+
const localVarHttpHeaderAcceptSelected = options?.httpHeaderAccept ??
|
|
79
|
+
this.configuration.selectHeaderAccept(["application/json"]);
|
|
174
80
|
if (localVarHttpHeaderAcceptSelected !== undefined) {
|
|
175
81
|
localVarHeaders = localVarHeaders.set("Accept", localVarHttpHeaderAcceptSelected);
|
|
176
82
|
}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
localVarHttpContext = new HttpContext();
|
|
180
|
-
}
|
|
181
|
-
let localVarTransferCache = options && options.transferCache;
|
|
182
|
-
if (localVarTransferCache === undefined) {
|
|
183
|
-
localVarTransferCache = true;
|
|
184
|
-
}
|
|
83
|
+
const localVarHttpContext = options?.context ?? new HttpContext();
|
|
84
|
+
const localVarTransferCache = options?.transferCache ?? true;
|
|
185
85
|
let responseType_ = "json";
|
|
186
86
|
if (localVarHttpHeaderAcceptSelected) {
|
|
187
87
|
if (localVarHttpHeaderAcceptSelected.startsWith("text")) {
|
|
@@ -212,34 +112,16 @@ export class ExportUsersApiService {
|
|
|
212
112
|
throw new Error("Required parameter id was null or undefined when calling exportUsersRetrieve.");
|
|
213
113
|
}
|
|
214
114
|
let localVarHeaders = this.defaultHeaders;
|
|
215
|
-
let localVarCredential;
|
|
216
115
|
// authentication (cookieAuth) required
|
|
217
|
-
localVarCredential = this.configuration.lookupCredential("cookieAuth");
|
|
218
|
-
if (localVarCredential) {
|
|
219
|
-
}
|
|
220
116
|
// authentication (jwtAuth) required
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
}
|
|
225
|
-
let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
|
|
226
|
-
if (localVarHttpHeaderAcceptSelected === undefined) {
|
|
227
|
-
// to determine the Accept header
|
|
228
|
-
const httpHeaderAccepts = ["application/json"];
|
|
229
|
-
localVarHttpHeaderAcceptSelected =
|
|
230
|
-
this.configuration.selectHeaderAccept(httpHeaderAccepts);
|
|
231
|
-
}
|
|
117
|
+
localVarHeaders = this.configuration.addCredentialToHeaders("jwtAuth", "Authorization", localVarHeaders, "Bearer ");
|
|
118
|
+
const localVarHttpHeaderAcceptSelected = options?.httpHeaderAccept ??
|
|
119
|
+
this.configuration.selectHeaderAccept(["application/json"]);
|
|
232
120
|
if (localVarHttpHeaderAcceptSelected !== undefined) {
|
|
233
121
|
localVarHeaders = localVarHeaders.set("Accept", localVarHttpHeaderAcceptSelected);
|
|
234
122
|
}
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
localVarHttpContext = new HttpContext();
|
|
238
|
-
}
|
|
239
|
-
let localVarTransferCache = options && options.transferCache;
|
|
240
|
-
if (localVarTransferCache === undefined) {
|
|
241
|
-
localVarTransferCache = true;
|
|
242
|
-
}
|
|
123
|
+
const localVarHttpContext = options?.context ?? new HttpContext();
|
|
124
|
+
const localVarTransferCache = options?.transferCache ?? true;
|
|
243
125
|
let responseType_ = "json";
|
|
244
126
|
if (localVarHttpHeaderAcceptSelected) {
|
|
245
127
|
if (localVarHttpHeaderAcceptSelected.startsWith("text")) {
|
|
@@ -288,45 +170,29 @@ export class ExportUsersApiService {
|
|
|
288
170
|
const workType = requestParameters?.workType;
|
|
289
171
|
const workTypeIn = requestParameters?.workTypeIn;
|
|
290
172
|
let localVarQueryParameters = new HttpParams({ encoder: this.encoder });
|
|
291
|
-
|
|
292
|
-
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, branch, "branch");
|
|
293
|
-
}
|
|
173
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, branch, "branch");
|
|
294
174
|
if (branchIn) {
|
|
295
175
|
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...branchIn].join(COLLECTION_FORMATS["csv"]), "branch__in");
|
|
296
176
|
}
|
|
297
|
-
|
|
298
|
-
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, department, "department");
|
|
299
|
-
}
|
|
177
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, department, "department");
|
|
300
178
|
if (departmentIn) {
|
|
301
179
|
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...departmentIn].join(COLLECTION_FORMATS["csv"]), "department__in");
|
|
302
180
|
}
|
|
303
|
-
|
|
304
|
-
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, id, "id");
|
|
305
|
-
}
|
|
181
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, id, "id");
|
|
306
182
|
if (idIn) {
|
|
307
183
|
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...idIn].join(COLLECTION_FORMATS["csv"]), "id__in");
|
|
308
184
|
}
|
|
309
|
-
|
|
310
|
-
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, isStaff, "is_staff");
|
|
311
|
-
}
|
|
185
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, isStaff, "is_staff");
|
|
312
186
|
if (isStaffIn) {
|
|
313
187
|
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...isStaffIn].join(COLLECTION_FORMATS["csv"]), "is_staff__in");
|
|
314
188
|
}
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
}
|
|
318
|
-
if (role !== undefined && role !== null) {
|
|
319
|
-
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, role, "role");
|
|
320
|
-
}
|
|
189
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, ordering, "ordering");
|
|
190
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, role, "role");
|
|
321
191
|
if (roleIn) {
|
|
322
192
|
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...roleIn].join(COLLECTION_FORMATS["csv"]), "role__in");
|
|
323
193
|
}
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
}
|
|
327
|
-
if (status !== undefined && status !== null) {
|
|
328
|
-
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, status, "status");
|
|
329
|
-
}
|
|
194
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, search, "search");
|
|
195
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, status, "status");
|
|
330
196
|
if (statusIn) {
|
|
331
197
|
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...statusIn].join(COLLECTION_FORMATS["csv"]), "status__in");
|
|
332
198
|
}
|
|
@@ -336,41 +202,21 @@ export class ExportUsersApiService {
|
|
|
336
202
|
if (supervisorsIdIn) {
|
|
337
203
|
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...supervisorsIdIn].join(COLLECTION_FORMATS["csv"]), "supervisors__id__in");
|
|
338
204
|
}
|
|
339
|
-
|
|
340
|
-
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, workType, "work_type");
|
|
341
|
-
}
|
|
205
|
+
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, workType, "work_type");
|
|
342
206
|
if (workTypeIn) {
|
|
343
207
|
localVarQueryParameters = this.addToHttpParams(localVarQueryParameters, [...workTypeIn].join(COLLECTION_FORMATS["csv"]), "work_type__in");
|
|
344
208
|
}
|
|
345
209
|
let localVarHeaders = this.defaultHeaders;
|
|
346
|
-
let localVarCredential;
|
|
347
210
|
// authentication (cookieAuth) required
|
|
348
|
-
localVarCredential = this.configuration.lookupCredential("cookieAuth");
|
|
349
|
-
if (localVarCredential) {
|
|
350
|
-
}
|
|
351
211
|
// authentication (jwtAuth) required
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
}
|
|
356
|
-
let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
|
|
357
|
-
if (localVarHttpHeaderAcceptSelected === undefined) {
|
|
358
|
-
// to determine the Accept header
|
|
359
|
-
const httpHeaderAccepts = ["application/json"];
|
|
360
|
-
localVarHttpHeaderAcceptSelected =
|
|
361
|
-
this.configuration.selectHeaderAccept(httpHeaderAccepts);
|
|
362
|
-
}
|
|
212
|
+
localVarHeaders = this.configuration.addCredentialToHeaders("jwtAuth", "Authorization", localVarHeaders, "Bearer ");
|
|
213
|
+
const localVarHttpHeaderAcceptSelected = options?.httpHeaderAccept ??
|
|
214
|
+
this.configuration.selectHeaderAccept(["application/json"]);
|
|
363
215
|
if (localVarHttpHeaderAcceptSelected !== undefined) {
|
|
364
216
|
localVarHeaders = localVarHeaders.set("Accept", localVarHttpHeaderAcceptSelected);
|
|
365
217
|
}
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
localVarHttpContext = new HttpContext();
|
|
369
|
-
}
|
|
370
|
-
let localVarTransferCache = options && options.transferCache;
|
|
371
|
-
if (localVarTransferCache === undefined) {
|
|
372
|
-
localVarTransferCache = true;
|
|
373
|
-
}
|
|
218
|
+
const localVarHttpContext = options?.context ?? new HttpContext();
|
|
219
|
+
const localVarTransferCache = options?.transferCache ?? true;
|
|
374
220
|
// to determine the Content-Type header
|
|
375
221
|
const consumes = [
|
|
376
222
|
"application/json",
|
|
@@ -422,4 +268,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
422
268
|
}] }, { type: i2.Configuration, decorators: [{
|
|
423
269
|
type: Optional
|
|
424
270
|
}] }] });
|
|
425
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LXVzZXJzLWFwaS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vYXBpL2V4cG9ydC11c2Vycy1hcGkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUNILHVEQUF1RDtBQUV2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUVMLFdBQVcsRUFDWCxVQUFVLEVBSVYsV0FBVyxHQUNaLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBOEJ0RCxhQUFhO0FBQ2IsT0FBTyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7QUFZakQsTUFBTSxPQUFPLHFCQUFxQjtJQU9wQjtJQU5GLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFDakIsY0FBYyxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7SUFDbkMsYUFBYSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7SUFDcEMsT0FBTyxDQUFxQjtJQUVuQyxZQUNZLFVBQXNCLEVBQ0QsUUFBMkIsRUFDOUMsYUFBNEI7UUFGOUIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUloQyxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xCLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ3JDLENBQUM7UUFDRCxJQUFJLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDcEQsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENB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QUM7UUFDckQsSUFBSSxnQ0FBZ0MsRUFBRSxDQUFDO1lBQ3JDLElBQUksZ0NBQWdDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3hELGFBQWEsR0FBRyxNQUFNLENBQUM7WUFDekIsQ0FBQztpQkFBTSxJQUNMLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLGdDQUFnQyxDQUFDLEVBQy9ELENBQUM7Z0JBQ0QsYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUN6QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUN6QixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksWUFBWSxHQUFHLDZCQUE2QixDQUFDO1FBQ2pELE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQzVCLE1BQU0sRUFDTixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLFlBQVksRUFBRSxFQUMvQztZQUNFLE9BQU8sRUFBRSxtQkFBbUI7WUFDNUIsSUFBSSxFQUFFLHFDQUFxQztZQUMzQyxNQUFNLEVBQUUsdUJBQXVCO1lBQy9CLFlBQVksRUFBTyxhQUFhO1lBQ2hDLGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWU7WUFDbkQsT0FBTyxFQUFFLGVBQWU7WUFDeEIsT0FBTyxFQUFFLE9BQU87WUFDaEIsYUFBYSxFQUFFLHFCQUFxQjtZQUNwQyxjQUFjLEVBQUUsY0FBYztTQUMvQixDQUNGLENBQUM7SUFDSixDQUFDO3dHQTl3QlUscUJBQXFCLDRDQVFWLFNBQVM7NEdBUnBCLHFCQUFxQixjQUZwQixNQUFNOzs0RkFFUCxxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFTSSxRQUFROzswQkFBSSxNQUFNOzJCQUFDLFNBQVM7OzBCQUM1QixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEZWxtYXIgQXBpXG4gKlxuICpcbiAqXG4gKiBOT1RFOiBUaGlzIGNsYXNzIGlzIGF1dG8gZ2VuZXJhdGVkIGJ5IE9wZW5BUEkgR2VuZXJhdG9yIChodHRwczovL29wZW5hcGktZ2VuZXJhdG9yLnRlY2gpLlxuICogaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoXG4gKiBEbyBub3QgZWRpdCB0aGUgY2xhc3MgbWFudWFsbHkuXG4gKi9cbi8qIHRzbGludDpkaXNhYmxlOm5vLXVudXNlZC12YXJpYWJsZSBtZW1iZXItb3JkZXJpbmcgKi9cblxuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQge1xuICBIdHRwQ2xpZW50LFxuICBIdHRwSGVhZGVycyxcbiAgSHR0cFBhcmFtcyxcbiAgSHR0cFJlc3BvbnNlLFxuICBIdHRwRXZlbnQsXG4gIEh0dHBQYXJhbWV0ZXJDb2RlYyxcbiAgSHR0cENvbnRleHQsXG59IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xuaW1wb3J0IHsgQ3VzdG9tSHR0cFBhcmFtZXRlckNvZGVjIH0gZnJvbSBcIi4uL2VuY29kZXJcIjtcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tIFwicnhqc1wiO1xuXG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlNDAxRHRvIH0gZnJvbSBcIi4uL21vZGVsL2Vycm9yLXJlc3BvbnNlNDAxLmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRXJyb3JSZXNwb25zZTQwNER0byB9IGZyb20gXCIuLi9tb2RlbC9lcnJvci1yZXNwb25zZTQwNC5kdG9cIjtcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEVycm9yUmVzcG9uc2U0MDVEdG8gfSBmcm9tIFwiLi4vbW9kZWwvZXJyb3ItcmVzcG9uc2U0MDUuZHRvXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlNDA2RHRvIH0gZnJvbSBcIi4uL21vZGVsL2Vycm9yLXJlc3BvbnNlNDA2LmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRXJyb3JSZXNwb25zZTQxNUR0byB9IGZyb20gXCIuLi9tb2RlbC9lcnJvci1yZXNwb25zZTQxNS5kdG9cIjtcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEVycm9yUmVzcG9uc2U1MDBEdG8gfSBmcm9tIFwiLi4vbW9kZWwvZXJyb3ItcmVzcG9uc2U1MDAuZHRvXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBFeHBvcnRKb2JEdG8gfSBmcm9tIFwiLi4vbW9kZWwvZXhwb3J0LWpvYi5kdG9cIjtcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEV4cG9ydFVzZXJzQ2FuY2VsQ3JlYXRlRXJyb3JSZXNwb25zZTQwMER0byB9IGZyb20gXCIuLi9tb2RlbC9leHBvcnQtdXNlcnMtY2FuY2VsLWNyZWF0ZS1lcnJvci1yZXNwb25zZTQwMC5kdG9cIjtcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEV4cG9ydFVzZXJzTGlzdEVycm9yUmVzcG9uc2U0MDBEdG8gfSBmcm9tIFwiLi4vbW9kZWwvZXhwb3J0LXVzZXJzLWxpc3QtZXJyb3ItcmVzcG9uc2U0MDAuZHRvXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBFeHBvcnRVc2Vyc1JldHJpZXZlRXJyb3JSZXNwb25zZTQwMER0byB9IGZyb20gXCIuLi9tb2RlbC9leHBvcnQtdXNlcnMtcmV0cmlldmUtZXJyb3ItcmVzcG9uc2U0MDAuZHRvXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBFeHBvcnRVc2Vyc1N0YXJ0Q3JlYXRlRXJyb3JSZXNwb25zZTQwMER0byB9IGZyb20gXCIuLi9tb2RlbC9leHBvcnQtdXNlcnMtc3RhcnQtY3JlYXRlLWVycm9yLXJlc3BvbnNlNDAwLmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgUGFnaW5hdGVkRXhwb3J0Sm9iTGlzdER0byB9IGZyb20gXCIuLi9tb2RlbC9wYWdpbmF0ZWQtZXhwb3J0LWpvYi1saXN0LmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgVXNlclJlc291cmNlQ3JlYXRlRXhwb3J0Sm9iUmVxdWVzdER0byB9IGZyb20gXCIuLi9tb2RlbC91c2VyLXJlc291cmNlLWNyZWF0ZS1leHBvcnQtam9iLXJlcXVlc3QuZHRvXCI7XG5cbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEJBU0VfUEFUSCwgQ09MTEVDVElPTl9GT1JNQVRTIH0gZnJvbSBcIi4uL3ZhcmlhYmxlc1wiO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9IGZyb20gXCIuLi9jb25maWd1cmF0aW9uXCI7XG5pbXBvcnQge1xuICBFeHBvcnRVc2Vyc0FwaVNlcnZpY2VJbnRlcmZhY2UsXG4gIEV4cG9ydFVzZXJzQ2FuY2VsQ3JlYXRlUmVxdWVzdFBhcmFtcyxcbiAgRXhwb3J0VXNlcnNMaXN0UmVxdWVzdFBhcmFtcyxcbiAgRXhwb3J0VXNlcnNSZXRyaWV2ZVJlcXVlc3RQYXJhbXMsXG4gIEV4cG9ydFVzZXJzU3RhcnRDcmVhdGVSZXF1ZXN0UGFyYW1zLFxufSBmcm9tIFwiLi9leHBvcnQtdXNlcnMtYXBpLnNlcnZpY2VJbnRlcmZhY2VcIjtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiBcInJvb3RcIixcbn0pXG5leHBvcnQgY2xhc3MgRXhwb3J0VXNlcnNBcGlTZXJ2aWNlIGltcGxlbWVudHMgRXhwb3J0VXNlcnNBcGlTZXJ2aWNlSW50ZXJmYWNlIHtcbiAgcHJvdGVjdGVkIGJhc2VQYXRoID0gXCJcIjtcbiAgcHVibGljIGRlZmF1bHRIZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKCk7XG4gIHB1YmxpYyBjb25maWd1cmF0aW9uID0gbmV3IENvbmZpZ3VyYXRpb24oKTtcbiAgcHVibGljIGVuY29kZXI6IEh0dHBQYXJhbWV0ZXJDb2RlYztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgaHR0cENsaWVudDogSHR0cENsaWVudCxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEJBU0VfUEFUSCkgYmFzZVBhdGg6IHN0cmluZyB8IHN0cmluZ1tdLFxuICAgIEBPcHRpb25hbCgpIGNvbmZpZ3VyYXRpb246IENvbmZpZ3VyYXRpb24sXG4gICkge1xuICAgIGlmIChjb25maWd1cmF0aW9uKSB7XG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHRoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aCAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgY29uc3QgZmlyc3RCYXNlUGF0aCA9IEFycmF5LmlzQXJyYXkoYmFzZVBhdGgpID8gYmFzZVBhdGhbMF0gOiB1bmRlZmluZWQ7XG4gICAgICBpZiAoZmlyc3RCYXNlUGF0aCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgYmFzZVBhdGggPSBmaXJzdEJhc2VQYXRoO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGJhc2VQYXRoICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGJhc2VQYXRoID0gdGhpcy5iYXNlUGF0aDtcbiAgICAgIH1cbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aCA9IGJhc2VQYXRoO1xuICAgIH1cbiAgICB0aGlzLmVuY29kZXIgPSB0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlciB8fCBuZXcgQ3VzdG9tSHR0cFBhcmFtZXRlckNvZGVjKCk7XG4gIH1cblxuICAvLyBAdHMtaWdub3JlXG4gIHByaXZhdGUgYWRkVG9IdHRwUGFyYW1zKFxuICAgIGh0dHBQYXJhbXM6IEh0dHBQYXJhbXMsXG4gICAgdmFsdWU6IGFueSxcbiAgICBrZXk/OiBzdHJpbmcsXG4gICk6IEh0dHBQYXJhbXMge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgaW5zdGFuY2VvZiBEYXRlID09PSBmYWxzZSkge1xuICAgICAgaHR0cFBhcmFtcyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKGh0dHBQYXJhbXMsIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaHR0cFBhcmFtcyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKGh0dHBQYXJhbXMsIHZhbHVlLCBrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gaHR0cFBhcmFtcztcbiAgfVxuXG4gIHByaXZhdGUgYWRkVG9IdHRwUGFyYW1zUmVjdXJzaXZlKFxuICAgIGh0dHBQYXJhbXM6IEh0dHBQYXJhbXMsXG4gICAgdmFsdWU/OiBhbnksXG4gICAga2V5Pzogc3RyaW5nLFxuICApOiBIdHRwUGFyYW1zIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGh0dHBQYXJhbXM7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICh2YWx1ZSBhcyBhbnlbXSkuZm9yRWFjaChcbiAgICAgICAgICAoZWxlbSkgPT5cbiAgICAgICAgICAgIChodHRwUGFyYW1zID0gdGhpcy5hZGRUb0h0dHBQYXJhbXNSZWN1cnNpdmUoaHR0cFBhcmFtcywgZWxlbSwga2V5KSksXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICBpZiAoa2V5ICE9IG51bGwpIHtcbiAgICAgICAgICBodHRwUGFyYW1zID0gaHR0cFBhcmFtcy5hcHBlbmQoXG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAodmFsdWUgYXMgRGF0ZSkudG9JU09TdHJpbmcoKS5zdWJzdHJpbmcoMCwgMTApLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoXCJrZXkgbWF5IG5vdCBiZSBudWxsIGlmIHZhbHVlIGlzIERhdGVcIik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKFxuICAgICAgICAgIChrKSA9PlxuICAgICAgICAgICAgKGh0dHBQYXJhbXMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtc1JlY3Vyc2l2ZShcbiAgICAgICAgICAgICAgaHR0cFBhcmFtcyxcbiAgICAgICAgICAgICAgdmFsdWVba10sXG4gICAgICAgICAgICAgIGtleSAhPSBudWxsID8gYCR7a2V5fS4ke2t9YCA6IGssXG4gICAgICAgICAgICApKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGtleSAhPSBudWxsKSB7XG4gICAgICBodHRwUGFyYW1zID0gaHR0cFBhcmFtcy5hcHBlbmQoa2V5LCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IEVycm9yKFwia2V5IG1heSBub3QgYmUgbnVsbCBpZiB2YWx1ZSBpcyBub3Qgb2JqZWN0IG9yIGFycmF5XCIpO1xuICAgIH1cbiAgICByZXR1cm4gaHR0cFBhcmFtcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWwgZXhwb3J0IGpvYiB0aGF0IGlzIGluIHByb2dyZXNzLlxuICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgKi9cbiAgcHVibGljIGV4cG9ydFVzZXJzQ2FuY2VsQ3JlYXRlKFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzOiBFeHBvcnRVc2Vyc0NhbmNlbENyZWF0ZVJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZT86IFwiYm9keVwiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxFeHBvcnRKb2JEdG8+O1xuICBwdWJsaWMgZXhwb3J0VXNlcnNDYW5jZWxDcmVhdGUoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IEV4cG9ydFVzZXJzQ2FuY2VsQ3JlYXRlUmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlPzogXCJyZXNwb25zZVwiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8RXhwb3J0Sm9iRHRvPj47XG4gIHB1YmxpYyBleHBvcnRVc2Vyc0NhbmNlbENyZWF0ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogRXhwb3J0VXNlcnNDYW5jZWxDcmVhdGVSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcImV2ZW50c1wiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8RXhwb3J0Sm9iRHRvPj47XG4gIHB1YmxpYyBleHBvcnRVc2Vyc0NhbmNlbENyZWF0ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogRXhwb3J0VXNlcnNDYW5jZWxDcmVhdGVSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU6IGFueSA9IFwiYm9keVwiLFxuICAgIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgaWQgPSByZXF1ZXN0UGFyYW1ldGVycz8uaWQ7XG4gICAgaWYgKGlkID09PSBudWxsIHx8IGlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJSZXF1aXJlZCBwYXJhbWV0ZXIgaWQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBleHBvcnRVc2Vyc0NhbmNlbENyZWF0ZS5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLy8gYXV0aGVudGljYXRpb24gKGNvb2tpZUF1dGgpIHJlcXVpcmVkXG4gICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoXCJjb29raWVBdXRoXCIpO1xuICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICB9XG5cbiAgICAvLyBhdXRoZW50aWNhdGlvbiAoand0QXV0aCkgcmVxdWlyZWRcbiAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbChcImp3dEF1dGhcIik7XG4gICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldChcbiAgICAgICAgXCJBdXRob3JpemF0aW9uXCIsXG4gICAgICAgIFwiQmVhcmVyIFwiICsgbG9jYWxWYXJDcmVkZW50aWFsLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXCJhcHBsaWNhdGlvbi9qc29uXCJdO1xuICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPVxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICB9XG4gICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoXG4gICAgICAgIFwiQWNjZXB0XCIsXG4gICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPVxuICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPVxuICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLnRyYW5zZmVyQ2FjaGU7XG4gICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgIH1cblxuICAgIGxldCByZXNwb25zZVR5cGVfOiBcInRleHRcIiB8IFwianNvblwiIHwgXCJibG9iXCIgPSBcImpzb25cIjtcbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKFwidGV4dFwiKSkge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJ0ZXh0XCI7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZClcbiAgICAgICkge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJqc29uXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJibG9iXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL3YxL2V4cG9ydC11c2Vycy8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7IG5hbWU6IFwiaWRcIiwgdmFsdWU6IGlkLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwibnVtYmVyXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZCB9KX0vY2FuY2VsL2A7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PEV4cG9ydEpvYkR0bz4oXG4gICAgICBcInBvc3RcIixcbiAgICAgIGAke3RoaXMuY29uZmlndXJhdGlvbi5iYXNlUGF0aH0ke2xvY2FsVmFyUGF0aH1gLFxuICAgICAge1xuICAgICAgICBjb250ZXh0OiBsb2NhbFZhckh0dHBDb250ZXh0LFxuICAgICAgICByZXNwb25zZVR5cGU6IDxhbnk+cmVzcG9uc2VUeXBlXyxcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2l0aENyZWRlbnRpYWxzLFxuICAgICAgICBoZWFkZXJzOiBsb2NhbFZhckhlYWRlcnMsXG4gICAgICAgIG9ic2VydmU6IG9ic2VydmUsXG4gICAgICAgIHRyYW5zZmVyQ2FjaGU6IGxvY2FsVmFyVHJhbnNmZXJDYWNoZSxcbiAgICAgICAgcmVwb3J0UHJvZ3Jlc3M6IHJlcG9ydFByb2dyZXNzLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFZpZXdzZXQgZm9yIGV4cG9ydGluZyB1c2Vycy5cbiAgICogQHBhcmFtIHJlcXVlc3RQYXJhbWV0ZXJzXG4gICAqIEBwYXJhbSBvYnNlcnZlIHNldCB3aGV0aGVyIG9yIG5vdCB0byByZXR1cm4gdGhlIGRhdGEgT2JzZXJ2YWJsZSBhcyB0aGUgYm9keSwgcmVzcG9uc2Ugb3IgZXZlbnRzLiBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIGJvZHkuXG4gICAqIEBwYXJhbSByZXBvcnRQcm9ncmVzcyBmbGFnIHRvIHJlcG9ydCByZXF1ZXN0IGFuZCByZXNwb25zZSBwcm9ncmVzcy5cbiAgICovXG4gIHB1YmxpYyBleHBvcnRVc2Vyc0xpc3QoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM/OiBFeHBvcnRVc2Vyc0xpc3RSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcImJvZHlcIixcbiAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8UGFnaW5hdGVkRXhwb3J0Sm9iTGlzdER0bz47XG4gIHB1YmxpYyBleHBvcnRVc2Vyc0xpc3QoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM/OiBFeHBvcnRVc2Vyc0xpc3RSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcInJlc3BvbnNlXCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxQYWdpbmF0ZWRFeHBvcnRKb2JMaXN0RHRvPj47XG4gIHB1YmxpYyBleHBvcnRVc2Vyc0xpc3QoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM/OiBFeHBvcnRVc2Vyc0xpc3RSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcImV2ZW50c1wiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8UGFnaW5hdGVkRXhwb3J0Sm9iTGlzdER0bz4+O1xuICBwdWJsaWMgZXhwb3J0VXNlcnNMaXN0KFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzPzogRXhwb3J0VXNlcnNMaXN0UmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlOiBhbnkgPSBcImJvZHlcIixcbiAgICByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IGxpbWl0ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmxpbWl0O1xuICAgIGNvbnN0IG9mZnNldCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5vZmZzZXQ7XG4gICAgY29uc3Qgb3JkZXJpbmcgPSByZXF1ZXN0UGFyYW1ldGVycz8ub3JkZXJpbmc7XG4gICAgY29uc3Qgc2VhcmNoID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNlYXJjaDtcblxuICAgIGxldCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHsgZW5jb2RlcjogdGhpcy5lbmNvZGVyIH0pO1xuICAgIGlmIChsaW1pdCAhPT0gdW5kZWZpbmVkICYmIGxpbWl0ICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5saW1pdCxcbiAgICAgICAgXCJsaW1pdFwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKG9mZnNldCAhPT0gdW5kZWZpbmVkICYmIG9mZnNldCAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+b2Zmc2V0LFxuICAgICAgICBcIm9mZnNldFwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKG9yZGVyaW5nICE9PSB1bmRlZmluZWQgJiYgb3JkZXJpbmcgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55Pm9yZGVyaW5nLFxuICAgICAgICBcIm9yZGVyaW5nXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoc2VhcmNoICE9PSB1bmRlZmluZWQgJiYgc2VhcmNoICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5zZWFyY2gsXG4gICAgICAgIFwic2VhcmNoXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgbGV0IGxvY2FsVmFyQ3JlZGVudGlhbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8vIGF1dGhlbnRpY2F0aW9uIChjb29raWVBdXRoKSByZXF1aXJlZFxuICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKFwiY29va2llQXV0aFwiKTtcbiAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgfVxuXG4gICAgLy8gYXV0aGVudGljYXRpb24gKGp3dEF1dGgpIHJlcXVpcmVkXG4gICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoXCJqd3RBdXRoXCIpO1xuICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoXG4gICAgICAgIFwiQXV0aG9yaXphdGlvblwiLFxuICAgICAgICBcIkJlYXJlciBcIiArIGxvY2FsVmFyQ3JlZGVudGlhbCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPVxuICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLmh0dHBIZWFkZXJBY2NlcHQ7XG4gICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIHRvIGRldGVybWluZSB0aGUgQWNjZXB0IGhlYWRlclxuICAgICAgY29uc3QgaHR0cEhlYWRlckFjY2VwdHM6IHN0cmluZ1tdID0gW1wiYXBwbGljYXRpb24vanNvblwiXTtcbiAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkID1cbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChodHRwSGVhZGVyQWNjZXB0cyk7XG4gICAgfVxuICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KFxuICAgICAgICBcIkFjY2VwdFwiLFxuICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0IHwgdW5kZWZpbmVkID1cbiAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5jb250ZXh0O1xuICAgIGlmIChsb2NhbFZhckh0dHBDb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxvY2FsVmFySHR0cENvbnRleHQgPSBuZXcgSHR0cENvbnRleHQoKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJUcmFuc2ZlckNhY2hlOiBib29sZWFuIHwgdW5kZWZpbmVkID1cbiAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy50cmFuc2ZlckNhY2hlO1xuICAgIGlmIChsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9jYWxWYXJUcmFuc2ZlckNhY2hlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBsZXQgcmVzcG9uc2VUeXBlXzogXCJ0ZXh0XCIgfCBcImpzb25cIiB8IFwiYmxvYlwiID0gXCJqc29uXCI7XG4gICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aChcInRleHRcIikpIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlXyA9IFwidGV4dFwiO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpXG4gICAgICApIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlXyA9IFwianNvblwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlXyA9IFwiYmxvYlwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS92MS9leHBvcnQtdXNlcnMvYDtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8UGFnaW5hdGVkRXhwb3J0Sm9iTGlzdER0bz4oXG4gICAgICBcImdldFwiLFxuICAgICAgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICB7XG4gICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgIHBhcmFtczogbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3MsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVmlld3NldCBmb3IgZXhwb3J0aW5nIHVzZXJzLlxuICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgKi9cbiAgcHVibGljIGV4cG9ydFVzZXJzUmV0cmlldmUoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IEV4cG9ydFVzZXJzUmV0cmlldmVSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcImJvZHlcIixcbiAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8RXhwb3J0Sm9iRHRvPjtcbiAgcHVibGljIGV4cG9ydFVzZXJzUmV0cmlldmUoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IEV4cG9ydFVzZXJzUmV0cmlldmVSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcInJlc3BvbnNlXCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxFeHBvcnRKb2JEdG8+PjtcbiAgcHVibGljIGV4cG9ydFVzZXJzUmV0cmlldmUoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IEV4cG9ydFVzZXJzUmV0cmlldmVSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcImV2ZW50c1wiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8RXhwb3J0Sm9iRHRvPj47XG4gIHB1YmxpYyBleHBvcnRVc2Vyc1JldHJpZXZlKFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzOiBFeHBvcnRVc2Vyc1JldHJpZXZlUmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlOiBhbnkgPSBcImJvZHlcIixcbiAgICByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IGlkID0gcmVxdWVzdFBhcmFtZXRlcnM/LmlkO1xuICAgIGlmIChpZCA9PT0gbnVsbCB8fCBpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiUmVxdWlyZWQgcGFyYW1ldGVyIGlkIHdhcyBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGNhbGxpbmcgZXhwb3J0VXNlcnNSZXRyaWV2ZS5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICBsZXQgbG9jYWxWYXJDcmVkZW50aWFsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLy8gYXV0aGVudGljYXRpb24gKGNvb2tpZUF1dGgpIHJlcXVpcmVkXG4gICAgbG9jYWxWYXJDcmVkZW50aWFsID0gdGhpcy5jb25maWd1cmF0aW9uLmxvb2t1cENyZWRlbnRpYWwoXCJjb29raWVBdXRoXCIpO1xuICAgIGlmIChsb2NhbFZhckNyZWRlbnRpYWwpIHtcbiAgICB9XG5cbiAgICAvLyBhdXRoZW50aWNhdGlvbiAoand0QXV0aCkgcmVxdWlyZWRcbiAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbChcImp3dEF1dGhcIik7XG4gICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldChcbiAgICAgICAgXCJBdXRob3JpemF0aW9uXCIsXG4gICAgICAgIFwiQmVhcmVyIFwiICsgbG9jYWxWYXJDcmVkZW50aWFsLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMuaHR0cEhlYWRlckFjY2VwdDtcbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBBY2NlcHQgaGVhZGVyXG4gICAgICBjb25zdCBodHRwSGVhZGVyQWNjZXB0czogc3RyaW5nW10gPSBbXCJhcHBsaWNhdGlvbi9qc29uXCJdO1xuICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgPVxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KGh0dHBIZWFkZXJBY2NlcHRzKTtcbiAgICB9XG4gICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoXG4gICAgICAgIFwiQWNjZXB0XCIsXG4gICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgfCB1bmRlZmluZWQgPVxuICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLmNvbnRleHQ7XG4gICAgaWYgKGxvY2FsVmFySHR0cENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9jYWxWYXJIdHRwQ29udGV4dCA9IG5ldyBIdHRwQ29udGV4dCgpO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gfCB1bmRlZmluZWQgPVxuICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLnRyYW5zZmVyQ2FjaGU7XG4gICAgaWYgKGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsb2NhbFZhclRyYW5zZmVyQ2FjaGUgPSB0cnVlO1xuICAgIH1cblxuICAgIGxldCByZXNwb25zZVR5cGVfOiBcInRleHRcIiB8IFwianNvblwiIHwgXCJibG9iXCIgPSBcImpzb25cIjtcbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKFwidGV4dFwiKSkge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJ0ZXh0XCI7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZClcbiAgICAgICkge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJqc29uXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJibG9iXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL3YxL2V4cG9ydC11c2Vycy8ke3RoaXMuY29uZmlndXJhdGlvbi5lbmNvZGVQYXJhbSh7IG5hbWU6IFwiaWRcIiwgdmFsdWU6IGlkLCBpbjogXCJwYXRoXCIsIHN0eWxlOiBcInNpbXBsZVwiLCBleHBsb2RlOiBmYWxzZSwgZGF0YVR5cGU6IFwibnVtYmVyXCIsIGRhdGFGb3JtYXQ6IHVuZGVmaW5lZCB9KX0vYDtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8RXhwb3J0Sm9iRHRvPihcbiAgICAgIFwiZ2V0XCIsXG4gICAgICBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgIHtcbiAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICB0cmFuc2ZlckNhY2hlOiBsb2NhbFZhclRyYW5zZmVyQ2FjaGUsXG4gICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzcyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGVuZHBvaW50IGNyZWF0ZXMgZXhwb3J0IGpvYiBhbmQgc3RhcnRzIGl0LiBUbyBtb25pdG9yIHByb2dyZXNzIHVzZSBkZXRhaWwgZW5kcG9pbnQgZm9yIGpvYnMgdG8gZmV0Y2ggc3RhdGUgb2Ygam9iLiBPbmNlIGl0XFwmIzM5O3Mgc3RhdHVzIGlzICYjeDYwO0VYUE9SVEVEJiN4NjA7LCB5b3UgY2FuIGRvd25sb2FkIGZpbGUuXG4gICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAqL1xuICBwdWJsaWMgZXhwb3J0VXNlcnNTdGFydENyZWF0ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogRXhwb3J0VXNlcnNTdGFydENyZWF0ZVJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZT86IFwiYm9keVwiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxFeHBvcnRKb2JEdG8+O1xuICBwdWJsaWMgZXhwb3J0VXNlcnNTdGFydENyZWF0ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogRXhwb3J0VXNlcnNTdGFydENyZWF0ZVJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZT86IFwicmVzcG9uc2VcIixcbiAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEV4cG9ydEpvYkR0bz4+O1xuICBwdWJsaWMgZXhwb3J0VXNlcnNTdGFydENyZWF0ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogRXhwb3J0VXNlcnNTdGFydENyZWF0ZVJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZT86IFwiZXZlbnRzXCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxFeHBvcnRKb2JEdG8+PjtcbiAgcHVibGljIGV4cG9ydFVzZXJzU3RhcnRDcmVhdGUoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IEV4cG9ydFVzZXJzU3RhcnRDcmVhdGVSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU6IGFueSA9IFwiYm9keVwiLFxuICAgIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgdXNlclJlc291cmNlQ3JlYXRlRXhwb3J0Sm9iUmVxdWVzdER0byA9XG4gICAgICByZXF1ZXN0UGFyYW1ldGVycz8udXNlclJlc291cmNlQ3JlYXRlRXhwb3J0Sm9iUmVxdWVzdER0bztcbiAgICBpZiAoXG4gICAgICB1c2VyUmVzb3VyY2VDcmVhdGVFeHBvcnRKb2JSZXF1ZXN0RHRvID09PSBudWxsIHx8XG4gICAgICB1c2VyUmVzb3VyY2VDcmVhdGVFeHBvcnRKb2JSZXF1ZXN0RHRvID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJSZXF1aXJlZCBwYXJhbWV0ZXIgdXNlclJlc291cmNlQ3JlYXRlRXhwb3J0Sm9iUmVxdWVzdER0byB3YXMgbnVsbCBvciB1bmRlZmluZWQgd2hlbiBjYWxsaW5nIGV4cG9ydFVzZXJzU3RhcnRDcmVhdGUuXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBicmFuY2ggPSByZXF1ZXN0UGFyYW1ldGVycz8uYnJhbmNoO1xuICAgIGNvbnN0IGJyYW5jaEluID0gcmVxdWVzdFBhcmFtZXRlcnM/LmJyYW5jaEluO1xuICAgIGNvbnN0IGRlcGFydG1lbnQgPSByZXF1ZXN0UGFyYW1ldGVycz8uZGVwYXJ0bWVudDtcbiAgICBjb25zdCBkZXBhcnRtZW50SW4gPSByZXF1ZXN0UGFyYW1ldGVycz8uZGVwYXJ0bWVudEluO1xuICAgIGNvbnN0IGlkID0gcmVxdWVzdFBhcmFtZXRlcnM/LmlkO1xuICAgIGNvbnN0IGlkSW4gPSByZXF1ZXN0UGFyYW1ldGVycz8uaWRJbjtcbiAgICBjb25zdCBpc1N0YWZmID0gcmVxdWVzdFBhcmFtZXRlcnM/LmlzU3RhZmY7XG4gICAgY29uc3QgaXNTdGFmZkluID0gcmVxdWVzdFBhcmFtZXRlcnM/LmlzU3RhZmZJbjtcbiAgICBjb25zdCBvcmRlcmluZyA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5vcmRlcmluZztcbiAgICBjb25zdCByb2xlID0gcmVxdWVzdFBhcmFtZXRlcnM/LnJvbGU7XG4gICAgY29uc3Qgcm9sZUluID0gcmVxdWVzdFBhcmFtZXRlcnM/LnJvbGVJbjtcbiAgICBjb25zdCBzZWFyY2ggPSByZXF1ZXN0UGFyYW1ldGVycz8uc2VhcmNoO1xuICAgIGNvbnN0IHN0YXR1cyA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5zdGF0dXM7XG4gICAgY29uc3Qgc3RhdHVzSW4gPSByZXF1ZXN0UGFyYW1ldGVycz8uc3RhdHVzSW47XG4gICAgY29uc3Qgc3VwZXJ2aXNlZXNJZEluID0gcmVxdWVzdFBhcmFtZXRlcnM/LnN1cGVydmlzZWVzSWRJbjtcbiAgICBjb25zdCBzdXBlcnZpc29yc0lkSW4gPSByZXF1ZXN0UGFyYW1ldGVycz8uc3VwZXJ2aXNvcnNJZEluO1xuICAgIGNvbnN0IHdvcmtUeXBlID0gcmVxdWVzdFBhcmFtZXRlcnM/LndvcmtUeXBlO1xuICAgIGNvbnN0IHdvcmtUeXBlSW4gPSByZXF1ZXN0UGFyYW1ldGVycz8ud29ya1R5cGVJbjtcblxuICAgIGxldCBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IG5ldyBIdHRwUGFyYW1zKHsgZW5jb2RlcjogdGhpcy5lbmNvZGVyIH0pO1xuICAgIGlmIChicmFuY2ggIT09IHVuZGVmaW5lZCAmJiBicmFuY2ggIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PmJyYW5jaCxcbiAgICAgICAgXCJicmFuY2hcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChicmFuY2hJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi5icmFuY2hJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcImJyYW5jaF9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChkZXBhcnRtZW50ICE9PSB1bmRlZmluZWQgJiYgZGVwYXJ0bWVudCAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+ZGVwYXJ0bWVudCxcbiAgICAgICAgXCJkZXBhcnRtZW50XCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoZGVwYXJ0bWVudEluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLmRlcGFydG1lbnRJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcImRlcGFydG1lbnRfX2luXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCAmJiBpZCAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+aWQsXG4gICAgICAgIFwiaWRcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChpZEluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLmlkSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJpZF9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChpc1N0YWZmICE9PSB1bmRlZmluZWQgJiYgaXNTdGFmZiAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+aXNTdGFmZixcbiAgICAgICAgXCJpc19zdGFmZlwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGlzU3RhZmZJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi5pc1N0YWZmSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJpc19zdGFmZl9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChvcmRlcmluZyAhPT0gdW5kZWZpbmVkICYmIG9yZGVyaW5nICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5vcmRlcmluZyxcbiAgICAgICAgXCJvcmRlcmluZ1wiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHJvbGUgIT09IHVuZGVmaW5lZCAmJiByb2xlICE9PSBudWxsKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgPGFueT5yb2xlLFxuICAgICAgICBcInJvbGVcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChyb2xlSW4pIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICBbLi4ucm9sZUluXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwicm9sZV9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChzZWFyY2ggIT09IHVuZGVmaW5lZCAmJiBzZWFyY2ggIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PnNlYXJjaCxcbiAgICAgICAgXCJzZWFyY2hcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChzdGF0dXMgIT09IHVuZGVmaW5lZCAmJiBzdGF0dXMgIT09IG51bGwpIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICA8YW55PnN0YXR1cyxcbiAgICAgICAgXCJzdGF0dXNcIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChzdGF0dXNJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi5zdGF0dXNJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcInN0YXR1c19faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChzdXBlcnZpc2Vlc0lkSW4pIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICBbLi4uc3VwZXJ2aXNlZXNJZEluXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwic3VwZXJ2aXNlZXNfX2lkX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHN1cGVydmlzb3JzSWRJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi5zdXBlcnZpc29yc0lkSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJzdXBlcnZpc29yc19faWRfX2luXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAod29ya1R5cGUgIT09IHVuZGVmaW5lZCAmJiB3b3JrVHlwZSAhPT0gbnVsbCkge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIDxhbnk+d29ya1R5cGUsXG4gICAgICAgIFwid29ya190eXBlXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAod29ya1R5cGVJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi53b3JrVHlwZUluXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwid29ya190eXBlX19pblwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgIGxldCBsb2NhbFZhckNyZWRlbnRpYWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvLyBhdXRoZW50aWNhdGlvbiAoY29va2llQXV0aCkgcmVxdWlyZWRcbiAgICBsb2NhbFZhckNyZWRlbnRpYWwgPSB0aGlzLmNvbmZpZ3VyYXRpb24ubG9va3VwQ3JlZGVudGlhbChcImNvb2tpZUF1dGhcIik7XG4gICAgaWYgKGxvY2FsVmFyQ3JlZGVudGlhbCkge1xuICAgIH1cblxuICAgIC8vIGF1dGhlbnRpY2F0aW9uIChqd3RBdXRoKSByZXF1aXJlZFxuICAgIGxvY2FsVmFyQ3JlZGVudGlhbCA9IHRoaXMuY29uZmlndXJhdGlvbi5sb29rdXBDcmVkZW50aWFsKFwiand0QXV0aFwiKTtcbiAgICBpZiAobG9jYWxWYXJDcmVkZW50aWFsKSB7XG4gICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KFxuICAgICAgICBcIkF1dGhvcml6YXRpb25cIixcbiAgICAgICAgXCJCZWFyZXIgXCIgKyBsb2NhbFZhckNyZWRlbnRpYWwsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID1cbiAgICAgIG9wdGlvbnMgJiYgb3B0aW9ucy5odHRwSGVhZGVyQWNjZXB0O1xuICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyB0byBkZXRlcm1pbmUgdGhlIEFjY2VwdCBoZWFkZXJcbiAgICAgIGNvbnN0IGh0dHBIZWFkZXJBY2NlcHRzOiBzdHJpbmdbXSA9IFtcImFwcGxpY2F0aW9uL2pzb25cIl07XG4gICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCA9XG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoaHR0cEhlYWRlckFjY2VwdHMpO1xuICAgIH1cbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldChcbiAgICAgICAgXCJBY2NlcHRcIixcbiAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQsXG4gICAgICApO1xuICAgIH1cblxuICAgIGxldCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCB8IHVuZGVmaW5lZCA9XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMuY29udGV4dDtcbiAgICBpZiAobG9jYWxWYXJIdHRwQ29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBsb2NhbFZhckh0dHBDb250ZXh0ID0gbmV3IEh0dHBDb250ZXh0KCk7XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9XG4gICAgICBvcHRpb25zICYmIG9wdGlvbnMudHJhbnNmZXJDYWNoZTtcbiAgICBpZiAobG9jYWxWYXJUcmFuc2ZlckNhY2hlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGxvY2FsVmFyVHJhbnNmZXJDYWNoZSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyXG4gICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiLFxuICAgICAgXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIsXG4gICAgXTtcbiAgICBjb25zdCBodHRwQ29udGVudFR5cGVTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID1cbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJDb250ZW50VHlwZShjb25zdW1lcyk7XG4gICAgaWYgKGh0dHBDb250ZW50VHlwZVNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoXG4gICAgICAgIFwiQ29udGVudC1UeXBlXCIsXG4gICAgICAgIGh0dHBDb250ZW50VHlwZVNlbGVjdGVkLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzcG9uc2VUeXBlXzogXCJ0ZXh0XCIgfCBcImpzb25cIiB8IFwiYmxvYlwiID0gXCJqc29uXCI7XG4gICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aChcInRleHRcIikpIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlXyA9IFwidGV4dFwiO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpXG4gICAgICApIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlXyA9IFwianNvblwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlXyA9IFwiYmxvYlwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS92MS9leHBvcnQtdXNlcnMvc3RhcnQvYDtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8RXhwb3J0Sm9iRHRvPihcbiAgICAgIFwicG9zdFwiLFxuICAgICAgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICB7XG4gICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgIGJvZHk6IHVzZXJSZXNvdXJjZUNyZWF0ZUV4cG9ydEpvYlJlcXVlc3REdG8sXG4gICAgICAgIHBhcmFtczogbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3MsXG4gICAgICB9LFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
271
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LXVzZXJzLWFwaS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vYXBpL2V4cG9ydC11c2Vycy1hcGkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUNILHVEQUF1RDtBQUV2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUdMLFVBQVUsRUFJVixXQUFXLEdBQ1osTUFBTSxzQkFBc0IsQ0FBQztBQStCOUIsYUFBYTtBQUNiLE9BQU8sRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFN0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7O0FBWWxELE1BQU0sT0FBTyxxQkFDWCxTQUFRLFdBQVc7SUFJUDtJQURaLFlBQ1ksVUFBc0IsRUFDRCxRQUEyQixFQUM5QyxhQUE2QjtRQUV6QyxLQUFLLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBSnJCLGVBQVUsR0FBVixVQUFVLENBQVk7SUFLbEMsQ0FBQztJQXNDTSx1QkFBdUIsQ0FDNUIsaUJBQXVELEVBQ3ZELFVBQWUsTUFBTSxFQUNyQixpQkFBMEIsS0FBSyxFQUMvQixPQUlDO1FBRUQsTUFBTSxFQUFFLEdBQUcsaUJBQWlCLEVBQUUsRUFBRSxDQUFDO1FBQ2pDLElBQUksRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDcEMsTUFBTSxJQUFJLEtBQUssQ0FDYixtRkFBbUYsQ0FDcEYsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBRTFDLHVDQUF1QztRQUV2QyxvQ0FBb0M7UUFDcEMsZUFBZSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQ3pELFNBQVMsRUFDVCxlQUFlLEVBQ2YsZUFBZSxFQUNmLFNBQVMsQ0FDVixDQUFDO1FBRUYsTUFBTSxnQ0FBZ0MsR0FDcEMsT0FBTyxFQUFFLGdCQUFnQjtZQUN6QixJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO1FBQzlELElBQUksZ0NBQWdDLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDbkQsZUFBZSxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQ25DLFFBQVEsRUFDUixnQ0FBZ0MsQ0FDakMsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLG1CQUFtQixHQUN2QixPQUFPLEVBQUUsT0FBTyxJQUFJLElBQUksV0FBVyxFQUFFLENBQUM7UUFFeEMsTUFBTSxxQkFBcUIsR0FBWSxPQUFPLEVBQUUsYUFBYSxJQUFJLElBQUksQ0FBQztRQUV0RSxJQUFJLGFBQWEsR0FBNkIsTUFBTSxDQUFDO1FBQ3JELElBQUksZ0NBQWdDLEVBQUUsQ0FBQztZQUNyQyxJQUFJLGdDQUFnQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUN4RCxhQUFhLEdBQUcsTUFBTSxDQUFDO1lBQ3pCLENBQUM7aUJBQU0sSUFDTCxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxnQ0FBZ0MsQ0FBQyxFQUMvRCxDQUFDO2dCQUNELGFBQWEsR0FBRyxNQUFNLENBQUM7WUFDekIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGFBQWEsR0FBRyxNQUFNLENBQUM7WUFDekIsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLFlBQVksR0FBRyx3QkFBd0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLENBQUMsVUFBVSxDQUFDO1FBQ3ZNLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQzVCLE1BQU0sRUFDTixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLFlBQVksRUFBRSxFQUMvQztZQUNFLE9BQU8sRUFBRSxtQkFBbUI7WUFDNUIsWUFBWSxFQUFPLGFBQWE7WUFDaEMsZUFBZSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZTtZQUNuRCxPQUFPLEVBQUUsZUFBZTtZQUN4QixPQUFPLEVBQUUsT0FBTztZQUNoQixhQUFhLEVBQUUscUJBQXFCO1lBQ3BDLGNBQWMsRUFBRSxjQUFjO1NBQy9CLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFzQ00sZUFBZSxDQUNwQixpQkFBZ0QsRUFDaEQsVUFBZSxNQUFNLEVBQ3JCLGlCQUEwQixLQUFLLEVBQy9CLE9BSUM7UUFFRCxNQUFNLEtBQUssR0FBRyxpQkFBaUIsRUFBRSxLQUFLLENBQUM7UUFDdkMsTUFBTSxNQUFNLEdBQUcsaUJBQWlCLEVBQUUsTUFBTSxDQUFDO1FBQ3pDLE1BQU0sUUFBUSxHQUFHLGlCQUFpQixFQUFFLFFBQVEsQ0FBQztRQUM3QyxNQUFNLE1BQU0sR0FBRyxpQkFBaUIsRUFBRSxNQUFNLENBQUM7UUFFekMsSUFBSSx1QkFBdUIsR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN4RSx1QkFBdUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUM1Qyx1QkFBdUIsRUFDbEIsS0FBSyxFQUNWLE9BQU8sQ0FDUixDQUFDO1FBQ0YsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FDNUMsdUJBQXVCLEVBQ2xCLE1BQU0sRUFDWCxRQUFRLENBQ1QsQ0FBQztRQUNGLHVCQUF1QixHQUFHLElBQUksQ0FBQyxlQUFlLENBQzVDLHVCQUF1QixFQUNsQixRQUFRLEVBQ2IsVUFBVSxDQUNYLENBQUM7UUFDRix1QkFBdUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUM1Qyx1QkFBdUIsRUFDbEIsTUFBTSxFQUNYLFFBQVEsQ0FDVCxDQUFDO1FBRUYsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUUxQyx1Q0FBdUM7UUFFdkMsb0NBQW9DO1FBQ3BDLGVBQWUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUN6RCxTQUFTLEVBQ1QsZUFBZSxFQUNmLGVBQWUsRUFDZixTQUFTLENBQ1YsQ0FBQztRQUVGLE1BQU0sZ0NBQWdDLEdBQ3BDLE9BQU8sRUFBRSxnQkFBZ0I7WUFDekIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztRQUM5RCxJQUFJLGdDQUFnQyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ25ELGVBQWUsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUNuQyxRQUFRLEVBQ1IsZ0NBQWdDLENBQ2pDLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxtQkFBbUIsR0FDdkIsT0FBTyxFQUFFLE9BQU8sSUFBSSxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBRXhDLE1BQU0scUJBQXFCLEdBQVksT0FBTyxFQUFFLGFBQWEsSUFBSSxJQUFJLENBQUM7UUFFdEUsSUFBSSxhQUFhLEdBQTZCLE1BQU0sQ0FBQztRQUNyRCxJQUFJLGdDQUFnQyxFQUFFLENBQUM7WUFDckMsSUFBSSxnQ0FBZ0MsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDeEQsYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUN6QixDQUFDO2lCQUFNLElBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsZ0NBQWdDLENBQUMsRUFDL0QsQ0FBQztnQkFDRCxhQUFhLEdBQUcsTUFBTSxDQUFDO1lBQ3pCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixhQUFhLEdBQUcsTUFBTSxDQUFDO1lBQ3pCLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxZQUFZLEdBQUcsdUJBQXVCLENBQUM7UUFDM0MsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FDNUIsS0FBSyxFQUNMLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsWUFBWSxFQUFFLEVBQy9DO1lBQ0UsT0FBTyxFQUFFLG1CQUFtQjtZQUM1QixNQUFNLEVBQUUsdUJBQXVCO1lBQy9CLFlBQVksRUFBTyxhQUFhO1lBQ2hDLGVBQWUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWU7WUFDbkQsT0FBTyxFQUFFLGVBQWU7WUFDeEIsT0FBTyxFQUFFLE9BQU87WUFDaEIsYUFBYSxFQUFFLHFCQUFxQjtZQUNwQyxjQUFjLEVBQUUsY0FBYztTQUMvQixDQUNGLENBQUM7SUFDSixDQUFDO0lBc0NNLG1CQUFtQixDQUN4QixpQkFBbUQsRUFDbkQsVUFBZSxNQUFNLEVBQ3JCLGlCQUEwQixLQUFLLEVBQy9CLE9BSUM7UUFFRCxNQUFNLEVBQUUsR0FBRyxpQkFBaUIsRUFBRSxFQUFFLENBQUM7UUFDakMsSUFBSSxFQUFFLEtBQUssSUFBSSxJQUFJLEVBQUUsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNwQyxNQUFNLElBQUksS0FBSyxDQUNiLCtFQUErRSxDQUNoRixDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFFMUMsdUNBQXVDO1FBRXZDLG9DQUFvQztRQUNwQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FDekQsU0FBUyxFQUNULGVBQWUsRUFDZixlQUFlLEVBQ2YsU0FBUyxDQUNWLENBQUM7UUFFRixNQUFNLGdDQUFnQyxHQUNwQyxPQUFPLEVBQUUsZ0JBQWdCO1lBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7UUFDOUQsSUFBSSxnQ0FBZ0MsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNuRCxlQUFlLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FDbkMsUUFBUSxFQUNSLGdDQUFnQyxDQUNqQyxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sbUJBQW1CLEdBQ3ZCLE9BQU8sRUFBRSxPQUFPLElBQUksSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUV4QyxNQUFNLHFCQUFxQixHQUFZLE9BQU8sRUFBRSxhQUFhLElBQUksSUFBSSxDQUFDO1FBRXRFLElBQUksYUFBYSxHQUE2QixNQUFNLENBQUM7UUFDckQsSUFBSSxnQ0FBZ0MsRUFBRSxDQUFDO1lBQ3JDLElBQUksZ0NBQWdDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3hELGFBQWEsR0FBRyxNQUFNLENBQUM7WUFDekIsQ0FBQztpQkFBTSxJQUNMLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLGdDQUFnQyxDQUFDLEVBQy9ELENBQUM7Z0JBQ0QsYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUN6QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sYUFBYSxHQUFHLE1BQU0sQ0FBQztZQUN6QixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksWUFBWSxHQUFHLHdCQUF3QixJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDaE0sT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FDNUIsS0FBSyxFQUNMLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsWUFBWSxFQUFFLEVBQy9DO1lBQ0UsT0FBTyxFQUFFLG1CQUFtQjtZQUM1QixZQUFZLEVBQU8sYUFBYTtZQUNoQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlO1lBQ25ELE9BQU8sRUFBRSxlQUFlO1lBQ3hCLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLGFBQWEsRUFBRSxxQkFBcUI7WUFDcEMsY0FBYyxFQUFFLGNBQWM7U0FDL0IsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQXNDTSxzQkFBc0IsQ0FDM0IsaUJBQXNELEVBQ3RELFVBQWUsTUFBTSxFQUNyQixpQkFBMEIsS0FBSyxFQUMvQixPQUlDO1FBRUQsTUFBTSxxQ0FBcUMsR0FDekMsaUJBQWlCLEVBQUUscUNBQXFDLENBQUM7UUFDM0QsSUFDRSxxQ0FBcUMsS0FBSyxJQUFJO1lBQzlDLHFDQUFxQyxLQUFLLFNBQVMsRUFDbkQsQ0FBQztZQUNELE1BQU0sSUFBSSxLQUFLLENBQ2IscUhBQXFILENBQ3RILENBQUM7UUFDSixDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsaUJBQWlCLEVBQUUsTUFBTSxDQUFDO1FBQ3pDLE1BQU0sUUFBUSxHQUFHLGlCQUFpQixFQUFFLFFBQVEsQ0FBQztRQUM3QyxNQUFNLFVBQVUsR0FBRyxpQkFBaUIsRUFBRSxVQUFVLENBQUM7UUFDakQsTUFBTSxZQUFZLEdBQUcsaUJBQWlCLEVBQUUsWUFBWSxDQUFDO1FBQ3JELE1BQU0sRUFBRSxHQUFHLGlCQUFpQixFQUFFLEVBQUUsQ0FBQztRQUNqQyxNQUFNLElBQUksR0FBRyxpQkFBaUIsRUFBRSxJQUFJLENBQUM7UUFDckMsTUFBTSxPQUFPLEdBQUcsaUJBQWlCLEVBQUUsT0FBTyxDQUFDO1FBQzNDLE1BQU0sU0FBUyxHQUFHLGlCQUFpQixFQUFFLFNBQVMsQ0FBQztRQUMvQyxNQUFNLFFBQVEsR0FBRyxpQkFBaUIsRUFBRSxRQUFRLENBQUM7UUFDN0MsTUFBTSxJQUFJLEdBQUcsaUJBQWlCLEVBQUUsSUFBSSxDQUFDO1FBQ3JDLE1BQU0sTUFBTSxHQUFHLGlCQUFpQixFQUFFLE1BQU0sQ0FBQztRQUN6QyxNQUFNLE1BQU0sR0FBRyxpQkFBaUIsRUFBRSxNQUFNLENBQUM7UUFDekMsTUFBTSxNQUFNLEdBQUcsaUJBQWlCLEVBQUUsTUFBTSxDQUFDO1FBQ3pDLE1BQU0sUUFBUSxHQUFHLGlCQUFpQixFQUFFLFFBQVEsQ0FBQztRQUM3QyxNQUFNLGVBQWUsR0FBRyxpQkFBaUIsRUFBRSxlQUFlLENBQUM7UUFDM0QsTUFBTSxlQUFlLEdBQUcsaUJBQWlCLEVBQUUsZUFBZSxDQUFDO1FBQzNELE1BQU0sUUFBUSxHQUFHLGlCQUFpQixFQUFFLFFBQVEsQ0FBQztRQUM3QyxNQUFNLFVBQVUsR0FBRyxpQkFBaUIsRUFBRSxVQUFVLENBQUM7UUFFakQsSUFBSSx1QkFBdUIsR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN4RSx1QkFBdUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUM1Qyx1QkFBdUIsRUFDbEIsTUFBTSxFQUNYLFFBQVEsQ0FDVCxDQUFDO1FBQ0YsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLHVCQUF1QixHQUFHLElBQUksQ0FBQyxlQUFlLENBQzVDLHVCQUF1QixFQUN2QixDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQzdDLFlBQVksQ0FDYixDQUFDO1FBQ0osQ0FBQztRQUNELHVCQUF1QixHQUFHLElBQUksQ0FBQyxlQUFlLENBQzVDLHVCQUF1QixFQUNsQixVQUFVLEVBQ2YsWUFBWSxDQUNiLENBQUM7UUFDRixJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLHVCQUF1QixHQUFHLElBQUksQ0FBQyxlQUFlLENBQzVDLHVCQUF1QixFQUN2QixDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQ2pELGdCQUFnQixDQUNqQixDQUFDO1FBQ0osQ0FBQztRQUNELHVCQUF1QixHQUFHLElBQUksQ0FBQyxlQUFlLENBQzVDLHVCQUF1QixFQUNsQixFQUFFLEVBQ1AsSUFBSSxDQUNMLENBQUM7UUFDRixJQUFJLElBQUksRUFBRSxDQUFDO1lBQ1QsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FDNUMsdUJBQXVCLEVBQ3ZCLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFDekMsUUFBUSxDQUNULENBQUM7UUFDSixDQUFDO1FBQ0QsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FDNUMsdUJBQXVCLEVBQ2xCLE9BQU8sRUFDWixVQUFVLENBQ1gsQ0FBQztRQUNGLElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCx1QkFBdUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUM1Qyx1QkFBdUIsRUFDdkIsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUM5QyxjQUFjLENBQ2YsQ0FBQztRQUNKLENBQUM7UUFDRCx1QkFBdUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUM1Qyx1QkFBdUIsRUFDbEIsUUFBUSxFQUNiLFVBQVUsQ0FDWCxDQUFDO1FBQ0YsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FDNUMsdUJBQXVCLEVBQ2xCLElBQUksRUFDVCxNQUFNLENBQ1AsQ0FBQztRQUNGLElBQUksTUFBTSxFQUFFLENBQUM7WUFDWCx1QkFBdUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUM1Qyx1QkFBdUIsRUFDdkIsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUMzQyxVQUFVLENBQ1gsQ0FBQztRQUNKLENBQUM7UUFDRCx1QkFBdUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUM1Qyx1QkFBdUIsRUFDbEIsTUFBTSxFQUNYLFFBQVEsQ0FDVCxDQUFDO1FBQ0YsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FDNUMsdUJBQXVCLEVBQ2xCLE1BQU0sRUFDWCxRQUFRLENBQ1QsQ0FBQztRQUNGLElBQUksUUFBUSxFQUFFLENBQUM7WUFDYix1QkFBdUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUM1Qyx1QkFBdUIsRUFDdkIsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUM3QyxZQUFZLENBQ2IsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLHVCQUF1QixHQUFHLElBQUksQ0FBQyxlQUFlLENBQzVDLHVCQUF1QixFQUN2QixDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQ3BELHFCQUFxQixDQUN0QixDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksZUFBZSxFQUFFLENBQUM7WUFDcEIsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FDNUMsdUJBQXVCLEVBQ3ZCLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFDcEQscUJBQXFCLENBQ3RCLENBQUM7UUFDSixDQUFDO1FBQ0QsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FDNUMsdUJBQXVCLEVBQ2xCLFFBQVEsRUFDYixXQUFXLENBQ1osQ0FBQztRQUNGLElBQUksVUFBVSxFQUFFLENBQUM7WUFDZix1QkFBdUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUM1Qyx1QkFBdUIsRUFDdkIsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUMvQyxlQUFlLENBQ2hCLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUUxQyx1Q0FBdUM7UUFFdkMsb0NBQW9DO1FBQ3BDLGVBQWUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLHNCQUFzQixDQUN6RCxTQUFTLEVBQ1QsZUFBZSxFQUNmLGVBQWUsRUFDZixTQUFTLENBQ1YsQ0FBQztRQUVGLE1BQU0sZ0NBQWdDLEdBQ3BDLE9BQU8sRUFBRSxnQkFBZ0I7WUFDekIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztRQUM5RCxJQUFJLGdDQUFnQyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ25ELGVBQWUsR0FBRyxlQUFlLENBQUMsR0FBRyxDQUNuQyxRQUFRLEVBQ1IsZ0NBQWdDLENBQ2pDLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxtQkFBbUIsR0FDdkIsT0FBTyxFQUFFLE9BQU8sSUFBSSxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBRXhDLE1BQU0scUJBQXFCLEdBQVksT0FBTyxFQUFFLGFBQWEsSUFBSSxJQUFJLENBQUM7UUFFdEUsdUNBQXVDO1FBQ3ZDLE1BQU0sUUFBUSxHQUFhO1lBQ3pCLGtCQUFrQjtZQUNsQixtQ0FBbUM7WUFDbkMscUJBQXFCO1NBQ3RCLENBQUM7UUFDRixNQUFNLHVCQUF1QixHQUMzQixJQUFJLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZELElBQUksdUJBQXVCLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDMUMsZUFBZSxHQUFHLGVBQWUsQ0FBQyxHQUFHLENBQ25DLGNBQWMsRUFDZCx1QkFBdUIsQ0FDeEIsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLGFBQWEsR0FBNkIsTUFBTSxDQUFDO1FBQ3JELElBQUksZ0NBQWdDLEVBQUUsQ0FBQztZQUNyQyxJQUFJLGdDQUFnQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUN4RCxhQUFhLEdBQUcsTUFBTSxDQUFDO1lBQ3pCLENBQUM7aUJBQU0sSUFDTCxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxnQ0FBZ0MsQ0FBQyxFQUMvRCxDQUFDO2dCQUNELGFBQWEsR0FBRyxNQUFNLENBQUM7WUFDekIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGFBQWEsR0FBRyxNQUFNLENBQUM7WUFDekIsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLFlBQVksR0FBRyw2QkFBNkIsQ0FBQztRQUNqRCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUM1QixNQUFNLEVBQ04sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsR0FBRyxZQUFZLEVBQUUsRUFDL0M7WUFDRSxPQUFPLEVBQUUsbUJBQW1CO1lBQzVCLElBQUksRUFBRSxxQ0FBcUM7WUFDM0MsTUFBTSxFQUFFLHVCQUF1QjtZQUMvQixZQUFZLEVBQU8sYUFBYTtZQUNoQyxlQUFlLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlO1lBQ25ELE9BQU8sRUFBRSxlQUFlO1lBQ3hCLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLGFBQWEsRUFBRSxxQkFBcUI7WUFDcEMsY0FBYyxFQUFFLGNBQWM7U0FDL0IsQ0FDRixDQUFDO0lBQ0osQ0FBQzt3R0F4bUJVLHFCQUFxQiw0Q0FNVixTQUFTOzRHQU5wQixxQkFBcUIsY0FGcEIsTUFBTTs7NEZBRVAscUJBQXFCO2tCQUhqQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBT0ksUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxTQUFTOzswQkFDNUIsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRGVsbWFyIEFwaVxuICpcbiAqXG4gKlxuICogTk9URTogVGhpcyBjbGFzcyBpcyBhdXRvIGdlbmVyYXRlZCBieSBPcGVuQVBJIEdlbmVyYXRvciAoaHR0cHM6Ly9vcGVuYXBpLWdlbmVyYXRvci50ZWNoKS5cbiAqIGh0dHBzOi8vb3BlbmFwaS1nZW5lcmF0b3IudGVjaFxuICogRG8gbm90IGVkaXQgdGhlIGNsYXNzIG1hbnVhbGx5LlxuICovXG4vKiB0c2xpbnQ6ZGlzYWJsZTpuby11bnVzZWQtdmFyaWFibGUgbWVtYmVyLW9yZGVyaW5nICovXG5cbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHtcbiAgSHR0cENsaWVudCxcbiAgSHR0cEhlYWRlcnMsXG4gIEh0dHBQYXJhbXMsXG4gIEh0dHBSZXNwb25zZSxcbiAgSHR0cEV2ZW50LFxuICBIdHRwUGFyYW1ldGVyQ29kZWMsXG4gIEh0dHBDb250ZXh0LFxufSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uL2h0dHBcIjtcbmltcG9ydCB7IEN1c3RvbUh0dHBQYXJhbWV0ZXJDb2RlYyB9IGZyb20gXCIuLi9lbmNvZGVyXCI7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSBcInJ4anNcIjtcblxuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRXJyb3JSZXNwb25zZTQwMUR0byB9IGZyb20gXCIuLi9tb2RlbC9lcnJvci1yZXNwb25zZTQwMS5kdG9cIjtcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEVycm9yUmVzcG9uc2U0MDREdG8gfSBmcm9tIFwiLi4vbW9kZWwvZXJyb3ItcmVzcG9uc2U0MDQuZHRvXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlNDA1RHRvIH0gZnJvbSBcIi4uL21vZGVsL2Vycm9yLXJlc3BvbnNlNDA1LmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRXJyb3JSZXNwb25zZTQwNkR0byB9IGZyb20gXCIuLi9tb2RlbC9lcnJvci1yZXNwb25zZTQwNi5kdG9cIjtcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IEVycm9yUmVzcG9uc2U0MTVEdG8gfSBmcm9tIFwiLi4vbW9kZWwvZXJyb3ItcmVzcG9uc2U0MTUuZHRvXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBFcnJvclJlc3BvbnNlNTAwRHRvIH0gZnJvbSBcIi4uL21vZGVsL2Vycm9yLXJlc3BvbnNlNTAwLmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRXhwb3J0Sm9iRHRvIH0gZnJvbSBcIi4uL21vZGVsL2V4cG9ydC1qb2IuZHRvXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBFeHBvcnRVc2Vyc0NhbmNlbENyZWF0ZUVycm9yUmVzcG9uc2U0MDBEdG8gfSBmcm9tIFwiLi4vbW9kZWwvZXhwb3J0LXVzZXJzLWNhbmNlbC1jcmVhdGUtZXJyb3ItcmVzcG9uc2U0MDAuZHRvXCI7XG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBFeHBvcnRVc2Vyc0xpc3RFcnJvclJlc3BvbnNlNDAwRHRvIH0gZnJvbSBcIi4uL21vZGVsL2V4cG9ydC11c2Vycy1saXN0LWVycm9yLXJlc3BvbnNlNDAwLmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRXhwb3J0VXNlcnNSZXRyaWV2ZUVycm9yUmVzcG9uc2U0MDBEdG8gfSBmcm9tIFwiLi4vbW9kZWwvZXhwb3J0LXVzZXJzLXJldHJpZXZlLWVycm9yLXJlc3BvbnNlNDAwLmR0b1wiO1xuLy8gQHRzLWlnbm9yZVxuaW1wb3J0IHsgRXhwb3J0VXNlcnNTdGFydENyZWF0ZUVycm9yUmVzcG9uc2U0MDBEdG8gfSBmcm9tIFwiLi4vbW9kZWwvZXhwb3J0LXVzZXJzLXN0YXJ0LWNyZWF0ZS1lcnJvci1yZXNwb25zZTQwMC5kdG9cIjtcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IFBhZ2luYXRlZEV4cG9ydEpvYkxpc3REdG8gfSBmcm9tIFwiLi4vbW9kZWwvcGFnaW5hdGVkLWV4cG9ydC1qb2ItbGlzdC5kdG9cIjtcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCB7IFVzZXJSZXNvdXJjZUNyZWF0ZUV4cG9ydEpvYlJlcXVlc3REdG8gfSBmcm9tIFwiLi4vbW9kZWwvdXNlci1yZXNvdXJjZS1jcmVhdGUtZXhwb3J0LWpvYi1yZXF1ZXN0LmR0b1wiO1xuXG4vLyBAdHMtaWdub3JlXG5pbXBvcnQgeyBCQVNFX1BBVEgsIENPTExFQ1RJT05fRk9STUFUUyB9IGZyb20gXCIuLi92YXJpYWJsZXNcIjtcbmltcG9ydCB7IENvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vY29uZmlndXJhdGlvblwiO1xuaW1wb3J0IHsgQmFzZVNlcnZpY2UgfSBmcm9tIFwiLi4vYXBpLmJhc2Uuc2VydmljZVwiO1xuaW1wb3J0IHtcbiAgRXhwb3J0VXNlcnNBcGlTZXJ2aWNlSW50ZXJmYWNlLFxuICBFeHBvcnRVc2Vyc0NhbmNlbENyZWF0ZVJlcXVlc3RQYXJhbXMsXG4gIEV4cG9ydFVzZXJzTGlzdFJlcXVlc3RQYXJhbXMsXG4gIEV4cG9ydFVzZXJzUmV0cmlldmVSZXF1ZXN0UGFyYW1zLFxuICBFeHBvcnRVc2Vyc1N0YXJ0Q3JlYXRlUmVxdWVzdFBhcmFtcyxcbn0gZnJvbSBcIi4vZXhwb3J0LXVzZXJzLWFwaS5zZXJ2aWNlSW50ZXJmYWNlXCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogXCJyb290XCIsXG59KVxuZXhwb3J0IGNsYXNzIEV4cG9ydFVzZXJzQXBpU2VydmljZVxuICBleHRlbmRzIEJhc2VTZXJ2aWNlXG4gIGltcGxlbWVudHMgRXhwb3J0VXNlcnNBcGlTZXJ2aWNlSW50ZXJmYWNlXG57XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBodHRwQ2xpZW50OiBIdHRwQ2xpZW50LFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQkFTRV9QQVRIKSBiYXNlUGF0aDogc3RyaW5nIHwgc3RyaW5nW10sXG4gICAgQE9wdGlvbmFsKCkgY29uZmlndXJhdGlvbj86IENvbmZpZ3VyYXRpb24sXG4gICkge1xuICAgIHN1cGVyKGJhc2VQYXRoLCBjb25maWd1cmF0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYW5jZWwgZXhwb3J0IGpvYiB0aGF0IGlzIGluIHByb2dyZXNzLlxuICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgKi9cbiAgcHVibGljIGV4cG9ydFVzZXJzQ2FuY2VsQ3JlYXRlKFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzOiBFeHBvcnRVc2Vyc0NhbmNlbENyZWF0ZVJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZT86IFwiYm9keVwiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxFeHBvcnRKb2JEdG8+O1xuICBwdWJsaWMgZXhwb3J0VXNlcnNDYW5jZWxDcmVhdGUoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IEV4cG9ydFVzZXJzQ2FuY2VsQ3JlYXRlUmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlPzogXCJyZXNwb25zZVwiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxIdHRwUmVzcG9uc2U8RXhwb3J0Sm9iRHRvPj47XG4gIHB1YmxpYyBleHBvcnRVc2Vyc0NhbmNlbENyZWF0ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogRXhwb3J0VXNlcnNDYW5jZWxDcmVhdGVSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcImV2ZW50c1wiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8RXhwb3J0Sm9iRHRvPj47XG4gIHB1YmxpYyBleHBvcnRVc2Vyc0NhbmNlbENyZWF0ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogRXhwb3J0VXNlcnNDYW5jZWxDcmVhdGVSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU6IGFueSA9IFwiYm9keVwiLFxuICAgIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgaWQgPSByZXF1ZXN0UGFyYW1ldGVycz8uaWQ7XG4gICAgaWYgKGlkID09PSBudWxsIHx8IGlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJSZXF1aXJlZCBwYXJhbWV0ZXIgaWQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBleHBvcnRVc2Vyc0NhbmNlbENyZWF0ZS5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAvLyBhdXRoZW50aWNhdGlvbiAoY29va2llQXV0aCkgcmVxdWlyZWRcblxuICAgIC8vIGF1dGhlbnRpY2F0aW9uIChqd3RBdXRoKSByZXF1aXJlZFxuICAgIGxvY2FsVmFySGVhZGVycyA9IHRoaXMuY29uZmlndXJhdGlvbi5hZGRDcmVkZW50aWFsVG9IZWFkZXJzKFxuICAgICAgXCJqd3RBdXRoXCIsXG4gICAgICBcIkF1dGhvcml6YXRpb25cIixcbiAgICAgIGxvY2FsVmFySGVhZGVycyxcbiAgICAgIFwiQmVhcmVyIFwiLFxuICAgICk7XG5cbiAgICBjb25zdCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID1cbiAgICAgIG9wdGlvbnM/Lmh0dHBIZWFkZXJBY2NlcHQgPz9cbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoW1wiYXBwbGljYXRpb24vanNvblwiXSk7XG4gICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoXG4gICAgICAgIFwiQWNjZXB0XCIsXG4gICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCA9XG4gICAgICBvcHRpb25zPy5jb250ZXh0ID8/IG5ldyBIdHRwQ29udGV4dCgpO1xuXG4gICAgY29uc3QgbG9jYWxWYXJUcmFuc2ZlckNhY2hlOiBib29sZWFuID0gb3B0aW9ucz8udHJhbnNmZXJDYWNoZSA/PyB0cnVlO1xuXG4gICAgbGV0IHJlc3BvbnNlVHlwZV86IFwidGV4dFwiIHwgXCJqc29uXCIgfCBcImJsb2JcIiA9IFwianNvblwiO1xuICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCkge1xuICAgICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLnN0YXJ0c1dpdGgoXCJ0ZXh0XCIpKSB7XG4gICAgICAgIHJlc3BvbnNlVHlwZV8gPSBcInRleHRcIjtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5pc0pzb25NaW1lKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKVxuICAgICAgKSB7XG4gICAgICAgIHJlc3BvbnNlVHlwZV8gPSBcImpzb25cIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3BvbnNlVHlwZV8gPSBcImJsb2JcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJQYXRoID0gYC9hcGkvdjEvZXhwb3J0LXVzZXJzLyR7dGhpcy5jb25maWd1cmF0aW9uLmVuY29kZVBhcmFtKHsgbmFtZTogXCJpZFwiLCB2YWx1ZTogaWQsIGluOiBcInBhdGhcIiwgc3R5bGU6IFwic2ltcGxlXCIsIGV4cGxvZGU6IGZhbHNlLCBkYXRhVHlwZTogXCJudW1iZXJcIiwgZGF0YUZvcm1hdDogdW5kZWZpbmVkIH0pfS9jYW5jZWwvYDtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8RXhwb3J0Sm9iRHRvPihcbiAgICAgIFwicG9zdFwiLFxuICAgICAgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICB7XG4gICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3MsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVmlld3NldCBmb3IgZXhwb3J0aW5nIHVzZXJzLlxuICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgKi9cbiAgcHVibGljIGV4cG9ydFVzZXJzTGlzdChcbiAgICByZXF1ZXN0UGFyYW1ldGVycz86IEV4cG9ydFVzZXJzTGlzdFJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZT86IFwiYm9keVwiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxQYWdpbmF0ZWRFeHBvcnRKb2JMaXN0RHRvPjtcbiAgcHVibGljIGV4cG9ydFVzZXJzTGlzdChcbiAgICByZXF1ZXN0UGFyYW1ldGVycz86IEV4cG9ydFVzZXJzTGlzdFJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZT86IFwicmVzcG9uc2VcIixcbiAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPFBhZ2luYXRlZEV4cG9ydEpvYkxpc3REdG8+PjtcbiAgcHVibGljIGV4cG9ydFVzZXJzTGlzdChcbiAgICByZXF1ZXN0UGFyYW1ldGVycz86IEV4cG9ydFVzZXJzTGlzdFJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZT86IFwiZXZlbnRzXCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxQYWdpbmF0ZWRFeHBvcnRKb2JMaXN0RHRvPj47XG4gIHB1YmxpYyBleHBvcnRVc2Vyc0xpc3QoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM/OiBFeHBvcnRVc2Vyc0xpc3RSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU6IGFueSA9IFwiYm9keVwiLFxuICAgIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgbGltaXQgPSByZXF1ZXN0UGFyYW1ldGVycz8ubGltaXQ7XG4gICAgY29uc3Qgb2Zmc2V0ID0gcmVxdWVzdFBhcmFtZXRlcnM/Lm9mZnNldDtcbiAgICBjb25zdCBvcmRlcmluZyA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5vcmRlcmluZztcbiAgICBjb25zdCBzZWFyY2ggPSByZXF1ZXN0UGFyYW1ldGVycz8uc2VhcmNoO1xuXG4gICAgbGV0IGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gbmV3IEh0dHBQYXJhbXMoeyBlbmNvZGVyOiB0aGlzLmVuY29kZXIgfSk7XG4gICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgPGFueT5saW1pdCxcbiAgICAgIFwibGltaXRcIixcbiAgICApO1xuICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgIDxhbnk+b2Zmc2V0LFxuICAgICAgXCJvZmZzZXRcIixcbiAgICApO1xuICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgIDxhbnk+b3JkZXJpbmcsXG4gICAgICBcIm9yZGVyaW5nXCIsXG4gICAgKTtcbiAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICA8YW55PnNlYXJjaCxcbiAgICAgIFwic2VhcmNoXCIsXG4gICAgKTtcblxuICAgIGxldCBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgLy8gYXV0aGVudGljYXRpb24gKGNvb2tpZUF1dGgpIHJlcXVpcmVkXG5cbiAgICAvLyBhdXRoZW50aWNhdGlvbiAoand0QXV0aCkgcmVxdWlyZWRcbiAgICBsb2NhbFZhckhlYWRlcnMgPSB0aGlzLmNvbmZpZ3VyYXRpb24uYWRkQ3JlZGVudGlhbFRvSGVhZGVycyhcbiAgICAgIFwiand0QXV0aFwiLFxuICAgICAgXCJBdXRob3JpemF0aW9uXCIsXG4gICAgICBsb2NhbFZhckhlYWRlcnMsXG4gICAgICBcIkJlYXJlciBcIixcbiAgICApO1xuXG4gICAgY29uc3QgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9XG4gICAgICBvcHRpb25zPy5odHRwSGVhZGVyQWNjZXB0ID8/XG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uc2VsZWN0SGVhZGVyQWNjZXB0KFtcImFwcGxpY2F0aW9uL2pzb25cIl0pO1xuICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsb2NhbFZhckhlYWRlcnMgPSBsb2NhbFZhckhlYWRlcnMuc2V0KFxuICAgICAgICBcIkFjY2VwdFwiLFxuICAgICAgICBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgbG9jYWxWYXJIdHRwQ29udGV4dDogSHR0cENvbnRleHQgPVxuICAgICAgb3B0aW9ucz8uY29udGV4dCA/PyBuZXcgSHR0cENvbnRleHQoKTtcblxuICAgIGNvbnN0IGxvY2FsVmFyVHJhbnNmZXJDYWNoZTogYm9vbGVhbiA9IG9wdGlvbnM/LnRyYW5zZmVyQ2FjaGUgPz8gdHJ1ZTtcblxuICAgIGxldCByZXNwb25zZVR5cGVfOiBcInRleHRcIiB8IFwianNvblwiIHwgXCJibG9iXCIgPSBcImpzb25cIjtcbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpIHtcbiAgICAgIGlmIChsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZC5zdGFydHNXaXRoKFwidGV4dFwiKSkge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJ0ZXh0XCI7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uaXNKc29uTWltZShsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZClcbiAgICAgICkge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJqc29uXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNwb25zZVR5cGVfID0gXCJibG9iXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFyUGF0aCA9IGAvYXBpL3YxL2V4cG9ydC11c2Vycy9gO1xuICAgIHJldHVybiB0aGlzLmh0dHBDbGllbnQucmVxdWVzdDxQYWdpbmF0ZWRFeHBvcnRKb2JMaXN0RHRvPihcbiAgICAgIFwiZ2V0XCIsXG4gICAgICBgJHt0aGlzLmNvbmZpZ3VyYXRpb24uYmFzZVBhdGh9JHtsb2NhbFZhclBhdGh9YCxcbiAgICAgIHtcbiAgICAgICAgY29udGV4dDogbG9jYWxWYXJIdHRwQ29udGV4dCxcbiAgICAgICAgcGFyYW1zOiBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgcmVzcG9uc2VUeXBlOiA8YW55PnJlc3BvbnNlVHlwZV8sXG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogdGhpcy5jb25maWd1cmF0aW9uLndpdGhDcmVkZW50aWFscyxcbiAgICAgICAgaGVhZGVyczogbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgICBvYnNlcnZlOiBvYnNlcnZlLFxuICAgICAgICB0cmFuc2ZlckNhY2hlOiBsb2NhbFZhclRyYW5zZmVyQ2FjaGUsXG4gICAgICAgIHJlcG9ydFByb2dyZXNzOiByZXBvcnRQcm9ncmVzcyxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWaWV3c2V0IGZvciBleHBvcnRpbmcgdXNlcnMuXG4gICAqIEBwYXJhbSByZXF1ZXN0UGFyYW1ldGVyc1xuICAgKiBAcGFyYW0gb2JzZXJ2ZSBzZXQgd2hldGhlciBvciBub3QgdG8gcmV0dXJuIHRoZSBkYXRhIE9ic2VydmFibGUgYXMgdGhlIGJvZHksIHJlc3BvbnNlIG9yIGV2ZW50cy4gZGVmYXVsdHMgdG8gcmV0dXJuaW5nIHRoZSBib2R5LlxuICAgKiBAcGFyYW0gcmVwb3J0UHJvZ3Jlc3MgZmxhZyB0byByZXBvcnQgcmVxdWVzdCBhbmQgcmVzcG9uc2UgcHJvZ3Jlc3MuXG4gICAqL1xuICBwdWJsaWMgZXhwb3J0VXNlcnNSZXRyaWV2ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogRXhwb3J0VXNlcnNSZXRyaWV2ZVJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZT86IFwiYm9keVwiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxFeHBvcnRKb2JEdG8+O1xuICBwdWJsaWMgZXhwb3J0VXNlcnNSZXRyaWV2ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogRXhwb3J0VXNlcnNSZXRyaWV2ZVJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZT86IFwicmVzcG9uc2VcIixcbiAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8SHR0cFJlc3BvbnNlPEV4cG9ydEpvYkR0bz4+O1xuICBwdWJsaWMgZXhwb3J0VXNlcnNSZXRyaWV2ZShcbiAgICByZXF1ZXN0UGFyYW1ldGVyczogRXhwb3J0VXNlcnNSZXRyaWV2ZVJlcXVlc3RQYXJhbXMsXG4gICAgb2JzZXJ2ZT86IFwiZXZlbnRzXCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPEh0dHBFdmVudDxFeHBvcnRKb2JEdG8+PjtcbiAgcHVibGljIGV4cG9ydFVzZXJzUmV0cmlldmUoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IEV4cG9ydFVzZXJzUmV0cmlldmVSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU6IGFueSA9IFwiYm9keVwiLFxuICAgIHJlcG9ydFByb2dyZXNzOiBib29sZWFuID0gZmFsc2UsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgaWQgPSByZXF1ZXN0UGFyYW1ldGVycz8uaWQ7XG4gICAgaWYgKGlkID09PSBudWxsIHx8IGlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJSZXF1aXJlZCBwYXJhbWV0ZXIgaWQgd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBleHBvcnRVc2Vyc1JldHJpZXZlLlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5kZWZhdWx0SGVhZGVycztcblxuICAgIC8vIGF1dGhlbnRpY2F0aW9uIChjb29raWVBdXRoKSByZXF1aXJlZFxuXG4gICAgLy8gYXV0aGVudGljYXRpb24gKGp3dEF1dGgpIHJlcXVpcmVkXG4gICAgbG9jYWxWYXJIZWFkZXJzID0gdGhpcy5jb25maWd1cmF0aW9uLmFkZENyZWRlbnRpYWxUb0hlYWRlcnMoXG4gICAgICBcImp3dEF1dGhcIixcbiAgICAgIFwiQXV0aG9yaXphdGlvblwiLFxuICAgICAgbG9jYWxWYXJIZWFkZXJzLFxuICAgICAgXCJCZWFyZXIgXCIsXG4gICAgKTtcblxuICAgIGNvbnN0IGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkOiBzdHJpbmcgfCB1bmRlZmluZWQgPVxuICAgICAgb3B0aW9ucz8uaHR0cEhlYWRlckFjY2VwdCA/P1xuICAgICAgdGhpcy5jb25maWd1cmF0aW9uLnNlbGVjdEhlYWRlckFjY2VwdChbXCJhcHBsaWNhdGlvbi9qc29uXCJdKTtcbiAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbG9jYWxWYXJIZWFkZXJzID0gbG9jYWxWYXJIZWFkZXJzLnNldChcbiAgICAgICAgXCJBY2NlcHRcIixcbiAgICAgICAgbG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGxvY2FsVmFySHR0cENvbnRleHQ6IEh0dHBDb250ZXh0ID1cbiAgICAgIG9wdGlvbnM/LmNvbnRleHQgPz8gbmV3IEh0dHBDb250ZXh0KCk7XG5cbiAgICBjb25zdCBsb2NhbFZhclRyYW5zZmVyQ2FjaGU6IGJvb2xlYW4gPSBvcHRpb25zPy50cmFuc2ZlckNhY2hlID8/IHRydWU7XG5cbiAgICBsZXQgcmVzcG9uc2VUeXBlXzogXCJ0ZXh0XCIgfCBcImpzb25cIiB8IFwiYmxvYlwiID0gXCJqc29uXCI7XG4gICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aChcInRleHRcIikpIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlXyA9IFwidGV4dFwiO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpXG4gICAgICApIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlXyA9IFwianNvblwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlXyA9IFwiYmxvYlwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS92MS9leHBvcnQtdXNlcnMvJHt0aGlzLmNvbmZpZ3VyYXRpb24uZW5jb2RlUGFyYW0oeyBuYW1lOiBcImlkXCIsIHZhbHVlOiBpZCwgaW46IFwicGF0aFwiLCBzdHlsZTogXCJzaW1wbGVcIiwgZXhwbG9kZTogZmFsc2UsIGRhdGFUeXBlOiBcIm51bWJlclwiLCBkYXRhRm9ybWF0OiB1bmRlZmluZWQgfSl9L2A7XG4gICAgcmV0dXJuIHRoaXMuaHR0cENsaWVudC5yZXF1ZXN0PEV4cG9ydEpvYkR0bz4oXG4gICAgICBcImdldFwiLFxuICAgICAgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICB7XG4gICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3MsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBlbmRwb2ludCBjcmVhdGVzIGV4cG9ydCBqb2IgYW5kIHN0YXJ0cyBpdC4gVG8gbW9uaXRvciBwcm9ncmVzcyB1c2UgZGV0YWlsIGVuZHBvaW50IGZvciBqb2JzIHRvIGZldGNoIHN0YXRlIG9mIGpvYi4gT25jZSBpdFxcJiMzOTtzIHN0YXR1cyBpcyAmI3g2MDtFWFBPUlRFRCYjeDYwOywgeW91IGNhbiBkb3dubG9hZCBmaWxlLlxuICAgKiBAcGFyYW0gcmVxdWVzdFBhcmFtZXRlcnNcbiAgICogQHBhcmFtIG9ic2VydmUgc2V0IHdoZXRoZXIgb3Igbm90IHRvIHJldHVybiB0aGUgZGF0YSBPYnNlcnZhYmxlIGFzIHRoZSBib2R5LCByZXNwb25zZSBvciBldmVudHMuIGRlZmF1bHRzIHRvIHJldHVybmluZyB0aGUgYm9keS5cbiAgICogQHBhcmFtIHJlcG9ydFByb2dyZXNzIGZsYWcgdG8gcmVwb3J0IHJlcXVlc3QgYW5kIHJlc3BvbnNlIHByb2dyZXNzLlxuICAgKi9cbiAgcHVibGljIGV4cG9ydFVzZXJzU3RhcnRDcmVhdGUoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IEV4cG9ydFVzZXJzU3RhcnRDcmVhdGVSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcImJvZHlcIixcbiAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW4sXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIGh0dHBIZWFkZXJBY2NlcHQ/OiBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICAgIGNvbnRleHQ/OiBIdHRwQ29udGV4dDtcbiAgICAgIHRyYW5zZmVyQ2FjaGU/OiBib29sZWFuO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8RXhwb3J0Sm9iRHRvPjtcbiAgcHVibGljIGV4cG9ydFVzZXJzU3RhcnRDcmVhdGUoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IEV4cG9ydFVzZXJzU3RhcnRDcmVhdGVSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcInJlc3BvbnNlXCIsXG4gICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPEh0dHBSZXNwb25zZTxFeHBvcnRKb2JEdG8+PjtcbiAgcHVibGljIGV4cG9ydFVzZXJzU3RhcnRDcmVhdGUoXG4gICAgcmVxdWVzdFBhcmFtZXRlcnM6IEV4cG9ydFVzZXJzU3RhcnRDcmVhdGVSZXF1ZXN0UGFyYW1zLFxuICAgIG9ic2VydmU/OiBcImV2ZW50c1wiLFxuICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbixcbiAgICBvcHRpb25zPzoge1xuICAgICAgaHR0cEhlYWRlckFjY2VwdD86IFwiYXBwbGljYXRpb24vanNvblwiO1xuICAgICAgY29udGV4dD86IEh0dHBDb250ZXh0O1xuICAgICAgdHJhbnNmZXJDYWNoZT86IGJvb2xlYW47XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxIdHRwRXZlbnQ8RXhwb3J0Sm9iRHRvPj47XG4gIHB1YmxpYyBleHBvcnRVc2Vyc1N0YXJ0Q3JlYXRlKFxuICAgIHJlcXVlc3RQYXJhbWV0ZXJzOiBFeHBvcnRVc2Vyc1N0YXJ0Q3JlYXRlUmVxdWVzdFBhcmFtcyxcbiAgICBvYnNlcnZlOiBhbnkgPSBcImJvZHlcIixcbiAgICByZXBvcnRQcm9ncmVzczogYm9vbGVhbiA9IGZhbHNlLFxuICAgIG9wdGlvbnM/OiB7XG4gICAgICBodHRwSGVhZGVyQWNjZXB0PzogXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgICBjb250ZXh0PzogSHR0cENvbnRleHQ7XG4gICAgICB0cmFuc2ZlckNhY2hlPzogYm9vbGVhbjtcbiAgICB9LFxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IHVzZXJSZXNvdXJjZUNyZWF0ZUV4cG9ydEpvYlJlcXVlc3REdG8gPVxuICAgICAgcmVxdWVzdFBhcmFtZXRlcnM/LnVzZXJSZXNvdXJjZUNyZWF0ZUV4cG9ydEpvYlJlcXVlc3REdG87XG4gICAgaWYgKFxuICAgICAgdXNlclJlc291cmNlQ3JlYXRlRXhwb3J0Sm9iUmVxdWVzdER0byA9PT0gbnVsbCB8fFxuICAgICAgdXNlclJlc291cmNlQ3JlYXRlRXhwb3J0Sm9iUmVxdWVzdER0byA9PT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiUmVxdWlyZWQgcGFyYW1ldGVyIHVzZXJSZXNvdXJjZUNyZWF0ZUV4cG9ydEpvYlJlcXVlc3REdG8gd2FzIG51bGwgb3IgdW5kZWZpbmVkIHdoZW4gY2FsbGluZyBleHBvcnRVc2Vyc1N0YXJ0Q3JlYXRlLlwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgYnJhbmNoID0gcmVxdWVzdFBhcmFtZXRlcnM/LmJyYW5jaDtcbiAgICBjb25zdCBicmFuY2hJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5icmFuY2hJbjtcbiAgICBjb25zdCBkZXBhcnRtZW50ID0gcmVxdWVzdFBhcmFtZXRlcnM/LmRlcGFydG1lbnQ7XG4gICAgY29uc3QgZGVwYXJ0bWVudEluID0gcmVxdWVzdFBhcmFtZXRlcnM/LmRlcGFydG1lbnRJbjtcbiAgICBjb25zdCBpZCA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5pZDtcbiAgICBjb25zdCBpZEluID0gcmVxdWVzdFBhcmFtZXRlcnM/LmlkSW47XG4gICAgY29uc3QgaXNTdGFmZiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5pc1N0YWZmO1xuICAgIGNvbnN0IGlzU3RhZmZJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5pc1N0YWZmSW47XG4gICAgY29uc3Qgb3JkZXJpbmcgPSByZXF1ZXN0UGFyYW1ldGVycz8ub3JkZXJpbmc7XG4gICAgY29uc3Qgcm9sZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5yb2xlO1xuICAgIGNvbnN0IHJvbGVJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5yb2xlSW47XG4gICAgY29uc3Qgc2VhcmNoID0gcmVxdWVzdFBhcmFtZXRlcnM/LnNlYXJjaDtcbiAgICBjb25zdCBzdGF0dXMgPSByZXF1ZXN0UGFyYW1ldGVycz8uc3RhdHVzO1xuICAgIGNvbnN0IHN0YXR1c0luID0gcmVxdWVzdFBhcmFtZXRlcnM/LnN0YXR1c0luO1xuICAgIGNvbnN0IHN1cGVydmlzZWVzSWRJbiA9IHJlcXVlc3RQYXJhbWV0ZXJzPy5zdXBlcnZpc2Vlc0lkSW47XG4gICAgY29uc3Qgc3VwZXJ2aXNvcnNJZEluID0gcmVxdWVzdFBhcmFtZXRlcnM/LnN1cGVydmlzb3JzSWRJbjtcbiAgICBjb25zdCB3b3JrVHlwZSA9IHJlcXVlc3RQYXJhbWV0ZXJzPy53b3JrVHlwZTtcbiAgICBjb25zdCB3b3JrVHlwZUluID0gcmVxdWVzdFBhcmFtZXRlcnM/LndvcmtUeXBlSW47XG5cbiAgICBsZXQgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSBuZXcgSHR0cFBhcmFtcyh7IGVuY29kZXI6IHRoaXMuZW5jb2RlciB9KTtcbiAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICA8YW55PmJyYW5jaCxcbiAgICAgIFwiYnJhbmNoXCIsXG4gICAgKTtcbiAgICBpZiAoYnJhbmNoSW4pIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICBbLi4uYnJhbmNoSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJicmFuY2hfX2luXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICA8YW55PmRlcGFydG1lbnQsXG4gICAgICBcImRlcGFydG1lbnRcIixcbiAgICApO1xuICAgIGlmIChkZXBhcnRtZW50SW4pIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICBbLi4uZGVwYXJ0bWVudEluXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwiZGVwYXJ0bWVudF9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgIDxhbnk+aWQsXG4gICAgICBcImlkXCIsXG4gICAgKTtcbiAgICBpZiAoaWRJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi5pZEluXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwiaWRfX2luXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICA8YW55PmlzU3RhZmYsXG4gICAgICBcImlzX3N0YWZmXCIsXG4gICAgKTtcbiAgICBpZiAoaXNTdGFmZkluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLmlzU3RhZmZJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcImlzX3N0YWZmX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgPGFueT5vcmRlcmluZyxcbiAgICAgIFwib3JkZXJpbmdcIixcbiAgICApO1xuICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgIDxhbnk+cm9sZSxcbiAgICAgIFwicm9sZVwiLFxuICAgICk7XG4gICAgaWYgKHJvbGVJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi5yb2xlSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJyb2xlX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgPGFueT5zZWFyY2gsXG4gICAgICBcInNlYXJjaFwiLFxuICAgICk7XG4gICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgPGFueT5zdGF0dXMsXG4gICAgICBcInN0YXR1c1wiLFxuICAgICk7XG4gICAgaWYgKHN0YXR1c0luKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLnN0YXR1c0luXS5qb2luKENPTExFQ1RJT05fRk9STUFUU1tcImNzdlwiXSksXG4gICAgICAgIFwic3RhdHVzX19pblwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHN1cGVydmlzZWVzSWRJbikge1xuICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMgPSB0aGlzLmFkZFRvSHR0cFBhcmFtcyhcbiAgICAgICAgbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIFsuLi5zdXBlcnZpc2Vlc0lkSW5dLmpvaW4oQ09MTEVDVElPTl9GT1JNQVRTW1wiY3N2XCJdKSxcbiAgICAgICAgXCJzdXBlcnZpc2Vlc19faWRfX2luXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoc3VwZXJ2aXNvcnNJZEluKSB7XG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWRkVG9IdHRwUGFyYW1zKFxuICAgICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgICAgWy4uLnN1cGVydmlzb3JzSWRJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcInN1cGVydmlzb3JzX19pZF9faW5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICBsb2NhbFZhclF1ZXJ5UGFyYW1ldGVycyxcbiAgICAgIDxhbnk+d29ya1R5cGUsXG4gICAgICBcIndvcmtfdHlwZVwiLFxuICAgICk7XG4gICAgaWYgKHdvcmtUeXBlSW4pIHtcbiAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzID0gdGhpcy5hZGRUb0h0dHBQYXJhbXMoXG4gICAgICAgIGxvY2FsVmFyUXVlcnlQYXJhbWV0ZXJzLFxuICAgICAgICBbLi4ud29ya1R5cGVJbl0uam9pbihDT0xMRUNUSU9OX0ZPUk1BVFNbXCJjc3ZcIl0pLFxuICAgICAgICBcIndvcmtfdHlwZV9faW5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgbGV0IGxvY2FsVmFySGVhZGVycyA9IHRoaXMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAvLyBhdXRoZW50aWNhdGlvbiAoY29va2llQXV0aCkgcmVxdWlyZWRcblxuICAgIC8vIGF1dGhlbnRpY2F0aW9uIChqd3RBdXRoKSByZXF1aXJlZFxuICAgIGxvY2FsVmFySGVhZGVycyA9IHRoaXMuY29uZmlndXJhdGlvbi5hZGRDcmVkZW50aWFsVG9IZWFkZXJzKFxuICAgICAgXCJqd3RBdXRoXCIsXG4gICAgICBcIkF1dGhvcml6YXRpb25cIixcbiAgICAgIGxvY2FsVmFySGVhZGVycyxcbiAgICAgIFwiQmVhcmVyIFwiLFxuICAgICk7XG5cbiAgICBjb25zdCBsb2NhbFZhckh0dHBIZWFkZXJBY2NlcHRTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID1cbiAgICAgIG9wdGlvbnM/Lmh0dHBIZWFkZXJBY2NlcHQgPz9cbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJBY2NlcHQoW1wiYXBwbGljYXRpb24vanNvblwiXSk7XG4gICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoXG4gICAgICAgIFwiQWNjZXB0XCIsXG4gICAgICAgIGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBsb2NhbFZhckh0dHBDb250ZXh0OiBIdHRwQ29udGV4dCA9XG4gICAgICBvcHRpb25zPy5jb250ZXh0ID8/IG5ldyBIdHRwQ29udGV4dCgpO1xuXG4gICAgY29uc3QgbG9jYWxWYXJUcmFuc2ZlckNhY2hlOiBib29sZWFuID0gb3B0aW9ucz8udHJhbnNmZXJDYWNoZSA/PyB0cnVlO1xuXG4gICAgLy8gdG8gZGV0ZXJtaW5lIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyXG4gICAgY29uc3QgY29uc3VtZXM6IHN0cmluZ1tdID0gW1xuICAgICAgXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiLFxuICAgICAgXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCIsXG4gICAgXTtcbiAgICBjb25zdCBodHRwQ29udGVudFR5cGVTZWxlY3RlZDogc3RyaW5nIHwgdW5kZWZpbmVkID1cbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5zZWxlY3RIZWFkZXJDb250ZW50VHlwZShjb25zdW1lcyk7XG4gICAgaWYgKGh0dHBDb250ZW50VHlwZVNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGxvY2FsVmFySGVhZGVycyA9IGxvY2FsVmFySGVhZGVycy5zZXQoXG4gICAgICAgIFwiQ29udGVudC1UeXBlXCIsXG4gICAgICAgIGh0dHBDb250ZW50VHlwZVNlbGVjdGVkLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzcG9uc2VUeXBlXzogXCJ0ZXh0XCIgfCBcImpzb25cIiB8IFwiYmxvYlwiID0gXCJqc29uXCI7XG4gICAgaWYgKGxvY2FsVmFySHR0cEhlYWRlckFjY2VwdFNlbGVjdGVkKSB7XG4gICAgICBpZiAobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQuc3RhcnRzV2l0aChcInRleHRcIikpIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlXyA9IFwidGV4dFwiO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uLmlzSnNvbk1pbWUobG9jYWxWYXJIdHRwSGVhZGVyQWNjZXB0U2VsZWN0ZWQpXG4gICAgICApIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlXyA9IFwianNvblwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlXyA9IFwiYmxvYlwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBsb2NhbFZhclBhdGggPSBgL2FwaS92MS9leHBvcnQtdXNlcnMvc3RhcnQvYDtcbiAgICByZXR1cm4gdGhpcy5odHRwQ2xpZW50LnJlcXVlc3Q8RXhwb3J0Sm9iRHRvPihcbiAgICAgIFwicG9zdFwiLFxuICAgICAgYCR7dGhpcy5jb25maWd1cmF0aW9uLmJhc2VQYXRofSR7bG9jYWxWYXJQYXRofWAsXG4gICAgICB7XG4gICAgICAgIGNvbnRleHQ6IGxvY2FsVmFySHR0cENvbnRleHQsXG4gICAgICAgIGJvZHk6IHVzZXJSZXNvdXJjZUNyZWF0ZUV4cG9ydEpvYlJlcXVlc3REdG8sXG4gICAgICAgIHBhcmFtczogbG9jYWxWYXJRdWVyeVBhcmFtZXRlcnMsXG4gICAgICAgIHJlc3BvbnNlVHlwZTogPGFueT5yZXNwb25zZVR5cGVfLFxuICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRoaXMuY29uZmlndXJhdGlvbi53aXRoQ3JlZGVudGlhbHMsXG4gICAgICAgIGhlYWRlcnM6IGxvY2FsVmFySGVhZGVycyxcbiAgICAgICAgb2JzZXJ2ZTogb2JzZXJ2ZSxcbiAgICAgICAgdHJhbnNmZXJDYWNoZTogbG9jYWxWYXJUcmFuc2ZlckNhY2hlLFxuICAgICAgICByZXBvcnRQcm9ncmVzczogcmVwb3J0UHJvZ3Jlc3MsXG4gICAgICB9LFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|